diff --git a/packages/app-mobile/pluginAssets/index.js b/packages/app-mobile/pluginAssets/index.js index 2d110b773d7..c0185d59d3c 100644 --- a/packages/app-mobile/pluginAssets/index.js +++ b/packages/app-mobile/pluginAssets/index.js @@ -1,5 +1,5 @@ module.exports = { -hash:"addedbac5508e231800fe0f97c326075", files: { +hash:"cfa07333af79f4db4bc9ca008fb257f8", files: { 'highlight.js/atom-one-dark-reasonable.css': { data: require('./highlight.js/atom-one-dark-reasonable.css.base64.js'), mime: 'text/css', encoding: 'base64' }, 'highlight.js/atom-one-light.css': { data: require('./highlight.js/atom-one-light.css.base64.js'), mime: 'text/css', encoding: 'base64' }, 'katex/fonts/KaTeX_AMS-Regular.woff2': { data: require('./katex/fonts/KaTeX_AMS-Regular.woff2.base64.js'), mime: 'application/octet-stream', encoding: 'base64' }, diff --git a/packages/app-mobile/pluginAssets/index.web.js b/packages/app-mobile/pluginAssets/index.web.js index c50c6922a22..6d1b56ef9e1 100644 --- a/packages/app-mobile/pluginAssets/index.web.js +++ b/packages/app-mobile/pluginAssets/index.web.js @@ -1 +1 @@ -module.exports = {"hash":"addedbac5508e231800fe0f97c326075","files":["highlight.js/atom-one-dark-reasonable.css","highlight.js/atom-one-light.css","katex/fonts/KaTeX_AMS-Regular.woff2","katex/fonts/KaTeX_Caligraphic-Bold.woff2","katex/fonts/KaTeX_Caligraphic-Regular.woff2","katex/fonts/KaTeX_Fraktur-Bold.woff2","katex/fonts/KaTeX_Fraktur-Regular.woff2","katex/fonts/KaTeX_Main-Bold.woff2","katex/fonts/KaTeX_Main-BoldItalic.woff2","katex/fonts/KaTeX_Main-Italic.woff2","katex/fonts/KaTeX_Main-Regular.woff2","katex/fonts/KaTeX_Math-BoldItalic.woff2","katex/fonts/KaTeX_Math-Italic.woff2","katex/fonts/KaTeX_SansSerif-Bold.woff2","katex/fonts/KaTeX_SansSerif-Italic.woff2","katex/fonts/KaTeX_SansSerif-Regular.woff2","katex/fonts/KaTeX_Script-Regular.woff2","katex/fonts/KaTeX_Size1-Regular.woff2","katex/fonts/KaTeX_Size2-Regular.woff2","katex/fonts/KaTeX_Size3-Regular.woff2","katex/fonts/KaTeX_Size4-Regular.woff2","katex/fonts/KaTeX_Typewriter-Regular.woff2","katex/katex.css","mermaid/mermaid.min.js","mermaid/mermaid_render.js"]} \ No newline at end of file +module.exports = {"hash":"cfa07333af79f4db4bc9ca008fb257f8","files":["highlight.js/atom-one-dark-reasonable.css","highlight.js/atom-one-light.css","katex/fonts/KaTeX_AMS-Regular.woff2","katex/fonts/KaTeX_Caligraphic-Bold.woff2","katex/fonts/KaTeX_Caligraphic-Regular.woff2","katex/fonts/KaTeX_Fraktur-Bold.woff2","katex/fonts/KaTeX_Fraktur-Regular.woff2","katex/fonts/KaTeX_Main-Bold.woff2","katex/fonts/KaTeX_Main-BoldItalic.woff2","katex/fonts/KaTeX_Main-Italic.woff2","katex/fonts/KaTeX_Main-Regular.woff2","katex/fonts/KaTeX_Math-BoldItalic.woff2","katex/fonts/KaTeX_Math-Italic.woff2","katex/fonts/KaTeX_SansSerif-Bold.woff2","katex/fonts/KaTeX_SansSerif-Italic.woff2","katex/fonts/KaTeX_SansSerif-Regular.woff2","katex/fonts/KaTeX_Script-Regular.woff2","katex/fonts/KaTeX_Size1-Regular.woff2","katex/fonts/KaTeX_Size2-Regular.woff2","katex/fonts/KaTeX_Size3-Regular.woff2","katex/fonts/KaTeX_Size4-Regular.woff2","katex/fonts/KaTeX_Typewriter-Regular.woff2","katex/katex.css","mermaid/mermaid.min.js","mermaid/mermaid_render.js"]} \ No newline at end of file diff --git a/packages/app-mobile/pluginAssets/mermaid/mermaid.min.js.base64.js b/packages/app-mobile/pluginAssets/mermaid/mermaid.min.js.base64.js index 99f3ce73045..c94f26a1256 100644 --- a/packages/app-mobile/pluginAssets/mermaid/mermaid.min.js.base64.js +++ b/packages/app-mobile/pluginAssets/mermaid/mermaid.min.js.base64.js @@ -1 +1 @@ -module.exports = `KGZ1bmN0aW9uKEpNLEFnKXt0eXBlb2YgZXhwb3J0cz09Im9iamVjdCImJnR5cGVvZiBtb2R1bGU8InUiP21vZHVsZS5leHBvcnRzPUFnKCk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoQWcpOihKTT10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczpKTXx8c2VsZixKTS5tZXJtYWlkPUFnKCkpfSkodGhpcyxmdW5jdGlvbigpe3ZhciBGV2UsUldlOyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBKTShpKXtmb3IodmFyIHM9W10sdT0xO3U8YXJndW1lbnRzLmxlbmd0aDt1Kyspc1t1LTFdPWFyZ3VtZW50c1t1XTt2YXIgZD1BcnJheS5mcm9tKHR5cGVvZiBpPT0ic3RyaW5nIj9baV06aSk7ZFtkLmxlbmd0aC0xXT1kW2QubGVuZ3RoLTFdLnJlcGxhY2UoL1xyP1xuKFtcdCBdKikkLywiIik7dmFyIHA9ZC5yZWR1Y2UoZnVuY3Rpb24oeSxUKXt2YXIgXz1ULm1hdGNoKC9cbihbXHQgXSt8KD8hXHMpLikvZyk7cmV0dXJuIF8/eS5jb25jYXQoXy5tYXAoZnVuY3Rpb24oQSl7dmFyIFAsUjtyZXR1cm4oUj0oUD1BLm1hdGNoKC9bXHQgXS9nKSk9PT1udWxsfHxQPT09dm9pZCAwP3ZvaWQgMDpQLmxlbmd0aCkhPT1udWxsJiZSIT09dm9pZCAwP1I6MH0pKTp5fSxbXSk7aWYocC5sZW5ndGgpe3ZhciB2PW5ldyBSZWdFeHAoYApbCSBde2ArTWF0aC5taW4uYXBwbHkoTWF0aCxwKSsifSIsImciKTtkPWQubWFwKGZ1bmN0aW9uKHkpe3JldHVybiB5LnJlcGxhY2UodixgCmApfSl9ZFswXT1kWzBdLnJlcGxhY2UoL15ccj9cbi8sIiIpO3ZhciBiPWRbMF07cmV0dXJuIHMuZm9yRWFjaChmdW5jdGlvbih5LFQpe3ZhciBfPWIubWF0Y2goLyg/Ol58XG4pKCAqKSQvKSxBPV8/X1sxXToiIixQPXk7dHlwZW9mIHk9PSJzdHJpbmciJiZ5LmluY2x1ZGVzKGAKYCkmJihQPVN0cmluZyh5KS5zcGxpdChgCmApLm1hcChmdW5jdGlvbihSLEYpe3JldHVybiBGPT09MD9SOiIiK0ErUn0pLmpvaW4oYApgKSksYis9UCtkW1QrMV19KSxifXZhciBBZz10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9O2Z1bmN0aW9uIGhDKGkpe3JldHVybiBpJiZpLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLCJkZWZhdWx0Iik/aS5kZWZhdWx0Oml9dmFyIG9CZT17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGkscyl7KGZ1bmN0aW9uKHUsZCl7aS5leHBvcnRzPWQoKX0pKEFnLGZ1bmN0aW9uKCl7dmFyIHU9MWUzLGQ9NmU0LHA9MzZlNSx2PSJtaWxsaXNlY29uZCIsYj0ic2Vjb25kIix5PSJtaW51dGUiLFQ9ImhvdXIiLF89ImRheSIsQT0id2VlayIsUD0ibW9udGgiLFI9InF1YXJ0ZXIiLEY9InllYXIiLGo9ImRhdGUiLEs9IkludmFsaWQgRGF0ZSIsZWU9L14oXGR7NH0pWy0vXT8oXGR7MSwyfSk/Wy0vXT8oXGR7MCwyfSlbVHRcc10qKFxkezEsMn0pPzo/KFxkezEsMn0pPzo/KFxkezEsMn0pP1suOl0/KFxkKyk/JC8saWU9L1xbKFteXF1dKyldfFl7MSw0fXxNezEsNH18RHsxLDJ9fGR7MSw0fXxIezEsMn18aHsxLDJ9fGF8QXxtezEsMn18c3sxLDJ9fFp7MSwyfXxTU1MvZyxvZT17bmFtZToiZW4iLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSxtb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksb3JkaW5hbDpmdW5jdGlvbihGZSl7dmFyIFBlPVsidGgiLCJzdCIsIm5kIiwicmQiXSxqZT1GZSUxMDA7cmV0dXJuIlsiK0ZlKyhQZVsoamUtMjApJTEwXXx8UGVbamVdfHxQZVswXSkrIl0ifX0scGU9ZnVuY3Rpb24oRmUsUGUsamUpe3ZhciBJZT1TdHJpbmcoRmUpO3JldHVybiFJZXx8SWUubGVuZ3RoPj1QZT9GZToiIitBcnJheShQZSsxLUllLmxlbmd0aCkuam9pbihqZSkrRmV9LGJlPXtzOnBlLHo6ZnVuY3Rpb24oRmUpe3ZhciBQZT0tRmUudXRjT2Zmc2V0KCksamU9TWF0aC5hYnMoUGUpLEllPU1hdGguZmxvb3IoamUvNjApLFNlPWplJTYwO3JldHVybihQZTw9MD8iKyI6Ii0iKStwZShJZSwyLCIwIikrIjoiK3BlKFNlLDIsIjAiKX0sbTpmdW5jdGlvbiBGZShQZSxqZSl7aWYoUGUuZGF0ZSgpPGplLmRhdGUoKSlyZXR1cm4tRmUoamUsUGUpO3ZhciBJZT0xMiooamUueWVhcigpLVBlLnllYXIoKSkrKGplLm1vbnRoKCktUGUubW9udGgoKSksU2U9UGUuY2xvbmUoKS5hZGQoSWUsUCksQ2U9amUtU2U8MCxrZT1QZS5jbG9uZSgpLmFkZChJZSsoQ2U/LTE6MSksUCk7cmV0dXJuKygtKEllKyhqZS1TZSkvKENlP1NlLWtlOmtlLVNlKSl8fDApfSxhOmZ1bmN0aW9uKEZlKXtyZXR1cm4gRmU8MD9NYXRoLmNlaWwoRmUpfHwwOk1hdGguZmxvb3IoRmUpfSxwOmZ1bmN0aW9uKEZlKXtyZXR1cm57TTpQLHk6Rix3OkEsZDpfLEQ6aixoOlQsbTp5LHM6Yixtczp2LFE6Un1bRmVdfHxTdHJpbmcoRmV8fCIiKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL3MkLywiIil9LHU6ZnVuY3Rpb24oRmUpe3JldHVybiBGZT09PXZvaWQgMH19LGFlPSJlbiIsbmU9e307bmVbYWVdPW9lO3ZhciBzZT0iJGlzRGF5anNPYmplY3QiLGRlPWZ1bmN0aW9uKEZlKXtyZXR1cm4gRmUgaW5zdGFuY2VvZiB4ZXx8ISghRmV8fCFGZVtzZV0pfSxYPWZ1bmN0aW9uIEZlKFBlLGplLEllKXt2YXIgU2U7aWYoIVBlKXJldHVybiBhZTtpZih0eXBlb2YgUGU9PSJzdHJpbmciKXt2YXIgQ2U9UGUudG9Mb3dlckNhc2UoKTtuZVtDZV0mJihTZT1DZSksamUmJihuZVtDZV09amUsU2U9Q2UpO3ZhciBrZT1QZS5zcGxpdCgiLSIpO2lmKCFTZSYma2UubGVuZ3RoPjEpcmV0dXJuIEZlKGtlWzBdKX1lbHNle3ZhciBLZT1QZS5uYW1lO25lW0tlXT1QZSxTZT1LZX1yZXR1cm4hSWUmJlNlJiYoYWU9U2UpLFNlfHwhSWUmJmFlfSxnZT1mdW5jdGlvbihGZSxQZSl7aWYoZGUoRmUpKXJldHVybiBGZS5jbG9uZSgpO3ZhciBqZT10eXBlb2YgUGU9PSJvYmplY3QiP1BlOnt9O3JldHVybiBqZS5kYXRlPUZlLGplLmFyZ3M9YXJndW1lbnRzLG5ldyB4ZShqZSl9LFc9YmU7Vy5sPVgsVy5pPWRlLFcudz1mdW5jdGlvbihGZSxQZSl7cmV0dXJuIGdlKEZlLHtsb2NhbGU6UGUuJEwsdXRjOlBlLiR1LHg6UGUuJHgsJG9mZnNldDpQZS4kb2Zmc2V0fSl9O3ZhciB4ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIEZlKGplKXt0aGlzLiRMPVgoamUubG9jYWxlLG51bGwsITApLHRoaXMucGFyc2UoamUpLHRoaXMuJHg9dGhpcy4keHx8amUueHx8e30sdGhpc1tzZV09ITB9dmFyIFBlPUZlLnByb3RvdHlwZTtyZXR1cm4gUGUucGFyc2U9ZnVuY3Rpb24oamUpe3RoaXMuJGQ9ZnVuY3Rpb24oSWUpe3ZhciBTZT1JZS5kYXRlLENlPUllLnV0YztpZihTZT09PW51bGwpcmV0dXJuIG5ldyBEYXRlKE5hTik7aWYoVy51KFNlKSlyZXR1cm4gbmV3IERhdGU7aWYoU2UgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBuZXcgRGF0ZShTZSk7aWYodHlwZW9mIFNlPT0ic3RyaW5nIiYmIS9aJC9pLnRlc3QoU2UpKXt2YXIga2U9U2UubWF0Y2goZWUpO2lmKGtlKXt2YXIgS2U9a2VbMl0tMXx8MCxGdD0oa2VbN118fCIwIikuc3Vic3RyaW5nKDAsMyk7cmV0dXJuIENlP25ldyBEYXRlKERhdGUuVVRDKGtlWzFdLEtlLGtlWzNdfHwxLGtlWzRdfHwwLGtlWzVdfHwwLGtlWzZdfHwwLEZ0KSk6bmV3IERhdGUoa2VbMV0sS2Usa2VbM118fDEsa2VbNF18fDAsa2VbNV18fDAsa2VbNl18fDAsRnQpfX1yZXR1cm4gbmV3IERhdGUoU2UpfShqZSksdGhpcy5pbml0KCl9LFBlLmluaXQ9ZnVuY3Rpb24oKXt2YXIgamU9dGhpcy4kZDt0aGlzLiR5PWplLmdldEZ1bGxZZWFyKCksdGhpcy4kTT1qZS5nZXRNb250aCgpLHRoaXMuJEQ9amUuZ2V0RGF0ZSgpLHRoaXMuJFc9amUuZ2V0RGF5KCksdGhpcy4kSD1qZS5nZXRIb3VycygpLHRoaXMuJG09amUuZ2V0TWludXRlcygpLHRoaXMuJHM9amUuZ2V0U2Vjb25kcygpLHRoaXMuJG1zPWplLmdldE1pbGxpc2Vjb25kcygpfSxQZS4kdXRpbHM9ZnVuY3Rpb24oKXtyZXR1cm4gV30sUGUuaXNWYWxpZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLnRvU3RyaW5nKCkhPT1LfSxQZS5pc1NhbWU9ZnVuY3Rpb24oamUsSWUpe3ZhciBTZT1nZShqZSk7cmV0dXJuIHRoaXMuc3RhcnRPZihJZSk8PVNlJiZTZTw9dGhpcy5lbmRPZihJZSl9LFBlLmlzQWZ0ZXI9ZnVuY3Rpb24oamUsSWUpe3JldHVybiBnZShqZSk8dGhpcy5zdGFydE9mKEllKX0sUGUuaXNCZWZvcmU9ZnVuY3Rpb24oamUsSWUpe3JldHVybiB0aGlzLmVuZE9mKEllKTxnZShqZSl9LFBlLiRnPWZ1bmN0aW9uKGplLEllLFNlKXtyZXR1cm4gVy51KGplKT90aGlzW0llXTp0aGlzLnNldChTZSxqZSl9LFBlLnVuaXg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKS8xZTMpfSxQZS52YWx1ZU9mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQuZ2V0VGltZSgpfSxQZS5zdGFydE9mPWZ1bmN0aW9uKGplLEllKXt2YXIgU2U9dGhpcyxDZT0hIVcudShJZSl8fEllLGtlPVcucChqZSksS2U9ZnVuY3Rpb24oeHQsUHQpe3ZhciBRZT1XLncoU2UuJHU/RGF0ZS5VVEMoU2UuJHksUHQseHQpOm5ldyBEYXRlKFNlLiR5LFB0LHh0KSxTZSk7cmV0dXJuIENlP1FlOlFlLmVuZE9mKF8pfSxGdD1mdW5jdGlvbih4dCxQdCl7cmV0dXJuIFcudyhTZS50b0RhdGUoKVt4dF0uYXBwbHkoU2UudG9EYXRlKCJzIiksKENlP1swLDAsMCwwXTpbMjMsNTksNTksOTk5XSkuc2xpY2UoUHQpKSxTZSl9LE5lPXRoaXMuJFcsZ249dGhpcy4kTSxfdD10aGlzLiRELEV0PSJzZXQiKyh0aGlzLiR1PyJVVEMiOiIiKTtzd2l0Y2goa2Upe2Nhc2UgRjpyZXR1cm4gQ2U/S2UoMSwwKTpLZSgzMSwxMSk7Y2FzZSBQOnJldHVybiBDZT9LZSgxLGduKTpLZSgwLGduKzEpO2Nhc2UgQTp2YXIgR3Q9dGhpcy4kbG9jYWxlKCkud2Vla1N0YXJ0fHwwLGxuPShOZTxHdD9OZSs3Ok5lKS1HdDtyZXR1cm4gS2UoQ2U/X3QtbG46X3QrKDYtbG4pLGduKTtjYXNlIF86Y2FzZSBqOnJldHVybiBGdChFdCsiSG91cnMiLDApO2Nhc2UgVDpyZXR1cm4gRnQoRXQrIk1pbnV0ZXMiLDEpO2Nhc2UgeTpyZXR1cm4gRnQoRXQrIlNlY29uZHMiLDIpO2Nhc2UgYjpyZXR1cm4gRnQoRXQrIk1pbGxpc2Vjb25kcyIsMyk7ZGVmYXVsdDpyZXR1cm4gdGhpcy5jbG9uZSgpfX0sUGUuZW5kT2Y9ZnVuY3Rpb24oamUpe3JldHVybiB0aGlzLnN0YXJ0T2YoamUsITEpfSxQZS4kc2V0PWZ1bmN0aW9uKGplLEllKXt2YXIgU2UsQ2U9Vy5wKGplKSxrZT0ic2V0IisodGhpcy4kdT8iVVRDIjoiIiksS2U9KFNlPXt9LFNlW19dPWtlKyJEYXRlIixTZVtqXT1rZSsiRGF0ZSIsU2VbUF09a2UrIk1vbnRoIixTZVtGXT1rZSsiRnVsbFllYXIiLFNlW1RdPWtlKyJIb3VycyIsU2VbeV09a2UrIk1pbnV0ZXMiLFNlW2JdPWtlKyJTZWNvbmRzIixTZVt2XT1rZSsiTWlsbGlzZWNvbmRzIixTZSlbQ2VdLEZ0PUNlPT09Xz90aGlzLiREKyhJZS10aGlzLiRXKTpJZTtpZihDZT09PVB8fENlPT09Ril7dmFyIE5lPXRoaXMuY2xvbmUoKS5zZXQoaiwxKTtOZS4kZFtLZV0oRnQpLE5lLmluaXQoKSx0aGlzLiRkPU5lLnNldChqLE1hdGgubWluKHRoaXMuJEQsTmUuZGF5c0luTW9udGgoKSkpLiRkfWVsc2UgS2UmJnRoaXMuJGRbS2VdKEZ0KTtyZXR1cm4gdGhpcy5pbml0KCksdGhpc30sUGUuc2V0PWZ1bmN0aW9uKGplLEllKXtyZXR1cm4gdGhpcy5jbG9uZSgpLiRzZXQoamUsSWUpfSxQZS5nZXQ9ZnVuY3Rpb24oamUpe3JldHVybiB0aGlzW1cucChqZSldKCl9LFBlLmFkZD1mdW5jdGlvbihqZSxJZSl7dmFyIFNlLENlPXRoaXM7amU9TnVtYmVyKGplKTt2YXIga2U9Vy5wKEllKSxLZT1mdW5jdGlvbihnbil7dmFyIF90PWdlKENlKTtyZXR1cm4gVy53KF90LmRhdGUoX3QuZGF0ZSgpK01hdGgucm91bmQoZ24qamUpKSxDZSl9O2lmKGtlPT09UClyZXR1cm4gdGhpcy5zZXQoUCx0aGlzLiRNK2plKTtpZihrZT09PUYpcmV0dXJuIHRoaXMuc2V0KEYsdGhpcy4keStqZSk7aWYoa2U9PT1fKXJldHVybiBLZSgxKTtpZihrZT09PUEpcmV0dXJuIEtlKDcpO3ZhciBGdD0oU2U9e30sU2VbeV09ZCxTZVtUXT1wLFNlW2JdPXUsU2UpW2tlXXx8MSxOZT10aGlzLiRkLmdldFRpbWUoKStqZSpGdDtyZXR1cm4gVy53KE5lLHRoaXMpfSxQZS5zdWJ0cmFjdD1mdW5jdGlvbihqZSxJZSl7cmV0dXJuIHRoaXMuYWRkKC0xKmplLEllKX0sUGUuZm9ybWF0PWZ1bmN0aW9uKGplKXt2YXIgSWU9dGhpcyxTZT10aGlzLiRsb2NhbGUoKTtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIFNlLmludmFsaWREYXRlfHxLO3ZhciBDZT1qZXx8IllZWVktTU0tRERUSEg6bW06c3NaIixrZT1XLnoodGhpcyksS2U9dGhpcy4kSCxGdD10aGlzLiRtLE5lPXRoaXMuJE0sZ249U2Uud2Vla2RheXMsX3Q9U2UubW9udGhzLEV0PVNlLm1lcmlkaWVtLEd0PWZ1bmN0aW9uKFB0LFFlLER0LGt0KXtyZXR1cm4gUHQmJihQdFtRZV18fFB0KEllLENlKSl8fER0W1FlXS5zbGljZSgwLGt0KX0sbG49ZnVuY3Rpb24oUHQpe3JldHVybiBXLnMoS2UlMTJ8fDEyLFB0LCIwIil9LHh0PUV0fHxmdW5jdGlvbihQdCxRZSxEdCl7dmFyIGt0PVB0PDEyPyJBTSI6IlBNIjtyZXR1cm4gRHQ/a3QudG9Mb3dlckNhc2UoKTprdH07cmV0dXJuIENlLnJlcGxhY2UoaWUsZnVuY3Rpb24oUHQsUWUpe3JldHVybiBRZXx8ZnVuY3Rpb24oRHQpe3N3aXRjaChEdCl7Y2FzZSJZWSI6cmV0dXJuIFN0cmluZyhJZS4keSkuc2xpY2UoLTIpO2Nhc2UiWVlZWSI6cmV0dXJuIFcucyhJZS4keSw0LCIwIik7Y2FzZSJNIjpyZXR1cm4gTmUrMTtjYXNlIk1NIjpyZXR1cm4gVy5zKE5lKzEsMiwiMCIpO2Nhc2UiTU1NIjpyZXR1cm4gR3QoU2UubW9udGhzU2hvcnQsTmUsX3QsMyk7Y2FzZSJNTU1NIjpyZXR1cm4gR3QoX3QsTmUpO2Nhc2UiRCI6cmV0dXJuIEllLiREO2Nhc2UiREQiOnJldHVybiBXLnMoSWUuJEQsMiwiMCIpO2Nhc2UiZCI6cmV0dXJuIFN0cmluZyhJZS4kVyk7Y2FzZSJkZCI6cmV0dXJuIEd0KFNlLndlZWtkYXlzTWluLEllLiRXLGduLDIpO2Nhc2UiZGRkIjpyZXR1cm4gR3QoU2Uud2Vla2RheXNTaG9ydCxJZS4kVyxnbiwzKTtjYXNlImRkZGQiOnJldHVybiBnbltJZS4kV107Y2FzZSJIIjpyZXR1cm4gU3RyaW5nKEtlKTtjYXNlIkhIIjpyZXR1cm4gVy5zKEtlLDIsIjAiKTtjYXNlImgiOnJldHVybiBsbigxKTtjYXNlImhoIjpyZXR1cm4gbG4oMik7Y2FzZSJhIjpyZXR1cm4geHQoS2UsRnQsITApO2Nhc2UiQSI6cmV0dXJuIHh0KEtlLEZ0LCExKTtjYXNlIm0iOnJldHVybiBTdHJpbmcoRnQpO2Nhc2UibW0iOnJldHVybiBXLnMoRnQsMiwiMCIpO2Nhc2UicyI6cmV0dXJuIFN0cmluZyhJZS4kcyk7Y2FzZSJzcyI6cmV0dXJuIFcucyhJZS4kcywyLCIwIik7Y2FzZSJTU1MiOnJldHVybiBXLnMoSWUuJG1zLDMsIjAiKTtjYXNlIloiOnJldHVybiBrZX1yZXR1cm4gbnVsbH0oUHQpfHxrZS5yZXBsYWNlKCI6IiwiIil9KX0sUGUudXRjT2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIDE1Ki1NYXRoLnJvdW5kKHRoaXMuJGQuZ2V0VGltZXpvbmVPZmZzZXQoKS8xNSl9LFBlLmRpZmY9ZnVuY3Rpb24oamUsSWUsU2Upe3ZhciBDZSxrZT10aGlzLEtlPVcucChJZSksRnQ9Z2UoamUpLE5lPShGdC51dGNPZmZzZXQoKS10aGlzLnV0Y09mZnNldCgpKSpkLGduPXRoaXMtRnQsX3Q9ZnVuY3Rpb24oKXtyZXR1cm4gVy5tKGtlLEZ0KX07c3dpdGNoKEtlKXtjYXNlIEY6Q2U9X3QoKS8xMjticmVhaztjYXNlIFA6Q2U9X3QoKTticmVhaztjYXNlIFI6Q2U9X3QoKS8zO2JyZWFrO2Nhc2UgQTpDZT0oZ24tTmUpLzYwNDhlNTticmVhaztjYXNlIF86Q2U9KGduLU5lKS84NjRlNTticmVhaztjYXNlIFQ6Q2U9Z24vcDticmVhaztjYXNlIHk6Q2U9Z24vZDticmVhaztjYXNlIGI6Q2U9Z24vdTticmVhaztkZWZhdWx0OkNlPWdufXJldHVybiBTZT9DZTpXLmEoQ2UpfSxQZS5kYXlzSW5Nb250aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuZE9mKFApLiREfSxQZS4kbG9jYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIG5lW3RoaXMuJExdfSxQZS5sb2NhbGU9ZnVuY3Rpb24oamUsSWUpe2lmKCFqZSlyZXR1cm4gdGhpcy4kTDt2YXIgU2U9dGhpcy5jbG9uZSgpLENlPVgoamUsSWUsITApO3JldHVybiBDZSYmKFNlLiRMPUNlKSxTZX0sUGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gVy53KHRoaXMuJGQsdGhpcyl9LFBlLnRvRGF0ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSl9LFBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzLnRvSVNPU3RyaW5nKCk6bnVsbH0sUGUudG9JU09TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b0lTT1N0cmluZygpfSxQZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLnRvVVRDU3RyaW5nKCl9LEZlfSgpLFU9eGUucHJvdG90eXBlO3JldHVybiBnZS5wcm90b3R5cGU9VSxbWyIkbXMiLHZdLFsiJHMiLGJdLFsiJG0iLHldLFsiJEgiLFRdLFsiJFciLF9dLFsiJE0iLFBdLFsiJHkiLEZdLFsiJEQiLGpdXS5mb3JFYWNoKGZ1bmN0aW9uKEZlKXtVW0ZlWzFdXT1mdW5jdGlvbihQZSl7cmV0dXJuIHRoaXMuJGcoUGUsRmVbMF0sRmVbMV0pfX0pLGdlLmV4dGVuZD1mdW5jdGlvbihGZSxQZSl7cmV0dXJuIEZlLiRpfHwoRmUoUGUseGUsZ2UpLEZlLiRpPSEwKSxnZX0sZ2UubG9jYWxlPVgsZ2UuaXNEYXlqcz1kZSxnZS51bml4PWZ1bmN0aW9uKEZlKXtyZXR1cm4gZ2UoMWUzKkZlKX0sZ2UuZW49bmVbYWVdLGdlLkxzPW5lLGdlLnA9e30sZ2V9KX0pKG9CZSk7dmFyIE5BdD1vQmUuZXhwb3J0cztjb25zdCBMZz1oQyhOQXQpLGc3PXt0cmFjZTowLGRlYnVnOjEsaW5mbzoyLHdhcm46MyxlcnJvcjo0LGZhdGFsOjV9LFhlPXt0cmFjZTooLi4uaSk9Pnt9LGRlYnVnOiguLi5pKT0+e30saW5mbzooLi4uaSk9Pnt9LHdhcm46KC4uLmkpPT57fSxlcnJvcjooLi4uaSk9Pnt9LGZhdGFsOiguLi5pKT0+e319LGZwZT1mdW5jdGlvbihpPSJmYXRhbCIpe2xldCBzPWc3LmZhdGFsO3R5cGVvZiBpPT0ic3RyaW5nIj8oaT1pLnRvTG93ZXJDYXNlKCksaSBpbiBnNyYmKHM9ZzdbaV0pKTp0eXBlb2YgaT09Im51bWJlciImJihzPWkpLFhlLnRyYWNlPSgpPT57fSxYZS5kZWJ1Zz0oKT0+e30sWGUuaW5mbz0oKT0+e30sWGUud2Fybj0oKT0+e30sWGUuZXJyb3I9KCk9Pnt9LFhlLmZhdGFsPSgpPT57fSxzPD1nNy5mYXRhbCYmKFhlLmZhdGFsPWNvbnNvbGUuZXJyb3I/Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUsTHYoIkZBVEFMIiksImNvbG9yOiBvcmFuZ2UiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzVtIixMdigiRkFUQUwiKSkpLHM8PWc3LmVycm9yJiYoWGUuZXJyb3I9Y29uc29sZS5lcnJvcj9jb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSxMdigiRVJST1IiKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiXHgxQlszMW0iLEx2KCJFUlJPUiIpKSksczw9Zzcud2FybiYmKFhlLndhcm49Y29uc29sZS53YXJuP2NvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUsTHYoIldBUk4iKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiXHgxQlszM20iLEx2KCJXQVJOIikpKSxzPD1nNy5pbmZvJiYoWGUuaW5mbz1jb25zb2xlLmluZm8/Y29uc29sZS5pbmZvLmJpbmQoY29uc29sZSxMdigiSU5GTyIpLCJjb2xvcjogbGlnaHRibHVlIik6Y29uc29sZS5sb2cuYmluZChjb25zb2xlLCJceDFCWzM0bSIsTHYoIklORk8iKSkpLHM8PWc3LmRlYnVnJiYoWGUuZGVidWc9Y29uc29sZS5kZWJ1Zz9jb25zb2xlLmRlYnVnLmJpbmQoY29uc29sZSxMdigiREVCVUciKSwiY29sb3I6IGxpZ2h0Z3JlZW4iKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzJtIixMdigiREVCVUciKSkpLHM8PWc3LnRyYWNlJiYoWGUudHJhY2U9Y29uc29sZS5kZWJ1Zz9jb25zb2xlLmRlYnVnLmJpbmQoY29uc29sZSxMdigiVFJBQ0UiKSwiY29sb3I6IGxpZ2h0Z3JlZW4iKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzJtIixMdigiVFJBQ0UiKSkpfSxMdj1pPT5gJWMke0xnKCkuZm9ybWF0KCJzcy5TU1MiKX0gOiAke2l9IDogYDt2YXIgcDk9e307KGZ1bmN0aW9uKGkpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxpLnNhbml0aXplVXJsPWkuQkxBTktfVVJMPXZvaWQgMDt2YXIgcz0vXihbXlx3XSopKGphdmFzY3JpcHR8ZGF0YXx2YnNjcmlwdCkvaW0sdT0vJiMoXHcrKSheXHd8Oyk/L2csZD0vJihuZXdsaW5lfHRhYik7L2dpLHA9L1tcdTAwMDAtXHUwMDFGXHUwMDdGLVx1MDA5Rlx1MjAwMC1cdTIwMERcdUZFRkZdL2dpbSx2PS9eLisoOnwmY29sb247KS9naW0sYj1bIi4iLCIvIl07aS5CTEFOS19VUkw9ImFib3V0OmJsYW5rIjtmdW5jdGlvbiB5KEEpe3JldHVybiBiLmluZGV4T2YoQVswXSk+LTF9ZnVuY3Rpb24gVChBKXt2YXIgUD1BLnJlcGxhY2UocCwiIik7cmV0dXJuIFAucmVwbGFjZSh1LGZ1bmN0aW9uKFIsRil7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoRil9KX1mdW5jdGlvbiBfKEEpe2lmKCFBKXJldHVybiBpLkJMQU5LX1VSTDt2YXIgUD1UKEEpLnJlcGxhY2UoZCwiIikucmVwbGFjZShwLCIiKS50cmltKCk7aWYoIVApcmV0dXJuIGkuQkxBTktfVVJMO2lmKHkoUCkpcmV0dXJuIFA7dmFyIFI9UC5tYXRjaCh2KTtpZighUilyZXR1cm4gUDt2YXIgRj1SWzBdO3JldHVybiBzLnRlc3QoRik/aS5CTEFOS19VUkw6UH1pLnNhbml0aXplVXJsPV99KShwOSk7ZnVuY3Rpb24gRFkoaSxzKXtyZXR1cm4gaT09bnVsbHx8cz09bnVsbD9OYU46aTxzPy0xOmk+cz8xOmk+PXM/MDpOYU59ZnVuY3Rpb24gUEF0KGkscyl7cmV0dXJuIGk9PW51bGx8fHM9PW51bGw/TmFOOnM8aT8tMTpzPmk/MTpzPj1pPzA6TmFOfWZ1bmN0aW9uIGRwZShpKXtsZXQgcyx1LGQ7aS5sZW5ndGghPT0yPyhzPURZLHU9KHksVCk9PkRZKGkoeSksVCksZD0oeSxUKT0+aSh5KS1UKToocz1pPT09RFl8fGk9PT1QQXQ/aTpCQXQsdT1pLGQ9aSk7ZnVuY3Rpb24gcCh5LFQsXz0wLEE9eS5sZW5ndGgpe2lmKF88QSl7aWYocyhULFQpIT09MClyZXR1cm4gQTtkb3tjb25zdCBQPV8rQT4+PjE7dSh5W1BdLFQpPDA/Xz1QKzE6QT1QfXdoaWxlKF88QSl9cmV0dXJuIF99ZnVuY3Rpb24gdih5LFQsXz0wLEE9eS5sZW5ndGgpe2lmKF88QSl7aWYocyhULFQpIT09MClyZXR1cm4gQTtkb3tjb25zdCBQPV8rQT4+PjE7dSh5W1BdLFQpPD0wP189UCsxOkE9UH13aGlsZShfPEEpfXJldHVybiBffWZ1bmN0aW9uIGIoeSxULF89MCxBPXkubGVuZ3RoKXtjb25zdCBQPXAoeSxULF8sQS0xKTtyZXR1cm4gUD5fJiZkKHlbUC0xXSxUKT4tZCh5W1BdLFQpP1AtMTpQfXJldHVybntsZWZ0OnAsY2VudGVyOmIscmlnaHQ6dn19ZnVuY3Rpb24gQkF0KCl7cmV0dXJuIDB9ZnVuY3Rpb24gRkF0KGkpe3JldHVybiBpPT09bnVsbD9OYU46K2l9Y29uc3QgUkF0PWRwZShEWSkucmlnaHQ7ZHBlKEZBdCkuY2VudGVyO2NvbnN0IGpBdD1SQXQ7Y2xhc3MgY0JlIGV4dGVuZHMgTWFwe2NvbnN0cnVjdG9yKHMsdT1xQXQpe2lmKHN1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7X2ludGVybjp7dmFsdWU6bmV3IE1hcH0sX2tleTp7dmFsdWU6dX19KSxzIT1udWxsKWZvcihjb25zdFtkLHBdb2Ygcyl0aGlzLnNldChkLHApfWdldChzKXtyZXR1cm4gc3VwZXIuZ2V0KHVCZSh0aGlzLHMpKX1oYXMocyl7cmV0dXJuIHN1cGVyLmhhcyh1QmUodGhpcyxzKSl9c2V0KHMsdSl7cmV0dXJuIHN1cGVyLnNldCgkQXQodGhpcyxzKSx1KX1kZWxldGUocyl7cmV0dXJuIHN1cGVyLmRlbGV0ZSh6QXQodGhpcyxzKSl9fWZ1bmN0aW9uIHVCZSh7X2ludGVybjppLF9rZXk6c30sdSl7Y29uc3QgZD1zKHUpO3JldHVybiBpLmhhcyhkKT9pLmdldChkKTp1fWZ1bmN0aW9uICRBdCh7X2ludGVybjppLF9rZXk6c30sdSl7Y29uc3QgZD1zKHUpO3JldHVybiBpLmhhcyhkKT9pLmdldChkKTooaS5zZXQoZCx1KSx1KX1mdW5jdGlvbiB6QXQoe19pbnRlcm46aSxfa2V5OnN9LHUpe2NvbnN0IGQ9cyh1KTtyZXR1cm4gaS5oYXMoZCkmJih1PWkuZ2V0KGQpLGkuZGVsZXRlKGQpKSx1fWZ1bmN0aW9uIHFBdChpKXtyZXR1cm4gaSE9PW51bGwmJnR5cGVvZiBpPT0ib2JqZWN0Ij9pLnZhbHVlT2YoKTppfWNvbnN0IEhBdD1NYXRoLnNxcnQoNTApLFZBdD1NYXRoLnNxcnQoMTApLFVBdD1NYXRoLnNxcnQoMik7ZnVuY3Rpb24gSVkoaSxzLHUpe2NvbnN0IGQ9KHMtaSkvTWF0aC5tYXgoMCx1KSxwPU1hdGguZmxvb3IoTWF0aC5sb2cxMChkKSksdj1kL01hdGgucG93KDEwLHApLGI9dj49SEF0PzEwOnY+PVZBdD81OnY+PVVBdD8yOjE7bGV0IHksVCxfO3JldHVybiBwPDA/KF89TWF0aC5wb3coMTAsLXApL2IseT1NYXRoLnJvdW5kKGkqXyksVD1NYXRoLnJvdW5kKHMqXykseS9fPGkmJisreSxUL18+cyYmLS1ULF89LV8pOihfPU1hdGgucG93KDEwLHApKmIseT1NYXRoLnJvdW5kKGkvXyksVD1NYXRoLnJvdW5kKHMvXykseSpfPGkmJisreSxUKl8+cyYmLS1UKSxUPHkmJi41PD11JiZ1PDI/SVkoaSxzLHUqMik6W3ksVCxfXX1mdW5jdGlvbiBHQXQoaSxzLHUpe2lmKHM9K3MsaT0raSx1PSt1LCEodT4wKSlyZXR1cm5bXTtpZihpPT09cylyZXR1cm5baV07Y29uc3QgZD1zPGksW3AsdixiXT1kP0lZKHMsaSx1KTpJWShpLHMsdSk7aWYoISh2Pj1wKSlyZXR1cm5bXTtjb25zdCB5PXYtcCsxLFQ9bmV3IEFycmF5KHkpO2lmKGQpaWYoYjwwKWZvcihsZXQgXz0wO188eTsrK18pVFtfXT0odi1fKS8tYjtlbHNlIGZvcihsZXQgXz0wO188eTsrK18pVFtfXT0odi1fKSpiO2Vsc2UgaWYoYjwwKWZvcihsZXQgXz0wO188eTsrK18pVFtfXT0ocCtfKS8tYjtlbHNlIGZvcihsZXQgXz0wO188eTsrK18pVFtfXT0ocCtfKSpiO3JldHVybiBUfWZ1bmN0aW9uIGdwZShpLHMsdSl7cmV0dXJuIHM9K3MsaT0raSx1PSt1LElZKGkscyx1KVsyXX1mdW5jdGlvbiBwcGUoaSxzLHUpe3M9K3MsaT0raSx1PSt1O2NvbnN0IGQ9czxpLHA9ZD9ncGUocyxpLHUpOmdwZShpLHMsdSk7cmV0dXJuKGQ/LTE6MSkqKHA8MD8xLy1wOnApfWZ1bmN0aW9uIEtBdChpLHMpe2xldCB1O2lmKHM9PT12b2lkIDApZm9yKGNvbnN0IGQgb2YgaSlkIT1udWxsJiYodTxkfHx1PT09dm9pZCAwJiZkPj1kKSYmKHU9ZCk7ZWxzZXtsZXQgZD0tMTtmb3IobGV0IHAgb2YgaSkocD1zKHAsKytkLGkpKSE9bnVsbCYmKHU8cHx8dT09PXZvaWQgMCYmcD49cCkmJih1PXApfXJldHVybiB1fWZ1bmN0aW9uIFdBdChpLHMpe2xldCB1O2lmKHM9PT12b2lkIDApZm9yKGNvbnN0IGQgb2YgaSlkIT1udWxsJiYodT5kfHx1PT09dm9pZCAwJiZkPj1kKSYmKHU9ZCk7ZWxzZXtsZXQgZD0tMTtmb3IobGV0IHAgb2YgaSkocD1zKHAsKytkLGkpKSE9bnVsbCYmKHU+cHx8dT09PXZvaWQgMCYmcD49cCkmJih1PXApfXJldHVybiB1fWZ1bmN0aW9uIFlBdChpLHMsdSl7aT0raSxzPStzLHU9KHA9YXJndW1lbnRzLmxlbmd0aCk8Mj8ocz1pLGk9MCwxKTpwPDM/MTordTtmb3IodmFyIGQ9LTEscD1NYXRoLm1heCgwLE1hdGguY2VpbCgocy1pKS91KSl8MCx2PW5ldyBBcnJheShwKTsrK2Q8cDspdltkXT1pK2QqdTtyZXR1cm4gdn1mdW5jdGlvbiBYQXQoaSl7cmV0dXJuIGl9dmFyIE9ZPTEsYnBlPTIsbXBlPTMsTlk9NCxsQmU9MWUtNjtmdW5jdGlvbiBRQXQoaSl7cmV0dXJuInRyYW5zbGF0ZSgiK2krIiwwKSJ9ZnVuY3Rpb24gSkF0KGkpe3JldHVybiJ0cmFuc2xhdGUoMCwiK2krIikifWZ1bmN0aW9uIFpBdChpKXtyZXR1cm4gcz0+K2kocyl9ZnVuY3Rpb24gZUx0KGkscyl7cmV0dXJuIHM9TWF0aC5tYXgoMCxpLmJhbmR3aWR0aCgpLXMqMikvMixpLnJvdW5kKCkmJihzPU1hdGgucm91bmQocykpLHU9PitpKHUpK3N9ZnVuY3Rpb24gdEx0KCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIGhCZShpLHMpe3ZhciB1PVtdLGQ9bnVsbCxwPW51bGwsdj02LGI9Nix5PTMsVD10eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmRldmljZVBpeGVsUmF0aW8+MT8wOi41LF89aT09PU9ZfHxpPT09Tlk/LTE6MSxBPWk9PT1OWXx8aT09PWJwZT8ieCI6InkiLFA9aT09PU9ZfHxpPT09bXBlP1FBdDpKQXQ7ZnVuY3Rpb24gUihGKXt2YXIgaj1kPz8ocy50aWNrcz9zLnRpY2tzLmFwcGx5KHMsdSk6cy5kb21haW4oKSksSz1wPz8ocy50aWNrRm9ybWF0P3MudGlja0Zvcm1hdC5hcHBseShzLHUpOlhBdCksZWU9TWF0aC5tYXgodiwwKSt5LGllPXMucmFuZ2UoKSxvZT0raWVbMF0rVCxwZT0raWVbaWUubGVuZ3RoLTFdK1QsYmU9KHMuYmFuZHdpZHRoP2VMdDpaQXQpKHMuY29weSgpLFQpLGFlPUYuc2VsZWN0aW9uP0Yuc2VsZWN0aW9uKCk6RixuZT1hZS5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSksc2U9YWUuc2VsZWN0QWxsKCIudGljayIpLmRhdGEoaixzKS5vcmRlcigpLGRlPXNlLmV4aXQoKSxYPXNlLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0aWNrIiksZ2U9c2Uuc2VsZWN0KCJsaW5lIiksVz1zZS5zZWxlY3QoInRleHQiKTtuZT1uZS5tZXJnZShuZS5lbnRlcigpLmluc2VydCgicGF0aCIsIi50aWNrIikuYXR0cigiY2xhc3MiLCJkb21haW4iKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKSksc2U9c2UubWVyZ2UoWCksZ2U9Z2UubWVyZ2UoWC5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKS5hdHRyKEErIjIiLF8qdikpLFc9Vy5tZXJnZShYLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCJjdXJyZW50Q29sb3IiKS5hdHRyKEEsXyplZSkuYXR0cigiZHkiLGk9PT1PWT8iMGVtIjppPT09bXBlPyIwLjcxZW0iOiIwLjMyZW0iKSksRiE9PWFlJiYobmU9bmUudHJhbnNpdGlvbihGKSxzZT1zZS50cmFuc2l0aW9uKEYpLGdlPWdlLnRyYW5zaXRpb24oRiksVz1XLnRyYW5zaXRpb24oRiksZGU9ZGUudHJhbnNpdGlvbihGKS5hdHRyKCJvcGFjaXR5IixsQmUpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oeGUpe3JldHVybiBpc0Zpbml0ZSh4ZT1iZSh4ZSkpP1AoeGUrVCk6dGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpfSksWC5hdHRyKCJvcGFjaXR5IixsQmUpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oeGUpe3ZhciBVPXRoaXMucGFyZW50Tm9kZS5fX2F4aXM7cmV0dXJuIFAoKFUmJmlzRmluaXRlKFU9VSh4ZSkpP1U6YmUoeGUpKStUKX0pKSxkZS5yZW1vdmUoKSxuZS5hdHRyKCJkIixpPT09Tll8fGk9PT1icGU/Yj8iTSIrXypiKyIsIitvZSsiSCIrVCsiViIrcGUrIkgiK18qYjoiTSIrVCsiLCIrb2UrIlYiK3BlOmI/Ik0iK29lKyIsIitfKmIrIlYiK1QrIkgiK3BlKyJWIitfKmI6Ik0iK29lKyIsIitUKyJIIitwZSksc2UuYXR0cigib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih4ZSl7cmV0dXJuIFAoYmUoeGUpK1QpfSksZ2UuYXR0cihBKyIyIixfKnYpLFcuYXR0cihBLF8qZWUpLnRleHQoSyksYWUuZmlsdGVyKHRMdCkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsaT09PWJwZT8ic3RhcnQiOmk9PT1OWT8iZW5kIjoibWlkZGxlIiksYWUuZWFjaChmdW5jdGlvbigpe3RoaXMuX19heGlzPWJlfSl9cmV0dXJuIFIuc2NhbGU9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9RixSKTpzfSxSLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHU9QXJyYXkuZnJvbShhcmd1bWVudHMpLFJ9LFIudGlja0FyZ3VtZW50cz1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1GPT1udWxsP1tdOkFycmF5LmZyb20oRiksUik6dS5zbGljZSgpfSxSLnRpY2tWYWx1ZXM9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9Rj09bnVsbD9udWxsOkFycmF5LmZyb20oRiksUik6ZCYmZC5zbGljZSgpfSxSLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9RixSKTpwfSxSLnRpY2tTaXplPWZ1bmN0aW9uKEYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PWI9K0YsUik6dn0sUi50aWNrU2l6ZUlubmVyPWZ1bmN0aW9uKEYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PStGLFIpOnZ9LFIudGlja1NpemVPdXRlcj1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0rRixSKTpifSxSLnRpY2tQYWRkaW5nPWZ1bmN0aW9uKEYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PStGLFIpOnl9LFIub2Zmc2V0PWZ1bmN0aW9uKEYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhUPStGLFIpOlR9LFJ9ZnVuY3Rpb24gbkx0KGkpe3JldHVybiBoQmUoT1ksaSl9ZnVuY3Rpb24gckx0KGkpe3JldHVybiBoQmUobXBlLGkpfXZhciBpTHQ9e3ZhbHVlOigpPT57fX07ZnVuY3Rpb24gZkJlKCl7Zm9yKHZhciBpPTAscz1hcmd1bWVudHMubGVuZ3RoLHU9e30sZDtpPHM7KytpKXtpZighKGQ9YXJndW1lbnRzW2ldKyIiKXx8ZCBpbiB1fHwvW1xzLl0vLnRlc3QoZCkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrZCk7dVtkXT1bXX1yZXR1cm4gbmV3IFBZKHUpfWZ1bmN0aW9uIFBZKGkpe3RoaXMuXz1pfWZ1bmN0aW9uIHNMdChpLHMpe3JldHVybiBpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odSl7dmFyIGQ9IiIscD11LmluZGV4T2YoIi4iKTtpZihwPj0wJiYoZD11LnNsaWNlKHArMSksdT11LnNsaWNlKDAscCkpLHUmJiFzLmhhc093blByb3BlcnR5KHUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3UpO3JldHVybnt0eXBlOnUsbmFtZTpkfX0pfVBZLnByb3RvdHlwZT1mQmUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQWSxvbjpmdW5jdGlvbihpLHMpe3ZhciB1PXRoaXMuXyxkPXNMdChpKyIiLHUpLHAsdj0tMSxiPWQubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK3Y8YjspaWYoKHA9KGk9ZFt2XSkudHlwZSkmJihwPWFMdCh1W3BdLGkubmFtZSkpKXJldHVybiBwO3JldHVybn1pZihzIT1udWxsJiZ0eXBlb2YgcyE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrcyk7Zm9yKDsrK3Y8YjspaWYocD0oaT1kW3ZdKS50eXBlKXVbcF09ZEJlKHVbcF0saS5uYW1lLHMpO2Vsc2UgaWYocz09bnVsbClmb3IocCBpbiB1KXVbcF09ZEJlKHVbcF0saS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGk9e30scz10aGlzLl87Zm9yKHZhciB1IGluIHMpaVt1XT1zW3VdLnNsaWNlKCk7cmV0dXJuIG5ldyBQWShpKX0sY2FsbDpmdW5jdGlvbihpLHMpe2lmKChwPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHU9bmV3IEFycmF5KHApLGQ9MCxwLHY7ZDxwOysrZCl1W2RdPWFyZ3VtZW50c1tkKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoaSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIraSk7Zm9yKHY9dGhpcy5fW2ldLGQ9MCxwPXYubGVuZ3RoO2Q8cDsrK2QpdltkXS52YWx1ZS5hcHBseShzLHUpfSxhcHBseTpmdW5jdGlvbihpLHMsdSl7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShpKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitpKTtmb3IodmFyIGQ9dGhpcy5fW2ldLHA9MCx2PWQubGVuZ3RoO3A8djsrK3ApZFtwXS52YWx1ZS5hcHBseShzLHUpfX07ZnVuY3Rpb24gYUx0KGkscyl7Zm9yKHZhciB1PTAsZD1pLmxlbmd0aCxwO3U8ZDsrK3UpaWYoKHA9aVt1XSkubmFtZT09PXMpcmV0dXJuIHAudmFsdWV9ZnVuY3Rpb24gZEJlKGkscyx1KXtmb3IodmFyIGQ9MCxwPWkubGVuZ3RoO2Q8cDsrK2QpaWYoaVtkXS5uYW1lPT09cyl7aVtkXT1pTHQsaT1pLnNsaWNlKDAsZCkuY29uY2F0KGkuc2xpY2UoZCsxKSk7YnJlYWt9cmV0dXJuIHUhPW51bGwmJmkucHVzaCh7bmFtZTpzLHZhbHVlOnV9KSxpfXZhciB2cGU9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiO2NvbnN0IGdCZT17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6dnBlLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn07ZnVuY3Rpb24gQlkoaSl7dmFyIHM9aSs9IiIsdT1zLmluZGV4T2YoIjoiKTtyZXR1cm4gdT49MCYmKHM9aS5zbGljZSgwLHUpKSE9PSJ4bWxucyImJihpPWkuc2xpY2UodSsxKSksZ0JlLmhhc093blByb3BlcnR5KHMpP3tzcGFjZTpnQmVbc10sbG9jYWw6aX06aX1mdW5jdGlvbiBvTHQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5vd25lckRvY3VtZW50LHU9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHU9PT12cGUmJnMuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PXZwZT9zLmNyZWF0ZUVsZW1lbnQoaSk6cy5jcmVhdGVFbGVtZW50TlModSxpKX19ZnVuY3Rpb24gY0x0KGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGkuc3BhY2UsaS5sb2NhbCl9fWZ1bmN0aW9uIHBCZShpKXt2YXIgcz1CWShpKTtyZXR1cm4ocy5sb2NhbD9jTHQ6b0x0KShzKX1mdW5jdGlvbiB1THQoKXt9ZnVuY3Rpb24gd3BlKGkpe3JldHVybiBpPT1udWxsP3VMdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IoaSl9fWZ1bmN0aW9uIGxMdChpKXt0eXBlb2YgaSE9ImZ1bmN0aW9uIiYmKGk9d3BlKGkpKTtmb3IodmFyIHM9dGhpcy5fZ3JvdXBzLHU9cy5sZW5ndGgsZD1uZXcgQXJyYXkodSkscD0wO3A8dTsrK3ApZm9yKHZhciB2PXNbcF0sYj12Lmxlbmd0aCx5PWRbcF09bmV3IEFycmF5KGIpLFQsXyxBPTA7QTxiOysrQSkoVD12W0FdKSYmKF89aS5jYWxsKFQsVC5fX2RhdGFfXyxBLHYpKSYmKCJfX2RhdGFfXyJpbiBUJiYoXy5fX2RhdGFfXz1ULl9fZGF0YV9fKSx5W0FdPV8pO3JldHVybiBuZXcgeHAoZCx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBiQmUoaSl7cmV0dXJuIGk9PW51bGw/W106QXJyYXkuaXNBcnJheShpKT9pOkFycmF5LmZyb20oaSl9ZnVuY3Rpb24gaEx0KCl7cmV0dXJuW119ZnVuY3Rpb24gbUJlKGkpe3JldHVybiBpPT1udWxsP2hMdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoaSl9fWZ1bmN0aW9uIGZMdChpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYkJlKGkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19ZnVuY3Rpb24gZEx0KGkpe3R5cGVvZiBpPT0iZnVuY3Rpb24iP2k9Zkx0KGkpOmk9bUJlKGkpO2Zvcih2YXIgcz10aGlzLl9ncm91cHMsdT1zLmxlbmd0aCxkPVtdLHA9W10sdj0wO3Y8dTsrK3YpZm9yKHZhciBiPXNbdl0seT1iLmxlbmd0aCxULF89MDtfPHk7KytfKShUPWJbX10pJiYoZC5wdXNoKGkuY2FsbChULFQuX19kYXRhX18sXyxiKSkscC5wdXNoKFQpKTtyZXR1cm4gbmV3IHhwKGQscCl9ZnVuY3Rpb24gdkJlKGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMoaSl9fWZ1bmN0aW9uIHdCZShpKXtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIHMubWF0Y2hlcyhpKX19dmFyIGdMdD1BcnJheS5wcm90b3R5cGUuZmluZDtmdW5jdGlvbiBwTHQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGdMdC5jYWxsKHRoaXMuY2hpbGRyZW4saSl9fWZ1bmN0aW9uIGJMdCgpe3JldHVybiB0aGlzLmZpcnN0RWxlbWVudENoaWxkfWZ1bmN0aW9uIG1MdChpKXtyZXR1cm4gdGhpcy5zZWxlY3QoaT09bnVsbD9iTHQ6cEx0KHR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6d0JlKGkpKSl9dmFyIHZMdD1BcnJheS5wcm90b3R5cGUuZmlsdGVyO2Z1bmN0aW9uIHdMdCgpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pfWZ1bmN0aW9uIHlMdChpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdkx0LmNhbGwodGhpcy5jaGlsZHJlbixpKX19ZnVuY3Rpb24geEx0KGkpe3JldHVybiB0aGlzLnNlbGVjdEFsbChpPT1udWxsP3dMdDp5THQodHlwZW9mIGk9PSJmdW5jdGlvbiI/aTp3QmUoaSkpKX1mdW5jdGlvbiBrTHQoaSl7dHlwZW9mIGkhPSJmdW5jdGlvbiImJihpPXZCZShpKSk7Zm9yKHZhciBzPXRoaXMuX2dyb3Vwcyx1PXMubGVuZ3RoLGQ9bmV3IEFycmF5KHUpLHA9MDtwPHU7KytwKWZvcih2YXIgdj1zW3BdLGI9di5sZW5ndGgseT1kW3BdPVtdLFQsXz0wO188YjsrK18pKFQ9dltfXSkmJmkuY2FsbChULFQuX19kYXRhX18sXyx2KSYmeS5wdXNoKFQpO3JldHVybiBuZXcgeHAoZCx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiB5QmUoaSl7cmV0dXJuIG5ldyBBcnJheShpLmxlbmd0aCl9ZnVuY3Rpb24gRUx0KCl7cmV0dXJuIG5ldyB4cCh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcCh5QmUpLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIEZZKGkscyl7dGhpcy5vd25lckRvY3VtZW50PWkub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1pLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWksdGhpcy5fX2RhdGFfXz1zfUZZLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RlksYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoaSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGkscyl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoaSxzKX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoaSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGkpfX07ZnVuY3Rpb24gVEx0KGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpfX1mdW5jdGlvbiBDTHQoaSxzLHUsZCxwLHYpe2Zvcih2YXIgYj0wLHksVD1zLmxlbmd0aCxfPXYubGVuZ3RoO2I8XzsrK2IpKHk9c1tiXSk/KHkuX19kYXRhX189dltiXSxkW2JdPXkpOnVbYl09bmV3IEZZKGksdltiXSk7Zm9yKDtiPFQ7KytiKSh5PXNbYl0pJiYocFtiXT15KX1mdW5jdGlvbiBTTHQoaSxzLHUsZCxwLHYsYil7dmFyIHksVCxfPW5ldyBNYXAsQT1zLmxlbmd0aCxQPXYubGVuZ3RoLFI9bmV3IEFycmF5KEEpLEY7Zm9yKHk9MDt5PEE7Kyt5KShUPXNbeV0pJiYoUlt5XT1GPWIuY2FsbChULFQuX19kYXRhX18seSxzKSsiIixfLmhhcyhGKT9wW3ldPVQ6Xy5zZXQoRixUKSk7Zm9yKHk9MDt5PFA7Kyt5KUY9Yi5jYWxsKGksdlt5XSx5LHYpKyIiLChUPV8uZ2V0KEYpKT8oZFt5XT1ULFQuX19kYXRhX189dlt5XSxfLmRlbGV0ZShGKSk6dVt5XT1uZXcgRlkoaSx2W3ldKTtmb3IoeT0wO3k8QTsrK3kpKFQ9c1t5XSkmJl8uZ2V0KFJbeV0pPT09VCYmKHBbeV09VCl9ZnVuY3Rpb24gX0x0KGkpe3JldHVybiBpLl9fZGF0YV9ffWZ1bmN0aW9uIEFMdChpLHMpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBBcnJheS5mcm9tKHRoaXMsX0x0KTt2YXIgdT1zP1NMdDpDTHQsZD10aGlzLl9wYXJlbnRzLHA9dGhpcy5fZ3JvdXBzO3R5cGVvZiBpIT0iZnVuY3Rpb24iJiYoaT1UTHQoaSkpO2Zvcih2YXIgdj1wLmxlbmd0aCxiPW5ldyBBcnJheSh2KSx5PW5ldyBBcnJheSh2KSxUPW5ldyBBcnJheSh2KSxfPTA7Xzx2OysrXyl7dmFyIEE9ZFtfXSxQPXBbX10sUj1QLmxlbmd0aCxGPUxMdChpLmNhbGwoQSxBJiZBLl9fZGF0YV9fLF8sZCkpLGo9Ri5sZW5ndGgsSz15W19dPW5ldyBBcnJheShqKSxlZT1iW19dPW5ldyBBcnJheShqKSxpZT1UW19dPW5ldyBBcnJheShSKTt1KEEsUCxLLGVlLGllLEYscyk7Zm9yKHZhciBvZT0wLHBlPTAsYmUsYWU7b2U8ajsrK29lKWlmKGJlPUtbb2VdKXtmb3Iob2U+PXBlJiYocGU9b2UrMSk7IShhZT1lZVtwZV0pJiYrK3BlPGo7KTtiZS5fbmV4dD1hZXx8bnVsbH19cmV0dXJuIGI9bmV3IHhwKGIsZCksYi5fZW50ZXI9eSxiLl9leGl0PVQsYn1mdW5jdGlvbiBMTHQoaSl7cmV0dXJuIHR5cGVvZiBpPT0ib2JqZWN0IiYmImxlbmd0aCJpbiBpP2k6QXJyYXkuZnJvbShpKX1mdW5jdGlvbiBNTHQoKXtyZXR1cm4gbmV3IHhwKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoeUJlKSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBETHQoaSxzLHUpe3ZhciBkPXRoaXMuZW50ZXIoKSxwPXRoaXMsdj10aGlzLmV4aXQoKTtyZXR1cm4gdHlwZW9mIGk9PSJmdW5jdGlvbiI/KGQ9aShkKSxkJiYoZD1kLnNlbGVjdGlvbigpKSk6ZD1kLmFwcGVuZChpKyIiKSxzIT1udWxsJiYocD1zKHApLHAmJihwPXAuc2VsZWN0aW9uKCkpKSx1PT1udWxsP3YucmVtb3ZlKCk6dSh2KSxkJiZwP2QubWVyZ2UocCkub3JkZXIoKTpwfWZ1bmN0aW9uIElMdChpKXtmb3IodmFyIHM9aS5zZWxlY3Rpb24/aS5zZWxlY3Rpb24oKTppLHU9dGhpcy5fZ3JvdXBzLGQ9cy5fZ3JvdXBzLHA9dS5sZW5ndGgsdj1kLmxlbmd0aCxiPU1hdGgubWluKHAsdikseT1uZXcgQXJyYXkocCksVD0wO1Q8YjsrK1QpZm9yKHZhciBfPXVbVF0sQT1kW1RdLFA9Xy5sZW5ndGgsUj15W1RdPW5ldyBBcnJheShQKSxGLGo9MDtqPFA7KytqKShGPV9bal18fEFbal0pJiYoUltqXT1GKTtmb3IoO1Q8cDsrK1QpeVtUXT11W1RdO3JldHVybiBuZXcgeHAoeSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBPTHQoKXtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHM9LTEsdT1pLmxlbmd0aDsrK3M8dTspZm9yKHZhciBkPWlbc10scD1kLmxlbmd0aC0xLHY9ZFtwXSxiOy0tcD49MDspKGI9ZFtwXSkmJih2JiZiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHYpXjQmJnYucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYix2KSx2PWIpO3JldHVybiB0aGlzfWZ1bmN0aW9uIE5MdChpKXtpfHwoaT1QTHQpO2Z1bmN0aW9uIHMoUCxSKXtyZXR1cm4gUCYmUj9pKFAuX19kYXRhX18sUi5fX2RhdGFfXyk6IVAtIVJ9Zm9yKHZhciB1PXRoaXMuX2dyb3VwcyxkPXUubGVuZ3RoLHA9bmV3IEFycmF5KGQpLHY9MDt2PGQ7Kyt2KXtmb3IodmFyIGI9dVt2XSx5PWIubGVuZ3RoLFQ9cFt2XT1uZXcgQXJyYXkoeSksXyxBPTA7QTx5OysrQSkoXz1iW0FdKSYmKFRbQV09Xyk7VC5zb3J0KHMpfXJldHVybiBuZXcgeHAocCx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIFBMdChpLHMpe3JldHVybiBpPHM/LTE6aT5zPzE6aT49cz8wOk5hTn1mdW5jdGlvbiBCTHQoKXt2YXIgaT1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLGkuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9ZnVuY3Rpb24gRkx0KCl7cmV0dXJuIEFycmF5LmZyb20odGhpcyl9ZnVuY3Rpb24gUkx0KCl7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxzPTAsdT1pLmxlbmd0aDtzPHU7KytzKWZvcih2YXIgZD1pW3NdLHA9MCx2PWQubGVuZ3RoO3A8djsrK3Ape3ZhciBiPWRbcF07aWYoYilyZXR1cm4gYn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBqTHQoKXtsZXQgaT0wO2Zvcihjb25zdCBzIG9mIHRoaXMpKytpO3JldHVybiBpfWZ1bmN0aW9uICRMdCgpe3JldHVybiF0aGlzLm5vZGUoKX1mdW5jdGlvbiB6THQoaSl7Zm9yKHZhciBzPXRoaXMuX2dyb3Vwcyx1PTAsZD1zLmxlbmd0aDt1PGQ7Kyt1KWZvcih2YXIgcD1zW3VdLHY9MCxiPXAubGVuZ3RoLHk7djxiOysrdikoeT1wW3ZdKSYmaS5jYWxsKHkseS5fX2RhdGFfXyx2LHApO3JldHVybiB0aGlzfWZ1bmN0aW9uIHFMdChpKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShpKX19ZnVuY3Rpb24gSEx0KGkpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsKX19ZnVuY3Rpb24gVkx0KGkscyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoaSxzKX19ZnVuY3Rpb24gVUx0KGkscyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwscyl9fWZ1bmN0aW9uIEdMdChpLHMpe3JldHVybiBmdW5jdGlvbigpe3ZhciB1PXMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3U9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGUoaSk6dGhpcy5zZXRBdHRyaWJ1dGUoaSx1KX19ZnVuY3Rpb24gS0x0KGkscyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHU9cy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dT09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwsdSl9fWZ1bmN0aW9uIFdMdChpLHMpe3ZhciB1PUJZKGkpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIGQ9dGhpcy5ub2RlKCk7cmV0dXJuIHUubG9jYWw/ZC5nZXRBdHRyaWJ1dGVOUyh1LnNwYWNlLHUubG9jYWwpOmQuZ2V0QXR0cmlidXRlKHUpfXJldHVybiB0aGlzLmVhY2goKHM9PW51bGw/dS5sb2NhbD9ITHQ6cUx0OnR5cGVvZiBzPT0iZnVuY3Rpb24iP3UubG9jYWw/S0x0OkdMdDp1LmxvY2FsP1VMdDpWTHQpKHUscykpfWZ1bmN0aW9uIHhCZShpKXtyZXR1cm4gaS5vd25lckRvY3VtZW50JiZpLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fGkuZG9jdW1lbnQmJml8fGkuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gWUx0KGkpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoaSl9fWZ1bmN0aW9uIFhMdChpLHMsdSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShpLHMsdSl9fWZ1bmN0aW9uIFFMdChpLHMsdSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQ9cy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZD09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGkpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoaSxkLHUpfX1mdW5jdGlvbiBKTHQoaSxzLHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChzPT1udWxsP1lMdDp0eXBlb2Ygcz09ImZ1bmN0aW9uIj9RTHQ6WEx0KShpLHMsdT8/IiIpKTpaTSh0aGlzLm5vZGUoKSxpKX1mdW5jdGlvbiBaTShpLHMpe3JldHVybiBpLnN0eWxlLmdldFByb3BlcnR5VmFsdWUocyl8fHhCZShpKS5nZXRDb21wdXRlZFN0eWxlKGksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShzKX1mdW5jdGlvbiBaTHQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbaV19fWZ1bmN0aW9uIGVNdChpLHMpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbaV09c319ZnVuY3Rpb24gdE10KGkscyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHU9cy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dT09bnVsbD9kZWxldGUgdGhpc1tpXTp0aGlzW2ldPXV9fWZ1bmN0aW9uIG5NdChpLHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChzPT1udWxsP1pMdDp0eXBlb2Ygcz09ImZ1bmN0aW9uIj90TXQ6ZU10KShpLHMpKTp0aGlzLm5vZGUoKVtpXX1mdW5jdGlvbiBrQmUoaSl7cmV0dXJuIGkudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIHlwZShpKXtyZXR1cm4gaS5jbGFzc0xpc3R8fG5ldyBFQmUoaSl9ZnVuY3Rpb24gRUJlKGkpe3RoaXMuX25vZGU9aSx0aGlzLl9uYW1lcz1rQmUoaS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1FQmUucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oaSl7dmFyIHM9dGhpcy5fbmFtZXMuaW5kZXhPZihpKTtzPDAmJih0aGlzLl9uYW1lcy5wdXNoKGkpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihpKXt2YXIgcz10aGlzLl9uYW1lcy5pbmRleE9mKGkpO3M+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UocywxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihpKT49MH19O2Z1bmN0aW9uIFRCZShpLHMpe2Zvcih2YXIgdT15cGUoaSksZD0tMSxwPXMubGVuZ3RoOysrZDxwOyl1LmFkZChzW2RdKX1mdW5jdGlvbiBDQmUoaSxzKXtmb3IodmFyIHU9eXBlKGkpLGQ9LTEscD1zLmxlbmd0aDsrK2Q8cDspdS5yZW1vdmUoc1tkXSl9ZnVuY3Rpb24gck10KGkpe3JldHVybiBmdW5jdGlvbigpe1RCZSh0aGlzLGkpfX1mdW5jdGlvbiBpTXQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7Q0JlKHRoaXMsaSl9fWZ1bmN0aW9uIHNNdChpLHMpe3JldHVybiBmdW5jdGlvbigpeyhzLmFwcGx5KHRoaXMsYXJndW1lbnRzKT9UQmU6Q0JlKSh0aGlzLGkpfX1mdW5jdGlvbiBhTXQoaSxzKXt2YXIgdT1rQmUoaSsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGQ9eXBlKHRoaXMubm9kZSgpKSxwPS0xLHY9dS5sZW5ndGg7KytwPHY7KWlmKCFkLmNvbnRhaW5zKHVbcF0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKHR5cGVvZiBzPT0iZnVuY3Rpb24iP3NNdDpzP3JNdDppTXQpKHUscykpfWZ1bmN0aW9uIG9NdCgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gY010KGkpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9aX19ZnVuY3Rpb24gdU10KGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciBzPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9cz8/IiJ9fWZ1bmN0aW9uIGxNdChpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goaT09bnVsbD9vTXQ6KHR5cGVvZiBpPT0iZnVuY3Rpb24iP3VNdDpjTXQpKGkpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH1mdW5jdGlvbiBoTXQoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBmTXQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9aX19ZnVuY3Rpb24gZE10KGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciBzPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXM/PyIifX1mdW5jdGlvbiBnTXQoaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGk9PW51bGw/aE10Oih0eXBlb2YgaT09ImZ1bmN0aW9uIj9kTXQ6Zk10KShpKSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfWZ1bmN0aW9uIHBNdCgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBiTXQoKXtyZXR1cm4gdGhpcy5lYWNoKHBNdCl9ZnVuY3Rpb24gbU10KCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gdk10KCl7cmV0dXJuIHRoaXMuZWFjaChtTXQpfWZ1bmN0aW9uIHdNdChpKXt2YXIgcz10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOnBCZShpKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChzLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX1mdW5jdGlvbiB5TXQoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiB4TXQoaSxzKXt2YXIgdT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOnBCZShpKSxkPXM9PW51bGw/eU10OnR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6d3BlKHMpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZSh1LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxkLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX1mdW5jdGlvbiBrTXQoKXt2YXIgaT10aGlzLnBhcmVudE5vZGU7aSYmaS5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBFTXQoKXtyZXR1cm4gdGhpcy5lYWNoKGtNdCl9ZnVuY3Rpb24gVE10KCl7dmFyIGk9dGhpcy5jbG9uZU5vZGUoITEpLHM9dGhpcy5wYXJlbnROb2RlO3JldHVybiBzP3MuaW5zZXJ0QmVmb3JlKGksdGhpcy5uZXh0U2libGluZyk6aX1mdW5jdGlvbiBDTXQoKXt2YXIgaT10aGlzLmNsb25lTm9kZSghMCkscz10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHM/cy5pbnNlcnRCZWZvcmUoaSx0aGlzLm5leHRTaWJsaW5nKTppfWZ1bmN0aW9uIFNNdChpKXtyZXR1cm4gdGhpcy5zZWxlY3QoaT9DTXQ6VE10KX1mdW5jdGlvbiBfTXQoaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLGkpOnRoaXMubm9kZSgpLl9fZGF0YV9ffWZ1bmN0aW9uIEFNdChpKXtyZXR1cm4gZnVuY3Rpb24ocyl7aS5jYWxsKHRoaXMscyx0aGlzLl9fZGF0YV9fKX19ZnVuY3Rpb24gTE10KGkpe3JldHVybiBpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocyl7dmFyIHU9IiIsZD1zLmluZGV4T2YoIi4iKTtyZXR1cm4gZD49MCYmKHU9cy5zbGljZShkKzEpLHM9cy5zbGljZSgwLGQpKSx7dHlwZTpzLG5hbWU6dX19KX1mdW5jdGlvbiBNTXQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5fX29uO2lmKHMpe2Zvcih2YXIgdT0wLGQ9LTEscD1zLmxlbmd0aCx2O3U8cDsrK3Updj1zW3VdLCghaS50eXBlfHx2LnR5cGU9PT1pLnR5cGUpJiZ2Lm5hbWU9PT1pLm5hbWU/dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHYudHlwZSx2Lmxpc3RlbmVyLHYub3B0aW9ucyk6c1srK2RdPXY7KytkP3MubGVuZ3RoPWQ6ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIERNdChpLHMsdSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5fX29uLHAsdj1BTXQocyk7aWYoZCl7Zm9yKHZhciBiPTAseT1kLmxlbmd0aDtiPHk7KytiKWlmKChwPWRbYl0pLnR5cGU9PT1pLnR5cGUmJnAubmFtZT09PWkubmFtZSl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHAudHlwZSxwLmxpc3RlbmVyLHAub3B0aW9ucyksdGhpcy5hZGRFdmVudExpc3RlbmVyKHAudHlwZSxwLmxpc3RlbmVyPXYscC5vcHRpb25zPXUpLHAudmFsdWU9cztyZXR1cm59fXRoaXMuYWRkRXZlbnRMaXN0ZW5lcihpLnR5cGUsdix1KSxwPXt0eXBlOmkudHlwZSxuYW1lOmkubmFtZSx2YWx1ZTpzLGxpc3RlbmVyOnYsb3B0aW9uczp1fSxkP2QucHVzaChwKTp0aGlzLl9fb249W3BdfX1mdW5jdGlvbiBJTXQoaSxzLHUpe3ZhciBkPUxNdChpKyIiKSxwLHY9ZC5sZW5ndGgsYjtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciB5PXRoaXMubm9kZSgpLl9fb247aWYoeSl7Zm9yKHZhciBUPTAsXz15Lmxlbmd0aCxBO1Q8XzsrK1QpZm9yKHA9MCxBPXlbVF07cDx2OysrcClpZigoYj1kW3BdKS50eXBlPT09QS50eXBlJiZiLm5hbWU9PT1BLm5hbWUpcmV0dXJuIEEudmFsdWV9cmV0dXJufWZvcih5PXM/RE10Ok1NdCxwPTA7cDx2OysrcCl0aGlzLmVhY2goeShkW3BdLHMsdSkpO3JldHVybiB0aGlzfWZ1bmN0aW9uIFNCZShpLHMsdSl7dmFyIGQ9eEJlKGkpLHA9ZC5DdXN0b21FdmVudDt0eXBlb2YgcD09ImZ1bmN0aW9uIj9wPW5ldyBwKHMsdSk6KHA9ZC5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSx1PyhwLmluaXRFdmVudChzLHUuYnViYmxlcyx1LmNhbmNlbGFibGUpLHAuZGV0YWlsPXUuZGV0YWlsKTpwLmluaXRFdmVudChzLCExLCExKSksaS5kaXNwYXRjaEV2ZW50KHApfWZ1bmN0aW9uIE9NdChpLHMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBTQmUodGhpcyxpLHMpfX1mdW5jdGlvbiBOTXQoaSxzKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gU0JlKHRoaXMsaSxzLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIFBNdChpLHMpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiBzPT0iZnVuY3Rpb24iP05NdDpPTXQpKGkscykpfWZ1bmN0aW9uKkJNdCgpe2Zvcih2YXIgaT10aGlzLl9ncm91cHMscz0wLHU9aS5sZW5ndGg7czx1Oysrcylmb3IodmFyIGQ9aVtzXSxwPTAsdj1kLmxlbmd0aCxiO3A8djsrK3ApKGI9ZFtwXSkmJih5aWVsZCBiKX12YXIgeHBlPVtudWxsXTtmdW5jdGlvbiB4cChpLHMpe3RoaXMuX2dyb3Vwcz1pLHRoaXMuX3BhcmVudHM9c31mdW5jdGlvbiB2Rigpe3JldHVybiBuZXcgeHAoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSx4cGUpfWZ1bmN0aW9uIEZNdCgpe3JldHVybiB0aGlzfXhwLnByb3RvdHlwZT12Ri5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnhwLHNlbGVjdDpsTHQsc2VsZWN0QWxsOmRMdCxzZWxlY3RDaGlsZDptTHQsc2VsZWN0Q2hpbGRyZW46eEx0LGZpbHRlcjprTHQsZGF0YTpBTHQsZW50ZXI6RUx0LGV4aXQ6TUx0LGpvaW46REx0LG1lcmdlOklMdCxzZWxlY3Rpb246Rk10LG9yZGVyOk9MdCxzb3J0Ok5MdCxjYWxsOkJMdCxub2RlczpGTHQsbm9kZTpSTHQsc2l6ZTpqTHQsZW1wdHk6JEx0LGVhY2g6ekx0LGF0dHI6V0x0LHN0eWxlOkpMdCxwcm9wZXJ0eTpuTXQsY2xhc3NlZDphTXQsdGV4dDpsTXQsaHRtbDpnTXQscmFpc2U6Yk10LGxvd2VyOnZNdCxhcHBlbmQ6d010LGluc2VydDp4TXQscmVtb3ZlOkVNdCxjbG9uZTpTTXQsZGF0dW06X010LG9uOklNdCxkaXNwYXRjaDpQTXQsW1N5bWJvbC5pdGVyYXRvcl06Qk10fTtmdW5jdGlvbiBJcihpKXtyZXR1cm4gdHlwZW9mIGk9PSJzdHJpbmciP25ldyB4cChbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoaSldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IHhwKFtbaV1dLHhwZSl9ZnVuY3Rpb24gX0JlKGkpe3JldHVybiB0eXBlb2YgaT09InN0cmluZyI/bmV3IHhwKFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGkpXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IHhwKFtiQmUoaSldLHhwZSl9ZnVuY3Rpb24gd0YoaSxzLHUpe2kucHJvdG90eXBlPXMucHJvdG90eXBlPXUsdS5jb25zdHJ1Y3Rvcj1pfWZ1bmN0aW9uIFJZKGkscyl7dmFyIHU9T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSk7Zm9yKHZhciBkIGluIHMpdVtkXT1zW2RdO3JldHVybiB1fWZ1bmN0aW9uIGZDKCl7fXZhciB5Rj0uNyxqWT0xL3lGLGVEPSJcXHMqKFsrLV0/XFxkKylcXHMqIix4Rj0iXFxzKihbKy1dPyg/OlxcZCpcXC4pP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsUjQ9IlxccyooWystXT8oPzpcXGQqXFwuKT9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixSTXQ9L14jKFswLTlhLWZdezMsOH0pJC8sak10PW5ldyBSZWdFeHAoYF5yZ2JcXCgke2VEfSwke2VEfSwke2VEfVxcKSRgKSwkTXQ9bmV3IFJlZ0V4cChgXnJnYlxcKCR7UjR9LCR7UjR9LCR7UjR9XFwpJGApLHpNdD1uZXcgUmVnRXhwKGBecmdiYVxcKCR7ZUR9LCR7ZUR9LCR7ZUR9LCR7eEZ9XFwpJGApLHFNdD1uZXcgUmVnRXhwKGBecmdiYVxcKCR7UjR9LCR7UjR9LCR7UjR9LCR7eEZ9XFwpJGApLEhNdD1uZXcgUmVnRXhwKGBeaHNsXFwoJHt4Rn0sJHtSNH0sJHtSNH1cXCkkYCksVk10PW5ldyBSZWdFeHAoYF5oc2xhXFwoJHt4Rn0sJHtSNH0sJHtSNH0sJHt4Rn1cXCkkYCksQUJlPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O3dGKGZDLGRDLHtjb3B5KGkpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsaSl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OkxCZSxmb3JtYXRIZXg6TEJlLGZvcm1hdEhleDg6VU10LGZvcm1hdEhzbDpHTXQsZm9ybWF0UmdiOk1CZSx0b1N0cmluZzpNQmV9KTtmdW5jdGlvbiBMQmUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBVTXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXg4KCl9ZnVuY3Rpb24gR010KCl7cmV0dXJuIEJCZSh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBNQmUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBkQyhpKXt2YXIgcyx1O3JldHVybiBpPShpKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwocz1STXQuZXhlYyhpKSk/KHU9c1sxXS5sZW5ndGgscz1wYXJzZUludChzWzFdLDE2KSx1PT09Nj9EQmUocyk6dT09PTM/bmV3IE1nKHM+PjgmMTV8cz4+NCYyNDAscz4+NCYxNXxzJjI0MCwocyYxNSk8PDR8cyYxNSwxKTp1PT09OD8kWShzPj4yNCYyNTUscz4+MTYmMjU1LHM+PjgmMjU1LChzJjI1NSkvMjU1KTp1PT09ND8kWShzPj4xMiYxNXxzPj44JjI0MCxzPj44JjE1fHM+PjQmMjQwLHM+PjQmMTV8cyYyNDAsKChzJjE1KTw8NHxzJjE1KS8yNTUpOm51bGwpOihzPWpNdC5leGVjKGkpKT9uZXcgTWcoc1sxXSxzWzJdLHNbM10sMSk6KHM9JE10LmV4ZWMoaSkpP25ldyBNZyhzWzFdKjI1NS8xMDAsc1syXSoyNTUvMTAwLHNbM10qMjU1LzEwMCwxKToocz16TXQuZXhlYyhpKSk/JFkoc1sxXSxzWzJdLHNbM10sc1s0XSk6KHM9cU10LmV4ZWMoaSkpPyRZKHNbMV0qMjU1LzEwMCxzWzJdKjI1NS8xMDAsc1szXSoyNTUvMTAwLHNbNF0pOihzPUhNdC5leGVjKGkpKT9QQmUoc1sxXSxzWzJdLzEwMCxzWzNdLzEwMCwxKToocz1WTXQuZXhlYyhpKSk/UEJlKHNbMV0sc1syXS8xMDAsc1szXS8xMDAsc1s0XSk6QUJlLmhhc093blByb3BlcnR5KGkpP0RCZShBQmVbaV0pOmk9PT0idHJhbnNwYXJlbnQiP25ldyBNZyhOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIERCZShpKXtyZXR1cm4gbmV3IE1nKGk+PjE2JjI1NSxpPj44JjI1NSxpJjI1NSwxKX1mdW5jdGlvbiAkWShpLHMsdSxkKXtyZXR1cm4gZDw9MCYmKGk9cz11PU5hTiksbmV3IE1nKGkscyx1LGQpfWZ1bmN0aW9uIElCZShpKXtyZXR1cm4gaSBpbnN0YW5jZW9mIGZDfHwoaT1kQyhpKSksaT8oaT1pLnJnYigpLG5ldyBNZyhpLnIsaS5nLGkuYixpLm9wYWNpdHkpKTpuZXcgTWd9ZnVuY3Rpb24ga3BlKGkscyx1LGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9JQmUoaSk6bmV3IE1nKGkscyx1LGQ/PzEpfWZ1bmN0aW9uIE1nKGkscyx1LGQpe3RoaXMucj0raSx0aGlzLmc9K3MsdGhpcy5iPSt1LHRoaXMub3BhY2l0eT0rZH13RihNZyxrcGUsUlkoZkMse2JyaWdodGVyKGkpe3JldHVybiBpPWk9PW51bGw/alk6TWF0aC5wb3coalksaSksbmV3IE1nKHRoaXMucippLHRoaXMuZyppLHRoaXMuYippLHRoaXMub3BhY2l0eSl9LGRhcmtlcihpKXtyZXR1cm4gaT1pPT1udWxsP3lGOk1hdGgucG93KHlGLGkpLG5ldyBNZyh0aGlzLnIqaSx0aGlzLmcqaSx0aGlzLmIqaSx0aGlzLm9wYWNpdHkpfSxyZ2IoKXtyZXR1cm4gdGhpc30sY2xhbXAoKXtyZXR1cm4gbmV3IE1nKGdDKHRoaXMuciksZ0ModGhpcy5nKSxnQyh0aGlzLmIpLHpZKHRoaXMub3BhY2l0eSkpfSxkaXNwbGF5YWJsZSgpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6T0JlLGZvcm1hdEhleDpPQmUsZm9ybWF0SGV4ODpLTXQsZm9ybWF0UmdiOk5CZSx0b1N0cmluZzpOQmV9KSk7ZnVuY3Rpb24gT0JlKCl7cmV0dXJuYCMke3BDKHRoaXMucil9JHtwQyh0aGlzLmcpfSR7cEModGhpcy5iKX1gfWZ1bmN0aW9uIEtNdCgpe3JldHVybmAjJHtwQyh0aGlzLnIpfSR7cEModGhpcy5nKX0ke3BDKHRoaXMuYil9JHtwQygoaXNOYU4odGhpcy5vcGFjaXR5KT8xOnRoaXMub3BhY2l0eSkqMjU1KX1gfWZ1bmN0aW9uIE5CZSgpe2NvbnN0IGk9elkodGhpcy5vcGFjaXR5KTtyZXR1cm5gJHtpPT09MT8icmdiKCI6InJnYmEoIn0ke2dDKHRoaXMucil9LCAke2dDKHRoaXMuZyl9LCAke2dDKHRoaXMuYil9JHtpPT09MT8iKSI6YCwgJHtpfSlgfWB9ZnVuY3Rpb24gelkoaSl7cmV0dXJuIGlzTmFOKGkpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGkpKX1mdW5jdGlvbiBnQyhpKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChpKXx8MCkpfWZ1bmN0aW9uIHBDKGkpe3JldHVybiBpPWdDKGkpLChpPDE2PyIwIjoiIikraS50b1N0cmluZygxNil9ZnVuY3Rpb24gUEJlKGkscyx1LGQpe3JldHVybiBkPD0wP2k9cz11PU5hTjp1PD0wfHx1Pj0xP2k9cz1OYU46czw9MCYmKGk9TmFOKSxuZXcgQTMoaSxzLHUsZCl9ZnVuY3Rpb24gQkJlKGkpe2lmKGkgaW5zdGFuY2VvZiBBMylyZXR1cm4gbmV3IEEzKGkuaCxpLnMsaS5sLGkub3BhY2l0eSk7aWYoaSBpbnN0YW5jZW9mIGZDfHwoaT1kQyhpKSksIWkpcmV0dXJuIG5ldyBBMztpZihpIGluc3RhbmNlb2YgQTMpcmV0dXJuIGk7aT1pLnJnYigpO3ZhciBzPWkuci8yNTUsdT1pLmcvMjU1LGQ9aS5iLzI1NSxwPU1hdGgubWluKHMsdSxkKSx2PU1hdGgubWF4KHMsdSxkKSxiPU5hTix5PXYtcCxUPSh2K3ApLzI7cmV0dXJuIHk/KHM9PT12P2I9KHUtZCkveSsodTxkKSo2OnU9PT12P2I9KGQtcykveSsyOmI9KHMtdSkveSs0LHkvPVQ8LjU/ditwOjItdi1wLGIqPTYwKTp5PVQ+MCYmVDwxPzA6YixuZXcgQTMoYix5LFQsaS5vcGFjaXR5KX1mdW5jdGlvbiBXTXQoaSxzLHUsZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP0JCZShpKTpuZXcgQTMoaSxzLHUsZD8/MSl9ZnVuY3Rpb24gQTMoaSxzLHUsZCl7dGhpcy5oPStpLHRoaXMucz0rcyx0aGlzLmw9K3UsdGhpcy5vcGFjaXR5PStkfXdGKEEzLFdNdCxSWShmQyx7YnJpZ2h0ZXIoaSl7cmV0dXJuIGk9aT09bnVsbD9qWTpNYXRoLnBvdyhqWSxpKSxuZXcgQTModGhpcy5oLHRoaXMucyx0aGlzLmwqaSx0aGlzLm9wYWNpdHkpfSxkYXJrZXIoaSl7cmV0dXJuIGk9aT09bnVsbD95RjpNYXRoLnBvdyh5RixpKSxuZXcgQTModGhpcy5oLHRoaXMucyx0aGlzLmwqaSx0aGlzLm9wYWNpdHkpfSxyZ2IoKXt2YXIgaT10aGlzLmglMzYwKyh0aGlzLmg8MCkqMzYwLHM9aXNOYU4oaSl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMsdT10aGlzLmwsZD11Kyh1PC41P3U6MS11KSpzLHA9Mip1LWQ7cmV0dXJuIG5ldyBNZyhFcGUoaT49MjQwP2ktMjQwOmkrMTIwLHAsZCksRXBlKGkscCxkKSxFcGUoaTwxMjA/aSsyNDA6aS0xMjAscCxkKSx0aGlzLm9wYWNpdHkpfSxjbGFtcCgpe3JldHVybiBuZXcgQTMoRkJlKHRoaXMuaCkscVkodGhpcy5zKSxxWSh0aGlzLmwpLHpZKHRoaXMub3BhY2l0eSkpfSxkaXNwbGF5YWJsZSgpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsKCl7Y29uc3QgaT16WSh0aGlzLm9wYWNpdHkpO3JldHVybmAke2k9PT0xPyJoc2woIjoiaHNsYSgifSR7RkJlKHRoaXMuaCl9LCAke3FZKHRoaXMucykqMTAwfSUsICR7cVkodGhpcy5sKSoxMDB9JSR7aT09PTE/IikiOmAsICR7aX0pYH1gfX0pKTtmdW5jdGlvbiBGQmUoaSl7cmV0dXJuIGk9KGl8fDApJTM2MCxpPDA/aSszNjA6aX1mdW5jdGlvbiBxWShpKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigxLGl8fDApKX1mdW5jdGlvbiBFcGUoaSxzLHUpe3JldHVybihpPDYwP3MrKHUtcykqaS82MDppPDE4MD91Omk8MjQwP3MrKHUtcykqKDI0MC1pKS82MDpzKSoyNTV9Y29uc3QgWU10PU1hdGguUEkvMTgwLFhNdD0xODAvTWF0aC5QSSxIWT0xOCxSQmU9Ljk2NDIyLGpCZT0xLCRCZT0uODI1MjEsekJlPTQvMjksdEQ9Ni8yOSxxQmU9Myp0RCp0RCxRTXQ9dEQqdEQqdEQ7ZnVuY3Rpb24gSEJlKGkpe2lmKGkgaW5zdGFuY2VvZiBqNClyZXR1cm4gbmV3IGo0KGkubCxpLmEsaS5iLGkub3BhY2l0eSk7aWYoaSBpbnN0YW5jZW9mIHA3KXJldHVybiBWQmUoaSk7aSBpbnN0YW5jZW9mIE1nfHwoaT1JQmUoaSkpO3ZhciBzPV9wZShpLnIpLHU9X3BlKGkuZyksZD1fcGUoaS5iKSxwPVRwZSgoLjIyMjUwNDUqcysuNzE2ODc4Nip1Ky4wNjA2MTY5KmQpL2pCZSksdixiO3JldHVybiBzPT09dSYmdT09PWQ/dj1iPXA6KHY9VHBlKCguNDM2MDc0NypzKy4zODUwNjQ5KnUrLjE0MzA4MDQqZCkvUkJlKSxiPVRwZSgoLjAxMzkzMjIqcysuMDk3MTA0NSp1Ky43MTQxNzMzKmQpLyRCZSkpLG5ldyBqNCgxMTYqcC0xNiw1MDAqKHYtcCksMjAwKihwLWIpLGkub3BhY2l0eSl9ZnVuY3Rpb24gSk10KGkscyx1LGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9IQmUoaSk6bmV3IGo0KGkscyx1LGQ/PzEpfWZ1bmN0aW9uIGo0KGkscyx1LGQpe3RoaXMubD0raSx0aGlzLmE9K3MsdGhpcy5iPSt1LHRoaXMub3BhY2l0eT0rZH13RihqNCxKTXQsUlkoZkMse2JyaWdodGVyKGkpe3JldHVybiBuZXcgajQodGhpcy5sK0hZKihpPz8xKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcihpKXtyZXR1cm4gbmV3IGo0KHRoaXMubC1IWSooaT8/MSksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2IoKXt2YXIgaT0odGhpcy5sKzE2KS8xMTYscz1pc05hTih0aGlzLmEpP2k6aSt0aGlzLmEvNTAwLHU9aXNOYU4odGhpcy5iKT9pOmktdGhpcy5iLzIwMDtyZXR1cm4gcz1SQmUqQ3BlKHMpLGk9akJlKkNwZShpKSx1PSRCZSpDcGUodSksbmV3IE1nKFNwZSgzLjEzMzg1NjEqcy0xLjYxNjg2NjcqaS0uNDkwNjE0Nip1KSxTcGUoLS45Nzg3Njg0KnMrMS45MTYxNDE1KmkrLjAzMzQ1NCp1KSxTcGUoLjA3MTk0NTMqcy0uMjI4OTkxNCppKzEuNDA1MjQyNyp1KSx0aGlzLm9wYWNpdHkpfX0pKTtmdW5jdGlvbiBUcGUoaSl7cmV0dXJuIGk+UU10P01hdGgucG93KGksMS8zKTppL3FCZSt6QmV9ZnVuY3Rpb24gQ3BlKGkpe3JldHVybiBpPnREP2kqaSppOnFCZSooaS16QmUpfWZ1bmN0aW9uIFNwZShpKXtyZXR1cm4gMjU1KihpPD0uMDAzMTMwOD8xMi45MippOjEuMDU1Kk1hdGgucG93KGksMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIF9wZShpKXtyZXR1cm4oaS89MjU1KTw9LjA0MDQ1P2kvMTIuOTI6TWF0aC5wb3coKGkrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBaTXQoaSl7aWYoaSBpbnN0YW5jZW9mIHA3KXJldHVybiBuZXcgcDcoaS5oLGkuYyxpLmwsaS5vcGFjaXR5KTtpZihpIGluc3RhbmNlb2YgajR8fChpPUhCZShpKSksaS5hPT09MCYmaS5iPT09MClyZXR1cm4gbmV3IHA3KE5hTiwwPGkubCYmaS5sPDEwMD8wOk5hTixpLmwsaS5vcGFjaXR5KTt2YXIgcz1NYXRoLmF0YW4yKGkuYixpLmEpKlhNdDtyZXR1cm4gbmV3IHA3KHM8MD9zKzM2MDpzLE1hdGguc3FydChpLmEqaS5hK2kuYippLmIpLGkubCxpLm9wYWNpdHkpfWZ1bmN0aW9uIEFwZShpLHMsdSxkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/Wk10KGkpOm5ldyBwNyhpLHMsdSxkPz8xKX1mdW5jdGlvbiBwNyhpLHMsdSxkKXt0aGlzLmg9K2ksdGhpcy5jPStzLHRoaXMubD0rdSx0aGlzLm9wYWNpdHk9K2R9ZnVuY3Rpb24gVkJlKGkpe2lmKGlzTmFOKGkuaCkpcmV0dXJuIG5ldyBqNChpLmwsMCwwLGkub3BhY2l0eSk7dmFyIHM9aS5oKllNdDtyZXR1cm4gbmV3IGo0KGkubCxNYXRoLmNvcyhzKSppLmMsTWF0aC5zaW4ocykqaS5jLGkub3BhY2l0eSl9d0YocDcsQXBlLFJZKGZDLHticmlnaHRlcihpKXtyZXR1cm4gbmV3IHA3KHRoaXMuaCx0aGlzLmMsdGhpcy5sK0hZKihpPz8xKSx0aGlzLm9wYWNpdHkpfSxkYXJrZXIoaSl7cmV0dXJuIG5ldyBwNyh0aGlzLmgsdGhpcy5jLHRoaXMubC1IWSooaT8/MSksdGhpcy5vcGFjaXR5KX0scmdiKCl7cmV0dXJuIFZCZSh0aGlzKS5yZ2IoKX19KSk7Y29uc3QgVlk9aT0+KCk9Pmk7ZnVuY3Rpb24gVUJlKGkscyl7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBpK3Uqc319ZnVuY3Rpb24gZUR0KGkscyx1KXtyZXR1cm4gaT1NYXRoLnBvdyhpLHUpLHM9TWF0aC5wb3cocyx1KS1pLHU9MS91LGZ1bmN0aW9uKGQpe3JldHVybiBNYXRoLnBvdyhpK2Qqcyx1KX19ZnVuY3Rpb24gdER0KGkscyl7dmFyIHU9cy1pO3JldHVybiB1P1VCZShpLHU+MTgwfHx1PC0xODA/dS0zNjAqTWF0aC5yb3VuZCh1LzM2MCk6dSk6VlkoaXNOYU4oaSk/czppKX1mdW5jdGlvbiBuRHQoaSl7cmV0dXJuKGk9K2kpPT0xP2tGOmZ1bmN0aW9uKHMsdSl7cmV0dXJuIHUtcz9lRHQocyx1LGkpOlZZKGlzTmFOKHMpP3U6cyl9fWZ1bmN0aW9uIGtGKGkscyl7dmFyIHU9cy1pO3JldHVybiB1P1VCZShpLHUpOlZZKGlzTmFOKGkpP3M6aSl9Y29uc3QgVVk9ZnVuY3Rpb24gaShzKXt2YXIgdT1uRHQocyk7ZnVuY3Rpb24gZChwLHYpe3ZhciBiPXUoKHA9a3BlKHApKS5yLCh2PWtwZSh2KSkucikseT11KHAuZyx2LmcpLFQ9dShwLmIsdi5iKSxfPWtGKHAub3BhY2l0eSx2Lm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihBKXtyZXR1cm4gcC5yPWIoQSkscC5nPXkoQSkscC5iPVQoQSkscC5vcGFjaXR5PV8oQSkscCsiIn19cmV0dXJuIGQuZ2FtbWE9aSxkfSgxKTtmdW5jdGlvbiByRHQoaSxzKXtzfHwocz1bXSk7dmFyIHU9aT9NYXRoLm1pbihzLmxlbmd0aCxpLmxlbmd0aCk6MCxkPXMuc2xpY2UoKSxwO3JldHVybiBmdW5jdGlvbih2KXtmb3IocD0wO3A8dTsrK3ApZFtwXT1pW3BdKigxLXYpK3NbcF0qdjtyZXR1cm4gZH19ZnVuY3Rpb24gaUR0KGkpe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoaSkmJiEoaSBpbnN0YW5jZW9mIERhdGFWaWV3KX1mdW5jdGlvbiBzRHQoaSxzKXt2YXIgdT1zP3MubGVuZ3RoOjAsZD1pP01hdGgubWluKHUsaS5sZW5ndGgpOjAscD1uZXcgQXJyYXkoZCksdj1uZXcgQXJyYXkodSksYjtmb3IoYj0wO2I8ZDsrK2IpcFtiXT1EcGUoaVtiXSxzW2JdKTtmb3IoO2I8dTsrK2IpdltiXT1zW2JdO3JldHVybiBmdW5jdGlvbih5KXtmb3IoYj0wO2I8ZDsrK2IpdltiXT1wW2JdKHkpO3JldHVybiB2fX1mdW5jdGlvbiBhRHQoaSxzKXt2YXIgdT1uZXcgRGF0ZTtyZXR1cm4gaT0raSxzPStzLGZ1bmN0aW9uKGQpe3JldHVybiB1LnNldFRpbWUoaSooMS1kKStzKmQpLHV9fWZ1bmN0aW9uIEwzKGkscyl7cmV0dXJuIGk9K2kscz0rcyxmdW5jdGlvbih1KXtyZXR1cm4gaSooMS11KStzKnV9fWZ1bmN0aW9uIG9EdChpLHMpe3ZhciB1PXt9LGQ9e30scDsoaT09PW51bGx8fHR5cGVvZiBpIT0ib2JqZWN0IikmJihpPXt9KSwocz09PW51bGx8fHR5cGVvZiBzIT0ib2JqZWN0IikmJihzPXt9KTtmb3IocCBpbiBzKXAgaW4gaT91W3BdPURwZShpW3BdLHNbcF0pOmRbcF09c1twXTtyZXR1cm4gZnVuY3Rpb24odil7Zm9yKHAgaW4gdSlkW3BdPXVbcF0odik7cmV0dXJuIGR9fXZhciBMcGU9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLE1wZT1uZXcgUmVnRXhwKExwZS5zb3VyY2UsImciKTtmdW5jdGlvbiBjRHQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGl9fWZ1bmN0aW9uIHVEdChpKXtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIGkocykrIiJ9fWZ1bmN0aW9uIEdCZShpLHMpe3ZhciB1PUxwZS5sYXN0SW5kZXg9TXBlLmxhc3RJbmRleD0wLGQscCx2LGI9LTEseT1bXSxUPVtdO2ZvcihpPWkrIiIscz1zKyIiOyhkPUxwZS5leGVjKGkpKSYmKHA9TXBlLmV4ZWMocykpOykodj1wLmluZGV4KT51JiYodj1zLnNsaWNlKHUsdikseVtiXT95W2JdKz12OnlbKytiXT12KSwoZD1kWzBdKT09PShwPXBbMF0pP3lbYl0/eVtiXSs9cDp5WysrYl09cDooeVsrK2JdPW51bGwsVC5wdXNoKHtpOmIseDpMMyhkLHApfSkpLHU9TXBlLmxhc3RJbmRleDtyZXR1cm4gdTxzLmxlbmd0aCYmKHY9cy5zbGljZSh1KSx5W2JdP3lbYl0rPXY6eVsrK2JdPXYpLHkubGVuZ3RoPDI/VFswXT91RHQoVFswXS54KTpjRHQocyk6KHM9VC5sZW5ndGgsZnVuY3Rpb24oXyl7Zm9yKHZhciBBPTAsUDtBPHM7KytBKXlbKFA9VFtBXSkuaV09UC54KF8pO3JldHVybiB5LmpvaW4oIiIpfSl9ZnVuY3Rpb24gRHBlKGkscyl7dmFyIHU9dHlwZW9mIHMsZDtyZXR1cm4gcz09bnVsbHx8dT09PSJib29sZWFuIj9WWShzKToodT09PSJudW1iZXIiP0wzOnU9PT0ic3RyaW5nIj8oZD1kQyhzKSk/KHM9ZCxVWSk6R0JlOnMgaW5zdGFuY2VvZiBkQz9VWTpzIGluc3RhbmNlb2YgRGF0ZT9hRHQ6aUR0KHMpP3JEdDpBcnJheS5pc0FycmF5KHMpP3NEdDp0eXBlb2Ygcy52YWx1ZU9mIT0iZnVuY3Rpb24iJiZ0eXBlb2Ygcy50b1N0cmluZyE9ImZ1bmN0aW9uInx8aXNOYU4ocyk/b0R0OkwzKShpLHMpfWZ1bmN0aW9uIGxEdChpLHMpe3JldHVybiBpPStpLHM9K3MsZnVuY3Rpb24odSl7cmV0dXJuIE1hdGgucm91bmQoaSooMS11KStzKnUpfX12YXIgS0JlPTE4MC9NYXRoLlBJLElwZT17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiBXQmUoaSxzLHUsZCxwLHYpe3ZhciBiLHksVDtyZXR1cm4oYj1NYXRoLnNxcnQoaSppK3MqcykpJiYoaS89YixzLz1iKSwoVD1pKnUrcypkKSYmKHUtPWkqVCxkLT1zKlQpLCh5PU1hdGguc3FydCh1KnUrZCpkKSkmJih1Lz15LGQvPXksVC89eSksaSpkPHMqdSYmKGk9LWkscz0tcyxUPS1ULGI9LWIpLHt0cmFuc2xhdGVYOnAsdHJhbnNsYXRlWTp2LHJvdGF0ZTpNYXRoLmF0YW4yKHMsaSkqS0JlLHNrZXdYOk1hdGguYXRhbihUKSpLQmUsc2NhbGVYOmIsc2NhbGVZOnl9fXZhciBHWTtmdW5jdGlvbiBoRHQoaSl7Y29uc3Qgcz1uZXcodHlwZW9mIERPTU1hdHJpeD09ImZ1bmN0aW9uIj9ET01NYXRyaXg6V2ViS2l0Q1NTTWF0cml4KShpKyIiKTtyZXR1cm4gcy5pc0lkZW50aXR5P0lwZTpXQmUocy5hLHMuYixzLmMscy5kLHMuZSxzLmYpfWZ1bmN0aW9uIGZEdChpKXtyZXR1cm4gaT09bnVsbHx8KEdZfHwoR1k9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksR1kuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGkpLCEoaT1HWS50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKSk/SXBlOihpPWkubWF0cml4LFdCZShpLmEsaS5iLGkuYyxpLmQsaS5lLGkuZikpfWZ1bmN0aW9uIFlCZShpLHMsdSxkKXtmdW5jdGlvbiBwKF8pe3JldHVybiBfLmxlbmd0aD9fLnBvcCgpKyIgIjoiIn1mdW5jdGlvbiB2KF8sQSxQLFIsRixqKXtpZihfIT09UHx8QSE9PVIpe3ZhciBLPUYucHVzaCgidHJhbnNsYXRlKCIsbnVsbCxzLG51bGwsdSk7ai5wdXNoKHtpOkstNCx4OkwzKF8sUCl9LHtpOkstMix4OkwzKEEsUil9KX1lbHNlKFB8fFIpJiZGLnB1c2goInRyYW5zbGF0ZSgiK1ArcytSK3UpfWZ1bmN0aW9uIGIoXyxBLFAsUil7XyE9PUE/KF8tQT4xODA/QSs9MzYwOkEtXz4xODAmJihfKz0zNjApLFIucHVzaCh7aTpQLnB1c2gocChQKSsicm90YXRlKCIsbnVsbCxkKS0yLHg6TDMoXyxBKX0pKTpBJiZQLnB1c2gocChQKSsicm90YXRlKCIrQStkKX1mdW5jdGlvbiB5KF8sQSxQLFIpe18hPT1BP1IucHVzaCh7aTpQLnB1c2gocChQKSsic2tld1goIixudWxsLGQpLTIseDpMMyhfLEEpfSk6QSYmUC5wdXNoKHAoUCkrInNrZXdYKCIrQStkKX1mdW5jdGlvbiBUKF8sQSxQLFIsRixqKXtpZihfIT09UHx8QSE9PVIpe3ZhciBLPUYucHVzaChwKEYpKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTtqLnB1c2goe2k6Sy00LHg6TDMoXyxQKX0se2k6Sy0yLHg6TDMoQSxSKX0pfWVsc2UoUCE9PTF8fFIhPT0xKSYmRi5wdXNoKHAoRikrInNjYWxlKCIrUCsiLCIrUisiKSIpfXJldHVybiBmdW5jdGlvbihfLEEpe3ZhciBQPVtdLFI9W107cmV0dXJuIF89aShfKSxBPWkoQSksdihfLnRyYW5zbGF0ZVgsXy50cmFuc2xhdGVZLEEudHJhbnNsYXRlWCxBLnRyYW5zbGF0ZVksUCxSKSxiKF8ucm90YXRlLEEucm90YXRlLFAsUikseShfLnNrZXdYLEEuc2tld1gsUCxSKSxUKF8uc2NhbGVYLF8uc2NhbGVZLEEuc2NhbGVYLEEuc2NhbGVZLFAsUiksXz1BPW51bGwsZnVuY3Rpb24oRil7Zm9yKHZhciBqPS0xLEs9Ui5sZW5ndGgsZWU7KytqPEs7KVBbKGVlPVJbal0pLmldPWVlLngoRik7cmV0dXJuIFAuam9pbigiIil9fX12YXIgZER0PVlCZShoRHQsInB4LCAiLCJweCkiLCJkZWcpIiksZ0R0PVlCZShmRHQsIiwgIiwiKSIsIikiKTtmdW5jdGlvbiBwRHQoaSl7cmV0dXJuIGZ1bmN0aW9uKHMsdSl7dmFyIGQ9aSgocz1BcGUocykpLmgsKHU9QXBlKHUpKS5oKSxwPWtGKHMuYyx1LmMpLHY9a0Yocy5sLHUubCksYj1rRihzLm9wYWNpdHksdS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oeSl7cmV0dXJuIHMuaD1kKHkpLHMuYz1wKHkpLHMubD12KHkpLHMub3BhY2l0eT1iKHkpLHMrIiJ9fX1jb25zdCBiRHQ9cER0KHREdCk7dmFyIG5EPTAsRUY9MCxURj0wLFhCZT0xZTMsS1ksQ0YsV1k9MCxiQz0wLFlZPTAsU0Y9dHlwZW9mIHBlcmZvcm1hbmNlPT0ib2JqZWN0IiYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUsUUJlPXR5cGVvZiB3aW5kb3c9PSJvYmplY3QiJiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKGkpe3NldFRpbWVvdXQoaSwxNyl9O2Z1bmN0aW9uIE9wZSgpe3JldHVybiBiQ3x8KFFCZShtRHQpLGJDPVNGLm5vdygpK1lZKX1mdW5jdGlvbiBtRHQoKXtiQz0wfWZ1bmN0aW9uIFhZKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1YWS5wcm90b3R5cGU9SkJlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6WFkscmVzdGFydDpmdW5jdGlvbihpLHMsdSl7aWYodHlwZW9mIGkhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTt1PSh1PT1udWxsP09wZSgpOit1KSsocz09bnVsbD8wOitzKSwhdGhpcy5fbmV4dCYmQ0YhPT10aGlzJiYoQ0Y/Q0YuX25leHQ9dGhpczpLWT10aGlzLENGPXRoaXMpLHRoaXMuX2NhbGw9aSx0aGlzLl90aW1lPXUsTnBlKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLE5wZSgpKX19O2Z1bmN0aW9uIEpCZShpLHMsdSl7dmFyIGQ9bmV3IFhZO3JldHVybiBkLnJlc3RhcnQoaSxzLHUpLGR9ZnVuY3Rpb24gdkR0KCl7T3BlKCksKytuRDtmb3IodmFyIGk9S1kscztpOykocz1iQy1pLl90aW1lKT49MCYmaS5fY2FsbC5jYWxsKHZvaWQgMCxzKSxpPWkuX25leHQ7LS1uRH1mdW5jdGlvbiBaQmUoKXtiQz0oV1k9U0Yubm93KCkpK1lZLG5EPUVGPTA7dHJ5e3ZEdCgpfWZpbmFsbHl7bkQ9MCx5RHQoKSxiQz0wfX1mdW5jdGlvbiB3RHQoKXt2YXIgaT1TRi5ub3coKSxzPWktV1k7cz5YQmUmJihZWS09cyxXWT1pKX1mdW5jdGlvbiB5RHQoKXtmb3IodmFyIGkscz1LWSx1LGQ9MS8wO3M7KXMuX2NhbGw/KGQ+cy5fdGltZSYmKGQ9cy5fdGltZSksaT1zLHM9cy5fbmV4dCk6KHU9cy5fbmV4dCxzLl9uZXh0PW51bGwscz1pP2kuX25leHQ9dTpLWT11KTtDRj1pLE5wZShkKX1mdW5jdGlvbiBOcGUoaSl7aWYoIW5EKXtFRiYmKEVGPWNsZWFyVGltZW91dChFRikpO3ZhciBzPWktYkM7cz4yND8oaTwxLzAmJihFRj1zZXRUaW1lb3V0KFpCZSxpLVNGLm5vdygpLVlZKSksVEYmJihURj1jbGVhckludGVydmFsKFRGKSkpOihURnx8KFdZPVNGLm5vdygpLFRGPXNldEludGVydmFsKHdEdCxYQmUpKSxuRD0xLFFCZShaQmUpKX19ZnVuY3Rpb24gZUZlKGkscyx1KXt2YXIgZD1uZXcgWFk7cmV0dXJuIHM9cz09bnVsbD8wOitzLGQucmVzdGFydChwPT57ZC5zdG9wKCksaShwK3MpfSxzLHUpLGR9dmFyIHhEdD1mQmUoInN0YXJ0IiwiZW5kIiwiY2FuY2VsIiwiaW50ZXJydXB0Iiksa0R0PVtdLHRGZT0wLG5GZT0xLFBwZT0yLFFZPTMsckZlPTQsQnBlPTUsSlk9NjtmdW5jdGlvbiBaWShpLHMsdSxkLHAsdil7dmFyIGI9aS5fX3RyYW5zaXRpb247aWYoIWIpaS5fX3RyYW5zaXRpb249e307ZWxzZSBpZih1IGluIGIpcmV0dXJuO0VEdChpLHUse25hbWU6cyxpbmRleDpkLGdyb3VwOnAsb246eER0LHR3ZWVuOmtEdCx0aW1lOnYudGltZSxkZWxheTp2LmRlbGF5LGR1cmF0aW9uOnYuZHVyYXRpb24sZWFzZTp2LmVhc2UsdGltZXI6bnVsbCxzdGF0ZTp0RmV9KX1mdW5jdGlvbiBGcGUoaSxzKXt2YXIgdT1NMyhpLHMpO2lmKHUuc3RhdGU+dEZlKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkIik7cmV0dXJuIHV9ZnVuY3Rpb24gJDQoaSxzKXt2YXIgdT1NMyhpLHMpO2lmKHUuc3RhdGU+UVkpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nIik7cmV0dXJuIHV9ZnVuY3Rpb24gTTMoaSxzKXt2YXIgdT1pLl9fdHJhbnNpdGlvbjtpZighdXx8ISh1PXVbc10pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gdX1mdW5jdGlvbiBFRHQoaSxzLHUpe3ZhciBkPWkuX190cmFuc2l0aW9uLHA7ZFtzXT11LHUudGltZXI9SkJlKHYsMCx1LnRpbWUpO2Z1bmN0aW9uIHYoXyl7dS5zdGF0ZT1uRmUsdS50aW1lci5yZXN0YXJ0KGIsdS5kZWxheSx1LnRpbWUpLHUuZGVsYXk8PV8mJmIoXy11LmRlbGF5KX1mdW5jdGlvbiBiKF8pe3ZhciBBLFAsUixGO2lmKHUuc3RhdGUhPT1uRmUpcmV0dXJuIFQoKTtmb3IoQSBpbiBkKWlmKEY9ZFtBXSxGLm5hbWU9PT11Lm5hbWUpe2lmKEYuc3RhdGU9PT1RWSlyZXR1cm4gZUZlKGIpO0Yuc3RhdGU9PT1yRmU/KEYuc3RhdGU9SlksRi50aW1lci5zdG9wKCksRi5vbi5jYWxsKCJpbnRlcnJ1cHQiLGksaS5fX2RhdGFfXyxGLmluZGV4LEYuZ3JvdXApLGRlbGV0ZSBkW0FdKTorQTxzJiYoRi5zdGF0ZT1KWSxGLnRpbWVyLnN0b3AoKSxGLm9uLmNhbGwoImNhbmNlbCIsaSxpLl9fZGF0YV9fLEYuaW5kZXgsRi5ncm91cCksZGVsZXRlIGRbQV0pfWlmKGVGZShmdW5jdGlvbigpe3Uuc3RhdGU9PT1RWSYmKHUuc3RhdGU9ckZlLHUudGltZXIucmVzdGFydCh5LHUuZGVsYXksdS50aW1lKSx5KF8pKX0pLHUuc3RhdGU9UHBlLHUub24uY2FsbCgic3RhcnQiLGksaS5fX2RhdGFfXyx1LmluZGV4LHUuZ3JvdXApLHUuc3RhdGU9PT1QcGUpe2Zvcih1LnN0YXRlPVFZLHA9bmV3IEFycmF5KFI9dS50d2Vlbi5sZW5ndGgpLEE9MCxQPS0xO0E8UjsrK0EpKEY9dS50d2VlbltBXS52YWx1ZS5jYWxsKGksaS5fX2RhdGFfXyx1LmluZGV4LHUuZ3JvdXApKSYmKHBbKytQXT1GKTtwLmxlbmd0aD1QKzF9fWZ1bmN0aW9uIHkoXyl7Zm9yKHZhciBBPV88dS5kdXJhdGlvbj91LmVhc2UuY2FsbChudWxsLF8vdS5kdXJhdGlvbik6KHUudGltZXIucmVzdGFydChUKSx1LnN0YXRlPUJwZSwxKSxQPS0xLFI9cC5sZW5ndGg7KytQPFI7KXBbUF0uY2FsbChpLEEpO3Uuc3RhdGU9PT1CcGUmJih1Lm9uLmNhbGwoImVuZCIsaSxpLl9fZGF0YV9fLHUuaW5kZXgsdS5ncm91cCksVCgpKX1mdW5jdGlvbiBUKCl7dS5zdGF0ZT1KWSx1LnRpbWVyLnN0b3AoKSxkZWxldGUgZFtzXTtmb3IodmFyIF8gaW4gZClyZXR1cm47ZGVsZXRlIGkuX190cmFuc2l0aW9ufX1mdW5jdGlvbiBURHQoaSxzKXt2YXIgdT1pLl9fdHJhbnNpdGlvbixkLHAsdj0hMCxiO2lmKHUpe3M9cz09bnVsbD9udWxsOnMrIiI7Zm9yKGIgaW4gdSl7aWYoKGQ9dVtiXSkubmFtZSE9PXMpe3Y9ITE7Y29udGludWV9cD1kLnN0YXRlPlBwZSYmZC5zdGF0ZTxCcGUsZC5zdGF0ZT1KWSxkLnRpbWVyLnN0b3AoKSxkLm9uLmNhbGwocD8iaW50ZXJydXB0IjoiY2FuY2VsIixpLGkuX19kYXRhX18sZC5pbmRleCxkLmdyb3VwKSxkZWxldGUgdVtiXX12JiZkZWxldGUgaS5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIENEdChpKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7VER0KHRoaXMsaSl9KX1mdW5jdGlvbiBTRHQoaSxzKXt2YXIgdSxkO3JldHVybiBmdW5jdGlvbigpe3ZhciBwPSQ0KHRoaXMsaSksdj1wLnR3ZWVuO2lmKHYhPT11KXtkPXU9djtmb3IodmFyIGI9MCx5PWQubGVuZ3RoO2I8eTsrK2IpaWYoZFtiXS5uYW1lPT09cyl7ZD1kLnNsaWNlKCksZC5zcGxpY2UoYiwxKTticmVha319cC50d2Vlbj1kfX1mdW5jdGlvbiBfRHQoaSxzLHUpe3ZhciBkLHA7aWYodHlwZW9mIHUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciB2PSQ0KHRoaXMsaSksYj12LnR3ZWVuO2lmKGIhPT1kKXtwPShkPWIpLnNsaWNlKCk7Zm9yKHZhciB5PXtuYW1lOnMsdmFsdWU6dX0sVD0wLF89cC5sZW5ndGg7VDxfOysrVClpZihwW1RdLm5hbWU9PT1zKXtwW1RdPXk7YnJlYWt9VD09PV8mJnAucHVzaCh5KX12LnR3ZWVuPXB9fWZ1bmN0aW9uIEFEdChpLHMpe3ZhciB1PXRoaXMuX2lkO2lmKGkrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBkPU0zKHRoaXMubm9kZSgpLHUpLnR3ZWVuLHA9MCx2PWQubGVuZ3RoLGI7cDx2OysrcClpZigoYj1kW3BdKS5uYW1lPT09aSlyZXR1cm4gYi52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChzPT1udWxsP1NEdDpfRHQpKHUsaSxzKSl9ZnVuY3Rpb24gUnBlKGkscyx1KXt2YXIgZD1pLl9pZDtyZXR1cm4gaS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHA9JDQodGhpcyxkKTsocC52YWx1ZXx8KHAudmFsdWU9e30pKVtzXT11LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGZ1bmN0aW9uKHApe3JldHVybiBNMyhwLGQpLnZhbHVlW3NdfX1mdW5jdGlvbiBpRmUoaSxzKXt2YXIgdTtyZXR1cm4odHlwZW9mIHM9PSJudW1iZXIiP0wzOnMgaW5zdGFuY2VvZiBkQz9VWToodT1kQyhzKSk/KHM9dSxVWSk6R0JlKShpLHMpfWZ1bmN0aW9uIExEdChpKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShpKX19ZnVuY3Rpb24gTUR0KGkpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsKX19ZnVuY3Rpb24gRER0KGkscyx1KXt2YXIgZCxwPXUrIiIsdjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldEF0dHJpYnV0ZShpKTtyZXR1cm4gYj09PXA/bnVsbDpiPT09ZD92OnY9cyhkPWIsdSl9fWZ1bmN0aW9uIElEdChpLHMsdSl7dmFyIGQscD11KyIiLHY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwpO3JldHVybiBiPT09cD9udWxsOmI9PT1kP3Y6dj1zKGQ9Yix1KX19ZnVuY3Rpb24gT0R0KGkscyx1KXt2YXIgZCxwLHY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGIseT11KHRoaXMpLFQ7cmV0dXJuIHk9PW51bGw/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZShpKTooYj10aGlzLmdldEF0dHJpYnV0ZShpKSxUPXkrIiIsYj09PVQ/bnVsbDpiPT09ZCYmVD09PXA/djoocD1ULHY9cyhkPWIseSkpKX19ZnVuY3Rpb24gTkR0KGkscyx1KXt2YXIgZCxwLHY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGIseT11KHRoaXMpLFQ7cmV0dXJuIHk9PW51bGw/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCk6KGI9dGhpcy5nZXRBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwpLFQ9eSsiIixiPT09VD9udWxsOmI9PT1kJiZUPT09cD92OihwPVQsdj1zKGQ9Yix5KSkpfX1mdW5jdGlvbiBQRHQoaSxzKXt2YXIgdT1CWShpKSxkPXU9PT0idHJhbnNmb3JtIj9nRHQ6aUZlO3JldHVybiB0aGlzLmF0dHJUd2VlbihpLHR5cGVvZiBzPT0iZnVuY3Rpb24iPyh1LmxvY2FsP05EdDpPRHQpKHUsZCxScGUodGhpcywiYXR0ci4iK2kscykpOnM9PW51bGw/KHUubG9jYWw/TUR0OkxEdCkodSk6KHUubG9jYWw/SUR0OkREdCkodSxkLHMpKX1mdW5jdGlvbiBCRHQoaSxzKXtyZXR1cm4gZnVuY3Rpb24odSl7dGhpcy5zZXRBdHRyaWJ1dGUoaSxzLmNhbGwodGhpcyx1KSl9fWZ1bmN0aW9uIEZEdChpLHMpe3JldHVybiBmdW5jdGlvbih1KXt0aGlzLnNldEF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCxzLmNhbGwodGhpcyx1KSl9fWZ1bmN0aW9uIFJEdChpLHMpe3ZhciB1LGQ7ZnVuY3Rpb24gcCgpe3ZhciB2PXMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB2IT09ZCYmKHU9KGQ9dikmJkZEdChpLHYpKSx1fXJldHVybiBwLl92YWx1ZT1zLHB9ZnVuY3Rpb24gakR0KGkscyl7dmFyIHUsZDtmdW5jdGlvbiBwKCl7dmFyIHY9cy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHYhPT1kJiYodT0oZD12KSYmQkR0KGksdikpLHV9cmV0dXJuIHAuX3ZhbHVlPXMscH1mdW5jdGlvbiAkRHQoaSxzKXt2YXIgdT0iYXR0ci4iK2k7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybih1PXRoaXMudHdlZW4odSkpJiZ1Ll92YWx1ZTtpZihzPT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHUsbnVsbCk7aWYodHlwZW9mIHMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBkPUJZKGkpO3JldHVybiB0aGlzLnR3ZWVuKHUsKGQubG9jYWw/UkR0OmpEdCkoZCxzKSl9ZnVuY3Rpb24gekR0KGkscyl7cmV0dXJuIGZ1bmN0aW9uKCl7RnBlKHRoaXMsaSkuZGVsYXk9K3MuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBxRHQoaSxzKXtyZXR1cm4gcz0rcyxmdW5jdGlvbigpe0ZwZSh0aGlzLGkpLmRlbGF5PXN9fWZ1bmN0aW9uIEhEdChpKXt2YXIgcz10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKHR5cGVvZiBpPT0iZnVuY3Rpb24iP3pEdDpxRHQpKHMsaSkpOk0zKHRoaXMubm9kZSgpLHMpLmRlbGF5fWZ1bmN0aW9uIFZEdChpLHMpe3JldHVybiBmdW5jdGlvbigpeyQ0KHRoaXMsaSkuZHVyYXRpb249K3MuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBVRHQoaSxzKXtyZXR1cm4gcz0rcyxmdW5jdGlvbigpeyQ0KHRoaXMsaSkuZHVyYXRpb249c319ZnVuY3Rpb24gR0R0KGkpe3ZhciBzPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGk9PSJmdW5jdGlvbiI/VkR0OlVEdCkocyxpKSk6TTModGhpcy5ub2RlKCkscykuZHVyYXRpb259ZnVuY3Rpb24gS0R0KGkscyl7aWYodHlwZW9mIHMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpeyQ0KHRoaXMsaSkuZWFzZT1zfX1mdW5jdGlvbiBXRHQoaSl7dmFyIHM9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKEtEdChzLGkpKTpNMyh0aGlzLm5vZGUoKSxzKS5lYXNlfWZ1bmN0aW9uIFlEdChpLHMpe3JldHVybiBmdW5jdGlvbigpe3ZhciB1PXMuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKHR5cGVvZiB1IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjskNCh0aGlzLGkpLmVhc2U9dX19ZnVuY3Rpb24gWER0KGkpe2lmKHR5cGVvZiBpIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy5lYWNoKFlEdCh0aGlzLl9pZCxpKSl9ZnVuY3Rpb24gUUR0KGkpe3R5cGVvZiBpIT0iZnVuY3Rpb24iJiYoaT12QmUoaSkpO2Zvcih2YXIgcz10aGlzLl9ncm91cHMsdT1zLmxlbmd0aCxkPW5ldyBBcnJheSh1KSxwPTA7cDx1OysrcClmb3IodmFyIHY9c1twXSxiPXYubGVuZ3RoLHk9ZFtwXT1bXSxULF89MDtfPGI7KytfKShUPXZbX10pJiZpLmNhbGwoVCxULl9fZGF0YV9fLF8sdikmJnkucHVzaChUKTtyZXR1cm4gbmV3IGI3KGQsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX1mdW5jdGlvbiBKRHQoaSl7aWYoaS5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciBzPXRoaXMuX2dyb3Vwcyx1PWkuX2dyb3VwcyxkPXMubGVuZ3RoLHA9dS5sZW5ndGgsdj1NYXRoLm1pbihkLHApLGI9bmV3IEFycmF5KGQpLHk9MDt5PHY7Kyt5KWZvcih2YXIgVD1zW3ldLF89dVt5XSxBPVQubGVuZ3RoLFA9Ylt5XT1uZXcgQXJyYXkoQSksUixGPTA7RjxBOysrRikoUj1UW0ZdfHxfW0ZdKSYmKFBbRl09Uik7Zm9yKDt5PGQ7Kyt5KWJbeV09c1t5XTtyZXR1cm4gbmV3IGI3KGIsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX1mdW5jdGlvbiBaRHQoaSl7cmV0dXJuKGkrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbihzKXt2YXIgdT1zLmluZGV4T2YoIi4iKTtyZXR1cm4gdT49MCYmKHM9cy5zbGljZSgwLHUpKSwhc3x8cz09PSJzdGFydCJ9KX1mdW5jdGlvbiBlSXQoaSxzLHUpe3ZhciBkLHAsdj1aRHQocyk/RnBlOiQ0O3JldHVybiBmdW5jdGlvbigpe3ZhciBiPXYodGhpcyxpKSx5PWIub247eSE9PWQmJihwPShkPXkpLmNvcHkoKSkub24ocyx1KSxiLm9uPXB9fWZ1bmN0aW9uIHRJdChpLHMpe3ZhciB1PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/TTModGhpcy5ub2RlKCksdSkub24ub24oaSk6dGhpcy5lYWNoKGVJdCh1LGkscykpfWZ1bmN0aW9uIG5JdChpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciB1IGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCt1IT09aSlyZXR1cm47cyYmcy5yZW1vdmVDaGlsZCh0aGlzKX19ZnVuY3Rpb24gckl0KCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLG5JdCh0aGlzLl9pZCkpfWZ1bmN0aW9uIGlJdChpKXt2YXIgcz10aGlzLl9uYW1lLHU9dGhpcy5faWQ7dHlwZW9mIGkhPSJmdW5jdGlvbiImJihpPXdwZShpKSk7Zm9yKHZhciBkPXRoaXMuX2dyb3VwcyxwPWQubGVuZ3RoLHY9bmV3IEFycmF5KHApLGI9MDtiPHA7KytiKWZvcih2YXIgeT1kW2JdLFQ9eS5sZW5ndGgsXz12W2JdPW5ldyBBcnJheShUKSxBLFAsUj0wO1I8VDsrK1IpKEE9eVtSXSkmJihQPWkuY2FsbChBLEEuX19kYXRhX18sUix5KSkmJigiX19kYXRhX18iaW4gQSYmKFAuX19kYXRhX189QS5fX2RhdGFfXyksX1tSXT1QLFpZKF9bUl0scyx1LFIsXyxNMyhBLHUpKSk7cmV0dXJuIG5ldyBiNyh2LHRoaXMuX3BhcmVudHMscyx1KX1mdW5jdGlvbiBzSXQoaSl7dmFyIHM9dGhpcy5fbmFtZSx1PXRoaXMuX2lkO3R5cGVvZiBpIT0iZnVuY3Rpb24iJiYoaT1tQmUoaSkpO2Zvcih2YXIgZD10aGlzLl9ncm91cHMscD1kLmxlbmd0aCx2PVtdLGI9W10seT0wO3k8cDsrK3kpZm9yKHZhciBUPWRbeV0sXz1ULmxlbmd0aCxBLFA9MDtQPF87KytQKWlmKEE9VFtQXSl7Zm9yKHZhciBSPWkuY2FsbChBLEEuX19kYXRhX18sUCxUKSxGLGo9TTMoQSx1KSxLPTAsZWU9Ui5sZW5ndGg7SzxlZTsrK0spKEY9UltLXSkmJlpZKEYscyx1LEssUixqKTt2LnB1c2goUiksYi5wdXNoKEEpfXJldHVybiBuZXcgYjcodixiLHMsdSl9dmFyIGFJdD12Ri5wcm90b3R5cGUuY29uc3RydWN0b3I7ZnVuY3Rpb24gb0l0KCl7cmV0dXJuIG5ldyBhSXQodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIGNJdChpLHMpe3ZhciB1LGQscDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdj1aTSh0aGlzLGkpLGI9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoaSksWk0odGhpcyxpKSk7cmV0dXJuIHY9PT1iP251bGw6dj09PXUmJmI9PT1kP3A6cD1zKHU9dixkPWIpfX1mdW5jdGlvbiBzRmUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShpKX19ZnVuY3Rpb24gdUl0KGkscyx1KXt2YXIgZCxwPXUrIiIsdjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYj1aTSh0aGlzLGkpO3JldHVybiBiPT09cD9udWxsOmI9PT1kP3Y6dj1zKGQ9Yix1KX19ZnVuY3Rpb24gbEl0KGkscyx1KXt2YXIgZCxwLHY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGI9Wk0odGhpcyxpKSx5PXUodGhpcyksVD15KyIiO3JldHVybiB5PT1udWxsJiYoVD15PSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGkpLFpNKHRoaXMsaSkpKSxiPT09VD9udWxsOmI9PT1kJiZUPT09cD92OihwPVQsdj1zKGQ9Yix5KSl9fWZ1bmN0aW9uIGhJdChpLHMpe3ZhciB1LGQscCx2PSJzdHlsZS4iK3MsYj0iZW5kLiIrdix5O3JldHVybiBmdW5jdGlvbigpe3ZhciBUPSQ0KHRoaXMsaSksXz1ULm9uLEE9VC52YWx1ZVt2XT09bnVsbD95fHwoeT1zRmUocykpOnZvaWQgMDsoXyE9PXV8fHAhPT1BKSYmKGQ9KHU9XykuY29weSgpKS5vbihiLHA9QSksVC5vbj1kfX1mdW5jdGlvbiBmSXQoaSxzLHUpe3ZhciBkPShpKz0iIik9PSJ0cmFuc2Zvcm0iP2REdDppRmU7cmV0dXJuIHM9PW51bGw/dGhpcy5zdHlsZVR3ZWVuKGksY0l0KGksZCkpLm9uKCJlbmQuc3R5bGUuIitpLHNGZShpKSk6dHlwZW9mIHM9PSJmdW5jdGlvbiI/dGhpcy5zdHlsZVR3ZWVuKGksbEl0KGksZCxScGUodGhpcywic3R5bGUuIitpLHMpKSkuZWFjaChoSXQodGhpcy5faWQsaSkpOnRoaXMuc3R5bGVUd2VlbihpLHVJdChpLGQscyksdSkub24oImVuZC5zdHlsZS4iK2ksbnVsbCl9ZnVuY3Rpb24gZEl0KGkscyx1KXtyZXR1cm4gZnVuY3Rpb24oZCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShpLHMuY2FsbCh0aGlzLGQpLHUpfX1mdW5jdGlvbiBnSXQoaSxzLHUpe3ZhciBkLHA7ZnVuY3Rpb24gdigpe3ZhciBiPXMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBiIT09cCYmKGQ9KHA9YikmJmRJdChpLGIsdSkpLGR9cmV0dXJuIHYuX3ZhbHVlPXMsdn1mdW5jdGlvbiBwSXQoaSxzLHUpe3ZhciBkPSJzdHlsZS4iKyhpKz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihkPXRoaXMudHdlZW4oZCkpJiZkLl92YWx1ZTtpZihzPT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKGQsbnVsbCk7aWYodHlwZW9mIHMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKGQsZ0l0KGkscyx1Pz8iIikpfWZ1bmN0aW9uIGJJdChpKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWl9fWZ1bmN0aW9uIG1JdChpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz1pKHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9cz8/IiJ9fWZ1bmN0aW9uIHZJdChpKXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsdHlwZW9mIGk9PSJmdW5jdGlvbiI/bUl0KFJwZSh0aGlzLCJ0ZXh0IixpKSk6Ykl0KGk9PW51bGw/IiI6aSsiIikpfWZ1bmN0aW9uIHdJdChpKXtyZXR1cm4gZnVuY3Rpb24ocyl7dGhpcy50ZXh0Q29udGVudD1pLmNhbGwodGhpcyxzKX19ZnVuY3Rpb24geUl0KGkpe3ZhciBzLHU7ZnVuY3Rpb24gZCgpe3ZhciBwPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBwIT09dSYmKHM9KHU9cCkmJndJdChwKSksc31yZXR1cm4gZC5fdmFsdWU9aSxkfWZ1bmN0aW9uIHhJdChpKXt2YXIgcz0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybihzPXRoaXMudHdlZW4ocykpJiZzLl92YWx1ZTtpZihpPT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHMsbnVsbCk7aWYodHlwZW9mIGkhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKHMseUl0KGkpKX1mdW5jdGlvbiBrSXQoKXtmb3IodmFyIGk9dGhpcy5fbmFtZSxzPXRoaXMuX2lkLHU9YUZlKCksZD10aGlzLl9ncm91cHMscD1kLmxlbmd0aCx2PTA7djxwOysrdilmb3IodmFyIGI9ZFt2XSx5PWIubGVuZ3RoLFQsXz0wO188eTsrK18paWYoVD1iW19dKXt2YXIgQT1NMyhULHMpO1pZKFQsaSx1LF8sYix7dGltZTpBLnRpbWUrQS5kZWxheStBLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246QS5kdXJhdGlvbixlYXNlOkEuZWFzZX0pfXJldHVybiBuZXcgYjcoZCx0aGlzLl9wYXJlbnRzLGksdSl9ZnVuY3Rpb24gRUl0KCl7dmFyIGkscyx1PXRoaXMsZD11Ll9pZCxwPXUuc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih2LGIpe3ZhciB5PXt2YWx1ZTpifSxUPXt2YWx1ZTpmdW5jdGlvbigpey0tcD09PTAmJnYoKX19O3UuZWFjaChmdW5jdGlvbigpe3ZhciBfPSQ0KHRoaXMsZCksQT1fLm9uO0EhPT1pJiYocz0oaT1BKS5jb3B5KCkscy5fLmNhbmNlbC5wdXNoKHkpLHMuXy5pbnRlcnJ1cHQucHVzaCh5KSxzLl8uZW5kLnB1c2goVCkpLF8ub249c30pLHA9PT0wJiZ2KCl9KX12YXIgVEl0PTA7ZnVuY3Rpb24gYjcoaSxzLHUsZCl7dGhpcy5fZ3JvdXBzPWksdGhpcy5fcGFyZW50cz1zLHRoaXMuX25hbWU9dSx0aGlzLl9pZD1kfWZ1bmN0aW9uIGFGZSgpe3JldHVybisrVEl0fXZhciBtNz12Ri5wcm90b3R5cGU7YjcucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpiNyxzZWxlY3Q6aUl0LHNlbGVjdEFsbDpzSXQsc2VsZWN0Q2hpbGQ6bTcuc2VsZWN0Q2hpbGQsc2VsZWN0Q2hpbGRyZW46bTcuc2VsZWN0Q2hpbGRyZW4sZmlsdGVyOlFEdCxtZXJnZTpKRHQsc2VsZWN0aW9uOm9JdCx0cmFuc2l0aW9uOmtJdCxjYWxsOm03LmNhbGwsbm9kZXM6bTcubm9kZXMsbm9kZTptNy5ub2RlLHNpemU6bTcuc2l6ZSxlbXB0eTptNy5lbXB0eSxlYWNoOm03LmVhY2gsb246dEl0LGF0dHI6UER0LGF0dHJUd2VlbjokRHQsc3R5bGU6Zkl0LHN0eWxlVHdlZW46cEl0LHRleHQ6dkl0LHRleHRUd2Vlbjp4SXQscmVtb3ZlOnJJdCx0d2VlbjpBRHQsZGVsYXk6SER0LGR1cmF0aW9uOkdEdCxlYXNlOldEdCxlYXNlVmFyeWluZzpYRHQsZW5kOkVJdCxbU3ltYm9sLml0ZXJhdG9yXTptN1tTeW1ib2wuaXRlcmF0b3JdfTtmdW5jdGlvbiBDSXQoaSl7cmV0dXJuKChpKj0yKTw9MT9pKmkqaTooaS09MikqaSppKzIpLzJ9dmFyIFNJdD17dGltZTpudWxsLGRlbGF5OjAsZHVyYXRpb246MjUwLGVhc2U6Q0l0fTtmdW5jdGlvbiBfSXQoaSxzKXtmb3IodmFyIHU7ISh1PWkuX190cmFuc2l0aW9uKXx8ISh1PXVbc10pOylpZighKGk9aS5wYXJlbnROb2RlKSl0aHJvdyBuZXcgRXJyb3IoYHRyYW5zaXRpb24gJHtzfSBub3QgZm91bmRgKTtyZXR1cm4gdX1mdW5jdGlvbiBBSXQoaSl7dmFyIHMsdTtpIGluc3RhbmNlb2YgYjc/KHM9aS5faWQsaT1pLl9uYW1lKToocz1hRmUoKSwodT1TSXQpLnRpbWU9T3BlKCksaT1pPT1udWxsP251bGw6aSsiIik7Zm9yKHZhciBkPXRoaXMuX2dyb3VwcyxwPWQubGVuZ3RoLHY9MDt2PHA7Kyt2KWZvcih2YXIgYj1kW3ZdLHk9Yi5sZW5ndGgsVCxfPTA7Xzx5OysrXykoVD1iW19dKSYmWlkoVCxpLHMsXyxiLHV8fF9JdChULHMpKTtyZXR1cm4gbmV3IGI3KGQsdGhpcy5fcGFyZW50cyxpLHMpfXZGLnByb3RvdHlwZS5pbnRlcnJ1cHQ9Q0R0LHZGLnByb3RvdHlwZS50cmFuc2l0aW9uPUFJdDtjb25zdCBqcGU9TWF0aC5QSSwkcGU9MipqcGUsbUM9MWUtNixMSXQ9JHBlLW1DO2Z1bmN0aW9uIG9GZShpKXt0aGlzLl8rPWlbMF07Zm9yKGxldCBzPTEsdT1pLmxlbmd0aDtzPHU7KytzKXRoaXMuXys9YXJndW1lbnRzW3NdK2lbc119ZnVuY3Rpb24gTUl0KGkpe2xldCBzPU1hdGguZmxvb3IoaSk7aWYoIShzPj0wKSl0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgZGlnaXRzOiAke2l9YCk7aWYocz4xNSlyZXR1cm4gb0ZlO2NvbnN0IHU9MTAqKnM7cmV0dXJuIGZ1bmN0aW9uKGQpe3RoaXMuXys9ZFswXTtmb3IobGV0IHA9MSx2PWQubGVuZ3RoO3A8djsrK3ApdGhpcy5fKz1NYXRoLnJvdW5kKGFyZ3VtZW50c1twXSp1KS91K2RbcF19fWxldCBESXQ9Y2xhc3N7Y29uc3RydWN0b3Iocyl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiIsdGhpcy5fYXBwZW5kPXM9PW51bGw/b0ZlOk1JdChzKX1tb3ZlVG8ocyx1KXt0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDA9dGhpcy5feDE9K3N9LCR7dGhpcy5feTA9dGhpcy5feTE9K3V9YH1jbG9zZVBhdGgoKXt0aGlzLl94MSE9PW51bGwmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl9hcHBlbmRgWmApfWxpbmVUbyhzLHUpe3RoaXMuX2FwcGVuZGBMJHt0aGlzLl94MT0rc30sJHt0aGlzLl95MT0rdX1gfXF1YWRyYXRpY0N1cnZlVG8ocyx1LGQscCl7dGhpcy5fYXBwZW5kYFEkeytzfSwkeyt1fSwke3RoaXMuX3gxPStkfSwke3RoaXMuX3kxPStwfWB9YmV6aWVyQ3VydmVUbyhzLHUsZCxwLHYsYil7dGhpcy5fYXBwZW5kYEMkeytzfSwkeyt1fSwkeytkfSwkeytwfSwke3RoaXMuX3gxPSt2fSwke3RoaXMuX3kxPStifWB9YXJjVG8ocyx1LGQscCx2KXtpZihzPStzLHU9K3UsZD0rZCxwPStwLHY9K3YsdjwwKXRocm93IG5ldyBFcnJvcihgbmVnYXRpdmUgcmFkaXVzOiAke3Z9YCk7bGV0IGI9dGhpcy5feDEseT10aGlzLl95MSxUPWQtcyxfPXAtdSxBPWItcyxQPXktdSxSPUEqQStQKlA7aWYodGhpcy5feDE9PT1udWxsKXRoaXMuX2FwcGVuZGBNJHt0aGlzLl94MT1zfSwke3RoaXMuX3kxPXV9YDtlbHNlIGlmKFI+bUMpaWYoIShNYXRoLmFicyhQKlQtXypBKT5tQyl8fCF2KXRoaXMuX2FwcGVuZGBMJHt0aGlzLl94MT1zfSwke3RoaXMuX3kxPXV9YDtlbHNle2xldCBGPWQtYixqPXAteSxLPVQqVCtfKl8sZWU9RipGK2oqaixpZT1NYXRoLnNxcnQoSyksb2U9TWF0aC5zcXJ0KFIpLHBlPXYqTWF0aC50YW4oKGpwZS1NYXRoLmFjb3MoKEsrUi1lZSkvKDIqaWUqb2UpKSkvMiksYmU9cGUvb2UsYWU9cGUvaWU7TWF0aC5hYnMoYmUtMSk+bUMmJnRoaXMuX2FwcGVuZGBMJHtzK2JlKkF9LCR7dStiZSpQfWAsdGhpcy5fYXBwZW5kYEEke3Z9LCR7dn0sMCwwLCR7KyhQKkY+QSpqKX0sJHt0aGlzLl94MT1zK2FlKlR9LCR7dGhpcy5feTE9dSthZSpffWB9fWFyYyhzLHUsZCxwLHYsYil7aWYocz0rcyx1PSt1LGQ9K2QsYj0hIWIsZDwwKXRocm93IG5ldyBFcnJvcihgbmVnYXRpdmUgcmFkaXVzOiAke2R9YCk7bGV0IHk9ZCpNYXRoLmNvcyhwKSxUPWQqTWF0aC5zaW4ocCksXz1zK3ksQT11K1QsUD0xXmIsUj1iP3Atdjp2LXA7dGhpcy5feDE9PT1udWxsP3RoaXMuX2FwcGVuZGBNJHtffSwke0F9YDooTWF0aC5hYnModGhpcy5feDEtXyk+bUN8fE1hdGguYWJzKHRoaXMuX3kxLUEpPm1DKSYmdGhpcy5fYXBwZW5kYEwke199LCR7QX1gLGQmJihSPDAmJihSPVIlJHBlKyRwZSksUj5MSXQ/dGhpcy5fYXBwZW5kYEEke2R9LCR7ZH0sMCwxLCR7UH0sJHtzLXl9LCR7dS1UfUEke2R9LCR7ZH0sMCwxLCR7UH0sJHt0aGlzLl94MT1ffSwke3RoaXMuX3kxPUF9YDpSPm1DJiZ0aGlzLl9hcHBlbmRgQSR7ZH0sJHtkfSwwLCR7KyhSPj1qcGUpfSwke1B9LCR7dGhpcy5feDE9cytkKk1hdGguY29zKHYpfSwke3RoaXMuX3kxPXUrZCpNYXRoLnNpbih2KX1gKX1yZWN0KHMsdSxkLHApe3RoaXMuX2FwcGVuZGBNJHt0aGlzLl94MD10aGlzLl94MT0rc30sJHt0aGlzLl95MD10aGlzLl95MT0rdX1oJHtkPStkfXYkeytwfWgkey1kfVpgfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX319O2Z1bmN0aW9uIElJdChpKXtpZighaS5vayl0aHJvdyBuZXcgRXJyb3IoaS5zdGF0dXMrIiAiK2kuc3RhdHVzVGV4dCk7cmV0dXJuIGkudGV4dCgpfWZ1bmN0aW9uIE9JdChpLHMpe3JldHVybiBmZXRjaChpLHMpLnRoZW4oSUl0KX1mdW5jdGlvbiBOSXQoaSl7cmV0dXJuKHMsdSk9Pk9JdChzLHUpLnRoZW4oZD0+bmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhkLGkpKX12YXIgUEl0PU5JdCgiaW1hZ2Uvc3ZnK3htbCIpO2Z1bmN0aW9uIEJJdChpKXtyZXR1cm4gTWF0aC5hYnMoaT1NYXRoLnJvdW5kKGkpKT49MWUyMT9pLnRvTG9jYWxlU3RyaW5nKCJlbiIpLnJlcGxhY2UoLywvZywiIik6aS50b1N0cmluZygxMCl9ZnVuY3Rpb24gZVgoaSxzKXtpZigodT0oaT1zP2kudG9FeHBvbmVudGlhbChzLTEpOmkudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIHUsZD1pLnNsaWNlKDAsdSk7cmV0dXJuW2QubGVuZ3RoPjE/ZFswXStkLnNsaWNlKDIpOmQsK2kuc2xpY2UodSsxKV19ZnVuY3Rpb24gckQoaSl7cmV0dXJuIGk9ZVgoTWF0aC5hYnMoaSkpLGk/aVsxXTpOYU59ZnVuY3Rpb24gRkl0KGkscyl7cmV0dXJuIGZ1bmN0aW9uKHUsZCl7Zm9yKHZhciBwPXUubGVuZ3RoLHY9W10sYj0wLHk9aVswXSxUPTA7cD4wJiZ5PjAmJihUK3krMT5kJiYoeT1NYXRoLm1heCgxLGQtVCkpLHYucHVzaCh1LnN1YnN0cmluZyhwLT15LHAreSkpLCEoKFQrPXkrMSk+ZCkpOyl5PWlbYj0oYisxKSVpLmxlbmd0aF07cmV0dXJuIHYucmV2ZXJzZSgpLmpvaW4ocyl9fWZ1bmN0aW9uIFJJdChpKXtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIHMucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbih1KXtyZXR1cm4gaVsrdV19KX19dmFyIGpJdD0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiB0WChpKXtpZighKHM9akl0LmV4ZWMoaSkpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIraSk7dmFyIHM7cmV0dXJuIG5ldyB6cGUoe2ZpbGw6c1sxXSxhbGlnbjpzWzJdLHNpZ246c1szXSxzeW1ib2w6c1s0XSx6ZXJvOnNbNV0sd2lkdGg6c1s2XSxjb21tYTpzWzddLHByZWNpc2lvbjpzWzhdJiZzWzhdLnNsaWNlKDEpLHRyaW06c1s5XSx0eXBlOnNbMTBdfSl9dFgucHJvdG90eXBlPXpwZS5wcm90b3R5cGU7ZnVuY3Rpb24genBlKGkpe3RoaXMuZmlsbD1pLmZpbGw9PT12b2lkIDA/IiAiOmkuZmlsbCsiIix0aGlzLmFsaWduPWkuYWxpZ249PT12b2lkIDA/Ij4iOmkuYWxpZ24rIiIsdGhpcy5zaWduPWkuc2lnbj09PXZvaWQgMD8iLSI6aS5zaWduKyIiLHRoaXMuc3ltYm9sPWkuc3ltYm9sPT09dm9pZCAwPyIiOmkuc3ltYm9sKyIiLHRoaXMuemVybz0hIWkuemVybyx0aGlzLndpZHRoPWkud2lkdGg9PT12b2lkIDA/dm9pZCAwOitpLndpZHRoLHRoaXMuY29tbWE9ISFpLmNvbW1hLHRoaXMucHJlY2lzaW9uPWkucHJlY2lzaW9uPT09dm9pZCAwP3ZvaWQgMDoraS5wcmVjaXNpb24sdGhpcy50cmltPSEhaS50cmltLHRoaXMudHlwZT1pLnR5cGU9PT12b2lkIDA/IiI6aS50eXBlKyIifXpwZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodGhpcy53aWR0aD09PXZvaWQgMD8iIjpNYXRoLm1heCgxLHRoaXMud2lkdGh8MCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHRoaXMucHJlY2lzaW9uPT09dm9pZCAwPyIiOiIuIitNYXRoLm1heCgwLHRoaXMucHJlY2lzaW9ufDApKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTtmdW5jdGlvbiAkSXQoaSl7ZTpmb3IodmFyIHM9aS5sZW5ndGgsdT0xLGQ9LTEscDt1PHM7Kyt1KXN3aXRjaChpW3VdKXtjYXNlIi4iOmQ9cD11O2JyZWFrO2Nhc2UiMCI6ZD09PTAmJihkPXUpLHA9dTticmVhaztkZWZhdWx0OmlmKCEraVt1XSlicmVhayBlO2Q+MCYmKGQ9MCk7YnJlYWt9cmV0dXJuIGQ+MD9pLnNsaWNlKDAsZCkraS5zbGljZShwKzEpOml9dmFyIGNGZTtmdW5jdGlvbiB6SXQoaSxzKXt2YXIgdT1lWChpLHMpO2lmKCF1KXJldHVybiBpKyIiO3ZhciBkPXVbMF0scD11WzFdLHY9cC0oY0ZlPU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihwLzMpKSkqMykrMSxiPWQubGVuZ3RoO3JldHVybiB2PT09Yj9kOnY+Yj9kK25ldyBBcnJheSh2LWIrMSkuam9pbigiMCIpOnY+MD9kLnNsaWNlKDAsdikrIi4iK2Quc2xpY2Uodik6IjAuIituZXcgQXJyYXkoMS12KS5qb2luKCIwIikrZVgoaSxNYXRoLm1heCgwLHMrdi0xKSlbMF19ZnVuY3Rpb24gdUZlKGkscyl7dmFyIHU9ZVgoaSxzKTtpZighdSlyZXR1cm4gaSsiIjt2YXIgZD11WzBdLHA9dVsxXTtyZXR1cm4gcDwwPyIwLiIrbmV3IEFycmF5KC1wKS5qb2luKCIwIikrZDpkLmxlbmd0aD5wKzE/ZC5zbGljZSgwLHArMSkrIi4iK2Quc2xpY2UocCsxKTpkK25ldyBBcnJheShwLWQubGVuZ3RoKzIpLmpvaW4oIjAiKX1jb25zdCBsRmU9eyIlIjooaSxzKT0+KGkqMTAwKS50b0ZpeGVkKHMpLGI6aT0+TWF0aC5yb3VuZChpKS50b1N0cmluZygyKSxjOmk9PmkrIiIsZDpCSXQsZTooaSxzKT0+aS50b0V4cG9uZW50aWFsKHMpLGY6KGkscyk9PmkudG9GaXhlZChzKSxnOihpLHMpPT5pLnRvUHJlY2lzaW9uKHMpLG86aT0+TWF0aC5yb3VuZChpKS50b1N0cmluZyg4KSxwOihpLHMpPT51RmUoaSoxMDAscykscjp1RmUsczp6SXQsWDppPT5NYXRoLnJvdW5kKGkpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLHg6aT0+TWF0aC5yb3VuZChpKS50b1N0cmluZygxNil9O2Z1bmN0aW9uIGhGZShpKXtyZXR1cm4gaX12YXIgZkZlPUFycmF5LnByb3RvdHlwZS5tYXAsZEZlPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiwrUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXTtmdW5jdGlvbiBxSXQoaSl7dmFyIHM9aS5ncm91cGluZz09PXZvaWQgMHx8aS50aG91c2FuZHM9PT12b2lkIDA/aEZlOkZJdChmRmUuY2FsbChpLmdyb3VwaW5nLE51bWJlciksaS50aG91c2FuZHMrIiIpLHU9aS5jdXJyZW5jeT09PXZvaWQgMD8iIjppLmN1cnJlbmN5WzBdKyIiLGQ9aS5jdXJyZW5jeT09PXZvaWQgMD8iIjppLmN1cnJlbmN5WzFdKyIiLHA9aS5kZWNpbWFsPT09dm9pZCAwPyIuIjppLmRlY2ltYWwrIiIsdj1pLm51bWVyYWxzPT09dm9pZCAwP2hGZTpSSXQoZkZlLmNhbGwoaS5udW1lcmFscyxTdHJpbmcpKSxiPWkucGVyY2VudD09PXZvaWQgMD8iJSI6aS5wZXJjZW50KyIiLHk9aS5taW51cz09PXZvaWQgMD8i4oiSIjppLm1pbnVzKyIiLFQ9aS5uYW49PT12b2lkIDA/Ik5hTiI6aS5uYW4rIiI7ZnVuY3Rpb24gXyhQKXtQPXRYKFApO3ZhciBSPVAuZmlsbCxGPVAuYWxpZ24saj1QLnNpZ24sSz1QLnN5bWJvbCxlZT1QLnplcm8saWU9UC53aWR0aCxvZT1QLmNvbW1hLHBlPVAucHJlY2lzaW9uLGJlPVAudHJpbSxhZT1QLnR5cGU7YWU9PT0ibiI/KG9lPSEwLGFlPSJnIik6bEZlW2FlXXx8KHBlPT09dm9pZCAwJiYocGU9MTIpLGJlPSEwLGFlPSJnIiksKGVlfHxSPT09IjAiJiZGPT09Ij0iKSYmKGVlPSEwLFI9IjAiLEY9Ij0iKTt2YXIgbmU9Sz09PSIkIj91Oks9PT0iIyImJi9bYm94WF0vLnRlc3QoYWUpPyIwIithZS50b0xvd2VyQ2FzZSgpOiIiLHNlPUs9PT0iJCI/ZDovWyVwXS8udGVzdChhZSk/YjoiIixkZT1sRmVbYWVdLFg9L1tkZWZncHJzJV0vLnRlc3QoYWUpO3BlPXBlPT09dm9pZCAwPzY6L1tncHJzXS8udGVzdChhZSk/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxwZSkpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAscGUpKTtmdW5jdGlvbiBnZShXKXt2YXIgeGU9bmUsVT1zZSxGZSxQZSxqZTtpZihhZT09PSJjIilVPWRlKFcpK1UsVz0iIjtlbHNle1c9K1c7dmFyIEllPVc8MHx8MS9XPDA7aWYoVz1pc05hTihXKT9UOmRlKE1hdGguYWJzKFcpLHBlKSxiZSYmKFc9JEl0KFcpKSxJZSYmK1c9PTAmJmohPT0iKyImJihJZT0hMSkseGU9KEllP2o9PT0iKCI/ajp5Omo9PT0iLSJ8fGo9PT0iKCI/IiI6aikreGUsVT0oYWU9PT0icyI/ZEZlWzgrY0ZlLzNdOiIiKStVKyhJZSYmaj09PSIoIj8iKSI6IiIpLFgpe2ZvcihGZT0tMSxQZT1XLmxlbmd0aDsrK0ZlPFBlOylpZihqZT1XLmNoYXJDb2RlQXQoRmUpLDQ4PmplfHxqZT41Nyl7VT0oamU9PT00Nj9wK1cuc2xpY2UoRmUrMSk6Vy5zbGljZShGZSkpK1UsVz1XLnNsaWNlKDAsRmUpO2JyZWFrfX19b2UmJiFlZSYmKFc9cyhXLDEvMCkpO3ZhciBTZT14ZS5sZW5ndGgrVy5sZW5ndGgrVS5sZW5ndGgsQ2U9U2U8aWU/bmV3IEFycmF5KGllLVNlKzEpLmpvaW4oUik6IiI7c3dpdGNoKG9lJiZlZSYmKFc9cyhDZStXLENlLmxlbmd0aD9pZS1VLmxlbmd0aDoxLzApLENlPSIiKSxGKXtjYXNlIjwiOlc9eGUrVytVK0NlO2JyZWFrO2Nhc2UiPSI6Vz14ZStDZStXK1U7YnJlYWs7Y2FzZSJeIjpXPUNlLnNsaWNlKDAsU2U9Q2UubGVuZ3RoPj4xKSt4ZStXK1UrQ2Uuc2xpY2UoU2UpO2JyZWFrO2RlZmF1bHQ6Vz1DZSt4ZStXK1U7YnJlYWt9cmV0dXJuIHYoVyl9cmV0dXJuIGdlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFArIiJ9LGdlfWZ1bmN0aW9uIEEoUCxSKXt2YXIgRj1fKChQPXRYKFApLFAudHlwZT0iZiIsUCkpLGo9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHJEKFIpLzMpKSkqMyxLPU1hdGgucG93KDEwLC1qKSxlZT1kRmVbOCtqLzNdO3JldHVybiBmdW5jdGlvbihpZSl7cmV0dXJuIEYoSyppZSkrZWV9fXJldHVybntmb3JtYXQ6Xyxmb3JtYXRQcmVmaXg6QX19dmFyIG5YLGdGZSxwRmU7SEl0KHt0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXX0pO2Z1bmN0aW9uIEhJdChpKXtyZXR1cm4gblg9cUl0KGkpLGdGZT1uWC5mb3JtYXQscEZlPW5YLmZvcm1hdFByZWZpeCxuWH1mdW5jdGlvbiBWSXQoaSl7cmV0dXJuIE1hdGgubWF4KDAsLXJEKE1hdGguYWJzKGkpKSl9ZnVuY3Rpb24gVUl0KGkscyl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHJEKHMpLzMpKSkqMy1yRChNYXRoLmFicyhpKSkpfWZ1bmN0aW9uIEdJdChpLHMpe3JldHVybiBpPU1hdGguYWJzKGkpLHM9TWF0aC5hYnMocyktaSxNYXRoLm1heCgwLHJEKHMpLXJEKGkpKSsxfWZ1bmN0aW9uIHJYKGkscyl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6dGhpcy5yYW5nZShpKTticmVhaztkZWZhdWx0OnRoaXMucmFuZ2UocykuZG9tYWluKGkpO2JyZWFrfXJldHVybiB0aGlzfWNvbnN0IGJGZT1TeW1ib2woImltcGxpY2l0Iik7ZnVuY3Rpb24gX0YoKXt2YXIgaT1uZXcgY0JlLHM9W10sdT1bXSxkPWJGZTtmdW5jdGlvbiBwKHYpe2xldCBiPWkuZ2V0KHYpO2lmKGI9PT12b2lkIDApe2lmKGQhPT1iRmUpcmV0dXJuIGQ7aS5zZXQodixiPXMucHVzaCh2KS0xKX1yZXR1cm4gdVtiJXUubGVuZ3RoXX1yZXR1cm4gcC5kb21haW49ZnVuY3Rpb24odil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHMuc2xpY2UoKTtzPVtdLGk9bmV3IGNCZTtmb3IoY29uc3QgYiBvZiB2KWkuaGFzKGIpfHxpLnNldChiLHMucHVzaChiKS0xKTtyZXR1cm4gcH0scC5yYW5nZT1mdW5jdGlvbih2KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1BcnJheS5mcm9tKHYpLHApOnUuc2xpY2UoKX0scC51bmtub3duPWZ1bmN0aW9uKHYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPXYscCk6ZH0scC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIF9GKHMsdSkudW5rbm93bihkKX0sclguYXBwbHkocCxhcmd1bWVudHMpLHB9ZnVuY3Rpb24gcXBlKCl7dmFyIGk9X0YoKS51bmtub3duKHZvaWQgMCkscz1pLmRvbWFpbix1PWkucmFuZ2UsZD0wLHA9MSx2LGIseT0hMSxUPTAsXz0wLEE9LjU7ZGVsZXRlIGkudW5rbm93bjtmdW5jdGlvbiBQKCl7dmFyIFI9cygpLmxlbmd0aCxGPXA8ZCxqPUY/cDpkLEs9Rj9kOnA7dj0oSy1qKS9NYXRoLm1heCgxLFItVCtfKjIpLHkmJih2PU1hdGguZmxvb3IodikpLGorPShLLWotdiooUi1UKSkqQSxiPXYqKDEtVCkseSYmKGo9TWF0aC5yb3VuZChqKSxiPU1hdGgucm91bmQoYikpO3ZhciBlZT1ZQXQoUikubWFwKGZ1bmN0aW9uKGllKXtyZXR1cm4gait2KmllfSk7cmV0dXJuIHUoRj9lZS5yZXZlcnNlKCk6ZWUpfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocyhSKSxQKCkpOnMoKX0saS5yYW5nZT1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oW2QscF09UixkPStkLHA9K3AsUCgpKTpbZCxwXX0saS5yYW5nZVJvdW5kPWZ1bmN0aW9uKFIpe3JldHVybltkLHBdPVIsZD0rZCxwPStwLHk9ITAsUCgpfSxpLmJhbmR3aWR0aD1mdW5jdGlvbigpe3JldHVybiBifSxpLnN0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gdn0saS5yb3VuZD1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0hIVIsUCgpKTp5fSxpLnBhZGRpbmc9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFQ9TWF0aC5taW4oMSxfPStSKSxQKCkpOlR9LGkucGFkZGluZ0lubmVyPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhUPU1hdGgubWluKDEsUiksUCgpKTpUfSxpLnBhZGRpbmdPdXRlcj1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0rUixQKCkpOl99LGkuYWxpZ249ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEE9TWF0aC5tYXgoMCxNYXRoLm1pbigxLFIpKSxQKCkpOkF9LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBxcGUocygpLFtkLHBdKS5yb3VuZCh5KS5wYWRkaW5nSW5uZXIoVCkucGFkZGluZ091dGVyKF8pLmFsaWduKEEpfSxyWC5hcHBseShQKCksYXJndW1lbnRzKX1mdW5jdGlvbiBLSXQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGl9fWZ1bmN0aW9uIFdJdChpKXtyZXR1cm4raX12YXIgbUZlPVswLDFdO2Z1bmN0aW9uIGlEKGkpe3JldHVybiBpfWZ1bmN0aW9uIEhwZShpLHMpe3JldHVybihzLT1pPStpKT9mdW5jdGlvbih1KXtyZXR1cm4odS1pKS9zfTpLSXQoaXNOYU4ocyk/TmFOOi41KX1mdW5jdGlvbiBZSXQoaSxzKXt2YXIgdTtyZXR1cm4gaT5zJiYodT1pLGk9cyxzPXUpLGZ1bmN0aW9uKGQpe3JldHVybiBNYXRoLm1heChpLE1hdGgubWluKHMsZCkpfX1mdW5jdGlvbiBYSXQoaSxzLHUpe3ZhciBkPWlbMF0scD1pWzFdLHY9c1swXSxiPXNbMV07cmV0dXJuIHA8ZD8oZD1IcGUocCxkKSx2PXUoYix2KSk6KGQ9SHBlKGQscCksdj11KHYsYikpLGZ1bmN0aW9uKHkpe3JldHVybiB2KGQoeSkpfX1mdW5jdGlvbiBRSXQoaSxzLHUpe3ZhciBkPU1hdGgubWluKGkubGVuZ3RoLHMubGVuZ3RoKS0xLHA9bmV3IEFycmF5KGQpLHY9bmV3IEFycmF5KGQpLGI9LTE7Zm9yKGlbZF08aVswXSYmKGk9aS5zbGljZSgpLnJldmVyc2UoKSxzPXMuc2xpY2UoKS5yZXZlcnNlKCkpOysrYjxkOylwW2JdPUhwZShpW2JdLGlbYisxXSksdltiXT11KHNbYl0sc1tiKzFdKTtyZXR1cm4gZnVuY3Rpb24oeSl7dmFyIFQ9akF0KGkseSwxLGQpLTE7cmV0dXJuIHZbVF0ocFtUXSh5KSl9fWZ1bmN0aW9uIHZGZShpLHMpe3JldHVybiBzLmRvbWFpbihpLmRvbWFpbigpKS5yYW5nZShpLnJhbmdlKCkpLmludGVycG9sYXRlKGkuaW50ZXJwb2xhdGUoKSkuY2xhbXAoaS5jbGFtcCgpKS51bmtub3duKGkudW5rbm93bigpKX1mdW5jdGlvbiBKSXQoKXt2YXIgaT1tRmUscz1tRmUsdT1EcGUsZCxwLHYsYj1pRCx5LFQsXztmdW5jdGlvbiBBKCl7dmFyIFI9TWF0aC5taW4oaS5sZW5ndGgscy5sZW5ndGgpO3JldHVybiBiIT09aUQmJihiPVlJdChpWzBdLGlbUi0xXSkpLHk9Uj4yP1FJdDpYSXQsVD1fPW51bGwsUH1mdW5jdGlvbiBQKFIpe3JldHVybiBSPT1udWxsfHxpc05hTihSPStSKT92OihUfHwoVD15KGkubWFwKGQpLHMsdSkpKShkKGIoUikpKX1yZXR1cm4gUC5pbnZlcnQ9ZnVuY3Rpb24oUil7cmV0dXJuIGIocCgoX3x8KF89eShzLGkubWFwKGQpLEwzKSkpKFIpKSl9LFAuZG9tYWluPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPUFycmF5LmZyb20oUixXSXQpLEEoKSk6aS5zbGljZSgpfSxQLnJhbmdlPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPUFycmF5LmZyb20oUiksQSgpKTpzLnNsaWNlKCl9LFAucmFuZ2VSb3VuZD1mdW5jdGlvbihSKXtyZXR1cm4gcz1BcnJheS5mcm9tKFIpLHU9bER0LEEoKX0sUC5jbGFtcD1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj1SPyEwOmlELEEoKSk6YiE9PWlEfSxQLmludGVycG9sYXRlPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PVIsQSgpKTp1fSxQLnVua25vd249ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9UixQKTp2fSxmdW5jdGlvbihSLEYpe3JldHVybiBkPVIscD1GLEEoKX19ZnVuY3Rpb24gd0ZlKCl7cmV0dXJuIEpJdCgpKGlELGlEKX1mdW5jdGlvbiBaSXQoaSxzLHUsZCl7dmFyIHA9cHBlKGkscyx1KSx2O3N3aXRjaChkPXRYKGQ/PyIsZiIpLGQudHlwZSl7Y2FzZSJzIjp7dmFyIGI9TWF0aC5tYXgoTWF0aC5hYnMoaSksTWF0aC5hYnMocykpO3JldHVybiBkLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKHY9VUl0KHAsYikpJiYoZC5wcmVjaXNpb249dikscEZlKGQsYil9Y2FzZSIiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UiciI6e2QucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4odj1HSXQocCxNYXRoLm1heChNYXRoLmFicyhpKSxNYXRoLmFicyhzKSkpKSYmKGQucHJlY2lzaW9uPXYtKGQudHlwZT09PSJlIikpO2JyZWFrfWNhc2UiZiI6Y2FzZSIlIjp7ZC5wcmVjaXNpb249PW51bGwmJiFpc05hTih2PVZJdChwKSkmJihkLnByZWNpc2lvbj12LShkLnR5cGU9PT0iJSIpKjIpO2JyZWFrfX1yZXR1cm4gZ0ZlKGQpfWZ1bmN0aW9uIGVPdChpKXt2YXIgcz1pLmRvbWFpbjtyZXR1cm4gaS50aWNrcz1mdW5jdGlvbih1KXt2YXIgZD1zKCk7cmV0dXJuIEdBdChkWzBdLGRbZC5sZW5ndGgtMV0sdT8/MTApfSxpLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odSxkKXt2YXIgcD1zKCk7cmV0dXJuIFpJdChwWzBdLHBbcC5sZW5ndGgtMV0sdT8/MTAsZCl9LGkubmljZT1mdW5jdGlvbih1KXt1PT1udWxsJiYodT0xMCk7dmFyIGQ9cygpLHA9MCx2PWQubGVuZ3RoLTEsYj1kW3BdLHk9ZFt2XSxULF8sQT0xMDtmb3IoeTxiJiYoXz1iLGI9eSx5PV8sXz1wLHA9dix2PV8pO0EtLSA+MDspe2lmKF89Z3BlKGIseSx1KSxfPT09VClyZXR1cm4gZFtwXT1iLGRbdl09eSxzKGQpO2lmKF8+MCliPU1hdGguZmxvb3IoYi9fKSpfLHk9TWF0aC5jZWlsKHkvXykqXztlbHNlIGlmKF88MCliPU1hdGguY2VpbChiKl8pL18seT1NYXRoLmZsb29yKHkqXykvXztlbHNlIGJyZWFrO1Q9X31yZXR1cm4gaX0saX1mdW5jdGlvbiBzRCgpe3ZhciBpPXdGZSgpO3JldHVybiBpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdkZlKGksc0QoKSl9LHJYLmFwcGx5KGksYXJndW1lbnRzKSxlT3QoaSl9ZnVuY3Rpb24gdE90KGkscyl7aT1pLnNsaWNlKCk7dmFyIHU9MCxkPWkubGVuZ3RoLTEscD1pW3VdLHY9aVtkXSxiO3JldHVybiB2PHAmJihiPXUsdT1kLGQ9YixiPXAscD12LHY9YiksaVt1XT1zLmZsb29yKHApLGlbZF09cy5jZWlsKHYpLGl9Y29uc3QgVnBlPW5ldyBEYXRlLFVwZT1uZXcgRGF0ZTtmdW5jdGlvbiBoMShpLHMsdSxkKXtmdW5jdGlvbiBwKHYpe3JldHVybiBpKHY9YXJndW1lbnRzLmxlbmd0aD09PTA/bmV3IERhdGU6bmV3IERhdGUoK3YpKSx2fXJldHVybiBwLmZsb29yPXY9PihpKHY9bmV3IERhdGUoK3YpKSx2KSxwLmNlaWw9dj0+KGkodj1uZXcgRGF0ZSh2LTEpKSxzKHYsMSksaSh2KSx2KSxwLnJvdW5kPXY9Pntjb25zdCBiPXAodikseT1wLmNlaWwodik7cmV0dXJuIHYtYjx5LXY/Yjp5fSxwLm9mZnNldD0odixiKT0+KHModj1uZXcgRGF0ZSgrdiksYj09bnVsbD8xOk1hdGguZmxvb3IoYikpLHYpLHAucmFuZ2U9KHYsYix5KT0+e2NvbnN0IFQ9W107aWYodj1wLmNlaWwodikseT15PT1udWxsPzE6TWF0aC5mbG9vcih5KSwhKHY8Yil8fCEoeT4wKSlyZXR1cm4gVDtsZXQgXztkbyBULnB1c2goXz1uZXcgRGF0ZSgrdikpLHModix5KSxpKHYpO3doaWxlKF88diYmdjxiKTtyZXR1cm4gVH0scC5maWx0ZXI9dj0+aDEoYj0+e2lmKGI+PWIpZm9yKDtpKGIpLCF2KGIpOyliLnNldFRpbWUoYi0xKX0sKGIseSk9PntpZihiPj1iKWlmKHk8MClmb3IoOysreTw9MDspZm9yKDtzKGIsLTEpLCF2KGIpOyk7ZWxzZSBmb3IoOy0teT49MDspZm9yKDtzKGIsMSksIXYoYik7KTt9KSx1JiYocC5jb3VudD0odixiKT0+KFZwZS5zZXRUaW1lKCt2KSxVcGUuc2V0VGltZSgrYiksaShWcGUpLGkoVXBlKSxNYXRoLmZsb29yKHUoVnBlLFVwZSkpKSxwLmV2ZXJ5PXY9Pih2PU1hdGguZmxvb3IodiksIWlzRmluaXRlKHYpfHwhKHY+MCk/bnVsbDp2PjE/cC5maWx0ZXIoZD9iPT5kKGIpJXY9PT0wOmI9PnAuY291bnQoMCxiKSV2PT09MCk6cCkpLHB9Y29uc3QgYUQ9aDEoKCk9Pnt9LChpLHMpPT57aS5zZXRUaW1lKCtpK3MpfSwoaSxzKT0+cy1pKTthRC5ldmVyeT1pPT4oaT1NYXRoLmZsb29yKGkpLCFpc0Zpbml0ZShpKXx8IShpPjApP251bGw6aT4xP2gxKHM9PntzLnNldFRpbWUoTWF0aC5mbG9vcihzL2kpKmkpfSwocyx1KT0+e3Muc2V0VGltZSgrcyt1KmkpfSwocyx1KT0+KHUtcykvaSk6YUQpLGFELnJhbmdlO2NvbnN0IHY3PTFlMyxNdj12Nyo2MCx3Nz1Ndio2MCx5Nz13NyoyNCxHcGU9eTcqNyx5RmU9eTcqMzAsS3BlPXk3KjM2NSxiOT1oMShpPT57aS5zZXRUaW1lKGktaS5nZXRNaWxsaXNlY29uZHMoKSl9LChpLHMpPT57aS5zZXRUaW1lKCtpK3MqdjcpfSwoaSxzKT0+KHMtaSkvdjcsaT0+aS5nZXRVVENTZWNvbmRzKCkpO2I5LnJhbmdlO2NvbnN0IEFGPWgxKGk9PntpLnNldFRpbWUoaS1pLmdldE1pbGxpc2Vjb25kcygpLWkuZ2V0U2Vjb25kcygpKnY3KX0sKGkscyk9PntpLnNldFRpbWUoK2krcypNdil9LChpLHMpPT4ocy1pKS9NdixpPT5pLmdldE1pbnV0ZXMoKSk7QUYucmFuZ2UsaDEoaT0+e2kuc2V0VVRDU2Vjb25kcygwLDApfSwoaSxzKT0+e2kuc2V0VGltZSgraStzKk12KX0sKGkscyk9PihzLWkpL012LGk9PmkuZ2V0VVRDTWludXRlcygpKS5yYW5nZTtjb25zdCBMRj1oMShpPT57aS5zZXRUaW1lKGktaS5nZXRNaWxsaXNlY29uZHMoKS1pLmdldFNlY29uZHMoKSp2Ny1pLmdldE1pbnV0ZXMoKSpNdil9LChpLHMpPT57aS5zZXRUaW1lKCtpK3MqdzcpfSwoaSxzKT0+KHMtaSkvdzcsaT0+aS5nZXRIb3VycygpKTtMRi5yYW5nZSxoMShpPT57aS5zZXRVVENNaW51dGVzKDAsMCwwKX0sKGkscyk9PntpLnNldFRpbWUoK2krcyp3Nyl9LChpLHMpPT4ocy1pKS93NyxpPT5pLmdldFVUQ0hvdXJzKCkpLnJhbmdlO2NvbnN0IHZDPWgxKGk9Pmkuc2V0SG91cnMoMCwwLDAsMCksKGkscyk9Pmkuc2V0RGF0ZShpLmdldERhdGUoKStzKSwoaSxzKT0+KHMtaS0ocy5nZXRUaW1lem9uZU9mZnNldCgpLWkuZ2V0VGltZXpvbmVPZmZzZXQoKSkqTXYpL3k3LGk9PmkuZ2V0RGF0ZSgpLTEpO3ZDLnJhbmdlO2NvbnN0IFdwZT1oMShpPT57aS5zZXRVVENIb3VycygwLDAsMCwwKX0sKGkscyk9PntpLnNldFVUQ0RhdGUoaS5nZXRVVENEYXRlKCkrcyl9LChpLHMpPT4ocy1pKS95NyxpPT5pLmdldFVUQ0RhdGUoKS0xKTtXcGUucmFuZ2UsaDEoaT0+e2kuc2V0VVRDSG91cnMoMCwwLDAsMCl9LChpLHMpPT57aS5zZXRVVENEYXRlKGkuZ2V0VVRDRGF0ZSgpK3MpfSwoaSxzKT0+KHMtaSkveTcsaT0+TWF0aC5mbG9vcihpL3k3KSkucmFuZ2U7ZnVuY3Rpb24gd0MoaSl7cmV0dXJuIGgxKHM9PntzLnNldERhdGUocy5nZXREYXRlKCktKHMuZ2V0RGF5KCkrNy1pKSU3KSxzLnNldEhvdXJzKDAsMCwwLDApfSwocyx1KT0+e3Muc2V0RGF0ZShzLmdldERhdGUoKSt1KjcpfSwocyx1KT0+KHUtcy0odS5nZXRUaW1lem9uZU9mZnNldCgpLXMuZ2V0VGltZXpvbmVPZmZzZXQoKSkqTXYpL0dwZSl9Y29uc3QgTUY9d0MoMCksREY9d0MoMSkseEZlPXdDKDIpLGtGZT13QygzKSx5Qz13Qyg0KSxFRmU9d0MoNSksVEZlPXdDKDYpO01GLnJhbmdlLERGLnJhbmdlLHhGZS5yYW5nZSxrRmUucmFuZ2UseUMucmFuZ2UsRUZlLnJhbmdlLFRGZS5yYW5nZTtmdW5jdGlvbiB4QyhpKXtyZXR1cm4gaDEocz0+e3Muc2V0VVRDRGF0ZShzLmdldFVUQ0RhdGUoKS0ocy5nZXRVVENEYXkoKSs3LWkpJTcpLHMuc2V0VVRDSG91cnMoMCwwLDAsMCl9LChzLHUpPT57cy5zZXRVVENEYXRlKHMuZ2V0VVRDRGF0ZSgpK3UqNyl9LChzLHUpPT4odS1zKS9HcGUpfWNvbnN0IENGZT14QygwKSxpWD14QygxKSxuT3Q9eEMoMiksck90PXhDKDMpLG9EPXhDKDQpLGlPdD14Qyg1KSxzT3Q9eEMoNik7Q0ZlLnJhbmdlLGlYLnJhbmdlLG5PdC5yYW5nZSxyT3QucmFuZ2Usb0QucmFuZ2UsaU90LnJhbmdlLHNPdC5yYW5nZTtjb25zdCBJRj1oMShpPT57aS5zZXREYXRlKDEpLGkuc2V0SG91cnMoMCwwLDAsMCl9LChpLHMpPT57aS5zZXRNb250aChpLmdldE1vbnRoKCkrcyl9LChpLHMpPT5zLmdldE1vbnRoKCktaS5nZXRNb250aCgpKyhzLmdldEZ1bGxZZWFyKCktaS5nZXRGdWxsWWVhcigpKSoxMixpPT5pLmdldE1vbnRoKCkpO0lGLnJhbmdlLGgxKGk9PntpLnNldFVUQ0RhdGUoMSksaS5zZXRVVENIb3VycygwLDAsMCwwKX0sKGkscyk9PntpLnNldFVUQ01vbnRoKGkuZ2V0VVRDTW9udGgoKStzKX0sKGkscyk9PnMuZ2V0VVRDTW9udGgoKS1pLmdldFVUQ01vbnRoKCkrKHMuZ2V0VVRDRnVsbFllYXIoKS1pLmdldFVUQ0Z1bGxZZWFyKCkpKjEyLGk9PmkuZ2V0VVRDTW9udGgoKSkucmFuZ2U7Y29uc3QgeDc9aDEoaT0+e2kuc2V0TW9udGgoMCwxKSxpLnNldEhvdXJzKDAsMCwwLDApfSwoaSxzKT0+e2kuc2V0RnVsbFllYXIoaS5nZXRGdWxsWWVhcigpK3MpfSwoaSxzKT0+cy5nZXRGdWxsWWVhcigpLWkuZ2V0RnVsbFllYXIoKSxpPT5pLmdldEZ1bGxZZWFyKCkpO3g3LmV2ZXJ5PWk9PiFpc0Zpbml0ZShpPU1hdGguZmxvb3IoaSkpfHwhKGk+MCk/bnVsbDpoMShzPT57cy5zZXRGdWxsWWVhcihNYXRoLmZsb29yKHMuZ2V0RnVsbFllYXIoKS9pKSppKSxzLnNldE1vbnRoKDAsMSkscy5zZXRIb3VycygwLDAsMCwwKX0sKHMsdSk9PntzLnNldEZ1bGxZZWFyKHMuZ2V0RnVsbFllYXIoKSt1KmkpfSkseDcucmFuZ2U7Y29uc3Qga0M9aDEoaT0+e2kuc2V0VVRDTW9udGgoMCwxKSxpLnNldFVUQ0hvdXJzKDAsMCwwLDApfSwoaSxzKT0+e2kuc2V0VVRDRnVsbFllYXIoaS5nZXRVVENGdWxsWWVhcigpK3MpfSwoaSxzKT0+cy5nZXRVVENGdWxsWWVhcigpLWkuZ2V0VVRDRnVsbFllYXIoKSxpPT5pLmdldFVUQ0Z1bGxZZWFyKCkpO2tDLmV2ZXJ5PWk9PiFpc0Zpbml0ZShpPU1hdGguZmxvb3IoaSkpfHwhKGk+MCk/bnVsbDpoMShzPT57cy5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKHMuZ2V0VVRDRnVsbFllYXIoKS9pKSppKSxzLnNldFVUQ01vbnRoKDAsMSkscy5zZXRVVENIb3VycygwLDAsMCwwKX0sKHMsdSk9PntzLnNldFVUQ0Z1bGxZZWFyKHMuZ2V0VVRDRnVsbFllYXIoKSt1KmkpfSksa0MucmFuZ2U7ZnVuY3Rpb24gYU90KGkscyx1LGQscCx2KXtjb25zdCBiPVtbYjksMSx2N10sW2I5LDUsNSp2N10sW2I5LDE1LDE1KnY3XSxbYjksMzAsMzAqdjddLFt2LDEsTXZdLFt2LDUsNSpNdl0sW3YsMTUsMTUqTXZdLFt2LDMwLDMwKk12XSxbcCwxLHc3XSxbcCwzLDMqdzddLFtwLDYsNip3N10sW3AsMTIsMTIqdzddLFtkLDEseTddLFtkLDIsMip5N10sW3UsMSxHcGVdLFtzLDEseUZlXSxbcywzLDMqeUZlXSxbaSwxLEtwZV1dO2Z1bmN0aW9uIHkoXyxBLFApe2NvbnN0IFI9QTxfO1ImJihbXyxBXT1bQSxfXSk7Y29uc3QgRj1QJiZ0eXBlb2YgUC5yYW5nZT09ImZ1bmN0aW9uIj9QOlQoXyxBLFApLGo9Rj9GLnJhbmdlKF8sK0ErMSk6W107cmV0dXJuIFI/ai5yZXZlcnNlKCk6an1mdW5jdGlvbiBUKF8sQSxQKXtjb25zdCBSPU1hdGguYWJzKEEtXykvUCxGPWRwZSgoWywsZWVdKT0+ZWUpLnJpZ2h0KGIsUik7aWYoRj09PWIubGVuZ3RoKXJldHVybiBpLmV2ZXJ5KHBwZShfL0twZSxBL0twZSxQKSk7aWYoRj09PTApcmV0dXJuIGFELmV2ZXJ5KE1hdGgubWF4KHBwZShfLEEsUCksMSkpO2NvbnN0W2osS109YltSL2JbRi0xXVsyXTxiW0ZdWzJdL1I/Ri0xOkZdO3JldHVybiBqLmV2ZXJ5KEspfXJldHVyblt5LFRdfWNvbnN0W29PdCxjT3RdPWFPdCh4NyxJRixNRix2QyxMRixBRik7ZnVuY3Rpb24gWXBlKGkpe2lmKDA8PWkueSYmaS55PDEwMCl7dmFyIHM9bmV3IERhdGUoLTEsaS5tLGkuZCxpLkgsaS5NLGkuUyxpLkwpO3JldHVybiBzLnNldEZ1bGxZZWFyKGkueSksc31yZXR1cm4gbmV3IERhdGUoaS55LGkubSxpLmQsaS5ILGkuTSxpLlMsaS5MKX1mdW5jdGlvbiBYcGUoaSl7aWYoMDw9aS55JiZpLnk8MTAwKXt2YXIgcz1uZXcgRGF0ZShEYXRlLlVUQygtMSxpLm0saS5kLGkuSCxpLk0saS5TLGkuTCkpO3JldHVybiBzLnNldFVUQ0Z1bGxZZWFyKGkueSksc31yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoaS55LGkubSxpLmQsaS5ILGkuTSxpLlMsaS5MKSl9ZnVuY3Rpb24gT0YoaSxzLHUpe3JldHVybnt5OmksbTpzLGQ6dSxIOjAsTTowLFM6MCxMOjB9fWZ1bmN0aW9uIHVPdChpKXt2YXIgcz1pLmRhdGVUaW1lLHU9aS5kYXRlLGQ9aS50aW1lLHA9aS5wZXJpb2RzLHY9aS5kYXlzLGI9aS5zaG9ydERheXMseT1pLm1vbnRocyxUPWkuc2hvcnRNb250aHMsXz1ORihwKSxBPVBGKHApLFA9TkYodiksUj1QRih2KSxGPU5GKGIpLGo9UEYoYiksSz1ORih5KSxlZT1QRih5KSxpZT1ORihUKSxvZT1QRihUKSxwZT17YTpJZSxBOlNlLGI6Q2UsQjprZSxjOm51bGwsZDpERmUsZTpERmUsZjpJT3QsZzpxT3QsRzpWT3QsSDpMT3QsSTpNT3QsajpET3QsTDpJRmUsbTpPT3QsTTpOT3QscDpLZSxxOkZ0LFE6UkZlLHM6akZlLFM6UE90LHU6Qk90LFU6Rk90LFY6Uk90LHc6ak90LFc6JE90LHg6bnVsbCxYOm51bGwseTp6T3QsWTpIT3QsWjpVT3QsIiUiOkZGZX0sYmU9e2E6TmUsQTpnbixiOl90LEI6RXQsYzpudWxsLGQ6TkZlLGU6TkZlLGY6WU90LGc6c050LEc6b050LEg6R090LEk6S090LGo6V090LEw6UEZlLG06WE90LE06UU90LHA6R3QscTpsbixROlJGZSxzOmpGZSxTOkpPdCx1OlpPdCxVOmVOdCxWOnROdCx3Om5OdCxXOnJOdCx4Om51bGwsWDpudWxsLHk6aU50LFk6YU50LFo6Y050LCIlIjpGRmV9LGFlPXthOmdlLEE6VyxiOnhlLEI6VSxjOkZlLGQ6TEZlLGU6TEZlLGY6Q090LGc6QUZlLEc6X0ZlLEg6TUZlLEk6TUZlLGo6eE90LEw6VE90LG06eU90LE06a090LHA6WCxxOndPdCxROl9PdCxzOkFPdCxTOkVPdCx1OmdPdCxVOnBPdCxWOmJPdCx3OmRPdCxXOm1PdCx4OlBlLFg6amUseTpBRmUsWTpfRmUsWjp2T3QsIiUiOlNPdH07cGUueD1uZSh1LHBlKSxwZS5YPW5lKGQscGUpLHBlLmM9bmUocyxwZSksYmUueD1uZSh1LGJlKSxiZS5YPW5lKGQsYmUpLGJlLmM9bmUocyxiZSk7ZnVuY3Rpb24gbmUoeHQsUHQpe3JldHVybiBmdW5jdGlvbihRZSl7dmFyIER0PVtdLGt0PS0xLE9uPTAsaHQ9eHQubGVuZ3RoLHpyLHl0LGppO2ZvcihRZSBpbnN0YW5jZW9mIERhdGV8fChRZT1uZXcgRGF0ZSgrUWUpKTsrK2t0PGh0Oyl4dC5jaGFyQ29kZUF0KGt0KT09PTM3JiYoRHQucHVzaCh4dC5zbGljZShPbixrdCkpLCh5dD1TRmVbenI9eHQuY2hhckF0KCsra3QpXSkhPW51bGw/enI9eHQuY2hhckF0KCsra3QpOnl0PXpyPT09ImUiPyIgIjoiMCIsKGppPVB0W3pyXSkmJih6cj1qaShRZSx5dCkpLER0LnB1c2goenIpLE9uPWt0KzEpO3JldHVybiBEdC5wdXNoKHh0LnNsaWNlKE9uLGt0KSksRHQuam9pbigiIil9fWZ1bmN0aW9uIHNlKHh0LFB0KXtyZXR1cm4gZnVuY3Rpb24oUWUpe3ZhciBEdD1PRigxOTAwLHZvaWQgMCwxKSxrdD1kZShEdCx4dCxRZSs9IiIsMCksT24saHQ7aWYoa3QhPVFlLmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBEdClyZXR1cm4gbmV3IERhdGUoRHQuUSk7aWYoInMiaW4gRHQpcmV0dXJuIG5ldyBEYXRlKER0LnMqMWUzKygiTCJpbiBEdD9EdC5MOjApKTtpZihQdCYmISgiWiJpbiBEdCkmJihEdC5aPTApLCJwImluIER0JiYoRHQuSD1EdC5IJTEyK0R0LnAqMTIpLER0Lm09PT12b2lkIDAmJihEdC5tPSJxImluIER0P0R0LnE6MCksIlYiaW4gRHQpe2lmKER0LlY8MXx8RHQuVj41MylyZXR1cm4gbnVsbDsidyJpbiBEdHx8KER0Lnc9MSksIloiaW4gRHQ/KE9uPVhwZShPRihEdC55LDAsMSkpLGh0PU9uLmdldFVUQ0RheSgpLE9uPWh0PjR8fGh0PT09MD9pWC5jZWlsKE9uKTppWChPbiksT249V3BlLm9mZnNldChPbiwoRHQuVi0xKSo3KSxEdC55PU9uLmdldFVUQ0Z1bGxZZWFyKCksRHQubT1Pbi5nZXRVVENNb250aCgpLER0LmQ9T24uZ2V0VVRDRGF0ZSgpKyhEdC53KzYpJTcpOihPbj1ZcGUoT0YoRHQueSwwLDEpKSxodD1Pbi5nZXREYXkoKSxPbj1odD40fHxodD09PTA/REYuY2VpbChPbik6REYoT24pLE9uPXZDLm9mZnNldChPbiwoRHQuVi0xKSo3KSxEdC55PU9uLmdldEZ1bGxZZWFyKCksRHQubT1Pbi5nZXRNb250aCgpLER0LmQ9T24uZ2V0RGF0ZSgpKyhEdC53KzYpJTcpfWVsc2UoIlciaW4gRHR8fCJVImluIER0KSYmKCJ3ImluIER0fHwoRHQudz0idSJpbiBEdD9EdC51JTc6IlciaW4gRHQ/MTowKSxodD0iWiJpbiBEdD9YcGUoT0YoRHQueSwwLDEpKS5nZXRVVENEYXkoKTpZcGUoT0YoRHQueSwwLDEpKS5nZXREYXkoKSxEdC5tPTAsRHQuZD0iVyJpbiBEdD8oRHQudys2KSU3K0R0LlcqNy0oaHQrNSklNzpEdC53K0R0LlUqNy0oaHQrNiklNyk7cmV0dXJuIloiaW4gRHQ/KER0LkgrPUR0LlovMTAwfDAsRHQuTSs9RHQuWiUxMDAsWHBlKER0KSk6WXBlKER0KX19ZnVuY3Rpb24gZGUoeHQsUHQsUWUsRHQpe2Zvcih2YXIga3Q9MCxPbj1QdC5sZW5ndGgsaHQ9UWUubGVuZ3RoLHpyLHl0O2t0PE9uOyl7aWYoRHQ+PWh0KXJldHVybi0xO2lmKHpyPVB0LmNoYXJDb2RlQXQoa3QrKyksenI9PT0zNyl7aWYoenI9UHQuY2hhckF0KGt0KyspLHl0PWFlW3pyIGluIFNGZT9QdC5jaGFyQXQoa3QrKyk6enJdLCF5dHx8KER0PXl0KHh0LFFlLER0KSk8MClyZXR1cm4tMX1lbHNlIGlmKHpyIT1RZS5jaGFyQ29kZUF0KER0KyspKXJldHVybi0xfXJldHVybiBEdH1mdW5jdGlvbiBYKHh0LFB0LFFlKXt2YXIgRHQ9Xy5leGVjKFB0LnNsaWNlKFFlKSk7cmV0dXJuIER0Pyh4dC5wPUEuZ2V0KER0WzBdLnRvTG93ZXJDYXNlKCkpLFFlK0R0WzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZ2UoeHQsUHQsUWUpe3ZhciBEdD1GLmV4ZWMoUHQuc2xpY2UoUWUpKTtyZXR1cm4gRHQ/KHh0Lnc9ai5nZXQoRHRbMF0udG9Mb3dlckNhc2UoKSksUWUrRHRbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBXKHh0LFB0LFFlKXt2YXIgRHQ9UC5leGVjKFB0LnNsaWNlKFFlKSk7cmV0dXJuIER0Pyh4dC53PVIuZ2V0KER0WzBdLnRvTG93ZXJDYXNlKCkpLFFlK0R0WzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geGUoeHQsUHQsUWUpe3ZhciBEdD1pZS5leGVjKFB0LnNsaWNlKFFlKSk7cmV0dXJuIER0Pyh4dC5tPW9lLmdldChEdFswXS50b0xvd2VyQ2FzZSgpKSxRZStEdFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFUoeHQsUHQsUWUpe3ZhciBEdD1LLmV4ZWMoUHQuc2xpY2UoUWUpKTtyZXR1cm4gRHQ/KHh0Lm09ZWUuZ2V0KER0WzBdLnRvTG93ZXJDYXNlKCkpLFFlK0R0WzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRmUoeHQsUHQsUWUpe3JldHVybiBkZSh4dCxzLFB0LFFlKX1mdW5jdGlvbiBQZSh4dCxQdCxRZSl7cmV0dXJuIGRlKHh0LHUsUHQsUWUpfWZ1bmN0aW9uIGplKHh0LFB0LFFlKXtyZXR1cm4gZGUoeHQsZCxQdCxRZSl9ZnVuY3Rpb24gSWUoeHQpe3JldHVybiBiW3h0LmdldERheSgpXX1mdW5jdGlvbiBTZSh4dCl7cmV0dXJuIHZbeHQuZ2V0RGF5KCldfWZ1bmN0aW9uIENlKHh0KXtyZXR1cm4gVFt4dC5nZXRNb250aCgpXX1mdW5jdGlvbiBrZSh4dCl7cmV0dXJuIHlbeHQuZ2V0TW9udGgoKV19ZnVuY3Rpb24gS2UoeHQpe3JldHVybiBwWysoeHQuZ2V0SG91cnMoKT49MTIpXX1mdW5jdGlvbiBGdCh4dCl7cmV0dXJuIDErfn4oeHQuZ2V0TW9udGgoKS8zKX1mdW5jdGlvbiBOZSh4dCl7cmV0dXJuIGJbeHQuZ2V0VVRDRGF5KCldfWZ1bmN0aW9uIGduKHh0KXtyZXR1cm4gdlt4dC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gX3QoeHQpe3JldHVybiBUW3h0LmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIEV0KHh0KXtyZXR1cm4geVt4dC5nZXRVVENNb250aCgpXX1mdW5jdGlvbiBHdCh4dCl7cmV0dXJuIHBbKyh4dC5nZXRVVENIb3VycygpPj0xMildfWZ1bmN0aW9uIGxuKHh0KXtyZXR1cm4gMSt+fih4dC5nZXRVVENNb250aCgpLzMpfXJldHVybntmb3JtYXQ6ZnVuY3Rpb24oeHQpe3ZhciBQdD1uZSh4dCs9IiIscGUpO3JldHVybiBQdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB4dH0sUHR9LHBhcnNlOmZ1bmN0aW9uKHh0KXt2YXIgUHQ9c2UoeHQrPSIiLCExKTtyZXR1cm4gUHQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4geHR9LFB0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oeHQpe3ZhciBQdD1uZSh4dCs9IiIsYmUpO3JldHVybiBQdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB4dH0sUHR9LHV0Y1BhcnNlOmZ1bmN0aW9uKHh0KXt2YXIgUHQ9c2UoeHQrPSIiLCEwKTtyZXR1cm4gUHQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4geHR9LFB0fX19dmFyIFNGZT17Ii0iOiIiLF86IiAiLDA6IjAifSxyZD0vXlxzKlxkKy8sbE90PS9eJS8saE90PS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBtdShpLHMsdSl7dmFyIGQ9aTwwPyItIjoiIixwPShkPy1pOmkpKyIiLHY9cC5sZW5ndGg7cmV0dXJuIGQrKHY8dT9uZXcgQXJyYXkodS12KzEpLmpvaW4ocykrcDpwKX1mdW5jdGlvbiBmT3QoaSl7cmV0dXJuIGkucmVwbGFjZShoT3QsIlxcJCYiKX1mdW5jdGlvbiBORihpKXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIraS5tYXAoZk90KS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gUEYoaSl7cmV0dXJuIG5ldyBNYXAoaS5tYXAoKHMsdSk9PltzLnRvTG93ZXJDYXNlKCksdV0pKX1mdW5jdGlvbiBkT3QoaSxzLHUpe3ZhciBkPXJkLmV4ZWMocy5zbGljZSh1LHUrMSkpO3JldHVybiBkPyhpLnc9K2RbMF0sdStkWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZ090KGkscyx1KXt2YXIgZD1yZC5leGVjKHMuc2xpY2UodSx1KzEpKTtyZXR1cm4gZD8oaS51PStkWzBdLHUrZFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHBPdChpLHMsdSl7dmFyIGQ9cmQuZXhlYyhzLnNsaWNlKHUsdSsyKSk7cmV0dXJuIGQ/KGkuVT0rZFswXSx1K2RbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBiT3QoaSxzLHUpe3ZhciBkPXJkLmV4ZWMocy5zbGljZSh1LHUrMikpO3JldHVybiBkPyhpLlY9K2RbMF0sdStkWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbU90KGkscyx1KXt2YXIgZD1yZC5leGVjKHMuc2xpY2UodSx1KzIpKTtyZXR1cm4gZD8oaS5XPStkWzBdLHUrZFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIF9GZShpLHMsdSl7dmFyIGQ9cmQuZXhlYyhzLnNsaWNlKHUsdSs0KSk7cmV0dXJuIGQ/KGkueT0rZFswXSx1K2RbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBBRmUoaSxzLHUpe3ZhciBkPXJkLmV4ZWMocy5zbGljZSh1LHUrMikpO3JldHVybiBkPyhpLnk9K2RbMF0rKCtkWzBdPjY4PzE5MDA6MmUzKSx1K2RbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB2T3QoaSxzLHUpe3ZhciBkPS9eKFopfChbKy1dXGRcZCkoPzo6PyhcZFxkKSk/Ly5leGVjKHMuc2xpY2UodSx1KzYpKTtyZXR1cm4gZD8oaS5aPWRbMV0/MDotKGRbMl0rKGRbM118fCIwMCIpKSx1K2RbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB3T3QoaSxzLHUpe3ZhciBkPXJkLmV4ZWMocy5zbGljZSh1LHUrMSkpO3JldHVybiBkPyhpLnE9ZFswXSozLTMsdStkWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geU90KGkscyx1KXt2YXIgZD1yZC5leGVjKHMuc2xpY2UodSx1KzIpKTtyZXR1cm4gZD8oaS5tPWRbMF0tMSx1K2RbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBMRmUoaSxzLHUpe3ZhciBkPXJkLmV4ZWMocy5zbGljZSh1LHUrMikpO3JldHVybiBkPyhpLmQ9K2RbMF0sdStkWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geE90KGkscyx1KXt2YXIgZD1yZC5leGVjKHMuc2xpY2UodSx1KzMpKTtyZXR1cm4gZD8oaS5tPTAsaS5kPStkWzBdLHUrZFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE1GZShpLHMsdSl7dmFyIGQ9cmQuZXhlYyhzLnNsaWNlKHUsdSsyKSk7cmV0dXJuIGQ/KGkuSD0rZFswXSx1K2RbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrT3QoaSxzLHUpe3ZhciBkPXJkLmV4ZWMocy5zbGljZSh1LHUrMikpO3JldHVybiBkPyhpLk09K2RbMF0sdStkWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRU90KGkscyx1KXt2YXIgZD1yZC5leGVjKHMuc2xpY2UodSx1KzIpKTtyZXR1cm4gZD8oaS5TPStkWzBdLHUrZFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFRPdChpLHMsdSl7dmFyIGQ9cmQuZXhlYyhzLnNsaWNlKHUsdSszKSk7cmV0dXJuIGQ/KGkuTD0rZFswXSx1K2RbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBDT3QoaSxzLHUpe3ZhciBkPXJkLmV4ZWMocy5zbGljZSh1LHUrNikpO3JldHVybiBkPyhpLkw9TWF0aC5mbG9vcihkWzBdLzFlMyksdStkWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gU090KGkscyx1KXt2YXIgZD1sT3QuZXhlYyhzLnNsaWNlKHUsdSsxKSk7cmV0dXJuIGQ/dStkWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBfT3QoaSxzLHUpe3ZhciBkPXJkLmV4ZWMocy5zbGljZSh1KSk7cmV0dXJuIGQ/KGkuUT0rZFswXSx1K2RbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBBT3QoaSxzLHUpe3ZhciBkPXJkLmV4ZWMocy5zbGljZSh1KSk7cmV0dXJuIGQ/KGkucz0rZFswXSx1K2RbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBERmUoaSxzKXtyZXR1cm4gbXUoaS5nZXREYXRlKCkscywyKX1mdW5jdGlvbiBMT3QoaSxzKXtyZXR1cm4gbXUoaS5nZXRIb3VycygpLHMsMil9ZnVuY3Rpb24gTU90KGkscyl7cmV0dXJuIG11KGkuZ2V0SG91cnMoKSUxMnx8MTIscywyKX1mdW5jdGlvbiBET3QoaSxzKXtyZXR1cm4gbXUoMSt2Qy5jb3VudCh4NyhpKSxpKSxzLDMpfWZ1bmN0aW9uIElGZShpLHMpe3JldHVybiBtdShpLmdldE1pbGxpc2Vjb25kcygpLHMsMyl9ZnVuY3Rpb24gSU90KGkscyl7cmV0dXJuIElGZShpLHMpKyIwMDAifWZ1bmN0aW9uIE9PdChpLHMpe3JldHVybiBtdShpLmdldE1vbnRoKCkrMSxzLDIpfWZ1bmN0aW9uIE5PdChpLHMpe3JldHVybiBtdShpLmdldE1pbnV0ZXMoKSxzLDIpfWZ1bmN0aW9uIFBPdChpLHMpe3JldHVybiBtdShpLmdldFNlY29uZHMoKSxzLDIpfWZ1bmN0aW9uIEJPdChpKXt2YXIgcz1pLmdldERheSgpO3JldHVybiBzPT09MD83OnN9ZnVuY3Rpb24gRk90KGkscyl7cmV0dXJuIG11KE1GLmNvdW50KHg3KGkpLTEsaSkscywyKX1mdW5jdGlvbiBPRmUoaSl7dmFyIHM9aS5nZXREYXkoKTtyZXR1cm4gcz49NHx8cz09PTA/eUMoaSk6eUMuY2VpbChpKX1mdW5jdGlvbiBST3QoaSxzKXtyZXR1cm4gaT1PRmUoaSksbXUoeUMuY291bnQoeDcoaSksaSkrKHg3KGkpLmdldERheSgpPT09NCkscywyKX1mdW5jdGlvbiBqT3QoaSl7cmV0dXJuIGkuZ2V0RGF5KCl9ZnVuY3Rpb24gJE90KGkscyl7cmV0dXJuIG11KERGLmNvdW50KHg3KGkpLTEsaSkscywyKX1mdW5jdGlvbiB6T3QoaSxzKXtyZXR1cm4gbXUoaS5nZXRGdWxsWWVhcigpJTEwMCxzLDIpfWZ1bmN0aW9uIHFPdChpLHMpe3JldHVybiBpPU9GZShpKSxtdShpLmdldEZ1bGxZZWFyKCklMTAwLHMsMil9ZnVuY3Rpb24gSE90KGkscyl7cmV0dXJuIG11KGkuZ2V0RnVsbFllYXIoKSUxZTQscyw0KX1mdW5jdGlvbiBWT3QoaSxzKXt2YXIgdT1pLmdldERheSgpO3JldHVybiBpPXU+PTR8fHU9PT0wP3lDKGkpOnlDLmNlaWwoaSksbXUoaS5nZXRGdWxsWWVhcigpJTFlNCxzLDQpfWZ1bmN0aW9uIFVPdChpKXt2YXIgcz1pLmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKHM+MD8iLSI6KHMqPS0xLCIrIikpK211KHMvNjB8MCwiMCIsMikrbXUocyU2MCwiMCIsMil9ZnVuY3Rpb24gTkZlKGkscyl7cmV0dXJuIG11KGkuZ2V0VVRDRGF0ZSgpLHMsMil9ZnVuY3Rpb24gR090KGkscyl7cmV0dXJuIG11KGkuZ2V0VVRDSG91cnMoKSxzLDIpfWZ1bmN0aW9uIEtPdChpLHMpe3JldHVybiBtdShpLmdldFVUQ0hvdXJzKCklMTJ8fDEyLHMsMil9ZnVuY3Rpb24gV090KGkscyl7cmV0dXJuIG11KDErV3BlLmNvdW50KGtDKGkpLGkpLHMsMyl9ZnVuY3Rpb24gUEZlKGkscyl7cmV0dXJuIG11KGkuZ2V0VVRDTWlsbGlzZWNvbmRzKCkscywzKX1mdW5jdGlvbiBZT3QoaSxzKXtyZXR1cm4gUEZlKGkscykrIjAwMCJ9ZnVuY3Rpb24gWE90KGkscyl7cmV0dXJuIG11KGkuZ2V0VVRDTW9udGgoKSsxLHMsMil9ZnVuY3Rpb24gUU90KGkscyl7cmV0dXJuIG11KGkuZ2V0VVRDTWludXRlcygpLHMsMil9ZnVuY3Rpb24gSk90KGkscyl7cmV0dXJuIG11KGkuZ2V0VVRDU2Vjb25kcygpLHMsMil9ZnVuY3Rpb24gWk90KGkpe3ZhciBzPWkuZ2V0VVRDRGF5KCk7cmV0dXJuIHM9PT0wPzc6c31mdW5jdGlvbiBlTnQoaSxzKXtyZXR1cm4gbXUoQ0ZlLmNvdW50KGtDKGkpLTEsaSkscywyKX1mdW5jdGlvbiBCRmUoaSl7dmFyIHM9aS5nZXRVVENEYXkoKTtyZXR1cm4gcz49NHx8cz09PTA/b0QoaSk6b0QuY2VpbChpKX1mdW5jdGlvbiB0TnQoaSxzKXtyZXR1cm4gaT1CRmUoaSksbXUob0QuY291bnQoa0MoaSksaSkrKGtDKGkpLmdldFVUQ0RheSgpPT09NCkscywyKX1mdW5jdGlvbiBuTnQoaSl7cmV0dXJuIGkuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gck50KGkscyl7cmV0dXJuIG11KGlYLmNvdW50KGtDKGkpLTEsaSkscywyKX1mdW5jdGlvbiBpTnQoaSxzKXtyZXR1cm4gbXUoaS5nZXRVVENGdWxsWWVhcigpJTEwMCxzLDIpfWZ1bmN0aW9uIHNOdChpLHMpe3JldHVybiBpPUJGZShpKSxtdShpLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHMsMil9ZnVuY3Rpb24gYU50KGkscyl7cmV0dXJuIG11KGkuZ2V0VVRDRnVsbFllYXIoKSUxZTQscyw0KX1mdW5jdGlvbiBvTnQoaSxzKXt2YXIgdT1pLmdldFVUQ0RheSgpO3JldHVybiBpPXU+PTR8fHU9PT0wP29EKGkpOm9ELmNlaWwoaSksbXUoaS5nZXRVVENGdWxsWWVhcigpJTFlNCxzLDQpfWZ1bmN0aW9uIGNOdCgpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gRkZlKCl7cmV0dXJuIiUifWZ1bmN0aW9uIFJGZShpKXtyZXR1cm4raX1mdW5jdGlvbiBqRmUoaSl7cmV0dXJuIE1hdGguZmxvb3IoK2kvMWUzKX12YXIgY0Qsc1g7dU50KHtkYXRlVGltZToiJXgsICVYIixkYXRlOiIlLW0vJS1kLyVZIix0aW1lOiIlLUk6JU06JVMgJXAiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSk7ZnVuY3Rpb24gdU50KGkpe3JldHVybiBjRD11T3QoaSksc1g9Y0QuZm9ybWF0LGNELnBhcnNlLGNELnV0Y0Zvcm1hdCxjRC51dGNQYXJzZSxjRH1mdW5jdGlvbiBsTnQoaSl7cmV0dXJuIG5ldyBEYXRlKGkpfWZ1bmN0aW9uIGhOdChpKXtyZXR1cm4gaSBpbnN0YW5jZW9mIERhdGU/K2k6K25ldyBEYXRlKCtpKX1mdW5jdGlvbiAkRmUoaSxzLHUsZCxwLHYsYix5LFQsXyl7dmFyIEE9d0ZlKCksUD1BLmludmVydCxSPUEuZG9tYWluLEY9XygiLiVMIiksaj1fKCI6JVMiKSxLPV8oIiVJOiVNIiksZWU9XygiJUkgJXAiKSxpZT1fKCIlYSAlZCIpLG9lPV8oIiViICVkIikscGU9XygiJUIiKSxiZT1fKCIlWSIpO2Z1bmN0aW9uIGFlKG5lKXtyZXR1cm4oVChuZSk8bmU/Rjp5KG5lKTxuZT9qOmIobmUpPG5lP0s6dihuZSk8bmU/ZWU6ZChuZSk8bmU/cChuZSk8bmU/aWU6b2U6dShuZSk8bmU/cGU6YmUpKG5lKX1yZXR1cm4gQS5pbnZlcnQ9ZnVuY3Rpb24obmUpe3JldHVybiBuZXcgRGF0ZShQKG5lKSl9LEEuZG9tYWluPWZ1bmN0aW9uKG5lKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9SKEFycmF5LmZyb20obmUsaE50KSk6UigpLm1hcChsTnQpfSxBLnRpY2tzPWZ1bmN0aW9uKG5lKXt2YXIgc2U9UigpO3JldHVybiBpKHNlWzBdLHNlW3NlLmxlbmd0aC0xXSxuZT8/MTApfSxBLnRpY2tGb3JtYXQ9ZnVuY3Rpb24obmUsc2Upe3JldHVybiBzZT09bnVsbD9hZTpfKHNlKX0sQS5uaWNlPWZ1bmN0aW9uKG5lKXt2YXIgc2U9UigpO3JldHVybighbmV8fHR5cGVvZiBuZS5yYW5nZSE9ImZ1bmN0aW9uIikmJihuZT1zKHNlWzBdLHNlW3NlLmxlbmd0aC0xXSxuZT8/MTApKSxuZT9SKHRPdChzZSxuZSkpOkF9LEEuY29weT1mdW5jdGlvbigpe3JldHVybiB2RmUoQSwkRmUoaSxzLHUsZCxwLHYsYix5LFQsXykpfSxBfWZ1bmN0aW9uIGZOdCgpe3JldHVybiByWC5hcHBseSgkRmUob090LGNPdCx4NyxJRixNRix2QyxMRixBRixiOSxzWCkuZG9tYWluKFtuZXcgRGF0ZSgyZTMsMCwxKSxuZXcgRGF0ZSgyZTMsMCwyKV0pLGFyZ3VtZW50cyl9ZnVuY3Rpb24gZE50KGkpe2Zvcih2YXIgcz1pLmxlbmd0aC82fDAsdT1uZXcgQXJyYXkocyksZD0wO2Q8czspdVtkXT0iIyIraS5zbGljZShkKjYsKytkKjYpO3JldHVybiB1fWNvbnN0IHpGZT1kTnQoIjRlNzlhN2YyOGUyY2UxNTc1OTc2YjdiMjU5YTE0ZmVkYzk0OWFmN2FhMWZmOWRhNzljNzU1ZmJhYjBhYiIpO2Z1bmN0aW9uIFdmKGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpfX1jb25zdCBxRmU9TWF0aC5hYnMsRGc9TWF0aC5hdGFuMixFQz1NYXRoLmNvcyxnTnQ9TWF0aC5tYXgsUXBlPU1hdGgubWluLHo0PU1hdGguc2luLHVEPU1hdGguc3FydCxJZz0xZS0xMixCRj1NYXRoLlBJLGFYPUJGLzIsb1g9MipCRjtmdW5jdGlvbiBwTnQoaSl7cmV0dXJuIGk+MT8wOmk8LTE/QkY6TWF0aC5hY29zKGkpfWZ1bmN0aW9uIEhGZShpKXtyZXR1cm4gaT49MT9hWDppPD0tMT8tYVg6TWF0aC5hc2luKGkpfWZ1bmN0aW9uIFZGZShpKXtsZXQgcz0zO3JldHVybiBpLmRpZ2l0cz1mdW5jdGlvbih1KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcztpZih1PT1udWxsKXM9bnVsbDtlbHNle2NvbnN0IGQ9TWF0aC5mbG9vcih1KTtpZighKGQ+PTApKXRocm93IG5ldyBSYW5nZUVycm9yKGBpbnZhbGlkIGRpZ2l0czogJHt1fWApO3M9ZH1yZXR1cm4gaX0sKCk9Pm5ldyBESXQocyl9ZnVuY3Rpb24gYk50KGkpe3JldHVybiBpLmlubmVyUmFkaXVzfWZ1bmN0aW9uIG1OdChpKXtyZXR1cm4gaS5vdXRlclJhZGl1c31mdW5jdGlvbiB2TnQoaSl7cmV0dXJuIGkuc3RhcnRBbmdsZX1mdW5jdGlvbiB3TnQoaSl7cmV0dXJuIGkuZW5kQW5nbGV9ZnVuY3Rpb24geU50KGkpe3JldHVybiBpJiZpLnBhZEFuZ2xlfWZ1bmN0aW9uIHhOdChpLHMsdSxkLHAsdixiLHkpe3ZhciBUPXUtaSxfPWQtcyxBPWItcCxQPXktdixSPVAqVC1BKl87aWYoIShSKlI8SWcpKXJldHVybiBSPShBKihzLXYpLVAqKGktcCkpL1IsW2krUipULHMrUipfXX1mdW5jdGlvbiBjWChpLHMsdSxkLHAsdixiKXt2YXIgeT1pLXUsVD1zLWQsXz0oYj92Oi12KS91RCh5KnkrVCpUKSxBPV8qVCxQPS1fKnksUj1pK0EsRj1zK1Asaj11K0EsSz1kK1AsZWU9KFIraikvMixpZT0oRitLKS8yLG9lPWotUixwZT1LLUYsYmU9b2Uqb2UrcGUqcGUsYWU9cC12LG5lPVIqSy1qKkYsc2U9KHBlPDA/LTE6MSkqdUQoZ050KDAsYWUqYWUqYmUtbmUqbmUpKSxkZT0obmUqcGUtb2Uqc2UpL2JlLFg9KC1uZSpvZS1wZSpzZSkvYmUsZ2U9KG5lKnBlK29lKnNlKS9iZSxXPSgtbmUqb2UrcGUqc2UpL2JlLHhlPWRlLWVlLFU9WC1pZSxGZT1nZS1lZSxQZT1XLWllO3JldHVybiB4ZSp4ZStVKlU+RmUqRmUrUGUqUGUmJihkZT1nZSxYPVcpLHtjeDpkZSxjeTpYLHgwMTotQSx5MDE6LVAseDExOmRlKihwL2FlLTEpLHkxMTpYKihwL2FlLTEpfX1mdW5jdGlvbiBsRCgpe3ZhciBpPWJOdCxzPW1OdCx1PVdmKDApLGQ9bnVsbCxwPXZOdCx2PXdOdCxiPXlOdCx5PW51bGwsVD1WRmUoXyk7ZnVuY3Rpb24gXygpe3ZhciBBLFAsUj0raS5hcHBseSh0aGlzLGFyZ3VtZW50cyksRj0rcy5hcHBseSh0aGlzLGFyZ3VtZW50cyksaj1wLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1hWCxLPXYuYXBwbHkodGhpcyxhcmd1bWVudHMpLWFYLGVlPXFGZShLLWopLGllPUs+ajtpZih5fHwoeT1BPVQoKSksRjxSJiYoUD1GLEY9UixSPVApLCEoRj5JZykpeS5tb3ZlVG8oMCwwKTtlbHNlIGlmKGVlPm9YLUlnKXkubW92ZVRvKEYqRUMoaiksRip6NChqKSkseS5hcmMoMCwwLEYsaixLLCFpZSksUj5JZyYmKHkubW92ZVRvKFIqRUMoSyksUip6NChLKSkseS5hcmMoMCwwLFIsSyxqLGllKSk7ZWxzZXt2YXIgb2U9aixwZT1LLGJlPWosYWU9SyxuZT1lZSxzZT1lZSxkZT1iLmFwcGx5KHRoaXMsYXJndW1lbnRzKS8yLFg9ZGU+SWcmJihkPytkLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp1RChSKlIrRipGKSksZ2U9UXBlKHFGZShGLVIpLzIsK3UuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxXPWdlLHhlPWdlLFUsRmU7aWYoWD5JZyl7dmFyIFBlPUhGZShYL1IqejQoZGUpKSxqZT1IRmUoWC9GKno0KGRlKSk7KG5lLT1QZSoyKT5JZz8oUGUqPWllPzE6LTEsYmUrPVBlLGFlLT1QZSk6KG5lPTAsYmU9YWU9KGorSykvMiksKHNlLT1qZSoyKT5JZz8oamUqPWllPzE6LTEsb2UrPWplLHBlLT1qZSk6KHNlPTAsb2U9cGU9KGorSykvMil9dmFyIEllPUYqRUMob2UpLFNlPUYqejQob2UpLENlPVIqRUMoYWUpLGtlPVIqejQoYWUpO2lmKGdlPklnKXt2YXIgS2U9RipFQyhwZSksRnQ9Rip6NChwZSksTmU9UipFQyhiZSksZ249Uip6NChiZSksX3Q7aWYoZWU8QkYpaWYoX3Q9eE50KEllLFNlLE5lLGduLEtlLEZ0LENlLGtlKSl7dmFyIEV0PUllLV90WzBdLEd0PVNlLV90WzFdLGxuPUtlLV90WzBdLHh0PUZ0LV90WzFdLFB0PTEvejQocE50KChFdCpsbitHdCp4dCkvKHVEKEV0KkV0K0d0Kkd0KSp1RChsbipsbit4dCp4dCkpKS8yKSxRZT11RChfdFswXSpfdFswXStfdFsxXSpfdFsxXSk7Vz1RcGUoZ2UsKFItUWUpLyhQdC0xKSkseGU9UXBlKGdlLChGLVFlKS8oUHQrMSkpfWVsc2UgVz14ZT0wfXNlPklnP3hlPklnPyhVPWNYKE5lLGduLEllLFNlLEYseGUsaWUpLEZlPWNYKEtlLEZ0LENlLGtlLEYseGUsaWUpLHkubW92ZVRvKFUuY3grVS54MDEsVS5jeStVLnkwMSkseGU8Z2U/eS5hcmMoVS5jeCxVLmN5LHhlLERnKFUueTAxLFUueDAxKSxEZyhGZS55MDEsRmUueDAxKSwhaWUpOih5LmFyYyhVLmN4LFUuY3kseGUsRGcoVS55MDEsVS54MDEpLERnKFUueTExLFUueDExKSwhaWUpLHkuYXJjKDAsMCxGLERnKFUuY3krVS55MTEsVS5jeCtVLngxMSksRGcoRmUuY3krRmUueTExLEZlLmN4K0ZlLngxMSksIWllKSx5LmFyYyhGZS5jeCxGZS5jeSx4ZSxEZyhGZS55MTEsRmUueDExKSxEZyhGZS55MDEsRmUueDAxKSwhaWUpKSk6KHkubW92ZVRvKEllLFNlKSx5LmFyYygwLDAsRixvZSxwZSwhaWUpKTp5Lm1vdmVUbyhJZSxTZSksIShSPklnKXx8IShuZT5JZyk/eS5saW5lVG8oQ2Usa2UpOlc+SWc/KFU9Y1goQ2Usa2UsS2UsRnQsUiwtVyxpZSksRmU9Y1goSWUsU2UsTmUsZ24sUiwtVyxpZSkseS5saW5lVG8oVS5jeCtVLngwMSxVLmN5K1UueTAxKSxXPGdlP3kuYXJjKFUuY3gsVS5jeSxXLERnKFUueTAxLFUueDAxKSxEZyhGZS55MDEsRmUueDAxKSwhaWUpOih5LmFyYyhVLmN4LFUuY3ksVyxEZyhVLnkwMSxVLngwMSksRGcoVS55MTEsVS54MTEpLCFpZSkseS5hcmMoMCwwLFIsRGcoVS5jeStVLnkxMSxVLmN4K1UueDExKSxEZyhGZS5jeStGZS55MTEsRmUuY3grRmUueDExKSxpZSkseS5hcmMoRmUuY3gsRmUuY3ksVyxEZyhGZS55MTEsRmUueDExKSxEZyhGZS55MDEsRmUueDAxKSwhaWUpKSk6eS5hcmMoMCwwLFIsYWUsYmUsaWUpfWlmKHkuY2xvc2VQYXRoKCksQSlyZXR1cm4geT1udWxsLEErIiJ8fG51bGx9cmV0dXJuIF8uY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgQT0oK2kuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArcy5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIsUD0oK3AuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArdi5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzItQkYvMjtyZXR1cm5bRUMoUCkqQSx6NChQKSpBXX0sXy5pbm5lclJhZGl1cz1mdW5jdGlvbihBKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2YgQT09ImZ1bmN0aW9uIj9BOldmKCtBKSxfKTppfSxfLm91dGVyUmFkaXVzPWZ1bmN0aW9uKEEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXR5cGVvZiBBPT0iZnVuY3Rpb24iP0E6V2YoK0EpLF8pOnN9LF8uY29ybmVyUmFkaXVzPWZ1bmN0aW9uKEEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXR5cGVvZiBBPT0iZnVuY3Rpb24iP0E6V2YoK0EpLF8pOnV9LF8ucGFkUmFkaXVzPWZ1bmN0aW9uKEEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPUE9PW51bGw/bnVsbDp0eXBlb2YgQT09ImZ1bmN0aW9uIj9BOldmKCtBKSxfKTpkfSxfLnN0YXJ0QW5nbGU9ZnVuY3Rpb24oQSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9dHlwZW9mIEE9PSJmdW5jdGlvbiI/QTpXZigrQSksXyk6cH0sXy5lbmRBbmdsZT1mdW5jdGlvbihBKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj10eXBlb2YgQT09ImZ1bmN0aW9uIj9BOldmKCtBKSxfKTp2fSxfLnBhZEFuZ2xlPWZ1bmN0aW9uKEEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPXR5cGVvZiBBPT0iZnVuY3Rpb24iP0E6V2YoK0EpLF8pOmJ9LF8uY29udGV4dD1mdW5jdGlvbihBKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT1BPz9udWxsLF8pOnl9LF99ZnVuY3Rpb24gVUZlKGkpe3JldHVybiB0eXBlb2YgaT09Im9iamVjdCImJiJsZW5ndGgiaW4gaT9pOkFycmF5LmZyb20oaSl9ZnVuY3Rpb24gR0ZlKGkpe3RoaXMuX2NvbnRleHQ9aX1HRmUucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oaSxzKXtzd2l0Y2goaT0raSxzPStzLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGkscyk6dGhpcy5fY29udGV4dC5tb3ZlVG8oaSxzKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKGkscyk7YnJlYWt9fX07ZnVuY3Rpb24ga3AoaSl7cmV0dXJuIG5ldyBHRmUoaSl9ZnVuY3Rpb24ga050KGkpe3JldHVybiBpWzBdfWZ1bmN0aW9uIEVOdChpKXtyZXR1cm4gaVsxXX1mdW5jdGlvbiBrNyhpLHMpe3ZhciB1PVdmKCEwKSxkPW51bGwscD1rcCx2PW51bGwsYj1WRmUoeSk7aT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOmk9PT12b2lkIDA/a050OldmKGkpLHM9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpzPT09dm9pZCAwP0VOdDpXZihzKTtmdW5jdGlvbiB5KFQpe3ZhciBfLEE9KFQ9VUZlKFQpKS5sZW5ndGgsUCxSPSExLEY7Zm9yKGQ9PW51bGwmJih2PXAoRj1iKCkpKSxfPTA7Xzw9QTsrK18pIShfPEEmJnUoUD1UW19dLF8sVCkpPT09UiYmKChSPSFSKT92LmxpbmVTdGFydCgpOnYubGluZUVuZCgpKSxSJiZ2LnBvaW50KCtpKFAsXyxUKSwrcyhQLF8sVCkpO2lmKEYpcmV0dXJuIHY9bnVsbCxGKyIifHxudWxsfXJldHVybiB5Lng9ZnVuY3Rpb24oVCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIFQ9PSJmdW5jdGlvbiI/VDpXZigrVCkseSk6aX0seS55PWZ1bmN0aW9uKFQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXR5cGVvZiBUPT0iZnVuY3Rpb24iP1Q6V2YoK1QpLHkpOnN9LHkuZGVmaW5lZD1mdW5jdGlvbihUKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10eXBlb2YgVD09ImZ1bmN0aW9uIj9UOldmKCEhVCkseSk6dX0seS5jdXJ2ZT1mdW5jdGlvbihUKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1ULGQhPW51bGwmJih2PXAoZCkpLHkpOnB9LHkuY29udGV4dD1mdW5jdGlvbihUKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oVD09bnVsbD9kPXY9bnVsbDp2PXAoZD1UKSx5KTpkfSx5fWZ1bmN0aW9uIFROdChpLHMpe3JldHVybiBzPGk/LTE6cz5pPzE6cz49aT8wOk5hTn1mdW5jdGlvbiBDTnQoaSl7cmV0dXJuIGl9ZnVuY3Rpb24gU050KCl7dmFyIGk9Q050LHM9VE50LHU9bnVsbCxkPVdmKDApLHA9V2Yob1gpLHY9V2YoMCk7ZnVuY3Rpb24gYih5KXt2YXIgVCxfPSh5PVVGZSh5KSkubGVuZ3RoLEEsUCxSPTAsRj1uZXcgQXJyYXkoXyksaj1uZXcgQXJyYXkoXyksSz0rZC5hcHBseSh0aGlzLGFyZ3VtZW50cyksZWU9TWF0aC5taW4ob1gsTWF0aC5tYXgoLW9YLHAuYXBwbHkodGhpcyxhcmd1bWVudHMpLUspKSxpZSxvZT1NYXRoLm1pbihNYXRoLmFicyhlZSkvXyx2LmFwcGx5KHRoaXMsYXJndW1lbnRzKSkscGU9b2UqKGVlPDA/LTE6MSksYmU7Zm9yKFQ9MDtUPF87KytUKShiZT1qW0ZbVF09VF09K2koeVtUXSxULHkpKT4wJiYoUis9YmUpO2ZvcihzIT1udWxsP0Yuc29ydChmdW5jdGlvbihhZSxuZSl7cmV0dXJuIHMoalthZV0saltuZV0pfSk6dSE9bnVsbCYmRi5zb3J0KGZ1bmN0aW9uKGFlLG5lKXtyZXR1cm4gdSh5W2FlXSx5W25lXSl9KSxUPTAsUD1SPyhlZS1fKnBlKS9SOjA7VDxfOysrVCxLPWllKUE9RltUXSxiZT1qW0FdLGllPUsrKGJlPjA/YmUqUDowKStwZSxqW0FdPXtkYXRhOnlbQV0saW5kZXg6VCx2YWx1ZTpiZSxzdGFydEFuZ2xlOkssZW5kQW5nbGU6aWUscGFkQW5nbGU6b2V9O3JldHVybiBqfXJldHVybiBiLnZhbHVlPWZ1bmN0aW9uKHkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiB5PT0iZnVuY3Rpb24iP3k6V2YoK3kpLGIpOml9LGIuc29ydFZhbHVlcz1mdW5jdGlvbih5KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz15LHU9bnVsbCxiKTpzfSxiLnNvcnQ9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9eSxzPW51bGwsYik6dX0sYi5zdGFydEFuZ2xlPWZ1bmN0aW9uKHkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPXR5cGVvZiB5PT0iZnVuY3Rpb24iP3k6V2YoK3kpLGIpOmR9LGIuZW5kQW5nbGU9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9dHlwZW9mIHk9PSJmdW5jdGlvbiI/eTpXZigreSksYik6cH0sYi5wYWRBbmdsZT1mdW5jdGlvbih5KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj10eXBlb2YgeT09ImZ1bmN0aW9uIj95OldmKCt5KSxiKTp2fSxifWNsYXNzIEtGZXtjb25zdHJ1Y3RvcihzLHUpe3RoaXMuX2NvbnRleHQ9cyx0aGlzLl94PXV9YXJlYVN0YXJ0KCl7dGhpcy5fbGluZT0wfWFyZWFFbmQoKXt0aGlzLl9saW5lPU5hTn1saW5lU3RhcnQoKXt0aGlzLl9wb2ludD0wfWxpbmVFbmQoKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9cG9pbnQocyx1KXtzd2l0Y2gocz0rcyx1PSt1LHRoaXMuX3BvaW50KXtjYXNlIDA6e3RoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhzLHUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHMsdSk7YnJlYWt9Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp7dGhpcy5feD90aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8odGhpcy5feDA9KHRoaXMuX3gwK3MpLzIsdGhpcy5feTAsdGhpcy5feDAsdSxzLHUpOnRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0aGlzLl94MCx0aGlzLl95MD0odGhpcy5feTArdSkvMixzLHRoaXMuX3kwLHMsdSk7YnJlYWt9fXRoaXMuX3gwPXMsdGhpcy5feTA9dX19ZnVuY3Rpb24gX050KGkpe3JldHVybiBuZXcgS0ZlKGksITApfWZ1bmN0aW9uIEFOdChpKXtyZXR1cm4gbmV3IEtGZShpLCExKX1mdW5jdGlvbiBtOSgpe31mdW5jdGlvbiB1WChpLHMsdSl7aS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKmkuX3gwK2kuX3gxKS8zLCgyKmkuX3kwK2kuX3kxKS8zLChpLl94MCsyKmkuX3gxKS8zLChpLl95MCsyKmkuX3kxKS8zLChpLl94MCs0KmkuX3gxK3MpLzYsKGkuX3kwKzQqaS5feTErdSkvNil9ZnVuY3Rpb24gbFgoaSl7dGhpcy5fY29udGV4dD1pfWxYLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6dVgodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGkscyl7c3dpdGNoKGk9K2kscz0rcyx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhpLHMpOnRoaXMuX2NvbnRleHQubW92ZVRvKGkscyk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6dVgodGhpcyxpLHMpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWksdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9c319O2Z1bmN0aW9uIEZGKGkpe3JldHVybiBuZXcgbFgoaSl9ZnVuY3Rpb24gV0ZlKGkpe3RoaXMuX2NvbnRleHQ9aX1XRmUucHJvdG90eXBlPXthcmVhU3RhcnQ6bTksYXJlYUVuZDptOSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDM6e3RoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpO2JyZWFrfX19LHBvaW50OmZ1bmN0aW9uKGkscyl7c3dpdGNoKGk9K2kscz0rcyx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9aSx0aGlzLl95Mj1zO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPWksdGhpcy5feTM9czticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND1pLHRoaXMuX3k0PXMsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDEraSkvNiwodGhpcy5feTArNCp0aGlzLl95MStzKS82KTticmVhaztkZWZhdWx0OnVYKHRoaXMsaSxzKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1pLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXN9fTtmdW5jdGlvbiBMTnQoaSl7cmV0dXJuIG5ldyBXRmUoaSl9ZnVuY3Rpb24gWUZlKGkpe3RoaXMuX2NvbnRleHQ9aX1ZRmUucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGkscyl7c3dpdGNoKGk9K2kscz0rcyx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIHU9KHRoaXMuX3gwKzQqdGhpcy5feDEraSkvNixkPSh0aGlzLl95MCs0KnRoaXMuX3kxK3MpLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh1LGQpOnRoaXMuX2NvbnRleHQubW92ZVRvKHUsZCk7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDp1WCh0aGlzLGkscyk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9aSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1zfX07ZnVuY3Rpb24gTU50KGkpe3JldHVybiBuZXcgWUZlKGkpfWZ1bmN0aW9uIFhGZShpLHMpe3RoaXMuX2Jhc2lzPW5ldyBsWChpKSx0aGlzLl9iZXRhPXN9WEZlLnByb3RvdHlwZT17bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdLHRoaXMuX2Jhc2lzLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIGk9dGhpcy5feCxzPXRoaXMuX3ksdT1pLmxlbmd0aC0xO2lmKHU+MClmb3IodmFyIGQ9aVswXSxwPXNbMF0sdj1pW3VdLWQsYj1zW3VdLXAseT0tMSxUOysreTw9dTspVD15L3UsdGhpcy5fYmFzaXMucG9pbnQodGhpcy5fYmV0YSppW3ldKygxLXRoaXMuX2JldGEpKihkK1QqdiksdGhpcy5fYmV0YSpzW3ldKygxLXRoaXMuX2JldGEpKihwK1QqYikpO3RoaXMuX3g9dGhpcy5feT1udWxsLHRoaXMuX2Jhc2lzLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24oaSxzKXt0aGlzLl94LnB1c2goK2kpLHRoaXMuX3kucHVzaCgrcyl9fTtjb25zdCBETnQ9ZnVuY3Rpb24gaShzKXtmdW5jdGlvbiB1KGQpe3JldHVybiBzPT09MT9uZXcgbFgoZCk6bmV3IFhGZShkLHMpfXJldHVybiB1LmJldGE9ZnVuY3Rpb24oZCl7cmV0dXJuIGkoK2QpfSx1fSguODUpO2Z1bmN0aW9uIGhYKGkscyx1KXtpLl9jb250ZXh0LmJlemllckN1cnZlVG8oaS5feDEraS5fayooaS5feDItaS5feDApLGkuX3kxK2kuX2sqKGkuX3kyLWkuX3kwKSxpLl94MitpLl9rKihpLl94MS1zKSxpLl95MitpLl9rKihpLl95MS11KSxpLl94MixpLl95Mil9ZnVuY3Rpb24gSnBlKGkscyl7dGhpcy5fY29udGV4dD1pLHRoaXMuX2s9KDEtcykvNn1KcGUucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOmhYKHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2JyZWFrfSh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oaSxzKXtzd2l0Y2goaT0raSxzPStzLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGkscyk6dGhpcy5fY29udGV4dC5tb3ZlVG8oaSxzKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94MT1pLHRoaXMuX3kxPXM7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDpoWCh0aGlzLGkscyk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9aSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1zfX07Y29uc3QgSU50PWZ1bmN0aW9uIGkocyl7ZnVuY3Rpb24gdShkKXtyZXR1cm4gbmV3IEpwZShkLHMpfXJldHVybiB1LnRlbnNpb249ZnVuY3Rpb24oZCl7cmV0dXJuIGkoK2QpfSx1fSgwKTtmdW5jdGlvbiBacGUoaSxzKXt0aGlzLl9jb250ZXh0PWksdGhpcy5faz0oMS1zKS82fVpwZS5wcm90b3R5cGU9e2FyZWFTdGFydDptOSxhcmVhRW5kOm05LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihpLHMpe3N3aXRjaChpPStpLHM9K3MsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPWksdGhpcy5feTM9czticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND1pLHRoaXMuX3k0PXMpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PWksdGhpcy5feTU9czticmVhaztkZWZhdWx0OmhYKHRoaXMsaSxzKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1pLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXN9fTtjb25zdCBPTnQ9ZnVuY3Rpb24gaShzKXtmdW5jdGlvbiB1KGQpe3JldHVybiBuZXcgWnBlKGQscyl9cmV0dXJuIHUudGVuc2lvbj1mdW5jdGlvbihkKXtyZXR1cm4gaSgrZCl9LHV9KDApO2Z1bmN0aW9uIGUyZShpLHMpe3RoaXMuX2NvbnRleHQ9aSx0aGlzLl9rPSgxLXMpLzZ9ZTJlLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihpLHMpe3N3aXRjaChpPStpLHM9K3MsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OmhYKHRoaXMsaSxzKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1pLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXN9fTtjb25zdCBOTnQ9ZnVuY3Rpb24gaShzKXtmdW5jdGlvbiB1KGQpe3JldHVybiBuZXcgZTJlKGQscyl9cmV0dXJuIHUudGVuc2lvbj1mdW5jdGlvbihkKXtyZXR1cm4gaSgrZCl9LHV9KDApO2Z1bmN0aW9uIHQyZShpLHMsdSl7dmFyIGQ9aS5feDEscD1pLl95MSx2PWkuX3gyLGI9aS5feTI7aWYoaS5fbDAxX2E+SWcpe3ZhciB5PTIqaS5fbDAxXzJhKzMqaS5fbDAxX2EqaS5fbDEyX2EraS5fbDEyXzJhLFQ9MyppLl9sMDFfYSooaS5fbDAxX2EraS5fbDEyX2EpO2Q9KGQqeS1pLl94MCppLl9sMTJfMmEraS5feDIqaS5fbDAxXzJhKS9ULHA9KHAqeS1pLl95MCppLl9sMTJfMmEraS5feTIqaS5fbDAxXzJhKS9UfWlmKGkuX2wyM19hPklnKXt2YXIgXz0yKmkuX2wyM18yYSszKmkuX2wyM19hKmkuX2wxMl9hK2kuX2wxMl8yYSxBPTMqaS5fbDIzX2EqKGkuX2wyM19hK2kuX2wxMl9hKTt2PSh2Kl8raS5feDEqaS5fbDIzXzJhLXMqaS5fbDEyXzJhKS9BLGI9KGIqXytpLl95MSppLl9sMjNfMmEtdSppLl9sMTJfMmEpL0F9aS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGQscCx2LGIsaS5feDIsaS5feTIpfWZ1bmN0aW9uIFFGZShpLHMpe3RoaXMuX2NvbnRleHQ9aSx0aGlzLl9hbHBoYT1zfVFGZS5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihpLHMpe2lmKGk9K2kscz0rcyx0aGlzLl9wb2ludCl7dmFyIHU9dGhpcy5feDItaSxkPXRoaXMuX3kyLXM7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyh1KnUrZCpkLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGkscyk6dGhpcy5fY29udGV4dC5tb3ZlVG8oaSxzKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OnQyZSh0aGlzLGkscyk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWksdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9c319O2NvbnN0IFBOdD1mdW5jdGlvbiBpKHMpe2Z1bmN0aW9uIHUoZCl7cmV0dXJuIHM/bmV3IFFGZShkLHMpOm5ldyBKcGUoZCwwKX1yZXR1cm4gdS5hbHBoYT1mdW5jdGlvbihkKXtyZXR1cm4gaSgrZCl9LHV9KC41KTtmdW5jdGlvbiBKRmUoaSxzKXt0aGlzLl9jb250ZXh0PWksdGhpcy5fYWxwaGE9c31KRmUucHJvdG90eXBlPXthcmVhU3RhcnQ6bTksYXJlYUVuZDptOSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMzp7dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSk7YnJlYWt9fX0scG9pbnQ6ZnVuY3Rpb24oaSxzKXtpZihpPStpLHM9K3MsdGhpcy5fcG9pbnQpe3ZhciB1PXRoaXMuX3gyLWksZD10aGlzLl95Mi1zO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3codSp1K2QqZCx0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9aSx0aGlzLl95Mz1zO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PWksdGhpcy5feTQ9cyk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9aSx0aGlzLl95NT1zO2JyZWFrO2RlZmF1bHQ6dDJlKHRoaXMsaSxzKTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9aSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1zfX07Y29uc3QgQk50PWZ1bmN0aW9uIGkocyl7ZnVuY3Rpb24gdShkKXtyZXR1cm4gcz9uZXcgSkZlKGQscyk6bmV3IFpwZShkLDApfXJldHVybiB1LmFscGhhPWZ1bmN0aW9uKGQpe3JldHVybiBpKCtkKX0sdX0oLjUpO2Z1bmN0aW9uIFpGZShpLHMpe3RoaXMuX2NvbnRleHQ9aSx0aGlzLl9hbHBoYT1zfVpGZS5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0zKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oaSxzKXtpZihpPStpLHM9K3MsdGhpcy5fcG9pbnQpe3ZhciB1PXRoaXMuX3gyLWksZD10aGlzLl95Mi1zO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3codSp1K2QqZCx0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6dDJlKHRoaXMsaSxzKTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9aSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1zfX07Y29uc3QgRk50PWZ1bmN0aW9uIGkocyl7ZnVuY3Rpb24gdShkKXtyZXR1cm4gcz9uZXcgWkZlKGQscyk6bmV3IGUyZShkLDApfXJldHVybiB1LmFscGhhPWZ1bmN0aW9uKGQpe3JldHVybiBpKCtkKX0sdX0oLjUpO2Z1bmN0aW9uIGVSZShpKXt0aGlzLl9jb250ZXh0PWl9ZVJlLnByb3RvdHlwZT17YXJlYVN0YXJ0Om05LGFyZWFFbmQ6bTksbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbihpLHMpe2k9K2kscz0rcyx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyhpLHMpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKGkscykpfX07ZnVuY3Rpb24gUk50KGkpe3JldHVybiBuZXcgZVJlKGkpfWZ1bmN0aW9uIHRSZShpKXtyZXR1cm4gaTwwPy0xOjF9ZnVuY3Rpb24gblJlKGkscyx1KXt2YXIgZD1pLl94MS1pLl94MCxwPXMtaS5feDEsdj0oaS5feTEtaS5feTApLyhkfHxwPDAmJi0wKSxiPSh1LWkuX3kxKS8ocHx8ZDwwJiYtMCkseT0odipwK2IqZCkvKGQrcCk7cmV0dXJuKHRSZSh2KSt0UmUoYikpKk1hdGgubWluKE1hdGguYWJzKHYpLE1hdGguYWJzKGIpLC41Kk1hdGguYWJzKHkpKXx8MH1mdW5jdGlvbiByUmUoaSxzKXt2YXIgdT1pLl94MS1pLl94MDtyZXR1cm4gdT8oMyooaS5feTEtaS5feTApL3UtcykvMjpzfWZ1bmN0aW9uIG4yZShpLHMsdSl7dmFyIGQ9aS5feDAscD1pLl95MCx2PWkuX3gxLGI9aS5feTEseT0odi1kKS8zO2kuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhkK3kscCt5KnMsdi15LGIteSp1LHYsYil9ZnVuY3Rpb24gZlgoaSl7dGhpcy5fY29udGV4dD1pfWZYLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3QwPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpO2JyZWFrO2Nhc2UgMzpuMmUodGhpcyx0aGlzLl90MCxyUmUodGhpcyx0aGlzLl90MCkpO2JyZWFrfSh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oaSxzKXt2YXIgdT1OYU47aWYoaT0raSxzPStzLCEoaT09PXRoaXMuX3gxJiZzPT09dGhpcy5feTEpKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oaSxzKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhpLHMpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLG4yZSh0aGlzLHJSZSh0aGlzLHU9blJlKHRoaXMsaSxzKSksdSk7YnJlYWs7ZGVmYXVsdDpuMmUodGhpcyx0aGlzLl90MCx1PW5SZSh0aGlzLGkscykpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWksdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9cyx0aGlzLl90MD11fX19O2Z1bmN0aW9uIGlSZShpKXt0aGlzLl9jb250ZXh0PW5ldyBzUmUoaSl9KGlSZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShmWC5wcm90b3R5cGUpKS5wb2ludD1mdW5jdGlvbihpLHMpe2ZYLnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMscyxpKX07ZnVuY3Rpb24gc1JlKGkpe3RoaXMuX2NvbnRleHQ9aX1zUmUucHJvdG90eXBlPXttb3ZlVG86ZnVuY3Rpb24oaSxzKXt0aGlzLl9jb250ZXh0Lm1vdmVUbyhzLGkpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxsaW5lVG86ZnVuY3Rpb24oaSxzKXt0aGlzLl9jb250ZXh0LmxpbmVUbyhzLGkpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKGkscyx1LGQscCx2KXt0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8ocyxpLGQsdSx2LHApfX07ZnVuY3Rpb24gak50KGkpe3JldHVybiBuZXcgZlgoaSl9ZnVuY3Rpb24gJE50KGkpe3JldHVybiBuZXcgaVJlKGkpfWZ1bmN0aW9uIGFSZShpKXt0aGlzLl9jb250ZXh0PWl9YVJlLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciBpPXRoaXMuX3gscz10aGlzLl95LHU9aS5sZW5ndGg7aWYodSlpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGlbMF0sc1swXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8oaVswXSxzWzBdKSx1PT09Mil0aGlzLl9jb250ZXh0LmxpbmVUbyhpWzFdLHNbMV0pO2Vsc2UgZm9yKHZhciBkPW9SZShpKSxwPW9SZShzKSx2PTAsYj0xO2I8dTsrK3YsKytiKXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhkWzBdW3ZdLHBbMF1bdl0sZFsxXVt2XSxwWzFdW3ZdLGlbYl0sc1tiXSk7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ1PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LHBvaW50OmZ1bmN0aW9uKGkscyl7dGhpcy5feC5wdXNoKCtpKSx0aGlzLl95LnB1c2goK3MpfX07ZnVuY3Rpb24gb1JlKGkpe3ZhciBzLHU9aS5sZW5ndGgtMSxkLHA9bmV3IEFycmF5KHUpLHY9bmV3IEFycmF5KHUpLGI9bmV3IEFycmF5KHUpO2ZvcihwWzBdPTAsdlswXT0yLGJbMF09aVswXSsyKmlbMV0scz0xO3M8dS0xOysrcylwW3NdPTEsdltzXT00LGJbc109NCppW3NdKzIqaVtzKzFdO2ZvcihwW3UtMV09Mix2W3UtMV09NyxiW3UtMV09OCppW3UtMV0raVt1XSxzPTE7czx1OysrcylkPXBbc10vdltzLTFdLHZbc10tPWQsYltzXS09ZCpiW3MtMV07Zm9yKHBbdS0xXT1iW3UtMV0vdlt1LTFdLHM9dS0yO3M+PTA7LS1zKXBbc109KGJbc10tcFtzKzFdKS92W3NdO2Zvcih2W3UtMV09KGlbdV0rcFt1LTFdKS8yLHM9MDtzPHUtMTsrK3MpdltzXT0yKmlbcysxXS1wW3MrMV07cmV0dXJuW3Asdl19ZnVuY3Rpb24gek50KGkpe3JldHVybiBuZXcgYVJlKGkpfWZ1bmN0aW9uIGRYKGkscyl7dGhpcy5fY29udGV4dD1pLHRoaXMuX3Q9c31kWC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PXRoaXMuX3k9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPHRoaXMuX3QmJnRoaXMuX3Q8MSYmdGhpcy5fcG9pbnQ9PT0yJiZ0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHRoaXMuX3kpLCh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPj0wJiYodGhpcy5fdD0xLXRoaXMuX3QsdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUpfSxwb2ludDpmdW5jdGlvbihpLHMpe3N3aXRjaChpPStpLHM9K3MsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oaSxzKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhpLHMpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6e2lmKHRoaXMuX3Q8PTApdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCxzKSx0aGlzLl9jb250ZXh0LmxpbmVUbyhpLHMpO2Vsc2V7dmFyIHU9dGhpcy5feCooMS10aGlzLl90KStpKnRoaXMuX3Q7dGhpcy5fY29udGV4dC5saW5lVG8odSx0aGlzLl95KSx0aGlzLl9jb250ZXh0LmxpbmVUbyh1LHMpfWJyZWFrfX10aGlzLl94PWksdGhpcy5feT1zfX07ZnVuY3Rpb24gcU50KGkpe3JldHVybiBuZXcgZFgoaSwuNSl9ZnVuY3Rpb24gSE50KGkpe3JldHVybiBuZXcgZFgoaSwwKX1mdW5jdGlvbiBWTnQoaSl7cmV0dXJuIG5ldyBkWChpLDEpfWZ1bmN0aW9uIFJGKGkscyx1KXt0aGlzLms9aSx0aGlzLng9cyx0aGlzLnk9dX1SRi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlJGLHNjYWxlOmZ1bmN0aW9uKGkpe3JldHVybiBpPT09MT90aGlzOm5ldyBSRih0aGlzLmsqaSx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGkscyl7cmV0dXJuIGk9PT0wJnM9PT0wP3RoaXM6bmV3IFJGKHRoaXMuayx0aGlzLngrdGhpcy5rKmksdGhpcy55K3RoaXMuaypzKX0sYXBwbHk6ZnVuY3Rpb24oaSl7cmV0dXJuW2lbMF0qdGhpcy5rK3RoaXMueCxpWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24oaSl7cmV0dXJuIGkqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKGkpe3JldHVybiBpKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihpKXtyZXR1cm5bKGlbMF0tdGhpcy54KS90aGlzLmssKGlbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKGkpe3JldHVybihpLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKGkpe3JldHVybihpLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihpKXtyZXR1cm4gaS5jb3B5KCkuZG9tYWluKGkucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChpLmludmVydCxpKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKGkpe3JldHVybiBpLmNvcHkoKS5kb21haW4oaS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKGkuaW52ZXJ0LGkpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX0sUkYucHJvdG90eXBlOy8qISBAbGljZW5zZSBET01QdXJpZnkgMy4wLjkgfCAoYykgQ3VyZTUzIGFuZCBvdGhlciBjb250cmlidXRvcnMgfCBSZWxlYXNlZCB1bmRlciB0aGUgQXBhY2hlIGxpY2Vuc2UgMi4wIGFuZCBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIDIuMCB8IGdpdGh1Yi5jb20vY3VyZTUzL0RPTVB1cmlmeS9ibG9iLzMuMC45L0xJQ0VOU0UgKi9jb25zdHtlbnRyaWVzOmNSZSxzZXRQcm90b3R5cGVPZjp1UmUsaXNGcm96ZW46VU50LGdldFByb3RvdHlwZU9mOkdOdCxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6S050fT1PYmplY3Q7bGV0e2ZyZWV6ZTpFcCxzZWFsOkQzLGNyZWF0ZTpsUmV9PU9iamVjdCx7YXBwbHk6cjJlLGNvbnN0cnVjdDppMmV9PXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdDtFcHx8KEVwPWZ1bmN0aW9uKHMpe3JldHVybiBzfSksRDN8fChEMz1mdW5jdGlvbihzKXtyZXR1cm4gc30pLHIyZXx8KHIyZT1mdW5jdGlvbihzLHUsZCl7cmV0dXJuIHMuYXBwbHkodSxkKX0pLGkyZXx8KGkyZT1mdW5jdGlvbihzLHUpe3JldHVybiBuZXcgcyguLi51KX0pO2NvbnN0IGdYPXNtKEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKSxoUmU9c20oQXJyYXkucHJvdG90eXBlLnBvcCksakY9c20oQXJyYXkucHJvdG90eXBlLnB1c2gpLHBYPXNtKFN0cmluZy5wcm90b3R5cGUudG9Mb3dlckNhc2UpLHMyZT1zbShTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nKSxXTnQ9c20oU3RyaW5nLnByb3RvdHlwZS5tYXRjaCksJEY9c20oU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKSxZTnQ9c20oU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mKSxYTnQ9c20oU3RyaW5nLnByb3RvdHlwZS50cmltKSxJMz1zbShPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KSxpbT1zbShSZWdFeHAucHJvdG90eXBlLnRlc3QpLHpGPVFOdChUeXBlRXJyb3IpO2Z1bmN0aW9uIHNtKGkpe3JldHVybiBmdW5jdGlvbihzKXtmb3IodmFyIHU9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheSh1PjE/dS0xOjApLHA9MTtwPHU7cCsrKWRbcC0xXT1hcmd1bWVudHNbcF07cmV0dXJuIHIyZShpLHMsZCl9fWZ1bmN0aW9uIFFOdChpKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCx1PW5ldyBBcnJheShzKSxkPTA7ZDxzO2QrKyl1W2RdPWFyZ3VtZW50c1tkXTtyZXR1cm4gaTJlKGksdSl9fWZ1bmN0aW9uIENjKGkscyl7bGV0IHU9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOnBYO3VSZSYmdVJlKGksbnVsbCk7bGV0IGQ9cy5sZW5ndGg7Zm9yKDtkLS07KXtsZXQgcD1zW2RdO2lmKHR5cGVvZiBwPT0ic3RyaW5nIil7Y29uc3Qgdj11KHApO3YhPT1wJiYoVU50KHMpfHwoc1tkXT12KSxwPXYpfWlbcF09ITB9cmV0dXJuIGl9ZnVuY3Rpb24gSk50KGkpe2ZvcihsZXQgcz0wO3M8aS5sZW5ndGg7cysrKUkzKGkscyl8fChpW3NdPW51bGwpO3JldHVybiBpfWZ1bmN0aW9uIFRDKGkpe2NvbnN0IHM9bFJlKG51bGwpO2Zvcihjb25zdFt1LGRdb2YgY1JlKGkpKUkzKGksdSkmJihBcnJheS5pc0FycmF5KGQpP3NbdV09Sk50KGQpOmQmJnR5cGVvZiBkPT0ib2JqZWN0IiYmZC5jb25zdHJ1Y3Rvcj09PU9iamVjdD9zW3VdPVRDKGQpOnNbdV09ZCk7cmV0dXJuIHN9ZnVuY3Rpb24gYlgoaSxzKXtmb3IoO2khPT1udWxsOyl7Y29uc3QgZD1LTnQoaSxzKTtpZihkKXtpZihkLmdldClyZXR1cm4gc20oZC5nZXQpO2lmKHR5cGVvZiBkLnZhbHVlPT0iZnVuY3Rpb24iKXJldHVybiBzbShkLnZhbHVlKX1pPUdOdChpKX1mdW5jdGlvbiB1KCl7cmV0dXJuIG51bGx9cmV0dXJuIHV9Y29uc3QgZlJlPUVwKFsiYSIsImFiYnIiLCJhY3JvbnltIiwiYWRkcmVzcyIsImFyZWEiLCJhcnRpY2xlIiwiYXNpZGUiLCJhdWRpbyIsImIiLCJiZGkiLCJiZG8iLCJiaWciLCJibGluayIsImJsb2NrcXVvdGUiLCJib2R5IiwiYnIiLCJidXR0b24iLCJjYW52YXMiLCJjYXB0aW9uIiwiY2VudGVyIiwiY2l0ZSIsImNvZGUiLCJjb2wiLCJjb2xncm91cCIsImNvbnRlbnQiLCJkYXRhIiwiZGF0YWxpc3QiLCJkZCIsImRlY29yYXRvciIsImRlbCIsImRldGFpbHMiLCJkZm4iLCJkaWFsb2ciLCJkaXIiLCJkaXYiLCJkbCIsImR0IiwiZWxlbWVudCIsImVtIiwiZmllbGRzZXQiLCJmaWdjYXB0aW9uIiwiZmlndXJlIiwiZm9udCIsImZvb3RlciIsImZvcm0iLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJoZWFkIiwiaGVhZGVyIiwiaGdyb3VwIiwiaHIiLCJodG1sIiwiaSIsImltZyIsImlucHV0IiwiaW5zIiwia2JkIiwibGFiZWwiLCJsZWdlbmQiLCJsaSIsIm1haW4iLCJtYXAiLCJtYXJrIiwibWFycXVlZSIsIm1lbnUiLCJtZW51aXRlbSIsIm1ldGVyIiwibmF2Iiwibm9iciIsIm9sIiwib3B0Z3JvdXAiLCJvcHRpb24iLCJvdXRwdXQiLCJwIiwicGljdHVyZSIsInByZSIsInByb2dyZXNzIiwicSIsInJwIiwicnQiLCJydWJ5IiwicyIsInNhbXAiLCJzZWN0aW9uIiwic2VsZWN0Iiwic2hhZG93Iiwic21hbGwiLCJzb3VyY2UiLCJzcGFjZXIiLCJzcGFuIiwic3RyaWtlIiwic3Ryb25nIiwic3R5bGUiLCJzdWIiLCJzdW1tYXJ5Iiwic3VwIiwidGFibGUiLCJ0Ym9keSIsInRkIiwidGVtcGxhdGUiLCJ0ZXh0YXJlYSIsInRmb290IiwidGgiLCJ0aGVhZCIsInRpbWUiLCJ0ciIsInRyYWNrIiwidHQiLCJ1IiwidWwiLCJ2YXIiLCJ2aWRlbyIsIndiciJdKSxhMmU9RXAoWyJzdmciLCJhIiwiYWx0Z2x5cGgiLCJhbHRnbHlwaGRlZiIsImFsdGdseXBoaXRlbSIsImFuaW1hdGVjb2xvciIsImFuaW1hdGVtb3Rpb24iLCJhbmltYXRldHJhbnNmb3JtIiwiY2lyY2xlIiwiY2xpcHBhdGgiLCJkZWZzIiwiZGVzYyIsImVsbGlwc2UiLCJmaWx0ZXIiLCJmb250IiwiZyIsImdseXBoIiwiZ2x5cGhyZWYiLCJoa2VybiIsImltYWdlIiwibGluZSIsImxpbmVhcmdyYWRpZW50IiwibWFya2VyIiwibWFzayIsIm1ldGFkYXRhIiwibXBhdGgiLCJwYXRoIiwicGF0dGVybiIsInBvbHlnb24iLCJwb2x5bGluZSIsInJhZGlhbGdyYWRpZW50IiwicmVjdCIsInN0b3AiLCJzdHlsZSIsInN3aXRjaCIsInN5bWJvbCIsInRleHQiLCJ0ZXh0cGF0aCIsInRpdGxlIiwidHJlZiIsInRzcGFuIiwidmlldyIsInZrZXJuIl0pLG8yZT1FcChbImZlQmxlbmQiLCJmZUNvbG9yTWF0cml4IiwiZmVDb21wb25lbnRUcmFuc2ZlciIsImZlQ29tcG9zaXRlIiwiZmVDb252b2x2ZU1hdHJpeCIsImZlRGlmZnVzZUxpZ2h0aW5nIiwiZmVEaXNwbGFjZW1lbnRNYXAiLCJmZURpc3RhbnRMaWdodCIsImZlRHJvcFNoYWRvdyIsImZlRmxvb2QiLCJmZUZ1bmNBIiwiZmVGdW5jQiIsImZlRnVuY0ciLCJmZUZ1bmNSIiwiZmVHYXVzc2lhbkJsdXIiLCJmZUltYWdlIiwiZmVNZXJnZSIsImZlTWVyZ2VOb2RlIiwiZmVNb3JwaG9sb2d5IiwiZmVPZmZzZXQiLCJmZVBvaW50TGlnaHQiLCJmZVNwZWN1bGFyTGlnaHRpbmciLCJmZVNwb3RMaWdodCIsImZlVGlsZSIsImZlVHVyYnVsZW5jZSJdKSxaTnQ9RXAoWyJhbmltYXRlIiwiY29sb3ItcHJvZmlsZSIsImN1cnNvciIsImRpc2NhcmQiLCJmb250LWZhY2UiLCJmb250LWZhY2UtZm9ybWF0IiwiZm9udC1mYWNlLW5hbWUiLCJmb250LWZhY2Utc3JjIiwiZm9udC1mYWNlLXVyaSIsImZvcmVpZ25vYmplY3QiLCJoYXRjaCIsImhhdGNocGF0aCIsIm1lc2giLCJtZXNoZ3JhZGllbnQiLCJtZXNocGF0Y2giLCJtZXNocm93IiwibWlzc2luZy1nbHlwaCIsInNjcmlwdCIsInNldCIsInNvbGlkY29sb3IiLCJ1bmtub3duIiwidXNlIl0pLGMyZT1FcChbIm1hdGgiLCJtZW5jbG9zZSIsIm1lcnJvciIsIm1mZW5jZWQiLCJtZnJhYyIsIm1nbHlwaCIsIm1pIiwibWxhYmVsZWR0ciIsIm1tdWx0aXNjcmlwdHMiLCJtbiIsIm1vIiwibW92ZXIiLCJtcGFkZGVkIiwibXBoYW50b20iLCJtcm9vdCIsIm1yb3ciLCJtcyIsIm1zcGFjZSIsIm1zcXJ0IiwibXN0eWxlIiwibXN1YiIsIm1zdXAiLCJtc3Vic3VwIiwibXRhYmxlIiwibXRkIiwibXRleHQiLCJtdHIiLCJtdW5kZXIiLCJtdW5kZXJvdmVyIiwibXByZXNjcmlwdHMiXSksZVB0PUVwKFsibWFjdGlvbiIsIm1hbGlnbmdyb3VwIiwibWFsaWdubWFyayIsIm1sb25nZGl2IiwibXNjYXJyaWVzIiwibXNjYXJyeSIsIm1zZ3JvdXAiLCJtc3RhY2siLCJtc2xpbmUiLCJtc3JvdyIsInNlbWFudGljcyIsImFubm90YXRpb24iLCJhbm5vdGF0aW9uLXhtbCIsIm1wcmVzY3JpcHRzIiwibm9uZSJdKSxkUmU9RXAoWyIjdGV4dCJdKSxnUmU9RXAoWyJhY2NlcHQiLCJhY3Rpb24iLCJhbGlnbiIsImFsdCIsImF1dG9jYXBpdGFsaXplIiwiYXV0b2NvbXBsZXRlIiwiYXV0b3BpY3R1cmVpbnBpY3R1cmUiLCJhdXRvcGxheSIsImJhY2tncm91bmQiLCJiZ2NvbG9yIiwiYm9yZGVyIiwiY2FwdHVyZSIsImNlbGxwYWRkaW5nIiwiY2VsbHNwYWNpbmciLCJjaGVja2VkIiwiY2l0ZSIsImNsYXNzIiwiY2xlYXIiLCJjb2xvciIsImNvbHMiLCJjb2xzcGFuIiwiY29udHJvbHMiLCJjb250cm9sc2xpc3QiLCJjb29yZHMiLCJjcm9zc29yaWdpbiIsImRhdGV0aW1lIiwiZGVjb2RpbmciLCJkZWZhdWx0IiwiZGlyIiwiZGlzYWJsZWQiLCJkaXNhYmxlcGljdHVyZWlucGljdHVyZSIsImRpc2FibGVyZW1vdGVwbGF5YmFjayIsImRvd25sb2FkIiwiZHJhZ2dhYmxlIiwiZW5jdHlwZSIsImVudGVya2V5aGludCIsImZhY2UiLCJmb3IiLCJoZWFkZXJzIiwiaGVpZ2h0IiwiaGlkZGVuIiwiaGlnaCIsImhyZWYiLCJocmVmbGFuZyIsImlkIiwiaW5wdXRtb2RlIiwiaW50ZWdyaXR5IiwiaXNtYXAiLCJraW5kIiwibGFiZWwiLCJsYW5nIiwibGlzdCIsImxvYWRpbmciLCJsb29wIiwibG93IiwibWF4IiwibWF4bGVuZ3RoIiwibWVkaWEiLCJtZXRob2QiLCJtaW4iLCJtaW5sZW5ndGgiLCJtdWx0aXBsZSIsIm11dGVkIiwibmFtZSIsIm5vbmNlIiwibm9zaGFkZSIsIm5vdmFsaWRhdGUiLCJub3dyYXAiLCJvcGVuIiwib3B0aW11bSIsInBhdHRlcm4iLCJwbGFjZWhvbGRlciIsInBsYXlzaW5saW5lIiwicG9zdGVyIiwicHJlbG9hZCIsInB1YmRhdGUiLCJyYWRpb2dyb3VwIiwicmVhZG9ubHkiLCJyZWwiLCJyZXF1aXJlZCIsInJldiIsInJldmVyc2VkIiwicm9sZSIsInJvd3MiLCJyb3dzcGFuIiwic3BlbGxjaGVjayIsInNjb3BlIiwic2VsZWN0ZWQiLCJzaGFwZSIsInNpemUiLCJzaXplcyIsInNwYW4iLCJzcmNsYW5nIiwic3RhcnQiLCJzcmMiLCJzcmNzZXQiLCJzdGVwIiwic3R5bGUiLCJzdW1tYXJ5IiwidGFiaW5kZXgiLCJ0aXRsZSIsInRyYW5zbGF0ZSIsInR5cGUiLCJ1c2VtYXAiLCJ2YWxpZ24iLCJ2YWx1ZSIsIndpZHRoIiwieG1sbnMiLCJzbG90Il0pLHUyZT1FcChbImFjY2VudC1oZWlnaHQiLCJhY2N1bXVsYXRlIiwiYWRkaXRpdmUiLCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJhc2NlbnQiLCJhdHRyaWJ1dGVuYW1lIiwiYXR0cmlidXRldHlwZSIsImF6aW11dGgiLCJiYXNlZnJlcXVlbmN5IiwiYmFzZWxpbmUtc2hpZnQiLCJiZWdpbiIsImJpYXMiLCJieSIsImNsYXNzIiwiY2xpcCIsImNsaXBwYXRodW5pdHMiLCJjbGlwLXBhdGgiLCJjbGlwLXJ1bGUiLCJjb2xvciIsImNvbG9yLWludGVycG9sYXRpb24iLCJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMiLCJjb2xvci1wcm9maWxlIiwiY29sb3ItcmVuZGVyaW5nIiwiY3giLCJjeSIsImQiLCJkeCIsImR5IiwiZGlmZnVzZWNvbnN0YW50IiwiZGlyZWN0aW9uIiwiZGlzcGxheSIsImRpdmlzb3IiLCJkdXIiLCJlZGdlbW9kZSIsImVsZXZhdGlvbiIsImVuZCIsImZpbGwiLCJmaWxsLW9wYWNpdHkiLCJmaWxsLXJ1bGUiLCJmaWx0ZXIiLCJmaWx0ZXJ1bml0cyIsImZsb29kLWNvbG9yIiwiZmxvb2Qtb3BhY2l0eSIsImZvbnQtZmFtaWx5IiwiZm9udC1zaXplIiwiZm9udC1zaXplLWFkanVzdCIsImZvbnQtc3RyZXRjaCIsImZvbnQtc3R5bGUiLCJmb250LXZhcmlhbnQiLCJmb250LXdlaWdodCIsImZ4IiwiZnkiLCJnMSIsImcyIiwiZ2x5cGgtbmFtZSIsImdseXBocmVmIiwiZ3JhZGllbnR1bml0cyIsImdyYWRpZW50dHJhbnNmb3JtIiwiaGVpZ2h0IiwiaHJlZiIsImlkIiwiaW1hZ2UtcmVuZGVyaW5nIiwiaW4iLCJpbjIiLCJrIiwiazEiLCJrMiIsImszIiwiazQiLCJrZXJuaW5nIiwia2V5cG9pbnRzIiwia2V5c3BsaW5lcyIsImtleXRpbWVzIiwibGFuZyIsImxlbmd0aGFkanVzdCIsImxldHRlci1zcGFjaW5nIiwia2VybmVsbWF0cml4Iiwia2VybmVsdW5pdGxlbmd0aCIsImxpZ2h0aW5nLWNvbG9yIiwibG9jYWwiLCJtYXJrZXItZW5kIiwibWFya2VyLW1pZCIsIm1hcmtlci1zdGFydCIsIm1hcmtlcmhlaWdodCIsIm1hcmtlcnVuaXRzIiwibWFya2Vyd2lkdGgiLCJtYXNrY29udGVudHVuaXRzIiwibWFza3VuaXRzIiwibWF4IiwibWFzayIsIm1lZGlhIiwibWV0aG9kIiwibW9kZSIsIm1pbiIsIm5hbWUiLCJudW1vY3RhdmVzIiwib2Zmc2V0Iiwib3BlcmF0b3IiLCJvcGFjaXR5Iiwib3JkZXIiLCJvcmllbnQiLCJvcmllbnRhdGlvbiIsIm9yaWdpbiIsIm92ZXJmbG93IiwicGFpbnQtb3JkZXIiLCJwYXRoIiwicGF0aGxlbmd0aCIsInBhdHRlcm5jb250ZW50dW5pdHMiLCJwYXR0ZXJudHJhbnNmb3JtIiwicGF0dGVybnVuaXRzIiwicG9pbnRzIiwicHJlc2VydmVhbHBoYSIsInByZXNlcnZlYXNwZWN0cmF0aW8iLCJwcmltaXRpdmV1bml0cyIsInIiLCJyeCIsInJ5IiwicmFkaXVzIiwicmVmeCIsInJlZnkiLCJyZXBlYXRjb3VudCIsInJlcGVhdGR1ciIsInJlc3RhcnQiLCJyZXN1bHQiLCJyb3RhdGUiLCJzY2FsZSIsInNlZWQiLCJzaGFwZS1yZW5kZXJpbmciLCJzcGVjdWxhcmNvbnN0YW50Iiwic3BlY3VsYXJleHBvbmVudCIsInNwcmVhZG1ldGhvZCIsInN0YXJ0b2Zmc2V0Iiwic3RkZGV2aWF0aW9uIiwic3RpdGNodGlsZXMiLCJzdG9wLWNvbG9yIiwic3RvcC1vcGFjaXR5Iiwic3Ryb2tlLWRhc2hhcnJheSIsInN0cm9rZS1kYXNob2Zmc2V0Iiwic3Ryb2tlLWxpbmVjYXAiLCJzdHJva2UtbGluZWpvaW4iLCJzdHJva2UtbWl0ZXJsaW1pdCIsInN0cm9rZS1vcGFjaXR5Iiwic3Ryb2tlIiwic3Ryb2tlLXdpZHRoIiwic3R5bGUiLCJzdXJmYWNlc2NhbGUiLCJzeXN0ZW1sYW5ndWFnZSIsInRhYmluZGV4IiwidGFyZ2V0eCIsInRhcmdldHkiLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm0tb3JpZ2luIiwidGV4dC1hbmNob3IiLCJ0ZXh0LWRlY29yYXRpb24iLCJ0ZXh0LXJlbmRlcmluZyIsInRleHRsZW5ndGgiLCJ0eXBlIiwidTEiLCJ1MiIsInVuaWNvZGUiLCJ2YWx1ZXMiLCJ2aWV3Ym94IiwidmlzaWJpbGl0eSIsInZlcnNpb24iLCJ2ZXJ0LWFkdi15IiwidmVydC1vcmlnaW4teCIsInZlcnQtb3JpZ2luLXkiLCJ3aWR0aCIsIndvcmQtc3BhY2luZyIsIndyYXAiLCJ3cml0aW5nLW1vZGUiLCJ4Y2hhbm5lbHNlbGVjdG9yIiwieWNoYW5uZWxzZWxlY3RvciIsIngiLCJ4MSIsIngyIiwieG1sbnMiLCJ5IiwieTEiLCJ5MiIsInoiLCJ6b29tYW5kcGFuIl0pLHBSZT1FcChbImFjY2VudCIsImFjY2VudHVuZGVyIiwiYWxpZ24iLCJiZXZlbGxlZCIsImNsb3NlIiwiY29sdW1uc2FsaWduIiwiY29sdW1ubGluZXMiLCJjb2x1bW5zcGFuIiwiZGVub21hbGlnbiIsImRlcHRoIiwiZGlyIiwiZGlzcGxheSIsImRpc3BsYXlzdHlsZSIsImVuY29kaW5nIiwiZmVuY2UiLCJmcmFtZSIsImhlaWdodCIsImhyZWYiLCJpZCIsImxhcmdlb3AiLCJsZW5ndGgiLCJsaW5ldGhpY2tuZXNzIiwibHNwYWNlIiwibHF1b3RlIiwibWF0aGJhY2tncm91bmQiLCJtYXRoY29sb3IiLCJtYXRoc2l6ZSIsIm1hdGh2YXJpYW50IiwibWF4c2l6ZSIsIm1pbnNpemUiLCJtb3ZhYmxlbGltaXRzIiwibm90YXRpb24iLCJudW1hbGlnbiIsIm9wZW4iLCJyb3dhbGlnbiIsInJvd2xpbmVzIiwicm93c3BhY2luZyIsInJvd3NwYW4iLCJyc3BhY2UiLCJycXVvdGUiLCJzY3JpcHRsZXZlbCIsInNjcmlwdG1pbnNpemUiLCJzY3JpcHRzaXplbXVsdGlwbGllciIsInNlbGVjdGlvbiIsInNlcGFyYXRvciIsInNlcGFyYXRvcnMiLCJzdHJldGNoeSIsInN1YnNjcmlwdHNoaWZ0Iiwic3Vwc2NyaXB0c2hpZnQiLCJzeW1tZXRyaWMiLCJ2b2Zmc2V0Iiwid2lkdGgiLCJ4bWxucyJdKSxtWD1FcChbInhsaW5rOmhyZWYiLCJ4bWw6aWQiLCJ4bGluazp0aXRsZSIsInhtbDpzcGFjZSIsInhtbG5zOnhsaW5rIl0pLHRQdD1EMygvXHtce1tcd1xXXSp8W1x3XFddKlx9XH0vZ20pLG5QdD1EMygvPCVbXHdcV10qfFtcd1xXXSolPi9nbSksclB0PUQzKC9cJHtbXHdcV10qfS9nbSksaVB0PUQzKC9eZGF0YS1bXC1cdy5cdTAwQjctXHVGRkZGXS8pLHNQdD1EMygvXmFyaWEtW1wtXHddKyQvKSxiUmU9RDMoL14oPzooPzooPzpmfGh0KXRwcz98bWFpbHRvfHRlbHxjYWxsdG98c21zfGNpZHx4bXBwKTp8W15hLXpdfFthLXorLlwtXSsoPzpbXmEteisuXC06XXwkKSkvaSksYVB0PUQzKC9eKD86XHcrc2NyaXB0fGRhdGEpOi9pKSxvUHQ9RDMoL1tcdTAwMDAtXHUwMDIwXHUwMEEwXHUxNjgwXHUxODBFXHUyMDAwLVx1MjAyOVx1MjA1Rlx1MzAwMF0vZyksbVJlPUQzKC9eaHRtbCQvaSk7dmFyIHZSZT1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxNVVNUQUNIRV9FWFBSOnRQdCxFUkJfRVhQUjpuUHQsVE1QTElUX0VYUFI6clB0LERBVEFfQVRUUjppUHQsQVJJQV9BVFRSOnNQdCxJU19BTExPV0VEX1VSSTpiUmUsSVNfU0NSSVBUX09SX0RBVEE6YVB0LEFUVFJfV0hJVEVTUEFDRTpvUHQsRE9DVFlQRV9OQU1FOm1SZX0pO2NvbnN0IGNQdD1mdW5jdGlvbigpe3JldHVybiB0eXBlb2Ygd2luZG93PiJ1Ij9udWxsOndpbmRvd30sdVB0PWZ1bmN0aW9uKHMsdSl7aWYodHlwZW9mIHMhPSJvYmplY3QifHx0eXBlb2Ygcy5jcmVhdGVQb2xpY3khPSJmdW5jdGlvbiIpcmV0dXJuIG51bGw7bGV0IGQ9bnVsbDtjb25zdCBwPSJkYXRhLXR0LXBvbGljeS1zdWZmaXgiO3UmJnUuaGFzQXR0cmlidXRlKHApJiYoZD11LmdldEF0dHJpYnV0ZShwKSk7Y29uc3Qgdj0iZG9tcHVyaWZ5IisoZD8iIyIrZDoiIik7dHJ5e3JldHVybiBzLmNyZWF0ZVBvbGljeSh2LHtjcmVhdGVIVE1MKGIpe3JldHVybiBifSxjcmVhdGVTY3JpcHRVUkwoYil7cmV0dXJuIGJ9fSl9Y2F0Y2h7cmV0dXJuIGNvbnNvbGUud2FybigiVHJ1c3RlZFR5cGVzIHBvbGljeSAiK3YrIiBjb3VsZCBub3QgYmUgY3JlYXRlZC4iKSxudWxsfX07ZnVuY3Rpb24gd1JlKCl7bGV0IGk9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOmNQdCgpO2NvbnN0IHM9YXM9PndSZShhcyk7aWYocy52ZXJzaW9uPSIzLjAuOSIscy5yZW1vdmVkPVtdLCFpfHwhaS5kb2N1bWVudHx8aS5kb2N1bWVudC5ub2RlVHlwZSE9PTkpcmV0dXJuIHMuaXNTdXBwb3J0ZWQ9ITEscztsZXR7ZG9jdW1lbnQ6dX09aTtjb25zdCBkPXUscD1kLmN1cnJlbnRTY3JpcHQse0RvY3VtZW50RnJhZ21lbnQ6dixIVE1MVGVtcGxhdGVFbGVtZW50OmIsTm9kZTp5LEVsZW1lbnQ6VCxOb2RlRmlsdGVyOl8sTmFtZWROb2RlTWFwOkE9aS5OYW1lZE5vZGVNYXB8fGkuTW96TmFtZWRBdHRyTWFwLEhUTUxGb3JtRWxlbWVudDpQLERPTVBhcnNlcjpSLHRydXN0ZWRUeXBlczpGfT1pLGo9VC5wcm90b3R5cGUsSz1iWChqLCJjbG9uZU5vZGUiKSxlZT1iWChqLCJuZXh0U2libGluZyIpLGllPWJYKGosImNoaWxkTm9kZXMiKSxvZT1iWChqLCJwYXJlbnROb2RlIik7aWYodHlwZW9mIGI9PSJmdW5jdGlvbiIpe2NvbnN0IGFzPXUuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTthcy5jb250ZW50JiZhcy5jb250ZW50Lm93bmVyRG9jdW1lbnQmJih1PWFzLmNvbnRlbnQub3duZXJEb2N1bWVudCl9bGV0IHBlLGJlPSIiO2NvbnN0e2ltcGxlbWVudGF0aW9uOmFlLGNyZWF0ZU5vZGVJdGVyYXRvcjpuZSxjcmVhdGVEb2N1bWVudEZyYWdtZW50OnNlLGdldEVsZW1lbnRzQnlUYWdOYW1lOmRlfT11LHtpbXBvcnROb2RlOlh9PWQ7bGV0IGdlPXt9O3MuaXNTdXBwb3J0ZWQ9dHlwZW9mIGNSZT09ImZ1bmN0aW9uIiYmdHlwZW9mIG9lPT0iZnVuY3Rpb24iJiZhZSYmYWUuY3JlYXRlSFRNTERvY3VtZW50IT09dm9pZCAwO2NvbnN0e01VU1RBQ0hFX0VYUFI6VyxFUkJfRVhQUjp4ZSxUTVBMSVRfRVhQUjpVLERBVEFfQVRUUjpGZSxBUklBX0FUVFI6UGUsSVNfU0NSSVBUX09SX0RBVEE6amUsQVRUUl9XSElURVNQQUNFOkllfT12UmU7bGV0e0lTX0FMTE9XRURfVVJJOlNlfT12UmUsQ2U9bnVsbDtjb25zdCBrZT1DYyh7fSxbLi4uZlJlLC4uLmEyZSwuLi5vMmUsLi4uYzJlLC4uLmRSZV0pO2xldCBLZT1udWxsO2NvbnN0IEZ0PUNjKHt9LFsuLi5nUmUsLi4udTJlLC4uLnBSZSwuLi5tWF0pO2xldCBOZT1PYmplY3Quc2VhbChsUmUobnVsbCx7dGFnTmFtZUNoZWNrOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTpudWxsfSxhdHRyaWJ1dGVOYW1lQ2hlY2s6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOm51bGx9LGFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50czp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6ITF9fSkpLGduPW51bGwsX3Q9bnVsbCxFdD0hMCxHdD0hMCxsbj0hMSx4dD0hMCxQdD0hMSxRZT0hMSxEdD0hMSxrdD0hMSxPbj0hMSxodD0hMSx6cj0hMSx5dD0hMCxqaT0hMTtjb25zdCB4aT0idXNlci1jb250ZW50LSI7bGV0IE1hPSEwLHpzPSExLGFvPXt9LFRyPW51bGw7Y29uc3QgRm49Q2Moe30sWyJhbm5vdGF0aW9uLXhtbCIsImF1ZGlvIiwiY29sZ3JvdXAiLCJkZXNjIiwiZm9yZWlnbm9iamVjdCIsImhlYWQiLCJpZnJhbWUiLCJtYXRoIiwibWkiLCJtbiIsIm1vIiwibXMiLCJtdGV4dCIsIm5vZW1iZWQiLCJub2ZyYW1lcyIsIm5vc2NyaXB0IiwicGxhaW50ZXh0Iiwic2NyaXB0Iiwic3R5bGUiLCJzdmciLCJ0ZW1wbGF0ZSIsInRoZWFkIiwidGl0bGUiLCJ2aWRlbyIsInhtcCJdKTtsZXQgcW49bnVsbDtjb25zdCBVbj1DYyh7fSxbImF1ZGlvIiwidmlkZW8iLCJpbWciLCJzb3VyY2UiLCJpbWFnZSIsInRyYWNrIl0pO2xldCBBdD1udWxsO2NvbnN0IHd0PUNjKHt9LFsiYWx0IiwiY2xhc3MiLCJmb3IiLCJpZCIsImxhYmVsIiwibmFtZSIsInBhdHRlcm4iLCJwbGFjZWhvbGRlciIsInJvbGUiLCJzdW1tYXJ5IiwidGl0bGUiLCJ2YWx1ZSIsInN0eWxlIiwieG1sbnMiXSksb249Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLGZuPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsQW49Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiO2xldCBvbz1Bbixqbz0hMSwkbz1udWxsO2NvbnN0IFBhPUNjKHt9LFtvbixmbixBbl0sczJlKTtsZXQgd289bnVsbDtjb25zdCBfcz1bImFwcGxpY2F0aW9uL3hodG1sK3htbCIsInRleHQvaHRtbCJdLHRsPSJ0ZXh0L2h0bWwiO2xldCBkYT1udWxsLGowPW51bGw7Y29uc3QgcG09dS5jcmVhdGVFbGVtZW50KCJmb3JtIiksTWw9ZnVuY3Rpb24od24pe3JldHVybiB3biBpbnN0YW5jZW9mIFJlZ0V4cHx8d24gaW5zdGFuY2VvZiBGdW5jdGlvbn0sWGM9ZnVuY3Rpb24oKXtsZXQgd249YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnt9O2lmKCEoajAmJmowPT09d24pKXtpZigoIXdufHx0eXBlb2Ygd24hPSJvYmplY3QiKSYmKHduPXt9KSx3bj1UQyh3biksd289X3MuaW5kZXhPZih3bi5QQVJTRVJfTUVESUFfVFlQRSk9PT0tMT90bDp3bi5QQVJTRVJfTUVESUFfVFlQRSxkYT13bz09PSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiP3MyZTpwWCxDZT1JMyh3biwiQUxMT1dFRF9UQUdTIik/Q2Moe30sd24uQUxMT1dFRF9UQUdTLGRhKTprZSxLZT1JMyh3biwiQUxMT1dFRF9BVFRSIik/Q2Moe30sd24uQUxMT1dFRF9BVFRSLGRhKTpGdCwkbz1JMyh3biwiQUxMT1dFRF9OQU1FU1BBQ0VTIik/Q2Moe30sd24uQUxMT1dFRF9OQU1FU1BBQ0VTLHMyZSk6UGEsQXQ9STMod24sIkFERF9VUklfU0FGRV9BVFRSIik/Q2MoVEMod3QpLHduLkFERF9VUklfU0FGRV9BVFRSLGRhKTp3dCxxbj1JMyh3biwiQUREX0RBVEFfVVJJX1RBR1MiKT9DYyhUQyhVbiksd24uQUREX0RBVEFfVVJJX1RBR1MsZGEpOlVuLFRyPUkzKHduLCJGT1JCSURfQ09OVEVOVFMiKT9DYyh7fSx3bi5GT1JCSURfQ09OVEVOVFMsZGEpOkZuLGduPUkzKHduLCJGT1JCSURfVEFHUyIpP0NjKHt9LHduLkZPUkJJRF9UQUdTLGRhKTp7fSxfdD1JMyh3biwiRk9SQklEX0FUVFIiKT9DYyh7fSx3bi5GT1JCSURfQVRUUixkYSk6e30sYW89STMod24sIlVTRV9QUk9GSUxFUyIpP3duLlVTRV9QUk9GSUxFUzohMSxFdD13bi5BTExPV19BUklBX0FUVFIhPT0hMSxHdD13bi5BTExPV19EQVRBX0FUVFIhPT0hMSxsbj13bi5BTExPV19VTktOT1dOX1BST1RPQ09MU3x8ITEseHQ9d24uQUxMT1dfU0VMRl9DTE9TRV9JTl9BVFRSIT09ITEsUHQ9d24uU0FGRV9GT1JfVEVNUExBVEVTfHwhMSxRZT13bi5XSE9MRV9ET0NVTUVOVHx8ITEsT249d24uUkVUVVJOX0RPTXx8ITEsaHQ9d24uUkVUVVJOX0RPTV9GUkFHTUVOVHx8ITEsenI9d24uUkVUVVJOX1RSVVNURURfVFlQRXx8ITEsa3Q9d24uRk9SQ0VfQk9EWXx8ITEseXQ9d24uU0FOSVRJWkVfRE9NIT09ITEsamk9d24uU0FOSVRJWkVfTkFNRURfUFJPUFN8fCExLE1hPXduLktFRVBfQ09OVEVOVCE9PSExLHpzPXduLklOX1BMQUNFfHwhMSxTZT13bi5BTExPV0VEX1VSSV9SRUdFWFB8fGJSZSxvbz13bi5OQU1FU1BBQ0V8fEFuLE5lPXduLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HfHx7fSx3bi5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmTWwod24uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKSYmKE5lLnRhZ05hbWVDaGVjaz13bi5DVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2spLHduLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiZNbCh3bi5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2spJiYoTmUuYXR0cmlidXRlTmFtZUNoZWNrPXduLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjayksd24uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJnR5cGVvZiB3bi5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHM9PSJib29sZWFuIiYmKE5lLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cz13bi5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMpLFB0JiYoR3Q9ITEpLGh0JiYoT249ITApLGFvJiYoQ2U9Q2Moe30sZFJlKSxLZT1bXSxhby5odG1sPT09ITAmJihDYyhDZSxmUmUpLENjKEtlLGdSZSkpLGFvLnN2Zz09PSEwJiYoQ2MoQ2UsYTJlKSxDYyhLZSx1MmUpLENjKEtlLG1YKSksYW8uc3ZnRmlsdGVycz09PSEwJiYoQ2MoQ2UsbzJlKSxDYyhLZSx1MmUpLENjKEtlLG1YKSksYW8ubWF0aE1sPT09ITAmJihDYyhDZSxjMmUpLENjKEtlLHBSZSksQ2MoS2UsbVgpKSksd24uQUREX1RBR1MmJihDZT09PWtlJiYoQ2U9VEMoQ2UpKSxDYyhDZSx3bi5BRERfVEFHUyxkYSkpLHduLkFERF9BVFRSJiYoS2U9PT1GdCYmKEtlPVRDKEtlKSksQ2MoS2Usd24uQUREX0FUVFIsZGEpKSx3bi5BRERfVVJJX1NBRkVfQVRUUiYmQ2MoQXQsd24uQUREX1VSSV9TQUZFX0FUVFIsZGEpLHduLkZPUkJJRF9DT05URU5UUyYmKFRyPT09Rm4mJihUcj1UQyhUcikpLENjKFRyLHduLkZPUkJJRF9DT05URU5UUyxkYSkpLE1hJiYoQ2VbIiN0ZXh0Il09ITApLFFlJiZDYyhDZSxbImh0bWwiLCJoZWFkIiwiYm9keSJdKSxDZS50YWJsZSYmKENjKENlLFsidGJvZHkiXSksZGVsZXRlIGduLnRib2R5KSx3bi5UUlVTVEVEX1RZUEVTX1BPTElDWSl7aWYodHlwZW9mIHduLlRSVVNURURfVFlQRVNfUE9MSUNZLmNyZWF0ZUhUTUwhPSJmdW5jdGlvbiIpdGhyb3cgekYoJ1RSVVNURURfVFlQRVNfUE9MSUNZIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG11c3QgcHJvdmlkZSBhICJjcmVhdGVIVE1MIiBob29rLicpO2lmKHR5cGVvZiB3bi5UUlVTVEVEX1RZUEVTX1BPTElDWS5jcmVhdGVTY3JpcHRVUkwhPSJmdW5jdGlvbiIpdGhyb3cgekYoJ1RSVVNURURfVFlQRVNfUE9MSUNZIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG11c3QgcHJvdmlkZSBhICJjcmVhdGVTY3JpcHRVUkwiIGhvb2suJyk7cGU9d24uVFJVU1RFRF9UWVBFU19QT0xJQ1ksYmU9cGUuY3JlYXRlSFRNTCgiIil9ZWxzZSBwZT09PXZvaWQgMCYmKHBlPXVQdChGLHApKSxwZSE9PW51bGwmJnR5cGVvZiBiZT09InN0cmluZyImJihiZT1wZS5jcmVhdGVIVE1MKCIiKSk7RXAmJkVwKHduKSxqMD13bn19LEJjPUNjKHt9LFsibWkiLCJtbyIsIm1uIiwibXMiLCJtdGV4dCJdKSxqYT1DYyh7fSxbImZvcmVpZ25vYmplY3QiLCJkZXNjIiwidGl0bGUiLCJhbm5vdGF0aW9uLXhtbCJdKSxPdT1DYyh7fSxbInRpdGxlIiwic3R5bGUiLCJmb250IiwiYSIsInNjcmlwdCJdKSxTYT1DYyh7fSxbLi4uYTJlLC4uLm8yZSwuLi5aTnRdKSxQbz1DYyh7fSxbLi4uYzJlLC4uLmVQdF0pLEZjPWZ1bmN0aW9uKHduKXtsZXQgWnI9b2Uod24pOyghWnJ8fCFaci50YWdOYW1lKSYmKFpyPXtuYW1lc3BhY2VVUkk6b28sdGFnTmFtZToidGVtcGxhdGUifSk7Y29uc3QgWmk9cFgod24udGFnTmFtZSksbnU9cFgoWnIudGFnTmFtZSk7cmV0dXJuICRvW3duLm5hbWVzcGFjZVVSSV0/d24ubmFtZXNwYWNlVVJJPT09Zm4/WnIubmFtZXNwYWNlVVJJPT09QW4/Wmk9PT0ic3ZnIjpaci5uYW1lc3BhY2VVUkk9PT1vbj9aaT09PSJzdmciJiYobnU9PT0iYW5ub3RhdGlvbi14bWwifHxCY1tudV0pOiEhU2FbWmldOnduLm5hbWVzcGFjZVVSST09PW9uP1pyLm5hbWVzcGFjZVVSST09PUFuP1ppPT09Im1hdGgiOlpyLm5hbWVzcGFjZVVSST09PWZuP1ppPT09Im1hdGgiJiZqYVtudV06ISFQb1taaV06d24ubmFtZXNwYWNlVVJJPT09QW4/WnIubmFtZXNwYWNlVVJJPT09Zm4mJiFqYVtudV18fFpyLm5hbWVzcGFjZVVSST09PW9uJiYhQmNbbnVdPyExOiFQb1taaV0mJihPdVtaaV18fCFTYVtaaV0pOiEhKHdvPT09ImFwcGxpY2F0aW9uL3hodG1sK3htbCImJiRvW3duLm5hbWVzcGFjZVVSSV0pOiExfSx4YT1mdW5jdGlvbih3bil7akYocy5yZW1vdmVkLHtlbGVtZW50OndufSk7dHJ5e3duLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQod24pfWNhdGNoe3duLnJlbW92ZSgpfX0sQmE9ZnVuY3Rpb24od24sWnIpe3RyeXtqRihzLnJlbW92ZWQse2F0dHJpYnV0ZTpaci5nZXRBdHRyaWJ1dGVOb2RlKHduKSxmcm9tOlpyfSl9Y2F0Y2h7akYocy5yZW1vdmVkLHthdHRyaWJ1dGU6bnVsbCxmcm9tOlpyfSl9aWYoWnIucmVtb3ZlQXR0cmlidXRlKHduKSx3bj09PSJpcyImJiFLZVt3bl0paWYoT258fGh0KXRyeXt4YShacil9Y2F0Y2h7fWVsc2UgdHJ5e1pyLnNldEF0dHJpYnV0ZSh3biwiIil9Y2F0Y2h7fX0sZ2E9ZnVuY3Rpb24od24pe2xldCBacj1udWxsLFppPW51bGw7aWYoa3Qpd249IjxyZW1vdmU+PC9yZW1vdmU+Iit3bjtlbHNle2NvbnN0IERsPVdOdCh3biwvXltcclxuXHQgXSsvKTtaaT1EbCYmRGxbMF19d289PT0iYXBwbGljYXRpb24veGh0bWwreG1sIiYmb289PT1BbiYmKHduPSc8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+PGhlYWQ+PC9oZWFkPjxib2R5Picrd24rIjwvYm9keT48L2h0bWw+Iik7Y29uc3QgbnU9cGU/cGUuY3JlYXRlSFRNTCh3bik6d247aWYob289PT1Bbil0cnl7WnI9bmV3IFIoKS5wYXJzZUZyb21TdHJpbmcobnUsd28pfWNhdGNoe31pZighWnJ8fCFaci5kb2N1bWVudEVsZW1lbnQpe1pyPWFlLmNyZWF0ZURvY3VtZW50KG9vLCJ0ZW1wbGF0ZSIsbnVsbCk7dHJ5e1pyLmRvY3VtZW50RWxlbWVudC5pbm5lckhUTUw9am8/YmU6bnV9Y2F0Y2h7fX1jb25zdCB2dT1aci5ib2R5fHxaci5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIHduJiZaaSYmdnUuaW5zZXJ0QmVmb3JlKHUuY3JlYXRlVGV4dE5vZGUoWmkpLHZ1LmNoaWxkTm9kZXNbMF18fG51bGwpLG9vPT09QW4/ZGUuY2FsbChacixRZT8iaHRtbCI6ImJvZHkiKVswXTpRZT9aci5kb2N1bWVudEVsZW1lbnQ6dnV9LGtoPWZ1bmN0aW9uKHduKXtyZXR1cm4gbmUuY2FsbCh3bi5vd25lckRvY3VtZW50fHx3bix3bixfLlNIT1dfRUxFTUVOVHxfLlNIT1dfQ09NTUVOVHxfLlNIT1dfVEVYVCxudWxsKX0sbHU9ZnVuY3Rpb24od24pe3JldHVybiB3biBpbnN0YW5jZW9mIFAmJih0eXBlb2Ygd24ubm9kZU5hbWUhPSJzdHJpbmcifHx0eXBlb2Ygd24udGV4dENvbnRlbnQhPSJzdHJpbmcifHx0eXBlb2Ygd24ucmVtb3ZlQ2hpbGQhPSJmdW5jdGlvbiJ8fCEod24uYXR0cmlidXRlcyBpbnN0YW5jZW9mIEEpfHx0eXBlb2Ygd24ucmVtb3ZlQXR0cmlidXRlIT0iZnVuY3Rpb24ifHx0eXBlb2Ygd24uc2V0QXR0cmlidXRlIT0iZnVuY3Rpb24ifHx0eXBlb2Ygd24ubmFtZXNwYWNlVVJJIT0ic3RyaW5nInx8dHlwZW9mIHduLmluc2VydEJlZm9yZSE9ImZ1bmN0aW9uInx8dHlwZW9mIHduLmhhc0NoaWxkTm9kZXMhPSJmdW5jdGlvbiIpfSxvNT1mdW5jdGlvbih3bil7cmV0dXJuIHR5cGVvZiB5PT0iZnVuY3Rpb24iJiZ3biBpbnN0YW5jZW9mIHl9LFdoPWZ1bmN0aW9uKHduLFpyLFppKXtnZVt3bl0mJmdYKGdlW3duXSxudT0+e251LmNhbGwocyxacixaaSxqMCl9KX0sb2Q9ZnVuY3Rpb24od24pe2xldCBacj1udWxsO2lmKFdoKCJiZWZvcmVTYW5pdGl6ZUVsZW1lbnRzIix3bixudWxsKSxsdSh3bikpcmV0dXJuIHhhKHduKSwhMDtjb25zdCBaaT1kYSh3bi5ub2RlTmFtZSk7aWYoV2goInVwb25TYW5pdGl6ZUVsZW1lbnQiLHduLHt0YWdOYW1lOlppLGFsbG93ZWRUYWdzOkNlfSksd24uaGFzQ2hpbGROb2RlcygpJiYhbzUod24uZmlyc3RFbGVtZW50Q2hpbGQpJiZpbSgvPFsvXHddL2csd24uaW5uZXJIVE1MKSYmaW0oLzxbL1x3XS9nLHduLnRleHRDb250ZW50KSlyZXR1cm4geGEod24pLCEwO2lmKCFDZVtaaV18fGduW1ppXSl7aWYoIWduW1ppXSYmY2QoWmkpJiYoTmUudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZpbShOZS50YWdOYW1lQ2hlY2ssWmkpfHxOZS50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmTmUudGFnTmFtZUNoZWNrKFppKSkpcmV0dXJuITE7aWYoTWEmJiFUcltaaV0pe2NvbnN0IG51PW9lKHduKXx8d24ucGFyZW50Tm9kZSx2dT1pZSh3bil8fHduLmNoaWxkTm9kZXM7aWYodnUmJm51KXtjb25zdCBEbD12dS5sZW5ndGg7Zm9yKGxldCBZaD1EbC0xO1loPj0wOy0tWWgpbnUuaW5zZXJ0QmVmb3JlKEsodnVbWWhdLCEwKSxlZSh3bikpfX1yZXR1cm4geGEod24pLCEwfXJldHVybiB3biBpbnN0YW5jZW9mIFQmJiFGYyh3bil8fChaaT09PSJub3NjcmlwdCJ8fFppPT09Im5vZW1iZWQifHxaaT09PSJub2ZyYW1lcyIpJiZpbSgvPFwvbm8oc2NyaXB0fGVtYmVkfGZyYW1lcykvaSx3bi5pbm5lckhUTUwpPyh4YSh3biksITApOihQdCYmd24ubm9kZVR5cGU9PT0zJiYoWnI9d24udGV4dENvbnRlbnQsZ1goW1cseGUsVV0sbnU9Pntacj0kRihacixudSwiICIpfSksd24udGV4dENvbnRlbnQhPT1aciYmKGpGKHMucmVtb3ZlZCx7ZWxlbWVudDp3bi5jbG9uZU5vZGUoKX0pLHduLnRleHRDb250ZW50PVpyKSksV2goImFmdGVyU2FuaXRpemVFbGVtZW50cyIsd24sbnVsbCksITEpfSxHZD1mdW5jdGlvbih3bixacixaaSl7aWYoeXQmJihacj09PSJpZCJ8fFpyPT09Im5hbWUiKSYmKFppIGluIHV8fFppIGluIHBtKSlyZXR1cm4hMTtpZighKEd0JiYhX3RbWnJdJiZpbShGZSxacikpKXtpZighKEV0JiZpbShQZSxacikpKXtpZighS2VbWnJdfHxfdFtacl0pe2lmKCEoY2Qod24pJiYoTmUudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZpbShOZS50YWdOYW1lQ2hlY2ssd24pfHxOZS50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmTmUudGFnTmFtZUNoZWNrKHduKSkmJihOZS5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJmltKE5lLmF0dHJpYnV0ZU5hbWVDaGVjayxacil8fE5lLmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZOZS5hdHRyaWJ1dGVOYW1lQ2hlY2soWnIpKXx8WnI9PT0iaXMiJiZOZS5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMmJihOZS50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJmltKE5lLnRhZ05hbWVDaGVjayxaaSl8fE5lLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZOZS50YWdOYW1lQ2hlY2soWmkpKSkpcmV0dXJuITF9ZWxzZSBpZighQXRbWnJdKXtpZighaW0oU2UsJEYoWmksSWUsIiIpKSl7aWYoISgoWnI9PT0ic3JjInx8WnI9PT0ieGxpbms6aHJlZiJ8fFpyPT09ImhyZWYiKSYmd24hPT0ic2NyaXB0IiYmWU50KFppLCJkYXRhOiIpPT09MCYmcW5bd25dKSl7aWYoIShsbiYmIWltKGplLCRGKFppLEllLCIiKSkpKXtpZihaaSlyZXR1cm4hMX19fX19fXJldHVybiEwfSxjZD1mdW5jdGlvbih3bil7cmV0dXJuIHduIT09ImFubm90YXRpb24teG1sIiYmd24uaW5kZXhPZigiLSIpPjB9LEtkPWZ1bmN0aW9uKHduKXtXaCgiYmVmb3JlU2FuaXRpemVBdHRyaWJ1dGVzIix3bixudWxsKTtjb25zdHthdHRyaWJ1dGVzOlpyfT13bjtpZighWnIpcmV0dXJuO2NvbnN0IFppPXthdHRyTmFtZToiIixhdHRyVmFsdWU6IiIsa2VlcEF0dHI6ITAsYWxsb3dlZEF0dHJpYnV0ZXM6S2V9O2xldCBudT1aci5sZW5ndGg7Zm9yKDtudS0tOyl7Y29uc3QgdnU9WnJbbnVdLHtuYW1lOkRsLG5hbWVzcGFjZVVSSTpZaCx2YWx1ZTp3MX09dnUsJDA9ZGEoRGwpO2xldCBXaT1EbD09PSJ2YWx1ZSI/dzE6WE50KHcxKTtpZihaaS5hdHRyTmFtZT0kMCxaaS5hdHRyVmFsdWU9V2ksWmkua2VlcEF0dHI9ITAsWmkuZm9yY2VLZWVwQXR0cj12b2lkIDAsV2goInVwb25TYW5pdGl6ZUF0dHJpYnV0ZSIsd24sWmkpLFdpPVppLmF0dHJWYWx1ZSxaaS5mb3JjZUtlZXBBdHRyfHwoQmEoRGwsd24pLCFaaS5rZWVwQXR0cikpY29udGludWU7aWYoIXh0JiZpbSgvXC8+L2ksV2kpKXtCYShEbCx3bik7Y29udGludWV9UHQmJmdYKFtXLHhlLFVdLFFhPT57V2k9JEYoV2ksUWEsIiAiKX0pO2NvbnN0IEJzPWRhKHduLm5vZGVOYW1lKTtpZihHZChCcywkMCxXaSkpe2lmKGppJiYoJDA9PT0iaWQifHwkMD09PSJuYW1lIikmJihCYShEbCx3biksV2k9eGkrV2kpLHBlJiZ0eXBlb2YgRj09Im9iamVjdCImJnR5cGVvZiBGLmdldEF0dHJpYnV0ZVR5cGU9PSJmdW5jdGlvbiImJiFZaClzd2l0Y2goRi5nZXRBdHRyaWJ1dGVUeXBlKEJzLCQwKSl7Y2FzZSJUcnVzdGVkSFRNTCI6e1dpPXBlLmNyZWF0ZUhUTUwoV2kpO2JyZWFrfWNhc2UiVHJ1c3RlZFNjcmlwdFVSTCI6e1dpPXBlLmNyZWF0ZVNjcmlwdFVSTChXaSk7YnJlYWt9fXRyeXtZaD93bi5zZXRBdHRyaWJ1dGVOUyhZaCxEbCxXaSk6d24uc2V0QXR0cmlidXRlKERsLFdpKSxoUmUocy5yZW1vdmVkKX1jYXRjaHt9fX1XaCgiYWZ0ZXJTYW5pdGl6ZUF0dHJpYnV0ZXMiLHduLG51bGwpfSwkZz1mdW5jdGlvbiBhcyh3bil7bGV0IFpyPW51bGw7Y29uc3QgWmk9a2god24pO2ZvcihXaCgiYmVmb3JlU2FuaXRpemVTaGFkb3dET00iLHduLG51bGwpO1pyPVppLm5leHROb2RlKCk7KVdoKCJ1cG9uU2FuaXRpemVTaGFkb3dOb2RlIixacixudWxsKSwhb2QoWnIpJiYoWnIuY29udGVudCBpbnN0YW5jZW9mIHYmJmFzKFpyLmNvbnRlbnQpLEtkKFpyKSk7V2goImFmdGVyU2FuaXRpemVTaGFkb3dET00iLHduLG51bGwpfTtyZXR1cm4gcy5zYW5pdGl6ZT1mdW5jdGlvbihhcyl7bGV0IHduPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxacj1udWxsLFppPW51bGwsbnU9bnVsbCx2dT1udWxsO2lmKGpvPSFhcyxqbyYmKGFzPSI8IS0tPiIpLHR5cGVvZiBhcyE9InN0cmluZyImJiFvNShhcykpaWYodHlwZW9mIGFzLnRvU3RyaW5nPT0iZnVuY3Rpb24iKXtpZihhcz1hcy50b1N0cmluZygpLHR5cGVvZiBhcyE9InN0cmluZyIpdGhyb3cgekYoImRpcnR5IGlzIG5vdCBhIHN0cmluZywgYWJvcnRpbmciKX1lbHNlIHRocm93IHpGKCJ0b1N0cmluZyBpcyBub3QgYSBmdW5jdGlvbiIpO2lmKCFzLmlzU3VwcG9ydGVkKXJldHVybiBhcztpZihEdHx8WGMod24pLHMucmVtb3ZlZD1bXSx0eXBlb2YgYXM9PSJzdHJpbmciJiYoenM9ITEpLHpzKXtpZihhcy5ub2RlTmFtZSl7Y29uc3QgdzE9ZGEoYXMubm9kZU5hbWUpO2lmKCFDZVt3MV18fGduW3cxXSl0aHJvdyB6Rigicm9vdCBub2RlIGlzIGZvcmJpZGRlbiBhbmQgY2Fubm90IGJlIHNhbml0aXplZCBpbi1wbGFjZSIpfX1lbHNlIGlmKGFzIGluc3RhbmNlb2YgeSlacj1nYSgiPCEtLS0tPiIpLFppPVpyLm93bmVyRG9jdW1lbnQuaW1wb3J0Tm9kZShhcywhMCksWmkubm9kZVR5cGU9PT0xJiZaaS5ub2RlTmFtZT09PSJCT0RZInx8Wmkubm9kZU5hbWU9PT0iSFRNTCI/WnI9Wmk6WnIuYXBwZW5kQ2hpbGQoWmkpO2Vsc2V7aWYoIU9uJiYhUHQmJiFRZSYmYXMuaW5kZXhPZigiPCIpPT09LTEpcmV0dXJuIHBlJiZ6cj9wZS5jcmVhdGVIVE1MKGFzKTphcztpZihacj1nYShhcyksIVpyKXJldHVybiBPbj9udWxsOnpyP2JlOiIifVpyJiZrdCYmeGEoWnIuZmlyc3RDaGlsZCk7Y29uc3QgRGw9a2goenM/YXM6WnIpO2Zvcig7bnU9RGwubmV4dE5vZGUoKTspb2QobnUpfHwobnUuY29udGVudCBpbnN0YW5jZW9mIHYmJiRnKG51LmNvbnRlbnQpLEtkKG51KSk7aWYoenMpcmV0dXJuIGFzO2lmKE9uKXtpZihodClmb3IodnU9c2UuY2FsbChaci5vd25lckRvY3VtZW50KTtaci5maXJzdENoaWxkOyl2dS5hcHBlbmRDaGlsZChaci5maXJzdENoaWxkKTtlbHNlIHZ1PVpyO3JldHVybihLZS5zaGFkb3dyb290fHxLZS5zaGFkb3dyb290bW9kZSkmJih2dT1YLmNhbGwoZCx2dSwhMCkpLHZ1fWxldCBZaD1RZT9aci5vdXRlckhUTUw6WnIuaW5uZXJIVE1MO3JldHVybiBRZSYmQ2VbIiFkb2N0eXBlIl0mJlpyLm93bmVyRG9jdW1lbnQmJlpyLm93bmVyRG9jdW1lbnQuZG9jdHlwZSYmWnIub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUmJmltKG1SZSxaci5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSkmJihZaD0iPCFET0NUWVBFICIrWnIub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUrYD4KYCtZaCksUHQmJmdYKFtXLHhlLFVdLHcxPT57WWg9JEYoWWgsdzEsIiAiKX0pLHBlJiZ6cj9wZS5jcmVhdGVIVE1MKFloKTpZaH0scy5zZXRDb25maWc9ZnVuY3Rpb24oKXtsZXQgYXM9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnt9O1hjKGFzKSxEdD0hMH0scy5jbGVhckNvbmZpZz1mdW5jdGlvbigpe2owPW51bGwsRHQ9ITF9LHMuaXNWYWxpZEF0dHJpYnV0ZT1mdW5jdGlvbihhcyx3bixacil7ajB8fFhjKHt9KTtjb25zdCBaaT1kYShhcyksbnU9ZGEod24pO3JldHVybiBHZChaaSxudSxacil9LHMuYWRkSG9vaz1mdW5jdGlvbihhcyx3bil7dHlwZW9mIHduPT0iZnVuY3Rpb24iJiYoZ2VbYXNdPWdlW2FzXXx8W10sakYoZ2VbYXNdLHduKSl9LHMucmVtb3ZlSG9vaz1mdW5jdGlvbihhcyl7aWYoZ2VbYXNdKXJldHVybiBoUmUoZ2VbYXNdKX0scy5yZW1vdmVIb29rcz1mdW5jdGlvbihhcyl7Z2VbYXNdJiYoZ2VbYXNdPVtdKX0scy5yZW1vdmVBbGxIb29rcz1mdW5jdGlvbigpe2dlPXt9fSxzfXZhciBoRD13UmUoKTtjb25zdCBmRD0vPGJyXHMqXC8/Pi9naSxsUHQ9aT0+aT9rUmUoaSkucmVwbGFjZSgvXFxuL2csIiNiciMiKS5zcGxpdCgiI2JyIyIpOlsiIl0saFB0PSgoKT0+e2xldCBpPSExO3JldHVybigpPT57aXx8KGZQdCgpLGk9ITApfX0pKCk7ZnVuY3Rpb24gZlB0KCl7Y29uc3QgaT0iZGF0YS10ZW1wLWhyZWYtdGFyZ2V0IjtoRC5hZGRIb29rKCJiZWZvcmVTYW5pdGl6ZUF0dHJpYnV0ZXMiLHM9PntzLnRhZ05hbWU9PT0iQSImJnMuaGFzQXR0cmlidXRlKCJ0YXJnZXQiKSYmcy5zZXRBdHRyaWJ1dGUoaSxzLmdldEF0dHJpYnV0ZSgidGFyZ2V0Iil8fCIiKX0pLGhELmFkZEhvb2soImFmdGVyU2FuaXRpemVBdHRyaWJ1dGVzIixzPT57cy50YWdOYW1lPT09IkEiJiZzLmhhc0F0dHJpYnV0ZShpKSYmKHMuc2V0QXR0cmlidXRlKCJ0YXJnZXQiLHMuZ2V0QXR0cmlidXRlKGkpfHwiIikscy5yZW1vdmVBdHRyaWJ1dGUoaSkscy5nZXRBdHRyaWJ1dGUoInRhcmdldCIpPT09Il9ibGFuayImJnMuc2V0QXR0cmlidXRlKCJyZWwiLCJub29wZW5lciIpKX0pfWNvbnN0IHlSZT1pPT4oaFB0KCksaEQuc2FuaXRpemUoaSkpLHhSZT0oaSxzKT0+e3ZhciB1O2lmKCgodT1zLmZsb3djaGFydCk9PW51bGw/dm9pZCAwOnUuaHRtbExhYmVscykhPT0hMSl7Y29uc3QgZD1zLnNlY3VyaXR5TGV2ZWw7ZD09PSJhbnRpc2NyaXB0Inx8ZD09PSJzdHJpY3QiP2k9eVJlKGkpOmQhPT0ibG9vc2UiJiYoaT1rUmUoaSksaT1pLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLGk9aS5yZXBsYWNlKC89L2csIiZlcXVhbHM7IiksaT1iUHQoaSkpfXJldHVybiBpfSxZZj0oaSxzKT0+aSYmKHMuZG9tcHVyaWZ5Q29uZmlnP2k9aEQuc2FuaXRpemUoeFJlKGkscykscy5kb21wdXJpZnlDb25maWcpLnRvU3RyaW5nKCk6aT1oRC5zYW5pdGl6ZSh4UmUoaSxzKSx7Rk9SQklEX1RBR1M6WyJzdHlsZSJdfSkudG9TdHJpbmcoKSxpKSxkUHQ9KGkscyk9PnR5cGVvZiBpPT0ic3RyaW5nIj9ZZihpLHMpOmkuZmxhdCgpLm1hcCh1PT5ZZih1LHMpKSxnUHQ9aT0+ZkQudGVzdChpKSxwUHQ9aT0+aS5zcGxpdChmRCksYlB0PWk9PmkucmVwbGFjZSgvI2JyIy9nLCI8YnIvPiIpLGtSZT1pPT5pLnJlcGxhY2UoZkQsIiNiciMiKSxtUHQ9aT0+e2xldCBzPSIiO3JldHVybiBpJiYocz13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCxzPXMucmVwbGFjZUFsbCgvXCgvZywiXFwoIikscz1zLnJlcGxhY2VBbGwoL1wpL2csIlxcKSIpKSxzfSxmMT1pPT4hKGk9PT0hMXx8WyJmYWxzZSIsIm51bGwiLCIwIl0uaW5jbHVkZXMoU3RyaW5nKGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSksdlB0PWZ1bmN0aW9uKC4uLmkpe2NvbnN0IHM9aS5maWx0ZXIodT0+IWlzTmFOKHUpKTtyZXR1cm4gTWF0aC5tYXgoLi4ucyl9LHdQdD1mdW5jdGlvbiguLi5pKXtjb25zdCBzPWkuZmlsdGVyKHU9PiFpc05hTih1KSk7cmV0dXJuIE1hdGgubWluKC4uLnMpfSxxRj1mdW5jdGlvbihpKXtjb25zdCBzPWkuc3BsaXQoLygsKS8pLHU9W107Zm9yKGxldCBkPTA7ZDxzLmxlbmd0aDtkKyspe2xldCBwPXNbZF07aWYocD09PSIsIiYmZD4wJiZkKzE8cy5sZW5ndGgpe2NvbnN0IHY9c1tkLTFdLGI9c1tkKzFdO3lQdCh2LGIpJiYocD12KyIsIitiLGQrKyx1LnBvcCgpKX11LnB1c2goeFB0KHApKX1yZXR1cm4gdS5qb2luKCIiKX0sbDJlPShpLHMpPT5NYXRoLm1heCgwLGkuc3BsaXQocykubGVuZ3RoLTEpLHlQdD0oaSxzKT0+e2NvbnN0IHU9bDJlKGksIn4iKSxkPWwyZShzLCJ+Iik7cmV0dXJuIHU9PT0xJiZkPT09MX0seFB0PWk9Pntjb25zdCBzPWwyZShpLCJ+Iik7bGV0IHU9ITE7aWYoczw9MSlyZXR1cm4gaTtzJTIhPT0wJiZpLnN0YXJ0c1dpdGgoIn4iKSYmKGk9aS5zdWJzdHJpbmcoMSksdT0hMCk7Y29uc3QgZD1bLi4uaV07bGV0IHA9ZC5pbmRleE9mKCJ+Iiksdj1kLmxhc3RJbmRleE9mKCJ+Iik7Zm9yKDtwIT09LTEmJnYhPT0tMSYmcCE9PXY7KWRbcF09IjwiLGRbdl09Ij4iLHA9ZC5pbmRleE9mKCJ+Iiksdj1kLmxhc3RJbmRleE9mKCJ+Iik7cmV0dXJuIHUmJmQudW5zaGlmdCgifiIpLGQuam9pbigiIil9LEVSZT0oKT0+d2luZG93Lk1hdGhNTEVsZW1lbnQhPT12b2lkIDAsaDJlPS9cJFwkKC4qKVwkXCQvZyxEdj1pPT57dmFyIHM7cmV0dXJuKCgocz1pLm1hdGNoKGgyZSkpPT1udWxsP3ZvaWQgMDpzLmxlbmd0aCk/PzApPjB9LEhGPWFzeW5jKGkscyk9PntpPWF3YWl0IENDKGkscyk7Y29uc3QgdT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt1LmlubmVySFRNTD1pLHUuaWQ9ImthdGV4LXRlbXAiLHUuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIix1LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdS5zdHlsZS50b3A9IjAiO2NvbnN0IGQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYm9keSIpO2Q9PW51bGx8fGQuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCJiZWZvcmVlbmQiLHUpO2NvbnN0IHA9e3dpZHRoOnUuY2xpZW50V2lkdGgsaGVpZ2h0OnUuY2xpZW50SGVpZ2h0fTtyZXR1cm4gdS5yZW1vdmUoKSxwfSxDQz1hc3luYyhpLHMpPT57aWYoIUR2KGkpKXJldHVybiBpO2lmKCFFUmUoKSYmIXMubGVnYWN5TWF0aE1MKXJldHVybiBpLnJlcGxhY2UoaDJlLCJNYXRoTUwgaXMgdW5zdXBwb3J0ZWQgaW4gdGhpcyBlbnZpcm9ubWVudC4iKTtjb25zdHtkZWZhdWx0OnV9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pk1WdCk7cmV0dXJuIGkuc3BsaXQoZkQpLm1hcChkPT5EdihkKT9gCiAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyB3aGl0ZS1zcGFjZTogbm93cmFwOyI+CiAgICAgICAgICAgICAgJHtkfQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGA6YDxkaXY+JHtkfTwvZGl2PmApLmpvaW4oIiIpLnJlcGxhY2UoaDJlLChkLHApPT51LnJlbmRlclRvU3RyaW5nKHAse3Rocm93T25FcnJvcjohMCxkaXNwbGF5TW9kZTohMCxvdXRwdXQ6RVJlKCk/Im1hdGhtbCI6Imh0bWxBbmRNYXRobWwifSkucmVwbGFjZSgvXG4vZywiICIpLnJlcGxhY2UoLzxhbm5vdGF0aW9uLio8XC9hbm5vdGF0aW9uPi9nLCIiKSl9LGNpPXtnZXRSb3dzOmxQdCxzYW5pdGl6ZVRleHQ6WWYsc2FuaXRpemVUZXh0T3JBcnJheTpkUHQsaGFzQnJlYWtzOmdQdCxzcGxpdEJyZWFrczpwUHQsbGluZUJyZWFrUmVnZXg6ZkQscmVtb3ZlU2NyaXB0OnlSZSxnZXRVcmw6bVB0LGV2YWx1YXRlOmYxLGdldE1heDp2UHQsZ2V0TWluOndQdH0sdlg9e21pbjp7cjowLGc6MCxiOjAsczowLGw6MCxhOjB9LG1heDp7cjoyNTUsZzoyNTUsYjoyNTUsaDozNjAsczoxMDAsbDoxMDAsYToxfSxjbGFtcDp7cjppPT5pPj0yNTU/MjU1Omk8MD8wOmksZzppPT5pPj0yNTU/MjU1Omk8MD8wOmksYjppPT5pPj0yNTU/MjU1Omk8MD8wOmksaDppPT5pJTM2MCxzOmk9Pmk+PTEwMD8xMDA6aTwwPzA6aSxsOmk9Pmk+PTEwMD8xMDA6aTwwPzA6aSxhOmk9Pmk+PTE/MTppPDA/MDppfSx0b0xpbmVhcjppPT57Y29uc3Qgcz1pLzI1NTtyZXR1cm4gaT4uMDM5Mjg/TWF0aC5wb3coKHMrLjA1NSkvMS4wNTUsMi40KTpzLzEyLjkyfSxodWUycmdiOihpLHMsdSk9Pih1PDAmJih1Kz0xKSx1PjEmJih1LT0xKSx1PDEvNj9pKyhzLWkpKjYqdTp1PDEvMj9zOnU8Mi8zP2krKHMtaSkqKDIvMy11KSo2OmkpLGhzbDJyZ2I6KHtoOmkscyxsOnV9LGQpPT57aWYoIXMpcmV0dXJuIHUqMi41NTtpLz0zNjAscy89MTAwLHUvPTEwMDtjb25zdCBwPXU8LjU/dSooMStzKTp1K3MtdSpzLHY9Mip1LXA7c3dpdGNoKGQpe2Nhc2UiciI6cmV0dXJuIHZYLmh1ZTJyZ2IodixwLGkrMS8zKSoyNTU7Y2FzZSJnIjpyZXR1cm4gdlguaHVlMnJnYih2LHAsaSkqMjU1O2Nhc2UiYiI6cmV0dXJuIHZYLmh1ZTJyZ2IodixwLGktMS8zKSoyNTV9fSxyZ2IyaHNsOih7cjppLGc6cyxiOnV9LGQpPT57aS89MjU1LHMvPTI1NSx1Lz0yNTU7Y29uc3QgcD1NYXRoLm1heChpLHMsdSksdj1NYXRoLm1pbihpLHMsdSksYj0ocCt2KS8yO2lmKGQ9PT0ibCIpcmV0dXJuIGIqMTAwO2lmKHA9PT12KXJldHVybiAwO2NvbnN0IHk9cC12LFQ9Yj4uNT95LygyLXAtdik6eS8ocCt2KTtpZihkPT09InMiKXJldHVybiBUKjEwMDtzd2l0Y2gocCl7Y2FzZSBpOnJldHVybigocy11KS95KyhzPHU/NjowKSkqNjA7Y2FzZSBzOnJldHVybigodS1pKS95KzIpKjYwO2Nhc2UgdTpyZXR1cm4oKGktcykveSs0KSo2MDtkZWZhdWx0OnJldHVybi0xfX19LFdhPXtjaGFubmVsOnZYLGxhbmc6e2NsYW1wOihpLHMsdSk9PnM+dT9NYXRoLm1pbihzLE1hdGgubWF4KHUsaSkpOk1hdGgubWluKHUsTWF0aC5tYXgocyxpKSkscm91bmQ6aT0+TWF0aC5yb3VuZChpKjFlMTApLzFlMTB9LHVuaXQ6e2RlYzJoZXg6aT0+e2NvbnN0IHM9TWF0aC5yb3VuZChpKS50b1N0cmluZygxNik7cmV0dXJuIHMubGVuZ3RoPjE/czpgMCR7c31gfX19LHY5PXt9O2ZvcihsZXQgaT0wO2k8PTI1NTtpKyspdjlbaV09V2EudW5pdC5kZWMyaGV4KGkpO2NvbnN0IE9nPXtBTEw6MCxSR0I6MSxIU0w6Mn07Y2xhc3Mga1B0e2NvbnN0cnVjdG9yKCl7dGhpcy50eXBlPU9nLkFMTH1nZXQoKXtyZXR1cm4gdGhpcy50eXBlfXNldChzKXtpZih0aGlzLnR5cGUmJnRoaXMudHlwZSE9PXMpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2hhbmdlIGJvdGggUkdCIGFuZCBIU0wgY2hhbm5lbHMgYXQgdGhlIHNhbWUgdGltZSIpO3RoaXMudHlwZT1zfXJlc2V0KCl7dGhpcy50eXBlPU9nLkFMTH1pcyhzKXtyZXR1cm4gdGhpcy50eXBlPT09c319Y29uc3QgRVB0PWtQdDtjbGFzcyBUUHR7Y29uc3RydWN0b3Iocyx1KXt0aGlzLmNvbG9yPXUsdGhpcy5jaGFuZ2VkPSExLHRoaXMuZGF0YT1zLHRoaXMudHlwZT1uZXcgRVB0fXNldChzLHUpe3JldHVybiB0aGlzLmNvbG9yPXUsdGhpcy5jaGFuZ2VkPSExLHRoaXMuZGF0YT1zLHRoaXMudHlwZS50eXBlPU9nLkFMTCx0aGlzfV9lbnN1cmVIU0woKXtjb25zdCBzPXRoaXMuZGF0YSx7aDp1LHM6ZCxsOnB9PXM7dT09PXZvaWQgMCYmKHMuaD1XYS5jaGFubmVsLnJnYjJoc2wocywiaCIpKSxkPT09dm9pZCAwJiYocy5zPVdhLmNoYW5uZWwucmdiMmhzbChzLCJzIikpLHA9PT12b2lkIDAmJihzLmw9V2EuY2hhbm5lbC5yZ2IyaHNsKHMsImwiKSl9X2Vuc3VyZVJHQigpe2NvbnN0IHM9dGhpcy5kYXRhLHtyOnUsZzpkLGI6cH09czt1PT09dm9pZCAwJiYocy5yPVdhLmNoYW5uZWwuaHNsMnJnYihzLCJyIikpLGQ9PT12b2lkIDAmJihzLmc9V2EuY2hhbm5lbC5oc2wycmdiKHMsImciKSkscD09PXZvaWQgMCYmKHMuYj1XYS5jaGFubmVsLmhzbDJyZ2IocywiYiIpKX1nZXQgcigpe2NvbnN0IHM9dGhpcy5kYXRhLHU9cy5yO3JldHVybiF0aGlzLnR5cGUuaXMoT2cuSFNMKSYmdSE9PXZvaWQgMD91Oih0aGlzLl9lbnN1cmVIU0woKSxXYS5jaGFubmVsLmhzbDJyZ2IocywiciIpKX1nZXQgZygpe2NvbnN0IHM9dGhpcy5kYXRhLHU9cy5nO3JldHVybiF0aGlzLnR5cGUuaXMoT2cuSFNMKSYmdSE9PXZvaWQgMD91Oih0aGlzLl9lbnN1cmVIU0woKSxXYS5jaGFubmVsLmhzbDJyZ2IocywiZyIpKX1nZXQgYigpe2NvbnN0IHM9dGhpcy5kYXRhLHU9cy5iO3JldHVybiF0aGlzLnR5cGUuaXMoT2cuSFNMKSYmdSE9PXZvaWQgMD91Oih0aGlzLl9lbnN1cmVIU0woKSxXYS5jaGFubmVsLmhzbDJyZ2IocywiYiIpKX1nZXQgaCgpe2NvbnN0IHM9dGhpcy5kYXRhLHU9cy5oO3JldHVybiF0aGlzLnR5cGUuaXMoT2cuUkdCKSYmdSE9PXZvaWQgMD91Oih0aGlzLl9lbnN1cmVSR0IoKSxXYS5jaGFubmVsLnJnYjJoc2wocywiaCIpKX1nZXQgcygpe2NvbnN0IHM9dGhpcy5kYXRhLHU9cy5zO3JldHVybiF0aGlzLnR5cGUuaXMoT2cuUkdCKSYmdSE9PXZvaWQgMD91Oih0aGlzLl9lbnN1cmVSR0IoKSxXYS5jaGFubmVsLnJnYjJoc2wocywicyIpKX1nZXQgbCgpe2NvbnN0IHM9dGhpcy5kYXRhLHU9cy5sO3JldHVybiF0aGlzLnR5cGUuaXMoT2cuUkdCKSYmdSE9PXZvaWQgMD91Oih0aGlzLl9lbnN1cmVSR0IoKSxXYS5jaGFubmVsLnJnYjJoc2wocywibCIpKX1nZXQgYSgpe3JldHVybiB0aGlzLmRhdGEuYX1zZXQgcihzKXt0aGlzLnR5cGUuc2V0KE9nLlJHQiksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5yPXN9c2V0IGcocyl7dGhpcy50eXBlLnNldChPZy5SR0IpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEuZz1zfXNldCBiKHMpe3RoaXMudHlwZS5zZXQoT2cuUkdCKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmI9c31zZXQgaChzKXt0aGlzLnR5cGUuc2V0KE9nLkhTTCksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5oPXN9c2V0IHMocyl7dGhpcy50eXBlLnNldChPZy5IU0wpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEucz1zfXNldCBsKHMpe3RoaXMudHlwZS5zZXQoT2cuSFNMKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmw9c31zZXQgYShzKXt0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmE9c319Y29uc3QgQ1B0PVRQdCx3WD1uZXcgQ1B0KHtyOjAsZzowLGI6MCxhOjB9LCJ0cmFuc3BhcmVudCIpLFRSZT17cmU6L14jKCg/OlthLWYwLTldezJ9KXsyLDR9fFthLWYwLTldezN9KSQvaSxwYXJzZTppPT57aWYoaS5jaGFyQ29kZUF0KDApIT09MzUpcmV0dXJuO2NvbnN0IHM9aS5tYXRjaChUUmUucmUpO2lmKCFzKXJldHVybjtjb25zdCB1PXNbMV0sZD1wYXJzZUludCh1LDE2KSxwPXUubGVuZ3RoLHY9cCU0PT09MCxiPXA+NCx5PWI/MToxNyxUPWI/ODo0LF89dj8wOi0xLEE9Yj8yNTU6MTU7cmV0dXJuIHdYLnNldCh7cjooZD4+VCooXyszKSZBKSp5LGc6KGQ+PlQqKF8rMikmQSkqeSxiOihkPj5UKihfKzEpJkEpKnksYTp2PyhkJkEpKnkvMjU1OjF9LGkpfSxzdHJpbmdpZnk6aT0+e2NvbnN0e3I6cyxnOnUsYjpkLGE6cH09aTtyZXR1cm4gcDwxP2AjJHt2OVtNYXRoLnJvdW5kKHMpXX0ke3Y5W01hdGgucm91bmQodSldfSR7djlbTWF0aC5yb3VuZChkKV19JHt2OVtNYXRoLnJvdW5kKHAqMjU1KV19YDpgIyR7djlbTWF0aC5yb3VuZChzKV19JHt2OVtNYXRoLnJvdW5kKHUpXX0ke3Y5W01hdGgucm91bmQoZCldfWB9fSxWRj1UUmUseVg9e3JlOi9eaHNsYT9cKFxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyg/OmRlZ3xncmFkfHJhZHx0dXJuKT8pXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmUtP1xkKyk/JSlccyo/KD86LHxccylccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZS0/XGQrKT8lKSg/OlxzKj8oPzosfFwvKVxzKj9cKz8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyglKT8pKT9ccyo/XCkkL2ksaHVlUmU6L14oLis/KShkZWd8Z3JhZHxyYWR8dHVybikkL2ksX2h1ZTJkZWc6aT0+e2NvbnN0IHM9aS5tYXRjaCh5WC5odWVSZSk7aWYocyl7Y29uc3RbLHUsZF09cztzd2l0Y2goZCl7Y2FzZSJncmFkIjpyZXR1cm4gV2EuY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQodSkqLjkpO2Nhc2UicmFkIjpyZXR1cm4gV2EuY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQodSkqMTgwL01hdGguUEkpO2Nhc2UidHVybiI6cmV0dXJuIFdhLmNoYW5uZWwuY2xhbXAuaChwYXJzZUZsb2F0KHUpKjM2MCl9fXJldHVybiBXYS5jaGFubmVsLmNsYW1wLmgocGFyc2VGbG9hdChpKSl9LHBhcnNlOmk9Pntjb25zdCBzPWkuY2hhckNvZGVBdCgwKTtpZihzIT09MTA0JiZzIT09NzIpcmV0dXJuO2NvbnN0IHU9aS5tYXRjaCh5WC5yZSk7aWYoIXUpcmV0dXJuO2NvbnN0WyxkLHAsdixiLHldPXU7cmV0dXJuIHdYLnNldCh7aDp5WC5faHVlMmRlZyhkKSxzOldhLmNoYW5uZWwuY2xhbXAucyhwYXJzZUZsb2F0KHApKSxsOldhLmNoYW5uZWwuY2xhbXAubChwYXJzZUZsb2F0KHYpKSxhOmI/V2EuY2hhbm5lbC5jbGFtcC5hKHk/cGFyc2VGbG9hdChiKS8xMDA6cGFyc2VGbG9hdChiKSk6MX0saSl9LHN0cmluZ2lmeTppPT57Y29uc3R7aDpzLHM6dSxsOmQsYTpwfT1pO3JldHVybiBwPDE/YGhzbGEoJHtXYS5sYW5nLnJvdW5kKHMpfSwgJHtXYS5sYW5nLnJvdW5kKHUpfSUsICR7V2EubGFuZy5yb3VuZChkKX0lLCAke3B9KWA6YGhzbCgke1dhLmxhbmcucm91bmQocyl9LCAke1dhLmxhbmcucm91bmQodSl9JSwgJHtXYS5sYW5nLnJvdW5kKGQpfSUpYH19LHhYPXlYLGtYPXtjb2xvcnM6e2FsaWNlYmx1ZToiI2YwZjhmZiIsYW50aXF1ZXdoaXRlOiIjZmFlYmQ3IixhcXVhOiIjMDBmZmZmIixhcXVhbWFyaW5lOiIjN2ZmZmQ0IixhenVyZToiI2YwZmZmZiIsYmVpZ2U6IiNmNWY1ZGMiLGJpc3F1ZToiI2ZmZTRjNCIsYmxhY2s6IiMwMDAwMDAiLGJsYW5jaGVkYWxtb25kOiIjZmZlYmNkIixibHVlOiIjMDAwMGZmIixibHVldmlvbGV0OiIjOGEyYmUyIixicm93bjoiI2E1MmEyYSIsYnVybHl3b29kOiIjZGViODg3IixjYWRldGJsdWU6IiM1ZjllYTAiLGNoYXJ0cmV1c2U6IiM3ZmZmMDAiLGNob2NvbGF0ZToiI2QyNjkxZSIsY29yYWw6IiNmZjdmNTAiLGNvcm5mbG93ZXJibHVlOiIjNjQ5NWVkIixjb3Juc2lsazoiI2ZmZjhkYyIsY3JpbXNvbjoiI2RjMTQzYyIsY3lhbmFxdWE6IiMwMGZmZmYiLGRhcmtibHVlOiIjMDAwMDhiIixkYXJrY3lhbjoiIzAwOGI4YiIsZGFya2dvbGRlbnJvZDoiI2I4ODYwYiIsZGFya2dyYXk6IiNhOWE5YTkiLGRhcmtncmVlbjoiIzAwNjQwMCIsZGFya2dyZXk6IiNhOWE5YTkiLGRhcmtraGFraToiI2JkYjc2YiIsZGFya21hZ2VudGE6IiM4YjAwOGIiLGRhcmtvbGl2ZWdyZWVuOiIjNTU2YjJmIixkYXJrb3JhbmdlOiIjZmY4YzAwIixkYXJrb3JjaGlkOiIjOTkzMmNjIixkYXJrcmVkOiIjOGIwMDAwIixkYXJrc2FsbW9uOiIjZTk5NjdhIixkYXJrc2VhZ3JlZW46IiM4ZmJjOGYiLGRhcmtzbGF0ZWJsdWU6IiM0ODNkOGIiLGRhcmtzbGF0ZWdyYXk6IiMyZjRmNGYiLGRhcmtzbGF0ZWdyZXk6IiMyZjRmNGYiLGRhcmt0dXJxdW9pc2U6IiMwMGNlZDEiLGRhcmt2aW9sZXQ6IiM5NDAwZDMiLGRlZXBwaW5rOiIjZmYxNDkzIixkZWVwc2t5Ymx1ZToiIzAwYmZmZiIsZGltZ3JheToiIzY5Njk2OSIsZGltZ3JleToiIzY5Njk2OSIsZG9kZ2VyYmx1ZToiIzFlOTBmZiIsZmlyZWJyaWNrOiIjYjIyMjIyIixmbG9yYWx3aGl0ZToiI2ZmZmFmMCIsZm9yZXN0Z3JlZW46IiMyMjhiMjIiLGZ1Y2hzaWE6IiNmZjAwZmYiLGdhaW5zYm9ybzoiI2RjZGNkYyIsZ2hvc3R3aGl0ZToiI2Y4ZjhmZiIsZ29sZDoiI2ZmZDcwMCIsZ29sZGVucm9kOiIjZGFhNTIwIixncmF5OiIjODA4MDgwIixncmVlbjoiIzAwODAwMCIsZ3JlZW55ZWxsb3c6IiNhZGZmMmYiLGdyZXk6IiM4MDgwODAiLGhvbmV5ZGV3OiIjZjBmZmYwIixob3RwaW5rOiIjZmY2OWI0IixpbmRpYW5yZWQ6IiNjZDVjNWMiLGluZGlnbzoiIzRiMDA4MiIsaXZvcnk6IiNmZmZmZjAiLGtoYWtpOiIjZjBlNjhjIixsYXZlbmRlcjoiI2U2ZTZmYSIsbGF2ZW5kZXJibHVzaDoiI2ZmZjBmNSIsbGF3bmdyZWVuOiIjN2NmYzAwIixsZW1vbmNoaWZmb246IiNmZmZhY2QiLGxpZ2h0Ymx1ZToiI2FkZDhlNiIsbGlnaHRjb3JhbDoiI2YwODA4MCIsbGlnaHRjeWFuOiIjZTBmZmZmIixsaWdodGdvbGRlbnJvZHllbGxvdzoiI2ZhZmFkMiIsbGlnaHRncmF5OiIjZDNkM2QzIixsaWdodGdyZWVuOiIjOTBlZTkwIixsaWdodGdyZXk6IiNkM2QzZDMiLGxpZ2h0cGluazoiI2ZmYjZjMSIsbGlnaHRzYWxtb246IiNmZmEwN2EiLGxpZ2h0c2VhZ3JlZW46IiMyMGIyYWEiLGxpZ2h0c2t5Ymx1ZToiIzg3Y2VmYSIsbGlnaHRzbGF0ZWdyYXk6IiM3Nzg4OTkiLGxpZ2h0c2xhdGVncmV5OiIjNzc4ODk5IixsaWdodHN0ZWVsYmx1ZToiI2IwYzRkZSIsbGlnaHR5ZWxsb3c6IiNmZmZmZTAiLGxpbWU6IiMwMGZmMDAiLGxpbWVncmVlbjoiIzMyY2QzMiIsbGluZW46IiNmYWYwZTYiLG1hZ2VudGE6IiNmZjAwZmYiLG1hcm9vbjoiIzgwMDAwMCIsbWVkaXVtYXF1YW1hcmluZToiIzY2Y2RhYSIsbWVkaXVtYmx1ZToiIzAwMDBjZCIsbWVkaXVtb3JjaGlkOiIjYmE1NWQzIixtZWRpdW1wdXJwbGU6IiM5MzcwZGIiLG1lZGl1bXNlYWdyZWVuOiIjM2NiMzcxIixtZWRpdW1zbGF0ZWJsdWU6IiM3YjY4ZWUiLG1lZGl1bXNwcmluZ2dyZWVuOiIjMDBmYTlhIixtZWRpdW10dXJxdW9pc2U6IiM0OGQxY2MiLG1lZGl1bXZpb2xldHJlZDoiI2M3MTU4NSIsbWlkbmlnaHRibHVlOiIjMTkxOTcwIixtaW50Y3JlYW06IiNmNWZmZmEiLG1pc3R5cm9zZToiI2ZmZTRlMSIsbW9jY2FzaW46IiNmZmU0YjUiLG5hdmFqb3doaXRlOiIjZmZkZWFkIixuYXZ5OiIjMDAwMDgwIixvbGRsYWNlOiIjZmRmNWU2IixvbGl2ZToiIzgwODAwMCIsb2xpdmVkcmFiOiIjNmI4ZTIzIixvcmFuZ2U6IiNmZmE1MDAiLG9yYW5nZXJlZDoiI2ZmNDUwMCIsb3JjaGlkOiIjZGE3MGQ2IixwYWxlZ29sZGVucm9kOiIjZWVlOGFhIixwYWxlZ3JlZW46IiM5OGZiOTgiLHBhbGV0dXJxdW9pc2U6IiNhZmVlZWUiLHBhbGV2aW9sZXRyZWQ6IiNkYjcwOTMiLHBhcGF5YXdoaXA6IiNmZmVmZDUiLHBlYWNocHVmZjoiI2ZmZGFiOSIscGVydToiI2NkODUzZiIscGluazoiI2ZmYzBjYiIscGx1bToiI2RkYTBkZCIscG93ZGVyYmx1ZToiI2IwZTBlNiIscHVycGxlOiIjODAwMDgwIixyZWJlY2NhcHVycGxlOiIjNjYzMzk5IixyZWQ6IiNmZjAwMDAiLHJvc3licm93bjoiI2JjOGY4ZiIscm95YWxibHVlOiIjNDE2OWUxIixzYWRkbGVicm93bjoiIzhiNDUxMyIsc2FsbW9uOiIjZmE4MDcyIixzYW5keWJyb3duOiIjZjRhNDYwIixzZWFncmVlbjoiIzJlOGI1NyIsc2Vhc2hlbGw6IiNmZmY1ZWUiLHNpZW5uYToiI2EwNTIyZCIsc2lsdmVyOiIjYzBjMGMwIixza3libHVlOiIjODdjZWViIixzbGF0ZWJsdWU6IiM2YTVhY2QiLHNsYXRlZ3JheToiIzcwODA5MCIsc2xhdGVncmV5OiIjNzA4MDkwIixzbm93OiIjZmZmYWZhIixzcHJpbmdncmVlbjoiIzAwZmY3ZiIsdGFuOiIjZDJiNDhjIix0ZWFsOiIjMDA4MDgwIix0aGlzdGxlOiIjZDhiZmQ4Iix0cmFuc3BhcmVudDoiIzAwMDAwMDAwIix0dXJxdW9pc2U6IiM0MGUwZDAiLHZpb2xldDoiI2VlODJlZSIsd2hlYXQ6IiNmNWRlYjMiLHdoaXRlOiIjZmZmZmZmIix3aGl0ZXNtb2tlOiIjZjVmNWY1Iix5ZWxsb3c6IiNmZmZmMDAiLHllbGxvd2dyZWVuOiIjOWFjZDMyIn0scGFyc2U6aT0+e2k9aS50b0xvd2VyQ2FzZSgpO2NvbnN0IHM9a1guY29sb3JzW2ldO2lmKHMpcmV0dXJuIFZGLnBhcnNlKHMpfSxzdHJpbmdpZnk6aT0+e2NvbnN0IHM9VkYuc3RyaW5naWZ5KGkpO2Zvcihjb25zdCB1IGluIGtYLmNvbG9ycylpZihrWC5jb2xvcnNbdV09PT1zKXJldHVybiB1fX0sQ1JlPWtYLFNSZT17cmU6L15yZ2JhP1woXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpKD86XHMqPyg/Oix8XC8pXHMqP1wrPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpKT9ccyo/XCkkL2kscGFyc2U6aT0+e2NvbnN0IHM9aS5jaGFyQ29kZUF0KDApO2lmKHMhPT0xMTQmJnMhPT04MilyZXR1cm47Y29uc3QgdT1pLm1hdGNoKFNSZS5yZSk7aWYoIXUpcmV0dXJuO2NvbnN0WyxkLHAsdixiLHksVCxfLEFdPXU7cmV0dXJuIHdYLnNldCh7cjpXYS5jaGFubmVsLmNsYW1wLnIocD9wYXJzZUZsb2F0KGQpKjIuNTU6cGFyc2VGbG9hdChkKSksZzpXYS5jaGFubmVsLmNsYW1wLmcoYj9wYXJzZUZsb2F0KHYpKjIuNTU6cGFyc2VGbG9hdCh2KSksYjpXYS5jaGFubmVsLmNsYW1wLmIoVD9wYXJzZUZsb2F0KHkpKjIuNTU6cGFyc2VGbG9hdCh5KSksYTpfP1dhLmNoYW5uZWwuY2xhbXAuYShBP3BhcnNlRmxvYXQoXykvMTAwOnBhcnNlRmxvYXQoXykpOjF9LGkpfSxzdHJpbmdpZnk6aT0+e2NvbnN0e3I6cyxnOnUsYjpkLGE6cH09aTtyZXR1cm4gcDwxP2ByZ2JhKCR7V2EubGFuZy5yb3VuZChzKX0sICR7V2EubGFuZy5yb3VuZCh1KX0sICR7V2EubGFuZy5yb3VuZChkKX0sICR7V2EubGFuZy5yb3VuZChwKX0pYDpgcmdiKCR7V2EubGFuZy5yb3VuZChzKX0sICR7V2EubGFuZy5yb3VuZCh1KX0sICR7V2EubGFuZy5yb3VuZChkKX0pYH19LEVYPVNSZSxPMz17Zm9ybWF0OntrZXl3b3JkOkNSZSxoZXg6VkYscmdiOkVYLHJnYmE6RVgsaHNsOnhYLGhzbGE6eFh9LHBhcnNlOmk9PntpZih0eXBlb2YgaSE9InN0cmluZyIpcmV0dXJuIGk7Y29uc3Qgcz1WRi5wYXJzZShpKXx8RVgucGFyc2UoaSl8fHhYLnBhcnNlKGkpfHxDUmUucGFyc2UoaSk7aWYocylyZXR1cm4gczt0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGNvbG9yIGZvcm1hdDogIiR7aX0iYCl9LHN0cmluZ2lmeTppPT4haS5jaGFuZ2VkJiZpLmNvbG9yP2kuY29sb3I6aS50eXBlLmlzKE9nLkhTTCl8fGkuZGF0YS5yPT09dm9pZCAwP3hYLnN0cmluZ2lmeShpKTppLmE8MXx8IU51bWJlci5pc0ludGVnZXIoaS5yKXx8IU51bWJlci5pc0ludGVnZXIoaS5nKXx8IU51bWJlci5pc0ludGVnZXIoaS5iKT9FWC5zdHJpbmdpZnkoaSk6VkYuc3RyaW5naWZ5KGkpfSxfUmU9KGkscyk9Pntjb25zdCB1PU8zLnBhcnNlKGkpO2Zvcihjb25zdCBkIGluIHMpdVtkXT1XYS5jaGFubmVsLmNsYW1wW2RdKHNbZF0pO3JldHVybiBPMy5zdHJpbmdpZnkodSl9LFNDPShpLHMsdT0wLGQ9MSk9PntpZih0eXBlb2YgaSE9Im51bWJlciIpcmV0dXJuIF9SZShpLHthOnN9KTtjb25zdCBwPXdYLnNldCh7cjpXYS5jaGFubmVsLmNsYW1wLnIoaSksZzpXYS5jaGFubmVsLmNsYW1wLmcocyksYjpXYS5jaGFubmVsLmNsYW1wLmIodSksYTpXYS5jaGFubmVsLmNsYW1wLmEoZCl9KTtyZXR1cm4gTzMuc3RyaW5naWZ5KHApfSxBUmU9KGkscyk9PldhLmxhbmcucm91bmQoTzMucGFyc2UoaSlbc10pLFNQdD1pPT57Y29uc3R7cjpzLGc6dSxiOmR9PU8zLnBhcnNlKGkpLHA9LjIxMjYqV2EuY2hhbm5lbC50b0xpbmVhcihzKSsuNzE1MipXYS5jaGFubmVsLnRvTGluZWFyKHUpKy4wNzIyKldhLmNoYW5uZWwudG9MaW5lYXIoZCk7cmV0dXJuIFdhLmxhbmcucm91bmQocCl9LF9QdD1pPT5TUHQoaSk+PS41LF9DPWk9PiFfUHQoaSksTFJlPShpLHMsdSk9Pntjb25zdCBkPU8zLnBhcnNlKGkpLHA9ZFtzXSx2PVdhLmNoYW5uZWwuY2xhbXBbc10ocCt1KTtyZXR1cm4gcCE9PXYmJihkW3NdPXYpLE8zLnN0cmluZ2lmeShkKX0sR3M9KGkscyk9PkxSZShpLCJsIixzKSxmYT0oaSxzKT0+TFJlKGksImwiLC1zKSxJbj0oaSxzKT0+e2NvbnN0IHU9TzMucGFyc2UoaSksZD17fTtmb3IoY29uc3QgcCBpbiBzKXNbcF0mJihkW3BdPXVbcF0rc1twXSk7cmV0dXJuIF9SZShpLGQpfSxBUHQ9KGkscyx1PTUwKT0+e2NvbnN0e3I6ZCxnOnAsYjp2LGE6Yn09TzMucGFyc2UoaSkse3I6eSxnOlQsYjpfLGE6QX09TzMucGFyc2UocyksUD11LzEwMCxSPVAqMi0xLEY9Yi1BLEs9KChSKkY9PT0tMT9SOihSK0YpLygxK1IqRikpKzEpLzIsZWU9MS1LLGllPWQqSyt5KmVlLG9lPXAqSytUKmVlLHBlPXYqSytfKmVlLGJlPWIqUCtBKigxLVApO3JldHVybiBTQyhpZSxvZSxwZSxiZSl9LFZpPShpLHM9MTAwKT0+e2NvbnN0IHU9TzMucGFyc2UoaSk7cmV0dXJuIHUucj0yNTUtdS5yLHUuZz0yNTUtdS5nLHUuYj0yNTUtdS5iLEFQdCh1LGkscyl9LFRwPShpLHMpPT5zP0luKGkse3M6LTQwLGw6MTB9KTpJbihpLHtzOi00MCxsOi0xMH0pLFRYPSIjZmZmZmZmIixDWD0iI2YyZjJmMiI7bGV0IExQdD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuYmFja2dyb3VuZD0iI2Y0ZjRmNCIsdGhpcy5wcmltYXJ5Q29sb3I9IiNmZmY0ZGQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9IiMzMzMiLHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ9MTIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgifXVwZGF0ZUNvbG9ycygpe3ZhciB1LGQscCx2LGIseSxULF8sQSxQLFI7aWYodGhpcy5wcmltYXJ5VGV4dENvbG9yPXRoaXMucHJpbWFyeVRleHRDb2xvcnx8KHRoaXMuZGFya01vZGU/IiNlZWUiOiIjMzMzIiksdGhpcy5zZWNvbmRhcnlDb2xvcj10aGlzLnNlY29uZGFyeUNvbG9yfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDotMTIwfSksdGhpcy50ZXJ0aWFyeUNvbG9yPXRoaXMudGVydGlhcnlDb2xvcnx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTgwLGw6NX0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yfHxUcCh0aGlzLnByaW1hcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPXRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3J8fFRwKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPXRoaXMudGVydGlhcnlCb3JkZXJDb2xvcnx8VHAodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMubm90ZUJvcmRlckNvbG9yPXRoaXMubm90ZUJvcmRlckNvbG9yfHxUcCh0aGlzLm5vdGVCa2dDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLm5vdGVCa2dDb2xvcj10aGlzLm5vdGVCa2dDb2xvcnx8IiNmZmY1YWQiLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLm5vdGVUZXh0Q29sb3J8fCIjMzMzIix0aGlzLnNlY29uZGFyeVRleHRDb2xvcj10aGlzLnNlY29uZGFyeVRleHRDb2xvcnx8VmkodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj10aGlzLnRlcnRpYXJ5VGV4dENvbG9yfHxWaSh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPXRoaXMubGluZUNvbG9yfHxWaSh0aGlzLmJhY2tncm91bmQpLHRoaXMuYXJyb3doZWFkQ29sb3I9dGhpcy5hcnJvd2hlYWRDb2xvcnx8VmkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj10aGlzLnRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuYm9yZGVyMj10aGlzLmJvcmRlcjJ8fHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcix0aGlzLm5vZGVCa2c9dGhpcy5ub2RlQmtnfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLm1haW5Ca2c9dGhpcy5tYWluQmtnfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLm5vZGVCb3JkZXI9dGhpcy5ub2RlQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLmNsdXN0ZXJCa2c9dGhpcy5jbHVzdGVyQmtnfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuY2x1c3RlckJvcmRlcnx8dGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmRlZmF1bHRMaW5rQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudGl0bGVDb2xvcj10aGlzLnRpdGxlQ29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPXRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZHx8KHRoaXMuZGFya01vZGU/ZmEodGhpcy5zZWNvbmRhcnlDb2xvciwzMCk6dGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy5ub2RlVGV4dENvbG9yPXRoaXMubm9kZVRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuYWN0b3JCb3JkZXI9dGhpcy5hY3RvckJvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5hY3RvckJrZz10aGlzLmFjdG9yQmtnfHx0aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLmFjdG9yTGluZUNvbG9yfHwiZ3JleSIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMubGFiZWxCb3hCa2dDb2xvcnx8dGhpcy5hY3RvckJrZyx0aGlzLnNpZ25hbENvbG9yPXRoaXMuc2lnbmFsQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMuc2lnbmFsVGV4dENvbG9yPXRoaXMuc2lnbmFsVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5sYWJlbEJveEJvcmRlckNvbG9yfHx0aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5sYWJlbFRleHRDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5sb29wVGV4dENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPXRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yfHxmYSh0aGlzLnNlY29uZGFyeUNvbG9yLDEwKSx0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj10aGlzLmFjdGl2YXRpb25Ca2dDb2xvcnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3I9dGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yfHxWaSh0aGlzLmxpbmVDb2xvciksdGhpcy5zZWN0aW9uQmtnQ29sb3I9dGhpcy5zZWN0aW9uQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj10aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcnx8IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj10aGlzLnNlY3Rpb25Ca2dDb2xvcnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9dGhpcy5zZWN0aW9uQmtnQ29sb3IyfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmV4Y2x1ZGVCa2dDb2xvcj10aGlzLmV4Y2x1ZGVCa2dDb2xvcnx8IiNlZWVlZWUiLHRoaXMudGFza0JvcmRlckNvbG9yPXRoaXMudGFza0JvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhc2tCa2dDb2xvcj10aGlzLnRhc2tCa2dDb2xvcnx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9dGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPXRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yfHxHcyh0aGlzLnByaW1hcnlDb2xvciwyMyksdGhpcy5ncmlkQ29sb3I9dGhpcy5ncmlkQ29sb3J8fCJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj10aGlzLmRvbmVUYXNrQmtnQ29sb3J8fCJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj10aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3J8fCJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj10aGlzLmNyaXRCb3JkZXJDb2xvcnx8IiNmZjg4ODgiLHRoaXMuY3JpdEJrZ0NvbG9yPXRoaXMuY3JpdEJrZ0NvbG9yfHwicmVkIix0aGlzLnRvZGF5TGluZUNvbG9yPXRoaXMudG9kYXlMaW5lQ29sb3J8fCJyZWQiLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj10aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3J8fCIjMDAzMTYzIix0aGlzLnBlcnNvbkJvcmRlcj10aGlzLnBlcnNvbkJvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5wZXJzb25Ca2c9dGhpcy5wZXJzb25Ca2d8fHRoaXMubWFpbkJrZyx0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMubm9kZUJvcmRlcix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuY1NjYWxlMD10aGlzLmNTY2FsZTB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuY1NjYWxlMT10aGlzLmNTY2FsZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jU2NhbGUyPXRoaXMuY1NjYWxlMnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY1NjYWxlMz10aGlzLmNTY2FsZTN8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwfSksdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmNTY2FsZTU9dGhpcy5jU2NhbGU1fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDo5MH0pLHRoaXMuY1NjYWxlNj10aGlzLmNTY2FsZTZ8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuY1NjYWxlNz10aGlzLmNTY2FsZTd8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjE1MH0pLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjIxMCxsOjE1MH0pLHRoaXMuY1NjYWxlOT10aGlzLmNTY2FsZTl8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjI3MH0pLHRoaXMuY1NjYWxlMTA9dGhpcy5jU2NhbGUxMHx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MzAwfSksdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDozMzB9KSx0aGlzLmRhcmtNb2RlKWZvcihsZXQgRj0wO0Y8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtGKyspdGhpc1siY1NjYWxlIitGXT1mYSh0aGlzWyJjU2NhbGUiK0ZdLDc1KTtlbHNlIGZvcihsZXQgRj0wO0Y8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtGKyspdGhpc1siY1NjYWxlIitGXT1mYSh0aGlzWyJjU2NhbGUiK0ZdLDI1KTtmb3IobGV0IEY9MDtGPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7RisrKXRoaXNbImNTY2FsZUludiIrRl09dGhpc1siY1NjYWxlSW52IitGXXx8VmkodGhpc1siY1NjYWxlIitGXSk7Zm9yKGxldCBGPTA7Rjx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO0YrKyl0aGlzLmRhcmtNb2RlP3RoaXNbImNTY2FsZVBlZXIiK0ZdPXRoaXNbImNTY2FsZVBlZXIiK0ZdfHxHcyh0aGlzWyJjU2NhbGUiK0ZdLDEwKTp0aGlzWyJjU2NhbGVQZWVyIitGXT10aGlzWyJjU2NhbGVQZWVyIitGXXx8ZmEodGhpc1siY1NjYWxlIitGXSwxMCk7dGhpcy5zY2FsZUxhYmVsQ29sb3I9dGhpcy5zY2FsZUxhYmVsQ29sb3J8fHRoaXMubGFiZWxUZXh0Q29sb3I7Zm9yKGxldCBGPTA7Rjx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO0YrKyl0aGlzWyJjU2NhbGVMYWJlbCIrRl09dGhpc1siY1NjYWxlTGFiZWwiK0ZdfHx0aGlzLnNjYWxlTGFiZWxDb2xvcjtjb25zdCBzPXRoaXMuZGFya01vZGU/LTQ6LTE7Zm9yKGxldCBGPTA7Rjw1O0YrKyl0aGlzWyJzdXJmYWNlIitGXT10aGlzWyJzdXJmYWNlIitGXXx8SW4odGhpcy5tYWluQmtnLHtoOjE4MCxzOi0xNSxsOnMqKDUrRiozKX0pLHRoaXNbInN1cmZhY2VQZWVyIitGXT10aGlzWyJzdXJmYWNlUGVlciIrRl18fEluKHRoaXMubWFpbkJrZyx7aDoxODAsczotMTUsbDpzKig4K0YqMyl9KTt0aGlzLmNsYXNzVGV4dD10aGlzLmNsYXNzVGV4dHx8dGhpcy50ZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5maWxsVHlwZTB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZmlsbFR5cGUxPXRoaXMuZmlsbFR5cGUxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPXRoaXMuZmlsbFR5cGUyfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGUzPXRoaXMuZmlsbFR5cGUzfHxJbih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9dGhpcy5maWxsVHlwZTR8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PXRoaXMuZmlsbFR5cGU1fHxJbih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU2PXRoaXMuZmlsbFR5cGU2fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz10aGlzLmZpbGxUeXBlN3x8SW4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KSx0aGlzLnBpZTE9dGhpcy5waWUxfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnBpZTI9dGhpcy5waWUyfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMucGllMz10aGlzLnBpZTN8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLnBpZTQ9dGhpcy5waWU0fHxJbih0aGlzLnByaW1hcnlDb2xvcix7bDotMTB9KSx0aGlzLnBpZTU9dGhpcy5waWU1fHxJbih0aGlzLnNlY29uZGFyeUNvbG9yLHtsOi0xMH0pLHRoaXMucGllNj10aGlzLnBpZTZ8fEluKHRoaXMudGVydGlhcnlDb2xvcix7bDotMTB9KSx0aGlzLnBpZTc9dGhpcy5waWU3fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi0xMH0pLHRoaXMucGllOD10aGlzLnBpZTh8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MCxsOi0xMH0pLHRoaXMucGllOT10aGlzLnBpZTl8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMCxsOjB9KSx0aGlzLnBpZTEwPXRoaXMucGllMTB8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTIwfSksdGhpcy5waWUxMT10aGlzLnBpZTExfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotMjB9KSx0aGlzLnBpZTEyPXRoaXMucGllMTJ8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMCxsOi0xMH0pLHRoaXMucGllVGl0bGVUZXh0U2l6ZT10aGlzLnBpZVRpdGxlVGV4dFNpemV8fCIyNXB4Iix0aGlzLnBpZVRpdGxlVGV4dENvbG9yPXRoaXMucGllVGl0bGVUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTZWN0aW9uVGV4dFNpemU9dGhpcy5waWVTZWN0aW9uVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3I9dGhpcy5waWVTZWN0aW9uVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnBpZUxlZ2VuZFRleHRTaXplPXRoaXMucGllTGVnZW5kVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZUxlZ2VuZFRleHRDb2xvcj10aGlzLnBpZUxlZ2VuZFRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVN0cm9rZUNvbG9yPXRoaXMucGllU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVTdHJva2VXaWR0aD10aGlzLnBpZVN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGg9dGhpcy5waWVPdXRlclN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3I9dGhpcy5waWVPdXRlclN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMucXVhZHJhbnQxRmlsbD10aGlzLnF1YWRyYW50MUZpbGx8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucXVhZHJhbnQyRmlsbD10aGlzLnF1YWRyYW50MkZpbGx8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtyOjUsZzo1LGI6NX0pLHRoaXMucXVhZHJhbnQzRmlsbD10aGlzLnF1YWRyYW50M0ZpbGx8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtyOjEwLGc6MTAsYjoxMH0pLHRoaXMucXVhZHJhbnQ0RmlsbD10aGlzLnF1YWRyYW50NEZpbGx8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtyOjE1LGc6MTUsYjoxNX0pLHRoaXMucXVhZHJhbnQxVGV4dEZpbGw9dGhpcy5xdWFkcmFudDFUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnQyVGV4dEZpbGw9dGhpcy5xdWFkcmFudDJUZXh0RmlsbHx8SW4odGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi01LGc6LTUsYjotNX0pLHRoaXMucXVhZHJhbnQzVGV4dEZpbGw9dGhpcy5xdWFkcmFudDNUZXh0RmlsbHx8SW4odGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xMCxnOi0xMCxiOi0xMH0pLHRoaXMucXVhZHJhbnQ0VGV4dEZpbGw9dGhpcy5xdWFkcmFudDRUZXh0RmlsbHx8SW4odGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xNSxnOi0xNSxiOi0xNX0pLHRoaXMucXVhZHJhbnRQb2ludEZpbGw9dGhpcy5xdWFkcmFudFBvaW50RmlsbHx8X0ModGhpcy5xdWFkcmFudDFGaWxsKT9Hcyh0aGlzLnF1YWRyYW50MUZpbGwpOmZhKHRoaXMucXVhZHJhbnQxRmlsbCksdGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGw9dGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRUaXRsZUZpbGw9dGhpcy5xdWFkcmFudFRpdGxlRmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMueHlDaGFydD17YmFja2dyb3VuZENvbG9yOigodT10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDp1LmJhY2tncm91bmRDb2xvcil8fHRoaXMuYmFja2dyb3VuZCx0aXRsZUNvbG9yOigoZD10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpkLnRpdGxlQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaXRsZUNvbG9yOigocD10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpwLnhBeGlzVGl0bGVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xhYmVsQ29sb3I6KCh2PXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOnYueEF4aXNMYWJlbENvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGlja0NvbG9yOigoYj10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpiLnhBeGlzVGlja0NvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGluZUNvbG9yOigoeT10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDp5LnhBeGlzTGluZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzVGl0bGVDb2xvcjooKFQ9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6VC55QXhpc1RpdGxlQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMYWJlbENvbG9yOigoXz10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpfLnlBeGlzTGFiZWxDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpY2tDb2xvcjooKEE9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6QS55QXhpc1RpY2tDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xpbmVDb2xvcjooKFA9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6UC55QXhpc0xpbmVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcixwbG90Q29sb3JQYWxldHRlOigoUj10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpSLnBsb3RDb2xvclBhbGV0dGUpfHwiI0ZGRjRERCwjRkZEOEIxLCNGRkEwN0EsI0VDRUZGMSwjRDZEQkRGLCNDM0UwQTgsI0ZGQjZBNCwjRkZENzRELCM3MzhGQTcsI0ZGRkZGMCJ9LHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8IjEiLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8KHRoaXMuZGFya01vZGU/ZmEodGhpcy5zZWNvbmRhcnlDb2xvciwzMCk6dGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3I9dGhpcy5yZWxhdGlvbkxhYmVsQ29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5naXQwPXRoaXMuZ2l0MHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5naXQxPXRoaXMuZ2l0MXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmdpdDI9dGhpcy5naXQyfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5naXQzPXRoaXMuZ2l0M3x8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTMwfSksdGhpcy5naXQ0PXRoaXMuZ2l0NHx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwfSksdGhpcy5naXQ1PXRoaXMuZ2l0NXx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTkwfSksdGhpcy5naXQ2PXRoaXMuZ2l0Nnx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmdpdDc9dGhpcy5naXQ3fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmRhcmtNb2RlPyh0aGlzLmdpdDA9R3ModGhpcy5naXQwLDI1KSx0aGlzLmdpdDE9R3ModGhpcy5naXQxLDI1KSx0aGlzLmdpdDI9R3ModGhpcy5naXQyLDI1KSx0aGlzLmdpdDM9R3ModGhpcy5naXQzLDI1KSx0aGlzLmdpdDQ9R3ModGhpcy5naXQ0LDI1KSx0aGlzLmdpdDU9R3ModGhpcy5naXQ1LDI1KSx0aGlzLmdpdDY9R3ModGhpcy5naXQ2LDI1KSx0aGlzLmdpdDc9R3ModGhpcy5naXQ3LDI1KSk6KHRoaXMuZ2l0MD1mYSh0aGlzLmdpdDAsMjUpLHRoaXMuZ2l0MT1mYSh0aGlzLmdpdDEsMjUpLHRoaXMuZ2l0Mj1mYSh0aGlzLmdpdDIsMjUpLHRoaXMuZ2l0Mz1mYSh0aGlzLmdpdDMsMjUpLHRoaXMuZ2l0ND1mYSh0aGlzLmdpdDQsMjUpLHRoaXMuZ2l0NT1mYSh0aGlzLmdpdDUsMjUpLHRoaXMuZ2l0Nj1mYSh0aGlzLmdpdDYsMjUpLHRoaXMuZ2l0Nz1mYSh0aGlzLmdpdDcsMjUpKSx0aGlzLmdpdEludjA9dGhpcy5naXRJbnYwfHxWaSh0aGlzLmdpdDApLHRoaXMuZ2l0SW52MT10aGlzLmdpdEludjF8fFZpKHRoaXMuZ2l0MSksdGhpcy5naXRJbnYyPXRoaXMuZ2l0SW52Mnx8VmkodGhpcy5naXQyKSx0aGlzLmdpdEludjM9dGhpcy5naXRJbnYzfHxWaSh0aGlzLmdpdDMpLHRoaXMuZ2l0SW52ND10aGlzLmdpdEludjR8fFZpKHRoaXMuZ2l0NCksdGhpcy5naXRJbnY1PXRoaXMuZ2l0SW52NXx8VmkodGhpcy5naXQ1KSx0aGlzLmdpdEludjY9dGhpcy5naXRJbnY2fHxWaSh0aGlzLmdpdDYpLHRoaXMuZ2l0SW52Nz10aGlzLmdpdEludjd8fFZpKHRoaXMuZ2l0NyksdGhpcy5icmFuY2hMYWJlbENvbG9yPXRoaXMuYnJhbmNoTGFiZWxDb2xvcnx8KHRoaXMuZGFya01vZGU/ImJsYWNrIjp0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmdpdEJyYW5jaExhYmVsMD10aGlzLmdpdEJyYW5jaExhYmVsMHx8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwxPXRoaXMuZ2l0QnJhbmNoTGFiZWwxfHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDI9dGhpcy5naXRCcmFuY2hMYWJlbDJ8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMz10aGlzLmdpdEJyYW5jaExhYmVsM3x8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw0PXRoaXMuZ2l0QnJhbmNoTGFiZWw0fHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDU9dGhpcy5naXRCcmFuY2hMYWJlbDV8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNj10aGlzLmdpdEJyYW5jaExhYmVsNnx8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw3PXRoaXMuZ2l0QnJhbmNoTGFiZWw3fHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy50YWdMYWJlbENvbG9yPXRoaXMudGFnTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kPXRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhZ0xhYmVsQm9yZGVyPXRoaXMudGFnQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhZ0xhYmVsRm9udFNpemU9dGhpcy50YWdMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5jb21taXRMYWJlbENvbG9yPXRoaXMuY29tbWl0TGFiZWxDb2xvcnx8dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQ9dGhpcy5jb21taXRMYWJlbEJhY2tncm91bmR8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jb21taXRMYWJlbEZvbnRTaXplPXRoaXMuY29tbWl0TGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkfHxUWCx0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW49dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVufHxDWH1jYWxjdWxhdGUocyl7aWYodHlwZW9mIHMhPSJvYmplY3QiKXt0aGlzLnVwZGF0ZUNvbG9ycygpO3JldHVybn1jb25zdCB1PU9iamVjdC5rZXlzKHMpO3UuZm9yRWFjaChkPT57dGhpc1tkXT1zW2RdfSksdGhpcy51cGRhdGVDb2xvcnMoKSx1LmZvckVhY2goZD0+e3RoaXNbZF09c1tkXX0pfX07Y29uc3QgTVB0PWk9Pntjb25zdCBzPW5ldyBMUHQ7cmV0dXJuIHMuY2FsY3VsYXRlKGkpLHN9O2xldCBEUHQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmJhY2tncm91bmQ9IiMzMzMiLHRoaXMucHJpbWFyeUNvbG9yPSIjMWYyMDIwIix0aGlzLnNlY29uZGFyeUNvbG9yPUdzKHRoaXMucHJpbWFyeUNvbG9yLDE2KSx0aGlzLnRlcnRpYXJ5Q29sb3I9SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTE2MH0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPVZpKHRoaXMuYmFja2dyb3VuZCksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1UcCh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj1UcCh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPVZpKHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj1WaSh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPVZpKHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9VmkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj1WaSh0aGlzLmJhY2tncm91bmQpLHRoaXMubWFpbkJrZz0iIzFmMjAyMCIsdGhpcy5zZWNvbmRCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubWFpbkNvbnRyYXN0Q29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kYXJrVGV4dENvbG9yPUdzKFZpKCIjMzIzRDQ3IiksMTApLHRoaXMubGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmJvcmRlcjE9IiM4MUIxREIiLHRoaXMuYm9yZGVyMj1TQygyNTUsMjU1LDI1NSwuMjUpLHRoaXMuYXJyb3doZWFkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLmxhYmVsQmFja2dyb3VuZD0iIzE4MTgxOCIsdGhpcy50ZXh0Q29sb3I9IiNjY2MiLHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ9MTIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iI0Y5RkZGRSIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yTGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJibGFjayIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9ZmEoIiNFQUU4RDkiLDMwKSx0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSIjRUFFOEQ5Iix0aGlzLmV4Y2x1ZGVCa2dDb2xvcj1mYSh0aGlzLnNlY3Rpb25Ca2dDb2xvciwxMCksdGhpcy50YXNrQm9yZGVyQ29sb3I9U0MoMjU1LDI1NSwyNTUsNzApLHRoaXMudGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9IiMwMDMxNjMiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPVNDKDI1NSwyNTUsMjU1LDUwKSx0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iIzgxQjFEQiIsdGhpcy5ncmlkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iI0U4MzczNyIsdGhpcy5jcml0QmtnQ29sb3I9IiNFODM3MzciLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9IiNEQjU3NTciLHRoaXMucGVyc29uQm9yZGVyPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucGVyc29uQmtnPXRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZXJyb3JCa2dDb2xvcj0iI2E0NDE0MSIsdGhpcy5lcnJvclRleHRDb2xvcj0iI2RkZCJ9dXBkYXRlQ29sb3JzKCl7dmFyIHMsdSxkLHAsdixiLHksVCxfLEEsUDt0aGlzLnNlY29uZEJrZz1Hcyh0aGlzLm1haW5Ca2csMTYpLHRoaXMubGluZUNvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5hcnJvd2hlYWRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPUdzKHRoaXMubGFiZWxCYWNrZ3JvdW5kLDI1KSx0aGlzLmFjdG9yQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmFjdG9yVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmFjdG9yQmtnLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yLHRoaXMubm90ZUJrZ0NvbG9yPXRoaXMuc2Vjb25kQmtnLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLnNlY29uZGFyeVRleHRDb2xvcix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj10aGlzLmJvcmRlcjEsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9dGhpcy5zZWNvbmRCa2csdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9dGhpcy5iYWNrZ3JvdW5kLHRoaXMudGFza0JrZ0NvbG9yPUdzKHRoaXMubWFpbkJrZywyMyksdGhpcy50YXNrVGV4dENvbG9yPXRoaXMuZGFya1RleHRDb2xvcix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy5ncmlkQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPXRoaXMuZGFya1RleHRDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiIzU1NSIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9IiNmNGY0ZjQiLHRoaXMuZXJyb3JCa2dDb2xvcj10aGlzLmVycm9yQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmVycm9yVGV4dENvbG9yPXRoaXMuZXJyb3JUZXh0Q29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj1Jbih0aGlzLnByaW1hcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGUzPUluKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND1Jbih0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT1Jbih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU2PUluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PUluKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5jU2NhbGUxPXRoaXMuY1NjYWxlMXx8IiMwYjAwMDAiLHRoaXMuY1NjYWxlMj10aGlzLmNTY2FsZTJ8fCIjNGQxMDM3Iix0aGlzLmNTY2FsZTM9dGhpcy5jU2NhbGUzfHwiIzNmNTI1OCIsdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8IiM0ZjJmMWIiLHRoaXMuY1NjYWxlNT10aGlzLmNTY2FsZTV8fCIjNmUwYTBhIix0aGlzLmNTY2FsZTY9dGhpcy5jU2NhbGU2fHwiIzNiMDA0OCIsdGhpcy5jU2NhbGU3PXRoaXMuY1NjYWxlN3x8IiM5OTVhMDEiLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fCIjMTU0NzA2Iix0aGlzLmNTY2FsZTk9dGhpcy5jU2NhbGU5fHwiIzE2MTcyMiIsdGhpcy5jU2NhbGUxMD10aGlzLmNTY2FsZTEwfHwiIzAwMjk2ZiIsdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHwiIzAxNjI5YyIsdGhpcy5jU2NhbGUxMj10aGlzLmNTY2FsZTEyfHwiIzAxMDAyOSIsdGhpcy5jU2NhbGUwPXRoaXMuY1NjYWxlMHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5jU2NhbGUxPXRoaXMuY1NjYWxlMXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNTY2FsZTI9dGhpcy5jU2NhbGUyfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jU2NhbGUzPXRoaXMuY1NjYWxlM3x8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MzB9KSx0aGlzLmNTY2FsZTQ9dGhpcy5jU2NhbGU0fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuY1NjYWxlNT10aGlzLmNTY2FsZTV8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjkwfSksdGhpcy5jU2NhbGU2PXRoaXMuY1NjYWxlNnx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5jU2NhbGU3PXRoaXMuY1NjYWxlN3x8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTUwfSksdGhpcy5jU2NhbGU4PXRoaXMuY1NjYWxlOHx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MjEwfSksdGhpcy5jU2NhbGU5PXRoaXMuY1NjYWxlOXx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MjcwfSksdGhpcy5jU2NhbGUxMD10aGlzLmNTY2FsZTEwfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDozMDB9KSx0aGlzLmNTY2FsZTExPXRoaXMuY1NjYWxlMTF8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMzMH0pO2ZvcihsZXQgUj0wO1I8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtSKyspdGhpc1siY1NjYWxlSW52IitSXT10aGlzWyJjU2NhbGVJbnYiK1JdfHxWaSh0aGlzWyJjU2NhbGUiK1JdKTtmb3IobGV0IFI9MDtSPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7UisrKXRoaXNbImNTY2FsZVBlZXIiK1JdPXRoaXNbImNTY2FsZVBlZXIiK1JdfHxHcyh0aGlzWyJjU2NhbGUiK1JdLDEwKTtmb3IobGV0IFI9MDtSPDU7UisrKXRoaXNbInN1cmZhY2UiK1JdPXRoaXNbInN1cmZhY2UiK1JdfHxJbih0aGlzLm1haW5Ca2cse2g6MzAsczotMzAsbDotKC0xMCtSKjQpfSksdGhpc1sic3VyZmFjZVBlZXIiK1JdPXRoaXNbInN1cmZhY2VQZWVyIitSXXx8SW4odGhpcy5tYWluQmtnLHtoOjMwLHM6LTMwLGw6LSgtNytSKjQpfSk7dGhpcy5zY2FsZUxhYmVsQ29sb3I9dGhpcy5zY2FsZUxhYmVsQ29sb3J8fCh0aGlzLmRhcmtNb2RlPyJibGFjayI6dGhpcy5sYWJlbFRleHRDb2xvcik7Zm9yKGxldCBSPTA7Ujx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO1IrKyl0aGlzWyJjU2NhbGVMYWJlbCIrUl09dGhpc1siY1NjYWxlTGFiZWwiK1JdfHx0aGlzLnNjYWxlTGFiZWxDb2xvcjtmb3IobGV0IFI9MDtSPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7UisrKXRoaXNbInBpZSIrUl09dGhpc1siY1NjYWxlIitSXTt0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHxJbih0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHxJbih0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHxJbih0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fEluKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fEluKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fEluKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fF9DKHRoaXMucXVhZHJhbnQxRmlsbCk/R3ModGhpcy5xdWFkcmFudDFGaWxsKTpmYSh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnh5Q2hhcnQ9e2JhY2tncm91bmRDb2xvcjooKHM9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6cy5iYWNrZ3JvdW5kQ29sb3IpfHx0aGlzLmJhY2tncm91bmQsdGl0bGVDb2xvcjooKHU9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6dS50aXRsZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGl0bGVDb2xvcjooKGQ9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6ZC54QXhpc1RpdGxlQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMYWJlbENvbG9yOigocD10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpwLnhBeGlzTGFiZWxDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpY2tDb2xvcjooKHY9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6di54QXhpc1RpY2tDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xpbmVDb2xvcjooKGI9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6Yi54QXhpc0xpbmVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpdGxlQ29sb3I6KCh5PXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOnkueUF4aXNUaXRsZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGFiZWxDb2xvcjooKFQ9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6VC55QXhpc0xhYmVsQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaWNrQ29sb3I6KChfPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOl8ueUF4aXNUaWNrQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMaW5lQ29sb3I6KChBPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOkEueUF4aXNMaW5lQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IscGxvdENvbG9yUGFsZXR0ZTooKFA9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6UC5wbG90Q29sb3JQYWxldHRlKXx8IiMzNDk4ZGIsIzJlY2M3MSwjZTc0YzNjLCNmMWM0MGYsI2JkYzNjNywjZmZmZmZmLCMzNDQ5NWUsIzliNTliNiwjMWFiYzljLCNlNjdlMjIifSx0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHwiMSIsdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcj10aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZWxhdGlvbkNvbG9yPXRoaXMucmVsYXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZD10aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfHwodGhpcy5kYXJrTW9kZT9mYSh0aGlzLnNlY29uZGFyeUNvbG9yLDMwKTp0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmdpdDA9R3ModGhpcy5zZWNvbmRhcnlDb2xvciwyMCksdGhpcy5naXQxPUdzKHRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvciwyMCksdGhpcy5naXQyPUdzKHRoaXMucGllM3x8dGhpcy50ZXJ0aWFyeUNvbG9yLDIwKSx0aGlzLmdpdDM9R3ModGhpcy5waWU0fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDotMzB9KSwyMCksdGhpcy5naXQ0PUdzKHRoaXMucGllNXx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwfSksMjApLHRoaXMuZ2l0NT1Hcyh0aGlzLnBpZTZ8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOi05MH0pLDEwKSx0aGlzLmdpdDY9R3ModGhpcy5waWU3fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLDEwKSx0aGlzLmdpdDc9R3ModGhpcy5waWU4fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSwyMCksdGhpcy5naXRJbnYwPXRoaXMuZ2l0SW52MHx8VmkodGhpcy5naXQwKSx0aGlzLmdpdEludjE9dGhpcy5naXRJbnYxfHxWaSh0aGlzLmdpdDEpLHRoaXMuZ2l0SW52Mj10aGlzLmdpdEludjJ8fFZpKHRoaXMuZ2l0MiksdGhpcy5naXRJbnYzPXRoaXMuZ2l0SW52M3x8VmkodGhpcy5naXQzKSx0aGlzLmdpdEludjQ9dGhpcy5naXRJbnY0fHxWaSh0aGlzLmdpdDQpLHRoaXMuZ2l0SW52NT10aGlzLmdpdEludjV8fFZpKHRoaXMuZ2l0NSksdGhpcy5naXRJbnY2PXRoaXMuZ2l0SW52Nnx8VmkodGhpcy5naXQ2KSx0aGlzLmdpdEludjc9dGhpcy5naXRJbnY3fHxWaSh0aGlzLmdpdDcpLHRoaXMuZ2l0QnJhbmNoTGFiZWwwPXRoaXMuZ2l0QnJhbmNoTGFiZWwwfHxWaSh0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmdpdEJyYW5jaExhYmVsMT10aGlzLmdpdEJyYW5jaExhYmVsMXx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMj10aGlzLmdpdEJyYW5jaExhYmVsMnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMz10aGlzLmdpdEJyYW5jaExhYmVsM3x8VmkodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDQ9dGhpcy5naXRCcmFuY2hMYWJlbDR8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDU9dGhpcy5naXRCcmFuY2hMYWJlbDV8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDY9dGhpcy5naXRCcmFuY2hMYWJlbDZ8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDc9dGhpcy5naXRCcmFuY2hMYWJlbDd8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy50YWdMYWJlbENvbG9yPXRoaXMudGFnTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kPXRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhZ0xhYmVsQm9yZGVyPXRoaXMudGFnQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhZ0xhYmVsRm9udFNpemU9dGhpcy50YWdMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5jb21taXRMYWJlbENvbG9yPXRoaXMuY29tbWl0TGFiZWxDb2xvcnx8dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQ9dGhpcy5jb21taXRMYWJlbEJhY2tncm91bmR8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jb21taXRMYWJlbEZvbnRTaXplPXRoaXMuY29tbWl0TGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkfHxHcyh0aGlzLmJhY2tncm91bmQsMTIpLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbj10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW58fEdzKHRoaXMuYmFja2dyb3VuZCwyKX1jYWxjdWxhdGUocyl7aWYodHlwZW9mIHMhPSJvYmplY3QiKXt0aGlzLnVwZGF0ZUNvbG9ycygpO3JldHVybn1jb25zdCB1PU9iamVjdC5rZXlzKHMpO3UuZm9yRWFjaChkPT57dGhpc1tkXT1zW2RdfSksdGhpcy51cGRhdGVDb2xvcnMoKSx1LmZvckVhY2goZD0+e3RoaXNbZF09c1tkXX0pfX07Y29uc3QgSVB0PWk9Pntjb25zdCBzPW5ldyBEUHQ7cmV0dXJuIHMuY2FsY3VsYXRlKGkpLHN9O2xldCBPUHQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmJhY2tncm91bmQ9IiNmNGY0ZjQiLHRoaXMucHJpbWFyeUNvbG9yPSIjRUNFQ0ZGIix0aGlzLnNlY29uZGFyeUNvbG9yPUluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuc2Vjb25kYXJ5Q29sb3I9IiNmZmZmZGUiLHRoaXMudGVydGlhcnlDb2xvcj1Jbih0aGlzLnByaW1hcnlDb2xvcix7aDotMTYwfSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9VHAodGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1UcCh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj1UcCh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPVZpKHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj1WaSh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPVZpKHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9VmkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj1WaSh0aGlzLmJhY2tncm91bmQpLHRoaXMuYmFja2dyb3VuZD0id2hpdGUiLHRoaXMubWFpbkJrZz0iI0VDRUNGRiIsdGhpcy5zZWNvbmRCa2c9IiNmZmZmZGUiLHRoaXMubGluZUNvbG9yPSIjMzMzMzMzIix0aGlzLmJvcmRlcjE9IiM5MzcwREIiLHRoaXMuYm9yZGVyMj0iI2FhYWEzMyIsdGhpcy5hcnJvd2hlYWRDb2xvcj0iIzMzMzMzMyIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMubGFiZWxCYWNrZ3JvdW5kPSIjZThlOGU4Iix0aGlzLnRleHRDb2xvcj0iIzMzMyIsdGhpcy5USEVNRV9DT0xPUl9MSU1JVD0xMix0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImJsYWNrIix0aGlzLmFjdG9yTGluZUNvbG9yPSJncmV5Iix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSIjNjY2Iix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9ImNhbGN1bGF0ZWQiLHRoaXMuZXhjbHVkZUJrZ0NvbG9yPSIjZWVlZWVlIix0aGlzLnRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmdyaWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmNyaXRCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9U0MoMTAyLDEwMiwyNTUsLjQ5KSx0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iI2ZmZjQwMCIsdGhpcy50YXNrQm9yZGVyQ29sb3I9IiM1MzRmYmMiLHRoaXMudGFza0JrZ0NvbG9yPSIjOGE5MGRkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0id2hpdGUiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iYmxhY2siLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iIzAwMzE2MyIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9IiM1MzRmYmMiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSIjYmZjN2ZmIix0aGlzLmdyaWRDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iI2ZmODg4OCIsdGhpcy5jcml0QmtnQ29sb3I9InJlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0icmVkIix0aGlzLnBlcnNvbkJvcmRlcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnBlcnNvbkJrZz10aGlzLm1haW5Ca2csdGhpcy5sYWJlbENvbG9yPSJibGFjayIsdGhpcy5lcnJvckJrZ0NvbG9yPSIjNTUyMjIyIix0aGlzLmVycm9yVGV4dENvbG9yPSIjNTUyMjIyIix0aGlzLnVwZGF0ZUNvbG9ycygpfXVwZGF0ZUNvbG9ycygpe3ZhciBzLHUsZCxwLHYsYix5LFQsXyxBLFA7dGhpcy5jU2NhbGUwPXRoaXMuY1NjYWxlMHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5jU2NhbGUxPXRoaXMuY1NjYWxlMXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNTY2FsZTI9dGhpcy5jU2NhbGUyfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jU2NhbGUzPXRoaXMuY1NjYWxlM3x8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MzB9KSx0aGlzLmNTY2FsZTQ9dGhpcy5jU2NhbGU0fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuY1NjYWxlNT10aGlzLmNTY2FsZTV8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjkwfSksdGhpcy5jU2NhbGU2PXRoaXMuY1NjYWxlNnx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5jU2NhbGU3PXRoaXMuY1NjYWxlN3x8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTUwfSksdGhpcy5jU2NhbGU4PXRoaXMuY1NjYWxlOHx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MjEwfSksdGhpcy5jU2NhbGU5PXRoaXMuY1NjYWxlOXx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MjcwfSksdGhpcy5jU2NhbGUxMD10aGlzLmNTY2FsZTEwfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDozMDB9KSx0aGlzLmNTY2FsZTExPXRoaXMuY1NjYWxlMTF8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMzMH0pLHRoaXNbImNTY2FsZVBlZXIxIl09dGhpc1siY1NjYWxlUGVlcjEiXXx8ZmEodGhpcy5zZWNvbmRhcnlDb2xvciw0NSksdGhpc1siY1NjYWxlUGVlcjIiXT10aGlzWyJjU2NhbGVQZWVyMiJdfHxmYSh0aGlzLnRlcnRpYXJ5Q29sb3IsNDApO2ZvcihsZXQgUj0wO1I8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtSKyspdGhpc1siY1NjYWxlIitSXT1mYSh0aGlzWyJjU2NhbGUiK1JdLDEwKSx0aGlzWyJjU2NhbGVQZWVyIitSXT10aGlzWyJjU2NhbGVQZWVyIitSXXx8ZmEodGhpc1siY1NjYWxlIitSXSwyNSk7Zm9yKGxldCBSPTA7Ujx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO1IrKyl0aGlzWyJjU2NhbGVJbnYiK1JdPXRoaXNbImNTY2FsZUludiIrUl18fEluKHRoaXNbImNTY2FsZSIrUl0se2g6MTgwfSk7Zm9yKGxldCBSPTA7Ujw1O1IrKyl0aGlzWyJzdXJmYWNlIitSXT10aGlzWyJzdXJmYWNlIitSXXx8SW4odGhpcy5tYWluQmtnLHtoOjMwLGw6LSg1K1IqNSl9KSx0aGlzWyJzdXJmYWNlUGVlciIrUl09dGhpc1sic3VyZmFjZVBlZXIiK1JdfHxJbih0aGlzLm1haW5Ca2cse2g6MzAsbDotKDcrUio1KX0pO2lmKHRoaXMuc2NhbGVMYWJlbENvbG9yPXRoaXMuc2NhbGVMYWJlbENvbG9yIT09ImNhbGN1bGF0ZWQiJiZ0aGlzLnNjYWxlTGFiZWxDb2xvcj90aGlzLnNjYWxlTGFiZWxDb2xvcjp0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMubGFiZWxUZXh0Q29sb3IhPT0iY2FsY3VsYXRlZCIpe3RoaXMuY1NjYWxlTGFiZWwwPXRoaXMuY1NjYWxlTGFiZWwwfHxWaSh0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmNTY2FsZUxhYmVsMz10aGlzLmNTY2FsZUxhYmVsM3x8VmkodGhpcy5sYWJlbFRleHRDb2xvcik7Zm9yKGxldCBSPTA7Ujx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO1IrKyl0aGlzWyJjU2NhbGVMYWJlbCIrUl09dGhpc1siY1NjYWxlTGFiZWwiK1JdfHx0aGlzLmxhYmVsVGV4dENvbG9yfXRoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy50aXRsZUNvbG9yPXRoaXMudGV4dENvbG9yLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD10aGlzLmxhYmVsQmFja2dyb3VuZCx0aGlzLmFjdG9yQm9yZGVyPUdzKHRoaXMuYm9yZGVyMSwyMyksdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMuYWN0b3JCa2csdGhpcy5zaWduYWxDb2xvcj10aGlzLnRleHRDb2xvcix0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLnRleHRDb2xvcix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIyLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8IiNmMGYwZjAiLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5jb21wb3NpdGVCb3JkZXI9dGhpcy5jb21wb3NpdGVCb3JkZXJ8fHRoaXMubm9kZUJvcmRlcix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLm5vZGVCb3JkZXIsdGhpcy5zcGVjaWFsU3RhdGVDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj1Jbih0aGlzLnByaW1hcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGUzPUluKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND1Jbih0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT1Jbih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU2PUluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PUluKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5waWUxPXRoaXMucGllMXx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5waWUyPXRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnBpZTM9dGhpcy5waWUzfHxJbih0aGlzLnRlcnRpYXJ5Q29sb3Ise2w6LTQwfSksdGhpcy5waWU0PXRoaXMucGllNHx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU1PXRoaXMucGllNXx8SW4odGhpcy5zZWNvbmRhcnlDb2xvcix7bDotMzB9KSx0aGlzLnBpZTY9dGhpcy5waWU2fHxJbih0aGlzLnRlcnRpYXJ5Q29sb3Ise2w6LTIwfSksdGhpcy5waWU3PXRoaXMucGllN3x8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMjB9KSx0aGlzLnBpZTg9dGhpcy5waWU4fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotNDB9KSx0aGlzLnBpZTk9dGhpcy5waWU5fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotNDB9KSx0aGlzLnBpZTEwPXRoaXMucGllMTB8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTQwfSksdGhpcy5waWUxMT10aGlzLnBpZTExfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDotOTAsbDotNDB9KSx0aGlzLnBpZTEyPXRoaXMucGllMTJ8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMCxsOi0zMH0pLHRoaXMucGllVGl0bGVUZXh0U2l6ZT10aGlzLnBpZVRpdGxlVGV4dFNpemV8fCIyNXB4Iix0aGlzLnBpZVRpdGxlVGV4dENvbG9yPXRoaXMucGllVGl0bGVUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTZWN0aW9uVGV4dFNpemU9dGhpcy5waWVTZWN0aW9uVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3I9dGhpcy5waWVTZWN0aW9uVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnBpZUxlZ2VuZFRleHRTaXplPXRoaXMucGllTGVnZW5kVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZUxlZ2VuZFRleHRDb2xvcj10aGlzLnBpZUxlZ2VuZFRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVN0cm9rZUNvbG9yPXRoaXMucGllU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVTdHJva2VXaWR0aD10aGlzLnBpZVN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGg9dGhpcy5waWVPdXRlclN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3I9dGhpcy5waWVPdXRlclN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMucXVhZHJhbnQxRmlsbD10aGlzLnF1YWRyYW50MUZpbGx8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucXVhZHJhbnQyRmlsbD10aGlzLnF1YWRyYW50MkZpbGx8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtyOjUsZzo1LGI6NX0pLHRoaXMucXVhZHJhbnQzRmlsbD10aGlzLnF1YWRyYW50M0ZpbGx8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtyOjEwLGc6MTAsYjoxMH0pLHRoaXMucXVhZHJhbnQ0RmlsbD10aGlzLnF1YWRyYW50NEZpbGx8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtyOjE1LGc6MTUsYjoxNX0pLHRoaXMucXVhZHJhbnQxVGV4dEZpbGw9dGhpcy5xdWFkcmFudDFUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnQyVGV4dEZpbGw9dGhpcy5xdWFkcmFudDJUZXh0RmlsbHx8SW4odGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi01LGc6LTUsYjotNX0pLHRoaXMucXVhZHJhbnQzVGV4dEZpbGw9dGhpcy5xdWFkcmFudDNUZXh0RmlsbHx8SW4odGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xMCxnOi0xMCxiOi0xMH0pLHRoaXMucXVhZHJhbnQ0VGV4dEZpbGw9dGhpcy5xdWFkcmFudDRUZXh0RmlsbHx8SW4odGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xNSxnOi0xNSxiOi0xNX0pLHRoaXMucXVhZHJhbnRQb2ludEZpbGw9dGhpcy5xdWFkcmFudFBvaW50RmlsbHx8X0ModGhpcy5xdWFkcmFudDFGaWxsKT9Hcyh0aGlzLnF1YWRyYW50MUZpbGwpOmZhKHRoaXMucXVhZHJhbnQxRmlsbCksdGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGw9dGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRUaXRsZUZpbGw9dGhpcy5xdWFkcmFudFRpdGxlRmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMueHlDaGFydD17YmFja2dyb3VuZENvbG9yOigocz10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpzLmJhY2tncm91bmRDb2xvcil8fHRoaXMuYmFja2dyb3VuZCx0aXRsZUNvbG9yOigodT10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDp1LnRpdGxlQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaXRsZUNvbG9yOigoZD10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpkLnhBeGlzVGl0bGVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xhYmVsQ29sb3I6KChwPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOnAueEF4aXNMYWJlbENvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGlja0NvbG9yOigodj10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDp2LnhBeGlzVGlja0NvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGluZUNvbG9yOigoYj10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpiLnhBeGlzTGluZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzVGl0bGVDb2xvcjooKHk9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6eS55QXhpc1RpdGxlQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMYWJlbENvbG9yOigoVD10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpULnlBeGlzTGFiZWxDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpY2tDb2xvcjooKF89dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6Xy55QXhpc1RpY2tDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xpbmVDb2xvcjooKEE9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6QS55QXhpc0xpbmVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcixwbG90Q29sb3JQYWxldHRlOigoUD10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpQLnBsb3RDb2xvclBhbGV0dGUpfHwiI0VDRUNGRiwjODQ5M0E2LCNGRkMzQTAsI0RDRERFMSwjQjhFOTk0LCNEMUEzNkYsI0MzQ0RFNiwjRkZCNkMxLCM0OTYwNzgsI0Y4RjNFMyJ9LHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8IjEiLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8dGhpcy5sYWJlbEJhY2tncm91bmQsdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3I9dGhpcy5yZWxhdGlvbkxhYmVsQ29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5naXQwPXRoaXMuZ2l0MHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5naXQxPXRoaXMuZ2l0MXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmdpdDI9dGhpcy5naXQyfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5naXQzPXRoaXMuZ2l0M3x8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTMwfSksdGhpcy5naXQ0PXRoaXMuZ2l0NHx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwfSksdGhpcy5naXQ1PXRoaXMuZ2l0NXx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTkwfSksdGhpcy5naXQ2PXRoaXMuZ2l0Nnx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmdpdDc9dGhpcy5naXQ3fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmRhcmtNb2RlPyh0aGlzLmdpdDA9R3ModGhpcy5naXQwLDI1KSx0aGlzLmdpdDE9R3ModGhpcy5naXQxLDI1KSx0aGlzLmdpdDI9R3ModGhpcy5naXQyLDI1KSx0aGlzLmdpdDM9R3ModGhpcy5naXQzLDI1KSx0aGlzLmdpdDQ9R3ModGhpcy5naXQ0LDI1KSx0aGlzLmdpdDU9R3ModGhpcy5naXQ1LDI1KSx0aGlzLmdpdDY9R3ModGhpcy5naXQ2LDI1KSx0aGlzLmdpdDc9R3ModGhpcy5naXQ3LDI1KSk6KHRoaXMuZ2l0MD1mYSh0aGlzLmdpdDAsMjUpLHRoaXMuZ2l0MT1mYSh0aGlzLmdpdDEsMjUpLHRoaXMuZ2l0Mj1mYSh0aGlzLmdpdDIsMjUpLHRoaXMuZ2l0Mz1mYSh0aGlzLmdpdDMsMjUpLHRoaXMuZ2l0ND1mYSh0aGlzLmdpdDQsMjUpLHRoaXMuZ2l0NT1mYSh0aGlzLmdpdDUsMjUpLHRoaXMuZ2l0Nj1mYSh0aGlzLmdpdDYsMjUpLHRoaXMuZ2l0Nz1mYSh0aGlzLmdpdDcsMjUpKSx0aGlzLmdpdEludjA9dGhpcy5naXRJbnYwfHxmYShWaSh0aGlzLmdpdDApLDI1KSx0aGlzLmdpdEludjE9dGhpcy5naXRJbnYxfHxWaSh0aGlzLmdpdDEpLHRoaXMuZ2l0SW52Mj10aGlzLmdpdEludjJ8fFZpKHRoaXMuZ2l0MiksdGhpcy5naXRJbnYzPXRoaXMuZ2l0SW52M3x8VmkodGhpcy5naXQzKSx0aGlzLmdpdEludjQ9dGhpcy5naXRJbnY0fHxWaSh0aGlzLmdpdDQpLHRoaXMuZ2l0SW52NT10aGlzLmdpdEludjV8fFZpKHRoaXMuZ2l0NSksdGhpcy5naXRJbnY2PXRoaXMuZ2l0SW52Nnx8VmkodGhpcy5naXQ2KSx0aGlzLmdpdEludjc9dGhpcy5naXRJbnY3fHxWaSh0aGlzLmdpdDcpLHRoaXMuZ2l0QnJhbmNoTGFiZWwwPXRoaXMuZ2l0QnJhbmNoTGFiZWwwfHxWaSh0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmdpdEJyYW5jaExhYmVsMT10aGlzLmdpdEJyYW5jaExhYmVsMXx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMj10aGlzLmdpdEJyYW5jaExhYmVsMnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMz10aGlzLmdpdEJyYW5jaExhYmVsM3x8VmkodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDQ9dGhpcy5naXRCcmFuY2hMYWJlbDR8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDU9dGhpcy5naXRCcmFuY2hMYWJlbDV8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDY9dGhpcy5naXRCcmFuY2hMYWJlbDZ8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDc9dGhpcy5naXRCcmFuY2hMYWJlbDd8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy50YWdMYWJlbENvbG9yPXRoaXMudGFnTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kPXRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhZ0xhYmVsQm9yZGVyPXRoaXMudGFnQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhZ0xhYmVsRm9udFNpemU9dGhpcy50YWdMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5jb21taXRMYWJlbENvbG9yPXRoaXMuY29tbWl0TGFiZWxDb2xvcnx8dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQ9dGhpcy5jb21taXRMYWJlbEJhY2tncm91bmR8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jb21taXRMYWJlbEZvbnRTaXplPXRoaXMuY29tbWl0TGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkfHxUWCx0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW49dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVufHxDWH1jYWxjdWxhdGUocyl7aWYodHlwZW9mIHMhPSJvYmplY3QiKXt0aGlzLnVwZGF0ZUNvbG9ycygpO3JldHVybn1jb25zdCB1PU9iamVjdC5rZXlzKHMpO3UuZm9yRWFjaChkPT57dGhpc1tkXT1zW2RdfSksdGhpcy51cGRhdGVDb2xvcnMoKSx1LmZvckVhY2goZD0+e3RoaXNbZF09c1tkXX0pfX07Y29uc3QgZjJlPWk9Pntjb25zdCBzPW5ldyBPUHQ7cmV0dXJuIHMuY2FsY3VsYXRlKGkpLHN9O2xldCBOUHQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmJhY2tncm91bmQ9IiNmNGY0ZjQiLHRoaXMucHJpbWFyeUNvbG9yPSIjY2RlNDk4Iix0aGlzLnNlY29uZGFyeUNvbG9yPSIjY2RmZmIyIix0aGlzLmJhY2tncm91bmQ9IndoaXRlIix0aGlzLm1haW5Ca2c9IiNjZGU0OTgiLHRoaXMuc2Vjb25kQmtnPSIjY2RmZmIyIix0aGlzLmxpbmVDb2xvcj0iZ3JlZW4iLHRoaXMuYm9yZGVyMT0iIzEzNTQwYyIsdGhpcy5ib3JkZXIyPSIjNmVhYTQ5Iix0aGlzLmFycm93aGVhZENvbG9yPSJncmVlbiIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMudGVydGlhcnlDb2xvcj1HcygiI2NkZTQ5OCIsMTApLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPVRwKHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9VHAodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9VHAodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj1WaSh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9VmkodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj1WaSh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5saW5lQ29sb3I9VmkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj1WaSh0aGlzLmJhY2tncm91bmQpLHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ9MTIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iIzMzMyIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSIjZThlOGU4Iix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJibGFjayIsdGhpcy5hY3RvckxpbmVDb2xvcj0iZ3JleSIsdGhpcy5zaWduYWxDb2xvcj0iIzMzMyIsdGhpcy5zaWduYWxUZXh0Q29sb3I9IiMzMzMiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSIjMzI2OTMyIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iIzY2NiIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9IiNmNGY0ZjQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSIjNmVhYTQ5Iix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iIzZlYWE0OSIsdGhpcy5leGNsdWRlQmtnQ29sb3I9IiNlZWVlZWUiLHRoaXMudGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tCa2dDb2xvcj0iIzQ4N2UzYSIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9IndoaXRlIix0aGlzLnRhc2tUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImJsYWNrIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9IiMwMDMxNjMiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ncmlkQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iZ3JleSIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9IiNmZjg4ODgiLHRoaXMuY3JpdEJrZ0NvbG9yPSJyZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9InJlZCIsdGhpcy5wZXJzb25Cb3JkZXI9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5wZXJzb25Ca2c9dGhpcy5tYWluQmtnLHRoaXMubGFiZWxDb2xvcj0iYmxhY2siLHRoaXMuZXJyb3JCa2dDb2xvcj0iIzU1MjIyMiIsdGhpcy5lcnJvclRleHRDb2xvcj0iIzU1MjIyMiJ9dXBkYXRlQ29sb3JzKCl7dmFyIHMsdSxkLHAsdixiLHksVCxfLEEsUDt0aGlzLmFjdG9yQm9yZGVyPWZhKHRoaXMubWFpbkJrZywyMCksdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMuYWN0b3JCa2csdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubG9vcFRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubm90ZUJvcmRlckNvbG9yPXRoaXMuYm9yZGVyMix0aGlzLm5vdGVUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmNTY2FsZTA9dGhpcy5jU2NhbGUwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmNTY2FsZTE9dGhpcy5jU2NhbGUxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY1NjYWxlMj10aGlzLmNTY2FsZTJ8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmNTY2FsZTM9dGhpcy5jU2NhbGUzfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDozMH0pLHRoaXMuY1NjYWxlND10aGlzLmNTY2FsZTR8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5jU2NhbGU1PXRoaXMuY1NjYWxlNXx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6OTB9KSx0aGlzLmNTY2FsZTY9dGhpcy5jU2NhbGU2fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmNTY2FsZTc9dGhpcy5jU2NhbGU3fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoxNTB9KSx0aGlzLmNTY2FsZTg9dGhpcy5jU2NhbGU4fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoyMTB9KSx0aGlzLmNTY2FsZTk9dGhpcy5jU2NhbGU5fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoyNzB9KSx0aGlzLmNTY2FsZTEwPXRoaXMuY1NjYWxlMTB8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwMH0pLHRoaXMuY1NjYWxlMTE9dGhpcy5jU2NhbGUxMXx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MzMwfSksdGhpc1siY1NjYWxlUGVlcjEiXT10aGlzWyJjU2NhbGVQZWVyMSJdfHxmYSh0aGlzLnNlY29uZGFyeUNvbG9yLDQ1KSx0aGlzWyJjU2NhbGVQZWVyMiJdPXRoaXNbImNTY2FsZVBlZXIyIl18fGZhKHRoaXMudGVydGlhcnlDb2xvciw0MCk7Zm9yKGxldCBSPTA7Ujx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO1IrKyl0aGlzWyJjU2NhbGUiK1JdPWZhKHRoaXNbImNTY2FsZSIrUl0sMTApLHRoaXNbImNTY2FsZVBlZXIiK1JdPXRoaXNbImNTY2FsZVBlZXIiK1JdfHxmYSh0aGlzWyJjU2NhbGUiK1JdLDI1KTtmb3IobGV0IFI9MDtSPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7UisrKXRoaXNbImNTY2FsZUludiIrUl09dGhpc1siY1NjYWxlSW52IitSXXx8SW4odGhpc1siY1NjYWxlIitSXSx7aDoxODB9KTt0aGlzLnNjYWxlTGFiZWxDb2xvcj10aGlzLnNjYWxlTGFiZWxDb2xvciE9PSJjYWxjdWxhdGVkIiYmdGhpcy5zY2FsZUxhYmVsQ29sb3I/dGhpcy5zY2FsZUxhYmVsQ29sb3I6dGhpcy5sYWJlbFRleHRDb2xvcjtmb3IobGV0IFI9MDtSPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7UisrKXRoaXNbImNTY2FsZUxhYmVsIitSXT10aGlzWyJjU2NhbGVMYWJlbCIrUl18fHRoaXMuc2NhbGVMYWJlbENvbG9yO2ZvcihsZXQgUj0wO1I8NTtSKyspdGhpc1sic3VyZmFjZSIrUl09dGhpc1sic3VyZmFjZSIrUl18fEluKHRoaXMubWFpbkJrZyx7aDozMCxzOi0zMCxsOi0oNStSKjUpfSksdGhpc1sic3VyZmFjZVBlZXIiK1JdPXRoaXNbInN1cmZhY2VQZWVyIitSXXx8SW4odGhpcy5tYWluQmtnLHtoOjMwLHM6LTMwLGw6LSg4K1IqNSl9KTt0aGlzLm5vZGVCa2c9dGhpcy5tYWluQmtnLHRoaXMubm9kZUJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5jbHVzdGVyQmtnPXRoaXMuc2Vjb25kQmtnLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmJvcmRlcjIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMudGFza0JvcmRlckNvbG9yPXRoaXMuYm9yZGVyMSx0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPXRoaXMudGFza0JvcmRlckNvbG9yLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPXRoaXMubWFpbkJrZyx0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2YwZjBmMCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5jbGFzc1RleHQ9dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuZmlsbFR5cGUwPXRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZmlsbFR5cGUxPXRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz1Jbih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9SW4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj1Jbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz1Jbih0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMucGllMT10aGlzLnBpZTF8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucGllMj10aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5waWUzPXRoaXMucGllM3x8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMucGllND10aGlzLnBpZTR8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtsOi0zMH0pLHRoaXMucGllNT10aGlzLnBpZTV8fEluKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2w6LTMwfSksdGhpcy5waWU2PXRoaXMucGllNnx8SW4odGhpcy50ZXJ0aWFyeUNvbG9yLHtoOjQwLGw6LTQwfSksdGhpcy5waWU3PXRoaXMucGllN3x8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMTB9KSx0aGlzLnBpZTg9dGhpcy5waWU4fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotMTB9KSx0aGlzLnBpZTk9dGhpcy5waWU5fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDowfSksdGhpcy5waWUxMD10aGlzLnBpZTEwfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi01MH0pLHRoaXMucGllMTE9dGhpcy5waWUxMXx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTUwfSksdGhpcy5waWUxMj10aGlzLnBpZTEyfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotNTB9KSx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHxJbih0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHxJbih0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHxJbih0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fEluKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fEluKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fEluKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fF9DKHRoaXMucXVhZHJhbnQxRmlsbCk/R3ModGhpcy5xdWFkcmFudDFGaWxsKTpmYSh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnh5Q2hhcnQ9e2JhY2tncm91bmRDb2xvcjooKHM9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6cy5iYWNrZ3JvdW5kQ29sb3IpfHx0aGlzLmJhY2tncm91bmQsdGl0bGVDb2xvcjooKHU9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6dS50aXRsZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGl0bGVDb2xvcjooKGQ9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6ZC54QXhpc1RpdGxlQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMYWJlbENvbG9yOigocD10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpwLnhBeGlzTGFiZWxDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpY2tDb2xvcjooKHY9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6di54QXhpc1RpY2tDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xpbmVDb2xvcjooKGI9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6Yi54QXhpc0xpbmVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpdGxlQ29sb3I6KCh5PXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOnkueUF4aXNUaXRsZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGFiZWxDb2xvcjooKFQ9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6VC55QXhpc0xhYmVsQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaWNrQ29sb3I6KChfPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOl8ueUF4aXNUaWNrQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMaW5lQ29sb3I6KChBPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOkEueUF4aXNMaW5lQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IscGxvdENvbG9yUGFsZXR0ZTooKFA9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6UC5wbG90Q29sb3JQYWxldHRlKXx8IiNDREU0OTgsI0ZGNkI2QiwjQTBEMkRCLCNEN0JERTIsI0YwRjBGMCwjRkZDM0EwLCM3RkQ4QkUsI0ZGOUE4QiwjRkFGM0UwLCNGRkYxNzYifSx0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZD10aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemU9dGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemV8fCIxIix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmdpdDA9dGhpcy5naXQwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmdpdDE9dGhpcy5naXQxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZ2l0Mj10aGlzLmdpdDJ8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmdpdDM9dGhpcy5naXQzfHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDotMzB9KSx0aGlzLmdpdDQ9dGhpcy5naXQ0fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDotNjB9KSx0aGlzLmdpdDU9dGhpcy5naXQ1fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDotOTB9KSx0aGlzLmdpdDY9dGhpcy5naXQ2fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuZ2l0Nz10aGlzLmdpdDd8fEluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuZGFya01vZGU/KHRoaXMuZ2l0MD1Hcyh0aGlzLmdpdDAsMjUpLHRoaXMuZ2l0MT1Hcyh0aGlzLmdpdDEsMjUpLHRoaXMuZ2l0Mj1Hcyh0aGlzLmdpdDIsMjUpLHRoaXMuZ2l0Mz1Hcyh0aGlzLmdpdDMsMjUpLHRoaXMuZ2l0ND1Hcyh0aGlzLmdpdDQsMjUpLHRoaXMuZ2l0NT1Hcyh0aGlzLmdpdDUsMjUpLHRoaXMuZ2l0Nj1Hcyh0aGlzLmdpdDYsMjUpLHRoaXMuZ2l0Nz1Hcyh0aGlzLmdpdDcsMjUpKToodGhpcy5naXQwPWZhKHRoaXMuZ2l0MCwyNSksdGhpcy5naXQxPWZhKHRoaXMuZ2l0MSwyNSksdGhpcy5naXQyPWZhKHRoaXMuZ2l0MiwyNSksdGhpcy5naXQzPWZhKHRoaXMuZ2l0MywyNSksdGhpcy5naXQ0PWZhKHRoaXMuZ2l0NCwyNSksdGhpcy5naXQ1PWZhKHRoaXMuZ2l0NSwyNSksdGhpcy5naXQ2PWZhKHRoaXMuZ2l0NiwyNSksdGhpcy5naXQ3PWZhKHRoaXMuZ2l0NywyNSkpLHRoaXMuZ2l0SW52MD10aGlzLmdpdEludjB8fFZpKHRoaXMuZ2l0MCksdGhpcy5naXRJbnYxPXRoaXMuZ2l0SW52MXx8VmkodGhpcy5naXQxKSx0aGlzLmdpdEludjI9dGhpcy5naXRJbnYyfHxWaSh0aGlzLmdpdDIpLHRoaXMuZ2l0SW52Mz10aGlzLmdpdEludjN8fFZpKHRoaXMuZ2l0MyksdGhpcy5naXRJbnY0PXRoaXMuZ2l0SW52NHx8VmkodGhpcy5naXQ0KSx0aGlzLmdpdEludjU9dGhpcy5naXRJbnY1fHxWaSh0aGlzLmdpdDUpLHRoaXMuZ2l0SW52Nj10aGlzLmdpdEludjZ8fFZpKHRoaXMuZ2l0NiksdGhpcy5naXRJbnY3PXRoaXMuZ2l0SW52N3x8VmkodGhpcy5naXQ3KSx0aGlzLmdpdEJyYW5jaExhYmVsMD10aGlzLmdpdEJyYW5jaExhYmVsMHx8VmkodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDE9dGhpcy5naXRCcmFuY2hMYWJlbDF8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDI9dGhpcy5naXRCcmFuY2hMYWJlbDJ8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDM9dGhpcy5naXRCcmFuY2hMYWJlbDN8fFZpKHRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuZ2l0QnJhbmNoTGFiZWw0PXRoaXMuZ2l0QnJhbmNoTGFiZWw0fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw1PXRoaXMuZ2l0QnJhbmNoTGFiZWw1fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw2PXRoaXMuZ2l0QnJhbmNoTGFiZWw2fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw3PXRoaXMuZ2l0QnJhbmNoTGFiZWw3fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMudGFnTGFiZWxDb2xvcj10aGlzLnRhZ0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZD10aGlzLnRhZ0xhYmVsQmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy50YWdMYWJlbEJvcmRlcj10aGlzLnRhZ0JvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YWdMYWJlbEZvbnRTaXplPXRoaXMudGFnTGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuY29tbWl0TGFiZWxDb2xvcj10aGlzLmNvbW1pdExhYmVsQ29sb3J8fHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yLHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kPXRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZT10aGlzLmNvbW1pdExhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZD10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZHx8VFgsdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVuPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbnx8Q1h9Y2FsY3VsYXRlKHMpe2lmKHR5cGVvZiBzIT0ib2JqZWN0Iil7dGhpcy51cGRhdGVDb2xvcnMoKTtyZXR1cm59Y29uc3QgdT1PYmplY3Qua2V5cyhzKTt1LmZvckVhY2goZD0+e3RoaXNbZF09c1tkXX0pLHRoaXMudXBkYXRlQ29sb3JzKCksdS5mb3JFYWNoKGQ9Pnt0aGlzW2RdPXNbZF19KX19O2NvbnN0IFBQdD1pPT57Y29uc3Qgcz1uZXcgTlB0O3JldHVybiBzLmNhbGN1bGF0ZShpKSxzfTtjbGFzcyBCUHR7Y29uc3RydWN0b3IoKXt0aGlzLnByaW1hcnlDb2xvcj0iI2VlZSIsdGhpcy5jb250cmFzdD0iIzcwNzA3MCIsdGhpcy5zZWNvbmRhcnlDb2xvcj1Hcyh0aGlzLmNvbnRyYXN0LDU1KSx0aGlzLmJhY2tncm91bmQ9IiNmZmZmZmYiLHRoaXMudGVydGlhcnlDb2xvcj1Jbih0aGlzLnByaW1hcnlDb2xvcix7aDotMTYwfSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9VHAodGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1UcCh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj1UcCh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPVZpKHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj1WaSh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPVZpKHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9VmkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj1WaSh0aGlzLmJhY2tncm91bmQpLHRoaXMubWFpbkJrZz0iI2VlZSIsdGhpcy5zZWNvbmRCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubGluZUNvbG9yPSIjNjY2Iix0aGlzLmJvcmRlcjE9IiM5OTkiLHRoaXMuYm9yZGVyMj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlPSIjZmZhIix0aGlzLnRleHQ9IiMzMzMiLHRoaXMuY3JpdGljYWw9IiNkNDIiLHRoaXMuZG9uZT0iI2JiYiIsdGhpcy5hcnJvd2hlYWRDb2xvcj0iIzMzMzMzMyIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ9MTIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSJ3aGl0ZSIsdGhpcy5hY3RvckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvclRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iIzY2NiIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9IiNmNGY0ZjQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iY2FsY3VsYXRlZCIsdGhpcy5leGNsdWRlQmtnQ29sb3I9IiNlZWVlZWUiLHRoaXMudGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9IndoaXRlIix0aGlzLnRhc2tUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iIzAwMzE2MyIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmdyaWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5wZXJzb25Cb3JkZXI9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5wZXJzb25Ca2c9dGhpcy5tYWluQmtnLHRoaXMubGFiZWxDb2xvcj0iYmxhY2siLHRoaXMuZXJyb3JCa2dDb2xvcj0iIzU1MjIyMiIsdGhpcy5lcnJvclRleHRDb2xvcj0iIzU1MjIyMiJ9dXBkYXRlQ29sb3JzKCl7dmFyIHMsdSxkLHAsdixiLHksVCxfLEEsUDt0aGlzLnNlY29uZEJrZz1Hcyh0aGlzLmNvbnRyYXN0LDU1KSx0aGlzLmJvcmRlcjI9dGhpcy5jb250cmFzdCx0aGlzLmFjdG9yQm9yZGVyPUdzKHRoaXMuYm9yZGVyMSwyMyksdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnNpZ25hbENvbG9yPXRoaXMudGV4dCx0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMuYWN0b3JCa2csdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPXRoaXMuYWN0b3JCb3JkZXIsdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLm5vdGVCb3JkZXJDb2xvcj0iIzk5OSIsdGhpcy5ub3RlQmtnQ29sb3I9IiM2NjYiLHRoaXMubm90ZVRleHRDb2xvcj0iI2ZmZiIsdGhpcy5jU2NhbGUwPXRoaXMuY1NjYWxlMHx8IiM1NTUiLHRoaXMuY1NjYWxlMT10aGlzLmNTY2FsZTF8fCIjRjRGNEY0Iix0aGlzLmNTY2FsZTI9dGhpcy5jU2NhbGUyfHwiIzU1NSIsdGhpcy5jU2NhbGUzPXRoaXMuY1NjYWxlM3x8IiNCQkIiLHRoaXMuY1NjYWxlND10aGlzLmNTY2FsZTR8fCIjNzc3Iix0aGlzLmNTY2FsZTU9dGhpcy5jU2NhbGU1fHwiIzk5OSIsdGhpcy5jU2NhbGU2PXRoaXMuY1NjYWxlNnx8IiNEREQiLHRoaXMuY1NjYWxlNz10aGlzLmNTY2FsZTd8fCIjRkZGIix0aGlzLmNTY2FsZTg9dGhpcy5jU2NhbGU4fHwiI0RERCIsdGhpcy5jU2NhbGU5PXRoaXMuY1NjYWxlOXx8IiNCQkIiLHRoaXMuY1NjYWxlMTA9dGhpcy5jU2NhbGUxMHx8IiM5OTkiLHRoaXMuY1NjYWxlMTE9dGhpcy5jU2NhbGUxMXx8IiM3NzciO2ZvcihsZXQgUj0wO1I8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtSKyspdGhpc1siY1NjYWxlSW52IitSXT10aGlzWyJjU2NhbGVJbnYiK1JdfHxWaSh0aGlzWyJjU2NhbGUiK1JdKTtmb3IobGV0IFI9MDtSPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7UisrKXRoaXMuZGFya01vZGU/dGhpc1siY1NjYWxlUGVlciIrUl09dGhpc1siY1NjYWxlUGVlciIrUl18fEdzKHRoaXNbImNTY2FsZSIrUl0sMTApOnRoaXNbImNTY2FsZVBlZXIiK1JdPXRoaXNbImNTY2FsZVBlZXIiK1JdfHxmYSh0aGlzWyJjU2NhbGUiK1JdLDEwKTt0aGlzLnNjYWxlTGFiZWxDb2xvcj10aGlzLnNjYWxlTGFiZWxDb2xvcnx8KHRoaXMuZGFya01vZGU/ImJsYWNrIjp0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmNTY2FsZUxhYmVsMD10aGlzLmNTY2FsZUxhYmVsMHx8dGhpcy5jU2NhbGUxLHRoaXMuY1NjYWxlTGFiZWwyPXRoaXMuY1NjYWxlTGFiZWwyfHx0aGlzLmNTY2FsZTE7Zm9yKGxldCBSPTA7Ujx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO1IrKyl0aGlzWyJjU2NhbGVMYWJlbCIrUl09dGhpc1siY1NjYWxlTGFiZWwiK1JdfHx0aGlzLnNjYWxlTGFiZWxDb2xvcjtmb3IobGV0IFI9MDtSPDU7UisrKXRoaXNbInN1cmZhY2UiK1JdPXRoaXNbInN1cmZhY2UiK1JdfHxJbih0aGlzLm1haW5Ca2cse2w6LSg1K1IqNSl9KSx0aGlzWyJzdXJmYWNlUGVlciIrUl09dGhpc1sic3VyZmFjZVBlZXIiK1JdfHxJbih0aGlzLm1haW5Ca2cse2w6LSg4K1IqNSl9KTt0aGlzLm5vZGVCa2c9dGhpcy5tYWluQmtnLHRoaXMubm9kZUJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5jbHVzdGVyQmtnPXRoaXMuc2Vjb25kQmtnLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmJvcmRlcjIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMudGl0bGVDb2xvcj10aGlzLnRleHQsdGhpcy5zZWN0aW9uQmtnQ29sb3I9R3ModGhpcy5jb250cmFzdCwzMCksdGhpcy5zZWN0aW9uQmtnQ29sb3IyPUdzKHRoaXMuY29udHJhc3QsMzApLHRoaXMudGFza0JvcmRlckNvbG9yPWZhKHRoaXMuY29udHJhc3QsMTApLHRoaXMudGFza0JrZ0NvbG9yPXRoaXMuY29udHJhc3QsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMudGFza1RleHREYXJrQ29sb3I9dGhpcy50ZXh0LHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj10aGlzLnRhc2tCb3JkZXJDb2xvcix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj10aGlzLm1haW5Ca2csdGhpcy5ncmlkQ29sb3I9R3ModGhpcy5ib3JkZXIxLDMwKSx0aGlzLmRvbmVUYXNrQmtnQ29sb3I9dGhpcy5kb25lLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmNyaXRCa2dDb2xvcj10aGlzLmNyaXRpY2FsLHRoaXMuY3JpdEJvcmRlckNvbG9yPWZhKHRoaXMuY3JpdEJrZ0NvbG9yLDEwKSx0aGlzLnRvZGF5TGluZUNvbG9yPXRoaXMuY3JpdEJrZ0NvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHwiIzAwMCIsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2Y0ZjRmNCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLnN0YXRlQm9yZGVyPXRoaXMuc3RhdGVCb3JkZXJ8fCIjMDAwIix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPSIjMjIyIix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPUluKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9SW4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PUluKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PUluKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9SW4odGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KTtmb3IobGV0IFI9MDtSPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7UisrKXRoaXNbInBpZSIrUl09dGhpc1siY1NjYWxlIitSXTt0aGlzLnBpZTEyPXRoaXMucGllMCx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHxJbih0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHxJbih0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHxJbih0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fEluKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fEluKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fEluKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fF9DKHRoaXMucXVhZHJhbnQxRmlsbCk/R3ModGhpcy5xdWFkcmFudDFGaWxsKTpmYSh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnh5Q2hhcnQ9e2JhY2tncm91bmRDb2xvcjooKHM9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6cy5iYWNrZ3JvdW5kQ29sb3IpfHx0aGlzLmJhY2tncm91bmQsdGl0bGVDb2xvcjooKHU9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6dS50aXRsZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGl0bGVDb2xvcjooKGQ9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6ZC54QXhpc1RpdGxlQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMYWJlbENvbG9yOigocD10aGlzLnh5Q2hhcnQpPT1udWxsP3ZvaWQgMDpwLnhBeGlzTGFiZWxDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpY2tDb2xvcjooKHY9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6di54QXhpc1RpY2tDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xpbmVDb2xvcjooKGI9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6Yi54QXhpc0xpbmVDb2xvcil8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpdGxlQ29sb3I6KCh5PXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOnkueUF4aXNUaXRsZUNvbG9yKXx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGFiZWxDb2xvcjooKFQ9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6VC55QXhpc0xhYmVsQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaWNrQ29sb3I6KChfPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOl8ueUF4aXNUaWNrQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMaW5lQ29sb3I6KChBPXRoaXMueHlDaGFydCk9PW51bGw/dm9pZCAwOkEueUF4aXNMaW5lQ29sb3IpfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IscGxvdENvbG9yUGFsZXR0ZTooKFA9dGhpcy54eUNoYXJ0KT09bnVsbD92b2lkIDA6UC5wbG90Q29sb3JQYWxldHRlKXx8IiNFRUUsIzZCQjhFNCwjOEFDQjg4LCNDN0FDRDYsI0U4RENDMiwjRkZCMkE4LCNGRkYzODAsIzdFOEQ5MSwjRkZEOEIxLCNGQUYzRTAifSx0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZD10aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemU9dGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemV8fCIxIix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmdpdDA9ZmEodGhpcy5waWUxLDI1KXx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5naXQxPXRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmdpdDI9dGhpcy5waWUzfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5naXQzPXRoaXMucGllNHx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTMwfSksdGhpcy5naXQ0PXRoaXMucGllNXx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwfSksdGhpcy5naXQ1PXRoaXMucGllNnx8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6LTkwfSksdGhpcy5naXQ2PXRoaXMucGllN3x8SW4odGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmdpdDc9dGhpcy5waWU4fHxJbih0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmdpdEludjA9dGhpcy5naXRJbnYwfHxWaSh0aGlzLmdpdDApLHRoaXMuZ2l0SW52MT10aGlzLmdpdEludjF8fFZpKHRoaXMuZ2l0MSksdGhpcy5naXRJbnYyPXRoaXMuZ2l0SW52Mnx8VmkodGhpcy5naXQyKSx0aGlzLmdpdEludjM9dGhpcy5naXRJbnYzfHxWaSh0aGlzLmdpdDMpLHRoaXMuZ2l0SW52ND10aGlzLmdpdEludjR8fFZpKHRoaXMuZ2l0NCksdGhpcy5naXRJbnY1PXRoaXMuZ2l0SW52NXx8VmkodGhpcy5naXQ1KSx0aGlzLmdpdEludjY9dGhpcy5naXRJbnY2fHxWaSh0aGlzLmdpdDYpLHRoaXMuZ2l0SW52Nz10aGlzLmdpdEludjd8fFZpKHRoaXMuZ2l0NyksdGhpcy5icmFuY2hMYWJlbENvbG9yPXRoaXMuYnJhbmNoTGFiZWxDb2xvcnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMD10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDE9IndoaXRlIix0aGlzLmdpdEJyYW5jaExhYmVsMj10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDM9IndoaXRlIix0aGlzLmdpdEJyYW5jaExhYmVsND10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDU9dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw2PXRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNz10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy50YWdMYWJlbENvbG9yPXRoaXMudGFnTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kPXRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhZ0xhYmVsQm9yZGVyPXRoaXMudGFnQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhZ0xhYmVsRm9udFNpemU9dGhpcy50YWdMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5jb21taXRMYWJlbENvbG9yPXRoaXMuY29tbWl0TGFiZWxDb2xvcnx8dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQ9dGhpcy5jb21taXRMYWJlbEJhY2tncm91bmR8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jb21taXRMYWJlbEZvbnRTaXplPXRoaXMuY29tbWl0TGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkfHxUWCx0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW49dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVufHxDWH1jYWxjdWxhdGUocyl7aWYodHlwZW9mIHMhPSJvYmplY3QiKXt0aGlzLnVwZGF0ZUNvbG9ycygpO3JldHVybn1jb25zdCB1PU9iamVjdC5rZXlzKHMpO3UuZm9yRWFjaChkPT57dGhpc1tkXT1zW2RdfSksdGhpcy51cGRhdGVDb2xvcnMoKSx1LmZvckVhY2goZD0+e3RoaXNbZF09c1tkXX0pfX1jb25zdCBFNz17YmFzZTp7Z2V0VGhlbWVWYXJpYWJsZXM6TVB0fSxkYXJrOntnZXRUaGVtZVZhcmlhYmxlczpJUHR9LGRlZmF1bHQ6e2dldFRoZW1lVmFyaWFibGVzOmYyZX0sZm9yZXN0OntnZXRUaGVtZVZhcmlhYmxlczpQUHR9LG5ldXRyYWw6e2dldFRoZW1lVmFyaWFibGVzOmk9Pntjb25zdCBzPW5ldyBCUHQ7cmV0dXJuIHMuY2FsY3VsYXRlKGkpLHN9fX0sVDc9e2Zsb3djaGFydDp7dXNlTWF4V2lkdGg6ITAsdGl0bGVUb3BNYXJnaW46MjUsc3ViR3JhcGhUaXRsZU1hcmdpbjp7dG9wOjAsYm90dG9tOjB9LGRpYWdyYW1QYWRkaW5nOjgsaHRtbExhYmVsczohMCxub2RlU3BhY2luZzo1MCxyYW5rU3BhY2luZzo1MCxjdXJ2ZToiYmFzaXMiLHBhZGRpbmc6MTUsZGVmYXVsdFJlbmRlcmVyOiJkYWdyZS13cmFwcGVyIix3cmFwcGluZ1dpZHRoOjIwMH0sc2VxdWVuY2U6e3VzZU1heFdpZHRoOiEwLGhpZGVVbnVzZWRQYXJ0aWNpcGFudHM6ITEsYWN0aXZhdGlvbldpZHRoOjEwLGRpYWdyYW1NYXJnaW5YOjUwLGRpYWdyYW1NYXJnaW5ZOjEwLGFjdG9yTWFyZ2luOjUwLHdpZHRoOjE1MCxoZWlnaHQ6NjUsYm94TWFyZ2luOjEwLGJveFRleHRNYXJnaW46NSxub3RlTWFyZ2luOjEwLG1lc3NhZ2VNYXJnaW46MzUsbWVzc2FnZUFsaWduOiJjZW50ZXIiLG1pcnJvckFjdG9yczohMCxmb3JjZU1lbnVzOiExLGJvdHRvbU1hcmdpbkFkajoxLHJpZ2h0QW5nbGVzOiExLHNob3dTZXF1ZW5jZU51bWJlcnM6ITEsYWN0b3JGb250U2l6ZToxNCxhY3RvckZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxhY3RvckZvbnRXZWlnaHQ6NDAwLG5vdGVGb250U2l6ZToxNCxub3RlRm9udEZhbWlseTonInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyxub3RlRm9udFdlaWdodDo0MDAsbm90ZUFsaWduOiJjZW50ZXIiLG1lc3NhZ2VGb250U2l6ZToxNixtZXNzYWdlRm9udEZhbWlseTonInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyxtZXNzYWdlRm9udFdlaWdodDo0MDAsd3JhcDohMSx3cmFwUGFkZGluZzoxMCxsYWJlbEJveFdpZHRoOjUwLGxhYmVsQm94SGVpZ2h0OjIwfSxnYW50dDp7dXNlTWF4V2lkdGg6ITAsdGl0bGVUb3BNYXJnaW46MjUsYmFySGVpZ2h0OjIwLGJhckdhcDo0LHRvcFBhZGRpbmc6NTAscmlnaHRQYWRkaW5nOjc1LGxlZnRQYWRkaW5nOjc1LGdyaWRMaW5lU3RhcnRQYWRkaW5nOjM1LGZvbnRTaXplOjExLHNlY3Rpb25Gb250U2l6ZToxMSxudW1iZXJTZWN0aW9uU3R5bGVzOjQsYXhpc0Zvcm1hdDoiJVktJW0tJWQiLHRvcEF4aXM6ITEsZGlzcGxheU1vZGU6IiIsd2Vla2RheToic3VuZGF5In0sam91cm5leTp7dXNlTWF4V2lkdGg6ITAsZGlhZ3JhbU1hcmdpblg6NTAsZGlhZ3JhbU1hcmdpblk6MTAsbGVmdE1hcmdpbjoxNTAsd2lkdGg6MTUwLGhlaWdodDo1MCxib3hNYXJnaW46MTAsYm94VGV4dE1hcmdpbjo1LG5vdGVNYXJnaW46MTAsbWVzc2FnZU1hcmdpbjozNSxtZXNzYWdlQWxpZ246ImNlbnRlciIsYm90dG9tTWFyZ2luQWRqOjEscmlnaHRBbmdsZXM6ITEsdGFza0ZvbnRTaXplOjE0LHRhc2tGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsdGFza01hcmdpbjo1MCxhY3RpdmF0aW9uV2lkdGg6MTAsdGV4dFBsYWNlbWVudDoiZm8iLGFjdG9yQ29sb3VyczpbIiM4RkJDOEYiLCIjN0NGQzAwIiwiIzAwRkZGRiIsIiMyMEIyQUEiLCIjQjBFMEU2IiwiI0ZGRkZFMCJdLHNlY3Rpb25GaWxsczpbIiMxOTE5NzAiLCIjOEIwMDhCIiwiIzRCMDA4MiIsIiMyRjRGNEYiLCIjODAwMDAwIiwiIzhCNDUxMyIsIiMwMDAwOEIiXSxzZWN0aW9uQ29sb3VyczpbIiNmZmYiXX0sY2xhc3M6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGFycm93TWFya2VyQWJzb2x1dGU6ITEsZGl2aWRlck1hcmdpbjoxMCxwYWRkaW5nOjUsdGV4dEhlaWdodDoxMCxkZWZhdWx0UmVuZGVyZXI6ImRhZ3JlLXdyYXBwZXIiLGh0bWxMYWJlbHM6ITF9LHN0YXRlOnt1c2VNYXhXaWR0aDohMCx0aXRsZVRvcE1hcmdpbjoyNSxkaXZpZGVyTWFyZ2luOjEwLHNpemVVbml0OjUscGFkZGluZzo4LHRleHRIZWlnaHQ6MTAsdGl0bGVTaGlmdDotMTUsbm90ZU1hcmdpbjoxMCxmb3JrV2lkdGg6NzAsZm9ya0hlaWdodDo3LG1pbmlQYWRkaW5nOjIsZm9udFNpemVGYWN0b3I6NS4wMixmb250U2l6ZToyNCxsYWJlbEhlaWdodDoxNixlZGdlTGVuZ3RoRmFjdG9yOiIyMCIsY29tcG9zaXRUaXRsZVNpemU6MzUscmFkaXVzOjUsZGVmYXVsdFJlbmRlcmVyOiJkYWdyZS13cmFwcGVyIn0sZXI6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGRpYWdyYW1QYWRkaW5nOjIwLGxheW91dERpcmVjdGlvbjoiVEIiLG1pbkVudGl0eVdpZHRoOjEwMCxtaW5FbnRpdHlIZWlnaHQ6NzUsZW50aXR5UGFkZGluZzoxNSxzdHJva2U6ImdyYXkiLGZpbGw6ImhvbmV5ZGV3Iixmb250U2l6ZToxMn0scGllOnt1c2VNYXhXaWR0aDohMCx0ZXh0UG9zaXRpb246Ljc1fSxxdWFkcmFudENoYXJ0Ont1c2VNYXhXaWR0aDohMCxjaGFydFdpZHRoOjUwMCxjaGFydEhlaWdodDo1MDAsdGl0bGVGb250U2l6ZToyMCx0aXRsZVBhZGRpbmc6MTAscXVhZHJhbnRQYWRkaW5nOjUseEF4aXNMYWJlbFBhZGRpbmc6NSx5QXhpc0xhYmVsUGFkZGluZzo1LHhBeGlzTGFiZWxGb250U2l6ZToxNix5QXhpc0xhYmVsRm9udFNpemU6MTYscXVhZHJhbnRMYWJlbEZvbnRTaXplOjE2LHF1YWRyYW50VGV4dFRvcFBhZGRpbmc6NSxwb2ludFRleHRQYWRkaW5nOjUscG9pbnRMYWJlbEZvbnRTaXplOjEyLHBvaW50UmFkaXVzOjUseEF4aXNQb3NpdGlvbjoidG9wIix5QXhpc1Bvc2l0aW9uOiJsZWZ0IixxdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlV2lkdGg6MSxxdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGg6Mn0seHlDaGFydDp7dXNlTWF4V2lkdGg6ITAsd2lkdGg6NzAwLGhlaWdodDo1MDAsdGl0bGVGb250U2l6ZToyMCx0aXRsZVBhZGRpbmc6MTAsc2hvd1RpdGxlOiEwLHhBeGlzOnskcmVmOiIjLyRkZWZzL1hZQ2hhcnRBeGlzQ29uZmlnIixzaG93TGFiZWw6ITAsbGFiZWxGb250U2l6ZToxNCxsYWJlbFBhZGRpbmc6NSxzaG93VGl0bGU6ITAsdGl0bGVGb250U2l6ZToxNix0aXRsZVBhZGRpbmc6NSxzaG93VGljazohMCx0aWNrTGVuZ3RoOjUsdGlja1dpZHRoOjIsc2hvd0F4aXNMaW5lOiEwLGF4aXNMaW5lV2lkdGg6Mn0seUF4aXM6eyRyZWY6IiMvJGRlZnMvWFlDaGFydEF4aXNDb25maWciLHNob3dMYWJlbDohMCxsYWJlbEZvbnRTaXplOjE0LGxhYmVsUGFkZGluZzo1LHNob3dUaXRsZTohMCx0aXRsZUZvbnRTaXplOjE2LHRpdGxlUGFkZGluZzo1LHNob3dUaWNrOiEwLHRpY2tMZW5ndGg6NSx0aWNrV2lkdGg6MixzaG93QXhpc0xpbmU6ITAsYXhpc0xpbmVXaWR0aDoyfSxjaGFydE9yaWVudGF0aW9uOiJ2ZXJ0aWNhbCIscGxvdFJlc2VydmVkU3BhY2VQZXJjZW50OjUwfSxyZXF1aXJlbWVudDp7dXNlTWF4V2lkdGg6ITAscmVjdF9maWxsOiIjZjlmOWY5Iix0ZXh0X2NvbG9yOiIjMzMzIixyZWN0X2JvcmRlcl9zaXplOiIwLjVweCIscmVjdF9ib3JkZXJfY29sb3I6IiNiYmIiLHJlY3RfbWluX3dpZHRoOjIwMCxyZWN0X21pbl9oZWlnaHQ6MjAwLGZvbnRTaXplOjE0LHJlY3RfcGFkZGluZzoxMCxsaW5lX2hlaWdodDoyMH0sbWluZG1hcDp7dXNlTWF4V2lkdGg6ITAscGFkZGluZzoxMCxtYXhOb2RlV2lkdGg6MjAwfSx0aW1lbGluZTp7dXNlTWF4V2lkdGg6ITAsZGlhZ3JhbU1hcmdpblg6NTAsZGlhZ3JhbU1hcmdpblk6MTAsbGVmdE1hcmdpbjoxNTAsd2lkdGg6MTUwLGhlaWdodDo1MCxib3hNYXJnaW46MTAsYm94VGV4dE1hcmdpbjo1LG5vdGVNYXJnaW46MTAsbWVzc2FnZU1hcmdpbjozNSxtZXNzYWdlQWxpZ246ImNlbnRlciIsYm90dG9tTWFyZ2luQWRqOjEscmlnaHRBbmdsZXM6ITEsdGFza0ZvbnRTaXplOjE0LHRhc2tGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsdGFza01hcmdpbjo1MCxhY3RpdmF0aW9uV2lkdGg6MTAsdGV4dFBsYWNlbWVudDoiZm8iLGFjdG9yQ29sb3VyczpbIiM4RkJDOEYiLCIjN0NGQzAwIiwiIzAwRkZGRiIsIiMyMEIyQUEiLCIjQjBFMEU2IiwiI0ZGRkZFMCJdLHNlY3Rpb25GaWxsczpbIiMxOTE5NzAiLCIjOEIwMDhCIiwiIzRCMDA4MiIsIiMyRjRGNEYiLCIjODAwMDAwIiwiIzhCNDUxMyIsIiMwMDAwOEIiXSxzZWN0aW9uQ29sb3VyczpbIiNmZmYiXSxkaXNhYmxlTXVsdGljb2xvcjohMX0sZ2l0R3JhcGg6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGRpYWdyYW1QYWRkaW5nOjgsbm9kZUxhYmVsOnt3aWR0aDo3NSxoZWlnaHQ6MTAwLHg6LTI1LHk6MH0sbWFpbkJyYW5jaE5hbWU6Im1haW4iLG1haW5CcmFuY2hPcmRlcjowLHNob3dDb21taXRMYWJlbDohMCxzaG93QnJhbmNoZXM6ITAscm90YXRlQ29tbWl0TGFiZWw6ITAscGFyYWxsZWxDb21taXRzOiExLGFycm93TWFya2VyQWJzb2x1dGU6ITF9LGM0Ont1c2VNYXhXaWR0aDohMCxkaWFncmFtTWFyZ2luWDo1MCxkaWFncmFtTWFyZ2luWToxMCxjNFNoYXBlTWFyZ2luOjUwLGM0U2hhcGVQYWRkaW5nOjIwLHdpZHRoOjIxNixoZWlnaHQ6NjAsYm94TWFyZ2luOjEwLGM0U2hhcGVJblJvdzo0LG5leHRMaW5lUGFkZGluZ1g6MCxjNEJvdW5kYXJ5SW5Sb3c6MixwZXJzb25Gb250U2l6ZToxNCxwZXJzb25Gb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicscGVyc29uRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9wZXJzb25Gb250U2l6ZToxNCxleHRlcm5hbF9wZXJzb25Gb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfcGVyc29uRm9udFdlaWdodDoibm9ybWFsIixzeXN0ZW1Gb250U2l6ZToxNCxzeXN0ZW1Gb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsc3lzdGVtRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9zeXN0ZW1Gb250U2l6ZToxNCxleHRlcm5hbF9zeXN0ZW1Gb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfc3lzdGVtRm9udFdlaWdodDoibm9ybWFsIixzeXN0ZW1fZGJGb250U2l6ZToxNCxzeXN0ZW1fZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsc3lzdGVtX2RiRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9zeXN0ZW1fZGJGb250U2l6ZToxNCxleHRlcm5hbF9zeXN0ZW1fZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfc3lzdGVtX2RiRm9udFdlaWdodDoibm9ybWFsIixzeXN0ZW1fcXVldWVGb250U2l6ZToxNCxzeXN0ZW1fcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsc3lzdGVtX3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9zeXN0ZW1fcXVldWVGb250U2l6ZToxNCxleHRlcm5hbF9zeXN0ZW1fcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIixib3VuZGFyeUZvbnRTaXplOjE0LGJvdW5kYXJ5Rm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGJvdW5kYXJ5Rm9udFdlaWdodDoibm9ybWFsIixtZXNzYWdlRm9udFNpemU6MTIsbWVzc2FnZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxtZXNzYWdlRm9udFdlaWdodDoibm9ybWFsIixjb250YWluZXJGb250U2l6ZToxNCxjb250YWluZXJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29udGFpbmVyRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb250YWluZXJGb250U2l6ZToxNCxleHRlcm5hbF9jb250YWluZXJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29udGFpbmVyRm9udFdlaWdodDoibm9ybWFsIixjb250YWluZXJfZGJGb250U2l6ZToxNCxjb250YWluZXJfZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29udGFpbmVyX2RiRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb250YWluZXJfZGJGb250U2l6ZToxNCxleHRlcm5hbF9jb250YWluZXJfZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udFdlaWdodDoibm9ybWFsIixjb250YWluZXJfcXVldWVGb250U2l6ZToxNCxjb250YWluZXJfcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29udGFpbmVyX3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb250YWluZXJfcXVldWVGb250U2l6ZToxNCxleHRlcm5hbF9jb250YWluZXJfcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIixjb21wb25lbnRGb250U2l6ZToxNCxjb21wb25lbnRGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29tcG9uZW50Rm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb21wb25lbnRGb250U2l6ZToxNCxleHRlcm5hbF9jb21wb25lbnRGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29tcG9uZW50Rm9udFdlaWdodDoibm9ybWFsIixjb21wb25lbnRfZGJGb250U2l6ZToxNCxjb21wb25lbnRfZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29tcG9uZW50X2RiRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb21wb25lbnRfZGJGb250U2l6ZToxNCxleHRlcm5hbF9jb21wb25lbnRfZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udFdlaWdodDoibm9ybWFsIixjb21wb25lbnRfcXVldWVGb250U2l6ZToxNCxjb21wb25lbnRfcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29tcG9uZW50X3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250U2l6ZToxNCxleHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIix3cmFwOiEwLHdyYXBQYWRkaW5nOjEwLHBlcnNvbl9iZ19jb2xvcjoiIzA4NDI3QiIscGVyc29uX2JvcmRlcl9jb2xvcjoiIzA3M0I2RiIsZXh0ZXJuYWxfcGVyc29uX2JnX2NvbG9yOiIjNjg2ODY4IixleHRlcm5hbF9wZXJzb25fYm9yZGVyX2NvbG9yOiIjOEE4QThBIixzeXN0ZW1fYmdfY29sb3I6IiMxMTY4QkQiLHN5c3RlbV9ib3JkZXJfY29sb3I6IiMzQzdGQzAiLHN5c3RlbV9kYl9iZ19jb2xvcjoiIzExNjhCRCIsc3lzdGVtX2RiX2JvcmRlcl9jb2xvcjoiIzNDN0ZDMCIsc3lzdGVtX3F1ZXVlX2JnX2NvbG9yOiIjMTE2OEJEIixzeXN0ZW1fcXVldWVfYm9yZGVyX2NvbG9yOiIjM0M3RkMwIixleHRlcm5hbF9zeXN0ZW1fYmdfY29sb3I6IiM5OTk5OTkiLGV4dGVybmFsX3N5c3RlbV9ib3JkZXJfY29sb3I6IiM4QThBOEEiLGV4dGVybmFsX3N5c3RlbV9kYl9iZ19jb2xvcjoiIzk5OTk5OSIsZXh0ZXJuYWxfc3lzdGVtX2RiX2JvcmRlcl9jb2xvcjoiIzhBOEE4QSIsZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlX2JnX2NvbG9yOiIjOTk5OTk5IixleHRlcm5hbF9zeXN0ZW1fcXVldWVfYm9yZGVyX2NvbG9yOiIjOEE4QThBIixjb250YWluZXJfYmdfY29sb3I6IiM0MzhERDUiLGNvbnRhaW5lcl9ib3JkZXJfY29sb3I6IiMzQzdGQzAiLGNvbnRhaW5lcl9kYl9iZ19jb2xvcjoiIzQzOERENSIsY29udGFpbmVyX2RiX2JvcmRlcl9jb2xvcjoiIzNDN0ZDMCIsY29udGFpbmVyX3F1ZXVlX2JnX2NvbG9yOiIjNDM4REQ1Iixjb250YWluZXJfcXVldWVfYm9yZGVyX2NvbG9yOiIjM0M3RkMwIixleHRlcm5hbF9jb250YWluZXJfYmdfY29sb3I6IiNCM0IzQjMiLGV4dGVybmFsX2NvbnRhaW5lcl9ib3JkZXJfY29sb3I6IiNBNkE2QTYiLGV4dGVybmFsX2NvbnRhaW5lcl9kYl9iZ19jb2xvcjoiI0IzQjNCMyIsZXh0ZXJuYWxfY29udGFpbmVyX2RiX2JvcmRlcl9jb2xvcjoiI0E2QTZBNiIsZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlX2JnX2NvbG9yOiIjQjNCM0IzIixleHRlcm5hbF9jb250YWluZXJfcXVldWVfYm9yZGVyX2NvbG9yOiIjQTZBNkE2Iixjb21wb25lbnRfYmdfY29sb3I6IiM4NUJCRjAiLGNvbXBvbmVudF9ib3JkZXJfY29sb3I6IiM3OEE4RDgiLGNvbXBvbmVudF9kYl9iZ19jb2xvcjoiIzg1QkJGMCIsY29tcG9uZW50X2RiX2JvcmRlcl9jb2xvcjoiIzc4QThEOCIsY29tcG9uZW50X3F1ZXVlX2JnX2NvbG9yOiIjODVCQkYwIixjb21wb25lbnRfcXVldWVfYm9yZGVyX2NvbG9yOiIjNzhBOEQ4IixleHRlcm5hbF9jb21wb25lbnRfYmdfY29sb3I6IiNDQ0NDQ0MiLGV4dGVybmFsX2NvbXBvbmVudF9ib3JkZXJfY29sb3I6IiNCRkJGQkYiLGV4dGVybmFsX2NvbXBvbmVudF9kYl9iZ19jb2xvcjoiI0NDQ0NDQyIsZXh0ZXJuYWxfY29tcG9uZW50X2RiX2JvcmRlcl9jb2xvcjoiI0JGQkZCRiIsZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlX2JnX2NvbG9yOiIjQ0NDQ0NDIixleHRlcm5hbF9jb21wb25lbnRfcXVldWVfYm9yZGVyX2NvbG9yOiIjQkZCRkJGIn0sc2Fua2V5Ont1c2VNYXhXaWR0aDohMCx3aWR0aDo2MDAsaGVpZ2h0OjQwMCxsaW5rQ29sb3I6ImdyYWRpZW50Iixub2RlQWxpZ25tZW50OiJqdXN0aWZ5IixzaG93VmFsdWVzOiEwLHByZWZpeDoiIixzdWZmaXg6IiJ9LGJsb2NrOnt1c2VNYXhXaWR0aDohMCxwYWRkaW5nOjh9LHRoZW1lOiJkZWZhdWx0IixtYXhUZXh0U2l6ZTo1ZTQsbWF4RWRnZXM6NTAwLGRhcmtNb2RlOiExLGZvbnRGYW1pbHk6JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsnLGxvZ0xldmVsOjUsc2VjdXJpdHlMZXZlbDoic3RyaWN0IixzdGFydE9uTG9hZDohMCxhcnJvd01hcmtlckFic29sdXRlOiExLHNlY3VyZTpbInNlY3VyZSIsInNlY3VyaXR5TGV2ZWwiLCJzdGFydE9uTG9hZCIsIm1heFRleHRTaXplIiwibWF4RWRnZXMiXSxsZWdhY3lNYXRoTUw6ITEsZGV0ZXJtaW5pc3RpY0lkczohMSxmb250U2l6ZToxNn0sTVJlPXsuLi5UNyxkZXRlcm1pbmlzdGljSURTZWVkOnZvaWQgMCx0aGVtZUNTUzp2b2lkIDAsdGhlbWVWYXJpYWJsZXM6RTcuZGVmYXVsdC5nZXRUaGVtZVZhcmlhYmxlcygpLHNlcXVlbmNlOnsuLi5UNy5zZXF1ZW5jZSxtZXNzYWdlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMubWVzc2FnZUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5tZXNzYWdlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLm1lc3NhZ2VGb250V2VpZ2h0fX0sbm90ZUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLm5vdGVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMubm90ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5ub3RlRm9udFdlaWdodH19LGFjdG9yRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuYWN0b3JGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuYWN0b3JGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuYWN0b3JGb250V2VpZ2h0fX19LGdhbnR0OnsuLi5UNy5nYW50dCx0aWNrSW50ZXJ2YWw6dm9pZCAwLHVzZVdpZHRoOnZvaWQgMH0sYzQ6ey4uLlQ3LmM0LHVzZVdpZHRoOnZvaWQgMCxwZXJzb25Gb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5wZXJzb25Gb250RmFtaWx5LGZvbnRTaXplOnRoaXMucGVyc29uRm9udFNpemUsZm9udFdlaWdodDp0aGlzLnBlcnNvbkZvbnRXZWlnaHR9fSxleHRlcm5hbF9wZXJzb25Gb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9wZXJzb25Gb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfcGVyc29uRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX3BlcnNvbkZvbnRXZWlnaHR9fSxzeXN0ZW1Gb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5zeXN0ZW1Gb250RmFtaWx5LGZvbnRTaXplOnRoaXMuc3lzdGVtRm9udFNpemUsZm9udFdlaWdodDp0aGlzLnN5c3RlbUZvbnRXZWlnaHR9fSxleHRlcm5hbF9zeXN0ZW1Gb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9zeXN0ZW1Gb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfc3lzdGVtRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX3N5c3RlbUZvbnRXZWlnaHR9fSxzeXN0ZW1fZGJGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5zeXN0ZW1fZGJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuc3lzdGVtX2RiRm9udFNpemUsZm9udFdlaWdodDp0aGlzLnN5c3RlbV9kYkZvbnRXZWlnaHR9fSxleHRlcm5hbF9zeXN0ZW1fZGJGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9zeXN0ZW1fZGJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfc3lzdGVtX2RiRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX3N5c3RlbV9kYkZvbnRXZWlnaHR9fSxzeXN0ZW1fcXVldWVGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5zeXN0ZW1fcXVldWVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuc3lzdGVtX3F1ZXVlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLnN5c3RlbV9xdWV1ZUZvbnRXZWlnaHR9fSxleHRlcm5hbF9zeXN0ZW1fcXVldWVGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9zeXN0ZW1fcXVldWVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRXZWlnaHR9fSxjb250YWluZXJGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5jb250YWluZXJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuY29udGFpbmVyRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmNvbnRhaW5lckZvbnRXZWlnaHR9fSxleHRlcm5hbF9jb250YWluZXJGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9jb250YWluZXJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX2NvbnRhaW5lckZvbnRXZWlnaHR9fSxjb250YWluZXJfZGJGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5jb250YWluZXJfZGJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuY29udGFpbmVyX2RiRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmNvbnRhaW5lcl9kYkZvbnRXZWlnaHR9fSxleHRlcm5hbF9jb250YWluZXJfZGJGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9jb250YWluZXJfZGJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRXZWlnaHR9fSxjb250YWluZXJfcXVldWVGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5jb250YWluZXJfcXVldWVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuY29udGFpbmVyX3F1ZXVlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmNvbnRhaW5lcl9xdWV1ZUZvbnRXZWlnaHR9fSxleHRlcm5hbF9jb250YWluZXJfcXVldWVGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9jb250YWluZXJfcXVldWVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRXZWlnaHR9fSxjb21wb25lbnRGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5jb21wb25lbnRGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuY29tcG9uZW50Rm9udFNpemUsZm9udFdlaWdodDp0aGlzLmNvbXBvbmVudEZvbnRXZWlnaHR9fSxleHRlcm5hbF9jb21wb25lbnRGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9jb21wb25lbnRGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50Rm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX2NvbXBvbmVudEZvbnRXZWlnaHR9fSxjb21wb25lbnRfZGJGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5jb21wb25lbnRfZGJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuY29tcG9uZW50X2RiRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmNvbXBvbmVudF9kYkZvbnRXZWlnaHR9fSxleHRlcm5hbF9jb21wb25lbnRfZGJGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9jb21wb25lbnRfZGJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRXZWlnaHR9fSxjb21wb25lbnRfcXVldWVGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5jb21wb25lbnRfcXVldWVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuY29tcG9uZW50X3F1ZXVlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmNvbXBvbmVudF9xdWV1ZUZvbnRXZWlnaHR9fSxleHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRXZWlnaHR9fSxib3VuZGFyeUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmJvdW5kYXJ5Rm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmJvdW5kYXJ5Rm9udFNpemUsZm9udFdlaWdodDp0aGlzLmJvdW5kYXJ5Rm9udFdlaWdodH19LG1lc3NhZ2VGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5tZXNzYWdlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLm1lc3NhZ2VGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMubWVzc2FnZUZvbnRXZWlnaHR9fX0scGllOnsuLi5UNy5waWUsdXNlV2lkdGg6OTg0fSx4eUNoYXJ0OnsuLi5UNy54eUNoYXJ0LHVzZVdpZHRoOnZvaWQgMH0scmVxdWlyZW1lbnQ6ey4uLlQ3LnJlcXVpcmVtZW50LHVzZVdpZHRoOnZvaWQgMH0sZ2l0R3JhcGg6ey4uLlQ3LmdpdEdyYXBoLHVzZU1heFdpZHRoOiExfSxzYW5rZXk6ey4uLlQ3LnNhbmtleSx1c2VNYXhXaWR0aDohMX19LERSZT0oaSxzPSIiKT0+T2JqZWN0LmtleXMoaSkucmVkdWNlKCh1LGQpPT5BcnJheS5pc0FycmF5KGlbZF0pP3U6dHlwZW9mIGlbZF09PSJvYmplY3QiJiZpW2RdIT09bnVsbD9bLi4udSxzK2QsLi4uRFJlKGlbZF0sIiIpXTpbLi4udSxzK2RdLFtdKSxGUHQ9bmV3IFNldChEUmUoTVJlLCIiKSksc2g9TVJlLFNYPWk9PntpZihYZS5kZWJ1Zygic2FuaXRpemVEaXJlY3RpdmUgY2FsbGVkIHdpdGgiLGkpLCEodHlwZW9mIGkhPSJvYmplY3QifHxpPT1udWxsKSl7aWYoQXJyYXkuaXNBcnJheShpKSl7aS5mb3JFYWNoKHM9PlNYKHMpKTtyZXR1cm59Zm9yKGNvbnN0IHMgb2YgT2JqZWN0LmtleXMoaSkpe2lmKFhlLmRlYnVnKCJDaGVja2luZyBrZXkiLHMpLHMuc3RhcnRzV2l0aCgiX18iKXx8cy5pbmNsdWRlcygicHJvdG8iKXx8cy5pbmNsdWRlcygiY29uc3RyIil8fCFGUHQuaGFzKHMpfHxpW3NdPT1udWxsKXtYZS5kZWJ1Zygic2FuaXRpemUgZGVsZXRpbmcga2V5OiAiLHMpLGRlbGV0ZSBpW3NdO2NvbnRpbnVlfWlmKHR5cGVvZiBpW3NdPT0ib2JqZWN0Iil7WGUuZGVidWcoInNhbml0aXppbmcgb2JqZWN0IixzKSxTWChpW3NdKTtjb250aW51ZX1jb25zdCB1PVsidGhlbWVDU1MiLCJmb250RmFtaWx5IiwiYWx0Rm9udEZhbWlseSJdO2Zvcihjb25zdCBkIG9mIHUpcy5pbmNsdWRlcyhkKSYmKFhlLmRlYnVnKCJzYW5pdGl6aW5nIGNzcyBvcHRpb24iLHMpLGlbc109UlB0KGlbc10pKX1pZihpLnRoZW1lVmFyaWFibGVzKWZvcihjb25zdCBzIG9mIE9iamVjdC5rZXlzKGkudGhlbWVWYXJpYWJsZXMpKXtjb25zdCB1PWkudGhlbWVWYXJpYWJsZXNbc107dSE9bnVsbCYmdS5tYXRjaCYmIXUubWF0Y2goL15bXGQgIiMlKCksLjtBLVphLXpdKyQvKSYmKGkudGhlbWVWYXJpYWJsZXNbc109IiIpfVhlLmRlYnVnKCJBZnRlciBzYW5pdGl6YXRpb24iLGkpfX0sUlB0PWk9PntsZXQgcz0wLHU9MDtmb3IoY29uc3QgZCBvZiBpKXtpZihzPHUpcmV0dXJuInsgLyogRVJST1I6IFVuYmFsYW5jZWQgQ1NTICovIH0iO2Q9PT0ieyI/cysrOmQ9PT0ifSImJnUrK31yZXR1cm4gcyE9PXU/InsgLyogRVJST1I6IFVuYmFsYW5jZWQgQ1NTICovIH0iOml9LElSZT0vXi17M31ccypbXG5ccl0oLio/KVtcblxyXS17M31ccypbXG5ccl0rL3MsVUY9LyV7Mn17XHMqKD86KFx3Kylccyo6fChcdyspKVxzKig/OihcdyspfCgoPzooPyF9JXsyfSkufFxyP1xuKSopKT9ccyooPzp9JXsyfSk/L2dpLGpQdD0vXHMqJSUuKlxuL2dtO2NsYXNzIE9SZSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHMpe3N1cGVyKHMpLHRoaXMubmFtZT0iVW5rbm93bkRpYWdyYW1FcnJvciJ9fWNvbnN0IGREPXt9LF9YPWZ1bmN0aW9uKGkscyl7aT1pLnJlcGxhY2UoSVJlLCIiKS5yZXBsYWNlKFVGLCIiKS5yZXBsYWNlKGpQdCxgCmApO2Zvcihjb25zdFt1LHtkZXRlY3RvcjpkfV1vZiBPYmplY3QuZW50cmllcyhkRCkpaWYoZChpLHMpKXJldHVybiB1O3Rocm93IG5ldyBPUmUoYE5vIGRpYWdyYW0gdHlwZSBkZXRlY3RlZCBtYXRjaGluZyBnaXZlbiBjb25maWd1cmF0aW9uIGZvciB0ZXh0OiAke2l9YCl9LE5SZT0oLi4uaSk9Pntmb3IoY29uc3R7aWQ6cyxkZXRlY3Rvcjp1LGxvYWRlcjpkfW9mIGkpUFJlKHMsdSxkKX0sUFJlPShpLHMsdSk9PntkRFtpXT9YZS5lcnJvcihgRGV0ZWN0b3Igd2l0aCBrZXkgJHtpfSBhbHJlYWR5IGV4aXN0c2ApOmREW2ldPXtkZXRlY3RvcjpzLGxvYWRlcjp1fSxYZS5kZWJ1ZyhgRGV0ZWN0b3Igd2l0aCBrZXkgJHtpfSBhZGRlZCR7dT8iIHdpdGggbG9hZGVyIjoiIn1gKX0sJFB0PWk9PmREW2ldLmxvYWRlcixkMmU9KGkscyx7ZGVwdGg6dT0yLGNsb2JiZXI6ZD0hMX09e30pPT57Y29uc3QgcD17ZGVwdGg6dSxjbG9iYmVyOmR9O3JldHVybiBBcnJheS5pc0FycmF5KHMpJiYhQXJyYXkuaXNBcnJheShpKT8ocy5mb3JFYWNoKHY9PmQyZShpLHYscCkpLGkpOkFycmF5LmlzQXJyYXkocykmJkFycmF5LmlzQXJyYXkoaSk/KHMuZm9yRWFjaCh2PT57aS5pbmNsdWRlcyh2KXx8aS5wdXNoKHYpfSksaSk6aT09PXZvaWQgMHx8dTw9MD9pIT1udWxsJiZ0eXBlb2YgaT09Im9iamVjdCImJnR5cGVvZiBzPT0ib2JqZWN0Ij9PYmplY3QuYXNzaWduKGkscyk6czoocyE9PXZvaWQgMCYmdHlwZW9mIGk9PSJvYmplY3QiJiZ0eXBlb2Ygcz09Im9iamVjdCImJk9iamVjdC5rZXlzKHMpLmZvckVhY2godj0+e3R5cGVvZiBzW3ZdPT0ib2JqZWN0IiYmKGlbdl09PT12b2lkIDB8fHR5cGVvZiBpW3ZdPT0ib2JqZWN0Iik/KGlbdl09PT12b2lkIDAmJihpW3ZdPUFycmF5LmlzQXJyYXkoc1t2XSk/W106e30pLGlbdl09ZDJlKGlbdl0sc1t2XSx7ZGVwdGg6dS0xLGNsb2JiZXI6ZH0pKTooZHx8dHlwZW9mIGlbdl0hPSJvYmplY3QiJiZ0eXBlb2Ygc1t2XSE9Im9iamVjdCIpJiYoaVt2XT1zW3ZdKX0pLGkpfSxpZD1kMmU7dmFyIHpQdD10eXBlb2YgZ2xvYmFsPT0ib2JqZWN0IiYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWw7Y29uc3QgQlJlPXpQdDt2YXIgcVB0PXR5cGVvZiBzZWxmPT0ib2JqZWN0IiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsSFB0PUJSZXx8cVB0fHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpO2NvbnN0IE4zPUhQdDt2YXIgVlB0PU4zLlN5bWJvbDtjb25zdCBJdj1WUHQ7dmFyIEZSZT1PYmplY3QucHJvdG90eXBlLFVQdD1GUmUuaGFzT3duUHJvcGVydHksR1B0PUZSZS50b1N0cmluZyxHRj1Jdj9Jdi50b1N0cmluZ1RhZzp2b2lkIDA7ZnVuY3Rpb24gS1B0KGkpe3ZhciBzPVVQdC5jYWxsKGksR0YpLHU9aVtHRl07dHJ5e2lbR0ZdPXZvaWQgMDt2YXIgZD0hMH1jYXRjaHt9dmFyIHA9R1B0LmNhbGwoaSk7cmV0dXJuIGQmJihzP2lbR0ZdPXU6ZGVsZXRlIGlbR0ZdKSxwfXZhciBXUHQ9T2JqZWN0LnByb3RvdHlwZSxZUHQ9V1B0LnRvU3RyaW5nO2Z1bmN0aW9uIFhQdChpKXtyZXR1cm4gWVB0LmNhbGwoaSl9dmFyIFFQdD0iW29iamVjdCBOdWxsXSIsSlB0PSJbb2JqZWN0IFVuZGVmaW5lZF0iLFJSZT1Jdj9Jdi50b1N0cmluZ1RhZzp2b2lkIDA7ZnVuY3Rpb24gQUMoaSl7cmV0dXJuIGk9PW51bGw/aT09PXZvaWQgMD9KUHQ6UVB0OlJSZSYmUlJlIGluIE9iamVjdChpKT9LUHQoaSk6WFB0KGkpfWZ1bmN0aW9uIGFtKGkpe3ZhciBzPXR5cGVvZiBpO3JldHVybiBpIT1udWxsJiYocz09Im9iamVjdCJ8fHM9PSJmdW5jdGlvbiIpfXZhciBaUHQ9IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iLGVCdD0iW29iamVjdCBGdW5jdGlvbl0iLHRCdD0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLG5CdD0iW29iamVjdCBQcm94eV0iO2Z1bmN0aW9uIGdEKGkpe2lmKCFhbShpKSlyZXR1cm4hMTt2YXIgcz1BQyhpKTtyZXR1cm4gcz09ZUJ0fHxzPT10QnR8fHM9PVpQdHx8cz09bkJ0fXZhciByQnQ9TjNbIl9fY29yZS1qc19zaGFyZWRfXyJdO2NvbnN0IGcyZT1yQnQ7dmFyIGpSZT1mdW5jdGlvbigpe3ZhciBpPS9bXi5dKyQvLmV4ZWMoZzJlJiZnMmUua2V5cyYmZzJlLmtleXMuSUVfUFJPVE98fCIiKTtyZXR1cm4gaT8iU3ltYm9sKHNyYylfMS4iK2k6IiJ9KCk7ZnVuY3Rpb24gaUJ0KGkpe3JldHVybiEhalJlJiZqUmUgaW4gaX12YXIgc0J0PUZ1bmN0aW9uLnByb3RvdHlwZSxhQnQ9c0J0LnRvU3RyaW5nO2Z1bmN0aW9uIExDKGkpe2lmKGkhPW51bGwpe3RyeXtyZXR1cm4gYUJ0LmNhbGwoaSl9Y2F0Y2h7fXRyeXtyZXR1cm4gaSsiIn1jYXRjaHt9fXJldHVybiIifXZhciBvQnQ9L1tcXF4kLiorPygpW1xde318XS9nLGNCdD0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyx1QnQ9RnVuY3Rpb24ucHJvdG90eXBlLGxCdD1PYmplY3QucHJvdG90eXBlLGhCdD11QnQudG9TdHJpbmcsZkJ0PWxCdC5oYXNPd25Qcm9wZXJ0eSxkQnQ9UmVnRXhwKCJeIitoQnQuY2FsbChmQnQpLnJlcGxhY2Uob0J0LCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO2Z1bmN0aW9uIGdCdChpKXtpZighYW0oaSl8fGlCdChpKSlyZXR1cm4hMTt2YXIgcz1nRChpKT9kQnQ6Y0J0O3JldHVybiBzLnRlc3QoTEMoaSkpfWZ1bmN0aW9uIHBCdChpLHMpe3JldHVybiBpPT1udWxsP3ZvaWQgMDppW3NdfWZ1bmN0aW9uIE1DKGkscyl7dmFyIHU9cEJ0KGkscyk7cmV0dXJuIGdCdCh1KT91OnZvaWQgMH12YXIgYkJ0PU1DKE9iamVjdCwiY3JlYXRlIik7Y29uc3QgS0Y9YkJ0O2Z1bmN0aW9uIG1CdCgpe3RoaXMuX19kYXRhX189S0Y/S0YobnVsbCk6e30sdGhpcy5zaXplPTB9ZnVuY3Rpb24gdkJ0KGkpe3ZhciBzPXRoaXMuaGFzKGkpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tpXTtyZXR1cm4gdGhpcy5zaXplLT1zPzE6MCxzfXZhciB3QnQ9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLHlCdD1PYmplY3QucHJvdG90eXBlLHhCdD15QnQuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24ga0J0KGkpe3ZhciBzPXRoaXMuX19kYXRhX187aWYoS0Ype3ZhciB1PXNbaV07cmV0dXJuIHU9PT13QnQ/dm9pZCAwOnV9cmV0dXJuIHhCdC5jYWxsKHMsaSk/c1tpXTp2b2lkIDB9dmFyIEVCdD1PYmplY3QucHJvdG90eXBlLFRCdD1FQnQuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gQ0J0KGkpe3ZhciBzPXRoaXMuX19kYXRhX187cmV0dXJuIEtGP3NbaV0hPT12b2lkIDA6VEJ0LmNhbGwocyxpKX12YXIgU0J0PSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjtmdW5jdGlvbiBfQnQoaSxzKXt2YXIgdT10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKGkpPzA6MSx1W2ldPUtGJiZzPT09dm9pZCAwP1NCdDpzLHRoaXN9ZnVuY3Rpb24gREMoaSl7dmFyIHM9LTEsdT1pPT1udWxsPzA6aS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3M8dTspe3ZhciBkPWlbc107dGhpcy5zZXQoZFswXSxkWzFdKX19REMucHJvdG90eXBlLmNsZWFyPW1CdCxEQy5wcm90b3R5cGUuZGVsZXRlPXZCdCxEQy5wcm90b3R5cGUuZ2V0PWtCdCxEQy5wcm90b3R5cGUuaGFzPUNCdCxEQy5wcm90b3R5cGUuc2V0PV9CdDtmdW5jdGlvbiBBQnQoKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIHBEKGkscyl7cmV0dXJuIGk9PT1zfHxpIT09aSYmcyE9PXN9ZnVuY3Rpb24gQVgoaSxzKXtmb3IodmFyIHU9aS5sZW5ndGg7dS0tOylpZihwRChpW3VdWzBdLHMpKXJldHVybiB1O3JldHVybi0xfXZhciBMQnQ9QXJyYXkucHJvdG90eXBlLE1CdD1MQnQuc3BsaWNlO2Z1bmN0aW9uIERCdChpKXt2YXIgcz10aGlzLl9fZGF0YV9fLHU9QVgocyxpKTtpZih1PDApcmV0dXJuITE7dmFyIGQ9cy5sZW5ndGgtMTtyZXR1cm4gdT09ZD9zLnBvcCgpOk1CdC5jYWxsKHMsdSwxKSwtLXRoaXMuc2l6ZSwhMH1mdW5jdGlvbiBJQnQoaSl7dmFyIHM9dGhpcy5fX2RhdGFfXyx1PUFYKHMsaSk7cmV0dXJuIHU8MD92b2lkIDA6c1t1XVsxXX1mdW5jdGlvbiBPQnQoaSl7cmV0dXJuIEFYKHRoaXMuX19kYXRhX18saSk+LTF9ZnVuY3Rpb24gTkJ0KGkscyl7dmFyIHU9dGhpcy5fX2RhdGFfXyxkPUFYKHUsaSk7cmV0dXJuIGQ8MD8oKyt0aGlzLnNpemUsdS5wdXNoKFtpLHNdKSk6dVtkXVsxXT1zLHRoaXN9ZnVuY3Rpb24gQzcoaSl7dmFyIHM9LTEsdT1pPT1udWxsPzA6aS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3M8dTspe3ZhciBkPWlbc107dGhpcy5zZXQoZFswXSxkWzFdKX19QzcucHJvdG90eXBlLmNsZWFyPUFCdCxDNy5wcm90b3R5cGUuZGVsZXRlPURCdCxDNy5wcm90b3R5cGUuZ2V0PUlCdCxDNy5wcm90b3R5cGUuaGFzPU9CdCxDNy5wcm90b3R5cGUuc2V0PU5CdDt2YXIgUEJ0PU1DKE4zLCJNYXAiKTtjb25zdCBXRj1QQnQ7ZnVuY3Rpb24gQkJ0KCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgREMsbWFwOm5ldyhXRnx8QzcpLHN0cmluZzpuZXcgREN9fWZ1bmN0aW9uIEZCdChpKXt2YXIgcz10eXBlb2YgaTtyZXR1cm4gcz09InN0cmluZyJ8fHM9PSJudW1iZXIifHxzPT0ic3ltYm9sInx8cz09ImJvb2xlYW4iP2khPT0iX19wcm90b19fIjppPT09bnVsbH1mdW5jdGlvbiBMWChpLHMpe3ZhciB1PWkuX19kYXRhX187cmV0dXJuIEZCdChzKT91W3R5cGVvZiBzPT0ic3RyaW5nIj8ic3RyaW5nIjoiaGFzaCJdOnUubWFwfWZ1bmN0aW9uIFJCdChpKXt2YXIgcz1MWCh0aGlzLGkpLmRlbGV0ZShpKTtyZXR1cm4gdGhpcy5zaXplLT1zPzE6MCxzfWZ1bmN0aW9uIGpCdChpKXtyZXR1cm4gTFgodGhpcyxpKS5nZXQoaSl9ZnVuY3Rpb24gJEJ0KGkpe3JldHVybiBMWCh0aGlzLGkpLmhhcyhpKX1mdW5jdGlvbiB6QnQoaSxzKXt2YXIgdT1MWCh0aGlzLGkpLGQ9dS5zaXplO3JldHVybiB1LnNldChpLHMpLHRoaXMuc2l6ZSs9dS5zaXplPT1kPzA6MSx0aGlzfWZ1bmN0aW9uIFM3KGkpe3ZhciBzPS0xLHU9aT09bnVsbD8wOmkubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytzPHU7KXt2YXIgZD1pW3NdO3RoaXMuc2V0KGRbMF0sZFsxXSl9fVM3LnByb3RvdHlwZS5jbGVhcj1CQnQsUzcucHJvdG90eXBlLmRlbGV0ZT1SQnQsUzcucHJvdG90eXBlLmdldD1qQnQsUzcucHJvdG90eXBlLmhhcz0kQnQsUzcucHJvdG90eXBlLnNldD16QnQ7dmFyIHFCdD0iRXhwZWN0ZWQgYSBmdW5jdGlvbiI7ZnVuY3Rpb24gYkQoaSxzKXtpZih0eXBlb2YgaSE9ImZ1bmN0aW9uInx8cyE9bnVsbCYmdHlwZW9mIHMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihxQnQpO3ZhciB1PWZ1bmN0aW9uKCl7dmFyIGQ9YXJndW1lbnRzLHA9cz9zLmFwcGx5KHRoaXMsZCk6ZFswXSx2PXUuY2FjaGU7aWYodi5oYXMocCkpcmV0dXJuIHYuZ2V0KHApO3ZhciBiPWkuYXBwbHkodGhpcyxkKTtyZXR1cm4gdS5jYWNoZT12LnNldChwLGIpfHx2LGJ9O3JldHVybiB1LmNhY2hlPW5ldyhiRC5DYWNoZXx8UzcpLHV9YkQuQ2FjaGU9Uzc7ZnVuY3Rpb24gSEJ0KCl7dGhpcy5fX2RhdGFfXz1uZXcgQzcsdGhpcy5zaXplPTB9ZnVuY3Rpb24gVkJ0KGkpe3ZhciBzPXRoaXMuX19kYXRhX18sdT1zLmRlbGV0ZShpKTtyZXR1cm4gdGhpcy5zaXplPXMuc2l6ZSx1fWZ1bmN0aW9uIFVCdChpKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoaSl9ZnVuY3Rpb24gR0J0KGkpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhpKX12YXIgS0J0PTIwMDtmdW5jdGlvbiBXQnQoaSxzKXt2YXIgdT10aGlzLl9fZGF0YV9fO2lmKHUgaW5zdGFuY2VvZiBDNyl7dmFyIGQ9dS5fX2RhdGFfXztpZighV0Z8fGQubGVuZ3RoPEtCdC0xKXJldHVybiBkLnB1c2goW2ksc10pLHRoaXMuc2l6ZT0rK3Uuc2l6ZSx0aGlzO3U9dGhpcy5fX2RhdGFfXz1uZXcgUzcoZCl9cmV0dXJuIHUuc2V0KGkscyksdGhpcy5zaXplPXUuc2l6ZSx0aGlzfWZ1bmN0aW9uIFAzKGkpe3ZhciBzPXRoaXMuX19kYXRhX189bmV3IEM3KGkpO3RoaXMuc2l6ZT1zLnNpemV9UDMucHJvdG90eXBlLmNsZWFyPUhCdCxQMy5wcm90b3R5cGUuZGVsZXRlPVZCdCxQMy5wcm90b3R5cGUuZ2V0PVVCdCxQMy5wcm90b3R5cGUuaGFzPUdCdCxQMy5wcm90b3R5cGUuc2V0PVdCdDt2YXIgWUJ0PWZ1bmN0aW9uKCl7dHJ5e3ZhciBpPU1DKE9iamVjdCwiZGVmaW5lUHJvcGVydHkiKTtyZXR1cm4gaSh7fSwiIix7fSksaX1jYXRjaHt9fSgpO2NvbnN0IE1YPVlCdDtmdW5jdGlvbiBEWChpLHMsdSl7cz09Il9fcHJvdG9fXyImJk1YP01YKGkscyx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6dSx3cml0YWJsZTohMH0pOmlbc109dX1mdW5jdGlvbiBwMmUoaSxzLHUpeyh1IT09dm9pZCAwJiYhcEQoaVtzXSx1KXx8dT09PXZvaWQgMCYmIShzIGluIGkpKSYmRFgoaSxzLHUpfWZ1bmN0aW9uIFhCdChpKXtyZXR1cm4gZnVuY3Rpb24ocyx1LGQpe2Zvcih2YXIgcD0tMSx2PU9iamVjdChzKSxiPWQocykseT1iLmxlbmd0aDt5LS07KXt2YXIgVD1iW2k/eTorK3BdO2lmKHUodltUXSxULHYpPT09ITEpYnJlYWt9cmV0dXJuIHN9fXZhciBRQnQ9WEJ0KCk7Y29uc3QgYjJlPVFCdDt2YXIgJFJlPXR5cGVvZiBleHBvcnRzPT0ib2JqZWN0IiYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMselJlPSRSZSYmdHlwZW9mIG1vZHVsZT09Im9iamVjdCImJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLEpCdD16UmUmJnpSZS5leHBvcnRzPT09JFJlLHFSZT1KQnQ/TjMuQnVmZmVyOnZvaWQgMCxIUmU9cVJlP3FSZS5hbGxvY1Vuc2FmZTp2b2lkIDA7ZnVuY3Rpb24gVlJlKGkscyl7aWYocylyZXR1cm4gaS5zbGljZSgpO3ZhciB1PWkubGVuZ3RoLGQ9SFJlP0hSZSh1KTpuZXcgaS5jb25zdHJ1Y3Rvcih1KTtyZXR1cm4gaS5jb3B5KGQpLGR9dmFyIFpCdD1OMy5VaW50OEFycmF5O2NvbnN0IElYPVpCdDtmdW5jdGlvbiBtMmUoaSl7dmFyIHM9bmV3IGkuY29uc3RydWN0b3IoaS5ieXRlTGVuZ3RoKTtyZXR1cm4gbmV3IElYKHMpLnNldChuZXcgSVgoaSkpLHN9ZnVuY3Rpb24gVVJlKGkscyl7dmFyIHU9cz9tMmUoaS5idWZmZXIpOmkuYnVmZmVyO3JldHVybiBuZXcgaS5jb25zdHJ1Y3Rvcih1LGkuYnl0ZU9mZnNldCxpLmxlbmd0aCl9ZnVuY3Rpb24gR1JlKGkscyl7dmFyIHU9LTEsZD1pLmxlbmd0aDtmb3Ioc3x8KHM9QXJyYXkoZCkpOysrdTxkOylzW3VdPWlbdV07cmV0dXJuIHN9dmFyIEtSZT1PYmplY3QuY3JlYXRlLGVGdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGkoKXt9cmV0dXJuIGZ1bmN0aW9uKHMpe2lmKCFhbShzKSlyZXR1cm57fTtpZihLUmUpcmV0dXJuIEtSZShzKTtpLnByb3RvdHlwZT1zO3ZhciB1PW5ldyBpO3JldHVybiBpLnByb3RvdHlwZT12b2lkIDAsdX19KCk7Y29uc3QgdEZ0PWVGdDtmdW5jdGlvbiBXUmUoaSxzKXtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkocyh1KSl9fXZhciBuRnQ9V1JlKE9iamVjdC5nZXRQcm90b3R5cGVPZixPYmplY3QpO2NvbnN0IHYyZT1uRnQ7dmFyIHJGdD1PYmplY3QucHJvdG90eXBlO2Z1bmN0aW9uIE9YKGkpe3ZhciBzPWkmJmkuY29uc3RydWN0b3IsdT10eXBlb2Ygcz09ImZ1bmN0aW9uIiYmcy5wcm90b3R5cGV8fHJGdDtyZXR1cm4gaT09PXV9ZnVuY3Rpb24gWVJlKGkpe3JldHVybiB0eXBlb2YgaS5jb25zdHJ1Y3Rvcj09ImZ1bmN0aW9uIiYmIU9YKGkpP3RGdCh2MmUoaSkpOnt9fWZ1bmN0aW9uIHE0KGkpe3JldHVybiBpIT1udWxsJiZ0eXBlb2YgaT09Im9iamVjdCJ9dmFyIGlGdD0iW29iamVjdCBBcmd1bWVudHNdIjtmdW5jdGlvbiBYUmUoaSl7cmV0dXJuIHE0KGkpJiZBQyhpKT09aUZ0fXZhciBRUmU9T2JqZWN0LnByb3RvdHlwZSxzRnQ9UVJlLmhhc093blByb3BlcnR5LGFGdD1RUmUucHJvcGVydHlJc0VudW1lcmFibGUsb0Z0PVhSZShmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP1hSZTpmdW5jdGlvbihpKXtyZXR1cm4gcTQoaSkmJnNGdC5jYWxsKGksImNhbGxlZSIpJiYhYUZ0LmNhbGwoaSwiY2FsbGVlIil9O2NvbnN0IG1EPW9GdDt2YXIgY0Z0PUFycmF5LmlzQXJyYXk7Y29uc3QgRDA9Y0Z0O3ZhciB1RnQ9OTAwNzE5OTI1NDc0MDk5MTtmdW5jdGlvbiB3MmUoaSl7cmV0dXJuIHR5cGVvZiBpPT0ibnVtYmVyIiYmaT4tMSYmaSUxPT0wJiZpPD11RnR9ZnVuY3Rpb24gdzkoaSl7cmV0dXJuIGkhPW51bGwmJncyZShpLmxlbmd0aCkmJiFnRChpKX1mdW5jdGlvbiBKUmUoaSl7cmV0dXJuIHE0KGkpJiZ3OShpKX1mdW5jdGlvbiBsRnQoKXtyZXR1cm4hMX12YXIgWlJlPXR5cGVvZiBleHBvcnRzPT0ib2JqZWN0IiYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsZWplPVpSZSYmdHlwZW9mIG1vZHVsZT09Im9iamVjdCImJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLGhGdD1lamUmJmVqZS5leHBvcnRzPT09WlJlLHRqZT1oRnQ/TjMuQnVmZmVyOnZvaWQgMCxmRnQ9dGplP3RqZS5pc0J1ZmZlcjp2b2lkIDAsZEZ0PWZGdHx8bEZ0O2NvbnN0IHZEPWRGdDt2YXIgZ0Z0PSJbb2JqZWN0IE9iamVjdF0iLHBGdD1GdW5jdGlvbi5wcm90b3R5cGUsYkZ0PU9iamVjdC5wcm90b3R5cGUsbmplPXBGdC50b1N0cmluZyxtRnQ9YkZ0Lmhhc093blByb3BlcnR5LHZGdD1uamUuY2FsbChPYmplY3QpO2Z1bmN0aW9uIHJqZShpKXtpZighcTQoaSl8fEFDKGkpIT1nRnQpcmV0dXJuITE7dmFyIHM9djJlKGkpO2lmKHM9PT1udWxsKXJldHVybiEwO3ZhciB1PW1GdC5jYWxsKHMsImNvbnN0cnVjdG9yIikmJnMuY29uc3RydWN0b3I7cmV0dXJuIHR5cGVvZiB1PT0iZnVuY3Rpb24iJiZ1IGluc3RhbmNlb2YgdSYmbmplLmNhbGwodSk9PXZGdH12YXIgd0Z0PSJbb2JqZWN0IEFyZ3VtZW50c10iLHlGdD0iW29iamVjdCBBcnJheV0iLHhGdD0iW29iamVjdCBCb29sZWFuXSIsa0Z0PSJbb2JqZWN0IERhdGVdIixFRnQ9IltvYmplY3QgRXJyb3JdIixURnQ9IltvYmplY3QgRnVuY3Rpb25dIixDRnQ9IltvYmplY3QgTWFwXSIsU0Z0PSJbb2JqZWN0IE51bWJlcl0iLF9GdD0iW29iamVjdCBPYmplY3RdIixBRnQ9IltvYmplY3QgUmVnRXhwXSIsTEZ0PSJbb2JqZWN0IFNldF0iLE1GdD0iW29iamVjdCBTdHJpbmddIixERnQ9IltvYmplY3QgV2Vha01hcF0iLElGdD0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLE9GdD0iW29iamVjdCBEYXRhVmlld10iLE5GdD0iW29iamVjdCBGbG9hdDMyQXJyYXldIixQRnQ9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsQkZ0PSJbb2JqZWN0IEludDhBcnJheV0iLEZGdD0iW29iamVjdCBJbnQxNkFycmF5XSIsUkZ0PSJbb2JqZWN0IEludDMyQXJyYXldIixqRnQ9IltvYmplY3QgVWludDhBcnJheV0iLCRGdD0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLHpGdD0iW29iamVjdCBVaW50MTZBcnJheV0iLHFGdD0iW29iamVjdCBVaW50MzJBcnJheV0iLGFoPXt9O2FoW05GdF09YWhbUEZ0XT1haFtCRnRdPWFoW0ZGdF09YWhbUkZ0XT1haFtqRnRdPWFoWyRGdF09YWhbekZ0XT1haFtxRnRdPSEwLGFoW3dGdF09YWhbeUZ0XT1haFtJRnRdPWFoW3hGdF09YWhbT0Z0XT1haFtrRnRdPWFoW0VGdF09YWhbVEZ0XT1haFtDRnRdPWFoW1NGdF09YWhbX0Z0XT1haFtBRnRdPWFoW0xGdF09YWhbTUZ0XT1haFtERnRdPSExO2Z1bmN0aW9uIEhGdChpKXtyZXR1cm4gcTQoaSkmJncyZShpLmxlbmd0aCkmJiEhYWhbQUMoaSldfWZ1bmN0aW9uIE5YKGkpe3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gaShzKX19dmFyIGlqZT10eXBlb2YgZXhwb3J0cz09Im9iamVjdCImJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLFlGPWlqZSYmdHlwZW9mIG1vZHVsZT09Im9iamVjdCImJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLFZGdD1ZRiYmWUYuZXhwb3J0cz09PWlqZSx5MmU9VkZ0JiZCUmUucHJvY2VzcyxVRnQ9ZnVuY3Rpb24oKXt0cnl7dmFyIGk9WUYmJllGLnJlcXVpcmUmJllGLnJlcXVpcmUoInV0aWwiKS50eXBlcztyZXR1cm4gaXx8eTJlJiZ5MmUuYmluZGluZyYmeTJlLmJpbmRpbmcoInV0aWwiKX1jYXRjaHt9fSgpO2NvbnN0IHdEPVVGdDt2YXIgc2plPXdEJiZ3RC5pc1R5cGVkQXJyYXksR0Z0PXNqZT9OWChzamUpOkhGdDtjb25zdCBQWD1HRnQ7ZnVuY3Rpb24geDJlKGkscyl7aWYoIShzPT09ImNvbnN0cnVjdG9yIiYmdHlwZW9mIGlbc109PSJmdW5jdGlvbiIpJiZzIT0iX19wcm90b19fIilyZXR1cm4gaVtzXX12YXIgS0Z0PU9iamVjdC5wcm90b3R5cGUsV0Z0PUtGdC5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBCWChpLHMsdSl7dmFyIGQ9aVtzXTsoIShXRnQuY2FsbChpLHMpJiZwRChkLHUpKXx8dT09PXZvaWQgMCYmIShzIGluIGkpKSYmRFgoaSxzLHUpfWZ1bmN0aW9uIFhGKGkscyx1LGQpe3ZhciBwPSF1O3V8fCh1PXt9KTtmb3IodmFyIHY9LTEsYj1zLmxlbmd0aDsrK3Y8Yjspe3ZhciB5PXNbdl0sVD1kP2QodVt5XSxpW3ldLHksdSxpKTp2b2lkIDA7VD09PXZvaWQgMCYmKFQ9aVt5XSkscD9EWCh1LHksVCk6QlgodSx5LFQpfXJldHVybiB1fWZ1bmN0aW9uIFlGdChpLHMpe2Zvcih2YXIgdT0tMSxkPUFycmF5KGkpOysrdTxpOylkW3VdPXModSk7cmV0dXJuIGR9dmFyIFhGdD05MDA3MTk5MjU0NzQwOTkxLFFGdD0vXig/OjB8WzEtOV1cZCopJC87ZnVuY3Rpb24gRlgoaSxzKXt2YXIgdT10eXBlb2YgaTtyZXR1cm4gcz1zPz9YRnQsISFzJiYodT09Im51bWJlciJ8fHUhPSJzeW1ib2wiJiZRRnQudGVzdChpKSkmJmk+LTEmJmklMT09MCYmaTxzfXZhciBKRnQ9T2JqZWN0LnByb3RvdHlwZSxaRnQ9SkZ0Lmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGFqZShpLHMpe3ZhciB1PUQwKGkpLGQ9IXUmJm1EKGkpLHA9IXUmJiFkJiZ2RChpKSx2PSF1JiYhZCYmIXAmJlBYKGkpLGI9dXx8ZHx8cHx8dix5PWI/WUZ0KGkubGVuZ3RoLFN0cmluZyk6W10sVD15Lmxlbmd0aDtmb3IodmFyIF8gaW4gaSkoc3x8WkZ0LmNhbGwoaSxfKSkmJiEoYiYmKF89PSJsZW5ndGgifHxwJiYoXz09Im9mZnNldCJ8fF89PSJwYXJlbnQiKXx8diYmKF89PSJidWZmZXIifHxfPT0iYnl0ZUxlbmd0aCJ8fF89PSJieXRlT2Zmc2V0Iil8fEZYKF8sVCkpKSYmeS5wdXNoKF8pO3JldHVybiB5fWZ1bmN0aW9uIGVSdChpKXt2YXIgcz1bXTtpZihpIT1udWxsKWZvcih2YXIgdSBpbiBPYmplY3QoaSkpcy5wdXNoKHUpO3JldHVybiBzfXZhciB0UnQ9T2JqZWN0LnByb3RvdHlwZSxuUnQ9dFJ0Lmhhc093blByb3BlcnR5O2Z1bmN0aW9uIHJSdChpKXtpZighYW0oaSkpcmV0dXJuIGVSdChpKTt2YXIgcz1PWChpKSx1PVtdO2Zvcih2YXIgZCBpbiBpKWQ9PSJjb25zdHJ1Y3RvciImJihzfHwhblJ0LmNhbGwoaSxkKSl8fHUucHVzaChkKTtyZXR1cm4gdX1mdW5jdGlvbiBJQyhpKXtyZXR1cm4gdzkoaSk/YWplKGksITApOnJSdChpKX1mdW5jdGlvbiBpUnQoaSl7cmV0dXJuIFhGKGksSUMoaSkpfWZ1bmN0aW9uIHNSdChpLHMsdSxkLHAsdixiKXt2YXIgeT14MmUoaSx1KSxUPXgyZShzLHUpLF89Yi5nZXQoVCk7aWYoXyl7cDJlKGksdSxfKTtyZXR1cm59dmFyIEE9dj92KHksVCx1KyIiLGkscyxiKTp2b2lkIDAsUD1BPT09dm9pZCAwO2lmKFApe3ZhciBSPUQwKFQpLEY9IVImJnZEKFQpLGo9IVImJiFGJiZQWChUKTtBPVQsUnx8Rnx8aj9EMCh5KT9BPXk6SlJlKHkpP0E9R1JlKHkpOkY/KFA9ITEsQT1WUmUoVCwhMCkpOmo/KFA9ITEsQT1VUmUoVCwhMCkpOkE9W106cmplKFQpfHxtRChUKT8oQT15LG1EKHkpP0E9aVJ0KHkpOighYW0oeSl8fGdEKHkpKSYmKEE9WVJlKFQpKSk6UD0hMX1QJiYoYi5zZXQoVCxBKSxwKEEsVCxkLHYsYiksYi5kZWxldGUoVCkpLHAyZShpLHUsQSl9ZnVuY3Rpb24gb2plKGkscyx1LGQscCl7aSE9PXMmJmIyZShzLGZ1bmN0aW9uKHYsYil7aWYocHx8KHA9bmV3IFAzKSxhbSh2KSlzUnQoaSxzLGIsdSxvamUsZCxwKTtlbHNle3ZhciB5PWQ/ZCh4MmUoaSxiKSx2LGIrIiIsaSxzLHApOnZvaWQgMDt5PT09dm9pZCAwJiYoeT12KSxwMmUoaSxiLHkpfX0sSUMpfWZ1bmN0aW9uIE9DKGkpe3JldHVybiBpfWZ1bmN0aW9uIGFSdChpLHMsdSl7c3dpdGNoKHUubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIGkuY2FsbChzKTtjYXNlIDE6cmV0dXJuIGkuY2FsbChzLHVbMF0pO2Nhc2UgMjpyZXR1cm4gaS5jYWxsKHMsdVswXSx1WzFdKTtjYXNlIDM6cmV0dXJuIGkuY2FsbChzLHVbMF0sdVsxXSx1WzJdKX1yZXR1cm4gaS5hcHBseShzLHUpfXZhciBjamU9TWF0aC5tYXg7ZnVuY3Rpb24gdWplKGkscyx1KXtyZXR1cm4gcz1jamUocz09PXZvaWQgMD9pLmxlbmd0aC0xOnMsMCksZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLHA9LTEsdj1jamUoZC5sZW5ndGgtcywwKSxiPUFycmF5KHYpOysrcDx2OyliW3BdPWRbcytwXTtwPS0xO2Zvcih2YXIgeT1BcnJheShzKzEpOysrcDxzOyl5W3BdPWRbcF07cmV0dXJuIHlbc109dShiKSxhUnQoaSx0aGlzLHkpfX1mdW5jdGlvbiB5RChpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaX19dmFyIG9SdD1NWD9mdW5jdGlvbihpLHMpe3JldHVybiBNWChpLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOnlEKHMpLHdyaXRhYmxlOiEwfSl9Ok9DO2NvbnN0IGNSdD1vUnQ7dmFyIHVSdD04MDAsbFJ0PTE2LGhSdD1EYXRlLm5vdztmdW5jdGlvbiBmUnQoaSl7dmFyIHM9MCx1PTA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQ9aFJ0KCkscD1sUnQtKGQtdSk7aWYodT1kLHA+MCl7aWYoKytzPj11UnQpcmV0dXJuIGFyZ3VtZW50c1swXX1lbHNlIHM9MDtyZXR1cm4gaS5hcHBseSh2b2lkIDAsYXJndW1lbnRzKX19dmFyIGRSdD1mUnQoY1J0KTtjb25zdCBsamU9ZFJ0O2Z1bmN0aW9uIFJYKGkscyl7cmV0dXJuIGxqZSh1amUoaSxzLE9DKSxpKyIiKX1mdW5jdGlvbiBRRihpLHMsdSl7aWYoIWFtKHUpKXJldHVybiExO3ZhciBkPXR5cGVvZiBzO3JldHVybihkPT0ibnVtYmVyIj93OSh1KSYmRlgocyx1Lmxlbmd0aCk6ZD09InN0cmluZyImJnMgaW4gdSk/cEQodVtzXSxpKTohMX1mdW5jdGlvbiBnUnQoaSl7cmV0dXJuIFJYKGZ1bmN0aW9uKHMsdSl7dmFyIGQ9LTEscD11Lmxlbmd0aCx2PXA+MT91W3AtMV06dm9pZCAwLGI9cD4yP3VbMl06dm9pZCAwO2Zvcih2PWkubGVuZ3RoPjMmJnR5cGVvZiB2PT0iZnVuY3Rpb24iPyhwLS0sdik6dm9pZCAwLGImJlFGKHVbMF0sdVsxXSxiKSYmKHY9cDwzP3ZvaWQgMDp2LHA9MSkscz1PYmplY3Qocyk7KytkPHA7KXt2YXIgeT11W2RdO3kmJmkocyx5LGQsdil9cmV0dXJuIHN9KX12YXIgcFJ0PWdSdChmdW5jdGlvbihpLHMsdSl7b2plKGkscyx1KX0pO2NvbnN0IGpYPXBSdCxoamU9IuKAiyIsYlJ0PXtjdXJ2ZUJhc2lzOkZGLGN1cnZlQmFzaXNDbG9zZWQ6TE50LGN1cnZlQmFzaXNPcGVuOk1OdCxjdXJ2ZUJ1bXBYOl9OdCxjdXJ2ZUJ1bXBZOkFOdCxjdXJ2ZUJ1bmRsZTpETnQsY3VydmVDYXJkaW5hbENsb3NlZDpPTnQsY3VydmVDYXJkaW5hbE9wZW46Tk50LGN1cnZlQ2FyZGluYWw6SU50LGN1cnZlQ2F0bXVsbFJvbUNsb3NlZDpCTnQsY3VydmVDYXRtdWxsUm9tT3BlbjpGTnQsY3VydmVDYXRtdWxsUm9tOlBOdCxjdXJ2ZUxpbmVhcjprcCxjdXJ2ZUxpbmVhckNsb3NlZDpSTnQsY3VydmVNb25vdG9uZVg6ak50LGN1cnZlTW9ub3RvbmVZOiROdCxjdXJ2ZU5hdHVyYWw6ek50LGN1cnZlU3RlcDpxTnQsY3VydmVTdGVwQWZ0ZXI6Vk50LGN1cnZlU3RlcEJlZm9yZTpITnR9LG1SdD0vXHMqKD86KFx3KykoPz06KTp8KFx3KykpXHMqKD86KFx3Kyl8KCg/Oig/IX0lezJ9KS58XHI/XG4pKikpP1xzKig/On0lezJ9KT8vZ2ksdlJ0PWZ1bmN0aW9uKGkscyl7Y29uc3QgdT1mamUoaSwvKD86aW5pdFxiKXwoPzppbml0aWFsaXplXGIpLyk7bGV0IGQ9e307aWYoQXJyYXkuaXNBcnJheSh1KSl7Y29uc3QgYj11Lm1hcCh5PT55LmFyZ3MpO1NYKGIpLGQ9aWQoZCxbLi4uYl0pfWVsc2UgZD11LmFyZ3M7aWYoIWQpcmV0dXJuO2xldCBwPV9YKGkscyk7Y29uc3Qgdj0iY29uZmlnIjtyZXR1cm4gZFt2XSE9PXZvaWQgMCYmKHA9PT0iZmxvd2NoYXJ0LXYyIiYmKHA9ImZsb3djaGFydCIpLGRbcF09ZFt2XSxkZWxldGUgZFt2XSksZH0sZmplPWZ1bmN0aW9uKGkscz1udWxsKXt0cnl7Y29uc3QgdT1uZXcgUmVnRXhwKGBbJV17Mn0oPyFbe10ke21SdC5zb3VyY2V9KSg/PVt9XVslXXsyfSkuKgpgLCJpZyIpO2k9aS50cmltKCkucmVwbGFjZSh1LCIiKS5yZXBsYWNlKC8nL2dtLCciJyksWGUuZGVidWcoYERldGVjdGluZyBkaWFncmFtIGRpcmVjdGl2ZSR7cyE9PW51bGw/IiB0eXBlOiIrczoiIn0gYmFzZWQgb24gdGhlIHRleHQ6JHtpfWApO2xldCBkO2NvbnN0IHA9W107Zm9yKDsoZD1VRi5leGVjKGkpKSE9PW51bGw7KWlmKGQuaW5kZXg9PT1VRi5sYXN0SW5kZXgmJlVGLmxhc3RJbmRleCsrLGQmJiFzfHxzJiZkWzFdJiZkWzFdLm1hdGNoKHMpfHxzJiZkWzJdJiZkWzJdLm1hdGNoKHMpKXtjb25zdCB2PWRbMV0/ZFsxXTpkWzJdLGI9ZFszXT9kWzNdLnRyaW0oKTpkWzRdP0pTT04ucGFyc2UoZFs0XS50cmltKCkpOm51bGw7cC5wdXNoKHt0eXBlOnYsYXJnczpifSl9cmV0dXJuIHAubGVuZ3RoPT09MD97dHlwZTppLGFyZ3M6bnVsbH06cC5sZW5ndGg9PT0xP3BbMF06cH1jYXRjaCh1KXtyZXR1cm4gWGUuZXJyb3IoYEVSUk9SOiAke3UubWVzc2FnZX0gLSBVbmFibGUgdG8gcGFyc2UgZGlyZWN0aXZlIHR5cGU6ICcke3N9JyBiYXNlZCBvbiB0aGUgdGV4dDogJyR7aX0nYCkse3R5cGU6dm9pZCAwLGFyZ3M6bnVsbH19fSx3UnQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGkucmVwbGFjZShVRiwiIil9LHlSdD1mdW5jdGlvbihpLHMpe2Zvcihjb25zdFt1LGRdb2Ygcy5lbnRyaWVzKCkpaWYoZC5tYXRjaChpKSlyZXR1cm4gdTtyZXR1cm4tMX07ZnVuY3Rpb24gT3YoaSxzKXtpZighaSlyZXR1cm4gcztjb25zdCB1PWBjdXJ2ZSR7aS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStpLnNsaWNlKDEpfWA7cmV0dXJuIGJSdFt1XT8/c31mdW5jdGlvbiB4UnQoaSxzKXtjb25zdCB1PWkudHJpbSgpO2lmKHUpcmV0dXJuIHMuc2VjdXJpdHlMZXZlbCE9PSJsb29zZSI/cDkuc2FuaXRpemVVcmwodSk6dX1jb25zdCBrUnQ9KGksLi4ucyk9Pntjb25zdCB1PWkuc3BsaXQoIi4iKSxkPXUubGVuZ3RoLTEscD11W2RdO2xldCB2PXdpbmRvdztmb3IobGV0IGI9MDtiPGQ7YisrKWlmKHY9dlt1W2JdXSwhdil7WGUuZXJyb3IoYEZ1bmN0aW9uIG5hbWU6ICR7aX0gbm90IGZvdW5kIGluIHdpbmRvd2ApO3JldHVybn12W3BdKC4uLnMpfTtmdW5jdGlvbiBkamUoaSxzKXtyZXR1cm4haXx8IXM/MDpNYXRoLnNxcnQoTWF0aC5wb3cocy54LWkueCwyKStNYXRoLnBvdyhzLnktaS55LDIpKX1mdW5jdGlvbiBFUnQoaSl7bGV0IHMsdT0wO2kuZm9yRWFjaChwPT57dSs9ZGplKHAscykscz1wfSk7Y29uc3QgZD11LzI7cmV0dXJuIGsyZShpLGQpfWZ1bmN0aW9uIFRSdChpKXtyZXR1cm4gaS5sZW5ndGg9PT0xP2lbMF06RVJ0KGkpfWNvbnN0IGdqZT0oaSxzPTIpPT57Y29uc3QgdT1NYXRoLnBvdygxMCxzKTtyZXR1cm4gTWF0aC5yb3VuZChpKnUpL3V9LGsyZT0oaSxzKT0+e2xldCB1LGQ9cztmb3IoY29uc3QgcCBvZiBpKXtpZih1KXtjb25zdCB2PWRqZShwLHUpO2lmKHY8ZClkLT12O2Vsc2V7Y29uc3QgYj1kL3Y7aWYoYjw9MClyZXR1cm4gdTtpZihiPj0xKXJldHVybnt4OnAueCx5OnAueX07aWYoYj4wJiZiPDEpcmV0dXJue3g6Z2plKCgxLWIpKnUueCtiKnAueCw1KSx5OmdqZSgoMS1iKSp1LnkrYipwLnksNSl9fX11PXB9dGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCBhIHN1aXRhYmxlIHBvaW50IGZvciB0aGUgZ2l2ZW4gZGlzdGFuY2UiKX0sQ1J0PShpLHMsdSk9PntYZS5pbmZvKGBvdXIgcG9pbnRzICR7SlNPTi5zdHJpbmdpZnkocyl9YCksc1swXSE9PXUmJihzPXMucmV2ZXJzZSgpKTtjb25zdCBwPWsyZShzLDI1KSx2PWk/MTA6NSxiPU1hdGguYXRhbjIoc1swXS55LXAueSxzWzBdLngtcC54KSx5PXt4OjAseTowfTtyZXR1cm4geS54PU1hdGguc2luKGIpKnYrKHNbMF0ueCtwLngpLzIseS55PS1NYXRoLmNvcyhiKSp2KyhzWzBdLnkrcC55KS8yLHl9O2Z1bmN0aW9uIFNSdChpLHMsdSl7Y29uc3QgZD1zdHJ1Y3R1cmVkQ2xvbmUodSk7WGUuaW5mbygib3VyIHBvaW50cyIsZCkscyE9PSJzdGFydF9sZWZ0IiYmcyE9PSJzdGFydF9yaWdodCImJmQucmV2ZXJzZSgpO2NvbnN0IHA9MjUraSx2PWsyZShkLHApLGI9MTAraSouNSx5PU1hdGguYXRhbjIoZFswXS55LXYueSxkWzBdLngtdi54KSxUPXt4OjAseTowfTtyZXR1cm4gcz09PSJzdGFydF9sZWZ0Ij8oVC54PU1hdGguc2luKHkrTWF0aC5QSSkqYisoZFswXS54K3YueCkvMixULnk9LU1hdGguY29zKHkrTWF0aC5QSSkqYisoZFswXS55K3YueSkvMik6cz09PSJlbmRfcmlnaHQiPyhULng9TWF0aC5zaW4oeS1NYXRoLlBJKSpiKyhkWzBdLngrdi54KS8yLTUsVC55PS1NYXRoLmNvcyh5LU1hdGguUEkpKmIrKGRbMF0ueSt2LnkpLzItNSk6cz09PSJlbmRfbGVmdCI/KFQueD1NYXRoLnNpbih5KSpiKyhkWzBdLngrdi54KS8yLTUsVC55PS1NYXRoLmNvcyh5KSpiKyhkWzBdLnkrdi55KS8yLTUpOihULng9TWF0aC5zaW4oeSkqYisoZFswXS54K3YueCkvMixULnk9LU1hdGguY29zKHkpKmIrKGRbMF0ueSt2LnkpLzIpLFR9ZnVuY3Rpb24gb20oaSl7bGV0IHM9IiIsdT0iIjtmb3IoY29uc3QgZCBvZiBpKWQhPT12b2lkIDAmJihkLnN0YXJ0c1dpdGgoImNvbG9yOiIpfHxkLnN0YXJ0c1dpdGgoInRleHQtYWxpZ246Iik/dT11K2QrIjsiOnM9cytkKyI7Iik7cmV0dXJue3N0eWxlOnMsbGFiZWxTdHlsZTp1fX1sZXQgcGplPTA7Y29uc3QgYmplPSgpPT4ocGplKyssImlkLSIrTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsMTIpKyItIitwamUpO2Z1bmN0aW9uIF9SdChpKXtsZXQgcz0iIjtjb25zdCB1PSIwMTIzNDU2Nzg5YWJjZGVmIixkPXUubGVuZ3RoO2ZvcihsZXQgcD0wO3A8aTtwKyspcys9dS5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmQpKTtyZXR1cm4gc31jb25zdCBtamU9aT0+X1J0KGkubGVuZ3RoKSxBUnQ9ZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCxmaWxsOnZvaWQgMCxhbmNob3I6InN0YXJ0IixzdHlsZToiIzY2NiIsd2lkdGg6MTAwLGhlaWdodDoxMDAsdGV4dE1hcmdpbjowLHJ4OjAscnk6MCx2YWxpZ246dm9pZCAwLHRleHQ6IiJ9fSxMUnQ9ZnVuY3Rpb24oaSxzKXtjb25zdCB1PXMudGV4dC5yZXBsYWNlKGNpLmxpbmVCcmVha1JlZ2V4LCIgIiksWyxkXT1OQyhzLmZvbnRTaXplKSxwPWkuYXBwZW5kKCJ0ZXh0Iik7cC5hdHRyKCJ4IixzLngpLHAuYXR0cigieSIscy55KSxwLnN0eWxlKCJ0ZXh0LWFuY2hvciIscy5hbmNob3IpLHAuc3R5bGUoImZvbnQtZmFtaWx5IixzLmZvbnRGYW1pbHkpLHAuc3R5bGUoImZvbnQtc2l6ZSIsZCkscC5zdHlsZSgiZm9udC13ZWlnaHQiLHMuZm9udFdlaWdodCkscC5hdHRyKCJmaWxsIixzLmZpbGwpLHMuY2xhc3MhPT12b2lkIDAmJnAuYXR0cigiY2xhc3MiLHMuY2xhc3MpO2NvbnN0IHY9cC5hcHBlbmQoInRzcGFuIik7cmV0dXJuIHYuYXR0cigieCIscy54K3MudGV4dE1hcmdpbioyKSx2LmF0dHIoImZpbGwiLHMuZmlsbCksdi50ZXh0KHUpLHB9LHZqZT1iRCgoaSxzLHUpPT57aWYoIWl8fCh1PU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIixqb2luV2l0aDoiPGJyLz4ifSx1KSxjaS5saW5lQnJlYWtSZWdleC50ZXN0KGkpKSlyZXR1cm4gaTtjb25zdCBkPWkuc3BsaXQoIiAiKSxwPVtdO2xldCB2PSIiO3JldHVybiBkLmZvckVhY2goKGIseSk9Pntjb25zdCBUPUg0KGAke2J9IGAsdSksXz1INCh2LHUpO2lmKFQ+cyl7Y29uc3R7aHlwaGVuYXRlZFN0cmluZ3M6UixyZW1haW5pbmdXb3JkOkZ9PU1SdChiLHMsIi0iLHUpO3AucHVzaCh2LC4uLlIpLHY9Rn1lbHNlIF8rVD49cz8ocC5wdXNoKHYpLHY9Yik6dj1bdixiXS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpO3krMT09PWQubGVuZ3RoJiZwLnB1c2godil9KSxwLmZpbHRlcihiPT5iIT09IiIpLmpvaW4odS5qb2luV2l0aCl9LChpLHMsdSk9PmAke2l9JHtzfSR7dS5mb250U2l6ZX0ke3UuZm9udFdlaWdodH0ke3UuZm9udEZhbWlseX0ke3Uuam9pbldpdGh9YCksTVJ0PWJEKChpLHMsdT0iLSIsZCk9PntkPU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIixtYXJnaW46MH0sZCk7Y29uc3QgcD1bLi4uaV0sdj1bXTtsZXQgYj0iIjtyZXR1cm4gcC5mb3JFYWNoKCh5LFQpPT57Y29uc3QgXz1gJHtifSR7eX1gO2lmKEg0KF8sZCk+PXMpe2NvbnN0IFA9VCsxLFI9cC5sZW5ndGg9PT1QLEY9YCR7X30ke3V9YDt2LnB1c2goUj9fOkYpLGI9IiJ9ZWxzZSBiPV99KSx7aHlwaGVuYXRlZFN0cmluZ3M6dixyZW1haW5pbmdXb3JkOmJ9fSwoaSxzLHU9Ii0iLGQpPT5gJHtpfSR7c30ke3V9JHtkLmZvbnRTaXplfSR7ZC5mb250V2VpZ2h0fSR7ZC5mb250RmFtaWx5fWApO2Z1bmN0aW9uIEUyZShpLHMpe3JldHVybiBUMmUoaSxzKS5oZWlnaHR9ZnVuY3Rpb24gSDQoaSxzKXtyZXR1cm4gVDJlKGkscykud2lkdGh9Y29uc3QgVDJlPWJEKChpLHMpPT57Y29uc3R7Zm9udFNpemU6dT0xMixmb250RmFtaWx5OmQ9IkFyaWFsIixmb250V2VpZ2h0OnA9NDAwfT1zO2lmKCFpKXJldHVybnt3aWR0aDowLGhlaWdodDowfTtjb25zdFssdl09TkModSksYj1bInNhbnMtc2VyaWYiLGRdLHk9aS5zcGxpdChjaS5saW5lQnJlYWtSZWdleCksVD1bXSxfPUlyKCJib2R5Iik7aWYoIV8ucmVtb3ZlKXJldHVybnt3aWR0aDowLGhlaWdodDowLGxpbmVIZWlnaHQ6MH07Y29uc3QgQT1fLmFwcGVuZCgic3ZnIik7Zm9yKGNvbnN0IFIgb2YgYil7bGV0IEY9MDtjb25zdCBqPXt3aWR0aDowLGhlaWdodDowLGxpbmVIZWlnaHQ6MH07Zm9yKGNvbnN0IEsgb2YgeSl7Y29uc3QgZWU9QVJ0KCk7ZWUudGV4dD1LfHxoamU7Y29uc3QgaWU9TFJ0KEEsZWUpLnN0eWxlKCJmb250LXNpemUiLHYpLnN0eWxlKCJmb250LXdlaWdodCIscCkuc3R5bGUoImZvbnQtZmFtaWx5IixSKSxvZT0oaWUuX2dyb3Vwc3x8aWUpWzBdWzBdLmdldEJCb3goKTtpZihvZS53aWR0aD09PTAmJm9lLmhlaWdodD09PTApdGhyb3cgbmV3IEVycm9yKCJzdmcgZWxlbWVudCBub3QgaW4gcmVuZGVyIHRyZWUiKTtqLndpZHRoPU1hdGgucm91bmQoTWF0aC5tYXgoai53aWR0aCxvZS53aWR0aCkpLEY9TWF0aC5yb3VuZChvZS5oZWlnaHQpLGouaGVpZ2h0Kz1GLGoubGluZUhlaWdodD1NYXRoLnJvdW5kKE1hdGgubWF4KGoubGluZUhlaWdodCxGKSl9VC5wdXNoKGopfUEucmVtb3ZlKCk7Y29uc3QgUD1pc05hTihUWzFdLmhlaWdodCl8fGlzTmFOKFRbMV0ud2lkdGgpfHxpc05hTihUWzFdLmxpbmVIZWlnaHQpfHxUWzBdLmhlaWdodD5UWzFdLmhlaWdodCYmVFswXS53aWR0aD5UWzFdLndpZHRoJiZUWzBdLmxpbmVIZWlnaHQ+VFsxXS5saW5lSGVpZ2h0PzA6MTtyZXR1cm4gVFtQXX0sKGkscyk9PmAke2l9JHtzLmZvbnRTaXplfSR7cy5mb250V2VpZ2h0fSR7cy5mb250RmFtaWx5fWApO2NsYXNzIERSdHtjb25zdHJ1Y3RvcihzPSExLHUpe3RoaXMuY291bnQ9MCx0aGlzLmNvdW50PXU/dS5sZW5ndGg6MCx0aGlzLm5leHQ9cz8oKT0+dGhpcy5jb3VudCsrOigpPT5EYXRlLm5vdygpfX1sZXQgJFg7Y29uc3QgSVJ0PWZ1bmN0aW9uKGkpe3JldHVybiAkWD0kWHx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksaT1lc2NhcGUoaSkucmVwbGFjZSgvJTI2L2csIiYiKS5yZXBsYWNlKC8lMjMvZywiIyIpLnJlcGxhY2UoLyUzQi9nLCI7IiksJFguaW5uZXJIVE1MPWksdW5lc2NhcGUoJFgudGV4dENvbnRlbnQpfTtmdW5jdGlvbiB3amUoaSl7cmV0dXJuInN0ciJpbiBpfWNvbnN0IE9SdD0oaSxzLHUsZCk9Pnt2YXIgdjtpZighZClyZXR1cm47Y29uc3QgcD0odj1pLm5vZGUoKSk9PW51bGw/dm9pZCAwOnYuZ2V0QkJveCgpO3AmJmkuYXBwZW5kKCJ0ZXh0IikudGV4dChkKS5hdHRyKCJ4IixwLngrcC53aWR0aC8yKS5hdHRyKCJ5IiwtdSkuYXR0cigiY2xhc3MiLHMpfSxOQz1pPT57aWYodHlwZW9mIGk9PSJudW1iZXIiKXJldHVybltpLGkrInB4Il07Y29uc3Qgcz1wYXJzZUludChpPz8iIiwxMCk7cmV0dXJuIE51bWJlci5pc05hTihzKT9bdm9pZCAwLHZvaWQgMF06aT09PVN0cmluZyhzKT9bcyxpKyJweCJdOltzLGldfTtmdW5jdGlvbiBKRihpLHMpe3JldHVybiBqWCh7fSxpLHMpfWNvbnN0IEFvPXthc3NpZ25XaXRoRGVwdGg6aWQsd3JhcExhYmVsOnZqZSxjYWxjdWxhdGVUZXh0SGVpZ2h0OkUyZSxjYWxjdWxhdGVUZXh0V2lkdGg6SDQsY2FsY3VsYXRlVGV4dERpbWVuc2lvbnM6VDJlLGNsZWFuQW5kTWVyZ2U6SkYsZGV0ZWN0SW5pdDp2UnQsZGV0ZWN0RGlyZWN0aXZlOmZqZSxpc1N1YnN0cmluZ0luQXJyYXk6eVJ0LGludGVycG9sYXRlVG9DdXJ2ZTpPdixjYWxjTGFiZWxQb3NpdGlvbjpUUnQsY2FsY0NhcmRpbmFsaXR5UG9zaXRpb246Q1J0LGNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb246U1J0LGZvcm1hdFVybDp4UnQsZ2V0U3R5bGVzRnJvbUFycmF5Om9tLGdlbmVyYXRlSWQ6YmplLHJhbmRvbTptamUscnVuRnVuYzprUnQsZW50aXR5RGVjb2RlOklSdCxpbnNlcnRUaXRsZTpPUnQscGFyc2VGb250U2l6ZTpOQyxJbml0SURHZW5lcmF0b3I6RFJ0fSxOUnQ9ZnVuY3Rpb24oaSl7bGV0IHM9aTtyZXR1cm4gcz1zLnJlcGxhY2UoL3N0eWxlLio6XFMqIy4qOy9nLGZ1bmN0aW9uKHUpe3JldHVybiB1LnN1YnN0cmluZygwLHUubGVuZ3RoLTEpfSkscz1zLnJlcGxhY2UoL2NsYXNzRGVmLio6XFMqIy4qOy9nLGZ1bmN0aW9uKHUpe3JldHVybiB1LnN1YnN0cmluZygwLHUubGVuZ3RoLTEpfSkscz1zLnJlcGxhY2UoLyNcdys7L2csZnVuY3Rpb24odSl7Y29uc3QgZD11LnN1YnN0cmluZygxLHUubGVuZ3RoLTEpO3JldHVybi9eXCs/XGQrJC8udGVzdChkKT8i76yCwrDCsCIrZCsiwrbDnyI6Iu+sgsKwIitkKyLCtsOfIn0pLHN9LFpGPWZ1bmN0aW9uKGkpe3JldHVybiBpLnJlcGxhY2UoL++sgsKwwrAvZywiJiMiKS5yZXBsYWNlKC/vrILCsC9nLCImIikucmVwbGFjZSgvwrbDny9nLCI7Iil9O3ZhciB5amU9ImNvbW0iLHhqZT0icnVsZSIsa2plPSJkZWNsIixQUnQ9IkBpbXBvcnQiLEJSdD0iQGtleWZyYW1lcyIsRlJ0PSJAbGF5ZXIiLEVqZT1NYXRoLmFicyxDMmU9U3RyaW5nLmZyb21DaGFyQ29kZTtmdW5jdGlvbiBUamUoaSl7cmV0dXJuIGkudHJpbSgpfWZ1bmN0aW9uIHpYKGkscyx1KXtyZXR1cm4gaS5yZXBsYWNlKHMsdSl9ZnVuY3Rpb24gUlJ0KGkscyx1KXtyZXR1cm4gaS5pbmRleE9mKHMsdSl9ZnVuY3Rpb24gZVIoaSxzKXtyZXR1cm4gaS5jaGFyQ29kZUF0KHMpfDB9ZnVuY3Rpb24gdFIoaSxzLHUpe3JldHVybiBpLnNsaWNlKHMsdSl9ZnVuY3Rpb24gXzcoaSl7cmV0dXJuIGkubGVuZ3RofWZ1bmN0aW9uIGpSdChpKXtyZXR1cm4gaS5sZW5ndGh9ZnVuY3Rpb24gcVgoaSxzKXtyZXR1cm4gcy5wdXNoKGkpLGl9dmFyIEhYPTEseEQ9MSxDamU9MCxOdj0wLEkwPTAsa0Q9IiI7ZnVuY3Rpb24gUzJlKGkscyx1LGQscCx2LGIseSl7cmV0dXJue3ZhbHVlOmkscm9vdDpzLHBhcmVudDp1LHR5cGU6ZCxwcm9wczpwLGNoaWxkcmVuOnYsbGluZTpIWCxjb2x1bW46eEQsbGVuZ3RoOmIscmV0dXJuOiIiLHNpYmxpbmdzOnl9fWZ1bmN0aW9uICRSdCgpe3JldHVybiBJMH1mdW5jdGlvbiB6UnQoKXtyZXR1cm4gSTA9TnY+MD9lUihrRCwtLU52KTowLHhELS0sSTA9PT0xMCYmKHhEPTEsSFgtLSksSTB9ZnVuY3Rpb24gQjMoKXtyZXR1cm4gSTA9TnY8Q2plP2VSKGtELE52KyspOjAseEQrKyxJMD09PTEwJiYoeEQ9MSxIWCsrKSxJMH1mdW5jdGlvbiBQQygpe3JldHVybiBlUihrRCxOdil9ZnVuY3Rpb24gVlgoKXtyZXR1cm4gTnZ9ZnVuY3Rpb24gVVgoaSxzKXtyZXR1cm4gdFIoa0QsaSxzKX1mdW5jdGlvbiBfMmUoaSl7c3dpdGNoKGkpe2Nhc2UgMDpjYXNlIDk6Y2FzZSAxMDpjYXNlIDEzOmNhc2UgMzI6cmV0dXJuIDU7Y2FzZSAzMzpjYXNlIDQzOmNhc2UgNDQ6Y2FzZSA0NzpjYXNlIDYyOmNhc2UgNjQ6Y2FzZSAxMjY6Y2FzZSA1OTpjYXNlIDEyMzpjYXNlIDEyNTpyZXR1cm4gNDtjYXNlIDU4OnJldHVybiAzO2Nhc2UgMzQ6Y2FzZSAzOTpjYXNlIDQwOmNhc2UgOTE6cmV0dXJuIDI7Y2FzZSA0MTpjYXNlIDkzOnJldHVybiAxfXJldHVybiAwfWZ1bmN0aW9uIHFSdChpKXtyZXR1cm4gSFg9eEQ9MSxDamU9Xzcoa0Q9aSksTnY9MCxbXX1mdW5jdGlvbiBIUnQoaSl7cmV0dXJuIGtEPSIiLGl9ZnVuY3Rpb24gQTJlKGkpe3JldHVybiBUamUoVVgoTnYtMSxMMmUoaT09PTkxP2krMjppPT09NDA/aSsxOmkpKSl9ZnVuY3Rpb24gVlJ0KGkpe2Zvcig7KEkwPVBDKCkpJiZJMDwzMzspQjMoKTtyZXR1cm4gXzJlKGkpPjJ8fF8yZShJMCk+Mz8iIjoiICJ9ZnVuY3Rpb24gVVJ0KGkscyl7Zm9yKDstLXMmJkIzKCkmJiEoSTA8NDh8fEkwPjEwMnx8STA+NTcmJkkwPDY1fHxJMD43MCYmSTA8OTcpOyk7cmV0dXJuIFVYKGksVlgoKSsoczw2JiZQQygpPT0zMiYmQjMoKT09MzIpKX1mdW5jdGlvbiBMMmUoaSl7Zm9yKDtCMygpOylzd2l0Y2goSTApe2Nhc2UgaTpyZXR1cm4gTnY7Y2FzZSAzNDpjYXNlIDM5OmkhPT0zNCYmaSE9PTM5JiZMMmUoSTApO2JyZWFrO2Nhc2UgNDA6aT09PTQxJiZMMmUoaSk7YnJlYWs7Y2FzZSA5MjpCMygpO2JyZWFrfXJldHVybiBOdn1mdW5jdGlvbiBHUnQoaSxzKXtmb3IoO0IzKCkmJmkrSTAhPT00NysxMDspaWYoaStJMD09PTQyKzQyJiZQQygpPT09NDcpYnJlYWs7cmV0dXJuIi8qIitVWChzLE52LTEpKyIqIitDMmUoaT09PTQ3P2k6QjMoKSl9ZnVuY3Rpb24gS1J0KGkpe2Zvcig7IV8yZShQQygpKTspQjMoKTtyZXR1cm4gVVgoaSxOdil9ZnVuY3Rpb24gV1J0KGkpe3JldHVybiBIUnQoR1goIiIsbnVsbCxudWxsLG51bGwsWyIiXSxpPXFSdChpKSwwLFswXSxpKSl9ZnVuY3Rpb24gR1goaSxzLHUsZCxwLHYsYix5LFQpe2Zvcih2YXIgXz0wLEE9MCxQPWIsUj0wLEY9MCxqPTAsSz0xLGVlPTEsaWU9MSxvZT0wLHBlPSIiLGJlPXAsYWU9dixuZT1kLHNlPXBlO2VlOylzd2l0Y2goaj1vZSxvZT1CMygpKXtjYXNlIDQwOmlmKGohPTEwOCYmZVIoc2UsUC0xKT09NTgpe1JSdChzZSs9elgoQTJlKG9lKSwiJiIsIiZcZiIpLCImXGYiLEVqZShfP3lbXy0xXTowKSkhPS0xJiYoaWU9LTEpO2JyZWFrfWNhc2UgMzQ6Y2FzZSAzOTpjYXNlIDkxOnNlKz1BMmUob2UpO2JyZWFrO2Nhc2UgOTpjYXNlIDEwOmNhc2UgMTM6Y2FzZSAzMjpzZSs9VlJ0KGopO2JyZWFrO2Nhc2UgOTI6c2UrPVVSdChWWCgpLTEsNyk7Y29udGludWU7Y2FzZSA0Nzpzd2l0Y2goUEMoKSl7Y2FzZSA0MjpjYXNlIDQ3OnFYKFlSdChHUnQoQjMoKSxWWCgpKSxzLHUsVCksVCk7YnJlYWs7ZGVmYXVsdDpzZSs9Ii8ifWJyZWFrO2Nhc2UgMTIzKks6eVtfKytdPV83KHNlKSppZTtjYXNlIDEyNSpLOmNhc2UgNTk6Y2FzZSAwOnN3aXRjaChvZSl7Y2FzZSAwOmNhc2UgMTI1OmVlPTA7Y2FzZSA1OStBOmllPT0tMSYmKHNlPXpYKHNlLC9cZi9nLCIiKSksRj4wJiZfNyhzZSktUCYmcVgoRj4zMj9famUoc2UrIjsiLGQsdSxQLTEsVCk6X2plKHpYKHNlLCIgIiwiIikrIjsiLGQsdSxQLTIsVCksVCk7YnJlYWs7Y2FzZSA1OTpzZSs9IjsiO2RlZmF1bHQ6aWYocVgobmU9U2plKHNlLHMsdSxfLEEscCx5LHBlLGJlPVtdLGFlPVtdLFAsdiksdiksb2U9PT0xMjMpaWYoQT09PTApR1goc2UscyxuZSxuZSxiZSx2LFAseSxhZSk7ZWxzZSBzd2l0Y2goUj09PTk5JiZlUihzZSwzKT09PTExMD8xMDA6Uil7Y2FzZSAxMDA6Y2FzZSAxMDg6Y2FzZSAxMDk6Y2FzZSAxMTU6R1goaSxuZSxuZSxkJiZxWChTamUoaSxuZSxuZSwwLDAscCx5LHBlLHAsYmU9W10sUCxhZSksYWUpLHAsYWUsUCx5LGQ/YmU6YWUpO2JyZWFrO2RlZmF1bHQ6R1goc2UsbmUsbmUsbmUsWyIiXSxhZSwwLHksYWUpfX1fPUE9Rj0wLEs9aWU9MSxwZT1zZT0iIixQPWI7YnJlYWs7Y2FzZSA1ODpQPTErXzcoc2UpLEY9ajtkZWZhdWx0OmlmKEs8MSl7aWYob2U9PTEyMyktLUs7ZWxzZSBpZihvZT09MTI1JiZLKys9PTAmJnpSdCgpPT0xMjUpY29udGludWV9c3dpdGNoKHNlKz1DMmUob2UpLG9lKkspe2Nhc2UgMzg6aWU9QT4wPzE6KHNlKz0iXGYiLC0xKTticmVhaztjYXNlIDQ0OnlbXysrXT0oXzcoc2UpLTEpKmllLGllPTE7YnJlYWs7Y2FzZSA2NDpQQygpPT09NDUmJihzZSs9QTJlKEIzKCkpKSxSPVBDKCksQT1QPV83KHBlPXNlKz1LUnQoVlgoKSkpLG9lKys7YnJlYWs7Y2FzZSA0NTpqPT09NDUmJl83KHNlKT09MiYmKEs9MCl9fXJldHVybiB2fWZ1bmN0aW9uIFNqZShpLHMsdSxkLHAsdixiLHksVCxfLEEsUCl7Zm9yKHZhciBSPXAtMSxGPXA9PT0wP3Y6WyIiXSxqPWpSdChGKSxLPTAsZWU9MCxpZT0wO0s8ZDsrK0spZm9yKHZhciBvZT0wLHBlPXRSKGksUisxLFI9RWplKGVlPWJbS10pKSxiZT1pO29lPGo7KytvZSkoYmU9VGplKGVlPjA/RltvZV0rIiAiK3BlOnpYKHBlLC8mXGYvZyxGW29lXSkpKSYmKFRbaWUrK109YmUpO3JldHVybiBTMmUoaSxzLHUscD09PTA/eGplOnksVCxfLEEsUCl9ZnVuY3Rpb24gWVJ0KGkscyx1LGQpe3JldHVybiBTMmUoaSxzLHUseWplLEMyZSgkUnQoKSksdFIoaSwyLC0yKSwwLGQpfWZ1bmN0aW9uIF9qZShpLHMsdSxkLHApe3JldHVybiBTMmUoaSxzLHUsa2plLHRSKGksMCxkKSx0UihpLGQrMSwtMSksZCxwKX1mdW5jdGlvbiBNMmUoaSxzKXtmb3IodmFyIHU9IiIsZD0wO2Q8aS5sZW5ndGg7ZCsrKXUrPXMoaVtkXSxkLGkscyl8fCIiO3JldHVybiB1fWZ1bmN0aW9uIFhSdChpLHMsdSxkKXtzd2l0Y2goaS50eXBlKXtjYXNlIEZSdDppZihpLmNoaWxkcmVuLmxlbmd0aClicmVhaztjYXNlIFBSdDpjYXNlIGtqZTpyZXR1cm4gaS5yZXR1cm49aS5yZXR1cm58fGkudmFsdWU7Y2FzZSB5amU6cmV0dXJuIiI7Y2FzZSBCUnQ6cmV0dXJuIGkucmV0dXJuPWkudmFsdWUrInsiK00yZShpLmNoaWxkcmVuLGQpKyJ9IjtjYXNlIHhqZTppZighXzcoaS52YWx1ZT1pLnByb3BzLmpvaW4oIiwiKSkpcmV0dXJuIiJ9cmV0dXJuIF83KHU9TTJlKGkuY2hpbGRyZW4sZCkpP2kucmV0dXJuPWkudmFsdWUrInsiK3UrIn0iOiIifWNvbnN0IEFqZT0iMTAuOS4xIixFRD1PYmplY3QuZnJlZXplKHNoKTtsZXQgQjI9aWQoe30sRUQpLExqZSxURD1bXSxuUj1pZCh7fSxFRCk7Y29uc3QgS1g9KGkscyk9PntsZXQgdT1pZCh7fSxpKSxkPXt9O2Zvcihjb25zdCBwIG9mIHMpSWplKHApLGQ9aWQoZCxwKTtpZih1PWlkKHUsZCksZC50aGVtZSYmZC50aGVtZSBpbiBFNyl7Y29uc3QgcD1pZCh7fSxMamUpLHY9aWQocC50aGVtZVZhcmlhYmxlc3x8e30sZC50aGVtZVZhcmlhYmxlcyk7dS50aGVtZSYmdS50aGVtZSBpbiBFNyYmKHUudGhlbWVWYXJpYWJsZXM9RTdbdS50aGVtZV0uZ2V0VGhlbWVWYXJpYWJsZXModikpfXJldHVybiBuUj11LE5qZShuUiksblJ9LFFSdD1pPT4oQjI9aWQoe30sRUQpLEIyPWlkKEIyLGkpLGkudGhlbWUmJkU3W2kudGhlbWVdJiYoQjIudGhlbWVWYXJpYWJsZXM9RTdbaS50aGVtZV0uZ2V0VGhlbWVWYXJpYWJsZXMoaS50aGVtZVZhcmlhYmxlcykpLEtYKEIyLFREKSxCMiksSlJ0PWk9PntMamU9aWQoe30saSl9LFpSdD1pPT4oQjI9aWQoQjIsaSksS1goQjIsVEQpLEIyKSxNamU9KCk9PmlkKHt9LEIyKSxEamU9aT0+KE5qZShpKSxpZChuUixpKSxWaCgpKSxWaD0oKT0+aWQoe30sblIpLElqZT1pPT57aSYmKFsic2VjdXJlIiwuLi5CMi5zZWN1cmU/P1tdXS5mb3JFYWNoKHM9PntPYmplY3QuaGFzT3duKGkscykmJihYZS5kZWJ1ZyhgRGVuaWVkIGF0dGVtcHQgdG8gbW9kaWZ5IGEgc2VjdXJlIGtleSAke3N9YCxpW3NdKSxkZWxldGUgaVtzXSl9KSxPYmplY3Qua2V5cyhpKS5mb3JFYWNoKHM9PntzLnN0YXJ0c1dpdGgoIl9fIikmJmRlbGV0ZSBpW3NdfSksT2JqZWN0LmtleXMoaSkuZm9yRWFjaChzPT57dHlwZW9mIGlbc109PSJzdHJpbmciJiYoaVtzXS5pbmNsdWRlcygiPCIpfHxpW3NdLmluY2x1ZGVzKCI+Iil8fGlbc10uaW5jbHVkZXMoInVybChkYXRhOiIpKSYmZGVsZXRlIGlbc10sdHlwZW9mIGlbc109PSJvYmplY3QiJiZJamUoaVtzXSl9KSl9LGVqdD1pPT57U1goaSksaS5mb250RmFtaWx5JiYoIWkudGhlbWVWYXJpYWJsZXN8fCFpLnRoZW1lVmFyaWFibGVzLmZvbnRGYW1pbHkpJiYoaS50aGVtZVZhcmlhYmxlcz17Zm9udEZhbWlseTppLmZvbnRGYW1pbHl9KSxURC5wdXNoKGkpLEtYKEIyLFREKX0sV1g9KGk9QjIpPT57VEQ9W10sS1goaSxURCl9LHRqdD17TEFaWV9MT0FEX0RFUFJFQ0FURUQ6IlRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgbGF6eUxvYWRlZERpYWdyYW1zIGFuZCBsb2FkRXh0ZXJuYWxEaWFncmFtc0F0U3RhcnR1cCBhcmUgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSByZWdpc3RlckV4dGVybmFsRGlhZ3JhbXMgaW5zdGVhZC4ifSxPamU9e30sbmp0PWk9PntPamVbaV18fChYZS53YXJuKHRqdFtpXSksT2plW2ldPSEwKX0sTmplPWk9PntpJiYoaS5sYXp5TG9hZGVkRGlhZ3JhbXN8fGkubG9hZEV4dGVybmFsRGlhZ3JhbXNBdFN0YXJ0dXApJiZuanQoIkxBWllfTE9BRF9ERVBSRUNBVEVEIil9LFBqZT0iYzQiLHJqdD17aWQ6UGplLGRldGVjdG9yOmk9Pi9eXHMqQzRDb250ZXh0fEM0Q29udGFpbmVyfEM0Q29tcG9uZW50fEM0RHluYW1pY3xDNERlcGxveW1lbnQvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PndVdCk7cmV0dXJue2lkOlBqZSxkaWFncmFtOml9fX0sQmplPSJmbG93Y2hhcnQiLGlqdD17aWQ6QmplLGRldGVjdG9yOihpLHMpPT57dmFyIHUsZDtyZXR1cm4oKHU9cz09bnVsbD92b2lkIDA6cy5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDp1LmRlZmF1bHRSZW5kZXJlcik9PT0iZGFncmUtd3JhcHBlciJ8fCgoZD1zPT1udWxsP3ZvaWQgMDpzLmZsb3djaGFydCk9PW51bGw/dm9pZCAwOmQuZGVmYXVsdFJlbmRlcmVyKT09PSJlbGsiPyExOi9eXHMqZ3JhcGgvLnRlc3QoaSl9LGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5fZW4pO3JldHVybntpZDpCamUsZGlhZ3JhbTppfX19LEZqZT0iZmxvd2NoYXJ0LXYyIixzanQ9e2lkOkZqZSxkZXRlY3RvcjooaSxzKT0+e3ZhciB1LGQscDtyZXR1cm4oKHU9cz09bnVsbD92b2lkIDA6cy5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDp1LmRlZmF1bHRSZW5kZXJlcik9PT0iZGFncmUtZDMifHwoKGQ9cz09bnVsbD92b2lkIDA6cy5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpkLmRlZmF1bHRSZW5kZXJlcik9PT0iZWxrIj8hMTovXlxzKmdyYXBoLy50ZXN0KGkpJiYoKHA9cz09bnVsbD92b2lkIDA6cy5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpwLmRlZmF1bHRSZW5kZXJlcik9PT0iZGFncmUtd3JhcHBlciI/ITA6L15ccypmbG93Y2hhcnQvLnRlc3QoaSl9LGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5BZW4pO3JldHVybntpZDpGamUsZGlhZ3JhbTppfX19LFJqZT0iZXIiLGFqdD17aWQ6UmplLGRldGVjdG9yOmk9Pi9eXHMqZXJEaWFncmFtLy50ZXN0KGkpLGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5ldG4pO3JldHVybntpZDpSamUsZGlhZ3JhbTppfX19LGpqZT0iZ2l0R3JhcGgiLG9qdD17aWQ6amplLGRldGVjdG9yOmk9Pi9eXHMqZ2l0R3JhcGgvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PlN0bik7cmV0dXJue2lkOmpqZSxkaWFncmFtOml9fX0sJGplPSJnYW50dCIsY2p0PXtpZDokamUsZGV0ZWN0b3I6aT0+L15ccypnYW50dC8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+cG5uKTtyZXR1cm57aWQ6JGplLGRpYWdyYW06aX19fSx6amU9ImluZm8iLHVqdD17aWQ6emplLGRldGVjdG9yOmk9Pi9eXHMqaW5mby8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+bW5uKTtyZXR1cm57aWQ6emplLGRpYWdyYW06aX19fSxxamU9InBpZSIsbGp0PXtpZDpxamUsZGV0ZWN0b3I6aT0+L15ccypwaWUvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PkVubik7cmV0dXJue2lkOnFqZSxkaWFncmFtOml9fX0sSGplPSJxdWFkcmFudENoYXJ0IixoanQ9e2lkOkhqZSxkZXRlY3RvcjppPT4vXlxzKnF1YWRyYW50Q2hhcnQvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pmpubik7cmV0dXJue2lkOkhqZSxkaWFncmFtOml9fX0sVmplPSJ4eWNoYXJ0IixmanQ9e2lkOlZqZSxkZXRlY3RvcjppPT4vXlxzKnh5Y2hhcnQtYmV0YS8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dXJuKTtyZXR1cm57aWQ6VmplLGRpYWdyYW06aX19fSxVamU9InJlcXVpcmVtZW50IixkanQ9e2lkOlVqZSxkZXRlY3RvcjppPT4vXlxzKnJlcXVpcmVtZW50KERpYWdyYW0pPy8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+d3JuKTtyZXR1cm57aWQ6VWplLGRpYWdyYW06aX19fSxHamU9InNlcXVlbmNlIixnanQ9e2lkOkdqZSxkZXRlY3RvcjppPT4vXlxzKnNlcXVlbmNlRGlhZ3JhbS8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+a2luKTtyZXR1cm57aWQ6R2plLGRpYWdyYW06aX19fSxLamU9ImNsYXNzIixwanQ9e2lkOktqZSxkZXRlY3RvcjooaSxzKT0+e3ZhciB1O3JldHVybigodT1zPT1udWxsP3ZvaWQgMDpzLmNsYXNzKT09bnVsbD92b2lkIDA6dS5kZWZhdWx0UmVuZGVyZXIpPT09ImRhZ3JlLXdyYXBwZXIiPyExOi9eXHMqY2xhc3NEaWFncmFtLy50ZXN0KGkpfSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+R2luKTtyZXR1cm57aWQ6S2plLGRpYWdyYW06aX19fSxXamU9ImNsYXNzRGlhZ3JhbSIsYmp0PXtpZDpXamUsZGV0ZWN0b3I6KGkscyk9Pnt2YXIgdTtyZXR1cm4vXlxzKmNsYXNzRGlhZ3JhbS8udGVzdChpKSYmKCh1PXM9PW51bGw/dm9pZCAwOnMuY2xhc3MpPT1udWxsP3ZvaWQgMDp1LmRlZmF1bHRSZW5kZXJlcik9PT0iZGFncmUtd3JhcHBlciI/ITA6L15ccypjbGFzc0RpYWdyYW0tdjIvLnRlc3QoaSl9LGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5KaW4pO3JldHVybntpZDpXamUsZGlhZ3JhbTppfX19LFlqZT0ic3RhdGUiLG1qdD17aWQ6WWplLGRldGVjdG9yOihpLHMpPT57dmFyIHU7cmV0dXJuKCh1PXM9PW51bGw/dm9pZCAwOnMuc3RhdGUpPT1udWxsP3ZvaWQgMDp1LmRlZmF1bHRSZW5kZXJlcik9PT0iZGFncmUtd3JhcHBlciI/ITE6L15ccypzdGF0ZURpYWdyYW0vLnRlc3QoaSl9LGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5qc24pO3JldHVybntpZDpZamUsZGlhZ3JhbTppfX19LFhqZT0ic3RhdGVEaWFncmFtIix2anQ9e2lkOlhqZSxkZXRlY3RvcjooaSxzKT0+e3ZhciB1O3JldHVybiEhKC9eXHMqc3RhdGVEaWFncmFtLXYyLy50ZXN0KGkpfHwvXlxzKnN0YXRlRGlhZ3JhbS8udGVzdChpKSYmKCh1PXM9PW51bGw/dm9pZCAwOnMuc3RhdGUpPT1udWxsP3ZvaWQgMDp1LmRlZmF1bHRSZW5kZXJlcik9PT0iZGFncmUtd3JhcHBlciIpfSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+aWFuKTtyZXR1cm57aWQ6WGplLGRpYWdyYW06aX19fSxRamU9ImpvdXJuZXkiLHdqdD17aWQ6UWplLGRldGVjdG9yOmk9Pi9eXHMqam91cm5leS8udGVzdChpKSxsb2FkZXI6YXN5bmMoKT0+e2NvbnN0e2RpYWdyYW06aX09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+RWFuKTtyZXR1cm57aWQ6UWplLGRpYWdyYW06aX19fSx5anQ9ZnVuY3Rpb24oaSxzKXtmb3IobGV0IHUgb2YgcylpLmF0dHIodVswXSx1WzFdKX0seGp0PWZ1bmN0aW9uKGkscyx1KXtsZXQgZD1uZXcgTWFwO3JldHVybiB1PyhkLnNldCgid2lkdGgiLCIxMDAlIiksZC5zZXQoInN0eWxlIixgbWF4LXdpZHRoOiAke3N9cHg7YCkpOihkLnNldCgiaGVpZ2h0IixpKSxkLnNldCgid2lkdGgiLHMpKSxkfSxOZz1mdW5jdGlvbihpLHMsdSxkKXtjb25zdCBwPXhqdChzLHUsZCk7eWp0KGkscCl9LHk5PWZ1bmN0aW9uKGkscyx1LGQpe2NvbnN0IHA9cy5ub2RlKCkuZ2V0QkJveCgpLHY9cC53aWR0aCxiPXAuaGVpZ2h0O1hlLmluZm8oYFNWRyBib3VuZHM6ICR7dn14JHtifWAscCk7bGV0IHk9MCxUPTA7WGUuaW5mbyhgR3JhcGggYm91bmRzOiAke3l9eCR7VH1gLGkpLHk9dit1KjIsVD1iK3UqMixYZS5pbmZvKGBDYWxjdWxhdGVkIGJvdW5kczogJHt5fXgke1R9YCksTmcocyxULHksZCk7Y29uc3QgXz1gJHtwLngtdX0gJHtwLnktdX0gJHtwLndpZHRoKzIqdX0gJHtwLmhlaWdodCsyKnV9YDtzLmF0dHIoInZpZXdCb3giLF8pfSxZWD17fSxranQ9KGkscyx1KT0+e2xldCBkPSIiO3JldHVybiBpIGluIFlYJiZZWFtpXT9kPVlYW2ldKHUpOlhlLndhcm4oYE5vIHRoZW1lIGZvdW5kIGZvciAke2l9YCksYCAmIHsKICAgIGZvbnQtZmFtaWx5OiAke3UuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6ICR7dS5mb250U2l6ZX07CiAgICBmaWxsOiAke3UudGV4dENvbG9yfQogIH0KCiAgLyogQ2xhc3NlcyBjb21tb24gZm9yIG11bHRpcGxlIGRpYWdyYW1zICovCgogICYgLmVycm9yLWljb24gewogICAgZmlsbDogJHt1LmVycm9yQmtnQ29sb3J9OwogIH0KICAmIC5lcnJvci10ZXh0IHsKICAgIGZpbGw6ICR7dS5lcnJvclRleHRDb2xvcn07CiAgICBzdHJva2U6ICR7dS5lcnJvclRleHRDb2xvcn07CiAgfQoKICAmIC5lZGdlLXRoaWNrbmVzcy1ub3JtYWwgewogICAgc3Ryb2tlLXdpZHRoOiAycHg7CiAgfQogICYgLmVkZ2UtdGhpY2tuZXNzLXRoaWNrIHsKICAgIHN0cm9rZS13aWR0aDogMy41cHgKICB9CiAgJiAuZWRnZS1wYXR0ZXJuLXNvbGlkIHsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDA7CiAgfQoKICAmIC5lZGdlLXBhdHRlcm4tZGFzaGVkewogICAgc3Ryb2tlLWRhc2hhcnJheTogMzsKICB9CiAgLmVkZ2UtcGF0dGVybi1kb3R0ZWQgewogICAgc3Ryb2tlLWRhc2hhcnJheTogMjsKICB9CgogICYgLm1hcmtlciB7CiAgICBmaWxsOiAke3UubGluZUNvbG9yfTsKICAgIHN0cm9rZTogJHt1LmxpbmVDb2xvcn07CiAgfQogICYgLm1hcmtlci5jcm9zcyB7CiAgICBzdHJva2U6ICR7dS5saW5lQ29sb3J9OwogIH0KCiAgJiBzdmcgewogICAgZm9udC1mYW1pbHk6ICR7dS5mb250RmFtaWx5fTsKICAgIGZvbnQtc2l6ZTogJHt1LmZvbnRTaXplfTsKICB9CgogICR7ZH0KCiAgJHtzfQpgfSxFanQ9KGkscyk9PntzIT09dm9pZCAwJiYoWVhbaV09cyl9LFRqdD1ranQ7bGV0IEQyZT0iIixJMmU9IiIsTzJlPSIiO2NvbnN0IE4yZT1pPT5ZZihpLFZoKCkpLFBnPSgpPT57RDJlPSIiLE8yZT0iIixJMmU9IiJ9LEJnPWk9PntEMmU9TjJlKGkpLnJlcGxhY2UoL15ccysvZywiIil9LENwPSgpPT5EMmUsU3A9aT0+e08yZT1OMmUoaSkucmVwbGFjZSgvXG5ccysvZyxgCmApfSxfcD0oKT0+TzJlLGNtPWk9PntJMmU9TjJlKGkpfSxBcD0oKT0+STJlLEpqZT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsY2xlYXI6UGcsZ2V0QWNjRGVzY3JpcHRpb246X3AsZ2V0QWNjVGl0bGU6Q3AsZ2V0RGlhZ3JhbVRpdGxlOkFwLHNldEFjY0Rlc2NyaXB0aW9uOlNwLHNldEFjY1RpdGxlOkJnLHNldERpYWdyYW1UaXRsZTpjbX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxDanQ9WGUsU2p0PWZwZSxxdD1WaCxfanQ9RGplLFpqZT1FRCxBanQ9aT0+WWYoaSxxdCgpKSxlJGU9eTksTGp0PSgpPT5KamUsWFg9e30sUVg9KGkscyx1KT0+e3ZhciBkO2lmKFhYW2ldKXRocm93IG5ldyBFcnJvcihgRGlhZ3JhbSAke2l9IGFscmVhZHkgcmVnaXN0ZXJlZC5gKTtYWFtpXT1zLHUmJlBSZShpLHUpLEVqdChpLHMuc3R5bGVzKSwoZD1zLmluamVjdFV0aWxzKT09bnVsbHx8ZC5jYWxsKHMsQ2p0LFNqdCxxdCxBanQsZSRlLExqdCgpLCgpPT57fSl9LFAyZT1pPT57aWYoaSBpbiBYWClyZXR1cm4gWFhbaV07dGhyb3cgbmV3IE1qdChpKX07Y2xhc3MgTWp0IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3Iocyl7c3VwZXIoYERpYWdyYW0gJHtzfSBub3QgZm91bmQuYCl9fWNvbnN0IHJSPWk9Pnt2YXIgcDtjb25zdHtzZWN1cml0eUxldmVsOnN9PXF0KCk7bGV0IHU9SXIoImJvZHkiKTtpZihzPT09InNhbmRib3giKXtjb25zdCBiPSgocD1JcihgI2kke2l9YCkubm9kZSgpKT09bnVsbD92b2lkIDA6cC5jb250ZW50RG9jdW1lbnQpPz9kb2N1bWVudDt1PUlyKGIuYm9keSl9cmV0dXJuIHUuc2VsZWN0KGAjJHtpfWApfSx0JGU9e2RyYXc6KGkscyx1KT0+e1hlLmRlYnVnKGByZW5kZXJpbmcgc3ZnIGZvciBzeW50YXggZXJyb3IKYCk7Y29uc3QgZD1yUihzKSxwPWQuYXBwZW5kKCJnIik7ZC5hdHRyKCJ2aWV3Qm94IiwiMCAwIDI0MTIgNTEyIiksTmcoZCwxMDAsNTEyLCEwKSxwLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDExLjMxMywxMjMuMzEzYzYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNXMtMTYuMzc1LTYuMjUtMjIuNjI1LDBsLTMyLDMyLTkuMzc1LDkuMzc1LTIwLjY4OC0yMC42ODhjLTEyLjQ4NC0xMi41LTMyLjc2Ni0xMi41LTQ1LjI1LDBsLTE2LDE2Yy0xLjI2MSwxLjI2MS0yLjMwNCwyLjY0OC0zLjMxLDQuMDUxLTIxLjczOS04LjU2MS00NS4zMjQtMTMuNDI2LTcwLjA2NS0xMy40MjYtMTA1Ljg2NywwLTE5Miw4Ni4xMzMtMTkyLDE5MnM4Ni4xMzMsMTkyIDE5MiwxOTIgMTkyLTg2LjEzMyAxOTItMTkyYzAtMjQuNzQxLTQuODY0LTQ4LjMyNy0xMy40MjYtNzAuMDY1IDEuNDAyLTEuMDA3IDIuNzktMi4wNDkgNC4wNTEtMy4zMWwxNi0xNmMxMi41LTEyLjQ5MiAxMi41LTMyLjc1OCAwLTQ1LjI1bC0yMC42ODgtMjAuNjg4IDkuMzc1LTkuMzc1IDMyLjAwMS0zMS45OTl6bS0yMTkuMzEzLDEwMC42ODdjLTUyLjkzOCwwLTk2LDQzLjA2My05Niw5NiAwLDguODM2LTcuMTY0LDE2LTE2LDE2cy0xNi03LjE2NC0xNi0xNmMwLTcwLjU3OCA1Ny40MjItMTI4IDEyOC0xMjggOC44MzYsMCAxNiw3LjE2NCAxNiwxNnMtNy4xNjQsMTYtMTYsMTZ6IikscC5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQ1OS4wMiwxNDguOThjLTYuMjUtNi4yNS0xNi4zNzUtNi4yNS0yMi42MjUsMHMtNi4yNSwxNi4zNzUgMCwyMi42MjVsMTYsMTZjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4IDYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNWwtMTYuMDAxLTE2eiIpLHAuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm0zNDAuMzk1LDc1LjYwNWMzLjEyNSwzLjEyNSA3LjIxOSw0LjY4OCAxMS4zMTMsNC42ODggNC4wOTQsMCA4LjE4OC0xLjU2MyAxMS4zMTMtNC42ODggNi4yNS02LjI1IDYuMjUtMTYuMzc1IDAtMjIuNjI1bC0xNi0xNmMtNi4yNS02LjI1LTE2LjM3NS02LjI1LTIyLjYyNSwwcy02LjI1LDE2LjM3NSAwLDIyLjYyNWwxNS45OTksMTZ6IikscC5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQwMCw2NGM4Ljg0NCwwIDE2LTcuMTY0IDE2LTE2di0zMmMwLTguODM2LTcuMTU2LTE2LTE2LTE2LTguODQ0LDAtMTYsNy4xNjQtMTYsMTZ2MzJjMCw4LjgzNiA3LjE1NiwxNiAxNiwxNnoiKSxwLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDk2LDk2LjU4NmgtMzJjLTguODQ0LDAtMTYsNy4xNjQtMTYsMTYgMCw4LjgzNiA3LjE1NiwxNiAxNiwxNmgzMmM4Ljg0NCwwIDE2LTcuMTY0IDE2LTE2IDAtOC44MzYtNy4xNTYtMTYtMTYtMTZ6IikscC5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQzNi45OCw3NS42MDVjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4bDMyLTMyYzYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNXMtMTYuMzc1LTYuMjUtMjIuNjI1LDBsLTMyLDMyYy02LjI1MSw2LjI1LTYuMjUxLDE2LjM3NS0wLjAwMSwyMi42MjV6IikscC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImVycm9yLXRleHQiKS5hdHRyKCJ4IiwxNDQwKS5hdHRyKCJ5IiwyNTApLmF0dHIoImZvbnQtc2l6ZSIsIjE1MHB4Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCgiU3ludGF4IGVycm9yIGluIHRleHQiKSxwLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItdGV4dCIpLmF0dHIoIngiLDEyNTApLmF0dHIoInkiLDQwMCkuYXR0cigiZm9udC1zaXplIiwiMTAwcHgiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KGBtZXJtYWlkIHZlcnNpb24gJHt1fWApfX0sRGp0PXQkZSxJanQ9e2RiOnt9LHJlbmRlcmVyOnQkZSxwYXJzZXI6e3BhcnNlcjp7eXk6e319LHBhcnNlOigpPT57fX19LG4kZT0iZmxvd2NoYXJ0LWVsayIsT2p0PXtpZDpuJGUsZGV0ZWN0b3I6KGkscyk9Pnt2YXIgdTtyZXR1cm4hISgvXlxzKmZsb3djaGFydC1lbGsvLnRlc3QoaSl8fC9eXHMqZmxvd2NoYXJ0fGdyYXBoLy50ZXN0KGkpJiYoKHU9cz09bnVsbD92b2lkIDA6cy5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDp1LmRlZmF1bHRSZW5kZXJlcik9PT0iZWxrIil9LGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5qYW4pO3JldHVybntpZDpuJGUsZGlhZ3JhbTppfX19LHIkZT0idGltZWxpbmUiLE5qdD17aWQ6ciRlLGRldGVjdG9yOmk9Pi9eXHMqdGltZWxpbmUvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pmlvbik7cmV0dXJue2lkOnIkZSxkaWFncmFtOml9fX0saSRlPSJtaW5kbWFwIixQanQ9e2lkOmkkZSxkZXRlY3RvcjppPT4vXlxzKm1pbmRtYXAvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pklvbik7cmV0dXJue2lkOmkkZSxkaWFncmFtOml9fX0scyRlPSJzYW5rZXkiLEJqdD17aWQ6cyRlLGRldGVjdG9yOmk9Pi9eXHMqc2Fua2V5LWJldGEvLnRlc3QoaSksbG9hZGVyOmFzeW5jKCk9Pntjb25zdHtkaWFncmFtOml9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PmNjbik7cmV0dXJue2lkOnMkZSxkaWFncmFtOml9fX0sYSRlPSJibG9jayIsRmp0PXtpZDphJGUsZGV0ZWN0b3I6aT0+L15ccypibG9jay1iZXRhLy50ZXN0KGkpLGxvYWRlcjphc3luYygpPT57Y29uc3R7ZGlhZ3JhbTppfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5NY24pO3JldHVybntpZDphJGUsZGlhZ3JhbTppfX19O2xldCBvJGU9ITE7Y29uc3QgQjJlPSgpPT57byRlfHwobyRlPSEwLFFYKCJlcnJvciIsSWp0LGk9PmkudG9Mb3dlckNhc2UoKS50cmltKCk9PT0iZXJyb3IiKSxRWCgiLS0tIix7ZGI6e2NsZWFyOigpPT57fX0sc3R5bGVzOnt9LHJlbmRlcmVyOntkcmF3OigpPT57fX0scGFyc2VyOntwYXJzZXI6e3l5Ont9fSxwYXJzZTooKT0+e3Rocm93IG5ldyBFcnJvcigiRGlhZ3JhbXMgYmVnaW5uaW5nIHdpdGggLS0tIGFyZSBub3QgdmFsaWQuIElmIHlvdSB3ZXJlIHRyeWluZyB0byB1c2UgYSBZQU1MIGZyb250LW1hdHRlciwgcGxlYXNlIGVuc3VyZSB0aGF0IHlvdSd2ZSBjb3JyZWN0bHkgb3BlbmVkIGFuZCBjbG9zZWQgdGhlIFlBTUwgZnJvbnQtbWF0dGVyIHdpdGggdW4taW5kZW50ZWQgYC0tLWAgYmxvY2tzIil9fSxpbml0OigpPT5udWxsfSxpPT5pLnRvTG93ZXJDYXNlKCkudHJpbVN0YXJ0KCkuc3RhcnRzV2l0aCgiLS0tIikpLE5SZShyanQsYmp0LHBqdCxhanQsY2p0LHVqdCxsanQsZGp0LGdqdCxPanQsc2p0LGlqdCxQanQsTmp0LG9qdCx2anQsbWp0LHdqdCxoanQsQmp0LGZqdCxGanQpKX07Y2xhc3MgYyRle2NvbnN0cnVjdG9yKHMsdT17fSl7dGhpcy50ZXh0PXMsdGhpcy5tZXRhZGF0YT11LHRoaXMudHlwZT0iZ3JhcGgiLHRoaXMudGV4dD1OUnQocyksdGhpcy50ZXh0Kz1gCmA7Y29uc3QgZD1WaCgpO3RyeXt0aGlzLnR5cGU9X1gocyxkKX1jYXRjaCh2KXt0aGlzLnR5cGU9ImVycm9yIix0aGlzLmRldGVjdEVycm9yPXZ9Y29uc3QgcD1QMmUodGhpcy50eXBlKTtYZS5kZWJ1ZygiVHlwZSAiK3RoaXMudHlwZSksdGhpcy5kYj1wLmRiLHRoaXMucmVuZGVyZXI9cC5yZW5kZXJlcix0aGlzLnBhcnNlcj1wLnBhcnNlcix0aGlzLnBhcnNlci5wYXJzZXIueXk9dGhpcy5kYix0aGlzLmluaXQ9cC5pbml0LHRoaXMucGFyc2UoKX1wYXJzZSgpe3ZhciB1LGQscCx2LGI7aWYodGhpcy5kZXRlY3RFcnJvcil0aHJvdyB0aGlzLmRldGVjdEVycm9yOyhkPSh1PXRoaXMuZGIpLmNsZWFyKT09bnVsbHx8ZC5jYWxsKHUpO2NvbnN0IHM9VmgoKTsocD10aGlzLmluaXQpPT1udWxsfHxwLmNhbGwodGhpcyxzKSx0aGlzLm1ldGFkYXRhLnRpdGxlJiYoKGI9KHY9dGhpcy5kYikuc2V0RGlhZ3JhbVRpdGxlKT09bnVsbHx8Yi5jYWxsKHYsdGhpcy5tZXRhZGF0YS50aXRsZSkpLHRoaXMucGFyc2VyLnBhcnNlKHRoaXMudGV4dCl9YXN5bmMgcmVuZGVyKHMsdSl7YXdhaXQgdGhpcy5yZW5kZXJlci5kcmF3KHRoaXMudGV4dCxzLHUsdGhpcyl9Z2V0UGFyc2VyKCl7cmV0dXJuIHRoaXMucGFyc2VyfWdldFR5cGUoKXtyZXR1cm4gdGhpcy50eXBlfX1jb25zdCBSanQ9YXN5bmMoaSxzPXt9KT0+e2NvbnN0IHU9X1goaSxWaCgpKTt0cnl7UDJlKHUpfWNhdGNoe2NvbnN0IHA9JFB0KHUpO2lmKCFwKXRocm93IG5ldyBPUmUoYERpYWdyYW0gJHt1fSBub3QgZm91bmQuYCk7Y29uc3R7aWQ6dixkaWFncmFtOmJ9PWF3YWl0IHAoKTtRWCh2LGIpfXJldHVybiBuZXcgYyRlKGkscyl9O2xldCB1JGU9W107Y29uc3Qgamp0PSgpPT57dSRlLmZvckVhY2goaT0+e2koKX0pLHUkZT1bXX07dmFyICRqdD1XUmUoT2JqZWN0LmtleXMsT2JqZWN0KTtjb25zdCB6anQ9JGp0O3ZhciBxanQ9T2JqZWN0LnByb3RvdHlwZSxIanQ9cWp0Lmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGwkZShpKXtpZighT1goaSkpcmV0dXJuIHpqdChpKTt2YXIgcz1bXTtmb3IodmFyIHUgaW4gT2JqZWN0KGkpKUhqdC5jYWxsKGksdSkmJnUhPSJjb25zdHJ1Y3RvciImJnMucHVzaCh1KTtyZXR1cm4gc312YXIgVmp0PU1DKE4zLCJEYXRhVmlldyIpO2NvbnN0IEYyZT1WanQ7dmFyIFVqdD1NQyhOMywiUHJvbWlzZSIpO2NvbnN0IFIyZT1VanQ7dmFyIEdqdD1NQyhOMywiU2V0Iik7Y29uc3QgQ0Q9R2p0O3ZhciBLanQ9TUMoTjMsIldlYWtNYXAiKTtjb25zdCBqMmU9S2p0O3ZhciBoJGU9IltvYmplY3QgTWFwXSIsV2p0PSJbb2JqZWN0IE9iamVjdF0iLGYkZT0iW29iamVjdCBQcm9taXNlXSIsZCRlPSJbb2JqZWN0IFNldF0iLGckZT0iW29iamVjdCBXZWFrTWFwXSIscCRlPSJbb2JqZWN0IERhdGFWaWV3XSIsWWp0PUxDKEYyZSksWGp0PUxDKFdGKSxRanQ9TEMoUjJlKSxKanQ9TEMoQ0QpLFpqdD1MQyhqMmUpLEJDPUFDOyhGMmUmJkJDKG5ldyBGMmUobmV3IEFycmF5QnVmZmVyKDEpKSkhPXAkZXx8V0YmJkJDKG5ldyBXRikhPWgkZXx8UjJlJiZCQyhSMmUucmVzb2x2ZSgpKSE9ZiRlfHxDRCYmQkMobmV3IENEKSE9ZCRlfHxqMmUmJkJDKG5ldyBqMmUpIT1nJGUpJiYoQkM9ZnVuY3Rpb24oaSl7dmFyIHM9QUMoaSksdT1zPT1XanQ/aS5jb25zdHJ1Y3Rvcjp2b2lkIDAsZD11P0xDKHUpOiIiO2lmKGQpc3dpdGNoKGQpe2Nhc2UgWWp0OnJldHVybiBwJGU7Y2FzZSBYanQ6cmV0dXJuIGgkZTtjYXNlIFFqdDpyZXR1cm4gZiRlO2Nhc2UgSmp0OnJldHVybiBkJGU7Y2FzZSBaanQ6cmV0dXJuIGckZX1yZXR1cm4gc30pO2NvbnN0IFNEPUJDO3ZhciBlJHQ9IltvYmplY3QgTWFwXSIsdCR0PSJbb2JqZWN0IFNldF0iLG4kdD1PYmplY3QucHJvdG90eXBlLHIkdD1uJHQuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gaVIoaSl7aWYoaT09bnVsbClyZXR1cm4hMDtpZih3OShpKSYmKEQwKGkpfHx0eXBlb2YgaT09InN0cmluZyJ8fHR5cGVvZiBpLnNwbGljZT09ImZ1bmN0aW9uInx8dkQoaSl8fFBYKGkpfHxtRChpKSkpcmV0dXJuIWkubGVuZ3RoO3ZhciBzPVNEKGkpO2lmKHM9PWUkdHx8cz09dCR0KXJldHVybiFpLnNpemU7aWYoT1goaSkpcmV0dXJuIWwkZShpKS5sZW5ndGg7Zm9yKHZhciB1IGluIGkpaWYociR0LmNhbGwoaSx1KSlyZXR1cm4hMTtyZXR1cm4hMH1jb25zdCBpJHQ9ImdyYXBoaWNzLWRvY3VtZW50IGRvY3VtZW50IjtmdW5jdGlvbiBzJHQoaSxzKXtpLmF0dHIoInJvbGUiLGkkdCkscyE9PSIiJiZpLmF0dHIoImFyaWEtcm9sZWRlc2NyaXB0aW9uIixzKX1mdW5jdGlvbiBhJHQoaSxzLHUsZCl7aWYoaS5pbnNlcnQhPT12b2lkIDApe2lmKHUpe2NvbnN0IHA9YGNoYXJ0LWRlc2MtJHtkfWA7aS5hdHRyKCJhcmlhLWRlc2NyaWJlZGJ5IixwKSxpLmluc2VydCgiZGVzYyIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImlkIixwKS50ZXh0KHUpfWlmKHMpe2NvbnN0IHA9YGNoYXJ0LXRpdGxlLSR7ZH1gO2kuYXR0cigiYXJpYS1sYWJlbGxlZGJ5IixwKSxpLmluc2VydCgidGl0bGUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJpZCIscCkudGV4dChzKX19fWNvbnN0IG8kdD1pPT5pLnJlcGxhY2UoL15ccyolJSg/IXspW15cbl0rXG4/L2dtLCIiKS50cmltU3RhcnQoKTsvKiEganMteWFtbCA0LjEuMCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL2pzLXlhbWwgQGxpY2Vuc2UgTUlUICovZnVuY3Rpb24gYiRlKGkpe3JldHVybiB0eXBlb2YgaT4idSJ8fGk9PT1udWxsfWZ1bmN0aW9uIGMkdChpKXtyZXR1cm4gdHlwZW9mIGk9PSJvYmplY3QiJiZpIT09bnVsbH1mdW5jdGlvbiB1JHQoaSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSk/aTpiJGUoaSk/W106W2ldfWZ1bmN0aW9uIGwkdChpLHMpe3ZhciB1LGQscCx2O2lmKHMpZm9yKHY9T2JqZWN0LmtleXMocyksdT0wLGQ9di5sZW5ndGg7dTxkO3UrPTEpcD12W3VdLGlbcF09c1twXTtyZXR1cm4gaX1mdW5jdGlvbiBoJHQoaSxzKXt2YXIgdT0iIixkO2ZvcihkPTA7ZDxzO2QrPTEpdSs9aTtyZXR1cm4gdX1mdW5jdGlvbiBmJHQoaSl7cmV0dXJuIGk9PT0wJiZOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk9PT0xL2l9dmFyIGQkdD1iJGUsZyR0PWMkdCxwJHQ9dSR0LGIkdD1oJHQsbSR0PWYkdCx2JHQ9bCR0LExwPXtpc05vdGhpbmc6ZCR0LGlzT2JqZWN0OmckdCx0b0FycmF5OnAkdCxyZXBlYXQ6YiR0LGlzTmVnYXRpdmVaZXJvOm0kdCxleHRlbmQ6diR0fTtmdW5jdGlvbiBtJGUoaSxzKXt2YXIgdT0iIixkPWkucmVhc29ufHwiKHVua25vd24gcmVhc29uKSI7cmV0dXJuIGkubWFyaz8oaS5tYXJrLm5hbWUmJih1Kz0naW4gIicraS5tYXJrLm5hbWUrJyIgJyksdSs9IigiKyhpLm1hcmsubGluZSsxKSsiOiIrKGkubWFyay5jb2x1bW4rMSkrIikiLCFzJiZpLm1hcmsuc25pcHBldCYmKHUrPWAKCmAraS5tYXJrLnNuaXBwZXQpLGQrIiAiK3UpOmR9ZnVuY3Rpb24gc1IoaSxzKXtFcnJvci5jYWxsKHRoaXMpLHRoaXMubmFtZT0iWUFNTEV4Y2VwdGlvbiIsdGhpcy5yZWFzb249aSx0aGlzLm1hcms9cyx0aGlzLm1lc3NhZ2U9bSRlKHRoaXMsITEpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcik6dGhpcy5zdGFjaz1uZXcgRXJyb3IoKS5zdGFja3x8IiJ9c1IucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSxzUi5wcm90b3R5cGUuY29uc3RydWN0b3I9c1Isc1IucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLm5hbWUrIjogIittJGUodGhpcyxzKX07dmFyIEE3PXNSO2Z1bmN0aW9uICQyZShpLHMsdSxkLHApe3ZhciB2PSIiLGI9IiIseT1NYXRoLmZsb29yKHAvMiktMTtyZXR1cm4gZC1zPnkmJih2PSIgLi4uICIscz1kLXkrdi5sZW5ndGgpLHUtZD55JiYoYj0iIC4uLiIsdT1kK3ktYi5sZW5ndGgpLHtzdHI6ditpLnNsaWNlKHMsdSkucmVwbGFjZSgvXHQvZywi4oaSIikrYixwb3M6ZC1zK3YubGVuZ3RofX1mdW5jdGlvbiB6MmUoaSxzKXtyZXR1cm4gTHAucmVwZWF0KCIgIixzLWkubGVuZ3RoKStpfWZ1bmN0aW9uIHckdChpLHMpe2lmKHM9T2JqZWN0LmNyZWF0ZShzfHxudWxsKSwhaS5idWZmZXIpcmV0dXJuIG51bGw7cy5tYXhMZW5ndGh8fChzLm1heExlbmd0aD03OSksdHlwZW9mIHMuaW5kZW50IT0ibnVtYmVyIiYmKHMuaW5kZW50PTEpLHR5cGVvZiBzLmxpbmVzQmVmb3JlIT0ibnVtYmVyIiYmKHMubGluZXNCZWZvcmU9MyksdHlwZW9mIHMubGluZXNBZnRlciE9Im51bWJlciImJihzLmxpbmVzQWZ0ZXI9Mik7Zm9yKHZhciB1PS9ccj9cbnxccnxcMC9nLGQ9WzBdLHA9W10sdixiPS0xO3Y9dS5leGVjKGkuYnVmZmVyKTspcC5wdXNoKHYuaW5kZXgpLGQucHVzaCh2LmluZGV4K3ZbMF0ubGVuZ3RoKSxpLnBvc2l0aW9uPD12LmluZGV4JiZiPDAmJihiPWQubGVuZ3RoLTIpO2I8MCYmKGI9ZC5sZW5ndGgtMSk7dmFyIHk9IiIsVCxfLEE9TWF0aC5taW4oaS5saW5lK3MubGluZXNBZnRlcixwLmxlbmd0aCkudG9TdHJpbmcoKS5sZW5ndGgsUD1zLm1heExlbmd0aC0ocy5pbmRlbnQrQSszKTtmb3IoVD0xO1Q8PXMubGluZXNCZWZvcmUmJiEoYi1UPDApO1QrKylfPSQyZShpLmJ1ZmZlcixkW2ItVF0scFtiLVRdLGkucG9zaXRpb24tKGRbYl0tZFtiLVRdKSxQKSx5PUxwLnJlcGVhdCgiICIscy5pbmRlbnQpK3oyZSgoaS5saW5lLVQrMSkudG9TdHJpbmcoKSxBKSsiIHwgIitfLnN0citgCmAreTtmb3IoXz0kMmUoaS5idWZmZXIsZFtiXSxwW2JdLGkucG9zaXRpb24sUCkseSs9THAucmVwZWF0KCIgIixzLmluZGVudCkrejJlKChpLmxpbmUrMSkudG9TdHJpbmcoKSxBKSsiIHwgIitfLnN0citgCmAseSs9THAucmVwZWF0KCItIixzLmluZGVudCtBKzMrXy5wb3MpK2BeCmAsVD0xO1Q8PXMubGluZXNBZnRlciYmIShiK1Q+PXAubGVuZ3RoKTtUKyspXz0kMmUoaS5idWZmZXIsZFtiK1RdLHBbYitUXSxpLnBvc2l0aW9uLShkW2JdLWRbYitUXSksUCkseSs9THAucmVwZWF0KCIgIixzLmluZGVudCkrejJlKChpLmxpbmUrVCsxKS50b1N0cmluZygpLEEpKyIgfCAiK18uc3RyK2AKYDtyZXR1cm4geS5yZXBsYWNlKC9cbiQvLCIiKX12YXIgeSR0PXckdCx4JHQ9WyJraW5kIiwibXVsdGkiLCJyZXNvbHZlIiwiY29uc3RydWN0IiwiaW5zdGFuY2VPZiIsInByZWRpY2F0ZSIsInJlcHJlc2VudCIsInJlcHJlc2VudE5hbWUiLCJkZWZhdWx0U3R5bGUiLCJzdHlsZUFsaWFzZXMiXSxrJHQ9WyJzY2FsYXIiLCJzZXF1ZW5jZSIsIm1hcHBpbmciXTtmdW5jdGlvbiBFJHQoaSl7dmFyIHM9e307cmV0dXJuIGkhPT1udWxsJiZPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe2lbdV0uZm9yRWFjaChmdW5jdGlvbihkKXtzW1N0cmluZyhkKV09dX0pfSksc31mdW5jdGlvbiBUJHQoaSxzKXtpZihzPXN8fHt9LE9iamVjdC5rZXlzKHMpLmZvckVhY2goZnVuY3Rpb24odSl7aWYoeCR0LmluZGV4T2YodSk9PT0tMSl0aHJvdyBuZXcgQTcoJ1Vua25vd24gb3B0aW9uICInK3UrJyIgaXMgbWV0IGluIGRlZmluaXRpb24gb2YgIicraSsnIiBZQU1MIHR5cGUuJyl9KSx0aGlzLm9wdGlvbnM9cyx0aGlzLnRhZz1pLHRoaXMua2luZD1zLmtpbmR8fG51bGwsdGhpcy5yZXNvbHZlPXMucmVzb2x2ZXx8ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdGhpcy5jb25zdHJ1Y3Q9cy5jb25zdHJ1Y3R8fGZ1bmN0aW9uKHUpe3JldHVybiB1fSx0aGlzLmluc3RhbmNlT2Y9cy5pbnN0YW5jZU9mfHxudWxsLHRoaXMucHJlZGljYXRlPXMucHJlZGljYXRlfHxudWxsLHRoaXMucmVwcmVzZW50PXMucmVwcmVzZW50fHxudWxsLHRoaXMucmVwcmVzZW50TmFtZT1zLnJlcHJlc2VudE5hbWV8fG51bGwsdGhpcy5kZWZhdWx0U3R5bGU9cy5kZWZhdWx0U3R5bGV8fG51bGwsdGhpcy5tdWx0aT1zLm11bHRpfHwhMSx0aGlzLnN0eWxlQWxpYXNlcz1FJHQocy5zdHlsZUFsaWFzZXN8fG51bGwpLGskdC5pbmRleE9mKHRoaXMua2luZCk9PT0tMSl0aHJvdyBuZXcgQTcoJ1Vua25vd24ga2luZCAiJyt0aGlzLmtpbmQrJyIgaXMgc3BlY2lmaWVkIGZvciAiJytpKyciIFlBTUwgdHlwZS4nKX12YXIgRmc9VCR0O2Z1bmN0aW9uIHYkZShpLHMpe3ZhciB1PVtdO3JldHVybiBpW3NdLmZvckVhY2goZnVuY3Rpb24oZCl7dmFyIHA9dS5sZW5ndGg7dS5mb3JFYWNoKGZ1bmN0aW9uKHYsYil7di50YWc9PT1kLnRhZyYmdi5raW5kPT09ZC5raW5kJiZ2Lm11bHRpPT09ZC5tdWx0aSYmKHA9Yil9KSx1W3BdPWR9KSx1fWZ1bmN0aW9uIEMkdCgpe3ZhciBpPXtzY2FsYXI6e30sc2VxdWVuY2U6e30sbWFwcGluZzp7fSxmYWxsYmFjazp7fSxtdWx0aTp7c2NhbGFyOltdLHNlcXVlbmNlOltdLG1hcHBpbmc6W10sZmFsbGJhY2s6W119fSxzLHU7ZnVuY3Rpb24gZChwKXtwLm11bHRpPyhpLm11bHRpW3Aua2luZF0ucHVzaChwKSxpLm11bHRpLmZhbGxiYWNrLnB1c2gocCkpOmlbcC5raW5kXVtwLnRhZ109aS5mYWxsYmFja1twLnRhZ109cH1mb3Iocz0wLHU9YXJndW1lbnRzLmxlbmd0aDtzPHU7cys9MSlhcmd1bWVudHNbc10uZm9yRWFjaChkKTtyZXR1cm4gaX1mdW5jdGlvbiBxMmUoaSl7cmV0dXJuIHRoaXMuZXh0ZW5kKGkpfXEyZS5wcm90b3R5cGUuZXh0ZW5kPWZ1bmN0aW9uKHMpe3ZhciB1PVtdLGQ9W107aWYocyBpbnN0YW5jZW9mIEZnKWQucHVzaChzKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkocykpZD1kLmNvbmNhdChzKTtlbHNlIGlmKHMmJihBcnJheS5pc0FycmF5KHMuaW1wbGljaXQpfHxBcnJheS5pc0FycmF5KHMuZXhwbGljaXQpKSlzLmltcGxpY2l0JiYodT11LmNvbmNhdChzLmltcGxpY2l0KSkscy5leHBsaWNpdCYmKGQ9ZC5jb25jYXQocy5leHBsaWNpdCkpO2Vsc2UgdGhyb3cgbmV3IEE3KCJTY2hlbWEuZXh0ZW5kIGFyZ3VtZW50IHNob3VsZCBiZSBhIFR5cGUsIFsgVHlwZSBdLCBvciBhIHNjaGVtYSBkZWZpbml0aW9uICh7IGltcGxpY2l0OiBbLi4uXSwgZXhwbGljaXQ6IFsuLi5dIH0pIik7dS5mb3JFYWNoKGZ1bmN0aW9uKHYpe2lmKCEodiBpbnN0YW5jZW9mIEZnKSl0aHJvdyBuZXcgQTcoIlNwZWNpZmllZCBsaXN0IG9mIFlBTUwgdHlwZXMgKG9yIGEgc2luZ2xlIFR5cGUgb2JqZWN0KSBjb250YWlucyBhIG5vbi1UeXBlIG9iamVjdC4iKTtpZih2LmxvYWRLaW5kJiZ2LmxvYWRLaW5kIT09InNjYWxhciIpdGhyb3cgbmV3IEE3KCJUaGVyZSBpcyBhIG5vbi1zY2FsYXIgdHlwZSBpbiB0aGUgaW1wbGljaXQgbGlzdCBvZiBhIHNjaGVtYS4gSW1wbGljaXQgcmVzb2x2aW5nIG9mIHN1Y2ggdHlwZXMgaXMgbm90IHN1cHBvcnRlZC4iKTtpZih2Lm11bHRpKXRocm93IG5ldyBBNygiVGhlcmUgaXMgYSBtdWx0aSB0eXBlIGluIHRoZSBpbXBsaWNpdCBsaXN0IG9mIGEgc2NoZW1hLiBNdWx0aSB0YWdzIGNhbiBvbmx5IGJlIGxpc3RlZCBhcyBleHBsaWNpdC4iKX0pLGQuZm9yRWFjaChmdW5jdGlvbih2KXtpZighKHYgaW5zdGFuY2VvZiBGZykpdGhyb3cgbmV3IEE3KCJTcGVjaWZpZWQgbGlzdCBvZiBZQU1MIHR5cGVzIChvciBhIHNpbmdsZSBUeXBlIG9iamVjdCkgY29udGFpbnMgYSBub24tVHlwZSBvYmplY3QuIil9KTt2YXIgcD1PYmplY3QuY3JlYXRlKHEyZS5wcm90b3R5cGUpO3JldHVybiBwLmltcGxpY2l0PSh0aGlzLmltcGxpY2l0fHxbXSkuY29uY2F0KHUpLHAuZXhwbGljaXQ9KHRoaXMuZXhwbGljaXR8fFtdKS5jb25jYXQoZCkscC5jb21waWxlZEltcGxpY2l0PXYkZShwLCJpbXBsaWNpdCIpLHAuY29tcGlsZWRFeHBsaWNpdD12JGUocCwiZXhwbGljaXQiKSxwLmNvbXBpbGVkVHlwZU1hcD1DJHQocC5jb21waWxlZEltcGxpY2l0LHAuY29tcGlsZWRFeHBsaWNpdCkscH07dmFyIFMkdD1xMmUsXyR0PW5ldyBGZygidGFnOnlhbWwub3JnLDIwMDI6c3RyIix7a2luZDoic2NhbGFyIixjb25zdHJ1Y3Q6ZnVuY3Rpb24oaSl7cmV0dXJuIGkhPT1udWxsP2k6IiJ9fSksQSR0PW5ldyBGZygidGFnOnlhbWwub3JnLDIwMDI6c2VxIix7a2luZDoic2VxdWVuY2UiLGNvbnN0cnVjdDpmdW5jdGlvbihpKXtyZXR1cm4gaSE9PW51bGw/aTpbXX19KSxMJHQ9bmV3IEZnKCJ0YWc6eWFtbC5vcmcsMjAwMjptYXAiLHtraW5kOiJtYXBwaW5nIixjb25zdHJ1Y3Q6ZnVuY3Rpb24oaSl7cmV0dXJuIGkhPT1udWxsP2k6e319fSksTSR0PW5ldyBTJHQoe2V4cGxpY2l0OltfJHQsQSR0LEwkdF19KTtmdW5jdGlvbiBEJHQoaSl7aWYoaT09PW51bGwpcmV0dXJuITA7dmFyIHM9aS5sZW5ndGg7cmV0dXJuIHM9PT0xJiZpPT09In4ifHxzPT09NCYmKGk9PT0ibnVsbCJ8fGk9PT0iTnVsbCJ8fGk9PT0iTlVMTCIpfWZ1bmN0aW9uIEkkdCgpe3JldHVybiBudWxsfWZ1bmN0aW9uIE8kdChpKXtyZXR1cm4gaT09PW51bGx9dmFyIE4kdD1uZXcgRmcoInRhZzp5YW1sLm9yZywyMDAyOm51bGwiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6RCR0LGNvbnN0cnVjdDpJJHQscHJlZGljYXRlOk8kdCxyZXByZXNlbnQ6e2Nhbm9uaWNhbDpmdW5jdGlvbigpe3JldHVybiJ+In0sbG93ZXJjYXNlOmZ1bmN0aW9uKCl7cmV0dXJuIm51bGwifSx1cHBlcmNhc2U6ZnVuY3Rpb24oKXtyZXR1cm4iTlVMTCJ9LGNhbWVsY2FzZTpmdW5jdGlvbigpe3JldHVybiJOdWxsIn0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4iIn19LGRlZmF1bHRTdHlsZToibG93ZXJjYXNlIn0pO2Z1bmN0aW9uIFAkdChpKXtpZihpPT09bnVsbClyZXR1cm4hMTt2YXIgcz1pLmxlbmd0aDtyZXR1cm4gcz09PTQmJihpPT09InRydWUifHxpPT09IlRydWUifHxpPT09IlRSVUUiKXx8cz09PTUmJihpPT09ImZhbHNlInx8aT09PSJGYWxzZSJ8fGk9PT0iRkFMU0UiKX1mdW5jdGlvbiBCJHQoaSl7cmV0dXJuIGk9PT0idHJ1ZSJ8fGk9PT0iVHJ1ZSJ8fGk9PT0iVFJVRSJ9ZnVuY3Rpb24gRiR0KGkpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaSk9PT0iW29iamVjdCBCb29sZWFuXSJ9dmFyIFIkdD1uZXcgRmcoInRhZzp5YW1sLm9yZywyMDAyOmJvb2wiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6UCR0LGNvbnN0cnVjdDpCJHQscHJlZGljYXRlOkYkdCxyZXByZXNlbnQ6e2xvd2VyY2FzZTpmdW5jdGlvbihpKXtyZXR1cm4gaT8idHJ1ZSI6ImZhbHNlIn0sdXBwZXJjYXNlOmZ1bmN0aW9uKGkpe3JldHVybiBpPyJUUlVFIjoiRkFMU0UifSxjYW1lbGNhc2U6ZnVuY3Rpb24oaSl7cmV0dXJuIGk/IlRydWUiOiJGYWxzZSJ9fSxkZWZhdWx0U3R5bGU6Imxvd2VyY2FzZSJ9KTtmdW5jdGlvbiBqJHQoaSl7cmV0dXJuIDQ4PD1pJiZpPD01N3x8NjU8PWkmJmk8PTcwfHw5Nzw9aSYmaTw9MTAyfWZ1bmN0aW9uICQkdChpKXtyZXR1cm4gNDg8PWkmJmk8PTU1fWZ1bmN0aW9uIHokdChpKXtyZXR1cm4gNDg8PWkmJmk8PTU3fWZ1bmN0aW9uIHEkdChpKXtpZihpPT09bnVsbClyZXR1cm4hMTt2YXIgcz1pLmxlbmd0aCx1PTAsZD0hMSxwO2lmKCFzKXJldHVybiExO2lmKHA9aVt1XSwocD09PSItInx8cD09PSIrIikmJihwPWlbKyt1XSkscD09PSIwIil7aWYodSsxPT09cylyZXR1cm4hMDtpZihwPWlbKyt1XSxwPT09ImIiKXtmb3IodSsrO3U8czt1KyspaWYocD1pW3VdLHAhPT0iXyIpe2lmKHAhPT0iMCImJnAhPT0iMSIpcmV0dXJuITE7ZD0hMH1yZXR1cm4gZCYmcCE9PSJfIn1pZihwPT09IngiKXtmb3IodSsrO3U8czt1KyspaWYocD1pW3VdLHAhPT0iXyIpe2lmKCFqJHQoaS5jaGFyQ29kZUF0KHUpKSlyZXR1cm4hMTtkPSEwfXJldHVybiBkJiZwIT09Il8ifWlmKHA9PT0ibyIpe2Zvcih1Kys7dTxzO3UrKylpZihwPWlbdV0scCE9PSJfIil7aWYoISQkdChpLmNoYXJDb2RlQXQodSkpKXJldHVybiExO2Q9ITB9cmV0dXJuIGQmJnAhPT0iXyJ9fWlmKHA9PT0iXyIpcmV0dXJuITE7Zm9yKDt1PHM7dSsrKWlmKHA9aVt1XSxwIT09Il8iKXtpZigheiR0KGkuY2hhckNvZGVBdCh1KSkpcmV0dXJuITE7ZD0hMH1yZXR1cm4hKCFkfHxwPT09Il8iKX1mdW5jdGlvbiBIJHQoaSl7dmFyIHM9aSx1PTEsZDtpZihzLmluZGV4T2YoIl8iKSE9PS0xJiYocz1zLnJlcGxhY2UoL18vZywiIikpLGQ9c1swXSwoZD09PSItInx8ZD09PSIrIikmJihkPT09Ii0iJiYodT0tMSkscz1zLnNsaWNlKDEpLGQ9c1swXSkscz09PSIwIilyZXR1cm4gMDtpZihkPT09IjAiKXtpZihzWzFdPT09ImIiKXJldHVybiB1KnBhcnNlSW50KHMuc2xpY2UoMiksMik7aWYoc1sxXT09PSJ4IilyZXR1cm4gdSpwYXJzZUludChzLnNsaWNlKDIpLDE2KTtpZihzWzFdPT09Im8iKXJldHVybiB1KnBhcnNlSW50KHMuc2xpY2UoMiksOCl9cmV0dXJuIHUqcGFyc2VJbnQocywxMCl9ZnVuY3Rpb24gViR0KGkpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaSk9PT0iW29iamVjdCBOdW1iZXJdIiYmaSUxPT09MCYmIUxwLmlzTmVnYXRpdmVaZXJvKGkpfXZhciBVJHQ9bmV3IEZnKCJ0YWc6eWFtbC5vcmcsMjAwMjppbnQiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6cSR0LGNvbnN0cnVjdDpIJHQscHJlZGljYXRlOlYkdCxyZXByZXNlbnQ6e2JpbmFyeTpmdW5jdGlvbihpKXtyZXR1cm4gaT49MD8iMGIiK2kudG9TdHJpbmcoMik6Ii0wYiIraS50b1N0cmluZygyKS5zbGljZSgxKX0sb2N0YWw6ZnVuY3Rpb24oaSl7cmV0dXJuIGk+PTA/IjBvIitpLnRvU3RyaW5nKDgpOiItMG8iK2kudG9TdHJpbmcoOCkuc2xpY2UoMSl9LGRlY2ltYWw6ZnVuY3Rpb24oaSl7cmV0dXJuIGkudG9TdHJpbmcoMTApfSxoZXhhZGVjaW1hbDpmdW5jdGlvbihpKXtyZXR1cm4gaT49MD8iMHgiK2kudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk6Ii0weCIraS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKS5zbGljZSgxKX19LGRlZmF1bHRTdHlsZToiZGVjaW1hbCIsc3R5bGVBbGlhc2VzOntiaW5hcnk6WzIsImJpbiJdLG9jdGFsOls4LCJvY3QiXSxkZWNpbWFsOlsxMCwiZGVjIl0saGV4YWRlY2ltYWw6WzE2LCJoZXgiXX19KSxHJHQ9bmV3IFJlZ0V4cCgiXig/OlstK10/KD86WzAtOV1bMC05X10qKSg/OlxcLlswLTlfXSopPyg/OltlRV1bLStdP1swLTldKyk/fFxcLlswLTlfXSsoPzpbZUVdWy0rXT9bMC05XSspP3xbLStdP1xcLig/OmluZnxJbmZ8SU5GKXxcXC4oPzpuYW58TmFOfE5BTikpJCIpO2Z1bmN0aW9uIEskdChpKXtyZXR1cm4hKGk9PT1udWxsfHwhRyR0LnRlc3QoaSl8fGlbaS5sZW5ndGgtMV09PT0iXyIpfWZ1bmN0aW9uIFckdChpKXt2YXIgcyx1O3JldHVybiBzPWkucmVwbGFjZSgvXy9nLCIiKS50b0xvd2VyQ2FzZSgpLHU9c1swXT09PSItIj8tMToxLCIrLSIuaW5kZXhPZihzWzBdKT49MCYmKHM9cy5zbGljZSgxKSkscz09PSIuaW5mIj91PT09MT9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk6TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZOnM9PT0iLm5hbiI/TmFOOnUqcGFyc2VGbG9hdChzLDEwKX12YXIgWSR0PS9eWy0rXT9bMC05XStlLztmdW5jdGlvbiBYJHQoaSxzKXt2YXIgdTtpZihpc05hTihpKSlzd2l0Y2gocyl7Y2FzZSJsb3dlcmNhc2UiOnJldHVybiIubmFuIjtjYXNlInVwcGVyY2FzZSI6cmV0dXJuIi5OQU4iO2Nhc2UiY2FtZWxjYXNlIjpyZXR1cm4iLk5hTiJ9ZWxzZSBpZihOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk9PT1pKXN3aXRjaChzKXtjYXNlImxvd2VyY2FzZSI6cmV0dXJuIi5pbmYiO2Nhc2UidXBwZXJjYXNlIjpyZXR1cm4iLklORiI7Y2FzZSJjYW1lbGNhc2UiOnJldHVybiIuSW5mIn1lbHNlIGlmKE51bWJlci5ORUdBVElWRV9JTkZJTklUWT09PWkpc3dpdGNoKHMpe2Nhc2UibG93ZXJjYXNlIjpyZXR1cm4iLS5pbmYiO2Nhc2UidXBwZXJjYXNlIjpyZXR1cm4iLS5JTkYiO2Nhc2UiY2FtZWxjYXNlIjpyZXR1cm4iLS5JbmYifWVsc2UgaWYoTHAuaXNOZWdhdGl2ZVplcm8oaSkpcmV0dXJuIi0wLjAiO3JldHVybiB1PWkudG9TdHJpbmcoMTApLFkkdC50ZXN0KHUpP3UucmVwbGFjZSgiZSIsIi5lIik6dX1mdW5jdGlvbiBRJHQoaSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKT09PSJbb2JqZWN0IE51bWJlcl0iJiYoaSUxIT09MHx8THAuaXNOZWdhdGl2ZVplcm8oaSkpfXZhciBKJHQ9bmV3IEZnKCJ0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpLJHQsY29uc3RydWN0OlckdCxwcmVkaWNhdGU6USR0LHJlcHJlc2VudDpYJHQsZGVmYXVsdFN0eWxlOiJsb3dlcmNhc2UifSksdyRlPU0kdC5leHRlbmQoe2ltcGxpY2l0OltOJHQsUiR0LFUkdCxKJHRdfSksWiR0PXckZSx5JGU9bmV3IFJlZ0V4cCgiXihbMC05XVswLTldWzAtOV1bMC05XSktKFswLTldWzAtOV0pLShbMC05XVswLTldKSQiKSx4JGU9bmV3IFJlZ0V4cCgiXihbMC05XVswLTldWzAtOV1bMC05XSktKFswLTldWzAtOV0/KS0oWzAtOV1bMC05XT8pKD86W1R0XXxbIFxcdF0rKShbMC05XVswLTldPyk6KFswLTldWzAtOV0pOihbMC05XVswLTldKSg/OlxcLihbMC05XSopKT8oPzpbIFxcdF0qKFp8KFstK10pKFswLTldWzAtOV0/KSg/OjooWzAtOV1bMC05XSkpPykpPyQiKTtmdW5jdGlvbiBlenQoaSl7cmV0dXJuIGk9PT1udWxsPyExOnkkZS5leGVjKGkpIT09bnVsbHx8eCRlLmV4ZWMoaSkhPT1udWxsfWZ1bmN0aW9uIHR6dChpKXt2YXIgcyx1LGQscCx2LGIseSxUPTAsXz1udWxsLEEsUCxSO2lmKHM9eSRlLmV4ZWMoaSkscz09PW51bGwmJihzPXgkZS5leGVjKGkpKSxzPT09bnVsbCl0aHJvdyBuZXcgRXJyb3IoIkRhdGUgcmVzb2x2ZSBlcnJvciIpO2lmKHU9K3NbMV0sZD0rc1syXS0xLHA9K3NbM10sIXNbNF0pcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHUsZCxwKSk7aWYodj0rc1s0XSxiPStzWzVdLHk9K3NbNl0sc1s3XSl7Zm9yKFQ9c1s3XS5zbGljZSgwLDMpO1QubGVuZ3RoPDM7KVQrPSIwIjtUPStUfXJldHVybiBzWzldJiYoQT0rc1sxMF0sUD0rKHNbMTFdfHwwKSxfPShBKjYwK1ApKjZlNCxzWzldPT09Ii0iJiYoXz0tXykpLFI9bmV3IERhdGUoRGF0ZS5VVEModSxkLHAsdixiLHksVCkpLF8mJlIuc2V0VGltZShSLmdldFRpbWUoKS1fKSxSfWZ1bmN0aW9uIG56dChpKXtyZXR1cm4gaS50b0lTT1N0cmluZygpfXZhciByenQ9bmV3IEZnKCJ0YWc6eWFtbC5vcmcsMjAwMjp0aW1lc3RhbXAiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6ZXp0LGNvbnN0cnVjdDp0enQsaW5zdGFuY2VPZjpEYXRlLHJlcHJlc2VudDpuenR9KTtmdW5jdGlvbiBpenQoaSl7cmV0dXJuIGk9PT0iPDwifHxpPT09bnVsbH12YXIgc3p0PW5ldyBGZygidGFnOnlhbWwub3JnLDIwMDI6bWVyZ2UiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6aXp0fSksSDJlPWBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPQpccmA7ZnVuY3Rpb24gYXp0KGkpe2lmKGk9PT1udWxsKXJldHVybiExO3ZhciBzLHUsZD0wLHA9aS5sZW5ndGgsdj1IMmU7Zm9yKHU9MDt1PHA7dSsrKWlmKHM9di5pbmRleE9mKGkuY2hhckF0KHUpKSwhKHM+NjQpKXtpZihzPDApcmV0dXJuITE7ZCs9Nn1yZXR1cm4gZCU4PT09MH1mdW5jdGlvbiBvenQoaSl7dmFyIHMsdSxkPWkucmVwbGFjZSgvW1xyXG49XS9nLCIiKSxwPWQubGVuZ3RoLHY9SDJlLGI9MCx5PVtdO2ZvcihzPTA7czxwO3MrKylzJTQ9PT0wJiZzJiYoeS5wdXNoKGI+PjE2JjI1NSkseS5wdXNoKGI+PjgmMjU1KSx5LnB1c2goYiYyNTUpKSxiPWI8PDZ8di5pbmRleE9mKGQuY2hhckF0KHMpKTtyZXR1cm4gdT1wJTQqNix1PT09MD8oeS5wdXNoKGI+PjE2JjI1NSkseS5wdXNoKGI+PjgmMjU1KSx5LnB1c2goYiYyNTUpKTp1PT09MTg/KHkucHVzaChiPj4xMCYyNTUpLHkucHVzaChiPj4yJjI1NSkpOnU9PT0xMiYmeS5wdXNoKGI+PjQmMjU1KSxuZXcgVWludDhBcnJheSh5KX1mdW5jdGlvbiBjenQoaSl7dmFyIHM9IiIsdT0wLGQscCx2PWkubGVuZ3RoLGI9SDJlO2ZvcihkPTA7ZDx2O2QrKylkJTM9PT0wJiZkJiYocys9Ylt1Pj4xOCY2M10scys9Ylt1Pj4xMiY2M10scys9Ylt1Pj42JjYzXSxzKz1iW3UmNjNdKSx1PSh1PDw4KStpW2RdO3JldHVybiBwPXYlMyxwPT09MD8ocys9Ylt1Pj4xOCY2M10scys9Ylt1Pj4xMiY2M10scys9Ylt1Pj42JjYzXSxzKz1iW3UmNjNdKTpwPT09Mj8ocys9Ylt1Pj4xMCY2M10scys9Ylt1Pj40JjYzXSxzKz1iW3U8PDImNjNdLHMrPWJbNjRdKTpwPT09MSYmKHMrPWJbdT4+MiY2M10scys9Ylt1PDw0JjYzXSxzKz1iWzY0XSxzKz1iWzY0XSksc31mdW5jdGlvbiB1enQoaSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKT09PSJbb2JqZWN0IFVpbnQ4QXJyYXldIn12YXIgbHp0PW5ldyBGZygidGFnOnlhbWwub3JnLDIwMDI6YmluYXJ5Iix7a2luZDoic2NhbGFyIixyZXNvbHZlOmF6dCxjb25zdHJ1Y3Q6b3p0LHByZWRpY2F0ZTp1enQscmVwcmVzZW50OmN6dH0pLGh6dD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGZ6dD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIGR6dChpKXtpZihpPT09bnVsbClyZXR1cm4hMDt2YXIgcz1bXSx1LGQscCx2LGIseT1pO2Zvcih1PTAsZD15Lmxlbmd0aDt1PGQ7dSs9MSl7aWYocD15W3VdLGI9ITEsZnp0LmNhbGwocCkhPT0iW29iamVjdCBPYmplY3RdIilyZXR1cm4hMTtmb3IodiBpbiBwKWlmKGh6dC5jYWxsKHAsdikpaWYoIWIpYj0hMDtlbHNlIHJldHVybiExO2lmKCFiKXJldHVybiExO2lmKHMuaW5kZXhPZih2KT09PS0xKXMucHVzaCh2KTtlbHNlIHJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIGd6dChpKXtyZXR1cm4gaSE9PW51bGw/aTpbXX12YXIgcHp0PW5ldyBGZygidGFnOnlhbWwub3JnLDIwMDI6b21hcCIse2tpbmQ6InNlcXVlbmNlIixyZXNvbHZlOmR6dCxjb25zdHJ1Y3Q6Z3p0fSksYnp0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gbXp0KGkpe2lmKGk9PT1udWxsKXJldHVybiEwO3ZhciBzLHUsZCxwLHYsYj1pO2Zvcih2PW5ldyBBcnJheShiLmxlbmd0aCkscz0wLHU9Yi5sZW5ndGg7czx1O3MrPTEpe2lmKGQ9YltzXSxienQuY2FsbChkKSE9PSJbb2JqZWN0IE9iamVjdF0ifHwocD1PYmplY3Qua2V5cyhkKSxwLmxlbmd0aCE9PTEpKXJldHVybiExO3Zbc109W3BbMF0sZFtwWzBdXV19cmV0dXJuITB9ZnVuY3Rpb24gdnp0KGkpe2lmKGk9PT1udWxsKXJldHVybltdO3ZhciBzLHUsZCxwLHYsYj1pO2Zvcih2PW5ldyBBcnJheShiLmxlbmd0aCkscz0wLHU9Yi5sZW5ndGg7czx1O3MrPTEpZD1iW3NdLHA9T2JqZWN0LmtleXMoZCksdltzXT1bcFswXSxkW3BbMF1dXTtyZXR1cm4gdn12YXIgd3p0PW5ldyBGZygidGFnOnlhbWwub3JnLDIwMDI6cGFpcnMiLHtraW5kOiJzZXF1ZW5jZSIscmVzb2x2ZTptenQsY29uc3RydWN0OnZ6dH0pLHl6dD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIHh6dChpKXtpZihpPT09bnVsbClyZXR1cm4hMDt2YXIgcyx1PWk7Zm9yKHMgaW4gdSlpZih5enQuY2FsbCh1LHMpJiZ1W3NdIT09bnVsbClyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBrenQoaSl7cmV0dXJuIGkhPT1udWxsP2k6e319dmFyIEV6dD1uZXcgRmcoInRhZzp5YW1sLm9yZywyMDAyOnNldCIse2tpbmQ6Im1hcHBpbmciLHJlc29sdmU6eHp0LGNvbnN0cnVjdDprenR9KSxUenQ9WiR0LmV4dGVuZCh7aW1wbGljaXQ6W3J6dCxzenRdLGV4cGxpY2l0OltsenQscHp0LHd6dCxFenRdfSkseDk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxKWD0xLGskZT0yLEUkZT0zLFpYPTQsVjJlPTEsQ3p0PTIsVCRlPTMsU3p0PS9bXHgwMC1ceDA4XHgwQlx4MENceDBFLVx4MUZceDdGLVx4ODRceDg2LVx4OUZcdUZGRkVcdUZGRkZdfFtcdUQ4MDAtXHVEQkZGXSg/IVtcdURDMDAtXHVERkZGXSl8KD86W15cdUQ4MDAtXHVEQkZGXXxeKVtcdURDMDAtXHVERkZGXS8sX3p0PS9bXHg4NVx1MjAyOFx1MjAyOV0vLEF6dD0vWyxcW1xdXHtcfV0vLEMkZT0vXig/OiF8ISF8IVthLXpcLV0rISkkL2ksUyRlPS9eKD86IXxbXixcW1xdXHtcfV0pKD86JVswLTlhLWZdezJ9fFswLTlhLXpcLSM7XC9cPzpAJj1cK1wkLF9cLiF+XConXChcKVxbXF1dKSokL2k7ZnVuY3Rpb24gXyRlKGkpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaSl9ZnVuY3Rpb24gVjQoaSl7cmV0dXJuIGk9PT0xMHx8aT09PTEzfWZ1bmN0aW9uIEZDKGkpe3JldHVybiBpPT09OXx8aT09PTMyfWZ1bmN0aW9uIEYyKGkpe3JldHVybiBpPT09OXx8aT09PTMyfHxpPT09MTB8fGk9PT0xM31mdW5jdGlvbiBfRChpKXtyZXR1cm4gaT09PTQ0fHxpPT09OTF8fGk9PT05M3x8aT09PTEyM3x8aT09PTEyNX1mdW5jdGlvbiBMenQoaSl7dmFyIHM7cmV0dXJuIDQ4PD1pJiZpPD01Nz9pLTQ4OihzPWl8MzIsOTc8PXMmJnM8PTEwMj9zLTk3KzEwOi0xKX1mdW5jdGlvbiBNenQoaSl7cmV0dXJuIGk9PT0xMjA/MjppPT09MTE3PzQ6aT09PTg1Pzg6MH1mdW5jdGlvbiBEenQoaSl7cmV0dXJuIDQ4PD1pJiZpPD01Nz9pLTQ4Oi0xfWZ1bmN0aW9uIEEkZShpKXtyZXR1cm4gaT09PTQ4PyJcMCI6aT09PTk3PyJceDA3IjppPT09OTg/IlxiIjppPT09MTE2fHxpPT09OT8iCSI6aT09PTExMD9gCmA6aT09PTExOD8iXHYiOmk9PT0xMDI/IlxmIjppPT09MTE0PyJcciI6aT09PTEwMT8iXHgxQiI6aT09PTMyPyIgIjppPT09MzQ/JyInOmk9PT00Nz8iLyI6aT09PTkyPyJcXCI6aT09PTc4PyLChSI6aT09PTk1PyLCoCI6aT09PTc2PyJcdTIwMjgiOmk9PT04MD8iXHUyMDI5IjoiIn1mdW5jdGlvbiBJenQoaSl7cmV0dXJuIGk8PTY1NTM1P1N0cmluZy5mcm9tQ2hhckNvZGUoaSk6U3RyaW5nLmZyb21DaGFyQ29kZSgoaS02NTUzNj4+MTApKzU1Mjk2LChpLTY1NTM2JjEwMjMpKzU2MzIwKX1mb3IodmFyIEwkZT1uZXcgQXJyYXkoMjU2KSxNJGU9bmV3IEFycmF5KDI1NiksQUQ9MDtBRDwyNTY7QUQrKylMJGVbQURdPUEkZShBRCk/MTowLE0kZVtBRF09QSRlKEFEKTtmdW5jdGlvbiBPenQoaSxzKXt0aGlzLmlucHV0PWksdGhpcy5maWxlbmFtZT1zLmZpbGVuYW1lfHxudWxsLHRoaXMuc2NoZW1hPXMuc2NoZW1hfHxUenQsdGhpcy5vbldhcm5pbmc9cy5vbldhcm5pbmd8fG51bGwsdGhpcy5sZWdhY3k9cy5sZWdhY3l8fCExLHRoaXMuanNvbj1zLmpzb258fCExLHRoaXMubGlzdGVuZXI9cy5saXN0ZW5lcnx8bnVsbCx0aGlzLmltcGxpY2l0VHlwZXM9dGhpcy5zY2hlbWEuY29tcGlsZWRJbXBsaWNpdCx0aGlzLnR5cGVNYXA9dGhpcy5zY2hlbWEuY29tcGlsZWRUeXBlTWFwLHRoaXMubGVuZ3RoPWkubGVuZ3RoLHRoaXMucG9zaXRpb249MCx0aGlzLmxpbmU9MCx0aGlzLmxpbmVTdGFydD0wLHRoaXMubGluZUluZGVudD0wLHRoaXMuZmlyc3RUYWJJbkxpbmU9LTEsdGhpcy5kb2N1bWVudHM9W119ZnVuY3Rpb24gRCRlKGkscyl7dmFyIHU9e25hbWU6aS5maWxlbmFtZSxidWZmZXI6aS5pbnB1dC5zbGljZSgwLC0xKSxwb3NpdGlvbjppLnBvc2l0aW9uLGxpbmU6aS5saW5lLGNvbHVtbjppLnBvc2l0aW9uLWkubGluZVN0YXJ0fTtyZXR1cm4gdS5zbmlwcGV0PXkkdCh1KSxuZXcgQTcocyx1KX1mdW5jdGlvbiBvYShpLHMpe3Rocm93IEQkZShpLHMpfWZ1bmN0aW9uIGVRKGkscyl7aS5vbldhcm5pbmcmJmkub25XYXJuaW5nLmNhbGwobnVsbCxEJGUoaSxzKSl9dmFyIEkkZT17WUFNTDpmdW5jdGlvbihzLHUsZCl7dmFyIHAsdixiO3MudmVyc2lvbiE9PW51bGwmJm9hKHMsImR1cGxpY2F0aW9uIG9mICVZQU1MIGRpcmVjdGl2ZSIpLGQubGVuZ3RoIT09MSYmb2EocywiWUFNTCBkaXJlY3RpdmUgYWNjZXB0cyBleGFjdGx5IG9uZSBhcmd1bWVudCIpLHA9L14oWzAtOV0rKVwuKFswLTldKykkLy5leGVjKGRbMF0pLHA9PT1udWxsJiZvYShzLCJpbGwtZm9ybWVkIGFyZ3VtZW50IG9mIHRoZSBZQU1MIGRpcmVjdGl2ZSIpLHY9cGFyc2VJbnQocFsxXSwxMCksYj1wYXJzZUludChwWzJdLDEwKSx2IT09MSYmb2EocywidW5hY2NlcHRhYmxlIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQiKSxzLnZlcnNpb249ZFswXSxzLmNoZWNrTGluZUJyZWFrcz1iPDIsYiE9PTEmJmIhPT0yJiZlUShzLCJ1bnN1cHBvcnRlZCBZQU1MIHZlcnNpb24gb2YgdGhlIGRvY3VtZW50Iil9LFRBRzpmdW5jdGlvbihzLHUsZCl7dmFyIHAsdjtkLmxlbmd0aCE9PTImJm9hKHMsIlRBRyBkaXJlY3RpdmUgYWNjZXB0cyBleGFjdGx5IHR3byBhcmd1bWVudHMiKSxwPWRbMF0sdj1kWzFdLEMkZS50ZXN0KHApfHxvYShzLCJpbGwtZm9ybWVkIHRhZyBoYW5kbGUgKGZpcnN0IGFyZ3VtZW50KSBvZiB0aGUgVEFHIGRpcmVjdGl2ZSIpLHg5LmNhbGwocy50YWdNYXAscCkmJm9hKHMsJ3RoZXJlIGlzIGEgcHJldmlvdXNseSBkZWNsYXJlZCBzdWZmaXggZm9yICInK3ArJyIgdGFnIGhhbmRsZScpLFMkZS50ZXN0KHYpfHxvYShzLCJpbGwtZm9ybWVkIHRhZyBwcmVmaXggKHNlY29uZCBhcmd1bWVudCkgb2YgdGhlIFRBRyBkaXJlY3RpdmUiKTt0cnl7dj1kZWNvZGVVUklDb21wb25lbnQodil9Y2F0Y2h7b2EocywidGFnIHByZWZpeCBpcyBtYWxmb3JtZWQ6ICIrdil9cy50YWdNYXBbcF09dn19O2Z1bmN0aW9uIGs5KGkscyx1LGQpe3ZhciBwLHYsYix5O2lmKHM8dSl7aWYoeT1pLmlucHV0LnNsaWNlKHMsdSksZClmb3IocD0wLHY9eS5sZW5ndGg7cDx2O3ArPTEpYj15LmNoYXJDb2RlQXQocCksYj09PTl8fDMyPD1iJiZiPD0xMTE0MTExfHxvYShpLCJleHBlY3RlZCB2YWxpZCBKU09OIGNoYXJhY3RlciIpO2Vsc2UgU3p0LnRlc3QoeSkmJm9hKGksInRoZSBzdHJlYW0gY29udGFpbnMgbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzIik7aS5yZXN1bHQrPXl9fWZ1bmN0aW9uIE8kZShpLHMsdSxkKXt2YXIgcCx2LGIseTtmb3IoTHAuaXNPYmplY3QodSl8fG9hKGksImNhbm5vdCBtZXJnZSBtYXBwaW5nczsgdGhlIHByb3ZpZGVkIHNvdXJjZSBvYmplY3QgaXMgdW5hY2NlcHRhYmxlIikscD1PYmplY3Qua2V5cyh1KSxiPTAseT1wLmxlbmd0aDtiPHk7Yis9MSl2PXBbYl0seDkuY2FsbChzLHYpfHwoc1t2XT11W3ZdLGRbdl09ITApfWZ1bmN0aW9uIExEKGkscyx1LGQscCx2LGIseSxUKXt2YXIgXyxBO2lmKEFycmF5LmlzQXJyYXkocCkpZm9yKHA9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwocCksXz0wLEE9cC5sZW5ndGg7XzxBO18rPTEpQXJyYXkuaXNBcnJheShwW19dKSYmb2EoaSwibmVzdGVkIGFycmF5cyBhcmUgbm90IHN1cHBvcnRlZCBpbnNpZGUga2V5cyIpLHR5cGVvZiBwPT0ib2JqZWN0IiYmXyRlKHBbX10pPT09IltvYmplY3QgT2JqZWN0XSImJihwW19dPSJbb2JqZWN0IE9iamVjdF0iKTtpZih0eXBlb2YgcD09Im9iamVjdCImJl8kZShwKT09PSJbb2JqZWN0IE9iamVjdF0iJiYocD0iW29iamVjdCBPYmplY3RdIikscD1TdHJpbmcocCkscz09PW51bGwmJihzPXt9KSxkPT09InRhZzp5YW1sLm9yZywyMDAyOm1lcmdlIilpZihBcnJheS5pc0FycmF5KHYpKWZvcihfPTAsQT12Lmxlbmd0aDtfPEE7Xys9MSlPJGUoaSxzLHZbX10sdSk7ZWxzZSBPJGUoaSxzLHYsdSk7ZWxzZSFpLmpzb24mJiF4OS5jYWxsKHUscCkmJng5LmNhbGwocyxwKSYmKGkubGluZT1ifHxpLmxpbmUsaS5saW5lU3RhcnQ9eXx8aS5saW5lU3RhcnQsaS5wb3NpdGlvbj1UfHxpLnBvc2l0aW9uLG9hKGksImR1cGxpY2F0ZWQgbWFwcGluZyBrZXkiKSkscD09PSJfX3Byb3RvX18iP09iamVjdC5kZWZpbmVQcm9wZXJ0eShzLHAse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZ9KTpzW3BdPXYsZGVsZXRlIHVbcF07cmV0dXJuIHN9ZnVuY3Rpb24gVTJlKGkpe3ZhciBzO3M9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLHM9PT0xMD9pLnBvc2l0aW9uKys6cz09PTEzPyhpLnBvc2l0aW9uKyssaS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pPT09MTAmJmkucG9zaXRpb24rKyk6b2EoaSwiYSBsaW5lIGJyZWFrIGlzIGV4cGVjdGVkIiksaS5saW5lKz0xLGkubGluZVN0YXJ0PWkucG9zaXRpb24saS5maXJzdFRhYkluTGluZT0tMX1mdW5jdGlvbiBPMChpLHMsdSl7Zm9yKHZhciBkPTAscD1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbik7cCE9PTA7KXtmb3IoO0ZDKHApOylwPT09OSYmaS5maXJzdFRhYkluTGluZT09PS0xJiYoaS5maXJzdFRhYkluTGluZT1pLnBvc2l0aW9uKSxwPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO2lmKHMmJnA9PT0zNSlkbyBwPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO3doaWxlKHAhPT0xMCYmcCE9PTEzJiZwIT09MCk7aWYoVjQocCkpZm9yKFUyZShpKSxwPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSxkKyssaS5saW5lSW5kZW50PTA7cD09PTMyOylpLmxpbmVJbmRlbnQrKyxwPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO2Vsc2UgYnJlYWt9cmV0dXJuIHUhPT0tMSYmZCE9PTAmJmkubGluZUluZGVudDx1JiZlUShpLCJkZWZpY2llbnQgaW5kZW50YXRpb24iKSxkfWZ1bmN0aW9uIHRRKGkpe3ZhciBzPWkucG9zaXRpb24sdTtyZXR1cm4gdT1pLmlucHV0LmNoYXJDb2RlQXQocyksISEoKHU9PT00NXx8dT09PTQ2KSYmdT09PWkuaW5wdXQuY2hhckNvZGVBdChzKzEpJiZ1PT09aS5pbnB1dC5jaGFyQ29kZUF0KHMrMikmJihzKz0zLHU9aS5pbnB1dC5jaGFyQ29kZUF0KHMpLHU9PT0wfHxGMih1KSkpfWZ1bmN0aW9uIEcyZShpLHMpe3M9PT0xP2kucmVzdWx0Kz0iICI6cz4xJiYoaS5yZXN1bHQrPUxwLnJlcGVhdChgCmAscy0xKSl9ZnVuY3Rpb24gTnp0KGkscyx1KXt2YXIgZCxwLHYsYix5LFQsXyxBLFA9aS5raW5kLFI9aS5yZXN1bHQsRjtpZihGPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSxGMihGKXx8X0QoRil8fEY9PT0zNXx8Rj09PTM4fHxGPT09NDJ8fEY9PT0zM3x8Rj09PTEyNHx8Rj09PTYyfHxGPT09Mzl8fEY9PT0zNHx8Rj09PTM3fHxGPT09NjR8fEY9PT05Nnx8KEY9PT02M3x8Rj09PTQ1KSYmKHA9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24rMSksRjIocCl8fHUmJl9EKHApKSlyZXR1cm4hMTtmb3IoaS5raW5kPSJzY2FsYXIiLGkucmVzdWx0PSIiLHY9Yj1pLnBvc2l0aW9uLHk9ITE7RiE9PTA7KXtpZihGPT09NTgpe2lmKHA9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24rMSksRjIocCl8fHUmJl9EKHApKWJyZWFrfWVsc2UgaWYoRj09PTM1KXtpZihkPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uLTEpLEYyKGQpKWJyZWFrfWVsc2V7aWYoaS5wb3NpdGlvbj09PWkubGluZVN0YXJ0JiZ0UShpKXx8dSYmX0QoRikpYnJlYWs7aWYoVjQoRikpaWYoVD1pLmxpbmUsXz1pLmxpbmVTdGFydCxBPWkubGluZUluZGVudCxPMChpLCExLC0xKSxpLmxpbmVJbmRlbnQ+PXMpe3k9ITAsRj1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbik7Y29udGludWV9ZWxzZXtpLnBvc2l0aW9uPWIsaS5saW5lPVQsaS5saW5lU3RhcnQ9XyxpLmxpbmVJbmRlbnQ9QTticmVha319eSYmKGs5KGksdixiLCExKSxHMmUoaSxpLmxpbmUtVCksdj1iPWkucG9zaXRpb24seT0hMSksRkMoRil8fChiPWkucG9zaXRpb24rMSksRj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKX1yZXR1cm4gazkoaSx2LGIsITEpLGkucmVzdWx0PyEwOihpLmtpbmQ9UCxpLnJlc3VsdD1SLCExKX1mdW5jdGlvbiBQenQoaSxzKXt2YXIgdSxkLHA7aWYodT1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbiksdSE9PTM5KXJldHVybiExO2ZvcihpLmtpbmQ9InNjYWxhciIsaS5yZXN1bHQ9IiIsaS5wb3NpdGlvbisrLGQ9cD1pLnBvc2l0aW9uOyh1PWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSkhPT0wOylpZih1PT09MzkpaWYoazkoaSxkLGkucG9zaXRpb24sITApLHU9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbiksdT09PTM5KWQ9aS5wb3NpdGlvbixpLnBvc2l0aW9uKysscD1pLnBvc2l0aW9uO2Vsc2UgcmV0dXJuITA7ZWxzZSBWNCh1KT8oazkoaSxkLHAsITApLEcyZShpLE8wKGksITEscykpLGQ9cD1pLnBvc2l0aW9uKTppLnBvc2l0aW9uPT09aS5saW5lU3RhcnQmJnRRKGkpP29hKGksInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBkb2N1bWVudCB3aXRoaW4gYSBzaW5nbGUgcXVvdGVkIHNjYWxhciIpOihpLnBvc2l0aW9uKysscD1pLnBvc2l0aW9uKTtvYShpLCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIHNpbmdsZSBxdW90ZWQgc2NhbGFyIil9ZnVuY3Rpb24gQnp0KGkscyl7dmFyIHUsZCxwLHYsYix5O2lmKHk9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLHkhPT0zNClyZXR1cm4hMTtmb3IoaS5raW5kPSJzY2FsYXIiLGkucmVzdWx0PSIiLGkucG9zaXRpb24rKyx1PWQ9aS5wb3NpdGlvbjsoeT1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbikpIT09MDspe2lmKHk9PT0zNClyZXR1cm4gazkoaSx1LGkucG9zaXRpb24sITApLGkucG9zaXRpb24rKywhMDtpZih5PT09OTIpe2lmKGs5KGksdSxpLnBvc2l0aW9uLCEwKSx5PWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pLFY0KHkpKU8wKGksITEscyk7ZWxzZSBpZih5PDI1NiYmTCRlW3ldKWkucmVzdWx0Kz1NJGVbeV0saS5wb3NpdGlvbisrO2Vsc2UgaWYoKGI9TXp0KHkpKT4wKXtmb3IocD1iLHY9MDtwPjA7cC0tKXk9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbiksKGI9THp0KHkpKT49MD92PSh2PDw0KStiOm9hKGksImV4cGVjdGVkIGhleGFkZWNpbWFsIGNoYXJhY3RlciIpO2kucmVzdWx0Kz1JenQodiksaS5wb3NpdGlvbisrfWVsc2Ugb2EoaSwidW5rbm93biBlc2NhcGUgc2VxdWVuY2UiKTt1PWQ9aS5wb3NpdGlvbn1lbHNlIFY0KHkpPyhrOShpLHUsZCwhMCksRzJlKGksTzAoaSwhMSxzKSksdT1kPWkucG9zaXRpb24pOmkucG9zaXRpb249PT1pLmxpbmVTdGFydCYmdFEoaSk/b2EoaSwidW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIGRvdWJsZSBxdW90ZWQgc2NhbGFyIik6KGkucG9zaXRpb24rKyxkPWkucG9zaXRpb24pfW9hKGksInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgZG91YmxlIHF1b3RlZCBzY2FsYXIiKX1mdW5jdGlvbiBGenQoaSxzKXt2YXIgdT0hMCxkLHAsdixiPWkudGFnLHksVD1pLmFuY2hvcixfLEEsUCxSLEYsaj1PYmplY3QuY3JlYXRlKG51bGwpLEssZWUsaWUsb2U7aWYob2U9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLG9lPT09OTEpQT05MyxGPSExLHk9W107ZWxzZSBpZihvZT09PTEyMylBPTEyNSxGPSEwLHk9e307ZWxzZSByZXR1cm4hMTtmb3IoaS5hbmNob3IhPT1udWxsJiYoaS5hbmNob3JNYXBbaS5hbmNob3JdPXkpLG9lPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO29lIT09MDspe2lmKE8wKGksITAscyksb2U9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLG9lPT09QSlyZXR1cm4gaS5wb3NpdGlvbisrLGkudGFnPWIsaS5hbmNob3I9VCxpLmtpbmQ9Rj8ibWFwcGluZyI6InNlcXVlbmNlIixpLnJlc3VsdD15LCEwO3U/b2U9PT00NCYmb2EoaSwiZXhwZWN0ZWQgdGhlIG5vZGUgY29udGVudCwgYnV0IGZvdW5kICcsJyIpOm9hKGksIm1pc3NlZCBjb21tYSBiZXR3ZWVuIGZsb3cgY29sbGVjdGlvbiBlbnRyaWVzIiksZWU9Sz1pZT1udWxsLFA9Uj0hMSxvZT09PTYzJiYoXz1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbisxKSxGMihfKSYmKFA9Uj0hMCxpLnBvc2l0aW9uKyssTzAoaSwhMCxzKSkpLGQ9aS5saW5lLHA9aS5saW5lU3RhcnQsdj1pLnBvc2l0aW9uLE1EKGkscyxKWCwhMSwhMCksZWU9aS50YWcsSz1pLnJlc3VsdCxPMChpLCEwLHMpLG9lPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSwoUnx8aS5saW5lPT09ZCkmJm9lPT09NTgmJihQPSEwLG9lPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pLE8wKGksITAscyksTUQoaSxzLEpYLCExLCEwKSxpZT1pLnJlc3VsdCksRj9MRChpLHksaixlZSxLLGllLGQscCx2KTpQP3kucHVzaChMRChpLG51bGwsaixlZSxLLGllLGQscCx2KSk6eS5wdXNoKEspLE8wKGksITAscyksb2U9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLG9lPT09NDQ/KHU9ITAsb2U9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbikpOnU9ITF9b2EoaSwidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBmbG93IGNvbGxlY3Rpb24iKX1mdW5jdGlvbiBSenQoaSxzKXt2YXIgdSxkLHA9VjJlLHY9ITEsYj0hMSx5PXMsVD0wLF89ITEsQSxQO2lmKFA9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLFA9PT0xMjQpZD0hMTtlbHNlIGlmKFA9PT02MilkPSEwO2Vsc2UgcmV0dXJuITE7Zm9yKGkua2luZD0ic2NhbGFyIixpLnJlc3VsdD0iIjtQIT09MDspaWYoUD1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSxQPT09NDN8fFA9PT00NSlWMmU9PT1wP3A9UD09PTQzP1QkZTpDenQ6b2EoaSwicmVwZWF0IG9mIGEgY2hvbXBpbmcgbW9kZSBpZGVudGlmaWVyIik7ZWxzZSBpZigoQT1EenQoUCkpPj0wKUE9PT0wP29hKGksImJhZCBleHBsaWNpdCBpbmRlbnRhdGlvbiB3aWR0aCBvZiBhIGJsb2NrIHNjYWxhcjsgaXQgY2Fubm90IGJlIGxlc3MgdGhhbiBvbmUiKTpiP29hKGksInJlcGVhdCBvZiBhbiBpbmRlbnRhdGlvbiB3aWR0aCBpZGVudGlmaWVyIik6KHk9cytBLTEsYj0hMCk7ZWxzZSBicmVhaztpZihGQyhQKSl7ZG8gUD1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTt3aGlsZShGQyhQKSk7aWYoUD09PTM1KWRvIFA9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7d2hpbGUoIVY0KFApJiZQIT09MCl9Zm9yKDtQIT09MDspe2ZvcihVMmUoaSksaS5saW5lSW5kZW50PTAsUD1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbik7KCFifHxpLmxpbmVJbmRlbnQ8eSkmJlA9PT0zMjspaS5saW5lSW5kZW50KyssUD1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTtpZighYiYmaS5saW5lSW5kZW50PnkmJih5PWkubGluZUluZGVudCksVjQoUCkpe1QrKztjb250aW51ZX1pZihpLmxpbmVJbmRlbnQ8eSl7cD09PVQkZT9pLnJlc3VsdCs9THAucmVwZWF0KGAKYCx2PzErVDpUKTpwPT09VjJlJiZ2JiYoaS5yZXN1bHQrPWAKYCk7YnJlYWt9Zm9yKGQ/RkMoUCk/KF89ITAsaS5yZXN1bHQrPUxwLnJlcGVhdChgCmAsdj8xK1Q6VCkpOl8/KF89ITEsaS5yZXN1bHQrPUxwLnJlcGVhdChgCmAsVCsxKSk6VD09PTA/diYmKGkucmVzdWx0Kz0iICIpOmkucmVzdWx0Kz1McC5yZXBlYXQoYApgLFQpOmkucmVzdWx0Kz1McC5yZXBlYXQoYApgLHY/MStUOlQpLHY9ITAsYj0hMCxUPTAsdT1pLnBvc2l0aW9uOyFWNChQKSYmUCE9PTA7KVA9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7azkoaSx1LGkucG9zaXRpb24sITEpfXJldHVybiEwfWZ1bmN0aW9uIE4kZShpLHMpe3ZhciB1LGQ9aS50YWcscD1pLmFuY2hvcix2PVtdLGIseT0hMSxUO2lmKGkuZmlyc3RUYWJJbkxpbmUhPT0tMSlyZXR1cm4hMTtmb3IoaS5hbmNob3IhPT1udWxsJiYoaS5hbmNob3JNYXBbaS5hbmNob3JdPXYpLFQ9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pO1QhPT0wJiYoaS5maXJzdFRhYkluTGluZSE9PS0xJiYoaS5wb3NpdGlvbj1pLmZpcnN0VGFiSW5MaW5lLG9hKGksInRhYiBjaGFyYWN0ZXJzIG11c3Qgbm90IGJlIHVzZWQgaW4gaW5kZW50YXRpb24iKSksIShUIT09NDV8fChiPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKzEpLCFGMihiKSkpKTspe2lmKHk9ITAsaS5wb3NpdGlvbisrLE8wKGksITAsLTEpJiZpLmxpbmVJbmRlbnQ8PXMpe3YucHVzaChudWxsKSxUPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKTtjb250aW51ZX1pZih1PWkubGluZSxNRChpLHMsRSRlLCExLCEwKSx2LnB1c2goaS5yZXN1bHQpLE8wKGksITAsLTEpLFQ9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLChpLmxpbmU9PT11fHxpLmxpbmVJbmRlbnQ+cykmJlQhPT0wKW9hKGksImJhZCBpbmRlbnRhdGlvbiBvZiBhIHNlcXVlbmNlIGVudHJ5Iik7ZWxzZSBpZihpLmxpbmVJbmRlbnQ8cylicmVha31yZXR1cm4geT8oaS50YWc9ZCxpLmFuY2hvcj1wLGkua2luZD0ic2VxdWVuY2UiLGkucmVzdWx0PXYsITApOiExfWZ1bmN0aW9uIGp6dChpLHMsdSl7dmFyIGQscCx2LGIseSxULF89aS50YWcsQT1pLmFuY2hvcixQPXt9LFI9T2JqZWN0LmNyZWF0ZShudWxsKSxGPW51bGwsaj1udWxsLEs9bnVsbCxlZT0hMSxpZT0hMSxvZTtpZihpLmZpcnN0VGFiSW5MaW5lIT09LTEpcmV0dXJuITE7Zm9yKGkuYW5jaG9yIT09bnVsbCYmKGkuYW5jaG9yTWFwW2kuYW5jaG9yXT1QKSxvZT1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbik7b2UhPT0wOyl7aWYoIWVlJiZpLmZpcnN0VGFiSW5MaW5lIT09LTEmJihpLnBvc2l0aW9uPWkuZmlyc3RUYWJJbkxpbmUsb2EoaSwidGFiIGNoYXJhY3RlcnMgbXVzdCBub3QgYmUgdXNlZCBpbiBpbmRlbnRhdGlvbiIpKSxkPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKzEpLHY9aS5saW5lLChvZT09PTYzfHxvZT09PTU4KSYmRjIoZCkpb2U9PT02Mz8oZWUmJihMRChpLFAsUixGLGosbnVsbCxiLHksVCksRj1qPUs9bnVsbCksaWU9ITAsZWU9ITAscD0hMCk6ZWU/KGVlPSExLHA9ITApOm9hKGksImluY29tcGxldGUgZXhwbGljaXQgbWFwcGluZyBwYWlyOyBhIGtleSBub2RlIGlzIG1pc3NlZDsgb3IgZm9sbG93ZWQgYnkgYSBub24tdGFidWxhdGVkIGVtcHR5IGxpbmUiKSxpLnBvc2l0aW9uKz0xLG9lPWQ7ZWxzZXtpZihiPWkubGluZSx5PWkubGluZVN0YXJ0LFQ9aS5wb3NpdGlvbiwhTUQoaSx1LGskZSwhMSwhMCkpYnJlYWs7aWYoaS5saW5lPT09dil7Zm9yKG9lPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKTtGQyhvZSk7KW9lPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO2lmKG9lPT09NTgpb2U9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbiksRjIob2UpfHxvYShpLCJhIHdoaXRlc3BhY2UgY2hhcmFjdGVyIGlzIGV4cGVjdGVkIGFmdGVyIHRoZSBrZXktdmFsdWUgc2VwYXJhdG9yIHdpdGhpbiBhIGJsb2NrIG1hcHBpbmciKSxlZSYmKExEKGksUCxSLEYsaixudWxsLGIseSxUKSxGPWo9Sz1udWxsKSxpZT0hMCxlZT0hMSxwPSExLEY9aS50YWcsaj1pLnJlc3VsdDtlbHNlIGlmKGllKW9hKGksImNhbiBub3QgcmVhZCBhbiBpbXBsaWNpdCBtYXBwaW5nIHBhaXI7IGEgY29sb24gaXMgbWlzc2VkIik7ZWxzZSByZXR1cm4gaS50YWc9XyxpLmFuY2hvcj1BLCEwfWVsc2UgaWYoaWUpb2EoaSwiY2FuIG5vdCByZWFkIGEgYmxvY2sgbWFwcGluZyBlbnRyeTsgYSBtdWx0aWxpbmUga2V5IG1heSBub3QgYmUgYW4gaW1wbGljaXQga2V5Iik7ZWxzZSByZXR1cm4gaS50YWc9XyxpLmFuY2hvcj1BLCEwfWlmKChpLmxpbmU9PT12fHxpLmxpbmVJbmRlbnQ+cykmJihlZSYmKGI9aS5saW5lLHk9aS5saW5lU3RhcnQsVD1pLnBvc2l0aW9uKSxNRChpLHMsWlgsITAscCkmJihlZT9qPWkucmVzdWx0Oks9aS5yZXN1bHQpLGVlfHwoTEQoaSxQLFIsRixqLEssYix5LFQpLEY9aj1LPW51bGwpLE8wKGksITAsLTEpLG9lPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSksKGkubGluZT09PXZ8fGkubGluZUluZGVudD5zKSYmb2UhPT0wKW9hKGksImJhZCBpbmRlbnRhdGlvbiBvZiBhIG1hcHBpbmcgZW50cnkiKTtlbHNlIGlmKGkubGluZUluZGVudDxzKWJyZWFrfXJldHVybiBlZSYmTEQoaSxQLFIsRixqLG51bGwsYix5LFQpLGllJiYoaS50YWc9XyxpLmFuY2hvcj1BLGkua2luZD0ibWFwcGluZyIsaS5yZXN1bHQ9UCksaWV9ZnVuY3Rpb24gJHp0KGkpe3ZhciBzLHU9ITEsZD0hMSxwLHYsYjtpZihiPWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSxiIT09MzMpcmV0dXJuITE7aWYoaS50YWchPT1udWxsJiZvYShpLCJkdXBsaWNhdGlvbiBvZiBhIHRhZyBwcm9wZXJ0eSIpLGI9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbiksYj09PTYwPyh1PSEwLGI9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbikpOmI9PT0zMz8oZD0hMCxwPSIhISIsYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSk6cD0iISIscz1pLnBvc2l0aW9uLHUpe2RvIGI9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7d2hpbGUoYiE9PTAmJmIhPT02Mik7aS5wb3NpdGlvbjxpLmxlbmd0aD8odj1pLmlucHV0LnNsaWNlKHMsaS5wb3NpdGlvbiksYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSk6b2EoaSwidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSB2ZXJiYXRpbSB0YWciKX1lbHNle2Zvcig7YiE9PTAmJiFGMihiKTspYj09PTMzJiYoZD9vYShpLCJ0YWcgc3VmZml4IGNhbm5vdCBjb250YWluIGV4Y2xhbWF0aW9uIG1hcmtzIik6KHA9aS5pbnB1dC5zbGljZShzLTEsaS5wb3NpdGlvbisxKSxDJGUudGVzdChwKXx8b2EoaSwibmFtZWQgdGFnIGhhbmRsZSBjYW5ub3QgY29udGFpbiBzdWNoIGNoYXJhY3RlcnMiKSxkPSEwLHM9aS5wb3NpdGlvbisxKSksYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTt2PWkuaW5wdXQuc2xpY2UocyxpLnBvc2l0aW9uKSxBenQudGVzdCh2KSYmb2EoaSwidGFnIHN1ZmZpeCBjYW5ub3QgY29udGFpbiBmbG93IGluZGljYXRvciBjaGFyYWN0ZXJzIil9diYmIVMkZS50ZXN0KHYpJiZvYShpLCJ0YWcgbmFtZSBjYW5ub3QgY29udGFpbiBzdWNoIGNoYXJhY3RlcnM6ICIrdik7dHJ5e3Y9ZGVjb2RlVVJJQ29tcG9uZW50KHYpfWNhdGNoe29hKGksInRhZyBuYW1lIGlzIG1hbGZvcm1lZDogIit2KX1yZXR1cm4gdT9pLnRhZz12Ong5LmNhbGwoaS50YWdNYXAscCk/aS50YWc9aS50YWdNYXBbcF0rdjpwPT09IiEiP2kudGFnPSIhIit2OnA9PT0iISEiP2kudGFnPSJ0YWc6eWFtbC5vcmcsMjAwMjoiK3Y6b2EoaSwndW5kZWNsYXJlZCB0YWcgaGFuZGxlICInK3ArJyInKSwhMH1mdW5jdGlvbiB6enQoaSl7dmFyIHMsdTtpZih1PWkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKSx1IT09MzgpcmV0dXJuITE7Zm9yKGkuYW5jaG9yIT09bnVsbCYmb2EoaSwiZHVwbGljYXRpb24gb2YgYW4gYW5jaG9yIHByb3BlcnR5IiksdT1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSxzPWkucG9zaXRpb247dSE9PTAmJiFGMih1KSYmIV9EKHUpOyl1PWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO3JldHVybiBpLnBvc2l0aW9uPT09cyYmb2EoaSwibmFtZSBvZiBhbiBhbmNob3Igbm9kZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNoYXJhY3RlciIpLGkuYW5jaG9yPWkuaW5wdXQuc2xpY2UocyxpLnBvc2l0aW9uKSwhMH1mdW5jdGlvbiBxenQoaSl7dmFyIHMsdSxkO2lmKGQ9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLGQhPT00MilyZXR1cm4hMTtmb3IoZD1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSxzPWkucG9zaXRpb247ZCE9PTAmJiFGMihkKSYmIV9EKGQpOylkPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO3JldHVybiBpLnBvc2l0aW9uPT09cyYmb2EoaSwibmFtZSBvZiBhbiBhbGlhcyBub2RlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIiksdT1pLmlucHV0LnNsaWNlKHMsaS5wb3NpdGlvbikseDkuY2FsbChpLmFuY2hvck1hcCx1KXx8b2EoaSwndW5pZGVudGlmaWVkIGFsaWFzICInK3UrJyInKSxpLnJlc3VsdD1pLmFuY2hvck1hcFt1XSxPMChpLCEwLC0xKSwhMH1mdW5jdGlvbiBNRChpLHMsdSxkLHApe3ZhciB2LGIseSxUPTEsXz0hMSxBPSExLFAsUixGLGosSyxlZTtpZihpLmxpc3RlbmVyIT09bnVsbCYmaS5saXN0ZW5lcigib3BlbiIsaSksaS50YWc9bnVsbCxpLmFuY2hvcj1udWxsLGkua2luZD1udWxsLGkucmVzdWx0PW51bGwsdj1iPXk9Wlg9PT11fHxFJGU9PT11LGQmJk8wKGksITAsLTEpJiYoXz0hMCxpLmxpbmVJbmRlbnQ+cz9UPTE6aS5saW5lSW5kZW50PT09cz9UPTA6aS5saW5lSW5kZW50PHMmJihUPS0xKSksVD09PTEpZm9yKDskenQoaSl8fHp6dChpKTspTzAoaSwhMCwtMSk/KF89ITAseT12LGkubGluZUluZGVudD5zP1Q9MTppLmxpbmVJbmRlbnQ9PT1zP1Q9MDppLmxpbmVJbmRlbnQ8cyYmKFQ9LTEpKTp5PSExO2lmKHkmJih5PV98fHApLChUPT09MXx8Wlg9PT11KSYmKEpYPT09dXx8ayRlPT09dT9LPXM6Sz1zKzEsZWU9aS5wb3NpdGlvbi1pLmxpbmVTdGFydCxUPT09MT95JiYoTiRlKGksZWUpfHxqenQoaSxlZSxLKSl8fEZ6dChpLEspP0E9ITA6KGImJlJ6dChpLEspfHxQenQoaSxLKXx8Qnp0KGksSyk/QT0hMDpxenQoaSk/KEE9ITAsKGkudGFnIT09bnVsbHx8aS5hbmNob3IhPT1udWxsKSYmb2EoaSwiYWxpYXMgbm9kZSBzaG91bGQgbm90IGhhdmUgYW55IHByb3BlcnRpZXMiKSk6Tnp0KGksSyxKWD09PXUpJiYoQT0hMCxpLnRhZz09PW51bGwmJihpLnRhZz0iPyIpKSxpLmFuY2hvciE9PW51bGwmJihpLmFuY2hvck1hcFtpLmFuY2hvcl09aS5yZXN1bHQpKTpUPT09MCYmKEE9eSYmTiRlKGksZWUpKSksaS50YWc9PT1udWxsKWkuYW5jaG9yIT09bnVsbCYmKGkuYW5jaG9yTWFwW2kuYW5jaG9yXT1pLnJlc3VsdCk7ZWxzZSBpZihpLnRhZz09PSI/Iil7Zm9yKGkucmVzdWx0IT09bnVsbCYmaS5raW5kIT09InNjYWxhciImJm9hKGksJ3VuYWNjZXB0YWJsZSBub2RlIGtpbmQgZm9yICE8Pz4gdGFnOyBpdCBzaG91bGQgYmUgInNjYWxhciIsIG5vdCAiJytpLmtpbmQrJyInKSxQPTAsUj1pLmltcGxpY2l0VHlwZXMubGVuZ3RoO1A8UjtQKz0xKWlmKGo9aS5pbXBsaWNpdFR5cGVzW1BdLGoucmVzb2x2ZShpLnJlc3VsdCkpe2kucmVzdWx0PWouY29uc3RydWN0KGkucmVzdWx0KSxpLnRhZz1qLnRhZyxpLmFuY2hvciE9PW51bGwmJihpLmFuY2hvck1hcFtpLmFuY2hvcl09aS5yZXN1bHQpO2JyZWFrfX1lbHNlIGlmKGkudGFnIT09IiEiKXtpZih4OS5jYWxsKGkudHlwZU1hcFtpLmtpbmR8fCJmYWxsYmFjayJdLGkudGFnKSlqPWkudHlwZU1hcFtpLmtpbmR8fCJmYWxsYmFjayJdW2kudGFnXTtlbHNlIGZvcihqPW51bGwsRj1pLnR5cGVNYXAubXVsdGlbaS5raW5kfHwiZmFsbGJhY2siXSxQPTAsUj1GLmxlbmd0aDtQPFI7UCs9MSlpZihpLnRhZy5zbGljZSgwLEZbUF0udGFnLmxlbmd0aCk9PT1GW1BdLnRhZyl7aj1GW1BdO2JyZWFrfWp8fG9hKGksInVua25vd24gdGFnICE8IitpLnRhZysiPiIpLGkucmVzdWx0IT09bnVsbCYmai5raW5kIT09aS5raW5kJiZvYShpLCJ1bmFjY2VwdGFibGUgbm9kZSBraW5kIGZvciAhPCIraS50YWcrJz4gdGFnOyBpdCBzaG91bGQgYmUgIicrai5raW5kKyciLCBub3QgIicraS5raW5kKyciJyksai5yZXNvbHZlKGkucmVzdWx0LGkudGFnKT8oaS5yZXN1bHQ9ai5jb25zdHJ1Y3QoaS5yZXN1bHQsaS50YWcpLGkuYW5jaG9yIT09bnVsbCYmKGkuYW5jaG9yTWFwW2kuYW5jaG9yXT1pLnJlc3VsdCkpOm9hKGksImNhbm5vdCByZXNvbHZlIGEgbm9kZSB3aXRoICE8IitpLnRhZysiPiBleHBsaWNpdCB0YWciKX1yZXR1cm4gaS5saXN0ZW5lciE9PW51bGwmJmkubGlzdGVuZXIoImNsb3NlIixpKSxpLnRhZyE9PW51bGx8fGkuYW5jaG9yIT09bnVsbHx8QX1mdW5jdGlvbiBIenQoaSl7dmFyIHM9aS5wb3NpdGlvbix1LGQscCx2PSExLGI7Zm9yKGkudmVyc2lvbj1udWxsLGkuY2hlY2tMaW5lQnJlYWtzPWkubGVnYWN5LGkudGFnTWFwPU9iamVjdC5jcmVhdGUobnVsbCksaS5hbmNob3JNYXA9T2JqZWN0LmNyZWF0ZShudWxsKTsoYj1pLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbikpIT09MCYmKE8wKGksITAsLTEpLGI9aS5pbnB1dC5jaGFyQ29kZUF0KGkucG9zaXRpb24pLCEoaS5saW5lSW5kZW50PjB8fGIhPT0zNykpOyl7Zm9yKHY9ITAsYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKSx1PWkucG9zaXRpb247YiE9PTAmJiFGMihiKTspYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTtmb3IoZD1pLmlucHV0LnNsaWNlKHUsaS5wb3NpdGlvbikscD1bXSxkLmxlbmd0aDwxJiZvYShpLCJkaXJlY3RpdmUgbmFtZSBtdXN0IG5vdCBiZSBsZXNzIHRoYW4gb25lIGNoYXJhY3RlciBpbiBsZW5ndGgiKTtiIT09MDspe2Zvcig7RkMoYik7KWI9aS5pbnB1dC5jaGFyQ29kZUF0KCsraS5wb3NpdGlvbik7aWYoYj09PTM1KXtkbyBiPWkuaW5wdXQuY2hhckNvZGVBdCgrK2kucG9zaXRpb24pO3doaWxlKGIhPT0wJiYhVjQoYikpO2JyZWFrfWlmKFY0KGIpKWJyZWFrO2Zvcih1PWkucG9zaXRpb247YiE9PTAmJiFGMihiKTspYj1pLmlucHV0LmNoYXJDb2RlQXQoKytpLnBvc2l0aW9uKTtwLnB1c2goaS5pbnB1dC5zbGljZSh1LGkucG9zaXRpb24pKX1iIT09MCYmVTJlKGkpLHg5LmNhbGwoSSRlLGQpP0kkZVtkXShpLGQscCk6ZVEoaSwndW5rbm93biBkb2N1bWVudCBkaXJlY3RpdmUgIicrZCsnIicpfWlmKE8wKGksITAsLTEpLGkubGluZUluZGVudD09PTAmJmkuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKT09PTQ1JiZpLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbisxKT09PTQ1JiZpLmlucHV0LmNoYXJDb2RlQXQoaS5wb3NpdGlvbisyKT09PTQ1PyhpLnBvc2l0aW9uKz0zLE8wKGksITAsLTEpKTp2JiZvYShpLCJkaXJlY3RpdmVzIGVuZCBtYXJrIGlzIGV4cGVjdGVkIiksTUQoaSxpLmxpbmVJbmRlbnQtMSxaWCwhMSwhMCksTzAoaSwhMCwtMSksaS5jaGVja0xpbmVCcmVha3MmJl96dC50ZXN0KGkuaW5wdXQuc2xpY2UocyxpLnBvc2l0aW9uKSkmJmVRKGksIm5vbi1BU0NJSSBsaW5lIGJyZWFrcyBhcmUgaW50ZXJwcmV0ZWQgYXMgY29udGVudCIpLGkuZG9jdW1lbnRzLnB1c2goaS5yZXN1bHQpLGkucG9zaXRpb249PT1pLmxpbmVTdGFydCYmdFEoaSkpe2kuaW5wdXQuY2hhckNvZGVBdChpLnBvc2l0aW9uKT09PTQ2JiYoaS5wb3NpdGlvbis9MyxPMChpLCEwLC0xKSk7cmV0dXJufWlmKGkucG9zaXRpb248aS5sZW5ndGgtMSlvYShpLCJlbmQgb2YgdGhlIHN0cmVhbSBvciBhIGRvY3VtZW50IHNlcGFyYXRvciBpcyBleHBlY3RlZCIpO2Vsc2UgcmV0dXJufWZ1bmN0aW9uIFAkZShpLHMpe2k9U3RyaW5nKGkpLHM9c3x8e30saS5sZW5ndGghPT0wJiYoaS5jaGFyQ29kZUF0KGkubGVuZ3RoLTEpIT09MTAmJmkuY2hhckNvZGVBdChpLmxlbmd0aC0xKSE9PTEzJiYoaSs9YApgKSxpLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKGk9aS5zbGljZSgxKSkpO3ZhciB1PW5ldyBPenQoaSxzKSxkPWkuaW5kZXhPZigiXDAiKTtmb3IoZCE9PS0xJiYodS5wb3NpdGlvbj1kLG9hKHUsIm51bGwgYnl0ZSBpcyBub3QgYWxsb3dlZCBpbiBpbnB1dCIpKSx1LmlucHV0Kz0iXDAiO3UuaW5wdXQuY2hhckNvZGVBdCh1LnBvc2l0aW9uKT09PTMyOyl1LmxpbmVJbmRlbnQrPTEsdS5wb3NpdGlvbis9MTtmb3IoO3UucG9zaXRpb248dS5sZW5ndGgtMTspSHp0KHUpO3JldHVybiB1LmRvY3VtZW50c31mdW5jdGlvbiBWenQoaSxzLHUpe3MhPT1udWxsJiZ0eXBlb2Ygcz09Im9iamVjdCImJnR5cGVvZiB1PiJ1IiYmKHU9cyxzPW51bGwpO3ZhciBkPVAkZShpLHUpO2lmKHR5cGVvZiBzIT0iZnVuY3Rpb24iKXJldHVybiBkO2Zvcih2YXIgcD0wLHY9ZC5sZW5ndGg7cDx2O3ArPTEpcyhkW3BdKX1mdW5jdGlvbiBVenQoaSxzKXt2YXIgdT1QJGUoaSxzKTtpZih1Lmxlbmd0aCE9PTApe2lmKHUubGVuZ3RoPT09MSlyZXR1cm4gdVswXTt0aHJvdyBuZXcgQTcoImV4cGVjdGVkIGEgc2luZ2xlIGRvY3VtZW50IGluIHRoZSBzdHJlYW0sIGJ1dCBmb3VuZCBtb3JlIil9fXZhciBHenQ9Vnp0LEt6dD1VenQsV3p0PXtsb2FkQWxsOkd6dCxsb2FkOkt6dH0sWXp0PXckZSxYenQ9V3p0LmxvYWQ7ZnVuY3Rpb24gUXp0KGkpe2NvbnN0IHM9aS5tYXRjaChJUmUpO2lmKCFzKXJldHVybnt0ZXh0OmksbWV0YWRhdGE6e319O2xldCB1PVh6dChzWzFdLHtzY2hlbWE6WXp0fSk/P3t9O3U9dHlwZW9mIHU9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheSh1KT91Ont9O2NvbnN0IGQ9e307cmV0dXJuIHUuZGlzcGxheU1vZGUmJihkLmRpc3BsYXlNb2RlPXUuZGlzcGxheU1vZGUudG9TdHJpbmcoKSksdS50aXRsZSYmKGQudGl0bGU9dS50aXRsZS50b1N0cmluZygpKSx1LmNvbmZpZyYmKGQuY29uZmlnPXUuY29uZmlnKSx7dGV4dDppLnNsaWNlKHNbMF0ubGVuZ3RoKSxtZXRhZGF0YTpkfX1jb25zdCBKenQ9aT0+aS5yZXBsYWNlKC9cclxuPy9nLGAKYCkucmVwbGFjZSgvPChcdyspKFtePl0qKT4vZywocyx1LGQpPT4iPCIrdStkLnJlcGxhY2UoLz0iKFteIl0qKSIvZywiPSckMSciKSsiPiIpLFp6dD1pPT57Y29uc3R7dGV4dDpzLG1ldGFkYXRhOnV9PVF6dChpKSx7ZGlzcGxheU1vZGU6ZCx0aXRsZTpwLGNvbmZpZzp2PXt9fT11O3JldHVybiBkJiYodi5nYW50dHx8KHYuZ2FudHQ9e30pLHYuZ2FudHQuZGlzcGxheU1vZGU9ZCkse3RpdGxlOnAsY29uZmlnOnYsdGV4dDpzfX0sZXF0PWk9Pntjb25zdCBzPUFvLmRldGVjdEluaXQoaSk/P3t9LHU9QW8uZGV0ZWN0RGlyZWN0aXZlKGksIndyYXAiKTtyZXR1cm4gQXJyYXkuaXNBcnJheSh1KT9zLndyYXA9dS5zb21lKCh7dHlwZTpkfSk9Pnt9KToodT09bnVsbD92b2lkIDA6dS50eXBlKT09PSJ3cmFwIiYmKHMud3JhcD0hMCkse3RleHQ6d1J0KGkpLGRpcmVjdGl2ZTpzfX07ZnVuY3Rpb24gQiRlKGkpe2NvbnN0IHM9Snp0KGkpLHU9Wnp0KHMpLGQ9ZXF0KHUudGV4dCkscD1KRih1LmNvbmZpZyxkLmRpcmVjdGl2ZSk7cmV0dXJuIGk9byR0KGQudGV4dCkse2NvZGU6aSx0aXRsZTp1LnRpdGxlLGNvbmZpZzpwfX1jb25zdCB0cXQ9NWU0LG5xdD0iZ3JhcGggVEI7YVtNYXhpbXVtIHRleHQgc2l6ZSBpbiBkaWFncmFtIGV4Y2VlZGVkXTtzdHlsZSBhIGZpbGw6I2ZhYSIscnF0PSJzYW5kYm94IixpcXQ9Imxvb3NlIixzcXQ9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixhcXQ9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLG9xdD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsY3F0PSIxMDAlIix1cXQ9IjEwMCUiLGxxdD0iYm9yZGVyOjA7bWFyZ2luOjA7IixocXQ9Im1hcmdpbjowIixmcXQ9ImFsbG93LXRvcC1uYXZpZ2F0aW9uLWJ5LXVzZXItYWN0aXZhdGlvbiBhbGxvdy1wb3B1cHMiLGRxdD0nVGhlICJpZnJhbWUiIHRhZyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHlvdXIgYnJvd3Nlci4nLGdxdD1bImZvcmVpZ25vYmplY3QiXSxwcXQ9WyJkb21pbmFudC1iYXNlbGluZSJdO2Z1bmN0aW9uIEYkZShpKXtjb25zdCBzPUIkZShpKTtyZXR1cm4gV1goKSxlanQocy5jb25maWc/P3t9KSxzfWFzeW5jIGZ1bmN0aW9uIGJxdChpLHMpe0IyZSgpLGk9RiRlKGkpLmNvZGU7dHJ5e2F3YWl0IEsyZShpKX1jYXRjaCh1KXtpZihzIT1udWxsJiZzLnN1cHByZXNzRXJyb3JzKXJldHVybiExO3Rocm93IHV9cmV0dXJuITB9Y29uc3QgUiRlPShpLHMsdT1bXSk9PmAKLiR7aX0gJHtzfSB7ICR7dS5qb2luKCIgIWltcG9ydGFudDsgIil9ICFpbXBvcnRhbnQ7IH1gLG1xdD0oaSxzPXt9KT0+e3ZhciBkO2xldCB1PSIiO2lmKGkudGhlbWVDU1MhPT12b2lkIDAmJih1Kz1gCiR7aS50aGVtZUNTU31gKSxpLmZvbnRGYW1pbHkhPT12b2lkIDAmJih1Kz1gCjpyb290IHsgLS1tZXJtYWlkLWZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX19YCksaS5hbHRGb250RmFtaWx5IT09dm9pZCAwJiYodSs9YAo6cm9vdCB7IC0tbWVybWFpZC1hbHQtZm9udC1mYW1pbHk6ICR7aS5hbHRGb250RmFtaWx5fX1gKSwhaVIocykpe2NvbnN0IHk9aS5odG1sTGFiZWxzfHwoKGQ9aS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpkLmh0bWxMYWJlbHMpP1siPiAqIiwic3BhbiJdOlsicmVjdCIsInBvbHlnb24iLCJlbGxpcHNlIiwiY2lyY2xlIiwicGF0aCJdO2Zvcihjb25zdCBUIGluIHMpe2NvbnN0IF89c1tUXTtpUihfLnN0eWxlcyl8fHkuZm9yRWFjaChBPT57dSs9UiRlKF8uaWQsQSxfLnN0eWxlcyl9KSxpUihfLnRleHRTdHlsZXMpfHwodSs9UiRlKF8uaWQsInRzcGFuIixfLnRleHRTdHlsZXMpKX19cmV0dXJuIHV9LHZxdD0oaSxzLHUsZCk9Pntjb25zdCBwPW1xdChpLHUpLHY9VGp0KHMscCxpLnRoZW1lVmFyaWFibGVzKTtyZXR1cm4gTTJlKFdSdChgJHtkfXske3Z9fWApLFhSdCl9LHdxdD0oaT0iIixzLHUpPT57bGV0IGQ9aTtyZXR1cm4hdSYmIXMmJihkPWQucmVwbGFjZSgvbWFya2VyLWVuZD0idXJsXChbXGQrLi86PT9BLVphLXotXSo/Iy9nLCdtYXJrZXItZW5kPSJ1cmwoIycpKSxkPVpGKGQpLGQ9ZC5yZXBsYWNlKC88YnI+L2csIjxici8+IiksZH0seXF0PShpPSIiLHMpPT57dmFyIHAsdjtjb25zdCB1PSh2PShwPXM9PW51bGw/dm9pZCAwOnMudmlld0JveCk9PW51bGw/dm9pZCAwOnAuYmFzZVZhbCkhPW51bGwmJnYuaGVpZ2h0P3Mudmlld0JveC5iYXNlVmFsLmhlaWdodCsicHgiOnVxdCxkPWJ0b2EoJzxib2R5IHN0eWxlPSInK2hxdCsnIj4nK2krIjwvYm9keT4iKTtyZXR1cm5gPGlmcmFtZSBzdHlsZT0id2lkdGg6JHtjcXR9O2hlaWdodDoke3V9OyR7bHF0fSIgc3JjPSJkYXRhOnRleHQvaHRtbDtiYXNlNjQsJHtkfSIgc2FuZGJveD0iJHtmcXR9Ij4KICAke2RxdH0KPC9pZnJhbWU+YH0saiRlPShpLHMsdSxkLHApPT57Y29uc3Qgdj1pLmFwcGVuZCgiZGl2Iik7di5hdHRyKCJpZCIsdSksZCYmdi5hdHRyKCJzdHlsZSIsZCk7Y29uc3QgYj12LmFwcGVuZCgic3ZnIikuYXR0cigiaWQiLHMpLmF0dHIoIndpZHRoIiwiMTAwJSIpLmF0dHIoInhtbG5zIixzcXQpO3JldHVybiBwJiZiLmF0dHIoInhtbG5zOnhsaW5rIixwKSxiLmFwcGVuZCgiZyIpLGl9O2Z1bmN0aW9uICQkZShpLHMpe3JldHVybiBpLmFwcGVuZCgiaWZyYW1lIikuYXR0cigiaWQiLHMpLmF0dHIoInN0eWxlIiwid2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsiKS5hdHRyKCJzYW5kYm94IiwiIil9Y29uc3QgeHF0PShpLHMsdSxkKT0+e3ZhciBwLHYsYjsocD1pLmdldEVsZW1lbnRCeUlkKHMpKT09bnVsbHx8cC5yZW1vdmUoKSwodj1pLmdldEVsZW1lbnRCeUlkKHUpKT09bnVsbHx8di5yZW1vdmUoKSwoYj1pLmdldEVsZW1lbnRCeUlkKGQpKT09bnVsbHx8Yi5yZW1vdmUoKX0sa3F0PWFzeW5jIGZ1bmN0aW9uKGkscyx1KXt2YXIgVSxGZSxQZSxqZSxJZSxTZTtCMmUoKTtjb25zdCBkPUYkZShzKTtzPWQuY29kZTtjb25zdCBwPVZoKCk7WGUuZGVidWcocCkscy5sZW5ndGg+KChwPT1udWxsP3ZvaWQgMDpwLm1heFRleHRTaXplKT8/dHF0KSYmKHM9bnF0KTtjb25zdCB2PSIjIitpLGI9ImkiK2kseT0iIyIrYixUPSJkIitpLF89IiMiK1Q7bGV0IEE9SXIoImJvZHkiKTtjb25zdCBQPXAuc2VjdXJpdHlMZXZlbD09PXJxdCxSPXAuc2VjdXJpdHlMZXZlbD09PWlxdCxGPXAuZm9udEZhbWlseTtpZih1IT09dm9pZCAwKXtpZih1JiYodS5pbm5lckhUTUw9IiIpLFApe2NvbnN0IENlPSQkZShJcih1KSxiKTtBPUlyKENlLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpLEEubm9kZSgpLnN0eWxlLm1hcmdpbj0wfWVsc2UgQT1Jcih1KTtqJGUoQSxpLFQsYGZvbnQtZmFtaWx5OiAke0Z9YCxhcXQpfWVsc2V7aWYoeHF0KGRvY3VtZW50LGksVCxiKSxQKXtjb25zdCBDZT0kJGUoSXIoImJvZHkiKSxiKTtBPUlyKENlLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpLEEubm9kZSgpLnN0eWxlLm1hcmdpbj0wfWVsc2UgQT1JcigiYm9keSIpO2okZShBLGksVCl9bGV0IGosSzt0cnl7aj1hd2FpdCBLMmUocyx7dGl0bGU6ZC50aXRsZX0pfWNhdGNoKENlKXtqPW5ldyBjJGUoImVycm9yIiksSz1DZX1jb25zdCBlZT1BLnNlbGVjdChfKS5ub2RlKCksaWU9ai50eXBlLG9lPWVlLmZpcnN0Q2hpbGQscGU9b2UuZmlyc3RDaGlsZCxiZT0oRmU9KFU9ai5yZW5kZXJlcikuZ2V0Q2xhc3Nlcyk9PW51bGw/dm9pZCAwOkZlLmNhbGwoVSxzLGopLGFlPXZxdChwLGllLGJlLHYpLG5lPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7bmUuaW5uZXJIVE1MPWFlLG9lLmluc2VydEJlZm9yZShuZSxwZSk7dHJ5e2F3YWl0IGoucmVuZGVyZXIuZHJhdyhzLGksQWplLGopfWNhdGNoKENlKXt0aHJvdyBEanQuZHJhdyhzLGksQWplKSxDZX1jb25zdCBzZT1BLnNlbGVjdChgJHtffSBzdmdgKSxkZT0oamU9KFBlPWouZGIpLmdldEFjY1RpdGxlKT09bnVsbD92b2lkIDA6amUuY2FsbChQZSksWD0oU2U9KEllPWouZGIpLmdldEFjY0Rlc2NyaXB0aW9uKT09bnVsbD92b2lkIDA6U2UuY2FsbChJZSk7VHF0KGllLHNlLGRlLFgpLEEuc2VsZWN0KGBbaWQ9IiR7aX0iXWApLnNlbGVjdEFsbCgiZm9yZWlnbm9iamVjdCA+ICoiKS5hdHRyKCJ4bWxucyIsb3F0KTtsZXQgZ2U9QS5zZWxlY3QoXykubm9kZSgpLmlubmVySFRNTDtpZihYZS5kZWJ1ZygiY29uZmlnLmFycm93TWFya2VyQWJzb2x1dGUiLHAuYXJyb3dNYXJrZXJBYnNvbHV0ZSksZ2U9d3F0KGdlLFAsZjEocC5hcnJvd01hcmtlckFic29sdXRlKSksUCl7Y29uc3QgQ2U9QS5zZWxlY3QoXysiIHN2ZyIpLm5vZGUoKTtnZT15cXQoZ2UsQ2UpfWVsc2UgUnx8KGdlPWhELnNhbml0aXplKGdlLHtBRERfVEFHUzpncXQsQUREX0FUVFI6cHF0fSkpO2lmKGpqdCgpLEspdGhyb3cgSztjb25zdCB4ZT1JcihQP3k6Xykubm9kZSgpO3JldHVybiB4ZSYmInJlbW92ZSJpbiB4ZSYmeGUucmVtb3ZlKCkse3N2ZzpnZSxiaW5kRnVuY3Rpb25zOmouZGIuYmluZEZ1bmN0aW9uc319O2Z1bmN0aW9uIEVxdChpPXt9KXt2YXIgdTtpIT1udWxsJiZpLmZvbnRGYW1pbHkmJiEoKHU9aS50aGVtZVZhcmlhYmxlcykhPW51bGwmJnUuZm9udEZhbWlseSkmJihpLnRoZW1lVmFyaWFibGVzfHwoaS50aGVtZVZhcmlhYmxlcz17fSksaS50aGVtZVZhcmlhYmxlcy5mb250RmFtaWx5PWkuZm9udEZhbWlseSksSlJ0KGkpLGkhPW51bGwmJmkudGhlbWUmJmkudGhlbWUgaW4gRTc/aS50aGVtZVZhcmlhYmxlcz1FN1tpLnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyhpLnRoZW1lVmFyaWFibGVzKTppJiYoaS50aGVtZVZhcmlhYmxlcz1FNy5kZWZhdWx0LmdldFRoZW1lVmFyaWFibGVzKGkudGhlbWVWYXJpYWJsZXMpKTtjb25zdCBzPXR5cGVvZiBpPT0ib2JqZWN0Ij9RUnQoaSk6TWplKCk7ZnBlKHMubG9nTGV2ZWwpLEIyZSgpfWNvbnN0IEsyZT0oaSxzPXt9KT0+e2NvbnN0e2NvZGU6dX09QiRlKGkpO3JldHVybiBSanQodSxzKX07ZnVuY3Rpb24gVHF0KGkscyx1LGQpe3MkdChzLGkpLGEkdChzLHUsZCxzLmF0dHIoImlkIikpfWNvbnN0IFJDPU9iamVjdC5mcmVlemUoe3JlbmRlcjprcXQscGFyc2U6YnF0LGdldERpYWdyYW1Gcm9tVGV4dDpLMmUsaW5pdGlhbGl6ZTpFcXQsZ2V0Q29uZmlnOlZoLHNldENvbmZpZzpEamUsZ2V0U2l0ZUNvbmZpZzpNamUsdXBkYXRlU2l0ZUNvbmZpZzpaUnQscmVzZXQ6KCk9PntXWCgpfSxnbG9iYWxSZXNldDooKT0+e1dYKEVEKX0sZGVmYXVsdENvbmZpZzpFRH0pO2ZwZShWaCgpLmxvZ0xldmVsKSxXWChWaCgpKTtjb25zdCBDcXQ9YXN5bmMoKT0+e1hlLmRlYnVnKCJMb2FkaW5nIHJlZ2lzdGVyZWQgZGlhZ3JhbXMiKTtjb25zdCBzPShhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoT2JqZWN0LmVudHJpZXMoZEQpLm1hcChhc3luYyhbdSx7ZGV0ZWN0b3I6ZCxsb2FkZXI6cH1dKT0+e2lmKHApdHJ5e1AyZSh1KX1jYXRjaHt0cnl7Y29uc3R7ZGlhZ3JhbTpiLGlkOnl9PWF3YWl0IHAoKTtRWCh5LGIsZCl9Y2F0Y2goYil7dGhyb3cgWGUuZXJyb3IoYEZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGRpYWdyYW0gd2l0aCBrZXkgJHt1fS4gUmVtb3ZpbmcgZnJvbSBkZXRlY3RvcnMuYCksZGVsZXRlIGREW3VdLGJ9fX0pKSkuZmlsdGVyKHU9PnUuc3RhdHVzPT09InJlamVjdGVkIik7aWYocy5sZW5ndGg+MCl7WGUuZXJyb3IoYEZhaWxlZCB0byBsb2FkICR7cy5sZW5ndGh9IGV4dGVybmFsIGRpYWdyYW1zYCk7Zm9yKGNvbnN0IHUgb2YgcylYZS5lcnJvcih1KTt0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkICR7cy5sZW5ndGh9IGV4dGVybmFsIGRpYWdyYW1zYCl9fSxTcXQ9KGkscyx1KT0+e1hlLndhcm4oaSksd2plKGkpPyh1JiZ1KGkuc3RyLGkuaGFzaCkscy5wdXNoKHsuLi5pLG1lc3NhZ2U6aS5zdHIsZXJyb3I6aX0pKToodSYmdShpKSxpIGluc3RhbmNlb2YgRXJyb3ImJnMucHVzaCh7c3RyOmkubWVzc2FnZSxtZXNzYWdlOmkubWVzc2FnZSxoYXNoOmkubmFtZSxlcnJvcjppfSkpfSx6JGU9YXN5bmMgZnVuY3Rpb24oaT17cXVlcnlTZWxlY3RvcjoiLm1lcm1haWQifSl7dHJ5e2F3YWl0IF9xdChpKX1jYXRjaChzKXtpZih3amUocykmJlhlLmVycm9yKHMuc3RyKSx1bS5wYXJzZUVycm9yJiZ1bS5wYXJzZUVycm9yKHMpLCFpLnN1cHByZXNzRXJyb3JzKXRocm93IFhlLmVycm9yKCJVc2UgdGhlIHN1cHByZXNzRXJyb3JzIG9wdGlvbiB0byBzdXBwcmVzcyB0aGVzZSBlcnJvcnMiKSxzfX0sX3F0PWFzeW5jIGZ1bmN0aW9uKHtwb3N0UmVuZGVyQ2FsbGJhY2s6aSxxdWVyeVNlbGVjdG9yOnMsbm9kZXM6dX09e3F1ZXJ5U2VsZWN0b3I6Ii5tZXJtYWlkIn0pe2NvbnN0IGQ9UkMuZ2V0Q29uZmlnKCk7WGUuZGVidWcoYCR7aT8iIjoiTm8gIn1DYWxsYmFjayBmdW5jdGlvbiBmb3VuZGApO2xldCBwO2lmKHUpcD11O2Vsc2UgaWYocylwPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwocyk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIk5vZGVzIGFuZCBxdWVyeVNlbGVjdG9yIGFyZSBib3RoIHVuZGVmaW5lZCIpO1hlLmRlYnVnKGBGb3VuZCAke3AubGVuZ3RofSBkaWFncmFtc2ApLChkPT1udWxsP3ZvaWQgMDpkLnN0YXJ0T25Mb2FkKSE9PXZvaWQgMCYmKFhlLmRlYnVnKCJTdGFydCBPbiBMb2FkOiAiKyhkPT1udWxsP3ZvaWQgMDpkLnN0YXJ0T25Mb2FkKSksUkMudXBkYXRlU2l0ZUNvbmZpZyh7c3RhcnRPbkxvYWQ6ZD09bnVsbD92b2lkIDA6ZC5zdGFydE9uTG9hZH0pKTtjb25zdCB2PW5ldyBBby5Jbml0SURHZW5lcmF0b3IoZC5kZXRlcm1pbmlzdGljSWRzLGQuZGV0ZXJtaW5pc3RpY0lEU2VlZCk7bGV0IGI7Y29uc3QgeT1bXTtmb3IoY29uc3QgVCBvZiBBcnJheS5mcm9tKHApKXtYZS5pbmZvKCJSZW5kZXJpbmcgZGlhZ3JhbTogIitULmlkKTsvKiEgQ2hlY2sgaWYgcHJldmlvdXNseSBwcm9jZXNzZWQgKi9pZihULmdldEF0dHJpYnV0ZSgiZGF0YS1wcm9jZXNzZWQiKSljb250aW51ZTtULnNldEF0dHJpYnV0ZSgiZGF0YS1wcm9jZXNzZWQiLCJ0cnVlIik7Y29uc3QgXz1gbWVybWFpZC0ke3YubmV4dCgpfWA7Yj1ULmlubmVySFRNTCxiPUpNKEFvLmVudGl0eURlY29kZShiKSkudHJpbSgpLnJlcGxhY2UoLzxiclxzKlwvPz4vZ2ksIjxici8+Iik7Y29uc3QgQT1Bby5kZXRlY3RJbml0KGIpO0EmJlhlLmRlYnVnKCJEZXRlY3RlZCBlYXJseSByZWluaXQ6ICIsQSk7dHJ5e2NvbnN0e3N2ZzpQLGJpbmRGdW5jdGlvbnM6Un09YXdhaXQgVSRlKF8sYixUKTtULmlubmVySFRNTD1QLGkmJmF3YWl0IGkoXyksUiYmUihUKX1jYXRjaChQKXtTcXQoUCx5LHVtLnBhcnNlRXJyb3IpfX1pZih5Lmxlbmd0aD4wKXRocm93IHlbMF19LHEkZT1mdW5jdGlvbihpKXtSQy5pbml0aWFsaXplKGkpfSxBcXQ9YXN5bmMgZnVuY3Rpb24oaSxzLHUpe1hlLndhcm4oIm1lcm1haWQuaW5pdCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHJ1biBpbnN0ZWFkLiIpLGkmJnEkZShpKTtjb25zdCBkPXtwb3N0UmVuZGVyQ2FsbGJhY2s6dSxxdWVyeVNlbGVjdG9yOiIubWVybWFpZCJ9O3R5cGVvZiBzPT0ic3RyaW5nIj9kLnF1ZXJ5U2VsZWN0b3I9czpzJiYocyBpbnN0YW5jZW9mIEhUTUxFbGVtZW50P2Qubm9kZXM9W3NdOmQubm9kZXM9cyksYXdhaXQgeiRlKGQpfSxMcXQ9YXN5bmMoaSx7bGF6eUxvYWQ6cz0hMH09e30pPT57TlJlKC4uLmkpLHM9PT0hMSYmYXdhaXQgQ3F0KCl9LEgkZT1mdW5jdGlvbigpe2lmKHVtLnN0YXJ0T25Mb2FkKXtjb25zdHtzdGFydE9uTG9hZDppfT1SQy5nZXRDb25maWcoKTtpJiZ1bS5ydW4oKS5jYXRjaChzPT5YZS5lcnJvcigiTWVybWFpZCBmYWlsZWQgdG8gaW5pdGlhbGl6ZSIscykpfX07aWYodHlwZW9mIGRvY3VtZW50PCJ1Iil7LyohCiAqIFdhaXQgZm9yIGRvY3VtZW50IGxvYWRlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIGV4ZWN1dGlvbgogKi93aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsSCRlLCExKX1jb25zdCBNcXQ9ZnVuY3Rpb24oaSl7dW0ucGFyc2VFcnJvcj1pfSxuUT1bXTtsZXQgVzJlPSExO2NvbnN0IFYkZT1hc3luYygpPT57aWYoIVcyZSl7Zm9yKFcyZT0hMDtuUS5sZW5ndGg+MDspe2NvbnN0IGk9blEuc2hpZnQoKTtpZihpKXRyeXthd2FpdCBpKCl9Y2F0Y2gocyl7WGUuZXJyb3IoIkVycm9yIGV4ZWN1dGluZyBxdWV1ZSIscyl9fVcyZT0hMX19LERxdD1hc3luYyhpLHMpPT5uZXcgUHJvbWlzZSgodSxkKT0+e2NvbnN0IHA9KCk9Pm5ldyBQcm9taXNlKCh2LGIpPT57UkMucGFyc2UoaSxzKS50aGVuKHk9Pnt2KHkpLHUoeSl9LHk9Pnt2YXIgVDtYZS5lcnJvcigiRXJyb3IgcGFyc2luZyIseSksKFQ9dW0ucGFyc2VFcnJvcik9PW51bGx8fFQuY2FsbCh1bSx5KSxiKHkpLGQoeSl9KX0pO25RLnB1c2gocCksViRlKCkuY2F0Y2goZCl9KSxVJGU9KGkscyx1KT0+bmV3IFByb21pc2UoKGQscCk9Pntjb25zdCB2PSgpPT5uZXcgUHJvbWlzZSgoYix5KT0+e1JDLnJlbmRlcihpLHMsdSkudGhlbihUPT57YihUKSxkKFQpfSxUPT57dmFyIF87WGUuZXJyb3IoIkVycm9yIHBhcnNpbmciLFQpLChfPXVtLnBhcnNlRXJyb3IpPT1udWxsfHxfLmNhbGwodW0sVCkseShUKSxwKFQpfSl9KTtuUS5wdXNoKHYpLFYkZSgpLmNhdGNoKHApfSksdW09e3N0YXJ0T25Mb2FkOiEwLG1lcm1haWRBUEk6UkMscGFyc2U6RHF0LHJlbmRlcjpVJGUsaW5pdDpBcXQscnVuOnokZSxyZWdpc3RlckV4dGVybmFsRGlhZ3JhbXM6THF0LGluaXRpYWxpemU6cSRlLHBhcnNlRXJyb3I6dm9pZCAwLGNvbnRlbnRMb2FkZWQ6SCRlLHNldFBhcnNlRXJyb3JIYW5kbGVyOk1xdCxkZXRlY3RUeXBlOl9YfTtjbGFzcyBsbXtjb25zdHJ1Y3RvcihzLHUsZCl7dGhpcy5sZXhlcj12b2lkIDAsdGhpcy5zdGFydD12b2lkIDAsdGhpcy5lbmQ9dm9pZCAwLHRoaXMubGV4ZXI9cyx0aGlzLnN0YXJ0PXUsdGhpcy5lbmQ9ZH1zdGF0aWMgcmFuZ2Uocyx1KXtyZXR1cm4gdT8hc3x8IXMubG9jfHwhdS5sb2N8fHMubG9jLmxleGVyIT09dS5sb2MubGV4ZXI/bnVsbDpuZXcgbG0ocy5sb2MubGV4ZXIscy5sb2Muc3RhcnQsdS5sb2MuZW5kKTpzJiZzLmxvY319Y2xhc3MgVTR7Y29uc3RydWN0b3Iocyx1KXt0aGlzLnRleHQ9dm9pZCAwLHRoaXMubG9jPXZvaWQgMCx0aGlzLm5vZXhwYW5kPXZvaWQgMCx0aGlzLnRyZWF0QXNSZWxheD12b2lkIDAsdGhpcy50ZXh0PXMsdGhpcy5sb2M9dX1yYW5nZShzLHUpe3JldHVybiBuZXcgVTQodSxsbS5yYW5nZSh0aGlzLHMpKX19Y2xhc3MgQ2l7Y29uc3RydWN0b3Iocyx1KXt0aGlzLm5hbWU9dm9pZCAwLHRoaXMucG9zaXRpb249dm9pZCAwLHRoaXMubGVuZ3RoPXZvaWQgMCx0aGlzLnJhd01lc3NhZ2U9dm9pZCAwO3ZhciBkPSJLYVRlWCBwYXJzZSBlcnJvcjogIitzLHAsdixiPXUmJnUubG9jO2lmKGImJmIuc3RhcnQ8PWIuZW5kKXt2YXIgeT1iLmxleGVyLmlucHV0O3A9Yi5zdGFydCx2PWIuZW5kLHA9PT15Lmxlbmd0aD9kKz0iIGF0IGVuZCBvZiBpbnB1dDogIjpkKz0iIGF0IHBvc2l0aW9uICIrKHArMSkrIjogIjt2YXIgVD15LnNsaWNlKHAsdikucmVwbGFjZSgvW15dL2csIiQmzLIiKSxfO3A+MTU/Xz0i4oCmIit5LnNsaWNlKHAtMTUscCk6Xz15LnNsaWNlKDAscCk7dmFyIEE7disxNTx5Lmxlbmd0aD9BPXkuc2xpY2Uodix2KzE1KSsi4oCmIjpBPXkuc2xpY2UodiksZCs9XytUK0F9dmFyIFA9bmV3IEVycm9yKGQpO3JldHVybiBQLm5hbWU9IlBhcnNlRXJyb3IiLFAuX19wcm90b19fPUNpLnByb3RvdHlwZSxQLnBvc2l0aW9uPXAscCE9bnVsbCYmdiE9bnVsbCYmKFAubGVuZ3RoPXYtcCksUC5yYXdNZXNzYWdlPXMsUH19Q2kucHJvdG90eXBlLl9fcHJvdG9fXz1FcnJvci5wcm90b3R5cGU7dmFyIElxdD1mdW5jdGlvbihzLHUpe3JldHVybiBzLmluZGV4T2YodSkhPT0tMX0sT3F0PWZ1bmN0aW9uKHMsdSl7cmV0dXJuIHM9PT12b2lkIDA/dTpzfSxOcXQ9LyhbQS1aXSkvZyxQcXQ9ZnVuY3Rpb24ocyl7cmV0dXJuIHMucmVwbGFjZShOcXQsIi0kMSIpLnRvTG93ZXJDYXNlKCl9LEJxdD17IiYiOiImYW1wOyIsIj4iOiImZ3Q7IiwiPCI6IiZsdDsiLCciJzoiJnF1b3Q7IiwiJyI6IiYjeDI3OyJ9LEZxdD0vWyY+PCInXS9nO2Z1bmN0aW9uIFJxdChpKXtyZXR1cm4gU3RyaW5nKGkpLnJlcGxhY2UoRnF0LHM9PkJxdFtzXSl9dmFyIEckZT1mdW5jdGlvbiBpKHMpe3JldHVybiBzLnR5cGU9PT0ib3JkZ3JvdXAifHxzLnR5cGU9PT0iY29sb3IiP3MuYm9keS5sZW5ndGg9PT0xP2kocy5ib2R5WzBdKTpzOnMudHlwZT09PSJmb250Ij9pKHMuYm9keSk6c30sanF0PWZ1bmN0aW9uKHMpe3ZhciB1PUckZShzKTtyZXR1cm4gdS50eXBlPT09Im1hdGhvcmQifHx1LnR5cGU9PT0idGV4dG9yZCJ8fHUudHlwZT09PSJhdG9tIn0sJHF0PWZ1bmN0aW9uKHMpe2lmKCFzKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgbm9uLW51bGwsIGJ1dCBnb3QgIitTdHJpbmcocykpO3JldHVybiBzfSx6cXQ9ZnVuY3Rpb24ocyl7dmFyIHU9L15ccyooW15cXC8jXSo/KSg/Ojp8JiMwKjU4fCYjeDAqM2EpL2kuZXhlYyhzKTtyZXR1cm4gdSE9bnVsbD91WzFdOiJfcmVsYXRpdmUifSxZYT17Y29udGFpbnM6SXF0LGRlZmx0Ok9xdCxlc2NhcGU6UnF0LGh5cGhlbmF0ZTpQcXQsZ2V0QmFzZUVsZW06RyRlLGlzQ2hhcmFjdGVyQm94OmpxdCxwcm90b2NvbEZyb21Vcmw6enF0fSxyUT17ZGlzcGxheU1vZGU6e3R5cGU6ImJvb2xlYW4iLGRlc2NyaXB0aW9uOiJSZW5kZXIgbWF0aCBpbiBkaXNwbGF5IG1vZGUsIHdoaWNoIHB1dHMgdGhlIG1hdGggaW4gZGlzcGxheSBzdHlsZSAoc28gXFxpbnQgYW5kIFxcc3VtIGFyZSBsYXJnZSwgZm9yIGV4YW1wbGUpLCBhbmQgY2VudGVycyB0aGUgbWF0aCBvbiB0aGUgcGFnZSBvbiBpdHMgb3duIGxpbmUuIixjbGk6Ii1kLCAtLWRpc3BsYXktbW9kZSJ9LG91dHB1dDp7dHlwZTp7ZW51bTpbImh0bWxBbmRNYXRobWwiLCJodG1sIiwibWF0aG1sIl19LGRlc2NyaXB0aW9uOiJEZXRlcm1pbmVzIHRoZSBtYXJrdXAgbGFuZ3VhZ2Ugb2YgdGhlIG91dHB1dC4iLGNsaToiLUYsIC0tZm9ybWF0IDx0eXBlPiJ9LGxlcW5vOnt0eXBlOiJib29sZWFuIixkZXNjcmlwdGlvbjoiUmVuZGVyIGRpc3BsYXkgbWF0aCBpbiBsZXFubyBzdHlsZSAobGVmdC1qdXN0aWZpZWQgdGFncykuIn0sZmxlcW46e3R5cGU6ImJvb2xlYW4iLGRlc2NyaXB0aW9uOiJSZW5kZXIgZGlzcGxheSBtYXRoIGZsdXNoIGxlZnQuIn0sdGhyb3dPbkVycm9yOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiEwLGNsaToiLXQsIC0tbm8tdGhyb3ctb24tZXJyb3IiLGNsaURlc2NyaXB0aW9uOiJSZW5kZXIgZXJyb3JzIChpbiB0aGUgY29sb3IgZ2l2ZW4gYnkgLS1lcnJvci1jb2xvcikgaW5zdGVhZCBvZiB0aHJvd2luZyBhIFBhcnNlRXJyb3IgZXhjZXB0aW9uIHdoZW4gZW5jb3VudGVyaW5nIGFuIGVycm9yLiJ9LGVycm9yQ29sb3I6e3R5cGU6InN0cmluZyIsZGVmYXVsdDoiI2NjMDAwMCIsY2xpOiItYywgLS1lcnJvci1jb2xvciA8Y29sb3I+IixjbGlEZXNjcmlwdGlvbjoiQSBjb2xvciBzdHJpbmcgZ2l2ZW4gaW4gdGhlIGZvcm1hdCAncmdiJyBvciAncnJnZ2JiJyAobm8gIykuIFRoaXMgb3B0aW9uIGRldGVybWluZXMgdGhlIGNvbG9yIG9mIGVycm9ycyByZW5kZXJlZCBieSB0aGUgLXQgb3B0aW9uLiIsY2xpUHJvY2Vzc29yOmk9PiIjIitpfSxtYWNyb3M6e3R5cGU6Im9iamVjdCIsY2xpOiItbSwgLS1tYWNybyA8ZGVmPiIsY2xpRGVzY3JpcHRpb246IkRlZmluZSBjdXN0b20gbWFjcm8gb2YgdGhlIGZvcm0gJ1xcZm9vOmV4cGFuc2lvbicgKHVzZSBtdWx0aXBsZSAtbSBhcmd1bWVudHMgZm9yIG11bHRpcGxlIG1hY3JvcykuIixjbGlEZWZhdWx0OltdLGNsaVByb2Nlc3NvcjooaSxzKT0+KHMucHVzaChpKSxzKX0sbWluUnVsZVRoaWNrbmVzczp7dHlwZToibnVtYmVyIixkZXNjcmlwdGlvbjoiU3BlY2lmaWVzIGEgbWluaW11bSB0aGlja25lc3MsIGluIGVtcywgZm9yIGZyYWN0aW9uIGxpbmVzLCBgXFxzcXJ0YCB0b3AgbGluZXMsIGB7YXJyYXl9YCB2ZXJ0aWNhbCBsaW5lcywgYFxcaGxpbmVgLCBgXFxoZGFzaGxpbmVgLCBgXFx1bmRlcmxpbmVgLCBgXFxvdmVybGluZWAsIGFuZCB0aGUgYm9yZGVycyBvZiBgXFxmYm94YCwgYFxcYm94ZWRgLCBhbmQgYFxcZmNvbG9yYm94YC4iLHByb2Nlc3NvcjppPT5NYXRoLm1heCgwLGkpLGNsaToiLS1taW4tcnVsZS10aGlja25lc3MgPHNpemU+IixjbGlQcm9jZXNzb3I6cGFyc2VGbG9hdH0sY29sb3JJc1RleHRDb2xvcjp7dHlwZToiYm9vbGVhbiIsZGVzY3JpcHRpb246Ik1ha2VzIFxcY29sb3IgYmVoYXZlIGxpa2UgTGFUZVgncyAyLWFyZ3VtZW50IFxcdGV4dGNvbG9yLCBpbnN0ZWFkIG9mIExhVGVYJ3Mgb25lLWFyZ3VtZW50IFxcY29sb3IgbW9kZSBjaGFuZ2UuIixjbGk6Ii1iLCAtLWNvbG9yLWlzLXRleHQtY29sb3IifSxzdHJpY3Q6e3R5cGU6W3tlbnVtOlsid2FybiIsImlnbm9yZSIsImVycm9yIl19LCJib29sZWFuIiwiZnVuY3Rpb24iXSxkZXNjcmlwdGlvbjoiVHVybiBvbiBzdHJpY3QgLyBMYVRlWCBmYWl0aGZ1bG5lc3MgbW9kZSwgd2hpY2ggdGhyb3dzIGFuIGVycm9yIGlmIHRoZSBpbnB1dCB1c2VzIGZlYXR1cmVzIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgTGFUZVguIixjbGk6Ii1TLCAtLXN0cmljdCIsY2xpRGVmYXVsdDohMX0sdHJ1c3Q6e3R5cGU6WyJib29sZWFuIiwiZnVuY3Rpb24iXSxkZXNjcmlwdGlvbjoiVHJ1c3QgdGhlIGlucHV0LCBlbmFibGluZyBhbGwgSFRNTCBmZWF0dXJlcyBzdWNoIGFzIFxcdXJsLiIsY2xpOiItVCwgLS10cnVzdCJ9LG1heFNpemU6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLzAsZGVzY3JpcHRpb246IklmIG5vbi16ZXJvLCBhbGwgdXNlci1zcGVjaWZpZWQgc2l6ZXMsIGUuZy4gaW4gXFxydWxlezUwMGVtfXs1MDBlbX0sIHdpbGwgYmUgY2FwcGVkIHRvIG1heFNpemUgZW1zLiBPdGhlcndpc2UsIGVsZW1lbnRzIGFuZCBzcGFjZXMgY2FuIGJlIGFyYml0cmFyaWx5IGxhcmdlIixwcm9jZXNzb3I6aT0+TWF0aC5tYXgoMCxpKSxjbGk6Ii1zLCAtLW1heC1zaXplIDxuPiIsY2xpUHJvY2Vzc29yOnBhcnNlSW50fSxtYXhFeHBhbmQ6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxZTMsZGVzY3JpcHRpb246IkxpbWl0IHRoZSBudW1iZXIgb2YgbWFjcm8gZXhwYW5zaW9ucyB0byB0aGUgc3BlY2lmaWVkIG51bWJlciwgdG8gcHJldmVudCBlLmcuIGluZmluaXRlIG1hY3JvIGxvb3BzLiBJZiBzZXQgdG8gSW5maW5pdHksIHRoZSBtYWNybyBleHBhbmRlciB3aWxsIHRyeSB0byBmdWxseSBleHBhbmQgYXMgaW4gTGFUZVguIixwcm9jZXNzb3I6aT0+TWF0aC5tYXgoMCxpKSxjbGk6Ii1lLCAtLW1heC1leHBhbmQgPG4+IixjbGlQcm9jZXNzb3I6aT0+aT09PSJJbmZpbml0eSI/MS8wOnBhcnNlSW50KGkpfSxnbG9iYWxHcm91cDp7dHlwZToiYm9vbGVhbiIsY2xpOiExfX07ZnVuY3Rpb24gcXF0KGkpe2lmKGkuZGVmYXVsdClyZXR1cm4gaS5kZWZhdWx0O3ZhciBzPWkudHlwZSx1PUFycmF5LmlzQXJyYXkocyk/c1swXTpzO2lmKHR5cGVvZiB1IT0ic3RyaW5nIilyZXR1cm4gdS5lbnVtWzBdO3N3aXRjaCh1KXtjYXNlImJvb2xlYW4iOnJldHVybiExO2Nhc2Uic3RyaW5nIjpyZXR1cm4iIjtjYXNlIm51bWJlciI6cmV0dXJuIDA7Y2FzZSJvYmplY3QiOnJldHVybnt9fX1jbGFzcyBZMmV7Y29uc3RydWN0b3Iocyl7dGhpcy5kaXNwbGF5TW9kZT12b2lkIDAsdGhpcy5vdXRwdXQ9dm9pZCAwLHRoaXMubGVxbm89dm9pZCAwLHRoaXMuZmxlcW49dm9pZCAwLHRoaXMudGhyb3dPbkVycm9yPXZvaWQgMCx0aGlzLmVycm9yQ29sb3I9dm9pZCAwLHRoaXMubWFjcm9zPXZvaWQgMCx0aGlzLm1pblJ1bGVUaGlja25lc3M9dm9pZCAwLHRoaXMuY29sb3JJc1RleHRDb2xvcj12b2lkIDAsdGhpcy5zdHJpY3Q9dm9pZCAwLHRoaXMudHJ1c3Q9dm9pZCAwLHRoaXMubWF4U2l6ZT12b2lkIDAsdGhpcy5tYXhFeHBhbmQ9dm9pZCAwLHRoaXMuZ2xvYmFsR3JvdXA9dm9pZCAwLHM9c3x8e307Zm9yKHZhciB1IGluIHJRKWlmKHJRLmhhc093blByb3BlcnR5KHUpKXt2YXIgZD1yUVt1XTt0aGlzW3VdPXNbdV0hPT12b2lkIDA/ZC5wcm9jZXNzb3I/ZC5wcm9jZXNzb3Ioc1t1XSk6c1t1XTpxcXQoZCl9fXJlcG9ydE5vbnN0cmljdChzLHUsZCl7dmFyIHA9dGhpcy5zdHJpY3Q7aWYodHlwZW9mIHA9PSJmdW5jdGlvbiImJihwPXAocyx1LGQpKSwhKCFwfHxwPT09Imlnbm9yZSIpKXtpZihwPT09ITB8fHA9PT0iZXJyb3IiKXRocm93IG5ldyBDaSgiTGFUZVgtaW5jb21wYXRpYmxlIGlucHV0IGFuZCBzdHJpY3QgbW9kZSBpcyBzZXQgdG8gJ2Vycm9yJzogIisodSsiIFsiK3MrIl0iKSxkKTtwPT09Indhcm4iP3R5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuKCJMYVRlWC1pbmNvbXBhdGlibGUgaW5wdXQgYW5kIHN0cmljdCBtb2RlIGlzIHNldCB0byAnd2Fybic6ICIrKHUrIiBbIitzKyJdIikpOnR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuKCJMYVRlWC1pbmNvbXBhdGlibGUgaW5wdXQgYW5kIHN0cmljdCBtb2RlIGlzIHNldCB0byAiKygidW5yZWNvZ25pemVkICciK3ArIic6ICIrdSsiIFsiK3MrIl0iKSl9fXVzZVN0cmljdEJlaGF2aW9yKHMsdSxkKXt2YXIgcD10aGlzLnN0cmljdDtpZih0eXBlb2YgcD09ImZ1bmN0aW9uIil0cnl7cD1wKHMsdSxkKX1jYXRjaHtwPSJlcnJvciJ9cmV0dXJuIXB8fHA9PT0iaWdub3JlIj8hMTpwPT09ITB8fHA9PT0iZXJyb3IiPyEwOnA9PT0id2FybiI/KHR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuKCJMYVRlWC1pbmNvbXBhdGlibGUgaW5wdXQgYW5kIHN0cmljdCBtb2RlIGlzIHNldCB0byAnd2Fybic6ICIrKHUrIiBbIitzKyJdIikpLCExKToodHlwZW9mIGNvbnNvbGU8InUiJiZjb25zb2xlLndhcm4oIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvICIrKCJ1bnJlY29nbml6ZWQgJyIrcCsiJzogIit1KyIgWyIrcysiXSIpKSwhMSl9aXNUcnVzdGVkKHMpe3MudXJsJiYhcy5wcm90b2NvbCYmKHMucHJvdG9jb2w9WWEucHJvdG9jb2xGcm9tVXJsKHMudXJsKSk7dmFyIHU9dHlwZW9mIHRoaXMudHJ1c3Q9PSJmdW5jdGlvbiI/dGhpcy50cnVzdChzKTp0aGlzLnRydXN0O3JldHVybiEhdX19Y2xhc3MgRTl7Y29uc3RydWN0b3Iocyx1LGQpe3RoaXMuaWQ9dm9pZCAwLHRoaXMuc2l6ZT12b2lkIDAsdGhpcy5jcmFtcGVkPXZvaWQgMCx0aGlzLmlkPXMsdGhpcy5zaXplPXUsdGhpcy5jcmFtcGVkPWR9c3VwKCl7cmV0dXJuIEc0W0hxdFt0aGlzLmlkXV19c3ViKCl7cmV0dXJuIEc0W1ZxdFt0aGlzLmlkXV19ZnJhY051bSgpe3JldHVybiBHNFtVcXRbdGhpcy5pZF1dfWZyYWNEZW4oKXtyZXR1cm4gRzRbR3F0W3RoaXMuaWRdXX1jcmFtcCgpe3JldHVybiBHNFtLcXRbdGhpcy5pZF1dfXRleHQoKXtyZXR1cm4gRzRbV3F0W3RoaXMuaWRdXX1pc1RpZ2h0KCl7cmV0dXJuIHRoaXMuc2l6ZT49Mn19dmFyIFgyZT0wLGlRPTEsREQ9MixMNz0zLGFSPTQsUHY9NSxJRD02LE1wPTcsRzQ9W25ldyBFOShYMmUsMCwhMSksbmV3IEU5KGlRLDAsITApLG5ldyBFOShERCwxLCExKSxuZXcgRTkoTDcsMSwhMCksbmV3IEU5KGFSLDIsITEpLG5ldyBFOShQdiwyLCEwKSxuZXcgRTkoSUQsMywhMSksbmV3IEU5KE1wLDMsITApXSxIcXQ9W2FSLFB2LGFSLFB2LElELE1wLElELE1wXSxWcXQ9W1B2LFB2LFB2LFB2LE1wLE1wLE1wLE1wXSxVcXQ9W0RELEw3LGFSLFB2LElELE1wLElELE1wXSxHcXQ9W0w3LEw3LFB2LFB2LE1wLE1wLE1wLE1wXSxLcXQ9W2lRLGlRLEw3LEw3LFB2LFB2LE1wLE1wXSxXcXQ9W1gyZSxpUSxERCxMNyxERCxMNyxERCxMN10sVGE9e0RJU1BMQVk6RzRbWDJlXSxURVhUOkc0W0REXSxTQ1JJUFQ6RzRbYVJdLFNDUklQVFNDUklQVDpHNFtJRF19LFEyZT1be25hbWU6ImxhdGluIixibG9ja3M6W1syNTYsNTkxXSxbNzY4LDg3OV1dfSx7bmFtZToiY3lyaWxsaWMiLGJsb2NrczpbWzEwMjQsMTI3OV1dfSx7bmFtZToiYXJtZW5pYW4iLGJsb2NrczpbWzEzMjgsMTQyM11dfSx7bmFtZToiYnJhaG1pYyIsYmxvY2tzOltbMjMwNCw0MjU1XV19LHtuYW1lOiJnZW9yZ2lhbiIsYmxvY2tzOltbNDI1Niw0MzUxXV19LHtuYW1lOiJjamsiLGJsb2NrczpbWzEyMjg4LDEyNTQzXSxbMTk5NjgsNDA4NzldLFs2NTI4MCw2NTM3Nl1dfSx7bmFtZToiaGFuZ3VsIixibG9ja3M6W1s0NDAzMiw1NTIxNV1dfV07ZnVuY3Rpb24gWXF0KGkpe2Zvcih2YXIgcz0wO3M8UTJlLmxlbmd0aDtzKyspZm9yKHZhciB1PVEyZVtzXSxkPTA7ZDx1LmJsb2Nrcy5sZW5ndGg7ZCsrKXt2YXIgcD11LmJsb2Nrc1tkXTtpZihpPj1wWzBdJiZpPD1wWzFdKXJldHVybiB1Lm5hbWV9cmV0dXJuIG51bGx9dmFyIHNRPVtdO1EyZS5mb3JFYWNoKGk9PmkuYmxvY2tzLmZvckVhY2gocz0+c1EucHVzaCguLi5zKSkpO2Z1bmN0aW9uIEskZShpKXtmb3IodmFyIHM9MDtzPHNRLmxlbmd0aDtzKz0yKWlmKGk+PXNRW3NdJiZpPD1zUVtzKzFdKXJldHVybiEwO3JldHVybiExfXZhciBPRD04MCxYcXQ9ZnVuY3Rpb24ocyx1KXtyZXR1cm4iTTk1LCIrKDYyMitzK3UpK2AKYy0yLjcsMCwtNy4xNywtMi43LC0xMy41LC04Yy01LjgsLTUuMywtOS41LC0xMCwtOS41LC0xNApjMCwtMiwwLjMsLTMuMywxLC00YzEuMywtMi43LDIzLjgzLC0yMC43LDY3LjUsLTU0CmM0NC4yLC0zMy4zLDY1LjgsLTUwLjMsNjYuNSwtNTFjMS4zLC0xLjMsMywtMiw1LC0yYzQuNywwLDguNywzLjMsMTIsMTAKczE3MywzNzgsMTczLDM3OGMwLjcsMCwzNS4zLC03MSwxMDQsLTIxM2M2OC43LC0xNDIsMTM3LjUsLTI4NSwyMDYuNSwtNDI5CmM2OSwtMTQ0LDEwNC41LC0yMTcuNywxMDYuNSwtMjIxCmxgK3MvMi4wNzUrIiAtIitzK2AKYzUuMywtOS4zLDEyLC0xNCwyMCwtMTQKSDQwMDAwMHZgKyg0MCtzKStgSDg0NS4yNzI0CnMtMjI1LjI3Miw0NjcsLTIyNS4yNzIsNDY3cy0yMzUsNDg2LC0yMzUsNDg2Yy0yLjcsNC43LC05LDcsLTE5LDcKYy02LDAsLTEwLC0xLC0xMiwtM3MtMTk0LC00MjIsLTE5NCwtNDIycy02NSw0NywtNjUsNDd6Ck1gKyg4MzQrcykrIiAiK3UrImg0MDAwMDB2IisoNDArcykrImgtNDAwMDAweiJ9LFFxdD1mdW5jdGlvbihzLHUpe3JldHVybiJNMjYzLCIrKDYwMStzK3UpK2BjMC43LDAsMTgsMzkuNyw1MiwxMTkKYzM0LDc5LjMsNjguMTY3LDE1OC43LDEwMi41LDIzOGMzNC4zLDc5LjMsNTEuOCwxMTkuMyw1Mi41LDEyMApjMzQwLC03MDQuNyw1MTAuNywtMTA2MC4zLDUxMiwtMTA2NwpsYCtzLzIuMDg0KyIgLSIrcytgCmM0LjcsLTcuMywxMSwtMTEsMTksLTExCkg0MDAwMHZgKyg0MCtzKStgSDEwMTIuMwpzLTI3MS4zLDU2NywtMjcxLjMsNTY3Yy0zOC43LDgwLjcsLTg0LDE3NSwtMTM2LDI4M2MtNTIsMTA4LC04OS4xNjcsMTg1LjMsLTExMS41LDIzMgpjLTIyLjMsNDYuNywtMzMuOCw3MC4zLC0zNC41LDcxYy00LjcsNC43LC0xMi4zLDcsLTIzLDdzLTEyLC0xLC0xMiwtMQpzLTEwOSwtMjUzLC0xMDksLTI1M2MtNzIuNywtMTY4LC0xMDkuMywtMjUyLC0xMTAsLTI1MmMtMTAuNyw4LC0yMiwxNi43LC0zNCwyNgpjLTIyLDE3LjMsLTMzLjMsMjYsLTM0LDI2cy0yNiwtMjYsLTI2LC0yNnM3NiwtNTksNzYsLTU5czc2LC02MCw3NiwtNjB6Ck1gKygxMDAxK3MpKyIgIit1KyJoNDAwMDAwdiIrKDQwK3MpKyJoLTQwMDAwMHoifSxKcXQ9ZnVuY3Rpb24ocyx1KXtyZXR1cm4iTTk4MyAiKygxMCtzK3UpK2AKbGArcy8zLjEzKyIgLSIrcytgCmM0LC02LjcsMTAsLTEwLDE4LC0xMCBINDAwMDAwdmArKDQwK3MpK2AKSDEwMTMuMXMtODMuNCwyNjgsLTI2NC4xLDg0MGMtMTgwLjcsNTcyLC0yNzcsODc2LjMsLTI4OSw5MTNjLTQuNyw0LjcsLTEyLjcsNywtMjQsNwpzLTEyLDAsLTEyLDBjLTEuMywtMy4zLC0zLjcsLTExLjcsLTcsLTI1Yy0zNS4zLC0xMjUuMywtMTA2LjcsLTM3My4zLC0yMTQsLTc0NApjLTEwLDEyLC0yMSwyNSwtMzMsMzlzLTMyLDM5LC0zMiwzOWMtNiwtNS4zLC0xNSwtMTQsLTI3LC0yNnMyNSwtMzAsMjUsLTMwCmMyNi43LC0zMi43LDUyLC02Myw3NiwtOTFzNTIsLTYwLDUyLC02MHMyMDgsNzIyLDIwOCw3MjIKYzU2LC0xNzUuMywxMjYuMywtMzk3LjMsMjExLC02NjZjODQuNywtMjY4LjcsMTUzLjgsLTQ4OC4yLDIwNy41LC02NTguNQpjNTMuNywtMTcwLjMsODQuNSwtMjY2LjgsOTIuNSwtMjg5LjV6Ck1gKygxMDAxK3MpKyIgIit1KyJoNDAwMDAwdiIrKDQwK3MpKyJoLTQwMDAwMHoifSxacXQ9ZnVuY3Rpb24ocyx1KXtyZXR1cm4iTTQyNCwiKygyMzk4K3MrdSkrYApjLTEuMywtMC43LC0zOC41LC0xNzIsLTExMS41LC01MTRjLTczLC0zNDIsLTEwOS44LC01MTMuMywtMTEwLjUsLTUxNApjMCwtMiwtMTAuNywxNC4zLC0zMiw0OWMtNC43LDcuMywtOS44LDE1LjcsLTE1LjUsMjVjLTUuNyw5LjMsLTkuOCwxNiwtMTIuNSwyMApzLTUsNywtNSw3Yy00LC0zLjMsLTguMywtNy43LC0xMywtMTNzLTEzLC0xMywtMTMsLTEzczc2LC0xMjIsNzYsLTEyMnM3NywtMTIxLDc3LC0xMjEKczIwOSw5NjgsMjA5LDk2OGMwLC0yLDg0LjcsLTM2MS43LDI1NCwtMTA3OWMxNjkuMywtNzE3LjMsMjU0LjcsLTEwNzcuNywyNTYsLTEwODEKbGArcy80LjIyMysiIC0iK3MrYGM0LC02LjcsMTAsLTEwLDE4LC0xMCBINDAwMDAwCnZgKyg0MCtzKStgSDEwMTQuNgpzLTg3LjMsMzc4LjcsLTI3Mi42LDExNjZjLTE4NS4zLDc4Ny4zLC0yNzkuMywxMTgyLjMsLTI4MiwxMTg1CmMtMiw2LC0xMCw5LC0yNCw5CmMtOCwwLC0xMiwtMC43LC0xMiwtMnogTWArKDEwMDErcykrIiAiK3UrYApoNDAwMDAwdmArKDQwK3MpKyJoLTQwMDAwMHoifSxlSHQ9ZnVuY3Rpb24ocyx1KXtyZXR1cm4iTTQ3MywiKygyNzEzK3MrdSkrYApjMzM5LjMsLTE3OTkuMyw1MDkuMywtMjcwMCw1MTAsLTI3MDIgbGArcy81LjI5OCsiIC0iK3MrYApjMy4zLC03LjMsOS4zLC0xMSwxOCwtMTEgSDQwMDAwMHZgKyg0MCtzKStgSDEwMTcuNwpzLTkwLjUsNDc4LC0yNzYuMiwxNDY2Yy0xODUuNyw5ODgsLTI3OS41LDE0ODMsLTI4MS41LDE0ODVjLTIsNiwtMTAsOSwtMjQsOQpjLTgsMCwtMTIsLTAuNywtMTIsLTJjMCwtMS4zLC01LjMsLTMyLC0xNiwtOTJjLTUwLjcsLTI5My4zLC0xMTkuNywtNjkzLjMsLTIwNywtMTIwMApjMCwtMS4zLC01LjMsOC43LC0xNiwzMGMtMTAuNywyMS4zLC0yMS4zLDQyLjcsLTMyLDY0cy0xNiwzMywtMTYsMzNzLTI2LC0yNiwtMjYsLTI2CnM3NiwtMTUzLDc2LC0xNTNzNzcsLTE1MSw3NywtMTUxYzAuNywwLjcsMzUuNywyMDIsMTA1LDYwNGM2Ny4zLDQwMC43LDEwMiw2MDIuNywxMDQsCjYwNnpNYCsoMTAwMStzKSsiICIrdSsiaDQwMDAwMHYiKyg0MCtzKSsiSDEwMTcuN3oifSx0SHQ9ZnVuY3Rpb24ocyl7dmFyIHU9cy8yO3JldHVybiJNNDAwMDAwICIrcysiIEgwIEwiK3UrIiAwIGw2NSA0NSBMMTQ1ICIrKHMtODApKyIgSDQwMDAwMHoifSxuSHQ9ZnVuY3Rpb24ocyx1LGQpe3ZhciBwPWQtNTQtdS1zO3JldHVybiJNNzAyICIrKHMrdSkrIkg0MDAwMDAiKyg0MCtzKStgCkg3NDJ2YCtwK2BsLTQgNC00IDRjLS42NjcuNyAtMiAxLjUtNCAyLjVzLTQuMTY3IDEuODMzLTYuNSAyLjUtNS41IDEtOS41IDEKaC0xMmwtMjgtODRjLTE2LjY2Ny01Mi05Ni42NjcgLTI5NC4zMzMtMjQwLTcyN2wtMjEyIC02NDMgLTg1IDE3MApjLTQtMy4zMzMtOC4zMzMtNy42NjctMTMgLTEzbC0xMy0xM2w3Ny0xNTUgNzctMTU2YzY2IDE5OS4zMzMgMTM5IDQxOS42NjcKMjE5IDY2MSBsMjE4IDY2MXpNNzAyIGArdSsiSDQwMDAwMHYiKyg0MCtzKSsiSDc0MnoifSxySHQ9ZnVuY3Rpb24ocyx1LGQpe3U9MWUzKnU7dmFyIHA9IiI7c3dpdGNoKHMpe2Nhc2Uic3FydE1haW4iOnA9WHF0KHUsT0QpO2JyZWFrO2Nhc2Uic3FydFNpemUxIjpwPVFxdCh1LE9EKTticmVhaztjYXNlInNxcnRTaXplMiI6cD1KcXQodSxPRCk7YnJlYWs7Y2FzZSJzcXJ0U2l6ZTMiOnA9WnF0KHUsT0QpO2JyZWFrO2Nhc2Uic3FydFNpemU0IjpwPWVIdCh1LE9EKTticmVhaztjYXNlInNxcnRUYWxsIjpwPW5IdCh1LE9ELGQpfXJldHVybiBwfSxpSHQ9ZnVuY3Rpb24ocyx1KXtzd2l0Y2gocyl7Y2FzZSLijpwiOnJldHVybiJNMjkxIDAgSDQxNyBWIit1KyIgSDI5MXogTTI5MSAwIEg0MTcgViIrdSsiIEgyOTF6IjtjYXNlIuKIoyI6cmV0dXJuIk0xNDUgMCBIMTg4IFYiK3UrIiBIMTQ1eiBNMTQ1IDAgSDE4OCBWIit1KyIgSDE0NXoiO2Nhc2Ui4oilIjpyZXR1cm4iTTE0NSAwIEgxODggViIrdSsiIEgxNDV6IE0xNDUgMCBIMTg4IFYiK3UrIiBIMTQ1eiIrKCJNMzY3IDAgSDQxMCBWIit1KyIgSDM2N3ogTTM2NyAwIEg0MTAgViIrdSsiIEgzNjd6Iik7Y2FzZSLijp8iOnJldHVybiJNNDU3IDAgSDU4MyBWIit1KyIgSDQ1N3ogTTQ1NyAwIEg1ODMgViIrdSsiIEg0NTd6IjtjYXNlIuKOoiI6cmV0dXJuIk0zMTkgMCBINDAzIFYiK3UrIiBIMzE5eiBNMzE5IDAgSDQwMyBWIit1KyIgSDMxOXoiO2Nhc2Ui4o6lIjpyZXR1cm4iTTI2MyAwIEgzNDcgViIrdSsiIEgyNjN6IE0yNjMgMCBIMzQ3IFYiK3UrIiBIMjYzeiI7Y2FzZSLijqoiOnJldHVybiJNMzg0IDAgSDUwNCBWIit1KyIgSDM4NHogTTM4NCAwIEg1MDQgViIrdSsiIEgzODR6IjtjYXNlIuKPkCI6cmV0dXJuIk0zMTIgMCBIMzU1IFYiK3UrIiBIMzEyeiBNMzEyIDAgSDM1NSBWIit1KyIgSDMxMnoiO2Nhc2Ui4oCWIjpyZXR1cm4iTTI1NyAwIEgzMDAgViIrdSsiIEgyNTd6IE0yNTcgMCBIMzAwIFYiK3UrIiBIMjU3eiIrKCJNNDc4IDAgSDUyMSBWIit1KyIgSDQ3OHogTTQ3OCAwIEg1MjEgViIrdSsiIEg0Nzh6Iik7ZGVmYXVsdDpyZXR1cm4iIn19LFckZT17ZG91YmxlbGVmdGFycm93OmBNMjYyIDE1NwpsMTAtMTBjMzQtMzYgNjIuNy03NyA4Ni0xMjMgMy4zLTggNS0xMy4zIDUtMTYgMC01LjMtNi43LTgtMjAtOC03LjMKIDAtMTIuMi41LTE0LjUgMS41LTIuMyAxLTQuOCA0LjUtNy41IDEwLjUtNDkuMyA5Ny4zLTEyMS43IDE2OS4zLTIxNyAyMTYtMjgKIDE0LTU3LjMgMjUtODggMzMtNi43IDItMTEgMy44LTEzIDUuNS0yIDEuNy0zIDQuMi0zIDcuNXMxIDUuOCAzIDcuNQpjMiAxLjcgNi4zIDMuNSAxMyA1LjUgNjggMTcuMyAxMjguMiA0Ny44IDE4MC41IDkxLjUgNTIuMyA0My43IDkzLjggOTYuMiAxMjQuNQogMTU3LjUgOS4zIDggMTUuMyAxMi4zIDE4IDEzaDZjMTItLjcgMTgtNCAxOC0xMCAwLTItMS43LTctNS0xNS0yMy4zLTQ2LTUyLTg3Ci04Ni0xMjNsLTEwLTEwaDM5OTczOHYtNDBIMjE4YzMyOCAwIDAgMCAwIDBsLTEwLThjLTI2LjctMjAtNjUuNy00My0xMTctNjkgMi43Ci0yIDYtMy43IDEwLTUgMzYuNy0xNiA3Mi4zLTM3LjMgMTA3LTY0bDEwLThoMzk5Nzgydi00MHoKbTggMHY0MGgzOTk3MzB2LTQwem0wIDE5NHY0MGgzOTk3MzB2LTQwemAsZG91YmxlcmlnaHRhcnJvdzpgTTM5OTczOCAzOTJsCi0xMCAxMGMtMzQgMzYtNjIuNyA3Ny04NiAxMjMtMy4zIDgtNSAxMy4zLTUgMTYgMCA1LjMgNi43IDggMjAgOCA3LjMgMCAxMi4yLS41CiAxNC41LTEuNSAyLjMtMSA0LjgtNC41IDcuNS0xMC41IDQ5LjMtOTcuMyAxMjEuNy0xNjkuMyAyMTctMjE2IDI4LTE0IDU3LjMtMjUgODgKLTMzIDYuNy0yIDExLTMuOCAxMy01LjUgMi0xLjcgMy00LjIgMy03LjVzLTEtNS44LTMtNy41Yy0yLTEuNy02LjMtMy41LTEzLTUuNS02OAotMTcuMy0xMjguMi00Ny44LTE4MC41LTkxLjUtNTIuMy00My43LTkzLjgtOTYuMi0xMjQuNS0xNTcuNS05LjMtOC0xNS4zLTEyLjMtMTgKLTEzaC02Yy0xMiAuNy0xOCA0LTE4IDEwIDAgMiAxLjcgNyA1IDE1IDIzLjMgNDYgNTIgODcgODYgMTIzbDEwIDEwSDB2NDBoMzk5NzgyCmMtMzI4IDAgMCAwIDAgMGwxMCA4YzI2LjcgMjAgNjUuNyA0MyAxMTcgNjktMi43IDItNiAzLjctMTAgNS0zNi43IDE2LTcyLjMgMzcuMwotMTA3IDY0bC0xMCA4SDB2NDB6TTAgMTU3djQwaDM5OTczMHYtNDB6bTAgMTk0djQwaDM5OTczMHYtNDB6YCxsZWZ0YXJyb3c6YE00MDAwMDAgMjQxSDExMGwzLTNjNjguNy01Mi43IDExMy43LTEyMAogMTM1LTIwMiA0LTE0LjcgNi0yMyA2LTI1IDAtNy4zLTctMTEtMjEtMTEtOCAwLTEzLjIuOC0xNS41IDIuNS0yLjMgMS43LTQuMiA1LjgKLTUuNSAxMi41LTEuMyA0LjctMi43IDEwLjMtNCAxNy0xMiA0OC43LTM0LjggOTItNjguNSAxMzBTNjUuMyAyMjguMyAxOCAyNDcKYy0xMCA0LTE2IDcuNy0xOCAxMSAwIDguNyA2IDE0LjMgMTggMTcgNDcuMyAxOC43IDg3LjggNDcgMTIxLjUgODVTMTk2IDQ0MS4zIDIwOAogNDkwYy43IDIgMS4zIDUgMiA5czEuMiA2LjcgMS41IDhjLjMgMS4zIDEgMy4zIDIgNnMyLjIgNC41IDMuNSA1LjVjMS4zIDEgMy4zCiAxLjggNiAyLjVzNiAxIDEwIDFjMTQgMCAyMS0zLjcgMjEtMTEgMC0yLTItMTAuMy02LTI1LTIwLTc5LjMtNjUtMTQ2LjctMTM1LTIwMgogbC0zLTNoMzk5ODkwek0xMDAgMjQxdjQwaDM5OTkwMHYtNDB6YCxsZWZ0YnJhY2U6YE02IDU0OGwtNi02di0zNWw2LTExYzU2LTEwNCAxMzUuMy0xODEuMyAyMzgtMjMyIDU3LjMtMjguNyAxMTcKLTQ1IDE3OS01MGgzOTk1Nzd2MTIwSDQwM2MtNDMuMyA3LTgxIDE1LTExMyAyNi0xMDAuNyAzMy0xNzkuNyA5MS0yMzcgMTc0LTIuNwogNS02IDktMTAgMTMtLjcgMS03LjMgMS0yMCAxSDZ6YCxsZWZ0YnJhY2V1bmRlcjpgTTAgNmw2LTZoMTdjMTIuNjg4IDAgMTkuMzEzLjMgMjAgMSA0IDQgNy4zMTMgOC4zIDEwIDEzCiAzNS4zMTMgNTEuMyA4MC44MTMgOTMuOCAxMzYuNSAxMjcuNSA1NS42ODggMzMuNyAxMTcuMTg4IDU1LjggMTg0LjUgNjYuNS42ODgKIDAgMiAuMyA0IDEgMTguNjg4IDIuNyA3NiA0LjMgMTcyIDVoMzk5NDUwdjEyMEg0MjlsLTYtMWMtMTI0LjY4OC04LTIzNS02MS43Ci0zMzEtMTYxQzYwLjY4NyAxMzguNyAzMi4zMTIgOTkuMyA3IDU0TDAgNDFWNnpgLGxlZnRncm91cDpgTTQwMDAwMCA4MApINDM1QzY0IDgwIDE2OC4zIDIyOS40IDIxIDI2MGMtNS45IDEuMi0xOCAwLTE4IDAtMiAwLTMtMS0zLTN2LTM4Qzc2IDYxIDI1NyAwCiA0MzUgMGgzOTk1NjV6YCxsZWZ0Z3JvdXB1bmRlcjpgTTQwMDAwMCAyNjIKSDQzNUM2NCAyNjIgMTY4LjMgMTEyLjYgMjEgODJjLTUuOS0xLjItMTggMC0xOCAwLTIgMC0zIDEtMyAzdjM4Yzc2IDE1OCAyNTcgMjE5CiA0MzUgMjE5aDM5OTU2NXpgLGxlZnRoYXJwb29uOmBNMCAyNjdjLjcgNS4zIDMgMTAgNyAxNGgzOTk5OTN2LTQwSDkzYzMuMwotMy4zIDEwLjItOS41IDIwLjUtMTguNXMxNy44LTE1LjggMjIuNS0yMC41YzUwLjctNTIgODgtMTEwLjMgMTEyLTE3NSA0LTExLjMgNQotMTguMyAzLTIxLTEuMy00LTcuMy02LTE4LTYtOCAwLTEzIC43LTE1IDJzLTQuNyA2LjctOCAxNmMtNDIgOTguNy0xMDcuMyAxNzQuNwotMTk2IDIyOC02LjcgNC43LTEwLjcgOC0xMiAxMC0xLjMgMi0yIDUuNy0yIDExem0xMDAtMjZ2NDBoMzk5OTAwdi00MHpgLGxlZnRoYXJwb29ucGx1czpgTTAgMjY3Yy43IDUuMyAzIDEwIDcgMTRoMzk5OTkzdi00MEg5M2MzLjMtMy4zIDEwLjItOS41CiAyMC41LTE4LjVzMTcuOC0xNS44IDIyLjUtMjAuNWM1MC43LTUyIDg4LTExMC4zIDExMi0xNzUgNC0xMS4zIDUtMTguMyAzLTIxLTEuMwotNC03LjMtNi0xOC02LTggMC0xMyAuNy0xNSAycy00LjcgNi43LTggMTZjLTQyIDk4LjctMTA3LjMgMTc0LjctMTk2IDIyOC02LjcgNC43Ci0xMC43IDgtMTIgMTAtMS4zIDItMiA1LjctMiAxMXptMTAwLTI2djQwaDM5OTkwMHYtNDB6TTAgNDM1djQwaDQwMDAwMHYtNDB6Cm0wIDB2NDBoNDAwMDAwdi00MHpgLGxlZnRoYXJwb29uZG93bjpgTTcgMjQxYy00IDQtNi4zMzMgOC42NjctNyAxNCAwIDUuMzMzLjY2NyA5IDIgMTFzNS4zMzMKIDUuMzMzIDEyIDEwYzkwLjY2NyA1NCAxNTYgMTMwIDE5NiAyMjggMy4zMzMgMTAuNjY3IDYuMzMzIDE2LjMzMyA5IDE3IDIgLjY2NyA1CiAxIDkgMWg1YzEwLjY2NyAwIDE2LjY2Ny0yIDE4LTYgMi0yLjY2NyAxLTkuNjY3LTMtMjEtMzItODcuMzMzLTgyLjY2Ny0xNTcuNjY3Ci0xNTItMjExbC0zLTNoMzk5OTA3di00MHpNOTMgMjgxIEg0MDAwMDAgdi00MEw3IDI0MXpgLGxlZnRoYXJwb29uZG93bnBsdXM6YE03IDQzNWMtNCA0LTYuMyA4LjctNyAxNCAwIDUuMy43IDkgMiAxMXM1LjMgNS4zIDEyCiAxMGM5MC43IDU0IDE1NiAxMzAgMTk2IDIyOCAzLjMgMTAuNyA2LjMgMTYuMyA5IDE3IDIgLjcgNSAxIDkgMWg1YzEwLjcgMCAxNi43Ci0yIDE4LTYgMi0yLjcgMS05LjctMy0yMS0zMi04Ny4zLTgyLjctMTU3LjctMTUyLTIxMWwtMy0zaDM5OTkwN3YtNDBIN3ptOTMgMAp2NDBoMzk5OTAwdi00MHpNMCAyNDF2NDBoMzk5OTAwdi00MHptMCAwdjQwaDM5OTkwMHYtNDB6YCxsZWZ0aG9vazpgTTQwMDAwMCAyODEgSDEwM3MtMzMtMTEuMi02MS0zMy41UzAgMTk3LjMgMCAxNjRzMTQuMi02MS4yIDQyLjUKLTgzLjVDNzAuOCA1OC4yIDEwNCA0NyAxNDIgNDcgYzE2LjcgMCAyNSA2LjcgMjUgMjAgMCAxMi04LjcgMTguNy0yNiAyMC00MCAzLjMKLTY4LjcgMTUuNy04NiAzNy0xMCAxMi0xNSAyNS4zLTE1IDQwIDAgMjIuNyA5LjggNDAuNyAyOS41IDU0IDE5LjcgMTMuMyA0My41IDIxCiA3MS41IDIzaDM5OTg1OXpNMTAzIDI4MXYtNDBoMzk5ODk3djQwemAsbGVmdGxpbmVzZWdtZW50OmBNNDAgMjgxIFY0MjggSDAgVjk0IEg0MCBWMjQxIEg0MDAwMDAgdjQwegpNNDAgMjgxIFY0MjggSDAgVjk0IEg0MCBWMjQxIEg0MDAwMDAgdjQwemAsbGVmdG1hcHN0bzpgTTQwIDI4MSBWNDQ4SDBWNzRINDBWMjQxSDQwMDAwMHY0MHoKTTQwIDI4MSBWNDQ4SDBWNzRINDBWMjQxSDQwMDAwMHY0MHpgLGxlZnRUb0Zyb206YE0wIDE0N2g0MDAwMDB2NDBIMHptMCAyMTRjNjggNDAgMTE1LjcgOTUuNyAxNDMgMTY3aDIyYzE1LjMgMCAyMwotLjMgMjMtMSAwLTEuMy01LjMtMTMuNy0xNi0zNy0xOC0zNS4zLTQxLjMtNjktNzAtMTAxbC03LThoMzk5OTA1di00MEg5NWw3LTgKYzI4LjctMzIgNTItNjUuNyA3MC0xMDEgMTAuNy0yMy4zIDE2LTM1LjcgMTYtMzcgMC0uNy03LjctMS0yMy0xaC0yMkMxMTUuNyAyNjUuMwogNjggMzIxIDAgMzYxem0wLTE3NHYtNDBoMzk5OTAwdjQwem0xMDAgMTU0djQwaDM5OTkwMHYtNDB6YCxsb25nZXF1YWw6YE0wIDUwIGg0MDAwMDAgdjQwSDB6IG0wIDE5NGg0MDAwMHY0MEgwegpNMCA1MCBoNDAwMDAwIHY0MEgweiBtMCAxOTRoNDAwMDB2NDBIMHpgLG1pZGJyYWNlOmBNMjAwNDI4IDMzNApjLTEwMC43LTguMy0xOTUuMy00NC0yODAtMTA4LTU1LjMtNDItMTAxLjctOTMtMTM5LTE1M2wtOS0xNGMtMi43IDQtNS43IDguNy05IDE0Ci01My4zIDg2LjctMTIzLjcgMTUzLTIxMSAxOTktNjYuNyAzNi0xMzcuMyA1Ni4zLTIxMiA2MkgwVjIxNGgxOTk1NjhjMTc4LjMtMTEuNwogMzExLjctNzguMyA0MDMtMjAxIDYtOCA5LjctMTIgMTEtMTIgLjctLjcgNi43LTEgMTgtMXMxNy4zLjMgMTggMWMxLjMgMCA1IDQgMTEKIDEyIDQ0LjcgNTkuMyAxMDEuMyAxMDYuMyAxNzAgMTQxczE0NS4zIDU0LjMgMjI5IDYwaDE5OTU3MnYxMjB6YCxtaWRicmFjZXVuZGVyOmBNMTk5NTcyIDIxNApjMTAwLjcgOC4zIDE5NS4zIDQ0IDI4MCAxMDggNTUuMyA0MiAxMDEuNyA5MyAxMzkgMTUzbDkgMTRjMi43LTQgNS43LTguNyA5LTE0CiA1My4zLTg2LjcgMTIzLjctMTUzIDIxMS0xOTkgNjYuNy0zNiAxMzcuMy01Ni4zIDIxMi02MmgxOTk1Njh2MTIwSDIwMDQzMmMtMTc4LjMKIDExLjctMzExLjcgNzguMy00MDMgMjAxLTYgOC05LjcgMTItMTEgMTItLjcuNy02LjcgMS0xOCAxcy0xNy4zLS4zLTE4LTFjLTEuMyAwCi01LTQtMTEtMTItNDQuNy01OS4zLTEwMS4zLTEwNi4zLTE3MC0xNDFzLTE0NS4zLTU0LjMtMjI5LTYwSDBWMjE0emAsb2lpbnRTaXplMTpgTTUxMi42IDcxLjZjMjcyLjYgMCAzMjAuMyAxMDYuOCAzMjAuMyAxNzguMiAwIDcwLjgtNDcuNyAxNzcuNgotMzIwLjMgMTc3LjZTMTkzLjEgMzIwLjYgMTkzLjEgMjQ5LjhjMC03MS40IDQ2LjktMTc4LjIgMzE5LjUtMTc4LjJ6Cm0zNjguMSAxNzguMmMwLTg2LjQtNjAuOS0yMTUuNC0zNjguMS0yMTUuNC0zMDYuNCAwLTM2Ny4zIDEyOS0zNjcuMyAyMTUuNCAwIDg1LjgKNjAuOSAyMTQuOCAzNjcuMyAyMTQuOCAzMDcuMiAwIDM2OC4xLTEyOSAzNjguMS0yMTQuOHpgLG9paW50U2l6ZTI6YE03NTcuOCAxMDAuMWMzODQuNyAwIDQ1MS4xIDEzNy42IDQ1MS4xIDIzMCAwIDkxLjMtNjYuNCAyMjguOAotNDUxLjEgMjI4LjgtMzg2LjMgMC00NTIuNy0xMzcuNS00NTIuNy0yMjguOCAwLTkyLjQgNjYuNC0yMzAgNDUyLjctMjMwegptNTAyLjQgMjMwYzAtMTExLjItODIuNC0yNzcuMi01MDIuNC0yNzcuMnMtNTA0IDE2Ni01MDQgMjc3LjIKYzAgMTEwIDg0IDI3NiA1MDQgMjc2czUwMi40LTE2NiA1MDIuNC0yNzZ6YCxvaWlpbnRTaXplMTpgTTY4MS40IDcxLjZjNDA4LjkgMCA0ODAuNSAxMDYuOCA0ODAuNSAxNzguMiAwIDcwLjgtNzEuNiAxNzcuNgotNDgwLjUgMTc3LjZTMjAyLjEgMzIwLjYgMjAyLjEgMjQ5LjhjMC03MS40IDcwLjUtMTc4LjIgNDc5LjMtMTc4LjJ6Cm01MjUuOCAxNzguMmMwLTg2LjQtODYuOC0yMTUuNC01MjUuNy0yMTUuNC00MzcuOSAwLTUyNC43IDEyOS01MjQuNyAyMTUuNCAwCjg1LjggODYuOCAyMTQuOCA1MjQuNyAyMTQuOCA0MzguOSAwIDUyNS43LTEyOSA1MjUuNy0yMTQuOHpgLG9paWludFNpemUyOmBNMTAyMS4yIDUzYzYwMy42IDAgNzA3LjggMTY1LjggNzA3LjggMjc3LjIgMCAxMTAtMTA0LjIgMjc1LjgKLTcwNy44IDI3NS44LTYwNiAwLTcxMC4yLTE2NS44LTcxMC4yLTI3NS44QzMxMSAyMTguOCA0MTUuMiA1MyAxMDIxLjIgNTN6Cm03NzAuNCAyNzcuMWMwLTEzMS4yLTEyNi40LTMyNy42LTc3MC41LTMyNy42UzI0OC40IDE5OC45IDI0OC40IDMzMC4xCmMwIDEzMCAxMjguOCAzMjYuNCA3NzIuNyAzMjYuNHM3NzAuNS0xOTYuNCA3NzAuNS0zMjYuNHpgLHJpZ2h0YXJyb3c6YE0wIDI0MXY0MGgzOTk4OTFjLTQ3LjMgMzUuMy04NCA3OC0xMTAgMTI4Ci0xNi43IDMyLTI3LjcgNjMuNy0zMyA5NSAwIDEuMy0uMiAyLjctLjUgNC0uMyAxLjMtLjUgMi4zLS41IDMgMCA3LjMgNi43IDExIDIwCiAxMSA4IDAgMTMuMi0uOCAxNS41LTIuNSAyLjMtMS43IDQuMi01LjUgNS41LTExLjUgMi0xMy4zIDUuNy0yNyAxMS00MSAxNC43LTQ0LjcKIDM5LTg0LjUgNzMtMTE5LjVzNzMuNy02MC4yIDExOS03NS41YzYtMiA5LTUuNyA5LTExcy0zLTktOS0xMWMtNDUuMy0xNS4zLTg1Ci00MC41LTExOS03NS41cy01OC4zLTc0LjgtNzMtMTE5LjVjLTQuNy0xNC04LjMtMjcuMy0xMS00MC0xLjMtNi43LTMuMi0xMC44LTUuNQotMTIuNS0yLjMtMS43LTcuNS0yLjUtMTUuNS0yLjUtMTQgMC0yMSAzLjctMjEgMTEgMCAyIDIgMTAuMyA2IDI1IDIwLjcgODMuMyA2NwogMTUxLjcgMTM5IDIwNXptMCAwdjQwaDM5OTkwMHYtNDB6YCxyaWdodGJyYWNlOmBNNDAwMDAwIDU0MmwKLTYgNmgtMTdjLTEyLjcgMC0xOS4zLS4zLTIwLTEtNC00LTcuMy04LjMtMTAtMTMtMzUuMy01MS4zLTgwLjgtOTMuOC0xMzYuNS0xMjcuNQpzLTExNy4yLTU1LjgtMTg0LjUtNjYuNWMtLjcgMC0yLS4zLTQtMS0xOC43LTIuNy03Ni00LjMtMTcyLTVIMFYyMTRoMzk5NTcxbDYgMQpjMTI0LjcgOCAyMzUgNjEuNyAzMzEgMTYxIDMxLjMgMzMuMyA1OS43IDcyLjcgODUgMTE4bDcgMTN2MzV6YCxyaWdodGJyYWNldW5kZXI6YE0zOTk5OTQgMGw2IDZ2MzVsLTYgMTFjLTU2IDEwNC0xMzUuMyAxODEuMy0yMzggMjMyLTU3LjMKIDI4LjctMTE3IDQ1LTE3OSA1MEgtMzAwVjIxNGgzOTk4OTdjNDMuMy03IDgxLTE1IDExMy0yNiAxMDAuNy0zMyAxNzkuNy05MSAyMzcKLTE3NCAyLjctNSA2LTkgMTAtMTMgLjctMSA3LjMtMSAyMC0xaDE3emAscmlnaHRncm91cDpgTTAgODBoMzk5NTY1YzM3MSAwIDI2Ni43IDE0OS40IDQxNCAxODAgNS45IDEuMiAxOCAwIDE4IDAgMiAwCiAzLTEgMy0zdi0zOGMtNzYtMTU4LTI1Ny0yMTktNDM1LTIxOUgwemAscmlnaHRncm91cHVuZGVyOmBNMCAyNjJoMzk5NTY1YzM3MSAwIDI2Ni43LTE0OS40IDQxNC0xODAgNS45LTEuMiAxOCAwIDE4CiAwIDIgMCAzIDEgMyAzdjM4Yy03NiAxNTgtMjU3IDIxOS00MzUgMjE5SDB6YCxyaWdodGhhcnBvb246YE0wIDI0MXY0MGgzOTk5OTNjNC43LTQuNyA3LTkuMyA3LTE0IDAtOS4zCi0zLjctMTUuMy0xMS0xOC05Mi43LTU2LjctMTU5LTEzMy43LTE5OS0yMzEtMy4zLTkuMy02LTE0LjctOC0xNi0yLTEuMy03LTItMTUtMgotMTAuNyAwLTE2LjcgMi0xOCA2LTIgMi43LTEgOS43IDMgMjEgMTUuMyA0MiAzNi43IDgxLjggNjQgMTE5LjUgMjcuMyAzNy43IDU4CiA2OS4yIDkyIDk0LjV6bTAgMHY0MGgzOTk5MDB2LTQwemAscmlnaHRoYXJwb29ucGx1czpgTTAgMjQxdjQwaDM5OTk5M2M0LjctNC43IDctOS4zIDctMTQgMC05LjMtMy43LTE1LjMtMTEKLTE4LTkyLjctNTYuNy0xNTktMTMzLjctMTk5LTIzMS0zLjMtOS4zLTYtMTQuNy04LTE2LTItMS4zLTctMi0xNS0yLTEwLjcgMC0xNi43CiAyLTE4IDYtMiAyLjctMSA5LjcgMyAyMSAxNS4zIDQyIDM2LjcgODEuOCA2NCAxMTkuNSAyNy4zIDM3LjcgNTggNjkuMiA5MiA5NC41egptMCAwdjQwaDM5OTkwMHYtNDB6IG0xMDAgMTk0djQwaDM5OTkwMHYtNDB6bTAgMHY0MGgzOTk5MDB2LTQwemAscmlnaHRoYXJwb29uZG93bjpgTTM5OTc0NyA1MTFjMCA3LjMgNi43IDExIDIwIDExIDggMCAxMy0uOCAxNS0yLjVzNC43LTYuOAogOC0xNS41YzQwLTk0IDk5LjMtMTY2LjMgMTc4LTIxNyAxMy4zLTggMjAuMy0xMi4zIDIxLTEzIDUuMy0zLjMgOC41LTUuOCA5LjUKLTcuNSAxLTEuNyAxLjUtNS4yIDEuNS0xMC41cy0yLjMtMTAuMy03LTE1SDB2NDBoMzk5OTA4Yy0zNCAyNS4zLTY0LjcgNTctOTIgOTUKLTI3LjMgMzgtNDguNyA3Ny43LTY0IDExOS0zLjMgOC43LTUgMTQtNSAxNnpNMCAyNDF2NDBoMzk5OTAwdi00MHpgLHJpZ2h0aGFycG9vbmRvd25wbHVzOmBNMzk5NzQ3IDcwNWMwIDcuMyA2LjcgMTEgMjAgMTEgOCAwIDEzLS44CiAxNS0yLjVzNC43LTYuOCA4LTE1LjVjNDAtOTQgOTkuMy0xNjYuMyAxNzgtMjE3IDEzLjMtOCAyMC4zLTEyLjMgMjEtMTMgNS4zLTMuMwogOC41LTUuOCA5LjUtNy41IDEtMS43IDEuNS01LjIgMS41LTEwLjVzLTIuMy0xMC4zLTctMTVIMHY0MGgzOTk5MDhjLTM0IDI1LjMKLTY0LjcgNTctOTIgOTUtMjcuMyAzOC00OC43IDc3LjctNjQgMTE5LTMuMyA4LjctNSAxNC01IDE2ek0wIDQzNXY0MGgzOTk5MDB2LTQwegptMC0xOTR2NDBoNDAwMDAwdi00MHptMCAwdjQwaDQwMDAwMHYtNDB6YCxyaWdodGhvb2s6YE0zOTk4NTkgMjQxYy03NjQgMCAwIDAgMCAwIDQwLTMuMyA2OC43LTE1LjcgODYtMzcgMTAtMTIgMTUtMjUuMwogMTUtNDAgMC0yMi43LTkuOC00MC43LTI5LjUtNTQtMTkuNy0xMy4zLTQzLjUtMjEtNzEuNS0yMy0xNy4zLTEuMy0yNi04LTI2LTIwIDAKLTEzLjMgOC43LTIwIDI2LTIwIDM4IDAgNzEgMTEuMiA5OSAzMy41IDAgMCA3IDUuNiAyMSAxNi43IDE0IDExLjIgMjEgMzMuNSAyMQogNjYuOHMtMTQgNjEuMi00MiA4My41Yy0yOCAyMi4zLTYxIDMzLjUtOTkgMzMuNUwwIDI0MXogTTAgMjgxdi00MGgzOTk4NTl2NDB6YCxyaWdodGxpbmVzZWdtZW50OmBNMzk5OTYwIDI0MSBWOTQgaDQwIFY0MjggaC00MCBWMjgxIEgwIHYtNDB6Ck0zOTk5NjAgMjQxIFY5NCBoNDAgVjQyOCBoLTQwIFYyODEgSDAgdi00MHpgLHJpZ2h0VG9Gcm9tOmBNNDAwMDAwIDE2N2MtNzAuNy00Mi0xMTgtOTcuNy0xNDItMTY3aC0yM2MtMTUuMyAwLTIzIC4zLTIzCiAxIDAgMS4zIDUuMyAxMy43IDE2IDM3IDE4IDM1LjMgNDEuMyA2OSA3MCAxMDFsNyA4SDB2NDBoMzk5OTA1bC03IDhjLTI4LjcgMzIKLTUyIDY1LjctNzAgMTAxLTEwLjcgMjMuMy0xNiAzNS43LTE2IDM3IDAgLjcgNy43IDEgMjMgMWgyM2MyNC02OS4zIDcxLjMtMTI1IDE0MgotMTY3eiBNMTAwIDE0N3Y0MGgzOTk5MDB2LTQwek0wIDM0MXY0MGgzOTk5MDB2LTQwemAsdHdvaGVhZGxlZnRhcnJvdzpgTTAgMTY3YzY4IDQwCiAxMTUuNyA5NS43IDE0MyAxNjdoMjJjMTUuMyAwIDIzLS4zIDIzLTEgMC0xLjMtNS4zLTEzLjctMTYtMzctMTgtMzUuMy00MS4zLTY5Ci03MC0xMDFsLTctOGgxMjVsOSA3YzUwLjcgMzkuMyA4NSA4NiAxMDMgMTQwaDQ2YzAtNC43LTYuMy0xOC43LTE5LTQyLTE4LTM1LjMKLTQwLTY3LjMtNjYtOTZsLTktOWgzOTk3MTZ2LTQwSDI4NGw5LTljMjYtMjguNyA0OC02MC43IDY2LTk2IDEyLjctMjMuMzMzIDE5Ci0zNy4zMzMgMTktNDJoLTQ2Yy0xOCA1NC01Mi4zIDEwMC43LTEwMyAxNDBsLTkgN0g5NWw3LThjMjguNy0zMiA1Mi02NS43IDcwLTEwMQogMTAuNy0yMy4zMzMgMTYtMzUuNyAxNi0zNyAwLS43LTcuNy0xLTIzLTFoLTIyQzExNS43IDcxLjMgNjggMTI3IDAgMTY3emAsdHdvaGVhZHJpZ2h0YXJyb3c6YE00MDAwMDAgMTY3CmMtNjgtNDAtMTE1LjctOTUuNy0xNDMtMTY3aC0yMmMtMTUuMyAwLTIzIC4zLTIzIDEgMCAxLjMgNS4zIDEzLjcgMTYgMzcgMTggMzUuMwogNDEuMyA2OSA3MCAxMDFsNyA4aC0xMjVsLTktN2MtNTAuNy0zOS4zLTg1LTg2LTEwMy0xNDBoLTQ2YzAgNC43IDYuMyAxOC43IDE5IDQyCiAxOCAzNS4zIDQwIDY3LjMgNjYgOTZsOSA5SDB2NDBoMzk5NzE2bC05IDljLTI2IDI4LjctNDggNjAuNy02NiA5Ni0xMi43IDIzLjMzMwotMTkgMzcuMzMzLTE5IDQyaDQ2YzE4LTU0IDUyLjMtMTAwLjcgMTAzLTE0MGw5LTdoMTI1bC03IDhjLTI4LjcgMzItNTIgNjUuNy03MAogMTAxLTEwLjcgMjMuMzMzLTE2IDM1LjctMTYgMzcgMCAuNyA3LjcgMSAyMyAxaDIyYzI3LjMtNzEuMyA3NS0xMjcgMTQzLTE2N3pgLHRpbGRlMTpgTTIwMCA1NS41MzhjLTc3IDAtMTY4IDczLjk1My0xNzcgNzMuOTUzLTMgMC03Ci0yLjE3NS05LTUuNDM3TDIgOTdjLTEtMi0yLTQtMi02IDAtNCAyLTcgNS05bDIwLTEyQzExNiAxMiAxNzEgMCAyMDcgMGM4NiAwCiAxMTQgNjggMTkxIDY4IDc4IDAgMTY4LTY4IDE3Ny02OCA0IDAgNyAyIDkgNWwxMiAxOWMxIDIuMTc1IDIgNC4zNSAyIDYuNTI1IDAKIDQuMzUtMiA3LjYxMy01IDkuNzg4bC0xOSAxMy4wNWMtOTIgNjMuMDc3LTExNi45MzcgNzUuMzA4LTE4MyA3Ni4xMjgKLTY4LjI2Ny44NDctMTEzLTczLjk1Mi0xOTEtNzMuOTUyemAsdGlsZGUyOmBNMzQ0IDU1LjI2NmMtMTQyIDAtMzAwLjYzOCA4MS4zMTYtMzExLjUgODYuNDE4Ci04LjAxIDMuNzYyLTIyLjUgMTAuOTEtMjMuNSA1LjU2MkwxIDEyMGMtMS0yLTEtMy0xLTQgMC01IDMtOSA4LTEwbDE4LjQtOUMxNjAuOQogMzEuOSAyODMgMCAzNTggMGMxNDggMCAxODggMTIyIDMzMSAxMjJzMzE0LTk3IDMyNi05N2M0IDAgOCAyIDEwIDdsNyAyMS4xMTQKYzEgMi4xNCAxIDMuMjEgMSA0LjI4IDAgNS4zNDctMyA5LjYyNi03IDEwLjY5NmwtMjIuMyAxMi42MjJDODUyLjYgMTU4LjM3MiA3NTEKIDE4MS40NzYgNjc2IDE4MS40NzZjLTE0OSAwLTE4OS0xMjYuMjEtMzMyLTEyNi4yMXpgLHRpbGRlMzpgTTc4NiA1OUM0NTcgNTkgMzIgMTc1LjI0MiAxMyAxNzUuMjQyYy02IDAtMTAtMy40NTcKLTExLTEwLjM3TC4xNSAxMzhjLTEtNyAzLTEyIDEwLTEzbDE5LjItNi40QzM3OC40IDQwLjcgNjM0LjMgMCA4MDQuMyAwYzMzNyAwCiA0MTEuOCAxNTcgNzQ2LjggMTU3IDMyOCAwIDc1NC0xMTIgNzczLTExMiA1IDAgMTAgMyAxMSA5bDEgMTQuMDc1YzEgOC4wNjYtLjY5NwogMTYuNTk1LTYuNjk3IDE3LjQ5MmwtMjEuMDUyIDcuMzFjLTM2Ny45IDk4LjE0Ni02MDkuMTUgMTIyLjY5Ni03NzguMTUgMTIyLjY5NgogLTMzOCAwLTQwOS0xNTYuNTczLTc0NC0xNTYuNTczemAsdGlsZGU0OmBNNzg2IDU4QzQ1NyA1OCAzMiAxNzcuNDg3IDEzIDE3Ny40ODdjLTYgMC0xMC0zLjM0NQotMTEtMTAuMDM1TC4xNSAxNDNjLTEtNyAzLTEyIDEwLTEzbDIyLTYuN0MzODEuMiAzNSA2MzcuMTUgMCA4MDcuMTUgMGMzMzcgMCA0MDkKIDE3NyA3NDQgMTc3IDMyOCAwIDc1NC0xMjcgNzczLTEyNyA1IDAgMTAgMyAxMSA5bDEgMTQuNzk0YzEgNy44MDUtMyAxMy4zOC05CiAxNC40OTVsLTIwLjcgNS41NzRjLTM2Ni44NSA5OS43OS02MDcuMyAxMzkuMzcyLTc3Ni4zIDEzOS4zNzItMzM4IDAtNDA5CiAtMTc1LjIzNi03NDQtMTc1LjIzNnpgLHZlYzpgTTM3NyAyMGMwLTUuMzMzIDEuODMzLTEwIDUuNS0xNFMzOTEgMCAzOTcgMGM0LjY2NyAwIDguNjY3IDEuNjY3IDEyIDUKMy4zMzMgMi42NjcgNi42NjcgOSAxMCAxOSA2LjY2NyAyNC42NjcgMjAuMzMzIDQzLjY2NyA0MSA1NyA3LjMzMyA0LjY2NyAxMQoxMC42NjcgMTEgMTggMCA2LTEgMTAtMyAxMnMtNi42NjcgNS0xNCA5Yy0yOC42NjcgMTQuNjY3LTUzLjY2NyAzNS42NjctNzUgNjMKLTEuMzMzIDEuMzMzLTMuMTY3IDMuNS01LjUgNi41cy00IDQuODMzLTUgNS41Yy0xIC42NjctMi41IDEuMzMzLTQuNSAycy00LjMzMyAxCi03IDFjLTQuNjY3IDAtOS4xNjctMS44MzMtMTMuNS01LjVTMzM3IDE4NCAzMzcgMTc4YzAtMTIuNjY3IDE1LjY2Ny0zMi4zMzMgNDctNTkKSDIxM2wtMTcxLTFjLTguNjY3LTYtMTMtMTIuMzMzLTEzLTE5IDAtNC42NjcgNC4zMzMtMTEuMzMzIDEzLTIwaDM1OQpjLTE2LTI1LjMzMy0yNC00NS0yNC01OXpgLHdpZGVoYXQxOmBNNTI5IDBoNWw1MTkgMTE1YzUgMSA5IDUgOSAxMCAwIDEtMSAyLTEgM2wtNCAyMgpjLTEgNS01IDktMTEgOWgtMkw1MzIgNjcgMTkgMTU5aC0yYy01IDAtOS00LTExLTlsLTUtMjJjLTEtNiAyLTEyIDgtMTN6YCx3aWRlaGF0MjpgTTExODEgMGgybDExNzEgMTc2YzYgMCAxMCA1IDEwIDExbC0yIDIzYy0xIDYtNSAxMAotMTEgMTBoLTFMMTE4MiA2NyAxNSAyMjBoLTFjLTYgMC0xMC00LTExLTEwbC0yLTIzYy0xLTYgNC0xMSAxMC0xMXpgLHdpZGVoYXQzOmBNMTE4MSAwaDJsMTE3MSAyMzZjNiAwIDEwIDUgMTAgMTFsLTIgMjNjLTEgNi01IDEwCi0xMSAxMGgtMUwxMTgyIDY3IDE1IDI4MGgtMWMtNiAwLTEwLTQtMTEtMTBsLTItMjNjLTEtNiA0LTExIDEwLTExemAsd2lkZWhhdDQ6YE0xMTgxIDBoMmwxMTcxIDI5NmM2IDAgMTAgNSAxMCAxMWwtMiAyM2MtMSA2LTUgMTAKLTExIDEwaC0xTDExODIgNjcgMTUgMzQwaC0xYy02IDAtMTAtNC0xMS0xMGwtMi0yM2MtMS02IDQtMTEgMTAtMTF6YCx3aWRlY2hlY2sxOmBNNTI5LDE1OWg1bDUxOSwtMTE1YzUsLTEsOSwtNSw5LC0xMGMwLC0xLC0xLC0yLC0xLC0zbC00LC0yMmMtMSwKLTUsLTUsLTksLTExLC05aC0ybC01MTIsOTJsLTUxMywtOTJoLTJjLTUsMCwtOSw0LC0xMSw5bC01LDIyYy0xLDYsMiwxMiw4LDEzemAsd2lkZWNoZWNrMjpgTTExODEsMjIwaDJsMTE3MSwtMTc2YzYsMCwxMCwtNSwxMCwtMTFsLTIsLTIzYy0xLC02LC01LC0xMCwKLTExLC0xMGgtMWwtMTE2OCwxNTNsLTExNjcsLTE1M2gtMWMtNiwwLC0xMCw0LC0xMSwxMGwtMiwyM2MtMSw2LDQsMTEsMTAsMTF6YCx3aWRlY2hlY2szOmBNMTE4MSwyODBoMmwxMTcxLC0yMzZjNiwwLDEwLC01LDEwLC0xMWwtMiwtMjNjLTEsLTYsLTUsLTEwLAotMTEsLTEwaC0xbC0xMTY4LDIxM2wtMTE2NywtMjEzaC0xYy02LDAsLTEwLDQsLTExLDEwbC0yLDIzYy0xLDYsNCwxMSwxMCwxMXpgLHdpZGVjaGVjazQ6YE0xMTgxLDM0MGgybDExNzEsLTI5NmM2LDAsMTAsLTUsMTAsLTExbC0yLC0yM2MtMSwtNiwtNSwtMTAsCi0xMSwtMTBoLTFsLTExNjgsMjczbC0xMTY3LC0yNzNoLTFjLTYsMCwtMTAsNCwtMTEsMTBsLTIsMjNjLTEsNiw0LDExLDEwLDExemAsYmFyYWJvdmVsZWZ0YXJyb3c6YE00MDAwMDAgNjIwaC0zOTk4OTBsMyAtM2M2OC43IC01Mi43IDExMy43IC0xMjAgMTM1IC0yMDIKYzQgLTE0LjcgNiAtMjMgNiAtMjVjMCAtNy4zIC03IC0xMSAtMjEgLTExYy04IDAgLTEzLjIgMC44IC0xNS41IDIuNQpjLTIuMyAxLjcgLTQuMiA1LjggLTUuNSAxMi41Yy0xLjMgNC43IC0yLjcgMTAuMyAtNCAxN2MtMTIgNDguNyAtMzQuOCA5MiAtNjguNSAxMzAKcy03NC4yIDY2LjMgLTEyMS41IDg1Yy0xMCA0IC0xNiA3LjcgLTE4IDExYzAgOC43IDYgMTQuMyAxOCAxN2M0Ny4zIDE4LjcgODcuOCA0NwoxMjEuNSA4NXM1Ni41IDgxLjMgNjguNSAxMzBjMC43IDIgMS4zIDUgMiA5czEuMiA2LjcgMS41IDhjMC4zIDEuMyAxIDMuMyAyIDYKczIuMiA0LjUgMy41IDUuNWMxLjMgMSAzLjMgMS44IDYgMi41czYgMSAxMCAxYzE0IDAgMjEgLTMuNyAyMSAtMTEKYzAgLTIgLTIgLTEwLjMgLTYgLTI1Yy0yMCAtNzkuMyAtNjUgLTE0Ni43IC0xMzUgLTIwMmwtMyAtM2gzOTk4OTB6Ck0xMDAgNjIwdjQwaDM5OTkwMHYtNDB6IE0wIDI0MXY0MGgzOTk5MDB2LTQwek0wIDI0MXY0MGgzOTk5MDB2LTQwemAscmlnaHRhcnJvd2Fib3ZlYmFyOmBNMCAyNDF2NDBoMzk5ODkxYy00Ny4zIDM1LjMtODQgNzgtMTEwIDEyOC0xNi43IDMyCi0yNy43IDYzLjctMzMgOTUgMCAxLjMtLjIgMi43LS41IDQtLjMgMS4zLS41IDIuMy0uNSAzIDAgNy4zIDYuNyAxMSAyMCAxMSA4IDAKMTMuMi0uOCAxNS41LTIuNSAyLjMtMS43IDQuMi01LjUgNS41LTExLjUgMi0xMy4zIDUuNy0yNyAxMS00MSAxNC43LTQ0LjcgMzkKLTg0LjUgNzMtMTE5LjVzNzMuNy02MC4yIDExOS03NS41YzYtMiA5LTUuNyA5LTExcy0zLTktOS0xMWMtNDUuMy0xNS4zLTg1LTQwLjUKLTExOS03NS41cy01OC4zLTc0LjgtNzMtMTE5LjVjLTQuNy0xNC04LjMtMjcuMy0xMS00MC0xLjMtNi43LTMuMi0xMC44LTUuNQotMTIuNS0yLjMtMS43LTcuNS0yLjUtMTUuNS0yLjUtMTQgMC0yMSAzLjctMjEgMTEgMCAyIDIgMTAuMyA2IDI1IDIwLjcgODMuMyA2NwoxNTEuNyAxMzkgMjA1em05NiAzNzloMzk5ODk0djQwSDB6bTAgMGgzOTk5MDR2NDBIMHpgLGJhcmFib3Zlc2hvcnRsZWZ0aGFycG9vbjpgTTUwNyw0MzVjLTQsNCwtNi4zLDguNywtNywxNGMwLDUuMywwLjcsOSwyLDExCmMxLjMsMiw1LjMsNS4zLDEyLDEwYzkwLjcsNTQsMTU2LDEzMCwxOTYsMjI4YzMuMywxMC43LDYuMywxNi4zLDksMTcKYzIsMC43LDUsMSw5LDFjMCwwLDUsMCw1LDBjMTAuNywwLDE2LjcsLTIsMTgsLTZjMiwtMi43LDEsLTkuNywtMywtMjEKYy0zMiwtODcuMywtODIuNywtMTU3LjcsLTE1MiwtMjExYzAsMCwtMywtMywtMywtM2wzOTkzNTEsMGwwLC00MApjLTM5ODU3MCwwLC0zOTk0MzcsMCwtMzk5NDM3LDB6IE01OTMgNDM1IHY0MCBIMzk5NTAwIHYtNDB6Ck0wIDI4MSB2LTQwIEgzOTk5MDggdjQweiBNMCAyODEgdi00MCBIMzk5OTA4IHY0MHpgLHJpZ2h0aGFycG9vbmFib3Zlc2hvcnRiYXI6YE0wLDI0MSBsMCw0MGMzOTkxMjYsMCwzOTk5OTMsMCwzOTk5OTMsMApjNC43LC00LjcsNywtOS4zLDcsLTE0YzAsLTkuMywtMy43LC0xNS4zLC0xMSwtMThjLTkyLjcsLTU2LjcsLTE1OSwtMTMzLjcsLTE5OSwKLTIzMWMtMy4zLC05LjMsLTYsLTE0LjcsLTgsLTE2Yy0yLC0xLjMsLTcsLTIsLTE1LC0yYy0xMC43LDAsLTE2LjcsMiwtMTgsNgpjLTIsMi43LC0xLDkuNywzLDIxYzE1LjMsNDIsMzYuNyw4MS44LDY0LDExOS41YzI3LjMsMzcuNyw1OCw2OS4yLDkyLDk0LjV6Ck0wIDI0MSB2NDAgSDM5OTkwOCB2LTQweiBNMCA0NzUgdi00MCBIMzk5NTAwIHY0MHogTTAgNDc1IHYtNDAgSDM5OTUwMCB2NDB6YCxzaG9ydGJhcmFib3ZlbGVmdGhhcnBvb246YE03LDQzNWMtNCw0LC02LjMsOC43LC03LDE0YzAsNS4zLDAuNyw5LDIsMTEKYzEuMywyLDUuMyw1LjMsMTIsMTBjOTAuNyw1NCwxNTYsMTMwLDE5NiwyMjhjMy4zLDEwLjcsNi4zLDE2LjMsOSwxN2MyLDAuNyw1LDEsOSwKMWMwLDAsNSwwLDUsMGMxMC43LDAsMTYuNywtMiwxOCwtNmMyLC0yLjcsMSwtOS43LC0zLC0yMWMtMzIsLTg3LjMsLTgyLjcsLTE1Ny43LAotMTUyLC0yMTFjMCwwLC0zLC0zLC0zLC0zbDM5OTkwNywwbDAsLTQwYy0zOTkxMjYsMCwtMzk5OTkzLDAsLTM5OTk5MywwegpNOTMgNDM1IHY0MCBINDAwMDAwIHYtNDB6IE01MDAgMjQxIHY0MCBINDAwMDAwIHYtNDB6IE01MDAgMjQxIHY0MCBINDAwMDAwIHYtNDB6YCxzaG9ydHJpZ2h0aGFycG9vbmFib3ZlYmFyOmBNNTMsMjQxbDAsNDBjMzk4NTcwLDAsMzk5NDM3LDAsMzk5NDM3LDAKYzQuNywtNC43LDcsLTkuMyw3LC0xNGMwLC05LjMsLTMuNywtMTUuMywtMTEsLTE4Yy05Mi43LC01Ni43LC0xNTksLTEzMy43LC0xOTksCi0yMzFjLTMuMywtOS4zLC02LC0xNC43LC04LC0xNmMtMiwtMS4zLC03LC0yLC0xNSwtMmMtMTAuNywwLC0xNi43LDIsLTE4LDYKYy0yLDIuNywtMSw5LjcsMywyMWMxNS4zLDQyLDM2LjcsODEuOCw2NCwxMTkuNWMyNy4zLDM3LjcsNTgsNjkuMiw5Miw5NC41egpNNTAwIDI0MSB2NDAgSDM5OTQwOCB2LTQweiBNNTAwIDQzNSB2NDAgSDQwMDAwMCB2LTQwemB9LHNIdD1mdW5jdGlvbihzLHUpe3N3aXRjaChzKXtjYXNlImxicmFjayI6cmV0dXJuIk00MDMgMTc1OSBWODQgSDY2NiBWMCBIMzE5IFYxNzU5IHYiK3UrYCB2MTc1OSBoMzQ3IHYtODQKSDQwM3ogTTQwMyAxNzU5IFYwIEgzMTkgVjE3NTkgdmArdSsiIHYxNzU5IGg4NHoiO2Nhc2UicmJyYWNrIjpyZXR1cm4iTTM0NyAxNzU5IFYwIEgwIFY4NCBIMjYzIFYxNzU5IHYiK3UrYCB2MTc1OSBIMCB2ODQgSDM0N3oKTTM0NyAxNzU5IFYwIEgyNjMgVjE3NTkgdmArdSsiIHYxNzU5IGg4NHoiO2Nhc2UidmVydCI6cmV0dXJuIk0xNDUgMTUgdjU4NSB2Iit1K2AgdjU4NSBjMi42NjcsMTAsOS42NjcsMTUsMjEsMTUKYzEwLDAsMTYuNjY3LC01LDIwLC0xNSB2LTU4NSB2YCstdStgIHYtNTg1IGMtMi42NjcsLTEwLC05LjY2NywtMTUsLTIxLC0xNQpjLTEwLDAsLTE2LjY2Nyw1LC0yMCwxNXogTTE4OCAxNSBIMTQ1IHY1ODUgdmArdSsiIHY1ODUgaDQzeiI7Y2FzZSJkb3VibGV2ZXJ0IjpyZXR1cm4iTTE0NSAxNSB2NTg1IHYiK3UrYCB2NTg1IGMyLjY2NywxMCw5LjY2NywxNSwyMSwxNQpjMTAsMCwxNi42NjcsLTUsMjAsLTE1IHYtNTg1IHZgKy11K2Agdi01ODUgYy0yLjY2NywtMTAsLTkuNjY3LC0xNSwtMjEsLTE1CmMtMTAsMCwtMTYuNjY3LDUsLTIwLDE1eiBNMTg4IDE1IEgxNDUgdjU4NSB2YCt1K2AgdjU4NSBoNDN6Ck0zNjcgMTUgdjU4NSB2YCt1K2AgdjU4NSBjMi42NjcsMTAsOS42NjcsMTUsMjEsMTUKYzEwLDAsMTYuNjY3LC01LDIwLC0xNSB2LTU4NSB2YCstdStgIHYtNTg1IGMtMi42NjcsLTEwLC05LjY2NywtMTUsLTIxLC0xNQpjLTEwLDAsLTE2LjY2Nyw1LC0yMCwxNXogTTQxMCAxNSBIMzY3IHY1ODUgdmArdSsiIHY1ODUgaDQzeiI7Y2FzZSJsZmxvb3IiOnJldHVybiJNMzE5IDYwMiBWMCBINDAzIFY2MDIgdiIrdStgIHYxNzE1IGgyNjMgdjg0IEgzMTl6Ck1NMzE5IDYwMiBWMCBINDAzIFY2MDIgdmArdSsiIHYxNzE1IEgzMTl6IjtjYXNlInJmbG9vciI6cmV0dXJuIk0zMTkgNjAyIFYwIEg0MDMgVjYwMiB2Iit1K2AgdjE3OTkgSDAgdi04NCBIMzE5egpNTTMxOSA2MDIgVjAgSDQwMyBWNjAyIHZgK3UrIiB2MTcxNSBIMzE5eiI7Y2FzZSJsY2VpbCI6cmV0dXJuIk00MDMgMTc1OSBWODQgSDY2NiBWMCBIMzE5IFYxNzU5IHYiK3UrYCB2NjAyIGg4NHoKTTQwMyAxNzU5IFYwIEgzMTkgVjE3NTkgdmArdSsiIHY2MDIgaDg0eiI7Y2FzZSJyY2VpbCI6cmV0dXJuIk0zNDcgMTc1OSBWMCBIMCBWODQgSDI2MyBWMTc1OSB2Iit1K2AgdjYwMiBoODR6Ck0zNDcgMTc1OSBWMCBoLTg0IFYxNzU5IHZgK3UrIiB2NjAyIGg4NHoiO2Nhc2UibHBhcmVuIjpyZXR1cm5gTTg2Myw5YzAsLTIsLTIsLTUsLTYsLTljMCwwLC0xNywwLC0xNywwYy0xMi43LDAsLTE5LjMsMC4zLC0yMCwxCmMtNS4zLDUuMywtMTAuMywxMSwtMTUsMTdjLTI0Mi43LDI5NC43LC0zOTUuMyw2ODIsLTQ1OCwxMTYyYy0yMS4zLDE2My4zLC0zMy4zLDM0OSwKLTM2LDU1NyBsMCxgKyh1Kzg0KStgYzAuMiw2LDAsMjYsMCw2MGMyLDE1OS4zLDEwLDMxMC43LDI0LDQ1NGM1My4zLDUyOCwyMTAsCjk0OS43LDQ3MCwxMjY1YzQuNyw2LDkuNywxMS43LDE1LDE3YzAuNywwLjcsNywxLDE5LDFjMCwwLDE4LDAsMTgsMGM0LC00LDYsLTcsNiwtOQpjMCwtMi43LC0zLjMsLTguNywtMTAsLTE4Yy0xMzUuMywtMTkyLjcsLTIzNS41LC00MTQuMywtMzAwLjUsLTY2NWMtNjUsLTI1MC43LC0xMDIuNSwKLTU0NC43LC0xMTIuNSwtODgyYy0yLC0xMDQsLTMsLTE2NywtMywtMTg5CmwwLC1gKyh1KzkyKStgYzAsLTE2Mi43LDUuNywtMzE0LDE3LC00NTRjMjAuNywtMjcyLDYzLjcsLTUxMywxMjksLTcyM2M2NS4zLAotMjEwLDE1NS4zLC0zOTYuMywyNzAsLTU1OWM2LjcsLTkuMywxMCwtMTUuMywxMCwtMTh6YDtjYXNlInJwYXJlbiI6cmV0dXJuYE03NiwwYy0xNi43LDAsLTI1LDMsLTI1LDljMCwyLDIsNi4zLDYsMTNjMjEuMywyOC43LDQyLjMsNjAuMywKNjMsOTVjOTYuNywxNTYuNywxNzIuOCwzMzIuNSwyMjguNSw1MjcuNWM1NS43LDE5NSw5Mi44LDQxNi41LDExMS41LDY2NC41CmMxMS4zLDEzOS4zLDE3LDI5MC43LDE3LDQ1NGMwLDI4LDEuNyw0MywzLjMsNDVsMCxgKyh1KzkpK2AKYy0zLDQsLTMuMywxNi43LC0zLjMsMzhjMCwxNjIsLTUuNywzMTMuNywtMTcsNDU1Yy0xOC43LDI0OCwtNTUuOCw0NjkuMywtMTExLjUsNjY0CmMtNTUuNywxOTQuNywtMTMxLjgsMzcwLjMsLTIyOC41LDUyN2MtMjAuNywzNC43LC00MS43LDY2LjMsLTYzLDk1Yy0yLDMuMywtNCw3LC02LDExCmMwLDcuMyw1LjcsMTEsMTcsMTFjMCwwLDExLDAsMTEsMGM5LjMsMCwxNC4zLC0wLjMsMTUsLTFjNS4zLC01LjMsMTAuMywtMTEsMTUsLTE3CmMyNDIuNywtMjk0LjcsMzk1LjMsLTY4MS43LDQ1OCwtMTE2MWMyMS4zLC0xNjQuNywzMy4zLC0zNTAuNywzNiwtNTU4CmwwLC1gKyh1KzE0NCkrYGMtMiwtMTU5LjMsLTEwLC0zMTAuNywtMjQsLTQ1NGMtNTMuMywtNTI4LC0yMTAsLTk0OS43LAotNDcwLC0xMjY1Yy00LjcsLTYsLTkuNywtMTEuNywtMTUsLTE3Yy0wLjcsLTAuNywtNi43LC0xLC0xOCwtMXpgO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHN0cmV0Y2h5IGRlbGltaXRlci4iKX19O2NsYXNzIG9Se2NvbnN0cnVjdG9yKHMpe3RoaXMuY2hpbGRyZW49dm9pZCAwLHRoaXMuY2xhc3Nlcz12b2lkIDAsdGhpcy5oZWlnaHQ9dm9pZCAwLHRoaXMuZGVwdGg9dm9pZCAwLHRoaXMubWF4Rm9udFNpemU9dm9pZCAwLHRoaXMuc3R5bGU9dm9pZCAwLHRoaXMuY2hpbGRyZW49cyx0aGlzLmNsYXNzZXM9W10sdGhpcy5oZWlnaHQ9MCx0aGlzLmRlcHRoPTAsdGhpcy5tYXhGb250U2l6ZT0wLHRoaXMuc3R5bGU9e319aGFzQ2xhc3Mocyl7cmV0dXJuIFlhLmNvbnRhaW5zKHRoaXMuY2xhc3NlcyxzKX10b05vZGUoKXtmb3IodmFyIHM9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLHU9MDt1PHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3UrKylzLmFwcGVuZENoaWxkKHRoaXMuY2hpbGRyZW5bdV0udG9Ob2RlKCkpO3JldHVybiBzfXRvTWFya3VwKCl7Zm9yKHZhciBzPSIiLHU9MDt1PHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3UrKylzKz10aGlzLmNoaWxkcmVuW3VdLnRvTWFya3VwKCk7cmV0dXJuIHN9dG9UZXh0KCl7dmFyIHM9dT0+dS50b1RleHQoKTtyZXR1cm4gdGhpcy5jaGlsZHJlbi5tYXAocykuam9pbigiIil9fXZhciBLND17IkFNUy1SZWd1bGFyIjp7MzI6WzAsMCwwLDAsLjI1XSw2NTpbMCwuNjg4ODksMCwwLC43MjIyMl0sNjY6WzAsLjY4ODg5LDAsMCwuNjY2NjddLDY3OlswLC42ODg4OSwwLDAsLjcyMjIyXSw2ODpbMCwuNjg4ODksMCwwLC43MjIyMl0sNjk6WzAsLjY4ODg5LDAsMCwuNjY2NjddLDcwOlswLC42ODg4OSwwLDAsLjYxMTExXSw3MTpbMCwuNjg4ODksMCwwLC43Nzc3OF0sNzI6WzAsLjY4ODg5LDAsMCwuNzc3NzhdLDczOlswLC42ODg4OSwwLDAsLjM4ODg5XSw3NDpbLjE2NjY3LC42ODg4OSwwLDAsLjVdLDc1OlswLC42ODg4OSwwLDAsLjc3Nzc4XSw3NjpbMCwuNjg4ODksMCwwLC42NjY2N10sNzc6WzAsLjY4ODg5LDAsMCwuOTQ0NDVdLDc4OlswLC42ODg4OSwwLDAsLjcyMjIyXSw3OTpbLjE2NjY3LC42ODg4OSwwLDAsLjc3Nzc4XSw4MDpbMCwuNjg4ODksMCwwLC42MTExMV0sODE6Wy4xNjY2NywuNjg4ODksMCwwLC43Nzc3OF0sODI6WzAsLjY4ODg5LDAsMCwuNzIyMjJdLDgzOlswLC42ODg4OSwwLDAsLjU1NTU2XSw4NDpbMCwuNjg4ODksMCwwLC42NjY2N10sODU6WzAsLjY4ODg5LDAsMCwuNzIyMjJdLDg2OlswLC42ODg4OSwwLDAsLjcyMjIyXSw4NzpbMCwuNjg4ODksMCwwLDFdLDg4OlswLC42ODg4OSwwLDAsLjcyMjIyXSw4OTpbMCwuNjg4ODksMCwwLC43MjIyMl0sOTA6WzAsLjY4ODg5LDAsMCwuNjY2NjddLDEwNzpbMCwuNjg4ODksMCwwLC41NTU1Nl0sMTYwOlswLDAsMCwwLC4yNV0sMTY1OlswLC42NzUsLjAyNSwwLC43NV0sMTc0OlsuMTU1NTksLjY5MjI0LDAsMCwuOTQ2NjZdLDI0MDpbMCwuNjg4ODksMCwwLC41NTU1Nl0sMjk1OlswLC42ODg4OSwwLDAsLjU0MDI4XSw3MTA6WzAsLjgyNSwwLDAsMi4zMzMzNF0sNzMyOlswLC45LDAsMCwyLjMzMzM0XSw3NzA6WzAsLjgyNSwwLDAsMi4zMzMzNF0sNzcxOlswLC45LDAsMCwyLjMzMzM0XSw5ODk6Wy4wODE2NywuNTgxNjcsMCwwLC43Nzc3OF0sMTAwODpbMCwuNDMwNTYsLjA0MDI4LDAsLjY2NjY3XSw4MjQ1OlswLC41NDk4NiwwLDAsLjI3NV0sODQ2MzpbMCwuNjg4ODksMCwwLC41NDAyOF0sODQ4NzpbMCwuNjg4ODksMCwwLC43MjIyMl0sODQ5ODpbMCwuNjg4ODksMCwwLC41NTU1Nl0sODUwMjpbMCwuNjg4ODksMCwwLC42NjY2N10sODUwMzpbMCwuNjg4ODksMCwwLC40NDQ0NV0sODUwNDpbMCwuNjg4ODksMCwwLC42NjY2N10sODUxMzpbMCwuNjg4ODksMCwwLC42Mzg4OV0sODU5MjpbLS4wMzU5OCwuNDY0MDIsMCwwLC41XSw4NTk0OlstLjAzNTk4LC40NjQwMiwwLDAsLjVdLDg2MDI6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NjAzOlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODYwNjpbLjAxMzU0LC41MjIzOSwwLDAsMV0sODYwODpbLjAxMzU0LC41MjIzOSwwLDAsMV0sODYxMDpbLjAxMzU0LC41MjIzOSwwLDAsMS4xMTExMV0sODYxMTpbLjAxMzU0LC41MjIzOSwwLDAsMS4xMTExMV0sODYxOTpbMCwuNTQ5ODYsMCwwLDFdLDg2MjA6WzAsLjU0OTg2LDAsMCwxXSw4NjIxOlstLjEzMzEzLC4zNzc4OCwwLDAsMS4zODg4OV0sODYyMjpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2MjQ6WzAsLjY5MjI0LDAsMCwuNV0sODYyNTpbMCwuNjkyMjQsMCwwLC41XSw4NjMwOlswLC40MzA1NiwwLDAsMV0sODYzMTpbMCwuNDMwNTYsMCwwLDFdLDg2MzQ6Wy4wODE5OCwuNTgxOTgsMCwwLC43Nzc3OF0sODYzNTpbLjA4MTk4LC41ODE5OCwwLDAsLjc3Nzc4XSw4NjM4OlsuMTk0NDQsLjY5MjI0LDAsMCwuNDE2NjddLDg2Mzk6Wy4xOTQ0NCwuNjkyMjQsMCwwLC40MTY2N10sODY0MjpbLjE5NDQ0LC42OTIyNCwwLDAsLjQxNjY3XSw4NjQzOlsuMTk0NDQsLjY5MjI0LDAsMCwuNDE2NjddLDg2NDQ6Wy4xODA4LC42NzUsMCwwLDFdLDg2NDY6Wy4xODA4LC42NzUsMCwwLDFdLDg2NDc6Wy4xODA4LC42NzUsMCwwLDFdLDg2NDg6Wy4xOTQ0NCwuNjkyMjQsMCwwLC44MzMzNF0sODY0OTpbLjE4MDgsLjY3NSwwLDAsMV0sODY1MDpbLjE5NDQ0LC42OTIyNCwwLDAsLjgzMzM0XSw4NjUxOlsuMDEzNTQsLjUyMjM5LDAsMCwxXSw4NjUyOlsuMDEzNTQsLjUyMjM5LDAsMCwxXSw4NjUzOlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODY1NDpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NTU6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NjY2OlsuMTM2NjcsLjYzNjY3LDAsMCwxXSw4NjY3OlsuMTM2NjcsLjYzNjY3LDAsMCwxXSw4NjY5OlstLjEzMzEzLC4zNzc4OCwwLDAsMV0sODY3MjpbLS4wNjQsLjQzNywwLDAsMS4zMzRdLDg2NzQ6Wy0uMDY0LC40MzcsMCwwLDEuMzM0XSw4NzA1OlswLC44MjUsMCwwLC41XSw4NzA4OlswLC42ODg4OSwwLDAsLjU1NTU2XSw4NzA5OlsuMDgxNjcsLjU4MTY3LDAsMCwuNzc3NzhdLDg3MTc6WzAsLjQzMDU2LDAsMCwuNDI5MTddLDg3MjI6Wy0uMDM1OTgsLjQ2NDAyLDAsMCwuNV0sODcyNDpbLjA4MTk4LC42OTIyNCwwLDAsLjc3Nzc4XSw4NzI2OlsuMDgxNjcsLjU4MTY3LDAsMCwuNzc3NzhdLDg3MzM6WzAsLjY5MjI0LDAsMCwuNzc3NzhdLDg3MzY6WzAsLjY5MjI0LDAsMCwuNzIyMjJdLDg3Mzc6WzAsLjY5MjI0LDAsMCwuNzIyMjJdLDg3Mzg6Wy4wMzUxNywuNTIyMzksMCwwLC43MjIyMl0sODczOTpbLjA4MTY3LC41ODE2NywwLDAsLjIyMjIyXSw4NzQwOlsuMjUxNDIsLjc0MTExLDAsMCwuMjc3NzhdLDg3NDE6Wy4wODE2NywuNTgxNjcsMCwwLC4zODg4OV0sODc0MjpbLjI1MTQyLC43NDExMSwwLDAsLjVdLDg3NTY6WzAsLjY5MjI0LDAsMCwuNjY2NjddLDg3NTc6WzAsLjY5MjI0LDAsMCwuNjY2NjddLDg3NjQ6Wy0uMTMzMTMsLjM2Njg3LDAsMCwuNzc3NzhdLDg3NjU6Wy0uMTMzMTMsLjM3Nzg4LDAsMCwuNzc3NzhdLDg3Njk6Wy0uMTMzMTMsLjM2Njg3LDAsMCwuNzc3NzhdLDg3NzA6Wy0uMDM2MjUsLjQ2Mzc1LDAsMCwuNzc3NzhdLDg3NzQ6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODc3NjpbLS4wMTY4OCwuNDgzMTIsMCwwLC43Nzc3OF0sODc3ODpbLjA4MTY3LC41ODE2NywwLDAsLjc3Nzc4XSw4NzgyOlsuMDYwNjIsLjU0OTg2LDAsMCwuNzc3NzhdLDg3ODM6Wy4wNjA2MiwuNTQ5ODYsMCwwLC43Nzc3OF0sODc4NTpbLjA4MTk4LC41ODE5OCwwLDAsLjc3Nzc4XSw4Nzg2OlsuMDgxOTgsLjU4MTk4LDAsMCwuNzc3NzhdLDg3ODc6Wy4wODE5OCwuNTgxOTgsMCwwLC43Nzc3OF0sODc5MDpbMCwuNjkyMjQsMCwwLC43Nzc3OF0sODc5MTpbLjIyOTU4LC43Mjk1OCwwLDAsLjc3Nzc4XSw4Nzk2OlsuMDgxOTgsLjkxNjY3LDAsMCwuNzc3NzhdLDg4MDY6Wy4yNTU4MywuNzU1ODMsMCwwLC43Nzc3OF0sODgwNzpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSw4ODA4OlsuMjUxNDIsLjc1NzI2LDAsMCwuNzc3NzhdLDg4MDk6Wy4yNTE0MiwuNzU3MjYsMCwwLC43Nzc3OF0sODgxMjpbLjI1NTgzLC43NTU4MywwLDAsLjVdLDg4MTQ6Wy4yMDU3NiwuNzA1NzYsMCwwLC43Nzc3OF0sODgxNTpbLjIwNTc2LC43MDU3NiwwLDAsLjc3Nzc4XSw4ODE2OlsuMzAyNzQsLjc5MzgzLDAsMCwuNzc3NzhdLDg4MTc6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODgxODpbLjIyOTU4LC43Mjk1OCwwLDAsLjc3Nzc4XSw4ODE5OlsuMjI5NTgsLjcyOTU4LDAsMCwuNzc3NzhdLDg4MjI6Wy4xODA4LC42NzUsMCwwLC43Nzc3OF0sODgyMzpbLjE4MDgsLjY3NSwwLDAsLjc3Nzc4XSw4ODI4OlsuMTM2NjcsLjYzNjY3LDAsMCwuNzc3NzhdLDg4Mjk6Wy4xMzY2NywuNjM2NjcsMCwwLC43Nzc3OF0sODgzMDpbLjIyOTU4LC43Mjk1OCwwLDAsLjc3Nzc4XSw4ODMxOlsuMjI5NTgsLjcyOTU4LDAsMCwuNzc3NzhdLDg4MzI6Wy4yMDU3NiwuNzA1NzYsMCwwLC43Nzc3OF0sODgzMzpbLjIwNTc2LC43MDU3NiwwLDAsLjc3Nzc4XSw4ODQwOlsuMzAyNzQsLjc5MzgzLDAsMCwuNzc3NzhdLDg4NDE6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODg0MjpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSw4ODQzOlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4NDc6Wy4wMzUxNywuNTQ5ODYsMCwwLC43Nzc3OF0sODg0ODpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw4ODU4OlsuMDgxOTgsLjU4MTk4LDAsMCwuNzc3NzhdLDg4NTk6Wy4wODE5OCwuNTgxOTgsMCwwLC43Nzc3OF0sODg2MTpbLjA4MTk4LC41ODE5OCwwLDAsLjc3Nzc4XSw4ODYyOlswLC42NzUsMCwwLC43Nzc3OF0sODg2MzpbMCwuNjc1LDAsMCwuNzc3NzhdLDg4NjQ6WzAsLjY3NSwwLDAsLjc3Nzc4XSw4ODY1OlswLC42NzUsMCwwLC43Nzc3OF0sODg3MjpbMCwuNjkyMjQsMCwwLC42MTExMV0sODg3MzpbMCwuNjkyMjQsMCwwLC43MjIyMl0sODg3NDpbMCwuNjkyMjQsMCwwLC44ODg4OV0sODg3NjpbMCwuNjg4ODksMCwwLC42MTExMV0sODg3NzpbMCwuNjg4ODksMCwwLC42MTExMV0sODg3ODpbMCwuNjg4ODksMCwwLC43MjIyMl0sODg3OTpbMCwuNjg4ODksMCwwLC43MjIyMl0sODg4MjpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw4ODgzOlsuMDM1MTcsLjU0OTg2LDAsMCwuNzc3NzhdLDg4ODQ6Wy4xMzY2NywuNjM2NjcsMCwwLC43Nzc3OF0sODg4NTpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSw4ODg4OlswLC41NDk4NiwwLDAsMS4xMTExMV0sODg5MDpbLjE5NDQ0LC40MzA1NiwwLDAsLjU1NTU2XSw4ODkxOlsuMTk0NDQsLjY5MjI0LDAsMCwuNjExMTFdLDg4OTI6Wy4xOTQ0NCwuNjkyMjQsMCwwLC42MTExMV0sODkwMTpbMCwuNTQ5ODYsMCwwLC4yNzc3OF0sODkwMzpbLjA4MTY3LC41ODE2NywwLDAsLjc3Nzc4XSw4OTA1OlsuMDgxNjcsLjU4MTY3LDAsMCwuNzc3NzhdLDg5MDY6Wy4wODE2NywuNTgxNjcsMCwwLC43Nzc3OF0sODkwNzpbMCwuNjkyMjQsMCwwLC43Nzc3OF0sODkwODpbMCwuNjkyMjQsMCwwLC43Nzc3OF0sODkwOTpbLS4wMzU5OCwuNDY0MDIsMCwwLC43Nzc3OF0sODkxMDpbMCwuNTQ5ODYsMCwwLC43NjA0Ml0sODkxMTpbMCwuNTQ5ODYsMCwwLC43NjA0Ml0sODkxMjpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw4OTEzOlsuMDM1MTcsLjU0OTg2LDAsMCwuNzc3NzhdLDg5MTQ6WzAsLjU0OTg2LDAsMCwuNjY2NjddLDg5MTU6WzAsLjU0OTg2LDAsMCwuNjY2NjddLDg5MTY6WzAsLjY5MjI0LDAsMCwuNjY2NjddLDg5MTg6Wy4wMzkxLC41MzkxLDAsMCwuNzc3NzhdLDg5MTk6Wy4wMzkxLC41MzkxLDAsMCwuNzc3NzhdLDg5MjA6Wy4wMzUxNywuNTQ5ODYsMCwwLDEuMzMzMzRdLDg5MjE6Wy4wMzUxNywuNTQ5ODYsMCwwLDEuMzMzMzRdLDg5MjI6Wy4zODU2OSwuODg1NjksMCwwLC43Nzc3OF0sODkyMzpbLjM4NTY5LC44ODU2OSwwLDAsLjc3Nzc4XSw4OTI2OlsuMTM2NjcsLjYzNjY3LDAsMCwuNzc3NzhdLDg5Mjc6Wy4xMzY2NywuNjM2NjcsMCwwLC43Nzc3OF0sODkyODpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw4OTI5OlsuMzAyNzQsLjc5MzgzLDAsMCwuNzc3NzhdLDg5MzQ6Wy4yMzIyMiwuNzQxMTEsMCwwLC43Nzc3OF0sODkzNTpbLjIzMjIyLC43NDExMSwwLDAsLjc3Nzc4XSw4OTM2OlsuMjMyMjIsLjc0MTExLDAsMCwuNzc3NzhdLDg5Mzc6Wy4yMzIyMiwuNzQxMTEsMCwwLC43Nzc3OF0sODkzODpbLjIwNTc2LC43MDU3NiwwLDAsLjc3Nzc4XSw4OTM5OlsuMjA1NzYsLjcwNTc2LDAsMCwuNzc3NzhdLDg5NDA6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODk0MTpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw4OTk0OlsuMTk0NDQsLjY5MjI0LDAsMCwuNzc3NzhdLDg5OTU6Wy4xOTQ0NCwuNjkyMjQsMCwwLC43Nzc3OF0sOTQxNjpbLjE1NTU5LC42OTIyNCwwLDAsLjkwMjIyXSw5NDg0OlswLC42OTIyNCwwLDAsLjVdLDk0ODg6WzAsLjY5MjI0LDAsMCwuNV0sOTQ5MjpbMCwuMzc3ODgsMCwwLC41XSw5NDk2OlswLC4zNzc4OCwwLDAsLjVdLDk1ODU6Wy4xOTQ0NCwuNjg4ODksMCwwLC44ODg4OV0sOTU4NjpbLjE5NDQ0LC43NDExMSwwLDAsLjg4ODg5XSw5NjMyOlswLC42NzUsMCwwLC43Nzc3OF0sOTYzMzpbMCwuNjc1LDAsMCwuNzc3NzhdLDk2NTA6WzAsLjU0OTg2LDAsMCwuNzIyMjJdLDk2NTE6WzAsLjU0OTg2LDAsMCwuNzIyMjJdLDk2NTQ6Wy4wMzUxNywuNTQ5ODYsMCwwLC43Nzc3OF0sOTY2MDpbMCwuNTQ5ODYsMCwwLC43MjIyMl0sOTY2MTpbMCwuNTQ5ODYsMCwwLC43MjIyMl0sOTY2NDpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw5Njc0OlsuMTExMTEsLjY5MjI0LDAsMCwuNjY2NjddLDk3MzM6Wy4xOTQ0NCwuNjkyMjQsMCwwLC45NDQ0NV0sMTAwMDM6WzAsLjY5MjI0LDAsMCwuODMzMzRdLDEwMDE2OlswLC42OTIyNCwwLDAsLjgzMzM0XSwxMDczMTpbLjExMTExLC42OTIyNCwwLDAsLjY2NjY3XSwxMDg0NjpbLjE5NDQ0LC43NTU4MywwLDAsLjYxMTExXSwxMDg3NzpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSwxMDg3ODpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSwxMDg4NTpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSwxMDg4NjpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSwxMDg4NzpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSwxMDg4ODpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSwxMDg4OTpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDg5MDpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDg5MTpbLjQ4MjU2LC45ODI1NiwwLDAsLjc3Nzc4XSwxMDg5MjpbLjQ4MjU2LC45ODI1NiwwLDAsLjc3Nzc4XSwxMDkwMTpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSwxMDkwMjpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSwxMDkzMzpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzNDpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzNTpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzNjpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzNzpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzODpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDk0OTpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSwxMDk1MDpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSwxMDk1NTpbLjI4NDgxLC43OTM4MywwLDAsLjc3Nzc4XSwxMDk1NjpbLjI4NDgxLC43OTM4MywwLDAsLjc3Nzc4XSw1NzM1MDpbLjA4MTY3LC41ODE2NywwLDAsLjIyMjIyXSw1NzM1MTpbLjA4MTY3LC41ODE2NywwLDAsLjM4ODg5XSw1NzM1MjpbLjA4MTY3LC41ODE2NywwLDAsLjc3Nzc4XSw1NzM1MzpbMCwuNDMwNTYsLjA0MDI4LDAsLjY2NjY3XSw1NzM1NjpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM1NzpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM1ODpbLjQxOTUxLC45MTk1MSwwLDAsLjc3Nzc4XSw1NzM1OTpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw1NzM2MDpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw1NzM2MTpbLjQxOTUxLC45MTk1MSwwLDAsLjc3Nzc4XSw1NzM2NjpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM2NzpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM2ODpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM2OTpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM3MDpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSw1NzM3MTpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XX0sIkNhbGlncmFwaGljLVJlZ3VsYXIiOnszMjpbMCwwLDAsMCwuMjVdLDY1OlswLC42ODMzMywwLC4xOTQ0NSwuNzk4NDddLDY2OlswLC42ODMzMywuMDMwNDEsLjEzODg5LC42NTY4MV0sNjc6WzAsLjY4MzMzLC4wNTgzNCwuMTM4ODksLjUyNjUzXSw2ODpbMCwuNjgzMzMsLjAyNzc4LC4wODMzNCwuNzcxMzldLDY5OlswLC42ODMzMywuMDg5NDQsLjExMTExLC41Mjc3OF0sNzA6WzAsLjY4MzMzLC4wOTkzMSwuMTExMTEsLjcxODc1XSw3MTpbLjA5NzIyLC42ODMzMywuMDU5MywuMTExMTEsLjU5NDg3XSw3MjpbMCwuNjgzMzMsLjAwOTY1LC4xMTExMSwuODQ0NTJdLDczOlswLC42ODMzMywuMDczODIsMCwuNTQ0NTJdLDc0OlsuMDk3MjIsLjY4MzMzLC4xODQ3MiwuMTY2NjcsLjY3Nzc4XSw3NTpbMCwuNjgzMzMsLjAxNDQ1LC4wNTU1NiwuNzYxOTVdLDc2OlswLC42ODMzMywwLC4xMzg4OSwuNjg5NzJdLDc3OlswLC42ODMzMywwLC4xMzg4OSwxLjIwMDldLDc4OlswLC42ODMzMywuMTQ3MzYsLjA4MzM0LC44MjA0OV0sNzk6WzAsLjY4MzMzLC4wMjc3OCwuMTExMTEsLjc5NjExXSw4MDpbMCwuNjgzMzMsLjA4MjIyLC4wODMzNCwuNjk1NTZdLDgxOlsuMDk3MjIsLjY4MzMzLDAsLjExMTExLC44MTY2N10sODI6WzAsLjY4MzMzLDAsLjA4MzM0LC44NDc1XSw4MzpbMCwuNjgzMzMsLjA3NSwuMTM4ODksLjYwNTU2XSw4NDpbMCwuNjgzMzMsLjI1NDE3LDAsLjU0NDY0XSw4NTpbMCwuNjgzMzMsLjA5OTMxLC4wODMzNCwuNjI1ODNdLDg2OlswLC42ODMzMywuMDgyMjIsMCwuNjEyNzhdLDg3OlswLC42ODMzMywuMDgyMjIsLjA4MzM0LC45ODc3OF0sODg6WzAsLjY4MzMzLC4xNDY0MywuMTM4ODksLjcxMzNdLDg5OlsuMDk3MjIsLjY4MzMzLC4wODIyMiwuMDgzMzQsLjY2ODM0XSw5MDpbMCwuNjgzMzMsLjA3OTQ0LC4xMzg4OSwuNzI0NzNdLDE2MDpbMCwwLDAsMCwuMjVdfSwiRnJha3R1ci1SZWd1bGFyIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjkxNDEsMCwwLC4yOTU3NF0sMzQ6WzAsLjY5MTQxLDAsMCwuMjE0NzFdLDM4OlswLC42OTE0MSwwLDAsLjczNzg2XSwzOTpbMCwuNjkxNDEsMCwwLC4yMTIwMV0sNDA6Wy4yNDk4MiwuNzQ5NDcsMCwwLC4zODg2NV0sNDE6Wy4yNDk4MiwuNzQ5NDcsMCwwLC4zODg2NV0sNDI6WzAsLjYyMTE5LDAsMCwuMjc3NjRdLDQzOlsuMDgzMTksLjU4MjgzLDAsMCwuNzU2MjNdLDQ0OlswLC4xMDgwMywwLDAsLjI3NzY0XSw0NTpbLjA4MzE5LC41ODI4MywwLDAsLjc1NjIzXSw0NjpbMCwuMTA4MDMsMCwwLC4yNzc2NF0sNDc6Wy4yNDk4MiwuNzQ5NDcsMCwwLC41MDE4MV0sNDg6WzAsLjQ3NTM0LDAsMCwuNTAxODFdLDQ5OlswLC40NzUzNCwwLDAsLjUwMTgxXSw1MDpbMCwuNDc1MzQsMCwwLC41MDE4MV0sNTE6Wy4xODkwNiwuNDc1MzQsMCwwLC41MDE4MV0sNTI6Wy4xODkwNiwuNDc1MzQsMCwwLC41MDE4MV0sNTM6Wy4xODkwNiwuNDc1MzQsMCwwLC41MDE4MV0sNTQ6WzAsLjY5MTQxLDAsMCwuNTAxODFdLDU1OlsuMTg5MDYsLjQ3NTM0LDAsMCwuNTAxODFdLDU2OlswLC42OTE0MSwwLDAsLjUwMTgxXSw1NzpbLjE4OTA2LC40NzUzNCwwLDAsLjUwMTgxXSw1ODpbMCwuNDc1MzQsMCwwLC4yMTYwNl0sNTk6Wy4xMjYwNCwuNDc1MzQsMCwwLC4yMTYwNl0sNjE6Wy0uMTMwOTksLjM2ODY2LDAsMCwuNzU2MjNdLDYzOlswLC42OTE0MSwwLDAsLjM2MjQ1XSw2NTpbMCwuNjkxNDEsMCwwLC43MTc2XSw2NjpbMCwuNjkxNDEsMCwwLC44ODM5N10sNjc6WzAsLjY5MTQxLDAsMCwuNjEyNTRdLDY4OlswLC42OTE0MSwwLDAsLjgzMTU4XSw2OTpbMCwuNjkxNDEsMCwwLC42NjI3OF0sNzA6Wy4xMjYwNCwuNjkxNDEsMCwwLC42MTExOV0sNzE6WzAsLjY5MTQxLDAsMCwuNzg1MzldLDcyOlsuMDYzMDIsLjY5MTQxLDAsMCwuNzIwM10sNzM6WzAsLjY5MTQxLDAsMCwuNTU0NDhdLDc0OlsuMTI2MDQsLjY5MTQxLDAsMCwuNTUyMzFdLDc1OlswLC42OTE0MSwwLDAsLjY2ODQ1XSw3NjpbMCwuNjkxNDEsMCwwLC42NjYwMl0sNzc6WzAsLjY5MTQxLDAsMCwxLjA0OTUzXSw3ODpbMCwuNjkxNDEsMCwwLC44MzIxMl0sNzk6WzAsLjY5MTQxLDAsMCwuODI2OTldLDgwOlsuMTg5MDYsLjY5MTQxLDAsMCwuODI3NTNdLDgxOlsuMDM3ODEsLjY5MTQxLDAsMCwuODI2OTldLDgyOlswLC42OTE0MSwwLDAsLjgyODA3XSw4MzpbMCwuNjkxNDEsMCwwLC44Mjg2MV0sODQ6WzAsLjY5MTQxLDAsMCwuNjY4OTldLDg1OlswLC42OTE0MSwwLDAsLjY0NTc2XSw4NjpbMCwuNjkxNDEsMCwwLC44MzEzMV0sODc6WzAsLjY5MTQxLDAsMCwxLjA0NjAyXSw4ODpbMCwuNjkxNDEsMCwwLC43MTkyMl0sODk6Wy4xODkwNiwuNjkxNDEsMCwwLC44MzI5M10sOTA6Wy4xMjYwNCwuNjkxNDEsMCwwLC42MDIwMV0sOTE6Wy4yNDk4MiwuNzQ5NDcsMCwwLC4yNzc2NF0sOTM6Wy4yNDk4MiwuNzQ5NDcsMCwwLC4yNzc2NF0sOTQ6WzAsLjY5MTQxLDAsMCwuNDk5NjVdLDk3OlswLC40NzUzNCwwLDAsLjUwMDQ2XSw5ODpbMCwuNjkxNDEsMCwwLC41MTMxNV0sOTk6WzAsLjQ3NTM0LDAsMCwuMzg5NDZdLDEwMDpbMCwuNjIxMTksMCwwLC40OTg1N10sMTAxOlswLC40NzUzNCwwLDAsLjQwMDUzXSwxMDI6Wy4xODkwNiwuNjkxNDEsMCwwLC4zMjYyNl0sMTAzOlsuMTg5MDYsLjQ3NTM0LDAsMCwuNTAzN10sMTA0OlsuMTg5MDYsLjY5MTQxLDAsMCwuNTIxMjZdLDEwNTpbMCwuNjkxNDEsMCwwLC4yNzg5OV0sMTA2OlswLC42OTE0MSwwLDAsLjI4MDg4XSwxMDc6WzAsLjY5MTQxLDAsMCwuMzg5NDZdLDEwODpbMCwuNjkxNDEsMCwwLC4yNzk1M10sMTA5OlswLC40NzUzNCwwLDAsLjc2Njc2XSwxMTA6WzAsLjQ3NTM0LDAsMCwuNTI2NjZdLDExMTpbMCwuNDc1MzQsMCwwLC40ODg4NV0sMTEyOlsuMTg5MDYsLjUyMzk2LDAsMCwuNTAwNDZdLDExMzpbLjE4OTA2LC40NzUzNCwwLDAsLjQ4OTEyXSwxMTQ6WzAsLjQ3NTM0LDAsMCwuMzg5MTldLDExNTpbMCwuNDc1MzQsMCwwLC40NDI2Nl0sMTE2OlswLC42MjExOSwwLDAsLjMzMzAxXSwxMTc6WzAsLjQ3NTM0LDAsMCwuNTE3Ml0sMTE4OlswLC41MjM5NiwwLDAsLjUxMThdLDExOTpbMCwuNTIzOTYsMCwwLC43NzM1MV0sMTIwOlsuMTg5MDYsLjQ3NTM0LDAsMCwuMzg4NjVdLDEyMTpbLjE4OTA2LC40NzUzNCwwLDAsLjQ5ODg0XSwxMjI6Wy4xODkwNiwuNDc1MzQsMCwwLC4zOTA1NF0sMTYwOlswLDAsMCwwLC4yNV0sODIxNjpbMCwuNjkxNDEsMCwwLC4yMTQ3MV0sODIxNzpbMCwuNjkxNDEsMCwwLC4yMTQ3MV0sNTgxMTI6WzAsLjYyMTE5LDAsMCwuNDk3NDldLDU4MTEzOlswLC42MjExOSwwLDAsLjQ5ODNdLDU4MTE0OlsuMTg5MDYsLjY5MTQxLDAsMCwuMzMzMjhdLDU4MTE1OlsuMTg5MDYsLjY5MTQxLDAsMCwuMzI5MjNdLDU4MTE2OlsuMTg5MDYsLjQ3NTM0LDAsMCwuNTAzNDNdLDU4MTE3OlswLC42OTE0MSwwLDAsLjMzMzAxXSw1ODExODpbMCwuNjIxMTksMCwwLC4zMzQwOV0sNTgxMTk6WzAsLjQ3NTM0LDAsMCwuNTAwNzNdfSwiTWFpbi1Cb2xkIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjk0NDQsMCwwLC4zNV0sMzQ6WzAsLjY5NDQ0LDAsMCwuNjAyNzhdLDM1OlsuMTk0NDQsLjY5NDQ0LDAsMCwuOTU4MzNdLDM2OlsuMDU1NTYsLjc1LDAsMCwuNTc1XSwzNzpbLjA1NTU2LC43NSwwLDAsLjk1ODMzXSwzODpbMCwuNjk0NDQsMCwwLC44OTQ0NF0sMzk6WzAsLjY5NDQ0LDAsMCwuMzE5NDRdLDQwOlsuMjUsLjc1LDAsMCwuNDQ3MjJdLDQxOlsuMjUsLjc1LDAsMCwuNDQ3MjJdLDQyOlswLC43NSwwLDAsLjU3NV0sNDM6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sNDQ6Wy4xOTQ0NCwuMTU1NTYsMCwwLC4zMTk0NF0sNDU6WzAsLjQ0NDQ0LDAsMCwuMzgzMzNdLDQ2OlswLC4xNTU1NiwwLDAsLjMxOTQ0XSw0NzpbLjI1LC43NSwwLDAsLjU3NV0sNDg6WzAsLjY0NDQ0LDAsMCwuNTc1XSw0OTpbMCwuNjQ0NDQsMCwwLC41NzVdLDUwOlswLC42NDQ0NCwwLDAsLjU3NV0sNTE6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1MjpbMCwuNjQ0NDQsMCwwLC41NzVdLDUzOlswLC42NDQ0NCwwLDAsLjU3NV0sNTQ6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1NTpbMCwuNjQ0NDQsMCwwLC41NzVdLDU2OlswLC42NDQ0NCwwLDAsLjU3NV0sNTc6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1ODpbMCwuNDQ0NDQsMCwwLC4zMTk0NF0sNTk6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC4zMTk0NF0sNjA6Wy4wODU1NiwuNTg1NTYsMCwwLC44OTQ0NF0sNjE6Wy0uMTA4ODksLjM5MTExLDAsMCwuODk0NDRdLDYyOlsuMDg1NTYsLjU4NTU2LDAsMCwuODk0NDRdLDYzOlswLC42OTQ0NCwwLDAsLjU0MzA1XSw2NDpbMCwuNjk0NDQsMCwwLC44OTQ0NF0sNjU6WzAsLjY4NjExLDAsMCwuODY5NDRdLDY2OlswLC42ODYxMSwwLDAsLjgxODA1XSw2NzpbMCwuNjg2MTEsMCwwLC44MzA1NV0sNjg6WzAsLjY4NjExLDAsMCwuODgxOTRdLDY5OlswLC42ODYxMSwwLDAsLjc1NTU1XSw3MDpbMCwuNjg2MTEsMCwwLC43MjM2MV0sNzE6WzAsLjY4NjExLDAsMCwuOTA0MTZdLDcyOlswLC42ODYxMSwwLDAsLjldLDczOlswLC42ODYxMSwwLDAsLjQzNjExXSw3NDpbMCwuNjg2MTEsMCwwLC41OTQ0NF0sNzU6WzAsLjY4NjExLDAsMCwuOTAxMzhdLDc2OlswLC42ODYxMSwwLDAsLjY5MTY2XSw3NzpbMCwuNjg2MTEsMCwwLDEuMDkxNjZdLDc4OlswLC42ODYxMSwwLDAsLjldLDc5OlswLC42ODYxMSwwLDAsLjg2Mzg4XSw4MDpbMCwuNjg2MTEsMCwwLC43ODYxMV0sODE6Wy4xOTQ0NCwuNjg2MTEsMCwwLC44NjM4OF0sODI6WzAsLjY4NjExLDAsMCwuODYyNV0sODM6WzAsLjY4NjExLDAsMCwuNjM4ODldLDg0OlswLC42ODYxMSwwLDAsLjhdLDg1OlswLC42ODYxMSwwLDAsLjg4NDcyXSw4NjpbMCwuNjg2MTEsLjAxNTk3LDAsLjg2OTQ0XSw4NzpbMCwuNjg2MTEsLjAxNTk3LDAsMS4xODg4OF0sODg6WzAsLjY4NjExLDAsMCwuODY5NDRdLDg5OlswLC42ODYxMSwuMDI4NzUsMCwuODY5NDRdLDkwOlswLC42ODYxMSwwLDAsLjcwMjc3XSw5MTpbLjI1LC43NSwwLDAsLjMxOTQ0XSw5MjpbLjI1LC43NSwwLDAsLjU3NV0sOTM6Wy4yNSwuNzUsMCwwLC4zMTk0NF0sOTQ6WzAsLjY5NDQ0LDAsMCwuNTc1XSw5NTpbLjMxLC4xMzQ0NCwuMDMxOTQsMCwuNTc1XSw5NzpbMCwuNDQ0NDQsMCwwLC41NTkwMl0sOTg6WzAsLjY5NDQ0LDAsMCwuNjM4ODldLDk5OlswLC40NDQ0NCwwLDAsLjUxMTExXSwxMDA6WzAsLjY5NDQ0LDAsMCwuNjM4ODldLDEwMTpbMCwuNDQ0NDQsMCwwLC41MjcwOF0sMTAyOlswLC42OTQ0NCwuMTA5MDMsMCwuMzUxMzldLDEwMzpbLjE5NDQ0LC40NDQ0NCwuMDE1OTcsMCwuNTc1XSwxMDQ6WzAsLjY5NDQ0LDAsMCwuNjM4ODldLDEwNTpbMCwuNjk0NDQsMCwwLC4zMTk0NF0sMTA2OlsuMTk0NDQsLjY5NDQ0LDAsMCwuMzUxMzldLDEwNzpbMCwuNjk0NDQsMCwwLC42MDY5NF0sMTA4OlswLC42OTQ0NCwwLDAsLjMxOTQ0XSwxMDk6WzAsLjQ0NDQ0LDAsMCwuOTU4MzNdLDExMDpbMCwuNDQ0NDQsMCwwLC42Mzg4OV0sMTExOlswLC40NDQ0NCwwLDAsLjU3NV0sMTEyOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNjM4ODldLDExMzpbLjE5NDQ0LC40NDQ0NCwwLDAsLjYwNjk0XSwxMTQ6WzAsLjQ0NDQ0LDAsMCwuNDczNjFdLDExNTpbMCwuNDQ0NDQsMCwwLC40NTM2MV0sMTE2OlswLC42MzQ5MiwwLDAsLjQ0NzIyXSwxMTc6WzAsLjQ0NDQ0LDAsMCwuNjM4ODldLDExODpbMCwuNDQ0NDQsLjAxNTk3LDAsLjYwNjk0XSwxMTk6WzAsLjQ0NDQ0LC4wMTU5NywwLC44MzA1NV0sMTIwOlswLC40NDQ0NCwwLDAsLjYwNjk0XSwxMjE6Wy4xOTQ0NCwuNDQ0NDQsLjAxNTk3LDAsLjYwNjk0XSwxMjI6WzAsLjQ0NDQ0LDAsMCwuNTExMTFdLDEyMzpbLjI1LC43NSwwLDAsLjU3NV0sMTI0OlsuMjUsLjc1LDAsMCwuMzE5NDRdLDEyNTpbLjI1LC43NSwwLDAsLjU3NV0sMTI2OlsuMzUsLjM0NDQ0LDAsMCwuNTc1XSwxNjA6WzAsMCwwLDAsLjI1XSwxNjM6WzAsLjY5NDQ0LDAsMCwuODY4NTNdLDE2ODpbMCwuNjk0NDQsMCwwLC41NzVdLDE3MjpbMCwuNDQ0NDQsMCwwLC43NjY2Nl0sMTc2OlswLC42OTQ0NCwwLDAsLjg2OTQ0XSwxNzc6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sMTg0OlsuMTcwMTQsMCwwLDAsLjUxMTExXSwxOTg6WzAsLjY4NjExLDAsMCwxLjA0MTY2XSwyMTU6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sMjE2OlsuMDQ4NjEsLjczNDcyLDAsMCwuODk0NDRdLDIyMzpbMCwuNjk0NDQsMCwwLC41OTcyMl0sMjMwOlswLC40NDQ0NCwwLDAsLjgzMDU1XSwyNDc6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sMjQ4OlsuMDk3MjIsLjU0MTY3LDAsMCwuNTc1XSwzMDU6WzAsLjQ0NDQ0LDAsMCwuMzE5NDRdLDMzODpbMCwuNjg2MTEsMCwwLDEuMTY5NDRdLDMzOTpbMCwuNDQ0NDQsMCwwLC44OTQ0NF0sNTY3OlsuMTk0NDQsLjQ0NDQ0LDAsMCwuMzUxMzldLDcxMDpbMCwuNjk0NDQsMCwwLC41NzVdLDcxMTpbMCwuNjMxOTQsMCwwLC41NzVdLDcxMzpbMCwuNTk2MTEsMCwwLC41NzVdLDcxNDpbMCwuNjk0NDQsMCwwLC41NzVdLDcxNTpbMCwuNjk0NDQsMCwwLC41NzVdLDcyODpbMCwuNjk0NDQsMCwwLC41NzVdLDcyOTpbMCwuNjk0NDQsMCwwLC4zMTk0NF0sNzMwOlswLC42OTQ0NCwwLDAsLjg2OTQ0XSw3MzI6WzAsLjY5NDQ0LDAsMCwuNTc1XSw3MzM6WzAsLjY5NDQ0LDAsMCwuNTc1XSw5MTU6WzAsLjY4NjExLDAsMCwuNjkxNjZdLDkxNjpbMCwuNjg2MTEsMCwwLC45NTgzM10sOTIwOlswLC42ODYxMSwwLDAsLjg5NDQ0XSw5MjM6WzAsLjY4NjExLDAsMCwuODA1NTVdLDkyNjpbMCwuNjg2MTEsMCwwLC43NjY2Nl0sOTI4OlswLC42ODYxMSwwLDAsLjldLDkzMTpbMCwuNjg2MTEsMCwwLC44MzA1NV0sOTMzOlswLC42ODYxMSwwLDAsLjg5NDQ0XSw5MzQ6WzAsLjY4NjExLDAsMCwuODMwNTVdLDkzNjpbMCwuNjg2MTEsMCwwLC44OTQ0NF0sOTM3OlswLC42ODYxMSwwLDAsLjgzMDU1XSw4MjExOlswLC40NDQ0NCwuMDMxOTQsMCwuNTc1XSw4MjEyOlswLC40NDQ0NCwuMDMxOTQsMCwxLjE0OTk5XSw4MjE2OlswLC42OTQ0NCwwLDAsLjMxOTQ0XSw4MjE3OlswLC42OTQ0NCwwLDAsLjMxOTQ0XSw4MjIwOlswLC42OTQ0NCwwLDAsLjYwMjc4XSw4MjIxOlswLC42OTQ0NCwwLDAsLjYwMjc4XSw4MjI0OlsuMTk0NDQsLjY5NDQ0LDAsMCwuNTExMTFdLDgyMjU6Wy4xOTQ0NCwuNjk0NDQsMCwwLC41MTExMV0sODI0MjpbMCwuNTU1NTYsMCwwLC4zNDQ0NF0sODQwNzpbMCwuNzI0NDQsLjE1NDg2LDAsLjU3NV0sODQ2MzpbMCwuNjk0NDQsMCwwLC42Njc1OV0sODQ2NTpbMCwuNjk0NDQsMCwwLC44MzA1NV0sODQ2NzpbMCwuNjk0NDQsMCwwLC40NzM2MV0sODQ3MjpbLjE5NDQ0LC40NDQ0NCwwLDAsLjc0MDI3XSw4NDc2OlswLC42OTQ0NCwwLDAsLjgzMDU1XSw4NTAxOlswLC42OTQ0NCwwLDAsLjcwMjc3XSw4NTkyOlstLjEwODg5LC4zOTExMSwwLDAsMS4xNDk5OV0sODU5MzpbLjE5NDQ0LC42OTQ0NCwwLDAsLjU3NV0sODU5NDpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg1OTU6Wy4xOTQ0NCwuNjk0NDQsMCwwLC41NzVdLDg1OTY6Wy0uMTA4ODksLjM5MTExLDAsMCwxLjE0OTk5XSw4NTk3OlsuMjUsLjc1LDAsMCwuNTc1XSw4NTk4OlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw4NTk5OlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw4NjAwOlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw4NjAxOlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw4NjM2OlstLjEwODg5LC4zOTExMSwwLDAsMS4xNDk5OV0sODYzNzpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NDA6Wy0uMTA4ODksLjM5MTExLDAsMCwxLjE0OTk5XSw4NjQxOlstLjEwODg5LC4zOTExMSwwLDAsMS4xNDk5OV0sODY1NjpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NTc6Wy4xOTQ0NCwuNjk0NDQsMCwwLC43MDI3N10sODY1ODpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NTk6Wy4xOTQ0NCwuNjk0NDQsMCwwLC43MDI3N10sODY2MDpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NjE6Wy4yNSwuNzUsMCwwLC43MDI3N10sODcwNDpbMCwuNjk0NDQsMCwwLC42Mzg4OV0sODcwNjpbMCwuNjk0NDQsLjA2Mzg5LDAsLjYyODQ3XSw4NzA3OlswLC42OTQ0NCwwLDAsLjYzODg5XSw4NzA5OlsuMDU1NTYsLjc1LDAsMCwuNTc1XSw4NzExOlswLC42ODYxMSwwLDAsLjk1ODMzXSw4NzEyOlsuMDg1NTYsLjU4NTU2LDAsMCwuNzY2NjZdLDg3MTU6Wy4wODU1NiwuNTg1NTYsMCwwLC43NjY2Nl0sODcyMjpbLjEzMzMzLC42MzMzMywwLDAsLjg5NDQ0XSw4NzIzOlsuMTMzMzMsLjYzMzMzLDAsMCwuODk0NDRdLDg3MjU6Wy4yNSwuNzUsMCwwLC41NzVdLDg3MjY6Wy4yNSwuNzUsMCwwLC41NzVdLDg3Mjc6Wy0uMDI3NzgsLjQ3MjIyLDAsMCwuNTc1XSw4NzI4OlstLjAyNjM5LC40NzM2MSwwLDAsLjU3NV0sODcyOTpbLS4wMjYzOSwuNDczNjEsMCwwLC41NzVdLDg3MzA6Wy4xOCwuODIsMCwwLC45NTgzM10sODczMzpbMCwuNDQ0NDQsMCwwLC44OTQ0NF0sODczNDpbMCwuNDQ0NDQsMCwwLDEuMTQ5OTldLDg3MzY6WzAsLjY5MjI0LDAsMCwuNzIyMjJdLDg3Mzk6Wy4yNSwuNzUsMCwwLC4zMTk0NF0sODc0MTpbLjI1LC43NSwwLDAsLjU3NV0sODc0MzpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODc0NDpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODc0NTpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODc0NjpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODc0NzpbLjE5NDQ0LC42OTQ0NCwuMTI3NzgsMCwuNTY4NzVdLDg3NjQ6Wy0uMTA4ODksLjM5MTExLDAsMCwuODk0NDRdLDg3Njg6Wy4xOTQ0NCwuNjk0NDQsMCwwLC4zMTk0NF0sODc3MTpbLjAwMjIyLC41MDIyMiwwLDAsLjg5NDQ0XSw4NzczOlsuMDI3LC42MzgsMCwwLC44OTRdLDg3NzY6Wy4wMjQ0NCwuNTI0NDQsMCwwLC44OTQ0NF0sODc4MTpbLjAwMjIyLC41MDIyMiwwLDAsLjg5NDQ0XSw4ODAxOlsuMDAyMjIsLjUwMjIyLDAsMCwuODk0NDRdLDg4MDQ6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sODgwNTpbLjE5NjY3LC42OTY2NywwLDAsLjg5NDQ0XSw4ODEwOlsuMDg1NTYsLjU4NTU2LDAsMCwxLjE0OTk5XSw4ODExOlsuMDg1NTYsLjU4NTU2LDAsMCwxLjE0OTk5XSw4ODI2OlsuMDg1NTYsLjU4NTU2LDAsMCwuODk0NDRdLDg4Mjc6Wy4wODU1NiwuNTg1NTYsMCwwLC44OTQ0NF0sODgzNDpbLjA4NTU2LC41ODU1NiwwLDAsLjg5NDQ0XSw4ODM1OlsuMDg1NTYsLjU4NTU2LDAsMCwuODk0NDRdLDg4Mzg6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sODgzOTpbLjE5NjY3LC42OTY2NywwLDAsLjg5NDQ0XSw4ODQ2OlswLC41NTU1NiwwLDAsLjc2NjY2XSw4ODQ5OlsuMTk2NjcsLjY5NjY3LDAsMCwuODk0NDRdLDg4NTA6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sODg1MTpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODg1MjpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODg1MzpbLjEzMzMzLC42MzMzMywwLDAsLjg5NDQ0XSw4ODU0OlsuMTMzMzMsLjYzMzMzLDAsMCwuODk0NDRdLDg4NTU6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sODg1NjpbLjEzMzMzLC42MzMzMywwLDAsLjg5NDQ0XSw4ODU3OlsuMTMzMzMsLjYzMzMzLDAsMCwuODk0NDRdLDg4NjY6WzAsLjY5NDQ0LDAsMCwuNzAyNzddLDg4Njc6WzAsLjY5NDQ0LDAsMCwuNzAyNzddLDg4Njg6WzAsLjY5NDQ0LDAsMCwuODk0NDRdLDg4Njk6WzAsLjY5NDQ0LDAsMCwuODk0NDRdLDg5MDA6Wy0uMDI2MzksLjQ3MzYxLDAsMCwuNTc1XSw4OTAxOlstLjAyNjM5LC40NzM2MSwwLDAsLjMxOTQ0XSw4OTAyOlstLjAyNzc4LC40NzIyMiwwLDAsLjU3NV0sODk2ODpbLjI1LC43NSwwLDAsLjUxMTExXSw4OTY5OlsuMjUsLjc1LDAsMCwuNTExMTFdLDg5NzA6Wy4yNSwuNzUsMCwwLC41MTExMV0sODk3MTpbLjI1LC43NSwwLDAsLjUxMTExXSw4OTk0OlstLjEzODg5LC4zNjExMSwwLDAsMS4xNDk5OV0sODk5NTpbLS4xMzg4OSwuMzYxMTEsMCwwLDEuMTQ5OTldLDk2NTE6Wy4xOTQ0NCwuNjk0NDQsMCwwLDEuMDIyMjJdLDk2NTc6Wy0uMDI3NzgsLjQ3MjIyLDAsMCwuNTc1XSw5NjYxOlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjAyMjIyXSw5NjY3OlstLjAyNzc4LC40NzIyMiwwLDAsLjU3NV0sOTcxMTpbLjE5NDQ0LC42OTQ0NCwwLDAsMS4xNDk5OV0sOTgyNDpbLjEyOTYzLC42OTQ0NCwwLDAsLjg5NDQ0XSw5ODI1OlsuMTI5NjMsLjY5NDQ0LDAsMCwuODk0NDRdLDk4MjY6Wy4xMjk2MywuNjk0NDQsMCwwLC44OTQ0NF0sOTgyNzpbLjEyOTYzLC42OTQ0NCwwLDAsLjg5NDQ0XSw5ODM3OlswLC43NSwwLDAsLjQ0NzIyXSw5ODM4OlsuMTk0NDQsLjY5NDQ0LDAsMCwuNDQ3MjJdLDk4Mzk6Wy4xOTQ0NCwuNjk0NDQsMCwwLC40NDcyMl0sMTAyMTY6Wy4yNSwuNzUsMCwwLC40NDcyMl0sMTAyMTc6Wy4yNSwuNzUsMCwwLC40NDcyMl0sMTA4MTU6WzAsLjY4NjExLDAsMCwuOV0sMTA5Mjc6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sMTA5Mjg6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sNTczNzY6Wy4xOTQ0NCwuNjk0NDQsMCwwLDBdfSwiTWFpbi1Cb2xkSXRhbGljIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjk0NDQsLjExNDE3LDAsLjM4NjExXSwzNDpbMCwuNjk0NDQsLjA3OTM5LDAsLjYyMDU1XSwzNTpbLjE5NDQ0LC42OTQ0NCwuMDY4MzMsMCwuOTQ0NDRdLDM3OlsuMDU1NTYsLjc1LC4xMjg2MSwwLC45NDQ0NF0sMzg6WzAsLjY5NDQ0LC4wODUyOCwwLC44ODU1NV0sMzk6WzAsLjY5NDQ0LC4xMjk0NSwwLC4zNTU1NV0sNDA6Wy4yNSwuNzUsLjE1ODA2LDAsLjQ3MzMzXSw0MTpbLjI1LC43NSwuMDMzMDYsMCwuNDczMzNdLDQyOlswLC43NSwuMTQzMzMsMCwuNTkxMTFdLDQzOlsuMTAzMzMsLjYwMzMzLC4wMzMwNiwwLC44ODU1NV0sNDQ6Wy4xOTQ0NCwuMTQ3MjIsMCwwLC4zNTU1NV0sNDU6WzAsLjQ0NDQ0LC4wMjYxMSwwLC40MTQ0NF0sNDY6WzAsLjE0NzIyLDAsMCwuMzU1NTVdLDQ3OlsuMjUsLjc1LC4xNTgwNiwwLC41OTExMV0sNDg6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNDk6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNTA6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNTE6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNTI6Wy4xOTQ0NCwuNjQ0NDQsLjEzMTY3LDAsLjU5MTExXSw1MzpbMCwuNjQ0NDQsLjEzMTY3LDAsLjU5MTExXSw1NDpbMCwuNjQ0NDQsLjEzMTY3LDAsLjU5MTExXSw1NTpbLjE5NDQ0LC42NDQ0NCwuMTMxNjcsMCwuNTkxMTFdLDU2OlswLC42NDQ0NCwuMTMxNjcsMCwuNTkxMTFdLDU3OlswLC42NDQ0NCwuMTMxNjcsMCwuNTkxMTFdLDU4OlswLC40NDQ0NCwuMDY2OTUsMCwuMzU1NTVdLDU5OlsuMTk0NDQsLjQ0NDQ0LC4wNjY5NSwwLC4zNTU1NV0sNjE6Wy0uMTA4ODksLjM5MTExLC4wNjgzMywwLC44ODU1NV0sNjM6WzAsLjY5NDQ0LC4xMTQ3MiwwLC41OTExMV0sNjQ6WzAsLjY5NDQ0LC4wOTIwOCwwLC44ODU1NV0sNjU6WzAsLjY4NjExLDAsMCwuODY1NTVdLDY2OlswLC42ODYxMSwuMDk5MiwwLC44MTY2Nl0sNjc6WzAsLjY4NjExLC4xNDIwOCwwLC44MjY2Nl0sNjg6WzAsLjY4NjExLC4wOTA2MiwwLC44NzU1NV0sNjk6WzAsLjY4NjExLC4xMTQzMSwwLC43NTY2Nl0sNzA6WzAsLjY4NjExLC4xMjkwMywwLC43MjcyMl0sNzE6WzAsLjY4NjExLC4wNzM0NywwLC44OTUyN10sNzI6WzAsLjY4NjExLC4xNzIwOCwwLC44OTYxXSw3MzpbMCwuNjg2MTEsLjE1NjgxLDAsLjQ3MTY2XSw3NDpbMCwuNjg2MTEsLjE0NSwwLC42MTA1NV0sNzU6WzAsLjY4NjExLC4xNDIwOCwwLC44OTQ5OV0sNzY6WzAsLjY4NjExLDAsMCwuNjk3NzddLDc3OlswLC42ODYxMSwuMTcyMDgsMCwxLjA3Mjc3XSw3ODpbMCwuNjg2MTEsLjE3MjA4LDAsLjg5NjFdLDc5OlswLC42ODYxMSwuMDkwNjIsMCwuODU0OTldLDgwOlswLC42ODYxMSwuMDk5MiwwLC43ODcyMV0sODE6Wy4xOTQ0NCwuNjg2MTEsLjA5MDYyLDAsLjg1NDk5XSw4MjpbMCwuNjg2MTEsLjAyNTU5LDAsLjg1OTQ0XSw4MzpbMCwuNjg2MTEsLjExMjY0LDAsLjY0OTk5XSw4NDpbMCwuNjg2MTEsLjEyOTAzLDAsLjc5NjFdLDg1OlswLC42ODYxMSwuMTcyMDgsMCwuODgwODNdLDg2OlswLC42ODYxMSwuMTg2MjUsMCwuODY1NTVdLDg3OlswLC42ODYxMSwuMTg2MjUsMCwxLjE1OTk5XSw4ODpbMCwuNjg2MTEsLjE1NjgxLDAsLjg2NTU1XSw4OTpbMCwuNjg2MTEsLjE5ODAzLDAsLjg2NTU1XSw5MDpbMCwuNjg2MTEsLjE0MjA4LDAsLjcwODg4XSw5MTpbLjI1LC43NSwuMTg3NSwwLC4zNTYxMV0sOTM6Wy4yNSwuNzUsLjA5OTcyLDAsLjM1NjExXSw5NDpbMCwuNjk0NDQsLjA2NzA5LDAsLjU5MTExXSw5NTpbLjMxLC4xMzQ0NCwuMDk4MTEsMCwuNTkxMTFdLDk3OlswLC40NDQ0NCwuMDk0MjYsMCwuNTkxMTFdLDk4OlswLC42OTQ0NCwuMDc4NjEsMCwuNTMyMjJdLDk5OlswLC40NDQ0NCwuMDUyMjIsMCwuNTMyMjJdLDEwMDpbMCwuNjk0NDQsLjEwODYxLDAsLjU5MTExXSwxMDE6WzAsLjQ0NDQ0LC4wODUsMCwuNTMyMjJdLDEwMjpbLjE5NDQ0LC42OTQ0NCwuMjE3NzgsMCwuNF0sMTAzOlsuMTk0NDQsLjQ0NDQ0LC4xMDUsMCwuNTMyMjJdLDEwNDpbMCwuNjk0NDQsLjA5NDI2LDAsLjU5MTExXSwxMDU6WzAsLjY5MzI2LC4xMTM4NywwLC4zNTU1NV0sMTA2OlsuMTk0NDQsLjY5MzI2LC4xNjcyLDAsLjM1NTU1XSwxMDc6WzAsLjY5NDQ0LC4xMTExMSwwLC41MzIyMl0sMTA4OlswLC42OTQ0NCwuMTA4NjEsMCwuMjk2NjZdLDEwOTpbMCwuNDQ0NDQsLjA5NDI2LDAsLjk0NDQ0XSwxMTA6WzAsLjQ0NDQ0LC4wOTQyNiwwLC42NDk5OV0sMTExOlswLC40NDQ0NCwuMDc4NjEsMCwuNTkxMTFdLDExMjpbLjE5NDQ0LC40NDQ0NCwuMDc4NjEsMCwuNTkxMTFdLDExMzpbLjE5NDQ0LC40NDQ0NCwuMTA1LDAsLjUzMjIyXSwxMTQ6WzAsLjQ0NDQ0LC4xMTExMSwwLC41MDE2N10sMTE1OlswLC40NDQ0NCwuMDgxNjcsMCwuNDg2OTRdLDExNjpbMCwuNjM0OTIsLjA5NjM5LDAsLjM4NV0sMTE3OlswLC40NDQ0NCwuMDk0MjYsMCwuNjIwNTVdLDExODpbMCwuNDQ0NDQsLjExMTExLDAsLjUzMjIyXSwxMTk6WzAsLjQ0NDQ0LC4xMTExMSwwLC43Njc3N10sMTIwOlswLC40NDQ0NCwuMTI1ODMsMCwuNTYwNTVdLDEyMTpbLjE5NDQ0LC40NDQ0NCwuMTA1LDAsLjU2MTY2XSwxMjI6WzAsLjQ0NDQ0LC4xMzg4OSwwLC40OTA1NV0sMTI2OlsuMzUsLjM0NDQ0LC4xMTQ3MiwwLC41OTExMV0sMTYwOlswLDAsMCwwLC4yNV0sMTY4OlswLC42OTQ0NCwuMTE0NzMsMCwuNTkxMTFdLDE3NjpbMCwuNjk0NDQsMCwwLC45NDg4OF0sMTg0OlsuMTcwMTQsMCwwLDAsLjUzMjIyXSwxOTg6WzAsLjY4NjExLC4xMTQzMSwwLDEuMDIyNzddLDIxNjpbLjA0ODYxLC43MzQ3MiwuMDkwNjIsMCwuODg1NTVdLDIyMzpbLjE5NDQ0LC42OTQ0NCwuMDk3MzYsMCwuNjY1XSwyMzA6WzAsLjQ0NDQ0LC4wODUsMCwuODI2NjZdLDI0ODpbLjA5NzIyLC41NDE2NywuMDk0NTgsMCwuNTkxMTFdLDMwNTpbMCwuNDQ0NDQsLjA5NDI2LDAsLjM1NTU1XSwzMzg6WzAsLjY4NjExLC4xMTQzMSwwLDEuMTQwNTRdLDMzOTpbMCwuNDQ0NDQsLjA4NSwwLC44MjY2Nl0sNTY3OlsuMTk0NDQsLjQ0NDQ0LC4wNDYxMSwwLC4zODVdLDcxMDpbMCwuNjk0NDQsLjA2NzA5LDAsLjU5MTExXSw3MTE6WzAsLjYzMTk0LC4wODI3MSwwLC41OTExMV0sNzEzOlswLC41OTQ0NCwuMTA0NDQsMCwuNTkxMTFdLDcxNDpbMCwuNjk0NDQsLjA4NTI4LDAsLjU5MTExXSw3MTU6WzAsLjY5NDQ0LDAsMCwuNTkxMTFdLDcyODpbMCwuNjk0NDQsLjEwMzMzLDAsLjU5MTExXSw3Mjk6WzAsLjY5NDQ0LC4xMjk0NSwwLC4zNTU1NV0sNzMwOlswLC42OTQ0NCwwLDAsLjk0ODg4XSw3MzI6WzAsLjY5NDQ0LC4xMTQ3MiwwLC41OTExMV0sNzMzOlswLC42OTQ0NCwuMTE0NzIsMCwuNTkxMTFdLDkxNTpbMCwuNjg2MTEsLjEyOTAzLDAsLjY5Nzc3XSw5MTY6WzAsLjY4NjExLDAsMCwuOTQ0NDRdLDkyMDpbMCwuNjg2MTEsLjA5MDYyLDAsLjg4NTU1XSw5MjM6WzAsLjY4NjExLDAsMCwuODA2NjZdLDkyNjpbMCwuNjg2MTEsLjE1MDkyLDAsLjc2Nzc3XSw5Mjg6WzAsLjY4NjExLC4xNzIwOCwwLC44OTYxXSw5MzE6WzAsLjY4NjExLC4xMTQzMSwwLC44MjY2Nl0sOTMzOlswLC42ODYxMSwuMTA3NzgsMCwuODg1NTVdLDkzNDpbMCwuNjg2MTEsLjA1NjMyLDAsLjgyNjY2XSw5MzY6WzAsLjY4NjExLC4xMDc3OCwwLC44ODU1NV0sOTM3OlswLC42ODYxMSwuMDk5MiwwLC44MjY2Nl0sODIxMTpbMCwuNDQ0NDQsLjA5ODExLDAsLjU5MTExXSw4MjEyOlswLC40NDQ0NCwuMDk4MTEsMCwxLjE4MjIxXSw4MjE2OlswLC42OTQ0NCwuMTI5NDUsMCwuMzU1NTVdLDgyMTc6WzAsLjY5NDQ0LC4xMjk0NSwwLC4zNTU1NV0sODIyMDpbMCwuNjk0NDQsLjE2NzcyLDAsLjYyMDU1XSw4MjIxOlswLC42OTQ0NCwuMDc5MzksMCwuNjIwNTVdfSwiTWFpbi1JdGFsaWMiOnszMjpbMCwwLDAsMCwuMjVdLDMzOlswLC42OTQ0NCwuMTI0MTcsMCwuMzA2NjddLDM0OlswLC42OTQ0NCwuMDY5NjEsMCwuNTE0NDRdLDM1OlsuMTk0NDQsLjY5NDQ0LC4wNjYxNiwwLC44MTc3N10sMzc6Wy4wNTU1NiwuNzUsLjEzNjM5LDAsLjgxNzc3XSwzODpbMCwuNjk0NDQsLjA5Njk0LDAsLjc2NjY2XSwzOTpbMCwuNjk0NDQsLjEyNDE3LDAsLjMwNjY3XSw0MDpbLjI1LC43NSwuMTYxOTQsMCwuNDA4ODldLDQxOlsuMjUsLjc1LC4wMzY5NCwwLC40MDg4OV0sNDI6WzAsLjc1LC4xNDkxNywwLC41MTExMV0sNDM6Wy4wNTY2NywuNTYxNjcsLjAzNjk0LDAsLjc2NjY2XSw0NDpbLjE5NDQ0LC4xMDU1NiwwLDAsLjMwNjY3XSw0NTpbMCwuNDMwNTYsLjAyODI2LDAsLjM1Nzc4XSw0NjpbMCwuMTA1NTYsMCwwLC4zMDY2N10sNDc6Wy4yNSwuNzUsLjE2MTk0LDAsLjUxMTExXSw0ODpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw0OTpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw1MDpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw1MTpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw1MjpbLjE5NDQ0LC42NDQ0NCwuMTM1NTYsMCwuNTExMTFdLDUzOlswLC42NDQ0NCwuMTM1NTYsMCwuNTExMTFdLDU0OlswLC42NDQ0NCwuMTM1NTYsMCwuNTExMTFdLDU1OlsuMTk0NDQsLjY0NDQ0LC4xMzU1NiwwLC41MTExMV0sNTY6WzAsLjY0NDQ0LC4xMzU1NiwwLC41MTExMV0sNTc6WzAsLjY0NDQ0LC4xMzU1NiwwLC41MTExMV0sNTg6WzAsLjQzMDU2LC4wNTgyLDAsLjMwNjY3XSw1OTpbLjE5NDQ0LC40MzA1NiwuMDU4MiwwLC4zMDY2N10sNjE6Wy0uMTMzMTMsLjM2Njg3LC4wNjYxNiwwLC43NjY2Nl0sNjM6WzAsLjY5NDQ0LC4xMjI1LDAsLjUxMTExXSw2NDpbMCwuNjk0NDQsLjA5NTk3LDAsLjc2NjY2XSw2NTpbMCwuNjgzMzMsMCwwLC43NDMzM10sNjY6WzAsLjY4MzMzLC4xMDI1NywwLC43MDM4OV0sNjc6WzAsLjY4MzMzLC4xNDUyOCwwLC43MTU1NV0sNjg6WzAsLjY4MzMzLC4wOTQwMywwLC43NTVdLDY5OlswLC42ODMzMywuMTIwMjgsMCwuNjc4MzNdLDcwOlswLC42ODMzMywuMTMzMDUsMCwuNjUyNzddLDcxOlswLC42ODMzMywuMDg3MjIsMCwuNzczNjFdLDcyOlswLC42ODMzMywuMTYzODksMCwuNzQzMzNdLDczOlswLC42ODMzMywuMTU4MDYsMCwuMzg1NTVdLDc0OlswLC42ODMzMywuMTQwMjgsMCwuNTI1XSw3NTpbMCwuNjgzMzMsLjE0NTI4LDAsLjc2ODg4XSw3NjpbMCwuNjgzMzMsMCwwLC42MjcyMl0sNzc6WzAsLjY4MzMzLC4xNjM4OSwwLC44OTY2Nl0sNzg6WzAsLjY4MzMzLC4xNjM4OSwwLC43NDMzM10sNzk6WzAsLjY4MzMzLC4wOTQwMywwLC43NjY2Nl0sODA6WzAsLjY4MzMzLC4xMDI1NywwLC42NzgzM10sODE6Wy4xOTQ0NCwuNjgzMzMsLjA5NDAzLDAsLjc2NjY2XSw4MjpbMCwuNjgzMzMsLjAzODY4LDAsLjcyOTQ0XSw4MzpbMCwuNjgzMzMsLjExOTcyLDAsLjU2MjIyXSw4NDpbMCwuNjgzMzMsLjEzMzA1LDAsLjcxNTU1XSw4NTpbMCwuNjgzMzMsLjE2Mzg5LDAsLjc0MzMzXSw4NjpbMCwuNjgzMzMsLjE4MzYxLDAsLjc0MzMzXSw4NzpbMCwuNjgzMzMsLjE4MzYxLDAsLjk5ODg4XSw4ODpbMCwuNjgzMzMsLjE1ODA2LDAsLjc0MzMzXSw4OTpbMCwuNjgzMzMsLjE5MzgzLDAsLjc0MzMzXSw5MDpbMCwuNjgzMzMsLjE0NTI4LDAsLjYxMzMzXSw5MTpbLjI1LC43NSwuMTg3NSwwLC4zMDY2N10sOTM6Wy4yNSwuNzUsLjEwNTI4LDAsLjMwNjY3XSw5NDpbMCwuNjk0NDQsLjA2NjQ2LDAsLjUxMTExXSw5NTpbLjMxLC4xMjA1NiwuMDkyMDgsMCwuNTExMTFdLDk3OlswLC40MzA1NiwuMDc2NzEsMCwuNTExMTFdLDk4OlswLC42OTQ0NCwuMDYzMTIsMCwuNDZdLDk5OlswLC40MzA1NiwuMDU2NTMsMCwuNDZdLDEwMDpbMCwuNjk0NDQsLjEwMzMzLDAsLjUxMTExXSwxMDE6WzAsLjQzMDU2LC4wNzUxNCwwLC40Nl0sMTAyOlsuMTk0NDQsLjY5NDQ0LC4yMTE5NCwwLC4zMDY2N10sMTAzOlsuMTk0NDQsLjQzMDU2LC4wODg0NywwLC40Nl0sMTA0OlswLC42OTQ0NCwuMDc2NzEsMCwuNTExMTFdLDEwNTpbMCwuNjU1MzYsLjEwMTksMCwuMzA2NjddLDEwNjpbLjE5NDQ0LC42NTUzNiwuMTQ0NjcsMCwuMzA2NjddLDEwNzpbMCwuNjk0NDQsLjEwNzY0LDAsLjQ2XSwxMDg6WzAsLjY5NDQ0LC4xMDMzMywwLC4yNTU1NV0sMTA5OlswLC40MzA1NiwuMDc2NzEsMCwuODE3NzddLDExMDpbMCwuNDMwNTYsLjA3NjcxLDAsLjU2MjIyXSwxMTE6WzAsLjQzMDU2LC4wNjMxMiwwLC41MTExMV0sMTEyOlsuMTk0NDQsLjQzMDU2LC4wNjMxMiwwLC41MTExMV0sMTEzOlsuMTk0NDQsLjQzMDU2LC4wODg0NywwLC40Nl0sMTE0OlswLC40MzA1NiwuMTA3NjQsMCwuNDIxNjZdLDExNTpbMCwuNDMwNTYsLjA4MjA4LDAsLjQwODg5XSwxMTY6WzAsLjYxNTA4LC4wOTQ4NiwwLC4zMzIyMl0sMTE3OlswLC40MzA1NiwuMDc2NzEsMCwuNTM2NjZdLDExODpbMCwuNDMwNTYsLjEwNzY0LDAsLjQ2XSwxMTk6WzAsLjQzMDU2LC4xMDc2NCwwLC42NjQ0NF0sMTIwOlswLC40MzA1NiwuMTIwNDIsMCwuNDYzODldLDEyMTpbLjE5NDQ0LC40MzA1NiwuMDg4NDcsMCwuNDg1NTVdLDEyMjpbMCwuNDMwNTYsLjEyMjkyLDAsLjQwODg5XSwxMjY6Wy4zNSwuMzE3ODYsLjExNTg1LDAsLjUxMTExXSwxNjA6WzAsMCwwLDAsLjI1XSwxNjg6WzAsLjY2Nzg2LC4xMDQ3NCwwLC41MTExMV0sMTc2OlswLC42OTQ0NCwwLDAsLjgzMTI5XSwxODQ6Wy4xNzAxNCwwLDAsMCwuNDZdLDE5ODpbMCwuNjgzMzMsLjEyMDI4LDAsLjg4Mjc3XSwyMTY6Wy4wNDg2MSwuNzMxOTQsLjA5NDAzLDAsLjc2NjY2XSwyMjM6Wy4xOTQ0NCwuNjk0NDQsLjEwNTE0LDAsLjUzNjY2XSwyMzA6WzAsLjQzMDU2LC4wNzUxNCwwLC43MTU1NV0sMjQ4OlsuMDk3MjIsLjUyNzc4LC4wOTE5NCwwLC41MTExMV0sMzM4OlswLC42ODMzMywuMTIwMjgsMCwuOTg0OTldLDMzOTpbMCwuNDMwNTYsLjA3NTE0LDAsLjcxNTU1XSw3MTA6WzAsLjY5NDQ0LC4wNjY0NiwwLC41MTExMV0sNzExOlswLC42Mjg0NywuMDgyOTUsMCwuNTExMTFdLDcxMzpbMCwuNTYxNjcsLjEwMzMzLDAsLjUxMTExXSw3MTQ6WzAsLjY5NDQ0LC4wOTY5NCwwLC41MTExMV0sNzE1OlswLC42OTQ0NCwwLDAsLjUxMTExXSw3Mjg6WzAsLjY5NDQ0LC4xMDgwNiwwLC41MTExMV0sNzI5OlswLC42Njc4NiwuMTE3NTIsMCwuMzA2NjddLDczMDpbMCwuNjk0NDQsMCwwLC44MzEyOV0sNzMyOlswLC42Njc4NiwuMTE1ODUsMCwuNTExMTFdLDczMzpbMCwuNjk0NDQsLjEyMjUsMCwuNTExMTFdLDkxNTpbMCwuNjgzMzMsLjEzMzA1LDAsLjYyNzIyXSw5MTY6WzAsLjY4MzMzLDAsMCwuODE3NzddLDkyMDpbMCwuNjgzMzMsLjA5NDAzLDAsLjc2NjY2XSw5MjM6WzAsLjY4MzMzLDAsMCwuNjkyMjJdLDkyNjpbMCwuNjgzMzMsLjE1Mjk0LDAsLjY2NDQ0XSw5Mjg6WzAsLjY4MzMzLC4xNjM4OSwwLC43NDMzM10sOTMxOlswLC42ODMzMywuMTIwMjgsMCwuNzE1NTVdLDkzMzpbMCwuNjgzMzMsLjExMTExLDAsLjc2NjY2XSw5MzQ6WzAsLjY4MzMzLC4wNTk4NiwwLC43MTU1NV0sOTM2OlswLC42ODMzMywuMTExMTEsMCwuNzY2NjZdLDkzNzpbMCwuNjgzMzMsLjEwMjU3LDAsLjcxNTU1XSw4MjExOlswLC40MzA1NiwuMDkyMDgsMCwuNTExMTFdLDgyMTI6WzAsLjQzMDU2LC4wOTIwOCwwLDEuMDIyMjJdLDgyMTY6WzAsLjY5NDQ0LC4xMjQxNywwLC4zMDY2N10sODIxNzpbMCwuNjk0NDQsLjEyNDE3LDAsLjMwNjY3XSw4MjIwOlswLC42OTQ0NCwuMTY4NSwwLC41MTQ0NF0sODIyMTpbMCwuNjk0NDQsLjA2OTYxLDAsLjUxNDQ0XSw4NDYzOlswLC42ODg4OSwwLDAsLjU0MDI4XX0sIk1haW4tUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sMzM6WzAsLjY5NDQ0LDAsMCwuMjc3NzhdLDM0OlswLC42OTQ0NCwwLDAsLjVdLDM1OlsuMTk0NDQsLjY5NDQ0LDAsMCwuODMzMzRdLDM2OlsuMDU1NTYsLjc1LDAsMCwuNV0sMzc6Wy4wNTU1NiwuNzUsMCwwLC44MzMzNF0sMzg6WzAsLjY5NDQ0LDAsMCwuNzc3NzhdLDM5OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw0MDpbLjI1LC43NSwwLDAsLjM4ODg5XSw0MTpbLjI1LC43NSwwLDAsLjM4ODg5XSw0MjpbMCwuNzUsMCwwLC41XSw0MzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw0NDpbLjE5NDQ0LC4xMDU1NiwwLDAsLjI3Nzc4XSw0NTpbMCwuNDMwNTYsMCwwLC4zMzMzM10sNDY6WzAsLjEwNTU2LDAsMCwuMjc3NzhdLDQ3OlsuMjUsLjc1LDAsMCwuNV0sNDg6WzAsLjY0NDQ0LDAsMCwuNV0sNDk6WzAsLjY0NDQ0LDAsMCwuNV0sNTA6WzAsLjY0NDQ0LDAsMCwuNV0sNTE6WzAsLjY0NDQ0LDAsMCwuNV0sNTI6WzAsLjY0NDQ0LDAsMCwuNV0sNTM6WzAsLjY0NDQ0LDAsMCwuNV0sNTQ6WzAsLjY0NDQ0LDAsMCwuNV0sNTU6WzAsLjY0NDQ0LDAsMCwuNV0sNTY6WzAsLjY0NDQ0LDAsMCwuNV0sNTc6WzAsLjY0NDQ0LDAsMCwuNV0sNTg6WzAsLjQzMDU2LDAsMCwuMjc3NzhdLDU5OlsuMTk0NDQsLjQzMDU2LDAsMCwuMjc3NzhdLDYwOlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw2MTpbLS4xMzMxMywuMzY2ODcsMCwwLC43Nzc3OF0sNjI6Wy4wMzkxLC41MzkxLDAsMCwuNzc3NzhdLDYzOlswLC42OTQ0NCwwLDAsLjQ3MjIyXSw2NDpbMCwuNjk0NDQsMCwwLC43Nzc3OF0sNjU6WzAsLjY4MzMzLDAsMCwuNzVdLDY2OlswLC42ODMzMywwLDAsLjcwODM0XSw2NzpbMCwuNjgzMzMsMCwwLC43MjIyMl0sNjg6WzAsLjY4MzMzLDAsMCwuNzYzODldLDY5OlswLC42ODMzMywwLDAsLjY4MDU2XSw3MDpbMCwuNjgzMzMsMCwwLC42NTI3OF0sNzE6WzAsLjY4MzMzLDAsMCwuNzg0NzJdLDcyOlswLC42ODMzMywwLDAsLjc1XSw3MzpbMCwuNjgzMzMsMCwwLC4zNjExMV0sNzQ6WzAsLjY4MzMzLDAsMCwuNTEzODldLDc1OlswLC42ODMzMywwLDAsLjc3Nzc4XSw3NjpbMCwuNjgzMzMsMCwwLC42MjVdLDc3OlswLC42ODMzMywwLDAsLjkxNjY3XSw3ODpbMCwuNjgzMzMsMCwwLC43NV0sNzk6WzAsLjY4MzMzLDAsMCwuNzc3NzhdLDgwOlswLC42ODMzMywwLDAsLjY4MDU2XSw4MTpbLjE5NDQ0LC42ODMzMywwLDAsLjc3Nzc4XSw4MjpbMCwuNjgzMzMsMCwwLC43MzYxMV0sODM6WzAsLjY4MzMzLDAsMCwuNTU1NTZdLDg0OlswLC42ODMzMywwLDAsLjcyMjIyXSw4NTpbMCwuNjgzMzMsMCwwLC43NV0sODY6WzAsLjY4MzMzLC4wMTM4OSwwLC43NV0sODc6WzAsLjY4MzMzLC4wMTM4OSwwLDEuMDI3NzhdLDg4OlswLC42ODMzMywwLDAsLjc1XSw4OTpbMCwuNjgzMzMsLjAyNSwwLC43NV0sOTA6WzAsLjY4MzMzLDAsMCwuNjExMTFdLDkxOlsuMjUsLjc1LDAsMCwuMjc3NzhdLDkyOlsuMjUsLjc1LDAsMCwuNV0sOTM6Wy4yNSwuNzUsMCwwLC4yNzc3OF0sOTQ6WzAsLjY5NDQ0LDAsMCwuNV0sOTU6Wy4zMSwuMTIwNTYsLjAyNzc4LDAsLjVdLDk3OlswLC40MzA1NiwwLDAsLjVdLDk4OlswLC42OTQ0NCwwLDAsLjU1NTU2XSw5OTpbMCwuNDMwNTYsMCwwLC40NDQ0NV0sMTAwOlswLC42OTQ0NCwwLDAsLjU1NTU2XSwxMDE6WzAsLjQzMDU2LDAsMCwuNDQ0NDVdLDEwMjpbMCwuNjk0NDQsLjA3Nzc4LDAsLjMwNTU2XSwxMDM6Wy4xOTQ0NCwuNDMwNTYsLjAxMzg5LDAsLjVdLDEwNDpbMCwuNjk0NDQsMCwwLC41NTU1Nl0sMTA1OlswLC42Njc4NiwwLDAsLjI3Nzc4XSwxMDY6Wy4xOTQ0NCwuNjY3ODYsMCwwLC4zMDU1Nl0sMTA3OlswLC42OTQ0NCwwLDAsLjUyNzc4XSwxMDg6WzAsLjY5NDQ0LDAsMCwuMjc3NzhdLDEwOTpbMCwuNDMwNTYsMCwwLC44MzMzNF0sMTEwOlswLC40MzA1NiwwLDAsLjU1NTU2XSwxMTE6WzAsLjQzMDU2LDAsMCwuNV0sMTEyOlsuMTk0NDQsLjQzMDU2LDAsMCwuNTU1NTZdLDExMzpbLjE5NDQ0LC40MzA1NiwwLDAsLjUyNzc4XSwxMTQ6WzAsLjQzMDU2LDAsMCwuMzkxNjddLDExNTpbMCwuNDMwNTYsMCwwLC4zOTQ0NV0sMTE2OlswLC42MTUwOCwwLDAsLjM4ODg5XSwxMTc6WzAsLjQzMDU2LDAsMCwuNTU1NTZdLDExODpbMCwuNDMwNTYsLjAxMzg5LDAsLjUyNzc4XSwxMTk6WzAsLjQzMDU2LC4wMTM4OSwwLC43MjIyMl0sMTIwOlswLC40MzA1NiwwLDAsLjUyNzc4XSwxMjE6Wy4xOTQ0NCwuNDMwNTYsLjAxMzg5LDAsLjUyNzc4XSwxMjI6WzAsLjQzMDU2LDAsMCwuNDQ0NDVdLDEyMzpbLjI1LC43NSwwLDAsLjVdLDEyNDpbLjI1LC43NSwwLDAsLjI3Nzc4XSwxMjU6Wy4yNSwuNzUsMCwwLC41XSwxMjY6Wy4zNSwuMzE3ODYsMCwwLC41XSwxNjA6WzAsMCwwLDAsLjI1XSwxNjM6WzAsLjY5NDQ0LDAsMCwuNzY5MDldLDE2NzpbLjE5NDQ0LC42OTQ0NCwwLDAsLjQ0NDQ1XSwxNjg6WzAsLjY2Nzg2LDAsMCwuNV0sMTcyOlswLC40MzA1NiwwLDAsLjY2NjY3XSwxNzY6WzAsLjY5NDQ0LDAsMCwuNzVdLDE3NzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSwxODI6Wy4xOTQ0NCwuNjk0NDQsMCwwLC42MTExMV0sMTg0OlsuMTcwMTQsMCwwLDAsLjQ0NDQ1XSwxOTg6WzAsLjY4MzMzLDAsMCwuOTAyNzhdLDIxNTpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSwyMTY6Wy4wNDg2MSwuNzMxOTQsMCwwLC43Nzc3OF0sMjIzOlswLC42OTQ0NCwwLDAsLjVdLDIzMDpbMCwuNDMwNTYsMCwwLC43MjIyMl0sMjQ3OlsuMDgzMzMsLjU4MzMzLDAsMCwuNzc3NzhdLDI0ODpbLjA5NzIyLC41Mjc3OCwwLDAsLjVdLDMwNTpbMCwuNDMwNTYsMCwwLC4yNzc3OF0sMzM4OlswLC42ODMzMywwLDAsMS4wMTM4OV0sMzM5OlswLC40MzA1NiwwLDAsLjc3Nzc4XSw1Njc6Wy4xOTQ0NCwuNDMwNTYsMCwwLC4zMDU1Nl0sNzEwOlswLC42OTQ0NCwwLDAsLjVdLDcxMTpbMCwuNjI4NDcsMCwwLC41XSw3MTM6WzAsLjU2Nzc4LDAsMCwuNV0sNzE0OlswLC42OTQ0NCwwLDAsLjVdLDcxNTpbMCwuNjk0NDQsMCwwLC41XSw3Mjg6WzAsLjY5NDQ0LDAsMCwuNV0sNzI5OlswLC42Njc4NiwwLDAsLjI3Nzc4XSw3MzA6WzAsLjY5NDQ0LDAsMCwuNzVdLDczMjpbMCwuNjY3ODYsMCwwLC41XSw3MzM6WzAsLjY5NDQ0LDAsMCwuNV0sOTE1OlswLC42ODMzMywwLDAsLjYyNV0sOTE2OlswLC42ODMzMywwLDAsLjgzMzM0XSw5MjA6WzAsLjY4MzMzLDAsMCwuNzc3NzhdLDkyMzpbMCwuNjgzMzMsMCwwLC42OTQ0NV0sOTI2OlswLC42ODMzMywwLDAsLjY2NjY3XSw5Mjg6WzAsLjY4MzMzLDAsMCwuNzVdLDkzMTpbMCwuNjgzMzMsMCwwLC43MjIyMl0sOTMzOlswLC42ODMzMywwLDAsLjc3Nzc4XSw5MzQ6WzAsLjY4MzMzLDAsMCwuNzIyMjJdLDkzNjpbMCwuNjgzMzMsMCwwLC43Nzc3OF0sOTM3OlswLC42ODMzMywwLDAsLjcyMjIyXSw4MjExOlswLC40MzA1NiwuMDI3NzgsMCwuNV0sODIxMjpbMCwuNDMwNTYsLjAyNzc4LDAsMV0sODIxNjpbMCwuNjk0NDQsMCwwLC4yNzc3OF0sODIxNzpbMCwuNjk0NDQsMCwwLC4yNzc3OF0sODIyMDpbMCwuNjk0NDQsMCwwLC41XSw4MjIxOlswLC42OTQ0NCwwLDAsLjVdLDgyMjQ6Wy4xOTQ0NCwuNjk0NDQsMCwwLC40NDQ0NV0sODIyNTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjQ0NDQ1XSw4MjMwOlswLC4xMjMsMCwwLDEuMTcyXSw4MjQyOlswLC41NTU1NiwwLDAsLjI3NV0sODQwNzpbMCwuNzE0NDQsLjE1MzgyLDAsLjVdLDg0NjM6WzAsLjY4ODg5LDAsMCwuNTQwMjhdLDg0NjU6WzAsLjY5NDQ0LDAsMCwuNzIyMjJdLDg0Njc6WzAsLjY5NDQ0LDAsLjExMTExLC40MTY2N10sODQ3MjpbLjE5NDQ0LC40MzA1NiwwLC4xMTExMSwuNjM2NDZdLDg0NzY6WzAsLjY5NDQ0LDAsMCwuNzIyMjJdLDg1MDE6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDg1OTI6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NTkzOlsuMTk0NDQsLjY5NDQ0LDAsMCwuNV0sODU5NDpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg1OTU6Wy4xOTQ0NCwuNjk0NDQsMCwwLC41XSw4NTk2OlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODU5NzpbLjI1LC43NSwwLDAsLjVdLDg1OTg6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDg1OTk6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDg2MDA6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDg2MDE6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDg2MTQ6Wy4wMTEsLjUxMSwwLDAsMV0sODYxNzpbLjAxMSwuNTExLDAsMCwxLjEyNl0sODYxODpbLjAxMSwuNTExLDAsMCwxLjEyNl0sODYzNjpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2Mzc6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NjQwOlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODY0MTpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NTI6Wy4wMTEsLjY3MSwwLDAsMV0sODY1NjpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NTc6Wy4xOTQ0NCwuNjk0NDQsMCwwLC42MTExMV0sODY1ODpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NTk6Wy4xOTQ0NCwuNjk0NDQsMCwwLC42MTExMV0sODY2MDpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NjE6Wy4yNSwuNzUsMCwwLC42MTExMV0sODcwNDpbMCwuNjk0NDQsMCwwLC41NTU1Nl0sODcwNjpbMCwuNjk0NDQsLjA1NTU2LC4wODMzNCwuNTMwOV0sODcwNzpbMCwuNjk0NDQsMCwwLC41NTU1Nl0sODcwOTpbLjA1NTU2LC43NSwwLDAsLjVdLDg3MTE6WzAsLjY4MzMzLDAsMCwuODMzMzRdLDg3MTI6Wy4wMzkxLC41MzkxLDAsMCwuNjY2NjddLDg3MTU6Wy4wMzkxLC41MzkxLDAsMCwuNjY2NjddLDg3MjI6Wy4wODMzMywuNTgzMzMsMCwwLC43Nzc3OF0sODcyMzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw4NzI1OlsuMjUsLjc1LDAsMCwuNV0sODcyNjpbLjI1LC43NSwwLDAsLjVdLDg3Mjc6Wy0uMDM0NzIsLjQ2NTI4LDAsMCwuNV0sODcyODpbLS4wNTU1NSwuNDQ0NDUsMCwwLC41XSw4NzI5OlstLjA1NTU1LC40NDQ0NSwwLDAsLjVdLDg3MzA6Wy4yLC44LDAsMCwuODMzMzRdLDg3MzM6WzAsLjQzMDU2LDAsMCwuNzc3NzhdLDg3MzQ6WzAsLjQzMDU2LDAsMCwxXSw4NzM2OlswLC42OTIyNCwwLDAsLjcyMjIyXSw4NzM5OlsuMjUsLjc1LDAsMCwuMjc3NzhdLDg3NDE6Wy4yNSwuNzUsMCwwLC41XSw4NzQzOlswLC41NTU1NiwwLDAsLjY2NjY3XSw4NzQ0OlswLC41NTU1NiwwLDAsLjY2NjY3XSw4NzQ1OlswLC41NTU1NiwwLDAsLjY2NjY3XSw4NzQ2OlswLC41NTU1NiwwLDAsLjY2NjY3XSw4NzQ3OlsuMTk0NDQsLjY5NDQ0LC4xMTExMSwwLC40MTY2N10sODc2NDpbLS4xMzMxMywuMzY2ODcsMCwwLC43Nzc3OF0sODc2ODpbLjE5NDQ0LC42OTQ0NCwwLDAsLjI3Nzc4XSw4NzcxOlstLjAzNjI1LC40NjM3NSwwLDAsLjc3Nzc4XSw4NzczOlstLjAyMiwuNTg5LDAsMCwuNzc4XSw4Nzc2OlstLjAxNjg4LC40ODMxMiwwLDAsLjc3Nzc4XSw4NzgxOlstLjAzNjI1LC40NjM3NSwwLDAsLjc3Nzc4XSw4Nzg0OlstLjEzMywuNjczLDAsMCwuNzc4XSw4ODAxOlstLjAzNjI1LC40NjM3NSwwLDAsLjc3Nzc4XSw4ODA0OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4MDU6Wy4xMzU5NywuNjM1OTcsMCwwLC43Nzc3OF0sODgxMDpbLjAzOTEsLjUzOTEsMCwwLDFdLDg4MTE6Wy4wMzkxLC41MzkxLDAsMCwxXSw4ODI2OlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw4ODI3OlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw4ODM0OlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw4ODM1OlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw4ODM4OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4Mzk6Wy4xMzU5NywuNjM1OTcsMCwwLC43Nzc3OF0sODg0NjpbMCwuNTU1NTYsMCwwLC42NjY2N10sODg0OTpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSw4ODUwOlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4NTE6WzAsLjU1NTU2LDAsMCwuNjY2NjddLDg4NTI6WzAsLjU1NTU2LDAsMCwuNjY2NjddLDg4NTM6Wy4wODMzMywuNTgzMzMsMCwwLC43Nzc3OF0sODg1NDpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw4ODU1OlsuMDgzMzMsLjU4MzMzLDAsMCwuNzc3NzhdLDg4NTY6Wy4wODMzMywuNTgzMzMsMCwwLC43Nzc3OF0sODg1NzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw4ODY2OlswLC42OTQ0NCwwLDAsLjYxMTExXSw4ODY3OlswLC42OTQ0NCwwLDAsLjYxMTExXSw4ODY4OlswLC42OTQ0NCwwLDAsLjc3Nzc4XSw4ODY5OlswLC42OTQ0NCwwLDAsLjc3Nzc4XSw4ODcyOlsuMjQ5LC43NSwwLDAsLjg2N10sODkwMDpbLS4wNTU1NSwuNDQ0NDUsMCwwLC41XSw4OTAxOlstLjA1NTU1LC40NDQ0NSwwLDAsLjI3Nzc4XSw4OTAyOlstLjAzNDcyLC40NjUyOCwwLDAsLjVdLDg5MDQ6Wy4wMDUsLjUwNSwwLDAsLjldLDg5NDI6Wy4wMywuOTAzLDAsMCwuMjc4XSw4OTQzOlstLjE5LC4zMTMsMCwwLDEuMTcyXSw4OTQ1OlstLjEsLjgyMywwLDAsMS4yODJdLDg5Njg6Wy4yNSwuNzUsMCwwLC40NDQ0NV0sODk2OTpbLjI1LC43NSwwLDAsLjQ0NDQ1XSw4OTcwOlsuMjUsLjc1LDAsMCwuNDQ0NDVdLDg5NzE6Wy4yNSwuNzUsMCwwLC40NDQ0NV0sODk5NDpbLS4xNDIzNiwuMzU3NjQsMCwwLDFdLDg5OTU6Wy0uMTQyMzYsLjM1NzY0LDAsMCwxXSw5MTM2OlsuMjQ0LC43NDQsMCwwLC40MTJdLDkxMzc6Wy4yNDQsLjc0NSwwLDAsLjQxMl0sOTY1MTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjg4ODg5XSw5NjU3OlstLjAzNDcyLC40NjUyOCwwLDAsLjVdLDk2NjE6Wy4xOTQ0NCwuNjk0NDQsMCwwLC44ODg4OV0sOTY2NzpbLS4wMzQ3MiwuNDY1MjgsMCwwLC41XSw5NzExOlsuMTk0NDQsLjY5NDQ0LDAsMCwxXSw5ODI0OlsuMTI5NjMsLjY5NDQ0LDAsMCwuNzc3NzhdLDk4MjU6Wy4xMjk2MywuNjk0NDQsMCwwLC43Nzc3OF0sOTgyNjpbLjEyOTYzLC42OTQ0NCwwLDAsLjc3Nzc4XSw5ODI3OlsuMTI5NjMsLjY5NDQ0LDAsMCwuNzc3NzhdLDk4Mzc6WzAsLjc1LDAsMCwuMzg4ODldLDk4Mzg6Wy4xOTQ0NCwuNjk0NDQsMCwwLC4zODg4OV0sOTgzOTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjM4ODg5XSwxMDIxNjpbLjI1LC43NSwwLDAsLjM4ODg5XSwxMDIxNzpbLjI1LC43NSwwLDAsLjM4ODg5XSwxMDIyMjpbLjI0NCwuNzQ0LDAsMCwuNDEyXSwxMDIyMzpbLjI0NCwuNzQ1LDAsMCwuNDEyXSwxMDIyOTpbLjAxMSwuNTExLDAsMCwxLjYwOV0sMTAyMzA6Wy4wMTEsLjUxMSwwLDAsMS42MzhdLDEwMjMxOlsuMDExLC41MTEsMCwwLDEuODU5XSwxMDIzMjpbLjAyNCwuNTI1LDAsMCwxLjYwOV0sMTAyMzM6Wy4wMjQsLjUyNSwwLDAsMS42MzhdLDEwMjM0OlsuMDI0LC41MjUsMCwwLDEuODU4XSwxMDIzNjpbLjAxMSwuNTExLDAsMCwxLjYzOF0sMTA4MTU6WzAsLjY4MzMzLDAsMCwuNzVdLDEwOTI3OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDEwOTI4OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDU3Mzc2OlsuMTk0NDQsLjY5NDQ0LDAsMCwwXX0sIk1hdGgtQm9sZEl0YWxpYyI6ezMyOlswLDAsMCwwLC4yNV0sNDg6WzAsLjQ0NDQ0LDAsMCwuNTc1XSw0OTpbMCwuNDQ0NDQsMCwwLC41NzVdLDUwOlswLC40NDQ0NCwwLDAsLjU3NV0sNTE6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC41NzVdLDUyOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNTc1XSw1MzpbLjE5NDQ0LC40NDQ0NCwwLDAsLjU3NV0sNTQ6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1NTpbLjE5NDQ0LC40NDQ0NCwwLDAsLjU3NV0sNTY6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1NzpbLjE5NDQ0LC40NDQ0NCwwLDAsLjU3NV0sNjU6WzAsLjY4NjExLDAsMCwuODY5NDRdLDY2OlswLC42ODYxMSwuMDQ4MzUsMCwuODY2NF0sNjc6WzAsLjY4NjExLC4wNjk3OSwwLC44MTY5NF0sNjg6WzAsLjY4NjExLC4wMzE5NCwwLC45MzgxMl0sNjk6WzAsLjY4NjExLC4wNTQ1MSwwLC44MTAwN10sNzA6WzAsLjY4NjExLC4xNTk3MiwwLC42ODg4OV0sNzE6WzAsLjY4NjExLDAsMCwuODg2NzNdLDcyOlswLC42ODYxMSwuMDgyMjksMCwuOTgyMjldLDczOlswLC42ODYxMSwuMDc3NzgsMCwuNTExMTFdLDc0OlswLC42ODYxMSwuMTAwNjksMCwuNjMxMjVdLDc1OlswLC42ODYxMSwuMDY5NzksMCwuOTcxMThdLDc2OlswLC42ODYxMSwwLDAsLjc1NTU1XSw3NzpbMCwuNjg2MTEsLjExNDI0LDAsMS4xNDIwMV0sNzg6WzAsLjY4NjExLC4xMTQyNCwwLC45NTAzNF0sNzk6WzAsLjY4NjExLC4wMzE5NCwwLC44MzY2Nl0sODA6WzAsLjY4NjExLC4xNTk3MiwwLC43MjMwOV0sODE6Wy4xOTQ0NCwuNjg2MTEsMCwwLC44Njg2MV0sODI6WzAsLjY4NjExLC4wMDQyMSwwLC44NzIzNV0sODM6WzAsLjY4NjExLC4wNTM4MiwwLC42OTI3MV0sODQ6WzAsLjY4NjExLC4xNTk3MiwwLC42MzY2M10sODU6WzAsLjY4NjExLC4xMTQyNCwwLC44MDAyN10sODY6WzAsLjY4NjExLC4yNTU1NSwwLC42Nzc3OF0sODc6WzAsLjY4NjExLC4xNTk3MiwwLDEuMDkzMDVdLDg4OlswLC42ODYxMSwuMDc3NzgsMCwuOTQ3MjJdLDg5OlswLC42ODYxMSwuMjU1NTUsMCwuNjc0NThdLDkwOlswLC42ODYxMSwuMDY5NzksMCwuNzcyNTddLDk3OlswLC40NDQ0NCwwLDAsLjYzMjg3XSw5ODpbMCwuNjk0NDQsMCwwLC41MjA4M10sOTk6WzAsLjQ0NDQ0LDAsMCwuNTEzNDJdLDEwMDpbMCwuNjk0NDQsMCwwLC42MDk3Ml0sMTAxOlswLC40NDQ0NCwwLDAsLjU1MzYxXSwxMDI6Wy4xOTQ0NCwuNjk0NDQsLjExMDQyLDAsLjU2ODA2XSwxMDM6Wy4xOTQ0NCwuNDQ0NDQsLjAzNzA0LDAsLjU0NDldLDEwNDpbMCwuNjk0NDQsMCwwLC42Njc1OV0sMTA1OlswLC42OTMyNiwwLDAsLjQwNDhdLDEwNjpbLjE5NDQ0LC42OTMyNiwuMDYyMiwwLC40NzA4M10sMTA3OlswLC42OTQ0NCwuMDE4NTIsMCwuNjAzN10sMTA4OlswLC42OTQ0NCwuMDA4OCwwLC4zNDgxNV0sMTA5OlswLC40NDQ0NCwwLDAsMS4wMzI0XSwxMTA6WzAsLjQ0NDQ0LDAsMCwuNzEyOTZdLDExMTpbMCwuNDQ0NDQsMCwwLC41ODQ3Ml0sMTEyOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNjAwOTJdLDExMzpbLjE5NDQ0LC40NDQ0NCwuMDM3MDQsMCwuNTQyMTNdLDExNDpbMCwuNDQ0NDQsLjAzMTk0LDAsLjUyODddLDExNTpbMCwuNDQ0NDQsMCwwLC41MzEyNV0sMTE2OlswLC42MzQ5MiwwLDAsLjQxNTI4XSwxMTc6WzAsLjQ0NDQ0LDAsMCwuNjgxMDJdLDExODpbMCwuNDQ0NDQsLjAzNzA0LDAsLjU2NjY2XSwxMTk6WzAsLjQ0NDQ0LC4wMjc3OCwwLC44MzE0OF0sMTIwOlswLC40NDQ0NCwwLDAsLjY1OTAzXSwxMjE6Wy4xOTQ0NCwuNDQ0NDQsLjAzNzA0LDAsLjU5MDI4XSwxMjI6WzAsLjQ0NDQ0LC4wNDIxMywwLC41NTUwOV0sMTYwOlswLDAsMCwwLC4yNV0sOTE1OlswLC42ODYxMSwuMTU5NzIsMCwuNjU2OTRdLDkxNjpbMCwuNjg2MTEsMCwwLC45NTgzM10sOTIwOlswLC42ODYxMSwuMDMxOTQsMCwuODY3MjJdLDkyMzpbMCwuNjg2MTEsMCwwLC44MDU1NV0sOTI2OlswLC42ODYxMSwuMDc0NTgsMCwuODQxMjVdLDkyODpbMCwuNjg2MTEsLjA4MjI5LDAsLjk4MjI5XSw5MzE6WzAsLjY4NjExLC4wNTQ1MSwwLC44ODUwN10sOTMzOlswLC42ODYxMSwuMTU5NzIsMCwuNjcwODNdLDkzNDpbMCwuNjg2MTEsMCwwLC43NjY2Nl0sOTM2OlswLC42ODYxMSwuMTE2NTMsMCwuNzE0MDJdLDkzNzpbMCwuNjg2MTEsLjA0ODM1LDAsLjg3ODldLDk0NTpbMCwuNDQ0NDQsMCwwLC43NjA2NF0sOTQ2OlsuMTk0NDQsLjY5NDQ0LC4wMzQwMywwLC42NTk3Ml0sOTQ3OlsuMTk0NDQsLjQ0NDQ0LC4wNjM4OSwwLC41OTAwM10sOTQ4OlswLC42OTQ0NCwuMDM4MTksMCwuNTIyMjJdLDk0OTpbMCwuNDQ0NDQsMCwwLC41Mjg4Ml0sOTUwOlsuMTk0NDQsLjY5NDQ0LC4wNjIxNSwwLC41MDgzM10sOTUxOlsuMTk0NDQsLjQ0NDQ0LC4wMzcwNCwwLC42XSw5NTI6WzAsLjY5NDQ0LC4wMzE5NCwwLC41NjE4XSw5NTM6WzAsLjQ0NDQ0LDAsMCwuNDEyMDRdLDk1NDpbMCwuNDQ0NDQsMCwwLC42Njc1OV0sOTU1OlswLC42OTQ0NCwwLDAsLjY3MDgzXSw5NTY6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC43MDc4N10sOTU3OlswLC40NDQ0NCwuMDY4OTgsMCwuNTc2ODVdLDk1ODpbLjE5NDQ0LC42OTQ0NCwuMDMwMjEsMCwuNTA4MzNdLDk1OTpbMCwuNDQ0NDQsMCwwLC41ODQ3Ml0sOTYwOlswLC40NDQ0NCwuMDM3MDQsMCwuNjgyNDFdLDk2MTpbLjE5NDQ0LC40NDQ0NCwwLDAsLjYxMThdLDk2MjpbLjA5NzIyLC40NDQ0NCwuMDc5MTcsMCwuNDIzNjFdLDk2MzpbMCwuNDQ0NDQsLjAzNzA0LDAsLjY4NTg4XSw5NjQ6WzAsLjQ0NDQ0LC4xMzQ3MiwwLC41MjA4M10sOTY1OlswLC40NDQ0NCwuMDM3MDQsMCwuNjMwNTVdLDk2NjpbLjE5NDQ0LC40NDQ0NCwwLDAsLjc0NzIyXSw5Njc6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC43MTgwNV0sOTY4OlsuMTk0NDQsLjY5NDQ0LC4wMzcwNCwwLC43NTgzM10sOTY5OlswLC40NDQ0NCwuMDM3MDQsMCwuNzE3ODJdLDk3NzpbMCwuNjk0NDQsMCwwLC42OTE1NV0sOTgxOlsuMTk0NDQsLjY5NDQ0LDAsMCwuNzEyNV0sOTgyOlswLC40NDQ0NCwuMDMxOTQsMCwuOTc1XSwxMDA5OlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNjExOF0sMTAxMzpbMCwuNDQ0NDQsMCwwLC40ODMzM10sNTc2NDk6WzAsLjQ0NDQ0LDAsMCwuMzkzNTJdLDU3OTExOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNDM4ODldfSwiTWF0aC1JdGFsaWMiOnszMjpbMCwwLDAsMCwuMjVdLDQ4OlswLC40MzA1NiwwLDAsLjVdLDQ5OlswLC40MzA1NiwwLDAsLjVdLDUwOlswLC40MzA1NiwwLDAsLjVdLDUxOlsuMTk0NDQsLjQzMDU2LDAsMCwuNV0sNTI6Wy4xOTQ0NCwuNDMwNTYsMCwwLC41XSw1MzpbLjE5NDQ0LC40MzA1NiwwLDAsLjVdLDU0OlswLC42NDQ0NCwwLDAsLjVdLDU1OlsuMTk0NDQsLjQzMDU2LDAsMCwuNV0sNTY6WzAsLjY0NDQ0LDAsMCwuNV0sNTc6Wy4xOTQ0NCwuNDMwNTYsMCwwLC41XSw2NTpbMCwuNjgzMzMsMCwuMTM4ODksLjc1XSw2NjpbMCwuNjgzMzMsLjA1MDE3LC4wODMzNCwuNzU4NTFdLDY3OlswLC42ODMzMywuMDcxNTMsLjA4MzM0LC43MTQ3Ml0sNjg6WzAsLjY4MzMzLC4wMjc3OCwuMDU1NTYsLjgyNzkyXSw2OTpbMCwuNjgzMzMsLjA1NzY0LC4wODMzNCwuNzM4Ml0sNzA6WzAsLjY4MzMzLC4xMzg4OSwuMDgzMzQsLjY0MzA2XSw3MTpbMCwuNjgzMzMsMCwuMDgzMzQsLjc4NjI1XSw3MjpbMCwuNjgzMzMsLjA4MTI1LC4wNTU1NiwuODMxMjVdLDczOlswLC42ODMzMywuMDc4NDcsLjExMTExLC40Mzk1OF0sNzQ6WzAsLjY4MzMzLC4wOTYxOCwuMTY2NjcsLjU1NDUxXSw3NTpbMCwuNjgzMzMsLjA3MTUzLC4wNTU1NiwuODQ5MzFdLDc2OlswLC42ODMzMywwLC4wMjc3OCwuNjgwNTZdLDc3OlswLC42ODMzMywuMTA5MDMsLjA4MzM0LC45NzAxNF0sNzg6WzAsLjY4MzMzLC4xMDkwMywuMDgzMzQsLjgwMzQ3XSw3OTpbMCwuNjgzMzMsLjAyNzc4LC4wODMzNCwuNzYyNzhdLDgwOlswLC42ODMzMywuMTM4ODksLjA4MzM0LC42NDIwMV0sODE6Wy4xOTQ0NCwuNjgzMzMsMCwuMDgzMzQsLjc5MDU2XSw4MjpbMCwuNjgzMzMsLjAwNzczLC4wODMzNCwuNzU5MjldLDgzOlswLC42ODMzMywuMDU3NjQsLjA4MzM0LC42MTMyXSw4NDpbMCwuNjgzMzMsLjEzODg5LC4wODMzNCwuNTg0MzhdLDg1OlswLC42ODMzMywuMTA5MDMsLjAyNzc4LC42ODI3OF0sODY6WzAsLjY4MzMzLC4yMjIyMiwwLC41ODMzM10sODc6WzAsLjY4MzMzLC4xMzg4OSwwLC45NDQ0NV0sODg6WzAsLjY4MzMzLC4wNzg0NywuMDgzMzQsLjgyODQ3XSw4OTpbMCwuNjgzMzMsLjIyMjIyLDAsLjU4MDU2XSw5MDpbMCwuNjgzMzMsLjA3MTUzLC4wODMzNCwuNjgyNjRdLDk3OlswLC40MzA1NiwwLDAsLjUyODU5XSw5ODpbMCwuNjk0NDQsMCwwLC40MjkxN10sOTk6WzAsLjQzMDU2LDAsLjA1NTU2LC40MzI3Nl0sMTAwOlswLC42OTQ0NCwwLC4xNjY2NywuNTIwNDldLDEwMTpbMCwuNDMwNTYsMCwuMDU1NTYsLjQ2NTYzXSwxMDI6Wy4xOTQ0NCwuNjk0NDQsLjEwNzY0LC4xNjY2NywuNDg5NTldLDEwMzpbLjE5NDQ0LC40MzA1NiwuMDM1ODgsLjAyNzc4LC40NzY5N10sMTA0OlswLC42OTQ0NCwwLDAsLjU3NjE2XSwxMDU6WzAsLjY1OTUyLDAsMCwuMzQ0NTFdLDEwNjpbLjE5NDQ0LC42NTk1MiwuMDU3MjQsMCwuNDExODFdLDEwNzpbMCwuNjk0NDQsLjAzMTQ4LDAsLjUyMDZdLDEwODpbMCwuNjk0NDQsLjAxOTY4LC4wODMzNCwuMjk4MzhdLDEwOTpbMCwuNDMwNTYsMCwwLC44NzgwMV0sMTEwOlswLC40MzA1NiwwLDAsLjYwMDIzXSwxMTE6WzAsLjQzMDU2LDAsLjA1NTU2LC40ODQ3Ml0sMTEyOlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC41MDMxM10sMTEzOlsuMTk0NDQsLjQzMDU2LC4wMzU4OCwuMDgzMzQsLjQ0NjQxXSwxMTQ6WzAsLjQzMDU2LC4wMjc3OCwuMDU1NTYsLjQ1MTE2XSwxMTU6WzAsLjQzMDU2LDAsLjA1NTU2LC40Njg3NV0sMTE2OlswLC42MTUwOCwwLC4wODMzNCwuMzYxMTFdLDExNzpbMCwuNDMwNTYsMCwuMDI3NzgsLjU3MjQ2XSwxMTg6WzAsLjQzMDU2LC4wMzU4OCwuMDI3NzgsLjQ4NDcyXSwxMTk6WzAsLjQzMDU2LC4wMjY5MSwuMDgzMzQsLjcxNTkyXSwxMjA6WzAsLjQzMDU2LDAsLjAyNzc4LC41NzE1M10sMTIxOlsuMTk0NDQsLjQzMDU2LC4wMzU4OCwuMDU1NTYsLjQ5MDI4XSwxMjI6WzAsLjQzMDU2LC4wNDM5OCwuMDU1NTYsLjQ2NTA1XSwxNjA6WzAsMCwwLDAsLjI1XSw5MTU6WzAsLjY4MzMzLC4xMzg4OSwuMDgzMzQsLjYxNTI4XSw5MTY6WzAsLjY4MzMzLDAsLjE2NjY3LC44MzMzNF0sOTIwOlswLC42ODMzMywuMDI3NzgsLjA4MzM0LC43NjI3OF0sOTIzOlswLC42ODMzMywwLC4xNjY2NywuNjk0NDVdLDkyNjpbMCwuNjgzMzMsLjA3NTY5LC4wODMzNCwuNzQyMzZdLDkyODpbMCwuNjgzMzMsLjA4MTI1LC4wNTU1NiwuODMxMjVdLDkzMTpbMCwuNjgzMzMsLjA1NzY0LC4wODMzNCwuNzc5ODZdLDkzMzpbMCwuNjgzMzMsLjEzODg5LC4wNTU1NiwuNTgzMzNdLDkzNDpbMCwuNjgzMzMsMCwuMDgzMzQsLjY2NjY3XSw5MzY6WzAsLjY4MzMzLC4xMSwuMDU1NTYsLjYxMjIyXSw5Mzc6WzAsLjY4MzMzLC4wNTAxNywuMDgzMzQsLjc3MjRdLDk0NTpbMCwuNDMwNTYsLjAwMzcsLjAyNzc4LC42Mzk3XSw5NDY6Wy4xOTQ0NCwuNjk0NDQsLjA1Mjc4LC4wODMzNCwuNTY1NjNdLDk0NzpbLjE5NDQ0LC40MzA1NiwuMDU1NTYsMCwuNTE3NzNdLDk0ODpbMCwuNjk0NDQsLjAzNzg1LC4wNTU1NiwuNDQ0NDRdLDk0OTpbMCwuNDMwNTYsMCwuMDgzMzQsLjQ2NjMyXSw5NTA6Wy4xOTQ0NCwuNjk0NDQsLjA3Mzc4LC4wODMzNCwuNDM3NV0sOTUxOlsuMTk0NDQsLjQzMDU2LC4wMzU4OCwuMDU1NTYsLjQ5NjUzXSw5NTI6WzAsLjY5NDQ0LC4wMjc3OCwuMDgzMzQsLjQ2OTQ0XSw5NTM6WzAsLjQzMDU2LDAsLjA1NTU2LC4zNTM5NF0sOTU0OlswLC40MzA1NiwwLDAsLjU3NjE2XSw5NTU6WzAsLjY5NDQ0LDAsMCwuNTgzMzRdLDk1NjpbLjE5NDQ0LC40MzA1NiwwLC4wMjc3OCwuNjAyNTVdLDk1NzpbMCwuNDMwNTYsLjA2MzY2LC4wMjc3OCwuNDkzOThdLDk1ODpbLjE5NDQ0LC42OTQ0NCwuMDQ2MDEsLjExMTExLC40Mzc1XSw5NTk6WzAsLjQzMDU2LDAsLjA1NTU2LC40ODQ3Ml0sOTYwOlswLC40MzA1NiwuMDM1ODgsMCwuNTcwMDNdLDk2MTpbLjE5NDQ0LC40MzA1NiwwLC4wODMzNCwuNTE3MDJdLDk2MjpbLjA5NzIyLC40MzA1NiwuMDc5ODYsLjA4MzM0LC4zNjI4NV0sOTYzOlswLC40MzA1NiwuMDM1ODgsMCwuNTcxNDFdLDk2NDpbMCwuNDMwNTYsLjExMzIsLjAyNzc4LC40MzcxNV0sOTY1OlswLC40MzA1NiwuMDM1ODgsLjAyNzc4LC41NDAyOF0sOTY2OlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC42NTQxN10sOTY3OlsuMTk0NDQsLjQzMDU2LDAsLjA1NTU2LC42MjU2OV0sOTY4OlsuMTk0NDQsLjY5NDQ0LC4wMzU4OCwuMTExMTEsLjY1MTM5XSw5Njk6WzAsLjQzMDU2LC4wMzU4OCwwLC42MjI0NV0sOTc3OlswLC42OTQ0NCwwLC4wODMzNCwuNTkxNDRdLDk4MTpbLjE5NDQ0LC42OTQ0NCwwLC4wODMzNCwuNTk1ODNdLDk4MjpbMCwuNDMwNTYsLjAyNzc4LDAsLjgyODEzXSwxMDA5OlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC41MTcwMl0sMTAxMzpbMCwuNDMwNTYsMCwuMDU1NTYsLjQwNTldLDU3NjQ5OlswLC40MzA1NiwwLC4wMjc3OCwuMzIyNDZdLDU3OTExOlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC4zODQwM119LCJTYW5zU2VyaWYtQm9sZCI6ezMyOlswLDAsMCwwLC4yNV0sMzM6WzAsLjY5NDQ0LDAsMCwuMzY2NjddLDM0OlswLC42OTQ0NCwwLDAsLjU1ODM0XSwzNTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjkxNjY3XSwzNjpbLjA1NTU2LC43NSwwLDAsLjU1XSwzNzpbLjA1NTU2LC43NSwwLDAsMS4wMjkxMl0sMzg6WzAsLjY5NDQ0LDAsMCwuODMwNTZdLDM5OlswLC42OTQ0NCwwLDAsLjMwNTU2XSw0MDpbLjI1LC43NSwwLDAsLjQyNzc4XSw0MTpbLjI1LC43NSwwLDAsLjQyNzc4XSw0MjpbMCwuNzUsMCwwLC41NV0sNDM6Wy4xMTY2NywuNjE2NjcsMCwwLC44NTU1Nl0sNDQ6Wy4xMDU1NiwuMTMwNTYsMCwwLC4zMDU1Nl0sNDU6WzAsLjQ1ODMzLDAsMCwuMzY2NjddLDQ2OlswLC4xMzA1NiwwLDAsLjMwNTU2XSw0NzpbLjI1LC43NSwwLDAsLjU1XSw0ODpbMCwuNjk0NDQsMCwwLC41NV0sNDk6WzAsLjY5NDQ0LDAsMCwuNTVdLDUwOlswLC42OTQ0NCwwLDAsLjU1XSw1MTpbMCwuNjk0NDQsMCwwLC41NV0sNTI6WzAsLjY5NDQ0LDAsMCwuNTVdLDUzOlswLC42OTQ0NCwwLDAsLjU1XSw1NDpbMCwuNjk0NDQsMCwwLC41NV0sNTU6WzAsLjY5NDQ0LDAsMCwuNTVdLDU2OlswLC42OTQ0NCwwLDAsLjU1XSw1NzpbMCwuNjk0NDQsMCwwLC41NV0sNTg6WzAsLjQ1ODMzLDAsMCwuMzA1NTZdLDU5OlsuMTA1NTYsLjQ1ODMzLDAsMCwuMzA1NTZdLDYxOlstLjA5Mzc1LC40MDYyNSwwLDAsLjg1NTU2XSw2MzpbMCwuNjk0NDQsMCwwLC41MTk0NV0sNjQ6WzAsLjY5NDQ0LDAsMCwuNzMzMzRdLDY1OlswLC42OTQ0NCwwLDAsLjczMzM0XSw2NjpbMCwuNjk0NDQsMCwwLC43MzMzNF0sNjc6WzAsLjY5NDQ0LDAsMCwuNzAyNzhdLDY4OlswLC42OTQ0NCwwLDAsLjc5NDQ1XSw2OTpbMCwuNjk0NDQsMCwwLC42NDE2N10sNzA6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDcxOlswLC42OTQ0NCwwLDAsLjczMzM0XSw3MjpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sNzM6WzAsLjY5NDQ0LDAsMCwuMzMwNTZdLDc0OlswLC42OTQ0NCwwLDAsLjUxOTQ1XSw3NTpbMCwuNjk0NDQsMCwwLC43NjM4OV0sNzY6WzAsLjY5NDQ0LDAsMCwuNTgwNTZdLDc3OlswLC42OTQ0NCwwLDAsLjk3Nzc4XSw3ODpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sNzk6WzAsLjY5NDQ0LDAsMCwuNzk0NDVdLDgwOlswLC42OTQ0NCwwLDAsLjcwMjc4XSw4MTpbLjEwNTU2LC42OTQ0NCwwLDAsLjc5NDQ1XSw4MjpbMCwuNjk0NDQsMCwwLC43MDI3OF0sODM6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDg0OlswLC42OTQ0NCwwLDAsLjczMzM0XSw4NTpbMCwuNjk0NDQsMCwwLC43NjM4OV0sODY6WzAsLjY5NDQ0LC4wMTUyOCwwLC43MzMzNF0sODc6WzAsLjY5NDQ0LC4wMTUyOCwwLDEuMDM4ODldLDg4OlswLC42OTQ0NCwwLDAsLjczMzM0XSw4OTpbMCwuNjk0NDQsLjAyNzUsMCwuNzMzMzRdLDkwOlswLC42OTQ0NCwwLDAsLjY3MjIzXSw5MTpbLjI1LC43NSwwLDAsLjM0MzA2XSw5MzpbLjI1LC43NSwwLDAsLjM0MzA2XSw5NDpbMCwuNjk0NDQsMCwwLC41NV0sOTU6Wy4zNSwuMTA4MzMsLjAzMDU2LDAsLjU1XSw5NzpbMCwuNDU4MzMsMCwwLC41MjVdLDk4OlswLC42OTQ0NCwwLDAsLjU2MTExXSw5OTpbMCwuNDU4MzMsMCwwLC40ODg4OV0sMTAwOlswLC42OTQ0NCwwLDAsLjU2MTExXSwxMDE6WzAsLjQ1ODMzLDAsMCwuNTExMTFdLDEwMjpbMCwuNjk0NDQsLjA3NjM5LDAsLjMzNjExXSwxMDM6Wy4xOTQ0NCwuNDU4MzMsLjAxNTI4LDAsLjU1XSwxMDQ6WzAsLjY5NDQ0LDAsMCwuNTYxMTFdLDEwNTpbMCwuNjk0NDQsMCwwLC4yNTU1Nl0sMTA2OlsuMTk0NDQsLjY5NDQ0LDAsMCwuMjg2MTFdLDEwNzpbMCwuNjk0NDQsMCwwLC41MzA1Nl0sMTA4OlswLC42OTQ0NCwwLDAsLjI1NTU2XSwxMDk6WzAsLjQ1ODMzLDAsMCwuODY2NjddLDExMDpbMCwuNDU4MzMsMCwwLC41NjExMV0sMTExOlswLC40NTgzMywwLDAsLjU1XSwxMTI6Wy4xOTQ0NCwuNDU4MzMsMCwwLC41NjExMV0sMTEzOlsuMTk0NDQsLjQ1ODMzLDAsMCwuNTYxMTFdLDExNDpbMCwuNDU4MzMsLjAxNTI4LDAsLjM3MjIyXSwxMTU6WzAsLjQ1ODMzLDAsMCwuNDIxNjddLDExNjpbMCwuNTg5MjksMCwwLC40MDQxN10sMTE3OlswLC40NTgzMywwLDAsLjU2MTExXSwxMTg6WzAsLjQ1ODMzLC4wMTUyOCwwLC41XSwxMTk6WzAsLjQ1ODMzLC4wMTUyOCwwLC43NDQ0NV0sMTIwOlswLC40NTgzMywwLDAsLjVdLDEyMTpbLjE5NDQ0LC40NTgzMywuMDE1MjgsMCwuNV0sMTIyOlswLC40NTgzMywwLDAsLjQ3NjM5XSwxMjY6Wy4zNSwuMzQ0NDQsMCwwLC41NV0sMTYwOlswLDAsMCwwLC4yNV0sMTY4OlswLC42OTQ0NCwwLDAsLjU1XSwxNzY6WzAsLjY5NDQ0LDAsMCwuNzMzMzRdLDE4MDpbMCwuNjk0NDQsMCwwLC41NV0sMTg0OlsuMTcwMTQsMCwwLDAsLjQ4ODg5XSwzMDU6WzAsLjQ1ODMzLDAsMCwuMjU1NTZdLDU2NzpbLjE5NDQ0LC40NTgzMywwLDAsLjI4NjExXSw3MTA6WzAsLjY5NDQ0LDAsMCwuNTVdLDcxMTpbMCwuNjM1NDIsMCwwLC41NV0sNzEzOlswLC42Mzc3OCwwLDAsLjU1XSw3Mjg6WzAsLjY5NDQ0LDAsMCwuNTVdLDcyOTpbMCwuNjk0NDQsMCwwLC4zMDU1Nl0sNzMwOlswLC42OTQ0NCwwLDAsLjczMzM0XSw3MzI6WzAsLjY5NDQ0LDAsMCwuNTVdLDczMzpbMCwuNjk0NDQsMCwwLC41NV0sOTE1OlswLC42OTQ0NCwwLDAsLjU4MDU2XSw5MTY6WzAsLjY5NDQ0LDAsMCwuOTE2NjddLDkyMDpbMCwuNjk0NDQsMCwwLC44NTU1Nl0sOTIzOlswLC42OTQ0NCwwLDAsLjY3MjIzXSw5MjY6WzAsLjY5NDQ0LDAsMCwuNzMzMzRdLDkyODpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sOTMxOlswLC42OTQ0NCwwLDAsLjc5NDQ1XSw5MzM6WzAsLjY5NDQ0LDAsMCwuODU1NTZdLDkzNDpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sOTM2OlswLC42OTQ0NCwwLDAsLjg1NTU2XSw5Mzc6WzAsLjY5NDQ0LDAsMCwuNzk0NDVdLDgyMTE6WzAsLjQ1ODMzLC4wMzA1NiwwLC41NV0sODIxMjpbMCwuNDU4MzMsLjAzMDU2LDAsMS4xMDAwMV0sODIxNjpbMCwuNjk0NDQsMCwwLC4zMDU1Nl0sODIxNzpbMCwuNjk0NDQsMCwwLC4zMDU1Nl0sODIyMDpbMCwuNjk0NDQsMCwwLC41NTgzNF0sODIyMTpbMCwuNjk0NDQsMCwwLC41NTgzNF19LCJTYW5zU2VyaWYtSXRhbGljIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjk0NDQsLjA1NzMzLDAsLjMxOTQ1XSwzNDpbMCwuNjk0NDQsLjAwMzE2LDAsLjVdLDM1OlsuMTk0NDQsLjY5NDQ0LC4wNTA4NywwLC44MzMzNF0sMzY6Wy4wNTU1NiwuNzUsLjExMTU2LDAsLjVdLDM3OlsuMDU1NTYsLjc1LC4wMzEyNiwwLC44MzMzNF0sMzg6WzAsLjY5NDQ0LC4wMzA1OCwwLC43NTgzNF0sMzk6WzAsLjY5NDQ0LC4wNzgxNiwwLC4yNzc3OF0sNDA6Wy4yNSwuNzUsLjEzMTY0LDAsLjM4ODg5XSw0MTpbLjI1LC43NSwuMDI1MzYsMCwuMzg4ODldLDQyOlswLC43NSwuMTE3NzUsMCwuNV0sNDM6Wy4wODMzMywuNTgzMzMsLjAyNTM2LDAsLjc3Nzc4XSw0NDpbLjEyNSwuMDgzMzMsMCwwLC4yNzc3OF0sNDU6WzAsLjQ0NDQ0LC4wMTk0NiwwLC4zMzMzM10sNDY6WzAsLjA4MzMzLDAsMCwuMjc3NzhdLDQ3OlsuMjUsLjc1LC4xMzE2NCwwLC41XSw0ODpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDQ5OlswLC42NTU1NiwuMTExNTYsMCwuNV0sNTA6WzAsLjY1NTU2LC4xMTE1NiwwLC41XSw1MTpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDUyOlswLC42NTU1NiwuMTExNTYsMCwuNV0sNTM6WzAsLjY1NTU2LC4xMTE1NiwwLC41XSw1NDpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDU1OlswLC42NTU1NiwuMTExNTYsMCwuNV0sNTY6WzAsLjY1NTU2LC4xMTE1NiwwLC41XSw1NzpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDU4OlswLC40NDQ0NCwuMDI1MDIsMCwuMjc3NzhdLDU5OlsuMTI1LC40NDQ0NCwuMDI1MDIsMCwuMjc3NzhdLDYxOlstLjEzLC4zNywuMDUwODcsMCwuNzc3NzhdLDYzOlswLC42OTQ0NCwuMTE4MDksMCwuNDcyMjJdLDY0OlswLC42OTQ0NCwuMDc1NTUsMCwuNjY2NjddLDY1OlswLC42OTQ0NCwwLDAsLjY2NjY3XSw2NjpbMCwuNjk0NDQsLjA4MjkzLDAsLjY2NjY3XSw2NzpbMCwuNjk0NDQsLjExOTgzLDAsLjYzODg5XSw2ODpbMCwuNjk0NDQsLjA3NTU1LDAsLjcyMjIzXSw2OTpbMCwuNjk0NDQsLjExOTgzLDAsLjU5NzIyXSw3MDpbMCwuNjk0NDQsLjEzMzcyLDAsLjU2OTQ1XSw3MTpbMCwuNjk0NDQsLjExOTgzLDAsLjY2NjY3XSw3MjpbMCwuNjk0NDQsLjA4MDk0LDAsLjcwODM0XSw3MzpbMCwuNjk0NDQsLjEzMzcyLDAsLjI3Nzc4XSw3NDpbMCwuNjk0NDQsLjA4MDk0LDAsLjQ3MjIyXSw3NTpbMCwuNjk0NDQsLjExOTgzLDAsLjY5NDQ1XSw3NjpbMCwuNjk0NDQsMCwwLC41NDE2N10sNzc6WzAsLjY5NDQ0LC4wODA5NCwwLC44NzVdLDc4OlswLC42OTQ0NCwuMDgwOTQsMCwuNzA4MzRdLDc5OlswLC42OTQ0NCwuMDc1NTUsMCwuNzM2MTFdLDgwOlswLC42OTQ0NCwuMDgyOTMsMCwuNjM4ODldLDgxOlsuMTI1LC42OTQ0NCwuMDc1NTUsMCwuNzM2MTFdLDgyOlswLC42OTQ0NCwuMDgyOTMsMCwuNjQ1ODRdLDgzOlswLC42OTQ0NCwuMDkyMDUsMCwuNTU1NTZdLDg0OlswLC42OTQ0NCwuMTMzNzIsMCwuNjgwNTZdLDg1OlswLC42OTQ0NCwuMDgwOTQsMCwuNjg3NV0sODY6WzAsLjY5NDQ0LC4xNjE1LDAsLjY2NjY3XSw4NzpbMCwuNjk0NDQsLjE2MTUsMCwuOTQ0NDVdLDg4OlswLC42OTQ0NCwuMTMzNzIsMCwuNjY2NjddLDg5OlswLC42OTQ0NCwuMTcyNjEsMCwuNjY2NjddLDkwOlswLC42OTQ0NCwuMTE5ODMsMCwuNjExMTFdLDkxOlsuMjUsLjc1LC4xNTk0MiwwLC4yODg4OV0sOTM6Wy4yNSwuNzUsLjA4NzE5LDAsLjI4ODg5XSw5NDpbMCwuNjk0NDQsLjA3OTksMCwuNV0sOTU6Wy4zNSwuMDk0NDQsLjA4NjE2LDAsLjVdLDk3OlswLC40NDQ0NCwuMDA5ODEsMCwuNDgwNTZdLDk4OlswLC42OTQ0NCwuMDMwNTcsMCwuNTE2NjddLDk5OlswLC40NDQ0NCwuMDgzMzYsMCwuNDQ0NDVdLDEwMDpbMCwuNjk0NDQsLjA5NDgzLDAsLjUxNjY3XSwxMDE6WzAsLjQ0NDQ0LC4wNjc3OCwwLC40NDQ0NV0sMTAyOlswLC42OTQ0NCwuMjE3MDUsMCwuMzA1NTZdLDEwMzpbLjE5NDQ0LC40NDQ0NCwuMTA4MzYsMCwuNV0sMTA0OlswLC42OTQ0NCwuMDE3NzgsMCwuNTE2NjddLDEwNTpbMCwuNjc5MzcsLjA5NzE4LDAsLjIzODg5XSwxMDY6Wy4xOTQ0NCwuNjc5MzcsLjA5MTYyLDAsLjI2NjY3XSwxMDc6WzAsLjY5NDQ0LC4wODMzNiwwLC40ODg4OV0sMTA4OlswLC42OTQ0NCwuMDk0ODMsMCwuMjM4ODldLDEwOTpbMCwuNDQ0NDQsLjAxNzc4LDAsLjc5NDQ1XSwxMTA6WzAsLjQ0NDQ0LC4wMTc3OCwwLC41MTY2N10sMTExOlswLC40NDQ0NCwuMDY2MTMsMCwuNV0sMTEyOlsuMTk0NDQsLjQ0NDQ0LC4wMzg5LDAsLjUxNjY3XSwxMTM6Wy4xOTQ0NCwuNDQ0NDQsLjA0MTY5LDAsLjUxNjY3XSwxMTQ6WzAsLjQ0NDQ0LC4xMDgzNiwwLC4zNDE2N10sMTE1OlswLC40NDQ0NCwuMDc3OCwwLC4zODMzM10sMTE2OlswLC41NzE0MywuMDcyMjUsMCwuMzYxMTFdLDExNzpbMCwuNDQ0NDQsLjA0MTY5LDAsLjUxNjY3XSwxMTg6WzAsLjQ0NDQ0LC4xMDgzNiwwLC40NjExMV0sMTE5OlswLC40NDQ0NCwuMTA4MzYsMCwuNjgzMzRdLDEyMDpbMCwuNDQ0NDQsLjA5MTY5LDAsLjQ2MTExXSwxMjE6Wy4xOTQ0NCwuNDQ0NDQsLjEwODM2LDAsLjQ2MTExXSwxMjI6WzAsLjQ0NDQ0LC4wODc1MiwwLC40MzQ3Ml0sMTI2OlsuMzUsLjMyNjU5LC4wODgyNiwwLC41XSwxNjA6WzAsMCwwLDAsLjI1XSwxNjg6WzAsLjY3OTM3LC4wNjM4NSwwLC41XSwxNzY6WzAsLjY5NDQ0LDAsMCwuNzM3NTJdLDE4NDpbLjE3MDE0LDAsMCwwLC40NDQ0NV0sMzA1OlswLC40NDQ0NCwuMDQxNjksMCwuMjM4ODldLDU2NzpbLjE5NDQ0LC40NDQ0NCwuMDQxNjksMCwuMjY2NjddLDcxMDpbMCwuNjk0NDQsLjA3OTksMCwuNV0sNzExOlswLC42MzE5NCwuMDg0MzIsMCwuNV0sNzEzOlswLC42MDg4OSwuMDg3NzYsMCwuNV0sNzE0OlswLC42OTQ0NCwuMDkyMDUsMCwuNV0sNzE1OlswLC42OTQ0NCwwLDAsLjVdLDcyODpbMCwuNjk0NDQsLjA5NDgzLDAsLjVdLDcyOTpbMCwuNjc5MzcsLjA3Nzc0LDAsLjI3Nzc4XSw3MzA6WzAsLjY5NDQ0LDAsMCwuNzM3NTJdLDczMjpbMCwuNjc2NTksLjA4ODI2LDAsLjVdLDczMzpbMCwuNjk0NDQsLjA5MjA1LDAsLjVdLDkxNTpbMCwuNjk0NDQsLjEzMzcyLDAsLjU0MTY3XSw5MTY6WzAsLjY5NDQ0LDAsMCwuODMzMzRdLDkyMDpbMCwuNjk0NDQsLjA3NTU1LDAsLjc3Nzc4XSw5MjM6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDkyNjpbMCwuNjk0NDQsLjEyODE2LDAsLjY2NjY3XSw5Mjg6WzAsLjY5NDQ0LC4wODA5NCwwLC43MDgzNF0sOTMxOlswLC42OTQ0NCwuMTE5ODMsMCwuNzIyMjJdLDkzMzpbMCwuNjk0NDQsLjA5MDMxLDAsLjc3Nzc4XSw5MzQ6WzAsLjY5NDQ0LC4wNDYwMywwLC43MjIyMl0sOTM2OlswLC42OTQ0NCwuMDkwMzEsMCwuNzc3NzhdLDkzNzpbMCwuNjk0NDQsLjA4MjkzLDAsLjcyMjIyXSw4MjExOlswLC40NDQ0NCwuMDg2MTYsMCwuNV0sODIxMjpbMCwuNDQ0NDQsLjA4NjE2LDAsMV0sODIxNjpbMCwuNjk0NDQsLjA3ODE2LDAsLjI3Nzc4XSw4MjE3OlswLC42OTQ0NCwuMDc4MTYsMCwuMjc3NzhdLDgyMjA6WzAsLjY5NDQ0LC4xNDIwNSwwLC41XSw4MjIxOlswLC42OTQ0NCwuMDAzMTYsMCwuNV19LCJTYW5zU2VyaWYtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sMzM6WzAsLjY5NDQ0LDAsMCwuMzE5NDVdLDM0OlswLC42OTQ0NCwwLDAsLjVdLDM1OlsuMTk0NDQsLjY5NDQ0LDAsMCwuODMzMzRdLDM2OlsuMDU1NTYsLjc1LDAsMCwuNV0sMzc6Wy4wNTU1NiwuNzUsMCwwLC44MzMzNF0sMzg6WzAsLjY5NDQ0LDAsMCwuNzU4MzRdLDM5OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw0MDpbLjI1LC43NSwwLDAsLjM4ODg5XSw0MTpbLjI1LC43NSwwLDAsLjM4ODg5XSw0MjpbMCwuNzUsMCwwLC41XSw0MzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw0NDpbLjEyNSwuMDgzMzMsMCwwLC4yNzc3OF0sNDU6WzAsLjQ0NDQ0LDAsMCwuMzMzMzNdLDQ2OlswLC4wODMzMywwLDAsLjI3Nzc4XSw0NzpbLjI1LC43NSwwLDAsLjVdLDQ4OlswLC42NTU1NiwwLDAsLjVdLDQ5OlswLC42NTU1NiwwLDAsLjVdLDUwOlswLC42NTU1NiwwLDAsLjVdLDUxOlswLC42NTU1NiwwLDAsLjVdLDUyOlswLC42NTU1NiwwLDAsLjVdLDUzOlswLC42NTU1NiwwLDAsLjVdLDU0OlswLC42NTU1NiwwLDAsLjVdLDU1OlswLC42NTU1NiwwLDAsLjVdLDU2OlswLC42NTU1NiwwLDAsLjVdLDU3OlswLC42NTU1NiwwLDAsLjVdLDU4OlswLC40NDQ0NCwwLDAsLjI3Nzc4XSw1OTpbLjEyNSwuNDQ0NDQsMCwwLC4yNzc3OF0sNjE6Wy0uMTMsLjM3LDAsMCwuNzc3NzhdLDYzOlswLC42OTQ0NCwwLDAsLjQ3MjIyXSw2NDpbMCwuNjk0NDQsMCwwLC42NjY2N10sNjU6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDY2OlswLC42OTQ0NCwwLDAsLjY2NjY3XSw2NzpbMCwuNjk0NDQsMCwwLC42Mzg4OV0sNjg6WzAsLjY5NDQ0LDAsMCwuNzIyMjNdLDY5OlswLC42OTQ0NCwwLDAsLjU5NzIyXSw3MDpbMCwuNjk0NDQsMCwwLC41Njk0NV0sNzE6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDcyOlswLC42OTQ0NCwwLDAsLjcwODM0XSw3MzpbMCwuNjk0NDQsMCwwLC4yNzc3OF0sNzQ6WzAsLjY5NDQ0LDAsMCwuNDcyMjJdLDc1OlswLC42OTQ0NCwwLDAsLjY5NDQ1XSw3NjpbMCwuNjk0NDQsMCwwLC41NDE2N10sNzc6WzAsLjY5NDQ0LDAsMCwuODc1XSw3ODpbMCwuNjk0NDQsMCwwLC43MDgzNF0sNzk6WzAsLjY5NDQ0LDAsMCwuNzM2MTFdLDgwOlswLC42OTQ0NCwwLDAsLjYzODg5XSw4MTpbLjEyNSwuNjk0NDQsMCwwLC43MzYxMV0sODI6WzAsLjY5NDQ0LDAsMCwuNjQ1ODRdLDgzOlswLC42OTQ0NCwwLDAsLjU1NTU2XSw4NDpbMCwuNjk0NDQsMCwwLC42ODA1Nl0sODU6WzAsLjY5NDQ0LDAsMCwuNjg3NV0sODY6WzAsLjY5NDQ0LC4wMTM4OSwwLC42NjY2N10sODc6WzAsLjY5NDQ0LC4wMTM4OSwwLC45NDQ0NV0sODg6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDg5OlswLC42OTQ0NCwuMDI1LDAsLjY2NjY3XSw5MDpbMCwuNjk0NDQsMCwwLC42MTExMV0sOTE6Wy4yNSwuNzUsMCwwLC4yODg4OV0sOTM6Wy4yNSwuNzUsMCwwLC4yODg4OV0sOTQ6WzAsLjY5NDQ0LDAsMCwuNV0sOTU6Wy4zNSwuMDk0NDQsLjAyNzc4LDAsLjVdLDk3OlswLC40NDQ0NCwwLDAsLjQ4MDU2XSw5ODpbMCwuNjk0NDQsMCwwLC41MTY2N10sOTk6WzAsLjQ0NDQ0LDAsMCwuNDQ0NDVdLDEwMDpbMCwuNjk0NDQsMCwwLC41MTY2N10sMTAxOlswLC40NDQ0NCwwLDAsLjQ0NDQ1XSwxMDI6WzAsLjY5NDQ0LC4wNjk0NCwwLC4zMDU1Nl0sMTAzOlsuMTk0NDQsLjQ0NDQ0LC4wMTM4OSwwLC41XSwxMDQ6WzAsLjY5NDQ0LDAsMCwuNTE2NjddLDEwNTpbMCwuNjc5MzcsMCwwLC4yMzg4OV0sMTA2OlsuMTk0NDQsLjY3OTM3LDAsMCwuMjY2NjddLDEwNzpbMCwuNjk0NDQsMCwwLC40ODg4OV0sMTA4OlswLC42OTQ0NCwwLDAsLjIzODg5XSwxMDk6WzAsLjQ0NDQ0LDAsMCwuNzk0NDVdLDExMDpbMCwuNDQ0NDQsMCwwLC41MTY2N10sMTExOlswLC40NDQ0NCwwLDAsLjVdLDExMjpbLjE5NDQ0LC40NDQ0NCwwLDAsLjUxNjY3XSwxMTM6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC41MTY2N10sMTE0OlswLC40NDQ0NCwuMDEzODksMCwuMzQxNjddLDExNTpbMCwuNDQ0NDQsMCwwLC4zODMzM10sMTE2OlswLC41NzE0MywwLDAsLjM2MTExXSwxMTc6WzAsLjQ0NDQ0LDAsMCwuNTE2NjddLDExODpbMCwuNDQ0NDQsLjAxMzg5LDAsLjQ2MTExXSwxMTk6WzAsLjQ0NDQ0LC4wMTM4OSwwLC42ODMzNF0sMTIwOlswLC40NDQ0NCwwLDAsLjQ2MTExXSwxMjE6Wy4xOTQ0NCwuNDQ0NDQsLjAxMzg5LDAsLjQ2MTExXSwxMjI6WzAsLjQ0NDQ0LDAsMCwuNDM0NzJdLDEyNjpbLjM1LC4zMjY1OSwwLDAsLjVdLDE2MDpbMCwwLDAsMCwuMjVdLDE2ODpbMCwuNjc5MzcsMCwwLC41XSwxNzY6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDE4NDpbLjE3MDE0LDAsMCwwLC40NDQ0NV0sMzA1OlswLC40NDQ0NCwwLDAsLjIzODg5XSw1Njc6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC4yNjY2N10sNzEwOlswLC42OTQ0NCwwLDAsLjVdLDcxMTpbMCwuNjMxOTQsMCwwLC41XSw3MTM6WzAsLjYwODg5LDAsMCwuNV0sNzE0OlswLC42OTQ0NCwwLDAsLjVdLDcxNTpbMCwuNjk0NDQsMCwwLC41XSw3Mjg6WzAsLjY5NDQ0LDAsMCwuNV0sNzI5OlswLC42NzkzNywwLDAsLjI3Nzc4XSw3MzA6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDczMjpbMCwuNjc2NTksMCwwLC41XSw3MzM6WzAsLjY5NDQ0LDAsMCwuNV0sOTE1OlswLC42OTQ0NCwwLDAsLjU0MTY3XSw5MTY6WzAsLjY5NDQ0LDAsMCwuODMzMzRdLDkyMDpbMCwuNjk0NDQsMCwwLC43Nzc3OF0sOTIzOlswLC42OTQ0NCwwLDAsLjYxMTExXSw5MjY6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDkyODpbMCwuNjk0NDQsMCwwLC43MDgzNF0sOTMxOlswLC42OTQ0NCwwLDAsLjcyMjIyXSw5MzM6WzAsLjY5NDQ0LDAsMCwuNzc3NzhdLDkzNDpbMCwuNjk0NDQsMCwwLC43MjIyMl0sOTM2OlswLC42OTQ0NCwwLDAsLjc3Nzc4XSw5Mzc6WzAsLjY5NDQ0LDAsMCwuNzIyMjJdLDgyMTE6WzAsLjQ0NDQ0LC4wMjc3OCwwLC41XSw4MjEyOlswLC40NDQ0NCwuMDI3NzgsMCwxXSw4MjE2OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw4MjE3OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw4MjIwOlswLC42OTQ0NCwwLDAsLjVdLDgyMjE6WzAsLjY5NDQ0LDAsMCwuNV19LCJTY3JpcHQtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sNjU6WzAsLjcsLjIyOTI1LDAsLjgwMjUzXSw2NjpbMCwuNywuMDQwODcsMCwuOTA3NTddLDY3OlswLC43LC4xNjg5LDAsLjY2NjE5XSw2ODpbMCwuNywuMDkzNzEsMCwuNzc0NDNdLDY5OlswLC43LC4xODU4MywwLC41NjE2Ml0sNzA6WzAsLjcsLjEzNjM0LDAsLjg5NTQ0XSw3MTpbMCwuNywuMTczMjIsMCwuNjA5NjFdLDcyOlswLC43LC4yOTY5NCwwLC45NjkxOV0sNzM6WzAsLjcsLjE5MTg5LDAsLjgwOTA3XSw3NDpbLjI3Nzc4LC43LC4xOTE4OSwwLDEuMDUxNTldLDc1OlswLC43LC4zMTI1OSwwLC45MTM2NF0sNzY6WzAsLjcsLjE5MTg5LDAsLjg3MzczXSw3NzpbMCwuNywuMTU5ODEsMCwxLjA4MDMxXSw3ODpbMCwuNywuMzUyNSwwLC45MDE1XSw3OTpbMCwuNywuMDgwNzgsMCwuNzM3ODddLDgwOlswLC43LC4wODA3OCwwLDEuMDEyNjJdLDgxOlswLC43LC4wMzMwNSwwLC44ODI4Ml0sODI6WzAsLjcsLjA2MjU5LDAsLjg1XSw4MzpbMCwuNywuMTkxODksMCwuODY3NjddLDg0OlswLC43LC4yOTA4NywwLC43NDY5N10sODU6WzAsLjcsLjI1ODE1LDAsLjc5OTk2XSw4NjpbMCwuNywuMjc1MjMsMCwuNjIyMDRdLDg3OlswLC43LC4yNzUyMywwLC44MDUzMl0sODg6WzAsLjcsLjI2MDA2LDAsLjk0NDQ1XSw4OTpbMCwuNywuMjkzOSwwLC43MDk2MV0sOTA6WzAsLjcsLjI0MDM3LDAsLjgyMTJdLDE2MDpbMCwwLDAsMCwuMjVdfSwiU2l6ZTEtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sNDA6Wy4zNTAwMSwuODUsMCwwLC40NTgzNF0sNDE6Wy4zNTAwMSwuODUsMCwwLC40NTgzNF0sNDc6Wy4zNTAwMSwuODUsMCwwLC41Nzc3OF0sOTE6Wy4zNTAwMSwuODUsMCwwLC40MTY2N10sOTI6Wy4zNTAwMSwuODUsMCwwLC41Nzc3OF0sOTM6Wy4zNTAwMSwuODUsMCwwLC40MTY2N10sMTIzOlsuMzUwMDEsLjg1LDAsMCwuNTgzMzRdLDEyNTpbLjM1MDAxLC44NSwwLDAsLjU4MzM0XSwxNjA6WzAsMCwwLDAsLjI1XSw3MTA6WzAsLjcyMjIyLDAsMCwuNTU1NTZdLDczMjpbMCwuNzIyMjIsMCwwLC41NTU1Nl0sNzcwOlswLC43MjIyMiwwLDAsLjU1NTU2XSw3NzE6WzAsLjcyMjIyLDAsMCwuNTU1NTZdLDgyMTQ6Wy05OWUtNSwuNjAxLDAsMCwuNzc3NzhdLDg1OTM6WzFlLTUsLjYsMCwwLC42NjY2N10sODU5NTpbMWUtNSwuNiwwLDAsLjY2NjY3XSw4NjU3OlsxZS01LC42LDAsMCwuNzc3NzhdLDg2NTk6WzFlLTUsLjYsMCwwLC43Nzc3OF0sODcxOTpbLjI1MDAxLC43NSwwLDAsLjk0NDQ1XSw4NzIwOlsuMjUwMDEsLjc1LDAsMCwuOTQ0NDVdLDg3MjE6Wy4yNTAwMSwuNzUsMCwwLDEuMDU1NTZdLDg3MzA6Wy4zNTAwMSwuODUsMCwwLDFdLDg3Mzk6Wy0uMDA1OTksLjYwNiwwLDAsLjMzMzMzXSw4NzQxOlstLjAwNTk5LC42MDYsMCwwLC41NTU1Nl0sODc0NzpbLjMwNjEyLC44MDUsLjE5NDQ1LDAsLjQ3MjIyXSw4NzQ4OlsuMzA2LC44MDUsLjE5NDQ1LDAsLjQ3MjIyXSw4NzQ5OlsuMzA2LC44MDUsLjE5NDQ1LDAsLjQ3MjIyXSw4NzUwOlsuMzA2MTIsLjgwNSwuMTk0NDUsMCwuNDcyMjJdLDg4OTY6Wy4yNTAwMSwuNzUsMCwwLC44MzMzNF0sODg5NzpbLjI1MDAxLC43NSwwLDAsLjgzMzM0XSw4ODk4OlsuMjUwMDEsLjc1LDAsMCwuODMzMzRdLDg4OTk6Wy4yNTAwMSwuNzUsMCwwLC44MzMzNF0sODk2ODpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSw4OTY5OlsuMzUwMDEsLjg1LDAsMCwuNDcyMjJdLDg5NzA6Wy4zNTAwMSwuODUsMCwwLC40NzIyMl0sODk3MTpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSw5MTY4OlstOTllLTUsLjYwMSwwLDAsLjY2NjY3XSwxMDIxNjpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSwxMDIxNzpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSwxMDc1MjpbLjI1MDAxLC43NSwwLDAsMS4xMTExMV0sMTA3NTM6Wy4yNTAwMSwuNzUsMCwwLDEuMTExMTFdLDEwNzU0OlsuMjUwMDEsLjc1LDAsMCwxLjExMTExXSwxMDc1NjpbLjI1MDAxLC43NSwwLDAsLjgzMzM0XSwxMDc1ODpbLjI1MDAxLC43NSwwLDAsLjgzMzM0XX0sIlNpemUyLVJlZ3VsYXIiOnszMjpbMCwwLDAsMCwuMjVdLDQwOlsuNjUwMDIsMS4xNSwwLDAsLjU5NzIyXSw0MTpbLjY1MDAyLDEuMTUsMCwwLC41OTcyMl0sNDc6Wy42NTAwMiwxLjE1LDAsMCwuODExMTFdLDkxOlsuNjUwMDIsMS4xNSwwLDAsLjQ3MjIyXSw5MjpbLjY1MDAyLDEuMTUsMCwwLC44MTExMV0sOTM6Wy42NTAwMiwxLjE1LDAsMCwuNDcyMjJdLDEyMzpbLjY1MDAyLDEuMTUsMCwwLC42NjY2N10sMTI1OlsuNjUwMDIsMS4xNSwwLDAsLjY2NjY3XSwxNjA6WzAsMCwwLDAsLjI1XSw3MTA6WzAsLjc1LDAsMCwxXSw3MzI6WzAsLjc1LDAsMCwxXSw3NzA6WzAsLjc1LDAsMCwxXSw3NzE6WzAsLjc1LDAsMCwxXSw4NzE5OlsuNTUwMDEsMS4wNSwwLDAsMS4yNzc3OF0sODcyMDpbLjU1MDAxLDEuMDUsMCwwLDEuMjc3NzhdLDg3MjE6Wy41NTAwMSwxLjA1LDAsMCwxLjQ0NDQ1XSw4NzMwOlsuNjUwMDIsMS4xNSwwLDAsMV0sODc0NzpbLjg2MjI1LDEuMzYsLjQ0NDQ1LDAsLjU1NTU2XSw4NzQ4OlsuODYyLDEuMzYsLjQ0NDQ1LDAsLjU1NTU2XSw4NzQ5OlsuODYyLDEuMzYsLjQ0NDQ1LDAsLjU1NTU2XSw4NzUwOlsuODYyMjUsMS4zNiwuNDQ0NDUsMCwuNTU1NTZdLDg4OTY6Wy41NTAwMSwxLjA1LDAsMCwxLjExMTExXSw4ODk3OlsuNTUwMDEsMS4wNSwwLDAsMS4xMTExMV0sODg5ODpbLjU1MDAxLDEuMDUsMCwwLDEuMTExMTFdLDg4OTk6Wy41NTAwMSwxLjA1LDAsMCwxLjExMTExXSw4OTY4OlsuNjUwMDIsMS4xNSwwLDAsLjUyNzc4XSw4OTY5OlsuNjUwMDIsMS4xNSwwLDAsLjUyNzc4XSw4OTcwOlsuNjUwMDIsMS4xNSwwLDAsLjUyNzc4XSw4OTcxOlsuNjUwMDIsMS4xNSwwLDAsLjUyNzc4XSwxMDIxNjpbLjY1MDAyLDEuMTUsMCwwLC42MTExMV0sMTAyMTc6Wy42NTAwMiwxLjE1LDAsMCwuNjExMTFdLDEwNzUyOlsuNTUwMDEsMS4wNSwwLDAsMS41MTExMl0sMTA3NTM6Wy41NTAwMSwxLjA1LDAsMCwxLjUxMTEyXSwxMDc1NDpbLjU1MDAxLDEuMDUsMCwwLDEuNTExMTJdLDEwNzU2OlsuNTUwMDEsMS4wNSwwLDAsMS4xMTExMV0sMTA3NTg6Wy41NTAwMSwxLjA1LDAsMCwxLjExMTExXX0sIlNpemUzLVJlZ3VsYXIiOnszMjpbMCwwLDAsMCwuMjVdLDQwOlsuOTUwMDMsMS40NSwwLDAsLjczNjExXSw0MTpbLjk1MDAzLDEuNDUsMCwwLC43MzYxMV0sNDc6Wy45NTAwMywxLjQ1LDAsMCwxLjA0NDQ1XSw5MTpbLjk1MDAzLDEuNDUsMCwwLC41Mjc3OF0sOTI6Wy45NTAwMywxLjQ1LDAsMCwxLjA0NDQ1XSw5MzpbLjk1MDAzLDEuNDUsMCwwLC41Mjc3OF0sMTIzOlsuOTUwMDMsMS40NSwwLDAsLjc1XSwxMjU6Wy45NTAwMywxLjQ1LDAsMCwuNzVdLDE2MDpbMCwwLDAsMCwuMjVdLDcxMDpbMCwuNzUsMCwwLDEuNDQ0NDVdLDczMjpbMCwuNzUsMCwwLDEuNDQ0NDVdLDc3MDpbMCwuNzUsMCwwLDEuNDQ0NDVdLDc3MTpbMCwuNzUsMCwwLDEuNDQ0NDVdLDg3MzA6Wy45NTAwMywxLjQ1LDAsMCwxXSw4OTY4OlsuOTUwMDMsMS40NSwwLDAsLjU4MzM0XSw4OTY5OlsuOTUwMDMsMS40NSwwLDAsLjU4MzM0XSw4OTcwOlsuOTUwMDMsMS40NSwwLDAsLjU4MzM0XSw4OTcxOlsuOTUwMDMsMS40NSwwLDAsLjU4MzM0XSwxMDIxNjpbLjk1MDAzLDEuNDUsMCwwLC43NV0sMTAyMTc6Wy45NTAwMywxLjQ1LDAsMCwuNzVdfSwiU2l6ZTQtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sNDA6WzEuMjUwMDMsMS43NSwwLDAsLjc5MTY3XSw0MTpbMS4yNTAwMywxLjc1LDAsMCwuNzkxNjddLDQ3OlsxLjI1MDAzLDEuNzUsMCwwLDEuMjc3NzhdLDkxOlsxLjI1MDAzLDEuNzUsMCwwLC41ODMzNF0sOTI6WzEuMjUwMDMsMS43NSwwLDAsMS4yNzc3OF0sOTM6WzEuMjUwMDMsMS43NSwwLDAsLjU4MzM0XSwxMjM6WzEuMjUwMDMsMS43NSwwLDAsLjgwNTU2XSwxMjU6WzEuMjUwMDMsMS43NSwwLDAsLjgwNTU2XSwxNjA6WzAsMCwwLDAsLjI1XSw3MTA6WzAsLjgyNSwwLDAsMS44ODg5XSw3MzI6WzAsLjgyNSwwLDAsMS44ODg5XSw3NzA6WzAsLjgyNSwwLDAsMS44ODg5XSw3NzE6WzAsLjgyNSwwLDAsMS44ODg5XSw4NzMwOlsxLjI1MDAzLDEuNzUsMCwwLDFdLDg5Njg6WzEuMjUwMDMsMS43NSwwLDAsLjYzODg5XSw4OTY5OlsxLjI1MDAzLDEuNzUsMCwwLC42Mzg4OV0sODk3MDpbMS4yNTAwMywxLjc1LDAsMCwuNjM4ODldLDg5NzE6WzEuMjUwMDMsMS43NSwwLDAsLjYzODg5XSw5MTE1OlsuNjQ1MDIsMS4xNTUsMCwwLC44NzVdLDkxMTY6WzFlLTUsLjYsMCwwLC44NzVdLDkxMTc6Wy42NDUwMiwxLjE1NSwwLDAsLjg3NV0sOTExODpbLjY0NTAyLDEuMTU1LDAsMCwuODc1XSw5MTE5OlsxZS01LC42LDAsMCwuODc1XSw5MTIwOlsuNjQ1MDIsMS4xNTUsMCwwLC44NzVdLDkxMjE6Wy42NDUwMiwxLjE1NSwwLDAsLjY2NjY3XSw5MTIyOlstOTllLTUsLjYwMSwwLDAsLjY2NjY3XSw5MTIzOlsuNjQ1MDIsMS4xNTUsMCwwLC42NjY2N10sOTEyNDpbLjY0NTAyLDEuMTU1LDAsMCwuNjY2NjddLDkxMjU6Wy05OWUtNSwuNjAxLDAsMCwuNjY2NjddLDkxMjY6Wy42NDUwMiwxLjE1NSwwLDAsLjY2NjY3XSw5MTI3OlsxZS01LC45LDAsMCwuODg4ODldLDkxMjg6Wy42NTAwMiwxLjE1LDAsMCwuODg4ODldLDkxMjk6Wy45MDAwMSwwLDAsMCwuODg4ODldLDkxMzA6WzAsLjMsMCwwLC44ODg4OV0sOTEzMTpbMWUtNSwuOSwwLDAsLjg4ODg5XSw5MTMyOlsuNjUwMDIsMS4xNSwwLDAsLjg4ODg5XSw5MTMzOlsuOTAwMDEsMCwwLDAsLjg4ODg5XSw5MTQzOlsuODg1MDIsLjkxNSwwLDAsMS4wNTU1Nl0sMTAyMTY6WzEuMjUwMDMsMS43NSwwLDAsLjgwNTU2XSwxMDIxNzpbMS4yNTAwMywxLjc1LDAsMCwuODA1NTZdLDU3MzQ0OlstLjAwNDk5LC42MDUsMCwwLDEuMDU1NTZdLDU3MzQ1OlstLjAwNDk5LC42MDUsMCwwLDEuMDU1NTZdLDU3NjgwOlswLC4xMiwwLDAsLjQ1XSw1NzY4MTpbMCwuMTIsMCwwLC40NV0sNTc2ODI6WzAsLjEyLDAsMCwuNDVdLDU3NjgzOlswLC4xMiwwLDAsLjQ1XX0sIlR5cGV3cml0ZXItUmVndWxhciI6ezMyOlswLDAsMCwwLC41MjVdLDMzOlswLC42MTExMSwwLDAsLjUyNV0sMzQ6WzAsLjYxMTExLDAsMCwuNTI1XSwzNTpbMCwuNjExMTEsMCwwLC41MjVdLDM2OlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSwzNzpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sMzg6WzAsLjYxMTExLDAsMCwuNTI1XSwzOTpbMCwuNjExMTEsMCwwLC41MjVdLDQwOlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSw0MTpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sNDI6WzAsLjUyMDgzLDAsMCwuNTI1XSw0MzpbLS4wODA1NiwuNTMwNTUsMCwwLC41MjVdLDQ0OlsuMTM4ODksLjEyNSwwLDAsLjUyNV0sNDU6Wy0uMDgwNTYsLjUzMDU1LDAsMCwuNTI1XSw0NjpbMCwuMTI1LDAsMCwuNTI1XSw0NzpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sNDg6WzAsLjYxMTExLDAsMCwuNTI1XSw0OTpbMCwuNjExMTEsMCwwLC41MjVdLDUwOlswLC42MTExMSwwLDAsLjUyNV0sNTE6WzAsLjYxMTExLDAsMCwuNTI1XSw1MjpbMCwuNjExMTEsMCwwLC41MjVdLDUzOlswLC42MTExMSwwLDAsLjUyNV0sNTQ6WzAsLjYxMTExLDAsMCwuNTI1XSw1NTpbMCwuNjExMTEsMCwwLC41MjVdLDU2OlswLC42MTExMSwwLDAsLjUyNV0sNTc6WzAsLjYxMTExLDAsMCwuNTI1XSw1ODpbMCwuNDMwNTYsMCwwLC41MjVdLDU5OlsuMTM4ODksLjQzMDU2LDAsMCwuNTI1XSw2MDpbLS4wNTU1NiwuNTU1NTYsMCwwLC41MjVdLDYxOlstLjE5NTQ5LC40MTU2MiwwLDAsLjUyNV0sNjI6Wy0uMDU1NTYsLjU1NTU2LDAsMCwuNTI1XSw2MzpbMCwuNjExMTEsMCwwLC41MjVdLDY0OlswLC42MTExMSwwLDAsLjUyNV0sNjU6WzAsLjYxMTExLDAsMCwuNTI1XSw2NjpbMCwuNjExMTEsMCwwLC41MjVdLDY3OlswLC42MTExMSwwLDAsLjUyNV0sNjg6WzAsLjYxMTExLDAsMCwuNTI1XSw2OTpbMCwuNjExMTEsMCwwLC41MjVdLDcwOlswLC42MTExMSwwLDAsLjUyNV0sNzE6WzAsLjYxMTExLDAsMCwuNTI1XSw3MjpbMCwuNjExMTEsMCwwLC41MjVdLDczOlswLC42MTExMSwwLDAsLjUyNV0sNzQ6WzAsLjYxMTExLDAsMCwuNTI1XSw3NTpbMCwuNjExMTEsMCwwLC41MjVdLDc2OlswLC42MTExMSwwLDAsLjUyNV0sNzc6WzAsLjYxMTExLDAsMCwuNTI1XSw3ODpbMCwuNjExMTEsMCwwLC41MjVdLDc5OlswLC42MTExMSwwLDAsLjUyNV0sODA6WzAsLjYxMTExLDAsMCwuNTI1XSw4MTpbLjEzODg5LC42MTExMSwwLDAsLjUyNV0sODI6WzAsLjYxMTExLDAsMCwuNTI1XSw4MzpbMCwuNjExMTEsMCwwLC41MjVdLDg0OlswLC42MTExMSwwLDAsLjUyNV0sODU6WzAsLjYxMTExLDAsMCwuNTI1XSw4NjpbMCwuNjExMTEsMCwwLC41MjVdLDg3OlswLC42MTExMSwwLDAsLjUyNV0sODg6WzAsLjYxMTExLDAsMCwuNTI1XSw4OTpbMCwuNjExMTEsMCwwLC41MjVdLDkwOlswLC42MTExMSwwLDAsLjUyNV0sOTE6Wy4wODMzMywuNjk0NDQsMCwwLC41MjVdLDkyOlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSw5MzpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sOTQ6WzAsLjYxMTExLDAsMCwuNTI1XSw5NTpbLjA5NTE0LDAsMCwwLC41MjVdLDk2OlswLC42MTExMSwwLDAsLjUyNV0sOTc6WzAsLjQzMDU2LDAsMCwuNTI1XSw5ODpbMCwuNjExMTEsMCwwLC41MjVdLDk5OlswLC40MzA1NiwwLDAsLjUyNV0sMTAwOlswLC42MTExMSwwLDAsLjUyNV0sMTAxOlswLC40MzA1NiwwLDAsLjUyNV0sMTAyOlswLC42MTExMSwwLDAsLjUyNV0sMTAzOlsuMjIyMjIsLjQzMDU2LDAsMCwuNTI1XSwxMDQ6WzAsLjYxMTExLDAsMCwuNTI1XSwxMDU6WzAsLjYxMTExLDAsMCwuNTI1XSwxMDY6Wy4yMjIyMiwuNjExMTEsMCwwLC41MjVdLDEwNzpbMCwuNjExMTEsMCwwLC41MjVdLDEwODpbMCwuNjExMTEsMCwwLC41MjVdLDEwOTpbMCwuNDMwNTYsMCwwLC41MjVdLDExMDpbMCwuNDMwNTYsMCwwLC41MjVdLDExMTpbMCwuNDMwNTYsMCwwLC41MjVdLDExMjpbLjIyMjIyLC40MzA1NiwwLDAsLjUyNV0sMTEzOlsuMjIyMjIsLjQzMDU2LDAsMCwuNTI1XSwxMTQ6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMTU6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMTY6WzAsLjU1MzU4LDAsMCwuNTI1XSwxMTc6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMTg6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMTk6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMjA6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMjE6Wy4yMjIyMiwuNDMwNTYsMCwwLC41MjVdLDEyMjpbMCwuNDMwNTYsMCwwLC41MjVdLDEyMzpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sMTI0OlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSwxMjU6Wy4wODMzMywuNjk0NDQsMCwwLC41MjVdLDEyNjpbMCwuNjExMTEsMCwwLC41MjVdLDEyNzpbMCwuNjExMTEsMCwwLC41MjVdLDE2MDpbMCwwLDAsMCwuNTI1XSwxNzY6WzAsLjYxMTExLDAsMCwuNTI1XSwxODQ6Wy4xOTQ0NSwwLDAsMCwuNTI1XSwzMDU6WzAsLjQzMDU2LDAsMCwuNTI1XSw1Njc6Wy4yMjIyMiwuNDMwNTYsMCwwLC41MjVdLDcxMTpbMCwuNTY1OTcsMCwwLC41MjVdLDcxMzpbMCwuNTY1NTUsMCwwLC41MjVdLDcxNDpbMCwuNjExMTEsMCwwLC41MjVdLDcxNTpbMCwuNjExMTEsMCwwLC41MjVdLDcyODpbMCwuNjExMTEsMCwwLC41MjVdLDczMDpbMCwuNjExMTEsMCwwLC41MjVdLDc3MDpbMCwuNjExMTEsMCwwLC41MjVdLDc3MTpbMCwuNjExMTEsMCwwLC41MjVdLDc3NjpbMCwuNjExMTEsMCwwLC41MjVdLDkxNTpbMCwuNjExMTEsMCwwLC41MjVdLDkxNjpbMCwuNjExMTEsMCwwLC41MjVdLDkyMDpbMCwuNjExMTEsMCwwLC41MjVdLDkyMzpbMCwuNjExMTEsMCwwLC41MjVdLDkyNjpbMCwuNjExMTEsMCwwLC41MjVdLDkyODpbMCwuNjExMTEsMCwwLC41MjVdLDkzMTpbMCwuNjExMTEsMCwwLC41MjVdLDkzMzpbMCwuNjExMTEsMCwwLC41MjVdLDkzNDpbMCwuNjExMTEsMCwwLC41MjVdLDkzNjpbMCwuNjExMTEsMCwwLC41MjVdLDkzNzpbMCwuNjExMTEsMCwwLC41MjVdLDgyMTY6WzAsLjYxMTExLDAsMCwuNTI1XSw4MjE3OlswLC42MTExMSwwLDAsLjUyNV0sODI0MjpbMCwuNjExMTEsMCwwLC41MjVdLDkyNTE6Wy4xMTExMSwuMjE5NDQsMCwwLC41MjVdfX0sYVE9e3NsYW50OlsuMjUsLjI1LC4yNV0sc3BhY2U6WzAsMCwwXSxzdHJldGNoOlswLDAsMF0sc2hyaW5rOlswLDAsMF0seEhlaWdodDpbLjQzMSwuNDMxLC40MzFdLHF1YWQ6WzEsMS4xNzEsMS40NzJdLGV4dHJhU3BhY2U6WzAsMCwwXSxudW0xOlsuNjc3LC43MzIsLjkyNV0sbnVtMjpbLjM5NCwuMzg0LC4zODddLG51bTM6Wy40NDQsLjQ3MSwuNTA0XSxkZW5vbTE6Wy42ODYsLjc1MiwxLjAyNV0sZGVub20yOlsuMzQ1LC4zNDQsLjUzMl0sc3VwMTpbLjQxMywuNTAzLC41MDRdLHN1cDI6Wy4zNjMsLjQzMSwuNDA0XSxzdXAzOlsuMjg5LC4yODYsLjI5NF0sc3ViMTpbLjE1LC4xNDMsLjJdLHN1YjI6Wy4yNDcsLjI4NiwuNF0sc3VwRHJvcDpbLjM4NiwuMzUzLC40OTRdLHN1YkRyb3A6Wy4wNSwuMDcxLC4xXSxkZWxpbTE6WzIuMzksMS43LDEuOThdLGRlbGltMjpbMS4wMSwxLjE1NywxLjQyXSxheGlzSGVpZ2h0OlsuMjUsLjI1LC4yNV0sZGVmYXVsdFJ1bGVUaGlja25lc3M6Wy4wNCwuMDQ5LC4wNDldLGJpZ09wU3BhY2luZzE6Wy4xMTEsLjExMSwuMTExXSxiaWdPcFNwYWNpbmcyOlsuMTY2LC4xNjYsLjE2Nl0sYmlnT3BTcGFjaW5nMzpbLjIsLjIsLjJdLGJpZ09wU3BhY2luZzQ6Wy42LC42MTEsLjYxMV0sYmlnT3BTcGFjaW5nNTpbLjEsLjE0MywuMTQzXSxzcXJ0UnVsZVRoaWNrbmVzczpbLjA0LC4wNCwuMDRdLHB0UGVyRW06WzEwLDEwLDEwXSxkb3VibGVSdWxlU2VwOlsuMiwuMiwuMl0sYXJyYXlSdWxlV2lkdGg6Wy4wNCwuMDQsLjA0XSxmYm94c2VwOlsuMywuMywuM10sZmJveHJ1bGU6Wy4wNCwuMDQsLjA0XX0sWSRlPXvDhToiQSIsw5A6IkQiLMOeOiJvIizDpToiYSIsw7A6ImQiLMO+OiJvIizQkDoiQSIs0JE6IkIiLNCSOiJCIizQkzoiRiIs0JQ6IkEiLNCVOiJFIizQljoiSyIs0Jc6IjMiLNCYOiJOIizQmToiTiIs0Jo6IksiLNCbOiJOIizQnDoiTSIs0J06IkgiLNCeOiJPIizQnzoiTiIs0KA6IlAiLNChOiJDIizQojoiVCIs0KM6InkiLNCkOiJPIizQpToiWCIs0KY6IlUiLNCnOiJoIizQqDoiVyIs0Kk6IlciLNCqOiJCIizQqzoiWCIs0Kw6IkIiLNCtOiIzIizQrjoiWCIs0K86IlIiLNCwOiJhIizQsToiYiIs0LI6ImEiLNCzOiJyIizQtDoieSIs0LU6ImUiLNC2OiJtIizQtzoiZSIs0Lg6Im4iLNC5OiJuIizQujoibiIs0Ls6Im4iLNC8OiJtIizQvToibiIs0L46Im8iLNC/OiJuIizRgDoicCIs0YE6ImMiLNGCOiJvIizRgzoieSIs0YQ6ImIiLNGFOiJ4IizRhjoibiIs0Yc6Im4iLNGIOiJ3IizRiToidyIs0Yo6ImEiLNGLOiJtIizRjDoiYSIs0Y06ImUiLNGOOiJtIizRjzoiciJ9O2Z1bmN0aW9uIGFIdChpLHMpe0s0W2ldPXN9ZnVuY3Rpb24gSjJlKGkscyx1KXtpZighSzRbc10pdGhyb3cgbmV3IEVycm9yKCJGb250IG1ldHJpY3Mgbm90IGZvdW5kIGZvciBmb250OiAiK3MrIi4iKTt2YXIgZD1pLmNoYXJDb2RlQXQoMCkscD1LNFtzXVtkXTtpZighcCYmaVswXWluIFkkZSYmKGQ9WSRlW2lbMF1dLmNoYXJDb2RlQXQoMCkscD1LNFtzXVtkXSksIXAmJnU9PT0idGV4dCImJkskZShkKSYmKHA9SzRbc11bNzddKSxwKXJldHVybntkZXB0aDpwWzBdLGhlaWdodDpwWzFdLGl0YWxpYzpwWzJdLHNrZXc6cFszXSx3aWR0aDpwWzRdfX12YXIgWjJlPXt9O2Z1bmN0aW9uIG9IdChpKXt2YXIgcztpZihpPj01P3M9MDppPj0zP3M9MTpzPTIsIVoyZVtzXSl7dmFyIHU9WjJlW3NdPXtjc3NFbVBlck11OmFRLnF1YWRbc10vMTh9O2Zvcih2YXIgZCBpbiBhUSlhUS5oYXNPd25Qcm9wZXJ0eShkKSYmKHVbZF09YVFbZF1bc10pfXJldHVybiBaMmVbc119dmFyIGNIdD1bWzEsMSwxXSxbMiwxLDFdLFszLDEsMV0sWzQsMiwxXSxbNSwyLDFdLFs2LDMsMV0sWzcsNCwyXSxbOCw2LDNdLFs5LDcsNl0sWzEwLDgsN10sWzExLDEwLDldXSxYJGU9Wy41LC42LC43LC44LC45LDEsMS4yLDEuNDQsMS43MjgsMi4wNzQsMi40ODhdLFEkZT1mdW5jdGlvbihzLHUpe3JldHVybiB1LnNpemU8Mj9zOmNIdFtzLTFdW3Uuc2l6ZS0xXX07Y2xhc3MgTTd7Y29uc3RydWN0b3Iocyl7dGhpcy5zdHlsZT12b2lkIDAsdGhpcy5jb2xvcj12b2lkIDAsdGhpcy5zaXplPXZvaWQgMCx0aGlzLnRleHRTaXplPXZvaWQgMCx0aGlzLnBoYW50b209dm9pZCAwLHRoaXMuZm9udD12b2lkIDAsdGhpcy5mb250RmFtaWx5PXZvaWQgMCx0aGlzLmZvbnRXZWlnaHQ9dm9pZCAwLHRoaXMuZm9udFNoYXBlPXZvaWQgMCx0aGlzLnNpemVNdWx0aXBsaWVyPXZvaWQgMCx0aGlzLm1heFNpemU9dm9pZCAwLHRoaXMubWluUnVsZVRoaWNrbmVzcz12b2lkIDAsdGhpcy5fZm9udE1ldHJpY3M9dm9pZCAwLHRoaXMuc3R5bGU9cy5zdHlsZSx0aGlzLmNvbG9yPXMuY29sb3IsdGhpcy5zaXplPXMuc2l6ZXx8TTcuQkFTRVNJWkUsdGhpcy50ZXh0U2l6ZT1zLnRleHRTaXplfHx0aGlzLnNpemUsdGhpcy5waGFudG9tPSEhcy5waGFudG9tLHRoaXMuZm9udD1zLmZvbnR8fCIiLHRoaXMuZm9udEZhbWlseT1zLmZvbnRGYW1pbHl8fCIiLHRoaXMuZm9udFdlaWdodD1zLmZvbnRXZWlnaHR8fCIiLHRoaXMuZm9udFNoYXBlPXMuZm9udFNoYXBlfHwiIix0aGlzLnNpemVNdWx0aXBsaWVyPVgkZVt0aGlzLnNpemUtMV0sdGhpcy5tYXhTaXplPXMubWF4U2l6ZSx0aGlzLm1pblJ1bGVUaGlja25lc3M9cy5taW5SdWxlVGhpY2tuZXNzLHRoaXMuX2ZvbnRNZXRyaWNzPXZvaWQgMH1leHRlbmQocyl7dmFyIHU9e3N0eWxlOnRoaXMuc3R5bGUsc2l6ZTp0aGlzLnNpemUsdGV4dFNpemU6dGhpcy50ZXh0U2l6ZSxjb2xvcjp0aGlzLmNvbG9yLHBoYW50b206dGhpcy5waGFudG9tLGZvbnQ6dGhpcy5mb250LGZvbnRGYW1pbHk6dGhpcy5mb250RmFtaWx5LGZvbnRXZWlnaHQ6dGhpcy5mb250V2VpZ2h0LGZvbnRTaGFwZTp0aGlzLmZvbnRTaGFwZSxtYXhTaXplOnRoaXMubWF4U2l6ZSxtaW5SdWxlVGhpY2tuZXNzOnRoaXMubWluUnVsZVRoaWNrbmVzc307Zm9yKHZhciBkIGluIHMpcy5oYXNPd25Qcm9wZXJ0eShkKSYmKHVbZF09c1tkXSk7cmV0dXJuIG5ldyBNNyh1KX1oYXZpbmdTdHlsZShzKXtyZXR1cm4gdGhpcy5zdHlsZT09PXM/dGhpczp0aGlzLmV4dGVuZCh7c3R5bGU6cyxzaXplOlEkZSh0aGlzLnRleHRTaXplLHMpfSl9aGF2aW5nQ3JhbXBlZFN0eWxlKCl7cmV0dXJuIHRoaXMuaGF2aW5nU3R5bGUodGhpcy5zdHlsZS5jcmFtcCgpKX1oYXZpbmdTaXplKHMpe3JldHVybiB0aGlzLnNpemU9PT1zJiZ0aGlzLnRleHRTaXplPT09cz90aGlzOnRoaXMuZXh0ZW5kKHtzdHlsZTp0aGlzLnN0eWxlLnRleHQoKSxzaXplOnMsdGV4dFNpemU6cyxzaXplTXVsdGlwbGllcjpYJGVbcy0xXX0pfWhhdmluZ0Jhc2VTdHlsZShzKXtzPXN8fHRoaXMuc3R5bGUudGV4dCgpO3ZhciB1PVEkZShNNy5CQVNFU0laRSxzKTtyZXR1cm4gdGhpcy5zaXplPT09dSYmdGhpcy50ZXh0U2l6ZT09PU03LkJBU0VTSVpFJiZ0aGlzLnN0eWxlPT09cz90aGlzOnRoaXMuZXh0ZW5kKHtzdHlsZTpzLHNpemU6dX0pfWhhdmluZ0Jhc2VTaXppbmcoKXt2YXIgcztzd2l0Y2godGhpcy5zdHlsZS5pZCl7Y2FzZSA0OmNhc2UgNTpzPTM7YnJlYWs7Y2FzZSA2OmNhc2UgNzpzPTE7YnJlYWs7ZGVmYXVsdDpzPTZ9cmV0dXJuIHRoaXMuZXh0ZW5kKHtzdHlsZTp0aGlzLnN0eWxlLnRleHQoKSxzaXplOnN9KX13aXRoQ29sb3Iocyl7cmV0dXJuIHRoaXMuZXh0ZW5kKHtjb2xvcjpzfSl9d2l0aFBoYW50b20oKXtyZXR1cm4gdGhpcy5leHRlbmQoe3BoYW50b206ITB9KX13aXRoRm9udChzKXtyZXR1cm4gdGhpcy5leHRlbmQoe2ZvbnQ6c30pfXdpdGhUZXh0Rm9udEZhbWlseShzKXtyZXR1cm4gdGhpcy5leHRlbmQoe2ZvbnRGYW1pbHk6cyxmb250OiIifSl9d2l0aFRleHRGb250V2VpZ2h0KHMpe3JldHVybiB0aGlzLmV4dGVuZCh7Zm9udFdlaWdodDpzLGZvbnQ6IiJ9KX13aXRoVGV4dEZvbnRTaGFwZShzKXtyZXR1cm4gdGhpcy5leHRlbmQoe2ZvbnRTaGFwZTpzLGZvbnQ6IiJ9KX1zaXppbmdDbGFzc2VzKHMpe3JldHVybiBzLnNpemUhPT10aGlzLnNpemU/WyJzaXppbmciLCJyZXNldC1zaXplIitzLnNpemUsInNpemUiK3RoaXMuc2l6ZV06W119YmFzZVNpemluZ0NsYXNzZXMoKXtyZXR1cm4gdGhpcy5zaXplIT09TTcuQkFTRVNJWkU/WyJzaXppbmciLCJyZXNldC1zaXplIit0aGlzLnNpemUsInNpemUiK003LkJBU0VTSVpFXTpbXX1mb250TWV0cmljcygpe3JldHVybiB0aGlzLl9mb250TWV0cmljc3x8KHRoaXMuX2ZvbnRNZXRyaWNzPW9IdCh0aGlzLnNpemUpKSx0aGlzLl9mb250TWV0cmljc31nZXRDb2xvcigpe3JldHVybiB0aGlzLnBoYW50b20/InRyYW5zcGFyZW50Ijp0aGlzLmNvbG9yfX1NNy5CQVNFU0laRT02O3ZhciBlYmU9e3B0OjEsbW06NzIyNy8yNTQwLGNtOjcyMjcvMjU0LGluOjcyLjI3LGJwOjgwMy84MDAscGM6MTIsZGQ6MTIzOC8xMTU3LGNjOjE0ODU2LzExNTcsbmQ6Njg1LzY0MixuYzoxMzcwLzEwNyxzcDoxLzY1NTM2LHB4OjgwMy84MDB9LHVIdD17ZXg6ITAsZW06ITAsbXU6ITB9LEokZT1mdW5jdGlvbihzKXtyZXR1cm4gdHlwZW9mIHMhPSJzdHJpbmciJiYocz1zLnVuaXQpLHMgaW4gZWJlfHxzIGluIHVIdHx8cz09PSJleCJ9LFVoPWZ1bmN0aW9uKHMsdSl7dmFyIGQ7aWYocy51bml0IGluIGViZSlkPWViZVtzLnVuaXRdL3UuZm9udE1ldHJpY3MoKS5wdFBlckVtL3Uuc2l6ZU11bHRpcGxpZXI7ZWxzZSBpZihzLnVuaXQ9PT0ibXUiKWQ9dS5mb250TWV0cmljcygpLmNzc0VtUGVyTXU7ZWxzZXt2YXIgcDtpZih1LnN0eWxlLmlzVGlnaHQoKT9wPXUuaGF2aW5nU3R5bGUodS5zdHlsZS50ZXh0KCkpOnA9dSxzLnVuaXQ9PT0iZXgiKWQ9cC5mb250TWV0cmljcygpLnhIZWlnaHQ7ZWxzZSBpZihzLnVuaXQ9PT0iZW0iKWQ9cC5mb250TWV0cmljcygpLnF1YWQ7ZWxzZSB0aHJvdyBuZXcgQ2koIkludmFsaWQgdW5pdDogJyIrcy51bml0KyInIik7cCE9PXUmJihkKj1wLnNpemVNdWx0aXBsaWVyL3Uuc2l6ZU11bHRpcGxpZXIpfXJldHVybiBNYXRoLm1pbihzLm51bWJlcipkLHUubWF4U2l6ZSl9LFJpPWZ1bmN0aW9uKHMpe3JldHVybitzLnRvRml4ZWQoNCkrImVtIn0sVDk9ZnVuY3Rpb24ocyl7cmV0dXJuIHMuZmlsdGVyKHU9PnUpLmpvaW4oIiAiKX0sWiRlPWZ1bmN0aW9uKHMsdSxkKXtpZih0aGlzLmNsYXNzZXM9c3x8W10sdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMuaGVpZ2h0PTAsdGhpcy5kZXB0aD0wLHRoaXMubWF4Rm9udFNpemU9MCx0aGlzLnN0eWxlPWR8fHt9LHUpe3Uuc3R5bGUuaXNUaWdodCgpJiZ0aGlzLmNsYXNzZXMucHVzaCgibXRpZ2h0Iik7dmFyIHA9dS5nZXRDb2xvcigpO3AmJih0aGlzLnN0eWxlLmNvbG9yPXApfX0sZXplPWZ1bmN0aW9uKHMpe3ZhciB1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocyk7dS5jbGFzc05hbWU9VDkodGhpcy5jbGFzc2VzKTtmb3IodmFyIGQgaW4gdGhpcy5zdHlsZSl0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KGQpJiYodS5zdHlsZVtkXT10aGlzLnN0eWxlW2RdKTtmb3IodmFyIHAgaW4gdGhpcy5hdHRyaWJ1dGVzKXRoaXMuYXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eShwKSYmdS5zZXRBdHRyaWJ1dGUocCx0aGlzLmF0dHJpYnV0ZXNbcF0pO2Zvcih2YXIgdj0wO3Y8dGhpcy5jaGlsZHJlbi5sZW5ndGg7disrKXUuYXBwZW5kQ2hpbGQodGhpcy5jaGlsZHJlblt2XS50b05vZGUoKSk7cmV0dXJuIHV9LHR6ZT1mdW5jdGlvbihzKXt2YXIgdT0iPCIrczt0aGlzLmNsYXNzZXMubGVuZ3RoJiYodSs9JyBjbGFzcz0iJytZYS5lc2NhcGUoVDkodGhpcy5jbGFzc2VzKSkrJyInKTt2YXIgZD0iIjtmb3IodmFyIHAgaW4gdGhpcy5zdHlsZSl0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KHApJiYoZCs9WWEuaHlwaGVuYXRlKHApKyI6Iit0aGlzLnN0eWxlW3BdKyI7Iik7ZCYmKHUrPScgc3R5bGU9IicrWWEuZXNjYXBlKGQpKyciJyk7Zm9yKHZhciB2IGluIHRoaXMuYXR0cmlidXRlcyl0aGlzLmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkodikmJih1Kz0iICIrdisnPSInK1lhLmVzY2FwZSh0aGlzLmF0dHJpYnV0ZXNbdl0pKyciJyk7dSs9Ij4iO2Zvcih2YXIgYj0wO2I8dGhpcy5jaGlsZHJlbi5sZW5ndGg7YisrKXUrPXRoaXMuY2hpbGRyZW5bYl0udG9NYXJrdXAoKTtyZXR1cm4gdSs9IjwvIitzKyI+Iix1fTtjbGFzcyBjUntjb25zdHJ1Y3RvcihzLHUsZCxwKXt0aGlzLmNoaWxkcmVuPXZvaWQgMCx0aGlzLmF0dHJpYnV0ZXM9dm9pZCAwLHRoaXMuY2xhc3Nlcz12b2lkIDAsdGhpcy5oZWlnaHQ9dm9pZCAwLHRoaXMuZGVwdGg9dm9pZCAwLHRoaXMud2lkdGg9dm9pZCAwLHRoaXMubWF4Rm9udFNpemU9dm9pZCAwLHRoaXMuc3R5bGU9dm9pZCAwLFokZS5jYWxsKHRoaXMscyxkLHApLHRoaXMuY2hpbGRyZW49dXx8W119c2V0QXR0cmlidXRlKHMsdSl7dGhpcy5hdHRyaWJ1dGVzW3NdPXV9aGFzQ2xhc3Mocyl7cmV0dXJuIFlhLmNvbnRhaW5zKHRoaXMuY2xhc3NlcyxzKX10b05vZGUoKXtyZXR1cm4gZXplLmNhbGwodGhpcywic3BhbiIpfXRvTWFya3VwKCl7cmV0dXJuIHR6ZS5jYWxsKHRoaXMsInNwYW4iKX19Y2xhc3MgdGJle2NvbnN0cnVjdG9yKHMsdSxkLHApe3RoaXMuY2hpbGRyZW49dm9pZCAwLHRoaXMuYXR0cmlidXRlcz12b2lkIDAsdGhpcy5jbGFzc2VzPXZvaWQgMCx0aGlzLmhlaWdodD12b2lkIDAsdGhpcy5kZXB0aD12b2lkIDAsdGhpcy5tYXhGb250U2l6ZT12b2lkIDAsdGhpcy5zdHlsZT12b2lkIDAsWiRlLmNhbGwodGhpcyx1LHApLHRoaXMuY2hpbGRyZW49ZHx8W10sdGhpcy5zZXRBdHRyaWJ1dGUoImhyZWYiLHMpfXNldEF0dHJpYnV0ZShzLHUpe3RoaXMuYXR0cmlidXRlc1tzXT11fWhhc0NsYXNzKHMpe3JldHVybiBZYS5jb250YWlucyh0aGlzLmNsYXNzZXMscyl9dG9Ob2RlKCl7cmV0dXJuIGV6ZS5jYWxsKHRoaXMsImEiKX10b01hcmt1cCgpe3JldHVybiB0emUuY2FsbCh0aGlzLCJhIil9fWNsYXNzIGxIdHtjb25zdHJ1Y3RvcihzLHUsZCl7dGhpcy5zcmM9dm9pZCAwLHRoaXMuYWx0PXZvaWQgMCx0aGlzLmNsYXNzZXM9dm9pZCAwLHRoaXMuaGVpZ2h0PXZvaWQgMCx0aGlzLmRlcHRoPXZvaWQgMCx0aGlzLm1heEZvbnRTaXplPXZvaWQgMCx0aGlzLnN0eWxlPXZvaWQgMCx0aGlzLmFsdD11LHRoaXMuc3JjPXMsdGhpcy5jbGFzc2VzPVsibW9yZCJdLHRoaXMuc3R5bGU9ZH1oYXNDbGFzcyhzKXtyZXR1cm4gWWEuY29udGFpbnModGhpcy5jbGFzc2VzLHMpfXRvTm9kZSgpe3ZhciBzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpO3Muc3JjPXRoaXMuc3JjLHMuYWx0PXRoaXMuYWx0LHMuY2xhc3NOYW1lPSJtb3JkIjtmb3IodmFyIHUgaW4gdGhpcy5zdHlsZSl0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KHUpJiYocy5zdHlsZVt1XT10aGlzLnN0eWxlW3VdKTtyZXR1cm4gc310b01hcmt1cCgpe3ZhciBzPSI8aW1nICBzcmM9JyIrdGhpcy5zcmMrIiAnYWx0PSciK3RoaXMuYWx0KyInICIsdT0iIjtmb3IodmFyIGQgaW4gdGhpcy5zdHlsZSl0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KGQpJiYodSs9WWEuaHlwaGVuYXRlKGQpKyI6Iit0aGlzLnN0eWxlW2RdKyI7Iik7cmV0dXJuIHUmJihzKz0nIHN0eWxlPSInK1lhLmVzY2FwZSh1KSsnIicpLHMrPSInLz4iLHN9fXZhciBoSHQ9e8OuOiLEscyCIizDrzoixLHMiCIsw606IsSxzIEiLMOsOiLEscyAIn07Y2xhc3MgQnZ7Y29uc3RydWN0b3Iocyx1LGQscCx2LGIseSxUKXt0aGlzLnRleHQ9dm9pZCAwLHRoaXMuaGVpZ2h0PXZvaWQgMCx0aGlzLmRlcHRoPXZvaWQgMCx0aGlzLml0YWxpYz12b2lkIDAsdGhpcy5za2V3PXZvaWQgMCx0aGlzLndpZHRoPXZvaWQgMCx0aGlzLm1heEZvbnRTaXplPXZvaWQgMCx0aGlzLmNsYXNzZXM9dm9pZCAwLHRoaXMuc3R5bGU9dm9pZCAwLHRoaXMudGV4dD1zLHRoaXMuaGVpZ2h0PXV8fDAsdGhpcy5kZXB0aD1kfHwwLHRoaXMuaXRhbGljPXB8fDAsdGhpcy5za2V3PXZ8fDAsdGhpcy53aWR0aD1ifHwwLHRoaXMuY2xhc3Nlcz15fHxbXSx0aGlzLnN0eWxlPVR8fHt9LHRoaXMubWF4Rm9udFNpemU9MDt2YXIgXz1ZcXQodGhpcy50ZXh0LmNoYXJDb2RlQXQoMCkpO18mJnRoaXMuY2xhc3Nlcy5wdXNoKF8rIl9mYWxsYmFjayIpLC9bw67Dr8Otw6xdLy50ZXN0KHRoaXMudGV4dCkmJih0aGlzLnRleHQ9aEh0W3RoaXMudGV4dF0pfWhhc0NsYXNzKHMpe3JldHVybiBZYS5jb250YWlucyh0aGlzLmNsYXNzZXMscyl9dG9Ob2RlKCl7dmFyIHM9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGhpcy50ZXh0KSx1PW51bGw7dGhpcy5pdGFsaWM+MCYmKHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpLHUuc3R5bGUubWFyZ2luUmlnaHQ9UmkodGhpcy5pdGFsaWMpKSx0aGlzLmNsYXNzZXMubGVuZ3RoPjAmJih1PXV8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKSx1LmNsYXNzTmFtZT1UOSh0aGlzLmNsYXNzZXMpKTtmb3IodmFyIGQgaW4gdGhpcy5zdHlsZSl0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KGQpJiYodT11fHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIiksdS5zdHlsZVtkXT10aGlzLnN0eWxlW2RdKTtyZXR1cm4gdT8odS5hcHBlbmRDaGlsZChzKSx1KTpzfXRvTWFya3VwKCl7dmFyIHM9ITEsdT0iPHNwYW4iO3RoaXMuY2xhc3Nlcy5sZW5ndGgmJihzPSEwLHUrPScgY2xhc3M9IicsdSs9WWEuZXNjYXBlKFQ5KHRoaXMuY2xhc3NlcykpLHUrPSciJyk7dmFyIGQ9IiI7dGhpcy5pdGFsaWM+MCYmKGQrPSJtYXJnaW4tcmlnaHQ6Iit0aGlzLml0YWxpYysiZW07Iik7Zm9yKHZhciBwIGluIHRoaXMuc3R5bGUpdGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShwKSYmKGQrPVlhLmh5cGhlbmF0ZShwKSsiOiIrdGhpcy5zdHlsZVtwXSsiOyIpO2QmJihzPSEwLHUrPScgc3R5bGU9IicrWWEuZXNjYXBlKGQpKyciJyk7dmFyIHY9WWEuZXNjYXBlKHRoaXMudGV4dCk7cmV0dXJuIHM/KHUrPSI+Iix1Kz12LHUrPSI8L3NwYW4+Iix1KTp2fX1jbGFzcyBEN3tjb25zdHJ1Y3RvcihzLHUpe3RoaXMuY2hpbGRyZW49dm9pZCAwLHRoaXMuYXR0cmlidXRlcz12b2lkIDAsdGhpcy5jaGlsZHJlbj1zfHxbXSx0aGlzLmF0dHJpYnV0ZXM9dXx8e319dG9Ob2RlKCl7dmFyIHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhzLCJzdmciKTtmb3IodmFyIGQgaW4gdGhpcy5hdHRyaWJ1dGVzKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMsZCkmJnUuc2V0QXR0cmlidXRlKGQsdGhpcy5hdHRyaWJ1dGVzW2RdKTtmb3IodmFyIHA9MDtwPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3ArKyl1LmFwcGVuZENoaWxkKHRoaXMuY2hpbGRyZW5bcF0udG9Ob2RlKCkpO3JldHVybiB1fXRvTWFya3VwKCl7dmFyIHM9JzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIic7Zm9yKHZhciB1IGluIHRoaXMuYXR0cmlidXRlcylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLHUpJiYocys9IiAiK3UrIj0nIit0aGlzLmF0dHJpYnV0ZXNbdV0rIiciKTtzKz0iPiI7Zm9yKHZhciBkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtkKyspcys9dGhpcy5jaGlsZHJlbltkXS50b01hcmt1cCgpO3JldHVybiBzKz0iPC9zdmc+IixzfX1jbGFzcyBDOXtjb25zdHJ1Y3RvcihzLHUpe3RoaXMucGF0aE5hbWU9dm9pZCAwLHRoaXMuYWx0ZXJuYXRlPXZvaWQgMCx0aGlzLnBhdGhOYW1lPXMsdGhpcy5hbHRlcm5hdGU9dX10b05vZGUoKXt2YXIgcz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHMsInBhdGgiKTtyZXR1cm4gdGhpcy5hbHRlcm5hdGU/dS5zZXRBdHRyaWJ1dGUoImQiLHRoaXMuYWx0ZXJuYXRlKTp1LnNldEF0dHJpYnV0ZSgiZCIsVyRlW3RoaXMucGF0aE5hbWVdKSx1fXRvTWFya3VwKCl7cmV0dXJuIHRoaXMuYWx0ZXJuYXRlPyI8cGF0aCBkPSciK3RoaXMuYWx0ZXJuYXRlKyInLz4iOiI8cGF0aCBkPSciK1ckZVt0aGlzLnBhdGhOYW1lXSsiJy8+In19Y2xhc3MgbmJle2NvbnN0cnVjdG9yKHMpe3RoaXMuYXR0cmlidXRlcz12b2lkIDAsdGhpcy5hdHRyaWJ1dGVzPXN8fHt9fXRvTm9kZSgpe3ZhciBzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMocywibGluZSIpO2Zvcih2YXIgZCBpbiB0aGlzLmF0dHJpYnV0ZXMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcyxkKSYmdS5zZXRBdHRyaWJ1dGUoZCx0aGlzLmF0dHJpYnV0ZXNbZF0pO3JldHVybiB1fXRvTWFya3VwKCl7dmFyIHM9IjxsaW5lIjtmb3IodmFyIHUgaW4gdGhpcy5hdHRyaWJ1dGVzKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMsdSkmJihzKz0iICIrdSsiPSciK3RoaXMuYXR0cmlidXRlc1t1XSsiJyIpO3JldHVybiBzKz0iLz4iLHN9fWZ1bmN0aW9uIG56ZShpKXtpZihpIGluc3RhbmNlb2YgQnYpcmV0dXJuIGk7dGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBzeW1ib2xOb2RlIGJ1dCBnb3QgIitTdHJpbmcoaSkrIi4iKX1mdW5jdGlvbiBmSHQoaSl7aWYoaSBpbnN0YW5jZW9mIGNSKXJldHVybiBpO3Rocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgc3BhbjxIdG1sRG9tTm9kZT4gYnV0IGdvdCAiK1N0cmluZyhpKSsiLiIpfXZhciBkSHQ9e2JpbjoxLGNsb3NlOjEsaW5uZXI6MSxvcGVuOjEscHVuY3Q6MSxyZWw6MX0sZ0h0PXsiYWNjZW50LXRva2VuIjoxLG1hdGhvcmQ6MSwib3AtdG9rZW4iOjEsc3BhY2luZzoxLHRleHRvcmQ6MX0sVWw9e21hdGg6e30sdGV4dDp7fX07ZnVuY3Rpb24gd2UoaSxzLHUsZCxwLHYpe1VsW2ldW3BdPXtmb250OnMsZ3JvdXA6dSxyZXBsYWNlOmR9LHYmJmQmJihVbFtpXVtkXT1VbFtpXVtwXSl9dmFyIEFlPSJtYXRoIixzaT0idGV4dCIsVWU9Im1haW4iLCR0PSJhbXMiLHdoPSJhY2NlbnQtdG9rZW4iLGxzPSJiaW4iLERwPSJjbG9zZSIsTkQ9ImlubmVyIixDYT0ibWF0aG9yZCIsTjA9Im9wLXRva2VuIixobT0ib3BlbiIsb1E9InB1bmN0IixIdD0icmVsIixJNz0ic3BhY2luZyIsbW49InRleHRvcmQiO3dlKEFlLFVlLEh0LCLiiaEiLCJcXGVxdWl2IiwhMCksd2UoQWUsVWUsSHQsIuKJuiIsIlxccHJlYyIsITApLHdlKEFlLFVlLEh0LCLiibsiLCJcXHN1Y2MiLCEwKSx3ZShBZSxVZSxIdCwi4oi8IiwiXFxzaW0iLCEwKSx3ZShBZSxVZSxIdCwi4oqlIiwiXFxwZXJwIiksd2UoQWUsVWUsSHQsIuKqryIsIlxccHJlY2VxIiwhMCksd2UoQWUsVWUsSHQsIuKqsCIsIlxcc3VjY2VxIiwhMCksd2UoQWUsVWUsSHQsIuKJgyIsIlxcc2ltZXEiLCEwKSx3ZShBZSxVZSxIdCwi4oijIiwiXFxtaWQiLCEwKSx3ZShBZSxVZSxIdCwi4omqIiwiXFxsbCIsITApLHdlKEFlLFVlLEh0LCLiiasiLCJcXGdnIiwhMCksd2UoQWUsVWUsSHQsIuKJjSIsIlxcYXN5bXAiLCEwKSx3ZShBZSxVZSxIdCwi4oilIiwiXFxwYXJhbGxlbCIpLHdlKEFlLFVlLEh0LCLii4giLCJcXGJvd3RpZSIsITApLHdlKEFlLFVlLEh0LCLijKMiLCJcXHNtaWxlIiwhMCksd2UoQWUsVWUsSHQsIuKKkSIsIlxcc3FzdWJzZXRlcSIsITApLHdlKEFlLFVlLEh0LCLiipIiLCJcXHNxc3Vwc2V0ZXEiLCEwKSx3ZShBZSxVZSxIdCwi4omQIiwiXFxkb3RlcSIsITApLHdlKEFlLFVlLEh0LCLijKIiLCJcXGZyb3duIiwhMCksd2UoQWUsVWUsSHQsIuKIiyIsIlxcbmkiLCEwKSx3ZShBZSxVZSxIdCwi4oidIiwiXFxwcm9wdG8iLCEwKSx3ZShBZSxVZSxIdCwi4oqiIiwiXFx2ZGFzaCIsITApLHdlKEFlLFVlLEh0LCLiiqMiLCJcXGRhc2h2IiwhMCksd2UoQWUsVWUsSHQsIuKIiyIsIlxcb3ducyIpLHdlKEFlLFVlLG9RLCIuIiwiXFxsZG90cCIpLHdlKEFlLFVlLG9RLCLii4UiLCJcXGNkb3RwIiksd2UoQWUsVWUsbW4sIiMiLCJcXCMiKSx3ZShzaSxVZSxtbiwiIyIsIlxcIyIpLHdlKEFlLFVlLG1uLCImIiwiXFwmIiksd2Uoc2ksVWUsbW4sIiYiLCJcXCYiKSx3ZShBZSxVZSxtbiwi4oS1IiwiXFxhbGVwaCIsITApLHdlKEFlLFVlLG1uLCLiiIAiLCJcXGZvcmFsbCIsITApLHdlKEFlLFVlLG1uLCLihI8iLCJcXGhiYXIiLCEwKSx3ZShBZSxVZSxtbiwi4oiDIiwiXFxleGlzdHMiLCEwKSx3ZShBZSxVZSxtbiwi4oiHIiwiXFxuYWJsYSIsITApLHdlKEFlLFVlLG1uLCLima0iLCJcXGZsYXQiLCEwKSx3ZShBZSxVZSxtbiwi4oSTIiwiXFxlbGwiLCEwKSx3ZShBZSxVZSxtbiwi4pmuIiwiXFxuYXR1cmFsIiwhMCksd2UoQWUsVWUsbW4sIuKZoyIsIlxcY2x1YnN1aXQiLCEwKSx3ZShBZSxVZSxtbiwi4oSYIiwiXFx3cCIsITApLHdlKEFlLFVlLG1uLCLima8iLCJcXHNoYXJwIiwhMCksd2UoQWUsVWUsbW4sIuKZoiIsIlxcZGlhbW9uZHN1aXQiLCEwKSx3ZShBZSxVZSxtbiwi4oScIiwiXFxSZSIsITApLHdlKEFlLFVlLG1uLCLimaEiLCJcXGhlYXJ0c3VpdCIsITApLHdlKEFlLFVlLG1uLCLihJEiLCJcXEltIiwhMCksd2UoQWUsVWUsbW4sIuKZoCIsIlxcc3BhZGVzdWl0IiwhMCksd2UoQWUsVWUsbW4sIsKnIiwiXFxTIiwhMCksd2Uoc2ksVWUsbW4sIsKnIiwiXFxTIiksd2UoQWUsVWUsbW4sIsK2IiwiXFxQIiwhMCksd2Uoc2ksVWUsbW4sIsK2IiwiXFxQIiksd2UoQWUsVWUsbW4sIuKAoCIsIlxcZGFnIiksd2Uoc2ksVWUsbW4sIuKAoCIsIlxcZGFnIiksd2Uoc2ksVWUsbW4sIuKAoCIsIlxcdGV4dGRhZ2dlciIpLHdlKEFlLFVlLG1uLCLigKEiLCJcXGRkYWciKSx3ZShzaSxVZSxtbiwi4oChIiwiXFxkZGFnIiksd2Uoc2ksVWUsbW4sIuKAoSIsIlxcdGV4dGRhZ2dlcmRibCIpLHdlKEFlLFVlLERwLCLijrEiLCJcXHJtb3VzdGFjaGUiLCEwKSx3ZShBZSxVZSxobSwi4o6wIiwiXFxsbW91c3RhY2hlIiwhMCksd2UoQWUsVWUsRHAsIuKfryIsIlxccmdyb3VwIiwhMCksd2UoQWUsVWUsaG0sIuKfriIsIlxcbGdyb3VwIiwhMCksd2UoQWUsVWUsbHMsIuKIkyIsIlxcbXAiLCEwKSx3ZShBZSxVZSxscywi4oqWIiwiXFxvbWludXMiLCEwKSx3ZShBZSxVZSxscywi4oqOIiwiXFx1cGx1cyIsITApLHdlKEFlLFVlLGxzLCLiipMiLCJcXHNxY2FwIiwhMCksd2UoQWUsVWUsbHMsIuKIlyIsIlxcYXN0Iiksd2UoQWUsVWUsbHMsIuKKlCIsIlxcc3FjdXAiLCEwKSx3ZShBZSxVZSxscywi4pevIiwiXFxiaWdjaXJjIiwhMCksd2UoQWUsVWUsbHMsIuKImSIsIlxcYnVsbGV0IiwhMCksd2UoQWUsVWUsbHMsIuKAoSIsIlxcZGRhZ2dlciIpLHdlKEFlLFVlLGxzLCLiiYAiLCJcXHdyIiwhMCksd2UoQWUsVWUsbHMsIuKovyIsIlxcYW1hbGciKSx3ZShBZSxVZSxscywiJiIsIlxcQW5kIiksd2UoQWUsVWUsSHQsIuKftSIsIlxcbG9uZ2xlZnRhcnJvdyIsITApLHdlKEFlLFVlLEh0LCLih5AiLCJcXExlZnRhcnJvdyIsITApLHdlKEFlLFVlLEh0LCLin7giLCJcXExvbmdsZWZ0YXJyb3ciLCEwKSx3ZShBZSxVZSxIdCwi4p+2IiwiXFxsb25ncmlnaHRhcnJvdyIsITApLHdlKEFlLFVlLEh0LCLih5IiLCJcXFJpZ2h0YXJyb3ciLCEwKSx3ZShBZSxVZSxIdCwi4p+5IiwiXFxMb25ncmlnaHRhcnJvdyIsITApLHdlKEFlLFVlLEh0LCLihpQiLCJcXGxlZnRyaWdodGFycm93IiwhMCksd2UoQWUsVWUsSHQsIuKftyIsIlxcbG9uZ2xlZnRyaWdodGFycm93IiwhMCksd2UoQWUsVWUsSHQsIuKHlCIsIlxcTGVmdHJpZ2h0YXJyb3ciLCEwKSx3ZShBZSxVZSxIdCwi4p+6IiwiXFxMb25nbGVmdHJpZ2h0YXJyb3ciLCEwKSx3ZShBZSxVZSxIdCwi4oamIiwiXFxtYXBzdG8iLCEwKSx3ZShBZSxVZSxIdCwi4p+8IiwiXFxsb25nbWFwc3RvIiwhMCksd2UoQWUsVWUsSHQsIuKGlyIsIlxcbmVhcnJvdyIsITApLHdlKEFlLFVlLEh0LCLihqkiLCJcXGhvb2tsZWZ0YXJyb3ciLCEwKSx3ZShBZSxVZSxIdCwi4oaqIiwiXFxob29rcmlnaHRhcnJvdyIsITApLHdlKEFlLFVlLEh0LCLihpgiLCJcXHNlYXJyb3ciLCEwKSx3ZShBZSxVZSxIdCwi4oa8IiwiXFxsZWZ0aGFycG9vbnVwIiwhMCksd2UoQWUsVWUsSHQsIuKHgCIsIlxccmlnaHRoYXJwb29udXAiLCEwKSx3ZShBZSxVZSxIdCwi4oaZIiwiXFxzd2Fycm93IiwhMCksd2UoQWUsVWUsSHQsIuKGvSIsIlxcbGVmdGhhcnBvb25kb3duIiwhMCksd2UoQWUsVWUsSHQsIuKHgSIsIlxccmlnaHRoYXJwb29uZG93biIsITApLHdlKEFlLFVlLEh0LCLihpYiLCJcXG53YXJyb3ciLCEwKSx3ZShBZSxVZSxIdCwi4oeMIiwiXFxyaWdodGxlZnRoYXJwb29ucyIsITApLHdlKEFlLCR0LEh0LCLiia4iLCJcXG5sZXNzIiwhMCksd2UoQWUsJHQsSHQsIu6AkCIsIlxcQG5sZXFzbGFudCIpLHdlKEFlLCR0LEh0LCLugJEiLCJcXEBubGVxcSIpLHdlKEFlLCR0LEh0LCLiqociLCJcXGxuZXEiLCEwKSx3ZShBZSwkdCxIdCwi4omoIiwiXFxsbmVxcSIsITApLHdlKEFlLCR0LEh0LCLugIwiLCJcXEBsdmVydG5lcXEiKSx3ZShBZSwkdCxIdCwi4oumIiwiXFxsbnNpbSIsITApLHdlKEFlLCR0LEh0LCLiqokiLCJcXGxuYXBwcm94IiwhMCksd2UoQWUsJHQsSHQsIuKKgCIsIlxcbnByZWMiLCEwKSx3ZShBZSwkdCxIdCwi4ougIiwiXFxucHJlY2VxIiwhMCksd2UoQWUsJHQsSHQsIuKLqCIsIlxccHJlY25zaW0iLCEwKSx3ZShBZSwkdCxIdCwi4qq5IiwiXFxwcmVjbmFwcHJveCIsITApLHdlKEFlLCR0LEh0LCLiiYEiLCJcXG5zaW0iLCEwKSx3ZShBZSwkdCxIdCwi7oCGIiwiXFxAbnNob3J0bWlkIiksd2UoQWUsJHQsSHQsIuKIpCIsIlxcbm1pZCIsITApLHdlKEFlLCR0LEh0LCLiiqwiLCJcXG52ZGFzaCIsITApLHdlKEFlLCR0LEh0LCLiiq0iLCJcXG52RGFzaCIsITApLHdlKEFlLCR0LEh0LCLii6oiLCJcXG50cmlhbmdsZWxlZnQiKSx3ZShBZSwkdCxIdCwi4ousIiwiXFxudHJpYW5nbGVsZWZ0ZXEiLCEwKSx3ZShBZSwkdCxIdCwi4oqKIiwiXFxzdWJzZXRuZXEiLCEwKSx3ZShBZSwkdCxIdCwi7oCaIiwiXFxAdmFyc3Vic2V0bmVxIiksd2UoQWUsJHQsSHQsIuKriyIsIlxcc3Vic2V0bmVxcSIsITApLHdlKEFlLCR0LEh0LCLugJciLCJcXEB2YXJzdWJzZXRuZXFxIiksd2UoQWUsJHQsSHQsIuKJryIsIlxcbmd0ciIsITApLHdlKEFlLCR0LEh0LCLugI8iLCJcXEBuZ2Vxc2xhbnQiKSx3ZShBZSwkdCxIdCwi7oCOIiwiXFxAbmdlcXEiKSx3ZShBZSwkdCxIdCwi4qqIIiwiXFxnbmVxIiwhMCksd2UoQWUsJHQsSHQsIuKJqSIsIlxcZ25lcXEiLCEwKSx3ZShBZSwkdCxIdCwi7oCNIiwiXFxAZ3ZlcnRuZXFxIiksd2UoQWUsJHQsSHQsIuKLpyIsIlxcZ25zaW0iLCEwKSx3ZShBZSwkdCxIdCwi4qqKIiwiXFxnbmFwcHJveCIsITApLHdlKEFlLCR0LEh0LCLiioEiLCJcXG5zdWNjIiwhMCksd2UoQWUsJHQsSHQsIuKLoSIsIlxcbnN1Y2NlcSIsITApLHdlKEFlLCR0LEh0LCLii6kiLCJcXHN1Y2Nuc2ltIiwhMCksd2UoQWUsJHQsSHQsIuKquiIsIlxcc3VjY25hcHByb3giLCEwKSx3ZShBZSwkdCxIdCwi4omGIiwiXFxuY29uZyIsITApLHdlKEFlLCR0LEh0LCLugIciLCJcXEBuc2hvcnRwYXJhbGxlbCIpLHdlKEFlLCR0LEh0LCLiiKYiLCJcXG5wYXJhbGxlbCIsITApLHdlKEFlLCR0LEh0LCLiiq8iLCJcXG5WRGFzaCIsITApLHdlKEFlLCR0LEh0LCLii6siLCJcXG50cmlhbmdsZXJpZ2h0Iiksd2UoQWUsJHQsSHQsIuKLrSIsIlxcbnRyaWFuZ2xlcmlnaHRlcSIsITApLHdlKEFlLCR0LEh0LCLugJgiLCJcXEBuc3Vwc2V0ZXFxIiksd2UoQWUsJHQsSHQsIuKKiyIsIlxcc3Vwc2V0bmVxIiwhMCksd2UoQWUsJHQsSHQsIu6AmyIsIlxcQHZhcnN1cHNldG5lcSIpLHdlKEFlLCR0LEh0LCLiq4wiLCJcXHN1cHNldG5lcXEiLCEwKSx3ZShBZSwkdCxIdCwi7oCZIiwiXFxAdmFyc3Vwc2V0bmVxcSIpLHdlKEFlLCR0LEh0LCLiiq4iLCJcXG5WZGFzaCIsITApLHdlKEFlLCR0LEh0LCLiqrUiLCJcXHByZWNuZXFxIiwhMCksd2UoQWUsJHQsSHQsIuKqtiIsIlxcc3VjY25lcXEiLCEwKSx3ZShBZSwkdCxIdCwi7oCWIiwiXFxAbnN1YnNldGVxcSIpLHdlKEFlLCR0LGxzLCLiirQiLCJcXHVubGhkIiksd2UoQWUsJHQsbHMsIuKKtSIsIlxcdW5yaGQiKSx3ZShBZSwkdCxIdCwi4oaaIiwiXFxubGVmdGFycm93IiwhMCksd2UoQWUsJHQsSHQsIuKGmyIsIlxcbnJpZ2h0YXJyb3ciLCEwKSx3ZShBZSwkdCxIdCwi4oeNIiwiXFxuTGVmdGFycm93IiwhMCksd2UoQWUsJHQsSHQsIuKHjyIsIlxcblJpZ2h0YXJyb3ciLCEwKSx3ZShBZSwkdCxIdCwi4oauIiwiXFxubGVmdHJpZ2h0YXJyb3ciLCEwKSx3ZShBZSwkdCxIdCwi4oeOIiwiXFxuTGVmdHJpZ2h0YXJyb3ciLCEwKSx3ZShBZSwkdCxIdCwi4pazIiwiXFx2YXJ0cmlhbmdsZSIpLHdlKEFlLCR0LG1uLCLihI8iLCJcXGhzbGFzaCIpLHdlKEFlLCR0LG1uLCLilr0iLCJcXHRyaWFuZ2xlZG93biIpLHdlKEFlLCR0LG1uLCLil4oiLCJcXGxvemVuZ2UiKSx3ZShBZSwkdCxtbiwi4pOIIiwiXFxjaXJjbGVkUyIpLHdlKEFlLCR0LG1uLCLCriIsIlxcY2lyY2xlZFIiKSx3ZShzaSwkdCxtbiwiwq4iLCJcXGNpcmNsZWRSIiksd2UoQWUsJHQsbW4sIuKIoSIsIlxcbWVhc3VyZWRhbmdsZSIsITApLHdlKEFlLCR0LG1uLCLiiIQiLCJcXG5leGlzdHMiKSx3ZShBZSwkdCxtbiwi4oSnIiwiXFxtaG8iKSx3ZShBZSwkdCxtbiwi4oSyIiwiXFxGaW52IiwhMCksd2UoQWUsJHQsbW4sIuKFgSIsIlxcR2FtZSIsITApLHdlKEFlLCR0LG1uLCLigLUiLCJcXGJhY2twcmltZSIpLHdlKEFlLCR0LG1uLCLilrIiLCJcXGJsYWNrdHJpYW5nbGUiKSx3ZShBZSwkdCxtbiwi4pa8IiwiXFxibGFja3RyaWFuZ2xlZG93biIpLHdlKEFlLCR0LG1uLCLilqAiLCJcXGJsYWNrc3F1YXJlIiksd2UoQWUsJHQsbW4sIuKnqyIsIlxcYmxhY2tsb3plbmdlIiksd2UoQWUsJHQsbW4sIuKYhSIsIlxcYmlnc3RhciIpLHdlKEFlLCR0LG1uLCLiiKIiLCJcXHNwaGVyaWNhbGFuZ2xlIiwhMCksd2UoQWUsJHQsbW4sIuKIgSIsIlxcY29tcGxlbWVudCIsITApLHdlKEFlLCR0LG1uLCLDsCIsIlxcZXRoIiwhMCksd2Uoc2ksVWUsbW4sIsOwIiwiw7AiKSx3ZShBZSwkdCxtbiwi4pWxIiwiXFxkaWFndXAiKSx3ZShBZSwkdCxtbiwi4pWyIiwiXFxkaWFnZG93biIpLHdlKEFlLCR0LG1uLCLilqEiLCJcXHNxdWFyZSIpLHdlKEFlLCR0LG1uLCLilqEiLCJcXEJveCIpLHdlKEFlLCR0LG1uLCLil4oiLCJcXERpYW1vbmQiKSx3ZShBZSwkdCxtbiwiwqUiLCJcXHllbiIsITApLHdlKHNpLCR0LG1uLCLCpSIsIlxceWVuIiwhMCksd2UoQWUsJHQsbW4sIuKckyIsIlxcY2hlY2ttYXJrIiwhMCksd2Uoc2ksJHQsbW4sIuKckyIsIlxcY2hlY2ttYXJrIiksd2UoQWUsJHQsbW4sIuKEtiIsIlxcYmV0aCIsITApLHdlKEFlLCR0LG1uLCLihLgiLCJcXGRhbGV0aCIsITApLHdlKEFlLCR0LG1uLCLihLciLCJcXGdpbWVsIiwhMCksd2UoQWUsJHQsbW4sIs+dIiwiXFxkaWdhbW1hIiwhMCksd2UoQWUsJHQsbW4sIs+wIiwiXFx2YXJrYXBwYSIpLHdlKEFlLCR0LGhtLCLilIwiLCJcXEB1bGNvcm5lciIsITApLHdlKEFlLCR0LERwLCLilJAiLCJcXEB1cmNvcm5lciIsITApLHdlKEFlLCR0LGhtLCLilJQiLCJcXEBsbGNvcm5lciIsITApLHdlKEFlLCR0LERwLCLilJgiLCJcXEBscmNvcm5lciIsITApLHdlKEFlLCR0LEh0LCLiiaYiLCJcXGxlcXEiLCEwKSx3ZShBZSwkdCxIdCwi4qm9IiwiXFxsZXFzbGFudCIsITApLHdlKEFlLCR0LEh0LCLiqpUiLCJcXGVxc2xhbnRsZXNzIiwhMCksd2UoQWUsJHQsSHQsIuKJsiIsIlxcbGVzc3NpbSIsITApLHdlKEFlLCR0LEh0LCLiqoUiLCJcXGxlc3NhcHByb3giLCEwKSx3ZShBZSwkdCxIdCwi4omKIiwiXFxhcHByb3hlcSIsITApLHdlKEFlLCR0LGxzLCLii5YiLCJcXGxlc3Nkb3QiKSx3ZShBZSwkdCxIdCwi4ouYIiwiXFxsbGwiLCEwKSx3ZShBZSwkdCxIdCwi4om2IiwiXFxsZXNzZ3RyIiwhMCksd2UoQWUsJHQsSHQsIuKLmiIsIlxcbGVzc2VxZ3RyIiwhMCksd2UoQWUsJHQsSHQsIuKqiyIsIlxcbGVzc2VxcWd0ciIsITApLHdlKEFlLCR0LEh0LCLiiZEiLCJcXGRvdGVxZG90Iiksd2UoQWUsJHQsSHQsIuKJkyIsIlxccmlzaW5nZG90c2VxIiwhMCksd2UoQWUsJHQsSHQsIuKJkiIsIlxcZmFsbGluZ2RvdHNlcSIsITApLHdlKEFlLCR0LEh0LCLiiL0iLCJcXGJhY2tzaW0iLCEwKSx3ZShBZSwkdCxIdCwi4ouNIiwiXFxiYWNrc2ltZXEiLCEwKSx3ZShBZSwkdCxIdCwi4quFIiwiXFxzdWJzZXRlcXEiLCEwKSx3ZShBZSwkdCxIdCwi4ouQIiwiXFxTdWJzZXQiLCEwKSx3ZShBZSwkdCxIdCwi4oqPIiwiXFxzcXN1YnNldCIsITApLHdlKEFlLCR0LEh0LCLiibwiLCJcXHByZWNjdXJseWVxIiwhMCksd2UoQWUsJHQsSHQsIuKLniIsIlxcY3VybHllcXByZWMiLCEwKSx3ZShBZSwkdCxIdCwi4om+IiwiXFxwcmVjc2ltIiwhMCksd2UoQWUsJHQsSHQsIuKqtyIsIlxccHJlY2FwcHJveCIsITApLHdlKEFlLCR0LEh0LCLiirIiLCJcXHZhcnRyaWFuZ2xlbGVmdCIpLHdlKEFlLCR0LEh0LCLiirQiLCJcXHRyaWFuZ2xlbGVmdGVxIiksd2UoQWUsJHQsSHQsIuKKqCIsIlxcdkRhc2giLCEwKSx3ZShBZSwkdCxIdCwi4oqqIiwiXFxWdmRhc2giLCEwKSx3ZShBZSwkdCxIdCwi4oyjIiwiXFxzbWFsbHNtaWxlIiksd2UoQWUsJHQsSHQsIuKMoiIsIlxcc21hbGxmcm93biIpLHdlKEFlLCR0LEh0LCLiiY8iLCJcXGJ1bXBlcSIsITApLHdlKEFlLCR0LEh0LCLiiY4iLCJcXEJ1bXBlcSIsITApLHdlKEFlLCR0LEh0LCLiiaciLCJcXGdlcXEiLCEwKSx3ZShBZSwkdCxIdCwi4qm+IiwiXFxnZXFzbGFudCIsITApLHdlKEFlLCR0LEh0LCLiqpYiLCJcXGVxc2xhbnRndHIiLCEwKSx3ZShBZSwkdCxIdCwi4omzIiwiXFxndHJzaW0iLCEwKSx3ZShBZSwkdCxIdCwi4qqGIiwiXFxndHJhcHByb3giLCEwKSx3ZShBZSwkdCxscywi4ouXIiwiXFxndHJkb3QiKSx3ZShBZSwkdCxIdCwi4ouZIiwiXFxnZ2ciLCEwKSx3ZShBZSwkdCxIdCwi4om3IiwiXFxndHJsZXNzIiwhMCksd2UoQWUsJHQsSHQsIuKLmyIsIlxcZ3RyZXFsZXNzIiwhMCksd2UoQWUsJHQsSHQsIuKqjCIsIlxcZ3RyZXFxbGVzcyIsITApLHdlKEFlLCR0LEh0LCLiiZYiLCJcXGVxY2lyYyIsITApLHdlKEFlLCR0LEh0LCLiiZciLCJcXGNpcmNlcSIsITApLHdlKEFlLCR0LEh0LCLiiZwiLCJcXHRyaWFuZ2xlcSIsITApLHdlKEFlLCR0LEh0LCLiiLwiLCJcXHRoaWNrc2ltIiksd2UoQWUsJHQsSHQsIuKJiCIsIlxcdGhpY2thcHByb3giKSx3ZShBZSwkdCxIdCwi4quGIiwiXFxzdXBzZXRlcXEiLCEwKSx3ZShBZSwkdCxIdCwi4ouRIiwiXFxTdXBzZXQiLCEwKSx3ZShBZSwkdCxIdCwi4oqQIiwiXFxzcXN1cHNldCIsITApLHdlKEFlLCR0LEh0LCLiib0iLCJcXHN1Y2NjdXJseWVxIiwhMCksd2UoQWUsJHQsSHQsIuKLnyIsIlxcY3VybHllcXN1Y2MiLCEwKSx3ZShBZSwkdCxIdCwi4om/IiwiXFxzdWNjc2ltIiwhMCksd2UoQWUsJHQsSHQsIuKquCIsIlxcc3VjY2FwcHJveCIsITApLHdlKEFlLCR0LEh0LCLiirMiLCJcXHZhcnRyaWFuZ2xlcmlnaHQiKSx3ZShBZSwkdCxIdCwi4oq1IiwiXFx0cmlhbmdsZXJpZ2h0ZXEiKSx3ZShBZSwkdCxIdCwi4oqpIiwiXFxWZGFzaCIsITApLHdlKEFlLCR0LEh0LCLiiKMiLCJcXHNob3J0bWlkIiksd2UoQWUsJHQsSHQsIuKIpSIsIlxcc2hvcnRwYXJhbGxlbCIpLHdlKEFlLCR0LEh0LCLiiawiLCJcXGJldHdlZW4iLCEwKSx3ZShBZSwkdCxIdCwi4ouUIiwiXFxwaXRjaGZvcmsiLCEwKSx3ZShBZSwkdCxIdCwi4oidIiwiXFx2YXJwcm9wdG8iKSx3ZShBZSwkdCxIdCwi4peAIiwiXFxibGFja3RyaWFuZ2xlbGVmdCIpLHdlKEFlLCR0LEh0LCLiiLQiLCJcXHRoZXJlZm9yZSIsITApLHdlKEFlLCR0LEh0LCLiiI0iLCJcXGJhY2tlcHNpbG9uIiksd2UoQWUsJHQsSHQsIuKWtiIsIlxcYmxhY2t0cmlhbmdsZXJpZ2h0Iiksd2UoQWUsJHQsSHQsIuKItSIsIlxcYmVjYXVzZSIsITApLHdlKEFlLCR0LEh0LCLii5giLCJcXGxsbGVzcyIpLHdlKEFlLCR0LEh0LCLii5kiLCJcXGdnZ3RyIiksd2UoQWUsJHQsbHMsIuKKsiIsIlxcbGhkIiksd2UoQWUsJHQsbHMsIuKKsyIsIlxccmhkIiksd2UoQWUsJHQsSHQsIuKJgiIsIlxcZXFzaW0iLCEwKSx3ZShBZSxVZSxIdCwi4ouIIiwiXFxKb2luIiksd2UoQWUsJHQsSHQsIuKJkSIsIlxcRG90ZXEiLCEwKSx3ZShBZSwkdCxscywi4oiUIiwiXFxkb3RwbHVzIiwhMCksd2UoQWUsJHQsbHMsIuKIliIsIlxcc21hbGxzZXRtaW51cyIpLHdlKEFlLCR0LGxzLCLii5IiLCJcXENhcCIsITApLHdlKEFlLCR0LGxzLCLii5MiLCJcXEN1cCIsITApLHdlKEFlLCR0LGxzLCLiqZ4iLCJcXGRvdWJsZWJhcndlZGdlIiwhMCksd2UoQWUsJHQsbHMsIuKKnyIsIlxcYm94bWludXMiLCEwKSx3ZShBZSwkdCxscywi4oqeIiwiXFxib3hwbHVzIiwhMCksd2UoQWUsJHQsbHMsIuKLhyIsIlxcZGl2aWRlb250aW1lcyIsITApLHdlKEFlLCR0LGxzLCLii4kiLCJcXGx0aW1lcyIsITApLHdlKEFlLCR0LGxzLCLii4oiLCJcXHJ0aW1lcyIsITApLHdlKEFlLCR0LGxzLCLii4siLCJcXGxlZnR0aHJlZXRpbWVzIiwhMCksd2UoQWUsJHQsbHMsIuKLjCIsIlxccmlnaHR0aHJlZXRpbWVzIiwhMCksd2UoQWUsJHQsbHMsIuKLjyIsIlxcY3VybHl3ZWRnZSIsITApLHdlKEFlLCR0LGxzLCLii44iLCJcXGN1cmx5dmVlIiwhMCksd2UoQWUsJHQsbHMsIuKKnSIsIlxcY2lyY2xlZGRhc2giLCEwKSx3ZShBZSwkdCxscywi4oqbIiwiXFxjaXJjbGVkYXN0IiwhMCksd2UoQWUsJHQsbHMsIuKLhSIsIlxcY2VudGVyZG90Iiksd2UoQWUsJHQsbHMsIuKKuiIsIlxcaW50ZXJjYWwiLCEwKSx3ZShBZSwkdCxscywi4ouSIiwiXFxkb3VibGVjYXAiKSx3ZShBZSwkdCxscywi4ouTIiwiXFxkb3VibGVjdXAiKSx3ZShBZSwkdCxscywi4oqgIiwiXFxib3h0aW1lcyIsITApLHdlKEFlLCR0LEh0LCLih6IiLCJcXGRhc2hyaWdodGFycm93IiwhMCksd2UoQWUsJHQsSHQsIuKHoCIsIlxcZGFzaGxlZnRhcnJvdyIsITApLHdlKEFlLCR0LEh0LCLih4ciLCJcXGxlZnRsZWZ0YXJyb3dzIiwhMCksd2UoQWUsJHQsSHQsIuKHhiIsIlxcbGVmdHJpZ2h0YXJyb3dzIiwhMCksd2UoQWUsJHQsSHQsIuKHmiIsIlxcTGxlZnRhcnJvdyIsITApLHdlKEFlLCR0LEh0LCLihp4iLCJcXHR3b2hlYWRsZWZ0YXJyb3ciLCEwKSx3ZShBZSwkdCxIdCwi4oaiIiwiXFxsZWZ0YXJyb3d0YWlsIiwhMCksd2UoQWUsJHQsSHQsIuKGqyIsIlxcbG9vcGFycm93bGVmdCIsITApLHdlKEFlLCR0LEh0LCLih4siLCJcXGxlZnRyaWdodGhhcnBvb25zIiwhMCksd2UoQWUsJHQsSHQsIuKGtiIsIlxcY3VydmVhcnJvd2xlZnQiLCEwKSx3ZShBZSwkdCxIdCwi4oa6IiwiXFxjaXJjbGVhcnJvd2xlZnQiLCEwKSx3ZShBZSwkdCxIdCwi4oawIiwiXFxMc2giLCEwKSx3ZShBZSwkdCxIdCwi4oeIIiwiXFx1cHVwYXJyb3dzIiwhMCksd2UoQWUsJHQsSHQsIuKGvyIsIlxcdXBoYXJwb29ubGVmdCIsITApLHdlKEFlLCR0LEh0LCLih4MiLCJcXGRvd25oYXJwb29ubGVmdCIsITApLHdlKEFlLFVlLEh0LCLiirYiLCJcXG9yaWdvZiIsITApLHdlKEFlLFVlLEh0LCLiirciLCJcXGltYWdlb2YiLCEwKSx3ZShBZSwkdCxIdCwi4oq4IiwiXFxtdWx0aW1hcCIsITApLHdlKEFlLCR0LEh0LCLihq0iLCJcXGxlZnRyaWdodHNxdWlnYXJyb3ciLCEwKSx3ZShBZSwkdCxIdCwi4oeJIiwiXFxyaWdodHJpZ2h0YXJyb3dzIiwhMCksd2UoQWUsJHQsSHQsIuKHhCIsIlxccmlnaHRsZWZ0YXJyb3dzIiwhMCksd2UoQWUsJHQsSHQsIuKGoCIsIlxcdHdvaGVhZHJpZ2h0YXJyb3ciLCEwKSx3ZShBZSwkdCxIdCwi4oajIiwiXFxyaWdodGFycm93dGFpbCIsITApLHdlKEFlLCR0LEh0LCLihqwiLCJcXGxvb3BhcnJvd3JpZ2h0IiwhMCksd2UoQWUsJHQsSHQsIuKGtyIsIlxcY3VydmVhcnJvd3JpZ2h0IiwhMCksd2UoQWUsJHQsSHQsIuKGuyIsIlxcY2lyY2xlYXJyb3dyaWdodCIsITApLHdlKEFlLCR0LEh0LCLihrEiLCJcXFJzaCIsITApLHdlKEFlLCR0LEh0LCLih4oiLCJcXGRvd25kb3duYXJyb3dzIiwhMCksd2UoQWUsJHQsSHQsIuKGviIsIlxcdXBoYXJwb29ucmlnaHQiLCEwKSx3ZShBZSwkdCxIdCwi4oeCIiwiXFxkb3duaGFycG9vbnJpZ2h0IiwhMCksd2UoQWUsJHQsSHQsIuKHnSIsIlxccmlnaHRzcXVpZ2Fycm93IiwhMCksd2UoQWUsJHQsSHQsIuKHnSIsIlxcbGVhZHN0byIpLHdlKEFlLCR0LEh0LCLih5siLCJcXFJyaWdodGFycm93IiwhMCksd2UoQWUsJHQsSHQsIuKGviIsIlxccmVzdHJpY3Rpb24iKSx3ZShBZSxVZSxtbiwi4oCYIiwiYCIpLHdlKEFlLFVlLG1uLCIkIiwiXFwkIiksd2Uoc2ksVWUsbW4sIiQiLCJcXCQiKSx3ZShzaSxVZSxtbiwiJCIsIlxcdGV4dGRvbGxhciIpLHdlKEFlLFVlLG1uLCIlIiwiXFwlIiksd2Uoc2ksVWUsbW4sIiUiLCJcXCUiKSx3ZShBZSxVZSxtbiwiXyIsIlxcXyIpLHdlKHNpLFVlLG1uLCJfIiwiXFxfIiksd2Uoc2ksVWUsbW4sIl8iLCJcXHRleHR1bmRlcnNjb3JlIiksd2UoQWUsVWUsbW4sIuKIoCIsIlxcYW5nbGUiLCEwKSx3ZShBZSxVZSxtbiwi4oieIiwiXFxpbmZ0eSIsITApLHdlKEFlLFVlLG1uLCLigLIiLCJcXHByaW1lIiksd2UoQWUsVWUsbW4sIuKWsyIsIlxcdHJpYW5nbGUiKSx3ZShBZSxVZSxtbiwizpMiLCJcXEdhbW1hIiwhMCksd2UoQWUsVWUsbW4sIs6UIiwiXFxEZWx0YSIsITApLHdlKEFlLFVlLG1uLCLOmCIsIlxcVGhldGEiLCEwKSx3ZShBZSxVZSxtbiwizpsiLCJcXExhbWJkYSIsITApLHdlKEFlLFVlLG1uLCLOniIsIlxcWGkiLCEwKSx3ZShBZSxVZSxtbiwizqAiLCJcXFBpIiwhMCksd2UoQWUsVWUsbW4sIs6jIiwiXFxTaWdtYSIsITApLHdlKEFlLFVlLG1uLCLOpSIsIlxcVXBzaWxvbiIsITApLHdlKEFlLFVlLG1uLCLOpiIsIlxcUGhpIiwhMCksd2UoQWUsVWUsbW4sIs6oIiwiXFxQc2kiLCEwKSx3ZShBZSxVZSxtbiwizqkiLCJcXE9tZWdhIiwhMCksd2UoQWUsVWUsbW4sIkEiLCLOkSIpLHdlKEFlLFVlLG1uLCJCIiwizpIiKSx3ZShBZSxVZSxtbiwiRSIsIs6VIiksd2UoQWUsVWUsbW4sIloiLCLOliIpLHdlKEFlLFVlLG1uLCJIIiwizpciKSx3ZShBZSxVZSxtbiwiSSIsIs6ZIiksd2UoQWUsVWUsbW4sIksiLCLOmiIpLHdlKEFlLFVlLG1uLCJNIiwizpwiKSx3ZShBZSxVZSxtbiwiTiIsIs6dIiksd2UoQWUsVWUsbW4sIk8iLCLOnyIpLHdlKEFlLFVlLG1uLCJQIiwizqEiKSx3ZShBZSxVZSxtbiwiVCIsIs6kIiksd2UoQWUsVWUsbW4sIlgiLCLOpyIpLHdlKEFlLFVlLG1uLCLCrCIsIlxcbmVnIiwhMCksd2UoQWUsVWUsbW4sIsKsIiwiXFxsbm90Iiksd2UoQWUsVWUsbW4sIuKKpCIsIlxcdG9wIiksd2UoQWUsVWUsbW4sIuKKpSIsIlxcYm90Iiksd2UoQWUsVWUsbW4sIuKIhSIsIlxcZW1wdHlzZXQiKSx3ZShBZSwkdCxtbiwi4oiFIiwiXFx2YXJub3RoaW5nIiksd2UoQWUsVWUsQ2EsIs6xIiwiXFxhbHBoYSIsITApLHdlKEFlLFVlLENhLCLOsiIsIlxcYmV0YSIsITApLHdlKEFlLFVlLENhLCLOsyIsIlxcZ2FtbWEiLCEwKSx3ZShBZSxVZSxDYSwizrQiLCJcXGRlbHRhIiwhMCksd2UoQWUsVWUsQ2EsIs+1IiwiXFxlcHNpbG9uIiwhMCksd2UoQWUsVWUsQ2EsIs62IiwiXFx6ZXRhIiwhMCksd2UoQWUsVWUsQ2EsIs63IiwiXFxldGEiLCEwKSx3ZShBZSxVZSxDYSwizrgiLCJcXHRoZXRhIiwhMCksd2UoQWUsVWUsQ2EsIs65IiwiXFxpb3RhIiwhMCksd2UoQWUsVWUsQ2EsIs66IiwiXFxrYXBwYSIsITApLHdlKEFlLFVlLENhLCLOuyIsIlxcbGFtYmRhIiwhMCksd2UoQWUsVWUsQ2EsIs68IiwiXFxtdSIsITApLHdlKEFlLFVlLENhLCLOvSIsIlxcbnUiLCEwKSx3ZShBZSxVZSxDYSwizr4iLCJcXHhpIiwhMCksd2UoQWUsVWUsQ2EsIs6/IiwiXFxvbWljcm9uIiwhMCksd2UoQWUsVWUsQ2EsIs+AIiwiXFxwaSIsITApLHdlKEFlLFVlLENhLCLPgSIsIlxccmhvIiwhMCksd2UoQWUsVWUsQ2EsIs+DIiwiXFxzaWdtYSIsITApLHdlKEFlLFVlLENhLCLPhCIsIlxcdGF1IiwhMCksd2UoQWUsVWUsQ2EsIs+FIiwiXFx1cHNpbG9uIiwhMCksd2UoQWUsVWUsQ2EsIs+VIiwiXFxwaGkiLCEwKSx3ZShBZSxVZSxDYSwiz4ciLCJcXGNoaSIsITApLHdlKEFlLFVlLENhLCLPiCIsIlxccHNpIiwhMCksd2UoQWUsVWUsQ2EsIs+JIiwiXFxvbWVnYSIsITApLHdlKEFlLFVlLENhLCLOtSIsIlxcdmFyZXBzaWxvbiIsITApLHdlKEFlLFVlLENhLCLPkSIsIlxcdmFydGhldGEiLCEwKSx3ZShBZSxVZSxDYSwiz5YiLCJcXHZhcnBpIiwhMCksd2UoQWUsVWUsQ2EsIs+xIiwiXFx2YXJyaG8iLCEwKSx3ZShBZSxVZSxDYSwiz4IiLCJcXHZhcnNpZ21hIiwhMCksd2UoQWUsVWUsQ2EsIs+GIiwiXFx2YXJwaGkiLCEwKSx3ZShBZSxVZSxscywi4oiXIiwiKiIsITApLHdlKEFlLFVlLGxzLCIrIiwiKyIpLHdlKEFlLFVlLGxzLCLiiJIiLCItIiwhMCksd2UoQWUsVWUsbHMsIuKLhSIsIlxcY2RvdCIsITApLHdlKEFlLFVlLGxzLCLiiJgiLCJcXGNpcmMiLCEwKSx3ZShBZSxVZSxscywiw7ciLCJcXGRpdiIsITApLHdlKEFlLFVlLGxzLCLCsSIsIlxccG0iLCEwKSx3ZShBZSxVZSxscywiw5ciLCJcXHRpbWVzIiwhMCksd2UoQWUsVWUsbHMsIuKIqSIsIlxcY2FwIiwhMCksd2UoQWUsVWUsbHMsIuKIqiIsIlxcY3VwIiwhMCksd2UoQWUsVWUsbHMsIuKIliIsIlxcc2V0bWludXMiLCEwKSx3ZShBZSxVZSxscywi4oinIiwiXFxsYW5kIiksd2UoQWUsVWUsbHMsIuKIqCIsIlxcbG9yIiksd2UoQWUsVWUsbHMsIuKIpyIsIlxcd2VkZ2UiLCEwKSx3ZShBZSxVZSxscywi4oioIiwiXFx2ZWUiLCEwKSx3ZShBZSxVZSxtbiwi4oiaIiwiXFxzdXJkIiksd2UoQWUsVWUsaG0sIuKfqCIsIlxcbGFuZ2xlIiwhMCksd2UoQWUsVWUsaG0sIuKIoyIsIlxcbHZlcnQiKSx3ZShBZSxVZSxobSwi4oilIiwiXFxsVmVydCIpLHdlKEFlLFVlLERwLCI/IiwiPyIpLHdlKEFlLFVlLERwLCIhIiwiISIpLHdlKEFlLFVlLERwLCLin6kiLCJcXHJhbmdsZSIsITApLHdlKEFlLFVlLERwLCLiiKMiLCJcXHJ2ZXJ0Iiksd2UoQWUsVWUsRHAsIuKIpSIsIlxcclZlcnQiKSx3ZShBZSxVZSxIdCwiPSIsIj0iKSx3ZShBZSxVZSxIdCwiOiIsIjoiKSx3ZShBZSxVZSxIdCwi4omIIiwiXFxhcHByb3giLCEwKSx3ZShBZSxVZSxIdCwi4omFIiwiXFxjb25nIiwhMCksd2UoQWUsVWUsSHQsIuKJpSIsIlxcZ2UiKSx3ZShBZSxVZSxIdCwi4omlIiwiXFxnZXEiLCEwKSx3ZShBZSxVZSxIdCwi4oaQIiwiXFxnZXRzIiksd2UoQWUsVWUsSHQsIj4iLCJcXGd0IiwhMCksd2UoQWUsVWUsSHQsIuKIiCIsIlxcaW4iLCEwKSx3ZShBZSxVZSxIdCwi7oCgIiwiXFxAbm90Iiksd2UoQWUsVWUsSHQsIuKKgiIsIlxcc3Vic2V0IiwhMCksd2UoQWUsVWUsSHQsIuKKgyIsIlxcc3Vwc2V0IiwhMCksd2UoQWUsVWUsSHQsIuKKhiIsIlxcc3Vic2V0ZXEiLCEwKSx3ZShBZSxVZSxIdCwi4oqHIiwiXFxzdXBzZXRlcSIsITApLHdlKEFlLCR0LEh0LCLiiogiLCJcXG5zdWJzZXRlcSIsITApLHdlKEFlLCR0LEh0LCLiiokiLCJcXG5zdXBzZXRlcSIsITApLHdlKEFlLFVlLEh0LCLiiqgiLCJcXG1vZGVscyIpLHdlKEFlLFVlLEh0LCLihpAiLCJcXGxlZnRhcnJvdyIsITApLHdlKEFlLFVlLEh0LCLiiaQiLCJcXGxlIiksd2UoQWUsVWUsSHQsIuKJpCIsIlxcbGVxIiwhMCksd2UoQWUsVWUsSHQsIjwiLCJcXGx0IiwhMCksd2UoQWUsVWUsSHQsIuKGkiIsIlxccmlnaHRhcnJvdyIsITApLHdlKEFlLFVlLEh0LCLihpIiLCJcXHRvIiksd2UoQWUsJHQsSHQsIuKJsSIsIlxcbmdlcSIsITApLHdlKEFlLCR0LEh0LCLiibAiLCJcXG5sZXEiLCEwKSx3ZShBZSxVZSxJNywiwqAiLCJcXCAiKSx3ZShBZSxVZSxJNywiwqAiLCJcXHNwYWNlIiksd2UoQWUsVWUsSTcsIsKgIiwiXFxub2JyZWFrc3BhY2UiKSx3ZShzaSxVZSxJNywiwqAiLCJcXCAiKSx3ZShzaSxVZSxJNywiwqAiLCIgIiksd2Uoc2ksVWUsSTcsIsKgIiwiXFxzcGFjZSIpLHdlKHNpLFVlLEk3LCLCoCIsIlxcbm9icmVha3NwYWNlIiksd2UoQWUsVWUsSTcsbnVsbCwiXFxub2JyZWFrIiksd2UoQWUsVWUsSTcsbnVsbCwiXFxhbGxvd2JyZWFrIiksd2UoQWUsVWUsb1EsIiwiLCIsIiksd2UoQWUsVWUsb1EsIjsiLCI7Iiksd2UoQWUsJHQsbHMsIuKKvCIsIlxcYmFyd2VkZ2UiLCEwKSx3ZShBZSwkdCxscywi4oq7IiwiXFx2ZWViYXIiLCEwKSx3ZShBZSxVZSxscywi4oqZIiwiXFxvZG90IiwhMCksd2UoQWUsVWUsbHMsIuKKlSIsIlxcb3BsdXMiLCEwKSx3ZShBZSxVZSxscywi4oqXIiwiXFxvdGltZXMiLCEwKSx3ZShBZSxVZSxtbiwi4oiCIiwiXFxwYXJ0aWFsIiwhMCksd2UoQWUsVWUsbHMsIuKKmCIsIlxcb3NsYXNoIiwhMCksd2UoQWUsJHQsbHMsIuKKmiIsIlxcY2lyY2xlZGNpcmMiLCEwKSx3ZShBZSwkdCxscywi4oqhIiwiXFxib3hkb3QiLCEwKSx3ZShBZSxVZSxscywi4pazIiwiXFxiaWd0cmlhbmdsZXVwIiksd2UoQWUsVWUsbHMsIuKWvSIsIlxcYmlndHJpYW5nbGVkb3duIiksd2UoQWUsVWUsbHMsIuKAoCIsIlxcZGFnZ2VyIiksd2UoQWUsVWUsbHMsIuKLhCIsIlxcZGlhbW9uZCIpLHdlKEFlLFVlLGxzLCLii4YiLCJcXHN0YXIiKSx3ZShBZSxVZSxscywi4peDIiwiXFx0cmlhbmdsZWxlZnQiKSx3ZShBZSxVZSxscywi4pa5IiwiXFx0cmlhbmdsZXJpZ2h0Iiksd2UoQWUsVWUsaG0sInsiLCJcXHsiKSx3ZShzaSxVZSxtbiwieyIsIlxceyIpLHdlKHNpLFVlLG1uLCJ7IiwiXFx0ZXh0YnJhY2VsZWZ0Iiksd2UoQWUsVWUsRHAsIn0iLCJcXH0iKSx3ZShzaSxVZSxtbiwifSIsIlxcfSIpLHdlKHNpLFVlLG1uLCJ9IiwiXFx0ZXh0YnJhY2VyaWdodCIpLHdlKEFlLFVlLGhtLCJ7IiwiXFxsYnJhY2UiKSx3ZShBZSxVZSxEcCwifSIsIlxccmJyYWNlIiksd2UoQWUsVWUsaG0sIlsiLCJcXGxicmFjayIsITApLHdlKHNpLFVlLG1uLCJbIiwiXFxsYnJhY2siLCEwKSx3ZShBZSxVZSxEcCwiXSIsIlxccmJyYWNrIiwhMCksd2Uoc2ksVWUsbW4sIl0iLCJcXHJicmFjayIsITApLHdlKEFlLFVlLGhtLCIoIiwiXFxscGFyZW4iLCEwKSx3ZShBZSxVZSxEcCwiKSIsIlxccnBhcmVuIiwhMCksd2Uoc2ksVWUsbW4sIjwiLCJcXHRleHRsZXNzIiwhMCksd2Uoc2ksVWUsbW4sIj4iLCJcXHRleHRncmVhdGVyIiwhMCksd2UoQWUsVWUsaG0sIuKMiiIsIlxcbGZsb29yIiwhMCksd2UoQWUsVWUsRHAsIuKMiyIsIlxccmZsb29yIiwhMCksd2UoQWUsVWUsaG0sIuKMiCIsIlxcbGNlaWwiLCEwKSx3ZShBZSxVZSxEcCwi4oyJIiwiXFxyY2VpbCIsITApLHdlKEFlLFVlLG1uLCJcXCIsIlxcYmFja3NsYXNoIiksd2UoQWUsVWUsbW4sIuKIoyIsInwiKSx3ZShBZSxVZSxtbiwi4oijIiwiXFx2ZXJ0Iiksd2Uoc2ksVWUsbW4sInwiLCJcXHRleHRiYXIiLCEwKSx3ZShBZSxVZSxtbiwi4oilIiwiXFx8Iiksd2UoQWUsVWUsbW4sIuKIpSIsIlxcVmVydCIpLHdlKHNpLFVlLG1uLCLiiKUiLCJcXHRleHRiYXJkYmwiKSx3ZShzaSxVZSxtbiwifiIsIlxcdGV4dGFzY2lpdGlsZGUiKSx3ZShzaSxVZSxtbiwiXFwiLCJcXHRleHRiYWNrc2xhc2giKSx3ZShzaSxVZSxtbiwiXiIsIlxcdGV4dGFzY2lpY2lyY3VtIiksd2UoQWUsVWUsSHQsIuKGkSIsIlxcdXBhcnJvdyIsITApLHdlKEFlLFVlLEh0LCLih5EiLCJcXFVwYXJyb3ciLCEwKSx3ZShBZSxVZSxIdCwi4oaTIiwiXFxkb3duYXJyb3ciLCEwKSx3ZShBZSxVZSxIdCwi4oeTIiwiXFxEb3duYXJyb3ciLCEwKSx3ZShBZSxVZSxIdCwi4oaVIiwiXFx1cGRvd25hcnJvdyIsITApLHdlKEFlLFVlLEh0LCLih5UiLCJcXFVwZG93bmFycm93IiwhMCksd2UoQWUsVWUsTjAsIuKIkCIsIlxcY29wcm9kIiksd2UoQWUsVWUsTjAsIuKLgSIsIlxcYmlndmVlIiksd2UoQWUsVWUsTjAsIuKLgCIsIlxcYmlnd2VkZ2UiKSx3ZShBZSxVZSxOMCwi4qiEIiwiXFxiaWd1cGx1cyIpLHdlKEFlLFVlLE4wLCLii4IiLCJcXGJpZ2NhcCIpLHdlKEFlLFVlLE4wLCLii4MiLCJcXGJpZ2N1cCIpLHdlKEFlLFVlLE4wLCLiiKsiLCJcXGludCIpLHdlKEFlLFVlLE4wLCLiiKsiLCJcXGludG9wIiksd2UoQWUsVWUsTjAsIuKIrCIsIlxcaWludCIpLHdlKEFlLFVlLE4wLCLiiK0iLCJcXGlpaW50Iiksd2UoQWUsVWUsTjAsIuKIjyIsIlxccHJvZCIpLHdlKEFlLFVlLE4wLCLiiJEiLCJcXHN1bSIpLHdlKEFlLFVlLE4wLCLiqIIiLCJcXGJpZ290aW1lcyIpLHdlKEFlLFVlLE4wLCLiqIEiLCJcXGJpZ29wbHVzIiksd2UoQWUsVWUsTjAsIuKogCIsIlxcYmlnb2RvdCIpLHdlKEFlLFVlLE4wLCLiiK4iLCJcXG9pbnQiKSx3ZShBZSxVZSxOMCwi4oivIiwiXFxvaWludCIpLHdlKEFlLFVlLE4wLCLiiLAiLCJcXG9paWludCIpLHdlKEFlLFVlLE4wLCLiqIYiLCJcXGJpZ3NxY3VwIiksd2UoQWUsVWUsTjAsIuKIqyIsIlxcc21hbGxpbnQiKSx3ZShzaSxVZSxORCwi4oCmIiwiXFx0ZXh0ZWxsaXBzaXMiKSx3ZShBZSxVZSxORCwi4oCmIiwiXFxtYXRoZWxsaXBzaXMiKSx3ZShzaSxVZSxORCwi4oCmIiwiXFxsZG90cyIsITApLHdlKEFlLFVlLE5ELCLigKYiLCJcXGxkb3RzIiwhMCksd2UoQWUsVWUsTkQsIuKLryIsIlxcQGNkb3RzIiwhMCksd2UoQWUsVWUsTkQsIuKLsSIsIlxcZGRvdHMiLCEwKSx3ZShBZSxVZSxtbiwi4ouuIiwiXFx2YXJ2ZG90cyIpLHdlKEFlLFVlLHdoLCLLiiIsIlxcYWN1dGUiKSx3ZShBZSxVZSx3aCwiy4siLCJcXGdyYXZlIiksd2UoQWUsVWUsd2gsIsKoIiwiXFxkZG90Iiksd2UoQWUsVWUsd2gsIn4iLCJcXHRpbGRlIiksd2UoQWUsVWUsd2gsIsuJIiwiXFxiYXIiKSx3ZShBZSxVZSx3aCwiy5giLCJcXGJyZXZlIiksd2UoQWUsVWUsd2gsIsuHIiwiXFxjaGVjayIpLHdlKEFlLFVlLHdoLCJeIiwiXFxoYXQiKSx3ZShBZSxVZSx3aCwi4oOXIiwiXFx2ZWMiKSx3ZShBZSxVZSx3aCwiy5kiLCJcXGRvdCIpLHdlKEFlLFVlLHdoLCLLmiIsIlxcbWF0aHJpbmciKSx3ZShBZSxVZSxDYSwi7oSxIiwiXFxAaW1hdGgiKSx3ZShBZSxVZSxDYSwi7oi3IiwiXFxAam1hdGgiKSx3ZShBZSxVZSxtbiwixLEiLCLEsSIpLHdlKEFlLFVlLG1uLCLItyIsIsi3Iiksd2Uoc2ksVWUsbW4sIsSxIiwiXFxpIiwhMCksd2Uoc2ksVWUsbW4sIsi3IiwiXFxqIiwhMCksd2Uoc2ksVWUsbW4sIsOfIiwiXFxzcyIsITApLHdlKHNpLFVlLG1uLCLDpiIsIlxcYWUiLCEwKSx3ZShzaSxVZSxtbiwixZMiLCJcXG9lIiwhMCksd2Uoc2ksVWUsbW4sIsO4IiwiXFxvIiwhMCksd2Uoc2ksVWUsbW4sIsOGIiwiXFxBRSIsITApLHdlKHNpLFVlLG1uLCLFkiIsIlxcT0UiLCEwKSx3ZShzaSxVZSxtbiwiw5giLCJcXE8iLCEwKSx3ZShzaSxVZSx3aCwiy4oiLCJcXCciKSx3ZShzaSxVZSx3aCwiy4siLCJcXGAiKSx3ZShzaSxVZSx3aCwiy4YiLCJcXF4iKSx3ZShzaSxVZSx3aCwiy5wiLCJcXH4iKSx3ZShzaSxVZSx3aCwiy4kiLCJcXD0iKSx3ZShzaSxVZSx3aCwiy5giLCJcXHUiKSx3ZShzaSxVZSx3aCwiy5kiLCJcXC4iKSx3ZShzaSxVZSx3aCwiwrgiLCJcXGMiKSx3ZShzaSxVZSx3aCwiy5oiLCJcXHIiKSx3ZShzaSxVZSx3aCwiy4ciLCJcXHYiKSx3ZShzaSxVZSx3aCwiwqgiLCdcXCInKSx3ZShzaSxVZSx3aCwiy50iLCJcXEgiKSx3ZShzaSxVZSx3aCwi4pevIiwiXFx0ZXh0Y2lyY2xlZCIpO3ZhciByemU9eyItLSI6ITAsIi0tLSI6ITAsImBgIjohMCwiJyciOiEwfTt3ZShzaSxVZSxtbiwi4oCTIiwiLS0iLCEwKSx3ZShzaSxVZSxtbiwi4oCTIiwiXFx0ZXh0ZW5kYXNoIiksd2Uoc2ksVWUsbW4sIuKAlCIsIi0tLSIsITApLHdlKHNpLFVlLG1uLCLigJQiLCJcXHRleHRlbWRhc2giKSx3ZShzaSxVZSxtbiwi4oCYIiwiYCIsITApLHdlKHNpLFVlLG1uLCLigJgiLCJcXHRleHRxdW90ZWxlZnQiKSx3ZShzaSxVZSxtbiwi4oCZIiwiJyIsITApLHdlKHNpLFVlLG1uLCLigJkiLCJcXHRleHRxdW90ZXJpZ2h0Iiksd2Uoc2ksVWUsbW4sIuKAnCIsImBgIiwhMCksd2Uoc2ksVWUsbW4sIuKAnCIsIlxcdGV4dHF1b3RlZGJsbGVmdCIpLHdlKHNpLFVlLG1uLCLigJ0iLCInJyIsITApLHdlKHNpLFVlLG1uLCLigJ0iLCJcXHRleHRxdW90ZWRibHJpZ2h0Iiksd2UoQWUsVWUsbW4sIsKwIiwiXFxkZWdyZWUiLCEwKSx3ZShzaSxVZSxtbiwiwrAiLCJcXGRlZ3JlZSIpLHdlKHNpLFVlLG1uLCLCsCIsIlxcdGV4dGRlZ3JlZSIsITApLHdlKEFlLFVlLG1uLCLCoyIsIlxccG91bmRzIiksd2UoQWUsVWUsbW4sIsKjIiwiXFxtYXRoc3RlcmxpbmciLCEwKSx3ZShzaSxVZSxtbiwiwqMiLCJcXHBvdW5kcyIpLHdlKHNpLFVlLG1uLCLCoyIsIlxcdGV4dHN0ZXJsaW5nIiwhMCksd2UoQWUsJHQsbW4sIuKcoCIsIlxcbWFsdGVzZSIpLHdlKHNpLCR0LG1uLCLinKAiLCJcXG1hbHRlc2UiKTtmb3IodmFyIGl6ZT0nMDEyMzQ1Njc4OS9ALiInLHJiZT0wO3JiZTxpemUubGVuZ3RoO3JiZSsrKXt2YXIgc3plPWl6ZS5jaGFyQXQocmJlKTt3ZShBZSxVZSxtbixzemUsc3plKX1mb3IodmFyIGF6ZT0nMDEyMzQ1Njc4OSFAKigpLT0rIjs6Py8uLCcsaWJlPTA7aWJlPGF6ZS5sZW5ndGg7aWJlKyspe3ZhciBvemU9YXplLmNoYXJBdChpYmUpO3dlKHNpLFVlLG1uLG96ZSxvemUpfWZvcih2YXIgY1E9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLHNiZT0wO3NiZTxjUS5sZW5ndGg7c2JlKyspe3ZhciB1UT1jUS5jaGFyQXQoc2JlKTt3ZShBZSxVZSxDYSx1USx1USksd2Uoc2ksVWUsbW4sdVEsdVEpfXdlKEFlLCR0LG1uLCJDIiwi4oSCIiksd2Uoc2ksJHQsbW4sIkMiLCLihIIiKSx3ZShBZSwkdCxtbiwiSCIsIuKEjSIpLHdlKHNpLCR0LG1uLCJIIiwi4oSNIiksd2UoQWUsJHQsbW4sIk4iLCLihJUiKSx3ZShzaSwkdCxtbiwiTiIsIuKElSIpLHdlKEFlLCR0LG1uLCJQIiwi4oSZIiksd2Uoc2ksJHQsbW4sIlAiLCLihJkiKSx3ZShBZSwkdCxtbiwiUSIsIuKEmiIpLHdlKHNpLCR0LG1uLCJRIiwi4oSaIiksd2UoQWUsJHQsbW4sIlIiLCLihJ0iKSx3ZShzaSwkdCxtbiwiUiIsIuKEnSIpLHdlKEFlLCR0LG1uLCJaIiwi4oSkIiksd2Uoc2ksJHQsbW4sIloiLCLihKQiKSx3ZShBZSxVZSxDYSwiaCIsIuKEjiIpLHdlKHNpLFVlLENhLCJoIiwi4oSOIik7Zm9yKHZhciBYYT0iIixJcD0wO0lwPGNRLmxlbmd0aDtJcCsrKXt2YXIgRWY9Y1EuY2hhckF0KElwKTtYYT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU2MzIwK0lwKSx3ZShBZSxVZSxDYSxFZixYYSksd2Uoc2ksVWUsbW4sRWYsWGEpLFhhPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTYzNzIrSXApLHdlKEFlLFVlLENhLEVmLFhhKSx3ZShzaSxVZSxtbixFZixYYSksWGE9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NjQyNCtJcCksd2UoQWUsVWUsQ2EsRWYsWGEpLHdlKHNpLFVlLG1uLEVmLFhhKSxYYT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU2NTgwK0lwKSx3ZShBZSxVZSxDYSxFZixYYSksd2Uoc2ksVWUsbW4sRWYsWGEpLFhhPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTY2ODQrSXApLHdlKEFlLFVlLENhLEVmLFhhKSx3ZShzaSxVZSxtbixFZixYYSksWGE9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NjczNitJcCksd2UoQWUsVWUsQ2EsRWYsWGEpLHdlKHNpLFVlLG1uLEVmLFhhKSxYYT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU2Nzg4K0lwKSx3ZShBZSxVZSxDYSxFZixYYSksd2Uoc2ksVWUsbW4sRWYsWGEpLFhhPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTY4NDArSXApLHdlKEFlLFVlLENhLEVmLFhhKSx3ZShzaSxVZSxtbixFZixYYSksWGE9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1Njk0NCtJcCksd2UoQWUsVWUsQ2EsRWYsWGEpLHdlKHNpLFVlLG1uLEVmLFhhKSxJcDwyNiYmKFhhPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTY2MzIrSXApLHdlKEFlLFVlLENhLEVmLFhhKSx3ZShzaSxVZSxtbixFZixYYSksWGE9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NjQ3NitJcCksd2UoQWUsVWUsQ2EsRWYsWGEpLHdlKHNpLFVlLG1uLEVmLFhhKSl9WGE9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NjY2OCksd2UoQWUsVWUsQ2EsImsiLFhhKSx3ZShzaSxVZSxtbiwiayIsWGEpO2Zvcih2YXIgakM9MDtqQzwxMDtqQysrKXt2YXIgUzk9akMudG9TdHJpbmcoKTtYYT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU3Mjk0K2pDKSx3ZShBZSxVZSxDYSxTOSxYYSksd2Uoc2ksVWUsbW4sUzksWGEpLFhhPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTczMTQrakMpLHdlKEFlLFVlLENhLFM5LFhhKSx3ZShzaSxVZSxtbixTOSxYYSksWGE9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NzMyNCtqQyksd2UoQWUsVWUsQ2EsUzksWGEpLHdlKHNpLFVlLG1uLFM5LFhhKSxYYT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU3MzM0K2pDKSx3ZShBZSxVZSxDYSxTOSxYYSksd2Uoc2ksVWUsbW4sUzksWGEpfWZvcih2YXIgYWJlPSLDkMOew74iLG9iZT0wO29iZTxhYmUubGVuZ3RoO29iZSsrKXt2YXIgbFE9YWJlLmNoYXJBdChvYmUpO3dlKEFlLFVlLENhLGxRLGxRKSx3ZShzaSxVZSxtbixsUSxsUSl9dmFyIGhRPVtbIm1hdGhiZiIsInRleHRiZiIsIk1haW4tQm9sZCJdLFsibWF0aGJmIiwidGV4dGJmIiwiTWFpbi1Cb2xkIl0sWyJtYXRobm9ybWFsIiwidGV4dGl0IiwiTWF0aC1JdGFsaWMiXSxbIm1hdGhub3JtYWwiLCJ0ZXh0aXQiLCJNYXRoLUl0YWxpYyJdLFsiYm9sZHN5bWJvbCIsImJvbGRzeW1ib2wiLCJNYWluLUJvbGRJdGFsaWMiXSxbImJvbGRzeW1ib2wiLCJib2xkc3ltYm9sIiwiTWFpbi1Cb2xkSXRhbGljIl0sWyJtYXRoc2NyIiwidGV4dHNjciIsIlNjcmlwdC1SZWd1bGFyIl0sWyIiLCIiLCIiXSxbIiIsIiIsIiJdLFsiIiwiIiwiIl0sWyJtYXRoZnJhayIsInRleHRmcmFrIiwiRnJha3R1ci1SZWd1bGFyIl0sWyJtYXRoZnJhayIsInRleHRmcmFrIiwiRnJha3R1ci1SZWd1bGFyIl0sWyJtYXRoYmIiLCJ0ZXh0YmIiLCJBTVMtUmVndWxhciJdLFsibWF0aGJiIiwidGV4dGJiIiwiQU1TLVJlZ3VsYXIiXSxbIm1hdGhib2xkZnJhayIsInRleHRib2xkZnJhayIsIkZyYWt0dXItUmVndWxhciJdLFsibWF0aGJvbGRmcmFrIiwidGV4dGJvbGRmcmFrIiwiRnJha3R1ci1SZWd1bGFyIl0sWyJtYXRoc2YiLCJ0ZXh0c2YiLCJTYW5zU2VyaWYtUmVndWxhciJdLFsibWF0aHNmIiwidGV4dHNmIiwiU2Fuc1NlcmlmLVJlZ3VsYXIiXSxbIm1hdGhib2xkc2YiLCJ0ZXh0Ym9sZHNmIiwiU2Fuc1NlcmlmLUJvbGQiXSxbIm1hdGhib2xkc2YiLCJ0ZXh0Ym9sZHNmIiwiU2Fuc1NlcmlmLUJvbGQiXSxbIm1hdGhpdHNmIiwidGV4dGl0c2YiLCJTYW5zU2VyaWYtSXRhbGljIl0sWyJtYXRoaXRzZiIsInRleHRpdHNmIiwiU2Fuc1NlcmlmLUl0YWxpYyJdLFsiIiwiIiwiIl0sWyIiLCIiLCIiXSxbIm1hdGh0dCIsInRleHR0dCIsIlR5cGV3cml0ZXItUmVndWxhciJdLFsibWF0aHR0IiwidGV4dHR0IiwiVHlwZXdyaXRlci1SZWd1bGFyIl1dLGN6ZT1bWyJtYXRoYmYiLCJ0ZXh0YmYiLCJNYWluLUJvbGQiXSxbIiIsIiIsIiJdLFsibWF0aHNmIiwidGV4dHNmIiwiU2Fuc1NlcmlmLVJlZ3VsYXIiXSxbIm1hdGhib2xkc2YiLCJ0ZXh0Ym9sZHNmIiwiU2Fuc1NlcmlmLUJvbGQiXSxbIm1hdGh0dCIsInRleHR0dCIsIlR5cGV3cml0ZXItUmVndWxhciJdXSxwSHQ9ZnVuY3Rpb24ocyx1KXt2YXIgZD1zLmNoYXJDb2RlQXQoMCkscD1zLmNoYXJDb2RlQXQoMSksdj0oZC01NTI5NikqMTAyNCsocC01NjMyMCkrNjU1MzYsYj11PT09Im1hdGgiPzA6MTtpZigxMTk4MDg8PXYmJnY8MTIwNDg0KXt2YXIgeT1NYXRoLmZsb29yKCh2LTExOTgwOCkvMjYpO3JldHVybltoUVt5XVsyXSxoUVt5XVtiXV19ZWxzZSBpZigxMjA3ODI8PXYmJnY8PTEyMDgzMSl7dmFyIFQ9TWF0aC5mbG9vcigodi0xMjA3ODIpLzEwKTtyZXR1cm5bY3plW1RdWzJdLGN6ZVtUXVtiXV19ZWxzZXtpZih2PT09MTIwNDg1fHx2PT09MTIwNDg2KXJldHVybltoUVswXVsyXSxoUVswXVtiXV07aWYoMTIwNDg2PHYmJnY8MTIwNzgyKXJldHVyblsiIiwiIl07dGhyb3cgbmV3IENpKCJVbnN1cHBvcnRlZCBjaGFyYWN0ZXI6ICIrcyl9fSxmUT1mdW5jdGlvbihzLHUsZCl7cmV0dXJuIFVsW2RdW3NdJiZVbFtkXVtzXS5yZXBsYWNlJiYocz1VbFtkXVtzXS5yZXBsYWNlKSx7dmFsdWU6cyxtZXRyaWNzOkoyZShzLHUsZCl9fSxGMz1mdW5jdGlvbihzLHUsZCxwLHYpe3ZhciBiPWZRKHMsdSxkKSx5PWIubWV0cmljcztzPWIudmFsdWU7dmFyIFQ7aWYoeSl7dmFyIF89eS5pdGFsaWM7KGQ9PT0idGV4dCJ8fHAmJnAuZm9udD09PSJtYXRoaXQiKSYmKF89MCksVD1uZXcgQnYocyx5LmhlaWdodCx5LmRlcHRoLF8seS5za2V3LHkud2lkdGgsdil9ZWxzZSB0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybigiTm8gY2hhcmFjdGVyIG1ldHJpY3MgIisoImZvciAnIitzKyInIGluIHN0eWxlICciK3UrIicgYW5kIG1vZGUgJyIrZCsiJyIpKSxUPW5ldyBCdihzLDAsMCwwLDAsMCx2KTtpZihwKXtULm1heEZvbnRTaXplPXAuc2l6ZU11bHRpcGxpZXIscC5zdHlsZS5pc1RpZ2h0KCkmJlQuY2xhc3Nlcy5wdXNoKCJtdGlnaHQiKTt2YXIgQT1wLmdldENvbG9yKCk7QSYmKFQuc3R5bGUuY29sb3I9QSl9cmV0dXJuIFR9LGJIdD1mdW5jdGlvbihzLHUsZCxwKXtyZXR1cm4gcD09PXZvaWQgMCYmKHA9W10pLGQuZm9udD09PSJib2xkc3ltYm9sIiYmZlEocywiTWFpbi1Cb2xkIix1KS5tZXRyaWNzP0YzKHMsIk1haW4tQm9sZCIsdSxkLHAuY29uY2F0KFsibWF0aGJmIl0pKTpzPT09IlxcInx8VWxbdV1bc10uZm9udD09PSJtYWluIj9GMyhzLCJNYWluLVJlZ3VsYXIiLHUsZCxwKTpGMyhzLCJBTVMtUmVndWxhciIsdSxkLHAuY29uY2F0KFsiYW1zcm0iXSkpfSxtSHQ9ZnVuY3Rpb24ocyx1LGQscCx2KXtyZXR1cm4gdiE9PSJ0ZXh0b3JkIiYmZlEocywiTWF0aC1Cb2xkSXRhbGljIix1KS5tZXRyaWNzP3tmb250TmFtZToiTWF0aC1Cb2xkSXRhbGljIixmb250Q2xhc3M6ImJvbGRzeW1ib2wifTp7Zm9udE5hbWU6Ik1haW4tQm9sZCIsZm9udENsYXNzOiJtYXRoYmYifX0sdkh0PWZ1bmN0aW9uKHMsdSxkKXt2YXIgcD1zLm1vZGUsdj1zLnRleHQsYj1bIm1vcmQiXSx5PXA9PT0ibWF0aCJ8fHA9PT0idGV4dCImJnUuZm9udCxUPXk/dS5mb250OnUuZm9udEZhbWlseSxfPSIiLEE9IiI7aWYodi5jaGFyQ29kZUF0KDApPT09NTUzNDkmJihbXyxBXT1wSHQodixwKSksXy5sZW5ndGg+MClyZXR1cm4gRjModixfLHAsdSxiLmNvbmNhdChBKSk7aWYoVCl7dmFyIFAsUjtpZihUPT09ImJvbGRzeW1ib2wiKXt2YXIgRj1tSHQodixwLHUsYixkKTtQPUYuZm9udE5hbWUsUj1bRi5mb250Q2xhc3NdfWVsc2UgeT8oUD1oemVbVF0uZm9udE5hbWUsUj1bVF0pOihQPWRRKFQsdS5mb250V2VpZ2h0LHUuZm9udFNoYXBlKSxSPVtULHUuZm9udFdlaWdodCx1LmZvbnRTaGFwZV0pO2lmKGZRKHYsUCxwKS5tZXRyaWNzKXJldHVybiBGMyh2LFAscCx1LGIuY29uY2F0KFIpKTtpZihyemUuaGFzT3duUHJvcGVydHkodikmJlAuc2xpY2UoMCwxMCk9PT0iVHlwZXdyaXRlciIpe2Zvcih2YXIgaj1bXSxLPTA7Szx2Lmxlbmd0aDtLKyspai5wdXNoKEYzKHZbS10sUCxwLHUsYi5jb25jYXQoUikpKTtyZXR1cm4gbHplKGopfX1pZihkPT09Im1hdGhvcmQiKXJldHVybiBGMyh2LCJNYXRoLUl0YWxpYyIscCx1LGIuY29uY2F0KFsibWF0aG5vcm1hbCJdKSk7aWYoZD09PSJ0ZXh0b3JkIil7dmFyIGVlPVVsW3BdW3ZdJiZVbFtwXVt2XS5mb250O2lmKGVlPT09ImFtcyIpe3ZhciBpZT1kUSgiYW1zcm0iLHUuZm9udFdlaWdodCx1LmZvbnRTaGFwZSk7cmV0dXJuIEYzKHYsaWUscCx1LGIuY29uY2F0KCJhbXNybSIsdS5mb250V2VpZ2h0LHUuZm9udFNoYXBlKSl9ZWxzZSBpZihlZT09PSJtYWluInx8IWVlKXt2YXIgb2U9ZFEoInRleHRybSIsdS5mb250V2VpZ2h0LHUuZm9udFNoYXBlKTtyZXR1cm4gRjModixvZSxwLHUsYi5jb25jYXQodS5mb250V2VpZ2h0LHUuZm9udFNoYXBlKSl9ZWxzZXt2YXIgcGU9ZFEoZWUsdS5mb250V2VpZ2h0LHUuZm9udFNoYXBlKTtyZXR1cm4gRjModixwZSxwLHUsYi5jb25jYXQocGUsdS5mb250V2VpZ2h0LHUuZm9udFNoYXBlKSl9fWVsc2UgdGhyb3cgbmV3IEVycm9yKCJ1bmV4cGVjdGVkIHR5cGU6ICIrZCsiIGluIG1ha2VPcmQiKX0sd0h0PShpLHMpPT57aWYoVDkoaS5jbGFzc2VzKSE9PVQ5KHMuY2xhc3Nlcyl8fGkuc2tldyE9PXMuc2tld3x8aS5tYXhGb250U2l6ZSE9PXMubWF4Rm9udFNpemUpcmV0dXJuITE7aWYoaS5jbGFzc2VzLmxlbmd0aD09PTEpe3ZhciB1PWkuY2xhc3Nlc1swXTtpZih1PT09Im1iaW4ifHx1PT09Im1vcmQiKXJldHVybiExfWZvcih2YXIgZCBpbiBpLnN0eWxlKWlmKGkuc3R5bGUuaGFzT3duUHJvcGVydHkoZCkmJmkuc3R5bGVbZF0hPT1zLnN0eWxlW2RdKXJldHVybiExO2Zvcih2YXIgcCBpbiBzLnN0eWxlKWlmKHMuc3R5bGUuaGFzT3duUHJvcGVydHkocCkmJmkuc3R5bGVbcF0hPT1zLnN0eWxlW3BdKXJldHVybiExO3JldHVybiEwfSx5SHQ9aT0+e2Zvcih2YXIgcz0wO3M8aS5sZW5ndGgtMTtzKyspe3ZhciB1PWlbc10sZD1pW3MrMV07dSBpbnN0YW5jZW9mIEJ2JiZkIGluc3RhbmNlb2YgQnYmJndIdCh1LGQpJiYodS50ZXh0Kz1kLnRleHQsdS5oZWlnaHQ9TWF0aC5tYXgodS5oZWlnaHQsZC5oZWlnaHQpLHUuZGVwdGg9TWF0aC5tYXgodS5kZXB0aCxkLmRlcHRoKSx1Lml0YWxpYz1kLml0YWxpYyxpLnNwbGljZShzKzEsMSkscy0tKX1yZXR1cm4gaX0sY2JlPWZ1bmN0aW9uKHMpe2Zvcih2YXIgdT0wLGQ9MCxwPTAsdj0wO3Y8cy5jaGlsZHJlbi5sZW5ndGg7disrKXt2YXIgYj1zLmNoaWxkcmVuW3ZdO2IuaGVpZ2h0PnUmJih1PWIuaGVpZ2h0KSxiLmRlcHRoPmQmJihkPWIuZGVwdGgpLGIubWF4Rm9udFNpemU+cCYmKHA9Yi5tYXhGb250U2l6ZSl9cy5oZWlnaHQ9dSxzLmRlcHRoPWQscy5tYXhGb250U2l6ZT1wfSxSMj1mdW5jdGlvbihzLHUsZCxwKXt2YXIgdj1uZXcgY1Iocyx1LGQscCk7cmV0dXJuIGNiZSh2KSx2fSx1emU9KGkscyx1LGQpPT5uZXcgY1IoaSxzLHUsZCkseEh0PWZ1bmN0aW9uKHMsdSxkKXt2YXIgcD1SMihbc10sW10sdSk7cmV0dXJuIHAuaGVpZ2h0PU1hdGgubWF4KGR8fHUuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcyx1Lm1pblJ1bGVUaGlja25lc3MpLHAuc3R5bGUuYm9yZGVyQm90dG9tV2lkdGg9UmkocC5oZWlnaHQpLHAubWF4Rm9udFNpemU9MSxwfSxrSHQ9ZnVuY3Rpb24ocyx1LGQscCl7dmFyIHY9bmV3IHRiZShzLHUsZCxwKTtyZXR1cm4gY2JlKHYpLHZ9LGx6ZT1mdW5jdGlvbihzKXt2YXIgdT1uZXcgb1Iocyk7cmV0dXJuIGNiZSh1KSx1fSxFSHQ9ZnVuY3Rpb24ocyx1KXtyZXR1cm4gcyBpbnN0YW5jZW9mIG9SP1IyKFtdLFtzXSx1KTpzfSxUSHQ9ZnVuY3Rpb24ocyl7aWYocy5wb3NpdGlvblR5cGU9PT0iaW5kaXZpZHVhbFNoaWZ0Iil7Zm9yKHZhciB1PXMuY2hpbGRyZW4sZD1bdVswXV0scD0tdVswXS5zaGlmdC11WzBdLmVsZW0uZGVwdGgsdj1wLGI9MTtiPHUubGVuZ3RoO2IrKyl7dmFyIHk9LXVbYl0uc2hpZnQtdi11W2JdLmVsZW0uZGVwdGgsVD15LSh1W2ItMV0uZWxlbS5oZWlnaHQrdVtiLTFdLmVsZW0uZGVwdGgpO3Y9dit5LGQucHVzaCh7dHlwZToia2VybiIsc2l6ZTpUfSksZC5wdXNoKHVbYl0pfXJldHVybntjaGlsZHJlbjpkLGRlcHRoOnB9fXZhciBfO2lmKHMucG9zaXRpb25UeXBlPT09InRvcCIpe2Zvcih2YXIgQT1zLnBvc2l0aW9uRGF0YSxQPTA7UDxzLmNoaWxkcmVuLmxlbmd0aDtQKyspe3ZhciBSPXMuY2hpbGRyZW5bUF07QS09Ui50eXBlPT09Imtlcm4iP1Iuc2l6ZTpSLmVsZW0uaGVpZ2h0K1IuZWxlbS5kZXB0aH1fPUF9ZWxzZSBpZihzLnBvc2l0aW9uVHlwZT09PSJib3R0b20iKV89LXMucG9zaXRpb25EYXRhO2Vsc2V7dmFyIEY9cy5jaGlsZHJlblswXTtpZihGLnR5cGUhPT0iZWxlbSIpdGhyb3cgbmV3IEVycm9yKCdGaXJzdCBjaGlsZCBtdXN0IGhhdmUgdHlwZSAiZWxlbSIuJyk7aWYocy5wb3NpdGlvblR5cGU9PT0ic2hpZnQiKV89LUYuZWxlbS5kZXB0aC1zLnBvc2l0aW9uRGF0YTtlbHNlIGlmKHMucG9zaXRpb25UeXBlPT09ImZpcnN0QmFzZWxpbmUiKV89LUYuZWxlbS5kZXB0aDtlbHNlIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBwb3NpdGlvblR5cGUgIitzLnBvc2l0aW9uVHlwZSsiLiIpfXJldHVybntjaGlsZHJlbjpzLmNoaWxkcmVuLGRlcHRoOl99fSxDSHQ9ZnVuY3Rpb24ocyx1KXtmb3IodmFye2NoaWxkcmVuOmQsZGVwdGg6cH09VEh0KHMpLHY9MCxiPTA7YjxkLmxlbmd0aDtiKyspe3ZhciB5PWRbYl07aWYoeS50eXBlPT09ImVsZW0iKXt2YXIgVD15LmVsZW07dj1NYXRoLm1heCh2LFQubWF4Rm9udFNpemUsVC5oZWlnaHQpfX12Kz0yO3ZhciBfPVIyKFsicHN0cnV0Il0sW10pO18uc3R5bGUuaGVpZ2h0PVJpKHYpO2Zvcih2YXIgQT1bXSxQPXAsUj1wLEY9cCxqPTA7ajxkLmxlbmd0aDtqKyspe3ZhciBLPWRbal07aWYoSy50eXBlPT09Imtlcm4iKUYrPUsuc2l6ZTtlbHNle3ZhciBlZT1LLmVsZW0saWU9Sy53cmFwcGVyQ2xhc3Nlc3x8W10sb2U9Sy53cmFwcGVyU3R5bGV8fHt9LHBlPVIyKGllLFtfLGVlXSx2b2lkIDAsb2UpO3BlLnN0eWxlLnRvcD1SaSgtdi1GLWVlLmRlcHRoKSxLLm1hcmdpbkxlZnQmJihwZS5zdHlsZS5tYXJnaW5MZWZ0PUsubWFyZ2luTGVmdCksSy5tYXJnaW5SaWdodCYmKHBlLnN0eWxlLm1hcmdpblJpZ2h0PUsubWFyZ2luUmlnaHQpLEEucHVzaChwZSksRis9ZWUuaGVpZ2h0K2VlLmRlcHRofVA9TWF0aC5taW4oUCxGKSxSPU1hdGgubWF4KFIsRil9dmFyIGJlPVIyKFsidmxpc3QiXSxBKTtiZS5zdHlsZS5oZWlnaHQ9UmkoUik7dmFyIGFlO2lmKFA8MCl7dmFyIG5lPVIyKFtdLFtdKSxzZT1SMihbInZsaXN0Il0sW25lXSk7c2Uuc3R5bGUuaGVpZ2h0PVJpKC1QKTt2YXIgZGU9UjIoWyJ2bGlzdC1zIl0sW25ldyBCdigi4oCLIildKTthZT1bUjIoWyJ2bGlzdC1yIl0sW2JlLGRlXSksUjIoWyJ2bGlzdC1yIl0sW3NlXSldfWVsc2UgYWU9W1IyKFsidmxpc3QtciJdLFtiZV0pXTt2YXIgWD1SMihbInZsaXN0LXQiXSxhZSk7cmV0dXJuIGFlLmxlbmd0aD09PTImJlguY2xhc3Nlcy5wdXNoKCJ2bGlzdC10MiIpLFguaGVpZ2h0PVIsWC5kZXB0aD0tUCxYfSxTSHQ9KGkscyk9Pnt2YXIgdT1SMihbIm1zcGFjZSJdLFtdLHMpLGQ9VWgoaSxzKTtyZXR1cm4gdS5zdHlsZS5tYXJnaW5SaWdodD1SaShkKSx1fSxkUT1mdW5jdGlvbihzLHUsZCl7dmFyIHA9IiI7c3dpdGNoKHMpe2Nhc2UiYW1zcm0iOnA9IkFNUyI7YnJlYWs7Y2FzZSJ0ZXh0cm0iOnA9Ik1haW4iO2JyZWFrO2Nhc2UidGV4dHNmIjpwPSJTYW5zU2VyaWYiO2JyZWFrO2Nhc2UidGV4dHR0IjpwPSJUeXBld3JpdGVyIjticmVhaztkZWZhdWx0OnA9c312YXIgdjtyZXR1cm4gdT09PSJ0ZXh0YmYiJiZkPT09InRleHRpdCI/dj0iQm9sZEl0YWxpYyI6dT09PSJ0ZXh0YmYiP3Y9IkJvbGQiOnU9PT0idGV4dGl0Ij92PSJJdGFsaWMiOnY9IlJlZ3VsYXIiLHArIi0iK3Z9LGh6ZT17bWF0aGJmOnt2YXJpYW50OiJib2xkIixmb250TmFtZToiTWFpbi1Cb2xkIn0sbWF0aHJtOnt2YXJpYW50OiJub3JtYWwiLGZvbnROYW1lOiJNYWluLVJlZ3VsYXIifSx0ZXh0aXQ6e3ZhcmlhbnQ6Iml0YWxpYyIsZm9udE5hbWU6Ik1haW4tSXRhbGljIn0sbWF0aGl0Ont2YXJpYW50OiJpdGFsaWMiLGZvbnROYW1lOiJNYWluLUl0YWxpYyJ9LG1hdGhub3JtYWw6e3ZhcmlhbnQ6Iml0YWxpYyIsZm9udE5hbWU6Ik1hdGgtSXRhbGljIn0sbWF0aGJiOnt2YXJpYW50OiJkb3VibGUtc3RydWNrIixmb250TmFtZToiQU1TLVJlZ3VsYXIifSxtYXRoY2FsOnt2YXJpYW50OiJzY3JpcHQiLGZvbnROYW1lOiJDYWxpZ3JhcGhpYy1SZWd1bGFyIn0sbWF0aGZyYWs6e3ZhcmlhbnQ6ImZyYWt0dXIiLGZvbnROYW1lOiJGcmFrdHVyLVJlZ3VsYXIifSxtYXRoc2NyOnt2YXJpYW50OiJzY3JpcHQiLGZvbnROYW1lOiJTY3JpcHQtUmVndWxhciJ9LG1hdGhzZjp7dmFyaWFudDoic2Fucy1zZXJpZiIsZm9udE5hbWU6IlNhbnNTZXJpZi1SZWd1bGFyIn0sbWF0aHR0Ont2YXJpYW50OiJtb25vc3BhY2UiLGZvbnROYW1lOiJUeXBld3JpdGVyLVJlZ3VsYXIifX0sZnplPXt2ZWM6WyJ2ZWMiLC40NzEsLjcxNF0sb2lpbnRTaXplMTpbIm9paW50U2l6ZTEiLC45NTcsLjQ5OV0sb2lpbnRTaXplMjpbIm9paW50U2l6ZTIiLDEuNDcyLC42NTldLG9paWludFNpemUxOlsib2lpaW50U2l6ZTEiLDEuMzA0LC40OTldLG9paWludFNpemUyOlsib2lpaW50U2l6ZTIiLDEuOTgsLjY1OV19LF9IdD1mdW5jdGlvbihzLHUpe3ZhcltkLHAsdl09ZnplW3NdLGI9bmV3IEM5KGQpLHk9bmV3IEQ3KFtiXSx7d2lkdGg6UmkocCksaGVpZ2h0OlJpKHYpLHN0eWxlOiJ3aWR0aDoiK1JpKHApLHZpZXdCb3g6IjAgMCAiKzFlMypwKyIgIisxZTMqdixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJ4TWluWU1pbiJ9KSxUPXV6ZShbIm92ZXJsYXkiXSxbeV0sdSk7cmV0dXJuIFQuaGVpZ2h0PXYsVC5zdHlsZS5oZWlnaHQ9UmkodiksVC5zdHlsZS53aWR0aD1SaShwKSxUfSx6bj17Zm9udE1hcDpoemUsbWFrZVN5bWJvbDpGMyxtYXRoc3ltOmJIdCxtYWtlU3BhbjpSMixtYWtlU3ZnU3Bhbjp1emUsbWFrZUxpbmVTcGFuOnhIdCxtYWtlQW5jaG9yOmtIdCxtYWtlRnJhZ21lbnQ6bHplLHdyYXBGcmFnbWVudDpFSHQsbWFrZVZMaXN0OkNIdCxtYWtlT3JkOnZIdCxtYWtlR2x1ZTpTSHQsc3RhdGljU3ZnOl9IdCxzdmdEYXRhOmZ6ZSx0cnlDb21iaW5lQ2hhcnM6eUh0fSxHaD17bnVtYmVyOjMsdW5pdDoibXUifSwkQz17bnVtYmVyOjQsdW5pdDoibXUifSxPNz17bnVtYmVyOjUsdW5pdDoibXUifSxBSHQ9e21vcmQ6e21vcDpHaCxtYmluOiRDLG1yZWw6TzcsbWlubmVyOkdofSxtb3A6e21vcmQ6R2gsbW9wOkdoLG1yZWw6TzcsbWlubmVyOkdofSxtYmluOnttb3JkOiRDLG1vcDokQyxtb3BlbjokQyxtaW5uZXI6JEN9LG1yZWw6e21vcmQ6TzcsbW9wOk83LG1vcGVuOk83LG1pbm5lcjpPN30sbW9wZW46e30sbWNsb3NlOnttb3A6R2gsbWJpbjokQyxtcmVsOk83LG1pbm5lcjpHaH0sbXB1bmN0Onttb3JkOkdoLG1vcDpHaCxtcmVsOk83LG1vcGVuOkdoLG1jbG9zZTpHaCxtcHVuY3Q6R2gsbWlubmVyOkdofSxtaW5uZXI6e21vcmQ6R2gsbW9wOkdoLG1iaW46JEMsbXJlbDpPNyxtb3BlbjpHaCxtcHVuY3Q6R2gsbWlubmVyOkdofX0sTEh0PXttb3JkOnttb3A6R2h9LG1vcDp7bW9yZDpHaCxtb3A6R2h9LG1iaW46e30sbXJlbDp7fSxtb3Blbjp7fSxtY2xvc2U6e21vcDpHaH0sbXB1bmN0Ont9LG1pbm5lcjp7bW9wOkdofX0sZHplPXt9LGdRPXt9LHBRPXt9O2Z1bmN0aW9uIEppKGkpe2Zvcih2YXJ7dHlwZTpzLG5hbWVzOnUscHJvcHM6ZCxoYW5kbGVyOnAsaHRtbEJ1aWxkZXI6dixtYXRobWxCdWlsZGVyOmJ9PWkseT17dHlwZTpzLG51bUFyZ3M6ZC5udW1BcmdzLGFyZ1R5cGVzOmQuYXJnVHlwZXMsYWxsb3dlZEluQXJndW1lbnQ6ISFkLmFsbG93ZWRJbkFyZ3VtZW50LGFsbG93ZWRJblRleHQ6ISFkLmFsbG93ZWRJblRleHQsYWxsb3dlZEluTWF0aDpkLmFsbG93ZWRJbk1hdGg9PT12b2lkIDA/ITA6ZC5hbGxvd2VkSW5NYXRoLG51bU9wdGlvbmFsQXJnczpkLm51bU9wdGlvbmFsQXJnc3x8MCxpbmZpeDohIWQuaW5maXgscHJpbWl0aXZlOiEhZC5wcmltaXRpdmUsaGFuZGxlcjpwfSxUPTA7VDx1Lmxlbmd0aDsrK1QpZHplW3VbVF1dPXk7cyYmKHYmJihnUVtzXT12KSxiJiYocFFbc109YikpfWZ1bmN0aW9uIHpDKGkpe3Zhcnt0eXBlOnMsaHRtbEJ1aWxkZXI6dSxtYXRobWxCdWlsZGVyOmR9PWk7Smkoe3R5cGU6cyxuYW1lczpbXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKCl7dGhyb3cgbmV3IEVycm9yKCJTaG91bGQgbmV2ZXIgYmUgY2FsbGVkLiIpfSxodG1sQnVpbGRlcjp1LG1hdGhtbEJ1aWxkZXI6ZH0pfXZhciBiUT1mdW5jdGlvbihzKXtyZXR1cm4gcy50eXBlPT09Im9yZGdyb3VwIiYmcy5ib2R5Lmxlbmd0aD09PTE/cy5ib2R5WzBdOnN9LFhmPWZ1bmN0aW9uKHMpe3JldHVybiBzLnR5cGU9PT0ib3JkZ3JvdXAiP3MuYm9keTpbc119LE43PXpuLm1ha2VTcGFuLE1IdD1bImxlZnRtb3N0IiwibWJpbiIsIm1vcGVuIiwibXJlbCIsIm1vcCIsIm1wdW5jdCJdLERIdD1bInJpZ2h0bW9zdCIsIm1yZWwiLCJtY2xvc2UiLCJtcHVuY3QiXSxJSHQ9e2Rpc3BsYXk6VGEuRElTUExBWSx0ZXh0OlRhLlRFWFQsc2NyaXB0OlRhLlNDUklQVCxzY3JpcHRzY3JpcHQ6VGEuU0NSSVBUU0NSSVBUfSxPSHQ9e21vcmQ6Im1vcmQiLG1vcDoibW9wIixtYmluOiJtYmluIixtcmVsOiJtcmVsIixtb3BlbjoibW9wZW4iLG1jbG9zZToibWNsb3NlIixtcHVuY3Q6Im1wdW5jdCIsbWlubmVyOiJtaW5uZXIifSxkMT1mdW5jdGlvbihzLHUsZCxwKXtwPT09dm9pZCAwJiYocD1bbnVsbCxudWxsXSk7Zm9yKHZhciB2PVtdLGI9MDtiPHMubGVuZ3RoO2IrKyl7dmFyIHk9dXUoc1tiXSx1KTtpZih5IGluc3RhbmNlb2Ygb1Ipe3ZhciBUPXkuY2hpbGRyZW47di5wdXNoKC4uLlQpfWVsc2Ugdi5wdXNoKHkpfWlmKHpuLnRyeUNvbWJpbmVDaGFycyh2KSwhZClyZXR1cm4gdjt2YXIgXz11O2lmKHMubGVuZ3RoPT09MSl7dmFyIEE9c1swXTtBLnR5cGU9PT0ic2l6aW5nIj9fPXUuaGF2aW5nU2l6ZShBLnNpemUpOkEudHlwZT09PSJzdHlsaW5nIiYmKF89dS5oYXZpbmdTdHlsZShJSHRbQS5zdHlsZV0pKX12YXIgUD1ONyhbcFswXXx8ImxlZnRtb3N0Il0sW10sdSksUj1ONyhbcFsxXXx8InJpZ2h0bW9zdCJdLFtdLHUpLEY9ZD09PSJyb290IjtyZXR1cm4gZ3plKHYsKGosSyk9Pnt2YXIgZWU9Sy5jbGFzc2VzWzBdLGllPWouY2xhc3Nlc1swXTtlZT09PSJtYmluIiYmWWEuY29udGFpbnMoREh0LGllKT9LLmNsYXNzZXNbMF09Im1vcmQiOmllPT09Im1iaW4iJiZZYS5jb250YWlucyhNSHQsZWUpJiYoai5jbGFzc2VzWzBdPSJtb3JkIil9LHtub2RlOlB9LFIsRiksZ3plKHYsKGosSyk9Pnt2YXIgZWU9dWJlKEspLGllPXViZShqKSxvZT1lZSYmaWU/ai5oYXNDbGFzcygibXRpZ2h0Iik/TEh0W2VlXVtpZV06QUh0W2VlXVtpZV06bnVsbDtpZihvZSlyZXR1cm4gem4ubWFrZUdsdWUob2UsXyl9LHtub2RlOlB9LFIsRiksdn0sZ3plPWZ1bmN0aW9uIGkocyx1LGQscCx2KXtwJiZzLnB1c2gocCk7Zm9yKHZhciBiPTA7YjxzLmxlbmd0aDtiKyspe3ZhciB5PXNbYl0sVD1wemUoeSk7aWYoVCl7aShULmNoaWxkcmVuLHUsZCxudWxsLHYpO2NvbnRpbnVlfXZhciBfPSF5Lmhhc0NsYXNzKCJtc3BhY2UiKTtpZihfKXt2YXIgQT11KHksZC5ub2RlKTtBJiYoZC5pbnNlcnRBZnRlcj9kLmluc2VydEFmdGVyKEEpOihzLnVuc2hpZnQoQSksYisrKSl9Xz9kLm5vZGU9eTp2JiZ5Lmhhc0NsYXNzKCJuZXdsaW5lIikmJihkLm5vZGU9TjcoWyJsZWZ0bW9zdCJdKSksZC5pbnNlcnRBZnRlcj0oUD0+Uj0+e3Muc3BsaWNlKFArMSwwLFIpLGIrK30pKGIpfXAmJnMucG9wKCl9LHB6ZT1mdW5jdGlvbihzKXtyZXR1cm4gcyBpbnN0YW5jZW9mIG9SfHxzIGluc3RhbmNlb2YgdGJlfHxzIGluc3RhbmNlb2YgY1ImJnMuaGFzQ2xhc3MoImVuY2xvc2luZyIpP3M6bnVsbH0sTkh0PWZ1bmN0aW9uIGkocyx1KXt2YXIgZD1wemUocyk7aWYoZCl7dmFyIHA9ZC5jaGlsZHJlbjtpZihwLmxlbmd0aCl7aWYodT09PSJyaWdodCIpcmV0dXJuIGkocFtwLmxlbmd0aC0xXSwicmlnaHQiKTtpZih1PT09ImxlZnQiKXJldHVybiBpKHBbMF0sImxlZnQiKX19cmV0dXJuIHN9LHViZT1mdW5jdGlvbihzLHUpe3JldHVybiBzPyh1JiYocz1OSHQocyx1KSksT0h0W3MuY2xhc3Nlc1swXV18fG51bGwpOm51bGx9LHVSPWZ1bmN0aW9uKHMsdSl7dmFyIGQ9WyJudWxsZGVsaW1pdGVyIl0uY29uY2F0KHMuYmFzZVNpemluZ0NsYXNzZXMoKSk7cmV0dXJuIE43KHUuY29uY2F0KGQpKX0sdXU9ZnVuY3Rpb24ocyx1LGQpe2lmKCFzKXJldHVybiBONygpO2lmKGdRW3MudHlwZV0pe3ZhciBwPWdRW3MudHlwZV0ocyx1KTtpZihkJiZ1LnNpemUhPT1kLnNpemUpe3A9TjcodS5zaXppbmdDbGFzc2VzKGQpLFtwXSx1KTt2YXIgdj11LnNpemVNdWx0aXBsaWVyL2Quc2l6ZU11bHRpcGxpZXI7cC5oZWlnaHQqPXYscC5kZXB0aCo9dn1yZXR1cm4gcH1lbHNlIHRocm93IG5ldyBDaSgiR290IGdyb3VwIG9mIHVua25vd24gdHlwZTogJyIrcy50eXBlKyInIil9O2Z1bmN0aW9uIG1RKGkscyl7dmFyIHU9TjcoWyJiYXNlIl0saSxzKSxkPU43KFsic3RydXQiXSk7cmV0dXJuIGQuc3R5bGUuaGVpZ2h0PVJpKHUuaGVpZ2h0K3UuZGVwdGgpLHUuZGVwdGgmJihkLnN0eWxlLnZlcnRpY2FsQWxpZ249UmkoLXUuZGVwdGgpKSx1LmNoaWxkcmVuLnVuc2hpZnQoZCksdX1mdW5jdGlvbiBsYmUoaSxzKXt2YXIgdT1udWxsO2kubGVuZ3RoPT09MSYmaVswXS50eXBlPT09InRhZyImJih1PWlbMF0udGFnLGk9aVswXS5ib2R5KTt2YXIgZD1kMShpLHMsInJvb3QiKSxwO2QubGVuZ3RoPT09MiYmZFsxXS5oYXNDbGFzcygidGFnIikmJihwPWQucG9wKCkpO2Zvcih2YXIgdj1bXSxiPVtdLHk9MDt5PGQubGVuZ3RoO3krKylpZihiLnB1c2goZFt5XSksZFt5XS5oYXNDbGFzcygibWJpbiIpfHxkW3ldLmhhc0NsYXNzKCJtcmVsIil8fGRbeV0uaGFzQ2xhc3MoImFsbG93YnJlYWsiKSl7Zm9yKHZhciBUPSExO3k8ZC5sZW5ndGgtMSYmZFt5KzFdLmhhc0NsYXNzKCJtc3BhY2UiKSYmIWRbeSsxXS5oYXNDbGFzcygibmV3bGluZSIpOyl5KyssYi5wdXNoKGRbeV0pLGRbeV0uaGFzQ2xhc3MoIm5vYnJlYWsiKSYmKFQ9ITApO1R8fCh2LnB1c2gobVEoYixzKSksYj1bXSl9ZWxzZSBkW3ldLmhhc0NsYXNzKCJuZXdsaW5lIikmJihiLnBvcCgpLGIubGVuZ3RoPjAmJih2LnB1c2gobVEoYixzKSksYj1bXSksdi5wdXNoKGRbeV0pKTtiLmxlbmd0aD4wJiZ2LnB1c2gobVEoYixzKSk7dmFyIF87dT8oXz1tUShkMSh1LHMsITApKSxfLmNsYXNzZXM9WyJ0YWciXSx2LnB1c2goXykpOnAmJnYucHVzaChwKTt2YXIgQT1ONyhbImthdGV4LWh0bWwiXSx2KTtpZihBLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIiksXyl7dmFyIFA9Xy5jaGlsZHJlblswXTtQLnN0eWxlLmhlaWdodD1SaShBLmhlaWdodCtBLmRlcHRoKSxBLmRlcHRoJiYoUC5zdHlsZS52ZXJ0aWNhbEFsaWduPVJpKC1BLmRlcHRoKSl9cmV0dXJuIEF9ZnVuY3Rpb24gYnplKGkpe3JldHVybiBuZXcgb1IoaSl9Y2xhc3MgRnZ7Y29uc3RydWN0b3Iocyx1LGQpe3RoaXMudHlwZT12b2lkIDAsdGhpcy5hdHRyaWJ1dGVzPXZvaWQgMCx0aGlzLmNoaWxkcmVuPXZvaWQgMCx0aGlzLmNsYXNzZXM9dm9pZCAwLHRoaXMudHlwZT1zLHRoaXMuYXR0cmlidXRlcz17fSx0aGlzLmNoaWxkcmVuPXV8fFtdLHRoaXMuY2xhc3Nlcz1kfHxbXX1zZXRBdHRyaWJ1dGUocyx1KXt0aGlzLmF0dHJpYnV0ZXNbc109dX1nZXRBdHRyaWJ1dGUocyl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1tzXX10b05vZGUoKXt2YXIgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLHRoaXMudHlwZSk7Zm9yKHZhciB1IGluIHRoaXMuYXR0cmlidXRlcylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLHUpJiZzLnNldEF0dHJpYnV0ZSh1LHRoaXMuYXR0cmlidXRlc1t1XSk7dGhpcy5jbGFzc2VzLmxlbmd0aD4wJiYocy5jbGFzc05hbWU9VDkodGhpcy5jbGFzc2VzKSk7Zm9yKHZhciBkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtkKyspcy5hcHBlbmRDaGlsZCh0aGlzLmNoaWxkcmVuW2RdLnRvTm9kZSgpKTtyZXR1cm4gc310b01hcmt1cCgpe3ZhciBzPSI8Iit0aGlzLnR5cGU7Zm9yKHZhciB1IGluIHRoaXMuYXR0cmlidXRlcylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLHUpJiYocys9IiAiK3UrJz0iJyxzKz1ZYS5lc2NhcGUodGhpcy5hdHRyaWJ1dGVzW3VdKSxzKz0nIicpO3RoaXMuY2xhc3Nlcy5sZW5ndGg+MCYmKHMrPScgY2xhc3MgPSInK1lhLmVzY2FwZShUOSh0aGlzLmNsYXNzZXMpKSsnIicpLHMrPSI+Ijtmb3IodmFyIGQ9MDtkPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO2QrKylzKz10aGlzLmNoaWxkcmVuW2RdLnRvTWFya3VwKCk7cmV0dXJuIHMrPSI8LyIrdGhpcy50eXBlKyI+IixzfXRvVGV4dCgpe3JldHVybiB0aGlzLmNoaWxkcmVuLm1hcChzPT5zLnRvVGV4dCgpKS5qb2luKCIiKX19Y2xhc3MgbFJ7Y29uc3RydWN0b3Iocyl7dGhpcy50ZXh0PXZvaWQgMCx0aGlzLnRleHQ9c310b05vZGUoKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGhpcy50ZXh0KX10b01hcmt1cCgpe3JldHVybiBZYS5lc2NhcGUodGhpcy50b1RleHQoKSl9dG9UZXh0KCl7cmV0dXJuIHRoaXMudGV4dH19Y2xhc3MgUEh0e2NvbnN0cnVjdG9yKHMpe3RoaXMud2lkdGg9dm9pZCAwLHRoaXMuY2hhcmFjdGVyPXZvaWQgMCx0aGlzLndpZHRoPXMscz49LjA1NTU1JiZzPD0uMDU1NTY/dGhpcy5jaGFyYWN0ZXI9IuKAiiI6cz49LjE2NjYmJnM8PS4xNjY3P3RoaXMuY2hhcmFjdGVyPSLigIkiOnM+PS4yMjIyJiZzPD0uMjIyMz90aGlzLmNoYXJhY3Rlcj0i4oCFIjpzPj0uMjc3NyYmczw9LjI3Nzg/dGhpcy5jaGFyYWN0ZXI9IuKAheKAiiI6cz49LS4wNTU1NiYmczw9LS4wNTU1NT90aGlzLmNoYXJhY3Rlcj0i4oCK4oGjIjpzPj0tLjE2NjcmJnM8PS0uMTY2Nj90aGlzLmNoYXJhY3Rlcj0i4oCJ4oGjIjpzPj0tLjIyMjMmJnM8PS0uMjIyMj90aGlzLmNoYXJhY3Rlcj0i4oGf4oGjIjpzPj0tLjI3NzgmJnM8PS0uMjc3Nz90aGlzLmNoYXJhY3Rlcj0i4oCF4oGjIjp0aGlzLmNoYXJhY3Rlcj1udWxsfXRvTm9kZSgpe2lmKHRoaXMuY2hhcmFjdGVyKXJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLmNoYXJhY3Rlcik7dmFyIHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIiwibXNwYWNlIik7cmV0dXJuIHMuc2V0QXR0cmlidXRlKCJ3aWR0aCIsUmkodGhpcy53aWR0aCkpLHN9dG9NYXJrdXAoKXtyZXR1cm4gdGhpcy5jaGFyYWN0ZXI/IjxtdGV4dD4iK3RoaXMuY2hhcmFjdGVyKyI8L210ZXh0PiI6Jzxtc3BhY2Ugd2lkdGg9IicrUmkodGhpcy53aWR0aCkrJyIvPid9dG9UZXh0KCl7cmV0dXJuIHRoaXMuY2hhcmFjdGVyP3RoaXMuY2hhcmFjdGVyOiIgIn19dmFyIHZpPXtNYXRoTm9kZTpGdixUZXh0Tm9kZTpsUixTcGFjZU5vZGU6UEh0LG5ld0RvY3VtZW50RnJhZ21lbnQ6YnplfSxSdj1mdW5jdGlvbihzLHUsZCl7cmV0dXJuIFVsW3VdW3NdJiZVbFt1XVtzXS5yZXBsYWNlJiZzLmNoYXJDb2RlQXQoMCkhPT01NTM0OSYmIShyemUuaGFzT3duUHJvcGVydHkocykmJmQmJihkLmZvbnRGYW1pbHkmJmQuZm9udEZhbWlseS5zbGljZSg0LDYpPT09InR0Inx8ZC5mb250JiZkLmZvbnQuc2xpY2UoNCw2KT09PSJ0dCIpKSYmKHM9VWxbdV1bc10ucmVwbGFjZSksbmV3IHZpLlRleHROb2RlKHMpfSxoYmU9ZnVuY3Rpb24ocyl7cmV0dXJuIHMubGVuZ3RoPT09MT9zWzBdOm5ldyB2aS5NYXRoTm9kZSgibXJvdyIscyl9LGZiZT1mdW5jdGlvbihzLHUpe2lmKHUuZm9udEZhbWlseT09PSJ0ZXh0dHQiKXJldHVybiJtb25vc3BhY2UiO2lmKHUuZm9udEZhbWlseT09PSJ0ZXh0c2YiKXJldHVybiB1LmZvbnRTaGFwZT09PSJ0ZXh0aXQiJiZ1LmZvbnRXZWlnaHQ9PT0idGV4dGJmIj8ic2Fucy1zZXJpZi1ib2xkLWl0YWxpYyI6dS5mb250U2hhcGU9PT0idGV4dGl0Ij8ic2Fucy1zZXJpZi1pdGFsaWMiOnUuZm9udFdlaWdodD09PSJ0ZXh0YmYiPyJib2xkLXNhbnMtc2VyaWYiOiJzYW5zLXNlcmlmIjtpZih1LmZvbnRTaGFwZT09PSJ0ZXh0aXQiJiZ1LmZvbnRXZWlnaHQ9PT0idGV4dGJmIilyZXR1cm4iYm9sZC1pdGFsaWMiO2lmKHUuZm9udFNoYXBlPT09InRleHRpdCIpcmV0dXJuIml0YWxpYyI7aWYodS5mb250V2VpZ2h0PT09InRleHRiZiIpcmV0dXJuImJvbGQiO3ZhciBkPXUuZm9udDtpZighZHx8ZD09PSJtYXRobm9ybWFsIilyZXR1cm4gbnVsbDt2YXIgcD1zLm1vZGU7aWYoZD09PSJtYXRoaXQiKXJldHVybiJpdGFsaWMiO2lmKGQ9PT0iYm9sZHN5bWJvbCIpcmV0dXJuIHMudHlwZT09PSJ0ZXh0b3JkIj8iYm9sZCI6ImJvbGQtaXRhbGljIjtpZihkPT09Im1hdGhiZiIpcmV0dXJuImJvbGQiO2lmKGQ9PT0ibWF0aGJiIilyZXR1cm4iZG91YmxlLXN0cnVjayI7aWYoZD09PSJtYXRoZnJhayIpcmV0dXJuImZyYWt0dXIiO2lmKGQ9PT0ibWF0aHNjciJ8fGQ9PT0ibWF0aGNhbCIpcmV0dXJuInNjcmlwdCI7aWYoZD09PSJtYXRoc2YiKXJldHVybiJzYW5zLXNlcmlmIjtpZihkPT09Im1hdGh0dCIpcmV0dXJuIm1vbm9zcGFjZSI7dmFyIHY9cy50ZXh0O2lmKFlhLmNvbnRhaW5zKFsiXFxpbWF0aCIsIlxcam1hdGgiXSx2KSlyZXR1cm4gbnVsbDtVbFtwXVt2XSYmVWxbcF1bdl0ucmVwbGFjZSYmKHY9VWxbcF1bdl0ucmVwbGFjZSk7dmFyIGI9em4uZm9udE1hcFtkXS5mb250TmFtZTtyZXR1cm4gSjJlKHYsYixwKT96bi5mb250TWFwW2RdLnZhcmlhbnQ6bnVsbH0sajI9ZnVuY3Rpb24ocyx1LGQpe2lmKHMubGVuZ3RoPT09MSl7dmFyIHA9TGwoc1swXSx1KTtyZXR1cm4gZCYmcCBpbnN0YW5jZW9mIEZ2JiZwLnR5cGU9PT0ibW8iJiYocC5zZXRBdHRyaWJ1dGUoImxzcGFjZSIsIjBlbSIpLHAuc2V0QXR0cmlidXRlKCJyc3BhY2UiLCIwZW0iKSksW3BdfWZvcih2YXIgdj1bXSxiLHk9MDt5PHMubGVuZ3RoO3krKyl7dmFyIFQ9TGwoc1t5XSx1KTtpZihUIGluc3RhbmNlb2YgRnYmJmIgaW5zdGFuY2VvZiBGdil7aWYoVC50eXBlPT09Im10ZXh0IiYmYi50eXBlPT09Im10ZXh0IiYmVC5nZXRBdHRyaWJ1dGUoIm1hdGh2YXJpYW50Iik9PT1iLmdldEF0dHJpYnV0ZSgibWF0aHZhcmlhbnQiKSl7Yi5jaGlsZHJlbi5wdXNoKC4uLlQuY2hpbGRyZW4pO2NvbnRpbnVlfWVsc2UgaWYoVC50eXBlPT09Im1uIiYmYi50eXBlPT09Im1uIil7Yi5jaGlsZHJlbi5wdXNoKC4uLlQuY2hpbGRyZW4pO2NvbnRpbnVlfWVsc2UgaWYoVC50eXBlPT09Im1pIiYmVC5jaGlsZHJlbi5sZW5ndGg9PT0xJiZiLnR5cGU9PT0ibW4iKXt2YXIgXz1ULmNoaWxkcmVuWzBdO2lmKF8gaW5zdGFuY2VvZiBsUiYmXy50ZXh0PT09Ii4iKXtiLmNoaWxkcmVuLnB1c2goLi4uVC5jaGlsZHJlbik7Y29udGludWV9fWVsc2UgaWYoYi50eXBlPT09Im1pIiYmYi5jaGlsZHJlbi5sZW5ndGg9PT0xKXt2YXIgQT1iLmNoaWxkcmVuWzBdO2lmKEEgaW5zdGFuY2VvZiBsUiYmQS50ZXh0PT09Isy4IiYmKFQudHlwZT09PSJtbyJ8fFQudHlwZT09PSJtaSJ8fFQudHlwZT09PSJtbiIpKXt2YXIgUD1ULmNoaWxkcmVuWzBdO1AgaW5zdGFuY2VvZiBsUiYmUC50ZXh0Lmxlbmd0aD4wJiYoUC50ZXh0PVAudGV4dC5zbGljZSgwLDEpKyLMuCIrUC50ZXh0LnNsaWNlKDEpLHYucG9wKCkpfX19di5wdXNoKFQpLGI9VH1yZXR1cm4gdn0sXzk9ZnVuY3Rpb24ocyx1LGQpe3JldHVybiBoYmUoajIocyx1LGQpKX0sTGw9ZnVuY3Rpb24ocyx1KXtpZighcylyZXR1cm4gbmV3IHZpLk1hdGhOb2RlKCJtcm93Iik7aWYocFFbcy50eXBlXSl7dmFyIGQ9cFFbcy50eXBlXShzLHUpO3JldHVybiBkfWVsc2UgdGhyb3cgbmV3IENpKCJHb3QgZ3JvdXAgb2YgdW5rbm93biB0eXBlOiAnIitzLnR5cGUrIiciKX07ZnVuY3Rpb24gbXplKGkscyx1LGQscCl7dmFyIHY9ajIoaSx1KSxiO3YubGVuZ3RoPT09MSYmdlswXWluc3RhbmNlb2YgRnYmJllhLmNvbnRhaW5zKFsibXJvdyIsIm10YWJsZSJdLHZbMF0udHlwZSk/Yj12WzBdOmI9bmV3IHZpLk1hdGhOb2RlKCJtcm93Iix2KTt2YXIgeT1uZXcgdmkuTWF0aE5vZGUoImFubm90YXRpb24iLFtuZXcgdmkuVGV4dE5vZGUocyldKTt5LnNldEF0dHJpYnV0ZSgiZW5jb2RpbmciLCJhcHBsaWNhdGlvbi94LXRleCIpO3ZhciBUPW5ldyB2aS5NYXRoTm9kZSgic2VtYW50aWNzIixbYix5XSksXz1uZXcgdmkuTWF0aE5vZGUoIm1hdGgiLFtUXSk7Xy5zZXRBdHRyaWJ1dGUoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCIpLGQmJl8uc2V0QXR0cmlidXRlKCJkaXNwbGF5IiwiYmxvY2siKTt2YXIgQT1wPyJrYXRleCI6ImthdGV4LW1hdGhtbCI7cmV0dXJuIHpuLm1ha2VTcGFuKFtBXSxbX10pfXZhciB2emU9ZnVuY3Rpb24ocyl7cmV0dXJuIG5ldyBNNyh7c3R5bGU6cy5kaXNwbGF5TW9kZT9UYS5ESVNQTEFZOlRhLlRFWFQsbWF4U2l6ZTpzLm1heFNpemUsbWluUnVsZVRoaWNrbmVzczpzLm1pblJ1bGVUaGlja25lc3N9KX0sd3plPWZ1bmN0aW9uKHMsdSl7aWYodS5kaXNwbGF5TW9kZSl7dmFyIGQ9WyJrYXRleC1kaXNwbGF5Il07dS5sZXFubyYmZC5wdXNoKCJsZXFubyIpLHUuZmxlcW4mJmQucHVzaCgiZmxlcW4iKSxzPXpuLm1ha2VTcGFuKGQsW3NdKX1yZXR1cm4gc30sQkh0PWZ1bmN0aW9uKHMsdSxkKXt2YXIgcD12emUoZCksdjtpZihkLm91dHB1dD09PSJtYXRobWwiKXJldHVybiBtemUocyx1LHAsZC5kaXNwbGF5TW9kZSwhMCk7aWYoZC5vdXRwdXQ9PT0iaHRtbCIpe3ZhciBiPWxiZShzLHApO3Y9em4ubWFrZVNwYW4oWyJrYXRleCJdLFtiXSl9ZWxzZXt2YXIgeT1temUocyx1LHAsZC5kaXNwbGF5TW9kZSwhMSksVD1sYmUocyxwKTt2PXpuLm1ha2VTcGFuKFsia2F0ZXgiXSxbeSxUXSl9cmV0dXJuIHd6ZSh2LGQpfSxGSHQ9ZnVuY3Rpb24ocyx1LGQpe3ZhciBwPXZ6ZShkKSx2PWxiZShzLHApLGI9em4ubWFrZVNwYW4oWyJrYXRleCJdLFt2XSk7cmV0dXJuIHd6ZShiLGQpfSxSSHQ9e3dpZGVoYXQ6Il4iLHdpZGVjaGVjazoiy4ciLHdpZGV0aWxkZToifiIsdXRpbGRlOiJ+IixvdmVybGVmdGFycm93OiLihpAiLHVuZGVybGVmdGFycm93OiLihpAiLHhsZWZ0YXJyb3c6IuKGkCIsb3ZlcnJpZ2h0YXJyb3c6IuKGkiIsdW5kZXJyaWdodGFycm93OiLihpIiLHhyaWdodGFycm93OiLihpIiLHVuZGVyYnJhY2U6IuKPnyIsb3ZlcmJyYWNlOiLij54iLG92ZXJncm91cDoi4o+gIix1bmRlcmdyb3VwOiLij6EiLG92ZXJsZWZ0cmlnaHRhcnJvdzoi4oaUIix1bmRlcmxlZnRyaWdodGFycm93OiLihpQiLHhsZWZ0cmlnaHRhcnJvdzoi4oaUIixPdmVycmlnaHRhcnJvdzoi4oeSIix4UmlnaHRhcnJvdzoi4oeSIixvdmVybGVmdGhhcnBvb246IuKGvCIseGxlZnRoYXJwb29udXA6IuKGvCIsb3ZlcnJpZ2h0aGFycG9vbjoi4oeAIix4cmlnaHRoYXJwb29udXA6IuKHgCIseExlZnRhcnJvdzoi4oeQIix4TGVmdHJpZ2h0YXJyb3c6IuKHlCIseGhvb2tsZWZ0YXJyb3c6IuKGqSIseGhvb2tyaWdodGFycm93OiLihqoiLHhtYXBzdG86IuKGpiIseHJpZ2h0aGFycG9vbmRvd246IuKHgSIseGxlZnRoYXJwb29uZG93bjoi4oa9Iix4cmlnaHRsZWZ0aGFycG9vbnM6IuKHjCIseGxlZnRyaWdodGhhcnBvb25zOiLih4siLHh0d29oZWFkbGVmdGFycm93OiLihp4iLHh0d29oZWFkcmlnaHRhcnJvdzoi4oagIix4bG9uZ2VxdWFsOiI9Iix4dG9mcm9tOiLih4QiLHhyaWdodGxlZnRhcnJvd3M6IuKHhCIseHJpZ2h0ZXF1aWxpYnJpdW06IuKHjCIseGxlZnRlcXVpbGlicml1bToi4oeLIiwiXFxjZHJpZ2h0YXJyb3ciOiLihpIiLCJcXGNkbGVmdGFycm93Ijoi4oaQIiwiXFxjZGxvbmdlcXVhbCI6Ij0ifSxqSHQ9ZnVuY3Rpb24ocyl7dmFyIHU9bmV3IHZpLk1hdGhOb2RlKCJtbyIsW25ldyB2aS5UZXh0Tm9kZShSSHRbcy5yZXBsYWNlKC9eXFwvLCIiKV0pXSk7cmV0dXJuIHUuc2V0QXR0cmlidXRlKCJzdHJldGNoeSIsInRydWUiKSx1fSwkSHQ9e292ZXJyaWdodGFycm93OltbInJpZ2h0YXJyb3ciXSwuODg4LDUyMiwieE1heFlNaW4iXSxvdmVybGVmdGFycm93OltbImxlZnRhcnJvdyJdLC44ODgsNTIyLCJ4TWluWU1pbiJdLHVuZGVycmlnaHRhcnJvdzpbWyJyaWdodGFycm93Il0sLjg4OCw1MjIsInhNYXhZTWluIl0sdW5kZXJsZWZ0YXJyb3c6W1sibGVmdGFycm93Il0sLjg4OCw1MjIsInhNaW5ZTWluIl0seHJpZ2h0YXJyb3c6W1sicmlnaHRhcnJvdyJdLDEuNDY5LDUyMiwieE1heFlNaW4iXSwiXFxjZHJpZ2h0YXJyb3ciOltbInJpZ2h0YXJyb3ciXSwzLDUyMiwieE1heFlNaW4iXSx4bGVmdGFycm93OltbImxlZnRhcnJvdyJdLDEuNDY5LDUyMiwieE1pbllNaW4iXSwiXFxjZGxlZnRhcnJvdyI6W1sibGVmdGFycm93Il0sMyw1MjIsInhNaW5ZTWluIl0sT3ZlcnJpZ2h0YXJyb3c6W1siZG91YmxlcmlnaHRhcnJvdyJdLC44ODgsNTYwLCJ4TWF4WU1pbiJdLHhSaWdodGFycm93OltbImRvdWJsZXJpZ2h0YXJyb3ciXSwxLjUyNiw1NjAsInhNYXhZTWluIl0seExlZnRhcnJvdzpbWyJkb3VibGVsZWZ0YXJyb3ciXSwxLjUyNiw1NjAsInhNaW5ZTWluIl0sb3ZlcmxlZnRoYXJwb29uOltbImxlZnRoYXJwb29uIl0sLjg4OCw1MjIsInhNaW5ZTWluIl0seGxlZnRoYXJwb29udXA6W1sibGVmdGhhcnBvb24iXSwuODg4LDUyMiwieE1pbllNaW4iXSx4bGVmdGhhcnBvb25kb3duOltbImxlZnRoYXJwb29uZG93biJdLC44ODgsNTIyLCJ4TWluWU1pbiJdLG92ZXJyaWdodGhhcnBvb246W1sicmlnaHRoYXJwb29uIl0sLjg4OCw1MjIsInhNYXhZTWluIl0seHJpZ2h0aGFycG9vbnVwOltbInJpZ2h0aGFycG9vbiJdLC44ODgsNTIyLCJ4TWF4WU1pbiJdLHhyaWdodGhhcnBvb25kb3duOltbInJpZ2h0aGFycG9vbmRvd24iXSwuODg4LDUyMiwieE1heFlNaW4iXSx4bG9uZ2VxdWFsOltbImxvbmdlcXVhbCJdLC44ODgsMzM0LCJ4TWluWU1pbiJdLCJcXGNkbG9uZ2VxdWFsIjpbWyJsb25nZXF1YWwiXSwzLDMzNCwieE1pbllNaW4iXSx4dHdvaGVhZGxlZnRhcnJvdzpbWyJ0d29oZWFkbGVmdGFycm93Il0sLjg4OCwzMzQsInhNaW5ZTWluIl0seHR3b2hlYWRyaWdodGFycm93OltbInR3b2hlYWRyaWdodGFycm93Il0sLjg4OCwzMzQsInhNYXhZTWluIl0sb3ZlcmxlZnRyaWdodGFycm93OltbImxlZnRhcnJvdyIsInJpZ2h0YXJyb3ciXSwuODg4LDUyMl0sb3ZlcmJyYWNlOltbImxlZnRicmFjZSIsIm1pZGJyYWNlIiwicmlnaHRicmFjZSJdLDEuNiw1NDhdLHVuZGVyYnJhY2U6W1sibGVmdGJyYWNldW5kZXIiLCJtaWRicmFjZXVuZGVyIiwicmlnaHRicmFjZXVuZGVyIl0sMS42LDU0OF0sdW5kZXJsZWZ0cmlnaHRhcnJvdzpbWyJsZWZ0YXJyb3ciLCJyaWdodGFycm93Il0sLjg4OCw1MjJdLHhsZWZ0cmlnaHRhcnJvdzpbWyJsZWZ0YXJyb3ciLCJyaWdodGFycm93Il0sMS43NSw1MjJdLHhMZWZ0cmlnaHRhcnJvdzpbWyJkb3VibGVsZWZ0YXJyb3ciLCJkb3VibGVyaWdodGFycm93Il0sMS43NSw1NjBdLHhyaWdodGxlZnRoYXJwb29uczpbWyJsZWZ0aGFycG9vbmRvd25wbHVzIiwicmlnaHRoYXJwb29ucGx1cyJdLDEuNzUsNzE2XSx4bGVmdHJpZ2h0aGFycG9vbnM6W1sibGVmdGhhcnBvb25wbHVzIiwicmlnaHRoYXJwb29uZG93bnBsdXMiXSwxLjc1LDcxNl0seGhvb2tsZWZ0YXJyb3c6W1sibGVmdGFycm93IiwicmlnaHRob29rIl0sMS4wOCw1MjJdLHhob29rcmlnaHRhcnJvdzpbWyJsZWZ0aG9vayIsInJpZ2h0YXJyb3ciXSwxLjA4LDUyMl0sb3ZlcmxpbmVzZWdtZW50OltbImxlZnRsaW5lc2VnbWVudCIsInJpZ2h0bGluZXNlZ21lbnQiXSwuODg4LDUyMl0sdW5kZXJsaW5lc2VnbWVudDpbWyJsZWZ0bGluZXNlZ21lbnQiLCJyaWdodGxpbmVzZWdtZW50Il0sLjg4OCw1MjJdLG92ZXJncm91cDpbWyJsZWZ0Z3JvdXAiLCJyaWdodGdyb3VwIl0sLjg4OCwzNDJdLHVuZGVyZ3JvdXA6W1sibGVmdGdyb3VwdW5kZXIiLCJyaWdodGdyb3VwdW5kZXIiXSwuODg4LDM0Ml0seG1hcHN0bzpbWyJsZWZ0bWFwc3RvIiwicmlnaHRhcnJvdyJdLDEuNSw1MjJdLHh0b2Zyb206W1sibGVmdFRvRnJvbSIsInJpZ2h0VG9Gcm9tIl0sMS43NSw1MjhdLHhyaWdodGxlZnRhcnJvd3M6W1siYmFyYWJvdmVsZWZ0YXJyb3ciLCJyaWdodGFycm93YWJvdmViYXIiXSwxLjc1LDkwMV0seHJpZ2h0ZXF1aWxpYnJpdW06W1siYmFyYWJvdmVzaG9ydGxlZnRoYXJwb29uIiwicmlnaHRoYXJwb29uYWJvdmVzaG9ydGJhciJdLDEuNzUsNzE2XSx4bGVmdGVxdWlsaWJyaXVtOltbInNob3J0YmFyYWJvdmVsZWZ0aGFycG9vbiIsInNob3J0cmlnaHRoYXJwb29uYWJvdmViYXIiXSwxLjc1LDcxNl19LHpIdD1mdW5jdGlvbihzKXtyZXR1cm4gcy50eXBlPT09Im9yZGdyb3VwIj9zLmJvZHkubGVuZ3RoOjF9LHFIdD1mdW5jdGlvbihzLHUpe2Z1bmN0aW9uIGQoKXt2YXIgeT00ZTUsVD1zLmxhYmVsLnNsaWNlKDEpO2lmKFlhLmNvbnRhaW5zKFsid2lkZWhhdCIsIndpZGVjaGVjayIsIndpZGV0aWxkZSIsInV0aWxkZSJdLFQpKXt2YXIgXz1zLEE9ekh0KF8uYmFzZSksUCxSLEY7aWYoQT41KVQ9PT0id2lkZWhhdCJ8fFQ9PT0id2lkZWNoZWNrIj8oUD00MjAseT0yMzY0LEY9LjQyLFI9VCsiNCIpOihQPTMxMix5PTIzNDAsRj0uMzQsUj0idGlsZGU0Iik7ZWxzZXt2YXIgaj1bMSwxLDIsMiwzLDNdW0FdO1Q9PT0id2lkZWhhdCJ8fFQ9PT0id2lkZWNoZWNrIj8oeT1bMCwxMDYyLDIzNjQsMjM2NCwyMzY0XVtqXSxQPVswLDIzOSwzMDAsMzYwLDQyMF1bal0sRj1bMCwuMjQsLjMsLjMsLjM2LC40Ml1bal0sUj1UK2opOih5PVswLDYwMCwxMDMzLDIzMzksMjM0MF1bal0sUD1bMCwyNjAsMjg2LDMwNiwzMTJdW2pdLEY9WzAsLjI2LC4yODYsLjMsLjMwNiwuMzRdW2pdLFI9InRpbGRlIitqKX12YXIgSz1uZXcgQzkoUiksZWU9bmV3IEQ3KFtLXSx7d2lkdGg6IjEwMCUiLGhlaWdodDpSaShGKSx2aWV3Qm94OiIwIDAgIit5KyIgIitQLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUifSk7cmV0dXJue3NwYW46em4ubWFrZVN2Z1NwYW4oW10sW2VlXSx1KSxtaW5XaWR0aDowLGhlaWdodDpGfX1lbHNle3ZhciBpZT1bXSxvZT0kSHRbVF0sW3BlLGJlLGFlXT1vZSxuZT1hZS8xZTMsc2U9cGUubGVuZ3RoLGRlLFg7aWYoc2U9PT0xKXt2YXIgZ2U9b2VbM107ZGU9WyJoaWRlLXRhaWwiXSxYPVtnZV19ZWxzZSBpZihzZT09PTIpZGU9WyJoYWxmYXJyb3ctbGVmdCIsImhhbGZhcnJvdy1yaWdodCJdLFg9WyJ4TWluWU1pbiIsInhNYXhZTWluIl07ZWxzZSBpZihzZT09PTMpZGU9WyJicmFjZS1sZWZ0IiwiYnJhY2UtY2VudGVyIiwiYnJhY2UtcmlnaHQiXSxYPVsieE1pbllNaW4iLCJ4TWlkWU1pbiIsInhNYXhZTWluIl07ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYENvcnJlY3Qga2F0ZXhJbWFnZXNEYXRhIG9yIHVwZGF0ZSBjb2RlIGhlcmUgdG8gc3VwcG9ydAogICAgICAgICAgICAgICAgICAgIGArc2UrIiBjaGlsZHJlbi4iKTtmb3IodmFyIFc9MDtXPHNlO1crKyl7dmFyIHhlPW5ldyBDOShwZVtXXSksVT1uZXcgRDcoW3hlXSx7d2lkdGg6IjQwMGVtIixoZWlnaHQ6UmkobmUpLHZpZXdCb3g6IjAgMCAiK3krIiAiK2FlLHByZXNlcnZlQXNwZWN0UmF0aW86WFtXXSsiIHNsaWNlIn0pLEZlPXpuLm1ha2VTdmdTcGFuKFtkZVtXXV0sW1VdLHUpO2lmKHNlPT09MSlyZXR1cm57c3BhbjpGZSxtaW5XaWR0aDpiZSxoZWlnaHQ6bmV9O0ZlLnN0eWxlLmhlaWdodD1SaShuZSksaWUucHVzaChGZSl9cmV0dXJue3NwYW46em4ubWFrZVNwYW4oWyJzdHJldGNoeSJdLGllLHUpLG1pbldpZHRoOmJlLGhlaWdodDpuZX19fXZhcntzcGFuOnAsbWluV2lkdGg6dixoZWlnaHQ6Yn09ZCgpO3JldHVybiBwLmhlaWdodD1iLHAuc3R5bGUuaGVpZ2h0PVJpKGIpLHY+MCYmKHAuc3R5bGUubWluV2lkdGg9UmkodikpLHB9LEhIdD1mdW5jdGlvbihzLHUsZCxwLHYpe3ZhciBiLHk9cy5oZWlnaHQrcy5kZXB0aCtkK3A7aWYoL2Zib3h8Y29sb3J8YW5nbC8udGVzdCh1KSl7aWYoYj16bi5tYWtlU3BhbihbInN0cmV0Y2h5Iix1XSxbXSx2KSx1PT09ImZib3giKXt2YXIgVD12LmNvbG9yJiZ2LmdldENvbG9yKCk7VCYmKGIuc3R5bGUuYm9yZGVyQ29sb3I9VCl9fWVsc2V7dmFyIF89W107L15bYnhdY2FuY2VsJC8udGVzdCh1KSYmXy5wdXNoKG5ldyBuYmUoe3gxOiIwIix5MToiMCIseDI6IjEwMCUiLHkyOiIxMDAlIiwic3Ryb2tlLXdpZHRoIjoiMC4wNDZlbSJ9KSksL154P2NhbmNlbCQvLnRlc3QodSkmJl8ucHVzaChuZXcgbmJlKHt4MToiMCIseTE6IjEwMCUiLHgyOiIxMDAlIix5MjoiMCIsInN0cm9rZS13aWR0aCI6IjAuMDQ2ZW0ifSkpO3ZhciBBPW5ldyBENyhfLHt3aWR0aDoiMTAwJSIsaGVpZ2h0OlJpKHkpfSk7Yj16bi5tYWtlU3ZnU3BhbihbXSxbQV0sdil9cmV0dXJuIGIuaGVpZ2h0PXksYi5zdHlsZS5oZWlnaHQ9UmkoeSksYn0sUDc9e2VuY2xvc2VTcGFuOkhIdCxtYXRoTUxub2RlOmpIdCxzdmdTcGFuOnFIdH07ZnVuY3Rpb24gWW8oaSxzKXtpZighaXx8aS50eXBlIT09cyl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIG5vZGUgb2YgdHlwZSAiK3MrIiwgYnV0IGdvdCAiKyhpPyJub2RlIG9mIHR5cGUgIitpLnR5cGU6U3RyaW5nKGkpKSk7cmV0dXJuIGl9ZnVuY3Rpb24gZGJlKGkpe3ZhciBzPXZRKGkpO2lmKCFzKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgbm9kZSBvZiBzeW1ib2wgZ3JvdXAgdHlwZSwgYnV0IGdvdCAiKyhpPyJub2RlIG9mIHR5cGUgIitpLnR5cGU6U3RyaW5nKGkpKSk7cmV0dXJuIHN9ZnVuY3Rpb24gdlEoaSl7cmV0dXJuIGkmJihpLnR5cGU9PT0iYXRvbSJ8fGdIdC5oYXNPd25Qcm9wZXJ0eShpLnR5cGUpKT9pOm51bGx9dmFyIGdiZT0oaSxzKT0+e3ZhciB1LGQscDtpJiZpLnR5cGU9PT0ic3Vwc3ViIj8oZD1ZbyhpLmJhc2UsImFjY2VudCIpLHU9ZC5iYXNlLGkuYmFzZT11LHA9Zkh0KHV1KGkscykpLGkuYmFzZT1kKTooZD1ZbyhpLCJhY2NlbnQiKSx1PWQuYmFzZSk7dmFyIHY9dXUodSxzLmhhdmluZ0NyYW1wZWRTdHlsZSgpKSxiPWQuaXNTaGlmdHkmJllhLmlzQ2hhcmFjdGVyQm94KHUpLHk9MDtpZihiKXt2YXIgVD1ZYS5nZXRCYXNlRWxlbSh1KSxfPXV1KFQscy5oYXZpbmdDcmFtcGVkU3R5bGUoKSk7eT1uemUoXykuc2tld312YXIgQT1kLmxhYmVsPT09IlxcYyIsUD1BP3YuaGVpZ2h0K3YuZGVwdGg6TWF0aC5taW4odi5oZWlnaHQscy5mb250TWV0cmljcygpLnhIZWlnaHQpLFI7aWYoZC5pc1N0cmV0Y2h5KVI9UDcuc3ZnU3BhbihkLHMpLFI9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImZpcnN0QmFzZWxpbmUiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTp2fSx7dHlwZToiZWxlbSIsZWxlbTpSLHdyYXBwZXJDbGFzc2VzOlsic3ZnLWFsaWduIl0sd3JhcHBlclN0eWxlOnk+MD97d2lkdGg6ImNhbGMoMTAwJSAtICIrUmkoMip5KSsiKSIsbWFyZ2luTGVmdDpSaSgyKnkpfTp2b2lkIDB9XX0scyk7ZWxzZXt2YXIgRixqO2QubGFiZWw9PT0iXFx2ZWMiPyhGPXpuLnN0YXRpY1N2ZygidmVjIixzKSxqPXpuLnN2Z0RhdGEudmVjWzFdKTooRj16bi5tYWtlT3JkKHttb2RlOmQubW9kZSx0ZXh0OmQubGFiZWx9LHMsInRleHRvcmQiKSxGPW56ZShGKSxGLml0YWxpYz0wLGo9Ri53aWR0aCxBJiYoUCs9Ri5kZXB0aCkpLFI9em4ubWFrZVNwYW4oWyJhY2NlbnQtYm9keSJdLFtGXSk7dmFyIEs9ZC5sYWJlbD09PSJcXHRleHRjaXJjbGVkIjtLJiYoUi5jbGFzc2VzLnB1c2goImFjY2VudC1mdWxsIiksUD12LmhlaWdodCk7dmFyIGVlPXk7S3x8KGVlLT1qLzIpLFIuc3R5bGUubGVmdD1SaShlZSksZC5sYWJlbD09PSJcXHRleHRjaXJjbGVkIiYmKFIuc3R5bGUudG9wPSIuMmVtIiksUj16bi5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiZmlyc3RCYXNlbGluZSIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOnZ9LHt0eXBlOiJrZXJuIixzaXplOi1QfSx7dHlwZToiZWxlbSIsZWxlbTpSfV19LHMpfXZhciBpZT16bi5tYWtlU3BhbihbIm1vcmQiLCJhY2NlbnQiXSxbUl0scyk7cmV0dXJuIHA/KHAuY2hpbGRyZW5bMF09aWUscC5oZWlnaHQ9TWF0aC5tYXgoaWUuaGVpZ2h0LHAuaGVpZ2h0KSxwLmNsYXNzZXNbMF09Im1vcmQiLHApOmllfSx5emU9KGkscyk9Pnt2YXIgdT1pLmlzU3RyZXRjaHk/UDcubWF0aE1Mbm9kZShpLmxhYmVsKTpuZXcgdmkuTWF0aE5vZGUoIm1vIixbUnYoaS5sYWJlbCxpLm1vZGUpXSksZD1uZXcgdmkuTWF0aE5vZGUoIm1vdmVyIixbTGwoaS5iYXNlLHMpLHVdKTtyZXR1cm4gZC5zZXRBdHRyaWJ1dGUoImFjY2VudCIsInRydWUiKSxkfSxWSHQ9bmV3IFJlZ0V4cChbIlxcYWN1dGUiLCJcXGdyYXZlIiwiXFxkZG90IiwiXFx0aWxkZSIsIlxcYmFyIiwiXFxicmV2ZSIsIlxcY2hlY2siLCJcXGhhdCIsIlxcdmVjIiwiXFxkb3QiLCJcXG1hdGhyaW5nIl0ubWFwKGk9PiJcXCIraSkuam9pbigifCIpKTtKaSh7dHlwZToiYWNjZW50IixuYW1lczpbIlxcYWN1dGUiLCJcXGdyYXZlIiwiXFxkZG90IiwiXFx0aWxkZSIsIlxcYmFyIiwiXFxicmV2ZSIsIlxcY2hlY2siLCJcXGhhdCIsIlxcdmVjIiwiXFxkb3QiLCJcXG1hdGhyaW5nIiwiXFx3aWRlY2hlY2siLCJcXHdpZGVoYXQiLCJcXHdpZGV0aWxkZSIsIlxcb3ZlcnJpZ2h0YXJyb3ciLCJcXG92ZXJsZWZ0YXJyb3ciLCJcXE92ZXJyaWdodGFycm93IiwiXFxvdmVybGVmdHJpZ2h0YXJyb3ciLCJcXG92ZXJncm91cCIsIlxcb3ZlcmxpbmVzZWdtZW50IiwiXFxvdmVybGVmdGhhcnBvb24iLCJcXG92ZXJyaWdodGhhcnBvb24iXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyOihpLHMpPT57dmFyIHU9YlEoc1swXSksZD0hVkh0LnRlc3QoaS5mdW5jTmFtZSkscD0hZHx8aS5mdW5jTmFtZT09PSJcXHdpZGVoYXQifHxpLmZ1bmNOYW1lPT09Ilxcd2lkZXRpbGRlInx8aS5mdW5jTmFtZT09PSJcXHdpZGVjaGVjayI7cmV0dXJue3R5cGU6ImFjY2VudCIsbW9kZTppLnBhcnNlci5tb2RlLGxhYmVsOmkuZnVuY05hbWUsaXNTdHJldGNoeTpkLGlzU2hpZnR5OnAsYmFzZTp1fX0saHRtbEJ1aWxkZXI6Z2JlLG1hdGhtbEJ1aWxkZXI6eXplfSksSmkoe3R5cGU6ImFjY2VudCIsbmFtZXM6WyJcXCciLCJcXGAiLCJcXF4iLCJcXH4iLCJcXD0iLCJcXHUiLCJcXC4iLCdcXCInLCJcXGMiLCJcXHIiLCJcXEgiLCJcXHYiLCJcXHRleHRjaXJjbGVkIl0scHJvcHM6e251bUFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwLGFsbG93ZWRJbk1hdGg6ITAsYXJnVHlwZXM6WyJwcmltaXRpdmUiXX0saGFuZGxlcjooaSxzKT0+e3ZhciB1PXNbMF0sZD1pLnBhcnNlci5tb2RlO3JldHVybiBkPT09Im1hdGgiJiYoaS5wYXJzZXIuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KCJtYXRoVnNUZXh0QWNjZW50cyIsIkxhVGVYJ3MgYWNjZW50ICIraS5mdW5jTmFtZSsiIHdvcmtzIG9ubHkgaW4gdGV4dCBtb2RlIiksZD0idGV4dCIpLHt0eXBlOiJhY2NlbnQiLG1vZGU6ZCxsYWJlbDppLmZ1bmNOYW1lLGlzU3RyZXRjaHk6ITEsaXNTaGlmdHk6ITAsYmFzZTp1fX0saHRtbEJ1aWxkZXI6Z2JlLG1hdGhtbEJ1aWxkZXI6eXplfSksSmkoe3R5cGU6ImFjY2VudFVuZGVyIixuYW1lczpbIlxcdW5kZXJsZWZ0YXJyb3ciLCJcXHVuZGVycmlnaHRhcnJvdyIsIlxcdW5kZXJsZWZ0cmlnaHRhcnJvdyIsIlxcdW5kZXJncm91cCIsIlxcdW5kZXJsaW5lc2VnbWVudCIsIlxcdXRpbGRlIl0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcjooaSxzKT0+e3ZhcntwYXJzZXI6dSxmdW5jTmFtZTpkfT1pLHA9c1swXTtyZXR1cm57dHlwZToiYWNjZW50VW5kZXIiLG1vZGU6dS5tb2RlLGxhYmVsOmQsYmFzZTpwfX0saHRtbEJ1aWxkZXI6KGkscyk9Pnt2YXIgdT11dShpLmJhc2UscyksZD1QNy5zdmdTcGFuKGkscykscD1pLmxhYmVsPT09IlxcdXRpbGRlIj8uMTI6MCx2PXpuLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJ0b3AiLHBvc2l0aW9uRGF0YTp1LmhlaWdodCxjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06ZCx3cmFwcGVyQ2xhc3NlczpbInN2Zy1hbGlnbiJdfSx7dHlwZToia2VybiIsc2l6ZTpwfSx7dHlwZToiZWxlbSIsZWxlbTp1fV19LHMpO3JldHVybiB6bi5tYWtlU3BhbihbIm1vcmQiLCJhY2NlbnR1bmRlciJdLFt2XSxzKX0sbWF0aG1sQnVpbGRlcjooaSxzKT0+e3ZhciB1PVA3Lm1hdGhNTG5vZGUoaS5sYWJlbCksZD1uZXcgdmkuTWF0aE5vZGUoIm11bmRlciIsW0xsKGkuYmFzZSxzKSx1XSk7cmV0dXJuIGQuc2V0QXR0cmlidXRlKCJhY2NlbnR1bmRlciIsInRydWUiKSxkfX0pO3ZhciB3UT1pPT57dmFyIHM9bmV3IHZpLk1hdGhOb2RlKCJtcGFkZGVkIixpP1tpXTpbXSk7cmV0dXJuIHMuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIiswLjZlbSIpLHMuc2V0QXR0cmlidXRlKCJsc3BhY2UiLCIwLjNlbSIpLHN9O0ppKHt0eXBlOiJ4QXJyb3ciLG5hbWVzOlsiXFx4bGVmdGFycm93IiwiXFx4cmlnaHRhcnJvdyIsIlxceExlZnRhcnJvdyIsIlxceFJpZ2h0YXJyb3ciLCJcXHhsZWZ0cmlnaHRhcnJvdyIsIlxceExlZnRyaWdodGFycm93IiwiXFx4aG9va2xlZnRhcnJvdyIsIlxceGhvb2tyaWdodGFycm93IiwiXFx4bWFwc3RvIiwiXFx4cmlnaHRoYXJwb29uZG93biIsIlxceHJpZ2h0aGFycG9vbnVwIiwiXFx4bGVmdGhhcnBvb25kb3duIiwiXFx4bGVmdGhhcnBvb251cCIsIlxceHJpZ2h0bGVmdGhhcnBvb25zIiwiXFx4bGVmdHJpZ2h0aGFycG9vbnMiLCJcXHhsb25nZXF1YWwiLCJcXHh0d29oZWFkcmlnaHRhcnJvdyIsIlxceHR3b2hlYWRsZWZ0YXJyb3ciLCJcXHh0b2Zyb20iLCJcXHhyaWdodGxlZnRhcnJvd3MiLCJcXHhyaWdodGVxdWlsaWJyaXVtIiwiXFx4bGVmdGVxdWlsaWJyaXVtIiwiXFxcXGNkcmlnaHRhcnJvdyIsIlxcXFxjZGxlZnRhcnJvdyIsIlxcXFxjZGxvbmdlcXVhbCJdLHByb3BzOntudW1BcmdzOjEsbnVtT3B0aW9uYWxBcmdzOjF9LGhhbmRsZXIoaSxzLHUpe3ZhcntwYXJzZXI6ZCxmdW5jTmFtZTpwfT1pO3JldHVybnt0eXBlOiJ4QXJyb3ciLG1vZGU6ZC5tb2RlLGxhYmVsOnAsYm9keTpzWzBdLGJlbG93OnVbMF19fSxodG1sQnVpbGRlcihpLHMpe3ZhciB1PXMuc3R5bGUsZD1zLmhhdmluZ1N0eWxlKHUuc3VwKCkpLHA9em4ud3JhcEZyYWdtZW50KHV1KGkuYm9keSxkLHMpLHMpLHY9aS5sYWJlbC5zbGljZSgwLDIpPT09IlxceCI/IngiOiJjZCI7cC5jbGFzc2VzLnB1c2godisiLWFycm93LXBhZCIpO3ZhciBiO2kuYmVsb3cmJihkPXMuaGF2aW5nU3R5bGUodS5zdWIoKSksYj16bi53cmFwRnJhZ21lbnQodXUoaS5iZWxvdyxkLHMpLHMpLGIuY2xhc3Nlcy5wdXNoKHYrIi1hcnJvdy1wYWQiKSk7dmFyIHk9UDcuc3ZnU3BhbihpLHMpLFQ9LXMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0Ky41KnkuaGVpZ2h0LF89LXMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0LS41KnkuaGVpZ2h0LS4xMTE7KHAuZGVwdGg+LjI1fHxpLmxhYmVsPT09IlxceGxlZnRlcXVpbGlicml1bSIpJiYoXy09cC5kZXB0aCk7dmFyIEE7aWYoYil7dmFyIFA9LXMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0K2IuaGVpZ2h0Ky41KnkuaGVpZ2h0Ky4xMTE7QT16bi5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiaW5kaXZpZHVhbFNoaWZ0IixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06cCxzaGlmdDpffSx7dHlwZToiZWxlbSIsZWxlbTp5LHNoaWZ0OlR9LHt0eXBlOiJlbGVtIixlbGVtOmIsc2hpZnQ6UH1dfSxzKX1lbHNlIEE9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOnAsc2hpZnQ6X30se3R5cGU6ImVsZW0iLGVsZW06eSxzaGlmdDpUfV19LHMpO3JldHVybiBBLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzFdLmNsYXNzZXMucHVzaCgic3ZnLWFsaWduIiksem4ubWFrZVNwYW4oWyJtcmVsIiwieC1hcnJvdyJdLFtBXSxzKX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1PVA3Lm1hdGhNTG5vZGUoaS5sYWJlbCk7dS5zZXRBdHRyaWJ1dGUoIm1pbnNpemUiLGkubGFiZWwuY2hhckF0KDApPT09IngiPyIxLjc1ZW0iOiIzLjBlbSIpO3ZhciBkO2lmKGkuYm9keSl7dmFyIHA9d1EoTGwoaS5ib2R5LHMpKTtpZihpLmJlbG93KXt2YXIgdj13UShMbChpLmJlbG93LHMpKTtkPW5ldyB2aS5NYXRoTm9kZSgibXVuZGVyb3ZlciIsW3UsdixwXSl9ZWxzZSBkPW5ldyB2aS5NYXRoTm9kZSgibW92ZXIiLFt1LHBdKX1lbHNlIGlmKGkuYmVsb3cpe3ZhciBiPXdRKExsKGkuYmVsb3cscykpO2Q9bmV3IHZpLk1hdGhOb2RlKCJtdW5kZXIiLFt1LGJdKX1lbHNlIGQ9d1EoKSxkPW5ldyB2aS5NYXRoTm9kZSgibW92ZXIiLFt1LGRdKTtyZXR1cm4gZH19KTt2YXIgVUh0PXpuLm1ha2VTcGFuO2Z1bmN0aW9uIHh6ZShpLHMpe3ZhciB1PWQxKGkuYm9keSxzLCEwKTtyZXR1cm4gVUh0KFtpLm1jbGFzc10sdSxzKX1mdW5jdGlvbiBremUoaSxzKXt2YXIgdSxkPWoyKGkuYm9keSxzKTtyZXR1cm4gaS5tY2xhc3M9PT0ibWlubmVyIj91PW5ldyB2aS5NYXRoTm9kZSgibXBhZGRlZCIsZCk6aS5tY2xhc3M9PT0ibW9yZCI/aS5pc0NoYXJhY3RlckJveD8odT1kWzBdLHUudHlwZT0ibWkiKTp1PW5ldyB2aS5NYXRoTm9kZSgibWkiLGQpOihpLmlzQ2hhcmFjdGVyQm94Pyh1PWRbMF0sdS50eXBlPSJtbyIpOnU9bmV3IHZpLk1hdGhOb2RlKCJtbyIsZCksaS5tY2xhc3M9PT0ibWJpbiI/KHUuYXR0cmlidXRlcy5sc3BhY2U9IjAuMjJlbSIsdS5hdHRyaWJ1dGVzLnJzcGFjZT0iMC4yMmVtIik6aS5tY2xhc3M9PT0ibXB1bmN0Ij8odS5hdHRyaWJ1dGVzLmxzcGFjZT0iMGVtIix1LmF0dHJpYnV0ZXMucnNwYWNlPSIwLjE3ZW0iKTppLm1jbGFzcz09PSJtb3BlbiJ8fGkubWNsYXNzPT09Im1jbG9zZSI/KHUuYXR0cmlidXRlcy5sc3BhY2U9IjBlbSIsdS5hdHRyaWJ1dGVzLnJzcGFjZT0iMGVtIik6aS5tY2xhc3M9PT0ibWlubmVyIiYmKHUuYXR0cmlidXRlcy5sc3BhY2U9IjAuMDU1NmVtIix1LmF0dHJpYnV0ZXMud2lkdGg9IiswLjExMTFlbSIpKSx1fUppKHt0eXBlOiJtY2xhc3MiLG5hbWVzOlsiXFxtYXRob3JkIiwiXFxtYXRoYmluIiwiXFxtYXRocmVsIiwiXFxtYXRob3BlbiIsIlxcbWF0aGNsb3NlIiwiXFxtYXRocHVuY3QiLCJcXG1hdGhpbm5lciJdLHByb3BzOntudW1BcmdzOjEscHJpbWl0aXZlOiEwfSxoYW5kbGVyKGkscyl7dmFye3BhcnNlcjp1LGZ1bmNOYW1lOmR9PWkscD1zWzBdO3JldHVybnt0eXBlOiJtY2xhc3MiLG1vZGU6dS5tb2RlLG1jbGFzczoibSIrZC5zbGljZSg1KSxib2R5OlhmKHApLGlzQ2hhcmFjdGVyQm94OllhLmlzQ2hhcmFjdGVyQm94KHApfX0saHRtbEJ1aWxkZXI6eHplLG1hdGhtbEJ1aWxkZXI6a3plfSk7dmFyIHlRPWk9Pnt2YXIgcz1pLnR5cGU9PT0ib3JkZ3JvdXAiJiZpLmJvZHkubGVuZ3RoP2kuYm9keVswXTppO3JldHVybiBzLnR5cGU9PT0iYXRvbSImJihzLmZhbWlseT09PSJiaW4ifHxzLmZhbWlseT09PSJyZWwiKT8ibSIrcy5mYW1pbHk6Im1vcmQifTtKaSh7dHlwZToibWNsYXNzIixuYW1lczpbIlxcQGJpbnJlbCJdLHByb3BzOntudW1BcmdzOjJ9LGhhbmRsZXIoaSxzKXt2YXJ7cGFyc2VyOnV9PWk7cmV0dXJue3R5cGU6Im1jbGFzcyIsbW9kZTp1Lm1vZGUsbWNsYXNzOnlRKHNbMF0pLGJvZHk6WGYoc1sxXSksaXNDaGFyYWN0ZXJCb3g6WWEuaXNDaGFyYWN0ZXJCb3goc1sxXSl9fX0pLEppKHt0eXBlOiJtY2xhc3MiLG5hbWVzOlsiXFxzdGFja3JlbCIsIlxcb3ZlcnNldCIsIlxcdW5kZXJzZXQiXSxwcm9wczp7bnVtQXJnczoyfSxoYW5kbGVyKGkscyl7dmFye3BhcnNlcjp1LGZ1bmNOYW1lOmR9PWkscD1zWzFdLHY9c1swXSxiO2QhPT0iXFxzdGFja3JlbCI/Yj15UShwKTpiPSJtcmVsIjt2YXIgeT17dHlwZToib3AiLG1vZGU6cC5tb2RlLGxpbWl0czohMCxhbHdheXNIYW5kbGVTdXBTdWI6ITAscGFyZW50SXNTdXBTdWI6ITEsc3ltYm9sOiExLHN1cHByZXNzQmFzZVNoaWZ0OmQhPT0iXFxzdGFja3JlbCIsYm9keTpYZihwKX0sVD17dHlwZToic3Vwc3ViIixtb2RlOnYubW9kZSxiYXNlOnksc3VwOmQ9PT0iXFx1bmRlcnNldCI/bnVsbDp2LHN1YjpkPT09IlxcdW5kZXJzZXQiP3Y6bnVsbH07cmV0dXJue3R5cGU6Im1jbGFzcyIsbW9kZTp1Lm1vZGUsbWNsYXNzOmIsYm9keTpbVF0saXNDaGFyYWN0ZXJCb3g6WWEuaXNDaGFyYWN0ZXJCb3goVCl9fSxodG1sQnVpbGRlcjp4emUsbWF0aG1sQnVpbGRlcjpremV9KSxKaSh7dHlwZToicG1iIixuYW1lczpbIlxccG1iIl0scHJvcHM6e251bUFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKGkscyl7dmFye3BhcnNlcjp1fT1pO3JldHVybnt0eXBlOiJwbWIiLG1vZGU6dS5tb2RlLG1jbGFzczp5UShzWzBdKSxib2R5OlhmKHNbMF0pfX0saHRtbEJ1aWxkZXIoaSxzKXt2YXIgdT1kMShpLmJvZHkscywhMCksZD16bi5tYWtlU3BhbihbaS5tY2xhc3NdLHUscyk7cmV0dXJuIGQuc3R5bGUudGV4dFNoYWRvdz0iMC4wMmVtIDAuMDFlbSAwLjA0cHgiLGR9LG1hdGhtbEJ1aWxkZXIoaSxzKXt2YXIgdT1qMihpLmJvZHkscyksZD1uZXcgdmkuTWF0aE5vZGUoIm1zdHlsZSIsdSk7cmV0dXJuIGQuc2V0QXR0cmlidXRlKCJzdHlsZSIsInRleHQtc2hhZG93OiAwLjAyZW0gMC4wMWVtIDAuMDRweCIpLGR9fSk7dmFyIEdIdD17Ij4iOiJcXFxcY2RyaWdodGFycm93IiwiPCI6IlxcXFxjZGxlZnRhcnJvdyIsIj0iOiJcXFxcY2Rsb25nZXF1YWwiLEE6IlxcdXBhcnJvdyIsVjoiXFxkb3duYXJyb3ciLCJ8IjoiXFxWZXJ0IiwiLiI6Im5vIGFycm93In0sRXplPSgpPT4oe3R5cGU6InN0eWxpbmciLGJvZHk6W10sbW9kZToibWF0aCIsc3R5bGU6ImRpc3BsYXkifSksVHplPWk9PmkudHlwZT09PSJ0ZXh0b3JkIiYmaS50ZXh0PT09IkAiLEtIdD0oaSxzKT0+KGkudHlwZT09PSJtYXRob3JkInx8aS50eXBlPT09ImF0b20iKSYmaS50ZXh0PT09cztmdW5jdGlvbiBXSHQoaSxzLHUpe3ZhciBkPUdIdFtpXTtzd2l0Y2goZCl7Y2FzZSJcXFxcY2RyaWdodGFycm93IjpjYXNlIlxcXFxjZGxlZnRhcnJvdyI6cmV0dXJuIHUuY2FsbEZ1bmN0aW9uKGQsW3NbMF1dLFtzWzFdXSk7Y2FzZSJcXHVwYXJyb3ciOmNhc2UiXFxkb3duYXJyb3ciOnt2YXIgcD11LmNhbGxGdW5jdGlvbigiXFxcXGNkbGVmdCIsW3NbMF1dLFtdKSx2PXt0eXBlOiJhdG9tIix0ZXh0OmQsbW9kZToibWF0aCIsZmFtaWx5OiJyZWwifSxiPXUuY2FsbEZ1bmN0aW9uKCJcXEJpZyIsW3ZdLFtdKSx5PXUuY2FsbEZ1bmN0aW9uKCJcXFxcY2RyaWdodCIsW3NbMV1dLFtdKSxUPXt0eXBlOiJvcmRncm91cCIsbW9kZToibWF0aCIsYm9keTpbcCxiLHldfTtyZXR1cm4gdS5jYWxsRnVuY3Rpb24oIlxcXFxjZHBhcmVudCIsW1RdLFtdKX1jYXNlIlxcXFxjZGxvbmdlcXVhbCI6cmV0dXJuIHUuY2FsbEZ1bmN0aW9uKCJcXFxcY2Rsb25nZXF1YWwiLFtdLFtdKTtjYXNlIlxcVmVydCI6e3ZhciBfPXt0eXBlOiJ0ZXh0b3JkIix0ZXh0OiJcXFZlcnQiLG1vZGU6Im1hdGgifTtyZXR1cm4gdS5jYWxsRnVuY3Rpb24oIlxcQmlnIixbX10sW10pfWRlZmF1bHQ6cmV0dXJue3R5cGU6InRleHRvcmQiLHRleHQ6IiAiLG1vZGU6Im1hdGgifX19ZnVuY3Rpb24gWUh0KGkpe3ZhciBzPVtdO2ZvcihpLmd1bGxldC5iZWdpbkdyb3VwKCksaS5ndWxsZXQubWFjcm9zLnNldCgiXFxjciIsIlxcXFxcXHJlbGF4IiksaS5ndWxsZXQuYmVnaW5Hcm91cCgpOzspe3MucHVzaChpLnBhcnNlRXhwcmVzc2lvbighMSwiXFxcXCIpKSxpLmd1bGxldC5lbmRHcm91cCgpLGkuZ3VsbGV0LmJlZ2luR3JvdXAoKTt2YXIgdT1pLmZldGNoKCkudGV4dDtpZih1PT09IiYifHx1PT09IlxcXFwiKWkuY29uc3VtZSgpO2Vsc2UgaWYodT09PSJcXGVuZCIpe3Nbcy5sZW5ndGgtMV0ubGVuZ3RoPT09MCYmcy5wb3AoKTticmVha31lbHNlIHRocm93IG5ldyBDaSgiRXhwZWN0ZWQgXFxcXCBvciBcXGNyIG9yIFxcZW5kIixpLm5leHRUb2tlbil9Zm9yKHZhciBkPVtdLHA9W2RdLHY9MDt2PHMubGVuZ3RoO3YrKyl7Zm9yKHZhciBiPXNbdl0seT1FemUoKSxUPTA7VDxiLmxlbmd0aDtUKyspaWYoIVR6ZShiW1RdKSl5LmJvZHkucHVzaChiW1RdKTtlbHNle2QucHVzaCh5KSxUKz0xO3ZhciBfPWRiZShiW1RdKS50ZXh0LEE9bmV3IEFycmF5KDIpO2lmKEFbMF09e3R5cGU6Im9yZGdyb3VwIixtb2RlOiJtYXRoIixib2R5OltdfSxBWzFdPXt0eXBlOiJvcmRncm91cCIsbW9kZToibWF0aCIsYm9keTpbXX0sISgiPXwuIi5pbmRleE9mKF8pPi0xKSlpZigiPD5BViIuaW5kZXhPZihfKT4tMSlmb3IodmFyIFA9MDtQPDI7UCsrKXtmb3IodmFyIFI9ITAsRj1UKzE7RjxiLmxlbmd0aDtGKyspe2lmKEtIdChiW0ZdLF8pKXtSPSExLFQ9RjticmVha31pZihUemUoYltGXSkpdGhyb3cgbmV3IENpKCJNaXNzaW5nIGEgIitfKyIgY2hhcmFjdGVyIHRvIGNvbXBsZXRlIGEgQ0QgYXJyb3cuIixiW0ZdKTtBW1BdLmJvZHkucHVzaChiW0ZdKX1pZihSKXRocm93IG5ldyBDaSgiTWlzc2luZyBhICIrXysiIGNoYXJhY3RlciB0byBjb21wbGV0ZSBhIENEIGFycm93LiIsYltUXSl9ZWxzZSB0aHJvdyBuZXcgQ2koJ0V4cGVjdGVkIG9uZSBvZiAiPD5BVj18LiIgYWZ0ZXIgQCcsYltUXSk7dmFyIGo9V0h0KF8sQSxpKSxLPXt0eXBlOiJzdHlsaW5nIixib2R5OltqXSxtb2RlOiJtYXRoIixzdHlsZToiZGlzcGxheSJ9O2QucHVzaChLKSx5PUV6ZSgpfXYlMj09PTA/ZC5wdXNoKHkpOmQuc2hpZnQoKSxkPVtdLHAucHVzaChkKX1pLmd1bGxldC5lbmRHcm91cCgpLGkuZ3VsbGV0LmVuZEdyb3VwKCk7dmFyIGVlPW5ldyBBcnJheShwWzBdLmxlbmd0aCkuZmlsbCh7dHlwZToiYWxpZ24iLGFsaWduOiJjIixwcmVnYXA6LjI1LHBvc3RnYXA6LjI1fSk7cmV0dXJue3R5cGU6ImFycmF5Iixtb2RlOiJtYXRoIixib2R5OnAsYXJyYXlzdHJldGNoOjEsYWRkSm90OiEwLHJvd0dhcHM6W251bGxdLGNvbHM6ZWUsY29sU2VwYXJhdGlvblR5cGU6IkNEIixoTGluZXNCZWZvcmVSb3c6bmV3IEFycmF5KHAubGVuZ3RoKzEpLmZpbGwoW10pfX1KaSh7dHlwZToiY2RsYWJlbCIsbmFtZXM6WyJcXFxcY2RsZWZ0IiwiXFxcXGNkcmlnaHQiXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyKGkscyl7dmFye3BhcnNlcjp1LGZ1bmNOYW1lOmR9PWk7cmV0dXJue3R5cGU6ImNkbGFiZWwiLG1vZGU6dS5tb2RlLHNpZGU6ZC5zbGljZSg0KSxsYWJlbDpzWzBdfX0saHRtbEJ1aWxkZXIoaSxzKXt2YXIgdT1zLmhhdmluZ1N0eWxlKHMuc3R5bGUuc3VwKCkpLGQ9em4ud3JhcEZyYWdtZW50KHV1KGkubGFiZWwsdSxzKSxzKTtyZXR1cm4gZC5jbGFzc2VzLnB1c2goImNkLWxhYmVsLSIraS5zaWRlKSxkLnN0eWxlLmJvdHRvbT1SaSguOC1kLmRlcHRoKSxkLmhlaWdodD0wLGQuZGVwdGg9MCxkfSxtYXRobWxCdWlsZGVyKGkscyl7dmFyIHU9bmV3IHZpLk1hdGhOb2RlKCJtcm93IixbTGwoaS5sYWJlbCxzKV0pO3JldHVybiB1PW5ldyB2aS5NYXRoTm9kZSgibXBhZGRlZCIsW3VdKSx1LnNldEF0dHJpYnV0ZSgid2lkdGgiLCIwIiksaS5zaWRlPT09ImxlZnQiJiZ1LnNldEF0dHJpYnV0ZSgibHNwYWNlIiwiLTF3aWR0aCIpLHUuc2V0QXR0cmlidXRlKCJ2b2Zmc2V0IiwiMC43ZW0iKSx1PW5ldyB2aS5NYXRoTm9kZSgibXN0eWxlIixbdV0pLHUuc2V0QXR0cmlidXRlKCJkaXNwbGF5c3R5bGUiLCJmYWxzZSIpLHUuc2V0QXR0cmlidXRlKCJzY3JpcHRsZXZlbCIsIjEiKSx1fX0pLEppKHt0eXBlOiJjZGxhYmVscGFyZW50IixuYW1lczpbIlxcXFxjZHBhcmVudCJdLHByb3BzOntudW1BcmdzOjF9LGhhbmRsZXIoaSxzKXt2YXJ7cGFyc2VyOnV9PWk7cmV0dXJue3R5cGU6ImNkbGFiZWxwYXJlbnQiLG1vZGU6dS5tb2RlLGZyYWdtZW50OnNbMF19fSxodG1sQnVpbGRlcihpLHMpe3ZhciB1PXpuLndyYXBGcmFnbWVudCh1dShpLmZyYWdtZW50LHMpLHMpO3JldHVybiB1LmNsYXNzZXMucHVzaCgiY2QtdmVydC1hcnJvdyIpLHV9LG1hdGhtbEJ1aWxkZXIoaSxzKXtyZXR1cm4gbmV3IHZpLk1hdGhOb2RlKCJtcm93IixbTGwoaS5mcmFnbWVudCxzKV0pfX0pLEppKHt0eXBlOiJ0ZXh0b3JkIixuYW1lczpbIlxcQGNoYXIiXSxwcm9wczp7bnVtQXJnczoxLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXIoaSxzKXtmb3IodmFye3BhcnNlcjp1fT1pLGQ9WW8oc1swXSwib3JkZ3JvdXAiKSxwPWQuYm9keSx2PSIiLGI9MDtiPHAubGVuZ3RoO2IrKyl7dmFyIHk9WW8ocFtiXSwidGV4dG9yZCIpO3YrPXkudGV4dH12YXIgVD1wYXJzZUludCh2KSxfO2lmKGlzTmFOKFQpKXRocm93IG5ldyBDaSgiXFxAY2hhciBoYXMgbm9uLW51bWVyaWMgYXJndW1lbnQgIit2KTtpZihUPDB8fFQ+PTExMTQxMTEpdGhyb3cgbmV3IENpKCJcXEBjaGFyIHdpdGggaW52YWxpZCBjb2RlIHBvaW50ICIrdik7cmV0dXJuIFQ8PTY1NTM1P189U3RyaW5nLmZyb21DaGFyQ29kZShUKTooVC09NjU1MzYsXz1TdHJpbmcuZnJvbUNoYXJDb2RlKChUPj4xMCkrNTUyOTYsKFQmMTAyMykrNTYzMjApKSx7dHlwZToidGV4dG9yZCIsbW9kZTp1Lm1vZGUsdGV4dDpffX19KTt2YXIgQ3plPShpLHMpPT57dmFyIHU9ZDEoaS5ib2R5LHMud2l0aENvbG9yKGkuY29sb3IpLCExKTtyZXR1cm4gem4ubWFrZUZyYWdtZW50KHUpfSxTemU9KGkscyk9Pnt2YXIgdT1qMihpLmJvZHkscy53aXRoQ29sb3IoaS5jb2xvcikpLGQ9bmV3IHZpLk1hdGhOb2RlKCJtc3R5bGUiLHUpO3JldHVybiBkLnNldEF0dHJpYnV0ZSgibWF0aGNvbG9yIixpLmNvbG9yKSxkfTtKaSh7dHlwZToiY29sb3IiLG5hbWVzOlsiXFx0ZXh0Y29sb3IiXSxwcm9wczp7bnVtQXJnczoyLGFsbG93ZWRJblRleHQ6ITAsYXJnVHlwZXM6WyJjb2xvciIsIm9yaWdpbmFsIl19LGhhbmRsZXIoaSxzKXt2YXJ7cGFyc2VyOnV9PWksZD1ZbyhzWzBdLCJjb2xvci10b2tlbiIpLmNvbG9yLHA9c1sxXTtyZXR1cm57dHlwZToiY29sb3IiLG1vZGU6dS5tb2RlLGNvbG9yOmQsYm9keTpYZihwKX19LGh0bWxCdWlsZGVyOkN6ZSxtYXRobWxCdWlsZGVyOlN6ZX0pLEppKHt0eXBlOiJjb2xvciIsbmFtZXM6WyJcXGNvbG9yIl0scHJvcHM6e251bUFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwLGFyZ1R5cGVzOlsiY29sb3IiXX0saGFuZGxlcihpLHMpe3ZhcntwYXJzZXI6dSxicmVha09uVG9rZW5UZXh0OmR9PWkscD1ZbyhzWzBdLCJjb2xvci10b2tlbiIpLmNvbG9yO3UuZ3VsbGV0Lm1hY3Jvcy5zZXQoIlxcY3VycmVudEBjb2xvciIscCk7dmFyIHY9dS5wYXJzZUV4cHJlc3Npb24oITAsZCk7cmV0dXJue3R5cGU6ImNvbG9yIixtb2RlOnUubW9kZSxjb2xvcjpwLGJvZHk6dn19LGh0bWxCdWlsZGVyOkN6ZSxtYXRobWxCdWlsZGVyOlN6ZX0pLEppKHt0eXBlOiJjciIsbmFtZXM6WyJcXFxcIl0scHJvcHM6e251bUFyZ3M6MCxudW1PcHRpb25hbEFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKGkscyx1KXt2YXJ7cGFyc2VyOmR9PWkscD1kLmd1bGxldC5mdXR1cmUoKS50ZXh0PT09IlsiP2QucGFyc2VTaXplR3JvdXAoITApOm51bGwsdj0hZC5zZXR0aW5ncy5kaXNwbGF5TW9kZXx8IWQuc2V0dGluZ3MudXNlU3RyaWN0QmVoYXZpb3IoIm5ld0xpbmVJbkRpc3BsYXlNb2RlIiwiSW4gTGFUZVgsIFxcXFwgb3IgXFxuZXdsaW5lIGRvZXMgbm90aGluZyBpbiBkaXNwbGF5IG1vZGUiKTtyZXR1cm57dHlwZToiY3IiLG1vZGU6ZC5tb2RlLG5ld0xpbmU6dixzaXplOnAmJllvKHAsInNpemUiKS52YWx1ZX19LGh0bWxCdWlsZGVyKGkscyl7dmFyIHU9em4ubWFrZVNwYW4oWyJtc3BhY2UiXSxbXSxzKTtyZXR1cm4gaS5uZXdMaW5lJiYodS5jbGFzc2VzLnB1c2goIm5ld2xpbmUiKSxpLnNpemUmJih1LnN0eWxlLm1hcmdpblRvcD1SaShVaChpLnNpemUscykpKSksdX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1PW5ldyB2aS5NYXRoTm9kZSgibXNwYWNlIik7cmV0dXJuIGkubmV3TGluZSYmKHUuc2V0QXR0cmlidXRlKCJsaW5lYnJlYWsiLCJuZXdsaW5lIiksaS5zaXplJiZ1LnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixSaShVaChpLnNpemUscykpKSksdX19KTt2YXIgcGJlPXsiXFxnbG9iYWwiOiJcXGdsb2JhbCIsIlxcbG9uZyI6IlxcXFxnbG9iYWxsb25nIiwiXFxcXGdsb2JhbGxvbmciOiJcXFxcZ2xvYmFsbG9uZyIsIlxcZGVmIjoiXFxnZGVmIiwiXFxnZGVmIjoiXFxnZGVmIiwiXFxlZGVmIjoiXFx4ZGVmIiwiXFx4ZGVmIjoiXFx4ZGVmIiwiXFxsZXQiOiJcXFxcZ2xvYmFsbGV0IiwiXFxmdXR1cmVsZXQiOiJcXFxcZ2xvYmFsZnV0dXJlIn0sX3plPWk9Pnt2YXIgcz1pLnRleHQ7aWYoL14oPzpbXFx7fSQmI15fXXxFT0YpJC8udGVzdChzKSl0aHJvdyBuZXcgQ2koIkV4cGVjdGVkIGEgY29udHJvbCBzZXF1ZW5jZSIsaSk7cmV0dXJuIHN9LFhIdD1pPT57dmFyIHM9aS5ndWxsZXQucG9wVG9rZW4oKTtyZXR1cm4gcy50ZXh0PT09Ij0iJiYocz1pLmd1bGxldC5wb3BUb2tlbigpLHMudGV4dD09PSIgIiYmKHM9aS5ndWxsZXQucG9wVG9rZW4oKSkpLHN9LEF6ZT0oaSxzLHUsZCk9Pnt2YXIgcD1pLmd1bGxldC5tYWNyb3MuZ2V0KHUudGV4dCk7cD09bnVsbCYmKHUubm9leHBhbmQ9ITAscD17dG9rZW5zOlt1XSxudW1BcmdzOjAsdW5leHBhbmRhYmxlOiFpLmd1bGxldC5pc0V4cGFuZGFibGUodS50ZXh0KX0pLGkuZ3VsbGV0Lm1hY3Jvcy5zZXQocyxwLGQpfTtKaSh7dHlwZToiaW50ZXJuYWwiLG5hbWVzOlsiXFxnbG9iYWwiLCJcXGxvbmciLCJcXFxcZ2xvYmFsbG9uZyJdLHByb3BzOntudW1BcmdzOjAsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcihpKXt2YXJ7cGFyc2VyOnMsZnVuY05hbWU6dX09aTtzLmNvbnN1bWVTcGFjZXMoKTt2YXIgZD1zLmZldGNoKCk7aWYocGJlW2QudGV4dF0pcmV0dXJuKHU9PT0iXFxnbG9iYWwifHx1PT09IlxcXFxnbG9iYWxsb25nIikmJihkLnRleHQ9cGJlW2QudGV4dF0pLFlvKHMucGFyc2VGdW5jdGlvbigpLCJpbnRlcm5hbCIpO3Rocm93IG5ldyBDaSgiSW52YWxpZCB0b2tlbiBhZnRlciBtYWNybyBwcmVmaXgiLGQpfX0pLEppKHt0eXBlOiJpbnRlcm5hbCIsbmFtZXM6WyJcXGRlZiIsIlxcZ2RlZiIsIlxcZWRlZiIsIlxceGRlZiJdLHByb3BzOntudW1BcmdzOjAsYWxsb3dlZEluVGV4dDohMCxwcmltaXRpdmU6ITB9LGhhbmRsZXIoaSl7dmFye3BhcnNlcjpzLGZ1bmNOYW1lOnV9PWksZD1zLmd1bGxldC5wb3BUb2tlbigpLHA9ZC50ZXh0O2lmKC9eKD86W1xce30kJiNeX118RU9GKSQvLnRlc3QocCkpdGhyb3cgbmV3IENpKCJFeHBlY3RlZCBhIGNvbnRyb2wgc2VxdWVuY2UiLGQpO2Zvcih2YXIgdj0wLGIseT1bW11dO3MuZ3VsbGV0LmZ1dHVyZSgpLnRleHQhPT0ieyI7KWlmKGQ9cy5ndWxsZXQucG9wVG9rZW4oKSxkLnRleHQ9PT0iIyIpe2lmKHMuZ3VsbGV0LmZ1dHVyZSgpLnRleHQ9PT0ieyIpe2I9cy5ndWxsZXQuZnV0dXJlKCkseVt2XS5wdXNoKCJ7Iik7YnJlYWt9aWYoZD1zLmd1bGxldC5wb3BUb2tlbigpLCEvXlsxLTldJC8udGVzdChkLnRleHQpKXRocm93IG5ldyBDaSgnSW52YWxpZCBhcmd1bWVudCBudW1iZXIgIicrZC50ZXh0KyciJyk7aWYocGFyc2VJbnQoZC50ZXh0KSE9PXYrMSl0aHJvdyBuZXcgQ2koJ0FyZ3VtZW50IG51bWJlciAiJytkLnRleHQrJyIgb3V0IG9mIG9yZGVyJyk7disrLHkucHVzaChbXSl9ZWxzZXtpZihkLnRleHQ9PT0iRU9GIil0aHJvdyBuZXcgQ2koIkV4cGVjdGVkIGEgbWFjcm8gZGVmaW5pdGlvbiIpO3lbdl0ucHVzaChkLnRleHQpfXZhcnt0b2tlbnM6VH09cy5ndWxsZXQuY29uc3VtZUFyZygpO3JldHVybiBiJiZULnVuc2hpZnQoYiksKHU9PT0iXFxlZGVmInx8dT09PSJcXHhkZWYiKSYmKFQ9cy5ndWxsZXQuZXhwYW5kVG9rZW5zKFQpLFQucmV2ZXJzZSgpKSxzLmd1bGxldC5tYWNyb3Muc2V0KHAse3Rva2VuczpULG51bUFyZ3M6dixkZWxpbWl0ZXJzOnl9LHU9PT1wYmVbdV0pLHt0eXBlOiJpbnRlcm5hbCIsbW9kZTpzLm1vZGV9fX0pLEppKHt0eXBlOiJpbnRlcm5hbCIsbmFtZXM6WyJcXGxldCIsIlxcXFxnbG9iYWxsZXQiXSxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITAscHJpbWl0aXZlOiEwfSxoYW5kbGVyKGkpe3ZhcntwYXJzZXI6cyxmdW5jTmFtZTp1fT1pLGQ9X3plKHMuZ3VsbGV0LnBvcFRva2VuKCkpO3MuZ3VsbGV0LmNvbnN1bWVTcGFjZXMoKTt2YXIgcD1YSHQocyk7cmV0dXJuIEF6ZShzLGQscCx1PT09IlxcXFxnbG9iYWxsZXQiKSx7dHlwZToiaW50ZXJuYWwiLG1vZGU6cy5tb2RlfX19KSxKaSh7dHlwZToiaW50ZXJuYWwiLG5hbWVzOlsiXFxmdXR1cmVsZXQiLCJcXFxcZ2xvYmFsZnV0dXJlIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwLHByaW1pdGl2ZTohMH0saGFuZGxlcihpKXt2YXJ7cGFyc2VyOnMsZnVuY05hbWU6dX09aSxkPV96ZShzLmd1bGxldC5wb3BUb2tlbigpKSxwPXMuZ3VsbGV0LnBvcFRva2VuKCksdj1zLmd1bGxldC5wb3BUb2tlbigpO3JldHVybiBBemUocyxkLHYsdT09PSJcXFxcZ2xvYmFsZnV0dXJlIikscy5ndWxsZXQucHVzaFRva2VuKHYpLHMuZ3VsbGV0LnB1c2hUb2tlbihwKSx7dHlwZToiaW50ZXJuYWwiLG1vZGU6cy5tb2RlfX19KTt2YXIgaFI9ZnVuY3Rpb24ocyx1LGQpe3ZhciBwPVVsLm1hdGhbc10mJlVsLm1hdGhbc10ucmVwbGFjZSx2PUoyZShwfHxzLHUsZCk7aWYoIXYpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzeW1ib2wgIitzKyIgYW5kIGZvbnQgc2l6ZSAiK3UrIi4iKTtyZXR1cm4gdn0sYmJlPWZ1bmN0aW9uKHMsdSxkLHApe3ZhciB2PWQuaGF2aW5nQmFzZVN0eWxlKHUpLGI9em4ubWFrZVNwYW4ocC5jb25jYXQodi5zaXppbmdDbGFzc2VzKGQpKSxbc10sZCkseT12LnNpemVNdWx0aXBsaWVyL2Quc2l6ZU11bHRpcGxpZXI7cmV0dXJuIGIuaGVpZ2h0Kj15LGIuZGVwdGgqPXksYi5tYXhGb250U2l6ZT12LnNpemVNdWx0aXBsaWVyLGJ9LEx6ZT1mdW5jdGlvbihzLHUsZCl7dmFyIHA9dS5oYXZpbmdCYXNlU3R5bGUoZCksdj0oMS11LnNpemVNdWx0aXBsaWVyL3Auc2l6ZU11bHRpcGxpZXIpKnUuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O3MuY2xhc3Nlcy5wdXNoKCJkZWxpbWNlbnRlciIpLHMuc3R5bGUudG9wPVJpKHYpLHMuaGVpZ2h0LT12LHMuZGVwdGgrPXZ9LFFIdD1mdW5jdGlvbihzLHUsZCxwLHYsYil7dmFyIHk9em4ubWFrZVN5bWJvbChzLCJNYWluLVJlZ3VsYXIiLHYscCksVD1iYmUoeSx1LHAsYik7cmV0dXJuIGQmJkx6ZShULHAsdSksVH0sSkh0PWZ1bmN0aW9uKHMsdSxkLHApe3JldHVybiB6bi5tYWtlU3ltYm9sKHMsIlNpemUiK3UrIi1SZWd1bGFyIixkLHApfSxNemU9ZnVuY3Rpb24ocyx1LGQscCx2LGIpe3ZhciB5PUpIdChzLHUsdixwKSxUPWJiZSh6bi5tYWtlU3BhbihbImRlbGltc2l6aW5nIiwic2l6ZSIrdV0sW3ldLHApLFRhLlRFWFQscCxiKTtyZXR1cm4gZCYmTHplKFQscCxUYS5URVhUKSxUfSxtYmU9ZnVuY3Rpb24ocyx1LGQpe3ZhciBwO3U9PT0iU2l6ZTEtUmVndWxhciI/cD0iZGVsaW0tc2l6ZTEiOnA9ImRlbGltLXNpemU0Ijt2YXIgdj16bi5tYWtlU3BhbihbImRlbGltc2l6aW5naW5uZXIiLHBdLFt6bi5tYWtlU3BhbihbXSxbem4ubWFrZVN5bWJvbChzLHUsZCldKV0pO3JldHVybnt0eXBlOiJlbGVtIixlbGVtOnZ9fSx2YmU9ZnVuY3Rpb24ocyx1LGQpe3ZhciBwPUs0WyJTaXplNC1SZWd1bGFyIl1bcy5jaGFyQ29kZUF0KDApXT9LNFsiU2l6ZTQtUmVndWxhciJdW3MuY2hhckNvZGVBdCgwKV1bNF06SzRbIlNpemUxLVJlZ3VsYXIiXVtzLmNoYXJDb2RlQXQoMCldWzRdLHY9bmV3IEM5KCJpbm5lciIsaUh0KHMsTWF0aC5yb3VuZCgxZTMqdSkpKSxiPW5ldyBENyhbdl0se3dpZHRoOlJpKHApLGhlaWdodDpSaSh1KSxzdHlsZToid2lkdGg6IitSaShwKSx2aWV3Qm94OiIwIDAgIisxZTMqcCsiICIrTWF0aC5yb3VuZCgxZTMqdSkscHJlc2VydmVBc3BlY3RSYXRpbzoieE1pbllNaW4ifSkseT16bi5tYWtlU3ZnU3BhbihbXSxbYl0sZCk7cmV0dXJuIHkuaGVpZ2h0PXUseS5zdHlsZS5oZWlnaHQ9UmkodSkseS5zdHlsZS53aWR0aD1SaShwKSx7dHlwZToiZWxlbSIsZWxlbTp5fX0sd2JlPS4wMDgseFE9e3R5cGU6Imtlcm4iLHNpemU6LTEqd2JlfSxaSHQ9WyJ8IiwiXFxsdmVydCIsIlxccnZlcnQiLCJcXHZlcnQiXSxlVnQ9WyJcXHwiLCJcXGxWZXJ0IiwiXFxyVmVydCIsIlxcVmVydCJdLER6ZT1mdW5jdGlvbihzLHUsZCxwLHYsYil7dmFyIHksVCxfLEEsUD0iIixSPTA7eT1fPUE9cyxUPW51bGw7dmFyIEY9IlNpemUxLVJlZ3VsYXIiO3M9PT0iXFx1cGFycm93Ij9fPUE9IuKPkCI6cz09PSJcXFVwYXJyb3ciP189QT0i4oCWIjpzPT09IlxcZG93bmFycm93Ij95PV89IuKPkCI6cz09PSJcXERvd25hcnJvdyI/eT1fPSLigJYiOnM9PT0iXFx1cGRvd25hcnJvdyI/KHk9IlxcdXBhcnJvdyIsXz0i4o+QIixBPSJcXGRvd25hcnJvdyIpOnM9PT0iXFxVcGRvd25hcnJvdyI/KHk9IlxcVXBhcnJvdyIsXz0i4oCWIixBPSJcXERvd25hcnJvdyIpOllhLmNvbnRhaW5zKFpIdCxzKT8oXz0i4oijIixQPSJ2ZXJ0IixSPTMzMyk6WWEuY29udGFpbnMoZVZ0LHMpPyhfPSLiiKUiLFA9ImRvdWJsZXZlcnQiLFI9NTU2KTpzPT09IlsifHxzPT09IlxcbGJyYWNrIj8oeT0i4o6hIixfPSLijqIiLEE9IuKOoyIsRj0iU2l6ZTQtUmVndWxhciIsUD0ibGJyYWNrIixSPTY2Nyk6cz09PSJdInx8cz09PSJcXHJicmFjayI/KHk9IuKOpCIsXz0i4o6lIixBPSLijqYiLEY9IlNpemU0LVJlZ3VsYXIiLFA9InJicmFjayIsUj02NjcpOnM9PT0iXFxsZmxvb3IifHxzPT09IuKMiiI/KF89eT0i4o6iIixBPSLijqMiLEY9IlNpemU0LVJlZ3VsYXIiLFA9ImxmbG9vciIsUj02NjcpOnM9PT0iXFxsY2VpbCJ8fHM9PT0i4oyIIj8oeT0i4o6hIixfPUE9IuKOoiIsRj0iU2l6ZTQtUmVndWxhciIsUD0ibGNlaWwiLFI9NjY3KTpzPT09IlxccmZsb29yInx8cz09PSLijIsiPyhfPXk9IuKOpSIsQT0i4o6mIixGPSJTaXplNC1SZWd1bGFyIixQPSJyZmxvb3IiLFI9NjY3KTpzPT09IlxccmNlaWwifHxzPT09IuKMiSI/KHk9IuKOpCIsXz1BPSLijqUiLEY9IlNpemU0LVJlZ3VsYXIiLFA9InJjZWlsIixSPTY2Nyk6cz09PSIoInx8cz09PSJcXGxwYXJlbiI/KHk9IuKOmyIsXz0i4o6cIixBPSLijp0iLEY9IlNpemU0LVJlZ3VsYXIiLFA9ImxwYXJlbiIsUj04NzUpOnM9PT0iKSJ8fHM9PT0iXFxycGFyZW4iPyh5PSLijp4iLF89IuKOnyIsQT0i4o6gIixGPSJTaXplNC1SZWd1bGFyIixQPSJycGFyZW4iLFI9ODc1KTpzPT09IlxceyJ8fHM9PT0iXFxsYnJhY2UiPyh5PSLijqciLFQ9IuKOqCIsQT0i4o6pIixfPSLijqoiLEY9IlNpemU0LVJlZ3VsYXIiKTpzPT09IlxcfSJ8fHM9PT0iXFxyYnJhY2UiPyh5PSLijqsiLFQ9IuKOrCIsQT0i4o6tIixfPSLijqoiLEY9IlNpemU0LVJlZ3VsYXIiKTpzPT09IlxcbGdyb3VwInx8cz09PSLin64iPyh5PSLijqciLEE9IuKOqSIsXz0i4o6qIixGPSJTaXplNC1SZWd1bGFyIik6cz09PSJcXHJncm91cCJ8fHM9PT0i4p+vIj8oeT0i4o6rIixBPSLijq0iLF89IuKOqiIsRj0iU2l6ZTQtUmVndWxhciIpOnM9PT0iXFxsbW91c3RhY2hlInx8cz09PSLijrAiPyh5PSLijqciLEE9IuKOrSIsXz0i4o6qIixGPSJTaXplNC1SZWd1bGFyIik6KHM9PT0iXFxybW91c3RhY2hlInx8cz09PSLijrEiKSYmKHk9IuKOqyIsQT0i4o6pIixfPSLijqoiLEY9IlNpemU0LVJlZ3VsYXIiKTt2YXIgaj1oUih5LEYsdiksSz1qLmhlaWdodCtqLmRlcHRoLGVlPWhSKF8sRix2KSxpZT1lZS5oZWlnaHQrZWUuZGVwdGgsb2U9aFIoQSxGLHYpLHBlPW9lLmhlaWdodCtvZS5kZXB0aCxiZT0wLGFlPTE7aWYoVCE9PW51bGwpe3ZhciBuZT1oUihULEYsdik7YmU9bmUuaGVpZ2h0K25lLmRlcHRoLGFlPTJ9dmFyIHNlPUsrcGUrYmUsZGU9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHUtc2UpLyhhZSppZSkpKSxYPXNlK2RlKmFlKmllLGdlPXAuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O2QmJihnZSo9cC5zaXplTXVsdGlwbGllcik7dmFyIFc9WC8yLWdlLHhlPVtdO2lmKFAubGVuZ3RoPjApe3ZhciBVPVgtSy1wZSxGZT1NYXRoLnJvdW5kKFgqMWUzKSxQZT1zSHQoUCxNYXRoLnJvdW5kKFUqMWUzKSksamU9bmV3IEM5KFAsUGUpLEllPShSLzFlMykudG9GaXhlZCgzKSsiZW0iLFNlPShGZS8xZTMpLnRvRml4ZWQoMykrImVtIixDZT1uZXcgRDcoW2plXSx7d2lkdGg6SWUsaGVpZ2h0OlNlLHZpZXdCb3g6IjAgMCAiK1IrIiAiK0ZlfSksa2U9em4ubWFrZVN2Z1NwYW4oW10sW0NlXSxwKTtrZS5oZWlnaHQ9RmUvMWUzLGtlLnN0eWxlLndpZHRoPUllLGtlLnN0eWxlLmhlaWdodD1TZSx4ZS5wdXNoKHt0eXBlOiJlbGVtIixlbGVtOmtlfSl9ZWxzZXtpZih4ZS5wdXNoKG1iZShBLEYsdikpLHhlLnB1c2goeFEpLFQ9PT1udWxsKXt2YXIgS2U9WC1LLXBlKzIqd2JlO3hlLnB1c2godmJlKF8sS2UscCkpfWVsc2V7dmFyIEZ0PShYLUstcGUtYmUpLzIrMip3YmU7eGUucHVzaCh2YmUoXyxGdCxwKSkseGUucHVzaCh4USkseGUucHVzaChtYmUoVCxGLHYpKSx4ZS5wdXNoKHhRKSx4ZS5wdXNoKHZiZShfLEZ0LHApKX14ZS5wdXNoKHhRKSx4ZS5wdXNoKG1iZSh5LEYsdikpfXZhciBOZT1wLmhhdmluZ0Jhc2VTdHlsZShUYS5URVhUKSxnbj16bi5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiYm90dG9tIixwb3NpdGlvbkRhdGE6VyxjaGlsZHJlbjp4ZX0sTmUpO3JldHVybiBiYmUoem4ubWFrZVNwYW4oWyJkZWxpbXNpemluZyIsIm11bHQiXSxbZ25dLE5lKSxUYS5URVhULHAsYil9LHliZT04MCx4YmU9LjA4LGtiZT1mdW5jdGlvbihzLHUsZCxwLHYpe3ZhciBiPXJIdChzLHAsZCkseT1uZXcgQzkocyxiKSxUPW5ldyBENyhbeV0se3dpZHRoOiI0MDBlbSIsaGVpZ2h0OlJpKHUpLHZpZXdCb3g6IjAgMCA0MDAwMDAgIitkLHByZXNlcnZlQXNwZWN0UmF0aW86InhNaW5ZTWluIHNsaWNlIn0pO3JldHVybiB6bi5tYWtlU3ZnU3BhbihbImhpZGUtdGFpbCJdLFtUXSx2KX0sdFZ0PWZ1bmN0aW9uKHMsdSl7dmFyIGQ9dS5oYXZpbmdCYXNlU2l6aW5nKCkscD1QemUoIlxcc3VyZCIscypkLnNpemVNdWx0aXBsaWVyLE56ZSxkKSx2PWQuc2l6ZU11bHRpcGxpZXIsYj1NYXRoLm1heCgwLHUubWluUnVsZVRoaWNrbmVzcy11LmZvbnRNZXRyaWNzKCkuc3FydFJ1bGVUaGlja25lc3MpLHksVD0wLF89MCxBPTAsUDtyZXR1cm4gcC50eXBlPT09InNtYWxsIj8oQT0xZTMrMWUzKmIreWJlLHM8MT92PTE6czwxLjQmJih2PS43KSxUPSgxK2IreGJlKS92LF89KDErYikvdix5PWtiZSgic3FydE1haW4iLFQsQSxiLHUpLHkuc3R5bGUubWluV2lkdGg9IjAuODUzZW0iLFA9LjgzMy92KTpwLnR5cGU9PT0ibGFyZ2UiPyhBPSgxZTMreWJlKSpmUltwLnNpemVdLF89KGZSW3Auc2l6ZV0rYikvdixUPShmUltwLnNpemVdK2IreGJlKS92LHk9a2JlKCJzcXJ0U2l6ZSIrcC5zaXplLFQsQSxiLHUpLHkuc3R5bGUubWluV2lkdGg9IjEuMDJlbSIsUD0xL3YpOihUPXMrYit4YmUsXz1zK2IsQT1NYXRoLmZsb29yKDFlMypzK2IpK3liZSx5PWtiZSgic3FydFRhbGwiLFQsQSxiLHUpLHkuc3R5bGUubWluV2lkdGg9IjAuNzQyZW0iLFA9MS4wNTYpLHkuaGVpZ2h0PV8seS5zdHlsZS5oZWlnaHQ9UmkoVCkse3NwYW46eSxhZHZhbmNlV2lkdGg6UCxydWxlV2lkdGg6KHUuZm9udE1ldHJpY3MoKS5zcXJ0UnVsZVRoaWNrbmVzcytiKSp2fX0sSXplPVsiKCIsIlxcbHBhcmVuIiwiKSIsIlxccnBhcmVuIiwiWyIsIlxcbGJyYWNrIiwiXSIsIlxccmJyYWNrIiwiXFx7IiwiXFxsYnJhY2UiLCJcXH0iLCJcXHJicmFjZSIsIlxcbGZsb29yIiwiXFxyZmxvb3IiLCLijIoiLCLijIsiLCJcXGxjZWlsIiwiXFxyY2VpbCIsIuKMiCIsIuKMiSIsIlxcc3VyZCJdLG5WdD1bIlxcdXBhcnJvdyIsIlxcZG93bmFycm93IiwiXFx1cGRvd25hcnJvdyIsIlxcVXBhcnJvdyIsIlxcRG93bmFycm93IiwiXFxVcGRvd25hcnJvdyIsInwiLCJcXHwiLCJcXHZlcnQiLCJcXFZlcnQiLCJcXGx2ZXJ0IiwiXFxydmVydCIsIlxcbFZlcnQiLCJcXHJWZXJ0IiwiXFxsZ3JvdXAiLCJcXHJncm91cCIsIuKfriIsIuKfryIsIlxcbG1vdXN0YWNoZSIsIlxccm1vdXN0YWNoZSIsIuKOsCIsIuKOsSJdLE96ZT1bIjwiLCI+IiwiXFxsYW5nbGUiLCJcXHJhbmdsZSIsIi8iLCJcXGJhY2tzbGFzaCIsIlxcbHQiLCJcXGd0Il0sZlI9WzAsMS4yLDEuOCwyLjQsM10sclZ0PWZ1bmN0aW9uKHMsdSxkLHAsdil7aWYocz09PSI8Inx8cz09PSJcXGx0Inx8cz09PSLin6giP3M9IlxcbGFuZ2xlIjoocz09PSI+Inx8cz09PSJcXGd0Inx8cz09PSLin6kiKSYmKHM9IlxccmFuZ2xlIiksWWEuY29udGFpbnMoSXplLHMpfHxZYS5jb250YWlucyhPemUscykpcmV0dXJuIE16ZShzLHUsITEsZCxwLHYpO2lmKFlhLmNvbnRhaW5zKG5WdCxzKSlyZXR1cm4gRHplKHMsZlJbdV0sITEsZCxwLHYpO3Rocm93IG5ldyBDaSgiSWxsZWdhbCBkZWxpbWl0ZXI6ICciK3MrIiciKX0saVZ0PVt7dHlwZToic21hbGwiLHN0eWxlOlRhLlNDUklQVFNDUklQVH0se3R5cGU6InNtYWxsIixzdHlsZTpUYS5TQ1JJUFR9LHt0eXBlOiJzbWFsbCIsc3R5bGU6VGEuVEVYVH0se3R5cGU6ImxhcmdlIixzaXplOjF9LHt0eXBlOiJsYXJnZSIsc2l6ZToyfSx7dHlwZToibGFyZ2UiLHNpemU6M30se3R5cGU6ImxhcmdlIixzaXplOjR9XSxzVnQ9W3t0eXBlOiJzbWFsbCIsc3R5bGU6VGEuU0NSSVBUU0NSSVBUfSx7dHlwZToic21hbGwiLHN0eWxlOlRhLlNDUklQVH0se3R5cGU6InNtYWxsIixzdHlsZTpUYS5URVhUfSx7dHlwZToic3RhY2sifV0sTnplPVt7dHlwZToic21hbGwiLHN0eWxlOlRhLlNDUklQVFNDUklQVH0se3R5cGU6InNtYWxsIixzdHlsZTpUYS5TQ1JJUFR9LHt0eXBlOiJzbWFsbCIsc3R5bGU6VGEuVEVYVH0se3R5cGU6ImxhcmdlIixzaXplOjF9LHt0eXBlOiJsYXJnZSIsc2l6ZToyfSx7dHlwZToibGFyZ2UiLHNpemU6M30se3R5cGU6ImxhcmdlIixzaXplOjR9LHt0eXBlOiJzdGFjayJ9XSxhVnQ9ZnVuY3Rpb24ocyl7aWYocy50eXBlPT09InNtYWxsIilyZXR1cm4iTWFpbi1SZWd1bGFyIjtpZihzLnR5cGU9PT0ibGFyZ2UiKXJldHVybiJTaXplIitzLnNpemUrIi1SZWd1bGFyIjtpZihzLnR5cGU9PT0ic3RhY2siKXJldHVybiJTaXplNC1SZWd1bGFyIjt0aHJvdyBuZXcgRXJyb3IoIkFkZCBzdXBwb3J0IGZvciBkZWxpbSB0eXBlICciK3MudHlwZSsiJyBoZXJlLiIpfSxQemU9ZnVuY3Rpb24ocyx1LGQscCl7Zm9yKHZhciB2PU1hdGgubWluKDIsMy1wLnN0eWxlLnNpemUpLGI9djtiPGQubGVuZ3RoJiZkW2JdLnR5cGUhPT0ic3RhY2siO2IrKyl7dmFyIHk9aFIocyxhVnQoZFtiXSksIm1hdGgiKSxUPXkuaGVpZ2h0K3kuZGVwdGg7aWYoZFtiXS50eXBlPT09InNtYWxsIil7dmFyIF89cC5oYXZpbmdCYXNlU3R5bGUoZFtiXS5zdHlsZSk7VCo9Xy5zaXplTXVsdGlwbGllcn1pZihUPnUpcmV0dXJuIGRbYl19cmV0dXJuIGRbZC5sZW5ndGgtMV19LEJ6ZT1mdW5jdGlvbihzLHUsZCxwLHYsYil7cz09PSI8Inx8cz09PSJcXGx0Inx8cz09PSLin6giP3M9IlxcbGFuZ2xlIjoocz09PSI+Inx8cz09PSJcXGd0Inx8cz09PSLin6kiKSYmKHM9IlxccmFuZ2xlIik7dmFyIHk7WWEuY29udGFpbnMoT3plLHMpP3k9aVZ0OllhLmNvbnRhaW5zKEl6ZSxzKT95PU56ZTp5PXNWdDt2YXIgVD1QemUocyx1LHkscCk7cmV0dXJuIFQudHlwZT09PSJzbWFsbCI/UUh0KHMsVC5zdHlsZSxkLHAsdixiKTpULnR5cGU9PT0ibGFyZ2UiP016ZShzLFQuc2l6ZSxkLHAsdixiKTpEemUocyx1LGQscCx2LGIpfSxvVnQ9ZnVuY3Rpb24ocyx1LGQscCx2LGIpe3ZhciB5PXAuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0KnAuc2l6ZU11bHRpcGxpZXIsVD05MDEsXz01L3AuZm9udE1ldHJpY3MoKS5wdFBlckVtLEE9TWF0aC5tYXgodS15LGQreSksUD1NYXRoLm1heChBLzUwMCpULDIqQS1fKTtyZXR1cm4gQnplKHMsUCwhMCxwLHYsYil9LEI3PXtzcXJ0SW1hZ2U6dFZ0LHNpemVkRGVsaW06clZ0LHNpemVUb01heEhlaWdodDpmUixjdXN0b21TaXplZERlbGltOkJ6ZSxsZWZ0UmlnaHREZWxpbTpvVnR9LEZ6ZT17IlxcYmlnbCI6e21jbGFzczoibW9wZW4iLHNpemU6MX0sIlxcQmlnbCI6e21jbGFzczoibW9wZW4iLHNpemU6Mn0sIlxcYmlnZ2wiOnttY2xhc3M6Im1vcGVuIixzaXplOjN9LCJcXEJpZ2dsIjp7bWNsYXNzOiJtb3BlbiIsc2l6ZTo0fSwiXFxiaWdyIjp7bWNsYXNzOiJtY2xvc2UiLHNpemU6MX0sIlxcQmlnciI6e21jbGFzczoibWNsb3NlIixzaXplOjJ9LCJcXGJpZ2dyIjp7bWNsYXNzOiJtY2xvc2UiLHNpemU6M30sIlxcQmlnZ3IiOnttY2xhc3M6Im1jbG9zZSIsc2l6ZTo0fSwiXFxiaWdtIjp7bWNsYXNzOiJtcmVsIixzaXplOjF9LCJcXEJpZ20iOnttY2xhc3M6Im1yZWwiLHNpemU6Mn0sIlxcYmlnZ20iOnttY2xhc3M6Im1yZWwiLHNpemU6M30sIlxcQmlnZ20iOnttY2xhc3M6Im1yZWwiLHNpemU6NH0sIlxcYmlnIjp7bWNsYXNzOiJtb3JkIixzaXplOjF9LCJcXEJpZyI6e21jbGFzczoibW9yZCIsc2l6ZToyfSwiXFxiaWdnIjp7bWNsYXNzOiJtb3JkIixzaXplOjN9LCJcXEJpZ2ciOnttY2xhc3M6Im1vcmQiLHNpemU6NH19LGNWdD1bIigiLCJcXGxwYXJlbiIsIikiLCJcXHJwYXJlbiIsIlsiLCJcXGxicmFjayIsIl0iLCJcXHJicmFjayIsIlxceyIsIlxcbGJyYWNlIiwiXFx9IiwiXFxyYnJhY2UiLCJcXGxmbG9vciIsIlxccmZsb29yIiwi4oyKIiwi4oyLIiwiXFxsY2VpbCIsIlxccmNlaWwiLCLijIgiLCLijIkiLCI8IiwiPiIsIlxcbGFuZ2xlIiwi4p+oIiwiXFxyYW5nbGUiLCLin6kiLCJcXGx0IiwiXFxndCIsIlxcbHZlcnQiLCJcXHJ2ZXJ0IiwiXFxsVmVydCIsIlxcclZlcnQiLCJcXGxncm91cCIsIlxccmdyb3VwIiwi4p+uIiwi4p+vIiwiXFxsbW91c3RhY2hlIiwiXFxybW91c3RhY2hlIiwi4o6wIiwi4o6xIiwiLyIsIlxcYmFja3NsYXNoIiwifCIsIlxcdmVydCIsIlxcfCIsIlxcVmVydCIsIlxcdXBhcnJvdyIsIlxcVXBhcnJvdyIsIlxcZG93bmFycm93IiwiXFxEb3duYXJyb3ciLCJcXHVwZG93bmFycm93IiwiXFxVcGRvd25hcnJvdyIsIi4iXTtmdW5jdGlvbiBrUShpLHMpe3ZhciB1PXZRKGkpO2lmKHUmJllhLmNvbnRhaW5zKGNWdCx1LnRleHQpKXJldHVybiB1O3Rocm93IHU/bmV3IENpKCJJbnZhbGlkIGRlbGltaXRlciAnIit1LnRleHQrIicgYWZ0ZXIgJyIrcy5mdW5jTmFtZSsiJyIsaSk6bmV3IENpKCJJbnZhbGlkIGRlbGltaXRlciB0eXBlICciK2kudHlwZSsiJyIsaSl9Smkoe3R5cGU6ImRlbGltc2l6aW5nIixuYW1lczpbIlxcYmlnbCIsIlxcQmlnbCIsIlxcYmlnZ2wiLCJcXEJpZ2dsIiwiXFxiaWdyIiwiXFxCaWdyIiwiXFxiaWdnciIsIlxcQmlnZ3IiLCJcXGJpZ20iLCJcXEJpZ20iLCJcXGJpZ2dtIiwiXFxCaWdnbSIsIlxcYmlnIiwiXFxCaWciLCJcXGJpZ2ciLCJcXEJpZ2ciXSxwcm9wczp7bnVtQXJnczoxLGFyZ1R5cGVzOlsicHJpbWl0aXZlIl19LGhhbmRsZXI6KGkscyk9Pnt2YXIgdT1rUShzWzBdLGkpO3JldHVybnt0eXBlOiJkZWxpbXNpemluZyIsbW9kZTppLnBhcnNlci5tb2RlLHNpemU6RnplW2kuZnVuY05hbWVdLnNpemUsbWNsYXNzOkZ6ZVtpLmZ1bmNOYW1lXS5tY2xhc3MsZGVsaW06dS50ZXh0fX0saHRtbEJ1aWxkZXI6KGkscyk9PmkuZGVsaW09PT0iLiI/em4ubWFrZVNwYW4oW2kubWNsYXNzXSk6Qjcuc2l6ZWREZWxpbShpLmRlbGltLGkuc2l6ZSxzLGkubW9kZSxbaS5tY2xhc3NdKSxtYXRobWxCdWlsZGVyOmk9Pnt2YXIgcz1bXTtpLmRlbGltIT09Ii4iJiZzLnB1c2goUnYoaS5kZWxpbSxpLm1vZGUpKTt2YXIgdT1uZXcgdmkuTWF0aE5vZGUoIm1vIixzKTtpLm1jbGFzcz09PSJtb3BlbiJ8fGkubWNsYXNzPT09Im1jbG9zZSI/dS5zZXRBdHRyaWJ1dGUoImZlbmNlIiwidHJ1ZSIpOnUuc2V0QXR0cmlidXRlKCJmZW5jZSIsImZhbHNlIiksdS5zZXRBdHRyaWJ1dGUoInN0cmV0Y2h5IiwidHJ1ZSIpO3ZhciBkPVJpKEI3LnNpemVUb01heEhlaWdodFtpLnNpemVdKTtyZXR1cm4gdS5zZXRBdHRyaWJ1dGUoIm1pbnNpemUiLGQpLHUuc2V0QXR0cmlidXRlKCJtYXhzaXplIixkKSx1fX0pO2Z1bmN0aW9uIFJ6ZShpKXtpZighaS5ib2R5KXRocm93IG5ldyBFcnJvcigiQnVnOiBUaGUgbGVmdHJpZ2h0IFBhcnNlTm9kZSB3YXNuJ3QgZnVsbHkgcGFyc2VkLiIpfUppKHt0eXBlOiJsZWZ0cmlnaHQtcmlnaHQiLG5hbWVzOlsiXFxyaWdodCJdLHByb3BzOntudW1BcmdzOjEscHJpbWl0aXZlOiEwfSxoYW5kbGVyOihpLHMpPT57dmFyIHU9aS5wYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5nZXQoIlxcY3VycmVudEBjb2xvciIpO2lmKHUmJnR5cGVvZiB1IT0ic3RyaW5nIil0aHJvdyBuZXcgQ2koIlxcY3VycmVudEBjb2xvciBzZXQgdG8gbm9uLXN0cmluZyBpbiBcXHJpZ2h0Iik7cmV0dXJue3R5cGU6ImxlZnRyaWdodC1yaWdodCIsbW9kZTppLnBhcnNlci5tb2RlLGRlbGltOmtRKHNbMF0saSkudGV4dCxjb2xvcjp1fX19KSxKaSh7dHlwZToibGVmdHJpZ2h0IixuYW1lczpbIlxcbGVmdCJdLHByb3BzOntudW1BcmdzOjEscHJpbWl0aXZlOiEwfSxoYW5kbGVyOihpLHMpPT57dmFyIHU9a1Eoc1swXSxpKSxkPWkucGFyc2VyOysrZC5sZWZ0cmlnaHREZXB0aDt2YXIgcD1kLnBhcnNlRXhwcmVzc2lvbighMSk7LS1kLmxlZnRyaWdodERlcHRoLGQuZXhwZWN0KCJcXHJpZ2h0IiwhMSk7dmFyIHY9WW8oZC5wYXJzZUZ1bmN0aW9uKCksImxlZnRyaWdodC1yaWdodCIpO3JldHVybnt0eXBlOiJsZWZ0cmlnaHQiLG1vZGU6ZC5tb2RlLGJvZHk6cCxsZWZ0OnUudGV4dCxyaWdodDp2LmRlbGltLHJpZ2h0Q29sb3I6di5jb2xvcn19LGh0bWxCdWlsZGVyOihpLHMpPT57UnplKGkpO2Zvcih2YXIgdT1kMShpLmJvZHkscywhMCxbIm1vcGVuIiwibWNsb3NlIl0pLGQ9MCxwPTAsdj0hMSxiPTA7Yjx1Lmxlbmd0aDtiKyspdVtiXS5pc01pZGRsZT92PSEwOihkPU1hdGgubWF4KHVbYl0uaGVpZ2h0LGQpLHA9TWF0aC5tYXgodVtiXS5kZXB0aCxwKSk7ZCo9cy5zaXplTXVsdGlwbGllcixwKj1zLnNpemVNdWx0aXBsaWVyO3ZhciB5O2lmKGkubGVmdD09PSIuIj95PXVSKHMsWyJtb3BlbiJdKTp5PUI3LmxlZnRSaWdodERlbGltKGkubGVmdCxkLHAscyxpLm1vZGUsWyJtb3BlbiJdKSx1LnVuc2hpZnQoeSksdilmb3IodmFyIFQ9MTtUPHUubGVuZ3RoO1QrKyl7dmFyIF89dVtUXSxBPV8uaXNNaWRkbGU7QSYmKHVbVF09QjcubGVmdFJpZ2h0RGVsaW0oQS5kZWxpbSxkLHAsQS5vcHRpb25zLGkubW9kZSxbXSkpfXZhciBQO2lmKGkucmlnaHQ9PT0iLiIpUD11UihzLFsibWNsb3NlIl0pO2Vsc2V7dmFyIFI9aS5yaWdodENvbG9yP3Mud2l0aENvbG9yKGkucmlnaHRDb2xvcik6cztQPUI3LmxlZnRSaWdodERlbGltKGkucmlnaHQsZCxwLFIsaS5tb2RlLFsibWNsb3NlIl0pfXJldHVybiB1LnB1c2goUCksem4ubWFrZVNwYW4oWyJtaW5uZXIiXSx1LHMpfSxtYXRobWxCdWlsZGVyOihpLHMpPT57UnplKGkpO3ZhciB1PWoyKGkuYm9keSxzKTtpZihpLmxlZnQhPT0iLiIpe3ZhciBkPW5ldyB2aS5NYXRoTm9kZSgibW8iLFtSdihpLmxlZnQsaS5tb2RlKV0pO2Quc2V0QXR0cmlidXRlKCJmZW5jZSIsInRydWUiKSx1LnVuc2hpZnQoZCl9aWYoaS5yaWdodCE9PSIuIil7dmFyIHA9bmV3IHZpLk1hdGhOb2RlKCJtbyIsW1J2KGkucmlnaHQsaS5tb2RlKV0pO3Auc2V0QXR0cmlidXRlKCJmZW5jZSIsInRydWUiKSxpLnJpZ2h0Q29sb3ImJnAuc2V0QXR0cmlidXRlKCJtYXRoY29sb3IiLGkucmlnaHRDb2xvciksdS5wdXNoKHApfXJldHVybiBoYmUodSl9fSksSmkoe3R5cGU6Im1pZGRsZSIsbmFtZXM6WyJcXG1pZGRsZSJdLHByb3BzOntudW1BcmdzOjEscHJpbWl0aXZlOiEwfSxoYW5kbGVyOihpLHMpPT57dmFyIHU9a1Eoc1swXSxpKTtpZighaS5wYXJzZXIubGVmdHJpZ2h0RGVwdGgpdGhyb3cgbmV3IENpKCJcXG1pZGRsZSB3aXRob3V0IHByZWNlZGluZyBcXGxlZnQiLHUpO3JldHVybnt0eXBlOiJtaWRkbGUiLG1vZGU6aS5wYXJzZXIubW9kZSxkZWxpbTp1LnRleHR9fSxodG1sQnVpbGRlcjooaSxzKT0+e3ZhciB1O2lmKGkuZGVsaW09PT0iLiIpdT11UihzLFtdKTtlbHNle3U9Qjcuc2l6ZWREZWxpbShpLmRlbGltLDEscyxpLm1vZGUsW10pO3ZhciBkPXtkZWxpbTppLmRlbGltLG9wdGlvbnM6c307dS5pc01pZGRsZT1kfXJldHVybiB1fSxtYXRobWxCdWlsZGVyOihpLHMpPT57dmFyIHU9aS5kZWxpbT09PSJcXHZlcnQifHxpLmRlbGltPT09InwiP1J2KCJ8IiwidGV4dCIpOlJ2KGkuZGVsaW0saS5tb2RlKSxkPW5ldyB2aS5NYXRoTm9kZSgibW8iLFt1XSk7cmV0dXJuIGQuc2V0QXR0cmlidXRlKCJmZW5jZSIsInRydWUiKSxkLnNldEF0dHJpYnV0ZSgibHNwYWNlIiwiMC4wNWVtIiksZC5zZXRBdHRyaWJ1dGUoInJzcGFjZSIsIjAuMDVlbSIpLGR9fSk7dmFyIEViZT0oaSxzKT0+e3ZhciB1PXpuLndyYXBGcmFnbWVudCh1dShpLmJvZHkscykscyksZD1pLmxhYmVsLnNsaWNlKDEpLHA9cy5zaXplTXVsdGlwbGllcix2LGI9MCx5PVlhLmlzQ2hhcmFjdGVyQm94KGkuYm9keSk7aWYoZD09PSJzb3V0Iil2PXpuLm1ha2VTcGFuKFsic3RyZXRjaHkiLCJzb3V0Il0pLHYuaGVpZ2h0PXMuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcy9wLGI9LS41KnMuZm9udE1ldHJpY3MoKS54SGVpZ2h0O2Vsc2UgaWYoZD09PSJwaGFzZSIpe3ZhciBUPVVoKHtudW1iZXI6LjYsdW5pdDoicHQifSxzKSxfPVVoKHtudW1iZXI6LjM1LHVuaXQ6ImV4In0scyksQT1zLmhhdmluZ0Jhc2VTaXppbmcoKTtwPXAvQS5zaXplTXVsdGlwbGllcjt2YXIgUD11LmhlaWdodCt1LmRlcHRoK1QrXzt1LnN0eWxlLnBhZGRpbmdMZWZ0PVJpKFAvMitUKTt2YXIgUj1NYXRoLmZsb29yKDFlMypQKnApLEY9dEh0KFIpLGo9bmV3IEQ3KFtuZXcgQzkoInBoYXNlIixGKV0se3dpZHRoOiI0MDBlbSIsaGVpZ2h0OlJpKFIvMWUzKSx2aWV3Qm94OiIwIDAgNDAwMDAwICIrUixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJ4TWluWU1pbiBzbGljZSJ9KTt2PXpuLm1ha2VTdmdTcGFuKFsiaGlkZS10YWlsIl0sW2pdLHMpLHYuc3R5bGUuaGVpZ2h0PVJpKFApLGI9dS5kZXB0aCtUK199ZWxzZXsvY2FuY2VsLy50ZXN0KGQpP3l8fHUuY2xhc3Nlcy5wdXNoKCJjYW5jZWwtcGFkIik6ZD09PSJhbmdsIj91LmNsYXNzZXMucHVzaCgiYW5nbHBhZCIpOnUuY2xhc3Nlcy5wdXNoKCJib3hwYWQiKTt2YXIgSz0wLGVlPTAsaWU9MDsvYm94Ly50ZXN0KGQpPyhpZT1NYXRoLm1heChzLmZvbnRNZXRyaWNzKCkuZmJveHJ1bGUscy5taW5SdWxlVGhpY2tuZXNzKSxLPXMuZm9udE1ldHJpY3MoKS5mYm94c2VwKyhkPT09ImNvbG9yYm94Ij8wOmllKSxlZT1LKTpkPT09ImFuZ2wiPyhpZT1NYXRoLm1heChzLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3Mscy5taW5SdWxlVGhpY2tuZXNzKSxLPTQqaWUsZWU9TWF0aC5tYXgoMCwuMjUtdS5kZXB0aCkpOihLPXk/LjI6MCxlZT1LKSx2PVA3LmVuY2xvc2VTcGFuKHUsZCxLLGVlLHMpLC9mYm94fGJveGVkfGZjb2xvcmJveC8udGVzdChkKT8odi5zdHlsZS5ib3JkZXJTdHlsZT0ic29saWQiLHYuc3R5bGUuYm9yZGVyV2lkdGg9UmkoaWUpKTpkPT09ImFuZ2wiJiZpZSE9PS4wNDkmJih2LnN0eWxlLmJvcmRlclRvcFdpZHRoPVJpKGllKSx2LnN0eWxlLmJvcmRlclJpZ2h0V2lkdGg9UmkoaWUpKSxiPXUuZGVwdGgrZWUsaS5iYWNrZ3JvdW5kQ29sb3ImJih2LnN0eWxlLmJhY2tncm91bmRDb2xvcj1pLmJhY2tncm91bmRDb2xvcixpLmJvcmRlckNvbG9yJiYodi5zdHlsZS5ib3JkZXJDb2xvcj1pLmJvcmRlckNvbG9yKSl9dmFyIG9lO2lmKGkuYmFja2dyb3VuZENvbG9yKW9lPXpuLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTp2LHNoaWZ0OmJ9LHt0eXBlOiJlbGVtIixlbGVtOnUsc2hpZnQ6MH1dfSxzKTtlbHNle3ZhciBwZT0vY2FuY2VsfHBoYXNlLy50ZXN0KGQpP1sic3ZnLWFsaWduIl06W107b2U9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOnUsc2hpZnQ6MH0se3R5cGU6ImVsZW0iLGVsZW06dixzaGlmdDpiLHdyYXBwZXJDbGFzc2VzOnBlfV19LHMpfXJldHVybi9jYW5jZWwvLnRlc3QoZCkmJihvZS5oZWlnaHQ9dS5oZWlnaHQsb2UuZGVwdGg9dS5kZXB0aCksL2NhbmNlbC8udGVzdChkKSYmIXk/em4ubWFrZVNwYW4oWyJtb3JkIiwiY2FuY2VsLWxhcCJdLFtvZV0scyk6em4ubWFrZVNwYW4oWyJtb3JkIl0sW29lXSxzKX0sVGJlPShpLHMpPT57dmFyIHU9MCxkPW5ldyB2aS5NYXRoTm9kZShpLmxhYmVsLmluZGV4T2YoImNvbG9yYm94Iik+LTE/Im1wYWRkZWQiOiJtZW5jbG9zZSIsW0xsKGkuYm9keSxzKV0pO3N3aXRjaChpLmxhYmVsKXtjYXNlIlxcY2FuY2VsIjpkLnNldEF0dHJpYnV0ZSgibm90YXRpb24iLCJ1cGRpYWdvbmFsc3RyaWtlIik7YnJlYWs7Y2FzZSJcXGJjYW5jZWwiOmQuc2V0QXR0cmlidXRlKCJub3RhdGlvbiIsImRvd25kaWFnb25hbHN0cmlrZSIpO2JyZWFrO2Nhc2UiXFxwaGFzZSI6ZC5zZXRBdHRyaWJ1dGUoIm5vdGF0aW9uIiwicGhhc29yYW5nbGUiKTticmVhaztjYXNlIlxcc291dCI6ZC5zZXRBdHRyaWJ1dGUoIm5vdGF0aW9uIiwiaG9yaXpvbnRhbHN0cmlrZSIpO2JyZWFrO2Nhc2UiXFxmYm94IjpkLnNldEF0dHJpYnV0ZSgibm90YXRpb24iLCJib3giKTticmVhaztjYXNlIlxcYW5nbCI6ZC5zZXRBdHRyaWJ1dGUoIm5vdGF0aW9uIiwiYWN0dWFyaWFsIik7YnJlYWs7Y2FzZSJcXGZjb2xvcmJveCI6Y2FzZSJcXGNvbG9yYm94IjppZih1PXMuZm9udE1ldHJpY3MoKS5mYm94c2VwKnMuZm9udE1ldHJpY3MoKS5wdFBlckVtLGQuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIisiKzIqdSsicHQiKSxkLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IiwiKyIrMip1KyJwdCIpLGQuc2V0QXR0cmlidXRlKCJsc3BhY2UiLHUrInB0IiksZC5zZXRBdHRyaWJ1dGUoInZvZmZzZXQiLHUrInB0IiksaS5sYWJlbD09PSJcXGZjb2xvcmJveCIpe3ZhciBwPU1hdGgubWF4KHMuZm9udE1ldHJpY3MoKS5mYm94cnVsZSxzLm1pblJ1bGVUaGlja25lc3MpO2Quc2V0QXR0cmlidXRlKCJzdHlsZSIsImJvcmRlcjogIitwKyJlbSBzb2xpZCAiK1N0cmluZyhpLmJvcmRlckNvbG9yKSl9YnJlYWs7Y2FzZSJcXHhjYW5jZWwiOmQuc2V0QXR0cmlidXRlKCJub3RhdGlvbiIsInVwZGlhZ29uYWxzdHJpa2UgZG93bmRpYWdvbmFsc3RyaWtlIik7YnJlYWt9cmV0dXJuIGkuYmFja2dyb3VuZENvbG9yJiZkLnNldEF0dHJpYnV0ZSgibWF0aGJhY2tncm91bmQiLGkuYmFja2dyb3VuZENvbG9yKSxkfTtKaSh7dHlwZToiZW5jbG9zZSIsbmFtZXM6WyJcXGNvbG9yYm94Il0scHJvcHM6e251bUFyZ3M6MixhbGxvd2VkSW5UZXh0OiEwLGFyZ1R5cGVzOlsiY29sb3IiLCJ0ZXh0Il19LGhhbmRsZXIoaSxzLHUpe3ZhcntwYXJzZXI6ZCxmdW5jTmFtZTpwfT1pLHY9WW8oc1swXSwiY29sb3ItdG9rZW4iKS5jb2xvcixiPXNbMV07cmV0dXJue3R5cGU6ImVuY2xvc2UiLG1vZGU6ZC5tb2RlLGxhYmVsOnAsYmFja2dyb3VuZENvbG9yOnYsYm9keTpifX0saHRtbEJ1aWxkZXI6RWJlLG1hdGhtbEJ1aWxkZXI6VGJlfSksSmkoe3R5cGU6ImVuY2xvc2UiLG5hbWVzOlsiXFxmY29sb3Jib3giXSxwcm9wczp7bnVtQXJnczozLGFsbG93ZWRJblRleHQ6ITAsYXJnVHlwZXM6WyJjb2xvciIsImNvbG9yIiwidGV4dCJdfSxoYW5kbGVyKGkscyx1KXt2YXJ7cGFyc2VyOmQsZnVuY05hbWU6cH09aSx2PVlvKHNbMF0sImNvbG9yLXRva2VuIikuY29sb3IsYj1ZbyhzWzFdLCJjb2xvci10b2tlbiIpLmNvbG9yLHk9c1syXTtyZXR1cm57dHlwZToiZW5jbG9zZSIsbW9kZTpkLm1vZGUsbGFiZWw6cCxiYWNrZ3JvdW5kQ29sb3I6Yixib3JkZXJDb2xvcjp2LGJvZHk6eX19LGh0bWxCdWlsZGVyOkViZSxtYXRobWxCdWlsZGVyOlRiZX0pLEppKHt0eXBlOiJlbmNsb3NlIixuYW1lczpbIlxcZmJveCJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJoYm94Il0sYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcihpLHMpe3ZhcntwYXJzZXI6dX09aTtyZXR1cm57dHlwZToiZW5jbG9zZSIsbW9kZTp1Lm1vZGUsbGFiZWw6IlxcZmJveCIsYm9keTpzWzBdfX19KSxKaSh7dHlwZToiZW5jbG9zZSIsbmFtZXM6WyJcXGNhbmNlbCIsIlxcYmNhbmNlbCIsIlxceGNhbmNlbCIsIlxcc291dCIsIlxccGhhc2UiXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyKGkscyl7dmFye3BhcnNlcjp1LGZ1bmNOYW1lOmR9PWkscD1zWzBdO3JldHVybnt0eXBlOiJlbmNsb3NlIixtb2RlOnUubW9kZSxsYWJlbDpkLGJvZHk6cH19LGh0bWxCdWlsZGVyOkViZSxtYXRobWxCdWlsZGVyOlRiZX0pLEppKHt0eXBlOiJlbmNsb3NlIixuYW1lczpbIlxcYW5nbCJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJoYm94Il0sYWxsb3dlZEluVGV4dDohMX0saGFuZGxlcihpLHMpe3ZhcntwYXJzZXI6dX09aTtyZXR1cm57dHlwZToiZW5jbG9zZSIsbW9kZTp1Lm1vZGUsbGFiZWw6IlxcYW5nbCIsYm9keTpzWzBdfX19KTt2YXIganplPXt9O2Z1bmN0aW9uIFc0KGkpe2Zvcih2YXJ7dHlwZTpzLG5hbWVzOnUscHJvcHM6ZCxoYW5kbGVyOnAsaHRtbEJ1aWxkZXI6dixtYXRobWxCdWlsZGVyOmJ9PWkseT17dHlwZTpzLG51bUFyZ3M6ZC5udW1BcmdzfHwwLGFsbG93ZWRJblRleHQ6ITEsbnVtT3B0aW9uYWxBcmdzOjAsaGFuZGxlcjpwfSxUPTA7VDx1Lmxlbmd0aDsrK1QpanplW3VbVF1dPXk7diYmKGdRW3NdPXYpLGImJihwUVtzXT1iKX12YXIgJHplPXt9O2Z1bmN0aW9uIGV0KGkscyl7JHplW2ldPXN9ZnVuY3Rpb24genplKGkpe3ZhciBzPVtdO2kuY29uc3VtZVNwYWNlcygpO3ZhciB1PWkuZmV0Y2goKS50ZXh0O2Zvcih1PT09IlxccmVsYXgiJiYoaS5jb25zdW1lKCksaS5jb25zdW1lU3BhY2VzKCksdT1pLmZldGNoKCkudGV4dCk7dT09PSJcXGhsaW5lInx8dT09PSJcXGhkYXNobGluZSI7KWkuY29uc3VtZSgpLHMucHVzaCh1PT09IlxcaGRhc2hsaW5lIiksaS5jb25zdW1lU3BhY2VzKCksdT1pLmZldGNoKCkudGV4dDtyZXR1cm4gc312YXIgRVE9aT0+e3ZhciBzPWkucGFyc2VyLnNldHRpbmdzO2lmKCFzLmRpc3BsYXlNb2RlKXRocm93IG5ldyBDaSgieyIraS5lbnZOYW1lKyJ9IGNhbiBiZSB1c2VkIG9ubHkgaW4gZGlzcGxheSBtb2RlLiIpfTtmdW5jdGlvbiBDYmUoaSl7aWYoaS5pbmRleE9mKCJlZCIpPT09LTEpcmV0dXJuIGkuaW5kZXhPZigiKiIpPT09LTF9ZnVuY3Rpb24gQTkoaSxzLHUpe3Zhcntoc2tpcEJlZm9yZUFuZEFmdGVyOmQsYWRkSm90OnAsY29sczp2LGFycmF5c3RyZXRjaDpiLGNvbFNlcGFyYXRpb25UeXBlOnksYXV0b1RhZzpULHNpbmdsZVJvdzpfLGVtcHR5U2luZ2xlUm93OkEsbWF4TnVtQ29sczpQLGxlcW5vOlJ9PXM7aWYoaS5ndWxsZXQuYmVnaW5Hcm91cCgpLF98fGkuZ3VsbGV0Lm1hY3Jvcy5zZXQoIlxcY3IiLCJcXFxcXFxyZWxheCIpLCFiKXt2YXIgRj1pLmd1bGxldC5leHBhbmRNYWNyb0FzVGV4dCgiXFxhcnJheXN0cmV0Y2giKTtpZihGPT1udWxsKWI9MTtlbHNlIGlmKGI9cGFyc2VGbG9hdChGKSwhYnx8YjwwKXRocm93IG5ldyBDaSgiSW52YWxpZCBcXGFycmF5c3RyZXRjaDogIitGKX1pLmd1bGxldC5iZWdpbkdyb3VwKCk7dmFyIGo9W10sSz1bal0sZWU9W10saWU9W10sb2U9VCE9bnVsbD9bXTp2b2lkIDA7ZnVuY3Rpb24gcGUoKXtUJiZpLmd1bGxldC5tYWNyb3Muc2V0KCJcXEBlcW5zdyIsIjEiLCEwKX1mdW5jdGlvbiBiZSgpe29lJiYoaS5ndWxsZXQubWFjcm9zLmdldCgiXFxkZkB0YWciKT8ob2UucHVzaChpLnN1YnBhcnNlKFtuZXcgVTQoIlxcZGZAdGFnIildKSksaS5ndWxsZXQubWFjcm9zLnNldCgiXFxkZkB0YWciLHZvaWQgMCwhMCkpOm9lLnB1c2goISFUJiZpLmd1bGxldC5tYWNyb3MuZ2V0KCJcXEBlcW5zdyIpPT09IjEiKSl9Zm9yKHBlKCksaWUucHVzaCh6emUoaSkpOzspe3ZhciBhZT1pLnBhcnNlRXhwcmVzc2lvbighMSxfPyJcXGVuZCI6IlxcXFwiKTtpLmd1bGxldC5lbmRHcm91cCgpLGkuZ3VsbGV0LmJlZ2luR3JvdXAoKSxhZT17dHlwZToib3JkZ3JvdXAiLG1vZGU6aS5tb2RlLGJvZHk6YWV9LHUmJihhZT17dHlwZToic3R5bGluZyIsbW9kZTppLm1vZGUsc3R5bGU6dSxib2R5OlthZV19KSxqLnB1c2goYWUpO3ZhciBuZT1pLmZldGNoKCkudGV4dDtpZihuZT09PSImIil7aWYoUCYmai5sZW5ndGg9PT1QKXtpZihffHx5KXRocm93IG5ldyBDaSgiVG9vIG1hbnkgdGFiIGNoYXJhY3RlcnM6ICYiLGkubmV4dFRva2VuKTtpLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgidGV4dEVudiIsIlRvbyBmZXcgY29sdW1ucyBzcGVjaWZpZWQgaW4gdGhlIHthcnJheX0gY29sdW1uIGFyZ3VtZW50LiIpfWkuY29uc3VtZSgpfWVsc2UgaWYobmU9PT0iXFxlbmQiKXtiZSgpLGoubGVuZ3RoPT09MSYmYWUudHlwZT09PSJzdHlsaW5nIiYmYWUuYm9keVswXS5ib2R5Lmxlbmd0aD09PTAmJihLLmxlbmd0aD4xfHwhQSkmJksucG9wKCksaWUubGVuZ3RoPEsubGVuZ3RoKzEmJmllLnB1c2goW10pO2JyZWFrfWVsc2UgaWYobmU9PT0iXFxcXCIpe2kuY29uc3VtZSgpO3ZhciBzZT12b2lkIDA7aS5ndWxsZXQuZnV0dXJlKCkudGV4dCE9PSIgIiYmKHNlPWkucGFyc2VTaXplR3JvdXAoITApKSxlZS5wdXNoKHNlP3NlLnZhbHVlOm51bGwpLGJlKCksaWUucHVzaCh6emUoaSkpLGo9W10sSy5wdXNoKGopLHBlKCl9ZWxzZSB0aHJvdyBuZXcgQ2koIkV4cGVjdGVkICYgb3IgXFxcXCBvciBcXGNyIG9yIFxcZW5kIixpLm5leHRUb2tlbil9cmV0dXJuIGkuZ3VsbGV0LmVuZEdyb3VwKCksaS5ndWxsZXQuZW5kR3JvdXAoKSx7dHlwZToiYXJyYXkiLG1vZGU6aS5tb2RlLGFkZEpvdDpwLGFycmF5c3RyZXRjaDpiLGJvZHk6Syxjb2xzOnYscm93R2FwczplZSxoc2tpcEJlZm9yZUFuZEFmdGVyOmQsaExpbmVzQmVmb3JlUm93OmllLGNvbFNlcGFyYXRpb25UeXBlOnksdGFnczpvZSxsZXFubzpSfX1mdW5jdGlvbiBTYmUoaSl7cmV0dXJuIGkuc2xpY2UoMCwxKT09PSJkIj8iZGlzcGxheSI6InRleHQifXZhciBZND1mdW5jdGlvbihzLHUpe3ZhciBkLHAsdj1zLmJvZHkubGVuZ3RoLGI9cy5oTGluZXNCZWZvcmVSb3cseT0wLFQ9bmV3IEFycmF5KHYpLF89W10sQT1NYXRoLm1heCh1LmZvbnRNZXRyaWNzKCkuYXJyYXlSdWxlV2lkdGgsdS5taW5SdWxlVGhpY2tuZXNzKSxQPTEvdS5mb250TWV0cmljcygpLnB0UGVyRW0sUj01KlA7aWYocy5jb2xTZXBhcmF0aW9uVHlwZSYmcy5jb2xTZXBhcmF0aW9uVHlwZT09PSJzbWFsbCIpe3ZhciBGPXUuaGF2aW5nU3R5bGUoVGEuU0NSSVBUKS5zaXplTXVsdGlwbGllcjtSPS4yNzc4KihGL3Uuc2l6ZU11bHRpcGxpZXIpfXZhciBqPXMuY29sU2VwYXJhdGlvblR5cGU9PT0iQ0QiP1VoKHtudW1iZXI6Myx1bml0OiJleCJ9LHUpOjEyKlAsSz0zKlAsZWU9cy5hcnJheXN0cmV0Y2gqaixpZT0uNyplZSxvZT0uMyplZSxwZT0wO2Z1bmN0aW9uIGJlKGppKXtmb3IodmFyIHhpPTA7eGk8amkubGVuZ3RoOysreGkpeGk+MCYmKHBlKz0uMjUpLF8ucHVzaCh7cG9zOnBlLGlzRGFzaGVkOmppW3hpXX0pfWZvcihiZShiWzBdKSxkPTA7ZDxzLmJvZHkubGVuZ3RoOysrZCl7dmFyIGFlPXMuYm9keVtkXSxuZT1pZSxzZT1vZTt5PGFlLmxlbmd0aCYmKHk9YWUubGVuZ3RoKTt2YXIgZGU9bmV3IEFycmF5KGFlLmxlbmd0aCk7Zm9yKHA9MDtwPGFlLmxlbmd0aDsrK3Ape3ZhciBYPXV1KGFlW3BdLHUpO3NlPFguZGVwdGgmJihzZT1YLmRlcHRoKSxuZTxYLmhlaWdodCYmKG5lPVguaGVpZ2h0KSxkZVtwXT1YfXZhciBnZT1zLnJvd0dhcHNbZF0sVz0wO2dlJiYoVz1VaChnZSx1KSxXPjAmJihXKz1vZSxzZTxXJiYoc2U9VyksVz0wKSkscy5hZGRKb3QmJihzZSs9SyksZGUuaGVpZ2h0PW5lLGRlLmRlcHRoPXNlLHBlKz1uZSxkZS5wb3M9cGUscGUrPXNlK1csVFtkXT1kZSxiZShiW2QrMV0pfXZhciB4ZT1wZS8yK3UuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0LFU9cy5jb2xzfHxbXSxGZT1bXSxQZSxqZSxJZT1bXTtpZihzLnRhZ3MmJnMudGFncy5zb21lKGppPT5qaSkpZm9yKGQ9MDtkPHY7KytkKXt2YXIgU2U9VFtkXSxDZT1TZS5wb3MteGUsa2U9cy50YWdzW2RdLEtlPXZvaWQgMDtrZT09PSEwP0tlPXpuLm1ha2VTcGFuKFsiZXFuLW51bSJdLFtdLHUpOmtlPT09ITE/S2U9em4ubWFrZVNwYW4oW10sW10sdSk6S2U9em4ubWFrZVNwYW4oW10sZDEoa2UsdSwhMCksdSksS2UuZGVwdGg9U2UuZGVwdGgsS2UuaGVpZ2h0PVNlLmhlaWdodCxJZS5wdXNoKHt0eXBlOiJlbGVtIixlbGVtOktlLHNoaWZ0OkNlfSl9Zm9yKHA9MCxqZT0wO3A8eXx8amU8VS5sZW5ndGg7KytwLCsramUpe2Zvcih2YXIgRnQ9VVtqZV18fHt9LE5lPSEwO0Z0LnR5cGU9PT0ic2VwYXJhdG9yIjspe2lmKE5lfHwoUGU9em4ubWFrZVNwYW4oWyJhcnJheWNvbHNlcCJdLFtdKSxQZS5zdHlsZS53aWR0aD1SaSh1LmZvbnRNZXRyaWNzKCkuZG91YmxlUnVsZVNlcCksRmUucHVzaChQZSkpLEZ0LnNlcGFyYXRvcj09PSJ8Inx8RnQuc2VwYXJhdG9yPT09IjoiKXt2YXIgZ249RnQuc2VwYXJhdG9yPT09InwiPyJzb2xpZCI6ImRhc2hlZCIsX3Q9em4ubWFrZVNwYW4oWyJ2ZXJ0aWNhbC1zZXBhcmF0b3IiXSxbXSx1KTtfdC5zdHlsZS5oZWlnaHQ9UmkocGUpLF90LnN0eWxlLmJvcmRlclJpZ2h0V2lkdGg9UmkoQSksX3Quc3R5bGUuYm9yZGVyUmlnaHRTdHlsZT1nbixfdC5zdHlsZS5tYXJnaW49IjAgIitSaSgtQS8yKTt2YXIgRXQ9cGUteGU7RXQmJihfdC5zdHlsZS52ZXJ0aWNhbEFsaWduPVJpKC1FdCkpLEZlLnB1c2goX3QpfWVsc2UgdGhyb3cgbmV3IENpKCJJbnZhbGlkIHNlcGFyYXRvciB0eXBlOiAiK0Z0LnNlcGFyYXRvcik7amUrKyxGdD1VW2plXXx8e30sTmU9ITF9aWYoIShwPj15KSl7dmFyIEd0PXZvaWQgMDsocD4wfHxzLmhza2lwQmVmb3JlQW5kQWZ0ZXIpJiYoR3Q9WWEuZGVmbHQoRnQucHJlZ2FwLFIpLEd0IT09MCYmKFBlPXpuLm1ha2VTcGFuKFsiYXJyYXljb2xzZXAiXSxbXSksUGUuc3R5bGUud2lkdGg9UmkoR3QpLEZlLnB1c2goUGUpKSk7dmFyIGxuPVtdO2ZvcihkPTA7ZDx2OysrZCl7dmFyIHh0PVRbZF0sUHQ9eHRbcF07aWYoUHQpe3ZhciBRZT14dC5wb3MteGU7UHQuZGVwdGg9eHQuZGVwdGgsUHQuaGVpZ2h0PXh0LmhlaWdodCxsbi5wdXNoKHt0eXBlOiJlbGVtIixlbGVtOlB0LHNoaWZ0OlFlfSl9fWxuPXpuLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOmxufSx1KSxsbj16bi5tYWtlU3BhbihbImNvbC1hbGlnbi0iKyhGdC5hbGlnbnx8ImMiKV0sW2xuXSksRmUucHVzaChsbiksKHA8eS0xfHxzLmhza2lwQmVmb3JlQW5kQWZ0ZXIpJiYoR3Q9WWEuZGVmbHQoRnQucG9zdGdhcCxSKSxHdCE9PTAmJihQZT16bi5tYWtlU3BhbihbImFycmF5Y29sc2VwIl0sW10pLFBlLnN0eWxlLndpZHRoPVJpKEd0KSxGZS5wdXNoKFBlKSkpfX1pZihUPXpuLm1ha2VTcGFuKFsibXRhYmxlIl0sRmUpLF8ubGVuZ3RoPjApe2Zvcih2YXIgRHQ9em4ubWFrZUxpbmVTcGFuKCJobGluZSIsdSxBKSxrdD16bi5tYWtlTGluZVNwYW4oImhkYXNobGluZSIsdSxBKSxPbj1be3R5cGU6ImVsZW0iLGVsZW06VCxzaGlmdDowfV07Xy5sZW5ndGg+MDspe3ZhciBodD1fLnBvcCgpLHpyPWh0LnBvcy14ZTtodC5pc0Rhc2hlZD9Pbi5wdXNoKHt0eXBlOiJlbGVtIixlbGVtOmt0LHNoaWZ0OnpyfSk6T24ucHVzaCh7dHlwZToiZWxlbSIsZWxlbTpEdCxzaGlmdDp6cn0pfVQ9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46T259LHUpfWlmKEllLmxlbmd0aD09PTApcmV0dXJuIHpuLm1ha2VTcGFuKFsibW9yZCJdLFtUXSx1KTt2YXIgeXQ9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46SWV9LHUpO3JldHVybiB5dD16bi5tYWtlU3BhbihbInRhZyJdLFt5dF0sdSksem4ubWFrZUZyYWdtZW50KFtULHl0XSl9LHVWdD17YzoiY2VudGVyICIsbDoibGVmdCAiLHI6InJpZ2h0ICJ9LFg0PWZ1bmN0aW9uKHMsdSl7Zm9yKHZhciBkPVtdLHA9bmV3IHZpLk1hdGhOb2RlKCJtdGQiLFtdLFsibXRyLWdsdWUiXSksdj1uZXcgdmkuTWF0aE5vZGUoIm10ZCIsW10sWyJtbWwtZXFuLW51bSJdKSxiPTA7YjxzLmJvZHkubGVuZ3RoO2IrKyl7Zm9yKHZhciB5PXMuYm9keVtiXSxUPVtdLF89MDtfPHkubGVuZ3RoO18rKylULnB1c2gobmV3IHZpLk1hdGhOb2RlKCJtdGQiLFtMbCh5W19dLHUpXSkpO3MudGFncyYmcy50YWdzW2JdJiYoVC51bnNoaWZ0KHApLFQucHVzaChwKSxzLmxlcW5vP1QudW5zaGlmdCh2KTpULnB1c2godikpLGQucHVzaChuZXcgdmkuTWF0aE5vZGUoIm10ciIsVCkpfXZhciBBPW5ldyB2aS5NYXRoTm9kZSgibXRhYmxlIixkKSxQPXMuYXJyYXlzdHJldGNoPT09LjU/LjE6LjE2K3MuYXJyYXlzdHJldGNoLTErKHMuYWRkSm90Py4wOTowKTtBLnNldEF0dHJpYnV0ZSgicm93c3BhY2luZyIsUmkoUCkpO3ZhciBSPSIiLEY9IiI7aWYocy5jb2xzJiZzLmNvbHMubGVuZ3RoPjApe3ZhciBqPXMuY29scyxLPSIiLGVlPSExLGllPTAsb2U9ai5sZW5ndGg7alswXS50eXBlPT09InNlcGFyYXRvciImJihSKz0idG9wICIsaWU9MSksaltqLmxlbmd0aC0xXS50eXBlPT09InNlcGFyYXRvciImJihSKz0iYm90dG9tICIsb2UtPTEpO2Zvcih2YXIgcGU9aWU7cGU8b2U7cGUrKylqW3BlXS50eXBlPT09ImFsaWduIj8oRis9dVZ0W2pbcGVdLmFsaWduXSxlZSYmKEsrPSJub25lICIpLGVlPSEwKTpqW3BlXS50eXBlPT09InNlcGFyYXRvciImJmVlJiYoSys9altwZV0uc2VwYXJhdG9yPT09InwiPyJzb2xpZCAiOiJkYXNoZWQgIixlZT0hMSk7QS5zZXRBdHRyaWJ1dGUoImNvbHVtbmFsaWduIixGLnRyaW0oKSksL1tzZF0vLnRlc3QoSykmJkEuc2V0QXR0cmlidXRlKCJjb2x1bW5saW5lcyIsSy50cmltKCkpfWlmKHMuY29sU2VwYXJhdGlvblR5cGU9PT0iYWxpZ24iKXtmb3IodmFyIGJlPXMuY29sc3x8W10sYWU9IiIsbmU9MTtuZTxiZS5sZW5ndGg7bmUrKylhZSs9bmUlMj8iMGVtICI6IjFlbSAiO0Euc2V0QXR0cmlidXRlKCJjb2x1bW5zcGFjaW5nIixhZS50cmltKCkpfWVsc2Ugcy5jb2xTZXBhcmF0aW9uVHlwZT09PSJhbGlnbmF0Inx8cy5jb2xTZXBhcmF0aW9uVHlwZT09PSJnYXRoZXIiP0Euc2V0QXR0cmlidXRlKCJjb2x1bW5zcGFjaW5nIiwiMGVtIik6cy5jb2xTZXBhcmF0aW9uVHlwZT09PSJzbWFsbCI/QS5zZXRBdHRyaWJ1dGUoImNvbHVtbnNwYWNpbmciLCIwLjI3NzhlbSIpOnMuY29sU2VwYXJhdGlvblR5cGU9PT0iQ0QiP0Euc2V0QXR0cmlidXRlKCJjb2x1bW5zcGFjaW5nIiwiMC41ZW0iKTpBLnNldEF0dHJpYnV0ZSgiY29sdW1uc3BhY2luZyIsIjFlbSIpO3ZhciBzZT0iIixkZT1zLmhMaW5lc0JlZm9yZVJvdztSKz1kZVswXS5sZW5ndGg+MD8ibGVmdCAiOiIiLFIrPWRlW2RlLmxlbmd0aC0xXS5sZW5ndGg+MD8icmlnaHQgIjoiIjtmb3IodmFyIFg9MTtYPGRlLmxlbmd0aC0xO1grKylzZSs9ZGVbWF0ubGVuZ3RoPT09MD8ibm9uZSAiOmRlW1hdWzBdPyJkYXNoZWQgIjoic29saWQgIjtyZXR1cm4vW3NkXS8udGVzdChzZSkmJkEuc2V0QXR0cmlidXRlKCJyb3dsaW5lcyIsc2UudHJpbSgpKSxSIT09IiImJihBPW5ldyB2aS5NYXRoTm9kZSgibWVuY2xvc2UiLFtBXSksQS5zZXRBdHRyaWJ1dGUoIm5vdGF0aW9uIixSLnRyaW0oKSkpLHMuYXJyYXlzdHJldGNoJiZzLmFycmF5c3RyZXRjaDwxJiYoQT1uZXcgdmkuTWF0aE5vZGUoIm1zdHlsZSIsW0FdKSxBLnNldEF0dHJpYnV0ZSgic2NyaXB0bGV2ZWwiLCIxIikpLEF9LHF6ZT1mdW5jdGlvbihzLHUpe3MuZW52TmFtZS5pbmRleE9mKCJlZCIpPT09LTEmJkVRKHMpO3ZhciBkPVtdLHA9cy5lbnZOYW1lLmluZGV4T2YoImF0Iik+LTE/ImFsaWduYXQiOiJhbGlnbiIsdj1zLmVudk5hbWU9PT0ic3BsaXQiLGI9QTkocy5wYXJzZXIse2NvbHM6ZCxhZGRKb3Q6ITAsYXV0b1RhZzp2P3ZvaWQgMDpDYmUocy5lbnZOYW1lKSxlbXB0eVNpbmdsZVJvdzohMCxjb2xTZXBhcmF0aW9uVHlwZTpwLG1heE51bUNvbHM6dj8yOnZvaWQgMCxsZXFubzpzLnBhcnNlci5zZXR0aW5ncy5sZXFub30sImRpc3BsYXkiKSx5LFQ9MCxfPXt0eXBlOiJvcmRncm91cCIsbW9kZTpzLm1vZGUsYm9keTpbXX07aWYodVswXSYmdVswXS50eXBlPT09Im9yZGdyb3VwIil7Zm9yKHZhciBBPSIiLFA9MDtQPHVbMF0uYm9keS5sZW5ndGg7UCsrKXt2YXIgUj1Zbyh1WzBdLmJvZHlbUF0sInRleHRvcmQiKTtBKz1SLnRleHR9eT1OdW1iZXIoQSksVD15KjJ9dmFyIEY9IVQ7Yi5ib2R5LmZvckVhY2goZnVuY3Rpb24oaWUpe2Zvcih2YXIgb2U9MTtvZTxpZS5sZW5ndGg7b2UrPTIpe3ZhciBwZT1ZbyhpZVtvZV0sInN0eWxpbmciKSxiZT1ZbyhwZS5ib2R5WzBdLCJvcmRncm91cCIpO2JlLmJvZHkudW5zaGlmdChfKX1pZihGKVQ8aWUubGVuZ3RoJiYoVD1pZS5sZW5ndGgpO2Vsc2V7dmFyIGFlPWllLmxlbmd0aC8yO2lmKHk8YWUpdGhyb3cgbmV3IENpKCJUb28gbWFueSBtYXRoIGluIGEgcm93OiAiKygiZXhwZWN0ZWQgIit5KyIsIGJ1dCBnb3QgIithZSksaWVbMF0pfX0pO2Zvcih2YXIgaj0wO2o8VDsrK2ope3ZhciBLPSJyIixlZT0wO2olMj09PTE/Sz0ibCI6aj4wJiZGJiYoZWU9MSksZFtqXT17dHlwZToiYWxpZ24iLGFsaWduOksscHJlZ2FwOmVlLHBvc3RnYXA6MH19cmV0dXJuIGIuY29sU2VwYXJhdGlvblR5cGU9Rj8iYWxpZ24iOiJhbGlnbmF0IixifTtXNCh7dHlwZToiYXJyYXkiLG5hbWVzOlsiYXJyYXkiLCJkYXJyYXkiXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyKGkscyl7dmFyIHU9dlEoc1swXSksZD11P1tzWzBdXTpZbyhzWzBdLCJvcmRncm91cCIpLmJvZHkscD1kLm1hcChmdW5jdGlvbihiKXt2YXIgeT1kYmUoYiksVD15LnRleHQ7aWYoImxjciIuaW5kZXhPZihUKSE9PS0xKXJldHVybnt0eXBlOiJhbGlnbiIsYWxpZ246VH07aWYoVD09PSJ8IilyZXR1cm57dHlwZToic2VwYXJhdG9yIixzZXBhcmF0b3I6InwifTtpZihUPT09IjoiKXJldHVybnt0eXBlOiJzZXBhcmF0b3IiLHNlcGFyYXRvcjoiOiJ9O3Rocm93IG5ldyBDaSgiVW5rbm93biBjb2x1bW4gYWxpZ25tZW50OiAiK1QsYil9KSx2PXtjb2xzOnAsaHNraXBCZWZvcmVBbmRBZnRlcjohMCxtYXhOdW1Db2xzOnAubGVuZ3RofTtyZXR1cm4gQTkoaS5wYXJzZXIsdixTYmUoaS5lbnZOYW1lKSl9LGh0bWxCdWlsZGVyOlk0LG1hdGhtbEJ1aWxkZXI6WDR9KSxXNCh7dHlwZToiYXJyYXkiLG5hbWVzOlsibWF0cml4IiwicG1hdHJpeCIsImJtYXRyaXgiLCJCbWF0cml4Iiwidm1hdHJpeCIsIlZtYXRyaXgiLCJtYXRyaXgqIiwicG1hdHJpeCoiLCJibWF0cml4KiIsIkJtYXRyaXgqIiwidm1hdHJpeCoiLCJWbWF0cml4KiJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXIoaSl7dmFyIHM9e21hdHJpeDpudWxsLHBtYXRyaXg6WyIoIiwiKSJdLGJtYXRyaXg6WyJbIiwiXSJdLEJtYXRyaXg6WyJcXHsiLCJcXH0iXSx2bWF0cml4OlsifCIsInwiXSxWbWF0cml4OlsiXFxWZXJ0IiwiXFxWZXJ0Il19W2kuZW52TmFtZS5yZXBsYWNlKCIqIiwiIildLHU9ImMiLGQ9e2hza2lwQmVmb3JlQW5kQWZ0ZXI6ITEsY29sczpbe3R5cGU6ImFsaWduIixhbGlnbjp1fV19O2lmKGkuZW52TmFtZS5jaGFyQXQoaS5lbnZOYW1lLmxlbmd0aC0xKT09PSIqIil7dmFyIHA9aS5wYXJzZXI7aWYocC5jb25zdW1lU3BhY2VzKCkscC5mZXRjaCgpLnRleHQ9PT0iWyIpe2lmKHAuY29uc3VtZSgpLHAuY29uc3VtZVNwYWNlcygpLHU9cC5mZXRjaCgpLnRleHQsImxjciIuaW5kZXhPZih1KT09PS0xKXRocm93IG5ldyBDaSgiRXhwZWN0ZWQgbCBvciBjIG9yIHIiLHAubmV4dFRva2VuKTtwLmNvbnN1bWUoKSxwLmNvbnN1bWVTcGFjZXMoKSxwLmV4cGVjdCgiXSIpLHAuY29uc3VtZSgpLGQuY29scz1be3R5cGU6ImFsaWduIixhbGlnbjp1fV19fXZhciB2PUE5KGkucGFyc2VyLGQsU2JlKGkuZW52TmFtZSkpLGI9TWF0aC5tYXgoMCwuLi52LmJvZHkubWFwKHk9PnkubGVuZ3RoKSk7cmV0dXJuIHYuY29scz1uZXcgQXJyYXkoYikuZmlsbCh7dHlwZToiYWxpZ24iLGFsaWduOnV9KSxzP3t0eXBlOiJsZWZ0cmlnaHQiLG1vZGU6aS5tb2RlLGJvZHk6W3ZdLGxlZnQ6c1swXSxyaWdodDpzWzFdLHJpZ2h0Q29sb3I6dm9pZCAwfTp2fSxodG1sQnVpbGRlcjpZNCxtYXRobWxCdWlsZGVyOlg0fSksVzQoe3R5cGU6ImFycmF5IixuYW1lczpbInNtYWxsbWF0cml4Il0scHJvcHM6e251bUFyZ3M6MH0saGFuZGxlcihpKXt2YXIgcz17YXJyYXlzdHJldGNoOi41fSx1PUE5KGkucGFyc2VyLHMsInNjcmlwdCIpO3JldHVybiB1LmNvbFNlcGFyYXRpb25UeXBlPSJzbWFsbCIsdX0saHRtbEJ1aWxkZXI6WTQsbWF0aG1sQnVpbGRlcjpYNH0pLFc0KHt0eXBlOiJhcnJheSIsbmFtZXM6WyJzdWJhcnJheSJdLHByb3BzOntudW1BcmdzOjF9LGhhbmRsZXIoaSxzKXt2YXIgdT12UShzWzBdKSxkPXU/W3NbMF1dOllvKHNbMF0sIm9yZGdyb3VwIikuYm9keSxwPWQubWFwKGZ1bmN0aW9uKGIpe3ZhciB5PWRiZShiKSxUPXkudGV4dDtpZigibGMiLmluZGV4T2YoVCkhPT0tMSlyZXR1cm57dHlwZToiYWxpZ24iLGFsaWduOlR9O3Rocm93IG5ldyBDaSgiVW5rbm93biBjb2x1bW4gYWxpZ25tZW50OiAiK1QsYil9KTtpZihwLmxlbmd0aD4xKXRocm93IG5ldyBDaSgie3N1YmFycmF5fSBjYW4gY29udGFpbiBvbmx5IG9uZSBjb2x1bW4iKTt2YXIgdj17Y29sczpwLGhza2lwQmVmb3JlQW5kQWZ0ZXI6ITEsYXJyYXlzdHJldGNoOi41fTtpZih2PUE5KGkucGFyc2VyLHYsInNjcmlwdCIpLHYuYm9keS5sZW5ndGg+MCYmdi5ib2R5WzBdLmxlbmd0aD4xKXRocm93IG5ldyBDaSgie3N1YmFycmF5fSBjYW4gY29udGFpbiBvbmx5IG9uZSBjb2x1bW4iKTtyZXR1cm4gdn0saHRtbEJ1aWxkZXI6WTQsbWF0aG1sQnVpbGRlcjpYNH0pLFc0KHt0eXBlOiJhcnJheSIsbmFtZXM6WyJjYXNlcyIsImRjYXNlcyIsInJjYXNlcyIsImRyY2FzZXMiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKGkpe3ZhciBzPXthcnJheXN0cmV0Y2g6MS4yLGNvbHM6W3t0eXBlOiJhbGlnbiIsYWxpZ246ImwiLHByZWdhcDowLHBvc3RnYXA6MX0se3R5cGU6ImFsaWduIixhbGlnbjoibCIscHJlZ2FwOjAscG9zdGdhcDowfV19LHU9QTkoaS5wYXJzZXIscyxTYmUoaS5lbnZOYW1lKSk7cmV0dXJue3R5cGU6ImxlZnRyaWdodCIsbW9kZTppLm1vZGUsYm9keTpbdV0sbGVmdDppLmVudk5hbWUuaW5kZXhPZigiciIpPi0xPyIuIjoiXFx7IixyaWdodDppLmVudk5hbWUuaW5kZXhPZigiciIpPi0xPyJcXH0iOiIuIixyaWdodENvbG9yOnZvaWQgMH19LGh0bWxCdWlsZGVyOlk0LG1hdGhtbEJ1aWxkZXI6WDR9KSxXNCh7dHlwZToiYXJyYXkiLG5hbWVzOlsiYWxpZ24iLCJhbGlnbioiLCJhbGlnbmVkIiwic3BsaXQiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyOnF6ZSxodG1sQnVpbGRlcjpZNCxtYXRobWxCdWlsZGVyOlg0fSksVzQoe3R5cGU6ImFycmF5IixuYW1lczpbImdhdGhlcmVkIiwiZ2F0aGVyIiwiZ2F0aGVyKiJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXIoaSl7WWEuY29udGFpbnMoWyJnYXRoZXIiLCJnYXRoZXIqIl0saS5lbnZOYW1lKSYmRVEoaSk7dmFyIHM9e2NvbHM6W3t0eXBlOiJhbGlnbiIsYWxpZ246ImMifV0sYWRkSm90OiEwLGNvbFNlcGFyYXRpb25UeXBlOiJnYXRoZXIiLGF1dG9UYWc6Q2JlKGkuZW52TmFtZSksZW1wdHlTaW5nbGVSb3c6ITAsbGVxbm86aS5wYXJzZXIuc2V0dGluZ3MubGVxbm99O3JldHVybiBBOShpLnBhcnNlcixzLCJkaXNwbGF5Iil9LGh0bWxCdWlsZGVyOlk0LG1hdGhtbEJ1aWxkZXI6WDR9KSxXNCh7dHlwZToiYXJyYXkiLG5hbWVzOlsiYWxpZ25hdCIsImFsaWduYXQqIiwiYWxpZ25lZGF0Il0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcjpxemUsaHRtbEJ1aWxkZXI6WTQsbWF0aG1sQnVpbGRlcjpYNH0pLFc0KHt0eXBlOiJhcnJheSIsbmFtZXM6WyJlcXVhdGlvbiIsImVxdWF0aW9uKiJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXIoaSl7RVEoaSk7dmFyIHM9e2F1dG9UYWc6Q2JlKGkuZW52TmFtZSksZW1wdHlTaW5nbGVSb3c6ITAsc2luZ2xlUm93OiEwLG1heE51bUNvbHM6MSxsZXFubzppLnBhcnNlci5zZXR0aW5ncy5sZXFub307cmV0dXJuIEE5KGkucGFyc2VyLHMsImRpc3BsYXkiKX0saHRtbEJ1aWxkZXI6WTQsbWF0aG1sQnVpbGRlcjpYNH0pLFc0KHt0eXBlOiJhcnJheSIsbmFtZXM6WyJDRCJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXIoaSl7cmV0dXJuIEVRKGkpLFlIdChpLnBhcnNlcil9LGh0bWxCdWlsZGVyOlk0LG1hdGhtbEJ1aWxkZXI6WDR9KSxldCgiXFxub251bWJlciIsIlxcZ2RlZlxcQGVxbnN3ezB9IiksZXQoIlxcbm90YWciLCJcXG5vbnVtYmVyIiksSmkoe3R5cGU6InRleHQiLG5hbWVzOlsiXFxobGluZSIsIlxcaGRhc2hsaW5lIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwLGFsbG93ZWRJbk1hdGg6ITB9LGhhbmRsZXIoaSxzKXt0aHJvdyBuZXcgQ2koaS5mdW5jTmFtZSsiIHZhbGlkIG9ubHkgd2l0aGluIGFycmF5IGVudmlyb25tZW50Iil9fSk7dmFyIEh6ZT1qemU7Smkoe3R5cGU6ImVudmlyb25tZW50IixuYW1lczpbIlxcYmVnaW4iLCJcXGVuZCJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJ0ZXh0Il19LGhhbmRsZXIoaSxzKXt2YXJ7cGFyc2VyOnUsZnVuY05hbWU6ZH09aSxwPXNbMF07aWYocC50eXBlIT09Im9yZGdyb3VwIil0aHJvdyBuZXcgQ2koIkludmFsaWQgZW52aXJvbm1lbnQgbmFtZSIscCk7Zm9yKHZhciB2PSIiLGI9MDtiPHAuYm9keS5sZW5ndGg7KytiKXYrPVlvKHAuYm9keVtiXSwidGV4dG9yZCIpLnRleHQ7aWYoZD09PSJcXGJlZ2luIil7aWYoIUh6ZS5oYXNPd25Qcm9wZXJ0eSh2KSl0aHJvdyBuZXcgQ2koIk5vIHN1Y2ggZW52aXJvbm1lbnQ6ICIrdixwKTt2YXIgeT1IemVbdl0se2FyZ3M6VCxvcHRBcmdzOl99PXUucGFyc2VBcmd1bWVudHMoIlxcYmVnaW57Iit2KyJ9Iix5KSxBPXttb2RlOnUubW9kZSxlbnZOYW1lOnYscGFyc2VyOnV9LFA9eS5oYW5kbGVyKEEsVCxfKTt1LmV4cGVjdCgiXFxlbmQiLCExKTt2YXIgUj11Lm5leHRUb2tlbixGPVlvKHUucGFyc2VGdW5jdGlvbigpLCJlbnZpcm9ubWVudCIpO2lmKEYubmFtZSE9PXYpdGhyb3cgbmV3IENpKCJNaXNtYXRjaDogXFxiZWdpbnsiK3YrIn0gbWF0Y2hlZCBieSBcXGVuZHsiK0YubmFtZSsifSIsUik7cmV0dXJuIFB9cmV0dXJue3R5cGU6ImVudmlyb25tZW50Iixtb2RlOnUubW9kZSxuYW1lOnYsbmFtZUdyb3VwOnB9fX0pO3ZhciBWemU9KGkscyk9Pnt2YXIgdT1pLmZvbnQsZD1zLndpdGhGb250KHUpO3JldHVybiB1dShpLmJvZHksZCl9LFV6ZT0oaSxzKT0+e3ZhciB1PWkuZm9udCxkPXMud2l0aEZvbnQodSk7cmV0dXJuIExsKGkuYm9keSxkKX0sR3plPXsiXFxCYmIiOiJcXG1hdGhiYiIsIlxcYm9sZCI6IlxcbWF0aGJmIiwiXFxmcmFrIjoiXFxtYXRoZnJhayIsIlxcYm0iOiJcXGJvbGRzeW1ib2wifTtKaSh7dHlwZToiZm9udCIsbmFtZXM6WyJcXG1hdGhybSIsIlxcbWF0aGl0IiwiXFxtYXRoYmYiLCJcXG1hdGhub3JtYWwiLCJcXG1hdGhiYiIsIlxcbWF0aGNhbCIsIlxcbWF0aGZyYWsiLCJcXG1hdGhzY3IiLCJcXG1hdGhzZiIsIlxcbWF0aHR0IiwiXFxCYmIiLCJcXGJvbGQiLCJcXGZyYWsiXSxwcm9wczp7bnVtQXJnczoxLGFsbG93ZWRJbkFyZ3VtZW50OiEwfSxoYW5kbGVyOihpLHMpPT57dmFye3BhcnNlcjp1LGZ1bmNOYW1lOmR9PWkscD1iUShzWzBdKSx2PWQ7cmV0dXJuIHYgaW4gR3plJiYodj1HemVbdl0pLHt0eXBlOiJmb250Iixtb2RlOnUubW9kZSxmb250OnYuc2xpY2UoMSksYm9keTpwfX0saHRtbEJ1aWxkZXI6VnplLG1hdGhtbEJ1aWxkZXI6VXplfSksSmkoe3R5cGU6Im1jbGFzcyIsbmFtZXM6WyJcXGJvbGRzeW1ib2wiLCJcXGJtIl0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcjooaSxzKT0+e3ZhcntwYXJzZXI6dX09aSxkPXNbMF0scD1ZYS5pc0NoYXJhY3RlckJveChkKTtyZXR1cm57dHlwZToibWNsYXNzIixtb2RlOnUubW9kZSxtY2xhc3M6eVEoZCksYm9keTpbe3R5cGU6ImZvbnQiLG1vZGU6dS5tb2RlLGZvbnQ6ImJvbGRzeW1ib2wiLGJvZHk6ZH1dLGlzQ2hhcmFjdGVyQm94OnB9fX0pLEppKHt0eXBlOiJmb250IixuYW1lczpbIlxccm0iLCJcXHNmIiwiXFx0dCIsIlxcYmYiLCJcXGl0IiwiXFxjYWwiXSxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6KGkscyk9Pnt2YXJ7cGFyc2VyOnUsZnVuY05hbWU6ZCxicmVha09uVG9rZW5UZXh0OnB9PWkse21vZGU6dn09dSxiPXUucGFyc2VFeHByZXNzaW9uKCEwLHApLHk9Im1hdGgiK2Quc2xpY2UoMSk7cmV0dXJue3R5cGU6ImZvbnQiLG1vZGU6dixmb250OnksYm9keTp7dHlwZToib3JkZ3JvdXAiLG1vZGU6dS5tb2RlLGJvZHk6Yn19fSxodG1sQnVpbGRlcjpWemUsbWF0aG1sQnVpbGRlcjpVemV9KTt2YXIgS3plPShpLHMpPT57dmFyIHU9cztyZXR1cm4gaT09PSJkaXNwbGF5Ij91PXUuaWQ+PVRhLlNDUklQVC5pZD91LnRleHQoKTpUYS5ESVNQTEFZOmk9PT0idGV4dCImJnUuc2l6ZT09PVRhLkRJU1BMQVkuc2l6ZT91PVRhLlRFWFQ6aT09PSJzY3JpcHQiP3U9VGEuU0NSSVBUOmk9PT0ic2NyaXB0c2NyaXB0IiYmKHU9VGEuU0NSSVBUU0NSSVBUKSx1fSxfYmU9KGkscyk9Pnt2YXIgdT1LemUoaS5zaXplLHMuc3R5bGUpLGQ9dS5mcmFjTnVtKCkscD11LmZyYWNEZW4oKSx2O3Y9cy5oYXZpbmdTdHlsZShkKTt2YXIgYj11dShpLm51bWVyLHYscyk7aWYoaS5jb250aW51ZWQpe3ZhciB5PTguNS9zLmZvbnRNZXRyaWNzKCkucHRQZXJFbSxUPTMuNS9zLmZvbnRNZXRyaWNzKCkucHRQZXJFbTtiLmhlaWdodD1iLmhlaWdodDx5P3k6Yi5oZWlnaHQsYi5kZXB0aD1iLmRlcHRoPFQ/VDpiLmRlcHRofXY9cy5oYXZpbmdTdHlsZShwKTt2YXIgXz11dShpLmRlbm9tLHYscyksQSxQLFI7aS5oYXNCYXJMaW5lPyhpLmJhclNpemU/KFA9VWgoaS5iYXJTaXplLHMpLEE9em4ubWFrZUxpbmVTcGFuKCJmcmFjLWxpbmUiLHMsUCkpOkE9em4ubWFrZUxpbmVTcGFuKCJmcmFjLWxpbmUiLHMpLFA9QS5oZWlnaHQsUj1BLmhlaWdodCk6KEE9bnVsbCxQPTAsUj1zLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3MpO3ZhciBGLGosSzt1LnNpemU9PT1UYS5ESVNQTEFZLnNpemV8fGkuc2l6ZT09PSJkaXNwbGF5Ij8oRj1zLmZvbnRNZXRyaWNzKCkubnVtMSxQPjA/aj0zKlI6aj03KlIsSz1zLmZvbnRNZXRyaWNzKCkuZGVub20xKTooUD4wPyhGPXMuZm9udE1ldHJpY3MoKS5udW0yLGo9Uik6KEY9cy5mb250TWV0cmljcygpLm51bTMsaj0zKlIpLEs9cy5mb250TWV0cmljcygpLmRlbm9tMik7dmFyIGVlO2lmKEEpe3ZhciBvZT1zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodDtGLWIuZGVwdGgtKG9lKy41KlApPGomJihGKz1qLShGLWIuZGVwdGgtKG9lKy41KlApKSksb2UtLjUqUC0oXy5oZWlnaHQtSyk8aiYmKEsrPWotKG9lLS41KlAtKF8uaGVpZ2h0LUspKSk7dmFyIHBlPS0ob2UtLjUqUCk7ZWU9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOl8sc2hpZnQ6S30se3R5cGU6ImVsZW0iLGVsZW06QSxzaGlmdDpwZX0se3R5cGU6ImVsZW0iLGVsZW06YixzaGlmdDotRn1dfSxzKX1lbHNle3ZhciBpZT1GLWIuZGVwdGgtKF8uaGVpZ2h0LUspO2llPGomJihGKz0uNSooai1pZSksSys9LjUqKGotaWUpKSxlZT16bi5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiaW5kaXZpZHVhbFNoaWZ0IixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06XyxzaGlmdDpLfSx7dHlwZToiZWxlbSIsZWxlbTpiLHNoaWZ0Oi1GfV19LHMpfXY9cy5oYXZpbmdTdHlsZSh1KSxlZS5oZWlnaHQqPXYuc2l6ZU11bHRpcGxpZXIvcy5zaXplTXVsdGlwbGllcixlZS5kZXB0aCo9di5zaXplTXVsdGlwbGllci9zLnNpemVNdWx0aXBsaWVyO3ZhciBiZTt1LnNpemU9PT1UYS5ESVNQTEFZLnNpemU/YmU9cy5mb250TWV0cmljcygpLmRlbGltMTp1LnNpemU9PT1UYS5TQ1JJUFRTQ1JJUFQuc2l6ZT9iZT1zLmhhdmluZ1N0eWxlKFRhLlNDUklQVCkuZm9udE1ldHJpY3MoKS5kZWxpbTI6YmU9cy5mb250TWV0cmljcygpLmRlbGltMjt2YXIgYWUsbmU7cmV0dXJuIGkubGVmdERlbGltPT1udWxsP2FlPXVSKHMsWyJtb3BlbiJdKTphZT1CNy5jdXN0b21TaXplZERlbGltKGkubGVmdERlbGltLGJlLCEwLHMuaGF2aW5nU3R5bGUodSksaS5tb2RlLFsibW9wZW4iXSksaS5jb250aW51ZWQ/bmU9em4ubWFrZVNwYW4oW10pOmkucmlnaHREZWxpbT09bnVsbD9uZT11UihzLFsibWNsb3NlIl0pOm5lPUI3LmN1c3RvbVNpemVkRGVsaW0oaS5yaWdodERlbGltLGJlLCEwLHMuaGF2aW5nU3R5bGUodSksaS5tb2RlLFsibWNsb3NlIl0pLHpuLm1ha2VTcGFuKFsibW9yZCJdLmNvbmNhdCh2LnNpemluZ0NsYXNzZXMocykpLFthZSx6bi5tYWtlU3BhbihbIm1mcmFjIl0sW2VlXSksbmVdLHMpfSxBYmU9KGkscyk9Pnt2YXIgdT1uZXcgdmkuTWF0aE5vZGUoIm1mcmFjIixbTGwoaS5udW1lcixzKSxMbChpLmRlbm9tLHMpXSk7aWYoIWkuaGFzQmFyTGluZSl1LnNldEF0dHJpYnV0ZSgibGluZXRoaWNrbmVzcyIsIjBweCIpO2Vsc2UgaWYoaS5iYXJTaXplKXt2YXIgZD1VaChpLmJhclNpemUscyk7dS5zZXRBdHRyaWJ1dGUoImxpbmV0aGlja25lc3MiLFJpKGQpKX12YXIgcD1LemUoaS5zaXplLHMuc3R5bGUpO2lmKHAuc2l6ZSE9PXMuc3R5bGUuc2l6ZSl7dT1uZXcgdmkuTWF0aE5vZGUoIm1zdHlsZSIsW3VdKTt2YXIgdj1wLnNpemU9PT1UYS5ESVNQTEFZLnNpemU/InRydWUiOiJmYWxzZSI7dS5zZXRBdHRyaWJ1dGUoImRpc3BsYXlzdHlsZSIsdiksdS5zZXRBdHRyaWJ1dGUoInNjcmlwdGxldmVsIiwiMCIpfWlmKGkubGVmdERlbGltIT1udWxsfHxpLnJpZ2h0RGVsaW0hPW51bGwpe3ZhciBiPVtdO2lmKGkubGVmdERlbGltIT1udWxsKXt2YXIgeT1uZXcgdmkuTWF0aE5vZGUoIm1vIixbbmV3IHZpLlRleHROb2RlKGkubGVmdERlbGltLnJlcGxhY2UoIlxcIiwiIikpXSk7eS5zZXRBdHRyaWJ1dGUoImZlbmNlIiwidHJ1ZSIpLGIucHVzaCh5KX1pZihiLnB1c2godSksaS5yaWdodERlbGltIT1udWxsKXt2YXIgVD1uZXcgdmkuTWF0aE5vZGUoIm1vIixbbmV3IHZpLlRleHROb2RlKGkucmlnaHREZWxpbS5yZXBsYWNlKCJcXCIsIiIpKV0pO1Quc2V0QXR0cmlidXRlKCJmZW5jZSIsInRydWUiKSxiLnB1c2goVCl9cmV0dXJuIGhiZShiKX1yZXR1cm4gdX07Smkoe3R5cGU6ImdlbmZyYWMiLG5hbWVzOlsiXFxkZnJhYyIsIlxcZnJhYyIsIlxcdGZyYWMiLCJcXGRiaW5vbSIsIlxcYmlub20iLCJcXHRiaW5vbSIsIlxcXFxhdG9wZnJhYyIsIlxcXFxicmFjZWZyYWMiLCJcXFxcYnJhY2tmcmFjIl0scHJvcHM6e251bUFyZ3M6MixhbGxvd2VkSW5Bcmd1bWVudDohMH0saGFuZGxlcjooaSxzKT0+e3ZhcntwYXJzZXI6dSxmdW5jTmFtZTpkfT1pLHA9c1swXSx2PXNbMV0sYix5PW51bGwsVD1udWxsLF89ImF1dG8iO3N3aXRjaChkKXtjYXNlIlxcZGZyYWMiOmNhc2UiXFxmcmFjIjpjYXNlIlxcdGZyYWMiOmI9ITA7YnJlYWs7Y2FzZSJcXFxcYXRvcGZyYWMiOmI9ITE7YnJlYWs7Y2FzZSJcXGRiaW5vbSI6Y2FzZSJcXGJpbm9tIjpjYXNlIlxcdGJpbm9tIjpiPSExLHk9IigiLFQ9IikiO2JyZWFrO2Nhc2UiXFxcXGJyYWNlZnJhYyI6Yj0hMSx5PSJcXHsiLFQ9IlxcfSI7YnJlYWs7Y2FzZSJcXFxcYnJhY2tmcmFjIjpiPSExLHk9IlsiLFQ9Il0iO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgZ2VuZnJhYyBjb21tYW5kIil9c3dpdGNoKGQpe2Nhc2UiXFxkZnJhYyI6Y2FzZSJcXGRiaW5vbSI6Xz0iZGlzcGxheSI7YnJlYWs7Y2FzZSJcXHRmcmFjIjpjYXNlIlxcdGJpbm9tIjpfPSJ0ZXh0IjticmVha31yZXR1cm57dHlwZToiZ2VuZnJhYyIsbW9kZTp1Lm1vZGUsY29udGludWVkOiExLG51bWVyOnAsZGVub206dixoYXNCYXJMaW5lOmIsbGVmdERlbGltOnkscmlnaHREZWxpbTpULHNpemU6XyxiYXJTaXplOm51bGx9fSxodG1sQnVpbGRlcjpfYmUsbWF0aG1sQnVpbGRlcjpBYmV9KSxKaSh7dHlwZToiZ2VuZnJhYyIsbmFtZXM6WyJcXGNmcmFjIl0scHJvcHM6e251bUFyZ3M6Mn0saGFuZGxlcjooaSxzKT0+e3ZhcntwYXJzZXI6dSxmdW5jTmFtZTpkfT1pLHA9c1swXSx2PXNbMV07cmV0dXJue3R5cGU6ImdlbmZyYWMiLG1vZGU6dS5tb2RlLGNvbnRpbnVlZDohMCxudW1lcjpwLGRlbm9tOnYsaGFzQmFyTGluZTohMCxsZWZ0RGVsaW06bnVsbCxyaWdodERlbGltOm51bGwsc2l6ZToiZGlzcGxheSIsYmFyU2l6ZTpudWxsfX19KSxKaSh7dHlwZToiaW5maXgiLG5hbWVzOlsiXFxvdmVyIiwiXFxjaG9vc2UiLCJcXGF0b3AiLCJcXGJyYWNlIiwiXFxicmFjayJdLHByb3BzOntudW1BcmdzOjAsaW5maXg6ITB9LGhhbmRsZXIoaSl7dmFye3BhcnNlcjpzLGZ1bmNOYW1lOnUsdG9rZW46ZH09aSxwO3N3aXRjaCh1KXtjYXNlIlxcb3ZlciI6cD0iXFxmcmFjIjticmVhaztjYXNlIlxcY2hvb3NlIjpwPSJcXGJpbm9tIjticmVhaztjYXNlIlxcYXRvcCI6cD0iXFxcXGF0b3BmcmFjIjticmVhaztjYXNlIlxcYnJhY2UiOnA9IlxcXFxicmFjZWZyYWMiO2JyZWFrO2Nhc2UiXFxicmFjayI6cD0iXFxcXGJyYWNrZnJhYyI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBpbmZpeCBnZW5mcmFjIGNvbW1hbmQiKX1yZXR1cm57dHlwZToiaW5maXgiLG1vZGU6cy5tb2RlLHJlcGxhY2VXaXRoOnAsdG9rZW46ZH19fSk7dmFyIFd6ZT1bImRpc3BsYXkiLCJ0ZXh0Iiwic2NyaXB0Iiwic2NyaXB0c2NyaXB0Il0sWXplPWZ1bmN0aW9uKHMpe3ZhciB1PW51bGw7cmV0dXJuIHMubGVuZ3RoPjAmJih1PXMsdT11PT09Ii4iP251bGw6dSksdX07Smkoe3R5cGU6ImdlbmZyYWMiLG5hbWVzOlsiXFxnZW5mcmFjIl0scHJvcHM6e251bUFyZ3M6NixhbGxvd2VkSW5Bcmd1bWVudDohMCxhcmdUeXBlczpbIm1hdGgiLCJtYXRoIiwic2l6ZSIsInRleHQiLCJtYXRoIiwibWF0aCJdfSxoYW5kbGVyKGkscyl7dmFye3BhcnNlcjp1fT1pLGQ9c1s0XSxwPXNbNV0sdj1iUShzWzBdKSxiPXYudHlwZT09PSJhdG9tIiYmdi5mYW1pbHk9PT0ib3BlbiI/WXplKHYudGV4dCk6bnVsbCx5PWJRKHNbMV0pLFQ9eS50eXBlPT09ImF0b20iJiZ5LmZhbWlseT09PSJjbG9zZSI/WXplKHkudGV4dCk6bnVsbCxfPVlvKHNbMl0sInNpemUiKSxBLFA9bnVsbDtfLmlzQmxhbms/QT0hMDooUD1fLnZhbHVlLEE9UC5udW1iZXI+MCk7dmFyIFI9ImF1dG8iLEY9c1szXTtpZihGLnR5cGU9PT0ib3JkZ3JvdXAiKXtpZihGLmJvZHkubGVuZ3RoPjApe3ZhciBqPVlvKEYuYm9keVswXSwidGV4dG9yZCIpO1I9V3plW051bWJlcihqLnRleHQpXX19ZWxzZSBGPVlvKEYsInRleHRvcmQiKSxSPVd6ZVtOdW1iZXIoRi50ZXh0KV07cmV0dXJue3R5cGU6ImdlbmZyYWMiLG1vZGU6dS5tb2RlLG51bWVyOmQsZGVub206cCxjb250aW51ZWQ6ITEsaGFzQmFyTGluZTpBLGJhclNpemU6UCxsZWZ0RGVsaW06YixyaWdodERlbGltOlQsc2l6ZTpSfX0saHRtbEJ1aWxkZXI6X2JlLG1hdGhtbEJ1aWxkZXI6QWJlfSksSmkoe3R5cGU6ImluZml4IixuYW1lczpbIlxcYWJvdmUiXSxwcm9wczp7bnVtQXJnczoxLGFyZ1R5cGVzOlsic2l6ZSJdLGluZml4OiEwfSxoYW5kbGVyKGkscyl7dmFye3BhcnNlcjp1LGZ1bmNOYW1lOmQsdG9rZW46cH09aTtyZXR1cm57dHlwZToiaW5maXgiLG1vZGU6dS5tb2RlLHJlcGxhY2VXaXRoOiJcXFxcYWJvdmVmcmFjIixzaXplOllvKHNbMF0sInNpemUiKS52YWx1ZSx0b2tlbjpwfX19KSxKaSh7dHlwZToiZ2VuZnJhYyIsbmFtZXM6WyJcXFxcYWJvdmVmcmFjIl0scHJvcHM6e251bUFyZ3M6MyxhcmdUeXBlczpbIm1hdGgiLCJzaXplIiwibWF0aCJdfSxoYW5kbGVyOihpLHMpPT57dmFye3BhcnNlcjp1LGZ1bmNOYW1lOmR9PWkscD1zWzBdLHY9JHF0KFlvKHNbMV0sImluZml4Iikuc2l6ZSksYj1zWzJdLHk9di5udW1iZXI+MDtyZXR1cm57dHlwZToiZ2VuZnJhYyIsbW9kZTp1Lm1vZGUsbnVtZXI6cCxkZW5vbTpiLGNvbnRpbnVlZDohMSxoYXNCYXJMaW5lOnksYmFyU2l6ZTp2LGxlZnREZWxpbTpudWxsLHJpZ2h0RGVsaW06bnVsbCxzaXplOiJhdXRvIn19LGh0bWxCdWlsZGVyOl9iZSxtYXRobWxCdWlsZGVyOkFiZX0pO3ZhciBYemU9KGkscyk9Pnt2YXIgdT1zLnN0eWxlLGQscDtpLnR5cGU9PT0ic3Vwc3ViIj8oZD1pLnN1cD91dShpLnN1cCxzLmhhdmluZ1N0eWxlKHUuc3VwKCkpLHMpOnV1KGkuc3ViLHMuaGF2aW5nU3R5bGUodS5zdWIoKSkscykscD1ZbyhpLmJhc2UsImhvcml6QnJhY2UiKSk6cD1ZbyhpLCJob3JpekJyYWNlIik7dmFyIHY9dXUocC5iYXNlLHMuaGF2aW5nQmFzZVN0eWxlKFRhLkRJU1BMQVkpKSxiPVA3LnN2Z1NwYW4ocCxzKSx5O2lmKHAuaXNPdmVyPyh5PXpuLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJmaXJzdEJhc2VsaW5lIixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06dn0se3R5cGU6Imtlcm4iLHNpemU6LjF9LHt0eXBlOiJlbGVtIixlbGVtOmJ9XX0scykseS5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jaGlsZHJlblsxXS5jbGFzc2VzLnB1c2goInN2Zy1hbGlnbiIpKTooeT16bi5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiYm90dG9tIixwb3NpdGlvbkRhdGE6di5kZXB0aCsuMStiLmhlaWdodCxjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06Yn0se3R5cGU6Imtlcm4iLHNpemU6LjF9LHt0eXBlOiJlbGVtIixlbGVtOnZ9XX0scykseS5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jbGFzc2VzLnB1c2goInN2Zy1hbGlnbiIpKSxkKXt2YXIgVD16bi5tYWtlU3BhbihbIm1vcmQiLHAuaXNPdmVyPyJtb3ZlciI6Im11bmRlciJdLFt5XSxzKTtwLmlzT3Zlcj95PXpuLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJmaXJzdEJhc2VsaW5lIixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06VH0se3R5cGU6Imtlcm4iLHNpemU6LjJ9LHt0eXBlOiJlbGVtIixlbGVtOmR9XX0scyk6eT16bi5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiYm90dG9tIixwb3NpdGlvbkRhdGE6VC5kZXB0aCsuMitkLmhlaWdodCtkLmRlcHRoLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTpkfSx7dHlwZToia2VybiIsc2l6ZTouMn0se3R5cGU6ImVsZW0iLGVsZW06VH1dfSxzKX1yZXR1cm4gem4ubWFrZVNwYW4oWyJtb3JkIixwLmlzT3Zlcj8ibW92ZXIiOiJtdW5kZXIiXSxbeV0scyl9LGxWdD0oaSxzKT0+e3ZhciB1PVA3Lm1hdGhNTG5vZGUoaS5sYWJlbCk7cmV0dXJuIG5ldyB2aS5NYXRoTm9kZShpLmlzT3Zlcj8ibW92ZXIiOiJtdW5kZXIiLFtMbChpLmJhc2UscyksdV0pfTtKaSh7dHlwZToiaG9yaXpCcmFjZSIsbmFtZXM6WyJcXG92ZXJicmFjZSIsIlxcdW5kZXJicmFjZSJdLHByb3BzOntudW1BcmdzOjF9LGhhbmRsZXIoaSxzKXt2YXJ7cGFyc2VyOnUsZnVuY05hbWU6ZH09aTtyZXR1cm57dHlwZToiaG9yaXpCcmFjZSIsbW9kZTp1Lm1vZGUsbGFiZWw6ZCxpc092ZXI6L15cXG92ZXIvLnRlc3QoZCksYmFzZTpzWzBdfX0saHRtbEJ1aWxkZXI6WHplLG1hdGhtbEJ1aWxkZXI6bFZ0fSksSmkoe3R5cGU6ImhyZWYiLG5hbWVzOlsiXFxocmVmIl0scHJvcHM6e251bUFyZ3M6MixhcmdUeXBlczpbInVybCIsIm9yaWdpbmFsIl0sYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcjooaSxzKT0+e3ZhcntwYXJzZXI6dX09aSxkPXNbMV0scD1ZbyhzWzBdLCJ1cmwiKS51cmw7cmV0dXJuIHUuc2V0dGluZ3MuaXNUcnVzdGVkKHtjb21tYW5kOiJcXGhyZWYiLHVybDpwfSk/e3R5cGU6ImhyZWYiLG1vZGU6dS5tb2RlLGhyZWY6cCxib2R5OlhmKGQpfTp1LmZvcm1hdFVuc3VwcG9ydGVkQ21kKCJcXGhyZWYiKX0saHRtbEJ1aWxkZXI6KGkscyk9Pnt2YXIgdT1kMShpLmJvZHkscywhMSk7cmV0dXJuIHpuLm1ha2VBbmNob3IoaS5ocmVmLFtdLHUscyl9LG1hdGhtbEJ1aWxkZXI6KGkscyk9Pnt2YXIgdT1fOShpLmJvZHkscyk7cmV0dXJuIHUgaW5zdGFuY2VvZiBGdnx8KHU9bmV3IEZ2KCJtcm93IixbdV0pKSx1LnNldEF0dHJpYnV0ZSgiaHJlZiIsaS5ocmVmKSx1fX0pLEppKHt0eXBlOiJocmVmIixuYW1lczpbIlxcdXJsIl0scHJvcHM6e251bUFyZ3M6MSxhcmdUeXBlczpbInVybCJdLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6KGkscyk9Pnt2YXJ7cGFyc2VyOnV9PWksZD1ZbyhzWzBdLCJ1cmwiKS51cmw7aWYoIXUuc2V0dGluZ3MuaXNUcnVzdGVkKHtjb21tYW5kOiJcXHVybCIsdXJsOmR9KSlyZXR1cm4gdS5mb3JtYXRVbnN1cHBvcnRlZENtZCgiXFx1cmwiKTtmb3IodmFyIHA9W10sdj0wO3Y8ZC5sZW5ndGg7disrKXt2YXIgYj1kW3ZdO2I9PT0ifiImJihiPSJcXHRleHRhc2NpaXRpbGRlIikscC5wdXNoKHt0eXBlOiJ0ZXh0b3JkIixtb2RlOiJ0ZXh0Iix0ZXh0OmJ9KX12YXIgeT17dHlwZToidGV4dCIsbW9kZTp1Lm1vZGUsZm9udDoiXFx0ZXh0dHQiLGJvZHk6cH07cmV0dXJue3R5cGU6ImhyZWYiLG1vZGU6dS5tb2RlLGhyZWY6ZCxib2R5OlhmKHkpfX19KSxKaSh7dHlwZToiaGJveCIsbmFtZXM6WyJcXGhib3giXSxwcm9wczp7bnVtQXJnczoxLGFyZ1R5cGVzOlsidGV4dCJdLGFsbG93ZWRJblRleHQ6ITAscHJpbWl0aXZlOiEwfSxoYW5kbGVyKGkscyl7dmFye3BhcnNlcjp1fT1pO3JldHVybnt0eXBlOiJoYm94Iixtb2RlOnUubW9kZSxib2R5OlhmKHNbMF0pfX0saHRtbEJ1aWxkZXIoaSxzKXt2YXIgdT1kMShpLmJvZHkscywhMSk7cmV0dXJuIHpuLm1ha2VGcmFnbWVudCh1KX0sbWF0aG1sQnVpbGRlcihpLHMpe3JldHVybiBuZXcgdmkuTWF0aE5vZGUoIm1yb3ciLGoyKGkuYm9keSxzKSl9fSksSmkoe3R5cGU6Imh0bWwiLG5hbWVzOlsiXFxodG1sQ2xhc3MiLCJcXGh0bWxJZCIsIlxcaHRtbFN0eWxlIiwiXFxodG1sRGF0YSJdLHByb3BzOntudW1BcmdzOjIsYXJnVHlwZXM6WyJyYXciLCJvcmlnaW5hbCJdLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6KGkscyk9Pnt2YXJ7cGFyc2VyOnUsZnVuY05hbWU6ZCx0b2tlbjpwfT1pLHY9WW8oc1swXSwicmF3Iikuc3RyaW5nLGI9c1sxXTt1LnNldHRpbmdzLnN0cmljdCYmdS5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoImh0bWxFeHRlbnNpb24iLCJIVE1MIGV4dGVuc2lvbiBpcyBkaXNhYmxlZCBvbiBzdHJpY3QgbW9kZSIpO3ZhciB5LFQ9e307c3dpdGNoKGQpe2Nhc2UiXFxodG1sQ2xhc3MiOlQuY2xhc3M9dix5PXtjb21tYW5kOiJcXGh0bWxDbGFzcyIsY2xhc3M6dn07YnJlYWs7Y2FzZSJcXGh0bWxJZCI6VC5pZD12LHk9e2NvbW1hbmQ6IlxcaHRtbElkIixpZDp2fTticmVhaztjYXNlIlxcaHRtbFN0eWxlIjpULnN0eWxlPXYseT17Y29tbWFuZDoiXFxodG1sU3R5bGUiLHN0eWxlOnZ9O2JyZWFrO2Nhc2UiXFxodG1sRGF0YSI6e2Zvcih2YXIgXz12LnNwbGl0KCIsIiksQT0wO0E8Xy5sZW5ndGg7QSsrKXt2YXIgUD1fW0FdLnNwbGl0KCI9Iik7aWYoUC5sZW5ndGghPT0yKXRocm93IG5ldyBDaSgiRXJyb3IgcGFyc2luZyBrZXktdmFsdWUgZm9yIFxcaHRtbERhdGEiKTtUWyJkYXRhLSIrUFswXS50cmltKCldPVBbMV0udHJpbSgpfXk9e2NvbW1hbmQ6IlxcaHRtbERhdGEiLGF0dHJpYnV0ZXM6VH07YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBodG1sIGNvbW1hbmQiKX1yZXR1cm4gdS5zZXR0aW5ncy5pc1RydXN0ZWQoeSk/e3R5cGU6Imh0bWwiLG1vZGU6dS5tb2RlLGF0dHJpYnV0ZXM6VCxib2R5OlhmKGIpfTp1LmZvcm1hdFVuc3VwcG9ydGVkQ21kKGQpfSxodG1sQnVpbGRlcjooaSxzKT0+e3ZhciB1PWQxKGkuYm9keSxzLCExKSxkPVsiZW5jbG9zaW5nIl07aS5hdHRyaWJ1dGVzLmNsYXNzJiZkLnB1c2goLi4uaS5hdHRyaWJ1dGVzLmNsYXNzLnRyaW0oKS5zcGxpdCgvXHMrLykpO3ZhciBwPXpuLm1ha2VTcGFuKGQsdSxzKTtmb3IodmFyIHYgaW4gaS5hdHRyaWJ1dGVzKXYhPT0iY2xhc3MiJiZpLmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkodikmJnAuc2V0QXR0cmlidXRlKHYsaS5hdHRyaWJ1dGVzW3ZdKTtyZXR1cm4gcH0sbWF0aG1sQnVpbGRlcjooaSxzKT0+XzkoaS5ib2R5LHMpfSksSmkoe3R5cGU6Imh0bWxtYXRobWwiLG5hbWVzOlsiXFxodG1sQG1hdGhtbCJdLHByb3BzOntudW1BcmdzOjIsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcjooaSxzKT0+e3ZhcntwYXJzZXI6dX09aTtyZXR1cm57dHlwZToiaHRtbG1hdGhtbCIsbW9kZTp1Lm1vZGUsaHRtbDpYZihzWzBdKSxtYXRobWw6WGYoc1sxXSl9fSxodG1sQnVpbGRlcjooaSxzKT0+e3ZhciB1PWQxKGkuaHRtbCxzLCExKTtyZXR1cm4gem4ubWFrZUZyYWdtZW50KHUpfSxtYXRobWxCdWlsZGVyOihpLHMpPT5fOShpLm1hdGhtbCxzKX0pO3ZhciBMYmU9ZnVuY3Rpb24ocyl7aWYoL15bLStdPyAqKFxkKyhcLlxkKik/fFwuXGQrKSQvLnRlc3QocykpcmV0dXJue251bWJlcjorcyx1bml0OiJicCJ9O3ZhciB1PS8oWy0rXT8pICooXGQrKD86XC5cZCopP3xcLlxkKykgKihbYS16XXsyfSkvLmV4ZWMocyk7aWYoIXUpdGhyb3cgbmV3IENpKCJJbnZhbGlkIHNpemU6ICciK3MrIicgaW4gXFxpbmNsdWRlZ3JhcGhpY3MiKTt2YXIgZD17bnVtYmVyOisodVsxXSt1WzJdKSx1bml0OnVbM119O2lmKCFKJGUoZCkpdGhyb3cgbmV3IENpKCJJbnZhbGlkIHVuaXQ6ICciK2QudW5pdCsiJyBpbiBcXGluY2x1ZGVncmFwaGljcy4iKTtyZXR1cm4gZH07Smkoe3R5cGU6ImluY2x1ZGVncmFwaGljcyIsbmFtZXM6WyJcXGluY2x1ZGVncmFwaGljcyJdLHByb3BzOntudW1BcmdzOjEsbnVtT3B0aW9uYWxBcmdzOjEsYXJnVHlwZXM6WyJyYXciLCJ1cmwiXSxhbGxvd2VkSW5UZXh0OiExfSxoYW5kbGVyOihpLHMsdSk9Pnt2YXJ7cGFyc2VyOmR9PWkscD17bnVtYmVyOjAsdW5pdDoiZW0ifSx2PXtudW1iZXI6LjksdW5pdDoiZW0ifSxiPXtudW1iZXI6MCx1bml0OiJlbSJ9LHk9IiI7aWYodVswXSlmb3IodmFyIFQ9WW8odVswXSwicmF3Iikuc3RyaW5nLF89VC5zcGxpdCgiLCIpLEE9MDtBPF8ubGVuZ3RoO0ErKyl7dmFyIFA9X1tBXS5zcGxpdCgiPSIpO2lmKFAubGVuZ3RoPT09Mil7dmFyIFI9UFsxXS50cmltKCk7c3dpdGNoKFBbMF0udHJpbSgpKXtjYXNlImFsdCI6eT1SO2JyZWFrO2Nhc2Uid2lkdGgiOnA9TGJlKFIpO2JyZWFrO2Nhc2UiaGVpZ2h0Ijp2PUxiZShSKTticmVhaztjYXNlInRvdGFsaGVpZ2h0IjpiPUxiZShSKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBDaSgiSW52YWxpZCBrZXk6ICciK1BbMF0rIicgaW4gXFxpbmNsdWRlZ3JhcGhpY3MuIil9fX12YXIgRj1ZbyhzWzBdLCJ1cmwiKS51cmw7cmV0dXJuIHk9PT0iIiYmKHk9Rix5PXkucmVwbGFjZSgvXi4qW1xcL10vLCIiKSx5PXkuc3Vic3RyaW5nKDAseS5sYXN0SW5kZXhPZigiLiIpKSksZC5zZXR0aW5ncy5pc1RydXN0ZWQoe2NvbW1hbmQ6IlxcaW5jbHVkZWdyYXBoaWNzIix1cmw6Rn0pP3t0eXBlOiJpbmNsdWRlZ3JhcGhpY3MiLG1vZGU6ZC5tb2RlLGFsdDp5LHdpZHRoOnAsaGVpZ2h0OnYsdG90YWxoZWlnaHQ6YixzcmM6Rn06ZC5mb3JtYXRVbnN1cHBvcnRlZENtZCgiXFxpbmNsdWRlZ3JhcGhpY3MiKX0saHRtbEJ1aWxkZXI6KGkscyk9Pnt2YXIgdT1VaChpLmhlaWdodCxzKSxkPTA7aS50b3RhbGhlaWdodC5udW1iZXI+MCYmKGQ9VWgoaS50b3RhbGhlaWdodCxzKS11KTt2YXIgcD0wO2kud2lkdGgubnVtYmVyPjAmJihwPVVoKGkud2lkdGgscykpO3ZhciB2PXtoZWlnaHQ6UmkodStkKX07cD4wJiYodi53aWR0aD1SaShwKSksZD4wJiYodi52ZXJ0aWNhbEFsaWduPVJpKC1kKSk7dmFyIGI9bmV3IGxIdChpLnNyYyxpLmFsdCx2KTtyZXR1cm4gYi5oZWlnaHQ9dSxiLmRlcHRoPWQsYn0sbWF0aG1sQnVpbGRlcjooaSxzKT0+e3ZhciB1PW5ldyB2aS5NYXRoTm9kZSgibWdseXBoIixbXSk7dS5zZXRBdHRyaWJ1dGUoImFsdCIsaS5hbHQpO3ZhciBkPVVoKGkuaGVpZ2h0LHMpLHA9MDtpZihpLnRvdGFsaGVpZ2h0Lm51bWJlcj4wJiYocD1VaChpLnRvdGFsaGVpZ2h0LHMpLWQsdS5zZXRBdHRyaWJ1dGUoInZhbGlnbiIsUmkoLXApKSksdS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsUmkoZCtwKSksaS53aWR0aC5udW1iZXI+MCl7dmFyIHY9VWgoaS53aWR0aCxzKTt1LnNldEF0dHJpYnV0ZSgid2lkdGgiLFJpKHYpKX1yZXR1cm4gdS5zZXRBdHRyaWJ1dGUoInNyYyIsaS5zcmMpLHV9fSksSmkoe3R5cGU6Imtlcm4iLG5hbWVzOlsiXFxrZXJuIiwiXFxta2VybiIsIlxcaHNraXAiLCJcXG1za2lwIl0scHJvcHM6e251bUFyZ3M6MSxhcmdUeXBlczpbInNpemUiXSxwcmltaXRpdmU6ITAsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcihpLHMpe3ZhcntwYXJzZXI6dSxmdW5jTmFtZTpkfT1pLHA9WW8oc1swXSwic2l6ZSIpO2lmKHUuc2V0dGluZ3Muc3RyaWN0KXt2YXIgdj1kWzFdPT09Im0iLGI9cC52YWx1ZS51bml0PT09Im11Ijt2PyhifHx1LnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgibWF0aFZzVGV4dFVuaXRzIiwiTGFUZVgncyAiK2QrIiBzdXBwb3J0cyBvbmx5IG11IHVuaXRzLCAiKygibm90ICIrcC52YWx1ZS51bml0KyIgdW5pdHMiKSksdS5tb2RlIT09Im1hdGgiJiZ1LnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgibWF0aFZzVGV4dFVuaXRzIiwiTGFUZVgncyAiK2QrIiB3b3JrcyBvbmx5IGluIG1hdGggbW9kZSIpKTpiJiZ1LnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgibWF0aFZzVGV4dFVuaXRzIiwiTGFUZVgncyAiK2QrIiBkb2Vzbid0IHN1cHBvcnQgbXUgdW5pdHMiKX1yZXR1cm57dHlwZToia2VybiIsbW9kZTp1Lm1vZGUsZGltZW5zaW9uOnAudmFsdWV9fSxodG1sQnVpbGRlcihpLHMpe3JldHVybiB6bi5tYWtlR2x1ZShpLmRpbWVuc2lvbixzKX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1PVVoKGkuZGltZW5zaW9uLHMpO3JldHVybiBuZXcgdmkuU3BhY2VOb2RlKHUpfX0pLEppKHt0eXBlOiJsYXAiLG5hbWVzOlsiXFxtYXRobGxhcCIsIlxcbWF0aHJsYXAiLCJcXG1hdGhjbGFwIl0scHJvcHM6e251bUFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOihpLHMpPT57dmFye3BhcnNlcjp1LGZ1bmNOYW1lOmR9PWkscD1zWzBdO3JldHVybnt0eXBlOiJsYXAiLG1vZGU6dS5tb2RlLGFsaWdubWVudDpkLnNsaWNlKDUpLGJvZHk6cH19LGh0bWxCdWlsZGVyOihpLHMpPT57dmFyIHU7aS5hbGlnbm1lbnQ9PT0iY2xhcCI/KHU9em4ubWFrZVNwYW4oW10sW3V1KGkuYm9keSxzKV0pLHU9em4ubWFrZVNwYW4oWyJpbm5lciJdLFt1XSxzKSk6dT16bi5tYWtlU3BhbihbImlubmVyIl0sW3V1KGkuYm9keSxzKV0pO3ZhciBkPXpuLm1ha2VTcGFuKFsiZml4Il0sW10pLHA9em4ubWFrZVNwYW4oW2kuYWxpZ25tZW50XSxbdSxkXSxzKSx2PXpuLm1ha2VTcGFuKFsic3RydXQiXSk7cmV0dXJuIHYuc3R5bGUuaGVpZ2h0PVJpKHAuaGVpZ2h0K3AuZGVwdGgpLHAuZGVwdGgmJih2LnN0eWxlLnZlcnRpY2FsQWxpZ249UmkoLXAuZGVwdGgpKSxwLmNoaWxkcmVuLnVuc2hpZnQodikscD16bi5tYWtlU3BhbihbInRoaW5ib3giXSxbcF0scyksem4ubWFrZVNwYW4oWyJtb3JkIiwidmJveCJdLFtwXSxzKX0sbWF0aG1sQnVpbGRlcjooaSxzKT0+e3ZhciB1PW5ldyB2aS5NYXRoTm9kZSgibXBhZGRlZCIsW0xsKGkuYm9keSxzKV0pO2lmKGkuYWxpZ25tZW50IT09InJsYXAiKXt2YXIgZD1pLmFsaWdubWVudD09PSJsbGFwIj8iLTEiOiItMC41Ijt1LnNldEF0dHJpYnV0ZSgibHNwYWNlIixkKyJ3aWR0aCIpfXJldHVybiB1LnNldEF0dHJpYnV0ZSgid2lkdGgiLCIwcHgiKSx1fX0pLEppKHt0eXBlOiJzdHlsaW5nIixuYW1lczpbIlxcKCIsIiQiXSxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITAsYWxsb3dlZEluTWF0aDohMX0saGFuZGxlcihpLHMpe3ZhcntmdW5jTmFtZTp1LHBhcnNlcjpkfT1pLHA9ZC5tb2RlO2Quc3dpdGNoTW9kZSgibWF0aCIpO3ZhciB2PXU9PT0iXFwoIj8iXFwpIjoiJCIsYj1kLnBhcnNlRXhwcmVzc2lvbighMSx2KTtyZXR1cm4gZC5leHBlY3QodiksZC5zd2l0Y2hNb2RlKHApLHt0eXBlOiJzdHlsaW5nIixtb2RlOmQubW9kZSxzdHlsZToidGV4dCIsYm9keTpifX19KSxKaSh7dHlwZToidGV4dCIsbmFtZXM6WyJcXCkiLCJcXF0iXSxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITAsYWxsb3dlZEluTWF0aDohMX0saGFuZGxlcihpLHMpe3Rocm93IG5ldyBDaSgiTWlzbWF0Y2hlZCAiK2kuZnVuY05hbWUpfX0pO3ZhciBRemU9KGkscyk9Pntzd2l0Y2gocy5zdHlsZS5zaXplKXtjYXNlIFRhLkRJU1BMQVkuc2l6ZTpyZXR1cm4gaS5kaXNwbGF5O2Nhc2UgVGEuVEVYVC5zaXplOnJldHVybiBpLnRleHQ7Y2FzZSBUYS5TQ1JJUFQuc2l6ZTpyZXR1cm4gaS5zY3JpcHQ7Y2FzZSBUYS5TQ1JJUFRTQ1JJUFQuc2l6ZTpyZXR1cm4gaS5zY3JpcHRzY3JpcHQ7ZGVmYXVsdDpyZXR1cm4gaS50ZXh0fX07Smkoe3R5cGU6Im1hdGhjaG9pY2UiLG5hbWVzOlsiXFxtYXRoY2hvaWNlIl0scHJvcHM6e251bUFyZ3M6NCxwcmltaXRpdmU6ITB9LGhhbmRsZXI6KGkscyk9Pnt2YXJ7cGFyc2VyOnV9PWk7cmV0dXJue3R5cGU6Im1hdGhjaG9pY2UiLG1vZGU6dS5tb2RlLGRpc3BsYXk6WGYoc1swXSksdGV4dDpYZihzWzFdKSxzY3JpcHQ6WGYoc1syXSksc2NyaXB0c2NyaXB0OlhmKHNbM10pfX0saHRtbEJ1aWxkZXI6KGkscyk9Pnt2YXIgdT1RemUoaSxzKSxkPWQxKHUscywhMSk7cmV0dXJuIHpuLm1ha2VGcmFnbWVudChkKX0sbWF0aG1sQnVpbGRlcjooaSxzKT0+e3ZhciB1PVF6ZShpLHMpO3JldHVybiBfOSh1LHMpfX0pO3ZhciBKemU9KGkscyx1LGQscCx2LGIpPT57aT16bi5tYWtlU3BhbihbXSxbaV0pO3ZhciB5PXUmJllhLmlzQ2hhcmFjdGVyQm94KHUpLFQsXztpZihzKXt2YXIgQT11dShzLGQuaGF2aW5nU3R5bGUocC5zdXAoKSksZCk7Xz17ZWxlbTpBLGtlcm46TWF0aC5tYXgoZC5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzEsZC5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzMtQS5kZXB0aCl9fWlmKHUpe3ZhciBQPXV1KHUsZC5oYXZpbmdTdHlsZShwLnN1YigpKSxkKTtUPXtlbGVtOlAsa2VybjpNYXRoLm1heChkLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nMixkLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNC1QLmhlaWdodCl9fXZhciBSO2lmKF8mJlQpe3ZhciBGPWQuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc1K1QuZWxlbS5oZWlnaHQrVC5lbGVtLmRlcHRoK1Qua2VybitpLmRlcHRoK2I7Uj16bi5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiYm90dG9tIixwb3NpdGlvbkRhdGE6RixjaGlsZHJlbjpbe3R5cGU6Imtlcm4iLHNpemU6ZC5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzV9LHt0eXBlOiJlbGVtIixlbGVtOlQuZWxlbSxtYXJnaW5MZWZ0OlJpKC12KX0se3R5cGU6Imtlcm4iLHNpemU6VC5rZXJufSx7dHlwZToiZWxlbSIsZWxlbTppfSx7dHlwZToia2VybiIsc2l6ZTpfLmtlcm59LHt0eXBlOiJlbGVtIixlbGVtOl8uZWxlbSxtYXJnaW5MZWZ0OlJpKHYpfSx7dHlwZToia2VybiIsc2l6ZTpkLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNX1dfSxkKX1lbHNlIGlmKFQpe3ZhciBqPWkuaGVpZ2h0LWI7Uj16bi5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToidG9wIixwb3NpdGlvbkRhdGE6aixjaGlsZHJlbjpbe3R5cGU6Imtlcm4iLHNpemU6ZC5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzV9LHt0eXBlOiJlbGVtIixlbGVtOlQuZWxlbSxtYXJnaW5MZWZ0OlJpKC12KX0se3R5cGU6Imtlcm4iLHNpemU6VC5rZXJufSx7dHlwZToiZWxlbSIsZWxlbTppfV19LGQpfWVsc2UgaWYoXyl7dmFyIEs9aS5kZXB0aCtiO1I9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImJvdHRvbSIscG9zaXRpb25EYXRhOkssY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOml9LHt0eXBlOiJrZXJuIixzaXplOl8ua2Vybn0se3R5cGU6ImVsZW0iLGVsZW06Xy5lbGVtLG1hcmdpbkxlZnQ6Umkodil9LHt0eXBlOiJrZXJuIixzaXplOmQuZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc1fV19LGQpfWVsc2UgcmV0dXJuIGk7dmFyIGVlPVtSXTtpZihUJiZ2IT09MCYmIXkpe3ZhciBpZT16bi5tYWtlU3BhbihbIm1zcGFjZSJdLFtdLGQpO2llLnN0eWxlLm1hcmdpblJpZ2h0PVJpKHYpLGVlLnVuc2hpZnQoaWUpfXJldHVybiB6bi5tYWtlU3BhbihbIm1vcCIsIm9wLWxpbWl0cyJdLGVlLGQpfSxaemU9WyJcXHNtYWxsaW50Il0sUEQ9KGkscyk9Pnt2YXIgdSxkLHA9ITEsdjtpLnR5cGU9PT0ic3Vwc3ViIj8odT1pLnN1cCxkPWkuc3ViLHY9WW8oaS5iYXNlLCJvcCIpLHA9ITApOnY9WW8oaSwib3AiKTt2YXIgYj1zLnN0eWxlLHk9ITE7Yi5zaXplPT09VGEuRElTUExBWS5zaXplJiZ2LnN5bWJvbCYmIVlhLmNvbnRhaW5zKFp6ZSx2Lm5hbWUpJiYoeT0hMCk7dmFyIFQ7aWYodi5zeW1ib2wpe3ZhciBfPXk/IlNpemUyLVJlZ3VsYXIiOiJTaXplMS1SZWd1bGFyIixBPSIiO2lmKCh2Lm5hbWU9PT0iXFxvaWludCJ8fHYubmFtZT09PSJcXG9paWludCIpJiYoQT12Lm5hbWUuc2xpY2UoMSksdi5uYW1lPUE9PT0ib2lpbnQiPyJcXGlpbnQiOiJcXGlpaW50IiksVD16bi5tYWtlU3ltYm9sKHYubmFtZSxfLCJtYXRoIixzLFsibW9wIiwib3Atc3ltYm9sIix5PyJsYXJnZS1vcCI6InNtYWxsLW9wIl0pLEEubGVuZ3RoPjApe3ZhciBQPVQuaXRhbGljLFI9em4uc3RhdGljU3ZnKEErIlNpemUiKyh5PyIyIjoiMSIpLHMpO1Q9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOlQsc2hpZnQ6MH0se3R5cGU6ImVsZW0iLGVsZW06UixzaGlmdDp5Py4wODowfV19LHMpLHYubmFtZT0iXFwiK0EsVC5jbGFzc2VzLnVuc2hpZnQoIm1vcCIpLFQuaXRhbGljPVB9fWVsc2UgaWYodi5ib2R5KXt2YXIgRj1kMSh2LmJvZHkscywhMCk7Ri5sZW5ndGg9PT0xJiZGWzBdaW5zdGFuY2VvZiBCdj8oVD1GWzBdLFQuY2xhc3Nlc1swXT0ibW9wIik6VD16bi5tYWtlU3BhbihbIm1vcCJdLEYscyl9ZWxzZXtmb3IodmFyIGo9W10sSz0xO0s8di5uYW1lLmxlbmd0aDtLKyspai5wdXNoKHpuLm1hdGhzeW0odi5uYW1lW0tdLHYubW9kZSxzKSk7VD16bi5tYWtlU3BhbihbIm1vcCJdLGoscyl9dmFyIGVlPTAsaWU9MDtyZXR1cm4oVCBpbnN0YW5jZW9mIEJ2fHx2Lm5hbWU9PT0iXFxvaWludCJ8fHYubmFtZT09PSJcXG9paWludCIpJiYhdi5zdXBwcmVzc0Jhc2VTaGlmdCYmKGVlPShULmhlaWdodC1ULmRlcHRoKS8yLXMuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0LGllPVQuaXRhbGljKSxwP0p6ZShULHUsZCxzLGIsaWUsZWUpOihlZSYmKFQuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixULnN0eWxlLnRvcD1SaShlZSkpLFQpfSxkUj0oaSxzKT0+e3ZhciB1O2lmKGkuc3ltYm9sKXU9bmV3IEZ2KCJtbyIsW1J2KGkubmFtZSxpLm1vZGUpXSksWWEuY29udGFpbnMoWnplLGkubmFtZSkmJnUuc2V0QXR0cmlidXRlKCJsYXJnZW9wIiwiZmFsc2UiKTtlbHNlIGlmKGkuYm9keSl1PW5ldyBGdigibW8iLGoyKGkuYm9keSxzKSk7ZWxzZXt1PW5ldyBGdigibWkiLFtuZXcgbFIoaS5uYW1lLnNsaWNlKDEpKV0pO3ZhciBkPW5ldyBGdigibW8iLFtSdigi4oGhIiwidGV4dCIpXSk7aS5wYXJlbnRJc1N1cFN1Yj91PW5ldyBGdigibXJvdyIsW3UsZF0pOnU9YnplKFt1LGRdKX1yZXR1cm4gdX0saFZ0PXsi4oiPIjoiXFxwcm9kIiwi4oiQIjoiXFxjb3Byb2QiLCLiiJEiOiJcXHN1bSIsIuKLgCI6IlxcYmlnd2VkZ2UiLCLii4EiOiJcXGJpZ3ZlZSIsIuKLgiI6IlxcYmlnY2FwIiwi4ouDIjoiXFxiaWdjdXAiLCLiqIAiOiJcXGJpZ29kb3QiLCLiqIEiOiJcXGJpZ29wbHVzIiwi4qiCIjoiXFxiaWdvdGltZXMiLCLiqIQiOiJcXGJpZ3VwbHVzIiwi4qiGIjoiXFxiaWdzcWN1cCJ9O0ppKHt0eXBlOiJvcCIsbmFtZXM6WyJcXGNvcHJvZCIsIlxcYmlndmVlIiwiXFxiaWd3ZWRnZSIsIlxcYmlndXBsdXMiLCJcXGJpZ2NhcCIsIlxcYmlnY3VwIiwiXFxpbnRvcCIsIlxccHJvZCIsIlxcc3VtIiwiXFxiaWdvdGltZXMiLCJcXGJpZ29wbHVzIiwiXFxiaWdvZG90IiwiXFxiaWdzcWN1cCIsIlxcc21hbGxpbnQiLCLiiI8iLCLiiJAiLCLiiJEiLCLii4AiLCLii4EiLCLii4IiLCLii4MiLCLiqIAiLCLiqIEiLCLiqIIiLCLiqIQiLCLiqIYiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyOihpLHMpPT57dmFye3BhcnNlcjp1LGZ1bmNOYW1lOmR9PWkscD1kO3JldHVybiBwLmxlbmd0aD09PTEmJihwPWhWdFtwXSkse3R5cGU6Im9wIixtb2RlOnUubW9kZSxsaW1pdHM6ITAscGFyZW50SXNTdXBTdWI6ITEsc3ltYm9sOiEwLG5hbWU6cH19LGh0bWxCdWlsZGVyOlBELG1hdGhtbEJ1aWxkZXI6ZFJ9KSxKaSh7dHlwZToib3AiLG5hbWVzOlsiXFxtYXRob3AiXSxwcm9wczp7bnVtQXJnczoxLHByaW1pdGl2ZTohMH0saGFuZGxlcjooaSxzKT0+e3ZhcntwYXJzZXI6dX09aSxkPXNbMF07cmV0dXJue3R5cGU6Im9wIixtb2RlOnUubW9kZSxsaW1pdHM6ITEscGFyZW50SXNTdXBTdWI6ITEsc3ltYm9sOiExLGJvZHk6WGYoZCl9fSxodG1sQnVpbGRlcjpQRCxtYXRobWxCdWlsZGVyOmRSfSk7dmFyIGZWdD17IuKIqyI6IlxcaW50Iiwi4oisIjoiXFxpaW50Iiwi4oitIjoiXFxpaWludCIsIuKIriI6Ilxcb2ludCIsIuKIryI6Ilxcb2lpbnQiLCLiiLAiOiJcXG9paWludCJ9O0ppKHt0eXBlOiJvcCIsbmFtZXM6WyJcXGFyY3NpbiIsIlxcYXJjY29zIiwiXFxhcmN0YW4iLCJcXGFyY3RnIiwiXFxhcmNjdGciLCJcXGFyZyIsIlxcY2giLCJcXGNvcyIsIlxcY29zZWMiLCJcXGNvc2giLCJcXGNvdCIsIlxcY290ZyIsIlxcY290aCIsIlxcY3NjIiwiXFxjdGciLCJcXGN0aCIsIlxcZGVnIiwiXFxkaW0iLCJcXGV4cCIsIlxcaG9tIiwiXFxrZXIiLCJcXGxnIiwiXFxsbiIsIlxcbG9nIiwiXFxzZWMiLCJcXHNpbiIsIlxcc2luaCIsIlxcc2giLCJcXHRhbiIsIlxcdGFuaCIsIlxcdGciLCJcXHRoIl0scHJvcHM6e251bUFyZ3M6MH0saGFuZGxlcihpKXt2YXJ7cGFyc2VyOnMsZnVuY05hbWU6dX09aTtyZXR1cm57dHlwZToib3AiLG1vZGU6cy5tb2RlLGxpbWl0czohMSxwYXJlbnRJc1N1cFN1YjohMSxzeW1ib2w6ITEsbmFtZTp1fX0saHRtbEJ1aWxkZXI6UEQsbWF0aG1sQnVpbGRlcjpkUn0pLEppKHt0eXBlOiJvcCIsbmFtZXM6WyJcXGRldCIsIlxcZ2NkIiwiXFxpbmYiLCJcXGxpbSIsIlxcbWF4IiwiXFxtaW4iLCJcXFByIiwiXFxzdXAiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKGkpe3ZhcntwYXJzZXI6cyxmdW5jTmFtZTp1fT1pO3JldHVybnt0eXBlOiJvcCIsbW9kZTpzLm1vZGUsbGltaXRzOiEwLHBhcmVudElzU3VwU3ViOiExLHN5bWJvbDohMSxuYW1lOnV9fSxodG1sQnVpbGRlcjpQRCxtYXRobWxCdWlsZGVyOmRSfSksSmkoe3R5cGU6Im9wIixuYW1lczpbIlxcaW50IiwiXFxpaW50IiwiXFxpaWludCIsIlxcb2ludCIsIlxcb2lpbnQiLCJcXG9paWludCIsIuKIqyIsIuKIrCIsIuKIrSIsIuKIriIsIuKIryIsIuKIsCJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXIoaSl7dmFye3BhcnNlcjpzLGZ1bmNOYW1lOnV9PWksZD11O3JldHVybiBkLmxlbmd0aD09PTEmJihkPWZWdFtkXSkse3R5cGU6Im9wIixtb2RlOnMubW9kZSxsaW1pdHM6ITEscGFyZW50SXNTdXBTdWI6ITEsc3ltYm9sOiEwLG5hbWU6ZH19LGh0bWxCdWlsZGVyOlBELG1hdGhtbEJ1aWxkZXI6ZFJ9KTt2YXIgZXFlPShpLHMpPT57dmFyIHUsZCxwPSExLHY7aS50eXBlPT09InN1cHN1YiI/KHU9aS5zdXAsZD1pLnN1Yix2PVlvKGkuYmFzZSwib3BlcmF0b3JuYW1lIikscD0hMCk6dj1ZbyhpLCJvcGVyYXRvcm5hbWUiKTt2YXIgYjtpZih2LmJvZHkubGVuZ3RoPjApe2Zvcih2YXIgeT12LmJvZHkubWFwKFA9Pnt2YXIgUj1QLnRleHQ7cmV0dXJuIHR5cGVvZiBSPT0ic3RyaW5nIj97dHlwZToidGV4dG9yZCIsbW9kZTpQLm1vZGUsdGV4dDpSfTpQfSksVD1kMSh5LHMud2l0aEZvbnQoIm1hdGhybSIpLCEwKSxfPTA7XzxULmxlbmd0aDtfKyspe3ZhciBBPVRbX107QSBpbnN0YW5jZW9mIEJ2JiYoQS50ZXh0PUEudGV4dC5yZXBsYWNlKC9cdTIyMTIvLCItIikucmVwbGFjZSgvXHUyMjE3LywiKiIpKX1iPXpuLm1ha2VTcGFuKFsibW9wIl0sVCxzKX1lbHNlIGI9em4ubWFrZVNwYW4oWyJtb3AiXSxbXSxzKTtyZXR1cm4gcD9KemUoYix1LGQscyxzLnN0eWxlLDAsMCk6Yn0sZFZ0PShpLHMpPT57Zm9yKHZhciB1PWoyKGkuYm9keSxzLndpdGhGb250KCJtYXRocm0iKSksZD0hMCxwPTA7cDx1Lmxlbmd0aDtwKyspe3ZhciB2PXVbcF07aWYoISh2IGluc3RhbmNlb2YgdmkuU3BhY2VOb2RlKSlpZih2IGluc3RhbmNlb2YgdmkuTWF0aE5vZGUpc3dpdGNoKHYudHlwZSl7Y2FzZSJtaSI6Y2FzZSJtbiI6Y2FzZSJtcyI6Y2FzZSJtc3BhY2UiOmNhc2UibXRleHQiOmJyZWFrO2Nhc2UibW8iOnt2YXIgYj12LmNoaWxkcmVuWzBdO3YuY2hpbGRyZW4ubGVuZ3RoPT09MSYmYiBpbnN0YW5jZW9mIHZpLlRleHROb2RlP2IudGV4dD1iLnRleHQucmVwbGFjZSgvXHUyMjEyLywiLSIpLnJlcGxhY2UoL1x1MjIxNy8sIioiKTpkPSExO2JyZWFrfWRlZmF1bHQ6ZD0hMX1lbHNlIGQ9ITF9aWYoZCl7dmFyIHk9dS5tYXAoQT0+QS50b1RleHQoKSkuam9pbigiIik7dT1bbmV3IHZpLlRleHROb2RlKHkpXX12YXIgVD1uZXcgdmkuTWF0aE5vZGUoIm1pIix1KTtULnNldEF0dHJpYnV0ZSgibWF0aHZhcmlhbnQiLCJub3JtYWwiKTt2YXIgXz1uZXcgdmkuTWF0aE5vZGUoIm1vIixbUnYoIuKBoSIsInRleHQiKV0pO3JldHVybiBpLnBhcmVudElzU3VwU3ViP25ldyB2aS5NYXRoTm9kZSgibXJvdyIsW1QsX10pOnZpLm5ld0RvY3VtZW50RnJhZ21lbnQoW1QsX10pfTtKaSh7dHlwZToib3BlcmF0b3JuYW1lIixuYW1lczpbIlxcb3BlcmF0b3JuYW1lQCIsIlxcb3BlcmF0b3JuYW1ld2l0aGxpbWl0cyJdLHByb3BzOntudW1BcmdzOjF9LGhhbmRsZXI6KGkscyk9Pnt2YXJ7cGFyc2VyOnUsZnVuY05hbWU6ZH09aSxwPXNbMF07cmV0dXJue3R5cGU6Im9wZXJhdG9ybmFtZSIsbW9kZTp1Lm1vZGUsYm9keTpYZihwKSxhbHdheXNIYW5kbGVTdXBTdWI6ZD09PSJcXG9wZXJhdG9ybmFtZXdpdGhsaW1pdHMiLGxpbWl0czohMSxwYXJlbnRJc1N1cFN1YjohMX19LGh0bWxCdWlsZGVyOmVxZSxtYXRobWxCdWlsZGVyOmRWdH0pLGV0KCJcXG9wZXJhdG9ybmFtZSIsIlxcQGlmc3Rhclxcb3BlcmF0b3JuYW1ld2l0aGxpbWl0c1xcb3BlcmF0b3JuYW1lQCIpLHpDKHt0eXBlOiJvcmRncm91cCIsaHRtbEJ1aWxkZXIoaSxzKXtyZXR1cm4gaS5zZW1pc2ltcGxlP3puLm1ha2VGcmFnbWVudChkMShpLmJvZHkscywhMSkpOnpuLm1ha2VTcGFuKFsibW9yZCJdLGQxKGkuYm9keSxzLCEwKSxzKX0sbWF0aG1sQnVpbGRlcihpLHMpe3JldHVybiBfOShpLmJvZHkscywhMCl9fSksSmkoe3R5cGU6Im92ZXJsaW5lIixuYW1lczpbIlxcb3ZlcmxpbmUiXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyKGkscyl7dmFye3BhcnNlcjp1fT1pLGQ9c1swXTtyZXR1cm57dHlwZToib3ZlcmxpbmUiLG1vZGU6dS5tb2RlLGJvZHk6ZH19LGh0bWxCdWlsZGVyKGkscyl7dmFyIHU9dXUoaS5ib2R5LHMuaGF2aW5nQ3JhbXBlZFN0eWxlKCkpLGQ9em4ubWFrZUxpbmVTcGFuKCJvdmVybGluZS1saW5lIixzKSxwPXMuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcyx2PXpuLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJmaXJzdEJhc2VsaW5lIixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06dX0se3R5cGU6Imtlcm4iLHNpemU6MypwfSx7dHlwZToiZWxlbSIsZWxlbTpkfSx7dHlwZToia2VybiIsc2l6ZTpwfV19LHMpO3JldHVybiB6bi5tYWtlU3BhbihbIm1vcmQiLCJvdmVybGluZSJdLFt2XSxzKX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1PW5ldyB2aS5NYXRoTm9kZSgibW8iLFtuZXcgdmkuVGV4dE5vZGUoIuKAviIpXSk7dS5zZXRBdHRyaWJ1dGUoInN0cmV0Y2h5IiwidHJ1ZSIpO3ZhciBkPW5ldyB2aS5NYXRoTm9kZSgibW92ZXIiLFtMbChpLmJvZHkscyksdV0pO3JldHVybiBkLnNldEF0dHJpYnV0ZSgiYWNjZW50IiwidHJ1ZSIpLGR9fSksSmkoe3R5cGU6InBoYW50b20iLG5hbWVzOlsiXFxwaGFudG9tIl0scHJvcHM6e251bUFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOihpLHMpPT57dmFye3BhcnNlcjp1fT1pLGQ9c1swXTtyZXR1cm57dHlwZToicGhhbnRvbSIsbW9kZTp1Lm1vZGUsYm9keTpYZihkKX19LGh0bWxCdWlsZGVyOihpLHMpPT57dmFyIHU9ZDEoaS5ib2R5LHMud2l0aFBoYW50b20oKSwhMSk7cmV0dXJuIHpuLm1ha2VGcmFnbWVudCh1KX0sbWF0aG1sQnVpbGRlcjooaSxzKT0+e3ZhciB1PWoyKGkuYm9keSxzKTtyZXR1cm4gbmV3IHZpLk1hdGhOb2RlKCJtcGhhbnRvbSIsdSl9fSksSmkoe3R5cGU6ImhwaGFudG9tIixuYW1lczpbIlxcaHBoYW50b20iXSxwcm9wczp7bnVtQXJnczoxLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6KGkscyk9Pnt2YXJ7cGFyc2VyOnV9PWksZD1zWzBdO3JldHVybnt0eXBlOiJocGhhbnRvbSIsbW9kZTp1Lm1vZGUsYm9keTpkfX0saHRtbEJ1aWxkZXI6KGkscyk9Pnt2YXIgdT16bi5tYWtlU3BhbihbXSxbdXUoaS5ib2R5LHMud2l0aFBoYW50b20oKSldKTtpZih1LmhlaWdodD0wLHUuZGVwdGg9MCx1LmNoaWxkcmVuKWZvcih2YXIgZD0wO2Q8dS5jaGlsZHJlbi5sZW5ndGg7ZCsrKXUuY2hpbGRyZW5bZF0uaGVpZ2h0PTAsdS5jaGlsZHJlbltkXS5kZXB0aD0wO3JldHVybiB1PXpuLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJmaXJzdEJhc2VsaW5lIixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06dX1dfSxzKSx6bi5tYWtlU3BhbihbIm1vcmQiXSxbdV0scyl9LG1hdGhtbEJ1aWxkZXI6KGkscyk9Pnt2YXIgdT1qMihYZihpLmJvZHkpLHMpLGQ9bmV3IHZpLk1hdGhOb2RlKCJtcGhhbnRvbSIsdSkscD1uZXcgdmkuTWF0aE5vZGUoIm1wYWRkZWQiLFtkXSk7cmV0dXJuIHAuc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIwcHgiKSxwLnNldEF0dHJpYnV0ZSgiZGVwdGgiLCIwcHgiKSxwfX0pLEppKHt0eXBlOiJ2cGhhbnRvbSIsbmFtZXM6WyJcXHZwaGFudG9tIl0scHJvcHM6e251bUFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOihpLHMpPT57dmFye3BhcnNlcjp1fT1pLGQ9c1swXTtyZXR1cm57dHlwZToidnBoYW50b20iLG1vZGU6dS5tb2RlLGJvZHk6ZH19LGh0bWxCdWlsZGVyOihpLHMpPT57dmFyIHU9em4ubWFrZVNwYW4oWyJpbm5lciJdLFt1dShpLmJvZHkscy53aXRoUGhhbnRvbSgpKV0pLGQ9em4ubWFrZVNwYW4oWyJmaXgiXSxbXSk7cmV0dXJuIHpuLm1ha2VTcGFuKFsibW9yZCIsInJsYXAiXSxbdSxkXSxzKX0sbWF0aG1sQnVpbGRlcjooaSxzKT0+e3ZhciB1PWoyKFhmKGkuYm9keSkscyksZD1uZXcgdmkuTWF0aE5vZGUoIm1waGFudG9tIix1KSxwPW5ldyB2aS5NYXRoTm9kZSgibXBhZGRlZCIsW2RdKTtyZXR1cm4gcC5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMHB4IikscH19KSxKaSh7dHlwZToicmFpc2Vib3giLG5hbWVzOlsiXFxyYWlzZWJveCJdLHByb3BzOntudW1BcmdzOjIsYXJnVHlwZXM6WyJzaXplIiwiaGJveCJdLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXIoaSxzKXt2YXJ7cGFyc2VyOnV9PWksZD1ZbyhzWzBdLCJzaXplIikudmFsdWUscD1zWzFdO3JldHVybnt0eXBlOiJyYWlzZWJveCIsbW9kZTp1Lm1vZGUsZHk6ZCxib2R5OnB9fSxodG1sQnVpbGRlcihpLHMpe3ZhciB1PXV1KGkuYm9keSxzKSxkPVVoKGkuZHkscyk7cmV0dXJuIHpuLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJzaGlmdCIscG9zaXRpb25EYXRhOi1kLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTp1fV19LHMpfSxtYXRobWxCdWlsZGVyKGkscyl7dmFyIHU9bmV3IHZpLk1hdGhOb2RlKCJtcGFkZGVkIixbTGwoaS5ib2R5LHMpXSksZD1pLmR5Lm51bWJlcitpLmR5LnVuaXQ7cmV0dXJuIHUuc2V0QXR0cmlidXRlKCJ2b2Zmc2V0IixkKSx1fX0pLEppKHt0eXBlOiJpbnRlcm5hbCIsbmFtZXM6WyJcXHJlbGF4Il0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKGkpe3ZhcntwYXJzZXI6c309aTtyZXR1cm57dHlwZToiaW50ZXJuYWwiLG1vZGU6cy5tb2RlfX19KSxKaSh7dHlwZToicnVsZSIsbmFtZXM6WyJcXHJ1bGUiXSxwcm9wczp7bnVtQXJnczoyLG51bU9wdGlvbmFsQXJnczoxLGFyZ1R5cGVzOlsic2l6ZSIsInNpemUiLCJzaXplIl19LGhhbmRsZXIoaSxzLHUpe3ZhcntwYXJzZXI6ZH09aSxwPXVbMF0sdj1ZbyhzWzBdLCJzaXplIiksYj1ZbyhzWzFdLCJzaXplIik7cmV0dXJue3R5cGU6InJ1bGUiLG1vZGU6ZC5tb2RlLHNoaWZ0OnAmJllvKHAsInNpemUiKS52YWx1ZSx3aWR0aDp2LnZhbHVlLGhlaWdodDpiLnZhbHVlfX0saHRtbEJ1aWxkZXIoaSxzKXt2YXIgdT16bi5tYWtlU3BhbihbIm1vcmQiLCJydWxlIl0sW10scyksZD1VaChpLndpZHRoLHMpLHA9VWgoaS5oZWlnaHQscyksdj1pLnNoaWZ0P1VoKGkuc2hpZnQscyk6MDtyZXR1cm4gdS5zdHlsZS5ib3JkZXJSaWdodFdpZHRoPVJpKGQpLHUuc3R5bGUuYm9yZGVyVG9wV2lkdGg9UmkocCksdS5zdHlsZS5ib3R0b209UmkodiksdS53aWR0aD1kLHUuaGVpZ2h0PXArdix1LmRlcHRoPS12LHUubWF4Rm9udFNpemU9cCoxLjEyNSpzLnNpemVNdWx0aXBsaWVyLHV9LG1hdGhtbEJ1aWxkZXIoaSxzKXt2YXIgdT1VaChpLndpZHRoLHMpLGQ9VWgoaS5oZWlnaHQscykscD1pLnNoaWZ0P1VoKGkuc2hpZnQscyk6MCx2PXMuY29sb3ImJnMuZ2V0Q29sb3IoKXx8ImJsYWNrIixiPW5ldyB2aS5NYXRoTm9kZSgibXNwYWNlIik7Yi5zZXRBdHRyaWJ1dGUoIm1hdGhiYWNrZ3JvdW5kIix2KSxiLnNldEF0dHJpYnV0ZSgid2lkdGgiLFJpKHUpKSxiLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixSaShkKSk7dmFyIHk9bmV3IHZpLk1hdGhOb2RlKCJtcGFkZGVkIixbYl0pO3JldHVybiBwPj0wP3kuc2V0QXR0cmlidXRlKCJoZWlnaHQiLFJpKHApKTooeS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsUmkocCkpLHkuc2V0QXR0cmlidXRlKCJkZXB0aCIsUmkoLXApKSkseS5zZXRBdHRyaWJ1dGUoInZvZmZzZXQiLFJpKHApKSx5fX0pO2Z1bmN0aW9uIHRxZShpLHMsdSl7Zm9yKHZhciBkPWQxKGkscywhMSkscD1zLnNpemVNdWx0aXBsaWVyL3Uuc2l6ZU11bHRpcGxpZXIsdj0wO3Y8ZC5sZW5ndGg7disrKXt2YXIgYj1kW3ZdLmNsYXNzZXMuaW5kZXhPZigic2l6aW5nIik7YjwwP0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGRbdl0uY2xhc3NlcyxzLnNpemluZ0NsYXNzZXModSkpOmRbdl0uY2xhc3Nlc1tiKzFdPT09InJlc2V0LXNpemUiK3Muc2l6ZSYmKGRbdl0uY2xhc3Nlc1tiKzFdPSJyZXNldC1zaXplIit1LnNpemUpLGRbdl0uaGVpZ2h0Kj1wLGRbdl0uZGVwdGgqPXB9cmV0dXJuIHpuLm1ha2VGcmFnbWVudChkKX12YXIgbnFlPVsiXFx0aW55IiwiXFxzaXhwdHNpemUiLCJcXHNjcmlwdHNpemUiLCJcXGZvb3Rub3Rlc2l6ZSIsIlxcc21hbGwiLCJcXG5vcm1hbHNpemUiLCJcXGxhcmdlIiwiXFxMYXJnZSIsIlxcTEFSR0UiLCJcXGh1Z2UiLCJcXEh1Z2UiXSxnVnQ9KGkscyk9Pnt2YXIgdT1zLmhhdmluZ1NpemUoaS5zaXplKTtyZXR1cm4gdHFlKGkuYm9keSx1LHMpfTtKaSh7dHlwZToic2l6aW5nIixuYW1lczpucWUscHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOihpLHMpPT57dmFye2JyZWFrT25Ub2tlblRleHQ6dSxmdW5jTmFtZTpkLHBhcnNlcjpwfT1pLHY9cC5wYXJzZUV4cHJlc3Npb24oITEsdSk7cmV0dXJue3R5cGU6InNpemluZyIsbW9kZTpwLm1vZGUsc2l6ZTpucWUuaW5kZXhPZihkKSsxLGJvZHk6dn19LGh0bWxCdWlsZGVyOmdWdCxtYXRobWxCdWlsZGVyOihpLHMpPT57dmFyIHU9cy5oYXZpbmdTaXplKGkuc2l6ZSksZD1qMihpLmJvZHksdSkscD1uZXcgdmkuTWF0aE5vZGUoIm1zdHlsZSIsZCk7cmV0dXJuIHAuc2V0QXR0cmlidXRlKCJtYXRoc2l6ZSIsUmkodS5zaXplTXVsdGlwbGllcikpLHB9fSksSmkoe3R5cGU6InNtYXNoIixuYW1lczpbIlxcc21hc2giXSxwcm9wczp7bnVtQXJnczoxLG51bU9wdGlvbmFsQXJnczoxLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6KGkscyx1KT0+e3ZhcntwYXJzZXI6ZH09aSxwPSExLHY9ITEsYj11WzBdJiZZbyh1WzBdLCJvcmRncm91cCIpO2lmKGIpZm9yKHZhciB5PSIiLFQ9MDtUPGIuYm9keS5sZW5ndGg7KytUKXt2YXIgXz1iLmJvZHlbVF07aWYoeT1fLnRleHQseT09PSJ0IilwPSEwO2Vsc2UgaWYoeT09PSJiIil2PSEwO2Vsc2V7cD0hMSx2PSExO2JyZWFrfX1lbHNlIHA9ITAsdj0hMDt2YXIgQT1zWzBdO3JldHVybnt0eXBlOiJzbWFzaCIsbW9kZTpkLm1vZGUsYm9keTpBLHNtYXNoSGVpZ2h0OnAsc21hc2hEZXB0aDp2fX0saHRtbEJ1aWxkZXI6KGkscyk9Pnt2YXIgdT16bi5tYWtlU3BhbihbXSxbdXUoaS5ib2R5LHMpXSk7aWYoIWkuc21hc2hIZWlnaHQmJiFpLnNtYXNoRGVwdGgpcmV0dXJuIHU7aWYoaS5zbWFzaEhlaWdodCYmKHUuaGVpZ2h0PTAsdS5jaGlsZHJlbikpZm9yKHZhciBkPTA7ZDx1LmNoaWxkcmVuLmxlbmd0aDtkKyspdS5jaGlsZHJlbltkXS5oZWlnaHQ9MDtpZihpLnNtYXNoRGVwdGgmJih1LmRlcHRoPTAsdS5jaGlsZHJlbikpZm9yKHZhciBwPTA7cDx1LmNoaWxkcmVuLmxlbmd0aDtwKyspdS5jaGlsZHJlbltwXS5kZXB0aD0wO3ZhciB2PXpuLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJmaXJzdEJhc2VsaW5lIixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06dX1dfSxzKTtyZXR1cm4gem4ubWFrZVNwYW4oWyJtb3JkIl0sW3ZdLHMpfSxtYXRobWxCdWlsZGVyOihpLHMpPT57dmFyIHU9bmV3IHZpLk1hdGhOb2RlKCJtcGFkZGVkIixbTGwoaS5ib2R5LHMpXSk7cmV0dXJuIGkuc21hc2hIZWlnaHQmJnUuc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIwcHgiKSxpLnNtYXNoRGVwdGgmJnUuc2V0QXR0cmlidXRlKCJkZXB0aCIsIjBweCIpLHV9fSksSmkoe3R5cGU6InNxcnQiLG5hbWVzOlsiXFxzcXJ0Il0scHJvcHM6e251bUFyZ3M6MSxudW1PcHRpb25hbEFyZ3M6MX0saGFuZGxlcihpLHMsdSl7dmFye3BhcnNlcjpkfT1pLHA9dVswXSx2PXNbMF07cmV0dXJue3R5cGU6InNxcnQiLG1vZGU6ZC5tb2RlLGJvZHk6dixpbmRleDpwfX0saHRtbEJ1aWxkZXIoaSxzKXt2YXIgdT11dShpLmJvZHkscy5oYXZpbmdDcmFtcGVkU3R5bGUoKSk7dS5oZWlnaHQ9PT0wJiYodS5oZWlnaHQ9cy5mb250TWV0cmljcygpLnhIZWlnaHQpLHU9em4ud3JhcEZyYWdtZW50KHUscyk7dmFyIGQ9cy5mb250TWV0cmljcygpLHA9ZC5kZWZhdWx0UnVsZVRoaWNrbmVzcyx2PXA7cy5zdHlsZS5pZDxUYS5URVhULmlkJiYodj1zLmZvbnRNZXRyaWNzKCkueEhlaWdodCk7dmFyIGI9cCt2LzQseT11LmhlaWdodCt1LmRlcHRoK2IrcCx7c3BhbjpULHJ1bGVXaWR0aDpfLGFkdmFuY2VXaWR0aDpBfT1CNy5zcXJ0SW1hZ2UoeSxzKSxQPVQuaGVpZ2h0LV87UD51LmhlaWdodCt1LmRlcHRoK2ImJihiPShiK1AtdS5oZWlnaHQtdS5kZXB0aCkvMik7dmFyIFI9VC5oZWlnaHQtdS5oZWlnaHQtYi1fO3Uuc3R5bGUucGFkZGluZ0xlZnQ9UmkoQSk7dmFyIEY9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImZpcnN0QmFzZWxpbmUiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTp1LHdyYXBwZXJDbGFzc2VzOlsic3ZnLWFsaWduIl19LHt0eXBlOiJrZXJuIixzaXplOi0odS5oZWlnaHQrUil9LHt0eXBlOiJlbGVtIixlbGVtOlR9LHt0eXBlOiJrZXJuIixzaXplOl99XX0scyk7aWYoaS5pbmRleCl7dmFyIGo9cy5oYXZpbmdTdHlsZShUYS5TQ1JJUFRTQ1JJUFQpLEs9dXUoaS5pbmRleCxqLHMpLGVlPS42KihGLmhlaWdodC1GLmRlcHRoKSxpZT16bi5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToic2hpZnQiLHBvc2l0aW9uRGF0YTotZWUsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOkt9XX0scyksb2U9em4ubWFrZVNwYW4oWyJyb290Il0sW2llXSk7cmV0dXJuIHpuLm1ha2VTcGFuKFsibW9yZCIsInNxcnQiXSxbb2UsRl0scyl9ZWxzZSByZXR1cm4gem4ubWFrZVNwYW4oWyJtb3JkIiwic3FydCJdLFtGXSxzKX0sbWF0aG1sQnVpbGRlcihpLHMpe3Zhcntib2R5OnUsaW5kZXg6ZH09aTtyZXR1cm4gZD9uZXcgdmkuTWF0aE5vZGUoIm1yb290IixbTGwodSxzKSxMbChkLHMpXSk6bmV3IHZpLk1hdGhOb2RlKCJtc3FydCIsW0xsKHUscyldKX19KTt2YXIgcnFlPXtkaXNwbGF5OlRhLkRJU1BMQVksdGV4dDpUYS5URVhULHNjcmlwdDpUYS5TQ1JJUFQsc2NyaXB0c2NyaXB0OlRhLlNDUklQVFNDUklQVH07Smkoe3R5cGU6InN0eWxpbmciLG5hbWVzOlsiXFxkaXNwbGF5c3R5bGUiLCJcXHRleHRzdHlsZSIsIlxcc2NyaXB0c3R5bGUiLCJcXHNjcmlwdHNjcmlwdHN0eWxlIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwLHByaW1pdGl2ZTohMH0saGFuZGxlcihpLHMpe3ZhcnticmVha09uVG9rZW5UZXh0OnUsZnVuY05hbWU6ZCxwYXJzZXI6cH09aSx2PXAucGFyc2VFeHByZXNzaW9uKCEwLHUpLGI9ZC5zbGljZSgxLGQubGVuZ3RoLTUpO3JldHVybnt0eXBlOiJzdHlsaW5nIixtb2RlOnAubW9kZSxzdHlsZTpiLGJvZHk6dn19LGh0bWxCdWlsZGVyKGkscyl7dmFyIHU9cnFlW2kuc3R5bGVdLGQ9cy5oYXZpbmdTdHlsZSh1KS53aXRoRm9udCgiIik7cmV0dXJuIHRxZShpLmJvZHksZCxzKX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1PXJxZVtpLnN0eWxlXSxkPXMuaGF2aW5nU3R5bGUodSkscD1qMihpLmJvZHksZCksdj1uZXcgdmkuTWF0aE5vZGUoIm1zdHlsZSIscCksYj17ZGlzcGxheTpbIjAiLCJ0cnVlIl0sdGV4dDpbIjAiLCJmYWxzZSJdLHNjcmlwdDpbIjEiLCJmYWxzZSJdLHNjcmlwdHNjcmlwdDpbIjIiLCJmYWxzZSJdfSx5PWJbaS5zdHlsZV07cmV0dXJuIHYuc2V0QXR0cmlidXRlKCJzY3JpcHRsZXZlbCIseVswXSksdi5zZXRBdHRyaWJ1dGUoImRpc3BsYXlzdHlsZSIseVsxXSksdn19KTt2YXIgcFZ0PWZ1bmN0aW9uKHMsdSl7dmFyIGQ9cy5iYXNlO2lmKGQpaWYoZC50eXBlPT09Im9wIil7dmFyIHA9ZC5saW1pdHMmJih1LnN0eWxlLnNpemU9PT1UYS5ESVNQTEFZLnNpemV8fGQuYWx3YXlzSGFuZGxlU3VwU3ViKTtyZXR1cm4gcD9QRDpudWxsfWVsc2UgaWYoZC50eXBlPT09Im9wZXJhdG9ybmFtZSIpe3ZhciB2PWQuYWx3YXlzSGFuZGxlU3VwU3ViJiYodS5zdHlsZS5zaXplPT09VGEuRElTUExBWS5zaXplfHxkLmxpbWl0cyk7cmV0dXJuIHY/ZXFlOm51bGx9ZWxzZXtpZihkLnR5cGU9PT0iYWNjZW50IilyZXR1cm4gWWEuaXNDaGFyYWN0ZXJCb3goZC5iYXNlKT9nYmU6bnVsbDtpZihkLnR5cGU9PT0iaG9yaXpCcmFjZSIpe3ZhciBiPSFzLnN1YjtyZXR1cm4gYj09PWQuaXNPdmVyP1h6ZTpudWxsfWVsc2UgcmV0dXJuIG51bGx9ZWxzZSByZXR1cm4gbnVsbH07ekMoe3R5cGU6InN1cHN1YiIsaHRtbEJ1aWxkZXIoaSxzKXt2YXIgdT1wVnQoaSxzKTtpZih1KXJldHVybiB1KGkscyk7dmFye2Jhc2U6ZCxzdXA6cCxzdWI6dn09aSxiPXV1KGQscykseSxULF89cy5mb250TWV0cmljcygpLEE9MCxQPTAsUj1kJiZZYS5pc0NoYXJhY3RlckJveChkKTtpZihwKXt2YXIgRj1zLmhhdmluZ1N0eWxlKHMuc3R5bGUuc3VwKCkpO3k9dXUocCxGLHMpLFJ8fChBPWIuaGVpZ2h0LUYuZm9udE1ldHJpY3MoKS5zdXBEcm9wKkYuc2l6ZU11bHRpcGxpZXIvcy5zaXplTXVsdGlwbGllcil9aWYodil7dmFyIGo9cy5oYXZpbmdTdHlsZShzLnN0eWxlLnN1YigpKTtUPXV1KHYsaixzKSxSfHwoUD1iLmRlcHRoK2ouZm9udE1ldHJpY3MoKS5zdWJEcm9wKmouc2l6ZU11bHRpcGxpZXIvcy5zaXplTXVsdGlwbGllcil9dmFyIEs7cy5zdHlsZT09PVRhLkRJU1BMQVk/Sz1fLnN1cDE6cy5zdHlsZS5jcmFtcGVkP0s9Xy5zdXAzOks9Xy5zdXAyO3ZhciBlZT1zLnNpemVNdWx0aXBsaWVyLGllPVJpKC41L18ucHRQZXJFbS9lZSksb2U9bnVsbDtpZihUKXt2YXIgcGU9aS5iYXNlJiZpLmJhc2UudHlwZT09PSJvcCImJmkuYmFzZS5uYW1lJiYoaS5iYXNlLm5hbWU9PT0iXFxvaWludCJ8fGkuYmFzZS5uYW1lPT09Ilxcb2lpaW50Iik7KGIgaW5zdGFuY2VvZiBCdnx8cGUpJiYob2U9UmkoLWIuaXRhbGljKSl9dmFyIGJlO2lmKHkmJlQpe0E9TWF0aC5tYXgoQSxLLHkuZGVwdGgrLjI1Kl8ueEhlaWdodCksUD1NYXRoLm1heChQLF8uc3ViMik7dmFyIGFlPV8uZGVmYXVsdFJ1bGVUaGlja25lc3MsbmU9NCphZTtpZihBLXkuZGVwdGgtKFQuaGVpZ2h0LVApPG5lKXtQPW5lLShBLXkuZGVwdGgpK1QuaGVpZ2h0O3ZhciBzZT0uOCpfLnhIZWlnaHQtKEEteS5kZXB0aCk7c2U+MCYmKEErPXNlLFAtPXNlKX12YXIgZGU9W3t0eXBlOiJlbGVtIixlbGVtOlQsc2hpZnQ6UCxtYXJnaW5SaWdodDppZSxtYXJnaW5MZWZ0Om9lfSx7dHlwZToiZWxlbSIsZWxlbTp5LHNoaWZ0Oi1BLG1hcmdpblJpZ2h0OmllfV07YmU9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46ZGV9LHMpfWVsc2UgaWYoVCl7UD1NYXRoLm1heChQLF8uc3ViMSxULmhlaWdodC0uOCpfLnhIZWlnaHQpO3ZhciBYPVt7dHlwZToiZWxlbSIsZWxlbTpULG1hcmdpbkxlZnQ6b2UsbWFyZ2luUmlnaHQ6aWV9XTtiZT16bi5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToic2hpZnQiLHBvc2l0aW9uRGF0YTpQLGNoaWxkcmVuOlh9LHMpfWVsc2UgaWYoeSlBPU1hdGgubWF4KEEsSyx5LmRlcHRoKy4yNSpfLnhIZWlnaHQpLGJlPXpuLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJzaGlmdCIscG9zaXRpb25EYXRhOi1BLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTp5LG1hcmdpblJpZ2h0OmllfV19LHMpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJzdXBzdWIgbXVzdCBoYXZlIGVpdGhlciBzdXAgb3Igc3ViLiIpO3ZhciBnZT11YmUoYiwicmlnaHQiKXx8Im1vcmQiO3JldHVybiB6bi5tYWtlU3BhbihbZ2VdLFtiLHpuLm1ha2VTcGFuKFsibXN1cHN1YiJdLFtiZV0pXSxzKX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1PSExLGQscDtpLmJhc2UmJmkuYmFzZS50eXBlPT09Imhvcml6QnJhY2UiJiYocD0hIWkuc3VwLHA9PT1pLmJhc2UuaXNPdmVyJiYodT0hMCxkPWkuYmFzZS5pc092ZXIpKSxpLmJhc2UmJihpLmJhc2UudHlwZT09PSJvcCJ8fGkuYmFzZS50eXBlPT09Im9wZXJhdG9ybmFtZSIpJiYoaS5iYXNlLnBhcmVudElzU3VwU3ViPSEwKTt2YXIgdj1bTGwoaS5iYXNlLHMpXTtpLnN1YiYmdi5wdXNoKExsKGkuc3ViLHMpKSxpLnN1cCYmdi5wdXNoKExsKGkuc3VwLHMpKTt2YXIgYjtpZih1KWI9ZD8ibW92ZXIiOiJtdW5kZXIiO2Vsc2UgaWYoaS5zdWIpaWYoaS5zdXApe3ZhciBfPWkuYmFzZTtfJiZfLnR5cGU9PT0ib3AiJiZfLmxpbWl0cyYmcy5zdHlsZT09PVRhLkRJU1BMQVl8fF8mJl8udHlwZT09PSJvcGVyYXRvcm5hbWUiJiZfLmFsd2F5c0hhbmRsZVN1cFN1YiYmKHMuc3R5bGU9PT1UYS5ESVNQTEFZfHxfLmxpbWl0cyk/Yj0ibXVuZGVyb3ZlciI6Yj0ibXN1YnN1cCJ9ZWxzZXt2YXIgVD1pLmJhc2U7VCYmVC50eXBlPT09Im9wIiYmVC5saW1pdHMmJihzLnN0eWxlPT09VGEuRElTUExBWXx8VC5hbHdheXNIYW5kbGVTdXBTdWIpfHxUJiZULnR5cGU9PT0ib3BlcmF0b3JuYW1lIiYmVC5hbHdheXNIYW5kbGVTdXBTdWImJihULmxpbWl0c3x8cy5zdHlsZT09PVRhLkRJU1BMQVkpP2I9Im11bmRlciI6Yj0ibXN1YiJ9ZWxzZXt2YXIgeT1pLmJhc2U7eSYmeS50eXBlPT09Im9wIiYmeS5saW1pdHMmJihzLnN0eWxlPT09VGEuRElTUExBWXx8eS5hbHdheXNIYW5kbGVTdXBTdWIpfHx5JiZ5LnR5cGU9PT0ib3BlcmF0b3JuYW1lIiYmeS5hbHdheXNIYW5kbGVTdXBTdWImJih5LmxpbWl0c3x8cy5zdHlsZT09PVRhLkRJU1BMQVkpP2I9Im1vdmVyIjpiPSJtc3VwIn1yZXR1cm4gbmV3IHZpLk1hdGhOb2RlKGIsdil9fSksekMoe3R5cGU6ImF0b20iLGh0bWxCdWlsZGVyKGkscyl7cmV0dXJuIHpuLm1hdGhzeW0oaS50ZXh0LGkubW9kZSxzLFsibSIraS5mYW1pbHldKX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1PW5ldyB2aS5NYXRoTm9kZSgibW8iLFtSdihpLnRleHQsaS5tb2RlKV0pO2lmKGkuZmFtaWx5PT09ImJpbiIpe3ZhciBkPWZiZShpLHMpO2Q9PT0iYm9sZC1pdGFsaWMiJiZ1LnNldEF0dHJpYnV0ZSgibWF0aHZhcmlhbnQiLGQpfWVsc2UgaS5mYW1pbHk9PT0icHVuY3QiP3Uuc2V0QXR0cmlidXRlKCJzZXBhcmF0b3IiLCJ0cnVlIik6KGkuZmFtaWx5PT09Im9wZW4ifHxpLmZhbWlseT09PSJjbG9zZSIpJiZ1LnNldEF0dHJpYnV0ZSgic3RyZXRjaHkiLCJmYWxzZSIpO3JldHVybiB1fX0pO3ZhciBpcWU9e21pOiJpdGFsaWMiLG1uOiJub3JtYWwiLG10ZXh0OiJub3JtYWwifTt6Qyh7dHlwZToibWF0aG9yZCIsaHRtbEJ1aWxkZXIoaSxzKXtyZXR1cm4gem4ubWFrZU9yZChpLHMsIm1hdGhvcmQiKX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1PW5ldyB2aS5NYXRoTm9kZSgibWkiLFtSdihpLnRleHQsaS5tb2RlLHMpXSksZD1mYmUoaSxzKXx8Iml0YWxpYyI7cmV0dXJuIGQhPT1pcWVbdS50eXBlXSYmdS5zZXRBdHRyaWJ1dGUoIm1hdGh2YXJpYW50IixkKSx1fX0pLHpDKHt0eXBlOiJ0ZXh0b3JkIixodG1sQnVpbGRlcihpLHMpe3JldHVybiB6bi5tYWtlT3JkKGkscywidGV4dG9yZCIpfSxtYXRobWxCdWlsZGVyKGkscyl7dmFyIHU9UnYoaS50ZXh0LGkubW9kZSxzKSxkPWZiZShpLHMpfHwibm9ybWFsIixwO3JldHVybiBpLm1vZGU9PT0idGV4dCI/cD1uZXcgdmkuTWF0aE5vZGUoIm10ZXh0IixbdV0pOi9bMC05XS8udGVzdChpLnRleHQpP3A9bmV3IHZpLk1hdGhOb2RlKCJtbiIsW3VdKTppLnRleHQ9PT0iXFxwcmltZSI/cD1uZXcgdmkuTWF0aE5vZGUoIm1vIixbdV0pOnA9bmV3IHZpLk1hdGhOb2RlKCJtaSIsW3VdKSxkIT09aXFlW3AudHlwZV0mJnAuc2V0QXR0cmlidXRlKCJtYXRodmFyaWFudCIsZCkscH19KTt2YXIgTWJlPXsiXFxub2JyZWFrIjoibm9icmVhayIsIlxcYWxsb3dicmVhayI6ImFsbG93YnJlYWsifSxEYmU9eyIgIjp7fSwiXFwgIjp7fSwifiI6e2NsYXNzTmFtZToibm9icmVhayJ9LCJcXHNwYWNlIjp7fSwiXFxub2JyZWFrc3BhY2UiOntjbGFzc05hbWU6Im5vYnJlYWsifX07ekMoe3R5cGU6InNwYWNpbmciLGh0bWxCdWlsZGVyKGkscyl7aWYoRGJlLmhhc093blByb3BlcnR5KGkudGV4dCkpe3ZhciB1PURiZVtpLnRleHRdLmNsYXNzTmFtZXx8IiI7aWYoaS5tb2RlPT09InRleHQiKXt2YXIgZD16bi5tYWtlT3JkKGkscywidGV4dG9yZCIpO3JldHVybiBkLmNsYXNzZXMucHVzaCh1KSxkfWVsc2UgcmV0dXJuIHpuLm1ha2VTcGFuKFsibXNwYWNlIix1XSxbem4ubWF0aHN5bShpLnRleHQsaS5tb2RlLHMpXSxzKX1lbHNle2lmKE1iZS5oYXNPd25Qcm9wZXJ0eShpLnRleHQpKXJldHVybiB6bi5tYWtlU3BhbihbIm1zcGFjZSIsTWJlW2kudGV4dF1dLFtdLHMpO3Rocm93IG5ldyBDaSgnVW5rbm93biB0eXBlIG9mIHNwYWNlICInK2kudGV4dCsnIicpfX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1O2lmKERiZS5oYXNPd25Qcm9wZXJ0eShpLnRleHQpKXU9bmV3IHZpLk1hdGhOb2RlKCJtdGV4dCIsW25ldyB2aS5UZXh0Tm9kZSgiwqAiKV0pO2Vsc2V7aWYoTWJlLmhhc093blByb3BlcnR5KGkudGV4dCkpcmV0dXJuIG5ldyB2aS5NYXRoTm9kZSgibXNwYWNlIik7dGhyb3cgbmV3IENpKCdVbmtub3duIHR5cGUgb2Ygc3BhY2UgIicraS50ZXh0KyciJyl9cmV0dXJuIHV9fSk7dmFyIHNxZT0oKT0+e3ZhciBpPW5ldyB2aS5NYXRoTm9kZSgibXRkIixbXSk7cmV0dXJuIGkuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIjUwJSIpLGl9O3pDKHt0eXBlOiJ0YWciLG1hdGhtbEJ1aWxkZXIoaSxzKXt2YXIgdT1uZXcgdmkuTWF0aE5vZGUoIm10YWJsZSIsW25ldyB2aS5NYXRoTm9kZSgibXRyIixbc3FlKCksbmV3IHZpLk1hdGhOb2RlKCJtdGQiLFtfOShpLmJvZHkscyldKSxzcWUoKSxuZXcgdmkuTWF0aE5vZGUoIm10ZCIsW185KGkudGFnLHMpXSldKV0pO3JldHVybiB1LnNldEF0dHJpYnV0ZSgid2lkdGgiLCIxMDAlIiksdX19KTt2YXIgYXFlPXsiXFx0ZXh0Ijp2b2lkIDAsIlxcdGV4dHJtIjoidGV4dHJtIiwiXFx0ZXh0c2YiOiJ0ZXh0c2YiLCJcXHRleHR0dCI6InRleHR0dCIsIlxcdGV4dG5vcm1hbCI6InRleHRybSJ9LG9xZT17IlxcdGV4dGJmIjoidGV4dGJmIiwiXFx0ZXh0bWQiOiJ0ZXh0bWQifSxiVnQ9eyJcXHRleHRpdCI6InRleHRpdCIsIlxcdGV4dHVwIjoidGV4dHVwIn0sY3FlPShpLHMpPT57dmFyIHU9aS5mb250O3JldHVybiB1P2FxZVt1XT9zLndpdGhUZXh0Rm9udEZhbWlseShhcWVbdV0pOm9xZVt1XT9zLndpdGhUZXh0Rm9udFdlaWdodChvcWVbdV0pOnMud2l0aFRleHRGb250U2hhcGUoYlZ0W3VdKTpzfTtKaSh7dHlwZToidGV4dCIsbmFtZXM6WyJcXHRleHQiLCJcXHRleHRybSIsIlxcdGV4dHNmIiwiXFx0ZXh0dHQiLCJcXHRleHRub3JtYWwiLCJcXHRleHRiZiIsIlxcdGV4dG1kIiwiXFx0ZXh0aXQiLCJcXHRleHR1cCJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJ0ZXh0Il0sYWxsb3dlZEluQXJndW1lbnQ6ITAsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcihpLHMpe3ZhcntwYXJzZXI6dSxmdW5jTmFtZTpkfT1pLHA9c1swXTtyZXR1cm57dHlwZToidGV4dCIsbW9kZTp1Lm1vZGUsYm9keTpYZihwKSxmb250OmR9fSxodG1sQnVpbGRlcihpLHMpe3ZhciB1PWNxZShpLHMpLGQ9ZDEoaS5ib2R5LHUsITApO3JldHVybiB6bi5tYWtlU3BhbihbIm1vcmQiLCJ0ZXh0Il0sZCx1KX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1PWNxZShpLHMpO3JldHVybiBfOShpLmJvZHksdSl9fSksSmkoe3R5cGU6InVuZGVybGluZSIsbmFtZXM6WyJcXHVuZGVybGluZSJdLHByb3BzOntudW1BcmdzOjEsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcihpLHMpe3ZhcntwYXJzZXI6dX09aTtyZXR1cm57dHlwZToidW5kZXJsaW5lIixtb2RlOnUubW9kZSxib2R5OnNbMF19fSxodG1sQnVpbGRlcihpLHMpe3ZhciB1PXV1KGkuYm9keSxzKSxkPXpuLm1ha2VMaW5lU3BhbigidW5kZXJsaW5lLWxpbmUiLHMpLHA9cy5mb250TWV0cmljcygpLmRlZmF1bHRSdWxlVGhpY2tuZXNzLHY9em4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6InRvcCIscG9zaXRpb25EYXRhOnUuaGVpZ2h0LGNoaWxkcmVuOlt7dHlwZToia2VybiIsc2l6ZTpwfSx7dHlwZToiZWxlbSIsZWxlbTpkfSx7dHlwZToia2VybiIsc2l6ZTozKnB9LHt0eXBlOiJlbGVtIixlbGVtOnV9XX0scyk7cmV0dXJuIHpuLm1ha2VTcGFuKFsibW9yZCIsInVuZGVybGluZSJdLFt2XSxzKX0sbWF0aG1sQnVpbGRlcihpLHMpe3ZhciB1PW5ldyB2aS5NYXRoTm9kZSgibW8iLFtuZXcgdmkuVGV4dE5vZGUoIuKAviIpXSk7dS5zZXRBdHRyaWJ1dGUoInN0cmV0Y2h5IiwidHJ1ZSIpO3ZhciBkPW5ldyB2aS5NYXRoTm9kZSgibXVuZGVyIixbTGwoaS5ib2R5LHMpLHVdKTtyZXR1cm4gZC5zZXRBdHRyaWJ1dGUoImFjY2VudHVuZGVyIiwidHJ1ZSIpLGR9fSksSmkoe3R5cGU6InZjZW50ZXIiLG5hbWVzOlsiXFx2Y2VudGVyIl0scHJvcHM6e251bUFyZ3M6MSxhcmdUeXBlczpbIm9yaWdpbmFsIl0sYWxsb3dlZEluVGV4dDohMX0saGFuZGxlcihpLHMpe3ZhcntwYXJzZXI6dX09aTtyZXR1cm57dHlwZToidmNlbnRlciIsbW9kZTp1Lm1vZGUsYm9keTpzWzBdfX0saHRtbEJ1aWxkZXIoaSxzKXt2YXIgdT11dShpLmJvZHkscyksZD1zLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCxwPS41Kih1LmhlaWdodC1kLSh1LmRlcHRoK2QpKTtyZXR1cm4gem4ubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6InNoaWZ0Iixwb3NpdGlvbkRhdGE6cCxjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06dX1dfSxzKX0sbWF0aG1sQnVpbGRlcihpLHMpe3JldHVybiBuZXcgdmkuTWF0aE5vZGUoIm1wYWRkZWQiLFtMbChpLmJvZHkscyldLFsidmNlbnRlciJdKX19KSxKaSh7dHlwZToidmVyYiIsbmFtZXM6WyJcXHZlcmIiXSxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXIoaSxzLHUpe3Rocm93IG5ldyBDaSgiXFx2ZXJiIGVuZGVkIGJ5IGVuZCBvZiBsaW5lIGluc3RlYWQgb2YgbWF0Y2hpbmcgZGVsaW1pdGVyIil9LGh0bWxCdWlsZGVyKGkscyl7Zm9yKHZhciB1PXVxZShpKSxkPVtdLHA9cy5oYXZpbmdTdHlsZShzLnN0eWxlLnRleHQoKSksdj0wO3Y8dS5sZW5ndGg7disrKXt2YXIgYj11W3ZdO2I9PT0ifiImJihiPSJcXHRleHRhc2NpaXRpbGRlIiksZC5wdXNoKHpuLm1ha2VTeW1ib2woYiwiVHlwZXdyaXRlci1SZWd1bGFyIixpLm1vZGUscCxbIm1vcmQiLCJ0ZXh0dHQiXSkpfXJldHVybiB6bi5tYWtlU3BhbihbIm1vcmQiLCJ0ZXh0Il0uY29uY2F0KHAuc2l6aW5nQ2xhc3NlcyhzKSksem4udHJ5Q29tYmluZUNoYXJzKGQpLHApfSxtYXRobWxCdWlsZGVyKGkscyl7dmFyIHU9bmV3IHZpLlRleHROb2RlKHVxZShpKSksZD1uZXcgdmkuTWF0aE5vZGUoIm10ZXh0IixbdV0pO3JldHVybiBkLnNldEF0dHJpYnV0ZSgibWF0aHZhcmlhbnQiLCJtb25vc3BhY2UiKSxkfX0pO3ZhciB1cWU9aT0+aS5ib2R5LnJlcGxhY2UoLyAvZyxpLnN0YXI/IuKQoyI6IsKgIiksTDk9ZHplLGxxZT1gWyBccgoJXWAsbVZ0PSJcXFxcW2EtekEtWkBdKyIsdlZ0PSJcXFxcW15cdUQ4MDAtXHVERkZGXSIsd1Z0PSIoIittVnQrIikiK2xxZSsiKiIseVZ0PWBcXFxcKAp8WyBccgldKwo/KVsgXHIJXSpgLEliZT0iW8yALc2vXSIseFZ0PW5ldyBSZWdFeHAoSWJlKyIrJCIpLGtWdD0iKCIrbHFlKyIrKXwiKyh5VnQrInwiKSsiKFshLVxcW1xcXS3igKfigKot7Z+/76SALe+/v10iKyhJYmUrIioiKSsifFtcdUQ4MDAtXHVEQkZGXVtcdURDMDAtXHVERkZGXSIrKEliZSsiKiIpKyJ8XFxcXHZlcmJcXCooW15dKS4qP1xcNHxcXFxcdmVyYihbXiphLXpBLVpdKS4qP1xcNSIrKCJ8Iit3VnQpKygifCIrdlZ0KyIpIik7Y2xhc3MgaHFle2NvbnN0cnVjdG9yKHMsdSl7dGhpcy5pbnB1dD12b2lkIDAsdGhpcy5zZXR0aW5ncz12b2lkIDAsdGhpcy50b2tlblJlZ2V4PXZvaWQgMCx0aGlzLmNhdGNvZGVzPXZvaWQgMCx0aGlzLmlucHV0PXMsdGhpcy5zZXR0aW5ncz11LHRoaXMudG9rZW5SZWdleD1uZXcgUmVnRXhwKGtWdCwiZyIpLHRoaXMuY2F0Y29kZXM9eyIlIjoxNCwifiI6MTN9fXNldENhdGNvZGUocyx1KXt0aGlzLmNhdGNvZGVzW3NdPXV9bGV4KCl7dmFyIHM9dGhpcy5pbnB1dCx1PXRoaXMudG9rZW5SZWdleC5sYXN0SW5kZXg7aWYodT09PXMubGVuZ3RoKXJldHVybiBuZXcgVTQoIkVPRiIsbmV3IGxtKHRoaXMsdSx1KSk7dmFyIGQ9dGhpcy50b2tlblJlZ2V4LmV4ZWMocyk7aWYoZD09PW51bGx8fGQuaW5kZXghPT11KXRocm93IG5ldyBDaSgiVW5leHBlY3RlZCBjaGFyYWN0ZXI6ICciK3NbdV0rIiciLG5ldyBVNChzW3VdLG5ldyBsbSh0aGlzLHUsdSsxKSkpO3ZhciBwPWRbNl18fGRbM118fChkWzJdPyJcXCAiOiIgIik7aWYodGhpcy5jYXRjb2Rlc1twXT09PTE0KXt2YXIgdj1zLmluZGV4T2YoYApgLHRoaXMudG9rZW5SZWdleC5sYXN0SW5kZXgpO3JldHVybiB2PT09LTE/KHRoaXMudG9rZW5SZWdleC5sYXN0SW5kZXg9cy5sZW5ndGgsdGhpcy5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoImNvbW1lbnRBdEVuZCIsIiUgY29tbWVudCBoYXMgbm8gdGVybWluYXRpbmcgbmV3bGluZTsgTGFUZVggd291bGQgZmFpbCBiZWNhdXNlIG9mIGNvbW1lbnRpbmcgdGhlIGVuZCBvZiBtYXRoIG1vZGUgKGUuZy4gJCkiKSk6dGhpcy50b2tlblJlZ2V4Lmxhc3RJbmRleD12KzEsdGhpcy5sZXgoKX1yZXR1cm4gbmV3IFU0KHAsbmV3IGxtKHRoaXMsdSx0aGlzLnRva2VuUmVnZXgubGFzdEluZGV4KSl9fWNsYXNzIEVWdHtjb25zdHJ1Y3RvcihzLHUpe3M9PT12b2lkIDAmJihzPXt9KSx1PT09dm9pZCAwJiYodT17fSksdGhpcy5jdXJyZW50PXZvaWQgMCx0aGlzLmJ1aWx0aW5zPXZvaWQgMCx0aGlzLnVuZGVmU3RhY2s9dm9pZCAwLHRoaXMuY3VycmVudD11LHRoaXMuYnVpbHRpbnM9cyx0aGlzLnVuZGVmU3RhY2s9W119YmVnaW5Hcm91cCgpe3RoaXMudW5kZWZTdGFjay5wdXNoKHt9KX1lbmRHcm91cCgpe2lmKHRoaXMudW5kZWZTdGFjay5sZW5ndGg9PT0wKXRocm93IG5ldyBDaSgiVW5iYWxhbmNlZCBuYW1lc3BhY2UgZGVzdHJ1Y3Rpb246IGF0dGVtcHQgdG8gcG9wIGdsb2JhbCBuYW1lc3BhY2U7IHBsZWFzZSByZXBvcnQgdGhpcyBhcyBhIGJ1ZyIpO3ZhciBzPXRoaXMudW5kZWZTdGFjay5wb3AoKTtmb3IodmFyIHUgaW4gcylzLmhhc093blByb3BlcnR5KHUpJiYoc1t1XT09bnVsbD9kZWxldGUgdGhpcy5jdXJyZW50W3VdOnRoaXMuY3VycmVudFt1XT1zW3VdKX1lbmRHcm91cHMoKXtmb3IoO3RoaXMudW5kZWZTdGFjay5sZW5ndGg+MDspdGhpcy5lbmRHcm91cCgpfWhhcyhzKXtyZXR1cm4gdGhpcy5jdXJyZW50Lmhhc093blByb3BlcnR5KHMpfHx0aGlzLmJ1aWx0aW5zLmhhc093blByb3BlcnR5KHMpfWdldChzKXtyZXR1cm4gdGhpcy5jdXJyZW50Lmhhc093blByb3BlcnR5KHMpP3RoaXMuY3VycmVudFtzXTp0aGlzLmJ1aWx0aW5zW3NdfXNldChzLHUsZCl7aWYoZD09PXZvaWQgMCYmKGQ9ITEpLGQpe2Zvcih2YXIgcD0wO3A8dGhpcy51bmRlZlN0YWNrLmxlbmd0aDtwKyspZGVsZXRlIHRoaXMudW5kZWZTdGFja1twXVtzXTt0aGlzLnVuZGVmU3RhY2subGVuZ3RoPjAmJih0aGlzLnVuZGVmU3RhY2tbdGhpcy51bmRlZlN0YWNrLmxlbmd0aC0xXVtzXT11KX1lbHNle3ZhciB2PXRoaXMudW5kZWZTdGFja1t0aGlzLnVuZGVmU3RhY2subGVuZ3RoLTFdO3YmJiF2Lmhhc093blByb3BlcnR5KHMpJiYodltzXT10aGlzLmN1cnJlbnRbc10pfXU9PW51bGw/ZGVsZXRlIHRoaXMuY3VycmVudFtzXTp0aGlzLmN1cnJlbnRbc109dX19dmFyIFRWdD0kemU7ZXQoIlxcbm9leHBhbmQiLGZ1bmN0aW9uKGkpe3ZhciBzPWkucG9wVG9rZW4oKTtyZXR1cm4gaS5pc0V4cGFuZGFibGUocy50ZXh0KSYmKHMubm9leHBhbmQ9ITAscy50cmVhdEFzUmVsYXg9ITApLHt0b2tlbnM6W3NdLG51bUFyZ3M6MH19KSxldCgiXFxleHBhbmRhZnRlciIsZnVuY3Rpb24oaSl7dmFyIHM9aS5wb3BUb2tlbigpO3JldHVybiBpLmV4cGFuZE9uY2UoITApLHt0b2tlbnM6W3NdLG51bUFyZ3M6MH19KSxldCgiXFxAZmlyc3RvZnR3byIsZnVuY3Rpb24oaSl7dmFyIHM9aS5jb25zdW1lQXJncygyKTtyZXR1cm57dG9rZW5zOnNbMF0sbnVtQXJnczowfX0pLGV0KCJcXEBzZWNvbmRvZnR3byIsZnVuY3Rpb24oaSl7dmFyIHM9aS5jb25zdW1lQXJncygyKTtyZXR1cm57dG9rZW5zOnNbMV0sbnVtQXJnczowfX0pLGV0KCJcXEBpZm5leHRjaGFyIixmdW5jdGlvbihpKXt2YXIgcz1pLmNvbnN1bWVBcmdzKDMpO2kuY29uc3VtZVNwYWNlcygpO3ZhciB1PWkuZnV0dXJlKCk7cmV0dXJuIHNbMF0ubGVuZ3RoPT09MSYmc1swXVswXS50ZXh0PT09dS50ZXh0P3t0b2tlbnM6c1sxXSxudW1BcmdzOjB9Ont0b2tlbnM6c1syXSxudW1BcmdzOjB9fSksZXQoIlxcQGlmc3RhciIsIlxcQGlmbmV4dGNoYXIgKntcXEBmaXJzdG9mdHdveyMxfX0iKSxldCgiXFxUZXh0T3JNYXRoIixmdW5jdGlvbihpKXt2YXIgcz1pLmNvbnN1bWVBcmdzKDIpO3JldHVybiBpLm1vZGU9PT0idGV4dCI/e3Rva2VuczpzWzBdLG51bUFyZ3M6MH06e3Rva2VuczpzWzFdLG51bUFyZ3M6MH19KTt2YXIgZnFlPXswOjAsMToxLDI6MiwzOjMsNDo0LDU6NSw2OjYsNzo3LDg6OCw5OjksYToxMCxBOjEwLGI6MTEsQjoxMSxjOjEyLEM6MTIsZDoxMyxEOjEzLGU6MTQsRToxNCxmOjE1LEY6MTV9O2V0KCJcXGNoYXIiLGZ1bmN0aW9uKGkpe3ZhciBzPWkucG9wVG9rZW4oKSx1LGQ9IiI7aWYocy50ZXh0PT09IiciKXU9OCxzPWkucG9wVG9rZW4oKTtlbHNlIGlmKHMudGV4dD09PSciJyl1PTE2LHM9aS5wb3BUb2tlbigpO2Vsc2UgaWYocy50ZXh0PT09ImAiKWlmKHM9aS5wb3BUb2tlbigpLHMudGV4dFswXT09PSJcXCIpZD1zLnRleHQuY2hhckNvZGVBdCgxKTtlbHNle2lmKHMudGV4dD09PSJFT0YiKXRocm93IG5ldyBDaSgiXFxjaGFyYCBtaXNzaW5nIGFyZ3VtZW50Iik7ZD1zLnRleHQuY2hhckNvZGVBdCgwKX1lbHNlIHU9MTA7aWYodSl7aWYoZD1mcWVbcy50ZXh0XSxkPT1udWxsfHxkPj11KXRocm93IG5ldyBDaSgiSW52YWxpZCBiYXNlLSIrdSsiIGRpZ2l0ICIrcy50ZXh0KTtmb3IodmFyIHA7KHA9ZnFlW2kuZnV0dXJlKCkudGV4dF0pIT1udWxsJiZwPHU7KWQqPXUsZCs9cCxpLnBvcFRva2VuKCl9cmV0dXJuIlxcQGNoYXJ7IitkKyJ9In0pO3ZhciBPYmU9KGkscyx1KT0+e3ZhciBkPWkuY29uc3VtZUFyZygpLnRva2VucztpZihkLmxlbmd0aCE9PTEpdGhyb3cgbmV3IENpKCJcXG5ld2NvbW1hbmQncyBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgbWFjcm8gbmFtZSIpO3ZhciBwPWRbMF0udGV4dCx2PWkuaXNEZWZpbmVkKHApO2lmKHYmJiFzKXRocm93IG5ldyBDaSgiXFxuZXdjb21tYW5keyIrcCsifSBhdHRlbXB0aW5nIHRvIHJlZGVmaW5lICIrKHArIjsgdXNlIFxccmVuZXdjb21tYW5kIikpO2lmKCF2JiYhdSl0aHJvdyBuZXcgQ2koIlxccmVuZXdjb21tYW5keyIrcCsifSB3aGVuIGNvbW1hbmQgIitwKyIgZG9lcyBub3QgeWV0IGV4aXN0OyB1c2UgXFxuZXdjb21tYW5kIik7dmFyIGI9MDtpZihkPWkuY29uc3VtZUFyZygpLnRva2VucyxkLmxlbmd0aD09PTEmJmRbMF0udGV4dD09PSJbIil7Zm9yKHZhciB5PSIiLFQ9aS5leHBhbmROZXh0VG9rZW4oKTtULnRleHQhPT0iXSImJlQudGV4dCE9PSJFT0YiOyl5Kz1ULnRleHQsVD1pLmV4cGFuZE5leHRUb2tlbigpO2lmKCF5Lm1hdGNoKC9eXHMqWzAtOV0rXHMqJC8pKXRocm93IG5ldyBDaSgiSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzOiAiK3kpO2I9cGFyc2VJbnQoeSksZD1pLmNvbnN1bWVBcmcoKS50b2tlbnN9cmV0dXJuIGkubWFjcm9zLnNldChwLHt0b2tlbnM6ZCxudW1BcmdzOmJ9KSwiIn07ZXQoIlxcbmV3Y29tbWFuZCIsaT0+T2JlKGksITEsITApKSxldCgiXFxyZW5ld2NvbW1hbmQiLGk9Pk9iZShpLCEwLCExKSksZXQoIlxccHJvdmlkZWNvbW1hbmQiLGk9Pk9iZShpLCEwLCEwKSksZXQoIlxcbWVzc2FnZSIsaT0+e3ZhciBzPWkuY29uc3VtZUFyZ3MoMSlbMF07cmV0dXJuIGNvbnNvbGUubG9nKHMucmV2ZXJzZSgpLm1hcCh1PT51LnRleHQpLmpvaW4oIiIpKSwiIn0pLGV0KCJcXGVycm1lc3NhZ2UiLGk9Pnt2YXIgcz1pLmNvbnN1bWVBcmdzKDEpWzBdO3JldHVybiBjb25zb2xlLmVycm9yKHMucmV2ZXJzZSgpLm1hcCh1PT51LnRleHQpLmpvaW4oIiIpKSwiIn0pLGV0KCJcXHNob3ciLGk9Pnt2YXIgcz1pLnBvcFRva2VuKCksdT1zLnRleHQ7cmV0dXJuIGNvbnNvbGUubG9nKHMsaS5tYWNyb3MuZ2V0KHUpLEw5W3VdLFVsLm1hdGhbdV0sVWwudGV4dFt1XSksIiJ9KSxldCgiXFxiZ3JvdXAiLCJ7IiksZXQoIlxcZWdyb3VwIiwifSIpLGV0KCJ+IiwiXFxub2JyZWFrc3BhY2UiKSxldCgiXFxscSIsImAiKSxldCgiXFxycSIsIiciKSxldCgiXFxhYSIsIlxcciBhIiksZXQoIlxcQUEiLCJcXHIgQSIpLGV0KCJcXHRleHRjb3B5cmlnaHQiLCJcXGh0bWxAbWF0aG1se1xcdGV4dGNpcmNsZWR7Y319e1xcY2hhcmDCqX0iKSxldCgiXFxjb3B5cmlnaHQiLCJcXFRleHRPck1hdGh7XFx0ZXh0Y29weXJpZ2h0fXtcXHRleHR7XFx0ZXh0Y29weXJpZ2h0fX0iKSxldCgiXFx0ZXh0cmVnaXN0ZXJlZCIsIlxcaHRtbEBtYXRobWx7XFx0ZXh0Y2lyY2xlZHtcXHNjcmlwdHNpemUgUn19e1xcY2hhcmDCrn0iKSxldCgi4oSsIiwiXFxtYXRoc2Nye0J9IiksZXQoIuKEsCIsIlxcbWF0aHNjcntFfSIpLGV0KCLihLEiLCJcXG1hdGhzY3J7Rn0iKSxldCgi4oSLIiwiXFxtYXRoc2Nye0h9IiksZXQoIuKEkCIsIlxcbWF0aHNjcntJfSIpLGV0KCLihJIiLCJcXG1hdGhzY3J7TH0iKSxldCgi4oSzIiwiXFxtYXRoc2Nye019IiksZXQoIuKEmyIsIlxcbWF0aHNjcntSfSIpLGV0KCLihK0iLCJcXG1hdGhmcmFre0N9IiksZXQoIuKEjCIsIlxcbWF0aGZyYWt7SH0iKSxldCgi4oSoIiwiXFxtYXRoZnJha3tafSIpLGV0KCJcXEJiYmsiLCJcXEJiYntrfSIpLGV0KCLCtyIsIlxcY2RvdHAiKSxldCgiXFxsbGFwIiwiXFxtYXRobGxhcHtcXHRleHRybXsjMX19IiksZXQoIlxccmxhcCIsIlxcbWF0aHJsYXB7XFx0ZXh0cm17IzF9fSIpLGV0KCJcXGNsYXAiLCJcXG1hdGhjbGFwe1xcdGV4dHJteyMxfX0iKSxldCgiXFxtYXRoc3RydXQiLCJcXHZwaGFudG9teyh9IiksZXQoIlxcdW5kZXJiYXIiLCJcXHVuZGVybGluZXtcXHRleHR7IzF9fSIpLGV0KCJcXG5vdCIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcbWF0aHJsYXBcXEBub3R9fXtcXGNoYXIiMzM4fScpLGV0KCJcXG5lcSIsIlxcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcbm90PX19e1xcbWF0aHJlbHtcXGNoYXJg4omgfX0iKSxldCgiXFxuZSIsIlxcbmVxIiksZXQoIuKJoCIsIlxcbmVxIiksZXQoIlxcbm90aW4iLCJcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHt7XFxpbn1cXG1hdGhsbGFwey9cXG1za2lwMW11fX19e1xcbWF0aHJlbHtcXGNoYXJg4oiJfX0iKSxldCgi4oiJIiwiXFxub3RpbiIpLGV0KCLiiZgiLCJcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHs9XFxrZXJuey0xZW19XFxyYWlzZWJveHswLjRlbX17JFxcc2NyaXB0c2l6ZVxcZnJvd24kfX19e1xcbWF0aHJlbHtcXGNoYXJg4omYfX0iKSxldCgi4omZIiwiXFxodG1sQG1hdGhtbHtcXHN0YWNrcmVse1xcdGlueVxcd2VkZ2V9ez19fXtcXG1hdGhyZWx7XFxjaGFyYOKJmH19IiksZXQoIuKJmiIsIlxcaHRtbEBtYXRobWx7XFxzdGFja3JlbHtcXHRpbnlcXHZlZX17PX19e1xcbWF0aHJlbHtcXGNoYXJg4omafX0iKSxldCgi4ombIiwiXFxodG1sQG1hdGhtbHtcXHN0YWNrcmVse1xcc2NyaXB0c2l6ZVxcc3Rhcn17PX19e1xcbWF0aHJlbHtcXGNoYXJg4ombfX0iKSxldCgi4omdIiwiXFxodG1sQG1hdGhtbHtcXHN0YWNrcmVse1xcdGlueVxcbWF0aHJte2RlZn19ez19fXtcXG1hdGhyZWx7XFxjaGFyYOKJnX19IiksZXQoIuKJniIsIlxcaHRtbEBtYXRobWx7XFxzdGFja3JlbHtcXHRpbnlcXG1hdGhybXttfX17PX19e1xcbWF0aHJlbHtcXGNoYXJg4omefX0iKSxldCgi4omfIiwiXFxodG1sQG1hdGhtbHtcXHN0YWNrcmVse1xcdGlueT99ez19fXtcXG1hdGhyZWx7XFxjaGFyYOKJn319IiksZXQoIuKfgiIsIlxccGVycCIpLGV0KCLigLwiLCJcXG1hdGhjbG9zZXshXFxta2Vybi0wLjhtdSF9IiksZXQoIuKIjCIsIlxcbm90bmkiKSxldCgi4oycIiwiXFx1bGNvcm5lciIpLGV0KCLijJ0iLCJcXHVyY29ybmVyIiksZXQoIuKMniIsIlxcbGxjb3JuZXIiKSxldCgi4oyfIiwiXFxscmNvcm5lciIpLGV0KCLCqSIsIlxcY29weXJpZ2h0IiksZXQoIsKuIiwiXFx0ZXh0cmVnaXN0ZXJlZCIpLGV0KCLvuI8iLCJcXHRleHRyZWdpc3RlcmVkIiksZXQoIlxcdWxjb3JuZXIiLCdcXGh0bWxAbWF0aG1se1xcQHVsY29ybmVyfXtcXG1hdGhvcHtcXGNoYXIiMjMxY319JyksZXQoIlxcdXJjb3JuZXIiLCdcXGh0bWxAbWF0aG1se1xcQHVyY29ybmVyfXtcXG1hdGhvcHtcXGNoYXIiMjMxZH19JyksZXQoIlxcbGxjb3JuZXIiLCdcXGh0bWxAbWF0aG1se1xcQGxsY29ybmVyfXtcXG1hdGhvcHtcXGNoYXIiMjMxZX19JyksZXQoIlxcbHJjb3JuZXIiLCdcXGh0bWxAbWF0aG1se1xcQGxyY29ybmVyfXtcXG1hdGhvcHtcXGNoYXIiMjMxZn19JyksZXQoIlxcdmRvdHMiLCJcXG1hdGhvcmR7XFx2YXJ2ZG90c1xccnVsZXswcHR9ezE1cHR9fSIpLGV0KCLii64iLCJcXHZkb3RzIiksZXQoIlxcdmFyR2FtbWEiLCJcXG1hdGhpdHtcXEdhbW1hfSIpLGV0KCJcXHZhckRlbHRhIiwiXFxtYXRoaXR7XFxEZWx0YX0iKSxldCgiXFx2YXJUaGV0YSIsIlxcbWF0aGl0e1xcVGhldGF9IiksZXQoIlxcdmFyTGFtYmRhIiwiXFxtYXRoaXR7XFxMYW1iZGF9IiksZXQoIlxcdmFyWGkiLCJcXG1hdGhpdHtcXFhpfSIpLGV0KCJcXHZhclBpIiwiXFxtYXRoaXR7XFxQaX0iKSxldCgiXFx2YXJTaWdtYSIsIlxcbWF0aGl0e1xcU2lnbWF9IiksZXQoIlxcdmFyVXBzaWxvbiIsIlxcbWF0aGl0e1xcVXBzaWxvbn0iKSxldCgiXFx2YXJQaGkiLCJcXG1hdGhpdHtcXFBoaX0iKSxldCgiXFx2YXJQc2kiLCJcXG1hdGhpdHtcXFBzaX0iKSxldCgiXFx2YXJPbWVnYSIsIlxcbWF0aGl0e1xcT21lZ2F9IiksZXQoIlxcc3Vic3RhY2siLCJcXGJlZ2lue3N1YmFycmF5fXtjfSMxXFxlbmR7c3ViYXJyYXl9IiksZXQoIlxcY29sb24iLCJcXG5vYnJlYWtcXG1za2lwMm11XFxtYXRocHVuY3R7fVxcbWF0aGNob2ljZXtcXG1rZXJuLTNtdX17XFxta2Vybi0zbXV9e317fXs6fVxcbXNraXA2bXVcXHJlbGF4IiksZXQoIlxcYm94ZWQiLCJcXGZib3h7JFxcZGlzcGxheXN0eWxleyMxfSR9IiksZXQoIlxcaWZmIiwiXFxET1RTQlxcO1xcTG9uZ2xlZnRyaWdodGFycm93XFw7IiksZXQoIlxcaW1wbGllcyIsIlxcRE9UU0JcXDtcXExvbmdyaWdodGFycm93XFw7IiksZXQoIlxcaW1wbGllZGJ5IiwiXFxET1RTQlxcO1xcTG9uZ2xlZnRhcnJvd1xcOyIpO3ZhciBkcWU9eyIsIjoiXFxkb3RzYyIsIlxcbm90IjoiXFxkb3RzYiIsIisiOiJcXGRvdHNiIiwiPSI6IlxcZG90c2IiLCI8IjoiXFxkb3RzYiIsIj4iOiJcXGRvdHNiIiwiLSI6IlxcZG90c2IiLCIqIjoiXFxkb3RzYiIsIjoiOiJcXGRvdHNiIiwiXFxET1RTQiI6IlxcZG90c2IiLCJcXGNvcHJvZCI6IlxcZG90c2IiLCJcXGJpZ3ZlZSI6IlxcZG90c2IiLCJcXGJpZ3dlZGdlIjoiXFxkb3RzYiIsIlxcYmlndXBsdXMiOiJcXGRvdHNiIiwiXFxiaWdjYXAiOiJcXGRvdHNiIiwiXFxiaWdjdXAiOiJcXGRvdHNiIiwiXFxwcm9kIjoiXFxkb3RzYiIsIlxcc3VtIjoiXFxkb3RzYiIsIlxcYmlnb3RpbWVzIjoiXFxkb3RzYiIsIlxcYmlnb3BsdXMiOiJcXGRvdHNiIiwiXFxiaWdvZG90IjoiXFxkb3RzYiIsIlxcYmlnc3FjdXAiOiJcXGRvdHNiIiwiXFxBbmQiOiJcXGRvdHNiIiwiXFxsb25ncmlnaHRhcnJvdyI6IlxcZG90c2IiLCJcXExvbmdyaWdodGFycm93IjoiXFxkb3RzYiIsIlxcbG9uZ2xlZnRhcnJvdyI6IlxcZG90c2IiLCJcXExvbmdsZWZ0YXJyb3ciOiJcXGRvdHNiIiwiXFxsb25nbGVmdHJpZ2h0YXJyb3ciOiJcXGRvdHNiIiwiXFxMb25nbGVmdHJpZ2h0YXJyb3ciOiJcXGRvdHNiIiwiXFxtYXBzdG8iOiJcXGRvdHNiIiwiXFxsb25nbWFwc3RvIjoiXFxkb3RzYiIsIlxcaG9va3JpZ2h0YXJyb3ciOiJcXGRvdHNiIiwiXFxkb3RlcSI6IlxcZG90c2IiLCJcXG1hdGhiaW4iOiJcXGRvdHNiIiwiXFxtYXRocmVsIjoiXFxkb3RzYiIsIlxccmVsYmFyIjoiXFxkb3RzYiIsIlxcUmVsYmFyIjoiXFxkb3RzYiIsIlxceHJpZ2h0YXJyb3ciOiJcXGRvdHNiIiwiXFx4bGVmdGFycm93IjoiXFxkb3RzYiIsIlxcRE9UU0kiOiJcXGRvdHNpIiwiXFxpbnQiOiJcXGRvdHNpIiwiXFxvaW50IjoiXFxkb3RzaSIsIlxcaWludCI6IlxcZG90c2kiLCJcXGlpaW50IjoiXFxkb3RzaSIsIlxcaWlpaW50IjoiXFxkb3RzaSIsIlxcaWRvdHNpbnQiOiJcXGRvdHNpIiwiXFxET1RTWCI6IlxcZG90c3gifTtldCgiXFxkb3RzIixmdW5jdGlvbihpKXt2YXIgcz0iXFxkb3RzbyIsdT1pLmV4cGFuZEFmdGVyRnV0dXJlKCkudGV4dDtyZXR1cm4gdSBpbiBkcWU/cz1kcWVbdV06KHUuc2xpY2UoMCw0KT09PSJcXG5vdCJ8fHUgaW4gVWwubWF0aCYmWWEuY29udGFpbnMoWyJiaW4iLCJyZWwiXSxVbC5tYXRoW3VdLmdyb3VwKSkmJihzPSJcXGRvdHNiIiksc30pO3ZhciBOYmU9eyIpIjohMCwiXSI6ITAsIlxccmJyYWNrIjohMCwiXFx9IjohMCwiXFxyYnJhY2UiOiEwLCJcXHJhbmdsZSI6ITAsIlxccmNlaWwiOiEwLCJcXHJmbG9vciI6ITAsIlxccmdyb3VwIjohMCwiXFxybW91c3RhY2hlIjohMCwiXFxyaWdodCI6ITAsIlxcYmlnciI6ITAsIlxcYmlnZ3IiOiEwLCJcXEJpZ3IiOiEwLCJcXEJpZ2dyIjohMCwkOiEwLCI7IjohMCwiLiI6ITAsIiwiOiEwfTtldCgiXFxkb3RzbyIsZnVuY3Rpb24oaSl7dmFyIHM9aS5mdXR1cmUoKS50ZXh0O3JldHVybiBzIGluIE5iZT8iXFxsZG90c1xcLCI6IlxcbGRvdHMifSksZXQoIlxcZG90c2MiLGZ1bmN0aW9uKGkpe3ZhciBzPWkuZnV0dXJlKCkudGV4dDtyZXR1cm4gcyBpbiBOYmUmJnMhPT0iLCI/IlxcbGRvdHNcXCwiOiJcXGxkb3RzIn0pLGV0KCJcXGNkb3RzIixmdW5jdGlvbihpKXt2YXIgcz1pLmZ1dHVyZSgpLnRleHQ7cmV0dXJuIHMgaW4gTmJlPyJcXEBjZG90c1xcLCI6IlxcQGNkb3RzIn0pLGV0KCJcXGRvdHNiIiwiXFxjZG90cyIpLGV0KCJcXGRvdHNtIiwiXFxjZG90cyIpLGV0KCJcXGRvdHNpIiwiXFwhXFxjZG90cyIpLGV0KCJcXGRvdHN4IiwiXFxsZG90c1xcLCIpLGV0KCJcXERPVFNJIiwiXFxyZWxheCIpLGV0KCJcXERPVFNCIiwiXFxyZWxheCIpLGV0KCJcXERPVFNYIiwiXFxyZWxheCIpLGV0KCJcXHRtc3BhY2UiLCJcXFRleHRPck1hdGh7XFxrZXJuIzEjM317XFxtc2tpcCMxIzJ9XFxyZWxheCIpLGV0KCJcXCwiLCJcXHRtc3BhY2UrezNtdX17LjE2NjdlbX0iKSxldCgiXFx0aGluc3BhY2UiLCJcXCwiKSxldCgiXFw+IiwiXFxtc2tpcHs0bXV9IiksZXQoIlxcOiIsIlxcdG1zcGFjZSt7NG11fXsuMjIyMmVtfSIpLGV0KCJcXG1lZHNwYWNlIiwiXFw6IiksZXQoIlxcOyIsIlxcdG1zcGFjZSt7NW11fXsuMjc3N2VtfSIpLGV0KCJcXHRoaWNrc3BhY2UiLCJcXDsiKSxldCgiXFwhIiwiXFx0bXNwYWNlLXszbXV9ey4xNjY3ZW19IiksZXQoIlxcbmVndGhpbnNwYWNlIiwiXFwhIiksZXQoIlxcbmVnbWVkc3BhY2UiLCJcXHRtc3BhY2UtezRtdX17LjIyMjJlbX0iKSxldCgiXFxuZWd0aGlja3NwYWNlIiwiXFx0bXNwYWNlLXs1bXV9ey4yNzdlbX0iKSxldCgiXFxlbnNwYWNlIiwiXFxrZXJuLjVlbSAiKSxldCgiXFxlbnNraXAiLCJcXGhza2lwLjVlbVxccmVsYXgiKSxldCgiXFxxdWFkIiwiXFxoc2tpcDFlbVxccmVsYXgiKSxldCgiXFxxcXVhZCIsIlxcaHNraXAyZW1cXHJlbGF4IiksZXQoIlxcdGFnIiwiXFxAaWZzdGFyXFx0YWdAbGl0ZXJhbFxcdGFnQHBhcmVuIiksZXQoIlxcdGFnQHBhcmVuIiwiXFx0YWdAbGl0ZXJhbHsoeyMxfSl9IiksZXQoIlxcdGFnQGxpdGVyYWwiLGk9PntpZihpLm1hY3Jvcy5nZXQoIlxcZGZAdGFnIikpdGhyb3cgbmV3IENpKCJNdWx0aXBsZSBcXHRhZyIpO3JldHVybiJcXGdkZWZcXGRmQHRhZ3tcXHRleHR7IzF9fSJ9KSxldCgiXFxibW9kIiwiXFxtYXRoY2hvaWNle1xcbXNraXAxbXV9e1xcbXNraXAxbXV9e1xcbXNraXA1bXV9e1xcbXNraXA1bXV9XFxtYXRoYmlue1xccm0gbW9kfVxcbWF0aGNob2ljZXtcXG1za2lwMW11fXtcXG1za2lwMW11fXtcXG1za2lwNW11fXtcXG1za2lwNW11fSIpLGV0KCJcXHBvZCIsIlxcYWxsb3dicmVha1xcbWF0aGNob2ljZXtcXG1rZXJuMThtdX17XFxta2VybjhtdX17XFxta2VybjhtdX17XFxta2VybjhtdX0oIzEpIiksZXQoIlxccG1vZCIsIlxccG9ke3tcXHJtIG1vZH1cXG1rZXJuNm11IzF9IiksZXQoIlxcbW9kIiwiXFxhbGxvd2JyZWFrXFxtYXRoY2hvaWNle1xcbWtlcm4xOG11fXtcXG1rZXJuMTJtdX17XFxta2VybjEybXV9e1xcbWtlcm4xMm11fXtcXHJtIG1vZH1cXCxcXCwjMSIpLGV0KCJcXG5ld2xpbmUiLCJcXFxcXFxyZWxheCIpLGV0KCJcXFRlWCIsIlxcdGV4dHJte1xcaHRtbEBtYXRobWx7VFxca2Vybi0uMTY2N2VtXFxyYWlzZWJveHstLjVleH17RX1cXGtlcm4tLjEyNWVtWH17VGVYfX0iKTt2YXIgZ3FlPVJpKEs0WyJNYWluLVJlZ3VsYXIiXVsiVCIuY2hhckNvZGVBdCgwKV1bMV0tLjcqSzRbIk1haW4tUmVndWxhciJdWyJBIi5jaGFyQ29kZUF0KDApXVsxXSk7ZXQoIlxcTGFUZVgiLCJcXHRleHRybXtcXGh0bWxAbWF0aG1seyIrKCJMXFxrZXJuLS4zNmVtXFxyYWlzZWJveHsiK2dxZSsifXtcXHNjcmlwdHN0eWxlIEF9IikrIlxca2Vybi0uMTVlbVxcVGVYfXtMYVRlWH19IiksZXQoIlxcS2FUZVgiLCJcXHRleHRybXtcXGh0bWxAbWF0aG1seyIrKCJLXFxrZXJuLS4xN2VtXFxyYWlzZWJveHsiK2dxZSsifXtcXHNjcmlwdHN0eWxlIEF9IikrIlxca2Vybi0uMTVlbVxcVGVYfXtLYVRlWH19IiksZXQoIlxcaHNwYWNlIiwiXFxAaWZzdGFyXFxAaHNwYWNlclxcQGhzcGFjZSIpLGV0KCJcXEBoc3BhY2UiLCJcXGhza2lwICMxXFxyZWxheCIpLGV0KCJcXEBoc3BhY2VyIiwiXFxydWxlezBwdH17MHB0fVxcaHNraXAgIzFcXHJlbGF4IiksZXQoIlxcb3JkaW5hcnljb2xvbiIsIjoiKSxldCgiXFx2Y2VudGNvbG9uIiwiXFxtYXRocmVse1xcbWF0aG9wXFxvcmRpbmFyeWNvbG9ufSIpLGV0KCJcXGRibGNvbG9uIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFx2Y2VudGNvbG9uXFxtYXRocmVse1xcbWtlcm4tLjltdX1cXHZjZW50Y29sb259fXtcXG1hdGhvcHtcXGNoYXIiMjIzN319JyksZXQoIlxcY29sb25lcXEiLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXHZjZW50Y29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX09fX17XFxtYXRob3B7XFxjaGFyIjIyNTR9fScpLGV0KCJcXENvbG9uZXFxIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFxkYmxjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fT19fXtcXG1hdGhvcHtcXGNoYXIiMjIzN1xcY2hhciIzZH19JyksZXQoIlxcY29sb25lcSIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcbWF0aHJlbHstfX19e1xcbWF0aG9we1xcY2hhciIzYVxcY2hhciIyMjEyfX0nKSxldCgiXFxDb2xvbmVxIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFxkYmxjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcbWF0aHJlbHstfX19e1xcbWF0aG9we1xcY2hhciIyMjM3XFxjaGFyIjIyMTJ9fScpLGV0KCJcXGVxcWNvbG9uIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7PVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcdmNlbnRjb2xvbn19e1xcbWF0aG9we1xcY2hhciIyMjU1fX0nKSxldCgiXFxFcXFjb2xvbiIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVsez1cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXGRibGNvbG9ufX17XFxtYXRob3B7XFxjaGFyIjNkXFxjaGFyIjIyMzd9fScpLGV0KCJcXGVxY29sb24iLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXG1hdGhyZWx7LX1cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXHZjZW50Y29sb259fXtcXG1hdGhvcHtcXGNoYXIiMjIzOX19JyksZXQoIlxcRXFjb2xvbiIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcbWF0aHJlbHstfVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcZGJsY29sb259fXtcXG1hdGhvcHtcXGNoYXIiMjIxMlxcY2hhciIyMjM3fX0nKSxldCgiXFxjb2xvbmFwcHJveCIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcYXBwcm94fX17XFxtYXRob3B7XFxjaGFyIjNhXFxjaGFyIjIyNDh9fScpLGV0KCJcXENvbG9uYXBwcm94IiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFxkYmxjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcYXBwcm94fX17XFxtYXRob3B7XFxjaGFyIjIyMzdcXGNoYXIiMjI0OH19JyksZXQoIlxcY29sb25zaW0iLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXHZjZW50Y29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXHNpbX19e1xcbWF0aG9we1xcY2hhciIzYVxcY2hhciIyMjNjfX0nKSxldCgiXFxDb2xvbnNpbSIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcZGJsY29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXHNpbX19e1xcbWF0aG9we1xcY2hhciIyMjM3XFxjaGFyIjIyM2N9fScpLGV0KCLiiLciLCJcXGRibGNvbG9uIiksZXQoIuKIuSIsIlxcZXFjb2xvbiIpLGV0KCLiiZQiLCJcXGNvbG9uZXFxIiksZXQoIuKJlSIsIlxcZXFxY29sb24iKSxldCgi4qm0IiwiXFxDb2xvbmVxcSIpLGV0KCJcXHJhdGlvIiwiXFx2Y2VudGNvbG9uIiksZXQoIlxcY29sb25jb2xvbiIsIlxcZGJsY29sb24iKSxldCgiXFxjb2xvbmVxdWFscyIsIlxcY29sb25lcXEiKSxldCgiXFxjb2xvbmNvbG9uZXF1YWxzIiwiXFxDb2xvbmVxcSIpLGV0KCJcXGVxdWFsc2NvbG9uIiwiXFxlcXFjb2xvbiIpLGV0KCJcXGVxdWFsc2NvbG9uY29sb24iLCJcXEVxcWNvbG9uIiksZXQoIlxcY29sb25taW51cyIsIlxcY29sb25lcSIpLGV0KCJcXGNvbG9uY29sb25taW51cyIsIlxcQ29sb25lcSIpLGV0KCJcXG1pbnVzY29sb24iLCJcXGVxY29sb24iKSxldCgiXFxtaW51c2NvbG9uY29sb24iLCJcXEVxY29sb24iKSxldCgiXFxjb2xvbmNvbG9uYXBwcm94IiwiXFxDb2xvbmFwcHJveCIpLGV0KCJcXGNvbG9uY29sb25zaW0iLCJcXENvbG9uc2ltIiksZXQoIlxcc2ltY29sb24iLCJcXG1hdGhyZWx7XFxzaW1cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXHZjZW50Y29sb259IiksZXQoIlxcc2ltY29sb25jb2xvbiIsIlxcbWF0aHJlbHtcXHNpbVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcZGJsY29sb259IiksZXQoIlxcYXBwcm94Y29sb24iLCJcXG1hdGhyZWx7XFxhcHByb3hcXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXHZjZW50Y29sb259IiksZXQoIlxcYXBwcm94Y29sb25jb2xvbiIsIlxcbWF0aHJlbHtcXGFwcHJveFxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcZGJsY29sb259IiksZXQoIlxcbm90bmkiLCJcXGh0bWxAbWF0aG1se1xcbm90XFxuaX17XFxtYXRocmVse1xcY2hhcmDiiIx9fSIpLGV0KCJcXGxpbXN1cCIsIlxcRE9UU0JcXG9wZXJhdG9ybmFtZSp7bGltXFwsc3VwfSIpLGV0KCJcXGxpbWluZiIsIlxcRE9UU0JcXG9wZXJhdG9ybmFtZSp7bGltXFwsaW5mfSIpLGV0KCJcXGluamxpbSIsIlxcRE9UU0JcXG9wZXJhdG9ybmFtZSp7aW5qXFwsbGltfSIpLGV0KCJcXHByb2psaW0iLCJcXERPVFNCXFxvcGVyYXRvcm5hbWUqe3Byb2pcXCxsaW19IiksZXQoIlxcdmFybGltc3VwIiwiXFxET1RTQlxcb3BlcmF0b3JuYW1lKntcXG92ZXJsaW5le2xpbX19IiksZXQoIlxcdmFybGltaW5mIiwiXFxET1RTQlxcb3BlcmF0b3JuYW1lKntcXHVuZGVybGluZXtsaW19fSIpLGV0KCJcXHZhcmluamxpbSIsIlxcRE9UU0JcXG9wZXJhdG9ybmFtZSp7XFx1bmRlcnJpZ2h0YXJyb3d7bGltfX0iKSxldCgiXFx2YXJwcm9qbGltIiwiXFxET1RTQlxcb3BlcmF0b3JuYW1lKntcXHVuZGVybGVmdGFycm93e2xpbX19IiksZXQoIlxcZ3ZlcnRuZXFxIiwiXFxodG1sQG1hdGhtbHtcXEBndmVydG5lcXF9e+KJqX0iKSxldCgiXFxsdmVydG5lcXEiLCJcXGh0bWxAbWF0aG1se1xcQGx2ZXJ0bmVxcX174omofSIpLGV0KCJcXG5nZXFxIiwiXFxodG1sQG1hdGhtbHtcXEBuZ2VxcX174omxfSIpLGV0KCJcXG5nZXFzbGFudCIsIlxcaHRtbEBtYXRobWx7XFxAbmdlcXNsYW50fXviibF9IiksZXQoIlxcbmxlcXEiLCJcXGh0bWxAbWF0aG1se1xcQG5sZXFxfXviibB9IiksZXQoIlxcbmxlcXNsYW50IiwiXFxodG1sQG1hdGhtbHtcXEBubGVxc2xhbnR9e+KJsH0iKSxldCgiXFxuc2hvcnRtaWQiLCJcXGh0bWxAbWF0aG1se1xcQG5zaG9ydG1pZH174oikfSIpLGV0KCJcXG5zaG9ydHBhcmFsbGVsIiwiXFxodG1sQG1hdGhtbHtcXEBuc2hvcnRwYXJhbGxlbH174oimfSIpLGV0KCJcXG5zdWJzZXRlcXEiLCJcXGh0bWxAbWF0aG1se1xcQG5zdWJzZXRlcXF9e+KKiH0iKSxldCgiXFxuc3Vwc2V0ZXFxIiwiXFxodG1sQG1hdGhtbHtcXEBuc3Vwc2V0ZXFxfXviiol9IiksZXQoIlxcdmFyc3Vic2V0bmVxIiwiXFxodG1sQG1hdGhtbHtcXEB2YXJzdWJzZXRuZXF9e+KKin0iKSxldCgiXFx2YXJzdWJzZXRuZXFxIiwiXFxodG1sQG1hdGhtbHtcXEB2YXJzdWJzZXRuZXFxfXviq4t9IiksZXQoIlxcdmFyc3Vwc2V0bmVxIiwiXFxodG1sQG1hdGhtbHtcXEB2YXJzdXBzZXRuZXF9e+KKi30iKSxldCgiXFx2YXJzdXBzZXRuZXFxIiwiXFxodG1sQG1hdGhtbHtcXEB2YXJzdXBzZXRuZXFxfXviq4x9IiksZXQoIlxcaW1hdGgiLCJcXGh0bWxAbWF0aG1se1xcQGltYXRofXvEsX0iKSxldCgiXFxqbWF0aCIsIlxcaHRtbEBtYXRobWx7XFxAam1hdGh9e8i3fSIpLGV0KCJcXGxsYnJhY2tldCIsIlxcaHRtbEBtYXRobWx7XFxtYXRob3BlbntbXFxta2Vybi0zLjJtdVt9fXtcXG1hdGhvcGVue1xcY2hhcmDin6Z9fSIpLGV0KCJcXHJyYnJhY2tldCIsIlxcaHRtbEBtYXRobWx7XFxtYXRoY2xvc2V7XVxcbWtlcm4tMy4ybXVdfX17XFxtYXRoY2xvc2V7XFxjaGFyYOKfp319IiksZXQoIuKfpiIsIlxcbGxicmFja2V0IiksZXQoIuKfpyIsIlxccnJicmFja2V0IiksZXQoIlxcbEJyYWNlIiwiXFxodG1sQG1hdGhtbHtcXG1hdGhvcGVue1xce1xcbWtlcm4tMy4ybXVbfX17XFxtYXRob3BlbntcXGNoYXJg4qaDfX0iKSxldCgiXFxyQnJhY2UiLCJcXGh0bWxAbWF0aG1se1xcbWF0aGNsb3Nle11cXG1rZXJuLTMuMm11XFx9fX17XFxtYXRoY2xvc2V7XFxjaGFyYOKmhH19IiksZXQoIuKmgyIsIlxcbEJyYWNlIiksZXQoIuKmhCIsIlxcckJyYWNlIiksZXQoIlxcbWludXNvIiwiXFxtYXRoYmlue1xcaHRtbEBtYXRobWx7e1xcbWF0aHJsYXB7XFxtYXRoY2hvaWNle1xca2VybnswLjE0NWVtfX17XFxrZXJuezAuMTQ1ZW19fXtcXGtlcm57MC4xMDE1ZW19fXtcXGtlcm57MC4wNzI1ZW19fVxcY2lyY317LX19fXtcXGNoYXJg4qa1fX0iKSxldCgi4qa1IiwiXFxtaW51c28iKSxldCgiXFxkYXJyIiwiXFxkb3duYXJyb3ciKSxldCgiXFxkQXJyIiwiXFxEb3duYXJyb3ciKSxldCgiXFxEYXJyIiwiXFxEb3duYXJyb3ciKSxldCgiXFxsYW5nIiwiXFxsYW5nbGUiKSxldCgiXFxyYW5nIiwiXFxyYW5nbGUiKSxldCgiXFx1YXJyIiwiXFx1cGFycm93IiksZXQoIlxcdUFyciIsIlxcVXBhcnJvdyIpLGV0KCJcXFVhcnIiLCJcXFVwYXJyb3ciKSxldCgiXFxOIiwiXFxtYXRoYmJ7Tn0iKSxldCgiXFxSIiwiXFxtYXRoYmJ7Un0iKSxldCgiXFxaIiwiXFxtYXRoYmJ7Wn0iKSxldCgiXFxhbGVmIiwiXFxhbGVwaCIpLGV0KCJcXGFsZWZzeW0iLCJcXGFsZXBoIiksZXQoIlxcQWxwaGEiLCJcXG1hdGhybXtBfSIpLGV0KCJcXEJldGEiLCJcXG1hdGhybXtCfSIpLGV0KCJcXGJ1bGwiLCJcXGJ1bGxldCIpLGV0KCJcXENoaSIsIlxcbWF0aHJte1h9IiksZXQoIlxcY2x1YnMiLCJcXGNsdWJzdWl0IiksZXQoIlxcY251bXMiLCJcXG1hdGhiYntDfSIpLGV0KCJcXENvbXBsZXgiLCJcXG1hdGhiYntDfSIpLGV0KCJcXERhZ2dlciIsIlxcZGRhZ2dlciIpLGV0KCJcXGRpYW1vbmRzIiwiXFxkaWFtb25kc3VpdCIpLGV0KCJcXGVtcHR5IiwiXFxlbXB0eXNldCIpLGV0KCJcXEVwc2lsb24iLCJcXG1hdGhybXtFfSIpLGV0KCJcXEV0YSIsIlxcbWF0aHJte0h9IiksZXQoIlxcZXhpc3QiLCJcXGV4aXN0cyIpLGV0KCJcXGhhcnIiLCJcXGxlZnRyaWdodGFycm93IiksZXQoIlxcaEFyciIsIlxcTGVmdHJpZ2h0YXJyb3ciKSxldCgiXFxIYXJyIiwiXFxMZWZ0cmlnaHRhcnJvdyIpLGV0KCJcXGhlYXJ0cyIsIlxcaGVhcnRzdWl0IiksZXQoIlxcaW1hZ2UiLCJcXEltIiksZXQoIlxcaW5maW4iLCJcXGluZnR5IiksZXQoIlxcSW90YSIsIlxcbWF0aHJte0l9IiksZXQoIlxcaXNpbiIsIlxcaW4iKSxldCgiXFxLYXBwYSIsIlxcbWF0aHJte0t9IiksZXQoIlxcbGFyciIsIlxcbGVmdGFycm93IiksZXQoIlxcbEFyciIsIlxcTGVmdGFycm93IiksZXQoIlxcTGFyciIsIlxcTGVmdGFycm93IiksZXQoIlxcbHJhcnIiLCJcXGxlZnRyaWdodGFycm93IiksZXQoIlxcbHJBcnIiLCJcXExlZnRyaWdodGFycm93IiksZXQoIlxcTHJhcnIiLCJcXExlZnRyaWdodGFycm93IiksZXQoIlxcTXUiLCJcXG1hdGhybXtNfSIpLGV0KCJcXG5hdG51bXMiLCJcXG1hdGhiYntOfSIpLGV0KCJcXE51IiwiXFxtYXRocm17Tn0iKSxldCgiXFxPbWljcm9uIiwiXFxtYXRocm17T30iKSxldCgiXFxwbHVzbW4iLCJcXHBtIiksZXQoIlxccmFyciIsIlxccmlnaHRhcnJvdyIpLGV0KCJcXHJBcnIiLCJcXFJpZ2h0YXJyb3ciKSxldCgiXFxSYXJyIiwiXFxSaWdodGFycm93IiksZXQoIlxccmVhbCIsIlxcUmUiKSxldCgiXFxyZWFscyIsIlxcbWF0aGJie1J9IiksZXQoIlxcUmVhbHMiLCJcXG1hdGhiYntSfSIpLGV0KCJcXFJobyIsIlxcbWF0aHJte1B9IiksZXQoIlxcc2RvdCIsIlxcY2RvdCIpLGV0KCJcXHNlY3QiLCJcXFMiKSxldCgiXFxzcGFkZXMiLCJcXHNwYWRlc3VpdCIpLGV0KCJcXHN1YiIsIlxcc3Vic2V0IiksZXQoIlxcc3ViZSIsIlxcc3Vic2V0ZXEiKSxldCgiXFxzdXBlIiwiXFxzdXBzZXRlcSIpLGV0KCJcXFRhdSIsIlxcbWF0aHJte1R9IiksZXQoIlxcdGhldGFzeW0iLCJcXHZhcnRoZXRhIiksZXQoIlxcd2VpZXJwIiwiXFx3cCIpLGV0KCJcXFpldGEiLCJcXG1hdGhybXtafSIpLGV0KCJcXGFyZ21pbiIsIlxcRE9UU0JcXG9wZXJhdG9ybmFtZSp7YXJnXFwsbWlufSIpLGV0KCJcXGFyZ21heCIsIlxcRE9UU0JcXG9wZXJhdG9ybmFtZSp7YXJnXFwsbWF4fSIpLGV0KCJcXHBsaW0iLCJcXERPVFNCXFxtYXRob3B7XFxvcGVyYXRvcm5hbWV7cGxpbX19XFxsaW1pdHMiKSxldCgiXFxicmEiLCJcXG1hdGhpbm5lcntcXGxhbmdsZXsjMX18fSIpLGV0KCJcXGtldCIsIlxcbWF0aGlubmVye3x7IzF9XFxyYW5nbGV9IiksZXQoIlxcYnJha2V0IiwiXFxtYXRoaW5uZXJ7XFxsYW5nbGV7IzF9XFxyYW5nbGV9IiksZXQoIlxcQnJhIiwiXFxsZWZ0XFxsYW5nbGUjMVxccmlnaHR8IiksZXQoIlxcS2V0IiwiXFxsZWZ0fCMxXFxyaWdodFxccmFuZ2xlIik7dmFyIHBxZT1pPT5zPT57dmFyIHU9cy5jb25zdW1lQXJnKCkudG9rZW5zLGQ9cy5jb25zdW1lQXJnKCkudG9rZW5zLHA9cy5jb25zdW1lQXJnKCkudG9rZW5zLHY9cy5jb25zdW1lQXJnKCkudG9rZW5zLGI9cy5tYWNyb3MuZ2V0KCJ8IikseT1zLm1hY3Jvcy5nZXQoIlxcfCIpO3MubWFjcm9zLmJlZ2luR3JvdXAoKTt2YXIgVD1QPT5SPT57aSYmKFIubWFjcm9zLnNldCgifCIsYikscC5sZW5ndGgmJlIubWFjcm9zLnNldCgiXFx8Iix5KSk7dmFyIEY9UDtpZighUCYmcC5sZW5ndGgpe3ZhciBqPVIuZnV0dXJlKCk7ai50ZXh0PT09InwiJiYoUi5wb3BUb2tlbigpLEY9ITApfXJldHVybnt0b2tlbnM6Rj9wOmQsbnVtQXJnczowfX07cy5tYWNyb3Muc2V0KCJ8IixUKCExKSkscC5sZW5ndGgmJnMubWFjcm9zLnNldCgiXFx8IixUKCEwKSk7dmFyIF89cy5jb25zdW1lQXJnKCkudG9rZW5zLEE9cy5leHBhbmRUb2tlbnMoWy4uLnYsLi4uXywuLi51XSk7cmV0dXJuIHMubWFjcm9zLmVuZEdyb3VwKCkse3Rva2VuczpBLnJldmVyc2UoKSxudW1BcmdzOjB9fTtldCgiXFxicmFAa2V0IixwcWUoITEpKSxldCgiXFxicmFAc2V0IixwcWUoITApKSxldCgiXFxCcmFrZXQiLCJcXGJyYUBrZXR7XFxsZWZ0XFxsYW5nbGV9e1xcLFxcbWlkZGxlXFx2ZXJ0XFwsfXtcXCxcXG1pZGRsZVxcdmVydFxcLH17XFxyaWdodFxccmFuZ2xlfSIpLGV0KCJcXFNldCIsIlxcYnJhQHNldHtcXGxlZnRcXHtcXDp9e1xcO1xcbWlkZGxlXFx2ZXJ0XFw7fXtcXDtcXG1pZGRsZVxcVmVydFxcO317XFw6XFxyaWdodFxcfX0iKSxldCgiXFxzZXQiLCJcXGJyYUBzZXR7XFx7XFwsfXtcXG1pZH17fXtcXCxcXH19IiksZXQoIlxcYW5nbG4iLCJ7XFxhbmdsIG59IiksZXQoIlxcYmx1ZSIsIlxcdGV4dGNvbG9yeyMjNjQ5NWVkfXsjMX0iKSxldCgiXFxvcmFuZ2UiLCJcXHRleHRjb2xvcnsjI2ZmYTUwMH17IzF9IiksZXQoIlxccGluayIsIlxcdGV4dGNvbG9yeyMjZmYwMGFmfXsjMX0iKSxldCgiXFxyZWQiLCJcXHRleHRjb2xvcnsjI2RmMDAzMH17IzF9IiksZXQoIlxcZ3JlZW4iLCJcXHRleHRjb2xvcnsjIzI4YWU3Yn17IzF9IiksZXQoIlxcZ3JheSIsIlxcdGV4dGNvbG9ye2dyYXl9eyMxfSIpLGV0KCJcXHB1cnBsZSIsIlxcdGV4dGNvbG9yeyMjOWQzOGJkfXsjMX0iKSxldCgiXFxibHVlQSIsIlxcdGV4dGNvbG9yeyMjY2NmYWZmfXsjMX0iKSxldCgiXFxibHVlQiIsIlxcdGV4dGNvbG9yeyMjODBmNmZmfXsjMX0iKSxldCgiXFxibHVlQyIsIlxcdGV4dGNvbG9yeyMjNjNkOWVhfXsjMX0iKSxldCgiXFxibHVlRCIsIlxcdGV4dGNvbG9yeyMjMTFhY2NkfXsjMX0iKSxldCgiXFxibHVlRSIsIlxcdGV4dGNvbG9yeyMjMGM3Zjk5fXsjMX0iKSxldCgiXFx0ZWFsQSIsIlxcdGV4dGNvbG9yeyMjOTRmZmY1fXsjMX0iKSxldCgiXFx0ZWFsQiIsIlxcdGV4dGNvbG9yeyMjMjZlZGQ1fXsjMX0iKSxldCgiXFx0ZWFsQyIsIlxcdGV4dGNvbG9yeyMjMDFkMWMxfXsjMX0iKSxldCgiXFx0ZWFsRCIsIlxcdGV4dGNvbG9yeyMjMDFhOTk1fXsjMX0iKSxldCgiXFx0ZWFsRSIsIlxcdGV4dGNvbG9yeyMjMjA4MTcwfXsjMX0iKSxldCgiXFxncmVlbkEiLCJcXHRleHRjb2xvcnsjI2I2ZmZiMH17IzF9IiksZXQoIlxcZ3JlZW5CIiwiXFx0ZXh0Y29sb3J7IyM4YWYyODF9eyMxfSIpLGV0KCJcXGdyZWVuQyIsIlxcdGV4dGNvbG9yeyMjNzRjZjcwfXsjMX0iKSxldCgiXFxncmVlbkQiLCJcXHRleHRjb2xvcnsjIzFmYWI1NH17IzF9IiksZXQoIlxcZ3JlZW5FIiwiXFx0ZXh0Y29sb3J7IyMwZDkyM2Z9eyMxfSIpLGV0KCJcXGdvbGRBIiwiXFx0ZXh0Y29sb3J7IyNmZmQwYTl9eyMxfSIpLGV0KCJcXGdvbGRCIiwiXFx0ZXh0Y29sb3J7IyNmZmJiNzF9eyMxfSIpLGV0KCJcXGdvbGRDIiwiXFx0ZXh0Y29sb3J7IyNmZjljMzl9eyMxfSIpLGV0KCJcXGdvbGREIiwiXFx0ZXh0Y29sb3J7IyNlMDdkMTB9eyMxfSIpLGV0KCJcXGdvbGRFIiwiXFx0ZXh0Y29sb3J7IyNhNzVhMDV9eyMxfSIpLGV0KCJcXHJlZEEiLCJcXHRleHRjb2xvcnsjI2ZjYTlhOX17IzF9IiksZXQoIlxccmVkQiIsIlxcdGV4dGNvbG9yeyMjZmY4NDgyfXsjMX0iKSxldCgiXFxyZWRDIiwiXFx0ZXh0Y29sb3J7IyNmOTY4NWR9eyMxfSIpLGV0KCJcXHJlZEQiLCJcXHRleHRjb2xvcnsjI2U4NGQzOX17IzF9IiksZXQoIlxccmVkRSIsIlxcdGV4dGNvbG9yeyMjYmMyNjEyfXsjMX0iKSxldCgiXFxtYXJvb25BIiwiXFx0ZXh0Y29sb3J7IyNmZmJkZTB9eyMxfSIpLGV0KCJcXG1hcm9vbkIiLCJcXHRleHRjb2xvcnsjI2ZmOTJjNn17IzF9IiksZXQoIlxcbWFyb29uQyIsIlxcdGV4dGNvbG9yeyMjZWQ1ZmE2fXsjMX0iKSxldCgiXFxtYXJvb25EIiwiXFx0ZXh0Y29sb3J7IyNjYTMzN2N9eyMxfSIpLGV0KCJcXG1hcm9vbkUiLCJcXHRleHRjb2xvcnsjIzllMDM0ZX17IzF9IiksZXQoIlxccHVycGxlQSIsIlxcdGV4dGNvbG9yeyMjZGRkN2ZmfXsjMX0iKSxldCgiXFxwdXJwbGVCIiwiXFx0ZXh0Y29sb3J7IyNjNmI5ZmN9eyMxfSIpLGV0KCJcXHB1cnBsZUMiLCJcXHRleHRjb2xvcnsjI2FhODdmZn17IzF9IiksZXQoIlxccHVycGxlRCIsIlxcdGV4dGNvbG9yeyMjNzg1NGFifXsjMX0iKSxldCgiXFxwdXJwbGVFIiwiXFx0ZXh0Y29sb3J7IyM1NDNiNzh9eyMxfSIpLGV0KCJcXG1pbnRBIiwiXFx0ZXh0Y29sb3J7IyNmNWY5ZTh9eyMxfSIpLGV0KCJcXG1pbnRCIiwiXFx0ZXh0Y29sb3J7IyNlZGYyZGZ9eyMxfSIpLGV0KCJcXG1pbnRDIiwiXFx0ZXh0Y29sb3J7IyNlMGU1Y2N9eyMxfSIpLGV0KCJcXGdyYXlBIiwiXFx0ZXh0Y29sb3J7IyNmNmY3Zjd9eyMxfSIpLGV0KCJcXGdyYXlCIiwiXFx0ZXh0Y29sb3J7IyNmMGYxZjJ9eyMxfSIpLGV0KCJcXGdyYXlDIiwiXFx0ZXh0Y29sb3J7IyNlM2U1ZTZ9eyMxfSIpLGV0KCJcXGdyYXlEIiwiXFx0ZXh0Y29sb3J7IyNkNmQ4ZGF9eyMxfSIpLGV0KCJcXGdyYXlFIiwiXFx0ZXh0Y29sb3J7IyNiYWJlYzJ9eyMxfSIpLGV0KCJcXGdyYXlGIiwiXFx0ZXh0Y29sb3J7IyM4ODhkOTN9eyMxfSIpLGV0KCJcXGdyYXlHIiwiXFx0ZXh0Y29sb3J7IyM2MjY1Njl9eyMxfSIpLGV0KCJcXGdyYXlIIiwiXFx0ZXh0Y29sb3J7IyMzYjNlNDB9eyMxfSIpLGV0KCJcXGdyYXlJIiwiXFx0ZXh0Y29sb3J7IyMyMTI0MmN9eyMxfSIpLGV0KCJcXGthQmx1ZSIsIlxcdGV4dGNvbG9yeyMjMzE0NDUzfXsjMX0iKSxldCgiXFxrYUdyZWVuIiwiXFx0ZXh0Y29sb3J7IyM3MUIzMDd9eyMxfSIpO3ZhciBicWU9eyJeIjohMCxfOiEwLCJcXGxpbWl0cyI6ITAsIlxcbm9saW1pdHMiOiEwfTtjbGFzcyBDVnR7Y29uc3RydWN0b3Iocyx1LGQpe3RoaXMuc2V0dGluZ3M9dm9pZCAwLHRoaXMuZXhwYW5zaW9uQ291bnQ9dm9pZCAwLHRoaXMubGV4ZXI9dm9pZCAwLHRoaXMubWFjcm9zPXZvaWQgMCx0aGlzLnN0YWNrPXZvaWQgMCx0aGlzLm1vZGU9dm9pZCAwLHRoaXMuc2V0dGluZ3M9dSx0aGlzLmV4cGFuc2lvbkNvdW50PTAsdGhpcy5mZWVkKHMpLHRoaXMubWFjcm9zPW5ldyBFVnQoVFZ0LHUubWFjcm9zKSx0aGlzLm1vZGU9ZCx0aGlzLnN0YWNrPVtdfWZlZWQocyl7dGhpcy5sZXhlcj1uZXcgaHFlKHMsdGhpcy5zZXR0aW5ncyl9c3dpdGNoTW9kZShzKXt0aGlzLm1vZGU9c31iZWdpbkdyb3VwKCl7dGhpcy5tYWNyb3MuYmVnaW5Hcm91cCgpfWVuZEdyb3VwKCl7dGhpcy5tYWNyb3MuZW5kR3JvdXAoKX1lbmRHcm91cHMoKXt0aGlzLm1hY3Jvcy5lbmRHcm91cHMoKX1mdXR1cmUoKXtyZXR1cm4gdGhpcy5zdGFjay5sZW5ndGg9PT0wJiZ0aGlzLnB1c2hUb2tlbih0aGlzLmxleGVyLmxleCgpKSx0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdfXBvcFRva2VuKCl7cmV0dXJuIHRoaXMuZnV0dXJlKCksdGhpcy5zdGFjay5wb3AoKX1wdXNoVG9rZW4ocyl7dGhpcy5zdGFjay5wdXNoKHMpfXB1c2hUb2tlbnMocyl7dGhpcy5zdGFjay5wdXNoKC4uLnMpfXNjYW5Bcmd1bWVudChzKXt2YXIgdSxkLHA7aWYocyl7aWYodGhpcy5jb25zdW1lU3BhY2VzKCksdGhpcy5mdXR1cmUoKS50ZXh0IT09IlsiKXJldHVybiBudWxsO3U9dGhpcy5wb3BUb2tlbigpLHt0b2tlbnM6cCxlbmQ6ZH09dGhpcy5jb25zdW1lQXJnKFsiXSJdKX1lbHNlKHt0b2tlbnM6cCxzdGFydDp1LGVuZDpkfT10aGlzLmNvbnN1bWVBcmcoKSk7cmV0dXJuIHRoaXMucHVzaFRva2VuKG5ldyBVNCgiRU9GIixkLmxvYykpLHRoaXMucHVzaFRva2VucyhwKSx1LnJhbmdlKGQsIiIpfWNvbnN1bWVTcGFjZXMoKXtmb3IoOzspe3ZhciBzPXRoaXMuZnV0dXJlKCk7aWYocy50ZXh0PT09IiAiKXRoaXMuc3RhY2sucG9wKCk7ZWxzZSBicmVha319Y29uc3VtZUFyZyhzKXt2YXIgdT1bXSxkPXMmJnMubGVuZ3RoPjA7ZHx8dGhpcy5jb25zdW1lU3BhY2VzKCk7dmFyIHA9dGhpcy5mdXR1cmUoKSx2LGI9MCx5PTA7ZG97aWYodj10aGlzLnBvcFRva2VuKCksdS5wdXNoKHYpLHYudGV4dD09PSJ7IikrK2I7ZWxzZSBpZih2LnRleHQ9PT0ifSIpe2lmKC0tYixiPT09LTEpdGhyb3cgbmV3IENpKCJFeHRyYSB9Iix2KX1lbHNlIGlmKHYudGV4dD09PSJFT0YiKXRocm93IG5ldyBDaSgiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQgaW4gYSBtYWNybyBhcmd1bWVudCwgZXhwZWN0ZWQgJyIrKHMmJmQ/c1t5XToifSIpKyInIix2KTtpZihzJiZkKWlmKChiPT09MHx8Yj09PTEmJnNbeV09PT0ieyIpJiZ2LnRleHQ9PT1zW3ldKXtpZigrK3kseT09PXMubGVuZ3RoKXt1LnNwbGljZSgteSx5KTticmVha319ZWxzZSB5PTB9d2hpbGUoYiE9PTB8fGQpO3JldHVybiBwLnRleHQ9PT0ieyImJnVbdS5sZW5ndGgtMV0udGV4dD09PSJ9IiYmKHUucG9wKCksdS5zaGlmdCgpKSx1LnJldmVyc2UoKSx7dG9rZW5zOnUsc3RhcnQ6cCxlbmQ6dn19Y29uc3VtZUFyZ3Mocyx1KXtpZih1KXtpZih1Lmxlbmd0aCE9PXMrMSl0aHJvdyBuZXcgQ2koIlRoZSBsZW5ndGggb2YgZGVsaW1pdGVycyBkb2Vzbid0IG1hdGNoIHRoZSBudW1iZXIgb2YgYXJncyEiKTtmb3IodmFyIGQ9dVswXSxwPTA7cDxkLmxlbmd0aDtwKyspe3ZhciB2PXRoaXMucG9wVG9rZW4oKTtpZihkW3BdIT09di50ZXh0KXRocm93IG5ldyBDaSgiVXNlIG9mIHRoZSBtYWNybyBkb2Vzbid0IG1hdGNoIGl0cyBkZWZpbml0aW9uIix2KX19Zm9yKHZhciBiPVtdLHk9MDt5PHM7eSsrKWIucHVzaCh0aGlzLmNvbnN1bWVBcmcodSYmdVt5KzFdKS50b2tlbnMpO3JldHVybiBifWV4cGFuZE9uY2Uocyl7dmFyIHU9dGhpcy5wb3BUb2tlbigpLGQ9dS50ZXh0LHA9dS5ub2V4cGFuZD9udWxsOnRoaXMuX2dldEV4cGFuc2lvbihkKTtpZihwPT1udWxsfHxzJiZwLnVuZXhwYW5kYWJsZSl7aWYocyYmcD09bnVsbCYmZFswXT09PSJcXCImJiF0aGlzLmlzRGVmaW5lZChkKSl0aHJvdyBuZXcgQ2koIlVuZGVmaW5lZCBjb250cm9sIHNlcXVlbmNlOiAiK2QpO3JldHVybiB0aGlzLnB1c2hUb2tlbih1KSwhMX1pZih0aGlzLmV4cGFuc2lvbkNvdW50KyssdGhpcy5leHBhbnNpb25Db3VudD50aGlzLnNldHRpbmdzLm1heEV4cGFuZCl0aHJvdyBuZXcgQ2koIlRvbyBtYW55IGV4cGFuc2lvbnM6IGluZmluaXRlIGxvb3Agb3IgbmVlZCB0byBpbmNyZWFzZSBtYXhFeHBhbmQgc2V0dGluZyIpO3ZhciB2PXAudG9rZW5zLGI9dGhpcy5jb25zdW1lQXJncyhwLm51bUFyZ3MscC5kZWxpbWl0ZXJzKTtpZihwLm51bUFyZ3Mpe3Y9di5zbGljZSgpO2Zvcih2YXIgeT12Lmxlbmd0aC0xO3k+PTA7LS15KXt2YXIgVD12W3ldO2lmKFQudGV4dD09PSIjIil7aWYoeT09PTApdGhyb3cgbmV3IENpKCJJbmNvbXBsZXRlIHBsYWNlaG9sZGVyIGF0IGVuZCBvZiBtYWNybyBib2R5IixUKTtpZihUPXZbLS15XSxULnRleHQ9PT0iIyIpdi5zcGxpY2UoeSsxLDEpO2Vsc2UgaWYoL15bMS05XSQvLnRlc3QoVC50ZXh0KSl2LnNwbGljZSh5LDIsLi4uYlsrVC50ZXh0LTFdKTtlbHNlIHRocm93IG5ldyBDaSgiTm90IGEgdmFsaWQgYXJndW1lbnQgbnVtYmVyIixUKX19fXJldHVybiB0aGlzLnB1c2hUb2tlbnModiksdi5sZW5ndGh9ZXhwYW5kQWZ0ZXJGdXR1cmUoKXtyZXR1cm4gdGhpcy5leHBhbmRPbmNlKCksdGhpcy5mdXR1cmUoKX1leHBhbmROZXh0VG9rZW4oKXtmb3IoOzspaWYodGhpcy5leHBhbmRPbmNlKCk9PT0hMSl7dmFyIHM9dGhpcy5zdGFjay5wb3AoKTtyZXR1cm4gcy50cmVhdEFzUmVsYXgmJihzLnRleHQ9IlxccmVsYXgiKSxzfXRocm93IG5ldyBFcnJvcn1leHBhbmRNYWNybyhzKXtyZXR1cm4gdGhpcy5tYWNyb3MuaGFzKHMpP3RoaXMuZXhwYW5kVG9rZW5zKFtuZXcgVTQocyldKTp2b2lkIDB9ZXhwYW5kVG9rZW5zKHMpe3ZhciB1PVtdLGQ9dGhpcy5zdGFjay5sZW5ndGg7Zm9yKHRoaXMucHVzaFRva2VucyhzKTt0aGlzLnN0YWNrLmxlbmd0aD5kOylpZih0aGlzLmV4cGFuZE9uY2UoITApPT09ITEpe3ZhciBwPXRoaXMuc3RhY2sucG9wKCk7cC50cmVhdEFzUmVsYXgmJihwLm5vZXhwYW5kPSExLHAudHJlYXRBc1JlbGF4PSExKSx1LnB1c2gocCl9cmV0dXJuIHV9ZXhwYW5kTWFjcm9Bc1RleHQocyl7dmFyIHU9dGhpcy5leHBhbmRNYWNybyhzKTtyZXR1cm4gdSYmdS5tYXAoZD0+ZC50ZXh0KS5qb2luKCIiKX1fZ2V0RXhwYW5zaW9uKHMpe3ZhciB1PXRoaXMubWFjcm9zLmdldChzKTtpZih1PT1udWxsKXJldHVybiB1O2lmKHMubGVuZ3RoPT09MSl7dmFyIGQ9dGhpcy5sZXhlci5jYXRjb2Rlc1tzXTtpZihkIT1udWxsJiZkIT09MTMpcmV0dXJufXZhciBwPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3UodGhpcyk6dTtpZih0eXBlb2YgcD09InN0cmluZyIpe3ZhciB2PTA7aWYocC5pbmRleE9mKCIjIikhPT0tMSlmb3IodmFyIGI9cC5yZXBsYWNlKC8jIy9nLCIiKTtiLmluZGV4T2YoIiMiKyh2KzEpKSE9PS0xOykrK3Y7Zm9yKHZhciB5PW5ldyBocWUocCx0aGlzLnNldHRpbmdzKSxUPVtdLF89eS5sZXgoKTtfLnRleHQhPT0iRU9GIjspVC5wdXNoKF8pLF89eS5sZXgoKTtULnJldmVyc2UoKTt2YXIgQT17dG9rZW5zOlQsbnVtQXJnczp2fTtyZXR1cm4gQX1yZXR1cm4gcH1pc0RlZmluZWQocyl7cmV0dXJuIHRoaXMubWFjcm9zLmhhcyhzKXx8TDkuaGFzT3duUHJvcGVydHkocyl8fFVsLm1hdGguaGFzT3duUHJvcGVydHkocyl8fFVsLnRleHQuaGFzT3duUHJvcGVydHkocyl8fGJxZS5oYXNPd25Qcm9wZXJ0eShzKX1pc0V4cGFuZGFibGUocyl7dmFyIHU9dGhpcy5tYWNyb3MuZ2V0KHMpO3JldHVybiB1IT1udWxsP3R5cGVvZiB1PT0ic3RyaW5nInx8dHlwZW9mIHU9PSJmdW5jdGlvbiJ8fCF1LnVuZXhwYW5kYWJsZTpMOS5oYXNPd25Qcm9wZXJ0eShzKSYmIUw5W3NdLnByaW1pdGl2ZX19dmFyIG1xZT0vXlvigorigovigozigo3igo7igoDigoHigoLigoPigoTigoXigobigofigojigonigpDigpHigpXhtaLisbzigpbigpfigpjigpnigpLigprhtaPigpvigpzhtaThtaXigpPhtabhtafhtajhtanhtapdLyxUUT1PYmplY3QuZnJlZXplKHsi4oKKIjoiKyIsIuKCiyI6Ii0iLCLigowiOiI9Iiwi4oKNIjoiKCIsIuKCjiI6IikiLCLigoAiOiIwIiwi4oKBIjoiMSIsIuKCgiI6IjIiLCLigoMiOiIzIiwi4oKEIjoiNCIsIuKChSI6IjUiLCLigoYiOiI2Iiwi4oKHIjoiNyIsIuKCiCI6IjgiLCLigokiOiI5Iiwi4oKQIjoiYSIsIuKCkSI6ImUiLCLigpUiOiJoIiwi4bWiIjoiaSIsIuKxvCI6ImoiLCLigpYiOiJrIiwi4oKXIjoibCIsIuKCmCI6Im0iLCLigpkiOiJuIiwi4oKSIjoibyIsIuKCmiI6InAiLCLhtaMiOiJyIiwi4oKbIjoicyIsIuKCnCI6InQiLCLhtaQiOiJ1Iiwi4bWlIjoidiIsIuKCkyI6IngiLCLhtaYiOiLOsiIsIuG1pyI6Is6zIiwi4bWoIjoiz4EiLCLhtakiOiLPlSIsIuG1qiI6Is+HIiwi4oG6IjoiKyIsIuKBuyI6Ii0iLCLigbwiOiI9Iiwi4oG9IjoiKCIsIuKBviI6IikiLCLigbAiOiIwIiwiwrkiOiIxIiwiwrIiOiIyIiwiwrMiOiIzIiwi4oG0IjoiNCIsIuKBtSI6IjUiLCLigbYiOiI2Iiwi4oG3IjoiNyIsIuKBuCI6IjgiLCLigbkiOiI5Iiwi4bSsIjoiQSIsIuG0riI6IkIiLCLhtLAiOiJEIiwi4bSxIjoiRSIsIuG0syI6IkciLCLhtLQiOiJIIiwi4bS1IjoiSSIsIuG0tiI6IkoiLCLhtLciOiJLIiwi4bS4IjoiTCIsIuG0uSI6Ik0iLCLhtLoiOiJOIiwi4bS8IjoiTyIsIuG0viI6IlAiLCLhtL8iOiJSIiwi4bWAIjoiVCIsIuG1gSI6IlUiLCLisb0iOiJWIiwi4bWCIjoiVyIsIuG1gyI6ImEiLCLhtYciOiJiIiwi4bacIjoiYyIsIuG1iCI6ImQiLCLhtYkiOiJlIiwi4bagIjoiZiIsIuG1jSI6ImciLMqwOiJoIiwi4oGxIjoiaSIsyrI6ImoiLCLhtY8iOiJrIizLoToibCIsIuG1kCI6Im0iLOKBvzoibiIsIuG1kiI6Im8iLCLhtZYiOiJwIizKszoiciIsy6I6InMiLCLhtZciOiJ0Iiwi4bWYIjoidSIsIuG1myI6InYiLMq3OiJ3IizLozoieCIsyrg6InkiLCLhtrsiOiJ6Iiwi4bWdIjoizrIiLCLhtZ4iOiLOsyIsIuG1nyI6Is60Iiwi4bWgIjoiz5UiLCLhtaEiOiLPhyIsIuG2vyI6Is64In0pLFBiZT17IsyBIjp7dGV4dDoiXFwnIixtYXRoOiJcXGFjdXRlIn0sIsyAIjp7dGV4dDoiXFxgIixtYXRoOiJcXGdyYXZlIn0sIsyIIjp7dGV4dDonXFwiJyxtYXRoOiJcXGRkb3QifSwizIMiOnt0ZXh0OiJcXH4iLG1hdGg6IlxcdGlsZGUifSwizIQiOnt0ZXh0OiJcXD0iLG1hdGg6IlxcYmFyIn0sIsyGIjp7dGV4dDoiXFx1IixtYXRoOiJcXGJyZXZlIn0sIsyMIjp7dGV4dDoiXFx2IixtYXRoOiJcXGNoZWNrIn0sIsyCIjp7dGV4dDoiXFxeIixtYXRoOiJcXGhhdCJ9LCLMhyI6e3RleHQ6IlxcLiIsbWF0aDoiXFxkb3QifSwizIoiOnt0ZXh0OiJcXHIiLG1hdGg6IlxcbWF0aHJpbmcifSwizIsiOnt0ZXh0OiJcXEgifSwizKciOnt0ZXh0OiJcXGMifX0sdnFlPXvDoToiYcyBIizDoDoiYcyAIizDpDoiYcyIIizHnzoiYcyIzIQiLMOjOiJhzIMiLMSBOiJhzIQiLMSDOiJhzIYiLOG6rzoiYcyGzIEiLOG6sToiYcyGzIAiLOG6tToiYcyGzIMiLMeOOiJhzIwiLMOiOiJhzIIiLOG6pToiYcyCzIEiLOG6pzoiYcyCzIAiLOG6qzoiYcyCzIMiLMinOiJhzIciLMehOiJhzIfMhCIsw6U6ImHMiiIsx7s6ImHMisyBIizhuIM6ImLMhyIsxIc6ImPMgSIs4biJOiJjzKfMgSIsxI06ImPMjCIsxIk6ImPMgiIsxIs6ImPMhyIsw6c6ImPMpyIsxI86ImTMjCIs4biLOiJkzIciLOG4kToiZMynIizDqToiZcyBIizDqDoiZcyAIizDqzoiZcyIIizhur06ImXMgyIsxJM6ImXMhCIs4biXOiJlzITMgSIs4biVOiJlzITMgCIsxJU6ImXMhiIs4bidOiJlzKfMhiIsxJs6ImXMjCIsw6o6ImXMgiIs4bq/OiJlzILMgSIs4buBOiJlzILMgCIs4buFOiJlzILMgyIsxJc6ImXMhyIsyKk6ImXMpyIs4bifOiJmzIciLMe1OiJnzIEiLOG4oToiZ8yEIizEnzoiZ8yGIizHpzoiZ8yMIizEnToiZ8yCIizEoToiZ8yHIizEozoiZ8ynIizhuKc6ImjMiCIsyJ86ImjMjCIsxKU6ImjMgiIs4bijOiJozIciLOG4qToiaMynIizDrToiacyBIizDrDoiacyAIizDrzoiacyIIizhuK86ImnMiMyBIizEqToiacyDIizEqzoiacyEIizErToiacyGIizHkDoiacyMIizDrjoiacyCIizHsDoiasyMIizEtToiasyCIizhuLE6ImvMgSIsx6k6ImvMjCIsxLc6ImvMpyIsxLo6ImzMgSIsxL46ImzMjCIsxLw6ImzMpyIs4bi/OiJtzIEiLOG5gToibcyHIizFhDoibsyBIizHuToibsyAIizDsToibsyDIizFiDoibsyMIizhuYU6Im7MhyIsxYY6Im7MpyIsw7M6Im/MgSIsw7I6Im/MgCIsw7Y6Im/MiCIsyKs6Im/MiMyEIizDtToib8yDIizhuY06Im/Mg8yBIizhuY86Im/Mg8yIIizIrToib8yDzIQiLMWNOiJvzIQiLOG5kzoib8yEzIEiLOG5kToib8yEzIAiLMWPOiJvzIYiLMeSOiJvzIwiLMO0OiJvzIIiLOG7kToib8yCzIEiLOG7kzoib8yCzIAiLOG7lzoib8yCzIMiLMivOiJvzIciLMixOiJvzIfMhCIsxZE6Im/MiyIs4bmVOiJwzIEiLOG5lzoicMyHIizFlToicsyBIizFmToicsyMIizhuZk6InLMhyIsxZc6InLMpyIsxZs6InPMgSIs4bmlOiJzzIHMhyIsxaE6InPMjCIs4bmnOiJzzIzMhyIsxZ06InPMgiIs4bmhOiJzzIciLMWfOiJzzKciLOG6lzoidMyIIizFpToidMyMIizhuas6InTMhyIsxaM6InTMpyIsw7o6InXMgSIsw7k6InXMgCIsw7w6InXMiCIsx5g6InXMiMyBIizHnDoidcyIzIAiLMeWOiJ1zIjMhCIsx5o6InXMiMyMIizFqToidcyDIizhubk6InXMg8yBIizFqzoidcyEIizhubs6InXMhMyIIizFrToidcyGIizHlDoidcyMIizDuzoidcyCIizFrzoidcyKIizFsToidcyLIizhub06InbMgyIs4bqDOiJ3zIEiLOG6gToid8yAIizhuoU6InfMiCIsxbU6InfMgiIs4bqHOiJ3zIciLOG6mDoid8yKIizhuo06InjMiCIs4bqLOiJ4zIciLMO9OiJ5zIEiLOG7szoiecyAIizDvzoiecyIIizhu7k6InnMgyIsyLM6InnMhCIsxbc6InnMgiIs4bqPOiJ5zIciLOG6mToiecyKIizFujoiesyBIizFvjoiesyMIizhupE6InrMgiIsxbw6InrMhyIsw4E6IkHMgSIsw4A6IkHMgCIsw4Q6IkHMiCIsx546IkHMiMyEIizDgzoiQcyDIizEgDoiQcyEIizEgjoiQcyGIizhuq46IkHMhsyBIizhurA6IkHMhsyAIizhurQ6IkHMhsyDIizHjToiQcyMIizDgjoiQcyCIizhuqQ6IkHMgsyBIizhuqY6IkHMgsyAIizhuqo6IkHMgsyDIizIpjoiQcyHIizHoDoiQcyHzIQiLMOFOiJBzIoiLMe6OiJBzIrMgSIs4biCOiJCzIciLMSGOiJDzIEiLOG4iDoiQ8ynzIEiLMSMOiJDzIwiLMSIOiJDzIIiLMSKOiJDzIciLMOHOiJDzKciLMSOOiJEzIwiLOG4ijoiRMyHIizhuJA6IkTMpyIsw4k6IkXMgSIsw4g6IkXMgCIsw4s6IkXMiCIs4bq8OiJFzIMiLMSSOiJFzIQiLOG4ljoiRcyEzIEiLOG4lDoiRcyEzIAiLMSUOiJFzIYiLOG4nDoiRcynzIYiLMSaOiJFzIwiLMOKOiJFzIIiLOG6vjoiRcyCzIEiLOG7gDoiRcyCzIAiLOG7hDoiRcyCzIMiLMSWOiJFzIciLMioOiJFzKciLOG4njoiRsyHIizHtDoiR8yBIizhuKA6IkfMhCIsxJ46IkfMhiIsx6Y6IkfMjCIsxJw6IkfMgiIsxKA6IkfMhyIsxKI6IkfMpyIs4bimOiJIzIgiLMieOiJIzIwiLMSkOiJIzIIiLOG4ojoiSMyHIizhuKg6IkjMpyIsw406IknMgSIsw4w6IknMgCIsw486IknMiCIs4biuOiJJzIjMgSIsxKg6IknMgyIsxKo6IknMhCIsxKw6IknMhiIsx486IknMjCIsw446IknMgiIsxLA6IknMhyIsxLQ6IkrMgiIs4biwOiJLzIEiLMeoOiJLzIwiLMS2OiJLzKciLMS5OiJMzIEiLMS9OiJMzIwiLMS7OiJMzKciLOG4vjoiTcyBIizhuYA6Ik3MhyIsxYM6Ik7MgSIsx7g6Ik7MgCIsw5E6Ik7MgyIsxYc6Ik7MjCIs4bmEOiJOzIciLMWFOiJOzKciLMOTOiJPzIEiLMOSOiJPzIAiLMOWOiJPzIgiLMiqOiJPzIjMhCIsw5U6Ik/MgyIs4bmMOiJPzIPMgSIs4bmOOiJPzIPMiCIsyKw6Ik/Mg8yEIizFjDoiT8yEIizhuZI6Ik/MhMyBIizhuZA6Ik/MhMyAIizFjjoiT8yGIizHkToiT8yMIizDlDoiT8yCIizhu5A6Ik/MgsyBIizhu5I6Ik/MgsyAIizhu5Y6Ik/MgsyDIizIrjoiT8yHIizIsDoiT8yHzIQiLMWQOiJPzIsiLOG5lDoiUMyBIizhuZY6IlDMhyIsxZQ6IlLMgSIsxZg6IlLMjCIs4bmYOiJSzIciLMWWOiJSzKciLMWaOiJTzIEiLOG5pDoiU8yBzIciLMWgOiJTzIwiLOG5pjoiU8yMzIciLMWcOiJTzIIiLOG5oDoiU8yHIizFnjoiU8ynIizFpDoiVMyMIizhuao6IlTMhyIsxaI6IlTMpyIsw5o6IlXMgSIsw5k6IlXMgCIsw5w6IlXMiCIsx5c6IlXMiMyBIizHmzoiVcyIzIAiLMeVOiJVzIjMhCIsx5k6IlXMiMyMIizFqDoiVcyDIizhubg6IlXMg8yBIizFqjoiVcyEIizhubo6IlXMhMyIIizFrDoiVcyGIizHkzoiVcyMIizDmzoiVcyCIizFrjoiVcyKIizFsDoiVcyLIizhubw6IlbMgyIs4bqCOiJXzIEiLOG6gDoiV8yAIizhuoQ6IlfMiCIsxbQ6IlfMgiIs4bqGOiJXzIciLOG6jDoiWMyIIizhuoo6IljMhyIsw506IlnMgSIs4buyOiJZzIAiLMW4OiJZzIgiLOG7uDoiWcyDIizIsjoiWcyEIizFtjoiWcyCIizhuo46IlnMhyIsxbk6IlrMgSIsxb06IlrMjCIs4bqQOiJazIIiLMW7OiJazIciLM6sOiLOscyBIizhvbA6Is6xzIAiLOG+sToizrHMhCIs4b6wOiLOscyGIizOrToizrXMgSIs4b2yOiLOtcyAIizOrjoizrfMgSIs4b20OiLOt8yAIizOrzoizrnMgSIs4b22OiLOucyAIizPijoizrnMiCIszpA6Is65zIjMgSIs4b+SOiLOucyIzIAiLOG/kToizrnMhCIs4b+QOiLOucyGIizPjDoizr/MgSIs4b24OiLOv8yAIizPjToiz4XMgSIs4b26OiLPhcyAIizPizoiz4XMiCIszrA6Is+FzIjMgSIs4b+iOiLPhcyIzIAiLOG/oToiz4XMhCIs4b+gOiLPhcyGIizPjjoiz4nMgSIs4b28OiLPicyAIizOjjoizqXMgSIs4b+qOiLOpcyAIizOqzoizqXMiCIs4b+pOiLOpcyEIizhv6g6Is6lzIYiLM6POiLOqcyBIizhv7o6Is6pzIAifTtjbGFzcyBnUntjb25zdHJ1Y3RvcihzLHUpe3RoaXMubW9kZT12b2lkIDAsdGhpcy5ndWxsZXQ9dm9pZCAwLHRoaXMuc2V0dGluZ3M9dm9pZCAwLHRoaXMubGVmdHJpZ2h0RGVwdGg9dm9pZCAwLHRoaXMubmV4dFRva2VuPXZvaWQgMCx0aGlzLm1vZGU9Im1hdGgiLHRoaXMuZ3VsbGV0PW5ldyBDVnQocyx1LHRoaXMubW9kZSksdGhpcy5zZXR0aW5ncz11LHRoaXMubGVmdHJpZ2h0RGVwdGg9MH1leHBlY3Qocyx1KXtpZih1PT09dm9pZCAwJiYodT0hMCksdGhpcy5mZXRjaCgpLnRleHQhPT1zKXRocm93IG5ldyBDaSgiRXhwZWN0ZWQgJyIrcysiJywgZ290ICciK3RoaXMuZmV0Y2goKS50ZXh0KyInIix0aGlzLmZldGNoKCkpO3UmJnRoaXMuY29uc3VtZSgpfWNvbnN1bWUoKXt0aGlzLm5leHRUb2tlbj1udWxsfWZldGNoKCl7cmV0dXJuIHRoaXMubmV4dFRva2VuPT1udWxsJiYodGhpcy5uZXh0VG9rZW49dGhpcy5ndWxsZXQuZXhwYW5kTmV4dFRva2VuKCkpLHRoaXMubmV4dFRva2VufXN3aXRjaE1vZGUocyl7dGhpcy5tb2RlPXMsdGhpcy5ndWxsZXQuc3dpdGNoTW9kZShzKX1wYXJzZSgpe3RoaXMuc2V0dGluZ3MuZ2xvYmFsR3JvdXB8fHRoaXMuZ3VsbGV0LmJlZ2luR3JvdXAoKSx0aGlzLnNldHRpbmdzLmNvbG9ySXNUZXh0Q29sb3ImJnRoaXMuZ3VsbGV0Lm1hY3Jvcy5zZXQoIlxcY29sb3IiLCJcXHRleHRjb2xvciIpO3RyeXt2YXIgcz10aGlzLnBhcnNlRXhwcmVzc2lvbighMSk7cmV0dXJuIHRoaXMuZXhwZWN0KCJFT0YiKSx0aGlzLnNldHRpbmdzLmdsb2JhbEdyb3VwfHx0aGlzLmd1bGxldC5lbmRHcm91cCgpLHN9ZmluYWxseXt0aGlzLmd1bGxldC5lbmRHcm91cHMoKX19c3VicGFyc2Uocyl7dmFyIHU9dGhpcy5uZXh0VG9rZW47dGhpcy5jb25zdW1lKCksdGhpcy5ndWxsZXQucHVzaFRva2VuKG5ldyBVNCgifSIpKSx0aGlzLmd1bGxldC5wdXNoVG9rZW5zKHMpO3ZhciBkPXRoaXMucGFyc2VFeHByZXNzaW9uKCExKTtyZXR1cm4gdGhpcy5leHBlY3QoIn0iKSx0aGlzLm5leHRUb2tlbj11LGR9cGFyc2VFeHByZXNzaW9uKHMsdSl7Zm9yKHZhciBkPVtdOzspe3RoaXMubW9kZT09PSJtYXRoIiYmdGhpcy5jb25zdW1lU3BhY2VzKCk7dmFyIHA9dGhpcy5mZXRjaCgpO2lmKGdSLmVuZE9mRXhwcmVzc2lvbi5pbmRleE9mKHAudGV4dCkhPT0tMXx8dSYmcC50ZXh0PT09dXx8cyYmTDlbcC50ZXh0XSYmTDlbcC50ZXh0XS5pbmZpeClicmVhazt2YXIgdj10aGlzLnBhcnNlQXRvbSh1KTtpZih2KXtpZih2LnR5cGU9PT0iaW50ZXJuYWwiKWNvbnRpbnVlfWVsc2UgYnJlYWs7ZC5wdXNoKHYpfXJldHVybiB0aGlzLm1vZGU9PT0idGV4dCImJnRoaXMuZm9ybUxpZ2F0dXJlcyhkKSx0aGlzLmhhbmRsZUluZml4Tm9kZXMoZCl9aGFuZGxlSW5maXhOb2RlcyhzKXtmb3IodmFyIHU9LTEsZCxwPTA7cDxzLmxlbmd0aDtwKyspaWYoc1twXS50eXBlPT09ImluZml4Iil7aWYodSE9PS0xKXRocm93IG5ldyBDaSgib25seSBvbmUgaW5maXggb3BlcmF0b3IgcGVyIGdyb3VwIixzW3BdLnRva2VuKTt1PXAsZD1zW3BdLnJlcGxhY2VXaXRofWlmKHUhPT0tMSYmZCl7dmFyIHYsYix5PXMuc2xpY2UoMCx1KSxUPXMuc2xpY2UodSsxKTt5Lmxlbmd0aD09PTEmJnlbMF0udHlwZT09PSJvcmRncm91cCI/dj15WzBdOnY9e3R5cGU6Im9yZGdyb3VwIixtb2RlOnRoaXMubW9kZSxib2R5Onl9LFQubGVuZ3RoPT09MSYmVFswXS50eXBlPT09Im9yZGdyb3VwIj9iPVRbMF06Yj17dHlwZToib3JkZ3JvdXAiLG1vZGU6dGhpcy5tb2RlLGJvZHk6VH07dmFyIF87cmV0dXJuIGQ9PT0iXFxcXGFib3ZlZnJhYyI/Xz10aGlzLmNhbGxGdW5jdGlvbihkLFt2LHNbdV0sYl0sW10pOl89dGhpcy5jYWxsRnVuY3Rpb24oZCxbdixiXSxbXSksW19dfWVsc2UgcmV0dXJuIHN9aGFuZGxlU3VwU3Vic2NyaXB0KHMpe3ZhciB1PXRoaXMuZmV0Y2goKSxkPXUudGV4dDt0aGlzLmNvbnN1bWUoKSx0aGlzLmNvbnN1bWVTcGFjZXMoKTt2YXIgcD10aGlzLnBhcnNlR3JvdXAocyk7aWYoIXApdGhyb3cgbmV3IENpKCJFeHBlY3RlZCBncm91cCBhZnRlciAnIitkKyInIix1KTtyZXR1cm4gcH1mb3JtYXRVbnN1cHBvcnRlZENtZChzKXtmb3IodmFyIHU9W10sZD0wO2Q8cy5sZW5ndGg7ZCsrKXUucHVzaCh7dHlwZToidGV4dG9yZCIsbW9kZToidGV4dCIsdGV4dDpzW2RdfSk7dmFyIHA9e3R5cGU6InRleHQiLG1vZGU6dGhpcy5tb2RlLGJvZHk6dX0sdj17dHlwZToiY29sb3IiLG1vZGU6dGhpcy5tb2RlLGNvbG9yOnRoaXMuc2V0dGluZ3MuZXJyb3JDb2xvcixib2R5OltwXX07cmV0dXJuIHZ9cGFyc2VBdG9tKHMpe3ZhciB1PXRoaXMucGFyc2VHcm91cCgiYXRvbSIscyk7aWYodGhpcy5tb2RlPT09InRleHQiKXJldHVybiB1O2Zvcih2YXIgZCxwOzspe3RoaXMuY29uc3VtZVNwYWNlcygpO3ZhciB2PXRoaXMuZmV0Y2goKTtpZih2LnRleHQ9PT0iXFxsaW1pdHMifHx2LnRleHQ9PT0iXFxub2xpbWl0cyIpe2lmKHUmJnUudHlwZT09PSJvcCIpe3ZhciBiPXYudGV4dD09PSJcXGxpbWl0cyI7dS5saW1pdHM9Yix1LmFsd2F5c0hhbmRsZVN1cFN1Yj0hMH1lbHNlIGlmKHUmJnUudHlwZT09PSJvcGVyYXRvcm5hbWUiKXUuYWx3YXlzSGFuZGxlU3VwU3ViJiYodS5saW1pdHM9di50ZXh0PT09IlxcbGltaXRzIik7ZWxzZSB0aHJvdyBuZXcgQ2koIkxpbWl0IGNvbnRyb2xzIG11c3QgZm9sbG93IGEgbWF0aCBvcGVyYXRvciIsdik7dGhpcy5jb25zdW1lKCl9ZWxzZSBpZih2LnRleHQ9PT0iXiIpe2lmKGQpdGhyb3cgbmV3IENpKCJEb3VibGUgc3VwZXJzY3JpcHQiLHYpO2Q9dGhpcy5oYW5kbGVTdXBTdWJzY3JpcHQoInN1cGVyc2NyaXB0Iil9ZWxzZSBpZih2LnRleHQ9PT0iXyIpe2lmKHApdGhyb3cgbmV3IENpKCJEb3VibGUgc3Vic2NyaXB0Iix2KTtwPXRoaXMuaGFuZGxlU3VwU3Vic2NyaXB0KCJzdWJzY3JpcHQiKX1lbHNlIGlmKHYudGV4dD09PSInIil7aWYoZCl0aHJvdyBuZXcgQ2koIkRvdWJsZSBzdXBlcnNjcmlwdCIsdik7dmFyIHk9e3R5cGU6InRleHRvcmQiLG1vZGU6dGhpcy5tb2RlLHRleHQ6IlxccHJpbWUifSxUPVt5XTtmb3IodGhpcy5jb25zdW1lKCk7dGhpcy5mZXRjaCgpLnRleHQ9PT0iJyI7KVQucHVzaCh5KSx0aGlzLmNvbnN1bWUoKTt0aGlzLmZldGNoKCkudGV4dD09PSJeIiYmVC5wdXNoKHRoaXMuaGFuZGxlU3VwU3Vic2NyaXB0KCJzdXBlcnNjcmlwdCIpKSxkPXt0eXBlOiJvcmRncm91cCIsbW9kZTp0aGlzLm1vZGUsYm9keTpUfX1lbHNlIGlmKFRRW3YudGV4dF0pe3ZhciBfPVRRW3YudGV4dF0sQT1tcWUudGVzdCh2LnRleHQpO2Zvcih0aGlzLmNvbnN1bWUoKTs7KXt2YXIgUD10aGlzLmZldGNoKCkudGV4dDtpZighVFFbUF18fG1xZS50ZXN0KFApIT09QSlicmVhazt0aGlzLmNvbnN1bWUoKSxfKz1UUVtQXX12YXIgUj1uZXcgZ1IoXyx0aGlzLnNldHRpbmdzKS5wYXJzZSgpO0E/cD17dHlwZToib3JkZ3JvdXAiLG1vZGU6Im1hdGgiLGJvZHk6Un06ZD17dHlwZToib3JkZ3JvdXAiLG1vZGU6Im1hdGgiLGJvZHk6Un19ZWxzZSBicmVha31yZXR1cm4gZHx8cD97dHlwZToic3Vwc3ViIixtb2RlOnRoaXMubW9kZSxiYXNlOnUsc3VwOmQsc3ViOnB9OnV9cGFyc2VGdW5jdGlvbihzLHUpe3ZhciBkPXRoaXMuZmV0Y2goKSxwPWQudGV4dCx2PUw5W3BdO2lmKCF2KXJldHVybiBudWxsO2lmKHRoaXMuY29uc3VtZSgpLHUmJnUhPT0iYXRvbSImJiF2LmFsbG93ZWRJbkFyZ3VtZW50KXRocm93IG5ldyBDaSgiR290IGZ1bmN0aW9uICciK3ArIicgd2l0aCBubyBhcmd1bWVudHMiKyh1PyIgYXMgIit1OiIiKSxkKTtpZih0aGlzLm1vZGU9PT0idGV4dCImJiF2LmFsbG93ZWRJblRleHQpdGhyb3cgbmV3IENpKCJDYW4ndCB1c2UgZnVuY3Rpb24gJyIrcCsiJyBpbiB0ZXh0IG1vZGUiLGQpO2lmKHRoaXMubW9kZT09PSJtYXRoIiYmdi5hbGxvd2VkSW5NYXRoPT09ITEpdGhyb3cgbmV3IENpKCJDYW4ndCB1c2UgZnVuY3Rpb24gJyIrcCsiJyBpbiBtYXRoIG1vZGUiLGQpO3ZhcnthcmdzOmIsb3B0QXJnczp5fT10aGlzLnBhcnNlQXJndW1lbnRzKHAsdik7cmV0dXJuIHRoaXMuY2FsbEZ1bmN0aW9uKHAsYix5LGQscyl9Y2FsbEZ1bmN0aW9uKHMsdSxkLHAsdil7dmFyIGI9e2Z1bmNOYW1lOnMscGFyc2VyOnRoaXMsdG9rZW46cCxicmVha09uVG9rZW5UZXh0OnZ9LHk9TDlbc107aWYoeSYmeS5oYW5kbGVyKXJldHVybiB5LmhhbmRsZXIoYix1LGQpO3Rocm93IG5ldyBDaSgiTm8gZnVuY3Rpb24gaGFuZGxlciBmb3IgIitzKX1wYXJzZUFyZ3VtZW50cyhzLHUpe3ZhciBkPXUubnVtQXJncyt1Lm51bU9wdGlvbmFsQXJncztpZihkPT09MClyZXR1cm57YXJnczpbXSxvcHRBcmdzOltdfTtmb3IodmFyIHA9W10sdj1bXSxiPTA7YjxkO2IrKyl7dmFyIHk9dS5hcmdUeXBlcyYmdS5hcmdUeXBlc1tiXSxUPWI8dS5udW1PcHRpb25hbEFyZ3M7KHUucHJpbWl0aXZlJiZ5PT1udWxsfHx1LnR5cGU9PT0ic3FydCImJmI9PT0xJiZ2WzBdPT1udWxsKSYmKHk9InByaW1pdGl2ZSIpO3ZhciBfPXRoaXMucGFyc2VHcm91cE9mVHlwZSgiYXJndW1lbnQgdG8gJyIrcysiJyIseSxUKTtpZihUKXYucHVzaChfKTtlbHNlIGlmKF8hPW51bGwpcC5wdXNoKF8pO2Vsc2UgdGhyb3cgbmV3IENpKCJOdWxsIGFyZ3VtZW50LCBwbGVhc2UgcmVwb3J0IHRoaXMgYXMgYSBidWciKX1yZXR1cm57YXJnczpwLG9wdEFyZ3M6dn19cGFyc2VHcm91cE9mVHlwZShzLHUsZCl7c3dpdGNoKHUpe2Nhc2UiY29sb3IiOnJldHVybiB0aGlzLnBhcnNlQ29sb3JHcm91cChkKTtjYXNlInNpemUiOnJldHVybiB0aGlzLnBhcnNlU2l6ZUdyb3VwKGQpO2Nhc2UidXJsIjpyZXR1cm4gdGhpcy5wYXJzZVVybEdyb3VwKGQpO2Nhc2UibWF0aCI6Y2FzZSJ0ZXh0IjpyZXR1cm4gdGhpcy5wYXJzZUFyZ3VtZW50R3JvdXAoZCx1KTtjYXNlImhib3giOnt2YXIgcD10aGlzLnBhcnNlQXJndW1lbnRHcm91cChkLCJ0ZXh0Iik7cmV0dXJuIHAhPW51bGw/e3R5cGU6InN0eWxpbmciLG1vZGU6cC5tb2RlLGJvZHk6W3BdLHN0eWxlOiJ0ZXh0In06bnVsbH1jYXNlInJhdyI6e3ZhciB2PXRoaXMucGFyc2VTdHJpbmdHcm91cCgicmF3IixkKTtyZXR1cm4gdiE9bnVsbD97dHlwZToicmF3Iixtb2RlOiJ0ZXh0IixzdHJpbmc6di50ZXh0fTpudWxsfWNhc2UicHJpbWl0aXZlIjp7aWYoZCl0aHJvdyBuZXcgQ2koIkEgcHJpbWl0aXZlIGFyZ3VtZW50IGNhbm5vdCBiZSBvcHRpb25hbCIpO3ZhciBiPXRoaXMucGFyc2VHcm91cChzKTtpZihiPT1udWxsKXRocm93IG5ldyBDaSgiRXhwZWN0ZWQgZ3JvdXAgYXMgIitzLHRoaXMuZmV0Y2goKSk7cmV0dXJuIGJ9Y2FzZSJvcmlnaW5hbCI6Y2FzZSBudWxsOmNhc2Ugdm9pZCAwOnJldHVybiB0aGlzLnBhcnNlQXJndW1lbnRHcm91cChkKTtkZWZhdWx0OnRocm93IG5ldyBDaSgiVW5rbm93biBncm91cCB0eXBlIGFzICIrcyx0aGlzLmZldGNoKCkpfX1jb25zdW1lU3BhY2VzKCl7Zm9yKDt0aGlzLmZldGNoKCkudGV4dD09PSIgIjspdGhpcy5jb25zdW1lKCl9cGFyc2VTdHJpbmdHcm91cChzLHUpe3ZhciBkPXRoaXMuZ3VsbGV0LnNjYW5Bcmd1bWVudCh1KTtpZihkPT1udWxsKXJldHVybiBudWxsO2Zvcih2YXIgcD0iIix2Oyh2PXRoaXMuZmV0Y2goKSkudGV4dCE9PSJFT0YiOylwKz12LnRleHQsdGhpcy5jb25zdW1lKCk7cmV0dXJuIHRoaXMuY29uc3VtZSgpLGQudGV4dD1wLGR9cGFyc2VSZWdleEdyb3VwKHMsdSl7Zm9yKHZhciBkPXRoaXMuZmV0Y2goKSxwPWQsdj0iIixiOyhiPXRoaXMuZmV0Y2goKSkudGV4dCE9PSJFT0YiJiZzLnRlc3QoditiLnRleHQpOylwPWIsdis9cC50ZXh0LHRoaXMuY29uc3VtZSgpO2lmKHY9PT0iIil0aHJvdyBuZXcgQ2koIkludmFsaWQgIit1KyI6ICciK2QudGV4dCsiJyIsZCk7cmV0dXJuIGQucmFuZ2UocCx2KX1wYXJzZUNvbG9yR3JvdXAocyl7dmFyIHU9dGhpcy5wYXJzZVN0cmluZ0dyb3VwKCJjb2xvciIscyk7aWYodT09bnVsbClyZXR1cm4gbnVsbDt2YXIgZD0vXigjW2EtZjAtOV17M318Iz9bYS1mMC05XXs2fXxbYS16XSspJC9pLmV4ZWModS50ZXh0KTtpZighZCl0aHJvdyBuZXcgQ2koIkludmFsaWQgY29sb3I6ICciK3UudGV4dCsiJyIsdSk7dmFyIHA9ZFswXTtyZXR1cm4vXlswLTlhLWZdezZ9JC9pLnRlc3QocCkmJihwPSIjIitwKSx7dHlwZToiY29sb3ItdG9rZW4iLG1vZGU6dGhpcy5tb2RlLGNvbG9yOnB9fXBhcnNlU2l6ZUdyb3VwKHMpe3ZhciB1LGQ9ITE7aWYodGhpcy5ndWxsZXQuY29uc3VtZVNwYWNlcygpLCFzJiZ0aGlzLmd1bGxldC5mdXR1cmUoKS50ZXh0IT09InsiP3U9dGhpcy5wYXJzZVJlZ2V4R3JvdXAoL15bLStdPyAqKD86JHxcZCt8XGQrXC5cZCp8XC5cZCopICpbYS16XXswLDJ9ICokLywic2l6ZSIpOnU9dGhpcy5wYXJzZVN0cmluZ0dyb3VwKCJzaXplIixzKSwhdSlyZXR1cm4gbnVsbDshcyYmdS50ZXh0Lmxlbmd0aD09PTAmJih1LnRleHQ9IjBwdCIsZD0hMCk7dmFyIHA9LyhbLStdPykgKihcZCsoPzpcLlxkKik/fFwuXGQrKSAqKFthLXpdezJ9KS8uZXhlYyh1LnRleHQpO2lmKCFwKXRocm93IG5ldyBDaSgiSW52YWxpZCBzaXplOiAnIit1LnRleHQrIiciLHUpO3ZhciB2PXtudW1iZXI6KyhwWzFdK3BbMl0pLHVuaXQ6cFszXX07aWYoIUokZSh2KSl0aHJvdyBuZXcgQ2koIkludmFsaWQgdW5pdDogJyIrdi51bml0KyInIix1KTtyZXR1cm57dHlwZToic2l6ZSIsbW9kZTp0aGlzLm1vZGUsdmFsdWU6dixpc0JsYW5rOmR9fXBhcnNlVXJsR3JvdXAocyl7dGhpcy5ndWxsZXQubGV4ZXIuc2V0Q2F0Y29kZSgiJSIsMTMpLHRoaXMuZ3VsbGV0LmxleGVyLnNldENhdGNvZGUoIn4iLDEyKTt2YXIgdT10aGlzLnBhcnNlU3RyaW5nR3JvdXAoInVybCIscyk7aWYodGhpcy5ndWxsZXQubGV4ZXIuc2V0Q2F0Y29kZSgiJSIsMTQpLHRoaXMuZ3VsbGV0LmxleGVyLnNldENhdGNvZGUoIn4iLDEzKSx1PT1udWxsKXJldHVybiBudWxsO3ZhciBkPXUudGV4dC5yZXBsYWNlKC9cXChbIyQlJn5fXnt9XSkvZywiJDEiKTtyZXR1cm57dHlwZToidXJsIixtb2RlOnRoaXMubW9kZSx1cmw6ZH19cGFyc2VBcmd1bWVudEdyb3VwKHMsdSl7dmFyIGQ9dGhpcy5ndWxsZXQuc2NhbkFyZ3VtZW50KHMpO2lmKGQ9PW51bGwpcmV0dXJuIG51bGw7dmFyIHA9dGhpcy5tb2RlO3UmJnRoaXMuc3dpdGNoTW9kZSh1KSx0aGlzLmd1bGxldC5iZWdpbkdyb3VwKCk7dmFyIHY9dGhpcy5wYXJzZUV4cHJlc3Npb24oITEsIkVPRiIpO3RoaXMuZXhwZWN0KCJFT0YiKSx0aGlzLmd1bGxldC5lbmRHcm91cCgpO3ZhciBiPXt0eXBlOiJvcmRncm91cCIsbW9kZTp0aGlzLm1vZGUsbG9jOmQubG9jLGJvZHk6dn07cmV0dXJuIHUmJnRoaXMuc3dpdGNoTW9kZShwKSxifXBhcnNlR3JvdXAocyx1KXt2YXIgZD10aGlzLmZldGNoKCkscD1kLnRleHQsdjtpZihwPT09InsifHxwPT09IlxcYmVnaW5ncm91cCIpe3RoaXMuY29uc3VtZSgpO3ZhciBiPXA9PT0ieyI/In0iOiJcXGVuZGdyb3VwIjt0aGlzLmd1bGxldC5iZWdpbkdyb3VwKCk7dmFyIHk9dGhpcy5wYXJzZUV4cHJlc3Npb24oITEsYiksVD10aGlzLmZldGNoKCk7dGhpcy5leHBlY3QoYiksdGhpcy5ndWxsZXQuZW5kR3JvdXAoKSx2PXt0eXBlOiJvcmRncm91cCIsbW9kZTp0aGlzLm1vZGUsbG9jOmxtLnJhbmdlKGQsVCksYm9keTp5LHNlbWlzaW1wbGU6cD09PSJcXGJlZ2luZ3JvdXAifHx2b2lkIDB9fWVsc2UgaWYodj10aGlzLnBhcnNlRnVuY3Rpb24odSxzKXx8dGhpcy5wYXJzZVN5bWJvbCgpLHY9PW51bGwmJnBbMF09PT0iXFwiJiYhYnFlLmhhc093blByb3BlcnR5KHApKXtpZih0aGlzLnNldHRpbmdzLnRocm93T25FcnJvcil0aHJvdyBuZXcgQ2koIlVuZGVmaW5lZCBjb250cm9sIHNlcXVlbmNlOiAiK3AsZCk7dj10aGlzLmZvcm1hdFVuc3VwcG9ydGVkQ21kKHApLHRoaXMuY29uc3VtZSgpfXJldHVybiB2fWZvcm1MaWdhdHVyZXMocyl7Zm9yKHZhciB1PXMubGVuZ3RoLTEsZD0wO2Q8dTsrK2Qpe3ZhciBwPXNbZF0sdj1wLnRleHQ7dj09PSItIiYmc1tkKzFdLnRleHQ9PT0iLSImJihkKzE8dSYmc1tkKzJdLnRleHQ9PT0iLSI/KHMuc3BsaWNlKGQsMyx7dHlwZToidGV4dG9yZCIsbW9kZToidGV4dCIsbG9jOmxtLnJhbmdlKHAsc1tkKzJdKSx0ZXh0OiItLS0ifSksdS09Mik6KHMuc3BsaWNlKGQsMix7dHlwZToidGV4dG9yZCIsbW9kZToidGV4dCIsbG9jOmxtLnJhbmdlKHAsc1tkKzFdKSx0ZXh0OiItLSJ9KSx1LT0xKSksKHY9PT0iJyJ8fHY9PT0iYCIpJiZzW2QrMV0udGV4dD09PXYmJihzLnNwbGljZShkLDIse3R5cGU6InRleHRvcmQiLG1vZGU6InRleHQiLGxvYzpsbS5yYW5nZShwLHNbZCsxXSksdGV4dDp2K3Z9KSx1LT0xKX19cGFyc2VTeW1ib2woKXt2YXIgcz10aGlzLmZldGNoKCksdT1zLnRleHQ7aWYoL15cXHZlcmJbXmEtekEtWl0vLnRlc3QodSkpe3RoaXMuY29uc3VtZSgpO3ZhciBkPXUuc2xpY2UoNSkscD1kLmNoYXJBdCgwKT09PSIqIjtpZihwJiYoZD1kLnNsaWNlKDEpKSxkLmxlbmd0aDwyfHxkLmNoYXJBdCgwKSE9PWQuc2xpY2UoLTEpKXRocm93IG5ldyBDaShgXFx2ZXJiIGFzc2VydGlvbiBmYWlsZWQgLS0KICAgICAgICAgICAgICAgICAgICBwbGVhc2UgcmVwb3J0IHdoYXQgaW5wdXQgY2F1c2VkIHRoaXMgYnVnYCk7cmV0dXJuIGQ9ZC5zbGljZSgxLC0xKSx7dHlwZToidmVyYiIsbW9kZToidGV4dCIsYm9keTpkLHN0YXI6cH19dnFlLmhhc093blByb3BlcnR5KHVbMF0pJiYhVWxbdGhpcy5tb2RlXVt1WzBdXSYmKHRoaXMuc2V0dGluZ3Muc3RyaWN0JiZ0aGlzLm1vZGU9PT0ibWF0aCImJnRoaXMuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KCJ1bmljb2RlVGV4dEluTWF0aE1vZGUiLCdBY2NlbnRlZCBVbmljb2RlIHRleHQgY2hhcmFjdGVyICInK3VbMF0rJyIgdXNlZCBpbiBtYXRoIG1vZGUnLHMpLHU9dnFlW3VbMF1dK3Uuc2xpY2UoMSkpO3ZhciB2PXhWdC5leGVjKHUpO3YmJih1PXUuc3Vic3RyaW5nKDAsdi5pbmRleCksdT09PSJpIj91PSLEsSI6dT09PSJqIiYmKHU9Isi3IikpO3ZhciBiO2lmKFVsW3RoaXMubW9kZV1bdV0pe3RoaXMuc2V0dGluZ3Muc3RyaWN0JiZ0aGlzLm1vZGU9PT0ibWF0aCImJmFiZS5pbmRleE9mKHUpPj0wJiZ0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgidW5pY29kZVRleHRJbk1hdGhNb2RlIiwnTGF0aW4tMS9Vbmljb2RlIHRleHQgY2hhcmFjdGVyICInK3VbMF0rJyIgdXNlZCBpbiBtYXRoIG1vZGUnLHMpO3ZhciB5PVVsW3RoaXMubW9kZV1bdV0uZ3JvdXAsVD1sbS5yYW5nZShzKSxfO2lmKGRIdC5oYXNPd25Qcm9wZXJ0eSh5KSl7dmFyIEE9eTtfPXt0eXBlOiJhdG9tIixtb2RlOnRoaXMubW9kZSxmYW1pbHk6QSxsb2M6VCx0ZXh0OnV9fWVsc2UgXz17dHlwZTp5LG1vZGU6dGhpcy5tb2RlLGxvYzpULHRleHQ6dX07Yj1ffWVsc2UgaWYodS5jaGFyQ29kZUF0KDApPj0xMjgpdGhpcy5zZXR0aW5ncy5zdHJpY3QmJihLJGUodS5jaGFyQ29kZUF0KDApKT90aGlzLm1vZGU9PT0ibWF0aCImJnRoaXMuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KCJ1bmljb2RlVGV4dEluTWF0aE1vZGUiLCdVbmljb2RlIHRleHQgY2hhcmFjdGVyICInK3VbMF0rJyIgdXNlZCBpbiBtYXRoIG1vZGUnLHMpOnRoaXMuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KCJ1bmtub3duU3ltYm9sIiwnVW5yZWNvZ25pemVkIFVuaWNvZGUgY2hhcmFjdGVyICInK3VbMF0rJyInKygiICgiK3UuY2hhckNvZGVBdCgwKSsiKSIpLHMpKSxiPXt0eXBlOiJ0ZXh0b3JkIixtb2RlOiJ0ZXh0Iixsb2M6bG0ucmFuZ2UocyksdGV4dDp1fTtlbHNlIHJldHVybiBudWxsO2lmKHRoaXMuY29uc3VtZSgpLHYpZm9yKHZhciBQPTA7UDx2WzBdLmxlbmd0aDtQKyspe3ZhciBSPXZbMF1bUF07aWYoIVBiZVtSXSl0aHJvdyBuZXcgQ2koIlVua25vd24gYWNjZW50ICcgIitSKyInIixzKTt2YXIgRj1QYmVbUl1bdGhpcy5tb2RlXXx8UGJlW1JdLnRleHQ7aWYoIUYpdGhyb3cgbmV3IENpKCJBY2NlbnQgIitSKyIgdW5zdXBwb3J0ZWQgaW4gIit0aGlzLm1vZGUrIiBtb2RlIixzKTtiPXt0eXBlOiJhY2NlbnQiLG1vZGU6dGhpcy5tb2RlLGxvYzpsbS5yYW5nZShzKSxsYWJlbDpGLGlzU3RyZXRjaHk6ITEsaXNTaGlmdHk6ITAsYmFzZTpifX1yZXR1cm4gYn19Z1IuZW5kT2ZFeHByZXNzaW9uPVsifSIsIlxcZW5kZ3JvdXAiLCJcXGVuZCIsIlxccmlnaHQiLCImIl07dmFyIEJiZT1mdW5jdGlvbihzLHUpe2lmKCEodHlwZW9mIHM9PSJzdHJpbmcifHxzIGluc3RhbmNlb2YgU3RyaW5nKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJLYVRlWCBjYW4gb25seSBwYXJzZSBzdHJpbmcgdHlwZWQgZXhwcmVzc2lvbiIpO3ZhciBkPW5ldyBnUihzLHUpO2RlbGV0ZSBkLmd1bGxldC5tYWNyb3MuY3VycmVudFsiXFxkZkB0YWciXTt2YXIgcD1kLnBhcnNlKCk7aWYoZGVsZXRlIGQuZ3VsbGV0Lm1hY3Jvcy5jdXJyZW50WyJcXGN1cnJlbnRAY29sb3IiXSxkZWxldGUgZC5ndWxsZXQubWFjcm9zLmN1cnJlbnRbIlxcY29sb3IiXSxkLmd1bGxldC5tYWNyb3MuZ2V0KCJcXGRmQHRhZyIpKXtpZighdS5kaXNwbGF5TW9kZSl0aHJvdyBuZXcgQ2koIlxcdGFnIHdvcmtzIG9ubHkgaW4gZGlzcGxheSBlcXVhdGlvbnMiKTtwPVt7dHlwZToidGFnIixtb2RlOiJ0ZXh0Iixib2R5OnAsdGFnOmQuc3VicGFyc2UoW25ldyBVNCgiXFxkZkB0YWciKV0pfV19cmV0dXJuIHB9LHdxZT1mdW5jdGlvbihzLHUsZCl7dS50ZXh0Q29udGVudD0iIjt2YXIgcD1GYmUocyxkKS50b05vZGUoKTt1LmFwcGVuZENoaWxkKHApfTt0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jb21wYXRNb2RlIT09IkNTUzFDb21wYXQiJiYodHlwZW9mIGNvbnNvbGU8InUiJiZjb25zb2xlLndhcm4oIldhcm5pbmc6IEthVGVYIGRvZXNuJ3Qgd29yayBpbiBxdWlya3MgbW9kZS4gTWFrZSBzdXJlIHlvdXIgd2Vic2l0ZSBoYXMgYSBzdWl0YWJsZSBkb2N0eXBlLiIpLHdxZT1mdW5jdGlvbigpe3Rocm93IG5ldyBDaSgiS2FUZVggZG9lc24ndCB3b3JrIGluIHF1aXJrcyBtb2RlLiIpfSk7dmFyIFNWdD1mdW5jdGlvbihzLHUpe3ZhciBkPUZiZShzLHUpLnRvTWFya3VwKCk7cmV0dXJuIGR9LF9WdD1mdW5jdGlvbihzLHUpe3ZhciBkPW5ldyBZMmUodSk7cmV0dXJuIEJiZShzLGQpfSx5cWU9ZnVuY3Rpb24ocyx1LGQpe2lmKGQudGhyb3dPbkVycm9yfHwhKHMgaW5zdGFuY2VvZiBDaSkpdGhyb3cgczt2YXIgcD16bi5tYWtlU3BhbihbImthdGV4LWVycm9yIl0sW25ldyBCdih1KV0pO3JldHVybiBwLnNldEF0dHJpYnV0ZSgidGl0bGUiLHMudG9TdHJpbmcoKSkscC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiY29sb3I6IitkLmVycm9yQ29sb3IpLHB9LEZiZT1mdW5jdGlvbihzLHUpe3ZhciBkPW5ldyBZMmUodSk7dHJ5e3ZhciBwPUJiZShzLGQpO3JldHVybiBCSHQocCxzLGQpfWNhdGNoKHYpe3JldHVybiB5cWUodixzLGQpfX0sQVZ0PWZ1bmN0aW9uKHMsdSl7dmFyIGQ9bmV3IFkyZSh1KTt0cnl7dmFyIHA9QmJlKHMsZCk7cmV0dXJuIEZIdChwLHMsZCl9Y2F0Y2godil7cmV0dXJuIHlxZSh2LHMsZCl9fSxMVnQ9e3ZlcnNpb246IjAuMTYuOSIscmVuZGVyOndxZSxyZW5kZXJUb1N0cmluZzpTVnQsUGFyc2VFcnJvcjpDaSxTRVRUSU5HU19TQ0hFTUE6clEsX19wYXJzZTpfVnQsX19yZW5kZXJUb0RvbVRyZWU6RmJlLF9fcmVuZGVyVG9IVE1MVHJlZTpBVnQsX19zZXRGb250TWV0cmljczphSHQsX19kZWZpbmVTeW1ib2w6d2UsX19kZWZpbmVGdW5jdGlvbjpKaSxfX2RlZmluZU1hY3JvOmV0LF9fZG9tVHJlZTp7U3BhbjpjUixBbmNob3I6dGJlLFN5bWJvbE5vZGU6QnYsU3ZnTm9kZTpENyxQYXRoTm9kZTpDOSxMaW5lTm9kZTpuYmV9fTtjb25zdCBNVnQ9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRlZmF1bHQ6TFZ0fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBDUT1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKFRyLEZuLHFuLFVuKXtmb3IocW49cW58fHt9LFVuPVRyLmxlbmd0aDtVbi0tO3FuW1RyW1VuXV09Rm4pO3JldHVybiBxbn0scz1bMSwyNF0sdT1bMSwyNV0sZD1bMSwyNl0scD1bMSwyN10sdj1bMSwyOF0sYj1bMSw2M10seT1bMSw2NF0sVD1bMSw2NV0sXz1bMSw2Nl0sQT1bMSw2N10sUD1bMSw2OF0sUj1bMSw2OV0sRj1bMSwyOV0saj1bMSwzMF0sSz1bMSwzMV0sZWU9WzEsMzJdLGllPVsxLDMzXSxvZT1bMSwzNF0scGU9WzEsMzVdLGJlPVsxLDM2XSxhZT1bMSwzN10sbmU9WzEsMzhdLHNlPVsxLDM5XSxkZT1bMSw0MF0sWD1bMSw0MV0sZ2U9WzEsNDJdLFc9WzEsNDNdLHhlPVsxLDQ0XSxVPVsxLDQ1XSxGZT1bMSw0Nl0sUGU9WzEsNDddLGplPVsxLDQ4XSxJZT1bMSw1MF0sU2U9WzEsNTFdLENlPVsxLDUyXSxrZT1bMSw1M10sS2U9WzEsNTRdLEZ0PVsxLDU1XSxOZT1bMSw1Nl0sZ249WzEsNTddLF90PVsxLDU4XSxFdD1bMSw1OV0sR3Q9WzEsNjBdLGxuPVsxNCw0Ml0seHQ9WzE0LDM0LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0XSxQdD1bMTIsMTQsMzQsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzRdLFFlPVsxLDgyXSxEdD1bMSw4M10sa3Q9WzEsODRdLE9uPVsxLDg1XSxodD1bMTIsMTQsNDJdLHpyPVsxMiwxNCwzMyw0Ml0seXQ9WzEyLDE0LDMzLDQyLDc2LDc3LDc5LDgwXSxqaT1bMTIsMzNdLHhpPVszNCwzNiwzNywzOCwzOSw0MCw0MSw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NF0sTWE9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLG1lcm1haWREb2M6NCxkaXJlY3Rpb246NSxkaXJlY3Rpb25fdGI6NixkaXJlY3Rpb25fYnQ6NyxkaXJlY3Rpb25fcmw6OCxkaXJlY3Rpb25fbHI6OSxncmFwaENvbmZpZzoxMCxDNF9DT05URVhUOjExLE5FV0xJTkU6MTIsc3RhdGVtZW50czoxMyxFT0Y6MTQsQzRfQ09OVEFJTkVSOjE1LEM0X0NPTVBPTkVOVDoxNixDNF9EWU5BTUlDOjE3LEM0X0RFUExPWU1FTlQ6MTgsb3RoZXJTdGF0ZW1lbnRzOjE5LGRpYWdyYW1TdGF0ZW1lbnRzOjIwLG90aGVyU3RhdGVtZW50OjIxLHRpdGxlOjIyLGFjY0Rlc2NyaXB0aW9uOjIzLGFjY190aXRsZToyNCxhY2NfdGl0bGVfdmFsdWU6MjUsYWNjX2Rlc2NyOjI2LGFjY19kZXNjcl92YWx1ZToyNyxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjI4LGJvdW5kYXJ5U3RhdGVtZW50OjI5LGJvdW5kYXJ5U3RhcnRTdGF0ZW1lbnQ6MzAsYm91bmRhcnlTdG9wU3RhdGVtZW50OjMxLGJvdW5kYXJ5U3RhcnQ6MzIsTEJSQUNFOjMzLEVOVEVSUFJJU0VfQk9VTkRBUlk6MzQsYXR0cmlidXRlczozNSxTWVNURU1fQk9VTkRBUlk6MzYsQk9VTkRBUlk6MzcsQ09OVEFJTkVSX0JPVU5EQVJZOjM4LE5PREU6MzksTk9ERV9MOjQwLE5PREVfUjo0MSxSQlJBQ0U6NDIsZGlhZ3JhbVN0YXRlbWVudDo0MyxQRVJTT046NDQsUEVSU09OX0VYVDo0NSxTWVNURU06NDYsU1lTVEVNX0RCOjQ3LFNZU1RFTV9RVUVVRTo0OCxTWVNURU1fRVhUOjQ5LFNZU1RFTV9FWFRfREI6NTAsU1lTVEVNX0VYVF9RVUVVRTo1MSxDT05UQUlORVI6NTIsQ09OVEFJTkVSX0RCOjUzLENPTlRBSU5FUl9RVUVVRTo1NCxDT05UQUlORVJfRVhUOjU1LENPTlRBSU5FUl9FWFRfREI6NTYsQ09OVEFJTkVSX0VYVF9RVUVVRTo1NyxDT01QT05FTlQ6NTgsQ09NUE9ORU5UX0RCOjU5LENPTVBPTkVOVF9RVUVVRTo2MCxDT01QT05FTlRfRVhUOjYxLENPTVBPTkVOVF9FWFRfREI6NjIsQ09NUE9ORU5UX0VYVF9RVUVVRTo2MyxSRUw6NjQsQklSRUw6NjUsUkVMX1U6NjYsUkVMX0Q6NjcsUkVMX0w6NjgsUkVMX1I6NjksUkVMX0I6NzAsUkVMX0lOREVYOjcxLFVQREFURV9FTF9TVFlMRTo3MixVUERBVEVfUkVMX1NUWUxFOjczLFVQREFURV9MQVlPVVRfQ09ORklHOjc0LGF0dHJpYnV0ZTo3NSxTVFI6NzYsU1RSX0tFWTo3NyxTVFJfVkFMVUU6NzgsQVRUUklCVVRFOjc5LEFUVFJJQlVURV9FTVBUWTo4MCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNjoiZGlyZWN0aW9uX3RiIiw3OiJkaXJlY3Rpb25fYnQiLDg6ImRpcmVjdGlvbl9ybCIsOToiZGlyZWN0aW9uX2xyIiwxMToiQzRfQ09OVEVYVCIsMTI6Ik5FV0xJTkUiLDE0OiJFT0YiLDE1OiJDNF9DT05UQUlORVIiLDE2OiJDNF9DT01QT05FTlQiLDE3OiJDNF9EWU5BTUlDIiwxODoiQzRfREVQTE9ZTUVOVCIsMjI6InRpdGxlIiwyMzoiYWNjRGVzY3JpcHRpb24iLDI0OiJhY2NfdGl0bGUiLDI1OiJhY2NfdGl0bGVfdmFsdWUiLDI2OiJhY2NfZGVzY3IiLDI3OiJhY2NfZGVzY3JfdmFsdWUiLDI4OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwzMzoiTEJSQUNFIiwzNDoiRU5URVJQUklTRV9CT1VOREFSWSIsMzY6IlNZU1RFTV9CT1VOREFSWSIsMzc6IkJPVU5EQVJZIiwzODoiQ09OVEFJTkVSX0JPVU5EQVJZIiwzOToiTk9ERSIsNDA6Ik5PREVfTCIsNDE6Ik5PREVfUiIsNDI6IlJCUkFDRSIsNDQ6IlBFUlNPTiIsNDU6IlBFUlNPTl9FWFQiLDQ2OiJTWVNURU0iLDQ3OiJTWVNURU1fREIiLDQ4OiJTWVNURU1fUVVFVUUiLDQ5OiJTWVNURU1fRVhUIiw1MDoiU1lTVEVNX0VYVF9EQiIsNTE6IlNZU1RFTV9FWFRfUVVFVUUiLDUyOiJDT05UQUlORVIiLDUzOiJDT05UQUlORVJfREIiLDU0OiJDT05UQUlORVJfUVVFVUUiLDU1OiJDT05UQUlORVJfRVhUIiw1NjoiQ09OVEFJTkVSX0VYVF9EQiIsNTc6IkNPTlRBSU5FUl9FWFRfUVVFVUUiLDU4OiJDT01QT05FTlQiLDU5OiJDT01QT05FTlRfREIiLDYwOiJDT01QT05FTlRfUVVFVUUiLDYxOiJDT01QT05FTlRfRVhUIiw2MjoiQ09NUE9ORU5UX0VYVF9EQiIsNjM6IkNPTVBPTkVOVF9FWFRfUVVFVUUiLDY0OiJSRUwiLDY1OiJCSVJFTCIsNjY6IlJFTF9VIiw2NzoiUkVMX0QiLDY4OiJSRUxfTCIsNjk6IlJFTF9SIiw3MDoiUkVMX0IiLDcxOiJSRUxfSU5ERVgiLDcyOiJVUERBVEVfRUxfU1RZTEUiLDczOiJVUERBVEVfUkVMX1NUWUxFIiw3NDoiVVBEQVRFX0xBWU9VVF9DT05GSUciLDc2OiJTVFIiLDc3OiJTVFJfS0VZIiw3ODoiU1RSX1ZBTFVFIiw3OToiQVRUUklCVVRFIiw4MDoiQVRUUklCVVRFX0VNUFRZIn0scHJvZHVjdGlvbnNfOlswLFszLDFdLFszLDFdLFs1LDFdLFs1LDFdLFs1LDFdLFs1LDFdLFs0LDFdLFsxMCw0XSxbMTAsNF0sWzEwLDRdLFsxMCw0XSxbMTAsNF0sWzEzLDFdLFsxMywxXSxbMTMsMl0sWzE5LDFdLFsxOSwyXSxbMTksM10sWzIxLDFdLFsyMSwxXSxbMjEsMl0sWzIxLDJdLFsyMSwxXSxbMjksM10sWzMwLDNdLFszMCwzXSxbMzAsNF0sWzMyLDJdLFszMiwyXSxbMzIsMl0sWzMyLDJdLFszMiwyXSxbMzIsMl0sWzMyLDJdLFszMSwxXSxbMjAsMV0sWzIwLDJdLFsyMCwzXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywxXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFszNSwxXSxbMzUsMl0sWzc1LDFdLFs3NSwyXSxbNzUsMV0sWzc1LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKEZuLHFuLFVuLEF0LHd0LG9uLGZuKXt2YXIgQW49b24ubGVuZ3RoLTE7c3dpdGNoKHd0KXtjYXNlIDM6QXQuc2V0RGlyZWN0aW9uKCJUQiIpO2JyZWFrO2Nhc2UgNDpBdC5zZXREaXJlY3Rpb24oIkJUIik7YnJlYWs7Y2FzZSA1OkF0LnNldERpcmVjdGlvbigiUkwiKTticmVhaztjYXNlIDY6QXQuc2V0RGlyZWN0aW9uKCJMUiIpO2JyZWFrO2Nhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOmNhc2UgMTI6QXQuc2V0QzRUeXBlKG9uW0FuLTNdKTticmVhaztjYXNlIDE5OkF0LnNldFRpdGxlKG9uW0FuXS5zdWJzdHJpbmcoNikpLHRoaXMuJD1vbltBbl0uc3Vic3RyaW5nKDYpO2JyZWFrO2Nhc2UgMjA6QXQuc2V0QWNjRGVzY3JpcHRpb24ob25bQW5dLnN1YnN0cmluZygxNSkpLHRoaXMuJD1vbltBbl0uc3Vic3RyaW5nKDE1KTticmVhaztjYXNlIDIxOnRoaXMuJD1vbltBbl0udHJpbSgpLEF0LnNldFRpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAyMjpjYXNlIDIzOnRoaXMuJD1vbltBbl0udHJpbSgpLEF0LnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAyODpjYXNlIDI5Om9uW0FuXS5zcGxpY2UoMiwwLCJFTlRFUlBSSVNFIiksQXQuYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeSguLi5vbltBbl0pLHRoaXMuJD1vbltBbl07YnJlYWs7Y2FzZSAzMDpBdC5hZGRQZXJzb25PclN5c3RlbUJvdW5kYXJ5KC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDMxOm9uW0FuXS5zcGxpY2UoMiwwLCJDT05UQUlORVIiKSxBdC5hZGRDb250YWluZXJCb3VuZGFyeSguLi5vbltBbl0pLHRoaXMuJD1vbltBbl07YnJlYWs7Y2FzZSAzMjpBdC5hZGREZXBsb3ltZW50Tm9kZSgibm9kZSIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgMzM6QXQuYWRkRGVwbG95bWVudE5vZGUoIm5vZGVMIiwuLi5vbltBbl0pLHRoaXMuJD1vbltBbl07YnJlYWs7Y2FzZSAzNDpBdC5hZGREZXBsb3ltZW50Tm9kZSgibm9kZVIiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDM1OkF0LnBvcEJvdW5kYXJ5UGFyc2VTdGFjaygpO2JyZWFrO2Nhc2UgMzk6QXQuYWRkUGVyc29uT3JTeXN0ZW0oInBlcnNvbiIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNDA6QXQuYWRkUGVyc29uT3JTeXN0ZW0oImV4dGVybmFsX3BlcnNvbiIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNDE6QXQuYWRkUGVyc29uT3JTeXN0ZW0oInN5c3RlbSIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNDI6QXQuYWRkUGVyc29uT3JTeXN0ZW0oInN5c3RlbV9kYiIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNDM6QXQuYWRkUGVyc29uT3JTeXN0ZW0oInN5c3RlbV9xdWV1ZSIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNDQ6QXQuYWRkUGVyc29uT3JTeXN0ZW0oImV4dGVybmFsX3N5c3RlbSIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNDU6QXQuYWRkUGVyc29uT3JTeXN0ZW0oImV4dGVybmFsX3N5c3RlbV9kYiIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNDY6QXQuYWRkUGVyc29uT3JTeXN0ZW0oImV4dGVybmFsX3N5c3RlbV9xdWV1ZSIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNDc6QXQuYWRkQ29udGFpbmVyKCJjb250YWluZXIiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDQ4OkF0LmFkZENvbnRhaW5lcigiY29udGFpbmVyX2RiIiwuLi5vbltBbl0pLHRoaXMuJD1vbltBbl07YnJlYWs7Y2FzZSA0OTpBdC5hZGRDb250YWluZXIoImNvbnRhaW5lcl9xdWV1ZSIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNTA6QXQuYWRkQ29udGFpbmVyKCJleHRlcm5hbF9jb250YWluZXIiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDUxOkF0LmFkZENvbnRhaW5lcigiZXh0ZXJuYWxfY29udGFpbmVyX2RiIiwuLi5vbltBbl0pLHRoaXMuJD1vbltBbl07YnJlYWs7Y2FzZSA1MjpBdC5hZGRDb250YWluZXIoImV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZSIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNTM6QXQuYWRkQ29tcG9uZW50KCJjb21wb25lbnQiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDU0OkF0LmFkZENvbXBvbmVudCgiY29tcG9uZW50X2RiIiwuLi5vbltBbl0pLHRoaXMuJD1vbltBbl07YnJlYWs7Y2FzZSA1NTpBdC5hZGRDb21wb25lbnQoImNvbXBvbmVudF9xdWV1ZSIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNTY6QXQuYWRkQ29tcG9uZW50KCJleHRlcm5hbF9jb21wb25lbnQiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDU3OkF0LmFkZENvbXBvbmVudCgiZXh0ZXJuYWxfY29tcG9uZW50X2RiIiwuLi5vbltBbl0pLHRoaXMuJD1vbltBbl07YnJlYWs7Y2FzZSA1ODpBdC5hZGRDb21wb25lbnQoImV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZSIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNjA6QXQuYWRkUmVsKCJyZWwiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDYxOkF0LmFkZFJlbCgiYmlyZWwiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDYyOkF0LmFkZFJlbCgicmVsX3UiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDYzOkF0LmFkZFJlbCgicmVsX2QiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDY0OkF0LmFkZFJlbCgicmVsX2wiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDY1OkF0LmFkZFJlbCgicmVsX3IiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDY2OkF0LmFkZFJlbCgicmVsX2IiLC4uLm9uW0FuXSksdGhpcy4kPW9uW0FuXTticmVhaztjYXNlIDY3Om9uW0FuXS5zcGxpY2UoMCwxKSxBdC5hZGRSZWwoInJlbCIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNjg6QXQudXBkYXRlRWxTdHlsZSgidXBkYXRlX2VsX3N0eWxlIiwuLi5vbltBbl0pLHRoaXMuJD1vbltBbl07YnJlYWs7Y2FzZSA2OTpBdC51cGRhdGVSZWxTdHlsZSgidXBkYXRlX3JlbF9zdHlsZSIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNzA6QXQudXBkYXRlTGF5b3V0Q29uZmlnKCJ1cGRhdGVfbGF5b3V0X2NvbmZpZyIsLi4ub25bQW5dKSx0aGlzLiQ9b25bQW5dO2JyZWFrO2Nhc2UgNzE6dGhpcy4kPVtvbltBbl1dO2JyZWFrO2Nhc2UgNzI6b25bQW5dLnVuc2hpZnQob25bQW4tMV0pLHRoaXMuJD1vbltBbl07YnJlYWs7Y2FzZSA3MzpjYXNlIDc1OnRoaXMuJD1vbltBbl0udHJpbSgpO2JyZWFrO2Nhc2UgNzQ6bGV0IG9vPXt9O29vW29uW0FuLTFdLnRyaW0oKV09b25bQW5dLnRyaW0oKSx0aGlzLiQ9b287YnJlYWs7Y2FzZSA3Njp0aGlzLiQ9IiI7YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsNTozLDY6WzEsNV0sNzpbMSw2XSw4OlsxLDddLDk6WzEsOF0sMTA6NCwxMTpbMSw5XSwxNTpbMSwxMF0sMTY6WzEsMTFdLDE3OlsxLDEyXSwxODpbMSwxM119LHsxOlszXX0sezE6WzIsMV19LHsxOlsyLDJdfSx7MTpbMiw3XX0sezE6WzIsM119LHsxOlsyLDRdfSx7MTpbMiw1XX0sezE6WzIsNl19LHsxMjpbMSwxNF19LHsxMjpbMSwxNV19LHsxMjpbMSwxNl19LHsxMjpbMSwxN119LHsxMjpbMSwxOF19LHsxMzoxOSwxOToyMCwyMDoyMSwyMToyMiwyMjpzLDIzOnUsMjQ6ZCwyNjpwLDI4OnYsMjk6NDksMzA6NjEsMzI6NjIsMzQ6YiwzNjp5LDM3OlQsMzg6XywzOTpBLDQwOlAsNDE6Uiw0MzoyMyw0NDpGLDQ1OmosNDY6Syw0NzplZSw0ODppZSw0OTpvZSw1MDpwZSw1MTpiZSw1MjphZSw1MzpuZSw1NDpzZSw1NTpkZSw1NjpYLDU3OmdlLDU4OlcsNTk6eGUsNjA6VSw2MTpGZSw2MjpQZSw2MzpqZSw2NDpJZSw2NTpTZSw2NjpDZSw2NzprZSw2ODpLZSw2OTpGdCw3MDpOZSw3MTpnbiw3MjpfdCw3MzpFdCw3NDpHdH0sezEzOjcwLDE5OjIwLDIwOjIxLDIxOjIyLDIyOnMsMjM6dSwyNDpkLDI2OnAsMjg6diwyOTo0OSwzMDo2MSwzMjo2MiwzNDpiLDM2OnksMzc6VCwzODpfLDM5OkEsNDA6UCw0MTpSLDQzOjIzLDQ0OkYsNDU6aiw0NjpLLDQ3OmVlLDQ4OmllLDQ5Om9lLDUwOnBlLDUxOmJlLDUyOmFlLDUzOm5lLDU0OnNlLDU1OmRlLDU2OlgsNTc6Z2UsNTg6Vyw1OTp4ZSw2MDpVLDYxOkZlLDYyOlBlLDYzOmplLDY0OkllLDY1OlNlLDY2OkNlLDY3OmtlLDY4OktlLDY5OkZ0LDcwOk5lLDcxOmduLDcyOl90LDczOkV0LDc0Okd0fSx7MTM6NzEsMTk6MjAsMjA6MjEsMjE6MjIsMjI6cywyMzp1LDI0OmQsMjY6cCwyODp2LDI5OjQ5LDMwOjYxLDMyOjYyLDM0OmIsMzY6eSwzNzpULDM4Ol8sMzk6QSw0MDpQLDQxOlIsNDM6MjMsNDQ6Riw0NTpqLDQ2OkssNDc6ZWUsNDg6aWUsNDk6b2UsNTA6cGUsNTE6YmUsNTI6YWUsNTM6bmUsNTQ6c2UsNTU6ZGUsNTY6WCw1NzpnZSw1ODpXLDU5OnhlLDYwOlUsNjE6RmUsNjI6UGUsNjM6amUsNjQ6SWUsNjU6U2UsNjY6Q2UsNjc6a2UsNjg6S2UsNjk6RnQsNzA6TmUsNzE6Z24sNzI6X3QsNzM6RXQsNzQ6R3R9LHsxMzo3MiwxOToyMCwyMDoyMSwyMToyMiwyMjpzLDIzOnUsMjQ6ZCwyNjpwLDI4OnYsMjk6NDksMzA6NjEsMzI6NjIsMzQ6YiwzNjp5LDM3OlQsMzg6XywzOTpBLDQwOlAsNDE6Uiw0MzoyMyw0NDpGLDQ1OmosNDY6Syw0NzplZSw0ODppZSw0OTpvZSw1MDpwZSw1MTpiZSw1MjphZSw1MzpuZSw1NDpzZSw1NTpkZSw1NjpYLDU3OmdlLDU4OlcsNTk6eGUsNjA6VSw2MTpGZSw2MjpQZSw2MzpqZSw2NDpJZSw2NTpTZSw2NjpDZSw2NzprZSw2ODpLZSw2OTpGdCw3MDpOZSw3MTpnbiw3MjpfdCw3MzpFdCw3NDpHdH0sezEzOjczLDE5OjIwLDIwOjIxLDIxOjIyLDIyOnMsMjM6dSwyNDpkLDI2OnAsMjg6diwyOTo0OSwzMDo2MSwzMjo2MiwzNDpiLDM2OnksMzc6VCwzODpfLDM5OkEsNDA6UCw0MTpSLDQzOjIzLDQ0OkYsNDU6aiw0NjpLLDQ3OmVlLDQ4OmllLDQ5Om9lLDUwOnBlLDUxOmJlLDUyOmFlLDUzOm5lLDU0OnNlLDU1OmRlLDU2OlgsNTc6Z2UsNTg6Vyw1OTp4ZSw2MDpVLDYxOkZlLDYyOlBlLDYzOmplLDY0OkllLDY1OlNlLDY2OkNlLDY3OmtlLDY4OktlLDY5OkZ0LDcwOk5lLDcxOmduLDcyOl90LDczOkV0LDc0Okd0fSx7MTQ6WzEsNzRdfSxpKGxuLFsyLDEzXSx7NDM6MjMsMjk6NDksMzA6NjEsMzI6NjIsMjA6NzUsMzQ6YiwzNjp5LDM3OlQsMzg6XywzOTpBLDQwOlAsNDE6Uiw0NDpGLDQ1OmosNDY6Syw0NzplZSw0ODppZSw0OTpvZSw1MDpwZSw1MTpiZSw1MjphZSw1MzpuZSw1NDpzZSw1NTpkZSw1NjpYLDU3OmdlLDU4OlcsNTk6eGUsNjA6VSw2MTpGZSw2MjpQZSw2MzpqZSw2NDpJZSw2NTpTZSw2NjpDZSw2NzprZSw2ODpLZSw2OTpGdCw3MDpOZSw3MTpnbiw3MjpfdCw3MzpFdCw3NDpHdH0pLGkobG4sWzIsMTRdKSxpKHh0LFsyLDE2XSx7MTI6WzEsNzZdfSksaShsbixbMiwzNl0sezEyOlsxLDc3XX0pLGkoUHQsWzIsMTldKSxpKFB0LFsyLDIwXSksezI1OlsxLDc4XX0sezI3OlsxLDc5XX0saShQdCxbMiwyM10pLHszNTo4MCw3NTo4MSw3NjpRZSw3NzpEdCw3OTprdCw4MDpPbn0sezM1Ojg2LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6ODcsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNTo4OCw3NTo4MSw3NjpRZSw3NzpEdCw3OTprdCw4MDpPbn0sezM1Ojg5LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6OTAsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNTo5MSw3NTo4MSw3NjpRZSw3NzpEdCw3OTprdCw4MDpPbn0sezM1OjkyLDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6OTMsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNTo5NCw3NTo4MSw3NjpRZSw3NzpEdCw3OTprdCw4MDpPbn0sezM1Ojk1LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6OTYsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNTo5Nyw3NTo4MSw3NjpRZSw3NzpEdCw3OTprdCw4MDpPbn0sezM1Ojk4LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6OTksNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMDAsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMDEsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMDIsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMDMsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMDQsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LGkoaHQsWzIsNTldKSx7MzU6MTA1LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6MTA2LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6MTA3LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6MTA4LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6MTA5LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6MTEwLDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6MTExLDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6MTEyLDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6MTEzLDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6MTE0LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MzU6MTE1LDc1OjgxLDc2OlFlLDc3OkR0LDc5Omt0LDgwOk9ufSx7MjA6MTE2LDI5OjQ5LDMwOjYxLDMyOjYyLDM0OmIsMzY6eSwzNzpULDM4Ol8sMzk6QSw0MDpQLDQxOlIsNDM6MjMsNDQ6Riw0NTpqLDQ2OkssNDc6ZWUsNDg6aWUsNDk6b2UsNTA6cGUsNTE6YmUsNTI6YWUsNTM6bmUsNTQ6c2UsNTU6ZGUsNTY6WCw1NzpnZSw1ODpXLDU5OnhlLDYwOlUsNjE6RmUsNjI6UGUsNjM6amUsNjQ6SWUsNjU6U2UsNjY6Q2UsNjc6a2UsNjg6S2UsNjk6RnQsNzA6TmUsNzE6Z24sNzI6X3QsNzM6RXQsNzQ6R3R9LHsxMjpbMSwxMThdLDMzOlsxLDExN119LHszNToxMTksNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMjAsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMjEsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMjIsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMjMsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMjQsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHszNToxMjUsNzU6ODEsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259LHsxNDpbMSwxMjZdfSx7MTQ6WzEsMTI3XX0sezE0OlsxLDEyOF19LHsxNDpbMSwxMjldfSx7MTpbMiw4XX0saShsbixbMiwxNV0pLGkoeHQsWzIsMTddLHsyMToyMiwxOToxMzAsMjI6cywyMzp1LDI0OmQsMjY6cCwyODp2fSksaShsbixbMiwzN10sezE5OjIwLDIwOjIxLDIxOjIyLDQzOjIzLDI5OjQ5LDMwOjYxLDMyOjYyLDEzOjEzMSwyMjpzLDIzOnUsMjQ6ZCwyNjpwLDI4OnYsMzQ6YiwzNjp5LDM3OlQsMzg6XywzOTpBLDQwOlAsNDE6Uiw0NDpGLDQ1OmosNDY6Syw0NzplZSw0ODppZSw0OTpvZSw1MDpwZSw1MTpiZSw1MjphZSw1MzpuZSw1NDpzZSw1NTpkZSw1NjpYLDU3OmdlLDU4OlcsNTk6eGUsNjA6VSw2MTpGZSw2MjpQZSw2MzpqZSw2NDpJZSw2NTpTZSw2NjpDZSw2NzprZSw2ODpLZSw2OTpGdCw3MDpOZSw3MTpnbiw3MjpfdCw3MzpFdCw3NDpHdH0pLGkoUHQsWzIsMjFdKSxpKFB0LFsyLDIyXSksaShodCxbMiwzOV0pLGkoenIsWzIsNzFdLHs3NTo4MSwzNToxMzIsNzY6UWUsNzc6RHQsNzk6a3QsODA6T259KSxpKHl0LFsyLDczXSksezc4OlsxLDEzM119LGkoeXQsWzIsNzVdKSxpKHl0LFsyLDc2XSksaShodCxbMiw0MF0pLGkoaHQsWzIsNDFdKSxpKGh0LFsyLDQyXSksaShodCxbMiw0M10pLGkoaHQsWzIsNDRdKSxpKGh0LFsyLDQ1XSksaShodCxbMiw0Nl0pLGkoaHQsWzIsNDddKSxpKGh0LFsyLDQ4XSksaShodCxbMiw0OV0pLGkoaHQsWzIsNTBdKSxpKGh0LFsyLDUxXSksaShodCxbMiw1Ml0pLGkoaHQsWzIsNTNdKSxpKGh0LFsyLDU0XSksaShodCxbMiw1NV0pLGkoaHQsWzIsNTZdKSxpKGh0LFsyLDU3XSksaShodCxbMiw1OF0pLGkoaHQsWzIsNjBdKSxpKGh0LFsyLDYxXSksaShodCxbMiw2Ml0pLGkoaHQsWzIsNjNdKSxpKGh0LFsyLDY0XSksaShodCxbMiw2NV0pLGkoaHQsWzIsNjZdKSxpKGh0LFsyLDY3XSksaShodCxbMiw2OF0pLGkoaHQsWzIsNjldKSxpKGh0LFsyLDcwXSksezMxOjEzNCw0MjpbMSwxMzVdfSx7MTI6WzEsMTM2XX0sezMzOlsxLDEzN119LGkoamksWzIsMjhdKSxpKGppLFsyLDI5XSksaShqaSxbMiwzMF0pLGkoamksWzIsMzFdKSxpKGppLFsyLDMyXSksaShqaSxbMiwzM10pLGkoamksWzIsMzRdKSx7MTpbMiw5XX0sezE6WzIsMTBdfSx7MTpbMiwxMV19LHsxOlsyLDEyXX0saSh4dCxbMiwxOF0pLGkobG4sWzIsMzhdKSxpKHpyLFsyLDcyXSksaSh5dCxbMiw3NF0pLGkoaHQsWzIsMjRdKSxpKGh0LFsyLDM1XSksaSh4aSxbMiwyNV0pLGkoeGksWzIsMjZdLHsxMjpbMSwxMzhdfSksaSh4aSxbMiwyN10pXSxkZWZhdWx0QWN0aW9uczp7MjpbMiwxXSwzOlsyLDJdLDQ6WzIsN10sNTpbMiwzXSw2OlsyLDRdLDc6WzIsNV0sODpbMiw2XSw3NDpbMiw4XSwxMjY6WzIsOV0sMTI3OlsyLDEwXSwxMjg6WzIsMTFdLDEyOTpbMiwxMl19LHBhcnNlRXJyb3I6ZnVuY3Rpb24oRm4scW4pe2lmKHFuLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoRm4pO2Vsc2V7dmFyIFVuPW5ldyBFcnJvcihGbik7dGhyb3cgVW4uaGFzaD1xbixVbn19LHBhcnNlOmZ1bmN0aW9uKEZuKXt2YXIgcW49dGhpcyxVbj1bMF0sQXQ9W10sd3Q9W251bGxdLG9uPVtdLGZuPXRoaXMudGFibGUsQW49IiIsb289MCxqbz0wLCRvPTIsUGE9MSx3bz1vbi5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxfcz1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHRsPXt5eTp7fX07Zm9yKHZhciBkYSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGRhKSYmKHRsLnl5W2RhXT10aGlzLnl5W2RhXSk7X3Muc2V0SW5wdXQoRm4sdGwueXkpLHRsLnl5LmxleGVyPV9zLHRsLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBfcy55eWxsb2M+InUiJiYoX3MueXlsbG9jPXt9KTt2YXIgajA9X3MueXlsbG9jO29uLnB1c2goajApO3ZhciBwbT1fcy5vcHRpb25zJiZfcy5vcHRpb25zLnJhbmdlczt0eXBlb2YgdGwueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9dGwueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gTWwoKXt2YXIga2g7cmV0dXJuIGtoPUF0LnBvcCgpfHxfcy5sZXgoKXx8UGEsdHlwZW9mIGtoIT0ibnVtYmVyIiYmKGtoIGluc3RhbmNlb2YgQXJyYXkmJihBdD1raCxraD1BdC5wb3AoKSksa2g9cW4uc3ltYm9sc19ba2hdfHxraCksa2h9Zm9yKHZhciBYYyxCYyxqYSxPdSxTYT17fSxQbyxGYyx4YSxCYTs7KXtpZihCYz1VbltVbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tCY10/amE9dGhpcy5kZWZhdWx0QWN0aW9uc1tCY106KChYYz09PW51bGx8fHR5cGVvZiBYYz4idSIpJiYoWGM9TWwoKSksamE9Zm5bQmNdJiZmbltCY11bWGNdKSx0eXBlb2YgamE+InUifHwhamEubGVuZ3RofHwhamFbMF0pe3ZhciBnYT0iIjtCYT1bXTtmb3IoUG8gaW4gZm5bQmNdKXRoaXMudGVybWluYWxzX1tQb10mJlBvPiRvJiZCYS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bUG9dKyInIik7X3Muc2hvd1Bvc2l0aW9uP2dhPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKG9vKzEpK2A6CmArX3Muc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtCYS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW1hjXXx8WGMpKyInIjpnYT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhvbysxKSsiOiBVbmV4cGVjdGVkICIrKFhjPT1QYT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tYY118fFhjKSsiJyIpLHRoaXMucGFyc2VFcnJvcihnYSx7dGV4dDpfcy5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bWGNdfHxYYyxsaW5lOl9zLnl5bGluZW5vLGxvYzpqMCxleHBlY3RlZDpCYX0pfWlmKGphWzBdaW5zdGFuY2VvZiBBcnJheSYmamEubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitCYysiLCB0b2tlbjogIitYYyk7c3dpdGNoKGphWzBdKXtjYXNlIDE6VW4ucHVzaChYYyksd3QucHVzaChfcy55eXRleHQpLG9uLnB1c2goX3MueXlsbG9jKSxVbi5wdXNoKGphWzFdKSxYYz1udWxsLGpvPV9zLnl5bGVuZyxBbj1fcy55eXRleHQsb289X3MueXlsaW5lbm8sajA9X3MueXlsbG9jO2JyZWFrO2Nhc2UgMjppZihGYz10aGlzLnByb2R1Y3Rpb25zX1tqYVsxXV1bMV0sU2EuJD13dFt3dC5sZW5ndGgtRmNdLFNhLl8kPXtmaXJzdF9saW5lOm9uW29uLmxlbmd0aC0oRmN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpvbltvbi5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpvbltvbi5sZW5ndGgtKEZjfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm9uW29uLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0scG0mJihTYS5fJC5yYW5nZT1bb25bb24ubGVuZ3RoLShGY3x8MSldLnJhbmdlWzBdLG9uW29uLmxlbmd0aC0xXS5yYW5nZVsxXV0pLE91PXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShTYSxbQW4sam8sb28sdGwueXksamFbMV0sd3Qsb25dLmNvbmNhdCh3bykpLHR5cGVvZiBPdTwidSIpcmV0dXJuIE91O0ZjJiYoVW49VW4uc2xpY2UoMCwtMSpGYyoyKSx3dD13dC5zbGljZSgwLC0xKkZjKSxvbj1vbi5zbGljZSgwLC0xKkZjKSksVW4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tqYVsxXV1bMF0pLHd0LnB1c2goU2EuJCksb24ucHVzaChTYS5fJCkseGE9Zm5bVW5bVW4ubGVuZ3RoLTJdXVtVbltVbi5sZW5ndGgtMV1dLFVuLnB1c2goeGEpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSx6cz1mdW5jdGlvbigpe3ZhciBUcj17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihxbixVbil7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihxbixVbik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IocW4pfSxzZXRJbnB1dDpmdW5jdGlvbihGbixxbil7cmV0dXJuIHRoaXMueXk9cW58fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PUZuLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBGbj10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9Rm4sdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPUZuLHRoaXMubWF0Y2hlZCs9Rm47dmFyIHFuPUZuLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gcW4/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLEZufSx1bnB1dDpmdW5jdGlvbihGbil7dmFyIHFuPUZuLmxlbmd0aCxVbj1Gbi5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PUZuK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1xbiksdGhpcy5vZmZzZXQtPXFuO3ZhciBBdD10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxVbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPVVuLmxlbmd0aC0xKTt2YXIgd3Q9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOlVuPyhVbi5sZW5ndGg9PT1BdC5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK0F0W0F0Lmxlbmd0aC1Vbi5sZW5ndGhdLmxlbmd0aC1VblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLXFufSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3d0WzBdLHd0WzBdK3RoaXMueXlsZW5nLXFuXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oRm4pe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShGbikpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgRm49dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihGbi5sZW5ndGg+MjA/Ii4uLiI6IiIpK0ZuLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIEZuPXRoaXMubWF0Y2g7cmV0dXJuIEZuLmxlbmd0aDwyMCYmKEZuKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1Gbi5sZW5ndGgpKSwoRm4uc3Vic3RyKDAsMjApKyhGbi5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIEZuPXRoaXMucGFzdElucHV0KCkscW49bmV3IEFycmF5KEZuLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIEZuK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtxbisiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oRm4scW4pe3ZhciBVbixBdCx3dDtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYod3Q9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYod3QueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksQXQ9Rm5bMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLEF0JiYodGhpcy55eWxpbmVubys9QXQubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46QXQ/QXRbQXQubGVuZ3RoLTFdLmxlbmd0aC1BdFtBdC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitGblswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1GblswXSx0aGlzLm1hdGNoKz1GblswXSx0aGlzLm1hdGNoZXM9Rm4sdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoRm5bMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPUZuWzBdLFVuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLHFuLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLFVuKXJldHVybiBVbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgb24gaW4gd3QpdGhpc1tvbl09d3Rbb25dO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIEZuLHFuLFVuLEF0O3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIHd0PXRoaXMuX2N1cnJlbnRSdWxlcygpLG9uPTA7b248d3QubGVuZ3RoO29uKyspaWYoVW49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1t3dFtvbl1dKSxVbiYmKCFxbnx8VW5bMF0ubGVuZ3RoPnFuWzBdLmxlbmd0aCkpe2lmKHFuPVVuLEF0PW9uLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKEZuPXRoaXMudGVzdF9tYXRjaChVbix3dFtvbl0pLEZuIT09ITEpcmV0dXJuIEZuO2lmKHRoaXMuX2JhY2t0cmFjayl7cW49ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gcW4/KEZuPXRoaXMudGVzdF9tYXRjaChxbix3dFtBdF0pLEZuIT09ITE/Rm46ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBxbj10aGlzLm5leHQoKTtyZXR1cm4gcW58fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHFuKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2gocW4pfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciBxbj10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBxbj4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHFuKXtyZXR1cm4gcW49dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhxbnx8MCkscW4+PTA/dGhpcy5jb25kaXRpb25TdGFja1txbl06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24ocW4pe3RoaXMuYmVnaW4ocW4pfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7fSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHFuLFVuLEF0LHd0KXtzd2l0Y2goQXQpe2Nhc2UgMDpyZXR1cm4gNjtjYXNlIDE6cmV0dXJuIDc7Y2FzZSAyOnJldHVybiA4O2Nhc2UgMzpyZXR1cm4gOTtjYXNlIDQ6cmV0dXJuIDIyO2Nhc2UgNTpyZXR1cm4gMjM7Y2FzZSA2OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwyNDtjYXNlIDc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDg6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDI2O2Nhc2UgOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgMTA6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMTE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTI6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMTM6YnJlYWs7Y2FzZSAxNDpjO2JyZWFrO2Nhc2UgMTU6cmV0dXJuIDEyO2Nhc2UgMTY6YnJlYWs7Y2FzZSAxNzpyZXR1cm4gMTE7Y2FzZSAxODpyZXR1cm4gMTU7Y2FzZSAxOTpyZXR1cm4gMTY7Y2FzZSAyMDpyZXR1cm4gMTc7Y2FzZSAyMTpyZXR1cm4gMTg7Y2FzZSAyMjpyZXR1cm4gdGhpcy5iZWdpbigicGVyc29uX2V4dCIpLDQ1O2Nhc2UgMjM6cmV0dXJuIHRoaXMuYmVnaW4oInBlcnNvbiIpLDQ0O2Nhc2UgMjQ6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9leHRfcXVldWUiKSw1MTtjYXNlIDI1OnJldHVybiB0aGlzLmJlZ2luKCJzeXN0ZW1fZXh0X2RiIiksNTA7Y2FzZSAyNjpyZXR1cm4gdGhpcy5iZWdpbigic3lzdGVtX2V4dCIpLDQ5O2Nhc2UgMjc6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9xdWV1ZSIpLDQ4O2Nhc2UgMjg6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9kYiIpLDQ3O2Nhc2UgMjk6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbSIpLDQ2O2Nhc2UgMzA6cmV0dXJuIHRoaXMuYmVnaW4oImJvdW5kYXJ5IiksMzc7Y2FzZSAzMTpyZXR1cm4gdGhpcy5iZWdpbigiZW50ZXJwcmlzZV9ib3VuZGFyeSIpLDM0O2Nhc2UgMzI6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9ib3VuZGFyeSIpLDM2O2Nhc2UgMzM6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9leHRfcXVldWUiKSw1NztjYXNlIDM0OnJldHVybiB0aGlzLmJlZ2luKCJjb250YWluZXJfZXh0X2RiIiksNTY7Y2FzZSAzNTpyZXR1cm4gdGhpcy5iZWdpbigiY29udGFpbmVyX2V4dCIpLDU1O2Nhc2UgMzY6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9xdWV1ZSIpLDU0O2Nhc2UgMzc6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9kYiIpLDUzO2Nhc2UgMzg6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lciIpLDUyO2Nhc2UgMzk6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9ib3VuZGFyeSIpLDM4O2Nhc2UgNDA6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudF9leHRfcXVldWUiKSw2MztjYXNlIDQxOnJldHVybiB0aGlzLmJlZ2luKCJjb21wb25lbnRfZXh0X2RiIiksNjI7Y2FzZSA0MjpyZXR1cm4gdGhpcy5iZWdpbigiY29tcG9uZW50X2V4dCIpLDYxO2Nhc2UgNDM6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudF9xdWV1ZSIpLDYwO2Nhc2UgNDQ6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudF9kYiIpLDU5O2Nhc2UgNDU6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudCIpLDU4O2Nhc2UgNDY6cmV0dXJuIHRoaXMuYmVnaW4oIm5vZGUiKSwzOTtjYXNlIDQ3OnJldHVybiB0aGlzLmJlZ2luKCJub2RlIiksMzk7Y2FzZSA0ODpyZXR1cm4gdGhpcy5iZWdpbigibm9kZV9sIiksNDA7Y2FzZSA0OTpyZXR1cm4gdGhpcy5iZWdpbigibm9kZV9yIiksNDE7Y2FzZSA1MDpyZXR1cm4gdGhpcy5iZWdpbigicmVsIiksNjQ7Y2FzZSA1MTpyZXR1cm4gdGhpcy5iZWdpbigiYmlyZWwiKSw2NTtjYXNlIDUyOnJldHVybiB0aGlzLmJlZ2luKCJyZWxfdSIpLDY2O2Nhc2UgNTM6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF91IiksNjY7Y2FzZSA1NDpyZXR1cm4gdGhpcy5iZWdpbigicmVsX2QiKSw2NztjYXNlIDU1OnJldHVybiB0aGlzLmJlZ2luKCJyZWxfZCIpLDY3O2Nhc2UgNTY6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9sIiksNjg7Y2FzZSA1NzpyZXR1cm4gdGhpcy5iZWdpbigicmVsX2wiKSw2ODtjYXNlIDU4OnJldHVybiB0aGlzLmJlZ2luKCJyZWxfciIpLDY5O2Nhc2UgNTk6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9yIiksNjk7Y2FzZSA2MDpyZXR1cm4gdGhpcy5iZWdpbigicmVsX2IiKSw3MDtjYXNlIDYxOnJldHVybiB0aGlzLmJlZ2luKCJyZWxfaW5kZXgiKSw3MTtjYXNlIDYyOnJldHVybiB0aGlzLmJlZ2luKCJ1cGRhdGVfZWxfc3R5bGUiKSw3MjtjYXNlIDYzOnJldHVybiB0aGlzLmJlZ2luKCJ1cGRhdGVfcmVsX3N0eWxlIiksNzM7Y2FzZSA2NDpyZXR1cm4gdGhpcy5iZWdpbigidXBkYXRlX2xheW91dF9jb25maWciKSw3NDtjYXNlIDY1OnJldHVybiJFT0ZfSU5fU1RSVUNUIjtjYXNlIDY2OnJldHVybiB0aGlzLmJlZ2luKCJhdHRyaWJ1dGUiKSwiQVRUUklCVVRFX0VNUFRZIjtjYXNlIDY3OnRoaXMuYmVnaW4oImF0dHJpYnV0ZSIpO2JyZWFrO2Nhc2UgNjg6dGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDY5OnJldHVybiA4MDtjYXNlIDcwOmJyZWFrO2Nhc2UgNzE6cmV0dXJuIDgwO2Nhc2UgNzI6dGhpcy5iZWdpbigic3RyaW5nIik7YnJlYWs7Y2FzZSA3Mzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA3NDpyZXR1cm4iU1RSIjtjYXNlIDc1OnRoaXMuYmVnaW4oInN0cmluZ19rdiIpO2JyZWFrO2Nhc2UgNzY6cmV0dXJuIHRoaXMuYmVnaW4oInN0cmluZ19rdl9rZXkiKSwiU1RSX0tFWSI7Y2FzZSA3Nzp0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigic3RyaW5nX2t2X3ZhbHVlIik7YnJlYWs7Y2FzZSA3ODpyZXR1cm4iU1RSX1ZBTFVFIjtjYXNlIDc5OnRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA4MDpyZXR1cm4iU1RSIjtjYXNlIDgxOnJldHVybiJMQlJBQ0UiO2Nhc2UgODI6cmV0dXJuIlJCUkFDRSI7Y2FzZSA4MzpyZXR1cm4iU1BBQ0UiO2Nhc2UgODQ6cmV0dXJuIkVPTCI7Y2FzZSA4NTpyZXR1cm4gMTR9fSxydWxlczpbL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK1JMW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS8sL14oPzp0aXRsZVxzW14jXG47XSspLywvXig/OmFjY0Rlc2NyaXB0aW9uXHNbXiNcbjtdKykvLC9eKD86YWNjVGl0bGVccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKlx7XHMqKS8sL14oPzpbXH1dKS8sL14oPzpbXlx9XSopLywvXig/OiUlKD8hXHspKlteXG5dKihccj9cbj8pKykvLC9eKD86JSVbXlxuXSooXHI/XG4pKikvLC9eKD86XHMqKFxyP1xuKSspLywvXig/OlxzKykvLC9eKD86QzRDb250ZXh0XGIpLywvXig/OkM0Q29udGFpbmVyXGIpLywvXig/OkM0Q29tcG9uZW50XGIpLywvXig/OkM0RHluYW1pY1xiKS8sL14oPzpDNERlcGxveW1lbnRcYikvLC9eKD86UGVyc29uX0V4dFxiKS8sL14oPzpQZXJzb25cYikvLC9eKD86U3lzdGVtUXVldWVfRXh0XGIpLywvXig/OlN5c3RlbURiX0V4dFxiKS8sL14oPzpTeXN0ZW1fRXh0XGIpLywvXig/OlN5c3RlbVF1ZXVlXGIpLywvXig/OlN5c3RlbURiXGIpLywvXig/OlN5c3RlbVxiKS8sL14oPzpCb3VuZGFyeVxiKS8sL14oPzpFbnRlcnByaXNlX0JvdW5kYXJ5XGIpLywvXig/OlN5c3RlbV9Cb3VuZGFyeVxiKS8sL14oPzpDb250YWluZXJRdWV1ZV9FeHRcYikvLC9eKD86Q29udGFpbmVyRGJfRXh0XGIpLywvXig/OkNvbnRhaW5lcl9FeHRcYikvLC9eKD86Q29udGFpbmVyUXVldWVcYikvLC9eKD86Q29udGFpbmVyRGJcYikvLC9eKD86Q29udGFpbmVyXGIpLywvXig/OkNvbnRhaW5lcl9Cb3VuZGFyeVxiKS8sL14oPzpDb21wb25lbnRRdWV1ZV9FeHRcYikvLC9eKD86Q29tcG9uZW50RGJfRXh0XGIpLywvXig/OkNvbXBvbmVudF9FeHRcYikvLC9eKD86Q29tcG9uZW50UXVldWVcYikvLC9eKD86Q29tcG9uZW50RGJcYikvLC9eKD86Q29tcG9uZW50XGIpLywvXig/OkRlcGxveW1lbnRfTm9kZVxiKS8sL14oPzpOb2RlXGIpLywvXig/Ok5vZGVfTFxiKS8sL14oPzpOb2RlX1JcYikvLC9eKD86UmVsXGIpLywvXig/OkJpUmVsXGIpLywvXig/OlJlbF9VcFxiKS8sL14oPzpSZWxfVVxiKS8sL14oPzpSZWxfRG93blxiKS8sL14oPzpSZWxfRFxiKS8sL14oPzpSZWxfTGVmdFxiKS8sL14oPzpSZWxfTFxiKS8sL14oPzpSZWxfUmlnaHRcYikvLC9eKD86UmVsX1JcYikvLC9eKD86UmVsX0JhY2tcYikvLC9eKD86UmVsSW5kZXhcYikvLC9eKD86VXBkYXRlRWxlbWVudFN0eWxlXGIpLywvXig/OlVwZGF0ZVJlbFN0eWxlXGIpLywvXig/OlVwZGF0ZUxheW91dENvbmZpZ1xiKS8sL14oPzokKS8sL14oPzpbKF1bIF0qWyxdKS8sL14oPzpbKF0pLywvXig/OlspXSkvLC9eKD86LCwpLywvXig/OiwpLywvXig/OlsgXSpbIl1bIl0pLywvXig/OlsgXSpbIl0pLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OlsgXSpbXCRdKS8sL14oPzpbXj1dKikvLC9eKD86Wz1dWyBdKlsiXSkvLC9eKD86W14iXSspLywvXig/OlsiXSkvLC9eKD86W14sXSspLywvXig/Olx7KS8sL14oPzpcfSkvLC9eKD86W1xzXSspLywvXig/OltcblxyXSspLywvXig/OiQpL10sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzExLDEyXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzldLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbN10saW5jbHVzaXZlOiExfSxzdHJpbmdfa3ZfdmFsdWU6e3J1bGVzOls3OCw3OV0saW5jbHVzaXZlOiExfSxzdHJpbmdfa3Zfa2V5OntydWxlczpbNzddLGluY2x1c2l2ZTohMX0sc3RyaW5nX2t2OntydWxlczpbNzZdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbNzMsNzRdLGluY2x1c2l2ZTohMX0sYXR0cmlidXRlOntydWxlczpbNjgsNjksNzAsNzEsNzIsNzUsODBdLGluY2x1c2l2ZTohMX0sdXBkYXRlX2xheW91dF9jb25maWc6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSx1cGRhdGVfcmVsX3N0eWxlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sdXBkYXRlX2VsX3N0eWxlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scmVsX2I6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxyZWxfcjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHJlbF9sOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scmVsX2Q6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxyZWxfdTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHJlbF9iaTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxyZWw6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxub2RlX3I6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxub2RlX2w6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxub2RlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0saW5kZXg6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0scmVsX2luZGV4OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sY29tcG9uZW50X2V4dF9xdWV1ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxjb21wb25lbnRfZXh0X2RiOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sY29tcG9uZW50X2V4dDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudF9xdWV1ZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudF9kYjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9ib3VuZGFyeTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9leHRfcXVldWU6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb250YWluZXJfZXh0X2RiOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sY29udGFpbmVyX2V4dDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9xdWV1ZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9kYjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGJpcmVsOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2JvdW5kYXJ5OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sZW50ZXJwcmlzZV9ib3VuZGFyeTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGJvdW5kYXJ5OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2V4dF9xdWV1ZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHN5c3RlbV9leHRfZGI6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxzeXN0ZW1fZXh0OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX3F1ZXVlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2RiOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scGVyc29uX2V4dDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHBlcnNvbjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNSw2LDgsMTAsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsODEsODIsODMsODQsODVdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gVHJ9KCk7TWEubGV4ZXI9enM7ZnVuY3Rpb24gYW8oKXt0aGlzLnl5PXt9fXJldHVybiBhby5wcm90b3R5cGU9TWEsTWEuUGFyc2VyPWFvLG5ldyBhb30oKTtDUS5wYXJzZXI9Q1E7Y29uc3QgRFZ0PUNRO2xldCBSMz1bXSxNOT1bIiJdLE9wPSJnbG9iYWwiLGozPSIiLFE0PVt7YWxpYXM6Imdsb2JhbCIsbGFiZWw6e3RleHQ6Imdsb2JhbCJ9LHR5cGU6e3RleHQ6Imdsb2JhbCJ9LHRhZ3M6bnVsbCxsaW5rOm51bGwscGFyZW50Qm91bmRhcnk6IiJ9XSxwUj1bXSxSYmU9IiIsamJlPSExLFNRPTQsX1E9Mjt2YXIgeHFlO2NvbnN0IElWdD1mdW5jdGlvbigpe3JldHVybiB4cWV9LE9WdD1mdW5jdGlvbihpKXt4cWU9WWYoaSxxdCgpKX0sTlZ0PWZ1bmN0aW9uKGkscyx1LGQscCx2LGIseSxUKXtpZihpPT1udWxsfHxzPT09dm9pZCAwfHxzPT09bnVsbHx8dT09PXZvaWQgMHx8dT09PW51bGx8fGQ9PT12b2lkIDB8fGQ9PT1udWxsKXJldHVybjtsZXQgXz17fTtjb25zdCBBPXBSLmZpbmQoUD0+UC5mcm9tPT09cyYmUC50bz09PXUpO2lmKEE/Xz1BOnBSLnB1c2goXyksXy50eXBlPWksXy5mcm9tPXMsXy50bz11LF8ubGFiZWw9e3RleHQ6ZH0scD09bnVsbClfLnRlY2huPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBwPT0ib2JqZWN0Iil7bGV0W1AsUl09T2JqZWN0LmVudHJpZXMocClbMF07X1tQXT17dGV4dDpSfX1lbHNlIF8udGVjaG49e3RleHQ6cH07aWYodj09bnVsbClfLmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiB2PT0ib2JqZWN0Iil7bGV0W1AsUl09T2JqZWN0LmVudHJpZXModilbMF07X1tQXT17dGV4dDpSfX1lbHNlIF8uZGVzY3I9e3RleHQ6dn07aWYodHlwZW9mIGI9PSJvYmplY3QiKXtsZXRbUCxSXT1PYmplY3QuZW50cmllcyhiKVswXTtfW1BdPVJ9ZWxzZSBfLnNwcml0ZT1iO2lmKHR5cGVvZiB5PT0ib2JqZWN0Iil7bGV0W1AsUl09T2JqZWN0LmVudHJpZXMoeSlbMF07X1tQXT1SfWVsc2UgXy50YWdzPXk7aWYodHlwZW9mIFQ9PSJvYmplY3QiKXtsZXRbUCxSXT1PYmplY3QuZW50cmllcyhUKVswXTtfW1BdPVJ9ZWxzZSBfLmxpbms9VDtfLndyYXA9RDkoKX0sUFZ0PWZ1bmN0aW9uKGkscyx1LGQscCx2LGIpe2lmKHM9PT1udWxsfHx1PT09bnVsbClyZXR1cm47bGV0IHk9e307Y29uc3QgVD1SMy5maW5kKF89Pl8uYWxpYXM9PT1zKTtpZihUJiZzPT09VC5hbGlhcz95PVQ6KHkuYWxpYXM9cyxSMy5wdXNoKHkpKSx1PT1udWxsP3kubGFiZWw9e3RleHQ6IiJ9OnkubGFiZWw9e3RleHQ6dX0sZD09bnVsbCl5LmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBkPT0ib2JqZWN0Iil7bGV0W18sQV09T2JqZWN0LmVudHJpZXMoZClbMF07eVtfXT17dGV4dDpBfX1lbHNlIHkuZGVzY3I9e3RleHQ6ZH07aWYodHlwZW9mIHA9PSJvYmplY3QiKXtsZXRbXyxBXT1PYmplY3QuZW50cmllcyhwKVswXTt5W19dPUF9ZWxzZSB5LnNwcml0ZT1wO2lmKHR5cGVvZiB2PT0ib2JqZWN0Iil7bGV0W18sQV09T2JqZWN0LmVudHJpZXModilbMF07eVtfXT1BfWVsc2UgeS50YWdzPXY7aWYodHlwZW9mIGI9PSJvYmplY3QiKXtsZXRbXyxBXT1PYmplY3QuZW50cmllcyhiKVswXTt5W19dPUF9ZWxzZSB5Lmxpbms9Yjt5LnR5cGVDNFNoYXBlPXt0ZXh0Oml9LHkucGFyZW50Qm91bmRhcnk9T3AseS53cmFwPUQ5KCl9LEJWdD1mdW5jdGlvbihpLHMsdSxkLHAsdixiLHkpe2lmKHM9PT1udWxsfHx1PT09bnVsbClyZXR1cm47bGV0IFQ9e307Y29uc3QgXz1SMy5maW5kKEE9PkEuYWxpYXM9PT1zKTtpZihfJiZzPT09Xy5hbGlhcz9UPV86KFQuYWxpYXM9cyxSMy5wdXNoKFQpKSx1PT1udWxsP1QubGFiZWw9e3RleHQ6IiJ9OlQubGFiZWw9e3RleHQ6dX0sZD09bnVsbClULnRlY2huPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBkPT0ib2JqZWN0Iil7bGV0W0EsUF09T2JqZWN0LmVudHJpZXMoZClbMF07VFtBXT17dGV4dDpQfX1lbHNlIFQudGVjaG49e3RleHQ6ZH07aWYocD09bnVsbClULmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBwPT0ib2JqZWN0Iil7bGV0W0EsUF09T2JqZWN0LmVudHJpZXMocClbMF07VFtBXT17dGV4dDpQfX1lbHNlIFQuZGVzY3I9e3RleHQ6cH07aWYodHlwZW9mIHY9PSJvYmplY3QiKXtsZXRbQSxQXT1PYmplY3QuZW50cmllcyh2KVswXTtUW0FdPVB9ZWxzZSBULnNwcml0ZT12O2lmKHR5cGVvZiBiPT0ib2JqZWN0Iil7bGV0W0EsUF09T2JqZWN0LmVudHJpZXMoYilbMF07VFtBXT1QfWVsc2UgVC50YWdzPWI7aWYodHlwZW9mIHk9PSJvYmplY3QiKXtsZXRbQSxQXT1PYmplY3QuZW50cmllcyh5KVswXTtUW0FdPVB9ZWxzZSBULmxpbms9eTtULndyYXA9RDkoKSxULnR5cGVDNFNoYXBlPXt0ZXh0Oml9LFQucGFyZW50Qm91bmRhcnk9T3B9LEZWdD1mdW5jdGlvbihpLHMsdSxkLHAsdixiLHkpe2lmKHM9PT1udWxsfHx1PT09bnVsbClyZXR1cm47bGV0IFQ9e307Y29uc3QgXz1SMy5maW5kKEE9PkEuYWxpYXM9PT1zKTtpZihfJiZzPT09Xy5hbGlhcz9UPV86KFQuYWxpYXM9cyxSMy5wdXNoKFQpKSx1PT1udWxsP1QubGFiZWw9e3RleHQ6IiJ9OlQubGFiZWw9e3RleHQ6dX0sZD09bnVsbClULnRlY2huPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBkPT0ib2JqZWN0Iil7bGV0W0EsUF09T2JqZWN0LmVudHJpZXMoZClbMF07VFtBXT17dGV4dDpQfX1lbHNlIFQudGVjaG49e3RleHQ6ZH07aWYocD09bnVsbClULmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBwPT0ib2JqZWN0Iil7bGV0W0EsUF09T2JqZWN0LmVudHJpZXMocClbMF07VFtBXT17dGV4dDpQfX1lbHNlIFQuZGVzY3I9e3RleHQ6cH07aWYodHlwZW9mIHY9PSJvYmplY3QiKXtsZXRbQSxQXT1PYmplY3QuZW50cmllcyh2KVswXTtUW0FdPVB9ZWxzZSBULnNwcml0ZT12O2lmKHR5cGVvZiBiPT0ib2JqZWN0Iil7bGV0W0EsUF09T2JqZWN0LmVudHJpZXMoYilbMF07VFtBXT1QfWVsc2UgVC50YWdzPWI7aWYodHlwZW9mIHk9PSJvYmplY3QiKXtsZXRbQSxQXT1PYmplY3QuZW50cmllcyh5KVswXTtUW0FdPVB9ZWxzZSBULmxpbms9eTtULndyYXA9RDkoKSxULnR5cGVDNFNoYXBlPXt0ZXh0Oml9LFQucGFyZW50Qm91bmRhcnk9T3B9LFJWdD1mdW5jdGlvbihpLHMsdSxkLHApe2lmKGk9PT1udWxsfHxzPT09bnVsbClyZXR1cm47bGV0IHY9e307Y29uc3QgYj1RNC5maW5kKHk9PnkuYWxpYXM9PT1pKTtpZihiJiZpPT09Yi5hbGlhcz92PWI6KHYuYWxpYXM9aSxRNC5wdXNoKHYpKSxzPT1udWxsP3YubGFiZWw9e3RleHQ6IiJ9OnYubGFiZWw9e3RleHQ6c30sdT09bnVsbCl2LnR5cGU9e3RleHQ6InN5c3RlbSJ9O2Vsc2UgaWYodHlwZW9mIHU9PSJvYmplY3QiKXtsZXRbeSxUXT1PYmplY3QuZW50cmllcyh1KVswXTt2W3ldPXt0ZXh0OlR9fWVsc2Ugdi50eXBlPXt0ZXh0OnV9O2lmKHR5cGVvZiBkPT0ib2JqZWN0Iil7bGV0W3ksVF09T2JqZWN0LmVudHJpZXMoZClbMF07dlt5XT1UfWVsc2Ugdi50YWdzPWQ7aWYodHlwZW9mIHA9PSJvYmplY3QiKXtsZXRbeSxUXT1PYmplY3QuZW50cmllcyhwKVswXTt2W3ldPVR9ZWxzZSB2Lmxpbms9cDt2LnBhcmVudEJvdW5kYXJ5PU9wLHYud3JhcD1EOSgpLGozPU9wLE9wPWksTTkucHVzaChqMyl9LGpWdD1mdW5jdGlvbihpLHMsdSxkLHApe2lmKGk9PT1udWxsfHxzPT09bnVsbClyZXR1cm47bGV0IHY9e307Y29uc3QgYj1RNC5maW5kKHk9PnkuYWxpYXM9PT1pKTtpZihiJiZpPT09Yi5hbGlhcz92PWI6KHYuYWxpYXM9aSxRNC5wdXNoKHYpKSxzPT1udWxsP3YubGFiZWw9e3RleHQ6IiJ9OnYubGFiZWw9e3RleHQ6c30sdT09bnVsbCl2LnR5cGU9e3RleHQ6ImNvbnRhaW5lciJ9O2Vsc2UgaWYodHlwZW9mIHU9PSJvYmplY3QiKXtsZXRbeSxUXT1PYmplY3QuZW50cmllcyh1KVswXTt2W3ldPXt0ZXh0OlR9fWVsc2Ugdi50eXBlPXt0ZXh0OnV9O2lmKHR5cGVvZiBkPT0ib2JqZWN0Iil7bGV0W3ksVF09T2JqZWN0LmVudHJpZXMoZClbMF07dlt5XT1UfWVsc2Ugdi50YWdzPWQ7aWYodHlwZW9mIHA9PSJvYmplY3QiKXtsZXRbeSxUXT1PYmplY3QuZW50cmllcyhwKVswXTt2W3ldPVR9ZWxzZSB2Lmxpbms9cDt2LnBhcmVudEJvdW5kYXJ5PU9wLHYud3JhcD1EOSgpLGozPU9wLE9wPWksTTkucHVzaChqMyl9LCRWdD1mdW5jdGlvbihpLHMsdSxkLHAsdixiLHkpe2lmKHM9PT1udWxsfHx1PT09bnVsbClyZXR1cm47bGV0IFQ9e307Y29uc3QgXz1RNC5maW5kKEE9PkEuYWxpYXM9PT1zKTtpZihfJiZzPT09Xy5hbGlhcz9UPV86KFQuYWxpYXM9cyxRNC5wdXNoKFQpKSx1PT1udWxsP1QubGFiZWw9e3RleHQ6IiJ9OlQubGFiZWw9e3RleHQ6dX0sZD09bnVsbClULnR5cGU9e3RleHQ6Im5vZGUifTtlbHNlIGlmKHR5cGVvZiBkPT0ib2JqZWN0Iil7bGV0W0EsUF09T2JqZWN0LmVudHJpZXMoZClbMF07VFtBXT17dGV4dDpQfX1lbHNlIFQudHlwZT17dGV4dDpkfTtpZihwPT1udWxsKVQuZGVzY3I9e3RleHQ6IiJ9O2Vsc2UgaWYodHlwZW9mIHA9PSJvYmplY3QiKXtsZXRbQSxQXT1PYmplY3QuZW50cmllcyhwKVswXTtUW0FdPXt0ZXh0OlB9fWVsc2UgVC5kZXNjcj17dGV4dDpwfTtpZih0eXBlb2YgYj09Im9iamVjdCIpe2xldFtBLFBdPU9iamVjdC5lbnRyaWVzKGIpWzBdO1RbQV09UH1lbHNlIFQudGFncz1iO2lmKHR5cGVvZiB5PT0ib2JqZWN0Iil7bGV0W0EsUF09T2JqZWN0LmVudHJpZXMoeSlbMF07VFtBXT1QfWVsc2UgVC5saW5rPXk7VC5ub2RlVHlwZT1pLFQucGFyZW50Qm91bmRhcnk9T3AsVC53cmFwPUQ5KCksajM9T3AsT3A9cyxNOS5wdXNoKGozKX0selZ0PWZ1bmN0aW9uKCl7T3A9ajMsTTkucG9wKCksajM9TTkucG9wKCksTTkucHVzaChqMyl9LHFWdD1mdW5jdGlvbihpLHMsdSxkLHAsdixiLHksVCxfLEEpe2xldCBQPVIzLmZpbmQoUj0+Ui5hbGlhcz09PXMpO2lmKCEoUD09PXZvaWQgMCYmKFA9UTQuZmluZChSPT5SLmFsaWFzPT09cyksUD09PXZvaWQgMCkpKXtpZih1IT1udWxsKWlmKHR5cGVvZiB1PT0ib2JqZWN0Iil7bGV0W1IsRl09T2JqZWN0LmVudHJpZXModSlbMF07UFtSXT1GfWVsc2UgUC5iZ0NvbG9yPXU7aWYoZCE9bnVsbClpZih0eXBlb2YgZD09Im9iamVjdCIpe2xldFtSLEZdPU9iamVjdC5lbnRyaWVzKGQpWzBdO1BbUl09Rn1lbHNlIFAuZm9udENvbG9yPWQ7aWYocCE9bnVsbClpZih0eXBlb2YgcD09Im9iamVjdCIpe2xldFtSLEZdPU9iamVjdC5lbnRyaWVzKHApWzBdO1BbUl09Rn1lbHNlIFAuYm9yZGVyQ29sb3I9cDtpZih2IT1udWxsKWlmKHR5cGVvZiB2PT0ib2JqZWN0Iil7bGV0W1IsRl09T2JqZWN0LmVudHJpZXModilbMF07UFtSXT1GfWVsc2UgUC5zaGFkb3dpbmc9djtpZihiIT1udWxsKWlmKHR5cGVvZiBiPT0ib2JqZWN0Iil7bGV0W1IsRl09T2JqZWN0LmVudHJpZXMoYilbMF07UFtSXT1GfWVsc2UgUC5zaGFwZT1iO2lmKHkhPW51bGwpaWYodHlwZW9mIHk9PSJvYmplY3QiKXtsZXRbUixGXT1PYmplY3QuZW50cmllcyh5KVswXTtQW1JdPUZ9ZWxzZSBQLnNwcml0ZT15O2lmKFQhPW51bGwpaWYodHlwZW9mIFQ9PSJvYmplY3QiKXtsZXRbUixGXT1PYmplY3QuZW50cmllcyhUKVswXTtQW1JdPUZ9ZWxzZSBQLnRlY2huPVQ7aWYoXyE9bnVsbClpZih0eXBlb2YgXz09Im9iamVjdCIpe2xldFtSLEZdPU9iamVjdC5lbnRyaWVzKF8pWzBdO1BbUl09Rn1lbHNlIFAubGVnZW5kVGV4dD1fO2lmKEEhPW51bGwpaWYodHlwZW9mIEE9PSJvYmplY3QiKXtsZXRbUixGXT1PYmplY3QuZW50cmllcyhBKVswXTtQW1JdPUZ9ZWxzZSBQLmxlZ2VuZFNwcml0ZT1BfX0sSFZ0PWZ1bmN0aW9uKGkscyx1LGQscCx2LGIpe2NvbnN0IHk9cFIuZmluZChUPT5ULmZyb209PT1zJiZULnRvPT09dSk7aWYoeSE9PXZvaWQgMCl7aWYoZCE9bnVsbClpZih0eXBlb2YgZD09Im9iamVjdCIpe2xldFtULF9dPU9iamVjdC5lbnRyaWVzKGQpWzBdO3lbVF09X31lbHNlIHkudGV4dENvbG9yPWQ7aWYocCE9bnVsbClpZih0eXBlb2YgcD09Im9iamVjdCIpe2xldFtULF9dPU9iamVjdC5lbnRyaWVzKHApWzBdO3lbVF09X31lbHNlIHkubGluZUNvbG9yPXA7aWYodiE9bnVsbClpZih0eXBlb2Ygdj09Im9iamVjdCIpe2xldFtULF9dPU9iamVjdC5lbnRyaWVzKHYpWzBdO3lbVF09cGFyc2VJbnQoXyl9ZWxzZSB5Lm9mZnNldFg9cGFyc2VJbnQodik7aWYoYiE9bnVsbClpZih0eXBlb2YgYj09Im9iamVjdCIpe2xldFtULF9dPU9iamVjdC5lbnRyaWVzKGIpWzBdO3lbVF09cGFyc2VJbnQoXyl9ZWxzZSB5Lm9mZnNldFk9cGFyc2VJbnQoYil9fSxWVnQ9ZnVuY3Rpb24oaSxzLHUpe2xldCBkPVNRLHA9X1E7aWYodHlwZW9mIHM9PSJvYmplY3QiKXtjb25zdCB2PU9iamVjdC52YWx1ZXMocylbMF07ZD1wYXJzZUludCh2KX1lbHNlIGQ9cGFyc2VJbnQocyk7aWYodHlwZW9mIHU9PSJvYmplY3QiKXtjb25zdCB2PU9iamVjdC52YWx1ZXModSlbMF07cD1wYXJzZUludCh2KX1lbHNlIHA9cGFyc2VJbnQodSk7ZD49MSYmKFNRPWQpLHA+PTEmJihfUT1wKX0sVVZ0PWZ1bmN0aW9uKCl7cmV0dXJuIFNRfSxHVnQ9ZnVuY3Rpb24oKXtyZXR1cm4gX1F9LEtWdD1mdW5jdGlvbigpe3JldHVybiBPcH0sV1Z0PWZ1bmN0aW9uKCl7cmV0dXJuIGozfSxrcWU9ZnVuY3Rpb24oaSl7cmV0dXJuIGk9PW51bGw/UjM6UjMuZmlsdGVyKHM9PnMucGFyZW50Qm91bmRhcnk9PT1pKX0sWVZ0PWZ1bmN0aW9uKGkpe3JldHVybiBSMy5maW5kKHM9PnMuYWxpYXM9PT1pKX0sWFZ0PWZ1bmN0aW9uKGkpe3JldHVybiBPYmplY3Qua2V5cyhrcWUoaSkpfSxFcWU9ZnVuY3Rpb24oaSl7cmV0dXJuIGk9PW51bGw/UTQ6UTQuZmlsdGVyKHM9PnMucGFyZW50Qm91bmRhcnk9PT1pKX0sUVZ0PUVxZSxKVnQ9ZnVuY3Rpb24oKXtyZXR1cm4gcFJ9LFpWdD1mdW5jdGlvbigpe3JldHVybiBSYmV9LGVVdD1mdW5jdGlvbihpKXtqYmU9aX0sRDk9ZnVuY3Rpb24oKXtyZXR1cm4gamJlfSwkYmU9e2FkZFBlcnNvbk9yU3lzdGVtOlBWdCxhZGRQZXJzb25PclN5c3RlbUJvdW5kYXJ5OlJWdCxhZGRDb250YWluZXI6QlZ0LGFkZENvbnRhaW5lckJvdW5kYXJ5OmpWdCxhZGRDb21wb25lbnQ6RlZ0LGFkZERlcGxveW1lbnROb2RlOiRWdCxwb3BCb3VuZGFyeVBhcnNlU3RhY2s6elZ0LGFkZFJlbDpOVnQsdXBkYXRlRWxTdHlsZTpxVnQsdXBkYXRlUmVsU3R5bGU6SFZ0LHVwZGF0ZUxheW91dENvbmZpZzpWVnQsYXV0b1dyYXA6RDksc2V0V3JhcDplVXQsZ2V0QzRTaGFwZUFycmF5OmtxZSxnZXRDNFNoYXBlOllWdCxnZXRDNFNoYXBlS2V5czpYVnQsZ2V0Qm91bmRhcmllczpFcWUsZ2V0Qm91bmRhcnlzOlFWdCxnZXRDdXJyZW50Qm91bmRhcnlQYXJzZTpLVnQsZ2V0UGFyZW50Qm91bmRhcnlQYXJzZTpXVnQsZ2V0UmVsczpKVnQsZ2V0VGl0bGU6WlZ0LGdldEM0VHlwZTpJVnQsZ2V0QzRTaGFwZUluUm93OlVWdCxnZXRDNEJvdW5kYXJ5SW5Sb3c6R1Z0LHNldEFjY1RpdGxlOkJnLGdldEFjY1RpdGxlOkNwLGdldEFjY0Rlc2NyaXB0aW9uOl9wLHNldEFjY0Rlc2NyaXB0aW9uOlNwLGdldENvbmZpZzooKT0+cXQoKS5jNCxjbGVhcjpmdW5jdGlvbigpe1IzPVtdLFE0PVt7YWxpYXM6Imdsb2JhbCIsbGFiZWw6e3RleHQ6Imdsb2JhbCJ9LHR5cGU6e3RleHQ6Imdsb2JhbCJ9LHRhZ3M6bnVsbCxsaW5rOm51bGwscGFyZW50Qm91bmRhcnk6IiJ9XSxqMz0iIixPcD0iZ2xvYmFsIixNOT1bIiJdLHBSPVtdLE05PVsiIl0sUmJlPSIiLGpiZT0hMSxTUT00LF9RPTJ9LExJTkVUWVBFOntTT0xJRDowLERPVFRFRDoxLE5PVEU6MixTT0xJRF9DUk9TUzozLERPVFRFRF9DUk9TUzo0LFNPTElEX09QRU46NSxET1RURURfT1BFTjo2LExPT1BfU1RBUlQ6MTAsTE9PUF9FTkQ6MTEsQUxUX1NUQVJUOjEyLEFMVF9FTFNFOjEzLEFMVF9FTkQ6MTQsT1BUX1NUQVJUOjE1LE9QVF9FTkQ6MTYsQUNUSVZFX1NUQVJUOjE3LEFDVElWRV9FTkQ6MTgsUEFSX1NUQVJUOjE5LFBBUl9BTkQ6MjAsUEFSX0VORDoyMSxSRUNUX1NUQVJUOjIyLFJFQ1RfRU5EOjIzLFNPTElEX1BPSU5UOjI0LERPVFRFRF9QT0lOVDoyNX0sQVJST1dUWVBFOntGSUxMRUQ6MCxPUEVOOjF9LFBMQUNFTUVOVDp7TEVGVE9GOjAsUklHSFRPRjoxLE9WRVI6Mn0sc2V0VGl0bGU6ZnVuY3Rpb24oaSl7UmJlPVlmKGkscXQoKSl9LHNldEM0VHlwZTpPVnR9LEFRPShpLHMpPT57Y29uc3QgdT1pLmFwcGVuZCgicmVjdCIpO2lmKHUuYXR0cigieCIscy54KSx1LmF0dHIoInkiLHMueSksdS5hdHRyKCJmaWxsIixzLmZpbGwpLHUuYXR0cigic3Ryb2tlIixzLnN0cm9rZSksdS5hdHRyKCJ3aWR0aCIscy53aWR0aCksdS5hdHRyKCJoZWlnaHQiLHMuaGVpZ2h0KSxzLm5hbWUmJnUuYXR0cigibmFtZSIscy5uYW1lKSxzLnJ4IT09dm9pZCAwJiZ1LmF0dHIoInJ4IixzLnJ4KSxzLnJ5IT09dm9pZCAwJiZ1LmF0dHIoInJ5IixzLnJ5KSxzLmF0dHJzIT09dm9pZCAwKWZvcihjb25zdCBkIGluIHMuYXR0cnMpdS5hdHRyKGQscy5hdHRyc1tkXSk7cmV0dXJuIHMuY2xhc3MhPT12b2lkIDAmJnUuYXR0cigiY2xhc3MiLHMuY2xhc3MpLHV9LFRxZT0oaSxzKT0+e2NvbnN0IHU9e3g6cy5zdGFydHgseTpzLnN0YXJ0eSx3aWR0aDpzLnN0b3B4LXMuc3RhcnR4LGhlaWdodDpzLnN0b3B5LXMuc3RhcnR5LGZpbGw6cy5maWxsLHN0cm9rZTpzLnN0cm9rZSxjbGFzczoicmVjdCJ9O0FRKGksdSkubG93ZXIoKX0sdFV0PShpLHMpPT57Y29uc3QgdT1zLnRleHQucmVwbGFjZShmRCwiICIpLGQ9aS5hcHBlbmQoInRleHQiKTtkLmF0dHIoIngiLHMueCksZC5hdHRyKCJ5IixzLnkpLGQuYXR0cigiY2xhc3MiLCJsZWdlbmQiKSxkLnN0eWxlKCJ0ZXh0LWFuY2hvciIscy5hbmNob3IpLHMuY2xhc3MhPT12b2lkIDAmJmQuYXR0cigiY2xhc3MiLHMuY2xhc3MpO2NvbnN0IHA9ZC5hcHBlbmQoInRzcGFuIik7cmV0dXJuIHAuYXR0cigieCIscy54K3MudGV4dE1hcmdpbioyKSxwLnRleHQodSksZH0sblV0PShpLHMsdSxkKT0+e2NvbnN0IHA9aS5hcHBlbmQoImltYWdlIik7cC5hdHRyKCJ4IixzKSxwLmF0dHIoInkiLHUpO2NvbnN0IHY9cDkuc2FuaXRpemVVcmwoZCk7cC5hdHRyKCJ4bGluazpocmVmIix2KX0sclV0PShpLHMsdSxkKT0+e2NvbnN0IHA9aS5hcHBlbmQoInVzZSIpO3AuYXR0cigieCIscykscC5hdHRyKCJ5Iix1KTtjb25zdCB2PXA5LnNhbml0aXplVXJsKGQpO3AuYXR0cigieGxpbms6aHJlZiIsYCMke3Z9YCl9LHFDPSgpPT4oe3g6MCx5OjAsd2lkdGg6MTAwLGhlaWdodDoxMDAsZmlsbDoiI0VERjJBRSIsc3Ryb2tlOiIjNjY2IixhbmNob3I6InN0YXJ0IixyeDowLHJ5OjB9KSx6YmU9KCk9Pih7eDowLHk6MCx3aWR0aDoxMDAsaGVpZ2h0OjEwMCwidGV4dC1hbmNob3IiOiJzdGFydCIsc3R5bGU6IiM2NjYiLHRleHRNYXJnaW46MCxyeDowLHJ5OjAsdHNwYW46ITB9KSxxYmU9ZnVuY3Rpb24oaSxzKXtyZXR1cm4gQVEoaSxzKX0sQ3FlPWZ1bmN0aW9uKGkscyx1LGQscCx2KXtjb25zdCBiPWkuYXBwZW5kKCJpbWFnZSIpO2IuYXR0cigid2lkdGgiLHMpLGIuYXR0cigiaGVpZ2h0Iix1KSxiLmF0dHIoIngiLGQpLGIuYXR0cigieSIscCk7bGV0IHk9di5zdGFydHNXaXRoKCJkYXRhOmltYWdlL3BuZztiYXNlNjQiKT92OnA5LnNhbml0aXplVXJsKHYpO2IuYXR0cigieGxpbms6aHJlZiIseSl9LGlVdD0oaSxzLHUpPT57Y29uc3QgZD1pLmFwcGVuZCgiZyIpO2xldCBwPTA7Zm9yKGxldCB2IG9mIHMpe2xldCBiPXYudGV4dENvbG9yP3YudGV4dENvbG9yOiIjNDQ0NDQ0Iix5PXYubGluZUNvbG9yP3YubGluZUNvbG9yOiIjNDQ0NDQ0IixUPXYub2Zmc2V0WD9wYXJzZUludCh2Lm9mZnNldFgpOjAsXz12Lm9mZnNldFk/cGFyc2VJbnQodi5vZmZzZXRZKTowLEE9IiI7aWYocD09PTApe2xldCBSPWQuYXBwZW5kKCJsaW5lIik7Ui5hdHRyKCJ4MSIsdi5zdGFydFBvaW50LngpLFIuYXR0cigieTEiLHYuc3RhcnRQb2ludC55KSxSLmF0dHIoIngyIix2LmVuZFBvaW50LngpLFIuYXR0cigieTIiLHYuZW5kUG9pbnQueSksUi5hdHRyKCJzdHJva2Utd2lkdGgiLCIxIiksUi5hdHRyKCJzdHJva2UiLHkpLFIuc3R5bGUoImZpbGwiLCJub25lIiksdi50eXBlIT09InJlbF9iIiYmUi5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrQSsiI2Fycm93aGVhZCkiKSwodi50eXBlPT09ImJpcmVsInx8di50eXBlPT09InJlbF9iIikmJlIuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrQSsiI2Fycm93ZW5kKSIpLHA9LTF9ZWxzZXtsZXQgUj1kLmFwcGVuZCgicGF0aCIpO1IuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxIikuYXR0cigic3Ryb2tlIix5KS5hdHRyKCJkIiwiTXN0YXJ0eCxzdGFydHkgUWNvbnRyb2x4LGNvbnRyb2x5IHN0b3B4LHN0b3B5ICIucmVwbGFjZUFsbCgic3RhcnR4Iix2LnN0YXJ0UG9pbnQueCkucmVwbGFjZUFsbCgic3RhcnR5Iix2LnN0YXJ0UG9pbnQueSkucmVwbGFjZUFsbCgiY29udHJvbHgiLHYuc3RhcnRQb2ludC54Kyh2LmVuZFBvaW50Lngtdi5zdGFydFBvaW50LngpLzItKHYuZW5kUG9pbnQueC12LnN0YXJ0UG9pbnQueCkvNCkucmVwbGFjZUFsbCgiY29udHJvbHkiLHYuc3RhcnRQb2ludC55Kyh2LmVuZFBvaW50Lnktdi5zdGFydFBvaW50LnkpLzIpLnJlcGxhY2VBbGwoInN0b3B4Iix2LmVuZFBvaW50LngpLnJlcGxhY2VBbGwoInN0b3B5Iix2LmVuZFBvaW50LnkpKSx2LnR5cGUhPT0icmVsX2IiJiZSLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitBKyIjYXJyb3doZWFkKSIpLCh2LnR5cGU9PT0iYmlyZWwifHx2LnR5cGU9PT0icmVsX2IiKSYmUi5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitBKyIjYXJyb3dlbmQpIil9bGV0IFA9dS5tZXNzYWdlRm9udCgpO0Y3KHUpKHYubGFiZWwudGV4dCxkLE1hdGgubWluKHYuc3RhcnRQb2ludC54LHYuZW5kUG9pbnQueCkrTWF0aC5hYnModi5lbmRQb2ludC54LXYuc3RhcnRQb2ludC54KS8yK1QsTWF0aC5taW4odi5zdGFydFBvaW50Lnksdi5lbmRQb2ludC55KStNYXRoLmFicyh2LmVuZFBvaW50Lnktdi5zdGFydFBvaW50LnkpLzIrXyx2LmxhYmVsLndpZHRoLHYubGFiZWwuaGVpZ2h0LHtmaWxsOmJ9LFApLHYudGVjaG4mJnYudGVjaG4udGV4dCE9PSIiJiYoUD11Lm1lc3NhZ2VGb250KCksRjcodSkoIlsiK3YudGVjaG4udGV4dCsiXSIsZCxNYXRoLm1pbih2LnN0YXJ0UG9pbnQueCx2LmVuZFBvaW50LngpK01hdGguYWJzKHYuZW5kUG9pbnQueC12LnN0YXJ0UG9pbnQueCkvMitULE1hdGgubWluKHYuc3RhcnRQb2ludC55LHYuZW5kUG9pbnQueSkrTWF0aC5hYnModi5lbmRQb2ludC55LXYuc3RhcnRQb2ludC55KS8yK3UubWVzc2FnZUZvbnRTaXplKzUrXyxNYXRoLm1heCh2LmxhYmVsLndpZHRoLHYudGVjaG4ud2lkdGgpLHYudGVjaG4uaGVpZ2h0LHtmaWxsOmIsImZvbnQtc3R5bGUiOiJpdGFsaWMifSxQKSl9fSxzVXQ9ZnVuY3Rpb24oaSxzLHUpe2NvbnN0IGQ9aS5hcHBlbmQoImciKTtsZXQgcD1zLmJnQ29sb3I/cy5iZ0NvbG9yOiJub25lIix2PXMuYm9yZGVyQ29sb3I/cy5ib3JkZXJDb2xvcjoiIzQ0NDQ0NCIsYj1zLmZvbnRDb2xvcj9zLmZvbnRDb2xvcjoiYmxhY2siLHk9eyJzdHJva2Utd2lkdGgiOjEsInN0cm9rZS1kYXNoYXJyYXkiOiI3LjAsNy4wIn07cy5ub2RlVHlwZSYmKHk9eyJzdHJva2Utd2lkdGgiOjF9KTtsZXQgVD17eDpzLngseTpzLnksZmlsbDpwLHN0cm9rZTp2LHdpZHRoOnMud2lkdGgsaGVpZ2h0OnMuaGVpZ2h0LHJ4OjIuNSxyeToyLjUsYXR0cnM6eX07cWJlKGQsVCk7bGV0IF89dS5ib3VuZGFyeUZvbnQoKTtfLmZvbnRXZWlnaHQ9ImJvbGQiLF8uZm9udFNpemU9Xy5mb250U2l6ZSsyLF8uZm9udENvbG9yPWIsRjcodSkocy5sYWJlbC50ZXh0LGQscy54LHMueStzLmxhYmVsLlkscy53aWR0aCxzLmhlaWdodCx7ZmlsbDoiIzQ0NDQ0NCJ9LF8pLHMudHlwZSYmcy50eXBlLnRleHQhPT0iIiYmKF89dS5ib3VuZGFyeUZvbnQoKSxfLmZvbnRDb2xvcj1iLEY3KHUpKHMudHlwZS50ZXh0LGQscy54LHMueStzLnR5cGUuWSxzLndpZHRoLHMuaGVpZ2h0LHtmaWxsOiIjNDQ0NDQ0In0sXykpLHMuZGVzY3ImJnMuZGVzY3IudGV4dCE9PSIiJiYoXz11LmJvdW5kYXJ5Rm9udCgpLF8uZm9udFNpemU9Xy5mb250U2l6ZS0yLF8uZm9udENvbG9yPWIsRjcodSkocy5kZXNjci50ZXh0LGQscy54LHMueStzLmRlc2NyLlkscy53aWR0aCxzLmhlaWdodCx7ZmlsbDoiIzQ0NDQ0NCJ9LF8pKX0sYVV0PWZ1bmN0aW9uKGkscyx1KXt2YXIgUDtsZXQgZD1zLmJnQ29sb3I/cy5iZ0NvbG9yOnVbcy50eXBlQzRTaGFwZS50ZXh0KyJfYmdfY29sb3IiXSxwPXMuYm9yZGVyQ29sb3I/cy5ib3JkZXJDb2xvcjp1W3MudHlwZUM0U2hhcGUudGV4dCsiX2JvcmRlcl9jb2xvciJdLHY9cy5mb250Q29sb3I/cy5mb250Q29sb3I6IiNGRkZGRkYiLGI9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBREFBQUFBd0NBSUFBQURZWUc3UUFBQUNEMGxFUVZSNFh1MllvVTRFTVJDR1QrNGo4QWk4QWhhSDRRSGdBVWpRdUZNRUNVZ01JVWd3SkFnTWhnUXNBWVVpSkNpUUlCQlkrRUlUc2pmVGRtZTZWMjR2NGM4dnlHYmIrWmpPdE4wYk5jdmpRWG1rSDgzV3ZZQld0bzZQTG02djdwN3VIMS93MmZYRCtQQnljWDFQdjJsM0lkRG0vdm43eCtkWFFpQXViUnpvVVJhN2dSWldkMGlHUklpSmJPbmhuZllCUVpOSmpOYnV5WTJlSkc4ZmtERTNiYkc0ZXA2TUhVQXNnWXhtRTNuVnM2VnNCV0pTR2Njc09sRlBtTElWaU16TE9CN3BDVk8yQXRISk1vaEg3Rmg2enFpdFFLN20wckp2QVZZZ0djRXBlLy9QTGREejY1c000cEY5TjdJQ2NYREtJQjVOdjZqN3REME5vU2RNMlFyVTlHZzBld0UxTHFCaEhSM0JCZHZqMnZhcG5pZGpIeEQvcTZ2ZDdQdmhyMzFBd2NZOGVYTVRYQUtFQ1paSkZYdUVxMjdhTGdRSzV1TE1vaENlbkdHdUdld094U2pCdllCcWVHNkIrTnFpYmxnZ2RqbmMrWlhEeStGTkZwRnp3NzZPM1VCQVJPdVhoNkZvaUFjZjVnOWVUdlVnenkwbldnNkk4Y1hIUlVwZzViT1ZCQ28rS0RwRmFqT2YyM0dnUG1lN1JTUStsYWNJRU5VZ0o2Z2cxazZIamdPbHFuTHFpcDR0RXVodjBoTkVNWFVEMGNseVhFM3A2cFpBMFMybm52VGxYd0xKRVpXbGI3Y1RRSDErVVNnVE40VmhBZW5tL3dlYTFPQ0FPbXFvNmZFMVdDYjlXU0tCYWgrcmJVV1BXQW1FMlJ2azBBcGlCNDVlT3lOQXpVOHhjVHZqOEt2a0tFb09hSVllSE5BM1p1eWdBdkZNVU8wQUFBQUFTVVZPUks1Q1lJST0iO3N3aXRjaChzLnR5cGVDNFNoYXBlLnRleHQpe2Nhc2UicGVyc29uIjpiPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURBQUFBQXdDQUlBQUFEWVlHN1FBQUFDRDBsRVFWUjRYdTJZb1U0RU1SQ0dUKzRqOEFpOEFoYUg0UUhnQVVqUXVGTUVDVWdNSVVnd0pBZ01oZ1FzQVlVaUpDaVFJQkJZK0VJVHNqZlRkbWU2VjI0djRjOHZ5R2JiK1pqT3ROMGJOY3ZqUVhta0g4M1d2WUJXdG82UExtNnY3cDd1SDEvdzJmWEQrUEJ5Y1gxUHYybDNJZERtL3ZuN3grZFhRaUF1YlJ6b1VSYTdnUlpXZDBpR1JJaUpiT25obmZZQlFaTkpqTmJ1eVkyZUpHOGZrREUzYmJHNGVwNk1IVUFzZ1l4bUUzblZzNlZzQldKU0djY3NPbEZQbUxJVmlNekxPQjdwQ1ZPMkF0SEpNb2hIN0ZoNnpxaXRRSzdtMHJKdkFWWWdHY0VwZS8vUExkRHo2NXNNNHBGOU43SUNjWERLSUI1TnY2ajd0RDBOb1NkTTJRclU5R2cwZXdFMUxxQmhIUjNCQmR2ajJ2YXBuaWRqSHhEL3E2dmQ3UHZocjMxQXdjWThlWE1UWEFLRUNaWkpGWHVFcTI3YUxnUUs1dUxNb2hDZW5HR3VHZXdPeFNqQnZZQnFlRzZCK05xaWJsZ2dkam5jK1pYRHkrRk5GcEZ6dzc2TzNVQkFST3VYaDZGb2lBY2Y1ZzllVHZVZ3p5MG5XZzZJOGNYSFJVcGc1Yk9WQkNvK0tEcEZhak9mMjNHZ1BtZTdSU1ErbGFjSUVOVWdKNmdnMWs2SGpnT2xxbkxxaXA0dEV1aHYwaE5FTVhVRDBjbHlYRTNwNnBaQTBTMm5udlRsWHdMSkVaV2xiN2NUUUgxK1VTZ1RONFZoQWVubS93ZWExT0NBT21xbzZmRTFXQ2I5V1NLQmFoK3JiVVdQV0FtRTJSdmswQXBpQjQ1ZU95TkF6VTh4Y1R2ajhLdmtLRW9PYUlZZUhOQTNadXlnQXZGTVVPMEFBQUFBU1VWT1JLNUNZSUk9IjticmVhaztjYXNlImV4dGVybmFsX3BlcnNvbiI6Yj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEQUFBQUF3Q0FJQUFBRFlZRzdRQUFBQjZFbEVRVlI0WHUyWUxZK0VNQkNHOStkV3IwYWowV2cwR28xR28wK2o4WGR2MnVUQ3Z2MWdwdDBlYkhLUHVoRGFlVzQ2MDVaOW1Kdng0QWRYVXlUVWRkMDh6K3U2ZmxtV1pSbkhzV2thZms5RHB0QXdEUHUrZjBlQVl0dTJQRWFHV3VqNWZDSVpyQkFDMmVMQkFuUkNzRWtreG1lYUpwN2lESjJRTURkSHNMZzhTeEtGRUphQW84bEFYbm11T0ZJaFRNcHh4S0FUZWJvNFVpRmtudU5vNE9uaVNJWFF5UnhFQTNZc25qR0NWRWpWWEQ3eUxVQXF4QkdVeVB2L1k0VzJiZU1nR3VTN2tWUUlCeWNIMGZEK29pNXBlelFFVHhkSEttUUtHazFlUUVZbGRLK2p3NUd4UGZaOXo3TWswUW5oZjFXMW0zdy8vRVVuNUJEbVNac2JSNDRRUUxCRXFyQkhxT3JtU0thUUF4ZG5MQXJDcnhaY003QTdaS3M0aW9ScThMRkMrTnBDM1dDQkpzdnBWdzVlZG05aUVYRnV5TmZ4WEFnU3dmckZRMWMwaU5kYThBZGVqdlVnbmt0T3RKUVF4bWNmRnpHZ2xjNVdWQ2o3b0RnRnFVMThib2VGU3M1MkNVaDhMRThCSVZRRFQxQUJyQjBIdGdTRVlsWDVkb0puQ3d2OVRYb2NLQ2FLYm53aGRES1BxNGxmM1N3VTNITHE0Vi8rV1loSFZNYS8zYjRJbGZ5aWtBZHVDa2NCYzdtUTMvei9RcS9jVHVpa2hrekIxMkFlL21jSkM5VStWbzhFajFnV0F0Z2JlR2dGc0FNSHI1MEJJV09MQ2JlenZocEJGVWRZNkVKdUovUURXMFhvTVg2MHpaMEFBQUFBU1VWT1JLNUNZSUk9IjticmVha31jb25zdCB5PWkuYXBwZW5kKCJnIik7eS5hdHRyKCJjbGFzcyIsInBlcnNvbi1tYW4iKTtjb25zdCBUPXFDKCk7c3dpdGNoKHMudHlwZUM0U2hhcGUudGV4dCl7Y2FzZSJwZXJzb24iOmNhc2UiZXh0ZXJuYWxfcGVyc29uIjpjYXNlInN5c3RlbSI6Y2FzZSJleHRlcm5hbF9zeXN0ZW0iOmNhc2UiY29udGFpbmVyIjpjYXNlImV4dGVybmFsX2NvbnRhaW5lciI6Y2FzZSJjb21wb25lbnQiOmNhc2UiZXh0ZXJuYWxfY29tcG9uZW50IjpULng9cy54LFQueT1zLnksVC5maWxsPWQsVC53aWR0aD1zLndpZHRoLFQuaGVpZ2h0PXMuaGVpZ2h0LFQuc3Ryb2tlPXAsVC5yeD0yLjUsVC5yeT0yLjUsVC5hdHRycz17InN0cm9rZS13aWR0aCI6LjV9LHFiZSh5LFQpO2JyZWFrO2Nhc2Uic3lzdGVtX2RiIjpjYXNlImV4dGVybmFsX3N5c3RlbV9kYiI6Y2FzZSJjb250YWluZXJfZGIiOmNhc2UiZXh0ZXJuYWxfY29udGFpbmVyX2RiIjpjYXNlImNvbXBvbmVudF9kYiI6Y2FzZSJleHRlcm5hbF9jb21wb25lbnRfZGIiOnkuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsZCkuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41IikuYXR0cigic3Ryb2tlIixwKS5hdHRyKCJkIiwiTXN0YXJ0eCxzdGFydHljMCwtMTAgaGFsZiwtMTAgaGFsZiwtMTBjMCwwIGhhbGYsMCBoYWxmLDEwbDAsaGVpZ2h0YzAsMTAgLWhhbGYsMTAgLWhhbGYsMTBjMCwwIC1oYWxmLDAgLWhhbGYsLTEwbDAsLWhlaWdodCIucmVwbGFjZUFsbCgic3RhcnR4IixzLngpLnJlcGxhY2VBbGwoInN0YXJ0eSIscy55KS5yZXBsYWNlQWxsKCJoYWxmIixzLndpZHRoLzIpLnJlcGxhY2VBbGwoImhlaWdodCIscy5oZWlnaHQpKSx5LmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41IikuYXR0cigic3Ryb2tlIixwKS5hdHRyKCJkIiwiTXN0YXJ0eCxzdGFydHljMCwxMCBoYWxmLDEwIGhhbGYsMTBjMCwwIGhhbGYsMCBoYWxmLC0xMCIucmVwbGFjZUFsbCgic3RhcnR4IixzLngpLnJlcGxhY2VBbGwoInN0YXJ0eSIscy55KS5yZXBsYWNlQWxsKCJoYWxmIixzLndpZHRoLzIpKTticmVhaztjYXNlInN5c3RlbV9xdWV1ZSI6Y2FzZSJleHRlcm5hbF9zeXN0ZW1fcXVldWUiOmNhc2UiY29udGFpbmVyX3F1ZXVlIjpjYXNlImV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZSI6Y2FzZSJjb21wb25lbnRfcXVldWUiOmNhc2UiZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlIjp5LmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLGQpLmF0dHIoInN0cm9rZS13aWR0aCIsIjAuNSIpLmF0dHIoInN0cm9rZSIscCkuYXR0cigiZCIsIk1zdGFydHgsc3RhcnR5bHdpZHRoLDBjNSwwIDUsaGFsZiA1LGhhbGZjMCwwIDAsaGFsZiAtNSxoYWxmbC13aWR0aCwwYy01LDAgLTUsLWhhbGYgLTUsLWhhbGZjMCwwIDAsLWhhbGYgNSwtaGFsZiIucmVwbGFjZUFsbCgic3RhcnR4IixzLngpLnJlcGxhY2VBbGwoInN0YXJ0eSIscy55KS5yZXBsYWNlQWxsKCJ3aWR0aCIscy53aWR0aCkucmVwbGFjZUFsbCgiaGFsZiIscy5oZWlnaHQvMikpLHkuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjUiKS5hdHRyKCJzdHJva2UiLHApLmF0dHIoImQiLCJNc3RhcnR4LHN0YXJ0eWMtNSwwIC01LGhhbGYgLTUsaGFsZmMwLGhhbGYgNSxoYWxmIDUsaGFsZiIucmVwbGFjZUFsbCgic3RhcnR4IixzLngrcy53aWR0aCkucmVwbGFjZUFsbCgic3RhcnR5IixzLnkpLnJlcGxhY2VBbGwoImhhbGYiLHMuaGVpZ2h0LzIpKTticmVha31sZXQgXz1wVXQodSxzLnR5cGVDNFNoYXBlLnRleHQpO3N3aXRjaCh5LmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLHYpLmF0dHIoImZvbnQtZmFtaWx5IixfLmZvbnRGYW1pbHkpLmF0dHIoImZvbnQtc2l6ZSIsXy5mb250U2l6ZS0yKS5hdHRyKCJmb250LXN0eWxlIiwiaXRhbGljIikuYXR0cigibGVuZ3RoQWRqdXN0Iiwic3BhY2luZyIpLmF0dHIoInRleHRMZW5ndGgiLHMudHlwZUM0U2hhcGUud2lkdGgpLmF0dHIoIngiLHMueCtzLndpZHRoLzItcy50eXBlQzRTaGFwZS53aWR0aC8yKS5hdHRyKCJ5IixzLnkrcy50eXBlQzRTaGFwZS5ZKS50ZXh0KCI8PCIrcy50eXBlQzRTaGFwZS50ZXh0KyI+PiIpLHMudHlwZUM0U2hhcGUudGV4dCl7Y2FzZSJwZXJzb24iOmNhc2UiZXh0ZXJuYWxfcGVyc29uIjpDcWUoeSw0OCw0OCxzLngrcy53aWR0aC8yLTI0LHMueStzLmltYWdlLlksYik7YnJlYWt9bGV0IEE9dVtzLnR5cGVDNFNoYXBlLnRleHQrIkZvbnQiXSgpO3JldHVybiBBLmZvbnRXZWlnaHQ9ImJvbGQiLEEuZm9udFNpemU9QS5mb250U2l6ZSsyLEEuZm9udENvbG9yPXYsRjcodSkocy5sYWJlbC50ZXh0LHkscy54LHMueStzLmxhYmVsLlkscy53aWR0aCxzLmhlaWdodCx7ZmlsbDp2fSxBKSxBPXVbcy50eXBlQzRTaGFwZS50ZXh0KyJGb250Il0oKSxBLmZvbnRDb2xvcj12LHMudGVjaG4mJigoUD1zLnRlY2huKT09bnVsbD92b2lkIDA6UC50ZXh0KSE9PSIiP0Y3KHUpKHMudGVjaG4udGV4dCx5LHMueCxzLnkrcy50ZWNobi5ZLHMud2lkdGgscy5oZWlnaHQse2ZpbGw6diwiZm9udC1zdHlsZSI6Iml0YWxpYyJ9LEEpOnMudHlwZSYmcy50eXBlLnRleHQhPT0iIiYmRjcodSkocy50eXBlLnRleHQseSxzLngscy55K3MudHlwZS5ZLHMud2lkdGgscy5oZWlnaHQse2ZpbGw6diwiZm9udC1zdHlsZSI6Iml0YWxpYyJ9LEEpLHMuZGVzY3ImJnMuZGVzY3IudGV4dCE9PSIiJiYoQT11LnBlcnNvbkZvbnQoKSxBLmZvbnRDb2xvcj12LEY3KHUpKHMuZGVzY3IudGV4dCx5LHMueCxzLnkrcy5kZXNjci5ZLHMud2lkdGgscy5oZWlnaHQse2ZpbGw6dn0sQSkpLHMuaGVpZ2h0fSxvVXQ9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiZGF0YWJhc2UiKS5hdHRyKCJmaWxsLXJ1bGUiLCJldmVub2RkIikuYXR0cigiY2xpcC1ydWxlIiwiZXZlbm9kZCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMTIuMjU4LjAwMWwuMjU2LjAwNC4yNTUuMDA1LjI1My4wMDguMjUxLjAxLjI0OS4wMTIuMjQ3LjAxNS4yNDYuMDE2LjI0Mi4wMTkuMjQxLjAyLjIzOS4wMjMuMjM2LjAyNC4yMzMuMDI3LjIzMS4wMjguMjI5LjAzMS4yMjUuMDMyLjIyMy4wMzQuMjIuMDM2LjIxNy4wMzguMjE0LjA0LjIxMS4wNDEuMjA4LjA0My4yMDUuMDQ1LjIwMS4wNDYuMTk4LjA0OC4xOTQuMDUuMTkxLjA1MS4xODcuMDUzLjE4My4wNTQuMTguMDU2LjE3NS4wNTcuMTcyLjA1OS4xNjguMDYuMTYzLjA2MS4xNi4wNjMuMTU1LjA2NC4xNS4wNjYuMDc0LjAzMy4wNzMuMDMzLjA3MS4wMzQuMDcuMDM0LjA2OS4wMzUuMDY4LjAzNS4wNjcuMDM1LjA2Ni4wMzUuMDY0LjAzNi4wNjQuMDM2LjA2Mi4wMzYuMDYuMDM2LjA2LjAzNy4wNTguMDM3LjA1OC4wMzcuMDU1LjAzOC4wNTUuMDM4LjA1My4wMzguMDUyLjAzOC4wNTEuMDM5LjA1LjAzOS4wNDguMDM5LjA0Ny4wMzkuMDQ1LjA0LjA0NC4wNC4wNDMuMDQuMDQxLjA0LjA0LjA0MS4wMzkuMDQxLjAzNy4wNDEuMDM2LjA0MS4wMzQuMDQxLjAzMy4wNDIuMDMyLjA0Mi4wMy4wNDIuMDI5LjA0Mi4wMjcuMDQyLjAyNi4wNDMuMDI0LjA0My4wMjMuMDQzLjAyMS4wNDMuMDIuMDQzLjAxOC4wNDQuMDE3LjA0My4wMTUuMDQ0LjAxMy4wNDQuMDEyLjA0NC4wMTEuMDQ1LjAwOS4wNDQuMDA3LjA0NS4wMDYuMDQ1LjAwNC4wNDUuMDAyLjA0NS4wMDEuMDQ1djE3bC0uMDAxLjA0NS0uMDAyLjA0NS0uMDA0LjA0NS0uMDA2LjA0NS0uMDA3LjA0NS0uMDA5LjA0NC0uMDExLjA0NS0uMDEyLjA0NC0uMDEzLjA0NC0uMDE1LjA0NC0uMDE3LjA0My0uMDE4LjA0NC0uMDIuMDQzLS4wMjEuMDQzLS4wMjMuMDQzLS4wMjQuMDQzLS4wMjYuMDQzLS4wMjcuMDQyLS4wMjkuMDQyLS4wMy4wNDItLjAzMi4wNDItLjAzMy4wNDItLjAzNC4wNDEtLjAzNi4wNDEtLjAzNy4wNDEtLjAzOS4wNDEtLjA0LjA0MS0uMDQxLjA0LS4wNDMuMDQtLjA0NC4wNC0uMDQ1LjA0LS4wNDcuMDM5LS4wNDguMDM5LS4wNS4wMzktLjA1MS4wMzktLjA1Mi4wMzgtLjA1My4wMzgtLjA1NS4wMzgtLjA1NS4wMzgtLjA1OC4wMzctLjA1OC4wMzctLjA2LjAzNy0uMDYuMDM2LS4wNjIuMDM2LS4wNjQuMDM2LS4wNjQuMDM2LS4wNjYuMDM1LS4wNjcuMDM1LS4wNjguMDM1LS4wNjkuMDM1LS4wNy4wMzQtLjA3MS4wMzQtLjA3My4wMzMtLjA3NC4wMzMtLjE1LjA2Ni0uMTU1LjA2NC0uMTYuMDYzLS4xNjMuMDYxLS4xNjguMDYtLjE3Mi4wNTktLjE3NS4wNTctLjE4LjA1Ni0uMTgzLjA1NC0uMTg3LjA1My0uMTkxLjA1MS0uMTk0LjA1LS4xOTguMDQ4LS4yMDEuMDQ2LS4yMDUuMDQ1LS4yMDguMDQzLS4yMTEuMDQxLS4yMTQuMDQtLjIxNy4wMzgtLjIyLjAzNi0uMjIzLjAzNC0uMjI1LjAzMi0uMjI5LjAzMS0uMjMxLjAyOC0uMjMzLjAyNy0uMjM2LjAyNC0uMjM5LjAyMy0uMjQxLjAyLS4yNDIuMDE5LS4yNDYuMDE2LS4yNDcuMDE1LS4yNDkuMDEyLS4yNTEuMDEtLjI1My4wMDgtLjI1NS4wMDUtLjI1Ni4wMDQtLjI1OC4wMDEtLjI1OC0uMDAxLS4yNTYtLjAwNC0uMjU1LS4wMDUtLjI1My0uMDA4LS4yNTEtLjAxLS4yNDktLjAxMi0uMjQ3LS4wMTUtLjI0NS0uMDE2LS4yNDMtLjAxOS0uMjQxLS4wMi0uMjM4LS4wMjMtLjIzNi0uMDI0LS4yMzQtLjAyNy0uMjMxLS4wMjgtLjIyOC0uMDMxLS4yMjYtLjAzMi0uMjIzLS4wMzQtLjIyLS4wMzYtLjIxNy0uMDM4LS4yMTQtLjA0LS4yMTEtLjA0MS0uMjA4LS4wNDMtLjIwNC0uMDQ1LS4yMDEtLjA0Ni0uMTk4LS4wNDgtLjE5NS0uMDUtLjE5LS4wNTEtLjE4Ny0uMDUzLS4xODQtLjA1NC0uMTc5LS4wNTYtLjE3Ni0uMDU3LS4xNzItLjA1OS0uMTY3LS4wNi0uMTY0LS4wNjEtLjE1OS0uMDYzLS4xNTUtLjA2NC0uMTUxLS4wNjYtLjA3NC0uMDMzLS4wNzItLjAzMy0uMDcyLS4wMzQtLjA3LS4wMzQtLjA2OS0uMDM1LS4wNjgtLjAzNS0uMDY3LS4wMzUtLjA2Ni0uMDM1LS4wNjQtLjAzNi0uMDYzLS4wMzYtLjA2Mi0uMDM2LS4wNjEtLjAzNi0uMDYtLjAzNy0uMDU4LS4wMzctLjA1Ny0uMDM3LS4wNTYtLjAzOC0uMDU1LS4wMzgtLjA1My0uMDM4LS4wNTItLjAzOC0uMDUxLS4wMzktLjA0OS0uMDM5LS4wNDktLjAzOS0uMDQ2LS4wMzktLjA0Ni0uMDQtLjA0NC0uMDQtLjA0My0uMDQtLjA0MS0uMDQtLjA0LS4wNDEtLjAzOS0uMDQxLS4wMzctLjA0MS0uMDM2LS4wNDEtLjAzNC0uMDQxLS4wMzMtLjA0Mi0uMDMyLS4wNDItLjAzLS4wNDItLjAyOS0uMDQyLS4wMjctLjA0Mi0uMDI2LS4wNDMtLjAyNC0uMDQzLS4wMjMtLjA0My0uMDIxLS4wNDMtLjAyLS4wNDMtLjAxOC0uMDQ0LS4wMTctLjA0My0uMDE1LS4wNDQtLjAxMy0uMDQ0LS4wMTItLjA0NC0uMDExLS4wNDUtLjAwOS0uMDQ0LS4wMDctLjA0NS0uMDA2LS4wNDUtLjAwNC0uMDQ1LS4wMDItLjA0NS0uMDAxLS4wNDV2LTE3bC4wMDEtLjA0NS4wMDItLjA0NS4wMDQtLjA0NS4wMDYtLjA0NS4wMDctLjA0NS4wMDktLjA0NC4wMTEtLjA0NS4wMTItLjA0NC4wMTMtLjA0NC4wMTUtLjA0NC4wMTctLjA0My4wMTgtLjA0NC4wMi0uMDQzLjAyMS0uMDQzLjAyMy0uMDQzLjAyNC0uMDQzLjAyNi0uMDQzLjAyNy0uMDQyLjAyOS0uMDQyLjAzLS4wNDIuMDMyLS4wNDIuMDMzLS4wNDIuMDM0LS4wNDEuMDM2LS4wNDEuMDM3LS4wNDEuMDM5LS4wNDEuMDQtLjA0MS4wNDEtLjA0LjA0My0uMDQuMDQ0LS4wNC4wNDYtLjA0LjA0Ni0uMDM5LjA0OS0uMDM5LjA0OS0uMDM5LjA1MS0uMDM5LjA1Mi0uMDM4LjA1My0uMDM4LjA1NS0uMDM4LjA1Ni0uMDM4LjA1Ny0uMDM3LjA1OC0uMDM3LjA2LS4wMzcuMDYxLS4wMzYuMDYyLS4wMzYuMDYzLS4wMzYuMDY0LS4wMzYuMDY2LS4wMzUuMDY3LS4wMzUuMDY4LS4wMzUuMDY5LS4wMzUuMDctLjAzNC4wNzItLjAzNC4wNzItLjAzMy4wNzQtLjAzMy4xNTEtLjA2Ni4xNTUtLjA2NC4xNTktLjA2My4xNjQtLjA2MS4xNjctLjA2LjE3Mi0uMDU5LjE3Ni0uMDU3LjE3OS0uMDU2LjE4NC0uMDU0LjE4Ny0uMDUzLjE5LS4wNTEuMTk1LS4wNS4xOTgtLjA0OC4yMDEtLjA0Ni4yMDQtLjA0NS4yMDgtLjA0My4yMTEtLjA0MS4yMTQtLjA0LjIxNy0uMDM4LjIyLS4wMzYuMjIzLS4wMzQuMjI2LS4wMzIuMjI4LS4wMzEuMjMxLS4wMjguMjM0LS4wMjcuMjM2LS4wMjQuMjM4LS4wMjMuMjQxLS4wMi4yNDMtLjAxOS4yNDUtLjAxNi4yNDctLjAxNS4yNDktLjAxMi4yNTEtLjAxLjI1My0uMDA4LjI1NS0uMDA1LjI1Ni0uMDA0LjI1OC0uMDAxLjI1OC4wMDF6bS05LjI1OCAyMC40OTl2LjAxbC4wMDEuMDIxLjAwMy4wMjEuMDA0LjAyMi4wMDUuMDIxLjAwNi4wMjIuMDA3LjAyMi4wMDkuMDIzLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDIzLjAxNi4wMjQuMDE3LjAyMy4wMTguMDI0LjAxOS4wMjQuMDIxLjAyNC4wMjIuMDI1LjAyMy4wMjQuMDI0LjAyNS4wNTIuMDQ5LjA1Ni4wNS4wNjEuMDUxLjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTEuMDc5LjA1Mi4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTEuMTA1LjA1Mi4xMS4wNTIuMTE0LjA1MS4xMTkuMDUxLjEyMy4wNTEuMTI3LjA1LjEzMS4wNS4xMzUuMDUuMTM5LjA0OC4xNDQuMDQ5LjE0Ny4wNDcuMTUyLjA0Ny4xNTUuMDQ3LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDMuMTcxLjA0My4xNzYuMDQxLjE3OC4wNDEuMTgzLjAzOS4xODcuMDM5LjE5LjAzNy4xOTQuMDM1LjE5Ny4wMzUuMjAyLjAzMy4yMDQuMDMxLjIwOS4wMy4yMTIuMDI5LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjEuMjMuMDIuMjMzLjAxOC4yMzYuMDE2LjI0LjAxNS4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDUuMjU2LjAwNC4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDQuMjU0LS4wMDUuMjUtLjAwOC4yNDctLjAxMS4yNDQtLjAxMi4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyMS4yMjYtLjAyMS4yMjQtLjAyNC4yMi0uMDI2LjIxNi0uMDI3LjIxMi0uMDI4LjIxLS4wMzEuMjA1LS4wMzEuMjAyLS4wMzQuMTk4LS4wMzQuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wNC4xNzktLjA0LjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDYuMTU1LS4wNDYuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDkuMTM5LS4wNDkuMTM2LS4wNS4xMzEtLjA1LjEyNi0uMDUuMTIzLS4wNTEuMTE4LS4wNTIuMTE0LS4wNTEuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1My4wODMtLjA1MS4wNzktLjA1Mi4wNzQtLjA1Mi4wNy0uMDUxLjA2NS0uMDUxLjA2LS4wNTEuMDU2LS4wNS4wNTEtLjA1LjAyMy0uMDI0LjAyMy0uMDI1LjAyMS0uMDI0LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjQuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMy4wMS0uMDIyLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxdi00LjEyN2wtLjA3Ny4wNTUtLjA4LjA1My0uMDgzLjA1NC0uMDg1LjA1My0uMDg3LjA1Mi0uMDkuMDUyLS4wOTMuMDUxLS4wOTUuMDUtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDktLjEwNS4wNDgtLjEwNi4wNDctLjEwOS4wNDctLjExMS4wNDYtLjExNC4wNDUtLjExNS4wNDUtLjExOC4wNDQtLjEyLjA0My0uMTIyLjA0Mi0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wNC0uMTMyLjAzOC0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNy0uMTM5LjAzNS0uMTQyLjAzNS0uMTQzLjAzNC0uMTQ0LjAzMy0uMTQ3LjAzMi0uMTQ4LjAzMS0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOS0uMTU0LjAyNy0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNS0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMi0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDExLS4xNzguMDEtLjE3OS4wMDgtLjE3OS4wMDgtLjE4MS4wMDYtLjE4Mi4wMDUtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDJoLS4zN2wtLjE4NC0uMDAyLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA1LS4xODEtLjAwNi0uMTc5LS4wMDgtLjE3OS0uMDA4LS4xNzgtLjAxLS4xNzYtLjAxMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMi0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNS0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyNy0uMTUzLS4wMjktLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzEtLjE0Ni0uMDMyLS4xNDUtLjAzMy0uMTQzLS4wMzQtLjE0MS0uMDM1LS4xNC0uMDM1LS4xMzctLjAzNy0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOC0uMTMtLjA0LS4xMjgtLjA0LS4xMjYtLjA0MS0uMTI0LS4wNDItLjEyMi0uMDQyLS4xMi0uMDQ0LS4xMTctLjA0My0uMTE2LS4wNDUtLjExMy0uMDQ1LS4xMTItLjA0Ni0uMTA5LS4wNDctLjEwNi0uMDQ3LS4xMDUtLjA0OC0uMTAyLS4wNDktLjEtLjA0OS0uMDk3LS4wNS0uMDk1LS4wNS0uMDkzLS4wNTItLjA5LS4wNTEtLjA4Ny0uMDUyLS4wODUtLjA1My0uMDgzLS4wNTQtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTI3em0wLTUuNjU0di4wMTFsLjAwMS4wMjEuMDAzLjAyMS4wMDQuMDIxLjAwNS4wMjIuMDA2LjAyMi4wMDcuMDIyLjAwOS4wMjIuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjQuMDE2LjAyMy4wMTcuMDI0LjAxOC4wMjQuMDE5LjAyNC4wMjEuMDI0LjAyMi4wMjQuMDIzLjAyNS4wMjQuMDI0LjA1Mi4wNS4wNTYuMDUuMDYxLjA1LjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTIuMDc5LjA1MS4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTIuMTA1LjA1Mi4xMS4wNTEuMTE0LjA1MS4xMTkuMDUyLjEyMy4wNS4xMjcuMDUxLjEzMS4wNS4xMzUuMDQ5LjEzOS4wNDkuMTQ0LjA0OC4xNDcuMDQ4LjE1Mi4wNDcuMTU1LjA0Ni4xNi4wNDUuMTYzLjA0NS4xNjcuMDQ0LjE3MS4wNDIuMTc2LjA0Mi4xNzguMDQuMTgzLjA0LjE4Ny4wMzguMTkuMDM3LjE5NC4wMzYuMTk3LjAzNC4yMDIuMDMzLjIwNC4wMzIuMjA5LjAzLjIxMi4wMjguMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMi4yMy4wMi4yMzMuMDE4LjIzNi4wMTYuMjQuMDE0LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNi4yNTYuMDAzLjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwMy4yNTQtLjAwNi4yNS0uMDA4LjI0Ny0uMDEuMjQ0LS4wMTIuMjQxLS4wMTUuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMi4yMjYtLjAyMi4yMjQtLjAyNC4yMi0uMDI1LjIxNi0uMDI3LjIxMi0uMDI5LjIxLS4wMy4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNS4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjAzOS4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ1LjE1NS0uMDQ3LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ4LjEzOS0uMDUuMTM2LS4wNDkuMTMxLS4wNS4xMjYtLjA1MS4xMjMtLjA1MS4xMTgtLjA1MS4xMTQtLjA1Mi4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUxLjA3LS4wNTIuMDY1LS4wNTEuMDYtLjA1LjA1Ni0uMDUxLjA1MS0uMDQ5LjAyMy0uMDI1LjAyMy0uMDI0LjAyMS0uMDI1LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjMuMDEzLS4wMjQuMDEyLS4wMjIuMDEtLjAyMy4wMS0uMDIzLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIxLjAwNC0uMDIyLjAwMS0uMDIxLjAwMS0uMDIxdi00LjEzOWwtLjA3Ny4wNTQtLjA4LjA1NC0uMDgzLjA1NC0uMDg1LjA1Mi0uMDg3LjA1My0uMDkuMDUxLS4wOTMuMDUxLS4wOTUuMDUxLS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ5LS4xMDUuMDQ4LS4xMDYuMDQ3LS4xMDkuMDQ3LS4xMTEuMDQ2LS4xMTQuMDQ1LS4xMTUuMDQ0LS4xMTguMDQ0LS4xMi4wNDQtLjEyMi4wNDItLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDM5LS4xMzIuMDM5LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM2LS4xMzkuMDM2LS4xNDIuMDM1LS4xNDMuMDMzLS4xNDQuMDMzLS4xNDcuMDMzLS4xNDguMDMxLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI4LS4xNTQuMDI4LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI1LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIyLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMTEtLjE3OC4wMDktLjE3OS4wMDktLjE3OS4wMDctLjE4MS4wMDctLjE4Mi4wMDUtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDJoLS4zN2wtLjE4NC0uMDAyLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA1LS4xODEtLjAwNy0uMTc5LS4wMDctLjE3OS0uMDA5LS4xNzgtLjAwOS0uMTc2LS4wMTEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjItLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjUtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjgtLjE1My0uMDI4LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMxLS4xNDYtLjAzMy0uMTQ1LS4wMzMtLjE0My0uMDMzLS4xNDEtLjAzNS0uMTQtLjAzNi0uMTM3LS4wMzYtLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzktLjEzLS4wMzktLjEyOC0uMDQtLjEyNi0uMDQxLS4xMjQtLjA0Mi0uMTIyLS4wNDMtLjEyLS4wNDMtLjExNy0uMDQ0LS4xMTYtLjA0NC0uMTEzLS4wNDYtLjExMi0uMDQ2LS4xMDktLjA0Ni0uMTA2LS4wNDctLjEwNS0uMDQ4LS4xMDItLjA0OS0uMS0uMDQ5LS4wOTctLjA1LS4wOTUtLjA1MS0uMDkzLS4wNTEtLjA5LS4wNTEtLjA4Ny0uMDUzLS4wODUtLjA1Mi0uMDgzLS4wNTQtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTM5em0wLTUuNjY2di4wMTFsLjAwMS4wMi4wMDMuMDIyLjAwNC4wMjEuMDA1LjAyMi4wMDYuMDIxLjAwNy4wMjIuMDA5LjAyMy4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyMy4wMTYuMDI0LjAxNy4wMjQuMDE4LjAyMy4wMTkuMDI0LjAyMS4wMjUuMDIyLjAyNC4wMjMuMDI0LjAyNC4wMjUuMDUyLjA1LjA1Ni4wNS4wNjEuMDUuMDY2LjA1MS4wNy4wNTEuMDc1LjA1Mi4wNzkuMDUxLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1Mi4xMDUuMDUxLjExLjA1Mi4xMTQuMDUxLjExOS4wNTEuMTIzLjA1MS4xMjcuMDUuMTMxLjA1LjEzNS4wNS4xMzkuMDQ5LjE0NC4wNDguMTQ3LjA0OC4xNTIuMDQ3LjE1NS4wNDYuMTYuMDQ1LjE2My4wNDUuMTY3LjA0My4xNzEuMDQzLjE3Ni4wNDIuMTc4LjA0LjE4My4wNC4xODcuMDM4LjE5LjAzNy4xOTQuMDM2LjE5Ny4wMzQuMjAyLjAzMy4yMDQuMDMyLjIwOS4wMy4yMTIuMDI4LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjEuMjMuMDIuMjMzLjAxOC4yMzYuMDE3LjI0LjAxNC4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDYuMjU2LjAwMy4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDMuMjU0LS4wMDYuMjUtLjAwOC4yNDctLjAxLjI0NC0uMDEzLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIuMjI2LS4wMjIuMjI0LS4wMjQuMjItLjAyNS4yMTYtLjAyNy4yMTItLjAyOS4yMS0uMDMuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzUuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wMzkuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0NS4xNTUtLjA0Ny4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OS4xMzktLjA0OS4xMzYtLjA0OS4xMzEtLjA1MS4xMjYtLjA1LjEyMy0uMDUxLjExOC0uMDUyLjExNC0uMDUxLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTIuMDctLjA1MS4wNjUtLjA1MS4wNi0uMDUxLjA1Ni0uMDUuMDUxLS4wNDkuMDIzLS4wMjUuMDIzLS4wMjUuMDIxLS4wMjQuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyNC4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIyLjAxLS4wMjMuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTUzbC0uMDc3LjA1NC0uMDguMDU0LS4wODMuMDUzLS4wODUuMDUzLS4wODcuMDUzLS4wOS4wNTEtLjA5My4wNTEtLjA5NS4wNTEtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDgtLjEwNS4wNDgtLjEwNi4wNDgtLjEwOS4wNDYtLjExMS4wNDYtLjExNC4wNDYtLjExNS4wNDQtLjExOC4wNDQtLjEyLjA0My0uMTIyLjA0My0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wMzktLjEzMi4wMzktLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzYtLjEzOS4wMzYtLjE0Mi4wMzQtLjE0My4wMzQtLjE0NC4wMzMtLjE0Ny4wMzItLjE0OC4wMzItLjE1LjAzLS4xNTEuMDMtLjE1My4wMjgtLjE1NC4wMjgtLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjQtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjMtLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxLS4xNzguMDEtLjE3OS4wMDktLjE3OS4wMDctLjE4MS4wMDYtLjE4Mi4wMDYtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDEtLjE4NS4wMDEtLjE4NS0uMDAxLS4xODQtLjAwMS0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNi0uMTgxLS4wMDYtLjE3OS0uMDA3LS4xNzktLjAwOS0uMTc4LS4wMS0uMTc2LS4wMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMy0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNC0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyOC0uMTUzLS4wMjgtLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzItLjE0Ni0uMDMyLS4xNDUtLjAzMy0uMTQzLS4wMzQtLjE0MS0uMDM0LS4xNC0uMDM2LS4xMzctLjAzNi0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOS0uMTMtLjAzOS0uMTI4LS4wNDEtLjEyNi0uMDQxLS4xMjQtLjA0MS0uMTIyLS4wNDMtLjEyLS4wNDMtLjExNy0uMDQ0LS4xMTYtLjA0NC0uMTEzLS4wNDYtLjExMi0uMDQ2LS4xMDktLjA0Ni0uMTA2LS4wNDgtLjEwNS0uMDQ4LS4xMDItLjA0OC0uMS0uMDUtLjA5Ny0uMDQ5LS4wOTUtLjA1MS0uMDkzLS4wNTEtLjA5LS4wNTItLjA4Ny0uMDUyLS4wODUtLjA1My0uMDgzLS4wNTMtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTUzem04Ljc0LTguMTc5bC0uMjU3LjAwNC0uMjU0LjAwNS0uMjUuMDA4LS4yNDcuMDExLS4yNDQuMDEyLS4yNDEuMDE0LS4yMzcuMDE2LS4yMzMuMDE4LS4yMzEuMDIxLS4yMjYuMDIyLS4yMjQuMDIzLS4yMi4wMjYtLjIxNi4wMjctLjIxMi4wMjgtLjIxLjAzMS0uMjA1LjAzMi0uMjAyLjAzMy0uMTk4LjAzNC0uMTk0LjAzNi0uMTkxLjAzOC0uMTg3LjAzOC0uMTgzLjA0LS4xNzkuMDQxLS4xNzUuMDQyLS4xNzIuMDQzLS4xNjguMDQzLS4xNjMuMDQ1LS4xNi4wNDYtLjE1NS4wNDYtLjE1Mi4wNDgtLjE0OC4wNDgtLjE0My4wNDgtLjEzOS4wNDktLjEzNi4wNS0uMTMxLjA1LS4xMjYuMDUxLS4xMjMuMDUxLS4xMTguMDUxLS4xMTQuMDUyLS4xMS4wNTItLjEwNi4wNTItLjEwMS4wNTItLjA5Ni4wNTItLjA5Mi4wNTItLjA4OC4wNTItLjA4My4wNTItLjA3OS4wNTItLjA3NC4wNTEtLjA3LjA1Mi0uMDY1LjA1MS0uMDYuMDUtLjA1Ni4wNS0uMDUxLjA1LS4wMjMuMDI1LS4wMjMuMDI0LS4wMjEuMDI0LS4wMi4wMjUtLjAxOS4wMjQtLjAxOC4wMjQtLjAxNy4wMjMtLjAxNS4wMjQtLjAxNC4wMjMtLjAxMy4wMjMtLjAxMi4wMjMtLjAxLjAyMy0uMDEuMDIyLS4wMDguMDIyLS4wMDYuMDIzLS4wMDYuMDIxLS4wMDQuMDIyLS4wMDQuMDIxLS4wMDEuMDIxLS4wMDEuMDIxLjAwMS4wMjEuMDAxLjAyMS4wMDQuMDIxLjAwNC4wMjIuMDA2LjAyMS4wMDYuMDIzLjAwOC4wMjIuMDEuMDIyLjAxLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE0LjAyMy4wMTUuMDI0LjAxNy4wMjMuMDE4LjAyNC4wMTkuMDI0LjAyLjAyNS4wMjEuMDI0LjAyMy4wMjQuMDIzLjAyNS4wNTEuMDUuMDU2LjA1LjA2LjA1LjA2NS4wNTEuMDcuMDUyLjA3NC4wNTEuMDc5LjA1Mi4wODMuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTYuMDUyLjEwMS4wNTIuMTA2LjA1Mi4xMS4wNTIuMTE0LjA1Mi4xMTguMDUxLjEyMy4wNTEuMTI2LjA1MS4xMzEuMDUuMTM2LjA1LjEzOS4wNDkuMTQzLjA0OC4xNDguMDQ4LjE1Mi4wNDguMTU1LjA0Ni4xNi4wNDYuMTYzLjA0NS4xNjguMDQzLjE3Mi4wNDMuMTc1LjA0Mi4xNzkuMDQxLjE4My4wNC4xODcuMDM4LjE5MS4wMzguMTk0LjAzNi4xOTguMDM0LjIwMi4wMzMuMjA1LjAzMi4yMS4wMzEuMjEyLjAyOC4yMTYuMDI3LjIyLjAyNi4yMjQuMDIzLjIyNi4wMjIuMjMxLjAyMS4yMzMuMDE4LjIzNy4wMTYuMjQxLjAxNC4yNDQuMDEyLjI0Ny4wMTEuMjUuMDA4LjI1NC4wMDUuMjU3LjAwNC4yNi4wMDEuMjYtLjAwMS4yNTctLjAwNC4yNTQtLjAwNS4yNS0uMDA4LjI0Ny0uMDExLjI0NC0uMDEyLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIxLjIyNi0uMDIyLjIyNC0uMDIzLjIyLS4wMjYuMjE2LS4wMjcuMjEyLS4wMjguMjEtLjAzMS4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNC4xOTQtLjAzNi4xOTEtLjAzOC4xODctLjAzOC4xODMtLjA0LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQzLjE2My0uMDQ1LjE2LS4wNDYuMTU1LS4wNDYuMTUyLS4wNDguMTQ4LS4wNDguMTQzLS4wNDguMTM5LS4wNDkuMTM2LS4wNS4xMzEtLjA1LjEyNi0uMDUxLjEyMy0uMDUxLjExOC0uMDUxLjExNC0uMDUyLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTEuMDctLjA1Mi4wNjUtLjA1MS4wNi0uMDUuMDU2LS4wNS4wNTEtLjA1LjAyMy0uMDI1LjAyMy0uMDI0LjAyMS0uMDI0LjAyLS4wMjUuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjMuMDE1LS4wMjQuMDE0LS4wMjMuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMy4wMS0uMDIyLjAwOC0uMDIyLjAwNi0uMDIzLjAwNi0uMDIxLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxLS4wMDEtLjAyMS0uMDAxLS4wMjEtLjAwNC0uMDIxLS4wMDQtLjAyMi0uMDA2LS4wMjEtLjAwNi0uMDIzLS4wMDgtLjAyMi0uMDEtLjAyMi0uMDEtLjAyMy0uMDEyLS4wMjMtLjAxMy0uMDIzLS4wMTQtLjAyMy0uMDE1LS4wMjQtLjAxNy0uMDIzLS4wMTgtLjAyNC0uMDE5LS4wMjQtLjAyLS4wMjUtLjAyMS0uMDI0LS4wMjMtLjAyNC0uMDIzLS4wMjUtLjA1MS0uMDUtLjA1Ni0uMDUtLjA2LS4wNS0uMDY1LS4wNTEtLjA3LS4wNTItLjA3NC0uMDUxLS4wNzktLjA1Mi0uMDgzLS4wNTItLjA4OC0uMDUyLS4wOTItLjA1Mi0uMDk2LS4wNTItLjEwMS0uMDUyLS4xMDYtLjA1Mi0uMTEtLjA1Mi0uMTE0LS4wNTItLjExOC0uMDUxLS4xMjMtLjA1MS0uMTI2LS4wNTEtLjEzMS0uMDUtLjEzNi0uMDUtLjEzOS0uMDQ5LS4xNDMtLjA0OC0uMTQ4LS4wNDgtLjE1Mi0uMDQ4LS4xNTUtLjA0Ni0uMTYtLjA0Ni0uMTYzLS4wNDUtLjE2OC0uMDQzLS4xNzItLjA0My0uMTc1LS4wNDItLjE3OS0uMDQxLS4xODMtLjA0LS4xODctLjAzOC0uMTkxLS4wMzgtLjE5NC0uMDM2LS4xOTgtLjAzNC0uMjAyLS4wMzMtLjIwNS0uMDMyLS4yMS0uMDMxLS4yMTItLjAyOC0uMjE2LS4wMjctLjIyLS4wMjYtLjIyNC0uMDIzLS4yMjYtLjAyMi0uMjMxLS4wMjEtLjIzMy0uMDE4LS4yMzctLjAxNi0uMjQxLS4wMTQtLjI0NC0uMDEyLS4yNDctLjAxMS0uMjUtLjAwOC0uMjU0LS4wMDUtLjI1Ny0uMDA0LS4yNi0uMDAxLS4yNi4wMDF6Iil9LGNVdD1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJjb21wdXRlciIpLmF0dHIoIndpZHRoIiwiMjQiKS5hdHRyKCJoZWlnaHQiLCIyNCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMiAydjEzaDIwdi0xM2gtMjB6bTE4IDExaC0xNnYtOWgxNnY5em0tMTAuMjI4IDZsLjQ2Ni0xaDMuNTI0bC40NjcgMWgtNC40NTd6bTE0LjIyOCAzaC0yNGwyLTZoMi4xMDRsLTEuMzMgNGgxOC40NWwtMS4yOTctNGgyLjA3M2wyIDZ6bS01LTEwaC0xNHYtN2gxNHY3eiIpfSx1VXQ9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiY2xvY2siKS5hdHRyKCJ3aWR0aCIsIjI0IikuYXR0cigiaGVpZ2h0IiwiMjQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTEyIDJjNS41MTQgMCAxMCA0LjQ4NiAxMCAxMHMtNC40ODYgMTAtMTAgMTAtMTAtNC40ODYtMTAtMTAgNC40ODYtMTAgMTAtMTB6bTAtMmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnM1LjM3MyAxMiAxMiAxMiAxMi01LjM3MyAxMi0xMi01LjM3My0xMi0xMi0xMnptNS44NDggMTIuNDU5Yy4yMDIuMDM4LjIwMi4zMzMuMDAxLjM3Mi0xLjkwNy4zNjEtNi4wNDUgMS4xMTEtNi41NDcgMS4xMTEtLjcxOSAwLTEuMzAxLS41ODItMS4zMDEtMS4zMDEgMC0uNTEyLjc3LTUuNDQ3IDEuMTI1LTcuNDQ1LjAzNC0uMTkyLjMxMi0uMTgxLjM0My4wMTRsLjk4NSA2LjIzOCA1LjM5NCAxLjAxMXoiKX0sbFV0PWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFycm93aGVhZCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTIpLmF0dHIoIm1hcmtlckhlaWdodCIsMTIpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6Iil9LGhVdD1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2VuZCIpLmF0dHIoInJlZlgiLDEpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTIpLmF0dHIoIm1hcmtlckhlaWdodCIsMTIpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxMCAwIEwgMCA1IEwgMTAgMTAgeiIpfSxmVXQ9ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZmlsbGVkLWhlYWQiKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX0sZFV0PWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsInNlcXVlbmNlbnVtYmVyIikuYXR0cigicmVmWCIsMTUpLmF0dHIoInJlZlkiLDE1KS5hdHRyKCJtYXJrZXJXaWR0aCIsNjApLmF0dHIoIm1hcmtlckhlaWdodCIsNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwxNSkuYXR0cigiY3kiLDE1KS5hdHRyKCJyIiw2KX0sZ1V0PWZ1bmN0aW9uKGkpe2NvbnN0IHU9aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY3Jvc3NoZWFkIikuYXR0cigibWFya2VyV2lkdGgiLDE1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hdHRyKCJyZWZYIiwxNikuYXR0cigicmVmWSIsNCk7dS5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwiYmxhY2siKS5hdHRyKCJzdHJva2UiLCIjMDAwMDAwIikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIwLCAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigiZCIsIk0gOSwyIFYgNiBMMTYsNCBaIiksdS5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAwMDAiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjAsIDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJkIiwiTSAwLDEgTCA2LDcgTSA2LDEgTCAwLDciKX0scFV0PShpLHMpPT4oe2ZvbnRGYW1pbHk6aVtzKyJGb250RmFtaWx5Il0sZm9udFNpemU6aVtzKyJGb250U2l6ZSJdLGZvbnRXZWlnaHQ6aVtzKyJGb250V2VpZ2h0Il19KSxGNz1mdW5jdGlvbigpe2Z1bmN0aW9uIGkocCx2LGIseSxULF8sQSl7Y29uc3QgUD12LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIrVC8yKS5hdHRyKCJ5Iix5K18vMis1KS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KHApO2QoUCxBKX1mdW5jdGlvbiBzKHAsdixiLHksVCxfLEEsUCl7Y29uc3R7Zm9udFNpemU6Uixmb250RmFtaWx5OkYsZm9udFdlaWdodDpqfT1QLEs9cC5zcGxpdChjaS5saW5lQnJlYWtSZWdleCk7Zm9yKGxldCBlZT0wO2VlPEsubGVuZ3RoO2VlKyspe2NvbnN0IGllPWVlKlItUiooSy5sZW5ndGgtMSkvMixvZT12LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIrVC8yKS5hdHRyKCJ5Iix5KS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnN0eWxlKCJmb250LXNpemUiLFIpLnN0eWxlKCJmb250LXdlaWdodCIsaikuc3R5bGUoImZvbnQtZmFtaWx5IixGKTtvZS5hcHBlbmQoInRzcGFuIikuYXR0cigiZHkiLGllKS50ZXh0KEtbZWVdKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJtYXRoZW1hdGljYWwiKSxkKG9lLEEpfX1mdW5jdGlvbiB1KHAsdixiLHksVCxfLEEsUCl7Y29uc3QgUj12LmFwcGVuZCgic3dpdGNoIiksaj1SLmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoIngiLGIpLmF0dHIoInkiLHkpLmF0dHIoIndpZHRoIixUKS5hdHRyKCJoZWlnaHQiLF8pLmFwcGVuZCgieGh0bWw6ZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO2ouYXBwZW5kKCJkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlLWNlbGwiKS5zdHlsZSgidGV4dC1hbGlnbiIsImNlbnRlciIpLnN0eWxlKCJ2ZXJ0aWNhbC1hbGlnbiIsIm1pZGRsZSIpLnRleHQocCkscyhwLFIsYix5LFQsXyxBLFApLGQoaixBKX1mdW5jdGlvbiBkKHAsdil7Zm9yKGNvbnN0IGIgaW4gdil2Lmhhc093blByb3BlcnR5KGIpJiZwLmF0dHIoYix2W2JdKX1yZXR1cm4gZnVuY3Rpb24ocCl7cmV0dXJuIHAudGV4dFBsYWNlbWVudD09PSJmbyI/dTpwLnRleHRQbGFjZW1lbnQ9PT0ib2xkIj9pOnN9fSgpLEo0PXtkcmF3UmVjdDpxYmUsZHJhd0JvdW5kYXJ5OnNVdCxkcmF3QzRTaGFwZTphVXQsZHJhd1JlbHM6aVV0LGRyYXdJbWFnZTpDcWUsaW5zZXJ0QXJyb3dIZWFkOmxVdCxpbnNlcnRBcnJvd0VuZDpoVXQsaW5zZXJ0QXJyb3dGaWxsZWRIZWFkOmZVdCxpbnNlcnREeW5hbWljTnVtYmVyOmRVdCxpbnNlcnRBcnJvd0Nyb3NzSGVhZDpnVXQsaW5zZXJ0RGF0YWJhc2VJY29uOm9VdCxpbnNlcnRDb21wdXRlckljb246Y1V0LGluc2VydENsb2NrSWNvbjp1VXR9O2xldCBMUT0wLE1RPTAsU3FlPTQsSGJlPTI7Q1EueXk9JGJlO2xldCAkcz17fTtjbGFzcyBfcWV7Y29uc3RydWN0b3Iocyl7dGhpcy5uYW1lPSIiLHRoaXMuZGF0YT17fSx0aGlzLmRhdGEuc3RhcnR4PXZvaWQgMCx0aGlzLmRhdGEuc3RvcHg9dm9pZCAwLHRoaXMuZGF0YS5zdGFydHk9dm9pZCAwLHRoaXMuZGF0YS5zdG9weT12b2lkIDAsdGhpcy5kYXRhLndpZHRoTGltaXQ9dm9pZCAwLHRoaXMubmV4dERhdGE9e30sdGhpcy5uZXh0RGF0YS5zdGFydHg9dm9pZCAwLHRoaXMubmV4dERhdGEuc3RvcHg9dm9pZCAwLHRoaXMubmV4dERhdGEuc3RhcnR5PXZvaWQgMCx0aGlzLm5leHREYXRhLnN0b3B5PXZvaWQgMCx0aGlzLm5leHREYXRhLmNudD0wLFZiZShzLmRiLmdldENvbmZpZygpKX1zZXREYXRhKHMsdSxkLHApe3RoaXMubmV4dERhdGEuc3RhcnR4PXRoaXMuZGF0YS5zdGFydHg9cyx0aGlzLm5leHREYXRhLnN0b3B4PXRoaXMuZGF0YS5zdG9weD11LHRoaXMubmV4dERhdGEuc3RhcnR5PXRoaXMuZGF0YS5zdGFydHk9ZCx0aGlzLm5leHREYXRhLnN0b3B5PXRoaXMuZGF0YS5zdG9weT1wfXVwZGF0ZVZhbChzLHUsZCxwKXtzW3VdPT09dm9pZCAwP3NbdV09ZDpzW3VdPXAoZCxzW3VdKX1pbnNlcnQocyl7dGhpcy5uZXh0RGF0YS5jbnQ9dGhpcy5uZXh0RGF0YS5jbnQrMTtsZXQgdT10aGlzLm5leHREYXRhLnN0YXJ0eD09PXRoaXMubmV4dERhdGEuc3RvcHg/dGhpcy5uZXh0RGF0YS5zdG9weCtzLm1hcmdpbjp0aGlzLm5leHREYXRhLnN0b3B4K3MubWFyZ2luKjIsZD11K3Mud2lkdGgscD10aGlzLm5leHREYXRhLnN0YXJ0eStzLm1hcmdpbioyLHY9cCtzLmhlaWdodDsodT49dGhpcy5kYXRhLndpZHRoTGltaXR8fGQ+PXRoaXMuZGF0YS53aWR0aExpbWl0fHx0aGlzLm5leHREYXRhLmNudD5TcWUpJiYodT10aGlzLm5leHREYXRhLnN0YXJ0eCtzLm1hcmdpbiskcy5uZXh0TGluZVBhZGRpbmdYLHA9dGhpcy5uZXh0RGF0YS5zdG9weStzLm1hcmdpbioyLHRoaXMubmV4dERhdGEuc3RvcHg9ZD11K3Mud2lkdGgsdGhpcy5uZXh0RGF0YS5zdGFydHk9dGhpcy5uZXh0RGF0YS5zdG9weSx0aGlzLm5leHREYXRhLnN0b3B5PXY9cCtzLmhlaWdodCx0aGlzLm5leHREYXRhLmNudD0xKSxzLng9dSxzLnk9cCx0aGlzLnVwZGF0ZVZhbCh0aGlzLmRhdGEsInN0YXJ0eCIsdSxNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwodGhpcy5kYXRhLCJzdGFydHkiLHAsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKHRoaXMuZGF0YSwic3RvcHgiLGQsTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKHRoaXMuZGF0YSwic3RvcHkiLHYsTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKHRoaXMubmV4dERhdGEsInN0YXJ0eCIsdSxNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwodGhpcy5uZXh0RGF0YSwic3RhcnR5IixwLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbCh0aGlzLm5leHREYXRhLCJzdG9weCIsZCxNYXRoLm1heCksdGhpcy51cGRhdGVWYWwodGhpcy5uZXh0RGF0YSwic3RvcHkiLHYsTWF0aC5tYXgpfWluaXQocyl7dGhpcy5uYW1lPSIiLHRoaXMuZGF0YT17c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDAsd2lkdGhMaW1pdDp2b2lkIDB9LHRoaXMubmV4dERhdGE9e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwLGNudDowfSxWYmUocy5kYi5nZXRDb25maWcoKSl9YnVtcExhc3RNYXJnaW4ocyl7dGhpcy5kYXRhLnN0b3B4Kz1zLHRoaXMuZGF0YS5zdG9weSs9c319Y29uc3QgVmJlPWZ1bmN0aW9uKGkpe2lkKCRzLGkpLGkuZm9udEZhbWlseSYmKCRzLnBlcnNvbkZvbnRGYW1pbHk9JHMuc3lzdGVtRm9udEZhbWlseT0kcy5tZXNzYWdlRm9udEZhbWlseT1pLmZvbnRGYW1pbHkpLGkuZm9udFNpemUmJigkcy5wZXJzb25Gb250U2l6ZT0kcy5zeXN0ZW1Gb250U2l6ZT0kcy5tZXNzYWdlRm9udFNpemU9aS5mb250U2l6ZSksaS5mb250V2VpZ2h0JiYoJHMucGVyc29uRm9udFdlaWdodD0kcy5zeXN0ZW1Gb250V2VpZ2h0PSRzLm1lc3NhZ2VGb250V2VpZ2h0PWkuZm9udFdlaWdodCl9LGJSPShpLHMpPT4oe2ZvbnRGYW1pbHk6aVtzKyJGb250RmFtaWx5Il0sZm9udFNpemU6aVtzKyJGb250U2l6ZSJdLGZvbnRXZWlnaHQ6aVtzKyJGb250V2VpZ2h0Il19KSxEUT1pPT4oe2ZvbnRGYW1pbHk6aS5ib3VuZGFyeUZvbnRGYW1pbHksZm9udFNpemU6aS5ib3VuZGFyeUZvbnRTaXplLGZvbnRXZWlnaHQ6aS5ib3VuZGFyeUZvbnRXZWlnaHR9KSxiVXQ9aT0+KHtmb250RmFtaWx5OmkubWVzc2FnZUZvbnRGYW1pbHksZm9udFNpemU6aS5tZXNzYWdlRm9udFNpemUsZm9udFdlaWdodDppLm1lc3NhZ2VGb250V2VpZ2h0fSk7ZnVuY3Rpb24gJDMoaSxzLHUsZCxwKXtpZighc1tpXS53aWR0aClpZih1KXNbaV0udGV4dD12amUoc1tpXS50ZXh0LHAsZCksc1tpXS50ZXh0TGluZXM9c1tpXS50ZXh0LnNwbGl0KGNpLmxpbmVCcmVha1JlZ2V4KS5sZW5ndGgsc1tpXS53aWR0aD1wLHNbaV0uaGVpZ2h0PUUyZShzW2ldLnRleHQsZCk7ZWxzZXtsZXQgdj1zW2ldLnRleHQuc3BsaXQoY2kubGluZUJyZWFrUmVnZXgpO3NbaV0udGV4dExpbmVzPXYubGVuZ3RoO2xldCBiPTA7c1tpXS5oZWlnaHQ9MCxzW2ldLndpZHRoPTA7Zm9yKGNvbnN0IHkgb2YgdilzW2ldLndpZHRoPU1hdGgubWF4KEg0KHksZCksc1tpXS53aWR0aCksYj1FMmUoeSxkKSxzW2ldLmhlaWdodD1zW2ldLmhlaWdodCtifX1jb25zdCBBcWU9ZnVuY3Rpb24oaSxzLHUpe3MueD11LmRhdGEuc3RhcnR4LHMueT11LmRhdGEuc3RhcnR5LHMud2lkdGg9dS5kYXRhLnN0b3B4LXUuZGF0YS5zdGFydHgscy5oZWlnaHQ9dS5kYXRhLnN0b3B5LXUuZGF0YS5zdGFydHkscy5sYWJlbC55PSRzLmM0U2hhcGVNYXJnaW4tMzU7bGV0IGQ9cy53cmFwJiYkcy53cmFwLHA9RFEoJHMpO3AuZm9udFNpemU9cC5mb250U2l6ZSsyLHAuZm9udFdlaWdodD0iYm9sZCI7bGV0IHY9SDQocy5sYWJlbC50ZXh0LHApOyQzKCJsYWJlbCIscyxkLHAsdiksSjQuZHJhd0JvdW5kYXJ5KGkscywkcyl9LExxZT1mdW5jdGlvbihpLHMsdSxkKXtsZXQgcD0wO2Zvcihjb25zdCB2IG9mIGQpe3A9MDtjb25zdCBiPXVbdl07bGV0IHk9YlIoJHMsYi50eXBlQzRTaGFwZS50ZXh0KTtzd2l0Y2goeS5mb250U2l6ZT15LmZvbnRTaXplLTIsYi50eXBlQzRTaGFwZS53aWR0aD1INCgiwqsiK2IudHlwZUM0U2hhcGUudGV4dCsiwrsiLHkpLGIudHlwZUM0U2hhcGUuaGVpZ2h0PXkuZm9udFNpemUrMixiLnR5cGVDNFNoYXBlLlk9JHMuYzRTaGFwZVBhZGRpbmcscD1iLnR5cGVDNFNoYXBlLlkrYi50eXBlQzRTaGFwZS5oZWlnaHQtNCxiLmltYWdlPXt3aWR0aDowLGhlaWdodDowLFk6MH0sYi50eXBlQzRTaGFwZS50ZXh0KXtjYXNlInBlcnNvbiI6Y2FzZSJleHRlcm5hbF9wZXJzb24iOmIuaW1hZ2Uud2lkdGg9NDgsYi5pbWFnZS5oZWlnaHQ9NDgsYi5pbWFnZS5ZPXAscD1iLmltYWdlLlkrYi5pbWFnZS5oZWlnaHQ7YnJlYWt9Yi5zcHJpdGUmJihiLmltYWdlLndpZHRoPTQ4LGIuaW1hZ2UuaGVpZ2h0PTQ4LGIuaW1hZ2UuWT1wLHA9Yi5pbWFnZS5ZK2IuaW1hZ2UuaGVpZ2h0KTtsZXQgVD1iLndyYXAmJiRzLndyYXAsXz0kcy53aWR0aC0kcy5jNFNoYXBlUGFkZGluZyoyLEE9YlIoJHMsYi50eXBlQzRTaGFwZS50ZXh0KTtpZihBLmZvbnRTaXplPUEuZm9udFNpemUrMixBLmZvbnRXZWlnaHQ9ImJvbGQiLCQzKCJsYWJlbCIsYixULEEsXyksYi5sYWJlbC5ZPXArOCxwPWIubGFiZWwuWStiLmxhYmVsLmhlaWdodCxiLnR5cGUmJmIudHlwZS50ZXh0IT09IiIpe2IudHlwZS50ZXh0PSJbIitiLnR5cGUudGV4dCsiXSI7bGV0IEY9YlIoJHMsYi50eXBlQzRTaGFwZS50ZXh0KTskMygidHlwZSIsYixULEYsXyksYi50eXBlLlk9cCs1LHA9Yi50eXBlLlkrYi50eXBlLmhlaWdodH1lbHNlIGlmKGIudGVjaG4mJmIudGVjaG4udGV4dCE9PSIiKXtiLnRlY2huLnRleHQ9IlsiK2IudGVjaG4udGV4dCsiXSI7bGV0IEY9YlIoJHMsYi50ZWNobi50ZXh0KTskMygidGVjaG4iLGIsVCxGLF8pLGIudGVjaG4uWT1wKzUscD1iLnRlY2huLlkrYi50ZWNobi5oZWlnaHR9bGV0IFA9cCxSPWIubGFiZWwud2lkdGg7aWYoYi5kZXNjciYmYi5kZXNjci50ZXh0IT09IiIpe2xldCBGPWJSKCRzLGIudHlwZUM0U2hhcGUudGV4dCk7JDMoImRlc2NyIixiLFQsRixfKSxiLmRlc2NyLlk9cCsyMCxwPWIuZGVzY3IuWStiLmRlc2NyLmhlaWdodCxSPU1hdGgubWF4KGIubGFiZWwud2lkdGgsYi5kZXNjci53aWR0aCksUD1wLWIuZGVzY3IudGV4dExpbmVzKjV9Uj1SKyRzLmM0U2hhcGVQYWRkaW5nLGIud2lkdGg9TWF0aC5tYXgoYi53aWR0aHx8JHMud2lkdGgsUiwkcy53aWR0aCksYi5oZWlnaHQ9TWF0aC5tYXgoYi5oZWlnaHR8fCRzLmhlaWdodCxQLCRzLmhlaWdodCksYi5tYXJnaW49Yi5tYXJnaW58fCRzLmM0U2hhcGVNYXJnaW4saS5pbnNlcnQoYiksSjQuZHJhd0M0U2hhcGUocyxiLCRzKX1pLmJ1bXBMYXN0TWFyZ2luKCRzLmM0U2hhcGVNYXJnaW4pfTtsZXQganY9Y2xhc3N7Y29uc3RydWN0b3Iocyx1KXt0aGlzLng9cyx0aGlzLnk9dX19LE1xZT1mdW5jdGlvbihpLHMpe2xldCB1PWkueCxkPWkueSxwPXMueCx2PXMueSxiPXUraS53aWR0aC8yLHk9ZCtpLmhlaWdodC8yLFQ9TWF0aC5hYnModS1wKSxfPU1hdGguYWJzKGQtdiksQT1fL1QsUD1pLmhlaWdodC9pLndpZHRoLFI9bnVsbDtyZXR1cm4gZD09diYmdTxwP1I9bmV3IGp2KHUraS53aWR0aCx5KTpkPT12JiZ1PnA/Uj1uZXcganYodSx5KTp1PT1wJiZkPHY/Uj1uZXcganYoYixkK2kuaGVpZ2h0KTp1PT1wJiZkPnYmJihSPW5ldyBqdihiLGQpKSx1PnAmJmQ8dj9QPj1BP1I9bmV3IGp2KHUseStBKmkud2lkdGgvMik6Uj1uZXcganYoYi1UL18qaS5oZWlnaHQvMixkK2kuaGVpZ2h0KTp1PHAmJmQ8dj9QPj1BP1I9bmV3IGp2KHUraS53aWR0aCx5K0EqaS53aWR0aC8yKTpSPW5ldyBqdihiK1QvXyppLmhlaWdodC8yLGQraS5oZWlnaHQpOnU8cCYmZD52P1A+PUE/Uj1uZXcganYodStpLndpZHRoLHktQSppLndpZHRoLzIpOlI9bmV3IGp2KGIraS5oZWlnaHQvMipUL18sZCk6dT5wJiZkPnYmJihQPj1BP1I9bmV3IGp2KHUseS1pLndpZHRoLzIqQSk6Uj1uZXcganYoYi1pLmhlaWdodC8yKlQvXyxkKSksUn0sbVV0PWZ1bmN0aW9uKGkscyl7bGV0IHU9e3g6MCx5OjB9O3UueD1zLngrcy53aWR0aC8yLHUueT1zLnkrcy5oZWlnaHQvMjtsZXQgZD1NcWUoaSx1KTt1Lng9aS54K2kud2lkdGgvMix1Lnk9aS55K2kuaGVpZ2h0LzI7bGV0IHA9TXFlKHMsdSk7cmV0dXJue3N0YXJ0UG9pbnQ6ZCxlbmRQb2ludDpwfX07Y29uc3QgdlV0PWZ1bmN0aW9uKGkscyx1LGQpe2xldCBwPTA7Zm9yKGxldCB2IG9mIHMpe3A9cCsxO2xldCBiPXYud3JhcCYmJHMud3JhcCx5PWJVdCgkcyk7ZC5kYi5nZXRDNFR5cGUoKT09PSJDNER5bmFtaWMiJiYodi5sYWJlbC50ZXh0PXArIjogIit2LmxhYmVsLnRleHQpO2xldCBfPUg0KHYubGFiZWwudGV4dCx5KTskMygibGFiZWwiLHYsYix5LF8pLHYudGVjaG4mJnYudGVjaG4udGV4dCE9PSIiJiYoXz1INCh2LnRlY2huLnRleHQseSksJDMoInRlY2huIix2LGIseSxfKSksdi5kZXNjciYmdi5kZXNjci50ZXh0IT09IiImJihfPUg0KHYuZGVzY3IudGV4dCx5KSwkMygiZGVzY3IiLHYsYix5LF8pKTtsZXQgQT11KHYuZnJvbSksUD11KHYudG8pLFI9bVV0KEEsUCk7di5zdGFydFBvaW50PVIuc3RhcnRQb2ludCx2LmVuZFBvaW50PVIuZW5kUG9pbnR9SjQuZHJhd1JlbHMoaSxzLCRzKX07ZnVuY3Rpb24gRHFlKGkscyx1LGQscCl7bGV0IHY9bmV3IF9xZShwKTt2LmRhdGEud2lkdGhMaW1pdD11LmRhdGEud2lkdGhMaW1pdC9NYXRoLm1pbihIYmUsZC5sZW5ndGgpO2ZvcihsZXRbYix5XW9mIGQuZW50cmllcygpKXtsZXQgVD0wO3kuaW1hZ2U9e3dpZHRoOjAsaGVpZ2h0OjAsWTowfSx5LnNwcml0ZSYmKHkuaW1hZ2Uud2lkdGg9NDgseS5pbWFnZS5oZWlnaHQ9NDgseS5pbWFnZS5ZPVQsVD15LmltYWdlLlkreS5pbWFnZS5oZWlnaHQpO2xldCBfPXkud3JhcCYmJHMud3JhcCxBPURRKCRzKTtpZihBLmZvbnRTaXplPUEuZm9udFNpemUrMixBLmZvbnRXZWlnaHQ9ImJvbGQiLCQzKCJsYWJlbCIseSxfLEEsdi5kYXRhLndpZHRoTGltaXQpLHkubGFiZWwuWT1UKzgsVD15LmxhYmVsLlkreS5sYWJlbC5oZWlnaHQseS50eXBlJiZ5LnR5cGUudGV4dCE9PSIiKXt5LnR5cGUudGV4dD0iWyIreS50eXBlLnRleHQrIl0iO2xldCBqPURRKCRzKTskMygidHlwZSIseSxfLGosdi5kYXRhLndpZHRoTGltaXQpLHkudHlwZS5ZPVQrNSxUPXkudHlwZS5ZK3kudHlwZS5oZWlnaHR9aWYoeS5kZXNjciYmeS5kZXNjci50ZXh0IT09IiIpe2xldCBqPURRKCRzKTtqLmZvbnRTaXplPWouZm9udFNpemUtMiwkMygiZGVzY3IiLHksXyxqLHYuZGF0YS53aWR0aExpbWl0KSx5LmRlc2NyLlk9VCsyMCxUPXkuZGVzY3IuWSt5LmRlc2NyLmhlaWdodH1pZihiPT0wfHxiJUhiZT09PTApe2xldCBqPXUuZGF0YS5zdGFydHgrJHMuZGlhZ3JhbU1hcmdpblgsSz11LmRhdGEuc3RvcHkrJHMuZGlhZ3JhbU1hcmdpblkrVDt2LnNldERhdGEoaixqLEssSyl9ZWxzZXtsZXQgaj12LmRhdGEuc3RvcHghPT12LmRhdGEuc3RhcnR4P3YuZGF0YS5zdG9weCskcy5kaWFncmFtTWFyZ2luWDp2LmRhdGEuc3RhcnR4LEs9di5kYXRhLnN0YXJ0eTt2LnNldERhdGEoaixqLEssSyl9di5uYW1lPXkuYWxpYXM7bGV0IFA9cC5kYi5nZXRDNFNoYXBlQXJyYXkoeS5hbGlhcyksUj1wLmRiLmdldEM0U2hhcGVLZXlzKHkuYWxpYXMpO1IubGVuZ3RoPjAmJkxxZSh2LGksUCxSKSxzPXkuYWxpYXM7bGV0IEY9cC5kYi5nZXRCb3VuZGFyeXMocyk7Ri5sZW5ndGg+MCYmRHFlKGkscyx2LEYscCkseS5hbGlhcyE9PSJnbG9iYWwiJiZBcWUoaSx5LHYpLHUuZGF0YS5zdG9weT1NYXRoLm1heCh2LmRhdGEuc3RvcHkrJHMuYzRTaGFwZU1hcmdpbix1LmRhdGEuc3RvcHkpLHUuZGF0YS5zdG9weD1NYXRoLm1heCh2LmRhdGEuc3RvcHgrJHMuYzRTaGFwZU1hcmdpbix1LmRhdGEuc3RvcHgpLExRPU1hdGgubWF4KExRLHUuZGF0YS5zdG9weCksTVE9TWF0aC5tYXgoTVEsdS5kYXRhLnN0b3B5KX19Y29uc3QgSXFlPXtkcmF3UGVyc29uT3JTeXN0ZW1BcnJheTpMcWUsZHJhd0JvdW5kYXJ5OkFxZSxzZXRDb25mOlZiZSxkcmF3OmZ1bmN0aW9uKGkscyx1LGQpeyRzPXF0KCkuYzQ7Y29uc3QgcD1xdCgpLnNlY3VyaXR5TGV2ZWw7bGV0IHY7cD09PSJzYW5kYm94IiYmKHY9SXIoIiNpIitzKSk7Y29uc3QgYj1JcihwPT09InNhbmRib3giP3Yubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpO2xldCB5PWQuZGI7ZC5kYi5zZXRXcmFwKCRzLndyYXApLFNxZT15LmdldEM0U2hhcGVJblJvdygpLEhiZT15LmdldEM0Qm91bmRhcnlJblJvdygpLFhlLmRlYnVnKGBDOiR7SlNPTi5zdHJpbmdpZnkoJHMsbnVsbCwyKX1gKTtjb25zdCBUPXA9PT0ic2FuZGJveCI/Yi5zZWxlY3QoYFtpZD0iJHtzfSJdYCk6SXIoYFtpZD0iJHtzfSJdYCk7SjQuaW5zZXJ0Q29tcHV0ZXJJY29uKFQpLEo0Lmluc2VydERhdGFiYXNlSWNvbihUKSxKNC5pbnNlcnRDbG9ja0ljb24oVCk7bGV0IF89bmV3IF9xZShkKTtfLnNldERhdGEoJHMuZGlhZ3JhbU1hcmdpblgsJHMuZGlhZ3JhbU1hcmdpblgsJHMuZGlhZ3JhbU1hcmdpblksJHMuZGlhZ3JhbU1hcmdpblkpLF8uZGF0YS53aWR0aExpbWl0PXNjcmVlbi5hdmFpbFdpZHRoLExRPSRzLmRpYWdyYW1NYXJnaW5YLE1RPSRzLmRpYWdyYW1NYXJnaW5ZO2NvbnN0IEE9ZC5kYi5nZXRUaXRsZSgpO2xldCBQPWQuZGIuZ2V0Qm91bmRhcnlzKCIiKTtEcWUoVCwiIixfLFAsZCksSjQuaW5zZXJ0QXJyb3dIZWFkKFQpLEo0Lmluc2VydEFycm93RW5kKFQpLEo0Lmluc2VydEFycm93Q3Jvc3NIZWFkKFQpLEo0Lmluc2VydEFycm93RmlsbGVkSGVhZChUKSx2VXQoVCxkLmRiLmdldFJlbHMoKSxkLmRiLmdldEM0U2hhcGUsZCksXy5kYXRhLnN0b3B4PUxRLF8uZGF0YS5zdG9weT1NUTtjb25zdCBSPV8uZGF0YTtsZXQgaj1SLnN0b3B5LVIuc3RhcnR5KzIqJHMuZGlhZ3JhbU1hcmdpblk7Y29uc3QgZWU9Ui5zdG9weC1SLnN0YXJ0eCsyKiRzLmRpYWdyYW1NYXJnaW5YO0EmJlQuYXBwZW5kKCJ0ZXh0IikudGV4dChBKS5hdHRyKCJ4IiwoUi5zdG9weC1SLnN0YXJ0eCkvMi00KiRzLmRpYWdyYW1NYXJnaW5YKS5hdHRyKCJ5IixSLnN0YXJ0eSskcy5kaWFncmFtTWFyZ2luWSksTmcoVCxqLGVlLCRzLnVzZU1heFdpZHRoKTtjb25zdCBpZT1BPzYwOjA7VC5hdHRyKCJ2aWV3Qm94IixSLnN0YXJ0eC0kcy5kaWFncmFtTWFyZ2luWCsiIC0iKygkcy5kaWFncmFtTWFyZ2luWStpZSkrIiAiK2VlKyIgIisoaitpZSkpLFhlLmRlYnVnKCJtb2RlbHM6IixSKX19LHdVdD1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOkRWdCxkYjokYmUscmVuZGVyZXI6SXFlLHN0eWxlczppPT5gLnBlcnNvbiB7CiAgICBzdHJva2U6ICR7aS5wZXJzb25Cb3JkZXJ9OwogICAgZmlsbDogJHtpLnBlcnNvbkJrZ307CiAgfQpgLGluaXQ6KHtjNDppLHdyYXA6c30pPT57SXFlLnNldENvbmYoaSksJGJlLnNldFdyYXAocyl9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgVWJlPWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oJDAsV2ksQnMsUWEpe2ZvcihCcz1Cc3x8e30sUWE9JDAubGVuZ3RoO1FhLS07QnNbJDBbUWFdXT1XaSk7cmV0dXJuIEJzfSxzPVsxLDRdLHU9WzEsM10sZD1bMSw1XSxwPVsxLDgsOSwxMCwxMSwyNywzNCwzNiwzOCw0Miw1OCw4MSw4Miw4Myw4NCw4NSw4Niw5OSwxMDIsMTAzLDEwNiwxMDgsMTExLDExMiwxMTMsMTE4LDExOSwxMjAsMTIxXSx2PVsyLDJdLGI9WzEsMTNdLHk9WzEsMTRdLFQ9WzEsMTVdLF89WzEsMTZdLEE9WzEsMjNdLFA9WzEsMjVdLFI9WzEsMjZdLEY9WzEsMjddLGo9WzEsNDldLEs9WzEsNDhdLGVlPVsxLDI5XSxpZT1bMSwzMF0sb2U9WzEsMzFdLHBlPVsxLDMyXSxiZT1bMSwzM10sYWU9WzEsNDRdLG5lPVsxLDQ2XSxzZT1bMSw0Ml0sZGU9WzEsNDddLFg9WzEsNDNdLGdlPVsxLDUwXSxXPVsxLDQ1XSx4ZT1bMSw1MV0sVT1bMSw1Ml0sRmU9WzEsMzRdLFBlPVsxLDM1XSxqZT1bMSwzNl0sSWU9WzEsMzddLFNlPVsxLDU3XSxDZT1bMSw4LDksMTAsMTEsMjcsMzIsMzQsMzYsMzgsNDIsNTgsODEsODIsODMsODQsODUsODYsOTksMTAyLDEwMywxMDYsMTA4LDExMSwxMTIsMTEzLDExOCwxMTksMTIwLDEyMV0sa2U9WzEsNjFdLEtlPVsxLDYwXSxGdD1bMSw2Ml0sTmU9WzgsOSwxMSw3Myw3NV0sZ249WzEsODhdLF90PVsxLDkzXSxFdD1bMSw5Ml0sR3Q9WzEsODldLGxuPVsxLDg1XSx4dD1bMSw5MV0sUHQ9WzEsODddLFFlPVsxLDk0XSxEdD1bMSw5MF0sa3Q9WzEsOTVdLE9uPVsxLDg2XSxodD1bOCw5LDEwLDExLDczLDc1XSx6cj1bOCw5LDEwLDExLDQ0LDczLDc1XSx5dD1bOCw5LDEwLDExLDI5LDQyLDQ0LDQ2LDQ4LDUwLDUyLDU0LDU2LDU4LDYxLDYzLDY1LDY2LDY4LDczLDc1LDg2LDk5LDEwMiwxMDMsMTA2LDEwOCwxMTEsMTEyLDExM10samk9WzgsOSwxMSw0Miw1OCw3Myw3NSw4Niw5OSwxMDIsMTAzLDEwNiwxMDgsMTExLDExMiwxMTNdLHhpPVs0Miw1OCw4Niw5OSwxMDIsMTAzLDEwNiwxMDgsMTExLDExMiwxMTNdLE1hPVsxLDEyMV0senM9WzEsMTIwXSxhbz1bMSwxMjhdLFRyPVsxLDE0Ml0sRm49WzEsMTQzXSxxbj1bMSwxNDRdLFVuPVsxLDE0NV0sQXQ9WzEsMTMwXSx3dD1bMSwxMzJdLG9uPVsxLDEzNl0sZm49WzEsMTM3XSxBbj1bMSwxMzhdLG9vPVsxLDEzOV0sam89WzEsMTQwXSwkbz1bMSwxNDFdLFBhPVsxLDE0Nl0sd289WzEsMTQ3XSxfcz1bMSwxMjZdLHRsPVsxLDEyN10sZGE9WzEsMTM0XSxqMD1bMSwxMjldLHBtPVsxLDEzM10sTWw9WzEsMTMxXSxYYz1bOCw5LDEwLDExLDI3LDMyLDM0LDM2LDM4LDQyLDU4LDgxLDgyLDgzLDg0LDg1LDg2LDk5LDEwMiwxMDMsMTA2LDEwOCwxMTEsMTEyLDExMywxMTgsMTE5LDEyMCwxMjFdLEJjPVsxLDE0OV0samE9WzgsOSwxMV0sT3U9WzgsOSwxMCwxMSwxNCw0Miw1OCw4NiwxMDIsMTAzLDEwNiwxMDgsMTExLDExMiwxMTNdLFNhPVsxLDE2OV0sUG89WzEsMTY1XSxGYz1bMSwxNjZdLHhhPVsxLDE3MF0sQmE9WzEsMTY3XSxnYT1bMSwxNjhdLGtoPVs3NSwxMTMsMTE2XSxsdT1bOCw5LDEwLDExLDEyLDE0LDI3LDI5LDMyLDQyLDU4LDczLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDEwMiwxMDYsMTA4LDExMSwxMTIsMTEzXSxvNT1bMTAsMTAzXSxXaD1bMzEsNDcsNDksNTEsNTMsNTUsNjAsNjIsNjQsNjUsNjcsNjksMTEzLDExNCwxMTVdLG9kPVsxLDIzNV0sR2Q9WzEsMjMzXSxjZD1bMSwyMzddLEtkPVsxLDIzMV0sJGc9WzEsMjMyXSxhcz1bMSwyMzRdLHduPVsxLDIzNl0sWnI9WzEsMjM4XSxaaT1bMSwyNTVdLG51PVs4LDksMTEsMTAzXSx2dT1bOCw5LDEwLDExLDU4LDgxLDEwMiwxMDMsMTA2LDEwNywxMDgsMTA5XSxEbD17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsZ3JhcGhDb25maWc6NCxkb2N1bWVudDo1LGxpbmU6NixzdGF0ZW1lbnQ6NyxTRU1JOjgsTkVXTElORTo5LFNQQUNFOjEwLEVPRjoxMSxHUkFQSDoxMixOT0RJUjoxMyxESVI6MTQsRmlyc3RTdG10U2VwYXJhdG9yOjE1LGVuZGluZzoxNixlbmRUb2tlbjoxNyxzcGFjZUxpc3Q6MTgsc3BhY2VMaXN0TmV3bGluZToxOSx2ZXJ0ZXhTdGF0ZW1lbnQ6MjAsc2VwYXJhdG9yOjIxLHN0eWxlU3RhdGVtZW50OjIyLGxpbmtTdHlsZVN0YXRlbWVudDoyMyxjbGFzc0RlZlN0YXRlbWVudDoyNCxjbGFzc1N0YXRlbWVudDoyNSxjbGlja1N0YXRlbWVudDoyNixzdWJncmFwaDoyNyx0ZXh0Tm9UYWdzOjI4LFNRUzoyOSx0ZXh0OjMwLFNRRTozMSxlbmQ6MzIsZGlyZWN0aW9uOjMzLGFjY190aXRsZTozNCxhY2NfdGl0bGVfdmFsdWU6MzUsYWNjX2Rlc2NyOjM2LGFjY19kZXNjcl92YWx1ZTozNyxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjM4LGxpbms6Mzksbm9kZTo0MCxzdHlsZWRWZXJ0ZXg6NDEsQU1QOjQyLHZlcnRleDo0MyxTVFlMRV9TRVBBUkFUT1I6NDQsaWRTdHJpbmc6NDUsRE9VQkxFQ0lSQ0xFU1RBUlQ6NDYsRE9VQkxFQ0lSQ0xFRU5EOjQ3LFBTOjQ4LFBFOjQ5LCIoLSI6NTAsIi0pIjo1MSxTVEFESVVNU1RBUlQ6NTIsU1RBRElVTUVORDo1MyxTVUJST1VUSU5FU1RBUlQ6NTQsU1VCUk9VVElORUVORDo1NSxWRVJURVhfV0lUSF9QUk9QU19TVEFSVDo1NiwiTk9ERV9TVFJJTkdbZmllbGRdIjo1NyxDT0xPTjo1OCwiTk9ERV9TVFJJTkdbdmFsdWVdIjo1OSxQSVBFOjYwLENZTElOREVSU1RBUlQ6NjEsQ1lMSU5ERVJFTkQ6NjIsRElBTU9ORF9TVEFSVDo2MyxESUFNT05EX1NUT1A6NjQsVEFHRU5EOjY1LFRSQVBTVEFSVDo2NixUUkFQRU5EOjY3LElOVlRSQVBTVEFSVDo2OCxJTlZUUkFQRU5EOjY5LGxpbmtTdGF0ZW1lbnQ6NzAsYXJyb3dUZXh0OjcxLFRFU1RTVFI6NzIsU1RBUlRfTElOSzo3MyxlZGdlVGV4dDo3NCxMSU5LOjc1LGVkZ2VUZXh0VG9rZW46NzYsU1RSOjc3LE1EX1NUUjo3OCx0ZXh0VG9rZW46Nzksa2V5d29yZHM6ODAsU1RZTEU6ODEsTElOS1NUWUxFOjgyLENMQVNTREVGOjgzLENMQVNTOjg0LENMSUNLOjg1LERPV046ODYsVVA6ODcsdGV4dE5vVGFnc1Rva2VuOjg4LHN0eWxlc09wdDo4OSwiaWRTdHJpbmdbdmVydGV4XSI6OTAsImlkU3RyaW5nW2NsYXNzXSI6OTEsQ0FMTEJBQ0tOQU1FOjkyLENBTExCQUNLQVJHUzo5MyxIUkVGOjk0LExJTktfVEFSR0VUOjk1LCJTVFJbbGlua10iOjk2LCJTVFJbdG9vbHRpcF0iOjk3LGFscGhhTnVtOjk4LERFRkFVTFQ6OTksbnVtTGlzdDoxMDAsSU5URVJQT0xBVEU6MTAxLE5VTToxMDIsQ09NTUE6MTAzLHN0eWxlOjEwNCxzdHlsZUNvbXBvbmVudDoxMDUsTk9ERV9TVFJJTkc6MTA2LFVOSVQ6MTA3LEJSS1Q6MTA4LFBDVDoxMDksaWRTdHJpbmdUb2tlbjoxMTAsTUlOVVM6MTExLE1VTFQ6MTEyLFVOSUNPREVfVEVYVDoxMTMsVEVYVDoxMTQsVEFHU1RBUlQ6MTE1LEVER0VfVEVYVDoxMTYsYWxwaGFOdW1Ub2tlbjoxMTcsZGlyZWN0aW9uX3RiOjExOCxkaXJlY3Rpb25fYnQ6MTE5LGRpcmVjdGlvbl9ybDoxMjAsZGlyZWN0aW9uX2xyOjEyMSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsODoiU0VNSSIsOToiTkVXTElORSIsMTA6IlNQQUNFIiwxMToiRU9GIiwxMjoiR1JBUEgiLDEzOiJOT0RJUiIsMTQ6IkRJUiIsMjc6InN1YmdyYXBoIiwyOToiU1FTIiwzMToiU1FFIiwzMjoiZW5kIiwzNDoiYWNjX3RpdGxlIiwzNToiYWNjX3RpdGxlX3ZhbHVlIiwzNjoiYWNjX2Rlc2NyIiwzNzoiYWNjX2Rlc2NyX3ZhbHVlIiwzODoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsNDI6IkFNUCIsNDQ6IlNUWUxFX1NFUEFSQVRPUiIsNDY6IkRPVUJMRUNJUkNMRVNUQVJUIiw0NzoiRE9VQkxFQ0lSQ0xFRU5EIiw0ODoiUFMiLDQ5OiJQRSIsNTA6IigtIiw1MToiLSkiLDUyOiJTVEFESVVNU1RBUlQiLDUzOiJTVEFESVVNRU5EIiw1NDoiU1VCUk9VVElORVNUQVJUIiw1NToiU1VCUk9VVElORUVORCIsNTY6IlZFUlRFWF9XSVRIX1BST1BTX1NUQVJUIiw1NzoiTk9ERV9TVFJJTkdbZmllbGRdIiw1ODoiQ09MT04iLDU5OiJOT0RFX1NUUklOR1t2YWx1ZV0iLDYwOiJQSVBFIiw2MToiQ1lMSU5ERVJTVEFSVCIsNjI6IkNZTElOREVSRU5EIiw2MzoiRElBTU9ORF9TVEFSVCIsNjQ6IkRJQU1PTkRfU1RPUCIsNjU6IlRBR0VORCIsNjY6IlRSQVBTVEFSVCIsNjc6IlRSQVBFTkQiLDY4OiJJTlZUUkFQU1RBUlQiLDY5OiJJTlZUUkFQRU5EIiw3MjoiVEVTVFNUUiIsNzM6IlNUQVJUX0xJTksiLDc1OiJMSU5LIiw3NzoiU1RSIiw3ODoiTURfU1RSIiw4MToiU1RZTEUiLDgyOiJMSU5LU1RZTEUiLDgzOiJDTEFTU0RFRiIsODQ6IkNMQVNTIiw4NToiQ0xJQ0siLDg2OiJET1dOIiw4NzoiVVAiLDkwOiJpZFN0cmluZ1t2ZXJ0ZXhdIiw5MToiaWRTdHJpbmdbY2xhc3NdIiw5MjoiQ0FMTEJBQ0tOQU1FIiw5MzoiQ0FMTEJBQ0tBUkdTIiw5NDoiSFJFRiIsOTU6IkxJTktfVEFSR0VUIiw5NjoiU1RSW2xpbmtdIiw5NzoiU1RSW3Rvb2x0aXBdIiw5OToiREVGQVVMVCIsMTAxOiJJTlRFUlBPTEFURSIsMTAyOiJOVU0iLDEwMzoiQ09NTUEiLDEwNjoiTk9ERV9TVFJJTkciLDEwNzoiVU5JVCIsMTA4OiJCUktUIiwxMDk6IlBDVCIsMTExOiJNSU5VUyIsMTEyOiJNVUxUIiwxMTM6IlVOSUNPREVfVEVYVCIsMTE0OiJURVhUIiwxMTU6IlRBR1NUQVJUIiwxMTY6IkVER0VfVEVYVCIsMTE4OiJkaXJlY3Rpb25fdGIiLDExOToiZGlyZWN0aW9uX2J0IiwxMjA6ImRpcmVjdGlvbl9ybCIsMTIxOiJkaXJlY3Rpb25fbHIifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzUsMF0sWzUsMl0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsM10sWzE2LDJdLFsxNiwxXSxbMTcsMV0sWzE3LDFdLFsxNywxXSxbMTUsMV0sWzE1LDFdLFsxNSwyXSxbMTksMl0sWzE5LDJdLFsxOSwxXSxbMTksMV0sWzE4LDJdLFsxOCwxXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNyw5XSxbNyw2XSxbNyw0XSxbNywxXSxbNywyXSxbNywyXSxbNywxXSxbMjEsMV0sWzIxLDFdLFsyMSwxXSxbMjAsM10sWzIwLDRdLFsyMCwyXSxbMjAsMV0sWzQwLDFdLFs0MCw1XSxbNDEsMV0sWzQxLDNdLFs0Myw0XSxbNDMsNF0sWzQzLDZdLFs0Myw0XSxbNDMsNF0sWzQzLDRdLFs0Myw4XSxbNDMsNF0sWzQzLDRdLFs0Myw0XSxbNDMsNl0sWzQzLDRdLFs0Myw0XSxbNDMsNF0sWzQzLDRdLFs0Myw0XSxbNDMsMV0sWzM5LDJdLFszOSwzXSxbMzksM10sWzM5LDFdLFszOSwzXSxbNzQsMV0sWzc0LDJdLFs3NCwxXSxbNzQsMV0sWzcwLDFdLFs3MSwzXSxbMzAsMV0sWzMwLDJdLFszMCwxXSxbMzAsMV0sWzgwLDFdLFs4MCwxXSxbODAsMV0sWzgwLDFdLFs4MCwxXSxbODAsMV0sWzgwLDFdLFs4MCwxXSxbODAsMV0sWzgwLDFdLFs4MCwxXSxbMjgsMV0sWzI4LDJdLFsyOCwxXSxbMjgsMV0sWzI0LDVdLFsyNSw1XSxbMjYsMl0sWzI2LDRdLFsyNiwzXSxbMjYsNV0sWzI2LDNdLFsyNiw1XSxbMjYsNV0sWzI2LDddLFsyNiwyXSxbMjYsNF0sWzI2LDJdLFsyNiw0XSxbMjYsNF0sWzI2LDZdLFsyMiw1XSxbMjMsNV0sWzIzLDVdLFsyMyw5XSxbMjMsOV0sWzIzLDddLFsyMyw3XSxbMTAwLDFdLFsxMDAsM10sWzg5LDFdLFs4OSwzXSxbMTA0LDFdLFsxMDQsMl0sWzEwNSwxXSxbMTA1LDFdLFsxMDUsMV0sWzEwNSwxXSxbMTA1LDFdLFsxMDUsMV0sWzEwNSwxXSxbMTA1LDFdLFsxMTAsMV0sWzExMCwxXSxbMTEwLDFdLFsxMTAsMV0sWzExMCwxXSxbMTEwLDFdLFsxMTAsMV0sWzExMCwxXSxbMTEwLDFdLFsxMTAsMV0sWzExMCwxXSxbNzksMV0sWzc5LDFdLFs3OSwxXSxbNzksMV0sWzg4LDFdLFs4OCwxXSxbODgsMV0sWzg4LDFdLFs4OCwxXSxbODgsMV0sWzg4LDFdLFs4OCwxXSxbODgsMV0sWzg4LDFdLFs4OCwxXSxbNzYsMV0sWzc2LDFdLFsxMTcsMV0sWzExNywxXSxbMTE3LDFdLFsxMTcsMV0sWzExNywxXSxbMTE3LDFdLFsxMTcsMV0sWzExNywxXSxbMTE3LDFdLFsxMTcsMV0sWzExNywxXSxbNDUsMV0sWzQ1LDJdLFs5OCwxXSxbOTgsMl0sWzMzLDFdLFszMywxXSxbMzMsMV0sWzMzLDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKFdpLEJzLFFhLEJpLE51LE90LFczKXt2YXIgS3Q9T3QubGVuZ3RoLTE7c3dpdGNoKE51KXtjYXNlIDI6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMzooIUFycmF5LmlzQXJyYXkoT3RbS3RdKXx8T3RbS3RdLmxlbmd0aD4wKSYmT3RbS3QtMV0ucHVzaChPdFtLdF0pLHRoaXMuJD1PdFtLdC0xXTticmVhaztjYXNlIDQ6Y2FzZSAxNzY6dGhpcy4kPU90W0t0XTticmVhaztjYXNlIDExOkJpLnNldERpcmVjdGlvbigiVEIiKSx0aGlzLiQ9IlRCIjticmVhaztjYXNlIDEyOkJpLnNldERpcmVjdGlvbihPdFtLdC0xXSksdGhpcy4kPU90W0t0LTFdO2JyZWFrO2Nhc2UgMjc6dGhpcy4kPU90W0t0LTFdLm5vZGVzO2JyZWFrO2Nhc2UgMjg6Y2FzZSAyOTpjYXNlIDMwOmNhc2UgMzE6Y2FzZSAzMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9QmkuYWRkU3ViR3JhcGgoT3RbS3QtNl0sT3RbS3QtMV0sT3RbS3QtNF0pO2JyZWFrO2Nhc2UgMzQ6dGhpcy4kPUJpLmFkZFN1YkdyYXBoKE90W0t0LTNdLE90W0t0LTFdLE90W0t0LTNdKTticmVhaztjYXNlIDM1OnRoaXMuJD1CaS5hZGRTdWJHcmFwaCh2b2lkIDAsT3RbS3QtMV0sdm9pZCAwKTticmVhaztjYXNlIDM3OnRoaXMuJD1PdFtLdF0udHJpbSgpLEJpLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAzODpjYXNlIDM5OnRoaXMuJD1PdFtLdF0udHJpbSgpLEJpLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSA0MzpCaS5hZGRMaW5rKE90W0t0LTJdLnN0bXQsT3RbS3RdLE90W0t0LTFdKSx0aGlzLiQ9e3N0bXQ6T3RbS3RdLG5vZGVzOk90W0t0XS5jb25jYXQoT3RbS3QtMl0ubm9kZXMpfTticmVhaztjYXNlIDQ0OkJpLmFkZExpbmsoT3RbS3QtM10uc3RtdCxPdFtLdC0xXSxPdFtLdC0yXSksdGhpcy4kPXtzdG10Ok90W0t0LTFdLG5vZGVzOk90W0t0LTFdLmNvbmNhdChPdFtLdC0zXS5ub2Rlcyl9O2JyZWFrO2Nhc2UgNDU6dGhpcy4kPXtzdG10Ok90W0t0LTFdLG5vZGVzOk90W0t0LTFdfTticmVhaztjYXNlIDQ2OnRoaXMuJD17c3RtdDpPdFtLdF0sbm9kZXM6T3RbS3RdfTticmVhaztjYXNlIDQ3OnRoaXMuJD1bT3RbS3RdXTticmVhaztjYXNlIDQ4OnRoaXMuJD1PdFtLdC00XS5jb25jYXQoT3RbS3RdKTticmVhaztjYXNlIDQ5OnRoaXMuJD1PdFtLdF07YnJlYWs7Y2FzZSA1MDp0aGlzLiQ9T3RbS3QtMl0sQmkuc2V0Q2xhc3MoT3RbS3QtMl0sT3RbS3RdKTticmVhaztjYXNlIDUxOnRoaXMuJD1PdFtLdC0zXSxCaS5hZGRWZXJ0ZXgoT3RbS3QtM10sT3RbS3QtMV0sInNxdWFyZSIpO2JyZWFrO2Nhc2UgNTI6dGhpcy4kPU90W0t0LTNdLEJpLmFkZFZlcnRleChPdFtLdC0zXSxPdFtLdC0xXSwiZG91YmxlY2lyY2xlIik7YnJlYWs7Y2FzZSA1Mzp0aGlzLiQ9T3RbS3QtNV0sQmkuYWRkVmVydGV4KE90W0t0LTVdLE90W0t0LTJdLCJjaXJjbGUiKTticmVhaztjYXNlIDU0OnRoaXMuJD1PdFtLdC0zXSxCaS5hZGRWZXJ0ZXgoT3RbS3QtM10sT3RbS3QtMV0sImVsbGlwc2UiKTticmVhaztjYXNlIDU1OnRoaXMuJD1PdFtLdC0zXSxCaS5hZGRWZXJ0ZXgoT3RbS3QtM10sT3RbS3QtMV0sInN0YWRpdW0iKTticmVhaztjYXNlIDU2OnRoaXMuJD1PdFtLdC0zXSxCaS5hZGRWZXJ0ZXgoT3RbS3QtM10sT3RbS3QtMV0sInN1YnJvdXRpbmUiKTticmVhaztjYXNlIDU3OnRoaXMuJD1PdFtLdC03XSxCaS5hZGRWZXJ0ZXgoT3RbS3QtN10sT3RbS3QtMV0sInJlY3QiLHZvaWQgMCx2b2lkIDAsdm9pZCAwLE9iamVjdC5mcm9tRW50cmllcyhbW090W0t0LTVdLE90W0t0LTNdXV0pKTticmVhaztjYXNlIDU4OnRoaXMuJD1PdFtLdC0zXSxCaS5hZGRWZXJ0ZXgoT3RbS3QtM10sT3RbS3QtMV0sImN5bGluZGVyIik7YnJlYWs7Y2FzZSA1OTp0aGlzLiQ9T3RbS3QtM10sQmkuYWRkVmVydGV4KE90W0t0LTNdLE90W0t0LTFdLCJyb3VuZCIpO2JyZWFrO2Nhc2UgNjA6dGhpcy4kPU90W0t0LTNdLEJpLmFkZFZlcnRleChPdFtLdC0zXSxPdFtLdC0xXSwiZGlhbW9uZCIpO2JyZWFrO2Nhc2UgNjE6dGhpcy4kPU90W0t0LTVdLEJpLmFkZFZlcnRleChPdFtLdC01XSxPdFtLdC0yXSwiaGV4YWdvbiIpO2JyZWFrO2Nhc2UgNjI6dGhpcy4kPU90W0t0LTNdLEJpLmFkZFZlcnRleChPdFtLdC0zXSxPdFtLdC0xXSwib2RkIik7YnJlYWs7Y2FzZSA2Mzp0aGlzLiQ9T3RbS3QtM10sQmkuYWRkVmVydGV4KE90W0t0LTNdLE90W0t0LTFdLCJ0cmFwZXpvaWQiKTticmVhaztjYXNlIDY0OnRoaXMuJD1PdFtLdC0zXSxCaS5hZGRWZXJ0ZXgoT3RbS3QtM10sT3RbS3QtMV0sImludl90cmFwZXpvaWQiKTticmVhaztjYXNlIDY1OnRoaXMuJD1PdFtLdC0zXSxCaS5hZGRWZXJ0ZXgoT3RbS3QtM10sT3RbS3QtMV0sImxlYW5fcmlnaHQiKTticmVhaztjYXNlIDY2OnRoaXMuJD1PdFtLdC0zXSxCaS5hZGRWZXJ0ZXgoT3RbS3QtM10sT3RbS3QtMV0sImxlYW5fbGVmdCIpO2JyZWFrO2Nhc2UgNjc6dGhpcy4kPU90W0t0XSxCaS5hZGRWZXJ0ZXgoT3RbS3RdKTticmVhaztjYXNlIDY4Ok90W0t0LTFdLnRleHQ9T3RbS3RdLHRoaXMuJD1PdFtLdC0xXTticmVhaztjYXNlIDY5OmNhc2UgNzA6T3RbS3QtMl0udGV4dD1PdFtLdC0xXSx0aGlzLiQ9T3RbS3QtMl07YnJlYWs7Y2FzZSA3MTp0aGlzLiQ9T3RbS3RdO2JyZWFrO2Nhc2UgNzI6dmFyIHowPUJpLmRlc3RydWN0TGluayhPdFtLdF0sT3RbS3QtMl0pO3RoaXMuJD17dHlwZTp6MC50eXBlLHN0cm9rZTp6MC5zdHJva2UsbGVuZ3RoOnowLmxlbmd0aCx0ZXh0Ok90W0t0LTFdfTticmVhaztjYXNlIDczOnRoaXMuJD17dGV4dDpPdFtLdF0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgNzQ6dGhpcy4kPXt0ZXh0Ok90W0t0LTFdLnRleHQrIiIrT3RbS3RdLHR5cGU6T3RbS3QtMV0udHlwZX07YnJlYWs7Y2FzZSA3NTp0aGlzLiQ9e3RleHQ6T3RbS3RdLHR5cGU6InN0cmluZyJ9O2JyZWFrO2Nhc2UgNzY6dGhpcy4kPXt0ZXh0Ok90W0t0XSx0eXBlOiJtYXJrZG93biJ9O2JyZWFrO2Nhc2UgNzc6dmFyIHowPUJpLmRlc3RydWN0TGluayhPdFtLdF0pO3RoaXMuJD17dHlwZTp6MC50eXBlLHN0cm9rZTp6MC5zdHJva2UsbGVuZ3RoOnowLmxlbmd0aH07YnJlYWs7Y2FzZSA3ODp0aGlzLiQ9T3RbS3QtMV07YnJlYWs7Y2FzZSA3OTp0aGlzLiQ9e3RleHQ6T3RbS3RdLHR5cGU6InRleHQifTticmVhaztjYXNlIDgwOnRoaXMuJD17dGV4dDpPdFtLdC0xXS50ZXh0KyIiK090W0t0XSx0eXBlOk90W0t0LTFdLnR5cGV9O2JyZWFrO2Nhc2UgODE6dGhpcy4kPXt0ZXh0Ok90W0t0XSx0eXBlOiJzdHJpbmcifTticmVhaztjYXNlIDgyOmNhc2UgOTc6dGhpcy4kPXt0ZXh0Ok90W0t0XSx0eXBlOiJtYXJrZG93biJ9O2JyZWFrO2Nhc2UgOTQ6dGhpcy4kPXt0ZXh0Ok90W0t0XSx0eXBlOiJ0ZXh0In07YnJlYWs7Y2FzZSA5NTp0aGlzLiQ9e3RleHQ6T3RbS3QtMV0udGV4dCsiIitPdFtLdF0sdHlwZTpPdFtLdC0xXS50eXBlfTticmVhaztjYXNlIDk2OnRoaXMuJD17dGV4dDpPdFtLdF0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgOTg6dGhpcy4kPU90W0t0LTRdLEJpLmFkZENsYXNzKE90W0t0LTJdLE90W0t0XSk7YnJlYWs7Y2FzZSA5OTp0aGlzLiQ9T3RbS3QtNF0sQmkuc2V0Q2xhc3MoT3RbS3QtMl0sT3RbS3RdKTticmVhaztjYXNlIDEwMDpjYXNlIDEwODp0aGlzLiQ9T3RbS3QtMV0sQmkuc2V0Q2xpY2tFdmVudChPdFtLdC0xXSxPdFtLdF0pO2JyZWFrO2Nhc2UgMTAxOmNhc2UgMTA5OnRoaXMuJD1PdFtLdC0zXSxCaS5zZXRDbGlja0V2ZW50KE90W0t0LTNdLE90W0t0LTJdKSxCaS5zZXRUb29sdGlwKE90W0t0LTNdLE90W0t0XSk7YnJlYWs7Y2FzZSAxMDI6dGhpcy4kPU90W0t0LTJdLEJpLnNldENsaWNrRXZlbnQoT3RbS3QtMl0sT3RbS3QtMV0sT3RbS3RdKTticmVhaztjYXNlIDEwMzp0aGlzLiQ9T3RbS3QtNF0sQmkuc2V0Q2xpY2tFdmVudChPdFtLdC00XSxPdFtLdC0zXSxPdFtLdC0yXSksQmkuc2V0VG9vbHRpcChPdFtLdC00XSxPdFtLdF0pO2JyZWFrO2Nhc2UgMTA0OnRoaXMuJD1PdFtLdC0yXSxCaS5zZXRMaW5rKE90W0t0LTJdLE90W0t0XSk7YnJlYWs7Y2FzZSAxMDU6dGhpcy4kPU90W0t0LTRdLEJpLnNldExpbmsoT3RbS3QtNF0sT3RbS3QtMl0pLEJpLnNldFRvb2x0aXAoT3RbS3QtNF0sT3RbS3RdKTticmVhaztjYXNlIDEwNjp0aGlzLiQ9T3RbS3QtNF0sQmkuc2V0TGluayhPdFtLdC00XSxPdFtLdC0yXSxPdFtLdF0pO2JyZWFrO2Nhc2UgMTA3OnRoaXMuJD1PdFtLdC02XSxCaS5zZXRMaW5rKE90W0t0LTZdLE90W0t0LTRdLE90W0t0XSksQmkuc2V0VG9vbHRpcChPdFtLdC02XSxPdFtLdC0yXSk7YnJlYWs7Y2FzZSAxMTA6dGhpcy4kPU90W0t0LTFdLEJpLnNldExpbmsoT3RbS3QtMV0sT3RbS3RdKTticmVhaztjYXNlIDExMTp0aGlzLiQ9T3RbS3QtM10sQmkuc2V0TGluayhPdFtLdC0zXSxPdFtLdC0yXSksQmkuc2V0VG9vbHRpcChPdFtLdC0zXSxPdFtLdF0pO2JyZWFrO2Nhc2UgMTEyOnRoaXMuJD1PdFtLdC0zXSxCaS5zZXRMaW5rKE90W0t0LTNdLE90W0t0LTJdLE90W0t0XSk7YnJlYWs7Y2FzZSAxMTM6dGhpcy4kPU90W0t0LTVdLEJpLnNldExpbmsoT3RbS3QtNV0sT3RbS3QtNF0sT3RbS3RdKSxCaS5zZXRUb29sdGlwKE90W0t0LTVdLE90W0t0LTJdKTticmVhaztjYXNlIDExNDp0aGlzLiQ9T3RbS3QtNF0sQmkuYWRkVmVydGV4KE90W0t0LTJdLHZvaWQgMCx2b2lkIDAsT3RbS3RdKTticmVhaztjYXNlIDExNTp0aGlzLiQ9T3RbS3QtNF0sQmkudXBkYXRlTGluayhbT3RbS3QtMl1dLE90W0t0XSk7YnJlYWs7Y2FzZSAxMTY6dGhpcy4kPU90W0t0LTRdLEJpLnVwZGF0ZUxpbmsoT3RbS3QtMl0sT3RbS3RdKTticmVhaztjYXNlIDExNzp0aGlzLiQ9T3RbS3QtOF0sQmkudXBkYXRlTGlua0ludGVycG9sYXRlKFtPdFtLdC02XV0sT3RbS3QtMl0pLEJpLnVwZGF0ZUxpbmsoW090W0t0LTZdXSxPdFtLdF0pO2JyZWFrO2Nhc2UgMTE4OnRoaXMuJD1PdFtLdC04XSxCaS51cGRhdGVMaW5rSW50ZXJwb2xhdGUoT3RbS3QtNl0sT3RbS3QtMl0pLEJpLnVwZGF0ZUxpbmsoT3RbS3QtNl0sT3RbS3RdKTticmVhaztjYXNlIDExOTp0aGlzLiQ9T3RbS3QtNl0sQmkudXBkYXRlTGlua0ludGVycG9sYXRlKFtPdFtLdC00XV0sT3RbS3RdKTticmVhaztjYXNlIDEyMDp0aGlzLiQ9T3RbS3QtNl0sQmkudXBkYXRlTGlua0ludGVycG9sYXRlKE90W0t0LTRdLE90W0t0XSk7YnJlYWs7Y2FzZSAxMjE6Y2FzZSAxMjM6dGhpcy4kPVtPdFtLdF1dO2JyZWFrO2Nhc2UgMTIyOmNhc2UgMTI0Ok90W0t0LTJdLnB1c2goT3RbS3RdKSx0aGlzLiQ9T3RbS3QtMl07YnJlYWs7Y2FzZSAxMjY6dGhpcy4kPU90W0t0LTFdK090W0t0XTticmVhaztjYXNlIDE3NDp0aGlzLiQ9T3RbS3RdO2JyZWFrO2Nhc2UgMTc1OnRoaXMuJD1PdFtLdC0xXSsiIitPdFtLdF07YnJlYWs7Y2FzZSAxNzc6dGhpcy4kPU90W0t0LTFdKyIiK090W0t0XTticmVhaztjYXNlIDE3ODp0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlRCIn07YnJlYWs7Y2FzZSAxNzk6dGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJCVCJ9O2JyZWFrO2Nhc2UgMTgwOnRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiUkwifTticmVhaztjYXNlIDE4MTp0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IkxSIn07YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsOTpzLDEwOnUsMTI6ZH0sezE6WzNdfSxpKHAsdix7NTo2fSksezQ6Nyw5OnMsMTA6dSwxMjpkfSx7NDo4LDk6cywxMDp1LDEyOmR9LHsxMzpbMSw5XSwxNDpbMSwxMF19LHsxOlsyLDFdLDY6MTEsNzoxMiw4OmIsOTp5LDEwOlQsMTE6XywyMDoxNywyMjoxOCwyMzoxOSwyNDoyMCwyNToyMSwyNjoyMiwyNzpBLDMzOjI0LDM0OlAsMzY6UiwzODpGLDQwOjI4LDQxOjM4LDQyOmosNDM6MzksNDU6NDAsNTg6Syw4MTplZSw4MjppZSw4MzpvZSw4NDpwZSw4NTpiZSw4NjphZSw5OTpuZSwxMDI6c2UsMTAzOmRlLDEwNjpYLDEwODpnZSwxMTA6NDEsMTExOlcsMTEyOnhlLDExMzpVLDExODpGZSwxMTk6UGUsMTIwOmplLDEyMTpJZX0saShwLFsyLDldKSxpKHAsWzIsMTBdKSxpKHAsWzIsMTFdKSx7ODpbMSw1NF0sOTpbMSw1NV0sMTA6U2UsMTU6NTMsMTg6NTZ9LGkoQ2UsWzIsM10pLGkoQ2UsWzIsNF0pLGkoQ2UsWzIsNV0pLGkoQ2UsWzIsNl0pLGkoQ2UsWzIsN10pLGkoQ2UsWzIsOF0pLHs4OmtlLDk6S2UsMTE6RnQsMjE6NTgsMzk6NTksNzA6NjMsNzM6WzEsNjRdLDc1OlsxLDY1XX0sezg6a2UsOTpLZSwxMTpGdCwyMTo2Nn0sezg6a2UsOTpLZSwxMTpGdCwyMTo2N30sezg6a2UsOTpLZSwxMTpGdCwyMTo2OH0sezg6a2UsOTpLZSwxMTpGdCwyMTo2OX0sezg6a2UsOTpLZSwxMTpGdCwyMTo3MH0sezg6a2UsOTpLZSwxMDpbMSw3MV0sMTE6RnQsMjE6NzJ9LGkoQ2UsWzIsMzZdKSx7MzU6WzEsNzNdfSx7Mzc6WzEsNzRdfSxpKENlLFsyLDM5XSksaShOZSxbMiw0Nl0sezE4Ojc1LDEwOlNlfSksezEwOlsxLDc2XX0sezEwOlsxLDc3XX0sezEwOlsxLDc4XX0sezEwOlsxLDc5XX0sezE0OmduLDQyOl90LDU4OkV0LDc3OlsxLDgzXSw4NjpHdCw5MjpbMSw4MF0sOTQ6WzEsODFdLDk4OjgyLDEwMjpsbiwxMDM6eHQsMTA2OlB0LDEwODpRZSwxMTE6RHQsMTEyOmt0LDExMzpPbiwxMTc6ODR9LGkoQ2UsWzIsMTc4XSksaShDZSxbMiwxNzldKSxpKENlLFsyLDE4MF0pLGkoQ2UsWzIsMTgxXSksaShodCxbMiw0N10pLGkoaHQsWzIsNDldLHs0NDpbMSw5Nl19KSxpKHpyLFsyLDY3XSx7MTEwOjEwOSwyOTpbMSw5N10sNDI6aiw0NjpbMSw5OF0sNDg6WzEsOTldLDUwOlsxLDEwMF0sNTI6WzEsMTAxXSw1NDpbMSwxMDJdLDU2OlsxLDEwM10sNTg6Syw2MTpbMSwxMDRdLDYzOlsxLDEwNV0sNjU6WzEsMTA2XSw2NjpbMSwxMDddLDY4OlsxLDEwOF0sODY6YWUsOTk6bmUsMTAyOnNlLDEwMzpkZSwxMDY6WCwxMDg6Z2UsMTExOlcsMTEyOnhlLDExMzpVfSksaSh5dCxbMiwxNzRdKSxpKHl0LFsyLDEzNV0pLGkoeXQsWzIsMTM2XSksaSh5dCxbMiwxMzddKSxpKHl0LFsyLDEzOF0pLGkoeXQsWzIsMTM5XSksaSh5dCxbMiwxNDBdKSxpKHl0LFsyLDE0MV0pLGkoeXQsWzIsMTQyXSksaSh5dCxbMiwxNDNdKSxpKHl0LFsyLDE0NF0pLGkoeXQsWzIsMTQ1XSksaShwLFsyLDEyXSksaShwLFsyLDE4XSksaShwLFsyLDE5XSksezk6WzEsMTEwXX0saShqaSxbMiwyNl0sezE4OjExMSwxMDpTZX0pLGkoQ2UsWzIsMjddKSx7NDA6MTEyLDQxOjM4LDQyOmosNDM6MzksNDU6NDAsNTg6Syw4NjphZSw5OTpuZSwxMDI6c2UsMTAzOmRlLDEwNjpYLDEwODpnZSwxMTA6NDEsMTExOlcsMTEyOnhlLDExMzpVfSxpKENlLFsyLDQwXSksaShDZSxbMiw0MV0pLGkoQ2UsWzIsNDJdKSxpKHhpLFsyLDcxXSx7NzE6MTEzLDYwOlsxLDExNV0sNzI6WzEsMTE0XX0pLHs3NDoxMTYsNzY6MTE3LDc3OlsxLDExOF0sNzg6WzEsMTE5XSwxMTM6TWEsMTE2OnpzfSxpKFs0Miw1OCw2MCw3Miw4Niw5OSwxMDIsMTAzLDEwNiwxMDgsMTExLDExMiwxMTNdLFsyLDc3XSksaShDZSxbMiwyOF0pLGkoQ2UsWzIsMjldKSxpKENlLFsyLDMwXSksaShDZSxbMiwzMV0pLGkoQ2UsWzIsMzJdKSx7MTA6YW8sMTI6VHIsMTQ6Rm4sMjc6cW4sMjg6MTIyLDMyOlVuLDQyOkF0LDU4Ond0LDczOm9uLDc3OlsxLDEyNF0sNzg6WzEsMTI1XSw4MDoxMzUsODE6Zm4sODI6QW4sODM6b28sODQ6am8sODU6JG8sODY6UGEsODc6d28sODg6MTIzLDEwMjpfcywxMDY6dGwsMTA4OmRhLDExMTpqMCwxMTI6cG0sMTEzOk1sfSxpKFhjLHYsezU6MTQ4fSksaShDZSxbMiwzN10pLGkoQ2UsWzIsMzhdKSxpKE5lLFsyLDQ1XSx7NDI6QmN9KSx7NDI6aiw0NToxNTAsNTg6Syw4NjphZSw5OTpuZSwxMDI6c2UsMTAzOmRlLDEwNjpYLDEwODpnZSwxMTA6NDEsMTExOlcsMTEyOnhlLDExMzpVfSx7OTk6WzEsMTUxXSwxMDA6MTUyLDEwMjpbMSwxNTNdfSx7NDI6aiw0NToxNTQsNTg6Syw4NjphZSw5OTpuZSwxMDI6c2UsMTAzOmRlLDEwNjpYLDEwODpnZSwxMTA6NDEsMTExOlcsMTEyOnhlLDExMzpVfSx7NDI6aiw0NToxNTUsNTg6Syw4NjphZSw5OTpuZSwxMDI6c2UsMTAzOmRlLDEwNjpYLDEwODpnZSwxMTA6NDEsMTExOlcsMTEyOnhlLDExMzpVfSxpKGphLFsyLDEwMF0sezEwOlsxLDE1Nl0sOTM6WzEsMTU3XX0pLHs3NzpbMSwxNThdfSxpKGphLFsyLDEwOF0sezExNzoxNjAsMTA6WzEsMTU5XSwxNDpnbiw0MjpfdCw1ODpFdCw4NjpHdCwxMDI6bG4sMTAzOnh0LDEwNjpQdCwxMDg6UWUsMTExOkR0LDExMjprdCwxMTM6T259KSxpKGphLFsyLDExMF0sezEwOlsxLDE2MV19KSxpKE91LFsyLDE3Nl0pLGkoT3UsWzIsMTYzXSksaShPdSxbMiwxNjRdKSxpKE91LFsyLDE2NV0pLGkoT3UsWzIsMTY2XSksaShPdSxbMiwxNjddKSxpKE91LFsyLDE2OF0pLGkoT3UsWzIsMTY5XSksaShPdSxbMiwxNzBdKSxpKE91LFsyLDE3MV0pLGkoT3UsWzIsMTcyXSksaShPdSxbMiwxNzNdKSx7NDI6aiw0NToxNjIsNTg6Syw4NjphZSw5OTpuZSwxMDI6c2UsMTAzOmRlLDEwNjpYLDEwODpnZSwxMTA6NDEsMTExOlcsMTEyOnhlLDExMzpVfSx7MzA6MTYzLDY1OlNhLDc3OlBvLDc4OkZjLDc5OjE2NCwxMTM6eGEsMTE0OkJhLDExNTpnYX0sezMwOjE3MSw2NTpTYSw3NzpQbyw3ODpGYyw3OToxNjQsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LHszMDoxNzMsNDg6WzEsMTcyXSw2NTpTYSw3NzpQbyw3ODpGYyw3OToxNjQsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LHszMDoxNzQsNjU6U2EsNzc6UG8sNzg6RmMsNzk6MTY0LDExMzp4YSwxMTQ6QmEsMTE1OmdhfSx7MzA6MTc1LDY1OlNhLDc3OlBvLDc4OkZjLDc5OjE2NCwxMTM6eGEsMTE0OkJhLDExNTpnYX0sezMwOjE3Niw2NTpTYSw3NzpQbyw3ODpGYyw3OToxNjQsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LHsxMDY6WzEsMTc3XX0sezMwOjE3OCw2NTpTYSw3NzpQbyw3ODpGYyw3OToxNjQsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LHszMDoxNzksNjM6WzEsMTgwXSw2NTpTYSw3NzpQbyw3ODpGYyw3OToxNjQsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LHszMDoxODEsNjU6U2EsNzc6UG8sNzg6RmMsNzk6MTY0LDExMzp4YSwxMTQ6QmEsMTE1OmdhfSx7MzA6MTgyLDY1OlNhLDc3OlBvLDc4OkZjLDc5OjE2NCwxMTM6eGEsMTE0OkJhLDExNTpnYX0sezMwOjE4Myw2NTpTYSw3NzpQbyw3ODpGYyw3OToxNjQsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LGkoeXQsWzIsMTc1XSksaShwLFsyLDIwXSksaShqaSxbMiwyNV0pLGkoTmUsWzIsNDNdLHsxODoxODQsMTA6U2V9KSxpKHhpLFsyLDY4XSx7MTA6WzEsMTg1XX0pLHsxMDpbMSwxODZdfSx7MzA6MTg3LDY1OlNhLDc3OlBvLDc4OkZjLDc5OjE2NCwxMTM6eGEsMTE0OkJhLDExNTpnYX0sezc1OlsxLDE4OF0sNzY6MTg5LDExMzpNYSwxMTY6enN9LGkoa2gsWzIsNzNdKSxpKGtoLFsyLDc1XSksaShraCxbMiw3Nl0pLGkoa2gsWzIsMTYxXSksaShraCxbMiwxNjJdKSx7ODprZSw5OktlLDEwOmFvLDExOkZ0LDEyOlRyLDE0OkZuLDIxOjE5MSwyNzpxbiwyOTpbMSwxOTBdLDMyOlVuLDQyOkF0LDU4Ond0LDczOm9uLDgwOjEzNSw4MTpmbiw4MjpBbiw4Mzpvbyw4NDpqbyw4NTokbyw4NjpQYSw4Nzp3byw4ODoxOTIsMTAyOl9zLDEwNjp0bCwxMDg6ZGEsMTExOmowLDExMjpwbSwxMTM6TWx9LGkobHUsWzIsOTRdKSxpKGx1LFsyLDk2XSksaShsdSxbMiw5N10pLGkobHUsWzIsMTUwXSksaShsdSxbMiwxNTFdKSxpKGx1LFsyLDE1Ml0pLGkobHUsWzIsMTUzXSksaShsdSxbMiwxNTRdKSxpKGx1LFsyLDE1NV0pLGkobHUsWzIsMTU2XSksaShsdSxbMiwxNTddKSxpKGx1LFsyLDE1OF0pLGkobHUsWzIsMTU5XSksaShsdSxbMiwxNjBdKSxpKGx1LFsyLDgzXSksaShsdSxbMiw4NF0pLGkobHUsWzIsODVdKSxpKGx1LFsyLDg2XSksaShsdSxbMiw4N10pLGkobHUsWzIsODhdKSxpKGx1LFsyLDg5XSksaShsdSxbMiw5MF0pLGkobHUsWzIsOTFdKSxpKGx1LFsyLDkyXSksaShsdSxbMiw5M10pLHs2OjExLDc6MTIsODpiLDk6eSwxMDpULDExOl8sMjA6MTcsMjI6MTgsMjM6MTksMjQ6MjAsMjU6MjEsMjY6MjIsMjc6QSwzMjpbMSwxOTNdLDMzOjI0LDM0OlAsMzY6UiwzODpGLDQwOjI4LDQxOjM4LDQyOmosNDM6MzksNDU6NDAsNTg6Syw4MTplZSw4MjppZSw4MzpvZSw4NDpwZSw4NTpiZSw4NjphZSw5OTpuZSwxMDI6c2UsMTAzOmRlLDEwNjpYLDEwODpnZSwxMTA6NDEsMTExOlcsMTEyOnhlLDExMzpVLDExODpGZSwxMTk6UGUsMTIwOmplLDEyMTpJZX0sezEwOlNlLDE4OjE5NH0sezEwOlsxLDE5NV0sNDI6aiw1ODpLLDg2OmFlLDk5Om5lLDEwMjpzZSwxMDM6ZGUsMTA2OlgsMTA4OmdlLDExMDoxMDksMTExOlcsMTEyOnhlLDExMzpVfSx7MTA6WzEsMTk2XX0sezEwOlsxLDE5N10sMTAzOlsxLDE5OF19LGkobzUsWzIsMTIxXSksezEwOlsxLDE5OV0sNDI6aiw1ODpLLDg2OmFlLDk5Om5lLDEwMjpzZSwxMDM6ZGUsMTA2OlgsMTA4OmdlLDExMDoxMDksMTExOlcsMTEyOnhlLDExMzpVfSx7MTA6WzEsMjAwXSw0MjpqLDU4OkssODY6YWUsOTk6bmUsMTAyOnNlLDEwMzpkZSwxMDY6WCwxMDg6Z2UsMTEwOjEwOSwxMTE6VywxMTI6eGUsMTEzOlV9LHs3NzpbMSwyMDFdfSxpKGphLFsyLDEwMl0sezEwOlsxLDIwMl19KSxpKGphLFsyLDEwNF0sezEwOlsxLDIwM119KSx7Nzc6WzEsMjA0XX0saShPdSxbMiwxNzddKSx7Nzc6WzEsMjA1XSw5NTpbMSwyMDZdfSxpKGh0LFsyLDUwXSx7MTEwOjEwOSw0MjpqLDU4OkssODY6YWUsOTk6bmUsMTAyOnNlLDEwMzpkZSwxMDY6WCwxMDg6Z2UsMTExOlcsMTEyOnhlLDExMzpVfSksezMxOlsxLDIwN10sNjU6U2EsNzk6MjA4LDExMzp4YSwxMTQ6QmEsMTE1OmdhfSxpKFdoLFsyLDc5XSksaShXaCxbMiw4MV0pLGkoV2gsWzIsODJdKSxpKFdoLFsyLDE0Nl0pLGkoV2gsWzIsMTQ3XSksaShXaCxbMiwxNDhdKSxpKFdoLFsyLDE0OV0pLHs0NzpbMSwyMDldLDY1OlNhLDc5OjIwOCwxMTM6eGEsMTE0OkJhLDExNTpnYX0sezMwOjIxMCw2NTpTYSw3NzpQbyw3ODpGYyw3OToxNjQsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LHs0OTpbMSwyMTFdLDY1OlNhLDc5OjIwOCwxMTM6eGEsMTE0OkJhLDExNTpnYX0sezUxOlsxLDIxMl0sNjU6U2EsNzk6MjA4LDExMzp4YSwxMTQ6QmEsMTE1OmdhfSx7NTM6WzEsMjEzXSw2NTpTYSw3OToyMDgsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LHs1NTpbMSwyMTRdLDY1OlNhLDc5OjIwOCwxMTM6eGEsMTE0OkJhLDExNTpnYX0sezU4OlsxLDIxNV19LHs2MjpbMSwyMTZdLDY1OlNhLDc5OjIwOCwxMTM6eGEsMTE0OkJhLDExNTpnYX0sezY0OlsxLDIxN10sNjU6U2EsNzk6MjA4LDExMzp4YSwxMTQ6QmEsMTE1OmdhfSx7MzA6MjE4LDY1OlNhLDc3OlBvLDc4OkZjLDc5OjE2NCwxMTM6eGEsMTE0OkJhLDExNTpnYX0sezMxOlsxLDIxOV0sNjU6U2EsNzk6MjA4LDExMzp4YSwxMTQ6QmEsMTE1OmdhfSx7NjU6U2EsNjc6WzEsMjIwXSw2OTpbMSwyMjFdLDc5OjIwOCwxMTM6eGEsMTE0OkJhLDExNTpnYX0sezY1OlNhLDY3OlsxLDIyM10sNjk6WzEsMjIyXSw3OToyMDgsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LGkoTmUsWzIsNDRdLHs0MjpCY30pLGkoeGksWzIsNzBdKSxpKHhpLFsyLDY5XSksezYwOlsxLDIyNF0sNjU6U2EsNzk6MjA4LDExMzp4YSwxMTQ6QmEsMTE1OmdhfSxpKHhpLFsyLDcyXSksaShraCxbMiw3NF0pLHszMDoyMjUsNjU6U2EsNzc6UG8sNzg6RmMsNzk6MTY0LDExMzp4YSwxMTQ6QmEsMTE1OmdhfSxpKFhjLHYsezU6MjI2fSksaShsdSxbMiw5NV0pLGkoQ2UsWzIsMzVdKSx7NDE6MjI3LDQyOmosNDM6MzksNDU6NDAsNTg6Syw4NjphZSw5OTpuZSwxMDI6c2UsMTAzOmRlLDEwNjpYLDEwODpnZSwxMTA6NDEsMTExOlcsMTEyOnhlLDExMzpVfSx7MTA6b2QsNTg6R2QsODE6Y2QsODk6MjI4LDEwMjpLZCwxMDQ6MjI5LDEwNToyMzAsMTA2OiRnLDEwNzphcywxMDg6d24sMTA5OlpyfSx7MTA6b2QsNTg6R2QsODE6Y2QsODk6MjM5LDEwMTpbMSwyNDBdLDEwMjpLZCwxMDQ6MjI5LDEwNToyMzAsMTA2OiRnLDEwNzphcywxMDg6d24sMTA5OlpyfSx7MTA6b2QsNTg6R2QsODE6Y2QsODk6MjQxLDEwMTpbMSwyNDJdLDEwMjpLZCwxMDQ6MjI5LDEwNToyMzAsMTA2OiRnLDEwNzphcywxMDg6d24sMTA5OlpyfSx7MTAyOlsxLDI0M119LHsxMDpvZCw1ODpHZCw4MTpjZCw4OToyNDQsMTAyOktkLDEwNDoyMjksMTA1OjIzMCwxMDY6JGcsMTA3OmFzLDEwODp3biwxMDk6WnJ9LHs0MjpqLDQ1OjI0NSw1ODpLLDg2OmFlLDk5Om5lLDEwMjpzZSwxMDM6ZGUsMTA2OlgsMTA4OmdlLDExMDo0MSwxMTE6VywxMTI6eGUsMTEzOlV9LGkoamEsWzIsMTAxXSksezc3OlsxLDI0Nl19LHs3NzpbMSwyNDddLDk1OlsxLDI0OF19LGkoamEsWzIsMTA5XSksaShqYSxbMiwxMTFdLHsxMDpbMSwyNDldfSksaShqYSxbMiwxMTJdKSxpKHpyLFsyLDUxXSksaShXaCxbMiw4MF0pLGkoenIsWzIsNTJdKSx7NDk6WzEsMjUwXSw2NTpTYSw3OToyMDgsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LGkoenIsWzIsNTldKSxpKHpyLFsyLDU0XSksaSh6cixbMiw1NV0pLGkoenIsWzIsNTZdKSx7MTA2OlsxLDI1MV19LGkoenIsWzIsNThdKSxpKHpyLFsyLDYwXSksezY0OlsxLDI1Ml0sNjU6U2EsNzk6MjA4LDExMzp4YSwxMTQ6QmEsMTE1OmdhfSxpKHpyLFsyLDYyXSksaSh6cixbMiw2M10pLGkoenIsWzIsNjVdKSxpKHpyLFsyLDY0XSksaSh6cixbMiw2Nl0pLGkoWzEwLDQyLDU4LDg2LDk5LDEwMiwxMDMsMTA2LDEwOCwxMTEsMTEyLDExM10sWzIsNzhdKSx7MzE6WzEsMjUzXSw2NTpTYSw3OToyMDgsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LHs2OjExLDc6MTIsODpiLDk6eSwxMDpULDExOl8sMjA6MTcsMjI6MTgsMjM6MTksMjQ6MjAsMjU6MjEsMjY6MjIsMjc6QSwzMjpbMSwyNTRdLDMzOjI0LDM0OlAsMzY6UiwzODpGLDQwOjI4LDQxOjM4LDQyOmosNDM6MzksNDU6NDAsNTg6Syw4MTplZSw4MjppZSw4MzpvZSw4NDpwZSw4NTpiZSw4NjphZSw5OTpuZSwxMDI6c2UsMTAzOmRlLDEwNjpYLDEwODpnZSwxMTA6NDEsMTExOlcsMTEyOnhlLDExMzpVLDExODpGZSwxMTk6UGUsMTIwOmplLDEyMTpJZX0saShodCxbMiw0OF0pLGkoamEsWzIsMTE0XSx7MTAzOlppfSksaShudSxbMiwxMjNdLHsxMDU6MjU2LDEwOm9kLDU4OkdkLDgxOmNkLDEwMjpLZCwxMDY6JGcsMTA3OmFzLDEwODp3biwxMDk6WnJ9KSxpKHZ1LFsyLDEyNV0pLGkodnUsWzIsMTI3XSksaSh2dSxbMiwxMjhdKSxpKHZ1LFsyLDEyOV0pLGkodnUsWzIsMTMwXSksaSh2dSxbMiwxMzFdKSxpKHZ1LFsyLDEzMl0pLGkodnUsWzIsMTMzXSksaSh2dSxbMiwxMzRdKSxpKGphLFsyLDExNV0sezEwMzpaaX0pLHsxMDpbMSwyNTddfSxpKGphLFsyLDExNl0sezEwMzpaaX0pLHsxMDpbMSwyNThdfSxpKG81LFsyLDEyMl0pLGkoamEsWzIsOThdLHsxMDM6Wml9KSxpKGphLFsyLDk5XSx7MTEwOjEwOSw0MjpqLDU4OkssODY6YWUsOTk6bmUsMTAyOnNlLDEwMzpkZSwxMDY6WCwxMDg6Z2UsMTExOlcsMTEyOnhlLDExMzpVfSksaShqYSxbMiwxMDNdKSxpKGphLFsyLDEwNV0sezEwOlsxLDI1OV19KSxpKGphLFsyLDEwNl0pLHs5NTpbMSwyNjBdfSx7NDk6WzEsMjYxXX0sezYwOlsxLDI2Ml19LHs2NDpbMSwyNjNdfSx7ODprZSw5OktlLDExOkZ0LDIxOjI2NH0saShDZSxbMiwzNF0pLHsxMDpvZCw1ODpHZCw4MTpjZCwxMDI6S2QsMTA0OjI2NSwxMDU6MjMwLDEwNjokZywxMDc6YXMsMTA4OnduLDEwOTpacn0saSh2dSxbMiwxMjZdKSx7MTQ6Z24sNDI6X3QsNTg6RXQsODY6R3QsOTg6MjY2LDEwMjpsbiwxMDM6eHQsMTA2OlB0LDEwODpRZSwxMTE6RHQsMTEyOmt0LDExMzpPbiwxMTc6ODR9LHsxNDpnbiw0MjpfdCw1ODpFdCw4NjpHdCw5ODoyNjcsMTAyOmxuLDEwMzp4dCwxMDY6UHQsMTA4OlFlLDExMTpEdCwxMTI6a3QsMTEzOk9uLDExNzo4NH0sezk1OlsxLDI2OF19LGkoamEsWzIsMTEzXSksaSh6cixbMiw1M10pLHszMDoyNjksNjU6U2EsNzc6UG8sNzg6RmMsNzk6MTY0LDExMzp4YSwxMTQ6QmEsMTE1OmdhfSxpKHpyLFsyLDYxXSksaShYYyx2LHs1OjI3MH0pLGkobnUsWzIsMTI0XSx7MTA1OjI1NiwxMDpvZCw1ODpHZCw4MTpjZCwxMDI6S2QsMTA2OiRnLDEwNzphcywxMDg6d24sMTA5OlpyfSksaShqYSxbMiwxMTldLHsxMTc6MTYwLDEwOlsxLDI3MV0sMTQ6Z24sNDI6X3QsNTg6RXQsODY6R3QsMTAyOmxuLDEwMzp4dCwxMDY6UHQsMTA4OlFlLDExMTpEdCwxMTI6a3QsMTEzOk9ufSksaShqYSxbMiwxMjBdLHsxMTc6MTYwLDEwOlsxLDI3Ml0sMTQ6Z24sNDI6X3QsNTg6RXQsODY6R3QsMTAyOmxuLDEwMzp4dCwxMDY6UHQsMTA4OlFlLDExMTpEdCwxMTI6a3QsMTEzOk9ufSksaShqYSxbMiwxMDddKSx7MzE6WzEsMjczXSw2NTpTYSw3OToyMDgsMTEzOnhhLDExNDpCYSwxMTU6Z2F9LHs2OjExLDc6MTIsODpiLDk6eSwxMDpULDExOl8sMjA6MTcsMjI6MTgsMjM6MTksMjQ6MjAsMjU6MjEsMjY6MjIsMjc6QSwzMjpbMSwyNzRdLDMzOjI0LDM0OlAsMzY6UiwzODpGLDQwOjI4LDQxOjM4LDQyOmosNDM6MzksNDU6NDAsNTg6Syw4MTplZSw4MjppZSw4MzpvZSw4NDpwZSw4NTpiZSw4NjphZSw5OTpuZSwxMDI6c2UsMTAzOmRlLDEwNjpYLDEwODpnZSwxMTA6NDEsMTExOlcsMTEyOnhlLDExMzpVLDExODpGZSwxMTk6UGUsMTIwOmplLDEyMTpJZX0sezEwOm9kLDU4OkdkLDgxOmNkLDg5OjI3NSwxMDI6S2QsMTA0OjIyOSwxMDU6MjMwLDEwNjokZywxMDc6YXMsMTA4OnduLDEwOTpacn0sezEwOm9kLDU4OkdkLDgxOmNkLDg5OjI3NiwxMDI6S2QsMTA0OjIyOSwxMDU6MjMwLDEwNjokZywxMDc6YXMsMTA4OnduLDEwOTpacn0saSh6cixbMiw1N10pLGkoQ2UsWzIsMzNdKSxpKGphLFsyLDExN10sezEwMzpaaX0pLGkoamEsWzIsMTE4XSx7MTAzOlppfSldLGRlZmF1bHRBY3Rpb25zOnt9LHBhcnNlRXJyb3I6ZnVuY3Rpb24oV2ksQnMpe2lmKEJzLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoV2kpO2Vsc2V7dmFyIFFhPW5ldyBFcnJvcihXaSk7dGhyb3cgUWEuaGFzaD1CcyxRYX19LHBhcnNlOmZ1bmN0aW9uKFdpKXt2YXIgQnM9dGhpcyxRYT1bMF0sQmk9W10sTnU9W251bGxdLE90PVtdLFczPXRoaXMudGFibGUsS3Q9IiIsejA9MCxCcD0wLFkzPTIsJDk9MSxjNT1PdC5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxFaD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHpnPXt5eTp7fX07Zm9yKHZhciBibSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGJtKSYmKHpnLnl5W2JtXT10aGlzLnl5W2JtXSk7RWguc2V0SW5wdXQoV2ksemcueXkpLHpnLnl5LmxleGVyPUVoLHpnLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBFaC55eWxsb2M+InUiJiYoRWgueXlsbG9jPXt9KTt2YXIgejk9RWgueXlsbG9jO090LnB1c2goejkpO3ZhciBtbT1FaC5vcHRpb25zJiZFaC5vcHRpb25zLnJhbmdlczt0eXBlb2YgemcueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9emcueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gdTUoKXt2YXIgRnA7cmV0dXJuIEZwPUJpLnBvcCgpfHxFaC5sZXgoKXx8JDksdHlwZW9mIEZwIT0ibnVtYmVyIiYmKEZwIGluc3RhbmNlb2YgQXJyYXkmJihCaT1GcCxGcD1CaS5wb3AoKSksRnA9QnMuc3ltYm9sc19bRnBdfHxGcCksRnB9Zm9yKHZhciB5MSx1ZCxsZCxxOSxWdj17fSxZNyxHMixYNyxsNTs7KXtpZih1ZD1RYVtRYS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t1ZF0/bGQ9dGhpcy5kZWZhdWx0QWN0aW9uc1t1ZF06KCh5MT09PW51bGx8fHR5cGVvZiB5MT4idSIpJiYoeTE9dTUoKSksbGQ9VzNbdWRdJiZXM1t1ZF1beTFdKSx0eXBlb2YgbGQ+InUifHwhbGQubGVuZ3RofHwhbGRbMF0pe3ZhciBYMz0iIjtsNT1bXTtmb3IoWTcgaW4gVzNbdWRdKXRoaXMudGVybWluYWxzX1tZN10mJlk3PlkzJiZsNS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bWTddKyInIik7RWguc2hvd1Bvc2l0aW9uP1gzPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHowKzEpK2A6CmArRWguc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtsNS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW3kxXXx8eTEpKyInIjpYMz0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh6MCsxKSsiOiBVbmV4cGVjdGVkICIrKHkxPT0kOT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1t5MV18fHkxKSsiJyIpLHRoaXMucGFyc2VFcnJvcihYMyx7dGV4dDpFaC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19beTFdfHx5MSxsaW5lOkVoLnl5bGluZW5vLGxvYzp6OSxleHBlY3RlZDpsNX0pfWlmKGxkWzBdaW5zdGFuY2VvZiBBcnJheSYmbGQubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit1ZCsiLCB0b2tlbjogIit5MSk7c3dpdGNoKGxkWzBdKXtjYXNlIDE6UWEucHVzaCh5MSksTnUucHVzaChFaC55eXRleHQpLE90LnB1c2goRWgueXlsbG9jKSxRYS5wdXNoKGxkWzFdKSx5MT1udWxsLEJwPUVoLnl5bGVuZyxLdD1FaC55eXRleHQsejA9RWgueXlsaW5lbm8sejk9RWgueXlsbG9jO2JyZWFrO2Nhc2UgMjppZihHMj10aGlzLnByb2R1Y3Rpb25zX1tsZFsxXV1bMV0sVnYuJD1OdVtOdS5sZW5ndGgtRzJdLFZ2Ll8kPXtmaXJzdF9saW5lOk90W090Lmxlbmd0aC0oRzJ8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpPdFtPdC5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpPdFtPdC5sZW5ndGgtKEcyfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOk90W090Lmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sbW0mJihWdi5fJC5yYW5nZT1bT3RbT3QubGVuZ3RoLShHMnx8MSldLnJhbmdlWzBdLE90W090Lmxlbmd0aC0xXS5yYW5nZVsxXV0pLHE5PXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShWdixbS3QsQnAsejAsemcueXksbGRbMV0sTnUsT3RdLmNvbmNhdChjNSkpLHR5cGVvZiBxOTwidSIpcmV0dXJuIHE5O0cyJiYoUWE9UWEuc2xpY2UoMCwtMSpHMioyKSxOdT1OdS5zbGljZSgwLC0xKkcyKSxPdD1PdC5zbGljZSgwLC0xKkcyKSksUWEucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tsZFsxXV1bMF0pLE51LnB1c2goVnYuJCksT3QucHVzaChWdi5fJCksWDc9VzNbUWFbUWEubGVuZ3RoLTJdXVtRYVtRYS5sZW5ndGgtMV1dLFFhLnB1c2goWDcpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxZaD1mdW5jdGlvbigpe3ZhciAkMD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihCcyxRYSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihCcyxRYSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoQnMpfSxzZXRJbnB1dDpmdW5jdGlvbihXaSxCcyl7cmV0dXJuIHRoaXMueXk9QnN8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PVdpLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBXaT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9V2ksdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPVdpLHRoaXMubWF0Y2hlZCs9V2k7dmFyIEJzPVdpLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gQnM/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLFdpfSx1bnB1dDpmdW5jdGlvbihXaSl7dmFyIEJzPVdpLmxlbmd0aCxRYT1XaS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PVdpK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1CcyksdGhpcy5vZmZzZXQtPUJzO3ZhciBCaT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxRYS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPVFhLmxlbmd0aC0xKTt2YXIgTnU9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOlFhPyhRYS5sZW5ndGg9PT1CaS5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK0JpW0JpLmxlbmd0aC1RYS5sZW5ndGhdLmxlbmd0aC1RYVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLUJzfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W051WzBdLE51WzBdK3RoaXMueXlsZW5nLUJzXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oV2kpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShXaSkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgV2k9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihXaS5sZW5ndGg+MjA/Ii4uLiI6IiIpK1dpLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIFdpPXRoaXMubWF0Y2g7cmV0dXJuIFdpLmxlbmd0aDwyMCYmKFdpKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1XaS5sZW5ndGgpKSwoV2kuc3Vic3RyKDAsMjApKyhXaS5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIFdpPXRoaXMucGFzdElucHV0KCksQnM9bmV3IEFycmF5KFdpLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIFdpK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtCcysiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oV2ksQnMpe3ZhciBRYSxCaSxOdTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoTnU9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoTnUueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksQmk9V2lbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLEJpJiYodGhpcy55eWxpbmVubys9QmkubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46Qmk/QmlbQmkubGVuZ3RoLTFdLmxlbmd0aC1CaVtCaS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitXaVswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1XaVswXSx0aGlzLm1hdGNoKz1XaVswXSx0aGlzLm1hdGNoZXM9V2ksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoV2lbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPVdpWzBdLFFhPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLEJzLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLFFhKXJldHVybiBRYTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgT3QgaW4gTnUpdGhpc1tPdF09TnVbT3RdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIFdpLEJzLFFhLEJpO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIE51PXRoaXMuX2N1cnJlbnRSdWxlcygpLE90PTA7T3Q8TnUubGVuZ3RoO090KyspaWYoUWE9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tOdVtPdF1dKSxRYSYmKCFCc3x8UWFbMF0ubGVuZ3RoPkJzWzBdLmxlbmd0aCkpe2lmKEJzPVFhLEJpPU90LHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKFdpPXRoaXMudGVzdF9tYXRjaChRYSxOdVtPdF0pLFdpIT09ITEpcmV0dXJuIFdpO2lmKHRoaXMuX2JhY2t0cmFjayl7QnM9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gQnM/KFdpPXRoaXMudGVzdF9tYXRjaChCcyxOdVtCaV0pLFdpIT09ITE/V2k6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBCcz10aGlzLm5leHQoKTtyZXR1cm4gQnN8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKEJzKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goQnMpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciBCcz10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBCcz4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKEJzKXtyZXR1cm4gQnM9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhCc3x8MCksQnM+PTA/dGhpcy5jb25kaXRpb25TdGFja1tCc106IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oQnMpe3RoaXMuYmVnaW4oQnMpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7fSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKEJzLFFhLEJpLE51KXtzd2l0Y2goQmkpe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMzQ7Y2FzZSAxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSAyOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzNjtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDQ6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA2OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDc6dGhpcy5iZWdpbigiY2FsbGJhY2tuYW1lIik7YnJlYWs7Y2FzZSA4OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDk6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImNhbGxiYWNrYXJncyIpO2JyZWFrO2Nhc2UgMTA6cmV0dXJuIDkyO2Nhc2UgMTE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTI6cmV0dXJuIDkzO2Nhc2UgMTM6cmV0dXJuIk1EX1NUUiI7Y2FzZSAxNDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNTp0aGlzLmJlZ2luKCJtZF9zdHJpbmciKTticmVhaztjYXNlIDE2OnJldHVybiJTVFIiO2Nhc2UgMTc6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTg6dGhpcy5wdXNoU3RhdGUoInN0cmluZyIpO2JyZWFrO2Nhc2UgMTk6cmV0dXJuIDgxO2Nhc2UgMjA6cmV0dXJuIDk5O2Nhc2UgMjE6cmV0dXJuIDgyO2Nhc2UgMjI6cmV0dXJuIDEwMTtjYXNlIDIzOnJldHVybiA4MztjYXNlIDI0OnJldHVybiA4NDtjYXNlIDI1OnJldHVybiA5NDtjYXNlIDI2OnRoaXMuYmVnaW4oImNsaWNrIik7YnJlYWs7Y2FzZSAyNzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyODpyZXR1cm4gODU7Y2FzZSAyOTpyZXR1cm4gQnMubGV4LmZpcnN0R3JhcGgoKSYmdGhpcy5iZWdpbigiZGlyIiksMTI7Y2FzZSAzMDpyZXR1cm4gQnMubGV4LmZpcnN0R3JhcGgoKSYmdGhpcy5iZWdpbigiZGlyIiksMTI7Y2FzZSAzMTpyZXR1cm4gQnMubGV4LmZpcnN0R3JhcGgoKSYmdGhpcy5iZWdpbigiZGlyIiksMTI7Y2FzZSAzMjpyZXR1cm4gMjc7Y2FzZSAzMzpyZXR1cm4gMzI7Y2FzZSAzNDpyZXR1cm4gOTU7Y2FzZSAzNTpyZXR1cm4gOTU7Y2FzZSAzNjpyZXR1cm4gOTU7Y2FzZSAzNzpyZXR1cm4gOTU7Y2FzZSAzODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDEzO2Nhc2UgMzk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDtjYXNlIDQwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7Y2FzZSA0MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2Nhc2UgNDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDtjYXNlIDQzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7Y2FzZSA0NDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2Nhc2UgNDU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDtjYXNlIDQ2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7Y2FzZSA0NzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2Nhc2UgNDg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDtjYXNlIDQ5OnJldHVybiAxMTg7Y2FzZSA1MDpyZXR1cm4gMTE5O2Nhc2UgNTE6cmV0dXJuIDEyMDtjYXNlIDUyOnJldHVybiAxMjE7Y2FzZSA1MzpyZXR1cm4gMTAyO2Nhc2UgNTQ6cmV0dXJuIDEwODtjYXNlIDU1OnJldHVybiA0NDtjYXNlIDU2OnJldHVybiA1ODtjYXNlIDU3OnJldHVybiA0MjtjYXNlIDU4OnJldHVybiA4O2Nhc2UgNTk6cmV0dXJuIDEwMztjYXNlIDYwOnJldHVybiAxMTI7Y2FzZSA2MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDc1O2Nhc2UgNjI6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJlZGdlVGV4dCIpLDczO2Nhc2UgNjM6cmV0dXJuIDExNjtjYXNlIDY0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNzU7Y2FzZSA2NTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRoaWNrRWRnZVRleHQiKSw3MztjYXNlIDY2OnJldHVybiAxMTY7Y2FzZSA2NzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDc1O2Nhc2UgNjg6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJkb3R0ZWRFZGdlVGV4dCIpLDczO2Nhc2UgNjk6cmV0dXJuIDExNjtjYXNlIDcwOnJldHVybiA3NTtjYXNlIDcxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNTE7Y2FzZSA3MjpyZXR1cm4iVEVYVCI7Y2FzZSA3MzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImVsbGlwc2VUZXh0IiksNTA7Y2FzZSA3NDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDUzO2Nhc2UgNzU6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNTI7Y2FzZSA3NjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDU1O2Nhc2UgNzc6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNTQ7Y2FzZSA3ODpyZXR1cm4gNTY7Y2FzZSA3OTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw2NTtjYXNlIDgwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNjI7Y2FzZSA4MTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw2MTtjYXNlIDgyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNDc7Y2FzZSA4MzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw0NjtjYXNlIDg0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNjc7Y2FzZSA4NTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDY5O2Nhc2UgODY6cmV0dXJuIDExNDtjYXNlIDg3OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidHJhcFRleHQiKSw2NjtjYXNlIDg4OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidHJhcFRleHQiKSw2ODtjYXNlIDg5OnJldHVybiAxMTU7Y2FzZSA5MDpyZXR1cm4gNjU7Y2FzZSA5MTpyZXR1cm4gODc7Y2FzZSA5MjpyZXR1cm4iU0VQIjtjYXNlIDkzOnJldHVybiA4NjtjYXNlIDk0OnJldHVybiAxMTI7Y2FzZSA5NTpyZXR1cm4gMTA4O2Nhc2UgOTY6cmV0dXJuIDQyO2Nhc2UgOTc6cmV0dXJuIDEwNjtjYXNlIDk4OnJldHVybiAxMTE7Y2FzZSA5OTpyZXR1cm4gMTEzO2Nhc2UgMTAwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNjA7Y2FzZSAxMDE6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNjA7Y2FzZSAxMDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0OTtjYXNlIDEwMzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw0ODtjYXNlIDEwNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDMxO2Nhc2UgMTA1OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDI5O2Nhc2UgMTA2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNjQ7Y2FzZSAxMDc6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNjM7Y2FzZSAxMDg6cmV0dXJuIlRFWFQiO2Nhc2UgMTA5OnJldHVybiJRVU9URSI7Y2FzZSAxMTA6cmV0dXJuIDk7Y2FzZSAxMTE6cmV0dXJuIDEwO2Nhc2UgMTEyOnJldHVybiAxMX19LHJ1bGVzOlsvXig/OmFjY1RpdGxlXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKjpccyopLywvXig/Oig/IVxufHwpKlteXG5dKikvLC9eKD86YWNjRGVzY3Jccypce1xzKikvLC9eKD86W1x9XSkvLC9eKD86W15cfV0qKS8sL14oPzpjYWxsW1xzXSspLywvXig/OlwoW1xzXSpcKSkvLC9eKD86XCgpLywvXig/OlteKF0qKS8sL14oPzpcKSkvLC9eKD86W14pXSopLywvXig/OlteYCJdKykvLC9eKD86W2BdWyJdKS8sL14oPzpbIl1bYF0pLywvXig/OlteIl0rKS8sL14oPzpbIl0pLywvXig/OlsiXSkvLC9eKD86c3R5bGVcYikvLC9eKD86ZGVmYXVsdFxiKS8sL14oPzpsaW5rU3R5bGVcYikvLC9eKD86aW50ZXJwb2xhdGVcYikvLC9eKD86Y2xhc3NEZWZcYikvLC9eKD86Y2xhc3NcYikvLC9eKD86aHJlZltcc10pLywvXig/OmNsaWNrW1xzXSspLywvXig/Oltcc1xuXSkvLC9eKD86W15cc1xuXSopLywvXig/OmZsb3djaGFydC1lbGtcYikvLC9eKD86Z3JhcGhcYikvLC9eKD86Zmxvd2NoYXJ0XGIpLywvXig/OnN1YmdyYXBoXGIpLywvXig/OmVuZFxiXHMqKS8sL14oPzpfc2VsZlxiKS8sL14oPzpfYmxhbmtcYikvLC9eKD86X3BhcmVudFxiKS8sL14oPzpfdG9wXGIpLywvXig/Oihccj9cbikqXHMqXG4pLywvXig/OlxzKkxSXGIpLywvXig/OlxzKlJMXGIpLywvXig/OlxzKlRCXGIpLywvXig/OlxzKkJUXGIpLywvXig/OlxzKlREXGIpLywvXig/OlxzKkJSXGIpLywvXig/OlxzKjwpLywvXig/OlxzKj4pLywvXig/OlxzKlxeKS8sL14oPzpccyp2XGIpLywvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrQlRbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopLywvXig/OlswLTldKykvLC9eKD86IykvLC9eKD86Ojo6KS8sL14oPzo6KS8sL14oPzomKS8sL14oPzo7KS8sL14oPzosKS8sL14oPzpcKikvLC9eKD86XHMqW3hvPF0/LS0rWy14bz5dXHMqKS8sL14oPzpccypbeG88XT8tLVxzKikvLC9eKD86W14tXXwtKD8hLSkrKS8sL14oPzpccypbeG88XT89PStbPXhvPl1ccyopLywvXig/OlxzKlt4bzxdPz09XHMqKS8sL14oPzpbXj1dfD0oPyEpKS8sL14oPzpccypbeG88XT8tP1wuKy1beG8+XT9ccyopLywvXig/OlxzKlt4bzxdPy1cLlxzKikvLC9eKD86W15cLl18XC4oPyEpKS8sL14oPzpccyp+fltcfl0rXHMqKS8sL14oPzpbLS9cKV1bXCldKS8sL14oPzpbXlwoXClcW1xdXHtcfV18IVwpKykvLC9eKD86XCgtKS8sL14oPzpcXVwpKS8sL14oPzpcKFxbKS8sL14oPzpcXVxdKS8sL14oPzpcW1xbKS8sL14oPzpcW1x8KS8sL14oPzo+KS8sL14oPzpcKVxdKS8sL14oPzpcW1woKS8sL14oPzpcKVwpXCkpLywvXig/OlwoXChcKCkvLC9eKD86W1xcKD89XF0pXVtcXV0pLywvXig/OlwvKD89XF0pXF0pLywvXig/OlwvKD8hXF0pfFxcKD8hXF0pfFteXFxcW1xdXChcKVx7XH1cL10rKS8sL14oPzpcW1wvKS8sL14oPzpcW1xcKS8sL14oPzo8KS8sL14oPzo+KS8sL14oPzpcXikvLC9eKD86XFxcfCkvLC9eKD86dlxiKS8sL14oPzpcKikvLC9eKD86IykvLC9eKD86JikvLC9eKD86KFtBLVphLXowLTkhIlwjJCUmJyorXC5gP1xcX1wvXXwtKD89W15cPlwtXC5dKXwoPyEpKSspLywvXig/Oi0pLywvXig/OltcdTAwQUFcdTAwQjVcdTAwQkFcdTAwQzAtXHUwMEQ2XHUwMEQ4LVx1MDBGNl18W1x1MDBGOC1cdTAyQzFcdTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1MDJFQ1x1MDJFRVx1MDM3MC1cdTAzNzRcdTAzNzZcdTAzNzddfFtcdTAzN0EtXHUwMzdEXHUwMzg2XHUwMzg4LVx1MDM4QVx1MDM4Q1x1MDM4RS1cdTAzQTFcdTAzQTMtXHUwM0Y1XXxbXHUwM0Y3LVx1MDQ4MVx1MDQ4QS1cdTA1MjdcdTA1MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDVEMC1cdTA1RUFdfFtcdTA1RjAtXHUwNUYyXHUwNjIwLVx1MDY0QVx1MDY2RVx1MDY2Rlx1MDY3MS1cdTA2RDNcdTA2RDVcdTA2RTVcdTA2RTZcdTA2RUVdfFtcdTA2RUZcdTA2RkEtXHUwNkZDXHUwNkZGXHUwNzEwXHUwNzEyLVx1MDcyRlx1MDc0RC1cdTA3QTVcdTA3QjFcdTA3Q0EtXHUwN0VBXXxbXHUwN0Y0XHUwN0Y1XHUwN0ZBXHUwODAwLVx1MDgxNVx1MDgxQVx1MDgyNFx1MDgyOFx1MDg0MC1cdTA4NThcdTA4QTBdfFtcdTA4QTItXHUwOEFDXHUwOTA0LVx1MDkzOVx1MDkzRFx1MDk1MFx1MDk1OC1cdTA5NjFcdTA5NzEtXHUwOTc3XXxbXHUwOTc5LVx1MDk3Rlx1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFBLVx1MDlCMFx1MDlCMl18W1x1MDlCNi1cdTA5QjlcdTA5QkRcdTA5Q0VcdTA5RENcdTA5RERcdTA5REYtXHUwOUUxXHUwOUYwXHUwOUYxXHUwQTA1LVx1MEEwQV18W1x1MEEwRlx1MEExMFx1MEExMy1cdTBBMjhcdTBBMkEtXHUwQTMwXHUwQTMyXHUwQTMzXHUwQTM1XHUwQTM2XHUwQTM4XHUwQTM5XXxbXHUwQTU5LVx1MEE1Q1x1MEE1RVx1MEE3Mi1cdTBBNzRcdTBBODUtXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThdfFtcdTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCRFx1MEFEMFx1MEFFMFx1MEFFMVx1MEIwNS1cdTBCMENdfFtcdTBCMEZcdTBCMTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0RcdTBCNUNdfFtcdTBCNURcdTBCNUYtXHUwQjYxXHUwQjcxXHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XXxbXHUwQjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjlcdTBCRDBdfFtcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzMzXHUwQzM1LVx1MEMzOVx1MEMzRF18W1x1MEM1OFx1MEM1OVx1MEM2MFx1MEM2MVx1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNdfFtcdTBDQjUtXHUwQ0I5XHUwQ0JEXHUwQ0RFXHUwQ0UwXHUwQ0UxXHUwQ0YxXHUwQ0YyXHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBdfFtcdTBEMTItXHUwRDNBXHUwRDNEXHUwRDRFXHUwRDYwXHUwRDYxXHUwRDdBLVx1MEQ3Rlx1MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXXxbXHUwREIzLVx1MERCQlx1MERCRFx1MERDMC1cdTBEQzZcdTBFMDEtXHUwRTMwXHUwRTMyXHUwRTMzXHUwRTQwLVx1MEU0Nlx1MEU4MV18W1x1MEU4Mlx1MEU4NFx1MEU4N1x1MEU4OFx1MEU4QVx1MEU4RFx1MEU5NC1cdTBFOTdcdTBFOTktXHUwRTlGXHUwRUExLVx1MEVBM118W1x1MEVBNVx1MEVBN1x1MEVBQVx1MEVBQlx1MEVBRC1cdTBFQjBcdTBFQjJcdTBFQjNcdTBFQkRcdTBFQzAtXHUwRUM0XHUwRUM2XXxbXHUwRURDLVx1MEVERlx1MEYwMFx1MEY0MC1cdTBGNDdcdTBGNDktXHUwRjZDXHUwRjg4LVx1MEY4Q1x1MTAwMC1cdTEwMkFdfFtcdTEwM0ZcdTEwNTAtXHUxMDU1XHUxMDVBLVx1MTA1RFx1MTA2MVx1MTA2NVx1MTA2Nlx1MTA2RS1cdTEwNzBcdTEwNzUtXHUxMDgxXXxbXHUxMDhFXHUxMEEwLVx1MTBDNVx1MTBDN1x1MTBDRFx1MTBEMC1cdTEwRkFcdTEwRkMtXHUxMjQ4XHUxMjRBLVx1MTI0RF18W1x1MTI1MC1cdTEyNTZcdTEyNThcdTEyNUEtXHUxMjVEXHUxMjYwLVx1MTI4OFx1MTI4QS1cdTEyOERcdTEyOTAtXHUxMkIwXXxbXHUxMkIyLVx1MTJCNVx1MTJCOC1cdTEyQkVcdTEyQzBcdTEyQzItXHUxMkM1XHUxMkM4LVx1MTJENlx1MTJEOC1cdTEzMTBdfFtcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1QVx1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y0XHUxNDAxLVx1MTY2Q118W1x1MTY2Ri1cdTE2N0ZcdTE2ODEtXHUxNjlBXHUxNkEwLVx1MTZFQVx1MTcwMC1cdTE3MENcdTE3MEUtXHUxNzExXXxbXHUxNzIwLVx1MTczMVx1MTc0MC1cdTE3NTFcdTE3NjAtXHUxNzZDXHUxNzZFLVx1MTc3MFx1MTc4MC1cdTE3QjNcdTE3RDddfFtcdTE3RENcdTE4MjAtXHUxODc3XHUxODgwLVx1MThBOFx1MThBQVx1MThCMC1cdTE4RjVcdTE5MDAtXHUxOTFDXXxbXHUxOTUwLVx1MTk2RFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOUFCXHUxOUMxLVx1MTlDN1x1MUEwMC1cdTFBMTZdfFtcdTFBMjAtXHUxQTU0XHUxQUE3XHUxQjA1LVx1MUIzM1x1MUI0NS1cdTFCNEJcdTFCODMtXHUxQkEwXHUxQkFFXHUxQkFGXXxbXHUxQkJBLVx1MUJFNVx1MUMwMC1cdTFDMjNcdTFDNEQtXHUxQzRGXHUxQzVBLVx1MUM3RFx1MUNFOS1cdTFDRUNdfFtcdTFDRUUtXHUxQ0YxXHUxQ0Y1XHUxQ0Y2XHUxRDAwLVx1MURCRlx1MUUwMC1cdTFGMTVcdTFGMTgtXHUxRjFEXXxbXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RF18W1x1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXXxbXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjA3MVx1MjA3Rl18W1x1MjA5MC1cdTIwOUNcdTIxMDJcdTIxMDdcdTIxMEEtXHUyMTEzXHUyMTE1XHUyMTE5LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEyOF18W1x1MjEyQS1cdTIxMkRcdTIxMkYtXHUyMTM5XHUyMTNDLVx1MjEzRlx1MjE0NS1cdTIxNDlcdTIxNEVcdTIxODNcdTIxODRdfFtcdTJDMDAtXHUyQzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0VFXHUyQ0YyXHUyQ0YzXXxbXHUyRDAwLVx1MkQyNVx1MkQyN1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEODAtXHUyRDk2XHUyREEwLVx1MkRBNl18W1x1MkRBOC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJEQzZcdTJEQzgtXHUyRENFXXxbXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTJFMkZcdTMwMDVcdTMwMDZcdTMwMzEtXHUzMDM1XHUzMDNCXHUzMDNDXXxbXHUzMDQxLVx1MzA5Nlx1MzA5RC1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkRdfFtcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZDQ118W1x1QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MUZcdUE2MkFcdUE2MkJdfFtcdUE2NDAtXHVBNjZFXHVBNjdGLVx1QTY5N1x1QTZBMC1cdUE2RTVcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OF18W1x1QTc4Qi1cdUE3OEVcdUE3OTAtXHVBNzkzXHVBN0EwLVx1QTdBQVx1QTdGOC1cdUE4MDFcdUE4MDMtXHVBODA1XXxbXHVBODA3LVx1QTgwQVx1QTgwQy1cdUE4MjJcdUE4NDAtXHVBODczXHVBODgyLVx1QThCM1x1QThGMi1cdUE4RjdcdUE4RkJdfFtcdUE5MEEtXHVBOTI1XHVBOTMwLVx1QTk0Nlx1QTk2MC1cdUE5N0NcdUE5ODQtXHVBOUIyXHVBOUNGXHVBQTAwLVx1QUEyOF18W1x1QUE0MC1cdUFBNDJcdUFBNDQtXHVBQTRCXHVBQTYwLVx1QUE3Nlx1QUE3QVx1QUE4MC1cdUFBQUZcdUFBQjFcdUFBQjVdfFtcdUFBQjZcdUFBQjktXHVBQUJEXHVBQUMwXHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUFcdUFBRjItXHVBQUY0XXxbXHVBQjAxLVx1QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIyOC1cdUFCMkVdfFtcdUFCQzAtXHVBQkUyXHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkE2RF18W1x1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkIxRFx1RkIxRi1cdUZCMjhcdUZCMkEtXHVGQjM2XXxbXHVGQjM4LVx1RkIzQ1x1RkIzRVx1RkI0MFx1RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXXxbXHVGRDUwLVx1RkQ4Rlx1RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZFRkNdfFtcdUZGMjEtXHVGRjNBXHVGRjQxLVx1RkY1QVx1RkY2Ni1cdUZGQkVcdUZGQzItXHVGRkM3XHVGRkNBLVx1RkZDRl18W1x1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXSkvLC9eKD86XHwpLywvXig/Olx8KS8sL14oPzpcKSkvLC9eKD86XCgpLywvXig/OlxdKS8sL14oPzpcWykvLC9eKD86KFx9KSkvLC9eKD86XHspLywvXig/OlteXFtcXVwoXClce1x9XHxcIl0rKS8sL14oPzoiKS8sL14oPzooXHI/XG4pKykvLC9eKD86XHMpLywvXig/OiQpL10sY29uZGl0aW9uczp7Y2FsbGJhY2thcmdzOntydWxlczpbMTEsMTIsMTUsMTgsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrbmFtZTp7cnVsZXM6WzgsOSwxMCwxNSwxOCw3MCw3Myw3NSw3Nyw4MSw4Myw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0saHJlZjp7cnVsZXM6WzE1LDE4LDcwLDczLDc1LDc3LDgxLDgzLDg3LDg4LDEwMSwxMDMsMTA1LDEwN10saW5jbHVzaXZlOiExfSxjbGljazp7cnVsZXM6WzE1LDE4LDI3LDI4LDcwLDczLDc1LDc3LDgxLDgzLDg3LDg4LDEwMSwxMDMsMTA1LDEwN10saW5jbHVzaXZlOiExfSxkb3R0ZWRFZGdlVGV4dDp7cnVsZXM6WzE1LDE4LDY3LDY5LDcwLDczLDc1LDc3LDgxLDgzLDg3LDg4LDEwMSwxMDMsMTA1LDEwN10saW5jbHVzaXZlOiExfSx0aGlja0VkZ2VUZXh0OntydWxlczpbMTUsMTgsNjQsNjYsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGVkZ2VUZXh0OntydWxlczpbMTUsMTgsNjEsNjMsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LHRyYXBUZXh0OntydWxlczpbMTUsMTgsNzAsNzMsNzUsNzcsODEsODMsODQsODUsODYsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGVsbGlwc2VUZXh0OntydWxlczpbMTUsMTgsNzAsNzEsNzIsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LHRleHQ6e3J1bGVzOlsxNSwxOCw3MCw3Myw3NCw3NSw3Niw3Nyw4MCw4MSw4Miw4Myw4Nyw4OCwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOF0saW5jbHVzaXZlOiExfSx2ZXJ0ZXg6e3J1bGVzOlsxNSwxOCw3MCw3Myw3NSw3Nyw4MSw4Myw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0sZGlyOntydWxlczpbMTUsMTgsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOls1LDYsMTUsMTgsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzMsMTUsMTgsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzEsMTUsMTgsNzAsNzMsNzUsNzcsODEsODMsODcsODgsMTAxLDEwMywxMDUsMTA3XSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6WzEzLDE0LDE1LDE4LDcwLDczLDc1LDc3LDgxLDgzLDg3LDg4LDEwMSwxMDMsMTA1LDEwN10saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlsxNSwxNiwxNywxOCw3MCw3Myw3NSw3Nyw4MSw4Myw4Nyw4OCwxMDEsMTAzLDEwNSwxMDddLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMiw0LDcsMTUsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjQsNjUsNjcsNjgsNzAsNzMsNzUsNzcsNzgsNzksODEsODMsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAxLDEwMywxMDUsMTA3LDEwOSwxMTAsMTExLDExMl0saW5jbHVzaXZlOiEwfX19O3JldHVybiAkMH0oKTtEbC5sZXhlcj1ZaDtmdW5jdGlvbiB3MSgpe3RoaXMueXk9e319cmV0dXJuIHcxLnByb3RvdHlwZT1EbCxEbC5QYXJzZXI9dzEsbmV3IHcxfSgpO1ViZS5wYXJzZXI9VWJlO2NvbnN0IEdiZT1VYmUseVV0PSJmbG93Y2hhcnQtIjtsZXQgT3FlPTAsQkQ9cXQoKSxvaD17fSx6Mz1bXSxGRD17fSxSNz1bXSxJUT17fSxPUT17fSxOUT0wLEtiZT0hMCwkdixQUSxCUT1bXTtjb25zdCBGUT1pPT5jaS5zYW5pdGl6ZVRleHQoaSxCRCksbVI9ZnVuY3Rpb24oaSl7Y29uc3Qgcz1PYmplY3Qua2V5cyhvaCk7Zm9yKGNvbnN0IHUgb2YgcylpZihvaFt1XS5pZD09PWkpcmV0dXJuIG9oW3VdLmRvbUlkO3JldHVybiBpfSxOcWU9ZnVuY3Rpb24oaSxzLHUsZCxwLHYsYj17fSl7bGV0IHksVD1pO1QhPT12b2lkIDAmJlQudHJpbSgpLmxlbmd0aCE9PTAmJihvaFtUXT09PXZvaWQgMCYmKG9oW1RdPXtpZDpULGxhYmVsVHlwZToidGV4dCIsZG9tSWQ6eVV0K1QrIi0iK09xZSxzdHlsZXM6W10sY2xhc3NlczpbXX0pLE9xZSsrLHMhPT12b2lkIDA/KEJEPXF0KCkseT1GUShzLnRleHQudHJpbSgpKSxvaFtUXS5sYWJlbFR5cGU9cy50eXBlLHlbMF09PT0nIicmJnlbeS5sZW5ndGgtMV09PT0nIicmJih5PXkuc3Vic3RyaW5nKDEseS5sZW5ndGgtMSkpLG9oW1RdLnRleHQ9eSk6b2hbVF0udGV4dD09PXZvaWQgMCYmKG9oW1RdLnRleHQ9aSksdSE9PXZvaWQgMCYmKG9oW1RdLnR5cGU9dSksZCE9bnVsbCYmZC5mb3JFYWNoKGZ1bmN0aW9uKF8pe29oW1RdLnN0eWxlcy5wdXNoKF8pfSkscCE9bnVsbCYmcC5mb3JFYWNoKGZ1bmN0aW9uKF8pe29oW1RdLmNsYXNzZXMucHVzaChfKX0pLHYhPT12b2lkIDAmJihvaFtUXS5kaXI9diksb2hbVF0ucHJvcHM9PT12b2lkIDA/b2hbVF0ucHJvcHM9YjpiIT09dm9pZCAwJiZPYmplY3QuYXNzaWduKG9oW1RdLnByb3BzLGIpKX0sUHFlPWZ1bmN0aW9uKGkscyx1KXtjb25zdCB2PXtzdGFydDppLGVuZDpzLHR5cGU6dm9pZCAwLHRleHQ6IiIsbGFiZWxUeXBlOiJ0ZXh0In07WGUuaW5mbygiYWJjNzggR290IGVkZ2UuLi4iLHYpO2NvbnN0IGI9dS50ZXh0O2lmKGIhPT12b2lkIDAmJih2LnRleHQ9RlEoYi50ZXh0LnRyaW0oKSksdi50ZXh0WzBdPT09JyInJiZ2LnRleHRbdi50ZXh0Lmxlbmd0aC0xXT09PSciJyYmKHYudGV4dD12LnRleHQuc3Vic3RyaW5nKDEsdi50ZXh0Lmxlbmd0aC0xKSksdi5sYWJlbFR5cGU9Yi50eXBlKSx1IT09dm9pZCAwJiYodi50eXBlPXUudHlwZSx2LnN0cm9rZT11LnN0cm9rZSx2Lmxlbmd0aD11Lmxlbmd0aCksKHY9PW51bGw/dm9pZCAwOnYubGVuZ3RoKT4xMCYmKHYubGVuZ3RoPTEwKSx6My5sZW5ndGg8KEJELm1heEVkZ2VzPz81MDApKVhlLmluZm8oImFiYzc4IHB1c2hpbmcgZWRnZS4uLiIpLHozLnB1c2godik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEVkZ2UgbGltaXQgZXhjZWVkZWQuICR7ejMubGVuZ3RofSBlZGdlcyBmb3VuZCwgYnV0IHRoZSBsaW1pdCBpcyAke0JELm1heEVkZ2VzfS4KCkluaXRpYWxpemUgbWVybWFpZCB3aXRoIG1heEVkZ2VzIHNldCB0byBhIGhpZ2hlciBudW1iZXIgdG8gYWxsb3cgbW9yZSBlZGdlcy4KWW91IGNhbm5vdCBzZXQgdGhpcyBjb25maWcgdmlhIGNvbmZpZ3VyYXRpb24gaW5zaWRlIHRoZSBkaWFncmFtIGFzIGl0IGlzIGEgc2VjdXJlIGNvbmZpZy4KWW91IGhhdmUgdG8gY2FsbCBtZXJtYWlkLmluaXRpYWxpemUuYCl9LEJxZT1mdW5jdGlvbihpLHMsdSl7WGUuaW5mbygiYWRkTGluayAoYWJjNzgpIixpLHMsdSk7bGV0IGQscDtmb3IoZD0wO2Q8aS5sZW5ndGg7ZCsrKWZvcihwPTA7cDxzLmxlbmd0aDtwKyspUHFlKGlbZF0sc1twXSx1KX0sRnFlPWZ1bmN0aW9uKGkscyl7aS5mb3JFYWNoKGZ1bmN0aW9uKHUpe3U9PT0iZGVmYXVsdCI/ejMuZGVmYXVsdEludGVycG9sYXRlPXM6ejNbdV0uaW50ZXJwb2xhdGU9c30pfSxScWU9ZnVuY3Rpb24oaSxzKXtpLmZvckVhY2goZnVuY3Rpb24odSl7aWYodT49ejMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVGhlIGluZGV4ICR7dX0gZm9yIGxpbmtTdHlsZSBpcyBvdXQgb2YgYm91bmRzLiBWYWxpZCBpbmRpY2VzIGZvciBsaW5rU3R5bGUgYXJlIGJldHdlZW4gMCBhbmQgJHt6My5sZW5ndGgtMX0uIChIZWxwOiBFbnN1cmUgdGhhdCB0aGUgaW5kZXggaXMgd2l0aGluIHRoZSByYW5nZSBvZiBleGlzdGluZyBlZGdlcy4pYCk7dT09PSJkZWZhdWx0Ij96My5kZWZhdWx0U3R5bGU9czooQW8uaXNTdWJzdHJpbmdJbkFycmF5KCJmaWxsIixzKT09PS0xJiZzLnB1c2goImZpbGw6bm9uZSIpLHozW3VdLnN0eWxlPXMpfSl9LGpxZT1mdW5jdGlvbihpLHMpe2kuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe0ZEW3VdPT09dm9pZCAwJiYoRkRbdV09e2lkOnUsc3R5bGVzOltdLHRleHRTdHlsZXM6W119KSxzIT1udWxsJiZzLmZvckVhY2goZnVuY3Rpb24oZCl7aWYoZC5tYXRjaCgiY29sb3IiKSl7Y29uc3QgcD1kLnJlcGxhY2UoImZpbGwiLCJiZ0ZpbGwiKS5yZXBsYWNlKCJjb2xvciIsImZpbGwiKTtGRFt1XS50ZXh0U3R5bGVzLnB1c2gocCl9RkRbdV0uc3R5bGVzLnB1c2goZCl9KX0pfSwkcWU9ZnVuY3Rpb24oaSl7JHY9aSwkdi5tYXRjaCgvLio8LykmJigkdj0iUkwiKSwkdi5tYXRjaCgvLipcXi8pJiYoJHY9IkJUIiksJHYubWF0Y2goLy4qPi8pJiYoJHY9IkxSIiksJHYubWF0Y2goLy4qdi8pJiYoJHY9IlRCIiksJHY9PT0iVEQiJiYoJHY9IlRCIil9LFJRPWZ1bmN0aW9uKGkscyl7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24odSl7bGV0IGQ9dTtvaFtkXSE9PXZvaWQgMCYmb2hbZF0uY2xhc3Nlcy5wdXNoKHMpLElRW2RdIT09dm9pZCAwJiZJUVtkXS5jbGFzc2VzLnB1c2gocyl9KX0seFV0PWZ1bmN0aW9uKGkscyl7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24odSl7cyE9PXZvaWQgMCYmKE9RW1BRPT09Imdlbi0xIj9tUih1KTp1XT1GUShzKSl9KX0sa1V0PWZ1bmN0aW9uKGkscyx1KXtsZXQgZD1tUihpKTtpZihxdCgpLnNlY3VyaXR5TGV2ZWwhPT0ibG9vc2UifHxzPT09dm9pZCAwKXJldHVybjtsZXQgcD1bXTtpZih0eXBlb2YgdT09InN0cmluZyIpe3A9dS5zcGxpdCgvLCg/PSg/Oig/OlteIl0qIil7Mn0pKlteIl0qJCkvKTtmb3IobGV0IHY9MDt2PHAubGVuZ3RoO3YrKyl7bGV0IGI9cFt2XS50cmltKCk7Yi5jaGFyQXQoMCk9PT0nIicmJmIuY2hhckF0KGIubGVuZ3RoLTEpPT09JyInJiYoYj1iLnN1YnN0cigxLGIubGVuZ3RoLTIpKSxwW3ZdPWJ9fXAubGVuZ3RoPT09MCYmcC5wdXNoKGkpLG9oW2ldIT09dm9pZCAwJiYob2hbaV0uaGF2ZUNhbGxiYWNrPSEwLEJRLnB1c2goZnVuY3Rpb24oKXtjb25zdCB2PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD0iJHtkfSJdYCk7diE9PW51bGwmJnYuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7QW8ucnVuRnVuYyhzLC4uLnApfSwhMSl9KSl9LHpxZT1mdW5jdGlvbihpLHMsdSl7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24oZCl7b2hbZF0hPT12b2lkIDAmJihvaFtkXS5saW5rPUFvLmZvcm1hdFVybChzLEJEKSxvaFtkXS5saW5rVGFyZ2V0PXUpfSksUlEoaSwiY2xpY2thYmxlIil9LHFxZT1mdW5jdGlvbihpKXtpZihPUS5oYXNPd25Qcm9wZXJ0eShpKSlyZXR1cm4gT1FbaV19LEhxZT1mdW5jdGlvbihpLHMsdSl7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24oZCl7a1V0KGQscyx1KX0pLFJRKGksImNsaWNrYWJsZSIpfSxWcWU9ZnVuY3Rpb24oaSl7QlEuZm9yRWFjaChmdW5jdGlvbihzKXtzKGkpfSl9LFVxZT1mdW5jdGlvbigpe3JldHVybiAkdi50cmltKCl9LEdxZT1mdW5jdGlvbigpe3JldHVybiBvaH0sS3FlPWZ1bmN0aW9uKCl7cmV0dXJuIHozfSxXcWU9ZnVuY3Rpb24oKXtyZXR1cm4gRkR9LFlxZT1mdW5jdGlvbihpKXtsZXQgcz1JcigiLm1lcm1haWRUb29sdGlwIik7KHMuX2dyb3Vwc3x8cylbMF1bMF09PT1udWxsJiYocz1JcigiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJtZXJtYWlkVG9vbHRpcCIpLnN0eWxlKCJvcGFjaXR5IiwwKSksSXIoaSkuc2VsZWN0KCJzdmciKS5zZWxlY3RBbGwoImcubm9kZSIpLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7Y29uc3QgcD1Jcih0aGlzKTtpZihwLmF0dHIoInRpdGxlIik9PT1udWxsKXJldHVybjtjb25zdCBiPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cy50cmFuc2l0aW9uKCkuZHVyYXRpb24oMjAwKS5zdHlsZSgib3BhY2l0eSIsIi45Iikscy50ZXh0KHAuYXR0cigidGl0bGUiKSkuc3R5bGUoImxlZnQiLHdpbmRvdy5zY3JvbGxYK2IubGVmdCsoYi5yaWdodC1iLmxlZnQpLzIrInB4Iikuc3R5bGUoInRvcCIsd2luZG93LnNjcm9sbFkrYi5ib3R0b20rInB4Iikscy5odG1sKHMuaHRtbCgpLnJlcGxhY2UoLyZsdDticlwvJmd0Oy9nLCI8YnIvPiIpKSxwLmNsYXNzZWQoImhvdmVyIiwhMCl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7cy50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5zdHlsZSgib3BhY2l0eSIsMCksSXIodGhpcykuY2xhc3NlZCgiaG92ZXIiLCExKX0pfTtCUS5wdXNoKFlxZSk7Y29uc3QgWHFlPWZ1bmN0aW9uKGk9Imdlbi0xIil7b2g9e30sRkQ9e30sejM9W10sQlE9W1lxZV0sUjc9W10sSVE9e30sTlE9MCxPUT17fSxLYmU9ITAsUFE9aSxCRD1xdCgpLFBnKCl9LFFxZT1pPT57UFE9aXx8Imdlbi0yIn0sSnFlPWZ1bmN0aW9uKCl7cmV0dXJuImZpbGw6I2ZmYTtzdHJva2U6ICNmNjY7IHN0cm9rZS13aWR0aDogM3B4OyBzdHJva2UtZGFzaGFycmF5OiA1LCA1O2ZpbGw6I2ZmYTtzdHJva2U6ICM2NjY7In0sWnFlPWZ1bmN0aW9uKGkscyx1KXtsZXQgZD1pLnRleHQudHJpbSgpLHA9dS50ZXh0O2k9PT11JiZ1LnRleHQubWF0Y2goL1xzLykmJihkPXZvaWQgMCk7ZnVuY3Rpb24gdihBKXtjb25zdCBQPXtib29sZWFuOnt9LG51bWJlcjp7fSxzdHJpbmc6e319LFI9W107bGV0IEY7cmV0dXJue25vZGVMaXN0OkEuZmlsdGVyKGZ1bmN0aW9uKEspe2NvbnN0IGVlPXR5cGVvZiBLO3JldHVybiBLLnN0bXQmJksuc3RtdD09PSJkaXIiPyhGPUsudmFsdWUsITEpOksudHJpbSgpPT09IiI/ITE6ZWUgaW4gUD9QW2VlXS5oYXNPd25Qcm9wZXJ0eShLKT8hMTpQW2VlXVtLXT0hMDpSLmluY2x1ZGVzKEspPyExOlIucHVzaChLKX0pLGRpcjpGfX1sZXQgYj1bXTtjb25zdHtub2RlTGlzdDp5LGRpcjpUfT12KGIuY29uY2F0LmFwcGx5KGIscykpO2lmKGI9eSxQUT09PSJnZW4tMSIpZm9yKGxldCBBPTA7QTxiLmxlbmd0aDtBKyspYltBXT1tUihiW0FdKTtkPWR8fCJzdWJHcmFwaCIrTlEscD1wfHwiIixwPUZRKHApLE5RPU5RKzE7Y29uc3QgXz17aWQ6ZCxub2RlczpiLHRpdGxlOnAudHJpbSgpLGNsYXNzZXM6W10sZGlyOlQsbGFiZWxUeXBlOnUudHlwZX07cmV0dXJuIFhlLmluZm8oIkFkZGluZyIsXy5pZCxfLm5vZGVzLF8uZGlyKSxfLm5vZGVzPWNIZShfLFI3KS5ub2RlcyxSNy5wdXNoKF8pLElRW2RdPV8sZH0sRVV0PWZ1bmN0aW9uKGkpe2Zvcihjb25zdFtzLHVdb2YgUjcuZW50cmllcygpKWlmKHUuaWQ9PT1pKXJldHVybiBzO3JldHVybi0xfTtsZXQgdlI9LTE7Y29uc3QgZUhlPVtdLHRIZT1mdW5jdGlvbihpLHMpe2NvbnN0IHU9Ujdbc10ubm9kZXM7aWYodlI9dlIrMSx2Uj4yZTMpcmV0dXJuO2lmKGVIZVt2Ul09cyxSN1tzXS5pZD09PWkpcmV0dXJue3Jlc3VsdDohMCxjb3VudDowfTtsZXQgZD0wLHA9MTtmb3IoO2Q8dS5sZW5ndGg7KXtjb25zdCB2PUVVdCh1W2RdKTtpZih2Pj0wKXtjb25zdCBiPXRIZShpLHYpO2lmKGIucmVzdWx0KXJldHVybntyZXN1bHQ6ITAsY291bnQ6cCtiLmNvdW50fTtwPXArYi5jb3VudH1kPWQrMX1yZXR1cm57cmVzdWx0OiExLGNvdW50OnB9fSxuSGU9ZnVuY3Rpb24oaSl7cmV0dXJuIGVIZVtpXX0sckhlPWZ1bmN0aW9uKCl7dlI9LTEsUjcubGVuZ3RoPjAmJnRIZSgibm9uZSIsUjcubGVuZ3RoLTEpfSxpSGU9ZnVuY3Rpb24oKXtyZXR1cm4gUjd9LHNIZT0oKT0+S2JlPyhLYmU9ITEsITApOiExLFRVdD1pPT57bGV0IHM9aS50cmltKCksdT0iYXJyb3dfb3BlbiI7c3dpdGNoKHNbMF0pe2Nhc2UiPCI6dT0iYXJyb3dfcG9pbnQiLHM9cy5zbGljZSgxKTticmVhaztjYXNlIngiOnU9ImFycm93X2Nyb3NzIixzPXMuc2xpY2UoMSk7YnJlYWs7Y2FzZSJvIjp1PSJhcnJvd19jaXJjbGUiLHM9cy5zbGljZSgxKTticmVha31sZXQgZD0ibm9ybWFsIjtyZXR1cm4gcy5pbmNsdWRlcygiPSIpJiYoZD0idGhpY2siKSxzLmluY2x1ZGVzKCIuIikmJihkPSJkb3R0ZWQiKSx7dHlwZTp1LHN0cm9rZTpkfX0sQ1V0PShpLHMpPT57Y29uc3QgdT1zLmxlbmd0aDtsZXQgZD0wO2ZvcihsZXQgcD0wO3A8dTsrK3Apc1twXT09PWkmJisrZDtyZXR1cm4gZH0sU1V0PWk9Pntjb25zdCBzPWkudHJpbSgpO2xldCB1PXMuc2xpY2UoMCwtMSksZD0iYXJyb3dfb3BlbiI7c3dpdGNoKHMuc2xpY2UoLTEpKXtjYXNlIngiOmQ9ImFycm93X2Nyb3NzIixzWzBdPT09IngiJiYoZD0iZG91YmxlXyIrZCx1PXUuc2xpY2UoMSkpO2JyZWFrO2Nhc2UiPiI6ZD0iYXJyb3dfcG9pbnQiLHNbMF09PT0iPCImJihkPSJkb3VibGVfIitkLHU9dS5zbGljZSgxKSk7YnJlYWs7Y2FzZSJvIjpkPSJhcnJvd19jaXJjbGUiLHNbMF09PT0ibyImJihkPSJkb3VibGVfIitkLHU9dS5zbGljZSgxKSk7YnJlYWt9bGV0IHA9Im5vcm1hbCIsdj11Lmxlbmd0aC0xO3VbMF09PT0iPSImJihwPSJ0aGljayIpLHVbMF09PT0ifiImJihwPSJpbnZpc2libGUiKTtsZXQgYj1DVXQoIi4iLHUpO3JldHVybiBiJiYocD0iZG90dGVkIix2PWIpLHt0eXBlOmQsc3Ryb2tlOnAsbGVuZ3RoOnZ9fSxhSGU9KGkscyk9Pntjb25zdCB1PVNVdChpKTtsZXQgZDtpZihzKXtpZihkPVRVdChzKSxkLnN0cm9rZSE9PXUuc3Ryb2tlKXJldHVybnt0eXBlOiJJTlZBTElEIixzdHJva2U6IklOVkFMSUQifTtpZihkLnR5cGU9PT0iYXJyb3dfb3BlbiIpZC50eXBlPXUudHlwZTtlbHNle2lmKGQudHlwZSE9PXUudHlwZSlyZXR1cm57dHlwZToiSU5WQUxJRCIsc3Ryb2tlOiJJTlZBTElEIn07ZC50eXBlPSJkb3VibGVfIitkLnR5cGV9cmV0dXJuIGQudHlwZT09PSJkb3VibGVfYXJyb3ciJiYoZC50eXBlPSJkb3VibGVfYXJyb3dfcG9pbnQiKSxkLmxlbmd0aD11Lmxlbmd0aCxkfXJldHVybiB1fSxvSGU9KGkscyk9PntsZXQgdT0hMTtyZXR1cm4gaS5mb3JFYWNoKGQ9PntkLm5vZGVzLmluZGV4T2Yocyk+PTAmJih1PSEwKX0pLHV9LGNIZT0oaSxzKT0+e2NvbnN0IHU9W107cmV0dXJuIGkubm9kZXMuZm9yRWFjaCgoZCxwKT0+e29IZShzLGQpfHx1LnB1c2goaS5ub2Rlc1twXSl9KSx7bm9kZXM6dX19LHVIZT17Zmlyc3RHcmFwaDpzSGV9LEhDPXtkZWZhdWx0Q29uZmlnOigpPT5aamUuZmxvd2NoYXJ0LHNldEFjY1RpdGxlOkJnLGdldEFjY1RpdGxlOkNwLGdldEFjY0Rlc2NyaXB0aW9uOl9wLHNldEFjY0Rlc2NyaXB0aW9uOlNwLGFkZFZlcnRleDpOcWUsbG9va1VwRG9tSWQ6bVIsYWRkTGluazpCcWUsdXBkYXRlTGlua0ludGVycG9sYXRlOkZxZSx1cGRhdGVMaW5rOlJxZSxhZGRDbGFzczpqcWUsc2V0RGlyZWN0aW9uOiRxZSxzZXRDbGFzczpSUSxzZXRUb29sdGlwOnhVdCxnZXRUb29sdGlwOnFxZSxzZXRDbGlja0V2ZW50OkhxZSxzZXRMaW5rOnpxZSxiaW5kRnVuY3Rpb25zOlZxZSxnZXREaXJlY3Rpb246VXFlLGdldFZlcnRpY2VzOkdxZSxnZXRFZGdlczpLcWUsZ2V0Q2xhc3NlczpXcWUsY2xlYXI6WHFlLHNldEdlbjpRcWUsZGVmYXVsdFN0eWxlOkpxZSxhZGRTdWJHcmFwaDpacWUsZ2V0RGVwdGhGaXJzdFBvczpuSGUsaW5kZXhOb2RlczpySGUsZ2V0U3ViR3JhcGhzOmlIZSxkZXN0cnVjdExpbms6YUhlLGxleDp1SGUsZXhpc3RzOm9IZSxtYWtlVW5pcTpjSGUsc2V0RGlhZ3JhbVRpdGxlOmNtLGdldERpYWdyYW1UaXRsZTpBcH0sX1V0PU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxhZGRDbGFzczpqcWUsYWRkTGluazpCcWUsYWRkU2luZ2xlTGluazpQcWUsYWRkU3ViR3JhcGg6WnFlLGFkZFZlcnRleDpOcWUsYmluZEZ1bmN0aW9uczpWcWUsY2xlYXI6WHFlLGRlZmF1bHQ6SEMsZGVmYXVsdFN0eWxlOkpxZSxkZXN0cnVjdExpbms6YUhlLGZpcnN0R3JhcGg6c0hlLGdldENsYXNzZXM6V3FlLGdldERlcHRoRmlyc3RQb3M6bkhlLGdldERpcmVjdGlvbjpVcWUsZ2V0RWRnZXM6S3FlLGdldFN1YkdyYXBoczppSGUsZ2V0VG9vbHRpcDpxcWUsZ2V0VmVydGljZXM6R3FlLGluZGV4Tm9kZXM6ckhlLGxleDp1SGUsbG9va1VwRG9tSWQ6bVIsc2V0Q2xhc3M6UlEsc2V0Q2xpY2tFdmVudDpIcWUsc2V0RGlyZWN0aW9uOiRxZSxzZXRHZW46UXFlLHNldExpbms6enFlLHVwZGF0ZUxpbms6UnFlLHVwZGF0ZUxpbmtJbnRlcnBvbGF0ZTpGcWV9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIEFVdD0iW29iamVjdCBTeW1ib2xdIjtmdW5jdGlvbiBWQyhpKXtyZXR1cm4gdHlwZW9mIGk9PSJzeW1ib2wifHxxNChpKSYmQUMoaSk9PUFVdH1mdW5jdGlvbiBSRChpLHMpe2Zvcih2YXIgdT0tMSxkPWk9PW51bGw/MDppLmxlbmd0aCxwPUFycmF5KGQpOysrdTxkOylwW3VdPXMoaVt1XSx1LGkpO3JldHVybiBwfXZhciBMVXQ9MS8wLGxIZT1Jdj9Jdi5wcm90b3R5cGU6dm9pZCAwLGhIZT1sSGU/bEhlLnRvU3RyaW5nOnZvaWQgMDtmdW5jdGlvbiBmSGUoaSl7aWYodHlwZW9mIGk9PSJzdHJpbmciKXJldHVybiBpO2lmKEQwKGkpKXJldHVybiBSRChpLGZIZSkrIiI7aWYoVkMoaSkpcmV0dXJuIGhIZT9oSGUuY2FsbChpKToiIjt2YXIgcz1pKyIiO3JldHVybiBzPT0iMCImJjEvaT09LUxVdD8iLTAiOnN9dmFyIE1VdD0vXHMvO2Z1bmN0aW9uIERVdChpKXtmb3IodmFyIHM9aS5sZW5ndGg7cy0tJiZNVXQudGVzdChpLmNoYXJBdChzKSk7KTtyZXR1cm4gc312YXIgSVV0PS9eXHMrLztmdW5jdGlvbiBPVXQoaSl7cmV0dXJuIGkmJmkuc2xpY2UoMCxEVXQoaSkrMSkucmVwbGFjZShJVXQsIiIpfXZhciBkSGU9MC8wLE5VdD0vXlstK10weFswLTlhLWZdKyQvaSxQVXQ9L14wYlswMV0rJC9pLEJVdD0vXjBvWzAtN10rJC9pLEZVdD1wYXJzZUludDtmdW5jdGlvbiBSVXQoaSl7aWYodHlwZW9mIGk9PSJudW1iZXIiKXJldHVybiBpO2lmKFZDKGkpKXJldHVybiBkSGU7aWYoYW0oaSkpe3ZhciBzPXR5cGVvZiBpLnZhbHVlT2Y9PSJmdW5jdGlvbiI/aS52YWx1ZU9mKCk6aTtpPWFtKHMpP3MrIiI6c31pZih0eXBlb2YgaSE9InN0cmluZyIpcmV0dXJuIGk9PT0wP2k6K2k7aT1PVXQoaSk7dmFyIHU9UFV0LnRlc3QoaSk7cmV0dXJuIHV8fEJVdC50ZXN0KGkpP0ZVdChpLnNsaWNlKDIpLHU/Mjo4KTpOVXQudGVzdChpKT9kSGU6K2l9dmFyIGdIZT0xLzAsalV0PTE3OTc2OTMxMzQ4NjIzMTU3ZTI5MjtmdW5jdGlvbiBqUShpKXtpZighaSlyZXR1cm4gaT09PTA/aTowO2lmKGk9UlV0KGkpLGk9PT1nSGV8fGk9PT0tZ0hlKXt2YXIgcz1pPDA/LTE6MTtyZXR1cm4gcypqVXR9cmV0dXJuIGk9PT1pP2k6MH1mdW5jdGlvbiAkVXQoaSl7dmFyIHM9alEoaSksdT1zJTE7cmV0dXJuIHM9PT1zP3U/cy11OnM6MH1mdW5jdGlvbiB6VXQoKXt9ZnVuY3Rpb24gcEhlKGkscyl7Zm9yKHZhciB1PS0xLGQ9aT09bnVsbD8wOmkubGVuZ3RoOysrdTxkJiZzKGlbdV0sdSxpKSE9PSExOyk7cmV0dXJuIGl9ZnVuY3Rpb24gYkhlKGkscyx1LGQpe2Zvcih2YXIgcD1pLmxlbmd0aCx2PXUrKGQ/MTotMSk7ZD92LS06Kyt2PHA7KWlmKHMoaVt2XSx2LGkpKXJldHVybiB2O3JldHVybi0xfWZ1bmN0aW9uIHFVdChpKXtyZXR1cm4gaSE9PWl9ZnVuY3Rpb24gSFV0KGkscyx1KXtmb3IodmFyIGQ9dS0xLHA9aS5sZW5ndGg7KytkPHA7KWlmKGlbZF09PT1zKXJldHVybiBkO3JldHVybi0xfWZ1bmN0aW9uIFZVdChpLHMsdSl7cmV0dXJuIHM9PT1zP0hVdChpLHMsdSk6YkhlKGkscVV0LHUpfWZ1bmN0aW9uIFVVdChpLHMpe3ZhciB1PWk9PW51bGw/MDppLmxlbmd0aDtyZXR1cm4hIXUmJlZVdChpLHMsMCk+LTF9ZnVuY3Rpb24gZm0oaSl7cmV0dXJuIHc5KGkpP2FqZShpKTpsJGUoaSl9dmFyIEdVdD0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLyxLVXQ9L15cdyokLztmdW5jdGlvbiBXYmUoaSxzKXtpZihEMChpKSlyZXR1cm4hMTt2YXIgdT10eXBlb2YgaTtyZXR1cm4gdT09Im51bWJlciJ8fHU9PSJzeW1ib2wifHx1PT0iYm9vbGVhbiJ8fGk9PW51bGx8fFZDKGkpPyEwOktVdC50ZXN0KGkpfHwhR1V0LnRlc3QoaSl8fHMhPW51bGwmJmkgaW4gT2JqZWN0KHMpfXZhciBXVXQ9NTAwO2Z1bmN0aW9uIFlVdChpKXt2YXIgcz1iRChpLGZ1bmN0aW9uKGQpe3JldHVybiB1LnNpemU9PT1XVXQmJnUuY2xlYXIoKSxkfSksdT1zLmNhY2hlO3JldHVybiBzfXZhciBYVXQ9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csUVV0PS9cXChcXCk/L2csSlV0PVlVdChmdW5jdGlvbihpKXt2YXIgcz1bXTtyZXR1cm4gaS5jaGFyQ29kZUF0KDApPT09NDYmJnMucHVzaCgiIiksaS5yZXBsYWNlKFhVdCxmdW5jdGlvbih1LGQscCx2KXtzLnB1c2gocD92LnJlcGxhY2UoUVV0LCIkMSIpOmR8fHUpfSksc30pO2NvbnN0IFpVdD1KVXQ7ZnVuY3Rpb24gbUhlKGkpe3JldHVybiBpPT1udWxsPyIiOmZIZShpKX1mdW5jdGlvbiAkUShpLHMpe3JldHVybiBEMChpKT9pOldiZShpLHMpP1tpXTpaVXQobUhlKGkpKX12YXIgZUd0PTEvMDtmdW5jdGlvbiB3UihpKXtpZih0eXBlb2YgaT09InN0cmluZyJ8fFZDKGkpKXJldHVybiBpO3ZhciBzPWkrIiI7cmV0dXJuIHM9PSIwIiYmMS9pPT0tZUd0PyItMCI6c31mdW5jdGlvbiB6UShpLHMpe3M9JFEocyxpKTtmb3IodmFyIHU9MCxkPXMubGVuZ3RoO2khPW51bGwmJnU8ZDspaT1pW3dSKHNbdSsrXSldO3JldHVybiB1JiZ1PT1kP2k6dm9pZCAwfWZ1bmN0aW9uIHRHdChpLHMsdSl7dmFyIGQ9aT09bnVsbD92b2lkIDA6elEoaSxzKTtyZXR1cm4gZD09PXZvaWQgMD91OmR9ZnVuY3Rpb24gWWJlKGkscyl7Zm9yKHZhciB1PS0xLGQ9cy5sZW5ndGgscD1pLmxlbmd0aDsrK3U8ZDspaVtwK3VdPXNbdV07cmV0dXJuIGl9dmFyIHZIZT1Jdj9Jdi5pc0NvbmNhdFNwcmVhZGFibGU6dm9pZCAwO2Z1bmN0aW9uIG5HdChpKXtyZXR1cm4gRDAoaSl8fG1EKGkpfHwhISh2SGUmJmkmJmlbdkhlXSl9ZnVuY3Rpb24gcVEoaSxzLHUsZCxwKXt2YXIgdj0tMSxiPWkubGVuZ3RoO2Zvcih1fHwodT1uR3QpLHB8fChwPVtdKTsrK3Y8Yjspe3ZhciB5PWlbdl07cz4wJiZ1KHkpP3M+MT9xUSh5LHMtMSx1LGQscCk6WWJlKHAseSk6ZHx8KHBbcC5sZW5ndGhdPXkpfXJldHVybiBwfWZ1bmN0aW9uIGpEKGkpe3ZhciBzPWk9PW51bGw/MDppLmxlbmd0aDtyZXR1cm4gcz9xUShpLDEpOltdfWZ1bmN0aW9uIHJHdChpKXtyZXR1cm4gbGplKHVqZShpLHZvaWQgMCxqRCksaSsiIil9ZnVuY3Rpb24gaUd0KGkscyx1LGQpe3ZhciBwPS0xLHY9aT09bnVsbD8wOmkubGVuZ3RoO2ZvcihkJiZ2JiYodT1pWysrcF0pOysrcDx2Oyl1PXModSxpW3BdLHAsaSk7cmV0dXJuIHV9ZnVuY3Rpb24gc0d0KGkscyl7cmV0dXJuIGkmJlhGKHMsZm0ocyksaSl9ZnVuY3Rpb24gYUd0KGkscyl7cmV0dXJuIGkmJlhGKHMsSUMocyksaSl9ZnVuY3Rpb24gd0hlKGkscyl7Zm9yKHZhciB1PS0xLGQ9aT09bnVsbD8wOmkubGVuZ3RoLHA9MCx2PVtdOysrdTxkOyl7dmFyIGI9aVt1XTtzKGIsdSxpKSYmKHZbcCsrXT1iKX1yZXR1cm4gdn1mdW5jdGlvbiB5SGUoKXtyZXR1cm5bXX12YXIgb0d0PU9iamVjdC5wcm90b3R5cGUsY0d0PW9HdC5wcm9wZXJ0eUlzRW51bWVyYWJsZSx4SGU9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyx1R3Q9eEhlP2Z1bmN0aW9uKGkpe3JldHVybiBpPT1udWxsP1tdOihpPU9iamVjdChpKSx3SGUoeEhlKGkpLGZ1bmN0aW9uKHMpe3JldHVybiBjR3QuY2FsbChpLHMpfSkpfTp5SGU7Y29uc3QgWGJlPXVHdDtmdW5jdGlvbiBsR3QoaSxzKXtyZXR1cm4gWEYoaSxYYmUoaSkscyl9dmFyIGhHdD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGZHdD1oR3Q/ZnVuY3Rpb24oaSl7Zm9yKHZhciBzPVtdO2k7KVliZShzLFhiZShpKSksaT12MmUoaSk7cmV0dXJuIHN9OnlIZTtjb25zdCBrSGU9Zkd0O2Z1bmN0aW9uIGRHdChpLHMpe3JldHVybiBYRihpLGtIZShpKSxzKX1mdW5jdGlvbiBFSGUoaSxzLHUpe3ZhciBkPXMoaSk7cmV0dXJuIEQwKGkpP2Q6WWJlKGQsdShpKSl9ZnVuY3Rpb24gUWJlKGkpe3JldHVybiBFSGUoaSxmbSxYYmUpfWZ1bmN0aW9uIGdHdChpKXtyZXR1cm4gRUhlKGksSUMsa0hlKX12YXIgcEd0PU9iamVjdC5wcm90b3R5cGUsYkd0PXBHdC5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBtR3QoaSl7dmFyIHM9aS5sZW5ndGgsdT1uZXcgaS5jb25zdHJ1Y3RvcihzKTtyZXR1cm4gcyYmdHlwZW9mIGlbMF09PSJzdHJpbmciJiZiR3QuY2FsbChpLCJpbmRleCIpJiYodS5pbmRleD1pLmluZGV4LHUuaW5wdXQ9aS5pbnB1dCksdX1mdW5jdGlvbiB2R3QoaSxzKXt2YXIgdT1zP20yZShpLmJ1ZmZlcik6aS5idWZmZXI7cmV0dXJuIG5ldyBpLmNvbnN0cnVjdG9yKHUsaS5ieXRlT2Zmc2V0LGkuYnl0ZUxlbmd0aCl9dmFyIHdHdD0vXHcqJC87ZnVuY3Rpb24geUd0KGkpe3ZhciBzPW5ldyBpLmNvbnN0cnVjdG9yKGkuc291cmNlLHdHdC5leGVjKGkpKTtyZXR1cm4gcy5sYXN0SW5kZXg9aS5sYXN0SW5kZXgsc312YXIgVEhlPUl2P0l2LnByb3RvdHlwZTp2b2lkIDAsQ0hlPVRIZT9USGUudmFsdWVPZjp2b2lkIDA7ZnVuY3Rpb24geEd0KGkpe3JldHVybiBDSGU/T2JqZWN0KENIZS5jYWxsKGkpKTp7fX12YXIga0d0PSJbb2JqZWN0IEJvb2xlYW5dIixFR3Q9IltvYmplY3QgRGF0ZV0iLFRHdD0iW29iamVjdCBNYXBdIixDR3Q9IltvYmplY3QgTnVtYmVyXSIsU0d0PSJbb2JqZWN0IFJlZ0V4cF0iLF9HdD0iW29iamVjdCBTZXRdIixBR3Q9IltvYmplY3QgU3RyaW5nXSIsTEd0PSJbb2JqZWN0IFN5bWJvbF0iLE1HdD0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLERHdD0iW29iamVjdCBEYXRhVmlld10iLElHdD0iW29iamVjdCBGbG9hdDMyQXJyYXldIixPR3Q9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsTkd0PSJbb2JqZWN0IEludDhBcnJheV0iLFBHdD0iW29iamVjdCBJbnQxNkFycmF5XSIsQkd0PSJbb2JqZWN0IEludDMyQXJyYXldIixGR3Q9IltvYmplY3QgVWludDhBcnJheV0iLFJHdD0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLGpHdD0iW29iamVjdCBVaW50MTZBcnJheV0iLCRHdD0iW29iamVjdCBVaW50MzJBcnJheV0iO2Z1bmN0aW9uIHpHdChpLHMsdSl7dmFyIGQ9aS5jb25zdHJ1Y3Rvcjtzd2l0Y2gocyl7Y2FzZSBNR3Q6cmV0dXJuIG0yZShpKTtjYXNlIGtHdDpjYXNlIEVHdDpyZXR1cm4gbmV3IGQoK2kpO2Nhc2UgREd0OnJldHVybiB2R3QoaSx1KTtjYXNlIElHdDpjYXNlIE9HdDpjYXNlIE5HdDpjYXNlIFBHdDpjYXNlIEJHdDpjYXNlIEZHdDpjYXNlIFJHdDpjYXNlIGpHdDpjYXNlICRHdDpyZXR1cm4gVVJlKGksdSk7Y2FzZSBUR3Q6cmV0dXJuIG5ldyBkO2Nhc2UgQ0d0OmNhc2UgQUd0OnJldHVybiBuZXcgZChpKTtjYXNlIFNHdDpyZXR1cm4geUd0KGkpO2Nhc2UgX0d0OnJldHVybiBuZXcgZDtjYXNlIExHdDpyZXR1cm4geEd0KGkpfX12YXIgcUd0PSJbb2JqZWN0IE1hcF0iO2Z1bmN0aW9uIEhHdChpKXtyZXR1cm4gcTQoaSkmJlNEKGkpPT1xR3R9dmFyIFNIZT13RCYmd0QuaXNNYXAsVkd0PVNIZT9OWChTSGUpOkhHdDtjb25zdCBVR3Q9Vkd0O3ZhciBHR3Q9IltvYmplY3QgU2V0XSI7ZnVuY3Rpb24gS0d0KGkpe3JldHVybiBxNChpKSYmU0QoaSk9PUdHdH12YXIgX0hlPXdEJiZ3RC5pc1NldCxXR3Q9X0hlP05YKF9IZSk6S0d0O2NvbnN0IFlHdD1XR3Q7dmFyIFhHdD0xLFFHdD0yLEpHdD00LEFIZT0iW29iamVjdCBBcmd1bWVudHNdIixaR3Q9IltvYmplY3QgQXJyYXldIixlS3Q9IltvYmplY3QgQm9vbGVhbl0iLHRLdD0iW29iamVjdCBEYXRlXSIsbkt0PSJbb2JqZWN0IEVycm9yXSIsTEhlPSJbb2JqZWN0IEZ1bmN0aW9uXSIsckt0PSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsaUt0PSJbb2JqZWN0IE1hcF0iLHNLdD0iW29iamVjdCBOdW1iZXJdIixNSGU9IltvYmplY3QgT2JqZWN0XSIsYUt0PSJbb2JqZWN0IFJlZ0V4cF0iLG9LdD0iW29iamVjdCBTZXRdIixjS3Q9IltvYmplY3QgU3RyaW5nXSIsdUt0PSJbb2JqZWN0IFN5bWJvbF0iLGxLdD0iW29iamVjdCBXZWFrTWFwXSIsaEt0PSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsZkt0PSJbb2JqZWN0IERhdGFWaWV3XSIsZEt0PSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLGdLdD0iW29iamVjdCBGbG9hdDY0QXJyYXldIixwS3Q9IltvYmplY3QgSW50OEFycmF5XSIsYkt0PSJbb2JqZWN0IEludDE2QXJyYXldIixtS3Q9IltvYmplY3QgSW50MzJBcnJheV0iLHZLdD0iW29iamVjdCBVaW50OEFycmF5XSIsd0t0PSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIseUt0PSJbb2JqZWN0IFVpbnQxNkFycmF5XSIseEt0PSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsR2w9e307R2xbQUhlXT1HbFtaR3RdPUdsW2hLdF09R2xbZkt0XT1HbFtlS3RdPUdsW3RLdF09R2xbZEt0XT1HbFtnS3RdPUdsW3BLdF09R2xbYkt0XT1HbFttS3RdPUdsW2lLdF09R2xbc0t0XT1HbFtNSGVdPUdsW2FLdF09R2xbb0t0XT1HbFtjS3RdPUdsW3VLdF09R2xbdkt0XT1HbFt3S3RdPUdsW3lLdF09R2xbeEt0XT0hMCxHbFtuS3RdPUdsW0xIZV09R2xbbEt0XT0hMTtmdW5jdGlvbiB5UihpLHMsdSxkLHAsdil7dmFyIGIseT1zJlhHdCxUPXMmUUd0LF89cyZKR3Q7aWYodSYmKGI9cD91KGksZCxwLHYpOnUoaSkpLGIhPT12b2lkIDApcmV0dXJuIGI7aWYoIWFtKGkpKXJldHVybiBpO3ZhciBBPUQwKGkpO2lmKEEpe2lmKGI9bUd0KGkpLCF5KXJldHVybiBHUmUoaSxiKX1lbHNle3ZhciBQPVNEKGkpLFI9UD09TEhlfHxQPT1yS3Q7aWYodkQoaSkpcmV0dXJuIFZSZShpLHkpO2lmKFA9PU1IZXx8UD09QUhlfHxSJiYhcCl7aWYoYj1UfHxSP3t9OllSZShpKSwheSlyZXR1cm4gVD9kR3QoaSxhR3QoYixpKSk6bEd0KGksc0d0KGIsaSkpfWVsc2V7aWYoIUdsW1BdKXJldHVybiBwP2k6e307Yj16R3QoaSxQLHkpfX12fHwodj1uZXcgUDMpO3ZhciBGPXYuZ2V0KGkpO2lmKEYpcmV0dXJuIEY7di5zZXQoaSxiKSxZR3QoaSk/aS5mb3JFYWNoKGZ1bmN0aW9uKGVlKXtiLmFkZCh5UihlZSxzLHUsZWUsaSx2KSl9KTpVR3QoaSkmJmkuZm9yRWFjaChmdW5jdGlvbihlZSxpZSl7Yi5zZXQoaWUseVIoZWUscyx1LGllLGksdikpfSk7dmFyIGo9Xz9UP2dHdDpRYmU6VD9JQzpmbSxLPUE/dm9pZCAwOmooaSk7cmV0dXJuIHBIZShLfHxpLGZ1bmN0aW9uKGVlLGllKXtLJiYoaWU9ZWUsZWU9aVtpZV0pLEJYKGIsaWUseVIoZWUscyx1LGllLGksdikpfSksYn12YXIga0t0PTQ7ZnVuY3Rpb24gREhlKGkpe3JldHVybiB5UihpLGtLdCl9dmFyIEVLdD0xLFRLdD00O2Z1bmN0aW9uIENLdChpKXtyZXR1cm4geVIoaSxFS3R8VEt0KX12YXIgU0t0PSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjtmdW5jdGlvbiBfS3QoaSl7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KGksU0t0KSx0aGlzfWZ1bmN0aW9uIEFLdChpKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoaSl9ZnVuY3Rpb24geFIoaSl7dmFyIHM9LTEsdT1pPT1udWxsPzA6aS5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IFM3Oysrczx1Oyl0aGlzLmFkZChpW3NdKX14Ui5wcm90b3R5cGUuYWRkPXhSLnByb3RvdHlwZS5wdXNoPV9LdCx4Ui5wcm90b3R5cGUuaGFzPUFLdDtmdW5jdGlvbiBMS3QoaSxzKXtmb3IodmFyIHU9LTEsZD1pPT1udWxsPzA6aS5sZW5ndGg7Kyt1PGQ7KWlmKHMoaVt1XSx1LGkpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIElIZShpLHMpe3JldHVybiBpLmhhcyhzKX12YXIgTUt0PTEsREt0PTI7ZnVuY3Rpb24gT0hlKGkscyx1LGQscCx2KXt2YXIgYj11Jk1LdCx5PWkubGVuZ3RoLFQ9cy5sZW5ndGg7aWYoeSE9VCYmIShiJiZUPnkpKXJldHVybiExO3ZhciBfPXYuZ2V0KGkpLEE9di5nZXQocyk7aWYoXyYmQSlyZXR1cm4gXz09cyYmQT09aTt2YXIgUD0tMSxSPSEwLEY9dSZES3Q/bmV3IHhSOnZvaWQgMDtmb3Iodi5zZXQoaSxzKSx2LnNldChzLGkpOysrUDx5Oyl7dmFyIGo9aVtQXSxLPXNbUF07aWYoZCl2YXIgZWU9Yj9kKEssaixQLHMsaSx2KTpkKGosSyxQLGkscyx2KTtpZihlZSE9PXZvaWQgMCl7aWYoZWUpY29udGludWU7Uj0hMTticmVha31pZihGKXtpZighTEt0KHMsZnVuY3Rpb24oaWUsb2Upe2lmKCFJSGUoRixvZSkmJihqPT09aWV8fHAoaixpZSx1LGQsdikpKXJldHVybiBGLnB1c2gob2UpfSkpe1I9ITE7YnJlYWt9fWVsc2UgaWYoIShqPT09S3x8cChqLEssdSxkLHYpKSl7Uj0hMTticmVha319cmV0dXJuIHYuZGVsZXRlKGkpLHYuZGVsZXRlKHMpLFJ9ZnVuY3Rpb24gSUt0KGkpe3ZhciBzPS0xLHU9QXJyYXkoaS5zaXplKTtyZXR1cm4gaS5mb3JFYWNoKGZ1bmN0aW9uKGQscCl7dVsrK3NdPVtwLGRdfSksdX1mdW5jdGlvbiBKYmUoaSl7dmFyIHM9LTEsdT1BcnJheShpLnNpemUpO3JldHVybiBpLmZvckVhY2goZnVuY3Rpb24oZCl7dVsrK3NdPWR9KSx1fXZhciBPS3Q9MSxOS3Q9MixQS3Q9IltvYmplY3QgQm9vbGVhbl0iLEJLdD0iW29iamVjdCBEYXRlXSIsRkt0PSJbb2JqZWN0IEVycm9yXSIsUkt0PSJbb2JqZWN0IE1hcF0iLGpLdD0iW29iamVjdCBOdW1iZXJdIiwkS3Q9IltvYmplY3QgUmVnRXhwXSIsekt0PSJbb2JqZWN0IFNldF0iLHFLdD0iW29iamVjdCBTdHJpbmddIixIS3Q9IltvYmplY3QgU3ltYm9sXSIsVkt0PSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsVUt0PSJbb2JqZWN0IERhdGFWaWV3XSIsTkhlPUl2P0l2LnByb3RvdHlwZTp2b2lkIDAsWmJlPU5IZT9OSGUudmFsdWVPZjp2b2lkIDA7ZnVuY3Rpb24gR0t0KGkscyx1LGQscCx2LGIpe3N3aXRjaCh1KXtjYXNlIFVLdDppZihpLmJ5dGVMZW5ndGghPXMuYnl0ZUxlbmd0aHx8aS5ieXRlT2Zmc2V0IT1zLmJ5dGVPZmZzZXQpcmV0dXJuITE7aT1pLmJ1ZmZlcixzPXMuYnVmZmVyO2Nhc2UgVkt0OnJldHVybiEoaS5ieXRlTGVuZ3RoIT1zLmJ5dGVMZW5ndGh8fCF2KG5ldyBJWChpKSxuZXcgSVgocykpKTtjYXNlIFBLdDpjYXNlIEJLdDpjYXNlIGpLdDpyZXR1cm4gcEQoK2ksK3MpO2Nhc2UgRkt0OnJldHVybiBpLm5hbWU9PXMubmFtZSYmaS5tZXNzYWdlPT1zLm1lc3NhZ2U7Y2FzZSAkS3Q6Y2FzZSBxS3Q6cmV0dXJuIGk9PXMrIiI7Y2FzZSBSS3Q6dmFyIHk9SUt0O2Nhc2Ugekt0OnZhciBUPWQmT0t0O2lmKHl8fCh5PUpiZSksaS5zaXplIT1zLnNpemUmJiFUKXJldHVybiExO3ZhciBfPWIuZ2V0KGkpO2lmKF8pcmV0dXJuIF89PXM7ZHw9Tkt0LGIuc2V0KGkscyk7dmFyIEE9T0hlKHkoaSkseShzKSxkLHAsdixiKTtyZXR1cm4gYi5kZWxldGUoaSksQTtjYXNlIEhLdDppZihaYmUpcmV0dXJuIFpiZS5jYWxsKGkpPT1aYmUuY2FsbChzKX1yZXR1cm4hMX12YXIgS0t0PTEsV0t0PU9iamVjdC5wcm90b3R5cGUsWUt0PVdLdC5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBYS3QoaSxzLHUsZCxwLHYpe3ZhciBiPXUmS0t0LHk9UWJlKGkpLFQ9eS5sZW5ndGgsXz1RYmUocyksQT1fLmxlbmd0aDtpZihUIT1BJiYhYilyZXR1cm4hMTtmb3IodmFyIFA9VDtQLS07KXt2YXIgUj15W1BdO2lmKCEoYj9SIGluIHM6WUt0LmNhbGwocyxSKSkpcmV0dXJuITF9dmFyIEY9di5nZXQoaSksaj12LmdldChzKTtpZihGJiZqKXJldHVybiBGPT1zJiZqPT1pO3ZhciBLPSEwO3Yuc2V0KGkscyksdi5zZXQocyxpKTtmb3IodmFyIGVlPWI7KytQPFQ7KXtSPXlbUF07dmFyIGllPWlbUl0sb2U9c1tSXTtpZihkKXZhciBwZT1iP2Qob2UsaWUsUixzLGksdik6ZChpZSxvZSxSLGkscyx2KTtpZighKHBlPT09dm9pZCAwP2llPT09b2V8fHAoaWUsb2UsdSxkLHYpOnBlKSl7Sz0hMTticmVha31lZXx8KGVlPVI9PSJjb25zdHJ1Y3RvciIpfWlmKEsmJiFlZSl7dmFyIGJlPWkuY29uc3RydWN0b3IsYWU9cy5jb25zdHJ1Y3RvcjtiZSE9YWUmJiJjb25zdHJ1Y3RvciJpbiBpJiYiY29uc3RydWN0b3IiaW4gcyYmISh0eXBlb2YgYmU9PSJmdW5jdGlvbiImJmJlIGluc3RhbmNlb2YgYmUmJnR5cGVvZiBhZT09ImZ1bmN0aW9uIiYmYWUgaW5zdGFuY2VvZiBhZSkmJihLPSExKX1yZXR1cm4gdi5kZWxldGUoaSksdi5kZWxldGUocyksS312YXIgUUt0PTEsUEhlPSJbb2JqZWN0IEFyZ3VtZW50c10iLEJIZT0iW29iamVjdCBBcnJheV0iLEhRPSJbb2JqZWN0IE9iamVjdF0iLEpLdD1PYmplY3QucHJvdG90eXBlLEZIZT1KS3QuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gWkt0KGkscyx1LGQscCx2KXt2YXIgYj1EMChpKSx5PUQwKHMpLFQ9Yj9CSGU6U0QoaSksXz15P0JIZTpTRChzKTtUPVQ9PVBIZT9IUTpULF89Xz09UEhlP0hROl87dmFyIEE9VD09SFEsUD1fPT1IUSxSPVQ9PV87aWYoUiYmdkQoaSkpe2lmKCF2RChzKSlyZXR1cm4hMTtiPSEwLEE9ITF9aWYoUiYmIUEpcmV0dXJuIHZ8fCh2PW5ldyBQMyksYnx8UFgoaSk/T0hlKGkscyx1LGQscCx2KTpHS3QoaSxzLFQsdSxkLHAsdik7aWYoISh1JlFLdCkpe3ZhciBGPUEmJkZIZS5jYWxsKGksIl9fd3JhcHBlZF9fIiksaj1QJiZGSGUuY2FsbChzLCJfX3dyYXBwZWRfXyIpO2lmKEZ8fGope3ZhciBLPUY/aS52YWx1ZSgpOmksZWU9aj9zLnZhbHVlKCk6cztyZXR1cm4gdnx8KHY9bmV3IFAzKSxwKEssZWUsdSxkLHYpfX1yZXR1cm4gUj8odnx8KHY9bmV3IFAzKSxYS3QoaSxzLHUsZCxwLHYpKTohMX1mdW5jdGlvbiBlbWUoaSxzLHUsZCxwKXtyZXR1cm4gaT09PXM/ITA6aT09bnVsbHx8cz09bnVsbHx8IXE0KGkpJiYhcTQocyk/aSE9PWkmJnMhPT1zOlpLdChpLHMsdSxkLGVtZSxwKX12YXIgZVd0PTEsdFd0PTI7ZnVuY3Rpb24gbld0KGkscyx1LGQpe3ZhciBwPXUubGVuZ3RoLHY9cCxiPSFkO2lmKGk9PW51bGwpcmV0dXJuIXY7Zm9yKGk9T2JqZWN0KGkpO3AtLTspe3ZhciB5PXVbcF07aWYoYiYmeVsyXT95WzFdIT09aVt5WzBdXTohKHlbMF1pbiBpKSlyZXR1cm4hMX1mb3IoOysrcDx2Oyl7eT11W3BdO3ZhciBUPXlbMF0sXz1pW1RdLEE9eVsxXTtpZihiJiZ5WzJdKXtpZihfPT09dm9pZCAwJiYhKFQgaW4gaSkpcmV0dXJuITF9ZWxzZXt2YXIgUD1uZXcgUDM7aWYoZCl2YXIgUj1kKF8sQSxULGkscyxQKTtpZighKFI9PT12b2lkIDA/ZW1lKEEsXyxlV3R8dFd0LGQsUCk6UikpcmV0dXJuITF9fXJldHVybiEwfWZ1bmN0aW9uIFJIZShpKXtyZXR1cm4gaT09PWkmJiFhbShpKX1mdW5jdGlvbiByV3QoaSl7Zm9yKHZhciBzPWZtKGkpLHU9cy5sZW5ndGg7dS0tOyl7dmFyIGQ9c1t1XSxwPWlbZF07c1t1XT1bZCxwLFJIZShwKV19cmV0dXJuIHN9ZnVuY3Rpb24gakhlKGkscyl7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiB1PT1udWxsPyExOnVbaV09PT1zJiYocyE9PXZvaWQgMHx8aSBpbiBPYmplY3QodSkpfX1mdW5jdGlvbiBpV3QoaSl7dmFyIHM9cld0KGkpO3JldHVybiBzLmxlbmd0aD09MSYmc1swXVsyXT9qSGUoc1swXVswXSxzWzBdWzFdKTpmdW5jdGlvbih1KXtyZXR1cm4gdT09PWl8fG5XdCh1LGkscyl9fWZ1bmN0aW9uIHNXdChpLHMpe3JldHVybiBpIT1udWxsJiZzIGluIE9iamVjdChpKX1mdW5jdGlvbiAkSGUoaSxzLHUpe3M9JFEocyxpKTtmb3IodmFyIGQ9LTEscD1zLmxlbmd0aCx2PSExOysrZDxwOyl7dmFyIGI9d1Ioc1tkXSk7aWYoISh2PWkhPW51bGwmJnUoaSxiKSkpYnJlYWs7aT1pW2JdfXJldHVybiB2fHwrK2QhPXA/djoocD1pPT1udWxsPzA6aS5sZW5ndGgsISFwJiZ3MmUocCkmJkZYKGIscCkmJihEMChpKXx8bUQoaSkpKX1mdW5jdGlvbiB6SGUoaSxzKXtyZXR1cm4gaSE9bnVsbCYmJEhlKGkscyxzV3QpfXZhciBhV3Q9MSxvV3Q9MjtmdW5jdGlvbiBjV3QoaSxzKXtyZXR1cm4gV2JlKGkpJiZSSGUocyk/akhlKHdSKGkpLHMpOmZ1bmN0aW9uKHUpe3ZhciBkPXRHdCh1LGkpO3JldHVybiBkPT09dm9pZCAwJiZkPT09cz96SGUodSxpKTplbWUocyxkLGFXdHxvV3QpfX1mdW5jdGlvbiB1V3QoaSl7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiBzPT1udWxsP3ZvaWQgMDpzW2ldfX1mdW5jdGlvbiBsV3QoaSl7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiB6UShzLGkpfX1mdW5jdGlvbiBoV3QoaSl7cmV0dXJuIFdiZShpKT91V3Qod1IoaSkpOmxXdChpKX1mdW5jdGlvbiBJOShpKXtyZXR1cm4gdHlwZW9mIGk9PSJmdW5jdGlvbiI/aTppPT1udWxsP09DOnR5cGVvZiBpPT0ib2JqZWN0Ij9EMChpKT9jV3QoaVswXSxpWzFdKTppV3QoaSk6aFd0KGkpfWZ1bmN0aW9uIHRtZShpLHMpe3JldHVybiBpJiZiMmUoaSxzLGZtKX1mdW5jdGlvbiBmV3QoaSxzKXtyZXR1cm4gZnVuY3Rpb24odSxkKXtpZih1PT1udWxsKXJldHVybiB1O2lmKCF3OSh1KSlyZXR1cm4gaSh1LGQpO2Zvcih2YXIgcD11Lmxlbmd0aCx2PXM/cDotMSxiPU9iamVjdCh1KTsocz92LS06Kyt2PHApJiZkKGJbdl0sdixiKSE9PSExOyk7cmV0dXJuIHV9fXZhciBkV3Q9Zld0KHRtZSk7Y29uc3QgVlE9ZFd0O3ZhciBnV3Q9ZnVuY3Rpb24oKXtyZXR1cm4gTjMuRGF0ZS5ub3coKX07Y29uc3QgcUhlPWdXdDt2YXIgSEhlPU9iamVjdC5wcm90b3R5cGUscFd0PUhIZS5oYXNPd25Qcm9wZXJ0eSxiV3Q9UlgoZnVuY3Rpb24oaSxzKXtpPU9iamVjdChpKTt2YXIgdT0tMSxkPXMubGVuZ3RoLHA9ZD4yP3NbMl06dm9pZCAwO2ZvcihwJiZRRihzWzBdLHNbMV0scCkmJihkPTEpOysrdTxkOylmb3IodmFyIHY9c1t1XSxiPUlDKHYpLHk9LTEsVD1iLmxlbmd0aDsrK3k8VDspe3ZhciBfPWJbeV0sQT1pW19dOyhBPT09dm9pZCAwfHxwRChBLEhIZVtfXSkmJiFwV3QuY2FsbChpLF8pKSYmKGlbX109dltfXSl9cmV0dXJuIGl9KTtjb25zdCAkRD1iV3Q7ZnVuY3Rpb24gbVd0KGkscyx1KXtmb3IodmFyIGQ9LTEscD1pPT1udWxsPzA6aS5sZW5ndGg7KytkPHA7KWlmKHUocyxpW2RdKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBVUShpKXt2YXIgcz1pPT1udWxsPzA6aS5sZW5ndGg7cmV0dXJuIHM/aVtzLTFdOnZvaWQgMH1mdW5jdGlvbiBubWUoaSl7cmV0dXJuIHR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6T0N9ZnVuY3Rpb24gQXIoaSxzKXt2YXIgdT1EMChpKT9wSGU6VlE7cmV0dXJuIHUoaSxubWUocykpfWZ1bmN0aW9uIHZXdChpLHMpe3ZhciB1PVtdO3JldHVybiBWUShpLGZ1bmN0aW9uKGQscCx2KXtzKGQscCx2KSYmdS5wdXNoKGQpfSksdX1mdW5jdGlvbiBqNyhpLHMpe3ZhciB1PUQwKGkpP3dIZTp2V3Q7cmV0dXJuIHUoaSxJOShzKSl9ZnVuY3Rpb24gd1d0KGkpe3JldHVybiBmdW5jdGlvbihzLHUsZCl7dmFyIHA9T2JqZWN0KHMpO2lmKCF3OShzKSl7dmFyIHY9STkodSk7cz1mbShzKSx1PWZ1bmN0aW9uKHkpe3JldHVybiB2KHBbeV0seSxwKX19dmFyIGI9aShzLHUsZCk7cmV0dXJuIGI+LTE/cFt2P3NbYl06Yl06dm9pZCAwfX12YXIgeVd0PU1hdGgubWF4O2Z1bmN0aW9uIHhXdChpLHMsdSl7dmFyIGQ9aT09bnVsbD8wOmkubGVuZ3RoO2lmKCFkKXJldHVybi0xO3ZhciBwPXU9PW51bGw/MDokVXQodSk7cmV0dXJuIHA8MCYmKHA9eVd0KGQrcCwwKSksYkhlKGksSTkocykscCl9dmFyIGtXdD13V3QoeFd0KTtjb25zdCBybWU9a1d0O2Z1bmN0aW9uIFZIZShpLHMpe3ZhciB1PS0xLGQ9dzkoaSk/QXJyYXkoaS5sZW5ndGgpOltdO3JldHVybiBWUShpLGZ1bmN0aW9uKHAsdixiKXtkWysrdV09cyhwLHYsYil9KSxkfWZ1bmN0aW9uIFAwKGkscyl7dmFyIHU9RDAoaSk/UkQ6VkhlO3JldHVybiB1KGksSTkocykpfWZ1bmN0aW9uIEVXdChpLHMpe3JldHVybiBpPT1udWxsP2k6YjJlKGksbm1lKHMpLElDKX1mdW5jdGlvbiBUV3QoaSxzKXtyZXR1cm4gaSYmdG1lKGksbm1lKHMpKX1mdW5jdGlvbiBDV3QoaSxzKXtyZXR1cm4gaT5zfXZhciBTV3Q9T2JqZWN0LnByb3RvdHlwZSxfV3Q9U1d0Lmhhc093blByb3BlcnR5O2Z1bmN0aW9uIEFXdChpLHMpe3JldHVybiBpIT1udWxsJiZfV3QuY2FsbChpLHMpfWZ1bmN0aW9uIExvKGkscyl7cmV0dXJuIGkhPW51bGwmJiRIZShpLHMsQVd0KX1mdW5jdGlvbiBMV3QoaSxzKXtyZXR1cm4gUkQocyxmdW5jdGlvbih1KXtyZXR1cm4gaVt1XX0pfWZ1bmN0aW9uICQ3KGkpe3JldHVybiBpPT1udWxsP1tdOkxXdChpLGZtKGkpKX1mdW5jdGlvbiBRZihpKXtyZXR1cm4gaT09PXZvaWQgMH1mdW5jdGlvbiBVSGUoaSxzKXtyZXR1cm4gaTxzfWZ1bmN0aW9uIEdRKGkscyl7dmFyIHU9e307cmV0dXJuIHM9STkocyksdG1lKGksZnVuY3Rpb24oZCxwLHYpe0RYKHUscCxzKGQscCx2KSl9KSx1fWZ1bmN0aW9uIGltZShpLHMsdSl7Zm9yKHZhciBkPS0xLHA9aS5sZW5ndGg7KytkPHA7KXt2YXIgdj1pW2RdLGI9cyh2KTtpZihiIT1udWxsJiYoeT09PXZvaWQgMD9iPT09YiYmIVZDKGIpOnUoYix5KSkpdmFyIHk9YixUPXZ9cmV0dXJuIFR9ZnVuY3Rpb24gVUMoaSl7cmV0dXJuIGkmJmkubGVuZ3RoP2ltZShpLE9DLENXdCk6dm9pZCAwfWZ1bmN0aW9uIGtSKGkpe3JldHVybiBpJiZpLmxlbmd0aD9pbWUoaSxPQyxVSGUpOnZvaWQgMH1mdW5jdGlvbiBzbWUoaSxzKXtyZXR1cm4gaSYmaS5sZW5ndGg/aW1lKGksSTkocyksVUhlKTp2b2lkIDB9ZnVuY3Rpb24gTVd0KGkscyx1LGQpe2lmKCFhbShpKSlyZXR1cm4gaTtzPSRRKHMsaSk7Zm9yKHZhciBwPS0xLHY9cy5sZW5ndGgsYj12LTEseT1pO3khPW51bGwmJisrcDx2Oyl7dmFyIFQ9d1Ioc1twXSksXz11O2lmKFQ9PT0iX19wcm90b19fInx8VD09PSJjb25zdHJ1Y3RvciJ8fFQ9PT0icHJvdG90eXBlIilyZXR1cm4gaTtpZihwIT1iKXt2YXIgQT15W1RdO189ZD9kKEEsVCx5KTp2b2lkIDAsXz09PXZvaWQgMCYmKF89YW0oQSk/QTpGWChzW3ArMV0pP1tdOnt9KX1CWCh5LFQsXykseT15W1RdfXJldHVybiBpfWZ1bmN0aW9uIERXdChpLHMsdSl7Zm9yKHZhciBkPS0xLHA9cy5sZW5ndGgsdj17fTsrK2Q8cDspe3ZhciBiPXNbZF0seT16UShpLGIpO3UoeSxiKSYmTVd0KHYsJFEoYixpKSx5KX1yZXR1cm4gdn1mdW5jdGlvbiBJV3QoaSxzKXt2YXIgdT1pLmxlbmd0aDtmb3IoaS5zb3J0KHMpO3UtLTspaVt1XT1pW3VdLnZhbHVlO3JldHVybiBpfWZ1bmN0aW9uIE9XdChpLHMpe2lmKGkhPT1zKXt2YXIgdT1pIT09dm9pZCAwLGQ9aT09PW51bGwscD1pPT09aSx2PVZDKGkpLGI9cyE9PXZvaWQgMCx5PXM9PT1udWxsLFQ9cz09PXMsXz1WQyhzKTtpZigheSYmIV8mJiF2JiZpPnN8fHYmJmImJlQmJiF5JiYhX3x8ZCYmYiYmVHx8IXUmJlR8fCFwKXJldHVybiAxO2lmKCFkJiYhdiYmIV8mJmk8c3x8XyYmdSYmcCYmIWQmJiF2fHx5JiZ1JiZwfHwhYiYmcHx8IVQpcmV0dXJuLTF9cmV0dXJuIDB9ZnVuY3Rpb24gTld0KGkscyx1KXtmb3IodmFyIGQ9LTEscD1pLmNyaXRlcmlhLHY9cy5jcml0ZXJpYSxiPXAubGVuZ3RoLHk9dS5sZW5ndGg7KytkPGI7KXt2YXIgVD1PV3QocFtkXSx2W2RdKTtpZihUKXtpZihkPj15KXJldHVybiBUO3ZhciBfPXVbZF07cmV0dXJuIFQqKF89PSJkZXNjIj8tMToxKX19cmV0dXJuIGkuaW5kZXgtcy5pbmRleH1mdW5jdGlvbiBQV3QoaSxzLHUpe3MubGVuZ3RoP3M9UkQocyxmdW5jdGlvbih2KXtyZXR1cm4gRDAodik/ZnVuY3Rpb24oYil7cmV0dXJuIHpRKGIsdi5sZW5ndGg9PT0xP3ZbMF06dil9OnZ9KTpzPVtPQ107dmFyIGQ9LTE7cz1SRChzLE5YKEk5KSk7dmFyIHA9VkhlKGksZnVuY3Rpb24odixiLHkpe3ZhciBUPVJEKHMsZnVuY3Rpb24oXyl7cmV0dXJuIF8odil9KTtyZXR1cm57Y3JpdGVyaWE6VCxpbmRleDorK2QsdmFsdWU6dn19KTtyZXR1cm4gSVd0KHAsZnVuY3Rpb24odixiKXtyZXR1cm4gTld0KHYsYix1KX0pfWZ1bmN0aW9uIEJXdChpLHMpe3JldHVybiBEV3QoaSxzLGZ1bmN0aW9uKHUsZCl7cmV0dXJuIHpIZShpLGQpfSl9dmFyIEZXdD1yR3QoZnVuY3Rpb24oaSxzKXtyZXR1cm4gaT09bnVsbD97fTpCV3QoaSxzKX0pO2NvbnN0IEVSPUZXdDt2YXIgUld0PU1hdGguY2VpbCxqV3Q9TWF0aC5tYXg7ZnVuY3Rpb24gJFd0KGkscyx1LGQpe2Zvcih2YXIgcD0tMSx2PWpXdChSV3QoKHMtaSkvKHV8fDEpKSwwKSxiPUFycmF5KHYpO3YtLTspYltkP3Y6KytwXT1pLGkrPXU7cmV0dXJuIGJ9ZnVuY3Rpb24geld0KGkpe3JldHVybiBmdW5jdGlvbihzLHUsZCl7cmV0dXJuIGQmJnR5cGVvZiBkIT0ibnVtYmVyIiYmUUYocyx1LGQpJiYodT1kPXZvaWQgMCkscz1qUShzKSx1PT09dm9pZCAwPyh1PXMscz0wKTp1PWpRKHUpLGQ9ZD09PXZvaWQgMD9zPHU/MTotMTpqUShkKSwkV3Qocyx1LGQsaSl9fXZhciBxV3Q9eld0KCk7Y29uc3QgR0M9cVd0O2Z1bmN0aW9uIEhXdChpLHMsdSxkLHApe3JldHVybiBwKGksZnVuY3Rpb24odixiLHkpe3U9ZD8oZD0hMSx2KTpzKHUsdixiLHkpfSksdX1mdW5jdGlvbiBUUihpLHMsdSl7dmFyIGQ9RDAoaSk/aUd0OkhXdCxwPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gZChpLEk5KHMpLHUscCxWUSl9dmFyIFZXdD1SWChmdW5jdGlvbihpLHMpe2lmKGk9PW51bGwpcmV0dXJuW107dmFyIHU9cy5sZW5ndGg7cmV0dXJuIHU+MSYmUUYoaSxzWzBdLHNbMV0pP3M9W106dT4yJiZRRihzWzBdLHNbMV0sc1syXSkmJihzPVtzWzBdXSksUFd0KGkscVEocywxKSxbXSl9KTtjb25zdCBDUj1WV3Q7dmFyIFVXdD0xLzAsR1d0PUNEJiYxL0piZShuZXcgQ0QoWywtMF0pKVsxXT09VVd0P2Z1bmN0aW9uKGkpe3JldHVybiBuZXcgQ0QoaSl9OnpVdDtjb25zdCBLV3Q9R1d0O3ZhciBXV3Q9MjAwO2Z1bmN0aW9uIFlXdChpLHMsdSl7dmFyIGQ9LTEscD1VVXQsdj1pLmxlbmd0aCxiPSEwLHk9W10sVD15O2lmKHUpYj0hMSxwPW1XdDtlbHNlIGlmKHY+PVdXdCl7dmFyIF89cz9udWxsOktXdChpKTtpZihfKXJldHVybiBKYmUoXyk7Yj0hMSxwPUlIZSxUPW5ldyB4Un1lbHNlIFQ9cz9bXTp5O2U6Zm9yKDsrK2Q8djspe3ZhciBBPWlbZF0sUD1zP3MoQSk6QTtpZihBPXV8fEEhPT0wP0E6MCxiJiZQPT09UCl7Zm9yKHZhciBSPVQubGVuZ3RoO1ItLTspaWYoVFtSXT09PVApY29udGludWUgZTtzJiZULnB1c2goUCkseS5wdXNoKEEpfWVsc2UgcChULFAsdSl8fChUIT09eSYmVC5wdXNoKFApLHkucHVzaChBKSl9cmV0dXJuIHl9dmFyIFhXdD1SWChmdW5jdGlvbihpKXtyZXR1cm4gWVd0KHFRKGksMSxKUmUsITApKX0pO2NvbnN0IFFXdD1YV3Q7dmFyIEpXdD0wO2Z1bmN0aW9uIEtRKGkpe3ZhciBzPSsrSld0O3JldHVybiBtSGUoaSkrc31mdW5jdGlvbiBaV3QoaSxzLHUpe2Zvcih2YXIgZD0tMSxwPWkubGVuZ3RoLHY9cy5sZW5ndGgsYj17fTsrK2Q8cDspe3ZhciB5PWQ8dj9zW2RdOnZvaWQgMDt1KGIsaVtkXSx5KX1yZXR1cm4gYn1mdW5jdGlvbiBlWXQoaSxzKXtyZXR1cm4gWld0KGl8fFtdLHN8fFtdLEJYKX12YXIgdFl0PSJcMCIsS0M9IlwwIixHSGU9IgEiO2NsYXNzIEIwe2NvbnN0cnVjdG9yKHM9e30pe3RoaXMuX2lzRGlyZWN0ZWQ9TG8ocywiZGlyZWN0ZWQiKT9zLmRpcmVjdGVkOiEwLHRoaXMuX2lzTXVsdGlncmFwaD1MbyhzLCJtdWx0aWdyYXBoIik/cy5tdWx0aWdyYXBoOiExLHRoaXMuX2lzQ29tcG91bmQ9TG8ocywiY29tcG91bmQiKT9zLmNvbXBvdW5kOiExLHRoaXMuX2xhYmVsPXZvaWQgMCx0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49eUQodm9pZCAwKSx0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm49eUQodm9pZCAwKSx0aGlzLl9ub2Rlcz17fSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcGFyZW50PXt9LHRoaXMuX2NoaWxkcmVuPXt9LHRoaXMuX2NoaWxkcmVuW0tDXT17fSksdGhpcy5faW49e30sdGhpcy5fcHJlZHM9e30sdGhpcy5fb3V0PXt9LHRoaXMuX3N1Y3M9e30sdGhpcy5fZWRnZU9ianM9e30sdGhpcy5fZWRnZUxhYmVscz17fX1pc0RpcmVjdGVkKCl7cmV0dXJuIHRoaXMuX2lzRGlyZWN0ZWR9aXNNdWx0aWdyYXBoKCl7cmV0dXJuIHRoaXMuX2lzTXVsdGlncmFwaH1pc0NvbXBvdW5kKCl7cmV0dXJuIHRoaXMuX2lzQ29tcG91bmR9c2V0R3JhcGgocyl7cmV0dXJuIHRoaXMuX2xhYmVsPXMsdGhpc31ncmFwaCgpe3JldHVybiB0aGlzLl9sYWJlbH1zZXREZWZhdWx0Tm9kZUxhYmVsKHMpe3JldHVybiBnRChzKXx8KHM9eUQocykpLHRoaXMuX2RlZmF1bHROb2RlTGFiZWxGbj1zLHRoaXN9bm9kZUNvdW50KCl7cmV0dXJuIHRoaXMuX25vZGVDb3VudH1ub2Rlcygpe3JldHVybiBmbSh0aGlzLl9ub2Rlcyl9c291cmNlcygpe3ZhciBzPXRoaXM7cmV0dXJuIGo3KHRoaXMubm9kZXMoKSxmdW5jdGlvbih1KXtyZXR1cm4gaVIocy5faW5bdV0pfSl9c2lua3MoKXt2YXIgcz10aGlzO3JldHVybiBqNyh0aGlzLm5vZGVzKCksZnVuY3Rpb24odSl7cmV0dXJuIGlSKHMuX291dFt1XSl9KX1zZXROb2RlcyhzLHUpe3ZhciBkPWFyZ3VtZW50cyxwPXRoaXM7cmV0dXJuIEFyKHMsZnVuY3Rpb24odil7ZC5sZW5ndGg+MT9wLnNldE5vZGUodix1KTpwLnNldE5vZGUodil9KSx0aGlzfXNldE5vZGUocyx1KXtyZXR1cm4gTG8odGhpcy5fbm9kZXMscyk/KGFyZ3VtZW50cy5sZW5ndGg+MSYmKHRoaXMuX25vZGVzW3NdPXUpLHRoaXMpOih0aGlzLl9ub2Rlc1tzXT1hcmd1bWVudHMubGVuZ3RoPjE/dTp0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm4ocyksdGhpcy5faXNDb21wb3VuZCYmKHRoaXMuX3BhcmVudFtzXT1LQyx0aGlzLl9jaGlsZHJlbltzXT17fSx0aGlzLl9jaGlsZHJlbltLQ11bc109ITApLHRoaXMuX2luW3NdPXt9LHRoaXMuX3ByZWRzW3NdPXt9LHRoaXMuX291dFtzXT17fSx0aGlzLl9zdWNzW3NdPXt9LCsrdGhpcy5fbm9kZUNvdW50LHRoaXMpfW5vZGUocyl7cmV0dXJuIHRoaXMuX25vZGVzW3NdfWhhc05vZGUocyl7cmV0dXJuIExvKHRoaXMuX25vZGVzLHMpfXJlbW92ZU5vZGUocyl7dmFyIHU9dGhpcztpZihMbyh0aGlzLl9ub2RlcyxzKSl7dmFyIGQ9ZnVuY3Rpb24ocCl7dS5yZW1vdmVFZGdlKHUuX2VkZ2VPYmpzW3BdKX07ZGVsZXRlIHRoaXMuX25vZGVzW3NdLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChzKSxkZWxldGUgdGhpcy5fcGFyZW50W3NdLEFyKHRoaXMuY2hpbGRyZW4ocyksZnVuY3Rpb24ocCl7dS5zZXRQYXJlbnQocCl9KSxkZWxldGUgdGhpcy5fY2hpbGRyZW5bc10pLEFyKGZtKHRoaXMuX2luW3NdKSxkKSxkZWxldGUgdGhpcy5faW5bc10sZGVsZXRlIHRoaXMuX3ByZWRzW3NdLEFyKGZtKHRoaXMuX291dFtzXSksZCksZGVsZXRlIHRoaXMuX291dFtzXSxkZWxldGUgdGhpcy5fc3Vjc1tzXSwtLXRoaXMuX25vZGVDb3VudH1yZXR1cm4gdGhpc31zZXRQYXJlbnQocyx1KXtpZighdGhpcy5faXNDb21wb3VuZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgcGFyZW50IGluIGEgbm9uLWNvbXBvdW5kIGdyYXBoIik7aWYoUWYodSkpdT1LQztlbHNle3UrPSIiO2Zvcih2YXIgZD11OyFRZihkKTtkPXRoaXMucGFyZW50KGQpKWlmKGQ9PT1zKXRocm93IG5ldyBFcnJvcigiU2V0dGluZyAiK3UrIiBhcyBwYXJlbnQgb2YgIitzKyIgd291bGQgY3JlYXRlIGEgY3ljbGUiKTt0aGlzLnNldE5vZGUodSl9cmV0dXJuIHRoaXMuc2V0Tm9kZShzKSx0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChzKSx0aGlzLl9wYXJlbnRbc109dSx0aGlzLl9jaGlsZHJlblt1XVtzXT0hMCx0aGlzfV9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChzKXtkZWxldGUgdGhpcy5fY2hpbGRyZW5bdGhpcy5fcGFyZW50W3NdXVtzXX1wYXJlbnQocyl7aWYodGhpcy5faXNDb21wb3VuZCl7dmFyIHU9dGhpcy5fcGFyZW50W3NdO2lmKHUhPT1LQylyZXR1cm4gdX19Y2hpbGRyZW4ocyl7aWYoUWYocykmJihzPUtDKSx0aGlzLl9pc0NvbXBvdW5kKXt2YXIgdT10aGlzLl9jaGlsZHJlbltzXTtpZih1KXJldHVybiBmbSh1KX1lbHNle2lmKHM9PT1LQylyZXR1cm4gdGhpcy5ub2RlcygpO2lmKHRoaXMuaGFzTm9kZShzKSlyZXR1cm5bXX19cHJlZGVjZXNzb3JzKHMpe3ZhciB1PXRoaXMuX3ByZWRzW3NdO2lmKHUpcmV0dXJuIGZtKHUpfXN1Y2Nlc3NvcnMocyl7dmFyIHU9dGhpcy5fc3Vjc1tzXTtpZih1KXJldHVybiBmbSh1KX1uZWlnaGJvcnMocyl7dmFyIHU9dGhpcy5wcmVkZWNlc3NvcnMocyk7aWYodSlyZXR1cm4gUVd0KHUsdGhpcy5zdWNjZXNzb3JzKHMpKX1pc0xlYWYocyl7dmFyIHU7cmV0dXJuIHRoaXMuaXNEaXJlY3RlZCgpP3U9dGhpcy5zdWNjZXNzb3JzKHMpOnU9dGhpcy5uZWlnaGJvcnMocyksdS5sZW5ndGg9PT0wfWZpbHRlck5vZGVzKHMpe3ZhciB1PW5ldyB0aGlzLmNvbnN0cnVjdG9yKHtkaXJlY3RlZDp0aGlzLl9pc0RpcmVjdGVkLG11bHRpZ3JhcGg6dGhpcy5faXNNdWx0aWdyYXBoLGNvbXBvdW5kOnRoaXMuX2lzQ29tcG91bmR9KTt1LnNldEdyYXBoKHRoaXMuZ3JhcGgoKSk7dmFyIGQ9dGhpcztBcih0aGlzLl9ub2RlcyxmdW5jdGlvbihiLHkpe3MoeSkmJnUuc2V0Tm9kZSh5LGIpfSksQXIodGhpcy5fZWRnZU9ianMsZnVuY3Rpb24oYil7dS5oYXNOb2RlKGIudikmJnUuaGFzTm9kZShiLncpJiZ1LnNldEVkZ2UoYixkLmVkZ2UoYikpfSk7dmFyIHA9e307ZnVuY3Rpb24gdihiKXt2YXIgeT1kLnBhcmVudChiKTtyZXR1cm4geT09PXZvaWQgMHx8dS5oYXNOb2RlKHkpPyhwW2JdPXkseSk6eSBpbiBwP3BbeV06dih5KX1yZXR1cm4gdGhpcy5faXNDb21wb3VuZCYmQXIodS5ub2RlcygpLGZ1bmN0aW9uKGIpe3Uuc2V0UGFyZW50KGIsdihiKSl9KSx1fXNldERlZmF1bHRFZGdlTGFiZWwocyl7cmV0dXJuIGdEKHMpfHwocz15RChzKSksdGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuPXMsdGhpc31lZGdlQ291bnQoKXtyZXR1cm4gdGhpcy5fZWRnZUNvdW50fWVkZ2VzKCl7cmV0dXJuICQ3KHRoaXMuX2VkZ2VPYmpzKX1zZXRQYXRoKHMsdSl7dmFyIGQ9dGhpcyxwPWFyZ3VtZW50cztyZXR1cm4gVFIocyxmdW5jdGlvbih2LGIpe3JldHVybiBwLmxlbmd0aD4xP2Quc2V0RWRnZSh2LGIsdSk6ZC5zZXRFZGdlKHYsYiksYn0pLHRoaXN9c2V0RWRnZSgpe3ZhciBzLHUsZCxwLHY9ITEsYj1hcmd1bWVudHNbMF07dHlwZW9mIGI9PSJvYmplY3QiJiZiIT09bnVsbCYmInYiaW4gYj8ocz1iLnYsdT1iLncsZD1iLm5hbWUsYXJndW1lbnRzLmxlbmd0aD09PTImJihwPWFyZ3VtZW50c1sxXSx2PSEwKSk6KHM9Yix1PWFyZ3VtZW50c1sxXSxkPWFyZ3VtZW50c1szXSxhcmd1bWVudHMubGVuZ3RoPjImJihwPWFyZ3VtZW50c1syXSx2PSEwKSkscz0iIitzLHU9IiIrdSxRZihkKXx8KGQ9IiIrZCk7dmFyIHk9U1IodGhpcy5faXNEaXJlY3RlZCxzLHUsZCk7aWYoTG8odGhpcy5fZWRnZUxhYmVscyx5KSlyZXR1cm4gdiYmKHRoaXMuX2VkZ2VMYWJlbHNbeV09cCksdGhpcztpZighUWYoZCkmJiF0aGlzLl9pc011bHRpZ3JhcGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IGEgbmFtZWQgZWRnZSB3aGVuIGlzTXVsdGlncmFwaCA9IGZhbHNlIik7dGhpcy5zZXROb2RlKHMpLHRoaXMuc2V0Tm9kZSh1KSx0aGlzLl9lZGdlTGFiZWxzW3ldPXY/cDp0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm4ocyx1LGQpO3ZhciBUPW5ZdCh0aGlzLl9pc0RpcmVjdGVkLHMsdSxkKTtyZXR1cm4gcz1ULnYsdT1ULncsT2JqZWN0LmZyZWV6ZShUKSx0aGlzLl9lZGdlT2Jqc1t5XT1ULEtIZSh0aGlzLl9wcmVkc1t1XSxzKSxLSGUodGhpcy5fc3Vjc1tzXSx1KSx0aGlzLl9pblt1XVt5XT1ULHRoaXMuX291dFtzXVt5XT1ULHRoaXMuX2VkZ2VDb3VudCsrLHRoaXN9ZWRnZShzLHUsZCl7dmFyIHA9YXJndW1lbnRzLmxlbmd0aD09PTE/YW1lKHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTpTUih0aGlzLl9pc0RpcmVjdGVkLHMsdSxkKTtyZXR1cm4gdGhpcy5fZWRnZUxhYmVsc1twXX1oYXNFZGdlKHMsdSxkKXt2YXIgcD1hcmd1bWVudHMubGVuZ3RoPT09MT9hbWUodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOlNSKHRoaXMuX2lzRGlyZWN0ZWQscyx1LGQpO3JldHVybiBMbyh0aGlzLl9lZGdlTGFiZWxzLHApfXJlbW92ZUVkZ2Uocyx1LGQpe3ZhciBwPWFyZ3VtZW50cy5sZW5ndGg9PT0xP2FtZSh0aGlzLl9pc0RpcmVjdGVkLGFyZ3VtZW50c1swXSk6U1IodGhpcy5faXNEaXJlY3RlZCxzLHUsZCksdj10aGlzLl9lZGdlT2Jqc1twXTtyZXR1cm4gdiYmKHM9di52LHU9di53LGRlbGV0ZSB0aGlzLl9lZGdlTGFiZWxzW3BdLGRlbGV0ZSB0aGlzLl9lZGdlT2Jqc1twXSxXSGUodGhpcy5fcHJlZHNbdV0scyksV0hlKHRoaXMuX3N1Y3Nbc10sdSksZGVsZXRlIHRoaXMuX2luW3VdW3BdLGRlbGV0ZSB0aGlzLl9vdXRbc11bcF0sdGhpcy5fZWRnZUNvdW50LS0pLHRoaXN9aW5FZGdlcyhzLHUpe3ZhciBkPXRoaXMuX2luW3NdO2lmKGQpe3ZhciBwPSQ3KGQpO3JldHVybiB1P2o3KHAsZnVuY3Rpb24odil7cmV0dXJuIHYudj09PXV9KTpwfX1vdXRFZGdlcyhzLHUpe3ZhciBkPXRoaXMuX291dFtzXTtpZihkKXt2YXIgcD0kNyhkKTtyZXR1cm4gdT9qNyhwLGZ1bmN0aW9uKHYpe3JldHVybiB2Lnc9PT11fSk6cH19bm9kZUVkZ2VzKHMsdSl7dmFyIGQ9dGhpcy5pbkVkZ2VzKHMsdSk7aWYoZClyZXR1cm4gZC5jb25jYXQodGhpcy5vdXRFZGdlcyhzLHUpKX19QjAucHJvdG90eXBlLl9ub2RlQ291bnQ9MCxCMC5wcm90b3R5cGUuX2VkZ2VDb3VudD0wO2Z1bmN0aW9uIEtIZShpLHMpe2lbc10/aVtzXSsrOmlbc109MX1mdW5jdGlvbiBXSGUoaSxzKXstLWlbc118fGRlbGV0ZSBpW3NdfWZ1bmN0aW9uIFNSKGkscyx1LGQpe3ZhciBwPSIiK3Msdj0iIit1O2lmKCFpJiZwPnYpe3ZhciBiPXA7cD12LHY9Yn1yZXR1cm4gcCtHSGUrditHSGUrKFFmKGQpP3RZdDpkKX1mdW5jdGlvbiBuWXQoaSxzLHUsZCl7dmFyIHA9IiIrcyx2PSIiK3U7aWYoIWkmJnA+dil7dmFyIGI9cDtwPXYsdj1ifXZhciB5PXt2OnAsdzp2fTtyZXR1cm4gZCYmKHkubmFtZT1kKSx5fWZ1bmN0aW9uIGFtZShpLHMpe3JldHVybiBTUihpLHMudixzLncscy5uYW1lKX1jbGFzcyByWXR7Y29uc3RydWN0b3IoKXt2YXIgcz17fTtzLl9uZXh0PXMuX3ByZXY9cyx0aGlzLl9zZW50aW5lbD1zfWRlcXVldWUoKXt2YXIgcz10aGlzLl9zZW50aW5lbCx1PXMuX3ByZXY7aWYodSE9PXMpcmV0dXJuIFlIZSh1KSx1fWVucXVldWUocyl7dmFyIHU9dGhpcy5fc2VudGluZWw7cy5fcHJldiYmcy5fbmV4dCYmWUhlKHMpLHMuX25leHQ9dS5fbmV4dCx1Ll9uZXh0Ll9wcmV2PXMsdS5fbmV4dD1zLHMuX3ByZXY9dX10b1N0cmluZygpe2Zvcih2YXIgcz1bXSx1PXRoaXMuX3NlbnRpbmVsLGQ9dS5fcHJldjtkIT09dTspcy5wdXNoKEpTT04uc3RyaW5naWZ5KGQsaVl0KSksZD1kLl9wcmV2O3JldHVybiJbIitzLmpvaW4oIiwgIikrIl0ifX1mdW5jdGlvbiBZSGUoaSl7aS5fcHJldi5fbmV4dD1pLl9uZXh0LGkuX25leHQuX3ByZXY9aS5fcHJldixkZWxldGUgaS5fbmV4dCxkZWxldGUgaS5fcHJldn1mdW5jdGlvbiBpWXQoaSxzKXtpZihpIT09Il9uZXh0IiYmaSE9PSJfcHJldiIpcmV0dXJuIHN9dmFyIHNZdD15RCgxKTtmdW5jdGlvbiBhWXQoaSxzKXtpZihpLm5vZGVDb3VudCgpPD0xKXJldHVybltdO3ZhciB1PWNZdChpLHN8fHNZdCksZD1vWXQodS5ncmFwaCx1LmJ1Y2tldHMsdS56ZXJvSWR4KTtyZXR1cm4gakQoUDAoZCxmdW5jdGlvbihwKXtyZXR1cm4gaS5vdXRFZGdlcyhwLnYscC53KX0pKX1mdW5jdGlvbiBvWXQoaSxzLHUpe2Zvcih2YXIgZD1bXSxwPXNbcy5sZW5ndGgtMV0sdj1zWzBdLGI7aS5ub2RlQ291bnQoKTspe2Zvcig7Yj12LmRlcXVldWUoKTspb21lKGkscyx1LGIpO2Zvcig7Yj1wLmRlcXVldWUoKTspb21lKGkscyx1LGIpO2lmKGkubm9kZUNvdW50KCkpe2Zvcih2YXIgeT1zLmxlbmd0aC0yO3k+MDstLXkpaWYoYj1zW3ldLmRlcXVldWUoKSxiKXtkPWQuY29uY2F0KG9tZShpLHMsdSxiLCEwKSk7YnJlYWt9fX1yZXR1cm4gZH1mdW5jdGlvbiBvbWUoaSxzLHUsZCxwKXt2YXIgdj1wP1tdOnZvaWQgMDtyZXR1cm4gQXIoaS5pbkVkZ2VzKGQudiksZnVuY3Rpb24oYil7dmFyIHk9aS5lZGdlKGIpLFQ9aS5ub2RlKGIudik7cCYmdi5wdXNoKHt2OmIudix3OmIud30pLFQub3V0LT15LGNtZShzLHUsVCl9KSxBcihpLm91dEVkZ2VzKGQudiksZnVuY3Rpb24oYil7dmFyIHk9aS5lZGdlKGIpLFQ9Yi53LF89aS5ub2RlKFQpO18uaW4tPXksY21lKHMsdSxfKX0pLGkucmVtb3ZlTm9kZShkLnYpLHZ9ZnVuY3Rpb24gY1l0KGkscyl7dmFyIHU9bmV3IEIwLGQ9MCxwPTA7QXIoaS5ub2RlcygpLGZ1bmN0aW9uKHkpe3Uuc2V0Tm9kZSh5LHt2OnksaW46MCxvdXQ6MH0pfSksQXIoaS5lZGdlcygpLGZ1bmN0aW9uKHkpe3ZhciBUPXUuZWRnZSh5LnYseS53KXx8MCxfPXMoeSksQT1UK187dS5zZXRFZGdlKHkudix5LncsQSkscD1NYXRoLm1heChwLHUubm9kZSh5LnYpLm91dCs9XyksZD1NYXRoLm1heChkLHUubm9kZSh5LncpLmluKz1fKX0pO3ZhciB2PUdDKHArZCszKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHJZdH0pLGI9ZCsxO3JldHVybiBBcih1Lm5vZGVzKCksZnVuY3Rpb24oeSl7Y21lKHYsYix1Lm5vZGUoeSkpfSkse2dyYXBoOnUsYnVja2V0czp2LHplcm9JZHg6Yn19ZnVuY3Rpb24gY21lKGkscyx1KXt1Lm91dD91LmluP2lbdS5vdXQtdS5pbitzXS5lbnF1ZXVlKHUpOmlbaS5sZW5ndGgtMV0uZW5xdWV1ZSh1KTppWzBdLmVucXVldWUodSl9ZnVuY3Rpb24gdVl0KGkpe3ZhciBzPWkuZ3JhcGgoKS5hY3ljbGljZXI9PT0iZ3JlZWR5Ij9hWXQoaSx1KGkpKTpsWXQoaSk7QXIocyxmdW5jdGlvbihkKXt2YXIgcD1pLmVkZ2UoZCk7aS5yZW1vdmVFZGdlKGQpLHAuZm9yd2FyZE5hbWU9ZC5uYW1lLHAucmV2ZXJzZWQ9ITAsaS5zZXRFZGdlKGQudyxkLnYscCxLUSgicmV2IikpfSk7ZnVuY3Rpb24gdShkKXtyZXR1cm4gZnVuY3Rpb24ocCl7cmV0dXJuIGQuZWRnZShwKS53ZWlnaHR9fX1mdW5jdGlvbiBsWXQoaSl7dmFyIHM9W10sdT17fSxkPXt9O2Z1bmN0aW9uIHAodil7TG8oZCx2KXx8KGRbdl09ITAsdVt2XT0hMCxBcihpLm91dEVkZ2VzKHYpLGZ1bmN0aW9uKGIpe0xvKHUsYi53KT9zLnB1c2goYik6cChiLncpfSksZGVsZXRlIHVbdl0pfXJldHVybiBBcihpLm5vZGVzKCkscCksc31mdW5jdGlvbiBoWXQoaSl7QXIoaS5lZGdlcygpLGZ1bmN0aW9uKHMpe3ZhciB1PWkuZWRnZShzKTtpZih1LnJldmVyc2VkKXtpLnJlbW92ZUVkZ2Uocyk7dmFyIGQ9dS5mb3J3YXJkTmFtZTtkZWxldGUgdS5yZXZlcnNlZCxkZWxldGUgdS5mb3J3YXJkTmFtZSxpLnNldEVkZ2Uocy53LHMudix1LGQpfX0pfWZ1bmN0aW9uIHpEKGkscyx1LGQpe3ZhciBwO2RvIHA9S1EoZCk7d2hpbGUoaS5oYXNOb2RlKHApKTtyZXR1cm4gdS5kdW1teT1zLGkuc2V0Tm9kZShwLHUpLHB9ZnVuY3Rpb24gZll0KGkpe3ZhciBzPW5ldyBCMCgpLnNldEdyYXBoKGkuZ3JhcGgoKSk7cmV0dXJuIEFyKGkubm9kZXMoKSxmdW5jdGlvbih1KXtzLnNldE5vZGUodSxpLm5vZGUodSkpfSksQXIoaS5lZGdlcygpLGZ1bmN0aW9uKHUpe3ZhciBkPXMuZWRnZSh1LnYsdS53KXx8e3dlaWdodDowLG1pbmxlbjoxfSxwPWkuZWRnZSh1KTtzLnNldEVkZ2UodS52LHUudyx7d2VpZ2h0OmQud2VpZ2h0K3Aud2VpZ2h0LG1pbmxlbjpNYXRoLm1heChkLm1pbmxlbixwLm1pbmxlbil9KX0pLHN9ZnVuY3Rpb24gWEhlKGkpe3ZhciBzPW5ldyBCMCh7bXVsdGlncmFwaDppLmlzTXVsdGlncmFwaCgpfSkuc2V0R3JhcGgoaS5ncmFwaCgpKTtyZXR1cm4gQXIoaS5ub2RlcygpLGZ1bmN0aW9uKHUpe2kuY2hpbGRyZW4odSkubGVuZ3RofHxzLnNldE5vZGUodSxpLm5vZGUodSkpfSksQXIoaS5lZGdlcygpLGZ1bmN0aW9uKHUpe3Muc2V0RWRnZSh1LGkuZWRnZSh1KSl9KSxzfWZ1bmN0aW9uIFFIZShpLHMpe3ZhciB1PWkueCxkPWkueSxwPXMueC11LHY9cy55LWQsYj1pLndpZHRoLzIseT1pLmhlaWdodC8yO2lmKCFwJiYhdil0aHJvdyBuZXcgRXJyb3IoIk5vdCBwb3NzaWJsZSB0byBmaW5kIGludGVyc2VjdGlvbiBpbnNpZGUgb2YgdGhlIHJlY3RhbmdsZSIpO3ZhciBULF87cmV0dXJuIE1hdGguYWJzKHYpKmI+TWF0aC5hYnMocCkqeT8odjwwJiYoeT0teSksVD15KnAvdixfPXkpOihwPDAmJihiPS1iKSxUPWIsXz1iKnYvcCkse3g6dStULHk6ZCtffX1mdW5jdGlvbiBXUShpKXt2YXIgcz1QMChHQyhaSGUoaSkrMSksZnVuY3Rpb24oKXtyZXR1cm5bXX0pO3JldHVybiBBcihpLm5vZGVzKCksZnVuY3Rpb24odSl7dmFyIGQ9aS5ub2RlKHUpLHA9ZC5yYW5rO1FmKHApfHwoc1twXVtkLm9yZGVyXT11KX0pLHN9ZnVuY3Rpb24gZFl0KGkpe3ZhciBzPWtSKFAwKGkubm9kZXMoKSxmdW5jdGlvbih1KXtyZXR1cm4gaS5ub2RlKHUpLnJhbmt9KSk7QXIoaS5ub2RlcygpLGZ1bmN0aW9uKHUpe3ZhciBkPWkubm9kZSh1KTtMbyhkLCJyYW5rIikmJihkLnJhbmstPXMpfSl9ZnVuY3Rpb24gZ1l0KGkpe3ZhciBzPWtSKFAwKGkubm9kZXMoKSxmdW5jdGlvbih2KXtyZXR1cm4gaS5ub2RlKHYpLnJhbmt9KSksdT1bXTtBcihpLm5vZGVzKCksZnVuY3Rpb24odil7dmFyIGI9aS5ub2RlKHYpLnJhbmstczt1W2JdfHwodVtiXT1bXSksdVtiXS5wdXNoKHYpfSk7dmFyIGQ9MCxwPWkuZ3JhcGgoKS5ub2RlUmFua0ZhY3RvcjtBcih1LGZ1bmN0aW9uKHYsYil7UWYodikmJmIlcCE9PTA/LS1kOmQmJkFyKHYsZnVuY3Rpb24oeSl7aS5ub2RlKHkpLnJhbmsrPWR9KX0pfWZ1bmN0aW9uIEpIZShpLHMsdSxkKXt2YXIgcD17d2lkdGg6MCxoZWlnaHQ6MH07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTQmJihwLnJhbms9dSxwLm9yZGVyPWQpLHpEKGksImJvcmRlciIscCxzKX1mdW5jdGlvbiBaSGUoaSl7cmV0dXJuIFVDKFAwKGkubm9kZXMoKSxmdW5jdGlvbihzKXt2YXIgdT1pLm5vZGUocykucmFuaztpZighUWYodSkpcmV0dXJuIHV9KSl9ZnVuY3Rpb24gcFl0KGkscyl7dmFyIHU9e2xoczpbXSxyaHM6W119O3JldHVybiBBcihpLGZ1bmN0aW9uKGQpe3MoZCk/dS5saHMucHVzaChkKTp1LnJocy5wdXNoKGQpfSksdX1mdW5jdGlvbiBiWXQoaSxzKXt2YXIgdT1xSGUoKTt0cnl7cmV0dXJuIHMoKX1maW5hbGx5e2NvbnNvbGUubG9nKGkrIiB0aW1lOiAiKyhxSGUoKS11KSsibXMiKX19ZnVuY3Rpb24gbVl0KGkscyl7cmV0dXJuIHMoKX1mdW5jdGlvbiB2WXQoaSl7ZnVuY3Rpb24gcyh1KXt2YXIgZD1pLmNoaWxkcmVuKHUpLHA9aS5ub2RlKHUpO2lmKGQubGVuZ3RoJiZBcihkLHMpLExvKHAsIm1pblJhbmsiKSl7cC5ib3JkZXJMZWZ0PVtdLHAuYm9yZGVyUmlnaHQ9W107Zm9yKHZhciB2PXAubWluUmFuayxiPXAubWF4UmFuaysxO3Y8YjsrK3YpZVZlKGksImJvcmRlckxlZnQiLCJfYmwiLHUscCx2KSxlVmUoaSwiYm9yZGVyUmlnaHQiLCJfYnIiLHUscCx2KX19QXIoaS5jaGlsZHJlbigpLHMpfWZ1bmN0aW9uIGVWZShpLHMsdSxkLHAsdil7dmFyIGI9e3dpZHRoOjAsaGVpZ2h0OjAscmFuazp2LGJvcmRlclR5cGU6c30seT1wW3NdW3YtMV0sVD16RChpLCJib3JkZXIiLGIsdSk7cFtzXVt2XT1ULGkuc2V0UGFyZW50KFQsZCkseSYmaS5zZXRFZGdlKHksVCx7d2VpZ2h0OjF9KX1mdW5jdGlvbiB3WXQoaSl7dmFyIHM9aS5ncmFwaCgpLnJhbmtkaXIudG9Mb3dlckNhc2UoKTsocz09PSJsciJ8fHM9PT0icmwiKSYmdFZlKGkpfWZ1bmN0aW9uIHlZdChpKXt2YXIgcz1pLmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpOyhzPT09ImJ0Inx8cz09PSJybCIpJiZ4WXQoaSksKHM9PT0ibHIifHxzPT09InJsIikmJihrWXQoaSksdFZlKGkpKX1mdW5jdGlvbiB0VmUoaSl7QXIoaS5ub2RlcygpLGZ1bmN0aW9uKHMpe25WZShpLm5vZGUocykpfSksQXIoaS5lZGdlcygpLGZ1bmN0aW9uKHMpe25WZShpLmVkZ2UocykpfSl9ZnVuY3Rpb24gblZlKGkpe3ZhciBzPWkud2lkdGg7aS53aWR0aD1pLmhlaWdodCxpLmhlaWdodD1zfWZ1bmN0aW9uIHhZdChpKXtBcihpLm5vZGVzKCksZnVuY3Rpb24ocyl7dW1lKGkubm9kZShzKSl9KSxBcihpLmVkZ2VzKCksZnVuY3Rpb24ocyl7dmFyIHU9aS5lZGdlKHMpO0FyKHUucG9pbnRzLHVtZSksTG8odSwieSIpJiZ1bWUodSl9KX1mdW5jdGlvbiB1bWUoaSl7aS55PS1pLnl9ZnVuY3Rpb24ga1l0KGkpe0FyKGkubm9kZXMoKSxmdW5jdGlvbihzKXtsbWUoaS5ub2RlKHMpKX0pLEFyKGkuZWRnZXMoKSxmdW5jdGlvbihzKXt2YXIgdT1pLmVkZ2Uocyk7QXIodS5wb2ludHMsbG1lKSxMbyh1LCJ4IikmJmxtZSh1KX0pfWZ1bmN0aW9uIGxtZShpKXt2YXIgcz1pLng7aS54PWkueSxpLnk9c31mdW5jdGlvbiBFWXQoaSl7aS5ncmFwaCgpLmR1bW15Q2hhaW5zPVtdLEFyKGkuZWRnZXMoKSxmdW5jdGlvbihzKXtUWXQoaSxzKX0pfWZ1bmN0aW9uIFRZdChpLHMpe3ZhciB1PXMudixkPWkubm9kZSh1KS5yYW5rLHA9cy53LHY9aS5ub2RlKHApLnJhbmssYj1zLm5hbWUseT1pLmVkZ2UocyksVD15LmxhYmVsUmFuaztpZih2IT09ZCsxKXtpLnJlbW92ZUVkZ2Uocyk7dmFyIF8sQSxQO2ZvcihQPTAsKytkO2Q8djsrK1AsKytkKXkucG9pbnRzPVtdLEE9e3dpZHRoOjAsaGVpZ2h0OjAsZWRnZUxhYmVsOnksZWRnZU9iajpzLHJhbms6ZH0sXz16RChpLCJlZGdlIixBLCJfZCIpLGQ9PT1UJiYoQS53aWR0aD15LndpZHRoLEEuaGVpZ2h0PXkuaGVpZ2h0LEEuZHVtbXk9ImVkZ2UtbGFiZWwiLEEubGFiZWxwb3M9eS5sYWJlbHBvcyksaS5zZXRFZGdlKHUsXyx7d2VpZ2h0Onkud2VpZ2h0fSxiKSxQPT09MCYmaS5ncmFwaCgpLmR1bW15Q2hhaW5zLnB1c2goXyksdT1fO2kuc2V0RWRnZSh1LHAse3dlaWdodDp5LndlaWdodH0sYil9fWZ1bmN0aW9uIENZdChpKXtBcihpLmdyYXBoKCkuZHVtbXlDaGFpbnMsZnVuY3Rpb24ocyl7dmFyIHU9aS5ub2RlKHMpLGQ9dS5lZGdlTGFiZWwscDtmb3IoaS5zZXRFZGdlKHUuZWRnZU9iaixkKTt1LmR1bW15OylwPWkuc3VjY2Vzc29ycyhzKVswXSxpLnJlbW92ZU5vZGUocyksZC5wb2ludHMucHVzaCh7eDp1LngseTp1Lnl9KSx1LmR1bW15PT09ImVkZ2UtbGFiZWwiJiYoZC54PXUueCxkLnk9dS55LGQud2lkdGg9dS53aWR0aCxkLmhlaWdodD11LmhlaWdodCkscz1wLHU9aS5ub2RlKHMpfSl9ZnVuY3Rpb24gaG1lKGkpe3ZhciBzPXt9O2Z1bmN0aW9uIHUoZCl7dmFyIHA9aS5ub2RlKGQpO2lmKExvKHMsZCkpcmV0dXJuIHAucmFuaztzW2RdPSEwO3ZhciB2PWtSKFAwKGkub3V0RWRnZXMoZCksZnVuY3Rpb24oYil7cmV0dXJuIHUoYi53KS1pLmVkZ2UoYikubWlubGVufSkpO3JldHVybih2PT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfHx2PT09dm9pZCAwfHx2PT09bnVsbCkmJih2PTApLHAucmFuaz12fUFyKGkuc291cmNlcygpLHUpfWZ1bmN0aW9uIF9SKGkscyl7cmV0dXJuIGkubm9kZShzLncpLnJhbmstaS5ub2RlKHMudikucmFuay1pLmVkZ2UocykubWlubGVufWZ1bmN0aW9uIHJWZShpKXt2YXIgcz1uZXcgQjAoe2RpcmVjdGVkOiExfSksdT1pLm5vZGVzKClbMF0sZD1pLm5vZGVDb3VudCgpO3Muc2V0Tm9kZSh1LHt9KTtmb3IodmFyIHAsdjtTWXQocyxpKTxkOylwPV9ZdChzLGkpLHY9cy5oYXNOb2RlKHAudik/X1IoaSxwKTotX1IoaSxwKSxBWXQocyxpLHYpO3JldHVybiBzfWZ1bmN0aW9uIFNZdChpLHMpe2Z1bmN0aW9uIHUoZCl7QXIocy5ub2RlRWRnZXMoZCksZnVuY3Rpb24ocCl7dmFyIHY9cC52LGI9ZD09PXY/cC53OnY7IWkuaGFzTm9kZShiKSYmIV9SKHMscCkmJihpLnNldE5vZGUoYix7fSksaS5zZXRFZGdlKGQsYix7fSksdShiKSl9KX1yZXR1cm4gQXIoaS5ub2RlcygpLHUpLGkubm9kZUNvdW50KCl9ZnVuY3Rpb24gX1l0KGkscyl7cmV0dXJuIHNtZShzLmVkZ2VzKCksZnVuY3Rpb24odSl7aWYoaS5oYXNOb2RlKHUudikhPT1pLmhhc05vZGUodS53KSlyZXR1cm4gX1Iocyx1KX0pfWZ1bmN0aW9uIEFZdChpLHMsdSl7QXIoaS5ub2RlcygpLGZ1bmN0aW9uKGQpe3Mubm9kZShkKS5yYW5rKz11fSl9ZnVuY3Rpb24gTFl0KCl7fUxZdC5wcm90b3R5cGU9bmV3IEVycm9yO2Z1bmN0aW9uIGlWZShpLHMsdSl7RDAocyl8fChzPVtzXSk7dmFyIGQ9KGkuaXNEaXJlY3RlZCgpP2kuc3VjY2Vzc29yczppLm5laWdoYm9ycykuYmluZChpKSxwPVtdLHY9e307cmV0dXJuIEFyKHMsZnVuY3Rpb24oYil7aWYoIWkuaGFzTm9kZShiKSl0aHJvdyBuZXcgRXJyb3IoIkdyYXBoIGRvZXMgbm90IGhhdmUgbm9kZTogIitiKTtzVmUoaSxiLHU9PT0icG9zdCIsdixkLHApfSkscH1mdW5jdGlvbiBzVmUoaSxzLHUsZCxwLHYpe0xvKGQscyl8fChkW3NdPSEwLHV8fHYucHVzaChzKSxBcihwKHMpLGZ1bmN0aW9uKGIpe3NWZShpLGIsdSxkLHAsdil9KSx1JiZ2LnB1c2gocykpfWZ1bmN0aW9uIE1ZdChpLHMpe3JldHVybiBpVmUoaSxzLCJwb3N0Iil9ZnVuY3Rpb24gRFl0KGkscyl7cmV0dXJuIGlWZShpLHMsInByZSIpfVdDLmluaXRMb3dMaW1WYWx1ZXM9ZG1lLFdDLmluaXRDdXRWYWx1ZXM9Zm1lLFdDLmNhbGNDdXRWYWx1ZT1hVmUsV0MubGVhdmVFZGdlPWNWZSxXQy5lbnRlckVkZ2U9dVZlLFdDLmV4Y2hhbmdlRWRnZXM9bFZlO2Z1bmN0aW9uIFdDKGkpe2k9Zll0KGkpLGhtZShpKTt2YXIgcz1yVmUoaSk7ZG1lKHMpLGZtZShzLGkpO2Zvcih2YXIgdSxkO3U9Y1ZlKHMpOylkPXVWZShzLGksdSksbFZlKHMsaSx1LGQpfWZ1bmN0aW9uIGZtZShpLHMpe3ZhciB1PU1ZdChpLGkubm9kZXMoKSk7dT11LnNsaWNlKDAsdS5sZW5ndGgtMSksQXIodSxmdW5jdGlvbihkKXtJWXQoaSxzLGQpfSl9ZnVuY3Rpb24gSVl0KGkscyx1KXt2YXIgZD1pLm5vZGUodSkscD1kLnBhcmVudDtpLmVkZ2UodSxwKS5jdXR2YWx1ZT1hVmUoaSxzLHUpfWZ1bmN0aW9uIGFWZShpLHMsdSl7dmFyIGQ9aS5ub2RlKHUpLHA9ZC5wYXJlbnQsdj0hMCxiPXMuZWRnZSh1LHApLHk9MDtyZXR1cm4gYnx8KHY9ITEsYj1zLmVkZ2UocCx1KSkseT1iLndlaWdodCxBcihzLm5vZGVFZGdlcyh1KSxmdW5jdGlvbihUKXt2YXIgXz1ULnY9PT11LEE9Xz9ULnc6VC52O2lmKEEhPT1wKXt2YXIgUD1fPT09dixSPXMuZWRnZShUKS53ZWlnaHQ7aWYoeSs9UD9SOi1SLE5ZdChpLHUsQSkpe3ZhciBGPWkuZWRnZSh1LEEpLmN1dHZhbHVlO3krPVA/LUY6Rn19fSkseX1mdW5jdGlvbiBkbWUoaSxzKXthcmd1bWVudHMubGVuZ3RoPDImJihzPWkubm9kZXMoKVswXSksb1ZlKGkse30sMSxzKX1mdW5jdGlvbiBvVmUoaSxzLHUsZCxwKXt2YXIgdj11LGI9aS5ub2RlKGQpO3JldHVybiBzW2RdPSEwLEFyKGkubmVpZ2hib3JzKGQpLGZ1bmN0aW9uKHkpe0xvKHMseSl8fCh1PW9WZShpLHMsdSx5LGQpKX0pLGIubG93PXYsYi5saW09dSsrLHA/Yi5wYXJlbnQ9cDpkZWxldGUgYi5wYXJlbnQsdX1mdW5jdGlvbiBjVmUoaSl7cmV0dXJuIHJtZShpLmVkZ2VzKCksZnVuY3Rpb24ocyl7cmV0dXJuIGkuZWRnZShzKS5jdXR2YWx1ZTwwfSl9ZnVuY3Rpb24gdVZlKGkscyx1KXt2YXIgZD11LnYscD11Lnc7cy5oYXNFZGdlKGQscCl8fChkPXUudyxwPXUudik7dmFyIHY9aS5ub2RlKGQpLGI9aS5ub2RlKHApLHk9dixUPSExO3YubGltPmIubGltJiYoeT1iLFQ9ITApO3ZhciBfPWo3KHMuZWRnZXMoKSxmdW5jdGlvbihBKXtyZXR1cm4gVD09PWhWZShpLGkubm9kZShBLnYpLHkpJiZUIT09aFZlKGksaS5ub2RlKEEudykseSl9KTtyZXR1cm4gc21lKF8sZnVuY3Rpb24oQSl7cmV0dXJuIF9SKHMsQSl9KX1mdW5jdGlvbiBsVmUoaSxzLHUsZCl7dmFyIHA9dS52LHY9dS53O2kucmVtb3ZlRWRnZShwLHYpLGkuc2V0RWRnZShkLnYsZC53LHt9KSxkbWUoaSksZm1lKGkscyksT1l0KGkscyl9ZnVuY3Rpb24gT1l0KGkscyl7dmFyIHU9cm1lKGkubm9kZXMoKSxmdW5jdGlvbihwKXtyZXR1cm4hcy5ub2RlKHApLnBhcmVudH0pLGQ9RFl0KGksdSk7ZD1kLnNsaWNlKDEpLEFyKGQsZnVuY3Rpb24ocCl7dmFyIHY9aS5ub2RlKHApLnBhcmVudCxiPXMuZWRnZShwLHYpLHk9ITE7Ynx8KGI9cy5lZGdlKHYscCkseT0hMCkscy5ub2RlKHApLnJhbms9cy5ub2RlKHYpLnJhbmsrKHk/Yi5taW5sZW46LWIubWlubGVuKX0pfWZ1bmN0aW9uIE5ZdChpLHMsdSl7cmV0dXJuIGkuaGFzRWRnZShzLHUpfWZ1bmN0aW9uIGhWZShpLHMsdSl7cmV0dXJuIHUubG93PD1zLmxpbSYmcy5saW08PXUubGltfWZ1bmN0aW9uIFBZdChpKXtzd2l0Y2goaS5ncmFwaCgpLnJhbmtlcil7Y2FzZSJuZXR3b3JrLXNpbXBsZXgiOmZWZShpKTticmVhaztjYXNlInRpZ2h0LXRyZWUiOkZZdChpKTticmVhaztjYXNlImxvbmdlc3QtcGF0aCI6Qll0KGkpO2JyZWFrO2RlZmF1bHQ6ZlZlKGkpfX12YXIgQll0PWhtZTtmdW5jdGlvbiBGWXQoaSl7aG1lKGkpLHJWZShpKX1mdW5jdGlvbiBmVmUoaSl7V0MoaSl9ZnVuY3Rpb24gUll0KGkpe3ZhciBzPXpEKGksInJvb3QiLHt9LCJfcm9vdCIpLHU9all0KGkpLGQ9VUMoJDcodSkpLTEscD0yKmQrMTtpLmdyYXBoKCkubmVzdGluZ1Jvb3Q9cyxBcihpLmVkZ2VzKCksZnVuY3Rpb24oYil7aS5lZGdlKGIpLm1pbmxlbio9cH0pO3ZhciB2PSRZdChpKSsxO0FyKGkuY2hpbGRyZW4oKSxmdW5jdGlvbihiKXtkVmUoaSxzLHAsdixkLHUsYil9KSxpLmdyYXBoKCkubm9kZVJhbmtGYWN0b3I9cH1mdW5jdGlvbiBkVmUoaSxzLHUsZCxwLHYsYil7dmFyIHk9aS5jaGlsZHJlbihiKTtpZigheS5sZW5ndGgpe2IhPT1zJiZpLnNldEVkZ2UocyxiLHt3ZWlnaHQ6MCxtaW5sZW46dX0pO3JldHVybn12YXIgVD1KSGUoaSwiX2J0IiksXz1KSGUoaSwiX2JiIiksQT1pLm5vZGUoYik7aS5zZXRQYXJlbnQoVCxiKSxBLmJvcmRlclRvcD1ULGkuc2V0UGFyZW50KF8sYiksQS5ib3JkZXJCb3R0b209XyxBcih5LGZ1bmN0aW9uKFApe2RWZShpLHMsdSxkLHAsdixQKTt2YXIgUj1pLm5vZGUoUCksRj1SLmJvcmRlclRvcD9SLmJvcmRlclRvcDpQLGo9Ui5ib3JkZXJCb3R0b20/Ui5ib3JkZXJCb3R0b206UCxLPVIuYm9yZGVyVG9wP2Q6MipkLGVlPUYhPT1qPzE6cC12W2JdKzE7aS5zZXRFZGdlKFQsRix7d2VpZ2h0OkssbWlubGVuOmVlLG5lc3RpbmdFZGdlOiEwfSksaS5zZXRFZGdlKGosXyx7d2VpZ2h0OkssbWlubGVuOmVlLG5lc3RpbmdFZGdlOiEwfSl9KSxpLnBhcmVudChiKXx8aS5zZXRFZGdlKHMsVCx7d2VpZ2h0OjAsbWlubGVuOnArdltiXX0pfWZ1bmN0aW9uIGpZdChpKXt2YXIgcz17fTtmdW5jdGlvbiB1KGQscCl7dmFyIHY9aS5jaGlsZHJlbihkKTt2JiZ2Lmxlbmd0aCYmQXIodixmdW5jdGlvbihiKXt1KGIscCsxKX0pLHNbZF09cH1yZXR1cm4gQXIoaS5jaGlsZHJlbigpLGZ1bmN0aW9uKGQpe3UoZCwxKX0pLHN9ZnVuY3Rpb24gJFl0KGkpe3JldHVybiBUUihpLmVkZ2VzKCksZnVuY3Rpb24ocyx1KXtyZXR1cm4gcytpLmVkZ2UodSkud2VpZ2h0fSwwKX1mdW5jdGlvbiB6WXQoaSl7dmFyIHM9aS5ncmFwaCgpO2kucmVtb3ZlTm9kZShzLm5lc3RpbmdSb290KSxkZWxldGUgcy5uZXN0aW5nUm9vdCxBcihpLmVkZ2VzKCksZnVuY3Rpb24odSl7dmFyIGQ9aS5lZGdlKHUpO2QubmVzdGluZ0VkZ2UmJmkucmVtb3ZlRWRnZSh1KX0pfWZ1bmN0aW9uIHFZdChpLHMsdSl7dmFyIGQ9e30scDtBcih1LGZ1bmN0aW9uKHYpe2Zvcih2YXIgYj1pLnBhcmVudCh2KSx5LFQ7Yjspe2lmKHk9aS5wYXJlbnQoYikseT8oVD1kW3ldLGRbeV09Yik6KFQ9cCxwPWIpLFQmJlQhPT1iKXtzLnNldEVkZ2UoVCxiKTtyZXR1cm59Yj15fX0pfWZ1bmN0aW9uIEhZdChpLHMsdSl7dmFyIGQ9Vll0KGkpLHA9bmV3IEIwKHtjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyb290OmR9KS5zZXREZWZhdWx0Tm9kZUxhYmVsKGZ1bmN0aW9uKHYpe3JldHVybiBpLm5vZGUodil9KTtyZXR1cm4gQXIoaS5ub2RlcygpLGZ1bmN0aW9uKHYpe3ZhciBiPWkubm9kZSh2KSx5PWkucGFyZW50KHYpOyhiLnJhbms9PT1zfHxiLm1pblJhbms8PXMmJnM8PWIubWF4UmFuaykmJihwLnNldE5vZGUodikscC5zZXRQYXJlbnQodix5fHxkKSxBcihpW3VdKHYpLGZ1bmN0aW9uKFQpe3ZhciBfPVQudj09PXY/VC53OlQudixBPXAuZWRnZShfLHYpLFA9UWYoQSk/MDpBLndlaWdodDtwLnNldEVkZ2UoXyx2LHt3ZWlnaHQ6aS5lZGdlKFQpLndlaWdodCtQfSl9KSxMbyhiLCJtaW5SYW5rIikmJnAuc2V0Tm9kZSh2LHtib3JkZXJMZWZ0OmIuYm9yZGVyTGVmdFtzXSxib3JkZXJSaWdodDpiLmJvcmRlclJpZ2h0W3NdfSkpfSkscH1mdW5jdGlvbiBWWXQoaSl7Zm9yKHZhciBzO2kuaGFzTm9kZShzPUtRKCJfcm9vdCIpKTspO3JldHVybiBzfWZ1bmN0aW9uIFVZdChpLHMpe2Zvcih2YXIgdT0wLGQ9MTtkPHMubGVuZ3RoOysrZCl1Kz1HWXQoaSxzW2QtMV0sc1tkXSk7cmV0dXJuIHV9ZnVuY3Rpb24gR1l0KGkscyx1KXtmb3IodmFyIGQ9ZVl0KHUsUDAodSxmdW5jdGlvbihfLEEpe3JldHVybiBBfSkpLHA9akQoUDAocyxmdW5jdGlvbihfKXtyZXR1cm4gQ1IoUDAoaS5vdXRFZGdlcyhfKSxmdW5jdGlvbihBKXtyZXR1cm57cG9zOmRbQS53XSx3ZWlnaHQ6aS5lZGdlKEEpLndlaWdodH19KSwicG9zIil9KSksdj0xO3Y8dS5sZW5ndGg7KXY8PD0xO3ZhciBiPTIqdi0xO3YtPTE7dmFyIHk9UDAobmV3IEFycmF5KGIpLGZ1bmN0aW9uKCl7cmV0dXJuIDB9KSxUPTA7cmV0dXJuIEFyKHAuZm9yRWFjaChmdW5jdGlvbihfKXt2YXIgQT1fLnBvcyt2O3lbQV0rPV8ud2VpZ2h0O2Zvcih2YXIgUD0wO0E+MDspQSUyJiYoUCs9eVtBKzFdKSxBPUEtMT4+MSx5W0FdKz1fLndlaWdodDtUKz1fLndlaWdodCpQfSkpLFR9ZnVuY3Rpb24gS1l0KGkpe3ZhciBzPXt9LHU9ajcoaS5ub2RlcygpLGZ1bmN0aW9uKHkpe3JldHVybiFpLmNoaWxkcmVuKHkpLmxlbmd0aH0pLGQ9VUMoUDAodSxmdW5jdGlvbih5KXtyZXR1cm4gaS5ub2RlKHkpLnJhbmt9KSkscD1QMChHQyhkKzEpLGZ1bmN0aW9uKCl7cmV0dXJuW119KTtmdW5jdGlvbiB2KHkpe2lmKCFMbyhzLHkpKXtzW3ldPSEwO3ZhciBUPWkubm9kZSh5KTtwW1QucmFua10ucHVzaCh5KSxBcihpLnN1Y2Nlc3NvcnMoeSksdil9fXZhciBiPUNSKHUsZnVuY3Rpb24oeSl7cmV0dXJuIGkubm9kZSh5KS5yYW5rfSk7cmV0dXJuIEFyKGIsdikscH1mdW5jdGlvbiBXWXQoaSxzKXtyZXR1cm4gUDAocyxmdW5jdGlvbih1KXt2YXIgZD1pLmluRWRnZXModSk7aWYoZC5sZW5ndGgpe3ZhciBwPVRSKGQsZnVuY3Rpb24odixiKXt2YXIgeT1pLmVkZ2UoYiksVD1pLm5vZGUoYi52KTtyZXR1cm57c3VtOnYuc3VtK3kud2VpZ2h0KlQub3JkZXIsd2VpZ2h0OnYud2VpZ2h0K3kud2VpZ2h0fX0se3N1bTowLHdlaWdodDowfSk7cmV0dXJue3Y6dSxiYXJ5Y2VudGVyOnAuc3VtL3Aud2VpZ2h0LHdlaWdodDpwLndlaWdodH19ZWxzZSByZXR1cm57djp1fX0pfWZ1bmN0aW9uIFlZdChpLHMpe3ZhciB1PXt9O0FyKGksZnVuY3Rpb24ocCx2KXt2YXIgYj11W3Audl09e2luZGVncmVlOjAsaW46W10sb3V0OltdLHZzOltwLnZdLGk6dn07UWYocC5iYXJ5Y2VudGVyKXx8KGIuYmFyeWNlbnRlcj1wLmJhcnljZW50ZXIsYi53ZWlnaHQ9cC53ZWlnaHQpfSksQXIocy5lZGdlcygpLGZ1bmN0aW9uKHApe3ZhciB2PXVbcC52XSxiPXVbcC53XTshUWYodikmJiFRZihiKSYmKGIuaW5kZWdyZWUrKyx2Lm91dC5wdXNoKHVbcC53XSkpfSk7dmFyIGQ9ajcodSxmdW5jdGlvbihwKXtyZXR1cm4hcC5pbmRlZ3JlZX0pO3JldHVybiBYWXQoZCl9ZnVuY3Rpb24gWFl0KGkpe3ZhciBzPVtdO2Z1bmN0aW9uIHUodil7cmV0dXJuIGZ1bmN0aW9uKGIpe2IubWVyZ2VkfHwoUWYoYi5iYXJ5Y2VudGVyKXx8UWYodi5iYXJ5Y2VudGVyKXx8Yi5iYXJ5Y2VudGVyPj12LmJhcnljZW50ZXIpJiZRWXQodixiKX19ZnVuY3Rpb24gZCh2KXtyZXR1cm4gZnVuY3Rpb24oYil7Yi5pbi5wdXNoKHYpLC0tYi5pbmRlZ3JlZT09PTAmJmkucHVzaChiKX19Zm9yKDtpLmxlbmd0aDspe3ZhciBwPWkucG9wKCk7cy5wdXNoKHApLEFyKHAuaW4ucmV2ZXJzZSgpLHUocCkpLEFyKHAub3V0LGQocCkpfXJldHVybiBQMChqNyhzLGZ1bmN0aW9uKHYpe3JldHVybiF2Lm1lcmdlZH0pLGZ1bmN0aW9uKHYpe3JldHVybiBFUih2LFsidnMiLCJpIiwiYmFyeWNlbnRlciIsIndlaWdodCJdKX0pfWZ1bmN0aW9uIFFZdChpLHMpe3ZhciB1PTAsZD0wO2kud2VpZ2h0JiYodSs9aS5iYXJ5Y2VudGVyKmkud2VpZ2h0LGQrPWkud2VpZ2h0KSxzLndlaWdodCYmKHUrPXMuYmFyeWNlbnRlcipzLndlaWdodCxkKz1zLndlaWdodCksaS52cz1zLnZzLmNvbmNhdChpLnZzKSxpLmJhcnljZW50ZXI9dS9kLGkud2VpZ2h0PWQsaS5pPU1hdGgubWluKHMuaSxpLmkpLHMubWVyZ2VkPSEwfWZ1bmN0aW9uIEpZdChpLHMpe3ZhciB1PXBZdChpLGZ1bmN0aW9uKEEpe3JldHVybiBMbyhBLCJiYXJ5Y2VudGVyIil9KSxkPXUubGhzLHA9Q1IodS5yaHMsZnVuY3Rpb24oQSl7cmV0dXJuLUEuaX0pLHY9W10sYj0wLHk9MCxUPTA7ZC5zb3J0KFpZdCghIXMpKSxUPWdWZSh2LHAsVCksQXIoZCxmdW5jdGlvbihBKXtUKz1BLnZzLmxlbmd0aCx2LnB1c2goQS52cyksYis9QS5iYXJ5Y2VudGVyKkEud2VpZ2h0LHkrPUEud2VpZ2h0LFQ9Z1ZlKHYscCxUKX0pO3ZhciBfPXt2czpqRCh2KX07cmV0dXJuIHkmJihfLmJhcnljZW50ZXI9Yi95LF8ud2VpZ2h0PXkpLF99ZnVuY3Rpb24gZ1ZlKGkscyx1KXtmb3IodmFyIGQ7cy5sZW5ndGgmJihkPVVRKHMpKS5pPD11OylzLnBvcCgpLGkucHVzaChkLnZzKSx1Kys7cmV0dXJuIHV9ZnVuY3Rpb24gWll0KGkpe3JldHVybiBmdW5jdGlvbihzLHUpe3JldHVybiBzLmJhcnljZW50ZXI8dS5iYXJ5Y2VudGVyPy0xOnMuYmFyeWNlbnRlcj51LmJhcnljZW50ZXI/MTppP3UuaS1zLmk6cy5pLXUuaX19ZnVuY3Rpb24gcFZlKGkscyx1LGQpe3ZhciBwPWkuY2hpbGRyZW4ocyksdj1pLm5vZGUocyksYj12P3YuYm9yZGVyTGVmdDp2b2lkIDAseT12P3YuYm9yZGVyUmlnaHQ6dm9pZCAwLFQ9e307YiYmKHA9ajcocCxmdW5jdGlvbihqKXtyZXR1cm4gaiE9PWImJmohPT15fSkpO3ZhciBfPVdZdChpLHApO0FyKF8sZnVuY3Rpb24oail7aWYoaS5jaGlsZHJlbihqLnYpLmxlbmd0aCl7dmFyIEs9cFZlKGksai52LHUsZCk7VFtqLnZdPUssTG8oSywiYmFyeWNlbnRlciIpJiZ0WHQoaixLKX19KTt2YXIgQT1ZWXQoXyx1KTtlWHQoQSxUKTt2YXIgUD1KWXQoQSxkKTtpZihiJiYoUC52cz1qRChbYixQLnZzLHldKSxpLnByZWRlY2Vzc29ycyhiKS5sZW5ndGgpKXt2YXIgUj1pLm5vZGUoaS5wcmVkZWNlc3NvcnMoYilbMF0pLEY9aS5ub2RlKGkucHJlZGVjZXNzb3JzKHkpWzBdKTtMbyhQLCJiYXJ5Y2VudGVyIil8fChQLmJhcnljZW50ZXI9MCxQLndlaWdodD0wKSxQLmJhcnljZW50ZXI9KFAuYmFyeWNlbnRlcipQLndlaWdodCtSLm9yZGVyK0Yub3JkZXIpLyhQLndlaWdodCsyKSxQLndlaWdodCs9Mn1yZXR1cm4gUH1mdW5jdGlvbiBlWHQoaSxzKXtBcihpLGZ1bmN0aW9uKHUpe3UudnM9akQodS52cy5tYXAoZnVuY3Rpb24oZCl7cmV0dXJuIHNbZF0/c1tkXS52czpkfSkpfSl9ZnVuY3Rpb24gdFh0KGkscyl7UWYoaS5iYXJ5Y2VudGVyKT8oaS5iYXJ5Y2VudGVyPXMuYmFyeWNlbnRlcixpLndlaWdodD1zLndlaWdodCk6KGkuYmFyeWNlbnRlcj0oaS5iYXJ5Y2VudGVyKmkud2VpZ2h0K3MuYmFyeWNlbnRlcipzLndlaWdodCkvKGkud2VpZ2h0K3Mud2VpZ2h0KSxpLndlaWdodCs9cy53ZWlnaHQpfWZ1bmN0aW9uIG5YdChpKXt2YXIgcz1aSGUoaSksdT1iVmUoaSxHQygxLHMrMSksImluRWRnZXMiKSxkPWJWZShpLEdDKHMtMSwtMSwtMSksIm91dEVkZ2VzIikscD1LWXQoaSk7bVZlKGkscCk7Zm9yKHZhciB2PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxiLHk9MCxUPTA7VDw0OysreSwrK1Qpe3JYdCh5JTI/dTpkLHklND49MikscD1XUShpKTt2YXIgXz1VWXQoaSxwKTtfPHYmJihUPTAsYj1DS3QocCksdj1fKX1tVmUoaSxiKX1mdW5jdGlvbiBiVmUoaSxzLHUpe3JldHVybiBQMChzLGZ1bmN0aW9uKGQpe3JldHVybiBIWXQoaSxkLHUpfSl9ZnVuY3Rpb24gclh0KGkscyl7dmFyIHU9bmV3IEIwO0FyKGksZnVuY3Rpb24oZCl7dmFyIHA9ZC5ncmFwaCgpLnJvb3Qsdj1wVmUoZCxwLHUscyk7QXIodi52cyxmdW5jdGlvbihiLHkpe2Qubm9kZShiKS5vcmRlcj15fSkscVl0KGQsdSx2LnZzKX0pfWZ1bmN0aW9uIG1WZShpLHMpe0FyKHMsZnVuY3Rpb24odSl7QXIodSxmdW5jdGlvbihkLHApe2kubm9kZShkKS5vcmRlcj1wfSl9KX1mdW5jdGlvbiBpWHQoaSl7dmFyIHM9YVh0KGkpO0FyKGkuZ3JhcGgoKS5kdW1teUNoYWlucyxmdW5jdGlvbih1KXtmb3IodmFyIGQ9aS5ub2RlKHUpLHA9ZC5lZGdlT2JqLHY9c1h0KGkscyxwLnYscC53KSxiPXYucGF0aCx5PXYubGNhLFQ9MCxfPWJbVF0sQT0hMDt1IT09cC53Oyl7aWYoZD1pLm5vZGUodSksQSl7Zm9yKDsoXz1iW1RdKSE9PXkmJmkubm9kZShfKS5tYXhSYW5rPGQucmFuazspVCsrO189PT15JiYoQT0hMSl9aWYoIUEpe2Zvcig7VDxiLmxlbmd0aC0xJiZpLm5vZGUoXz1iW1QrMV0pLm1pblJhbms8PWQucmFuazspVCsrO189YltUXX1pLnNldFBhcmVudCh1LF8pLHU9aS5zdWNjZXNzb3JzKHUpWzBdfX0pfWZ1bmN0aW9uIHNYdChpLHMsdSxkKXt2YXIgcD1bXSx2PVtdLGI9TWF0aC5taW4oc1t1XS5sb3csc1tkXS5sb3cpLHk9TWF0aC5tYXgoc1t1XS5saW0sc1tkXS5saW0pLFQsXztUPXU7ZG8gVD1pLnBhcmVudChUKSxwLnB1c2goVCk7d2hpbGUoVCYmKHNbVF0ubG93PmJ8fHk+c1tUXS5saW0pKTtmb3IoXz1ULFQ9ZDsoVD1pLnBhcmVudChUKSkhPT1fOyl2LnB1c2goVCk7cmV0dXJue3BhdGg6cC5jb25jYXQodi5yZXZlcnNlKCkpLGxjYTpffX1mdW5jdGlvbiBhWHQoaSl7dmFyIHM9e30sdT0wO2Z1bmN0aW9uIGQocCl7dmFyIHY9dTtBcihpLmNoaWxkcmVuKHApLGQpLHNbcF09e2xvdzp2LGxpbTp1Kyt9fXJldHVybiBBcihpLmNoaWxkcmVuKCksZCksc31mdW5jdGlvbiBvWHQoaSxzKXt2YXIgdT17fTtmdW5jdGlvbiBkKHAsdil7dmFyIGI9MCx5PTAsVD1wLmxlbmd0aCxfPVVRKHYpO3JldHVybiBBcih2LGZ1bmN0aW9uKEEsUCl7dmFyIFI9dVh0KGksQSksRj1SP2kubm9kZShSKS5vcmRlcjpUOyhSfHxBPT09XykmJihBcih2LnNsaWNlKHksUCsxKSxmdW5jdGlvbihqKXtBcihpLnByZWRlY2Vzc29ycyhqKSxmdW5jdGlvbihLKXt2YXIgZWU9aS5ub2RlKEspLGllPWVlLm9yZGVyOyhpZTxifHxGPGllKSYmIShlZS5kdW1teSYmaS5ub2RlKGopLmR1bW15KSYmdlZlKHUsSyxqKX0pfSkseT1QKzEsYj1GKX0pLHZ9cmV0dXJuIFRSKHMsZCksdX1mdW5jdGlvbiBjWHQoaSxzKXt2YXIgdT17fTtmdW5jdGlvbiBkKHYsYix5LFQsXyl7dmFyIEE7QXIoR0MoYix5KSxmdW5jdGlvbihQKXtBPXZbUF0saS5ub2RlKEEpLmR1bW15JiZBcihpLnByZWRlY2Vzc29ycyhBKSxmdW5jdGlvbihSKXt2YXIgRj1pLm5vZGUoUik7Ri5kdW1teSYmKEYub3JkZXI8VHx8Ri5vcmRlcj5fKSYmdlZlKHUsUixBKX0pfSl9ZnVuY3Rpb24gcCh2LGIpe3ZhciB5PS0xLFQsXz0wO3JldHVybiBBcihiLGZ1bmN0aW9uKEEsUCl7aWYoaS5ub2RlKEEpLmR1bW15PT09ImJvcmRlciIpe3ZhciBSPWkucHJlZGVjZXNzb3JzKEEpO1IubGVuZ3RoJiYoVD1pLm5vZGUoUlswXSkub3JkZXIsZChiLF8sUCx5LFQpLF89UCx5PVQpfWQoYixfLGIubGVuZ3RoLFQsdi5sZW5ndGgpfSksYn1yZXR1cm4gVFIocyxwKSx1fWZ1bmN0aW9uIHVYdChpLHMpe2lmKGkubm9kZShzKS5kdW1teSlyZXR1cm4gcm1lKGkucHJlZGVjZXNzb3JzKHMpLGZ1bmN0aW9uKHUpe3JldHVybiBpLm5vZGUodSkuZHVtbXl9KX1mdW5jdGlvbiB2VmUoaSxzLHUpe2lmKHM+dSl7dmFyIGQ9cztzPXUsdT1kfXZhciBwPWlbc107cHx8KGlbc109cD17fSkscFt1XT0hMH1mdW5jdGlvbiBsWHQoaSxzLHUpe2lmKHM+dSl7dmFyIGQ9cztzPXUsdT1kfXJldHVybiBMbyhpW3NdLHUpfWZ1bmN0aW9uIGhYdChpLHMsdSxkKXt2YXIgcD17fSx2PXt9LGI9e307cmV0dXJuIEFyKHMsZnVuY3Rpb24oeSl7QXIoeSxmdW5jdGlvbihULF8pe3BbVF09VCx2W1RdPVQsYltUXT1ffSl9KSxBcihzLGZ1bmN0aW9uKHkpe3ZhciBUPS0xO0FyKHksZnVuY3Rpb24oXyl7dmFyIEE9ZChfKTtpZihBLmxlbmd0aCl7QT1DUihBLGZ1bmN0aW9uKEspe3JldHVybiBiW0tdfSk7Zm9yKHZhciBQPShBLmxlbmd0aC0xKS8yLFI9TWF0aC5mbG9vcihQKSxGPU1hdGguY2VpbChQKTtSPD1GOysrUil7dmFyIGo9QVtSXTt2W19dPT09XyYmVDxiW2pdJiYhbFh0KHUsXyxqKSYmKHZbal09Xyx2W19dPXBbX109cFtqXSxUPWJbal0pfX19KX0pLHtyb290OnAsYWxpZ246dn19ZnVuY3Rpb24gZlh0KGkscyx1LGQscCl7dmFyIHY9e30sYj1kWHQoaSxzLHUscCkseT1wPyJib3JkZXJMZWZ0IjoiYm9yZGVyUmlnaHQiO2Z1bmN0aW9uIFQoUCxSKXtmb3IodmFyIEY9Yi5ub2RlcygpLGo9Ri5wb3AoKSxLPXt9O2o7KUtbal0/UChqKTooS1tqXT0hMCxGLnB1c2goaiksRj1GLmNvbmNhdChSKGopKSksaj1GLnBvcCgpfWZ1bmN0aW9uIF8oUCl7dltQXT1iLmluRWRnZXMoUCkucmVkdWNlKGZ1bmN0aW9uKFIsRil7cmV0dXJuIE1hdGgubWF4KFIsdltGLnZdK2IuZWRnZShGKSl9LDApfWZ1bmN0aW9uIEEoUCl7dmFyIFI9Yi5vdXRFZGdlcyhQKS5yZWR1Y2UoZnVuY3Rpb24oaixLKXtyZXR1cm4gTWF0aC5taW4oaix2W0sud10tYi5lZGdlKEspKX0sTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSxGPWkubm9kZShQKTtSIT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZJiZGLmJvcmRlclR5cGUhPT15JiYodltQXT1NYXRoLm1heCh2W1BdLFIpKX1yZXR1cm4gVChfLGIucHJlZGVjZXNzb3JzLmJpbmQoYikpLFQoQSxiLnN1Y2Nlc3NvcnMuYmluZChiKSksQXIoZCxmdW5jdGlvbihQKXt2W1BdPXZbdVtQXV19KSx2fWZ1bmN0aW9uIGRYdChpLHMsdSxkKXt2YXIgcD1uZXcgQjAsdj1pLmdyYXBoKCksYj12WHQodi5ub2Rlc2VwLHYuZWRnZXNlcCxkKTtyZXR1cm4gQXIocyxmdW5jdGlvbih5KXt2YXIgVDtBcih5LGZ1bmN0aW9uKF8pe3ZhciBBPXVbX107aWYocC5zZXROb2RlKEEpLFQpe3ZhciBQPXVbVF0sUj1wLmVkZ2UoUCxBKTtwLnNldEVkZ2UoUCxBLE1hdGgubWF4KGIoaSxfLFQpLFJ8fDApKX1UPV99KX0pLHB9ZnVuY3Rpb24gZ1h0KGkscyl7cmV0dXJuIHNtZSgkNyhzKSxmdW5jdGlvbih1KXt2YXIgZD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkscD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7cmV0dXJuIEVXdCh1LGZ1bmN0aW9uKHYsYil7dmFyIHk9d1h0KGksYikvMjtkPU1hdGgubWF4KHYreSxkKSxwPU1hdGgubWluKHYteSxwKX0pLGQtcH0pfWZ1bmN0aW9uIHBYdChpLHMpe3ZhciB1PSQ3KHMpLGQ9a1IodSkscD1VQyh1KTtBcihbInUiLCJkIl0sZnVuY3Rpb24odil7QXIoWyJsIiwiciJdLGZ1bmN0aW9uKGIpe3ZhciB5PXYrYixUPWlbeV0sXztpZihUIT09cyl7dmFyIEE9JDcoVCk7Xz1iPT09ImwiP2Qta1IoQSk6cC1VQyhBKSxfJiYoaVt5XT1HUShULGZ1bmN0aW9uKFApe3JldHVybiBQK199KSl9fSl9KX1mdW5jdGlvbiBiWHQoaSxzKXtyZXR1cm4gR1EoaS51bCxmdW5jdGlvbih1LGQpe2lmKHMpcmV0dXJuIGlbcy50b0xvd2VyQ2FzZSgpXVtkXTt2YXIgcD1DUihQMChpLGQpKTtyZXR1cm4ocFsxXStwWzJdKS8yfSl9ZnVuY3Rpb24gbVh0KGkpe3ZhciBzPVdRKGkpLHU9algob1h0KGkscyksY1h0KGkscykpLGQ9e30scDtBcihbInUiLCJkIl0sZnVuY3Rpb24oYil7cD1iPT09InUiP3M6JDcocykucmV2ZXJzZSgpLEFyKFsibCIsInIiXSxmdW5jdGlvbih5KXt5PT09InIiJiYocD1QMChwLGZ1bmN0aW9uKFApe3JldHVybiAkNyhQKS5yZXZlcnNlKCl9KSk7dmFyIFQ9KGI9PT0idSI/aS5wcmVkZWNlc3NvcnM6aS5zdWNjZXNzb3JzKS5iaW5kKGkpLF89aFh0KGkscCx1LFQpLEE9Zlh0KGkscCxfLnJvb3QsXy5hbGlnbix5PT09InIiKTt5PT09InIiJiYoQT1HUShBLGZ1bmN0aW9uKFApe3JldHVybi1QfSkpLGRbYit5XT1BfSl9KTt2YXIgdj1nWHQoaSxkKTtyZXR1cm4gcFh0KGQsdiksYlh0KGQsaS5ncmFwaCgpLmFsaWduKX1mdW5jdGlvbiB2WHQoaSxzLHUpe3JldHVybiBmdW5jdGlvbihkLHAsdil7dmFyIGI9ZC5ub2RlKHApLHk9ZC5ub2RlKHYpLFQ9MCxfO2lmKFQrPWIud2lkdGgvMixMbyhiLCJsYWJlbHBvcyIpKXN3aXRjaChiLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6Xz0tYi53aWR0aC8yO2JyZWFrO2Nhc2UiciI6Xz1iLndpZHRoLzI7YnJlYWt9aWYoXyYmKFQrPXU/XzotXyksXz0wLFQrPShiLmR1bW15P3M6aSkvMixUKz0oeS5kdW1teT9zOmkpLzIsVCs9eS53aWR0aC8yLExvKHksImxhYmVscG9zIikpc3dpdGNoKHkubGFiZWxwb3MudG9Mb3dlckNhc2UoKSl7Y2FzZSJsIjpfPXkud2lkdGgvMjticmVhaztjYXNlInIiOl89LXkud2lkdGgvMjticmVha31yZXR1cm4gXyYmKFQrPXU/XzotXyksXz0wLFR9fWZ1bmN0aW9uIHdYdChpLHMpe3JldHVybiBpLm5vZGUocykud2lkdGh9ZnVuY3Rpb24geVh0KGkpe2k9WEhlKGkpLHhYdChpKSxUV3QobVh0KGkpLGZ1bmN0aW9uKHMsdSl7aS5ub2RlKHUpLng9c30pfWZ1bmN0aW9uIHhYdChpKXt2YXIgcz1XUShpKSx1PWkuZ3JhcGgoKS5yYW5rc2VwLGQ9MDtBcihzLGZ1bmN0aW9uKHApe3ZhciB2PVVDKFAwKHAsZnVuY3Rpb24oYil7cmV0dXJuIGkubm9kZShiKS5oZWlnaHR9KSk7QXIocCxmdW5jdGlvbihiKXtpLm5vZGUoYikueT1kK3YvMn0pLGQrPXYrdX0pfWZ1bmN0aW9uIHFEKGkscyl7dmFyIHU9cyYmcy5kZWJ1Z1RpbWluZz9iWXQ6bVl0O3UoImxheW91dCIsZnVuY3Rpb24oKXt2YXIgZD11KCIgIGJ1aWxkTGF5b3V0R3JhcGgiLGZ1bmN0aW9uKCl7cmV0dXJuIElYdChpKX0pO3UoIiAgcnVuTGF5b3V0IixmdW5jdGlvbigpe2tYdChkLHUpfSksdSgiICB1cGRhdGVJbnB1dEdyYXBoIixmdW5jdGlvbigpe0VYdChpLGQpfSl9KX1mdW5jdGlvbiBrWHQoaSxzKXtzKCIgICAgbWFrZVNwYWNlRm9yRWRnZUxhYmVscyIsZnVuY3Rpb24oKXtPWHQoaSl9KSxzKCIgICAgcmVtb3ZlU2VsZkVkZ2VzIixmdW5jdGlvbigpe3FYdChpKX0pLHMoIiAgICBhY3ljbGljIixmdW5jdGlvbigpe3VZdChpKX0pLHMoIiAgICBuZXN0aW5nR3JhcGgucnVuIixmdW5jdGlvbigpe1JZdChpKX0pLHMoIiAgICByYW5rIixmdW5jdGlvbigpe1BZdChYSGUoaSkpfSkscygiICAgIGluamVjdEVkZ2VMYWJlbFByb3hpZXMiLGZ1bmN0aW9uKCl7Tlh0KGkpfSkscygiICAgIHJlbW92ZUVtcHR5UmFua3MiLGZ1bmN0aW9uKCl7Z1l0KGkpfSkscygiICAgIG5lc3RpbmdHcmFwaC5jbGVhbnVwIixmdW5jdGlvbigpe3pZdChpKX0pLHMoIiAgICBub3JtYWxpemVSYW5rcyIsZnVuY3Rpb24oKXtkWXQoaSl9KSxzKCIgICAgYXNzaWduUmFua01pbk1heCIsZnVuY3Rpb24oKXtQWHQoaSl9KSxzKCIgICAgcmVtb3ZlRWRnZUxhYmVsUHJveGllcyIsZnVuY3Rpb24oKXtCWHQoaSl9KSxzKCIgICAgbm9ybWFsaXplLnJ1biIsZnVuY3Rpb24oKXtFWXQoaSl9KSxzKCIgICAgcGFyZW50RHVtbXlDaGFpbnMiLGZ1bmN0aW9uKCl7aVh0KGkpfSkscygiICAgIGFkZEJvcmRlclNlZ21lbnRzIixmdW5jdGlvbigpe3ZZdChpKX0pLHMoIiAgICBvcmRlciIsZnVuY3Rpb24oKXtuWHQoaSl9KSxzKCIgICAgaW5zZXJ0U2VsZkVkZ2VzIixmdW5jdGlvbigpe0hYdChpKX0pLHMoIiAgICBhZGp1c3RDb29yZGluYXRlU3lzdGVtIixmdW5jdGlvbigpe3dZdChpKX0pLHMoIiAgICBwb3NpdGlvbiIsZnVuY3Rpb24oKXt5WHQoaSl9KSxzKCIgICAgcG9zaXRpb25TZWxmRWRnZXMiLGZ1bmN0aW9uKCl7Vlh0KGkpfSkscygiICAgIHJlbW92ZUJvcmRlck5vZGVzIixmdW5jdGlvbigpe3pYdChpKX0pLHMoIiAgICBub3JtYWxpemUudW5kbyIsZnVuY3Rpb24oKXtDWXQoaSl9KSxzKCIgICAgZml4dXBFZGdlTGFiZWxDb29yZHMiLGZ1bmN0aW9uKCl7alh0KGkpfSkscygiICAgIHVuZG9Db29yZGluYXRlU3lzdGVtIixmdW5jdGlvbigpe3lZdChpKX0pLHMoIiAgICB0cmFuc2xhdGVHcmFwaCIsZnVuY3Rpb24oKXtGWHQoaSl9KSxzKCIgICAgYXNzaWduTm9kZUludGVyc2VjdHMiLGZ1bmN0aW9uKCl7Ulh0KGkpfSkscygiICAgIHJldmVyc2VQb2ludHMiLGZ1bmN0aW9uKCl7JFh0KGkpfSkscygiICAgIGFjeWNsaWMudW5kbyIsZnVuY3Rpb24oKXtoWXQoaSl9KX1mdW5jdGlvbiBFWHQoaSxzKXtBcihpLm5vZGVzKCksZnVuY3Rpb24odSl7dmFyIGQ9aS5ub2RlKHUpLHA9cy5ub2RlKHUpO2QmJihkLng9cC54LGQueT1wLnkscy5jaGlsZHJlbih1KS5sZW5ndGgmJihkLndpZHRoPXAud2lkdGgsZC5oZWlnaHQ9cC5oZWlnaHQpKX0pLEFyKGkuZWRnZXMoKSxmdW5jdGlvbih1KXt2YXIgZD1pLmVkZ2UodSkscD1zLmVkZ2UodSk7ZC5wb2ludHM9cC5wb2ludHMsTG8ocCwieCIpJiYoZC54PXAueCxkLnk9cC55KX0pLGkuZ3JhcGgoKS53aWR0aD1zLmdyYXBoKCkud2lkdGgsaS5ncmFwaCgpLmhlaWdodD1zLmdyYXBoKCkuaGVpZ2h0fXZhciBUWHQ9WyJub2Rlc2VwIiwiZWRnZXNlcCIsInJhbmtzZXAiLCJtYXJnaW54IiwibWFyZ2lueSJdLENYdD17cmFua3NlcDo1MCxlZGdlc2VwOjIwLG5vZGVzZXA6NTAscmFua2RpcjoidGIifSxTWHQ9WyJhY3ljbGljZXIiLCJyYW5rZXIiLCJyYW5rZGlyIiwiYWxpZ24iXSxfWHQ9WyJ3aWR0aCIsImhlaWdodCJdLEFYdD17d2lkdGg6MCxoZWlnaHQ6MH0sTFh0PVsibWlubGVuIiwid2VpZ2h0Iiwid2lkdGgiLCJoZWlnaHQiLCJsYWJlbG9mZnNldCJdLE1YdD17bWlubGVuOjEsd2VpZ2h0OjEsd2lkdGg6MCxoZWlnaHQ6MCxsYWJlbG9mZnNldDoxMCxsYWJlbHBvczoiciJ9LERYdD1bImxhYmVscG9zIl07ZnVuY3Rpb24gSVh0KGkpe3ZhciBzPW5ldyBCMCh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLHU9cG1lKGkuZ3JhcGgoKSk7cmV0dXJuIHMuc2V0R3JhcGgoalgoe30sQ1h0LGdtZSh1LFRYdCksRVIodSxTWHQpKSksQXIoaS5ub2RlcygpLGZ1bmN0aW9uKGQpe3ZhciBwPXBtZShpLm5vZGUoZCkpO3Muc2V0Tm9kZShkLCREKGdtZShwLF9YdCksQVh0KSkscy5zZXRQYXJlbnQoZCxpLnBhcmVudChkKSl9KSxBcihpLmVkZ2VzKCksZnVuY3Rpb24oZCl7dmFyIHA9cG1lKGkuZWRnZShkKSk7cy5zZXRFZGdlKGQsalgoe30sTVh0LGdtZShwLExYdCksRVIocCxEWHQpKSl9KSxzfWZ1bmN0aW9uIE9YdChpKXt2YXIgcz1pLmdyYXBoKCk7cy5yYW5rc2VwLz0yLEFyKGkuZWRnZXMoKSxmdW5jdGlvbih1KXt2YXIgZD1pLmVkZ2UodSk7ZC5taW5sZW4qPTIsZC5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpIT09ImMiJiYocy5yYW5rZGlyPT09IlRCInx8cy5yYW5rZGlyPT09IkJUIj9kLndpZHRoKz1kLmxhYmVsb2Zmc2V0OmQuaGVpZ2h0Kz1kLmxhYmVsb2Zmc2V0KX0pfWZ1bmN0aW9uIE5YdChpKXtBcihpLmVkZ2VzKCksZnVuY3Rpb24ocyl7dmFyIHU9aS5lZGdlKHMpO2lmKHUud2lkdGgmJnUuaGVpZ2h0KXt2YXIgZD1pLm5vZGUocy52KSxwPWkubm9kZShzLncpLHY9e3Jhbms6KHAucmFuay1kLnJhbmspLzIrZC5yYW5rLGU6c307ekQoaSwiZWRnZS1wcm94eSIsdiwiX2VwIil9fSl9ZnVuY3Rpb24gUFh0KGkpe3ZhciBzPTA7QXIoaS5ub2RlcygpLGZ1bmN0aW9uKHUpe3ZhciBkPWkubm9kZSh1KTtkLmJvcmRlclRvcCYmKGQubWluUmFuaz1pLm5vZGUoZC5ib3JkZXJUb3ApLnJhbmssZC5tYXhSYW5rPWkubm9kZShkLmJvcmRlckJvdHRvbSkucmFuayxzPVVDKHMsZC5tYXhSYW5rKSl9KSxpLmdyYXBoKCkubWF4UmFuaz1zfWZ1bmN0aW9uIEJYdChpKXtBcihpLm5vZGVzKCksZnVuY3Rpb24ocyl7dmFyIHU9aS5ub2RlKHMpO3UuZHVtbXk9PT0iZWRnZS1wcm94eSImJihpLmVkZ2UodS5lKS5sYWJlbFJhbms9dS5yYW5rLGkucmVtb3ZlTm9kZShzKSl9KX1mdW5jdGlvbiBGWHQoaSl7dmFyIHM9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHU9MCxkPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxwPTAsdj1pLmdyYXBoKCksYj12Lm1hcmdpbnh8fDAseT12Lm1hcmdpbnl8fDA7ZnVuY3Rpb24gVChfKXt2YXIgQT1fLngsUD1fLnksUj1fLndpZHRoLEY9Xy5oZWlnaHQ7cz1NYXRoLm1pbihzLEEtUi8yKSx1PU1hdGgubWF4KHUsQStSLzIpLGQ9TWF0aC5taW4oZCxQLUYvMikscD1NYXRoLm1heChwLFArRi8yKX1BcihpLm5vZGVzKCksZnVuY3Rpb24oXyl7VChpLm5vZGUoXykpfSksQXIoaS5lZGdlcygpLGZ1bmN0aW9uKF8pe3ZhciBBPWkuZWRnZShfKTtMbyhBLCJ4IikmJlQoQSl9KSxzLT1iLGQtPXksQXIoaS5ub2RlcygpLGZ1bmN0aW9uKF8pe3ZhciBBPWkubm9kZShfKTtBLngtPXMsQS55LT1kfSksQXIoaS5lZGdlcygpLGZ1bmN0aW9uKF8pe3ZhciBBPWkuZWRnZShfKTtBcihBLnBvaW50cyxmdW5jdGlvbihQKXtQLngtPXMsUC55LT1kfSksTG8oQSwieCIpJiYoQS54LT1zKSxMbyhBLCJ5IikmJihBLnktPWQpfSksdi53aWR0aD11LXMrYix2LmhlaWdodD1wLWQreX1mdW5jdGlvbiBSWHQoaSl7QXIoaS5lZGdlcygpLGZ1bmN0aW9uKHMpe3ZhciB1PWkuZWRnZShzKSxkPWkubm9kZShzLnYpLHA9aS5ub2RlKHMudyksdixiO3UucG9pbnRzPyh2PXUucG9pbnRzWzBdLGI9dS5wb2ludHNbdS5wb2ludHMubGVuZ3RoLTFdKToodS5wb2ludHM9W10sdj1wLGI9ZCksdS5wb2ludHMudW5zaGlmdChRSGUoZCx2KSksdS5wb2ludHMucHVzaChRSGUocCxiKSl9KX1mdW5jdGlvbiBqWHQoaSl7QXIoaS5lZGdlcygpLGZ1bmN0aW9uKHMpe3ZhciB1PWkuZWRnZShzKTtpZihMbyh1LCJ4Iikpc3dpdGNoKCh1LmxhYmVscG9zPT09ImwifHx1LmxhYmVscG9zPT09InIiKSYmKHUud2lkdGgtPXUubGFiZWxvZmZzZXQpLHUubGFiZWxwb3Mpe2Nhc2UibCI6dS54LT11LndpZHRoLzIrdS5sYWJlbG9mZnNldDticmVhaztjYXNlInIiOnUueCs9dS53aWR0aC8yK3UubGFiZWxvZmZzZXQ7YnJlYWt9fSl9ZnVuY3Rpb24gJFh0KGkpe0FyKGkuZWRnZXMoKSxmdW5jdGlvbihzKXt2YXIgdT1pLmVkZ2Uocyk7dS5yZXZlcnNlZCYmdS5wb2ludHMucmV2ZXJzZSgpfSl9ZnVuY3Rpb24gelh0KGkpe0FyKGkubm9kZXMoKSxmdW5jdGlvbihzKXtpZihpLmNoaWxkcmVuKHMpLmxlbmd0aCl7dmFyIHU9aS5ub2RlKHMpLGQ9aS5ub2RlKHUuYm9yZGVyVG9wKSxwPWkubm9kZSh1LmJvcmRlckJvdHRvbSksdj1pLm5vZGUoVVEodS5ib3JkZXJMZWZ0KSksYj1pLm5vZGUoVVEodS5ib3JkZXJSaWdodCkpO3Uud2lkdGg9TWF0aC5hYnMoYi54LXYueCksdS5oZWlnaHQ9TWF0aC5hYnMocC55LWQueSksdS54PXYueCt1LndpZHRoLzIsdS55PWQueSt1LmhlaWdodC8yfX0pLEFyKGkubm9kZXMoKSxmdW5jdGlvbihzKXtpLm5vZGUocykuZHVtbXk9PT0iYm9yZGVyIiYmaS5yZW1vdmVOb2RlKHMpfSl9ZnVuY3Rpb24gcVh0KGkpe0FyKGkuZWRnZXMoKSxmdW5jdGlvbihzKXtpZihzLnY9PT1zLncpe3ZhciB1PWkubm9kZShzLnYpO3Uuc2VsZkVkZ2VzfHwodS5zZWxmRWRnZXM9W10pLHUuc2VsZkVkZ2VzLnB1c2goe2U6cyxsYWJlbDppLmVkZ2Uocyl9KSxpLnJlbW92ZUVkZ2Uocyl9fSl9ZnVuY3Rpb24gSFh0KGkpe3ZhciBzPVdRKGkpO0FyKHMsZnVuY3Rpb24odSl7dmFyIGQ9MDtBcih1LGZ1bmN0aW9uKHAsdil7dmFyIGI9aS5ub2RlKHApO2Iub3JkZXI9ditkLEFyKGIuc2VsZkVkZ2VzLGZ1bmN0aW9uKHkpe3pEKGksInNlbGZlZGdlIix7d2lkdGg6eS5sYWJlbC53aWR0aCxoZWlnaHQ6eS5sYWJlbC5oZWlnaHQscmFuazpiLnJhbmssb3JkZXI6disgKytkLGU6eS5lLGxhYmVsOnkubGFiZWx9LCJfc2UiKX0pLGRlbGV0ZSBiLnNlbGZFZGdlc30pfSl9ZnVuY3Rpb24gVlh0KGkpe0FyKGkubm9kZXMoKSxmdW5jdGlvbihzKXt2YXIgdT1pLm5vZGUocyk7aWYodS5kdW1teT09PSJzZWxmZWRnZSIpe3ZhciBkPWkubm9kZSh1LmUudikscD1kLngrZC53aWR0aC8yLHY9ZC55LGI9dS54LXAseT1kLmhlaWdodC8yO2kuc2V0RWRnZSh1LmUsdS5sYWJlbCksaS5yZW1vdmVOb2RlKHMpLHUubGFiZWwucG9pbnRzPVt7eDpwKzIqYi8zLHk6di15fSx7eDpwKzUqYi82LHk6di15fSx7eDpwK2IseTp2fSx7eDpwKzUqYi82LHk6dit5fSx7eDpwKzIqYi8zLHk6dit5fV0sdS5sYWJlbC54PXUueCx1LmxhYmVsLnk9dS55fX0pfWZ1bmN0aW9uIGdtZShpLHMpe3JldHVybiBHUShFUihpLHMpLE51bWJlcil9ZnVuY3Rpb24gcG1lKGkpe3ZhciBzPXt9O3JldHVybiBBcihpLGZ1bmN0aW9uKHUsZCl7c1tkLnRvTG93ZXJDYXNlKCldPXV9KSxzfWZ1bmN0aW9uIHdWZShpLHMpe3JldHVybiEhaS5jaGlsZHJlbihzKS5sZW5ndGh9ZnVuY3Rpb24geVZlKGkpe3JldHVybiBibWUoaS52KSsiOiIrYm1lKGkudykrIjoiK2JtZShpLm5hbWUpfXZhciBVWHQ9LzovZztmdW5jdGlvbiBibWUoaSl7cmV0dXJuIGk/U3RyaW5nKGkpLnJlcGxhY2UoVVh0LCJcXDoiKToiIn1mdW5jdGlvbiBaNChpLHMpe3MmJmkuYXR0cigic3R5bGUiLHMpfWZ1bmN0aW9uIHhWZShpLHMsdSl7cyYmaS5hdHRyKCJjbGFzcyIscykuYXR0cigiY2xhc3MiLHUrIiAiK2kuYXR0cigiY2xhc3MiKSl9ZnVuY3Rpb24gcTMoaSxzKXt2YXIgdT1zLmdyYXBoKCk7aWYocmplKHUpKXt2YXIgZD11LnRyYW5zaXRpb247aWYoZ0QoZCkpcmV0dXJuIGQoaSl9cmV0dXJuIGl9dmFyIG1tZT17bm9ybWFsOktYdCx2ZWU6V1h0LHVuZGlyZWN0ZWQ6WVh0fTtmdW5jdGlvbiBHWHQoaSl7bW1lPWl9ZnVuY3Rpb24gS1h0KGkscyx1LGQpe3ZhciBwPWkuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscykuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIiksdj1wLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpO1o0KHYsdVtkKyJTdHlsZSJdKSx1W2QrIkNsYXNzIl0mJnYuYXR0cigiY2xhc3MiLHVbZCsiQ2xhc3MiXSl9ZnVuY3Rpb24gV1h0KGkscyx1LGQpe3ZhciBwPWkuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscykuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIiksdj1wLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIEwgNCA1IHoiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpO1o0KHYsdVtkKyJTdHlsZSJdKSx1W2QrIkNsYXNzIl0mJnYuYXR0cigiY2xhc3MiLHVbZCsiQ2xhc3MiXSl9ZnVuY3Rpb24gWVh0KGkscyx1LGQpe3ZhciBwPWkuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscykuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIiksdj1wLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgNSBMIDEwIDUiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpO1o0KHYsdVtkKyJTdHlsZSJdKSx1W2QrIkNsYXNzIl0mJnYuYXR0cigiY2xhc3MiLHVbZCsiQ2xhc3MiXSl9ZnVuY3Rpb24gdm1lKGkscyl7dmFyIHU9aS5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ3aWR0aCIsIjEwMDAwMCIpLGQ9dS5hcHBlbmQoInhodG1sOmRpdiIpO2QuYXR0cigieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIik7dmFyIHA9cy5sYWJlbDtzd2l0Y2godHlwZW9mIHApe2Nhc2UiZnVuY3Rpb24iOmQuaW5zZXJ0KHApO2JyZWFrO2Nhc2Uib2JqZWN0IjpkLmluc2VydChmdW5jdGlvbigpe3JldHVybiBwfSk7YnJlYWs7ZGVmYXVsdDpkLmh0bWwocCl9WjQoZCxzLmxhYmVsU3R5bGUpLGQuc3R5bGUoImRpc3BsYXkiLCJpbmxpbmUtYmxvY2siKSxkLnN0eWxlKCJ3aGl0ZS1zcGFjZSIsIm5vd3JhcCIpO3ZhciB2PWQubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiB1LmF0dHIoIndpZHRoIix2LndpZHRoKS5hdHRyKCJoZWlnaHQiLHYuaGVpZ2h0KSx1fWZ1bmN0aW9uIFhYdChpLHMpe3ZhciB1PWk7cmV0dXJuIHUubm9kZSgpLmFwcGVuZENoaWxkKHMubGFiZWwpLFo0KHUscy5sYWJlbFN0eWxlKSx1fWZ1bmN0aW9uIFFYdChpLHMpe2Zvcih2YXIgdT1pLmFwcGVuZCgidGV4dCIpLGQ9Slh0KHMubGFiZWwpLnNwbGl0KGAKYCkscD0wO3A8ZC5sZW5ndGg7cCsrKXUuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoInhtbDpzcGFjZSIsInByZXNlcnZlIikuYXR0cigiZHkiLCIxZW0iKS5hdHRyKCJ4IiwiMSIpLnRleHQoZFtwXSk7cmV0dXJuIFo0KHUscy5sYWJlbFN0eWxlKSx1fWZ1bmN0aW9uIEpYdChpKXtmb3IodmFyIHM9IiIsdT0hMSxkLHA9MDtwPGkubGVuZ3RoOysrcClpZihkPWlbcF0sdSl7c3dpdGNoKGQpe2Nhc2UibiI6cys9YApgO2JyZWFrO2RlZmF1bHQ6cys9ZH11PSExfWVsc2UgZD09PSJcXCI/dT0hMDpzKz1kO3JldHVybiBzfWZ1bmN0aW9uIHdtZShpLHMsdSl7dmFyIGQ9cy5sYWJlbCxwPWkuYXBwZW5kKCJnIik7cy5sYWJlbFR5cGU9PT0ic3ZnIj9YWHQocCxzKTp0eXBlb2YgZCE9InN0cmluZyJ8fHMubGFiZWxUeXBlPT09Imh0bWwiP3ZtZShwLHMpOlFYdChwLHMpO3ZhciB2PXAubm9kZSgpLmdldEJCb3goKSxiO3N3aXRjaCh1KXtjYXNlInRvcCI6Yj0tcy5oZWlnaHQvMjticmVhaztjYXNlImJvdHRvbSI6Yj1zLmhlaWdodC8yLXYuaGVpZ2h0O2JyZWFrO2RlZmF1bHQ6Yj0tdi5oZWlnaHQvMn1yZXR1cm4gcC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistdi53aWR0aC8yKyIsIitiKyIpIikscH12YXIgeW1lPWZ1bmN0aW9uKGkscyl7dmFyIHU9cy5ub2RlcygpLmZpbHRlcihmdW5jdGlvbih2KXtyZXR1cm4gd1ZlKHMsdil9KSxkPWkuc2VsZWN0QWxsKCJnLmNsdXN0ZXIiKS5kYXRhKHUsZnVuY3Rpb24odil7cmV0dXJuIHZ9KTtxMyhkLmV4aXQoKSxzKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCk7dmFyIHA9ZC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3RlciIpLmF0dHIoImlkIixmdW5jdGlvbih2KXt2YXIgYj1zLm5vZGUodik7cmV0dXJuIGIuaWR9KS5zdHlsZSgib3BhY2l0eSIsMCkuZWFjaChmdW5jdGlvbih2KXt2YXIgYj1zLm5vZGUodikseT1Jcih0aGlzKTtJcih0aGlzKS5hcHBlbmQoInJlY3QiKTt2YXIgVD15LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKTt3bWUoVCxiLGIuY2x1c3RlckxhYmVsUG9zKX0pO3JldHVybiBkPWQubWVyZ2UocCksZD1xMyhkLHMpLnN0eWxlKCJvcGFjaXR5IiwxKSxkLnNlbGVjdEFsbCgicmVjdCIpLmVhY2goZnVuY3Rpb24odil7dmFyIGI9cy5ub2RlKHYpLHk9SXIodGhpcyk7WjQoeSxiLnN0eWxlKX0pLGR9O2Z1bmN0aW9uIFpYdChpKXt5bWU9aX1sZXQgeG1lPWZ1bmN0aW9uKGkscyl7dmFyIHU9aS5zZWxlY3RBbGwoImcuZWRnZUxhYmVsIikuZGF0YShzLmVkZ2VzKCksZnVuY3Rpb24ocCl7cmV0dXJuIHlWZShwKX0pLmNsYXNzZWQoInVwZGF0ZSIsITApO3UuZXhpdCgpLnJlbW92ZSgpLHUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJlZGdlTGFiZWwiLCEwKS5zdHlsZSgib3BhY2l0eSIsMCksdT1pLnNlbGVjdEFsbCgiZy5lZGdlTGFiZWwiKSx1LmVhY2goZnVuY3Rpb24ocCl7dmFyIHY9SXIodGhpcyk7di5zZWxlY3QoIi5sYWJlbCIpLnJlbW92ZSgpO3ZhciBiPXMuZWRnZShwKSx5PXdtZSh2LHMuZWRnZShwKSwwKS5jbGFzc2VkKCJsYWJlbCIsITApLFQ9eS5ub2RlKCkuZ2V0QkJveCgpO2IubGFiZWxJZCYmeS5hdHRyKCJpZCIsYi5sYWJlbElkKSxMbyhiLCJ3aWR0aCIpfHwoYi53aWR0aD1ULndpZHRoKSxMbyhiLCJoZWlnaHQiKXx8KGIuaGVpZ2h0PVQuaGVpZ2h0KX0pO3ZhciBkO3JldHVybiB1LmV4aXQ/ZD11LmV4aXQoKTpkPXUuc2VsZWN0QWxsKG51bGwpLHEzKGQscykuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpLHV9O2Z1bmN0aW9uIGVRdChpKXt4bWU9aX1mdW5jdGlvbiBrVmUoaSxzKXtyZXR1cm4gaS5pbnRlcnNlY3Qocyl9dmFyIGttZT1mdW5jdGlvbihpLHMsdSl7dmFyIGQ9aS5zZWxlY3RBbGwoImcuZWRnZVBhdGgiKS5kYXRhKHMuZWRnZXMoKSxmdW5jdGlvbihiKXtyZXR1cm4geVZlKGIpfSkuY2xhc3NlZCgidXBkYXRlIiwhMCkscD1zUXQoZCxzKTthUXQoZCxzKTt2YXIgdj1kLm1lcmdlIT09dm9pZCAwP2QubWVyZ2UocCk6ZDtyZXR1cm4gcTModixzKS5zdHlsZSgib3BhY2l0eSIsMSksdi5lYWNoKGZ1bmN0aW9uKGIpe3ZhciB5PUlyKHRoaXMpLFQ9cy5lZGdlKGIpO1QuZWxlbT10aGlzLFQuaWQmJnkuYXR0cigiaWQiLFQuaWQpLHhWZSh5LFQuY2xhc3MsKHkuY2xhc3NlZCgidXBkYXRlIik/InVwZGF0ZSAiOiIiKSsiZWRnZVBhdGgiKX0pLHYuc2VsZWN0QWxsKCJwYXRoLnBhdGgiKS5lYWNoKGZ1bmN0aW9uKGIpe3ZhciB5PXMuZWRnZShiKTt5LmFycm93aGVhZElkPUtRKCJhcnJvd2hlYWQiKTt2YXIgVD1Jcih0aGlzKS5hdHRyKCJtYXJrZXItZW5kIixmdW5jdGlvbigpe3JldHVybiJ1cmwoIituUXQobG9jYXRpb24uaHJlZix5LmFycm93aGVhZElkKSsiKSJ9KS5zdHlsZSgiZmlsbCIsIm5vbmUiKTtxMyhULHMpLmF0dHIoImQiLGZ1bmN0aW9uKF8pe3JldHVybiByUXQocyxfKX0pLFo0KFQseS5zdHlsZSl9KSx2LnNlbGVjdEFsbCgiZGVmcyAqIikucmVtb3ZlKCksdi5zZWxlY3RBbGwoImRlZnMiKS5lYWNoKGZ1bmN0aW9uKGIpe3ZhciB5PXMuZWRnZShiKSxUPXVbeS5hcnJvd2hlYWRdO1QoSXIodGhpcykseS5hcnJvd2hlYWRJZCx5LCJhcnJvd2hlYWQiKX0pLHZ9O2Z1bmN0aW9uIHRRdChpKXtrbWU9aX1mdW5jdGlvbiBuUXQoaSxzKXt2YXIgdT1pLnNwbGl0KCIjIilbMF07cmV0dXJuIHUrIiMiK3N9ZnVuY3Rpb24gclF0KGkscyl7dmFyIHU9aS5lZGdlKHMpLGQ9aS5ub2RlKHMudikscD1pLm5vZGUocy53KSx2PXUucG9pbnRzLnNsaWNlKDEsdS5wb2ludHMubGVuZ3RoLTEpO3JldHVybiB2LnVuc2hpZnQoa1ZlKGQsdlswXSkpLHYucHVzaChrVmUocCx2W3YubGVuZ3RoLTFdKSksRVZlKHUsdil9ZnVuY3Rpb24gRVZlKGkscyl7dmFyIHU9KGs3fHxQSXQubGluZSkoKS54KGZ1bmN0aW9uKGQpe3JldHVybiBkLnh9KS55KGZ1bmN0aW9uKGQpe3JldHVybiBkLnl9KTtyZXR1cm4odS5jdXJ2ZXx8dS5pbnRlcnBvbGF0ZSkoaS5jdXJ2ZSksdShzKX1mdW5jdGlvbiBpUXQoaSl7dmFyIHM9aS5nZXRCQm94KCksdT1pLm93bmVyU1ZHRWxlbWVudC5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkubXVsdGlwbHkoaS5nZXRTY3JlZW5DVE0oKSkudHJhbnNsYXRlKHMud2lkdGgvMixzLmhlaWdodC8yKTtyZXR1cm57eDp1LmUseTp1LmZ9fWZ1bmN0aW9uIHNRdChpLHMpe3ZhciB1PWkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VQYXRoIikuc3R5bGUoIm9wYWNpdHkiLDApO3JldHVybiB1LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwicGF0aCIpLmF0dHIoImQiLGZ1bmN0aW9uKGQpe3ZhciBwPXMuZWRnZShkKSx2PXMubm9kZShkLnYpLmVsZW0sYj1HQyhwLnBvaW50cy5sZW5ndGgpLm1hcChmdW5jdGlvbigpe3JldHVybiBpUXQodil9KTtyZXR1cm4gRVZlKHAsYil9KSx1LmFwcGVuZCgiZGVmcyIpLHV9ZnVuY3Rpb24gYVF0KGkscyl7dmFyIHU9aS5leGl0KCk7cTModSxzKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCl9dmFyIEVtZT1mdW5jdGlvbihpLHMsdSl7dmFyIGQ9cy5ub2RlcygpLmZpbHRlcihmdW5jdGlvbihiKXtyZXR1cm4hd1ZlKHMsYil9KSxwPWkuc2VsZWN0QWxsKCJnLm5vZGUiKS5kYXRhKGQsZnVuY3Rpb24oYil7cmV0dXJuIGJ9KS5jbGFzc2VkKCJ1cGRhdGUiLCEwKTtwLmV4aXQoKS5yZW1vdmUoKSxwLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJub2RlIikuc3R5bGUoIm9wYWNpdHkiLDApLHA9aS5zZWxlY3RBbGwoImcubm9kZSIpLHAuZWFjaChmdW5jdGlvbihiKXt2YXIgeT1zLm5vZGUoYiksVD1Jcih0aGlzKTt4VmUoVCx5LmNsYXNzLChULmNsYXNzZWQoInVwZGF0ZSIpPyJ1cGRhdGUgIjoiIikrIm5vZGUiKSxULnNlbGVjdCgiZy5sYWJlbCIpLnJlbW92ZSgpO3ZhciBfPVQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLEE9d21lKF8seSksUD11W3kuc2hhcGVdLFI9RVIoQS5ub2RlKCkuZ2V0QkJveCgpLCJ3aWR0aCIsImhlaWdodCIpO3kuZWxlbT10aGlzLHkuaWQmJlQuYXR0cigiaWQiLHkuaWQpLHkubGFiZWxJZCYmXy5hdHRyKCJpZCIseS5sYWJlbElkKSxMbyh5LCJ3aWR0aCIpJiYoUi53aWR0aD15LndpZHRoKSxMbyh5LCJoZWlnaHQiKSYmKFIuaGVpZ2h0PXkuaGVpZ2h0KSxSLndpZHRoKz15LnBhZGRpbmdMZWZ0K3kucGFkZGluZ1JpZ2h0LFIuaGVpZ2h0Kz15LnBhZGRpbmdUb3AreS5wYWRkaW5nQm90dG9tLF8uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHkucGFkZGluZ0xlZnQteS5wYWRkaW5nUmlnaHQpLzIrIiwiKyh5LnBhZGRpbmdUb3AteS5wYWRkaW5nQm90dG9tKS8yKyIpIik7dmFyIEY9SXIodGhpcyk7Ri5zZWxlY3QoIi5sYWJlbC1jb250YWluZXIiKS5yZW1vdmUoKTt2YXIgaj1QKEYsUix5KS5jbGFzc2VkKCJsYWJlbC1jb250YWluZXIiLCEwKTtaNChqLHkuc3R5bGUpO3ZhciBLPWoubm9kZSgpLmdldEJCb3goKTt5LndpZHRoPUsud2lkdGgseS5oZWlnaHQ9Sy5oZWlnaHR9KTt2YXIgdjtyZXR1cm4gcC5leGl0P3Y9cC5leGl0KCk6dj1wLnNlbGVjdEFsbChudWxsKSxxMyh2LHMpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKSxwfTtmdW5jdGlvbiBvUXQoaSl7RW1lPWl9ZnVuY3Rpb24gY1F0KGkscyl7dmFyIHU9aS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4hSXIodGhpcykuY2xhc3NlZCgidXBkYXRlIil9KTtmdW5jdGlvbiBkKHApe3ZhciB2PXMubm9kZShwKTtyZXR1cm4idHJhbnNsYXRlKCIrdi54KyIsIit2LnkrIikifXUuYXR0cigidHJhbnNmb3JtIixkKSxxMyhpLHMpLnN0eWxlKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLGQpLHEzKHUuc2VsZWN0QWxsKCJyZWN0IikscykuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHApe3JldHVybiBzLm5vZGUocCkud2lkdGh9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHApe3JldHVybiBzLm5vZGUocCkuaGVpZ2h0fSkuYXR0cigieCIsZnVuY3Rpb24ocCl7dmFyIHY9cy5ub2RlKHApO3JldHVybi12LndpZHRoLzJ9KS5hdHRyKCJ5IixmdW5jdGlvbihwKXt2YXIgdj1zLm5vZGUocCk7cmV0dXJuLXYuaGVpZ2h0LzJ9KX1mdW5jdGlvbiB1UXQoaSxzKXt2YXIgdT1pLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiFJcih0aGlzKS5jbGFzc2VkKCJ1cGRhdGUiKX0pO2Z1bmN0aW9uIGQocCl7dmFyIHY9cy5lZGdlKHApO3JldHVybiBMbyh2LCJ4Iik/InRyYW5zbGF0ZSgiK3YueCsiLCIrdi55KyIpIjoiIn11LmF0dHIoInRyYW5zZm9ybSIsZCkscTMoaSxzKS5zdHlsZSgib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIixkKX1mdW5jdGlvbiBsUXQoaSxzKXt2YXIgdT1pLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiFJcih0aGlzKS5jbGFzc2VkKCJ1cGRhdGUiKX0pO2Z1bmN0aW9uIGQocCl7dmFyIHY9cy5ub2RlKHApO3JldHVybiJ0cmFuc2xhdGUoIit2LngrIiwiK3YueSsiKSJ9dS5hdHRyKCJ0cmFuc2Zvcm0iLGQpLHEzKGkscykuc3R5bGUoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsZCl9ZnVuY3Rpb24gVFZlKGkscyx1LGQpe3ZhciBwPWkueCx2PWkueSxiPXAtZC54LHk9di1kLnksVD1NYXRoLnNxcnQocypzKnkqeSt1KnUqYipiKSxfPU1hdGguYWJzKHMqdSpiL1QpO2QueDxwJiYoXz0tXyk7dmFyIEE9TWF0aC5hYnMocyp1KnkvVCk7cmV0dXJuIGQueTx2JiYoQT0tQSkse3g6cCtfLHk6ditBfX1mdW5jdGlvbiBoUXQoaSxzLHUpe3JldHVybiBUVmUoaSxzLHMsdSl9ZnVuY3Rpb24gZlF0KGkscyx1LGQpe3ZhciBwLHYsYix5LFQsXyxBLFAsUixGLGosSyxlZSxpZSxvZTtpZihwPXMueS1pLnksYj1pLngtcy54LFQ9cy54KmkueS1pLngqcy55LFI9cCp1LngrYip1LnkrVCxGPXAqZC54K2IqZC55K1QsIShSIT09MCYmRiE9PTAmJkNWZShSLEYpKSYmKHY9ZC55LXUueSx5PXUueC1kLngsXz1kLngqdS55LXUueCpkLnksQT12KmkueCt5KmkueStfLFA9dipzLngreSpzLnkrXywhKEEhPT0wJiZQIT09MCYmQ1ZlKEEsUCkpJiYoaj1wKnktdipiLGohPT0wKSkpcmV0dXJuIEs9TWF0aC5hYnMoai8yKSxlZT1iKl8teSpULGllPWVlPDA/KGVlLUspL2o6KGVlK0spL2osZWU9dipULXAqXyxvZT1lZTwwPyhlZS1LKS9qOihlZStLKS9qLHt4OmllLHk6b2V9fWZ1bmN0aW9uIENWZShpLHMpe3JldHVybiBpKnM+MH1mdW5jdGlvbiBlNShpLHMsdSl7dmFyIGQ9aS54LHA9aS55LHY9W10sYj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkseT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7cy5mb3JFYWNoKGZ1bmN0aW9uKGope2I9TWF0aC5taW4oYixqLngpLHk9TWF0aC5taW4oeSxqLnkpfSk7Zm9yKHZhciBUPWQtaS53aWR0aC8yLWIsXz1wLWkuaGVpZ2h0LzIteSxBPTA7QTxzLmxlbmd0aDtBKyspe3ZhciBQPXNbQV0sUj1zW0E8cy5sZW5ndGgtMT9BKzE6MF0sRj1mUXQoaSx1LHt4OlQrUC54LHk6XytQLnl9LHt4OlQrUi54LHk6XytSLnl9KTtGJiZ2LnB1c2goRil9cmV0dXJuIHYubGVuZ3RoPyh2Lmxlbmd0aD4xJiZ2LnNvcnQoZnVuY3Rpb24oaixLKXt2YXIgZWU9ai54LXUueCxpZT1qLnktdS55LG9lPU1hdGguc3FydChlZSplZStpZSppZSkscGU9Sy54LXUueCxiZT1LLnktdS55LGFlPU1hdGguc3FydChwZSpwZStiZSpiZSk7cmV0dXJuIG9lPGFlPy0xOm9lPT09YWU/MDoxfSksdlswXSk6KGNvbnNvbGUubG9nKCJOTyBJTlRFUlNFQ1RJT04gRk9VTkQsIFJFVFVSTiBOT0RFIENFTlRFUiIsaSksaSl9ZnVuY3Rpb24gVG1lKGkscyl7dmFyIHU9aS54LGQ9aS55LHA9cy54LXUsdj1zLnktZCxiPWkud2lkdGgvMix5PWkuaGVpZ2h0LzIsVCxfO3JldHVybiBNYXRoLmFicyh2KSpiPk1hdGguYWJzKHApKnk/KHY8MCYmKHk9LXkpLFQ9dj09PTA/MDp5KnAvdixfPXkpOihwPDAmJihiPS1iKSxUPWIsXz1wPT09MD8wOmIqdi9wKSx7eDp1K1QseTpkK199fXZhciBDbWU9e3JlY3Q6Z1F0LGVsbGlwc2U6cFF0LGNpcmNsZTpiUXQsZGlhbW9uZDptUXR9O2Z1bmN0aW9uIGRRdChpKXtDbWU9aX1mdW5jdGlvbiBnUXQoaSxzLHUpe3ZhciBkPWkuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigicngiLHUucngpLmF0dHIoInJ5Iix1LnJ5KS5hdHRyKCJ4Iiwtcy53aWR0aC8yKS5hdHRyKCJ5Iiwtcy5oZWlnaHQvMikuYXR0cigid2lkdGgiLHMud2lkdGgpLmF0dHIoImhlaWdodCIscy5oZWlnaHQpO3JldHVybiB1LmludGVyc2VjdD1mdW5jdGlvbihwKXtyZXR1cm4gVG1lKHUscCl9LGR9ZnVuY3Rpb24gcFF0KGkscyx1KXt2YXIgZD1zLndpZHRoLzIscD1zLmhlaWdodC8yLHY9aS5pbnNlcnQoImVsbGlwc2UiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4Iiwtcy53aWR0aC8yKS5hdHRyKCJ5Iiwtcy5oZWlnaHQvMikuYXR0cigicngiLGQpLmF0dHIoInJ5IixwKTtyZXR1cm4gdS5pbnRlcnNlY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIFRWZSh1LGQscCxiKX0sdn1mdW5jdGlvbiBiUXQoaSxzLHUpe3ZhciBkPU1hdGgubWF4KHMud2lkdGgscy5oZWlnaHQpLzIscD1pLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsLXMud2lkdGgvMikuYXR0cigieSIsLXMuaGVpZ2h0LzIpLmF0dHIoInIiLGQpO3JldHVybiB1LmludGVyc2VjdD1mdW5jdGlvbih2KXtyZXR1cm4gaFF0KHUsZCx2KX0scH1mdW5jdGlvbiBtUXQoaSxzLHUpe3ZhciBkPXMud2lkdGgqTWF0aC5TUVJUMi8yLHA9cy5oZWlnaHQqTWF0aC5TUVJUMi8yLHY9W3t4OjAseTotcH0se3g6LWQseTowfSx7eDowLHk6cH0se3g6ZCx5OjB9XSxiPWkuaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIix2Lm1hcChmdW5jdGlvbih5KXtyZXR1cm4geS54KyIsIit5Lnl9KS5qb2luKCIgIikpO3JldHVybiB1LmludGVyc2VjdD1mdW5jdGlvbih5KXtyZXR1cm4gZTUodSx2LHkpfSxifWZ1bmN0aW9uIHZRdCgpe3ZhciBpPWZ1bmN0aW9uKHMsdSl7eFF0KHUpO3ZhciBkPUFSKHMsIm91dHB1dCIpLHA9QVIoZCwiY2x1c3RlcnMiKSx2PUFSKGQsImVkZ2VQYXRocyIpLGI9eG1lKEFSKGQsImVkZ2VMYWJlbHMiKSx1KSx5PUVtZShBUihkLCJub2RlcyIpLHUsQ21lKTtxRCh1KSxsUXQoeSx1KSx1UXQoYix1KSxrbWUodix1LG1tZSk7dmFyIFQ9eW1lKHAsdSk7Y1F0KFQsdSksa1F0KHUpfTtyZXR1cm4gaS5jcmVhdGVOb2Rlcz1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ob1F0KHMpLGkpOkVtZX0saS5jcmVhdGVDbHVzdGVycz1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oWlh0KHMpLGkpOnltZX0saS5jcmVhdGVFZGdlTGFiZWxzPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlUXQocyksaSk6eG1lfSxpLmNyZWF0ZUVkZ2VQYXRocz1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odFF0KHMpLGkpOmttZX0saS5zaGFwZXM9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGRRdChzKSxpKTpDbWV9LGkuYXJyb3dzPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhHWHQocyksaSk6bW1lfSxpfXZhciB3UXQ9e3BhZGRpbmdMZWZ0OjEwLHBhZGRpbmdSaWdodDoxMCxwYWRkaW5nVG9wOjEwLHBhZGRpbmdCb3R0b206MTAscng6MCxyeTowLHNoYXBlOiJyZWN0In0seVF0PXthcnJvd2hlYWQ6Im5vcm1hbCIsY3VydmU6a3B9O2Z1bmN0aW9uIHhRdChpKXtpLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihzKXt2YXIgdT1pLm5vZGUocyk7IUxvKHUsImxhYmVsIikmJiFpLmNoaWxkcmVuKHMpLmxlbmd0aCYmKHUubGFiZWw9cyksTG8odSwicGFkZGluZ1giKSYmJEQodSx7cGFkZGluZ0xlZnQ6dS5wYWRkaW5nWCxwYWRkaW5nUmlnaHQ6dS5wYWRkaW5nWH0pLExvKHUsInBhZGRpbmdZIikmJiREKHUse3BhZGRpbmdUb3A6dS5wYWRkaW5nWSxwYWRkaW5nQm90dG9tOnUucGFkZGluZ1l9KSxMbyh1LCJwYWRkaW5nIikmJiREKHUse3BhZGRpbmdMZWZ0OnUucGFkZGluZyxwYWRkaW5nUmlnaHQ6dS5wYWRkaW5nLHBhZGRpbmdUb3A6dS5wYWRkaW5nLHBhZGRpbmdCb3R0b206dS5wYWRkaW5nfSksJEQodSx3UXQpLEFyKFsicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSJdLGZ1bmN0aW9uKGQpe3VbZF09TnVtYmVyKHVbZF0pfSksTG8odSwid2lkdGgiKSYmKHUuX3ByZXZXaWR0aD11LndpZHRoKSxMbyh1LCJoZWlnaHQiKSYmKHUuX3ByZXZIZWlnaHQ9dS5oZWlnaHQpfSksaS5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIHU9aS5lZGdlKHMpO0xvKHUsImxhYmVsIil8fCh1LmxhYmVsPSIiKSwkRCh1LHlRdCl9KX1mdW5jdGlvbiBrUXQoaSl7QXIoaS5ub2RlcygpLGZ1bmN0aW9uKHMpe3ZhciB1PWkubm9kZShzKTtMbyh1LCJfcHJldldpZHRoIik/dS53aWR0aD11Ll9wcmV2V2lkdGg6ZGVsZXRlIHUud2lkdGgsTG8odSwiX3ByZXZIZWlnaHQiKT91LmhlaWdodD11Ll9wcmV2SGVpZ2h0OmRlbGV0ZSB1LmhlaWdodCxkZWxldGUgdS5fcHJldldpZHRoLGRlbGV0ZSB1Ll9wcmV2SGVpZ2h0fSl9ZnVuY3Rpb24gQVIoaSxzKXt2YXIgdT1pLnNlbGVjdCgiZy4iK3MpO3JldHVybiB1LmVtcHR5KCkmJih1PWkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLHMpKSx1fWZ1bmN0aW9uIFNWZShpLHMsdSl7Y29uc3QgZD1zLndpZHRoLHA9cy5oZWlnaHQsdj0oZCtwKSouOSxiPVt7eDp2LzIseTowfSx7eDp2LHk6LXYvMn0se3g6di8yLHk6LXZ9LHt4OjAseTotdi8yfV0seT16NyhpLHYsdixiKTtyZXR1cm4gdS5pbnRlcnNlY3Q9ZnVuY3Rpb24oVCl7cmV0dXJuIGU1KHUsYixUKX0seX1mdW5jdGlvbiBfVmUoaSxzLHUpe2NvbnN0IHA9cy5oZWlnaHQsdj1wLzQsYj1zLndpZHRoKzIqdix5PVt7eDp2LHk6MH0se3g6Yi12LHk6MH0se3g6Yix5Oi1wLzJ9LHt4OmItdix5Oi1wfSx7eDp2LHk6LXB9LHt4OjAseTotcC8yfV0sVD16NyhpLGIscCx5KTtyZXR1cm4gdS5pbnRlcnNlY3Q9ZnVuY3Rpb24oXyl7cmV0dXJuIGU1KHUseSxfKX0sVH1mdW5jdGlvbiBBVmUoaSxzLHUpe2NvbnN0IGQ9cy53aWR0aCxwPXMuaGVpZ2h0LHY9W3t4Oi1wLzIseTowfSx7eDpkLHk6MH0se3g6ZCx5Oi1wfSx7eDotcC8yLHk6LXB9LHt4OjAseTotcC8yfV0sYj16NyhpLGQscCx2KTtyZXR1cm4gdS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeSl7cmV0dXJuIGU1KHUsdix5KX0sYn1mdW5jdGlvbiBMVmUoaSxzLHUpe2NvbnN0IGQ9cy53aWR0aCxwPXMuaGVpZ2h0LHY9W3t4Oi0yKnAvNix5OjB9LHt4OmQtcC82LHk6MH0se3g6ZCsyKnAvNix5Oi1wfSx7eDpwLzYseTotcH1dLGI9ejcoaSxkLHAsdik7cmV0dXJuIHUuaW50ZXJzZWN0PWZ1bmN0aW9uKHkpe3JldHVybiBlNSh1LHYseSl9LGJ9ZnVuY3Rpb24gTVZlKGkscyx1KXtjb25zdCBkPXMud2lkdGgscD1zLmhlaWdodCx2PVt7eDoyKnAvNix5OjB9LHt4OmQrcC82LHk6MH0se3g6ZC0yKnAvNix5Oi1wfSx7eDotcC82LHk6LXB9XSxiPXo3KGksZCxwLHYpO3JldHVybiB1LmludGVyc2VjdD1mdW5jdGlvbih5KXtyZXR1cm4gZTUodSx2LHkpfSxifWZ1bmN0aW9uIERWZShpLHMsdSl7Y29uc3QgZD1zLndpZHRoLHA9cy5oZWlnaHQsdj1be3g6LTIqcC82LHk6MH0se3g6ZCsyKnAvNix5OjB9LHt4OmQtcC82LHk6LXB9LHt4OnAvNix5Oi1wfV0sYj16NyhpLGQscCx2KTtyZXR1cm4gdS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeSl7cmV0dXJuIGU1KHUsdix5KX0sYn1mdW5jdGlvbiBJVmUoaSxzLHUpe2NvbnN0IGQ9cy53aWR0aCxwPXMuaGVpZ2h0LHY9W3t4OnAvNix5OjB9LHt4OmQtcC82LHk6MH0se3g6ZCsyKnAvNix5Oi1wfSx7eDotMipwLzYseTotcH1dLGI9ejcoaSxkLHAsdik7cmV0dXJuIHUuaW50ZXJzZWN0PWZ1bmN0aW9uKHkpe3JldHVybiBlNSh1LHYseSl9LGJ9ZnVuY3Rpb24gT1ZlKGkscyx1KXtjb25zdCBkPXMud2lkdGgscD1zLmhlaWdodCx2PVt7eDowLHk6MH0se3g6ZCtwLzIseTowfSx7eDpkLHk6LXAvMn0se3g6ZCtwLzIseTotcH0se3g6MCx5Oi1wfV0sYj16NyhpLGQscCx2KTtyZXR1cm4gdS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeSl7cmV0dXJuIGU1KHUsdix5KX0sYn1mdW5jdGlvbiBOVmUoaSxzLHUpe2NvbnN0IGQ9cy5oZWlnaHQscD1zLndpZHRoK2QvNCx2PWkuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigicngiLGQvMikuYXR0cigicnkiLGQvMikuYXR0cigieCIsLXAvMikuYXR0cigieSIsLWQvMikuYXR0cigid2lkdGgiLHApLmF0dHIoImhlaWdodCIsZCk7cmV0dXJuIHUuaW50ZXJzZWN0PWZ1bmN0aW9uKGIpe3JldHVybiBUbWUodSxiKX0sdn1mdW5jdGlvbiBQVmUoaSxzLHUpe2NvbnN0IGQ9cy53aWR0aCxwPXMuaGVpZ2h0LHY9W3t4OjAseTowfSx7eDpkLHk6MH0se3g6ZCx5Oi1wfSx7eDowLHk6LXB9LHt4OjAseTowfSx7eDotOCx5OjB9LHt4OmQrOCx5OjB9LHt4OmQrOCx5Oi1wfSx7eDotOCx5Oi1wfSx7eDotOCx5OjB9XSxiPXo3KGksZCxwLHYpO3JldHVybiB1LmludGVyc2VjdD1mdW5jdGlvbih5KXtyZXR1cm4gZTUodSx2LHkpfSxifWZ1bmN0aW9uIEJWZShpLHMsdSl7Y29uc3QgZD1zLndpZHRoLHA9ZC8yLHY9cC8oMi41K2QvNTApLGI9cy5oZWlnaHQrdix5PSJNIDAsIit2KyIgYSAiK3ArIiwiK3YrIiAwLDAsMCAiK2QrIiAwIGEgIitwKyIsIit2KyIgMCwwLDAgIistZCsiIDAgbCAwLCIrYisiIGEgIitwKyIsIit2KyIgMCwwLDAgIitkKyIgMCBsIDAsIistYixUPWkuYXR0cigibGFiZWwtb2Zmc2V0LXkiLHYpLmluc2VydCgicGF0aCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImQiLHkpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1kLzIrIiwiKy0oYi8yK3YpKyIpIik7cmV0dXJuIHUuaW50ZXJzZWN0PWZ1bmN0aW9uKF8pe2NvbnN0IEE9VG1lKHUsXyksUD1BLngtdS54O2lmKHAhPTAmJihNYXRoLmFicyhQKTx1LndpZHRoLzJ8fE1hdGguYWJzKFApPT11LndpZHRoLzImJk1hdGguYWJzKEEueS11LnkpPnUuaGVpZ2h0LzItdikpe2xldCBSPXYqdiooMS1QKlAvKHAqcCkpO1IhPTAmJihSPU1hdGguc3FydChSKSksUj12LVIsXy55LXUueT4wJiYoUj0tUiksQS55Kz1SfXJldHVybiBBfSxUfWZ1bmN0aW9uIEVRdChpKXtpLnNoYXBlcygpLnF1ZXN0aW9uPVNWZSxpLnNoYXBlcygpLmhleGFnb249X1ZlLGkuc2hhcGVzKCkuc3RhZGl1bT1OVmUsaS5zaGFwZXMoKS5zdWJyb3V0aW5lPVBWZSxpLnNoYXBlcygpLmN5bGluZGVyPUJWZSxpLnNoYXBlcygpLnJlY3RfbGVmdF9pbnZfYXJyb3c9QVZlLGkuc2hhcGVzKCkubGVhbl9yaWdodD1MVmUsaS5zaGFwZXMoKS5sZWFuX2xlZnQ9TVZlLGkuc2hhcGVzKCkudHJhcGV6b2lkPURWZSxpLnNoYXBlcygpLmludl90cmFwZXpvaWQ9SVZlLGkuc2hhcGVzKCkucmVjdF9yaWdodF9pbnZfYXJyb3c9T1ZlfWZ1bmN0aW9uIFRRdChpKXtpKHtxdWVzdGlvbjpTVmV9KSxpKHtoZXhhZ29uOl9WZX0pLGkoe3N0YWRpdW06TlZlfSksaSh7c3Vicm91dGluZTpQVmV9KSxpKHtjeWxpbmRlcjpCVmV9KSxpKHtyZWN0X2xlZnRfaW52X2Fycm93OkFWZX0pLGkoe2xlYW5fcmlnaHQ6TFZlfSksaSh7bGVhbl9sZWZ0Ok1WZX0pLGkoe3RyYXBlem9pZDpEVmV9KSxpKHtpbnZfdHJhcGV6b2lkOklWZX0pLGkoe3JlY3RfcmlnaHRfaW52X2Fycm93Ok9WZX0pfWZ1bmN0aW9uIHo3KGkscyx1LGQpe3JldHVybiBpLmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsZC5tYXAoZnVuY3Rpb24ocCl7cmV0dXJuIHAueCsiLCIrcC55fSkuam9pbigiICIpKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistcy8yKyIsIit1LzIrIikiKX1jb25zdCBDUXQ9e2FkZFRvUmVuZGVyOkVRdCxhZGRUb1JlbmRlclYyOlRRdH0sRlZlPXt9LFNRdD1mdW5jdGlvbihpKXtjb25zdCBzPU9iamVjdC5rZXlzKGkpO2Zvcihjb25zdCB1IG9mIHMpRlZlW3VdPWlbdV19LFJWZT1hc3luYyBmdW5jdGlvbihpLHMsdSxkLHAsdil7Y29uc3QgYj1kP2Quc2VsZWN0KGBbaWQ9IiR7dX0iXWApOklyKGBbaWQ9IiR7dX0iXWApLHk9cHx8ZG9jdW1lbnQsVD1PYmplY3Qua2V5cyhpKTtmb3IoY29uc3QgXyBvZiBUKXtjb25zdCBBPWlbX107bGV0IFA9ImRlZmF1bHQiO0EuY2xhc3Nlcy5sZW5ndGg+MCYmKFA9QS5jbGFzc2VzLmpvaW4oIiAiKSk7Y29uc3QgUj1vbShBLnN0eWxlcyk7bGV0IEY9QS50ZXh0IT09dm9pZCAwP0EudGV4dDpBLmlkLGo7aWYoZjEocXQoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IGllPXtsYWJlbDphd2FpdCBDQyhGLnJlcGxhY2UoL2ZhW2JscnNdPzpmYS1bXHctXSsvZyxvZT0+YDxpIGNsYXNzPScke29lLnJlcGxhY2UoIjoiLCIgIil9Jz48L2k+YCkscXQoKSl9O2o9dm1lKGIsaWUpLm5vZGUoKSxqLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoail9ZWxzZXtjb25zdCBpZT15LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7aWUuc2V0QXR0cmlidXRlKCJzdHlsZSIsUi5sYWJlbFN0eWxlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpO2NvbnN0IG9lPUYuc3BsaXQoY2kubGluZUJyZWFrUmVnZXgpO2Zvcihjb25zdCBwZSBvZiBvZSl7Y29uc3QgYmU9eS5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTtiZS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSxiZS5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIiksYmUuc2V0QXR0cmlidXRlKCJ4IiwiMSIpLGJlLnRleHRDb250ZW50PXBlLGllLmFwcGVuZENoaWxkKGJlKX1qPWllfWxldCBLPTAsZWU9IiI7c3dpdGNoKEEudHlwZSl7Y2FzZSJyb3VuZCI6Sz01LGVlPSJyZWN0IjticmVhaztjYXNlInNxdWFyZSI6ZWU9InJlY3QiO2JyZWFrO2Nhc2UiZGlhbW9uZCI6ZWU9InF1ZXN0aW9uIjticmVhaztjYXNlImhleGFnb24iOmVlPSJoZXhhZ29uIjticmVhaztjYXNlIm9kZCI6ZWU9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UibGVhbl9yaWdodCI6ZWU9ImxlYW5fcmlnaHQiO2JyZWFrO2Nhc2UibGVhbl9sZWZ0IjplZT0ibGVhbl9sZWZ0IjticmVhaztjYXNlInRyYXBlem9pZCI6ZWU9InRyYXBlem9pZCI7YnJlYWs7Y2FzZSJpbnZfdHJhcGV6b2lkIjplZT0iaW52X3RyYXBlem9pZCI7YnJlYWs7Y2FzZSJvZGRfcmlnaHQiOmVlPSJyZWN0X2xlZnRfaW52X2Fycm93IjticmVhaztjYXNlImNpcmNsZSI6ZWU9ImNpcmNsZSI7YnJlYWs7Y2FzZSJlbGxpcHNlIjplZT0iZWxsaXBzZSI7YnJlYWs7Y2FzZSJzdGFkaXVtIjplZT0ic3RhZGl1bSI7YnJlYWs7Y2FzZSJzdWJyb3V0aW5lIjplZT0ic3Vicm91dGluZSI7YnJlYWs7Y2FzZSJjeWxpbmRlciI6ZWU9ImN5bGluZGVyIjticmVhaztjYXNlImdyb3VwIjplZT0icmVjdCI7YnJlYWs7ZGVmYXVsdDplZT0icmVjdCJ9WGUud2FybigiQWRkaW5nIG5vZGUiLEEuaWQsQS5kb21JZCkscy5zZXROb2RlKHYuZGIubG9va1VwRG9tSWQoQS5pZCkse2xhYmVsVHlwZToic3ZnIixsYWJlbFN0eWxlOlIubGFiZWxTdHlsZSxzaGFwZTplZSxsYWJlbDpqLHJ4Oksscnk6SyxjbGFzczpQLHN0eWxlOlIuc3R5bGUsaWQ6di5kYi5sb29rVXBEb21JZChBLmlkKX0pfX0salZlPWFzeW5jIGZ1bmN0aW9uKGkscyx1KXtsZXQgZD0wLHAsdjtpZihpLmRlZmF1bHRTdHlsZSE9PXZvaWQgMCl7Y29uc3QgYj1vbShpLmRlZmF1bHRTdHlsZSk7cD1iLnN0eWxlLHY9Yi5sYWJlbFN0eWxlfWZvcihjb25zdCBiIG9mIGkpe2QrKztjb25zdCB5PSJMLSIrYi5zdGFydCsiLSIrYi5lbmQsVD0iTFMtIitiLnN0YXJ0LF89IkxFLSIrYi5lbmQsQT17fTtiLnR5cGU9PT0iYXJyb3dfb3BlbiI/QS5hcnJvd2hlYWQ9Im5vbmUiOkEuYXJyb3doZWFkPSJub3JtYWwiO2xldCBQPSIiLFI9IiI7aWYoYi5zdHlsZSE9PXZvaWQgMCl7Y29uc3QgRj1vbShiLnN0eWxlKTtQPUYuc3R5bGUsUj1GLmxhYmVsU3R5bGV9ZWxzZSBzd2l0Y2goYi5zdHJva2Upe2Nhc2Uibm9ybWFsIjpQPSJmaWxsOm5vbmUiLHAhPT12b2lkIDAmJihQPXApLHYhPT12b2lkIDAmJihSPXYpO2JyZWFrO2Nhc2UiZG90dGVkIjpQPSJmaWxsOm5vbmU7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtZGFzaGFycmF5OjM7IjticmVhaztjYXNlInRoaWNrIjpQPSIgc3Ryb2tlLXdpZHRoOiAzLjVweDtmaWxsOm5vbmUiO2JyZWFrfUEuc3R5bGU9UCxBLmxhYmVsU3R5bGU9UixiLmludGVycG9sYXRlIT09dm9pZCAwP0EuY3VydmU9T3YoYi5pbnRlcnBvbGF0ZSxrcCk6aS5kZWZhdWx0SW50ZXJwb2xhdGUhPT12b2lkIDA/QS5jdXJ2ZT1PdihpLmRlZmF1bHRJbnRlcnBvbGF0ZSxrcCk6QS5jdXJ2ZT1PdihGVmUuY3VydmUsa3ApLGIudGV4dD09PXZvaWQgMD9iLnN0eWxlIT09dm9pZCAwJiYoQS5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIpOihBLmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIixBLmxhYmVscG9zPSJjIixmMShxdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKT8oQS5sYWJlbFR5cGU9Imh0bWwiLEEubGFiZWw9YDxzcGFuIGlkPSJMLSR7eX0iIGNsYXNzPSJlZGdlTGFiZWwgTC0ke1R9JyBMLSR7X30iIHN0eWxlPSIke0EubGFiZWxTdHlsZX0iPiR7YXdhaXQgQ0MoYi50ZXh0LnJlcGxhY2UoL2ZhW2JscnNdPzpmYS1bXHctXSsvZyxGPT5gPGkgY2xhc3M9JyR7Ri5yZXBsYWNlKCI6IiwiICIpfSc+PC9pPmApLHF0KCkpfTwvc3Bhbj5gKTooQS5sYWJlbFR5cGU9InRleHQiLEEubGFiZWw9Yi50ZXh0LnJlcGxhY2UoY2kubGluZUJyZWFrUmVnZXgsYApgKSxiLnN0eWxlPT09dm9pZCAwJiYoQS5zdHlsZT1BLnN0eWxlfHwic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZSIpLEEubGFiZWxTdHlsZT1BLmxhYmVsU3R5bGUucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSkpLEEuaWQ9eSxBLmNsYXNzPVQrIiAiK18sQS5taW5sZW49Yi5sZW5ndGh8fDEscy5zZXRFZGdlKHUuZGIubG9va1VwRG9tSWQoYi5zdGFydCksdS5kYi5sb29rVXBEb21JZChiLmVuZCksQSxkKX19LF9RdD17c2V0Q29uZjpTUXQsYWRkVmVydGljZXM6UlZlLGFkZEVkZ2VzOmpWZSxnZXRDbGFzc2VzOmZ1bmN0aW9uKGkscyl7cmV0dXJuIFhlLmluZm8oIkV4dHJhY3RpbmcgY2xhc3NlcyIpLHMuZGIuZ2V0Q2xhc3NlcygpfSxkcmF3OmFzeW5jIGZ1bmN0aW9uKGkscyx1LGQpe1hlLmluZm8oIkRyYXdpbmcgZmxvd2NoYXJ0Iik7Y29uc3R7c2VjdXJpdHlMZXZlbDpwLGZsb3djaGFydDp2fT1xdCgpO2xldCBiO3A9PT0ic2FuZGJveCImJihiPUlyKCIjaSIrcykpO2NvbnN0IHk9SXIocD09PSJzYW5kYm94Ij9iLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHk6ImJvZHkiKSxUPXA9PT0ic2FuZGJveCI/Yi5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudDpkb2N1bWVudDtsZXQgXz1kLmRiLmdldERpcmVjdGlvbigpO189PT12b2lkIDAmJihfPSJURCIpO2NvbnN0IEE9di5ub2RlU3BhY2luZ3x8NTAsUD12LnJhbmtTcGFjaW5nfHw1MCxSPW5ldyBCMCh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOl8sbm9kZXNlcDpBLHJhbmtzZXA6UCxtYXJnaW54OjgsbWFyZ2lueTo4fSkuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpe3JldHVybnt9fSk7bGV0IEY7Y29uc3Qgaj1kLmRiLmdldFN1YkdyYXBocygpO2ZvcihsZXQgbmU9ai5sZW5ndGgtMTtuZT49MDtuZS0tKUY9altuZV0sZC5kYi5hZGRWZXJ0ZXgoRi5pZCxGLnRpdGxlLCJncm91cCIsdm9pZCAwLEYuY2xhc3Nlcyk7Y29uc3QgSz1kLmRiLmdldFZlcnRpY2VzKCk7WGUud2FybigiR2V0IHZlcnRpY2VzIixLKTtjb25zdCBlZT1kLmRiLmdldEVkZ2VzKCk7bGV0IGllPTA7Zm9yKGllPWoubGVuZ3RoLTE7aWU+PTA7aWUtLSl7Rj1qW2llXSxfQmUoImNsdXN0ZXIiKS5hcHBlbmQoInRleHQiKTtmb3IobGV0IG5lPTA7bmU8Ri5ub2Rlcy5sZW5ndGg7bmUrKylYZS53YXJuKCJTZXR0aW5nIHN1YmdyYXBoIixGLm5vZGVzW25lXSxkLmRiLmxvb2tVcERvbUlkKEYubm9kZXNbbmVdKSxkLmRiLmxvb2tVcERvbUlkKEYuaWQpKSxSLnNldFBhcmVudChkLmRiLmxvb2tVcERvbUlkKEYubm9kZXNbbmVdKSxkLmRiLmxvb2tVcERvbUlkKEYuaWQpKX1hd2FpdCBSVmUoSyxSLHMseSxULGQpLGF3YWl0IGpWZShlZSxSLGQpO2NvbnN0IG9lPW5ldyB2UXQ7Q1F0LmFkZFRvUmVuZGVyKG9lKSxvZS5hcnJvd3MoKS5ub25lPWZ1bmN0aW9uKHNlLGRlLFgsZ2Upe2NvbnN0IHhlPXNlLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGRlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJzdHJva2VXaWR0aCIpLmF0dHIoIm1hcmtlcldpZHRoIiw4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAwIDAgTCAwIDAgeiIpO1o0KHhlLFhbZ2UrIlN0eWxlIl0pfSxvZS5hcnJvd3MoKS5ub3JtYWw9ZnVuY3Rpb24oc2UsZGUpe3NlLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGRlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJzdHJva2VXaWR0aCIpLmF0dHIoIm1hcmtlcldpZHRoIiw4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6IikuYXR0cigiY2xhc3MiLCJhcnJvd2hlYWRQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX07Y29uc3QgcGU9eS5zZWxlY3QoYFtpZD0iJHtzfSJdYCksYmU9eS5zZWxlY3QoIiMiK3MrIiBnIik7Zm9yKG9lKGJlLFIpLGJlLnNlbGVjdEFsbCgiZy5ub2RlIikuYXR0cigidGl0bGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuZGIuZ2V0VG9vbHRpcCh0aGlzLmlkKX0pLGQuZGIuaW5kZXhOb2Rlcygic3ViR3JhcGgiK2llKSxpZT0wO2llPGoubGVuZ3RoO2llKyspaWYoRj1qW2llXSxGLnRpdGxlIT09InVuZGVmaW5lZCIpe2NvbnN0IG5lPVQucXVlcnlTZWxlY3RvckFsbCgiIyIrcysnIFtpZD0iJytkLmRiLmxvb2tVcERvbUlkKEYuaWQpKyciXSByZWN0Jyksc2U9VC5xdWVyeVNlbGVjdG9yQWxsKCIjIitzKycgW2lkPSInK2QuZGIubG9va1VwRG9tSWQoRi5pZCkrJyJdJyksZGU9bmVbMF0ueC5iYXNlVmFsLnZhbHVlLFg9bmVbMF0ueS5iYXNlVmFsLnZhbHVlLGdlPW5lWzBdLndpZHRoLmJhc2VWYWwudmFsdWUseGU9SXIoc2VbMF0pLnNlbGVjdCgiLmxhYmVsIik7eGUuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7ZGUrZ2UvMn0sICR7WCsxNH0pYCkseGUuYXR0cigiaWQiLHMrIlRleHQiKTtmb3IobGV0IFU9MDtVPEYuY2xhc3Nlcy5sZW5ndGg7VSsrKXNlWzBdLmNsYXNzTGlzdC5hZGQoRi5jbGFzc2VzW1VdKX1pZighdi5odG1sTGFiZWxzKXtjb25zdCBuZT1ULnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZD0iJytzKyciXSAuZWRnZUxhYmVsIC5sYWJlbCcpO2Zvcihjb25zdCBzZSBvZiBuZSl7Y29uc3QgZGU9c2UuZ2V0QkJveCgpLFg9VC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVjdCIpO1guc2V0QXR0cmlidXRlKCJyeCIsMCksWC5zZXRBdHRyaWJ1dGUoInJ5IiwwKSxYLnNldEF0dHJpYnV0ZSgid2lkdGgiLGRlLndpZHRoKSxYLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixkZS5oZWlnaHQpLHNlLmluc2VydEJlZm9yZShYLHNlLmZpcnN0Q2hpbGQpfX15OShSLHBlLHYuZGlhZ3JhbVBhZGRpbmcsdi51c2VNYXhXaWR0aCksT2JqZWN0LmtleXMoSykuZm9yRWFjaChmdW5jdGlvbihuZSl7Y29uc3Qgc2U9S1tuZV07aWYoc2UubGluayl7Y29uc3QgZGU9eS5zZWxlY3QoIiMiK3MrJyBbaWQ9IicrZC5kYi5sb29rVXBEb21JZChuZSkrJyJdJyk7aWYoZGUpe2NvbnN0IFg9VC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYSIpO1guc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2xhc3MiLHNlLmNsYXNzZXMuam9pbigiICIpKSxYLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImhyZWYiLHNlLmxpbmspLFguc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVsIiwibm9vcGVuZXIiKSxwPT09InNhbmRib3giP1guc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGFyZ2V0IiwiX3RvcCIpOnNlLmxpbmtUYXJnZXQmJlguc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGFyZ2V0IixzZS5saW5rVGFyZ2V0KTtjb25zdCBnZT1kZS5pbnNlcnQoZnVuY3Rpb24oKXtyZXR1cm4gWH0sIjpmaXJzdC1jaGlsZCIpLFc9ZGUuc2VsZWN0KCIubGFiZWwtY29udGFpbmVyIik7VyYmZ2UuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIFcubm9kZSgpfSk7Y29uc3QgeGU9ZGUuc2VsZWN0KCIubGFiZWwiKTt4ZSYmZ2UuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIHhlLm5vZGUoKX0pfX19KX19O2Z1bmN0aW9uIHE3KGkpe3ZhciBzPXtvcHRpb25zOntkaXJlY3RlZDppLmlzRGlyZWN0ZWQoKSxtdWx0aWdyYXBoOmkuaXNNdWx0aWdyYXBoKCksY29tcG91bmQ6aS5pc0NvbXBvdW5kKCl9LG5vZGVzOkFRdChpKSxlZGdlczpMUXQoaSl9O3JldHVybiBRZihpLmdyYXBoKCkpfHwocy52YWx1ZT1ESGUoaS5ncmFwaCgpKSksc31mdW5jdGlvbiBBUXQoaSl7cmV0dXJuIFAwKGkubm9kZXMoKSxmdW5jdGlvbihzKXt2YXIgdT1pLm5vZGUocyksZD1pLnBhcmVudChzKSxwPXt2OnN9O3JldHVybiBRZih1KXx8KHAudmFsdWU9dSksUWYoZCl8fChwLnBhcmVudD1kKSxwfSl9ZnVuY3Rpb24gTFF0KGkpe3JldHVybiBQMChpLmVkZ2VzKCksZnVuY3Rpb24ocyl7dmFyIHU9aS5lZGdlKHMpLGQ9e3Y6cy52LHc6cy53fTtyZXR1cm4gUWYocy5uYW1lKXx8KGQubmFtZT1zLm5hbWUpLFFmKHUpfHwoZC52YWx1ZT11KSxkfSl9Y29uc3QgTVF0PShpLHMsdSxkKT0+e3MuZm9yRWFjaChwPT57RFF0W3BdKGksdSxkKX0pfSxEUXQ9e2V4dGVuc2lvbjooaSxzLHUpPT57WGUudHJhY2UoIk1ha2luZyBtYXJrZXJzIGZvciAiLHUpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLWV4dGVuc2lvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZXh0ZW5zaW9uICIrcykuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSw3IEwxOCwxMyBWIDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLWV4dGVuc2lvbkVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGV4dGVuc2lvbiAiK3MpLmF0dHIoInJlZlgiLDEpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsMSBWIDEzIEwxOCw3IFoiKX0sY29tcG9zaXRpb246KGkscyx1KT0+e2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLWNvbXBvc2l0aW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjb21wb3NpdGlvbiAiK3MpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHUrIl8iK3MrIi1jb21wb3NpdGlvbkVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNvbXBvc2l0aW9uICIrcykuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpfSxhZ2dyZWdhdGlvbjooaSxzLHUpPT57aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix1KyJfIitzKyItYWdncmVnYXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGFnZ3JlZ2F0aW9uICIrcykuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLWFnZ3JlZ2F0aW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgYWdncmVnYXRpb24gIitzKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIil9LGRlcGVuZGVuY3k6KGkscyx1KT0+e2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLWRlcGVuZGVuY3lTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGRlcGVuZGVuY3kgIitzKS5hdHRyKCJyZWZYIiw2KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDUsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLWRlcGVuZGVuY3lFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBkZXBlbmRlbmN5ICIrcykuYXR0cigicmVmWCIsMTMpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LGxvbGxpcG9wOihpLHMsdSk9PntpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHUrIl8iK3MrIi1sb2xsaXBvcFN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgbG9sbGlwb3AgIitzKS5hdHRyKCJyZWZYIiwxMykuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigiZmlsbCIsInRyYW5zcGFyZW50IikuYXR0cigiY3giLDcpLmF0dHIoImN5Iiw3KS5hdHRyKCJyIiw2KSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHUrIl8iK3MrIi1sb2xsaXBvcEVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGxvbGxpcG9wICIrcykuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigiZmlsbCIsInRyYW5zcGFyZW50IikuYXR0cigiY3giLDcpLmF0dHIoImN5Iiw3KS5hdHRyKCJyIiw2KX0scG9pbnQ6KGkscyx1KT0+e2kuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLXBvaW50RW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitzKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsNikuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksaS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix1KyJfIitzKyItcG9pbnRTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrcykuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDQuNSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgNSBMIDEwIDEwIEwgMTAgMCB6IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpfSxjaXJjbGU6KGkscyx1KT0+e2kuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLWNpcmNsZUVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrcykuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDExKS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsIjUiKS5hdHRyKCJjeSIsIjUiKS5hdHRyKCJyIiwiNSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKSxpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHUrIl8iK3MrIi1jaXJjbGVTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrcykuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLC0xKS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsIjUiKS5hdHRyKCJjeSIsIjUiKS5hdHRyKCJyIiwiNSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX0sY3Jvc3M6KGkscyx1KT0+e2kuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLWNyb3NzRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY3Jvc3MgIitzKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDExIDExIikuYXR0cigicmVmWCIsMTIpLmF0dHIoInJlZlkiLDUuMikuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsMSBsIDksOSBNIDEwLDEgbCAtOSw5IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwyKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpLGkuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLWNyb3NzU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjcm9zcyAiK3MpLmF0dHIoInZpZXdCb3giLCIwIDAgMTEgMTEiKS5hdHRyKCJyZWZYIiwtMSkuYXR0cigicmVmWSIsNS4yKS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIGwgOSw5IE0gMTAsMSBsIC05LDkiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LGJhcmI6KGkscyx1KT0+e2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdSsiXyIrcysiLWJhcmJFbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE0KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE5LDcgTDksMTMgTDE0LDcgTDksMSBaIil9fSxTbWU9TVF0O2Z1bmN0aW9uIElRdChpLHMpe3MmJmkuYXR0cigic3R5bGUiLHMpfWZ1bmN0aW9uIE9RdChpKXtjb25zdCBzPUlyKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJmb3JlaWduT2JqZWN0IikpLHU9cy5hcHBlbmQoInhodG1sOmRpdiIpLGQ9aS5sYWJlbCxwPWkuaXNOb2RlPyJub2RlTGFiZWwiOiJlZGdlTGFiZWwiO3JldHVybiB1Lmh0bWwoJzxzcGFuIGNsYXNzPSInK3ArJyIgJysoaS5sYWJlbFN0eWxlPydzdHlsZT0iJytpLmxhYmVsU3R5bGUrJyInOiIiKSsiPiIrZCsiPC9zcGFuPiIpLElRdCh1LGkubGFiZWxTdHlsZSksdS5zdHlsZSgiZGlzcGxheSIsImlubGluZS1ibG9jayIpLHUuc3R5bGUoIndoaXRlLXNwYWNlIiwibm93cmFwIiksdS5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKSxzLm5vZGUoKX1jb25zdCAkMj0oaSxzLHUsZCk9PntsZXQgcD1pfHwiIjtpZih0eXBlb2YgcD09Im9iamVjdCImJihwPXBbMF0pLGYxKHF0KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtwPXAucmVwbGFjZSgvXFxufFxuL2csIjxiciAvPiIpLFhlLmRlYnVnKCJ2ZXJ0ZXhUZXh0IitwKTtjb25zdCB2PXtpc05vZGU6ZCxsYWJlbDpaRihwKS5yZXBsYWNlKC9mYVtibHJzXT86ZmEtW1x3LV0rL2cseT0+YDxpIGNsYXNzPScke3kucmVwbGFjZSgiOiIsIiAiKX0nPjwvaT5gKSxsYWJlbFN0eWxlOnMucmVwbGFjZSgiZmlsbDoiLCJjb2xvcjoiKX07cmV0dXJuIE9RdCh2KX1lbHNle2NvbnN0IHY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTt2LnNldEF0dHJpYnV0ZSgic3R5bGUiLHMucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSk7bGV0IGI9W107dHlwZW9mIHA9PSJzdHJpbmciP2I9cC5zcGxpdCgvXFxufFxufDxiclxzKlwvPz4vZ2kpOkFycmF5LmlzQXJyYXkocCk/Yj1wOmI9W107Zm9yKGNvbnN0IHkgb2YgYil7Y29uc3QgVD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTtULnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLFQuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLFQuc2V0QXR0cmlidXRlKCJ4IiwiMCIpLHU/VC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwidGl0bGUtcm93Iik6VC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwicm93IiksVC50ZXh0Q29udGVudD15LnRyaW0oKSx2LmFwcGVuZENoaWxkKFQpfXJldHVybiB2fX0sTlF0PXt9O2Z1bmN0aW9uIFBRdChpLHMpe2NvbnN0IHU9c3x8TlF0LGQ9dHlwZW9mIHUuaW5jbHVkZUltYWdlQWx0PT0iYm9vbGVhbiI/dS5pbmNsdWRlSW1hZ2VBbHQ6ITAscD10eXBlb2YgdS5pbmNsdWRlSHRtbD09ImJvb2xlYW4iP3UuaW5jbHVkZUh0bWw6ITA7cmV0dXJuICRWZShpLGQscCl9ZnVuY3Rpb24gJFZlKGkscyx1KXtpZihCUXQoaSkpe2lmKCJ2YWx1ZSJpbiBpKXJldHVybiBpLnR5cGU9PT0iaHRtbCImJiF1PyIiOmkudmFsdWU7aWYocyYmImFsdCJpbiBpJiZpLmFsdClyZXR1cm4gaS5hbHQ7aWYoImNoaWxkcmVuImluIGkpcmV0dXJuIHpWZShpLmNoaWxkcmVuLHMsdSl9cmV0dXJuIEFycmF5LmlzQXJyYXkoaSk/elZlKGkscyx1KToiIn1mdW5jdGlvbiB6VmUoaSxzLHUpe2NvbnN0IGQ9W107bGV0IHA9LTE7Zm9yKDsrK3A8aS5sZW5ndGg7KWRbcF09JFZlKGlbcF0scyx1KTtyZXR1cm4gZC5qb2luKCIiKX1mdW5jdGlvbiBCUXQoaSl7cmV0dXJuISEoaSYmdHlwZW9mIGk9PSJvYmplY3QiKX1mdW5jdGlvbiB0NShpLHMsdSxkKXtjb25zdCBwPWkubGVuZ3RoO2xldCB2PTAsYjtpZihzPDA/cz0tcz5wPzA6cCtzOnM9cz5wP3A6cyx1PXU+MD91OjAsZC5sZW5ndGg8MWU0KWI9QXJyYXkuZnJvbShkKSxiLnVuc2hpZnQocyx1KSxpLnNwbGljZSguLi5iKTtlbHNlIGZvcih1JiZpLnNwbGljZShzLHUpO3Y8ZC5sZW5ndGg7KWI9ZC5zbGljZSh2LHYrMWU0KSxiLnVuc2hpZnQocywwKSxpLnNwbGljZSguLi5iKSx2Kz0xZTQscys9MWU0fWZ1bmN0aW9uIHp2KGkscyl7cmV0dXJuIGkubGVuZ3RoPjA/KHQ1KGksaS5sZW5ndGgsMCxzKSxpKTpzfWNvbnN0IHFWZT17fS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBGUXQoaSl7Y29uc3Qgcz17fTtsZXQgdT0tMTtmb3IoOysrdTxpLmxlbmd0aDspUlF0KHMsaVt1XSk7cmV0dXJuIHN9ZnVuY3Rpb24gUlF0KGkscyl7bGV0IHU7Zm9yKHUgaW4gcyl7Y29uc3QgcD0ocVZlLmNhbGwoaSx1KT9pW3VdOnZvaWQgMCl8fChpW3VdPXt9KSx2PXNbdV07bGV0IGI7aWYodilmb3IoYiBpbiB2KXtxVmUuY2FsbChwLGIpfHwocFtiXT1bXSk7Y29uc3QgeT12W2JdO2pRdChwW2JdLEFycmF5LmlzQXJyYXkoeSk/eTp5P1t5XTpbXSl9fX1mdW5jdGlvbiBqUXQoaSxzKXtsZXQgdT0tMTtjb25zdCBkPVtdO2Zvcig7Kyt1PHMubGVuZ3RoOykoc1t1XS5hZGQ9PT0iYWZ0ZXIiP2k6ZCkucHVzaChzW3VdKTt0NShpLDAsMCxkKX1jb25zdCAkUXQ9L1shLVwvOi1AXFstYFx7LX5ceEExXHhBN1x4QUJceEI2XHhCN1x4QkJceEJGXHUwMzdFXHUwMzg3XHUwNTVBLVx1MDU1Rlx1MDU4OVx1MDU4QVx1MDVCRVx1MDVDMFx1MDVDM1x1MDVDNlx1MDVGM1x1MDVGNFx1MDYwOVx1MDYwQVx1MDYwQ1x1MDYwRFx1MDYxQlx1MDYxRC1cdTA2MUZcdTA2NkEtXHUwNjZEXHUwNkQ0XHUwNzAwLVx1MDcwRFx1MDdGNy1cdTA3RjlcdTA4MzAtXHUwODNFXHUwODVFXHUwOTY0XHUwOTY1XHUwOTcwXHUwOUZEXHUwQTc2XHUwQUYwXHUwQzc3XHUwQzg0XHUwREY0XHUwRTRGXHUwRTVBXHUwRTVCXHUwRjA0LVx1MEYxMlx1MEYxNFx1MEYzQS1cdTBGM0RcdTBGODVcdTBGRDAtXHUwRkQ0XHUwRkQ5XHUwRkRBXHUxMDRBLVx1MTA0Rlx1MTBGQlx1MTM2MC1cdTEzNjhcdTE0MDBcdTE2NkVcdTE2OUJcdTE2OUNcdTE2RUItXHUxNkVEXHUxNzM1XHUxNzM2XHUxN0Q0LVx1MTdENlx1MTdEOC1cdTE3REFcdTE4MDAtXHUxODBBXHUxOTQ0XHUxOTQ1XHUxQTFFXHUxQTFGXHUxQUEwLVx1MUFBNlx1MUFBOC1cdTFBQURcdTFCNUEtXHUxQjYwXHUxQjdEXHUxQjdFXHUxQkZDLVx1MUJGRlx1MUMzQi1cdTFDM0ZcdTFDN0VcdTFDN0ZcdTFDQzAtXHUxQ0M3XHUxQ0QzXHUyMDEwLVx1MjAyN1x1MjAzMC1cdTIwNDNcdTIwNDUtXHUyMDUxXHUyMDUzLVx1MjA1RVx1MjA3RFx1MjA3RVx1MjA4RFx1MjA4RVx1MjMwOC1cdTIzMEJcdTIzMjlcdTIzMkFcdTI3NjgtXHUyNzc1XHUyN0M1XHUyN0M2XHUyN0U2LVx1MjdFRlx1Mjk4My1cdTI5OThcdTI5RDgtXHUyOURCXHUyOUZDXHUyOUZEXHUyQ0Y5LVx1MkNGQ1x1MkNGRVx1MkNGRlx1MkQ3MFx1MkUwMC1cdTJFMkVcdTJFMzAtXHUyRTRGXHUyRTUyLVx1MkU1RFx1MzAwMS1cdTMwMDNcdTMwMDgtXHUzMDExXHUzMDE0LVx1MzAxRlx1MzAzMFx1MzAzRFx1MzBBMFx1MzBGQlx1QTRGRVx1QTRGRlx1QTYwRC1cdUE2MEZcdUE2NzNcdUE2N0VcdUE2RjItXHVBNkY3XHVBODc0LVx1QTg3N1x1QThDRVx1QThDRlx1QThGOC1cdUE4RkFcdUE4RkNcdUE5MkVcdUE5MkZcdUE5NUZcdUE5QzEtXHVBOUNEXHVBOURFXHVBOURGXHVBQTVDLVx1QUE1Rlx1QUFERVx1QUFERlx1QUFGMFx1QUFGMVx1QUJFQlx1RkQzRVx1RkQzRlx1RkUxMC1cdUZFMTlcdUZFMzAtXHVGRTUyXHVGRTU0LVx1RkU2MVx1RkU2M1x1RkU2OFx1RkU2QVx1RkU2Qlx1RkYwMS1cdUZGMDNcdUZGMDUtXHVGRjBBXHVGRjBDLVx1RkYwRlx1RkYxQVx1RkYxQlx1RkYxRlx1RkYyMFx1RkYzQi1cdUZGM0RcdUZGM0ZcdUZGNUJcdUZGNURcdUZGNUYtXHVGRjY1XS8sbjU9TzkoL1tBLVphLXpdLyksSDM9TzkoL1tcZEEtWmEtel0vKSx6UXQ9TzkoL1sjLScqK1wtLTk9P0EtWl4tfl0vKTtmdW5jdGlvbiBfbWUoaSl7cmV0dXJuIGkhPT1udWxsJiYoaTwzMnx8aT09PTEyNyl9Y29uc3QgQW1lPU85KC9cZC8pLHFRdD1POSgvW1xkQS1GYS1mXS8pLEhRdD1POSgvWyEtLzotQFstYHstfl0vKTtmdW5jdGlvbiBzbyhpKXtyZXR1cm4gaSE9PW51bGwmJmk8LTJ9ZnVuY3Rpb24gejIoaSl7cmV0dXJuIGkhPT1udWxsJiYoaTwwfHxpPT09MzIpfWZ1bmN0aW9uIEl1KGkpe3JldHVybiBpPT09LTJ8fGk9PT0tMXx8aT09PTMyfWNvbnN0IFZRdD1POSgkUXQpLFVRdD1POSgvXHMvKTtmdW5jdGlvbiBPOShpKXtyZXR1cm4gcztmdW5jdGlvbiBzKHUpe3JldHVybiB1IT09bnVsbCYmaS50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUodSkpfX1mdW5jdGlvbiBLbChpLHMsdSxkKXtjb25zdCBwPWQ/ZC0xOk51bWJlci5QT1NJVElWRV9JTkZJTklUWTtsZXQgdj0wO3JldHVybiBiO2Z1bmN0aW9uIGIoVCl7cmV0dXJuIEl1KFQpPyhpLmVudGVyKHUpLHkoVCkpOnMoVCl9ZnVuY3Rpb24geShUKXtyZXR1cm4gSXUoVCkmJnYrKzxwPyhpLmNvbnN1bWUoVCkseSk6KGkuZXhpdCh1KSxzKFQpKX19Y29uc3QgR1F0PXt0b2tlbml6ZTpLUXR9O2Z1bmN0aW9uIEtRdChpKXtjb25zdCBzPWkuYXR0ZW1wdCh0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmNvbnRlbnRJbml0aWFsLGQscCk7bGV0IHU7cmV0dXJuIHM7ZnVuY3Rpb24gZCh5KXtpZih5PT09bnVsbCl7aS5jb25zdW1lKHkpO3JldHVybn1yZXR1cm4gaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZSh5KSxpLmV4aXQoImxpbmVFbmRpbmciKSxLbChpLHMsImxpbmVQcmVmaXgiKX1mdW5jdGlvbiBwKHkpe3JldHVybiBpLmVudGVyKCJwYXJhZ3JhcGgiKSx2KHkpfWZ1bmN0aW9uIHYoeSl7Y29uc3QgVD1pLmVudGVyKCJjaHVua1RleHQiLHtjb250ZW50VHlwZToidGV4dCIscHJldmlvdXM6dX0pO3JldHVybiB1JiYodS5uZXh0PVQpLHU9VCxiKHkpfWZ1bmN0aW9uIGIoeSl7aWYoeT09PW51bGwpe2kuZXhpdCgiY2h1bmtUZXh0IiksaS5leGl0KCJwYXJhZ3JhcGgiKSxpLmNvbnN1bWUoeSk7cmV0dXJufXJldHVybiBzbyh5KT8oaS5jb25zdW1lKHkpLGkuZXhpdCgiY2h1bmtUZXh0Iiksdik6KGkuY29uc3VtZSh5KSxiKX19Y29uc3QgV1F0PXt0b2tlbml6ZTpZUXR9LEhWZT17dG9rZW5pemU6WFF0fTtmdW5jdGlvbiBZUXQoaSl7Y29uc3Qgcz10aGlzLHU9W107bGV0IGQ9MCxwLHYsYjtyZXR1cm4geTtmdW5jdGlvbiB5KHBlKXtpZihkPHUubGVuZ3RoKXtjb25zdCBiZT11W2RdO3JldHVybiBzLmNvbnRhaW5lclN0YXRlPWJlWzFdLGkuYXR0ZW1wdChiZVswXS5jb250aW51YXRpb24sVCxfKShwZSl9cmV0dXJuIF8ocGUpfWZ1bmN0aW9uIFQocGUpe2lmKGQrKyxzLmNvbnRhaW5lclN0YXRlLl9jbG9zZUZsb3cpe3MuY29udGFpbmVyU3RhdGUuX2Nsb3NlRmxvdz12b2lkIDAscCYmb2UoKTtjb25zdCBiZT1zLmV2ZW50cy5sZW5ndGg7bGV0IGFlPWJlLG5lO2Zvcig7YWUtLTspaWYocy5ldmVudHNbYWVdWzBdPT09ImV4aXQiJiZzLmV2ZW50c1thZV1bMV0udHlwZT09PSJjaHVua0Zsb3ciKXtuZT1zLmV2ZW50c1thZV1bMV0uZW5kO2JyZWFrfWllKGQpO2xldCBzZT1iZTtmb3IoO3NlPHMuZXZlbnRzLmxlbmd0aDspcy5ldmVudHNbc2VdWzFdLmVuZD1PYmplY3QuYXNzaWduKHt9LG5lKSxzZSsrO3JldHVybiB0NShzLmV2ZW50cyxhZSsxLDAscy5ldmVudHMuc2xpY2UoYmUpKSxzLmV2ZW50cy5sZW5ndGg9c2UsXyhwZSl9cmV0dXJuIHkocGUpfWZ1bmN0aW9uIF8ocGUpe2lmKGQ9PT11Lmxlbmd0aCl7aWYoIXApcmV0dXJuIFIocGUpO2lmKHAuY3VycmVudENvbnN0cnVjdCYmcC5jdXJyZW50Q29uc3RydWN0LmNvbmNyZXRlKXJldHVybiBqKHBlKTtzLmludGVycnVwdD0hIShwLmN1cnJlbnRDb25zdHJ1Y3QmJiFwLl9nZm1UYWJsZUR5bmFtaWNJbnRlcnJ1cHRIYWNrKX1yZXR1cm4gcy5jb250YWluZXJTdGF0ZT17fSxpLmNoZWNrKEhWZSxBLFApKHBlKX1mdW5jdGlvbiBBKHBlKXtyZXR1cm4gcCYmb2UoKSxpZShkKSxSKHBlKX1mdW5jdGlvbiBQKHBlKXtyZXR1cm4gcy5wYXJzZXIubGF6eVtzLm5vdygpLmxpbmVdPWQhPT11Lmxlbmd0aCxiPXMubm93KCkub2Zmc2V0LGoocGUpfWZ1bmN0aW9uIFIocGUpe3JldHVybiBzLmNvbnRhaW5lclN0YXRlPXt9LGkuYXR0ZW1wdChIVmUsRixqKShwZSl9ZnVuY3Rpb24gRihwZSl7cmV0dXJuIGQrKyx1LnB1c2goW3MuY3VycmVudENvbnN0cnVjdCxzLmNvbnRhaW5lclN0YXRlXSksUihwZSl9ZnVuY3Rpb24gaihwZSl7aWYocGU9PT1udWxsKXtwJiZvZSgpLGllKDApLGkuY29uc3VtZShwZSk7cmV0dXJufXJldHVybiBwPXB8fHMucGFyc2VyLmZsb3cocy5ub3coKSksaS5lbnRlcigiY2h1bmtGbG93Iix7Y29udGVudFR5cGU6ImZsb3ciLHByZXZpb3VzOnYsX3Rva2VuaXplcjpwfSksSyhwZSl9ZnVuY3Rpb24gSyhwZSl7aWYocGU9PT1udWxsKXtlZShpLmV4aXQoImNodW5rRmxvdyIpLCEwKSxpZSgwKSxpLmNvbnN1bWUocGUpO3JldHVybn1yZXR1cm4gc28ocGUpPyhpLmNvbnN1bWUocGUpLGVlKGkuZXhpdCgiY2h1bmtGbG93IikpLGQ9MCxzLmludGVycnVwdD12b2lkIDAseSk6KGkuY29uc3VtZShwZSksSyl9ZnVuY3Rpb24gZWUocGUsYmUpe2NvbnN0IGFlPXMuc2xpY2VTdHJlYW0ocGUpO2lmKGJlJiZhZS5wdXNoKG51bGwpLHBlLnByZXZpb3VzPXYsdiYmKHYubmV4dD1wZSksdj1wZSxwLmRlZmluZVNraXAocGUuc3RhcnQpLHAud3JpdGUoYWUpLHMucGFyc2VyLmxhenlbcGUuc3RhcnQubGluZV0pe2xldCBuZT1wLmV2ZW50cy5sZW5ndGg7Zm9yKDtuZS0tOylpZihwLmV2ZW50c1tuZV1bMV0uc3RhcnQub2Zmc2V0PGImJighcC5ldmVudHNbbmVdWzFdLmVuZHx8cC5ldmVudHNbbmVdWzFdLmVuZC5vZmZzZXQ+YikpcmV0dXJuO2NvbnN0IHNlPXMuZXZlbnRzLmxlbmd0aDtsZXQgZGU9c2UsWCxnZTtmb3IoO2RlLS07KWlmKHMuZXZlbnRzW2RlXVswXT09PSJleGl0IiYmcy5ldmVudHNbZGVdWzFdLnR5cGU9PT0iY2h1bmtGbG93Iil7aWYoWCl7Z2U9cy5ldmVudHNbZGVdWzFdLmVuZDticmVha31YPSEwfWZvcihpZShkKSxuZT1zZTtuZTxzLmV2ZW50cy5sZW5ndGg7KXMuZXZlbnRzW25lXVsxXS5lbmQ9T2JqZWN0LmFzc2lnbih7fSxnZSksbmUrKzt0NShzLmV2ZW50cyxkZSsxLDAscy5ldmVudHMuc2xpY2Uoc2UpKSxzLmV2ZW50cy5sZW5ndGg9bmV9fWZ1bmN0aW9uIGllKHBlKXtsZXQgYmU9dS5sZW5ndGg7Zm9yKDtiZS0tID5wZTspe2NvbnN0IGFlPXVbYmVdO3MuY29udGFpbmVyU3RhdGU9YWVbMV0sYWVbMF0uZXhpdC5jYWxsKHMsaSl9dS5sZW5ndGg9cGV9ZnVuY3Rpb24gb2UoKXtwLndyaXRlKFtudWxsXSksdj12b2lkIDAscD12b2lkIDAscy5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93PXZvaWQgMH19ZnVuY3Rpb24gWFF0KGkscyx1KXtyZXR1cm4gS2woaSxpLmF0dGVtcHQodGhpcy5wYXJzZXIuY29uc3RydWN0cy5kb2N1bWVudCxzLHUpLCJsaW5lUHJlZml4Iix0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIik/dm9pZCAwOjQpfWZ1bmN0aW9uIFZWZShpKXtpZihpPT09bnVsbHx8ejIoaSl8fFVRdChpKSlyZXR1cm4gMTtpZihWUXQoaSkpcmV0dXJuIDJ9ZnVuY3Rpb24gTG1lKGkscyx1KXtjb25zdCBkPVtdO2xldCBwPS0xO2Zvcig7KytwPGkubGVuZ3RoOyl7Y29uc3Qgdj1pW3BdLnJlc29sdmVBbGw7diYmIWQuaW5jbHVkZXModikmJihzPXYocyx1KSxkLnB1c2godikpfXJldHVybiBzfWNvbnN0IE1tZT17bmFtZToiYXR0ZW50aW9uIix0b2tlbml6ZTpKUXQscmVzb2x2ZUFsbDpRUXR9O2Z1bmN0aW9uIFFRdChpLHMpe2xldCB1PS0xLGQscCx2LGIseSxULF8sQTtmb3IoOysrdTxpLmxlbmd0aDspaWYoaVt1XVswXT09PSJlbnRlciImJmlbdV1bMV0udHlwZT09PSJhdHRlbnRpb25TZXF1ZW5jZSImJmlbdV1bMV0uX2Nsb3NlKXtmb3IoZD11O2QtLTspaWYoaVtkXVswXT09PSJleGl0IiYmaVtkXVsxXS50eXBlPT09ImF0dGVudGlvblNlcXVlbmNlIiYmaVtkXVsxXS5fb3BlbiYmcy5zbGljZVNlcmlhbGl6ZShpW2RdWzFdKS5jaGFyQ29kZUF0KDApPT09cy5zbGljZVNlcmlhbGl6ZShpW3VdWzFdKS5jaGFyQ29kZUF0KDApKXtpZigoaVtkXVsxXS5fY2xvc2V8fGlbdV1bMV0uX29wZW4pJiYoaVt1XVsxXS5lbmQub2Zmc2V0LWlbdV1bMV0uc3RhcnQub2Zmc2V0KSUzJiYhKChpW2RdWzFdLmVuZC5vZmZzZXQtaVtkXVsxXS5zdGFydC5vZmZzZXQraVt1XVsxXS5lbmQub2Zmc2V0LWlbdV1bMV0uc3RhcnQub2Zmc2V0KSUzKSljb250aW51ZTtUPWlbZF1bMV0uZW5kLm9mZnNldC1pW2RdWzFdLnN0YXJ0Lm9mZnNldD4xJiZpW3VdWzFdLmVuZC5vZmZzZXQtaVt1XVsxXS5zdGFydC5vZmZzZXQ+MT8yOjE7Y29uc3QgUD1PYmplY3QuYXNzaWduKHt9LGlbZF1bMV0uZW5kKSxSPU9iamVjdC5hc3NpZ24oe30saVt1XVsxXS5zdGFydCk7VVZlKFAsLVQpLFVWZShSLFQpLGI9e3R5cGU6VD4xPyJzdHJvbmdTZXF1ZW5jZSI6ImVtcGhhc2lzU2VxdWVuY2UiLHN0YXJ0OlAsZW5kOk9iamVjdC5hc3NpZ24oe30saVtkXVsxXS5lbmQpfSx5PXt0eXBlOlQ+MT8ic3Ryb25nU2VxdWVuY2UiOiJlbXBoYXNpc1NlcXVlbmNlIixzdGFydDpPYmplY3QuYXNzaWduKHt9LGlbdV1bMV0uc3RhcnQpLGVuZDpSfSx2PXt0eXBlOlQ+MT8ic3Ryb25nVGV4dCI6ImVtcGhhc2lzVGV4dCIsc3RhcnQ6T2JqZWN0LmFzc2lnbih7fSxpW2RdWzFdLmVuZCksZW5kOk9iamVjdC5hc3NpZ24oe30saVt1XVsxXS5zdGFydCl9LHA9e3R5cGU6VD4xPyJzdHJvbmciOiJlbXBoYXNpcyIsc3RhcnQ6T2JqZWN0LmFzc2lnbih7fSxiLnN0YXJ0KSxlbmQ6T2JqZWN0LmFzc2lnbih7fSx5LmVuZCl9LGlbZF1bMV0uZW5kPU9iamVjdC5hc3NpZ24oe30sYi5zdGFydCksaVt1XVsxXS5zdGFydD1PYmplY3QuYXNzaWduKHt9LHkuZW5kKSxfPVtdLGlbZF1bMV0uZW5kLm9mZnNldC1pW2RdWzFdLnN0YXJ0Lm9mZnNldCYmKF89enYoXyxbWyJlbnRlciIsaVtkXVsxXSxzXSxbImV4aXQiLGlbZF1bMV0sc11dKSksXz16dihfLFtbImVudGVyIixwLHNdLFsiZW50ZXIiLGIsc10sWyJleGl0IixiLHNdLFsiZW50ZXIiLHYsc11dKSxfPXp2KF8sTG1lKHMucGFyc2VyLmNvbnN0cnVjdHMuaW5zaWRlU3Bhbi5udWxsLGkuc2xpY2UoZCsxLHUpLHMpKSxfPXp2KF8sW1siZXhpdCIsdixzXSxbImVudGVyIix5LHNdLFsiZXhpdCIseSxzXSxbImV4aXQiLHAsc11dKSxpW3VdWzFdLmVuZC5vZmZzZXQtaVt1XVsxXS5zdGFydC5vZmZzZXQ/KEE9MixfPXp2KF8sW1siZW50ZXIiLGlbdV1bMV0sc10sWyJleGl0IixpW3VdWzFdLHNdXSkpOkE9MCx0NShpLGQtMSx1LWQrMyxfKSx1PWQrXy5sZW5ndGgtQS0yO2JyZWFrfX1mb3IodT0tMTsrK3U8aS5sZW5ndGg7KWlbdV1bMV0udHlwZT09PSJhdHRlbnRpb25TZXF1ZW5jZSImJihpW3VdWzFdLnR5cGU9ImRhdGEiKTtyZXR1cm4gaX1mdW5jdGlvbiBKUXQoaSxzKXtjb25zdCB1PXRoaXMucGFyc2VyLmNvbnN0cnVjdHMuYXR0ZW50aW9uTWFya2Vycy5udWxsLGQ9dGhpcy5wcmV2aW91cyxwPVZWZShkKTtsZXQgdjtyZXR1cm4gYjtmdW5jdGlvbiBiKFQpe3JldHVybiB2PVQsaS5lbnRlcigiYXR0ZW50aW9uU2VxdWVuY2UiKSx5KFQpfWZ1bmN0aW9uIHkoVCl7aWYoVD09PXYpcmV0dXJuIGkuY29uc3VtZShUKSx5O2NvbnN0IF89aS5leGl0KCJhdHRlbnRpb25TZXF1ZW5jZSIpLEE9VlZlKFQpLFA9IUF8fEE9PT0yJiZwfHx1LmluY2x1ZGVzKFQpLFI9IXB8fHA9PT0yJiZBfHx1LmluY2x1ZGVzKGQpO3JldHVybiBfLl9vcGVuPSEhKHY9PT00Mj9QOlAmJihwfHwhUikpLF8uX2Nsb3NlPSEhKHY9PT00Mj9SOlImJihBfHwhUCkpLHMoVCl9fWZ1bmN0aW9uIFVWZShpLHMpe2kuY29sdW1uKz1zLGkub2Zmc2V0Kz1zLGkuX2J1ZmZlckluZGV4Kz1zfWNvbnN0IFpRdD17bmFtZToiYXV0b2xpbmsiLHRva2VuaXplOmVKdH07ZnVuY3Rpb24gZUp0KGkscyx1KXtsZXQgZD0wO3JldHVybiBwO2Z1bmN0aW9uIHAoRil7cmV0dXJuIGkuZW50ZXIoImF1dG9saW5rIiksaS5lbnRlcigiYXV0b2xpbmtNYXJrZXIiKSxpLmNvbnN1bWUoRiksaS5leGl0KCJhdXRvbGlua01hcmtlciIpLGkuZW50ZXIoImF1dG9saW5rUHJvdG9jb2wiKSx2fWZ1bmN0aW9uIHYoRil7cmV0dXJuIG41KEYpPyhpLmNvbnN1bWUoRiksYik6XyhGKX1mdW5jdGlvbiBiKEYpe3JldHVybiBGPT09NDN8fEY9PT00NXx8Rj09PTQ2fHxIMyhGKT8oZD0xLHkoRikpOl8oRil9ZnVuY3Rpb24geShGKXtyZXR1cm4gRj09PTU4PyhpLmNvbnN1bWUoRiksZD0wLFQpOihGPT09NDN8fEY9PT00NXx8Rj09PTQ2fHxIMyhGKSkmJmQrKzwzMj8oaS5jb25zdW1lKEYpLHkpOihkPTAsXyhGKSl9ZnVuY3Rpb24gVChGKXtyZXR1cm4gRj09PTYyPyhpLmV4aXQoImF1dG9saW5rUHJvdG9jb2wiKSxpLmVudGVyKCJhdXRvbGlua01hcmtlciIpLGkuY29uc3VtZShGKSxpLmV4aXQoImF1dG9saW5rTWFya2VyIiksaS5leGl0KCJhdXRvbGluayIpLHMpOkY9PT1udWxsfHxGPT09MzJ8fEY9PT02MHx8X21lKEYpP3UoRik6KGkuY29uc3VtZShGKSxUKX1mdW5jdGlvbiBfKEYpe3JldHVybiBGPT09NjQ/KGkuY29uc3VtZShGKSxBKTp6UXQoRik/KGkuY29uc3VtZShGKSxfKTp1KEYpfWZ1bmN0aW9uIEEoRil7cmV0dXJuIEgzKEYpP1AoRik6dShGKX1mdW5jdGlvbiBQKEYpe3JldHVybiBGPT09NDY/KGkuY29uc3VtZShGKSxkPTAsQSk6Rj09PTYyPyhpLmV4aXQoImF1dG9saW5rUHJvdG9jb2wiKS50eXBlPSJhdXRvbGlua0VtYWlsIixpLmVudGVyKCJhdXRvbGlua01hcmtlciIpLGkuY29uc3VtZShGKSxpLmV4aXQoImF1dG9saW5rTWFya2VyIiksaS5leGl0KCJhdXRvbGluayIpLHMpOlIoRil9ZnVuY3Rpb24gUihGKXtpZigoRj09PTQ1fHxIMyhGKSkmJmQrKzw2Myl7Y29uc3Qgaj1GPT09NDU/UjpQO3JldHVybiBpLmNvbnN1bWUoRiksan1yZXR1cm4gdShGKX19Y29uc3QgWVE9e3Rva2VuaXplOnRKdCxwYXJ0aWFsOiEwfTtmdW5jdGlvbiB0SnQoaSxzLHUpe3JldHVybiBkO2Z1bmN0aW9uIGQodil7cmV0dXJuIEl1KHYpP0tsKGkscCwibGluZVByZWZpeCIpKHYpOnAodil9ZnVuY3Rpb24gcCh2KXtyZXR1cm4gdj09PW51bGx8fHNvKHYpP3Modik6dSh2KX19Y29uc3QgR1ZlPXtuYW1lOiJibG9ja1F1b3RlIix0b2tlbml6ZTpuSnQsY29udGludWF0aW9uOnt0b2tlbml6ZTpySnR9LGV4aXQ6aUp0fTtmdW5jdGlvbiBuSnQoaSxzLHUpe2NvbnN0IGQ9dGhpcztyZXR1cm4gcDtmdW5jdGlvbiBwKGIpe2lmKGI9PT02Mil7Y29uc3QgeT1kLmNvbnRhaW5lclN0YXRlO3JldHVybiB5Lm9wZW58fChpLmVudGVyKCJibG9ja1F1b3RlIix7X2NvbnRhaW5lcjohMH0pLHkub3Blbj0hMCksaS5lbnRlcigiYmxvY2tRdW90ZVByZWZpeCIpLGkuZW50ZXIoImJsb2NrUXVvdGVNYXJrZXIiKSxpLmNvbnN1bWUoYiksaS5leGl0KCJibG9ja1F1b3RlTWFya2VyIiksdn1yZXR1cm4gdShiKX1mdW5jdGlvbiB2KGIpe3JldHVybiBJdShiKT8oaS5lbnRlcigiYmxvY2tRdW90ZVByZWZpeFdoaXRlc3BhY2UiKSxpLmNvbnN1bWUoYiksaS5leGl0KCJibG9ja1F1b3RlUHJlZml4V2hpdGVzcGFjZSIpLGkuZXhpdCgiYmxvY2tRdW90ZVByZWZpeCIpLHMpOihpLmV4aXQoImJsb2NrUXVvdGVQcmVmaXgiKSxzKGIpKX19ZnVuY3Rpb24gckp0KGkscyx1KXtjb25zdCBkPXRoaXM7cmV0dXJuIHA7ZnVuY3Rpb24gcChiKXtyZXR1cm4gSXUoYik/S2woaSx2LCJsaW5lUHJlZml4IixkLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIik/dm9pZCAwOjQpKGIpOnYoYil9ZnVuY3Rpb24gdihiKXtyZXR1cm4gaS5hdHRlbXB0KEdWZSxzLHUpKGIpfX1mdW5jdGlvbiBpSnQoaSl7aS5leGl0KCJibG9ja1F1b3RlIil9Y29uc3QgS1ZlPXtuYW1lOiJjaGFyYWN0ZXJFc2NhcGUiLHRva2VuaXplOnNKdH07ZnVuY3Rpb24gc0p0KGkscyx1KXtyZXR1cm4gZDtmdW5jdGlvbiBkKHYpe3JldHVybiBpLmVudGVyKCJjaGFyYWN0ZXJFc2NhcGUiKSxpLmVudGVyKCJlc2NhcGVNYXJrZXIiKSxpLmNvbnN1bWUodiksaS5leGl0KCJlc2NhcGVNYXJrZXIiKSxwfWZ1bmN0aW9uIHAodil7cmV0dXJuIEhRdCh2KT8oaS5lbnRlcigiY2hhcmFjdGVyRXNjYXBlVmFsdWUiKSxpLmNvbnN1bWUodiksaS5leGl0KCJjaGFyYWN0ZXJFc2NhcGVWYWx1ZSIpLGkuZXhpdCgiY2hhcmFjdGVyRXNjYXBlIikscyk6dSh2KX19Y29uc3QgV1ZlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImkiKTtmdW5jdGlvbiBEbWUoaSl7Y29uc3Qgcz0iJiIraSsiOyI7V1ZlLmlubmVySFRNTD1zO2NvbnN0IHU9V1ZlLnRleHRDb250ZW50O3JldHVybiB1LmNoYXJDb2RlQXQodS5sZW5ndGgtMSk9PT01OSYmaSE9PSJzZW1pInx8dT09PXM/ITE6dX1jb25zdCBZVmU9e25hbWU6ImNoYXJhY3RlclJlZmVyZW5jZSIsdG9rZW5pemU6YUp0fTtmdW5jdGlvbiBhSnQoaSxzLHUpe2NvbnN0IGQ9dGhpcztsZXQgcD0wLHYsYjtyZXR1cm4geTtmdW5jdGlvbiB5KFApe3JldHVybiBpLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2UiKSxpLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXIiKSxpLmNvbnN1bWUoUCksaS5leGl0KCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXIiKSxUfWZ1bmN0aW9uIFQoUCl7cmV0dXJuIFA9PT0zNT8oaS5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyTnVtZXJpYyIpLGkuY29uc3VtZShQKSxpLmV4aXQoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWMiKSxfKTooaS5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWUiKSx2PTMxLGI9SDMsQShQKSl9ZnVuY3Rpb24gXyhQKXtyZXR1cm4gUD09PTg4fHxQPT09MTIwPyhpLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJIZXhhZGVjaW1hbCIpLGkuY29uc3VtZShQKSxpLmV4aXQoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlckhleGFkZWNpbWFsIiksaS5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWUiKSx2PTYsYj1xUXQsQSk6KGkuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZVZhbHVlIiksdj03LGI9QW1lLEEoUCkpfWZ1bmN0aW9uIEEoUCl7aWYoUD09PTU5JiZwKXtjb25zdCBSPWkuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWUiKTtyZXR1cm4gYj09PUgzJiYhRG1lKGQuc2xpY2VTZXJpYWxpemUoUikpP3UoUCk6KGkuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlciIpLGkuY29uc3VtZShQKSxpLmV4aXQoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlciIpLGkuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlIikscyl9cmV0dXJuIGIoUCkmJnArKzx2PyhpLmNvbnN1bWUoUCksQSk6dShQKX19Y29uc3QgWFZlPXt0b2tlbml6ZTpjSnQscGFydGlhbDohMH0sUVZlPXtuYW1lOiJjb2RlRmVuY2VkIix0b2tlbml6ZTpvSnQsY29uY3JldGU6ITB9O2Z1bmN0aW9uIG9KdChpLHMsdSl7Y29uc3QgZD10aGlzLHA9e3Rva2VuaXplOmFlLHBhcnRpYWw6ITB9O2xldCB2PTAsYj0wLHk7cmV0dXJuIFQ7ZnVuY3Rpb24gVChuZSl7cmV0dXJuIF8obmUpfWZ1bmN0aW9uIF8obmUpe2NvbnN0IHNlPWQuZXZlbnRzW2QuZXZlbnRzLmxlbmd0aC0xXTtyZXR1cm4gdj1zZSYmc2VbMV0udHlwZT09PSJsaW5lUHJlZml4Ij9zZVsyXS5zbGljZVNlcmlhbGl6ZShzZVsxXSwhMCkubGVuZ3RoOjAseT1uZSxpLmVudGVyKCJjb2RlRmVuY2VkIiksaS5lbnRlcigiY29kZUZlbmNlZEZlbmNlIiksaS5lbnRlcigiY29kZUZlbmNlZEZlbmNlU2VxdWVuY2UiKSxBKG5lKX1mdW5jdGlvbiBBKG5lKXtyZXR1cm4gbmU9PT15PyhiKyssaS5jb25zdW1lKG5lKSxBKTpiPDM/dShuZSk6KGkuZXhpdCgiY29kZUZlbmNlZEZlbmNlU2VxdWVuY2UiKSxJdShuZSk/S2woaSxQLCJ3aGl0ZXNwYWNlIikobmUpOlAobmUpKX1mdW5jdGlvbiBQKG5lKXtyZXR1cm4gbmU9PT1udWxsfHxzbyhuZSk/KGkuZXhpdCgiY29kZUZlbmNlZEZlbmNlIiksZC5pbnRlcnJ1cHQ/cyhuZSk6aS5jaGVjayhYVmUsSyxiZSkobmUpKTooaS5lbnRlcigiY29kZUZlbmNlZEZlbmNlSW5mbyIpLGkuZW50ZXIoImNodW5rU3RyaW5nIix7Y29udGVudFR5cGU6InN0cmluZyJ9KSxSKG5lKSl9ZnVuY3Rpb24gUihuZSl7cmV0dXJuIG5lPT09bnVsbHx8c28obmUpPyhpLmV4aXQoImNodW5rU3RyaW5nIiksaS5leGl0KCJjb2RlRmVuY2VkRmVuY2VJbmZvIiksUChuZSkpOkl1KG5lKT8oaS5leGl0KCJjaHVua1N0cmluZyIpLGkuZXhpdCgiY29kZUZlbmNlZEZlbmNlSW5mbyIpLEtsKGksRiwid2hpdGVzcGFjZSIpKG5lKSk6bmU9PT05NiYmbmU9PT15P3UobmUpOihpLmNvbnN1bWUobmUpLFIpfWZ1bmN0aW9uIEYobmUpe3JldHVybiBuZT09PW51bGx8fHNvKG5lKT9QKG5lKTooaS5lbnRlcigiY29kZUZlbmNlZEZlbmNlTWV0YSIpLGkuZW50ZXIoImNodW5rU3RyaW5nIix7Y29udGVudFR5cGU6InN0cmluZyJ9KSxqKG5lKSl9ZnVuY3Rpb24gaihuZSl7cmV0dXJuIG5lPT09bnVsbHx8c28obmUpPyhpLmV4aXQoImNodW5rU3RyaW5nIiksaS5leGl0KCJjb2RlRmVuY2VkRmVuY2VNZXRhIiksUChuZSkpOm5lPT09OTYmJm5lPT09eT91KG5lKTooaS5jb25zdW1lKG5lKSxqKX1mdW5jdGlvbiBLKG5lKXtyZXR1cm4gaS5hdHRlbXB0KHAsYmUsZWUpKG5lKX1mdW5jdGlvbiBlZShuZSl7cmV0dXJuIGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUobmUpLGkuZXhpdCgibGluZUVuZGluZyIpLGllfWZ1bmN0aW9uIGllKG5lKXtyZXR1cm4gdj4wJiZJdShuZSk/S2woaSxvZSwibGluZVByZWZpeCIsdisxKShuZSk6b2UobmUpfWZ1bmN0aW9uIG9lKG5lKXtyZXR1cm4gbmU9PT1udWxsfHxzbyhuZSk/aS5jaGVjayhYVmUsSyxiZSkobmUpOihpLmVudGVyKCJjb2RlRmxvd1ZhbHVlIikscGUobmUpKX1mdW5jdGlvbiBwZShuZSl7cmV0dXJuIG5lPT09bnVsbHx8c28obmUpPyhpLmV4aXQoImNvZGVGbG93VmFsdWUiKSxvZShuZSkpOihpLmNvbnN1bWUobmUpLHBlKX1mdW5jdGlvbiBiZShuZSl7cmV0dXJuIGkuZXhpdCgiY29kZUZlbmNlZCIpLHMobmUpfWZ1bmN0aW9uIGFlKG5lLHNlLGRlKXtsZXQgWD0wO3JldHVybiBnZTtmdW5jdGlvbiBnZShQZSl7cmV0dXJuIG5lLmVudGVyKCJsaW5lRW5kaW5nIiksbmUuY29uc3VtZShQZSksbmUuZXhpdCgibGluZUVuZGluZyIpLFd9ZnVuY3Rpb24gVyhQZSl7cmV0dXJuIG5lLmVudGVyKCJjb2RlRmVuY2VkRmVuY2UiKSxJdShQZSk/S2wobmUseGUsImxpbmVQcmVmaXgiLGQucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKT92b2lkIDA6NCkoUGUpOnhlKFBlKX1mdW5jdGlvbiB4ZShQZSl7cmV0dXJuIFBlPT09eT8obmUuZW50ZXIoImNvZGVGZW5jZWRGZW5jZVNlcXVlbmNlIiksVShQZSkpOmRlKFBlKX1mdW5jdGlvbiBVKFBlKXtyZXR1cm4gUGU9PT15PyhYKyssbmUuY29uc3VtZShQZSksVSk6WD49Yj8obmUuZXhpdCgiY29kZUZlbmNlZEZlbmNlU2VxdWVuY2UiKSxJdShQZSk/S2wobmUsRmUsIndoaXRlc3BhY2UiKShQZSk6RmUoUGUpKTpkZShQZSl9ZnVuY3Rpb24gRmUoUGUpe3JldHVybiBQZT09PW51bGx8fHNvKFBlKT8obmUuZXhpdCgiY29kZUZlbmNlZEZlbmNlIiksc2UoUGUpKTpkZShQZSl9fX1mdW5jdGlvbiBjSnQoaSxzLHUpe2NvbnN0IGQ9dGhpcztyZXR1cm4gcDtmdW5jdGlvbiBwKGIpe3JldHVybiBiPT09bnVsbD91KGIpOihpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKGIpLGkuZXhpdCgibGluZUVuZGluZyIpLHYpfWZ1bmN0aW9uIHYoYil7cmV0dXJuIGQucGFyc2VyLmxhenlbZC5ub3coKS5saW5lXT91KGIpOnMoYil9fWNvbnN0IEltZT17bmFtZToiY29kZUluZGVudGVkIix0b2tlbml6ZTpsSnR9LHVKdD17dG9rZW5pemU6aEp0LHBhcnRpYWw6ITB9O2Z1bmN0aW9uIGxKdChpLHMsdSl7Y29uc3QgZD10aGlzO3JldHVybiBwO2Z1bmN0aW9uIHAoXyl7cmV0dXJuIGkuZW50ZXIoImNvZGVJbmRlbnRlZCIpLEtsKGksdiwibGluZVByZWZpeCIsNCsxKShfKX1mdW5jdGlvbiB2KF8pe2NvbnN0IEE9ZC5ldmVudHNbZC5ldmVudHMubGVuZ3RoLTFdO3JldHVybiBBJiZBWzFdLnR5cGU9PT0ibGluZVByZWZpeCImJkFbMl0uc2xpY2VTZXJpYWxpemUoQVsxXSwhMCkubGVuZ3RoPj00P2IoXyk6dShfKX1mdW5jdGlvbiBiKF8pe3JldHVybiBfPT09bnVsbD9UKF8pOnNvKF8pP2kuYXR0ZW1wdCh1SnQsYixUKShfKTooaS5lbnRlcigiY29kZUZsb3dWYWx1ZSIpLHkoXykpfWZ1bmN0aW9uIHkoXyl7cmV0dXJuIF89PT1udWxsfHxzbyhfKT8oaS5leGl0KCJjb2RlRmxvd1ZhbHVlIiksYihfKSk6KGkuY29uc3VtZShfKSx5KX1mdW5jdGlvbiBUKF8pe3JldHVybiBpLmV4aXQoImNvZGVJbmRlbnRlZCIpLHMoXyl9fWZ1bmN0aW9uIGhKdChpLHMsdSl7Y29uc3QgZD10aGlzO3JldHVybiBwO2Z1bmN0aW9uIHAoYil7cmV0dXJuIGQucGFyc2VyLmxhenlbZC5ub3coKS5saW5lXT91KGIpOnNvKGIpPyhpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKGIpLGkuZXhpdCgibGluZUVuZGluZyIpLHApOktsKGksdiwibGluZVByZWZpeCIsNCsxKShiKX1mdW5jdGlvbiB2KGIpe2NvbnN0IHk9ZC5ldmVudHNbZC5ldmVudHMubGVuZ3RoLTFdO3JldHVybiB5JiZ5WzFdLnR5cGU9PT0ibGluZVByZWZpeCImJnlbMl0uc2xpY2VTZXJpYWxpemUoeVsxXSwhMCkubGVuZ3RoPj00P3MoYik6c28oYik/cChiKTp1KGIpfX1jb25zdCBmSnQ9e25hbWU6ImNvZGVUZXh0Iix0b2tlbml6ZTpwSnQscmVzb2x2ZTpkSnQscHJldmlvdXM6Z0p0fTtmdW5jdGlvbiBkSnQoaSl7bGV0IHM9aS5sZW5ndGgtNCx1PTMsZCxwO2lmKChpW3VdWzFdLnR5cGU9PT0ibGluZUVuZGluZyJ8fGlbdV1bMV0udHlwZT09PSJzcGFjZSIpJiYoaVtzXVsxXS50eXBlPT09ImxpbmVFbmRpbmcifHxpW3NdWzFdLnR5cGU9PT0ic3BhY2UiKSl7Zm9yKGQ9dTsrK2Q8czspaWYoaVtkXVsxXS50eXBlPT09ImNvZGVUZXh0RGF0YSIpe2lbdV1bMV0udHlwZT0iY29kZVRleHRQYWRkaW5nIixpW3NdWzFdLnR5cGU9ImNvZGVUZXh0UGFkZGluZyIsdSs9MixzLT0yO2JyZWFrfX1mb3IoZD11LTEscysrOysrZDw9czspcD09PXZvaWQgMD9kIT09cyYmaVtkXVsxXS50eXBlIT09ImxpbmVFbmRpbmciJiYocD1kKTooZD09PXN8fGlbZF1bMV0udHlwZT09PSJsaW5lRW5kaW5nIikmJihpW3BdWzFdLnR5cGU9ImNvZGVUZXh0RGF0YSIsZCE9PXArMiYmKGlbcF1bMV0uZW5kPWlbZC0xXVsxXS5lbmQsaS5zcGxpY2UocCsyLGQtcC0yKSxzLT1kLXAtMixkPXArMikscD12b2lkIDApO3JldHVybiBpfWZ1bmN0aW9uIGdKdChpKXtyZXR1cm4gaSE9PTk2fHx0aGlzLmV2ZW50c1t0aGlzLmV2ZW50cy5sZW5ndGgtMV1bMV0udHlwZT09PSJjaGFyYWN0ZXJFc2NhcGUifWZ1bmN0aW9uIHBKdChpLHMsdSl7bGV0IGQ9MCxwLHY7cmV0dXJuIGI7ZnVuY3Rpb24gYihQKXtyZXR1cm4gaS5lbnRlcigiY29kZVRleHQiKSxpLmVudGVyKCJjb2RlVGV4dFNlcXVlbmNlIikseShQKX1mdW5jdGlvbiB5KFApe3JldHVybiBQPT09OTY/KGkuY29uc3VtZShQKSxkKysseSk6KGkuZXhpdCgiY29kZVRleHRTZXF1ZW5jZSIpLFQoUCkpfWZ1bmN0aW9uIFQoUCl7cmV0dXJuIFA9PT1udWxsP3UoUCk6UD09PTMyPyhpLmVudGVyKCJzcGFjZSIpLGkuY29uc3VtZShQKSxpLmV4aXQoInNwYWNlIiksVCk6UD09PTk2Pyh2PWkuZW50ZXIoImNvZGVUZXh0U2VxdWVuY2UiKSxwPTAsQShQKSk6c28oUCk/KGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUoUCksaS5leGl0KCJsaW5lRW5kaW5nIiksVCk6KGkuZW50ZXIoImNvZGVUZXh0RGF0YSIpLF8oUCkpfWZ1bmN0aW9uIF8oUCl7cmV0dXJuIFA9PT1udWxsfHxQPT09MzJ8fFA9PT05Nnx8c28oUCk/KGkuZXhpdCgiY29kZVRleHREYXRhIiksVChQKSk6KGkuY29uc3VtZShQKSxfKX1mdW5jdGlvbiBBKFApe3JldHVybiBQPT09OTY/KGkuY29uc3VtZShQKSxwKyssQSk6cD09PWQ/KGkuZXhpdCgiY29kZVRleHRTZXF1ZW5jZSIpLGkuZXhpdCgiY29kZVRleHQiKSxzKFApKToodi50eXBlPSJjb2RlVGV4dERhdGEiLF8oUCkpfX1mdW5jdGlvbiBKVmUoaSl7Y29uc3Qgcz17fTtsZXQgdT0tMSxkLHAsdixiLHksVCxfO2Zvcig7Kyt1PGkubGVuZ3RoOyl7Zm9yKDt1IGluIHM7KXU9c1t1XTtpZihkPWlbdV0sdSYmZFsxXS50eXBlPT09ImNodW5rRmxvdyImJmlbdS0xXVsxXS50eXBlPT09Imxpc3RJdGVtUHJlZml4IiYmKFQ9ZFsxXS5fdG9rZW5pemVyLmV2ZW50cyx2PTAsdjxULmxlbmd0aCYmVFt2XVsxXS50eXBlPT09ImxpbmVFbmRpbmdCbGFuayImJih2Kz0yKSx2PFQubGVuZ3RoJiZUW3ZdWzFdLnR5cGU9PT0iY29udGVudCIpKWZvcig7Kyt2PFQubGVuZ3RoJiZUW3ZdWzFdLnR5cGUhPT0iY29udGVudCI7KVRbdl1bMV0udHlwZT09PSJjaHVua1RleHQiJiYoVFt2XVsxXS5faXNJbkZpcnN0Q29udGVudE9mTGlzdEl0ZW09ITAsdisrKTtpZihkWzBdPT09ImVudGVyIilkWzFdLmNvbnRlbnRUeXBlJiYoT2JqZWN0LmFzc2lnbihzLGJKdChpLHUpKSx1PXNbdV0sXz0hMCk7ZWxzZSBpZihkWzFdLl9jb250YWluZXIpe2Zvcih2PXUscD12b2lkIDA7di0tJiYoYj1pW3ZdLGJbMV0udHlwZT09PSJsaW5lRW5kaW5nInx8YlsxXS50eXBlPT09ImxpbmVFbmRpbmdCbGFuayIpOyliWzBdPT09ImVudGVyIiYmKHAmJihpW3BdWzFdLnR5cGU9ImxpbmVFbmRpbmdCbGFuayIpLGJbMV0udHlwZT0ibGluZUVuZGluZyIscD12KTtwJiYoZFsxXS5lbmQ9T2JqZWN0LmFzc2lnbih7fSxpW3BdWzFdLnN0YXJ0KSx5PWkuc2xpY2UocCx1KSx5LnVuc2hpZnQoZCksdDUoaSxwLHUtcCsxLHkpKX19cmV0dXJuIV99ZnVuY3Rpb24gYkp0KGkscyl7Y29uc3QgdT1pW3NdWzFdLGQ9aVtzXVsyXTtsZXQgcD1zLTE7Y29uc3Qgdj1bXSxiPXUuX3Rva2VuaXplcnx8ZC5wYXJzZXJbdS5jb250ZW50VHlwZV0odS5zdGFydCkseT1iLmV2ZW50cyxUPVtdLF89e307bGV0IEEsUCxSPS0xLEY9dSxqPTAsSz0wO2NvbnN0IGVlPVtLXTtmb3IoO0Y7KXtmb3IoO2lbKytwXVsxXSE9PUY7KTt2LnB1c2gocCksRi5fdG9rZW5pemVyfHwoQT1kLnNsaWNlU3RyZWFtKEYpLEYubmV4dHx8QS5wdXNoKG51bGwpLFAmJmIuZGVmaW5lU2tpcChGLnN0YXJ0KSxGLl9pc0luRmlyc3RDb250ZW50T2ZMaXN0SXRlbSYmKGIuX2dmbVRhc2tsaXN0Rmlyc3RDb250ZW50T2ZMaXN0SXRlbT0hMCksYi53cml0ZShBKSxGLl9pc0luRmlyc3RDb250ZW50T2ZMaXN0SXRlbSYmKGIuX2dmbVRhc2tsaXN0Rmlyc3RDb250ZW50T2ZMaXN0SXRlbT12b2lkIDApKSxQPUYsRj1GLm5leHR9Zm9yKEY9dTsrK1I8eS5sZW5ndGg7KXlbUl1bMF09PT0iZXhpdCImJnlbUi0xXVswXT09PSJlbnRlciImJnlbUl1bMV0udHlwZT09PXlbUi0xXVsxXS50eXBlJiZ5W1JdWzFdLnN0YXJ0LmxpbmUhPT15W1JdWzFdLmVuZC5saW5lJiYoSz1SKzEsZWUucHVzaChLKSxGLl90b2tlbml6ZXI9dm9pZCAwLEYucHJldmlvdXM9dm9pZCAwLEY9Ri5uZXh0KTtmb3IoYi5ldmVudHM9W10sRj8oRi5fdG9rZW5pemVyPXZvaWQgMCxGLnByZXZpb3VzPXZvaWQgMCk6ZWUucG9wKCksUj1lZS5sZW5ndGg7Ui0tOyl7Y29uc3QgaWU9eS5zbGljZShlZVtSXSxlZVtSKzFdKSxvZT12LnBvcCgpO1QudW5zaGlmdChbb2Usb2UraWUubGVuZ3RoLTFdKSx0NShpLG9lLDIsaWUpfWZvcihSPS0xOysrUjxULmxlbmd0aDspX1tqK1RbUl1bMF1dPWorVFtSXVsxXSxqKz1UW1JdWzFdLVRbUl1bMF0tMTtyZXR1cm4gX31jb25zdCBtSnQ9e3Rva2VuaXplOnlKdCxyZXNvbHZlOndKdH0sdkp0PXt0b2tlbml6ZTp4SnQscGFydGlhbDohMH07ZnVuY3Rpb24gd0p0KGkpe3JldHVybiBKVmUoaSksaX1mdW5jdGlvbiB5SnQoaSxzKXtsZXQgdTtyZXR1cm4gZDtmdW5jdGlvbiBkKHkpe3JldHVybiBpLmVudGVyKCJjb250ZW50IiksdT1pLmVudGVyKCJjaHVua0NvbnRlbnQiLHtjb250ZW50VHlwZToiY29udGVudCJ9KSxwKHkpfWZ1bmN0aW9uIHAoeSl7cmV0dXJuIHk9PT1udWxsP3YoeSk6c28oeSk/aS5jaGVjayh2SnQsYix2KSh5KTooaS5jb25zdW1lKHkpLHApfWZ1bmN0aW9uIHYoeSl7cmV0dXJuIGkuZXhpdCgiY2h1bmtDb250ZW50IiksaS5leGl0KCJjb250ZW50Iikscyh5KX1mdW5jdGlvbiBiKHkpe3JldHVybiBpLmNvbnN1bWUoeSksaS5leGl0KCJjaHVua0NvbnRlbnQiKSx1Lm5leHQ9aS5lbnRlcigiY2h1bmtDb250ZW50Iix7Y29udGVudFR5cGU6ImNvbnRlbnQiLHByZXZpb3VzOnV9KSx1PXUubmV4dCxwfX1mdW5jdGlvbiB4SnQoaSxzLHUpe2NvbnN0IGQ9dGhpcztyZXR1cm4gcDtmdW5jdGlvbiBwKGIpe3JldHVybiBpLmV4aXQoImNodW5rQ29udGVudCIpLGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUoYiksaS5leGl0KCJsaW5lRW5kaW5nIiksS2woaSx2LCJsaW5lUHJlZml4Iil9ZnVuY3Rpb24gdihiKXtpZihiPT09bnVsbHx8c28oYikpcmV0dXJuIHUoYik7Y29uc3QgeT1kLmV2ZW50c1tkLmV2ZW50cy5sZW5ndGgtMV07cmV0dXJuIWQucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKSYmeSYmeVsxXS50eXBlPT09ImxpbmVQcmVmaXgiJiZ5WzJdLnNsaWNlU2VyaWFsaXplKHlbMV0sITApLmxlbmd0aD49ND9zKGIpOmkuaW50ZXJydXB0KGQucGFyc2VyLmNvbnN0cnVjdHMuZmxvdyx1LHMpKGIpfX1mdW5jdGlvbiBaVmUoaSxzLHUsZCxwLHYsYix5LFQpe2NvbnN0IF89VHx8TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2xldCBBPTA7cmV0dXJuIFA7ZnVuY3Rpb24gUChpZSl7cmV0dXJuIGllPT09NjA/KGkuZW50ZXIoZCksaS5lbnRlcihwKSxpLmVudGVyKHYpLGkuY29uc3VtZShpZSksaS5leGl0KHYpLFIpOmllPT09bnVsbHx8aWU9PT0zMnx8aWU9PT00MXx8X21lKGllKT91KGllKTooaS5lbnRlcihkKSxpLmVudGVyKGIpLGkuZW50ZXIoeSksaS5lbnRlcigiY2h1bmtTdHJpbmciLHtjb250ZW50VHlwZToic3RyaW5nIn0pLEsoaWUpKX1mdW5jdGlvbiBSKGllKXtyZXR1cm4gaWU9PT02Mj8oaS5lbnRlcih2KSxpLmNvbnN1bWUoaWUpLGkuZXhpdCh2KSxpLmV4aXQocCksaS5leGl0KGQpLHMpOihpLmVudGVyKHkpLGkuZW50ZXIoImNodW5rU3RyaW5nIix7Y29udGVudFR5cGU6InN0cmluZyJ9KSxGKGllKSl9ZnVuY3Rpb24gRihpZSl7cmV0dXJuIGllPT09NjI/KGkuZXhpdCgiY2h1bmtTdHJpbmciKSxpLmV4aXQoeSksUihpZSkpOmllPT09bnVsbHx8aWU9PT02MHx8c28oaWUpP3UoaWUpOihpLmNvbnN1bWUoaWUpLGllPT09OTI/ajpGKX1mdW5jdGlvbiBqKGllKXtyZXR1cm4gaWU9PT02MHx8aWU9PT02Mnx8aWU9PT05Mj8oaS5jb25zdW1lKGllKSxGKTpGKGllKX1mdW5jdGlvbiBLKGllKXtyZXR1cm4hQSYmKGllPT09bnVsbHx8aWU9PT00MXx8ejIoaWUpKT8oaS5leGl0KCJjaHVua1N0cmluZyIpLGkuZXhpdCh5KSxpLmV4aXQoYiksaS5leGl0KGQpLHMoaWUpKTpBPF8mJmllPT09NDA/KGkuY29uc3VtZShpZSksQSsrLEspOmllPT09NDE/KGkuY29uc3VtZShpZSksQS0tLEspOmllPT09bnVsbHx8aWU9PT0zMnx8aWU9PT00MHx8X21lKGllKT91KGllKTooaS5jb25zdW1lKGllKSxpZT09PTkyP2VlOkspfWZ1bmN0aW9uIGVlKGllKXtyZXR1cm4gaWU9PT00MHx8aWU9PT00MXx8aWU9PT05Mj8oaS5jb25zdW1lKGllKSxLKTpLKGllKX19ZnVuY3Rpb24gZVVlKGkscyx1LGQscCx2KXtjb25zdCBiPXRoaXM7bGV0IHk9MCxUO3JldHVybiBfO2Z1bmN0aW9uIF8oRil7cmV0dXJuIGkuZW50ZXIoZCksaS5lbnRlcihwKSxpLmNvbnN1bWUoRiksaS5leGl0KHApLGkuZW50ZXIodiksQX1mdW5jdGlvbiBBKEYpe3JldHVybiB5Pjk5OXx8Rj09PW51bGx8fEY9PT05MXx8Rj09PTkzJiYhVHx8Rj09PTk0JiYheSYmIl9oaWRkZW5Gb290bm90ZVN1cHBvcnQiaW4gYi5wYXJzZXIuY29uc3RydWN0cz91KEYpOkY9PT05Mz8oaS5leGl0KHYpLGkuZW50ZXIocCksaS5jb25zdW1lKEYpLGkuZXhpdChwKSxpLmV4aXQoZCkscyk6c28oRik/KGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUoRiksaS5leGl0KCJsaW5lRW5kaW5nIiksQSk6KGkuZW50ZXIoImNodW5rU3RyaW5nIix7Y29udGVudFR5cGU6InN0cmluZyJ9KSxQKEYpKX1mdW5jdGlvbiBQKEYpe3JldHVybiBGPT09bnVsbHx8Rj09PTkxfHxGPT09OTN8fHNvKEYpfHx5Kys+OTk5PyhpLmV4aXQoImNodW5rU3RyaW5nIiksQShGKSk6KGkuY29uc3VtZShGKSxUfHwoVD0hSXUoRikpLEY9PT05Mj9SOlApfWZ1bmN0aW9uIFIoRil7cmV0dXJuIEY9PT05MXx8Rj09PTkyfHxGPT09OTM/KGkuY29uc3VtZShGKSx5KyssUCk6UChGKX19ZnVuY3Rpb24gdFVlKGkscyx1LGQscCx2KXtsZXQgYjtyZXR1cm4geTtmdW5jdGlvbiB5KFIpe3JldHVybiBSPT09MzR8fFI9PT0zOXx8Uj09PTQwPyhpLmVudGVyKGQpLGkuZW50ZXIocCksaS5jb25zdW1lKFIpLGkuZXhpdChwKSxiPVI9PT00MD80MTpSLFQpOnUoUil9ZnVuY3Rpb24gVChSKXtyZXR1cm4gUj09PWI/KGkuZW50ZXIocCksaS5jb25zdW1lKFIpLGkuZXhpdChwKSxpLmV4aXQoZCkscyk6KGkuZW50ZXIodiksXyhSKSl9ZnVuY3Rpb24gXyhSKXtyZXR1cm4gUj09PWI/KGkuZXhpdCh2KSxUKGIpKTpSPT09bnVsbD91KFIpOnNvKFIpPyhpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKFIpLGkuZXhpdCgibGluZUVuZGluZyIpLEtsKGksXywibGluZVByZWZpeCIpKTooaS5lbnRlcigiY2h1bmtTdHJpbmciLHtjb250ZW50VHlwZToic3RyaW5nIn0pLEEoUikpfWZ1bmN0aW9uIEEoUil7cmV0dXJuIFI9PT1ifHxSPT09bnVsbHx8c28oUik/KGkuZXhpdCgiY2h1bmtTdHJpbmciKSxfKFIpKTooaS5jb25zdW1lKFIpLFI9PT05Mj9QOkEpfWZ1bmN0aW9uIFAoUil7cmV0dXJuIFI9PT1ifHxSPT09OTI/KGkuY29uc3VtZShSKSxBKTpBKFIpfX1mdW5jdGlvbiBMUihpLHMpe2xldCB1O3JldHVybiBkO2Z1bmN0aW9uIGQocCl7cmV0dXJuIHNvKHApPyhpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKHApLGkuZXhpdCgibGluZUVuZGluZyIpLHU9ITAsZCk6SXUocCk/S2woaSxkLHU/ImxpbmVQcmVmaXgiOiJsaW5lU3VmZml4IikocCk6cyhwKX19ZnVuY3Rpb24gSEQoaSl7cmV0dXJuIGkucmVwbGFjZSgvW1x0XG5cciBdKy9nLCIgIikucmVwbGFjZSgvXiB8ICQvZywiIikudG9Mb3dlckNhc2UoKS50b1VwcGVyQ2FzZSgpfWNvbnN0IGtKdD17bmFtZToiZGVmaW5pdGlvbiIsdG9rZW5pemU6VEp0fSxFSnQ9e3Rva2VuaXplOkNKdCxwYXJ0aWFsOiEwfTtmdW5jdGlvbiBUSnQoaSxzLHUpe2NvbnN0IGQ9dGhpcztsZXQgcDtyZXR1cm4gdjtmdW5jdGlvbiB2KEYpe3JldHVybiBpLmVudGVyKCJkZWZpbml0aW9uIiksYihGKX1mdW5jdGlvbiBiKEYpe3JldHVybiBlVWUuY2FsbChkLGkseSx1LCJkZWZpbml0aW9uTGFiZWwiLCJkZWZpbml0aW9uTGFiZWxNYXJrZXIiLCJkZWZpbml0aW9uTGFiZWxTdHJpbmciKShGKX1mdW5jdGlvbiB5KEYpe3JldHVybiBwPUhEKGQuc2xpY2VTZXJpYWxpemUoZC5ldmVudHNbZC5ldmVudHMubGVuZ3RoLTFdWzFdKS5zbGljZSgxLC0xKSksRj09PTU4PyhpLmVudGVyKCJkZWZpbml0aW9uTWFya2VyIiksaS5jb25zdW1lKEYpLGkuZXhpdCgiZGVmaW5pdGlvbk1hcmtlciIpLFQpOnUoRil9ZnVuY3Rpb24gVChGKXtyZXR1cm4gejIoRik/TFIoaSxfKShGKTpfKEYpfWZ1bmN0aW9uIF8oRil7cmV0dXJuIFpWZShpLEEsdSwiZGVmaW5pdGlvbkRlc3RpbmF0aW9uIiwiZGVmaW5pdGlvbkRlc3RpbmF0aW9uTGl0ZXJhbCIsImRlZmluaXRpb25EZXN0aW5hdGlvbkxpdGVyYWxNYXJrZXIiLCJkZWZpbml0aW9uRGVzdGluYXRpb25SYXciLCJkZWZpbml0aW9uRGVzdGluYXRpb25TdHJpbmciKShGKX1mdW5jdGlvbiBBKEYpe3JldHVybiBpLmF0dGVtcHQoRUp0LFAsUCkoRil9ZnVuY3Rpb24gUChGKXtyZXR1cm4gSXUoRik/S2woaSxSLCJ3aGl0ZXNwYWNlIikoRik6UihGKX1mdW5jdGlvbiBSKEYpe3JldHVybiBGPT09bnVsbHx8c28oRik/KGkuZXhpdCgiZGVmaW5pdGlvbiIpLGQucGFyc2VyLmRlZmluZWQucHVzaChwKSxzKEYpKTp1KEYpfX1mdW5jdGlvbiBDSnQoaSxzLHUpe3JldHVybiBkO2Z1bmN0aW9uIGQoeSl7cmV0dXJuIHoyKHkpP0xSKGkscCkoeSk6dSh5KX1mdW5jdGlvbiBwKHkpe3JldHVybiB0VWUoaSx2LHUsImRlZmluaXRpb25UaXRsZSIsImRlZmluaXRpb25UaXRsZU1hcmtlciIsImRlZmluaXRpb25UaXRsZVN0cmluZyIpKHkpfWZ1bmN0aW9uIHYoeSl7cmV0dXJuIEl1KHkpP0tsKGksYiwid2hpdGVzcGFjZSIpKHkpOmIoeSl9ZnVuY3Rpb24gYih5KXtyZXR1cm4geT09PW51bGx8fHNvKHkpP3MoeSk6dSh5KX19Y29uc3QgU0p0PXtuYW1lOiJoYXJkQnJlYWtFc2NhcGUiLHRva2VuaXplOl9KdH07ZnVuY3Rpb24gX0p0KGkscyx1KXtyZXR1cm4gZDtmdW5jdGlvbiBkKHYpe3JldHVybiBpLmVudGVyKCJoYXJkQnJlYWtFc2NhcGUiKSxpLmNvbnN1bWUodikscH1mdW5jdGlvbiBwKHYpe3JldHVybiBzbyh2KT8oaS5leGl0KCJoYXJkQnJlYWtFc2NhcGUiKSxzKHYpKTp1KHYpfX1jb25zdCBBSnQ9e25hbWU6ImhlYWRpbmdBdHgiLHRva2VuaXplOk1KdCxyZXNvbHZlOkxKdH07ZnVuY3Rpb24gTEp0KGkscyl7bGV0IHU9aS5sZW5ndGgtMixkPTMscCx2O3JldHVybiBpW2RdWzFdLnR5cGU9PT0id2hpdGVzcGFjZSImJihkKz0yKSx1LTI+ZCYmaVt1XVsxXS50eXBlPT09IndoaXRlc3BhY2UiJiYodS09MiksaVt1XVsxXS50eXBlPT09ImF0eEhlYWRpbmdTZXF1ZW5jZSImJihkPT09dS0xfHx1LTQ+ZCYmaVt1LTJdWzFdLnR5cGU9PT0id2hpdGVzcGFjZSIpJiYodS09ZCsxPT09dT8yOjQpLHU+ZCYmKHA9e3R5cGU6ImF0eEhlYWRpbmdUZXh0IixzdGFydDppW2RdWzFdLnN0YXJ0LGVuZDppW3VdWzFdLmVuZH0sdj17dHlwZToiY2h1bmtUZXh0IixzdGFydDppW2RdWzFdLnN0YXJ0LGVuZDppW3VdWzFdLmVuZCxjb250ZW50VHlwZToidGV4dCJ9LHQ1KGksZCx1LWQrMSxbWyJlbnRlciIscCxzXSxbImVudGVyIix2LHNdLFsiZXhpdCIsdixzXSxbImV4aXQiLHAsc11dKSksaX1mdW5jdGlvbiBNSnQoaSxzLHUpe2xldCBkPTA7cmV0dXJuIHA7ZnVuY3Rpb24gcChBKXtyZXR1cm4gaS5lbnRlcigiYXR4SGVhZGluZyIpLHYoQSl9ZnVuY3Rpb24gdihBKXtyZXR1cm4gaS5lbnRlcigiYXR4SGVhZGluZ1NlcXVlbmNlIiksYihBKX1mdW5jdGlvbiBiKEEpe3JldHVybiBBPT09MzUmJmQrKzw2PyhpLmNvbnN1bWUoQSksYik6QT09PW51bGx8fHoyKEEpPyhpLmV4aXQoImF0eEhlYWRpbmdTZXF1ZW5jZSIpLHkoQSkpOnUoQSl9ZnVuY3Rpb24geShBKXtyZXR1cm4gQT09PTM1PyhpLmVudGVyKCJhdHhIZWFkaW5nU2VxdWVuY2UiKSxUKEEpKTpBPT09bnVsbHx8c28oQSk/KGkuZXhpdCgiYXR4SGVhZGluZyIpLHMoQSkpOkl1KEEpP0tsKGkseSwid2hpdGVzcGFjZSIpKEEpOihpLmVudGVyKCJhdHhIZWFkaW5nVGV4dCIpLF8oQSkpfWZ1bmN0aW9uIFQoQSl7cmV0dXJuIEE9PT0zNT8oaS5jb25zdW1lKEEpLFQpOihpLmV4aXQoImF0eEhlYWRpbmdTZXF1ZW5jZSIpLHkoQSkpfWZ1bmN0aW9uIF8oQSl7cmV0dXJuIEE9PT1udWxsfHxBPT09MzV8fHoyKEEpPyhpLmV4aXQoImF0eEhlYWRpbmdUZXh0IikseShBKSk6KGkuY29uc3VtZShBKSxfKX19Y29uc3QgREp0PVsiYWRkcmVzcyIsImFydGljbGUiLCJhc2lkZSIsImJhc2UiLCJiYXNlZm9udCIsImJsb2NrcXVvdGUiLCJib2R5IiwiY2FwdGlvbiIsImNlbnRlciIsImNvbCIsImNvbGdyb3VwIiwiZGQiLCJkZXRhaWxzIiwiZGlhbG9nIiwiZGlyIiwiZGl2IiwiZGwiLCJkdCIsImZpZWxkc2V0IiwiZmlnY2FwdGlvbiIsImZpZ3VyZSIsImZvb3RlciIsImZvcm0iLCJmcmFtZSIsImZyYW1lc2V0IiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaGVhZCIsImhlYWRlciIsImhyIiwiaHRtbCIsImlmcmFtZSIsImxlZ2VuZCIsImxpIiwibGluayIsIm1haW4iLCJtZW51IiwibWVudWl0ZW0iLCJuYXYiLCJub2ZyYW1lcyIsIm9sIiwib3B0Z3JvdXAiLCJvcHRpb24iLCJwIiwicGFyYW0iLCJzZWFyY2giLCJzZWN0aW9uIiwic3VtbWFyeSIsInRhYmxlIiwidGJvZHkiLCJ0ZCIsInRmb290IiwidGgiLCJ0aGVhZCIsInRpdGxlIiwidHIiLCJ0cmFjayIsInVsIl0sblVlPVsicHJlIiwic2NyaXB0Iiwic3R5bGUiLCJ0ZXh0YXJlYSJdLElKdD17bmFtZToiaHRtbEZsb3ciLHRva2VuaXplOkJKdCxyZXNvbHZlVG86UEp0LGNvbmNyZXRlOiEwfSxPSnQ9e3Rva2VuaXplOlJKdCxwYXJ0aWFsOiEwfSxOSnQ9e3Rva2VuaXplOkZKdCxwYXJ0aWFsOiEwfTtmdW5jdGlvbiBQSnQoaSl7bGV0IHM9aS5sZW5ndGg7Zm9yKDtzLS0mJiEoaVtzXVswXT09PSJlbnRlciImJmlbc11bMV0udHlwZT09PSJodG1sRmxvdyIpOyk7cmV0dXJuIHM+MSYmaVtzLTJdWzFdLnR5cGU9PT0ibGluZVByZWZpeCImJihpW3NdWzFdLnN0YXJ0PWlbcy0yXVsxXS5zdGFydCxpW3MrMV1bMV0uc3RhcnQ9aVtzLTJdWzFdLnN0YXJ0LGkuc3BsaWNlKHMtMiwyKSksaX1mdW5jdGlvbiBCSnQoaSxzLHUpe2NvbnN0IGQ9dGhpcztsZXQgcCx2LGIseSxUO3JldHVybiBfO2Z1bmN0aW9uIF8oTmUpe3JldHVybiBBKE5lKX1mdW5jdGlvbiBBKE5lKXtyZXR1cm4gaS5lbnRlcigiaHRtbEZsb3ciKSxpLmVudGVyKCJodG1sRmxvd0RhdGEiKSxpLmNvbnN1bWUoTmUpLFB9ZnVuY3Rpb24gUChOZSl7cmV0dXJuIE5lPT09MzM/KGkuY29uc3VtZShOZSksUik6TmU9PT00Nz8oaS5jb25zdW1lKE5lKSx2PSEwLEspOk5lPT09NjM/KGkuY29uc3VtZShOZSkscD0zLGQuaW50ZXJydXB0P3M6a2UpOm41KE5lKT8oaS5jb25zdW1lKE5lKSxiPVN0cmluZy5mcm9tQ2hhckNvZGUoTmUpLGVlKTp1KE5lKX1mdW5jdGlvbiBSKE5lKXtyZXR1cm4gTmU9PT00NT8oaS5jb25zdW1lKE5lKSxwPTIsRik6TmU9PT05MT8oaS5jb25zdW1lKE5lKSxwPTUseT0wLGopOm41KE5lKT8oaS5jb25zdW1lKE5lKSxwPTQsZC5pbnRlcnJ1cHQ/czprZSk6dShOZSl9ZnVuY3Rpb24gRihOZSl7cmV0dXJuIE5lPT09NDU/KGkuY29uc3VtZShOZSksZC5pbnRlcnJ1cHQ/czprZSk6dShOZSl9ZnVuY3Rpb24gaihOZSl7Y29uc3QgZ249IkNEQVRBWyI7cmV0dXJuIE5lPT09Z24uY2hhckNvZGVBdCh5KyspPyhpLmNvbnN1bWUoTmUpLHk9PT1nbi5sZW5ndGg/ZC5pbnRlcnJ1cHQ/czp4ZTpqKTp1KE5lKX1mdW5jdGlvbiBLKE5lKXtyZXR1cm4gbjUoTmUpPyhpLmNvbnN1bWUoTmUpLGI9U3RyaW5nLmZyb21DaGFyQ29kZShOZSksZWUpOnUoTmUpfWZ1bmN0aW9uIGVlKE5lKXtpZihOZT09PW51bGx8fE5lPT09NDd8fE5lPT09NjJ8fHoyKE5lKSl7Y29uc3QgZ249TmU9PT00NyxfdD1iLnRvTG93ZXJDYXNlKCk7cmV0dXJuIWduJiYhdiYmblVlLmluY2x1ZGVzKF90KT8ocD0xLGQuaW50ZXJydXB0P3MoTmUpOnhlKE5lKSk6REp0LmluY2x1ZGVzKGIudG9Mb3dlckNhc2UoKSk/KHA9Nixnbj8oaS5jb25zdW1lKE5lKSxpZSk6ZC5pbnRlcnJ1cHQ/cyhOZSk6eGUoTmUpKToocD03LGQuaW50ZXJydXB0JiYhZC5wYXJzZXIubGF6eVtkLm5vdygpLmxpbmVdP3UoTmUpOnY/b2UoTmUpOnBlKE5lKSl9cmV0dXJuIE5lPT09NDV8fEgzKE5lKT8oaS5jb25zdW1lKE5lKSxiKz1TdHJpbmcuZnJvbUNoYXJDb2RlKE5lKSxlZSk6dShOZSl9ZnVuY3Rpb24gaWUoTmUpe3JldHVybiBOZT09PTYyPyhpLmNvbnN1bWUoTmUpLGQuaW50ZXJydXB0P3M6eGUpOnUoTmUpfWZ1bmN0aW9uIG9lKE5lKXtyZXR1cm4gSXUoTmUpPyhpLmNvbnN1bWUoTmUpLG9lKTpnZShOZSl9ZnVuY3Rpb24gcGUoTmUpe3JldHVybiBOZT09PTQ3PyhpLmNvbnN1bWUoTmUpLGdlKTpOZT09PTU4fHxOZT09PTk1fHxuNShOZSk/KGkuY29uc3VtZShOZSksYmUpOkl1KE5lKT8oaS5jb25zdW1lKE5lKSxwZSk6Z2UoTmUpfWZ1bmN0aW9uIGJlKE5lKXtyZXR1cm4gTmU9PT00NXx8TmU9PT00Nnx8TmU9PT01OHx8TmU9PT05NXx8SDMoTmUpPyhpLmNvbnN1bWUoTmUpLGJlKTphZShOZSl9ZnVuY3Rpb24gYWUoTmUpe3JldHVybiBOZT09PTYxPyhpLmNvbnN1bWUoTmUpLG5lKTpJdShOZSk/KGkuY29uc3VtZShOZSksYWUpOnBlKE5lKX1mdW5jdGlvbiBuZShOZSl7cmV0dXJuIE5lPT09bnVsbHx8TmU9PT02MHx8TmU9PT02MXx8TmU9PT02Mnx8TmU9PT05Nj91KE5lKTpOZT09PTM0fHxOZT09PTM5PyhpLmNvbnN1bWUoTmUpLFQ9TmUsc2UpOkl1KE5lKT8oaS5jb25zdW1lKE5lKSxuZSk6ZGUoTmUpfWZ1bmN0aW9uIHNlKE5lKXtyZXR1cm4gTmU9PT1UPyhpLmNvbnN1bWUoTmUpLFQ9bnVsbCxYKTpOZT09PW51bGx8fHNvKE5lKT91KE5lKTooaS5jb25zdW1lKE5lKSxzZSl9ZnVuY3Rpb24gZGUoTmUpe3JldHVybiBOZT09PW51bGx8fE5lPT09MzR8fE5lPT09Mzl8fE5lPT09NDd8fE5lPT09NjB8fE5lPT09NjF8fE5lPT09NjJ8fE5lPT09OTZ8fHoyKE5lKT9hZShOZSk6KGkuY29uc3VtZShOZSksZGUpfWZ1bmN0aW9uIFgoTmUpe3JldHVybiBOZT09PTQ3fHxOZT09PTYyfHxJdShOZSk/cGUoTmUpOnUoTmUpfWZ1bmN0aW9uIGdlKE5lKXtyZXR1cm4gTmU9PT02Mj8oaS5jb25zdW1lKE5lKSxXKTp1KE5lKX1mdW5jdGlvbiBXKE5lKXtyZXR1cm4gTmU9PT1udWxsfHxzbyhOZSk/eGUoTmUpOkl1KE5lKT8oaS5jb25zdW1lKE5lKSxXKTp1KE5lKX1mdW5jdGlvbiB4ZShOZSl7cmV0dXJuIE5lPT09NDUmJnA9PT0yPyhpLmNvbnN1bWUoTmUpLGplKTpOZT09PTYwJiZwPT09MT8oaS5jb25zdW1lKE5lKSxJZSk6TmU9PT02MiYmcD09PTQ/KGkuY29uc3VtZShOZSksS2UpOk5lPT09NjMmJnA9PT0zPyhpLmNvbnN1bWUoTmUpLGtlKTpOZT09PTkzJiZwPT09NT8oaS5jb25zdW1lKE5lKSxDZSk6c28oTmUpJiYocD09PTZ8fHA9PT03KT8oaS5leGl0KCJodG1sRmxvd0RhdGEiKSxpLmNoZWNrKE9KdCxGdCxVKShOZSkpOk5lPT09bnVsbHx8c28oTmUpPyhpLmV4aXQoImh0bWxGbG93RGF0YSIpLFUoTmUpKTooaS5jb25zdW1lKE5lKSx4ZSl9ZnVuY3Rpb24gVShOZSl7cmV0dXJuIGkuY2hlY2soTkp0LEZlLEZ0KShOZSl9ZnVuY3Rpb24gRmUoTmUpe3JldHVybiBpLmVudGVyKCJsaW5lRW5kaW5nIiksaS5jb25zdW1lKE5lKSxpLmV4aXQoImxpbmVFbmRpbmciKSxQZX1mdW5jdGlvbiBQZShOZSl7cmV0dXJuIE5lPT09bnVsbHx8c28oTmUpP1UoTmUpOihpLmVudGVyKCJodG1sRmxvd0RhdGEiKSx4ZShOZSkpfWZ1bmN0aW9uIGplKE5lKXtyZXR1cm4gTmU9PT00NT8oaS5jb25zdW1lKE5lKSxrZSk6eGUoTmUpfWZ1bmN0aW9uIEllKE5lKXtyZXR1cm4gTmU9PT00Nz8oaS5jb25zdW1lKE5lKSxiPSIiLFNlKTp4ZShOZSl9ZnVuY3Rpb24gU2UoTmUpe2lmKE5lPT09NjIpe2NvbnN0IGduPWIudG9Mb3dlckNhc2UoKTtyZXR1cm4gblVlLmluY2x1ZGVzKGduKT8oaS5jb25zdW1lKE5lKSxLZSk6eGUoTmUpfXJldHVybiBuNShOZSkmJmIubGVuZ3RoPDg/KGkuY29uc3VtZShOZSksYis9U3RyaW5nLmZyb21DaGFyQ29kZShOZSksU2UpOnhlKE5lKX1mdW5jdGlvbiBDZShOZSl7cmV0dXJuIE5lPT09OTM/KGkuY29uc3VtZShOZSksa2UpOnhlKE5lKX1mdW5jdGlvbiBrZShOZSl7cmV0dXJuIE5lPT09NjI/KGkuY29uc3VtZShOZSksS2UpOk5lPT09NDUmJnA9PT0yPyhpLmNvbnN1bWUoTmUpLGtlKTp4ZShOZSl9ZnVuY3Rpb24gS2UoTmUpe3JldHVybiBOZT09PW51bGx8fHNvKE5lKT8oaS5leGl0KCJodG1sRmxvd0RhdGEiKSxGdChOZSkpOihpLmNvbnN1bWUoTmUpLEtlKX1mdW5jdGlvbiBGdChOZSl7cmV0dXJuIGkuZXhpdCgiaHRtbEZsb3ciKSxzKE5lKX19ZnVuY3Rpb24gRkp0KGkscyx1KXtjb25zdCBkPXRoaXM7cmV0dXJuIHA7ZnVuY3Rpb24gcChiKXtyZXR1cm4gc28oYik/KGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUoYiksaS5leGl0KCJsaW5lRW5kaW5nIiksdik6dShiKX1mdW5jdGlvbiB2KGIpe3JldHVybiBkLnBhcnNlci5sYXp5W2Qubm93KCkubGluZV0/dShiKTpzKGIpfX1mdW5jdGlvbiBSSnQoaSxzLHUpe3JldHVybiBkO2Z1bmN0aW9uIGQocCl7cmV0dXJuIGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUocCksaS5leGl0KCJsaW5lRW5kaW5nIiksaS5hdHRlbXB0KFlRLHMsdSl9fWNvbnN0IGpKdD17bmFtZToiaHRtbFRleHQiLHRva2VuaXplOiRKdH07ZnVuY3Rpb24gJEp0KGkscyx1KXtjb25zdCBkPXRoaXM7bGV0IHAsdixiO3JldHVybiB5O2Z1bmN0aW9uIHkoa2Upe3JldHVybiBpLmVudGVyKCJodG1sVGV4dCIpLGkuZW50ZXIoImh0bWxUZXh0RGF0YSIpLGkuY29uc3VtZShrZSksVH1mdW5jdGlvbiBUKGtlKXtyZXR1cm4ga2U9PT0zMz8oaS5jb25zdW1lKGtlKSxfKTprZT09PTQ3PyhpLmNvbnN1bWUoa2UpLGFlKTprZT09PTYzPyhpLmNvbnN1bWUoa2UpLHBlKTpuNShrZSk/KGkuY29uc3VtZShrZSksZGUpOnUoa2UpfWZ1bmN0aW9uIF8oa2Upe3JldHVybiBrZT09PTQ1PyhpLmNvbnN1bWUoa2UpLEEpOmtlPT09OTE/KGkuY29uc3VtZShrZSksdj0wLGopOm41KGtlKT8oaS5jb25zdW1lKGtlKSxvZSk6dShrZSl9ZnVuY3Rpb24gQShrZSl7cmV0dXJuIGtlPT09NDU/KGkuY29uc3VtZShrZSksRik6dShrZSl9ZnVuY3Rpb24gUChrZSl7cmV0dXJuIGtlPT09bnVsbD91KGtlKTprZT09PTQ1PyhpLmNvbnN1bWUoa2UpLFIpOnNvKGtlKT8oYj1QLEllKGtlKSk6KGkuY29uc3VtZShrZSksUCl9ZnVuY3Rpb24gUihrZSl7cmV0dXJuIGtlPT09NDU/KGkuY29uc3VtZShrZSksRik6UChrZSl9ZnVuY3Rpb24gRihrZSl7cmV0dXJuIGtlPT09NjI/amUoa2UpOmtlPT09NDU/UihrZSk6UChrZSl9ZnVuY3Rpb24gaihrZSl7Y29uc3QgS2U9IkNEQVRBWyI7cmV0dXJuIGtlPT09S2UuY2hhckNvZGVBdCh2KyspPyhpLmNvbnN1bWUoa2UpLHY9PT1LZS5sZW5ndGg/SzpqKTp1KGtlKX1mdW5jdGlvbiBLKGtlKXtyZXR1cm4ga2U9PT1udWxsP3Uoa2UpOmtlPT09OTM/KGkuY29uc3VtZShrZSksZWUpOnNvKGtlKT8oYj1LLEllKGtlKSk6KGkuY29uc3VtZShrZSksSyl9ZnVuY3Rpb24gZWUoa2Upe3JldHVybiBrZT09PTkzPyhpLmNvbnN1bWUoa2UpLGllKTpLKGtlKX1mdW5jdGlvbiBpZShrZSl7cmV0dXJuIGtlPT09NjI/amUoa2UpOmtlPT09OTM/KGkuY29uc3VtZShrZSksaWUpOksoa2UpfWZ1bmN0aW9uIG9lKGtlKXtyZXR1cm4ga2U9PT1udWxsfHxrZT09PTYyP2plKGtlKTpzbyhrZSk/KGI9b2UsSWUoa2UpKTooaS5jb25zdW1lKGtlKSxvZSl9ZnVuY3Rpb24gcGUoa2Upe3JldHVybiBrZT09PW51bGw/dShrZSk6a2U9PT02Mz8oaS5jb25zdW1lKGtlKSxiZSk6c28oa2UpPyhiPXBlLEllKGtlKSk6KGkuY29uc3VtZShrZSkscGUpfWZ1bmN0aW9uIGJlKGtlKXtyZXR1cm4ga2U9PT02Mj9qZShrZSk6cGUoa2UpfWZ1bmN0aW9uIGFlKGtlKXtyZXR1cm4gbjUoa2UpPyhpLmNvbnN1bWUoa2UpLG5lKTp1KGtlKX1mdW5jdGlvbiBuZShrZSl7cmV0dXJuIGtlPT09NDV8fEgzKGtlKT8oaS5jb25zdW1lKGtlKSxuZSk6c2Uoa2UpfWZ1bmN0aW9uIHNlKGtlKXtyZXR1cm4gc28oa2UpPyhiPXNlLEllKGtlKSk6SXUoa2UpPyhpLmNvbnN1bWUoa2UpLHNlKTpqZShrZSl9ZnVuY3Rpb24gZGUoa2Upe3JldHVybiBrZT09PTQ1fHxIMyhrZSk/KGkuY29uc3VtZShrZSksZGUpOmtlPT09NDd8fGtlPT09NjJ8fHoyKGtlKT9YKGtlKTp1KGtlKX1mdW5jdGlvbiBYKGtlKXtyZXR1cm4ga2U9PT00Nz8oaS5jb25zdW1lKGtlKSxqZSk6a2U9PT01OHx8a2U9PT05NXx8bjUoa2UpPyhpLmNvbnN1bWUoa2UpLGdlKTpzbyhrZSk/KGI9WCxJZShrZSkpOkl1KGtlKT8oaS5jb25zdW1lKGtlKSxYKTpqZShrZSl9ZnVuY3Rpb24gZ2Uoa2Upe3JldHVybiBrZT09PTQ1fHxrZT09PTQ2fHxrZT09PTU4fHxrZT09PTk1fHxIMyhrZSk/KGkuY29uc3VtZShrZSksZ2UpOlcoa2UpfWZ1bmN0aW9uIFcoa2Upe3JldHVybiBrZT09PTYxPyhpLmNvbnN1bWUoa2UpLHhlKTpzbyhrZSk/KGI9VyxJZShrZSkpOkl1KGtlKT8oaS5jb25zdW1lKGtlKSxXKTpYKGtlKX1mdW5jdGlvbiB4ZShrZSl7cmV0dXJuIGtlPT09bnVsbHx8a2U9PT02MHx8a2U9PT02MXx8a2U9PT02Mnx8a2U9PT05Nj91KGtlKTprZT09PTM0fHxrZT09PTM5PyhpLmNvbnN1bWUoa2UpLHA9a2UsVSk6c28oa2UpPyhiPXhlLEllKGtlKSk6SXUoa2UpPyhpLmNvbnN1bWUoa2UpLHhlKTooaS5jb25zdW1lKGtlKSxGZSl9ZnVuY3Rpb24gVShrZSl7cmV0dXJuIGtlPT09cD8oaS5jb25zdW1lKGtlKSxwPXZvaWQgMCxQZSk6a2U9PT1udWxsP3Uoa2UpOnNvKGtlKT8oYj1VLEllKGtlKSk6KGkuY29uc3VtZShrZSksVSl9ZnVuY3Rpb24gRmUoa2Upe3JldHVybiBrZT09PW51bGx8fGtlPT09MzR8fGtlPT09Mzl8fGtlPT09NjB8fGtlPT09NjF8fGtlPT09OTY/dShrZSk6a2U9PT00N3x8a2U9PT02Mnx8ejIoa2UpP1goa2UpOihpLmNvbnN1bWUoa2UpLEZlKX1mdW5jdGlvbiBQZShrZSl7cmV0dXJuIGtlPT09NDd8fGtlPT09NjJ8fHoyKGtlKT9YKGtlKTp1KGtlKX1mdW5jdGlvbiBqZShrZSl7cmV0dXJuIGtlPT09NjI/KGkuY29uc3VtZShrZSksaS5leGl0KCJodG1sVGV4dERhdGEiKSxpLmV4aXQoImh0bWxUZXh0Iikscyk6dShrZSl9ZnVuY3Rpb24gSWUoa2Upe3JldHVybiBpLmV4aXQoImh0bWxUZXh0RGF0YSIpLGkuZW50ZXIoImxpbmVFbmRpbmciKSxpLmNvbnN1bWUoa2UpLGkuZXhpdCgibGluZUVuZGluZyIpLFNlfWZ1bmN0aW9uIFNlKGtlKXtyZXR1cm4gSXUoa2UpP0tsKGksQ2UsImxpbmVQcmVmaXgiLGQucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKT92b2lkIDA6NCkoa2UpOkNlKGtlKX1mdW5jdGlvbiBDZShrZSl7cmV0dXJuIGkuZW50ZXIoImh0bWxUZXh0RGF0YSIpLGIoa2UpfX1jb25zdCBPbWU9e25hbWU6ImxhYmVsRW5kIix0b2tlbml6ZTpHSnQscmVzb2x2ZVRvOlVKdCxyZXNvbHZlQWxsOlZKdH0sekp0PXt0b2tlbml6ZTpLSnR9LHFKdD17dG9rZW5pemU6V0p0fSxISnQ9e3Rva2VuaXplOllKdH07ZnVuY3Rpb24gVkp0KGkpe2xldCBzPS0xO2Zvcig7KytzPGkubGVuZ3RoOyl7Y29uc3QgdT1pW3NdWzFdOyh1LnR5cGU9PT0ibGFiZWxJbWFnZSJ8fHUudHlwZT09PSJsYWJlbExpbmsifHx1LnR5cGU9PT0ibGFiZWxFbmQiKSYmKGkuc3BsaWNlKHMrMSx1LnR5cGU9PT0ibGFiZWxJbWFnZSI/NDoyKSx1LnR5cGU9ImRhdGEiLHMrKyl9cmV0dXJuIGl9ZnVuY3Rpb24gVUp0KGkscyl7bGV0IHU9aS5sZW5ndGgsZD0wLHAsdixiLHk7Zm9yKDt1LS07KWlmKHA9aVt1XVsxXSx2KXtpZihwLnR5cGU9PT0ibGluayJ8fHAudHlwZT09PSJsYWJlbExpbmsiJiZwLl9pbmFjdGl2ZSlicmVhaztpW3VdWzBdPT09ImVudGVyIiYmcC50eXBlPT09ImxhYmVsTGluayImJihwLl9pbmFjdGl2ZT0hMCl9ZWxzZSBpZihiKXtpZihpW3VdWzBdPT09ImVudGVyIiYmKHAudHlwZT09PSJsYWJlbEltYWdlInx8cC50eXBlPT09ImxhYmVsTGluayIpJiYhcC5fYmFsYW5jZWQmJih2PXUscC50eXBlIT09ImxhYmVsTGluayIpKXtkPTI7YnJlYWt9fWVsc2UgcC50eXBlPT09ImxhYmVsRW5kIiYmKGI9dSk7Y29uc3QgVD17dHlwZTppW3ZdWzFdLnR5cGU9PT0ibGFiZWxMaW5rIj8ibGluayI6ImltYWdlIixzdGFydDpPYmplY3QuYXNzaWduKHt9LGlbdl1bMV0uc3RhcnQpLGVuZDpPYmplY3QuYXNzaWduKHt9LGlbaS5sZW5ndGgtMV1bMV0uZW5kKX0sXz17dHlwZToibGFiZWwiLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30saVt2XVsxXS5zdGFydCksZW5kOk9iamVjdC5hc3NpZ24oe30saVtiXVsxXS5lbmQpfSxBPXt0eXBlOiJsYWJlbFRleHQiLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30saVt2K2QrMl1bMV0uZW5kKSxlbmQ6T2JqZWN0LmFzc2lnbih7fSxpW2ItMl1bMV0uc3RhcnQpfTtyZXR1cm4geT1bWyJlbnRlciIsVCxzXSxbImVudGVyIixfLHNdXSx5PXp2KHksaS5zbGljZSh2KzEsditkKzMpKSx5PXp2KHksW1siZW50ZXIiLEEsc11dKSx5PXp2KHksTG1lKHMucGFyc2VyLmNvbnN0cnVjdHMuaW5zaWRlU3Bhbi5udWxsLGkuc2xpY2UoditkKzQsYi0zKSxzKSkseT16dih5LFtbImV4aXQiLEEsc10saVtiLTJdLGlbYi0xXSxbImV4aXQiLF8sc11dKSx5PXp2KHksaS5zbGljZShiKzEpKSx5PXp2KHksW1siZXhpdCIsVCxzXV0pLHQ1KGksdixpLmxlbmd0aCx5KSxpfWZ1bmN0aW9uIEdKdChpLHMsdSl7Y29uc3QgZD10aGlzO2xldCBwPWQuZXZlbnRzLmxlbmd0aCx2LGI7Zm9yKDtwLS07KWlmKChkLmV2ZW50c1twXVsxXS50eXBlPT09ImxhYmVsSW1hZ2UifHxkLmV2ZW50c1twXVsxXS50eXBlPT09ImxhYmVsTGluayIpJiYhZC5ldmVudHNbcF1bMV0uX2JhbGFuY2VkKXt2PWQuZXZlbnRzW3BdWzFdO2JyZWFrfXJldHVybiB5O2Z1bmN0aW9uIHkoUil7cmV0dXJuIHY/di5faW5hY3RpdmU/UChSKTooYj1kLnBhcnNlci5kZWZpbmVkLmluY2x1ZGVzKEhEKGQuc2xpY2VTZXJpYWxpemUoe3N0YXJ0OnYuZW5kLGVuZDpkLm5vdygpfSkpKSxpLmVudGVyKCJsYWJlbEVuZCIpLGkuZW50ZXIoImxhYmVsTWFya2VyIiksaS5jb25zdW1lKFIpLGkuZXhpdCgibGFiZWxNYXJrZXIiKSxpLmV4aXQoImxhYmVsRW5kIiksVCk6dShSKX1mdW5jdGlvbiBUKFIpe3JldHVybiBSPT09NDA/aS5hdHRlbXB0KHpKdCxBLGI/QTpQKShSKTpSPT09OTE/aS5hdHRlbXB0KHFKdCxBLGI/XzpQKShSKTpiP0EoUik6UChSKX1mdW5jdGlvbiBfKFIpe3JldHVybiBpLmF0dGVtcHQoSEp0LEEsUCkoUil9ZnVuY3Rpb24gQShSKXtyZXR1cm4gcyhSKX1mdW5jdGlvbiBQKFIpe3JldHVybiB2Ll9iYWxhbmNlZD0hMCx1KFIpfX1mdW5jdGlvbiBLSnQoaSxzLHUpe3JldHVybiBkO2Z1bmN0aW9uIGQoUCl7cmV0dXJuIGkuZW50ZXIoInJlc291cmNlIiksaS5lbnRlcigicmVzb3VyY2VNYXJrZXIiKSxpLmNvbnN1bWUoUCksaS5leGl0KCJyZXNvdXJjZU1hcmtlciIpLHB9ZnVuY3Rpb24gcChQKXtyZXR1cm4gejIoUCk/TFIoaSx2KShQKTp2KFApfWZ1bmN0aW9uIHYoUCl7cmV0dXJuIFA9PT00MT9BKFApOlpWZShpLGIseSwicmVzb3VyY2VEZXN0aW5hdGlvbiIsInJlc291cmNlRGVzdGluYXRpb25MaXRlcmFsIiwicmVzb3VyY2VEZXN0aW5hdGlvbkxpdGVyYWxNYXJrZXIiLCJyZXNvdXJjZURlc3RpbmF0aW9uUmF3IiwicmVzb3VyY2VEZXN0aW5hdGlvblN0cmluZyIsMzIpKFApfWZ1bmN0aW9uIGIoUCl7cmV0dXJuIHoyKFApP0xSKGksVCkoUCk6QShQKX1mdW5jdGlvbiB5KFApe3JldHVybiB1KFApfWZ1bmN0aW9uIFQoUCl7cmV0dXJuIFA9PT0zNHx8UD09PTM5fHxQPT09NDA/dFVlKGksXyx1LCJyZXNvdXJjZVRpdGxlIiwicmVzb3VyY2VUaXRsZU1hcmtlciIsInJlc291cmNlVGl0bGVTdHJpbmciKShQKTpBKFApfWZ1bmN0aW9uIF8oUCl7cmV0dXJuIHoyKFApP0xSKGksQSkoUCk6QShQKX1mdW5jdGlvbiBBKFApe3JldHVybiBQPT09NDE/KGkuZW50ZXIoInJlc291cmNlTWFya2VyIiksaS5jb25zdW1lKFApLGkuZXhpdCgicmVzb3VyY2VNYXJrZXIiKSxpLmV4aXQoInJlc291cmNlIikscyk6dShQKX19ZnVuY3Rpb24gV0p0KGkscyx1KXtjb25zdCBkPXRoaXM7cmV0dXJuIHA7ZnVuY3Rpb24gcCh5KXtyZXR1cm4gZVVlLmNhbGwoZCxpLHYsYiwicmVmZXJlbmNlIiwicmVmZXJlbmNlTWFya2VyIiwicmVmZXJlbmNlU3RyaW5nIikoeSl9ZnVuY3Rpb24gdih5KXtyZXR1cm4gZC5wYXJzZXIuZGVmaW5lZC5pbmNsdWRlcyhIRChkLnNsaWNlU2VyaWFsaXplKGQuZXZlbnRzW2QuZXZlbnRzLmxlbmd0aC0xXVsxXSkuc2xpY2UoMSwtMSkpKT9zKHkpOnUoeSl9ZnVuY3Rpb24gYih5KXtyZXR1cm4gdSh5KX19ZnVuY3Rpb24gWUp0KGkscyx1KXtyZXR1cm4gZDtmdW5jdGlvbiBkKHYpe3JldHVybiBpLmVudGVyKCJyZWZlcmVuY2UiKSxpLmVudGVyKCJyZWZlcmVuY2VNYXJrZXIiKSxpLmNvbnN1bWUodiksaS5leGl0KCJyZWZlcmVuY2VNYXJrZXIiKSxwfWZ1bmN0aW9uIHAodil7cmV0dXJuIHY9PT05Mz8oaS5lbnRlcigicmVmZXJlbmNlTWFya2VyIiksaS5jb25zdW1lKHYpLGkuZXhpdCgicmVmZXJlbmNlTWFya2VyIiksaS5leGl0KCJyZWZlcmVuY2UiKSxzKTp1KHYpfX1jb25zdCBYSnQ9e25hbWU6ImxhYmVsU3RhcnRJbWFnZSIsdG9rZW5pemU6UUp0LHJlc29sdmVBbGw6T21lLnJlc29sdmVBbGx9O2Z1bmN0aW9uIFFKdChpLHMsdSl7Y29uc3QgZD10aGlzO3JldHVybiBwO2Z1bmN0aW9uIHAoeSl7cmV0dXJuIGkuZW50ZXIoImxhYmVsSW1hZ2UiKSxpLmVudGVyKCJsYWJlbEltYWdlTWFya2VyIiksaS5jb25zdW1lKHkpLGkuZXhpdCgibGFiZWxJbWFnZU1hcmtlciIpLHZ9ZnVuY3Rpb24gdih5KXtyZXR1cm4geT09PTkxPyhpLmVudGVyKCJsYWJlbE1hcmtlciIpLGkuY29uc3VtZSh5KSxpLmV4aXQoImxhYmVsTWFya2VyIiksaS5leGl0KCJsYWJlbEltYWdlIiksYik6dSh5KX1mdW5jdGlvbiBiKHkpe3JldHVybiB5PT09OTQmJiJfaGlkZGVuRm9vdG5vdGVTdXBwb3J0ImluIGQucGFyc2VyLmNvbnN0cnVjdHM/dSh5KTpzKHkpfX1jb25zdCBKSnQ9e25hbWU6ImxhYmVsU3RhcnRMaW5rIix0b2tlbml6ZTpaSnQscmVzb2x2ZUFsbDpPbWUucmVzb2x2ZUFsbH07ZnVuY3Rpb24gWkp0KGkscyx1KXtjb25zdCBkPXRoaXM7cmV0dXJuIHA7ZnVuY3Rpb24gcChiKXtyZXR1cm4gaS5lbnRlcigibGFiZWxMaW5rIiksaS5lbnRlcigibGFiZWxNYXJrZXIiKSxpLmNvbnN1bWUoYiksaS5leGl0KCJsYWJlbE1hcmtlciIpLGkuZXhpdCgibGFiZWxMaW5rIiksdn1mdW5jdGlvbiB2KGIpe3JldHVybiBiPT09OTQmJiJfaGlkZGVuRm9vdG5vdGVTdXBwb3J0ImluIGQucGFyc2VyLmNvbnN0cnVjdHM/dShiKTpzKGIpfX1jb25zdCBObWU9e25hbWU6ImxpbmVFbmRpbmciLHRva2VuaXplOmVadH07ZnVuY3Rpb24gZVp0KGkscyl7cmV0dXJuIHU7ZnVuY3Rpb24gdShkKXtyZXR1cm4gaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZShkKSxpLmV4aXQoImxpbmVFbmRpbmciKSxLbChpLHMsImxpbmVQcmVmaXgiKX19Y29uc3QgWFE9e25hbWU6InRoZW1hdGljQnJlYWsiLHRva2VuaXplOnRadH07ZnVuY3Rpb24gdFp0KGkscyx1KXtsZXQgZD0wLHA7cmV0dXJuIHY7ZnVuY3Rpb24gdihfKXtyZXR1cm4gaS5lbnRlcigidGhlbWF0aWNCcmVhayIpLGIoXyl9ZnVuY3Rpb24gYihfKXtyZXR1cm4gcD1fLHkoXyl9ZnVuY3Rpb24geShfKXtyZXR1cm4gXz09PXA/KGkuZW50ZXIoInRoZW1hdGljQnJlYWtTZXF1ZW5jZSIpLFQoXykpOmQ+PTMmJihfPT09bnVsbHx8c28oXykpPyhpLmV4aXQoInRoZW1hdGljQnJlYWsiKSxzKF8pKTp1KF8pfWZ1bmN0aW9uIFQoXyl7cmV0dXJuIF89PT1wPyhpLmNvbnN1bWUoXyksZCsrLFQpOihpLmV4aXQoInRoZW1hdGljQnJlYWtTZXF1ZW5jZSIpLEl1KF8pP0tsKGkseSwid2hpdGVzcGFjZSIpKF8pOnkoXykpfX1jb25zdCBxMj17bmFtZToibGlzdCIsdG9rZW5pemU6aVp0LGNvbnRpbnVhdGlvbjp7dG9rZW5pemU6c1p0fSxleGl0Om9adH0sblp0PXt0b2tlbml6ZTpjWnQscGFydGlhbDohMH0sclp0PXt0b2tlbml6ZTphWnQscGFydGlhbDohMH07ZnVuY3Rpb24gaVp0KGkscyx1KXtjb25zdCBkPXRoaXMscD1kLmV2ZW50c1tkLmV2ZW50cy5sZW5ndGgtMV07bGV0IHY9cCYmcFsxXS50eXBlPT09ImxpbmVQcmVmaXgiP3BbMl0uc2xpY2VTZXJpYWxpemUocFsxXSwhMCkubGVuZ3RoOjAsYj0wO3JldHVybiB5O2Z1bmN0aW9uIHkoRil7Y29uc3Qgaj1kLmNvbnRhaW5lclN0YXRlLnR5cGV8fChGPT09NDJ8fEY9PT00M3x8Rj09PTQ1PyJsaXN0VW5vcmRlcmVkIjoibGlzdE9yZGVyZWQiKTtpZihqPT09Imxpc3RVbm9yZGVyZWQiPyFkLmNvbnRhaW5lclN0YXRlLm1hcmtlcnx8Rj09PWQuY29udGFpbmVyU3RhdGUubWFya2VyOkFtZShGKSl7aWYoZC5jb250YWluZXJTdGF0ZS50eXBlfHwoZC5jb250YWluZXJTdGF0ZS50eXBlPWosaS5lbnRlcihqLHtfY29udGFpbmVyOiEwfSkpLGo9PT0ibGlzdFVub3JkZXJlZCIpcmV0dXJuIGkuZW50ZXIoImxpc3RJdGVtUHJlZml4IiksRj09PTQyfHxGPT09NDU/aS5jaGVjayhYUSx1LF8pKEYpOl8oRik7aWYoIWQuaW50ZXJydXB0fHxGPT09NDkpcmV0dXJuIGkuZW50ZXIoImxpc3RJdGVtUHJlZml4IiksaS5lbnRlcigibGlzdEl0ZW1WYWx1ZSIpLFQoRil9cmV0dXJuIHUoRil9ZnVuY3Rpb24gVChGKXtyZXR1cm4gQW1lKEYpJiYrK2I8MTA/KGkuY29uc3VtZShGKSxUKTooIWQuaW50ZXJydXB0fHxiPDIpJiYoZC5jb250YWluZXJTdGF0ZS5tYXJrZXI/Rj09PWQuY29udGFpbmVyU3RhdGUubWFya2VyOkY9PT00MXx8Rj09PTQ2KT8oaS5leGl0KCJsaXN0SXRlbVZhbHVlIiksXyhGKSk6dShGKX1mdW5jdGlvbiBfKEYpe3JldHVybiBpLmVudGVyKCJsaXN0SXRlbU1hcmtlciIpLGkuY29uc3VtZShGKSxpLmV4aXQoImxpc3RJdGVtTWFya2VyIiksZC5jb250YWluZXJTdGF0ZS5tYXJrZXI9ZC5jb250YWluZXJTdGF0ZS5tYXJrZXJ8fEYsaS5jaGVjayhZUSxkLmludGVycnVwdD91OkEsaS5hdHRlbXB0KG5adCxSLFApKX1mdW5jdGlvbiBBKEYpe3JldHVybiBkLmNvbnRhaW5lclN0YXRlLmluaXRpYWxCbGFua0xpbmU9ITAsdisrLFIoRil9ZnVuY3Rpb24gUChGKXtyZXR1cm4gSXUoRik/KGkuZW50ZXIoImxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSIpLGkuY29uc3VtZShGKSxpLmV4aXQoImxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSIpLFIpOnUoRil9ZnVuY3Rpb24gUihGKXtyZXR1cm4gZC5jb250YWluZXJTdGF0ZS5zaXplPXYrZC5zbGljZVNlcmlhbGl6ZShpLmV4aXQoImxpc3RJdGVtUHJlZml4IiksITApLmxlbmd0aCxzKEYpfX1mdW5jdGlvbiBzWnQoaSxzLHUpe2NvbnN0IGQ9dGhpcztyZXR1cm4gZC5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93PXZvaWQgMCxpLmNoZWNrKFlRLHAsdik7ZnVuY3Rpb24gcCh5KXtyZXR1cm4gZC5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcz1kLmNvbnRhaW5lclN0YXRlLmZ1cnRoZXJCbGFua0xpbmVzfHxkLmNvbnRhaW5lclN0YXRlLmluaXRpYWxCbGFua0xpbmUsS2woaSxzLCJsaXN0SXRlbUluZGVudCIsZC5jb250YWluZXJTdGF0ZS5zaXplKzEpKHkpfWZ1bmN0aW9uIHYoeSl7cmV0dXJuIGQuY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXN8fCFJdSh5KT8oZC5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcz12b2lkIDAsZC5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lPXZvaWQgMCxiKHkpKTooZC5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcz12b2lkIDAsZC5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lPXZvaWQgMCxpLmF0dGVtcHQoclp0LHMsYikoeSkpfWZ1bmN0aW9uIGIoeSl7cmV0dXJuIGQuY29udGFpbmVyU3RhdGUuX2Nsb3NlRmxvdz0hMCxkLmludGVycnVwdD12b2lkIDAsS2woaSxpLmF0dGVtcHQocTIscyx1KSwibGluZVByZWZpeCIsZC5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpP3ZvaWQgMDo0KSh5KX19ZnVuY3Rpb24gYVp0KGkscyx1KXtjb25zdCBkPXRoaXM7cmV0dXJuIEtsKGkscCwibGlzdEl0ZW1JbmRlbnQiLGQuY29udGFpbmVyU3RhdGUuc2l6ZSsxKTtmdW5jdGlvbiBwKHYpe2NvbnN0IGI9ZC5ldmVudHNbZC5ldmVudHMubGVuZ3RoLTFdO3JldHVybiBiJiZiWzFdLnR5cGU9PT0ibGlzdEl0ZW1JbmRlbnQiJiZiWzJdLnNsaWNlU2VyaWFsaXplKGJbMV0sITApLmxlbmd0aD09PWQuY29udGFpbmVyU3RhdGUuc2l6ZT9zKHYpOnUodil9fWZ1bmN0aW9uIG9adChpKXtpLmV4aXQodGhpcy5jb250YWluZXJTdGF0ZS50eXBlKX1mdW5jdGlvbiBjWnQoaSxzLHUpe2NvbnN0IGQ9dGhpcztyZXR1cm4gS2woaSxwLCJsaXN0SXRlbVByZWZpeFdoaXRlc3BhY2UiLGQucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKT92b2lkIDA6NCsxKTtmdW5jdGlvbiBwKHYpe2NvbnN0IGI9ZC5ldmVudHNbZC5ldmVudHMubGVuZ3RoLTFdO3JldHVybiFJdSh2KSYmYiYmYlsxXS50eXBlPT09Imxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSI/cyh2KTp1KHYpfX1jb25zdCByVWU9e25hbWU6InNldGV4dFVuZGVybGluZSIsdG9rZW5pemU6bFp0LHJlc29sdmVUbzp1WnR9O2Z1bmN0aW9uIHVadChpLHMpe2xldCB1PWkubGVuZ3RoLGQscCx2O2Zvcig7dS0tOylpZihpW3VdWzBdPT09ImVudGVyIil7aWYoaVt1XVsxXS50eXBlPT09ImNvbnRlbnQiKXtkPXU7YnJlYWt9aVt1XVsxXS50eXBlPT09InBhcmFncmFwaCImJihwPXUpfWVsc2UgaVt1XVsxXS50eXBlPT09ImNvbnRlbnQiJiZpLnNwbGljZSh1LDEpLCF2JiZpW3VdWzFdLnR5cGU9PT0iZGVmaW5pdGlvbiImJih2PXUpO2NvbnN0IGI9e3R5cGU6InNldGV4dEhlYWRpbmciLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30saVtwXVsxXS5zdGFydCksZW5kOk9iamVjdC5hc3NpZ24oe30saVtpLmxlbmd0aC0xXVsxXS5lbmQpfTtyZXR1cm4gaVtwXVsxXS50eXBlPSJzZXRleHRIZWFkaW5nVGV4dCIsdj8oaS5zcGxpY2UocCwwLFsiZW50ZXIiLGIsc10pLGkuc3BsaWNlKHYrMSwwLFsiZXhpdCIsaVtkXVsxXSxzXSksaVtkXVsxXS5lbmQ9T2JqZWN0LmFzc2lnbih7fSxpW3ZdWzFdLmVuZCkpOmlbZF1bMV09YixpLnB1c2goWyJleGl0IixiLHNdKSxpfWZ1bmN0aW9uIGxadChpLHMsdSl7Y29uc3QgZD10aGlzO2xldCBwO3JldHVybiB2O2Z1bmN0aW9uIHYoXyl7bGV0IEE9ZC5ldmVudHMubGVuZ3RoLFA7Zm9yKDtBLS07KWlmKGQuZXZlbnRzW0FdWzFdLnR5cGUhPT0ibGluZUVuZGluZyImJmQuZXZlbnRzW0FdWzFdLnR5cGUhPT0ibGluZVByZWZpeCImJmQuZXZlbnRzW0FdWzFdLnR5cGUhPT0iY29udGVudCIpe1A9ZC5ldmVudHNbQV1bMV0udHlwZT09PSJwYXJhZ3JhcGgiO2JyZWFrfXJldHVybiFkLnBhcnNlci5sYXp5W2Qubm93KCkubGluZV0mJihkLmludGVycnVwdHx8UCk/KGkuZW50ZXIoInNldGV4dEhlYWRpbmdMaW5lIikscD1fLGIoXykpOnUoXyl9ZnVuY3Rpb24gYihfKXtyZXR1cm4gaS5lbnRlcigic2V0ZXh0SGVhZGluZ0xpbmVTZXF1ZW5jZSIpLHkoXyl9ZnVuY3Rpb24geShfKXtyZXR1cm4gXz09PXA/KGkuY29uc3VtZShfKSx5KTooaS5leGl0KCJzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlIiksSXUoXyk/S2woaSxULCJsaW5lU3VmZml4IikoXyk6VChfKSl9ZnVuY3Rpb24gVChfKXtyZXR1cm4gXz09PW51bGx8fHNvKF8pPyhpLmV4aXQoInNldGV4dEhlYWRpbmdMaW5lIikscyhfKSk6dShfKX19Y29uc3QgaFp0PXt0b2tlbml6ZTpmWnR9O2Z1bmN0aW9uIGZadChpKXtjb25zdCBzPXRoaXMsdT1pLmF0dGVtcHQoWVEsZCxpLmF0dGVtcHQodGhpcy5wYXJzZXIuY29uc3RydWN0cy5mbG93SW5pdGlhbCxwLEtsKGksaS5hdHRlbXB0KHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuZmxvdyxwLGkuYXR0ZW1wdChtSnQscCkpLCJsaW5lUHJlZml4IikpKTtyZXR1cm4gdTtmdW5jdGlvbiBkKHYpe2lmKHY9PT1udWxsKXtpLmNvbnN1bWUodik7cmV0dXJufXJldHVybiBpLmVudGVyKCJsaW5lRW5kaW5nQmxhbmsiKSxpLmNvbnN1bWUodiksaS5leGl0KCJsaW5lRW5kaW5nQmxhbmsiKSxzLmN1cnJlbnRDb25zdHJ1Y3Q9dm9pZCAwLHV9ZnVuY3Rpb24gcCh2KXtpZih2PT09bnVsbCl7aS5jb25zdW1lKHYpO3JldHVybn1yZXR1cm4gaS5lbnRlcigibGluZUVuZGluZyIpLGkuY29uc3VtZSh2KSxpLmV4aXQoImxpbmVFbmRpbmciKSxzLmN1cnJlbnRDb25zdHJ1Y3Q9dm9pZCAwLHV9fWNvbnN0IGRadD17cmVzb2x2ZUFsbDpzVWUoKX0sZ1p0PWlVZSgic3RyaW5nIikscFp0PWlVZSgidGV4dCIpO2Z1bmN0aW9uIGlVZShpKXtyZXR1cm57dG9rZW5pemU6cyxyZXNvbHZlQWxsOnNVZShpPT09InRleHQiP2JadDp2b2lkIDApfTtmdW5jdGlvbiBzKHUpe2NvbnN0IGQ9dGhpcyxwPXRoaXMucGFyc2VyLmNvbnN0cnVjdHNbaV0sdj11LmF0dGVtcHQocCxiLHkpO3JldHVybiBiO2Z1bmN0aW9uIGIoQSl7cmV0dXJuIF8oQSk/dihBKTp5KEEpfWZ1bmN0aW9uIHkoQSl7aWYoQT09PW51bGwpe3UuY29uc3VtZShBKTtyZXR1cm59cmV0dXJuIHUuZW50ZXIoImRhdGEiKSx1LmNvbnN1bWUoQSksVH1mdW5jdGlvbiBUKEEpe3JldHVybiBfKEEpPyh1LmV4aXQoImRhdGEiKSx2KEEpKToodS5jb25zdW1lKEEpLFQpfWZ1bmN0aW9uIF8oQSl7aWYoQT09PW51bGwpcmV0dXJuITA7Y29uc3QgUD1wW0FdO2xldCBSPS0xO2lmKFApZm9yKDsrK1I8UC5sZW5ndGg7KXtjb25zdCBGPVBbUl07aWYoIUYucHJldmlvdXN8fEYucHJldmlvdXMuY2FsbChkLGQucHJldmlvdXMpKXJldHVybiEwfXJldHVybiExfX19ZnVuY3Rpb24gc1VlKGkpe3JldHVybiBzO2Z1bmN0aW9uIHModSxkKXtsZXQgcD0tMSx2O2Zvcig7KytwPD11Lmxlbmd0aDspdj09PXZvaWQgMD91W3BdJiZ1W3BdWzFdLnR5cGU9PT0iZGF0YSImJih2PXAscCsrKTooIXVbcF18fHVbcF1bMV0udHlwZSE9PSJkYXRhIikmJihwIT09disyJiYodVt2XVsxXS5lbmQ9dVtwLTFdWzFdLmVuZCx1LnNwbGljZSh2KzIscC12LTIpLHA9disyKSx2PXZvaWQgMCk7cmV0dXJuIGk/aSh1LGQpOnV9fWZ1bmN0aW9uIGJadChpLHMpe2xldCB1PTA7Zm9yKDsrK3U8PWkubGVuZ3RoOylpZigodT09PWkubGVuZ3RofHxpW3VdWzFdLnR5cGU9PT0ibGluZUVuZGluZyIpJiZpW3UtMV1bMV0udHlwZT09PSJkYXRhIil7Y29uc3QgZD1pW3UtMV1bMV0scD1zLnNsaWNlU3RyZWFtKGQpO2xldCB2PXAubGVuZ3RoLGI9LTEseT0wLFQ7Zm9yKDt2LS07KXtjb25zdCBfPXBbdl07aWYodHlwZW9mIF89PSJzdHJpbmciKXtmb3IoYj1fLmxlbmd0aDtfLmNoYXJDb2RlQXQoYi0xKT09PTMyOyl5KyssYi0tO2lmKGIpYnJlYWs7Yj0tMX1lbHNlIGlmKF89PT0tMilUPSEwLHkrKztlbHNlIGlmKF8hPT0tMSl7disrO2JyZWFrfX1pZih5KXtjb25zdCBfPXt0eXBlOnU9PT1pLmxlbmd0aHx8VHx8eTwyPyJsaW5lU3VmZml4IjoiaGFyZEJyZWFrVHJhaWxpbmciLHN0YXJ0OntsaW5lOmQuZW5kLmxpbmUsY29sdW1uOmQuZW5kLmNvbHVtbi15LG9mZnNldDpkLmVuZC5vZmZzZXQteSxfaW5kZXg6ZC5zdGFydC5faW5kZXgrdixfYnVmZmVySW5kZXg6dj9iOmQuc3RhcnQuX2J1ZmZlckluZGV4K2J9LGVuZDpPYmplY3QuYXNzaWduKHt9LGQuZW5kKX07ZC5lbmQ9T2JqZWN0LmFzc2lnbih7fSxfLnN0YXJ0KSxkLnN0YXJ0Lm9mZnNldD09PWQuZW5kLm9mZnNldD9PYmplY3QuYXNzaWduKGQsXyk6KGkuc3BsaWNlKHUsMCxbImVudGVyIixfLHNdLFsiZXhpdCIsXyxzXSksdSs9Mil9dSsrfXJldHVybiBpfWZ1bmN0aW9uIG1adChpLHMsdSl7bGV0IGQ9T2JqZWN0LmFzc2lnbih1P09iamVjdC5hc3NpZ24oe30sdSk6e2xpbmU6MSxjb2x1bW46MSxvZmZzZXQ6MH0se19pbmRleDowLF9idWZmZXJJbmRleDotMX0pO2NvbnN0IHA9e30sdj1bXTtsZXQgYj1bXSx5PVtdO2NvbnN0IFQ9e2NvbnN1bWU6b2UsZW50ZXI6cGUsZXhpdDpiZSxhdHRlbXB0OnNlKGFlKSxjaGVjazpzZShuZSksaW50ZXJydXB0OnNlKG5lLHtpbnRlcnJ1cHQ6ITB9KX0sXz17cHJldmlvdXM6bnVsbCxjb2RlOm51bGwsY29udGFpbmVyU3RhdGU6e30sZXZlbnRzOltdLHBhcnNlcjppLHNsaWNlU3RyZWFtOkYsc2xpY2VTZXJpYWxpemU6Uixub3c6aixkZWZpbmVTa2lwOkssd3JpdGU6UH07bGV0IEE9cy50b2tlbml6ZS5jYWxsKF8sVCk7cmV0dXJuIHMucmVzb2x2ZUFsbCYmdi5wdXNoKHMpLF87ZnVuY3Rpb24gUChXKXtyZXR1cm4gYj16dihiLFcpLGVlKCksYltiLmxlbmd0aC0xXSE9PW51bGw/W106KGRlKHMsMCksXy5ldmVudHM9TG1lKHYsXy5ldmVudHMsXyksXy5ldmVudHMpfWZ1bmN0aW9uIFIoVyx4ZSl7cmV0dXJuIHdadChGKFcpLHhlKX1mdW5jdGlvbiBGKFcpe3JldHVybiB2WnQoYixXKX1mdW5jdGlvbiBqKCl7Y29uc3R7bGluZTpXLGNvbHVtbjp4ZSxvZmZzZXQ6VSxfaW5kZXg6RmUsX2J1ZmZlckluZGV4OlBlfT1kO3JldHVybntsaW5lOlcsY29sdW1uOnhlLG9mZnNldDpVLF9pbmRleDpGZSxfYnVmZmVySW5kZXg6UGV9fWZ1bmN0aW9uIEsoVyl7cFtXLmxpbmVdPVcuY29sdW1uLGdlKCl9ZnVuY3Rpb24gZWUoKXtsZXQgVztmb3IoO2QuX2luZGV4PGIubGVuZ3RoOyl7Y29uc3QgeGU9YltkLl9pbmRleF07aWYodHlwZW9mIHhlPT0ic3RyaW5nIilmb3IoVz1kLl9pbmRleCxkLl9idWZmZXJJbmRleDwwJiYoZC5fYnVmZmVySW5kZXg9MCk7ZC5faW5kZXg9PT1XJiZkLl9idWZmZXJJbmRleDx4ZS5sZW5ndGg7KWllKHhlLmNoYXJDb2RlQXQoZC5fYnVmZmVySW5kZXgpKTtlbHNlIGllKHhlKX19ZnVuY3Rpb24gaWUoVyl7QT1BKFcpfWZ1bmN0aW9uIG9lKFcpe3NvKFcpPyhkLmxpbmUrKyxkLmNvbHVtbj0xLGQub2Zmc2V0Kz1XPT09LTM/MjoxLGdlKCkpOlchPT0tMSYmKGQuY29sdW1uKyssZC5vZmZzZXQrKyksZC5fYnVmZmVySW5kZXg8MD9kLl9pbmRleCsrOihkLl9idWZmZXJJbmRleCsrLGQuX2J1ZmZlckluZGV4PT09YltkLl9pbmRleF0ubGVuZ3RoJiYoZC5fYnVmZmVySW5kZXg9LTEsZC5faW5kZXgrKykpLF8ucHJldmlvdXM9V31mdW5jdGlvbiBwZShXLHhlKXtjb25zdCBVPXhlfHx7fTtyZXR1cm4gVS50eXBlPVcsVS5zdGFydD1qKCksXy5ldmVudHMucHVzaChbImVudGVyIixVLF9dKSx5LnB1c2goVSksVX1mdW5jdGlvbiBiZShXKXtjb25zdCB4ZT15LnBvcCgpO3JldHVybiB4ZS5lbmQ9aigpLF8uZXZlbnRzLnB1c2goWyJleGl0Iix4ZSxfXSkseGV9ZnVuY3Rpb24gYWUoVyx4ZSl7ZGUoVyx4ZS5mcm9tKX1mdW5jdGlvbiBuZShXLHhlKXt4ZS5yZXN0b3JlKCl9ZnVuY3Rpb24gc2UoVyx4ZSl7cmV0dXJuIFU7ZnVuY3Rpb24gVShGZSxQZSxqZSl7bGV0IEllLFNlLENlLGtlO3JldHVybiBBcnJheS5pc0FycmF5KEZlKT9GdChGZSk6InRva2VuaXplImluIEZlP0Z0KFtGZV0pOktlKEZlKTtmdW5jdGlvbiBLZShFdCl7cmV0dXJuIEd0O2Z1bmN0aW9uIEd0KGxuKXtjb25zdCB4dD1sbiE9PW51bGwmJkV0W2xuXSxQdD1sbiE9PW51bGwmJkV0Lm51bGwsUWU9Wy4uLkFycmF5LmlzQXJyYXkoeHQpP3h0Onh0P1t4dF06W10sLi4uQXJyYXkuaXNBcnJheShQdCk/UHQ6UHQ/W1B0XTpbXV07cmV0dXJuIEZ0KFFlKShsbil9fWZ1bmN0aW9uIEZ0KEV0KXtyZXR1cm4gSWU9RXQsU2U9MCxFdC5sZW5ndGg9PT0wP2plOk5lKEV0W1NlXSl9ZnVuY3Rpb24gTmUoRXQpe3JldHVybiBHdDtmdW5jdGlvbiBHdChsbil7cmV0dXJuIGtlPVgoKSxDZT1FdCxFdC5wYXJ0aWFsfHwoXy5jdXJyZW50Q29uc3RydWN0PUV0KSxFdC5uYW1lJiZfLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcyhFdC5uYW1lKT9fdCgpOkV0LnRva2VuaXplLmNhbGwoeGU/T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKF8pLHhlKTpfLFQsZ24sX3QpKGxuKX19ZnVuY3Rpb24gZ24oRXQpe3JldHVybiBXKENlLGtlKSxQZX1mdW5jdGlvbiBfdChFdCl7cmV0dXJuIGtlLnJlc3RvcmUoKSwrK1NlPEllLmxlbmd0aD9OZShJZVtTZV0pOmplfX19ZnVuY3Rpb24gZGUoVyx4ZSl7Vy5yZXNvbHZlQWxsJiYhdi5pbmNsdWRlcyhXKSYmdi5wdXNoKFcpLFcucmVzb2x2ZSYmdDUoXy5ldmVudHMseGUsXy5ldmVudHMubGVuZ3RoLXhlLFcucmVzb2x2ZShfLmV2ZW50cy5zbGljZSh4ZSksXykpLFcucmVzb2x2ZVRvJiYoXy5ldmVudHM9Vy5yZXNvbHZlVG8oXy5ldmVudHMsXykpfWZ1bmN0aW9uIFgoKXtjb25zdCBXPWooKSx4ZT1fLnByZXZpb3VzLFU9Xy5jdXJyZW50Q29uc3RydWN0LEZlPV8uZXZlbnRzLmxlbmd0aCxQZT1BcnJheS5mcm9tKHkpO3JldHVybntyZXN0b3JlOmplLGZyb206RmV9O2Z1bmN0aW9uIGplKCl7ZD1XLF8ucHJldmlvdXM9eGUsXy5jdXJyZW50Q29uc3RydWN0PVUsXy5ldmVudHMubGVuZ3RoPUZlLHk9UGUsZ2UoKX19ZnVuY3Rpb24gZ2UoKXtkLmxpbmUgaW4gcCYmZC5jb2x1bW48MiYmKGQuY29sdW1uPXBbZC5saW5lXSxkLm9mZnNldCs9cFtkLmxpbmVdLTEpfX1mdW5jdGlvbiB2WnQoaSxzKXtjb25zdCB1PXMuc3RhcnQuX2luZGV4LGQ9cy5zdGFydC5fYnVmZmVySW5kZXgscD1zLmVuZC5faW5kZXgsdj1zLmVuZC5fYnVmZmVySW5kZXg7bGV0IGI7aWYodT09PXApYj1baVt1XS5zbGljZShkLHYpXTtlbHNle2lmKGI9aS5zbGljZSh1LHApLGQ+LTEpe2NvbnN0IHk9YlswXTt0eXBlb2YgeT09InN0cmluZyI/YlswXT15LnNsaWNlKGQpOmIuc2hpZnQoKX12PjAmJmIucHVzaChpW3BdLnNsaWNlKDAsdikpfXJldHVybiBifWZ1bmN0aW9uIHdadChpLHMpe2xldCB1PS0xO2NvbnN0IGQ9W107bGV0IHA7Zm9yKDsrK3U8aS5sZW5ndGg7KXtjb25zdCB2PWlbdV07bGV0IGI7aWYodHlwZW9mIHY9PSJzdHJpbmciKWI9djtlbHNlIHN3aXRjaCh2KXtjYXNlLTU6e2I9IlxyIjticmVha31jYXNlLTQ6e2I9YApgO2JyZWFrfWNhc2UtMzp7Yj1gXHIKYDticmVha31jYXNlLTI6e2I9cz8iICI6IgkiO2JyZWFrfWNhc2UtMTp7aWYoIXMmJnApY29udGludWU7Yj0iICI7YnJlYWt9ZGVmYXVsdDpiPVN0cmluZy5mcm9tQ2hhckNvZGUodil9cD12PT09LTIsZC5wdXNoKGIpfXJldHVybiBkLmpvaW4oIiIpfWNvbnN0IHladD1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYXR0ZW50aW9uTWFya2Vyczp7bnVsbDpbNDIsOTVdfSxjb250ZW50SW5pdGlhbDp7OTE6a0p0fSxkaXNhYmxlOntudWxsOltdfSxkb2N1bWVudDp7NDI6cTIsNDM6cTIsNDU6cTIsNDg6cTIsNDk6cTIsNTA6cTIsNTE6cTIsNTI6cTIsNTM6cTIsNTQ6cTIsNTU6cTIsNTY6cTIsNTc6cTIsNjI6R1ZlfSxmbG93OnszNTpBSnQsNDI6WFEsNDU6W3JVZSxYUV0sNjA6SUp0LDYxOnJVZSw5NTpYUSw5NjpRVmUsMTI2OlFWZX0sZmxvd0luaXRpYWw6e1stMl06SW1lLFstMV06SW1lLDMyOkltZX0saW5zaWRlU3Bhbjp7bnVsbDpbTW1lLGRadF19LHN0cmluZzp7Mzg6WVZlLDkyOktWZX0sdGV4dDp7Wy01XTpObWUsWy00XTpObWUsWy0zXTpObWUsMzM6WEp0LDM4OllWZSw0MjpNbWUsNjA6W1pRdCxqSnRdLDkxOkpKdCw5MjpbU0p0LEtWZV0sOTM6T21lLDk1Ok1tZSw5NjpmSnR9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO2Z1bmN0aW9uIHhadChpKXtjb25zdCB1PUZRdChbeVp0LC4uLihpfHx7fSkuZXh0ZW5zaW9uc3x8W11dKSxkPXtkZWZpbmVkOltdLGxhenk6e30sY29uc3RydWN0czp1LGNvbnRlbnQ6cChHUXQpLGRvY3VtZW50OnAoV1F0KSxmbG93OnAoaFp0KSxzdHJpbmc6cChnWnQpLHRleHQ6cChwWnQpfTtyZXR1cm4gZDtmdW5jdGlvbiBwKHYpe3JldHVybiBiO2Z1bmN0aW9uIGIoeSl7cmV0dXJuIG1adChkLHYseSl9fX1jb25zdCBhVWU9L1tcMFx0XG5ccl0vZztmdW5jdGlvbiBrWnQoKXtsZXQgaT0xLHM9IiIsdT0hMCxkO3JldHVybiBwO2Z1bmN0aW9uIHAodixiLHkpe2NvbnN0IFQ9W107bGV0IF8sQSxQLFIsRjtmb3Iodj1zK3YudG9TdHJpbmcoYiksUD0wLHM9IiIsdSYmKHYuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiZQKyssdT12b2lkIDApO1A8di5sZW5ndGg7KXtpZihhVWUubGFzdEluZGV4PVAsXz1hVWUuZXhlYyh2KSxSPV8mJl8uaW5kZXghPT12b2lkIDA/Xy5pbmRleDp2Lmxlbmd0aCxGPXYuY2hhckNvZGVBdChSKSwhXyl7cz12LnNsaWNlKFApO2JyZWFrfWlmKEY9PT0xMCYmUD09PVImJmQpVC5wdXNoKC0zKSxkPXZvaWQgMDtlbHNlIHN3aXRjaChkJiYoVC5wdXNoKC01KSxkPXZvaWQgMCksUDxSJiYoVC5wdXNoKHYuc2xpY2UoUCxSKSksaSs9Ui1QKSxGKXtjYXNlIDA6e1QucHVzaCg2NTUzMyksaSsrO2JyZWFrfWNhc2UgOTp7Zm9yKEE9TWF0aC5jZWlsKGkvNCkqNCxULnB1c2goLTIpO2krKzxBOylULnB1c2goLTEpO2JyZWFrfWNhc2UgMTA6e1QucHVzaCgtNCksaT0xO2JyZWFrfWRlZmF1bHQ6ZD0hMCxpPTF9UD1SKzF9cmV0dXJuIHkmJihkJiZULnB1c2goLTUpLHMmJlQucHVzaChzKSxULnB1c2gobnVsbCkpLFR9fWZ1bmN0aW9uIEVadChpKXtmb3IoOyFKVmUoaSk7KTtyZXR1cm4gaX1mdW5jdGlvbiBvVWUoaSxzKXtjb25zdCB1PU51bWJlci5wYXJzZUludChpLHMpO3JldHVybiB1PDl8fHU9PT0xMXx8dT4xMyYmdTwzMnx8dT4xMjYmJnU8MTYwfHx1PjU1Mjk1JiZ1PDU3MzQ0fHx1PjY0OTc1JiZ1PDY1MDA4fHwodSY2NTUzNSk9PT02NTUzNXx8KHUmNjU1MzUpPT09NjU1MzR8fHU+MTExNDExMT8i77+9IjpTdHJpbmcuZnJvbUNoYXJDb2RlKHUpfWNvbnN0IFRadD0vXFwoWyEtLzotQFstYHstfl0pfCYoIyg/OlxkezEsN318eFtcZGEtZl17MSw2fSl8W1xkYS16XXsxLDMxfSk7L2dpO2Z1bmN0aW9uIENadChpKXtyZXR1cm4gaS5yZXBsYWNlKFRadCxTWnQpfWZ1bmN0aW9uIFNadChpLHMsdSl7aWYocylyZXR1cm4gcztpZih1LmNoYXJDb2RlQXQoMCk9PT0zNSl7Y29uc3QgcD11LmNoYXJDb2RlQXQoMSksdj1wPT09MTIwfHxwPT09ODg7cmV0dXJuIG9VZSh1LnNsaWNlKHY/MjoxKSx2PzE2OjEwKX1yZXR1cm4gRG1lKHUpfHxpfWZ1bmN0aW9uIFFRKGkpe3JldHVybiFpfHx0eXBlb2YgaSE9Im9iamVjdCI/IiI6InBvc2l0aW9uImluIGl8fCJ0eXBlImluIGk/Y1VlKGkucG9zaXRpb24pOiJzdGFydCJpbiBpfHwiZW5kImluIGk/Y1VlKGkpOiJsaW5lImluIGl8fCJjb2x1bW4iaW4gaT9QbWUoaSk6IiJ9ZnVuY3Rpb24gUG1lKGkpe3JldHVybiB1VWUoaSYmaS5saW5lKSsiOiIrdVVlKGkmJmkuY29sdW1uKX1mdW5jdGlvbiBjVWUoaSl7cmV0dXJuIFBtZShpJiZpLnN0YXJ0KSsiLSIrUG1lKGkmJmkuZW5kKX1mdW5jdGlvbiB1VWUoaSl7cmV0dXJuIGkmJnR5cGVvZiBpPT0ibnVtYmVyIj9pOjF9Y29uc3QgbFVlPXt9Lmhhc093blByb3BlcnR5LGhVZT1mdW5jdGlvbihpLHMsdSl7cmV0dXJuIHR5cGVvZiBzIT0ic3RyaW5nIiYmKHU9cyxzPXZvaWQgMCksX1p0KHUpKEVadCh4WnQodSkuZG9jdW1lbnQoKS53cml0ZShrWnQoKShpLHMsITApKSkpfTtmdW5jdGlvbiBfWnQoaSl7Y29uc3Qgcz17dHJhbnNmb3JtczpbXSxjYW5Db250YWluRW9sczpbImVtcGhhc2lzIiwiZnJhZ21lbnQiLCJoZWFkaW5nIiwicGFyYWdyYXBoIiwic3Ryb25nIl0sZW50ZXI6e2F1dG9saW5rOnkoTWEpLGF1dG9saW5rUHJvdG9jb2w6VyxhdXRvbGlua0VtYWlsOlcsYXR4SGVhZGluZzp5KHpyKSxibG9ja1F1b3RlOnkoUWUpLGNoYXJhY3RlckVzY2FwZTpXLGNoYXJhY3RlclJlZmVyZW5jZTpXLGNvZGVGZW5jZWQ6eShEdCksY29kZUZlbmNlZEZlbmNlSW5mbzpULGNvZGVGZW5jZWRGZW5jZU1ldGE6VCxjb2RlSW5kZW50ZWQ6eShEdCxUKSxjb2RlVGV4dDp5KGt0LFQpLGNvZGVUZXh0RGF0YTpXLGRhdGE6Vyxjb2RlRmxvd1ZhbHVlOlcsZGVmaW5pdGlvbjp5KE9uKSxkZWZpbml0aW9uRGVzdGluYXRpb25TdHJpbmc6VCxkZWZpbml0aW9uTGFiZWxTdHJpbmc6VCxkZWZpbml0aW9uVGl0bGVTdHJpbmc6VCxlbXBoYXNpczp5KGh0KSxoYXJkQnJlYWtFc2NhcGU6eSh5dCksaGFyZEJyZWFrVHJhaWxpbmc6eSh5dCksaHRtbEZsb3c6eShqaSxUKSxodG1sRmxvd0RhdGE6VyxodG1sVGV4dDp5KGppLFQpLGh0bWxUZXh0RGF0YTpXLGltYWdlOnkoeGkpLGxhYmVsOlQsbGluazp5KE1hKSxsaXN0SXRlbTp5KGFvKSxsaXN0SXRlbVZhbHVlOmosbGlzdE9yZGVyZWQ6eSh6cyxGKSxsaXN0VW5vcmRlcmVkOnkoenMpLHBhcmFncmFwaDp5KFRyKSxyZWZlcmVuY2U6X3QscmVmZXJlbmNlU3RyaW5nOlQscmVzb3VyY2VEZXN0aW5hdGlvblN0cmluZzpULHJlc291cmNlVGl0bGVTdHJpbmc6VCxzZXRleHRIZWFkaW5nOnkoenIpLHN0cm9uZzp5KEZuKSx0aGVtYXRpY0JyZWFrOnkoVW4pfSxleGl0OnthdHhIZWFkaW5nOkEoKSxhdHhIZWFkaW5nU2VxdWVuY2U6c2UsYXV0b2xpbms6QSgpLGF1dG9saW5rRW1haWw6UHQsYXV0b2xpbmtQcm90b2NvbDp4dCxibG9ja1F1b3RlOkEoKSxjaGFyYWN0ZXJFc2NhcGVWYWx1ZTp4ZSxjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJIZXhhZGVjaW1hbDpHdCxjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljOkd0LGNoYXJhY3RlclJlZmVyZW5jZVZhbHVlOmxuLGNvZGVGZW5jZWQ6QShvZSksY29kZUZlbmNlZEZlbmNlOmllLGNvZGVGZW5jZWRGZW5jZUluZm86Syxjb2RlRmVuY2VkRmVuY2VNZXRhOmVlLGNvZGVGbG93VmFsdWU6eGUsY29kZUluZGVudGVkOkEocGUpLGNvZGVUZXh0OkEoSWUpLGNvZGVUZXh0RGF0YTp4ZSxkYXRhOnhlLGRlZmluaXRpb246QSgpLGRlZmluaXRpb25EZXN0aW5hdGlvblN0cmluZzpuZSxkZWZpbml0aW9uTGFiZWxTdHJpbmc6YmUsZGVmaW5pdGlvblRpdGxlU3RyaW5nOmFlLGVtcGhhc2lzOkEoKSxoYXJkQnJlYWtFc2NhcGU6QShGZSksaGFyZEJyZWFrVHJhaWxpbmc6QShGZSksaHRtbEZsb3c6QShQZSksaHRtbEZsb3dEYXRhOnhlLGh0bWxUZXh0OkEoamUpLGh0bWxUZXh0RGF0YTp4ZSxpbWFnZTpBKENlKSxsYWJlbDpLZSxsYWJlbFRleHQ6a2UsbGluZUVuZGluZzpVLGxpbms6QShTZSksbGlzdEl0ZW06QSgpLGxpc3RPcmRlcmVkOkEoKSxsaXN0VW5vcmRlcmVkOkEoKSxwYXJhZ3JhcGg6QSgpLHJlZmVyZW5jZVN0cmluZzpFdCxyZXNvdXJjZURlc3RpbmF0aW9uU3RyaW5nOkZ0LHJlc291cmNlVGl0bGVTdHJpbmc6TmUscmVzb3VyY2U6Z24sc2V0ZXh0SGVhZGluZzpBKGdlKSxzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlOlgsc2V0ZXh0SGVhZGluZ1RleHQ6ZGUsc3Ryb25nOkEoKSx0aGVtYXRpY0JyZWFrOkEoKX19O2ZVZShzLChpfHx7fSkubWRhc3RFeHRlbnNpb25zfHxbXSk7Y29uc3QgdT17fTtyZXR1cm4gZDtmdW5jdGlvbiBkKEF0KXtsZXQgd3Q9e3R5cGU6InJvb3QiLGNoaWxkcmVuOltdfTtjb25zdCBvbj17c3RhY2s6W3d0XSx0b2tlblN0YWNrOltdLGNvbmZpZzpzLGVudGVyOl8sZXhpdDpQLGJ1ZmZlcjpULHJlc3VtZTpSLHNldERhdGE6dixnZXREYXRhOmJ9LGZuPVtdO2xldCBBbj0tMTtmb3IoOysrQW48QXQubGVuZ3RoOylpZihBdFtBbl1bMV0udHlwZT09PSJsaXN0T3JkZXJlZCJ8fEF0W0FuXVsxXS50eXBlPT09Imxpc3RVbm9yZGVyZWQiKWlmKEF0W0FuXVswXT09PSJlbnRlciIpZm4ucHVzaChBbik7ZWxzZXtjb25zdCBvbz1mbi5wb3AoKTtBbj1wKEF0LG9vLEFuKX1mb3IoQW49LTE7KytBbjxBdC5sZW5ndGg7KXtjb25zdCBvbz1zW0F0W0FuXVswXV07bFVlLmNhbGwob28sQXRbQW5dWzFdLnR5cGUpJiZvb1tBdFtBbl1bMV0udHlwZV0uY2FsbChPYmplY3QuYXNzaWduKHtzbGljZVNlcmlhbGl6ZTpBdFtBbl1bMl0uc2xpY2VTZXJpYWxpemV9LG9uKSxBdFtBbl1bMV0pfWlmKG9uLnRva2VuU3RhY2subGVuZ3RoPjApe2NvbnN0IG9vPW9uLnRva2VuU3RhY2tbb24udG9rZW5TdGFjay5sZW5ndGgtMV07KG9vWzFdfHxkVWUpLmNhbGwob24sdm9pZCAwLG9vWzBdKX1mb3Iod3QucG9zaXRpb249e3N0YXJ0Ok45KEF0Lmxlbmd0aD4wP0F0WzBdWzFdLnN0YXJ0OntsaW5lOjEsY29sdW1uOjEsb2Zmc2V0OjB9KSxlbmQ6TjkoQXQubGVuZ3RoPjA/QXRbQXQubGVuZ3RoLTJdWzFdLmVuZDp7bGluZToxLGNvbHVtbjoxLG9mZnNldDowfSl9LEFuPS0xOysrQW48cy50cmFuc2Zvcm1zLmxlbmd0aDspd3Q9cy50cmFuc2Zvcm1zW0FuXSh3dCl8fHd0O3JldHVybiB3dH1mdW5jdGlvbiBwKEF0LHd0LG9uKXtsZXQgZm49d3QtMSxBbj0tMSxvbz0hMSxqbywkbyxQYSx3bztmb3IoOysrZm48PW9uOyl7Y29uc3QgX3M9QXRbZm5dO2lmKF9zWzFdLnR5cGU9PT0ibGlzdFVub3JkZXJlZCJ8fF9zWzFdLnR5cGU9PT0ibGlzdE9yZGVyZWQifHxfc1sxXS50eXBlPT09ImJsb2NrUXVvdGUiPyhfc1swXT09PSJlbnRlciI/QW4rKzpBbi0tLHdvPXZvaWQgMCk6X3NbMV0udHlwZT09PSJsaW5lRW5kaW5nQmxhbmsiP19zWzBdPT09ImVudGVyIiYmKGpvJiYhd28mJiFBbiYmIVBhJiYoUGE9Zm4pLHdvPXZvaWQgMCk6X3NbMV0udHlwZT09PSJsaW5lUHJlZml4Inx8X3NbMV0udHlwZT09PSJsaXN0SXRlbVZhbHVlInx8X3NbMV0udHlwZT09PSJsaXN0SXRlbU1hcmtlciJ8fF9zWzFdLnR5cGU9PT0ibGlzdEl0ZW1QcmVmaXgifHxfc1sxXS50eXBlPT09Imxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSJ8fCh3bz12b2lkIDApLCFBbiYmX3NbMF09PT0iZW50ZXIiJiZfc1sxXS50eXBlPT09Imxpc3RJdGVtUHJlZml4Inx8QW49PT0tMSYmX3NbMF09PT0iZXhpdCImJihfc1sxXS50eXBlPT09Imxpc3RVbm9yZGVyZWQifHxfc1sxXS50eXBlPT09Imxpc3RPcmRlcmVkIikpe2lmKGpvKXtsZXQgdGw9Zm47Zm9yKCRvPXZvaWQgMDt0bC0tOyl7Y29uc3QgZGE9QXRbdGxdO2lmKGRhWzFdLnR5cGU9PT0ibGluZUVuZGluZyJ8fGRhWzFdLnR5cGU9PT0ibGluZUVuZGluZ0JsYW5rIil7aWYoZGFbMF09PT0iZXhpdCIpY29udGludWU7JG8mJihBdFskb11bMV0udHlwZT0ibGluZUVuZGluZ0JsYW5rIixvbz0hMCksZGFbMV0udHlwZT0ibGluZUVuZGluZyIsJG89dGx9ZWxzZSBpZighKGRhWzFdLnR5cGU9PT0ibGluZVByZWZpeCJ8fGRhWzFdLnR5cGU9PT0iYmxvY2tRdW90ZVByZWZpeCJ8fGRhWzFdLnR5cGU9PT0iYmxvY2tRdW90ZVByZWZpeFdoaXRlc3BhY2UifHxkYVsxXS50eXBlPT09ImJsb2NrUXVvdGVNYXJrZXIifHxkYVsxXS50eXBlPT09Imxpc3RJdGVtSW5kZW50IikpYnJlYWt9UGEmJighJG98fFBhPCRvKSYmKGpvLl9zcHJlYWQ9ITApLGpvLmVuZD1PYmplY3QuYXNzaWduKHt9LCRvP0F0WyRvXVsxXS5zdGFydDpfc1sxXS5lbmQpLEF0LnNwbGljZSgkb3x8Zm4sMCxbImV4aXQiLGpvLF9zWzJdXSksZm4rKyxvbisrfV9zWzFdLnR5cGU9PT0ibGlzdEl0ZW1QcmVmaXgiJiYoam89e3R5cGU6Imxpc3RJdGVtIixfc3ByZWFkOiExLHN0YXJ0Ok9iamVjdC5hc3NpZ24oe30sX3NbMV0uc3RhcnQpLGVuZDp2b2lkIDB9LEF0LnNwbGljZShmbiwwLFsiZW50ZXIiLGpvLF9zWzJdXSksZm4rKyxvbisrLFBhPXZvaWQgMCx3bz0hMCl9fXJldHVybiBBdFt3dF1bMV0uX3NwcmVhZD1vbyxvbn1mdW5jdGlvbiB2KEF0LHd0KXt1W0F0XT13dH1mdW5jdGlvbiBiKEF0KXtyZXR1cm4gdVtBdF19ZnVuY3Rpb24geShBdCx3dCl7cmV0dXJuIG9uO2Z1bmN0aW9uIG9uKGZuKXtfLmNhbGwodGhpcyxBdChmbiksZm4pLHd0JiZ3dC5jYWxsKHRoaXMsZm4pfX1mdW5jdGlvbiBUKCl7dGhpcy5zdGFjay5wdXNoKHt0eXBlOiJmcmFnbWVudCIsY2hpbGRyZW46W119KX1mdW5jdGlvbiBfKEF0LHd0LG9uKXtyZXR1cm4gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXS5jaGlsZHJlbi5wdXNoKEF0KSx0aGlzLnN0YWNrLnB1c2goQXQpLHRoaXMudG9rZW5TdGFjay5wdXNoKFt3dCxvbl0pLEF0LnBvc2l0aW9uPXtzdGFydDpOOSh3dC5zdGFydCl9LEF0fWZ1bmN0aW9uIEEoQXQpe3JldHVybiB3dDtmdW5jdGlvbiB3dChvbil7QXQmJkF0LmNhbGwodGhpcyxvbiksUC5jYWxsKHRoaXMsb24pfX1mdW5jdGlvbiBQKEF0LHd0KXtjb25zdCBvbj10aGlzLnN0YWNrLnBvcCgpLGZuPXRoaXMudG9rZW5TdGFjay5wb3AoKTtpZihmbilmblswXS50eXBlIT09QXQudHlwZSYmKHd0P3d0LmNhbGwodGhpcyxBdCxmblswXSk6KGZuWzFdfHxkVWUpLmNhbGwodGhpcyxBdCxmblswXSkpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2xvc2UgYCIrQXQudHlwZSsiYCAoIitRUSh7c3RhcnQ6QXQuc3RhcnQsZW5kOkF0LmVuZH0pKyIpOiBpdOKAmXMgbm90IG9wZW4iKTtyZXR1cm4gb24ucG9zaXRpb24uZW5kPU45KEF0LmVuZCksb259ZnVuY3Rpb24gUigpe3JldHVybiBQUXQodGhpcy5zdGFjay5wb3AoKSl9ZnVuY3Rpb24gRigpe3YoImV4cGVjdGluZ0ZpcnN0TGlzdEl0ZW1WYWx1ZSIsITApfWZ1bmN0aW9uIGooQXQpe2lmKGIoImV4cGVjdGluZ0ZpcnN0TGlzdEl0ZW1WYWx1ZSIpKXtjb25zdCB3dD10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTJdO3d0LnN0YXJ0PU51bWJlci5wYXJzZUludCh0aGlzLnNsaWNlU2VyaWFsaXplKEF0KSwxMCksdigiZXhwZWN0aW5nRmlyc3RMaXN0SXRlbVZhbHVlIil9fWZ1bmN0aW9uIEsoKXtjb25zdCBBdD10aGlzLnJlc3VtZSgpLHd0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07d3QubGFuZz1BdH1mdW5jdGlvbiBlZSgpe2NvbnN0IEF0PXRoaXMucmVzdW1lKCksd3Q9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTt3dC5tZXRhPUF0fWZ1bmN0aW9uIGllKCl7YigiZmxvd0NvZGVJbnNpZGUiKXx8KHRoaXMuYnVmZmVyKCksdigiZmxvd0NvZGVJbnNpZGUiLCEwKSl9ZnVuY3Rpb24gb2UoKXtjb25zdCBBdD10aGlzLnJlc3VtZSgpLHd0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07d3QudmFsdWU9QXQucmVwbGFjZSgvXihccj9cbnxccil8KFxyP1xufFxyKSQvZywiIiksdigiZmxvd0NvZGVJbnNpZGUiKX1mdW5jdGlvbiBwZSgpe2NvbnN0IEF0PXRoaXMucmVzdW1lKCksd3Q9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTt3dC52YWx1ZT1BdC5yZXBsYWNlKC8oXHI/XG58XHIpJC9nLCIiKX1mdW5jdGlvbiBiZShBdCl7Y29uc3Qgd3Q9dGhpcy5yZXN1bWUoKSxvbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO29uLmxhYmVsPXd0LG9uLmlkZW50aWZpZXI9SEQodGhpcy5zbGljZVNlcmlhbGl6ZShBdCkpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gYWUoKXtjb25zdCBBdD10aGlzLnJlc3VtZSgpLHd0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07d3QudGl0bGU9QXR9ZnVuY3Rpb24gbmUoKXtjb25zdCBBdD10aGlzLnJlc3VtZSgpLHd0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07d3QudXJsPUF0fWZ1bmN0aW9uIHNlKEF0KXtjb25zdCB3dD10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2lmKCF3dC5kZXB0aCl7Y29uc3Qgb249dGhpcy5zbGljZVNlcmlhbGl6ZShBdCkubGVuZ3RoO3d0LmRlcHRoPW9ufX1mdW5jdGlvbiBkZSgpe3YoInNldGV4dEhlYWRpbmdTbHVycExpbmVFbmRpbmciLCEwKX1mdW5jdGlvbiBYKEF0KXtjb25zdCB3dD10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO3d0LmRlcHRoPXRoaXMuc2xpY2VTZXJpYWxpemUoQXQpLmNoYXJDb2RlQXQoMCk9PT02MT8xOjJ9ZnVuY3Rpb24gZ2UoKXt2KCJzZXRleHRIZWFkaW5nU2x1cnBMaW5lRW5kaW5nIil9ZnVuY3Rpb24gVyhBdCl7Y29uc3Qgd3Q9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtsZXQgb249d3QuY2hpbGRyZW5bd3QuY2hpbGRyZW4ubGVuZ3RoLTFdOyghb258fG9uLnR5cGUhPT0idGV4dCIpJiYob249cW4oKSxvbi5wb3NpdGlvbj17c3RhcnQ6TjkoQXQuc3RhcnQpfSx3dC5jaGlsZHJlbi5wdXNoKG9uKSksdGhpcy5zdGFjay5wdXNoKG9uKX1mdW5jdGlvbiB4ZShBdCl7Y29uc3Qgd3Q9dGhpcy5zdGFjay5wb3AoKTt3dC52YWx1ZSs9dGhpcy5zbGljZVNlcmlhbGl6ZShBdCksd3QucG9zaXRpb24uZW5kPU45KEF0LmVuZCl9ZnVuY3Rpb24gVShBdCl7Y29uc3Qgd3Q9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtpZihiKCJhdEhhcmRCcmVhayIpKXtjb25zdCBvbj13dC5jaGlsZHJlblt3dC5jaGlsZHJlbi5sZW5ndGgtMV07b24ucG9zaXRpb24uZW5kPU45KEF0LmVuZCksdigiYXRIYXJkQnJlYWsiKTtyZXR1cm59IWIoInNldGV4dEhlYWRpbmdTbHVycExpbmVFbmRpbmciKSYmcy5jYW5Db250YWluRW9scy5pbmNsdWRlcyh3dC50eXBlKSYmKFcuY2FsbCh0aGlzLEF0KSx4ZS5jYWxsKHRoaXMsQXQpKX1mdW5jdGlvbiBGZSgpe3YoImF0SGFyZEJyZWFrIiwhMCl9ZnVuY3Rpb24gUGUoKXtjb25zdCBBdD10aGlzLnJlc3VtZSgpLHd0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07d3QudmFsdWU9QXR9ZnVuY3Rpb24gamUoKXtjb25zdCBBdD10aGlzLnJlc3VtZSgpLHd0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07d3QudmFsdWU9QXR9ZnVuY3Rpb24gSWUoKXtjb25zdCBBdD10aGlzLnJlc3VtZSgpLHd0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07d3QudmFsdWU9QXR9ZnVuY3Rpb24gU2UoKXtjb25zdCBBdD10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2lmKGIoImluUmVmZXJlbmNlIikpe2NvbnN0IHd0PWIoInJlZmVyZW5jZVR5cGUiKXx8InNob3J0Y3V0IjtBdC50eXBlKz0iUmVmZXJlbmNlIixBdC5yZWZlcmVuY2VUeXBlPXd0LGRlbGV0ZSBBdC51cmwsZGVsZXRlIEF0LnRpdGxlfWVsc2UgZGVsZXRlIEF0LmlkZW50aWZpZXIsZGVsZXRlIEF0LmxhYmVsO3YoInJlZmVyZW5jZVR5cGUiKX1mdW5jdGlvbiBDZSgpe2NvbnN0IEF0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07aWYoYigiaW5SZWZlcmVuY2UiKSl7Y29uc3Qgd3Q9YigicmVmZXJlbmNlVHlwZSIpfHwic2hvcnRjdXQiO0F0LnR5cGUrPSJSZWZlcmVuY2UiLEF0LnJlZmVyZW5jZVR5cGU9d3QsZGVsZXRlIEF0LnVybCxkZWxldGUgQXQudGl0bGV9ZWxzZSBkZWxldGUgQXQuaWRlbnRpZmllcixkZWxldGUgQXQubGFiZWw7digicmVmZXJlbmNlVHlwZSIpfWZ1bmN0aW9uIGtlKEF0KXtjb25zdCB3dD10aGlzLnNsaWNlU2VyaWFsaXplKEF0KSxvbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTJdO29uLmxhYmVsPUNadCh3dCksb24uaWRlbnRpZmllcj1IRCh3dCkudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBLZSgpe2NvbnN0IEF0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV0sd3Q9dGhpcy5yZXN1bWUoKSxvbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO2lmKHYoImluUmVmZXJlbmNlIiwhMCksb24udHlwZT09PSJsaW5rIil7Y29uc3QgZm49QXQuY2hpbGRyZW47b24uY2hpbGRyZW49Zm59ZWxzZSBvbi5hbHQ9d3R9ZnVuY3Rpb24gRnQoKXtjb25zdCBBdD10aGlzLnJlc3VtZSgpLHd0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07d3QudXJsPUF0fWZ1bmN0aW9uIE5lKCl7Y29uc3QgQXQ9dGhpcy5yZXN1bWUoKSx3dD10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO3d0LnRpdGxlPUF0fWZ1bmN0aW9uIGduKCl7digiaW5SZWZlcmVuY2UiKX1mdW5jdGlvbiBfdCgpe3YoInJlZmVyZW5jZVR5cGUiLCJjb2xsYXBzZWQiKX1mdW5jdGlvbiBFdChBdCl7Y29uc3Qgd3Q9dGhpcy5yZXN1bWUoKSxvbj10aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdO29uLmxhYmVsPXd0LG9uLmlkZW50aWZpZXI9SEQodGhpcy5zbGljZVNlcmlhbGl6ZShBdCkpLnRvTG93ZXJDYXNlKCksdigicmVmZXJlbmNlVHlwZSIsImZ1bGwiKX1mdW5jdGlvbiBHdChBdCl7digiY2hhcmFjdGVyUmVmZXJlbmNlVHlwZSIsQXQudHlwZSl9ZnVuY3Rpb24gbG4oQXQpe2NvbnN0IHd0PXRoaXMuc2xpY2VTZXJpYWxpemUoQXQpLG9uPWIoImNoYXJhY3RlclJlZmVyZW5jZVR5cGUiKTtsZXQgZm47b24/KGZuPW9VZSh3dCxvbj09PSJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljIj8xMDoxNiksdigiY2hhcmFjdGVyUmVmZXJlbmNlVHlwZSIpKTpmbj1EbWUod3QpO2NvbnN0IEFuPXRoaXMuc3RhY2sucG9wKCk7QW4udmFsdWUrPWZuLEFuLnBvc2l0aW9uLmVuZD1OOShBdC5lbmQpfWZ1bmN0aW9uIHh0KEF0KXt4ZS5jYWxsKHRoaXMsQXQpO2NvbnN0IHd0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07d3QudXJsPXRoaXMuc2xpY2VTZXJpYWxpemUoQXQpfWZ1bmN0aW9uIFB0KEF0KXt4ZS5jYWxsKHRoaXMsQXQpO2NvbnN0IHd0PXRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV07d3QudXJsPSJtYWlsdG86Iit0aGlzLnNsaWNlU2VyaWFsaXplKEF0KX1mdW5jdGlvbiBRZSgpe3JldHVybnt0eXBlOiJibG9ja3F1b3RlIixjaGlsZHJlbjpbXX19ZnVuY3Rpb24gRHQoKXtyZXR1cm57dHlwZToiY29kZSIsbGFuZzpudWxsLG1ldGE6bnVsbCx2YWx1ZToiIn19ZnVuY3Rpb24ga3QoKXtyZXR1cm57dHlwZToiaW5saW5lQ29kZSIsdmFsdWU6IiJ9fWZ1bmN0aW9uIE9uKCl7cmV0dXJue3R5cGU6ImRlZmluaXRpb24iLGlkZW50aWZpZXI6IiIsbGFiZWw6bnVsbCx0aXRsZTpudWxsLHVybDoiIn19ZnVuY3Rpb24gaHQoKXtyZXR1cm57dHlwZToiZW1waGFzaXMiLGNoaWxkcmVuOltdfX1mdW5jdGlvbiB6cigpe3JldHVybnt0eXBlOiJoZWFkaW5nIixkZXB0aDp2b2lkIDAsY2hpbGRyZW46W119fWZ1bmN0aW9uIHl0KCl7cmV0dXJue3R5cGU6ImJyZWFrIn19ZnVuY3Rpb24gamkoKXtyZXR1cm57dHlwZToiaHRtbCIsdmFsdWU6IiJ9fWZ1bmN0aW9uIHhpKCl7cmV0dXJue3R5cGU6ImltYWdlIix0aXRsZTpudWxsLHVybDoiIixhbHQ6bnVsbH19ZnVuY3Rpb24gTWEoKXtyZXR1cm57dHlwZToibGluayIsdGl0bGU6bnVsbCx1cmw6IiIsY2hpbGRyZW46W119fWZ1bmN0aW9uIHpzKEF0KXtyZXR1cm57dHlwZToibGlzdCIsb3JkZXJlZDpBdC50eXBlPT09Imxpc3RPcmRlcmVkIixzdGFydDpudWxsLHNwcmVhZDpBdC5fc3ByZWFkLGNoaWxkcmVuOltdfX1mdW5jdGlvbiBhbyhBdCl7cmV0dXJue3R5cGU6Imxpc3RJdGVtIixzcHJlYWQ6QXQuX3NwcmVhZCxjaGVja2VkOm51bGwsY2hpbGRyZW46W119fWZ1bmN0aW9uIFRyKCl7cmV0dXJue3R5cGU6InBhcmFncmFwaCIsY2hpbGRyZW46W119fWZ1bmN0aW9uIEZuKCl7cmV0dXJue3R5cGU6InN0cm9uZyIsY2hpbGRyZW46W119fWZ1bmN0aW9uIHFuKCl7cmV0dXJue3R5cGU6InRleHQiLHZhbHVlOiIifX1mdW5jdGlvbiBVbigpe3JldHVybnt0eXBlOiJ0aGVtYXRpY0JyZWFrIn19fWZ1bmN0aW9uIE45KGkpe3JldHVybntsaW5lOmkubGluZSxjb2x1bW46aS5jb2x1bW4sb2Zmc2V0Omkub2Zmc2V0fX1mdW5jdGlvbiBmVWUoaSxzKXtsZXQgdT0tMTtmb3IoOysrdTxzLmxlbmd0aDspe2NvbnN0IGQ9c1t1XTtBcnJheS5pc0FycmF5KGQpP2ZVZShpLGQpOkFadChpLGQpfX1mdW5jdGlvbiBBWnQoaSxzKXtsZXQgdTtmb3IodSBpbiBzKWlmKGxVZS5jYWxsKHMsdSkpe2lmKHU9PT0iY2FuQ29udGFpbkVvbHMiKXtjb25zdCBkPXNbdV07ZCYmaVt1XS5wdXNoKC4uLmQpfWVsc2UgaWYodT09PSJ0cmFuc2Zvcm1zIil7Y29uc3QgZD1zW3VdO2QmJmlbdV0ucHVzaCguLi5kKX1lbHNlIGlmKHU9PT0iZW50ZXIifHx1PT09ImV4aXQiKXtjb25zdCBkPXNbdV07ZCYmT2JqZWN0LmFzc2lnbihpW3VdLGQpfX19ZnVuY3Rpb24gZFVlKGkscyl7dGhyb3cgaT9uZXcgRXJyb3IoIkNhbm5vdCBjbG9zZSBgIitpLnR5cGUrImAgKCIrUVEoe3N0YXJ0Omkuc3RhcnQsZW5kOmkuZW5kfSkrIik6IGEgZGlmZmVyZW50IHRva2VuIChgIitzLnR5cGUrImAsICIrUVEoe3N0YXJ0OnMuc3RhcnQsZW5kOnMuZW5kfSkrIikgaXMgb3BlbiIpOm5ldyBFcnJvcigiQ2Fubm90IGNsb3NlIGRvY3VtZW50LCBhIHRva2VuIChgIitzLnR5cGUrImAsICIrUVEoe3N0YXJ0OnMuc3RhcnQsZW5kOnMuZW5kfSkrIikgaXMgc3RpbGwgb3BlbiIpfWZ1bmN0aW9uIExadChpKXtjb25zdCBzPWkucmVwbGFjZSgvXG57Mix9L2csYApgKTtyZXR1cm4gSk0ocyl9ZnVuY3Rpb24gTVp0KGkpe2NvbnN0IHM9TFp0KGkpLHtjaGlsZHJlbjp1fT1oVWUocyksZD1bW11dO2xldCBwPTA7ZnVuY3Rpb24gdihiLHk9Im5vcm1hbCIpe2IudHlwZT09PSJ0ZXh0Ij9iLnZhbHVlLnNwbGl0KGAKYCkuZm9yRWFjaCgoXyxBKT0+e0EhPT0wJiYocCsrLGQucHVzaChbXSkpLF8uc3BsaXQoIiAiKS5mb3JFYWNoKFA9PntQJiZkW3BdLnB1c2goe2NvbnRlbnQ6UCx0eXBlOnl9KX0pfSk6KGIudHlwZT09PSJzdHJvbmcifHxiLnR5cGU9PT0iZW1waGFzaXMiKSYmYi5jaGlsZHJlbi5mb3JFYWNoKFQ9Pnt2KFQsYi50eXBlKX0pfXJldHVybiB1LmZvckVhY2goYj0+e2IudHlwZT09PSJwYXJhZ3JhcGgiJiZiLmNoaWxkcmVuLmZvckVhY2goeT0+e3YoeSl9KX0pLGR9ZnVuY3Rpb24gRFp0KGkpe2NvbnN0e2NoaWxkcmVuOnN9PWhVZShpKTtmdW5jdGlvbiB1KGQpe3JldHVybiBkLnR5cGU9PT0idGV4dCI/ZC52YWx1ZS5yZXBsYWNlKC9cbi9nLCI8YnIvPiIpOmQudHlwZT09PSJzdHJvbmciP2A8c3Ryb25nPiR7ZC5jaGlsZHJlbi5tYXAodSkuam9pbigiIil9PC9zdHJvbmc+YDpkLnR5cGU9PT0iZW1waGFzaXMiP2A8ZW0+JHtkLmNoaWxkcmVuLm1hcCh1KS5qb2luKCIiKX08L2VtPmA6ZC50eXBlPT09InBhcmFncmFwaCI/YDxwPiR7ZC5jaGlsZHJlbi5tYXAodSkuam9pbigiIil9PC9wPmA6YFVuc3VwcG9ydGVkIG1hcmtkb3duOiAke2QudHlwZX1gfXJldHVybiBzLm1hcCh1KS5qb2luKCIiKX1mdW5jdGlvbiBJWnQoaSl7cmV0dXJuIEludGwuU2VnbWVudGVyP1suLi5uZXcgSW50bC5TZWdtZW50ZXIoKS5zZWdtZW50KGkpXS5tYXAocz0+cy5zZWdtZW50KTpbLi4uaV19ZnVuY3Rpb24gT1p0KGkscyl7Y29uc3QgdT1JWnQocy5jb250ZW50KTtyZXR1cm4gZ1VlKGksW10sdSxzLnR5cGUpfWZ1bmN0aW9uIGdVZShpLHMsdSxkKXtpZih1Lmxlbmd0aD09PTApcmV0dXJuW3tjb250ZW50OnMuam9pbigiIiksdHlwZTpkfSx7Y29udGVudDoiIix0eXBlOmR9XTtjb25zdFtwLC4uLnZdPXUsYj1bLi4ucyxwXTtyZXR1cm4gaShbe2NvbnRlbnQ6Yi5qb2luKCIiKSx0eXBlOmR9XSk/Z1VlKGksYix2LGQpOihzLmxlbmd0aD09PTAmJnAmJihzLnB1c2gocCksdS5zaGlmdCgpKSxbe2NvbnRlbnQ6cy5qb2luKCIiKSx0eXBlOmR9LHtjb250ZW50OnUuam9pbigiIiksdHlwZTpkfV0pfWZ1bmN0aW9uIE5adChpLHMpe2lmKGkuc29tZSgoe2NvbnRlbnQ6dX0pPT51LmluY2x1ZGVzKGAKYCkpKXRocm93IG5ldyBFcnJvcigic3BsaXRMaW5lVG9GaXRXaWR0aCBkb2VzIG5vdCBzdXBwb3J0IG5ld2xpbmVzIGluIHRoZSBsaW5lIik7cmV0dXJuIEJtZShpLHMpfWZ1bmN0aW9uIEJtZShpLHMsdT1bXSxkPVtdKXtpZihpLmxlbmd0aD09PTApcmV0dXJuIGQubGVuZ3RoPjAmJnUucHVzaChkKSx1Lmxlbmd0aD4wP3U6W107bGV0IHA9IiI7aVswXS5jb250ZW50PT09IiAiJiYocD0iICIsaS5zaGlmdCgpKTtjb25zdCB2PWkuc2hpZnQoKT8/e2NvbnRlbnQ6IiAiLHR5cGU6Im5vcm1hbCJ9LGI9Wy4uLmRdO2lmKHAhPT0iIiYmYi5wdXNoKHtjb250ZW50OnAsdHlwZToibm9ybWFsIn0pLGIucHVzaCh2KSxzKGIpKXJldHVybiBCbWUoaSxzLHUsYik7aWYoZC5sZW5ndGg+MCl1LnB1c2goZCksaS51bnNoaWZ0KHYpO2Vsc2UgaWYodi5jb250ZW50KXtjb25zdFt5LFRdPU9adChzLHYpO3UucHVzaChbeV0pLFQuY29udGVudCYmaS51bnNoaWZ0KFQpfXJldHVybiBCbWUoaSxzLHUpfWZ1bmN0aW9uIFBadChpLHMpe3MmJmkuYXR0cigic3R5bGUiLHMpfWZ1bmN0aW9uIEJadChpLHMsdSxkLHA9ITEpe2NvbnN0IHY9aS5hcHBlbmQoImZvcmVpZ25PYmplY3QiKSxiPXYuYXBwZW5kKCJ4aHRtbDpkaXYiKSx5PXMubGFiZWwsVD1zLmlzTm9kZT8ibm9kZUxhYmVsIjoiZWRnZUxhYmVsIjtiLmh0bWwoYAogICAgPHNwYW4gY2xhc3M9IiR7VH0gJHtkfSIgYCsocy5sYWJlbFN0eWxlPydzdHlsZT0iJytzLmxhYmVsU3R5bGUrJyInOiIiKSsiPiIreSsiPC9zcGFuPiIpLFBadChiLHMubGFiZWxTdHlsZSksYi5zdHlsZSgiZGlzcGxheSIsInRhYmxlLWNlbGwiKSxiLnN0eWxlKCJ3aGl0ZS1zcGFjZSIsIm5vd3JhcCIpLGIuc3R5bGUoIm1heC13aWR0aCIsdSsicHgiKSxiLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLHAmJmIuYXR0cigiY2xhc3MiLCJsYWJlbEJrZyIpO2xldCBfPWIubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBfLndpZHRoPT09dSYmKGIuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLGIuc3R5bGUoIndoaXRlLXNwYWNlIiwiYnJlYWstc3BhY2VzIiksYi5zdHlsZSgid2lkdGgiLHUrInB4IiksXz1iLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksdi5zdHlsZSgid2lkdGgiLF8ud2lkdGgpLHYuc3R5bGUoImhlaWdodCIsXy5oZWlnaHQpLHYubm9kZSgpfWZ1bmN0aW9uIEZtZShpLHMsdSl7cmV0dXJuIGkuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoImNsYXNzIiwidGV4dC1vdXRlci10c3BhbiIpLmF0dHIoIngiLDApLmF0dHIoInkiLHMqdS0uMSsiZW0iKS5hdHRyKCJkeSIsdSsiZW0iKX1mdW5jdGlvbiBGWnQoaSxzLHUpe2NvbnN0IGQ9aS5hcHBlbmQoInRleHQiKSxwPUZtZShkLDEscyk7Um1lKHAsdSk7Y29uc3Qgdj1wLm5vZGUoKS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKTtyZXR1cm4gZC5yZW1vdmUoKSx2fWZ1bmN0aW9uIFJadChpLHMsdSl7dmFyIGI7Y29uc3QgZD1pLmFwcGVuZCgidGV4dCIpLHA9Rm1lKGQsMSxzKTtSbWUocCxbe2NvbnRlbnQ6dSx0eXBlOiJub3JtYWwifV0pO2NvbnN0IHY9KGI9cC5ub2RlKCkpPT1udWxsP3ZvaWQgMDpiLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiB2JiZkLnJlbW92ZSgpLHZ9ZnVuY3Rpb24galp0KGkscyx1LGQ9ITEpe2NvbnN0IHY9cy5hcHBlbmQoImciKSxiPXYuaW5zZXJ0KCJyZWN0IikuYXR0cigiY2xhc3MiLCJiYWNrZ3JvdW5kIikseT12LmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLCItMTAuMSIpO2xldCBUPTA7Zm9yKGNvbnN0IF8gb2YgdSl7Y29uc3QgQT1SPT5GWnQodiwxLjEsUik8PWksUD1BKF8pP1tfXTpOWnQoXyxBKTtmb3IoY29uc3QgUiBvZiBQKXtjb25zdCBGPUZtZSh5LFQsMS4xKTtSbWUoRixSKSxUKyt9fWlmKGQpe2NvbnN0IF89eS5ub2RlKCkuZ2V0QkJveCgpLEE9MjtyZXR1cm4gYi5hdHRyKCJ4IiwtQSkuYXR0cigieSIsLUEpLmF0dHIoIndpZHRoIixfLndpZHRoKzIqQSkuYXR0cigiaGVpZ2h0IixfLmhlaWdodCsyKkEpLHYubm9kZSgpfWVsc2UgcmV0dXJuIHkubm9kZSgpfWZ1bmN0aW9uIFJtZShpLHMpe2kudGV4dCgiIikscy5mb3JFYWNoKCh1LGQpPT57Y29uc3QgcD1pLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJmb250LXN0eWxlIix1LnR5cGU9PT0iZW1waGFzaXMiPyJpdGFsaWMiOiJub3JtYWwiKS5hdHRyKCJjbGFzcyIsInRleHQtaW5uZXItdHNwYW4iKS5hdHRyKCJmb250LXdlaWdodCIsdS50eXBlPT09InN0cm9uZyI/ImJvbGQiOiJub3JtYWwiKTtkPT09MD9wLnRleHQodS5jb250ZW50KTpwLnRleHQoIiAiK3UuY29udGVudCl9KX1jb25zdCBKUT0oaSxzPSIiLHtzdHlsZTp1PSIiLGlzVGl0bGU6ZD0hMSxjbGFzc2VzOnA9IiIsdXNlSHRtbExhYmVsczp2PSEwLGlzTm9kZTpiPSEwLHdpZHRoOnk9MjAwLGFkZFN2Z0JhY2tncm91bmQ6VD0hMX09e30pPT57aWYoWGUuaW5mbygiY3JlYXRlVGV4dCIscyx1LGQscCx2LGIsVCksdil7Y29uc3QgXz1EWnQocyksQT17aXNOb2RlOmIsbGFiZWw6WkYoXykucmVwbGFjZSgvZmFbYmxyc10/OmZhLVtcdy1dKy9nLFI9PmA8aSBjbGFzcz0nJHtSLnJlcGxhY2UoIjoiLCIgIil9Jz48L2k+YCksbGFiZWxTdHlsZTp1LnJlcGxhY2UoImZpbGw6IiwiY29sb3I6Iil9O3JldHVybiBCWnQoaSxBLHkscCxUKX1lbHNle2NvbnN0IF89TVp0KHMpO3JldHVybiBqWnQoeSxpLF8sVCl9fSxnMT1hc3luYyhpLHMsdSxkKT0+e2xldCBwO2NvbnN0IHY9cy51c2VIdG1sTGFiZWxzfHxmMShxdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKTt1P3A9dTpwPSJub2RlIGRlZmF1bHQiO2NvbnN0IGI9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIscCkuYXR0cigiaWQiLHMuZG9tSWR8fHMuaWQpLHk9Yi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuYXR0cigic3R5bGUiLHMubGFiZWxTdHlsZSk7bGV0IFQ7cy5sYWJlbFRleHQ9PT12b2lkIDA/VD0iIjpUPXR5cGVvZiBzLmxhYmVsVGV4dD09InN0cmluZyI/cy5sYWJlbFRleHQ6cy5sYWJlbFRleHRbMF07Y29uc3QgXz15Lm5vZGUoKTtsZXQgQTtzLmxhYmVsVHlwZT09PSJtYXJrZG93biI/QT1KUSh5LFlmKFpGKFQpLHF0KCkpLHt1c2VIdG1sTGFiZWxzOnYsd2lkdGg6cy53aWR0aHx8cXQoKS5mbG93Y2hhcnQud3JhcHBpbmdXaWR0aCxjbGFzc2VzOiJtYXJrZG93bi1ub2RlLWxhYmVsIn0pOkE9Xy5hcHBlbmRDaGlsZCgkMihZZihaRihUKSxxdCgpKSxzLmxhYmVsU3R5bGUsITEsZCkpO2xldCBQPUEuZ2V0QkJveCgpO2NvbnN0IFI9cy5wYWRkaW5nLzI7aWYoZjEocXQoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IEY9QS5jaGlsZHJlblswXSxqPUlyKEEpLEs9Ri5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW1nIik7aWYoSyl7Y29uc3QgZWU9VC5yZXBsYWNlKC88aW1nW14+XSo+L2csIiIpLnRyaW0oKT09PSIiO2F3YWl0IFByb21pc2UuYWxsKFsuLi5LXS5tYXAoaWU9Pm5ldyBQcm9taXNlKG9lPT57ZnVuY3Rpb24gcGUoKXtpZihpZS5zdHlsZS5kaXNwbGF5PSJmbGV4IixpZS5zdHlsZS5mbGV4RGlyZWN0aW9uPSJjb2x1bW4iLGVlKXtjb25zdCBiZT1xdCgpLmZvbnRTaXplP3F0KCkuZm9udFNpemU6d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuZm9udFNpemUsYWU9NSxuZT1wYXJzZUludChiZSwxMCkqYWUrInB4IjtpZS5zdHlsZS5taW5XaWR0aD1uZSxpZS5zdHlsZS5tYXhXaWR0aD1uZX1lbHNlIGllLnN0eWxlLndpZHRoPSIxMDAlIjtvZShpZSl9c2V0VGltZW91dCgoKT0+e2llLmNvbXBsZXRlJiZwZSgpfSksaWUuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLHBlKSxpZS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixwZSl9KSkpfVA9Ri5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxqLmF0dHIoIndpZHRoIixQLndpZHRoKSxqLmF0dHIoImhlaWdodCIsUC5oZWlnaHQpfXJldHVybiB2P3kuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLVAud2lkdGgvMisiLCAiKy1QLmhlaWdodC8yKyIpIik6eS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIistUC5oZWlnaHQvMisiKSIpLHMuY2VudGVyTGFiZWwmJnkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLVAud2lkdGgvMisiLCAiKy1QLmhlaWdodC8yKyIpIikseS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSx7c2hhcGVTdmc6YixiYm94OlAsaGFsZlBhZGRpbmc6UixsYWJlbDp5fX0sS2g9KGkscyk9Pntjb25zdCB1PXMubm9kZSgpLmdldEJCb3goKTtpLndpZHRoPXUud2lkdGgsaS5oZWlnaHQ9dS5oZWlnaHR9O2Z1bmN0aW9uIHI1KGkscyx1LGQpe3JldHVybiBpLmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsZC5tYXAoZnVuY3Rpb24ocCl7cmV0dXJuIHAueCsiLCIrcC55fSkuam9pbigiICIpKS5hdHRyKCJjbGFzcyIsImxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1zLzIrIiwiK3UvMisiKSIpfWxldCBNbz17fSxWMz17fSxwVWU9e307Y29uc3QgJFp0PSgpPT57VjM9e30scFVlPXt9LE1vPXt9fSxaUT0oaSxzKT0+KFhlLnRyYWNlKCJJbiBpc0Rlc2NlbmRhbnQiLHMsIiAiLGksIiA9ICIsVjNbc10uaW5jbHVkZXMoaSkpLCEhVjNbc10uaW5jbHVkZXMoaSkpLHpadD0oaSxzKT0+KFhlLmluZm8oIkRlc2NlbmRhbnRzIG9mICIscywiIGlzICIsVjNbc10pLFhlLmluZm8oIkVkZ2UgaXMgIixpKSxpLnY9PT1zfHxpLnc9PT1zPyExOlYzW3NdP1YzW3NdLmluY2x1ZGVzKGkudil8fFpRKGkudixzKXx8WlEoaS53LHMpfHxWM1tzXS5pbmNsdWRlcyhpLncpOihYZS5kZWJ1ZygiVGlsdCwgIixzLCIsbm90IGluIGRlc2NlbmRhbnRzIiksITEpKSxiVWU9KGkscyx1LGQpPT57WGUud2FybigiQ29weWluZyBjaGlsZHJlbiBvZiAiLGksInJvb3QiLGQsImRhdGEiLHMubm9kZShpKSxkKTtjb25zdCBwPXMuY2hpbGRyZW4oaSl8fFtdO2khPT1kJiZwLnB1c2goaSksWGUud2FybigiQ29weWluZyAobm9kZXMpIGNsdXN0ZXJJZCIsaSwibm9kZXMiLHApLHAuZm9yRWFjaCh2PT57aWYocy5jaGlsZHJlbih2KS5sZW5ndGg+MCliVWUodixzLHUsZCk7ZWxzZXtjb25zdCBiPXMubm9kZSh2KTtYZS5pbmZvKCJjcCAiLHYsIiB0byAiLGQsIiB3aXRoIHBhcmVudCAiLGkpLHUuc2V0Tm9kZSh2LGIpLGQhPT1zLnBhcmVudCh2KSYmKFhlLndhcm4oIlNldHRpbmcgcGFyZW50Iix2LHMucGFyZW50KHYpKSx1LnNldFBhcmVudCh2LHMucGFyZW50KHYpKSksaSE9PWQmJnYhPT1pPyhYZS5kZWJ1ZygiU2V0dGluZyBwYXJlbnQiLHYsaSksdS5zZXRQYXJlbnQodixpKSk6KFhlLmluZm8oIkluIGNvcHkgIixpLCJyb290IixkLCJkYXRhIixzLm5vZGUoaSksZCksWGUuZGVidWcoIk5vdCBTZXR0aW5nIHBhcmVudCBmb3Igbm9kZT0iLHYsImNsdXN0ZXIhPT1yb290SWQiLGkhPT1kLCJub2RlIT09Y2x1c3RlcklkIix2IT09aSkpO2NvbnN0IHk9cy5lZGdlcyh2KTtYZS5kZWJ1ZygiQ29weWluZyBFZGdlcyIseSkseS5mb3JFYWNoKFQ9PntYZS5pbmZvKCJFZGdlIixUKTtjb25zdCBfPXMuZWRnZShULnYsVC53LFQubmFtZSk7WGUuaW5mbygiRWRnZSBkYXRhIixfLGQpO3RyeXt6WnQoVCxkKT8oWGUuaW5mbygiQ29weWluZyBhcyAiLFQudixULncsXyxULm5hbWUpLHUuc2V0RWRnZShULnYsVC53LF8sVC5uYW1lKSxYZS5pbmZvKCJuZXdHcmFwaCBlZGdlcyAiLHUuZWRnZXMoKSx1LmVkZ2UodS5lZGdlcygpWzBdKSkpOlhlLmluZm8oIlNraXBwaW5nIGNvcHkgb2YgZWRnZSAiLFQudiwiLS0+IixULncsIiByb290SWQ6ICIsZCwiIGNsdXN0ZXJJZDoiLGkpfWNhdGNoKEEpe1hlLmVycm9yKEEpfX0pfVhlLmRlYnVnKCJSZW1vdmluZyBub2RlIix2KSxzLnJlbW92ZU5vZGUodil9KX0sbVVlPShpLHMpPT57Y29uc3QgdT1zLmNoaWxkcmVuKGkpO2xldCBkPVsuLi51XTtmb3IoY29uc3QgcCBvZiB1KXBVZVtwXT1pLGQ9Wy4uLmQsLi4ubVVlKHAscyldO3JldHVybiBkfSxNUj0oaSxzKT0+e1hlLnRyYWNlKCJTZWFyY2hpbmciLGkpO2NvbnN0IHU9cy5jaGlsZHJlbihpKTtpZihYZS50cmFjZSgiU2VhcmNoaW5nIGNoaWxkcmVuIG9mIGlkICIsaSx1KSx1Lmxlbmd0aDwxKXJldHVybiBYZS50cmFjZSgiVGhpcyBpcyBhIHZhbGlkIG5vZGUiLGkpLGk7Zm9yKGNvbnN0IGQgb2YgdSl7Y29uc3QgcD1NUihkLHMpO2lmKHApcmV0dXJuIFhlLnRyYWNlKCJGb3VuZCByZXBsYWNlbWVudCBmb3IiLGksIiA9PiAiLHApLHB9fSxlSj1pPT4hTW9baV18fCFNb1tpXS5leHRlcm5hbENvbm5lY3Rpb25zP2k6TW9baV0/TW9baV0uaWQ6aSxxWnQ9KGkscyk9PntpZighaXx8cz4xMCl7WGUuZGVidWcoIk9wdGluZyBvdXQsIG5vIGdyYXBoICIpO3JldHVybn1lbHNlIFhlLmRlYnVnKCJPcHRpbmcgaW4sIGdyYXBoICIpO2kubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe2kuY2hpbGRyZW4odSkubGVuZ3RoPjAmJihYZS53YXJuKCJDbHVzdGVyIGlkZW50aWZpZWQiLHUsIiBSZXBsYWNlbWVudCBpZCBpbiBlZGdlczogIixNUih1LGkpKSxWM1t1XT1tVWUodSxpKSxNb1t1XT17aWQ6TVIodSxpKSxjbHVzdGVyRGF0YTppLm5vZGUodSl9KX0pLGkubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe2NvbnN0IGQ9aS5jaGlsZHJlbih1KSxwPWkuZWRnZXMoKTtkLmxlbmd0aD4wPyhYZS5kZWJ1ZygiQ2x1c3RlciBpZGVudGlmaWVkIix1LFYzKSxwLmZvckVhY2godj0+e2lmKHYudiE9PXUmJnYudyE9PXUpe2NvbnN0IGI9WlEodi52LHUpLHk9WlEodi53LHUpO2JeeSYmKFhlLndhcm4oIkVkZ2U6ICIsdiwiIGxlYXZlcyBjbHVzdGVyICIsdSksWGUud2FybigiRGVzY2VuZGFudHMgb2YgWFhYICIsdSwiOiAiLFYzW3VdKSxNb1t1XS5leHRlcm5hbENvbm5lY3Rpb25zPSEwKX19KSk6WGUuZGVidWcoIk5vdCBhIGNsdXN0ZXIgIix1LFYzKX0pO2ZvcihsZXQgdSBvZiBPYmplY3Qua2V5cyhNbykpe2NvbnN0IGQ9TW9bdV0uaWQscD1pLnBhcmVudChkKTtwIT09dSYmTW9bcF0mJiFNb1twXS5leHRlcm5hbENvbm5lY3Rpb25zJiYoTW9bdV0uaWQ9cCl9aS5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24odSl7Y29uc3QgZD1pLmVkZ2UodSk7WGUud2FybigiRWRnZSAiK3UudisiIC0+ICIrdS53KyI6ICIrSlNPTi5zdHJpbmdpZnkodSkpLFhlLndhcm4oIkVkZ2UgIit1LnYrIiAtPiAiK3UudysiOiAiK0pTT04uc3RyaW5naWZ5KGkuZWRnZSh1KSkpO2xldCBwPXUudix2PXUudztpZihYZS53YXJuKCJGaXggWFhYIixNbywiaWRzOiIsdS52LHUudywiVHJhbnNsYXRpbmc6ICIsTW9bdS52XSwiIC0tLSAiLE1vW3Uud10pLE1vW3Uudl0mJk1vW3Uud10mJk1vW3Uudl09PT1Nb1t1LnddKXtYZS53YXJuKCJGaXhpbmcgYW5kIHRyaXhpbmcgbGluayB0byBzZWxmIC0gcmVtb3ZpbmcgWFhYIix1LnYsdS53LHUubmFtZSksWGUud2FybigiRml4aW5nIGFuZCB0cml4aW5nIC0gcmVtb3ZpbmcgWFhYIix1LnYsdS53LHUubmFtZSkscD1lSih1LnYpLHY9ZUoodS53KSxpLnJlbW92ZUVkZ2UodS52LHUudyx1Lm5hbWUpO2NvbnN0IGI9dS53KyItLS0iK3UudjtpLnNldE5vZGUoYix7ZG9tSWQ6YixpZDpiLGxhYmVsU3R5bGU6IiIsbGFiZWxUZXh0OmQubGFiZWwscGFkZGluZzowLHNoYXBlOiJsYWJlbFJlY3QiLHN0eWxlOiIifSk7Y29uc3QgeT1zdHJ1Y3R1cmVkQ2xvbmUoZCksVD1zdHJ1Y3R1cmVkQ2xvbmUoZCk7eS5sYWJlbD0iIix5LmFycm93VHlwZUVuZD0ibm9uZSIsVC5sYWJlbD0iIix5LmZyb21DbHVzdGVyPXUudixULnRvQ2x1c3Rlcj11LnYsaS5zZXRFZGdlKHAsYix5LHUubmFtZSsiLWN5Y2xpYy1zcGVjaWFsIiksaS5zZXRFZGdlKGIsdixULHUubmFtZSsiLWN5Y2xpYy1zcGVjaWFsIil9ZWxzZSBpZihNb1t1LnZdfHxNb1t1LnddKXtpZihYZS53YXJuKCJGaXhpbmcgYW5kIHRyaXhpbmcgLSByZW1vdmluZyBYWFgiLHUudix1LncsdS5uYW1lKSxwPWVKKHUudiksdj1lSih1LncpLGkucmVtb3ZlRWRnZSh1LnYsdS53LHUubmFtZSkscCE9PXUudil7Y29uc3QgYj1pLnBhcmVudChwKTtNb1tiXS5leHRlcm5hbENvbm5lY3Rpb25zPSEwLGQuZnJvbUNsdXN0ZXI9dS52fWlmKHYhPT11Lncpe2NvbnN0IGI9aS5wYXJlbnQodik7TW9bYl0uZXh0ZXJuYWxDb25uZWN0aW9ucz0hMCxkLnRvQ2x1c3Rlcj11Lnd9WGUud2FybigiRml4IFJlcGxhY2luZyB3aXRoIFhYWCIscCx2LHUubmFtZSksaS5zZXRFZGdlKHAsdixkLHUubmFtZSl9fSksWGUud2FybigiQWRqdXN0ZWQgR3JhcGgiLHE3KGkpKSx2VWUoaSwwKSxYZS50cmFjZShNbyl9LHZVZT0oaSxzKT0+e2lmKFhlLndhcm4oImV4dHJhY3RvciAtICIscyxxNyhpKSxpLmNoaWxkcmVuKCJEIikpLHM+MTApe1hlLmVycm9yKCJCYWlsaW5nIG91dCIpO3JldHVybn1sZXQgdT1pLm5vZGVzKCksZD0hMTtmb3IoY29uc3QgcCBvZiB1KXtjb25zdCB2PWkuY2hpbGRyZW4ocCk7ZD1kfHx2Lmxlbmd0aD4wfWlmKCFkKXtYZS5kZWJ1ZygiRG9uZSwgbm8gbm9kZSBoYXMgY2hpbGRyZW4iLGkubm9kZXMoKSk7cmV0dXJufVhlLmRlYnVnKCJOb2RlcyA9ICIsdSxzKTtmb3IoY29uc3QgcCBvZiB1KWlmKFhlLmRlYnVnKCJFeHRyYWN0aW5nIG5vZGUiLHAsTW8sTW9bcF0mJiFNb1twXS5leHRlcm5hbENvbm5lY3Rpb25zLCFpLnBhcmVudChwKSxpLm5vZGUocCksaS5jaGlsZHJlbigiRCIpLCIgRGVwdGggIixzKSwhTW9bcF0pWGUuZGVidWcoIk5vdCBhIGNsdXN0ZXIiLHAscyk7ZWxzZSBpZighTW9bcF0uZXh0ZXJuYWxDb25uZWN0aW9ucyYmaS5jaGlsZHJlbihwKSYmaS5jaGlsZHJlbihwKS5sZW5ndGg+MCl7WGUud2FybigiQ2x1c3RlciB3aXRob3V0IGV4dGVybmFsIGNvbm5lY3Rpb25zLCB3aXRob3V0IGEgcGFyZW50IGFuZCB3aXRoIGNoaWxkcmVuIixwLHMpO2xldCBiPWkuZ3JhcGgoKS5yYW5rZGlyPT09IlRCIj8iTFIiOiJUQiI7TW9bcF0mJk1vW3BdLmNsdXN0ZXJEYXRhJiZNb1twXS5jbHVzdGVyRGF0YS5kaXImJihiPU1vW3BdLmNsdXN0ZXJEYXRhLmRpcixYZS53YXJuKCJGaXhpbmcgZGlyIixNb1twXS5jbHVzdGVyRGF0YS5kaXIsYikpO2NvbnN0IHk9bmV3IEIwKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6Yixub2Rlc2VwOjUwLHJhbmtzZXA6NTAsbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pO1hlLndhcm4oIk9sZCBncmFwaCBiZWZvcmUgY29weSIscTcoaSkpLGJVZShwLGkseSxwKSxpLnNldE5vZGUocCx7Y2x1c3Rlck5vZGU6ITAsaWQ6cCxjbHVzdGVyRGF0YTpNb1twXS5jbHVzdGVyRGF0YSxsYWJlbFRleHQ6TW9bcF0ubGFiZWxUZXh0LGdyYXBoOnl9KSxYZS53YXJuKCJOZXcgZ3JhcGggYWZ0ZXIgY29weSBub2RlOiAoIixwLCIpIixxNyh5KSksWGUuZGVidWcoIk9sZCBncmFwaCBhZnRlciBjb3B5IixxNyhpKSl9ZWxzZSBYZS53YXJuKCJDbHVzdGVyICoqICIscCwiICoqbm90IG1lZXRpbmcgdGhlIGNyaXRlcmlhICFleHRlcm5hbENvbm5lY3Rpb25zOiIsIU1vW3BdLmV4dGVybmFsQ29ubmVjdGlvbnMsIiBubyBwYXJlbnQ6ICIsIWkucGFyZW50KHApLCIgY2hpbGRyZW4gIixpLmNoaWxkcmVuKHApJiZpLmNoaWxkcmVuKHApLmxlbmd0aD4wLGkuY2hpbGRyZW4oIkQiKSxzKSxYZS5kZWJ1ZyhNbyk7dT1pLm5vZGVzKCksWGUud2FybigiTmV3IGxpc3Qgb2Ygbm9kZXMiLHUpO2Zvcihjb25zdCBwIG9mIHUpe2NvbnN0IHY9aS5ub2RlKHApO1hlLndhcm4oIiBOb3cgbmV4dCBsZXZlbCIscCx2KSx2LmNsdXN0ZXJOb2RlJiZ2VWUodi5ncmFwaCxzKzEpfX0sd1VlPShpLHMpPT57aWYocy5sZW5ndGg9PT0wKXJldHVybltdO2xldCB1PU9iamVjdC5hc3NpZ24ocyk7cmV0dXJuIHMuZm9yRWFjaChkPT57Y29uc3QgcD1pLmNoaWxkcmVuKGQpLHY9d1VlKGkscCk7dT1bLi4udSwuLi52XX0pLHV9LEhadD1pPT53VWUoaSxpLmNoaWxkcmVuKCkpO2Z1bmN0aW9uIFZadChpLHMpe3JldHVybiBpLmludGVyc2VjdChzKX1mdW5jdGlvbiB5VWUoaSxzLHUsZCl7dmFyIHA9aS54LHY9aS55LGI9cC1kLngseT12LWQueSxUPU1hdGguc3FydChzKnMqeSp5K3UqdSpiKmIpLF89TWF0aC5hYnMocyp1KmIvVCk7ZC54PHAmJihfPS1fKTt2YXIgQT1NYXRoLmFicyhzKnUqeS9UKTtyZXR1cm4gZC55PHYmJihBPS1BKSx7eDpwK18seTp2K0F9fWZ1bmN0aW9uIFVadChpLHMsdSl7cmV0dXJuIHlVZShpLHMscyx1KX1mdW5jdGlvbiBHWnQoaSxzLHUsZCl7dmFyIHAsdixiLHksVCxfLEEsUCxSLEYsaixLLGVlLGllLG9lO2lmKHA9cy55LWkueSxiPWkueC1zLngsVD1zLngqaS55LWkueCpzLnksUj1wKnUueCtiKnUueStULEY9cCpkLngrYipkLnkrVCwhKFIhPT0wJiZGIT09MCYmeFVlKFIsRikpJiYodj1kLnktdS55LHk9dS54LWQueCxfPWQueCp1LnktdS54KmQueSxBPXYqaS54K3kqaS55K18sUD12KnMueCt5KnMueStfLCEoQSE9PTAmJlAhPT0wJiZ4VWUoQSxQKSkmJihqPXAqeS12KmIsaiE9PTApKSlyZXR1cm4gSz1NYXRoLmFicyhqLzIpLGVlPWIqXy15KlQsaWU9ZWU8MD8oZWUtSykvajooZWUrSykvaixlZT12KlQtcCpfLG9lPWVlPDA/KGVlLUspL2o6KGVlK0spL2ose3g6aWUseTpvZX19ZnVuY3Rpb24geFVlKGkscyl7cmV0dXJuIGkqcz4wfWZ1bmN0aW9uIEtadChpLHMsdSl7dmFyIGQ9aS54LHA9aS55LHY9W10sYj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkseT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7dHlwZW9mIHMuZm9yRWFjaD09ImZ1bmN0aW9uIj9zLmZvckVhY2goZnVuY3Rpb24oail7Yj1NYXRoLm1pbihiLGoueCkseT1NYXRoLm1pbih5LGoueSl9KTooYj1NYXRoLm1pbihiLHMueCkseT1NYXRoLm1pbih5LHMueSkpO2Zvcih2YXIgVD1kLWkud2lkdGgvMi1iLF89cC1pLmhlaWdodC8yLXksQT0wO0E8cy5sZW5ndGg7QSsrKXt2YXIgUD1zW0FdLFI9c1tBPHMubGVuZ3RoLTE/QSsxOjBdLEY9R1p0KGksdSx7eDpUK1AueCx5Ol8rUC55fSx7eDpUK1IueCx5Ol8rUi55fSk7RiYmdi5wdXNoKEYpfXJldHVybiB2Lmxlbmd0aD8odi5sZW5ndGg+MSYmdi5zb3J0KGZ1bmN0aW9uKGosSyl7dmFyIGVlPWoueC11LngsaWU9ai55LXUueSxvZT1NYXRoLnNxcnQoZWUqZWUraWUqaWUpLHBlPUsueC11LngsYmU9Sy55LXUueSxhZT1NYXRoLnNxcnQocGUqcGUrYmUqYmUpO3JldHVybiBvZTxhZT8tMTpvZT09PWFlPzA6MX0pLHZbMF0pOml9Y29uc3QgRFI9KGkscyk9Pnt2YXIgdT1pLngsZD1pLnkscD1zLngtdSx2PXMueS1kLGI9aS53aWR0aC8yLHk9aS5oZWlnaHQvMixULF87cmV0dXJuIE1hdGguYWJzKHYpKmI+TWF0aC5hYnMocCkqeT8odjwwJiYoeT0teSksVD12PT09MD8wOnkqcC92LF89eSk6KHA8MCYmKGI9LWIpLFQ9YixfPXA9PT0wPzA6Yip2L3ApLHt4OnUrVCx5OmQrX319LHloPXtub2RlOlZadCxjaXJjbGU6VVp0LGVsbGlwc2U6eVVlLHBvbHlnb246S1p0LHJlY3Q6RFJ9LFdadD1hc3luYyhpLHMpPT57cy51c2VIdG1sTGFiZWxzfHxxdCgpLmZsb3djaGFydC5odG1sTGFiZWxzfHwocy5jZW50ZXJMYWJlbD0hMCk7Y29uc3R7c2hhcGVTdmc6ZCxiYm94OnAsaGFsZlBhZGRpbmc6dn09YXdhaXQgZzEoaSxzLCJub2RlICIrcy5jbGFzc2VzLCEwKTtYZS5pbmZvKCJDbGFzc2VzID0gIixzLmNsYXNzZXMpO2NvbnN0IGI9ZC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gYi5hdHRyKCJyeCIscy5yeCkuYXR0cigicnkiLHMucnkpLmF0dHIoIngiLC1wLndpZHRoLzItdikuYXR0cigieSIsLXAuaGVpZ2h0LzItdikuYXR0cigid2lkdGgiLHAud2lkdGgrcy5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLHAuaGVpZ2h0K3MucGFkZGluZyksS2gocyxiKSxzLmludGVyc2VjdD1mdW5jdGlvbih5KXtyZXR1cm4geWgucmVjdChzLHkpfSxkfSxZWnQ9aT0+e2NvbnN0IHM9bmV3IFNldDtmb3IoY29uc3QgdSBvZiBpKXN3aXRjaCh1KXtjYXNlIngiOnMuYWRkKCJyaWdodCIpLHMuYWRkKCJsZWZ0Iik7YnJlYWs7Y2FzZSJ5IjpzLmFkZCgidXAiKSxzLmFkZCgiZG93biIpO2JyZWFrO2RlZmF1bHQ6cy5hZGQodSk7YnJlYWt9cmV0dXJuIHN9LFhadD0oaSxzLHUpPT57Y29uc3QgZD1ZWnQoaSkscD0yLHY9cy5oZWlnaHQrMip1LnBhZGRpbmcsYj12L3AseT1zLndpZHRoKzIqYit1LnBhZGRpbmcsVD11LnBhZGRpbmcvMjtyZXR1cm4gZC5oYXMoInJpZ2h0IikmJmQuaGFzKCJsZWZ0IikmJmQuaGFzKCJ1cCIpJiZkLmhhcygiZG93biIpP1t7eDowLHk6MH0se3g6Yix5OjB9LHt4OnkvMix5OjIqVH0se3g6eS1iLHk6MH0se3g6eSx5OjB9LHt4OnkseTotdi8zfSx7eDp5KzIqVCx5Oi12LzJ9LHt4OnkseTotMip2LzN9LHt4OnkseTotdn0se3g6eS1iLHk6LXZ9LHt4OnkvMix5Oi12LTIqVH0se3g6Yix5Oi12fSx7eDowLHk6LXZ9LHt4OjAseTotMip2LzN9LHt4Oi0yKlQseTotdi8yfSx7eDowLHk6LXYvM31dOmQuaGFzKCJyaWdodCIpJiZkLmhhcygibGVmdCIpJiZkLmhhcygidXAiKT9be3g6Yix5OjB9LHt4OnktYix5OjB9LHt4OnkseTotdi8yfSx7eDp5LWIseTotdn0se3g6Yix5Oi12fSx7eDowLHk6LXYvMn1dOmQuaGFzKCJyaWdodCIpJiZkLmhhcygibGVmdCIpJiZkLmhhcygiZG93biIpP1t7eDowLHk6MH0se3g6Yix5Oi12fSx7eDp5LWIseTotdn0se3g6eSx5OjB9XTpkLmhhcygicmlnaHQiKSYmZC5oYXMoInVwIikmJmQuaGFzKCJkb3duIik/W3t4OjAseTowfSx7eDp5LHk6LWJ9LHt4OnkseTotditifSx7eDowLHk6LXZ9XTpkLmhhcygibGVmdCIpJiZkLmhhcygidXAiKSYmZC5oYXMoImRvd24iKT9be3g6eSx5OjB9LHt4OjAseTotYn0se3g6MCx5Oi12K2J9LHt4OnkseTotdn1dOmQuaGFzKCJyaWdodCIpJiZkLmhhcygibGVmdCIpP1t7eDpiLHk6MH0se3g6Yix5Oi1UfSx7eDp5LWIseTotVH0se3g6eS1iLHk6MH0se3g6eSx5Oi12LzJ9LHt4OnktYix5Oi12fSx7eDp5LWIseTotditUfSx7eDpiLHk6LXYrVH0se3g6Yix5Oi12fSx7eDowLHk6LXYvMn1dOmQuaGFzKCJ1cCIpJiZkLmhhcygiZG93biIpP1t7eDp5LzIseTowfSx7eDowLHk6LVR9LHt4OmIseTotVH0se3g6Yix5Oi12K1R9LHt4OjAseTotditUfSx7eDp5LzIseTotdn0se3g6eSx5Oi12K1R9LHt4OnktYix5Oi12K1R9LHt4OnktYix5Oi1UfSx7eDp5LHk6LVR9XTpkLmhhcygicmlnaHQiKSYmZC5oYXMoInVwIik/W3t4OjAseTowfSx7eDp5LHk6LWJ9LHt4OjAseTotdn1dOmQuaGFzKCJyaWdodCIpJiZkLmhhcygiZG93biIpP1t7eDowLHk6MH0se3g6eSx5OjB9LHt4OjAseTotdn1dOmQuaGFzKCJsZWZ0IikmJmQuaGFzKCJ1cCIpP1t7eDp5LHk6MH0se3g6MCx5Oi1ifSx7eDp5LHk6LXZ9XTpkLmhhcygibGVmdCIpJiZkLmhhcygiZG93biIpP1t7eDp5LHk6MH0se3g6MCx5OjB9LHt4OnkseTotdn1dOmQuaGFzKCJyaWdodCIpP1t7eDpiLHk6LVR9LHt4OmIseTotVH0se3g6eS1iLHk6LVR9LHt4OnktYix5OjB9LHt4OnkseTotdi8yfSx7eDp5LWIseTotdn0se3g6eS1iLHk6LXYrVH0se3g6Yix5Oi12K1R9LHt4OmIseTotditUfV06ZC5oYXMoImxlZnQiKT9be3g6Yix5OjB9LHt4OmIseTotVH0se3g6eS1iLHk6LVR9LHt4OnktYix5Oi12K1R9LHt4OmIseTotditUfSx7eDpiLHk6LXZ9LHt4OjAseTotdi8yfV06ZC5oYXMoInVwIik/W3t4OmIseTotVH0se3g6Yix5Oi12K1R9LHt4OjAseTotditUfSx7eDp5LzIseTotdn0se3g6eSx5Oi12K1R9LHt4OnktYix5Oi12K1R9LHt4OnktYix5Oi1UfV06ZC5oYXMoImRvd24iKT9be3g6eS8yLHk6MH0se3g6MCx5Oi1UfSx7eDpiLHk6LVR9LHt4OmIseTotditUfSx7eDp5LWIseTotditUfSx7eDp5LWIseTotVH0se3g6eSx5Oi1UfV06W3t4OjAseTowfV19LGtVZT1pPT5pPyIgIitpOiIiLGRtPShpLHMpPT5gJHtzfHwibm9kZSBkZWZhdWx0In0ke2tVZShpLmNsYXNzZXMpfSAke2tVZShpLmNsYXNzKX1gLEVVZT1hc3luYyhpLHMpPT57Y29uc3R7c2hhcGVTdmc6dSxiYm94OmR9PWF3YWl0IGcxKGkscyxkbShzLHZvaWQgMCksITApLHA9ZC53aWR0aCtzLnBhZGRpbmcsdj1kLmhlaWdodCtzLnBhZGRpbmcsYj1wK3YseT1be3g6Yi8yLHk6MH0se3g6Yix5Oi1iLzJ9LHt4OmIvMix5Oi1ifSx7eDowLHk6LWIvMn1dO1hlLmluZm8oIlF1ZXN0aW9uIG1haW4gKENpcmNsZSkiKTtjb25zdCBUPXI1KHUsYixiLHkpO3JldHVybiBULmF0dHIoInN0eWxlIixzLnN0eWxlKSxLaChzLFQpLHMuaW50ZXJzZWN0PWZ1bmN0aW9uKF8pe3JldHVybiBYZS53YXJuKCJJbnRlcnNlY3QgY2FsbGVkIikseWgucG9seWdvbihzLHksXyl9LHV9LFFadD0oaSxzKT0+e2NvbnN0IHU9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixzLmRvbUlkfHxzLmlkKSxkPTI4LHA9W3t4OjAseTpkLzJ9LHt4OmQvMix5OjB9LHt4OjAseTotZC8yfSx7eDotZC8yLHk6MH1dO3JldHVybiB1Lmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIscC5tYXAoZnVuY3Rpb24oYil7cmV0dXJuIGIueCsiLCIrYi55fSkuam9pbigiICIpKS5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDI4KS5hdHRyKCJoZWlnaHQiLDI4KSxzLndpZHRoPTI4LHMuaGVpZ2h0PTI4LHMuaW50ZXJzZWN0PWZ1bmN0aW9uKGIpe3JldHVybiB5aC5jaXJjbGUocywxNCxiKX0sdX0sSlp0PWFzeW5jKGkscyk9Pntjb25zdHtzaGFwZVN2Zzp1LGJib3g6ZH09YXdhaXQgZzEoaSxzLGRtKHMsdm9pZCAwKSwhMCkscD00LHY9ZC5oZWlnaHQrcy5wYWRkaW5nLGI9di9wLHk9ZC53aWR0aCsyKmIrcy5wYWRkaW5nLFQ9W3t4OmIseTowfSx7eDp5LWIseTowfSx7eDp5LHk6LXYvMn0se3g6eS1iLHk6LXZ9LHt4OmIseTotdn0se3g6MCx5Oi12LzJ9XSxfPXI1KHUseSx2LFQpO3JldHVybiBfLmF0dHIoInN0eWxlIixzLnN0eWxlKSxLaChzLF8pLHMuaW50ZXJzZWN0PWZ1bmN0aW9uKEEpe3JldHVybiB5aC5wb2x5Z29uKHMsVCxBKX0sdX0sWlp0PWFzeW5jKGkscyk9Pntjb25zdHtzaGFwZVN2Zzp1LGJib3g6ZH09YXdhaXQgZzEoaSxzLHZvaWQgMCwhMCkscD0yLHY9ZC5oZWlnaHQrMipzLnBhZGRpbmcsYj12L3AseT1kLndpZHRoKzIqYitzLnBhZGRpbmcsVD1YWnQocy5kaXJlY3Rpb25zLGQscyksXz1yNSh1LHksdixUKTtyZXR1cm4gXy5hdHRyKCJzdHlsZSIscy5zdHlsZSksS2gocyxfKSxzLmludGVyc2VjdD1mdW5jdGlvbihBKXtyZXR1cm4geWgucG9seWdvbihzLFQsQSl9LHV9LGVlbj1hc3luYyhpLHMpPT57Y29uc3R7c2hhcGVTdmc6dSxiYm94OmR9PWF3YWl0IGcxKGkscyxkbShzLHZvaWQgMCksITApLHA9ZC53aWR0aCtzLnBhZGRpbmcsdj1kLmhlaWdodCtzLnBhZGRpbmcsYj1be3g6LXYvMix5OjB9LHt4OnAseTowfSx7eDpwLHk6LXZ9LHt4Oi12LzIseTotdn0se3g6MCx5Oi12LzJ9XTtyZXR1cm4gcjUodSxwLHYsYikuYXR0cigic3R5bGUiLHMuc3R5bGUpLHMud2lkdGg9cCt2LHMuaGVpZ2h0PXYscy5pbnRlcnNlY3Q9ZnVuY3Rpb24oVCl7cmV0dXJuIHloLnBvbHlnb24ocyxiLFQpfSx1fSx0ZW49YXN5bmMoaSxzKT0+e2NvbnN0e3NoYXBlU3ZnOnUsYmJveDpkfT1hd2FpdCBnMShpLHMsZG0ocyksITApLHA9ZC53aWR0aCtzLnBhZGRpbmcsdj1kLmhlaWdodCtzLnBhZGRpbmcsYj1be3g6LTIqdi82LHk6MH0se3g6cC12LzYseTowfSx7eDpwKzIqdi82LHk6LXZ9LHt4OnYvNix5Oi12fV0seT1yNSh1LHAsdixiKTtyZXR1cm4geS5hdHRyKCJzdHlsZSIscy5zdHlsZSksS2gocyx5KSxzLmludGVyc2VjdD1mdW5jdGlvbihUKXtyZXR1cm4geWgucG9seWdvbihzLGIsVCl9LHV9LG5lbj1hc3luYyhpLHMpPT57Y29uc3R7c2hhcGVTdmc6dSxiYm94OmR9PWF3YWl0IGcxKGkscyxkbShzLHZvaWQgMCksITApLHA9ZC53aWR0aCtzLnBhZGRpbmcsdj1kLmhlaWdodCtzLnBhZGRpbmcsYj1be3g6Mip2LzYseTowfSx7eDpwK3YvNix5OjB9LHt4OnAtMip2LzYseTotdn0se3g6LXYvNix5Oi12fV0seT1yNSh1LHAsdixiKTtyZXR1cm4geS5hdHRyKCJzdHlsZSIscy5zdHlsZSksS2gocyx5KSxzLmludGVyc2VjdD1mdW5jdGlvbihUKXtyZXR1cm4geWgucG9seWdvbihzLGIsVCl9LHV9LHJlbj1hc3luYyhpLHMpPT57Y29uc3R7c2hhcGVTdmc6dSxiYm94OmR9PWF3YWl0IGcxKGkscyxkbShzLHZvaWQgMCksITApLHA9ZC53aWR0aCtzLnBhZGRpbmcsdj1kLmhlaWdodCtzLnBhZGRpbmcsYj1be3g6LTIqdi82LHk6MH0se3g6cCsyKnYvNix5OjB9LHt4OnAtdi82LHk6LXZ9LHt4OnYvNix5Oi12fV0seT1yNSh1LHAsdixiKTtyZXR1cm4geS5hdHRyKCJzdHlsZSIscy5zdHlsZSksS2gocyx5KSxzLmludGVyc2VjdD1mdW5jdGlvbihUKXtyZXR1cm4geWgucG9seWdvbihzLGIsVCl9LHV9LGllbj1hc3luYyhpLHMpPT57Y29uc3R7c2hhcGVTdmc6dSxiYm94OmR9PWF3YWl0IGcxKGkscyxkbShzLHZvaWQgMCksITApLHA9ZC53aWR0aCtzLnBhZGRpbmcsdj1kLmhlaWdodCtzLnBhZGRpbmcsYj1be3g6di82LHk6MH0se3g6cC12LzYseTowfSx7eDpwKzIqdi82LHk6LXZ9LHt4Oi0yKnYvNix5Oi12fV0seT1yNSh1LHAsdixiKTtyZXR1cm4geS5hdHRyKCJzdHlsZSIscy5zdHlsZSksS2gocyx5KSxzLmludGVyc2VjdD1mdW5jdGlvbihUKXtyZXR1cm4geWgucG9seWdvbihzLGIsVCl9LHV9LHNlbj1hc3luYyhpLHMpPT57Y29uc3R7c2hhcGVTdmc6dSxiYm94OmR9PWF3YWl0IGcxKGkscyxkbShzLHZvaWQgMCksITApLHA9ZC53aWR0aCtzLnBhZGRpbmcsdj1kLmhlaWdodCtzLnBhZGRpbmcsYj1be3g6MCx5OjB9LHt4OnArdi8yLHk6MH0se3g6cCx5Oi12LzJ9LHt4OnArdi8yLHk6LXZ9LHt4OjAseTotdn1dLHk9cjUodSxwLHYsYik7cmV0dXJuIHkuYXR0cigic3R5bGUiLHMuc3R5bGUpLEtoKHMseSkscy5pbnRlcnNlY3Q9ZnVuY3Rpb24oVCl7cmV0dXJuIHloLnBvbHlnb24ocyxiLFQpfSx1fSxhZW49YXN5bmMoaSxzKT0+e2NvbnN0e3NoYXBlU3ZnOnUsYmJveDpkfT1hd2FpdCBnMShpLHMsZG0ocyx2b2lkIDApLCEwKSxwPWQud2lkdGgrcy5wYWRkaW5nLHY9cC8yLGI9di8oMi41K3AvNTApLHk9ZC5oZWlnaHQrYitzLnBhZGRpbmcsVD0iTSAwLCIrYisiIGEgIit2KyIsIitiKyIgMCwwLDAgIitwKyIgMCBhICIrdisiLCIrYisiIDAsMCwwICIrLXArIiAwIGwgMCwiK3krIiBhICIrdisiLCIrYisiIDAsMCwwICIrcCsiIDAgbCAwLCIrLXksXz11LmF0dHIoImxhYmVsLW9mZnNldC15IixiKS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJzdHlsZSIscy5zdHlsZSkuYXR0cigiZCIsVCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXAvMisiLCIrLSh5LzIrYikrIikiKTtyZXR1cm4gS2gocyxfKSxzLmludGVyc2VjdD1mdW5jdGlvbihBKXtjb25zdCBQPXloLnJlY3QocyxBKSxSPVAueC1zLng7aWYodiE9MCYmKE1hdGguYWJzKFIpPHMud2lkdGgvMnx8TWF0aC5hYnMoUik9PXMud2lkdGgvMiYmTWF0aC5hYnMoUC55LXMueSk+cy5oZWlnaHQvMi1iKSl7bGV0IEY9YipiKigxLVIqUi8odip2KSk7RiE9MCYmKEY9TWF0aC5zcXJ0KEYpKSxGPWItRixBLnktcy55PjAmJihGPS1GKSxQLnkrPUZ9cmV0dXJuIFB9LHV9LG9lbj1hc3luYyhpLHMpPT57Y29uc3R7c2hhcGVTdmc6dSxiYm94OmQsaGFsZlBhZGRpbmc6cH09YXdhaXQgZzEoaSxzLCJub2RlICIrcy5jbGFzc2VzKyIgIitzLmNsYXNzLCEwKSx2PXUuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksYj1zLnBvc2l0aW9uZWQ/cy53aWR0aDpkLndpZHRoK3MucGFkZGluZyx5PXMucG9zaXRpb25lZD9zLmhlaWdodDpkLmhlaWdodCtzLnBhZGRpbmcsVD1zLnBvc2l0aW9uZWQ/LWIvMjotZC53aWR0aC8yLXAsXz1zLnBvc2l0aW9uZWQ/LXkvMjotZC5oZWlnaHQvMi1wO2lmKHYuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIscy5zdHlsZSkuYXR0cigicngiLHMucngpLmF0dHIoInJ5IixzLnJ5KS5hdHRyKCJ4IixUKS5hdHRyKCJ5IixfKS5hdHRyKCJ3aWR0aCIsYikuYXR0cigiaGVpZ2h0Iix5KSxzLnByb3BzKXtjb25zdCBBPW5ldyBTZXQoT2JqZWN0LmtleXMocy5wcm9wcykpO3MucHJvcHMuYm9yZGVycyYmKGptZSh2LHMucHJvcHMuYm9yZGVycyxiLHkpLEEuZGVsZXRlKCJib3JkZXJzIikpLEEuZm9yRWFjaChQPT57WGUud2FybihgVW5rbm93biBub2RlIHByb3BlcnR5ICR7UH1gKX0pfXJldHVybiBLaChzLHYpLHMuaW50ZXJzZWN0PWZ1bmN0aW9uKEEpe3JldHVybiB5aC5yZWN0KHMsQSl9LHV9LGNlbj1hc3luYyhpLHMpPT57Y29uc3R7c2hhcGVTdmc6dSxiYm94OmQsaGFsZlBhZGRpbmc6cH09YXdhaXQgZzEoaSxzLCJub2RlICIrcy5jbGFzc2VzLCEwKSx2PXUuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksYj1zLnBvc2l0aW9uZWQ/cy53aWR0aDpkLndpZHRoK3MucGFkZGluZyx5PXMucG9zaXRpb25lZD9zLmhlaWdodDpkLmhlaWdodCtzLnBhZGRpbmcsVD1zLnBvc2l0aW9uZWQ/LWIvMjotZC53aWR0aC8yLXAsXz1zLnBvc2l0aW9uZWQ/LXkvMjotZC5oZWlnaHQvMi1wO2lmKHYuYXR0cigiY2xhc3MiLCJiYXNpYyBjbHVzdGVyIGNvbXBvc2l0ZSBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIscy5zdHlsZSkuYXR0cigicngiLHMucngpLmF0dHIoInJ5IixzLnJ5KS5hdHRyKCJ4IixUKS5hdHRyKCJ5IixfKS5hdHRyKCJ3aWR0aCIsYikuYXR0cigiaGVpZ2h0Iix5KSxzLnByb3BzKXtjb25zdCBBPW5ldyBTZXQoT2JqZWN0LmtleXMocy5wcm9wcykpO3MucHJvcHMuYm9yZGVycyYmKGptZSh2LHMucHJvcHMuYm9yZGVycyxiLHkpLEEuZGVsZXRlKCJib3JkZXJzIikpLEEuZm9yRWFjaChQPT57WGUud2FybihgVW5rbm93biBub2RlIHByb3BlcnR5ICR7UH1gKX0pfXJldHVybiBLaChzLHYpLHMuaW50ZXJzZWN0PWZ1bmN0aW9uKEEpe3JldHVybiB5aC5yZWN0KHMsQSl9LHV9LHVlbj1hc3luYyhpLHMpPT57Y29uc3R7c2hhcGVTdmc6dX09YXdhaXQgZzEoaSxzLCJsYWJlbCIsITApO1hlLnRyYWNlKCJDbGFzc2VzID0gIixzLmNsYXNzKTtjb25zdCBkPXUuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikscD0wLHY9MDtpZihkLmF0dHIoIndpZHRoIixwKS5hdHRyKCJoZWlnaHQiLHYpLHUuYXR0cigiY2xhc3MiLCJsYWJlbCBlZGdlTGFiZWwiKSxzLnByb3BzKXtjb25zdCBiPW5ldyBTZXQoT2JqZWN0LmtleXMocy5wcm9wcykpO3MucHJvcHMuYm9yZGVycyYmKGptZShkLHMucHJvcHMuYm9yZGVycyxwLHYpLGIuZGVsZXRlKCJib3JkZXJzIikpLGIuZm9yRWFjaCh5PT57WGUud2FybihgVW5rbm93biBub2RlIHByb3BlcnR5ICR7eX1gKX0pfXJldHVybiBLaChzLGQpLHMuaW50ZXJzZWN0PWZ1bmN0aW9uKGIpe3JldHVybiB5aC5yZWN0KHMsYil9LHV9O2Z1bmN0aW9uIGptZShpLHMsdSxkKXtjb25zdCBwPVtdLHY9eT0+e3AucHVzaCh5LDApfSxiPXk9PntwLnB1c2goMCx5KX07cy5pbmNsdWRlcygidCIpPyhYZS5kZWJ1ZygiYWRkIHRvcCBib3JkZXIiKSx2KHUpKTpiKHUpLHMuaW5jbHVkZXMoInIiKT8oWGUuZGVidWcoImFkZCByaWdodCBib3JkZXIiKSx2KGQpKTpiKGQpLHMuaW5jbHVkZXMoImIiKT8oWGUuZGVidWcoImFkZCBib3R0b20gYm9yZGVyIiksdih1KSk6Yih1KSxzLmluY2x1ZGVzKCJsIik/KFhlLmRlYnVnKCJhZGQgbGVmdCBib3JkZXIiKSx2KGQpKTpiKGQpLGkuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIscC5qb2luKCIgIikpfWNvbnN0IGxlbj0oaSxzKT0+e2xldCB1O3MuY2xhc3Nlcz91PSJub2RlICIrcy5jbGFzc2VzOnU9Im5vZGUgZGVmYXVsdCI7Y29uc3QgZD1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIix1KS5hdHRyKCJpZCIscy5kb21JZHx8cy5pZCkscD1kLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHY9ZC5pbnNlcnQoImxpbmUiKSxiPWQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLHk9cy5sYWJlbFRleHQuZmxhdD9zLmxhYmVsVGV4dC5mbGF0KCk6cy5sYWJlbFRleHQ7bGV0IFQ9IiI7dHlwZW9mIHk9PSJvYmplY3QiP1Q9eVswXTpUPXksWGUuaW5mbygiTGFiZWwgdGV4dCBhYmM3OSIsVCx5LHR5cGVvZiB5PT0ib2JqZWN0Iik7Y29uc3QgXz1iLm5vZGUoKS5hcHBlbmRDaGlsZCgkMihULHMubGFiZWxTdHlsZSwhMCwhMCkpO2xldCBBPXt3aWR0aDowLGhlaWdodDowfTtpZihmMShxdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7Y29uc3QgSz1fLmNoaWxkcmVuWzBdLGVlPUlyKF8pO0E9Sy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxlZS5hdHRyKCJ3aWR0aCIsQS53aWR0aCksZWUuYXR0cigiaGVpZ2h0IixBLmhlaWdodCl9WGUuaW5mbygiVGV4dCAyIix5KTtjb25zdCBQPXkuc2xpY2UoMSx5Lmxlbmd0aCk7bGV0IFI9Xy5nZXRCQm94KCk7Y29uc3QgRj1iLm5vZGUoKS5hcHBlbmRDaGlsZCgkMihQLmpvaW4/UC5qb2luKCI8YnIvPiIpOlAscy5sYWJlbFN0eWxlLCEwLCEwKSk7aWYoZjEocXQoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IEs9Ri5jaGlsZHJlblswXSxlZT1JcihGKTtBPUsuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZWUuYXR0cigid2lkdGgiLEEud2lkdGgpLGVlLmF0dHIoImhlaWdodCIsQS5oZWlnaHQpfWNvbnN0IGo9cy5wYWRkaW5nLzI7cmV0dXJuIElyKEYpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoQS53aWR0aD5SLndpZHRoPzA6KFIud2lkdGgtQS53aWR0aCkvMikrIiwgIisoUi5oZWlnaHQrais1KSsiKSIpLElyKF8pLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoQS53aWR0aDxSLndpZHRoPzA6LShSLndpZHRoLUEud2lkdGgpLzIpKyIsIDApIiksQT1iLm5vZGUoKS5nZXRCQm94KCksYi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistQS53aWR0aC8yKyIsICIrKC1BLmhlaWdodC8yLWorMykrIikiKSxwLmF0dHIoImNsYXNzIiwib3V0ZXIgdGl0bGUtc3RhdGUiKS5hdHRyKCJ4IiwtQS53aWR0aC8yLWopLmF0dHIoInkiLC1BLmhlaWdodC8yLWopLmF0dHIoIndpZHRoIixBLndpZHRoK3MucGFkZGluZykuYXR0cigiaGVpZ2h0IixBLmhlaWdodCtzLnBhZGRpbmcpLHYuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1BLndpZHRoLzItaikuYXR0cigieDIiLEEud2lkdGgvMitqKS5hdHRyKCJ5MSIsLUEuaGVpZ2h0LzItaitSLmhlaWdodCtqKS5hdHRyKCJ5MiIsLUEuaGVpZ2h0LzItaitSLmhlaWdodCtqKSxLaChzLHApLHMuaW50ZXJzZWN0PWZ1bmN0aW9uKEspe3JldHVybiB5aC5yZWN0KHMsSyl9LGR9LGhlbj1hc3luYyhpLHMpPT57Y29uc3R7c2hhcGVTdmc6dSxiYm94OmR9PWF3YWl0IGcxKGkscyxkbShzLHZvaWQgMCksITApLHA9ZC5oZWlnaHQrcy5wYWRkaW5nLHY9ZC53aWR0aCtwLzQrcy5wYWRkaW5nLGI9dS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJzdHlsZSIscy5zdHlsZSkuYXR0cigicngiLHAvMikuYXR0cigicnkiLHAvMikuYXR0cigieCIsLXYvMikuYXR0cigieSIsLXAvMikuYXR0cigid2lkdGgiLHYpLmF0dHIoImhlaWdodCIscCk7cmV0dXJuIEtoKHMsYikscy5pbnRlcnNlY3Q9ZnVuY3Rpb24oeSl7cmV0dXJuIHloLnJlY3Qocyx5KX0sdX0sZmVuPWFzeW5jKGkscyk9Pntjb25zdHtzaGFwZVN2Zzp1LGJib3g6ZCxoYWxmUGFkZGluZzpwfT1hd2FpdCBnMShpLHMsZG0ocyx2b2lkIDApLCEwKSx2PXUuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gdi5hdHRyKCJzdHlsZSIscy5zdHlsZSkuYXR0cigicngiLHMucngpLmF0dHIoInJ5IixzLnJ5KS5hdHRyKCJyIixkLndpZHRoLzIrcCkuYXR0cigid2lkdGgiLGQud2lkdGgrcy5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLGQuaGVpZ2h0K3MucGFkZGluZyksWGUuaW5mbygiQ2lyY2xlIG1haW4iKSxLaChzLHYpLHMuaW50ZXJzZWN0PWZ1bmN0aW9uKGIpe3JldHVybiBYZS5pbmZvKCJDaXJjbGUgaW50ZXJzZWN0IixzLGQud2lkdGgvMitwLGIpLHloLmNpcmNsZShzLGQud2lkdGgvMitwLGIpfSx1fSxkZW49YXN5bmMoaSxzKT0+e2NvbnN0e3NoYXBlU3ZnOnUsYmJveDpkLGhhbGZQYWRkaW5nOnB9PWF3YWl0IGcxKGkscyxkbShzLHZvaWQgMCksITApLHY9NSxiPXUuaW5zZXJ0KCJnIiwiOmZpcnN0LWNoaWxkIikseT1iLmluc2VydCgiY2lyY2xlIiksVD1iLmluc2VydCgiY2lyY2xlIik7cmV0dXJuIGIuYXR0cigiY2xhc3MiLHMuY2xhc3MpLHkuYXR0cigic3R5bGUiLHMuc3R5bGUpLmF0dHIoInJ4IixzLnJ4KS5hdHRyKCJyeSIscy5yeSkuYXR0cigiciIsZC53aWR0aC8yK3ArdikuYXR0cigid2lkdGgiLGQud2lkdGgrcy5wYWRkaW5nK3YqMikuYXR0cigiaGVpZ2h0IixkLmhlaWdodCtzLnBhZGRpbmcrdioyKSxULmF0dHIoInN0eWxlIixzLnN0eWxlKS5hdHRyKCJyeCIscy5yeCkuYXR0cigicnkiLHMucnkpLmF0dHIoInIiLGQud2lkdGgvMitwKS5hdHRyKCJ3aWR0aCIsZC53aWR0aCtzLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsZC5oZWlnaHQrcy5wYWRkaW5nKSxYZS5pbmZvKCJEb3VibGVDaXJjbGUgbWFpbiIpLEtoKHMseSkscy5pbnRlcnNlY3Q9ZnVuY3Rpb24oXyl7cmV0dXJuIFhlLmluZm8oIkRvdWJsZUNpcmNsZSBpbnRlcnNlY3QiLHMsZC53aWR0aC8yK3ArdixfKSx5aC5jaXJjbGUocyxkLndpZHRoLzIrcCt2LF8pfSx1fSxnZW49YXN5bmMoaSxzKT0+e2NvbnN0e3NoYXBlU3ZnOnUsYmJveDpkfT1hd2FpdCBnMShpLHMsZG0ocyx2b2lkIDApLCEwKSxwPWQud2lkdGgrcy5wYWRkaW5nLHY9ZC5oZWlnaHQrcy5wYWRkaW5nLGI9W3t4OjAseTowfSx7eDpwLHk6MH0se3g6cCx5Oi12fSx7eDowLHk6LXZ9LHt4OjAseTowfSx7eDotOCx5OjB9LHt4OnArOCx5OjB9LHt4OnArOCx5Oi12fSx7eDotOCx5Oi12fSx7eDotOCx5OjB9XSx5PXI1KHUscCx2LGIpO3JldHVybiB5LmF0dHIoInN0eWxlIixzLnN0eWxlKSxLaChzLHkpLHMuaW50ZXJzZWN0PWZ1bmN0aW9uKFQpe3JldHVybiB5aC5wb2x5Z29uKHMsYixUKX0sdX0scGVuPShpLHMpPT57Y29uc3QgdT1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLHMuZG9tSWR8fHMuaWQpLGQ9dS5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBkLmF0dHIoImNsYXNzIiwic3RhdGUtc3RhcnQiKS5hdHRyKCJyIiw3KS5hdHRyKCJ3aWR0aCIsMTQpLmF0dHIoImhlaWdodCIsMTQpLEtoKHMsZCkscy5pbnRlcnNlY3Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHloLmNpcmNsZShzLDcscCl9LHV9LFRVZT0oaSxzLHUpPT57Y29uc3QgZD1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLHMuZG9tSWR8fHMuaWQpO2xldCBwPTcwLHY9MTA7dT09PSJMUiImJihwPTEwLHY9NzApO2NvbnN0IGI9ZC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtMSpwLzIpLmF0dHIoInkiLC0xKnYvMikuYXR0cigid2lkdGgiLHApLmF0dHIoImhlaWdodCIsdikuYXR0cigiY2xhc3MiLCJmb3JrLWpvaW4iKTtyZXR1cm4gS2gocyxiKSxzLmhlaWdodD1zLmhlaWdodCtzLnBhZGRpbmcvMixzLndpZHRoPXMud2lkdGgrcy5wYWRkaW5nLzIscy5pbnRlcnNlY3Q9ZnVuY3Rpb24oeSl7cmV0dXJuIHloLnJlY3Qocyx5KX0sZH0sQ1VlPXtyaG9tYnVzOkVVZSxjb21wb3NpdGU6Y2VuLHF1ZXN0aW9uOkVVZSxyZWN0Om9lbixsYWJlbFJlY3Q6dWVuLHJlY3RXaXRoVGl0bGU6bGVuLGNob2ljZTpRWnQsY2lyY2xlOmZlbixkb3VibGVjaXJjbGU6ZGVuLHN0YWRpdW06aGVuLGhleGFnb246Slp0LGJsb2NrX2Fycm93OlpadCxyZWN0X2xlZnRfaW52X2Fycm93OmVlbixsZWFuX3JpZ2h0OnRlbixsZWFuX2xlZnQ6bmVuLHRyYXBlem9pZDpyZW4saW52X3RyYXBlem9pZDppZW4scmVjdF9yaWdodF9pbnZfYXJyb3c6c2VuLGN5bGluZGVyOmFlbixzdGFydDpwZW4sZW5kOihpLHMpPT57Y29uc3QgdT1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLHMuZG9tSWR8fHMuaWQpLGQ9dS5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLHA9dS5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBwLmF0dHIoImNsYXNzIiwic3RhdGUtc3RhcnQiKS5hdHRyKCJyIiw3KS5hdHRyKCJ3aWR0aCIsMTQpLmF0dHIoImhlaWdodCIsMTQpLGQuYXR0cigiY2xhc3MiLCJzdGF0ZS1lbmQiKS5hdHRyKCJyIiw1KS5hdHRyKCJ3aWR0aCIsMTApLmF0dHIoImhlaWdodCIsMTApLEtoKHMscCkscy5pbnRlcnNlY3Q9ZnVuY3Rpb24odil7cmV0dXJuIHloLmNpcmNsZShzLDcsdil9LHV9LG5vdGU6V1p0LHN1YnJvdXRpbmU6Z2VuLGZvcms6VFVlLGpvaW46VFVlLGNsYXNzX2JveDooaSxzKT0+e2NvbnN0IHU9cy5wYWRkaW5nLzIsZD00LHA9ODtsZXQgdjtzLmNsYXNzZXM/dj0ibm9kZSAiK3MuY2xhc3Nlczp2PSJub2RlIGRlZmF1bHQiO2NvbnN0IGI9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsdikuYXR0cigiaWQiLHMuZG9tSWR8fHMuaWQpLHk9Yi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxUPWIuaW5zZXJ0KCJsaW5lIiksXz1iLmluc2VydCgibGluZSIpO2xldCBBPTAsUD1kO2NvbnN0IFI9Yi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIik7bGV0IEY9MDtjb25zdCBqPXMuY2xhc3NEYXRhLmFubm90YXRpb25zJiZzLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXSxLPXMuY2xhc3NEYXRhLmFubm90YXRpb25zWzBdPyLCqyIrcy5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0rIsK7IjoiIixlZT1SLm5vZGUoKS5hcHBlbmRDaGlsZCgkMihLLHMubGFiZWxTdHlsZSwhMCwhMCkpO2xldCBpZT1lZS5nZXRCQm94KCk7aWYoZjEocXQoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2NvbnN0IGRlPWVlLmNoaWxkcmVuWzBdLFg9SXIoZWUpO2llPWRlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFguYXR0cigid2lkdGgiLGllLndpZHRoKSxYLmF0dHIoImhlaWdodCIsaWUuaGVpZ2h0KX1zLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXSYmKFArPWllLmhlaWdodCtkLEErPWllLndpZHRoKTtsZXQgb2U9cy5jbGFzc0RhdGEubGFiZWw7cy5jbGFzc0RhdGEudHlwZSE9PXZvaWQgMCYmcy5jbGFzc0RhdGEudHlwZSE9PSIiJiYocXQoKS5mbG93Y2hhcnQuaHRtbExhYmVscz9vZSs9IiZsdDsiK3MuY2xhc3NEYXRhLnR5cGUrIiZndDsiOm9lKz0iPCIrcy5jbGFzc0RhdGEudHlwZSsiPiIpO2NvbnN0IHBlPVIubm9kZSgpLmFwcGVuZENoaWxkKCQyKG9lLHMubGFiZWxTdHlsZSwhMCwhMCkpO0lyKHBlKS5hdHRyKCJjbGFzcyIsImNsYXNzVGl0bGUiKTtsZXQgYmU9cGUuZ2V0QkJveCgpO2lmKGYxKHF0KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtjb25zdCBkZT1wZS5jaGlsZHJlblswXSxYPUlyKHBlKTtiZT1kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxYLmF0dHIoIndpZHRoIixiZS53aWR0aCksWC5hdHRyKCJoZWlnaHQiLGJlLmhlaWdodCl9UCs9YmUuaGVpZ2h0K2QsYmUud2lkdGg+QSYmKEE9YmUud2lkdGgpO2NvbnN0IGFlPVtdO3MuY2xhc3NEYXRhLm1lbWJlcnMuZm9yRWFjaChkZT0+e2NvbnN0IFg9ZGUuZ2V0RGlzcGxheURldGFpbHMoKTtsZXQgZ2U9WC5kaXNwbGF5VGV4dDtxdCgpLmZsb3djaGFydC5odG1sTGFiZWxzJiYoZ2U9Z2UucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikpO2NvbnN0IFc9Ui5ub2RlKCkuYXBwZW5kQ2hpbGQoJDIoZ2UsWC5jc3NTdHlsZT9YLmNzc1N0eWxlOnMubGFiZWxTdHlsZSwhMCwhMCkpO2xldCB4ZT1XLmdldEJCb3goKTtpZihmMShxdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7Y29uc3QgVT1XLmNoaWxkcmVuWzBdLEZlPUlyKFcpO3hlPVUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksRmUuYXR0cigid2lkdGgiLHhlLndpZHRoKSxGZS5hdHRyKCJoZWlnaHQiLHhlLmhlaWdodCl9eGUud2lkdGg+QSYmKEE9eGUud2lkdGgpLFArPXhlLmhlaWdodCtkLGFlLnB1c2goVyl9KSxQKz1wO2NvbnN0IG5lPVtdO2lmKHMuY2xhc3NEYXRhLm1ldGhvZHMuZm9yRWFjaChkZT0+e2NvbnN0IFg9ZGUuZ2V0RGlzcGxheURldGFpbHMoKTtsZXQgZ2U9WC5kaXNwbGF5VGV4dDtxdCgpLmZsb3djaGFydC5odG1sTGFiZWxzJiYoZ2U9Z2UucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikpO2NvbnN0IFc9Ui5ub2RlKCkuYXBwZW5kQ2hpbGQoJDIoZ2UsWC5jc3NTdHlsZT9YLmNzc1N0eWxlOnMubGFiZWxTdHlsZSwhMCwhMCkpO2xldCB4ZT1XLmdldEJCb3goKTtpZihmMShxdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7Y29uc3QgVT1XLmNoaWxkcmVuWzBdLEZlPUlyKFcpO3hlPVUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksRmUuYXR0cigid2lkdGgiLHhlLndpZHRoKSxGZS5hdHRyKCJoZWlnaHQiLHhlLmhlaWdodCl9eGUud2lkdGg+QSYmKEE9eGUud2lkdGgpLFArPXhlLmhlaWdodCtkLG5lLnB1c2goVyl9KSxQKz1wLGope2xldCBkZT0oQS1pZS53aWR0aCkvMjtJcihlZSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCAiKygtMSpBLzIrZGUpKyIsICIrLTEqUC8yKyIpIiksRj1pZS5oZWlnaHQrZH1sZXQgc2U9KEEtYmUud2lkdGgpLzI7cmV0dXJuIElyKHBlKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKC0xKkEvMitzZSkrIiwgIisoLTEqUC8yK0YpKyIpIiksRis9YmUuaGVpZ2h0K2QsVC5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4MSIsLUEvMi11KS5hdHRyKCJ4MiIsQS8yK3UpLmF0dHIoInkxIiwtUC8yLXUrcCtGKS5hdHRyKCJ5MiIsLVAvMi11K3ArRiksRis9cCxhZS5mb3JFYWNoKGRlPT57SXIoZGUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIistQS8yKyIsICIrKC0xKlAvMitGK3AvMikrIikiKTtjb25zdCBYPWRlPT1udWxsP3ZvaWQgMDpkZS5nZXRCQm94KCk7Ris9KChYPT1udWxsP3ZvaWQgMDpYLmhlaWdodCk/PzApK2R9KSxGKz1wLF8uYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1BLzItdSkuYXR0cigieDIiLEEvMit1KS5hdHRyKCJ5MSIsLVAvMi11K3ArRikuYXR0cigieTIiLC1QLzItdStwK0YpLEYrPXAsbmUuZm9yRWFjaChkZT0+e0lyKGRlKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrLUEvMisiLCAiKygtMSpQLzIrRikrIikiKTtjb25zdCBYPWRlPT1udWxsP3ZvaWQgMDpkZS5nZXRCQm94KCk7Ris9KChYPT1udWxsP3ZvaWQgMDpYLmhlaWdodCk/PzApK2R9KSx5LmF0dHIoInN0eWxlIixzLnN0eWxlKS5hdHRyKCJjbGFzcyIsIm91dGVyIHRpdGxlLXN0YXRlIikuYXR0cigieCIsLUEvMi11KS5hdHRyKCJ5IiwtKFAvMiktdSkuYXR0cigid2lkdGgiLEErcy5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLFArcy5wYWRkaW5nKSxLaChzLHkpLHMuaW50ZXJzZWN0PWZ1bmN0aW9uKGRlKXtyZXR1cm4geWgucmVjdChzLGRlKX0sYn19O2xldCBWRD17fTtjb25zdCB0Sj1hc3luYyhpLHMsdSk9PntsZXQgZCxwO2lmKHMubGluayl7bGV0IHY7cXQoKS5zZWN1cml0eUxldmVsPT09InNhbmRib3giP3Y9Il90b3AiOnMubGlua1RhcmdldCYmKHY9cy5saW5rVGFyZ2V0fHwiX2JsYW5rIiksZD1pLmluc2VydCgic3ZnOmEiKS5hdHRyKCJ4bGluazpocmVmIixzLmxpbmspLmF0dHIoInRhcmdldCIsdikscD1hd2FpdCBDVWVbcy5zaGFwZV0oZCxzLHUpfWVsc2UgcD1hd2FpdCBDVWVbcy5zaGFwZV0oaSxzLHUpLGQ9cDtyZXR1cm4gcy50b29sdGlwJiZwLmF0dHIoInRpdGxlIixzLnRvb2x0aXApLHMuY2xhc3MmJnAuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQgIitzLmNsYXNzKSxkLmF0dHIoImRhdGEtbm9kZSIsInRydWUiKSxkLmF0dHIoImRhdGEtaWQiLHMuaWQpLFZEW3MuaWRdPWQscy5oYXZlQ2FsbGJhY2smJlZEW3MuaWRdLmF0dHIoImNsYXNzIixWRFtzLmlkXS5hdHRyKCJjbGFzcyIpKyIgY2xpY2thYmxlIiksZH0sYmVuPShpLHMpPT57VkRbcy5pZF09aX0sbWVuPSgpPT57VkQ9e319LCRtZT1pPT57Y29uc3Qgcz1WRFtpLmlkXTtYZS50cmFjZSgiVHJhbnNmb3JtaW5nIG5vZGUiLGkuZGlmZixpLCJ0cmFuc2xhdGUoIisoaS54LWkud2lkdGgvMi01KSsiLCAiK2kud2lkdGgvMisiKSIpO2NvbnN0IHU9OCxkPWkuZGlmZnx8MDtyZXR1cm4gaS5jbHVzdGVyTm9kZT9zLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhpLngrZC1pLndpZHRoLzIpKyIsICIrKGkueS1pLmhlaWdodC8yLXUpKyIpIik6cy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpLngrIiwgIitpLnkrIikiKSxkfSxuSj0oe2Zsb3djaGFydDppfSk9Pnt2YXIgcCx2O2NvbnN0IHM9KChwPWk9PW51bGw/dm9pZCAwOmkuc3ViR3JhcGhUaXRsZU1hcmdpbik9PW51bGw/dm9pZCAwOnAudG9wKT8/MCx1PSgodj1pPT1udWxsP3ZvaWQgMDppLnN1YkdyYXBoVGl0bGVNYXJnaW4pPT1udWxsP3ZvaWQgMDp2LmJvdHRvbSk/PzAsZD1zK3U7cmV0dXJue3N1YkdyYXBoVGl0bGVUb3BNYXJnaW46cyxzdWJHcmFwaFRpdGxlQm90dG9tTWFyZ2luOnUsc3ViR3JhcGhUaXRsZVRvdGFsTWFyZ2luOmR9fSx2ZW49e3JlY3Q6KGkscyk9PntYZS5pbmZvKCJDcmVhdGluZyBzdWJncmFwaCByZWN0IGZvciAiLHMuaWQscyk7Y29uc3QgdT1xdCgpLGQ9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXIiKyhzLmNsYXNzPyIgIitzLmNsYXNzOiIiKSkuYXR0cigiaWQiLHMuaWQpLHA9ZC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSx2PWYxKHUuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpLGI9ZC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXItbGFiZWwiKSx5PXMubGFiZWxUeXBlPT09Im1hcmtkb3duIj9KUShiLHMubGFiZWxUZXh0LHtzdHlsZTpzLmxhYmVsU3R5bGUsdXNlSHRtbExhYmVsczp2fSk6Yi5ub2RlKCkuYXBwZW5kQ2hpbGQoJDIocy5sYWJlbFRleHQscy5sYWJlbFN0eWxlLHZvaWQgMCwhMCkpO2xldCBUPXkuZ2V0QkJveCgpO2lmKGYxKHUuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtjb25zdCBqPXkuY2hpbGRyZW5bMF0sSz1Jcih5KTtUPWouZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksSy5hdHRyKCJ3aWR0aCIsVC53aWR0aCksSy5hdHRyKCJoZWlnaHQiLFQuaGVpZ2h0KX1jb25zdCBfPTAqcy5wYWRkaW5nLEE9Xy8yLFA9cy53aWR0aDw9VC53aWR0aCtfP1Qud2lkdGgrXzpzLndpZHRoO3Mud2lkdGg8PVQud2lkdGgrXz9zLmRpZmY9KFQud2lkdGgtcy53aWR0aCkvMi1zLnBhZGRpbmcvMjpzLmRpZmY9LXMucGFkZGluZy8yLFhlLnRyYWNlKCJEYXRhICIscyxKU09OLnN0cmluZ2lmeShzKSkscC5hdHRyKCJzdHlsZSIscy5zdHlsZSkuYXR0cigicngiLHMucngpLmF0dHIoInJ5IixzLnJ5KS5hdHRyKCJ4IixzLngtUC8yKS5hdHRyKCJ5IixzLnktcy5oZWlnaHQvMi1BKS5hdHRyKCJ3aWR0aCIsUCkuYXR0cigiaGVpZ2h0IixzLmhlaWdodCtfKTtjb25zdHtzdWJHcmFwaFRpdGxlVG9wTWFyZ2luOlJ9PW5KKHUpO3Y/Yi5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtzLngtVC53aWR0aC8yfSwgJHtzLnktcy5oZWlnaHQvMitSfSlgKTpiLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3MueH0sICR7cy55LXMuaGVpZ2h0LzIrUn0pYCk7Y29uc3QgRj1wLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIHMud2lkdGg9Ri53aWR0aCxzLmhlaWdodD1GLmhlaWdodCxzLmludGVyc2VjdD1mdW5jdGlvbihqKXtyZXR1cm4gRFIocyxqKX0sZH0scm91bmRlZFdpdGhUaXRsZTooaSxzKT0+e2NvbnN0IHU9cXQoKSxkPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLHMuY2xhc3NlcykuYXR0cigiaWQiLHMuaWQpLHA9ZC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSx2PWQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVyLWxhYmVsIiksYj1kLmFwcGVuZCgicmVjdCIpLHk9di5ub2RlKCkuYXBwZW5kQ2hpbGQoJDIocy5sYWJlbFRleHQscy5sYWJlbFN0eWxlLHZvaWQgMCwhMCkpO2xldCBUPXkuZ2V0QkJveCgpO2lmKGYxKHUuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtjb25zdCBqPXkuY2hpbGRyZW5bMF0sSz1Jcih5KTtUPWouZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksSy5hdHRyKCJ3aWR0aCIsVC53aWR0aCksSy5hdHRyKCJoZWlnaHQiLFQuaGVpZ2h0KX1UPXkuZ2V0QkJveCgpO2NvbnN0IF89MCpzLnBhZGRpbmcsQT1fLzIsUD1zLndpZHRoPD1ULndpZHRoK3MucGFkZGluZz9ULndpZHRoK3MucGFkZGluZzpzLndpZHRoO3Mud2lkdGg8PVQud2lkdGgrcy5wYWRkaW5nP3MuZGlmZj0oVC53aWR0aCtzLnBhZGRpbmcqMC1zLndpZHRoKS8yOnMuZGlmZj0tcy5wYWRkaW5nLzIscC5hdHRyKCJjbGFzcyIsIm91dGVyIikuYXR0cigieCIscy54LVAvMi1BKS5hdHRyKCJ5IixzLnktcy5oZWlnaHQvMi1BKS5hdHRyKCJ3aWR0aCIsUCtfKS5hdHRyKCJoZWlnaHQiLHMuaGVpZ2h0K18pLGIuYXR0cigiY2xhc3MiLCJpbm5lciIpLmF0dHIoIngiLHMueC1QLzItQSkuYXR0cigieSIscy55LXMuaGVpZ2h0LzItQStULmhlaWdodC0xKS5hdHRyKCJ3aWR0aCIsUCtfKS5hdHRyKCJoZWlnaHQiLHMuaGVpZ2h0K18tVC5oZWlnaHQtMyk7Y29uc3R7c3ViR3JhcGhUaXRsZVRvcE1hcmdpbjpSfT1uSih1KTt2LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3MueC1ULndpZHRoLzJ9LCAke3MueS1zLmhlaWdodC8yLXMucGFkZGluZy8zKyhmMSh1LmZsb3djaGFydC5odG1sTGFiZWxzKT81OjMpK1J9KWApO2NvbnN0IEY9cC5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBzLmhlaWdodD1GLmhlaWdodCxzLmludGVyc2VjdD1mdW5jdGlvbihqKXtyZXR1cm4gRFIocyxqKX0sZH0sbm90ZUdyb3VwOihpLHMpPT57Y29uc3QgdT1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm90ZS1jbHVzdGVyIikuYXR0cigiaWQiLHMuaWQpLGQ9dS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxwPTAqcy5wYWRkaW5nLHY9cC8yO2QuYXR0cigicngiLHMucngpLmF0dHIoInJ5IixzLnJ5KS5hdHRyKCJ4IixzLngtcy53aWR0aC8yLXYpLmF0dHIoInkiLHMueS1zLmhlaWdodC8yLXYpLmF0dHIoIndpZHRoIixzLndpZHRoK3ApLmF0dHIoImhlaWdodCIscy5oZWlnaHQrcCkuYXR0cigiZmlsbCIsIm5vbmUiKTtjb25zdCBiPWQubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gcy53aWR0aD1iLndpZHRoLHMuaGVpZ2h0PWIuaGVpZ2h0LHMuaW50ZXJzZWN0PWZ1bmN0aW9uKHkpe3JldHVybiBEUihzLHkpfSx1fSxkaXZpZGVyOihpLHMpPT57Y29uc3QgdT1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixzLmNsYXNzZXMpLmF0dHIoImlkIixzLmlkKSxkPXUuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikscD0wKnMucGFkZGluZyx2PXAvMjtkLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpLmF0dHIoIngiLHMueC1zLndpZHRoLzItdikuYXR0cigieSIscy55LXMuaGVpZ2h0LzIpLmF0dHIoIndpZHRoIixzLndpZHRoK3ApLmF0dHIoImhlaWdodCIscy5oZWlnaHQrcCk7Y29uc3QgYj1kLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIHMud2lkdGg9Yi53aWR0aCxzLmhlaWdodD1iLmhlaWdodCxzLmRpZmY9LXMucGFkZGluZy8yLHMuaW50ZXJzZWN0PWZ1bmN0aW9uKHkpe3JldHVybiBEUihzLHkpfSx1fX07bGV0IFNVZT17fTtjb25zdCB3ZW49KGkscyk9PntYZS50cmFjZSgiSW5zZXJ0aW5nIGNsdXN0ZXIiKTtjb25zdCB1PXMuc2hhcGV8fCJyZWN0IjtTVWVbcy5pZF09dmVuW3VdKGkscyl9LHllbj0oKT0+e1NVZT17fX0sUDk9e2FnZ3JlZ2F0aW9uOjE4LGV4dGVuc2lvbjoxOCxjb21wb3NpdGlvbjoxOCxkZXBlbmRlbmN5OjYsbG9sbGlwb3A6MTMuNSxhcnJvd19wb2ludDo1LjN9O2Z1bmN0aW9uIHJKKGkscyl7aWYoaT09PXZvaWQgMHx8cz09PXZvaWQgMClyZXR1cm57YW5nbGU6MCxkZWx0YVg6MCxkZWx0YVk6MH07aT1pSihpKSxzPWlKKHMpO2NvbnN0W3UsZF09W2kueCxpLnldLFtwLHZdPVtzLngscy55XSxiPXAtdSx5PXYtZDtyZXR1cm57YW5nbGU6TWF0aC5hdGFuKHkvYiksZGVsdGFYOmIsZGVsdGFZOnl9fWNvbnN0IGlKPWk9PkFycmF5LmlzQXJyYXkoaSk/e3g6aVswXSx5OmlbMV19OmksX1VlPWk9Pih7eDpmdW5jdGlvbihzLHUsZCl7bGV0IHA9MDtpZih1PT09MCYmT2JqZWN0Lmhhc093bihQOSxpLmFycm93VHlwZVN0YXJ0KSl7Y29uc3R7YW5nbGU6dixkZWx0YVg6Yn09ckooZFswXSxkWzFdKTtwPVA5W2kuYXJyb3dUeXBlU3RhcnRdKk1hdGguY29zKHYpKihiPj0wPzE6LTEpfWVsc2UgaWYodT09PWQubGVuZ3RoLTEmJk9iamVjdC5oYXNPd24oUDksaS5hcnJvd1R5cGVFbmQpKXtjb25zdHthbmdsZTp2LGRlbHRhWDpifT1ySihkW2QubGVuZ3RoLTFdLGRbZC5sZW5ndGgtMl0pO3A9UDlbaS5hcnJvd1R5cGVFbmRdKk1hdGguY29zKHYpKihiPj0wPzE6LTEpfXJldHVybiBpSihzKS54K3B9LHk6ZnVuY3Rpb24ocyx1LGQpe2xldCBwPTA7aWYodT09PTAmJk9iamVjdC5oYXNPd24oUDksaS5hcnJvd1R5cGVTdGFydCkpe2NvbnN0e2FuZ2xlOnYsZGVsdGFZOmJ9PXJKKGRbMF0sZFsxXSk7cD1QOVtpLmFycm93VHlwZVN0YXJ0XSpNYXRoLmFicyhNYXRoLnNpbih2KSkqKGI+PTA/MTotMSl9ZWxzZSBpZih1PT09ZC5sZW5ndGgtMSYmT2JqZWN0Lmhhc093bihQOSxpLmFycm93VHlwZUVuZCkpe2NvbnN0e2FuZ2xlOnYsZGVsdGFZOmJ9PXJKKGRbZC5sZW5ndGgtMV0sZFtkLmxlbmd0aC0yXSk7cD1QOVtpLmFycm93VHlwZUVuZF0qTWF0aC5hYnMoTWF0aC5zaW4odikpKihiPj0wPzE6LTEpfXJldHVybiBpSihzKS55K3B9fSksQVVlPShpLHMsdSxkLHApPT57cy5hcnJvd1R5cGVTdGFydCYmTFVlKGksInN0YXJ0IixzLmFycm93VHlwZVN0YXJ0LHUsZCxwKSxzLmFycm93VHlwZUVuZCYmTFVlKGksImVuZCIscy5hcnJvd1R5cGVFbmQsdSxkLHApfSx4ZW49e2Fycm93X2Nyb3NzOiJjcm9zcyIsYXJyb3dfcG9pbnQ6InBvaW50IixhcnJvd19iYXJiOiJiYXJiIixhcnJvd19jaXJjbGU6ImNpcmNsZSIsYWdncmVnYXRpb246ImFnZ3JlZ2F0aW9uIixleHRlbnNpb246ImV4dGVuc2lvbiIsY29tcG9zaXRpb246ImNvbXBvc2l0aW9uIixkZXBlbmRlbmN5OiJkZXBlbmRlbmN5Iixsb2xsaXBvcDoibG9sbGlwb3AifSxMVWU9KGkscyx1LGQscCx2KT0+e2NvbnN0IGI9eGVuW3VdO2lmKCFiKXtYZS53YXJuKGBVbmtub3duIGFycm93IHR5cGU6ICR7dX1gKTtyZXR1cm59Y29uc3QgeT1zPT09InN0YXJ0Ij8iU3RhcnQiOiJFbmQiO2kuYXR0cihgbWFya2VyLSR7c31gLGB1cmwoJHtkfSMke3B9XyR7dn0tJHtifSR7eX0pYCl9O2xldCBzSj17fSxWZD17fTtjb25zdCBrZW49KCk9PntzSj17fSxWZD17fX0sem1lPShpLHMpPT57Y29uc3QgdT1mMShxdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKSxkPXMubGFiZWxUeXBlPT09Im1hcmtkb3duIj9KUShpLHMubGFiZWwse3N0eWxlOnMubGFiZWxTdHlsZSx1c2VIdG1sTGFiZWxzOnUsYWRkU3ZnQmFja2dyb3VuZDohMH0pOiQyKHMubGFiZWwscy5sYWJlbFN0eWxlKSxwPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlTGFiZWwiKSx2PXAuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpO3Yubm9kZSgpLmFwcGVuZENoaWxkKGQpO2xldCBiPWQuZ2V0QkJveCgpO2lmKHUpe2NvbnN0IFQ9ZC5jaGlsZHJlblswXSxfPUlyKGQpO2I9VC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxfLmF0dHIoIndpZHRoIixiLndpZHRoKSxfLmF0dHIoImhlaWdodCIsYi5oZWlnaHQpfXYuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWIud2lkdGgvMisiLCAiKy1iLmhlaWdodC8yKyIpIiksc0pbcy5pZF09cCxzLndpZHRoPWIud2lkdGgscy5oZWlnaHQ9Yi5oZWlnaHQ7bGV0IHk7aWYocy5zdGFydExhYmVsTGVmdCl7Y29uc3QgVD0kMihzLnN0YXJ0TGFiZWxMZWZ0LHMubGFiZWxTdHlsZSksXz1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLEE9Xy5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7eT1BLm5vZGUoKS5hcHBlbmRDaGlsZChUKTtjb25zdCBQPVQuZ2V0QkJveCgpO0EuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLVAud2lkdGgvMisiLCAiKy1QLmhlaWdodC8yKyIpIiksVmRbcy5pZF18fChWZFtzLmlkXT17fSksVmRbcy5pZF0uc3RhcnRMZWZ0PV8sYUooeSxzLnN0YXJ0TGFiZWxMZWZ0KX1pZihzLnN0YXJ0TGFiZWxSaWdodCl7Y29uc3QgVD0kMihzLnN0YXJ0TGFiZWxSaWdodCxzLmxhYmVsU3R5bGUpLF89aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VUZXJtaW5hbHMiKSxBPV8uaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJpbm5lciIpO3k9Xy5ub2RlKCkuYXBwZW5kQ2hpbGQoVCksQS5ub2RlKCkuYXBwZW5kQ2hpbGQoVCk7Y29uc3QgUD1ULmdldEJCb3goKTtBLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1QLndpZHRoLzIrIiwgIistUC5oZWlnaHQvMisiKSIpLFZkW3MuaWRdfHwoVmRbcy5pZF09e30pLFZkW3MuaWRdLnN0YXJ0UmlnaHQ9XyxhSih5LHMuc3RhcnRMYWJlbFJpZ2h0KX1pZihzLmVuZExhYmVsTGVmdCl7Y29uc3QgVD0kMihzLmVuZExhYmVsTGVmdCxzLmxhYmVsU3R5bGUpLF89aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VUZXJtaW5hbHMiKSxBPV8uaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJpbm5lciIpO3k9QS5ub2RlKCkuYXBwZW5kQ2hpbGQoVCk7Y29uc3QgUD1ULmdldEJCb3goKTtBLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1QLndpZHRoLzIrIiwgIistUC5oZWlnaHQvMisiKSIpLF8ubm9kZSgpLmFwcGVuZENoaWxkKFQpLFZkW3MuaWRdfHwoVmRbcy5pZF09e30pLFZkW3MuaWRdLmVuZExlZnQ9XyxhSih5LHMuZW5kTGFiZWxMZWZ0KX1pZihzLmVuZExhYmVsUmlnaHQpe2NvbnN0IFQ9JDIocy5lbmRMYWJlbFJpZ2h0LHMubGFiZWxTdHlsZSksXz1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLEE9Xy5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7eT1BLm5vZGUoKS5hcHBlbmRDaGlsZChUKTtjb25zdCBQPVQuZ2V0QkJveCgpO0EuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLVAud2lkdGgvMisiLCAiKy1QLmhlaWdodC8yKyIpIiksXy5ub2RlKCkuYXBwZW5kQ2hpbGQoVCksVmRbcy5pZF18fChWZFtzLmlkXT17fSksVmRbcy5pZF0uZW5kUmlnaHQ9XyxhSih5LHMuZW5kTGFiZWxSaWdodCl9cmV0dXJuIGR9O2Z1bmN0aW9uIGFKKGkscyl7cXQoKS5mbG93Y2hhcnQuaHRtbExhYmVscyYmaSYmKGkuc3R5bGUud2lkdGg9cy5sZW5ndGgqOSsicHgiLGkuc3R5bGUuaGVpZ2h0PSIxMnB4Iil9Y29uc3QgTVVlPShpLHMpPT57WGUuZGVidWcoIk1vdmluZyBsYWJlbCBhYmM4OCAiLGkuaWQsaS5sYWJlbCxzSltpLmlkXSxzKTtsZXQgdT1zLnVwZGF0ZWRQYXRoP3MudXBkYXRlZFBhdGg6cy5vcmlnaW5hbFBhdGg7Y29uc3QgZD1xdCgpLHtzdWJHcmFwaFRpdGxlVG90YWxNYXJnaW46cH09bkooZCk7aWYoaS5sYWJlbCl7Y29uc3Qgdj1zSltpLmlkXTtsZXQgYj1pLngseT1pLnk7aWYodSl7Y29uc3QgVD1Bby5jYWxjTGFiZWxQb3NpdGlvbih1KTtYZS5kZWJ1ZygiTW92aW5nIGxhYmVsICIraS5sYWJlbCsiIGZyb20gKCIsYiwiLCIseSwiKSB0byAoIixULngsIiwiLFQueSwiKSBhYmM4OCIpLHMudXBkYXRlZFBhdGgmJihiPVQueCx5PVQueSl9di5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtifSwgJHt5K3AvMn0pYCl9aWYoaS5zdGFydExhYmVsTGVmdCl7Y29uc3Qgdj1WZFtpLmlkXS5zdGFydExlZnQ7bGV0IGI9aS54LHk9aS55O2lmKHUpe2NvbnN0IFQ9QW8uY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbihpLmFycm93VHlwZVN0YXJ0PzEwOjAsInN0YXJ0X2xlZnQiLHUpO2I9VC54LHk9VC55fXYuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7Yn0sICR7eX0pYCl9aWYoaS5zdGFydExhYmVsUmlnaHQpe2NvbnN0IHY9VmRbaS5pZF0uc3RhcnRSaWdodDtsZXQgYj1pLngseT1pLnk7aWYodSl7Y29uc3QgVD1Bby5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKGkuYXJyb3dUeXBlU3RhcnQ/MTA6MCwic3RhcnRfcmlnaHQiLHUpO2I9VC54LHk9VC55fXYuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7Yn0sICR7eX0pYCl9aWYoaS5lbmRMYWJlbExlZnQpe2NvbnN0IHY9VmRbaS5pZF0uZW5kTGVmdDtsZXQgYj1pLngseT1pLnk7aWYodSl7Y29uc3QgVD1Bby5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKGkuYXJyb3dUeXBlRW5kPzEwOjAsImVuZF9sZWZ0Iix1KTtiPVQueCx5PVQueX12LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2J9LCAke3l9KWApfWlmKGkuZW5kTGFiZWxSaWdodCl7Y29uc3Qgdj1WZFtpLmlkXS5lbmRSaWdodDtsZXQgYj1pLngseT1pLnk7aWYodSl7Y29uc3QgVD1Bby5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKGkuYXJyb3dUeXBlRW5kPzEwOjAsImVuZF9yaWdodCIsdSk7Yj1ULngseT1ULnl9di5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtifSwgJHt5fSlgKX19LEVlbj0oaSxzKT0+e2NvbnN0IHU9aS54LGQ9aS55LHA9TWF0aC5hYnMocy54LXUpLHY9TWF0aC5hYnMocy55LWQpLGI9aS53aWR0aC8yLHk9aS5oZWlnaHQvMjtyZXR1cm4gcD49Ynx8dj49eX0sVGVuPShpLHMsdSk9PntYZS5kZWJ1ZyhgaW50ZXJzZWN0aW9uIGNhbGMgYWJjODk6CiAgb3V0c2lkZVBvaW50OiAke0pTT04uc3RyaW5naWZ5KHMpfQogIGluc2lkZVBvaW50IDogJHtKU09OLnN0cmluZ2lmeSh1KX0KICBub2RlICAgICAgICA6IHg6JHtpLnh9IHk6JHtpLnl9IHc6JHtpLndpZHRofSBoOiR7aS5oZWlnaHR9YCk7Y29uc3QgZD1pLngscD1pLnksdj1NYXRoLmFicyhkLXUueCksYj1pLndpZHRoLzI7bGV0IHk9dS54PHMueD9iLXY6Yit2O2NvbnN0IFQ9aS5oZWlnaHQvMixfPU1hdGguYWJzKHMueS11LnkpLEE9TWF0aC5hYnMocy54LXUueCk7aWYoTWF0aC5hYnMocC1zLnkpKmI+TWF0aC5hYnMoZC1zLngpKlQpe2xldCBQPXUueTxzLnk/cy55LVQtcDpwLVQtcy55O3k9QSpQL187Y29uc3QgUj17eDp1Lng8cy54P3UueCt5OnUueC1BK3kseTp1Lnk8cy55P3UueStfLVA6dS55LV8rUH07cmV0dXJuIHk9PT0wJiYoUi54PXMueCxSLnk9cy55KSxBPT09MCYmKFIueD1zLngpLF89PT0wJiYoUi55PXMueSksWGUuZGVidWcoYGFiYzg5IHRvcHAvYm90dCBjYWxjLCBRICR7X30sIHEgJHtQfSwgUiAke0F9LCByICR7eX1gLFIpLFJ9ZWxzZXt1Lng8cy54P3k9cy54LWItZDp5PWQtYi1zLng7bGV0IFA9Xyp5L0EsUj11Lng8cy54P3UueCtBLXk6dS54LUEreSxGPXUueTxzLnk/dS55K1A6dS55LVA7cmV0dXJuIFhlLmRlYnVnKGBzaWRlcyBjYWxjIGFiYzg5LCBRICR7X30sIHEgJHtQfSwgUiAke0F9LCByICR7eX1gLHtfeDpSLF95OkZ9KSx5PT09MCYmKFI9cy54LEY9cy55KSxBPT09MCYmKFI9cy54KSxfPT09MCYmKEY9cy55KSx7eDpSLHk6Rn19fSxEVWU9KGkscyk9PntYZS5kZWJ1ZygiYWJjODggY3V0UGF0aEF0SW50ZXJzZWN0IixpLHMpO2xldCB1PVtdLGQ9aVswXSxwPSExO3JldHVybiBpLmZvckVhY2godj0+e2lmKCFFZW4ocyx2KSYmIXApe2NvbnN0IGI9VGVuKHMsZCx2KTtsZXQgeT0hMTt1LmZvckVhY2goVD0+e3k9eXx8VC54PT09Yi54JiZULnk9PT1iLnl9KSx1LnNvbWUoVD0+VC54PT09Yi54JiZULnk9PT1iLnkpfHx1LnB1c2goYikscD0hMH1lbHNlIGQ9dixwfHx1LnB1c2godil9KSx1fSxJVWU9ZnVuY3Rpb24oaSxzLHUsZCxwLHYsYil7bGV0IHk9dS5wb2ludHM7WGUuZGVidWcoImFiYzg4IEluc2VydEVkZ2U6IGVkZ2U9Iix1LCJlPSIscyk7bGV0IFQ9ITE7Y29uc3QgXz12Lm5vZGUocy52KTt2YXIgQT12Lm5vZGUocy53KTtBIT1udWxsJiZBLmludGVyc2VjdCYmKF8hPW51bGwmJl8uaW50ZXJzZWN0KSYmKHk9eS5zbGljZSgxLHUucG9pbnRzLmxlbmd0aC0xKSx5LnVuc2hpZnQoXy5pbnRlcnNlY3QoeVswXSkpLHkucHVzaChBLmludGVyc2VjdCh5W3kubGVuZ3RoLTFdKSkpLHUudG9DbHVzdGVyJiYoWGUuZGVidWcoInRvIGNsdXN0ZXIgYWJjODgiLGRbdS50b0NsdXN0ZXJdKSx5PURVZSh1LnBvaW50cyxkW3UudG9DbHVzdGVyXS5ub2RlKSxUPSEwKSx1LmZyb21DbHVzdGVyJiYoWGUuZGVidWcoImZyb20gY2x1c3RlciBhYmM4OCIsZFt1LmZyb21DbHVzdGVyXSkseT1EVWUoeS5yZXZlcnNlKCksZFt1LmZyb21DbHVzdGVyXS5ub2RlKS5yZXZlcnNlKCksVD0hMCk7Y29uc3QgUD15LmZpbHRlcihiZT0+IU51bWJlci5pc05hTihiZS55KSk7bGV0IFI9RkY7dS5jdXJ2ZSYmKHA9PT0iZ3JhcGgifHxwPT09ImZsb3djaGFydCIpJiYoUj11LmN1cnZlKTtjb25zdHt4OkYseTpqfT1fVWUodSksSz1rNygpLngoRikueShqKS5jdXJ2ZShSKTtsZXQgZWU7c3dpdGNoKHUudGhpY2tuZXNzKXtjYXNlIm5vcm1hbCI6ZWU9ImVkZ2UtdGhpY2tuZXNzLW5vcm1hbCI7YnJlYWs7Y2FzZSJ0aGljayI6ZWU9ImVkZ2UtdGhpY2tuZXNzLXRoaWNrIjticmVhaztjYXNlImludmlzaWJsZSI6ZWU9ImVkZ2UtdGhpY2tuZXNzLXRoaWNrIjticmVhaztkZWZhdWx0OmVlPSIifXN3aXRjaCh1LnBhdHRlcm4pe2Nhc2Uic29saWQiOmVlKz0iIGVkZ2UtcGF0dGVybi1zb2xpZCI7YnJlYWs7Y2FzZSJkb3R0ZWQiOmVlKz0iIGVkZ2UtcGF0dGVybi1kb3R0ZWQiO2JyZWFrO2Nhc2UiZGFzaGVkIjplZSs9IiBlZGdlLXBhdHRlcm4tZGFzaGVkIjticmVha31jb25zdCBpZT1pLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLEsoUCkpLmF0dHIoImlkIix1LmlkKS5hdHRyKCJjbGFzcyIsIiAiK2VlKyh1LmNsYXNzZXM/IiAiK3UuY2xhc3NlczoiIikpLmF0dHIoInN0eWxlIix1LnN0eWxlKTtsZXQgb2U9IiI7KHF0KCkuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGV8fHF0KCkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZSkmJihvZT13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCxvZT1vZS5yZXBsYWNlKC9cKC9nLCJcXCgiKSxvZT1vZS5yZXBsYWNlKC9cKS9nLCJcXCkiKSksQVVlKGllLHUsb2UsYixwKTtsZXQgcGU9e307cmV0dXJuIFQmJihwZS51cGRhdGVkUGF0aD15KSxwZS5vcmlnaW5hbFBhdGg9dS5wb2ludHMscGV9LE9VZT1hc3luYyhpLHMsdSxkLHAsdik9PntYZS5pbmZvKCJHcmFwaCBpbiByZWN1cnNpdmUgcmVuZGVyOiBYWFgiLHE3KHMpLHApO2NvbnN0IGI9cy5ncmFwaCgpLnJhbmtkaXI7WGUudHJhY2UoIkRpciBpbiByZWN1cnNpdmUgcmVuZGVyIC0gZGlyOiIsYik7Y29uc3QgeT1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwicm9vdCIpO3Mubm9kZXMoKT9YZS5pbmZvKCJSZWN1cnNpdmUgcmVuZGVyIFhYWCIscy5ub2RlcygpKTpYZS5pbmZvKCJObyBub2RlcyBmb3VuZCBmb3IiLHMpLHMuZWRnZXMoKS5sZW5ndGg+MCYmWGUudHJhY2UoIlJlY3Vyc2l2ZSBlZGdlcyIscy5lZGdlKHMuZWRnZXMoKVswXSkpO2NvbnN0IFQ9eS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXJzIiksXz15Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVBhdGhzIiksQT15Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZUxhYmVscyIpLFA9eS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGVzIik7YXdhaXQgUHJvbWlzZS5hbGwocy5ub2RlcygpLm1hcChhc3luYyBmdW5jdGlvbihqKXtjb25zdCBLPXMubm9kZShqKTtpZihwIT09dm9pZCAwKXtjb25zdCBlZT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHAuY2x1c3RlckRhdGEpKTtYZS5pbmZvKCJTZXR0aW5nIGRhdGEgZm9yIGNsdXN0ZXIgWFhYICgiLGosIikgIixlZSxwKSxzLnNldE5vZGUocC5pZCxlZSkscy5wYXJlbnQoail8fChYZS50cmFjZSgiU2V0dGluZyBwYXJlbnQiLGoscC5pZCkscy5zZXRQYXJlbnQoaixwLmlkLGVlKSl9aWYoWGUuaW5mbygiKEluc2VydCkgTm9kZSBYWFgiK2orIjogIitKU09OLnN0cmluZ2lmeShzLm5vZGUoaikpKSxLJiZLLmNsdXN0ZXJOb2RlKXtYZS5pbmZvKCJDbHVzdGVyIGlkZW50aWZpZWQiLGosSy53aWR0aCxzLm5vZGUoaikpO2NvbnN0IGVlPWF3YWl0IE9VZShQLEsuZ3JhcGgsdSxkLHMubm9kZShqKSx2KSxpZT1lZS5lbGVtO0toKEssaWUpLEsuZGlmZj1lZS5kaWZmfHwwLFhlLmluZm8oIk5vZGUgYm91bmRzIChhYmMxMjMpIixqLEssSy53aWR0aCxLLngsSy55KSxiZW4oaWUsSyksWGUud2FybigiUmVjdXJzaXZlIHJlbmRlciBjb21wbGV0ZSAiLGllLEspfWVsc2Ugcy5jaGlsZHJlbihqKS5sZW5ndGg+MD8oWGUuaW5mbygiQ2x1c3RlciAtIHRoZSBub24gcmVjdXJzaXZlIHBhdGggWFhYIixqLEsuaWQsSyxzKSxYZS5pbmZvKE1SKEsuaWQscykpLE1vW0suaWRdPXtpZDpNUihLLmlkLHMpLG5vZGU6S30pOihYZS5pbmZvKCJOb2RlIC0gdGhlIG5vbiByZWN1cnNpdmUgcGF0aCIsaixLLmlkLEspLGF3YWl0IHRKKFAscy5ub2RlKGopLGIpKX0pKSxzLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihqKXtjb25zdCBLPXMuZWRnZShqLnYsai53LGoubmFtZSk7WGUuaW5mbygiRWRnZSAiK2oudisiIC0+ICIrai53KyI6ICIrSlNPTi5zdHJpbmdpZnkoaikpLFhlLmluZm8oIkVkZ2UgIitqLnYrIiAtPiAiK2oudysiOiAiLGosIiAiLEpTT04uc3RyaW5naWZ5KHMuZWRnZShqKSkpLFhlLmluZm8oIkZpeCIsTW8sImlkczoiLGoudixqLncsIlRyYW5zbGF0aW5nOiAiLE1vW2oudl0sTW9bai53XSksem1lKEEsSyl9KSxzLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihqKXtYZS5pbmZvKCJFZGdlICIrai52KyIgLT4gIitqLncrIjogIitKU09OLnN0cmluZ2lmeShqKSl9KSxYZS5pbmZvKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKSxYZS5pbmZvKCIjIyMgICAgICAgICAgICAgICAgTGF5b3V0ICAgICAgICAgICAgICAgICAjIyMiKSxYZS5pbmZvKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKSxYZS5pbmZvKHMpLHFEKHMpLFhlLmluZm8oIkdyYXBoIGFmdGVyIGxheW91dDoiLHE3KHMpKTtsZXQgUj0wO2NvbnN0e3N1YkdyYXBoVGl0bGVUb3RhbE1hcmdpbjpGfT1uSih2KTtyZXR1cm4gSFp0KHMpLmZvckVhY2goZnVuY3Rpb24oail7Y29uc3QgSz1zLm5vZGUoaik7WGUuaW5mbygiUG9zaXRpb24gIitqKyI6ICIrSlNPTi5zdHJpbmdpZnkocy5ub2RlKGopKSksWGUuaW5mbygiUG9zaXRpb24gIitqKyI6ICgiK0sueCwiLCIrSy55LCIpIHdpZHRoOiAiLEsud2lkdGgsIiBoZWlnaHQ6ICIsSy5oZWlnaHQpLEsmJksuY2x1c3Rlck5vZGU/KEsueSs9RiwkbWUoSykpOnMuY2hpbGRyZW4oaikubGVuZ3RoPjA/KEsuaGVpZ2h0Kz1GLHdlbihULEspLE1vW0suaWRdLm5vZGU9Syk6KEsueSs9Ri8yLCRtZShLKSl9KSxzLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihqKXtjb25zdCBLPXMuZWRnZShqKTtYZS5pbmZvKCJFZGdlICIrai52KyIgLT4gIitqLncrIjogIitKU09OLnN0cmluZ2lmeShLKSxLKSxLLnBvaW50cy5mb3JFYWNoKGllPT5pZS55Kz1GLzIpO2NvbnN0IGVlPUlVZShfLGosSyxNbyx1LHMsZCk7TVVlKEssZWUpfSkscy5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24oail7Y29uc3QgSz1zLm5vZGUoaik7WGUuaW5mbyhqLEsudHlwZSxLLmRpZmYpLEsudHlwZT09PSJncm91cCImJihSPUsuZGlmZil9KSx7ZWxlbTp5LGRpZmY6Un19LHFtZT1hc3luYyhpLHMsdSxkLHApPT57U21lKGksdSxkLHApLG1lbigpLGtlbigpLHllbigpLCRadCgpLFhlLndhcm4oIkdyYXBoIGF0IGZpcnN0OiIsSlNPTi5zdHJpbmdpZnkocTcocykpKSxxWnQocyksWGUud2FybigiR3JhcGggYWZ0ZXI6IixKU09OLnN0cmluZ2lmeShxNyhzKSkpO2NvbnN0IHY9cXQoKTthd2FpdCBPVWUoaSxzLGQscCx2b2lkIDAsdil9LE5VZT17fSxDZW49ZnVuY3Rpb24oaSl7Y29uc3Qgcz1PYmplY3Qua2V5cyhpKTtmb3IoY29uc3QgdSBvZiBzKU5VZVt1XT1pW3VdfSxQVWU9YXN5bmMgZnVuY3Rpb24oaSxzLHUsZCxwLHYpe2NvbnN0IGI9ZC5zZWxlY3QoYFtpZD0iJHt1fSJdYCkseT1PYmplY3Qua2V5cyhpKTtmb3IoY29uc3QgVCBvZiB5KXtjb25zdCBfPWlbVF07bGV0IEE9ImRlZmF1bHQiO18uY2xhc3Nlcy5sZW5ndGg+MCYmKEE9Xy5jbGFzc2VzLmpvaW4oIiAiKSksQT1BKyIgZmxvd2NoYXJ0LWxhYmVsIjtjb25zdCBQPW9tKF8uc3R5bGVzKTtsZXQgUj1fLnRleHQhPT12b2lkIDA/Xy50ZXh0Ol8uaWQsRjtpZihYZS5pbmZvKCJ2ZXJ0ZXgiLF8sXy5sYWJlbFR5cGUpLF8ubGFiZWxUeXBlPT09Im1hcmtkb3duIilYZS5pbmZvKCJ2ZXJ0ZXgiLF8sXy5sYWJlbFR5cGUpO2Vsc2UgaWYoZjEocXQoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpRj12bWUoYix7bGFiZWw6Un0pLm5vZGUoKSxGLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoRik7ZWxzZXtjb25zdCBpZT1wLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7aWUuc2V0QXR0cmlidXRlKCJzdHlsZSIsUC5sYWJlbFN0eWxlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpO2NvbnN0IG9lPVIuc3BsaXQoY2kubGluZUJyZWFrUmVnZXgpO2Zvcihjb25zdCBwZSBvZiBvZSl7Y29uc3QgYmU9cC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTtiZS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSxiZS5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIiksYmUuc2V0QXR0cmlidXRlKCJ4IiwiMSIpLGJlLnRleHRDb250ZW50PXBlLGllLmFwcGVuZENoaWxkKGJlKX1GPWllfWxldCBqPTAsSz0iIjtzd2l0Y2goXy50eXBlKXtjYXNlInJvdW5kIjpqPTUsSz0icmVjdCI7YnJlYWs7Y2FzZSJzcXVhcmUiOks9InJlY3QiO2JyZWFrO2Nhc2UiZGlhbW9uZCI6Sz0icXVlc3Rpb24iO2JyZWFrO2Nhc2UiaGV4YWdvbiI6Sz0iaGV4YWdvbiI7YnJlYWs7Y2FzZSJvZGQiOks9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UibGVhbl9yaWdodCI6Sz0ibGVhbl9yaWdodCI7YnJlYWs7Y2FzZSJsZWFuX2xlZnQiOks9ImxlYW5fbGVmdCI7YnJlYWs7Y2FzZSJ0cmFwZXpvaWQiOks9InRyYXBlem9pZCI7YnJlYWs7Y2FzZSJpbnZfdHJhcGV6b2lkIjpLPSJpbnZfdHJhcGV6b2lkIjticmVhaztjYXNlIm9kZF9yaWdodCI6Sz0icmVjdF9sZWZ0X2ludl9hcnJvdyI7YnJlYWs7Y2FzZSJjaXJjbGUiOks9ImNpcmNsZSI7YnJlYWs7Y2FzZSJlbGxpcHNlIjpLPSJlbGxpcHNlIjticmVhaztjYXNlInN0YWRpdW0iOks9InN0YWRpdW0iO2JyZWFrO2Nhc2Uic3Vicm91dGluZSI6Sz0ic3Vicm91dGluZSI7YnJlYWs7Y2FzZSJjeWxpbmRlciI6Sz0iY3lsaW5kZXIiO2JyZWFrO2Nhc2UiZ3JvdXAiOks9InJlY3QiO2JyZWFrO2Nhc2UiZG91YmxlY2lyY2xlIjpLPSJkb3VibGVjaXJjbGUiO2JyZWFrO2RlZmF1bHQ6Sz0icmVjdCJ9Y29uc3QgZWU9YXdhaXQgQ0MoUixxdCgpKTtzLnNldE5vZGUoXy5pZCx7bGFiZWxTdHlsZTpQLmxhYmVsU3R5bGUsc2hhcGU6SyxsYWJlbFRleHQ6ZWUsbGFiZWxUeXBlOl8ubGFiZWxUeXBlLHJ4Omoscnk6aixjbGFzczpBLHN0eWxlOlAuc3R5bGUsaWQ6Xy5pZCxsaW5rOl8ubGluayxsaW5rVGFyZ2V0Ol8ubGlua1RhcmdldCx0b29sdGlwOnYuZGIuZ2V0VG9vbHRpcChfLmlkKXx8IiIsZG9tSWQ6di5kYi5sb29rVXBEb21JZChfLmlkKSxoYXZlQ2FsbGJhY2s6Xy5oYXZlQ2FsbGJhY2ssd2lkdGg6Xy50eXBlPT09Imdyb3VwIj81MDA6dm9pZCAwLGRpcjpfLmRpcix0eXBlOl8udHlwZSxwcm9wczpfLnByb3BzLHBhZGRpbmc6cXQoKS5mbG93Y2hhcnQucGFkZGluZ30pLFhlLmluZm8oInNldE5vZGUiLHtsYWJlbFN0eWxlOlAubGFiZWxTdHlsZSxsYWJlbFR5cGU6Xy5sYWJlbFR5cGUsc2hhcGU6SyxsYWJlbFRleHQ6ZWUscng6aixyeTpqLGNsYXNzOkEsc3R5bGU6UC5zdHlsZSxpZDpfLmlkLGRvbUlkOnYuZGIubG9va1VwRG9tSWQoXy5pZCksd2lkdGg6Xy50eXBlPT09Imdyb3VwIj81MDA6dm9pZCAwLHR5cGU6Xy50eXBlLGRpcjpfLmRpcixwcm9wczpfLnByb3BzLHBhZGRpbmc6cXQoKS5mbG93Y2hhcnQucGFkZGluZ30pfX0sQlVlPWFzeW5jIGZ1bmN0aW9uKGkscyx1KXtYZS5pbmZvKCJhYmM3OCBlZGdlcyA9ICIsaSk7bGV0IGQ9MCxwPXt9LHYsYjtpZihpLmRlZmF1bHRTdHlsZSE9PXZvaWQgMCl7Y29uc3QgeT1vbShpLmRlZmF1bHRTdHlsZSk7dj15LnN0eWxlLGI9eS5sYWJlbFN0eWxlfWZvcihjb25zdCB5IG9mIGkpe2QrKztjb25zdCBUPSJMLSIreS5zdGFydCsiLSIreS5lbmQ7cFtUXT09PXZvaWQgMD8ocFtUXT0wLFhlLmluZm8oImFiYzc4IG5ldyBlbnRyeSIsVCxwW1RdKSk6KHBbVF0rKyxYZS5pbmZvKCJhYmM3OCBuZXcgZW50cnkiLFQscFtUXSkpO2xldCBfPVQrIi0iK3BbVF07WGUuaW5mbygiYWJjNzggbmV3IGxpbmsgaWQgdG8gYmUgdXNlZCBpcyIsVCxfLHBbVF0pO2NvbnN0IEE9IkxTLSIreS5zdGFydCxQPSJMRS0iK3kuZW5kLFI9e3N0eWxlOiIiLGxhYmVsU3R5bGU6IiJ9O3N3aXRjaChSLm1pbmxlbj15Lmxlbmd0aHx8MSx5LnR5cGU9PT0iYXJyb3dfb3BlbiI/Ui5hcnJvd2hlYWQ9Im5vbmUiOlIuYXJyb3doZWFkPSJub3JtYWwiLFIuYXJyb3dUeXBlU3RhcnQ9ImFycm93X29wZW4iLFIuYXJyb3dUeXBlRW5kPSJhcnJvd19vcGVuIix5LnR5cGUpe2Nhc2UiZG91YmxlX2Fycm93X2Nyb3NzIjpSLmFycm93VHlwZVN0YXJ0PSJhcnJvd19jcm9zcyI7Y2FzZSJhcnJvd19jcm9zcyI6Ui5hcnJvd1R5cGVFbmQ9ImFycm93X2Nyb3NzIjticmVhaztjYXNlImRvdWJsZV9hcnJvd19wb2ludCI6Ui5hcnJvd1R5cGVTdGFydD0iYXJyb3dfcG9pbnQiO2Nhc2UiYXJyb3dfcG9pbnQiOlIuYXJyb3dUeXBlRW5kPSJhcnJvd19wb2ludCI7YnJlYWs7Y2FzZSJkb3VibGVfYXJyb3dfY2lyY2xlIjpSLmFycm93VHlwZVN0YXJ0PSJhcnJvd19jaXJjbGUiO2Nhc2UiYXJyb3dfY2lyY2xlIjpSLmFycm93VHlwZUVuZD0iYXJyb3dfY2lyY2xlIjticmVha31sZXQgRj0iIixqPSIiO3N3aXRjaCh5LnN0cm9rZSl7Y2FzZSJub3JtYWwiOkY9ImZpbGw6bm9uZTsiLHYhPT12b2lkIDAmJihGPXYpLGIhPT12b2lkIDAmJihqPWIpLFIudGhpY2tuZXNzPSJub3JtYWwiLFIucGF0dGVybj0ic29saWQiO2JyZWFrO2Nhc2UiZG90dGVkIjpSLnRoaWNrbmVzcz0ibm9ybWFsIixSLnBhdHRlcm49ImRvdHRlZCIsUi5zdHlsZT0iZmlsbDpub25lO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWRhc2hhcnJheTozOyI7YnJlYWs7Y2FzZSJ0aGljayI6Ui50aGlja25lc3M9InRoaWNrIixSLnBhdHRlcm49InNvbGlkIixSLnN0eWxlPSJzdHJva2Utd2lkdGg6IDMuNXB4O2ZpbGw6bm9uZTsiO2JyZWFrO2Nhc2UiaW52aXNpYmxlIjpSLnRoaWNrbmVzcz0iaW52aXNpYmxlIixSLnBhdHRlcm49InNvbGlkIixSLnN0eWxlPSJzdHJva2Utd2lkdGg6IDA7ZmlsbDpub25lOyI7YnJlYWt9aWYoeS5zdHlsZSE9PXZvaWQgMCl7Y29uc3QgSz1vbSh5LnN0eWxlKTtGPUsuc3R5bGUsaj1LLmxhYmVsU3R5bGV9Ui5zdHlsZT1SLnN0eWxlKz1GLFIubGFiZWxTdHlsZT1SLmxhYmVsU3R5bGUrPWoseS5pbnRlcnBvbGF0ZSE9PXZvaWQgMD9SLmN1cnZlPU92KHkuaW50ZXJwb2xhdGUsa3ApOmkuZGVmYXVsdEludGVycG9sYXRlIT09dm9pZCAwP1IuY3VydmU9T3YoaS5kZWZhdWx0SW50ZXJwb2xhdGUsa3ApOlIuY3VydmU9T3YoTlVlLmN1cnZlLGtwKSx5LnRleHQ9PT12b2lkIDA/eS5zdHlsZSE9PXZvaWQgMCYmKFIuYXJyb3doZWFkU3R5bGU9ImZpbGw6ICMzMzMiKTooUi5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIsUi5sYWJlbHBvcz0iYyIpLFIubGFiZWxUeXBlPXkubGFiZWxUeXBlLFIubGFiZWw9YXdhaXQgQ0MoeS50ZXh0LnJlcGxhY2UoY2kubGluZUJyZWFrUmVnZXgsYApgKSxxdCgpKSx5LnN0eWxlPT09dm9pZCAwJiYoUi5zdHlsZT1SLnN0eWxlfHwic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZTsiKSxSLmxhYmVsU3R5bGU9Ui5sYWJlbFN0eWxlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IiksUi5pZD1fLFIuY2xhc3Nlcz0iZmxvd2NoYXJ0LWxpbmsgIitBKyIgIitQLHMuc2V0RWRnZSh5LnN0YXJ0LHkuZW5kLFIsZCl9fSxIbWU9e3NldENvbmY6Q2VuLGFkZFZlcnRpY2VzOlBVZSxhZGRFZGdlczpCVWUsZ2V0Q2xhc3NlczpmdW5jdGlvbihpLHMpe3JldHVybiBzLmRiLmdldENsYXNzZXMoKX0sZHJhdzphc3luYyBmdW5jdGlvbihpLHMsdSxkKXtYZS5pbmZvKCJEcmF3aW5nIGZsb3djaGFydCIpO2xldCBwPWQuZGIuZ2V0RGlyZWN0aW9uKCk7cD09PXZvaWQgMCYmKHA9IlREIik7Y29uc3R7c2VjdXJpdHlMZXZlbDp2LGZsb3djaGFydDpifT1xdCgpLHk9Yi5ub2RlU3BhY2luZ3x8NTAsVD1iLnJhbmtTcGFjaW5nfHw1MDtsZXQgXzt2PT09InNhbmRib3giJiYoXz1JcigiI2kiK3MpKTtjb25zdCBBPUlyKHY9PT0ic2FuZGJveCI/Xy5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksUD12PT09InNhbmRib3giP18ubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQsUj1uZXcgQjAoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cmFua2RpcjpwLG5vZGVzZXA6eSxyYW5rc2VwOlQsbWFyZ2lueDowLG1hcmdpbnk6MH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pO2xldCBGO2NvbnN0IGo9ZC5kYi5nZXRTdWJHcmFwaHMoKTtYZS5pbmZvKCJTdWJncmFwaHMgLSAiLGopO2ZvcihsZXQgYWU9ai5sZW5ndGgtMTthZT49MDthZS0tKUY9althZV0sWGUuaW5mbygiU3ViZ3JhcGggLSAiLEYpLGQuZGIuYWRkVmVydGV4KEYuaWQse3RleHQ6Ri50aXRsZSx0eXBlOkYubGFiZWxUeXBlfSwiZ3JvdXAiLHZvaWQgMCxGLmNsYXNzZXMsRi5kaXIpO2NvbnN0IEs9ZC5kYi5nZXRWZXJ0aWNlcygpLGVlPWQuZGIuZ2V0RWRnZXMoKTtYZS5pbmZvKCJFZGdlcyIsZWUpO2xldCBpZT0wO2ZvcihpZT1qLmxlbmd0aC0xO2llPj0wO2llLS0pe0Y9altpZV0sX0JlKCJjbHVzdGVyIikuYXBwZW5kKCJ0ZXh0Iik7Zm9yKGxldCBhZT0wO2FlPEYubm9kZXMubGVuZ3RoO2FlKyspWGUuaW5mbygiU2V0dGluZyB1cCBzdWJncmFwaHMiLEYubm9kZXNbYWVdLEYuaWQpLFIuc2V0UGFyZW50KEYubm9kZXNbYWVdLEYuaWQpfWF3YWl0IFBVZShLLFIscyxBLFAsZCksYXdhaXQgQlVlKGVlLFIpO2NvbnN0IG9lPUEuc2VsZWN0KGBbaWQ9IiR7c30iXWApLHBlPUEuc2VsZWN0KCIjIitzKyIgZyIpO2lmKGF3YWl0IHFtZShwZSxSLFsicG9pbnQiLCJjaXJjbGUiLCJjcm9zcyJdLCJmbG93Y2hhcnQiLHMpLEFvLmluc2VydFRpdGxlKG9lLCJmbG93Y2hhcnRUaXRsZVRleHQiLGIudGl0bGVUb3BNYXJnaW4sZC5kYi5nZXREaWFncmFtVGl0bGUoKSkseTkoUixvZSxiLmRpYWdyYW1QYWRkaW5nLGIudXNlTWF4V2lkdGgpLGQuZGIuaW5kZXhOb2Rlcygic3ViR3JhcGgiK2llKSwhYi5odG1sTGFiZWxzKXtjb25zdCBhZT1QLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZD0iJytzKyciXSAuZWRnZUxhYmVsIC5sYWJlbCcpO2Zvcihjb25zdCBuZSBvZiBhZSl7Y29uc3Qgc2U9bmUuZ2V0QkJveCgpLGRlPVAuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlY3QiKTtkZS5zZXRBdHRyaWJ1dGUoInJ4IiwwKSxkZS5zZXRBdHRyaWJ1dGUoInJ5IiwwKSxkZS5zZXRBdHRyaWJ1dGUoIndpZHRoIixzZS53aWR0aCksZGUuc2V0QXR0cmlidXRlKCJoZWlnaHQiLHNlLmhlaWdodCksbmUuaW5zZXJ0QmVmb3JlKGRlLG5lLmZpcnN0Q2hpbGQpfX1PYmplY3Qua2V5cyhLKS5mb3JFYWNoKGZ1bmN0aW9uKGFlKXtjb25zdCBuZT1LW2FlXTtpZihuZS5saW5rKXtjb25zdCBzZT1JcigiIyIrcysnIFtpZD0iJythZSsnIl0nKTtpZihzZSl7Y29uc3QgZGU9UC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYSIpO2RlLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImNsYXNzIixuZS5jbGFzc2VzLmpvaW4oIiAiKSksZGUuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiaHJlZiIsbmUubGluayksZGUuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVsIiwibm9vcGVuZXIiKSx2PT09InNhbmRib3giP2RlLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRhcmdldCIsIl90b3AiKTpuZS5saW5rVGFyZ2V0JiZkZS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0YXJnZXQiLG5lLmxpbmtUYXJnZXQpO2NvbnN0IFg9c2UuaW5zZXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIGRlfSwiOmZpcnN0LWNoaWxkIiksZ2U9c2Uuc2VsZWN0KCIubGFiZWwtY29udGFpbmVyIik7Z2UmJlguYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIGdlLm5vZGUoKX0pO2NvbnN0IFc9c2Uuc2VsZWN0KCIubGFiZWwiKTtXJiZYLmFwcGVuZChmdW5jdGlvbigpe3JldHVybiBXLm5vZGUoKX0pfX19KX19LFNlbj0oaSxzKT0+e2NvbnN0IHU9QVJlLGQ9dShpLCJyIikscD11KGksImciKSx2PXUoaSwiYiIpO3JldHVybiBTQyhkLHAsdixzKX0sRlVlPWk9PmAubGFiZWwgewogICAgZm9udC1mYW1pbHk6ICR7aS5mb250RmFtaWx5fTsKICAgIGNvbG9yOiAke2kubm9kZVRleHRDb2xvcnx8aS50ZXh0Q29sb3J9OwogIH0KICAuY2x1c3Rlci1sYWJlbCB0ZXh0IHsKICAgIGZpbGw6ICR7aS50aXRsZUNvbG9yfTsKICB9CiAgLmNsdXN0ZXItbGFiZWwgc3BhbixwIHsKICAgIGNvbG9yOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAubGFiZWwgdGV4dCxzcGFuLHAgewogICAgZmlsbDogJHtpLm5vZGVUZXh0Q29sb3J8fGkudGV4dENvbG9yfTsKICAgIGNvbG9yOiAke2kubm9kZVRleHRDb2xvcnx8aS50ZXh0Q29sb3J9OwogIH0KCiAgLm5vZGUgcmVjdCwKICAubm9kZSBjaXJjbGUsCiAgLm5vZGUgZWxsaXBzZSwKICAubm9kZSBwb2x5Z29uLAogIC5ub2RlIHBhdGggewogICAgZmlsbDogJHtpLm1haW5Ca2d9OwogICAgc3Ryb2tlOiAke2kubm9kZUJvcmRlcn07CiAgICBzdHJva2Utd2lkdGg6IDFweDsKICB9CiAgLmZsb3djaGFydC1sYWJlbCB0ZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgfQogIC8vIC5mbG93Y2hhcnQtbGFiZWwgLnRleHQtb3V0ZXItdHNwYW4gewogIC8vICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAvLyB9CiAgLy8gLmZsb3djaGFydC1sYWJlbCAudGV4dC1pbm5lci10c3BhbiB7CiAgLy8gICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgLy8gfQoKICAubm9kZSAua2F0ZXggcGF0aCB7CiAgICBmaWxsOiAjMDAwOwogICAgc3Ryb2tlOiAjMDAwOwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKICAubm9kZSAubGFiZWwgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KICAubm9kZS5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogIH0KCiAgLmFycm93aGVhZFBhdGggewogICAgZmlsbDogJHtpLmFycm93aGVhZENvbG9yfTsKICB9CgogIC5lZGdlUGF0aCAucGF0aCB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyLjBweDsKICB9CgogIC5mbG93Y2hhcnQtbGluayB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgZmlsbDogbm9uZTsKICB9CgogIC5lZGdlTGFiZWwgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgcmVjdCB7CiAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgICBmaWxsOiAke2kuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICB9CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQoKICAvKiBGb3IgaHRtbCBsYWJlbHMgb25seSAqLwogIC5sYWJlbEJrZyB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke1NlbihpLmVkZ2VMYWJlbEJhY2tncm91bmQsLjUpfTsKICAgIC8vIGJhY2tncm91bmQtY29sb3I6IAogIH0KCiAgLmNsdXN0ZXIgcmVjdCB7CiAgICBmaWxsOiAke2kuY2x1c3RlckJrZ307CiAgICBzdHJva2U6ICR7aS5jbHVzdGVyQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCiAgLmNsdXN0ZXIgdGV4dCB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAuY2x1c3RlciBzcGFuLHAgewogICAgY29sb3I6ICR7aS50aXRsZUNvbG9yfTsKICB9CiAgLyogLmNsdXN0ZXIgZGl2IHsKICAgIGNvbG9yOiAke2kudGl0bGVDb2xvcn07CiAgfSAqLwoKICBkaXYubWVybWFpZFRvb2x0aXAgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgbWF4LXdpZHRoOiAyMDBweDsKICAgIHBhZGRpbmc6IDJweDsKICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6IDEycHg7CiAgICBiYWNrZ3JvdW5kOiAke2kudGVydGlhcnlDb2xvcn07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2kuYm9yZGVyMn07CiAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDEwMDsKICB9CgogIC5mbG93Y2hhcnRUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogIH0KYCxfZW49T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpHYmUsZGI6SEMscmVuZGVyZXI6SG1lLHN0eWxlczpGVWUsaW5pdDppPT57aS5mbG93Y2hhcnR8fChpLmZsb3djaGFydD17fSksaS5mbG93Y2hhcnQuYXJyb3dNYXJrZXJBYnNvbHV0ZT1pLmFycm93TWFya2VyQWJzb2x1dGUsX1F0LnNldENvbmYoaS5mbG93Y2hhcnQpLEhDLmNsZWFyKCksSEMuc2V0R2VuKCJnZW4tMSIpfX19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksQWVuPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6R2JlLGRiOkhDLHJlbmRlcmVyOkhtZSxzdHlsZXM6RlVlLGluaXQ6aT0+e2kuZmxvd2NoYXJ0fHwoaS5mbG93Y2hhcnQ9e30pLGkuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGU9aS5hcnJvd01hcmtlckFic29sdXRlLF9qdCh7Zmxvd2NoYXJ0OnthcnJvd01hcmtlckFic29sdXRlOmkuYXJyb3dNYXJrZXJBYnNvbHV0ZX19KSxIbWUuc2V0Q29uZihpLmZsb3djaGFydCksSEMuY2xlYXIoKSxIQy5zZXRHZW4oImdlbi0yIil9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgVm1lPWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oZGUsWCxnZSxXKXtmb3IoZ2U9Z2V8fHt9LFc9ZGUubGVuZ3RoO1ctLTtnZVtkZVtXXV09WCk7cmV0dXJuIGdlfSxzPVs2LDgsMTAsMjAsMjIsMjQsMjYsMjcsMjhdLHU9WzEsMTBdLGQ9WzEsMTFdLHA9WzEsMTJdLHY9WzEsMTNdLGI9WzEsMTRdLHk9WzEsMTVdLFQ9WzEsMjFdLF89WzEsMjJdLEE9WzEsMjNdLFA9WzEsMjRdLFI9WzEsMjVdLEY9WzYsOCwxMCwxMywxNSwxOCwxOSwyMCwyMiwyNCwyNiwyNywyOCw0MSw0Miw0Myw0NCw0NV0saj1bMSwzNF0sSz1bMjcsMjgsNDYsNDddLGVlPVs0MSw0Miw0Myw0NCw0NV0saWU9WzE3LDM0XSxvZT1bMSw1NF0scGU9WzEsNTNdLGJlPVsxNywzNCwzNiwzOF0sYWU9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLEVSX0RJQUdSQU06NCxkb2N1bWVudDo1LEVPRjo2LGxpbmU6NyxTUEFDRTo4LHN0YXRlbWVudDo5LE5FV0xJTkU6MTAsZW50aXR5TmFtZToxMSxyZWxTcGVjOjEyLCI6IjoxMyxyb2xlOjE0LEJMT0NLX1NUQVJUOjE1LGF0dHJpYnV0ZXM6MTYsQkxPQ0tfU1RPUDoxNyxTUVM6MTgsU1FFOjE5LHRpdGxlOjIwLHRpdGxlX3ZhbHVlOjIxLGFjY190aXRsZToyMixhY2NfdGl0bGVfdmFsdWU6MjMsYWNjX2Rlc2NyOjI0LGFjY19kZXNjcl92YWx1ZToyNSxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjI2LEFMUEhBTlVNOjI3LEVOVElUWV9OQU1FOjI4LGF0dHJpYnV0ZToyOSxhdHRyaWJ1dGVUeXBlOjMwLGF0dHJpYnV0ZU5hbWU6MzEsYXR0cmlidXRlS2V5VHlwZUxpc3Q6MzIsYXR0cmlidXRlQ29tbWVudDozMyxBVFRSSUJVVEVfV09SRDozNCxhdHRyaWJ1dGVLZXlUeXBlOjM1LENPTU1BOjM2LEFUVFJJQlVURV9LRVk6MzcsQ09NTUVOVDozOCxjYXJkaW5hbGl0eTozOSxyZWxUeXBlOjQwLFpFUk9fT1JfT05FOjQxLFpFUk9fT1JfTU9SRTo0MixPTkVfT1JfTU9SRTo0MyxPTkxZX09ORTo0NCxNRF9QQVJFTlQ6NDUsTk9OX0lERU5USUZZSU5HOjQ2LElERU5USUZZSU5HOjQ3LFdPUkQ6NDgsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IkVSX0RJQUdSQU0iLDY6IkVPRiIsODoiU1BBQ0UiLDEwOiJORVdMSU5FIiwxMzoiOiIsMTU6IkJMT0NLX1NUQVJUIiwxNzoiQkxPQ0tfU1RPUCIsMTg6IlNRUyIsMTk6IlNRRSIsMjA6InRpdGxlIiwyMToidGl0bGVfdmFsdWUiLDIyOiJhY2NfdGl0bGUiLDIzOiJhY2NfdGl0bGVfdmFsdWUiLDI0OiJhY2NfZGVzY3IiLDI1OiJhY2NfZGVzY3JfdmFsdWUiLDI2OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwyNzoiQUxQSEFOVU0iLDI4OiJFTlRJVFlfTkFNRSIsMzQ6IkFUVFJJQlVURV9XT1JEIiwzNjoiQ09NTUEiLDM3OiJBVFRSSUJVVEVfS0VZIiwzODoiQ09NTUVOVCIsNDE6IlpFUk9fT1JfT05FIiw0MjoiWkVST19PUl9NT1JFIiw0MzoiT05FX09SX01PUkUiLDQ0OiJPTkxZX09ORSIsNDU6Ik1EX1BBUkVOVCIsNDY6Ik5PTl9JREVOVElGWUlORyIsNDc6IklERU5USUZZSU5HIiw0ODoiV09SRCJ9LHByb2R1Y3Rpb25zXzpbMCxbMywzXSxbNSwwXSxbNSwyXSxbNywyXSxbNywxXSxbNywxXSxbNywxXSxbOSw1XSxbOSw0XSxbOSwzXSxbOSwxXSxbOSw3XSxbOSw2XSxbOSw0XSxbOSwyXSxbOSwyXSxbOSwyXSxbOSwxXSxbMTEsMV0sWzExLDFdLFsxNiwxXSxbMTYsMl0sWzI5LDJdLFsyOSwzXSxbMjksM10sWzI5LDRdLFszMCwxXSxbMzEsMV0sWzMyLDFdLFszMiwzXSxbMzUsMV0sWzMzLDFdLFsxMiwzXSxbMzksMV0sWzM5LDFdLFszOSwxXSxbMzksMV0sWzM5LDFdLFs0MCwxXSxbNDAsMV0sWzE0LDFdLFsxNCwxXSxbMTQsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oWCxnZSxXLHhlLFUsRmUsUGUpe3ZhciBqZT1GZS5sZW5ndGgtMTtzd2l0Y2goVSl7Y2FzZSAxOmJyZWFrO2Nhc2UgMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzOkZlW2plLTFdLnB1c2goRmVbamVdKSx0aGlzLiQ9RmVbamUtMV07YnJlYWs7Y2FzZSA0OmNhc2UgNTp0aGlzLiQ9RmVbamVdO2JyZWFrO2Nhc2UgNjpjYXNlIDc6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgODp4ZS5hZGRFbnRpdHkoRmVbamUtNF0pLHhlLmFkZEVudGl0eShGZVtqZS0yXSkseGUuYWRkUmVsYXRpb25zaGlwKEZlW2plLTRdLEZlW2plXSxGZVtqZS0yXSxGZVtqZS0zXSk7YnJlYWs7Y2FzZSA5OnhlLmFkZEVudGl0eShGZVtqZS0zXSkseGUuYWRkQXR0cmlidXRlcyhGZVtqZS0zXSxGZVtqZS0xXSk7YnJlYWs7Y2FzZSAxMDp4ZS5hZGRFbnRpdHkoRmVbamUtMl0pO2JyZWFrO2Nhc2UgMTE6eGUuYWRkRW50aXR5KEZlW2plXSk7YnJlYWs7Y2FzZSAxMjp4ZS5hZGRFbnRpdHkoRmVbamUtNl0sRmVbamUtNF0pLHhlLmFkZEF0dHJpYnV0ZXMoRmVbamUtNl0sRmVbamUtMV0pO2JyZWFrO2Nhc2UgMTM6eGUuYWRkRW50aXR5KEZlW2plLTVdLEZlW2plLTNdKTticmVhaztjYXNlIDE0OnhlLmFkZEVudGl0eShGZVtqZS0zXSxGZVtqZS0xXSk7YnJlYWs7Y2FzZSAxNTpjYXNlIDE2OnRoaXMuJD1GZVtqZV0udHJpbSgpLHhlLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxNzpjYXNlIDE4OnRoaXMuJD1GZVtqZV0udHJpbSgpLHhlLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxOTpjYXNlIDQzOnRoaXMuJD1GZVtqZV07YnJlYWs7Y2FzZSAyMDpjYXNlIDQxOmNhc2UgNDI6dGhpcy4kPUZlW2plXS5yZXBsYWNlKC8iL2csIiIpO2JyZWFrO2Nhc2UgMjE6Y2FzZSAyOTp0aGlzLiQ9W0ZlW2plXV07YnJlYWs7Y2FzZSAyMjpGZVtqZV0ucHVzaChGZVtqZS0xXSksdGhpcy4kPUZlW2plXTticmVhaztjYXNlIDIzOnRoaXMuJD17YXR0cmlidXRlVHlwZTpGZVtqZS0xXSxhdHRyaWJ1dGVOYW1lOkZlW2plXX07YnJlYWs7Y2FzZSAyNDp0aGlzLiQ9e2F0dHJpYnV0ZVR5cGU6RmVbamUtMl0sYXR0cmlidXRlTmFtZTpGZVtqZS0xXSxhdHRyaWJ1dGVLZXlUeXBlTGlzdDpGZVtqZV19O2JyZWFrO2Nhc2UgMjU6dGhpcy4kPXthdHRyaWJ1dGVUeXBlOkZlW2plLTJdLGF0dHJpYnV0ZU5hbWU6RmVbamUtMV0sYXR0cmlidXRlQ29tbWVudDpGZVtqZV19O2JyZWFrO2Nhc2UgMjY6dGhpcy4kPXthdHRyaWJ1dGVUeXBlOkZlW2plLTNdLGF0dHJpYnV0ZU5hbWU6RmVbamUtMl0sYXR0cmlidXRlS2V5VHlwZUxpc3Q6RmVbamUtMV0sYXR0cmlidXRlQ29tbWVudDpGZVtqZV19O2JyZWFrO2Nhc2UgMjc6Y2FzZSAyODpjYXNlIDMxOnRoaXMuJD1GZVtqZV07YnJlYWs7Y2FzZSAzMDpGZVtqZS0yXS5wdXNoKEZlW2plXSksdGhpcy4kPUZlW2plLTJdO2JyZWFrO2Nhc2UgMzI6dGhpcy4kPUZlW2plXS5yZXBsYWNlKC8iL2csIiIpO2JyZWFrO2Nhc2UgMzM6dGhpcy4kPXtjYXJkQTpGZVtqZV0scmVsVHlwZTpGZVtqZS0xXSxjYXJkQjpGZVtqZS0yXX07YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9eGUuQ2FyZGluYWxpdHkuWkVST19PUl9PTkU7YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9eGUuQ2FyZGluYWxpdHkuWkVST19PUl9NT1JFO2JyZWFrO2Nhc2UgMzY6dGhpcy4kPXhlLkNhcmRpbmFsaXR5Lk9ORV9PUl9NT1JFO2JyZWFrO2Nhc2UgMzc6dGhpcy4kPXhlLkNhcmRpbmFsaXR5Lk9OTFlfT05FO2JyZWFrO2Nhc2UgMzg6dGhpcy4kPXhlLkNhcmRpbmFsaXR5Lk1EX1BBUkVOVDticmVhaztjYXNlIDM5OnRoaXMuJD14ZS5JZGVudGlmaWNhdGlvbi5OT05fSURFTlRJRllJTkc7YnJlYWs7Y2FzZSA0MDp0aGlzLiQ9eGUuSWRlbnRpZmljYXRpb24uSURFTlRJRllJTkc7YnJlYWt9fSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LGkocyxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6WzEsNl0sOTo3LDEwOlsxLDhdLDExOjksMjA6dSwyMjpkLDI0OnAsMjY6diwyNzpiLDI4Onl9LGkocyxbMiw3XSx7MTpbMiwxXX0pLGkocyxbMiwzXSksezk6MTYsMTE6OSwyMDp1LDIyOmQsMjQ6cCwyNjp2LDI3OmIsMjg6eX0saShzLFsyLDVdKSxpKHMsWzIsNl0pLGkocyxbMiwxMV0sezEyOjE3LDM5OjIwLDE1OlsxLDE4XSwxODpbMSwxOV0sNDE6VCw0MjpfLDQzOkEsNDQ6UCw0NTpSfSksezIxOlsxLDI2XX0sezIzOlsxLDI3XX0sezI1OlsxLDI4XX0saShzLFsyLDE4XSksaShGLFsyLDE5XSksaShGLFsyLDIwXSksaShzLFsyLDRdKSx7MTE6MjksMjc6YiwyODp5fSx7MTY6MzAsMTc6WzEsMzFdLDI5OjMyLDMwOjMzLDM0Omp9LHsxMTozNSwyNzpiLDI4Onl9LHs0MDozNiw0NjpbMSwzN10sNDc6WzEsMzhdfSxpKEssWzIsMzRdKSxpKEssWzIsMzVdKSxpKEssWzIsMzZdKSxpKEssWzIsMzddKSxpKEssWzIsMzhdKSxpKHMsWzIsMTVdKSxpKHMsWzIsMTZdKSxpKHMsWzIsMTddKSx7MTM6WzEsMzldfSx7MTc6WzEsNDBdfSxpKHMsWzIsMTBdKSx7MTY6NDEsMTc6WzIsMjFdLDI5OjMyLDMwOjMzLDM0Omp9LHszMTo0MiwzNDpbMSw0M119LHszNDpbMiwyN119LHsxOTpbMSw0NF19LHszOTo0NSw0MTpULDQyOl8sNDM6QSw0NDpQLDQ1OlJ9LGkoZWUsWzIsMzldKSxpKGVlLFsyLDQwXSksezE0OjQ2LDI3OlsxLDQ5XSwyODpbMSw0OF0sNDg6WzEsNDddfSxpKHMsWzIsOV0pLHsxNzpbMiwyMl19LGkoaWUsWzIsMjNdLHszMjo1MCwzMzo1MSwzNTo1MiwzNzpvZSwzODpwZX0pLGkoWzE3LDM0LDM3LDM4XSxbMiwyOF0pLGkocyxbMiwxNF0sezE1OlsxLDU1XX0pLGkoWzI3LDI4XSxbMiwzM10pLGkocyxbMiw4XSksaShzLFsyLDQxXSksaShzLFsyLDQyXSksaShzLFsyLDQzXSksaShpZSxbMiwyNF0sezMzOjU2LDM2OlsxLDU3XSwzODpwZX0pLGkoaWUsWzIsMjVdKSxpKGJlLFsyLDI5XSksaShpZSxbMiwzMl0pLGkoYmUsWzIsMzFdKSx7MTY6NTgsMTc6WzEsNTldLDI5OjMyLDMwOjMzLDM0Omp9LGkoaWUsWzIsMjZdKSx7MzU6NjAsMzc6b2V9LHsxNzpbMSw2MV19LGkocyxbMiwxM10pLGkoYmUsWzIsMzBdKSxpKHMsWzIsMTJdKV0sZGVmYXVsdEFjdGlvbnM6ezM0OlsyLDI3XSw0MTpbMiwyMl19LHBhcnNlRXJyb3I6ZnVuY3Rpb24oWCxnZSl7aWYoZ2UucmVjb3ZlcmFibGUpdGhpcy50cmFjZShYKTtlbHNle3ZhciBXPW5ldyBFcnJvcihYKTt0aHJvdyBXLmhhc2g9Z2UsV319LHBhcnNlOmZ1bmN0aW9uKFgpe3ZhciBnZT10aGlzLFc9WzBdLHhlPVtdLFU9W251bGxdLEZlPVtdLFBlPXRoaXMudGFibGUsamU9IiIsSWU9MCxTZT0wLENlPTIsa2U9MSxLZT1GZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxGdD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLE5lPXt5eTp7fX07Zm9yKHZhciBnbiBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGduKSYmKE5lLnl5W2duXT10aGlzLnl5W2duXSk7RnQuc2V0SW5wdXQoWCxOZS55eSksTmUueXkubGV4ZXI9RnQsTmUueXkucGFyc2VyPXRoaXMsdHlwZW9mIEZ0Lnl5bGxvYz4idSImJihGdC55eWxsb2M9e30pO3ZhciBfdD1GdC55eWxsb2M7RmUucHVzaChfdCk7dmFyIEV0PUZ0Lm9wdGlvbnMmJkZ0Lm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBOZS55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1OZS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBHdCgpe3ZhciBqaTtyZXR1cm4gamk9eGUucG9wKCl8fEZ0LmxleCgpfHxrZSx0eXBlb2YgamkhPSJudW1iZXIiJiYoamkgaW5zdGFuY2VvZiBBcnJheSYmKHhlPWppLGppPXhlLnBvcCgpKSxqaT1nZS5zeW1ib2xzX1tqaV18fGppKSxqaX1mb3IodmFyIGxuLHh0LFB0LFFlLER0PXt9LGt0LE9uLGh0LHpyOzspe2lmKHh0PVdbVy5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t4dF0/UHQ9dGhpcy5kZWZhdWx0QWN0aW9uc1t4dF06KChsbj09PW51bGx8fHR5cGVvZiBsbj4idSIpJiYobG49R3QoKSksUHQ9UGVbeHRdJiZQZVt4dF1bbG5dKSx0eXBlb2YgUHQ+InUifHwhUHQubGVuZ3RofHwhUHRbMF0pe3ZhciB5dD0iIjt6cj1bXTtmb3Ioa3QgaW4gUGVbeHRdKXRoaXMudGVybWluYWxzX1trdF0mJmt0PkNlJiZ6ci5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19ba3RdKyInIik7RnQuc2hvd1Bvc2l0aW9uP3l0PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEllKzEpK2A6CmArRnQuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCt6ci5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW2xuXXx8bG4pKyInIjp5dD0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhJZSsxKSsiOiBVbmV4cGVjdGVkICIrKGxuPT1rZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tsbl18fGxuKSsiJyIpLHRoaXMucGFyc2VFcnJvcih5dCx7dGV4dDpGdC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bbG5dfHxsbixsaW5lOkZ0Lnl5bGluZW5vLGxvYzpfdCxleHBlY3RlZDp6cn0pfWlmKFB0WzBdaW5zdGFuY2VvZiBBcnJheSYmUHQubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit4dCsiLCB0b2tlbjogIitsbik7c3dpdGNoKFB0WzBdKXtjYXNlIDE6Vy5wdXNoKGxuKSxVLnB1c2goRnQueXl0ZXh0KSxGZS5wdXNoKEZ0Lnl5bGxvYyksVy5wdXNoKFB0WzFdKSxsbj1udWxsLFNlPUZ0Lnl5bGVuZyxqZT1GdC55eXRleHQsSWU9RnQueXlsaW5lbm8sX3Q9RnQueXlsbG9jO2JyZWFrO2Nhc2UgMjppZihPbj10aGlzLnByb2R1Y3Rpb25zX1tQdFsxXV1bMV0sRHQuJD1VW1UubGVuZ3RoLU9uXSxEdC5fJD17Zmlyc3RfbGluZTpGZVtGZS5sZW5ndGgtKE9ufHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6RmVbRmUubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46RmVbRmUubGVuZ3RoLShPbnx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpGZVtGZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LEV0JiYoRHQuXyQucmFuZ2U9W0ZlW0ZlLmxlbmd0aC0oT258fDEpXS5yYW5nZVswXSxGZVtGZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxRZT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoRHQsW2plLFNlLEllLE5lLnl5LFB0WzFdLFUsRmVdLmNvbmNhdChLZSkpLHR5cGVvZiBRZTwidSIpcmV0dXJuIFFlO09uJiYoVz1XLnNsaWNlKDAsLTEqT24qMiksVT1VLnNsaWNlKDAsLTEqT24pLEZlPUZlLnNsaWNlKDAsLTEqT24pKSxXLnB1c2godGhpcy5wcm9kdWN0aW9uc19bUHRbMV1dWzBdKSxVLnB1c2goRHQuJCksRmUucHVzaChEdC5fJCksaHQ9UGVbV1tXLmxlbmd0aC0yXV1bV1tXLmxlbmd0aC0xXV0sVy5wdXNoKGh0KTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sbmU9ZnVuY3Rpb24oKXt2YXIgZGU9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oZ2UsVyl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihnZSxXKTtlbHNlIHRocm93IG5ldyBFcnJvcihnZSl9LHNldElucHV0OmZ1bmN0aW9uKFgsZ2Upe3JldHVybiB0aGlzLnl5PWdlfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1YLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBYPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1YLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1YLHRoaXMubWF0Y2hlZCs9WDt2YXIgZ2U9WC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIGdlPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxYfSx1bnB1dDpmdW5jdGlvbihYKXt2YXIgZ2U9WC5sZW5ndGgsVz1YLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9WCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZ2UpLHRoaXMub2Zmc2V0LT1nZTt2YXIgeGU9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksVy5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPVcubGVuZ3RoLTEpO3ZhciBVPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpXPyhXLmxlbmd0aD09PXhlLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkreGVbeGUubGVuZ3RoLVcubGVuZ3RoXS5sZW5ndGgtV1swXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWdlfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W1VbMF0sVVswXSt0aGlzLnl5bGVuZy1nZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKFgpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShYKSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBYPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oWC5sZW5ndGg+MjA/Ii4uLiI6IiIpK1guc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgWD10aGlzLm1hdGNoO3JldHVybiBYLmxlbmd0aDwyMCYmKFgrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLVgubGVuZ3RoKSksKFguc3Vic3RyKDAsMjApKyhYLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgWD10aGlzLnBhc3RJbnB1dCgpLGdlPW5ldyBBcnJheShYLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIFgrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK2dlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihYLGdlKXt2YXIgVyx4ZSxVO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihVPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKFUueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSkseGU9WFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykseGUmJih0aGlzLnl5bGluZW5vKz14ZS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjp4ZT94ZVt4ZS5sZW5ndGgtMV0ubGVuZ3RoLXhlW3hlLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK1hbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9WFswXSx0aGlzLm1hdGNoKz1YWzBdLHRoaXMubWF0Y2hlcz1YLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKFhbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPVhbMF0sVz10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxnZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxXKXJldHVybiBXO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBGZSBpbiBVKXRoaXNbRmVdPVVbRmVdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIFgsZ2UsVyx4ZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBVPXRoaXMuX2N1cnJlbnRSdWxlcygpLEZlPTA7RmU8VS5sZW5ndGg7RmUrKylpZihXPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbVVtGZV1dKSxXJiYoIWdlfHxXWzBdLmxlbmd0aD5nZVswXS5sZW5ndGgpKXtpZihnZT1XLHhlPUZlLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKFg9dGhpcy50ZXN0X21hdGNoKFcsVVtGZV0pLFghPT0hMSlyZXR1cm4gWDtpZih0aGlzLl9iYWNrdHJhY2spe2dlPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGdlPyhYPXRoaXMudGVzdF9tYXRjaChnZSxVW3hlXSksWCE9PSExP1g6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBnZT10aGlzLm5leHQoKTtyZXR1cm4gZ2V8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKGdlKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goZ2UpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciBnZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBnZT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKGdlKXtyZXR1cm4gZ2U9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhnZXx8MCksZ2U+PTA/dGhpcy5jb25kaXRpb25TdGFja1tnZV06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oZ2Upe3RoaXMuYmVnaW4oZ2UpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKGdlLFcseGUsVSl7c3dpdGNoKHhlKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDIyO2Nhc2UgMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgMjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMjQ7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSA0OnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNjpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSA3OnJldHVybiAxMDtjYXNlIDg6YnJlYWs7Y2FzZSA5OnJldHVybiA4O2Nhc2UgMTA6cmV0dXJuIDI4O2Nhc2UgMTE6cmV0dXJuIDQ4O2Nhc2UgMTI6cmV0dXJuIDQ7Y2FzZSAxMzpyZXR1cm4gdGhpcy5iZWdpbigiYmxvY2siKSwxNTtjYXNlIDE0OnJldHVybiAzNjtjYXNlIDE1OmJyZWFrO2Nhc2UgMTY6cmV0dXJuIDM3O2Nhc2UgMTc6cmV0dXJuIDM0O2Nhc2UgMTg6cmV0dXJuIDM0O2Nhc2UgMTk6cmV0dXJuIDM4O2Nhc2UgMjA6YnJlYWs7Y2FzZSAyMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE3O2Nhc2UgMjI6cmV0dXJuIFcueXl0ZXh0WzBdO2Nhc2UgMjM6cmV0dXJuIDE4O2Nhc2UgMjQ6cmV0dXJuIDE5O2Nhc2UgMjU6cmV0dXJuIDQxO2Nhc2UgMjY6cmV0dXJuIDQzO2Nhc2UgMjc6cmV0dXJuIDQzO2Nhc2UgMjg6cmV0dXJuIDQzO2Nhc2UgMjk6cmV0dXJuIDQxO2Nhc2UgMzA6cmV0dXJuIDQxO2Nhc2UgMzE6cmV0dXJuIDQyO2Nhc2UgMzI6cmV0dXJuIDQyO2Nhc2UgMzM6cmV0dXJuIDQyO2Nhc2UgMzQ6cmV0dXJuIDQyO2Nhc2UgMzU6cmV0dXJuIDQyO2Nhc2UgMzY6cmV0dXJuIDQzO2Nhc2UgMzc6cmV0dXJuIDQyO2Nhc2UgMzg6cmV0dXJuIDQzO2Nhc2UgMzk6cmV0dXJuIDQ0O2Nhc2UgNDA6cmV0dXJuIDQ0O2Nhc2UgNDE6cmV0dXJuIDQ0O2Nhc2UgNDI6cmV0dXJuIDQ0O2Nhc2UgNDM6cmV0dXJuIDQxO2Nhc2UgNDQ6cmV0dXJuIDQyO2Nhc2UgNDU6cmV0dXJuIDQzO2Nhc2UgNDY6cmV0dXJuIDQ1O2Nhc2UgNDc6cmV0dXJuIDQ2O2Nhc2UgNDg6cmV0dXJuIDQ3O2Nhc2UgNDk6cmV0dXJuIDQ3O2Nhc2UgNTA6cmV0dXJuIDQ2O2Nhc2UgNTE6cmV0dXJuIDQ2O2Nhc2UgNTI6cmV0dXJuIDQ2O2Nhc2UgNTM6cmV0dXJuIDI3O2Nhc2UgNTQ6cmV0dXJuIFcueXl0ZXh0WzBdO2Nhc2UgNTU6cmV0dXJuIDZ9fSxydWxlczpbL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86W1xzXSspL2ksL14oPzoiW14iJVxyXG5cdlxiXFxdKyIpL2ksL14oPzoiW14iXSoiKS9pLC9eKD86ZXJEaWFncmFtXGIpL2ksL14oPzpceykvaSwvXig/OiwpL2ksL14oPzpccyspL2ksL14oPzpcYigoPzpQSyl8KD86RkspfCg/OlVLKSlcYikvaSwvXig/OiguKj8pW35dKC4qPykqW35dKS9pLC9eKD86W1wqQS1aYS16X11bQS1aYS16MC05XC1fXFtcXVwoXCldKikvaSwvXig/OiJbXiJdKiIpL2ksL14oPzpbXG5dKykvaSwvXig/Olx9KS9pLC9eKD86LikvaSwvXig/OlxbKS9pLC9eKD86XF0pL2ksL14oPzpvbmUgb3IgemVyb1xiKS9pLC9eKD86b25lIG9yIG1vcmVcYikvaSwvXig/Om9uZSBvciBtYW55XGIpL2ksL14oPzoxXCspL2ksL14oPzpcfG9cYikvaSwvXig/Onplcm8gb3Igb25lXGIpL2ksL14oPzp6ZXJvIG9yIG1vcmVcYikvaSwvXig/Onplcm8gb3IgbWFueVxiKS9pLC9eKD86MFwrKS9pLC9eKD86XH1vXGIpL2ksL14oPzptYW55XCgwXCkpL2ksL14oPzptYW55XCgxXCkpL2ksL14oPzptYW55XGIpL2ksL14oPzpcfVx8KS9pLC9eKD86b25lXGIpL2ksL14oPzpvbmx5IG9uZVxiKS9pLC9eKD86MVxiKS9pLC9eKD86XHxcfCkvaSwvXig/Om9cfCkvaSwvXig/Om9ceykvaSwvXig/Olx8XHspL2ksL14oPzpccyp1XGIpL2ksL14oPzpcLlwuKS9pLC9eKD86LS0pL2ksL14oPzp0b1xiKS9pLC9eKD86b3B0aW9uYWxseSB0b1xiKS9pLC9eKD86XC4tKS9pLC9eKD86LVwuKS9pLC9eKD86W0EtWmEtel9dW0EtWmEtejAtOVwtX10qKS9pLC9eKD86LikvaSwvXig/OiQpL2ldLGNvbmRpdGlvbnM6e2FjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOls1LDZdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbM10saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOlsxXSxpbmNsdXNpdmU6ITF9LGJsb2NrOntydWxlczpbMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjJdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMiw0LDcsOCw5LDEwLDExLDEyLDEzLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIGRlfSgpO2FlLmxleGVyPW5lO2Z1bmN0aW9uIHNlKCl7dGhpcy55eT17fX1yZXR1cm4gc2UucHJvdG90eXBlPWFlLGFlLlBhcnNlcj1zZSxuZXcgc2V9KCk7Vm1lLnBhcnNlcj1WbWU7Y29uc3QgTGVuPVZtZTtsZXQgQjk9e30sVW1lPVtdO2NvbnN0IE1lbj17WkVST19PUl9PTkU6IlpFUk9fT1JfT05FIixaRVJPX09SX01PUkU6IlpFUk9fT1JfTU9SRSIsT05FX09SX01PUkU6Ik9ORV9PUl9NT1JFIixPTkxZX09ORToiT05MWV9PTkUiLE1EX1BBUkVOVDoiTURfUEFSRU5UIn0sRGVuPXtOT05fSURFTlRJRllJTkc6Ik5PTl9JREVOVElGWUlORyIsSURFTlRJRllJTkc6IklERU5USUZZSU5HIn0sUlVlPWZ1bmN0aW9uKGkscz12b2lkIDApe3JldHVybiBCOVtpXT09PXZvaWQgMD8oQjlbaV09e2F0dHJpYnV0ZXM6W10sYWxpYXM6c30sWGUuaW5mbygiQWRkZWQgbmV3IGVudGl0eSA6IixpKSk6QjlbaV0mJiFCOVtpXS5hbGlhcyYmcyYmKEI5W2ldLmFsaWFzPXMsWGUuaW5mbyhgQWRkIGFsaWFzICcke3N9JyB0byBlbnRpdHkgJyR7aX0nYCkpLEI5W2ldfSxJZW49e0NhcmRpbmFsaXR5Ok1lbixJZGVudGlmaWNhdGlvbjpEZW4sZ2V0Q29uZmlnOigpPT5xdCgpLmVyLGFkZEVudGl0eTpSVWUsYWRkQXR0cmlidXRlczpmdW5jdGlvbihpLHMpe2xldCB1PVJVZShpKSxkO2ZvcihkPXMubGVuZ3RoLTE7ZD49MDtkLS0pdS5hdHRyaWJ1dGVzLnB1c2goc1tkXSksWGUuZGVidWcoIkFkZGVkIGF0dHJpYnV0ZSAiLHNbZF0uYXR0cmlidXRlTmFtZSl9LGdldEVudGl0aWVzOigpPT5COSxhZGRSZWxhdGlvbnNoaXA6ZnVuY3Rpb24oaSxzLHUsZCl7bGV0IHA9e2VudGl0eUE6aSxyb2xlQTpzLGVudGl0eUI6dSxyZWxTcGVjOmR9O1VtZS5wdXNoKHApLFhlLmRlYnVnKCJBZGRlZCBuZXcgcmVsYXRpb25zaGlwIDoiLHApfSxnZXRSZWxhdGlvbnNoaXBzOigpPT5VbWUsY2xlYXI6ZnVuY3Rpb24oKXtCOT17fSxVbWU9W10sUGcoKX0sc2V0QWNjVGl0bGU6QmcsZ2V0QWNjVGl0bGU6Q3Asc2V0QWNjRGVzY3JpcHRpb246U3AsZ2V0QWNjRGVzY3JpcHRpb246X3Asc2V0RGlhZ3JhbVRpdGxlOmNtLGdldERpYWdyYW1UaXRsZTpBcH0sVTM9e09OTFlfT05FX1NUQVJUOiJPTkxZX09ORV9TVEFSVCIsT05MWV9PTkVfRU5EOiJPTkxZX09ORV9FTkQiLFpFUk9fT1JfT05FX1NUQVJUOiJaRVJPX09SX09ORV9TVEFSVCIsWkVST19PUl9PTkVfRU5EOiJaRVJPX09SX09ORV9FTkQiLE9ORV9PUl9NT1JFX1NUQVJUOiJPTkVfT1JfTU9SRV9TVEFSVCIsT05FX09SX01PUkVfRU5EOiJPTkVfT1JfTU9SRV9FTkQiLFpFUk9fT1JfTU9SRV9TVEFSVDoiWkVST19PUl9NT1JFX1NUQVJUIixaRVJPX09SX01PUkVfRU5EOiJaRVJPX09SX01PUkVfRU5EIixNRF9QQVJFTlRfRU5EOiJNRF9QQVJFTlRfRU5EIixNRF9QQVJFTlRfU1RBUlQ6Ik1EX1BBUkVOVF9TVEFSVCJ9LEczPXtFUk1hcmtlcnM6VTMsaW5zZXJ0TWFya2VyczpmdW5jdGlvbihpLHMpe2xldCB1O2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsVTMuTURfUEFSRU5UX1NUQVJUKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLFUzLk1EX1BBUkVOVF9FTkQpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixVMy5PTkxZX09ORV9TVEFSVCkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsOSkuYXR0cigibWFya2VyV2lkdGgiLDE4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixzLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTksMCBMOSwxOCBNMTUsMCBMMTUsMTgiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLFUzLk9OTFlfT05FX0VORCkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDkpLmF0dHIoIm1hcmtlcldpZHRoIiwxOCkuYXR0cigibWFya2VySGVpZ2h0IiwxOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIscy5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0zLDAgTDMsMTggTTksMCBMOSwxOCIpLHU9aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixVMy5aRVJPX09SX09ORV9TVEFSVCkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsOSkuYXR0cigibWFya2VyV2lkdGgiLDMwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE4KS5hdHRyKCJvcmllbnQiLCJhdXRvIiksdS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIscy5zdHJva2UpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4IiwyMSkuYXR0cigiY3kiLDkpLmF0dHIoInIiLDYpLHUuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixzLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTksMCBMOSwxOCIpLHU9aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixVMy5aRVJPX09SX09ORV9FTkQpLmF0dHIoInJlZlgiLDMwKS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMzApLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKSx1LmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIixzLnN0cm9rZSkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDkpLmF0dHIoImN5Iiw5KS5hdHRyKCJyIiw2KSx1LmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIscy5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0yMSwwIEwyMSwxOCIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsVTMuT05FX09SX01PUkVfU1RBUlQpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiwxOCkuYXR0cigibWFya2VyV2lkdGgiLDQ1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDM2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixzLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTAsMTggUSAxOCwwIDM2LDE4IFEgMTgsMzYgMCwxOCBNNDIsOSBMNDIsMjciKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLFUzLk9ORV9PUl9NT1JFX0VORCkuYXR0cigicmVmWCIsMjcpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNDUpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLHMuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMyw5IEwzLDI3IE05LDE4IFEyNywwIDQ1LDE4IFEyNywzNiA5LDE4IiksdT1pLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLFUzLlpFUk9fT1JfTU9SRV9TVEFSVCkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNTcpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKSx1LmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIixzLnN0cm9rZSkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDQ4KS5hdHRyKCJjeSIsMTgpLmF0dHIoInIiLDYpLHUuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixzLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTAsMTggUTE4LDAgMzYsMTggUTE4LDM2IDAsMTgiKSx1PWkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsVTMuWkVST19PUl9NT1JFX0VORCkuYXR0cigicmVmWCIsMzkpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNTcpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKSx1LmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIixzLnN0cm9rZSkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDkpLmF0dHIoImN5IiwxOCkuYXR0cigiciIsNiksdS5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLHMuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMjEsMTggUTM5LDAgNTcsMTggUTM5LDM2IDIxLDE4Iil9fSxPZW49L14oPzpbMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApJC9pO2Z1bmN0aW9uIE5lbihpKXtyZXR1cm4gdHlwZW9mIGk9PSJzdHJpbmciJiZPZW4udGVzdChpKX1jb25zdCBVZD1bXTtmb3IobGV0IGk9MDtpPDI1NjsrK2kpVWQucHVzaCgoaSsyNTYpLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7ZnVuY3Rpb24gUGVuKGkscz0wKXtyZXR1cm4gVWRbaVtzKzBdXStVZFtpW3MrMV1dK1VkW2lbcysyXV0rVWRbaVtzKzNdXSsiLSIrVWRbaVtzKzRdXStVZFtpW3MrNV1dKyItIitVZFtpW3MrNl1dK1VkW2lbcys3XV0rIi0iK1VkW2lbcys4XV0rVWRbaVtzKzldXSsiLSIrVWRbaVtzKzEwXV0rVWRbaVtzKzExXV0rVWRbaVtzKzEyXV0rVWRbaVtzKzEzXV0rVWRbaVtzKzE0XV0rVWRbaVtzKzE1XV19ZnVuY3Rpb24gQmVuKGkpe2lmKCFOZW4oaSkpdGhyb3cgVHlwZUVycm9yKCJJbnZhbGlkIFVVSUQiKTtsZXQgcztjb25zdCB1PW5ldyBVaW50OEFycmF5KDE2KTtyZXR1cm4gdVswXT0ocz1wYXJzZUludChpLnNsaWNlKDAsOCksMTYpKT4+PjI0LHVbMV09cz4+PjE2JjI1NSx1WzJdPXM+Pj44JjI1NSx1WzNdPXMmMjU1LHVbNF09KHM9cGFyc2VJbnQoaS5zbGljZSg5LDEzKSwxNikpPj4+OCx1WzVdPXMmMjU1LHVbNl09KHM9cGFyc2VJbnQoaS5zbGljZSgxNCwxOCksMTYpKT4+PjgsdVs3XT1zJjI1NSx1WzhdPShzPXBhcnNlSW50KGkuc2xpY2UoMTksMjMpLDE2KSk+Pj44LHVbOV09cyYyNTUsdVsxMF09KHM9cGFyc2VJbnQoaS5zbGljZSgyNCwzNiksMTYpKS8xMDk5NTExNjI3Nzc2JjI1NSx1WzExXT1zLzQyOTQ5NjcyOTYmMjU1LHVbMTJdPXM+Pj4yNCYyNTUsdVsxM109cz4+PjE2JjI1NSx1WzE0XT1zPj4+OCYyNTUsdVsxNV09cyYyNTUsdX1mdW5jdGlvbiBGZW4oaSl7aT11bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoaSkpO2NvbnN0IHM9W107Zm9yKGxldCB1PTA7dTxpLmxlbmd0aDsrK3Upcy5wdXNoKGkuY2hhckNvZGVBdCh1KSk7cmV0dXJuIHN9Y29uc3QgUmVuPSI2YmE3YjgxMC05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgiLGplbj0iNmJhN2I4MTEtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4IjtmdW5jdGlvbiAkZW4oaSxzLHUpe2Z1bmN0aW9uIGQocCx2LGIseSl7dmFyIFQ7aWYodHlwZW9mIHA9PSJzdHJpbmciJiYocD1GZW4ocCkpLHR5cGVvZiB2PT0ic3RyaW5nIiYmKHY9QmVuKHYpKSwoKFQ9dik9PT1udWxsfHxUPT09dm9pZCAwP3ZvaWQgMDpULmxlbmd0aCkhPT0xNil0aHJvdyBUeXBlRXJyb3IoIk5hbWVzcGFjZSBtdXN0IGJlIGFycmF5LWxpa2UgKDE2IGl0ZXJhYmxlIGludGVnZXIgdmFsdWVzLCAwLTI1NSkiKTtsZXQgXz1uZXcgVWludDhBcnJheSgxNitwLmxlbmd0aCk7aWYoXy5zZXQodiksXy5zZXQocCx2Lmxlbmd0aCksXz11KF8pLF9bNl09X1s2XSYxNXxzLF9bOF09X1s4XSY2M3wxMjgsYil7eT15fHwwO2ZvcihsZXQgQT0wO0E8MTY7KytBKWJbeStBXT1fW0FdO3JldHVybiBifXJldHVybiBQZW4oXyl9dHJ5e2QubmFtZT1pfWNhdGNoe31yZXR1cm4gZC5ETlM9UmVuLGQuVVJMPWplbixkfWZ1bmN0aW9uIHplbihpLHMsdSxkKXtzd2l0Y2goaSl7Y2FzZSAwOnJldHVybiBzJnVefnMmZDtjYXNlIDE6cmV0dXJuIHNedV5kO2Nhc2UgMjpyZXR1cm4gcyZ1XnMmZF51JmQ7Y2FzZSAzOnJldHVybiBzXnVeZH19ZnVuY3Rpb24gR21lKGkscyl7cmV0dXJuIGk8PHN8aT4+PjMyLXN9ZnVuY3Rpb24gcWVuKGkpe2NvbnN0IHM9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDMzOTU0Njk3ODJdLHU9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXTtpZih0eXBlb2YgaT09InN0cmluZyIpe2NvbnN0IGI9dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGkpKTtpPVtdO2ZvcihsZXQgeT0wO3k8Yi5sZW5ndGg7Kyt5KWkucHVzaChiLmNoYXJDb2RlQXQoeSkpfWVsc2UgQXJyYXkuaXNBcnJheShpKXx8KGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoaSkpO2kucHVzaCgxMjgpO2NvbnN0IGQ9aS5sZW5ndGgvNCsyLHA9TWF0aC5jZWlsKGQvMTYpLHY9bmV3IEFycmF5KHApO2ZvcihsZXQgYj0wO2I8cDsrK2Ipe2NvbnN0IHk9bmV3IFVpbnQzMkFycmF5KDE2KTtmb3IobGV0IFQ9MDtUPDE2OysrVCl5W1RdPWlbYio2NCtUKjRdPDwyNHxpW2IqNjQrVCo0KzFdPDwxNnxpW2IqNjQrVCo0KzJdPDw4fGlbYio2NCtUKjQrM107dltiXT15fXZbcC0xXVsxNF09KGkubGVuZ3RoLTEpKjgvTWF0aC5wb3coMiwzMiksdltwLTFdWzE0XT1NYXRoLmZsb29yKHZbcC0xXVsxNF0pLHZbcC0xXVsxNV09KGkubGVuZ3RoLTEpKjgmNDI5NDk2NzI5NTtmb3IobGV0IGI9MDtiPHA7KytiKXtjb25zdCB5PW5ldyBVaW50MzJBcnJheSg4MCk7Zm9yKGxldCBGPTA7RjwxNjsrK0YpeVtGXT12W2JdW0ZdO2ZvcihsZXQgRj0xNjtGPDgwOysrRil5W0ZdPUdtZSh5W0YtM11eeVtGLThdXnlbRi0xNF1eeVtGLTE2XSwxKTtsZXQgVD11WzBdLF89dVsxXSxBPXVbMl0sUD11WzNdLFI9dVs0XTtmb3IobGV0IEY9MDtGPDgwOysrRil7Y29uc3Qgaj1NYXRoLmZsb29yKEYvMjApLEs9R21lKFQsNSkremVuKGosXyxBLFApK1Irc1tqXSt5W0ZdPj4+MDtSPVAsUD1BLEE9R21lKF8sMzApPj4+MCxfPVQsVD1LfXVbMF09dVswXStUPj4+MCx1WzFdPXVbMV0rXz4+PjAsdVsyXT11WzJdK0E+Pj4wLHVbM109dVszXStQPj4+MCx1WzRdPXVbNF0rUj4+PjB9cmV0dXJuW3VbMF0+PjI0JjI1NSx1WzBdPj4xNiYyNTUsdVswXT4+OCYyNTUsdVswXSYyNTUsdVsxXT4+MjQmMjU1LHVbMV0+PjE2JjI1NSx1WzFdPj44JjI1NSx1WzFdJjI1NSx1WzJdPj4yNCYyNTUsdVsyXT4+MTYmMjU1LHVbMl0+PjgmMjU1LHVbMl0mMjU1LHVbM10+PjI0JjI1NSx1WzNdPj4xNiYyNTUsdVszXT4+OCYyNTUsdVszXSYyNTUsdVs0XT4+MjQmMjU1LHVbNF0+PjE2JjI1NSx1WzRdPj44JjI1NSx1WzRdJjI1NV19Y29uc3QgSGVuPSRlbigidjUiLDgwLHFlbiksVmVuPS9bXlxkQS1aYS16XShcVykqL2c7bGV0IHAxPXt9LElSPW5ldyBNYXA7Y29uc3QgVWVuPWZ1bmN0aW9uKGkpe2NvbnN0IHM9T2JqZWN0LmtleXMoaSk7Zm9yKGNvbnN0IHUgb2YgcylwMVt1XT1pW3VdfSxHZW49KGkscyx1KT0+e2NvbnN0IGQ9cDEuZW50aXR5UGFkZGluZy8zLHA9cDEuZW50aXR5UGFkZGluZy8zLHY9cDEuZm9udFNpemUqLjg1LGI9cy5ub2RlKCkuZ2V0QkJveCgpLHk9W107bGV0IFQ9ITEsXz0hMSxBPTAsUD0wLFI9MCxGPTAsaj1iLmhlaWdodCtkKjIsSz0xO3UuZm9yRWFjaChwZT0+e3BlLmF0dHJpYnV0ZUtleVR5cGVMaXN0IT09dm9pZCAwJiZwZS5hdHRyaWJ1dGVLZXlUeXBlTGlzdC5sZW5ndGg+MCYmKFQ9ITApLHBlLmF0dHJpYnV0ZUNvbW1lbnQhPT12b2lkIDAmJihfPSEwKX0pLHUuZm9yRWFjaChwZT0+e2NvbnN0IGJlPWAke3Mubm9kZSgpLmlkfS1hdHRyLSR7S31gO2xldCBhZT0wO2NvbnN0IG5lPXFGKHBlLmF0dHJpYnV0ZVR5cGUpLHNlPWkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgZW50aXR5TGFiZWwiLCEwKS5hdHRyKCJpZCIsYCR7YmV9LXR5cGVgKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5zdHlsZSgiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJsZWZ0Iikuc3R5bGUoImZvbnQtZmFtaWx5IixxdCgpLmZvbnRGYW1pbHkpLnN0eWxlKCJmb250LXNpemUiLHYrInB4IikudGV4dChuZSksZGU9aS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJlciBlbnRpdHlMYWJlbCIsITApLmF0dHIoImlkIixgJHtiZX0tbmFtZWApLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnN0eWxlKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsImxlZnQiKS5zdHlsZSgiZm9udC1mYW1pbHkiLHF0KCkuZm9udEZhbWlseSkuc3R5bGUoImZvbnQtc2l6ZSIsdisicHgiKS50ZXh0KHBlLmF0dHJpYnV0ZU5hbWUpLFg9e307WC50bj1zZSxYLm5uPWRlO2NvbnN0IGdlPXNlLm5vZGUoKS5nZXRCQm94KCksVz1kZS5ub2RlKCkuZ2V0QkJveCgpO2lmKEE9TWF0aC5tYXgoQSxnZS53aWR0aCksUD1NYXRoLm1heChQLFcud2lkdGgpLGFlPU1hdGgubWF4KGdlLmhlaWdodCxXLmhlaWdodCksVCl7Y29uc3QgeGU9cGUuYXR0cmlidXRlS2V5VHlwZUxpc3QhPT12b2lkIDA/cGUuYXR0cmlidXRlS2V5VHlwZUxpc3Quam9pbigiLCIpOiIiLFU9aS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJlciBlbnRpdHlMYWJlbCIsITApLmF0dHIoImlkIixgJHtiZX0ta2V5YCkuYXR0cigieCIsMCkuYXR0cigieSIsMCkuc3R5bGUoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuc3R5bGUoInRleHQtYW5jaG9yIiwibGVmdCIpLnN0eWxlKCJmb250LWZhbWlseSIscXQoKS5mb250RmFtaWx5KS5zdHlsZSgiZm9udC1zaXplIix2KyJweCIpLnRleHQoeGUpO1gua249VTtjb25zdCBGZT1VLm5vZGUoKS5nZXRCQm94KCk7Uj1NYXRoLm1heChSLEZlLndpZHRoKSxhZT1NYXRoLm1heChhZSxGZS5oZWlnaHQpfWlmKF8pe2NvbnN0IHhlPWkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgZW50aXR5TGFiZWwiLCEwKS5hdHRyKCJpZCIsYCR7YmV9LWNvbW1lbnRgKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5zdHlsZSgiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJsZWZ0Iikuc3R5bGUoImZvbnQtZmFtaWx5IixxdCgpLmZvbnRGYW1pbHkpLnN0eWxlKCJmb250LXNpemUiLHYrInB4IikudGV4dChwZS5hdHRyaWJ1dGVDb21tZW50fHwiIik7WC5jbj14ZTtjb25zdCBVPXhlLm5vZGUoKS5nZXRCQm94KCk7Rj1NYXRoLm1heChGLFUud2lkdGgpLGFlPU1hdGgubWF4KGFlLFUuaGVpZ2h0KX1YLmhlaWdodD1hZSx5LnB1c2goWCksais9YWUrZCoyLEsrPTF9KTtsZXQgZWU9NDtUJiYoZWUrPTIpLF8mJihlZSs9Mik7Y29uc3QgaWU9QStQK1IrRixvZT17d2lkdGg6TWF0aC5tYXgocDEubWluRW50aXR5V2lkdGgsTWF0aC5tYXgoYi53aWR0aCtwMS5lbnRpdHlQYWRkaW5nKjIsaWUrcCplZSkpLGhlaWdodDp1Lmxlbmd0aD4wP2o6TWF0aC5tYXgocDEubWluRW50aXR5SGVpZ2h0LGIuaGVpZ2h0K3AxLmVudGl0eVBhZGRpbmcqMil9O2lmKHUubGVuZ3RoPjApe2NvbnN0IHBlPU1hdGgubWF4KDAsKG9lLndpZHRoLWllLXAqZWUpLyhlZS8yKSk7cy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvZS53aWR0aC8yKyIsIisoZCtiLmhlaWdodC8yKSsiKSIpO2xldCBiZT1iLmhlaWdodCtkKjIsYWU9ImF0dHJpYnV0ZUJveE9kZCI7eS5mb3JFYWNoKG5lPT57Y29uc3Qgc2U9YmUrZCtuZS5oZWlnaHQvMjtuZS50bi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitwKyIsIitzZSsiKSIpO2NvbnN0IGRlPWkuaW5zZXJ0KCJyZWN0IiwiIyIrbmUudG4ubm9kZSgpLmlkKS5jbGFzc2VkKGBlciAke2FlfWAsITApLmF0dHIoIngiLDApLmF0dHIoInkiLGJlKS5hdHRyKCJ3aWR0aCIsQStwKjIrcGUpLmF0dHIoImhlaWdodCIsbmUuaGVpZ2h0K2QqMiksWD1wYXJzZUZsb2F0KGRlLmF0dHIoIngiKSkrcGFyc2VGbG9hdChkZS5hdHRyKCJ3aWR0aCIpKTtuZS5ubi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoWCtwKSsiLCIrc2UrIikiKTtjb25zdCBnZT1pLmluc2VydCgicmVjdCIsIiMiK25lLm5uLm5vZGUoKS5pZCkuY2xhc3NlZChgZXIgJHthZX1gLCEwKS5hdHRyKCJ4IixYKS5hdHRyKCJ5IixiZSkuYXR0cigid2lkdGgiLFArcCoyK3BlKS5hdHRyKCJoZWlnaHQiLG5lLmhlaWdodCtkKjIpO2xldCBXPXBhcnNlRmxvYXQoZ2UuYXR0cigieCIpKStwYXJzZUZsb2F0KGdlLmF0dHIoIndpZHRoIikpO2lmKFQpe25lLmtuLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhXK3ApKyIsIitzZSsiKSIpO2NvbnN0IHhlPWkuaW5zZXJ0KCJyZWN0IiwiIyIrbmUua24ubm9kZSgpLmlkKS5jbGFzc2VkKGBlciAke2FlfWAsITApLmF0dHIoIngiLFcpLmF0dHIoInkiLGJlKS5hdHRyKCJ3aWR0aCIsUitwKjIrcGUpLmF0dHIoImhlaWdodCIsbmUuaGVpZ2h0K2QqMik7Vz1wYXJzZUZsb2F0KHhlLmF0dHIoIngiKSkrcGFyc2VGbG9hdCh4ZS5hdHRyKCJ3aWR0aCIpKX1fJiYobmUuY24uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKFcrcCkrIiwiK3NlKyIpIiksaS5pbnNlcnQoInJlY3QiLCIjIituZS5jbi5ub2RlKCkuaWQpLmNsYXNzZWQoYGVyICR7YWV9YCwidHJ1ZSIpLmF0dHIoIngiLFcpLmF0dHIoInkiLGJlKS5hdHRyKCJ3aWR0aCIsRitwKjIrcGUpLmF0dHIoImhlaWdodCIsbmUuaGVpZ2h0K2QqMikpLGJlKz1uZS5oZWlnaHQrZCoyLGFlPWFlPT09ImF0dHJpYnV0ZUJveE9kZCI/ImF0dHJpYnV0ZUJveEV2ZW4iOiJhdHRyaWJ1dGVCb3hPZGQifSl9ZWxzZSBvZS5oZWlnaHQ9TWF0aC5tYXgocDEubWluRW50aXR5SGVpZ2h0LGopLHMuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrb2Uud2lkdGgvMisiLCIrb2UuaGVpZ2h0LzIrIikiKTtyZXR1cm4gb2V9LEtlbj1mdW5jdGlvbihpLHMsdSl7Y29uc3QgZD1PYmplY3Qua2V5cyhzKTtsZXQgcDtyZXR1cm4gZC5mb3JFYWNoKGZ1bmN0aW9uKHYpe2NvbnN0IGI9WmVuKHYsImVudGl0eSIpO0lSLnNldCh2LGIpO2NvbnN0IHk9aS5hcHBlbmQoImciKS5hdHRyKCJpZCIsYik7cD1wPT09dm9pZCAwP2I6cDtjb25zdCBUPSJ0ZXh0LSIrYixfPXkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgZW50aXR5TGFiZWwiLCEwKS5hdHRyKCJpZCIsVCkuYXR0cigieCIsMCkuYXR0cigieSIsMCkuc3R5bGUoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImZvbnQtZmFtaWx5IixxdCgpLmZvbnRGYW1pbHkpLnN0eWxlKCJmb250LXNpemUiLHAxLmZvbnRTaXplKyJweCIpLnRleHQoc1t2XS5hbGlhcz8/dikse3dpZHRoOkEsaGVpZ2h0OlB9PUdlbih5LF8sc1t2XS5hdHRyaWJ1dGVzKSxGPXkuaW5zZXJ0KCJyZWN0IiwiIyIrVCkuY2xhc3NlZCgiZXIgZW50aXR5Qm94IiwhMCkuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLEEpLmF0dHIoImhlaWdodCIsUCkubm9kZSgpLmdldEJCb3goKTt1LnNldE5vZGUoYix7d2lkdGg6Ri53aWR0aCxoZWlnaHQ6Ri5oZWlnaHQsc2hhcGU6InJlY3QiLGlkOmJ9KX0pLHB9LFdlbj1mdW5jdGlvbihpLHMpe3Mubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe3UhPT12b2lkIDAmJnMubm9kZSh1KSE9PXZvaWQgMCYmaS5zZWxlY3QoIiMiK3UpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhzLm5vZGUodSkueC1zLm5vZGUodSkud2lkdGgvMikrIiwiKyhzLm5vZGUodSkueS1zLm5vZGUodSkuaGVpZ2h0LzIpKyIgKSIpfSl9LGpVZT1mdW5jdGlvbihpKXtyZXR1cm4oaS5lbnRpdHlBK2kucm9sZUEraS5lbnRpdHlCKS5yZXBsYWNlKC9ccy9nLCIiKX0sWWVuPWZ1bmN0aW9uKGkscyl7cmV0dXJuIGkuZm9yRWFjaChmdW5jdGlvbih1KXtzLnNldEVkZ2UoSVIuZ2V0KHUuZW50aXR5QSksSVIuZ2V0KHUuZW50aXR5Qikse3JlbGF0aW9uc2hpcDp1fSxqVWUodSkpfSksaX07bGV0ICRVZT0wO2NvbnN0IFhlbj1mdW5jdGlvbihpLHMsdSxkLHApeyRVZSsrO2NvbnN0IHY9dS5lZGdlKElSLmdldChzLmVudGl0eUEpLElSLmdldChzLmVudGl0eUIpLGpVZShzKSksYj1rNygpLngoZnVuY3Rpb24oail7cmV0dXJuIGoueH0pLnkoZnVuY3Rpb24oail7cmV0dXJuIGoueX0pLmN1cnZlKEZGKSx5PWkuaW5zZXJ0KCJwYXRoIiwiIyIrZCkuY2xhc3NlZCgiZXIgcmVsYXRpb25zaGlwTGluZSIsITApLmF0dHIoImQiLGIodi5wb2ludHMpKS5zdHlsZSgic3Ryb2tlIixwMS5zdHJva2UpLnN0eWxlKCJmaWxsIiwibm9uZSIpO3MucmVsU3BlYy5yZWxUeXBlPT09cC5kYi5JZGVudGlmaWNhdGlvbi5OT05fSURFTlRJRllJTkcmJnkuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjgsOCIpO2xldCBUPSIiO3N3aXRjaChwMS5hcnJvd01hcmtlckFic29sdXRlJiYoVD13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCxUPVQucmVwbGFjZSgvXCgvZywiXFwoIiksVD1ULnJlcGxhY2UoL1wpL2csIlxcKSIpKSxzLnJlbFNwZWMuY2FyZEEpe2Nhc2UgcC5kYi5DYXJkaW5hbGl0eS5aRVJPX09SX09ORTp5LmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitUKyIjIitHMy5FUk1hcmtlcnMuWkVST19PUl9PTkVfRU5EKyIpIik7YnJlYWs7Y2FzZSBwLmRiLkNhcmRpbmFsaXR5LlpFUk9fT1JfTU9SRTp5LmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitUKyIjIitHMy5FUk1hcmtlcnMuWkVST19PUl9NT1JFX0VORCsiKSIpO2JyZWFrO2Nhc2UgcC5kYi5DYXJkaW5hbGl0eS5PTkVfT1JfTU9SRTp5LmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitUKyIjIitHMy5FUk1hcmtlcnMuT05FX09SX01PUkVfRU5EKyIpIik7YnJlYWs7Y2FzZSBwLmRiLkNhcmRpbmFsaXR5Lk9OTFlfT05FOnkuYXR0cigibWFya2VyLWVuZCIsInVybCgiK1QrIiMiK0czLkVSTWFya2Vycy5PTkxZX09ORV9FTkQrIikiKTticmVhaztjYXNlIHAuZGIuQ2FyZGluYWxpdHkuTURfUEFSRU5UOnkuYXR0cigibWFya2VyLWVuZCIsInVybCgiK1QrIiMiK0czLkVSTWFya2Vycy5NRF9QQVJFTlRfRU5EKyIpIik7YnJlYWt9c3dpdGNoKHMucmVsU3BlYy5jYXJkQil7Y2FzZSBwLmRiLkNhcmRpbmFsaXR5LlpFUk9fT1JfT05FOnkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrVCsiIyIrRzMuRVJNYXJrZXJzLlpFUk9fT1JfT05FX1NUQVJUKyIpIik7YnJlYWs7Y2FzZSBwLmRiLkNhcmRpbmFsaXR5LlpFUk9fT1JfTU9SRTp5LmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK1QrIiMiK0czLkVSTWFya2Vycy5aRVJPX09SX01PUkVfU1RBUlQrIikiKTticmVhaztjYXNlIHAuZGIuQ2FyZGluYWxpdHkuT05FX09SX01PUkU6eS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitUKyIjIitHMy5FUk1hcmtlcnMuT05FX09SX01PUkVfU1RBUlQrIikiKTticmVhaztjYXNlIHAuZGIuQ2FyZGluYWxpdHkuT05MWV9PTkU6eS5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitUKyIjIitHMy5FUk1hcmtlcnMuT05MWV9PTkVfU1RBUlQrIikiKTticmVhaztjYXNlIHAuZGIuQ2FyZGluYWxpdHkuTURfUEFSRU5UOnkuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrVCsiIyIrRzMuRVJNYXJrZXJzLk1EX1BBUkVOVF9TVEFSVCsiKSIpO2JyZWFrfWNvbnN0IF89eS5ub2RlKCkuZ2V0VG90YWxMZW5ndGgoKSxBPXkubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoXyouNSksUD0icmVsIiskVWUsRj1pLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoImVyIHJlbGF0aW9uc2hpcExhYmVsIiwhMCkuYXR0cigiaWQiLFApLmF0dHIoIngiLEEueCkuYXR0cigieSIsQS55KS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgiZm9udC1mYW1pbHkiLHF0KCkuZm9udEZhbWlseSkuc3R5bGUoImZvbnQtc2l6ZSIscDEuZm9udFNpemUrInB4IikudGV4dChzLnJvbGVBKS5ub2RlKCkuZ2V0QkJveCgpO2kuaW5zZXJ0KCJyZWN0IiwiIyIrUCkuY2xhc3NlZCgiZXIgcmVsYXRpb25zaGlwTGFiZWxCb3giLCEwKS5hdHRyKCJ4IixBLngtRi53aWR0aC8yKS5hdHRyKCJ5IixBLnktRi5oZWlnaHQvMikuYXR0cigid2lkdGgiLEYud2lkdGgpLmF0dHIoImhlaWdodCIsRi5oZWlnaHQpfSxRZW49ZnVuY3Rpb24oaSxzLHUsZCl7cDE9cXQoKS5lcixYZS5pbmZvKCJEcmF3aW5nIEVSIGRpYWdyYW0iKTtjb25zdCBwPXF0KCkuc2VjdXJpdHlMZXZlbDtsZXQgdjtwPT09InNhbmRib3giJiYodj1JcigiI2kiK3MpKTtjb25zdCB5PUlyKHA9PT0ic2FuZGJveCI/di5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5Iikuc2VsZWN0KGBbaWQ9JyR7c30nXWApO0czLmluc2VydE1hcmtlcnMoeSxwMSk7bGV0IFQ7VD1uZXcgQjAoe211bHRpZ3JhcGg6ITAsZGlyZWN0ZWQ6ITAsY29tcG91bmQ6ITF9KS5zZXRHcmFwaCh7cmFua2RpcjpwMS5sYXlvdXREaXJlY3Rpb24sbWFyZ2lueDoyMCxtYXJnaW55OjIwLG5vZGVzZXA6MTAwLGVkZ2VzZXA6MTAwLHJhbmtzZXA6MTAwfSkuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpe3JldHVybnt9fSk7Y29uc3QgXz1LZW4oeSxkLmRiLmdldEVudGl0aWVzKCksVCksQT1ZZW4oZC5kYi5nZXRSZWxhdGlvbnNoaXBzKCksVCk7cUQoVCksV2VuKHksVCksQS5mb3JFYWNoKGZ1bmN0aW9uKEspe1hlbih5LEssVCxfLGQpfSk7Y29uc3QgUD1wMS5kaWFncmFtUGFkZGluZztBby5pbnNlcnRUaXRsZSh5LCJlbnRpdHlUaXRsZVRleHQiLHAxLnRpdGxlVG9wTWFyZ2luLGQuZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpO2NvbnN0IFI9eS5ub2RlKCkuZ2V0QkJveCgpLEY9Ui53aWR0aCtQKjIsaj1SLmhlaWdodCtQKjI7TmcoeSxqLEYscDEudXNlTWF4V2lkdGgpLHkuYXR0cigidmlld0JveCIsYCR7Ui54LVB9ICR7Ui55LVB9ICR7Rn0gJHtqfWApfSxKZW49IjI4ZTlmOWRiLTNjOGQtNWFhNS05ZmFmLTQ0Mjg2YWU1OTM3YyI7ZnVuY3Rpb24gWmVuKGk9IiIscz0iIil7Y29uc3QgdT1pLnJlcGxhY2UoVmVuLCIiKTtyZXR1cm5gJHt6VWUocyl9JHt6VWUodSl9JHtIZW4oaSxKZW4pfWB9ZnVuY3Rpb24gelVlKGk9IiIpe3JldHVybiBpLmxlbmd0aD4wP2Ake2l9LWA6IiJ9Y29uc3QgZXRuPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6TGVuLGRiOkllbixyZW5kZXJlcjp7c2V0Q29uZjpVZW4sZHJhdzpRZW59LHN0eWxlczppPT5gCiAgLmVudGl0eUJveCB7CiAgICBmaWxsOiAke2kubWFpbkJrZ307CiAgICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICB9CgogIC5hdHRyaWJ1dGVCb3hPZGQgewogICAgZmlsbDogJHtpLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZH07CiAgICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICB9CgogIC5hdHRyaWJ1dGVCb3hFdmVuIHsKICAgIGZpbGw6ICAke2kuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbn07CiAgICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICB9CgogIC5yZWxhdGlvbnNoaXBMYWJlbEJveCB7CiAgICBmaWxsOiAke2kudGVydGlhcnlDb2xvcn07CiAgICBvcGFjaXR5OiAwLjc7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2kudGVydGlhcnlDb2xvcn07CiAgICAgIHJlY3QgewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQogIH0KCiAgICAucmVsYXRpb25zaGlwTGluZSB7CiAgICAgIHN0cm9rZTogJHtpLmxpbmVDb2xvcn07CiAgICB9CgogIC5lbnRpdHlUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogIH0gICAgCiAgI01EX1BBUkVOVF9TVEFSVCB7CiAgICBmaWxsOiAjZjVmNWY1ICFpbXBvcnRhbnQ7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgICBzdHJva2Utd2lkdGg6IDE7CiAgfQogICNNRF9QQVJFTlRfRU5EIHsKICAgIGZpbGw6ICNmNWY1ZjUgIWltcG9ydGFudDsKICAgIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICAgIHN0cm9rZS13aWR0aDogMTsKICB9CiAgCmB9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBLbWU9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihhZSxuZSxzZSxkZSl7Zm9yKHNlPXNlfHx7fSxkZT1hZS5sZW5ndGg7ZGUtLTtzZVthZVtkZV1dPW5lKTtyZXR1cm4gc2V9LHM9WzEsM10sdT1bMSw2XSxkPVsxLDRdLHA9WzEsNV0sdj1bMiw1XSxiPVsxLDEyXSx5PVs1LDcsMTMsMTksMjEsMjMsMjQsMjYsMjgsMzEsMzcsNDAsNDddLFQ9WzcsMTMsMTksMjEsMjMsMjQsMjYsMjgsMzEsMzcsNDBdLF89WzcsMTIsMTMsMTksMjEsMjMsMjQsMjYsMjgsMzEsMzcsNDBdLEE9WzcsMTMsNDddLFA9WzEsNDJdLFI9WzEsNDFdLEY9WzcsMTMsMjksMzIsMzUsMzgsNDddLGo9WzEsNTVdLEs9WzEsNTZdLGVlPVsxLDU3XSxpZT1bNywxMywzMiwzNSw0Miw0N10sb2U9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGVvbDo0LEdHOjUsZG9jdW1lbnQ6NixFT0Y6NywiOiI6OCxESVI6OSxvcHRpb25zOjEwLGJvZHk6MTEsT1BUOjEyLE5MOjEzLGxpbmU6MTQsc3RhdGVtZW50OjE1LGNvbW1pdFN0YXRlbWVudDoxNixtZXJnZVN0YXRlbWVudDoxNyxjaGVycnlQaWNrU3RhdGVtZW50OjE4LGFjY190aXRsZToxOSxhY2NfdGl0bGVfdmFsdWU6MjAsYWNjX2Rlc2NyOjIxLGFjY19kZXNjcl92YWx1ZToyMixhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjIzLHNlY3Rpb246MjQsYnJhbmNoU3RhdGVtZW50OjI1LENIRUNLT1VUOjI2LHJlZjoyNyxCUkFOQ0g6MjgsT1JERVI6MjksTlVNOjMwLENIRVJSWV9QSUNLOjMxLENPTU1JVF9JRDozMixTVFI6MzMsUEFSRU5UX0NPTU1JVDozNCxDT01NSVRfVEFHOjM1LEVNUFRZU1RSOjM2LE1FUkdFOjM3LENPTU1JVF9UWVBFOjM4LGNvbW1pdFR5cGU6MzksQ09NTUlUOjQwLGNvbW1pdF9hcmc6NDEsQ09NTUlUX01TRzo0MixOT1JNQUw6NDMsUkVWRVJTRTo0NCxISUdITElHSFQ6NDUsSUQ6NDYsIjsiOjQ3LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw1OiJHRyIsNzoiRU9GIiw4OiI6Iiw5OiJESVIiLDEyOiJPUFQiLDEzOiJOTCIsMTk6ImFjY190aXRsZSIsMjA6ImFjY190aXRsZV92YWx1ZSIsMjE6ImFjY19kZXNjciIsMjI6ImFjY19kZXNjcl92YWx1ZSIsMjM6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDI0OiJzZWN0aW9uIiwyNjoiQ0hFQ0tPVVQiLDI4OiJCUkFOQ0giLDI5OiJPUkRFUiIsMzA6Ik5VTSIsMzE6IkNIRVJSWV9QSUNLIiwzMjoiQ09NTUlUX0lEIiwzMzoiU1RSIiwzNDoiUEFSRU5UX0NPTU1JVCIsMzU6IkNPTU1JVF9UQUciLDM2OiJFTVBUWVNUUiIsMzc6Ik1FUkdFIiwzODoiQ09NTUlUX1RZUEUiLDQwOiJDT01NSVQiLDQyOiJDT01NSVRfTVNHIiw0MzoiTk9STUFMIiw0NDoiUkVWRVJTRSIsNDU6IkhJR0hMSUdIVCIsNDY6IklEIiw0NzoiOyJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywzXSxbMyw0XSxbMyw1XSxbNiwwXSxbNiwyXSxbMTAsMl0sWzEwLDFdLFsxMSwwXSxbMTEsMl0sWzE0LDJdLFsxNCwxXSxbMTUsMV0sWzE1LDFdLFsxNSwxXSxbMTUsMl0sWzE1LDJdLFsxNSwxXSxbMTUsMV0sWzE1LDFdLFsxNSwyXSxbMjUsMl0sWzI1LDRdLFsxOCwzXSxbMTgsNV0sWzE4LDVdLFsxOCw3XSxbMTgsN10sWzE4LDVdLFsxOCw1XSxbMTgsNV0sWzE4LDddLFsxOCw3XSxbMTgsN10sWzE4LDddLFsxNywyXSxbMTcsNF0sWzE3LDRdLFsxNyw0XSxbMTcsNl0sWzE3LDZdLFsxNyw2XSxbMTcsNl0sWzE3LDZdLFsxNyw2XSxbMTcsOF0sWzE3LDhdLFsxNyw4XSxbMTcsOF0sWzE3LDhdLFsxNyw4XSxbMTYsMl0sWzE2LDNdLFsxNiwzXSxbMTYsNV0sWzE2LDVdLFsxNiwzXSxbMTYsNV0sWzE2LDVdLFsxNiw1XSxbMTYsNV0sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDNdLFsxNiw1XSxbMTYsNV0sWzE2LDVdLFsxNiw1XSxbMTYsNV0sWzE2LDVdLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw3XSxbMTYsN10sWzE2LDddLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFsxNiw5XSxbMTYsOV0sWzE2LDldLFs0MSwwXSxbNDEsMV0sWzM5LDFdLFszOSwxXSxbMzksMV0sWzI3LDFdLFsyNywxXSxbNCwxXSxbNCwxXSxbNCwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihuZSxzZSxkZSxYLGdlLFcseGUpe3ZhciBVPVcubGVuZ3RoLTE7c3dpdGNoKGdlKXtjYXNlIDI6cmV0dXJuIFdbVV07Y2FzZSAzOnJldHVybiBXW1UtMV07Y2FzZSA0OnJldHVybiBYLnNldERpcmVjdGlvbihXW1UtM10pLFdbVS0xXTtjYXNlIDY6WC5zZXRPcHRpb25zKFdbVS0xXSksdGhpcy4kPVdbVV07YnJlYWs7Y2FzZSA3OldbVS0xXSs9V1tVXSx0aGlzLiQ9V1tVLTFdO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxMDpXW1UtMV0ucHVzaChXW1VdKSx0aGlzLiQ9V1tVLTFdO2JyZWFrO2Nhc2UgMTE6dGhpcy4kPVdbVS0xXTticmVhaztjYXNlIDE2OnRoaXMuJD1XW1VdLnRyaW0oKSxYLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxNzpjYXNlIDE4OnRoaXMuJD1XW1VdLnRyaW0oKSxYLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxOTpYLmFkZFNlY3Rpb24oV1tVXS5zdWJzdHIoOCkpLHRoaXMuJD1XW1VdLnN1YnN0cig4KTticmVhaztjYXNlIDIxOlguY2hlY2tvdXQoV1tVXSk7YnJlYWs7Y2FzZSAyMjpYLmJyYW5jaChXW1VdKTticmVhaztjYXNlIDIzOlguYnJhbmNoKFdbVS0yXSxXW1VdKTticmVhaztjYXNlIDI0OlguY2hlcnJ5UGljayhXW1VdLCIiLHZvaWQgMCk7YnJlYWs7Y2FzZSAyNTpYLmNoZXJyeVBpY2soV1tVLTJdLCIiLHZvaWQgMCxXW1VdKTticmVhaztjYXNlIDI2OlguY2hlcnJ5UGljayhXW1UtMl0sIiIsV1tVXSk7YnJlYWs7Y2FzZSAyNzpYLmNoZXJyeVBpY2soV1tVLTRdLCIiLFdbVV0sV1tVLTJdKTticmVhaztjYXNlIDI4OlguY2hlcnJ5UGljayhXW1UtNF0sIiIsV1tVLTJdLFdbVV0pO2JyZWFrO2Nhc2UgMjk6WC5jaGVycnlQaWNrKFdbVV0sIiIsV1tVLTJdKTticmVhaztjYXNlIDMwOlguY2hlcnJ5UGljayhXW1VdLCIiLCIiKTticmVhaztjYXNlIDMxOlguY2hlcnJ5UGljayhXW1UtMl0sIiIsIiIpO2JyZWFrO2Nhc2UgMzI6WC5jaGVycnlQaWNrKFdbVS00XSwiIiwiIixXW1UtMl0pO2JyZWFrO2Nhc2UgMzM6WC5jaGVycnlQaWNrKFdbVS00XSwiIiwiIixXW1VdKTticmVhaztjYXNlIDM0OlguY2hlcnJ5UGljayhXW1UtMl0sIiIsV1tVLTRdLFdbVV0pO2JyZWFrO2Nhc2UgMzU6WC5jaGVycnlQaWNrKFdbVS0yXSwiIiwiIixXW1VdKTticmVhaztjYXNlIDM2OlgubWVyZ2UoV1tVXSwiIiwiIiwiIik7YnJlYWs7Y2FzZSAzNzpYLm1lcmdlKFdbVS0yXSxXW1VdLCIiLCIiKTticmVhaztjYXNlIDM4OlgubWVyZ2UoV1tVLTJdLCIiLFdbVV0sIiIpO2JyZWFrO2Nhc2UgMzk6WC5tZXJnZShXW1UtMl0sIiIsIiIsV1tVXSk7YnJlYWs7Y2FzZSA0MDpYLm1lcmdlKFdbVS00XSxXW1VdLCIiLFdbVS0yXSk7YnJlYWs7Y2FzZSA0MTpYLm1lcmdlKFdbVS00XSwiIixXW1VdLFdbVS0yXSk7YnJlYWs7Y2FzZSA0MjpYLm1lcmdlKFdbVS00XSwiIixXW1UtMl0sV1tVXSk7YnJlYWs7Y2FzZSA0MzpYLm1lcmdlKFdbVS00XSxXW1UtMl0sV1tVXSwiIik7YnJlYWs7Y2FzZSA0NDpYLm1lcmdlKFdbVS00XSxXW1UtMl0sIiIsV1tVXSk7YnJlYWs7Y2FzZSA0NTpYLm1lcmdlKFdbVS00XSxXW1VdLFdbVS0yXSwiIik7YnJlYWs7Y2FzZSA0NjpYLm1lcmdlKFdbVS02XSxXW1UtNF0sV1tVLTJdLFdbVV0pO2JyZWFrO2Nhc2UgNDc6WC5tZXJnZShXW1UtNl0sV1tVXSxXW1UtNF0sV1tVLTJdKTticmVhaztjYXNlIDQ4OlgubWVyZ2UoV1tVLTZdLFdbVS00XSxXW1VdLFdbVS0yXSk7YnJlYWs7Y2FzZSA0OTpYLm1lcmdlKFdbVS02XSxXW1UtMl0sV1tVLTRdLFdbVV0pO2JyZWFrO2Nhc2UgNTA6WC5tZXJnZShXW1UtNl0sV1tVXSxXW1UtMl0sV1tVLTRdKTticmVhaztjYXNlIDUxOlgubWVyZ2UoV1tVLTZdLFdbVS0yXSxXW1VdLFdbVS00XSk7YnJlYWs7Y2FzZSA1MjpYLmNvbW1pdChXW1VdKTticmVhaztjYXNlIDUzOlguY29tbWl0KCIiLCIiLFguY29tbWl0VHlwZS5OT1JNQUwsV1tVXSk7YnJlYWs7Y2FzZSA1NDpYLmNvbW1pdCgiIiwiIixXW1VdLCIiKTticmVhaztjYXNlIDU1OlguY29tbWl0KCIiLCIiLFdbVV0sV1tVLTJdKTticmVhaztjYXNlIDU2OlguY29tbWl0KCIiLCIiLFdbVS0yXSxXW1VdKTticmVhaztjYXNlIDU3OlguY29tbWl0KCIiLFdbVV0sWC5jb21taXRUeXBlLk5PUk1BTCwiIik7YnJlYWs7Y2FzZSA1ODpYLmNvbW1pdCgiIixXW1UtMl0sWC5jb21taXRUeXBlLk5PUk1BTCxXW1VdKTticmVhaztjYXNlIDU5OlguY29tbWl0KCIiLFdbVV0sWC5jb21taXRUeXBlLk5PUk1BTCxXW1UtMl0pO2JyZWFrO2Nhc2UgNjA6WC5jb21taXQoIiIsV1tVLTJdLFdbVV0sIiIpO2JyZWFrO2Nhc2UgNjE6WC5jb21taXQoIiIsV1tVXSxXW1UtMl0sIiIpO2JyZWFrO2Nhc2UgNjI6WC5jb21taXQoIiIsV1tVLTRdLFdbVS0yXSxXW1VdKTticmVhaztjYXNlIDYzOlguY29tbWl0KCIiLFdbVS00XSxXW1VdLFdbVS0yXSk7YnJlYWs7Y2FzZSA2NDpYLmNvbW1pdCgiIixXW1UtMl0sV1tVLTRdLFdbVV0pO2JyZWFrO2Nhc2UgNjU6WC5jb21taXQoIiIsV1tVXSxXW1UtNF0sV1tVLTJdKTticmVhaztjYXNlIDY2OlguY29tbWl0KCIiLFdbVV0sV1tVLTJdLFdbVS00XSk7YnJlYWs7Y2FzZSA2NzpYLmNvbW1pdCgiIixXW1UtMl0sV1tVXSxXW1UtNF0pO2JyZWFrO2Nhc2UgNjg6WC5jb21taXQoV1tVXSwiIixYLmNvbW1pdFR5cGUuTk9STUFMLCIiKTticmVhaztjYXNlIDY5OlguY29tbWl0KFdbVV0sIiIsWC5jb21taXRUeXBlLk5PUk1BTCxXW1UtMl0pO2JyZWFrO2Nhc2UgNzA6WC5jb21taXQoV1tVLTJdLCIiLFguY29tbWl0VHlwZS5OT1JNQUwsV1tVXSk7YnJlYWs7Y2FzZSA3MTpYLmNvbW1pdChXW1UtMl0sIiIsV1tVXSwiIik7YnJlYWs7Y2FzZSA3MjpYLmNvbW1pdChXW1VdLCIiLFdbVS0yXSwiIik7YnJlYWs7Y2FzZSA3MzpYLmNvbW1pdChXW1VdLFdbVS0yXSxYLmNvbW1pdFR5cGUuTk9STUFMLCIiKTticmVhaztjYXNlIDc0OlguY29tbWl0KFdbVS0yXSxXW1VdLFguY29tbWl0VHlwZS5OT1JNQUwsIiIpO2JyZWFrO2Nhc2UgNzU6WC5jb21taXQoV1tVLTRdLCIiLFdbVS0yXSxXW1VdKTticmVhaztjYXNlIDc2OlguY29tbWl0KFdbVS00XSwiIixXW1VdLFdbVS0yXSk7YnJlYWs7Y2FzZSA3NzpYLmNvbW1pdChXW1UtMl0sIiIsV1tVLTRdLFdbVV0pO2JyZWFrO2Nhc2UgNzg6WC5jb21taXQoV1tVXSwiIixXW1UtNF0sV1tVLTJdKTticmVhaztjYXNlIDc5OlguY29tbWl0KFdbVV0sIiIsV1tVLTJdLFdbVS00XSk7YnJlYWs7Y2FzZSA4MDpYLmNvbW1pdChXW1UtMl0sIiIsV1tVXSxXW1UtNF0pO2JyZWFrO2Nhc2UgODE6WC5jb21taXQoV1tVLTRdLFdbVV0sV1tVLTJdLCIiKTticmVhaztjYXNlIDgyOlguY29tbWl0KFdbVS00XSxXW1UtMl0sV1tVXSwiIik7YnJlYWs7Y2FzZSA4MzpYLmNvbW1pdChXW1UtMl0sV1tVXSxXW1UtNF0sIiIpO2JyZWFrO2Nhc2UgODQ6WC5jb21taXQoV1tVXSxXW1UtMl0sV1tVLTRdLCIiKTticmVhaztjYXNlIDg1OlguY29tbWl0KFdbVV0sV1tVLTRdLFdbVS0yXSwiIik7YnJlYWs7Y2FzZSA4NjpYLmNvbW1pdChXW1UtMl0sV1tVLTRdLFdbVV0sIiIpO2JyZWFrO2Nhc2UgODc6WC5jb21taXQoV1tVLTRdLFdbVV0sWC5jb21taXRUeXBlLk5PUk1BTCxXW1UtMl0pO2JyZWFrO2Nhc2UgODg6WC5jb21taXQoV1tVLTRdLFdbVS0yXSxYLmNvbW1pdFR5cGUuTk9STUFMLFdbVV0pO2JyZWFrO2Nhc2UgODk6WC5jb21taXQoV1tVLTJdLFdbVV0sWC5jb21taXRUeXBlLk5PUk1BTCxXW1UtNF0pO2JyZWFrO2Nhc2UgOTA6WC5jb21taXQoV1tVXSxXW1UtMl0sWC5jb21taXRUeXBlLk5PUk1BTCxXW1UtNF0pO2JyZWFrO2Nhc2UgOTE6WC5jb21taXQoV1tVXSxXW1UtNF0sWC5jb21taXRUeXBlLk5PUk1BTCxXW1UtMl0pO2JyZWFrO2Nhc2UgOTI6WC5jb21taXQoV1tVLTJdLFdbVS00XSxYLmNvbW1pdFR5cGUuTk9STUFMLFdbVV0pO2JyZWFrO2Nhc2UgOTM6WC5jb21taXQoV1tVLTZdLFdbVS00XSxXW1UtMl0sV1tVXSk7YnJlYWs7Y2FzZSA5NDpYLmNvbW1pdChXW1UtNl0sV1tVLTRdLFdbVV0sV1tVLTJdKTticmVhaztjYXNlIDk1OlguY29tbWl0KFdbVS02XSxXW1UtMl0sV1tVLTRdLFdbVV0pO2JyZWFrO2Nhc2UgOTY6WC5jb21taXQoV1tVLTZdLFdbVV0sV1tVLTRdLFdbVS0yXSk7YnJlYWs7Y2FzZSA5NzpYLmNvbW1pdChXW1UtNl0sV1tVLTJdLFdbVV0sV1tVLTRdKTticmVhaztjYXNlIDk4OlguY29tbWl0KFdbVS02XSxXW1VdLFdbVS0yXSxXW1UtNF0pO2JyZWFrO2Nhc2UgOTk6WC5jb21taXQoV1tVLTRdLFdbVS02XSxXW1UtMl0sV1tVXSk7YnJlYWs7Y2FzZSAxMDA6WC5jb21taXQoV1tVLTRdLFdbVS02XSxXW1VdLFdbVS0yXSk7YnJlYWs7Y2FzZSAxMDE6WC5jb21taXQoV1tVLTJdLFdbVS02XSxXW1UtNF0sV1tVXSk7YnJlYWs7Y2FzZSAxMDI6WC5jb21taXQoV1tVXSxXW1UtNl0sV1tVLTRdLFdbVS0yXSk7YnJlYWs7Y2FzZSAxMDM6WC5jb21taXQoV1tVLTJdLFdbVS02XSxXW1VdLFdbVS00XSk7YnJlYWs7Y2FzZSAxMDQ6WC5jb21taXQoV1tVXSxXW1UtNl0sV1tVLTJdLFdbVS00XSk7YnJlYWs7Y2FzZSAxMDU6WC5jb21taXQoV1tVXSxXW1UtNF0sV1tVLTJdLFdbVS02XSk7YnJlYWs7Y2FzZSAxMDY6WC5jb21taXQoV1tVLTJdLFdbVS00XSxXW1VdLFdbVS02XSk7YnJlYWs7Y2FzZSAxMDc6WC5jb21taXQoV1tVXSxXW1UtMl0sV1tVLTRdLFdbVS02XSk7YnJlYWs7Y2FzZSAxMDg6WC5jb21taXQoV1tVLTJdLFdbVV0sV1tVLTRdLFdbVS02XSk7YnJlYWs7Y2FzZSAxMDk6WC5jb21taXQoV1tVLTRdLFdbVS0yXSxXW1VdLFdbVS02XSk7YnJlYWs7Y2FzZSAxMTA6WC5jb21taXQoV1tVLTRdLFdbVV0sV1tVLTJdLFdbVS02XSk7YnJlYWs7Y2FzZSAxMTE6WC5jb21taXQoV1tVLTJdLFdbVS00XSxXW1UtNl0sV1tVXSk7YnJlYWs7Y2FzZSAxMTI6WC5jb21taXQoV1tVXSxXW1UtNF0sV1tVLTZdLFdbVS0yXSk7YnJlYWs7Y2FzZSAxMTM6WC5jb21taXQoV1tVLTJdLFdbVV0sV1tVLTZdLFdbVS00XSk7YnJlYWs7Y2FzZSAxMTQ6WC5jb21taXQoV1tVXSxXW1UtMl0sV1tVLTZdLFdbVS00XSk7YnJlYWs7Y2FzZSAxMTU6WC5jb21taXQoV1tVLTRdLFdbVS0yXSxXW1UtNl0sV1tVXSk7YnJlYWs7Y2FzZSAxMTY6WC5jb21taXQoV1tVLTRdLFdbVV0sV1tVLTZdLFdbVS0yXSk7YnJlYWs7Y2FzZSAxMTc6dGhpcy4kPSIiO2JyZWFrO2Nhc2UgMTE4OnRoaXMuJD1XW1VdO2JyZWFrO2Nhc2UgMTE5OnRoaXMuJD1YLmNvbW1pdFR5cGUuTk9STUFMO2JyZWFrO2Nhc2UgMTIwOnRoaXMuJD1YLmNvbW1pdFR5cGUuUkVWRVJTRTticmVhaztjYXNlIDEyMTp0aGlzLiQ9WC5jb21taXRUeXBlLkhJR0hMSUdIVDticmVha319LHRhYmxlOlt7MzoxLDQ6Miw1OnMsNzp1LDEzOmQsNDc6cH0sezE6WzNdfSx7Mzo3LDQ6Miw1OnMsNzp1LDEzOmQsNDc6cH0sezY6OCw3OnYsODpbMSw5XSw5OlsxLDEwXSwxMDoxMSwxMzpifSxpKHksWzIsMTI0XSksaSh5LFsyLDEyNV0pLGkoeSxbMiwxMjZdKSx7MTpbMiwxXX0sezc6WzEsMTNdfSx7NjoxNCw3OnYsMTA6MTEsMTM6Yn0sezg6WzEsMTVdfSxpKFQsWzIsOV0sezExOjE2LDEyOlsxLDE3XX0pLGkoXyxbMiw4XSksezE6WzIsMl19LHs3OlsxLDE4XX0sezY6MTksNzp2LDEwOjExLDEzOmJ9LHs3OlsyLDZdLDEzOlsxLDIyXSwxNDoyMCwxNToyMSwxNjoyMywxNzoyNCwxODoyNSwxOTpbMSwyNl0sMjE6WzEsMjddLDIzOlsxLDI4XSwyNDpbMSwyOV0sMjU6MzAsMjY6WzEsMzFdLDI4OlsxLDM1XSwzMTpbMSwzNF0sMzc6WzEsMzNdLDQwOlsxLDMyXX0saShfLFsyLDddKSx7MTpbMiwzXX0sezc6WzEsMzZdfSxpKFQsWzIsMTBdKSx7NDozNyw3OnUsMTM6ZCw0NzpwfSxpKFQsWzIsMTJdKSxpKEEsWzIsMTNdKSxpKEEsWzIsMTRdKSxpKEEsWzIsMTVdKSx7MjA6WzEsMzhdfSx7MjI6WzEsMzldfSxpKEEsWzIsMThdKSxpKEEsWzIsMTldKSxpKEEsWzIsMjBdKSx7Mjc6NDAsMzM6UCw0NjpSfSxpKEEsWzIsMTE3XSx7NDE6NDMsMzI6WzEsNDZdLDMzOlsxLDQ4XSwzNTpbMSw0NF0sMzg6WzEsNDVdLDQyOlsxLDQ3XX0pLHsyNzo0OSwzMzpQLDQ2OlJ9LHszMjpbMSw1MF0sMzU6WzEsNTFdfSx7Mjc6NTIsMzM6UCw0NjpSfSx7MTpbMiw0XX0saShULFsyLDExXSksaShBLFsyLDE2XSksaShBLFsyLDE3XSksaShBLFsyLDIxXSksaShGLFsyLDEyMl0pLGkoRixbMiwxMjNdKSxpKEEsWzIsNTJdKSx7MzM6WzEsNTNdfSx7Mzk6NTQsNDM6aiw0NDpLLDQ1OmVlfSx7MzM6WzEsNThdfSx7MzM6WzEsNTldfSxpKEEsWzIsMTE4XSksaShBLFsyLDM2XSx7MzI6WzEsNjBdLDM1OlsxLDYyXSwzODpbMSw2MV19KSx7MzM6WzEsNjNdfSx7MzM6WzEsNjRdLDM2OlsxLDY1XX0saShBLFsyLDIyXSx7Mjk6WzEsNjZdfSksaShBLFsyLDUzXSx7MzI6WzEsNjhdLDM4OlsxLDY3XSw0MjpbMSw2OV19KSxpKEEsWzIsNTRdLHszMjpbMSw3MV0sMzU6WzEsNzBdLDQyOlsxLDcyXX0pLGkoaWUsWzIsMTE5XSksaShpZSxbMiwxMjBdKSxpKGllLFsyLDEyMV0pLGkoQSxbMiw1N10sezM1OlsxLDczXSwzODpbMSw3NF0sNDI6WzEsNzVdfSksaShBLFsyLDY4XSx7MzI6WzEsNzhdLDM1OlsxLDc2XSwzODpbMSw3N119KSx7MzM6WzEsNzldfSx7Mzk6ODAsNDM6aiw0NDpLLDQ1OmVlfSx7MzM6WzEsODFdfSxpKEEsWzIsMjRdLHszNDpbMSw4Ml0sMzU6WzEsODNdfSksezMyOlsxLDg0XX0sezMyOlsxLDg1XX0sezMwOlsxLDg2XX0sezM5Ojg3LDQzOmosNDQ6Syw0NTplZX0sezMzOlsxLDg4XX0sezMzOlsxLDg5XX0sezMzOlsxLDkwXX0sezMzOlsxLDkxXX0sezMzOlsxLDkyXX0sezMzOlsxLDkzXX0sezM5Ojk0LDQzOmosNDQ6Syw0NTplZX0sezMzOlsxLDk1XX0sezMzOlsxLDk2XX0sezM5Ojk3LDQzOmosNDQ6Syw0NTplZX0sezMzOlsxLDk4XX0saShBLFsyLDM3XSx7MzU6WzEsMTAwXSwzODpbMSw5OV19KSxpKEEsWzIsMzhdLHszMjpbMSwxMDJdLDM1OlsxLDEwMV19KSxpKEEsWzIsMzldLHszMjpbMSwxMDNdLDM4OlsxLDEwNF19KSx7MzM6WzEsMTA1XX0sezMzOlsxLDEwNl0sMzY6WzEsMTA3XX0sezMzOlsxLDEwOF19LHszMzpbMSwxMDldfSxpKEEsWzIsMjNdKSxpKEEsWzIsNTVdLHszMjpbMSwxMTBdLDQyOlsxLDExMV19KSxpKEEsWzIsNTldLHszODpbMSwxMTJdLDQyOlsxLDExM119KSxpKEEsWzIsNjldLHszMjpbMSwxMTVdLDM4OlsxLDExNF19KSxpKEEsWzIsNTZdLHszMjpbMSwxMTZdLDQyOlsxLDExN119KSxpKEEsWzIsNjFdLHszNTpbMSwxMThdLDQyOlsxLDExOV19KSxpKEEsWzIsNzJdLHszMjpbMSwxMjFdLDM1OlsxLDEyMF19KSxpKEEsWzIsNThdLHszODpbMSwxMjJdLDQyOlsxLDEyM119KSxpKEEsWzIsNjBdLHszNTpbMSwxMjRdLDQyOlsxLDEyNV19KSxpKEEsWzIsNzNdLHszNTpbMSwxMjddLDM4OlsxLDEyNl19KSxpKEEsWzIsNzBdLHszMjpbMSwxMjldLDM4OlsxLDEyOF19KSxpKEEsWzIsNzFdLHszMjpbMSwxMzFdLDM1OlsxLDEzMF19KSxpKEEsWzIsNzRdLHszNTpbMSwxMzNdLDM4OlsxLDEzMl19KSx7Mzk6MTM0LDQzOmosNDQ6Syw0NTplZX0sezMzOlsxLDEzNV19LHszMzpbMSwxMzZdfSx7MzM6WzEsMTM3XX0sezMzOlsxLDEzOF19LHszOToxMzksNDM6aiw0NDpLLDQ1OmVlfSxpKEEsWzIsMjVdLHszNTpbMSwxNDBdfSksaShBLFsyLDI2XSx7MzQ6WzEsMTQxXX0pLGkoQSxbMiwzMV0sezM0OlsxLDE0Ml19KSxpKEEsWzIsMjldLHszNDpbMSwxNDNdfSksaShBLFsyLDMwXSx7MzQ6WzEsMTQ0XX0pLHszMzpbMSwxNDVdfSx7MzM6WzEsMTQ2XX0sezM5OjE0Nyw0MzpqLDQ0OkssNDU6ZWV9LHszMzpbMSwxNDhdfSx7Mzk6MTQ5LDQzOmosNDQ6Syw0NTplZX0sezMzOlsxLDE1MF19LHszMzpbMSwxNTFdfSx7MzM6WzEsMTUyXX0sezMzOlsxLDE1M119LHszMzpbMSwxNTRdfSx7MzM6WzEsMTU1XX0sezMzOlsxLDE1Nl19LHszOToxNTcsNDM6aiw0NDpLLDQ1OmVlfSx7MzM6WzEsMTU4XX0sezMzOlsxLDE1OV19LHszMzpbMSwxNjBdfSx7Mzk6MTYxLDQzOmosNDQ6Syw0NTplZX0sezMzOlsxLDE2Ml19LHszOToxNjMsNDM6aiw0NDpLLDQ1OmVlfSx7MzM6WzEsMTY0XX0sezMzOlsxLDE2NV19LHszMzpbMSwxNjZdfSx7Mzk6MTY3LDQzOmosNDQ6Syw0NTplZX0sezMzOlsxLDE2OF19LGkoQSxbMiw0M10sezM1OlsxLDE2OV19KSxpKEEsWzIsNDRdLHszODpbMSwxNzBdfSksaShBLFsyLDQyXSx7MzI6WzEsMTcxXX0pLGkoQSxbMiw0NV0sezM1OlsxLDE3Ml19KSxpKEEsWzIsNDBdLHszODpbMSwxNzNdfSksaShBLFsyLDQxXSx7MzI6WzEsMTc0XX0pLHszMzpbMSwxNzVdLDM2OlsxLDE3Nl19LHszMzpbMSwxNzddfSx7MzM6WzEsMTc4XX0sezMzOlsxLDE3OV19LHszMzpbMSwxODBdfSxpKEEsWzIsNjZdLHs0MjpbMSwxODFdfSksaShBLFsyLDc5XSx7MzI6WzEsMTgyXX0pLGkoQSxbMiw2N10sezQyOlsxLDE4M119KSxpKEEsWzIsOTBdLHszODpbMSwxODRdfSksaShBLFsyLDgwXSx7MzI6WzEsMTg1XX0pLGkoQSxbMiw4OV0sezM4OlsxLDE4Nl19KSxpKEEsWzIsNjVdLHs0MjpbMSwxODddfSksaShBLFsyLDc4XSx7MzI6WzEsMTg4XX0pLGkoQSxbMiw2NF0sezQyOlsxLDE4OV19KSxpKEEsWzIsODRdLHszNTpbMSwxOTBdfSksaShBLFsyLDc3XSx7MzI6WzEsMTkxXX0pLGkoQSxbMiw4M10sezM1OlsxLDE5Ml19KSxpKEEsWzIsNjNdLHs0MjpbMSwxOTNdfSksaShBLFsyLDkxXSx7Mzg6WzEsMTk0XX0pLGkoQSxbMiw2Ml0sezQyOlsxLDE5NV19KSxpKEEsWzIsODVdLHszNTpbMSwxOTZdfSksaShBLFsyLDg2XSx7MzU6WzEsMTk3XX0pLGkoQSxbMiw5Ml0sezM4OlsxLDE5OF19KSxpKEEsWzIsNzZdLHszMjpbMSwxOTldfSksaShBLFsyLDg3XSx7Mzg6WzEsMjAwXX0pLGkoQSxbMiw3NV0sezMyOlsxLDIwMV19KSxpKEEsWzIsODFdLHszNTpbMSwyMDJdfSksaShBLFsyLDgyXSx7MzU6WzEsMjAzXX0pLGkoQSxbMiw4OF0sezM4OlsxLDIwNF19KSx7MzM6WzEsMjA1XX0sezM5OjIwNiw0MzpqLDQ0OkssNDU6ZWV9LHszMzpbMSwyMDddfSx7MzM6WzEsMjA4XX0sezM5OjIwOSw0MzpqLDQ0OkssNDU6ZWV9LHszMzpbMSwyMTBdfSxpKEEsWzIsMjddKSxpKEEsWzIsMzJdKSxpKEEsWzIsMjhdKSxpKEEsWzIsMzNdKSxpKEEsWzIsMzRdKSxpKEEsWzIsMzVdKSx7MzM6WzEsMjExXX0sezMzOlsxLDIxMl19LHszMzpbMSwyMTNdfSx7Mzk6MjE0LDQzOmosNDQ6Syw0NTplZX0sezMzOlsxLDIxNV19LHszOToyMTYsNDM6aiw0NDpLLDQ1OmVlfSx7MzM6WzEsMjE3XX0sezMzOlsxLDIxOF19LHszMzpbMSwyMTldfSx7MzM6WzEsMjIwXX0sezMzOlsxLDIyMV19LHszMzpbMSwyMjJdfSx7MzM6WzEsMjIzXX0sezM5OjIyNCw0MzpqLDQ0OkssNDU6ZWV9LHszMzpbMSwyMjVdfSx7MzM6WzEsMjI2XX0sezMzOlsxLDIyN119LHszOToyMjgsNDM6aiw0NDpLLDQ1OmVlfSx7MzM6WzEsMjI5XX0sezM5OjIzMCw0MzpqLDQ0OkssNDU6ZWV9LHszMzpbMSwyMzFdfSx7MzM6WzEsMjMyXX0sezMzOlsxLDIzM119LHszOToyMzQsNDM6aiw0NDpLLDQ1OmVlfSxpKEEsWzIsNDZdKSxpKEEsWzIsNDhdKSxpKEEsWzIsNDddKSxpKEEsWzIsNDldKSxpKEEsWzIsNTFdKSxpKEEsWzIsNTBdKSxpKEEsWzIsMTA3XSksaShBLFsyLDEwOF0pLGkoQSxbMiwxMDVdKSxpKEEsWzIsMTA2XSksaShBLFsyLDExMF0pLGkoQSxbMiwxMDldKSxpKEEsWzIsMTE0XSksaShBLFsyLDExM10pLGkoQSxbMiwxMTJdKSxpKEEsWzIsMTExXSksaShBLFsyLDExNl0pLGkoQSxbMiwxMTVdKSxpKEEsWzIsMTA0XSksaShBLFsyLDEwM10pLGkoQSxbMiwxMDJdKSxpKEEsWzIsMTAxXSksaShBLFsyLDk5XSksaShBLFsyLDEwMF0pLGkoQSxbMiw5OF0pLGkoQSxbMiw5N10pLGkoQSxbMiw5Nl0pLGkoQSxbMiw5NV0pLGkoQSxbMiw5M10pLGkoQSxbMiw5NF0pXSxkZWZhdWx0QWN0aW9uczp7NzpbMiwxXSwxMzpbMiwyXSwxODpbMiwzXSwzNjpbMiw0XX0scGFyc2VFcnJvcjpmdW5jdGlvbihuZSxzZSl7aWYoc2UucmVjb3ZlcmFibGUpdGhpcy50cmFjZShuZSk7ZWxzZXt2YXIgZGU9bmV3IEVycm9yKG5lKTt0aHJvdyBkZS5oYXNoPXNlLGRlfX0scGFyc2U6ZnVuY3Rpb24obmUpe3ZhciBzZT10aGlzLGRlPVswXSxYPVtdLGdlPVtudWxsXSxXPVtdLHhlPXRoaXMudGFibGUsVT0iIixGZT0wLFBlPTAsamU9MixJZT0xLFNlPVcuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksQ2U9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxrZT17eXk6e319O2Zvcih2YXIgS2UgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxLZSkmJihrZS55eVtLZV09dGhpcy55eVtLZV0pO0NlLnNldElucHV0KG5lLGtlLnl5KSxrZS55eS5sZXhlcj1DZSxrZS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgQ2UueXlsbG9jPiJ1IiYmKENlLnl5bGxvYz17fSk7dmFyIEZ0PUNlLnl5bGxvYztXLnB1c2goRnQpO3ZhciBOZT1DZS5vcHRpb25zJiZDZS5vcHRpb25zLnJhbmdlczt0eXBlb2Yga2UueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9a2UueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gZ24oKXt2YXIgaHQ7cmV0dXJuIGh0PVgucG9wKCl8fENlLmxleCgpfHxJZSx0eXBlb2YgaHQhPSJudW1iZXIiJiYoaHQgaW5zdGFuY2VvZiBBcnJheSYmKFg9aHQsaHQ9WC5wb3AoKSksaHQ9c2Uuc3ltYm9sc19baHRdfHxodCksaHR9Zm9yKHZhciBfdCxFdCxHdCxsbix4dD17fSxQdCxRZSxEdCxrdDs7KXtpZihFdD1kZVtkZS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tFdF0/R3Q9dGhpcy5kZWZhdWx0QWN0aW9uc1tFdF06KChfdD09PW51bGx8fHR5cGVvZiBfdD4idSIpJiYoX3Q9Z24oKSksR3Q9eGVbRXRdJiZ4ZVtFdF1bX3RdKSx0eXBlb2YgR3Q+InUifHwhR3QubGVuZ3RofHwhR3RbMF0pe3ZhciBPbj0iIjtrdD1bXTtmb3IoUHQgaW4geGVbRXRdKXRoaXMudGVybWluYWxzX1tQdF0mJlB0PmplJiZrdC5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bUHRdKyInIik7Q2Uuc2hvd1Bvc2l0aW9uP09uPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEZlKzEpK2A6CmArQ2Uuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtrdC5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW190XXx8X3QpKyInIjpPbj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhGZSsxKSsiOiBVbmV4cGVjdGVkICIrKF90PT1JZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tfdF18fF90KSsiJyIpLHRoaXMucGFyc2VFcnJvcihPbix7dGV4dDpDZS5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bX3RdfHxfdCxsaW5lOkNlLnl5bGluZW5vLGxvYzpGdCxleHBlY3RlZDprdH0pfWlmKEd0WzBdaW5zdGFuY2VvZiBBcnJheSYmR3QubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitFdCsiLCB0b2tlbjogIitfdCk7c3dpdGNoKEd0WzBdKXtjYXNlIDE6ZGUucHVzaChfdCksZ2UucHVzaChDZS55eXRleHQpLFcucHVzaChDZS55eWxsb2MpLGRlLnB1c2goR3RbMV0pLF90PW51bGwsUGU9Q2UueXlsZW5nLFU9Q2UueXl0ZXh0LEZlPUNlLnl5bGluZW5vLEZ0PUNlLnl5bGxvYzticmVhaztjYXNlIDI6aWYoUWU9dGhpcy5wcm9kdWN0aW9uc19bR3RbMV1dWzFdLHh0LiQ9Z2VbZ2UubGVuZ3RoLVFlXSx4dC5fJD17Zmlyc3RfbGluZTpXW1cubGVuZ3RoLShRZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOldbVy5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpXW1cubGVuZ3RoLShRZXx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpXW1cubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxOZSYmKHh0Ll8kLnJhbmdlPVtXW1cubGVuZ3RoLShRZXx8MSldLnJhbmdlWzBdLFdbVy5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxsbj10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoeHQsW1UsUGUsRmUsa2UueXksR3RbMV0sZ2UsV10uY29uY2F0KFNlKSksdHlwZW9mIGxuPCJ1IilyZXR1cm4gbG47UWUmJihkZT1kZS5zbGljZSgwLC0xKlFlKjIpLGdlPWdlLnNsaWNlKDAsLTEqUWUpLFc9Vy5zbGljZSgwLC0xKlFlKSksZGUucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tHdFsxXV1bMF0pLGdlLnB1c2goeHQuJCksVy5wdXNoKHh0Ll8kKSxEdD14ZVtkZVtkZS5sZW5ndGgtMl1dW2RlW2RlLmxlbmd0aC0xXV0sZGUucHVzaChEdCk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LHBlPWZ1bmN0aW9uKCl7dmFyIGFlPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHNlLGRlKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHNlLGRlKTtlbHNlIHRocm93IG5ldyBFcnJvcihzZSl9LHNldElucHV0OmZ1bmN0aW9uKG5lLHNlKXtyZXR1cm4gdGhpcy55eT1zZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9bmUsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIG5lPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1uZSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9bmUsdGhpcy5tYXRjaGVkKz1uZTt2YXIgc2U9bmUubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBzZT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksbmV9LHVucHV0OmZ1bmN0aW9uKG5lKXt2YXIgc2U9bmUubGVuZ3RoLGRlPW5lLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9bmUrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLXNlKSx0aGlzLm9mZnNldC09c2U7dmFyIFg9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksZGUubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1kZS5sZW5ndGgtMSk7dmFyIGdlPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpkZT8oZGUubGVuZ3RoPT09WC5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK1hbWC5sZW5ndGgtZGUubGVuZ3RoXS5sZW5ndGgtZGVbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1zZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtnZVswXSxnZVswXSt0aGlzLnl5bGVuZy1zZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKG5lKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobmUpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIG5lPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4obmUubGVuZ3RoPjIwPyIuLi4iOiIiKStuZS5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciBuZT10aGlzLm1hdGNoO3JldHVybiBuZS5sZW5ndGg8MjAmJihuZSs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtbmUubGVuZ3RoKSksKG5lLnN1YnN0cigwLDIwKSsobmUubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBuZT10aGlzLnBhc3RJbnB1dCgpLHNlPW5ldyBBcnJheShuZS5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBuZSt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArc2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKG5lLHNlKXt2YXIgZGUsWCxnZTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoZ2U9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoZ2UueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksWD1uZVswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksWCYmKHRoaXMueXlsaW5lbm8rPVgubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46WD9YW1gubGVuZ3RoLTFdLmxlbmd0aC1YW1gubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rbmVbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9bmVbMF0sdGhpcy5tYXRjaCs9bmVbMF0sdGhpcy5tYXRjaGVzPW5lLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKG5lWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1uZVswXSxkZT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxzZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxkZSlyZXR1cm4gZGU7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIFcgaW4gZ2UpdGhpc1tXXT1nZVtXXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBuZSxzZSxkZSxYO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGdlPXRoaXMuX2N1cnJlbnRSdWxlcygpLFc9MDtXPGdlLmxlbmd0aDtXKyspaWYoZGU9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tnZVtXXV0pLGRlJiYoIXNlfHxkZVswXS5sZW5ndGg+c2VbMF0ubGVuZ3RoKSl7aWYoc2U9ZGUsWD1XLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKG5lPXRoaXMudGVzdF9tYXRjaChkZSxnZVtXXSksbmUhPT0hMSlyZXR1cm4gbmU7aWYodGhpcy5fYmFja3RyYWNrKXtzZT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBzZT8obmU9dGhpcy50ZXN0X21hdGNoKHNlLGdlW1hdKSxuZSE9PSExP25lOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgc2U9dGhpcy5uZXh0KCk7cmV0dXJuIHNlfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihzZSl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHNlKX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgc2U9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gc2U+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbihzZSl7cmV0dXJuIHNlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoc2V8fDApLHNlPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbc2VdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHNlKXt0aGlzLmJlZ2luKHNlKX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihzZSxkZSxYLGdlKXtzd2l0Y2goWCl7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwxOTtjYXNlIDE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDI6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDIxO2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgNDp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSA1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDY6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgNzpyZXR1cm4gMTM7Y2FzZSA4OmJyZWFrO2Nhc2UgOTpicmVhaztjYXNlIDEwOnJldHVybiA1O2Nhc2UgMTE6cmV0dXJuIDQwO2Nhc2UgMTI6cmV0dXJuIDMyO2Nhc2UgMTM6cmV0dXJuIDM4O2Nhc2UgMTQ6cmV0dXJuIDQyO2Nhc2UgMTU6cmV0dXJuIDQzO2Nhc2UgMTY6cmV0dXJuIDQ0O2Nhc2UgMTc6cmV0dXJuIDQ1O2Nhc2UgMTg6cmV0dXJuIDM1O2Nhc2UgMTk6cmV0dXJuIDI4O2Nhc2UgMjA6cmV0dXJuIDI5O2Nhc2UgMjE6cmV0dXJuIDM3O2Nhc2UgMjI6cmV0dXJuIDMxO2Nhc2UgMjM6cmV0dXJuIDM0O2Nhc2UgMjQ6cmV0dXJuIDI2O2Nhc2UgMjU6cmV0dXJuIDk7Y2FzZSAyNjpyZXR1cm4gOTtjYXNlIDI3OnJldHVybiA4O2Nhc2UgMjg6cmV0dXJuIkNBUkVUIjtjYXNlIDI5OnRoaXMuYmVnaW4oIm9wdGlvbnMiKTticmVhaztjYXNlIDMwOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDMxOnJldHVybiAxMjtjYXNlIDMyOnJldHVybiAzNjtjYXNlIDMzOnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgMzQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzU6cmV0dXJuIDMzO2Nhc2UgMzY6cmV0dXJuIDMwO2Nhc2UgMzc6cmV0dXJuIDQ2O2Nhc2UgMzg6cmV0dXJuIDd9fSxydWxlczpbL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/Oihccj9cbikrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OiVbXlxuXSopL2ksL14oPzpnaXRHcmFwaFxiKS9pLC9eKD86Y29tbWl0KD89XHN8JCkpL2ksL14oPzppZDopL2ksL14oPzp0eXBlOikvaSwvXig/Om1zZzopL2ksL14oPzpOT1JNQUxcYikvaSwvXig/OlJFVkVSU0VcYikvaSwvXig/OkhJR0hMSUdIVFxiKS9pLC9eKD86dGFnOikvaSwvXig/OmJyYW5jaCg/PVxzfCQpKS9pLC9eKD86b3JkZXI6KS9pLC9eKD86bWVyZ2UoPz1cc3wkKSkvaSwvXig/OmNoZXJyeS1waWNrKD89XHN8JCkpL2ksL14oPzpwYXJlbnQ6KS9pLC9eKD86Y2hlY2tvdXQoPz1cc3wkKSkvaSwvXig/OkxSXGIpL2ksL14oPzpUQlxiKS9pLC9eKD86OikvaSwvXig/OlxeKS9pLC9eKD86b3B0aW9uc1xyP1xuKS9pLC9eKD86WyBcclxuXHRdK2VuZFxiKS9pLC9eKD86W1xzXFNdKyg/PVsgXHJcblx0XStlbmQpKS9pLC9eKD86WyJdWyJdKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbMC05XSsoPz1cc3wkKSkvaSwvXig/Olx3KFstXC4vXHddKlstXHddKT8pL2ksL14oPzokKS9pLC9eKD86XHMrKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbNSw2XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzNdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSxvcHRpb25zOntydWxlczpbMzAsMzFdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbMzQsMzVdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMiw0LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMyLDMzLDM2LDM3LDM4LDM5XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIGFlfSgpO29lLmxleGVyPXBlO2Z1bmN0aW9uIGJlKCl7dGhpcy55eT17fX1yZXR1cm4gYmUucHJvdG90eXBlPW9lLG9lLlBhcnNlcj1iZSxuZXcgYmV9KCk7S21lLnBhcnNlcj1LbWU7Y29uc3QgdHRuPUttZTtsZXQgb0o9cXQoKS5naXRHcmFwaC5tYWluQnJhbmNoTmFtZSxudG49cXQoKS5naXRHcmFwaC5tYWluQnJhbmNoT3JkZXIsYjE9e30sTnA9bnVsbCxPUj17fTtPUltvSl09e25hbWU6b0osb3JkZXI6bnRufTtsZXQgRjA9e307RjBbb0pdPU5wO2xldCBzZD1vSixxVWU9IkxSIixZQz0wO2Z1bmN0aW9uIFdtZSgpe3JldHVybiBtamUoe2xlbmd0aDo3fSl9ZnVuY3Rpb24gcnRuKGkscyl7Y29uc3QgdT1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBpLnJlZHVjZSgoZCxwKT0+e2NvbnN0IHY9cyhwKTtyZXR1cm4gdVt2XXx8KHVbdl09ITAsZC5wdXNoKHApKSxkfSxbXSl9Y29uc3QgaXRuPWZ1bmN0aW9uKGkpe3FVZT1pfTtsZXQgSFVlPXt9O2NvbnN0IHN0bj1mdW5jdGlvbihpKXtYZS5kZWJ1Zygib3B0aW9ucyBzdHIiLGkpLGk9aSYmaS50cmltKCksaT1pfHwie30iO3RyeXtIVWU9SlNPTi5wYXJzZShpKX1jYXRjaChzKXtYZS5lcnJvcigiZXJyb3Igd2hpbGUgcGFyc2luZyBnaXRHcmFwaCBvcHRpb25zIixzLm1lc3NhZ2UpfX0sYXRuPWZ1bmN0aW9uKCl7cmV0dXJuIEhVZX0sb3RuPWZ1bmN0aW9uKGkscyx1LGQpe1hlLmRlYnVnKCJFbnRlcmluZyBjb21taXQ6IixpLHMsdSxkKSxzPWNpLnNhbml0aXplVGV4dChzLHF0KCkpLGk9Y2kuc2FuaXRpemVUZXh0KGkscXQoKSksZD1jaS5zYW5pdGl6ZVRleHQoZCxxdCgpKTtjb25zdCBwPXtpZDpzfHxZQysiLSIrV21lKCksbWVzc2FnZTppLHNlcTpZQysrLHR5cGU6dXx8VUQuTk9STUFMLHRhZzpkfHwiIixwYXJlbnRzOk5wPT1udWxsP1tdOltOcC5pZF0sYnJhbmNoOnNkfTtOcD1wLGIxW3AuaWRdPXAsRjBbc2RdPXAuaWQsWGUuZGVidWcoImluIHB1c2hDb21taXQgIitwLmlkKX0sY3RuPWZ1bmN0aW9uKGkscyl7aWYoaT1jaS5zYW5pdGl6ZVRleHQoaSxxdCgpKSxGMFtpXT09PXZvaWQgMClGMFtpXT1OcCE9bnVsbD9OcC5pZDpudWxsLE9SW2ldPXtuYW1lOmksb3JkZXI6cz9wYXJzZUludChzLDEwKTpudWxsfSxWVWUoaSksWGUuZGVidWcoImluIGNyZWF0ZUJyYW5jaCIpO2Vsc2V7bGV0IHU9bmV3IEVycm9yKCdUcnlpbmcgdG8gY3JlYXRlIGFuIGV4aXN0aW5nIGJyYW5jaC4gKEhlbHA6IEVpdGhlciB1c2UgYSBuZXcgbmFtZSBpZiB5b3Ugd2FudCBjcmVhdGUgYSBuZXcgYnJhbmNoIG9yIHRyeSB1c2luZyAiY2hlY2tvdXQgJytpKyciKScpO3Rocm93IHUuaGFzaD17dGV4dDoiYnJhbmNoICIraSx0b2tlbjoiYnJhbmNoICIraSxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbJyJjaGVja291dCAnK2krJyInXX0sdX19LHV0bj1mdW5jdGlvbihpLHMsdSxkKXtpPWNpLnNhbml0aXplVGV4dChpLHF0KCkpLHM9Y2kuc2FuaXRpemVUZXh0KHMscXQoKSk7Y29uc3QgcD1iMVtGMFtzZF1dLHY9YjFbRjBbaV1dO2lmKHNkPT09aSl7bGV0IHk9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQ2Fubm90IG1lcmdlIGEgYnJhbmNoIHRvIGl0c2VsZicpO3Rocm93IHkuaGFzaD17dGV4dDoibWVyZ2UgIitpLHRva2VuOiJtZXJnZSAiK2ksbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJicmFuY2ggYWJjIl19LHl9ZWxzZSBpZihwPT09dm9pZCAwfHwhcCl7bGV0IHk9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQ3VycmVudCBicmFuY2ggKCcrc2QrIiloYXMgbm8gY29tbWl0cyIpO3Rocm93IHkuaGFzaD17dGV4dDoibWVyZ2UgIitpLHRva2VuOiJtZXJnZSAiK2ksbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJjb21taXQiXX0seX1lbHNlIGlmKEYwW2ldPT09dm9pZCAwKXtsZXQgeT1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAibWVyZ2UiLiBCcmFuY2ggdG8gYmUgbWVyZ2VkICgnK2krIikgZG9lcyBub3QgZXhpc3QiKTt0aHJvdyB5Lmhhc2g9e3RleHQ6Im1lcmdlICIraSx0b2tlbjoibWVyZ2UgIitpLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsiYnJhbmNoICIraV19LHl9ZWxzZSBpZih2PT09dm9pZCAwfHwhdil7bGV0IHk9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQnJhbmNoIHRvIGJlIG1lcmdlZCAoJytpKyIpIGhhcyBubyBjb21taXRzIik7dGhyb3cgeS5oYXNoPXt0ZXh0OiJtZXJnZSAiK2ksdG9rZW46Im1lcmdlICIraSxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbJyJjb21taXQiJ119LHl9ZWxzZSBpZihwPT09dil7bGV0IHk9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQm90aCBicmFuY2hlcyBoYXZlIHNhbWUgaGVhZCcpO3Rocm93IHkuaGFzaD17dGV4dDoibWVyZ2UgIitpLHRva2VuOiJtZXJnZSAiK2ksbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJicmFuY2ggYWJjIl19LHl9ZWxzZSBpZihzJiZiMVtzXSE9PXZvaWQgMCl7bGV0IHk9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQ29tbWl0IHdpdGggaWQ6JytzKyIgYWxyZWFkeSBleGlzdHMsIHVzZSBkaWZmZXJlbnQgY3VzdG9tIElkIik7dGhyb3cgeS5oYXNoPXt0ZXh0OiJtZXJnZSAiK2krcyt1K2QsdG9rZW46Im1lcmdlICIraStzK3UrZCxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbIm1lcmdlICIraSsiICIrcysiX1VOSVFVRSAiK3UrIiAiK2RdfSx5fWNvbnN0IGI9e2lkOnN8fFlDKyItIitXbWUoKSxtZXNzYWdlOiJtZXJnZWQgYnJhbmNoICIraSsiIGludG8gIitzZCxzZXE6WUMrKyxwYXJlbnRzOltOcD09bnVsbD9udWxsOk5wLmlkLEYwW2ldXSxicmFuY2g6c2QsdHlwZTpVRC5NRVJHRSxjdXN0b21UeXBlOnUsY3VzdG9tSWQ6ISFzLHRhZzpkfHwiIn07TnA9YixiMVtiLmlkXT1iLEYwW3NkXT1iLmlkLFhlLmRlYnVnKEYwKSxYZS5kZWJ1ZygiaW4gbWVyZ2VCcmFuY2giKX0sbHRuPWZ1bmN0aW9uKGkscyx1LGQpe2lmKFhlLmRlYnVnKCJFbnRlcmluZyBjaGVycnlQaWNrOiIsaSxzLHUpLGk9Y2kuc2FuaXRpemVUZXh0KGkscXQoKSkscz1jaS5zYW5pdGl6ZVRleHQocyxxdCgpKSx1PWNpLnNhbml0aXplVGV4dCh1LHF0KCkpLGQ9Y2kuc2FuaXRpemVUZXh0KGQscXQoKSksIWl8fGIxW2ldPT09dm9pZCAwKXtsZXQgYj1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAiY2hlcnJ5UGljayIuIFNvdXJjZSBjb21taXQgaWQgc2hvdWxkIGV4aXN0IGFuZCBwcm92aWRlZCcpO3Rocm93IGIuaGFzaD17dGV4dDoiY2hlcnJ5UGljayAiK2krIiAiK3MsdG9rZW46ImNoZXJyeVBpY2sgIitpKyIgIitzLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsiY2hlcnJ5LXBpY2sgYWJjIl19LGJ9bGV0IHA9YjFbaV0sdj1wLmJyYW5jaDtpZihkJiYhKEFycmF5LmlzQXJyYXkocC5wYXJlbnRzKSYmcC5wYXJlbnRzLmluY2x1ZGVzKGQpKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgb3BlcmF0aW9uOiBUaGUgc3BlY2lmaWVkIHBhcmVudCBjb21taXQgaXMgbm90IGFuIGltbWVkaWF0ZSBwYXJlbnQgb2YgdGhlIGNoZXJyeS1waWNrZWQgY29tbWl0LiIpO2lmKHAudHlwZT09PVVELk1FUkdFJiYhZCl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCB1c2FnZSBvZiBjaGVycnktcGljazogSWYgdGhlIHNvdXJjZSBjb21taXQgaXMgYSBtZXJnZSBjb21taXQsIGFuIGltbWVkaWF0ZSBwYXJlbnQgY29tbWl0IG11c3QgYmUgc3BlY2lmaWVkLiIpO2lmKCFzfHxiMVtzXT09PXZvaWQgMCl7aWYodj09PXNkKXtsZXQgVD1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAiY2hlcnJ5UGljayIuIFNvdXJjZSBjb21taXQgaXMgYWxyZWFkeSBvbiBjdXJyZW50IGJyYW5jaCcpO3Rocm93IFQuaGFzaD17dGV4dDoiY2hlcnJ5UGljayAiK2krIiAiK3MsdG9rZW46ImNoZXJyeVBpY2sgIitpKyIgIitzLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsiY2hlcnJ5LXBpY2sgYWJjIl19LFR9Y29uc3QgYj1iMVtGMFtzZF1dO2lmKGI9PT12b2lkIDB8fCFiKXtsZXQgVD1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAiY2hlcnJ5LXBpY2siLiBDdXJyZW50IGJyYW5jaCAoJytzZCsiKWhhcyBubyBjb21taXRzIik7dGhyb3cgVC5oYXNoPXt0ZXh0OiJjaGVycnlQaWNrICIraSsiICIrcyx0b2tlbjoiY2hlcnJ5UGljayAiK2krIiAiK3MsbGluZToiMSIsbG9jOntmaXJzdF9saW5lOjEsbGFzdF9saW5lOjEsZmlyc3RfY29sdW1uOjEsbGFzdF9jb2x1bW46MX0sZXhwZWN0ZWQ6WyJjaGVycnktcGljayBhYmMiXX0sVH1jb25zdCB5PXtpZDpZQysiLSIrV21lKCksbWVzc2FnZToiY2hlcnJ5LXBpY2tlZCAiK3ArIiBpbnRvICIrc2Qsc2VxOllDKysscGFyZW50czpbTnA9PW51bGw/bnVsbDpOcC5pZCxwLmlkXSxicmFuY2g6c2QsdHlwZTpVRC5DSEVSUllfUElDSyx0YWc6dT8/YGNoZXJyeS1waWNrOiR7cC5pZH0ke3AudHlwZT09PVVELk1FUkdFP2B8cGFyZW50OiR7ZH1gOiIifWB9O05wPXksYjFbeS5pZF09eSxGMFtzZF09eS5pZCxYZS5kZWJ1ZyhGMCksWGUuZGVidWcoImluIGNoZXJyeVBpY2siKX19LFZVZT1mdW5jdGlvbihpKXtpZihpPWNpLnNhbml0aXplVGV4dChpLHF0KCkpLEYwW2ldPT09dm9pZCAwKXtsZXQgcz1uZXcgRXJyb3IoJ1RyeWluZyB0byBjaGVja291dCBicmFuY2ggd2hpY2ggaXMgbm90IHlldCBjcmVhdGVkLiAoSGVscCB0cnkgdXNpbmcgImJyYW5jaCAnK2krJyIpJyk7dGhyb3cgcy5oYXNoPXt0ZXh0OiJjaGVja291dCAiK2ksdG9rZW46ImNoZWNrb3V0ICIraSxsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbJyJicmFuY2ggJytpKyciJ119LHN9ZWxzZXtzZD1pO2NvbnN0IHM9RjBbc2RdO05wPWIxW3NdfX07ZnVuY3Rpb24gVVVlKGkscyx1KXtjb25zdCBkPWkuaW5kZXhPZihzKTtkPT09LTE/aS5wdXNoKHUpOmkuc3BsaWNlKGQsMSx1KX1mdW5jdGlvbiBHVWUoaSl7Y29uc3Qgcz1pLnJlZHVjZSgocCx2KT0+cC5zZXE+di5zZXE/cDp2LGlbMF0pO2xldCB1PSIiO2kuZm9yRWFjaChmdW5jdGlvbihwKXtwPT09cz91Kz0iCSoiOnUrPSIJfCJ9KTtjb25zdCBkPVt1LHMuaWQscy5zZXFdO2ZvcihsZXQgcCBpbiBGMClGMFtwXT09PXMuaWQmJmQucHVzaChwKTtpZihYZS5kZWJ1ZyhkLmpvaW4oIiAiKSkscy5wYXJlbnRzJiZzLnBhcmVudHMubGVuZ3RoPT0yKXtjb25zdCBwPWIxW3MucGFyZW50c1swXV07VVVlKGkscyxwKSxpLnB1c2goYjFbcy5wYXJlbnRzWzFdXSl9ZWxzZXtpZihzLnBhcmVudHMubGVuZ3RoPT0wKXJldHVybjt7Y29uc3QgcD1iMVtzLnBhcmVudHNdO1VVZShpLHMscCl9fWk9cnRuKGkscD0+cC5pZCksR1VlKGkpfWNvbnN0IGh0bj1mdW5jdGlvbigpe1hlLmRlYnVnKGIxKTtjb25zdCBpPUtVZSgpWzBdO0dVZShbaV0pfSxmdG49ZnVuY3Rpb24oKXtiMT17fSxOcD1udWxsO2xldCBpPXF0KCkuZ2l0R3JhcGgubWFpbkJyYW5jaE5hbWUscz1xdCgpLmdpdEdyYXBoLm1haW5CcmFuY2hPcmRlcjtGMD17fSxGMFtpXT1udWxsLE9SPXt9LE9SW2ldPXtuYW1lOmksb3JkZXI6c30sc2Q9aSxZQz0wLFBnKCl9LGR0bj1mdW5jdGlvbigpe3JldHVybiBPYmplY3QudmFsdWVzKE9SKS5tYXAoKHMsdSk9PnMub3JkZXIhPT1udWxsP3M6ey4uLnMsb3JkZXI6cGFyc2VGbG9hdChgMC4ke3V9YCwxMCl9KS5zb3J0KChzLHUpPT5zLm9yZGVyLXUub3JkZXIpLm1hcCgoe25hbWU6c30pPT4oe25hbWU6c30pKX0sZ3RuPWZ1bmN0aW9uKCl7cmV0dXJuIEYwfSxwdG49ZnVuY3Rpb24oKXtyZXR1cm4gYjF9LEtVZT1mdW5jdGlvbigpe2NvbnN0IGk9T2JqZWN0LmtleXMoYjEpLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gYjFbc119KTtyZXR1cm4gaS5mb3JFYWNoKGZ1bmN0aW9uKHMpe1hlLmRlYnVnKHMuaWQpfSksaS5zb3J0KChzLHUpPT5zLnNlcS11LnNlcSksaX0sYnRuPWZ1bmN0aW9uKCl7cmV0dXJuIHNkfSxtdG49ZnVuY3Rpb24oKXtyZXR1cm4gcVVlfSx2dG49ZnVuY3Rpb24oKXtyZXR1cm4gTnB9LFVEPXtOT1JNQUw6MCxSRVZFUlNFOjEsSElHSExJR0hUOjIsTUVSR0U6MyxDSEVSUllfUElDSzo0fSx3dG49e2dldENvbmZpZzooKT0+cXQoKS5naXRHcmFwaCxzZXREaXJlY3Rpb246aXRuLHNldE9wdGlvbnM6c3RuLGdldE9wdGlvbnM6YXRuLGNvbW1pdDpvdG4sYnJhbmNoOmN0bixtZXJnZTp1dG4sY2hlcnJ5UGljazpsdG4sY2hlY2tvdXQ6VlVlLHByZXR0eVByaW50Omh0bixjbGVhcjpmdG4sZ2V0QnJhbmNoZXNBc09iakFycmF5OmR0bixnZXRCcmFuY2hlczpndG4sZ2V0Q29tbWl0czpwdG4sZ2V0Q29tbWl0c0FycmF5OktVZSxnZXRDdXJyZW50QnJhbmNoOmJ0bixnZXREaXJlY3Rpb246bXRuLGdldEhlYWQ6dnRuLHNldEFjY1RpdGxlOkJnLGdldEFjY1RpdGxlOkNwLGdldEFjY0Rlc2NyaXB0aW9uOl9wLHNldEFjY0Rlc2NyaXB0aW9uOlNwLHNldERpYWdyYW1UaXRsZTpjbSxnZXREaWFncmFtVGl0bGU6QXAsY29tbWl0VHlwZTpVRH07bGV0IE5SPXt9O2NvbnN0IGFkPXtOT1JNQUw6MCxSRVZFUlNFOjEsSElHSExJR0hUOjIsTUVSR0U6MyxDSEVSUllfUElDSzo0fSxYQz04O2xldCBIMj17fSxINz17fSxjSj1bXSxQUj0wLFIwPSJMUiI7Y29uc3QgeXRuPSgpPT57SDI9e30sSDc9e30sTlI9e30sUFI9MCxjSj1bXSxSMD0iTFIifSxXVWU9aT0+e2NvbnN0IHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTtsZXQgdT1bXTt0eXBlb2YgaT09InN0cmluZyI/dT1pLnNwbGl0KC9cXG58XG58PGJyXHMqXC8/Pi9naSk6QXJyYXkuaXNBcnJheShpKT91PWk6dT1bXTtmb3IoY29uc3QgZCBvZiB1KXtjb25zdCBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO3Auc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsInByZXNlcnZlIikscC5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIikscC5zZXRBdHRyaWJ1dGUoIngiLCIwIikscC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwicm93IikscC50ZXh0Q29udGVudD1kLnRyaW0oKSxzLmFwcGVuZENoaWxkKHApfXJldHVybiBzfSx4dG49aT0+e2xldCBzPSIiLHU9MDtyZXR1cm4gaS5mb3JFYWNoKGQ9Pntjb25zdCBwPVIwPT09IlRCIj9IN1tkXS55Okg3W2RdLng7cD49dSYmKHM9ZCx1PXApfSksc3x8dm9pZCAwfSxZVWU9KGkscyx1KT0+e2NvbnN0IGQ9cXQoKS5naXRHcmFwaCxwPWkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjb21taXQtYnVsbGV0cyIpLHY9aS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNvbW1pdC1sYWJlbHMiKTtsZXQgYj0wO1IwPT09IlRCIiYmKGI9MzApO2NvbnN0IFQ9T2JqZWN0LmtleXMocykuc29ydCgoUixGKT0+c1tSXS5zZXEtc1tGXS5zZXEpLF89ZC5wYXJhbGxlbENvbW1pdHMsQT0xMCxQPTQwO1QuZm9yRWFjaChSPT57Y29uc3QgRj1zW1JdO2lmKF8paWYoRi5wYXJlbnRzLmxlbmd0aCl7Y29uc3QgaWU9eHRuKEYucGFyZW50cyk7Yj1SMD09PSJUQiI/SDdbaWVdLnkrUDpIN1tpZV0ueCtQfWVsc2UgYj0wLFIwPT09IlRCIiYmKGI9MzApO2NvbnN0IGo9YitBLEs9UjA9PT0iVEIiP2o6SDJbRi5icmFuY2hdLnBvcyxlZT1SMD09PSJUQiI/SDJbRi5icmFuY2hdLnBvczpqO2lmKHUpe2xldCBpZSxvZT1GLmN1c3RvbVR5cGUhPT12b2lkIDAmJkYuY3VzdG9tVHlwZSE9PSIiP0YuY3VzdG9tVHlwZTpGLnR5cGU7c3dpdGNoKG9lKXtjYXNlIGFkLk5PUk1BTDppZT0iY29tbWl0LW5vcm1hbCI7YnJlYWs7Y2FzZSBhZC5SRVZFUlNFOmllPSJjb21taXQtcmV2ZXJzZSI7YnJlYWs7Y2FzZSBhZC5ISUdITElHSFQ6aWU9ImNvbW1pdC1oaWdobGlnaHQiO2JyZWFrO2Nhc2UgYWQuTUVSR0U6aWU9ImNvbW1pdC1tZXJnZSI7YnJlYWs7Y2FzZSBhZC5DSEVSUllfUElDSzppZT0iY29tbWl0LWNoZXJyeS1waWNrIjticmVhaztkZWZhdWx0OmllPSJjb21taXQtbm9ybWFsIn1pZihvZT09PWFkLkhJR0hMSUdIVCl7Y29uc3QgcGU9cC5hcHBlbmQoInJlY3QiKTtwZS5hdHRyKCJ4IixlZS0xMCkscGUuYXR0cigieSIsSy0xMCkscGUuYXR0cigiaGVpZ2h0IiwyMCkscGUuYXR0cigid2lkdGgiLDIwKSxwZS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke0YuaWR9IGNvbW1pdC1oaWdobGlnaHQke0gyW0YuYnJhbmNoXS5pbmRleCVYQ30gJHtpZX0tb3V0ZXJgKSxwLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLGVlLTYpLmF0dHIoInkiLEstNikuYXR0cigiaGVpZ2h0IiwxMikuYXR0cigid2lkdGgiLDEyKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke0YuaWR9IGNvbW1pdCR7SDJbRi5icmFuY2hdLmluZGV4JVhDfSAke2llfS1pbm5lcmApfWVsc2UgaWYob2U9PT1hZC5DSEVSUllfUElDSylwLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGVlKS5hdHRyKCJjeSIsSykuYXR0cigiciIsMTApLmF0dHIoImNsYXNzIixgY29tbWl0ICR7Ri5pZH0gJHtpZX1gKSxwLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGVlLTMpLmF0dHIoImN5IixLKzIpLmF0dHIoInIiLDIuNzUpLmF0dHIoImZpbGwiLCIjZmZmIikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtGLmlkfSAke2llfWApLHAuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsZWUrMykuYXR0cigiY3kiLEsrMikuYXR0cigiciIsMi43NSkuYXR0cigiZmlsbCIsIiNmZmYiKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke0YuaWR9ICR7aWV9YCkscC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsZWUrMykuYXR0cigieTEiLEsrMSkuYXR0cigieDIiLGVlKS5hdHRyKCJ5MiIsSy01KS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtGLmlkfSAke2llfWApLHAuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLGVlLTMpLmF0dHIoInkxIixLKzEpLmF0dHIoIngyIixlZSkuYXR0cigieTIiLEstNSkuYXR0cigic3Ryb2tlIiwiI2ZmZiIpLmF0dHIoImNsYXNzIixgY29tbWl0ICR7Ri5pZH0gJHtpZX1gKTtlbHNle2NvbnN0IHBlPXAuYXBwZW5kKCJjaXJjbGUiKTtpZihwZS5hdHRyKCJjeCIsZWUpLHBlLmF0dHIoImN5IixLKSxwZS5hdHRyKCJyIixGLnR5cGU9PT1hZC5NRVJHRT85OjEwKSxwZS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke0YuaWR9IGNvbW1pdCR7SDJbRi5icmFuY2hdLmluZGV4JVhDfWApLG9lPT09YWQuTUVSR0Upe2NvbnN0IGJlPXAuYXBwZW5kKCJjaXJjbGUiKTtiZS5hdHRyKCJjeCIsZWUpLGJlLmF0dHIoImN5IixLKSxiZS5hdHRyKCJyIiw2KSxiZS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke2llfSAke0YuaWR9IGNvbW1pdCR7SDJbRi5icmFuY2hdLmluZGV4JVhDfWApfW9lPT09YWQuUkVWRVJTRSYmcC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixgTSAke2VlLTV9LCR7Sy01fUwke2VlKzV9LCR7Sys1fU0ke2VlLTV9LCR7Sys1fUwke2VlKzV9LCR7Sy01fWApLmF0dHIoImNsYXNzIixgY29tbWl0ICR7aWV9ICR7Ri5pZH0gY29tbWl0JHtIMltGLmJyYW5jaF0uaW5kZXglWEN9YCl9fWlmKFIwPT09IlRCIj9IN1tGLmlkXT17eDplZSx5Omp9Okg3W0YuaWRdPXt4OmoseTpLfSx1KXtpZihGLnR5cGUhPT1hZC5DSEVSUllfUElDSyYmKEYuY3VzdG9tSWQmJkYudHlwZT09PWFkLk1FUkdFfHxGLnR5cGUhPT1hZC5NRVJHRSkmJmQuc2hvd0NvbW1pdExhYmVsKXtjb25zdCBwZT12LmFwcGVuZCgiZyIpLGJlPXBlLmluc2VydCgicmVjdCIpLmF0dHIoImNsYXNzIiwiY29tbWl0LWxhYmVsLWJrZyIpLGFlPXBlLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIpLmF0dHIoInkiLEsrMjUpLmF0dHIoImNsYXNzIiwiY29tbWl0LWxhYmVsIikudGV4dChGLmlkKTtsZXQgbmU9YWUubm9kZSgpLmdldEJCb3goKTtpZihiZS5hdHRyKCJ4IixqLW5lLndpZHRoLzItMikuYXR0cigieSIsSysxMy41KS5hdHRyKCJ3aWR0aCIsbmUud2lkdGgrMioyKS5hdHRyKCJoZWlnaHQiLG5lLmhlaWdodCsyKjIpLFIwPT09IlRCIiYmKGJlLmF0dHIoIngiLGVlLShuZS53aWR0aCs0KjQrNSkpLmF0dHIoInkiLEstMTIpLGFlLmF0dHIoIngiLGVlLShuZS53aWR0aCs0KjQpKS5hdHRyKCJ5IixLK25lLmhlaWdodC0xMikpLFIwIT09IlRCIiYmYWUuYXR0cigieCIsai1uZS53aWR0aC8yKSxkLnJvdGF0ZUNvbW1pdExhYmVsKWlmKFIwPT09IlRCIilhZS5hdHRyKCJ0cmFuc2Zvcm0iLCJyb3RhdGUoLTQ1LCAiK2VlKyIsICIrSysiKSIpLGJlLmF0dHIoInRyYW5zZm9ybSIsInJvdGF0ZSgtNDUsICIrZWUrIiwgIitLKyIpIik7ZWxzZXtsZXQgc2U9LTcuNS0obmUud2lkdGgrMTApLzI1KjkuNSxkZT0xMCtuZS53aWR0aC8yNSo4LjU7cGUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrc2UrIiwgIitkZSsiKSByb3RhdGUoLTQ1LCAiK2IrIiwgIitLKyIpIil9fWlmKEYudGFnKXtjb25zdCBwZT12Lmluc2VydCgicG9seWdvbiIpLGJlPXYuYXBwZW5kKCJjaXJjbGUiKSxhZT12LmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLEstMTYpLmF0dHIoImNsYXNzIiwidGFnLWxhYmVsIikudGV4dChGLnRhZyk7bGV0IG5lPWFlLm5vZGUoKS5nZXRCQm94KCk7YWUuYXR0cigieCIsai1uZS53aWR0aC8yKTtjb25zdCBzZT1uZS5oZWlnaHQvMixkZT1LLTE5LjI7cGUuYXR0cigiY2xhc3MiLCJ0YWctbGFiZWwtYmtnIikuYXR0cigicG9pbnRzIixgCiAgICAgICAgICAke2ItbmUud2lkdGgvMi00LzJ9LCR7ZGUrMn0KICAgICAgICAgICR7Yi1uZS53aWR0aC8yLTQvMn0sJHtkZS0yfQogICAgICAgICAgJHtqLW5lLndpZHRoLzItNH0sJHtkZS1zZS0yfQogICAgICAgICAgJHtqK25lLndpZHRoLzIrNH0sJHtkZS1zZS0yfQogICAgICAgICAgJHtqK25lLndpZHRoLzIrNH0sJHtkZStzZSsyfQogICAgICAgICAgJHtqLW5lLndpZHRoLzItNH0sJHtkZStzZSsyfWApLGJlLmF0dHIoImN4IixiLW5lLndpZHRoLzIrNC8yKS5hdHRyKCJjeSIsZGUpLmF0dHIoInIiLDEuNSkuYXR0cigiY2xhc3MiLCJ0YWctaG9sZSIpLFIwPT09IlRCIiYmKHBlLmF0dHIoImNsYXNzIiwidGFnLWxhYmVsLWJrZyIpLmF0dHIoInBvaW50cyIsYAogICAgICAgICAgICAke2VlfSwke2IrMn0KICAgICAgICAgICAgJHtlZX0sJHtiLTJ9CiAgICAgICAgICAgICR7ZWUrQX0sJHtiLXNlLTJ9CiAgICAgICAgICAgICR7ZWUrQStuZS53aWR0aCs0fSwke2Itc2UtMn0KICAgICAgICAgICAgJHtlZStBK25lLndpZHRoKzR9LCR7YitzZSsyfQogICAgICAgICAgICAke2VlK0F9LCR7YitzZSsyfWApLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxMiwxMikgcm90YXRlKDQ1LCAiK2VlKyIsIitiKyIpIiksYmUuYXR0cigiY3giLGVlKzQvMikuYXR0cigiY3kiLGIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxMiwxMikgcm90YXRlKDQ1LCAiK2VlKyIsIitiKyIpIiksYWUuYXR0cigieCIsZWUrNSkuYXR0cigieSIsYiszKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMTQsMTQpIHJvdGF0ZSg0NSwgIitlZSsiLCIrYisiKSIpKX19Yis9UCtBLGI+UFImJihQUj1iKX0pfSxrdG49KGkscyx1LGQscCk9Pntjb25zdCBiPShSMD09PSJUQiI/dS54PGQueDp1Lnk8ZC55KT9zLmJyYW5jaDppLmJyYW5jaCx5PV89Pl8uYnJhbmNoPT09YixUPV89Pl8uc2VxPmkuc2VxJiZfLnNlcTxzLnNlcTtyZXR1cm4gT2JqZWN0LnZhbHVlcyhwKS5zb21lKF89PlQoXykmJnkoXykpfSxCUj0oaSxzLHU9MCk9Pntjb25zdCBkPWkrTWF0aC5hYnMoaS1zKS8yO2lmKHU+NSlyZXR1cm4gZDtpZihjSi5ldmVyeShiPT5NYXRoLmFicyhiLWQpPj0xMCkpcmV0dXJuIGNKLnB1c2goZCksZDtjb25zdCB2PU1hdGguYWJzKGktcyk7cmV0dXJuIEJSKGkscy12LzUsdSsxKX0sRXRuPShpLHMsdSxkKT0+e2NvbnN0IHA9SDdbcy5pZF0sdj1IN1t1LmlkXSxiPWt0bihzLHUscCx2LGQpO2xldCB5PSIiLFQ9IiIsXz0wLEE9MCxQPUgyW3UuYnJhbmNoXS5pbmRleDt1LnR5cGU9PT1hZC5NRVJHRSYmcy5pZCE9PXUucGFyZW50c1swXSYmKFA9SDJbcy5icmFuY2hdLmluZGV4KTtsZXQgUjtpZihiKXt5PSJBIDEwIDEwLCAwLCAwLCAwLCIsVD0iQSAxMCAxMCwgMCwgMCwgMSwiLF89MTAsQT0xMDtjb25zdCBGPXAueTx2Lnk/QlIocC55LHYueSk6QlIodi55LHAueSksaj1wLng8di54P0JSKHAueCx2LngpOkJSKHYueCxwLngpO1IwPT09IlRCIj9wLng8di54P1I9YE0gJHtwLnh9ICR7cC55fSBMICR7ai1ffSAke3AueX0gJHtUfSAke2p9ICR7cC55K0F9IEwgJHtqfSAke3YueS1ffSAke3l9ICR7aitBfSAke3YueX0gTCAke3YueH0gJHt2Lnl9YDooUD1IMltzLmJyYW5jaF0uaW5kZXgsUj1gTSAke3AueH0gJHtwLnl9IEwgJHtqK199ICR7cC55fSAke3l9ICR7an0gJHtwLnkrQX0gTCAke2p9ICR7di55LV99ICR7VH0gJHtqLUF9ICR7di55fSBMICR7di54fSAke3YueX1gKTpwLnk8di55P1I9YE0gJHtwLnh9ICR7cC55fSBMICR7cC54fSAke0YtX30gJHt5fSAke3AueCtBfSAke0Z9IEwgJHt2LngtX30gJHtGfSAke1R9ICR7di54fSAke0YrQX0gTCAke3YueH0gJHt2Lnl9YDooUD1IMltzLmJyYW5jaF0uaW5kZXgsUj1gTSAke3AueH0gJHtwLnl9IEwgJHtwLnh9ICR7RitffSAke1R9ICR7cC54K0F9ICR7Rn0gTCAke3YueC1ffSAke0Z9ICR7eX0gJHt2Lnh9ICR7Ri1BfSBMICR7di54fSAke3YueX1gKX1lbHNlIHk9IkEgMjAgMjAsIDAsIDAsIDAsIixUPSJBIDIwIDIwLCAwLCAwLCAxLCIsXz0yMCxBPTIwLFIwPT09IlRCIj8ocC54PHYueCYmKHUudHlwZT09PWFkLk1FUkdFJiZzLmlkIT09dS5wYXJlbnRzWzBdP1I9YE0gJHtwLnh9ICR7cC55fSBMICR7cC54fSAke3YueS1ffSAke3l9ICR7cC54K0F9ICR7di55fSBMICR7di54fSAke3YueX1gOlI9YE0gJHtwLnh9ICR7cC55fSBMICR7di54LV99ICR7cC55fSAke1R9ICR7di54fSAke3AueStBfSBMICR7di54fSAke3YueX1gKSxwLng+di54JiYoeT0iQSAyMCAyMCwgMCwgMCwgMCwiLFQ9IkEgMjAgMjAsIDAsIDAsIDEsIixfPTIwLEE9MjAsdS50eXBlPT09YWQuTUVSR0UmJnMuaWQhPT11LnBhcmVudHNbMF0/Uj1gTSAke3AueH0gJHtwLnl9IEwgJHtwLnh9ICR7di55LV99ICR7VH0gJHtwLngtQX0gJHt2Lnl9IEwgJHt2Lnh9ICR7di55fWA6Uj1gTSAke3AueH0gJHtwLnl9IEwgJHt2LngrX30gJHtwLnl9ICR7eX0gJHt2Lnh9ICR7cC55K0F9IEwgJHt2Lnh9ICR7di55fWApLHAueD09PXYueCYmKFI9YE0gJHtwLnh9ICR7cC55fSBMICR7di54fSAke3YueX1gKSk6KHAueTx2LnkmJih1LnR5cGU9PT1hZC5NRVJHRSYmcy5pZCE9PXUucGFyZW50c1swXT9SPWBNICR7cC54fSAke3AueX0gTCAke3YueC1ffSAke3AueX0gJHtUfSAke3YueH0gJHtwLnkrQX0gTCAke3YueH0gJHt2Lnl9YDpSPWBNICR7cC54fSAke3AueX0gTCAke3AueH0gJHt2LnktX30gJHt5fSAke3AueCtBfSAke3YueX0gTCAke3YueH0gJHt2Lnl9YCkscC55PnYueSYmKHUudHlwZT09PWFkLk1FUkdFJiZzLmlkIT09dS5wYXJlbnRzWzBdP1I9YE0gJHtwLnh9ICR7cC55fSBMICR7di54LV99ICR7cC55fSAke3l9ICR7di54fSAke3AueS1BfSBMICR7di54fSAke3YueX1gOlI9YE0gJHtwLnh9ICR7cC55fSBMICR7cC54fSAke3YueStffSAke1R9ICR7cC54K0F9ICR7di55fSBMICR7di54fSAke3YueX1gKSxwLnk9PT12LnkmJihSPWBNICR7cC54fSAke3AueX0gTCAke3YueH0gJHt2Lnl9YCkpO2kuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsUikuYXR0cigiY2xhc3MiLCJhcnJvdyBhcnJvdyIrUCVYQyl9LFR0bj0oaSxzKT0+e2NvbnN0IHU9aS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNvbW1pdC1hcnJvd3MiKTtPYmplY3Qua2V5cyhzKS5mb3JFYWNoKGQ9Pntjb25zdCBwPXNbZF07cC5wYXJlbnRzJiZwLnBhcmVudHMubGVuZ3RoPjAmJnAucGFyZW50cy5mb3JFYWNoKHY9PntFdG4odSxzW3ZdLHAscyl9KX0pfSxDdG49KGkscyk9Pntjb25zdCB1PXF0KCkuZ2l0R3JhcGgsZD1pLmFwcGVuZCgiZyIpO3MuZm9yRWFjaCgocCx2KT0+e2NvbnN0IGI9diVYQyx5PUgyW3AubmFtZV0ucG9zLFQ9ZC5hcHBlbmQoImxpbmUiKTtULmF0dHIoIngxIiwwKSxULmF0dHIoInkxIix5KSxULmF0dHIoIngyIixQUiksVC5hdHRyKCJ5MiIseSksVC5hdHRyKCJjbGFzcyIsImJyYW5jaCBicmFuY2giK2IpLFIwPT09IlRCIiYmKFQuYXR0cigieTEiLDMwKSxULmF0dHIoIngxIix5KSxULmF0dHIoInkyIixQUiksVC5hdHRyKCJ4MiIseSkpLGNKLnB1c2goeSk7bGV0IF89cC5uYW1lO2NvbnN0IEE9V1VlKF8pLFA9ZC5pbnNlcnQoInJlY3QiKSxGPWQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJicmFuY2hMYWJlbCIpLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwgYnJhbmNoLWxhYmVsIitiKTtGLm5vZGUoKS5hcHBlbmRDaGlsZChBKTtsZXQgaj1BLmdldEJCb3goKTtQLmF0dHIoImNsYXNzIiwiYnJhbmNoTGFiZWxCa2cgbGFiZWwiK2IpLmF0dHIoInJ4Iiw0KS5hdHRyKCJyeSIsNCkuYXR0cigieCIsLWoud2lkdGgtNC0odS5yb3RhdGVDb21taXRMYWJlbD09PSEwPzMwOjApKS5hdHRyKCJ5Iiwtai5oZWlnaHQvMis4KS5hdHRyKCJ3aWR0aCIsai53aWR0aCsxOCkuYXR0cigiaGVpZ2h0IixqLmhlaWdodCs0KSxGLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKygtai53aWR0aC0xNC0odS5yb3RhdGVDb21taXRMYWJlbD09PSEwPzMwOjApKSsiLCAiKyh5LWouaGVpZ2h0LzItMSkrIikiKSxSMD09PSJUQiImJihQLmF0dHIoIngiLHktai53aWR0aC8yLTEwKS5hdHRyKCJ5IiwwKSxGLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyh5LWoud2lkdGgvMi01KSsiLCAwKSIpKSxSMCE9PSJUQiImJlAuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKC0xOSwgIisoeS1qLmhlaWdodC8yKSsiKSIpfSl9LFN0bj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOnR0bixkYjp3dG4scmVuZGVyZXI6e2RyYXc6ZnVuY3Rpb24oaSxzLHUsZCl7eXRuKCk7Y29uc3QgcD1xdCgpLHY9cC5naXRHcmFwaDtYZS5kZWJ1ZygiaW4gZ2l0Z3JhcGggcmVuZGVyZXIiLGkrYApgLCJpZDoiLHMsdSksTlI9ZC5kYi5nZXRDb21taXRzKCk7Y29uc3QgYj1kLmRiLmdldEJyYW5jaGVzQXNPYmpBcnJheSgpO1IwPWQuZGIuZ2V0RGlyZWN0aW9uKCk7Y29uc3QgeT1JcihgW2lkPSIke3N9Il1gKTtsZXQgVD0wO2IuZm9yRWFjaCgoXyxBKT0+e2NvbnN0IFA9V1VlKF8ubmFtZSksUj15LmFwcGVuZCgiZyIpLEY9Ui5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImJyYW5jaExhYmVsIiksaj1GLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwgYnJhbmNoLWxhYmVsIik7ai5ub2RlKCkuYXBwZW5kQ2hpbGQoUCk7bGV0IEs9UC5nZXRCQm94KCk7SDJbXy5uYW1lXT17cG9zOlQsaW5kZXg6QX0sVCs9NTArKHYucm90YXRlQ29tbWl0TGFiZWw/NDA6MCkrKFIwPT09IlRCIj9LLndpZHRoLzI6MCksai5yZW1vdmUoKSxGLnJlbW92ZSgpLFIucmVtb3ZlKCl9KSxZVWUoeSxOUiwhMSksdi5zaG93QnJhbmNoZXMmJkN0bih5LGIpLFR0bih5LE5SKSxZVWUoeSxOUiwhMCksQW8uaW5zZXJ0VGl0bGUoeSwiZ2l0VGl0bGVUZXh0Iix2LnRpdGxlVG9wTWFyZ2luLGQuZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpLGUkZSh2b2lkIDAseSx2LmRpYWdyYW1QYWRkaW5nLHYudXNlTWF4V2lkdGg/P3AudXNlTWF4V2lkdGgpfX0sc3R5bGVzOmk9PmAKICAuY29tbWl0LWlkLAogIC5jb21taXQtbXNnLAogIC5icmFuY2gtbGFiZWwgewogICAgZmlsbDogbGlnaHRncmV5OwogICAgY29sb3I6IGxpZ2h0Z3JleTsKICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7CiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7CiAgfQogICR7WzAsMSwyLDMsNCw1LDYsN10ubWFwKHM9PmAKICAgICAgICAuYnJhbmNoLWxhYmVsJHtzfSB7IGZpbGw6ICR7aVsiZ2l0QnJhbmNoTGFiZWwiK3NdfTsgfQogICAgICAgIC5jb21taXQke3N9IHsgc3Ryb2tlOiAke2lbImdpdCIrc119OyBmaWxsOiAke2lbImdpdCIrc119OyB9CiAgICAgICAgLmNvbW1pdC1oaWdobGlnaHQke3N9IHsgc3Ryb2tlOiAke2lbImdpdEludiIrc119OyBmaWxsOiAke2lbImdpdEludiIrc119OyB9CiAgICAgICAgLmxhYmVsJHtzfSAgeyBmaWxsOiAke2lbImdpdCIrc119OyB9CiAgICAgICAgLmFycm93JHtzfSB7IHN0cm9rZTogJHtpWyJnaXQiK3NdfTsgfQogICAgICAgIGApLmpvaW4oYApgKX0KCiAgLmJyYW5jaCB7CiAgICBzdHJva2Utd2lkdGg6IDE7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgc3Ryb2tlLWRhc2hhcnJheTogMjsKICB9CiAgLmNvbW1pdC1sYWJlbCB7IGZvbnQtc2l6ZTogJHtpLmNvbW1pdExhYmVsRm9udFNpemV9OyBmaWxsOiAke2kuY29tbWl0TGFiZWxDb2xvcn07fQogIC5jb21taXQtbGFiZWwtYmtnIHsgZm9udC1zaXplOiAke2kuY29tbWl0TGFiZWxGb250U2l6ZX07IGZpbGw6ICR7aS5jb21taXRMYWJlbEJhY2tncm91bmR9OyBvcGFjaXR5OiAwLjU7IH0KICAudGFnLWxhYmVsIHsgZm9udC1zaXplOiAke2kudGFnTGFiZWxGb250U2l6ZX07IGZpbGw6ICR7aS50YWdMYWJlbENvbG9yfTt9CiAgLnRhZy1sYWJlbC1ia2cgeyBmaWxsOiAke2kudGFnTGFiZWxCYWNrZ3JvdW5kfTsgc3Ryb2tlOiAke2kudGFnTGFiZWxCb3JkZXJ9OyB9CiAgLnRhZy1ob2xlIHsgZmlsbDogJHtpLnRleHRDb2xvcn07IH0KCiAgLmNvbW1pdC1tZXJnZSB7CiAgICBzdHJva2U6ICR7aS5wcmltYXJ5Q29sb3J9OwogICAgZmlsbDogJHtpLnByaW1hcnlDb2xvcn07CiAgfQogIC5jb21taXQtcmV2ZXJzZSB7CiAgICBzdHJva2U6ICR7aS5wcmltYXJ5Q29sb3J9OwogICAgZmlsbDogJHtpLnByaW1hcnlDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDM7CiAgfQogIC5jb21taXQtaGlnaGxpZ2h0LW91dGVyIHsKICB9CiAgLmNvbW1pdC1oaWdobGlnaHQtaW5uZXIgewogICAgc3Ryb2tlOiAke2kucHJpbWFyeUNvbG9yfTsKICAgIGZpbGw6ICR7aS5wcmltYXJ5Q29sb3J9OwogIH0KCiAgLmFycm93IHsgc3Ryb2tlLXdpZHRoOiA4OyBzdHJva2UtbGluZWNhcDogcm91bmQ7IGZpbGw6IG5vbmV9CiAgLmdpdFRpdGxlVGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZm9udC1zaXplOiAxOHB4OwogICAgZmlsbDogJHtpLnRleHRDb2xvcn07CiAgfQpgfX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgWW1lPWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oVyx4ZSxVLEZlKXtmb3IoVT1VfHx7fSxGZT1XLmxlbmd0aDtGZS0tO1VbV1tGZV1dPXhlKTtyZXR1cm4gVX0scz1bNiw4LDEwLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDMwLDMyLDMzLDM1LDM3XSx1PVsxLDI1XSxkPVsxLDI2XSxwPVsxLDI3XSx2PVsxLDI4XSxiPVsxLDI5XSx5PVsxLDMwXSxUPVsxLDMxXSxfPVsxLDldLEE9WzEsMTBdLFA9WzEsMTFdLFI9WzEsMTJdLEY9WzEsMTNdLGo9WzEsMTRdLEs9WzEsMTVdLGVlPVsxLDE2XSxpZT1bMSwxOF0sb2U9WzEsMTldLHBlPVsxLDIwXSxiZT1bMSwyMV0sYWU9WzEsMjJdLG5lPVsxLDI0XSxzZT1bMSwzMl0sZGU9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGdhbnR0OjQsZG9jdW1lbnQ6NSxFT0Y6NixsaW5lOjcsU1BBQ0U6OCxzdGF0ZW1lbnQ6OSxOTDoxMCx3ZWVrZGF5OjExLHdlZWtkYXlfbW9uZGF5OjEyLHdlZWtkYXlfdHVlc2RheToxMyx3ZWVrZGF5X3dlZG5lc2RheToxNCx3ZWVrZGF5X3RodXJzZGF5OjE1LHdlZWtkYXlfZnJpZGF5OjE2LHdlZWtkYXlfc2F0dXJkYXk6MTcsd2Vla2RheV9zdW5kYXk6MTgsZGF0ZUZvcm1hdDoxOSxpbmNsdXNpdmVFbmREYXRlczoyMCx0b3BBeGlzOjIxLGF4aXNGb3JtYXQ6MjIsdGlja0ludGVydmFsOjIzLGV4Y2x1ZGVzOjI0LGluY2x1ZGVzOjI1LHRvZGF5TWFya2VyOjI2LHRpdGxlOjI3LGFjY190aXRsZToyOCxhY2NfdGl0bGVfdmFsdWU6MjksYWNjX2Rlc2NyOjMwLGFjY19kZXNjcl92YWx1ZTozMSxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjMyLHNlY3Rpb246MzMsY2xpY2tTdGF0ZW1lbnQ6MzQsdGFza1R4dDozNSx0YXNrRGF0YTozNixjbGljazozNyxjYWxsYmFja25hbWU6MzgsY2FsbGJhY2thcmdzOjM5LGhyZWY6NDAsY2xpY2tTdGF0ZW1lbnREZWJ1Zzo0MSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiZ2FudHQiLDY6IkVPRiIsODoiU1BBQ0UiLDEwOiJOTCIsMTI6IndlZWtkYXlfbW9uZGF5IiwxMzoid2Vla2RheV90dWVzZGF5IiwxNDoid2Vla2RheV93ZWRuZXNkYXkiLDE1OiJ3ZWVrZGF5X3RodXJzZGF5IiwxNjoid2Vla2RheV9mcmlkYXkiLDE3OiJ3ZWVrZGF5X3NhdHVyZGF5IiwxODoid2Vla2RheV9zdW5kYXkiLDE5OiJkYXRlRm9ybWF0IiwyMDoiaW5jbHVzaXZlRW5kRGF0ZXMiLDIxOiJ0b3BBeGlzIiwyMjoiYXhpc0Zvcm1hdCIsMjM6InRpY2tJbnRlcnZhbCIsMjQ6ImV4Y2x1ZGVzIiwyNToiaW5jbHVkZXMiLDI2OiJ0b2RheU1hcmtlciIsMjc6InRpdGxlIiwyODoiYWNjX3RpdGxlIiwyOToiYWNjX3RpdGxlX3ZhbHVlIiwzMDoiYWNjX2Rlc2NyIiwzMToiYWNjX2Rlc2NyX3ZhbHVlIiwzMjoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMzM6InNlY3Rpb24iLDM1OiJ0YXNrVHh0IiwzNjoidGFza0RhdGEiLDM3OiJjbGljayIsMzg6ImNhbGxiYWNrbmFtZSIsMzk6ImNhbGxiYWNrYXJncyIsNDA6ImhyZWYifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzUsMF0sWzUsMl0sWzcsMl0sWzcsMV0sWzcsMV0sWzcsMV0sWzExLDFdLFsxMSwxXSxbMTEsMV0sWzExLDFdLFsxMSwxXSxbMTEsMV0sWzExLDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDJdLFszNCwyXSxbMzQsM10sWzM0LDNdLFszNCw0XSxbMzQsM10sWzM0LDRdLFszNCwyXSxbNDEsMl0sWzQxLDNdLFs0MSwzXSxbNDEsNF0sWzQxLDNdLFs0MSw0XSxbNDEsMl1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oeGUsVSxGZSxQZSxqZSxJZSxTZSl7dmFyIENlPUllLmxlbmd0aC0xO3N3aXRjaChqZSl7Y2FzZSAxOnJldHVybiBJZVtDZS0xXTtjYXNlIDI6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMzpJZVtDZS0xXS5wdXNoKEllW0NlXSksdGhpcy4kPUllW0NlLTFdO2JyZWFrO2Nhc2UgNDpjYXNlIDU6dGhpcy4kPUllW0NlXTticmVhaztjYXNlIDY6Y2FzZSA3OnRoaXMuJD1bXTticmVhaztjYXNlIDg6UGUuc2V0V2Vla2RheSgibW9uZGF5Iik7YnJlYWs7Y2FzZSA5OlBlLnNldFdlZWtkYXkoInR1ZXNkYXkiKTticmVhaztjYXNlIDEwOlBlLnNldFdlZWtkYXkoIndlZG5lc2RheSIpO2JyZWFrO2Nhc2UgMTE6UGUuc2V0V2Vla2RheSgidGh1cnNkYXkiKTticmVhaztjYXNlIDEyOlBlLnNldFdlZWtkYXkoImZyaWRheSIpO2JyZWFrO2Nhc2UgMTM6UGUuc2V0V2Vla2RheSgic2F0dXJkYXkiKTticmVhaztjYXNlIDE0OlBlLnNldFdlZWtkYXkoInN1bmRheSIpO2JyZWFrO2Nhc2UgMTU6UGUuc2V0RGF0ZUZvcm1hdChJZVtDZV0uc3Vic3RyKDExKSksdGhpcy4kPUllW0NlXS5zdWJzdHIoMTEpO2JyZWFrO2Nhc2UgMTY6UGUuZW5hYmxlSW5jbHVzaXZlRW5kRGF0ZXMoKSx0aGlzLiQ9SWVbQ2VdLnN1YnN0cigxOCk7YnJlYWs7Y2FzZSAxNzpQZS5Ub3BBeGlzKCksdGhpcy4kPUllW0NlXS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAxODpQZS5zZXRBeGlzRm9ybWF0KEllW0NlXS5zdWJzdHIoMTEpKSx0aGlzLiQ9SWVbQ2VdLnN1YnN0cigxMSk7YnJlYWs7Y2FzZSAxOTpQZS5zZXRUaWNrSW50ZXJ2YWwoSWVbQ2VdLnN1YnN0cigxMykpLHRoaXMuJD1JZVtDZV0uc3Vic3RyKDEzKTticmVhaztjYXNlIDIwOlBlLnNldEV4Y2x1ZGVzKEllW0NlXS5zdWJzdHIoOSkpLHRoaXMuJD1JZVtDZV0uc3Vic3RyKDkpO2JyZWFrO2Nhc2UgMjE6UGUuc2V0SW5jbHVkZXMoSWVbQ2VdLnN1YnN0cig5KSksdGhpcy4kPUllW0NlXS5zdWJzdHIoOSk7YnJlYWs7Y2FzZSAyMjpQZS5zZXRUb2RheU1hcmtlcihJZVtDZV0uc3Vic3RyKDEyKSksdGhpcy4kPUllW0NlXS5zdWJzdHIoMTIpO2JyZWFrO2Nhc2UgMjQ6UGUuc2V0RGlhZ3JhbVRpdGxlKEllW0NlXS5zdWJzdHIoNikpLHRoaXMuJD1JZVtDZV0uc3Vic3RyKDYpO2JyZWFrO2Nhc2UgMjU6dGhpcy4kPUllW0NlXS50cmltKCksUGUuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDI2OmNhc2UgMjc6dGhpcy4kPUllW0NlXS50cmltKCksUGUuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDI4OlBlLmFkZFNlY3Rpb24oSWVbQ2VdLnN1YnN0cig4KSksdGhpcy4kPUllW0NlXS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAzMDpQZS5hZGRUYXNrKEllW0NlLTFdLEllW0NlXSksdGhpcy4kPSJ0YXNrIjticmVhaztjYXNlIDMxOnRoaXMuJD1JZVtDZS0xXSxQZS5zZXRDbGlja0V2ZW50KEllW0NlLTFdLEllW0NlXSxudWxsKTticmVhaztjYXNlIDMyOnRoaXMuJD1JZVtDZS0yXSxQZS5zZXRDbGlja0V2ZW50KEllW0NlLTJdLEllW0NlLTFdLEllW0NlXSk7YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9SWVbQ2UtMl0sUGUuc2V0Q2xpY2tFdmVudChJZVtDZS0yXSxJZVtDZS0xXSxudWxsKSxQZS5zZXRMaW5rKEllW0NlLTJdLEllW0NlXSk7YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9SWVbQ2UtM10sUGUuc2V0Q2xpY2tFdmVudChJZVtDZS0zXSxJZVtDZS0yXSxJZVtDZS0xXSksUGUuc2V0TGluayhJZVtDZS0zXSxJZVtDZV0pO2JyZWFrO2Nhc2UgMzU6dGhpcy4kPUllW0NlLTJdLFBlLnNldENsaWNrRXZlbnQoSWVbQ2UtMl0sSWVbQ2VdLG51bGwpLFBlLnNldExpbmsoSWVbQ2UtMl0sSWVbQ2UtMV0pO2JyZWFrO2Nhc2UgMzY6dGhpcy4kPUllW0NlLTNdLFBlLnNldENsaWNrRXZlbnQoSWVbQ2UtM10sSWVbQ2UtMV0sSWVbQ2VdKSxQZS5zZXRMaW5rKEllW0NlLTNdLEllW0NlLTJdKTticmVhaztjYXNlIDM3OnRoaXMuJD1JZVtDZS0xXSxQZS5zZXRMaW5rKEllW0NlLTFdLEllW0NlXSk7YnJlYWs7Y2FzZSAzODpjYXNlIDQ0OnRoaXMuJD1JZVtDZS0xXSsiICIrSWVbQ2VdO2JyZWFrO2Nhc2UgMzk6Y2FzZSA0MDpjYXNlIDQyOnRoaXMuJD1JZVtDZS0yXSsiICIrSWVbQ2UtMV0rIiAiK0llW0NlXTticmVhaztjYXNlIDQxOmNhc2UgNDM6dGhpcy4kPUllW0NlLTNdKyIgIitJZVtDZS0yXSsiICIrSWVbQ2UtMV0rIiAiK0llW0NlXTticmVha319LHRhYmxlOlt7MzoxLDQ6WzEsMl19LHsxOlszXX0saShzLFsyLDJdLHs1OjN9KSx7NjpbMSw0XSw3OjUsODpbMSw2XSw5OjcsMTA6WzEsOF0sMTE6MTcsMTI6dSwxMzpkLDE0OnAsMTU6diwxNjpiLDE3OnksMTg6VCwxOTpfLDIwOkEsMjE6UCwyMjpSLDIzOkYsMjQ6aiwyNTpLLDI2OmVlLDI3OmllLDI4Om9lLDMwOnBlLDMyOmJlLDMzOmFlLDM0OjIzLDM1Om5lLDM3OnNlfSxpKHMsWzIsN10sezE6WzIsMV19KSxpKHMsWzIsM10pLHs5OjMzLDExOjE3LDEyOnUsMTM6ZCwxNDpwLDE1OnYsMTY6YiwxNzp5LDE4OlQsMTk6XywyMDpBLDIxOlAsMjI6UiwyMzpGLDI0OmosMjU6SywyNjplZSwyNzppZSwyODpvZSwzMDpwZSwzMjpiZSwzMzphZSwzNDoyMywzNTpuZSwzNzpzZX0saShzLFsyLDVdKSxpKHMsWzIsNl0pLGkocyxbMiwxNV0pLGkocyxbMiwxNl0pLGkocyxbMiwxN10pLGkocyxbMiwxOF0pLGkocyxbMiwxOV0pLGkocyxbMiwyMF0pLGkocyxbMiwyMV0pLGkocyxbMiwyMl0pLGkocyxbMiwyM10pLGkocyxbMiwyNF0pLHsyOTpbMSwzNF19LHszMTpbMSwzNV19LGkocyxbMiwyN10pLGkocyxbMiwyOF0pLGkocyxbMiwyOV0pLHszNjpbMSwzNl19LGkocyxbMiw4XSksaShzLFsyLDldKSxpKHMsWzIsMTBdKSxpKHMsWzIsMTFdKSxpKHMsWzIsMTJdKSxpKHMsWzIsMTNdKSxpKHMsWzIsMTRdKSx7Mzg6WzEsMzddLDQwOlsxLDM4XX0saShzLFsyLDRdKSxpKHMsWzIsMjVdKSxpKHMsWzIsMjZdKSxpKHMsWzIsMzBdKSxpKHMsWzIsMzFdLHszOTpbMSwzOV0sNDA6WzEsNDBdfSksaShzLFsyLDM3XSx7Mzg6WzEsNDFdfSksaShzLFsyLDMyXSx7NDA6WzEsNDJdfSksaShzLFsyLDMzXSksaShzLFsyLDM1XSx7Mzk6WzEsNDNdfSksaShzLFsyLDM0XSksaShzLFsyLDM2XSldLGRlZmF1bHRBY3Rpb25zOnt9LHBhcnNlRXJyb3I6ZnVuY3Rpb24oeGUsVSl7aWYoVS5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKHhlKTtlbHNle3ZhciBGZT1uZXcgRXJyb3IoeGUpO3Rocm93IEZlLmhhc2g9VSxGZX19LHBhcnNlOmZ1bmN0aW9uKHhlKXt2YXIgVT10aGlzLEZlPVswXSxQZT1bXSxqZT1bbnVsbF0sSWU9W10sU2U9dGhpcy50YWJsZSxDZT0iIixrZT0wLEtlPTAsRnQ9MixOZT0xLGduPUllLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLF90PU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksRXQ9e3l5Ont9fTtmb3IodmFyIEd0IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksR3QpJiYoRXQueXlbR3RdPXRoaXMueXlbR3RdKTtfdC5zZXRJbnB1dCh4ZSxFdC55eSksRXQueXkubGV4ZXI9X3QsRXQueXkucGFyc2VyPXRoaXMsdHlwZW9mIF90Lnl5bGxvYz4idSImJihfdC55eWxsb2M9e30pO3ZhciBsbj1fdC55eWxsb2M7SWUucHVzaChsbik7dmFyIHh0PV90Lm9wdGlvbnMmJl90Lm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBFdC55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1FdC55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBQdCgpe3ZhciB6cztyZXR1cm4genM9UGUucG9wKCl8fF90LmxleCgpfHxOZSx0eXBlb2YgenMhPSJudW1iZXIiJiYoenMgaW5zdGFuY2VvZiBBcnJheSYmKFBlPXpzLHpzPVBlLnBvcCgpKSx6cz1VLnN5bWJvbHNfW3pzXXx8enMpLHpzfWZvcih2YXIgUWUsRHQsa3QsT24saHQ9e30senIseXQsamkseGk7Oyl7aWYoRHQ9RmVbRmUubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbRHRdP2t0PXRoaXMuZGVmYXVsdEFjdGlvbnNbRHRdOigoUWU9PT1udWxsfHx0eXBlb2YgUWU+InUiKSYmKFFlPVB0KCkpLGt0PVNlW0R0XSYmU2VbRHRdW1FlXSksdHlwZW9mIGt0PiJ1Inx8IWt0Lmxlbmd0aHx8IWt0WzBdKXt2YXIgTWE9IiI7eGk9W107Zm9yKHpyIGluIFNlW0R0XSl0aGlzLnRlcm1pbmFsc19benJdJiZ6cj5GdCYmeGkucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW3pyXSsiJyIpO190LnNob3dQb3NpdGlvbj9NYT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhrZSsxKStgOgpgK190LnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGAreGkuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tRZV18fFFlKSsiJyI6TWE9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoa2UrMSkrIjogVW5leHBlY3RlZCAiKyhRZT09TmU/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bUWVdfHxRZSkrIiciKSx0aGlzLnBhcnNlRXJyb3IoTWEse3RleHQ6X3QubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW1FlXXx8UWUsbGluZTpfdC55eWxpbmVubyxsb2M6bG4sZXhwZWN0ZWQ6eGl9KX1pZihrdFswXWluc3RhbmNlb2YgQXJyYXkmJmt0Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrRHQrIiwgdG9rZW46ICIrUWUpO3N3aXRjaChrdFswXSl7Y2FzZSAxOkZlLnB1c2goUWUpLGplLnB1c2goX3QueXl0ZXh0KSxJZS5wdXNoKF90Lnl5bGxvYyksRmUucHVzaChrdFsxXSksUWU9bnVsbCxLZT1fdC55eWxlbmcsQ2U9X3QueXl0ZXh0LGtlPV90Lnl5bGluZW5vLGxuPV90Lnl5bGxvYzticmVhaztjYXNlIDI6aWYoeXQ9dGhpcy5wcm9kdWN0aW9uc19ba3RbMV1dWzFdLGh0LiQ9amVbamUubGVuZ3RoLXl0XSxodC5fJD17Zmlyc3RfbGluZTpJZVtJZS5sZW5ndGgtKHl0fHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6SWVbSWUubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46SWVbSWUubGVuZ3RoLSh5dHx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpJZVtJZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LHh0JiYoaHQuXyQucmFuZ2U9W0llW0llLmxlbmd0aC0oeXR8fDEpXS5yYW5nZVswXSxJZVtJZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxPbj10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoaHQsW0NlLEtlLGtlLEV0Lnl5LGt0WzFdLGplLEllXS5jb25jYXQoZ24pKSx0eXBlb2YgT248InUiKXJldHVybiBPbjt5dCYmKEZlPUZlLnNsaWNlKDAsLTEqeXQqMiksamU9amUuc2xpY2UoMCwtMSp5dCksSWU9SWUuc2xpY2UoMCwtMSp5dCkpLEZlLnB1c2godGhpcy5wcm9kdWN0aW9uc19ba3RbMV1dWzBdKSxqZS5wdXNoKGh0LiQpLEllLnB1c2goaHQuXyQpLGppPVNlW0ZlW0ZlLmxlbmd0aC0yXV1bRmVbRmUubGVuZ3RoLTFdXSxGZS5wdXNoKGppKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sWD1mdW5jdGlvbigpe3ZhciBXPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKFUsRmUpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoVSxGZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoVSl9LHNldElucHV0OmZ1bmN0aW9uKHhlLFUpe3JldHVybiB0aGlzLnl5PVV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXhlLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB4ZT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9eGUsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXhlLHRoaXMubWF0Y2hlZCs9eGU7dmFyIFU9eGUubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBVPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx4ZX0sdW5wdXQ6ZnVuY3Rpb24oeGUpe3ZhciBVPXhlLmxlbmd0aCxGZT14ZS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXhlK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1VKSx0aGlzLm9mZnNldC09VTt2YXIgUGU9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksRmUubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1GZS5sZW5ndGgtMSk7dmFyIGplPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpGZT8oRmUubGVuZ3RoPT09UGUubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStQZVtQZS5sZW5ndGgtRmUubGVuZ3RoXS5sZW5ndGgtRmVbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1VfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2plWzBdLGplWzBdK3RoaXMueXlsZW5nLVVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbih4ZSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHhlKSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB4ZT10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHhlLmxlbmd0aD4yMD8iLi4uIjoiIikreGUuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgeGU9dGhpcy5tYXRjaDtyZXR1cm4geGUubGVuZ3RoPDIwJiYoeGUrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXhlLmxlbmd0aCkpLCh4ZS5zdWJzdHIoMCwyMCkrKHhlLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgeGU9dGhpcy5wYXN0SW5wdXQoKSxVPW5ldyBBcnJheSh4ZS5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB4ZSt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArVSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oeGUsVSl7dmFyIEZlLFBlLGplO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihqZT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihqZS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxQZT14ZVswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksUGUmJih0aGlzLnl5bGluZW5vKz1QZS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpQZT9QZVtQZS5sZW5ndGgtMV0ubGVuZ3RoLVBlW1BlLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3hlWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXhlWzBdLHRoaXMubWF0Y2grPXhlWzBdLHRoaXMubWF0Y2hlcz14ZSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh4ZVswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9eGVbMF0sRmU9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsVSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxGZSlyZXR1cm4gRmU7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIEllIGluIGplKXRoaXNbSWVdPWplW0llXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciB4ZSxVLEZlLFBlO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGplPXRoaXMuX2N1cnJlbnRSdWxlcygpLEllPTA7SWU8amUubGVuZ3RoO0llKyspaWYoRmU9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tqZVtJZV1dKSxGZSYmKCFVfHxGZVswXS5sZW5ndGg+VVswXS5sZW5ndGgpKXtpZihVPUZlLFBlPUllLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKHhlPXRoaXMudGVzdF9tYXRjaChGZSxqZVtJZV0pLHhlIT09ITEpcmV0dXJuIHhlO2lmKHRoaXMuX2JhY2t0cmFjayl7VT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBVPyh4ZT10aGlzLnRlc3RfbWF0Y2goVSxqZVtQZV0pLHhlIT09ITE/eGU6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBVPXRoaXMubmV4dCgpO3JldHVybiBVfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihVKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goVSl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIFU9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gVT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKFUpe3JldHVybiBVPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoVXx8MCksVT49MD90aGlzLmNvbmRpdGlvblN0YWNrW1VdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKFUpe3RoaXMuYmVnaW4oVSl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oVSxGZSxQZSxqZSl7c3dpdGNoKFBlKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksIm9wZW5fZGlyZWN0aXZlIjtjYXNlIDE6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDI4O2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgMzpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMzA7Y2FzZSA0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSA1OnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDY6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNzpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSA4OmJyZWFrO2Nhc2UgOTpicmVhaztjYXNlIDEwOmJyZWFrO2Nhc2UgMTE6cmV0dXJuIDEwO2Nhc2UgMTI6YnJlYWs7Y2FzZSAxMzpicmVhaztjYXNlIDE0OnRoaXMuYmVnaW4oImhyZWYiKTticmVhaztjYXNlIDE1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE2OnJldHVybiA0MDtjYXNlIDE3OnRoaXMuYmVnaW4oImNhbGxiYWNrbmFtZSIpO2JyZWFrO2Nhc2UgMTg6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTk6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImNhbGxiYWNrYXJncyIpO2JyZWFrO2Nhc2UgMjA6cmV0dXJuIDM4O2Nhc2UgMjE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjI6cmV0dXJuIDM5O2Nhc2UgMjM6dGhpcy5iZWdpbigiY2xpY2siKTticmVhaztjYXNlIDI0OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI1OnJldHVybiAzNztjYXNlIDI2OnJldHVybiA0O2Nhc2UgMjc6cmV0dXJuIDE5O2Nhc2UgMjg6cmV0dXJuIDIwO2Nhc2UgMjk6cmV0dXJuIDIxO2Nhc2UgMzA6cmV0dXJuIDIyO2Nhc2UgMzE6cmV0dXJuIDIzO2Nhc2UgMzI6cmV0dXJuIDI1O2Nhc2UgMzM6cmV0dXJuIDI0O2Nhc2UgMzQ6cmV0dXJuIDI2O2Nhc2UgMzU6cmV0dXJuIDEyO2Nhc2UgMzY6cmV0dXJuIDEzO2Nhc2UgMzc6cmV0dXJuIDE0O2Nhc2UgMzg6cmV0dXJuIDE1O2Nhc2UgMzk6cmV0dXJuIDE2O2Nhc2UgNDA6cmV0dXJuIDE3O2Nhc2UgNDE6cmV0dXJuIDE4O2Nhc2UgNDI6cmV0dXJuImRhdGUiO2Nhc2UgNDM6cmV0dXJuIDI3O2Nhc2UgNDQ6cmV0dXJuImFjY0Rlc2NyaXB0aW9uIjtjYXNlIDQ1OnJldHVybiAzMztjYXNlIDQ2OnJldHVybiAzNTtjYXNlIDQ3OnJldHVybiAzNjtjYXNlIDQ4OnJldHVybiI6IjtjYXNlIDQ5OnJldHVybiA2O2Nhc2UgNTA6cmV0dXJuIklOVkFMSUQifX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86JSUoPyFceykqW15cbl0qKS9pLC9eKD86W15cfV0lJSpbXlxuXSopL2ksL14oPzolJSpbXlxuXSpbXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86JVteXG5dKikvaSwvXig/OmhyZWZbXHNdK1siXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86Y2FsbFtcc10rKS9pLC9eKD86XChbXHNdKlwpKS9pLC9eKD86XCgpL2ksL14oPzpbXihdKikvaSwvXig/OlwpKS9pLC9eKD86W14pXSopL2ksL14oPzpjbGlja1tcc10rKS9pLC9eKD86W1xzXG5dKS9pLC9eKD86W15cc1xuXSopL2ksL14oPzpnYW50dFxiKS9pLC9eKD86ZGF0ZUZvcm1hdFxzW14jXG47XSspL2ksL14oPzppbmNsdXNpdmVFbmREYXRlc1xiKS9pLC9eKD86dG9wQXhpc1xiKS9pLC9eKD86YXhpc0Zvcm1hdFxzW14jXG47XSspL2ksL14oPzp0aWNrSW50ZXJ2YWxcc1teI1xuO10rKS9pLC9eKD86aW5jbHVkZXNcc1teI1xuO10rKS9pLC9eKD86ZXhjbHVkZXNcc1teI1xuO10rKS9pLC9eKD86dG9kYXlNYXJrZXJcc1teXG47XSspL2ksL14oPzp3ZWVrZGF5XHMrbW9uZGF5XGIpL2ksL14oPzp3ZWVrZGF5XHMrdHVlc2RheVxiKS9pLC9eKD86d2Vla2RheVxzK3dlZG5lc2RheVxiKS9pLC9eKD86d2Vla2RheVxzK3RodXJzZGF5XGIpL2ksL14oPzp3ZWVrZGF5XHMrZnJpZGF5XGIpL2ksL14oPzp3ZWVrZGF5XHMrc2F0dXJkYXlcYikvaSwvXig/OndlZWtkYXlccytzdW5kYXlcYikvaSwvXig/OlxkXGRcZFxkLVxkXGQtXGRcZFxiKS9pLC9eKD86dGl0bGVcc1teXG5dKykvaSwvXig/OmFjY0Rlc2NyaXB0aW9uXHNbXiNcbjtdKykvaSwvXig/OnNlY3Rpb25cc1teXG5dKykvaSwvXig/OlteOlxuXSspL2ksL14oPzo6W14jXG47XSspL2ksL14oPzo6KS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e2FjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOls2LDddLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbNF0saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOlsyXSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrYXJnczp7cnVsZXM6WzIxLDIyXSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrbmFtZTp7cnVsZXM6WzE4LDE5LDIwXSxpbmNsdXNpdmU6ITF9LGhyZWY6e3J1bGVzOlsxNSwxNl0saW5jbHVzaXZlOiExfSxjbGljazp7cnVsZXM6WzI0LDI1XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMyw1LDgsOSwxMCwxMSwxMiwxMywxNCwxNywyMywyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MF0saW5jbHVzaXZlOiEwfX19O3JldHVybiBXfSgpO2RlLmxleGVyPVg7ZnVuY3Rpb24gZ2UoKXt0aGlzLnl5PXt9fXJldHVybiBnZS5wcm90b3R5cGU9ZGUsZGUuUGFyc2VyPWdlLG5ldyBnZX0oKTtZbWUucGFyc2VyPVltZTtjb25zdCBfdG49WW1lO3ZhciBYVWU9e2V4cG9ydHM6e319OyhmdW5jdGlvbihpLHMpeyhmdW5jdGlvbih1LGQpe2kuZXhwb3J0cz1kKCl9KShBZyxmdW5jdGlvbigpe3ZhciB1PSJkYXkiO3JldHVybiBmdW5jdGlvbihkLHAsdil7dmFyIGI9ZnVuY3Rpb24oXyl7cmV0dXJuIF8uYWRkKDQtXy5pc29XZWVrZGF5KCksdSl9LHk9cC5wcm90b3R5cGU7eS5pc29XZWVrWWVhcj1mdW5jdGlvbigpe3JldHVybiBiKHRoaXMpLnllYXIoKX0seS5pc29XZWVrPWZ1bmN0aW9uKF8pe2lmKCF0aGlzLiR1dGlscygpLnUoXykpcmV0dXJuIHRoaXMuYWRkKDcqKF8tdGhpcy5pc29XZWVrKCkpLHUpO3ZhciBBLFAsUixGLGo9Yih0aGlzKSxLPShBPXRoaXMuaXNvV2Vla1llYXIoKSxQPXRoaXMuJHUsUj0oUD92LnV0Yzp2KSgpLnllYXIoQSkuc3RhcnRPZigieWVhciIpLEY9NC1SLmlzb1dlZWtkYXkoKSxSLmlzb1dlZWtkYXkoKT40JiYoRis9NyksUi5hZGQoRix1KSk7cmV0dXJuIGouZGlmZihLLCJ3ZWVrIikrMX0seS5pc29XZWVrZGF5PWZ1bmN0aW9uKF8pe3JldHVybiB0aGlzLiR1dGlscygpLnUoXyk/dGhpcy5kYXkoKXx8Nzp0aGlzLmRheSh0aGlzLmRheSgpJTc/XzpfLTcpfTt2YXIgVD15LnN0YXJ0T2Y7eS5zdGFydE9mPWZ1bmN0aW9uKF8sQSl7dmFyIFA9dGhpcy4kdXRpbHMoKSxSPSEhUC51KEEpfHxBO3JldHVybiBQLnAoXyk9PT0iaXNvd2VlayI/Uj90aGlzLmRhdGUodGhpcy5kYXRlKCktKHRoaXMuaXNvV2Vla2RheSgpLTEpKS5zdGFydE9mKCJkYXkiKTp0aGlzLmRhdGUodGhpcy5kYXRlKCktMS0odGhpcy5pc29XZWVrZGF5KCktMSkrNykuZW5kT2YoImRheSIpOlQuYmluZCh0aGlzKShfLEEpfX19KX0pKFhVZSk7dmFyIEF0bj1YVWUuZXhwb3J0cztjb25zdCBMdG49aEMoQXRuKTt2YXIgUVVlPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24oaSxzKXsoZnVuY3Rpb24odSxkKXtpLmV4cG9ydHM9ZCgpfSkoQWcsZnVuY3Rpb24oKXt2YXIgdT17TFRTOiJoOm1tOnNzIEEiLExUOiJoOm1tIEEiLEw6Ik1NL0REL1lZWVkiLExMOiJNTU1NIEQsIFlZWVkiLExMTDoiTU1NTSBELCBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQSJ9LGQ9LyhcW1teW10qXF0pfChbLV86Ly4sKClcc10rKXwoQXxhfFlZWVl8WVk/fE1NP00/TT98RG98REQ/fGhoP3xISD98bW0/fHNzP3xTezEsM318enxaWj8pL2cscD0vXGRcZC8sdj0vXGRcZD8vLGI9L1xkKlteLV86LywoKVxzXGRdKy8seT17fSxUPWZ1bmN0aW9uKEspe3JldHVybihLPStLKSsoSz42OD8xOTAwOjJlMyl9LF89ZnVuY3Rpb24oSyl7cmV0dXJuIGZ1bmN0aW9uKGVlKXt0aGlzW0tdPStlZX19LEE9Wy9bKy1dXGRcZDo/KFxkXGQpP3xaLyxmdW5jdGlvbihLKXsodGhpcy56b25lfHwodGhpcy56b25lPXt9KSkub2Zmc2V0PWZ1bmN0aW9uKGVlKXtpZighZWV8fGVlPT09IloiKXJldHVybiAwO3ZhciBpZT1lZS5tYXRjaCgvKFsrLV18XGRcZCkvZyksb2U9NjAqaWVbMV0rKCtpZVsyXXx8MCk7cmV0dXJuIG9lPT09MD8wOmllWzBdPT09IisiPy1vZTpvZX0oSyl9XSxQPWZ1bmN0aW9uKEspe3ZhciBlZT15W0tdO3JldHVybiBlZSYmKGVlLmluZGV4T2Y/ZWU6ZWUucy5jb25jYXQoZWUuZikpfSxSPWZ1bmN0aW9uKEssZWUpe3ZhciBpZSxvZT15Lm1lcmlkaWVtO2lmKG9lKXtmb3IodmFyIHBlPTE7cGU8PTI0O3BlKz0xKWlmKEsuaW5kZXhPZihvZShwZSwwLGVlKSk+LTEpe2llPXBlPjEyO2JyZWFrfX1lbHNlIGllPUs9PT0oZWU/InBtIjoiUE0iKTtyZXR1cm4gaWV9LEY9e0E6W2IsZnVuY3Rpb24oSyl7dGhpcy5hZnRlcm5vb249UihLLCExKX1dLGE6W2IsZnVuY3Rpb24oSyl7dGhpcy5hZnRlcm5vb249UihLLCEwKX1dLFM6Wy9cZC8sZnVuY3Rpb24oSyl7dGhpcy5taWxsaXNlY29uZHM9MTAwKitLfV0sU1M6W3AsZnVuY3Rpb24oSyl7dGhpcy5taWxsaXNlY29uZHM9MTAqK0t9XSxTU1M6Wy9cZHszfS8sZnVuY3Rpb24oSyl7dGhpcy5taWxsaXNlY29uZHM9K0t9XSxzOlt2LF8oInNlY29uZHMiKV0sc3M6W3YsXygic2Vjb25kcyIpXSxtOlt2LF8oIm1pbnV0ZXMiKV0sbW06W3YsXygibWludXRlcyIpXSxIOlt2LF8oImhvdXJzIildLGg6W3YsXygiaG91cnMiKV0sSEg6W3YsXygiaG91cnMiKV0saGg6W3YsXygiaG91cnMiKV0sRDpbdixfKCJkYXkiKV0sREQ6W3AsXygiZGF5IildLERvOltiLGZ1bmN0aW9uKEspe3ZhciBlZT15Lm9yZGluYWwsaWU9Sy5tYXRjaCgvXGQrLyk7aWYodGhpcy5kYXk9aWVbMF0sZWUpZm9yKHZhciBvZT0xO29lPD0zMTtvZSs9MSllZShvZSkucmVwbGFjZSgvXFt8XF0vZywiIik9PT1LJiYodGhpcy5kYXk9b2UpfV0sTTpbdixfKCJtb250aCIpXSxNTTpbcCxfKCJtb250aCIpXSxNTU06W2IsZnVuY3Rpb24oSyl7dmFyIGVlPVAoIm1vbnRocyIpLGllPShQKCJtb250aHNTaG9ydCIpfHxlZS5tYXAoZnVuY3Rpb24ob2Upe3JldHVybiBvZS5zbGljZSgwLDMpfSkpLmluZGV4T2YoSykrMTtpZihpZTwxKXRocm93IG5ldyBFcnJvcjt0aGlzLm1vbnRoPWllJTEyfHxpZX1dLE1NTU06W2IsZnVuY3Rpb24oSyl7dmFyIGVlPVAoIm1vbnRocyIpLmluZGV4T2YoSykrMTtpZihlZTwxKXRocm93IG5ldyBFcnJvcjt0aGlzLm1vbnRoPWVlJTEyfHxlZX1dLFk6Wy9bKy1dP1xkKy8sXygieWVhciIpXSxZWTpbcCxmdW5jdGlvbihLKXt0aGlzLnllYXI9VChLKX1dLFlZWVk6Wy9cZHs0fS8sXygieWVhciIpXSxaOkEsWlo6QX07ZnVuY3Rpb24gaihLKXt2YXIgZWUsaWU7ZWU9SyxpZT15JiZ5LmZvcm1hdHM7Zm9yKHZhciBvZT0oSz1lZS5yZXBsYWNlKC8oXFtbXlxdXStdKXwoTFRTP3xsezEsNH18THsxLDR9KS9nLGZ1bmN0aW9uKFgsZ2UsVyl7dmFyIHhlPVcmJlcudG9VcHBlckNhc2UoKTtyZXR1cm4gZ2V8fGllW1ddfHx1W1ddfHxpZVt4ZV0ucmVwbGFjZSgvKFxbW15cXV0rXSl8KE1NTU18TU18RER8ZGRkZCkvZyxmdW5jdGlvbihVLEZlLFBlKXtyZXR1cm4gRmV8fFBlLnNsaWNlKDEpfSl9KSkubWF0Y2goZCkscGU9b2UubGVuZ3RoLGJlPTA7YmU8cGU7YmUrPTEpe3ZhciBhZT1vZVtiZV0sbmU9RlthZV0sc2U9bmUmJm5lWzBdLGRlPW5lJiZuZVsxXTtvZVtiZV09ZGU/e3JlZ2V4OnNlLHBhcnNlcjpkZX06YWUucmVwbGFjZSgvXlxbfFxdJC9nLCIiKX1yZXR1cm4gZnVuY3Rpb24oWCl7Zm9yKHZhciBnZT17fSxXPTAseGU9MDtXPHBlO1crPTEpe3ZhciBVPW9lW1ddO2lmKHR5cGVvZiBVPT0ic3RyaW5nIil4ZSs9VS5sZW5ndGg7ZWxzZXt2YXIgRmU9VS5yZWdleCxQZT1VLnBhcnNlcixqZT1YLnNsaWNlKHhlKSxJZT1GZS5leGVjKGplKVswXTtQZS5jYWxsKGdlLEllKSxYPVgucmVwbGFjZShJZSwiIil9fXJldHVybiBmdW5jdGlvbihTZSl7dmFyIENlPVNlLmFmdGVybm9vbjtpZihDZSE9PXZvaWQgMCl7dmFyIGtlPVNlLmhvdXJzO0NlP2tlPDEyJiYoU2UuaG91cnMrPTEyKTprZT09PTEyJiYoU2UuaG91cnM9MCksZGVsZXRlIFNlLmFmdGVybm9vbn19KGdlKSxnZX19cmV0dXJuIGZ1bmN0aW9uKEssZWUsaWUpe2llLnAuY3VzdG9tUGFyc2VGb3JtYXQ9ITAsSyYmSy5wYXJzZVR3b0RpZ2l0WWVhciYmKFQ9Sy5wYXJzZVR3b0RpZ2l0WWVhcik7dmFyIG9lPWVlLnByb3RvdHlwZSxwZT1vZS5wYXJzZTtvZS5wYXJzZT1mdW5jdGlvbihiZSl7dmFyIGFlPWJlLmRhdGUsbmU9YmUudXRjLHNlPWJlLmFyZ3M7dGhpcy4kdT1uZTt2YXIgZGU9c2VbMV07aWYodHlwZW9mIGRlPT0ic3RyaW5nIil7dmFyIFg9c2VbMl09PT0hMCxnZT1zZVszXT09PSEwLFc9WHx8Z2UseGU9c2VbMl07Z2UmJih4ZT1zZVsyXSkseT10aGlzLiRsb2NhbGUoKSwhWCYmeGUmJih5PWllLkxzW3hlXSksdGhpcy4kZD1mdW5jdGlvbihqZSxJZSxTZSl7dHJ5e2lmKFsieCIsIlgiXS5pbmRleE9mKEllKT4tMSlyZXR1cm4gbmV3IERhdGUoKEllPT09IlgiPzFlMzoxKSpqZSk7dmFyIENlPWooSWUpKGplKSxrZT1DZS55ZWFyLEtlPUNlLm1vbnRoLEZ0PUNlLmRheSxOZT1DZS5ob3Vycyxnbj1DZS5taW51dGVzLF90PUNlLnNlY29uZHMsRXQ9Q2UubWlsbGlzZWNvbmRzLEd0PUNlLnpvbmUsbG49bmV3IERhdGUseHQ9RnR8fChrZXx8S2U/MTpsbi5nZXREYXRlKCkpLFB0PWtlfHxsbi5nZXRGdWxsWWVhcigpLFFlPTA7a2UmJiFLZXx8KFFlPUtlPjA/S2UtMTpsbi5nZXRNb250aCgpKTt2YXIgRHQ9TmV8fDAsa3Q9Z258fDAsT249X3R8fDAsaHQ9RXR8fDA7cmV0dXJuIEd0P25ldyBEYXRlKERhdGUuVVRDKFB0LFFlLHh0LER0LGt0LE9uLGh0KzYwKkd0Lm9mZnNldCoxZTMpKTpTZT9uZXcgRGF0ZShEYXRlLlVUQyhQdCxRZSx4dCxEdCxrdCxPbixodCkpOm5ldyBEYXRlKFB0LFFlLHh0LER0LGt0LE9uLGh0KX1jYXRjaHtyZXR1cm4gbmV3IERhdGUoIiIpfX0oYWUsZGUsbmUpLHRoaXMuaW5pdCgpLHhlJiZ4ZSE9PSEwJiYodGhpcy4kTD10aGlzLmxvY2FsZSh4ZSkuJEwpLFcmJmFlIT10aGlzLmZvcm1hdChkZSkmJih0aGlzLiRkPW5ldyBEYXRlKCIiKSkseT17fX1lbHNlIGlmKGRlIGluc3RhbmNlb2YgQXJyYXkpZm9yKHZhciBVPWRlLmxlbmd0aCxGZT0xO0ZlPD1VO0ZlKz0xKXtzZVsxXT1kZVtGZS0xXTt2YXIgUGU9aWUuYXBwbHkodGhpcyxzZSk7aWYoUGUuaXNWYWxpZCgpKXt0aGlzLiRkPVBlLiRkLHRoaXMuJEw9UGUuJEwsdGhpcy5pbml0KCk7YnJlYWt9RmU9PT1VJiYodGhpcy4kZD1uZXcgRGF0ZSgiIikpfWVsc2UgcGUuY2FsbCh0aGlzLGJlKX19fSl9KShRVWUpO3ZhciBNdG49UVVlLmV4cG9ydHM7Y29uc3QgRHRuPWhDKE10bik7dmFyIEpVZT17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGkscyl7KGZ1bmN0aW9uKHUsZCl7aS5leHBvcnRzPWQoKX0pKEFnLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHUsZCl7dmFyIHA9ZC5wcm90b3R5cGUsdj1wLmZvcm1hdDtwLmZvcm1hdD1mdW5jdGlvbihiKXt2YXIgeT10aGlzLFQ9dGhpcy4kbG9jYWxlKCk7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiB2LmJpbmQodGhpcykoYik7dmFyIF89dGhpcy4kdXRpbHMoKSxBPShifHwiWVlZWS1NTS1ERFRISDptbTpzc1oiKS5yZXBsYWNlKC9cWyhbXlxdXSspXXxRfHdvfHd3fHd8V1d8V3x6enp8enxnZ2dnfEdHR0d8RG98WHx4fGt7MSwyfXxTL2csZnVuY3Rpb24oUCl7c3dpdGNoKFApe2Nhc2UiUSI6cmV0dXJuIE1hdGguY2VpbCgoeS4kTSsxKS8zKTtjYXNlIkRvIjpyZXR1cm4gVC5vcmRpbmFsKHkuJEQpO2Nhc2UiZ2dnZyI6cmV0dXJuIHkud2Vla1llYXIoKTtjYXNlIkdHR0ciOnJldHVybiB5Lmlzb1dlZWtZZWFyKCk7Y2FzZSJ3byI6cmV0dXJuIFQub3JkaW5hbCh5LndlZWsoKSwiVyIpO2Nhc2UidyI6Y2FzZSJ3dyI6cmV0dXJuIF8ucyh5LndlZWsoKSxQPT09InciPzE6MiwiMCIpO2Nhc2UiVyI6Y2FzZSJXVyI6cmV0dXJuIF8ucyh5Lmlzb1dlZWsoKSxQPT09IlciPzE6MiwiMCIpO2Nhc2UiayI6Y2FzZSJrayI6cmV0dXJuIF8ucyhTdHJpbmcoeS4kSD09PTA/MjQ6eS4kSCksUD09PSJrIj8xOjIsIjAiKTtjYXNlIlgiOnJldHVybiBNYXRoLmZsb29yKHkuJGQuZ2V0VGltZSgpLzFlMyk7Y2FzZSJ4IjpyZXR1cm4geS4kZC5nZXRUaW1lKCk7Y2FzZSJ6IjpyZXR1cm4iWyIreS5vZmZzZXROYW1lKCkrIl0iO2Nhc2Uienp6IjpyZXR1cm4iWyIreS5vZmZzZXROYW1lKCJsb25nIikrIl0iO2RlZmF1bHQ6cmV0dXJuIFB9fSk7cmV0dXJuIHYuYmluZCh0aGlzKShBKX19fSl9KShKVWUpO3ZhciBJdG49SlVlLmV4cG9ydHM7Y29uc3QgT3RuPWhDKEl0bik7TGcuZXh0ZW5kKEx0biksTGcuZXh0ZW5kKER0biksTGcuZXh0ZW5kKE90bik7bGV0IGk1PSIiLFhtZT0iIixRbWUsSm1lPSIiLEZSPVtdLFJSPVtdLFptZT17fSxldmU9W10sdUo9W10sR0Q9IiIsdHZlPSIiO2NvbnN0IFpVZT1bImFjdGl2ZSIsImRvbmUiLCJjcml0IiwibWlsZXN0b25lIl07bGV0IG52ZT1bXSxqUj0hMSxydmU9ITEsaXZlPSJzdW5kYXkiLHN2ZT0wO2NvbnN0IE50bj1mdW5jdGlvbigpe2V2ZT1bXSx1Sj1bXSxHRD0iIixudmU9W10sbEo9MCxvdmU9dm9pZCAwLGhKPXZvaWQgMCxtMT1bXSxpNT0iIixYbWU9IiIsdHZlPSIiLFFtZT12b2lkIDAsSm1lPSIiLEZSPVtdLFJSPVtdLGpSPSExLHJ2ZT0hMSxzdmU9MCxabWU9e30sUGcoKSxpdmU9InN1bmRheSJ9LFB0bj1mdW5jdGlvbihpKXtYbWU9aX0sQnRuPWZ1bmN0aW9uKCl7cmV0dXJuIFhtZX0sRnRuPWZ1bmN0aW9uKGkpe1FtZT1pfSxSdG49ZnVuY3Rpb24oKXtyZXR1cm4gUW1lfSxqdG49ZnVuY3Rpb24oaSl7Sm1lPWl9LCR0bj1mdW5jdGlvbigpe3JldHVybiBKbWV9LHp0bj1mdW5jdGlvbihpKXtpNT1pfSxxdG49ZnVuY3Rpb24oKXtqUj0hMH0sSHRuPWZ1bmN0aW9uKCl7cmV0dXJuIGpSfSxWdG49ZnVuY3Rpb24oKXtydmU9ITB9LFV0bj1mdW5jdGlvbigpe3JldHVybiBydmV9LEd0bj1mdW5jdGlvbihpKXt0dmU9aX0sS3RuPWZ1bmN0aW9uKCl7cmV0dXJuIHR2ZX0sV3RuPWZ1bmN0aW9uKCl7cmV0dXJuIGk1fSxZdG49ZnVuY3Rpb24oaSl7RlI9aS50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXHMsXSsvKX0sWHRuPWZ1bmN0aW9uKCl7cmV0dXJuIEZSfSxRdG49ZnVuY3Rpb24oaSl7UlI9aS50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXHMsXSsvKX0sSnRuPWZ1bmN0aW9uKCl7cmV0dXJuIFJSfSxadG49ZnVuY3Rpb24oKXtyZXR1cm4gWm1lfSxlbm49ZnVuY3Rpb24oaSl7R0Q9aSxldmUucHVzaChpKX0sdG5uPWZ1bmN0aW9uKCl7cmV0dXJuIGV2ZX0sbm5uPWZ1bmN0aW9uKCl7bGV0IGk9c0dlKCk7Y29uc3Qgcz0xMDtsZXQgdT0wO2Zvcig7IWkmJnU8czspaT1zR2UoKSx1Kys7cmV0dXJuIHVKPW0xLHVKfSxlR2U9ZnVuY3Rpb24oaSxzLHUsZCl7cmV0dXJuIGQuaW5jbHVkZXMoaS5mb3JtYXQocy50cmltKCkpKT8hMTppLmlzb1dlZWtkYXkoKT49NiYmdS5pbmNsdWRlcygid2Vla2VuZHMiKXx8dS5pbmNsdWRlcyhpLmZvcm1hdCgiZGRkZCIpLnRvTG93ZXJDYXNlKCkpPyEwOnUuaW5jbHVkZXMoaS5mb3JtYXQocy50cmltKCkpKX0scm5uPWZ1bmN0aW9uKGkpe2l2ZT1pfSxpbm49ZnVuY3Rpb24oKXtyZXR1cm4gaXZlfSx0R2U9ZnVuY3Rpb24oaSxzLHUsZCl7aWYoIXUubGVuZ3RofHxpLm1hbnVhbEVuZFRpbWUpcmV0dXJuO2xldCBwO2kuc3RhcnRUaW1lIGluc3RhbmNlb2YgRGF0ZT9wPUxnKGkuc3RhcnRUaW1lKTpwPUxnKGkuc3RhcnRUaW1lLHMsITApLHA9cC5hZGQoMSwiZCIpO2xldCB2O2kuZW5kVGltZSBpbnN0YW5jZW9mIERhdGU/dj1MZyhpLmVuZFRpbWUpOnY9TGcoaS5lbmRUaW1lLHMsITApO2NvbnN0W2IseV09c25uKHAsdixzLHUsZCk7aS5lbmRUaW1lPWIudG9EYXRlKCksaS5yZW5kZXJFbmRUaW1lPXl9LHNubj1mdW5jdGlvbihpLHMsdSxkLHApe2xldCB2PSExLGI9bnVsbDtmb3IoO2k8PXM7KXZ8fChiPXMudG9EYXRlKCkpLHY9ZUdlKGksdSxkLHApLHYmJihzPXMuYWRkKDEsImQiKSksaT1pLmFkZCgxLCJkIik7cmV0dXJuW3MsYl19LGF2ZT1mdW5jdGlvbihpLHMsdSl7dT11LnRyaW0oKTtjb25zdCBwPS9eYWZ0ZXJccysoPzxpZHM+W1xkXHctIF0rKS8uZXhlYyh1KTtpZihwIT09bnVsbCl7bGV0IGI9bnVsbDtmb3IoY29uc3QgVCBvZiBwLmdyb3Vwcy5pZHMuc3BsaXQoIiAiKSl7bGV0IF89UUMoVCk7XyE9PXZvaWQgMCYmKCFifHxfLmVuZFRpbWU+Yi5lbmRUaW1lKSYmKGI9Xyl9aWYoYilyZXR1cm4gYi5lbmRUaW1lO2NvbnN0IHk9bmV3IERhdGU7cmV0dXJuIHkuc2V0SG91cnMoMCwwLDAsMCkseX1sZXQgdj1MZyh1LHMudHJpbSgpLCEwKTtpZih2LmlzVmFsaWQoKSlyZXR1cm4gdi50b0RhdGUoKTt7WGUuZGVidWcoIkludmFsaWQgZGF0ZToiK3UpLFhlLmRlYnVnKCJXaXRoIGRhdGUgZm9ybWF0OiIrcy50cmltKCkpO2NvbnN0IGI9bmV3IERhdGUodSk7aWYoYj09PXZvaWQgMHx8aXNOYU4oYi5nZXRUaW1lKCkpfHxiLmdldEZ1bGxZZWFyKCk8LTFlNHx8Yi5nZXRGdWxsWWVhcigpPjFlNCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZGF0ZToiK3UpO3JldHVybiBifX0sbkdlPWZ1bmN0aW9uKGkpe2NvbnN0IHM9L14oXGQrKD86XC5cZCspPykoW01kaG1zd3ldfG1zKSQvLmV4ZWMoaS50cmltKCkpO3JldHVybiBzIT09bnVsbD9bTnVtYmVyLnBhcnNlRmxvYXQoc1sxXSksc1syXV06W05hTiwibXMiXX0sckdlPWZ1bmN0aW9uKGkscyx1LGQ9ITEpe3U9dS50cmltKCk7Y29uc3Qgdj0vXnVudGlsXHMrKD88aWRzPltcZFx3LSBdKykvLmV4ZWModSk7aWYodiE9PW51bGwpe2xldCBBPW51bGw7Zm9yKGNvbnN0IFIgb2Ygdi5ncm91cHMuaWRzLnNwbGl0KCIgIikpe2xldCBGPVFDKFIpO0YhPT12b2lkIDAmJighQXx8Ri5zdGFydFRpbWU8QS5zdGFydFRpbWUpJiYoQT1GKX1pZihBKXJldHVybiBBLnN0YXJ0VGltZTtjb25zdCBQPW5ldyBEYXRlO3JldHVybiBQLnNldEhvdXJzKDAsMCwwLDApLFB9bGV0IGI9TGcodSxzLnRyaW0oKSwhMCk7aWYoYi5pc1ZhbGlkKCkpcmV0dXJuIGQmJihiPWIuYWRkKDEsImQiKSksYi50b0RhdGUoKTtsZXQgeT1MZyhpKTtjb25zdFtULF9dPW5HZSh1KTtpZighTnVtYmVyLmlzTmFOKFQpKXtjb25zdCBBPXkuYWRkKFQsXyk7QS5pc1ZhbGlkKCkmJih5PUEpfXJldHVybiB5LnRvRGF0ZSgpfTtsZXQgbEo9MDtjb25zdCBLRD1mdW5jdGlvbihpKXtyZXR1cm4gaT09PXZvaWQgMD8obEo9bEorMSwidGFzayIrbEopOml9LGFubj1mdW5jdGlvbihpLHMpe2xldCB1O3Muc3Vic3RyKDAsMSk9PT0iOiI/dT1zLnN1YnN0cigxLHMubGVuZ3RoKTp1PXM7Y29uc3QgZD11LnNwbGl0KCIsIikscD17fTtjR2UoZCxwLFpVZSk7Zm9yKGxldCBiPTA7YjxkLmxlbmd0aDtiKyspZFtiXT1kW2JdLnRyaW0oKTtsZXQgdj0iIjtzd2l0Y2goZC5sZW5ndGgpe2Nhc2UgMTpwLmlkPUtEKCkscC5zdGFydFRpbWU9aS5lbmRUaW1lLHY9ZFswXTticmVhaztjYXNlIDI6cC5pZD1LRCgpLHAuc3RhcnRUaW1lPWF2ZSh2b2lkIDAsaTUsZFswXSksdj1kWzFdO2JyZWFrO2Nhc2UgMzpwLmlkPUtEKGRbMF0pLHAuc3RhcnRUaW1lPWF2ZSh2b2lkIDAsaTUsZFsxXSksdj1kWzJdO2JyZWFrfXJldHVybiB2JiYocC5lbmRUaW1lPXJHZShwLnN0YXJ0VGltZSxpNSx2LGpSKSxwLm1hbnVhbEVuZFRpbWU9TGcodiwiWVlZWS1NTS1ERCIsITApLmlzVmFsaWQoKSx0R2UocCxpNSxSUixGUikpLHB9LG9ubj1mdW5jdGlvbihpLHMpe2xldCB1O3Muc3Vic3RyKDAsMSk9PT0iOiI/dT1zLnN1YnN0cigxLHMubGVuZ3RoKTp1PXM7Y29uc3QgZD11LnNwbGl0KCIsIikscD17fTtjR2UoZCxwLFpVZSk7Zm9yKGxldCB2PTA7djxkLmxlbmd0aDt2KyspZFt2XT1kW3ZdLnRyaW0oKTtzd2l0Y2goZC5sZW5ndGgpe2Nhc2UgMTpwLmlkPUtEKCkscC5zdGFydFRpbWU9e3R5cGU6InByZXZUYXNrRW5kIixpZDppfSxwLmVuZFRpbWU9e2RhdGE6ZFswXX07YnJlYWs7Y2FzZSAyOnAuaWQ9S0QoKSxwLnN0YXJ0VGltZT17dHlwZToiZ2V0U3RhcnREYXRlIixzdGFydERhdGE6ZFswXX0scC5lbmRUaW1lPXtkYXRhOmRbMV19O2JyZWFrO2Nhc2UgMzpwLmlkPUtEKGRbMF0pLHAuc3RhcnRUaW1lPXt0eXBlOiJnZXRTdGFydERhdGUiLHN0YXJ0RGF0YTpkWzFdfSxwLmVuZFRpbWU9e2RhdGE6ZFsyXX07YnJlYWt9cmV0dXJuIHB9O2xldCBvdmUsaEosbTE9W107Y29uc3QgaUdlPXt9LGNubj1mdW5jdGlvbihpLHMpe2NvbnN0IHU9e3NlY3Rpb246R0QsdHlwZTpHRCxwcm9jZXNzZWQ6ITEsbWFudWFsRW5kVGltZTohMSxyZW5kZXJFbmRUaW1lOm51bGwscmF3OntkYXRhOnN9LHRhc2s6aSxjbGFzc2VzOltdfSxkPW9ubihoSixzKTt1LnJhdy5zdGFydFRpbWU9ZC5zdGFydFRpbWUsdS5yYXcuZW5kVGltZT1kLmVuZFRpbWUsdS5pZD1kLmlkLHUucHJldlRhc2tJZD1oSix1LmFjdGl2ZT1kLmFjdGl2ZSx1LmRvbmU9ZC5kb25lLHUuY3JpdD1kLmNyaXQsdS5taWxlc3RvbmU9ZC5taWxlc3RvbmUsdS5vcmRlcj1zdmUsc3ZlKys7Y29uc3QgcD1tMS5wdXNoKHUpO2hKPXUuaWQsaUdlW3UuaWRdPXAtMX0sUUM9ZnVuY3Rpb24oaSl7Y29uc3Qgcz1pR2VbaV07cmV0dXJuIG0xW3NdfSx1bm49ZnVuY3Rpb24oaSxzKXtjb25zdCB1PXtzZWN0aW9uOkdELHR5cGU6R0QsZGVzY3JpcHRpb246aSx0YXNrOmksY2xhc3NlczpbXX0sZD1hbm4ob3ZlLHMpO3Uuc3RhcnRUaW1lPWQuc3RhcnRUaW1lLHUuZW5kVGltZT1kLmVuZFRpbWUsdS5pZD1kLmlkLHUuYWN0aXZlPWQuYWN0aXZlLHUuZG9uZT1kLmRvbmUsdS5jcml0PWQuY3JpdCx1Lm1pbGVzdG9uZT1kLm1pbGVzdG9uZSxvdmU9dSx1Si5wdXNoKHUpfSxzR2U9ZnVuY3Rpb24oKXtjb25zdCBpPWZ1bmN0aW9uKHUpe2NvbnN0IGQ9bTFbdV07bGV0IHA9IiI7c3dpdGNoKG0xW3VdLnJhdy5zdGFydFRpbWUudHlwZSl7Y2FzZSJwcmV2VGFza0VuZCI6e2NvbnN0IHY9UUMoZC5wcmV2VGFza0lkKTtkLnN0YXJ0VGltZT12LmVuZFRpbWU7YnJlYWt9Y2FzZSJnZXRTdGFydERhdGUiOnA9YXZlKHZvaWQgMCxpNSxtMVt1XS5yYXcuc3RhcnRUaW1lLnN0YXJ0RGF0YSkscCYmKG0xW3VdLnN0YXJ0VGltZT1wKTticmVha31yZXR1cm4gbTFbdV0uc3RhcnRUaW1lJiYobTFbdV0uZW5kVGltZT1yR2UobTFbdV0uc3RhcnRUaW1lLGk1LG0xW3VdLnJhdy5lbmRUaW1lLmRhdGEsalIpLG0xW3VdLmVuZFRpbWUmJihtMVt1XS5wcm9jZXNzZWQ9ITAsbTFbdV0ubWFudWFsRW5kVGltZT1MZyhtMVt1XS5yYXcuZW5kVGltZS5kYXRhLCJZWVlZLU1NLUREIiwhMCkuaXNWYWxpZCgpLHRHZShtMVt1XSxpNSxSUixGUikpKSxtMVt1XS5wcm9jZXNzZWR9O2xldCBzPSEwO2Zvcihjb25zdFt1LGRdb2YgbTEuZW50cmllcygpKWkodSkscz1zJiZkLnByb2Nlc3NlZDtyZXR1cm4gc30sbG5uPWZ1bmN0aW9uKGkscyl7bGV0IHU9cztxdCgpLnNlY3VyaXR5TGV2ZWwhPT0ibG9vc2UiJiYodT1wOS5zYW5pdGl6ZVVybChzKSksaS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24oZCl7UUMoZCkhPT12b2lkIDAmJihvR2UoZCwoKT0+e3dpbmRvdy5vcGVuKHUsIl9zZWxmIil9KSxabWVbZF09dSl9KSxhR2UoaSwiY2xpY2thYmxlIil9LGFHZT1mdW5jdGlvbihpLHMpe2kuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe2xldCBkPVFDKHUpO2QhPT12b2lkIDAmJmQuY2xhc3Nlcy5wdXNoKHMpfSl9LGhubj1mdW5jdGlvbihpLHMsdSl7aWYocXQoKS5zZWN1cml0eUxldmVsIT09Imxvb3NlInx8cz09PXZvaWQgMClyZXR1cm47bGV0IGQ9W107aWYodHlwZW9mIHU9PSJzdHJpbmciKXtkPXUuc3BsaXQoLywoPz0oPzooPzpbXiJdKiIpezJ9KSpbXiJdKiQpLyk7Zm9yKGxldCB2PTA7djxkLmxlbmd0aDt2Kyspe2xldCBiPWRbdl0udHJpbSgpO2IuY2hhckF0KDApPT09JyInJiZiLmNoYXJBdChiLmxlbmd0aC0xKT09PSciJyYmKGI9Yi5zdWJzdHIoMSxiLmxlbmd0aC0yKSksZFt2XT1ifX1kLmxlbmd0aD09PTAmJmQucHVzaChpKSxRQyhpKSE9PXZvaWQgMCYmb0dlKGksKCk9PntBby5ydW5GdW5jKHMsLi4uZCl9KX0sb0dlPWZ1bmN0aW9uKGkscyl7bnZlLnB1c2goZnVuY3Rpb24oKXtjb25zdCB1PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD0iJHtpfSJdYCk7dSE9PW51bGwmJnUuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7cygpfSl9LGZ1bmN0aW9uKCl7Y29uc3QgdT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbaWQ9IiR7aX0tdGV4dCJdYCk7dSE9PW51bGwmJnUuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7cygpfSl9KX0sZm5uPXtnZXRDb25maWc6KCk9PnF0KCkuZ2FudHQsY2xlYXI6TnRuLHNldERhdGVGb3JtYXQ6enRuLGdldERhdGVGb3JtYXQ6V3RuLGVuYWJsZUluY2x1c2l2ZUVuZERhdGVzOnF0bixlbmREYXRlc0FyZUluY2x1c2l2ZTpIdG4sZW5hYmxlVG9wQXhpczpWdG4sdG9wQXhpc0VuYWJsZWQ6VXRuLHNldEF4aXNGb3JtYXQ6UHRuLGdldEF4aXNGb3JtYXQ6QnRuLHNldFRpY2tJbnRlcnZhbDpGdG4sZ2V0VGlja0ludGVydmFsOlJ0bixzZXRUb2RheU1hcmtlcjpqdG4sZ2V0VG9kYXlNYXJrZXI6JHRuLHNldEFjY1RpdGxlOkJnLGdldEFjY1RpdGxlOkNwLHNldERpYWdyYW1UaXRsZTpjbSxnZXREaWFncmFtVGl0bGU6QXAsc2V0RGlzcGxheU1vZGU6R3RuLGdldERpc3BsYXlNb2RlOkt0bixzZXRBY2NEZXNjcmlwdGlvbjpTcCxnZXRBY2NEZXNjcmlwdGlvbjpfcCxhZGRTZWN0aW9uOmVubixnZXRTZWN0aW9uczp0bm4sZ2V0VGFza3M6bm5uLGFkZFRhc2s6Y25uLGZpbmRUYXNrQnlJZDpRQyxhZGRUYXNrT3JnOnVubixzZXRJbmNsdWRlczpZdG4sZ2V0SW5jbHVkZXM6WHRuLHNldEV4Y2x1ZGVzOlF0bixnZXRFeGNsdWRlczpKdG4sc2V0Q2xpY2tFdmVudDpmdW5jdGlvbihpLHMsdSl7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24oZCl7aG5uKGQscyx1KX0pLGFHZShpLCJjbGlja2FibGUiKX0sc2V0TGluazpsbm4sZ2V0TGlua3M6WnRuLGJpbmRGdW5jdGlvbnM6ZnVuY3Rpb24oaSl7bnZlLmZvckVhY2goZnVuY3Rpb24ocyl7cyhpKX0pfSxwYXJzZUR1cmF0aW9uOm5HZSxpc0ludmFsaWREYXRlOmVHZSxzZXRXZWVrZGF5OnJubixnZXRXZWVrZGF5Omlubn07ZnVuY3Rpb24gY0dlKGkscyx1KXtsZXQgZD0hMDtmb3IoO2Q7KWQ9ITEsdS5mb3JFYWNoKGZ1bmN0aW9uKHApe2NvbnN0IHY9Il5cXHMqIitwKyJcXHMqJCIsYj1uZXcgUmVnRXhwKHYpO2lbMF0ubWF0Y2goYikmJihzW3BdPSEwLGkuc2hpZnQoMSksZD0hMCl9KX1jb25zdCBkbm49ZnVuY3Rpb24oKXtYZS5kZWJ1ZygiU29tZXRoaW5nIGlzIGNhbGxpbmcsIHNldENvbmYsIHJlbW92ZSB0aGUgY2FsbCIpfSx1R2U9e21vbmRheTpERix0dWVzZGF5OnhGZSx3ZWRuZXNkYXk6a0ZlLHRodXJzZGF5OnlDLGZyaWRheTpFRmUsc2F0dXJkYXk6VEZlLHN1bmRheTpNRn0sZ25uPShpLHMpPT57bGV0IHU9Wy4uLmldLm1hcCgoKT0+LTEvMCksZD1bLi4uaV0uc29ydCgodixiKT0+di5zdGFydFRpbWUtYi5zdGFydFRpbWV8fHYub3JkZXItYi5vcmRlcikscD0wO2Zvcihjb25zdCB2IG9mIGQpZm9yKGxldCBiPTA7Yjx1Lmxlbmd0aDtiKyspaWYodi5zdGFydFRpbWU+PXVbYl0pe3VbYl09di5lbmRUaW1lLHYub3JkZXI9YitzLGI+cCYmKHA9Yik7YnJlYWt9cmV0dXJuIHB9O2xldCBWNztjb25zdCBwbm49T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpfdG4sZGI6Zm5uLHJlbmRlcmVyOntzZXRDb25mOmRubixkcmF3OmZ1bmN0aW9uKGkscyx1LGQpe2NvbnN0IHA9cXQoKS5nYW50dCx2PXF0KCkuc2VjdXJpdHlMZXZlbDtsZXQgYjt2PT09InNhbmRib3giJiYoYj1JcigiI2kiK3MpKTtjb25zdCB5PUlyKHY9PT0ic2FuZGJveCI/Yi5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksVD12PT09InNhbmRib3giP2Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQsXz1ULmdldEVsZW1lbnRCeUlkKHMpO1Y3PV8ucGFyZW50RWxlbWVudC5vZmZzZXRXaWR0aCxWNz09PXZvaWQgMCYmKFY3PTEyMDApLHAudXNlV2lkdGghPT12b2lkIDAmJihWNz1wLnVzZVdpZHRoKTtjb25zdCBBPWQuZGIuZ2V0VGFza3MoKTtsZXQgUD1bXTtmb3IoY29uc3QgZGUgb2YgQSlQLnB1c2goZGUudHlwZSk7UD1zZShQKTtjb25zdCBSPXt9O2xldCBGPTIqcC50b3BQYWRkaW5nO2lmKGQuZGIuZ2V0RGlzcGxheU1vZGUoKT09PSJjb21wYWN0Inx8cC5kaXNwbGF5TW9kZT09PSJjb21wYWN0Iil7Y29uc3QgZGU9e307Zm9yKGNvbnN0IGdlIG9mIEEpZGVbZ2Uuc2VjdGlvbl09PT12b2lkIDA/ZGVbZ2Uuc2VjdGlvbl09W2dlXTpkZVtnZS5zZWN0aW9uXS5wdXNoKGdlKTtsZXQgWD0wO2Zvcihjb25zdCBnZSBvZiBPYmplY3Qua2V5cyhkZSkpe2NvbnN0IFc9Z25uKGRlW2dlXSxYKSsxO1grPVcsRis9VyoocC5iYXJIZWlnaHQrcC5iYXJHYXApLFJbZ2VdPVd9fWVsc2V7Ris9QS5sZW5ndGgqKHAuYmFySGVpZ2h0K3AuYmFyR2FwKTtmb3IoY29uc3QgZGUgb2YgUClSW2RlXT1BLmZpbHRlcihYPT5YLnR5cGU9PT1kZSkubGVuZ3RofV8uc2V0QXR0cmlidXRlKCJ2aWV3Qm94IiwiMCAwICIrVjcrIiAiK0YpO2NvbnN0IGo9eS5zZWxlY3QoYFtpZD0iJHtzfSJdYCksSz1mTnQoKS5kb21haW4oW1dBdChBLGZ1bmN0aW9uKGRlKXtyZXR1cm4gZGUuc3RhcnRUaW1lfSksS0F0KEEsZnVuY3Rpb24oZGUpe3JldHVybiBkZS5lbmRUaW1lfSldKS5yYW5nZVJvdW5kKFswLFY3LXAubGVmdFBhZGRpbmctcC5yaWdodFBhZGRpbmddKTtmdW5jdGlvbiBlZShkZSxYKXtjb25zdCBnZT1kZS5zdGFydFRpbWUsVz1YLnN0YXJ0VGltZTtsZXQgeGU9MDtyZXR1cm4gZ2U+Vz94ZT0xOmdlPFcmJih4ZT0tMSkseGV9QS5zb3J0KGVlKSxpZShBLFY3LEYpLE5nKGosRixWNyxwLnVzZU1heFdpZHRoKSxqLmFwcGVuZCgidGV4dCIpLnRleHQoZC5kYi5nZXREaWFncmFtVGl0bGUoKSkuYXR0cigieCIsVjcvMikuYXR0cigieSIscC50aXRsZVRvcE1hcmdpbikuYXR0cigiY2xhc3MiLCJ0aXRsZVRleHQiKTtmdW5jdGlvbiBpZShkZSxYLGdlKXtjb25zdCBXPXAuYmFySGVpZ2h0LHhlPVcrcC5iYXJHYXAsVT1wLnRvcFBhZGRpbmcsRmU9cC5sZWZ0UGFkZGluZyxQZT1zRCgpLmRvbWFpbihbMCxQLmxlbmd0aF0pLnJhbmdlKFsiIzAwQjlGQSIsIiNGOTUwMDIiXSkuaW50ZXJwb2xhdGUoYkR0KTtwZSh4ZSxVLEZlLFgsZ2UsZGUsZC5kYi5nZXRFeGNsdWRlcygpLGQuZGIuZ2V0SW5jbHVkZXMoKSksYmUoRmUsVSxYLGdlKSxvZShkZSx4ZSxVLEZlLFcsUGUsWCksYWUoeGUsVSksbmUoRmUsVSxYLGdlKX1mdW5jdGlvbiBvZShkZSxYLGdlLFcseGUsVSxGZSl7Y29uc3QgamU9Wy4uLm5ldyBTZXQoZGUubWFwKGtlPT5rZS5vcmRlcikpXS5tYXAoa2U9PmRlLmZpbmQoS2U9PktlLm9yZGVyPT09a2UpKTtqLmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoamUpLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsMCkuYXR0cigieSIsZnVuY3Rpb24oa2UsS2Upe3JldHVybiBLZT1rZS5vcmRlcixLZSpYK2dlLTJ9KS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24oKXtyZXR1cm4gRmUtcC5yaWdodFBhZGRpbmcvMn0pLmF0dHIoImhlaWdodCIsWCkuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGtlKXtmb3IoY29uc3RbS2UsRnRdb2YgUC5lbnRyaWVzKCkpaWYoa2UudHlwZT09PUZ0KXJldHVybiJzZWN0aW9uIHNlY3Rpb24iK0tlJXAubnVtYmVyU2VjdGlvblN0eWxlcztyZXR1cm4ic2VjdGlvbiBzZWN0aW9uMCJ9KTtjb25zdCBJZT1qLmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoZGUpLmVudGVyKCksU2U9ZC5kYi5nZXRMaW5rcygpO2lmKEllLmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIixmdW5jdGlvbihrZSl7cmV0dXJuIGtlLmlkfSkuYXR0cigicngiLDMpLmF0dHIoInJ5IiwzKS5hdHRyKCJ4IixmdW5jdGlvbihrZSl7cmV0dXJuIGtlLm1pbGVzdG9uZT9LKGtlLnN0YXJ0VGltZSkrVysuNSooSyhrZS5lbmRUaW1lKS1LKGtlLnN0YXJ0VGltZSkpLS41KnhlOksoa2Uuc3RhcnRUaW1lKStXfSkuYXR0cigieSIsZnVuY3Rpb24oa2UsS2Upe3JldHVybiBLZT1rZS5vcmRlcixLZSpYK2dlfSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKGtlKXtyZXR1cm4ga2UubWlsZXN0b25lP3hlOksoa2UucmVuZGVyRW5kVGltZXx8a2UuZW5kVGltZSktSyhrZS5zdGFydFRpbWUpfSkuYXR0cigiaGVpZ2h0Iix4ZSkuYXR0cigidHJhbnNmb3JtLW9yaWdpbiIsZnVuY3Rpb24oa2UsS2Upe3JldHVybiBLZT1rZS5vcmRlciwoSyhrZS5zdGFydFRpbWUpK1crLjUqKEsoa2UuZW5kVGltZSktSyhrZS5zdGFydFRpbWUpKSkudG9TdHJpbmcoKSsicHggIisoS2UqWCtnZSsuNSp4ZSkudG9TdHJpbmcoKSsicHgifSkuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGtlKXtjb25zdCBLZT0idGFzayI7bGV0IEZ0PSIiO2tlLmNsYXNzZXMubGVuZ3RoPjAmJihGdD1rZS5jbGFzc2VzLmpvaW4oIiAiKSk7bGV0IE5lPTA7Zm9yKGNvbnN0W190LEV0XW9mIFAuZW50cmllcygpKWtlLnR5cGU9PT1FdCYmKE5lPV90JXAubnVtYmVyU2VjdGlvblN0eWxlcyk7bGV0IGduPSIiO3JldHVybiBrZS5hY3RpdmU/a2UuY3JpdD9nbis9IiBhY3RpdmVDcml0Ijpnbj0iIGFjdGl2ZSI6a2UuZG9uZT9rZS5jcml0P2duPSIgZG9uZUNyaXQiOmduPSIgZG9uZSI6a2UuY3JpdCYmKGduKz0iIGNyaXQiKSxnbi5sZW5ndGg9PT0wJiYoZ249IiB0YXNrIiksa2UubWlsZXN0b25lJiYoZ249IiBtaWxlc3RvbmUgIitnbiksZ24rPU5lLGduKz0iICIrRnQsS2UrZ259KSxJZS5hcHBlbmQoInRleHQiKS5hdHRyKCJpZCIsZnVuY3Rpb24oa2Upe3JldHVybiBrZS5pZCsiLXRleHQifSkudGV4dChmdW5jdGlvbihrZSl7cmV0dXJuIGtlLnRhc2t9KS5hdHRyKCJmb250LXNpemUiLHAuZm9udFNpemUpLmF0dHIoIngiLGZ1bmN0aW9uKGtlKXtsZXQgS2U9SyhrZS5zdGFydFRpbWUpLEZ0PUsoa2UucmVuZGVyRW5kVGltZXx8a2UuZW5kVGltZSk7a2UubWlsZXN0b25lJiYoS2UrPS41KihLKGtlLmVuZFRpbWUpLUsoa2Uuc3RhcnRUaW1lKSktLjUqeGUpLGtlLm1pbGVzdG9uZSYmKEZ0PUtlK3hlKTtjb25zdCBOZT10aGlzLmdldEJCb3goKS53aWR0aDtyZXR1cm4gTmU+RnQtS2U/RnQrTmUrMS41KnAubGVmdFBhZGRpbmc+RmU/S2UrVy01OkZ0K1crNTooRnQtS2UpLzIrS2UrV30pLmF0dHIoInkiLGZ1bmN0aW9uKGtlLEtlKXtyZXR1cm4gS2U9a2Uub3JkZXIsS2UqWCtwLmJhckhlaWdodC8yKyhwLmZvbnRTaXplLzItMikrZ2V9KS5hdHRyKCJ0ZXh0LWhlaWdodCIseGUpLmF0dHIoImNsYXNzIixmdW5jdGlvbihrZSl7Y29uc3QgS2U9SyhrZS5zdGFydFRpbWUpO2xldCBGdD1LKGtlLmVuZFRpbWUpO2tlLm1pbGVzdG9uZSYmKEZ0PUtlK3hlKTtjb25zdCBOZT10aGlzLmdldEJCb3goKS53aWR0aDtsZXQgZ249IiI7a2UuY2xhc3Nlcy5sZW5ndGg+MCYmKGduPWtlLmNsYXNzZXMuam9pbigiICIpKTtsZXQgX3Q9MDtmb3IoY29uc3RbR3QsbG5db2YgUC5lbnRyaWVzKCkpa2UudHlwZT09PWxuJiYoX3Q9R3QlcC5udW1iZXJTZWN0aW9uU3R5bGVzKTtsZXQgRXQ9IiI7cmV0dXJuIGtlLmFjdGl2ZSYmKGtlLmNyaXQ/RXQ9ImFjdGl2ZUNyaXRUZXh0IitfdDpFdD0iYWN0aXZlVGV4dCIrX3QpLGtlLmRvbmU/a2UuY3JpdD9FdD1FdCsiIGRvbmVDcml0VGV4dCIrX3Q6RXQ9RXQrIiBkb25lVGV4dCIrX3Q6a2UuY3JpdCYmKEV0PUV0KyIgY3JpdFRleHQiK190KSxrZS5taWxlc3RvbmUmJihFdCs9IiBtaWxlc3RvbmVUZXh0IiksTmU+RnQtS2U/RnQrTmUrMS41KnAubGVmdFBhZGRpbmc+RmU/Z24rIiB0YXNrVGV4dE91dHNpZGVMZWZ0IHRhc2tUZXh0T3V0c2lkZSIrX3QrIiAiK0V0OmduKyIgdGFza1RleHRPdXRzaWRlUmlnaHQgdGFza1RleHRPdXRzaWRlIitfdCsiICIrRXQrIiB3aWR0aC0iK05lOmduKyIgdGFza1RleHQgdGFza1RleHQiK190KyIgIitFdCsiIHdpZHRoLSIrTmV9KSxxdCgpLnNlY3VyaXR5TGV2ZWw9PT0ic2FuZGJveCIpe2xldCBrZTtrZT1JcigiI2kiK3MpO2NvbnN0IEtlPWtlLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50O0llLmZpbHRlcihmdW5jdGlvbihGdCl7cmV0dXJuIFNlW0Z0LmlkXSE9PXZvaWQgMH0pLmVhY2goZnVuY3Rpb24oRnQpe3ZhciBOZT1LZS5xdWVyeVNlbGVjdG9yKCIjIitGdC5pZCksZ249S2UucXVlcnlTZWxlY3RvcigiIyIrRnQuaWQrIi10ZXh0Iik7Y29uc3QgX3Q9TmUucGFyZW50Tm9kZTt2YXIgRXQ9S2UuY3JlYXRlRWxlbWVudCgiYSIpO0V0LnNldEF0dHJpYnV0ZSgieGxpbms6aHJlZiIsU2VbRnQuaWRdKSxFdC5zZXRBdHRyaWJ1dGUoInRhcmdldCIsIl90b3AiKSxfdC5hcHBlbmRDaGlsZChFdCksRXQuYXBwZW5kQ2hpbGQoTmUpLEV0LmFwcGVuZENoaWxkKGduKX0pfX1mdW5jdGlvbiBwZShkZSxYLGdlLFcseGUsVSxGZSxQZSl7aWYoRmUubGVuZ3RoPT09MCYmUGUubGVuZ3RoPT09MClyZXR1cm47bGV0IGplLEllO2Zvcihjb25zdHtzdGFydFRpbWU6TmUsZW5kVGltZTpnbn1vZiBVKShqZT09PXZvaWQgMHx8TmU8amUpJiYoamU9TmUpLChJZT09PXZvaWQgMHx8Z24+SWUpJiYoSWU9Z24pO2lmKCFqZXx8IUllKXJldHVybjtpZihMZyhJZSkuZGlmZihMZyhqZSksInllYXIiKT41KXtYZS53YXJuKCJUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBtaW4gYW5kIG1heCB0aW1lIGlzIG1vcmUgdGhhbiA1IHllYXJzLiBUaGlzIHdpbGwgY2F1c2UgcGVyZm9ybWFuY2UgaXNzdWVzLiBTa2lwcGluZyBkcmF3aW5nIGV4Y2x1ZGUgZGF5cy4iKTtyZXR1cm59Y29uc3QgU2U9ZC5kYi5nZXREYXRlRm9ybWF0KCksQ2U9W107bGV0IGtlPW51bGwsS2U9TGcoamUpO2Zvcig7S2UudmFsdWVPZigpPD1JZTspZC5kYi5pc0ludmFsaWREYXRlKEtlLFNlLEZlLFBlKT9rZT9rZS5lbmQ9S2U6a2U9e3N0YXJ0OktlLGVuZDpLZX06a2UmJihDZS5wdXNoKGtlKSxrZT1udWxsKSxLZT1LZS5hZGQoMSwiZCIpO2ouYXBwZW5kKCJnIikuc2VsZWN0QWxsKCJyZWN0IikuZGF0YShDZSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJpZCIsZnVuY3Rpb24oTmUpe3JldHVybiJleGNsdWRlLSIrTmUuc3RhcnQuZm9ybWF0KCJZWVlZLU1NLUREIil9KS5hdHRyKCJ4IixmdW5jdGlvbihOZSl7cmV0dXJuIEsoTmUuc3RhcnQpK2dlfSkuYXR0cigieSIscC5ncmlkTGluZVN0YXJ0UGFkZGluZykuYXR0cigid2lkdGgiLGZ1bmN0aW9uKE5lKXtjb25zdCBnbj1OZS5lbmQuYWRkKDEsImRheSIpO3JldHVybiBLKGduKS1LKE5lLnN0YXJ0KX0pLmF0dHIoImhlaWdodCIseGUtWC1wLmdyaWRMaW5lU3RhcnRQYWRkaW5nKS5hdHRyKCJ0cmFuc2Zvcm0tb3JpZ2luIixmdW5jdGlvbihOZSxnbil7cmV0dXJuKEsoTmUuc3RhcnQpK2dlKy41KihLKE5lLmVuZCktSyhOZS5zdGFydCkpKS50b1N0cmluZygpKyJweCAiKyhnbipkZSsuNSp4ZSkudG9TdHJpbmcoKSsicHgifSkuYXR0cigiY2xhc3MiLCJleGNsdWRlLXJhbmdlIil9ZnVuY3Rpb24gYmUoZGUsWCxnZSxXKXtsZXQgeGU9ckx0KEspLnRpY2tTaXplKC1XK1grcC5ncmlkTGluZVN0YXJ0UGFkZGluZykudGlja0Zvcm1hdChzWChkLmRiLmdldEF4aXNGb3JtYXQoKXx8cC5heGlzRm9ybWF0fHwiJVktJW0tJWQiKSk7Y29uc3QgRmU9L14oWzEtOV1cZCopKG1pbGxpc2Vjb25kfHNlY29uZHxtaW51dGV8aG91cnxkYXl8d2Vla3xtb250aCkkLy5leGVjKGQuZGIuZ2V0VGlja0ludGVydmFsKCl8fHAudGlja0ludGVydmFsKTtpZihGZSE9PW51bGwpe2NvbnN0IFBlPUZlWzFdLGplPUZlWzJdLEllPWQuZGIuZ2V0V2Vla2RheSgpfHxwLndlZWtkYXk7c3dpdGNoKGplKXtjYXNlIm1pbGxpc2Vjb25kIjp4ZS50aWNrcyhhRC5ldmVyeShQZSkpO2JyZWFrO2Nhc2Uic2Vjb25kIjp4ZS50aWNrcyhiOS5ldmVyeShQZSkpO2JyZWFrO2Nhc2UibWludXRlIjp4ZS50aWNrcyhBRi5ldmVyeShQZSkpO2JyZWFrO2Nhc2UiaG91ciI6eGUudGlja3MoTEYuZXZlcnkoUGUpKTticmVhaztjYXNlImRheSI6eGUudGlja3ModkMuZXZlcnkoUGUpKTticmVhaztjYXNlIndlZWsiOnhlLnRpY2tzKHVHZVtJZV0uZXZlcnkoUGUpKTticmVhaztjYXNlIm1vbnRoIjp4ZS50aWNrcyhJRi5ldmVyeShQZSkpO2JyZWFrfX1pZihqLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZ3JpZCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2RlKyIsICIrKFctNTApKyIpIikuY2FsbCh4ZSkuc2VsZWN0QWxsKCJ0ZXh0Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZmlsbCIsIiMwMDAiKS5hdHRyKCJzdHJva2UiLCJub25lIikuYXR0cigiZm9udC1zaXplIiwxMCkuYXR0cigiZHkiLCIxZW0iKSxkLmRiLnRvcEF4aXNFbmFibGVkKCl8fHAudG9wQXhpcyl7bGV0IFBlPW5MdChLKS50aWNrU2l6ZSgtVytYK3AuZ3JpZExpbmVTdGFydFBhZGRpbmcpLnRpY2tGb3JtYXQoc1goZC5kYi5nZXRBeGlzRm9ybWF0KCl8fHAuYXhpc0Zvcm1hdHx8IiVZLSVtLSVkIikpO2lmKEZlIT09bnVsbCl7Y29uc3QgamU9RmVbMV0sSWU9RmVbMl0sU2U9ZC5kYi5nZXRXZWVrZGF5KCl8fHAud2Vla2RheTtzd2l0Y2goSWUpe2Nhc2UibWlsbGlzZWNvbmQiOlBlLnRpY2tzKGFELmV2ZXJ5KGplKSk7YnJlYWs7Y2FzZSJzZWNvbmQiOlBlLnRpY2tzKGI5LmV2ZXJ5KGplKSk7YnJlYWs7Y2FzZSJtaW51dGUiOlBlLnRpY2tzKEFGLmV2ZXJ5KGplKSk7YnJlYWs7Y2FzZSJob3VyIjpQZS50aWNrcyhMRi5ldmVyeShqZSkpO2JyZWFrO2Nhc2UiZGF5IjpQZS50aWNrcyh2Qy5ldmVyeShqZSkpO2JyZWFrO2Nhc2Uid2VlayI6UGUudGlja3ModUdlW1NlXS5ldmVyeShqZSkpO2JyZWFrO2Nhc2UibW9udGgiOlBlLnRpY2tzKElGLmV2ZXJ5KGplKSk7YnJlYWt9fWouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJncmlkIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZGUrIiwgIitYKyIpIikuY2FsbChQZSkuc2VsZWN0QWxsKCJ0ZXh0Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZmlsbCIsIiMwMDAiKS5hdHRyKCJzdHJva2UiLCJub25lIikuYXR0cigiZm9udC1zaXplIiwxMCl9fWZ1bmN0aW9uIGFlKGRlLFgpe2xldCBnZT0wO2NvbnN0IFc9T2JqZWN0LmtleXMoUikubWFwKHhlPT5beGUsUlt4ZV1dKTtqLmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgidGV4dCIpLmRhdGEoVykuZW50ZXIoKS5hcHBlbmQoZnVuY3Rpb24oeGUpe2NvbnN0IFU9eGVbMF0uc3BsaXQoY2kubGluZUJyZWFrUmVnZXgpLEZlPS0oVS5sZW5ndGgtMSkvMixQZT1ULmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7UGUuc2V0QXR0cmlidXRlKCJkeSIsRmUrImVtIik7Zm9yKGNvbnN0W2plLEllXW9mIFUuZW50cmllcygpKXtjb25zdCBTZT1ULmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO1NlLnNldEF0dHJpYnV0ZSgiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLFNlLnNldEF0dHJpYnV0ZSgieCIsIjEwIiksamU+MCYmU2Uuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLFNlLnRleHRDb250ZW50PUllLFBlLmFwcGVuZENoaWxkKFNlKX1yZXR1cm4gUGV9KS5hdHRyKCJ4IiwxMCkuYXR0cigieSIsZnVuY3Rpb24oeGUsVSl7aWYoVT4wKWZvcihsZXQgRmU9MDtGZTxVO0ZlKyspcmV0dXJuIGdlKz1XW1UtMV1bMV0seGVbMV0qZGUvMitnZSpkZStYO2Vsc2UgcmV0dXJuIHhlWzFdKmRlLzIrWH0pLmF0dHIoImZvbnQtc2l6ZSIscC5zZWN0aW9uRm9udFNpemUpLmF0dHIoImNsYXNzIixmdW5jdGlvbih4ZSl7Zm9yKGNvbnN0W1UsRmVdb2YgUC5lbnRyaWVzKCkpaWYoeGVbMF09PT1GZSlyZXR1cm4ic2VjdGlvblRpdGxlIHNlY3Rpb25UaXRsZSIrVSVwLm51bWJlclNlY3Rpb25TdHlsZXM7cmV0dXJuInNlY3Rpb25UaXRsZSJ9KX1mdW5jdGlvbiBuZShkZSxYLGdlLFcpe2NvbnN0IHhlPWQuZGIuZ2V0VG9kYXlNYXJrZXIoKTtpZih4ZT09PSJvZmYiKXJldHVybjtjb25zdCBVPWouYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0b2RheSIpLEZlPW5ldyBEYXRlLFBlPVUuYXBwZW5kKCJsaW5lIik7UGUuYXR0cigieDEiLEsoRmUpK2RlKS5hdHRyKCJ4MiIsSyhGZSkrZGUpLmF0dHIoInkxIixwLnRpdGxlVG9wTWFyZ2luKS5hdHRyKCJ5MiIsVy1wLnRpdGxlVG9wTWFyZ2luKS5hdHRyKCJjbGFzcyIsInRvZGF5IikseGUhPT0iIiYmUGUuYXR0cigic3R5bGUiLHhlLnJlcGxhY2UoLywvZywiOyIpKX1mdW5jdGlvbiBzZShkZSl7Y29uc3QgWD17fSxnZT1bXTtmb3IobGV0IFc9MCx4ZT1kZS5sZW5ndGg7Vzx4ZTsrK1cpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFgsZGVbV10pfHwoWFtkZVtXXV09ITAsZ2UucHVzaChkZVtXXSkpO3JldHVybiBnZX19fSxzdHlsZXM6aT0+YAogIC5tZXJtYWlkLW1haW4tZm9udCB7CiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSwgInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmKTsKICB9CgogIC5leGNsdWRlLXJhbmdlIHsKICAgIGZpbGw6ICR7aS5leGNsdWRlQmtnQ29sb3J9OwogIH0KCiAgLnNlY3Rpb24gewogICAgc3Ryb2tlOiBub25lOwogICAgb3BhY2l0eTogMC4yOwogIH0KCiAgLnNlY3Rpb24wIHsKICAgIGZpbGw6ICR7aS5zZWN0aW9uQmtnQ29sb3J9OwogIH0KCiAgLnNlY3Rpb24yIHsKICAgIGZpbGw6ICR7aS5zZWN0aW9uQmtnQ29sb3IyfTsKICB9CgogIC5zZWN0aW9uMSwKICAuc2VjdGlvbjMgewogICAgZmlsbDogJHtpLmFsdFNlY3Rpb25Ca2dDb2xvcn07CiAgICBvcGFjaXR5OiAwLjI7CiAgfQoKICAuc2VjdGlvblRpdGxlMCB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAuc2VjdGlvblRpdGxlMSB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAuc2VjdGlvblRpdGxlMiB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAuc2VjdGlvblRpdGxlMyB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAuc2VjdGlvblRpdGxlIHsKICAgIHRleHQtYW5jaG9yOiBzdGFydDsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5LCAidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYpOwogIH0KCgogIC8qIEdyaWQgYW5kIGF4aXMgKi8KCiAgLmdyaWQgLnRpY2sgewogICAgc3Ryb2tlOiAke2kuZ3JpZENvbG9yfTsKICAgIG9wYWNpdHk6IDAuODsKICAgIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlczsKICB9CgogIC5ncmlkIC50aWNrIHRleHQgewogICAgZm9udC1mYW1pbHk6ICR7aS5mb250RmFtaWx5fTsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogIH0KCiAgLmdyaWQgcGF0aCB7CiAgICBzdHJva2Utd2lkdGg6IDA7CiAgfQoKCiAgLyogVG9kYXkgbGluZSAqLwoKICAudG9kYXkgewogICAgZmlsbDogbm9uZTsKICAgIHN0cm9rZTogJHtpLnRvZGF5TGluZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMnB4OwogIH0KCgogIC8qIFRhc2sgc3R5bGluZyAqLwoKICAvKiBEZWZhdWx0IHRhc2sgKi8KCiAgLnRhc2sgewogICAgc3Ryb2tlLXdpZHRoOiAyOwogIH0KCiAgLnRhc2tUZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSwgInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmKTsKICB9CgogIC50YXNrVGV4dE91dHNpZGVSaWdodCB7CiAgICBmaWxsOiAke2kudGFza1RleHREYXJrQ29sb3J9OwogICAgdGV4dC1hbmNob3I6IHN0YXJ0OwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHksICJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZik7CiAgfQoKICAudGFza1RleHRPdXRzaWRlTGVmdCB7CiAgICBmaWxsOiAke2kudGFza1RleHREYXJrQ29sb3J9OwogICAgdGV4dC1hbmNob3I6IGVuZDsKICB9CgoKICAvKiBTcGVjaWFsIGNhc2UgY2xpY2thYmxlICovCgogIC50YXNrLmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgfQoKICAudGFza1RleHQuY2xpY2thYmxlIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZpbGw6ICR7aS50YXNrVGV4dENsaWNrYWJsZUNvbG9yfSAhaW1wb3J0YW50OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgfQoKICAudGFza1RleHRPdXRzaWRlTGVmdC5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZmlsbDogJHtpLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3J9ICFpbXBvcnRhbnQ7CiAgICBmb250LXdlaWdodDogYm9sZDsKICB9CgogIC50YXNrVGV4dE91dHNpZGVSaWdodC5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZmlsbDogJHtpLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3J9ICFpbXBvcnRhbnQ7CiAgICBmb250LXdlaWdodDogYm9sZDsKICB9CgoKICAvKiBTcGVjaWZpYyB0YXNrIHNldHRpbmdzIGZvciB0aGUgc2VjdGlvbnMqLwoKICAudGFza1RleHQwLAogIC50YXNrVGV4dDEsCiAgLnRhc2tUZXh0MiwKICAudGFza1RleHQzIHsKICAgIGZpbGw6ICR7aS50YXNrVGV4dENvbG9yfTsKICB9CgogIC50YXNrMCwKICAudGFzazEsCiAgLnRhc2syLAogIC50YXNrMyB7CiAgICBmaWxsOiAke2kudGFza0JrZ0NvbG9yfTsKICAgIHN0cm9rZTogJHtpLnRhc2tCb3JkZXJDb2xvcn07CiAgfQoKICAudGFza1RleHRPdXRzaWRlMCwKICAudGFza1RleHRPdXRzaWRlMgogIHsKICAgIGZpbGw6ICR7aS50YXNrVGV4dE91dHNpZGVDb2xvcn07CiAgfQoKICAudGFza1RleHRPdXRzaWRlMSwKICAudGFza1RleHRPdXRzaWRlMyB7CiAgICBmaWxsOiAke2kudGFza1RleHRPdXRzaWRlQ29sb3J9OwogIH0KCgogIC8qIEFjdGl2ZSB0YXNrICovCgogIC5hY3RpdmUwLAogIC5hY3RpdmUxLAogIC5hY3RpdmUyLAogIC5hY3RpdmUzIHsKICAgIGZpbGw6ICR7aS5hY3RpdmVUYXNrQmtnQ29sb3J9OwogICAgc3Ryb2tlOiAke2kuYWN0aXZlVGFza0JvcmRlckNvbG9yfTsKICB9CgogIC5hY3RpdmVUZXh0MCwKICAuYWN0aXZlVGV4dDEsCiAgLmFjdGl2ZVRleHQyLAogIC5hY3RpdmVUZXh0MyB7CiAgICBmaWxsOiAke2kudGFza1RleHREYXJrQ29sb3J9ICFpbXBvcnRhbnQ7CiAgfQoKCiAgLyogQ29tcGxldGVkIHRhc2sgKi8KCiAgLmRvbmUwLAogIC5kb25lMSwKICAuZG9uZTIsCiAgLmRvbmUzIHsKICAgIHN0cm9rZTogJHtpLmRvbmVUYXNrQm9yZGVyQ29sb3J9OwogICAgZmlsbDogJHtpLmRvbmVUYXNrQmtnQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyOwogIH0KCiAgLmRvbmVUZXh0MCwKICAuZG9uZVRleHQxLAogIC5kb25lVGV4dDIsCiAgLmRvbmVUZXh0MyB7CiAgICBmaWxsOiAke2kudGFza1RleHREYXJrQ29sb3J9ICFpbXBvcnRhbnQ7CiAgfQoKCiAgLyogVGFza3Mgb24gdGhlIGNyaXRpY2FsIGxpbmUgKi8KCiAgLmNyaXQwLAogIC5jcml0MSwKICAuY3JpdDIsCiAgLmNyaXQzIHsKICAgIHN0cm9rZTogJHtpLmNyaXRCb3JkZXJDb2xvcn07CiAgICBmaWxsOiAke2kuY3JpdEJrZ0NvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMjsKICB9CgogIC5hY3RpdmVDcml0MCwKICAuYWN0aXZlQ3JpdDEsCiAgLmFjdGl2ZUNyaXQyLAogIC5hY3RpdmVDcml0MyB7CiAgICBzdHJva2U6ICR7aS5jcml0Qm9yZGVyQ29sb3J9OwogICAgZmlsbDogJHtpLmFjdGl2ZVRhc2tCa2dDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDI7CiAgfQoKICAuZG9uZUNyaXQwLAogIC5kb25lQ3JpdDEsCiAgLmRvbmVDcml0MiwKICAuZG9uZUNyaXQzIHsKICAgIHN0cm9rZTogJHtpLmNyaXRCb3JkZXJDb2xvcn07CiAgICBmaWxsOiAke2kuZG9uZVRhc2tCa2dDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDI7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBzaGFwZS1yZW5kZXJpbmc6IGNyaXNwRWRnZXM7CiAgfQoKICAubWlsZXN0b25lIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKSBzY2FsZSgwLjgsMC44KTsKICB9CgogIC5taWxlc3RvbmVUZXh0IHsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICB9CiAgLmRvbmVDcml0VGV4dDAsCiAgLmRvbmVDcml0VGV4dDEsCiAgLmRvbmVDcml0VGV4dDIsCiAgLmRvbmVDcml0VGV4dDMgewogICAgZmlsbDogJHtpLnRhc2tUZXh0RGFya0NvbG9yfSAhaW1wb3J0YW50OwogIH0KCiAgLmFjdGl2ZUNyaXRUZXh0MCwKICAuYWN0aXZlQ3JpdFRleHQxLAogIC5hY3RpdmVDcml0VGV4dDIsCiAgLmFjdGl2ZUNyaXRUZXh0MyB7CiAgICBmaWxsOiAke2kudGFza1RleHREYXJrQ29sb3J9ICFpbXBvcnRhbnQ7CiAgfQoKICAudGl0bGVUZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBmb250LXNpemU6IDE4cHg7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcnx8aS50ZXh0Q29sb3J9OwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHksICJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZik7CiAgfQpgfX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgY3ZlPWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24odixiLHksVCl7Zm9yKHk9eXx8e30sVD12Lmxlbmd0aDtULS07eVt2W1RdXT1iKTtyZXR1cm4geX0scz1bNiw5LDEwXSx1PXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxpbmZvOjQsZG9jdW1lbnQ6NSxFT0Y6NixsaW5lOjcsc3RhdGVtZW50OjgsTkw6OSxzaG93SW5mbzoxMCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiaW5mbyIsNjoiRU9GIiw5OiJOTCIsMTA6InNob3dJbmZvIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFs1LDBdLFs1LDJdLFs3LDFdLFs3LDFdLFs4LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKGIseSxULF8sQSxQLFIpe3N3aXRjaChQLmxlbmd0aC0xLEEpe2Nhc2UgMTpyZXR1cm4gXztjYXNlIDQ6YnJlYWs7Y2FzZSA2Ol8uc2V0SW5mbyghMCk7YnJlYWt9fSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LGkocyxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6Niw5OlsxLDddLDEwOlsxLDhdfSx7MTpbMiwxXX0saShzLFsyLDNdKSxpKHMsWzIsNF0pLGkocyxbMiw1XSksaShzLFsyLDZdKV0sZGVmYXVsdEFjdGlvbnM6ezQ6WzIsMV19LHBhcnNlRXJyb3I6ZnVuY3Rpb24oYix5KXtpZih5LnJlY292ZXJhYmxlKXRoaXMudHJhY2UoYik7ZWxzZXt2YXIgVD1uZXcgRXJyb3IoYik7dGhyb3cgVC5oYXNoPXksVH19LHBhcnNlOmZ1bmN0aW9uKGIpe3ZhciB5PXRoaXMsVD1bMF0sXz1bXSxBPVtudWxsXSxQPVtdLFI9dGhpcy50YWJsZSxGPSIiLGo9MCxLPTAsZWU9MixpZT0xLG9lPVAuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscGU9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxiZT17eXk6e319O2Zvcih2YXIgYWUgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxhZSkmJihiZS55eVthZV09dGhpcy55eVthZV0pO3BlLnNldElucHV0KGIsYmUueXkpLGJlLnl5LmxleGVyPXBlLGJlLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBwZS55eWxsb2M+InUiJiYocGUueXlsbG9jPXt9KTt2YXIgbmU9cGUueXlsbG9jO1AucHVzaChuZSk7dmFyIHNlPXBlLm9wdGlvbnMmJnBlLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBiZS55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1iZS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBkZSgpe3ZhciBDZTtyZXR1cm4gQ2U9Xy5wb3AoKXx8cGUubGV4KCl8fGllLHR5cGVvZiBDZSE9Im51bWJlciImJihDZSBpbnN0YW5jZW9mIEFycmF5JiYoXz1DZSxDZT1fLnBvcCgpKSxDZT15LnN5bWJvbHNfW0NlXXx8Q2UpLENlfWZvcih2YXIgWCxnZSxXLHhlLFU9e30sRmUsUGUsamUsSWU7Oyl7aWYoZ2U9VFtULmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2dlXT9XPXRoaXMuZGVmYXVsdEFjdGlvbnNbZ2VdOigoWD09PW51bGx8fHR5cGVvZiBYPiJ1IikmJihYPWRlKCkpLFc9UltnZV0mJlJbZ2VdW1hdKSx0eXBlb2YgVz4idSJ8fCFXLmxlbmd0aHx8IVdbMF0pe3ZhciBTZT0iIjtJZT1bXTtmb3IoRmUgaW4gUltnZV0pdGhpcy50ZXJtaW5hbHNfW0ZlXSYmRmU+ZWUmJkllLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tGZV0rIiciKTtwZS5zaG93UG9zaXRpb24/U2U9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoaisxKStgOgpgK3BlLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArSWUuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tYXXx8WCkrIiciOlNlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGorMSkrIjogVW5leHBlY3RlZCAiKyhYPT1pZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tYXXx8WCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoU2Use3RleHQ6cGUubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW1hdfHxYLGxpbmU6cGUueXlsaW5lbm8sbG9jOm5lLGV4cGVjdGVkOkllfSl9aWYoV1swXWluc3RhbmNlb2YgQXJyYXkmJlcubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitnZSsiLCB0b2tlbjogIitYKTtzd2l0Y2goV1swXSl7Y2FzZSAxOlQucHVzaChYKSxBLnB1c2gocGUueXl0ZXh0KSxQLnB1c2gocGUueXlsbG9jKSxULnB1c2goV1sxXSksWD1udWxsLEs9cGUueXlsZW5nLEY9cGUueXl0ZXh0LGo9cGUueXlsaW5lbm8sbmU9cGUueXlsbG9jO2JyZWFrO2Nhc2UgMjppZihQZT10aGlzLnByb2R1Y3Rpb25zX1tXWzFdXVsxXSxVLiQ9QVtBLmxlbmd0aC1QZV0sVS5fJD17Zmlyc3RfbGluZTpQW1AubGVuZ3RoLShQZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOlBbUC5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpQW1AubGVuZ3RoLShQZXx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpQW1AubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxzZSYmKFUuXyQucmFuZ2U9W1BbUC5sZW5ndGgtKFBlfHwxKV0ucmFuZ2VbMF0sUFtQLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHhlPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShVLFtGLEssaixiZS55eSxXWzFdLEEsUF0uY29uY2F0KG9lKSksdHlwZW9mIHhlPCJ1IilyZXR1cm4geGU7UGUmJihUPVQuc2xpY2UoMCwtMSpQZSoyKSxBPUEuc2xpY2UoMCwtMSpQZSksUD1QLnNsaWNlKDAsLTEqUGUpKSxULnB1c2godGhpcy5wcm9kdWN0aW9uc19bV1sxXV1bMF0pLEEucHVzaChVLiQpLFAucHVzaChVLl8kKSxqZT1SW1RbVC5sZW5ndGgtMl1dW1RbVC5sZW5ndGgtMV1dLFQucHVzaChqZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LGQ9ZnVuY3Rpb24oKXt2YXIgdj17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih5LFQpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoeSxUKTtlbHNlIHRocm93IG5ldyBFcnJvcih5KX0sc2V0SW5wdXQ6ZnVuY3Rpb24oYix5KXtyZXR1cm4gdGhpcy55eT15fHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1iLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1iLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1iLHRoaXMubWF0Y2hlZCs9Yjt2YXIgeT1iLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4geT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksYn0sdW5wdXQ6ZnVuY3Rpb24oYil7dmFyIHk9Yi5sZW5ndGgsVD1iLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9Yit0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgteSksdGhpcy5vZmZzZXQtPXk7dmFyIF89dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksVC5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPVQubGVuZ3RoLTEpO3ZhciBBPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpUPyhULmxlbmd0aD09PV8ubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStfW18ubGVuZ3RoLVQubGVuZ3RoXS5sZW5ndGgtVFswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLXl9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bQVswXSxBWzBdK3RoaXMueXlsZW5nLXldKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihiKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoYikpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKGIubGVuZ3RoPjIwPyIuLi4iOiIiKStiLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5tYXRjaDtyZXR1cm4gYi5sZW5ndGg8MjAmJihiKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1iLmxlbmd0aCkpLChiLnN1YnN0cigwLDIwKSsoYi5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wYXN0SW5wdXQoKSx5PW5ldyBBcnJheShiLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIGIrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK3krIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKGIseSl7dmFyIFQsXyxBO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihBPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKEEueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksXz1iWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxfJiYodGhpcy55eWxpbmVubys9Xy5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpfP19bXy5sZW5ndGgtMV0ubGVuZ3RoLV9bXy5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitiWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPWJbMF0sdGhpcy5tYXRjaCs9YlswXSx0aGlzLm1hdGNoZXM9Yix0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShiWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1iWzBdLFQ9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMseSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxUKXJldHVybiBUO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBQIGluIEEpdGhpc1tQXT1BW1BdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIGIseSxULF87dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgQT10aGlzLl9jdXJyZW50UnVsZXMoKSxQPTA7UDxBLmxlbmd0aDtQKyspaWYoVD10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW0FbUF1dKSxUJiYoIXl8fFRbMF0ubGVuZ3RoPnlbMF0ubGVuZ3RoKSl7aWYoeT1ULF89UCx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihiPXRoaXMudGVzdF9tYXRjaChULEFbUF0pLGIhPT0hMSlyZXR1cm4gYjtpZih0aGlzLl9iYWNrdHJhY2spe3k9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4geT8oYj10aGlzLnRlc3RfbWF0Y2goeSxBW19dKSxiIT09ITE/YjohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5uZXh0KCk7cmV0dXJuIHl8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHkpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh5KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgeT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiB5PjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oeSl7cmV0dXJuIHk9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh5fHwwKSx5Pj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbeV06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oeSl7dGhpcy5iZWdpbih5KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih5LFQsXyxBKXtzd2l0Y2goXyl7Y2FzZSAwOnJldHVybiA0O2Nhc2UgMTpyZXR1cm4gOTtjYXNlIDI6cmV0dXJuInNwYWNlIjtjYXNlIDM6cmV0dXJuIDEwO2Nhc2UgNDpyZXR1cm4gNjtjYXNlIDU6cmV0dXJuIlRYVCJ9fSxydWxlczpbL14oPzppbmZvXGIpL2ksL14oPzpbXHNcblxyXSspL2ksL14oPzpbXHNdKykvaSwvXig/OnNob3dJbmZvXGIpL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7SU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIHZ9KCk7dS5sZXhlcj1kO2Z1bmN0aW9uIHAoKXt0aGlzLnl5PXt9fXJldHVybiBwLnByb3RvdHlwZT11LHUuUGFyc2VyPXAsbmV3IHB9KCk7Y3ZlLnBhcnNlcj1jdmU7Y29uc3QgYm5uPWN2ZSxsR2U9e2luZm86ITF9O2xldCB1dmU9bEdlLmluZm87Y29uc3QgbW5uPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6Ym5uLGRiOntjbGVhcjooKT0+e3V2ZT1sR2UuaW5mb30sc2V0SW5mbzppPT57dXZlPWl9LGdldEluZm86KCk9PnV2ZX0scmVuZGVyZXI6e2RyYXc6KGkscyx1KT0+e1hlLmRlYnVnKGByZW5kZXJpbmcgaW5mbyBkaWFncmFtCmAraSk7Y29uc3QgZD1yUihzKTtOZyhkLDEwMCw0MDAsITApLGQuYXBwZW5kKCJnIikuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMTAwKS5hdHRyKCJ5Iiw0MCkuYXR0cigiY2xhc3MiLCJ2ZXJzaW9uIikuYXR0cigiZm9udC1zaXplIiwzMikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChgdiR7dX1gKX19fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgbHZlPWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24ocGUsYmUsYWUsbmUpe2ZvcihhZT1hZXx8e30sbmU9cGUubGVuZ3RoO25lLS07YWVbcGVbbmVdXT1iZSk7cmV0dXJuIGFlfSxzPVsxLDNdLHU9WzEsNF0sZD1bMSw1XSxwPVsxLDZdLHY9WzEsMTAsMTIsMTQsMTYsMTgsMTksMjAsMjEsMjJdLGI9WzIsNF0seT1bMSw1LDEwLDEyLDE0LDE2LDE4LDE5LDIwLDIxLDIyXSxUPVsyMCwyMSwyMl0sXz1bMiw3XSxBPVsxLDEyXSxQPVsxLDEzXSxSPVsxLDE0XSxGPVsxLDE1XSxqPVsxLDE2XSxLPVsxLDE3XSxlZT17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsZW9sOjQsUElFOjUsZG9jdW1lbnQ6NixzaG93RGF0YTo3LGxpbmU6OCxzdGF0ZW1lbnQ6OSx0eHQ6MTAsdmFsdWU6MTEsdGl0bGU6MTIsdGl0bGVfdmFsdWU6MTMsYWNjX3RpdGxlOjE0LGFjY190aXRsZV92YWx1ZToxNSxhY2NfZGVzY3I6MTYsYWNjX2Rlc2NyX3ZhbHVlOjE3LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MTgsc2VjdGlvbjoxOSxORVdMSU5FOjIwLCI7IjoyMSxFT0Y6MjIsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDU6IlBJRSIsNzoic2hvd0RhdGEiLDEwOiJ0eHQiLDExOiJ2YWx1ZSIsMTI6InRpdGxlIiwxMzoidGl0bGVfdmFsdWUiLDE0OiJhY2NfdGl0bGUiLDE1OiJhY2NfdGl0bGVfdmFsdWUiLDE2OiJhY2NfZGVzY3IiLDE3OiJhY2NfZGVzY3JfdmFsdWUiLDE4OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwxOToic2VjdGlvbiIsMjA6Ik5FV0xJTkUiLDIxOiI7IiwyMjoiRU9GIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFszLDJdLFszLDNdLFs2LDBdLFs2LDJdLFs4LDJdLFs5LDBdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFs0LDFdLFs0LDFdLFs0LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKGJlLGFlLG5lLHNlLGRlLFgsZ2Upe3ZhciBXPVgubGVuZ3RoLTE7c3dpdGNoKGRlKXtjYXNlIDM6c2Uuc2V0U2hvd0RhdGEoITApO2JyZWFrO2Nhc2UgNjp0aGlzLiQ9WFtXLTFdO2JyZWFrO2Nhc2UgODpzZS5hZGRTZWN0aW9uKFhbVy0xXSxzZS5jbGVhbnVwVmFsdWUoWFtXXSkpO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9WFtXXS50cmltKCksc2Uuc2V0RGlhZ3JhbVRpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMDp0aGlzLiQ9WFtXXS50cmltKCksc2Uuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDExOmNhc2UgMTI6dGhpcy4kPVhbV10udHJpbSgpLHNlLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMzpzZS5hZGRTZWN0aW9uKFhbV10uc3Vic3RyKDgpKSx0aGlzLiQ9WFtXXS5zdWJzdHIoOCk7YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsNTpzLDIwOnUsMjE6ZCwyMjpwfSx7MTpbM119LHszOjcsNDoyLDU6cywyMDp1LDIxOmQsMjI6cH0saSh2LGIsezY6OCw3OlsxLDldfSksaSh5LFsyLDE0XSksaSh5LFsyLDE1XSksaSh5LFsyLDE2XSksezE6WzIsMV19LGkoVCxfLHs4OjEwLDk6MTEsMTpbMiwyXSwxMDpBLDEyOlAsMTQ6UiwxNjpGLDE4OmosMTk6S30pLGkodixiLHs2OjE4fSksaSh2LFsyLDVdKSx7NDoxOSwyMDp1LDIxOmQsMjI6cH0sezExOlsxLDIwXX0sezEzOlsxLDIxXX0sezE1OlsxLDIyXX0sezE3OlsxLDIzXX0saShULFsyLDEyXSksaShULFsyLDEzXSksaShULF8sezg6MTAsOToxMSwxOlsyLDNdLDEwOkEsMTI6UCwxNDpSLDE2OkYsMTg6aiwxOTpLfSksaSh2LFsyLDZdKSxpKFQsWzIsOF0pLGkoVCxbMiw5XSksaShULFsyLDEwXSksaShULFsyLDExXSldLGRlZmF1bHRBY3Rpb25zOns3OlsyLDFdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKGJlLGFlKXtpZihhZS5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKGJlKTtlbHNle3ZhciBuZT1uZXcgRXJyb3IoYmUpO3Rocm93IG5lLmhhc2g9YWUsbmV9fSxwYXJzZTpmdW5jdGlvbihiZSl7dmFyIGFlPXRoaXMsbmU9WzBdLHNlPVtdLGRlPVtudWxsXSxYPVtdLGdlPXRoaXMudGFibGUsVz0iIix4ZT0wLFU9MCxGZT0yLFBlPTEsamU9WC5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxJZT1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLFNlPXt5eTp7fX07Zm9yKHZhciBDZSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LENlKSYmKFNlLnl5W0NlXT10aGlzLnl5W0NlXSk7SWUuc2V0SW5wdXQoYmUsU2UueXkpLFNlLnl5LmxleGVyPUllLFNlLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBJZS55eWxsb2M+InUiJiYoSWUueXlsbG9jPXt9KTt2YXIga2U9SWUueXlsbG9jO1gucHVzaChrZSk7dmFyIEtlPUllLm9wdGlvbnMmJkllLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBTZS55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1TZS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBGdCgpe3ZhciBrdDtyZXR1cm4ga3Q9c2UucG9wKCl8fEllLmxleCgpfHxQZSx0eXBlb2Yga3QhPSJudW1iZXIiJiYoa3QgaW5zdGFuY2VvZiBBcnJheSYmKHNlPWt0LGt0PXNlLnBvcCgpKSxrdD1hZS5zeW1ib2xzX1trdF18fGt0KSxrdH1mb3IodmFyIE5lLGduLF90LEV0LEd0PXt9LGxuLHh0LFB0LFFlOzspe2lmKGduPW5lW25lLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2duXT9fdD10aGlzLmRlZmF1bHRBY3Rpb25zW2duXTooKE5lPT09bnVsbHx8dHlwZW9mIE5lPiJ1IikmJihOZT1GdCgpKSxfdD1nZVtnbl0mJmdlW2duXVtOZV0pLHR5cGVvZiBfdD4idSJ8fCFfdC5sZW5ndGh8fCFfdFswXSl7dmFyIER0PSIiO1FlPVtdO2ZvcihsbiBpbiBnZVtnbl0pdGhpcy50ZXJtaW5hbHNfW2xuXSYmbG4+RmUmJlFlLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tsbl0rIiciKTtJZS5zaG93UG9zaXRpb24/RHQ9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoeGUrMSkrYDoKYCtJZS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK1FlLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bTmVdfHxOZSkrIiciOkR0PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHhlKzEpKyI6IFVuZXhwZWN0ZWQgIisoTmU9PVBlPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW05lXXx8TmUpKyInIiksdGhpcy5wYXJzZUVycm9yKER0LHt0ZXh0OkllLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tOZV18fE5lLGxpbmU6SWUueXlsaW5lbm8sbG9jOmtlLGV4cGVjdGVkOlFlfSl9aWYoX3RbMF1pbnN0YW5jZW9mIEFycmF5JiZfdC5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2duKyIsIHRva2VuOiAiK05lKTtzd2l0Y2goX3RbMF0pe2Nhc2UgMTpuZS5wdXNoKE5lKSxkZS5wdXNoKEllLnl5dGV4dCksWC5wdXNoKEllLnl5bGxvYyksbmUucHVzaChfdFsxXSksTmU9bnVsbCxVPUllLnl5bGVuZyxXPUllLnl5dGV4dCx4ZT1JZS55eWxpbmVubyxrZT1JZS55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKHh0PXRoaXMucHJvZHVjdGlvbnNfW190WzFdXVsxXSxHdC4kPWRlW2RlLmxlbmd0aC14dF0sR3QuXyQ9e2ZpcnN0X2xpbmU6WFtYLmxlbmd0aC0oeHR8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpYW1gubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46WFtYLmxlbmd0aC0oeHR8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46WFtYLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sS2UmJihHdC5fJC5yYW5nZT1bWFtYLmxlbmd0aC0oeHR8fDEpXS5yYW5nZVswXSxYW1gubGVuZ3RoLTFdLnJhbmdlWzFdXSksRXQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KEd0LFtXLFUseGUsU2UueXksX3RbMV0sZGUsWF0uY29uY2F0KGplKSksdHlwZW9mIEV0PCJ1IilyZXR1cm4gRXQ7eHQmJihuZT1uZS5zbGljZSgwLC0xKnh0KjIpLGRlPWRlLnNsaWNlKDAsLTEqeHQpLFg9WC5zbGljZSgwLC0xKnh0KSksbmUucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tfdFsxXV1bMF0pLGRlLnB1c2goR3QuJCksWC5wdXNoKEd0Ll8kKSxQdD1nZVtuZVtuZS5sZW5ndGgtMl1dW25lW25lLmxlbmd0aC0xXV0sbmUucHVzaChQdCk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LGllPWZ1bmN0aW9uKCl7dmFyIHBlPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKGFlLG5lKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKGFlLG5lKTtlbHNlIHRocm93IG5ldyBFcnJvcihhZSl9LHNldElucHV0OmZ1bmN0aW9uKGJlLGFlKXtyZXR1cm4gdGhpcy55eT1hZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9YmUsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIGJlPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1iZSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9YmUsdGhpcy5tYXRjaGVkKz1iZTt2YXIgYWU9YmUubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBhZT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksYmV9LHVucHV0OmZ1bmN0aW9uKGJlKXt2YXIgYWU9YmUubGVuZ3RoLG5lPWJlLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9YmUrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWFlKSx0aGlzLm9mZnNldC09YWU7dmFyIHNlPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG5lLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bmUubGVuZ3RoLTEpO3ZhciBkZT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bmU/KG5lLmxlbmd0aD09PXNlLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrc2Vbc2UubGVuZ3RoLW5lLmxlbmd0aF0ubGVuZ3RoLW5lWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tYWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bZGVbMF0sZGVbMF0rdGhpcy55eWxlbmctYWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihiZSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKGJlKSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBiZT10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKGJlLmxlbmd0aD4yMD8iLi4uIjoiIikrYmUuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgYmU9dGhpcy5tYXRjaDtyZXR1cm4gYmUubGVuZ3RoPDIwJiYoYmUrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLWJlLmxlbmd0aCkpLChiZS5zdWJzdHIoMCwyMCkrKGJlLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgYmU9dGhpcy5wYXN0SW5wdXQoKSxhZT1uZXcgQXJyYXkoYmUubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gYmUrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK2FlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihiZSxhZSl7dmFyIG5lLHNlLGRlO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihkZT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihkZS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxzZT1iZVswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksc2UmJih0aGlzLnl5bGluZW5vKz1zZS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpzZT9zZVtzZS5sZW5ndGgtMV0ubGVuZ3RoLXNlW3NlLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK2JlWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPWJlWzBdLHRoaXMubWF0Y2grPWJlWzBdLHRoaXMubWF0Y2hlcz1iZSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShiZVswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9YmVbMF0sbmU9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsYWUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbmUpcmV0dXJuIG5lO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBYIGluIGRlKXRoaXNbWF09ZGVbWF07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgYmUsYWUsbmUsc2U7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgZGU9dGhpcy5fY3VycmVudFJ1bGVzKCksWD0wO1g8ZGUubGVuZ3RoO1grKylpZihuZT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2RlW1hdXSksbmUmJighYWV8fG5lWzBdLmxlbmd0aD5hZVswXS5sZW5ndGgpKXtpZihhZT1uZSxzZT1YLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKGJlPXRoaXMudGVzdF9tYXRjaChuZSxkZVtYXSksYmUhPT0hMSlyZXR1cm4gYmU7aWYodGhpcy5fYmFja3RyYWNrKXthZT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBhZT8oYmU9dGhpcy50ZXN0X21hdGNoKGFlLGRlW3NlXSksYmUhPT0hMT9iZTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIGFlPXRoaXMubmV4dCgpO3JldHVybiBhZXx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24oYWUpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChhZSl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIGFlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIGFlPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oYWUpe3JldHVybiBhZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKGFlfHwwKSxhZT49MD90aGlzLmNvbmRpdGlvblN0YWNrW2FlXToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihhZSl7dGhpcy5iZWdpbihhZSl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oYWUsbmUsc2UsZGUpe3N3aXRjaChzZSl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpicmVhaztjYXNlIDI6cmV0dXJuIDIwO2Nhc2UgMzpicmVhaztjYXNlIDQ6YnJlYWs7Y2FzZSA1OnJldHVybiB0aGlzLmJlZ2luKCJ0aXRsZSIpLDEyO2Nhc2UgNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJ0aXRsZV92YWx1ZSI7Y2FzZSA3OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwxNDtjYXNlIDg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDk6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDE2O2Nhc2UgMTA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDExOnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDEyOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEzOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDE0OnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgMTU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTY6cmV0dXJuInR4dCI7Y2FzZSAxNzpyZXR1cm4gNTtjYXNlIDE4OnJldHVybiA3O2Nhc2UgMTk6cmV0dXJuInZhbHVlIjtjYXNlIDIwOnJldHVybiAyMn19LHJ1bGVzOlsvXig/OiUlKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/OltcblxyXSspL2ksL14oPzolJVteXG5dKikvaSwvXig/Oltcc10rKS9pLC9eKD86dGl0bGVcYikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpwaWVcYikvaSwvXig/OnNob3dEYXRhXGIpL2ksL14oPzo6W1xzXSpbXGRdKyg/OlwuW1xkXSspPykvaSwvXig/OiQpL2ldLGNvbmRpdGlvbnM6e2FjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMiwxM10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOlsxMF0saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOls4XSxpbmNsdXNpdmU6ITF9LHRpdGxlOntydWxlczpbNl0saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlsxNSwxNl0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNyw5LDExLDE0LDE3LDE4LDE5LDIwXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIHBlfSgpO2VlLmxleGVyPWllO2Z1bmN0aW9uIG9lKCl7dGhpcy55eT17fX1yZXR1cm4gb2UucHJvdG90eXBlPWVlLGVlLlBhcnNlcj1vZSxuZXcgb2V9KCk7bHZlLnBhcnNlcj1sdmU7Y29uc3Qgdm5uPWx2ZSxoR2U9c2gucGllLGZKPXtzZWN0aW9uczp7fSxzaG93RGF0YTohMSxjb25maWc6aEdlfTtsZXQgZEo9Zkouc2VjdGlvbnMsaHZlPWZKLnNob3dEYXRhO2NvbnN0IHdubj1zdHJ1Y3R1cmVkQ2xvbmUoaEdlKSx5bm49e2dldENvbmZpZzooKT0+c3RydWN0dXJlZENsb25lKHdubiksY2xlYXI6KCk9PntkSj1zdHJ1Y3R1cmVkQ2xvbmUoZkouc2VjdGlvbnMpLGh2ZT1mSi5zaG93RGF0YSxQZygpfSxzZXREaWFncmFtVGl0bGU6Y20sZ2V0RGlhZ3JhbVRpdGxlOkFwLHNldEFjY1RpdGxlOkJnLGdldEFjY1RpdGxlOkNwLHNldEFjY0Rlc2NyaXB0aW9uOlNwLGdldEFjY0Rlc2NyaXB0aW9uOl9wLGFkZFNlY3Rpb246KGkscyk9PntpPVlmKGkscXQoKSksZEpbaV09PT12b2lkIDAmJihkSltpXT1zLFhlLmRlYnVnKGBhZGRlZCBuZXcgc2VjdGlvbjogJHtpfSwgd2l0aCB2YWx1ZTogJHtzfWApKX0sZ2V0U2VjdGlvbnM6KCk9PmRKLGNsZWFudXBWYWx1ZTppPT4oaS5zdWJzdHJpbmcoMCwxKT09PSI6IiYmKGk9aS5zdWJzdHJpbmcoMSkudHJpbSgpKSxOdW1iZXIoaS50cmltKCkpKSxzZXRTaG93RGF0YTppPT57aHZlPWl9LGdldFNob3dEYXRhOigpPT5odmV9LHhubj1pPT5gCiAgLnBpZUNpcmNsZXsKICAgIHN0cm9rZTogJHtpLnBpZVN0cm9rZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aCA6ICR7aS5waWVTdHJva2VXaWR0aH07CiAgICBvcGFjaXR5IDogJHtpLnBpZU9wYWNpdHl9OwogIH0KICAucGllT3V0ZXJDaXJjbGV7CiAgICBzdHJva2U6ICR7aS5waWVPdXRlclN0cm9rZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogJHtpLnBpZU91dGVyU3Ryb2tlV2lkdGh9OwogICAgZmlsbDogbm9uZTsKICB9CiAgLnBpZVRpdGxlVGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZm9udC1zaXplOiAke2kucGllVGl0bGVUZXh0U2l6ZX07CiAgICBmaWxsOiAke2kucGllVGl0bGVUZXh0Q29sb3J9OwogICAgZm9udC1mYW1pbHk6ICR7aS5mb250RmFtaWx5fTsKICB9CiAgLnNsaWNlIHsKICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgICBmaWxsOiAke2kucGllU2VjdGlvblRleHRDb2xvcn07CiAgICBmb250LXNpemU6JHtpLnBpZVNlY3Rpb25UZXh0U2l6ZX07CiAgICAvLyBmaWxsOiB3aGl0ZTsKICB9CiAgLmxlZ2VuZCB0ZXh0IHsKICAgIGZpbGw6ICR7aS5waWVMZWdlbmRUZXh0Q29sb3J9OwogICAgZm9udC1mYW1pbHk6ICR7aS5mb250RmFtaWx5fTsKICAgIGZvbnQtc2l6ZTogJHtpLnBpZUxlZ2VuZFRleHRTaXplfTsKICB9CmAsa25uPWk9Pntjb25zdCBzPU9iamVjdC5lbnRyaWVzKGkpLm1hcChkPT4oe2xhYmVsOmRbMF0sdmFsdWU6ZFsxXX0pKS5zb3J0KChkLHApPT5wLnZhbHVlLWQudmFsdWUpO3JldHVybiBTTnQoKS52YWx1ZShkPT5kLnZhbHVlKShzKX0sRW5uPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6dm5uLGRiOnlubixyZW5kZXJlcjp7ZHJhdzooaSxzLHUsZCk9PntYZS5kZWJ1ZyhgcmVuZGVyaW5nIHBpZSBjaGFydApgK2kpO2NvbnN0IHA9ZC5kYix2PXF0KCksYj1KRihwLmdldENvbmZpZygpLHYucGllKSx5PTQwLFQ9MTgsXz00LEE9NDUwLFA9QSxSPXJSKHMpLEY9Ui5hcHBlbmQoImciKSxqPXAuZ2V0U2VjdGlvbnMoKTtGLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1AvMisiLCIrQS8yKyIpIik7Y29uc3R7dGhlbWVWYXJpYWJsZXM6S309djtsZXRbZWVdPU5DKEsucGllT3V0ZXJTdHJva2VXaWR0aCk7ZWU/PyhlZT0yKTtjb25zdCBpZT1iLnRleHRQb3NpdGlvbixvZT1NYXRoLm1pbihQLEEpLzIteSxwZT1sRCgpLmlubmVyUmFkaXVzKDApLm91dGVyUmFkaXVzKG9lKSxiZT1sRCgpLmlubmVyUmFkaXVzKG9lKmllKS5vdXRlclJhZGl1cyhvZSppZSk7Ri5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwwKS5hdHRyKCJjeSIsMCkuYXR0cigiciIsb2UrZWUvMikuYXR0cigiY2xhc3MiLCJwaWVPdXRlckNpcmNsZSIpO2NvbnN0IGFlPWtubihqKSxuZT1bSy5waWUxLEsucGllMixLLnBpZTMsSy5waWU0LEsucGllNSxLLnBpZTYsSy5waWU3LEsucGllOCxLLnBpZTksSy5waWUxMCxLLnBpZTExLEsucGllMTJdLHNlPV9GKG5lKTtGLnNlbGVjdEFsbCgibXlTbGljZXMiKS5kYXRhKGFlKS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHBlKS5hdHRyKCJmaWxsIix4ZT0+c2UoeGUuZGF0YS5sYWJlbCkpLmF0dHIoImNsYXNzIiwicGllQ2lyY2xlIik7bGV0IGRlPTA7T2JqZWN0LmtleXMoaikuZm9yRWFjaCh4ZT0+e2RlKz1qW3hlXX0pLEYuc2VsZWN0QWxsKCJteVNsaWNlcyIpLmRhdGEoYWUpLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikudGV4dCh4ZT0+KHhlLmRhdGEudmFsdWUvZGUqMTAwKS50b0ZpeGVkKDApKyIlIikuYXR0cigidHJhbnNmb3JtIix4ZT0+InRyYW5zbGF0ZSgiK2JlLmNlbnRyb2lkKHhlKSsiKSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImNsYXNzIiwic2xpY2UiKSxGLmFwcGVuZCgidGV4dCIpLnRleHQocC5nZXREaWFncmFtVGl0bGUoKSkuYXR0cigieCIsMCkuYXR0cigieSIsLShBLTUwKS8yKS5hdHRyKCJjbGFzcyIsInBpZVRpdGxlVGV4dCIpO2NvbnN0IFg9Ri5zZWxlY3RBbGwoIi5sZWdlbmQiKS5kYXRhKHNlLmRvbWFpbigpKS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGVnZW5kIikuYXR0cigidHJhbnNmb3JtIiwoeGUsVSk9Pntjb25zdCBGZT1UK18sUGU9RmUqc2UuZG9tYWluKCkubGVuZ3RoLzIsamU9MTIqVCxJZT1VKkZlLVBlO3JldHVybiJ0cmFuc2xhdGUoIitqZSsiLCIrSWUrIikifSk7WC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ3aWR0aCIsVCkuYXR0cigiaGVpZ2h0IixUKS5zdHlsZSgiZmlsbCIsc2UpLnN0eWxlKCJzdHJva2UiLHNlKSxYLmRhdGEoYWUpLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLFQrXykuYXR0cigieSIsVC1fKS50ZXh0KHhlPT57Y29uc3R7bGFiZWw6VSx2YWx1ZTpGZX09eGUuZGF0YTtyZXR1cm4gcC5nZXRTaG93RGF0YSgpP2Ake1V9IFske0ZlfV1gOlV9KTtjb25zdCBnZT1NYXRoLm1heCguLi5YLnNlbGVjdEFsbCgidGV4dCIpLm5vZGVzKCkubWFwKHhlPT4oeGU9PW51bGw/dm9pZCAwOnhlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKT8/MCkpLFc9UCt5K1QrXytnZTtSLmF0dHIoInZpZXdCb3giLGAwIDAgJHtXfSAke0F9YCksTmcoUixBLFcsYi51c2VNYXhXaWR0aCl9fSxzdHlsZXM6eG5ufX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgZnZlPWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oX3QsRXQsR3QsbG4pe2ZvcihHdD1HdHx8e30sbG49X3QubGVuZ3RoO2xuLS07R3RbX3RbbG5dXT1FdCk7cmV0dXJuIEd0fSxzPVsxLDNdLHU9WzEsNF0sZD1bMSw1XSxwPVsxLDZdLHY9WzEsN10sYj1bMSw1LDEzLDE1LDE3LDE5LDIwLDI1LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM3LDM4LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwXSx5PVsxLDUsNiwxMywxNSwxNywxOSwyMCwyNSwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNywzOCw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MF0sVD1bMzIsMzMsMzRdLF89WzIsN10sQT1bMSwxM10sUD1bMSwxN10sUj1bMSwxOF0sRj1bMSwxOV0saj1bMSwyMF0sSz1bMSwyMV0sZWU9WzEsMjJdLGllPVsxLDIzXSxvZT1bMSwyNF0scGU9WzEsMjVdLGJlPVsxLDI2XSxhZT1bMSwyN10sbmU9WzEsMzBdLHNlPVsxLDMxXSxkZT1bMSwzMl0sWD1bMSwzM10sZ2U9WzEsMzRdLFc9WzEsMzVdLHhlPVsxLDM2XSxVPVsxLDM3XSxGZT1bMSwzOF0sUGU9WzEsMzldLGplPVsxLDQwXSxJZT1bMSw0MV0sU2U9WzEsNDJdLENlPVsxLDU3XSxrZT1bMSw1OF0sS2U9WzUsMjIsMjYsMzIsMzMsMzQsNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTFdLEZ0PXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6Myxlb2w6NCxTUEFDRTo1LFFVQURSQU5UOjYsZG9jdW1lbnQ6NyxsaW5lOjgsc3RhdGVtZW50OjksYXhpc0RldGFpbHM6MTAscXVhZHJhbnREZXRhaWxzOjExLHBvaW50czoxMix0aXRsZToxMyx0aXRsZV92YWx1ZToxNCxhY2NfdGl0bGU6MTUsYWNjX3RpdGxlX3ZhbHVlOjE2LGFjY19kZXNjcjoxNyxhY2NfZGVzY3JfdmFsdWU6MTgsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToxOSxzZWN0aW9uOjIwLHRleHQ6MjEscG9pbnRfc3RhcnQ6MjIscG9pbnRfeDoyMyxwb2ludF95OjI0LCJYLUFYSVMiOjI1LCJBWElTLVRFWFQtREVMSU1JVEVSIjoyNiwiWS1BWElTIjoyNyxRVUFEUkFOVF8xOjI4LFFVQURSQU5UXzI6MjksUVVBRFJBTlRfMzozMCxRVUFEUkFOVF80OjMxLE5FV0xJTkU6MzIsU0VNSTozMyxFT0Y6MzQsYWxwaGFOdW1Ub2tlbjozNSx0ZXh0Tm9UYWdzVG9rZW46MzYsU1RSOjM3LE1EX1NUUjozOCxhbHBoYU51bTozOSxQVU5DVFVBVElPTjo0MCxBTVA6NDEsTlVNOjQyLEFMUEhBOjQzLENPTU1BOjQ0LFBMVVM6NDUsRVFVQUxTOjQ2LE1VTFQ6NDcsRE9UOjQ4LEJSS1Q6NDksVU5ERVJTQ09SRTo1MCxNSU5VUzo1MSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNToiU1BBQ0UiLDY6IlFVQURSQU5UIiwxMzoidGl0bGUiLDE0OiJ0aXRsZV92YWx1ZSIsMTU6ImFjY190aXRsZSIsMTY6ImFjY190aXRsZV92YWx1ZSIsMTc6ImFjY19kZXNjciIsMTg6ImFjY19kZXNjcl92YWx1ZSIsMTk6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDIwOiJzZWN0aW9uIiwyMjoicG9pbnRfc3RhcnQiLDIzOiJwb2ludF94IiwyNDoicG9pbnRfeSIsMjU6IlgtQVhJUyIsMjY6IkFYSVMtVEVYVC1ERUxJTUlURVIiLDI3OiJZLUFYSVMiLDI4OiJRVUFEUkFOVF8xIiwyOToiUVVBRFJBTlRfMiIsMzA6IlFVQURSQU5UXzMiLDMxOiJRVUFEUkFOVF80IiwzMjoiTkVXTElORSIsMzM6IlNFTUkiLDM0OiJFT0YiLDM3OiJTVFIiLDM4OiJNRF9TVFIiLDQwOiJQVU5DVFVBVElPTiIsNDE6IkFNUCIsNDI6Ik5VTSIsNDM6IkFMUEhBIiw0NDoiQ09NTUEiLDQ1OiJQTFVTIiw0NjoiRVFVQUxTIiw0NzoiTVVMVCIsNDg6IkRPVCIsNDk6IkJSS1QiLDUwOiJVTkRFUlNDT1JFIiw1MToiTUlOVVMifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzMsMl0sWzMsMl0sWzcsMF0sWzcsMl0sWzgsMl0sWzksMF0sWzksMl0sWzksMV0sWzksMV0sWzksMV0sWzksMl0sWzksMl0sWzksMl0sWzksMV0sWzksMV0sWzEyLDRdLFsxMCw0XSxbMTAsM10sWzEwLDJdLFsxMCw0XSxbMTAsM10sWzEwLDJdLFsxMSwyXSxbMTEsMl0sWzExLDJdLFsxMSwyXSxbNCwxXSxbNCwxXSxbNCwxXSxbMjEsMV0sWzIxLDJdLFsyMSwxXSxbMjEsMV0sWzM5LDFdLFszOSwyXSxbMzUsMV0sWzM1LDFdLFszNSwxXSxbMzUsMV0sWzM1LDFdLFszNSwxXSxbMzUsMV0sWzM1LDFdLFszNSwxXSxbMzUsMV0sWzM1LDFdLFszNiwxXSxbMzYsMV0sWzM2LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKEV0LEd0LGxuLHh0LFB0LFFlLER0KXt2YXIga3Q9UWUubGVuZ3RoLTE7c3dpdGNoKFB0KXtjYXNlIDEyOnRoaXMuJD1RZVtrdF0udHJpbSgpLHh0LnNldERpYWdyYW1UaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMTM6dGhpcy4kPVFlW2t0XS50cmltKCkseHQuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDE0OmNhc2UgMTU6dGhpcy4kPVFlW2t0XS50cmltKCkseHQuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDE2Onh0LmFkZFNlY3Rpb24oUWVba3RdLnN1YnN0cig4KSksdGhpcy4kPVFlW2t0XS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAxNzp4dC5hZGRQb2ludChRZVtrdC0zXSxRZVtrdC0xXSxRZVtrdF0pO2JyZWFrO2Nhc2UgMTg6eHQuc2V0WEF4aXNMZWZ0VGV4dChRZVtrdC0yXSkseHQuc2V0WEF4aXNSaWdodFRleHQoUWVba3RdKTticmVhaztjYXNlIDE5OlFlW2t0LTFdLnRleHQrPSIg4p+2ICIseHQuc2V0WEF4aXNMZWZ0VGV4dChRZVtrdC0xXSk7YnJlYWs7Y2FzZSAyMDp4dC5zZXRYQXhpc0xlZnRUZXh0KFFlW2t0XSk7YnJlYWs7Y2FzZSAyMTp4dC5zZXRZQXhpc0JvdHRvbVRleHQoUWVba3QtMl0pLHh0LnNldFlBeGlzVG9wVGV4dChRZVtrdF0pO2JyZWFrO2Nhc2UgMjI6UWVba3QtMV0udGV4dCs9IiDin7YgIix4dC5zZXRZQXhpc0JvdHRvbVRleHQoUWVba3QtMV0pO2JyZWFrO2Nhc2UgMjM6eHQuc2V0WUF4aXNCb3R0b21UZXh0KFFlW2t0XSk7YnJlYWs7Y2FzZSAyNDp4dC5zZXRRdWFkcmFudDFUZXh0KFFlW2t0XSk7YnJlYWs7Y2FzZSAyNTp4dC5zZXRRdWFkcmFudDJUZXh0KFFlW2t0XSk7YnJlYWs7Y2FzZSAyNjp4dC5zZXRRdWFkcmFudDNUZXh0KFFlW2t0XSk7YnJlYWs7Y2FzZSAyNzp4dC5zZXRRdWFkcmFudDRUZXh0KFFlW2t0XSk7YnJlYWs7Y2FzZSAzMTp0aGlzLiQ9e3RleHQ6UWVba3RdLHR5cGU6InRleHQifTticmVhaztjYXNlIDMyOnRoaXMuJD17dGV4dDpRZVtrdC0xXS50ZXh0KyIiK1FlW2t0XSx0eXBlOlFlW2t0LTFdLnR5cGV9O2JyZWFrO2Nhc2UgMzM6dGhpcy4kPXt0ZXh0OlFlW2t0XSx0eXBlOiJ0ZXh0In07YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9e3RleHQ6UWVba3RdLHR5cGU6Im1hcmtkb3duIn07YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9UWVba3RdO2JyZWFrO2Nhc2UgMzY6dGhpcy4kPVFlW2t0LTFdKyIiK1FlW2t0XTticmVha319LHRhYmxlOlt7MzoxLDQ6Miw1OnMsNjp1LDMyOmQsMzM6cCwzNDp2fSx7MTpbM119LHszOjgsNDoyLDU6cyw2OnUsMzI6ZCwzMzpwLDM0OnZ9LHszOjksNDoyLDU6cyw2OnUsMzI6ZCwzMzpwLDM0OnZ9LGkoYixbMiw0XSx7NzoxMH0pLGkoeSxbMiwyOF0pLGkoeSxbMiwyOV0pLGkoeSxbMiwzMF0pLHsxOlsyLDFdfSx7MTpbMiwyXX0saShULF8sezg6MTEsOToxMiwxMDoxNCwxMToxNSwxMjoxNiwyMToyOCwzNToyOSwxOlsyLDNdLDU6QSwxMzpQLDE1OlIsMTc6RiwxOTpqLDIwOkssMjU6ZWUsMjc6aWUsMjg6b2UsMjk6cGUsMzA6YmUsMzE6YWUsMzc6bmUsMzg6c2UsNDA6ZGUsNDE6WCw0MjpnZSw0MzpXLDQ0OnhlLDQ1OlUsNDY6RmUsNDc6UGUsNDg6amUsNDk6SWUsNTA6U2V9KSxpKGIsWzIsNV0pLHs0OjQzLDMyOmQsMzM6cCwzNDp2fSxpKFQsXyx7MTA6MTQsMTE6MTUsMTI6MTYsMjE6MjgsMzU6MjksOTo0NCw1OkEsMTM6UCwxNTpSLDE3OkYsMTk6aiwyMDpLLDI1OmVlLDI3OmllLDI4Om9lLDI5OnBlLDMwOmJlLDMxOmFlLDM3Om5lLDM4OnNlLDQwOmRlLDQxOlgsNDI6Z2UsNDM6Vyw0NDp4ZSw0NTpVLDQ2OkZlLDQ3OlBlLDQ4OmplLDQ5OkllLDUwOlNlfSksaShULFsyLDldKSxpKFQsWzIsMTBdKSxpKFQsWzIsMTFdKSx7MTQ6WzEsNDVdfSx7MTY6WzEsNDZdfSx7MTg6WzEsNDddfSxpKFQsWzIsMTVdKSxpKFQsWzIsMTZdKSx7MjE6NDgsMzU6MjksMzc6bmUsMzg6c2UsNDA6ZGUsNDE6WCw0MjpnZSw0MzpXLDQ0OnhlLDQ1OlUsNDY6RmUsNDc6UGUsNDg6amUsNDk6SWUsNTA6U2V9LHsyMTo0OSwzNToyOSwzNzpuZSwzODpzZSw0MDpkZSw0MTpYLDQyOmdlLDQzOlcsNDQ6eGUsNDU6VSw0NjpGZSw0NzpQZSw0ODpqZSw0OTpJZSw1MDpTZX0sezIxOjUwLDM1OjI5LDM3Om5lLDM4OnNlLDQwOmRlLDQxOlgsNDI6Z2UsNDM6Vyw0NDp4ZSw0NTpVLDQ2OkZlLDQ3OlBlLDQ4OmplLDQ5OkllLDUwOlNlfSx7MjE6NTEsMzU6MjksMzc6bmUsMzg6c2UsNDA6ZGUsNDE6WCw0MjpnZSw0MzpXLDQ0OnhlLDQ1OlUsNDY6RmUsNDc6UGUsNDg6amUsNDk6SWUsNTA6U2V9LHsyMTo1MiwzNToyOSwzNzpuZSwzODpzZSw0MDpkZSw0MTpYLDQyOmdlLDQzOlcsNDQ6eGUsNDU6VSw0NjpGZSw0NzpQZSw0ODpqZSw0OTpJZSw1MDpTZX0sezIxOjUzLDM1OjI5LDM3Om5lLDM4OnNlLDQwOmRlLDQxOlgsNDI6Z2UsNDM6Vyw0NDp4ZSw0NTpVLDQ2OkZlLDQ3OlBlLDQ4OmplLDQ5OkllLDUwOlNlfSx7NTpDZSwyMjpbMSw1NF0sMzU6NTYsMzY6NTUsNDA6ZGUsNDE6WCw0MjpnZSw0MzpXLDQ0OnhlLDQ1OlUsNDY6RmUsNDc6UGUsNDg6amUsNDk6SWUsNTA6U2UsNTE6a2V9LGkoS2UsWzIsMzFdKSxpKEtlLFsyLDMzXSksaShLZSxbMiwzNF0pLGkoS2UsWzIsMzddKSxpKEtlLFsyLDM4XSksaShLZSxbMiwzOV0pLGkoS2UsWzIsNDBdKSxpKEtlLFsyLDQxXSksaShLZSxbMiw0Ml0pLGkoS2UsWzIsNDNdKSxpKEtlLFsyLDQ0XSksaShLZSxbMiw0NV0pLGkoS2UsWzIsNDZdKSxpKEtlLFsyLDQ3XSksaShiLFsyLDZdKSxpKFQsWzIsOF0pLGkoVCxbMiwxMl0pLGkoVCxbMiwxM10pLGkoVCxbMiwxNF0pLGkoVCxbMiwyMF0sezM2OjU1LDM1OjU2LDU6Q2UsMjY6WzEsNTldLDQwOmRlLDQxOlgsNDI6Z2UsNDM6Vyw0NDp4ZSw0NTpVLDQ2OkZlLDQ3OlBlLDQ4OmplLDQ5OkllLDUwOlNlLDUxOmtlfSksaShULFsyLDIzXSx7MzY6NTUsMzU6NTYsNTpDZSwyNjpbMSw2MF0sNDA6ZGUsNDE6WCw0MjpnZSw0MzpXLDQ0OnhlLDQ1OlUsNDY6RmUsNDc6UGUsNDg6amUsNDk6SWUsNTA6U2UsNTE6a2V9KSxpKFQsWzIsMjRdLHszNjo1NSwzNTo1Niw1OkNlLDQwOmRlLDQxOlgsNDI6Z2UsNDM6Vyw0NDp4ZSw0NTpVLDQ2OkZlLDQ3OlBlLDQ4OmplLDQ5OkllLDUwOlNlLDUxOmtlfSksaShULFsyLDI1XSx7MzY6NTUsMzU6NTYsNTpDZSw0MDpkZSw0MTpYLDQyOmdlLDQzOlcsNDQ6eGUsNDU6VSw0NjpGZSw0NzpQZSw0ODpqZSw0OTpJZSw1MDpTZSw1MTprZX0pLGkoVCxbMiwyNl0sezM2OjU1LDM1OjU2LDU6Q2UsNDA6ZGUsNDE6WCw0MjpnZSw0MzpXLDQ0OnhlLDQ1OlUsNDY6RmUsNDc6UGUsNDg6amUsNDk6SWUsNTA6U2UsNTE6a2V9KSxpKFQsWzIsMjddLHszNjo1NSwzNTo1Niw1OkNlLDQwOmRlLDQxOlgsNDI6Z2UsNDM6Vyw0NDp4ZSw0NTpVLDQ2OkZlLDQ3OlBlLDQ4OmplLDQ5OkllLDUwOlNlLDUxOmtlfSksezIzOlsxLDYxXX0saShLZSxbMiwzMl0pLGkoS2UsWzIsNDhdKSxpKEtlLFsyLDQ5XSksaShLZSxbMiw1MF0pLGkoVCxbMiwxOV0sezM1OjI5LDIxOjYyLDM3Om5lLDM4OnNlLDQwOmRlLDQxOlgsNDI6Z2UsNDM6Vyw0NDp4ZSw0NTpVLDQ2OkZlLDQ3OlBlLDQ4OmplLDQ5OkllLDUwOlNlfSksaShULFsyLDIyXSx7MzU6MjksMjE6NjMsMzc6bmUsMzg6c2UsNDA6ZGUsNDE6WCw0MjpnZSw0MzpXLDQ0OnhlLDQ1OlUsNDY6RmUsNDc6UGUsNDg6amUsNDk6SWUsNTA6U2V9KSx7MjQ6WzEsNjRdfSxpKFQsWzIsMThdLHszNjo1NSwzNTo1Niw1OkNlLDQwOmRlLDQxOlgsNDI6Z2UsNDM6Vyw0NDp4ZSw0NTpVLDQ2OkZlLDQ3OlBlLDQ4OmplLDQ5OkllLDUwOlNlLDUxOmtlfSksaShULFsyLDIxXSx7MzY6NTUsMzU6NTYsNTpDZSw0MDpkZSw0MTpYLDQyOmdlLDQzOlcsNDQ6eGUsNDU6VSw0NjpGZSw0NzpQZSw0ODpqZSw0OTpJZSw1MDpTZSw1MTprZX0pLGkoVCxbMiwxN10pXSxkZWZhdWx0QWN0aW9uczp7ODpbMiwxXSw5OlsyLDJdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKEV0LEd0KXtpZihHdC5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKEV0KTtlbHNle3ZhciBsbj1uZXcgRXJyb3IoRXQpO3Rocm93IGxuLmhhc2g9R3QsbG59fSxwYXJzZTpmdW5jdGlvbihFdCl7dmFyIEd0PXRoaXMsbG49WzBdLHh0PVtdLFB0PVtudWxsXSxRZT1bXSxEdD10aGlzLnRhYmxlLGt0PSIiLE9uPTAsaHQ9MCx6cj0yLHl0PTEsamk9UWUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkseGk9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxNYT17eXk6e319O2Zvcih2YXIgenMgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSx6cykmJihNYS55eVt6c109dGhpcy55eVt6c10pO3hpLnNldElucHV0KEV0LE1hLnl5KSxNYS55eS5sZXhlcj14aSxNYS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgeGkueXlsbG9jPiJ1IiYmKHhpLnl5bGxvYz17fSk7dmFyIGFvPXhpLnl5bGxvYztRZS5wdXNoKGFvKTt2YXIgVHI9eGkub3B0aW9ucyYmeGkub3B0aW9ucy5yYW5nZXM7dHlwZW9mIE1hLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPU1hLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIEZuKCl7dmFyIFBhO3JldHVybiBQYT14dC5wb3AoKXx8eGkubGV4KCl8fHl0LHR5cGVvZiBQYSE9Im51bWJlciImJihQYSBpbnN0YW5jZW9mIEFycmF5JiYoeHQ9UGEsUGE9eHQucG9wKCkpLFBhPUd0LnN5bWJvbHNfW1BhXXx8UGEpLFBhfWZvcih2YXIgcW4sVW4sQXQsd3Qsb249e30sZm4sQW4sb28sam87Oyl7aWYoVW49bG5bbG4ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbVW5dP0F0PXRoaXMuZGVmYXVsdEFjdGlvbnNbVW5dOigocW49PT1udWxsfHx0eXBlb2YgcW4+InUiKSYmKHFuPUZuKCkpLEF0PUR0W1VuXSYmRHRbVW5dW3FuXSksdHlwZW9mIEF0PiJ1Inx8IUF0Lmxlbmd0aHx8IUF0WzBdKXt2YXIgJG89IiI7am89W107Zm9yKGZuIGluIER0W1VuXSl0aGlzLnRlcm1pbmFsc19bZm5dJiZmbj56ciYmam8ucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW2ZuXSsiJyIpO3hpLnNob3dQb3NpdGlvbj8kbz0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhPbisxKStgOgpgK3hpLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGAram8uam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1txbl18fHFuKSsiJyI6JG89IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoT24rMSkrIjogVW5leHBlY3RlZCAiKyhxbj09eXQ/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bcW5dfHxxbikrIiciKSx0aGlzLnBhcnNlRXJyb3IoJG8se3RleHQ6eGkubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3FuXXx8cW4sbGluZTp4aS55eWxpbmVubyxsb2M6YW8sZXhwZWN0ZWQ6am99KX1pZihBdFswXWluc3RhbmNlb2YgQXJyYXkmJkF0Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrVW4rIiwgdG9rZW46ICIrcW4pO3N3aXRjaChBdFswXSl7Y2FzZSAxOmxuLnB1c2gocW4pLFB0LnB1c2goeGkueXl0ZXh0KSxRZS5wdXNoKHhpLnl5bGxvYyksbG4ucHVzaChBdFsxXSkscW49bnVsbCxodD14aS55eWxlbmcsa3Q9eGkueXl0ZXh0LE9uPXhpLnl5bGluZW5vLGFvPXhpLnl5bGxvYzticmVhaztjYXNlIDI6aWYoQW49dGhpcy5wcm9kdWN0aW9uc19bQXRbMV1dWzFdLG9uLiQ9UHRbUHQubGVuZ3RoLUFuXSxvbi5fJD17Zmlyc3RfbGluZTpRZVtRZS5sZW5ndGgtKEFufHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6UWVbUWUubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46UWVbUWUubGVuZ3RoLShBbnx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpRZVtRZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LFRyJiYob24uXyQucmFuZ2U9W1FlW1FlLmxlbmd0aC0oQW58fDEpXS5yYW5nZVswXSxRZVtRZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx3dD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkob24sW2t0LGh0LE9uLE1hLnl5LEF0WzFdLFB0LFFlXS5jb25jYXQoamkpKSx0eXBlb2Ygd3Q8InUiKXJldHVybiB3dDtBbiYmKGxuPWxuLnNsaWNlKDAsLTEqQW4qMiksUHQ9UHQuc2xpY2UoMCwtMSpBbiksUWU9UWUuc2xpY2UoMCwtMSpBbikpLGxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19bQXRbMV1dWzBdKSxQdC5wdXNoKG9uLiQpLFFlLnB1c2gob24uXyQpLG9vPUR0W2xuW2xuLmxlbmd0aC0yXV1bbG5bbG4ubGVuZ3RoLTFdXSxsbi5wdXNoKG9vKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sTmU9ZnVuY3Rpb24oKXt2YXIgX3Q9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oR3QsbG4pe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoR3QsbG4pO2Vsc2UgdGhyb3cgbmV3IEVycm9yKEd0KX0sc2V0SW5wdXQ6ZnVuY3Rpb24oRXQsR3Qpe3JldHVybiB0aGlzLnl5PUd0fHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1FdCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgRXQ9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPUV0LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1FdCx0aGlzLm1hdGNoZWQrPUV0O3ZhciBHdD1FdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIEd0Pyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxFdH0sdW5wdXQ6ZnVuY3Rpb24oRXQpe3ZhciBHdD1FdC5sZW5ndGgsbG49RXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1FdCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtR3QpLHRoaXMub2Zmc2V0LT1HdDt2YXIgeHQ9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1sbi5sZW5ndGgtMSk7dmFyIFB0PXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpsbj8obG4ubGVuZ3RoPT09eHQubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKSt4dFt4dC5sZW5ndGgtbG4ubGVuZ3RoXS5sZW5ndGgtbG5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1HdH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtQdFswXSxQdFswXSt0aGlzLnl5bGVuZy1HdF0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKEV0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoRXQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIEV0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oRXQubGVuZ3RoPjIwPyIuLi4iOiIiKStFdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciBFdD10aGlzLm1hdGNoO3JldHVybiBFdC5sZW5ndGg8MjAmJihFdCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtRXQubGVuZ3RoKSksKEV0LnN1YnN0cigwLDIwKSsoRXQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBFdD10aGlzLnBhc3RJbnB1dCgpLEd0PW5ldyBBcnJheShFdC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBFdCt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArR3QrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKEV0LEd0KXt2YXIgbG4seHQsUHQ7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKFB0PXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKFB0Lnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLHh0PUV0WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSx4dCYmKHRoaXMueXlsaW5lbm8rPXh0Lmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnh0P3h0W3h0Lmxlbmd0aC0xXS5sZW5ndGgteHRbeHQubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rRXRbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9RXRbMF0sdGhpcy5tYXRjaCs9RXRbMF0sdGhpcy5tYXRjaGVzPUV0LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKEV0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1FdFswXSxsbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxHdCx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxsbilyZXR1cm4gbG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIFFlIGluIFB0KXRoaXNbUWVdPVB0W1FlXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBFdCxHdCxsbix4dDt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBQdD10aGlzLl9jdXJyZW50UnVsZXMoKSxRZT0wO1FlPFB0Lmxlbmd0aDtRZSsrKWlmKGxuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbUHRbUWVdXSksbG4mJighR3R8fGxuWzBdLmxlbmd0aD5HdFswXS5sZW5ndGgpKXtpZihHdD1sbix4dD1RZSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihFdD10aGlzLnRlc3RfbWF0Y2gobG4sUHRbUWVdKSxFdCE9PSExKXJldHVybiBFdDtpZih0aGlzLl9iYWNrdHJhY2spe0d0PSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIEd0PyhFdD10aGlzLnRlc3RfbWF0Y2goR3QsUHRbeHRdKSxFdCE9PSExP0V0OiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgR3Q9dGhpcy5uZXh0KCk7cmV0dXJuIEd0fHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihHdCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKEd0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgR3Q9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gR3Q+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbihHdCl7cmV0dXJuIEd0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoR3R8fDApLEd0Pj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbR3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKEd0KXt0aGlzLmJlZ2luKEd0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihHdCxsbix4dCxQdCl7c3dpdGNoKHh0KXtjYXNlIDA6YnJlYWs7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpyZXR1cm4gMzI7Y2FzZSAzOmJyZWFrO2Nhc2UgNDpyZXR1cm4gdGhpcy5iZWdpbigidGl0bGUiKSwxMztjYXNlIDU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwidGl0bGVfdmFsdWUiO2Nhc2UgNjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMTU7Y2FzZSA3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSA4OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwxNztjYXNlIDk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDEwOnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDExOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEyOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDEzOnJldHVybiAyNTtjYXNlIDE0OnJldHVybiAyNztjYXNlIDE1OnJldHVybiAyNjtjYXNlIDE2OnJldHVybiAyODtjYXNlIDE3OnJldHVybiAyOTtjYXNlIDE4OnJldHVybiAzMDtjYXNlIDE5OnJldHVybiAzMTtjYXNlIDIwOnRoaXMuYmVnaW4oIm1kX3N0cmluZyIpO2JyZWFrO2Nhc2UgMjE6cmV0dXJuIk1EX1NUUiI7Y2FzZSAyMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMzp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDI0OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI1OnJldHVybiJTVFIiO2Nhc2UgMjY6cmV0dXJuIHRoaXMuYmVnaW4oInBvaW50X3N0YXJ0IiksMjI7Y2FzZSAyNzpyZXR1cm4gdGhpcy5iZWdpbigicG9pbnRfeCIpLDIzO2Nhc2UgMjg6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjk6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oInBvaW50X3kiKTticmVhaztjYXNlIDMwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMjQ7Y2FzZSAzMTpyZXR1cm4gNjtjYXNlIDMyOnJldHVybiA0MztjYXNlIDMzOnJldHVybiJDT0xPTiI7Y2FzZSAzNDpyZXR1cm4gNDU7Y2FzZSAzNTpyZXR1cm4gNDQ7Y2FzZSAzNjpyZXR1cm4gNDY7Y2FzZSAzNzpyZXR1cm4gNDY7Y2FzZSAzODpyZXR1cm4gNDc7Y2FzZSAzOTpyZXR1cm4gNDk7Y2FzZSA0MDpyZXR1cm4gNTA7Y2FzZSA0MTpyZXR1cm4gNDg7Y2FzZSA0MjpyZXR1cm4gNDE7Y2FzZSA0MzpyZXR1cm4gNTE7Y2FzZSA0NDpyZXR1cm4gNDI7Y2FzZSA0NTpyZXR1cm4gNTtjYXNlIDQ2OnJldHVybiAzMztjYXNlIDQ3OnJldHVybiA0MDtjYXNlIDQ4OnJldHVybiAzNH19LHJ1bGVzOlsvXig/OiUlKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/OltcblxyXSspL2ksL14oPzolJVteXG5dKikvaSwvXig/OnRpdGxlXGIpL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OiAqeC1heGlzICopL2ksL14oPzogKnktYXhpcyAqKS9pLC9eKD86ICotLSs+ICopL2ksL14oPzogKnF1YWRyYW50LTEgKikvaSwvXig/OiAqcXVhZHJhbnQtMiAqKS9pLC9eKD86ICpxdWFkcmFudC0zICopL2ksL14oPzogKnF1YWRyYW50LTQgKikvaSwvXig/OlsiXVtgXSkvaSwvXig/OlteYCJdKykvaSwvXig/OltgXVsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86XHMqOlxzKlxbXHMqKS9pLC9eKD86KDEpfCgwKC5cZCspPykpL2ksL14oPzpccypcXSAqKS9pLC9eKD86XHMqLFxzKikvaSwvXig/OigxKXwoMCguXGQrKT8pKS9pLC9eKD86ICpxdWFkcmFudENoYXJ0ICopL2ksL14oPzpbQS1aYS16XSspL2ksL14oPzo6KS9pLC9eKD86XCspL2ksL14oPzosKS9pLC9eKD86PSkvaSwvXig/Oj0pL2ksL14oPzpcKikvaSwvXig/OiMpL2ksL14oPzpbXF9dKS9pLC9eKD86XC4pL2ksL14oPzomKS9pLC9eKD86LSkvaSwvXig/OlswLTldKykvaSwvXig/OlxzKS9pLC9eKD86OykvaSwvXig/OlshIiMkJSYnKissLS5gP1xcXy9dKS9pLC9eKD86JCkvaV0sY29uZGl0aW9uczp7cG9pbnRfeTp7cnVsZXM6WzMwXSxpbmNsdXNpdmU6ITF9LHBvaW50X3g6e3J1bGVzOlsyOV0saW5jbHVzaXZlOiExfSxwb2ludF9zdGFydDp7cnVsZXM6WzI3LDI4XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMSwxMl0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls5XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzddLGluY2x1c2l2ZTohMX0sdGl0bGU6e3J1bGVzOls1XSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6WzIxLDIyXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzI0LDI1XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNiw4LDEwLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIzLDI2LDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIF90fSgpO0Z0LmxleGVyPU5lO2Z1bmN0aW9uIGduKCl7dGhpcy55eT17fX1yZXR1cm4gZ24ucHJvdG90eXBlPUZ0LEZ0LlBhcnNlcj1nbixuZXcgZ259KCk7ZnZlLnBhcnNlcj1mdmU7Y29uc3QgVG5uPWZ2ZSxQcD1mMmUoKTtjbGFzcyBDbm57Y29uc3RydWN0b3IoKXt0aGlzLmNvbmZpZz10aGlzLmdldERlZmF1bHRDb25maWcoKSx0aGlzLnRoZW1lQ29uZmlnPXRoaXMuZ2V0RGVmYXVsdFRoZW1lQ29uZmlnKCksdGhpcy5kYXRhPXRoaXMuZ2V0RGVmYXVsdERhdGEoKX1nZXREZWZhdWx0RGF0YSgpe3JldHVybnt0aXRsZVRleHQ6IiIscXVhZHJhbnQxVGV4dDoiIixxdWFkcmFudDJUZXh0OiIiLHF1YWRyYW50M1RleHQ6IiIscXVhZHJhbnQ0VGV4dDoiIix4QXhpc0xlZnRUZXh0OiIiLHhBeGlzUmlnaHRUZXh0OiIiLHlBeGlzQm90dG9tVGV4dDoiIix5QXhpc1RvcFRleHQ6IiIscG9pbnRzOltdfX1nZXREZWZhdWx0Q29uZmlnKCl7dmFyIHMsdSxkLHAsdixiLHksVCxfLEEsUCxSLEYsaixLLGVlLGllLG9lO3JldHVybntzaG93WEF4aXM6ITAsc2hvd1lBeGlzOiEwLHNob3dUaXRsZTohMCxjaGFydEhlaWdodDooKHM9c2gucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOnMuY2hhcnRXaWR0aCl8fDUwMCxjaGFydFdpZHRoOigodT1zaC5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6dS5jaGFydEhlaWdodCl8fDUwMCx0aXRsZVBhZGRpbmc6KChkPXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpkLnRpdGxlUGFkZGluZyl8fDEwLHRpdGxlRm9udFNpemU6KChwPXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpwLnRpdGxlRm9udFNpemUpfHwyMCxxdWFkcmFudFBhZGRpbmc6KCh2PXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDp2LnF1YWRyYW50UGFkZGluZyl8fDUseEF4aXNMYWJlbFBhZGRpbmc6KChiPXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpiLnhBeGlzTGFiZWxQYWRkaW5nKXx8NSx5QXhpc0xhYmVsUGFkZGluZzooKHk9c2gucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOnkueUF4aXNMYWJlbFBhZGRpbmcpfHw1LHhBeGlzTGFiZWxGb250U2l6ZTooKFQ9c2gucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOlQueEF4aXNMYWJlbEZvbnRTaXplKXx8MTYseUF4aXNMYWJlbEZvbnRTaXplOigoXz1zaC5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6Xy55QXhpc0xhYmVsRm9udFNpemUpfHwxNixxdWFkcmFudExhYmVsRm9udFNpemU6KChBPXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpBLnF1YWRyYW50TGFiZWxGb250U2l6ZSl8fDE2LHF1YWRyYW50VGV4dFRvcFBhZGRpbmc6KChQPXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpQLnF1YWRyYW50VGV4dFRvcFBhZGRpbmcpfHw1LHBvaW50VGV4dFBhZGRpbmc6KChSPXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpSLnBvaW50VGV4dFBhZGRpbmcpfHw1LHBvaW50TGFiZWxGb250U2l6ZTooKEY9c2gucXVhZHJhbnRDaGFydCk9PW51bGw/dm9pZCAwOkYucG9pbnRMYWJlbEZvbnRTaXplKXx8MTIscG9pbnRSYWRpdXM6KChqPXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpqLnBvaW50UmFkaXVzKXx8NSx4QXhpc1Bvc2l0aW9uOigoSz1zaC5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6Sy54QXhpc1Bvc2l0aW9uKXx8InRvcCIseUF4aXNQb3NpdGlvbjooKGVlPXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDplZS55QXhpc1Bvc2l0aW9uKXx8ImxlZnQiLHF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aDooKGllPXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDppZS5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgpfHwxLHF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aDooKG9lPXNoLnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpvZS5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgpfHwyfX1nZXREZWZhdWx0VGhlbWVDb25maWcoKXtyZXR1cm57cXVhZHJhbnQxRmlsbDpQcC5xdWFkcmFudDFGaWxsLHF1YWRyYW50MkZpbGw6UHAucXVhZHJhbnQyRmlsbCxxdWFkcmFudDNGaWxsOlBwLnF1YWRyYW50M0ZpbGwscXVhZHJhbnQ0RmlsbDpQcC5xdWFkcmFudDRGaWxsLHF1YWRyYW50MVRleHRGaWxsOlBwLnF1YWRyYW50MVRleHRGaWxsLHF1YWRyYW50MlRleHRGaWxsOlBwLnF1YWRyYW50MlRleHRGaWxsLHF1YWRyYW50M1RleHRGaWxsOlBwLnF1YWRyYW50M1RleHRGaWxsLHF1YWRyYW50NFRleHRGaWxsOlBwLnF1YWRyYW50NFRleHRGaWxsLHF1YWRyYW50UG9pbnRGaWxsOlBwLnF1YWRyYW50UG9pbnRGaWxsLHF1YWRyYW50UG9pbnRUZXh0RmlsbDpQcC5xdWFkcmFudFBvaW50VGV4dEZpbGwscXVhZHJhbnRYQXhpc1RleHRGaWxsOlBwLnF1YWRyYW50WEF4aXNUZXh0RmlsbCxxdWFkcmFudFlBeGlzVGV4dEZpbGw6UHAucXVhZHJhbnRZQXhpc1RleHRGaWxsLHF1YWRyYW50VGl0bGVGaWxsOlBwLnF1YWRyYW50VGl0bGVGaWxsLHF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsOlBwLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsOlBwLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfX1jbGVhcigpe3RoaXMuY29uZmlnPXRoaXMuZ2V0RGVmYXVsdENvbmZpZygpLHRoaXMudGhlbWVDb25maWc9dGhpcy5nZXREZWZhdWx0VGhlbWVDb25maWcoKSx0aGlzLmRhdGE9dGhpcy5nZXREZWZhdWx0RGF0YSgpLFhlLmluZm8oImNsZWFyIGNhbGxlZCIpfXNldERhdGEocyl7dGhpcy5kYXRhPXsuLi50aGlzLmRhdGEsLi4uc319YWRkUG9pbnRzKHMpe3RoaXMuZGF0YS5wb2ludHM9Wy4uLnMsLi4udGhpcy5kYXRhLnBvaW50c119c2V0Q29uZmlnKHMpe1hlLnRyYWNlKCJzZXRDb25maWcgY2FsbGVkIHdpdGg6ICIscyksdGhpcy5jb25maWc9ey4uLnRoaXMuY29uZmlnLC4uLnN9fXNldFRoZW1lQ29uZmlnKHMpe1hlLnRyYWNlKCJzZXRUaGVtZUNvbmZpZyBjYWxsZWQgd2l0aDogIixzKSx0aGlzLnRoZW1lQ29uZmlnPXsuLi50aGlzLnRoZW1lQ29uZmlnLC4uLnN9fWNhbGN1bGF0ZVNwYWNlKHMsdSxkLHApe2NvbnN0IHY9dGhpcy5jb25maWcueEF4aXNMYWJlbFBhZGRpbmcqMit0aGlzLmNvbmZpZy54QXhpc0xhYmVsRm9udFNpemUsYj17dG9wOnM9PT0idG9wIiYmdT92OjAsYm90dG9tOnM9PT0iYm90dG9tIiYmdT92OjB9LHk9dGhpcy5jb25maWcueUF4aXNMYWJlbFBhZGRpbmcqMit0aGlzLmNvbmZpZy55QXhpc0xhYmVsRm9udFNpemUsVD17bGVmdDp0aGlzLmNvbmZpZy55QXhpc1Bvc2l0aW9uPT09ImxlZnQiJiZkP3k6MCxyaWdodDp0aGlzLmNvbmZpZy55QXhpc1Bvc2l0aW9uPT09InJpZ2h0IiYmZD95OjB9LF89dGhpcy5jb25maWcudGl0bGVGb250U2l6ZSt0aGlzLmNvbmZpZy50aXRsZVBhZGRpbmcqMixBPXt0b3A6cD9fOjB9LFA9dGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nK1QubGVmdCxSPXRoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZytiLnRvcCtBLnRvcCxGPXRoaXMuY29uZmlnLmNoYXJ0V2lkdGgtdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nKjItVC5sZWZ0LVQucmlnaHQsaj10aGlzLmNvbmZpZy5jaGFydEhlaWdodC10aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcqMi1iLnRvcC1iLmJvdHRvbS1BLnRvcCxLPUYvMixlZT1qLzI7cmV0dXJue3hBeGlzU3BhY2U6Yix5QXhpc1NwYWNlOlQsdGl0bGVTcGFjZTpBLHF1YWRyYW50U3BhY2U6e3F1YWRyYW50TGVmdDpQLHF1YWRyYW50VG9wOlIscXVhZHJhbnRXaWR0aDpGLHF1YWRyYW50SGFsZldpZHRoOksscXVhZHJhbnRIZWlnaHQ6aixxdWFkcmFudEhhbGZIZWlnaHQ6ZWV9fX1nZXRBeGlzTGFiZWxzKHMsdSxkLHApe2NvbnN0e3F1YWRyYW50U3BhY2U6dix0aXRsZVNwYWNlOmJ9PXAse3F1YWRyYW50SGFsZkhlaWdodDp5LHF1YWRyYW50SGVpZ2h0OlQscXVhZHJhbnRMZWZ0Ol8scXVhZHJhbnRIYWxmV2lkdGg6QSxxdWFkcmFudFRvcDpQLHF1YWRyYW50V2lkdGg6Un09dixGPSEhdGhpcy5kYXRhLnhBeGlzUmlnaHRUZXh0LGo9ISF0aGlzLmRhdGEueUF4aXNUb3BUZXh0LEs9W107cmV0dXJuIHRoaXMuZGF0YS54QXhpc0xlZnRUZXh0JiZ1JiZLLnB1c2goe3RleHQ6dGhpcy5kYXRhLnhBeGlzTGVmdFRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50WEF4aXNUZXh0RmlsbCx4Ol8rKEY/QS8yOjApLHk6cz09PSJ0b3AiP3RoaXMuY29uZmlnLnhBeGlzTGFiZWxQYWRkaW5nK2IudG9wOnRoaXMuY29uZmlnLnhBeGlzTGFiZWxQYWRkaW5nK1ArVCt0aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcsZm9udFNpemU6dGhpcy5jb25maWcueEF4aXNMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOkY/ImNlbnRlciI6ImxlZnQiLGhvcml6b250YWxQb3M6InRvcCIscm90YXRpb246MH0pLHRoaXMuZGF0YS54QXhpc1JpZ2h0VGV4dCYmdSYmSy5wdXNoKHt0ZXh0OnRoaXMuZGF0YS54QXhpc1JpZ2h0VGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRYQXhpc1RleHRGaWxsLHg6XytBKyhGP0EvMjowKSx5OnM9PT0idG9wIj90aGlzLmNvbmZpZy54QXhpc0xhYmVsUGFkZGluZytiLnRvcDp0aGlzLmNvbmZpZy54QXhpc0xhYmVsUGFkZGluZytQK1QrdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nLGZvbnRTaXplOnRoaXMuY29uZmlnLnhBeGlzTGFiZWxGb250U2l6ZSx2ZXJ0aWNhbFBvczpGPyJjZW50ZXIiOiJsZWZ0Iixob3Jpem9udGFsUG9zOiJ0b3AiLHJvdGF0aW9uOjB9KSx0aGlzLmRhdGEueUF4aXNCb3R0b21UZXh0JiZkJiZLLnB1c2goe3RleHQ6dGhpcy5kYXRhLnlBeGlzQm90dG9tVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRZQXhpc1RleHRGaWxsLHg6dGhpcy5jb25maWcueUF4aXNQb3NpdGlvbj09PSJsZWZ0Ij90aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZzp0aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZytfK1IrdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nLHk6UCtULShqP3kvMjowKSxmb250U2l6ZTp0aGlzLmNvbmZpZy55QXhpc0xhYmVsRm9udFNpemUsdmVydGljYWxQb3M6aj8iY2VudGVyIjoibGVmdCIsaG9yaXpvbnRhbFBvczoidG9wIixyb3RhdGlvbjotOTB9KSx0aGlzLmRhdGEueUF4aXNUb3BUZXh0JiZkJiZLLnB1c2goe3RleHQ6dGhpcy5kYXRhLnlBeGlzVG9wVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRZQXhpc1RleHRGaWxsLHg6dGhpcy5jb25maWcueUF4aXNQb3NpdGlvbj09PSJsZWZ0Ij90aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZzp0aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZytfK1IrdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nLHk6UCt5LShqP3kvMjowKSxmb250U2l6ZTp0aGlzLmNvbmZpZy55QXhpc0xhYmVsRm9udFNpemUsdmVydGljYWxQb3M6aj8iY2VudGVyIjoibGVmdCIsaG9yaXpvbnRhbFBvczoidG9wIixyb3RhdGlvbjotOTB9KSxLfWdldFF1YWRyYW50cyhzKXtjb25zdHtxdWFkcmFudFNwYWNlOnV9PXMse3F1YWRyYW50SGFsZkhlaWdodDpkLHF1YWRyYW50TGVmdDpwLHF1YWRyYW50SGFsZldpZHRoOnYscXVhZHJhbnRUb3A6Yn09dSx5PVt7dGV4dDp7dGV4dDp0aGlzLmRhdGEucXVhZHJhbnQxVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQxVGV4dEZpbGwseDowLHk6MCxmb250U2l6ZTp0aGlzLmNvbmZpZy5xdWFkcmFudExhYmVsRm9udFNpemUsdmVydGljYWxQb3M6ImNlbnRlciIsaG9yaXpvbnRhbFBvczoibWlkZGxlIixyb3RhdGlvbjowfSx4OnArdix5OmIsd2lkdGg6dixoZWlnaHQ6ZCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQxRmlsbH0se3RleHQ6e3RleHQ6dGhpcy5kYXRhLnF1YWRyYW50MlRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50MlRleHRGaWxsLHg6MCx5OjAsZm9udFNpemU6dGhpcy5jb25maWcucXVhZHJhbnRMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOiJjZW50ZXIiLGhvcml6b250YWxQb3M6Im1pZGRsZSIscm90YXRpb246MH0seDpwLHk6Yix3aWR0aDp2LGhlaWdodDpkLGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudDJGaWxsfSx7dGV4dDp7dGV4dDp0aGlzLmRhdGEucXVhZHJhbnQzVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQzVGV4dEZpbGwseDowLHk6MCxmb250U2l6ZTp0aGlzLmNvbmZpZy5xdWFkcmFudExhYmVsRm9udFNpemUsdmVydGljYWxQb3M6ImNlbnRlciIsaG9yaXpvbnRhbFBvczoibWlkZGxlIixyb3RhdGlvbjowfSx4OnAseTpiK2Qsd2lkdGg6dixoZWlnaHQ6ZCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQzRmlsbH0se3RleHQ6e3RleHQ6dGhpcy5kYXRhLnF1YWRyYW50NFRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50NFRleHRGaWxsLHg6MCx5OjAsZm9udFNpemU6dGhpcy5jb25maWcucXVhZHJhbnRMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOiJjZW50ZXIiLGhvcml6b250YWxQb3M6Im1pZGRsZSIscm90YXRpb246MH0seDpwK3YseTpiK2Qsd2lkdGg6dixoZWlnaHQ6ZCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQ0RmlsbH1dO2Zvcihjb25zdCBUIG9mIHkpVC50ZXh0Lng9VC54K1Qud2lkdGgvMix0aGlzLmRhdGEucG9pbnRzLmxlbmd0aD09PTA/KFQudGV4dC55PVQueStULmhlaWdodC8yLFQudGV4dC5ob3Jpem9udGFsUG9zPSJtaWRkbGUiKTooVC50ZXh0Lnk9VC55K3RoaXMuY29uZmlnLnF1YWRyYW50VGV4dFRvcFBhZGRpbmcsVC50ZXh0Lmhvcml6b250YWxQb3M9InRvcCIpO3JldHVybiB5fWdldFF1YWRyYW50UG9pbnRzKHMpe2NvbnN0e3F1YWRyYW50U3BhY2U6dX09cyx7cXVhZHJhbnRIZWlnaHQ6ZCxxdWFkcmFudExlZnQ6cCxxdWFkcmFudFRvcDp2LHF1YWRyYW50V2lkdGg6Yn09dSx5PXNEKCkuZG9tYWluKFswLDFdKS5yYW5nZShbcCxiK3BdKSxUPXNEKCkuZG9tYWluKFswLDFdKS5yYW5nZShbZCt2LHZdKTtyZXR1cm4gdGhpcy5kYXRhLnBvaW50cy5tYXAoQT0+KHt4OnkoQS54KSx5OlQoQS55KSxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRQb2ludEZpbGwscmFkaXVzOnRoaXMuY29uZmlnLnBvaW50UmFkaXVzLHRleHQ6e3RleHQ6QS50ZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFBvaW50VGV4dEZpbGwseDp5KEEueCkseTpUKEEueSkrdGhpcy5jb25maWcucG9pbnRUZXh0UGFkZGluZyx2ZXJ0aWNhbFBvczoiY2VudGVyIixob3Jpem9udGFsUG9zOiJ0b3AiLGZvbnRTaXplOnRoaXMuY29uZmlnLnBvaW50TGFiZWxGb250U2l6ZSxyb3RhdGlvbjowfX0pKX1nZXRCb3JkZXJzKHMpe2NvbnN0IHU9dGhpcy5jb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLzIse3F1YWRyYW50U3BhY2U6ZH09cyx7cXVhZHJhbnRIYWxmSGVpZ2h0OnAscXVhZHJhbnRIZWlnaHQ6dixxdWFkcmFudExlZnQ6YixxdWFkcmFudEhhbGZXaWR0aDp5LHF1YWRyYW50VG9wOlQscXVhZHJhbnRXaWR0aDpffT1kO3JldHVyblt7c3Ryb2tlRmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMuY29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCx4MTpiLXUseTE6VCx4MjpiK18rdSx5MjpUfSx7c3Ryb2tlRmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMuY29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCx4MTpiK18seTE6VCt1LHgyOmIrXyx5MjpUK3YtdX0se3N0cm9rZUZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxzdHJva2VXaWR0aDp0aGlzLmNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgseDE6Yi11LHkxOlQrdix4MjpiK18rdSx5MjpUK3Z9LHtzdHJva2VGaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5jb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLHgxOmIseTE6VCt1LHgyOmIseTI6VCt2LXV9LHtzdHJva2VGaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5jb25maWcucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLHgxOmIreSx5MTpUK3UseDI6Yit5LHkyOlQrdi11fSx7c3Ryb2tlRmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMuY29uZmlnLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCx4MTpiK3UseTE6VCtwLHgyOmIrXy11LHkyOlQrcH1dfWdldFRpdGxlKHMpe2lmKHMpcmV0dXJue3RleHQ6dGhpcy5kYXRhLnRpdGxlVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRUaXRsZUZpbGwsZm9udFNpemU6dGhpcy5jb25maWcudGl0bGVGb250U2l6ZSxob3Jpem9udGFsUG9zOiJ0b3AiLHZlcnRpY2FsUG9zOiJjZW50ZXIiLHJvdGF0aW9uOjAseTp0aGlzLmNvbmZpZy50aXRsZVBhZGRpbmcseDp0aGlzLmNvbmZpZy5jaGFydFdpZHRoLzJ9fWJ1aWxkKCl7Y29uc3Qgcz10aGlzLmNvbmZpZy5zaG93WEF4aXMmJiEhKHRoaXMuZGF0YS54QXhpc0xlZnRUZXh0fHx0aGlzLmRhdGEueEF4aXNSaWdodFRleHQpLHU9dGhpcy5jb25maWcuc2hvd1lBeGlzJiYhISh0aGlzLmRhdGEueUF4aXNUb3BUZXh0fHx0aGlzLmRhdGEueUF4aXNCb3R0b21UZXh0KSxkPXRoaXMuY29uZmlnLnNob3dUaXRsZSYmISF0aGlzLmRhdGEudGl0bGVUZXh0LHA9dGhpcy5kYXRhLnBvaW50cy5sZW5ndGg+MD8iYm90dG9tIjp0aGlzLmNvbmZpZy54QXhpc1Bvc2l0aW9uLHY9dGhpcy5jYWxjdWxhdGVTcGFjZShwLHMsdSxkKTtyZXR1cm57cG9pbnRzOnRoaXMuZ2V0UXVhZHJhbnRQb2ludHModikscXVhZHJhbnRzOnRoaXMuZ2V0UXVhZHJhbnRzKHYpLGF4aXNMYWJlbHM6dGhpcy5nZXRBeGlzTGFiZWxzKHAscyx1LHYpLGJvcmRlckxpbmVzOnRoaXMuZ2V0Qm9yZGVycyh2KSx0aXRsZTp0aGlzLmdldFRpdGxlKGQpfX19Y29uc3QgU25uPXF0KCk7ZnVuY3Rpb24gVTcoaSl7cmV0dXJuIFlmKGkudHJpbSgpLFNubil9Y29uc3QgUmc9bmV3IENubjtmdW5jdGlvbiBfbm4oaSl7Umcuc2V0RGF0YSh7cXVhZHJhbnQxVGV4dDpVNyhpLnRleHQpfSl9ZnVuY3Rpb24gQW5uKGkpe1JnLnNldERhdGEoe3F1YWRyYW50MlRleHQ6VTcoaS50ZXh0KX0pfWZ1bmN0aW9uIExubihpKXtSZy5zZXREYXRhKHtxdWFkcmFudDNUZXh0OlU3KGkudGV4dCl9KX1mdW5jdGlvbiBNbm4oaSl7Umcuc2V0RGF0YSh7cXVhZHJhbnQ0VGV4dDpVNyhpLnRleHQpfSl9ZnVuY3Rpb24gRG5uKGkpe1JnLnNldERhdGEoe3hBeGlzTGVmdFRleHQ6VTcoaS50ZXh0KX0pfWZ1bmN0aW9uIElubihpKXtSZy5zZXREYXRhKHt4QXhpc1JpZ2h0VGV4dDpVNyhpLnRleHQpfSl9ZnVuY3Rpb24gT25uKGkpe1JnLnNldERhdGEoe3lBeGlzVG9wVGV4dDpVNyhpLnRleHQpfSl9ZnVuY3Rpb24gTm5uKGkpe1JnLnNldERhdGEoe3lBeGlzQm90dG9tVGV4dDpVNyhpLnRleHQpfSl9ZnVuY3Rpb24gUG5uKGkscyx1KXtSZy5hZGRQb2ludHMoW3t4OnMseTp1LHRleHQ6VTcoaS50ZXh0KX1dKX1mdW5jdGlvbiBCbm4oaSl7Umcuc2V0Q29uZmlnKHtjaGFydFdpZHRoOml9KX1mdW5jdGlvbiBGbm4oaSl7Umcuc2V0Q29uZmlnKHtjaGFydEhlaWdodDppfSl9ZnVuY3Rpb24gUm5uKCl7Y29uc3QgaT1xdCgpLHt0aGVtZVZhcmlhYmxlczpzLHF1YWRyYW50Q2hhcnQ6dX09aTtyZXR1cm4gdSYmUmcuc2V0Q29uZmlnKHUpLFJnLnNldFRoZW1lQ29uZmlnKHtxdWFkcmFudDFGaWxsOnMucXVhZHJhbnQxRmlsbCxxdWFkcmFudDJGaWxsOnMucXVhZHJhbnQyRmlsbCxxdWFkcmFudDNGaWxsOnMucXVhZHJhbnQzRmlsbCxxdWFkcmFudDRGaWxsOnMucXVhZHJhbnQ0RmlsbCxxdWFkcmFudDFUZXh0RmlsbDpzLnF1YWRyYW50MVRleHRGaWxsLHF1YWRyYW50MlRleHRGaWxsOnMucXVhZHJhbnQyVGV4dEZpbGwscXVhZHJhbnQzVGV4dEZpbGw6cy5xdWFkcmFudDNUZXh0RmlsbCxxdWFkcmFudDRUZXh0RmlsbDpzLnF1YWRyYW50NFRleHRGaWxsLHF1YWRyYW50UG9pbnRGaWxsOnMucXVhZHJhbnRQb2ludEZpbGwscXVhZHJhbnRQb2ludFRleHRGaWxsOnMucXVhZHJhbnRQb2ludFRleHRGaWxsLHF1YWRyYW50WEF4aXNUZXh0RmlsbDpzLnF1YWRyYW50WEF4aXNUZXh0RmlsbCxxdWFkcmFudFlBeGlzVGV4dEZpbGw6cy5xdWFkcmFudFlBeGlzVGV4dEZpbGwscXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGw6cy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxxdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbDpzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHF1YWRyYW50VGl0bGVGaWxsOnMucXVhZHJhbnRUaXRsZUZpbGx9KSxSZy5zZXREYXRhKHt0aXRsZVRleHQ6QXAoKX0pLFJnLmJ1aWxkKCl9Y29uc3Qgam5uPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6VG5uLGRiOntzZXRXaWR0aDpCbm4sc2V0SGVpZ2h0OkZubixzZXRRdWFkcmFudDFUZXh0Ol9ubixzZXRRdWFkcmFudDJUZXh0OkFubixzZXRRdWFkcmFudDNUZXh0OkxubixzZXRRdWFkcmFudDRUZXh0Ok1ubixzZXRYQXhpc0xlZnRUZXh0OkRubixzZXRYQXhpc1JpZ2h0VGV4dDpJbm4sc2V0WUF4aXNUb3BUZXh0Ok9ubixzZXRZQXhpc0JvdHRvbVRleHQ6Tm5uLGFkZFBvaW50OlBubixnZXRRdWFkcmFudERhdGE6Um5uLGNsZWFyOmZ1bmN0aW9uKCl7UmcuY2xlYXIoKSxQZygpfSxzZXRBY2NUaXRsZTpCZyxnZXRBY2NUaXRsZTpDcCxzZXREaWFncmFtVGl0bGU6Y20sZ2V0RGlhZ3JhbVRpdGxlOkFwLGdldEFjY0Rlc2NyaXB0aW9uOl9wLHNldEFjY0Rlc2NyaXB0aW9uOlNwfSxyZW5kZXJlcjp7ZHJhdzooaSxzLHUsZCk9Pnt2YXIgZGUsWCxnZTtmdW5jdGlvbiBwKFcpe3JldHVybiBXPT09InRvcCI/ImhhbmdpbmciOiJtaWRkbGUifWZ1bmN0aW9uIHYoVyl7cmV0dXJuIFc9PT0ibGVmdCI/InN0YXJ0IjoibWlkZGxlIn1mdW5jdGlvbiBiKFcpe3JldHVybmB0cmFuc2xhdGUoJHtXLnh9LCAke1cueX0pIHJvdGF0ZSgke1cucm90YXRpb258fDB9KWB9Y29uc3QgeT1xdCgpO1hlLmRlYnVnKGBSZW5kZXJpbmcgcXVhZHJhbnQgY2hhcnQKYCtpKTtjb25zdCBUPXkuc2VjdXJpdHlMZXZlbDtsZXQgXztUPT09InNhbmRib3giJiYoXz1JcigiI2kiK3MpKTtjb25zdCBQPUlyKFQ9PT0ic2FuZGJveCI/Xy5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5Iikuc2VsZWN0KGBbaWQ9IiR7c30iXWApLFI9UC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm1haW4iKSxGPSgoZGU9eS5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6ZGUuY2hhcnRXaWR0aCl8fDUwMCxqPSgoWD15LnF1YWRyYW50Q2hhcnQpPT1udWxsP3ZvaWQgMDpYLmNoYXJ0SGVpZ2h0KXx8NTAwO05nKFAsaixGLCgoZ2U9eS5xdWFkcmFudENoYXJ0KT09bnVsbD92b2lkIDA6Z2UudXNlTWF4V2lkdGgpfHwhMCksUC5hdHRyKCJ2aWV3Qm94IiwiMCAwICIrRisiICIraiksZC5kYi5zZXRIZWlnaHQoaiksZC5kYi5zZXRXaWR0aChGKTtjb25zdCBLPWQuZGIuZ2V0UXVhZHJhbnREYXRhKCksZWU9Ui5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInF1YWRyYW50cyIpLGllPVIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJib3JkZXIiKSxvZT1SLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZGF0YS1wb2ludHMiKSxwZT1SLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWxzIiksYmU9Ui5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRpdGxlIik7Sy50aXRsZSYmYmUuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigiZmlsbCIsSy50aXRsZS5maWxsKS5hdHRyKCJmb250LXNpemUiLEsudGl0bGUuZm9udFNpemUpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIixwKEsudGl0bGUuaG9yaXpvbnRhbFBvcykpLmF0dHIoInRleHQtYW5jaG9yIix2KEsudGl0bGUudmVydGljYWxQb3MpKS5hdHRyKCJ0cmFuc2Zvcm0iLGIoSy50aXRsZSkpLnRleHQoSy50aXRsZS50ZXh0KSxLLmJvcmRlckxpbmVzJiZpZS5zZWxlY3RBbGwoImxpbmUiKS5kYXRhKEsuYm9yZGVyTGluZXMpLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLFc9PlcueDEpLmF0dHIoInkxIixXPT5XLnkxKS5hdHRyKCJ4MiIsVz0+Vy54MikuYXR0cigieTIiLFc9PlcueTIpLnN0eWxlKCJzdHJva2UiLFc9Plcuc3Ryb2tlRmlsbCkuc3R5bGUoInN0cm9rZS13aWR0aCIsVz0+Vy5zdHJva2VXaWR0aCk7Y29uc3QgYWU9ZWUuc2VsZWN0QWxsKCJnLnF1YWRyYW50IikuZGF0YShLLnF1YWRyYW50cykuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInF1YWRyYW50Iik7YWUuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsVz0+Vy54KS5hdHRyKCJ5IixXPT5XLnkpLmF0dHIoIndpZHRoIixXPT5XLndpZHRoKS5hdHRyKCJoZWlnaHQiLFc9PlcuaGVpZ2h0KS5hdHRyKCJmaWxsIixXPT5XLmZpbGwpLGFlLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoImZpbGwiLFc9PlcudGV4dC5maWxsKS5hdHRyKCJmb250LXNpemUiLFc9PlcudGV4dC5mb250U2l6ZSkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLFc9PnAoVy50ZXh0Lmhvcml6b250YWxQb3MpKS5hdHRyKCJ0ZXh0LWFuY2hvciIsVz0+dihXLnRleHQudmVydGljYWxQb3MpKS5hdHRyKCJ0cmFuc2Zvcm0iLFc9PmIoVy50ZXh0KSkudGV4dChXPT5XLnRleHQudGV4dCkscGUuc2VsZWN0QWxsKCJnLmxhYmVsIikuZGF0YShLLmF4aXNMYWJlbHMpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnRleHQoVz0+Vy50ZXh0KS5hdHRyKCJmaWxsIixXPT5XLmZpbGwpLmF0dHIoImZvbnQtc2l6ZSIsVz0+Vy5mb250U2l6ZSkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLFc9PnAoVy5ob3Jpem9udGFsUG9zKSkuYXR0cigidGV4dC1hbmNob3IiLFc9PnYoVy52ZXJ0aWNhbFBvcykpLmF0dHIoInRyYW5zZm9ybSIsVz0+YihXKSk7Y29uc3Qgc2U9b2Uuc2VsZWN0QWxsKCJnLmRhdGEtcG9pbnQiKS5kYXRhKEsucG9pbnRzKS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZGF0YS1wb2ludCIpO3NlLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLFc9PlcueCkuYXR0cigiY3kiLFc9PlcueSkuYXR0cigiciIsVz0+Vy5yYWRpdXMpLmF0dHIoImZpbGwiLFc9PlcuZmlsbCksc2UuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkudGV4dChXPT5XLnRleHQudGV4dCkuYXR0cigiZmlsbCIsVz0+Vy50ZXh0LmZpbGwpLmF0dHIoImZvbnQtc2l6ZSIsVz0+Vy50ZXh0LmZvbnRTaXplKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsVz0+cChXLnRleHQuaG9yaXpvbnRhbFBvcykpLmF0dHIoInRleHQtYW5jaG9yIixXPT52KFcudGV4dC52ZXJ0aWNhbFBvcykpLmF0dHIoInRyYW5zZm9ybSIsVz0+YihXLnRleHQpKX19LHN0eWxlczooKT0+IiJ9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBkdmU9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihQZSxqZSxJZSxTZSl7Zm9yKEllPUllfHx7fSxTZT1QZS5sZW5ndGg7U2UtLTtJZVtQZVtTZV1dPWplKTtyZXR1cm4gSWV9LHM9WzEsMTAsMTIsMTQsMTYsMTgsMTksMjEsMjNdLHU9WzIsNl0sZD1bMSwzXSxwPVsxLDVdLHY9WzEsNl0sYj1bMSw3XSx5PVsxLDUsMTAsMTIsMTQsMTYsMTgsMTksMjEsMjMsMzQsMzUsMzZdLFQ9WzEsMjVdLF89WzEsMjZdLEE9WzEsMjhdLFA9WzEsMjldLFI9WzEsMzBdLEY9WzEsMzFdLGo9WzEsMzJdLEs9WzEsMzNdLGVlPVsxLDM0XSxpZT1bMSwzNV0sb2U9WzEsMzZdLHBlPVsxLDM3XSxiZT1bMSw0M10sYWU9WzEsNDJdLG5lPVsxLDQ3XSxzZT1bMSw1MF0sZGU9WzEsMTAsMTIsMTQsMTYsMTgsMTksMjEsMjMsMzQsMzUsMzZdLFg9WzEsMTAsMTIsMTQsMTYsMTgsMTksMjEsMjMsMjQsMjYsMjcsMjgsMzQsMzUsMzZdLGdlPVsxLDEwLDEyLDE0LDE2LDE4LDE5LDIxLDIzLDI0LDI2LDI3LDI4LDM0LDM1LDM2LDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwXSxXPVsxLDY0XSx4ZT17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsZW9sOjQsWFlDSEFSVDo1LGNoYXJ0Q29uZmlnOjYsZG9jdW1lbnQ6NyxDSEFSVF9PUklFTlRBVElPTjo4LHN0YXRlbWVudDo5LHRpdGxlOjEwLHRleHQ6MTEsWF9BWElTOjEyLHBhcnNlWEF4aXM6MTMsWV9BWElTOjE0LHBhcnNlWUF4aXM6MTUsTElORToxNixwbG90RGF0YToxNyxCQVI6MTgsYWNjX3RpdGxlOjE5LGFjY190aXRsZV92YWx1ZToyMCxhY2NfZGVzY3I6MjEsYWNjX2Rlc2NyX3ZhbHVlOjIyLGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MjMsU1FVQVJFX0JSQUNFU19TVEFSVDoyNCxjb21tYVNlcGFyYXRlZE51bWJlcnM6MjUsU1FVQVJFX0JSQUNFU19FTkQ6MjYsTlVNQkVSX1dJVEhfREVDSU1BTDoyNyxDT01NQToyOCx4QXhpc0RhdGE6MjksYmFuZERhdGE6MzAsQVJST1dfREVMSU1JVEVSOjMxLGNvbW1hU2VwYXJhdGVkVGV4dHM6MzIseUF4aXNEYXRhOjMzLE5FV0xJTkU6MzQsU0VNSTozNSxFT0Y6MzYsYWxwaGFOdW06MzcsU1RSOjM4LE1EX1NUUjozOSxhbHBoYU51bVRva2VuOjQwLEFNUDo0MSxOVU06NDIsQUxQSEE6NDMsUExVUzo0NCxFUVVBTFM6NDUsTVVMVDo0NixET1Q6NDcsQlJLVDo0OCxNSU5VUzo0OSxVTkRFUlNDT1JFOjUwLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw1OiJYWUNIQVJUIiw4OiJDSEFSVF9PUklFTlRBVElPTiIsMTA6InRpdGxlIiwxMjoiWF9BWElTIiwxNDoiWV9BWElTIiwxNjoiTElORSIsMTg6IkJBUiIsMTk6ImFjY190aXRsZSIsMjA6ImFjY190aXRsZV92YWx1ZSIsMjE6ImFjY19kZXNjciIsMjI6ImFjY19kZXNjcl92YWx1ZSIsMjM6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDI0OiJTUVVBUkVfQlJBQ0VTX1NUQVJUIiwyNjoiU1FVQVJFX0JSQUNFU19FTkQiLDI3OiJOVU1CRVJfV0lUSF9ERUNJTUFMIiwyODoiQ09NTUEiLDMxOiJBUlJPV19ERUxJTUlURVIiLDM0OiJORVdMSU5FIiwzNToiU0VNSSIsMzY6IkVPRiIsMzg6IlNUUiIsMzk6Ik1EX1NUUiIsNDE6IkFNUCIsNDI6Ik5VTSIsNDM6IkFMUEhBIiw0NDoiUExVUyIsNDU6IkVRVUFMUyIsNDY6Ik1VTFQiLDQ3OiJET1QiLDQ4OiJCUktUIiw0OToiTUlOVVMiLDUwOiJVTkRFUlNDT1JFIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFszLDNdLFszLDJdLFszLDFdLFs2LDFdLFs3LDBdLFs3LDJdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDNdLFs5LDJdLFs5LDNdLFs5LDJdLFs5LDJdLFs5LDFdLFsxNywzXSxbMjUsM10sWzI1LDFdLFsxMywxXSxbMTMsMl0sWzEzLDFdLFsyOSwxXSxbMjksM10sWzMwLDNdLFszMiwzXSxbMzIsMV0sWzE1LDFdLFsxNSwyXSxbMTUsMV0sWzMzLDNdLFs0LDFdLFs0LDFdLFs0LDFdLFsxMSwxXSxbMTEsMV0sWzExLDFdLFszNywxXSxbMzcsMl0sWzQwLDFdLFs0MCwxXSxbNDAsMV0sWzQwLDFdLFs0MCwxXSxbNDAsMV0sWzQwLDFdLFs0MCwxXSxbNDAsMV0sWzQwLDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKGplLEllLFNlLENlLGtlLEtlLEZ0KXt2YXIgTmU9S2UubGVuZ3RoLTE7c3dpdGNoKGtlKXtjYXNlIDU6Q2Uuc2V0T3JpZW50YXRpb24oS2VbTmVdKTticmVhaztjYXNlIDk6Q2Uuc2V0RGlhZ3JhbVRpdGxlKEtlW05lXS50ZXh0LnRyaW0oKSk7YnJlYWs7Y2FzZSAxMjpDZS5zZXRMaW5lRGF0YSh7dGV4dDoiIix0eXBlOiJ0ZXh0In0sS2VbTmVdKTticmVhaztjYXNlIDEzOkNlLnNldExpbmVEYXRhKEtlW05lLTFdLEtlW05lXSk7YnJlYWs7Y2FzZSAxNDpDZS5zZXRCYXJEYXRhKHt0ZXh0OiIiLHR5cGU6InRleHQifSxLZVtOZV0pO2JyZWFrO2Nhc2UgMTU6Q2Uuc2V0QmFyRGF0YShLZVtOZS0xXSxLZVtOZV0pO2JyZWFrO2Nhc2UgMTY6dGhpcy4kPUtlW05lXS50cmltKCksQ2Uuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDE3OmNhc2UgMTg6dGhpcy4kPUtlW05lXS50cmltKCksQ2Uuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDE5OnRoaXMuJD1LZVtOZS0xXTticmVhaztjYXNlIDIwOnRoaXMuJD1bTnVtYmVyKEtlW05lLTJdKSwuLi5LZVtOZV1dO2JyZWFrO2Nhc2UgMjE6dGhpcy4kPVtOdW1iZXIoS2VbTmVdKV07YnJlYWs7Y2FzZSAyMjpDZS5zZXRYQXhpc1RpdGxlKEtlW05lXSk7YnJlYWs7Y2FzZSAyMzpDZS5zZXRYQXhpc1RpdGxlKEtlW05lLTFdKTticmVhaztjYXNlIDI0OkNlLnNldFhBeGlzVGl0bGUoe3R5cGU6InRleHQiLHRleHQ6IiJ9KTticmVhaztjYXNlIDI1OkNlLnNldFhBeGlzQmFuZChLZVtOZV0pO2JyZWFrO2Nhc2UgMjY6Q2Uuc2V0WEF4aXNSYW5nZURhdGEoTnVtYmVyKEtlW05lLTJdKSxOdW1iZXIoS2VbTmVdKSk7YnJlYWs7Y2FzZSAyNzp0aGlzLiQ9S2VbTmUtMV07YnJlYWs7Y2FzZSAyODp0aGlzLiQ9W0tlW05lLTJdLC4uLktlW05lXV07YnJlYWs7Y2FzZSAyOTp0aGlzLiQ9W0tlW05lXV07YnJlYWs7Y2FzZSAzMDpDZS5zZXRZQXhpc1RpdGxlKEtlW05lXSk7YnJlYWs7Y2FzZSAzMTpDZS5zZXRZQXhpc1RpdGxlKEtlW05lLTFdKTticmVhaztjYXNlIDMyOkNlLnNldFlBeGlzVGl0bGUoe3R5cGU6InRleHQiLHRleHQ6IiJ9KTticmVhaztjYXNlIDMzOkNlLnNldFlBeGlzUmFuZ2VEYXRhKE51bWJlcihLZVtOZS0yXSksTnVtYmVyKEtlW05lXSkpO2JyZWFrO2Nhc2UgMzc6dGhpcy4kPXt0ZXh0OktlW05lXSx0eXBlOiJ0ZXh0In07YnJlYWs7Y2FzZSAzODp0aGlzLiQ9e3RleHQ6S2VbTmVdLHR5cGU6InRleHQifTticmVhaztjYXNlIDM5OnRoaXMuJD17dGV4dDpLZVtOZV0sdHlwZToibWFya2Rvd24ifTticmVhaztjYXNlIDQwOnRoaXMuJD1LZVtOZV07YnJlYWs7Y2FzZSA0MTp0aGlzLiQ9S2VbTmUtMV0rIiIrS2VbTmVdO2JyZWFrfX0sdGFibGU6W2kocyx1LHszOjEsNDoyLDc6NCw1OmQsMzQ6cCwzNTp2LDM2OmJ9KSx7MTpbM119LGkocyx1LHs0OjIsNzo0LDM6OCw1OmQsMzQ6cCwzNTp2LDM2OmJ9KSxpKHMsdSx7NDoyLDc6NCw2OjksMzoxMCw1OmQsODpbMSwxMV0sMzQ6cCwzNTp2LDM2OmJ9KSx7MTpbMiw0XSw5OjEyLDEwOlsxLDEzXSwxMjpbMSwxNF0sMTQ6WzEsMTVdLDE2OlsxLDE2XSwxODpbMSwxN10sMTk6WzEsMThdLDIxOlsxLDE5XSwyMzpbMSwyMF19LGkoeSxbMiwzNF0pLGkoeSxbMiwzNV0pLGkoeSxbMiwzNl0pLHsxOlsyLDFdfSxpKHMsdSx7NDoyLDc6NCwzOjIxLDU6ZCwzNDpwLDM1OnYsMzY6Yn0pLHsxOlsyLDNdfSxpKHksWzIsNV0pLGkocyxbMiw3XSx7NDoyMiwzNDpwLDM1OnYsMzY6Yn0pLHsxMToyMywzNzoyNCwzODpULDM5Ol8sNDA6MjcsNDE6QSw0MjpQLDQzOlIsNDQ6Riw0NTpqLDQ2OkssNDc6ZWUsNDg6aWUsNDk6b2UsNTA6cGV9LHsxMTozOSwxMzozOCwyNDpiZSwyNzphZSwyOTo0MCwzMDo0MSwzNzoyNCwzODpULDM5Ol8sNDA6MjcsNDE6QSw0MjpQLDQzOlIsNDQ6Riw0NTpqLDQ2OkssNDc6ZWUsNDg6aWUsNDk6b2UsNTA6cGV9LHsxMTo0NSwxNTo0NCwyNzpuZSwzMzo0NiwzNzoyNCwzODpULDM5Ol8sNDA6MjcsNDE6QSw0MjpQLDQzOlIsNDQ6Riw0NTpqLDQ2OkssNDc6ZWUsNDg6aWUsNDk6b2UsNTA6cGV9LHsxMTo0OSwxNzo0OCwyNDpzZSwzNzoyNCwzODpULDM5Ol8sNDA6MjcsNDE6QSw0MjpQLDQzOlIsNDQ6Riw0NTpqLDQ2OkssNDc6ZWUsNDg6aWUsNDk6b2UsNTA6cGV9LHsxMTo1MiwxNzo1MSwyNDpzZSwzNzoyNCwzODpULDM5Ol8sNDA6MjcsNDE6QSw0MjpQLDQzOlIsNDQ6Riw0NTpqLDQ2OkssNDc6ZWUsNDg6aWUsNDk6b2UsNTA6cGV9LHsyMDpbMSw1M119LHsyMjpbMSw1NF19LGkoZGUsWzIsMThdKSx7MTpbMiwyXX0saShkZSxbMiw4XSksaShkZSxbMiw5XSksaShYLFsyLDM3XSx7NDA6NTUsNDE6QSw0MjpQLDQzOlIsNDQ6Riw0NTpqLDQ2OkssNDc6ZWUsNDg6aWUsNDk6b2UsNTA6cGV9KSxpKFgsWzIsMzhdKSxpKFgsWzIsMzldKSxpKGdlLFsyLDQwXSksaShnZSxbMiw0Ml0pLGkoZ2UsWzIsNDNdKSxpKGdlLFsyLDQ0XSksaShnZSxbMiw0NV0pLGkoZ2UsWzIsNDZdKSxpKGdlLFsyLDQ3XSksaShnZSxbMiw0OF0pLGkoZ2UsWzIsNDldKSxpKGdlLFsyLDUwXSksaShnZSxbMiw1MV0pLGkoZGUsWzIsMTBdKSxpKGRlLFsyLDIyXSx7MzA6NDEsMjk6NTYsMjQ6YmUsMjc6YWV9KSxpKGRlLFsyLDI0XSksaShkZSxbMiwyNV0pLHszMTpbMSw1N119LHsxMTo1OSwzMjo1OCwzNzoyNCwzODpULDM5Ol8sNDA6MjcsNDE6QSw0MjpQLDQzOlIsNDQ6Riw0NTpqLDQ2OkssNDc6ZWUsNDg6aWUsNDk6b2UsNTA6cGV9LGkoZGUsWzIsMTFdKSxpKGRlLFsyLDMwXSx7MzM6NjAsMjc6bmV9KSxpKGRlLFsyLDMyXSksezMxOlsxLDYxXX0saShkZSxbMiwxMl0pLHsxNzo2MiwyNDpzZX0sezI1OjYzLDI3Old9LGkoZGUsWzIsMTRdKSx7MTc6NjUsMjQ6c2V9LGkoZGUsWzIsMTZdKSxpKGRlLFsyLDE3XSksaShnZSxbMiw0MV0pLGkoZGUsWzIsMjNdKSx7Mjc6WzEsNjZdfSx7MjY6WzEsNjddfSx7MjY6WzIsMjldLDI4OlsxLDY4XX0saShkZSxbMiwzMV0pLHsyNzpbMSw2OV19LGkoZGUsWzIsMTNdKSx7MjY6WzEsNzBdfSx7MjY6WzIsMjFdLDI4OlsxLDcxXX0saShkZSxbMiwxNV0pLGkoZGUsWzIsMjZdKSxpKGRlLFsyLDI3XSksezExOjU5LDMyOjcyLDM3OjI0LDM4OlQsMzk6Xyw0MDoyNyw0MTpBLDQyOlAsNDM6Uiw0NDpGLDQ1OmosNDY6Syw0NzplZSw0ODppZSw0OTpvZSw1MDpwZX0saShkZSxbMiwzM10pLGkoZGUsWzIsMTldKSx7MjU6NzMsMjc6V30sezI2OlsyLDI4XX0sezI2OlsyLDIwXX1dLGRlZmF1bHRBY3Rpb25zOns4OlsyLDFdLDEwOlsyLDNdLDIxOlsyLDJdLDcyOlsyLDI4XSw3MzpbMiwyMF19LHBhcnNlRXJyb3I6ZnVuY3Rpb24oamUsSWUpe2lmKEllLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoamUpO2Vsc2V7dmFyIFNlPW5ldyBFcnJvcihqZSk7dGhyb3cgU2UuaGFzaD1JZSxTZX19LHBhcnNlOmZ1bmN0aW9uKGplKXt2YXIgSWU9dGhpcyxTZT1bMF0sQ2U9W10sa2U9W251bGxdLEtlPVtdLEZ0PXRoaXMudGFibGUsTmU9IiIsZ249MCxfdD0wLEV0PTIsR3Q9MSxsbj1LZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSx4dD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLFB0PXt5eTp7fX07Zm9yKHZhciBRZSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LFFlKSYmKFB0Lnl5W1FlXT10aGlzLnl5W1FlXSk7eHQuc2V0SW5wdXQoamUsUHQueXkpLFB0Lnl5LmxleGVyPXh0LFB0Lnl5LnBhcnNlcj10aGlzLHR5cGVvZiB4dC55eWxsb2M+InUiJiYoeHQueXlsbG9jPXt9KTt2YXIgRHQ9eHQueXlsbG9jO0tlLnB1c2goRHQpO3ZhciBrdD14dC5vcHRpb25zJiZ4dC5vcHRpb25zLnJhbmdlczt0eXBlb2YgUHQueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9UHQueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gT24oKXt2YXIgcW47cmV0dXJuIHFuPUNlLnBvcCgpfHx4dC5sZXgoKXx8R3QsdHlwZW9mIHFuIT0ibnVtYmVyIiYmKHFuIGluc3RhbmNlb2YgQXJyYXkmJihDZT1xbixxbj1DZS5wb3AoKSkscW49SWUuc3ltYm9sc19bcW5dfHxxbikscW59Zm9yKHZhciBodCx6cix5dCxqaSx4aT17fSxNYSx6cyxhbyxUcjs7KXtpZih6cj1TZVtTZS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t6cl0/eXQ9dGhpcy5kZWZhdWx0QWN0aW9uc1t6cl06KChodD09PW51bGx8fHR5cGVvZiBodD4idSIpJiYoaHQ9T24oKSkseXQ9RnRbenJdJiZGdFt6cl1baHRdKSx0eXBlb2YgeXQ+InUifHwheXQubGVuZ3RofHwheXRbMF0pe3ZhciBGbj0iIjtUcj1bXTtmb3IoTWEgaW4gRnRbenJdKXRoaXMudGVybWluYWxzX1tNYV0mJk1hPkV0JiZUci5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bTWFdKyInIik7eHQuc2hvd1Bvc2l0aW9uP0ZuPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGduKzEpK2A6CmAreHQuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtUci5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW2h0XXx8aHQpKyInIjpGbj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhnbisxKSsiOiBVbmV4cGVjdGVkICIrKGh0PT1HdD8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1todF18fGh0KSsiJyIpLHRoaXMucGFyc2VFcnJvcihGbix7dGV4dDp4dC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19baHRdfHxodCxsaW5lOnh0Lnl5bGluZW5vLGxvYzpEdCxleHBlY3RlZDpUcn0pfWlmKHl0WzBdaW5zdGFuY2VvZiBBcnJheSYmeXQubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit6cisiLCB0b2tlbjogIitodCk7c3dpdGNoKHl0WzBdKXtjYXNlIDE6U2UucHVzaChodCksa2UucHVzaCh4dC55eXRleHQpLEtlLnB1c2goeHQueXlsbG9jKSxTZS5wdXNoKHl0WzFdKSxodD1udWxsLF90PXh0Lnl5bGVuZyxOZT14dC55eXRleHQsZ249eHQueXlsaW5lbm8sRHQ9eHQueXlsbG9jO2JyZWFrO2Nhc2UgMjppZih6cz10aGlzLnByb2R1Y3Rpb25zX1t5dFsxXV1bMV0seGkuJD1rZVtrZS5sZW5ndGgtenNdLHhpLl8kPXtmaXJzdF9saW5lOktlW0tlLmxlbmd0aC0oenN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpLZVtLZS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpLZVtLZS5sZW5ndGgtKHpzfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOktlW0tlLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sa3QmJih4aS5fJC5yYW5nZT1bS2VbS2UubGVuZ3RoLSh6c3x8MSldLnJhbmdlWzBdLEtlW0tlLmxlbmd0aC0xXS5yYW5nZVsxXV0pLGppPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseSh4aSxbTmUsX3QsZ24sUHQueXkseXRbMV0sa2UsS2VdLmNvbmNhdChsbikpLHR5cGVvZiBqaTwidSIpcmV0dXJuIGppO3pzJiYoU2U9U2Uuc2xpY2UoMCwtMSp6cyoyKSxrZT1rZS5zbGljZSgwLC0xKnpzKSxLZT1LZS5zbGljZSgwLC0xKnpzKSksU2UucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t5dFsxXV1bMF0pLGtlLnB1c2goeGkuJCksS2UucHVzaCh4aS5fJCksYW89RnRbU2VbU2UubGVuZ3RoLTJdXVtTZVtTZS5sZW5ndGgtMV1dLFNlLnB1c2goYW8pO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxVPWZ1bmN0aW9uKCl7dmFyIFBlPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKEllLFNlKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKEllLFNlKTtlbHNlIHRocm93IG5ldyBFcnJvcihJZSl9LHNldElucHV0OmZ1bmN0aW9uKGplLEllKXtyZXR1cm4gdGhpcy55eT1JZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9amUsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIGplPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1qZSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9amUsdGhpcy5tYXRjaGVkKz1qZTt2YXIgSWU9amUubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBJZT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksamV9LHVucHV0OmZ1bmN0aW9uKGplKXt2YXIgSWU9amUubGVuZ3RoLFNlPWplLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9amUrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLUllKSx0aGlzLm9mZnNldC09SWU7dmFyIENlPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLFNlLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09U2UubGVuZ3RoLTEpO3ZhciBrZT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46U2U/KFNlLmxlbmd0aD09PUNlLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrQ2VbQ2UubGVuZ3RoLVNlLmxlbmd0aF0ubGVuZ3RoLVNlWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tSWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1ba2VbMF0sa2VbMF0rdGhpcy55eWxlbmctSWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihqZSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKGplKSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBqZT10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKGplLmxlbmd0aD4yMD8iLi4uIjoiIikramUuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgamU9dGhpcy5tYXRjaDtyZXR1cm4gamUubGVuZ3RoPDIwJiYoamUrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLWplLmxlbmd0aCkpLChqZS5zdWJzdHIoMCwyMCkrKGplLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgamU9dGhpcy5wYXN0SW5wdXQoKSxJZT1uZXcgQXJyYXkoamUubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gamUrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK0llKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihqZSxJZSl7dmFyIFNlLENlLGtlO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihrZT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihrZS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxDZT1qZVswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksQ2UmJih0aGlzLnl5bGluZW5vKz1DZS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpDZT9DZVtDZS5sZW5ndGgtMV0ubGVuZ3RoLUNlW0NlLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK2plWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPWplWzBdLHRoaXMubWF0Y2grPWplWzBdLHRoaXMubWF0Y2hlcz1qZSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShqZVswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9amVbMF0sU2U9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsSWUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksU2UpcmV0dXJuIFNlO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBLZSBpbiBrZSl0aGlzW0tlXT1rZVtLZV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgamUsSWUsU2UsQ2U7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIga2U9dGhpcy5fY3VycmVudFJ1bGVzKCksS2U9MDtLZTxrZS5sZW5ndGg7S2UrKylpZihTZT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2tlW0tlXV0pLFNlJiYoIUllfHxTZVswXS5sZW5ndGg+SWVbMF0ubGVuZ3RoKSl7aWYoSWU9U2UsQ2U9S2UsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoamU9dGhpcy50ZXN0X21hdGNoKFNlLGtlW0tlXSksamUhPT0hMSlyZXR1cm4gamU7aWYodGhpcy5fYmFja3RyYWNrKXtJZT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBJZT8oamU9dGhpcy50ZXN0X21hdGNoKEllLGtlW0NlXSksamUhPT0hMT9qZTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIEllPXRoaXMubmV4dCgpO3JldHVybiBJZXx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24oSWUpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChJZSl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIEllPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIEllPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oSWUpe3JldHVybiBJZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKEllfHwwKSxJZT49MD90aGlzLmNvbmRpdGlvblN0YWNrW0llXToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihJZSl7dGhpcy5iZWdpbihJZSl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oSWUsU2UsQ2Usa2Upe3N3aXRjaChDZSl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpicmVhaztjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwzNDtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwzNDtjYXNlIDQ6cmV0dXJuIDM0O2Nhc2UgNTpicmVhaztjYXNlIDY6cmV0dXJuIDEwO2Nhc2UgNzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImFjY190aXRsZSIpLDE5O2Nhc2UgODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgOTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImFjY19kZXNjciIpLDIxO2Nhc2UgMTA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDExOnRoaXMucHVzaFN0YXRlKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAxMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMzpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAxNDpyZXR1cm4gNTtjYXNlIDE1OnJldHVybiA4O2Nhc2UgMTY6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJheGlzX2RhdGEiKSwiWF9BWElTIjtjYXNlIDE3OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiYXhpc19kYXRhIiksIllfQVhJUyI7Y2FzZSAxODpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImF4aXNfYmFuZF9kYXRhIiksMjQ7Y2FzZSAxOTpyZXR1cm4gMzE7Y2FzZSAyMDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImRhdGEiKSwxNjtjYXNlIDIxOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiZGF0YSIpLDE4O2Nhc2UgMjI6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJkYXRhX2lubmVyIiksMjQ7Y2FzZSAyMzpyZXR1cm4gMjc7Y2FzZSAyNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDI2O2Nhc2UgMjU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjY6dGhpcy5wdXNoU3RhdGUoInN0cmluZyIpO2JyZWFrO2Nhc2UgMjc6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjg6cmV0dXJuIlNUUiI7Y2FzZSAyOTpyZXR1cm4gMjQ7Y2FzZSAzMDpyZXR1cm4gMjY7Y2FzZSAzMTpyZXR1cm4gNDM7Y2FzZSAzMjpyZXR1cm4iQ09MT04iO2Nhc2UgMzM6cmV0dXJuIDQ0O2Nhc2UgMzQ6cmV0dXJuIDI4O2Nhc2UgMzU6cmV0dXJuIDQ1O2Nhc2UgMzY6cmV0dXJuIDQ2O2Nhc2UgMzc6cmV0dXJuIDQ4O2Nhc2UgMzg6cmV0dXJuIDUwO2Nhc2UgMzk6cmV0dXJuIDQ3O2Nhc2UgNDA6cmV0dXJuIDQxO2Nhc2UgNDE6cmV0dXJuIDQ5O2Nhc2UgNDI6cmV0dXJuIDQyO2Nhc2UgNDM6YnJlYWs7Y2FzZSA0NDpyZXR1cm4gMzU7Y2FzZSA0NTpyZXR1cm4gMzZ9fSxydWxlczpbL14oPzolJSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzooXHI/XG4pKS9pLC9eKD86KFxyP1xuKSkvaSwvXig/OltcblxyXSspL2ksL14oPzolJVteXG5dKikvaSwvXig/OnRpdGxlXGIpL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86XHspL2ksL14oPzpbXlx9XSopL2ksL14oPzp4eWNoYXJ0LWJldGFcYikvaSwvXig/Oig/OnZlcnRpY2FsfGhvcml6b250YWwpKS9pLC9eKD86eC1heGlzXGIpL2ksL14oPzp5LWF4aXNcYikvaSwvXig/OlxbKS9pLC9eKD86LS0+KS9pLC9eKD86bGluZVxiKS9pLC9eKD86YmFyXGIpL2ksL14oPzpcWykvaSwvXig/OlsrLV0/KD86XGQrKD86XC5cZCspP3xcLlxkKykpL2ksL14oPzpcXSkvaSwvXig/Oig/OmBcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx7IHRoaXNcLnB1c2hTdGF0ZVwobWRfc3RyaW5nXCk7IFx9XG48bWRfc3RyaW5nPlwoXD86XChcPyFgIlwpXC5cKVwrICAgICAgICAgICAgICAgICAgXHsgcmV0dXJuIE1EX1NUUjsgXH1cbjxtZF9zdHJpbmc+XChcPzpgKSkvaSwvXig/OlsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86XFspL2ksL14oPzpcXSkvaSwvXig/OltBLVphLXpdKykvaSwvXig/OjopL2ksL14oPzpcKykvaSwvXig/OiwpL2ksL14oPzo9KS9pLC9eKD86XCopL2ksL14oPzojKS9pLC9eKD86W1xfXSkvaSwvXig/OlwuKS9pLC9eKD86JikvaSwvXig/Oi0pL2ksL14oPzpbMC05XSspL2ksL14oPzpccyspL2ksL14oPzo7KS9pLC9eKD86JCkvaV0sY29uZGl0aW9uczp7ZGF0YV9pbm5lcjp7cnVsZXM6WzAsMSw0LDUsNiw3LDksMTEsMTQsMTUsMTYsMTcsMjAsMjEsMjMsMjQsMjUsMjYsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDVdLGluY2x1c2l2ZTohMH0sZGF0YTp7cnVsZXM6WzAsMSwzLDQsNSw2LDcsOSwxMSwxNCwxNSwxNiwxNywyMCwyMSwyMiwyNSwyNiwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NV0saW5jbHVzaXZlOiEwfSxheGlzX2JhbmRfZGF0YTp7cnVsZXM6WzAsMSw0LDUsNiw3LDksMTEsMTQsMTUsMTYsMTcsMjAsMjEsMjQsMjUsMjYsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDVdLGluY2x1c2l2ZTohMH0sYXhpc19kYXRhOntydWxlczpbMCwxLDIsNCw1LDYsNyw5LDExLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIzLDI1LDI2LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1XSxpbmNsdXNpdmU6ITB9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMiwxM10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOlsxMF0saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOls4XSxpbmNsdXNpdmU6ITF9LHRpdGxlOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlsyNywyOF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDQsNSw2LDcsOSwxMSwxNCwxNSwxNiwxNywyMCwyMSwyNSwyNiwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NV0saW5jbHVzaXZlOiEwfX19O3JldHVybiBQZX0oKTt4ZS5sZXhlcj1VO2Z1bmN0aW9uIEZlKCl7dGhpcy55eT17fX1yZXR1cm4gRmUucHJvdG90eXBlPXhlLHhlLlBhcnNlcj1GZSxuZXcgRmV9KCk7ZHZlLnBhcnNlcj1kdmU7Y29uc3QgJG5uPWR2ZTtmdW5jdGlvbiBmR2UoaSl7cmV0dXJuIGkudHlwZT09PSJiYXIifWZ1bmN0aW9uIGRHZShpKXtyZXR1cm4gaS50eXBlPT09ImJhbmQifWZ1bmN0aW9uICRSKGkpe3JldHVybiBpLnR5cGU9PT0ibGluZWFyIn1jbGFzcyBnR2V7Y29uc3RydWN0b3Iocyl7dGhpcy5wYXJlbnRHcm91cD1zfWdldE1heERpbWVuc2lvbihzLHUpe2lmKCF0aGlzLnBhcmVudEdyb3VwKXJldHVybnt3aWR0aDpzLnJlZHVjZSgodixiKT0+TWF0aC5tYXgoYi5sZW5ndGgsdiksMCkqdSxoZWlnaHQ6dX07Y29uc3QgZD17d2lkdGg6MCxoZWlnaHQ6MH0scD10aGlzLnBhcmVudEdyb3VwLmFwcGVuZCgiZyIpLmF0dHIoInZpc2liaWxpdHkiLCJoaWRkZW4iKS5hdHRyKCJmb250LXNpemUiLHUpO2Zvcihjb25zdCB2IG9mIHMpe2NvbnN0IGI9Ulp0KHAsMSx2KSx5PWI/Yi53aWR0aDp2Lmxlbmd0aCp1LFQ9Yj9iLmhlaWdodDp1O2Qud2lkdGg9TWF0aC5tYXgoZC53aWR0aCx5KSxkLmhlaWdodD1NYXRoLm1heChkLmhlaWdodCxUKX1yZXR1cm4gcC5yZW1vdmUoKSxkfX1jb25zdCBwR2U9LjcsYkdlPS4yO2NsYXNzIG1HZXtjb25zdHJ1Y3RvcihzLHUsZCxwKXt0aGlzLmF4aXNDb25maWc9cyx0aGlzLnRpdGxlPXUsdGhpcy50ZXh0RGltZW5zaW9uQ2FsY3VsYXRvcj1kLHRoaXMuYXhpc1RoZW1lQ29uZmlnPXAsdGhpcy5ib3VuZGluZ1JlY3Q9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5heGlzUG9zaXRpb249ImxlZnQiLHRoaXMuc2hvd1RpdGxlPSExLHRoaXMuc2hvd0xhYmVsPSExLHRoaXMuc2hvd1RpY2s9ITEsdGhpcy5zaG93QXhpc0xpbmU9ITEsdGhpcy5vdXRlclBhZGRpbmc9MCx0aGlzLnRpdGxlVGV4dEhlaWdodD0wLHRoaXMubGFiZWxUZXh0SGVpZ2h0PTAsdGhpcy5yYW5nZT1bMCwxMF0sdGhpcy5ib3VuZGluZ1JlY3Q9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5heGlzUG9zaXRpb249ImxlZnQifXNldFJhbmdlKHMpe3RoaXMucmFuZ2U9cyx0aGlzLmF4aXNQb3NpdGlvbj09PSJsZWZ0Inx8dGhpcy5heGlzUG9zaXRpb249PT0icmlnaHQiP3RoaXMuYm91bmRpbmdSZWN0LmhlaWdodD1zWzFdLXNbMF06dGhpcy5ib3VuZGluZ1JlY3Qud2lkdGg9c1sxXS1zWzBdLHRoaXMucmVjYWxjdWxhdGVTY2FsZSgpfWdldFJhbmdlKCl7cmV0dXJuW3RoaXMucmFuZ2VbMF0rdGhpcy5vdXRlclBhZGRpbmcsdGhpcy5yYW5nZVsxXS10aGlzLm91dGVyUGFkZGluZ119c2V0QXhpc1Bvc2l0aW9uKHMpe3RoaXMuYXhpc1Bvc2l0aW9uPXMsdGhpcy5zZXRSYW5nZSh0aGlzLnJhbmdlKX1nZXRUaWNrRGlzdGFuY2UoKXtjb25zdCBzPXRoaXMuZ2V0UmFuZ2UoKTtyZXR1cm4gTWF0aC5hYnMoc1swXS1zWzFdKS90aGlzLmdldFRpY2tWYWx1ZXMoKS5sZW5ndGh9Z2V0QXhpc091dGVyUGFkZGluZygpe3JldHVybiB0aGlzLm91dGVyUGFkZGluZ31nZXRMYWJlbERpbWVuc2lvbigpe3JldHVybiB0aGlzLnRleHREaW1lbnNpb25DYWxjdWxhdG9yLmdldE1heERpbWVuc2lvbih0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAocz0+cy50b1N0cmluZygpKSx0aGlzLmF4aXNDb25maWcubGFiZWxGb250U2l6ZSl9cmVjYWxjdWxhdGVPdXRlclBhZGRpbmdUb0RyYXdCYXIoKXtwR2UqdGhpcy5nZXRUaWNrRGlzdGFuY2UoKT50aGlzLm91dGVyUGFkZGluZyoyJiYodGhpcy5vdXRlclBhZGRpbmc9TWF0aC5mbG9vcihwR2UqdGhpcy5nZXRUaWNrRGlzdGFuY2UoKS8yKSksdGhpcy5yZWNhbGN1bGF0ZVNjYWxlKCl9Y2FsY3VsYXRlU3BhY2VJZkRyYXduSG9yaXpvbnRhbGx5KHMpe2xldCB1PXMuaGVpZ2h0O2lmKHRoaXMuYXhpc0NvbmZpZy5zaG93QXhpc0xpbmUmJnU+dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgmJih1LT10aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aCx0aGlzLnNob3dBeGlzTGluZT0hMCksdGhpcy5heGlzQ29uZmlnLnNob3dMYWJlbCl7Y29uc3QgZD10aGlzLmdldExhYmVsRGltZW5zaW9uKCkscD1iR2Uqcy53aWR0aDt0aGlzLm91dGVyUGFkZGluZz1NYXRoLm1pbihkLndpZHRoLzIscCk7Y29uc3Qgdj1kLmhlaWdodCt0aGlzLmF4aXNDb25maWcubGFiZWxQYWRkaW5nKjI7dGhpcy5sYWJlbFRleHRIZWlnaHQ9ZC5oZWlnaHQsdjw9dSYmKHUtPXYsdGhpcy5zaG93TGFiZWw9ITApfWlmKHRoaXMuYXhpc0NvbmZpZy5zaG93VGljayYmdT49dGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGgmJih0aGlzLnNob3dUaWNrPSEwLHUtPXRoaXMuYXhpc0NvbmZpZy50aWNrTGVuZ3RoKSx0aGlzLmF4aXNDb25maWcuc2hvd1RpdGxlJiZ0aGlzLnRpdGxlKXtjb25zdCBkPXRoaXMudGV4dERpbWVuc2lvbkNhbGN1bGF0b3IuZ2V0TWF4RGltZW5zaW9uKFt0aGlzLnRpdGxlXSx0aGlzLmF4aXNDb25maWcudGl0bGVGb250U2l6ZSkscD1kLmhlaWdodCt0aGlzLmF4aXNDb25maWcudGl0bGVQYWRkaW5nKjI7dGhpcy50aXRsZVRleHRIZWlnaHQ9ZC5oZWlnaHQscDw9dSYmKHUtPXAsdGhpcy5zaG93VGl0bGU9ITApfXRoaXMuYm91bmRpbmdSZWN0LndpZHRoPXMud2lkdGgsdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0PXMuaGVpZ2h0LXV9Y2FsY3VsYXRlU3BhY2VJZkRyYXduVmVydGljYWwocyl7bGV0IHU9cy53aWR0aDtpZih0aGlzLmF4aXNDb25maWcuc2hvd0F4aXNMaW5lJiZ1PnRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoJiYodS09dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgsdGhpcy5zaG93QXhpc0xpbmU9ITApLHRoaXMuYXhpc0NvbmZpZy5zaG93TGFiZWwpe2NvbnN0IGQ9dGhpcy5nZXRMYWJlbERpbWVuc2lvbigpLHA9YkdlKnMuaGVpZ2h0O3RoaXMub3V0ZXJQYWRkaW5nPU1hdGgubWluKGQuaGVpZ2h0LzIscCk7Y29uc3Qgdj1kLndpZHRoK3RoaXMuYXhpc0NvbmZpZy5sYWJlbFBhZGRpbmcqMjt2PD11JiYodS09dix0aGlzLnNob3dMYWJlbD0hMCl9aWYodGhpcy5heGlzQ29uZmlnLnNob3dUaWNrJiZ1Pj10aGlzLmF4aXNDb25maWcudGlja0xlbmd0aCYmKHRoaXMuc2hvd1RpY2s9ITAsdS09dGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGgpLHRoaXMuYXhpc0NvbmZpZy5zaG93VGl0bGUmJnRoaXMudGl0bGUpe2NvbnN0IGQ9dGhpcy50ZXh0RGltZW5zaW9uQ2FsY3VsYXRvci5nZXRNYXhEaW1lbnNpb24oW3RoaXMudGl0bGVdLHRoaXMuYXhpc0NvbmZpZy50aXRsZUZvbnRTaXplKSxwPWQuaGVpZ2h0K3RoaXMuYXhpc0NvbmZpZy50aXRsZVBhZGRpbmcqMjt0aGlzLnRpdGxlVGV4dEhlaWdodD1kLmhlaWdodCxwPD11JiYodS09cCx0aGlzLnNob3dUaXRsZT0hMCl9dGhpcy5ib3VuZGluZ1JlY3Qud2lkdGg9cy53aWR0aC11LHRoaXMuYm91bmRpbmdSZWN0LmhlaWdodD1zLmhlaWdodH1jYWxjdWxhdGVTcGFjZShzKXtyZXR1cm4gdGhpcy5heGlzUG9zaXRpb249PT0ibGVmdCJ8fHRoaXMuYXhpc1Bvc2l0aW9uPT09InJpZ2h0Ij90aGlzLmNhbGN1bGF0ZVNwYWNlSWZEcmF3blZlcnRpY2FsKHMpOnRoaXMuY2FsY3VsYXRlU3BhY2VJZkRyYXduSG9yaXpvbnRhbGx5KHMpLHRoaXMucmVjYWxjdWxhdGVTY2FsZSgpLHt3aWR0aDp0aGlzLmJvdW5kaW5nUmVjdC53aWR0aCxoZWlnaHQ6dGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0fX1zZXRCb3VuZGluZ0JveFhZKHMpe3RoaXMuYm91bmRpbmdSZWN0Lng9cy54LHRoaXMuYm91bmRpbmdSZWN0Lnk9cy55fWdldERyYXdhYmxlRWxlbWVudHNGb3JMZWZ0QXhpcygpe2NvbnN0IHM9W107aWYodGhpcy5zaG93QXhpc0xpbmUpe2NvbnN0IHU9dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aC10aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aC8yO3MucHVzaCh7dHlwZToicGF0aCIsZ3JvdXBUZXh0czpbImxlZnQtYXhpcyIsImF4aXNsLWxpbmUiXSxkYXRhOlt7cGF0aDpgTSAke3V9LCR7dGhpcy5ib3VuZGluZ1JlY3QueX0gTCAke3V9LCR7dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHR9IGAsc3Ryb2tlRmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5heGlzTGluZUNvbG9yLHN0cm9rZVdpZHRoOnRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRofV19KX1pZih0aGlzLnNob3dMYWJlbCYmcy5wdXNoKHt0eXBlOiJ0ZXh0Iixncm91cFRleHRzOlsibGVmdC1heGlzIiwibGFiZWwiXSxkYXRhOnRoaXMuZ2V0VGlja1ZhbHVlcygpLm1hcCh1PT4oe3RleHQ6dS50b1N0cmluZygpLHg6dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aC0odGhpcy5zaG93TGFiZWw/dGhpcy5heGlzQ29uZmlnLmxhYmVsUGFkZGluZzowKS0odGhpcy5zaG93VGljaz90aGlzLmF4aXNDb25maWcudGlja0xlbmd0aDowKS0odGhpcy5zaG93QXhpc0xpbmU/dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGg6MCkseTp0aGlzLmdldFNjYWxlVmFsdWUodSksZmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5sYWJlbENvbG9yLGZvbnRTaXplOnRoaXMuYXhpc0NvbmZpZy5sYWJlbEZvbnRTaXplLHJvdGF0aW9uOjAsdmVydGljYWxQb3M6Im1pZGRsZSIsaG9yaXpvbnRhbFBvczoicmlnaHQifSkpfSksdGhpcy5zaG93VGljayl7Y29uc3QgdT10aGlzLmJvdW5kaW5nUmVjdC54K3RoaXMuYm91bmRpbmdSZWN0LndpZHRoLSh0aGlzLnNob3dBeGlzTGluZT90aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aDowKTtzLnB1c2goe3R5cGU6InBhdGgiLGdyb3VwVGV4dHM6WyJsZWZ0LWF4aXMiLCJ0aWNrcyJdLGRhdGE6dGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKGQ9Pih7cGF0aDpgTSAke3V9LCR7dGhpcy5nZXRTY2FsZVZhbHVlKGQpfSBMICR7dS10aGlzLmF4aXNDb25maWcudGlja0xlbmd0aH0sJHt0aGlzLmdldFNjYWxlVmFsdWUoZCl9YCxzdHJva2VGaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLnRpY2tDb2xvcixzdHJva2VXaWR0aDp0aGlzLmF4aXNDb25maWcudGlja1dpZHRofSkpfSl9cmV0dXJuIHRoaXMuc2hvd1RpdGxlJiZzLnB1c2goe3R5cGU6InRleHQiLGdyb3VwVGV4dHM6WyJsZWZ0LWF4aXMiLCJ0aXRsZSJdLGRhdGE6W3t0ZXh0OnRoaXMudGl0bGUseDp0aGlzLmJvdW5kaW5nUmVjdC54K3RoaXMuYXhpc0NvbmZpZy50aXRsZVBhZGRpbmcseTp0aGlzLmJvdW5kaW5nUmVjdC55K3RoaXMuYm91bmRpbmdSZWN0LmhlaWdodC8yLGZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcudGl0bGVDb2xvcixmb250U2l6ZTp0aGlzLmF4aXNDb25maWcudGl0bGVGb250U2l6ZSxyb3RhdGlvbjoyNzAsdmVydGljYWxQb3M6InRvcCIsaG9yaXpvbnRhbFBvczoiY2VudGVyIn1dfSksc31nZXREcmF3YWJsZUVsZW1lbnRzRm9yQm90dG9tQXhpcygpe2NvbnN0IHM9W107aWYodGhpcy5zaG93QXhpc0xpbmUpe2NvbnN0IHU9dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aC8yO3MucHVzaCh7dHlwZToicGF0aCIsZ3JvdXBUZXh0czpbImJvdHRvbS1heGlzIiwiYXhpcy1saW5lIl0sZGF0YTpbe3BhdGg6YE0gJHt0aGlzLmJvdW5kaW5nUmVjdC54fSwke3V9IEwgJHt0aGlzLmJvdW5kaW5nUmVjdC54K3RoaXMuYm91bmRpbmdSZWN0LndpZHRofSwke3V9YCxzdHJva2VGaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLmF4aXNMaW5lQ29sb3Isc3Ryb2tlV2lkdGg6dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGh9XX0pfWlmKHRoaXMuc2hvd0xhYmVsJiZzLnB1c2goe3R5cGU6InRleHQiLGdyb3VwVGV4dHM6WyJib3R0b20tYXhpcyIsImxhYmVsIl0sZGF0YTp0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAodT0+KHt0ZXh0OnUudG9TdHJpbmcoKSx4OnRoaXMuZ2V0U2NhbGVWYWx1ZSh1KSx5OnRoaXMuYm91bmRpbmdSZWN0LnkrdGhpcy5heGlzQ29uZmlnLmxhYmVsUGFkZGluZysodGhpcy5zaG93VGljaz90aGlzLmF4aXNDb25maWcudGlja0xlbmd0aDowKSsodGhpcy5zaG93QXhpc0xpbmU/dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGg6MCksZmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5sYWJlbENvbG9yLGZvbnRTaXplOnRoaXMuYXhpc0NvbmZpZy5sYWJlbEZvbnRTaXplLHJvdGF0aW9uOjAsdmVydGljYWxQb3M6InRvcCIsaG9yaXpvbnRhbFBvczoiY2VudGVyIn0pKX0pLHRoaXMuc2hvd1RpY2spe2NvbnN0IHU9dGhpcy5ib3VuZGluZ1JlY3QueSsodGhpcy5zaG93QXhpc0xpbmU/dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGg6MCk7cy5wdXNoKHt0eXBlOiJwYXRoIixncm91cFRleHRzOlsiYm90dG9tLWF4aXMiLCJ0aWNrcyJdLGRhdGE6dGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKGQ9Pih7cGF0aDpgTSAke3RoaXMuZ2V0U2NhbGVWYWx1ZShkKX0sJHt1fSBMICR7dGhpcy5nZXRTY2FsZVZhbHVlKGQpfSwke3UrdGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGh9YCxzdHJva2VGaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLnRpY2tDb2xvcixzdHJva2VXaWR0aDp0aGlzLmF4aXNDb25maWcudGlja1dpZHRofSkpfSl9cmV0dXJuIHRoaXMuc2hvd1RpdGxlJiZzLnB1c2goe3R5cGU6InRleHQiLGdyb3VwVGV4dHM6WyJib3R0b20tYXhpcyIsInRpdGxlIl0sZGF0YTpbe3RleHQ6dGhpcy50aXRsZSx4OnRoaXMucmFuZ2VbMF0rKHRoaXMucmFuZ2VbMV0tdGhpcy5yYW5nZVswXSkvMix5OnRoaXMuYm91bmRpbmdSZWN0LnkrdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0LXRoaXMuYXhpc0NvbmZpZy50aXRsZVBhZGRpbmctdGhpcy50aXRsZVRleHRIZWlnaHQsZmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy50aXRsZUNvbG9yLGZvbnRTaXplOnRoaXMuYXhpc0NvbmZpZy50aXRsZUZvbnRTaXplLHJvdGF0aW9uOjAsdmVydGljYWxQb3M6InRvcCIsaG9yaXpvbnRhbFBvczoiY2VudGVyIn1dfSksc31nZXREcmF3YWJsZUVsZW1lbnRzRm9yVG9wQXhpcygpe2NvbnN0IHM9W107aWYodGhpcy5zaG93QXhpc0xpbmUpe2NvbnN0IHU9dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQtdGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgvMjtzLnB1c2goe3R5cGU6InBhdGgiLGdyb3VwVGV4dHM6WyJ0b3AtYXhpcyIsImF4aXMtbGluZSJdLGRhdGE6W3twYXRoOmBNICR7dGhpcy5ib3VuZGluZ1JlY3QueH0sJHt1fSBMICR7dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aH0sJHt1fWAsc3Ryb2tlRmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5heGlzTGluZUNvbG9yLHN0cm9rZVdpZHRoOnRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRofV19KX1pZih0aGlzLnNob3dMYWJlbCYmcy5wdXNoKHt0eXBlOiJ0ZXh0Iixncm91cFRleHRzOlsidG9wLWF4aXMiLCJsYWJlbCJdLGRhdGE6dGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKHU9Pih7dGV4dDp1LnRvU3RyaW5nKCkseDp0aGlzLmdldFNjYWxlVmFsdWUodSkseTp0aGlzLmJvdW5kaW5nUmVjdC55Kyh0aGlzLnNob3dUaXRsZT90aGlzLnRpdGxlVGV4dEhlaWdodCt0aGlzLmF4aXNDb25maWcudGl0bGVQYWRkaW5nKjI6MCkrdGhpcy5heGlzQ29uZmlnLmxhYmVsUGFkZGluZyxmaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLmxhYmVsQ29sb3IsZm9udFNpemU6dGhpcy5heGlzQ29uZmlnLmxhYmVsRm9udFNpemUscm90YXRpb246MCx2ZXJ0aWNhbFBvczoidG9wIixob3Jpem9udGFsUG9zOiJjZW50ZXIifSkpfSksdGhpcy5zaG93VGljayl7Y29uc3QgdT10aGlzLmJvdW5kaW5nUmVjdC55O3MucHVzaCh7dHlwZToicGF0aCIsZ3JvdXBUZXh0czpbInRvcC1heGlzIiwidGlja3MiXSxkYXRhOnRoaXMuZ2V0VGlja1ZhbHVlcygpLm1hcChkPT4oe3BhdGg6YE0gJHt0aGlzLmdldFNjYWxlVmFsdWUoZCl9LCR7dSt0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQtKHRoaXMuc2hvd0F4aXNMaW5lP3RoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoOjApfSBMICR7dGhpcy5nZXRTY2FsZVZhbHVlKGQpfSwke3UrdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0LXRoaXMuYXhpc0NvbmZpZy50aWNrTGVuZ3RoLSh0aGlzLnNob3dBeGlzTGluZT90aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aDowKX1gLHN0cm9rZUZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcudGlja0NvbG9yLHN0cm9rZVdpZHRoOnRoaXMuYXhpc0NvbmZpZy50aWNrV2lkdGh9KSl9KX1yZXR1cm4gdGhpcy5zaG93VGl0bGUmJnMucHVzaCh7dHlwZToidGV4dCIsZ3JvdXBUZXh0czpbInRvcC1heGlzIiwidGl0bGUiXSxkYXRhOlt7dGV4dDp0aGlzLnRpdGxlLHg6dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aC8yLHk6dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmF4aXNDb25maWcudGl0bGVQYWRkaW5nLGZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcudGl0bGVDb2xvcixmb250U2l6ZTp0aGlzLmF4aXNDb25maWcudGl0bGVGb250U2l6ZSxyb3RhdGlvbjowLHZlcnRpY2FsUG9zOiJ0b3AiLGhvcml6b250YWxQb3M6ImNlbnRlciJ9XX0pLHN9Z2V0RHJhd2FibGVFbGVtZW50cygpe2lmKHRoaXMuYXhpc1Bvc2l0aW9uPT09ImxlZnQiKXJldHVybiB0aGlzLmdldERyYXdhYmxlRWxlbWVudHNGb3JMZWZ0QXhpcygpO2lmKHRoaXMuYXhpc1Bvc2l0aW9uPT09InJpZ2h0Iil0aHJvdyBFcnJvcigiRHJhd2luZyBvZiByaWdodCBheGlzIGlzIG5vdCBpbXBsZW1lbnRlZCIpO3JldHVybiB0aGlzLmF4aXNQb3NpdGlvbj09PSJib3R0b20iP3RoaXMuZ2V0RHJhd2FibGVFbGVtZW50c0ZvckJvdHRvbUF4aXMoKTp0aGlzLmF4aXNQb3NpdGlvbj09PSJ0b3AiP3RoaXMuZ2V0RHJhd2FibGVFbGVtZW50c0ZvclRvcEF4aXMoKTpbXX19Y2xhc3Mgem5uIGV4dGVuZHMgbUdle2NvbnN0cnVjdG9yKHMsdSxkLHAsdil7c3VwZXIocyxwLHYsdSksdGhpcy5jYXRlZ29yaWVzPWQsdGhpcy5zY2FsZT1xcGUoKS5kb21haW4odGhpcy5jYXRlZ29yaWVzKS5yYW5nZSh0aGlzLmdldFJhbmdlKCkpfXNldFJhbmdlKHMpe3N1cGVyLnNldFJhbmdlKHMpfXJlY2FsY3VsYXRlU2NhbGUoKXt0aGlzLnNjYWxlPXFwZSgpLmRvbWFpbih0aGlzLmNhdGVnb3JpZXMpLnJhbmdlKHRoaXMuZ2V0UmFuZ2UoKSkucGFkZGluZ0lubmVyKDEpLnBhZGRpbmdPdXRlcigwKS5hbGlnbiguNSksWGUudHJhY2UoIkJhbmRBeGlzIGF4aXMgZmluYWwgY2F0ZWdvcmllcywgcmFuZ2U6ICIsdGhpcy5jYXRlZ29yaWVzLHRoaXMuZ2V0UmFuZ2UoKSl9Z2V0VGlja1ZhbHVlcygpe3JldHVybiB0aGlzLmNhdGVnb3JpZXN9Z2V0U2NhbGVWYWx1ZShzKXtyZXR1cm4gdGhpcy5zY2FsZShzKXx8dGhpcy5nZXRSYW5nZSgpWzBdfX1jbGFzcyBxbm4gZXh0ZW5kcyBtR2V7Y29uc3RydWN0b3Iocyx1LGQscCx2KXtzdXBlcihzLHAsdix1KSx0aGlzLmRvbWFpbj1kLHRoaXMuc2NhbGU9c0QoKS5kb21haW4odGhpcy5kb21haW4pLnJhbmdlKHRoaXMuZ2V0UmFuZ2UoKSl9Z2V0VGlja1ZhbHVlcygpe3JldHVybiB0aGlzLnNjYWxlLnRpY2tzKCl9cmVjYWxjdWxhdGVTY2FsZSgpe2NvbnN0IHM9Wy4uLnRoaXMuZG9tYWluXTt0aGlzLmF4aXNQb3NpdGlvbj09PSJsZWZ0IiYmcy5yZXZlcnNlKCksdGhpcy5zY2FsZT1zRCgpLmRvbWFpbihzKS5yYW5nZSh0aGlzLmdldFJhbmdlKCkpfWdldFNjYWxlVmFsdWUocyl7cmV0dXJuIHRoaXMuc2NhbGUocyl9fWZ1bmN0aW9uIHZHZShpLHMsdSxkKXtjb25zdCBwPW5ldyBnR2UoZCk7cmV0dXJuIGRHZShpKT9uZXcgem5uKHMsdSxpLmNhdGVnb3JpZXMsaS50aXRsZSxwKTpuZXcgcW5uKHMsdSxbaS5taW4saS5tYXhdLGkudGl0bGUscCl9Y2xhc3MgSG5ue2NvbnN0cnVjdG9yKHMsdSxkLHApe3RoaXMudGV4dERpbWVuc2lvbkNhbGN1bGF0b3I9cyx0aGlzLmNoYXJ0Q29uZmlnPXUsdGhpcy5jaGFydERhdGE9ZCx0aGlzLmNoYXJ0VGhlbWVDb25maWc9cCx0aGlzLmJvdW5kaW5nUmVjdD17eDowLHk6MCx3aWR0aDowLGhlaWdodDowfSx0aGlzLnNob3dDaGFydFRpdGxlPSExfXNldEJvdW5kaW5nQm94WFkocyl7dGhpcy5ib3VuZGluZ1JlY3QueD1zLngsdGhpcy5ib3VuZGluZ1JlY3QueT1zLnl9Y2FsY3VsYXRlU3BhY2Uocyl7Y29uc3QgdT10aGlzLnRleHREaW1lbnNpb25DYWxjdWxhdG9yLmdldE1heERpbWVuc2lvbihbdGhpcy5jaGFydERhdGEudGl0bGVdLHRoaXMuY2hhcnRDb25maWcudGl0bGVGb250U2l6ZSksZD1NYXRoLm1heCh1LndpZHRoLHMud2lkdGgpLHA9dS5oZWlnaHQrMip0aGlzLmNoYXJ0Q29uZmlnLnRpdGxlUGFkZGluZztyZXR1cm4gdS53aWR0aDw9ZCYmdS5oZWlnaHQ8PXAmJnRoaXMuY2hhcnRDb25maWcuc2hvd1RpdGxlJiZ0aGlzLmNoYXJ0RGF0YS50aXRsZSYmKHRoaXMuYm91bmRpbmdSZWN0LndpZHRoPWQsdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0PXAsdGhpcy5zaG93Q2hhcnRUaXRsZT0hMCkse3dpZHRoOnRoaXMuYm91bmRpbmdSZWN0LndpZHRoLGhlaWdodDp0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHR9fWdldERyYXdhYmxlRWxlbWVudHMoKXtjb25zdCBzPVtdO3JldHVybiB0aGlzLnNob3dDaGFydFRpdGxlJiZzLnB1c2goe2dyb3VwVGV4dHM6WyJjaGFydC10aXRsZSJdLHR5cGU6InRleHQiLGRhdGE6W3tmb250U2l6ZTp0aGlzLmNoYXJ0Q29uZmlnLnRpdGxlRm9udFNpemUsdGV4dDp0aGlzLmNoYXJ0RGF0YS50aXRsZSx2ZXJ0aWNhbFBvczoibWlkZGxlIixob3Jpem9udGFsUG9zOiJjZW50ZXIiLHg6dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aC8yLHk6dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQvMixmaWxsOnRoaXMuY2hhcnRUaGVtZUNvbmZpZy50aXRsZUNvbG9yLHJvdGF0aW9uOjB9XX0pLHN9fWZ1bmN0aW9uIFZubihpLHMsdSxkKXtjb25zdCBwPW5ldyBnR2UoZCk7cmV0dXJuIG5ldyBIbm4ocCxpLHMsdSl9Y2xhc3MgVW5ue2NvbnN0cnVjdG9yKHMsdSxkLHAsdil7dGhpcy5wbG90RGF0YT1zLHRoaXMueEF4aXM9dSx0aGlzLnlBeGlzPWQsdGhpcy5vcmllbnRhdGlvbj1wLHRoaXMucGxvdEluZGV4PXZ9Z2V0RHJhd2FibGVFbGVtZW50KCl7Y29uc3Qgcz10aGlzLnBsb3REYXRhLmRhdGEubWFwKGQ9Plt0aGlzLnhBeGlzLmdldFNjYWxlVmFsdWUoZFswXSksdGhpcy55QXhpcy5nZXRTY2FsZVZhbHVlKGRbMV0pXSk7bGV0IHU7cmV0dXJuIHRoaXMub3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCI/dT1rNygpLnkoZD0+ZFswXSkueChkPT5kWzFdKShzKTp1PWs3KCkueChkPT5kWzBdKS55KGQ9PmRbMV0pKHMpLHU/W3tncm91cFRleHRzOlsicGxvdCIsYGxpbmUtcGxvdC0ke3RoaXMucGxvdEluZGV4fWBdLHR5cGU6InBhdGgiLGRhdGE6W3twYXRoOnUsc3Ryb2tlRmlsbDp0aGlzLnBsb3REYXRhLnN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5wbG90RGF0YS5zdHJva2VXaWR0aH1dfV06W119fWNsYXNzIEdubntjb25zdHJ1Y3RvcihzLHUsZCxwLHYsYil7dGhpcy5iYXJEYXRhPXMsdGhpcy5ib3VuZGluZ1JlY3Q9dSx0aGlzLnhBeGlzPWQsdGhpcy55QXhpcz1wLHRoaXMub3JpZW50YXRpb249dix0aGlzLnBsb3RJbmRleD1ifWdldERyYXdhYmxlRWxlbWVudCgpe2NvbnN0IHM9dGhpcy5iYXJEYXRhLmRhdGEubWFwKHY9Plt0aGlzLnhBeGlzLmdldFNjYWxlVmFsdWUodlswXSksdGhpcy55QXhpcy5nZXRTY2FsZVZhbHVlKHZbMV0pXSksdT0uMDUsZD1NYXRoLm1pbih0aGlzLnhBeGlzLmdldEF4aXNPdXRlclBhZGRpbmcoKSoyLHRoaXMueEF4aXMuZ2V0VGlja0Rpc3RhbmNlKCkpKigxLXUpLHA9ZC8yO3JldHVybiB0aGlzLm9yaWVudGF0aW9uPT09Imhvcml6b250YWwiP1t7Z3JvdXBUZXh0czpbInBsb3QiLGBiYXItcGxvdC0ke3RoaXMucGxvdEluZGV4fWBdLHR5cGU6InJlY3QiLGRhdGE6cy5tYXAodj0+KHt4OnRoaXMuYm91bmRpbmdSZWN0LngseTp2WzBdLXAsaGVpZ2h0OmQsd2lkdGg6dlsxXS10aGlzLmJvdW5kaW5nUmVjdC54LGZpbGw6dGhpcy5iYXJEYXRhLmZpbGwsc3Ryb2tlV2lkdGg6MCxzdHJva2VGaWxsOnRoaXMuYmFyRGF0YS5maWxsfSkpfV06W3tncm91cFRleHRzOlsicGxvdCIsYGJhci1wbG90LSR7dGhpcy5wbG90SW5kZXh9YF0sdHlwZToicmVjdCIsZGF0YTpzLm1hcCh2PT4oe3g6dlswXS1wLHk6dlsxXSx3aWR0aDpkLGhlaWdodDp0aGlzLmJvdW5kaW5nUmVjdC55K3RoaXMuYm91bmRpbmdSZWN0LmhlaWdodC12WzFdLGZpbGw6dGhpcy5iYXJEYXRhLmZpbGwsc3Ryb2tlV2lkdGg6MCxzdHJva2VGaWxsOnRoaXMuYmFyRGF0YS5maWxsfSkpfV19fWNsYXNzIEtubntjb25zdHJ1Y3RvcihzLHUsZCl7dGhpcy5jaGFydENvbmZpZz1zLHRoaXMuY2hhcnREYXRhPXUsdGhpcy5jaGFydFRoZW1lQ29uZmlnPWQsdGhpcy5ib3VuZGluZ1JlY3Q9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH19c2V0QXhlcyhzLHUpe3RoaXMueEF4aXM9cyx0aGlzLnlBeGlzPXV9c2V0Qm91bmRpbmdCb3hYWShzKXt0aGlzLmJvdW5kaW5nUmVjdC54PXMueCx0aGlzLmJvdW5kaW5nUmVjdC55PXMueX1jYWxjdWxhdGVTcGFjZShzKXtyZXR1cm4gdGhpcy5ib3VuZGluZ1JlY3Qud2lkdGg9cy53aWR0aCx0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQ9cy5oZWlnaHQse3dpZHRoOnRoaXMuYm91bmRpbmdSZWN0LndpZHRoLGhlaWdodDp0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHR9fWdldERyYXdhYmxlRWxlbWVudHMoKXtpZighKHRoaXMueEF4aXMmJnRoaXMueUF4aXMpKXRocm93IEVycm9yKCJBeGVzIG11c3QgYmUgcGFzc2VkIHRvIHJlbmRlciBQbG90cyIpO2NvbnN0IHM9W107Zm9yKGNvbnN0W3UsZF1vZiB0aGlzLmNoYXJ0RGF0YS5wbG90cy5lbnRyaWVzKCkpc3dpdGNoKGQudHlwZSl7Y2FzZSJsaW5lIjp7Y29uc3QgcD1uZXcgVW5uKGQsdGhpcy54QXhpcyx0aGlzLnlBeGlzLHRoaXMuY2hhcnRDb25maWcuY2hhcnRPcmllbnRhdGlvbix1KTtzLnB1c2goLi4ucC5nZXREcmF3YWJsZUVsZW1lbnQoKSl9YnJlYWs7Y2FzZSJiYXIiOntjb25zdCBwPW5ldyBHbm4oZCx0aGlzLmJvdW5kaW5nUmVjdCx0aGlzLnhBeGlzLHRoaXMueUF4aXMsdGhpcy5jaGFydENvbmZpZy5jaGFydE9yaWVudGF0aW9uLHUpO3MucHVzaCguLi5wLmdldERyYXdhYmxlRWxlbWVudCgpKX1icmVha31yZXR1cm4gc319ZnVuY3Rpb24gV25uKGkscyx1KXtyZXR1cm4gbmV3IEtubihpLHMsdSl9Y2xhc3MgWW5ue2NvbnN0cnVjdG9yKHMsdSxkLHApe3RoaXMuY2hhcnRDb25maWc9cyx0aGlzLmNoYXJ0RGF0YT11LHRoaXMuY29tcG9uZW50U3RvcmU9e3RpdGxlOlZubihzLHUsZCxwKSxwbG90OldubihzLHUsZCkseEF4aXM6dkdlKHUueEF4aXMscy54QXhpcyx7dGl0bGVDb2xvcjpkLnhBeGlzVGl0bGVDb2xvcixsYWJlbENvbG9yOmQueEF4aXNMYWJlbENvbG9yLHRpY2tDb2xvcjpkLnhBeGlzVGlja0NvbG9yLGF4aXNMaW5lQ29sb3I6ZC54QXhpc0xpbmVDb2xvcn0scCkseUF4aXM6dkdlKHUueUF4aXMscy55QXhpcyx7dGl0bGVDb2xvcjpkLnlBeGlzVGl0bGVDb2xvcixsYWJlbENvbG9yOmQueUF4aXNMYWJlbENvbG9yLHRpY2tDb2xvcjpkLnlBeGlzVGlja0NvbG9yLGF4aXNMaW5lQ29sb3I6ZC55QXhpc0xpbmVDb2xvcn0scCl9fWNhbGN1bGF0ZVZlcnRpY2FsU3BhY2UoKXtsZXQgcz10aGlzLmNoYXJ0Q29uZmlnLndpZHRoLHU9dGhpcy5jaGFydENvbmZpZy5oZWlnaHQsZD0wLHA9MCx2PU1hdGguZmxvb3Iocyp0aGlzLmNoYXJ0Q29uZmlnLnBsb3RSZXNlcnZlZFNwYWNlUGVyY2VudC8xMDApLGI9TWF0aC5mbG9vcih1KnRoaXMuY2hhcnRDb25maWcucGxvdFJlc2VydmVkU3BhY2VQZXJjZW50LzEwMCkseT10aGlzLmNvbXBvbmVudFN0b3JlLnBsb3QuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOnYsaGVpZ2h0OmJ9KTtzLT15LndpZHRoLHUtPXkuaGVpZ2h0LHk9dGhpcy5jb21wb25lbnRTdG9yZS50aXRsZS5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6dGhpcy5jaGFydENvbmZpZy53aWR0aCxoZWlnaHQ6dX0pLHA9eS5oZWlnaHQsdS09eS5oZWlnaHQsdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRBeGlzUG9zaXRpb24oImJvdHRvbSIpLHk9dGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6cyxoZWlnaHQ6dX0pLHUtPXkuaGVpZ2h0LHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuc2V0QXhpc1Bvc2l0aW9uKCJsZWZ0IikseT10aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDpzLGhlaWdodDp1fSksZD15LndpZHRoLHMtPXkud2lkdGgscz4wJiYodis9cyxzPTApLHU+MCYmKGIrPXUsdT0wKSx0aGlzLmNvbXBvbmVudFN0b3JlLnBsb3QuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOnYsaGVpZ2h0OmJ9KSx0aGlzLmNvbXBvbmVudFN0b3JlLnBsb3Quc2V0Qm91bmRpbmdCb3hYWSh7eDpkLHk6cH0pLHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuc2V0UmFuZ2UoW2QsZCt2XSksdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRCb3VuZGluZ0JveFhZKHt4OmQseTpwK2J9KSx0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLnNldFJhbmdlKFtwLHArYl0pLHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuc2V0Qm91bmRpbmdCb3hYWSh7eDowLHk6cH0pLHRoaXMuY2hhcnREYXRhLnBsb3RzLnNvbWUoVD0+ZkdlKFQpKSYmdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5yZWNhbGN1bGF0ZU91dGVyUGFkZGluZ1RvRHJhd0JhcigpfWNhbGN1bGF0ZUhvcml6b250YWxTcGFjZSgpe2xldCBzPXRoaXMuY2hhcnRDb25maWcud2lkdGgsdT10aGlzLmNoYXJ0Q29uZmlnLmhlaWdodCxkPTAscD0wLHY9MCxiPU1hdGguZmxvb3Iocyp0aGlzLmNoYXJ0Q29uZmlnLnBsb3RSZXNlcnZlZFNwYWNlUGVyY2VudC8xMDApLHk9TWF0aC5mbG9vcih1KnRoaXMuY2hhcnRDb25maWcucGxvdFJlc2VydmVkU3BhY2VQZXJjZW50LzEwMCksVD10aGlzLmNvbXBvbmVudFN0b3JlLnBsb3QuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOmIsaGVpZ2h0Onl9KTtzLT1ULndpZHRoLHUtPVQuaGVpZ2h0LFQ9dGhpcy5jb21wb25lbnRTdG9yZS50aXRsZS5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6dGhpcy5jaGFydENvbmZpZy53aWR0aCxoZWlnaHQ6dX0pLGQ9VC5oZWlnaHQsdS09VC5oZWlnaHQsdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRBeGlzUG9zaXRpb24oImxlZnQiKSxUPXRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOnMsaGVpZ2h0OnV9KSxzLT1ULndpZHRoLHA9VC53aWR0aCx0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLnNldEF4aXNQb3NpdGlvbigidG9wIiksVD10aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDpzLGhlaWdodDp1fSksdS09VC5oZWlnaHQsdj1kK1QuaGVpZ2h0LHM+MCYmKGIrPXMscz0wKSx1PjAmJih5Kz11LHU9MCksdGhpcy5jb21wb25lbnRTdG9yZS5wbG90LmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDpiLGhlaWdodDp5fSksdGhpcy5jb21wb25lbnRTdG9yZS5wbG90LnNldEJvdW5kaW5nQm94WFkoe3g6cCx5OnZ9KSx0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLnNldFJhbmdlKFtwLHArYl0pLHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuc2V0Qm91bmRpbmdCb3hYWSh7eDpwLHk6ZH0pLHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuc2V0UmFuZ2UoW3Ysdit5XSksdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRCb3VuZGluZ0JveFhZKHt4OjAseTp2fSksdGhpcy5jaGFydERhdGEucGxvdHMuc29tZShfPT5mR2UoXykpJiZ0aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLnJlY2FsY3VsYXRlT3V0ZXJQYWRkaW5nVG9EcmF3QmFyKCl9Y2FsY3VsYXRlU3BhY2UoKXt0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0T3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCI/dGhpcy5jYWxjdWxhdGVIb3Jpem9udGFsU3BhY2UoKTp0aGlzLmNhbGN1bGF0ZVZlcnRpY2FsU3BhY2UoKX1nZXREcmF3YWJsZUVsZW1lbnQoKXt0aGlzLmNhbGN1bGF0ZVNwYWNlKCk7Y29uc3Qgcz1bXTt0aGlzLmNvbXBvbmVudFN0b3JlLnBsb3Quc2V0QXhlcyh0aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMpO2Zvcihjb25zdCB1IG9mIE9iamVjdC52YWx1ZXModGhpcy5jb21wb25lbnRTdG9yZSkpcy5wdXNoKC4uLnUuZ2V0RHJhd2FibGVFbGVtZW50cygpKTtyZXR1cm4gc319Y2xhc3MgWG5ue3N0YXRpYyBidWlsZChzLHUsZCxwKXtyZXR1cm4gbmV3IFlubihzLHUsZCxwKS5nZXREcmF3YWJsZUVsZW1lbnQoKX19bGV0IHpSPTAsd0dlLHFSPXhHZSgpLEhSPXlHZSgpLGVsPWtHZSgpLGd2ZT1IUi5wbG90Q29sb3JQYWxldHRlLnNwbGl0KCIsIikubWFwKGk9PmkudHJpbSgpKSxnSj0hMSxwdmU9ITE7ZnVuY3Rpb24geUdlKCl7Y29uc3QgaT1mMmUoKSxzPVZoKCk7cmV0dXJuIEpGKGkueHlDaGFydCxzLnRoZW1lVmFyaWFibGVzLnh5Q2hhcnQpfWZ1bmN0aW9uIHhHZSgpe2NvbnN0IGk9VmgoKTtyZXR1cm4gSkYoc2gueHlDaGFydCxpLnh5Q2hhcnQpfWZ1bmN0aW9uIGtHZSgpe3JldHVybnt5QXhpczp7dHlwZToibGluZWFyIix0aXRsZToiIixtaW46MS8wLG1heDotMS8wfSx4QXhpczp7dHlwZToiYmFuZCIsdGl0bGU6IiIsY2F0ZWdvcmllczpbXX0sdGl0bGU6IiIscGxvdHM6W119fWZ1bmN0aW9uIGJ2ZShpKXtjb25zdCBzPVZoKCk7cmV0dXJuIFlmKGkudHJpbSgpLHMpfWZ1bmN0aW9uIFFubihpKXt3R2U9aX1mdW5jdGlvbiBKbm4oaSl7aT09PSJob3Jpem9udGFsIj9xUi5jaGFydE9yaWVudGF0aW9uPSJob3Jpem9udGFsIjpxUi5jaGFydE9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCJ9ZnVuY3Rpb24gWm5uKGkpe2VsLnhBeGlzLnRpdGxlPWJ2ZShpLnRleHQpfWZ1bmN0aW9uIEVHZShpLHMpe2VsLnhBeGlzPXt0eXBlOiJsaW5lYXIiLHRpdGxlOmVsLnhBeGlzLnRpdGxlLG1pbjppLG1heDpzfSxnSj0hMH1mdW5jdGlvbiBlcm4oaSl7ZWwueEF4aXM9e3R5cGU6ImJhbmQiLHRpdGxlOmVsLnhBeGlzLnRpdGxlLGNhdGVnb3JpZXM6aS5tYXAocz0+YnZlKHMudGV4dCkpfSxnSj0hMH1mdW5jdGlvbiB0cm4oaSl7ZWwueUF4aXMudGl0bGU9YnZlKGkudGV4dCl9ZnVuY3Rpb24gbnJuKGkscyl7ZWwueUF4aXM9e3R5cGU6ImxpbmVhciIsdGl0bGU6ZWwueUF4aXMudGl0bGUsbWluOmksbWF4OnN9LHB2ZT0hMH1mdW5jdGlvbiBycm4oaSl7Y29uc3Qgcz1NYXRoLm1pbiguLi5pKSx1PU1hdGgubWF4KC4uLmkpLGQ9JFIoZWwueUF4aXMpP2VsLnlBeGlzLm1pbjoxLzAscD0kUihlbC55QXhpcyk/ZWwueUF4aXMubWF4Oi0xLzA7ZWwueUF4aXM9e3R5cGU6ImxpbmVhciIsdGl0bGU6ZWwueUF4aXMudGl0bGUsbWluOk1hdGgubWluKGQscyksbWF4Ok1hdGgubWF4KHAsdSl9fWZ1bmN0aW9uIFRHZShpKXtsZXQgcz1bXTtpZihpLmxlbmd0aD09PTApcmV0dXJuIHM7aWYoIWdKKXtjb25zdCB1PSRSKGVsLnhBeGlzKT9lbC54QXhpcy5taW46MS8wLGQ9JFIoZWwueEF4aXMpP2VsLnhBeGlzLm1heDotMS8wO0VHZShNYXRoLm1pbih1LDEpLE1hdGgubWF4KGQsaS5sZW5ndGgpKX1pZihwdmV8fHJybihpKSxkR2UoZWwueEF4aXMpJiYocz1lbC54QXhpcy5jYXRlZ29yaWVzLm1hcCgodSxkKT0+W3UsaVtkXV0pKSwkUihlbC54QXhpcykpe2NvbnN0IHU9ZWwueEF4aXMubWluLGQ9ZWwueEF4aXMubWF4LHA9KGQtdSsxKS9pLmxlbmd0aCx2PVtdO2ZvcihsZXQgYj11O2I8PWQ7Yis9cCl2LnB1c2goYCR7Yn1gKTtzPXYubWFwKChiLHkpPT5bYixpW3ldXSl9cmV0dXJuIHN9ZnVuY3Rpb24gQ0dlKGkpe3JldHVybiBndmVbaT09PTA/MDppJWd2ZS5sZW5ndGhdfWZ1bmN0aW9uIGlybihpLHMpe2NvbnN0IHU9VEdlKHMpO2VsLnBsb3RzLnB1c2goe3R5cGU6ImxpbmUiLHN0cm9rZUZpbGw6Q0dlKHpSKSxzdHJva2VXaWR0aDoyLGRhdGE6dX0pLHpSKyt9ZnVuY3Rpb24gc3JuKGkscyl7Y29uc3QgdT1UR2Uocyk7ZWwucGxvdHMucHVzaCh7dHlwZToiYmFyIixmaWxsOkNHZSh6UiksZGF0YTp1fSkselIrK31mdW5jdGlvbiBhcm4oKXtpZihlbC5wbG90cy5sZW5ndGg9PT0wKXRocm93IEVycm9yKCJObyBQbG90IHRvIHJlbmRlciwgcGxlYXNlIHByb3ZpZGUgYSBwbG90IHdpdGggc29tZSBkYXRhIik7cmV0dXJuIGVsLnRpdGxlPUFwKCksWG5uLmJ1aWxkKHFSLGVsLEhSLHdHZSl9ZnVuY3Rpb24gb3JuKCl7cmV0dXJuIEhSfWZ1bmN0aW9uIGNybigpe3JldHVybiBxUn1jb25zdCB1cm49T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjokbm4sZGI6e2dldERyYXdhYmxlRWxlbTphcm4sY2xlYXI6ZnVuY3Rpb24oKXtQZygpLHpSPTAscVI9eEdlKCksZWw9a0dlKCksSFI9eUdlKCksZ3ZlPUhSLnBsb3RDb2xvclBhbGV0dGUuc3BsaXQoIiwiKS5tYXAoaT0+aS50cmltKCkpLGdKPSExLHB2ZT0hMX0sc2V0QWNjVGl0bGU6QmcsZ2V0QWNjVGl0bGU6Q3Asc2V0RGlhZ3JhbVRpdGxlOmNtLGdldERpYWdyYW1UaXRsZTpBcCxnZXRBY2NEZXNjcmlwdGlvbjpfcCxzZXRBY2NEZXNjcmlwdGlvbjpTcCxzZXRPcmllbnRhdGlvbjpKbm4sc2V0WEF4aXNUaXRsZTpabm4sc2V0WEF4aXNSYW5nZURhdGE6RUdlLHNldFhBeGlzQmFuZDplcm4sc2V0WUF4aXNUaXRsZTp0cm4sc2V0WUF4aXNSYW5nZURhdGE6bnJuLHNldExpbmVEYXRhOmlybixzZXRCYXJEYXRhOnNybixzZXRUbXBTVkdHOlFubixnZXRDaGFydFRoZW1lQ29uZmlnOm9ybixnZXRDaGFydENvbmZpZzpjcm59LHJlbmRlcmVyOntkcmF3OihpLHMsdSxkKT0+e2NvbnN0IHA9ZC5kYix2PXAuZ2V0Q2hhcnRUaGVtZUNvbmZpZygpLGI9cC5nZXRDaGFydENvbmZpZygpO2Z1bmN0aW9uIHkoZWUpe3JldHVybiBlZT09PSJ0b3AiPyJ0ZXh0LWJlZm9yZS1lZGdlIjoibWlkZGxlIn1mdW5jdGlvbiBUKGVlKXtyZXR1cm4gZWU9PT0ibGVmdCI/InN0YXJ0IjplZT09PSJyaWdodCI/ImVuZCI6Im1pZGRsZSJ9ZnVuY3Rpb24gXyhlZSl7cmV0dXJuYHRyYW5zbGF0ZSgke2VlLnh9LCAke2VlLnl9KSByb3RhdGUoJHtlZS5yb3RhdGlvbnx8MH0pYH1YZS5kZWJ1ZyhgUmVuZGVyaW5nIHh5Y2hhcnQgY2hhcnQKYCtpKTtjb25zdCBBPXJSKHMpLFA9QS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm1haW4iKSxSPVAuYXBwZW5kKCJyZWN0IikuYXR0cigid2lkdGgiLGIud2lkdGgpLmF0dHIoImhlaWdodCIsYi5oZWlnaHQpLmF0dHIoImNsYXNzIiwiYmFja2dyb3VuZCIpO05nKEEsYi5oZWlnaHQsYi53aWR0aCwhMCksQS5hdHRyKCJ2aWV3Qm94IixgMCAwICR7Yi53aWR0aH0gJHtiLmhlaWdodH1gKSxSLmF0dHIoImZpbGwiLHYuYmFja2dyb3VuZENvbG9yKSxwLnNldFRtcFNWR0coQS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm1lcm1haWQtdG1wLWdyb3VwIikpO2NvbnN0IEY9cC5nZXREcmF3YWJsZUVsZW0oKSxqPXt9O2Z1bmN0aW9uIEsoZWUpe2xldCBpZT1QLG9lPSIiO2Zvcihjb25zdFtwZV1vZiBlZS5lbnRyaWVzKCkpe2xldCBiZT1QO3BlPjAmJmpbb2VdJiYoYmU9altvZV0pLG9lKz1lZVtwZV0saWU9altvZV0saWV8fChpZT1qW29lXT1iZS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZWVbcGVdKSl9cmV0dXJuIGllfWZvcihjb25zdCBlZSBvZiBGKXtpZihlZS5kYXRhLmxlbmd0aD09PTApY29udGludWU7Y29uc3QgaWU9SyhlZS5ncm91cFRleHRzKTtzd2l0Y2goZWUudHlwZSl7Y2FzZSJyZWN0IjppZS5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKGVlLmRhdGEpLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsb2U9Pm9lLngpLmF0dHIoInkiLG9lPT5vZS55KS5hdHRyKCJ3aWR0aCIsb2U9Pm9lLndpZHRoKS5hdHRyKCJoZWlnaHQiLG9lPT5vZS5oZWlnaHQpLmF0dHIoImZpbGwiLG9lPT5vZS5maWxsKS5hdHRyKCJzdHJva2UiLG9lPT5vZS5zdHJva2VGaWxsKS5hdHRyKCJzdHJva2Utd2lkdGgiLG9lPT5vZS5zdHJva2VXaWR0aCk7YnJlYWs7Y2FzZSJ0ZXh0IjppZS5zZWxlY3RBbGwoInRleHQiKS5kYXRhKGVlLmRhdGEpLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigiZmlsbCIsb2U9Pm9lLmZpbGwpLmF0dHIoImZvbnQtc2l6ZSIsb2U9Pm9lLmZvbnRTaXplKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsb2U9Pnkob2UudmVydGljYWxQb3MpKS5hdHRyKCJ0ZXh0LWFuY2hvciIsb2U9PlQob2UuaG9yaXpvbnRhbFBvcykpLmF0dHIoInRyYW5zZm9ybSIsb2U9Pl8ob2UpKS50ZXh0KG9lPT5vZS50ZXh0KTticmVhaztjYXNlInBhdGgiOmllLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoZWUuZGF0YSkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixvZT0+b2UucGF0aCkuYXR0cigiZmlsbCIsb2U9Pm9lLmZpbGw/b2UuZmlsbDoibm9uZSIpLmF0dHIoInN0cm9rZSIsb2U9Pm9lLnN0cm9rZUZpbGwpLmF0dHIoInN0cm9rZS13aWR0aCIsb2U9Pm9lLnN0cm9rZVdpZHRoKTticmVha319fX19fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBtdmU9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihfdCxFdCxHdCxsbil7Zm9yKEd0PUd0fHx7fSxsbj1fdC5sZW5ndGg7bG4tLTtHdFtfdFtsbl1dPUV0KTtyZXR1cm4gR3R9LHM9WzEsM10sdT1bMSw0XSxkPVsxLDVdLHA9WzEsNl0sdj1bNSw2LDgsOSwxMSwxMywzMSwzMiwzMywzNCwzNSwzNiw0NCw2Miw2M10sYj1bMSwxOF0seT1bMiw3XSxUPVsxLDIyXSxfPVsxLDIzXSxBPVsxLDI0XSxQPVsxLDI1XSxSPVsxLDI2XSxGPVsxLDI3XSxqPVsxLDIwXSxLPVsxLDI4XSxlZT1bMSwyOV0saWU9WzYyLDYzXSxvZT1bNSw4LDksMTEsMTMsMzEsMzIsMzMsMzQsMzUsMzYsNDQsNTEsNTMsNjIsNjNdLHBlPVsxLDQ3XSxiZT1bMSw0OF0sYWU9WzEsNDldLG5lPVsxLDUwXSxzZT1bMSw1MV0sZGU9WzEsNTJdLFg9WzEsNTNdLGdlPVs1Myw1NF0sVz1bMSw2NF0seGU9WzEsNjBdLFU9WzEsNjFdLEZlPVsxLDYyXSxQZT1bMSw2M10samU9WzEsNjVdLEllPVsxLDY5XSxTZT1bMSw3MF0sQ2U9WzEsNjddLGtlPVsxLDY4XSxLZT1bNSw4LDksMTEsMTMsMzEsMzIsMzMsMzQsMzUsMzYsNDQsNjIsNjNdLEZ0PXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxkaXJlY3RpdmU6NCxORVdMSU5FOjUsUkQ6NixkaWFncmFtOjcsRU9GOjgsYWNjX3RpdGxlOjksYWNjX3RpdGxlX3ZhbHVlOjEwLGFjY19kZXNjcjoxMSxhY2NfZGVzY3JfdmFsdWU6MTIsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToxMyxyZXF1aXJlbWVudERlZjoxNCxlbGVtZW50RGVmOjE1LHJlbGF0aW9uc2hpcERlZjoxNixyZXF1aXJlbWVudFR5cGU6MTcscmVxdWlyZW1lbnROYW1lOjE4LFNUUlVDVF9TVEFSVDoxOSxyZXF1aXJlbWVudEJvZHk6MjAsSUQ6MjEsQ09MT05TRVA6MjIsaWQ6MjMsVEVYVDoyNCx0ZXh0OjI1LFJJU0s6MjYscmlza0xldmVsOjI3LFZFUklGWU1USEQ6MjgsdmVyaWZ5VHlwZToyOSxTVFJVQ1RfU1RPUDozMCxSRVFVSVJFTUVOVDozMSxGVU5DVElPTkFMX1JFUVVJUkVNRU5UOjMyLElOVEVSRkFDRV9SRVFVSVJFTUVOVDozMyxQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVDozNCxQSFlTSUNBTF9SRVFVSVJFTUVOVDozNSxERVNJR05fQ09OU1RSQUlOVDozNixMT1dfUklTSzozNyxNRURfUklTSzozOCxISUdIX1JJU0s6MzksVkVSSUZZX0FOQUxZU0lTOjQwLFZFUklGWV9ERU1PTlNUUkFUSU9OOjQxLFZFUklGWV9JTlNQRUNUSU9OOjQyLFZFUklGWV9URVNUOjQzLEVMRU1FTlQ6NDQsZWxlbWVudE5hbWU6NDUsZWxlbWVudEJvZHk6NDYsVFlQRTo0Nyx0eXBlOjQ4LERPQ1JFRjo0OSxyZWY6NTAsRU5EX0FSUk9XX0w6NTEscmVsYXRpb25zaGlwOjUyLExJTkU6NTMsRU5EX0FSUk9XX1I6NTQsQ09OVEFJTlM6NTUsQ09QSUVTOjU2LERFUklWRVM6NTcsU0FUSVNGSUVTOjU4LFZFUklGSUVTOjU5LFJFRklORVM6NjAsVFJBQ0VTOjYxLHVucVN0cmluZzo2MixxU3RyaW5nOjYzLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw1OiJORVdMSU5FIiw2OiJSRCIsODoiRU9GIiw5OiJhY2NfdGl0bGUiLDEwOiJhY2NfdGl0bGVfdmFsdWUiLDExOiJhY2NfZGVzY3IiLDEyOiJhY2NfZGVzY3JfdmFsdWUiLDEzOiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwxOToiU1RSVUNUX1NUQVJUIiwyMToiSUQiLDIyOiJDT0xPTlNFUCIsMjQ6IlRFWFQiLDI2OiJSSVNLIiwyODoiVkVSSUZZTVRIRCIsMzA6IlNUUlVDVF9TVE9QIiwzMToiUkVRVUlSRU1FTlQiLDMyOiJGVU5DVElPTkFMX1JFUVVJUkVNRU5UIiwzMzoiSU5URVJGQUNFX1JFUVVJUkVNRU5UIiwzNDoiUEVSRk9STUFOQ0VfUkVRVUlSRU1FTlQiLDM1OiJQSFlTSUNBTF9SRVFVSVJFTUVOVCIsMzY6IkRFU0lHTl9DT05TVFJBSU5UIiwzNzoiTE9XX1JJU0siLDM4OiJNRURfUklTSyIsMzk6IkhJR0hfUklTSyIsNDA6IlZFUklGWV9BTkFMWVNJUyIsNDE6IlZFUklGWV9ERU1PTlNUUkFUSU9OIiw0MjoiVkVSSUZZX0lOU1BFQ1RJT04iLDQzOiJWRVJJRllfVEVTVCIsNDQ6IkVMRU1FTlQiLDQ3OiJUWVBFIiw0OToiRE9DUkVGIiw1MToiRU5EX0FSUk9XX0wiLDUzOiJMSU5FIiw1NDoiRU5EX0FSUk9XX1IiLDU1OiJDT05UQUlOUyIsNTY6IkNPUElFUyIsNTc6IkRFUklWRVMiLDU4OiJTQVRJU0ZJRVMiLDU5OiJWRVJJRklFUyIsNjA6IlJFRklORVMiLDYxOiJUUkFDRVMiLDYyOiJ1bnFTdHJpbmciLDYzOiJxU3RyaW5nIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFszLDJdLFszLDRdLFs0LDJdLFs0LDJdLFs0LDFdLFs3LDBdLFs3LDJdLFs3LDJdLFs3LDJdLFs3LDJdLFs3LDJdLFsxNCw1XSxbMjAsNV0sWzIwLDVdLFsyMCw1XSxbMjAsNV0sWzIwLDJdLFsyMCwxXSxbMTcsMV0sWzE3LDFdLFsxNywxXSxbMTcsMV0sWzE3LDFdLFsxNywxXSxbMjcsMV0sWzI3LDFdLFsyNywxXSxbMjksMV0sWzI5LDFdLFsyOSwxXSxbMjksMV0sWzE1LDVdLFs0Niw1XSxbNDYsNV0sWzQ2LDJdLFs0NiwxXSxbMTYsNV0sWzE2LDVdLFs1MiwxXSxbNTIsMV0sWzUyLDFdLFs1MiwxXSxbNTIsMV0sWzUyLDFdLFs1MiwxXSxbMTgsMV0sWzE4LDFdLFsyMywxXSxbMjMsMV0sWzI1LDFdLFsyNSwxXSxbNDUsMV0sWzQ1LDFdLFs0OCwxXSxbNDgsMV0sWzUwLDFdLFs1MCwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihFdCxHdCxsbix4dCxQdCxRZSxEdCl7dmFyIGt0PVFlLmxlbmd0aC0xO3N3aXRjaChQdCl7Y2FzZSA0OnRoaXMuJD1RZVtrdF0udHJpbSgpLHh0LnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSA1OmNhc2UgNjp0aGlzLiQ9UWVba3RdLnRyaW0oKSx4dC5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgNzp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxMzp4dC5hZGRSZXF1aXJlbWVudChRZVtrdC0zXSxRZVtrdC00XSk7YnJlYWs7Y2FzZSAxNDp4dC5zZXROZXdSZXFJZChRZVtrdC0yXSk7YnJlYWs7Y2FzZSAxNTp4dC5zZXROZXdSZXFUZXh0KFFlW2t0LTJdKTticmVhaztjYXNlIDE2Onh0LnNldE5ld1JlcVJpc2soUWVba3QtMl0pO2JyZWFrO2Nhc2UgMTc6eHQuc2V0TmV3UmVxVmVyaWZ5TWV0aG9kKFFlW2t0LTJdKTticmVhaztjYXNlIDIwOnRoaXMuJD14dC5SZXF1aXJlbWVudFR5cGUuUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAyMTp0aGlzLiQ9eHQuUmVxdWlyZW1lbnRUeXBlLkZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAyMjp0aGlzLiQ9eHQuUmVxdWlyZW1lbnRUeXBlLklOVEVSRkFDRV9SRVFVSVJFTUVOVDticmVhaztjYXNlIDIzOnRoaXMuJD14dC5SZXF1aXJlbWVudFR5cGUuUEVSRk9STUFOQ0VfUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAyNDp0aGlzLiQ9eHQuUmVxdWlyZW1lbnRUeXBlLlBIWVNJQ0FMX1JFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjU6dGhpcy4kPXh0LlJlcXVpcmVtZW50VHlwZS5ERVNJR05fQ09OU1RSQUlOVDticmVhaztjYXNlIDI2OnRoaXMuJD14dC5SaXNrTGV2ZWwuTE9XX1JJU0s7YnJlYWs7Y2FzZSAyNzp0aGlzLiQ9eHQuUmlza0xldmVsLk1FRF9SSVNLO2JyZWFrO2Nhc2UgMjg6dGhpcy4kPXh0LlJpc2tMZXZlbC5ISUdIX1JJU0s7YnJlYWs7Y2FzZSAyOTp0aGlzLiQ9eHQuVmVyaWZ5VHlwZS5WRVJJRllfQU5BTFlTSVM7YnJlYWs7Y2FzZSAzMDp0aGlzLiQ9eHQuVmVyaWZ5VHlwZS5WRVJJRllfREVNT05TVFJBVElPTjticmVhaztjYXNlIDMxOnRoaXMuJD14dC5WZXJpZnlUeXBlLlZFUklGWV9JTlNQRUNUSU9OO2JyZWFrO2Nhc2UgMzI6dGhpcy4kPXh0LlZlcmlmeVR5cGUuVkVSSUZZX1RFU1Q7YnJlYWs7Y2FzZSAzMzp4dC5hZGRFbGVtZW50KFFlW2t0LTNdKTticmVhaztjYXNlIDM0Onh0LnNldE5ld0VsZW1lbnRUeXBlKFFlW2t0LTJdKTticmVhaztjYXNlIDM1Onh0LnNldE5ld0VsZW1lbnREb2NSZWYoUWVba3QtMl0pO2JyZWFrO2Nhc2UgMzg6eHQuYWRkUmVsYXRpb25zaGlwKFFlW2t0LTJdLFFlW2t0XSxRZVtrdC00XSk7YnJlYWs7Y2FzZSAzOTp4dC5hZGRSZWxhdGlvbnNoaXAoUWVba3QtMl0sUWVba3QtNF0sUWVba3RdKTticmVhaztjYXNlIDQwOnRoaXMuJD14dC5SZWxhdGlvbnNoaXBzLkNPTlRBSU5TO2JyZWFrO2Nhc2UgNDE6dGhpcy4kPXh0LlJlbGF0aW9uc2hpcHMuQ09QSUVTO2JyZWFrO2Nhc2UgNDI6dGhpcy4kPXh0LlJlbGF0aW9uc2hpcHMuREVSSVZFUzticmVhaztjYXNlIDQzOnRoaXMuJD14dC5SZWxhdGlvbnNoaXBzLlNBVElTRklFUzticmVhaztjYXNlIDQ0OnRoaXMuJD14dC5SZWxhdGlvbnNoaXBzLlZFUklGSUVTO2JyZWFrO2Nhc2UgNDU6dGhpcy4kPXh0LlJlbGF0aW9uc2hpcHMuUkVGSU5FUzticmVhaztjYXNlIDQ2OnRoaXMuJD14dC5SZWxhdGlvbnNoaXBzLlRSQUNFUzticmVha319LHRhYmxlOlt7MzoxLDQ6Miw2OnMsOTp1LDExOmQsMTM6cH0sezE6WzNdfSx7Mzo4LDQ6Miw1OlsxLDddLDY6cyw5OnUsMTE6ZCwxMzpwfSx7NTpbMSw5XX0sezEwOlsxLDEwXX0sezEyOlsxLDExXX0saSh2LFsyLDZdKSx7MzoxMiw0OjIsNjpzLDk6dSwxMTpkLDEzOnB9LHsxOlsyLDJdfSx7NDoxNyw1OmIsNzoxMyw4OnksOTp1LDExOmQsMTM6cCwxNDoxNCwxNToxNSwxNjoxNiwxNzoxOSwyMzoyMSwzMTpULDMyOl8sMzM6QSwzNDpQLDM1OlIsMzY6Riw0NDpqLDYyOkssNjM6ZWV9LGkodixbMiw0XSksaSh2LFsyLDVdKSx7MTpbMiwxXX0sezg6WzEsMzBdfSx7NDoxNyw1OmIsNzozMSw4OnksOTp1LDExOmQsMTM6cCwxNDoxNCwxNToxNSwxNjoxNiwxNzoxOSwyMzoyMSwzMTpULDMyOl8sMzM6QSwzNDpQLDM1OlIsMzY6Riw0NDpqLDYyOkssNjM6ZWV9LHs0OjE3LDU6Yiw3OjMyLDg6eSw5OnUsMTE6ZCwxMzpwLDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE5LDIzOjIxLDMxOlQsMzI6XywzMzpBLDM0OlAsMzU6UiwzNjpGLDQ0OmosNjI6Syw2MzplZX0sezQ6MTcsNTpiLDc6MzMsODp5LDk6dSwxMTpkLDEzOnAsMTQ6MTQsMTU6MTUsMTY6MTYsMTc6MTksMjM6MjEsMzE6VCwzMjpfLDMzOkEsMzQ6UCwzNTpSLDM2OkYsNDQ6aiw2MjpLLDYzOmVlfSx7NDoxNyw1OmIsNzozNCw4OnksOTp1LDExOmQsMTM6cCwxNDoxNCwxNToxNSwxNjoxNiwxNzoxOSwyMzoyMSwzMTpULDMyOl8sMzM6QSwzNDpQLDM1OlIsMzY6Riw0NDpqLDYyOkssNjM6ZWV9LHs0OjE3LDU6Yiw3OjM1LDg6eSw5OnUsMTE6ZCwxMzpwLDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE5LDIzOjIxLDMxOlQsMzI6XywzMzpBLDM0OlAsMzU6UiwzNjpGLDQ0OmosNjI6Syw2MzplZX0sezE4OjM2LDYyOlsxLDM3XSw2MzpbMSwzOF19LHs0NTozOSw2MjpbMSw0MF0sNjM6WzEsNDFdfSx7NTE6WzEsNDJdLDUzOlsxLDQzXX0saShpZSxbMiwyMF0pLGkoaWUsWzIsMjFdKSxpKGllLFsyLDIyXSksaShpZSxbMiwyM10pLGkoaWUsWzIsMjRdKSxpKGllLFsyLDI1XSksaShvZSxbMiw0OV0pLGkob2UsWzIsNTBdKSx7MTpbMiwzXX0sezg6WzIsOF19LHs4OlsyLDldfSx7ODpbMiwxMF19LHs4OlsyLDExXX0sezg6WzIsMTJdfSx7MTk6WzEsNDRdfSx7MTk6WzIsNDddfSx7MTk6WzIsNDhdfSx7MTk6WzEsNDVdfSx7MTk6WzIsNTNdfSx7MTk6WzIsNTRdfSx7NTI6NDYsNTU6cGUsNTY6YmUsNTc6YWUsNTg6bmUsNTk6c2UsNjA6ZGUsNjE6WH0sezUyOjU0LDU1OnBlLDU2OmJlLDU3OmFlLDU4Om5lLDU5OnNlLDYwOmRlLDYxOlh9LHs1OlsxLDU1XX0sezU6WzEsNTZdfSx7NTM6WzEsNTddfSxpKGdlLFsyLDQwXSksaShnZSxbMiw0MV0pLGkoZ2UsWzIsNDJdKSxpKGdlLFsyLDQzXSksaShnZSxbMiw0NF0pLGkoZ2UsWzIsNDVdKSxpKGdlLFsyLDQ2XSksezU0OlsxLDU4XX0sezU6VywyMDo1OSwyMTp4ZSwyNDpVLDI2OkZlLDI4OlBlLDMwOmplfSx7NTpJZSwzMDpTZSw0Njo2Niw0NzpDZSw0OTprZX0sezIzOjcxLDYyOkssNjM6ZWV9LHsyMzo3Miw2MjpLLDYzOmVlfSxpKEtlLFsyLDEzXSksezIyOlsxLDczXX0sezIyOlsxLDc0XX0sezIyOlsxLDc1XX0sezIyOlsxLDc2XX0sezU6VywyMDo3NywyMTp4ZSwyNDpVLDI2OkZlLDI4OlBlLDMwOmplfSxpKEtlLFsyLDE5XSksaShLZSxbMiwzM10pLHsyMjpbMSw3OF19LHsyMjpbMSw3OV19LHs1OkllLDMwOlNlLDQ2OjgwLDQ3OkNlLDQ5OmtlfSxpKEtlLFsyLDM3XSksaShLZSxbMiwzOF0pLGkoS2UsWzIsMzldKSx7MjM6ODEsNjI6Syw2MzplZX0sezI1OjgyLDYyOlsxLDgzXSw2MzpbMSw4NF19LHsyNzo4NSwzNzpbMSw4Nl0sMzg6WzEsODddLDM5OlsxLDg4XX0sezI5Ojg5LDQwOlsxLDkwXSw0MTpbMSw5MV0sNDI6WzEsOTJdLDQzOlsxLDkzXX0saShLZSxbMiwxOF0pLHs0ODo5NCw2MjpbMSw5NV0sNjM6WzEsOTZdfSx7NTA6OTcsNjI6WzEsOThdLDYzOlsxLDk5XX0saShLZSxbMiwzNl0pLHs1OlsxLDEwMF19LHs1OlsxLDEwMV19LHs1OlsyLDUxXX0sezU6WzIsNTJdfSx7NTpbMSwxMDJdfSx7NTpbMiwyNl19LHs1OlsyLDI3XX0sezU6WzIsMjhdfSx7NTpbMSwxMDNdfSx7NTpbMiwyOV19LHs1OlsyLDMwXX0sezU6WzIsMzFdfSx7NTpbMiwzMl19LHs1OlsxLDEwNF19LHs1OlsyLDU1XX0sezU6WzIsNTZdfSx7NTpbMSwxMDVdfSx7NTpbMiw1N119LHs1OlsyLDU4XX0sezU6VywyMDoxMDYsMjE6eGUsMjQ6VSwyNjpGZSwyODpQZSwzMDpqZX0sezU6VywyMDoxMDcsMjE6eGUsMjQ6VSwyNjpGZSwyODpQZSwzMDpqZX0sezU6VywyMDoxMDgsMjE6eGUsMjQ6VSwyNjpGZSwyODpQZSwzMDpqZX0sezU6VywyMDoxMDksMjE6eGUsMjQ6VSwyNjpGZSwyODpQZSwzMDpqZX0sezU6SWUsMzA6U2UsNDY6MTEwLDQ3OkNlLDQ5OmtlfSx7NTpJZSwzMDpTZSw0NjoxMTEsNDc6Q2UsNDk6a2V9LGkoS2UsWzIsMTRdKSxpKEtlLFsyLDE1XSksaShLZSxbMiwxNl0pLGkoS2UsWzIsMTddKSxpKEtlLFsyLDM0XSksaShLZSxbMiwzNV0pXSxkZWZhdWx0QWN0aW9uczp7ODpbMiwyXSwxMjpbMiwxXSwzMDpbMiwzXSwzMTpbMiw4XSwzMjpbMiw5XSwzMzpbMiwxMF0sMzQ6WzIsMTFdLDM1OlsyLDEyXSwzNzpbMiw0N10sMzg6WzIsNDhdLDQwOlsyLDUzXSw0MTpbMiw1NF0sODM6WzIsNTFdLDg0OlsyLDUyXSw4NjpbMiwyNl0sODc6WzIsMjddLDg4OlsyLDI4XSw5MDpbMiwyOV0sOTE6WzIsMzBdLDkyOlsyLDMxXSw5MzpbMiwzMl0sOTU6WzIsNTVdLDk2OlsyLDU2XSw5ODpbMiw1N10sOTk6WzIsNThdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKEV0LEd0KXtpZihHdC5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKEV0KTtlbHNle3ZhciBsbj1uZXcgRXJyb3IoRXQpO3Rocm93IGxuLmhhc2g9R3QsbG59fSxwYXJzZTpmdW5jdGlvbihFdCl7dmFyIEd0PXRoaXMsbG49WzBdLHh0PVtdLFB0PVtudWxsXSxRZT1bXSxEdD10aGlzLnRhYmxlLGt0PSIiLE9uPTAsaHQ9MCx6cj0yLHl0PTEsamk9UWUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkseGk9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxNYT17eXk6e319O2Zvcih2YXIgenMgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSx6cykmJihNYS55eVt6c109dGhpcy55eVt6c10pO3hpLnNldElucHV0KEV0LE1hLnl5KSxNYS55eS5sZXhlcj14aSxNYS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgeGkueXlsbG9jPiJ1IiYmKHhpLnl5bGxvYz17fSk7dmFyIGFvPXhpLnl5bGxvYztRZS5wdXNoKGFvKTt2YXIgVHI9eGkub3B0aW9ucyYmeGkub3B0aW9ucy5yYW5nZXM7dHlwZW9mIE1hLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPU1hLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIEZuKCl7dmFyIFBhO3JldHVybiBQYT14dC5wb3AoKXx8eGkubGV4KCl8fHl0LHR5cGVvZiBQYSE9Im51bWJlciImJihQYSBpbnN0YW5jZW9mIEFycmF5JiYoeHQ9UGEsUGE9eHQucG9wKCkpLFBhPUd0LnN5bWJvbHNfW1BhXXx8UGEpLFBhfWZvcih2YXIgcW4sVW4sQXQsd3Qsb249e30sZm4sQW4sb28sam87Oyl7aWYoVW49bG5bbG4ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbVW5dP0F0PXRoaXMuZGVmYXVsdEFjdGlvbnNbVW5dOigocW49PT1udWxsfHx0eXBlb2YgcW4+InUiKSYmKHFuPUZuKCkpLEF0PUR0W1VuXSYmRHRbVW5dW3FuXSksdHlwZW9mIEF0PiJ1Inx8IUF0Lmxlbmd0aHx8IUF0WzBdKXt2YXIgJG89IiI7am89W107Zm9yKGZuIGluIER0W1VuXSl0aGlzLnRlcm1pbmFsc19bZm5dJiZmbj56ciYmam8ucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW2ZuXSsiJyIpO3hpLnNob3dQb3NpdGlvbj8kbz0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhPbisxKStgOgpgK3hpLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGAram8uam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1txbl18fHFuKSsiJyI6JG89IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoT24rMSkrIjogVW5leHBlY3RlZCAiKyhxbj09eXQ/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bcW5dfHxxbikrIiciKSx0aGlzLnBhcnNlRXJyb3IoJG8se3RleHQ6eGkubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3FuXXx8cW4sbGluZTp4aS55eWxpbmVubyxsb2M6YW8sZXhwZWN0ZWQ6am99KX1pZihBdFswXWluc3RhbmNlb2YgQXJyYXkmJkF0Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrVW4rIiwgdG9rZW46ICIrcW4pO3N3aXRjaChBdFswXSl7Y2FzZSAxOmxuLnB1c2gocW4pLFB0LnB1c2goeGkueXl0ZXh0KSxRZS5wdXNoKHhpLnl5bGxvYyksbG4ucHVzaChBdFsxXSkscW49bnVsbCxodD14aS55eWxlbmcsa3Q9eGkueXl0ZXh0LE9uPXhpLnl5bGluZW5vLGFvPXhpLnl5bGxvYzticmVhaztjYXNlIDI6aWYoQW49dGhpcy5wcm9kdWN0aW9uc19bQXRbMV1dWzFdLG9uLiQ9UHRbUHQubGVuZ3RoLUFuXSxvbi5fJD17Zmlyc3RfbGluZTpRZVtRZS5sZW5ndGgtKEFufHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6UWVbUWUubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46UWVbUWUubGVuZ3RoLShBbnx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpRZVtRZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LFRyJiYob24uXyQucmFuZ2U9W1FlW1FlLmxlbmd0aC0oQW58fDEpXS5yYW5nZVswXSxRZVtRZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx3dD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkob24sW2t0LGh0LE9uLE1hLnl5LEF0WzFdLFB0LFFlXS5jb25jYXQoamkpKSx0eXBlb2Ygd3Q8InUiKXJldHVybiB3dDtBbiYmKGxuPWxuLnNsaWNlKDAsLTEqQW4qMiksUHQ9UHQuc2xpY2UoMCwtMSpBbiksUWU9UWUuc2xpY2UoMCwtMSpBbikpLGxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19bQXRbMV1dWzBdKSxQdC5wdXNoKG9uLiQpLFFlLnB1c2gob24uXyQpLG9vPUR0W2xuW2xuLmxlbmd0aC0yXV1bbG5bbG4ubGVuZ3RoLTFdXSxsbi5wdXNoKG9vKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sTmU9ZnVuY3Rpb24oKXt2YXIgX3Q9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oR3QsbG4pe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoR3QsbG4pO2Vsc2UgdGhyb3cgbmV3IEVycm9yKEd0KX0sc2V0SW5wdXQ6ZnVuY3Rpb24oRXQsR3Qpe3JldHVybiB0aGlzLnl5PUd0fHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1FdCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgRXQ9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPUV0LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1FdCx0aGlzLm1hdGNoZWQrPUV0O3ZhciBHdD1FdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIEd0Pyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxFdH0sdW5wdXQ6ZnVuY3Rpb24oRXQpe3ZhciBHdD1FdC5sZW5ndGgsbG49RXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1FdCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtR3QpLHRoaXMub2Zmc2V0LT1HdDt2YXIgeHQ9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1sbi5sZW5ndGgtMSk7dmFyIFB0PXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpsbj8obG4ubGVuZ3RoPT09eHQubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKSt4dFt4dC5sZW5ndGgtbG4ubGVuZ3RoXS5sZW5ndGgtbG5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1HdH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtQdFswXSxQdFswXSt0aGlzLnl5bGVuZy1HdF0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKEV0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoRXQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIEV0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oRXQubGVuZ3RoPjIwPyIuLi4iOiIiKStFdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciBFdD10aGlzLm1hdGNoO3JldHVybiBFdC5sZW5ndGg8MjAmJihFdCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtRXQubGVuZ3RoKSksKEV0LnN1YnN0cigwLDIwKSsoRXQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBFdD10aGlzLnBhc3RJbnB1dCgpLEd0PW5ldyBBcnJheShFdC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBFdCt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArR3QrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKEV0LEd0KXt2YXIgbG4seHQsUHQ7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKFB0PXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKFB0Lnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLHh0PUV0WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSx4dCYmKHRoaXMueXlsaW5lbm8rPXh0Lmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnh0P3h0W3h0Lmxlbmd0aC0xXS5sZW5ndGgteHRbeHQubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rRXRbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9RXRbMF0sdGhpcy5tYXRjaCs9RXRbMF0sdGhpcy5tYXRjaGVzPUV0LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKEV0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1FdFswXSxsbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxHdCx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxsbilyZXR1cm4gbG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIFFlIGluIFB0KXRoaXNbUWVdPVB0W1FlXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBFdCxHdCxsbix4dDt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBQdD10aGlzLl9jdXJyZW50UnVsZXMoKSxRZT0wO1FlPFB0Lmxlbmd0aDtRZSsrKWlmKGxuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbUHRbUWVdXSksbG4mJighR3R8fGxuWzBdLmxlbmd0aD5HdFswXS5sZW5ndGgpKXtpZihHdD1sbix4dD1RZSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihFdD10aGlzLnRlc3RfbWF0Y2gobG4sUHRbUWVdKSxFdCE9PSExKXJldHVybiBFdDtpZih0aGlzLl9iYWNrdHJhY2spe0d0PSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIEd0PyhFdD10aGlzLnRlc3RfbWF0Y2goR3QsUHRbeHRdKSxFdCE9PSExP0V0OiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgR3Q9dGhpcy5uZXh0KCk7cmV0dXJuIEd0fHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihHdCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKEd0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgR3Q9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gR3Q+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbihHdCl7cmV0dXJuIEd0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoR3R8fDApLEd0Pj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbR3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKEd0KXt0aGlzLmJlZ2luKEd0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihHdCxsbix4dCxQdCl7c3dpdGNoKHh0KXtjYXNlIDA6cmV0dXJuInRpdGxlIjtjYXNlIDE6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDk7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSAzOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwxMTtjYXNlIDQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDU6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgNjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA3OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDg6cmV0dXJuIDU7Y2FzZSA5OmJyZWFrO2Nhc2UgMTA6YnJlYWs7Y2FzZSAxMTpicmVhaztjYXNlIDEyOnJldHVybiA4O2Nhc2UgMTM6cmV0dXJuIDY7Y2FzZSAxNDpyZXR1cm4gMTk7Y2FzZSAxNTpyZXR1cm4gMzA7Y2FzZSAxNjpyZXR1cm4gMjI7Y2FzZSAxNzpyZXR1cm4gMjE7Y2FzZSAxODpyZXR1cm4gMjQ7Y2FzZSAxOTpyZXR1cm4gMjY7Y2FzZSAyMDpyZXR1cm4gMjg7Y2FzZSAyMTpyZXR1cm4gMzE7Y2FzZSAyMjpyZXR1cm4gMzI7Y2FzZSAyMzpyZXR1cm4gMzM7Y2FzZSAyNDpyZXR1cm4gMzQ7Y2FzZSAyNTpyZXR1cm4gMzU7Y2FzZSAyNjpyZXR1cm4gMzY7Y2FzZSAyNzpyZXR1cm4gMzc7Y2FzZSAyODpyZXR1cm4gMzg7Y2FzZSAyOTpyZXR1cm4gMzk7Y2FzZSAzMDpyZXR1cm4gNDA7Y2FzZSAzMTpyZXR1cm4gNDE7Y2FzZSAzMjpyZXR1cm4gNDI7Y2FzZSAzMzpyZXR1cm4gNDM7Y2FzZSAzNDpyZXR1cm4gNDQ7Y2FzZSAzNTpyZXR1cm4gNTU7Y2FzZSAzNjpyZXR1cm4gNTY7Y2FzZSAzNzpyZXR1cm4gNTc7Y2FzZSAzODpyZXR1cm4gNTg7Y2FzZSAzOTpyZXR1cm4gNTk7Y2FzZSA0MDpyZXR1cm4gNjA7Y2FzZSA0MTpyZXR1cm4gNjE7Y2FzZSA0MjpyZXR1cm4gNDc7Y2FzZSA0MzpyZXR1cm4gNDk7Y2FzZSA0NDpyZXR1cm4gNTE7Y2FzZSA0NTpyZXR1cm4gNTQ7Y2FzZSA0NjpyZXR1cm4gNTM7Y2FzZSA0Nzp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDQ4OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDQ5OnJldHVybiJxU3RyaW5nIjtjYXNlIDUwOnJldHVybiBsbi55eXRleHQ9bG4ueXl0ZXh0LnRyaW0oKSw2Mn19LHJ1bGVzOlsvXig/OnRpdGxlXHNbXiNcbjtdKykvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86KFxyP1xuKSspL2ksL14oPzpccyspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JVteXG5dKikvaSwvXig/OiQpL2ksL14oPzpyZXF1aXJlbWVudERpYWdyYW1cYikvaSwvXig/Olx7KS9pLC9eKD86XH0pL2ksL14oPzo6KS9pLC9eKD86aWRcYikvaSwvXig/OnRleHRcYikvaSwvXig/OnJpc2tcYikvaSwvXig/OnZlcmlmeU1ldGhvZFxiKS9pLC9eKD86cmVxdWlyZW1lbnRcYikvaSwvXig/OmZ1bmN0aW9uYWxSZXF1aXJlbWVudFxiKS9pLC9eKD86aW50ZXJmYWNlUmVxdWlyZW1lbnRcYikvaSwvXig/OnBlcmZvcm1hbmNlUmVxdWlyZW1lbnRcYikvaSwvXig/OnBoeXNpY2FsUmVxdWlyZW1lbnRcYikvaSwvXig/OmRlc2lnbkNvbnN0cmFpbnRcYikvaSwvXig/Omxvd1xiKS9pLC9eKD86bWVkaXVtXGIpL2ksL14oPzpoaWdoXGIpL2ksL14oPzphbmFseXNpc1xiKS9pLC9eKD86ZGVtb25zdHJhdGlvblxiKS9pLC9eKD86aW5zcGVjdGlvblxiKS9pLC9eKD86dGVzdFxiKS9pLC9eKD86ZWxlbWVudFxiKS9pLC9eKD86Y29udGFpbnNcYikvaSwvXig/OmNvcGllc1xiKS9pLC9eKD86ZGVyaXZlc1xiKS9pLC9eKD86c2F0aXNmaWVzXGIpL2ksL14oPzp2ZXJpZmllc1xiKS9pLC9eKD86cmVmaW5lc1xiKS9pLC9eKD86dHJhY2VzXGIpL2ksL14oPzp0eXBlXGIpL2ksL14oPzpkb2NyZWZcYikvaSwvXig/OjwtKS9pLC9eKD86LT4pL2ksL14oPzotKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXHddW15cclxuXHtcPFw+XC1cPV0qKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbNiw3XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzRdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbMl0saW5jbHVzaXZlOiExfSx1bnFTdHJpbmc6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sdG9rZW46e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbNDgsNDldLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwzLDUsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDUwXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIF90fSgpO0Z0LmxleGVyPU5lO2Z1bmN0aW9uIGduKCl7dGhpcy55eT17fX1yZXR1cm4gZ24ucHJvdG90eXBlPUZ0LEZ0LlBhcnNlcj1nbixuZXcgZ259KCk7bXZlLnBhcnNlcj1tdmU7Y29uc3QgbHJuPW12ZTtsZXQgdnZlPVtdLFYyPXt9LFZSPXt9LEY5PXt9LFVSPXt9O2NvbnN0IGhybj17UmVxdWlyZW1lbnRUeXBlOntSRVFVSVJFTUVOVDoiUmVxdWlyZW1lbnQiLEZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ6IkZ1bmN0aW9uYWwgUmVxdWlyZW1lbnQiLElOVEVSRkFDRV9SRVFVSVJFTUVOVDoiSW50ZXJmYWNlIFJlcXVpcmVtZW50IixQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVDoiUGVyZm9ybWFuY2UgUmVxdWlyZW1lbnQiLFBIWVNJQ0FMX1JFUVVJUkVNRU5UOiJQaHlzaWNhbCBSZXF1aXJlbWVudCIsREVTSUdOX0NPTlNUUkFJTlQ6IkRlc2lnbiBDb25zdHJhaW50In0sUmlza0xldmVsOntMT1dfUklTSzoiTG93IixNRURfUklTSzoiTWVkaXVtIixISUdIX1JJU0s6IkhpZ2gifSxWZXJpZnlUeXBlOntWRVJJRllfQU5BTFlTSVM6IkFuYWx5c2lzIixWRVJJRllfREVNT05TVFJBVElPTjoiRGVtb25zdHJhdGlvbiIsVkVSSUZZX0lOU1BFQ1RJT046Ikluc3BlY3Rpb24iLFZFUklGWV9URVNUOiJUZXN0In0sUmVsYXRpb25zaGlwczp7Q09OVEFJTlM6ImNvbnRhaW5zIixDT1BJRVM6ImNvcGllcyIsREVSSVZFUzoiZGVyaXZlcyIsU0FUSVNGSUVTOiJzYXRpc2ZpZXMiLFZFUklGSUVTOiJ2ZXJpZmllcyIsUkVGSU5FUzoicmVmaW5lcyIsVFJBQ0VTOiJ0cmFjZXMifSxnZXRDb25maWc6KCk9PnF0KCkucmVxLGFkZFJlcXVpcmVtZW50OihpLHMpPT4oVlJbaV09PT12b2lkIDAmJihWUltpXT17bmFtZTppLHR5cGU6cyxpZDpWMi5pZCx0ZXh0OlYyLnRleHQscmlzazpWMi5yaXNrLHZlcmlmeU1ldGhvZDpWMi52ZXJpZnlNZXRob2R9KSxWMj17fSxWUltpXSksZ2V0UmVxdWlyZW1lbnRzOigpPT5WUixzZXROZXdSZXFJZDppPT57VjIhPT12b2lkIDAmJihWMi5pZD1pKX0sc2V0TmV3UmVxVGV4dDppPT57VjIhPT12b2lkIDAmJihWMi50ZXh0PWkpfSxzZXROZXdSZXFSaXNrOmk9PntWMiE9PXZvaWQgMCYmKFYyLnJpc2s9aSl9LHNldE5ld1JlcVZlcmlmeU1ldGhvZDppPT57VjIhPT12b2lkIDAmJihWMi52ZXJpZnlNZXRob2Q9aSl9LHNldEFjY1RpdGxlOkJnLGdldEFjY1RpdGxlOkNwLHNldEFjY0Rlc2NyaXB0aW9uOlNwLGdldEFjY0Rlc2NyaXB0aW9uOl9wLGFkZEVsZW1lbnQ6aT0+KFVSW2ldPT09dm9pZCAwJiYoVVJbaV09e25hbWU6aSx0eXBlOkY5LnR5cGUsZG9jUmVmOkY5LmRvY1JlZn0sWGUuaW5mbygiQWRkZWQgbmV3IHJlcXVpcmVtZW50OiAiLGkpKSxGOT17fSxVUltpXSksZ2V0RWxlbWVudHM6KCk9PlVSLHNldE5ld0VsZW1lbnRUeXBlOmk9PntGOSE9PXZvaWQgMCYmKEY5LnR5cGU9aSl9LHNldE5ld0VsZW1lbnREb2NSZWY6aT0+e0Y5IT09dm9pZCAwJiYoRjkuZG9jUmVmPWkpfSxhZGRSZWxhdGlvbnNoaXA6KGkscyx1KT0+e3Z2ZS5wdXNoKHt0eXBlOmksc3JjOnMsZHN0OnV9KX0sZ2V0UmVsYXRpb25zaGlwczooKT0+dnZlLGNsZWFyOigpPT57dnZlPVtdLFYyPXt9LFZSPXt9LEY5PXt9LFVSPXt9LFBnKCl9fSxmcm49aT0+YAoKICBtYXJrZXIgewogICAgZmlsbDogJHtpLnJlbGF0aW9uQ29sb3J9OwogICAgc3Ryb2tlOiAke2kucmVsYXRpb25Db2xvcn07CiAgfQoKICBtYXJrZXIuY3Jvc3MgewogICAgc3Ryb2tlOiAke2kubGluZUNvbG9yfTsKICB9CgogIHN2ZyB7CiAgICBmb250LWZhbWlseTogJHtpLmZvbnRGYW1pbHl9OwogICAgZm9udC1zaXplOiAke2kuZm9udFNpemV9OwogIH0KCiAgLnJlcUJveCB7CiAgICBmaWxsOiAke2kucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfTsKICAgIGZpbGwtb3BhY2l0eTogMS4wOwogICAgc3Ryb2tlOiAke2kucmVxdWlyZW1lbnRCb3JkZXJDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6ICR7aS5yZXF1aXJlbWVudEJvcmRlclNpemV9OwogIH0KICAKICAucmVxVGl0bGUsIC5yZXFMYWJlbHsKICAgIGZpbGw6ICAke2kucmVxdWlyZW1lbnRUZXh0Q29sb3J9OwogIH0KICAucmVxTGFiZWxCb3ggewogICAgZmlsbDogJHtpLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfTsKICAgIGZpbGwtb3BhY2l0eTogMS4wOwogIH0KCiAgLnJlcS10aXRsZS1saW5lIHsKICAgIHN0cm9rZTogJHtpLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAke2kucmVxdWlyZW1lbnRCb3JkZXJTaXplfTsKICB9CiAgLnJlbGF0aW9uc2hpcExpbmUgewogICAgc3Ryb2tlOiAke2kucmVsYXRpb25Db2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDE7CiAgfQogIC5yZWxhdGlvbnNoaXBMYWJlbCB7CiAgICBmaWxsOiAke2kucmVsYXRpb25MYWJlbENvbG9yfTsKICB9CgpgLHd2ZT17Q09OVEFJTlM6ImNvbnRhaW5zIixBUlJPVzoiYXJyb3cifSxTR2U9e1JlcU1hcmtlcnM6d3ZlLGluc2VydExpbmVFbmRpbmdzOihpLHMpPT57bGV0IHU9aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix3dmUuQ09OVEFJTlMrIl9saW5lX2VuZGluZyIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLHMubGluZV9oZWlnaHQvMikuYXR0cigibWFya2VyV2lkdGgiLHMubGluZV9oZWlnaHQpLmF0dHIoIm1hcmtlckhlaWdodCIscy5saW5lX2hlaWdodCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiZyIpO3UuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIscy5saW5lX2hlaWdodC8yKS5hdHRyKCJjeSIscy5saW5lX2hlaWdodC8yKS5hdHRyKCJyIixzLmxpbmVfaGVpZ2h0LzIpLmF0dHIoImZpbGwiLCJub25lIiksdS5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLHMubGluZV9oZWlnaHQpLmF0dHIoInkxIixzLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInkyIixzLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInN0cm9rZS13aWR0aCIsMSksdS5hcHBlbmQoImxpbmUiKS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLHMubGluZV9oZWlnaHQpLmF0dHIoIngxIixzLmxpbmVfaGVpZ2h0LzIpLmF0dHIoIngyIixzLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInN0cm9rZS13aWR0aCIsMSksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix3dmUuQVJST1crIl9saW5lX2VuZGluZyIpLmF0dHIoInJlZlgiLHMubGluZV9oZWlnaHQpLmF0dHIoInJlZlkiLC41KnMubGluZV9oZWlnaHQpLmF0dHIoIm1hcmtlcldpZHRoIixzLmxpbmVfaGVpZ2h0KS5hdHRyKCJtYXJrZXJIZWlnaHQiLHMubGluZV9oZWlnaHQpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixgTTAsMAogICAgICBMJHtzLmxpbmVfaGVpZ2h0fSwke3MubGluZV9oZWlnaHQvMn0KICAgICAgTSR7cy5saW5lX2hlaWdodH0sJHtzLmxpbmVfaGVpZ2h0LzJ9CiAgICAgIEwwLCR7cy5saW5lX2hlaWdodH1gKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEpfX07bGV0IFRmPXt9LF9HZT0wO2NvbnN0IEFHZT0oaSxzKT0+aS5pbnNlcnQoInJlY3QiLCIjIitzKS5hdHRyKCJjbGFzcyIsInJlcSByZXFCb3giKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsVGYucmVjdF9taW5fd2lkdGgrInB4IikuYXR0cigiaGVpZ2h0IixUZi5yZWN0X21pbl9oZWlnaHQrInB4IiksTEdlPShpLHMsdSk9PntsZXQgZD1UZi5yZWN0X21pbl93aWR0aC8yLHA9aS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInJlcSByZXFMYWJlbCByZXFUaXRsZSIpLmF0dHIoImlkIixzKS5hdHRyKCJ4IixkKS5hdHRyKCJ5IixUZi5yZWN0X3BhZGRpbmcpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiaGFuZ2luZyIpLHY9MDt1LmZvckVhY2goXz0+e3Y9PTA/cC5hcHBlbmQoInRzcGFuIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ4IixUZi5yZWN0X21pbl93aWR0aC8yKS5hdHRyKCJkeSIsMCkudGV4dChfKTpwLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoIngiLFRmLnJlY3RfbWluX3dpZHRoLzIpLmF0dHIoImR5IixUZi5saW5lX2hlaWdodCouNzUpLnRleHQoXyksdisrfSk7bGV0IGI9MS41KlRmLnJlY3RfcGFkZGluZyx5PXYqVGYubGluZV9oZWlnaHQqLjc1LFQ9Yit5O3JldHVybiBpLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwicmVxLXRpdGxlLWxpbmUiKS5hdHRyKCJ4MSIsIjAiKS5hdHRyKCJ4MiIsVGYucmVjdF9taW5fd2lkdGgpLmF0dHIoInkxIixUKS5hdHRyKCJ5MiIsVCkse3RpdGxlTm9kZTpwLHk6VH19LE1HZT0oaSxzLHUsZCk9PntsZXQgcD1pLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwicmVxIHJlcUxhYmVsIikuYXR0cigiaWQiLHMpLmF0dHIoIngiLFRmLnJlY3RfcGFkZGluZykuYXR0cigieSIsZCkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJoYW5naW5nIiksdj0wO2NvbnN0IGI9MzA7bGV0IHk9W107cmV0dXJuIHUuZm9yRWFjaChUPT57bGV0IF89VC5sZW5ndGg7Zm9yKDtfPmImJnY8Mzspe2xldCBBPVQuc3Vic3RyaW5nKDAsYik7VD1ULnN1YnN0cmluZyhiLFQubGVuZ3RoKSxfPVQubGVuZ3RoLHlbeS5sZW5ndGhdPUEsdisrfWlmKHY9PTMpe2xldCBBPXlbeS5sZW5ndGgtMV07eVt5Lmxlbmd0aC0xXT1BLnN1YnN0cmluZygwLEEubGVuZ3RoLTQpKyIuLi4ifWVsc2UgeVt5Lmxlbmd0aF09VDt2PTB9KSx5LmZvckVhY2goVD0+e3AuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLFRmLnJlY3RfcGFkZGluZykuYXR0cigiZHkiLFRmLmxpbmVfaGVpZ2h0KS50ZXh0KFQpfSkscH0sZHJuPShpLHMsdSxkKT0+e2NvbnN0IHA9cy5ub2RlKCkuZ2V0VG90YWxMZW5ndGgoKSx2PXMubm9kZSgpLmdldFBvaW50QXRMZW5ndGgocCouNSksYj0icmVsIitfR2U7X0dlKys7Y29uc3QgVD1pLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwicmVxIHJlbGF0aW9uc2hpcExhYmVsIikuYXR0cigiaWQiLGIpLmF0dHIoIngiLHYueCkuYXR0cigieSIsdi55KS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikudGV4dChkKS5ub2RlKCkuZ2V0QkJveCgpO2kuaW5zZXJ0KCJyZWN0IiwiIyIrYikuYXR0cigiY2xhc3MiLCJyZXEgcmVxTGFiZWxCb3giKS5hdHRyKCJ4Iix2LngtVC53aWR0aC8yKS5hdHRyKCJ5Iix2LnktVC5oZWlnaHQvMikuYXR0cigid2lkdGgiLFQud2lkdGgpLmF0dHIoImhlaWdodCIsVC5oZWlnaHQpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImZpbGwtb3BhY2l0eSIsIjg1JSIpfSxncm49ZnVuY3Rpb24oaSxzLHUsZCxwKXtjb25zdCB2PXUuZWRnZShXRChzLnNyYyksV0Qocy5kc3QpKSxiPWs3KCkueChmdW5jdGlvbihUKXtyZXR1cm4gVC54fSkueShmdW5jdGlvbihUKXtyZXR1cm4gVC55fSkseT1pLmluc2VydCgicGF0aCIsIiMiK2QpLmF0dHIoImNsYXNzIiwiZXIgcmVsYXRpb25zaGlwTGluZSIpLmF0dHIoImQiLGIodi5wb2ludHMpKS5hdHRyKCJmaWxsIiwibm9uZSIpO3MudHlwZT09cC5kYi5SZWxhdGlvbnNoaXBzLkNPTlRBSU5TP3kuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrY2kuZ2V0VXJsKFRmLmFycm93TWFya2VyQWJzb2x1dGUpKyIjIitzLnR5cGUrIl9saW5lX2VuZGluZykiKTooeS5hdHRyKCJzdHJva2UtZGFzaGFycmF5IiwiMTAsNyIpLHkuYXR0cigibWFya2VyLWVuZCIsInVybCgiK2NpLmdldFVybChUZi5hcnJvd01hcmtlckFic29sdXRlKSsiIyIrU0dlLlJlcU1hcmtlcnMuQVJST1crIl9saW5lX2VuZGluZykiKSksZHJuKGkseSxUZixgPDwke3MudHlwZX0+PmApfSxwcm49KGkscyx1KT0+e09iamVjdC5rZXlzKGkpLmZvckVhY2goZD0+e2xldCBwPWlbZF07ZD1XRChkKSxYZS5pbmZvKCJBZGRlZCBuZXcgcmVxdWlyZW1lbnQ6ICIsZCk7Y29uc3Qgdj11LmFwcGVuZCgiZyIpLmF0dHIoImlkIixkKSxiPSJyZXEtIitkLHk9QUdlKHYsYik7bGV0IFQ9TEdlKHYsZCsiX3RpdGxlIixbYDw8JHtwLnR5cGV9Pj5gLGAke3AubmFtZX1gXSk7TUdlKHYsZCsiX2JvZHkiLFtgSWQ6ICR7cC5pZH1gLGBUZXh0OiAke3AudGV4dH1gLGBSaXNrOiAke3Aucmlza31gLGBWZXJpZmljYXRpb246ICR7cC52ZXJpZnlNZXRob2R9YF0sVC55KTtjb25zdCBfPXkubm9kZSgpLmdldEJCb3goKTtzLnNldE5vZGUoZCx7d2lkdGg6Xy53aWR0aCxoZWlnaHQ6Xy5oZWlnaHQsc2hhcGU6InJlY3QiLGlkOmR9KX0pfSxicm49KGkscyx1KT0+e09iamVjdC5rZXlzKGkpLmZvckVhY2goZD0+e2xldCBwPWlbZF07Y29uc3Qgdj1XRChkKSxiPXUuYXBwZW5kKCJnIikuYXR0cigiaWQiLHYpLHk9ImVsZW1lbnQtIit2LFQ9QUdlKGIseSk7bGV0IF89TEdlKGIseSsiX3RpdGxlIixbIjw8RWxlbWVudD4+IixgJHtkfWBdKTtNR2UoYix5KyJfYm9keSIsW2BUeXBlOiAke3AudHlwZXx8Ik5vdCBTcGVjaWZpZWQifWAsYERvYyBSZWY6ICR7cC5kb2NSZWZ8fCJOb25lIn1gXSxfLnkpO2NvbnN0IEE9VC5ub2RlKCkuZ2V0QkJveCgpO3Muc2V0Tm9kZSh2LHt3aWR0aDpBLndpZHRoLGhlaWdodDpBLmhlaWdodCxzaGFwZToicmVjdCIsaWQ6dn0pfSl9LG1ybj0oaSxzKT0+KGkuZm9yRWFjaChmdW5jdGlvbih1KXtsZXQgZD1XRCh1LnNyYykscD1XRCh1LmRzdCk7cy5zZXRFZGdlKGQscCx7cmVsYXRpb25zaGlwOnV9KX0pLGkpLHZybj1mdW5jdGlvbihpLHMpe3Mubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe3UhPT12b2lkIDAmJnMubm9kZSh1KSE9PXZvaWQgMCYmKGkuc2VsZWN0KCIjIit1KSxpLnNlbGVjdCgiIyIrdSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHMubm9kZSh1KS54LXMubm9kZSh1KS53aWR0aC8yKSsiLCIrKHMubm9kZSh1KS55LXMubm9kZSh1KS5oZWlnaHQvMikrIiApIikpfSl9LFdEPWk9PmkucmVwbGFjZSgvXHMvZywiIikucmVwbGFjZSgvXC4vZywiXyIpLHdybj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOmxybixkYjpocm4scmVuZGVyZXI6e2RyYXc6KGkscyx1LGQpPT57VGY9cXQoKS5yZXF1aXJlbWVudDtjb25zdCBwPVRmLnNlY3VyaXR5TGV2ZWw7bGV0IHY7cD09PSJzYW5kYm94IiYmKHY9SXIoIiNpIitzKSk7Y29uc3QgeT1JcihwPT09InNhbmRib3giP3Yubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLnNlbGVjdChgW2lkPScke3N9J11gKTtTR2UuaW5zZXJ0TGluZUVuZGluZ3MoeSxUZik7Y29uc3QgVD1uZXcgQjAoe211bHRpZ3JhcGg6ITEsY29tcG91bmQ6ITEsZGlyZWN0ZWQ6ITB9KS5zZXRHcmFwaCh7cmFua2RpcjpUZi5sYXlvdXREaXJlY3Rpb24sbWFyZ2lueDoyMCxtYXJnaW55OjIwLG5vZGVzZXA6MTAwLGVkZ2VzZXA6MTAwLHJhbmtzZXA6MTAwfSkuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpe3JldHVybnt9fSk7bGV0IF89ZC5kYi5nZXRSZXF1aXJlbWVudHMoKSxBPWQuZGIuZ2V0RWxlbWVudHMoKSxQPWQuZGIuZ2V0UmVsYXRpb25zaGlwcygpO3BybihfLFQseSksYnJuKEEsVCx5KSxtcm4oUCxUKSxxRChUKSx2cm4oeSxUKSxQLmZvckVhY2goZnVuY3Rpb24oZWUpe2dybih5LGVlLFQscyxkKX0pO2NvbnN0IFI9VGYucmVjdF9wYWRkaW5nLEY9eS5ub2RlKCkuZ2V0QkJveCgpLGo9Ri53aWR0aCtSKjIsSz1GLmhlaWdodCtSKjI7TmcoeSxLLGosVGYudXNlTWF4V2lkdGgpLHkuYXR0cigidmlld0JveCIsYCR7Ri54LVJ9ICR7Ri55LVJ9ICR7an0gJHtLfWApfX0sc3R5bGVzOmZybn19LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSk7dmFyIHl2ZT1mdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKHh0LFB0LFFlLER0KXtmb3IoUWU9UWV8fHt9LER0PXh0Lmxlbmd0aDtEdC0tO1FlW3h0W0R0XV09UHQpO3JldHVybiBRZX0scz1bMSwyXSx1PVsxLDNdLGQ9WzEsNF0scD1bMiw0XSx2PVsxLDldLGI9WzEsMTFdLHk9WzEsMTNdLFQ9WzEsMTRdLF89WzEsMTZdLEE9WzEsMTddLFA9WzEsMThdLFI9WzEsMjRdLEY9WzEsMjVdLGo9WzEsMjZdLEs9WzEsMjddLGVlPVsxLDI4XSxpZT1bMSwyOV0sb2U9WzEsMzBdLHBlPVsxLDMxXSxiZT1bMSwzMl0sYWU9WzEsMzNdLG5lPVsxLDM0XSxzZT1bMSwzNV0sZGU9WzEsMzZdLFg9WzEsMzddLGdlPVsxLDM4XSxXPVsxLDM5XSx4ZT1bMSw0MV0sVT1bMSw0Ml0sRmU9WzEsNDNdLFBlPVsxLDQ0XSxqZT1bMSw0NV0sSWU9WzEsNDZdLFNlPVsxLDQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw0Nyw0OCw0OSw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sQ2U9WzQsNSwxNiw1MCw1Miw1M10sa2U9WzQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sS2U9WzQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw0OSw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sRnQ9WzQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw0OCw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sTmU9WzQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw0Nyw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sZ249WzY4LDY5LDcwXSxfdD1bMSwxMjBdLEV0PXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxTUEFDRTo0LE5FV0xJTkU6NSxTRDo2LGRvY3VtZW50OjcsbGluZTo4LHN0YXRlbWVudDo5LGJveF9zZWN0aW9uOjEwLGJveF9saW5lOjExLHBhcnRpY2lwYW50X3N0YXRlbWVudDoxMixjcmVhdGU6MTMsYm94OjE0LHJlc3RPZkxpbmU6MTUsZW5kOjE2LHNpZ25hbDoxNyxhdXRvbnVtYmVyOjE4LE5VTToxOSxvZmY6MjAsYWN0aXZhdGU6MjEsYWN0b3I6MjIsZGVhY3RpdmF0ZToyMyxub3RlX3N0YXRlbWVudDoyNCxsaW5rc19zdGF0ZW1lbnQ6MjUsbGlua19zdGF0ZW1lbnQ6MjYscHJvcGVydGllc19zdGF0ZW1lbnQ6MjcsZGV0YWlsc19zdGF0ZW1lbnQ6MjgsdGl0bGU6MjksbGVnYWN5X3RpdGxlOjMwLGFjY190aXRsZTozMSxhY2NfdGl0bGVfdmFsdWU6MzIsYWNjX2Rlc2NyOjMzLGFjY19kZXNjcl92YWx1ZTozNCxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjM1LGxvb3A6MzYscmVjdDozNyxvcHQ6MzgsYWx0OjM5LGVsc2Vfc2VjdGlvbnM6NDAscGFyOjQxLHBhcl9zZWN0aW9uczo0MixwYXJfb3Zlcjo0Myxjcml0aWNhbDo0NCxvcHRpb25fc2VjdGlvbnM6NDUsYnJlYWs6NDYsb3B0aW9uOjQ3LGFuZDo0OCxlbHNlOjQ5LHBhcnRpY2lwYW50OjUwLEFTOjUxLHBhcnRpY2lwYW50X2FjdG9yOjUyLGRlc3Ryb3k6NTMsbm90ZTo1NCxwbGFjZW1lbnQ6NTUsdGV4dDI6NTYsb3Zlcjo1NyxhY3Rvcl9wYWlyOjU4LGxpbmtzOjU5LGxpbms6NjAscHJvcGVydGllczo2MSxkZXRhaWxzOjYyLHNwYWNlTGlzdDo2MywiLCI6NjQsbGVmdF9vZjo2NSxyaWdodF9vZjo2NixzaWduYWx0eXBlOjY3LCIrIjo2OCwiLSI6NjksQUNUT1I6NzAsU09MSURfT1BFTl9BUlJPVzo3MSxET1RURURfT1BFTl9BUlJPVzo3MixTT0xJRF9BUlJPVzo3MyxET1RURURfQVJST1c6NzQsU09MSURfQ1JPU1M6NzUsRE9UVEVEX0NST1NTOjc2LFNPTElEX1BPSU5UOjc3LERPVFRFRF9QT0lOVDo3OCxUWFQ6NzksJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IlNQQUNFIiw1OiJORVdMSU5FIiw2OiJTRCIsMTM6ImNyZWF0ZSIsMTQ6ImJveCIsMTU6InJlc3RPZkxpbmUiLDE2OiJlbmQiLDE4OiJhdXRvbnVtYmVyIiwxOToiTlVNIiwyMDoib2ZmIiwyMToiYWN0aXZhdGUiLDIzOiJkZWFjdGl2YXRlIiwyOToidGl0bGUiLDMwOiJsZWdhY3lfdGl0bGUiLDMxOiJhY2NfdGl0bGUiLDMyOiJhY2NfdGl0bGVfdmFsdWUiLDMzOiJhY2NfZGVzY3IiLDM0OiJhY2NfZGVzY3JfdmFsdWUiLDM1OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwzNjoibG9vcCIsMzc6InJlY3QiLDM4OiJvcHQiLDM5OiJhbHQiLDQxOiJwYXIiLDQzOiJwYXJfb3ZlciIsNDQ6ImNyaXRpY2FsIiw0NjoiYnJlYWsiLDQ3OiJvcHRpb24iLDQ4OiJhbmQiLDQ5OiJlbHNlIiw1MDoicGFydGljaXBhbnQiLDUxOiJBUyIsNTI6InBhcnRpY2lwYW50X2FjdG9yIiw1MzoiZGVzdHJveSIsNTQ6Im5vdGUiLDU3OiJvdmVyIiw1OToibGlua3MiLDYwOiJsaW5rIiw2MToicHJvcGVydGllcyIsNjI6ImRldGFpbHMiLDY0OiIsIiw2NToibGVmdF9vZiIsNjY6InJpZ2h0X29mIiw2ODoiKyIsNjk6Ii0iLDcwOiJBQ1RPUiIsNzE6IlNPTElEX09QRU5fQVJST1ciLDcyOiJET1RURURfT1BFTl9BUlJPVyIsNzM6IlNPTElEX0FSUk9XIiw3NDoiRE9UVEVEX0FSUk9XIiw3NToiU09MSURfQ1JPU1MiLDc2OiJET1RURURfQ1JPU1MiLDc3OiJTT0xJRF9QT0lOVCIsNzg6IkRPVFRFRF9QT0lOVCIsNzk6IlRYVCJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywyXSxbMywyXSxbNywwXSxbNywyXSxbOCwyXSxbOCwxXSxbOCwxXSxbMTAsMF0sWzEwLDJdLFsxMSwyXSxbMTEsMV0sWzExLDFdLFs5LDFdLFs5LDJdLFs5LDRdLFs5LDJdLFs5LDRdLFs5LDNdLFs5LDNdLFs5LDJdLFs5LDNdLFs5LDNdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs0NSwxXSxbNDUsNF0sWzQyLDFdLFs0Miw0XSxbNDAsMV0sWzQwLDRdLFsxMiw1XSxbMTIsM10sWzEyLDVdLFsxMiwzXSxbMTIsM10sWzI0LDRdLFsyNCw0XSxbMjUsM10sWzI2LDNdLFsyNywzXSxbMjgsM10sWzYzLDJdLFs2MywxXSxbNTgsM10sWzU4LDFdLFs1NSwxXSxbNTUsMV0sWzE3LDVdLFsxNyw1XSxbMTcsNF0sWzIyLDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzU2LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKFB0LFFlLER0LGt0LE9uLGh0LHpyKXt2YXIgeXQ9aHQubGVuZ3RoLTE7c3dpdGNoKE9uKXtjYXNlIDM6cmV0dXJuIGt0LmFwcGx5KGh0W3l0XSksaHRbeXRdO2Nhc2UgNDpjYXNlIDk6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNTpjYXNlIDEwOmh0W3l0LTFdLnB1c2goaHRbeXRdKSx0aGlzLiQ9aHRbeXQtMV07YnJlYWs7Y2FzZSA2OmNhc2UgNzpjYXNlIDExOmNhc2UgMTI6dGhpcy4kPWh0W3l0XTticmVhaztjYXNlIDg6Y2FzZSAxMzp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxNTpodFt5dF0udHlwZT0iY3JlYXRlUGFydGljaXBhbnQiLHRoaXMuJD1odFt5dF07YnJlYWs7Y2FzZSAxNjpodFt5dC0xXS51bnNoaWZ0KHt0eXBlOiJib3hTdGFydCIsYm94RGF0YTprdC5wYXJzZUJveERhdGEoaHRbeXQtMl0pfSksaHRbeXQtMV0ucHVzaCh7dHlwZToiYm94RW5kIixib3hUZXh0Omh0W3l0LTJdfSksdGhpcy4kPWh0W3l0LTFdO2JyZWFrO2Nhc2UgMTg6dGhpcy4kPXt0eXBlOiJzZXF1ZW5jZUluZGV4IixzZXF1ZW5jZUluZGV4Ok51bWJlcihodFt5dC0yXSksc2VxdWVuY2VJbmRleFN0ZXA6TnVtYmVyKGh0W3l0LTFdKSxzZXF1ZW5jZVZpc2libGU6ITAsc2lnbmFsVHlwZTprdC5MSU5FVFlQRS5BVVRPTlVNQkVSfTticmVhaztjYXNlIDE5OnRoaXMuJD17dHlwZToic2VxdWVuY2VJbmRleCIsc2VxdWVuY2VJbmRleDpOdW1iZXIoaHRbeXQtMV0pLHNlcXVlbmNlSW5kZXhTdGVwOjEsc2VxdWVuY2VWaXNpYmxlOiEwLHNpZ25hbFR5cGU6a3QuTElORVRZUEUuQVVUT05VTUJFUn07YnJlYWs7Y2FzZSAyMDp0aGlzLiQ9e3R5cGU6InNlcXVlbmNlSW5kZXgiLHNlcXVlbmNlVmlzaWJsZTohMSxzaWduYWxUeXBlOmt0LkxJTkVUWVBFLkFVVE9OVU1CRVJ9O2JyZWFrO2Nhc2UgMjE6dGhpcy4kPXt0eXBlOiJzZXF1ZW5jZUluZGV4IixzZXF1ZW5jZVZpc2libGU6ITAsc2lnbmFsVHlwZTprdC5MSU5FVFlQRS5BVVRPTlVNQkVSfTticmVhaztjYXNlIDIyOnRoaXMuJD17dHlwZToiYWN0aXZlU3RhcnQiLHNpZ25hbFR5cGU6a3QuTElORVRZUEUuQUNUSVZFX1NUQVJULGFjdG9yOmh0W3l0LTFdfTticmVhaztjYXNlIDIzOnRoaXMuJD17dHlwZToiYWN0aXZlRW5kIixzaWduYWxUeXBlOmt0LkxJTkVUWVBFLkFDVElWRV9FTkQsYWN0b3I6aHRbeXQtMV19O2JyZWFrO2Nhc2UgMjk6a3Quc2V0RGlhZ3JhbVRpdGxlKGh0W3l0XS5zdWJzdHJpbmcoNikpLHRoaXMuJD1odFt5dF0uc3Vic3RyaW5nKDYpO2JyZWFrO2Nhc2UgMzA6a3Quc2V0RGlhZ3JhbVRpdGxlKGh0W3l0XS5zdWJzdHJpbmcoNykpLHRoaXMuJD1odFt5dF0uc3Vic3RyaW5nKDcpO2JyZWFrO2Nhc2UgMzE6dGhpcy4kPWh0W3l0XS50cmltKCksa3Quc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDMyOmNhc2UgMzM6dGhpcy4kPWh0W3l0XS50cmltKCksa3Quc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDM0Omh0W3l0LTFdLnVuc2hpZnQoe3R5cGU6Imxvb3BTdGFydCIsbG9vcFRleHQ6a3QucGFyc2VNZXNzYWdlKGh0W3l0LTJdKSxzaWduYWxUeXBlOmt0LkxJTkVUWVBFLkxPT1BfU1RBUlR9KSxodFt5dC0xXS5wdXNoKHt0eXBlOiJsb29wRW5kIixsb29wVGV4dDpodFt5dC0yXSxzaWduYWxUeXBlOmt0LkxJTkVUWVBFLkxPT1BfRU5EfSksdGhpcy4kPWh0W3l0LTFdO2JyZWFrO2Nhc2UgMzU6aHRbeXQtMV0udW5zaGlmdCh7dHlwZToicmVjdFN0YXJ0Iixjb2xvcjprdC5wYXJzZU1lc3NhZ2UoaHRbeXQtMl0pLHNpZ25hbFR5cGU6a3QuTElORVRZUEUuUkVDVF9TVEFSVH0pLGh0W3l0LTFdLnB1c2goe3R5cGU6InJlY3RFbmQiLGNvbG9yOmt0LnBhcnNlTWVzc2FnZShodFt5dC0yXSksc2lnbmFsVHlwZTprdC5MSU5FVFlQRS5SRUNUX0VORH0pLHRoaXMuJD1odFt5dC0xXTticmVhaztjYXNlIDM2Omh0W3l0LTFdLnVuc2hpZnQoe3R5cGU6Im9wdFN0YXJ0IixvcHRUZXh0Omt0LnBhcnNlTWVzc2FnZShodFt5dC0yXSksc2lnbmFsVHlwZTprdC5MSU5FVFlQRS5PUFRfU1RBUlR9KSxodFt5dC0xXS5wdXNoKHt0eXBlOiJvcHRFbmQiLG9wdFRleHQ6a3QucGFyc2VNZXNzYWdlKGh0W3l0LTJdKSxzaWduYWxUeXBlOmt0LkxJTkVUWVBFLk9QVF9FTkR9KSx0aGlzLiQ9aHRbeXQtMV07YnJlYWs7Y2FzZSAzNzpodFt5dC0xXS51bnNoaWZ0KHt0eXBlOiJhbHRTdGFydCIsYWx0VGV4dDprdC5wYXJzZU1lc3NhZ2UoaHRbeXQtMl0pLHNpZ25hbFR5cGU6a3QuTElORVRZUEUuQUxUX1NUQVJUfSksaHRbeXQtMV0ucHVzaCh7dHlwZToiYWx0RW5kIixzaWduYWxUeXBlOmt0LkxJTkVUWVBFLkFMVF9FTkR9KSx0aGlzLiQ9aHRbeXQtMV07YnJlYWs7Y2FzZSAzODpodFt5dC0xXS51bnNoaWZ0KHt0eXBlOiJwYXJTdGFydCIscGFyVGV4dDprdC5wYXJzZU1lc3NhZ2UoaHRbeXQtMl0pLHNpZ25hbFR5cGU6a3QuTElORVRZUEUuUEFSX1NUQVJUfSksaHRbeXQtMV0ucHVzaCh7dHlwZToicGFyRW5kIixzaWduYWxUeXBlOmt0LkxJTkVUWVBFLlBBUl9FTkR9KSx0aGlzLiQ9aHRbeXQtMV07YnJlYWs7Y2FzZSAzOTpodFt5dC0xXS51bnNoaWZ0KHt0eXBlOiJwYXJTdGFydCIscGFyVGV4dDprdC5wYXJzZU1lc3NhZ2UoaHRbeXQtMl0pLHNpZ25hbFR5cGU6a3QuTElORVRZUEUuUEFSX09WRVJfU1RBUlR9KSxodFt5dC0xXS5wdXNoKHt0eXBlOiJwYXJFbmQiLHNpZ25hbFR5cGU6a3QuTElORVRZUEUuUEFSX0VORH0pLHRoaXMuJD1odFt5dC0xXTticmVhaztjYXNlIDQwOmh0W3l0LTFdLnVuc2hpZnQoe3R5cGU6ImNyaXRpY2FsU3RhcnQiLGNyaXRpY2FsVGV4dDprdC5wYXJzZU1lc3NhZ2UoaHRbeXQtMl0pLHNpZ25hbFR5cGU6a3QuTElORVRZUEUuQ1JJVElDQUxfU1RBUlR9KSxodFt5dC0xXS5wdXNoKHt0eXBlOiJjcml0aWNhbEVuZCIsc2lnbmFsVHlwZTprdC5MSU5FVFlQRS5DUklUSUNBTF9FTkR9KSx0aGlzLiQ9aHRbeXQtMV07YnJlYWs7Y2FzZSA0MTpodFt5dC0xXS51bnNoaWZ0KHt0eXBlOiJicmVha1N0YXJ0IixicmVha1RleHQ6a3QucGFyc2VNZXNzYWdlKGh0W3l0LTJdKSxzaWduYWxUeXBlOmt0LkxJTkVUWVBFLkJSRUFLX1NUQVJUfSksaHRbeXQtMV0ucHVzaCh7dHlwZToiYnJlYWtFbmQiLG9wdFRleHQ6a3QucGFyc2VNZXNzYWdlKGh0W3l0LTJdKSxzaWduYWxUeXBlOmt0LkxJTkVUWVBFLkJSRUFLX0VORH0pLHRoaXMuJD1odFt5dC0xXTticmVhaztjYXNlIDQzOnRoaXMuJD1odFt5dC0zXS5jb25jYXQoW3t0eXBlOiJvcHRpb24iLG9wdGlvblRleHQ6a3QucGFyc2VNZXNzYWdlKGh0W3l0LTFdKSxzaWduYWxUeXBlOmt0LkxJTkVUWVBFLkNSSVRJQ0FMX09QVElPTn0saHRbeXRdXSk7YnJlYWs7Y2FzZSA0NTp0aGlzLiQ9aHRbeXQtM10uY29uY2F0KFt7dHlwZToiYW5kIixwYXJUZXh0Omt0LnBhcnNlTWVzc2FnZShodFt5dC0xXSksc2lnbmFsVHlwZTprdC5MSU5FVFlQRS5QQVJfQU5EfSxodFt5dF1dKTticmVhaztjYXNlIDQ3OnRoaXMuJD1odFt5dC0zXS5jb25jYXQoW3t0eXBlOiJlbHNlIixhbHRUZXh0Omt0LnBhcnNlTWVzc2FnZShodFt5dC0xXSksc2lnbmFsVHlwZTprdC5MSU5FVFlQRS5BTFRfRUxTRX0saHRbeXRdXSk7YnJlYWs7Y2FzZSA0ODpodFt5dC0zXS5kcmF3PSJwYXJ0aWNpcGFudCIsaHRbeXQtM10udHlwZT0iYWRkUGFydGljaXBhbnQiLGh0W3l0LTNdLmRlc2NyaXB0aW9uPWt0LnBhcnNlTWVzc2FnZShodFt5dC0xXSksdGhpcy4kPWh0W3l0LTNdO2JyZWFrO2Nhc2UgNDk6aHRbeXQtMV0uZHJhdz0icGFydGljaXBhbnQiLGh0W3l0LTFdLnR5cGU9ImFkZFBhcnRpY2lwYW50Iix0aGlzLiQ9aHRbeXQtMV07YnJlYWs7Y2FzZSA1MDpodFt5dC0zXS5kcmF3PSJhY3RvciIsaHRbeXQtM10udHlwZT0iYWRkUGFydGljaXBhbnQiLGh0W3l0LTNdLmRlc2NyaXB0aW9uPWt0LnBhcnNlTWVzc2FnZShodFt5dC0xXSksdGhpcy4kPWh0W3l0LTNdO2JyZWFrO2Nhc2UgNTE6aHRbeXQtMV0uZHJhdz0iYWN0b3IiLGh0W3l0LTFdLnR5cGU9ImFkZFBhcnRpY2lwYW50Iix0aGlzLiQ9aHRbeXQtMV07YnJlYWs7Y2FzZSA1MjpodFt5dC0xXS50eXBlPSJkZXN0cm95UGFydGljaXBhbnQiLHRoaXMuJD1odFt5dC0xXTticmVhaztjYXNlIDUzOnRoaXMuJD1baHRbeXQtMV0se3R5cGU6ImFkZE5vdGUiLHBsYWNlbWVudDpodFt5dC0yXSxhY3RvcjpodFt5dC0xXS5hY3Rvcix0ZXh0Omh0W3l0XX1dO2JyZWFrO2Nhc2UgNTQ6aHRbeXQtMl09W10uY29uY2F0KGh0W3l0LTFdLGh0W3l0LTFdKS5zbGljZSgwLDIpLGh0W3l0LTJdWzBdPWh0W3l0LTJdWzBdLmFjdG9yLGh0W3l0LTJdWzFdPWh0W3l0LTJdWzFdLmFjdG9yLHRoaXMuJD1baHRbeXQtMV0se3R5cGU6ImFkZE5vdGUiLHBsYWNlbWVudDprdC5QTEFDRU1FTlQuT1ZFUixhY3RvcjpodFt5dC0yXS5zbGljZSgwLDIpLHRleHQ6aHRbeXRdfV07YnJlYWs7Y2FzZSA1NTp0aGlzLiQ9W2h0W3l0LTFdLHt0eXBlOiJhZGRMaW5rcyIsYWN0b3I6aHRbeXQtMV0uYWN0b3IsdGV4dDpodFt5dF19XTticmVhaztjYXNlIDU2OnRoaXMuJD1baHRbeXQtMV0se3R5cGU6ImFkZEFMaW5rIixhY3RvcjpodFt5dC0xXS5hY3Rvcix0ZXh0Omh0W3l0XX1dO2JyZWFrO2Nhc2UgNTc6dGhpcy4kPVtodFt5dC0xXSx7dHlwZToiYWRkUHJvcGVydGllcyIsYWN0b3I6aHRbeXQtMV0uYWN0b3IsdGV4dDpodFt5dF19XTticmVhaztjYXNlIDU4OnRoaXMuJD1baHRbeXQtMV0se3R5cGU6ImFkZERldGFpbHMiLGFjdG9yOmh0W3l0LTFdLmFjdG9yLHRleHQ6aHRbeXRdfV07YnJlYWs7Y2FzZSA2MTp0aGlzLiQ9W2h0W3l0LTJdLGh0W3l0XV07YnJlYWs7Y2FzZSA2Mjp0aGlzLiQ9aHRbeXRdO2JyZWFrO2Nhc2UgNjM6dGhpcy4kPWt0LlBMQUNFTUVOVC5MRUZUT0Y7YnJlYWs7Y2FzZSA2NDp0aGlzLiQ9a3QuUExBQ0VNRU5ULlJJR0hUT0Y7YnJlYWs7Y2FzZSA2NTp0aGlzLiQ9W2h0W3l0LTRdLGh0W3l0LTFdLHt0eXBlOiJhZGRNZXNzYWdlIixmcm9tOmh0W3l0LTRdLmFjdG9yLHRvOmh0W3l0LTFdLmFjdG9yLHNpZ25hbFR5cGU6aHRbeXQtM10sbXNnOmh0W3l0XSxhY3RpdmF0ZTohMH0se3R5cGU6ImFjdGl2ZVN0YXJ0IixzaWduYWxUeXBlOmt0LkxJTkVUWVBFLkFDVElWRV9TVEFSVCxhY3RvcjpodFt5dC0xXX1dO2JyZWFrO2Nhc2UgNjY6dGhpcy4kPVtodFt5dC00XSxodFt5dC0xXSx7dHlwZToiYWRkTWVzc2FnZSIsZnJvbTpodFt5dC00XS5hY3Rvcix0bzpodFt5dC0xXS5hY3RvcixzaWduYWxUeXBlOmh0W3l0LTNdLG1zZzpodFt5dF19LHt0eXBlOiJhY3RpdmVFbmQiLHNpZ25hbFR5cGU6a3QuTElORVRZUEUuQUNUSVZFX0VORCxhY3RvcjpodFt5dC00XX1dO2JyZWFrO2Nhc2UgNjc6dGhpcy4kPVtodFt5dC0zXSxodFt5dC0xXSx7dHlwZToiYWRkTWVzc2FnZSIsZnJvbTpodFt5dC0zXS5hY3Rvcix0bzpodFt5dC0xXS5hY3RvcixzaWduYWxUeXBlOmh0W3l0LTJdLG1zZzpodFt5dF19XTticmVhaztjYXNlIDY4OnRoaXMuJD17dHlwZToiYWRkUGFydGljaXBhbnQiLGFjdG9yOmh0W3l0XX07YnJlYWs7Y2FzZSA2OTp0aGlzLiQ9a3QuTElORVRZUEUuU09MSURfT1BFTjticmVhaztjYXNlIDcwOnRoaXMuJD1rdC5MSU5FVFlQRS5ET1RURURfT1BFTjticmVhaztjYXNlIDcxOnRoaXMuJD1rdC5MSU5FVFlQRS5TT0xJRDticmVhaztjYXNlIDcyOnRoaXMuJD1rdC5MSU5FVFlQRS5ET1RURUQ7YnJlYWs7Y2FzZSA3Mzp0aGlzLiQ9a3QuTElORVRZUEUuU09MSURfQ1JPU1M7YnJlYWs7Y2FzZSA3NDp0aGlzLiQ9a3QuTElORVRZUEUuRE9UVEVEX0NST1NTO2JyZWFrO2Nhc2UgNzU6dGhpcy4kPWt0LkxJTkVUWVBFLlNPTElEX1BPSU5UO2JyZWFrO2Nhc2UgNzY6dGhpcy4kPWt0LkxJTkVUWVBFLkRPVFRFRF9QT0lOVDticmVhaztjYXNlIDc3OnRoaXMuJD1rdC5wYXJzZU1lc3NhZ2UoaHRbeXRdLnRyaW0oKS5zdWJzdHJpbmcoMSkpO2JyZWFrfX0sdGFibGU6W3szOjEsNDpzLDU6dSw2OmR9LHsxOlszXX0sezM6NSw0OnMsNTp1LDY6ZH0sezM6Niw0OnMsNTp1LDY6ZH0saShbMSw0LDUsMTMsMTQsMTgsMjEsMjMsMjksMzAsMzEsMzMsMzUsMzYsMzcsMzgsMzksNDEsNDMsNDQsNDYsNTAsNTIsNTMsNTQsNTksNjAsNjEsNjIsNzBdLHAsezc6N30pLHsxOlsyLDFdfSx7MTpbMiwyXX0sezE6WzIsM10sNDp2LDU6Yiw4OjgsOToxMCwxMjoxMiwxMzp5LDE0OlQsMTc6MTUsMTg6XywyMTpBLDIyOjQwLDIzOlAsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6UiwzMDpGLDMxOmosMzM6SywzNTplZSwzNjppZSwzNzpvZSwzODpwZSwzOTpiZSw0MTphZSw0MzpuZSw0NDpzZSw0NjpkZSw1MDpYLDUyOmdlLDUzOlcsNTQ6eGUsNTk6VSw2MDpGZSw2MTpQZSw2MjpqZSw3MDpJZX0saShTZSxbMiw1XSksezk6NDcsMTI6MTIsMTM6eSwxNDpULDE3OjE1LDE4Ol8sMjE6QSwyMjo0MCwyMzpQLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OlIsMzA6RiwzMTpqLDMzOkssMzU6ZWUsMzY6aWUsMzc6b2UsMzg6cGUsMzk6YmUsNDE6YWUsNDM6bmUsNDQ6c2UsNDY6ZGUsNTA6WCw1MjpnZSw1MzpXLDU0OnhlLDU5OlUsNjA6RmUsNjE6UGUsNjI6amUsNzA6SWV9LGkoU2UsWzIsN10pLGkoU2UsWzIsOF0pLGkoU2UsWzIsMTRdKSx7MTI6NDgsNTA6WCw1MjpnZSw1MzpXfSx7MTU6WzEsNDldfSx7NTpbMSw1MF19LHs1OlsxLDUzXSwxOTpbMSw1MV0sMjA6WzEsNTJdfSx7MjI6NTQsNzA6SWV9LHsyMjo1NSw3MDpJZX0sezU6WzEsNTZdfSx7NTpbMSw1N119LHs1OlsxLDU4XX0sezU6WzEsNTldfSx7NTpbMSw2MF19LGkoU2UsWzIsMjldKSxpKFNlLFsyLDMwXSksezMyOlsxLDYxXX0sezM0OlsxLDYyXX0saShTZSxbMiwzM10pLHsxNTpbMSw2M119LHsxNTpbMSw2NF19LHsxNTpbMSw2NV19LHsxNTpbMSw2Nl19LHsxNTpbMSw2N119LHsxNTpbMSw2OF19LHsxNTpbMSw2OV19LHsxNTpbMSw3MF19LHsyMjo3MSw3MDpJZX0sezIyOjcyLDcwOkllfSx7MjI6NzMsNzA6SWV9LHs2Nzo3NCw3MTpbMSw3NV0sNzI6WzEsNzZdLDczOlsxLDc3XSw3NDpbMSw3OF0sNzU6WzEsNzldLDc2OlsxLDgwXSw3NzpbMSw4MV0sNzg6WzEsODJdfSx7NTU6ODMsNTc6WzEsODRdLDY1OlsxLDg1XSw2NjpbMSw4Nl19LHsyMjo4Nyw3MDpJZX0sezIyOjg4LDcwOkllfSx7MjI6ODksNzA6SWV9LHsyMjo5MCw3MDpJZX0saShbNSw1MSw2NCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OV0sWzIsNjhdKSxpKFNlLFsyLDZdKSxpKFNlLFsyLDE1XSksaShDZSxbMiw5XSx7MTA6OTF9KSxpKFNlLFsyLDE3XSksezU6WzEsOTNdLDE5OlsxLDkyXX0sezU6WzEsOTRdfSxpKFNlLFsyLDIxXSksezU6WzEsOTVdfSx7NTpbMSw5Nl19LGkoU2UsWzIsMjRdKSxpKFNlLFsyLDI1XSksaShTZSxbMiwyNl0pLGkoU2UsWzIsMjddKSxpKFNlLFsyLDI4XSksaShTZSxbMiwzMV0pLGkoU2UsWzIsMzJdKSxpKGtlLHAsezc6OTd9KSxpKGtlLHAsezc6OTh9KSxpKGtlLHAsezc6OTl9KSxpKEtlLHAsezQwOjEwMCw3OjEwMX0pLGkoRnQscCx7NDI6MTAyLDc6MTAzfSksaShGdCxwLHs3OjEwMyw0MjoxMDR9KSxpKE5lLHAsezQ1OjEwNSw3OjEwNn0pLGkoa2UscCx7NzoxMDd9KSx7NTpbMSwxMDldLDUxOlsxLDEwOF19LHs1OlsxLDExMV0sNTE6WzEsMTEwXX0sezU6WzEsMTEyXX0sezIyOjExNSw2ODpbMSwxMTNdLDY5OlsxLDExNF0sNzA6SWV9LGkoZ24sWzIsNjldKSxpKGduLFsyLDcwXSksaShnbixbMiw3MV0pLGkoZ24sWzIsNzJdKSxpKGduLFsyLDczXSksaShnbixbMiw3NF0pLGkoZ24sWzIsNzVdKSxpKGduLFsyLDc2XSksezIyOjExNiw3MDpJZX0sezIyOjExOCw1ODoxMTcsNzA6SWV9LHs3MDpbMiw2M119LHs3MDpbMiw2NF19LHs1NjoxMTksNzk6X3R9LHs1NjoxMjEsNzk6X3R9LHs1NjoxMjIsNzk6X3R9LHs1NjoxMjMsNzk6X3R9LHs0OlsxLDEyNl0sNTpbMSwxMjhdLDExOjEyNSwxMjoxMjcsMTY6WzEsMTI0XSw1MDpYLDUyOmdlLDUzOld9LHs1OlsxLDEyOV19LGkoU2UsWzIsMTldKSxpKFNlLFsyLDIwXSksaShTZSxbMiwyMl0pLGkoU2UsWzIsMjNdKSx7NDp2LDU6Yiw4OjgsOToxMCwxMjoxMiwxMzp5LDE0OlQsMTY6WzEsMTMwXSwxNzoxNSwxODpfLDIxOkEsMjI6NDAsMjM6UCwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpSLDMwOkYsMzE6aiwzMzpLLDM1OmVlLDM2OmllLDM3Om9lLDM4OnBlLDM5OmJlLDQxOmFlLDQzOm5lLDQ0OnNlLDQ2OmRlLDUwOlgsNTI6Z2UsNTM6Vyw1NDp4ZSw1OTpVLDYwOkZlLDYxOlBlLDYyOmplLDcwOkllfSx7NDp2LDU6Yiw4OjgsOToxMCwxMjoxMiwxMzp5LDE0OlQsMTY6WzEsMTMxXSwxNzoxNSwxODpfLDIxOkEsMjI6NDAsMjM6UCwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpSLDMwOkYsMzE6aiwzMzpLLDM1OmVlLDM2OmllLDM3Om9lLDM4OnBlLDM5OmJlLDQxOmFlLDQzOm5lLDQ0OnNlLDQ2OmRlLDUwOlgsNTI6Z2UsNTM6Vyw1NDp4ZSw1OTpVLDYwOkZlLDYxOlBlLDYyOmplLDcwOkllfSx7NDp2LDU6Yiw4OjgsOToxMCwxMjoxMiwxMzp5LDE0OlQsMTY6WzEsMTMyXSwxNzoxNSwxODpfLDIxOkEsMjI6NDAsMjM6UCwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpSLDMwOkYsMzE6aiwzMzpLLDM1OmVlLDM2OmllLDM3Om9lLDM4OnBlLDM5OmJlLDQxOmFlLDQzOm5lLDQ0OnNlLDQ2OmRlLDUwOlgsNTI6Z2UsNTM6Vyw1NDp4ZSw1OTpVLDYwOkZlLDYxOlBlLDYyOmplLDcwOkllfSx7MTY6WzEsMTMzXX0sezQ6diw1OmIsODo4LDk6MTAsMTI6MTIsMTM6eSwxNDpULDE2OlsyLDQ2XSwxNzoxNSwxODpfLDIxOkEsMjI6NDAsMjM6UCwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpSLDMwOkYsMzE6aiwzMzpLLDM1OmVlLDM2OmllLDM3Om9lLDM4OnBlLDM5OmJlLDQxOmFlLDQzOm5lLDQ0OnNlLDQ2OmRlLDQ5OlsxLDEzNF0sNTA6WCw1MjpnZSw1MzpXLDU0OnhlLDU5OlUsNjA6RmUsNjE6UGUsNjI6amUsNzA6SWV9LHsxNjpbMSwxMzVdfSx7NDp2LDU6Yiw4OjgsOToxMCwxMjoxMiwxMzp5LDE0OlQsMTY6WzIsNDRdLDE3OjE1LDE4Ol8sMjE6QSwyMjo0MCwyMzpQLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OlIsMzA6RiwzMTpqLDMzOkssMzU6ZWUsMzY6aWUsMzc6b2UsMzg6cGUsMzk6YmUsNDE6YWUsNDM6bmUsNDQ6c2UsNDY6ZGUsNDg6WzEsMTM2XSw1MDpYLDUyOmdlLDUzOlcsNTQ6eGUsNTk6VSw2MDpGZSw2MTpQZSw2MjpqZSw3MDpJZX0sezE2OlsxLDEzN119LHsxNjpbMSwxMzhdfSx7NDp2LDU6Yiw4OjgsOToxMCwxMjoxMiwxMzp5LDE0OlQsMTY6WzIsNDJdLDE3OjE1LDE4Ol8sMjE6QSwyMjo0MCwyMzpQLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OlIsMzA6RiwzMTpqLDMzOkssMzU6ZWUsMzY6aWUsMzc6b2UsMzg6cGUsMzk6YmUsNDE6YWUsNDM6bmUsNDQ6c2UsNDY6ZGUsNDc6WzEsMTM5XSw1MDpYLDUyOmdlLDUzOlcsNTQ6eGUsNTk6VSw2MDpGZSw2MTpQZSw2MjpqZSw3MDpJZX0sezQ6diw1OmIsODo4LDk6MTAsMTI6MTIsMTM6eSwxNDpULDE2OlsxLDE0MF0sMTc6MTUsMTg6XywyMTpBLDIyOjQwLDIzOlAsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6UiwzMDpGLDMxOmosMzM6SywzNTplZSwzNjppZSwzNzpvZSwzODpwZSwzOTpiZSw0MTphZSw0MzpuZSw0NDpzZSw0NjpkZSw1MDpYLDUyOmdlLDUzOlcsNTQ6eGUsNTk6VSw2MDpGZSw2MTpQZSw2MjpqZSw3MDpJZX0sezE1OlsxLDE0MV19LGkoU2UsWzIsNDldKSx7MTU6WzEsMTQyXX0saShTZSxbMiw1MV0pLGkoU2UsWzIsNTJdKSx7MjI6MTQzLDcwOkllfSx7MjI6MTQ0LDcwOkllfSx7NTY6MTQ1LDc5Ol90fSx7NTY6MTQ2LDc5Ol90fSx7NTY6MTQ3LDc5Ol90fSx7NjQ6WzEsMTQ4XSw3OTpbMiw2Ml19LHs1OlsyLDU1XX0sezU6WzIsNzddfSx7NTpbMiw1Nl19LHs1OlsyLDU3XX0sezU6WzIsNThdfSxpKFNlLFsyLDE2XSksaShDZSxbMiwxMF0pLHsxMjoxNDksNTA6WCw1MjpnZSw1MzpXfSxpKENlLFsyLDEyXSksaShDZSxbMiwxM10pLGkoU2UsWzIsMThdKSxpKFNlLFsyLDM0XSksaShTZSxbMiwzNV0pLGkoU2UsWzIsMzZdKSxpKFNlLFsyLDM3XSksezE1OlsxLDE1MF19LGkoU2UsWzIsMzhdKSx7MTU6WzEsMTUxXX0saShTZSxbMiwzOV0pLGkoU2UsWzIsNDBdKSx7MTU6WzEsMTUyXX0saShTZSxbMiw0MV0pLHs1OlsxLDE1M119LHs1OlsxLDE1NF19LHs1NjoxNTUsNzk6X3R9LHs1NjoxNTYsNzk6X3R9LHs1OlsyLDY3XX0sezU6WzIsNTNdfSx7NTpbMiw1NF19LHsyMjoxNTcsNzA6SWV9LGkoQ2UsWzIsMTFdKSxpKEtlLHAsezc6MTAxLDQwOjE1OH0pLGkoRnQscCx7NzoxMDMsNDI6MTU5fSksaShOZSxwLHs3OjEwNiw0NToxNjB9KSxpKFNlLFsyLDQ4XSksaShTZSxbMiw1MF0pLHs1OlsyLDY1XX0sezU6WzIsNjZdfSx7Nzk6WzIsNjFdfSx7MTY6WzIsNDddfSx7MTY6WzIsNDVdfSx7MTY6WzIsNDNdfV0sZGVmYXVsdEFjdGlvbnM6ezU6WzIsMV0sNjpbMiwyXSw4NTpbMiw2M10sODY6WzIsNjRdLDExOTpbMiw1NV0sMTIwOlsyLDc3XSwxMjE6WzIsNTZdLDEyMjpbMiw1N10sMTIzOlsyLDU4XSwxNDU6WzIsNjddLDE0NjpbMiw1M10sMTQ3OlsyLDU0XSwxNTU6WzIsNjVdLDE1NjpbMiw2Nl0sMTU3OlsyLDYxXSwxNTg6WzIsNDddLDE1OTpbMiw0NV0sMTYwOlsyLDQzXX0scGFyc2VFcnJvcjpmdW5jdGlvbihQdCxRZSl7aWYoUWUucmVjb3ZlcmFibGUpdGhpcy50cmFjZShQdCk7ZWxzZXt2YXIgRHQ9bmV3IEVycm9yKFB0KTt0aHJvdyBEdC5oYXNoPVFlLER0fX0scGFyc2U6ZnVuY3Rpb24oUHQpe3ZhciBRZT10aGlzLER0PVswXSxrdD1bXSxPbj1bbnVsbF0saHQ9W10senI9dGhpcy50YWJsZSx5dD0iIixqaT0wLHhpPTAsTWE9Mix6cz0xLGFvPWh0LnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLFRyPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksRm49e3l5Ont9fTtmb3IodmFyIHFuIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXkscW4pJiYoRm4ueXlbcW5dPXRoaXMueXlbcW5dKTtUci5zZXRJbnB1dChQdCxGbi55eSksRm4ueXkubGV4ZXI9VHIsRm4ueXkucGFyc2VyPXRoaXMsdHlwZW9mIFRyLnl5bGxvYz4idSImJihUci55eWxsb2M9e30pO3ZhciBVbj1Uci55eWxsb2M7aHQucHVzaChVbik7dmFyIEF0PVRyLm9wdGlvbnMmJlRyLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBGbi55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1Gbi55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiB3dCgpe3ZhciBkYTtyZXR1cm4gZGE9a3QucG9wKCl8fFRyLmxleCgpfHx6cyx0eXBlb2YgZGEhPSJudW1iZXIiJiYoZGEgaW5zdGFuY2VvZiBBcnJheSYmKGt0PWRhLGRhPWt0LnBvcCgpKSxkYT1RZS5zeW1ib2xzX1tkYV18fGRhKSxkYX1mb3IodmFyIG9uLGZuLEFuLG9vLGpvPXt9LCRvLFBhLHdvLF9zOzspe2lmKGZuPUR0W0R0Lmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2ZuXT9Bbj10aGlzLmRlZmF1bHRBY3Rpb25zW2ZuXTooKG9uPT09bnVsbHx8dHlwZW9mIG9uPiJ1IikmJihvbj13dCgpKSxBbj16cltmbl0mJnpyW2ZuXVtvbl0pLHR5cGVvZiBBbj4idSJ8fCFBbi5sZW5ndGh8fCFBblswXSl7dmFyIHRsPSIiO19zPVtdO2ZvcigkbyBpbiB6cltmbl0pdGhpcy50ZXJtaW5hbHNfWyRvXSYmJG8+TWEmJl9zLnB1c2goIiciK3RoaXMudGVybWluYWxzX1skb10rIiciKTtUci5zaG93UG9zaXRpb24/dGw9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoamkrMSkrYDoKYCtUci5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK19zLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bb25dfHxvbikrIiciOnRsPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGppKzEpKyI6IFVuZXhwZWN0ZWQgIisob249PXpzPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW29uXXx8b24pKyInIiksdGhpcy5wYXJzZUVycm9yKHRsLHt0ZXh0OlRyLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tvbl18fG9uLGxpbmU6VHIueXlsaW5lbm8sbG9jOlVuLGV4cGVjdGVkOl9zfSl9aWYoQW5bMF1pbnN0YW5jZW9mIEFycmF5JiZBbi5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2ZuKyIsIHRva2VuOiAiK29uKTtzd2l0Y2goQW5bMF0pe2Nhc2UgMTpEdC5wdXNoKG9uKSxPbi5wdXNoKFRyLnl5dGV4dCksaHQucHVzaChUci55eWxsb2MpLER0LnB1c2goQW5bMV0pLG9uPW51bGwseGk9VHIueXlsZW5nLHl0PVRyLnl5dGV4dCxqaT1Uci55eWxpbmVubyxVbj1Uci55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKFBhPXRoaXMucHJvZHVjdGlvbnNfW0FuWzFdXVsxXSxqby4kPU9uW09uLmxlbmd0aC1QYV0sam8uXyQ9e2ZpcnN0X2xpbmU6aHRbaHQubGVuZ3RoLShQYXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmh0W2h0Lmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmh0W2h0Lmxlbmd0aC0oUGF8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46aHRbaHQubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxBdCYmKGpvLl8kLnJhbmdlPVtodFtodC5sZW5ndGgtKFBhfHwxKV0ucmFuZ2VbMF0saHRbaHQubGVuZ3RoLTFdLnJhbmdlWzFdXSksb289dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KGpvLFt5dCx4aSxqaSxGbi55eSxBblsxXSxPbixodF0uY29uY2F0KGFvKSksdHlwZW9mIG9vPCJ1IilyZXR1cm4gb287UGEmJihEdD1EdC5zbGljZSgwLC0xKlBhKjIpLE9uPU9uLnNsaWNlKDAsLTEqUGEpLGh0PWh0LnNsaWNlKDAsLTEqUGEpKSxEdC5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW0FuWzFdXVswXSksT24ucHVzaChqby4kKSxodC5wdXNoKGpvLl8kKSx3bz16cltEdFtEdC5sZW5ndGgtMl1dW0R0W0R0Lmxlbmd0aC0xXV0sRHQucHVzaCh3byk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LEd0PWZ1bmN0aW9uKCl7dmFyIHh0PXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKFFlLER0KXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKFFlLER0KTtlbHNlIHRocm93IG5ldyBFcnJvcihRZSl9LHNldElucHV0OmZ1bmN0aW9uKFB0LFFlKXtyZXR1cm4gdGhpcy55eT1RZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9UHQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIFB0PXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1QdCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9UHQsdGhpcy5tYXRjaGVkKz1QdDt2YXIgUWU9UHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBRZT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksUHR9LHVucHV0OmZ1bmN0aW9uKFB0KXt2YXIgUWU9UHQubGVuZ3RoLER0PVB0LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9UHQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLVFlKSx0aGlzLm9mZnNldC09UWU7dmFyIGt0PXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLER0Lmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09RHQubGVuZ3RoLTEpO3ZhciBPbj10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46RHQ/KER0Lmxlbmd0aD09PWt0Lmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkra3Rba3QubGVuZ3RoLUR0Lmxlbmd0aF0ubGVuZ3RoLUR0WzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tUWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bT25bMF0sT25bMF0rdGhpcy55eWxlbmctUWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihQdCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKFB0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBQdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKFB0Lmxlbmd0aD4yMD8iLi4uIjoiIikrUHQuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgUHQ9dGhpcy5tYXRjaDtyZXR1cm4gUHQubGVuZ3RoPDIwJiYoUHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLVB0Lmxlbmd0aCkpLChQdC5zdWJzdHIoMCwyMCkrKFB0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgUHQ9dGhpcy5wYXN0SW5wdXQoKSxRZT1uZXcgQXJyYXkoUHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gUHQrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK1FlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihQdCxRZSl7dmFyIER0LGt0LE9uO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihPbj17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihPbi55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxrdD1QdFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksa3QmJih0aGlzLnl5bGluZW5vKz1rdC5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjprdD9rdFtrdC5sZW5ndGgtMV0ubGVuZ3RoLWt0W2t0Lmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK1B0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPVB0WzBdLHRoaXMubWF0Y2grPVB0WzBdLHRoaXMubWF0Y2hlcz1QdCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShQdFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9UHRbMF0sRHQ9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsUWUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksRHQpcmV0dXJuIER0O2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBodCBpbiBPbil0aGlzW2h0XT1PbltodF07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgUHQsUWUsRHQsa3Q7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgT249dGhpcy5fY3VycmVudFJ1bGVzKCksaHQ9MDtodDxPbi5sZW5ndGg7aHQrKylpZihEdD10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW09uW2h0XV0pLER0JiYoIVFlfHxEdFswXS5sZW5ndGg+UWVbMF0ubGVuZ3RoKSl7aWYoUWU9RHQsa3Q9aHQsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoUHQ9dGhpcy50ZXN0X21hdGNoKER0LE9uW2h0XSksUHQhPT0hMSlyZXR1cm4gUHQ7aWYodGhpcy5fYmFja3RyYWNrKXtRZT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBRZT8oUHQ9dGhpcy50ZXN0X21hdGNoKFFlLE9uW2t0XSksUHQhPT0hMT9QdDohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIFFlPXRoaXMubmV4dCgpO3JldHVybiBRZXx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24oUWUpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChRZSl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIFFlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIFFlPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oUWUpe3JldHVybiBRZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKFFlfHwwKSxRZT49MD90aGlzLmNvbmRpdGlvblN0YWNrW1FlXToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihRZSl7dGhpcy5iZWdpbihRZSl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oUWUsRHQsa3QsT24pe3N3aXRjaChrdCl7Y2FzZSAwOnJldHVybiA1O2Nhc2UgMTpicmVhaztjYXNlIDI6YnJlYWs7Y2FzZSAzOmJyZWFrO2Nhc2UgNDpicmVhaztjYXNlIDU6YnJlYWs7Y2FzZSA2OnJldHVybiAxOTtjYXNlIDc6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwxNDtjYXNlIDg6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksNTA7Y2FzZSA5OnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDUyO2Nhc2UgMTA6cmV0dXJuIDEzO2Nhc2UgMTE6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksNTM7Y2FzZSAxMjpyZXR1cm4gRHQueXl0ZXh0PUR0Lnl5dGV4dC50cmltKCksdGhpcy5iZWdpbigiQUxJQVMiKSw3MDtjYXNlIDEzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oIkxJTkUiKSw1MTtjYXNlIDE0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDU7Y2FzZSAxNTpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDM2O2Nhc2UgMTY6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwzNztjYXNlIDE3OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMzg7Y2FzZSAxODpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDM5O2Nhc2UgMTk6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0OTtjYXNlIDIwOnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDE7Y2FzZSAyMTpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQzO2Nhc2UgMjI6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0ODtjYXNlIDIzOnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDQ7Y2FzZSAyNDpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQ3O2Nhc2UgMjU6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0NjtjYXNlIDI2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTU7Y2FzZSAyNzpyZXR1cm4gMTY7Y2FzZSAyODpyZXR1cm4gNjU7Y2FzZSAyOTpyZXR1cm4gNjY7Y2FzZSAzMDpyZXR1cm4gNTk7Y2FzZSAzMTpyZXR1cm4gNjA7Y2FzZSAzMjpyZXR1cm4gNjE7Y2FzZSAzMzpyZXR1cm4gNjI7Y2FzZSAzNDpyZXR1cm4gNTc7Y2FzZSAzNTpyZXR1cm4gNTQ7Y2FzZSAzNjpyZXR1cm4gdGhpcy5iZWdpbigiSUQiKSwyMTtjYXNlIDM3OnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDIzO2Nhc2UgMzg6cmV0dXJuIDI5O2Nhc2UgMzk6cmV0dXJuIDMwO2Nhc2UgNDA6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDMxO2Nhc2UgNDE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDQyOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzMztjYXNlIDQzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSA0NDp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSA0NTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA0NjpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSA0NzpyZXR1cm4gNjtjYXNlIDQ4OnJldHVybiAxODtjYXNlIDQ5OnJldHVybiAyMDtjYXNlIDUwOnJldHVybiA2NDtjYXNlIDUxOnJldHVybiA1O2Nhc2UgNTI6cmV0dXJuIER0Lnl5dGV4dD1EdC55eXRleHQudHJpbSgpLDcwO2Nhc2UgNTM6cmV0dXJuIDczO2Nhc2UgNTQ6cmV0dXJuIDc0O2Nhc2UgNTU6cmV0dXJuIDcxO2Nhc2UgNTY6cmV0dXJuIDcyO2Nhc2UgNTc6cmV0dXJuIDc1O2Nhc2UgNTg6cmV0dXJuIDc2O2Nhc2UgNTk6cmV0dXJuIDc3O2Nhc2UgNjA6cmV0dXJuIDc4O2Nhc2UgNjE6cmV0dXJuIDc5O2Nhc2UgNjI6cmV0dXJuIDY4O2Nhc2UgNjM6cmV0dXJuIDY5O2Nhc2UgNjQ6cmV0dXJuIDU7Y2FzZSA2NTpyZXR1cm4iSU5WQUxJRCJ9fSxydWxlczpbL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/OigoPyFcbilccykrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OiUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86WzAtOV0rKD89WyBcbl0rKSkvaSwvXig/OmJveFxiKS9pLC9eKD86cGFydGljaXBhbnRcYikvaSwvXig/OmFjdG9yXGIpL2ksL14oPzpjcmVhdGVcYikvaSwvXig/OmRlc3Ryb3lcYikvaSwvXig/OlteXC0+OlxuLDtdKz8oW1wtXSpbXlwtPjpcbiw7XSs/KSo/KD89KCg/IVxuKVxzKSthcyg/IVxuKVxzfFsjXG47XXwkKSkvaSwvXig/OmFzXGIpL2ksL14oPzooPzopKS9pLC9eKD86bG9vcFxiKS9pLC9eKD86cmVjdFxiKS9pLC9eKD86b3B0XGIpL2ksL14oPzphbHRcYikvaSwvXig/OmVsc2VcYikvaSwvXig/OnBhclxiKS9pLC9eKD86cGFyX292ZXJcYikvaSwvXig/OmFuZFxiKS9pLC9eKD86Y3JpdGljYWxcYikvaSwvXig/Om9wdGlvblxiKS9pLC9eKD86YnJlYWtcYikvaSwvXig/Oig/Ols6XT8oPzpubyk/d3JhcCk/W14jXG47XSopL2ksL14oPzplbmRcYikvaSwvXig/OmxlZnQgb2ZcYikvaSwvXig/OnJpZ2h0IG9mXGIpL2ksL14oPzpsaW5rc1xiKS9pLC9eKD86bGlua1xiKS9pLC9eKD86cHJvcGVydGllc1xiKS9pLC9eKD86ZGV0YWlsc1xiKS9pLC9eKD86b3ZlclxiKS9pLC9eKD86bm90ZVxiKS9pLC9eKD86YWN0aXZhdGVcYikvaSwvXig/OmRlYWN0aXZhdGVcYikvaSwvXig/OnRpdGxlXHNbXiNcbjtdKykvaSwvXig/OnRpdGxlOlxzW14jXG47XSspL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OnNlcXVlbmNlRGlhZ3JhbVxiKS9pLC9eKD86YXV0b251bWJlclxiKS9pLC9eKD86b2ZmXGIpL2ksL14oPzosKS9pLC9eKD86OykvaSwvXig/OlteXCtcLT46XG4sO10rKCg/ISgteHwtLXh8LVwpfC0tXCkpKVtcLV0qW15cK1wtPjpcbiw7XSspKikvaSwvXig/Oi0+PikvaSwvXig/Oi0tPj4pL2ksL14oPzotPikvaSwvXig/Oi0tPikvaSwvXig/Oi1beF0pL2ksL14oPzotLVt4XSkvaSwvXig/Oi1bXCldKS9pLC9eKD86LS1bXCldKS9pLC9eKD86Oig/Oig/Om5vKT93cmFwKT9bXiNcbjtdKykvaSwvXig/OlwrKS9pLC9eKD86LSkvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbNDUsNDZdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbNDNdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbNDFdLGluY2x1c2l2ZTohMX0sSUQ6e3J1bGVzOlsyLDMsMTJdLGluY2x1c2l2ZTohMX0sQUxJQVM6e3J1bGVzOlsyLDMsMTMsMTRdLGluY2x1c2l2ZTohMX0sTElORTp7cnVsZXM6WzIsMywyNl0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDMsNCw1LDYsNyw4LDksMTAsMTEsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDIsNDQsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjVdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4geHR9KCk7RXQubGV4ZXI9R3Q7ZnVuY3Rpb24gbG4oKXt0aGlzLnl5PXt9fXJldHVybiBsbi5wcm90b3R5cGU9RXQsRXQuUGFyc2VyPWxuLG5ldyBsbn0oKTt5dmUucGFyc2VyPXl2ZTtjb25zdCB5cm49eXZlO2NsYXNzIHhybntjb25zdHJ1Y3RvcihzKXt0aGlzLmluaXQ9cyx0aGlzLnJlY29yZHM9dGhpcy5pbml0KCl9cmVzZXQoKXt0aGlzLnJlY29yZHM9dGhpcy5pbml0KCl9fWNvbnN0IERzPW5ldyB4cm4oKCk9Pih7cHJldkFjdG9yOnZvaWQgMCxhY3RvcnM6e30sY3JlYXRlZEFjdG9yczp7fSxkZXN0cm95ZWRBY3RvcnM6e30sYm94ZXM6W10sbWVzc2FnZXM6W10sbm90ZXM6W10sc2VxdWVuY2VOdW1iZXJzRW5hYmxlZDohMSx3cmFwRW5hYmxlZDp2b2lkIDAsY3VycmVudEJveDp2b2lkIDAsbGFzdENyZWF0ZWQ6dm9pZCAwLGxhc3REZXN0cm95ZWQ6dm9pZCAwfSkpLGtybj1mdW5jdGlvbihpKXtEcy5yZWNvcmRzLmJveGVzLnB1c2goe25hbWU6aS50ZXh0LHdyYXA6aS53cmFwPT09dm9pZCAwJiZKQygpfHwhIWkud3JhcCxmaWxsOmkuY29sb3IsYWN0b3JLZXlzOltdfSksRHMucmVjb3Jkcy5jdXJyZW50Qm94PURzLnJlY29yZHMuYm94ZXMuc2xpY2UoLTEpWzBdfSx4dmU9ZnVuY3Rpb24oaSxzLHUsZCl7bGV0IHA9RHMucmVjb3Jkcy5jdXJyZW50Qm94O2NvbnN0IHY9RHMucmVjb3Jkcy5hY3RvcnNbaV07aWYodil7aWYoRHMucmVjb3Jkcy5jdXJyZW50Qm94JiZ2LmJveCYmRHMucmVjb3Jkcy5jdXJyZW50Qm94IT09di5ib3gpdGhyb3cgbmV3IEVycm9yKCJBIHNhbWUgcGFydGljaXBhbnQgc2hvdWxkIG9ubHkgYmUgZGVmaW5lZCBpbiBvbmUgQm94OiAiK3YubmFtZSsiIGNhbid0IGJlIGluICciK3YuYm94Lm5hbWUrIicgYW5kIGluICciK0RzLnJlY29yZHMuY3VycmVudEJveC5uYW1lKyInIGF0IHRoZSBzYW1lIHRpbWUuIik7aWYocD12LmJveD92LmJveDpEcy5yZWNvcmRzLmN1cnJlbnRCb3gsdi5ib3g9cCx2JiZzPT09di5uYW1lJiZ1PT1udWxsKXJldHVybn0odT09bnVsbHx8dS50ZXh0PT1udWxsKSYmKHU9e3RleHQ6cyx3cmFwOm51bGwsdHlwZTpkfSksKGQ9PW51bGx8fHUudGV4dD09bnVsbCkmJih1PXt0ZXh0OnMsd3JhcDpudWxsLHR5cGU6ZH0pLERzLnJlY29yZHMuYWN0b3JzW2ldPXtib3g6cCxuYW1lOnMsZGVzY3JpcHRpb246dS50ZXh0LHdyYXA6dS53cmFwPT09dm9pZCAwJiZKQygpfHwhIXUud3JhcCxwcmV2QWN0b3I6RHMucmVjb3Jkcy5wcmV2QWN0b3IsbGlua3M6e30scHJvcGVydGllczp7fSxhY3RvckNudDpudWxsLHJlY3REYXRhOm51bGwsdHlwZTpkfHwicGFydGljaXBhbnQifSxEcy5yZWNvcmRzLnByZXZBY3RvciYmRHMucmVjb3Jkcy5hY3RvcnNbRHMucmVjb3Jkcy5wcmV2QWN0b3JdJiYoRHMucmVjb3Jkcy5hY3RvcnNbRHMucmVjb3Jkcy5wcmV2QWN0b3JdLm5leHRBY3Rvcj1pKSxEcy5yZWNvcmRzLmN1cnJlbnRCb3gmJkRzLnJlY29yZHMuY3VycmVudEJveC5hY3RvcktleXMucHVzaChpKSxEcy5yZWNvcmRzLnByZXZBY3Rvcj1pfSxFcm49aT0+e2xldCBzLHU9MDtmb3Iocz0wO3M8RHMucmVjb3Jkcy5tZXNzYWdlcy5sZW5ndGg7cysrKURzLnJlY29yZHMubWVzc2FnZXNbc10udHlwZT09PUtSLkFDVElWRV9TVEFSVCYmRHMucmVjb3Jkcy5tZXNzYWdlc1tzXS5mcm9tLmFjdG9yPT09aSYmdSsrLERzLnJlY29yZHMubWVzc2FnZXNbc10udHlwZT09PUtSLkFDVElWRV9FTkQmJkRzLnJlY29yZHMubWVzc2FnZXNbc10uZnJvbS5hY3Rvcj09PWkmJnUtLTtyZXR1cm4gdX0sVHJuPWZ1bmN0aW9uKGkscyx1LGQpe0RzLnJlY29yZHMubWVzc2FnZXMucHVzaCh7ZnJvbTppLHRvOnMsbWVzc2FnZTp1LnRleHQsd3JhcDp1LndyYXA9PT12b2lkIDAmJkpDKCl8fCEhdS53cmFwLGFuc3dlcjpkfSl9LEpmPWZ1bmN0aW9uKGkscyx1PXt0ZXh0OnZvaWQgMCx3cmFwOnZvaWQgMH0sZCxwPSExKXtpZihkPT09S1IuQUNUSVZFX0VORCYmRXJuKGkuYWN0b3IpPDEpe2xldCBiPW5ldyBFcnJvcigiVHJ5aW5nIHRvIGluYWN0aXZhdGUgYW4gaW5hY3RpdmUgcGFydGljaXBhbnQgKCIraS5hY3RvcisiKSIpO3Rocm93IGIuaGFzaD17dGV4dDoiLT4+LSIsdG9rZW46Ii0+Pi0iLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsiJ0FDVElWRV9QQVJUSUNJUEFOVCciXX0sYn1yZXR1cm4gRHMucmVjb3Jkcy5tZXNzYWdlcy5wdXNoKHtmcm9tOmksdG86cyxtZXNzYWdlOnUudGV4dCx3cmFwOnUud3JhcD09PXZvaWQgMCYmSkMoKXx8ISF1LndyYXAsdHlwZTpkLGFjdGl2YXRlOnB9KSwhMH0sQ3JuPWZ1bmN0aW9uKCl7cmV0dXJuIERzLnJlY29yZHMuYm94ZXMubGVuZ3RoPjB9LFNybj1mdW5jdGlvbigpe3JldHVybiBEcy5yZWNvcmRzLmJveGVzLnNvbWUoaT0+aS5uYW1lKX0sX3JuPWZ1bmN0aW9uKCl7cmV0dXJuIERzLnJlY29yZHMubWVzc2FnZXN9LEFybj1mdW5jdGlvbigpe3JldHVybiBEcy5yZWNvcmRzLmJveGVzfSxMcm49ZnVuY3Rpb24oKXtyZXR1cm4gRHMucmVjb3Jkcy5hY3RvcnN9LE1ybj1mdW5jdGlvbigpe3JldHVybiBEcy5yZWNvcmRzLmNyZWF0ZWRBY3RvcnN9LERybj1mdW5jdGlvbigpe3JldHVybiBEcy5yZWNvcmRzLmRlc3Ryb3llZEFjdG9yc30sR1I9ZnVuY3Rpb24oaSl7cmV0dXJuIERzLnJlY29yZHMuYWN0b3JzW2ldfSxJcm49ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXMoRHMucmVjb3Jkcy5hY3RvcnMpfSxPcm49ZnVuY3Rpb24oKXtEcy5yZWNvcmRzLnNlcXVlbmNlTnVtYmVyc0VuYWJsZWQ9ITB9LE5ybj1mdW5jdGlvbigpe0RzLnJlY29yZHMuc2VxdWVuY2VOdW1iZXJzRW5hYmxlZD0hMX0sUHJuPSgpPT5Ecy5yZWNvcmRzLnNlcXVlbmNlTnVtYmVyc0VuYWJsZWQsQnJuPWZ1bmN0aW9uKGkpe0RzLnJlY29yZHMud3JhcEVuYWJsZWQ9aX0sSkM9KCk9PkRzLnJlY29yZHMud3JhcEVuYWJsZWQhPT12b2lkIDA/RHMucmVjb3Jkcy53cmFwRW5hYmxlZDpxdCgpLnNlcXVlbmNlLndyYXAsRnJuPWZ1bmN0aW9uKCl7RHMucmVzZXQoKSxQZygpfSxScm49ZnVuY3Rpb24oaSl7Y29uc3Qgcz1pLnRyaW0oKSx1PXt0ZXh0OnMucmVwbGFjZSgvXjo/KD86bm8pP3dyYXA6LywiIikudHJpbSgpLHdyYXA6cy5tYXRjaCgvXjo/d3JhcDovKSE9PW51bGw/ITA6cy5tYXRjaCgvXjo/bm93cmFwOi8pIT09bnVsbD8hMTp2b2lkIDB9O3JldHVybiBYZS5kZWJ1ZygicGFyc2VNZXNzYWdlOiIsdSksdX0sanJuPWZ1bmN0aW9uKGkpe2NvbnN0IHM9aS5tYXRjaCgvXigoPzpyZ2JhP3xoc2xhPylccypcKC4qXCl8XHcqKSguKikkLyk7bGV0IHU9cyE9bnVsbCYmc1sxXT9zWzFdLnRyaW0oKToidHJhbnNwYXJlbnQiLGQ9cyE9bnVsbCYmc1syXT9zWzJdLnRyaW0oKTp2b2lkIDA7aWYod2luZG93JiZ3aW5kb3cuQ1NTKXdpbmRvdy5DU1Muc3VwcG9ydHMoImNvbG9yIix1KXx8KHU9InRyYW5zcGFyZW50IixkPWkudHJpbSgpKTtlbHNle2NvbnN0IHA9bmV3IE9wdGlvbigpLnN0eWxlO3AuY29sb3I9dSxwLmNvbG9yIT09dSYmKHU9InRyYW5zcGFyZW50IixkPWkudHJpbSgpKX1yZXR1cm57Y29sb3I6dSx0ZXh0OmQhPT12b2lkIDA/WWYoZC5yZXBsYWNlKC9eOj8oPzpubyk/d3JhcDovLCIiKSxxdCgpKTp2b2lkIDAsd3JhcDpkIT09dm9pZCAwP2QubWF0Y2goL146P3dyYXA6LykhPT1udWxsPyEwOmQubWF0Y2goL146P25vd3JhcDovKSE9PW51bGw/ITE6dm9pZCAwOnZvaWQgMH19LEtSPXtTT0xJRDowLERPVFRFRDoxLE5PVEU6MixTT0xJRF9DUk9TUzozLERPVFRFRF9DUk9TUzo0LFNPTElEX09QRU46NSxET1RURURfT1BFTjo2LExPT1BfU1RBUlQ6MTAsTE9PUF9FTkQ6MTEsQUxUX1NUQVJUOjEyLEFMVF9FTFNFOjEzLEFMVF9FTkQ6MTQsT1BUX1NUQVJUOjE1LE9QVF9FTkQ6MTYsQUNUSVZFX1NUQVJUOjE3LEFDVElWRV9FTkQ6MTgsUEFSX1NUQVJUOjE5LFBBUl9BTkQ6MjAsUEFSX0VORDoyMSxSRUNUX1NUQVJUOjIyLFJFQ1RfRU5EOjIzLFNPTElEX1BPSU5UOjI0LERPVFRFRF9QT0lOVDoyNSxBVVRPTlVNQkVSOjI2LENSSVRJQ0FMX1NUQVJUOjI3LENSSVRJQ0FMX09QVElPTjoyOCxDUklUSUNBTF9FTkQ6MjksQlJFQUtfU1RBUlQ6MzAsQlJFQUtfRU5EOjMxLFBBUl9PVkVSX1NUQVJUOjMyfSwkcm49e0ZJTExFRDowLE9QRU46MX0senJuPXtMRUZUT0Y6MCxSSUdIVE9GOjEsT1ZFUjoyfSxER2U9ZnVuY3Rpb24oaSxzLHUpe2NvbnN0IGQ9e2FjdG9yOmkscGxhY2VtZW50OnMsbWVzc2FnZTp1LnRleHQsd3JhcDp1LndyYXA9PT12b2lkIDAmJkpDKCl8fCEhdS53cmFwfSxwPVtdLmNvbmNhdChpLGkpO0RzLnJlY29yZHMubm90ZXMucHVzaChkKSxEcy5yZWNvcmRzLm1lc3NhZ2VzLnB1c2goe2Zyb206cFswXSx0bzpwWzFdLG1lc3NhZ2U6dS50ZXh0LHdyYXA6dS53cmFwPT09dm9pZCAwJiZKQygpfHwhIXUud3JhcCx0eXBlOktSLk5PVEUscGxhY2VtZW50OnN9KX0sSUdlPWZ1bmN0aW9uKGkscyl7Y29uc3QgdT1HUihpKTt0cnl7bGV0IGQ9WWYocy50ZXh0LHF0KCkpO2Q9ZC5yZXBsYWNlKC8mYW1wOy9nLCImIiksZD1kLnJlcGxhY2UoLyZlcXVhbHM7L2csIj0iKTtjb25zdCBwPUpTT04ucGFyc2UoZCk7a3ZlKHUscCl9Y2F0Y2goZCl7WGUuZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgbGluayB0ZXh0IixkKX19LHFybj1mdW5jdGlvbihpLHMpe2NvbnN0IHU9R1IoaSk7dHJ5e2NvbnN0IGI9e307bGV0IHk9WWYocy50ZXh0LHF0KCkpO3ZhciBkPXkuaW5kZXhPZigiQCIpO3k9eS5yZXBsYWNlKC8mYW1wOy9nLCImIikseT15LnJlcGxhY2UoLyZlcXVhbHM7L2csIj0iKTt2YXIgcD15LnNsaWNlKDAsZC0xKS50cmltKCksdj15LnNsaWNlKGQrMSkudHJpbSgpO2JbcF09dixrdmUodSxiKX1jYXRjaChiKXtYZS5lcnJvcigiZXJyb3Igd2hpbGUgcGFyc2luZyBhY3RvciBsaW5rIHRleHQiLGIpfX07ZnVuY3Rpb24ga3ZlKGkscyl7aWYoaS5saW5rcz09bnVsbClpLmxpbmtzPXM7ZWxzZSBmb3IobGV0IHUgaW4gcylpLmxpbmtzW3VdPXNbdV19Y29uc3QgT0dlPWZ1bmN0aW9uKGkscyl7Y29uc3QgdT1HUihpKTt0cnl7bGV0IGQ9WWYocy50ZXh0LHF0KCkpO2NvbnN0IHA9SlNPTi5wYXJzZShkKTtOR2UodSxwKX1jYXRjaChkKXtYZS5lcnJvcigiZXJyb3Igd2hpbGUgcGFyc2luZyBhY3RvciBwcm9wZXJ0aWVzIHRleHQiLGQpfX07ZnVuY3Rpb24gTkdlKGkscyl7aWYoaS5wcm9wZXJ0aWVzPT1udWxsKWkucHJvcGVydGllcz1zO2Vsc2UgZm9yKGxldCB1IGluIHMpaS5wcm9wZXJ0aWVzW3VdPXNbdV19ZnVuY3Rpb24gSHJuKCl7RHMucmVjb3Jkcy5jdXJyZW50Qm94PXZvaWQgMH1jb25zdCBQR2U9ZnVuY3Rpb24oaSxzKXtjb25zdCB1PUdSKGkpLGQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocy50ZXh0KTt0cnl7Y29uc3QgcD1kLmlubmVySFRNTCx2PUpTT04ucGFyc2UocCk7di5wcm9wZXJ0aWVzJiZOR2UodSx2LnByb3BlcnRpZXMpLHYubGlua3MmJmt2ZSh1LHYubGlua3MpfWNhdGNoKHApe1hlLmVycm9yKCJlcnJvciB3aGlsZSBwYXJzaW5nIGFjdG9yIGRldGFpbHMgdGV4dCIscCl9fSxWcm49ZnVuY3Rpb24oaSxzKXtpZihpIT09dm9pZCAwJiZpLnByb3BlcnRpZXMhPT12b2lkIDApcmV0dXJuIGkucHJvcGVydGllc1tzXX0sQkdlPWZ1bmN0aW9uKGkpe2lmKEFycmF5LmlzQXJyYXkoaSkpaS5mb3JFYWNoKGZ1bmN0aW9uKHMpe0JHZShzKX0pO2Vsc2Ugc3dpdGNoKGkudHlwZSl7Y2FzZSJzZXF1ZW5jZUluZGV4IjpEcy5yZWNvcmRzLm1lc3NhZ2VzLnB1c2goe2Zyb206dm9pZCAwLHRvOnZvaWQgMCxtZXNzYWdlOntzdGFydDppLnNlcXVlbmNlSW5kZXgsc3RlcDppLnNlcXVlbmNlSW5kZXhTdGVwLHZpc2libGU6aS5zZXF1ZW5jZVZpc2libGV9LHdyYXA6ITEsdHlwZTppLnNpZ25hbFR5cGV9KTticmVhaztjYXNlImFkZFBhcnRpY2lwYW50Ijp4dmUoaS5hY3RvcixpLmFjdG9yLGkuZGVzY3JpcHRpb24saS5kcmF3KTticmVhaztjYXNlImNyZWF0ZVBhcnRpY2lwYW50IjppZihEcy5yZWNvcmRzLmFjdG9yc1tpLmFjdG9yXSl0aHJvdyBuZXcgRXJyb3IoIkl0IGlzIG5vdCBwb3NzaWJsZSB0byBoYXZlIGFjdG9ycyB3aXRoIHRoZSBzYW1lIGlkLCBldmVuIGlmIG9uZSBpcyBkZXN0cm95ZWQgYmVmb3JlIHRoZSBuZXh0IGlzIGNyZWF0ZWQuIFVzZSAnQVMnIGFsaWFzZXMgdG8gc2ltdWxhdGUgdGhlIGJlaGF2aW9yIik7RHMucmVjb3Jkcy5sYXN0Q3JlYXRlZD1pLmFjdG9yLHh2ZShpLmFjdG9yLGkuYWN0b3IsaS5kZXNjcmlwdGlvbixpLmRyYXcpLERzLnJlY29yZHMuY3JlYXRlZEFjdG9yc1tpLmFjdG9yXT1Ecy5yZWNvcmRzLm1lc3NhZ2VzLmxlbmd0aDticmVhaztjYXNlImRlc3Ryb3lQYXJ0aWNpcGFudCI6RHMucmVjb3Jkcy5sYXN0RGVzdHJveWVkPWkuYWN0b3IsRHMucmVjb3Jkcy5kZXN0cm95ZWRBY3RvcnNbaS5hY3Rvcl09RHMucmVjb3Jkcy5tZXNzYWdlcy5sZW5ndGg7YnJlYWs7Y2FzZSJhY3RpdmVTdGFydCI6SmYoaS5hY3Rvcix2b2lkIDAsdm9pZCAwLGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJhY3RpdmVFbmQiOkpmKGkuYWN0b3Isdm9pZCAwLHZvaWQgMCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYWRkTm90ZSI6REdlKGkuYWN0b3IsaS5wbGFjZW1lbnQsaS50ZXh0KTticmVhaztjYXNlImFkZExpbmtzIjpJR2UoaS5hY3RvcixpLnRleHQpO2JyZWFrO2Nhc2UiYWRkQUxpbmsiOnFybihpLmFjdG9yLGkudGV4dCk7YnJlYWs7Y2FzZSJhZGRQcm9wZXJ0aWVzIjpPR2UoaS5hY3RvcixpLnRleHQpO2JyZWFrO2Nhc2UiYWRkRGV0YWlscyI6UEdlKGkuYWN0b3IsaS50ZXh0KTticmVhaztjYXNlImFkZE1lc3NhZ2UiOmlmKERzLnJlY29yZHMubGFzdENyZWF0ZWQpe2lmKGkudG8hPT1Ecy5yZWNvcmRzLmxhc3RDcmVhdGVkKXRocm93IG5ldyBFcnJvcigiVGhlIGNyZWF0ZWQgcGFydGljaXBhbnQgIitEcy5yZWNvcmRzLmxhc3RDcmVhdGVkKyIgZG9lcyBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGNyZWF0aW5nIG1lc3NhZ2UgYWZ0ZXIgaXRzIGRlY2xhcmF0aW9uLiBQbGVhc2UgY2hlY2sgdGhlIHNlcXVlbmNlIGRpYWdyYW0uIik7RHMucmVjb3Jkcy5sYXN0Q3JlYXRlZD12b2lkIDB9ZWxzZSBpZihEcy5yZWNvcmRzLmxhc3REZXN0cm95ZWQpe2lmKGkudG8hPT1Ecy5yZWNvcmRzLmxhc3REZXN0cm95ZWQmJmkuZnJvbSE9PURzLnJlY29yZHMubGFzdERlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBkZXN0cm95ZWQgcGFydGljaXBhbnQgIitEcy5yZWNvcmRzLmxhc3REZXN0cm95ZWQrIiBkb2VzIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgZGVzdHJveWluZyBtZXNzYWdlIGFmdGVyIGl0cyBkZWNsYXJhdGlvbi4gUGxlYXNlIGNoZWNrIHRoZSBzZXF1ZW5jZSBkaWFncmFtLiIpO0RzLnJlY29yZHMubGFzdERlc3Ryb3llZD12b2lkIDB9SmYoaS5mcm9tLGkudG8saS5tc2csaS5zaWduYWxUeXBlLGkuYWN0aXZhdGUpO2JyZWFrO2Nhc2UiYm94U3RhcnQiOmtybihpLmJveERhdGEpO2JyZWFrO2Nhc2UiYm94RW5kIjpIcm4oKTticmVhaztjYXNlImxvb3BTdGFydCI6SmYodm9pZCAwLHZvaWQgMCxpLmxvb3BUZXh0LGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJsb29wRW5kIjpKZih2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UicmVjdFN0YXJ0IjpKZih2b2lkIDAsdm9pZCAwLGkuY29sb3IsaS5zaWduYWxUeXBlKTticmVhaztjYXNlInJlY3RFbmQiOkpmKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJvcHRTdGFydCI6SmYodm9pZCAwLHZvaWQgMCxpLm9wdFRleHQsaS5zaWduYWxUeXBlKTticmVhaztjYXNlIm9wdEVuZCI6SmYodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5zaWduYWxUeXBlKTticmVhaztjYXNlImFsdFN0YXJ0IjpKZih2b2lkIDAsdm9pZCAwLGkuYWx0VGV4dCxpLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiZWxzZSI6SmYodm9pZCAwLHZvaWQgMCxpLmFsdFRleHQsaS5zaWduYWxUeXBlKTticmVhaztjYXNlImFsdEVuZCI6SmYodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5zaWduYWxUeXBlKTticmVhaztjYXNlInNldEFjY1RpdGxlIjpCZyhpLnRleHQpO2JyZWFrO2Nhc2UicGFyU3RhcnQiOkpmKHZvaWQgMCx2b2lkIDAsaS5wYXJUZXh0LGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJhbmQiOkpmKHZvaWQgMCx2b2lkIDAsaS5wYXJUZXh0LGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJwYXJFbmQiOkpmKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJjcml0aWNhbFN0YXJ0IjpKZih2b2lkIDAsdm9pZCAwLGkuY3JpdGljYWxUZXh0LGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJvcHRpb24iOkpmKHZvaWQgMCx2b2lkIDAsaS5vcHRpb25UZXh0LGkuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJjcml0aWNhbEVuZCI6SmYodm9pZCAwLHZvaWQgMCx2b2lkIDAsaS5zaWduYWxUeXBlKTticmVhaztjYXNlImJyZWFrU3RhcnQiOkpmKHZvaWQgMCx2b2lkIDAsaS5icmVha1RleHQsaS5zaWduYWxUeXBlKTticmVhaztjYXNlImJyZWFrRW5kIjpKZih2b2lkIDAsdm9pZCAwLHZvaWQgMCxpLnNpZ25hbFR5cGUpO2JyZWFrfX0sRkdlPXthZGRBY3Rvcjp4dmUsYWRkTWVzc2FnZTpUcm4sYWRkU2lnbmFsOkpmLGFkZExpbmtzOklHZSxhZGREZXRhaWxzOlBHZSxhZGRQcm9wZXJ0aWVzOk9HZSxhdXRvV3JhcDpKQyxzZXRXcmFwOkJybixlbmFibGVTZXF1ZW5jZU51bWJlcnM6T3JuLGRpc2FibGVTZXF1ZW5jZU51bWJlcnM6TnJuLHNob3dTZXF1ZW5jZU51bWJlcnM6UHJuLGdldE1lc3NhZ2VzOl9ybixnZXRBY3RvcnM6THJuLGdldENyZWF0ZWRBY3RvcnM6TXJuLGdldERlc3Ryb3llZEFjdG9yczpEcm4sZ2V0QWN0b3I6R1IsZ2V0QWN0b3JLZXlzOklybixnZXRBY3RvclByb3BlcnR5OlZybixnZXRBY2NUaXRsZTpDcCxnZXRCb3hlczpBcm4sZ2V0RGlhZ3JhbVRpdGxlOkFwLHNldERpYWdyYW1UaXRsZTpjbSxnZXRDb25maWc6KCk9PnF0KCkuc2VxdWVuY2UsY2xlYXI6RnJuLHBhcnNlTWVzc2FnZTpScm4scGFyc2VCb3hEYXRhOmpybixMSU5FVFlQRTpLUixBUlJPV1RZUEU6JHJuLFBMQUNFTUVOVDp6cm4sYWRkTm90ZTpER2Usc2V0QWNjVGl0bGU6QmcsYXBwbHk6QkdlLHNldEFjY0Rlc2NyaXB0aW9uOlNwLGdldEFjY0Rlc2NyaXB0aW9uOl9wLGhhc0F0TGVhc3RPbmVCb3g6Q3JuLGhhc0F0TGVhc3RPbmVCb3hXaXRoVGl0bGU6U3JufSxVcm49aT0+YC5hY3RvciB7CiAgICBzdHJva2U6ICR7aS5hY3RvckJvcmRlcn07CiAgICBmaWxsOiAke2kuYWN0b3JCa2d9OwogIH0KCiAgdGV4dC5hY3RvciA+IHRzcGFuIHsKICAgIGZpbGw6ICR7aS5hY3RvclRleHRDb2xvcn07CiAgICBzdHJva2U6IG5vbmU7CiAgfQoKICAuYWN0b3ItbGluZSB7CiAgICBzdHJva2U6ICR7aS5hY3RvckxpbmVDb2xvcn07CiAgfQoKICAubWVzc2FnZUxpbmUwIHsKICAgIHN0cm9rZS13aWR0aDogMS41OwogICAgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsKICAgIHN0cm9rZTogJHtpLnNpZ25hbENvbG9yfTsKICB9CgogIC5tZXNzYWdlTGluZTEgewogICAgc3Ryb2tlLXdpZHRoOiAxLjU7CiAgICBzdHJva2UtZGFzaGFycmF5OiAyLCAyOwogICAgc3Ryb2tlOiAke2kuc2lnbmFsQ29sb3J9OwogIH0KCiAgI2Fycm93aGVhZCBwYXRoIHsKICAgIGZpbGw6ICR7aS5zaWduYWxDb2xvcn07CiAgICBzdHJva2U6ICR7aS5zaWduYWxDb2xvcn07CiAgfQoKICAuc2VxdWVuY2VOdW1iZXIgewogICAgZmlsbDogJHtpLnNlcXVlbmNlTnVtYmVyQ29sb3J9OwogIH0KCiAgI3NlcXVlbmNlbnVtYmVyIHsKICAgIGZpbGw6ICR7aS5zaWduYWxDb2xvcn07CiAgfQoKICAjY3Jvc3NoZWFkIHBhdGggewogICAgZmlsbDogJHtpLnNpZ25hbENvbG9yfTsKICAgIHN0cm9rZTogJHtpLnNpZ25hbENvbG9yfTsKICB9CgogIC5tZXNzYWdlVGV4dCB7CiAgICBmaWxsOiAke2kuc2lnbmFsVGV4dENvbG9yfTsKICAgIHN0cm9rZTogbm9uZTsKICB9CgogIC5sYWJlbEJveCB7CiAgICBzdHJva2U6ICR7aS5sYWJlbEJveEJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7aS5sYWJlbEJveEJrZ0NvbG9yfTsKICB9CgogIC5sYWJlbFRleHQsIC5sYWJlbFRleHQgPiB0c3BhbiB7CiAgICBmaWxsOiAke2kubGFiZWxUZXh0Q29sb3J9OwogICAgc3Ryb2tlOiBub25lOwogIH0KCiAgLmxvb3BUZXh0LCAubG9vcFRleHQgPiB0c3BhbiB7CiAgICBmaWxsOiAke2kubG9vcFRleHRDb2xvcn07CiAgICBzdHJva2U6IG5vbmU7CiAgfQoKICAubG9vcExpbmUgewogICAgc3Ryb2tlLXdpZHRoOiAycHg7CiAgICBzdHJva2UtZGFzaGFycmF5OiAyLCAyOwogICAgc3Ryb2tlOiAke2kubGFiZWxCb3hCb3JkZXJDb2xvcn07CiAgICBmaWxsOiAke2kubGFiZWxCb3hCb3JkZXJDb2xvcn07CiAgfQoKICAubm90ZSB7CiAgICAvL3N0cm9rZTogI2RlY2M5MzsKICAgIHN0cm9rZTogJHtpLm5vdGVCb3JkZXJDb2xvcn07CiAgICBmaWxsOiAke2kubm90ZUJrZ0NvbG9yfTsKICB9CgogIC5ub3RlVGV4dCwgLm5vdGVUZXh0ID4gdHNwYW4gewogICAgZmlsbDogJHtpLm5vdGVUZXh0Q29sb3J9OwogICAgc3Ryb2tlOiBub25lOwogIH0KCiAgLmFjdGl2YXRpb24wIHsKICAgIGZpbGw6ICR7aS5hY3RpdmF0aW9uQmtnQ29sb3J9OwogICAgc3Ryb2tlOiAke2kuYWN0aXZhdGlvbkJvcmRlckNvbG9yfTsKICB9CgogIC5hY3RpdmF0aW9uMSB7CiAgICBmaWxsOiAke2kuYWN0aXZhdGlvbkJrZ0NvbG9yfTsKICAgIHN0cm9rZTogJHtpLmFjdGl2YXRpb25Cb3JkZXJDb2xvcn07CiAgfQoKICAuYWN0aXZhdGlvbjIgewogICAgZmlsbDogJHtpLmFjdGl2YXRpb25Ca2dDb2xvcn07CiAgICBzdHJva2U6ICR7aS5hY3RpdmF0aW9uQm9yZGVyQ29sb3J9OwogIH0KCiAgLmFjdG9yUG9wdXBNZW51IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB9CgogIC5hY3RvclBvcHVwTWVudVBhbmVsIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGZpbGw6ICR7aS5hY3RvckJrZ307CiAgICBib3gtc2hhZG93OiAwcHggOHB4IDE2cHggMHB4IHJnYmEoMCwwLDAsMC4yKTsKICAgIGZpbHRlcjogZHJvcC1zaGFkb3coM3B4IDVweCAycHggcmdiKDAgMCAwIC8gMC40KSk7Cn0KICAuYWN0b3ItbWFuIGxpbmUgewogICAgc3Ryb2tlOiAke2kuYWN0b3JCb3JkZXJ9OwogICAgZmlsbDogJHtpLmFjdG9yQmtnfTsKICB9CiAgLmFjdG9yLW1hbiBjaXJjbGUsIGxpbmUgewogICAgc3Ryb2tlOiAke2kuYWN0b3JCb3JkZXJ9OwogICAgZmlsbDogJHtpLmFjdG9yQmtnfTsKICAgIHN0cm9rZS13aWR0aDogMnB4OwogIH0KYCxaQz0xOCoyLFJHZT0iYWN0b3ItdG9wIixqR2U9ImFjdG9yLWJvdHRvbSIsRXZlPWZ1bmN0aW9uKGkscyl7cmV0dXJuIEFRKGkscyl9LEdybj1mdW5jdGlvbihpLHMsdSxkLHApe2lmKHMubGlua3M9PT12b2lkIDB8fHMubGlua3M9PT1udWxsfHxPYmplY3Qua2V5cyhzLmxpbmtzKS5sZW5ndGg9PT0wKXJldHVybntoZWlnaHQ6MCx3aWR0aDowfTtjb25zdCB2PXMubGlua3MsYj1zLmFjdG9yQ250LHk9cy5yZWN0RGF0YTt2YXIgVD0ibm9uZSI7cCYmKFQ9ImJsb2NrICFpbXBvcnRhbnQiKTtjb25zdCBfPWkuYXBwZW5kKCJnIik7Xy5hdHRyKCJpZCIsImFjdG9yIitiKyJfcG9wdXAiKSxfLmF0dHIoImNsYXNzIiwiYWN0b3JQb3B1cE1lbnUiKSxfLmF0dHIoImRpc3BsYXkiLFQpO3ZhciBBPSIiO3kuY2xhc3MhPT12b2lkIDAmJihBPSIgIit5LmNsYXNzKTtsZXQgUD15LndpZHRoPnU/eS53aWR0aDp1O2NvbnN0IFI9Xy5hcHBlbmQoInJlY3QiKTtpZihSLmF0dHIoImNsYXNzIiwiYWN0b3JQb3B1cE1lbnVQYW5lbCIrQSksUi5hdHRyKCJ4Iix5LngpLFIuYXR0cigieSIseS5oZWlnaHQpLFIuYXR0cigiZmlsbCIseS5maWxsKSxSLmF0dHIoInN0cm9rZSIseS5zdHJva2UpLFIuYXR0cigid2lkdGgiLFApLFIuYXR0cigiaGVpZ2h0Iix5LmhlaWdodCksUi5hdHRyKCJyeCIseS5yeCksUi5hdHRyKCJyeSIseS5yeSksdiE9bnVsbCl7dmFyIEY9MjA7Zm9yKGxldCBlZSBpbiB2KXt2YXIgaj1fLmFwcGVuZCgiYSIpLEs9cDkuc2FuaXRpemVVcmwodltlZV0pO2ouYXR0cigieGxpbms6aHJlZiIsSyksai5hdHRyKCJ0YXJnZXQiLCJfYmxhbmsiKSx1aW4oZCkoZWUsaix5LngrMTAseS5oZWlnaHQrRixQLDIwLHtjbGFzczoiYWN0b3IifSxkKSxGKz0zMH19cmV0dXJuIFIuYXR0cigiaGVpZ2h0IixGKSx7aGVpZ2h0OnkuaGVpZ2h0K0Ysd2lkdGg6UH19LEtybj1mdW5jdGlvbihpKXtyZXR1cm4idmFyIHB1ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJyIraSsiJyk7IGlmIChwdSAhPSBudWxsKSB7IHB1LnN0eWxlLmRpc3BsYXkgPSBwdS5zdHlsZS5kaXNwbGF5ID09ICdibG9jaycgPyAnbm9uZScgOiAnYmxvY2snOyB9In0scEo9YXN5bmMgZnVuY3Rpb24oaSxzLHU9bnVsbCl7bGV0IGQ9aS5hcHBlbmQoImZvcmVpZ25PYmplY3QiKTtjb25zdCBwPWF3YWl0IENDKHMudGV4dCxWaCgpKSxiPWQuYXBwZW5kKCJ4aHRtbDpkaXYiKS5hdHRyKCJzdHlsZSIsIndpZHRoOiBmaXQtY29udGVudDsiKS5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKS5odG1sKHApLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihkLmF0dHIoImhlaWdodCIsTWF0aC5yb3VuZChiLmhlaWdodCkpLmF0dHIoIndpZHRoIixNYXRoLnJvdW5kKGIud2lkdGgpKSxzLmNsYXNzPT09Im5vdGVUZXh0Iil7Y29uc3QgeT1pLm5vZGUoKS5maXJzdENoaWxkO3kuc2V0QXR0cmlidXRlKCJoZWlnaHQiLGIuaGVpZ2h0KzIqcy50ZXh0TWFyZ2luKTtjb25zdCBUPXkuZ2V0QkJveCgpO2QuYXR0cigieCIsTWF0aC5yb3VuZChULngrVC53aWR0aC8yLWIud2lkdGgvMikpLmF0dHIoInkiLE1hdGgucm91bmQoVC55K1QuaGVpZ2h0LzItYi5oZWlnaHQvMikpfWVsc2UgaWYodSl7bGV0e3N0YXJ0eDp5LHN0b3B4OlQsc3RhcnR5Ol99PXU7aWYoeT5UKXtjb25zdCBBPXk7eT1ULFQ9QX1kLmF0dHIoIngiLE1hdGgucm91bmQoeStNYXRoLmFicyh5LVQpLzItYi53aWR0aC8yKSkscy5jbGFzcz09PSJsb29wVGV4dCI/ZC5hdHRyKCJ5IixNYXRoLnJvdW5kKF8pKTpkLmF0dHIoInkiLE1hdGgucm91bmQoXy1iLmhlaWdodCkpfXJldHVybltkXX0sWUQ9ZnVuY3Rpb24oaSxzKXtsZXQgdT0wLGQ9MDtjb25zdCBwPXMudGV4dC5zcGxpdChjaS5saW5lQnJlYWtSZWdleCksW3YsYl09TkMocy5mb250U2l6ZSk7bGV0IHk9W10sVD0wLF89KCk9PnMueTtpZihzLnZhbGlnbiE9PXZvaWQgMCYmcy50ZXh0TWFyZ2luIT09dm9pZCAwJiZzLnRleHRNYXJnaW4+MClzd2l0Y2gocy52YWxpZ24pe2Nhc2UidG9wIjpjYXNlInN0YXJ0IjpfPSgpPT5NYXRoLnJvdW5kKHMueStzLnRleHRNYXJnaW4pO2JyZWFrO2Nhc2UibWlkZGxlIjpjYXNlImNlbnRlciI6Xz0oKT0+TWF0aC5yb3VuZChzLnkrKHUrZCtzLnRleHRNYXJnaW4pLzIpO2JyZWFrO2Nhc2UiYm90dG9tIjpjYXNlImVuZCI6Xz0oKT0+TWF0aC5yb3VuZChzLnkrKHUrZCsyKnMudGV4dE1hcmdpbiktcy50ZXh0TWFyZ2luKTticmVha31pZihzLmFuY2hvciE9PXZvaWQgMCYmcy50ZXh0TWFyZ2luIT09dm9pZCAwJiZzLndpZHRoIT09dm9pZCAwKXN3aXRjaChzLmFuY2hvcil7Y2FzZSJsZWZ0IjpjYXNlInN0YXJ0IjpzLng9TWF0aC5yb3VuZChzLngrcy50ZXh0TWFyZ2luKSxzLmFuY2hvcj0ic3RhcnQiLHMuZG9taW5hbnRCYXNlbGluZT0ibWlkZGxlIixzLmFsaWdubWVudEJhc2VsaW5lPSJtaWRkbGUiO2JyZWFrO2Nhc2UibWlkZGxlIjpjYXNlImNlbnRlciI6cy54PU1hdGgucm91bmQocy54K3Mud2lkdGgvMikscy5hbmNob3I9Im1pZGRsZSIscy5kb21pbmFudEJhc2VsaW5lPSJtaWRkbGUiLHMuYWxpZ25tZW50QmFzZWxpbmU9Im1pZGRsZSI7YnJlYWs7Y2FzZSJyaWdodCI6Y2FzZSJlbmQiOnMueD1NYXRoLnJvdW5kKHMueCtzLndpZHRoLXMudGV4dE1hcmdpbikscy5hbmNob3I9ImVuZCIscy5kb21pbmFudEJhc2VsaW5lPSJtaWRkbGUiLHMuYWxpZ25tZW50QmFzZWxpbmU9Im1pZGRsZSI7YnJlYWt9Zm9yKGxldFtBLFBdb2YgcC5lbnRyaWVzKCkpe3MudGV4dE1hcmdpbiE9PXZvaWQgMCYmcy50ZXh0TWFyZ2luPT09MCYmdiE9PXZvaWQgMCYmKFQ9QSp2KTtjb25zdCBSPWkuYXBwZW5kKCJ0ZXh0Iik7Ui5hdHRyKCJ4IixzLngpLFIuYXR0cigieSIsXygpKSxzLmFuY2hvciE9PXZvaWQgMCYmUi5hdHRyKCJ0ZXh0LWFuY2hvciIscy5hbmNob3IpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIixzLmRvbWluYW50QmFzZWxpbmUpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIscy5hbGlnbm1lbnRCYXNlbGluZSkscy5mb250RmFtaWx5IT09dm9pZCAwJiZSLnN0eWxlKCJmb250LWZhbWlseSIscy5mb250RmFtaWx5KSxiIT09dm9pZCAwJiZSLnN0eWxlKCJmb250LXNpemUiLGIpLHMuZm9udFdlaWdodCE9PXZvaWQgMCYmUi5zdHlsZSgiZm9udC13ZWlnaHQiLHMuZm9udFdlaWdodCkscy5maWxsIT09dm9pZCAwJiZSLmF0dHIoImZpbGwiLHMuZmlsbCkscy5jbGFzcyE9PXZvaWQgMCYmUi5hdHRyKCJjbGFzcyIscy5jbGFzcykscy5keSE9PXZvaWQgMD9SLmF0dHIoImR5IixzLmR5KTpUIT09MCYmUi5hdHRyKCJkeSIsVCk7Y29uc3QgRj1QfHxoamU7aWYocy50c3Bhbil7Y29uc3Qgaj1SLmFwcGVuZCgidHNwYW4iKTtqLmF0dHIoIngiLHMueCkscy5maWxsIT09dm9pZCAwJiZqLmF0dHIoImZpbGwiLHMuZmlsbCksai50ZXh0KEYpfWVsc2UgUi50ZXh0KEYpO3MudmFsaWduIT09dm9pZCAwJiZzLnRleHRNYXJnaW4hPT12b2lkIDAmJnMudGV4dE1hcmdpbj4wJiYoZCs9KFIuX2dyb3Vwc3x8UilbMF1bMF0uZ2V0QkJveCgpLmhlaWdodCx1PWQpLHkucHVzaChSKX1yZXR1cm4geX0sJEdlPWZ1bmN0aW9uKGkscyl7ZnVuY3Rpb24gdShwLHYsYix5LFQpe3JldHVybiBwKyIsIit2KyIgIisocCtiKSsiLCIrdisiICIrKHArYikrIiwiKyh2K3ktVCkrIiAiKyhwK2ItVCoxLjIpKyIsIisodit5KSsiICIrcCsiLCIrKHYreSl9Y29uc3QgZD1pLmFwcGVuZCgicG9seWdvbiIpO3JldHVybiBkLmF0dHIoInBvaW50cyIsdShzLngscy55LHMud2lkdGgscy5oZWlnaHQsNykpLGQuYXR0cigiY2xhc3MiLCJsYWJlbEJveCIpLHMueT1zLnkrcy5oZWlnaHQvMixZRChpLHMpLGR9O2xldCBzNT0tMTtjb25zdCB6R2U9KGkscyx1LGQpPT57aS5zZWxlY3QmJnUuZm9yRWFjaChwPT57Y29uc3Qgdj1zW3BdLGI9aS5zZWxlY3QoIiNhY3RvciIrdi5hY3RvckNudCk7IWQubWlycm9yQWN0b3JzJiZ2LnN0b3B5P2IuYXR0cigieTIiLHYuc3RvcHkrdi5oZWlnaHQvMik6ZC5taXJyb3JBY3RvcnMmJmIuYXR0cigieTIiLHYuc3RvcHkpfSl9LFdybj1hc3luYyBmdW5jdGlvbihpLHMsdSxkKXtjb25zdCBwPWQ/cy5zdG9weTpzLnN0YXJ0eSx2PXMueCtzLndpZHRoLzIsYj1wKzUseT1pLmFwcGVuZCgiZyIpLmxvd2VyKCk7dmFyIFQ9eTtkfHwoczUrKyxPYmplY3Qua2V5cyhzLmxpbmtzfHx7fSkubGVuZ3RoJiYhdS5mb3JjZU1lbnVzJiZULmF0dHIoIm9uY2xpY2siLEtybihgYWN0b3Ike3M1fV9wb3B1cGApKS5hdHRyKCJjdXJzb3IiLCJwb2ludGVyIiksVC5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsImFjdG9yIitzNSkuYXR0cigieDEiLHYpLmF0dHIoInkxIixiKS5hdHRyKCJ4MiIsdikuYXR0cigieTIiLDJlMykuYXR0cigiY2xhc3MiLCJhY3Rvci1saW5lIikuYXR0cigiY2xhc3MiLCIyMDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjVweCIpLmF0dHIoInN0cm9rZSIsIiM5OTkiKSxUPXkuYXBwZW5kKCJnIikscy5hY3RvckNudD1zNSxzLmxpbmtzIT1udWxsJiZULmF0dHIoImlkIiwicm9vdC0iK3M1KSk7Y29uc3QgXz1xQygpO3ZhciBBPSJhY3RvciI7cy5wcm9wZXJ0aWVzIT1udWxsJiZzLnByb3BlcnRpZXMuY2xhc3M/QT1zLnByb3BlcnRpZXMuY2xhc3M6Xy5maWxsPSIjZWFlYWVhIixkP0ErPWAgJHtqR2V9YDpBKz1gICR7UkdlfWAsXy54PXMueCxfLnk9cCxfLndpZHRoPXMud2lkdGgsXy5oZWlnaHQ9cy5oZWlnaHQsXy5jbGFzcz1BLF8ucng9MyxfLnJ5PTMsXy5uYW1lPXMubmFtZTtjb25zdCBQPUV2ZShULF8pO2lmKHMucmVjdERhdGE9XyxzLnByb3BlcnRpZXMhPW51bGwmJnMucHJvcGVydGllcy5pY29uKXtjb25zdCBGPXMucHJvcGVydGllcy5pY29uLnRyaW0oKTtGLmNoYXJBdCgwKT09PSJAIj9yVXQoVCxfLngrXy53aWR0aC0yMCxfLnkrMTAsRi5zdWJzdHIoMSkpOm5VdChULF8ueCtfLndpZHRoLTIwLF8ueSsxMCxGKX1hd2FpdCBUdmUodSxEdihzLmRlc2NyaXB0aW9uKSkocy5kZXNjcmlwdGlvbixULF8ueCxfLnksXy53aWR0aCxfLmhlaWdodCx7Y2xhc3M6ImFjdG9yIn0sdSk7bGV0IFI9cy5oZWlnaHQ7aWYoUC5ub2RlKXtjb25zdCBGPVAubm9kZSgpLmdldEJCb3goKTtzLmhlaWdodD1GLmhlaWdodCxSPUYuaGVpZ2h0fXJldHVybiBSfSxZcm49YXN5bmMgZnVuY3Rpb24oaSxzLHUsZCl7Y29uc3QgcD1kP3Muc3RvcHk6cy5zdGFydHksdj1zLngrcy53aWR0aC8yLGI9cCs4MDtpLmxvd2VyKCksZHx8KHM1KyssaS5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsImFjdG9yIitzNSkuYXR0cigieDEiLHYpLmF0dHIoInkxIixiKS5hdHRyKCJ4MiIsdikuYXR0cigieTIiLDJlMykuYXR0cigiY2xhc3MiLCJhY3Rvci1saW5lIikuYXR0cigiY2xhc3MiLCIyMDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjVweCIpLmF0dHIoInN0cm9rZSIsIiM5OTkiKSxzLmFjdG9yQ250PXM1KTtjb25zdCB5PWkuYXBwZW5kKCJnIik7bGV0IFQ9ImFjdG9yLW1hbiI7ZD9UKz1gICR7akdlfWA6VCs9YCAke1JHZX1gLHkuYXR0cigiY2xhc3MiLFQpLHkuYXR0cigibmFtZSIscy5uYW1lKTtjb25zdCBfPXFDKCk7Xy54PXMueCxfLnk9cCxfLmZpbGw9IiNlYWVhZWEiLF8ud2lkdGg9cy53aWR0aCxfLmhlaWdodD1zLmhlaWdodCxfLmNsYXNzPSJhY3RvciIsXy5yeD0zLF8ucnk9Myx5LmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwiYWN0b3ItbWFuLXRvcnNvIitzNSkuYXR0cigieDEiLHYpLmF0dHIoInkxIixwKzI1KS5hdHRyKCJ4MiIsdikuYXR0cigieTIiLHArNDUpLHkuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJhY3Rvci1tYW4tYXJtcyIrczUpLmF0dHIoIngxIix2LVpDLzIpLmF0dHIoInkxIixwKzMzKS5hdHRyKCJ4MiIsditaQy8yKS5hdHRyKCJ5MiIscCszMykseS5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsdi1aQy8yKS5hdHRyKCJ5MSIscCs2MCkuYXR0cigieDIiLHYpLmF0dHIoInkyIixwKzQ1KSx5LmFwcGVuZCgibGluZSIpLmF0dHIoIngxIix2KS5hdHRyKCJ5MSIscCs0NSkuYXR0cigieDIiLHYrWkMvMi0yKS5hdHRyKCJ5MiIscCs2MCk7Y29uc3QgQT15LmFwcGVuZCgiY2lyY2xlIik7QS5hdHRyKCJjeCIscy54K3Mud2lkdGgvMiksQS5hdHRyKCJjeSIscCsxMCksQS5hdHRyKCJyIiwxNSksQS5hdHRyKCJ3aWR0aCIscy53aWR0aCksQS5hdHRyKCJoZWlnaHQiLHMuaGVpZ2h0KTtjb25zdCBQPXkubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gcy5oZWlnaHQ9UC5oZWlnaHQsYXdhaXQgVHZlKHUsRHYocy5kZXNjcmlwdGlvbikpKHMuZGVzY3JpcHRpb24seSxfLngsXy55KzM1LF8ud2lkdGgsXy5oZWlnaHQse2NsYXNzOiJhY3RvciJ9LHUpLHMuaGVpZ2h0fSxYcm49YXN5bmMgZnVuY3Rpb24oaSxzLHUsZCl7c3dpdGNoKHMudHlwZSl7Y2FzZSJhY3RvciI6cmV0dXJuIGF3YWl0IFlybihpLHMsdSxkKTtjYXNlInBhcnRpY2lwYW50IjpyZXR1cm4gYXdhaXQgV3JuKGkscyx1LGQpfX0sUXJuPWFzeW5jIGZ1bmN0aW9uKGkscyx1KXtjb25zdCBwPWkuYXBwZW5kKCJnIik7cUdlKHAscykscy5uYW1lJiZhd2FpdCBUdmUodSkocy5uYW1lLHAscy54LHMueSsocy50ZXh0TWF4SGVpZ2h0fHwwKS8yLHMud2lkdGgsMCx7Y2xhc3M6InRleHQifSx1KSxwLmxvd2VyKCl9LEpybj1mdW5jdGlvbihpKXtyZXR1cm4gaS5hcHBlbmQoImciKX0sWnJuPWZ1bmN0aW9uKGkscyx1LGQscCl7Y29uc3Qgdj1xQygpLGI9cy5hbmNob3JlZDt2Lng9cy5zdGFydHgsdi55PXMuc3RhcnR5LHYuY2xhc3M9ImFjdGl2YXRpb24iK3AlMyx2LndpZHRoPXMuc3RvcHgtcy5zdGFydHgsdi5oZWlnaHQ9dS1zLnN0YXJ0eSxFdmUoYix2KX0sZWluPWFzeW5jIGZ1bmN0aW9uKGkscyx1LGQpe2NvbnN0e2JveE1hcmdpbjpwLGJveFRleHRNYXJnaW46dixsYWJlbEJveEhlaWdodDpiLGxhYmVsQm94V2lkdGg6eSxtZXNzYWdlRm9udEZhbWlseTpULG1lc3NhZ2VGb250U2l6ZTpfLG1lc3NhZ2VGb250V2VpZ2h0OkF9PWQsUD1pLmFwcGVuZCgiZyIpLFI9ZnVuY3Rpb24oSyxlZSxpZSxvZSl7cmV0dXJuIFAuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLEspLmF0dHIoInkxIixlZSkuYXR0cigieDIiLGllKS5hdHRyKCJ5MiIsb2UpLmF0dHIoImNsYXNzIiwibG9vcExpbmUiKX07UihzLnN0YXJ0eCxzLnN0YXJ0eSxzLnN0b3B4LHMuc3RhcnR5KSxSKHMuc3RvcHgscy5zdGFydHkscy5zdG9weCxzLnN0b3B5KSxSKHMuc3RhcnR4LHMuc3RvcHkscy5zdG9weCxzLnN0b3B5KSxSKHMuc3RhcnR4LHMuc3RhcnR5LHMuc3RhcnR4LHMuc3RvcHkpLHMuc2VjdGlvbnMhPT12b2lkIDAmJnMuc2VjdGlvbnMuZm9yRWFjaChmdW5jdGlvbihLKXtSKHMuc3RhcnR4LEsueSxzLnN0b3B4LEsueSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzLCAzIil9KTtsZXQgRj16YmUoKTtGLnRleHQ9dSxGLng9cy5zdGFydHgsRi55PXMuc3RhcnR5LEYuZm9udEZhbWlseT1ULEYuZm9udFNpemU9XyxGLmZvbnRXZWlnaHQ9QSxGLmFuY2hvcj0ibWlkZGxlIixGLnZhbGlnbj0ibWlkZGxlIixGLnRzcGFuPSExLEYud2lkdGg9eXx8NTAsRi5oZWlnaHQ9Ynx8MjAsRi50ZXh0TWFyZ2luPXYsRi5jbGFzcz0ibGFiZWxUZXh0IiwkR2UoUCxGKSxGPUhHZSgpLEYudGV4dD1zLnRpdGxlLEYueD1zLnN0YXJ0eCt5LzIrKHMuc3RvcHgtcy5zdGFydHgpLzIsRi55PXMuc3RhcnR5K3ArdixGLmFuY2hvcj0ibWlkZGxlIixGLnZhbGlnbj0ibWlkZGxlIixGLnRleHRNYXJnaW49dixGLmNsYXNzPSJsb29wVGV4dCIsRi5mb250RmFtaWx5PVQsRi5mb250U2l6ZT1fLEYuZm9udFdlaWdodD1BLEYud3JhcD0hMDtsZXQgaj1EdihGLnRleHQpP2F3YWl0IHBKKFAsRixzKTpZRChQLEYpO2lmKHMuc2VjdGlvblRpdGxlcyE9PXZvaWQgMCl7Zm9yKGNvbnN0W0ssZWVdb2YgT2JqZWN0LmVudHJpZXMocy5zZWN0aW9uVGl0bGVzKSlpZihlZS5tZXNzYWdlKXtGLnRleHQ9ZWUubWVzc2FnZSxGLng9cy5zdGFydHgrKHMuc3RvcHgtcy5zdGFydHgpLzIsRi55PXMuc2VjdGlvbnNbS10ueStwK3YsRi5jbGFzcz0ibG9vcFRleHQiLEYuYW5jaG9yPSJtaWRkbGUiLEYudmFsaWduPSJtaWRkbGUiLEYudHNwYW49ITEsRi5mb250RmFtaWx5PVQsRi5mb250U2l6ZT1fLEYuZm9udFdlaWdodD1BLEYud3JhcD1zLndyYXAsRHYoRi50ZXh0KT8ocy5zdGFydHk9cy5zZWN0aW9uc1tLXS55LGF3YWl0IHBKKFAsRixzKSk6WUQoUCxGKTtsZXQgaWU9TWF0aC5yb3VuZChqLm1hcChvZT0+KG9lLl9ncm91cHN8fG9lKVswXVswXS5nZXRCQm94KCkuaGVpZ2h0KS5yZWR1Y2UoKG9lLHBlKT0+b2UrcGUpKTtzLnNlY3Rpb25zW0tdLmhlaWdodCs9aWUtKHArdil9fXJldHVybiBzLmhlaWdodD1NYXRoLnJvdW5kKHMuc3RvcHktcy5zdGFydHkpLFB9LHFHZT1mdW5jdGlvbihpLHMpe1RxZShpLHMpfSx0aW49ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiZGF0YWJhc2UiKS5hdHRyKCJmaWxsLXJ1bGUiLCJldmVub2RkIikuYXR0cigiY2xpcC1ydWxlIiwiZXZlbm9kZCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMTIuMjU4LjAwMWwuMjU2LjAwNC4yNTUuMDA1LjI1My4wMDguMjUxLjAxLjI0OS4wMTIuMjQ3LjAxNS4yNDYuMDE2LjI0Mi4wMTkuMjQxLjAyLjIzOS4wMjMuMjM2LjAyNC4yMzMuMDI3LjIzMS4wMjguMjI5LjAzMS4yMjUuMDMyLjIyMy4wMzQuMjIuMDM2LjIxNy4wMzguMjE0LjA0LjIxMS4wNDEuMjA4LjA0My4yMDUuMDQ1LjIwMS4wNDYuMTk4LjA0OC4xOTQuMDUuMTkxLjA1MS4xODcuMDUzLjE4My4wNTQuMTguMDU2LjE3NS4wNTcuMTcyLjA1OS4xNjguMDYuMTYzLjA2MS4xNi4wNjMuMTU1LjA2NC4xNS4wNjYuMDc0LjAzMy4wNzMuMDMzLjA3MS4wMzQuMDcuMDM0LjA2OS4wMzUuMDY4LjAzNS4wNjcuMDM1LjA2Ni4wMzUuMDY0LjAzNi4wNjQuMDM2LjA2Mi4wMzYuMDYuMDM2LjA2LjAzNy4wNTguMDM3LjA1OC4wMzcuMDU1LjAzOC4wNTUuMDM4LjA1My4wMzguMDUyLjAzOC4wNTEuMDM5LjA1LjAzOS4wNDguMDM5LjA0Ny4wMzkuMDQ1LjA0LjA0NC4wNC4wNDMuMDQuMDQxLjA0LjA0LjA0MS4wMzkuMDQxLjAzNy4wNDEuMDM2LjA0MS4wMzQuMDQxLjAzMy4wNDIuMDMyLjA0Mi4wMy4wNDIuMDI5LjA0Mi4wMjcuMDQyLjAyNi4wNDMuMDI0LjA0My4wMjMuMDQzLjAyMS4wNDMuMDIuMDQzLjAxOC4wNDQuMDE3LjA0My4wMTUuMDQ0LjAxMy4wNDQuMDEyLjA0NC4wMTEuMDQ1LjAwOS4wNDQuMDA3LjA0NS4wMDYuMDQ1LjAwNC4wNDUuMDAyLjA0NS4wMDEuMDQ1djE3bC0uMDAxLjA0NS0uMDAyLjA0NS0uMDA0LjA0NS0uMDA2LjA0NS0uMDA3LjA0NS0uMDA5LjA0NC0uMDExLjA0NS0uMDEyLjA0NC0uMDEzLjA0NC0uMDE1LjA0NC0uMDE3LjA0My0uMDE4LjA0NC0uMDIuMDQzLS4wMjEuMDQzLS4wMjMuMDQzLS4wMjQuMDQzLS4wMjYuMDQzLS4wMjcuMDQyLS4wMjkuMDQyLS4wMy4wNDItLjAzMi4wNDItLjAzMy4wNDItLjAzNC4wNDEtLjAzNi4wNDEtLjAzNy4wNDEtLjAzOS4wNDEtLjA0LjA0MS0uMDQxLjA0LS4wNDMuMDQtLjA0NC4wNC0uMDQ1LjA0LS4wNDcuMDM5LS4wNDguMDM5LS4wNS4wMzktLjA1MS4wMzktLjA1Mi4wMzgtLjA1My4wMzgtLjA1NS4wMzgtLjA1NS4wMzgtLjA1OC4wMzctLjA1OC4wMzctLjA2LjAzNy0uMDYuMDM2LS4wNjIuMDM2LS4wNjQuMDM2LS4wNjQuMDM2LS4wNjYuMDM1LS4wNjcuMDM1LS4wNjguMDM1LS4wNjkuMDM1LS4wNy4wMzQtLjA3MS4wMzQtLjA3My4wMzMtLjA3NC4wMzMtLjE1LjA2Ni0uMTU1LjA2NC0uMTYuMDYzLS4xNjMuMDYxLS4xNjguMDYtLjE3Mi4wNTktLjE3NS4wNTctLjE4LjA1Ni0uMTgzLjA1NC0uMTg3LjA1My0uMTkxLjA1MS0uMTk0LjA1LS4xOTguMDQ4LS4yMDEuMDQ2LS4yMDUuMDQ1LS4yMDguMDQzLS4yMTEuMDQxLS4yMTQuMDQtLjIxNy4wMzgtLjIyLjAzNi0uMjIzLjAzNC0uMjI1LjAzMi0uMjI5LjAzMS0uMjMxLjAyOC0uMjMzLjAyNy0uMjM2LjAyNC0uMjM5LjAyMy0uMjQxLjAyLS4yNDIuMDE5LS4yNDYuMDE2LS4yNDcuMDE1LS4yNDkuMDEyLS4yNTEuMDEtLjI1My4wMDgtLjI1NS4wMDUtLjI1Ni4wMDQtLjI1OC4wMDEtLjI1OC0uMDAxLS4yNTYtLjAwNC0uMjU1LS4wMDUtLjI1My0uMDA4LS4yNTEtLjAxLS4yNDktLjAxMi0uMjQ3LS4wMTUtLjI0NS0uMDE2LS4yNDMtLjAxOS0uMjQxLS4wMi0uMjM4LS4wMjMtLjIzNi0uMDI0LS4yMzQtLjAyNy0uMjMxLS4wMjgtLjIyOC0uMDMxLS4yMjYtLjAzMi0uMjIzLS4wMzQtLjIyLS4wMzYtLjIxNy0uMDM4LS4yMTQtLjA0LS4yMTEtLjA0MS0uMjA4LS4wNDMtLjIwNC0uMDQ1LS4yMDEtLjA0Ni0uMTk4LS4wNDgtLjE5NS0uMDUtLjE5LS4wNTEtLjE4Ny0uMDUzLS4xODQtLjA1NC0uMTc5LS4wNTYtLjE3Ni0uMDU3LS4xNzItLjA1OS0uMTY3LS4wNi0uMTY0LS4wNjEtLjE1OS0uMDYzLS4xNTUtLjA2NC0uMTUxLS4wNjYtLjA3NC0uMDMzLS4wNzItLjAzMy0uMDcyLS4wMzQtLjA3LS4wMzQtLjA2OS0uMDM1LS4wNjgtLjAzNS0uMDY3LS4wMzUtLjA2Ni0uMDM1LS4wNjQtLjAzNi0uMDYzLS4wMzYtLjA2Mi0uMDM2LS4wNjEtLjAzNi0uMDYtLjAzNy0uMDU4LS4wMzctLjA1Ny0uMDM3LS4wNTYtLjAzOC0uMDU1LS4wMzgtLjA1My0uMDM4LS4wNTItLjAzOC0uMDUxLS4wMzktLjA0OS0uMDM5LS4wNDktLjAzOS0uMDQ2LS4wMzktLjA0Ni0uMDQtLjA0NC0uMDQtLjA0My0uMDQtLjA0MS0uMDQtLjA0LS4wNDEtLjAzOS0uMDQxLS4wMzctLjA0MS0uMDM2LS4wNDEtLjAzNC0uMDQxLS4wMzMtLjA0Mi0uMDMyLS4wNDItLjAzLS4wNDItLjAyOS0uMDQyLS4wMjctLjA0Mi0uMDI2LS4wNDMtLjAyNC0uMDQzLS4wMjMtLjA0My0uMDIxLS4wNDMtLjAyLS4wNDMtLjAxOC0uMDQ0LS4wMTctLjA0My0uMDE1LS4wNDQtLjAxMy0uMDQ0LS4wMTItLjA0NC0uMDExLS4wNDUtLjAwOS0uMDQ0LS4wMDctLjA0NS0uMDA2LS4wNDUtLjAwNC0uMDQ1LS4wMDItLjA0NS0uMDAxLS4wNDV2LTE3bC4wMDEtLjA0NS4wMDItLjA0NS4wMDQtLjA0NS4wMDYtLjA0NS4wMDctLjA0NS4wMDktLjA0NC4wMTEtLjA0NS4wMTItLjA0NC4wMTMtLjA0NC4wMTUtLjA0NC4wMTctLjA0My4wMTgtLjA0NC4wMi0uMDQzLjAyMS0uMDQzLjAyMy0uMDQzLjAyNC0uMDQzLjAyNi0uMDQzLjAyNy0uMDQyLjAyOS0uMDQyLjAzLS4wNDIuMDMyLS4wNDIuMDMzLS4wNDIuMDM0LS4wNDEuMDM2LS4wNDEuMDM3LS4wNDEuMDM5LS4wNDEuMDQtLjA0MS4wNDEtLjA0LjA0My0uMDQuMDQ0LS4wNC4wNDYtLjA0LjA0Ni0uMDM5LjA0OS0uMDM5LjA0OS0uMDM5LjA1MS0uMDM5LjA1Mi0uMDM4LjA1My0uMDM4LjA1NS0uMDM4LjA1Ni0uMDM4LjA1Ny0uMDM3LjA1OC0uMDM3LjA2LS4wMzcuMDYxLS4wMzYuMDYyLS4wMzYuMDYzLS4wMzYuMDY0LS4wMzYuMDY2LS4wMzUuMDY3LS4wMzUuMDY4LS4wMzUuMDY5LS4wMzUuMDctLjAzNC4wNzItLjAzNC4wNzItLjAzMy4wNzQtLjAzMy4xNTEtLjA2Ni4xNTUtLjA2NC4xNTktLjA2My4xNjQtLjA2MS4xNjctLjA2LjE3Mi0uMDU5LjE3Ni0uMDU3LjE3OS0uMDU2LjE4NC0uMDU0LjE4Ny0uMDUzLjE5LS4wNTEuMTk1LS4wNS4xOTgtLjA0OC4yMDEtLjA0Ni4yMDQtLjA0NS4yMDgtLjA0My4yMTEtLjA0MS4yMTQtLjA0LjIxNy0uMDM4LjIyLS4wMzYuMjIzLS4wMzQuMjI2LS4wMzIuMjI4LS4wMzEuMjMxLS4wMjguMjM0LS4wMjcuMjM2LS4wMjQuMjM4LS4wMjMuMjQxLS4wMi4yNDMtLjAxOS4yNDUtLjAxNi4yNDctLjAxNS4yNDktLjAxMi4yNTEtLjAxLjI1My0uMDA4LjI1NS0uMDA1LjI1Ni0uMDA0LjI1OC0uMDAxLjI1OC4wMDF6bS05LjI1OCAyMC40OTl2LjAxbC4wMDEuMDIxLjAwMy4wMjEuMDA0LjAyMi4wMDUuMDIxLjAwNi4wMjIuMDA3LjAyMi4wMDkuMDIzLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDIzLjAxNi4wMjQuMDE3LjAyMy4wMTguMDI0LjAxOS4wMjQuMDIxLjAyNC4wMjIuMDI1LjAyMy4wMjQuMDI0LjAyNS4wNTIuMDQ5LjA1Ni4wNS4wNjEuMDUxLjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTEuMDc5LjA1Mi4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTEuMTA1LjA1Mi4xMS4wNTIuMTE0LjA1MS4xMTkuMDUxLjEyMy4wNTEuMTI3LjA1LjEzMS4wNS4xMzUuMDUuMTM5LjA0OC4xNDQuMDQ5LjE0Ny4wNDcuMTUyLjA0Ny4xNTUuMDQ3LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDMuMTcxLjA0My4xNzYuMDQxLjE3OC4wNDEuMTgzLjAzOS4xODcuMDM5LjE5LjAzNy4xOTQuMDM1LjE5Ny4wMzUuMjAyLjAzMy4yMDQuMDMxLjIwOS4wMy4yMTIuMDI5LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjEuMjMuMDIuMjMzLjAxOC4yMzYuMDE2LjI0LjAxNS4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDUuMjU2LjAwNC4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDQuMjU0LS4wMDUuMjUtLjAwOC4yNDctLjAxMS4yNDQtLjAxMi4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyMS4yMjYtLjAyMS4yMjQtLjAyNC4yMi0uMDI2LjIxNi0uMDI3LjIxMi0uMDI4LjIxLS4wMzEuMjA1LS4wMzEuMjAyLS4wMzQuMTk4LS4wMzQuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wNC4xNzktLjA0LjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDYuMTU1LS4wNDYuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDkuMTM5LS4wNDkuMTM2LS4wNS4xMzEtLjA1LjEyNi0uMDUuMTIzLS4wNTEuMTE4LS4wNTIuMTE0LS4wNTEuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1My4wODMtLjA1MS4wNzktLjA1Mi4wNzQtLjA1Mi4wNy0uMDUxLjA2NS0uMDUxLjA2LS4wNTEuMDU2LS4wNS4wNTEtLjA1LjAyMy0uMDI0LjAyMy0uMDI1LjAyMS0uMDI0LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjQuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMy4wMS0uMDIyLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxdi00LjEyN2wtLjA3Ny4wNTUtLjA4LjA1My0uMDgzLjA1NC0uMDg1LjA1My0uMDg3LjA1Mi0uMDkuMDUyLS4wOTMuMDUxLS4wOTUuMDUtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDktLjEwNS4wNDgtLjEwNi4wNDctLjEwOS4wNDctLjExMS4wNDYtLjExNC4wNDUtLjExNS4wNDUtLjExOC4wNDQtLjEyLjA0My0uMTIyLjA0Mi0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wNC0uMTMyLjAzOC0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNy0uMTM5LjAzNS0uMTQyLjAzNS0uMTQzLjAzNC0uMTQ0LjAzMy0uMTQ3LjAzMi0uMTQ4LjAzMS0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOS0uMTU0LjAyNy0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNS0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMi0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDExLS4xNzguMDEtLjE3OS4wMDgtLjE3OS4wMDgtLjE4MS4wMDYtLjE4Mi4wMDUtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDJoLS4zN2wtLjE4NC0uMDAyLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA1LS4xODEtLjAwNi0uMTc5LS4wMDgtLjE3OS0uMDA4LS4xNzgtLjAxLS4xNzYtLjAxMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMi0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNS0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyNy0uMTUzLS4wMjktLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzEtLjE0Ni0uMDMyLS4xNDUtLjAzMy0uMTQzLS4wMzQtLjE0MS0uMDM1LS4xNC0uMDM1LS4xMzctLjAzNy0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOC0uMTMtLjA0LS4xMjgtLjA0LS4xMjYtLjA0MS0uMTI0LS4wNDItLjEyMi0uMDQyLS4xMi0uMDQ0LS4xMTctLjA0My0uMTE2LS4wNDUtLjExMy0uMDQ1LS4xMTItLjA0Ni0uMTA5LS4wNDctLjEwNi0uMDQ3LS4xMDUtLjA0OC0uMTAyLS4wNDktLjEtLjA0OS0uMDk3LS4wNS0uMDk1LS4wNS0uMDkzLS4wNTItLjA5LS4wNTEtLjA4Ny0uMDUyLS4wODUtLjA1My0uMDgzLS4wNTQtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTI3em0wLTUuNjU0di4wMTFsLjAwMS4wMjEuMDAzLjAyMS4wMDQuMDIxLjAwNS4wMjIuMDA2LjAyMi4wMDcuMDIyLjAwOS4wMjIuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjQuMDE2LjAyMy4wMTcuMDI0LjAxOC4wMjQuMDE5LjAyNC4wMjEuMDI0LjAyMi4wMjQuMDIzLjAyNS4wMjQuMDI0LjA1Mi4wNS4wNTYuMDUuMDYxLjA1LjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTIuMDc5LjA1MS4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTIuMTA1LjA1Mi4xMS4wNTEuMTE0LjA1MS4xMTkuMDUyLjEyMy4wNS4xMjcuMDUxLjEzMS4wNS4xMzUuMDQ5LjEzOS4wNDkuMTQ0LjA0OC4xNDcuMDQ4LjE1Mi4wNDcuMTU1LjA0Ni4xNi4wNDUuMTYzLjA0NS4xNjcuMDQ0LjE3MS4wNDIuMTc2LjA0Mi4xNzguMDQuMTgzLjA0LjE4Ny4wMzguMTkuMDM3LjE5NC4wMzYuMTk3LjAzNC4yMDIuMDMzLjIwNC4wMzIuMjA5LjAzLjIxMi4wMjguMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMi4yMy4wMi4yMzMuMDE4LjIzNi4wMTYuMjQuMDE0LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNi4yNTYuMDAzLjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwMy4yNTQtLjAwNi4yNS0uMDA4LjI0Ny0uMDEuMjQ0LS4wMTIuMjQxLS4wMTUuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMi4yMjYtLjAyMi4yMjQtLjAyNC4yMi0uMDI1LjIxNi0uMDI3LjIxMi0uMDI5LjIxLS4wMy4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNS4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjAzOS4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ1LjE1NS0uMDQ3LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ4LjEzOS0uMDUuMTM2LS4wNDkuMTMxLS4wNS4xMjYtLjA1MS4xMjMtLjA1MS4xMTgtLjA1MS4xMTQtLjA1Mi4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUxLjA3LS4wNTIuMDY1LS4wNTEuMDYtLjA1LjA1Ni0uMDUxLjA1MS0uMDQ5LjAyMy0uMDI1LjAyMy0uMDI0LjAyMS0uMDI1LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjMuMDEzLS4wMjQuMDEyLS4wMjIuMDEtLjAyMy4wMS0uMDIzLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIxLjAwNC0uMDIyLjAwMS0uMDIxLjAwMS0uMDIxdi00LjEzOWwtLjA3Ny4wNTQtLjA4LjA1NC0uMDgzLjA1NC0uMDg1LjA1Mi0uMDg3LjA1My0uMDkuMDUxLS4wOTMuMDUxLS4wOTUuMDUxLS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ5LS4xMDUuMDQ4LS4xMDYuMDQ3LS4xMDkuMDQ3LS4xMTEuMDQ2LS4xMTQuMDQ1LS4xMTUuMDQ0LS4xMTguMDQ0LS4xMi4wNDQtLjEyMi4wNDItLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDM5LS4xMzIuMDM5LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM2LS4xMzkuMDM2LS4xNDIuMDM1LS4xNDMuMDMzLS4xNDQuMDMzLS4xNDcuMDMzLS4xNDguMDMxLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI4LS4xNTQuMDI4LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI1LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIyLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMTEtLjE3OC4wMDktLjE3OS4wMDktLjE3OS4wMDctLjE4MS4wMDctLjE4Mi4wMDUtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDJoLS4zN2wtLjE4NC0uMDAyLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA1LS4xODEtLjAwNy0uMTc5LS4wMDctLjE3OS0uMDA5LS4xNzgtLjAwOS0uMTc2LS4wMTEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjItLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjUtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjgtLjE1My0uMDI4LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMxLS4xNDYtLjAzMy0uMTQ1LS4wMzMtLjE0My0uMDMzLS4xNDEtLjAzNS0uMTQtLjAzNi0uMTM3LS4wMzYtLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzktLjEzLS4wMzktLjEyOC0uMDQtLjEyNi0uMDQxLS4xMjQtLjA0Mi0uMTIyLS4wNDMtLjEyLS4wNDMtLjExNy0uMDQ0LS4xMTYtLjA0NC0uMTEzLS4wNDYtLjExMi0uMDQ2LS4xMDktLjA0Ni0uMTA2LS4wNDctLjEwNS0uMDQ4LS4xMDItLjA0OS0uMS0uMDQ5LS4wOTctLjA1LS4wOTUtLjA1MS0uMDkzLS4wNTEtLjA5LS4wNTEtLjA4Ny0uMDUzLS4wODUtLjA1Mi0uMDgzLS4wNTQtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTM5em0wLTUuNjY2di4wMTFsLjAwMS4wMi4wMDMuMDIyLjAwNC4wMjEuMDA1LjAyMi4wMDYuMDIxLjAwNy4wMjIuMDA5LjAyMy4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyMy4wMTYuMDI0LjAxNy4wMjQuMDE4LjAyMy4wMTkuMDI0LjAyMS4wMjUuMDIyLjAyNC4wMjMuMDI0LjAyNC4wMjUuMDUyLjA1LjA1Ni4wNS4wNjEuMDUuMDY2LjA1MS4wNy4wNTEuMDc1LjA1Mi4wNzkuMDUxLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1Mi4xMDUuMDUxLjExLjA1Mi4xMTQuMDUxLjExOS4wNTEuMTIzLjA1MS4xMjcuMDUuMTMxLjA1LjEzNS4wNS4xMzkuMDQ5LjE0NC4wNDguMTQ3LjA0OC4xNTIuMDQ3LjE1NS4wNDYuMTYuMDQ1LjE2My4wNDUuMTY3LjA0My4xNzEuMDQzLjE3Ni4wNDIuMTc4LjA0LjE4My4wNC4xODcuMDM4LjE5LjAzNy4xOTQuMDM2LjE5Ny4wMzQuMjAyLjAzMy4yMDQuMDMyLjIwOS4wMy4yMTIuMDI4LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjEuMjMuMDIuMjMzLjAxOC4yMzYuMDE3LjI0LjAxNC4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDYuMjU2LjAwMy4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDMuMjU0LS4wMDYuMjUtLjAwOC4yNDctLjAxLjI0NC0uMDEzLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIuMjI2LS4wMjIuMjI0LS4wMjQuMjItLjAyNS4yMTYtLjAyNy4yMTItLjAyOS4yMS0uMDMuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzUuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wMzkuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0NS4xNTUtLjA0Ny4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OS4xMzktLjA0OS4xMzYtLjA0OS4xMzEtLjA1MS4xMjYtLjA1LjEyMy0uMDUxLjExOC0uMDUyLjExNC0uMDUxLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTIuMDctLjA1MS4wNjUtLjA1MS4wNi0uMDUxLjA1Ni0uMDUuMDUxLS4wNDkuMDIzLS4wMjUuMDIzLS4wMjUuMDIxLS4wMjQuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyNC4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIyLjAxLS4wMjMuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTUzbC0uMDc3LjA1NC0uMDguMDU0LS4wODMuMDUzLS4wODUuMDUzLS4wODcuMDUzLS4wOS4wNTEtLjA5My4wNTEtLjA5NS4wNTEtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDgtLjEwNS4wNDgtLjEwNi4wNDgtLjEwOS4wNDYtLjExMS4wNDYtLjExNC4wNDYtLjExNS4wNDQtLjExOC4wNDQtLjEyLjA0My0uMTIyLjA0My0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wMzktLjEzMi4wMzktLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzYtLjEzOS4wMzYtLjE0Mi4wMzQtLjE0My4wMzQtLjE0NC4wMzMtLjE0Ny4wMzItLjE0OC4wMzItLjE1LjAzLS4xNTEuMDMtLjE1My4wMjgtLjE1NC4wMjgtLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjQtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjMtLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxLS4xNzguMDEtLjE3OS4wMDktLjE3OS4wMDctLjE4MS4wMDYtLjE4Mi4wMDYtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDEtLjE4NS4wMDEtLjE4NS0uMDAxLS4xODQtLjAwMS0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNi0uMTgxLS4wMDYtLjE3OS0uMDA3LS4xNzktLjAwOS0uMTc4LS4wMS0uMTc2LS4wMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMy0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNC0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyOC0uMTUzLS4wMjgtLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzItLjE0Ni0uMDMyLS4xNDUtLjAzMy0uMTQzLS4wMzQtLjE0MS0uMDM0LS4xNC0uMDM2LS4xMzctLjAzNi0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOS0uMTMtLjAzOS0uMTI4LS4wNDEtLjEyNi0uMDQxLS4xMjQtLjA0MS0uMTIyLS4wNDMtLjEyLS4wNDMtLjExNy0uMDQ0LS4xMTYtLjA0NC0uMTEzLS4wNDYtLjExMi0uMDQ2LS4xMDktLjA0Ni0uMTA2LS4wNDgtLjEwNS0uMDQ4LS4xMDItLjA0OC0uMS0uMDUtLjA5Ny0uMDQ5LS4wOTUtLjA1MS0uMDkzLS4wNTEtLjA5LS4wNTItLjA4Ny0uMDUyLS4wODUtLjA1My0uMDgzLS4wNTMtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTUzem04Ljc0LTguMTc5bC0uMjU3LjAwNC0uMjU0LjAwNS0uMjUuMDA4LS4yNDcuMDExLS4yNDQuMDEyLS4yNDEuMDE0LS4yMzcuMDE2LS4yMzMuMDE4LS4yMzEuMDIxLS4yMjYuMDIyLS4yMjQuMDIzLS4yMi4wMjYtLjIxNi4wMjctLjIxMi4wMjgtLjIxLjAzMS0uMjA1LjAzMi0uMjAyLjAzMy0uMTk4LjAzNC0uMTk0LjAzNi0uMTkxLjAzOC0uMTg3LjAzOC0uMTgzLjA0LS4xNzkuMDQxLS4xNzUuMDQyLS4xNzIuMDQzLS4xNjguMDQzLS4xNjMuMDQ1LS4xNi4wNDYtLjE1NS4wNDYtLjE1Mi4wNDgtLjE0OC4wNDgtLjE0My4wNDgtLjEzOS4wNDktLjEzNi4wNS0uMTMxLjA1LS4xMjYuMDUxLS4xMjMuMDUxLS4xMTguMDUxLS4xMTQuMDUyLS4xMS4wNTItLjEwNi4wNTItLjEwMS4wNTItLjA5Ni4wNTItLjA5Mi4wNTItLjA4OC4wNTItLjA4My4wNTItLjA3OS4wNTItLjA3NC4wNTEtLjA3LjA1Mi0uMDY1LjA1MS0uMDYuMDUtLjA1Ni4wNS0uMDUxLjA1LS4wMjMuMDI1LS4wMjMuMDI0LS4wMjEuMDI0LS4wMi4wMjUtLjAxOS4wMjQtLjAxOC4wMjQtLjAxNy4wMjMtLjAxNS4wMjQtLjAxNC4wMjMtLjAxMy4wMjMtLjAxMi4wMjMtLjAxLjAyMy0uMDEuMDIyLS4wMDguMDIyLS4wMDYuMDIzLS4wMDYuMDIxLS4wMDQuMDIyLS4wMDQuMDIxLS4wMDEuMDIxLS4wMDEuMDIxLjAwMS4wMjEuMDAxLjAyMS4wMDQuMDIxLjAwNC4wMjIuMDA2LjAyMS4wMDYuMDIzLjAwOC4wMjIuMDEuMDIyLjAxLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE0LjAyMy4wMTUuMDI0LjAxNy4wMjMuMDE4LjAyNC4wMTkuMDI0LjAyLjAyNS4wMjEuMDI0LjAyMy4wMjQuMDIzLjAyNS4wNTEuMDUuMDU2LjA1LjA2LjA1LjA2NS4wNTEuMDcuMDUyLjA3NC4wNTEuMDc5LjA1Mi4wODMuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTYuMDUyLjEwMS4wNTIuMTA2LjA1Mi4xMS4wNTIuMTE0LjA1Mi4xMTguMDUxLjEyMy4wNTEuMTI2LjA1MS4xMzEuMDUuMTM2LjA1LjEzOS4wNDkuMTQzLjA0OC4xNDguMDQ4LjE1Mi4wNDguMTU1LjA0Ni4xNi4wNDYuMTYzLjA0NS4xNjguMDQzLjE3Mi4wNDMuMTc1LjA0Mi4xNzkuMDQxLjE4My4wNC4xODcuMDM4LjE5MS4wMzguMTk0LjAzNi4xOTguMDM0LjIwMi4wMzMuMjA1LjAzMi4yMS4wMzEuMjEyLjAyOC4yMTYuMDI3LjIyLjAyNi4yMjQuMDIzLjIyNi4wMjIuMjMxLjAyMS4yMzMuMDE4LjIzNy4wMTYuMjQxLjAxNC4yNDQuMDEyLjI0Ny4wMTEuMjUuMDA4LjI1NC4wMDUuMjU3LjAwNC4yNi4wMDEuMjYtLjAwMS4yNTctLjAwNC4yNTQtLjAwNS4yNS0uMDA4LjI0Ny0uMDExLjI0NC0uMDEyLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIxLjIyNi0uMDIyLjIyNC0uMDIzLjIyLS4wMjYuMjE2LS4wMjcuMjEyLS4wMjguMjEtLjAzMS4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNC4xOTQtLjAzNi4xOTEtLjAzOC4xODctLjAzOC4xODMtLjA0LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQzLjE2My0uMDQ1LjE2LS4wNDYuMTU1LS4wNDYuMTUyLS4wNDguMTQ4LS4wNDguMTQzLS4wNDguMTM5LS4wNDkuMTM2LS4wNS4xMzEtLjA1LjEyNi0uMDUxLjEyMy0uMDUxLjExOC0uMDUxLjExNC0uMDUyLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTEuMDctLjA1Mi4wNjUtLjA1MS4wNi0uMDUuMDU2LS4wNS4wNTEtLjA1LjAyMy0uMDI1LjAyMy0uMDI0LjAyMS0uMDI0LjAyLS4wMjUuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjMuMDE1LS4wMjQuMDE0LS4wMjMuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMy4wMS0uMDIyLjAwOC0uMDIyLjAwNi0uMDIzLjAwNi0uMDIxLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxLS4wMDEtLjAyMS0uMDAxLS4wMjEtLjAwNC0uMDIxLS4wMDQtLjAyMi0uMDA2LS4wMjEtLjAwNi0uMDIzLS4wMDgtLjAyMi0uMDEtLjAyMi0uMDEtLjAyMy0uMDEyLS4wMjMtLjAxMy0uMDIzLS4wMTQtLjAyMy0uMDE1LS4wMjQtLjAxNy0uMDIzLS4wMTgtLjAyNC0uMDE5LS4wMjQtLjAyLS4wMjUtLjAyMS0uMDI0LS4wMjMtLjAyNC0uMDIzLS4wMjUtLjA1MS0uMDUtLjA1Ni0uMDUtLjA2LS4wNS0uMDY1LS4wNTEtLjA3LS4wNTItLjA3NC0uMDUxLS4wNzktLjA1Mi0uMDgzLS4wNTItLjA4OC0uMDUyLS4wOTItLjA1Mi0uMDk2LS4wNTItLjEwMS0uMDUyLS4xMDYtLjA1Mi0uMTEtLjA1Mi0uMTE0LS4wNTItLjExOC0uMDUxLS4xMjMtLjA1MS0uMTI2LS4wNTEtLjEzMS0uMDUtLjEzNi0uMDUtLjEzOS0uMDQ5LS4xNDMtLjA0OC0uMTQ4LS4wNDgtLjE1Mi0uMDQ4LS4xNTUtLjA0Ni0uMTYtLjA0Ni0uMTYzLS4wNDUtLjE2OC0uMDQzLS4xNzItLjA0My0uMTc1LS4wNDItLjE3OS0uMDQxLS4xODMtLjA0LS4xODctLjAzOC0uMTkxLS4wMzgtLjE5NC0uMDM2LS4xOTgtLjAzNC0uMjAyLS4wMzMtLjIwNS0uMDMyLS4yMS0uMDMxLS4yMTItLjAyOC0uMjE2LS4wMjctLjIyLS4wMjYtLjIyNC0uMDIzLS4yMjYtLjAyMi0uMjMxLS4wMjEtLjIzMy0uMDE4LS4yMzctLjAxNi0uMjQxLS4wMTQtLjI0NC0uMDEyLS4yNDctLjAxMS0uMjUtLjAwOC0uMjU0LS4wMDUtLjI1Ny0uMDA0LS4yNi0uMDAxLS4yNi4wMDF6Iil9LG5pbj1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJjb21wdXRlciIpLmF0dHIoIndpZHRoIiwiMjQiKS5hdHRyKCJoZWlnaHQiLCIyNCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMiAydjEzaDIwdi0xM2gtMjB6bTE4IDExaC0xNnYtOWgxNnY5em0tMTAuMjI4IDZsLjQ2Ni0xaDMuNTI0bC40NjcgMWgtNC40NTd6bTE0LjIyOCAzaC0yNGwyLTZoMi4xMDRsLTEuMzMgNGgxOC40NWwtMS4yOTctNGgyLjA3M2wyIDZ6bS01LTEwaC0xNHYtN2gxNHY3eiIpfSxyaW49ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiY2xvY2siKS5hdHRyKCJ3aWR0aCIsIjI0IikuYXR0cigiaGVpZ2h0IiwiMjQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTEyIDJjNS41MTQgMCAxMCA0LjQ4NiAxMCAxMHMtNC40ODYgMTAtMTAgMTAtMTAtNC40ODYtMTAtMTAgNC40ODYtMTAgMTAtMTB6bTAtMmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnM1LjM3MyAxMiAxMiAxMiAxMi01LjM3MyAxMi0xMi01LjM3My0xMi0xMi0xMnptNS44NDggMTIuNDU5Yy4yMDIuMDM4LjIwMi4zMzMuMDAxLjM3Mi0xLjkwNy4zNjEtNi4wNDUgMS4xMTEtNi41NDcgMS4xMTEtLjcxOSAwLTEuMzAxLS41ODItMS4zMDEtMS4zMDEgMC0uNTEyLjc3LTUuNDQ3IDEuMTI1LTcuNDQ1LjAzNC0uMTkyLjMxMi0uMTgxLjM0My4wMTRsLjk4NSA2LjIzOCA1LjM5NCAxLjAxMXoiKX0saWluPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFycm93aGVhZCIpLmF0dHIoInJlZlgiLDcuOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKX0sc2luPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImZpbGxlZC1oZWFkIikuYXR0cigicmVmWCIsMTUuNSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX0sYWluPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsInNlcXVlbmNlbnVtYmVyIikuYXR0cigicmVmWCIsMTUpLmF0dHIoInJlZlkiLDE1KS5hdHRyKCJtYXJrZXJXaWR0aCIsNjApLmF0dHIoIm1hcmtlckhlaWdodCIsNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwxNSkuYXR0cigiY3kiLDE1KS5hdHRyKCJyIiw2KX0sb2luPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImNyb3NzaGVhZCIpLmF0dHIoIm1hcmtlcldpZHRoIiwxNSkuYXR0cigibWFya2VySGVpZ2h0Iiw4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXR0cigicmVmWCIsNCkuYXR0cigicmVmWSIsNC41KS5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAwMDAiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjAsIDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHQiKS5hdHRyKCJkIiwiTSAxLDIgTCA2LDcgTSA2LDIgTCAxLDciKX0sSEdlPWZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsZmlsbDp2b2lkIDAsYW5jaG9yOnZvaWQgMCxzdHlsZToiIzY2NiIsd2lkdGg6dm9pZCAwLGhlaWdodDp2b2lkIDAsdGV4dE1hcmdpbjowLHJ4OjAscnk6MCx0c3BhbjohMCx2YWxpZ246dm9pZCAwfX0sY2luPWZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsZmlsbDoiI0VERjJBRSIsc3Ryb2tlOiIjNjY2Iix3aWR0aDoxMDAsYW5jaG9yOiJzdGFydCIsaGVpZ2h0OjEwMCxyeDowLHJ5OjB9fSxUdmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKHYsYix5LFQsXyxBLFApe2NvbnN0IFI9Yi5hcHBlbmQoInRleHQiKS5hdHRyKCJ4Iix5K18vMikuYXR0cigieSIsVCtBLzIrNSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCh2KTtwKFIsUCl9ZnVuY3Rpb24gcyh2LGIseSxULF8sQSxQLFIpe2NvbnN0e2FjdG9yRm9udFNpemU6RixhY3RvckZvbnRGYW1pbHk6aixhY3RvckZvbnRXZWlnaHQ6S309UixbZWUsaWVdPU5DKEYpLG9lPXYuc3BsaXQoY2kubGluZUJyZWFrUmVnZXgpO2ZvcihsZXQgcGU9MDtwZTxvZS5sZW5ndGg7cGUrKyl7Y29uc3QgYmU9cGUqZWUtZWUqKG9lLmxlbmd0aC0xKS8yLGFlPWIuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIseStfLzIpLmF0dHIoInkiLFQpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJmb250LXNpemUiLGllKS5zdHlsZSgiZm9udC13ZWlnaHQiLEspLnN0eWxlKCJmb250LWZhbWlseSIsaik7YWUuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLHkrXy8yKS5hdHRyKCJkeSIsYmUpLnRleHQob2VbcGVdKSxhZS5hdHRyKCJ5IixUK0EvMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLHAoYWUsUCl9fWZ1bmN0aW9uIHUodixiLHksVCxfLEEsUCxSKXtjb25zdCBGPWIuYXBwZW5kKCJzd2l0Y2giKSxLPUYuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIseSkuYXR0cigieSIsVCkuYXR0cigid2lkdGgiLF8pLmF0dHIoImhlaWdodCIsQSkuYXBwZW5kKCJ4aHRtbDpkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlIikuc3R5bGUoImhlaWdodCIsIjEwMCUiKS5zdHlsZSgid2lkdGgiLCIxMDAlIik7Sy5hcHBlbmQoImRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikuc3R5bGUoInZlcnRpY2FsLWFsaWduIiwibWlkZGxlIikudGV4dCh2KSxzKHYsRix5LFQsXyxBLFAsUikscChLLFApfWFzeW5jIGZ1bmN0aW9uIGQodixiLHksVCxfLEEsUCxSKXtjb25zdCBGPWF3YWl0IEhGKHYsVmgoKSksaj1iLmFwcGVuZCgic3dpdGNoIiksZWU9ai5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4Iix5K18vMi1GLndpZHRoLzIpLmF0dHIoInkiLFQrQS8yLUYuaGVpZ2h0LzIpLmF0dHIoIndpZHRoIixGLndpZHRoKS5hdHRyKCJoZWlnaHQiLEYuaGVpZ2h0KS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO2VlLmFwcGVuZCgiZGl2Iikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS5odG1sKGF3YWl0IENDKHYsVmgoKSkpLHModixqLHksVCxfLEEsUCxSKSxwKGVlLFApfWZ1bmN0aW9uIHAodixiKXtmb3IoY29uc3QgeSBpbiBiKWIuaGFzT3duUHJvcGVydHkoeSkmJnYuYXR0cih5LGJbeV0pfXJldHVybiBmdW5jdGlvbih2LGI9ITEpe3JldHVybiBiP2Q6di50ZXh0UGxhY2VtZW50PT09ImZvIj91OnYudGV4dFBsYWNlbWVudD09PSJvbGQiP2k6c319KCksdWluPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaShwLHYsYix5LFQsXyxBKXtjb25zdCBQPXYuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsYikuYXR0cigieSIseSkuc3R5bGUoInRleHQtYW5jaG9yIiwic3RhcnQiKS50ZXh0KHApO2QoUCxBKX1mdW5jdGlvbiBzKHAsdixiLHksVCxfLEEsUCl7Y29uc3R7YWN0b3JGb250U2l6ZTpSLGFjdG9yRm9udEZhbWlseTpGLGFjdG9yRm9udFdlaWdodDpqfT1QLEs9cC5zcGxpdChjaS5saW5lQnJlYWtSZWdleCk7Zm9yKGxldCBlZT0wO2VlPEsubGVuZ3RoO2VlKyspe2NvbnN0IGllPWVlKlItUiooSy5sZW5ndGgtMSkvMixvZT12LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIpLmF0dHIoInkiLHkpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsInN0YXJ0Iikuc3R5bGUoImZvbnQtc2l6ZSIsUikuc3R5bGUoImZvbnQtd2VpZ2h0IixqKS5zdHlsZSgiZm9udC1mYW1pbHkiLEYpO29lLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixiKS5hdHRyKCJkeSIsaWUpLnRleHQoS1tlZV0pLG9lLmF0dHIoInkiLHkrXy8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImNlbnRyYWwiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIiksZChvZSxBKX19ZnVuY3Rpb24gdShwLHYsYix5LFQsXyxBLFApe2NvbnN0IFI9di5hcHBlbmQoInN3aXRjaCIpLGo9Ui5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixiKS5hdHRyKCJ5Iix5KS5hdHRyKCJ3aWR0aCIsVCkuYXR0cigiaGVpZ2h0IixfKS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTtqLmFwcGVuZCgiZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHApLHMocCxSLGIseSxULF8sQSxQKSxkKGosQSl9ZnVuY3Rpb24gZChwLHYpe2Zvcihjb25zdCBiIGluIHYpdi5oYXNPd25Qcm9wZXJ0eShiKSYmcC5hdHRyKGIsdltiXSl9cmV0dXJuIGZ1bmN0aW9uKHApe3JldHVybiBwLnRleHRQbGFjZW1lbnQ9PT0iZm8iP3U6cC50ZXh0UGxhY2VtZW50PT09Im9sZCI/aTpzfX0oKSxaZj17ZHJhd1JlY3Q6RXZlLGRyYXdUZXh0OllELGRyYXdMYWJlbDokR2UsZHJhd0FjdG9yOlhybixkcmF3Qm94OlFybixkcmF3UG9wdXA6R3JuLGFuY2hvckVsZW1lbnQ6SnJuLGRyYXdBY3RpdmF0aW9uOlpybixkcmF3TG9vcDplaW4sZHJhd0JhY2tncm91bmRSZWN0OnFHZSxpbnNlcnRBcnJvd0hlYWQ6aWluLGluc2VydEFycm93RmlsbGVkSGVhZDpzaW4saW5zZXJ0U2VxdWVuY2VOdW1iZXI6YWluLGluc2VydEFycm93Q3Jvc3NIZWFkOm9pbixpbnNlcnREYXRhYmFzZUljb246dGluLGluc2VydENvbXB1dGVySWNvbjpuaW4saW5zZXJ0Q2xvY2tJY29uOnJpbixnZXRUZXh0T2JqOkhHZSxnZXROb3RlUmVjdDpjaW4sZml4TGlmZUxpbmVIZWlnaHRzOnpHZSxzYW5pdGl6ZVVybDpwOS5zYW5pdGl6ZVVybH07bGV0IEVuPXt9O2NvbnN0IG5pPXtkYXRhOntzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdmVydGljYWxQb3M6MCxzZXF1ZW5jZUl0ZW1zOltdLGFjdGl2YXRpb25zOltdLG1vZGVsczp7Z2V0SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4LmFwcGx5KG51bGwsdGhpcy5hY3RvcnMubGVuZ3RoPT09MD9bMF06dGhpcy5hY3RvcnMubWFwKGk9PmkuaGVpZ2h0fHwwKSkrKHRoaXMubG9vcHMubGVuZ3RoPT09MD8wOnRoaXMubG9vcHMubWFwKGk9PmkuaGVpZ2h0fHwwKS5yZWR1Y2UoKGkscyk9PmkrcykpKyh0aGlzLm1lc3NhZ2VzLmxlbmd0aD09PTA/MDp0aGlzLm1lc3NhZ2VzLm1hcChpPT5pLmhlaWdodHx8MCkucmVkdWNlKChpLHMpPT5pK3MpKSsodGhpcy5ub3Rlcy5sZW5ndGg9PT0wPzA6dGhpcy5ub3Rlcy5tYXAoaT0+aS5oZWlnaHR8fDApLnJlZHVjZSgoaSxzKT0+aStzKSl9LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5hY3RvcnM9W10sdGhpcy5ib3hlcz1bXSx0aGlzLmxvb3BzPVtdLHRoaXMubWVzc2FnZXM9W10sdGhpcy5ub3Rlcz1bXX0sYWRkQm94OmZ1bmN0aW9uKGkpe3RoaXMuYm94ZXMucHVzaChpKX0sYWRkQWN0b3I6ZnVuY3Rpb24oaSl7dGhpcy5hY3RvcnMucHVzaChpKX0sYWRkTG9vcDpmdW5jdGlvbihpKXt0aGlzLmxvb3BzLnB1c2goaSl9LGFkZE1lc3NhZ2U6ZnVuY3Rpb24oaSl7dGhpcy5tZXNzYWdlcy5wdXNoKGkpfSxhZGROb3RlOmZ1bmN0aW9uKGkpe3RoaXMubm90ZXMucHVzaChpKX0sbGFzdEFjdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0b3JzW3RoaXMuYWN0b3JzLmxlbmd0aC0xXX0sbGFzdExvb3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb29wc1t0aGlzLmxvb3BzLmxlbmd0aC0xXX0sbGFzdE1lc3NhZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlc1t0aGlzLm1lc3NhZ2VzLmxlbmd0aC0xXX0sbGFzdE5vdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3Rlc1t0aGlzLm5vdGVzLmxlbmd0aC0xXX0sYWN0b3JzOltdLGJveGVzOltdLGxvb3BzOltdLG1lc3NhZ2VzOltdLG5vdGVzOltdfSxpbml0OmZ1bmN0aW9uKCl7dGhpcy5zZXF1ZW5jZUl0ZW1zPVtdLHRoaXMuYWN0aXZhdGlvbnM9W10sdGhpcy5tb2RlbHMuY2xlYXIoKSx0aGlzLmRhdGE9e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwfSx0aGlzLnZlcnRpY2FsUG9zPTAsVUdlKHF0KCkpfSx1cGRhdGVWYWw6ZnVuY3Rpb24oaSxzLHUsZCl7aVtzXT09PXZvaWQgMD9pW3NdPXU6aVtzXT1kKHUsaVtzXSl9LHVwZGF0ZUJvdW5kczpmdW5jdGlvbihpLHMsdSxkKXtjb25zdCBwPXRoaXM7bGV0IHY9MDtmdW5jdGlvbiBiKHkpe3JldHVybiBmdW5jdGlvbihfKXt2Kys7Y29uc3QgQT1wLnNlcXVlbmNlSXRlbXMubGVuZ3RoLXYrMTtwLnVwZGF0ZVZhbChfLCJzdGFydHkiLHMtQSpFbi5ib3hNYXJnaW4sTWF0aC5taW4pLHAudXBkYXRlVmFsKF8sInN0b3B5IixkK0EqRW4uYm94TWFyZ2luLE1hdGgubWF4KSxwLnVwZGF0ZVZhbChuaS5kYXRhLCJzdGFydHgiLGktQSpFbi5ib3hNYXJnaW4sTWF0aC5taW4pLHAudXBkYXRlVmFsKG5pLmRhdGEsInN0b3B4Iix1K0EqRW4uYm94TWFyZ2luLE1hdGgubWF4KSx5IT09ImFjdGl2YXRpb24iJiYocC51cGRhdGVWYWwoXywic3RhcnR4IixpLUEqRW4uYm94TWFyZ2luLE1hdGgubWluKSxwLnVwZGF0ZVZhbChfLCJzdG9weCIsdStBKkVuLmJveE1hcmdpbixNYXRoLm1heCkscC51cGRhdGVWYWwobmkuZGF0YSwic3RhcnR5IixzLUEqRW4uYm94TWFyZ2luLE1hdGgubWluKSxwLnVwZGF0ZVZhbChuaS5kYXRhLCJzdG9weSIsZCtBKkVuLmJveE1hcmdpbixNYXRoLm1heCkpfX10aGlzLnNlcXVlbmNlSXRlbXMuZm9yRWFjaChiKCkpLHRoaXMuYWN0aXZhdGlvbnMuZm9yRWFjaChiKCJhY3RpdmF0aW9uIikpfSxpbnNlcnQ6ZnVuY3Rpb24oaSxzLHUsZCl7Y29uc3QgcD1jaS5nZXRNaW4oaSx1KSx2PWNpLmdldE1heChpLHUpLGI9Y2kuZ2V0TWluKHMsZCkseT1jaS5nZXRNYXgocyxkKTt0aGlzLnVwZGF0ZVZhbChuaS5kYXRhLCJzdGFydHgiLHAsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKG5pLmRhdGEsInN0YXJ0eSIsYixNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwobmkuZGF0YSwic3RvcHgiLHYsTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKG5pLmRhdGEsInN0b3B5Iix5LE1hdGgubWF4KSx0aGlzLnVwZGF0ZUJvdW5kcyhwLGIsdix5KX0sbmV3QWN0aXZhdGlvbjpmdW5jdGlvbihpLHMsdSl7Y29uc3QgZD11W2kuZnJvbS5hY3Rvcl0scD1iSihpLmZyb20uYWN0b3IpLmxlbmd0aHx8MCx2PWQueCtkLndpZHRoLzIrKHAtMSkqRW4uYWN0aXZhdGlvbldpZHRoLzI7dGhpcy5hY3RpdmF0aW9ucy5wdXNoKHtzdGFydHg6dixzdGFydHk6dGhpcy52ZXJ0aWNhbFBvcysyLHN0b3B4OnYrRW4uYWN0aXZhdGlvbldpZHRoLHN0b3B5OnZvaWQgMCxhY3RvcjppLmZyb20uYWN0b3IsYW5jaG9yZWQ6WmYuYW5jaG9yRWxlbWVudChzKX0pfSxlbmRBY3RpdmF0aW9uOmZ1bmN0aW9uKGkpe2NvbnN0IHM9dGhpcy5hY3RpdmF0aW9ucy5tYXAoZnVuY3Rpb24odSl7cmV0dXJuIHUuYWN0b3J9KS5sYXN0SW5kZXhPZihpLmZyb20uYWN0b3IpO3JldHVybiB0aGlzLmFjdGl2YXRpb25zLnNwbGljZShzLDEpWzBdfSxjcmVhdGVMb29wOmZ1bmN0aW9uKGk9e21lc3NhZ2U6dm9pZCAwLHdyYXA6ITEsd2lkdGg6dm9pZCAwfSxzKXtyZXR1cm57c3RhcnR4OnZvaWQgMCxzdGFydHk6dGhpcy52ZXJ0aWNhbFBvcyxzdG9weDp2b2lkIDAsc3RvcHk6dm9pZCAwLHRpdGxlOmkubWVzc2FnZSx3cmFwOmkud3JhcCx3aWR0aDppLndpZHRoLGhlaWdodDowLGZpbGw6c319LG5ld0xvb3A6ZnVuY3Rpb24oaT17bWVzc2FnZTp2b2lkIDAsd3JhcDohMSx3aWR0aDp2b2lkIDB9LHMpe3RoaXMuc2VxdWVuY2VJdGVtcy5wdXNoKHRoaXMuY3JlYXRlTG9vcChpLHMpKX0sZW5kTG9vcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlcXVlbmNlSXRlbXMucG9wKCl9LGlzTG9vcE92ZXJsYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXF1ZW5jZUl0ZW1zLmxlbmd0aD90aGlzLnNlcXVlbmNlSXRlbXNbdGhpcy5zZXF1ZW5jZUl0ZW1zLmxlbmd0aC0xXS5vdmVybGFwOiExfSxhZGRTZWN0aW9uVG9Mb29wOmZ1bmN0aW9uKGkpe2NvbnN0IHM9dGhpcy5zZXF1ZW5jZUl0ZW1zLnBvcCgpO3Muc2VjdGlvbnM9cy5zZWN0aW9uc3x8W10scy5zZWN0aW9uVGl0bGVzPXMuc2VjdGlvblRpdGxlc3x8W10scy5zZWN0aW9ucy5wdXNoKHt5Om5pLmdldFZlcnRpY2FsUG9zKCksaGVpZ2h0OjB9KSxzLnNlY3Rpb25UaXRsZXMucHVzaChpKSx0aGlzLnNlcXVlbmNlSXRlbXMucHVzaChzKX0sc2F2ZVZlcnRpY2FsUG9zOmZ1bmN0aW9uKCl7dGhpcy5pc0xvb3BPdmVybGFwKCkmJih0aGlzLnNhdmVkVmVydGljYWxQb3M9dGhpcy52ZXJ0aWNhbFBvcyl9LHJlc2V0VmVydGljYWxQb3M6ZnVuY3Rpb24oKXt0aGlzLmlzTG9vcE92ZXJsYXAoKSYmKHRoaXMudmVydGljYWxQb3M9dGhpcy5zYXZlZFZlcnRpY2FsUG9zKX0sYnVtcFZlcnRpY2FsUG9zOmZ1bmN0aW9uKGkpe3RoaXMudmVydGljYWxQb3M9dGhpcy52ZXJ0aWNhbFBvcytpLHRoaXMuZGF0YS5zdG9weT1jaS5nZXRNYXgodGhpcy5kYXRhLnN0b3B5LHRoaXMudmVydGljYWxQb3MpfSxnZXRWZXJ0aWNhbFBvczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZlcnRpY2FsUG9zfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXtyZXR1cm57Ym91bmRzOnRoaXMuZGF0YSxtb2RlbHM6dGhpcy5tb2RlbHN9fX0sbGluPWFzeW5jIGZ1bmN0aW9uKGkscyl7bmkuYnVtcFZlcnRpY2FsUG9zKEVuLmJveE1hcmdpbikscy5oZWlnaHQ9RW4uYm94TWFyZ2luLHMuc3RhcnR5PW5pLmdldFZlcnRpY2FsUG9zKCk7Y29uc3QgdT1xQygpO3UueD1zLnN0YXJ0eCx1Lnk9cy5zdGFydHksdS53aWR0aD1zLndpZHRofHxFbi53aWR0aCx1LmNsYXNzPSJub3RlIjtjb25zdCBkPWkuYXBwZW5kKCJnIikscD1aZi5kcmF3UmVjdChkLHUpLHY9emJlKCk7di54PXMuc3RhcnR4LHYueT1zLnN0YXJ0eSx2LndpZHRoPXUud2lkdGgsdi5keT0iMWVtIix2LnRleHQ9cy5tZXNzYWdlLHYuY2xhc3M9Im5vdGVUZXh0Iix2LmZvbnRGYW1pbHk9RW4ubm90ZUZvbnRGYW1pbHksdi5mb250U2l6ZT1Fbi5ub3RlRm9udFNpemUsdi5mb250V2VpZ2h0PUVuLm5vdGVGb250V2VpZ2h0LHYuYW5jaG9yPUVuLm5vdGVBbGlnbix2LnRleHRNYXJnaW49RW4ubm90ZU1hcmdpbix2LnZhbGlnbj0iY2VudGVyIjtjb25zdCBiPUR2KHYudGV4dCk/YXdhaXQgcEooZCx2KTpZRChkLHYpLHk9TWF0aC5yb3VuZChiLm1hcChUPT4oVC5fZ3JvdXBzfHxUKVswXVswXS5nZXRCQm94KCkuaGVpZ2h0KS5yZWR1Y2UoKFQsXyk9PlQrXykpO3AuYXR0cigiaGVpZ2h0Iix5KzIqRW4ubm90ZU1hcmdpbikscy5oZWlnaHQrPXkrMipFbi5ub3RlTWFyZ2luLG5pLmJ1bXBWZXJ0aWNhbFBvcyh5KzIqRW4ubm90ZU1hcmdpbikscy5zdG9weT1zLnN0YXJ0eSt5KzIqRW4ubm90ZU1hcmdpbixzLnN0b3B4PXMuc3RhcnR4K3Uud2lkdGgsbmkuaW5zZXJ0KHMuc3RhcnR4LHMuc3RhcnR5LHMuc3RvcHgscy5zdG9weSksbmkubW9kZWxzLmFkZE5vdGUocyl9LGVTPWk9Pih7Zm9udEZhbWlseTppLm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOmkubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6aS5tZXNzYWdlRm9udFdlaWdodH0pLFhEPWk9Pih7Zm9udEZhbWlseTppLm5vdGVGb250RmFtaWx5LGZvbnRTaXplOmkubm90ZUZvbnRTaXplLGZvbnRXZWlnaHQ6aS5ub3RlRm9udFdlaWdodH0pLEN2ZT1pPT4oe2ZvbnRGYW1pbHk6aS5hY3RvckZvbnRGYW1pbHksZm9udFNpemU6aS5hY3RvckZvbnRTaXplLGZvbnRXZWlnaHQ6aS5hY3RvckZvbnRXZWlnaHR9KTthc3luYyBmdW5jdGlvbiBoaW4oaSxzKXtuaS5idW1wVmVydGljYWxQb3MoMTApO2NvbnN0e3N0YXJ0eDp1LHN0b3B4OmQsbWVzc2FnZTpwfT1zLHY9Y2kuc3BsaXRCcmVha3MocCkubGVuZ3RoLGI9RHYocCkseT1iP2F3YWl0IEhGKHAscXQoKSk6QW8uY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMocCxlUyhFbikpO2lmKCFiKXtjb25zdCBQPXkuaGVpZ2h0L3Y7cy5oZWlnaHQrPVAsbmkuYnVtcFZlcnRpY2FsUG9zKFApfWxldCBULF89eS5oZWlnaHQtMTA7Y29uc3QgQT15LndpZHRoO2lmKHU9PT1kKXtUPW5pLmdldFZlcnRpY2FsUG9zKCkrXyxFbi5yaWdodEFuZ2xlc3x8KF8rPUVuLmJveE1hcmdpbixUPW5pLmdldFZlcnRpY2FsUG9zKCkrXyksXys9MzA7Y29uc3QgUD1jaS5nZXRNYXgoQS8yLEVuLndpZHRoLzIpO25pLmluc2VydCh1LVAsbmkuZ2V0VmVydGljYWxQb3MoKS0xMCtfLGQrUCxuaS5nZXRWZXJ0aWNhbFBvcygpKzMwK18pfWVsc2UgXys9RW4uYm94TWFyZ2luLFQ9bmkuZ2V0VmVydGljYWxQb3MoKStfLG5pLmluc2VydCh1LFQtMTAsZCxUKTtyZXR1cm4gbmkuYnVtcFZlcnRpY2FsUG9zKF8pLHMuaGVpZ2h0Kz1fLHMuc3RvcHk9cy5zdGFydHkrcy5oZWlnaHQsbmkuaW5zZXJ0KHMuZnJvbUJvdW5kcyxzLnN0YXJ0eSxzLnRvQm91bmRzLHMuc3RvcHkpLFR9Y29uc3QgZmluPWFzeW5jIGZ1bmN0aW9uKGkscyx1LGQpe2NvbnN0e3N0YXJ0eDpwLHN0b3B4OnYsc3RhcnR5OmIsbWVzc2FnZTp5LHR5cGU6VCxzZXF1ZW5jZUluZGV4Ol8sc2VxdWVuY2VWaXNpYmxlOkF9PXMsUD1Bby5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyh5LGVTKEVuKSksUj16YmUoKTtSLng9cCxSLnk9YisxMCxSLndpZHRoPXYtcCxSLmNsYXNzPSJtZXNzYWdlVGV4dCIsUi5keT0iMWVtIixSLnRleHQ9eSxSLmZvbnRGYW1pbHk9RW4ubWVzc2FnZUZvbnRGYW1pbHksUi5mb250U2l6ZT1Fbi5tZXNzYWdlRm9udFNpemUsUi5mb250V2VpZ2h0PUVuLm1lc3NhZ2VGb250V2VpZ2h0LFIuYW5jaG9yPUVuLm1lc3NhZ2VBbGlnbixSLnZhbGlnbj0iY2VudGVyIixSLnRleHRNYXJnaW49RW4ud3JhcFBhZGRpbmcsUi50c3Bhbj0hMSxEdihSLnRleHQpP2F3YWl0IHBKKGksUix7c3RhcnR4OnAsc3RvcHg6dixzdGFydHk6dX0pOllEKGksUik7Y29uc3QgRj1QLndpZHRoO2xldCBqO3A9PT12P0VuLnJpZ2h0QW5nbGVzP2o9aS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixgTSAgJHtwfSwke3V9IEggJHtwK2NpLmdldE1heChFbi53aWR0aC8yLEYvMil9IFYgJHt1KzI1fSBIICR7cH1gKTpqPWkuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gIitwKyIsIit1KyIgQyAiKyhwKzYwKSsiLCIrKHUtMTApKyIgIisocCs2MCkrIiwiKyh1KzMwKSsiICIrcCsiLCIrKHUrMjApKTooaj1pLmFwcGVuZCgibGluZSIpLGouYXR0cigieDEiLHApLGouYXR0cigieTEiLHUpLGouYXR0cigieDIiLHYpLGouYXR0cigieTIiLHUpKSxUPT09ZC5kYi5MSU5FVFlQRS5ET1RURUR8fFQ9PT1kLmRiLkxJTkVUWVBFLkRPVFRFRF9DUk9TU3x8VD09PWQuZGIuTElORVRZUEUuRE9UVEVEX1BPSU5UfHxUPT09ZC5kYi5MSU5FVFlQRS5ET1RURURfT1BFTj8oai5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjMsIDMiKSxqLmF0dHIoImNsYXNzIiwibWVzc2FnZUxpbmUxIikpOmouYXR0cigiY2xhc3MiLCJtZXNzYWdlTGluZTAiKTtsZXQgSz0iIjtFbi5hcnJvd01hcmtlckFic29sdXRlJiYoSz13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCxLPUsucmVwbGFjZSgvXCgvZywiXFwoIiksSz1LLnJlcGxhY2UoL1wpL2csIlxcKSIpKSxqLmF0dHIoInN0cm9rZS13aWR0aCIsMiksai5hdHRyKCJzdHJva2UiLCJub25lIiksai5zdHlsZSgiZmlsbCIsIm5vbmUiKSwoVD09PWQuZGIuTElORVRZUEUuU09MSUR8fFQ9PT1kLmRiLkxJTkVUWVBFLkRPVFRFRCkmJmouYXR0cigibWFya2VyLWVuZCIsInVybCgiK0srIiNhcnJvd2hlYWQpIiksKFQ9PT1kLmRiLkxJTkVUWVBFLlNPTElEX1BPSU5UfHxUPT09ZC5kYi5MSU5FVFlQRS5ET1RURURfUE9JTlQpJiZqLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitLKyIjZmlsbGVkLWhlYWQpIiksKFQ9PT1kLmRiLkxJTkVUWVBFLlNPTElEX0NST1NTfHxUPT09ZC5kYi5MSU5FVFlQRS5ET1RURURfQ1JPU1MpJiZqLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitLKyIjY3Jvc3NoZWFkKSIpLChBfHxFbi5zaG93U2VxdWVuY2VOdW1iZXJzKSYmKGouYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrSysiI3NlcXVlbmNlbnVtYmVyKSIpLGkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIscCkuYXR0cigieSIsdSs0KS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJmb250LXNpemUiLCIxMnB4IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJjbGFzcyIsInNlcXVlbmNlTnVtYmVyIikudGV4dChfKSl9LGRpbj1hc3luYyBmdW5jdGlvbihpLHMsdSxkLHAsdixiKXtsZXQgeT0wLFQ9MCxfLEE9MDtmb3IoY29uc3QgUCBvZiBkKXtjb25zdCBSPXNbUF0sRj1SLmJveDtfJiZfIT1GJiYoYnx8bmkubW9kZWxzLmFkZEJveChfKSxUKz1Fbi5ib3hNYXJnaW4rXy5tYXJnaW4pLEYmJkYhPV8mJihifHwoRi54PXkrVCxGLnk9cCksVCs9Ri5tYXJnaW4pLFIud2lkdGg9Ui53aWR0aHx8RW4ud2lkdGgsUi5oZWlnaHQ9Y2kuZ2V0TWF4KFIuaGVpZ2h0fHxFbi5oZWlnaHQsRW4uaGVpZ2h0KSxSLm1hcmdpbj1SLm1hcmdpbnx8RW4uYWN0b3JNYXJnaW4sQT1jaS5nZXRNYXgoQSxSLmhlaWdodCksdVtSLm5hbWVdJiYoVCs9Ui53aWR0aC8yKSxSLng9eStULFIuc3RhcnR5PW5pLmdldFZlcnRpY2FsUG9zKCksbmkuaW5zZXJ0KFIueCxwLFIueCtSLndpZHRoLFIuaGVpZ2h0KSx5Kz1SLndpZHRoK1QsUi5ib3gmJihSLmJveC53aWR0aD15K0YubWFyZ2luLVIuYm94LngpLFQ9Ui5tYXJnaW4sXz1SLmJveCxuaS5tb2RlbHMuYWRkQWN0b3IoUil9XyYmIWImJm5pLm1vZGVscy5hZGRCb3goXyksbmkuYnVtcFZlcnRpY2FsUG9zKEEpfSxTdmU9YXN5bmMgZnVuY3Rpb24oaSxzLHUsZCl7aWYoZCl7bGV0IHA9MDtuaS5idW1wVmVydGljYWxQb3MoRW4uYm94TWFyZ2luKjIpO2Zvcihjb25zdCB2IG9mIHUpe2NvbnN0IGI9c1t2XTtiLnN0b3B5fHwoYi5zdG9weT1uaS5nZXRWZXJ0aWNhbFBvcygpKTtjb25zdCB5PWF3YWl0IFpmLmRyYXdBY3RvcihpLGIsRW4sITApO3A9Y2kuZ2V0TWF4KHAseSl9bmkuYnVtcFZlcnRpY2FsUG9zKHArRW4uYm94TWFyZ2luKX1lbHNlIGZvcihjb25zdCBwIG9mIHUpe2NvbnN0IHY9c1twXTthd2FpdCBaZi5kcmF3QWN0b3IoaSx2LEVuLCExKX19LFZHZT1mdW5jdGlvbihpLHMsdSxkKXtsZXQgcD0wLHY9MDtmb3IoY29uc3QgYiBvZiB1KXtjb25zdCB5PXNbYl0sVD1taW4oeSksXz1aZi5kcmF3UG9wdXAoaSx5LFQsRW4sRW4uZm9yY2VNZW51cyxkKTtfLmhlaWdodD5wJiYocD1fLmhlaWdodCksXy53aWR0aCt5Lng+diYmKHY9Xy53aWR0aCt5LngpfXJldHVybnttYXhIZWlnaHQ6cCxtYXhXaWR0aDp2fX0sVUdlPWZ1bmN0aW9uKGkpe2lkKEVuLGkpLGkuZm9udEZhbWlseSYmKEVuLmFjdG9yRm9udEZhbWlseT1Fbi5ub3RlRm9udEZhbWlseT1Fbi5tZXNzYWdlRm9udEZhbWlseT1pLmZvbnRGYW1pbHkpLGkuZm9udFNpemUmJihFbi5hY3RvckZvbnRTaXplPUVuLm5vdGVGb250U2l6ZT1Fbi5tZXNzYWdlRm9udFNpemU9aS5mb250U2l6ZSksaS5mb250V2VpZ2h0JiYoRW4uYWN0b3JGb250V2VpZ2h0PUVuLm5vdGVGb250V2VpZ2h0PUVuLm1lc3NhZ2VGb250V2VpZ2h0PWkuZm9udFdlaWdodCl9LGJKPWZ1bmN0aW9uKGkpe3JldHVybiBuaS5hY3RpdmF0aW9ucy5maWx0ZXIoZnVuY3Rpb24ocyl7cmV0dXJuIHMuYWN0b3I9PT1pfSl9LEdHZT1mdW5jdGlvbihpLHMpe2NvbnN0IHU9c1tpXSxkPWJKKGkpLHA9ZC5yZWR1Y2UoZnVuY3Rpb24oYix5KXtyZXR1cm4gY2kuZ2V0TWluKGIseS5zdGFydHgpfSx1LngrdS53aWR0aC8yLTEpLHY9ZC5yZWR1Y2UoZnVuY3Rpb24oYix5KXtyZXR1cm4gY2kuZ2V0TWF4KGIseS5zdG9weCl9LHUueCt1LndpZHRoLzIrMSk7cmV0dXJuW3Asdl19O2Z1bmN0aW9uIGE1KGkscyx1LGQscCl7bmkuYnVtcFZlcnRpY2FsUG9zKHUpO2xldCB2PWQ7aWYocy5pZCYmcy5tZXNzYWdlJiZpW3MuaWRdKXtjb25zdCBiPWlbcy5pZF0ud2lkdGgseT1lUyhFbik7cy5tZXNzYWdlPUFvLndyYXBMYWJlbChgWyR7cy5tZXNzYWdlfV1gLGItMipFbi53cmFwUGFkZGluZyx5KSxzLndpZHRoPWIscy53cmFwPSEwO2NvbnN0IFQ9QW8uY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMocy5tZXNzYWdlLHkpLF89Y2kuZ2V0TWF4KFQuaGVpZ2h0LEVuLmxhYmVsQm94SGVpZ2h0KTt2PWQrXyxYZS5kZWJ1ZyhgJHtffSAtICR7cy5tZXNzYWdlfWApfXAocyksbmkuYnVtcFZlcnRpY2FsUG9zKHYpfWZ1bmN0aW9uIGdpbihpLHMsdSxkLHAsdixiKXtmdW5jdGlvbiB5KF8sQSl7Xy54PHBbaS5mcm9tXS54PyhuaS5pbnNlcnQocy5zdG9weC1BLHMuc3RhcnR5LHMuc3RhcnR4LHMuc3RvcHkrXy5oZWlnaHQvMitFbi5ub3RlTWFyZ2luKSxzLnN0b3B4PXMuc3RvcHgrQSk6KG5pLmluc2VydChzLnN0YXJ0eCxzLnN0YXJ0eSxzLnN0b3B4K0Escy5zdG9weStfLmhlaWdodC8yK0VuLm5vdGVNYXJnaW4pLHMuc3RvcHg9cy5zdG9weC1BKX1mdW5jdGlvbiBUKF8sQSl7Xy54PHBbaS50b10ueD8obmkuaW5zZXJ0KHMuc3RhcnR4LUEscy5zdGFydHkscy5zdG9weCxzLnN0b3B5K18uaGVpZ2h0LzIrRW4ubm90ZU1hcmdpbikscy5zdGFydHg9cy5zdGFydHgrQSk6KG5pLmluc2VydChzLnN0b3B4LHMuc3RhcnR5LHMuc3RhcnR4K0Escy5zdG9weStfLmhlaWdodC8yK0VuLm5vdGVNYXJnaW4pLHMuc3RhcnR4PXMuc3RhcnR4LUEpfWlmKHZbaS50b109PWQpe2NvbnN0IF89cFtpLnRvXSxBPV8udHlwZT09ImFjdG9yIj9aQy8yKzM6Xy53aWR0aC8yKzM7eShfLEEpLF8uc3RhcnR5PXUtXy5oZWlnaHQvMixuaS5idW1wVmVydGljYWxQb3MoXy5oZWlnaHQvMil9ZWxzZSBpZihiW2kuZnJvbV09PWQpe2NvbnN0IF89cFtpLmZyb21dO2lmKEVuLm1pcnJvckFjdG9ycyl7Y29uc3QgQT1fLnR5cGU9PSJhY3RvciI/WkMvMjpfLndpZHRoLzI7VChfLEEpfV8uc3RvcHk9dS1fLmhlaWdodC8yLG5pLmJ1bXBWZXJ0aWNhbFBvcyhfLmhlaWdodC8yKX1lbHNlIGlmKGJbaS50b109PWQpe2NvbnN0IF89cFtpLnRvXTtpZihFbi5taXJyb3JBY3RvcnMpe2NvbnN0IEE9Xy50eXBlPT0iYWN0b3IiP1pDLzIrMzpfLndpZHRoLzIrMzt5KF8sQSl9Xy5zdG9weT11LV8uaGVpZ2h0LzIsbmkuYnVtcFZlcnRpY2FsUG9zKF8uaGVpZ2h0LzIpfX1jb25zdCBwaW49YXN5bmMgZnVuY3Rpb24oaSxzLHUsZCl7Y29uc3R7c2VjdXJpdHlMZXZlbDpwLHNlcXVlbmNlOnZ9PXF0KCk7RW49djtsZXQgYjtwPT09InNhbmRib3giJiYoYj1JcigiI2kiK3MpKTtjb25zdCB5PUlyKHA9PT0ic2FuZGJveCI/Yi5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksVD1wPT09InNhbmRib3giP2Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQ7bmkuaW5pdCgpLFhlLmRlYnVnKGQuZGIpO2NvbnN0IF89cD09PSJzYW5kYm94Ij95LnNlbGVjdChgW2lkPSIke3N9Il1gKTpJcihgW2lkPSIke3N9Il1gKSxBPWQuZGIuZ2V0QWN0b3JzKCksUD1kLmRiLmdldENyZWF0ZWRBY3RvcnMoKSxSPWQuZGIuZ2V0RGVzdHJveWVkQWN0b3JzKCksRj1kLmRiLmdldEJveGVzKCk7bGV0IGo9ZC5kYi5nZXRBY3RvcktleXMoKTtjb25zdCBLPWQuZGIuZ2V0TWVzc2FnZXMoKSxlZT1kLmRiLmdldERpYWdyYW1UaXRsZSgpLGllPWQuZGIuaGFzQXRMZWFzdE9uZUJveCgpLG9lPWQuZGIuaGFzQXRMZWFzdE9uZUJveFdpdGhUaXRsZSgpLHBlPWF3YWl0IGJpbihBLEssZCk7aWYoRW4uaGVpZ2h0PWF3YWl0IHZpbihBLHBlLEYpLFpmLmluc2VydENvbXB1dGVySWNvbihfKSxaZi5pbnNlcnREYXRhYmFzZUljb24oXyksWmYuaW5zZXJ0Q2xvY2tJY29uKF8pLGllJiYobmkuYnVtcFZlcnRpY2FsUG9zKEVuLmJveE1hcmdpbiksb2UmJm5pLmJ1bXBWZXJ0aWNhbFBvcyhGWzBdLnRleHRNYXhIZWlnaHQpKSxFbi5oaWRlVW51c2VkUGFydGljaXBhbnRzPT09ITApe2NvbnN0IFNlPW5ldyBTZXQ7Sy5mb3JFYWNoKENlPT57U2UuYWRkKENlLmZyb20pLFNlLmFkZChDZS50byl9KSxqPWouZmlsdGVyKENlPT5TZS5oYXMoQ2UpKX1hd2FpdCBkaW4oXyxBLFAsaiwwLEssITEpO2NvbnN0IGJlPWF3YWl0IHhpbihLLEEscGUsZCk7WmYuaW5zZXJ0QXJyb3dIZWFkKF8pLFpmLmluc2VydEFycm93Q3Jvc3NIZWFkKF8pLFpmLmluc2VydEFycm93RmlsbGVkSGVhZChfKSxaZi5pbnNlcnRTZXF1ZW5jZU51bWJlcihfKTtmdW5jdGlvbiBhZShTZSxDZSl7Y29uc3Qga2U9bmkuZW5kQWN0aXZhdGlvbihTZSk7a2Uuc3RhcnR5KzE4PkNlJiYoa2Uuc3RhcnR5PUNlLTYsQ2UrPTEyKSxaZi5kcmF3QWN0aXZhdGlvbihfLGtlLENlLEVuLGJKKFNlLmZyb20uYWN0b3IpLmxlbmd0aCksbmkuaW5zZXJ0KGtlLnN0YXJ0eCxDZS0xMCxrZS5zdG9weCxDZSl9bGV0IG5lPTEsc2U9MTtjb25zdCBkZT1bXSxYPVtdO2xldCBnZT0wO2Zvcihjb25zdCBTZSBvZiBLKXtsZXQgQ2Usa2UsS2U7c3dpdGNoKFNlLnR5cGUpe2Nhc2UgZC5kYi5MSU5FVFlQRS5OT1RFOm5pLnJlc2V0VmVydGljYWxQb3MoKSxrZT1TZS5ub3RlTW9kZWwsYXdhaXQgbGluKF8sa2UpO2JyZWFrO2Nhc2UgZC5kYi5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQ6bmkubmV3QWN0aXZhdGlvbihTZSxfLEEpO2JyZWFrO2Nhc2UgZC5kYi5MSU5FVFlQRS5BQ1RJVkVfRU5EOmFlKFNlLG5pLmdldFZlcnRpY2FsUG9zKCkpO2JyZWFrO2Nhc2UgZC5kYi5MSU5FVFlQRS5MT09QX1NUQVJUOmE1KGJlLFNlLEVuLmJveE1hcmdpbixFbi5ib3hNYXJnaW4rRW4uYm94VGV4dE1hcmdpbixGdD0+bmkubmV3TG9vcChGdCkpO2JyZWFrO2Nhc2UgZC5kYi5MSU5FVFlQRS5MT09QX0VORDpDZT1uaS5lbmRMb29wKCksYXdhaXQgWmYuZHJhd0xvb3AoXyxDZSwibG9vcCIsRW4pLG5pLmJ1bXBWZXJ0aWNhbFBvcyhDZS5zdG9weS1uaS5nZXRWZXJ0aWNhbFBvcygpKSxuaS5tb2RlbHMuYWRkTG9vcChDZSk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLlJFQ1RfU1RBUlQ6YTUoYmUsU2UsRW4uYm94TWFyZ2luLEVuLmJveE1hcmdpbixGdD0+bmkubmV3TG9vcCh2b2lkIDAsRnQubWVzc2FnZSkpO2JyZWFrO2Nhc2UgZC5kYi5MSU5FVFlQRS5SRUNUX0VORDpDZT1uaS5lbmRMb29wKCksWC5wdXNoKENlKSxuaS5tb2RlbHMuYWRkTG9vcChDZSksbmkuYnVtcFZlcnRpY2FsUG9zKENlLnN0b3B5LW5pLmdldFZlcnRpY2FsUG9zKCkpO2JyZWFrO2Nhc2UgZC5kYi5MSU5FVFlQRS5PUFRfU1RBUlQ6YTUoYmUsU2UsRW4uYm94TWFyZ2luLEVuLmJveE1hcmdpbitFbi5ib3hUZXh0TWFyZ2luLEZ0PT5uaS5uZXdMb29wKEZ0KSk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLk9QVF9FTkQ6Q2U9bmkuZW5kTG9vcCgpLGF3YWl0IFpmLmRyYXdMb29wKF8sQ2UsIm9wdCIsRW4pLG5pLmJ1bXBWZXJ0aWNhbFBvcyhDZS5zdG9weS1uaS5nZXRWZXJ0aWNhbFBvcygpKSxuaS5tb2RlbHMuYWRkTG9vcChDZSk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLkFMVF9TVEFSVDphNShiZSxTZSxFbi5ib3hNYXJnaW4sRW4uYm94TWFyZ2luK0VuLmJveFRleHRNYXJnaW4sRnQ9Pm5pLm5ld0xvb3AoRnQpKTticmVhaztjYXNlIGQuZGIuTElORVRZUEUuQUxUX0VMU0U6YTUoYmUsU2UsRW4uYm94TWFyZ2luK0VuLmJveFRleHRNYXJnaW4sRW4uYm94TWFyZ2luLEZ0PT5uaS5hZGRTZWN0aW9uVG9Mb29wKEZ0KSk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLkFMVF9FTkQ6Q2U9bmkuZW5kTG9vcCgpLGF3YWl0IFpmLmRyYXdMb29wKF8sQ2UsImFsdCIsRW4pLG5pLmJ1bXBWZXJ0aWNhbFBvcyhDZS5zdG9weS1uaS5nZXRWZXJ0aWNhbFBvcygpKSxuaS5tb2RlbHMuYWRkTG9vcChDZSk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLlBBUl9TVEFSVDpjYXNlIGQuZGIuTElORVRZUEUuUEFSX09WRVJfU1RBUlQ6YTUoYmUsU2UsRW4uYm94TWFyZ2luLEVuLmJveE1hcmdpbitFbi5ib3hUZXh0TWFyZ2luLEZ0PT5uaS5uZXdMb29wKEZ0KSksbmkuc2F2ZVZlcnRpY2FsUG9zKCk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLlBBUl9BTkQ6YTUoYmUsU2UsRW4uYm94TWFyZ2luK0VuLmJveFRleHRNYXJnaW4sRW4uYm94TWFyZ2luLEZ0PT5uaS5hZGRTZWN0aW9uVG9Mb29wKEZ0KSk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLlBBUl9FTkQ6Q2U9bmkuZW5kTG9vcCgpLGF3YWl0IFpmLmRyYXdMb29wKF8sQ2UsInBhciIsRW4pLG5pLmJ1bXBWZXJ0aWNhbFBvcyhDZS5zdG9weS1uaS5nZXRWZXJ0aWNhbFBvcygpKSxuaS5tb2RlbHMuYWRkTG9vcChDZSk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLkFVVE9OVU1CRVI6bmU9U2UubWVzc2FnZS5zdGFydHx8bmUsc2U9U2UubWVzc2FnZS5zdGVwfHxzZSxTZS5tZXNzYWdlLnZpc2libGU/ZC5kYi5lbmFibGVTZXF1ZW5jZU51bWJlcnMoKTpkLmRiLmRpc2FibGVTZXF1ZW5jZU51bWJlcnMoKTticmVhaztjYXNlIGQuZGIuTElORVRZUEUuQ1JJVElDQUxfU1RBUlQ6YTUoYmUsU2UsRW4uYm94TWFyZ2luLEVuLmJveE1hcmdpbitFbi5ib3hUZXh0TWFyZ2luLEZ0PT5uaS5uZXdMb29wKEZ0KSk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLkNSSVRJQ0FMX09QVElPTjphNShiZSxTZSxFbi5ib3hNYXJnaW4rRW4uYm94VGV4dE1hcmdpbixFbi5ib3hNYXJnaW4sRnQ9Pm5pLmFkZFNlY3Rpb25Ub0xvb3AoRnQpKTticmVhaztjYXNlIGQuZGIuTElORVRZUEUuQ1JJVElDQUxfRU5EOkNlPW5pLmVuZExvb3AoKSxhd2FpdCBaZi5kcmF3TG9vcChfLENlLCJjcml0aWNhbCIsRW4pLG5pLmJ1bXBWZXJ0aWNhbFBvcyhDZS5zdG9weS1uaS5nZXRWZXJ0aWNhbFBvcygpKSxuaS5tb2RlbHMuYWRkTG9vcChDZSk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLkJSRUFLX1NUQVJUOmE1KGJlLFNlLEVuLmJveE1hcmdpbixFbi5ib3hNYXJnaW4rRW4uYm94VGV4dE1hcmdpbixGdD0+bmkubmV3TG9vcChGdCkpO2JyZWFrO2Nhc2UgZC5kYi5MSU5FVFlQRS5CUkVBS19FTkQ6Q2U9bmkuZW5kTG9vcCgpLGF3YWl0IFpmLmRyYXdMb29wKF8sQ2UsImJyZWFrIixFbiksbmkuYnVtcFZlcnRpY2FsUG9zKENlLnN0b3B5LW5pLmdldFZlcnRpY2FsUG9zKCkpLG5pLm1vZGVscy5hZGRMb29wKENlKTticmVhaztkZWZhdWx0OnRyeXtLZT1TZS5tc2dNb2RlbCxLZS5zdGFydHk9bmkuZ2V0VmVydGljYWxQb3MoKSxLZS5zZXF1ZW5jZUluZGV4PW5lLEtlLnNlcXVlbmNlVmlzaWJsZT1kLmRiLnNob3dTZXF1ZW5jZU51bWJlcnMoKTtjb25zdCBGdD1hd2FpdCBoaW4oXyxLZSk7Z2luKFNlLEtlLEZ0LGdlLEEsUCxSKSxkZS5wdXNoKHttZXNzYWdlTW9kZWw6S2UsbGluZVN0YXJ0WTpGdH0pLG5pLm1vZGVscy5hZGRNZXNzYWdlKEtlKX1jYXRjaChGdCl7WGUuZXJyb3IoImVycm9yIHdoaWxlIGRyYXdpbmcgbWVzc2FnZSIsRnQpfX1bZC5kYi5MSU5FVFlQRS5TT0xJRF9PUEVOLGQuZGIuTElORVRZUEUuRE9UVEVEX09QRU4sZC5kYi5MSU5FVFlQRS5TT0xJRCxkLmRiLkxJTkVUWVBFLkRPVFRFRCxkLmRiLkxJTkVUWVBFLlNPTElEX0NST1NTLGQuZGIuTElORVRZUEUuRE9UVEVEX0NST1NTLGQuZGIuTElORVRZUEUuU09MSURfUE9JTlQsZC5kYi5MSU5FVFlQRS5ET1RURURfUE9JTlRdLmluY2x1ZGVzKFNlLnR5cGUpJiYobmU9bmUrc2UpLGdlKyt9WGUuZGVidWcoImNyZWF0ZWRBY3RvcnMiLFApLFhlLmRlYnVnKCJkZXN0cm95ZWRBY3RvcnMiLFIpLGF3YWl0IFN2ZShfLEEsaiwhMSk7Zm9yKGNvbnN0IFNlIG9mIGRlKWF3YWl0IGZpbihfLFNlLm1lc3NhZ2VNb2RlbCxTZS5saW5lU3RhcnRZLGQpO0VuLm1pcnJvckFjdG9ycyYmYXdhaXQgU3ZlKF8sQSxqLCEwKSxYLmZvckVhY2goU2U9PlpmLmRyYXdCYWNrZ3JvdW5kUmVjdChfLFNlKSksekdlKF8sQSxqLEVuKTtmb3IoY29uc3QgU2Ugb2YgbmkubW9kZWxzLmJveGVzKVNlLmhlaWdodD1uaS5nZXRWZXJ0aWNhbFBvcygpLVNlLnksbmkuaW5zZXJ0KFNlLngsU2UueSxTZS54K1NlLndpZHRoLFNlLmhlaWdodCksU2Uuc3RhcnR4PVNlLngsU2Uuc3RhcnR5PVNlLnksU2Uuc3RvcHg9U2Uuc3RhcnR4K1NlLndpZHRoLFNlLnN0b3B5PVNlLnN0YXJ0eStTZS5oZWlnaHQsU2Uuc3Ryb2tlPSJyZ2IoMCwwLDAsIDAuNSkiLGF3YWl0IFpmLmRyYXdCb3goXyxTZSxFbik7aWUmJm5pLmJ1bXBWZXJ0aWNhbFBvcyhFbi5ib3hNYXJnaW4pO2NvbnN0IFc9VkdlKF8sQSxqLFQpLHtib3VuZHM6eGV9PW5pLmdldEJvdW5kcygpO2xldCBVPXhlLnN0b3B5LXhlLnN0YXJ0eTtVPFcubWF4SGVpZ2h0JiYoVT1XLm1heEhlaWdodCk7bGV0IEZlPVUrMipFbi5kaWFncmFtTWFyZ2luWTtFbi5taXJyb3JBY3RvcnMmJihGZT1GZS1Fbi5ib3hNYXJnaW4rRW4uYm90dG9tTWFyZ2luQWRqKTtsZXQgUGU9eGUuc3RvcHgteGUuc3RhcnR4O1BlPFcubWF4V2lkdGgmJihQZT1XLm1heFdpZHRoKTtjb25zdCBqZT1QZSsyKkVuLmRpYWdyYW1NYXJnaW5YO2VlJiZfLmFwcGVuZCgidGV4dCIpLnRleHQoZWUpLmF0dHIoIngiLCh4ZS5zdG9weC14ZS5zdGFydHgpLzItMipFbi5kaWFncmFtTWFyZ2luWCkuYXR0cigieSIsLTI1KSxOZyhfLEZlLGplLEVuLnVzZU1heFdpZHRoKTtjb25zdCBJZT1lZT80MDowO18uYXR0cigidmlld0JveCIseGUuc3RhcnR4LUVuLmRpYWdyYW1NYXJnaW5YKyIgLSIrKEVuLmRpYWdyYW1NYXJnaW5ZK0llKSsiICIramUrIiAiKyhGZStJZSkpLFhlLmRlYnVnKCJtb2RlbHM6IixuaS5tb2RlbHMpfTthc3luYyBmdW5jdGlvbiBiaW4oaSxzLHUpe2NvbnN0IGQ9e307Zm9yKGNvbnN0IHAgb2YgcylpZihpW3AudG9dJiZpW3AuZnJvbV0pe2NvbnN0IHY9aVtwLnRvXTtpZihwLnBsYWNlbWVudD09PXUuZGIuUExBQ0VNRU5ULkxFRlRPRiYmIXYucHJldkFjdG9yfHxwLnBsYWNlbWVudD09PXUuZGIuUExBQ0VNRU5ULlJJR0hUT0YmJiF2Lm5leHRBY3Rvciljb250aW51ZTtjb25zdCBiPXAucGxhY2VtZW50IT09dm9pZCAwLHk9IWIsVD1iP1hEKEVuKTplUyhFbiksXz1wLndyYXA/QW8ud3JhcExhYmVsKHAubWVzc2FnZSxFbi53aWR0aC0yKkVuLndyYXBQYWRkaW5nLFQpOnAubWVzc2FnZSxQPShEdihfKT9hd2FpdCBIRihwLm1lc3NhZ2UscXQoKSk6QW8uY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoXyxUKSkud2lkdGgrMipFbi53cmFwUGFkZGluZzt5JiZwLmZyb209PT12Lm5leHRBY3Rvcj9kW3AudG9dPWNpLmdldE1heChkW3AudG9dfHwwLFApOnkmJnAuZnJvbT09PXYucHJldkFjdG9yP2RbcC5mcm9tXT1jaS5nZXRNYXgoZFtwLmZyb21dfHwwLFApOnkmJnAuZnJvbT09PXAudG8/KGRbcC5mcm9tXT1jaS5nZXRNYXgoZFtwLmZyb21dfHwwLFAvMiksZFtwLnRvXT1jaS5nZXRNYXgoZFtwLnRvXXx8MCxQLzIpKTpwLnBsYWNlbWVudD09PXUuZGIuUExBQ0VNRU5ULlJJR0hUT0Y/ZFtwLmZyb21dPWNpLmdldE1heChkW3AuZnJvbV18fDAsUCk6cC5wbGFjZW1lbnQ9PT11LmRiLlBMQUNFTUVOVC5MRUZUT0Y/ZFt2LnByZXZBY3Rvcl09Y2kuZ2V0TWF4KGRbdi5wcmV2QWN0b3JdfHwwLFApOnAucGxhY2VtZW50PT09dS5kYi5QTEFDRU1FTlQuT1ZFUiYmKHYucHJldkFjdG9yJiYoZFt2LnByZXZBY3Rvcl09Y2kuZ2V0TWF4KGRbdi5wcmV2QWN0b3JdfHwwLFAvMikpLHYubmV4dEFjdG9yJiYoZFtwLmZyb21dPWNpLmdldE1heChkW3AuZnJvbV18fDAsUC8yKSkpfXJldHVybiBYZS5kZWJ1ZygibWF4TWVzc2FnZVdpZHRoUGVyQWN0b3I6IixkKSxkfWNvbnN0IG1pbj1mdW5jdGlvbihpKXtsZXQgcz0wO2NvbnN0IHU9Q3ZlKEVuKTtmb3IoY29uc3QgZCBpbiBpLmxpbmtzKXtjb25zdCB2PUFvLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGQsdSkud2lkdGgrMipFbi53cmFwUGFkZGluZysyKkVuLmJveE1hcmdpbjtzPHYmJihzPXYpfXJldHVybiBzfTthc3luYyBmdW5jdGlvbiB2aW4oaSxzLHUpe2xldCBkPTA7Zm9yKGNvbnN0IHYgb2YgT2JqZWN0LmtleXMoaSkpe2NvbnN0IGI9aVt2XTtiLndyYXAmJihiLmRlc2NyaXB0aW9uPUFvLndyYXBMYWJlbChiLmRlc2NyaXB0aW9uLEVuLndpZHRoLTIqRW4ud3JhcFBhZGRpbmcsQ3ZlKEVuKSkpO2NvbnN0IHk9RHYoYi5kZXNjcmlwdGlvbik/YXdhaXQgSEYoYi5kZXNjcmlwdGlvbixxdCgpKTpBby5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhiLmRlc2NyaXB0aW9uLEN2ZShFbikpO2Iud2lkdGg9Yi53cmFwP0VuLndpZHRoOmNpLmdldE1heChFbi53aWR0aCx5LndpZHRoKzIqRW4ud3JhcFBhZGRpbmcpLGIuaGVpZ2h0PWIud3JhcD9jaS5nZXRNYXgoeS5oZWlnaHQsRW4uaGVpZ2h0KTpFbi5oZWlnaHQsZD1jaS5nZXRNYXgoZCxiLmhlaWdodCl9Zm9yKGNvbnN0IHYgaW4gcyl7Y29uc3QgYj1pW3ZdO2lmKCFiKWNvbnRpbnVlO2NvbnN0IHk9aVtiLm5leHRBY3Rvcl07aWYoIXkpe2NvbnN0IFA9c1t2XStFbi5hY3Rvck1hcmdpbi1iLndpZHRoLzI7Yi5tYXJnaW49Y2kuZ2V0TWF4KFAsRW4uYWN0b3JNYXJnaW4pO2NvbnRpbnVlfWNvbnN0IF89c1t2XStFbi5hY3Rvck1hcmdpbi1iLndpZHRoLzIteS53aWR0aC8yO2IubWFyZ2luPWNpLmdldE1heChfLEVuLmFjdG9yTWFyZ2luKX1sZXQgcD0wO3JldHVybiB1LmZvckVhY2godj0+e2NvbnN0IGI9ZVMoRW4pO2xldCB5PXYuYWN0b3JLZXlzLnJlZHVjZSgoQSxQKT0+QSs9aVtQXS53aWR0aCsoaVtQXS5tYXJnaW58fDApLDApO3ktPTIqRW4uYm94VGV4dE1hcmdpbix2LndyYXAmJih2Lm5hbWU9QW8ud3JhcExhYmVsKHYubmFtZSx5LTIqRW4ud3JhcFBhZGRpbmcsYikpO2NvbnN0IFQ9QW8uY2FsY3VsYXRlVGV4dERpbWVuc2lvbnModi5uYW1lLGIpO3A9Y2kuZ2V0TWF4KFQuaGVpZ2h0LHApO2NvbnN0IF89Y2kuZ2V0TWF4KHksVC53aWR0aCsyKkVuLndyYXBQYWRkaW5nKTtpZih2Lm1hcmdpbj1Fbi5ib3hUZXh0TWFyZ2luLHk8Xyl7Y29uc3QgQT0oXy15KS8yO3YubWFyZ2luKz1BfX0pLHUuZm9yRWFjaCh2PT52LnRleHRNYXhIZWlnaHQ9cCksY2kuZ2V0TWF4KGQsRW4uaGVpZ2h0KX1jb25zdCB3aW49YXN5bmMgZnVuY3Rpb24oaSxzLHUpe2NvbnN0IGQ9c1tpLmZyb21dLngscD1zW2kudG9dLngsdj1pLndyYXAmJmkubWVzc2FnZTtsZXQgYj1EdihpLm1lc3NhZ2UpP2F3YWl0IEhGKGkubWVzc2FnZSxxdCgpKTpBby5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyh2P0FvLndyYXBMYWJlbChpLm1lc3NhZ2UsRW4ud2lkdGgsWEQoRW4pKTppLm1lc3NhZ2UsWEQoRW4pKTtjb25zdCB5PXt3aWR0aDp2P0VuLndpZHRoOmNpLmdldE1heChFbi53aWR0aCxiLndpZHRoKzIqRW4ubm90ZU1hcmdpbiksaGVpZ2h0OjAsc3RhcnR4OnNbaS5mcm9tXS54LHN0b3B4OjAsc3RhcnR5OjAsc3RvcHk6MCxtZXNzYWdlOmkubWVzc2FnZX07cmV0dXJuIGkucGxhY2VtZW50PT09dS5kYi5QTEFDRU1FTlQuUklHSFRPRj8oeS53aWR0aD12P2NpLmdldE1heChFbi53aWR0aCxiLndpZHRoKTpjaS5nZXRNYXgoc1tpLmZyb21dLndpZHRoLzIrc1tpLnRvXS53aWR0aC8yLGIud2lkdGgrMipFbi5ub3RlTWFyZ2luKSx5LnN0YXJ0eD1kKyhzW2kuZnJvbV0ud2lkdGgrRW4uYWN0b3JNYXJnaW4pLzIpOmkucGxhY2VtZW50PT09dS5kYi5QTEFDRU1FTlQuTEVGVE9GPyh5LndpZHRoPXY/Y2kuZ2V0TWF4KEVuLndpZHRoLGIud2lkdGgrMipFbi5ub3RlTWFyZ2luKTpjaS5nZXRNYXgoc1tpLmZyb21dLndpZHRoLzIrc1tpLnRvXS53aWR0aC8yLGIud2lkdGgrMipFbi5ub3RlTWFyZ2luKSx5LnN0YXJ0eD1kLXkud2lkdGgrKHNbaS5mcm9tXS53aWR0aC1Fbi5hY3Rvck1hcmdpbikvMik6aS50bz09PWkuZnJvbT8oYj1Bby5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyh2P0FvLndyYXBMYWJlbChpLm1lc3NhZ2UsY2kuZ2V0TWF4KEVuLndpZHRoLHNbaS5mcm9tXS53aWR0aCksWEQoRW4pKTppLm1lc3NhZ2UsWEQoRW4pKSx5LndpZHRoPXY/Y2kuZ2V0TWF4KEVuLndpZHRoLHNbaS5mcm9tXS53aWR0aCk6Y2kuZ2V0TWF4KHNbaS5mcm9tXS53aWR0aCxFbi53aWR0aCxiLndpZHRoKzIqRW4ubm90ZU1hcmdpbikseS5zdGFydHg9ZCsoc1tpLmZyb21dLndpZHRoLXkud2lkdGgpLzIpOih5LndpZHRoPU1hdGguYWJzKGQrc1tpLmZyb21dLndpZHRoLzItKHArc1tpLnRvXS53aWR0aC8yKSkrRW4uYWN0b3JNYXJnaW4seS5zdGFydHg9ZDxwP2Qrc1tpLmZyb21dLndpZHRoLzItRW4uYWN0b3JNYXJnaW4vMjpwK3NbaS50b10ud2lkdGgvMi1Fbi5hY3Rvck1hcmdpbi8yKSx2JiYoeS5tZXNzYWdlPUFvLndyYXBMYWJlbChpLm1lc3NhZ2UseS53aWR0aC0yKkVuLndyYXBQYWRkaW5nLFhEKEVuKSkpLFhlLmRlYnVnKGBOTTpbJHt5LnN0YXJ0eH0sJHt5LnN0b3B4fSwke3kuc3RhcnR5fSwke3kuc3RvcHl9OiR7eS53aWR0aH0sJHt5LmhlaWdodH09JHtpLm1lc3NhZ2V9XWApLHl9LHlpbj1mdW5jdGlvbihpLHMsdSl7aWYoIVt1LmRiLkxJTkVUWVBFLlNPTElEX09QRU4sdS5kYi5MSU5FVFlQRS5ET1RURURfT1BFTix1LmRiLkxJTkVUWVBFLlNPTElELHUuZGIuTElORVRZUEUuRE9UVEVELHUuZGIuTElORVRZUEUuU09MSURfQ1JPU1MsdS5kYi5MSU5FVFlQRS5ET1RURURfQ1JPU1MsdS5kYi5MSU5FVFlQRS5TT0xJRF9QT0lOVCx1LmRiLkxJTkVUWVBFLkRPVFRFRF9QT0lOVF0uaW5jbHVkZXMoaS50eXBlKSlyZXR1cm57fTtjb25zdFtkLHBdPUdHZShpLmZyb20scyksW3YsYl09R0dlKGkudG8scykseT1kPD12LFQ9eT9wOmQ7bGV0IF89eT92OmI7Y29uc3QgQT1NYXRoLmFicyh2LWIpPjIsUD1LPT55Py1LOks7aS5mcm9tPT09aS50bz9fPVQ6KGkuYWN0aXZhdGUmJiFBJiYoXys9UChFbi5hY3RpdmF0aW9uV2lkdGgvMi0xKSksW3UuZGIuTElORVRZUEUuU09MSURfT1BFTix1LmRiLkxJTkVUWVBFLkRPVFRFRF9PUEVOXS5pbmNsdWRlcyhpLnR5cGUpfHwoXys9UCgzKSkpO2NvbnN0IFI9W2QscCx2LGJdLEY9TWF0aC5hYnMoVC1fKTtpLndyYXAmJmkubWVzc2FnZSYmKGkubWVzc2FnZT1Bby53cmFwTGFiZWwoaS5tZXNzYWdlLGNpLmdldE1heChGKzIqRW4ud3JhcFBhZGRpbmcsRW4ud2lkdGgpLGVTKEVuKSkpO2NvbnN0IGo9QW8uY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoaS5tZXNzYWdlLGVTKEVuKSk7cmV0dXJue3dpZHRoOmNpLmdldE1heChpLndyYXA/MDpqLndpZHRoKzIqRW4ud3JhcFBhZGRpbmcsRisyKkVuLndyYXBQYWRkaW5nLEVuLndpZHRoKSxoZWlnaHQ6MCxzdGFydHg6VCxzdG9weDpfLHN0YXJ0eTowLHN0b3B5OjAsbWVzc2FnZTppLm1lc3NhZ2UsdHlwZTppLnR5cGUsd3JhcDppLndyYXAsZnJvbUJvdW5kczpNYXRoLm1pbi5hcHBseShudWxsLFIpLHRvQm91bmRzOk1hdGgubWF4LmFwcGx5KG51bGwsUil9fSx4aW49YXN5bmMgZnVuY3Rpb24oaSxzLHUsZCl7Y29uc3QgcD17fSx2PVtdO2xldCBiLHksVDtmb3IoY29uc3QgXyBvZiBpKXtzd2l0Y2goXy5pZD1Bby5yYW5kb20oe2xlbmd0aDoxMH0pLF8udHlwZSl7Y2FzZSBkLmRiLkxJTkVUWVBFLkxPT1BfU1RBUlQ6Y2FzZSBkLmRiLkxJTkVUWVBFLkFMVF9TVEFSVDpjYXNlIGQuZGIuTElORVRZUEUuT1BUX1NUQVJUOmNhc2UgZC5kYi5MSU5FVFlQRS5QQVJfU1RBUlQ6Y2FzZSBkLmRiLkxJTkVUWVBFLlBBUl9PVkVSX1NUQVJUOmNhc2UgZC5kYi5MSU5FVFlQRS5DUklUSUNBTF9TVEFSVDpjYXNlIGQuZGIuTElORVRZUEUuQlJFQUtfU1RBUlQ6di5wdXNoKHtpZDpfLmlkLG1zZzpfLm1lc3NhZ2UsZnJvbTpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUix0bzpOdW1iZXIuTUlOX1NBRkVfSU5URUdFUix3aWR0aDowfSk7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLkFMVF9FTFNFOmNhc2UgZC5kYi5MSU5FVFlQRS5QQVJfQU5EOmNhc2UgZC5kYi5MSU5FVFlQRS5DUklUSUNBTF9PUFRJT046Xy5tZXNzYWdlJiYoYj12LnBvcCgpLHBbYi5pZF09YixwW18uaWRdPWIsdi5wdXNoKGIpKTticmVhaztjYXNlIGQuZGIuTElORVRZUEUuTE9PUF9FTkQ6Y2FzZSBkLmRiLkxJTkVUWVBFLkFMVF9FTkQ6Y2FzZSBkLmRiLkxJTkVUWVBFLk9QVF9FTkQ6Y2FzZSBkLmRiLkxJTkVUWVBFLlBBUl9FTkQ6Y2FzZSBkLmRiLkxJTkVUWVBFLkNSSVRJQ0FMX0VORDpjYXNlIGQuZGIuTElORVRZUEUuQlJFQUtfRU5EOmI9di5wb3AoKSxwW2IuaWRdPWI7YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLkFDVElWRV9TVEFSVDp7Y29uc3QgUD1zW18uZnJvbT9fLmZyb20uYWN0b3I6Xy50by5hY3Rvcl0sUj1iSihfLmZyb20/Xy5mcm9tLmFjdG9yOl8udG8uYWN0b3IpLmxlbmd0aCxGPVAueCtQLndpZHRoLzIrKFItMSkqRW4uYWN0aXZhdGlvbldpZHRoLzIsaj17c3RhcnR4OkYsc3RvcHg6RitFbi5hY3RpdmF0aW9uV2lkdGgsYWN0b3I6Xy5mcm9tLmFjdG9yLGVuYWJsZWQ6ITB9O25pLmFjdGl2YXRpb25zLnB1c2goail9YnJlYWs7Y2FzZSBkLmRiLkxJTkVUWVBFLkFDVElWRV9FTkQ6e2NvbnN0IFA9bmkuYWN0aXZhdGlvbnMubWFwKFI9PlIuYWN0b3IpLmxhc3RJbmRleE9mKF8uZnJvbS5hY3Rvcik7ZGVsZXRlIG5pLmFjdGl2YXRpb25zLnNwbGljZShQLDEpWzBdfWJyZWFrfV8ucGxhY2VtZW50IT09dm9pZCAwPyh5PWF3YWl0IHdpbihfLHMsZCksXy5ub3RlTW9kZWw9eSx2LmZvckVhY2goUD0+e2I9UCxiLmZyb209Y2kuZ2V0TWluKGIuZnJvbSx5LnN0YXJ0eCksYi50bz1jaS5nZXRNYXgoYi50byx5LnN0YXJ0eCt5LndpZHRoKSxiLndpZHRoPWNpLmdldE1heChiLndpZHRoLE1hdGguYWJzKGIuZnJvbS1iLnRvKSktRW4ubGFiZWxCb3hXaWR0aH0pKTooVD15aW4oXyxzLGQpLF8ubXNnTW9kZWw9VCxULnN0YXJ0eCYmVC5zdG9weCYmdi5sZW5ndGg+MCYmdi5mb3JFYWNoKFA9PntpZihiPVAsVC5zdGFydHg9PT1ULnN0b3B4KXtjb25zdCBSPXNbXy5mcm9tXSxGPXNbXy50b107Yi5mcm9tPWNpLmdldE1pbihSLngtVC53aWR0aC8yLFIueC1SLndpZHRoLzIsYi5mcm9tKSxiLnRvPWNpLmdldE1heChGLngrVC53aWR0aC8yLEYueCtSLndpZHRoLzIsYi50byksYi53aWR0aD1jaS5nZXRNYXgoYi53aWR0aCxNYXRoLmFicyhiLnRvLWIuZnJvbSkpLUVuLmxhYmVsQm94V2lkdGh9ZWxzZSBiLmZyb209Y2kuZ2V0TWluKFQuc3RhcnR4LGIuZnJvbSksYi50bz1jaS5nZXRNYXgoVC5zdG9weCxiLnRvKSxiLndpZHRoPWNpLmdldE1heChiLndpZHRoLFQud2lkdGgpLUVuLmxhYmVsQm94V2lkdGh9KSl9cmV0dXJuIG5pLmFjdGl2YXRpb25zPVtdLFhlLmRlYnVnKCJMb29wIHR5cGUgd2lkdGhzOiIscCkscH0sa2luPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6eXJuLGRiOkZHZSxyZW5kZXJlcjp7Ym91bmRzOm5pLGRyYXdBY3RvcnM6U3ZlLGRyYXdBY3RvcnNQb3B1cDpWR2Usc2V0Q29uZjpVR2UsZHJhdzpwaW59LHN0eWxlczpVcm4saW5pdDooe3dyYXA6aX0pPT57RkdlLnNldFdyYXAoaSl9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgX3ZlPWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oYW8sVHIsRm4scW4pe2ZvcihGbj1Gbnx8e30scW49YW8ubGVuZ3RoO3FuLS07Rm5bYW9bcW5dXT1Ucik7cmV0dXJuIEZufSxzPVsxLDE3XSx1PVsxLDE4XSxkPVsxLDE5XSxwPVsxLDM5XSx2PVsxLDQwXSxiPVsxLDI1XSx5PVsxLDIzXSxUPVsxLDI0XSxfPVsxLDMxXSxBPVsxLDMyXSxQPVsxLDMzXSxSPVsxLDM0XSxGPVsxLDM1XSxqPVsxLDM2XSxLPVsxLDI2XSxlZT1bMSwyN10saWU9WzEsMjhdLG9lPVsxLDI5XSxwZT1bMSw0M10sYmU9WzEsMzBdLGFlPVsxLDQyXSxuZT1bMSw0NF0sc2U9WzEsNDFdLGRlPVsxLDQ1XSxYPVsxLDldLGdlPVsxLDgsOV0sVz1bMSw1Nl0seGU9WzEsNTddLFU9WzEsNThdLEZlPVsxLDU5XSxQZT1bMSw2MF0samU9WzEsNjFdLEllPVsxLDYyXSxTZT1bMSw4LDksMzldLENlPVsxLDc0XSxrZT1bMSw4LDksMTIsMTMsMjEsMzcsMzksNDIsNTksNjAsNjEsNjIsNjMsNjQsNjUsNzAsNzJdLEtlPVsxLDgsOSwxMiwxMywxOSwyMSwzNywzOSw0Miw0Niw1OSw2MCw2MSw2Miw2Myw2NCw2NSw3MCw3Miw3NCw4MCw5NSw5Nyw5OF0sRnQ9WzEzLDc0LDgwLDk1LDk3LDk4XSxOZT1bMTMsNjQsNjUsNzQsODAsOTUsOTcsOThdLGduPVsxMyw1OSw2MCw2MSw2Miw2Myw3NCw4MCw5NSw5Nyw5OF0sX3Q9WzEsOTNdLEV0PVsxLDExMF0sR3Q9WzEsMTA4XSxsbj1bMSwxMDJdLHh0PVsxLDEwM10sUHQ9WzEsMTA0XSxRZT1bMSwxMDVdLER0PVsxLDEwNl0sa3Q9WzEsMTA3XSxPbj1bMSwxMDldLGh0PVsxLDgsOSwzNywzOSw0Ml0senI9WzEsOCw5LDIxXSx5dD1bMSw4LDksNzhdLGppPVsxLDgsOSwyMSw3Myw3NCw3OCw4MCw4MSw4Miw4Myw4NCw4NV0seGk9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLG1lcm1haWREb2M6NCxzdGF0ZW1lbnRzOjUsZ3JhcGhDb25maWc6NixDTEFTU19ESUFHUkFNOjcsTkVXTElORTo4LEVPRjo5LHN0YXRlbWVudDoxMCxjbGFzc0xhYmVsOjExLFNRUzoxMixTVFI6MTMsU1FFOjE0LG5hbWVzcGFjZU5hbWU6MTUsYWxwaGFOdW1Ub2tlbjoxNixjbGFzc05hbWU6MTcsY2xhc3NMaXRlcmFsTmFtZToxOCxHRU5FUklDVFlQRToxOSxyZWxhdGlvblN0YXRlbWVudDoyMCxMQUJFTDoyMSxuYW1lc3BhY2VTdGF0ZW1lbnQ6MjIsY2xhc3NTdGF0ZW1lbnQ6MjMsbWVtYmVyU3RhdGVtZW50OjI0LGFubm90YXRpb25TdGF0ZW1lbnQ6MjUsY2xpY2tTdGF0ZW1lbnQ6MjYsc3R5bGVTdGF0ZW1lbnQ6MjcsY3NzQ2xhc3NTdGF0ZW1lbnQ6Mjgsbm90ZVN0YXRlbWVudDoyOSxkaXJlY3Rpb246MzAsYWNjX3RpdGxlOjMxLGFjY190aXRsZV92YWx1ZTozMixhY2NfZGVzY3I6MzMsYWNjX2Rlc2NyX3ZhbHVlOjM0LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MzUsbmFtZXNwYWNlSWRlbnRpZmllcjozNixTVFJVQ1RfU1RBUlQ6MzcsY2xhc3NTdGF0ZW1lbnRzOjM4LFNUUlVDVF9TVE9QOjM5LE5BTUVTUEFDRTo0MCxjbGFzc0lkZW50aWZpZXI6NDEsU1RZTEVfU0VQQVJBVE9SOjQyLG1lbWJlcnM6NDMsQ0xBU1M6NDQsQU5OT1RBVElPTl9TVEFSVDo0NSxBTk5PVEFUSU9OX0VORDo0NixNRU1CRVI6NDcsU0VQQVJBVE9SOjQ4LHJlbGF0aW9uOjQ5LE5PVEVfRk9SOjUwLG5vdGVUZXh0OjUxLE5PVEU6NTIsZGlyZWN0aW9uX3RiOjUzLGRpcmVjdGlvbl9idDo1NCxkaXJlY3Rpb25fcmw6NTUsZGlyZWN0aW9uX2xyOjU2LHJlbGF0aW9uVHlwZTo1NyxsaW5lVHlwZTo1OCxBR0dSRUdBVElPTjo1OSxFWFRFTlNJT046NjAsQ09NUE9TSVRJT046NjEsREVQRU5ERU5DWTo2MixMT0xMSVBPUDo2MyxMSU5FOjY0LERPVFRFRF9MSU5FOjY1LENBTExCQUNLOjY2LExJTks6NjcsTElOS19UQVJHRVQ6NjgsQ0xJQ0s6NjksQ0FMTEJBQ0tfTkFNRTo3MCxDQUxMQkFDS19BUkdTOjcxLEhSRUY6NzIsU1RZTEU6NzMsQUxQSEE6NzQsc3R5bGVzT3B0Ojc1LENTU0NMQVNTOjc2LHN0eWxlOjc3LENPTU1BOjc4LHN0eWxlQ29tcG9uZW50Ojc5LE5VTTo4MCxDT0xPTjo4MSxVTklUOjgyLFNQQUNFOjgzLEJSS1Q6ODQsUENUOjg1LGNvbW1lbnRUb2tlbjo4Nix0ZXh0VG9rZW46ODcsZ3JhcGhDb2RlVG9rZW5zOjg4LHRleHROb1RhZ3NUb2tlbjo4OSxUQUdTVEFSVDo5MCxUQUdFTkQ6OTEsIj09Ijo5MiwiLS0iOjkzLERFRkFVTFQ6OTQsTUlOVVM6OTUsa2V5d29yZHM6OTYsVU5JQ09ERV9URVhUOjk3LEJRVU9URV9TVFI6OTgsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDc6IkNMQVNTX0RJQUdSQU0iLDg6Ik5FV0xJTkUiLDk6IkVPRiIsMTI6IlNRUyIsMTM6IlNUUiIsMTQ6IlNRRSIsMTk6IkdFTkVSSUNUWVBFIiwyMToiTEFCRUwiLDMxOiJhY2NfdGl0bGUiLDMyOiJhY2NfdGl0bGVfdmFsdWUiLDMzOiJhY2NfZGVzY3IiLDM0OiJhY2NfZGVzY3JfdmFsdWUiLDM1OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwzNzoiU1RSVUNUX1NUQVJUIiwzOToiU1RSVUNUX1NUT1AiLDQwOiJOQU1FU1BBQ0UiLDQyOiJTVFlMRV9TRVBBUkFUT1IiLDQ0OiJDTEFTUyIsNDU6IkFOTk9UQVRJT05fU1RBUlQiLDQ2OiJBTk5PVEFUSU9OX0VORCIsNDc6Ik1FTUJFUiIsNDg6IlNFUEFSQVRPUiIsNTA6Ik5PVEVfRk9SIiw1MjoiTk9URSIsNTM6ImRpcmVjdGlvbl90YiIsNTQ6ImRpcmVjdGlvbl9idCIsNTU6ImRpcmVjdGlvbl9ybCIsNTY6ImRpcmVjdGlvbl9sciIsNTk6IkFHR1JFR0FUSU9OIiw2MDoiRVhURU5TSU9OIiw2MToiQ09NUE9TSVRJT04iLDYyOiJERVBFTkRFTkNZIiw2MzoiTE9MTElQT1AiLDY0OiJMSU5FIiw2NToiRE9UVEVEX0xJTkUiLDY2OiJDQUxMQkFDSyIsNjc6IkxJTksiLDY4OiJMSU5LX1RBUkdFVCIsNjk6IkNMSUNLIiw3MDoiQ0FMTEJBQ0tfTkFNRSIsNzE6IkNBTExCQUNLX0FSR1MiLDcyOiJIUkVGIiw3MzoiU1RZTEUiLDc0OiJBTFBIQSIsNzY6IkNTU0NMQVNTIiw3ODoiQ09NTUEiLDgwOiJOVU0iLDgxOiJDT0xPTiIsODI6IlVOSVQiLDgzOiJTUEFDRSIsODQ6IkJSS1QiLDg1OiJQQ1QiLDg4OiJncmFwaENvZGVUb2tlbnMiLDkwOiJUQUdTVEFSVCIsOTE6IlRBR0VORCIsOTI6Ij09Iiw5MzoiLS0iLDk0OiJERUZBVUxUIiw5NToiTUlOVVMiLDk2OiJrZXl3b3JkcyIsOTc6IlVOSUNPREVfVEVYVCIsOTg6IkJRVU9URV9TVFIifSxwcm9kdWN0aW9uc186WzAsWzMsMV0sWzMsMV0sWzQsMV0sWzYsNF0sWzUsMV0sWzUsMl0sWzUsM10sWzExLDNdLFsxNSwxXSxbMTUsMl0sWzE3LDFdLFsxNywxXSxbMTcsMl0sWzE3LDJdLFsxNywyXSxbMTAsMV0sWzEwLDJdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwyXSxbMTAsMl0sWzEwLDFdLFsyMiw0XSxbMjIsNV0sWzM2LDJdLFszOCwxXSxbMzgsMl0sWzM4LDNdLFsyMywxXSxbMjMsM10sWzIzLDRdLFsyMyw2XSxbNDEsMl0sWzQxLDNdLFsyNSw0XSxbNDMsMV0sWzQzLDJdLFsyNCwxXSxbMjQsMl0sWzI0LDFdLFsyNCwxXSxbMjAsM10sWzIwLDRdLFsyMCw0XSxbMjAsNV0sWzI5LDNdLFsyOSwyXSxbMzAsMV0sWzMwLDFdLFszMCwxXSxbMzAsMV0sWzQ5LDNdLFs0OSwyXSxbNDksMl0sWzQ5LDFdLFs1NywxXSxbNTcsMV0sWzU3LDFdLFs1NywxXSxbNTcsMV0sWzU4LDFdLFs1OCwxXSxbMjYsM10sWzI2LDRdLFsyNiwzXSxbMjYsNF0sWzI2LDRdLFsyNiw1XSxbMjYsM10sWzI2LDRdLFsyNiw0XSxbMjYsNV0sWzI2LDRdLFsyNiw1XSxbMjYsNV0sWzI2LDZdLFsyNywzXSxbMjgsM10sWzc1LDFdLFs3NSwzXSxbNzcsMV0sWzc3LDJdLFs3OSwxXSxbNzksMV0sWzc5LDFdLFs3OSwxXSxbNzksMV0sWzc5LDFdLFs3OSwxXSxbNzksMV0sWzc5LDFdLFs4NiwxXSxbODYsMV0sWzg3LDFdLFs4NywxXSxbODcsMV0sWzg3LDFdLFs4NywxXSxbODcsMV0sWzg3LDFdLFs4OSwxXSxbODksMV0sWzg5LDFdLFs4OSwxXSxbMTYsMV0sWzE2LDFdLFsxNiwxXSxbMTYsMV0sWzE4LDFdLFs1MSwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihUcixGbixxbixVbixBdCx3dCxvbil7dmFyIGZuPXd0Lmxlbmd0aC0xO3N3aXRjaChBdCl7Y2FzZSA4OnRoaXMuJD13dFtmbi0xXTticmVhaztjYXNlIDk6Y2FzZSAxMTpjYXNlIDEyOnRoaXMuJD13dFtmbl07YnJlYWs7Y2FzZSAxMDpjYXNlIDEzOnRoaXMuJD13dFtmbi0xXSt3dFtmbl07YnJlYWs7Y2FzZSAxNDpjYXNlIDE1OnRoaXMuJD13dFtmbi0xXSsifiIrd3RbZm5dKyJ+IjticmVhaztjYXNlIDE2OlVuLmFkZFJlbGF0aW9uKHd0W2ZuXSk7YnJlYWs7Y2FzZSAxNzp3dFtmbi0xXS50aXRsZT1Vbi5jbGVhbnVwTGFiZWwod3RbZm5dKSxVbi5hZGRSZWxhdGlvbih3dFtmbi0xXSk7YnJlYWs7Y2FzZSAyNzp0aGlzLiQ9d3RbZm5dLnRyaW0oKSxVbi5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMjg6Y2FzZSAyOTp0aGlzLiQ9d3RbZm5dLnRyaW0oKSxVbi5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMzA6VW4uYWRkQ2xhc3Nlc1RvTmFtZXNwYWNlKHd0W2ZuLTNdLHd0W2ZuLTFdKTticmVhaztjYXNlIDMxOlVuLmFkZENsYXNzZXNUb05hbWVzcGFjZSh3dFtmbi00XSx3dFtmbi0xXSk7YnJlYWs7Y2FzZSAzMjp0aGlzLiQ9d3RbZm5dLFVuLmFkZE5hbWVzcGFjZSh3dFtmbl0pO2JyZWFrO2Nhc2UgMzM6dGhpcy4kPVt3dFtmbl1dO2JyZWFrO2Nhc2UgMzQ6dGhpcy4kPVt3dFtmbi0xXV07YnJlYWs7Y2FzZSAzNTp3dFtmbl0udW5zaGlmdCh3dFtmbi0yXSksdGhpcy4kPXd0W2ZuXTticmVhaztjYXNlIDM3OlVuLnNldENzc0NsYXNzKHd0W2ZuLTJdLHd0W2ZuXSk7YnJlYWs7Y2FzZSAzODpVbi5hZGRNZW1iZXJzKHd0W2ZuLTNdLHd0W2ZuLTFdKTticmVhaztjYXNlIDM5OlVuLnNldENzc0NsYXNzKHd0W2ZuLTVdLHd0W2ZuLTNdKSxVbi5hZGRNZW1iZXJzKHd0W2ZuLTVdLHd0W2ZuLTFdKTticmVhaztjYXNlIDQwOnRoaXMuJD13dFtmbl0sVW4uYWRkQ2xhc3Mod3RbZm5dKTticmVhaztjYXNlIDQxOnRoaXMuJD13dFtmbi0xXSxVbi5hZGRDbGFzcyh3dFtmbi0xXSksVW4uc2V0Q2xhc3NMYWJlbCh3dFtmbi0xXSx3dFtmbl0pO2JyZWFrO2Nhc2UgNDI6VW4uYWRkQW5ub3RhdGlvbih3dFtmbl0sd3RbZm4tMl0pO2JyZWFrO2Nhc2UgNDM6dGhpcy4kPVt3dFtmbl1dO2JyZWFrO2Nhc2UgNDQ6d3RbZm5dLnB1c2god3RbZm4tMV0pLHRoaXMuJD13dFtmbl07YnJlYWs7Y2FzZSA0NTpicmVhaztjYXNlIDQ2OlVuLmFkZE1lbWJlcih3dFtmbi0xXSxVbi5jbGVhbnVwTGFiZWwod3RbZm5dKSk7YnJlYWs7Y2FzZSA0NzpicmVhaztjYXNlIDQ4OmJyZWFrO2Nhc2UgNDk6dGhpcy4kPXtpZDE6d3RbZm4tMl0saWQyOnd0W2ZuXSxyZWxhdGlvbjp3dFtmbi0xXSxyZWxhdGlvblRpdGxlMToibm9uZSIscmVsYXRpb25UaXRsZTI6Im5vbmUifTticmVhaztjYXNlIDUwOnRoaXMuJD17aWQxOnd0W2ZuLTNdLGlkMjp3dFtmbl0scmVsYXRpb246d3RbZm4tMV0scmVsYXRpb25UaXRsZTE6d3RbZm4tMl0scmVsYXRpb25UaXRsZTI6Im5vbmUifTticmVhaztjYXNlIDUxOnRoaXMuJD17aWQxOnd0W2ZuLTNdLGlkMjp3dFtmbl0scmVsYXRpb246d3RbZm4tMl0scmVsYXRpb25UaXRsZTE6Im5vbmUiLHJlbGF0aW9uVGl0bGUyOnd0W2ZuLTFdfTticmVhaztjYXNlIDUyOnRoaXMuJD17aWQxOnd0W2ZuLTRdLGlkMjp3dFtmbl0scmVsYXRpb246d3RbZm4tMl0scmVsYXRpb25UaXRsZTE6d3RbZm4tM10scmVsYXRpb25UaXRsZTI6d3RbZm4tMV19O2JyZWFrO2Nhc2UgNTM6VW4uYWRkTm90ZSh3dFtmbl0sd3RbZm4tMV0pO2JyZWFrO2Nhc2UgNTQ6VW4uYWRkTm90ZSh3dFtmbl0pO2JyZWFrO2Nhc2UgNTU6VW4uc2V0RGlyZWN0aW9uKCJUQiIpO2JyZWFrO2Nhc2UgNTY6VW4uc2V0RGlyZWN0aW9uKCJCVCIpO2JyZWFrO2Nhc2UgNTc6VW4uc2V0RGlyZWN0aW9uKCJSTCIpO2JyZWFrO2Nhc2UgNTg6VW4uc2V0RGlyZWN0aW9uKCJMUiIpO2JyZWFrO2Nhc2UgNTk6dGhpcy4kPXt0eXBlMTp3dFtmbi0yXSx0eXBlMjp3dFtmbl0sbGluZVR5cGU6d3RbZm4tMV19O2JyZWFrO2Nhc2UgNjA6dGhpcy4kPXt0eXBlMToibm9uZSIsdHlwZTI6d3RbZm5dLGxpbmVUeXBlOnd0W2ZuLTFdfTticmVhaztjYXNlIDYxOnRoaXMuJD17dHlwZTE6d3RbZm4tMV0sdHlwZTI6Im5vbmUiLGxpbmVUeXBlOnd0W2ZuXX07YnJlYWs7Y2FzZSA2Mjp0aGlzLiQ9e3R5cGUxOiJub25lIix0eXBlMjoibm9uZSIsbGluZVR5cGU6d3RbZm5dfTticmVhaztjYXNlIDYzOnRoaXMuJD1Vbi5yZWxhdGlvblR5cGUuQUdHUkVHQVRJT047YnJlYWs7Y2FzZSA2NDp0aGlzLiQ9VW4ucmVsYXRpb25UeXBlLkVYVEVOU0lPTjticmVhaztjYXNlIDY1OnRoaXMuJD1Vbi5yZWxhdGlvblR5cGUuQ09NUE9TSVRJT047YnJlYWs7Y2FzZSA2Njp0aGlzLiQ9VW4ucmVsYXRpb25UeXBlLkRFUEVOREVOQ1k7YnJlYWs7Y2FzZSA2Nzp0aGlzLiQ9VW4ucmVsYXRpb25UeXBlLkxPTExJUE9QO2JyZWFrO2Nhc2UgNjg6dGhpcy4kPVVuLmxpbmVUeXBlLkxJTkU7YnJlYWs7Y2FzZSA2OTp0aGlzLiQ9VW4ubGluZVR5cGUuRE9UVEVEX0xJTkU7YnJlYWs7Y2FzZSA3MDpjYXNlIDc2OnRoaXMuJD13dFtmbi0yXSxVbi5zZXRDbGlja0V2ZW50KHd0W2ZuLTFdLHd0W2ZuXSk7YnJlYWs7Y2FzZSA3MTpjYXNlIDc3OnRoaXMuJD13dFtmbi0zXSxVbi5zZXRDbGlja0V2ZW50KHd0W2ZuLTJdLHd0W2ZuLTFdKSxVbi5zZXRUb29sdGlwKHd0W2ZuLTJdLHd0W2ZuXSk7YnJlYWs7Y2FzZSA3Mjp0aGlzLiQ9d3RbZm4tMl0sVW4uc2V0TGluayh3dFtmbi0xXSx3dFtmbl0pO2JyZWFrO2Nhc2UgNzM6dGhpcy4kPXd0W2ZuLTNdLFVuLnNldExpbmsod3RbZm4tMl0sd3RbZm4tMV0sd3RbZm5dKTticmVhaztjYXNlIDc0OnRoaXMuJD13dFtmbi0zXSxVbi5zZXRMaW5rKHd0W2ZuLTJdLHd0W2ZuLTFdKSxVbi5zZXRUb29sdGlwKHd0W2ZuLTJdLHd0W2ZuXSk7YnJlYWs7Y2FzZSA3NTp0aGlzLiQ9d3RbZm4tNF0sVW4uc2V0TGluayh3dFtmbi0zXSx3dFtmbi0yXSx3dFtmbl0pLFVuLnNldFRvb2x0aXAod3RbZm4tM10sd3RbZm4tMV0pO2JyZWFrO2Nhc2UgNzg6dGhpcy4kPXd0W2ZuLTNdLFVuLnNldENsaWNrRXZlbnQod3RbZm4tMl0sd3RbZm4tMV0sd3RbZm5dKTticmVhaztjYXNlIDc5OnRoaXMuJD13dFtmbi00XSxVbi5zZXRDbGlja0V2ZW50KHd0W2ZuLTNdLHd0W2ZuLTJdLHd0W2ZuLTFdKSxVbi5zZXRUb29sdGlwKHd0W2ZuLTNdLHd0W2ZuXSk7YnJlYWs7Y2FzZSA4MDp0aGlzLiQ9d3RbZm4tM10sVW4uc2V0TGluayh3dFtmbi0yXSx3dFtmbl0pO2JyZWFrO2Nhc2UgODE6dGhpcy4kPXd0W2ZuLTRdLFVuLnNldExpbmsod3RbZm4tM10sd3RbZm4tMV0sd3RbZm5dKTticmVhaztjYXNlIDgyOnRoaXMuJD13dFtmbi00XSxVbi5zZXRMaW5rKHd0W2ZuLTNdLHd0W2ZuLTFdKSxVbi5zZXRUb29sdGlwKHd0W2ZuLTNdLHd0W2ZuXSk7YnJlYWs7Y2FzZSA4Mzp0aGlzLiQ9d3RbZm4tNV0sVW4uc2V0TGluayh3dFtmbi00XSx3dFtmbi0yXSx3dFtmbl0pLFVuLnNldFRvb2x0aXAod3RbZm4tNF0sd3RbZm4tMV0pO2JyZWFrO2Nhc2UgODQ6dGhpcy4kPXd0W2ZuLTJdLFVuLnNldENzc1N0eWxlKHd0W2ZuLTFdLHd0W2ZuXSk7YnJlYWs7Y2FzZSA4NTpVbi5zZXRDc3NDbGFzcyh3dFtmbi0xXSx3dFtmbl0pO2JyZWFrO2Nhc2UgODY6dGhpcy4kPVt3dFtmbl1dO2JyZWFrO2Nhc2UgODc6d3RbZm4tMl0ucHVzaCh3dFtmbl0pLHRoaXMuJD13dFtmbi0yXTticmVhaztjYXNlIDg5OnRoaXMuJD13dFtmbi0xXSt3dFtmbl07YnJlYWt9fSx0YWJsZTpbezM6MSw0OjIsNTozLDY6NCw3OlsxLDZdLDEwOjUsMTY6MzcsMTc6MjAsMTg6MzgsMjA6NywyMjo4LDIzOjksMjQ6MTAsMjU6MTEsMjY6MTIsMjc6MTMsMjg6MTQsMjk6MTUsMzA6MTYsMzE6cywzMzp1LDM1OmQsMzY6MjEsNDA6cCw0MToyMiw0NDp2LDQ1OmIsNDc6eSw0ODpULDUwOl8sNTI6QSw1MzpQLDU0OlIsNTU6Riw1NjpqLDY2OkssNjc6ZWUsNjk6aWUsNzM6b2UsNzQ6cGUsNzY6YmUsODA6YWUsOTU6bmUsOTc6c2UsOTg6ZGV9LHsxOlszXX0sezE6WzIsMV19LHsxOlsyLDJdfSx7MTpbMiwzXX0saShYLFsyLDVdLHs4OlsxLDQ2XX0pLHs4OlsxLDQ3XX0saShnZSxbMiwxNl0sezIxOlsxLDQ4XX0pLGkoZ2UsWzIsMThdKSxpKGdlLFsyLDE5XSksaShnZSxbMiwyMF0pLGkoZ2UsWzIsMjFdKSxpKGdlLFsyLDIyXSksaShnZSxbMiwyM10pLGkoZ2UsWzIsMjRdKSxpKGdlLFsyLDI1XSksaShnZSxbMiwyNl0pLHszMjpbMSw0OV19LHszNDpbMSw1MF19LGkoZ2UsWzIsMjldKSxpKGdlLFsyLDQ1XSx7NDk6NTEsNTc6NTQsNTg6NTUsMTM6WzEsNTJdLDIxOlsxLDUzXSw1OTpXLDYwOnhlLDYxOlUsNjI6RmUsNjM6UGUsNjQ6amUsNjU6SWV9KSx7Mzc6WzEsNjNdfSxpKFNlLFsyLDM2XSx7Mzc6WzEsNjVdLDQyOlsxLDY0XX0pLGkoZ2UsWzIsNDddKSxpKGdlLFsyLDQ4XSksezE2OjY2LDc0OnBlLDgwOmFlLDk1Om5lLDk3OnNlfSx7MTY6MzcsMTc6NjcsMTg6MzgsNzQ6cGUsODA6YWUsOTU6bmUsOTc6c2UsOTg6ZGV9LHsxNjozNywxNzo2OCwxODozOCw3NDpwZSw4MDphZSw5NTpuZSw5NzpzZSw5ODpkZX0sezE2OjM3LDE3OjY5LDE4OjM4LDc0OnBlLDgwOmFlLDk1Om5lLDk3OnNlLDk4OmRlfSx7NzQ6WzEsNzBdfSx7MTM6WzEsNzFdfSx7MTY6MzcsMTc6NzIsMTg6MzgsNzQ6cGUsODA6YWUsOTU6bmUsOTc6c2UsOTg6ZGV9LHsxMzpDZSw1MTo3M30saShnZSxbMiw1NV0pLGkoZ2UsWzIsNTZdKSxpKGdlLFsyLDU3XSksaShnZSxbMiw1OF0pLGkoa2UsWzIsMTFdLHsxNjozNywxODozOCwxNzo3NSwxOTpbMSw3Nl0sNzQ6cGUsODA6YWUsOTU6bmUsOTc6c2UsOTg6ZGV9KSxpKGtlLFsyLDEyXSx7MTk6WzEsNzddfSksezE1Ojc4LDE2Ojc5LDc0OnBlLDgwOmFlLDk1Om5lLDk3OnNlfSx7MTY6MzcsMTc6ODAsMTg6MzgsNzQ6cGUsODA6YWUsOTU6bmUsOTc6c2UsOTg6ZGV9LGkoS2UsWzIsMTEyXSksaShLZSxbMiwxMTNdKSxpKEtlLFsyLDExNF0pLGkoS2UsWzIsMTE1XSksaShbMSw4LDksMTIsMTMsMTksMjEsMzcsMzksNDIsNTksNjAsNjEsNjIsNjMsNjQsNjUsNzAsNzJdLFsyLDExNl0pLGkoWCxbMiw2XSx7MTA6NSwyMDo3LDIyOjgsMjM6OSwyNDoxMCwyNToxMSwyNjoxMiwyNzoxMywyODoxNCwyOToxNSwzMDoxNiwxNzoyMCwzNjoyMSw0MToyMiwxNjozNywxODozOCw1OjgxLDMxOnMsMzM6dSwzNTpkLDQwOnAsNDQ6diw0NTpiLDQ3OnksNDg6VCw1MDpfLDUyOkEsNTM6UCw1NDpSLDU1OkYsNTY6aiw2NjpLLDY3OmVlLDY5OmllLDczOm9lLDc0OnBlLDc2OmJlLDgwOmFlLDk1Om5lLDk3OnNlLDk4OmRlfSksezU6ODIsMTA6NSwxNjozNywxNzoyMCwxODozOCwyMDo3LDIyOjgsMjM6OSwyNDoxMCwyNToxMSwyNjoxMiwyNzoxMywyODoxNCwyOToxNSwzMDoxNiwzMTpzLDMzOnUsMzU6ZCwzNjoyMSw0MDpwLDQxOjIyLDQ0OnYsNDU6Yiw0Nzp5LDQ4OlQsNTA6Xyw1MjpBLDUzOlAsNTQ6Uiw1NTpGLDU2OmosNjY6Syw2NzplZSw2OTppZSw3MzpvZSw3NDpwZSw3NjpiZSw4MDphZSw5NTpuZSw5NzpzZSw5ODpkZX0saShnZSxbMiwxN10pLGkoZ2UsWzIsMjddKSxpKGdlLFsyLDI4XSksezEzOlsxLDg0XSwxNjozNywxNzo4MywxODozOCw3NDpwZSw4MDphZSw5NTpuZSw5NzpzZSw5ODpkZX0sezQ5Ojg1LDU3OjU0LDU4OjU1LDU5OlcsNjA6eGUsNjE6VSw2MjpGZSw2MzpQZSw2NDpqZSw2NTpJZX0saShnZSxbMiw0Nl0pLHs1ODo4Niw2NDpqZSw2NTpJZX0saShGdCxbMiw2Ml0sezU3Ojg3LDU5OlcsNjA6eGUsNjE6VSw2MjpGZSw2MzpQZX0pLGkoTmUsWzIsNjNdKSxpKE5lLFsyLDY0XSksaShOZSxbMiw2NV0pLGkoTmUsWzIsNjZdKSxpKE5lLFsyLDY3XSksaShnbixbMiw2OF0pLGkoZ24sWzIsNjldKSx7ODpbMSw4OV0sMjM6OTAsMzg6ODgsNDE6MjIsNDQ6dn0sezE2OjkxLDc0OnBlLDgwOmFlLDk1Om5lLDk3OnNlfSx7NDM6OTIsNDc6X3R9LHs0NjpbMSw5NF19LHsxMzpbMSw5NV19LHsxMzpbMSw5Nl19LHs3MDpbMSw5N10sNzI6WzEsOThdfSx7MjE6RXQsNzM6R3QsNzQ6bG4sNzU6OTksNzc6MTAwLDc5OjEwMSw4MDp4dCw4MTpQdCw4MjpRZSw4MzpEdCw4NDprdCw4NTpPbn0sezc0OlsxLDExMV19LHsxMzpDZSw1MToxMTJ9LGkoZ2UsWzIsNTRdKSxpKGdlLFsyLDExN10pLGkoa2UsWzIsMTNdKSxpKGtlLFsyLDE0XSksaShrZSxbMiwxNV0pLHszNzpbMiwzMl19LHsxNToxMTMsMTY6NzksMzc6WzIsOV0sNzQ6cGUsODA6YWUsOTU6bmUsOTc6c2V9LGkoaHQsWzIsNDBdLHsxMToxMTQsMTI6WzEsMTE1XX0pLGkoWCxbMiw3XSksezk6WzEsMTE2XX0saSh6cixbMiw0OV0pLHsxNjozNywxNzoxMTcsMTg6MzgsNzQ6cGUsODA6YWUsOTU6bmUsOTc6c2UsOTg6ZGV9LHsxMzpbMSwxMTldLDE2OjM3LDE3OjExOCwxODozOCw3NDpwZSw4MDphZSw5NTpuZSw5NzpzZSw5ODpkZX0saShGdCxbMiw2MV0sezU3OjEyMCw1OTpXLDYwOnhlLDYxOlUsNjI6RmUsNjM6UGV9KSxpKEZ0LFsyLDYwXSksezM5OlsxLDEyMV19LHsyMzo5MCwzODoxMjIsNDE6MjIsNDQ6dn0sezg6WzEsMTIzXSwzOTpbMiwzM119LGkoU2UsWzIsMzddLHszNzpbMSwxMjRdfSksezM5OlsxLDEyNV19LHszOTpbMiw0M10sNDM6MTI2LDQ3Ol90fSx7MTY6MzcsMTc6MTI3LDE4OjM4LDc0OnBlLDgwOmFlLDk1Om5lLDk3OnNlLDk4OmRlfSxpKGdlLFsyLDcwXSx7MTM6WzEsMTI4XX0pLGkoZ2UsWzIsNzJdLHsxMzpbMSwxMzBdLDY4OlsxLDEyOV19KSxpKGdlLFsyLDc2XSx7MTM6WzEsMTMxXSw3MTpbMSwxMzJdfSksezEzOlsxLDEzM119LGkoZ2UsWzIsODRdLHs3ODpbMSwxMzRdfSksaSh5dCxbMiw4Nl0sezc5OjEzNSwyMTpFdCw3MzpHdCw3NDpsbiw4MDp4dCw4MTpQdCw4MjpRZSw4MzpEdCw4NDprdCw4NTpPbn0pLGkoamksWzIsODhdKSxpKGppLFsyLDkwXSksaShqaSxbMiw5MV0pLGkoamksWzIsOTJdKSxpKGppLFsyLDkzXSksaShqaSxbMiw5NF0pLGkoamksWzIsOTVdKSxpKGppLFsyLDk2XSksaShqaSxbMiw5N10pLGkoamksWzIsOThdKSxpKGdlLFsyLDg1XSksaShnZSxbMiw1M10pLHszNzpbMiwxMF19LGkoaHQsWzIsNDFdKSx7MTM6WzEsMTM2XX0sezE6WzIsNF19LGkoenIsWzIsNTFdKSxpKHpyLFsyLDUwXSksezE2OjM3LDE3OjEzNywxODozOCw3NDpwZSw4MDphZSw5NTpuZSw5NzpzZSw5ODpkZX0saShGdCxbMiw1OV0pLGkoZ2UsWzIsMzBdKSx7Mzk6WzEsMTM4XX0sezIzOjkwLDM4OjEzOSwzOTpbMiwzNF0sNDE6MjIsNDQ6dn0sezQzOjE0MCw0NzpfdH0saShTZSxbMiwzOF0pLHszOTpbMiw0NF19LGkoZ2UsWzIsNDJdKSxpKGdlLFsyLDcxXSksaShnZSxbMiw3M10pLGkoZ2UsWzIsNzRdLHs2ODpbMSwxNDFdfSksaShnZSxbMiw3N10pLGkoZ2UsWzIsNzhdLHsxMzpbMSwxNDJdfSksaShnZSxbMiw4MF0sezEzOlsxLDE0NF0sNjg6WzEsMTQzXX0pLHsyMTpFdCw3MzpHdCw3NDpsbiw3NzoxNDUsNzk6MTAxLDgwOnh0LDgxOlB0LDgyOlFlLDgzOkR0LDg0Omt0LDg1Ok9ufSxpKGppLFsyLDg5XSksezE0OlsxLDE0Nl19LGkoenIsWzIsNTJdKSxpKGdlLFsyLDMxXSksezM5OlsyLDM1XX0sezM5OlsxLDE0N119LGkoZ2UsWzIsNzVdKSxpKGdlLFsyLDc5XSksaShnZSxbMiw4MV0pLGkoZ2UsWzIsODJdLHs2ODpbMSwxNDhdfSksaSh5dCxbMiw4N10sezc5OjEzNSwyMTpFdCw3MzpHdCw3NDpsbiw4MDp4dCw4MTpQdCw4MjpRZSw4MzpEdCw4NDprdCw4NTpPbn0pLGkoaHQsWzIsOF0pLGkoU2UsWzIsMzldKSxpKGdlLFsyLDgzXSldLGRlZmF1bHRBY3Rpb25zOnsyOlsyLDFdLDM6WzIsMl0sNDpbMiwzXSw3ODpbMiwzMl0sMTEzOlsyLDEwXSwxMTY6WzIsNF0sMTI2OlsyLDQ0XSwxMzk6WzIsMzVdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKFRyLEZuKXtpZihGbi5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKFRyKTtlbHNle3ZhciBxbj1uZXcgRXJyb3IoVHIpO3Rocm93IHFuLmhhc2g9Rm4scW59fSxwYXJzZTpmdW5jdGlvbihUcil7dmFyIEZuPXRoaXMscW49WzBdLFVuPVtdLEF0PVtudWxsXSx3dD1bXSxvbj10aGlzLnRhYmxlLGZuPSIiLEFuPTAsb289MCxqbz0yLCRvPTEsUGE9d3Quc2xpY2UuY2FsbChhcmd1bWVudHMsMSksd289T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxfcz17eXk6e319O2Zvcih2YXIgdGwgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSx0bCkmJihfcy55eVt0bF09dGhpcy55eVt0bF0pO3dvLnNldElucHV0KFRyLF9zLnl5KSxfcy55eS5sZXhlcj13byxfcy55eS5wYXJzZXI9dGhpcyx0eXBlb2Ygd28ueXlsbG9jPiJ1IiYmKHdvLnl5bGxvYz17fSk7dmFyIGRhPXdvLnl5bGxvYzt3dC5wdXNoKGRhKTt2YXIgajA9d28ub3B0aW9ucyYmd28ub3B0aW9ucy5yYW5nZXM7dHlwZW9mIF9zLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPV9zLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIHBtKCl7dmFyIGdhO3JldHVybiBnYT1Vbi5wb3AoKXx8d28ubGV4KCl8fCRvLHR5cGVvZiBnYSE9Im51bWJlciImJihnYSBpbnN0YW5jZW9mIEFycmF5JiYoVW49Z2EsZ2E9VW4ucG9wKCkpLGdhPUZuLnN5bWJvbHNfW2dhXXx8Z2EpLGdhfWZvcih2YXIgTWwsWGMsQmMsamEsT3U9e30sU2EsUG8sRmMseGE7Oyl7aWYoWGM9cW5bcW4ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbWGNdP0JjPXRoaXMuZGVmYXVsdEFjdGlvbnNbWGNdOigoTWw9PT1udWxsfHx0eXBlb2YgTWw+InUiKSYmKE1sPXBtKCkpLEJjPW9uW1hjXSYmb25bWGNdW01sXSksdHlwZW9mIEJjPiJ1Inx8IUJjLmxlbmd0aHx8IUJjWzBdKXt2YXIgQmE9IiI7eGE9W107Zm9yKFNhIGluIG9uW1hjXSl0aGlzLnRlcm1pbmFsc19bU2FdJiZTYT5qbyYmeGEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW1NhXSsiJyIpO3dvLnNob3dQb3NpdGlvbj9CYT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhBbisxKStgOgpgK3dvLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGAreGEuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tNbF18fE1sKSsiJyI6QmE9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoQW4rMSkrIjogVW5leHBlY3RlZCAiKyhNbD09JG8/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bTWxdfHxNbCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoQmEse3RleHQ6d28ubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW01sXXx8TWwsbGluZTp3by55eWxpbmVubyxsb2M6ZGEsZXhwZWN0ZWQ6eGF9KX1pZihCY1swXWluc3RhbmNlb2YgQXJyYXkmJkJjLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrWGMrIiwgdG9rZW46ICIrTWwpO3N3aXRjaChCY1swXSl7Y2FzZSAxOnFuLnB1c2goTWwpLEF0LnB1c2god28ueXl0ZXh0KSx3dC5wdXNoKHdvLnl5bGxvYykscW4ucHVzaChCY1sxXSksTWw9bnVsbCxvbz13by55eWxlbmcsZm49d28ueXl0ZXh0LEFuPXdvLnl5bGluZW5vLGRhPXdvLnl5bGxvYzticmVhaztjYXNlIDI6aWYoUG89dGhpcy5wcm9kdWN0aW9uc19bQmNbMV1dWzFdLE91LiQ9QXRbQXQubGVuZ3RoLVBvXSxPdS5fJD17Zmlyc3RfbGluZTp3dFt3dC5sZW5ndGgtKFBvfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6d3Rbd3QubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46d3Rbd3QubGVuZ3RoLShQb3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp3dFt3dC5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGowJiYoT3UuXyQucmFuZ2U9W3d0W3d0Lmxlbmd0aC0oUG98fDEpXS5yYW5nZVswXSx3dFt3dC5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxqYT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoT3UsW2ZuLG9vLEFuLF9zLnl5LEJjWzFdLEF0LHd0XS5jb25jYXQoUGEpKSx0eXBlb2YgamE8InUiKXJldHVybiBqYTtQbyYmKHFuPXFuLnNsaWNlKDAsLTEqUG8qMiksQXQ9QXQuc2xpY2UoMCwtMSpQbyksd3Q9d3Quc2xpY2UoMCwtMSpQbykpLHFuLnB1c2godGhpcy5wcm9kdWN0aW9uc19bQmNbMV1dWzBdKSxBdC5wdXNoKE91LiQpLHd0LnB1c2goT3UuXyQpLEZjPW9uW3FuW3FuLmxlbmd0aC0yXV1bcW5bcW4ubGVuZ3RoLTFdXSxxbi5wdXNoKEZjKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sTWE9ZnVuY3Rpb24oKXt2YXIgYW89e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oRm4scW4pe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoRm4scW4pO2Vsc2UgdGhyb3cgbmV3IEVycm9yKEZuKX0sc2V0SW5wdXQ6ZnVuY3Rpb24oVHIsRm4pe3JldHVybiB0aGlzLnl5PUZufHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1Ucix0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgVHI9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPVRyLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1Ucix0aGlzLm1hdGNoZWQrPVRyO3ZhciBGbj1Uci5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIEZuPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxUcn0sdW5wdXQ6ZnVuY3Rpb24oVHIpe3ZhciBGbj1Uci5sZW5ndGgscW49VHIuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1Ucit0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtRm4pLHRoaXMub2Zmc2V0LT1Gbjt2YXIgVW49dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSkscW4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1xbi5sZW5ndGgtMSk7dmFyIEF0PXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpxbj8ocW4ubGVuZ3RoPT09VW4ubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStVbltVbi5sZW5ndGgtcW4ubGVuZ3RoXS5sZW5ndGgtcW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1Gbn0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtBdFswXSxBdFswXSt0aGlzLnl5bGVuZy1Gbl0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKFRyKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoVHIpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIFRyPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oVHIubGVuZ3RoPjIwPyIuLi4iOiIiKStUci5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciBUcj10aGlzLm1hdGNoO3JldHVybiBUci5sZW5ndGg8MjAmJihUcis9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtVHIubGVuZ3RoKSksKFRyLnN1YnN0cigwLDIwKSsoVHIubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBUcj10aGlzLnBhc3RJbnB1dCgpLEZuPW5ldyBBcnJheShUci5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBUcit0aGlzLnVwY29taW5nSW5wdXQoKStgCmArRm4rIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKFRyLEZuKXt2YXIgcW4sVW4sQXQ7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKEF0PXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKEF0Lnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLFVuPVRyWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxVbiYmKHRoaXMueXlsaW5lbm8rPVVuLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOlVuP1VuW1VuLmxlbmd0aC0xXS5sZW5ndGgtVW5bVW4ubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rVHJbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9VHJbMF0sdGhpcy5tYXRjaCs9VHJbMF0sdGhpcy5tYXRjaGVzPVRyLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKFRyWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1UclswXSxxbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxGbix0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxxbilyZXR1cm4gcW47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIHd0IGluIEF0KXRoaXNbd3RdPUF0W3d0XTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBUcixGbixxbixVbjt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBBdD10aGlzLl9jdXJyZW50UnVsZXMoKSx3dD0wO3d0PEF0Lmxlbmd0aDt3dCsrKWlmKHFuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbQXRbd3RdXSkscW4mJighRm58fHFuWzBdLmxlbmd0aD5GblswXS5sZW5ndGgpKXtpZihGbj1xbixVbj13dCx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihUcj10aGlzLnRlc3RfbWF0Y2gocW4sQXRbd3RdKSxUciE9PSExKXJldHVybiBUcjtpZih0aGlzLl9iYWNrdHJhY2spe0ZuPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIEZuPyhUcj10aGlzLnRlc3RfbWF0Y2goRm4sQXRbVW5dKSxUciE9PSExP1RyOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgRm49dGhpcy5uZXh0KCk7cmV0dXJuIEZufHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihGbil7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKEZuKX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgRm49dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gRm4+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbihGbil7cmV0dXJuIEZuPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoRm58fDApLEZuPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbRm5dOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKEZuKXt0aGlzLmJlZ2luKEZuKX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6e30scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihGbixxbixVbixBdCl7c3dpdGNoKFVuKXtjYXNlIDA6cmV0dXJuIDUzO2Nhc2UgMTpyZXR1cm4gNTQ7Y2FzZSAyOnJldHVybiA1NTtjYXNlIDM6cmV0dXJuIDU2O2Nhc2UgNDpicmVhaztjYXNlIDU6YnJlYWs7Y2FzZSA2OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwzMTtjYXNlIDc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDg6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDMzO2Nhc2UgOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgMTA6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMTE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTI6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMTM6cmV0dXJuIDg7Y2FzZSAxNDpicmVhaztjYXNlIDE1OnJldHVybiA3O2Nhc2UgMTY6cmV0dXJuIDc7Y2FzZSAxNzpyZXR1cm4iRURHRV9TVEFURSI7Y2FzZSAxODp0aGlzLmJlZ2luKCJjYWxsYmFja19uYW1lIik7YnJlYWs7Y2FzZSAxOTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMDp0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiY2FsbGJhY2tfYXJncyIpO2JyZWFrO2Nhc2UgMjE6cmV0dXJuIDcwO2Nhc2UgMjI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjM6cmV0dXJuIDcxO2Nhc2UgMjQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjU6cmV0dXJuIlNUUiI7Y2FzZSAyNjp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDI3OnJldHVybiA3MztjYXNlIDI4OnJldHVybiB0aGlzLmJlZ2luKCJuYW1lc3BhY2UiKSw0MDtjYXNlIDI5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksODtjYXNlIDMwOmJyZWFrO2Nhc2UgMzE6cmV0dXJuIHRoaXMuYmVnaW4oIm5hbWVzcGFjZS1ib2R5IiksMzc7Y2FzZSAzMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDM5O2Nhc2UgMzM6cmV0dXJuIkVPRl9JTl9TVFJVQ1QiO2Nhc2UgMzQ6cmV0dXJuIDg7Y2FzZSAzNTpicmVhaztjYXNlIDM2OnJldHVybiJFREdFX1NUQVRFIjtjYXNlIDM3OnJldHVybiB0aGlzLmJlZ2luKCJjbGFzcyIpLDQ0O2Nhc2UgMzg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw4O2Nhc2UgMzk6YnJlYWs7Y2FzZSA0MDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSwzOTtjYXNlIDQxOnJldHVybiB0aGlzLmJlZ2luKCJjbGFzcy1ib2R5IiksMzc7Y2FzZSA0MjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDM5O2Nhc2UgNDM6cmV0dXJuIkVPRl9JTl9TVFJVQ1QiO2Nhc2UgNDQ6cmV0dXJuIkVER0VfU1RBVEUiO2Nhc2UgNDU6cmV0dXJuIk9QRU5fSU5fU1RSVUNUIjtjYXNlIDQ2OmJyZWFrO2Nhc2UgNDc6cmV0dXJuIk1FTUJFUiI7Y2FzZSA0ODpyZXR1cm4gNzY7Y2FzZSA0OTpyZXR1cm4gNjY7Y2FzZSA1MDpyZXR1cm4gNjc7Y2FzZSA1MTpyZXR1cm4gNjk7Y2FzZSA1MjpyZXR1cm4gNTA7Y2FzZSA1MzpyZXR1cm4gNTI7Y2FzZSA1NDpyZXR1cm4gNDU7Y2FzZSA1NTpyZXR1cm4gNDY7Y2FzZSA1NjpyZXR1cm4gNzI7Y2FzZSA1Nzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA1ODpyZXR1cm4iR0VORVJJQ1RZUEUiO2Nhc2UgNTk6dGhpcy5iZWdpbigiZ2VuZXJpYyIpO2JyZWFrO2Nhc2UgNjA6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNjE6cmV0dXJuIkJRVU9URV9TVFIiO2Nhc2UgNjI6dGhpcy5iZWdpbigiYnFzdHJpbmciKTticmVhaztjYXNlIDYzOnJldHVybiA2ODtjYXNlIDY0OnJldHVybiA2ODtjYXNlIDY1OnJldHVybiA2ODtjYXNlIDY2OnJldHVybiA2ODtjYXNlIDY3OnJldHVybiA2MDtjYXNlIDY4OnJldHVybiA2MDtjYXNlIDY5OnJldHVybiA2MjtjYXNlIDcwOnJldHVybiA2MjtjYXNlIDcxOnJldHVybiA2MTtjYXNlIDcyOnJldHVybiA1OTtjYXNlIDczOnJldHVybiA2MztjYXNlIDc0OnJldHVybiA2NDtjYXNlIDc1OnJldHVybiA2NTtjYXNlIDc2OnJldHVybiAyMTtjYXNlIDc3OnJldHVybiA0MjtjYXNlIDc4OnJldHVybiA5NTtjYXNlIDc5OnJldHVybiJET1QiO2Nhc2UgODA6cmV0dXJuIlBMVVMiO2Nhc2UgODE6cmV0dXJuIDgxO2Nhc2UgODI6cmV0dXJuIDc4O2Nhc2UgODM6cmV0dXJuIDg0O2Nhc2UgODQ6cmV0dXJuIDg0O2Nhc2UgODU6cmV0dXJuIDg1O2Nhc2UgODY6cmV0dXJuIkVRVUFMUyI7Y2FzZSA4NzpyZXR1cm4iRVFVQUxTIjtjYXNlIDg4OnJldHVybiA3NDtjYXNlIDg5OnJldHVybiAxMjtjYXNlIDkwOnJldHVybiAxNDtjYXNlIDkxOnJldHVybiJQVU5DVFVBVElPTiI7Y2FzZSA5MjpyZXR1cm4gODA7Y2FzZSA5MzpyZXR1cm4gOTc7Y2FzZSA5NDpyZXR1cm4gODM7Y2FzZSA5NTpyZXR1cm4gODM7Y2FzZSA5NjpyZXR1cm4gOX19LHJ1bGVzOlsvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrQlRbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopLywvXig/OiUlKD8hXHspKlteXG5dKihccj9cbj8pKykvLC9eKD86JSVbXlxuXSooXHI/XG4pKikvLC9eKD86YWNjVGl0bGVccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKlx7XHMqKS8sL14oPzpbXH1dKS8sL14oPzpbXlx9XSopLywvXig/OlxzKihccj9cbikrKS8sL14oPzpccyspLywvXig/OmNsYXNzRGlhZ3JhbS12MlxiKS8sL14oPzpjbGFzc0RpYWdyYW1cYikvLC9eKD86XFtcKlxdKS8sL14oPzpjYWxsW1xzXSspLywvXig/OlwoW1xzXSpcKSkvLC9eKD86XCgpLywvXig/OlteKF0qKS8sL14oPzpcKSkvLC9eKD86W14pXSopLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OlsiXSkvLC9eKD86c3R5bGVcYikvLC9eKD86bmFtZXNwYWNlXGIpLywvXig/OlxzKihccj9cbikrKS8sL14oPzpccyspLywvXig/Olt7XSkvLC9eKD86W31dKS8sL14oPzokKS8sL14oPzpccyooXHI/XG4pKykvLC9eKD86XHMrKS8sL14oPzpcW1wqXF0pLywvXig/OmNsYXNzXGIpLywvXig/OlxzKihccj9cbikrKS8sL14oPzpccyspLywvXig/Olt9XSkvLC9eKD86W3tdKS8sL14oPzpbfV0pLywvXig/OiQpLywvXig/OlxbXCpcXSkvLC9eKD86W3tdKS8sL14oPzpbXG5dKS8sL14oPzpbXnt9XG5dKikvLC9eKD86Y3NzQ2xhc3NcYikvLC9eKD86Y2FsbGJhY2tcYikvLC9eKD86bGlua1xiKS8sL14oPzpjbGlja1xiKS8sL14oPzpub3RlIGZvclxiKS8sL14oPzpub3RlXGIpLywvXig/Ojw8KS8sL14oPzo+PikvLC9eKD86aHJlZlxiKS8sL14oPzpbfl0pLywvXig/Oltefl0qKS8sL14oPzp+KS8sL14oPzpbYF0pLywvXig/OlteYF0rKS8sL14oPzpbYF0pLywvXig/Ol9zZWxmXGIpLywvXig/Ol9ibGFua1xiKS8sL14oPzpfcGFyZW50XGIpLywvXig/Ol90b3BcYikvLC9eKD86XHMqPFx8KS8sL14oPzpccypcfD4pLywvXig/OlxzKj4pLywvXig/OlxzKjwpLywvXig/OlxzKlwqKS8sL14oPzpccypvXGIpLywvXig/OlxzKlwoXCkpLywvXig/Oi0tKS8sL14oPzpcLlwuKS8sL14oPzo6ezF9W146XG47XSspLywvXig/Ojp7M30pLywvXig/Oi0pLywvXig/OlwuKS8sL14oPzpcKykvLC9eKD86OikvLC9eKD86LCkvLC9eKD86IykvLC9eKD86IykvLC9eKD86JSkvLC9eKD86PSkvLC9eKD86PSkvLC9eKD86XHcrKS8sL14oPzpcWykvLC9eKD86XF0pLywvXig/OlshIiMkJSYnKissLS5gP1xcL10pLywvXig/OlswLTldKykvLC9eKD86W1x1MDBBQVx1MDBCNVx1MDBCQVx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XXxbXHUwMEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N118W1x1MDM3QS1cdTAzN0RcdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVdfFtcdTAzRjctXHUwNDgxXHUwNDhBLVx1MDUyN1x1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNUQwLVx1MDVFQV18W1x1MDVGMC1cdTA1RjJcdTA2MjAtXHUwNjRBXHUwNjZFXHUwNjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1MDZFNlx1MDZFRV18W1x1MDZFRlx1MDZGQS1cdTA2RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDQS1cdTA3RUFdfFtcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQwLVx1MDg1OFx1MDhBMF18W1x1MDhBMi1cdTA4QUNcdTA5MDQtXHUwOTM5XHUwOTNEXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk3MS1cdTA5NzddfFtcdTA5NzktXHUwOTdGXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXXxbXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RjBcdTA5RjFcdTBBMDUtXHUwQTBBXXxbXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzldfFtcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOF18W1x1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUxXHUwQjA1LVx1MEIwQ118W1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzRFx1MEI1Q118W1x1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNzFcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTldfFtcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMF18W1x1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzNcdTBDMzUtXHUwQzM5XHUwQzNEXXxbXHUwQzU4XHUwQzU5XHUwQzYwXHUwQzYxXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM118W1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDREVcdTBDRTBcdTBDRTFcdTBDRjFcdTBDRjJcdTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQxMF18W1x1MEQxMi1cdTBEM0FcdTBEM0RcdTBENEVcdTBENjBcdTBENjFcdTBEN0EtXHUwRDdGXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBEQjFdfFtcdTBEQjMtXHUwREJCXHUwREJEXHUwREMwLVx1MERDNlx1MEUwMS1cdTBFMzBcdTBFMzJcdTBFMzNcdTBFNDAtXHUwRTQ2XHUwRTgxXXxbXHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThEXHUwRTk0LVx1MEU5N1x1MEU5OS1cdTBFOUZcdTBFQTEtXHUwRUEzXXxbXHUwRUE1XHUwRUE3XHUwRUFBXHUwRUFCXHUwRUFELVx1MEVCMFx1MEVCMlx1MEVCM1x1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZdfFtcdTBFREMtXHUwRURGXHUwRjAwXHUwRjQwLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGODgtXHUwRjhDXHUxMDAwLVx1MTAyQV18W1x1MTAzRlx1MTA1MC1cdTEwNTVcdTEwNUEtXHUxMDVEXHUxMDYxXHUxMDY1XHUxMDY2XHUxMDZFLVx1MTA3MFx1MTA3NS1cdTEwODFdfFtcdTEwOEVcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXXxbXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBdfFtcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMF18W1x1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzgwLVx1MTM4Rlx1MTNBMC1cdTEzRjRcdTE0MDEtXHUxNjZDXXxbXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTFdfFtcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN118W1x1MTdEQ1x1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUNdfFtcdTE5NTAtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QzEtXHUxOUM3XHUxQTAwLVx1MUExNl18W1x1MUEyMC1cdTFBNTRcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFCQUVcdTFCQUZdfFtcdTFCQkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUxQzdEXHUxQ0U5LVx1MUNFQ118W1x1MUNFRS1cdTFDRjFcdTFDRjVcdTFDRjZcdTFEMDAtXHUxREJGXHUxRTAwLVx1MUYxNVx1MUYxOC1cdTFGMURdfFtcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXXxbXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNdfFtcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDcxXHUyMDdGXXxbXHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XXxbXHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE4M1x1MjE4NF18W1x1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRUVcdTJDRjJcdTJDRjNdfFtcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ4MC1cdTJEOTZcdTJEQTAtXHUyREE2XXxbXHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VdfFtcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkUyRlx1MzAwNVx1MzAwNlx1MzAzMS1cdTMwMzVcdTMwM0JcdTMwM0NdfFtcdTMwNDEtXHUzMDk2XHUzMDlELVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRF18W1x1MzEzMS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5RkNDXXxbXHVBMDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRcdUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYxRlx1QTYyQVx1QTYyQl18W1x1QTY0MC1cdUE2NkVcdUE2N0YtXHVBNjk3XHVBNkEwLVx1QTZFNVx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XXxbXHVBNzhCLVx1QTc4RVx1QTc5MC1cdUE3OTNcdUE3QTAtXHVBN0FBXHVBN0Y4LVx1QTgwMVx1QTgwMy1cdUE4MDVdfFtcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4NzNcdUE4ODItXHVBOEIzXHVBOEYyLVx1QThGN1x1QThGQl18W1x1QTkwQS1cdUE5MjVcdUE5MzAtXHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0ZcdUFBMDAtXHVBQTI4XXxbXHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTgwLVx1QUFBRlx1QUFCMVx1QUFCNV18W1x1QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRdfFtcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRV18W1x1QUJDMC1cdUFCRTJcdUFDMDAtXHVEN0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXXxbXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFEXHVGQjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZdfFtcdUZCMzgtXHVGQjNDXHVGQjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RdfFtcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ118W1x1RkYyMS1cdUZGM0FcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXXxbXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdKS8sL14oPzpccykvLC9eKD86XHMpLywvXig/OiQpL10sY29uZGl0aW9uczp7Im5hbWVzcGFjZS1ib2R5Ijp7cnVsZXM6WzI2LDMyLDMzLDM0LDM1LDM2LDM3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU5LDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk2XSxpbmNsdXNpdmU6ITF9LG5hbWVzcGFjZTp7cnVsZXM6WzI2LDI4LDI5LDMwLDMxLDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU5LDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk2XSxpbmNsdXNpdmU6ITF9LCJjbGFzcy1ib2R5Ijp7cnVsZXM6WzI2LDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU5LDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk2XSxpbmNsdXNpdmU6ITF9LGNsYXNzOntydWxlczpbMjYsMzgsMzksNDAsNDEsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTksNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTZdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzExLDEyLDI2LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU5LDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk2XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzksMjYsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTksNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTZdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbNywyNiw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1OSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5Nl0saW5jbHVzaXZlOiExfSxjYWxsYmFja19hcmdzOntydWxlczpbMjIsMjMsMjYsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTksNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTZdLGluY2x1c2l2ZTohMX0sY2FsbGJhY2tfbmFtZTp7cnVsZXM6WzE5LDIwLDIxLDI2LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU5LDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk2XSxpbmNsdXNpdmU6ITF9LGhyZWY6e3J1bGVzOlsyNiw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1OSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5Nl0saW5jbHVzaXZlOiExfSxzdHJ1Y3Q6e3J1bGVzOlsyNiw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1OSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5Nl0saW5jbHVzaXZlOiExfSxnZW5lcmljOntydWxlczpbMjYsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTZdLGluY2x1c2l2ZTohMX0sYnFzdHJpbmc6e3J1bGVzOlsyNiw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5Nl0saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlsyNCwyNSwyNiw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1OSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5Nl0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw4LDEwLDEzLDE0LDE1LDE2LDE3LDE4LDI2LDI3LDI4LDM3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU5LDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIGFvfSgpO3hpLmxleGVyPU1hO2Z1bmN0aW9uIHpzKCl7dGhpcy55eT17fX1yZXR1cm4genMucHJvdG90eXBlPXhpLHhpLlBhcnNlcj16cyxuZXcgenN9KCk7X3ZlLnBhcnNlcj1fdmU7Y29uc3QgS0dlPV92ZSxXR2U9WyIjIiwiKyIsIn4iLCItIiwiIl07Y2xhc3MgWUdle2NvbnN0cnVjdG9yKHMsdSl7dGhpcy5tZW1iZXJUeXBlPXUsdGhpcy52aXNpYmlsaXR5PSIiLHRoaXMuY2xhc3NpZmllcj0iIjtjb25zdCBkPVlmKHMscXQoKSk7dGhpcy5wYXJzZU1lbWJlcihkKX1nZXREaXNwbGF5RGV0YWlscygpe2xldCBzPXRoaXMudmlzaWJpbGl0eStxRih0aGlzLmlkKTt0aGlzLm1lbWJlclR5cGU9PT0ibWV0aG9kIiYmKHMrPWAoJHtxRih0aGlzLnBhcmFtZXRlcnMudHJpbSgpKX0pYCx0aGlzLnJldHVyblR5cGUmJihzKz0iIDogIitxRih0aGlzLnJldHVyblR5cGUpKSkscz1zLnRyaW0oKTtjb25zdCB1PXRoaXMucGFyc2VDbGFzc2lmaWVyKCk7cmV0dXJue2Rpc3BsYXlUZXh0OnMsY3NzU3R5bGU6dX19cGFyc2VNZW1iZXIocyl7bGV0IHU9IiI7aWYodGhpcy5tZW1iZXJUeXBlPT09Im1ldGhvZCIpe2NvbnN0IGQ9LyhbIyt+LV0pPyguKylcKCguKilcKShbXHMkKl0pPyguKikoWyQqXSk/LyxwPXMubWF0Y2goZCk7aWYocCl7Y29uc3Qgdj1wWzFdP3BbMV0udHJpbSgpOiIiO2lmKFdHZS5pbmNsdWRlcyh2KSYmKHRoaXMudmlzaWJpbGl0eT12KSx0aGlzLmlkPXBbMl0udHJpbSgpLHRoaXMucGFyYW1ldGVycz1wWzNdP3BbM10udHJpbSgpOiIiLHU9cFs0XT9wWzRdLnRyaW0oKToiIix0aGlzLnJldHVyblR5cGU9cFs1XT9wWzVdLnRyaW0oKToiIix1PT09IiIpe2NvbnN0IGI9dGhpcy5yZXR1cm5UeXBlLnN1YnN0cmluZyh0aGlzLnJldHVyblR5cGUubGVuZ3RoLTEpO2IubWF0Y2goL1skKl0vKSYmKHU9Yix0aGlzLnJldHVyblR5cGU9dGhpcy5yZXR1cm5UeXBlLnN1YnN0cmluZygwLHRoaXMucmV0dXJuVHlwZS5sZW5ndGgtMSkpfX19ZWxzZXtjb25zdCBkPXMubGVuZ3RoLHA9cy5zdWJzdHJpbmcoMCwxKSx2PXMuc3Vic3RyaW5nKGQtMSk7V0dlLmluY2x1ZGVzKHApJiYodGhpcy52aXNpYmlsaXR5PXApLHYubWF0Y2goL1skKl0vKSYmKHU9diksdGhpcy5pZD1zLnN1YnN0cmluZyh0aGlzLnZpc2liaWxpdHk9PT0iIj8wOjEsdT09PSIiP2Q6ZC0xKX10aGlzLmNsYXNzaWZpZXI9dX1wYXJzZUNsYXNzaWZpZXIoKXtzd2l0Y2godGhpcy5jbGFzc2lmaWVyKXtjYXNlIioiOnJldHVybiJmb250LXN0eWxlOml0YWxpYzsiO2Nhc2UiJCI6cmV0dXJuInRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7IjtkZWZhdWx0OnJldHVybiIifX19Y29uc3QgbUo9ImNsYXNzSWQtIjtsZXQgQXZlPVtdLHhoPXt9LHZKPVtdLFhHZT0wLFI5PXt9LEx2ZT0wLFdSPVtdO2NvbnN0IHRTPWk9PmNpLnNhbml0aXplVGV4dChpLHF0KCkpLG5TPWZ1bmN0aW9uKGkpe2NvbnN0IHM9Y2kuc2FuaXRpemVUZXh0KGkscXQoKSk7bGV0IHU9IiIsZD1zO2lmKHMuaW5kZXhPZigifiIpPjApe2NvbnN0IHA9cy5zcGxpdCgifiIpO2Q9dFMocFswXSksdT10UyhwWzFdKX1yZXR1cm57Y2xhc3NOYW1lOmQsdHlwZTp1fX0sRWluPWZ1bmN0aW9uKGkscyl7Y29uc3QgdT1jaS5zYW5pdGl6ZVRleHQoaSxxdCgpKTtzJiYocz10UyhzKSk7Y29uc3R7Y2xhc3NOYW1lOmR9PW5TKHUpO3hoW2RdLmxhYmVsPXN9LHdKPWZ1bmN0aW9uKGkpe2NvbnN0IHM9Y2kuc2FuaXRpemVUZXh0KGkscXQoKSkse2NsYXNzTmFtZTp1LHR5cGU6ZH09blMocyk7aWYoT2JqZWN0Lmhhc093bih4aCx1KSlyZXR1cm47Y29uc3QgcD1jaS5zYW5pdGl6ZVRleHQodSxxdCgpKTt4aFtwXT17aWQ6cCx0eXBlOmQsbGFiZWw6cCxjc3NDbGFzc2VzOltdLG1ldGhvZHM6W10sbWVtYmVyczpbXSxhbm5vdGF0aW9uczpbXSxzdHlsZXM6W10sZG9tSWQ6bUorcCsiLSIrWEdlfSxYR2UrK30sUUdlPWZ1bmN0aW9uKGkpe2NvbnN0IHM9Y2kuc2FuaXRpemVUZXh0KGkscXQoKSk7aWYocyBpbiB4aClyZXR1cm4geGhbc10uZG9tSWQ7dGhyb3cgbmV3IEVycm9yKCJDbGFzcyBub3QgZm91bmQ6ICIrcyl9LFRpbj1mdW5jdGlvbigpe0F2ZT1bXSx4aD17fSx2Sj1bXSxXUj1bXSxXUi5wdXNoKFpHZSksUjk9e30sTHZlPTAsUGcoKX0sQ2luPWZ1bmN0aW9uKGkpe3JldHVybiB4aFtpXX0sU2luPWZ1bmN0aW9uKCl7cmV0dXJuIHhofSxfaW49ZnVuY3Rpb24oKXtyZXR1cm4gQXZlfSxBaW49ZnVuY3Rpb24oKXtyZXR1cm4gdkp9LExpbj1mdW5jdGlvbihpKXtYZS5kZWJ1ZygiQWRkaW5nIHJlbGF0aW9uOiAiK0pTT04uc3RyaW5naWZ5KGkpKSx3SihpLmlkMSksd0ooaS5pZDIpLGkuaWQxPW5TKGkuaWQxKS5jbGFzc05hbWUsaS5pZDI9blMoaS5pZDIpLmNsYXNzTmFtZSxpLnJlbGF0aW9uVGl0bGUxPWNpLnNhbml0aXplVGV4dChpLnJlbGF0aW9uVGl0bGUxLnRyaW0oKSxxdCgpKSxpLnJlbGF0aW9uVGl0bGUyPWNpLnNhbml0aXplVGV4dChpLnJlbGF0aW9uVGl0bGUyLnRyaW0oKSxxdCgpKSxBdmUucHVzaChpKX0sTWluPWZ1bmN0aW9uKGkscyl7Y29uc3QgdT1uUyhpKS5jbGFzc05hbWU7eGhbdV0uYW5ub3RhdGlvbnMucHVzaChzKX0sSkdlPWZ1bmN0aW9uKGkscyl7d0ooaSk7Y29uc3QgdT1uUyhpKS5jbGFzc05hbWUsZD14aFt1XTtpZih0eXBlb2Ygcz09InN0cmluZyIpe2NvbnN0IHA9cy50cmltKCk7cC5zdGFydHNXaXRoKCI8PCIpJiZwLmVuZHNXaXRoKCI+PiIpP2QuYW5ub3RhdGlvbnMucHVzaCh0UyhwLnN1YnN0cmluZygyLHAubGVuZ3RoLTIpKSk6cC5pbmRleE9mKCIpIik+MD9kLm1ldGhvZHMucHVzaChuZXcgWUdlKHAsIm1ldGhvZCIpKTpwJiZkLm1lbWJlcnMucHVzaChuZXcgWUdlKHAsImF0dHJpYnV0ZSIpKX19LERpbj1mdW5jdGlvbihpLHMpe0FycmF5LmlzQXJyYXkocykmJihzLnJldmVyc2UoKSxzLmZvckVhY2godT0+SkdlKGksdSkpKX0sSWluPWZ1bmN0aW9uKGkscyl7Y29uc3QgdT17aWQ6YG5vdGUke3ZKLmxlbmd0aH1gLGNsYXNzOnMsdGV4dDppfTt2Si5wdXNoKHUpfSxPaW49ZnVuY3Rpb24oaSl7cmV0dXJuIGkuc3RhcnRzV2l0aCgiOiIpJiYoaT1pLnN1YnN0cmluZygxKSksdFMoaS50cmltKCkpfSxNdmU9ZnVuY3Rpb24oaSxzKXtpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbih1KXtsZXQgZD11O3VbMF0ubWF0Y2goL1xkLykmJihkPW1KK2QpLHhoW2RdIT09dm9pZCAwJiZ4aFtkXS5jc3NDbGFzc2VzLnB1c2gocyl9KX0sTmluPWZ1bmN0aW9uKGkscyl7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24odSl7cyE9PXZvaWQgMCYmKHhoW3VdLnRvb2x0aXA9dFMocykpfSl9LFBpbj1mdW5jdGlvbihpLHMpe3JldHVybiBzP1I5W3NdLmNsYXNzZXNbaV0udG9vbHRpcDp4aFtpXS50b29sdGlwfSxCaW49ZnVuY3Rpb24oaSxzLHUpe2NvbnN0IGQ9cXQoKTtpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihwKXtsZXQgdj1wO3BbMF0ubWF0Y2goL1xkLykmJih2PW1KK3YpLHhoW3ZdIT09dm9pZCAwJiYoeGhbdl0ubGluaz1Bby5mb3JtYXRVcmwocyxkKSxkLnNlY3VyaXR5TGV2ZWw9PT0ic2FuZGJveCI/eGhbdl0ubGlua1RhcmdldD0iX3RvcCI6dHlwZW9mIHU9PSJzdHJpbmciP3hoW3ZdLmxpbmtUYXJnZXQ9dFModSk6eGhbdl0ubGlua1RhcmdldD0iX2JsYW5rIil9KSxNdmUoaSwiY2xpY2thYmxlIil9LEZpbj1mdW5jdGlvbihpLHMsdSl7aS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24oZCl7UmluKGQscyx1KSx4aFtkXS5oYXZlQ2FsbGJhY2s9ITB9KSxNdmUoaSwiY2xpY2thYmxlIil9LFJpbj1mdW5jdGlvbihpLHMsdSl7Y29uc3QgZD1jaS5zYW5pdGl6ZVRleHQoaSxxdCgpKTtpZihxdCgpLnNlY3VyaXR5TGV2ZWwhPT0ibG9vc2UifHxzPT09dm9pZCAwKXJldHVybjtjb25zdCB2PWQ7aWYoeGhbdl0hPT12b2lkIDApe2NvbnN0IGI9UUdlKHYpO2xldCB5PVtdO2lmKHR5cGVvZiB1PT0ic3RyaW5nIil7eT11LnNwbGl0KC8sKD89KD86KD86W14iXSoiKXsyfSkqW14iXSokKS8pO2ZvcihsZXQgVD0wO1Q8eS5sZW5ndGg7VCsrKXtsZXQgXz15W1RdLnRyaW0oKTtfLmNoYXJBdCgwKT09PSciJyYmXy5jaGFyQXQoXy5sZW5ndGgtMSk9PT0nIicmJihfPV8uc3Vic3RyKDEsXy5sZW5ndGgtMikpLHlbVF09X319eS5sZW5ndGg9PT0wJiZ5LnB1c2goYiksV1IucHVzaChmdW5jdGlvbigpe2NvbnN0IFQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPSIke2J9Il1gKTtUIT09bnVsbCYmVC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXtBby5ydW5GdW5jKHMsLi4ueSl9LCExKX0pfX0samluPWZ1bmN0aW9uKGkpe1dSLmZvckVhY2goZnVuY3Rpb24ocyl7cyhpKX0pfSwkaW49e0xJTkU6MCxET1RURURfTElORToxfSx6aW49e0FHR1JFR0FUSU9OOjAsRVhURU5TSU9OOjEsQ09NUE9TSVRJT046MixERVBFTkRFTkNZOjMsTE9MTElQT1A6NH0sWkdlPWZ1bmN0aW9uKGkpe2xldCBzPUlyKCIubWVybWFpZFRvb2x0aXAiKTsocy5fZ3JvdXBzfHxzKVswXVswXT09PW51bGwmJihzPUlyKCJib2R5IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsIm1lcm1haWRUb29sdGlwIikuc3R5bGUoIm9wYWNpdHkiLDApKSxJcihpKS5zZWxlY3QoInN2ZyIpLnNlbGVjdEFsbCgiZy5ub2RlIikub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtjb25zdCBwPUlyKHRoaXMpO2lmKHAuYXR0cigidGl0bGUiKT09PW51bGwpcmV0dXJuO2NvbnN0IGI9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtzLnRyYW5zaXRpb24oKS5kdXJhdGlvbigyMDApLnN0eWxlKCJvcGFjaXR5IiwiLjkiKSxzLnRleHQocC5hdHRyKCJ0aXRsZSIpKS5zdHlsZSgibGVmdCIsd2luZG93LnNjcm9sbFgrYi5sZWZ0KyhiLnJpZ2h0LWIubGVmdCkvMisicHgiKS5zdHlsZSgidG9wIix3aW5kb3cuc2Nyb2xsWStiLnRvcC0xNCtkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCsicHgiKSxzLmh0bWwocy5odG1sKCkucmVwbGFjZSgvJmx0O2JyXC8mZ3Q7L2csIjxici8+IikpLHAuY2xhc3NlZCgiaG92ZXIiLCEwKX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXtzLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApLnN0eWxlKCJvcGFjaXR5IiwwKSxJcih0aGlzKS5jbGFzc2VkKCJob3ZlciIsITEpfSl9O1dSLnB1c2goWkdlKTtsZXQgZUtlPSJUQiI7Y29uc3QgeUo9e3NldEFjY1RpdGxlOkJnLGdldEFjY1RpdGxlOkNwLGdldEFjY0Rlc2NyaXB0aW9uOl9wLHNldEFjY0Rlc2NyaXB0aW9uOlNwLGdldENvbmZpZzooKT0+cXQoKS5jbGFzcyxhZGRDbGFzczp3SixiaW5kRnVuY3Rpb25zOmppbixjbGVhcjpUaW4sZ2V0Q2xhc3M6Q2luLGdldENsYXNzZXM6U2luLGdldE5vdGVzOkFpbixhZGRBbm5vdGF0aW9uOk1pbixhZGROb3RlOklpbixnZXRSZWxhdGlvbnM6X2luLGFkZFJlbGF0aW9uOkxpbixnZXREaXJlY3Rpb246KCk9PmVLZSxzZXREaXJlY3Rpb246aT0+e2VLZT1pfSxhZGRNZW1iZXI6SkdlLGFkZE1lbWJlcnM6RGluLGNsZWFudXBMYWJlbDpPaW4sbGluZVR5cGU6JGluLHJlbGF0aW9uVHlwZTp6aW4sc2V0Q2xpY2tFdmVudDpGaW4sc2V0Q3NzQ2xhc3M6TXZlLHNldExpbms6QmluLGdldFRvb2x0aXA6UGluLHNldFRvb2x0aXA6TmluLGxvb2tVcERvbUlkOlFHZSxzZXREaWFncmFtVGl0bGU6Y20sZ2V0RGlhZ3JhbVRpdGxlOkFwLHNldENsYXNzTGFiZWw6RWluLGFkZE5hbWVzcGFjZTpmdW5jdGlvbihpKXtSOVtpXT09PXZvaWQgMCYmKFI5W2ldPXtpZDppLGNsYXNzZXM6e30sY2hpbGRyZW46e30sZG9tSWQ6bUoraSsiLSIrTHZlfSxMdmUrKyl9LGFkZENsYXNzZXNUb05hbWVzcGFjZTpmdW5jdGlvbihpLHMpe2lmKFI5W2ldIT09dm9pZCAwKWZvcihjb25zdCB1IG9mIHMpe2NvbnN0e2NsYXNzTmFtZTpkfT1uUyh1KTt4aFtkXS5wYXJlbnQ9aSxSOVtpXS5jbGFzc2VzW2RdPXhoW2RdfX0sZ2V0TmFtZXNwYWNlOmZ1bmN0aW9uKGkpe3JldHVybiBSOVtpXX0sZ2V0TmFtZXNwYWNlczpmdW5jdGlvbigpe3JldHVybiBSOX0sc2V0Q3NzU3R5bGU6ZnVuY3Rpb24oaSxzKXtjb25zdCB1PXhoW2ldO2lmKCEoIXN8fCF1KSlmb3IoY29uc3QgZCBvZiBzKWQuaW5jbHVkZXMoIiwiKT91LnN0eWxlcy5wdXNoKC4uLmQuc3BsaXQoIiwiKSk6dS5zdHlsZXMucHVzaChkKX19LHRLZT1pPT5gZy5jbGFzc0dyb3VwIHRleHQgewogIGZpbGw6ICR7aS5ub2RlQm9yZGVyfHxpLmNsYXNzVGV4dH07CiAgc3Ryb2tlOiBub25lOwogIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgZm9udC1zaXplOiAxMHB4OwoKICAudGl0bGUgewogICAgZm9udC13ZWlnaHQ6IGJvbGRlcjsKICB9Cgp9Cgoubm9kZUxhYmVsLCAuZWRnZUxhYmVsIHsKICBjb2xvcjogJHtpLmNsYXNzVGV4dH07Cn0KLmVkZ2VMYWJlbCAubGFiZWwgcmVjdCB7CiAgZmlsbDogJHtpLm1haW5Ca2d9Owp9Ci5sYWJlbCB0ZXh0IHsKICBmaWxsOiAke2kuY2xhc3NUZXh0fTsKfQouZWRnZUxhYmVsIC5sYWJlbCBzcGFuIHsKICBiYWNrZ3JvdW5kOiAke2kubWFpbkJrZ307Cn0KCi5jbGFzc1RpdGxlIHsKICBmb250LXdlaWdodDogYm9sZGVyOwp9Ci5ub2RlIHJlY3QsCiAgLm5vZGUgY2lyY2xlLAogIC5ub2RlIGVsbGlwc2UsCiAgLm5vZGUgcG9seWdvbiwKICAubm9kZSBwYXRoIHsKICAgIGZpbGw6ICR7aS5tYWluQmtnfTsKICAgIHN0cm9rZTogJHtpLm5vZGVCb3JkZXJ9OwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKCi5kaXZpZGVyIHsKICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCmcuY2xpY2thYmxlIHsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KCmcuY2xhc3NHcm91cCByZWN0IHsKICBmaWxsOiAke2kubWFpbkJrZ307CiAgc3Ryb2tlOiAke2kubm9kZUJvcmRlcn07Cn0KCmcuY2xhc3NHcm91cCBsaW5lIHsKICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCi5jbGFzc0xhYmVsIC5ib3ggewogIHN0cm9rZTogbm9uZTsKICBzdHJva2Utd2lkdGg6IDA7CiAgZmlsbDogJHtpLm1haW5Ca2d9OwogIG9wYWNpdHk6IDAuNTsKfQoKLmNsYXNzTGFiZWwgLmxhYmVsIHsKICBmaWxsOiAke2kubm9kZUJvcmRlcn07CiAgZm9udC1zaXplOiAxMHB4Owp9CgoucmVsYXRpb24gewogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn07CiAgc3Ryb2tlLXdpZHRoOiAxOwogIGZpbGw6IG5vbmU7Cn0KCi5kYXNoZWQtbGluZXsKICBzdHJva2UtZGFzaGFycmF5OiAzOwp9CgouZG90dGVkLWxpbmV7CiAgc3Ryb2tlLWRhc2hhcnJheTogMSAyOwp9CgojY29tcG9zaXRpb25TdGFydCwgLmNvbXBvc2l0aW9uIHsKICBmaWxsOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNjb21wb3NpdGlvbkVuZCwgLmNvbXBvc2l0aW9uIHsKICBmaWxsOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNkZXBlbmRlbmN5U3RhcnQsIC5kZXBlbmRlbmN5IHsKICBmaWxsOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNkZXBlbmRlbmN5U3RhcnQsIC5kZXBlbmRlbmN5IHsKICBmaWxsOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNleHRlbnNpb25TdGFydCwgLmV4dGVuc2lvbiB7CiAgZmlsbDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICBzdHJva2U6ICR7aS5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojZXh0ZW5zaW9uRW5kLCAuZXh0ZW5zaW9uIHsKICBmaWxsOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNhZ2dyZWdhdGlvblN0YXJ0LCAuYWdncmVnYXRpb24gewogIGZpbGw6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2FnZ3JlZ2F0aW9uRW5kLCAuYWdncmVnYXRpb24gewogIGZpbGw6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2xvbGxpcG9wU3RhcnQsIC5sb2xsaXBvcCB7CiAgZmlsbDogJHtpLm1haW5Ca2d9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke2kubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2xvbGxpcG9wRW5kLCAubG9sbGlwb3AgewogIGZpbGw6ICR7aS5tYWluQmtnfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCi5lZGdlVGVybWluYWxzIHsKICBmb250LXNpemU6IDExcHg7CiAgbGluZS1oZWlnaHQ6IGluaXRpYWw7Cn0KCi5jbGFzc1RpdGxlVGV4dCB7CiAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICBmb250LXNpemU6IDE4cHg7CiAgZmlsbDogJHtpLnRleHRDb2xvcn07Cn0KYDtsZXQgbktlPTA7Y29uc3QgcWluPWZ1bmN0aW9uKGkscyx1LGQscCl7Y29uc3Qgdj1mdW5jdGlvbihvZSl7c3dpdGNoKG9lKXtjYXNlIHAuZGIucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OOnJldHVybiJhZ2dyZWdhdGlvbiI7Y2FzZSBwLmRiLnJlbGF0aW9uVHlwZS5FWFRFTlNJT046cmV0dXJuImV4dGVuc2lvbiI7Y2FzZSBwLmRiLnJlbGF0aW9uVHlwZS5DT01QT1NJVElPTjpyZXR1cm4iY29tcG9zaXRpb24iO2Nhc2UgcC5kYi5yZWxhdGlvblR5cGUuREVQRU5ERU5DWTpyZXR1cm4iZGVwZW5kZW5jeSI7Y2FzZSBwLmRiLnJlbGF0aW9uVHlwZS5MT0xMSVBPUDpyZXR1cm4ibG9sbGlwb3AifX07cy5wb2ludHM9cy5wb2ludHMuZmlsdGVyKG9lPT4hTnVtYmVyLmlzTmFOKG9lLnkpKTtjb25zdCBiPXMucG9pbnRzLHk9azcoKS54KGZ1bmN0aW9uKG9lKXtyZXR1cm4gb2UueH0pLnkoZnVuY3Rpb24ob2Upe3JldHVybiBvZS55fSkuY3VydmUoRkYpLFQ9aS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIix5KGIpKS5hdHRyKCJpZCIsImVkZ2UiK25LZSkuYXR0cigiY2xhc3MiLCJyZWxhdGlvbiIpO2xldCBfPSIiO2QuYXJyb3dNYXJrZXJBYnNvbHV0ZSYmKF89d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gsXz1fLnJlcGxhY2UoL1woL2csIlxcKCIpLF89Xy5yZXBsYWNlKC9cKS9nLCJcXCkiKSksdS5yZWxhdGlvbi5saW5lVHlwZT09MSYmVC5hdHRyKCJjbGFzcyIsInJlbGF0aW9uIGRhc2hlZC1saW5lIiksdS5yZWxhdGlvbi5saW5lVHlwZT09MTAmJlQuYXR0cigiY2xhc3MiLCJyZWxhdGlvbiBkb3R0ZWQtbGluZSIpLHUucmVsYXRpb24udHlwZTEhPT0ibm9uZSImJlQuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrXysiIyIrdih1LnJlbGF0aW9uLnR5cGUxKSsiU3RhcnQpIiksdS5yZWxhdGlvbi50eXBlMiE9PSJub25lIiYmVC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrXysiIyIrdih1LnJlbGF0aW9uLnR5cGUyKSsiRW5kKSIpO2xldCBBLFA7Y29uc3QgUj1zLnBvaW50cy5sZW5ndGg7bGV0IEY9QW8uY2FsY0xhYmVsUG9zaXRpb24ocy5wb2ludHMpO0E9Ri54LFA9Ri55O2xldCBqLEssZWUsaWU7aWYoUiUyIT09MCYmUj4xKXtsZXQgb2U9QW8uY2FsY0NhcmRpbmFsaXR5UG9zaXRpb24odS5yZWxhdGlvbi50eXBlMSE9PSJub25lIixzLnBvaW50cyxzLnBvaW50c1swXSkscGU9QW8uY2FsY0NhcmRpbmFsaXR5UG9zaXRpb24odS5yZWxhdGlvbi50eXBlMiE9PSJub25lIixzLnBvaW50cyxzLnBvaW50c1tSLTFdKTtYZS5kZWJ1ZygiY2FyZGluYWxpdHlfMV9wb2ludCAiK0pTT04uc3RyaW5naWZ5KG9lKSksWGUuZGVidWcoImNhcmRpbmFsaXR5XzJfcG9pbnQgIitKU09OLnN0cmluZ2lmeShwZSkpLGo9b2UueCxLPW9lLnksZWU9cGUueCxpZT1wZS55fWlmKHUudGl0bGUhPT12b2lkIDApe2NvbnN0IG9lPWkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjbGFzc0xhYmVsIikscGU9b2UuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmF0dHIoIngiLEEpLmF0dHIoInkiLFApLmF0dHIoImZpbGwiLCJyZWQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQodS50aXRsZSk7d2luZG93LmxhYmVsPXBlO2NvbnN0IGJlPXBlLm5vZGUoKS5nZXRCQm94KCk7b2UuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigiY2xhc3MiLCJib3giKS5hdHRyKCJ4IixiZS54LWQucGFkZGluZy8yKS5hdHRyKCJ5IixiZS55LWQucGFkZGluZy8yKS5hdHRyKCJ3aWR0aCIsYmUud2lkdGgrZC5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLGJlLmhlaWdodCtkLnBhZGRpbmcpfVhlLmluZm8oIlJlbmRlcmluZyByZWxhdGlvbiAiK0pTT04uc3RyaW5naWZ5KHUpKSx1LnJlbGF0aW9uVGl0bGUxIT09dm9pZCAwJiZ1LnJlbGF0aW9uVGl0bGUxIT09Im5vbmUiJiZpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY2FyZGluYWxpdHkiKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInR5cGUxIikuYXR0cigieCIsaikuYXR0cigieSIsSykuYXR0cigiZmlsbCIsImJsYWNrIikuYXR0cigiZm9udC1zaXplIiwiNiIpLnRleHQodS5yZWxhdGlvblRpdGxlMSksdS5yZWxhdGlvblRpdGxlMiE9PXZvaWQgMCYmdS5yZWxhdGlvblRpdGxlMiE9PSJub25lIiYmaS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNhcmRpbmFsaXR5IikuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJ0eXBlMiIpLmF0dHIoIngiLGVlKS5hdHRyKCJ5IixpZSkuYXR0cigiZmlsbCIsImJsYWNrIikuYXR0cigiZm9udC1zaXplIiwiNiIpLnRleHQodS5yZWxhdGlvblRpdGxlMiksbktlKyt9LEhpbj1mdW5jdGlvbihpLHMsdSxkKXtYZS5kZWJ1ZygiUmVuZGVyaW5nIGNsYXNzICIscyx1KTtjb25zdCBwPXMuaWQsdj17aWQ6cCxsYWJlbDpzLmlkLHdpZHRoOjAsaGVpZ2h0OjB9LGI9aS5hcHBlbmQoImciKS5hdHRyKCJpZCIsZC5kYi5sb29rVXBEb21JZChwKSkuYXR0cigiY2xhc3MiLCJjbGFzc0dyb3VwIik7bGV0IHk7cy5saW5rP3k9Yi5hcHBlbmQoInN2ZzphIikuYXR0cigieGxpbms6aHJlZiIscy5saW5rKS5hdHRyKCJ0YXJnZXQiLHMubGlua1RhcmdldCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieSIsdS50ZXh0SGVpZ2h0K3UucGFkZGluZykuYXR0cigieCIsMCk6eT1iLmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLHUudGV4dEhlaWdodCt1LnBhZGRpbmcpLmF0dHIoIngiLDApO2xldCBUPSEwO3MuYW5ub3RhdGlvbnMuZm9yRWFjaChmdW5jdGlvbihwZSl7Y29uc3QgYmU9eS5hcHBlbmQoInRzcGFuIikudGV4dCgiwqsiK3BlKyLCuyIpO1R8fGJlLmF0dHIoImR5Iix1LnRleHRIZWlnaHQpLFQ9ITF9KTtsZXQgXz1yS2Uocyk7Y29uc3QgQT15LmFwcGVuZCgidHNwYW4iKS50ZXh0KF8pLmF0dHIoImNsYXNzIiwidGl0bGUiKTtUfHxBLmF0dHIoImR5Iix1LnRleHRIZWlnaHQpO2NvbnN0IFA9eS5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodDtsZXQgUixGLGo7aWYocy5tZW1iZXJzLmxlbmd0aD4wKXtSPWIuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoInkxIix1LnBhZGRpbmcrUCt1LmRpdmlkZXJNYXJnaW4vMikuYXR0cigieTIiLHUucGFkZGluZytQK3UuZGl2aWRlck1hcmdpbi8yKTtjb25zdCBwZT1iLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLHUucGFkZGluZykuYXR0cigieSIsUCt1LmRpdmlkZXJNYXJnaW4rdS50ZXh0SGVpZ2h0KS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjbGFzcyIsImNsYXNzVGV4dCIpO1Q9ITAscy5tZW1iZXJzLmZvckVhY2goZnVuY3Rpb24oYmUpe2lLZShwZSxiZSxULHUpLFQ9ITF9KSxGPXBlLm5vZGUoKS5nZXRCQm94KCl9aWYocy5tZXRob2RzLmxlbmd0aD4wKXtqPWIuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoInkxIix1LnBhZGRpbmcrUCt1LmRpdmlkZXJNYXJnaW4rRi5oZWlnaHQpLmF0dHIoInkyIix1LnBhZGRpbmcrUCt1LmRpdmlkZXJNYXJnaW4rRi5oZWlnaHQpO2NvbnN0IHBlPWIuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsdS5wYWRkaW5nKS5hdHRyKCJ5IixQKzIqdS5kaXZpZGVyTWFyZ2luK0YuaGVpZ2h0K3UudGV4dEhlaWdodCkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY2xhc3MiLCJjbGFzc1RleHQiKTtUPSEwLHMubWV0aG9kcy5mb3JFYWNoKGZ1bmN0aW9uKGJlKXtpS2UocGUsYmUsVCx1KSxUPSExfSl9Y29uc3QgSz1iLm5vZGUoKS5nZXRCQm94KCk7dmFyIGVlPSIgIjtzLmNzc0NsYXNzZXMubGVuZ3RoPjAmJihlZT1lZStzLmNzc0NsYXNzZXMuam9pbigiICIpKTtjb25zdCBvZT1iLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoIndpZHRoIixLLndpZHRoKzIqdS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLEsuaGVpZ2h0K3UucGFkZGluZysuNSp1LmRpdmlkZXJNYXJnaW4pLmF0dHIoImNsYXNzIixlZSkubm9kZSgpLmdldEJCb3goKS53aWR0aDtyZXR1cm4geS5ub2RlKCkuY2hpbGROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHBlKXtwZS5zZXRBdHRyaWJ1dGUoIngiLChvZS1wZS5nZXRCQm94KCkud2lkdGgpLzIpfSkscy50b29sdGlwJiZ5Lmluc2VydCgidGl0bGUiKS50ZXh0KHMudG9vbHRpcCksUiYmUi5hdHRyKCJ4MiIsb2UpLGomJmouYXR0cigieDIiLG9lKSx2LndpZHRoPW9lLHYuaGVpZ2h0PUsuaGVpZ2h0K3UucGFkZGluZysuNSp1LmRpdmlkZXJNYXJnaW4sdn0scktlPWZ1bmN0aW9uKGkpe2xldCBzPWkuaWQ7cmV0dXJuIGkudHlwZSYmKHMrPSI8IitxRihpLnR5cGUpKyI+Iiksc30sVmluPWZ1bmN0aW9uKGkscyx1LGQpe1hlLmRlYnVnKCJSZW5kZXJpbmcgbm90ZSAiLHMsdSk7Y29uc3QgcD1zLmlkLHY9e2lkOnAsdGV4dDpzLnRleHQsd2lkdGg6MCxoZWlnaHQ6MH0sYj1pLmFwcGVuZCgiZyIpLmF0dHIoImlkIixwKS5hdHRyKCJjbGFzcyIsImNsYXNzR3JvdXAiKTtsZXQgeT1iLmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLHUudGV4dEhlaWdodCt1LnBhZGRpbmcpLmF0dHIoIngiLDApO2NvbnN0IFQ9SlNPTi5wYXJzZShgIiR7cy50ZXh0fSJgKS5zcGxpdChgCmApO1QuZm9yRWFjaChmdW5jdGlvbihSKXtYZS5kZWJ1ZyhgQWRkaW5nIGxpbmU6ICR7Un1gKSx5LmFwcGVuZCgidHNwYW4iKS50ZXh0KFIpLmF0dHIoImNsYXNzIiwidGl0bGUiKS5hdHRyKCJkeSIsdS50ZXh0SGVpZ2h0KX0pO2NvbnN0IF89Yi5ub2RlKCkuZ2V0QkJveCgpLFA9Yi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsXy53aWR0aCsyKnUucGFkZGluZykuYXR0cigiaGVpZ2h0IixfLmhlaWdodCtULmxlbmd0aCp1LnRleHRIZWlnaHQrdS5wYWRkaW5nKy41KnUuZGl2aWRlck1hcmdpbikubm9kZSgpLmdldEJCb3goKS53aWR0aDtyZXR1cm4geS5ub2RlKCkuY2hpbGROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKFIpe1Iuc2V0QXR0cmlidXRlKCJ4IiwoUC1SLmdldEJCb3goKS53aWR0aCkvMil9KSx2LndpZHRoPVAsdi5oZWlnaHQ9Xy5oZWlnaHQrVC5sZW5ndGgqdS50ZXh0SGVpZ2h0K3UucGFkZGluZysuNSp1LmRpdmlkZXJNYXJnaW4sdn0saUtlPWZ1bmN0aW9uKGkscyx1LGQpe2NvbnN0e2Rpc3BsYXlUZXh0OnAsY3NzU3R5bGU6dn09cy5nZXREaXNwbGF5RGV0YWlscygpLGI9aS5hcHBlbmQoInRzcGFuIikuYXR0cigieCIsZC5wYWRkaW5nKS50ZXh0KHApO3YhPT0iIiYmYi5hdHRyKCJzdHlsZSIscy5jc3NTdHlsZSksdXx8Yi5hdHRyKCJkeSIsZC50ZXh0SGVpZ2h0KX0sRHZlPXtnZXRDbGFzc1RpdGxlU3RyaW5nOnJLZSxkcmF3Q2xhc3M6SGluLGRyYXdFZGdlOnFpbixkcmF3Tm90ZTpWaW59O2xldCB4Sj17fTtjb25zdCBrSj0yMCxZUj1mdW5jdGlvbihpKXtjb25zdCBzPU9iamVjdC5lbnRyaWVzKHhKKS5maW5kKHU9PnVbMV0ubGFiZWw9PT1pKTtpZihzKXJldHVybiBzWzBdfSxVaW49ZnVuY3Rpb24oaSl7aS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZXh0ZW5zaW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSw3IEwxOCwxMyBWIDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImV4dGVuc2lvbkVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgViAxMyBMMTgsNyBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY29tcG9zaXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwiZXh0ZW5zaW9uIikuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY29tcG9zaXRpb25FbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFnZ3JlZ2F0aW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLGkuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFnZ3JlZ2F0aW9uRW5kIikuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJkZXBlbmRlbmN5U3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gNSw3IEw5LDEzIEwxLDcgTDksMSBaIiksaS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZGVwZW5kZW5jeUVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSxHaW49T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpLR2UsZGI6eUoscmVuZGVyZXI6e2RyYXc6ZnVuY3Rpb24oaSxzLHUsZCl7Y29uc3QgcD1xdCgpLmNsYXNzO3hKPXt9LFhlLmluZm8oIlJlbmRlcmluZyBkaWFncmFtICIraSk7Y29uc3Qgdj1xdCgpLnNlY3VyaXR5TGV2ZWw7bGV0IGI7dj09PSJzYW5kYm94IiYmKGI9SXIoIiNpIitzKSk7Y29uc3QgeT1Jcih2PT09InNhbmRib3giP2Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLFQ9eS5zZWxlY3QoYFtpZD0nJHtzfSddYCk7VWluKFQpO2NvbnN0IF89bmV3IEIwKHttdWx0aWdyYXBoOiEwfSk7Xy5zZXRHcmFwaCh7aXNNdWx0aUdyYXBoOiEwfSksXy5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCl7cmV0dXJue319KTtjb25zdCBBPWQuZGIuZ2V0Q2xhc3NlcygpLFA9T2JqZWN0LmtleXMoQSk7Zm9yKGNvbnN0IG9lIG9mIFApe2NvbnN0IHBlPUFbb2VdLGJlPUR2ZS5kcmF3Q2xhc3MoVCxwZSxwLGQpO3hKW2JlLmlkXT1iZSxfLnNldE5vZGUoYmUuaWQsYmUpLFhlLmluZm8oIk9yZyBoZWlnaHQ6ICIrYmUuaGVpZ2h0KX1kLmRiLmdldFJlbGF0aW9ucygpLmZvckVhY2goZnVuY3Rpb24ob2Upe1hlLmluZm8oInRqb2hvIitZUihvZS5pZDEpK1lSKG9lLmlkMikrSlNPTi5zdHJpbmdpZnkob2UpKSxfLnNldEVkZ2UoWVIob2UuaWQxKSxZUihvZS5pZDIpLHtyZWxhdGlvbjpvZX0sb2UudGl0bGV8fCJERUZBVUxUIil9KSxkLmRiLmdldE5vdGVzKCkuZm9yRWFjaChmdW5jdGlvbihvZSl7WGUuZGVidWcoYEFkZGluZyBub3RlOiAke0pTT04uc3RyaW5naWZ5KG9lKX1gKTtjb25zdCBwZT1EdmUuZHJhd05vdGUoVCxvZSxwLGQpO3hKW3BlLmlkXT1wZSxfLnNldE5vZGUocGUuaWQscGUpLG9lLmNsYXNzJiZvZS5jbGFzcyBpbiBBJiZfLnNldEVkZ2Uob2UuaWQsWVIob2UuY2xhc3MpLHtyZWxhdGlvbjp7aWQxOm9lLmlkLGlkMjpvZS5jbGFzcyxyZWxhdGlvbjp7dHlwZTE6Im5vbmUiLHR5cGUyOiJub25lIixsaW5lVHlwZToxMH19fSwiREVGQVVMVCIpfSkscUQoXyksXy5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24ob2Upe29lIT09dm9pZCAwJiZfLm5vZGUob2UpIT09dm9pZCAwJiYoWGUuZGVidWcoIk5vZGUgIitvZSsiOiAiK0pTT04uc3RyaW5naWZ5KF8ubm9kZShvZSkpKSx5LnNlbGVjdCgiIyIrKGQuZGIubG9va1VwRG9tSWQob2UpfHxvZSkpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhfLm5vZGUob2UpLngtXy5ub2RlKG9lKS53aWR0aC8yKSsiLCIrKF8ubm9kZShvZSkueS1fLm5vZGUob2UpLmhlaWdodC8yKSsiICkiKSl9KSxfLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihvZSl7b2UhPT12b2lkIDAmJl8uZWRnZShvZSkhPT12b2lkIDAmJihYZS5kZWJ1ZygiRWRnZSAiK29lLnYrIiAtPiAiK29lLncrIjogIitKU09OLnN0cmluZ2lmeShfLmVkZ2Uob2UpKSksRHZlLmRyYXdFZGdlKFQsXy5lZGdlKG9lKSxfLmVkZ2Uob2UpLnJlbGF0aW9uLHAsZCkpfSk7Y29uc3Qgaj1ULm5vZGUoKS5nZXRCQm94KCksSz1qLndpZHRoK2tKKjIsZWU9ai5oZWlnaHQra0oqMjtOZyhULGVlLEsscC51c2VNYXhXaWR0aCk7Y29uc3QgaWU9YCR7ai54LWtKfSAke2oueS1rSn0gJHtLfSAke2VlfWA7WGUuZGVidWcoYHZpZXdCb3ggJHtpZX1gKSxULmF0dHIoInZpZXdCb3giLGllKX19LHN0eWxlczp0S2UsaW5pdDppPT57aS5jbGFzc3x8KGkuY2xhc3M9e30pLGkuY2xhc3MuYXJyb3dNYXJrZXJBYnNvbHV0ZT1pLmFycm93TWFya2VyQWJzb2x1dGUseUouY2xlYXIoKX19fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLEl2ZT1pPT5jaS5zYW5pdGl6ZVRleHQoaSxxdCgpKTtsZXQgT3ZlPXtkaXZpZGVyTWFyZ2luOjEwLHBhZGRpbmc6NSx0ZXh0SGVpZ2h0OjEwLGN1cnZlOnZvaWQgMH07Y29uc3QgS2luPWZ1bmN0aW9uKGkscyx1LGQpe2NvbnN0IHA9T2JqZWN0LmtleXMoaSk7WGUuaW5mbygia2V5czoiLHApLFhlLmluZm8oaSkscC5mb3JFYWNoKGZ1bmN0aW9uKHYpe3ZhciBfLEE7Y29uc3QgYj1pW3ZdLFQ9e3NoYXBlOiJyZWN0IixpZDpiLmlkLGRvbUlkOmIuZG9tSWQsbGFiZWxUZXh0Okl2ZShiLmlkKSxsYWJlbFN0eWxlOiIiLHN0eWxlOiJmaWxsOiBub25lOyBzdHJva2U6IGJsYWNrIixwYWRkaW5nOigoXz1xdCgpLmZsb3djaGFydCk9PW51bGw/dm9pZCAwOl8ucGFkZGluZyk/PygoQT1xdCgpLmNsYXNzKT09bnVsbD92b2lkIDA6QS5wYWRkaW5nKX07cy5zZXROb2RlKGIuaWQsVCksc0tlKGIuY2xhc3NlcyxzLHUsZCxiLmlkKSxYZS5pbmZvKCJzZXROb2RlIixUKX0pfSxzS2U9ZnVuY3Rpb24oaSxzLHUsZCxwKXtjb25zdCB2PU9iamVjdC5rZXlzKGkpO1hlLmluZm8oImtleXM6Iix2KSxYZS5pbmZvKGkpLHYuZmlsdGVyKGI9PmlbYl0ucGFyZW50PT1wKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe3ZhciBqLEs7Y29uc3QgeT1pW2JdLFQ9eS5jc3NDbGFzc2VzLmpvaW4oIiAiKSxfPW9tKHkuc3R5bGVzKSxBPXkubGFiZWw/P3kuaWQsUD0wLFI9ImNsYXNzX2JveCIsRj17bGFiZWxTdHlsZTpfLmxhYmVsU3R5bGUsc2hhcGU6UixsYWJlbFRleHQ6SXZlKEEpLGNsYXNzRGF0YTp5LHJ4OlAscnk6UCxjbGFzczpULHN0eWxlOl8uc3R5bGUsaWQ6eS5pZCxkb21JZDp5LmRvbUlkLHRvb2x0aXA6ZC5kYi5nZXRUb29sdGlwKHkuaWQscCl8fCIiLGhhdmVDYWxsYmFjazp5LmhhdmVDYWxsYmFjayxsaW5rOnkubGluayx3aWR0aDp5LnR5cGU9PT0iZ3JvdXAiPzUwMDp2b2lkIDAsdHlwZTp5LnR5cGUscGFkZGluZzooKGo9cXQoKS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpqLnBhZGRpbmcpPz8oKEs9cXQoKS5jbGFzcyk9PW51bGw/dm9pZCAwOksucGFkZGluZyl9O3Muc2V0Tm9kZSh5LmlkLEYpLHAmJnMuc2V0UGFyZW50KHkuaWQscCksWGUuaW5mbygic2V0Tm9kZSIsRil9KX0sV2luPWZ1bmN0aW9uKGkscyx1LGQpe1hlLmluZm8oaSksaS5mb3JFYWNoKGZ1bmN0aW9uKHAsdil7dmFyIEssZWU7Y29uc3QgYj1wLHk9IiIsVD17bGFiZWxTdHlsZToiIixzdHlsZToiIn0sXz1iLnRleHQsQT0wLFA9Im5vdGUiLFI9e2xhYmVsU3R5bGU6VC5sYWJlbFN0eWxlLHNoYXBlOlAsbGFiZWxUZXh0Okl2ZShfKSxub3RlRGF0YTpiLHJ4OkEscnk6QSxjbGFzczp5LHN0eWxlOlQuc3R5bGUsaWQ6Yi5pZCxkb21JZDpiLmlkLHRvb2x0aXA6IiIsdHlwZToibm90ZSIscGFkZGluZzooKEs9cXQoKS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpLLnBhZGRpbmcpPz8oKGVlPXF0KCkuY2xhc3MpPT1udWxsP3ZvaWQgMDplZS5wYWRkaW5nKX07aWYocy5zZXROb2RlKGIuaWQsUiksWGUuaW5mbygic2V0Tm9kZSIsUiksIWIuY2xhc3N8fCEoYi5jbGFzcyBpbiBkKSlyZXR1cm47Y29uc3QgRj11K3Ysaj17aWQ6YGVkZ2VOb3RlJHtGfWAsY2xhc3NlczoicmVsYXRpb24iLHBhdHRlcm46ImRvdHRlZCIsYXJyb3doZWFkOiJub25lIixzdGFydExhYmVsUmlnaHQ6IiIsZW5kTGFiZWxMZWZ0OiIiLGFycm93VHlwZVN0YXJ0OiJub25lIixhcnJvd1R5cGVFbmQ6Im5vbmUiLHN0eWxlOiJmaWxsOm5vbmUiLGxhYmVsU3R5bGU6IiIsY3VydmU6T3YoT3ZlLmN1cnZlLGtwKX07cy5zZXRFZGdlKGIuaWQsYi5jbGFzcyxqLEYpfSl9LFlpbj1mdW5jdGlvbihpLHMpe2NvbnN0IHU9cXQoKS5mbG93Y2hhcnQ7bGV0IGQ9MDtpLmZvckVhY2goZnVuY3Rpb24ocCl7dmFyIGI7ZCsrO2NvbnN0IHY9e2NsYXNzZXM6InJlbGF0aW9uIixwYXR0ZXJuOnAucmVsYXRpb24ubGluZVR5cGU9PTE/ImRhc2hlZCI6InNvbGlkIixpZDpgaWRfJHtwLmlkMX1fJHtwLmlkMn1fJHtkfWAsYXJyb3doZWFkOnAudHlwZT09PSJhcnJvd19vcGVuIj8ibm9uZSI6Im5vcm1hbCIsc3RhcnRMYWJlbFJpZ2h0OnAucmVsYXRpb25UaXRsZTE9PT0ibm9uZSI/IiI6cC5yZWxhdGlvblRpdGxlMSxlbmRMYWJlbExlZnQ6cC5yZWxhdGlvblRpdGxlMj09PSJub25lIj8iIjpwLnJlbGF0aW9uVGl0bGUyLGFycm93VHlwZVN0YXJ0OmFLZShwLnJlbGF0aW9uLnR5cGUxKSxhcnJvd1R5cGVFbmQ6YUtlKHAucmVsYXRpb24udHlwZTIpLHN0eWxlOiJmaWxsOm5vbmUiLGxhYmVsU3R5bGU6IiIsY3VydmU6T3YodT09bnVsbD92b2lkIDA6dS5jdXJ2ZSxrcCl9O2lmKFhlLmluZm8odixwKSxwLnN0eWxlIT09dm9pZCAwKXtjb25zdCB5PW9tKHAuc3R5bGUpO3Yuc3R5bGU9eS5zdHlsZSx2LmxhYmVsU3R5bGU9eS5sYWJlbFN0eWxlfXAudGV4dD1wLnRpdGxlLHAudGV4dD09PXZvaWQgMD9wLnN0eWxlIT09dm9pZCAwJiYodi5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIpOih2LmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIix2LmxhYmVscG9zPSJjIiwoKGI9cXQoKS5mbG93Y2hhcnQpPT1udWxsP3ZvaWQgMDpiLmh0bWxMYWJlbHMpPz9xdCgpLmh0bWxMYWJlbHM/KHYubGFiZWxUeXBlPSJodG1sIix2LmxhYmVsPSc8c3BhbiBjbGFzcz0iZWRnZUxhYmVsIj4nK3AudGV4dCsiPC9zcGFuPiIpOih2LmxhYmVsVHlwZT0idGV4dCIsdi5sYWJlbD1wLnRleHQucmVwbGFjZShjaS5saW5lQnJlYWtSZWdleCxgCmApLHAuc3R5bGU9PT12b2lkIDAmJih2LnN0eWxlPXYuc3R5bGV8fCJzdHJva2U6ICMzMzM7IHN0cm9rZS13aWR0aDogMS41cHg7ZmlsbDpub25lIiksdi5sYWJlbFN0eWxlPXYubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKSkscy5zZXRFZGdlKHAuaWQxLHAuaWQyLHYsZCl9KX0sWGluPWZ1bmN0aW9uKGkpe092ZT17Li4uT3ZlLC4uLml9fSxRaW49YXN5bmMgZnVuY3Rpb24oaSxzLHUsZCl7WGUuaW5mbygiRHJhd2luZyBjbGFzcyAtICIscyk7Y29uc3QgcD1xdCgpLmZsb3djaGFydD8/cXQoKS5jbGFzcyx2PXF0KCkuc2VjdXJpdHlMZXZlbDtYZS5pbmZvKCJjb25maWc6IixwKTtjb25zdCBiPShwPT1udWxsP3ZvaWQgMDpwLm5vZGVTcGFjaW5nKT8/NTAseT0ocD09bnVsbD92b2lkIDA6cC5yYW5rU3BhY2luZyk/PzUwLFQ9bmV3IEIwKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6ZC5kYi5nZXREaXJlY3Rpb24oKSxub2Rlc2VwOmIscmFua3NlcDp5LG1hcmdpbng6OCxtYXJnaW55Ojh9KS5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCl7cmV0dXJue319KSxfPWQuZGIuZ2V0TmFtZXNwYWNlcygpLEE9ZC5kYi5nZXRDbGFzc2VzKCksUD1kLmRiLmdldFJlbGF0aW9ucygpLFI9ZC5kYi5nZXROb3RlcygpO1hlLmluZm8oUCksS2luKF8sVCxzLGQpLHNLZShBLFQscyxkKSxZaW4oUCxUKSxXaW4oUixULFAubGVuZ3RoKzEsQSk7bGV0IEY7dj09PSJzYW5kYm94IiYmKEY9SXIoIiNpIitzKSk7Y29uc3Qgaj1Jcih2PT09InNhbmRib3giP0Yubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLEs9ai5zZWxlY3QoYFtpZD0iJHtzfSJdYCksZWU9ai5zZWxlY3QoIiMiK3MrIiBnIik7aWYoYXdhaXQgcW1lKGVlLFQsWyJhZ2dyZWdhdGlvbiIsImV4dGVuc2lvbiIsImNvbXBvc2l0aW9uIiwiZGVwZW5kZW5jeSIsImxvbGxpcG9wIl0sImNsYXNzRGlhZ3JhbSIscyksQW8uaW5zZXJ0VGl0bGUoSywiY2xhc3NUaXRsZVRleHQiLChwPT1udWxsP3ZvaWQgMDpwLnRpdGxlVG9wTWFyZ2luKT8/NSxkLmRiLmdldERpYWdyYW1UaXRsZSgpKSx5OShULEsscD09bnVsbD92b2lkIDA6cC5kaWFncmFtUGFkZGluZyxwPT1udWxsP3ZvaWQgMDpwLnVzZU1heFdpZHRoKSwhKHAhPW51bGwmJnAuaHRtbExhYmVscykpe2NvbnN0IGllPXY9PT0ic2FuZGJveCI/Ri5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudDpkb2N1bWVudCxvZT1pZS5xdWVyeVNlbGVjdG9yQWxsKCdbaWQ9IicrcysnIl0gLmVkZ2VMYWJlbCAubGFiZWwnKTtmb3IoY29uc3QgcGUgb2Ygb2Upe2NvbnN0IGJlPXBlLmdldEJCb3goKSxhZT1pZS5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVjdCIpO2FlLnNldEF0dHJpYnV0ZSgicngiLDApLGFlLnNldEF0dHJpYnV0ZSgicnkiLDApLGFlLnNldEF0dHJpYnV0ZSgid2lkdGgiLGJlLndpZHRoKSxhZS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsYmUuaGVpZ2h0KSxwZS5pbnNlcnRCZWZvcmUoYWUscGUuZmlyc3RDaGlsZCl9fX07ZnVuY3Rpb24gYUtlKGkpe2xldCBzO3N3aXRjaChpKXtjYXNlIDA6cz0iYWdncmVnYXRpb24iO2JyZWFrO2Nhc2UgMTpzPSJleHRlbnNpb24iO2JyZWFrO2Nhc2UgMjpzPSJjb21wb3NpdGlvbiI7YnJlYWs7Y2FzZSAzOnM9ImRlcGVuZGVuY3kiO2JyZWFrO2Nhc2UgNDpzPSJsb2xsaXBvcCI7YnJlYWs7ZGVmYXVsdDpzPSJub25lIn1yZXR1cm4gc31jb25zdCBKaW49T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpLR2UsZGI6eUoscmVuZGVyZXI6e3NldENvbmY6WGluLGRyYXc6UWlufSxzdHlsZXM6dEtlLGluaXQ6aT0+e2kuY2xhc3N8fChpLmNsYXNzPXt9KSxpLmNsYXNzLmFycm93TWFya2VyQWJzb2x1dGU9aS5hcnJvd01hcmtlckFic29sdXRlLHlKLmNsZWFyKCl9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgTnZlPWZ1bmN0aW9uKCl7dmFyIGk9ZnVuY3Rpb24oSWUsU2UsQ2Usa2Upe2ZvcihDZT1DZXx8e30sa2U9SWUubGVuZ3RoO2tlLS07Q2VbSWVba2VdXT1TZSk7cmV0dXJuIENlfSxzPVsxLDJdLHU9WzEsM10sZD1bMSw0XSxwPVsyLDRdLHY9WzEsOV0sYj1bMSwxMV0seT1bMSwxNV0sVD1bMSwxNl0sXz1bMSwxN10sQT1bMSwxOF0sUD1bMSwzMF0sUj1bMSwxOV0sRj1bMSwyMF0saj1bMSwyMV0sSz1bMSwyMl0sZWU9WzEsMjNdLGllPVsxLDI1XSxvZT1bMSwyNl0scGU9WzEsMjddLGJlPVsxLDI4XSxhZT1bMSwyOV0sbmU9WzEsMzJdLHNlPVsxLDMzXSxkZT1bMSwzNF0sWD1bMSwzNV0sZ2U9WzEsMzFdLFc9WzEsNCw1LDE1LDE2LDE4LDIwLDIxLDIzLDI0LDI1LDI2LDI3LDI4LDMyLDM0LDM2LDM3LDQxLDQ0LDQ1LDQ2LDQ3LDUwXSx4ZT1bMSw0LDUsMTMsMTQsMTUsMTYsMTgsMjAsMjEsMjMsMjQsMjUsMjYsMjcsMjgsMzIsMzQsMzYsMzcsNDEsNDQsNDUsNDYsNDcsNTBdLFU9WzQsNSwxNSwxNiwxOCwyMCwyMSwyMywyNCwyNSwyNiwyNywyOCwzMiwzNCwzNiwzNyw0MSw0NCw0NSw0Niw0Nyw1MF0sRmU9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLFNQQUNFOjQsTkw6NSxTRDo2LGRvY3VtZW50OjcsbGluZTo4LHN0YXRlbWVudDo5LGNsYXNzRGVmU3RhdGVtZW50OjEwLGNzc0NsYXNzU3RhdGVtZW50OjExLGlkU3RhdGVtZW50OjEyLERFU0NSOjEzLCItLT4iOjE0LEhJREVfRU1QVFk6MTUsc2NhbGU6MTYsV0lEVEg6MTcsQ09NUE9TSVRfU1RBVEU6MTgsU1RSVUNUX1NUQVJUOjE5LFNUUlVDVF9TVE9QOjIwLFNUQVRFX0RFU0NSOjIxLEFTOjIyLElEOjIzLEZPUks6MjQsSk9JTjoyNSxDSE9JQ0U6MjYsQ09OQ1VSUkVOVDoyNyxub3RlOjI4LG5vdGVQb3NpdGlvbjoyOSxOT1RFX1RFWFQ6MzAsZGlyZWN0aW9uOjMxLGFjY190aXRsZTozMixhY2NfdGl0bGVfdmFsdWU6MzMsYWNjX2Rlc2NyOjM0LGFjY19kZXNjcl92YWx1ZTozNSxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjM2LGNsYXNzRGVmOjM3LENMQVNTREVGX0lEOjM4LENMQVNTREVGX1NUWUxFT1BUUzozOSxERUZBVUxUOjQwLGNsYXNzOjQxLENMQVNTRU5USVRZX0lEUzo0MixTVFlMRUNMQVNTOjQzLGRpcmVjdGlvbl90Yjo0NCxkaXJlY3Rpb25fYnQ6NDUsZGlyZWN0aW9uX3JsOjQ2LGRpcmVjdGlvbl9scjo0Nyxlb2w6NDgsIjsiOjQ5LEVER0VfU1RBVEU6NTAsU1RZTEVfU0VQQVJBVE9SOjUxLGxlZnRfb2Y6NTIscmlnaHRfb2Y6NTMsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IlNQQUNFIiw1OiJOTCIsNjoiU0QiLDEzOiJERVNDUiIsMTQ6Ii0tPiIsMTU6IkhJREVfRU1QVFkiLDE2OiJzY2FsZSIsMTc6IldJRFRIIiwxODoiQ09NUE9TSVRfU1RBVEUiLDE5OiJTVFJVQ1RfU1RBUlQiLDIwOiJTVFJVQ1RfU1RPUCIsMjE6IlNUQVRFX0RFU0NSIiwyMjoiQVMiLDIzOiJJRCIsMjQ6IkZPUksiLDI1OiJKT0lOIiwyNjoiQ0hPSUNFIiwyNzoiQ09OQ1VSUkVOVCIsMjg6Im5vdGUiLDMwOiJOT1RFX1RFWFQiLDMyOiJhY2NfdGl0bGUiLDMzOiJhY2NfdGl0bGVfdmFsdWUiLDM0OiJhY2NfZGVzY3IiLDM1OiJhY2NfZGVzY3JfdmFsdWUiLDM2OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwzNzoiY2xhc3NEZWYiLDM4OiJDTEFTU0RFRl9JRCIsMzk6IkNMQVNTREVGX1NUWUxFT1BUUyIsNDA6IkRFRkFVTFQiLDQxOiJjbGFzcyIsNDI6IkNMQVNTRU5USVRZX0lEUyIsNDM6IlNUWUxFQ0xBU1MiLDQ0OiJkaXJlY3Rpb25fdGIiLDQ1OiJkaXJlY3Rpb25fYnQiLDQ2OiJkaXJlY3Rpb25fcmwiLDQ3OiJkaXJlY3Rpb25fbHIiLDQ5OiI7Iiw1MDoiRURHRV9TVEFURSIsNTE6IlNUWUxFX1NFUEFSQVRPUiIsNTI6ImxlZnRfb2YiLDUzOiJyaWdodF9vZiJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywyXSxbMywyXSxbNywwXSxbNywyXSxbOCwyXSxbOCwxXSxbOCwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwyXSxbOSwzXSxbOSw0XSxbOSwxXSxbOSwyXSxbOSwxXSxbOSw0XSxbOSwzXSxbOSw2XSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSw0XSxbOSw0XSxbOSwxXSxbOSwyXSxbOSwyXSxbOSwxXSxbMTAsM10sWzEwLDNdLFsxMSwzXSxbMzEsMV0sWzMxLDFdLFszMSwxXSxbMzEsMV0sWzQ4LDFdLFs0OCwxXSxbMTIsMV0sWzEyLDFdLFsxMiwzXSxbMTIsM10sWzI5LDFdLFsyOSwxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihTZSxDZSxrZSxLZSxGdCxOZSxnbil7dmFyIF90PU5lLmxlbmd0aC0xO3N3aXRjaChGdCl7Y2FzZSAzOnJldHVybiBLZS5zZXRSb290RG9jKE5lW190XSksTmVbX3RdO2Nhc2UgNDp0aGlzLiQ9W107YnJlYWs7Y2FzZSA1Ok5lW190XSE9Im5sIiYmKE5lW190LTFdLnB1c2goTmVbX3RdKSx0aGlzLiQ9TmVbX3QtMV0pO2JyZWFrO2Nhc2UgNjpjYXNlIDc6dGhpcy4kPU5lW190XTticmVhaztjYXNlIDg6dGhpcy4kPSJubCI7YnJlYWs7Y2FzZSAxMTp0aGlzLiQ9TmVbX3RdO2JyZWFrO2Nhc2UgMTI6Y29uc3QgeHQ9TmVbX3QtMV07eHQuZGVzY3JpcHRpb249S2UudHJpbUNvbG9uKE5lW190XSksdGhpcy4kPXh0O2JyZWFrO2Nhc2UgMTM6dGhpcy4kPXtzdG10OiJyZWxhdGlvbiIsc3RhdGUxOk5lW190LTJdLHN0YXRlMjpOZVtfdF19O2JyZWFrO2Nhc2UgMTQ6Y29uc3QgUHQ9S2UudHJpbUNvbG9uKE5lW190XSk7dGhpcy4kPXtzdG10OiJyZWxhdGlvbiIsc3RhdGUxOk5lW190LTNdLHN0YXRlMjpOZVtfdC0xXSxkZXNjcmlwdGlvbjpQdH07YnJlYWs7Y2FzZSAxODp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpOZVtfdC0zXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIixkb2M6TmVbX3QtMV19O2JyZWFrO2Nhc2UgMTk6dmFyIEV0PU5lW190XSxHdD1OZVtfdC0yXS50cmltKCk7aWYoTmVbX3RdLm1hdGNoKCI6Iikpe3ZhciBsbj1OZVtfdF0uc3BsaXQoIjoiKTtFdD1sblswXSxHdD1bR3QsbG5bMV1dfXRoaXMuJD17c3RtdDoic3RhdGUiLGlkOkV0LHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOkd0fTticmVhaztjYXNlIDIwOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOk5lW190LTNdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOk5lW190LTVdLGRvYzpOZVtfdC0xXX07YnJlYWs7Y2FzZSAyMTp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpOZVtfdF0sdHlwZToiZm9yayJ9O2JyZWFrO2Nhc2UgMjI6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6TmVbX3RdLHR5cGU6ImpvaW4ifTticmVhaztjYXNlIDIzOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOk5lW190XSx0eXBlOiJjaG9pY2UifTticmVhaztjYXNlIDI0OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOktlLmdldERpdmlkZXJJZCgpLHR5cGU6ImRpdmlkZXIifTticmVhaztjYXNlIDI1OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOk5lW190LTFdLnRyaW0oKSxub3RlOntwb3NpdGlvbjpOZVtfdC0yXS50cmltKCksdGV4dDpOZVtfdF0udHJpbSgpfX07YnJlYWs7Y2FzZSAyODp0aGlzLiQ9TmVbX3RdLnRyaW0oKSxLZS5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMjk6Y2FzZSAzMDp0aGlzLiQ9TmVbX3RdLnRyaW0oKSxLZS5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMzE6Y2FzZSAzMjp0aGlzLiQ9e3N0bXQ6ImNsYXNzRGVmIixpZDpOZVtfdC0xXS50cmltKCksY2xhc3NlczpOZVtfdF0udHJpbSgpfTticmVhaztjYXNlIDMzOnRoaXMuJD17c3RtdDoiYXBwbHlDbGFzcyIsaWQ6TmVbX3QtMV0udHJpbSgpLHN0eWxlQ2xhc3M6TmVbX3RdLnRyaW0oKX07YnJlYWs7Y2FzZSAzNDpLZS5zZXREaXJlY3Rpb24oIlRCIiksdGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJUQiJ9O2JyZWFrO2Nhc2UgMzU6S2Uuc2V0RGlyZWN0aW9uKCJCVCIpLHRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiQlQifTticmVhaztjYXNlIDM2OktlLnNldERpcmVjdGlvbigiUkwiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlJMIn07YnJlYWs7Y2FzZSAzNzpLZS5zZXREaXJlY3Rpb24oIkxSIiksdGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJMUiJ9O2JyZWFrO2Nhc2UgNDA6Y2FzZSA0MTp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpOZVtfdF0udHJpbSgpLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifTticmVhaztjYXNlIDQyOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOk5lW190LTJdLnRyaW0oKSxjbGFzc2VzOltOZVtfdF0udHJpbSgpXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIn07YnJlYWs7Y2FzZSA0Mzp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpOZVtfdC0yXS50cmltKCksY2xhc3NlczpbTmVbX3RdLnRyaW0oKV0sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiJ9O2JyZWFrfX0sdGFibGU6W3szOjEsNDpzLDU6dSw2OmR9LHsxOlszXX0sezM6NSw0OnMsNTp1LDY6ZH0sezM6Niw0OnMsNTp1LDY6ZH0saShbMSw0LDUsMTUsMTYsMTgsMjEsMjMsMjQsMjUsMjYsMjcsMjgsMzIsMzQsMzYsMzcsNDEsNDQsNDUsNDYsNDcsNTBdLHAsezc6N30pLHsxOlsyLDFdfSx7MTpbMiwyXX0sezE6WzIsM10sNDp2LDU6Yiw4OjgsOToxMCwxMDoxMiwxMToxMywxMjoxNCwxNTp5LDE2OlQsMTg6XywyMTpBLDIzOlAsMjQ6UiwyNTpGLDI2OmosMjc6SywyODplZSwzMToyNCwzMjppZSwzNDpvZSwzNjpwZSwzNzpiZSw0MTphZSw0NDpuZSw0NTpzZSw0NjpkZSw0NzpYLDUwOmdlfSxpKFcsWzIsNV0pLHs5OjM2LDEwOjEyLDExOjEzLDEyOjE0LDE1OnksMTY6VCwxODpfLDIxOkEsMjM6UCwyNDpSLDI1OkYsMjY6aiwyNzpLLDI4OmVlLDMxOjI0LDMyOmllLDM0Om9lLDM2OnBlLDM3OmJlLDQxOmFlLDQ0Om5lLDQ1OnNlLDQ2OmRlLDQ3OlgsNTA6Z2V9LGkoVyxbMiw3XSksaShXLFsyLDhdKSxpKFcsWzIsOV0pLGkoVyxbMiwxMF0pLGkoVyxbMiwxMV0sezEzOlsxLDM3XSwxNDpbMSwzOF19KSxpKFcsWzIsMTVdKSx7MTc6WzEsMzldfSxpKFcsWzIsMTddLHsxOTpbMSw0MF19KSx7MjI6WzEsNDFdfSxpKFcsWzIsMjFdKSxpKFcsWzIsMjJdKSxpKFcsWzIsMjNdKSxpKFcsWzIsMjRdKSx7Mjk6NDIsMzA6WzEsNDNdLDUyOlsxLDQ0XSw1MzpbMSw0NV19LGkoVyxbMiwyN10pLHszMzpbMSw0Nl19LHszNTpbMSw0N119LGkoVyxbMiwzMF0pLHszODpbMSw0OF0sNDA6WzEsNDldfSx7NDI6WzEsNTBdfSxpKHhlLFsyLDQwXSx7NTE6WzEsNTFdfSksaSh4ZSxbMiw0MV0sezUxOlsxLDUyXX0pLGkoVyxbMiwzNF0pLGkoVyxbMiwzNV0pLGkoVyxbMiwzNl0pLGkoVyxbMiwzN10pLGkoVyxbMiw2XSksaShXLFsyLDEyXSksezEyOjUzLDIzOlAsNTA6Z2V9LGkoVyxbMiwxNl0pLGkoVSxwLHs3OjU0fSksezIzOlsxLDU1XX0sezIzOlsxLDU2XX0sezIyOlsxLDU3XX0sezIzOlsyLDQ0XX0sezIzOlsyLDQ1XX0saShXLFsyLDI4XSksaShXLFsyLDI5XSksezM5OlsxLDU4XX0sezM5OlsxLDU5XX0sezQzOlsxLDYwXX0sezIzOlsxLDYxXX0sezIzOlsxLDYyXX0saShXLFsyLDEzXSx7MTM6WzEsNjNdfSksezQ6diw1OmIsODo4LDk6MTAsMTA6MTIsMTE6MTMsMTI6MTQsMTU6eSwxNjpULDE4Ol8sMjA6WzEsNjRdLDIxOkEsMjM6UCwyNDpSLDI1OkYsMjY6aiwyNzpLLDI4OmVlLDMxOjI0LDMyOmllLDM0Om9lLDM2OnBlLDM3OmJlLDQxOmFlLDQ0Om5lLDQ1OnNlLDQ2OmRlLDQ3OlgsNTA6Z2V9LGkoVyxbMiwxOV0sezE5OlsxLDY1XX0pLHszMDpbMSw2Nl19LHsyMzpbMSw2N119LGkoVyxbMiwzMV0pLGkoVyxbMiwzMl0pLGkoVyxbMiwzM10pLGkoeGUsWzIsNDJdKSxpKHhlLFsyLDQzXSksaShXLFsyLDE0XSksaShXLFsyLDE4XSksaShVLHAsezc6Njh9KSxpKFcsWzIsMjVdKSxpKFcsWzIsMjZdKSx7NDp2LDU6Yiw4OjgsOToxMCwxMDoxMiwxMToxMywxMjoxNCwxNTp5LDE2OlQsMTg6XywyMDpbMSw2OV0sMjE6QSwyMzpQLDI0OlIsMjU6RiwyNjpqLDI3OkssMjg6ZWUsMzE6MjQsMzI6aWUsMzQ6b2UsMzY6cGUsMzc6YmUsNDE6YWUsNDQ6bmUsNDU6c2UsNDY6ZGUsNDc6WCw1MDpnZX0saShXLFsyLDIwXSldLGRlZmF1bHRBY3Rpb25zOns1OlsyLDFdLDY6WzIsMl0sNDQ6WzIsNDRdLDQ1OlsyLDQ1XX0scGFyc2VFcnJvcjpmdW5jdGlvbihTZSxDZSl7aWYoQ2UucmVjb3ZlcmFibGUpdGhpcy50cmFjZShTZSk7ZWxzZXt2YXIga2U9bmV3IEVycm9yKFNlKTt0aHJvdyBrZS5oYXNoPUNlLGtlfX0scGFyc2U6ZnVuY3Rpb24oU2Upe3ZhciBDZT10aGlzLGtlPVswXSxLZT1bXSxGdD1bbnVsbF0sTmU9W10sZ249dGhpcy50YWJsZSxfdD0iIixFdD0wLEd0PTAsbG49Mix4dD0xLFB0PU5lLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLFFlPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksRHQ9e3l5Ont9fTtmb3IodmFyIGt0IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksa3QpJiYoRHQueXlba3RdPXRoaXMueXlba3RdKTtRZS5zZXRJbnB1dChTZSxEdC55eSksRHQueXkubGV4ZXI9UWUsRHQueXkucGFyc2VyPXRoaXMsdHlwZW9mIFFlLnl5bGxvYz4idSImJihRZS55eWxsb2M9e30pO3ZhciBPbj1RZS55eWxsb2M7TmUucHVzaChPbik7dmFyIGh0PVFlLm9wdGlvbnMmJlFlLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBEdC55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1EdC55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiB6cigpe3ZhciBBdDtyZXR1cm4gQXQ9S2UucG9wKCl8fFFlLmxleCgpfHx4dCx0eXBlb2YgQXQhPSJudW1iZXIiJiYoQXQgaW5zdGFuY2VvZiBBcnJheSYmKEtlPUF0LEF0PUtlLnBvcCgpKSxBdD1DZS5zeW1ib2xzX1tBdF18fEF0KSxBdH1mb3IodmFyIHl0LGppLHhpLE1hLHpzPXt9LGFvLFRyLEZuLHFuOzspe2lmKGppPWtlW2tlLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2ppXT94aT10aGlzLmRlZmF1bHRBY3Rpb25zW2ppXTooKHl0PT09bnVsbHx8dHlwZW9mIHl0PiJ1IikmJih5dD16cigpKSx4aT1nbltqaV0mJmduW2ppXVt5dF0pLHR5cGVvZiB4aT4idSJ8fCF4aS5sZW5ndGh8fCF4aVswXSl7dmFyIFVuPSIiO3FuPVtdO2ZvcihhbyBpbiBnbltqaV0pdGhpcy50ZXJtaW5hbHNfW2FvXSYmYW8+bG4mJnFuLnB1c2goIiciK3RoaXMudGVybWluYWxzX1thb10rIiciKTtRZS5zaG93UG9zaXRpb24/VW49IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoRXQrMSkrYDoKYCtRZS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK3FuLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19beXRdfHx5dCkrIiciOlVuPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEV0KzEpKyI6IFVuZXhwZWN0ZWQgIisoeXQ9PXh0PyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3l0XXx8eXQpKyInIiksdGhpcy5wYXJzZUVycm9yKFVuLHt0ZXh0OlFlLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t5dF18fHl0LGxpbmU6UWUueXlsaW5lbm8sbG9jOk9uLGV4cGVjdGVkOnFufSl9aWYoeGlbMF1pbnN0YW5jZW9mIEFycmF5JiZ4aS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2ppKyIsIHRva2VuOiAiK3l0KTtzd2l0Y2goeGlbMF0pe2Nhc2UgMTprZS5wdXNoKHl0KSxGdC5wdXNoKFFlLnl5dGV4dCksTmUucHVzaChRZS55eWxsb2MpLGtlLnB1c2goeGlbMV0pLHl0PW51bGwsR3Q9UWUueXlsZW5nLF90PVFlLnl5dGV4dCxFdD1RZS55eWxpbmVubyxPbj1RZS55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKFRyPXRoaXMucHJvZHVjdGlvbnNfW3hpWzFdXVsxXSx6cy4kPUZ0W0Z0Lmxlbmd0aC1Ucl0senMuXyQ9e2ZpcnN0X2xpbmU6TmVbTmUubGVuZ3RoLShUcnx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOk5lW05lLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOk5lW05lLmxlbmd0aC0oVHJ8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46TmVbTmUubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxodCYmKHpzLl8kLnJhbmdlPVtOZVtOZS5sZW5ndGgtKFRyfHwxKV0ucmFuZ2VbMF0sTmVbTmUubGVuZ3RoLTFdLnJhbmdlWzFdXSksTWE9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHpzLFtfdCxHdCxFdCxEdC55eSx4aVsxXSxGdCxOZV0uY29uY2F0KFB0KSksdHlwZW9mIE1hPCJ1IilyZXR1cm4gTWE7VHImJihrZT1rZS5zbGljZSgwLC0xKlRyKjIpLEZ0PUZ0LnNsaWNlKDAsLTEqVHIpLE5lPU5lLnNsaWNlKDAsLTEqVHIpKSxrZS5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3hpWzFdXVswXSksRnQucHVzaCh6cy4kKSxOZS5wdXNoKHpzLl8kKSxGbj1nbltrZVtrZS5sZW5ndGgtMl1dW2tlW2tlLmxlbmd0aC0xXV0sa2UucHVzaChGbik7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LFBlPWZ1bmN0aW9uKCl7dmFyIEllPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKENlLGtlKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKENlLGtlKTtlbHNlIHRocm93IG5ldyBFcnJvcihDZSl9LHNldElucHV0OmZ1bmN0aW9uKFNlLENlKXtyZXR1cm4gdGhpcy55eT1DZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9U2UsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIFNlPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1TZSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9U2UsdGhpcy5tYXRjaGVkKz1TZTt2YXIgQ2U9U2UubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBDZT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksU2V9LHVucHV0OmZ1bmN0aW9uKFNlKXt2YXIgQ2U9U2UubGVuZ3RoLGtlPVNlLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9U2UrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLUNlKSx0aGlzLm9mZnNldC09Q2U7dmFyIEtlPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLGtlLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09a2UubGVuZ3RoLTEpO3ZhciBGdD10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46a2U/KGtlLmxlbmd0aD09PUtlLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrS2VbS2UubGVuZ3RoLWtlLmxlbmd0aF0ubGVuZ3RoLWtlWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tQ2V9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bRnRbMF0sRnRbMF0rdGhpcy55eWxlbmctQ2VdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihTZSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKFNlKSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBTZT10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKFNlLmxlbmd0aD4yMD8iLi4uIjoiIikrU2Uuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgU2U9dGhpcy5tYXRjaDtyZXR1cm4gU2UubGVuZ3RoPDIwJiYoU2UrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLVNlLmxlbmd0aCkpLChTZS5zdWJzdHIoMCwyMCkrKFNlLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgU2U9dGhpcy5wYXN0SW5wdXQoKSxDZT1uZXcgQXJyYXkoU2UubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gU2UrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK0NlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbihTZSxDZSl7dmFyIGtlLEtlLEZ0O2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihGdD17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihGdC55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxLZT1TZVswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksS2UmJih0aGlzLnl5bGluZW5vKz1LZS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpLZT9LZVtLZS5sZW5ndGgtMV0ubGVuZ3RoLUtlW0tlLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK1NlWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPVNlWzBdLHRoaXMubWF0Y2grPVNlWzBdLHRoaXMubWF0Y2hlcz1TZSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShTZVswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9U2VbMF0sa2U9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsQ2UsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksa2UpcmV0dXJuIGtlO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBOZSBpbiBGdCl0aGlzW05lXT1GdFtOZV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgU2UsQ2Usa2UsS2U7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgRnQ9dGhpcy5fY3VycmVudFJ1bGVzKCksTmU9MDtOZTxGdC5sZW5ndGg7TmUrKylpZihrZT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW0Z0W05lXV0pLGtlJiYoIUNlfHxrZVswXS5sZW5ndGg+Q2VbMF0ubGVuZ3RoKSl7aWYoQ2U9a2UsS2U9TmUsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoU2U9dGhpcy50ZXN0X21hdGNoKGtlLEZ0W05lXSksU2UhPT0hMSlyZXR1cm4gU2U7aWYodGhpcy5fYmFja3RyYWNrKXtDZT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBDZT8oU2U9dGhpcy50ZXN0X21hdGNoKENlLEZ0W0tlXSksU2UhPT0hMT9TZTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIENlPXRoaXMubmV4dCgpO3JldHVybiBDZXx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24oQ2Upe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChDZSl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIENlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIENlPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oQ2Upe3JldHVybiBDZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKENlfHwwKSxDZT49MD90aGlzLmNvbmRpdGlvblN0YWNrW0NlXToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihDZSl7dGhpcy5iZWdpbihDZSl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oQ2Usa2UsS2UsRnQpe3N3aXRjaChLZSl7Y2FzZSAwOnJldHVybiA0MDtjYXNlIDE6cmV0dXJuIDQ0O2Nhc2UgMjpyZXR1cm4gNDU7Y2FzZSAzOnJldHVybiA0NjtjYXNlIDQ6cmV0dXJuIDQ3O2Nhc2UgNTpicmVhaztjYXNlIDY6YnJlYWs7Y2FzZSA3OnJldHVybiA1O2Nhc2UgODpicmVhaztjYXNlIDk6YnJlYWs7Y2FzZSAxMDpicmVhaztjYXNlIDExOmJyZWFrO2Nhc2UgMTI6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJTQ0FMRSIpLDE2O2Nhc2UgMTM6cmV0dXJuIDE3O2Nhc2UgMTQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTU6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDMyO2Nhc2UgMTY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDE3OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzNDtjYXNlIDE4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7Y2FzZSAxOTp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAyMDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMTpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAyMjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIkNMQVNTREVGIiksMzc7Y2FzZSAyMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJDTEFTU0RFRklEIiksIkRFRkFVTFRfQ0xBU1NERUZfSUQiO2Nhc2UgMjQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiQ0xBU1NERUZJRCIpLDM4O2Nhc2UgMjU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwzOTtjYXNlIDI2OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiQ0xBU1MiKSw0MTtjYXNlIDI3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkNMQVNTX1NUWUxFIiksNDI7Y2FzZSAyODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQzO2Nhc2UgMjk6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJTQ0FMRSIpLDE2O2Nhc2UgMzA6cmV0dXJuIDE3O2Nhc2UgMzE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzI6dGhpcy5wdXNoU3RhdGUoIlNUQVRFIik7YnJlYWs7Y2FzZSAzMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGtlLnl5dGV4dD1rZS55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDI0O2Nhc2UgMzQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxrZS55eXRleHQ9a2UueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyNTtjYXNlIDM1OnJldHVybiB0aGlzLnBvcFN0YXRlKCksa2UueXl0ZXh0PWtlLnl5dGV4dC5zbGljZSgwLC0xMCkudHJpbSgpLDI2O2Nhc2UgMzY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxrZS55eXRleHQ9a2UueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyNDtjYXNlIDM3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksa2UueXl0ZXh0PWtlLnl5dGV4dC5zbGljZSgwLC04KS50cmltKCksMjU7Y2FzZSAzODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGtlLnl5dGV4dD1rZS55eXRleHQuc2xpY2UoMCwtMTApLnRyaW0oKSwyNjtjYXNlIDM5OnJldHVybiA0NDtjYXNlIDQwOnJldHVybiA0NTtjYXNlIDQxOnJldHVybiA0NjtjYXNlIDQyOnJldHVybiA0NztjYXNlIDQzOnRoaXMucHVzaFN0YXRlKCJTVEFURV9TVFJJTkciKTticmVhaztjYXNlIDQ0OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiU1RBVEVfSUQiKSwiQVMiO2Nhc2UgNDU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiSUQiO2Nhc2UgNDY6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNDc6cmV0dXJuIlNUQVRFX0RFU0NSIjtjYXNlIDQ4OnJldHVybiAxODtjYXNlIDQ5OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDUwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoInN0cnVjdCIpLDE5O2Nhc2UgNTE6YnJlYWs7Y2FzZSA1MjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDIwO2Nhc2UgNTM6YnJlYWs7Y2FzZSA1NDpyZXR1cm4gdGhpcy5iZWdpbigiTk9URSIpLDI4O2Nhc2UgNTU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiTk9URV9JRCIpLDUyO2Nhc2UgNTY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiTk9URV9JRCIpLDUzO2Nhc2UgNTc6dGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJGTE9BVElOR19OT1RFIik7YnJlYWs7Y2FzZSA1ODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJGTE9BVElOR19OT1RFX0lEIiksIkFTIjtjYXNlIDU5OmJyZWFrO2Nhc2UgNjA6cmV0dXJuIk5PVEVfVEVYVCI7Y2FzZSA2MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJJRCI7Y2FzZSA2MjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJOT1RFX1RFWFQiKSwyMztjYXNlIDYzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksa2UueXl0ZXh0PWtlLnl5dGV4dC5zdWJzdHIoMikudHJpbSgpLDMwO2Nhc2UgNjQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxrZS55eXRleHQ9a2UueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwzMDtjYXNlIDY1OnJldHVybiA2O2Nhc2UgNjY6cmV0dXJuIDY7Y2FzZSA2NzpyZXR1cm4gMTU7Y2FzZSA2ODpyZXR1cm4gNTA7Y2FzZSA2OTpyZXR1cm4gMjM7Y2FzZSA3MDpyZXR1cm4ga2UueXl0ZXh0PWtlLnl5dGV4dC50cmltKCksMTM7Y2FzZSA3MTpyZXR1cm4gMTQ7Y2FzZSA3MjpyZXR1cm4gMjc7Y2FzZSA3MzpyZXR1cm4gNTE7Y2FzZSA3NDpyZXR1cm4gNTtjYXNlIDc1OnJldHVybiJJTlZBTElEIn19LHJ1bGVzOlsvXig/OmRlZmF1bHRcYikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopL2ksL14oPzolJSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5dKykvaSwvXig/Oltcc10rKS9pLC9eKD86KCg/IVxuKVxzKSspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JVteXG5dKikvaSwvXig/OnNjYWxlXHMrKS9pLC9eKD86XGQrKS9pLC9eKD86XHMrd2lkdGhcYikvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86Y2xhc3NEZWZccyspL2ksL14oPzpERUZBVUxUXHMrKS9pLC9eKD86XHcrXHMrKS9pLC9eKD86W15cbl0qKS9pLC9eKD86Y2xhc3NccyspL2ksL14oPzooXHcrKSsoKCxccypcdyspKikpL2ksL14oPzpbXlxuXSopL2ksL14oPzpzY2FsZVxzKykvaSwvXig/OlxkKykvaSwvXig/OlxzK3dpZHRoXGIpL2ksL14oPzpzdGF0ZVxzKykvaSwvXig/Oi4qPDxmb3JrPj4pL2ksL14oPzouKjw8am9pbj4+KS9pLC9eKD86Lio8PGNob2ljZT4+KS9pLC9eKD86LipcW1xbZm9ya1xdXF0pL2ksL14oPzouKlxbXFtqb2luXF1cXSkvaSwvXig/Oi4qXFtcW2Nob2ljZVxdXF0pL2ksL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS9pLC9eKD86WyJdKS9pLC9eKD86XHMqYXNccyspL2ksL14oPzpbXlxuXHtdKikvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86W15cblxzXHtdKykvaSwvXig/OlxuKS9pLC9eKD86XHspL2ksL14oPzolJSg/IVx7KVteXG5dKikvaSwvXig/Olx9KS9pLC9eKD86W1xuXSkvaSwvXig/Om5vdGVccyspL2ksL14oPzpsZWZ0IG9mXGIpL2ksL14oPzpyaWdodCBvZlxiKS9pLC9eKD86IikvaSwvXig/OlxzKmFzXHMqKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXlxuXSopL2ksL14oPzpccypbXjpcblxzXC1dKykvaSwvXig/OlxzKjpbXjpcbjtdKykvaSwvXig/Oltcc1xTXSo/ZW5kIG5vdGVcYikvaSwvXig/OnN0YXRlRGlhZ3JhbVxzKykvaSwvXig/OnN0YXRlRGlhZ3JhbS12MlxzKykvaSwvXig/OmhpZGUgZW1wdHkgZGVzY3JpcHRpb25cYikvaSwvXig/OlxbXCpcXSkvaSwvXig/OlteOlxuXHNcLVx7XSspL2ksL14oPzpccyo6W146XG47XSspL2ksL14oPzotLT4pL2ksL14oPzotLSkvaSwvXig/Ojo6OikvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOntMSU5FOntydWxlczpbOSwxMF0saW5jbHVzaXZlOiExfSxzdHJ1Y3Q6e3J1bGVzOls5LDEwLDIyLDI2LDMyLDM5LDQwLDQxLDQyLDUxLDUyLDUzLDU0LDY4LDY5LDcwLDcxLDcyXSxpbmNsdXNpdmU6ITF9LEZMT0FUSU5HX05PVEVfSUQ6e3J1bGVzOls2MV0saW5jbHVzaXZlOiExfSxGTE9BVElOR19OT1RFOntydWxlczpbNTgsNTksNjBdLGluY2x1c2l2ZTohMX0sTk9URV9URVhUOntydWxlczpbNjMsNjRdLGluY2x1c2l2ZTohMX0sTk9URV9JRDp7cnVsZXM6WzYyXSxpbmNsdXNpdmU6ITF9LE5PVEU6e3J1bGVzOls1NSw1Niw1N10saW5jbHVzaXZlOiExfSxDTEFTU19TVFlMRTp7cnVsZXM6WzI4XSxpbmNsdXNpdmU6ITF9LENMQVNTOntydWxlczpbMjddLGluY2x1c2l2ZTohMX0sQ0xBU1NERUZJRDp7cnVsZXM6WzI1XSxpbmNsdXNpdmU6ITF9LENMQVNTREVGOntydWxlczpbMjMsMjRdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzIwLDIxXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzE4XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzE2XSxpbmNsdXNpdmU6ITF9LFNDQUxFOntydWxlczpbMTMsMTQsMzAsMzFdLGluY2x1c2l2ZTohMX0sQUxJQVM6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sU1RBVEVfSUQ6e3J1bGVzOls0NV0saW5jbHVzaXZlOiExfSxTVEFURV9TVFJJTkc6e3J1bGVzOls0Niw0N10saW5jbHVzaXZlOiExfSxGT1JLX1NUQVRFOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LFNUQVRFOntydWxlczpbOSwxMCwzMywzNCwzNSwzNiwzNywzOCw0Myw0NCw0OCw0OSw1MF0saW5jbHVzaXZlOiExfSxJRDp7cnVsZXM6WzksMTBdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDYsNyw4LDEwLDExLDEyLDE1LDE3LDE5LDIyLDI2LDI5LDMyLDUwLDU0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDczLDc0LDc1XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIEllfSgpO0ZlLmxleGVyPVBlO2Z1bmN0aW9uIGplKCl7dGhpcy55eT17fX1yZXR1cm4gamUucHJvdG90eXBlPUZlLEZlLlBhcnNlcj1qZSxuZXcgamV9KCk7TnZlLnBhcnNlcj1OdmU7Y29uc3Qgb0tlPU52ZSxaaW49IkxSIixlc249IlRCIixFSj0ic3RhdGUiLFB2ZT0icmVsYXRpb24iLHRzbj0iY2xhc3NEZWYiLG5zbj0iYXBwbHlDbGFzcyIsWFI9ImRlZmF1bHQiLGNLZT0iZGl2aWRlciIsQnZlPSJbKl0iLHVLZT0ic3RhcnQiLGxLZT1CdmUsaEtlPSJlbmQiLGZLZT0iY29sb3IiLGRLZT0iZmlsbCIscnNuPSJiZ0ZpbGwiLGlzbj0iLCI7ZnVuY3Rpb24gZ0tlKCl7cmV0dXJue319bGV0IHBLZT1aaW4sVEo9W10sUVI9Z0tlKCk7Y29uc3QgYktlPSgpPT4oe3JlbGF0aW9uczpbXSxzdGF0ZXM6e30sZG9jdW1lbnRzOnt9fSk7bGV0IENKPXtyb290OmJLZSgpfSxqZz1DSi5yb290LEpSPTAsbUtlPTA7Y29uc3Qgc3NuPXtMSU5FOjAsRE9UVEVEX0xJTkU6MX0sYXNuPXtBR0dSRUdBVElPTjowLEVYVEVOU0lPTjoxLENPTVBPU0lUSU9OOjIsREVQRU5ERU5DWTozfSxTSj1pPT5KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGkpKSxvc249aT0+e1hlLmluZm8oIlNldHRpbmcgcm9vdCBkb2MiLGkpLFRKPWl9LGNzbj0oKT0+VEosX0o9KGkscyx1KT0+e2lmKHMuc3RtdD09PVB2ZSlfSihpLHMuc3RhdGUxLCEwKSxfSihpLHMuc3RhdGUyLCExKTtlbHNlIGlmKHMuc3RtdD09PUVKJiYocy5pZD09PSJbKl0iPyhzLmlkPXU/aS5pZCsiX3N0YXJ0IjppLmlkKyJfZW5kIixzLnN0YXJ0PXUpOnMuaWQ9cy5pZC50cmltKCkpLHMuZG9jKXtjb25zdCBkPVtdO2xldCBwPVtdLHY7Zm9yKHY9MDt2PHMuZG9jLmxlbmd0aDt2KyspaWYocy5kb2Nbdl0udHlwZT09PWNLZSl7Y29uc3QgYj1TSihzLmRvY1t2XSk7Yi5kb2M9U0oocCksZC5wdXNoKGIpLHA9W119ZWxzZSBwLnB1c2gocy5kb2Nbdl0pO2lmKGQubGVuZ3RoPjAmJnAubGVuZ3RoPjApe2NvbnN0IGI9e3N0bXQ6RUosaWQ6YmplKCksdHlwZToiZGl2aWRlciIsZG9jOlNKKHApfTtkLnB1c2goU0ooYikpLHMuZG9jPWR9cy5kb2MuZm9yRWFjaChiPT5fSihzLGIsITApKX19LHVzbj0oKT0+KF9KKHtpZDoicm9vdCJ9LHtpZDoicm9vdCIsZG9jOlRKfSwhMCkse2lkOiJyb290Iixkb2M6VEp9KSxsc249aT0+e2xldCBzO2kuZG9jP3M9aS5kb2M6cz1pLFhlLmluZm8ocyksdktlKCEwKSxYZS5pbmZvKCJFeHRyYWN0IixzKSxzLmZvckVhY2godT0+e3N3aXRjaCh1LnN0bXQpe2Nhc2UgRUo6clModS5pZC50cmltKCksdS50eXBlLHUuZG9jLHUuZGVzY3JpcHRpb24sdS5ub3RlLHUuY2xhc3Nlcyx1LnN0eWxlcyx1LnRleHRTdHlsZXMpO2JyZWFrO2Nhc2UgUHZlOndLZSh1LnN0YXRlMSx1LnN0YXRlMix1LmRlc2NyaXB0aW9uKTticmVhaztjYXNlIHRzbjp5S2UodS5pZC50cmltKCksdS5jbGFzc2VzKTticmVhaztjYXNlIG5zbjokdmUodS5pZC50cmltKCksdS5zdHlsZUNsYXNzKTticmVha319KX0sclM9ZnVuY3Rpb24oaSxzPVhSLHU9bnVsbCxkPW51bGwscD1udWxsLHY9bnVsbCxiPW51bGwseT1udWxsKXtjb25zdCBUPWk9PW51bGw/dm9pZCAwOmkudHJpbSgpO2pnLnN0YXRlc1tUXT09PXZvaWQgMD8oWGUuaW5mbygiQWRkaW5nIHN0YXRlICIsVCxkKSxqZy5zdGF0ZXNbVF09e2lkOlQsZGVzY3JpcHRpb25zOltdLHR5cGU6cyxkb2M6dSxub3RlOnAsY2xhc3NlczpbXSxzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0pOihqZy5zdGF0ZXNbVF0uZG9jfHwoamcuc3RhdGVzW1RdLmRvYz11KSxqZy5zdGF0ZXNbVF0udHlwZXx8KGpnLnN0YXRlc1tUXS50eXBlPXMpKSxkJiYoWGUuaW5mbygiU2V0dGluZyBzdGF0ZSBkZXNjcmlwdGlvbiIsVCxkKSx0eXBlb2YgZD09InN0cmluZyImJmp2ZShULGQudHJpbSgpKSx0eXBlb2YgZD09Im9iamVjdCImJmQuZm9yRWFjaChfPT5qdmUoVCxfLnRyaW0oKSkpKSxwJiYoamcuc3RhdGVzW1RdLm5vdGU9cCxqZy5zdGF0ZXNbVF0ubm90ZS50ZXh0PWNpLnNhbml0aXplVGV4dChqZy5zdGF0ZXNbVF0ubm90ZS50ZXh0LHF0KCkpKSx2JiYoWGUuaW5mbygiU2V0dGluZyBzdGF0ZSBjbGFzc2VzIixULHYpLCh0eXBlb2Ygdj09InN0cmluZyI/W3ZdOnYpLmZvckVhY2goQT0+JHZlKFQsQS50cmltKCkpKSksYiYmKFhlLmluZm8oIlNldHRpbmcgc3RhdGUgc3R5bGVzIixULGIpLCh0eXBlb2YgYj09InN0cmluZyI/W2JdOmIpLmZvckVhY2goQT0+eXNuKFQsQS50cmltKCkpKSkseSYmKFhlLmluZm8oIlNldHRpbmcgc3RhdGUgc3R5bGVzIixULGIpLCh0eXBlb2YgeT09InN0cmluZyI/W3ldOnkpLmZvckVhY2goQT0+eHNuKFQsQS50cmltKCkpKSl9LHZLZT1mdW5jdGlvbihpKXtDSj17cm9vdDpiS2UoKX0samc9Q0oucm9vdCxKUj0wLFFSPWdLZSgpLGl8fFBnKCl9LFpSPWZ1bmN0aW9uKGkpe3JldHVybiBqZy5zdGF0ZXNbaV19LGhzbj1mdW5jdGlvbigpe3JldHVybiBqZy5zdGF0ZXN9LGZzbj1mdW5jdGlvbigpe1hlLmluZm8oIkRvY3VtZW50cyA9ICIsQ0opfSxkc249ZnVuY3Rpb24oKXtyZXR1cm4gamcucmVsYXRpb25zfTtmdW5jdGlvbiBGdmUoaT0iIil7bGV0IHM9aTtyZXR1cm4gaT09PUJ2ZSYmKEpSKysscz1gJHt1S2V9JHtKUn1gKSxzfWZ1bmN0aW9uIFJ2ZShpPSIiLHM9WFIpe3JldHVybiBpPT09QnZlP3VLZTpzfWZ1bmN0aW9uIGdzbihpPSIiKXtsZXQgcz1pO3JldHVybiBpPT09bEtlJiYoSlIrKyxzPWAke2hLZX0ke0pSfWApLHN9ZnVuY3Rpb24gcHNuKGk9IiIscz1YUil7cmV0dXJuIGk9PT1sS2U/aEtlOnN9ZnVuY3Rpb24gYnNuKGkscyx1KXtsZXQgZD1GdmUoaS5pZC50cmltKCkpLHA9UnZlKGkuaWQudHJpbSgpLGkudHlwZSksdj1GdmUocy5pZC50cmltKCkpLGI9UnZlKHMuaWQudHJpbSgpLHMudHlwZSk7clMoZCxwLGkuZG9jLGkuZGVzY3JpcHRpb24saS5ub3RlLGkuY2xhc3NlcyxpLnN0eWxlcyxpLnRleHRTdHlsZXMpLHJTKHYsYixzLmRvYyxzLmRlc2NyaXB0aW9uLHMubm90ZSxzLmNsYXNzZXMscy5zdHlsZXMscy50ZXh0U3R5bGVzKSxqZy5yZWxhdGlvbnMucHVzaCh7aWQxOmQsaWQyOnYscmVsYXRpb25UaXRsZTpjaS5zYW5pdGl6ZVRleHQodSxxdCgpKX0pfWNvbnN0IHdLZT1mdW5jdGlvbihpLHMsdSl7aWYodHlwZW9mIGk9PSJvYmplY3QiKWJzbihpLHMsdSk7ZWxzZXtjb25zdCBkPUZ2ZShpLnRyaW0oKSkscD1SdmUoaSksdj1nc24ocy50cmltKCkpLGI9cHNuKHMpO3JTKGQscCksclModixiKSxqZy5yZWxhdGlvbnMucHVzaCh7aWQxOmQsaWQyOnYsdGl0bGU6Y2kuc2FuaXRpemVUZXh0KHUscXQoKSl9KX19LGp2ZT1mdW5jdGlvbihpLHMpe2NvbnN0IHU9amcuc3RhdGVzW2ldLGQ9cy5zdGFydHNXaXRoKCI6Iik/cy5yZXBsYWNlKCI6IiwiIikudHJpbSgpOnM7dS5kZXNjcmlwdGlvbnMucHVzaChjaS5zYW5pdGl6ZVRleHQoZCxxdCgpKSl9LG1zbj1mdW5jdGlvbihpKXtyZXR1cm4gaS5zdWJzdHJpbmcoMCwxKT09PSI6Ij9pLnN1YnN0cigyKS50cmltKCk6aS50cmltKCl9LHZzbj0oKT0+KG1LZSsrLCJkaXZpZGVyLWlkLSIrbUtlKSx5S2U9ZnVuY3Rpb24oaSxzPSIiKXtRUltpXT09PXZvaWQgMCYmKFFSW2ldPXtpZDppLHN0eWxlczpbXSx0ZXh0U3R5bGVzOltdfSk7Y29uc3QgdT1RUltpXTtzIT1udWxsJiZzLnNwbGl0KGlzbikuZm9yRWFjaChkPT57Y29uc3QgcD1kLnJlcGxhY2UoLyhbXjtdKik7LywiJDEiKS50cmltKCk7aWYoZC5tYXRjaChmS2UpKXtjb25zdCBiPXAucmVwbGFjZShkS2UscnNuKS5yZXBsYWNlKGZLZSxkS2UpO3UudGV4dFN0eWxlcy5wdXNoKGIpfXUuc3R5bGVzLnB1c2gocCl9KX0sd3NuPWZ1bmN0aW9uKCl7cmV0dXJuIFFSfSwkdmU9ZnVuY3Rpb24oaSxzKXtpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbih1KXtsZXQgZD1aUih1KTtpZihkPT09dm9pZCAwKXtjb25zdCBwPXUudHJpbSgpO3JTKHApLGQ9WlIocCl9ZC5jbGFzc2VzLnB1c2gocyl9KX0seXNuPWZ1bmN0aW9uKGkscyl7Y29uc3QgdT1aUihpKTt1IT09dm9pZCAwJiZ1LnRleHRTdHlsZXMucHVzaChzKX0seHNuPWZ1bmN0aW9uKGkscyl7Y29uc3QgdT1aUihpKTt1IT09dm9pZCAwJiZ1LnRleHRTdHlsZXMucHVzaChzKX0sRzc9e2dldENvbmZpZzooKT0+cXQoKS5zdGF0ZSxhZGRTdGF0ZTpyUyxjbGVhcjp2S2UsZ2V0U3RhdGU6WlIsZ2V0U3RhdGVzOmhzbixnZXRSZWxhdGlvbnM6ZHNuLGdldENsYXNzZXM6d3NuLGdldERpcmVjdGlvbjooKT0+cEtlLGFkZFJlbGF0aW9uOndLZSxnZXREaXZpZGVySWQ6dnNuLHNldERpcmVjdGlvbjppPT57cEtlPWl9LGNsZWFudXBMYWJlbDptc24sbGluZVR5cGU6c3NuLHJlbGF0aW9uVHlwZTphc24sbG9nRG9jdW1lbnRzOmZzbixnZXRSb290RG9jOmNzbixzZXRSb290RG9jOm9zbixnZXRSb290RG9jVjI6dXNuLGV4dHJhY3Q6bHNuLHRyaW1Db2xvbjppPT5pJiZpWzBdPT09IjoiP2kuc3Vic3RyKDEpLnRyaW0oKTppLnRyaW0oKSxnZXRBY2NUaXRsZTpDcCxzZXRBY2NUaXRsZTpCZyxnZXRBY2NEZXNjcmlwdGlvbjpfcCxzZXRBY2NEZXNjcmlwdGlvbjpTcCxhZGRTdHlsZUNsYXNzOnlLZSxzZXRDc3NDbGFzczokdmUsYWRkRGVzY3JpcHRpb246anZlLHNldERpYWdyYW1UaXRsZTpjbSxnZXREaWFncmFtVGl0bGU6QXB9LHhLZT1pPT5gCmRlZnMgI3N0YXRlZGlhZ3JhbS1iYXJiRW5kIHsKICAgIGZpbGw6ICR7aS50cmFuc2l0aW9uQ29sb3J9OwogICAgc3Ryb2tlOiAke2kudHJhbnNpdGlvbkNvbG9yfTsKICB9Cmcuc3RhdGVHcm91cCB0ZXh0IHsKICBmaWxsOiAke2kubm9kZUJvcmRlcn07CiAgc3Ryb2tlOiBub25lOwogIGZvbnQtc2l6ZTogMTBweDsKfQpnLnN0YXRlR3JvdXAgdGV4dCB7CiAgZmlsbDogJHtpLnRleHRDb2xvcn07CiAgc3Ryb2tlOiBub25lOwogIGZvbnQtc2l6ZTogMTBweDsKCn0KZy5zdGF0ZUdyb3VwIC5zdGF0ZS10aXRsZSB7CiAgZm9udC13ZWlnaHQ6IGJvbGRlcjsKICBmaWxsOiAke2kuc3RhdGVMYWJlbENvbG9yfTsKfQoKZy5zdGF0ZUdyb3VwIHJlY3QgewogIGZpbGw6ICR7aS5tYWluQmtnfTsKICBzdHJva2U6ICR7aS5ub2RlQm9yZGVyfTsKfQoKZy5zdGF0ZUdyb3VwIGxpbmUgewogIHN0cm9rZTogJHtpLmxpbmVDb2xvcn07CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgoudHJhbnNpdGlvbiB7CiAgc3Ryb2tlOiAke2kudHJhbnNpdGlvbkNvbG9yfTsKICBzdHJva2Utd2lkdGg6IDE7CiAgZmlsbDogbm9uZTsKfQoKLnN0YXRlR3JvdXAgLmNvbXBvc2l0IHsKICBmaWxsOiAke2kuYmFja2dyb3VuZH07CiAgYm9yZGVyLWJvdHRvbTogMXB4Cn0KCi5zdGF0ZUdyb3VwIC5hbHQtY29tcG9zaXQgewogIGZpbGw6ICNlMGUwZTA7CiAgYm9yZGVyLWJvdHRvbTogMXB4Cn0KCi5zdGF0ZS1ub3RlIHsKICBzdHJva2U6ICR7aS5ub3RlQm9yZGVyQ29sb3J9OwogIGZpbGw6ICR7aS5ub3RlQmtnQ29sb3J9OwoKICB0ZXh0IHsKICAgIGZpbGw6ICR7aS5ub3RlVGV4dENvbG9yfTsKICAgIHN0cm9rZTogbm9uZTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICB9Cn0KCi5zdGF0ZUxhYmVsIC5ib3ggewogIHN0cm9rZTogbm9uZTsKICBzdHJva2Utd2lkdGg6IDA7CiAgZmlsbDogJHtpLm1haW5Ca2d9OwogIG9wYWNpdHk6IDAuNTsKfQoKLmVkZ2VMYWJlbCAubGFiZWwgcmVjdCB7CiAgZmlsbDogJHtpLmxhYmVsQmFja2dyb3VuZENvbG9yfTsKICBvcGFjaXR5OiAwLjU7Cn0KLmVkZ2VMYWJlbCAubGFiZWwgdGV4dCB7CiAgZmlsbDogJHtpLnRyYW5zaXRpb25MYWJlbENvbG9yfHxpLnRlcnRpYXJ5VGV4dENvbG9yfTsKfQoubGFiZWwgZGl2IC5lZGdlTGFiZWwgewogIGNvbG9yOiAke2kudHJhbnNpdGlvbkxhYmVsQ29sb3J8fGkudGVydGlhcnlUZXh0Q29sb3J9Owp9Cgouc3RhdGVMYWJlbCB0ZXh0IHsKICBmaWxsOiAke2kuc3RhdGVMYWJlbENvbG9yfTsKICBmb250LXNpemU6IDEwcHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5ub2RlIGNpcmNsZS5zdGF0ZS1zdGFydCB7CiAgZmlsbDogJHtpLnNwZWNpYWxTdGF0ZUNvbG9yfTsKICBzdHJva2U6ICR7aS5zcGVjaWFsU3RhdGVDb2xvcn07Cn0KCi5ub2RlIC5mb3JrLWpvaW4gewogIGZpbGw6ICR7aS5zcGVjaWFsU3RhdGVDb2xvcn07CiAgc3Ryb2tlOiAke2kuc3BlY2lhbFN0YXRlQ29sb3J9Owp9Cgoubm9kZSBjaXJjbGUuc3RhdGUtZW5kIHsKICBmaWxsOiAke2kuaW5uZXJFbmRCYWNrZ3JvdW5kfTsKICBzdHJva2U6ICR7aS5iYWNrZ3JvdW5kfTsKICBzdHJva2Utd2lkdGg6IDEuNQp9Ci5lbmQtc3RhdGUtaW5uZXIgewogIGZpbGw6ICR7aS5jb21wb3NpdGVCYWNrZ3JvdW5kfHxpLmJhY2tncm91bmR9OwogIC8vIHN0cm9rZTogJHtpLmJhY2tncm91bmR9OwogIHN0cm9rZS13aWR0aDogMS41Cn0KCi5ub2RlIHJlY3QgewogIGZpbGw6ICR7aS5zdGF0ZUJrZ3x8aS5tYWluQmtnfTsKICBzdHJva2U6ICR7aS5zdGF0ZUJvcmRlcnx8aS5ub2RlQm9yZGVyfTsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoubm9kZSBwb2x5Z29uIHsKICBmaWxsOiAke2kubWFpbkJrZ307CiAgc3Ryb2tlOiAke2kuc3RhdGVCb3JkZXJ8fGkubm9kZUJvcmRlcn07OwogIHN0cm9rZS13aWR0aDogMXB4Owp9CiNzdGF0ZWRpYWdyYW0tYmFyYkVuZCB7CiAgZmlsbDogJHtpLmxpbmVDb2xvcn07Cn0KCi5zdGF0ZWRpYWdyYW0tY2x1c3RlciByZWN0IHsKICBmaWxsOiAke2kuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfTsKICBzdHJva2U6ICR7aS5zdGF0ZUJvcmRlcnx8aS5ub2RlQm9yZGVyfTsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLmNsdXN0ZXItbGFiZWwsIC5ub2RlTGFiZWwgewogIGNvbG9yOiAke2kuc3RhdGVMYWJlbENvbG9yfTsKfQoKLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIHJlY3Qub3V0ZXIgewogIHJ4OiA1cHg7CiAgcnk6IDVweDsKfQouc3RhdGVkaWFncmFtLXN0YXRlIC5kaXZpZGVyIHsKICBzdHJva2U6ICR7aS5zdGF0ZUJvcmRlcnx8aS5ub2RlQm9yZGVyfTsKfQoKLnN0YXRlZGlhZ3JhbS1zdGF0ZSAudGl0bGUtc3RhdGUgewogIHJ4OiA1cHg7CiAgcnk6IDVweDsKfQouc3RhdGVkaWFncmFtLWNsdXN0ZXIuc3RhdGVkaWFncmFtLWNsdXN0ZXIgLmlubmVyIHsKICBmaWxsOiAke2kuY29tcG9zaXRlQmFja2dyb3VuZHx8aS5iYWNrZ3JvdW5kfTsKfQouc3RhdGVkaWFncmFtLWNsdXN0ZXIuc3RhdGVkaWFncmFtLWNsdXN0ZXItYWx0IC5pbm5lciB7CiAgZmlsbDogJHtpLmFsdEJhY2tncm91bmQ/aS5hbHRCYWNrZ3JvdW5kOiIjZWZlZmVmIn07Cn0KCi5zdGF0ZWRpYWdyYW0tY2x1c3RlciAuaW5uZXIgewogIHJ4OjA7CiAgcnk6MDsKfQoKLnN0YXRlZGlhZ3JhbS1zdGF0ZSByZWN0LmJhc2ljIHsKICByeDogNXB4OwogIHJ5OiA1cHg7Cn0KLnN0YXRlZGlhZ3JhbS1zdGF0ZSByZWN0LmRpdmlkZXIgewogIHN0cm9rZS1kYXNoYXJyYXk6IDEwLDEwOwogIGZpbGw6ICR7aS5hbHRCYWNrZ3JvdW5kP2kuYWx0QmFja2dyb3VuZDoiI2VmZWZlZiJ9Owp9Cgoubm90ZS1lZGdlIHsKICBzdHJva2UtZGFzaGFycmF5OiA1Owp9Cgouc3RhdGVkaWFncmFtLW5vdGUgcmVjdCB7CiAgZmlsbDogJHtpLm5vdGVCa2dDb2xvcn07CiAgc3Ryb2tlOiAke2kubm90ZUJvcmRlckNvbG9yfTsKICBzdHJva2Utd2lkdGg6IDFweDsKICByeDogMDsKICByeTogMDsKfQouc3RhdGVkaWFncmFtLW5vdGUgcmVjdCB7CiAgZmlsbDogJHtpLm5vdGVCa2dDb2xvcn07CiAgc3Ryb2tlOiAke2kubm90ZUJvcmRlckNvbG9yfTsKICBzdHJva2Utd2lkdGg6IDFweDsKICByeDogMDsKICByeTogMDsKfQoKLnN0YXRlZGlhZ3JhbS1ub3RlIHRleHQgewogIGZpbGw6ICR7aS5ub3RlVGV4dENvbG9yfTsKfQoKLnN0YXRlZGlhZ3JhbS1ub3RlIC5ub2RlTGFiZWwgewogIGNvbG9yOiAke2kubm90ZVRleHRDb2xvcn07Cn0KLnN0YXRlZGlhZ3JhbSAuZWRnZUxhYmVsIHsKICBjb2xvcjogcmVkOyAvLyAke2kubm90ZVRleHRDb2xvcn07Cn0KCiNkZXBlbmRlbmN5U3RhcnQsICNkZXBlbmRlbmN5RW5kIHsKICBmaWxsOiAke2kubGluZUNvbG9yfTsKICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogIHN0cm9rZS13aWR0aDogMTsKfQoKLnN0YXRlZGlhZ3JhbVRpdGxlVGV4dCB7CiAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICBmb250LXNpemU6IDE4cHg7CiAgZmlsbDogJHtpLnRleHRDb2xvcn07Cn0KYCx6dmU9e30sa3NuPShpLHMpPT57enZlW2ldPXN9LEVzbj1pPT56dmVbaV0sa0tlPSgpPT5PYmplY3Qua2V5cyh6dmUpLFRzbj17Z2V0OkVzbixzZXQ6a3NuLGtleXM6a0tlLHNpemU6KCk9PmtLZSgpLmxlbmd0aH0sQ3NuPWk9PmkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsInN0YXJ0LXN0YXRlIikuYXR0cigiciIscXQoKS5zdGF0ZS5zaXplVW5pdCkuYXR0cigiY3giLHF0KCkuc3RhdGUucGFkZGluZytxdCgpLnN0YXRlLnNpemVVbml0KS5hdHRyKCJjeSIscXQoKS5zdGF0ZS5wYWRkaW5nK3F0KCkuc3RhdGUuc2l6ZVVuaXQpLFNzbj1pPT5pLmFwcGVuZCgibGluZSIpLnN0eWxlKCJzdHJva2UiLCJncmV5Iikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzIikuYXR0cigieDEiLHF0KCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDIiLHF0KCkuc3RhdGUudGV4dEhlaWdodCoyKS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLDApLF9zbj0oaSxzKT0+e2NvbnN0IHU9aS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwyKnF0KCkuc3RhdGUucGFkZGluZykuYXR0cigieSIscXQoKS5zdGF0ZS50ZXh0SGVpZ2h0KzIqcXQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJmb250LXNpemUiLHF0KCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KHMuaWQpLGQ9dS5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBpLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLHF0KCkuc3RhdGUucGFkZGluZykuYXR0cigieSIscXQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsZC53aWR0aCsyKnF0KCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0IixkLmhlaWdodCsyKnF0KCkuc3RhdGUucGFkZGluZykuYXR0cigicngiLHF0KCkuc3RhdGUucmFkaXVzKSx1fSxBc249KGkscyk9Pntjb25zdCB1PWZ1bmN0aW9uKFIsRixqKXtjb25zdCBLPVIuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLDIqcXQoKS5zdGF0ZS5wYWRkaW5nKS50ZXh0KEYpO2p8fEsuYXR0cigiZHkiLHF0KCkuc3RhdGUudGV4dEhlaWdodCl9LHA9aS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwyKnF0KCkuc3RhdGUucGFkZGluZykuYXR0cigieSIscXQoKS5zdGF0ZS50ZXh0SGVpZ2h0KzEuMypxdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoImZvbnQtc2l6ZSIscXQoKS5zdGF0ZS5mb250U2l6ZSkuYXR0cigiY2xhc3MiLCJzdGF0ZS10aXRsZSIpLnRleHQocy5kZXNjcmlwdGlvbnNbMF0pLm5vZGUoKS5nZXRCQm94KCksdj1wLmhlaWdodCxiPWkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIscXQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5Iix2K3F0KCkuc3RhdGUucGFkZGluZyouNCtxdCgpLnN0YXRlLmRpdmlkZXJNYXJnaW4rcXQoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJjbGFzcyIsInN0YXRlLWRlc2NyaXB0aW9uIik7bGV0IHk9ITAsVD0hMDtzLmRlc2NyaXB0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKFIpe3l8fCh1KGIsUixUKSxUPSExKSx5PSExfSk7Y29uc3QgXz1pLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixxdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkxIixxdCgpLnN0YXRlLnBhZGRpbmcrditxdCgpLnN0YXRlLmRpdmlkZXJNYXJnaW4vMikuYXR0cigieTIiLHF0KCkuc3RhdGUucGFkZGluZyt2K3F0KCkuc3RhdGUuZGl2aWRlck1hcmdpbi8yKS5hdHRyKCJjbGFzcyIsImRlc2NyLWRpdmlkZXIiKSxBPWIubm9kZSgpLmdldEJCb3goKSxQPU1hdGgubWF4KEEud2lkdGgscC53aWR0aCk7cmV0dXJuIF8uYXR0cigieDIiLFArMypxdCgpLnN0YXRlLnBhZGRpbmcpLGkuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIscXQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixxdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIixQKzIqcXQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLEEuaGVpZ2h0K3YrMipxdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInJ4IixxdCgpLnN0YXRlLnJhZGl1cyksaX0sTHNuPShpLHMsdSk9Pntjb25zdCBkPXF0KCkuc3RhdGUucGFkZGluZyxwPTIqcXQoKS5zdGF0ZS5wYWRkaW5nLHY9aS5ub2RlKCkuZ2V0QkJveCgpLGI9di53aWR0aCx5PXYueCxUPWkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIscXQoKS5zdGF0ZS50aXRsZVNoaWZ0KS5hdHRyKCJmb250LXNpemUiLHF0KCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KHMuaWQpLEE9VC5ub2RlKCkuZ2V0QkJveCgpLndpZHRoK3A7bGV0IFA9TWF0aC5tYXgoQSxiKTtQPT09YiYmKFA9UCtwKTtsZXQgUjtjb25zdCBGPWkubm9kZSgpLmdldEJCb3goKTtzLmRvYyxSPXktZCxBPmImJihSPShiLVApLzIrZCksTWF0aC5hYnMoeS1GLngpPGQmJkE+YiYmKFI9eS0oQS1iKS8yKTtjb25zdCBqPTEtcXQoKS5zdGF0ZS50ZXh0SGVpZ2h0O3JldHVybiBpLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLFIpLmF0dHIoInkiLGopLmF0dHIoImNsYXNzIix1PyJhbHQtY29tcG9zaXQiOiJjb21wb3NpdCIpLmF0dHIoIndpZHRoIixQKS5hdHRyKCJoZWlnaHQiLEYuaGVpZ2h0K3F0KCkuc3RhdGUudGV4dEhlaWdodCtxdCgpLnN0YXRlLnRpdGxlU2hpZnQrMSkuYXR0cigicngiLCIwIiksVC5hdHRyKCJ4IixSK2QpLEE8PWImJlQuYXR0cigieCIseSsoUC1wKS8yLUEvMitkKSxpLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLFIpLmF0dHIoInkiLHF0KCkuc3RhdGUudGl0bGVTaGlmdC1xdCgpLnN0YXRlLnRleHRIZWlnaHQtcXQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsUCkuYXR0cigiaGVpZ2h0IixxdCgpLnN0YXRlLnRleHRIZWlnaHQqMykuYXR0cigicngiLHF0KCkuc3RhdGUucmFkaXVzKSxpLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLFIpLmF0dHIoInkiLHF0KCkuc3RhdGUudGl0bGVTaGlmdC1xdCgpLnN0YXRlLnRleHRIZWlnaHQtcXQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsUCkuYXR0cigiaGVpZ2h0IixGLmhlaWdodCszKzIqcXQoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJyeCIscXQoKS5zdGF0ZS5yYWRpdXMpLGl9LE1zbj1pPT4oaS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImNsYXNzIiwiZW5kLXN0YXRlLW91dGVyIikuYXR0cigiciIscXQoKS5zdGF0ZS5zaXplVW5pdCtxdCgpLnN0YXRlLm1pbmlQYWRkaW5nKS5hdHRyKCJjeCIscXQoKS5zdGF0ZS5wYWRkaW5nK3F0KCkuc3RhdGUuc2l6ZVVuaXQrcXQoKS5zdGF0ZS5taW5pUGFkZGluZykuYXR0cigiY3kiLHF0KCkuc3RhdGUucGFkZGluZytxdCgpLnN0YXRlLnNpemVVbml0K3F0KCkuc3RhdGUubWluaVBhZGRpbmcpLGkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsImVuZC1zdGF0ZS1pbm5lciIpLmF0dHIoInIiLHF0KCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoImN4IixxdCgpLnN0YXRlLnBhZGRpbmcrcXQoKS5zdGF0ZS5zaXplVW5pdCsyKS5hdHRyKCJjeSIscXQoKS5zdGF0ZS5wYWRkaW5nK3F0KCkuc3RhdGUuc2l6ZVVuaXQrMikpLERzbj0oaSxzKT0+e2xldCB1PXF0KCkuc3RhdGUuZm9ya1dpZHRoLGQ9cXQoKS5zdGF0ZS5mb3JrSGVpZ2h0O2lmKHMucGFyZW50SWQpe2xldCBwPXU7dT1kLGQ9cH1yZXR1cm4gaS5hcHBlbmQoInJlY3QiKS5zdHlsZSgic3Ryb2tlIiwiYmxhY2siKS5zdHlsZSgiZmlsbCIsImJsYWNrIikuYXR0cigid2lkdGgiLHUpLmF0dHIoImhlaWdodCIsZCkuYXR0cigieCIscXQoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixxdCgpLnN0YXRlLnBhZGRpbmcpfSxJc249KGkscyx1LGQpPT57bGV0IHA9MDtjb25zdCB2PWQuYXBwZW5kKCJ0ZXh0Iik7di5zdHlsZSgidGV4dC1hbmNob3IiLCJzdGFydCIpLHYuYXR0cigiY2xhc3MiLCJub3RlVGV4dCIpO2xldCBiPWkucmVwbGFjZSgvXHJcbi9nLCI8YnIvPiIpO2I9Yi5yZXBsYWNlKC9cbi9nLCI8YnIvPiIpO2NvbnN0IHk9Yi5zcGxpdChjaS5saW5lQnJlYWtSZWdleCk7bGV0IFQ9MS4yNSpxdCgpLnN0YXRlLm5vdGVNYXJnaW47Zm9yKGNvbnN0IF8gb2YgeSl7Y29uc3QgQT1fLnRyaW0oKTtpZihBLmxlbmd0aD4wKXtjb25zdCBQPXYuYXBwZW5kKCJ0c3BhbiIpO2lmKFAudGV4dChBKSxUPT09MCl7Y29uc3QgUj1QLm5vZGUoKS5nZXRCQm94KCk7VCs9Ui5oZWlnaHR9cCs9VCxQLmF0dHIoIngiLHMrcXQoKS5zdGF0ZS5ub3RlTWFyZ2luKSxQLmF0dHIoInkiLHUrcCsxLjI1KnF0KCkuc3RhdGUubm90ZU1hcmdpbil9fXJldHVybnt0ZXh0V2lkdGg6di5ub2RlKCkuZ2V0QkJveCgpLndpZHRoLHRleHRIZWlnaHQ6cH19LE9zbj0oaSxzKT0+e3MuYXR0cigiY2xhc3MiLCJzdGF0ZS1ub3RlIik7Y29uc3QgdT1zLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLHF0KCkuc3RhdGUucGFkZGluZyksZD1zLmFwcGVuZCgiZyIpLHt0ZXh0V2lkdGg6cCx0ZXh0SGVpZ2h0OnZ9PUlzbihpLDAsMCxkKTtyZXR1cm4gdS5hdHRyKCJoZWlnaHQiLHYrMipxdCgpLnN0YXRlLm5vdGVNYXJnaW4pLHUuYXR0cigid2lkdGgiLHArcXQoKS5zdGF0ZS5ub3RlTWFyZ2luKjIpLHV9LEVLZT1mdW5jdGlvbihpLHMpe2NvbnN0IHU9cy5pZCxkPXtpZDp1LGxhYmVsOnMuaWQsd2lkdGg6MCxoZWlnaHQ6MH0scD1pLmFwcGVuZCgiZyIpLmF0dHIoImlkIix1KS5hdHRyKCJjbGFzcyIsInN0YXRlR3JvdXAiKTtzLnR5cGU9PT0ic3RhcnQiJiZDc24ocCkscy50eXBlPT09ImVuZCImJk1zbihwKSwocy50eXBlPT09ImZvcmsifHxzLnR5cGU9PT0iam9pbiIpJiZEc24ocCxzKSxzLnR5cGU9PT0ibm90ZSImJk9zbihzLm5vdGUudGV4dCxwKSxzLnR5cGU9PT0iZGl2aWRlciImJlNzbihwKSxzLnR5cGU9PT0iZGVmYXVsdCImJnMuZGVzY3JpcHRpb25zLmxlbmd0aD09PTAmJl9zbihwLHMpLHMudHlwZT09PSJkZWZhdWx0IiYmcy5kZXNjcmlwdGlvbnMubGVuZ3RoPjAmJkFzbihwLHMpO2NvbnN0IHY9cC5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBkLndpZHRoPXYud2lkdGgrMipxdCgpLnN0YXRlLnBhZGRpbmcsZC5oZWlnaHQ9di5oZWlnaHQrMipxdCgpLnN0YXRlLnBhZGRpbmcsVHNuLnNldCh1LGQpLGR9O2xldCBUS2U9MDtjb25zdCBOc249ZnVuY3Rpb24oaSxzLHUpe2NvbnN0IGQ9ZnVuY3Rpb24oVCl7c3dpdGNoKFQpe2Nhc2UgRzcucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OOnJldHVybiJhZ2dyZWdhdGlvbiI7Y2FzZSBHNy5yZWxhdGlvblR5cGUuRVhURU5TSU9OOnJldHVybiJleHRlbnNpb24iO2Nhc2UgRzcucmVsYXRpb25UeXBlLkNPTVBPU0lUSU9OOnJldHVybiJjb21wb3NpdGlvbiI7Y2FzZSBHNy5yZWxhdGlvblR5cGUuREVQRU5ERU5DWTpyZXR1cm4iZGVwZW5kZW5jeSJ9fTtzLnBvaW50cz1zLnBvaW50cy5maWx0ZXIoVD0+IU51bWJlci5pc05hTihULnkpKTtjb25zdCBwPXMucG9pbnRzLHY9azcoKS54KGZ1bmN0aW9uKFQpe3JldHVybiBULnh9KS55KGZ1bmN0aW9uKFQpe3JldHVybiBULnl9KS5jdXJ2ZShGRiksYj1pLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHYocCkpLmF0dHIoImlkIiwiZWRnZSIrVEtlKS5hdHRyKCJjbGFzcyIsInRyYW5zaXRpb24iKTtsZXQgeT0iIjtpZihxdCgpLnN0YXRlLmFycm93TWFya2VyQWJzb2x1dGUmJih5PXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoLHk9eS5yZXBsYWNlKC9cKC9nLCJcXCgiKSx5PXkucmVwbGFjZSgvXCkvZywiXFwpIikpLGIuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3krIiMiK2QoRzcucmVsYXRpb25UeXBlLkRFUEVOREVOQ1kpKyJFbmQpIiksdS50aXRsZSE9PXZvaWQgMCl7Y29uc3QgVD1pLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwic3RhdGVMYWJlbCIpLHt4Ol8seTpBfT1Bby5jYWxjTGFiZWxQb3NpdGlvbihzLnBvaW50cyksUD1jaS5nZXRSb3dzKHUudGl0bGUpO2xldCBSPTA7Y29uc3QgRj1bXTtsZXQgaj0wLEs9MDtmb3IobGV0IG9lPTA7b2U8PVAubGVuZ3RoO29lKyspe2NvbnN0IHBlPVQuYXBwZW5kKCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KFBbb2VdKS5hdHRyKCJ4IixfKS5hdHRyKCJ5IixBK1IpLGJlPXBlLm5vZGUoKS5nZXRCQm94KCk7aj1NYXRoLm1heChqLGJlLndpZHRoKSxLPU1hdGgubWluKEssYmUueCksWGUuaW5mbyhiZS54LF8sQStSKSxSPT09MCYmKFI9cGUubm9kZSgpLmdldEJCb3goKS5oZWlnaHQsWGUuaW5mbygiVGl0bGUgaGVpZ2h0IixSLEEpKSxGLnB1c2gocGUpfWxldCBlZT1SKlAubGVuZ3RoO2lmKFAubGVuZ3RoPjEpe2NvbnN0IG9lPShQLmxlbmd0aC0xKSpSKi41O0YuZm9yRWFjaCgocGUsYmUpPT5wZS5hdHRyKCJ5IixBK2JlKlItb2UpKSxlZT1SKlAubGVuZ3RofWNvbnN0IGllPVQubm9kZSgpLmdldEJCb3goKTtULmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImNsYXNzIiwiYm94IikuYXR0cigieCIsXy1qLzItcXQoKS5zdGF0ZS5wYWRkaW5nLzIpLmF0dHIoInkiLEEtZWUvMi1xdCgpLnN0YXRlLnBhZGRpbmcvMi0zLjUpLmF0dHIoIndpZHRoIixqK3F0KCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0IixlZStxdCgpLnN0YXRlLnBhZGRpbmcpLFhlLmluZm8oaWUpfVRLZSsrfTtsZXQgZ207Y29uc3QgcXZlPXt9LFBzbj1mdW5jdGlvbigpe30sQnNuPWZ1bmN0aW9uKGkpe2kuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImRlcGVuZGVuY3lFbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTksNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX0sRnNuPWZ1bmN0aW9uKGkscyx1LGQpe2dtPXF0KCkuc3RhdGU7Y29uc3QgcD1xdCgpLnNlY3VyaXR5TGV2ZWw7bGV0IHY7cD09PSJzYW5kYm94IiYmKHY9SXIoIiNpIitzKSk7Y29uc3QgYj1JcihwPT09InNhbmRib3giP3Yubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLHk9cD09PSJzYW5kYm94Ij92Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50OmRvY3VtZW50O1hlLmRlYnVnKCJSZW5kZXJpbmcgZGlhZ3JhbSAiK2kpO2NvbnN0IFQ9Yi5zZWxlY3QoYFtpZD0nJHtzfSddYCk7QnNuKFQpO2NvbnN0IF89ZC5kYi5nZXRSb290RG9jKCk7Q0tlKF8sVCx2b2lkIDAsITEsYix5LGQpO2NvbnN0IEE9Z20ucGFkZGluZyxQPVQubm9kZSgpLmdldEJCb3goKSxSPVAud2lkdGgrQSoyLEY9UC5oZWlnaHQrQSoyLGo9UioxLjc1O05nKFQsRixqLGdtLnVzZU1heFdpZHRoKSxULmF0dHIoInZpZXdCb3giLGAke1AueC1nbS5wYWRkaW5nfSAgJHtQLnktZ20ucGFkZGluZ30gYCtSKyIgIitGKX0sUnNuPWk9Pmk/aS5sZW5ndGgqZ20uZm9udFNpemVGYWN0b3I6MSxDS2U9KGkscyx1LGQscCx2LGIpPT57Y29uc3QgeT1uZXcgQjAoe2NvbXBvdW5kOiEwLG11bHRpZ3JhcGg6ITB9KTtsZXQgVCxfPSEwO2ZvcihUPTA7VDxpLmxlbmd0aDtUKyspaWYoaVtUXS5zdG10PT09InJlbGF0aW9uIil7Xz0hMTticmVha311P3kuc2V0R3JhcGgoe3JhbmtkaXI6IkxSIixtdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwLHJhbmtlcjoidGlnaHQtdHJlZSIscmFua3NlcDpfPzE6Z20uZWRnZUxlbmd0aEZhY3Rvcixub2RlU2VwOl8/MTo1MCxpc011bHRpR3JhcGg6ITB9KTp5LnNldEdyYXBoKHtyYW5rZGlyOiJUQiIsbXVsdGlncmFwaDohMCxjb21wb3VuZDohMCxyYW5rc2VwOl8/MTpnbS5lZGdlTGVuZ3RoRmFjdG9yLG5vZGVTZXA6Xz8xOjUwLHJhbmtlcjoidGlnaHQtdHJlZSIsaXNNdWx0aUdyYXBoOiEwfSkseS5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCl7cmV0dXJue319KSxiLmRiLmV4dHJhY3QoaSk7Y29uc3QgQT1iLmRiLmdldFN0YXRlcygpLFA9Yi5kYi5nZXRSZWxhdGlvbnMoKSxSPU9iamVjdC5rZXlzKEEpO2Zvcihjb25zdCBpZSBvZiBSKXtjb25zdCBvZT1BW2llXTt1JiYob2UucGFyZW50SWQ9dSk7bGV0IHBlO2lmKG9lLmRvYyl7bGV0IGJlPXMuYXBwZW5kKCJnIikuYXR0cigiaWQiLG9lLmlkKS5hdHRyKCJjbGFzcyIsInN0YXRlR3JvdXAiKTtwZT1DS2Uob2UuZG9jLGJlLG9lLmlkLCFkLHAsdixiKTt7YmU9THNuKGJlLG9lLGQpO2xldCBhZT1iZS5ub2RlKCkuZ2V0QkJveCgpO3BlLndpZHRoPWFlLndpZHRoLHBlLmhlaWdodD1hZS5oZWlnaHQrZ20ucGFkZGluZy8yLHF2ZVtvZS5pZF09e3k6Z20uY29tcG9zaXRUaXRsZVNpemV9fX1lbHNlIHBlPUVLZShzLG9lKTtpZihvZS5ub3RlKXtjb25zdCBiZT17ZGVzY3JpcHRpb25zOltdLGlkOm9lLmlkKyItbm90ZSIsbm90ZTpvZS5ub3RlLHR5cGU6Im5vdGUifSxhZT1FS2UocyxiZSk7b2Uubm90ZS5wb3NpdGlvbj09PSJsZWZ0IG9mIj8oeS5zZXROb2RlKHBlLmlkKyItbm90ZSIsYWUpLHkuc2V0Tm9kZShwZS5pZCxwZSkpOih5LnNldE5vZGUocGUuaWQscGUpLHkuc2V0Tm9kZShwZS5pZCsiLW5vdGUiLGFlKSkseS5zZXRQYXJlbnQocGUuaWQscGUuaWQrIi1ncm91cCIpLHkuc2V0UGFyZW50KHBlLmlkKyItbm90ZSIscGUuaWQrIi1ncm91cCIpfWVsc2UgeS5zZXROb2RlKHBlLmlkLHBlKX1YZS5kZWJ1ZygiQ291bnQ9Iix5Lm5vZGVDb3VudCgpLHkpO2xldCBGPTA7UC5mb3JFYWNoKGZ1bmN0aW9uKGllKXtGKyssWGUuZGVidWcoIlNldHRpbmcgZWRnZSIsaWUpLHkuc2V0RWRnZShpZS5pZDEsaWUuaWQyLHtyZWxhdGlvbjppZSx3aWR0aDpSc24oaWUudGl0bGUpLGhlaWdodDpnbS5sYWJlbEhlaWdodCpjaS5nZXRSb3dzKGllLnRpdGxlKS5sZW5ndGgsbGFiZWxwb3M6ImMifSwiaWQiK0YpfSkscUQoeSksWGUuZGVidWcoIkdyYXBoIGFmdGVyIGxheW91dCIseS5ub2RlcygpKTtjb25zdCBqPXMubm9kZSgpO3kubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGllKXtpZSE9PXZvaWQgMCYmeS5ub2RlKGllKSE9PXZvaWQgMD8oWGUud2FybigiTm9kZSAiK2llKyI6ICIrSlNPTi5zdHJpbmdpZnkoeS5ub2RlKGllKSkpLHAuc2VsZWN0KCIjIitqLmlkKyIgIyIraWUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyh5Lm5vZGUoaWUpLngteS5ub2RlKGllKS53aWR0aC8yKSsiLCIrKHkubm9kZShpZSkueSsocXZlW2llXT9xdmVbaWVdLnk6MCkteS5ub2RlKGllKS5oZWlnaHQvMikrIiApIikscC5zZWxlY3QoIiMiK2ouaWQrIiAjIitpZSkuYXR0cigiZGF0YS14LXNoaWZ0Iix5Lm5vZGUoaWUpLngteS5ub2RlKGllKS53aWR0aC8yKSx2LnF1ZXJ5U2VsZWN0b3JBbGwoIiMiK2ouaWQrIiAjIitpZSsiIC5kaXZpZGVyIikuZm9yRWFjaChwZT0+e2NvbnN0IGJlPXBlLnBhcmVudEVsZW1lbnQ7bGV0IGFlPTAsbmU9MDtiZSYmKGJlLnBhcmVudEVsZW1lbnQmJihhZT1iZS5wYXJlbnRFbGVtZW50LmdldEJCb3goKS53aWR0aCksbmU9cGFyc2VJbnQoYmUuZ2V0QXR0cmlidXRlKCJkYXRhLXgtc2hpZnQiKSwxMCksTnVtYmVyLmlzTmFOKG5lKSYmKG5lPTApKSxwZS5zZXRBdHRyaWJ1dGUoIngxIiwwLW5lKzgpLHBlLnNldEF0dHJpYnV0ZSgieDIiLGFlLW5lLTgpfSkpOlhlLmRlYnVnKCJObyBOb2RlICIraWUrIjogIitKU09OLnN0cmluZ2lmeSh5Lm5vZGUoaWUpKSl9KTtsZXQgSz1qLmdldEJCb3goKTt5LmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihpZSl7aWUhPT12b2lkIDAmJnkuZWRnZShpZSkhPT12b2lkIDAmJihYZS5kZWJ1ZygiRWRnZSAiK2llLnYrIiAtPiAiK2llLncrIjogIitKU09OLnN0cmluZ2lmeSh5LmVkZ2UoaWUpKSksTnNuKHMseS5lZGdlKGllKSx5LmVkZ2UoaWUpLnJlbGF0aW9uKSl9KSxLPWouZ2V0QkJveCgpO2NvbnN0IGVlPXtpZDp1fHwicm9vdCIsbGFiZWw6dXx8InJvb3QiLHdpZHRoOjAsaGVpZ2h0OjB9O3JldHVybiBlZS53aWR0aD1LLndpZHRoKzIqZ20ucGFkZGluZyxlZS5oZWlnaHQ9Sy5oZWlnaHQrMipnbS5wYWRkaW5nLFhlLmRlYnVnKCJEb2MgcmVuZGVyZWQiLGVlLHkpLGVlfSxqc249T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpvS2UsZGI6RzcscmVuZGVyZXI6e3NldENvbmY6UHNuLGRyYXc6RnNufSxzdHlsZXM6eEtlLGluaXQ6aT0+e2kuc3RhdGV8fChpLnN0YXRlPXt9KSxpLnN0YXRlLmFycm93TWFya2VyQWJzb2x1dGU9aS5hcnJvd01hcmtlckFic29sdXRlLEc3LmNsZWFyKCl9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxBSj0icmVjdCIsSHZlPSJyZWN0V2l0aFRpdGxlIiwkc249InN0YXJ0Iix6c249ImVuZCIscXNuPSJkaXZpZGVyIixIc249InJvdW5kZWRXaXRoVGl0bGUiLFZzbj0ibm90ZSIsVXNuPSJub3RlR3JvdXAiLFFEPSJzdGF0ZWRpYWdyYW0iLEdzbj1gJHtRRH0tc3RhdGVgLFNLZT0idHJhbnNpdGlvbiIsS3NuPSJub3RlIixXc249YCR7U0tlfSBub3RlLWVkZ2VgLFlzbj1gJHtRRH0tJHtLc259YCxYc249YCR7UUR9LWNsdXN0ZXJgLFFzbj1gJHtRRH0tY2x1c3Rlci1hbHRgLF9LZT0icGFyZW50IixBS2U9Im5vdGUiLEpzbj0ic3RhdGUiLFZ2ZT0iLS0tLSIsWnNuPWAke1Z2ZX0ke0FLZX1gLExLZT1gJHtWdmV9JHtfS2V9YCxNS2U9ImZpbGw6bm9uZSIsREtlPSJmaWxsOiAjMzMzIixJS2U9ImMiLE9LZT0idGV4dCIsTktlPSJub3JtYWwiO2xldCBMSj17fSxqOT0wO2NvbnN0IGVhbj1mdW5jdGlvbihpKXtjb25zdCBzPU9iamVjdC5rZXlzKGkpO2Zvcihjb25zdCB1IG9mIHMpaVt1XX0sdGFuPWZ1bmN0aW9uKGkscyl7cmV0dXJuIHMuZGIuZXh0cmFjdChzLmRiLmdldFJvb3REb2NWMigpKSxzLmRiLmdldENsYXNzZXMoKX07ZnVuY3Rpb24gbmFuKGkpe3JldHVybiBpPT1udWxsPyIiOmkuY2xhc3Nlcz9pLmNsYXNzZXMuam9pbigiICIpOiIifWZ1bmN0aW9uIFV2ZShpPSIiLHM9MCx1PSIiLGQ9VnZlKXtjb25zdCBwPXUhPT1udWxsJiZ1Lmxlbmd0aD4wP2Ake2R9JHt1fWA6IiI7cmV0dXJuYCR7SnNufS0ke2l9JHtwfS0ke3N9YH1jb25zdCBlaj0oaSxzLHUsZCxwLHYpPT57Y29uc3QgYj11LmlkLHk9bmFuKGRbYl0pO2lmKGIhPT0icm9vdCIpe2xldCBUPUFKO3Uuc3RhcnQ9PT0hMCYmKFQ9JHNuKSx1LnN0YXJ0PT09ITEmJihUPXpzbiksdS50eXBlIT09WFImJihUPXUudHlwZSksTEpbYl18fChMSltiXT17aWQ6YixzaGFwZTpULGRlc2NyaXB0aW9uOmNpLnNhbml0aXplVGV4dChiLHF0KCkpLGNsYXNzZXM6YCR7eX0gJHtHc259YH0pO2NvbnN0IF89TEpbYl07dS5kZXNjcmlwdGlvbiYmKEFycmF5LmlzQXJyYXkoXy5kZXNjcmlwdGlvbik/KF8uc2hhcGU9SHZlLF8uZGVzY3JpcHRpb24ucHVzaCh1LmRlc2NyaXB0aW9uKSk6Xy5kZXNjcmlwdGlvbi5sZW5ndGg+MD8oXy5zaGFwZT1IdmUsXy5kZXNjcmlwdGlvbj09PWI/Xy5kZXNjcmlwdGlvbj1bdS5kZXNjcmlwdGlvbl06Xy5kZXNjcmlwdGlvbj1bXy5kZXNjcmlwdGlvbix1LmRlc2NyaXB0aW9uXSk6KF8uc2hhcGU9QUosXy5kZXNjcmlwdGlvbj11LmRlc2NyaXB0aW9uKSxfLmRlc2NyaXB0aW9uPWNpLnNhbml0aXplVGV4dE9yQXJyYXkoXy5kZXNjcmlwdGlvbixxdCgpKSksXy5kZXNjcmlwdGlvbi5sZW5ndGg9PT0xJiZfLnNoYXBlPT09SHZlJiYoXy5zaGFwZT1BSiksIV8udHlwZSYmdS5kb2MmJihYZS5pbmZvKCJTZXR0aW5nIGNsdXN0ZXIgZm9yICIsYixHdmUodSkpLF8udHlwZT0iZ3JvdXAiLF8uZGlyPUd2ZSh1KSxfLnNoYXBlPXUudHlwZT09PWNLZT9xc246SHNuLF8uY2xhc3Nlcz1fLmNsYXNzZXMrIiAiK1hzbisiICIrKHY/UXNuOiIiKSk7Y29uc3QgQT17bGFiZWxTdHlsZToiIixzaGFwZTpfLnNoYXBlLGxhYmVsVGV4dDpfLmRlc2NyaXB0aW9uLGNsYXNzZXM6Xy5jbGFzc2VzLHN0eWxlOiIiLGlkOmIsZGlyOl8uZGlyLGRvbUlkOlV2ZShiLGo5KSx0eXBlOl8udHlwZSxwYWRkaW5nOjE1fTtpZihBLmNlbnRlckxhYmVsPSEwLHUubm90ZSl7Y29uc3QgUD17bGFiZWxTdHlsZToiIixzaGFwZTpWc24sbGFiZWxUZXh0OnUubm90ZS50ZXh0LGNsYXNzZXM6WXNuLHN0eWxlOiIiLGlkOmIrWnNuKyItIitqOSxkb21JZDpVdmUoYixqOSxBS2UpLHR5cGU6Xy50eXBlLHBhZGRpbmc6MTV9LFI9e2xhYmVsU3R5bGU6IiIsc2hhcGU6VXNuLGxhYmVsVGV4dDp1Lm5vdGUudGV4dCxjbGFzc2VzOl8uY2xhc3NlcyxzdHlsZToiIixpZDpiK0xLZSxkb21JZDpVdmUoYixqOSxfS2UpLHR5cGU6Imdyb3VwIixwYWRkaW5nOjB9O2o5Kys7Y29uc3QgRj1iK0xLZTtpLnNldE5vZGUoRixSKSxpLnNldE5vZGUoUC5pZCxQKSxpLnNldE5vZGUoYixBKSxpLnNldFBhcmVudChiLEYpLGkuc2V0UGFyZW50KFAuaWQsRik7bGV0IGo9YixLPVAuaWQ7dS5ub3RlLnBvc2l0aW9uPT09ImxlZnQgb2YiJiYoaj1QLmlkLEs9YiksaS5zZXRFZGdlKGosSyx7YXJyb3doZWFkOiJub25lIixhcnJvd1R5cGU6IiIsc3R5bGU6TUtlLGxhYmVsU3R5bGU6IiIsY2xhc3NlczpXc24sYXJyb3doZWFkU3R5bGU6REtlLGxhYmVscG9zOklLZSxsYWJlbFR5cGU6T0tlLHRoaWNrbmVzczpOS2V9KX1lbHNlIGkuc2V0Tm9kZShiLEEpfXMmJnMuaWQhPT0icm9vdCImJihYZS50cmFjZSgiU2V0dGluZyBub2RlICIsYiwiIHRvIGJlIGNoaWxkIG9mIGl0cyBwYXJlbnQgIixzLmlkKSxpLnNldFBhcmVudChiLHMuaWQpKSx1LmRvYyYmKFhlLnRyYWNlKCJBZGRpbmcgbm9kZXMgY2hpbGRyZW4gIikscmFuKGksdSx1LmRvYyxkLHAsIXYpKX0scmFuPShpLHMsdSxkLHAsdik9PntYZS50cmFjZSgiaXRlbXMiLHUpLHUuZm9yRWFjaChiPT57c3dpdGNoKGIuc3RtdCl7Y2FzZSBFSjplaihpLHMsYixkLHAsdik7YnJlYWs7Y2FzZSBYUjplaihpLHMsYixkLHAsdik7YnJlYWs7Y2FzZSBQdmU6e2VqKGkscyxiLnN0YXRlMSxkLHAsdiksZWooaSxzLGIuc3RhdGUyLGQscCx2KTtjb25zdCB5PXtpZDoiZWRnZSIrajksYXJyb3doZWFkOiJub3JtYWwiLGFycm93VHlwZUVuZDoiYXJyb3dfYmFyYiIsc3R5bGU6TUtlLGxhYmVsU3R5bGU6IiIsbGFiZWw6Y2kuc2FuaXRpemVUZXh0KGIuZGVzY3JpcHRpb24scXQoKSksYXJyb3doZWFkU3R5bGU6REtlLGxhYmVscG9zOklLZSxsYWJlbFR5cGU6T0tlLHRoaWNrbmVzczpOS2UsY2xhc3NlczpTS2V9O2kuc2V0RWRnZShiLnN0YXRlMS5pZCxiLnN0YXRlMi5pZCx5LGo5KSxqOSsrfWJyZWFrfX0pfSxHdmU9KGkscz1lc24pPT57bGV0IHU9cztpZihpLmRvYylmb3IobGV0IGQ9MDtkPGkuZG9jLmxlbmd0aDtkKyspe2NvbnN0IHA9aS5kb2NbZF07cC5zdG10PT09ImRpciImJih1PXAudmFsdWUpfXJldHVybiB1fSxpYW49T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpvS2UsZGI6RzcscmVuZGVyZXI6e3NldENvbmY6ZWFuLGdldENsYXNzZXM6dGFuLGRyYXc6YXN5bmMgZnVuY3Rpb24oaSxzLHUsZCl7WGUuaW5mbygiRHJhd2luZyBzdGF0ZSBkaWFncmFtICh2MikiLHMpLExKPXt9LGQuZGIuZ2V0RGlyZWN0aW9uKCk7Y29uc3R7c2VjdXJpdHlMZXZlbDpwLHN0YXRlOnZ9PXF0KCksYj12Lm5vZGVTcGFjaW5nfHw1MCx5PXYucmFua1NwYWNpbmd8fDUwO1hlLmluZm8oZC5kYi5nZXRSb290RG9jVjIoKSksZC5kYi5leHRyYWN0KGQuZGIuZ2V0Um9vdERvY1YyKCkpLFhlLmluZm8oZC5kYi5nZXRSb290RG9jVjIoKSk7Y29uc3QgVD1kLmRiLmdldFN0YXRlcygpLF89bmV3IEIwKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6R3ZlKGQuZGIuZ2V0Um9vdERvY1YyKCkpLG5vZGVzZXA6YixyYW5rc2VwOnksbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pO2VqKF8sdm9pZCAwLGQuZGIuZ2V0Um9vdERvY1YyKCksVCxkLmRiLCEwKTtsZXQgQTtwPT09InNhbmRib3giJiYoQT1JcigiI2kiK3MpKTtjb25zdCBQPUlyKHA9PT0ic2FuZGJveCI/QS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksUj1QLnNlbGVjdChgW2lkPSIke3N9Il1gKSxGPVAuc2VsZWN0KCIjIitzKyIgZyIpO2F3YWl0IHFtZShGLF8sWyJiYXJiIl0sUUQscyk7Y29uc3Qgaj04O0FvLmluc2VydFRpdGxlKFIsInN0YXRlZGlhZ3JhbVRpdGxlVGV4dCIsdi50aXRsZVRvcE1hcmdpbixkLmRiLmdldERpYWdyYW1UaXRsZSgpKTtjb25zdCBLPVIubm9kZSgpLmdldEJCb3goKSxlZT1LLndpZHRoK2oqMixpZT1LLmhlaWdodCtqKjI7Ui5hdHRyKCJjbGFzcyIsUUQpO2NvbnN0IG9lPVIubm9kZSgpLmdldEJCb3goKTtOZyhSLGllLGVlLHYudXNlTWF4V2lkdGgpO2NvbnN0IHBlPWAke29lLngtan0gJHtvZS55LWp9ICR7ZWV9ICR7aWV9YDtYZS5kZWJ1Zyhgdmlld0JveCAke3BlfWApLFIuYXR0cigidmlld0JveCIscGUpO2NvbnN0IGJlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZD0iJytzKyciXSAuZWRnZUxhYmVsIC5sYWJlbCcpO2Zvcihjb25zdCBhZSBvZiBiZSl7Y29uc3QgbmU9YWUuZ2V0QkJveCgpLHNlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLEFKKTtzZS5zZXRBdHRyaWJ1dGUoInJ4IiwwKSxzZS5zZXRBdHRyaWJ1dGUoInJ5IiwwKSxzZS5zZXRBdHRyaWJ1dGUoIndpZHRoIixuZS53aWR0aCksc2Uuc2V0QXR0cmlidXRlKCJoZWlnaHQiLG5lLmhlaWdodCksYWUuaW5zZXJ0QmVmb3JlKHNlLGFlLmZpcnN0Q2hpbGQpfX19LHN0eWxlczp4S2UsaW5pdDppPT57aS5zdGF0ZXx8KGkuc3RhdGU9e30pLGkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZT1pLmFycm93TWFya2VyQWJzb2x1dGUsRzcuY2xlYXIoKX19fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBLdmU9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihQLFIsRixqKXtmb3IoRj1GfHx7fSxqPVAubGVuZ3RoO2otLTtGW1Bbal1dPVIpO3JldHVybiBGfSxzPVs2LDgsMTAsMTEsMTIsMTQsMTYsMTcsMThdLHU9WzEsOV0sZD1bMSwxMF0scD1bMSwxMV0sdj1bMSwxMl0sYj1bMSwxM10seT1bMSwxNF0sVD17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsam91cm5leTo0LGRvY3VtZW50OjUsRU9GOjYsbGluZTo3LFNQQUNFOjgsc3RhdGVtZW50OjksTkVXTElORToxMCx0aXRsZToxMSxhY2NfdGl0bGU6MTIsYWNjX3RpdGxlX3ZhbHVlOjEzLGFjY19kZXNjcjoxNCxhY2NfZGVzY3JfdmFsdWU6MTUsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToxNixzZWN0aW9uOjE3LHRhc2tOYW1lOjE4LHRhc2tEYXRhOjE5LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJqb3VybmV5Iiw2OiJFT0YiLDg6IlNQQUNFIiwxMDoiTkVXTElORSIsMTE6InRpdGxlIiwxMjoiYWNjX3RpdGxlIiwxMzoiYWNjX3RpdGxlX3ZhbHVlIiwxNDoiYWNjX2Rlc2NyIiwxNToiYWNjX2Rlc2NyX3ZhbHVlIiwxNjoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMTc6InNlY3Rpb24iLDE4OiJ0YXNrTmFtZSIsMTk6InRhc2tEYXRhIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFs1LDBdLFs1LDJdLFs3LDJdLFs3LDFdLFs3LDFdLFs3LDFdLFs5LDFdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFs5LDJdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKFIsRixqLEssZWUsaWUsb2Upe3ZhciBwZT1pZS5sZW5ndGgtMTtzd2l0Y2goZWUpe2Nhc2UgMTpyZXR1cm4gaWVbcGUtMV07Y2FzZSAyOnRoaXMuJD1bXTticmVhaztjYXNlIDM6aWVbcGUtMV0ucHVzaChpZVtwZV0pLHRoaXMuJD1pZVtwZS0xXTticmVhaztjYXNlIDQ6Y2FzZSA1OnRoaXMuJD1pZVtwZV07YnJlYWs7Y2FzZSA2OmNhc2UgNzp0aGlzLiQ9W107YnJlYWs7Y2FzZSA4Oksuc2V0RGlhZ3JhbVRpdGxlKGllW3BlXS5zdWJzdHIoNikpLHRoaXMuJD1pZVtwZV0uc3Vic3RyKDYpO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9aWVbcGVdLnRyaW0oKSxLLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMDpjYXNlIDExOnRoaXMuJD1pZVtwZV0udHJpbSgpLEsuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDEyOksuYWRkU2VjdGlvbihpZVtwZV0uc3Vic3RyKDgpKSx0aGlzLiQ9aWVbcGVdLnN1YnN0cig4KTticmVhaztjYXNlIDEzOksuYWRkVGFzayhpZVtwZS0xXSxpZVtwZV0pLHRoaXMuJD0idGFzayI7YnJlYWt9fSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LGkocyxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6WzEsNl0sOTo3LDEwOlsxLDhdLDExOnUsMTI6ZCwxNDpwLDE2OnYsMTc6YiwxODp5fSxpKHMsWzIsN10sezE6WzIsMV19KSxpKHMsWzIsM10pLHs5OjE1LDExOnUsMTI6ZCwxNDpwLDE2OnYsMTc6YiwxODp5fSxpKHMsWzIsNV0pLGkocyxbMiw2XSksaShzLFsyLDhdKSx7MTM6WzEsMTZdfSx7MTU6WzEsMTddfSxpKHMsWzIsMTFdKSxpKHMsWzIsMTJdKSx7MTk6WzEsMThdfSxpKHMsWzIsNF0pLGkocyxbMiw5XSksaShzLFsyLDEwXSksaShzLFsyLDEzXSldLGRlZmF1bHRBY3Rpb25zOnt9LHBhcnNlRXJyb3I6ZnVuY3Rpb24oUixGKXtpZihGLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoUik7ZWxzZXt2YXIgaj1uZXcgRXJyb3IoUik7dGhyb3cgai5oYXNoPUYsan19LHBhcnNlOmZ1bmN0aW9uKFIpe3ZhciBGPXRoaXMsaj1bMF0sSz1bXSxlZT1bbnVsbF0saWU9W10sb2U9dGhpcy50YWJsZSxwZT0iIixiZT0wLGFlPTAsbmU9MixzZT0xLGRlPWllLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLFg9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxnZT17eXk6e319O2Zvcih2YXIgVyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LFcpJiYoZ2UueXlbV109dGhpcy55eVtXXSk7WC5zZXRJbnB1dChSLGdlLnl5KSxnZS55eS5sZXhlcj1YLGdlLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBYLnl5bGxvYz4idSImJihYLnl5bGxvYz17fSk7dmFyIHhlPVgueXlsbG9jO2llLnB1c2goeGUpO3ZhciBVPVgub3B0aW9ucyYmWC5vcHRpb25zLnJhbmdlczt0eXBlb2YgZ2UueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9Z2UueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gRmUoKXt2YXIgX3Q7cmV0dXJuIF90PUsucG9wKCl8fFgubGV4KCl8fHNlLHR5cGVvZiBfdCE9Im51bWJlciImJihfdCBpbnN0YW5jZW9mIEFycmF5JiYoSz1fdCxfdD1LLnBvcCgpKSxfdD1GLnN5bWJvbHNfW190XXx8X3QpLF90fWZvcih2YXIgUGUsamUsSWUsU2UsQ2U9e30sa2UsS2UsRnQsTmU7Oyl7aWYoamU9altqLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2plXT9JZT10aGlzLmRlZmF1bHRBY3Rpb25zW2plXTooKFBlPT09bnVsbHx8dHlwZW9mIFBlPiJ1IikmJihQZT1GZSgpKSxJZT1vZVtqZV0mJm9lW2plXVtQZV0pLHR5cGVvZiBJZT4idSJ8fCFJZS5sZW5ndGh8fCFJZVswXSl7dmFyIGduPSIiO05lPVtdO2ZvcihrZSBpbiBvZVtqZV0pdGhpcy50ZXJtaW5hbHNfW2tlXSYma2U+bmUmJk5lLnB1c2goIiciK3RoaXMudGVybWluYWxzX1trZV0rIiciKTtYLnNob3dQb3NpdGlvbj9nbj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhiZSsxKStgOgpgK1guc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtOZS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW1BlXXx8UGUpKyInIjpnbj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhiZSsxKSsiOiBVbmV4cGVjdGVkICIrKFBlPT1zZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tQZV18fFBlKSsiJyIpLHRoaXMucGFyc2VFcnJvcihnbix7dGV4dDpYLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tQZV18fFBlLGxpbmU6WC55eWxpbmVubyxsb2M6eGUsZXhwZWN0ZWQ6TmV9KX1pZihJZVswXWluc3RhbmNlb2YgQXJyYXkmJkllLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIramUrIiwgdG9rZW46ICIrUGUpO3N3aXRjaChJZVswXSl7Y2FzZSAxOmoucHVzaChQZSksZWUucHVzaChYLnl5dGV4dCksaWUucHVzaChYLnl5bGxvYyksai5wdXNoKEllWzFdKSxQZT1udWxsLGFlPVgueXlsZW5nLHBlPVgueXl0ZXh0LGJlPVgueXlsaW5lbm8seGU9WC55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKEtlPXRoaXMucHJvZHVjdGlvbnNfW0llWzFdXVsxXSxDZS4kPWVlW2VlLmxlbmd0aC1LZV0sQ2UuXyQ9e2ZpcnN0X2xpbmU6aWVbaWUubGVuZ3RoLShLZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmllW2llLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmllW2llLmxlbmd0aC0oS2V8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46aWVbaWUubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxVJiYoQ2UuXyQucmFuZ2U9W2llW2llLmxlbmd0aC0oS2V8fDEpXS5yYW5nZVswXSxpZVtpZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxTZT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoQ2UsW3BlLGFlLGJlLGdlLnl5LEllWzFdLGVlLGllXS5jb25jYXQoZGUpKSx0eXBlb2YgU2U8InUiKXJldHVybiBTZTtLZSYmKGo9ai5zbGljZSgwLC0xKktlKjIpLGVlPWVlLnNsaWNlKDAsLTEqS2UpLGllPWllLnNsaWNlKDAsLTEqS2UpKSxqLnB1c2godGhpcy5wcm9kdWN0aW9uc19bSWVbMV1dWzBdKSxlZS5wdXNoKENlLiQpLGllLnB1c2goQ2UuXyQpLEZ0PW9lW2pbai5sZW5ndGgtMl1dW2pbai5sZW5ndGgtMV1dLGoucHVzaChGdCk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LF89ZnVuY3Rpb24oKXt2YXIgUD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihGLGope2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoRixqKTtlbHNlIHRocm93IG5ldyBFcnJvcihGKX0sc2V0SW5wdXQ6ZnVuY3Rpb24oUixGKXtyZXR1cm4gdGhpcy55eT1GfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1SLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBSPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1SLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1SLHRoaXMubWF0Y2hlZCs9Ujt2YXIgRj1SLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gRj8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksUn0sdW5wdXQ6ZnVuY3Rpb24oUil7dmFyIEY9Ui5sZW5ndGgsaj1SLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9Uit0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtRiksdGhpcy5vZmZzZXQtPUY7dmFyIEs9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksai5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPWoubGVuZ3RoLTEpO3ZhciBlZT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46aj8oai5sZW5ndGg9PT1LLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrS1tLLmxlbmd0aC1qLmxlbmd0aF0ubGVuZ3RoLWpbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1GfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2VlWzBdLGVlWzBdK3RoaXMueXlsZW5nLUZdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihSKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoUikpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgUj10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKFIubGVuZ3RoPjIwPyIuLi4iOiIiKStSLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIFI9dGhpcy5tYXRjaDtyZXR1cm4gUi5sZW5ndGg8MjAmJihSKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1SLmxlbmd0aCkpLChSLnN1YnN0cigwLDIwKSsoUi5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIFI9dGhpcy5wYXN0SW5wdXQoKSxGPW5ldyBBcnJheShSLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIFIrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK0YrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKFIsRil7dmFyIGosSyxlZTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoZWU9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoZWUueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksSz1SWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxLJiYodGhpcy55eWxpbmVubys9Sy5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpLP0tbSy5sZW5ndGgtMV0ubGVuZ3RoLUtbSy5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitSWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPVJbMF0sdGhpcy5tYXRjaCs9UlswXSx0aGlzLm1hdGNoZXM9Uix0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShSWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1SWzBdLGo9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsRix0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxqKXJldHVybiBqO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBpZSBpbiBlZSl0aGlzW2llXT1lZVtpZV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgUixGLGosSzt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBlZT10aGlzLl9jdXJyZW50UnVsZXMoKSxpZT0wO2llPGVlLmxlbmd0aDtpZSsrKWlmKGo9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tlZVtpZV1dKSxqJiYoIUZ8fGpbMF0ubGVuZ3RoPkZbMF0ubGVuZ3RoKSl7aWYoRj1qLEs9aWUsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoUj10aGlzLnRlc3RfbWF0Y2goaixlZVtpZV0pLFIhPT0hMSlyZXR1cm4gUjtpZih0aGlzLl9iYWNrdHJhY2spe0Y9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gRj8oUj10aGlzLnRlc3RfbWF0Y2goRixlZVtLXSksUiE9PSExP1I6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBGPXRoaXMubmV4dCgpO3JldHVybiBGfHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbihGKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goRil9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIEY9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gRj4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKEYpe3JldHVybiBGPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoRnx8MCksRj49MD90aGlzLmNvbmRpdGlvblN0YWNrW0ZdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKEYpe3RoaXMuYmVnaW4oRil9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oRixqLEssZWUpe3N3aXRjaChLKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpyZXR1cm4gMTA7Y2FzZSAzOmJyZWFrO2Nhc2UgNDpicmVhaztjYXNlIDU6cmV0dXJuIDQ7Y2FzZSA2OnJldHVybiAxMTtjYXNlIDc6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDEyO2Nhc2UgODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2Nhc2UgOTpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMTQ7Y2FzZSAxMDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2Nhc2UgMTE6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMTI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTM6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMTQ6cmV0dXJuIDE3O2Nhc2UgMTU6cmV0dXJuIDE4O2Nhc2UgMTY6cmV0dXJuIDE5O2Nhc2UgMTc6cmV0dXJuIjoiO2Nhc2UgMTg6cmV0dXJuIDY7Y2FzZSAxOTpyZXR1cm4iSU5WQUxJRCJ9fSxydWxlczpbL14oPzolKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OmpvdXJuZXlcYikvaSwvXig/OnRpdGxlXHNbXiNcbjtdKykvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86c2VjdGlvblxzW14jOlxuO10rKS9pLC9eKD86W14jOlxuO10rKS9pLC9eKD86OlteI1xuO10rKS9pLC9eKD86OikvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMTIsMTNdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbMTBdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbOF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw3LDksMTEsMTQsMTUsMTYsMTcsMTgsMTldLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gUH0oKTtULmxleGVyPV87ZnVuY3Rpb24gQSgpe3RoaXMueXk9e319cmV0dXJuIEEucHJvdG90eXBlPVQsVC5QYXJzZXI9QSxuZXcgQX0oKTtLdmUucGFyc2VyPUt2ZTtjb25zdCBzYW49S3ZlO2xldCBKRD0iIjtjb25zdCBXdmU9W10sdGo9W10sbmo9W10sYWFuPWZ1bmN0aW9uKCl7V3ZlLmxlbmd0aD0wLHRqLmxlbmd0aD0wLEpEPSIiLG5qLmxlbmd0aD0wLFBnKCl9LG9hbj1mdW5jdGlvbihpKXtKRD1pLFd2ZS5wdXNoKGkpfSxjYW49ZnVuY3Rpb24oKXtyZXR1cm4gV3ZlfSx1YW49ZnVuY3Rpb24oKXtsZXQgaT1QS2UoKTtjb25zdCBzPTEwMDtsZXQgdT0wO2Zvcig7IWkmJnU8czspaT1QS2UoKSx1Kys7cmV0dXJuIHRqLnB1c2goLi4ubmopLHRqfSxsYW49ZnVuY3Rpb24oKXtjb25zdCBpPVtdO3JldHVybiB0ai5mb3JFYWNoKHU9Pnt1LnBlb3BsZSYmaS5wdXNoKC4uLnUucGVvcGxlKX0pLFsuLi5uZXcgU2V0KGkpXS5zb3J0KCl9LGhhbj1mdW5jdGlvbihpLHMpe2NvbnN0IHU9cy5zdWJzdHIoMSkuc3BsaXQoIjoiKTtsZXQgZD0wLHA9W107dS5sZW5ndGg9PT0xPyhkPU51bWJlcih1WzBdKSxwPVtdKTooZD1OdW1iZXIodVswXSkscD11WzFdLnNwbGl0KCIsIikpO2NvbnN0IHY9cC5tYXAoeT0+eS50cmltKCkpLGI9e3NlY3Rpb246SkQsdHlwZTpKRCxwZW9wbGU6dix0YXNrOmksc2NvcmU6ZH07bmoucHVzaChiKX0sZmFuPWZ1bmN0aW9uKGkpe2NvbnN0IHM9e3NlY3Rpb246SkQsdHlwZTpKRCxkZXNjcmlwdGlvbjppLHRhc2s6aSxjbGFzc2VzOltdfTt0ai5wdXNoKHMpfSxQS2U9ZnVuY3Rpb24oKXtjb25zdCBpPWZ1bmN0aW9uKHUpe3JldHVybiBualt1XS5wcm9jZXNzZWR9O2xldCBzPSEwO2Zvcihjb25zdFt1LGRdb2YgbmouZW50cmllcygpKWkodSkscz1zJiZkLnByb2Nlc3NlZDtyZXR1cm4gc30sQktlPXtnZXRDb25maWc6KCk9PnF0KCkuam91cm5leSxjbGVhcjphYW4sc2V0RGlhZ3JhbVRpdGxlOmNtLGdldERpYWdyYW1UaXRsZTpBcCxzZXRBY2NUaXRsZTpCZyxnZXRBY2NUaXRsZTpDcCxzZXRBY2NEZXNjcmlwdGlvbjpTcCxnZXRBY2NEZXNjcmlwdGlvbjpfcCxhZGRTZWN0aW9uOm9hbixnZXRTZWN0aW9uczpjYW4sZ2V0VGFza3M6dWFuLGFkZFRhc2s6aGFuLGFkZFRhc2tPcmc6ZmFuLGdldEFjdG9yczpmdW5jdGlvbigpe3JldHVybiBsYW4oKX19LGRhbj1pPT5gLmxhYmVsIHsKICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7CiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7CiAgICBjb2xvcjogJHtpLnRleHRDb2xvcn07CiAgfQogIC5tb3V0aCB7CiAgICBzdHJva2U6ICM2NjY7CiAgfQoKICBsaW5lIHsKICAgIHN0cm9rZTogJHtpLnRleHRDb2xvcn0KICB9CgogIC5sZWdlbmQgewogICAgZmlsbDogJHtpLnRleHRDb2xvcn07CiAgfQoKICAubGFiZWwgdGV4dCB7CiAgICBmaWxsOiAjMzMzOwogIH0KICAubGFiZWwgewogICAgY29sb3I6ICR7aS50ZXh0Q29sb3J9CiAgfQoKICAuZmFjZSB7CiAgICAke2kuZmFjZUNvbG9yP2BmaWxsOiAke2kuZmFjZUNvbG9yfWA6ImZpbGw6ICNGRkY4REMifTsKICAgIHN0cm9rZTogIzk5OTsKICB9CgogIC5ub2RlIHJlY3QsCiAgLm5vZGUgY2lyY2xlLAogIC5ub2RlIGVsbGlwc2UsCiAgLm5vZGUgcG9seWdvbiwKICAubm9kZSBwYXRoIHsKICAgIGZpbGw6ICR7aS5tYWluQmtnfTsKICAgIHN0cm9rZTogJHtpLm5vZGVCb3JkZXJ9OwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKICAubm9kZSAubGFiZWwgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KICAubm9kZS5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogIH0KCiAgLmFycm93aGVhZFBhdGggewogICAgZmlsbDogJHtpLmFycm93aGVhZENvbG9yfTsKICB9CgogIC5lZGdlUGF0aCAucGF0aCB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAxLjVweDsKICB9CgogIC5mbG93Y2hhcnQtbGluayB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgZmlsbDogbm9uZTsKICB9CgogIC5lZGdlTGFiZWwgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgcmVjdCB7CiAgICAgIG9wYWNpdHk6IDAuNTsKICAgIH0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICB9CgogIC5jbHVzdGVyIHJlY3QgewogIH0KCiAgLmNsdXN0ZXIgdGV4dCB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICBkaXYubWVybWFpZFRvb2x0aXAgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgbWF4LXdpZHRoOiAyMDBweDsKICAgIHBhZGRpbmc6IDJweDsKICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7CiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBiYWNrZ3JvdW5kOiAke2kudGVydGlhcnlDb2xvcn07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2kuYm9yZGVyMn07CiAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDEwMDsKICB9CgogIC50YXNrLXR5cGUtMCwgLnNlY3Rpb24tdHlwZS0wICB7CiAgICAke2kuZmlsbFR5cGUwP2BmaWxsOiAke2kuZmlsbFR5cGUwfWA6IiJ9OwogIH0KICAudGFzay10eXBlLTEsIC5zZWN0aW9uLXR5cGUtMSAgewogICAgJHtpLmZpbGxUeXBlMD9gZmlsbDogJHtpLmZpbGxUeXBlMX1gOiIifTsKICB9CiAgLnRhc2stdHlwZS0yLCAuc2VjdGlvbi10eXBlLTIgIHsKICAgICR7aS5maWxsVHlwZTA/YGZpbGw6ICR7aS5maWxsVHlwZTJ9YDoiIn07CiAgfQogIC50YXNrLXR5cGUtMywgLnNlY3Rpb24tdHlwZS0zICB7CiAgICAke2kuZmlsbFR5cGUwP2BmaWxsOiAke2kuZmlsbFR5cGUzfWA6IiJ9OwogIH0KICAudGFzay10eXBlLTQsIC5zZWN0aW9uLXR5cGUtNCAgewogICAgJHtpLmZpbGxUeXBlMD9gZmlsbDogJHtpLmZpbGxUeXBlNH1gOiIifTsKICB9CiAgLnRhc2stdHlwZS01LCAuc2VjdGlvbi10eXBlLTUgIHsKICAgICR7aS5maWxsVHlwZTA/YGZpbGw6ICR7aS5maWxsVHlwZTV9YDoiIn07CiAgfQogIC50YXNrLXR5cGUtNiwgLnNlY3Rpb24tdHlwZS02ICB7CiAgICAke2kuZmlsbFR5cGUwP2BmaWxsOiAke2kuZmlsbFR5cGU2fWA6IiJ9OwogIH0KICAudGFzay10eXBlLTcsIC5zZWN0aW9uLXR5cGUtNyAgewogICAgJHtpLmZpbGxUeXBlMD9gZmlsbDogJHtpLmZpbGxUeXBlN31gOiIifTsKICB9CgogIC5hY3Rvci0wIHsKICAgICR7aS5hY3RvcjA/YGZpbGw6ICR7aS5hY3RvcjB9YDoiIn07CiAgfQogIC5hY3Rvci0xIHsKICAgICR7aS5hY3RvcjE/YGZpbGw6ICR7aS5hY3RvcjF9YDoiIn07CiAgfQogIC5hY3Rvci0yIHsKICAgICR7aS5hY3RvcjI/YGZpbGw6ICR7aS5hY3RvcjJ9YDoiIn07CiAgfQogIC5hY3Rvci0zIHsKICAgICR7aS5hY3RvcjM/YGZpbGw6ICR7aS5hY3RvcjN9YDoiIn07CiAgfQogIC5hY3Rvci00IHsKICAgICR7aS5hY3RvcjQ/YGZpbGw6ICR7aS5hY3RvcjR9YDoiIn07CiAgfQogIC5hY3Rvci01IHsKICAgICR7aS5hY3RvcjU/YGZpbGw6ICR7aS5hY3RvcjV9YDoiIn07CiAgfQpgLFl2ZT1mdW5jdGlvbihpLHMpe3JldHVybiBBUShpLHMpfSxnYW49ZnVuY3Rpb24oaSxzKXtjb25zdCBkPWkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIscy5jeCkuYXR0cigiY3kiLHMuY3kpLmF0dHIoImNsYXNzIiwiZmFjZSIpLmF0dHIoInIiLDE1KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoIm92ZXJmbG93IiwidmlzaWJsZSIpLHA9aS5hcHBlbmQoImciKTtwLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLHMuY3gtMTUvMykuYXR0cigiY3kiLHMuY3ktMTUvMykuYXR0cigiciIsMS41KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoImZpbGwiLCIjNjY2IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpLHAuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIscy5jeCsxNS8zKS5hdHRyKCJjeSIscy5jeS0xNS8zKS5hdHRyKCJyIiwxLjUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigiZmlsbCIsIiM2NjYiKS5hdHRyKCJzdHJva2UiLCIjNjY2Iik7ZnVuY3Rpb24gdihUKXtjb25zdCBfPWxEKCkuc3RhcnRBbmdsZShNYXRoLlBJLzIpLmVuZEFuZ2xlKDMqKE1hdGguUEkvMikpLmlubmVyUmFkaXVzKDcuNSkub3V0ZXJSYWRpdXMoNi44MTgxODE4MTgxODE4MTc1KTtULmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJkIixfKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitzLmN4KyIsIisocy5jeSsyKSsiKSIpfWZ1bmN0aW9uIGIoVCl7Y29uc3QgXz1sRCgpLnN0YXJ0QW5nbGUoMypNYXRoLlBJLzIpLmVuZEFuZ2xlKDUqKE1hdGguUEkvMikpLmlubmVyUmFkaXVzKDcuNSkub3V0ZXJSYWRpdXMoNi44MTgxODE4MTgxODE4MTc1KTtULmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJkIixfKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitzLmN4KyIsIisocy5jeSs3KSsiKSIpfWZ1bmN0aW9uIHkoVCl7VC5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigic3Ryb2tlIiwyKS5hdHRyKCJ4MSIscy5jeC01KS5hdHRyKCJ5MSIscy5jeSs3KS5hdHRyKCJ4MiIscy5jeCs1KS5hdHRyKCJ5MiIscy5jeSs3KS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpfXJldHVybiBzLnNjb3JlPjM/dihwKTpzLnNjb3JlPDM/YihwKTp5KHApLGR9LEZLZT1mdW5jdGlvbihpLHMpe2NvbnN0IHU9aS5hcHBlbmQoImNpcmNsZSIpO3JldHVybiB1LmF0dHIoImN4IixzLmN4KSx1LmF0dHIoImN5IixzLmN5KSx1LmF0dHIoImNsYXNzIiwiYWN0b3ItIitzLnBvcyksdS5hdHRyKCJmaWxsIixzLmZpbGwpLHUuYXR0cigic3Ryb2tlIixzLnN0cm9rZSksdS5hdHRyKCJyIixzLnIpLHUuY2xhc3MhPT12b2lkIDAmJnUuYXR0cigiY2xhc3MiLHUuY2xhc3MpLHMudGl0bGUhPT12b2lkIDAmJnUuYXBwZW5kKCJ0aXRsZSIpLnRleHQocy50aXRsZSksdX0sUktlPWZ1bmN0aW9uKGkscyl7cmV0dXJuIHRVdChpLHMpfSxwYW49ZnVuY3Rpb24oaSxzKXtmdW5jdGlvbiB1KHAsdixiLHksVCl7cmV0dXJuIHArIiwiK3YrIiAiKyhwK2IpKyIsIit2KyIgIisocCtiKSsiLCIrKHYreS1UKSsiICIrKHArYi1UKjEuMikrIiwiKyh2K3kpKyIgIitwKyIsIisodit5KX1jb25zdCBkPWkuYXBwZW5kKCJwb2x5Z29uIik7ZC5hdHRyKCJwb2ludHMiLHUocy54LHMueSw1MCwyMCw3KSksZC5hdHRyKCJjbGFzcyIsImxhYmVsQm94Iikscy55PXMueStzLmxhYmVsTWFyZ2luLHMueD1zLngrLjUqcy5sYWJlbE1hcmdpbixSS2UoaSxzKX0sYmFuPWZ1bmN0aW9uKGkscyx1KXtjb25zdCBkPWkuYXBwZW5kKCJnIikscD1xQygpO3AueD1zLngscC55PXMueSxwLmZpbGw9cy5maWxsLHAud2lkdGg9dS53aWR0aCpzLnRhc2tDb3VudCt1LmRpYWdyYW1NYXJnaW5YKihzLnRhc2tDb3VudC0xKSxwLmhlaWdodD11LmhlaWdodCxwLmNsYXNzPSJqb3VybmV5LXNlY3Rpb24gc2VjdGlvbi10eXBlLSIrcy5udW0scC5yeD0zLHAucnk9MyxZdmUoZCxwKSwkS2UodSkocy50ZXh0LGQscC54LHAueSxwLndpZHRoLHAuaGVpZ2h0LHtjbGFzczoiam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS0iK3MubnVtfSx1LHMuY29sb3VyKX07bGV0IGpLZT0tMTtjb25zdCBtYW49ZnVuY3Rpb24oaSxzLHUpe2NvbnN0IGQ9cy54K3Uud2lkdGgvMixwPWkuYXBwZW5kKCJnIik7aktlKys7Y29uc3Qgdj0zMDArNSozMDtwLmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwidGFzayIraktlKS5hdHRyKCJ4MSIsZCkuYXR0cigieTEiLHMueSkuYXR0cigieDIiLGQpLmF0dHIoInkyIix2KS5hdHRyKCJjbGFzcyIsInRhc2stbGluZSIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLCI0IDIiKS5hdHRyKCJzdHJva2UiLCIjNjY2IiksZ2FuKHAse2N4OmQsY3k6MzAwKyg1LXMuc2NvcmUpKjMwLHNjb3JlOnMuc2NvcmV9KTtjb25zdCBiPXFDKCk7Yi54PXMueCxiLnk9cy55LGIuZmlsbD1zLmZpbGwsYi53aWR0aD11LndpZHRoLGIuaGVpZ2h0PXUuaGVpZ2h0LGIuY2xhc3M9InRhc2sgdGFzay10eXBlLSIrcy5udW0sYi5yeD0zLGIucnk9MyxZdmUocCxiKTtsZXQgeT1zLngrMTQ7cy5wZW9wbGUuZm9yRWFjaChUPT57Y29uc3QgXz1zLmFjdG9yc1tUXS5jb2xvcixBPXtjeDp5LGN5OnMueSxyOjcsZmlsbDpfLHN0cm9rZToiIzAwMCIsdGl0bGU6VCxwb3M6cy5hY3RvcnNbVF0ucG9zaXRpb259O0ZLZShwLEEpLHkrPTEwfSksJEtlKHUpKHMudGFzayxwLGIueCxiLnksYi53aWR0aCxiLmhlaWdodCx7Y2xhc3M6InRhc2sifSx1LHMuY29sb3VyKX0sdmFuPWZ1bmN0aW9uKGkscyl7VHFlKGkscyl9LCRLZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGkocCx2LGIseSxULF8sQSxQKXtjb25zdCBSPXYuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsYitULzIpLmF0dHIoInkiLHkrXy8yKzUpLnN0eWxlKCJmb250LWNvbG9yIixQKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KHApO2QoUixBKX1mdW5jdGlvbiBzKHAsdixiLHksVCxfLEEsUCxSKXtjb25zdHt0YXNrRm9udFNpemU6Rix0YXNrRm9udEZhbWlseTpqfT1QLEs9cC5zcGxpdCgvPGJyXHMqXC8/Pi9naSk7Zm9yKGxldCBlZT0wO2VlPEsubGVuZ3RoO2VlKyspe2NvbnN0IGllPWVlKkYtRiooSy5sZW5ndGgtMSkvMixvZT12LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIrVC8yKS5hdHRyKCJ5Iix5KS5hdHRyKCJmaWxsIixSKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgiZm9udC1zaXplIixGKS5zdHlsZSgiZm9udC1mYW1pbHkiLGopO29lLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixiK1QvMikuYXR0cigiZHkiLGllKS50ZXh0KEtbZWVdKSxvZS5hdHRyKCJ5Iix5K18vMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLGQob2UsQSl9fWZ1bmN0aW9uIHUocCx2LGIseSxULF8sQSxQKXtjb25zdCBSPXYuYXBwZW5kKCJzd2l0Y2giKSxqPVIuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsYikuYXR0cigieSIseSkuYXR0cigid2lkdGgiLFQpLmF0dHIoImhlaWdodCIsXykuYXR0cigicG9zaXRpb24iLCJmaXhlZCIpLmFwcGVuZCgieGh0bWw6ZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO2ouYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHApLHMocCxSLGIseSxULF8sQSxQKSxkKGosQSl9ZnVuY3Rpb24gZChwLHYpe2Zvcihjb25zdCBiIGluIHYpYiBpbiB2JiZwLmF0dHIoYix2W2JdKX1yZXR1cm4gZnVuY3Rpb24ocCl7cmV0dXJuIHAudGV4dFBsYWNlbWVudD09PSJmbyI/dTpwLnRleHRQbGFjZW1lbnQ9PT0ib2xkIj9pOnN9fSgpLHJqPXtkcmF3UmVjdDpZdmUsZHJhd0NpcmNsZTpGS2UsZHJhd1NlY3Rpb246YmFuLGRyYXdUZXh0OlJLZSxkcmF3TGFiZWw6cGFuLGRyYXdUYXNrOm1hbixkcmF3QmFja2dyb3VuZFJlY3Q6dmFuLGluaXRHcmFwaGljczpmdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw1KS5hdHRyKCJyZWZZIiwyKS5hdHRyKCJtYXJrZXJXaWR0aCIsNikuYXR0cigibWFya2VySGVpZ2h0Iiw0KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCwwIFYgNCBMNiwyIFoiKX19LHdhbj1mdW5jdGlvbihpKXtPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe01KW3VdPWlbdV19KX0sSzc9e307ZnVuY3Rpb24geWFuKGkpe2NvbnN0IHM9cXQoKS5qb3VybmV5O2xldCB1PTYwO09iamVjdC5rZXlzKEs3KS5mb3JFYWNoKGQ9Pntjb25zdCBwPUs3W2RdLmNvbG9yLHY9e2N4OjIwLGN5OnUscjo3LGZpbGw6cCxzdHJva2U6IiMwMDAiLHBvczpLN1tkXS5wb3NpdGlvbn07cmouZHJhd0NpcmNsZShpLHYpO2NvbnN0IGI9e3g6NDAseTp1KzcsZmlsbDoiIzY2NiIsdGV4dDpkLHRleHRNYXJnaW46cy5ib3hUZXh0TWFyZ2lufDV9O3JqLmRyYXdUZXh0KGksYiksdSs9MjB9KX1jb25zdCBNSj1xdCgpLmpvdXJuZXksaVM9TUoubGVmdE1hcmdpbix4YW49ZnVuY3Rpb24oaSxzLHUsZCl7Y29uc3QgcD1xdCgpLmpvdXJuZXksdj1xdCgpLnNlY3VyaXR5TGV2ZWw7bGV0IGI7dj09PSJzYW5kYm94IiYmKGI9SXIoIiNpIitzKSk7Y29uc3QgeT1Jcih2PT09InNhbmRib3giP2Iubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpO3F2LmluaXQoKTtjb25zdCBUPXkuc2VsZWN0KCIjIitzKTtyai5pbml0R3JhcGhpY3MoVCk7Y29uc3QgXz1kLmRiLmdldFRhc2tzKCksQT1kLmRiLmdldERpYWdyYW1UaXRsZSgpLFA9ZC5kYi5nZXRBY3RvcnMoKTtmb3IoY29uc3QgaWUgaW4gSzcpZGVsZXRlIEs3W2llXTtsZXQgUj0wO1AuZm9yRWFjaChpZT0+e0s3W2llXT17Y29sb3I6cC5hY3RvckNvbG91cnNbUiVwLmFjdG9yQ29sb3Vycy5sZW5ndGhdLHBvc2l0aW9uOlJ9LFIrK30pLHlhbihUKSxxdi5pbnNlcnQoMCwwLGlTLE9iamVjdC5rZXlzKEs3KS5sZW5ndGgqNTApLGthbihULF8sMCk7Y29uc3QgRj1xdi5nZXRCb3VuZHMoKTtBJiZULmFwcGVuZCgidGV4dCIpLnRleHQoQSkuYXR0cigieCIsaVMpLmF0dHIoImZvbnQtc2l6ZSIsIjRleCIpLmF0dHIoImZvbnQtd2VpZ2h0IiwiYm9sZCIpLmF0dHIoInkiLDI1KTtjb25zdCBqPUYuc3RvcHktRi5zdGFydHkrMipwLmRpYWdyYW1NYXJnaW5ZLEs9aVMrRi5zdG9weCsyKnAuZGlhZ3JhbU1hcmdpblg7TmcoVCxqLEsscC51c2VNYXhXaWR0aCksVC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsaVMpLmF0dHIoInkxIixwLmhlaWdodCo0KS5hdHRyKCJ4MiIsSy1pUy00KS5hdHRyKCJ5MiIscC5oZWlnaHQqNCkuYXR0cigic3Ryb2tlLXdpZHRoIiw0KS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoI2Fycm93aGVhZCkiKTtjb25zdCBlZT1BPzcwOjA7VC5hdHRyKCJ2aWV3Qm94IixgJHtGLnN0YXJ0eH0gLTI1ICR7S30gJHtqK2VlfWApLFQuYXR0cigicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaW5ZTWluIG1lZXQiKSxULmF0dHIoImhlaWdodCIsaitlZSsyNSl9LHF2PXtkYXRhOntzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdmVydGljYWxQb3M6MCxzZXF1ZW5jZUl0ZW1zOltdLGluaXQ6ZnVuY3Rpb24oKXt0aGlzLnNlcXVlbmNlSXRlbXM9W10sdGhpcy5kYXRhPXtzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdGhpcy52ZXJ0aWNhbFBvcz0wfSx1cGRhdGVWYWw6ZnVuY3Rpb24oaSxzLHUsZCl7aVtzXT09PXZvaWQgMD9pW3NdPXU6aVtzXT1kKHUsaVtzXSl9LHVwZGF0ZUJvdW5kczpmdW5jdGlvbihpLHMsdSxkKXtjb25zdCBwPXF0KCkuam91cm5leSx2PXRoaXM7bGV0IGI9MDtmdW5jdGlvbiB5KFQpe3JldHVybiBmdW5jdGlvbihBKXtiKys7Y29uc3QgUD12LnNlcXVlbmNlSXRlbXMubGVuZ3RoLWIrMTt2LnVwZGF0ZVZhbChBLCJzdGFydHkiLHMtUCpwLmJveE1hcmdpbixNYXRoLm1pbiksdi51cGRhdGVWYWwoQSwic3RvcHkiLGQrUCpwLmJveE1hcmdpbixNYXRoLm1heCksdi51cGRhdGVWYWwocXYuZGF0YSwic3RhcnR4IixpLVAqcC5ib3hNYXJnaW4sTWF0aC5taW4pLHYudXBkYXRlVmFsKHF2LmRhdGEsInN0b3B4Iix1K1AqcC5ib3hNYXJnaW4sTWF0aC5tYXgpLFQhPT0iYWN0aXZhdGlvbiImJih2LnVwZGF0ZVZhbChBLCJzdGFydHgiLGktUCpwLmJveE1hcmdpbixNYXRoLm1pbiksdi51cGRhdGVWYWwoQSwic3RvcHgiLHUrUCpwLmJveE1hcmdpbixNYXRoLm1heCksdi51cGRhdGVWYWwocXYuZGF0YSwic3RhcnR5IixzLVAqcC5ib3hNYXJnaW4sTWF0aC5taW4pLHYudXBkYXRlVmFsKHF2LmRhdGEsInN0b3B5IixkK1AqcC5ib3hNYXJnaW4sTWF0aC5tYXgpKX19dGhpcy5zZXF1ZW5jZUl0ZW1zLmZvckVhY2goeSgpKX0saW5zZXJ0OmZ1bmN0aW9uKGkscyx1LGQpe2NvbnN0IHA9TWF0aC5taW4oaSx1KSx2PU1hdGgubWF4KGksdSksYj1NYXRoLm1pbihzLGQpLHk9TWF0aC5tYXgocyxkKTt0aGlzLnVwZGF0ZVZhbChxdi5kYXRhLCJzdGFydHgiLHAsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKHF2LmRhdGEsInN0YXJ0eSIsYixNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwocXYuZGF0YSwic3RvcHgiLHYsTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKHF2LmRhdGEsInN0b3B5Iix5LE1hdGgubWF4KSx0aGlzLnVwZGF0ZUJvdW5kcyhwLGIsdix5KX0sYnVtcFZlcnRpY2FsUG9zOmZ1bmN0aW9uKGkpe3RoaXMudmVydGljYWxQb3M9dGhpcy52ZXJ0aWNhbFBvcytpLHRoaXMuZGF0YS5zdG9weT10aGlzLnZlcnRpY2FsUG9zfSxnZXRWZXJ0aWNhbFBvczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZlcnRpY2FsUG9zfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhfX0sWHZlPU1KLnNlY3Rpb25GaWxscyx6S2U9TUouc2VjdGlvbkNvbG91cnMsa2FuPWZ1bmN0aW9uKGkscyx1KXtjb25zdCBkPXF0KCkuam91cm5leTtsZXQgcD0iIjtjb25zdCB2PWQuaGVpZ2h0KjIrZC5kaWFncmFtTWFyZ2luWSxiPXUrdjtsZXQgeT0wLFQ9IiNDQ0MiLF89ImJsYWNrIixBPTA7Zm9yKGNvbnN0W1AsUl1vZiBzLmVudHJpZXMoKSl7aWYocCE9PVIuc2VjdGlvbil7VD1YdmVbeSVYdmUubGVuZ3RoXSxBPXklWHZlLmxlbmd0aCxfPXpLZVt5JXpLZS5sZW5ndGhdO2xldCBqPTA7Y29uc3QgSz1SLnNlY3Rpb247Zm9yKGxldCBpZT1QO2llPHMubGVuZ3RoJiZzW2llXS5zZWN0aW9uPT1LO2llKyspaj1qKzE7Y29uc3QgZWU9e3g6UCpkLnRhc2tNYXJnaW4rUCpkLndpZHRoK2lTLHk6NTAsdGV4dDpSLnNlY3Rpb24sZmlsbDpULG51bTpBLGNvbG91cjpfLHRhc2tDb3VudDpqfTtyai5kcmF3U2VjdGlvbihpLGVlLGQpLHA9Ui5zZWN0aW9uLHkrK31jb25zdCBGPVIucGVvcGxlLnJlZHVjZSgoaixLKT0+KEs3W0tdJiYoaltLXT1LN1tLXSksaikse30pO1IueD1QKmQudGFza01hcmdpbitQKmQud2lkdGgraVMsUi55PWIsUi53aWR0aD1kLmRpYWdyYW1NYXJnaW5YLFIuaGVpZ2h0PWQuZGlhZ3JhbU1hcmdpblksUi5jb2xvdXI9XyxSLmZpbGw9VCxSLm51bT1BLFIuYWN0b3JzPUYscmouZHJhd1Rhc2soaSxSLGQpLHF2Lmluc2VydChSLngsUi55LFIueCtSLndpZHRoK2QudGFza01hcmdpbiwzMDArNSozMCl9fSxxS2U9e3NldENvbmY6d2FuLGRyYXc6eGFufSxFYW49T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e3BhcnNlcjpzYW4sZGI6QktlLHJlbmRlcmVyOnFLZSxzdHlsZXM6ZGFuLGluaXQ6aT0+e3FLZS5zZXRDb25mKGkuam91cm5leSksQktlLmNsZWFyKCl9fX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxUYW49KGkscyx1KT0+e2NvbnN0e3BhcmVudEJ5SWQ6ZH09dSxwPW5ldyBTZXQ7bGV0IHY9aTtmb3IoO3Y7KXtpZihwLmFkZCh2KSx2PT09cylyZXR1cm4gdjt2PWRbdl19Zm9yKHY9czt2Oyl7aWYocC5oYXModikpcmV0dXJuIHY7dj1kW3ZdfXJldHVybiJyb290In07ZnVuY3Rpb24gREooaSl7dGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZHluYW1pY2FsbHkgcmVxdWlyZSAiJytpKyciLiBQbGVhc2UgY29uZmlndXJlIHRoZSBkeW5hbWljUmVxdWlyZVRhcmdldHMgb3IvYW5kIGlnbm9yZUR5bmFtaWNSZXF1aXJlcyBvcHRpb24gb2YgQHJvbGx1cC9wbHVnaW4tY29tbW9uanMgYXBwcm9wcmlhdGVseSBmb3IgdGhpcyByZXF1aXJlIGNhbGwgdG8gd29yay4nKX12YXIgSEtlPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24oaSxzKXsoZnVuY3Rpb24odSl7aS5leHBvcnRzPXUoKX0pKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdShkLHAsdil7ZnVuY3Rpb24gYihfLEEpe2lmKCFwW19dKXtpZighZFtfXSl7dmFyIFA9dHlwZW9mIERKPT0iZnVuY3Rpb24iJiZESjtpZighQSYmUClyZXR1cm4gUChfLCEwKTtpZih5KXJldHVybiB5KF8sITApO3ZhciBSPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK18rIiciKTt0aHJvdyBSLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFJ9dmFyIEY9cFtfXT17ZXhwb3J0czp7fX07ZFtfXVswXS5jYWxsKEYuZXhwb3J0cyxmdW5jdGlvbihqKXt2YXIgSz1kW19dWzFdW2pdO3JldHVybiBiKEt8fGopfSxGLEYuZXhwb3J0cyx1LGQscCx2KX1yZXR1cm4gcFtfXS5leHBvcnRzfWZvcih2YXIgeT10eXBlb2YgREo9PSJmdW5jdGlvbiImJkRKLFQ9MDtUPHYubGVuZ3RoO1QrKyliKHZbVF0pO3JldHVybiBifXJldHVybiB1fSgpKHsxOltmdW5jdGlvbih1LGQscCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHAsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gXyhBLFApe2Zvcih2YXIgUj0wO1I8UC5sZW5ndGg7UisrKXt2YXIgRj1QW1JdO0YuZW51bWVyYWJsZT1GLmVudW1lcmFibGV8fCExLEYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBGJiYoRi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsRi5rZXksRil9fXJldHVybiBmdW5jdGlvbihBLFAsUil7cmV0dXJuIFAmJl8oQS5wcm90b3R5cGUsUCksUiYmXyhBLFIpLEF9fSgpO2Z1bmN0aW9uIGIoXyxBKXtpZighKF8gaW5zdGFuY2VvZiBBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgeT1mdW5jdGlvbigpe2Z1bmN0aW9uIF8oKXt2YXIgQT10aGlzLFA9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnt9LFI9UC5kZWZhdWx0TGF5b3V0T3B0aW9ucyxGPVI9PT12b2lkIDA/e306UixqPVAuYWxnb3JpdGhtcyxLPWo9PT12b2lkIDA/WyJsYXllcmVkIiwic3RyZXNzIiwibXJ0cmVlIiwicmFkaWFsIiwiZm9yY2UiLCJkaXNjbyIsInNwb3JlT3ZlcmxhcCIsInNwb3JlQ29tcGFjdGlvbiIsInJlY3RwYWNraW5nIl06aixlZT1QLndvcmtlckZhY3RvcnksaWU9UC53b3JrZXJVcmw7aWYoYih0aGlzLF8pLHRoaXMuZGVmYXVsdExheW91dE9wdGlvbnM9Rix0aGlzLmluaXRpYWxpemVkPSExLHR5cGVvZiBpZT4idSImJnR5cGVvZiBlZT4idSIpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY29uc3RydWN0IGFuIEVMSyB3aXRob3V0IGJvdGggJ3dvcmtlclVybCcgYW5kICd3b3JrZXJGYWN0b3J5Jy4iKTt2YXIgb2U9ZWU7dHlwZW9mIGllPCJ1IiYmdHlwZW9mIGVlPiJ1IiYmKG9lPWZ1bmN0aW9uKGFlKXtyZXR1cm4gbmV3IFdvcmtlcihhZSl9KTt2YXIgcGU9b2UoaWUpO2lmKHR5cGVvZiBwZS5wb3N0TWVzc2FnZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJDcmVhdGVkIHdvcmtlciBkb2VzIG5vdCBwcm92aWRlIHRoZSByZXF1aXJlZCAncG9zdE1lc3NhZ2UnIGZ1bmN0aW9uLiIpO3RoaXMud29ya2VyPW5ldyBUKHBlKSx0aGlzLndvcmtlci5wb3N0TWVzc2FnZSh7Y21kOiJyZWdpc3RlciIsYWxnb3JpdGhtczpLfSkudGhlbihmdW5jdGlvbihiZSl7cmV0dXJuIEEuaW5pdGlhbGl6ZWQ9ITB9KS5jYXRjaChjb25zb2xlLmVycil9cmV0dXJuIHYoXyxbe2tleToibGF5b3V0Iix2YWx1ZTpmdW5jdGlvbihQKXt2YXIgUj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30sRj1SLmxheW91dE9wdGlvbnMsaj1GPT09dm9pZCAwP3RoaXMuZGVmYXVsdExheW91dE9wdGlvbnM6RixLPVIubG9nZ2luZyxlZT1LPT09dm9pZCAwPyExOkssaWU9Ui5tZWFzdXJlRXhlY3V0aW9uVGltZSxvZT1pZT09PXZvaWQgMD8hMTppZTtyZXR1cm4gUD90aGlzLndvcmtlci5wb3N0TWVzc2FnZSh7Y21kOiJsYXlvdXQiLGdyYXBoOlAsbGF5b3V0T3B0aW9uczpqLG9wdGlvbnM6e2xvZ2dpbmc6ZWUsbWVhc3VyZUV4ZWN1dGlvblRpbWU6b2V9fSk6UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJNaXNzaW5nIG1hbmRhdG9yeSBwYXJhbWV0ZXIgJ2dyYXBoJy4iKSl9fSx7a2V5OiJrbm93bkxheW91dEFsZ29yaXRobXMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud29ya2VyLnBvc3RNZXNzYWdlKHtjbWQ6ImFsZ29yaXRobXMifSl9fSx7a2V5OiJrbm93bkxheW91dE9wdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud29ya2VyLnBvc3RNZXNzYWdlKHtjbWQ6Im9wdGlvbnMifSl9fSx7a2V5OiJrbm93bkxheW91dENhdGVnb3JpZXMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud29ya2VyLnBvc3RNZXNzYWdlKHtjbWQ6ImNhdGVnb3JpZXMifSl9fSx7a2V5OiJ0ZXJtaW5hdGVXb3JrZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy53b3JrZXIudGVybWluYXRlKCl9fV0pLF99KCk7cC5kZWZhdWx0PXk7dmFyIFQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBfKEEpe3ZhciBQPXRoaXM7aWYoYih0aGlzLF8pLEE9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIG1hbmRhdG9yeSBwYXJhbWV0ZXIgJ3dvcmtlcicuIik7dGhpcy5yZXNvbHZlcnM9e30sdGhpcy53b3JrZXI9QSx0aGlzLndvcmtlci5vbm1lc3NhZ2U9ZnVuY3Rpb24oUil7c2V0VGltZW91dChmdW5jdGlvbigpe1AucmVjZWl2ZShQLFIpfSwwKX19cmV0dXJuIHYoXyxbe2tleToicG9zdE1lc3NhZ2UiLHZhbHVlOmZ1bmN0aW9uKFApe3ZhciBSPXRoaXMuaWR8fDA7dGhpcy5pZD1SKzEsUC5pZD1SO3ZhciBGPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGosSyl7Ri5yZXNvbHZlcnNbUl09ZnVuY3Rpb24oZWUsaWUpe2VlPyhGLmNvbnZlcnRHd3RTdHlsZUVycm9yKGVlKSxLKGVlKSk6aihpZSl9LEYud29ya2VyLnBvc3RNZXNzYWdlKFApfSl9fSx7a2V5OiJyZWNlaXZlIix2YWx1ZTpmdW5jdGlvbihQLFIpe3ZhciBGPVIuZGF0YSxqPVAucmVzb2x2ZXJzW0YuaWRdO2omJihkZWxldGUgUC5yZXNvbHZlcnNbRi5pZF0sRi5lcnJvcj9qKEYuZXJyb3IpOmoobnVsbCxGLmRhdGEpKX19LHtrZXk6InRlcm1pbmF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLndvcmtlci50ZXJtaW5hdGUmJnRoaXMud29ya2VyLnRlcm1pbmF0ZSgpfX0se2tleToiY29udmVydEd3dFN0eWxlRXJyb3IiLHZhbHVlOmZ1bmN0aW9uKFApe2lmKFApe3ZhciBSPVAuX19qYXZhJGV4Y2VwdGlvbjtSJiYoUi5jYXVzZSYmUi5jYXVzZS5iYWNraW5nSnNPYmplY3QmJihQLmNhdXNlPVIuY2F1c2UuYmFja2luZ0pzT2JqZWN0LHRoaXMuY29udmVydEd3dFN0eWxlRXJyb3IoUC5jYXVzZSkpLGRlbGV0ZSBQLl9famF2YSRleGNlcHRpb24pfX19XSksX30oKX0se31dLDI6W2Z1bmN0aW9uKHUsZCxwKXsoZnVuY3Rpb24odil7KGZ1bmN0aW9uKCl7dmFyIGI7dHlwZW9mIHdpbmRvdzwidSI/Yj13aW5kb3c6dHlwZW9mIHY8InUiP2I9djp0eXBlb2Ygc2VsZjwidSImJihiPXNlbGYpO3ZhciB5O2Z1bmN0aW9uIFQoKXt9ZnVuY3Rpb24gXygpe31mdW5jdGlvbiBBKCl7fWZ1bmN0aW9uIFAoKXt9ZnVuY3Rpb24gUigpe31mdW5jdGlvbiBGKCl7fWZ1bmN0aW9uIGooKXt9ZnVuY3Rpb24gSygpe31mdW5jdGlvbiBlZSgpe31mdW5jdGlvbiBpZSgpe31mdW5jdGlvbiBvZSgpe31mdW5jdGlvbiBwZSgpe31mdW5jdGlvbiBiZSgpe31mdW5jdGlvbiBhZSgpe31mdW5jdGlvbiBuZSgpe31mdW5jdGlvbiBzZSgpe31mdW5jdGlvbiBkZSgpe31mdW5jdGlvbiBYKCl7fWZ1bmN0aW9uIGdlKCl7fWZ1bmN0aW9uIFcoKXt9ZnVuY3Rpb24geGUoKXt9ZnVuY3Rpb24gVSgpe31mdW5jdGlvbiBGZSgpe31mdW5jdGlvbiBQZSgpe31mdW5jdGlvbiBqZSgpe31mdW5jdGlvbiBJZSgpe31mdW5jdGlvbiBTZSgpe31mdW5jdGlvbiBDZSgpe31mdW5jdGlvbiBrZSgpe31mdW5jdGlvbiBLZSgpe31mdW5jdGlvbiBGdCgpe31mdW5jdGlvbiBOZSgpe31mdW5jdGlvbiBnbigpe31mdW5jdGlvbiBfdCgpe31mdW5jdGlvbiBFdCgpe31mdW5jdGlvbiBHdCgpe31mdW5jdGlvbiBsbigpe31mdW5jdGlvbiB4dCgpe31mdW5jdGlvbiBQdCgpe31mdW5jdGlvbiBRZSgpe31mdW5jdGlvbiBEdCgpe31mdW5jdGlvbiBrdCgpe31mdW5jdGlvbiBPbigpe31mdW5jdGlvbiBodCgpe31mdW5jdGlvbiB6cigpe31mdW5jdGlvbiB5dCgpe31mdW5jdGlvbiBqaSgpe31mdW5jdGlvbiB4aSgpe31mdW5jdGlvbiBNYSgpe31mdW5jdGlvbiB6cygpe31mdW5jdGlvbiBhbygpe31mdW5jdGlvbiBUcigpe31mdW5jdGlvbiBGbigpe31mdW5jdGlvbiBxbigpe31mdW5jdGlvbiBVbigpe31mdW5jdGlvbiBBdCgpe31mdW5jdGlvbiB3dCgpe31mdW5jdGlvbiBvbigpe31mdW5jdGlvbiBmbigpe31mdW5jdGlvbiBBbigpe31mdW5jdGlvbiBvbygpe31mdW5jdGlvbiBqbygpe31mdW5jdGlvbiAkbygpe31mdW5jdGlvbiBQYSgpe31mdW5jdGlvbiB3bygpe31mdW5jdGlvbiBfcygpe31mdW5jdGlvbiB0bCgpe31mdW5jdGlvbiBkYSgpe31mdW5jdGlvbiBqMCgpe31mdW5jdGlvbiBwbSgpe31mdW5jdGlvbiBNbCgpe31mdW5jdGlvbiBYYygpe31mdW5jdGlvbiBCYygpe31mdW5jdGlvbiBqYSgpe31mdW5jdGlvbiBPdSgpe31mdW5jdGlvbiBTYSgpe31mdW5jdGlvbiBQbygpe31mdW5jdGlvbiBGYygpe31mdW5jdGlvbiB4YSgpe31mdW5jdGlvbiBCYSgpe31mdW5jdGlvbiBnYSgpe31mdW5jdGlvbiBraCgpe31mdW5jdGlvbiBsdSgpe31mdW5jdGlvbiBvNSgpe31mdW5jdGlvbiBXaCgpe31mdW5jdGlvbiBvZCgpe31mdW5jdGlvbiBHZCgpe31mdW5jdGlvbiBjZCgpe31mdW5jdGlvbiBLZCgpe31mdW5jdGlvbiAkZygpe31mdW5jdGlvbiBhcygpe31mdW5jdGlvbiB3bigpe31mdW5jdGlvbiBacigpe31mdW5jdGlvbiBaaSgpe31mdW5jdGlvbiBudSgpe31mdW5jdGlvbiB2dSgpe31mdW5jdGlvbiBEbCgpe31mdW5jdGlvbiBZaCgpe31mdW5jdGlvbiB3MSgpe31mdW5jdGlvbiAkMCgpe31mdW5jdGlvbiBXaSgpe31mdW5jdGlvbiBCcygpe31mdW5jdGlvbiBRYSgpe31mdW5jdGlvbiBCaSgpe31mdW5jdGlvbiBOdSgpe31mdW5jdGlvbiBPdCgpe31mdW5jdGlvbiBXMygpe31mdW5jdGlvbiBLdCgpe31mdW5jdGlvbiB6MCgpe31mdW5jdGlvbiBCcCgpe31mdW5jdGlvbiBZMygpe31mdW5jdGlvbiAkOSgpe31mdW5jdGlvbiBjNSgpe31mdW5jdGlvbiBFaCgpe31mdW5jdGlvbiB6Zygpe31mdW5jdGlvbiBibSgpe31mdW5jdGlvbiB6OSgpe31mdW5jdGlvbiBtbSgpe31mdW5jdGlvbiB1NSgpe31mdW5jdGlvbiB5MSgpe31mdW5jdGlvbiB1ZCgpe31mdW5jdGlvbiBsZCgpe31mdW5jdGlvbiBxOSgpe31mdW5jdGlvbiBWdigpe31mdW5jdGlvbiBZNygpe31mdW5jdGlvbiBHMigpe31mdW5jdGlvbiBYNygpe31mdW5jdGlvbiBsNSgpe31mdW5jdGlvbiBYMygpe31mdW5jdGlvbiBGcCgpe31mdW5jdGlvbiBuSSgpe31mdW5jdGlvbiBjaCgpe31mdW5jdGlvbiBvUygpe31mdW5jdGlvbiBodSgpe31mdW5jdGlvbiAkSigpe31mdW5jdGlvbiB2bSgpe31mdW5jdGlvbiB6Sigpe31mdW5jdGlvbiBvaigpe31mdW5jdGlvbiBxSigpe31mdW5jdGlvbiBjaigpe31mdW5jdGlvbiBxMCgpe31mdW5jdGlvbiBRMygpe31mdW5jdGlvbiBjUygpe31mdW5jdGlvbiB1aigpe31mdW5jdGlvbiBLMigpe31mdW5jdGlvbiBKMygpe31mdW5jdGlvbiBISigpe31mdW5jdGlvbiB3bSgpe31mdW5jdGlvbiBWSigpe31mdW5jdGlvbiBVSigpe31mdW5jdGlvbiBRNygpe31mdW5jdGlvbiB1Uygpe31mdW5jdGlvbiBsaigpe31mdW5jdGlvbiBIOSgpe31mdW5jdGlvbiBHSigpe31mdW5jdGlvbiBWOSgpe31mdW5jdGlvbiBLSigpe31mdW5jdGlvbiBXSigpe31mdW5jdGlvbiBZSigpe31mdW5jdGlvbiBYSigpe31mdW5jdGlvbiBRSigpe31mdW5jdGlvbiBKSigpe31mdW5jdGlvbiBaSigpe31mdW5jdGlvbiBlWigpe31mdW5jdGlvbiB0Wigpe31mdW5jdGlvbiBuWigpe31mdW5jdGlvbiByWigpe31mdW5jdGlvbiBySSgpe31mdW5jdGlvbiBpWigpe31mdW5jdGlvbiBzWigpe31mdW5jdGlvbiBsUygpe31mdW5jdGlvbiBoaigpe31mdW5jdGlvbiBKNygpe31mdW5jdGlvbiBhWigpe31mdW5jdGlvbiBvWigpe31mdW5jdGlvbiBjWigpe31mdW5jdGlvbiB1Wigpe31mdW5jdGlvbiBsWigpe31mdW5jdGlvbiBoUygpe31mdW5jdGlvbiBpSSgpe31mdW5jdGlvbiBmaigpe31mdW5jdGlvbiBoNSgpe31mdW5jdGlvbiBmNSgpe31mdW5jdGlvbiBoWigpe31mdW5jdGlvbiB0MCgpe31mdW5jdGlvbiBaNygpe31mdW5jdGlvbiBmWigpe31mdW5jdGlvbiBVOSgpe31mdW5jdGlvbiBXZCgpe31mdW5jdGlvbiBkWigpe31mdW5jdGlvbiBnWigpe31mdW5jdGlvbiBwWigpe31mdW5jdGlvbiBkaigpe31mdW5jdGlvbiBiWigpe31mdW5jdGlvbiBmUygpe31mdW5jdGlvbiBkUygpe31mdW5jdGlvbiBnaigpe31mdW5jdGlvbiBzSSgpe31mdW5jdGlvbiBlOCgpe31mdW5jdGlvbiBtWigpe31mdW5jdGlvbiBwaigpe31mdW5jdGlvbiBiaigpe31mdW5jdGlvbiB2Wigpe31mdW5jdGlvbiB3Wigpe31mdW5jdGlvbiB5Wigpe31mdW5jdGlvbiB4Wigpe31mdW5jdGlvbiBrWigpe31mdW5jdGlvbiBFWigpe31mdW5jdGlvbiBZZCgpe31mdW5jdGlvbiBVdigpe31mdW5jdGlvbiBUWigpe31mdW5jdGlvbiBnUygpe31mdW5jdGlvbiBwUygpe31mdW5jdGlvbiBDWigpe31mdW5jdGlvbiBkNSgpe31mdW5jdGlvbiBHOSgpe31mdW5jdGlvbiBhSSgpe31mdW5jdGlvbiBaMygpe31mdW5jdGlvbiBLOSgpe31mdW5jdGlvbiBTWigpe31mdW5jdGlvbiBiUygpe31mdW5jdGlvbiBoZCgpe31mdW5jdGlvbiBtaigpe31mdW5jdGlvbiBvSSgpe31mdW5jdGlvbiBXOSgpe31mdW5jdGlvbiBjSSgpe31mdW5jdGlvbiB2aigpe31mdW5jdGlvbiBfWigpe31mdW5jdGlvbiB1SSgpe31mdW5jdGlvbiBBWigpe31mdW5jdGlvbiBMWigpe31mdW5jdGlvbiB3aigpe31mdW5jdGlvbiB0OCgpe31mdW5jdGlvbiB5aigpe31mdW5jdGlvbiBuOCgpe31mdW5jdGlvbiBNWigpe31mdW5jdGlvbiBsSSgpe31mdW5jdGlvbiBEWigpe31mdW5jdGlvbiBJWigpe31mdW5jdGlvbiBPWigpe31mdW5jdGlvbiBOWigpe31mdW5jdGlvbiB4aigpe31mdW5jdGlvbiBQWigpe31mdW5jdGlvbiBCWigpe31mdW5jdGlvbiBraigpe31mdW5jdGlvbiBGWigpe31mdW5jdGlvbiBSWigpe31mdW5jdGlvbiBqWigpe31mdW5jdGlvbiAkWigpe31mdW5jdGlvbiBFaigpe31mdW5jdGlvbiB6Wigpe31mdW5jdGlvbiBxWigpe31mdW5jdGlvbiBUaigpe31mdW5jdGlvbiBDaigpe31mdW5jdGlvbiBTaigpe31mdW5jdGlvbiBIWigpe31mdW5jdGlvbiBWWigpe31mdW5jdGlvbiBZOSgpe31mdW5jdGlvbiByOCgpe31mdW5jdGlvbiBtUygpe31mdW5jdGlvbiBVWigpe31mdW5jdGlvbiBoSSgpe31mdW5jdGlvbiB2Uygpe31mdW5jdGlvbiBmSSgpe31mdW5jdGlvbiBfaigpe31mdW5jdGlvbiBBaigpe31mdW5jdGlvbiBHWigpe31mdW5jdGlvbiBLWigpe31mdW5jdGlvbiBXWigpe31mdW5jdGlvbiBMaigpe31mdW5jdGlvbiBNaigpe31mdW5jdGlvbiBZWigpe31mdW5jdGlvbiBYWigpe31mdW5jdGlvbiBRWigpe31mdW5jdGlvbiBKWigpe31mdW5jdGlvbiBaWigpe31mdW5jdGlvbiBEaigpe31mdW5jdGlvbiBlZWUoKXt9ZnVuY3Rpb24gdGVlKCl7fWZ1bmN0aW9uIG5lZSgpe31mdW5jdGlvbiByZWUoKXt9ZnVuY3Rpb24gSWooKXt9ZnVuY3Rpb24gd1MoKXt9ZnVuY3Rpb24gaWVlKCl7fWZ1bmN0aW9uIHNlZSgpe31mdW5jdGlvbiBPaigpe31mdW5jdGlvbiBhZWUoKXt9ZnVuY3Rpb24gb2VlKCl7fWZ1bmN0aW9uIGNlZSgpe31mdW5jdGlvbiB1ZWUoKXt9ZnVuY3Rpb24gbGVlKCl7fWZ1bmN0aW9uIGhlZSgpe31mdW5jdGlvbiBOaigpe31mdW5jdGlvbiBmZWUoKXt9ZnVuY3Rpb24gUGooKXt9ZnVuY3Rpb24gZGVlKCl7fWZ1bmN0aW9uIGdlZSgpe31mdW5jdGlvbiBwZWUoKXt9ZnVuY3Rpb24geVMoKXt9ZnVuY3Rpb24gYmVlKCl7fWZ1bmN0aW9uIHhTKCl7fWZ1bmN0aW9uIG1lZSgpe31mdW5jdGlvbiBCaigpe31mdW5jdGlvbiBGaigpe31mdW5jdGlvbiBSaigpe31mdW5jdGlvbiBqaigpe31mdW5jdGlvbiBHdigpe31mdW5jdGlvbiAkaigpe31mdW5jdGlvbiB6aigpe31mdW5jdGlvbiBxaigpe31mdW5jdGlvbiBIaigpe31mdW5jdGlvbiB2ZWUoKXt9ZnVuY3Rpb24gaTgoKXt9ZnVuY3Rpb24gZEkoKXt9ZnVuY3Rpb24gZzUoKXt9ZnVuY3Rpb24gd2VlKCl7fWZ1bmN0aW9uIHllZSgpe31mdW5jdGlvbiBrUygpe31mdW5jdGlvbiBWaigpe31mdW5jdGlvbiB4ZWUoKXt9ZnVuY3Rpb24ga2VlKCl7fWZ1bmN0aW9uIEVlZSgpe31mdW5jdGlvbiBUZWUoKXt9ZnVuY3Rpb24gQ2VlKCl7fWZ1bmN0aW9uIFNlZSgpe31mdW5jdGlvbiBfZWUoKXt9ZnVuY3Rpb24gQWVlKCl7fWZ1bmN0aW9uIExlZSgpe31mdW5jdGlvbiBNZWUoKXt9ZnVuY3Rpb24gRVMoKXt9ZnVuY3Rpb24gVWooKXt9ZnVuY3Rpb24gRGVlKCl7fWZ1bmN0aW9uIEllZSgpe31mdW5jdGlvbiBPZWUoKXt9ZnVuY3Rpb24gTmVlKCl7fWZ1bmN0aW9uIFBlZSgpe31mdW5jdGlvbiBHaigpe31mdW5jdGlvbiBLaigpe31mdW5jdGlvbiBCZWUoKXt9ZnVuY3Rpb24gV2ooKXt9ZnVuY3Rpb24gWWooKXt9ZnVuY3Rpb24gRmVlKCl7fWZ1bmN0aW9uIFJlZSgpe31mdW5jdGlvbiBqZWUoKXt9ZnVuY3Rpb24gJGVlKCl7fWZ1bmN0aW9uIHplZSgpe31mdW5jdGlvbiBxZWUoKXt9ZnVuY3Rpb24gSGVlKCl7fWZ1bmN0aW9uIFZlZSgpe31mdW5jdGlvbiBnSSgpe31mdW5jdGlvbiBVZWUoKXt9ZnVuY3Rpb24gWDkoKXt9ZnVuY3Rpb24gWGooKXt9ZnVuY3Rpb24gR2VlKCl7fWZ1bmN0aW9uIEtlZSgpe31mdW5jdGlvbiBXZWUoKXt9ZnVuY3Rpb24gWWVlKCl7fWZ1bmN0aW9uIFhlZSgpe31mdW5jdGlvbiBRZWUoKXt9ZnVuY3Rpb24gSmVlKCl7fWZ1bmN0aW9uIFplZSgpe31mdW5jdGlvbiBldGUoKXt9ZnVuY3Rpb24gdHRlKCl7fWZ1bmN0aW9uIG50ZSgpe31mdW5jdGlvbiBydGUoKXt9ZnVuY3Rpb24gaXRlKCl7fWZ1bmN0aW9uIHN0ZSgpe31mdW5jdGlvbiBhdGUoKXt9ZnVuY3Rpb24gczgoKXt9ZnVuY3Rpb24gUWooKXt9ZnVuY3Rpb24gb3RlKCl7fWZ1bmN0aW9uIGN0ZSgpe31mdW5jdGlvbiB1dGUoKXt9ZnVuY3Rpb24gSmooKXt9ZnVuY3Rpb24gbHRlKCl7fWZ1bmN0aW9uIFRTKCl7fWZ1bmN0aW9uIGh0ZSgpe31mdW5jdGlvbiBmdGUoKXt9ZnVuY3Rpb24gZHRlKCl7fWZ1bmN0aW9uIGd0ZSgpe31mdW5jdGlvbiBwdGUoKXt9ZnVuY3Rpb24gYnRlKCl7fWZ1bmN0aW9uIG10ZSgpe31mdW5jdGlvbiB2dGUoKXt9ZnVuY3Rpb24gd3RlKCl7fWZ1bmN0aW9uIHl0ZSgpe31mdW5jdGlvbiBhOCgpe31mdW5jdGlvbiB4dGUoKXt9ZnVuY3Rpb24ga3RlKCl7fWZ1bmN0aW9uIEV0ZSgpe31mdW5jdGlvbiBUdGUoKXt9ZnVuY3Rpb24gQ3RlKCl7fWZ1bmN0aW9uIFN0ZSgpe31mdW5jdGlvbiBfdGUoKXt9ZnVuY3Rpb24gQXRlKCl7fWZ1bmN0aW9uIENTKCl7fWZ1bmN0aW9uIEx0ZSgpe31mdW5jdGlvbiBNdGUoKXt9ZnVuY3Rpb24gRHRlKCl7fWZ1bmN0aW9uIEl0ZSgpe31mdW5jdGlvbiBPdGUoKXt9ZnVuY3Rpb24gTnRlKCl7fWZ1bmN0aW9uIFB0ZSgpe31mdW5jdGlvbiBCdGUoKXt9ZnVuY3Rpb24gbzgoKXt9ZnVuY3Rpb24gWmooKXt9ZnVuY3Rpb24gRnRlKCl7fWZ1bmN0aW9uIHBJKCl7fWZ1bmN0aW9uIFJ0ZSgpe31mdW5jdGlvbiBqdGUoKXt9ZnVuY3Rpb24gJHRlKCl7fWZ1bmN0aW9uIHp0ZSgpe31mdW5jdGlvbiBxdGUoKXt9ZnVuY3Rpb24gSHRlKCl7fWZ1bmN0aW9uIFZ0ZSgpe31mdW5jdGlvbiBlJCgpe31mdW5jdGlvbiBVdGUoKXt9ZnVuY3Rpb24gdCQoKXt9ZnVuY3Rpb24gR3RlKCl7fWZ1bmN0aW9uIG4kKCl7fWZ1bmN0aW9uIHIkKCl7fWZ1bmN0aW9uIGkkKCl7fWZ1bmN0aW9uIEt0ZSgpe31mdW5jdGlvbiBXdGUoKXt9ZnVuY3Rpb24gcyQoKXt9ZnVuY3Rpb24gWXRlKCl7fWZ1bmN0aW9uIGEkKCl7fWZ1bmN0aW9uIFh0ZSgpe31mdW5jdGlvbiBRdGUoKXt9ZnVuY3Rpb24gYkkoKXt9ZnVuY3Rpb24gSnRlKCl7fWZ1bmN0aW9uIFp0ZSgpe31mdW5jdGlvbiBlbmUoKXt9ZnVuY3Rpb24gdG5lKCl7fWZ1bmN0aW9uIG5uZSgpe31mdW5jdGlvbiBvJCgpe31mdW5jdGlvbiBybmUoKXt9ZnVuY3Rpb24gaW5lKCl7fWZ1bmN0aW9uIHNuZSgpe31mdW5jdGlvbiBwd2UoKXt9ZnVuY3Rpb24gYW5lKCl7fWZ1bmN0aW9uIG9uZSgpe31mdW5jdGlvbiBjbmUoKXt9ZnVuY3Rpb24gdW5lKCl7fWZ1bmN0aW9uIGxuZSgpe31mdW5jdGlvbiBobmUoKXt9ZnVuY3Rpb24gZm5lKCl7fWZ1bmN0aW9uIGRuZSgpe31mdW5jdGlvbiBnbmUoKXt9ZnVuY3Rpb24gcG5lKCl7fWZ1bmN0aW9uIGJuZSgpe31mdW5jdGlvbiBtbmUoKXt9ZnVuY3Rpb24gdm5lKCl7fWZ1bmN0aW9uIHduZSgpe31mdW5jdGlvbiB5bmUoKXt9ZnVuY3Rpb24geG5lKCl7fWZ1bmN0aW9uIGZ1KCl7fWZ1bmN0aW9uIGtuZSgpe31mdW5jdGlvbiBTUygpe31mdW5jdGlvbiBSYygpe31mdW5jdGlvbiBQdSgpe31mdW5jdGlvbiBocygpe31mdW5jdGlvbiBtSSgpe31mdW5jdGlvbiBFbmUoKXt9ZnVuY3Rpb24gVG5lKCl7fWZ1bmN0aW9uIENuZSgpe31mdW5jdGlvbiBjOCgpe31mdW5jdGlvbiB5bSgpe31mdW5jdGlvbiBROSgpe31mdW5jdGlvbiBTbmUoKXt9ZnVuY3Rpb24gdkkoKXt9ZnVuY3Rpb24gX25lKCl7fWZ1bmN0aW9uIEFuZSgpe31mdW5jdGlvbiBMbmUoKXt9ZnVuY3Rpb24gYyQoKXt9ZnVuY3Rpb24gTW5lKCl7fWZ1bmN0aW9uIERuZSgpe31mdW5jdGlvbiB3SSgpe31mdW5jdGlvbiBJbmUoKXt9ZnVuY3Rpb24gdWgoKXt9ZnVuY3Rpb24gZ2woKXt9ZnVuY3Rpb24gdSQoKXt9ZnVuY3Rpb24gT25lKCl7fWZ1bmN0aW9uIE5uZSgpe31mdW5jdGlvbiBleSgpe31mdW5jdGlvbiBwNSgpe31mdW5jdGlvbiB0eSgpe31mdW5jdGlvbiBScCgpe31mdW5jdGlvbiB1OCgpe31mdW5jdGlvbiB5SSgpe31mdW5jdGlvbiBsJCgpe31mdW5jdGlvbiBoJCgpe31mdW5jdGlvbiBQbmUoKXt9ZnVuY3Rpb24geDEoKXt9ZnVuY3Rpb24gZiQoKXt9ZnVuY3Rpb24gbnkoKXt9ZnVuY3Rpb24gSjkoKXt9ZnVuY3Rpb24geEkoKXt9ZnVuY3Rpb24gbDgoKXt9ZnVuY3Rpb24gVzIoKXt9ZnVuY3Rpb24gZCQoKXt9ZnVuY3Rpb24gZyQoKXt9ZnVuY3Rpb24gcCQoKXt9ZnVuY3Rpb24gQm5lKCl7fWZ1bmN0aW9uIGg4KCl7fWZ1bmN0aW9uIHJ5KCl7fWZ1bmN0aW9uIGpwKCl7fWZ1bmN0aW9uIFkyKCl7fWZ1bmN0aW9uIGI1KCl7fWZ1bmN0aW9uIFo5KCl7fWZ1bmN0aW9uIF9TKCl7fWZ1bmN0aW9uIGtJKCl7fWZ1bmN0aW9uIEZuZSgpe31mdW5jdGlvbiBSbmUoKXt9ZnVuY3Rpb24gYiQoKXt9ZnVuY3Rpb24gbSQoKXt9ZnVuY3Rpb24gVXQoKXt9ZnVuY3Rpb24gZWsoKXt9ZnVuY3Rpb24gdiQoKXt9ZnVuY3Rpb24gdyQoKXt9ZnVuY3Rpb24gam5lKCl7fWZ1bmN0aW9uIHRrKCl7fWZ1bmN0aW9uIG5rKCl7fWZ1bmN0aW9uIHkkKCl7fWZ1bmN0aW9uICRuZSgpe31mdW5jdGlvbiB6bmUoKXt9ZnVuY3Rpb24gcW5lKCl7fWZ1bmN0aW9uIEhuZSgpe31mdW5jdGlvbiBWbmUoKXt9ZnVuY3Rpb24gVW5lKCl7fWZ1bmN0aW9uIEVJKCl7fWZ1bmN0aW9uIEduZSgpe31mdW5jdGlvbiBLbmUoKXt9ZnVuY3Rpb24geCQoKXt9ZnVuY3Rpb24gQVMoKXt9ZnVuY3Rpb24gV25lKCl7fWZ1bmN0aW9uIFRJKCl7fWZ1bmN0aW9uIHJrKCl7fWZ1bmN0aW9uIGlrKCl7fWZ1bmN0aW9uIHNrKCl7fWZ1bmN0aW9uIGskKCl7fWZ1bmN0aW9uIFluZSgpe31mdW5jdGlvbiBFJCgpe31mdW5jdGlvbiBUJCgpe31mdW5jdGlvbiBYbmUoKXt9ZnVuY3Rpb24gTFMoKXt9ZnVuY3Rpb24gWDIoKXt9ZnVuY3Rpb24gQyQoKXt9ZnVuY3Rpb24gUyQoKXt9ZnVuY3Rpb24gTVMoKXt9ZnVuY3Rpb24gUW5lKCl7fWZ1bmN0aW9uIG01KCl7fWZ1bmN0aW9uIF8kKCl7fWZ1bmN0aW9uIENJKCl7fWZ1bmN0aW9uIFFjKCl7fWZ1bmN0aW9uIFNJKCl7fWZ1bmN0aW9uIF9JKCl7fWZ1bmN0aW9uIERTKCl7fWZ1bmN0aW9uIEpuZSgpe31mdW5jdGlvbiBabmUoKXt9ZnVuY3Rpb24gSVMoKXt9ZnVuY3Rpb24gZXJlKCl7fWZ1bmN0aW9uIE9TKCl7fWZ1bmN0aW9uIE5TKCl7fWZ1bmN0aW9uIEgwKCl7fWZ1bmN0aW9uIEFJKCl7fWZ1bmN0aW9uIExJKCl7fWZ1bmN0aW9uIGY4KCl7fWZ1bmN0aW9uIHRyZSgpe31mdW5jdGlvbiBucmUoKXt9ZnVuY3Rpb24gcnJlKCl7fWZ1bmN0aW9uIGlyZSgpe31mdW5jdGlvbiBYZCgpe31mdW5jdGlvbiBQUygpe31mdW5jdGlvbiBkOCgpe31mdW5jdGlvbiBrMSgpe31mdW5jdGlvbiBBJCgpe31mdW5jdGlvbiBMJCgpe31mdW5jdGlvbiBNJCgpe31mdW5jdGlvbiBEJCgpe31mdW5jdGlvbiBJJCgpe31mdW5jdGlvbiBPJCgpe31mdW5jdGlvbiBWMCgpe31mdW5jdGlvbiBubCgpe31mdW5jdGlvbiBzcmUoKXt9ZnVuY3Rpb24gYXJlKCl7fWZ1bmN0aW9uIG9yZSgpe31mdW5jdGlvbiBybCgpe31mdW5jdGlvbiBCUygpe31mdW5jdGlvbiBOJCgpe31mdW5jdGlvbiBQJCgpe31mdW5jdGlvbiBnOCgpe31mdW5jdGlvbiBjcmUoKXt9ZnVuY3Rpb24gYWsoKXt9ZnVuY3Rpb24gdXJlKCl7fWZ1bmN0aW9uIEIkKCl7fWZ1bmN0aW9uIGxyZSgpe31mdW5jdGlvbiBocmUoKXt9ZnVuY3Rpb24gRlMoKXt9ZnVuY3Rpb24gRiQoKXt9ZnVuY3Rpb24gTUkoKXt9ZnVuY3Rpb24gUlMoKXt9ZnVuY3Rpb24gZnJlKCl7fWZ1bmN0aW9uIGRyZSgpe31mdW5jdGlvbiBESSgpe31mdW5jdGlvbiBqUygpe31mdW5jdGlvbiBFMSgpe31mdW5jdGlvbiBvaygpe31mdW5jdGlvbiBncmUoKXt9ZnVuY3Rpb24gY2soKXt9ZnVuY3Rpb24gSUkoKXt9ZnVuY3Rpb24geG0oKXt9ZnVuY3Rpb24gJFMoKXt9ZnVuY3Rpb24gT0koKXt9ZnVuY3Rpb24gVTAoKXt9ZnVuY3Rpb24gelMoKXt9ZnVuY3Rpb24gVDEoKXt9ZnVuY3Rpb24gQzEoKXt9ZnVuY3Rpb24gcHJlKCl7fWZ1bmN0aW9uIGJyZSgpe31mdW5jdGlvbiB2NSgpe31mdW5jdGlvbiB1aygpe31mdW5jdGlvbiBsaygpe31mdW5jdGlvbiBxUygpe31mdW5jdGlvbiBtcmUoKXt9ZnVuY3Rpb24gdnJlKCl7fWZ1bmN0aW9uIHA4KCl7fWZ1bmN0aW9uIFIkKCl7fWZ1bmN0aW9uIGokKCl7fWZ1bmN0aW9uIHdyZSgpe31mdW5jdGlvbiAkJCgpe31mdW5jdGlvbiB5cmUoKXt9ZnVuY3Rpb24geiQoKXt9ZnVuY3Rpb24gTkkoKXt9ZnVuY3Rpb24geHJlKCl7fWZ1bmN0aW9uIEhTKCl7fWZ1bmN0aW9uIGtyZSgpe31mdW5jdGlvbiBFcmUoKXt9ZnVuY3Rpb24gVHJlKCl7fWZ1bmN0aW9uIENyZSgpe31mdW5jdGlvbiBTcmUoKXt9ZnVuY3Rpb24gcSQoKXt9ZnVuY3Rpb24gX3JlKCl7fWZ1bmN0aW9uIEFyZSgpe31mdW5jdGlvbiBMcmUoKXt9ZnVuY3Rpb24gSCQoKXt9ZnVuY3Rpb24gTXJlKCl7fWZ1bmN0aW9uIERyZSgpe31mdW5jdGlvbiBWUygpe31mdW5jdGlvbiBJcmUoKXt9ZnVuY3Rpb24gT3JlKCl7fWZ1bmN0aW9uIE5yZSgpe31mdW5jdGlvbiBQcmUoKXt9ZnVuY3Rpb24gQnJlKCl7fWZ1bmN0aW9uIEZyZSgpe31mdW5jdGlvbiBWJCgpe31mdW5jdGlvbiBScmUoKXt9ZnVuY3Rpb24gVSQoKXt9ZnVuY3Rpb24ganJlKCl7fWZ1bmN0aW9uIFBJKCl7fWZ1bmN0aW9uICRyZSgpe31mdW5jdGlvbiBHJCgpe31mdW5jdGlvbiB6cmUoKXt9ZnVuY3Rpb24gSyQoKXt9ZnVuY3Rpb24gcXJlKCl7fWZ1bmN0aW9uIFckKCl7fWZ1bmN0aW9uIFkkKCl7fWZ1bmN0aW9uIFgkKCl7fWZ1bmN0aW9uIEJJKCl7fWZ1bmN0aW9uIHc1KCl7fWZ1bmN0aW9uIFVTKCl7fWZ1bmN0aW9uIFMxKCl7fWZ1bmN0aW9uIFEkKCl7fWZ1bmN0aW9uIGhrKCl7fWZ1bmN0aW9uIEZJKCl7fWZ1bmN0aW9uIEokKCl7fWZ1bmN0aW9uIGttKCl7fWZ1bmN0aW9uIFokKCl7fWZ1bmN0aW9uIEdTKCl7b18oKX1mdW5jdGlvbiBIcmUoKXtpTygpfWZ1bmN0aW9uIGV6KCl7ZFUoKX1mdW5jdGlvbiB0eigpe0xjZSgpfWZ1bmN0aW9uIG56KCl7SUEoKX1mdW5jdGlvbiBLUygpe1h4ZSgpfWZ1bmN0aW9uIFdTKCl7YjAoKX1mdW5jdGlvbiByeigpe2F4ZSgpfWZ1bmN0aW9uIGl6KCl7Vk4oKX1mdW5jdGlvbiBiOCgpe3NPKCl9ZnVuY3Rpb24gS3YoKXtPTygpfWZ1bmN0aW9uIGZrKCl7aGV0KCl9ZnVuY3Rpb24gc3ooKXtseCgpfWZ1bmN0aW9uIFZyZSgpeyR1dCgpfWZ1bmN0aW9uIGF6KCl7czdlKCl9ZnVuY3Rpb24gbTgoKXtBb3QoKX1mdW5jdGlvbiBSSSgpe2E3ZSgpfWZ1bmN0aW9uIG96KCl7bWx0KCl9ZnVuY3Rpb24gVXJlKCl7X290KCl9ZnVuY3Rpb24gY3ooKXtURSgpfWZ1bmN0aW9uIFlTKCl7ZWZ0KCl9ZnVuY3Rpb24gWFMoKXtaaHQoKX1mdW5jdGlvbiBqSSgpe0VjdCgpfWZ1bmN0aW9uIEdyZSgpe3RmdCgpfWZ1bmN0aW9uIEtyZSgpe0NiKCl9ZnVuY3Rpb24gV3JlKCl7ZXEoKX1mdW5jdGlvbiBZcmUoKXtZa2UoKX1mdW5jdGlvbiBYcmUoKXtOdCgpfWZ1bmN0aW9uIFFyZSgpe25mdCgpfWZ1bmN0aW9uIEpyZSgpe0xmdCgpfWZ1bmN0aW9uIFpyZSgpe0xvdCgpfWZ1bmN0aW9uIGVpZSgpe2VndCgpfWZ1bmN0aW9uIHRpZSgpe01vdCgpfWZ1bmN0aW9uIG5pZSgpe2dtdCgpfWZ1bmN0aW9uIHJpZSgpe185ZSgpfWZ1bmN0aW9uIGlpZSgpe3RwKCl9ZnVuY3Rpb24gc2llKCl7cDF0KCl9ZnVuY3Rpb24gdjgoKXtIYygpfWZ1bmN0aW9uIGFpZSgpe2pvdCgpfWZ1bmN0aW9uIGRrKCl7dXgoKX1mdW5jdGlvbiBDZigpe3VrZSgpfWZ1bmN0aW9uIG9pZSgpe1NiKCl9ZnVuY3Rpb24gZ2soKXtsa2UoKX1mdW5jdGlvbiBRUygpe3oxKCl9ZnVuY3Rpb24gY2llKCl7WU4oKX1mdW5jdGlvbiB1aWUoKXt0bGUoKX1mdW5jdGlvbiBsaWUoKXtsdWUoKX1mdW5jdGlvbiBTZigpe3BpdCgpfWZ1bmN0aW9uIGhpZSgpe1pIKCl9ZnVuY3Rpb24gZmllKCl7d1UoKX1mdW5jdGlvbiB1eigpe3BpKCl9ZnVuY3Rpb24gZGllKCl7UFYoKX1mdW5jdGlvbiBseigpe0I4ZSgpfWZ1bmN0aW9uIGh6KCl7bGNlKCl9ZnVuY3Rpb24gZnooKXt6VSgpfWZ1bmN0aW9uIGR6KCl7eGtlKCl9ZnVuY3Rpb24gbjAoZSl7bnIoZSl9ZnVuY3Rpb24gZ3ooZSl7dGhpcy5hPWV9ZnVuY3Rpb24gSlMoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gcHooZSl7dGhpcy5hPWV9ZnVuY3Rpb24gYnooZSl7dGhpcy5hPWV9ZnVuY3Rpb24gZ2llKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHBpZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBteihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBiaWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gdnooZSl7dGhpcy5hPWV9ZnVuY3Rpb24gUTIoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gbWllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHZpZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiAkSShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB3aWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24geWllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHBrKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEoyKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHd6KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGJrKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHk1KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHpJKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHc4KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHFJKGUpe3RoaXMuYj1lfWZ1bmN0aW9uIHFnKGUpe3RoaXMuYz1lfWZ1bmN0aW9uIHhpZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBpeShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB5eihlKXt0aGlzLmE9ZX1mdW5jdGlvbiB4eihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBISShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBWSShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBreihlKXt0aGlzLmE9ZX1mdW5jdGlvbiB5OChlKXt0aGlzLmE9ZX1mdW5jdGlvbiBtayhlKXt0aGlzLmE9ZX1mdW5jdGlvbiBraWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gRXooZSl7dGhpcy5hPWV9ZnVuY3Rpb24gVHooZSl7dGhpcy5hPWV9ZnVuY3Rpb24gQ3ooZSl7dGhpcy5hPWV9ZnVuY3Rpb24gU3ooZSl7dGhpcy5hPWV9ZnVuY3Rpb24gamMoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gdmsoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gd2soZSl7dGhpcy5hPWV9ZnVuY3Rpb24gJHAoKXt0aGlzLmE9W119ZnVuY3Rpb24gRWllKGUsdCl7ZS5hPXR9ZnVuY3Rpb24gVGllKGUsdCl7ZS5hPXR9ZnVuY3Rpb24gQ2llKGUsdCl7ZS5iPXR9ZnVuY3Rpb24gU2llKGUsdCl7ZS5iPXR9ZnVuY3Rpb24gX2llKGUsdCl7ZS5iPXR9ZnVuY3Rpb24gX3ooZSx0KXtlLmo9dH1mdW5jdGlvbiBid2UoZSx0KXtlLmc9dH1mdW5jdGlvbiBBeihlLHQpe2UuaT10fWZ1bmN0aW9uIEFpZShlLHQpe2UuYz10fWZ1bmN0aW9uIHg4KGUsdCl7ZS5jPXR9ZnVuY3Rpb24gbXdlKGUsdCl7ZS5kPXR9ZnVuY3Rpb24gazgoZSx0KXtlLmQ9dH1mdW5jdGlvbiB4KGUsdCl7ZS5rPXR9ZnVuY3Rpb24gbShlLHQpe2UuYz10fWZ1bmN0aW9uIGsoZSx0KXtlLmM9dH1mdW5jdGlvbiBTKGUsdCl7ZS5hPXR9ZnVuY3Rpb24gTShlLHQpe2UuYT10fWZ1bmN0aW9uIE8oZSx0KXtlLmY9dH1mdW5jdGlvbiBOKGUsdCl7ZS5hPXR9ZnVuY3Rpb24gJChlLHQpe2UuYj10fWZ1bmN0aW9uIEgoZSx0KXtlLmQ9dH1mdW5jdGlvbiBxKGUsdCl7ZS5pPXR9ZnVuY3Rpb24gWShlLHQpe2Uubz10fWZ1bmN0aW9uIFooZSx0KXtlLnI9dH1mdW5jdGlvbiBjZShlLHQpe2UuYT10fWZ1bmN0aW9uIHZlKGUsdCl7ZS5iPXR9ZnVuY3Rpb24gbWUoZSx0KXtlLmU9dH1mdW5jdGlvbiBMZShlLHQpe2UuZj10fWZ1bmN0aW9uIF9lKGUsdCl7ZS5nPXR9ZnVuY3Rpb24gRWUoZSx0KXtlLmU9dH1mdW5jdGlvbiBCZShlLHQpe2UuZj10fWZ1bmN0aW9uIFJlKGUsdCl7ZS5mPXR9ZnVuY3Rpb24gVmUoZSx0KXtlLmE9dH1mdW5jdGlvbiBjdChlLHQpe2UuYj10fWZ1bmN0aW9uIHN0KGUsdCl7ZS5uPXR9ZnVuY3Rpb24gWWUoZSx0KXtlLmE9dH1mdW5jdGlvbiBtdChlLHQpe2UuYz10fWZ1bmN0aW9uIEplKGUsdCl7ZS5jPXR9ZnVuY3Rpb24gTHQoZSx0KXtlLmM9dH1mdW5jdGlvbiBNdChlLHQpe2UuYT10fWZ1bmN0aW9uIHV0KGUsdCl7ZS5hPXR9ZnVuY3Rpb24gV3QoZSx0KXtlLmQ9dH1mdW5jdGlvbiBUdChlLHQpe2UuZD10fWZ1bmN0aW9uIF9uKGUsdCl7ZS5lPXR9ZnVuY3Rpb24gaG4oZSx0KXtlLmU9dH1mdW5jdGlvbiBZdChlLHQpe2UuZz10fWZ1bmN0aW9uIERuKGUsdCl7ZS5mPXR9ZnVuY3Rpb24gaXIoZSx0KXtlLmo9dH1mdW5jdGlvbiB2cihlLHQpe2UuYT10fWZ1bmN0aW9uIE5uKGUsdCl7ZS5hPXR9ZnVuY3Rpb24gcHIoZSx0KXtlLmI9dH1mdW5jdGlvbiBFcihlKXtlLmI9ZS5hfWZ1bmN0aW9uIE1yKGUpe2UuYz1lLmQuZH1mdW5jdGlvbiBDcihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBPcihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBXbihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBicihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBTcihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBOcihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBTaShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB5cyhlKXt0aGlzLmE9ZX1mdW5jdGlvbiBwYShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBNaShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBnaShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBmcyhlKXt0aGlzLmE9ZX1mdW5jdGlvbiBGcyhlKXt0aGlzLmE9ZX1mdW5jdGlvbiB4cyhlKXt0aGlzLmE9ZX1mdW5jdGlvbiBScyhlKXt0aGlzLmI9ZX1mdW5jdGlvbiB5byhlKXt0aGlzLmI9ZX1mdW5jdGlvbiAkYShlKXt0aGlzLmI9ZX1mdW5jdGlvbiBEYShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBCbyhlKXt0aGlzLmE9ZX1mdW5jdGlvbiB0cihlKXt0aGlzLmM9ZX1mdW5jdGlvbiBHKGUpe3RoaXMuYz1lfWZ1bmN0aW9uIEpuKGUpe3RoaXMuYz1lfWZ1bmN0aW9uIGtyKGUpe3RoaXMuZD1lfWZ1bmN0aW9uIGxyKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFZ0KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEhzKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHdyKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEVzKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGdvKGUpe3RoaXMuYT1lfWZ1bmN0aW9uICRjKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHphKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFNjKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGJhKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHhvKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGxoKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFdsKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFoyKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGViKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEcwKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHpwKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGZkKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFd2KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHN5KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEU4KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHg1KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFQ4KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFpTKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGs1KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFFkKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIF8xKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEpkKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFl2KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEVtKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEx6KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIExpZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBNaWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gZV8oZSl7dGhpcy5hPWV9ZnVuY3Rpb24gRGllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIElpZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBFNShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBNeihlKXt0aGlzLmE9ZX1mdW5jdGlvbiB5ayhlKXt0aGlzLmE9ZX1mdW5jdGlvbiBVSShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB0XyhlKXt0aGlzLmE9ZX1mdW5jdGlvbiBEeihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBJeihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBPaWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gcXAoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gbl8oZSl7dGhpcy5hPWV9ZnVuY3Rpb24gR0koZSl7dGhpcy5hPWV9ZnVuY3Rpb24gVG0oZSl7dGhpcy5hPWV9ZnVuY3Rpb24gWmQoZSl7dGhpcy5lPWV9ZnVuY3Rpb24gVDUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24galdlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEM4KGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHZ3ZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiAkV2UoZSl7dGhpcy5hPWV9ZnVuY3Rpb24geldlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHFXZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBIV2UoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gVldlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFVXZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBHV2UoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gS1dlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFdXZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBZV2UoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gWFdlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHd3ZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBRV2UoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gSldlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFpXZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBlWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gdFllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIG5ZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiByWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gaVllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHNZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBhWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gb1llKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGNZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB1WWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gbFllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGhZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBmWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gZFllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGdZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBwWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gYlllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIG1ZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB2WWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gd1llKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHlZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB4WWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24ga1llKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEVZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBUWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gQ1llKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFNZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBfWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gQVllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIExZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBNWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gRFllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIElZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBPWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gTlllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFBZZShlKXt0aGlzLmM9ZX1mdW5jdGlvbiBCWWUoZSl7dGhpcy5iPWV9ZnVuY3Rpb24gRlllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFJZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBqWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gJFllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHpZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBxWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gSFllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFZZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBVWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gR1llKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEtZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBXWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gWVllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFhZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBRWWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gSlllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFpZZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBlWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gdFhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIG5YZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiByWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gaVhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHNYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBhWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gb1hlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGNYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB1WGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gSGcoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gQzUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gbFhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGhYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBmWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gZFhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGdYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBwWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gYlhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIG1YZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB2WGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gd1hlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHlYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB4WGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24ga1hlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEVYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBUWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gQ1hlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFNYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBfWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gQVhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIExYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBNWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gRFhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIElYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBPWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gTlhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFBYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBPeihlKXt0aGlzLmE9ZX1mdW5jdGlvbiBCWGUoZSl7dGhpcy5mPWV9ZnVuY3Rpb24gRlhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFJYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBqWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gJFhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHpYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBxWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gSFhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFZYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBVWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gR1hlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEtYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBXWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gWVhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFhYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBRWGUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gSlhlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIFpYZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBlUWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gdFFlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIG5RZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiByUWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gaVFlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHNRZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBhUWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gb1FlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGNRZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB1UWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gbFFlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIE5pZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB5d2UoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gVWkoZSl7dGhpcy5iPWV9ZnVuY3Rpb24gaFFlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGZRZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBkUWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gZ1FlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHBRZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBiUWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gbVFlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHZRZShlKXt0aGlzLmI9ZX1mdW5jdGlvbiB3UWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24gS0koZSl7dGhpcy5hPWV9ZnVuY3Rpb24geVFlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIHhRZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiB4d2UoZSl7dGhpcy5jPWV9ZnVuY3Rpb24gTnooZSl7dGhpcy5lPWV9ZnVuY3Rpb24gUHooZSl7dGhpcy5hPWV9ZnVuY3Rpb24gQnooZSl7dGhpcy5hPWV9ZnVuY3Rpb24gUGllKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIGtRZShlKXt0aGlzLmQ9ZX1mdW5jdGlvbiBFUWUoZSl7dGhpcy5hPWV9ZnVuY3Rpb24ga3dlKGUpe3RoaXMuYT1lfWZ1bmN0aW9uIEV3ZShlKXt0aGlzLmE9ZX1mdW5jdGlvbiBYdihlKXt0aGlzLmU9ZX1mdW5jdGlvbiBEY24oKXt0aGlzLmE9MH1mdW5jdGlvbiBQcigpe05sKHRoaXMpfWZ1bmN0aW9uIGJ0KCl7WXNlKHRoaXMpfWZ1bmN0aW9uIEJpZSgpe2NhdCh0aGlzKX1mdW5jdGlvbiBUUWUoKXt9ZnVuY3Rpb24gUXYoKXt0aGlzLmM9TFBlfWZ1bmN0aW9uIENRZShlLHQpe2UuYis9dH1mdW5jdGlvbiBJY24oZSx0KXt0LldiKGUpfWZ1bmN0aW9uIE9jbihlKXtyZXR1cm4gZS5hfWZ1bmN0aW9uIE5jbihlKXtyZXR1cm4gZS5hfWZ1bmN0aW9uIFBjbihlKXtyZXR1cm4gZS5hfWZ1bmN0aW9uIEJjbihlKXtyZXR1cm4gZS5hfWZ1bmN0aW9uIEZjbihlKXtyZXR1cm4gZS5hfWZ1bmN0aW9uIHVlKGUpe3JldHVybiBlLmV9ZnVuY3Rpb24gUmNuKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gamNuKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gJGNuKCl7YzNlKCksd0luKCl9ZnVuY3Rpb24gemNuKGUpe2UuYi5PZihlLmUpfWZ1bmN0aW9uIFNRZShlKXtlLmI9bmV3IG5zZX1mdW5jdGlvbiByXyhlLHQpe2UuYj10LWUuYn1mdW5jdGlvbiBpXyhlLHQpe2UuYT10LWUuYX1mdW5jdGlvbiAkbihlLHQpe2UucHVzaCh0KX1mdW5jdGlvbiBfUWUoZSx0KXtlLnNvcnQodCl9ZnVuY3Rpb24gQVFlKGUsdCl7dC5qZChlLmEpfWZ1bmN0aW9uIHFjbihlLHQpe2xhKHQsZSl9ZnVuY3Rpb24gSGNuKGUsdCxuKXtlLllkKG4sdCl9ZnVuY3Rpb24gV0koZSx0KXtlLmU9dCx0LmI9ZX1mdW5jdGlvbiBUd2UoZSl7d2QoKSx0aGlzLmE9ZX1mdW5jdGlvbiBMUWUoZSl7d2QoKSx0aGlzLmE9ZX1mdW5jdGlvbiBNUWUoZSl7d2QoKSx0aGlzLmE9ZX1mdW5jdGlvbiBGaWUoZSl7d3coKSx0aGlzLmE9ZX1mdW5jdGlvbiBEUWUoZSl7WGsoKSxTMGUubGUoZSl9ZnVuY3Rpb24gQ3dlKCl7Q3dlPVUsbmV3IFByfWZ1bmN0aW9uIENtKCl7Sm50LmNhbGwodGhpcyl9ZnVuY3Rpb24gU3dlKCl7Sm50LmNhbGwodGhpcyl9ZnVuY3Rpb24gX3dlKCl7Q20uY2FsbCh0aGlzKX1mdW5jdGlvbiBSaWUoKXtDbS5jYWxsKHRoaXMpfWZ1bmN0aW9uIElRZSgpe0NtLmNhbGwodGhpcyl9ZnVuY3Rpb24gWUkoKXtDbS5jYWxsKHRoaXMpfWZ1bmN0aW9uIHBsKCl7Q20uY2FsbCh0aGlzKX1mdW5jdGlvbiBTOCgpe0NtLmNhbGwodGhpcyl9ZnVuY3Rpb24gUXIoKXtDbS5jYWxsKHRoaXMpfWZ1bmN0aW9uIFhoKCl7Q20uY2FsbCh0aGlzKX1mdW5jdGlvbiBPUWUoKXtDbS5jYWxsKHRoaXMpfWZ1bmN0aW9uIF9jKCl7Q20uY2FsbCh0aGlzKX1mdW5jdGlvbiBOUWUoKXtDbS5jYWxsKHRoaXMpfWZ1bmN0aW9uIFBRZSgpe3RoaXMuYT10aGlzfWZ1bmN0aW9uIEZ6KCl7dGhpcy5CYnw9MjU2fWZ1bmN0aW9uIEJRZSgpe3RoaXMuYj1uZXcgVXR0fWZ1bmN0aW9uIGF5KGUsdCl7ZS5sZW5ndGg9dH1mdW5jdGlvbiBSeihlLHQpe3Z0KGUuYSx0KX1mdW5jdGlvbiBWY24oZSx0KXtKeGUoZS5jLHQpfWZ1bmN0aW9uIFVjbihlLHQpe25hKGUuYix0KX1mdW5jdGlvbiBHY24oZSx0KXtvVShlLmEsdCl9ZnVuY3Rpb24gS2NuKGUsdCl7RmNlKGUuYSx0KX1mdW5jdGlvbiB4ayhlLHQpe05pKGUuZSx0KX1mdW5jdGlvbiBfOChlKXtFVShlLmMsZS5iKX1mdW5jdGlvbiBXY24oZSx0KXtlLmtjKCkuTmIodCl9ZnVuY3Rpb24gQXdlKGUpe3RoaXMuYT0kNG4oZSl9ZnVuY3Rpb24gS3MoKXt0aGlzLmE9bmV3IFByfWZ1bmN0aW9uIEZRZSgpe3RoaXMuYT1uZXcgUHJ9ZnVuY3Rpb24gTHdlKCl7dGhpcy5hPW5ldyBuZXR9ZnVuY3Rpb24ganooKXt0aGlzLmE9bmV3IGJ0fWZ1bmN0aW9uIGppZSgpe3RoaXMuYT1uZXcgYnR9ZnVuY3Rpb24gTXdlKCl7dGhpcy5hPW5ldyBidH1mdW5jdGlvbiBfZigpe3RoaXMuYT1uZXcgcG19ZnVuY3Rpb24gU20oKXt0aGlzLmE9bmV3IE51dH1mdW5jdGlvbiBEd2UoKXt0aGlzLmE9bmV3IGJtfWZ1bmN0aW9uIEl3ZSgpe3RoaXMuYT1uZXcgU290fWZ1bmN0aW9uIE93ZSgpe3RoaXMuYT1uZXcgUnJ0fWZ1bmN0aW9uIFJRZSgpe3RoaXMuYT1uZXcgYnR9ZnVuY3Rpb24galFlKCl7dGhpcy5hPW5ldyBidH1mdW5jdGlvbiAkUWUoKXt0aGlzLmE9bmV3IGJ0fWZ1bmN0aW9uIE53ZSgpe3RoaXMuYT1uZXcgYnR9ZnVuY3Rpb24gelFlKCl7dGhpcy5kPW5ldyBidH1mdW5jdGlvbiBxUWUoKXt0aGlzLmE9bmV3IEdvdH1mdW5jdGlvbiBIUWUoKXt0aGlzLmE9bmV3IEtzfWZ1bmN0aW9uIFZRZSgpe3RoaXMuYT1uZXcgUHJ9ZnVuY3Rpb24gVVFlKCl7dGhpcy5iPW5ldyBQcn1mdW5jdGlvbiBHUWUoKXt0aGlzLmI9bmV3IGJ0fWZ1bmN0aW9uIFB3ZSgpe3RoaXMuZT1uZXcgYnR9ZnVuY3Rpb24gS1FlKCl7dGhpcy5hPW5ldyBLcmV9ZnVuY3Rpb24gV1FlKCl7dGhpcy5kPW5ldyBidH1mdW5jdGlvbiBZUWUoKXtRYXQuY2FsbCh0aGlzKX1mdW5jdGlvbiBYUWUoKXtRYXQuY2FsbCh0aGlzKX1mdW5jdGlvbiBRUWUoKXtidC5jYWxsKHRoaXMpfWZ1bmN0aW9uIEJ3ZSgpe193ZS5jYWxsKHRoaXMpfWZ1bmN0aW9uIEZ3ZSgpe2p6LmNhbGwodGhpcyl9ZnVuY3Rpb24gSlFlKCl7VnEuY2FsbCh0aGlzKX1mdW5jdGlvbiBaUWUoKXtOd2UuY2FsbCh0aGlzKX1mdW5jdGlvbiBzXygpe1RRZS5jYWxsKHRoaXMpfWZ1bmN0aW9uICRpZSgpe3NfLmNhbGwodGhpcyl9ZnVuY3Rpb24gQTgoKXtUUWUuY2FsbCh0aGlzKX1mdW5jdGlvbiBSd2UoKXtBOC5jYWxsKHRoaXMpfWZ1bmN0aW9uIGVKZSgpe3F3ZS5jYWxsKHRoaXMpfWZ1bmN0aW9uIHRKZSgpe3F3ZS5jYWxsKHRoaXMpfWZ1bmN0aW9uIG5KZSgpe3F3ZS5jYWxsKHRoaXMpfWZ1bmN0aW9uIHJKZSgpe0h3ZS5jYWxsKHRoaXMpfWZ1bmN0aW9uIGFfKCl7V25lLmNhbGwodGhpcyl9ZnVuY3Rpb24gandlKCl7V25lLmNhbGwodGhpcyl9ZnVuY3Rpb24gYmwoKXtvcy5jYWxsKHRoaXMpfWZ1bmN0aW9uIGlKZSgpe3dKZS5jYWxsKHRoaXMpfWZ1bmN0aW9uIHNKZSgpe3dKZS5jYWxsKHRoaXMpfWZ1bmN0aW9uIGFKZSgpe1ByLmNhbGwodGhpcyl9ZnVuY3Rpb24gb0plKCl7UHIuY2FsbCh0aGlzKX1mdW5jdGlvbiBjSmUoKXtQci5jYWxsKHRoaXMpfWZ1bmN0aW9uIHppZSgpe3NmdC5jYWxsKHRoaXMpfWZ1bmN0aW9uIHVKZSgpe0tzLmNhbGwodGhpcyl9ZnVuY3Rpb24gbEplKCl7RnouY2FsbCh0aGlzKX1mdW5jdGlvbiBxaWUoKXtreWUuY2FsbCh0aGlzKX1mdW5jdGlvbiAkd2UoKXtQci5jYWxsKHRoaXMpfWZ1bmN0aW9uIEhpZSgpe2t5ZS5jYWxsKHRoaXMpfWZ1bmN0aW9uIFZpZSgpe1ByLmNhbGwodGhpcyl9ZnVuY3Rpb24gaEplKCl7UHIuY2FsbCh0aGlzKX1mdW5jdGlvbiB6d2UoKXttNS5jYWxsKHRoaXMpfWZ1bmN0aW9uIGZKZSgpe3p3ZS5jYWxsKHRoaXMpfWZ1bmN0aW9uIGRKZSgpe201LmNhbGwodGhpcyl9ZnVuY3Rpb24gZ0plKCl7SiQuY2FsbCh0aGlzKX1mdW5jdGlvbiBxd2UoKXt0aGlzLmE9bmV3IEtzfWZ1bmN0aW9uIHBKZSgpe3RoaXMuYT1uZXcgUHJ9ZnVuY3Rpb24gYkplKCl7dGhpcy5hPW5ldyBidH1mdW5jdGlvbiBId2UoKXt0aGlzLmE9bmV3IFByfWZ1bmN0aW9uIEw4KCl7dGhpcy5hPW5ldyBvc31mdW5jdGlvbiBtSmUoKXt0aGlzLmo9bmV3IGJ0fWZ1bmN0aW9uIHZKZSgpe3RoaXMuYT1uZXcgYlplfWZ1bmN0aW9uIHdKZSgpe3RoaXMuYT1uZXcgUW5lfWZ1bmN0aW9uIFZ3ZSgpe3RoaXMuYT1uZXcgaHN9ZnVuY3Rpb24gb18oKXtvXz1VLHYwZT1uZXcgX31mdW5jdGlvbiBVaWUoKXtVaWU9VSx3MGU9bmV3IHhKZX1mdW5jdGlvbiBHaWUoKXtHaWU9VSx5MGU9bmV3IHlKZX1mdW5jdGlvbiB5SmUoKXtway5jYWxsKHRoaXMsIiIpfWZ1bmN0aW9uIHhKZSgpe3BrLmNhbGwodGhpcywiIil9ZnVuY3Rpb24ga0plKGUpe0FodC5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gRUplKGUpe0FodC5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gVXdlKGUpe3Z6LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBHd2UoZSl7VVplLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBZY24oZSl7VVplLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBYY24oZSl7R3dlLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBRY24oZSl7R3dlLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBKY24oZSl7R3dlLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBUSmUoZSl7VG9lLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBDSmUoZSl7VG9lLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBTSmUoZSl7YWl0LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBfSmUoZSl7cDNlLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBjXyhlKXtYei5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gS3dlKGUpe1h6LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBBSmUoZSl7WHouY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIFd3ZShlKXt5OW4uY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIFl3ZShlKXtXd2UuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIEFjKGUpe19zdC5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gTEplKGUpe0FjLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBNOCgpe3drLmNhbGwodGhpcyx7fSl9ZnVuY3Rpb24gTUplKCl7TUplPVUsZDZ0PW5ldyBXfWZ1bmN0aW9uICR6KCl7JHo9VSxFMGU9bmV3IEFudH1mdW5jdGlvbiBESmUoKXtESmU9VSxVU2U9bmV3IFR9ZnVuY3Rpb24gWHdlKCl7WHdlPVUsR1NlPW5ldyBhZX1mdW5jdGlvbiB6eigpe3p6PVUsTkw9bmV3IGRlfWZ1bmN0aW9uIEtpZShlKXtPaygpLHRoaXMuYT1lfWZ1bmN0aW9uIFdpZShlKXtFN2UoKSx0aGlzLmE9ZX1mdW5jdGlvbiBKdihlKXtJYWUoKSx0aGlzLmY9ZX1mdW5jdGlvbiBZaWUoZSl7SWFlKCksdGhpcy5mPWV9ZnVuY3Rpb24gSUplKGUpe2dpdCgpLHRoaXMuYT1lfWZ1bmN0aW9uIE9KZShlKXtlLmI9bnVsbCxlLmM9MH1mdW5jdGlvbiBaY24oZSx0KXtlLmU9dCxnYnQoZSx0KX1mdW5jdGlvbiBldW4oZSx0KXtlLmE9dCxva24oZSl9ZnVuY3Rpb24gWGllKGUsdCxuKXtlLmFbdC5nXT1ufWZ1bmN0aW9uIHR1bihlLHQsbil7azhuKG4sZSx0KX1mdW5jdGlvbiBudW4oZSx0KXtRZm4odC5pLGUubil9ZnVuY3Rpb24gTkplKGUsdCl7eHluKGUpLkNkKHQpfWZ1bmN0aW9uIHJ1bihlLHQpe2UuYS5lYygpLk1jKHQpfWZ1bmN0aW9uIFBKZShlLHQpe3JldHVybiBlLmctdC5nfWZ1bmN0aW9uIGl1bihlLHQpe3JldHVybiBlKmUvdH1mdW5jdGlvbiBSdChlKXtyZXR1cm4gbnIoZSksZX1mdW5jdGlvbiB6ZShlKXtyZXR1cm4gbnIoZSksZX1mdW5jdGlvbiBYSShlKXtyZXR1cm4gbnIoZSksZX1mdW5jdGlvbiBzdW4oZSl7cmV0dXJuIG5ldyB2ayhlKX1mdW5jdGlvbiBhdW4oZSl7cmV0dXJuIG5ldyB5eShlKX1mdW5jdGlvbiBRd2UoZSl7cmV0dXJuIG5yKGUpLGV9ZnVuY3Rpb24gb3VuKGUpe3JldHVybiBucihlKSxlfWZ1bmN0aW9uIHF6KGUpe0FjLmNhbGwodGhpcyxlKX1mdW5jdGlvbiB0YyhlKXtBYy5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gQkplKGUpe0FjLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBRaWUoZSl7X3N0LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBrayhlKXtBYy5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gWW4oZSl7QWMuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIG5jKGUpe0FjLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBGSmUoZSl7QWMuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIEQ4KGUpe0FjLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBIcChlKXtBYy5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gVnAoZSl7QWMuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIEk4KGUpe0FjLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBkZChlKXtBYy5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gSmllKGUpe0FjLmNhbGwodGhpcyxlKX1mdW5jdGlvbiByaShlKXtBYy5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gSWwoZSl7bnIoZSksdGhpcy5hPWV9ZnVuY3Rpb24gSndlKGUpe3JldHVybiBVbShlKSxlfWZ1bmN0aW9uIHVfKGUpe2w1ZShlLGUubGVuZ3RoKX1mdW5jdGlvbiBsXyhlKXtyZXR1cm4gZS5iPT1lLmN9ZnVuY3Rpb24gb3koZSl7cmV0dXJuISFlJiZlLmJ9ZnVuY3Rpb24gY3VuKGUpe3JldHVybiEhZSYmZS5rfWZ1bmN0aW9uIHV1bihlKXtyZXR1cm4hIWUmJmUuan1mdW5jdGlvbiBsdW4oZSx0LG4pe2UuYy5FZih0LG4pfWZ1bmN0aW9uIFJKZShlLHQpe2UuYmUodCksdC5hZShlKX1mdW5jdGlvbiBPOChlKXt3ZCgpLHRoaXMuYT1YcihlKX1mdW5jdGlvbiBaaWUoKXt0aGlzLmE9ZWkoWHIoQ28pKX1mdW5jdGlvbiBqSmUoKXt0aHJvdyB1ZShuZXcgUXIpfWZ1bmN0aW9uIGh1bigpe3Rocm93IHVlKG5ldyBRcil9ZnVuY3Rpb24gWndlKCl7dGhyb3cgdWUobmV3IFFyKX1mdW5jdGlvbiAkSmUoKXt0aHJvdyB1ZShuZXcgUXIpfWZ1bmN0aW9uIGZ1bigpe3Rocm93IHVlKG5ldyBRcil9ZnVuY3Rpb24gZHVuKCl7dGhyb3cgdWUobmV3IFFyKX1mdW5jdGlvbiBIeigpe0h6PVUsWGsoKX1mdW5jdGlvbiBVcCgpe05yLmNhbGwodGhpcywiIil9ZnVuY3Rpb24gaF8oKXtOci5jYWxsKHRoaXMsIiIpfWZ1bmN0aW9uIHRiKCl7TnIuY2FsbCh0aGlzLCIiKX1mdW5jdGlvbiBTNSgpe05yLmNhbGwodGhpcywiIil9ZnVuY3Rpb24gZTNlKGUpe3RjLmNhbGwodGhpcyxlKX1mdW5jdGlvbiB0M2UoZSl7dGMuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIGdkKGUpe1luLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBFayhlKXskYS5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gekplKGUpe0VrLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBlc2UoZSl7anEuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIHRzZShlKXtOeWUuY2FsbCh0aGlzLGUsMCl9ZnVuY3Rpb24gbnNlKCl7RzVlLmNhbGwodGhpcywxMiwzKX1mdW5jdGlvbiBsZShlLHQpe3JldHVybiB5b3QoZSx0KX1mdW5jdGlvbiBWeihlLHQpe3JldHVybiBqb2UoZSx0KX1mdW5jdGlvbiBndW4oZSx0KXtyZXR1cm4gZS5hLXQuYX1mdW5jdGlvbiBwdW4oZSx0KXtyZXR1cm4gZS5hLXQuYX1mdW5jdGlvbiBidW4oZSx0KXtyZXR1cm4gZS5hLXQuYX1mdW5jdGlvbiBtdW4oZSx0KXtyZXR1cm4gdCBpbiBlLmF9ZnVuY3Rpb24gcUplKGUpe3JldHVybiBlLmE/ZS5iOjB9ZnVuY3Rpb24gdnVuKGUpe3JldHVybiBlLmE/ZS5iOjB9ZnVuY3Rpb24gd3VuKGUsdCxuKXt0LkNkKGUuYVtuXSl9ZnVuY3Rpb24geXVuKGUsdCxuKXt0LlBlKGUuYVtuXSl9ZnVuY3Rpb24geHVuKGUsdCl7ZS5iPW5ldyBFbyh0KX1mdW5jdGlvbiBrdW4oZSx0KXtyZXR1cm4gZS5iPXQsZX1mdW5jdGlvbiBISmUoZSx0KXtyZXR1cm4gZS5jPXQsZX1mdW5jdGlvbiBWSmUoZSx0KXtyZXR1cm4gZS5mPXQsZX1mdW5jdGlvbiBFdW4oZSx0KXtyZXR1cm4gZS5nPXQsZX1mdW5jdGlvbiBuM2UoZSx0KXtyZXR1cm4gZS5hPXQsZX1mdW5jdGlvbiByM2UoZSx0KXtyZXR1cm4gZS5mPXQsZX1mdW5jdGlvbiBUdW4oZSx0KXtyZXR1cm4gZS5rPXQsZX1mdW5jdGlvbiBpM2UoZSx0KXtyZXR1cm4gZS5hPXQsZX1mdW5jdGlvbiBDdW4oZSx0KXtyZXR1cm4gZS5lPXQsZX1mdW5jdGlvbiBzM2UoZSx0KXtyZXR1cm4gZS5lPXQsZX1mdW5jdGlvbiBTdW4oZSx0KXtyZXR1cm4gZS5mPXQsZX1mdW5jdGlvbiBfdW4oZSx0KXtlLmI9ITAsZS5kPXR9ZnVuY3Rpb24gQXVuKGUsdCl7cmV0dXJuIGUuYi10LmJ9ZnVuY3Rpb24gTHVuKGUsdCl7cmV0dXJuIGUuZy10Lmd9ZnVuY3Rpb24gTXVuKGUsdCl7cmV0dXJuIGU/MDp0LTF9ZnVuY3Rpb24gVUplKGUsdCl7cmV0dXJuIGU/MDp0LTF9ZnVuY3Rpb24gRHVuKGUsdCl7cmV0dXJuIGU/dC0xOjB9ZnVuY3Rpb24gSXVuKGUsdCl7cmV0dXJuIGUucy10LnN9ZnVuY3Rpb24gT3VuKGUsdCl7cmV0dXJuIHQucmcoZSl9ZnVuY3Rpb24gWnYoZSx0KXtyZXR1cm4gZS5iPXQsZX1mdW5jdGlvbiBVeihlLHQpe3JldHVybiBlLmE9dCxlfWZ1bmN0aW9uIGV3KGUsdCl7cmV0dXJuIGUuYz10LGV9ZnVuY3Rpb24gdHcoZSx0KXtyZXR1cm4gZS5kPXQsZX1mdW5jdGlvbiBudyhlLHQpe3JldHVybiBlLmU9dCxlfWZ1bmN0aW9uIGEzZShlLHQpe3JldHVybiBlLmY9dCxlfWZ1bmN0aW9uIGZfKGUsdCl7cmV0dXJuIGUuYT10LGV9ZnVuY3Rpb24gVGsoZSx0KXtyZXR1cm4gZS5iPXQsZX1mdW5jdGlvbiBDayhlLHQpe3JldHVybiBlLmM9dCxlfWZ1bmN0aW9uIFF0KGUsdCl7cmV0dXJuIGUuYz10LGV9ZnVuY3Rpb24geW4oZSx0KXtyZXR1cm4gZS5iPXQsZX1mdW5jdGlvbiBKdChlLHQpe3JldHVybiBlLmQ9dCxlfWZ1bmN0aW9uIFp0KGUsdCl7cmV0dXJuIGUuZT10LGV9ZnVuY3Rpb24gTnVuKGUsdCl7cmV0dXJuIGUuZj10LGV9ZnVuY3Rpb24gZW4oZSx0KXtyZXR1cm4gZS5nPXQsZX1mdW5jdGlvbiB0bihlLHQpe3JldHVybiBlLmE9dCxlfWZ1bmN0aW9uIG5uKGUsdCl7cmV0dXJuIGUuaT10LGV9ZnVuY3Rpb24gcm4oZSx0KXtyZXR1cm4gZS5qPXQsZX1mdW5jdGlvbiBQdW4oZSx0KXtDYigpLE1jKHQsZSl9ZnVuY3Rpb24gQnVuKGUsdCxuKXtKZG4oZS5hLHQsbil9ZnVuY3Rpb24gR3ooZSl7ZGFlLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBHSmUoZSl7dDVuLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBLSmUoZSl7QWF0LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBvM2UoZSl7QWF0LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBuYihlKXtMdy5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gV0plKGUpe25vZS5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gWUplKGUpe25vZS5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gWEplKCl7YnllLmNhbGwodGhpcywiIil9ZnVuY3Rpb24gcWEoKXt0aGlzLmE9MCx0aGlzLmI9MH1mdW5jdGlvbiBRSmUoKXt0aGlzLmI9MCx0aGlzLmE9MH1mdW5jdGlvbiBKSmUoZSx0KXtlLmI9MCxNeShlLHQpfWZ1bmN0aW9uIFpKZShlLHQpe3JldHVybiBlLms9dCxlfWZ1bmN0aW9uIEZ1bihlLHQpe3JldHVybiBlLmo9dCxlfWZ1bmN0aW9uIFJ1bihlLHQpe2UuYz10LGUuYj0hMH1mdW5jdGlvbiBlWmUoKXtlWmU9VSxTNnQ9WThuKCl9ZnVuY3Rpb24gcmIoKXtyYj1VLHdfdD1hOG4oKX1mdW5jdGlvbiB0WmUoKXt0WmU9VSxMYT12eG4oKX1mdW5jdGlvbiBjM2UoKXtjM2U9VSxRYj1oRSgpfWZ1bmN0aW9uIFNrKCl7U2s9VSxBUGU9bzhuKCl9ZnVuY3Rpb24gblplKCl7blplPVUsckF0PWM4bigpfWZ1bmN0aW9uIHUzZSgpe3UzZT1VLHR1PWlrbigpfWZ1bmN0aW9uIEswKGUpe3JldHVybiBlLmUmJmUuZSgpfWZ1bmN0aW9uIHJaZShlKXtyZXR1cm4gZS5sfGUubTw8MjJ9ZnVuY3Rpb24gaVplKGUsdCl7cmV0dXJuIGUuYy5fYih0KX1mdW5jdGlvbiBzWmUoZSx0KXtyZXR1cm4gaTF0KGUuYix0KX1mdW5jdGlvbiByc2UoZSl7cmV0dXJuIGU/ZS5kOm51bGx9ZnVuY3Rpb24ganVuKGUpe3JldHVybiBlP2UuZzpudWxsfWZ1bmN0aW9uICR1bihlKXtyZXR1cm4gZT9lLmk6bnVsbH1mdW5jdGlvbiBfbShlKXtyZXR1cm4gR2coZSksZS5vfWZ1bmN0aW9uIF81KGUsdCl7cmV0dXJuIGUuYSs9dCxlfWZ1bmN0aW9uIGlzZShlLHQpe3JldHVybiBlLmErPXQsZX1mdW5jdGlvbiBHcChlLHQpe3JldHVybiBlLmErPXQsZX1mdW5jdGlvbiBydyhlLHQpe3JldHVybiBlLmErPXQsZX1mdW5jdGlvbiBsM2UoZSx0KXtmb3IoO2UuQmQodCk7KTt9ZnVuY3Rpb24gS3ooZSl7dGhpcy5hPW5ldyBOOChlKX1mdW5jdGlvbiBhWmUoKXt0aHJvdyB1ZShuZXcgUXIpfWZ1bmN0aW9uIG9aZSgpe3Rocm93IHVlKG5ldyBRcil9ZnVuY3Rpb24gY1plKCl7dGhyb3cgdWUobmV3IFFyKX1mdW5jdGlvbiB1WmUoKXt0aHJvdyB1ZShuZXcgUXIpfWZ1bmN0aW9uIGxaZSgpe3Rocm93IHVlKG5ldyBRcil9ZnVuY3Rpb24gaFplKCl7dGhyb3cgdWUobmV3IFFyKX1mdW5jdGlvbiBLcChlKXt0aGlzLmE9bmV3IFBhZShlKX1mdW5jdGlvbiBmWmUoKXt0aGlzLmE9bmV3IFVBKEVJZSl9ZnVuY3Rpb24gZFplKCl7dGhpcy5iPW5ldyBVQShxRGUpfWZ1bmN0aW9uIGdaZSgpe3RoaXMuYT1uZXcgVUEoS0llKX1mdW5jdGlvbiBwWmUoKXt0aGlzLmI9bmV3IFVBKHBnZSl9ZnVuY3Rpb24gYlplKCl7dGhpcy5iPW5ldyBVQShwZ2UpfWZ1bmN0aW9uIFd6KGUpe3RoaXMuYT0wLHRoaXMuYj1lfWZ1bmN0aW9uIGgzZShlKXtHdnQoKSxJSW4odGhpcyxlKX1mdW5jdGlvbiBfayhlKXtyZXR1cm4gZmIoZSksZS5hfWZ1bmN0aW9uIFFJKGUpe3JldHVybiBlLmIhPWUuZC5jfWZ1bmN0aW9uIGYzZShlLHQpe3JldHVybiBlLmRbdC5wXX1mdW5jdGlvbiBtWmUoZSx0KXtyZXR1cm4gWUNuKGUsdCl9ZnVuY3Rpb24gZDNlKGUsdCxuKXtlLnNwbGljZSh0LG4pfWZ1bmN0aW9uIEE1KGUsdCl7Zm9yKDtlLlJlKHQpOyk7fWZ1bmN0aW9uIHZaZShlKXtlLmM/SWJ0KGUpOk9idChlKX1mdW5jdGlvbiB3WmUoKXt0aHJvdyB1ZShuZXcgUXIpfWZ1bmN0aW9uIHlaZSgpe3Rocm93IHVlKG5ldyBRcil9ZnVuY3Rpb24geFplKCl7dGhyb3cgdWUobmV3IFFyKX1mdW5jdGlvbiBrWmUoKXt0aHJvdyB1ZShuZXcgUXIpfWZ1bmN0aW9uIEVaZSgpe3Rocm93IHVlKG5ldyBRcil9ZnVuY3Rpb24gVFplKCl7dGhyb3cgdWUobmV3IFFyKX1mdW5jdGlvbiBDWmUoKXt0aHJvdyB1ZShuZXcgUXIpfWZ1bmN0aW9uIFNaZSgpe3Rocm93IHVlKG5ldyBRcil9ZnVuY3Rpb24gX1plKCl7dGhyb3cgdWUobmV3IFFyKX1mdW5jdGlvbiBBWmUoKXt0aHJvdyB1ZShuZXcgUXIpfWZ1bmN0aW9uIHp1bigpe3Rocm93IHVlKG5ldyBfYyl9ZnVuY3Rpb24gcXVuKCl7dGhyb3cgdWUobmV3IF9jKX1mdW5jdGlvbiBKSShlKXt0aGlzLmE9bmV3IExaZShlKX1mdW5jdGlvbiBMWmUoZSl7R3duKHRoaXMsZSxUOW4oKSl9ZnVuY3Rpb24gWkkoZSl7cmV0dXJuIWV8fG9hdChlKX1mdW5jdGlvbiBlTyhlKXtyZXR1cm4gbmRbZV0hPS0xfWZ1bmN0aW9uIEh1bigpe2FLIT0wJiYoYUs9MCksb0s9LTF9ZnVuY3Rpb24gTVplKCl7bTBlPT1udWxsJiYobTBlPVtdKX1mdW5jdGlvbiB0TyhlLHQpe3E1LmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIEFrKGUsdCl7dE8uY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gRFplKGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gSVplKGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gT1plKGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gTlplKGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gUFplKGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gQlplKGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gRlplKGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gTGsoZSx0KXt0aGlzLmU9ZSx0aGlzLmQ9dH1mdW5jdGlvbiBnM2UoZSx0KXt0aGlzLmI9ZSx0aGlzLmM9dH1mdW5jdGlvbiBSWmUoZSx0KXt0aGlzLmI9ZSx0aGlzLmE9dH1mdW5jdGlvbiBqWmUoZSx0KXt0aGlzLmI9ZSx0aGlzLmE9dH1mdW5jdGlvbiAkWmUoZSx0KXt0aGlzLmI9ZSx0aGlzLmE9dH1mdW5jdGlvbiB6WmUoZSx0KXt0aGlzLmI9ZSx0aGlzLmE9dH1mdW5jdGlvbiBxWmUoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBzc2UoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBIWmUoZSx0KXt0aGlzLmE9ZSx0aGlzLmY9dH1mdW5jdGlvbiBpdyhlLHQpe3RoaXMuZz1lLHRoaXMuaT10fWZ1bmN0aW9uIFVyKGUsdCl7dGhpcy5mPWUsdGhpcy5nPXR9ZnVuY3Rpb24gVlplKGUsdCl7dGhpcy5iPWUsdGhpcy5jPXR9ZnVuY3Rpb24gVVplKGUpe1R5ZShlLmRjKCkpLHRoaXMuYz1lfWZ1bmN0aW9uIFZ1bihlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIEdaZShlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIEtaZShlKXt0aGlzLmE9bChYcihlKSwxNSl9ZnVuY3Rpb24gcDNlKGUpe3RoaXMuYT1sKFhyKGUpLDE1KX1mdW5jdGlvbiBXWmUoZSl7dGhpcy5hPWwoWHIoZSksODUpfWZ1bmN0aW9uIFl6KGUpe3RoaXMuYj1sKFhyKGUpLDg1KX1mdW5jdGlvbiBYeihlKXt0aGlzLmI9bChYcihlKSw1MSl9ZnVuY3Rpb24gUXooKXt0aGlzLnE9bmV3IGIuRGF0ZX1mdW5jdGlvbiBhc2UoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBZWmUoZSx0KXtyZXR1cm4gSHUoZS5iLHQpfWZ1bmN0aW9uIG5PKGUsdCl7cmV0dXJuIGUuYi5IYyh0KX1mdW5jdGlvbiBYWmUoZSx0KXtyZXR1cm4gZS5iLkljKHQpfWZ1bmN0aW9uIFFaZShlLHQpe3JldHVybiBlLmIuUWModCl9ZnVuY3Rpb24gSlplKGUsdCl7cmV0dXJuIGUuYi5IYyh0KX1mdW5jdGlvbiBaWmUoZSx0KXtyZXR1cm4gZS5jLnVjKHQpfWZ1bmN0aW9uIGVldChlLHQpe3JldHVybiBQaShlLmMsdCl9ZnVuY3Rpb24gVzAoZSx0KXtyZXR1cm4gZS5hLl9iKHQpfWZ1bmN0aW9uIHRldChlLHQpe3JldHVybiBlPnQmJnQ8ckx9ZnVuY3Rpb24gZF8oZSl7cmV0dXJuIGUuZi5jK2UuaS5jfWZ1bmN0aW9uIFV1bihlKXtyZXR1cm4gR3N0KCksZT9mNnQ6aDZ0fWZ1bmN0aW9uIE44KGUpe3AwdC5jYWxsKHRoaXMsZSwwKX1mdW5jdGlvbiBuZXQoKXtQYWUuY2FsbCh0aGlzLG51bGwpfWZ1bmN0aW9uIFA4KGUpe3RoaXMuYz1lLHJodCh0aGlzKX1mdW5jdGlvbiBvcygpe2tudCh0aGlzKSxDaCh0aGlzKX1mdW5jdGlvbiBWZygpe1ZnPVUsbTZ0PW5ldyBGZX1mdW5jdGlvbiBNaygpe01rPVUsQVQ9bmV3IEllfWZ1bmN0aW9uIGN5KCl7Y3k9VSxJMGU9bmV3IEh0dH1mdW5jdGlvbiBKeigpe0p6PVUsQTZ0PW5ldyBWdHR9ZnVuY3Rpb24gRGsoKXtEaz1VLHdfZT1uZXcgUWV9ZnVuY3Rpb24gYjNlKCl7UG9lLmNhbGwodGhpcyxudWxsKX1mdW5jdGlvbiBBbSgpe0FtPVUseng9bmV3IGZufWZ1bmN0aW9uIElzKGUsdCl7ZmIoZSksZS5hLk5iKHQpfWZ1bmN0aW9uIEd1bihlLHQpe3JldHVybiBlLmEuWGModCl9ZnVuY3Rpb24gS3VuKGUsdCl7cmV0dXJuIGUuYS5ZYyh0KX1mdW5jdGlvbiBvc2UoZSx0KXtyZXR1cm4gZS5hLiRjKHQpfWZ1bmN0aW9uIGNzZShlLHQpe3JldHVybiBlLmEuX2ModCl9ZnVuY3Rpb24gV3VuKGUsdCl7cmV0dXJuIGUuR2ModCksZX1mdW5jdGlvbiBZdW4oZSx0KXtyZXR1cm4gS2EoZSx0KSxlfWZ1bmN0aW9uIFh1bihlLHQpe1Z1ZSh0dChlLmEpLHQpfWZ1bmN0aW9uIFF1bihlLHQpe1Z1ZSh0dChlLmEpLHQpfWZ1bmN0aW9uIHJldChlLHQpe3JldHVybiBlLkdjKHQpLGV9ZnVuY3Rpb24gSnVuKGUsdCl7cmV0dXJuIGUuYS5mPXQsZX1mdW5jdGlvbiBpZXQoZSx0KXtyZXR1cm4gZS5hLmQ9dCxlfWZ1bmN0aW9uIHNldChlLHQpe3JldHVybiBlLmEuZz10LGV9ZnVuY3Rpb24gYWV0KGUsdCl7cmV0dXJuIGUuYS5qPXQsZX1mdW5jdGlvbiByMChlLHQpe3JldHVybiBlLmEuYT10LGV9ZnVuY3Rpb24gaTAoZSx0KXtyZXR1cm4gZS5hLmQ9dCxlfWZ1bmN0aW9uIHMwKGUsdCl7cmV0dXJuIGUuYS5lPXQsZX1mdW5jdGlvbiBhMChlLHQpe3JldHVybiBlLmEuZz10LGV9ZnVuY3Rpb24gck8oZSx0KXtyZXR1cm4gZS5hLmY9dCxlfWZ1bmN0aW9uIFp1bihlKXtyZXR1cm4gZS5iPSExLGV9ZnVuY3Rpb24gb2V0KCl7b2V0PVUsUjZ0PW5ldyBQYX1mdW5jdGlvbiBaeigpe1p6PVUsRzBlPW5ldyBncnR9ZnVuY3Rpb24gbTNlKCl7bTNlPVUsazh0PW5ldyBtbX1mdW5jdGlvbiBjZXQoKXtjZXQ9VSxFOHQ9bmV3IEcyfWZ1bmN0aW9uIHYzZSgpe3YzZT1VLFQ4dD1uZXcgcHN0fWZ1bmN0aW9uIHczZSgpe3czZT1VLHBBZT1uZXcgRnB9ZnVuY3Rpb24gdWV0KCl7dWV0PVUsTzh0PW5ldyBxMH1mdW5jdGlvbiBnXygpe2dfPVUsUDh0PW5ldyBRM31mdW5jdGlvbiBpTygpe2lPPVUsajh0PW5ldyBsU31mdW5jdGlvbiBzTygpe3NPPVUsUjh0PW5ldyBxYX1mdW5jdGlvbiBoZXQoKXtoZXQ9VSxIOHQ9bmV3IFlkfWZ1bmN0aW9uIHBfKCl7cF89VSxROHQ9bmV3IHlTfWZ1bmN0aW9uIGVxKCl7ZXE9VSxJNj1uZXcgQ2VlfWZ1bmN0aW9uIHRxKCl7dHE9VSxYa3Q9bmV3ICRuZX1mdW5jdGlvbiBucSgpe25xPVUsYmdlPW5ldyBkZXR9ZnVuY3Rpb24gcnEoKXtycT1VLG1nZT1uZXcgZHJ0fWZ1bmN0aW9uIGJfKCl7Yl89VSxxQj1uZXcgZ2F0fWZ1bmN0aW9uIGZldCgpe0podCgpLHRoaXMuYz1uZXcgbnNlfWZ1bmN0aW9uIGRldCgpe1VyLmNhbGwodGhpcyxXM3QsMCl9ZnVuY3Rpb24gZWxuKGUsdCxuKXtyYyhlLmQsdC5mLG4pfWZ1bmN0aW9uIHRsbihlLHQsbixyKXtENm4oZSxyLHQsbil9ZnVuY3Rpb24gbmxuKGUsdCxuLHIpe25DbihyLGUsdCxuKX1mdW5jdGlvbiBybG4oZSx0LG4scil7SURuKHIsZSx0LG4pfWZ1bmN0aW9uIG1fKGUsdCl7aDIoZS5jLmMsdC5iLHQpfWZ1bmN0aW9uIHN3KGUsdCl7aDIoZS5jLmIsdC5jLHQpfWZ1bmN0aW9uIGlsbihlKXtyZXR1cm4gZS5lLmIrZS5mLmJ9ZnVuY3Rpb24gc2xuKGUpe3JldHVybiBlLmUuYStlLmYuYX1mdW5jdGlvbiBhbG4oZSl7cmV0dXJuIGUuYj9lLmI6ZS5hfWZ1bmN0aW9uIG9sbihlKXtyZXR1cm4oZS5jK2UuYSkvMn1mdW5jdGlvbiBnZXQoZSx0KXtyZXR1cm4gejduKGUuYSx0KX1mdW5jdGlvbiB2XyhlLHQpe3JldHVybiBlLmE9dC5nLGV9ZnVuY3Rpb24geTNlKCl7eTNlPVUsX1BlPW5ldyBoSmV9ZnVuY3Rpb24gcGV0KCl7cGV0PVUsal90PW5ldyBjSmV9ZnVuY3Rpb24gYXcoKXthdz1VLG1fdD1uZXcgem5lfWZ1bmN0aW9uIGJldCgpe2JldD1VLENfdD1uZXcgWW5lfWZ1bmN0aW9uIG1ldCgpe21ldD1VLFJfdD1uZXcgb0plfWZ1bmN0aW9uIGliKCl7aWI9VSxHZj1uZXcgJHdlfWZ1bmN0aW9uIGlxKCl7aXE9VSxrWT1uZXcgUHJ9ZnVuY3Rpb24gd18oKXt3Xz1VLHJwZT1uZXcgU250fWZ1bmN0aW9uIFdwKCl7V3A9VSxkRj1uZXcgX250fWZ1bmN0aW9uIHVzZSgpe3VzZT1VLFpfdD1uZXcgYnJlfWZ1bmN0aW9uIEZvKCl7Rm89VSx0QXQ9bmV3IHY1fWZ1bmN0aW9uIHNiKCl7c2I9VSx0bT1uZXcgWiR9ZnVuY3Rpb24geDNlKCl7eDNlPVUsUlBlPW5ldyBidH1mdW5jdGlvbiBzcShlKXtyZXR1cm4gbChlLDQ0KS5sZCgpfWZ1bmN0aW9uIGxzZShlKXtyZXR1cm4gZS5iPGUuZC5nYygpfWZ1bmN0aW9uIGNsbihlLHQpe3JldHVybiB0LnNwbGl0KGUpfWZ1bmN0aW9uIGhzZShlLHQpe3JldHVybiBpdShlLHQpPjB9ZnVuY3Rpb24gZnNlKGUsdCl7cmV0dXJuIGl1KGUsdCk8MH1mdW5jdGlvbiB2ZXQoZSx0KXtyZXR1cm4gQWFlKGUuYSx0KX1mdW5jdGlvbiB1bG4oZSx0KXt4b3QuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gazNlKGUpe0thZSgpLGFpdC5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gRTNlKGUsdCl7Z3N0KGUsZS5sZW5ndGgsdCl9ZnVuY3Rpb24gYU8oZSx0KXtxc3QoZSxlLmxlbmd0aCx0KX1mdW5jdGlvbiB5XyhlLHQpe3JldHVybiBlLmEuZ2V0KHQpfWZ1bmN0aW9uIHdldChlLHQpe3JldHVybiBIdShlLmUsdCl9ZnVuY3Rpb24gVDNlKGUpe3JldHVybiBucihlKSwhMX1mdW5jdGlvbiBDM2UoZSl7dGhpcy5hPWwoWHIoZSksMjI5KX1mdW5jdGlvbiBhcShlKXtrbi5jYWxsKHRoaXMsZSwyMSl9ZnVuY3Rpb24gb3EoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBkc2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiB5ZXQoZSx0KXt0aGlzLmI9ZSx0aGlzLmE9dH1mdW5jdGlvbiBjcShlLHQpe3RoaXMuZD1lLHRoaXMuZT10fWZ1bmN0aW9uIHhldChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIGtldChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIEVldChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIFRldChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIEI4KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gQ2V0KGUsdCl7dGhpcy5iPWUsdGhpcy5hPXR9ZnVuY3Rpb24gUzNlKGUsdCl7dGhpcy5iPWUsdGhpcy5hPXR9ZnVuY3Rpb24gXzNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gQTNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gTDUoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBnc2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBwc2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBic2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiB1cShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIEwzZShlLHQpe3RoaXMuYj1lLHRoaXMuYT10fWZ1bmN0aW9uIGxxKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gTTNlKGUsdCl7dGhpcy5iPWUsdGhpcy5hPXR9ZnVuY3Rpb24gaHEoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBfZXQoZSx0KXt0aGlzLmI9ZSx0aGlzLmE9dH1mdW5jdGlvbiBEM2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBtc2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBvTyhlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIHhfKGUsdCxuKXtlLnNwbGljZSh0LDAsbil9ZnVuY3Rpb24gbGxuKGUsdCxuKXtlLk1iKG4pJiZ0LkNkKG4pfWZ1bmN0aW9uIGhsbihlLHQsbil7dC5QZShlLmEuWWUobikpfWZ1bmN0aW9uIGZsbihlLHQsbil7dC5EZChlLmEuWmUobikpfWZ1bmN0aW9uIGRsbihlLHQsbil7dC5DZChlLmEuS2IobikpfWZ1bmN0aW9uIGdsbihlLHQpe3JldHVybiB2bChlLmMsdCl9ZnVuY3Rpb24gcGxuKGUsdCl7cmV0dXJuIHZsKGUuZSx0KX1mdW5jdGlvbiBmcShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIGRxKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24ga18oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBJM2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBXcyhlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIGdxKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gQWV0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gTGV0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gTWV0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gRGV0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gSWV0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gT2V0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gTmV0KGUsdCl7dGhpcy5iPWUsdGhpcy5hPXR9ZnVuY3Rpb24gUGV0KGUsdCl7dGhpcy5iPWUsdGhpcy5hPXR9ZnVuY3Rpb24gTzNlKGUsdCl7dGhpcy5iPWUsdGhpcy5hPXR9ZnVuY3Rpb24gSWsoZSx0KXt0aGlzLmM9ZSx0aGlzLmQ9dH1mdW5jdGlvbiBCZXQoZSx0KXt0aGlzLmU9ZSx0aGlzLmQ9dH1mdW5jdGlvbiBGZXQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBSZXQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBqZXQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiAkZXQoZSx0KXt0aGlzLmI9ZSx0aGlzLmE9dH1mdW5jdGlvbiB6ZXQoZSx0KXt0aGlzLmI9dCx0aGlzLmM9ZX1mdW5jdGlvbiBwcShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIGNPKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gdnNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gTjNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gRV8oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiB3c2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiB5c2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiB1TyhlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIFAzZShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIHhzZShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIFRfKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gQjNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gQ18oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBTXyhlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIHV5KGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24ga3NlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gRXNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gRjNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gbE8oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBNNShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIFRzZShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIGJxKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gaE8oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBseShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIG1xKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gUjNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gQ3NlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gU3NlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gX3NlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gQXNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gTHNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gTXNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gRHNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gcWV0KGUsdCl7dGhpcy5iPWUsdGhpcy5hPXR9ZnVuY3Rpb24gajNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gSGV0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gVmV0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gVWV0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gJDNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gejNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gR2V0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gYmxuKGUsdCl7cmV0dXJuIGprKCksdCE9ZX1mdW5jdGlvbiBmTyhlKXtyZXR1cm4gbXIoZS5hKSxlLmJ9ZnVuY3Rpb24gSXNlKGUpe3JldHVybiBFRW4oZSxlLmMpLGV9ZnVuY3Rpb24gS2V0KCl7cmV0dXJuIGVaZSgpLG5ldyBTNnR9ZnVuY3Rpb24gV2V0KCl7WXEoKSx0aGlzLmE9bmV3IGk0ZX1mdW5jdGlvbiBZZXQoKXtJVSgpLHRoaXMuYT1uZXcgS3N9ZnVuY3Rpb24gWGV0KCl7Zm9lKCksdGhpcy5iPW5ldyBLc31mdW5jdGlvbiBRZXQoZSx0KXt0aGlzLmI9ZSx0aGlzLmQ9dH1mdW5jdGlvbiBKZXQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBaZXQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBldHQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiB0dHQoZSx0KXt0aGlzLmI9ZSx0aGlzLmE9dH1mdW5jdGlvbiBxM2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBIM2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiB2cShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIG93KGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gT3NlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gd3EoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBWM2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBVM2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBkTyhlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIEczZShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIE5zZShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIHlxKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gUHNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gQnNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gRnNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gUnNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gSzNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24ganNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gVzNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gZ08oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiAkc2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBZM2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBwTyhlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIFgzZShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIG50dChlLHQpe3RoaXMuYj1lLHRoaXMuYT10fWZ1bmN0aW9uIHJ0dChlLHQpe3RoaXMuYj1lLHRoaXMuYT10fWZ1bmN0aW9uIGl0dChlLHQpe3RoaXMuYj1lLHRoaXMuYT10fWZ1bmN0aW9uIHN0dChlLHQpe3RoaXMuYj1lLHRoaXMuYT10fWZ1bmN0aW9uIFEzZShlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIGF0dChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIG90dChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIGx0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gX18oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBiTyhlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIEY4KGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gQV8oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBtTyhlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIHpzZShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIHhxKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gTF8oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBxc2UoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBrcShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIEQ1KGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gdk8oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBNXyhlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIERfKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gd08oZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBFcShlLHQpe1VyLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIEk1KGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gSHNlKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gY3R0KGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gVHEoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiB1dHQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBsdHQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBodHQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBmdHQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBkdHQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBndHQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBjYShlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIHB0dChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIGJ0dChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIG10dChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIHZ0dChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIHd0dChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIHl0dChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIHh0dChlLHQpe3RoaXMuYj1lLHRoaXMuYT10fWZ1bmN0aW9uIGt0dChlLHQpe3RoaXMuYj1lLHRoaXMuYT10fWZ1bmN0aW9uIEV0dChlLHQpe3RoaXMuYj1lLHRoaXMuYT10fWZ1bmN0aW9uIFR0dChlLHQpe3RoaXMuYj1lLHRoaXMuYT10fWZ1bmN0aW9uIEN0dChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIFN0dChlLHQpe3RoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIENxKGUsdCl7VXIuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gX3R0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gQXR0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gUjgoZSx0KXtVci5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBMdHQoZSx0KXt0aGlzLmY9ZSx0aGlzLmM9dH1mdW5jdGlvbiBKM2UoZSx0KXtyZXR1cm4gdmwoZS5nLHQpfWZ1bmN0aW9uIG1sbihlLHQpe3JldHVybiB2bCh0LmIsZSl9ZnVuY3Rpb24gTXR0KGUsdCl7cmV0dXJuIEtjZShlLmEsdCl9ZnVuY3Rpb24gdmxuKGUsdCl7cmV0dXJuLWUuYi5hZih0KX1mdW5jdGlvbiB3bG4oZSx0KXtlJiZraShsRixlLHQpfWZ1bmN0aW9uIFozZShlLHQpe2UuaT1udWxsLHhWKGUsdCl9ZnVuY3Rpb24geWxuKGUsdCxuKXt4Z3QodCxqdWUoZSxuKSl9ZnVuY3Rpb24geGxuKGUsdCxuKXt4Z3QodCxqdWUoZSxuKSl9ZnVuY3Rpb24ga2xuKGUsdCl7WFRuKGUuYSxsKHQsNTgpKX1mdW5jdGlvbiBEdHQoZSx0KXtHdm4oZS5hLGwodCwxMikpfWZ1bmN0aW9uIFNxKGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gSXR0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gT3R0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gTnR0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gUHR0KGUsdCl7dGhpcy5hPWUsdGhpcy5iPXR9ZnVuY3Rpb24gQnR0KGUsdCl7dGhpcy5kPWUsdGhpcy5iPXR9ZnVuY3Rpb24gRnR0KGUsdCl7dGhpcy5lPWUsdGhpcy5hPXR9ZnVuY3Rpb24geU8oZSx0KXt0aGlzLmI9ZSx0aGlzLmM9dH1mdW5jdGlvbiBleWUoZSx0KXt0aGlzLmk9ZSx0aGlzLmc9dH1mdW5jdGlvbiB0eWUoZSx0KXt0aGlzLmQ9ZSx0aGlzLmU9dH1mdW5jdGlvbiBFbG4oZSx0KXtvd24obmV3IG9yKGUpLHQpfWZ1bmN0aW9uIF9xKGUpe3JldHVybiBGTihlLmMsZS5iKX1mdW5jdGlvbiBoYyhlKXtyZXR1cm4gZT9lLm1kKCk6bnVsbH1mdW5jdGlvbiBxZShlKXtyZXR1cm4gZT8/bnVsbH1mdW5jdGlvbiBJYShlKXtyZXR1cm4gdHlwZW9mIGU9PT1JbGV9ZnVuY3Rpb24gaHkoZSl7cmV0dXJuIHR5cGVvZiBlPT09Q3h9ZnVuY3Rpb24gZnkoZSl7cmV0dXJuIHR5cGVvZiBlPT09UWtlfWZ1bmN0aW9uIGN3KGUsdCl7cmV0dXJuIGl1KGUsdCk9PTB9ZnVuY3Rpb24gQXEoZSx0KXtyZXR1cm4gaXUoZSx0KT49MH1mdW5jdGlvbiBJXyhlLHQpe3JldHVybiBpdShlLHQpIT0wfWZ1bmN0aW9uIExxKGUsdCl7cmV0dXJuIFQzbihlLktjKCksdCl9ZnVuY3Rpb24gYWIoZSx0KXtyZXR1cm4gZS5SZCgpLlhiKHQpfWZ1bmN0aW9uIFJ0dChlKXtyZXR1cm4gUWwoZSksZS5kLmdjKCl9ZnVuY3Rpb24gTXEoZSl7cmV0dXJuIFZfKGU9PW51bGwpLGV9ZnVuY3Rpb24gT18oZSx0KXtyZXR1cm4gZS5hKz0iIit0LGV9ZnVuY3Rpb24gWG8oZSx0KXtyZXR1cm4gZS5hKz0iIit0LGV9ZnVuY3Rpb24gTl8oZSx0KXtyZXR1cm4gZS5hKz0iIit0LGV9ZnVuY3Rpb24gd3UoZSx0KXtyZXR1cm4gZS5hKz0iIit0LGV9ZnVuY3Rpb24gaGkoZSx0KXtyZXR1cm4gZS5hKz0iIit0LGV9ZnVuY3Rpb24gbnllKGUsdCl7cmV0dXJuIGUuYSs9IiIrdCxlfWZ1bmN0aW9uIFRsbihlKXtyZXR1cm4iIisobnIoZSksZSl9ZnVuY3Rpb24ganR0KGUpe05sKHRoaXMpLGJBKHRoaXMsZSl9ZnVuY3Rpb24gJHR0KCl7VTVlKCksUTRlLmNhbGwodGhpcyl9ZnVuY3Rpb24genR0KGUsdCl7bjVlLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIHF0dChlLHQpe241ZS5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBEcShlLHQpe241ZS5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBrbyhlLHQpe0NzKGUsdCxlLmMuYixlLmMpfWZ1bmN0aW9uIE81KGUsdCl7Q3MoZSx0LGUuYSxlLmEuYSl9ZnVuY3Rpb24gcnllKGUpe3JldHVybiBTbihlLDApLG51bGx9ZnVuY3Rpb24gSHR0KCl7dGhpcy5iPTAsdGhpcy5hPSExfWZ1bmN0aW9uIFZ0dCgpe3RoaXMuYj0wLHRoaXMuYT0hMX1mdW5jdGlvbiBVdHQoKXt0aGlzLmI9bmV3IE44KEF5KDEyKSl9ZnVuY3Rpb24gR3R0KCl7R3R0PVUseTd0PUtyKGV1ZSgpKX1mdW5jdGlvbiBLdHQoKXtLdHQ9VSxxOHQ9S3IocmJ0KCkpfWZ1bmN0aW9uIFd0dCgpe1d0dD1VLGhUdD1LcihCZnQoKSl9ZnVuY3Rpb24gaXllKCl7aXllPVUsQ3dlKCksS1NlPW5ldyBQcn1mdW5jdGlvbiBZMChlKXtyZXR1cm4gZS5hPTAsZS5iPTAsZX1mdW5jdGlvbiBZdHQoZSx0KXtyZXR1cm4gZS5hPXQuZysxLGV9ZnVuY3Rpb24gVnNlKGUsdCl7bXkuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gcG4oZSx0KXt2cy5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBONShlLHQpe2V5ZS5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBYdHQoZSx0KXtUTy5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBVc2UoZSx0KXttRS5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiB3aShlLHQpe2lxKCksa2koa1ksZSx0KX1mdW5jdGlvbiBRdHQoZSx0KXtlLnEuc2V0VGltZShGbSh0KSl9ZnVuY3Rpb24gQ2xuKGUpe2IuY2xlYXJUaW1lb3V0KGUpfWZ1bmN0aW9uIFNsbihlKXtyZXR1cm4gWHIoZSksbmV3IFBfKGUpfWZ1bmN0aW9uIEp0dChlLHQpe3JldHVybiBxZShlKT09PXFlKHQpfWZ1bmN0aW9uIFp0dChlLHQpe3JldHVybiBlLmEuYS5hLmNjKHQpfWZ1bmN0aW9uIEdzZShlLHQpe3JldHVybiB0ZihlLmEsMCx0KX1mdW5jdGlvbiBzeWUoZSl7cmV0dXJuIExnbihsKGUsNzQpKX1mdW5jdGlvbiBqOChlKXtyZXR1cm4gdWEoKG5yKGUpLGUpKX1mdW5jdGlvbiBfbG4oZSl7cmV0dXJuIHVhKChucihlKSxlKSl9ZnVuY3Rpb24gZW50KGUpe3JldHVybiBxdShlLmwsZS5tLGUuaCl9ZnVuY3Rpb24gYXllKGUsdCl7cmV0dXJuIHJ1KGUuYSx0LmEpfWZ1bmN0aW9uIEFsbihlLHQpe3JldHVybiAkc3QoZS5hLHQuYSl9ZnVuY3Rpb24gTGxuKGUsdCl7cmV0dXJuIFlpKGUuYSx0LmEpfWZ1bmN0aW9uIHBkKGUsdCl7cmV0dXJuIGUuaW5kZXhPZih0KX1mdW5jdGlvbiBNbG4oZSx0KXtyZXR1cm4gZS5qW3QucF09PTJ9ZnVuY3Rpb24gdXcoZSx0KXtyZXR1cm4gZT09dD8wOmU/MTotMX1mdW5jdGlvbiBJcShlKXtyZXR1cm4gZTwxMD8iMCIrZToiIitlfWZ1bmN0aW9uIHdjKGUpe3JldHVybiB0eXBlb2YgZT09PVFrZX1mdW5jdGlvbiBEbG4oZSl7cmV0dXJuIGU9PXMzfHxlPT1vNH1mdW5jdGlvbiBJbG4oZSl7cmV0dXJuIGU9PXMzfHxlPT1hNH1mdW5jdGlvbiB0bnQoZSx0KXtyZXR1cm4gcnUoZS5nLHQuZyl9ZnVuY3Rpb24gb3llKGUpe3JldHVybiBnYyhlLmIuYixlLDApfWZ1bmN0aW9uIG5udCgpe3NILmNhbGwodGhpcywwLDAsMCwwKX1mdW5jdGlvbiBiZCgpe3dyLmNhbGwodGhpcyxuZXcgZTIpfWZ1bmN0aW9uIGN5ZShlLHQpe25FKGUsMCxlLmxlbmd0aCx0KX1mdW5jdGlvbiBPbG4oZSx0KXtyZXR1cm4gdnQoZS5hLHQpLHR9ZnVuY3Rpb24gTmxuKGUsdCl7cmV0dXJuIHUwKCksdC5hKz1lfWZ1bmN0aW9uIFBsbihlLHQpe3JldHVybiB1MCgpLHQuYSs9ZX1mdW5jdGlvbiBCbG4oZSx0KXtyZXR1cm4gdTAoKSx0LmMrPWV9ZnVuY3Rpb24gRmxuKGUsdCl7cmV0dXJuIHZ0KGUuYyx0KSxlfWZ1bmN0aW9uIHV5ZShlLHQpe3JldHVybiBEaChlLmEsdCksZX1mdW5jdGlvbiBybnQoZSl7dGhpcy5hPUtldCgpLHRoaXMuYj1lfWZ1bmN0aW9uIGludChlKXt0aGlzLmE9S2V0KCksdGhpcy5iPWV9ZnVuY3Rpb24gRW8oZSl7dGhpcy5hPWUuYSx0aGlzLmI9ZS5ifWZ1bmN0aW9uIFBfKGUpe3RoaXMuYT1lLEdTLmNhbGwodGhpcyl9ZnVuY3Rpb24gc250KGUpe3RoaXMuYT1lLEdTLmNhbGwodGhpcyl9ZnVuY3Rpb24gJDgoKXtlZi5jYWxsKHRoaXMsMCwwLDAsMCl9ZnVuY3Rpb24gT3EoZSl7cmV0dXJuIERoKG5ldyBYcyxlKX1mdW5jdGlvbiBhbnQoZSl7cmV0dXJuIEVIKGwoZSwxMjMpKX1mdW5jdGlvbiBoaChlKXtyZXR1cm4gZS52aCgpJiZlLndoKCl9ZnVuY3Rpb24gUDUoZSl7cmV0dXJuIGUhPVoxJiZlIT1XYn1mdW5jdGlvbiBVZyhlKXtyZXR1cm4gZT09dWN8fGU9PXZjfWZ1bmN0aW9uIEI1KGUpe3JldHVybiBlPT13Znx8ZT09UTF9ZnVuY3Rpb24gb250KGUpe3JldHVybiBlPT1HNnx8ZT09VTZ9ZnVuY3Rpb24gUmxuKGUsdCl7cmV0dXJuIHJ1KGUuZyx0LmcpfWZ1bmN0aW9uIGNudChlLHQpe3JldHVybiBuZXcgbUUodCxlKX1mdW5jdGlvbiBqbG4oZSx0KXtyZXR1cm4gbmV3IG1FKHQsZSl9ZnVuY3Rpb24gbHllKGUpe3JldHVybiBhZG4oZS5iLktjKCksZS5hKX1mdW5jdGlvbiBLc2UoZSx0KXtDRShlLHQpLGxFKGUsZS5EKX1mdW5jdGlvbiBXc2UoZSx0LG4pe2RWKGUsdCksZlYoZSxuKX1mdW5jdGlvbiBGNShlLHQsbil7RHcoZSx0KSxNdyhlLG4pfWZ1bmN0aW9uIFFoKGUsdCxuKXtVdShlLHQpLEd1KGUsbil9ZnVuY3Rpb24geE8oZSx0LG4pe2FFKGUsdCksY0UoZSxuKX1mdW5jdGlvbiBrTyhlLHQsbil7b0UoZSx0KSx1RShlLG4pfWZ1bmN0aW9uIHVudChlLHQsbil7R3llLmNhbGwodGhpcyxlLHQsbil9ZnVuY3Rpb24gaHllKGUpe0x0dC5jYWxsKHRoaXMsZSwhMCl9ZnVuY3Rpb24gbG50KCl7b3EuY2FsbCh0aGlzLCJUYWlsIiwzKX1mdW5jdGlvbiBobnQoKXtvcS5jYWxsKHRoaXMsIkhlYWQiLDEpfWZ1bmN0aW9uIG9iKGUpe0NkKCkseTNuLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBsdyhlKXtzSC5jYWxsKHRoaXMsZSxlLGUsZSl9ZnVuY3Rpb24gWXNlKGUpe2UuYz1XZSh3YSxSbiwxLDAsNSwxKX1mdW5jdGlvbiBmeWUoZSl7cmV0dXJuIGUuYiYmZ2xlKGUpLGUuYX1mdW5jdGlvbiBkeWUoZSl7cmV0dXJuIGUuYiYmZ2xlKGUpLGUuY31mdW5jdGlvbiAkbG4oZSx0KXtHMXx8KGUuYj10KX1mdW5jdGlvbiB6bG4oZSx0KXtyZXR1cm4gZVtlLmxlbmd0aF09dH1mdW5jdGlvbiBxbG4oZSx0KXtyZXR1cm4gZVtlLmxlbmd0aF09dH1mdW5jdGlvbiBIbG4oZSx0KXtyZXR1cm4gTHkodCxNMShlKSl9ZnVuY3Rpb24gVmxuKGUsdCl7cmV0dXJuIEx5KHQsTTEoZSkpfWZ1bmN0aW9uIFVsbihlLHQpe3JldHVybiB2VihVYWUoZS5kKSx0KX1mdW5jdGlvbiBHbG4oZSx0KXtyZXR1cm4gdlYoVWFlKGUuZyksdCl9ZnVuY3Rpb24gS2xuKGUsdCl7cmV0dXJuIHZWKFVhZShlLmopLHQpfWZ1bmN0aW9uIEhhKGUsdCl7dnMuY2FsbCh0aGlzLGUuYix0KX1mdW5jdGlvbiBXbG4oZSx0KXtxcihkdShlLmEpLElvdCh0KSl9ZnVuY3Rpb24gWWxuKGUsdCl7cXIoWGwoZS5hKSxPb3QodCkpfWZ1bmN0aW9uIFhsbihlLHQsbil7UWgobixuLmkrZSxuLmordCl9ZnVuY3Rpb24gZm50KGUsdCxuKXtUcyhlLmNbdC5nXSx0Lmcsbil9ZnVuY3Rpb24gUWxuKGUsdCxuKXtsKGUuYyw3MSkuR2kodCxuKX1mdW5jdGlvbiBYc2UoZSx0LG4pe3JldHVybiBUcyhlLHQsbiksbn1mdW5jdGlvbiBkbnQoZSl7VnUoZS5TZigpLG5ldyBNaWUoZSkpfWZ1bmN0aW9uIFI1KGUpe3JldHVybiBlIT1udWxsP2VzKGUpOjB9ZnVuY3Rpb24gSmxuKGUpe3JldHVybiBlPT1udWxsPzA6ZXMoZSl9ZnVuY3Rpb24gQl8oZSl7RGkoKSxYdi5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gZ250KGUpe3RoaXMuYT1lLF80ZS5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gQTEoKXtBMT1VLGIuTWF0aC5sb2coMil9ZnVuY3Rpb24gSmgoKXtKaD1VLFNnPShiZXQoKSxDX3QpfWZ1bmN0aW9uIHBudCgpe3BudD1VLE1kZT1uZXcgTEEoVmdlKX1mdW5jdGlvbiBKcigpe0pyPVUsbmV3IGJudCxuZXcgYnR9ZnVuY3Rpb24gYm50KCl7bmV3IFByLG5ldyBQcixuZXcgUHJ9ZnVuY3Rpb24gWmxuKCl7dGhyb3cgdWUobmV3IEhwKFE1dCkpfWZ1bmN0aW9uIGVobigpe3Rocm93IHVlKG5ldyBIcChRNXQpKX1mdW5jdGlvbiB0aG4oKXt0aHJvdyB1ZShuZXcgSHAoSjV0KSl9ZnVuY3Rpb24gbmhuKCl7dGhyb3cgdWUobmV3IEhwKEo1dCkpfWZ1bmN0aW9uIFFzZShlKXt0aGlzLmE9ZSxZei5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gSnNlKGUpe3RoaXMuYT1lLFl6LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBtbnQoZSx0KXt3dygpLHRoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIHJobihlLHQpe1hyKHQpLFY1KGUpLkpjKG5ldyBpZSl9ZnVuY3Rpb24gVnMoZSx0KXtMYWUoZS5jLGUuYy5sZW5ndGgsdCl9ZnVuY3Rpb24gTGMoZSl7cmV0dXJuIGUuYTxlLmMuYy5sZW5ndGh9ZnVuY3Rpb24gZ3llKGUpe3JldHVybiBlLmE8ZS5jLmEubGVuZ3RofWZ1bmN0aW9uIHZudChlLHQpe3JldHVybiBlLmE/ZS5iOnQuV2UoKX1mdW5jdGlvbiBydShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6MH1mdW5jdGlvbiBweWUoZSx0KXtyZXR1cm4gaXUoZSx0KT4wP2U6dH1mdW5jdGlvbiBxdShlLHQsbil7cmV0dXJue2w6ZSxtOnQsaDpufX1mdW5jdGlvbiBpaG4oZSx0KXtlLmEhPW51bGwmJkR0dCh0LGUuYSl9ZnVuY3Rpb24gc2huKGUpe3BvKGUsbnVsbCksRmEoZSxudWxsKX1mdW5jdGlvbiBhaG4oZSx0LG4pe3JldHVybiBraShlLmcsbix0KX1mdW5jdGlvbiBqNShlLHQsbil7cmV0dXJuIFI4ZSh0LG4sZS5jKX1mdW5jdGlvbiBvaG4oZSx0LG4pe3JldHVybiBraShlLmssbix0KX1mdW5jdGlvbiBjaG4oZSx0LG4pe3JldHVybiBLTW4oZSx0LG4pLG59ZnVuY3Rpb24gdWhuKGUsdCl7cmV0dXJuIFNoKCksdC5uLmIrPWV9ZnVuY3Rpb24gd250KGUpe1I1ZS5jYWxsKHRoaXMpLHRoaXMuYj1lfWZ1bmN0aW9uIGJ5ZShlKXtyNGUuY2FsbCh0aGlzKSx0aGlzLmE9ZX1mdW5jdGlvbiB5bnQoKXtvcS5jYWxsKHRoaXMsIlJhbmdlIiwyKX1mdW5jdGlvbiBOcShlKXt0aGlzLmI9ZSx0aGlzLmE9bmV3IGJ0fWZ1bmN0aW9uIHhudChlKXt0aGlzLmI9bmV3IE51LHRoaXMuYT1lfWZ1bmN0aW9uIGtudChlKXtlLmE9bmV3IF90LGUuYz1uZXcgX3R9ZnVuY3Rpb24gRW50KGUpe2UuYT1uZXcgUHIsZS5kPW5ldyBQcn1mdW5jdGlvbiBUbnQoZSl7ZG9lKGUsbnVsbCksZ29lKGUsbnVsbCl9ZnVuY3Rpb24gQ250KGUsdCl7cmV0dXJuIFlNbihlLmEsdCxudWxsKX1mdW5jdGlvbiBsaG4oZSx0KXtyZXR1cm4ga2koZS5hLHQuYSx0KX1mdW5jdGlvbiBKYShlKXtyZXR1cm4gbmV3IGx0KGUuYSxlLmIpfWZ1bmN0aW9uIG15ZShlKXtyZXR1cm4gbmV3IGx0KGUuYyxlLmQpfWZ1bmN0aW9uIGhobihlKXtyZXR1cm4gbmV3IGx0KGUuYyxlLmQpfWZ1bmN0aW9uIEZfKGUsdCl7cmV0dXJuIG9NbihlLmMsZS5iLHQpfWZ1bmN0aW9uIERlKGUsdCl7cmV0dXJuIGUhPW51bGwmJml1ZShlLHQpfWZ1bmN0aW9uIFpzZShlLHQpe3JldHVybiBleW4oZS5LYygpLHQpIT0tMX1mdW5jdGlvbiBQcShlKXtyZXR1cm4gZS5PYigpP2UuUGIoKTpudWxsfWZ1bmN0aW9uIGZobihlKXt0aGlzLmI9KENuKCksbmV3IHRyKGUpKX1mdW5jdGlvbiB2eWUoZSl7dGhpcy5hPWUsUHIuY2FsbCh0aGlzKX1mdW5jdGlvbiBTbnQoKXtUTy5jYWxsKHRoaXMsbnVsbCxudWxsKX1mdW5jdGlvbiBfbnQoKXtxcS5jYWxsKHRoaXMsbnVsbCxudWxsKX1mdW5jdGlvbiBBbnQoKXtVci5jYWxsKHRoaXMsIklOU1RBTkNFIiwwKX1mdW5jdGlvbiBMbnQoKXtteGUoKSx0aGlzLmE9bmV3IFVBKGdBZSl9ZnVuY3Rpb24gTW50KGUpe3JldHVybiBJZihlLDAsZS5sZW5ndGgpfWZ1bmN0aW9uIGRobihlLHQpe3JldHVybiBuZXcgV250KGUuS2MoKSx0KX1mdW5jdGlvbiB3eWUoZSx0KXtyZXR1cm4gZS5hLkJjKHQpIT1udWxsfWZ1bmN0aW9uIERudChlLHQpeyRyKGUpLGUuR2MobCh0LDE1KSl9ZnVuY3Rpb24gZ2huKGUsdCxuKXtlLmMuYmQodCxsKG4sMTM2KSl9ZnVuY3Rpb24gcGhuKGUsdCxuKXtlLmMuVWkodCxsKG4sMTM2KSl9ZnVuY3Rpb24gSW50KGUsdCl7ZS5jJiYoJDRlKHQpLGlvdCh0KSl9ZnVuY3Rpb24gYmhuKGUsdCl7ZS5xLnNldEhvdXJzKHQpLFhBKGUsdCl9ZnVuY3Rpb24gbWhuKGUsdCl7ZHcodCxlLmEuYS5hLGUuYS5hLmIpfWZ1bmN0aW9uIHZobihlLHQsbixyKXtUcyhlLmFbdC5nXSxuLmcscil9ZnVuY3Rpb24gZWFlKGUsdCxuKXtyZXR1cm4gZS5hW3QuZ11bbi5nXX1mdW5jdGlvbiB3aG4oZSx0KXtyZXR1cm4gZS5lW3QuYy5wXVt0LnBdfWZ1bmN0aW9uIHlobihlLHQpe3JldHVybiBlLmNbdC5jLnBdW3QucF19ZnVuY3Rpb24gTDEoZSx0KXtyZXR1cm4gZS5hW3QuYy5wXVt0LnBdfWZ1bmN0aW9uIHhobihlLHQpe3JldHVybiBlLmpbdC5wXT1JVG4odCl9ZnVuY3Rpb24gdGFlKGUsdCl7cmV0dXJuIGUuYS5CYyh0KSE9bnVsbH1mdW5jdGlvbiBraG4oZSx0KXtyZXR1cm4gemUoR2UodC5hKSk8PWV9ZnVuY3Rpb24gRWhuKGUsdCl7cmV0dXJuIHplKEdlKHQuYSkpPj1lfWZ1bmN0aW9uIFRobihlLHQpe3JldHVybiBFNmUoZS5mLHQuUGcoKSl9ZnVuY3Rpb24gejgoZSx0KXtyZXR1cm4gZS5hKnQuYStlLmIqdC5ifWZ1bmN0aW9uIENobihlLHQpe3JldHVybiBlLmE8ZzRlKHQpPy0xOjF9ZnVuY3Rpb24gU2huKGUsdCl7cmV0dXJuIEU2ZShlLmIsdC5QZygpKX1mdW5jdGlvbiBfaG4oZSx0LG4pe3JldHVybiBuP3QhPTA6dCE9ZS0xfWZ1bmN0aW9uIE9udChlLHQsbil7ZS5hPXReMTUwMixlLmI9bl5oaGV9ZnVuY3Rpb24gQWhuKGUsdCxuKXtyZXR1cm4gZS5hPXQsZS5iPW4sZX1mdW5jdGlvbiBtZChlLHQpe3JldHVybiBlLmEqPXQsZS5iKj10LGV9ZnVuY3Rpb24gdnQoZSx0KXtyZXR1cm4gJG4oZS5jLHQpLCEwfWZ1bmN0aW9uIFJfKGUsdCxuKXtyZXR1cm4gVHMoZS5nLHQsbiksbn1mdW5jdGlvbiBZcyhlLHQsbil7Rk8uY2FsbCh0aGlzLGUsdCxuKX1mdW5jdGlvbiBCcShlLHQsbil7WXMuY2FsbCh0aGlzLGUsdCxuKX1mdW5jdGlvbiB5eWUoZSx0LG4pe0pxLmNhbGwodGhpcyxlLHQsbil9ZnVuY3Rpb24gTm50KGUsdCxuKXtKcS5jYWxsKHRoaXMsZSx0LG4pfWZ1bmN0aW9uIFBudChlLHQsbil7eXllLmNhbGwodGhpcyxlLHQsbil9ZnVuY3Rpb24gbWwoZSx0LG4pe1lzLmNhbGwodGhpcyxlLHQsbil9ZnVuY3Rpb24gQm50KGUsdCxuKXtCcS5jYWxsKHRoaXMsZSx0LG4pfWZ1bmN0aW9uIHh5ZShlLHQsbil7Rk8uY2FsbCh0aGlzLGUsdCxuKX1mdW5jdGlvbiAkNShlLHQsbil7Rk8uY2FsbCh0aGlzLGUsdCxuKX1mdW5jdGlvbiBGbnQoZSx0LG4pe3h5ZS5jYWxsKHRoaXMsZSx0LG4pfWZ1bmN0aW9uIEZxKGUpe2Uuaj1XZShhX2UsZHQsMzE5LDAsMCwxKX1mdW5jdGlvbiB6NSgpe3RoaXMuYT1XZSh3YSxSbiwxLDgsNSwxKX1mdW5jdGlvbiBreWUoKXt0aGlzLkJifD0yNTYsdGhpcy5CYnw9NTEyfWZ1bmN0aW9uIG9yKGUpe3RoaXMuaT1lLHRoaXMuZj10aGlzLmkuan1mdW5jdGlvbiBjYihlKXt0aGlzLmM9ZSx0aGlzLmE9dGhpcy5jLmF9ZnVuY3Rpb24gcTUoZSx0KXt0aGlzLmE9ZSxZei5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gRXllKGUsdCl7cmV0dXJuIFY0bihlLG5ldyB0Yix0KS5hfWZ1bmN0aW9uIFR5ZShlKXtpZighZSl0aHJvdyB1ZShuZXcgWUkpfWZ1bmN0aW9uIEN5ZShlKXtpZighZSl0aHJvdyB1ZShuZXcgcGwpfWZ1bmN0aW9uIFN5ZSgpe1N5ZT1VLFN5ZSgpLEw2dD1uZXcgbG59ZnVuY3Rpb24gUm50KCl7Um50PVUsdXNlKCksZUF0PW5ldyBken1mdW5jdGlvbiBPaygpe09rPVUsYl9lPW5ldyBLaWUobnVsbCl9ZnVuY3Rpb24gTGhuKGUpe1VPKGUsQzR0KSxBVShlLEtEbihlKSl9ZnVuY3Rpb24gam50KGUpe2UuYT1sKEtuKGUuYi5hLDQpLDEyOSl9ZnVuY3Rpb24gJG50KGUpe2UuYT1sKEtuKGUuYi5hLDQpLDEyOSl9ZnVuY3Rpb24gem50KGUpe2UuYi5RYigpLC0tZS5kLmYuZCxsSChlLmQpfWZ1bmN0aW9uIF95ZShlKXt0aGlzLmE9ZSxxZy5jYWxsKHRoaXMsZS5kKX1mdW5jdGlvbiBxbnQoZSx0KXt0aGlzLmE9ZSx0c2UuY2FsbCh0aGlzLHQpfWZ1bmN0aW9uIEhudChlLHQpe3RoaXMuYT1lLHRzZS5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gVm50KGUsdCl7dGhpcy5hPWUsdHNlLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBBeWUoZSx0KXt0aGlzLmE9dCx0c2UuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIFVudChlLHQpe3RoaXMuYT10LFRvZS5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gR250KGUsdCl7dGhpcy5hPWUsVG9lLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBLbnQoZSx0KXt0aGlzLmE9dCxYei5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gV250KGUsdCl7dGhpcy5hPXQsWHouY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIGRyKGUsdCl7cmV0dXJuIFhyKHQpLG5ldyBLbnQoZSx0KX1mdW5jdGlvbiBZbnQoZSx0KXtyZXR1cm4gbmV3IHlwdChlLmEsZS5iLHQpfWZ1bmN0aW9uIEx5ZShlLHQsbil7cmV0dXJuIGUuaW5kZXhPZih0LG4pfWZ1bmN0aW9uIFJxKGUsdCl7cmV0dXJuIGUubGFzdEluZGV4T2YodCl9ZnVuY3Rpb24gal8oZSl7cmV0dXJuIGU9PW51bGw/dWw6eGMoZSl9ZnVuY3Rpb24gTWhuKGUpe3JldHVybiBlPT1udWxsP251bGw6ZS5uYW1lfWZ1bmN0aW9uIERobihlKXtyZXR1cm4gZS5sK2UubSpMeCtlLmgqWm19ZnVuY3Rpb24gSWhuKGUpe3JldHVybiBRSShlLmEpP05vdChlKTpudWxsfWZ1bmN0aW9uIEFmKGUpe05yLmNhbGwodGhpcywobnIoZSksZSkpfWZ1bmN0aW9uIFRoKGUpe05yLmNhbGwodGhpcywobnIoZSksZSkpfWZ1bmN0aW9uIFhudChlKXtway5jYWxsKHRoaXMsbChYcihlKSwzNCkpfWZ1bmN0aW9uIFFudChlKXtway5jYWxsKHRoaXMsbChYcihlKSwzNCkpfWZ1bmN0aW9uIG5hZShlKXt3ci5jYWxsKHRoaXMsbmV3IEk2ZShlKSl9ZnVuY3Rpb24ganEoZSl7JGEuY2FsbCh0aGlzLGUpLHRoaXMuYT1lfWZ1bmN0aW9uIE15ZShlKXt5by5jYWxsKHRoaXMsZSksdGhpcy5hPWV9ZnVuY3Rpb24gRHllKGUpe0VrLmNhbGwodGhpcyxlKSx0aGlzLmE9ZX1mdW5jdGlvbiBKbnQoKXtGcSh0aGlzKSxTSCh0aGlzKSx0aGlzLmplKCl9ZnVuY3Rpb24gWm50KGUpe3RoaXMuYT1lLFJzLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBmaChlKXtyZXR1cm4gbXIoZS5hIT1udWxsKSxlLmF9ZnVuY3Rpb24gZXJ0KGUsdCl7cmV0dXJuIHZ0KHQuYSxlLmEpLGUuYX1mdW5jdGlvbiB0cnQoZSx0KXtyZXR1cm4gdnQodC5iLGUuYSksZS5hfWZ1bmN0aW9uIGh3KGUsdCl7cmV0dXJuIHZ0KHQuYSxlLmEpLGUuYX1mdW5jdGlvbiBFTyhlLHQsbil7cmV0dXJuIGhjZShlLHQsdCxuKSxlfWZ1bmN0aW9uICRxKGUsdCl7cmV0dXJuKytlLmIsdnQoZS5hLHQpfWZ1bmN0aW9uIEl5ZShlLHQpe3JldHVybisrZS5iLGFsKGUuYSx0KX1mdW5jdGlvbiBPaG4oZSx0KXtyZXR1cm4gWWkoZS5jLmQsdC5jLmQpfWZ1bmN0aW9uIE5obihlLHQpe3JldHVybiBZaShlLmMuYyx0LmMuYyl9ZnVuY3Rpb24gUGhuKGUsdCl7cmV0dXJuIFlpKGUubi5hLHQubi5hKX1mdW5jdGlvbiBpbChlLHQpe3JldHVybiBsKCRpKGUuYix0KSwxNSl9ZnVuY3Rpb24gQmhuKGUsdCl7cmV0dXJuIGUubi5iPShucih0KSx0KX1mdW5jdGlvbiBGaG4oZSx0KXtyZXR1cm4gZS5uLmI9KG5yKHQpLHQpfWZ1bmN0aW9uIHZsKGUsdCl7cmV0dXJuISF0JiZlLmJbdC5nXT09dH1mdW5jdGlvbiAkXyhlKXtyZXR1cm4gTGMoZS5hKXx8TGMoZS5iKX1mdW5jdGlvbiBmdyhlKXtyZXR1cm4gZS4kSHx8KGUuJEg9KytiT24pfWZ1bmN0aW9uIFJobihlKXtyZXR1cm4gZS5hIT1udWxsP2UuYTpudWxsfWZ1bmN0aW9uIGpobihlLHQpe3JldHVybiBZaShlLmUuYix0LmUuYil9ZnVuY3Rpb24gJGhuKGUsdCl7cmV0dXJuIFlpKGUuZS5hLHQuZS5hKX1mdW5jdGlvbiB6aG4oZSx0LG4pe3JldHVybiBGY3QoZSx0LG4sZS5iKX1mdW5jdGlvbiBPeWUoZSx0LG4pe3JldHVybiBGY3QoZSx0LG4sZS5jKX1mdW5jdGlvbiBxaG4oZSl7cmV0dXJuIHUwKCksISFlJiYhZS5kYygpfWZ1bmN0aW9uIG5ydCgpe3BfKCksdGhpcy5iPW5ldyBkWWUodGhpcyl9ZnVuY3Rpb24genEoKXt6cT1VLHBLPW5ldyB2cyhiM3QsMCl9ZnVuY3Rpb24gSG4oKXtIbj1VLFBiPSExLFNUPSEwfWZ1bmN0aW9uIFlwKGUpe3ZhciB0O3Q9ZS5hLGUuYT1lLmIsZS5iPXR9ZnVuY3Rpb24gVE8oZSx0KXt3XygpLHRoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIHFxKGUsdCl7V3AoKSx0aGlzLmI9ZSx0aGlzLmM9dH1mdW5jdGlvbiByYWUoZSx0KXtJYWUoKSx0aGlzLmY9dCx0aGlzLmQ9ZX1mdW5jdGlvbiBOeWUoZSx0KXtrNmUodCxlKSx0aGlzLmQ9ZSx0aGlzLmM9dH1mdW5jdGlvbiBQeWUoZSx0KXtVOGUuY2FsbCh0aGlzLGUsdCxudWxsKX1mdW5jdGlvbiBycnQoZSx0LG4scil7cjVlLmNhbGwodGhpcyxlLHQsbixyKX1mdW5jdGlvbiBxOChlKXt0aGlzLmQ9ZSxvci5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gSDgoZSl7dGhpcy5jPWUsb3IuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIENPKGUpe3RoaXMuYz1lLHE4LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBIaG4oZSl7cmV0dXJuIG5ldyBUeSgzLGUpfWZ1bmN0aW9uIGVnKGUpe3JldHVybiBNaChlLFl5KSxuZXcgQnUoZSl9ZnVuY3Rpb24gaXJ0KGUpe3JldHVybiBYaygpLHBhcnNlSW50KGUpfHwtMX1mdW5jdGlvbiBWaG4oZSl7cmV0dXJuICR6KCksR3IoKGhvdCgpLG82dCksZSl9ZnVuY3Rpb24gTmsoZSx0LG4pe3JldHVybiBMeWUoZSxjbCh0KSxuKX1mdW5jdGlvbiBpYWUoZSx0KXtyZXR1cm4gbmV3IHJpdChlLGUuZ2MoKSx0KX1mdW5jdGlvbiBVaG4oZSx0KXtyZXR1cm4gT2FlKGUuYykuTWQoKS5YYih0KX1mdW5jdGlvbiBQayhlLHQsbil7dmFyIHI7cj1lLmZkKHQpLHIuUmIobil9ZnVuY3Rpb24gQnllKGUsdCxuKXtsKGhOKGUsdCksMjEpLkZjKG4pfWZ1bmN0aW9uIEdobihlLHQsbil7RmNlKGUuYSxuKSxvVShlLmEsdCl9ZnVuY3Rpb24gU08oZSl7RGUoZSwxNTgpJiZsKGUsMTU4KS5waSgpfWZ1bmN0aW9uIHNydChlKXtBNGUuY2FsbCh0aGlzLGUsbnVsbCxudWxsKX1mdW5jdGlvbiBzYWUoZSl7Y3koKSx0aGlzLmI9ZSx0aGlzLmE9ITB9ZnVuY3Rpb24gYXJ0KGUpe0p6KCksdGhpcy5iPWUsdGhpcy5hPSEwfWZ1bmN0aW9uIEJrKGUpe3JldHVybiBtcihlLmIhPTApLGUuYS5hLmN9ZnVuY3Rpb24gbzAoZSl7cmV0dXJuIG1yKGUuYiE9MCksZS5jLmIuY31mdW5jdGlvbiBLaG4oZSx0KXtyZXR1cm4gaGNlKGUsdCx0KzEsIiIpLGV9ZnVuY3Rpb24gbnMoZSx0KXtyZXR1cm4hIWUucSYmSHUoZS5xLHQpfWZ1bmN0aW9uIG9ydChlKXtyZXR1cm4gZS5iPWwoSTVlKGUuYSksNDQpfWZ1bmN0aW9uIFdobihlKXtyZXR1cm4gZS5mIT1udWxsP2UuZjoiIitlLmd9ZnVuY3Rpb24gYWFlKGUpe3JldHVybiBlLmYhPW51bGw/ZS5mOiIiK2UuZ31mdW5jdGlvbiBZaG4oZSx0KXtyZXR1cm4gZT4wP3QvKGUqZSk6dCoxMDB9ZnVuY3Rpb24gWGhuKGUsdCl7cmV0dXJuIGU+MD90KnQvZTp0KnQqMTAwfWZ1bmN0aW9uIGR5KGUsdCl7cmV0dXJuIGwoQjEoZS5hLHQpLDM0KX1mdW5jdGlvbiBRaG4oZSx0KXtyZXR1cm4gQ2IoKSx4bihlLHQuZSx0KX1mdW5jdGlvbiBKaG4oZSx0LG4pe3JldHVybiB0cSgpLG4uTWcoZSx0KX1mdW5jdGlvbiBaaG4oZSl7cmV0dXJuIHRwKCksZS5lLmErZS5mLmEvMn1mdW5jdGlvbiBlZm4oZSx0LG4pe3JldHVybiB0cCgpLG4uZS5hLWUqdH1mdW5jdGlvbiB0Zm4oZSl7cmV0dXJuIHRwKCksZS5lLmIrZS5mLmIvMn1mdW5jdGlvbiBuZm4oZSx0LG4pe3JldHVybiB0cCgpLG4uZS5iLWUqdH1mdW5jdGlvbiBjcnQoZSl7ZS5kPW5ldyBzcnQoZSksZS5lPW5ldyBQcn1mdW5jdGlvbiB1cnQoKXt0aGlzLmE9bmV3IEN3LHRoaXMuYj1uZXcgQ3d9ZnVuY3Rpb24gbHJ0KGUpe3RoaXMuYz1lLHRoaXMuYT0xLHRoaXMuYj0xfWZ1bmN0aW9uIGhydChlKXtNbGUoKSxTUWUodGhpcyksdGhpcy5GZihlKX1mdW5jdGlvbiByZm4oZSx0LG4pe1pIKCksZS5wZih0KSYmbi5DZChlKX1mdW5jdGlvbiBpZm4oZSx0LG4pe3JldHVybiB2dCh0LGsxdChlLG4pKX1mdW5jdGlvbiBkdyhlLHQsbil7cmV0dXJuIGUuYSs9dCxlLmIrPW4sZX1mdW5jdGlvbiBzZm4oZSx0LG4pe3JldHVybiBlLmEqPXQsZS5iKj1uLGV9ZnVuY3Rpb24gRnllKGUsdCl7cmV0dXJuIGUuYT10LmEsZS5iPXQuYixlfWZ1bmN0aW9uIEhxKGUpe3JldHVybiBlLmE9LWUuYSxlLmI9LWUuYixlfWZ1bmN0aW9uIHpfKGUsdCxuKXtyZXR1cm4gZS5hLT10LGUuYi09bixlfWZ1bmN0aW9uIGZydChlKXtvcy5jYWxsKHRoaXMpLGZBKHRoaXMsZSl9ZnVuY3Rpb24gZHJ0KCl7VXIuY2FsbCh0aGlzLCJHUk9XX1RSRUUiLDApfWZ1bmN0aW9uIGdydCgpe1VyLmNhbGwodGhpcywiUE9MWU9NSU5PIiwwKX1mdW5jdGlvbiBkaChlLHQsbil7eGwuY2FsbCh0aGlzLGUsdCxuLDIpfWZ1bmN0aW9uIGFmbihlLHQsbil7X0EoZHUoZS5hKSx0LElvdChuKSl9ZnVuY3Rpb24gcHJ0KGUsdCl7d18oKSxUTy5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBSeWUoZSx0KXtXcCgpLHFxLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIGJydChlLHQpe1dwKCksUnllLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIG1ydChlLHQpe1dwKCkscXEuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gb2ZuKGUsdCl7cmV0dXJuIGUuYy5GYyhsKHQsMTM2KSl9ZnVuY3Rpb24gY2ZuKGUsdCxuKXtfQShYbChlLmEpLHQsT290KG4pKX1mdW5jdGlvbiB2cnQoZSl7dGhpcy5jPWUsVXUoZSwwKSxHdShlLDApfWZ1bmN0aW9uIG9hZShlLHQpe0poKCksY0guY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gd3J0KGUsdCl7SmgoKSxvYWUuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24ganllKGUsdCl7SmgoKSxvYWUuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gJHllKGUsdCl7SmgoKSxjSC5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiB5cnQoZSx0KXtKaCgpLGp5ZS5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiB4cnQoZSx0KXtKaCgpLCR5ZS5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBrcnQoZSx0KXtKaCgpLGNILmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIHVmbihlLHQsbil7cmV0dXJuIHQuemwoZS5lLGUuYyxuKX1mdW5jdGlvbiBsZm4oZSx0LG4pe3JldHVybiB0LkFsKGUuZSxlLmMsbil9ZnVuY3Rpb24genllKGUsdCxuKXtyZXR1cm4gVlUobE4oZSx0KSxuKX1mdW5jdGlvbiBjYWUoZSx0KXtyZXR1cm4geWIoZS5lLGwodCw1NCkpfWZ1bmN0aW9uIGhmbihlKXtyZXR1cm4gZT09bnVsbD9udWxsOkJEbihlKX1mdW5jdGlvbiBmZm4oZSl7cmV0dXJuIGU9PW51bGw/bnVsbDpMOW4oZSl9ZnVuY3Rpb24gZGZuKGUpe3JldHVybiBlPT1udWxsP251bGw6eGMoZSl9ZnVuY3Rpb24gZ2ZuKGUpe3JldHVybiBlPT1udWxsP251bGw6eGMoZSl9ZnVuY3Rpb24gQnQoZSl7cmV0dXJuIFZfKGU9PW51bGx8fGh5KGUpKSxlfWZ1bmN0aW9uIEdlKGUpe3JldHVybiBWXyhlPT1udWxsfHxmeShlKSksZX1mdW5jdGlvbiBlaShlKXtyZXR1cm4gVl8oZT09bnVsbHx8SWEoZSkpLGV9ZnVuY3Rpb24gR2coZSl7ZS5vPT1udWxsJiZvVG4oZSl9ZnVuY3Rpb24gcXllKGUpe2lmKCFlKXRocm93IHVlKG5ldyBZSSl9ZnVuY3Rpb24gcGZuKGUpe2lmKCFlKXRocm93IHVlKG5ldyBSaWUpfWZ1bmN0aW9uIG1yKGUpe2lmKCFlKXRocm93IHVlKG5ldyBfYyl9ZnVuY3Rpb24gZ3koZSl7aWYoIWUpdGhyb3cgdWUobmV3IHBsKX1mdW5jdGlvbiBFcnQoZSl7aWYoIWUpdGhyb3cgdWUobmV3IFhoKX1mdW5jdGlvbiBGaygpe0ZrPVUsZkY9bmV3IGlKZSxuZXcgc0plfWZ1bmN0aW9uIEg1KCl7SDU9VSxZNj1uZXcgVWkoInJvb3QiKX1mdW5jdGlvbiBIeWUoKXtzZnQuY2FsbCh0aGlzKSx0aGlzLkJifD1Jb31mdW5jdGlvbiBiZm4oZSx0KXt0aGlzLmQ9ZSxNcih0aGlzKSx0aGlzLmI9dH1mdW5jdGlvbiBWeWUoZSx0KXtQb2UuY2FsbCh0aGlzLGUpLHRoaXMuYT10fWZ1bmN0aW9uIFV5ZShlLHQpe1BvZS5jYWxsKHRoaXMsZSksdGhpcy5hPXR9ZnVuY3Rpb24gR3llKGUsdCxuKXtZSC5jYWxsKHRoaXMsZSx0LG4sbnVsbCl9ZnVuY3Rpb24gVHJ0KGUsdCxuKXtZSC5jYWxsKHRoaXMsZSx0LG4sbnVsbCl9ZnVuY3Rpb24gX08oZSx0KXt0aGlzLmM9ZSxMay5jYWxsKHRoaXMsZSx0KX1mdW5jdGlvbiBxXyhlLHQpe3RoaXMuYT1lLF9PLmNhbGwodGhpcyxlLHQpfWZ1bmN0aW9uIEt5ZShlKXt0aGlzLnE9bmV3IGIuRGF0ZShGbShlKSl9ZnVuY3Rpb24gQ3J0KGUpe3JldHVybiBlPjg/MDplKzF9ZnVuY3Rpb24gU3J0KGUsdCl7RzF8fHZ0KGUuYSx0KX1mdW5jdGlvbiBtZm4oZSx0KXtyZXR1cm4gc08oKSxiRSh0LmQuaSxlKX1mdW5jdGlvbiB2Zm4oZSx0KXtyZXR1cm4gbHgoKSxuZXcgbm10KHQsZSl9ZnVuY3Rpb24gd2ZuKGUsdCxuKXtyZXR1cm4gZS5OZSh0LG4pPD0wP246dH1mdW5jdGlvbiB5Zm4oZSx0LG4pe3JldHVybiBlLk5lKHQsbik8PTA/dDpufWZ1bmN0aW9uIHhmbihlLHQpe3JldHVybiBsKEIxKGUuYix0KSwxNDMpfWZ1bmN0aW9uIGtmbihlLHQpe3JldHVybiBsKEIxKGUuYyx0KSwyMzMpfWZ1bmN0aW9uIHVhZShlKXtyZXR1cm4gbChqdChlLmEsZS5iKSwyOTQpfWZ1bmN0aW9uIF9ydChlKXtyZXR1cm4gbmV3IGx0KGUuYyxlLmQrZS5hKX1mdW5jdGlvbiBBcnQoZSl7cmV0dXJuIG5yKGUpLGU/MTIzMToxMjM3fWZ1bmN0aW9uIExydChlKXtyZXR1cm4gU2goKSxvbnQobChlLDIwMykpfWZ1bmN0aW9uIHB5KCl7cHk9VSxxX2U9dW4oKG1oKCksQ3YpKX1mdW5jdGlvbiBFZm4oZSx0KXt0LmE/X0VuKGUsdCk6dGFlKGUuYSx0LmIpfWZ1bmN0aW9uIEFPKGUsdCxuKXsrK2UuaixlLnRqKCksTm9lKGUsdCxuKX1mdW5jdGlvbiBNcnQoZSx0LG4peysrZS5qLGUucWoodCxlLlppKHQsbikpfWZ1bmN0aW9uIERydChlLHQsbil7dmFyIHI7cj1lLmZkKHQpLHIuUmIobil9ZnVuY3Rpb24gV3llKGUsdCxuKXtyZXR1cm4gbj1OaChlLHQsNixuKSxufWZ1bmN0aW9uIFl5ZShlLHQsbil7cmV0dXJuIG49TmgoZSx0LDMsbiksbn1mdW5jdGlvbiBYeWUoZSx0LG4pe3JldHVybiBuPU5oKGUsdCw5LG4pLG59ZnVuY3Rpb24gdmQoZSx0KXtyZXR1cm4gVU8odCx5RWUpLGUuZj10LGV9ZnVuY3Rpb24gUXllKGUsdCl7cmV0dXJuKHQmSWkpJWUuZC5sZW5ndGh9ZnVuY3Rpb24gSXJ0KGUsdCxuKXtyZXR1cm4gTWtlKGUuYyxlLmIsdCxuKX1mdW5jdGlvbiBPcnQoZSx0KXt0aGlzLmM9ZSxMdy5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gTnJ0KGUsdCl7dGhpcy5hPWUsdlFlLmNhbGwodGhpcyx0KX1mdW5jdGlvbiBMTyhlLHQpe3RoaXMuYT1lLHZRZS5jYWxsKHRoaXMsdCl9ZnVuY3Rpb24gdnMoZSx0KXtVaS5jYWxsKHRoaXMsZSksdGhpcy5hPXR9ZnVuY3Rpb24gSnllKGUsdCl7eHdlLmNhbGwodGhpcyxlKSx0aGlzLmE9dH1mdW5jdGlvbiBsYWUoZSx0KXt4d2UuY2FsbCh0aGlzLGUpLHRoaXMuYT10fWZ1bmN0aW9uIFRmbihlKXtJOGUuY2FsbCh0aGlzLDAsMCksdGhpcy5mPWV9ZnVuY3Rpb24gUHJ0KGUsdCxuKXtyZXR1cm4gZS5hKz1JZih0LDAsbiksZX1mdW5jdGlvbiBNTyhlKXtyZXR1cm4hZS5hJiYoZS5hPW5ldyBnZSksZS5hfWZ1bmN0aW9uIFp5ZShlLHQpe3ZhciBuO3JldHVybiBuPWUuZSxlLmU9dCxufWZ1bmN0aW9uIGU0ZShlLHQpe3ZhciBuO3JldHVybiBuPXQsISFlLkZlKG4pfWZ1bmN0aW9uIENmbihlLHQpe3JldHVybiBIbigpLGU9PXQ/MDplPzE6LTF9ZnVuY3Rpb24gYnkoZSx0KXtlLmEuYmQoZS5iLHQpLCsrZS5iLGUuYz0tMX1mdW5jdGlvbiBETyhlKXtlLmI/RE8oZS5iKTplLmYuYy56YyhlLmUsZS5kKX1mdW5jdGlvbiBCcnQoZSl7TmwoZS5lKSxlLmQuYj1lLmQsZS5kLmE9ZS5kfWZ1bmN0aW9uIFNmbihlLHQsbil7QW0oKSxFaWUoZSx0LlZlKGUuYSxuKSl9ZnVuY3Rpb24gdDRlKGUsdCxuKXtyZXR1cm4gUTgoZSxsKHQsMjIpLG4pfWZ1bmN0aW9uIGMwKGUsdCl7cmV0dXJuIFZ6KG5ldyBBcnJheSh0KSxlKX1mdW5jdGlvbiBfZm4oZSl7cmV0dXJuIFlyKHViKGUsMzIpKV5ZcihlKX1mdW5jdGlvbiBoYWUoZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZSl9ZnVuY3Rpb24gQWZuKGUpe3JldHVybiBlPT1udWxsP251bGw6ZS5tZXNzYWdlfWZ1bmN0aW9uIExmbihlLHQsbil7cmV0dXJuIGUuYXBwbHkodCxuKX1mdW5jdGlvbiBNZm4oZSx0KXt2YXIgbjtuPWVbbGhlXSxuLmNhbGwoZSx0KX1mdW5jdGlvbiBEZm4oZSx0KXt2YXIgbjtuPWVbbGhlXSxuLmNhbGwoZSx0KX1mdW5jdGlvbiBJZm4oZSx0KXtyZXR1cm4gc08oKSwhYkUodC5kLmksZSl9ZnVuY3Rpb24gbjRlKGUsdCxuLHIpe3NILmNhbGwodGhpcyxlLHQsbixyKX1mdW5jdGlvbiBGcnQoKXtWcS5jYWxsKHRoaXMpLHRoaXMuYT1uZXcgcWF9ZnVuY3Rpb24gcjRlKCl7dGhpcy5uPW5ldyBxYSx0aGlzLm89bmV3IHFhfWZ1bmN0aW9uIFJydCgpe3RoaXMuYj1uZXcgcWEsdGhpcy5jPW5ldyBidH1mdW5jdGlvbiBqcnQoKXt0aGlzLmE9bmV3IGJ0LHRoaXMuYj1uZXcgYnR9ZnVuY3Rpb24gJHJ0KCl7dGhpcy5hPW5ldyBibSx0aGlzLmI9bmV3IEJRZX1mdW5jdGlvbiBpNGUoKXt0aGlzLmI9bmV3IGUyLHRoaXMuYT1uZXcgZTJ9ZnVuY3Rpb24genJ0KCl7dGhpcy5iPW5ldyBLcyx0aGlzLmE9bmV3IEtzfWZ1bmN0aW9uIHFydCgpe3RoaXMuYj1uZXcgUHIsdGhpcy5hPW5ldyBQcn1mdW5jdGlvbiBIcnQoKXt0aGlzLmI9bmV3IGRaZSx0aGlzLmE9bmV3IENTfWZ1bmN0aW9uIFZydCgpe3RoaXMuYT1uZXcgV3JlLHRoaXMuYj1uZXcgQWVlfWZ1bmN0aW9uIFVydCgpe3RoaXMuYT1uZXcgYnQsdGhpcy5kPW5ldyBidH1mdW5jdGlvbiBWcSgpe3RoaXMubj1uZXcgQTgsdGhpcy5pPW5ldyAkOH1mdW5jdGlvbiBHcnQoZSl7dGhpcy5hPShNaChlLFl5KSxuZXcgQnUoZSkpfWZ1bmN0aW9uIEtydChlKXt0aGlzLmE9KE1oKGUsWXkpLG5ldyBCdShlKSl9ZnVuY3Rpb24gT2ZuKGUpe3JldHVybiBlPDEwMD9udWxsOm5ldyBuYihlKX1mdW5jdGlvbiBOZm4oZSx0KXtyZXR1cm4gZS5uLmE9KG5yKHQpLHQrMTApfWZ1bmN0aW9uIFBmbihlLHQpe3JldHVybiBlLm4uYT0obnIodCksdCsxMCl9ZnVuY3Rpb24gQmZuKGUsdCl7cmV0dXJuIHQ9PWV8fGpFKF9VKHQpLGUpfWZ1bmN0aW9uIFdydChlLHQpe3JldHVybiBraShlLmEsdCwiIik9PW51bGx9ZnVuY3Rpb24gRmZuKGUsdCl7dmFyIG47cmV0dXJuIG49dC5xaShlLmEpLG59ZnVuY3Rpb24gT2koZSx0KXtyZXR1cm4gZS5hKz10LmEsZS5iKz10LmIsZX1mdW5jdGlvbiBtYShlLHQpe3JldHVybiBlLmEtPXQuYSxlLmItPXQuYixlfWZ1bmN0aW9uIFJmbihlKXtyZXR1cm4gYXkoZS5qLmMsMCksZS5hPS0xLGV9ZnVuY3Rpb24gczRlKGUsdCxuKXtyZXR1cm4gbj1OaChlLHQsMTEsbiksbn1mdW5jdGlvbiBqZm4oZSx0LG4pe24hPW51bGwmJndWKHQscHVlKGUsbikpfWZ1bmN0aW9uICRmbihlLHQsbil7biE9bnVsbCYmeVYodCxwdWUoZSxuKSl9ZnVuY3Rpb24gVjgoZSx0LG4scil7bnQuY2FsbCh0aGlzLGUsdCxuLHIpfWZ1bmN0aW9uIGE0ZShlLHQsbixyKXtudC5jYWxsKHRoaXMsZSx0LG4scil9ZnVuY3Rpb24gWXJ0KGUsdCxuLHIpe2E0ZS5jYWxsKHRoaXMsZSx0LG4scil9ZnVuY3Rpb24gWHJ0KGUsdCxuLHIpe3BILmNhbGwodGhpcyxlLHQsbixyKX1mdW5jdGlvbiBmYWUoZSx0LG4scil7cEguY2FsbCh0aGlzLGUsdCxuLHIpfWZ1bmN0aW9uIG80ZShlLHQsbixyKXtwSC5jYWxsKHRoaXMsZSx0LG4scil9ZnVuY3Rpb24gUXJ0KGUsdCxuLHIpe2ZhZS5jYWxsKHRoaXMsZSx0LG4scil9ZnVuY3Rpb24gYzRlKGUsdCxuLHIpe2ZhZS5jYWxsKHRoaXMsZSx0LG4scil9ZnVuY3Rpb24gTG4oZSx0LG4scil7bzRlLmNhbGwodGhpcyxlLHQsbixyKX1mdW5jdGlvbiBKcnQoZSx0LG4scil7YzRlLmNhbGwodGhpcyxlLHQsbixyKX1mdW5jdGlvbiBacnQoZSx0LG4scil7YTVlLmNhbGwodGhpcyxlLHQsbixyKX1mdW5jdGlvbiBteShlLHQpe3RjLmNhbGwodGhpcyxDTCtlK2F2K3QpfWZ1bmN0aW9uIHU0ZShlLHQpe3JldHVybiBlLmprKCkud2koKS5yaShlLHQpfWZ1bmN0aW9uIGw0ZShlLHQpe3JldHVybiBlLmprKCkud2koKS50aShlLHQpfWZ1bmN0aW9uIGVpdChlLHQpe3JldHVybiBucihlKSxxZShlKT09PXFlKHQpfWZ1bmN0aW9uIHZuKGUsdCl7cmV0dXJuIG5yKGUpLHFlKGUpPT09cWUodCl9ZnVuY3Rpb24gemZuKGUsdCl7cmV0dXJuIGUuYi5CZChuZXcga2V0KGUsdCkpfWZ1bmN0aW9uIHFmbihlLHQpe3JldHVybiBlLmIuQmQobmV3IEVldChlLHQpKX1mdW5jdGlvbiB0aXQoZSx0KXtyZXR1cm4gZS5iLkJkKG5ldyBUZXQoZSx0KSl9ZnVuY3Rpb24gSGZuKGUsdCl7cmV0dXJuIGUuZT1sKGUuZC5LYih0KSwxNTkpfWZ1bmN0aW9uIGg0ZShlLHQsbil7cmV0dXJuIGUubGFzdEluZGV4T2YodCxuKX1mdW5jdGlvbiBWZm4oZSx0LG4pe3JldHVybiBZaShlW3QuYV0sZVtuLmFdKX1mdW5jdGlvbiBVZm4oZSx0KXtyZXR1cm4gcnQodCwoTnQoKSxUQiksZSl9ZnVuY3Rpb24gR2ZuKGUsdCl7cmV0dXJuIHJ1KHQuYS5kLnAsZS5hLmQucCl9ZnVuY3Rpb24gS2ZuKGUsdCl7cmV0dXJuIHJ1KGUuYS5kLnAsdC5hLmQucCl9ZnVuY3Rpb24gV2ZuKGUsdCl7cmV0dXJuIFlpKGUuYy1lLnMsdC5jLXQucyl9ZnVuY3Rpb24gWWZuKGUsdCl7cmV0dXJuIFlpKGUuYi5lLmEsdC5iLmUuYSl9ZnVuY3Rpb24gWGZuKGUsdCl7cmV0dXJuIFlpKGUuYy5lLmEsdC5jLmUuYSl9ZnVuY3Rpb24gbml0KGUpe3JldHVybiBlLmM/Z2MoZS5jLmEsZSwwKTotMX1mdW5jdGlvbiBVOChlKXtyZXR1cm4gZT09VHZ8fGU9PVRnfHxlPT1NdX1mdW5jdGlvbiBmNGUoZSx0KXt0aGlzLmM9ZSxqYWUuY2FsbCh0aGlzLGUsdCl9ZnVuY3Rpb24gcml0KGUsdCxuKXt0aGlzLmE9ZSxOeWUuY2FsbCh0aGlzLHQsbil9ZnVuY3Rpb24gaWl0KGUpe3RoaXMuYz1lLERxLmNhbGwodGhpcyxFUCwwKX1mdW5jdGlvbiBzaXQoZSx0LG4pe3RoaXMuYz10LHRoaXMuYj1uLHRoaXMuYT1lfWZ1bmN0aW9uIElPKGUpe2prKCksdGhpcy5kPWUsdGhpcy5hPW5ldyB6NX1mdW5jdGlvbiBhaXQoZSl7d2QoKSx0aGlzLmE9KENuKCksbmV3IEVrKGUpKX1mdW5jdGlvbiBRZm4oZSx0KXtVZyhlLmYpP1pFbihlLHQpOk14bihlLHQpfWZ1bmN0aW9uIG9pdChlLHQpe2xkbi5jYWxsKHRoaXMsZSxlLmxlbmd0aCx0KX1mdW5jdGlvbiBKZm4oZSx0KXtHMXx8dCYmKGUuZD10KX1mdW5jdGlvbiBjaXQoZSx0KXtyZXR1cm4gRGUodCwxNSkmJkJidChlLmMsdCl9ZnVuY3Rpb24gWmZuKGUsdCxuKXtyZXR1cm4gbChlLmMsNzEpLldrKHQsbil9ZnVuY3Rpb24gVXEoZSx0LG4pe3JldHVybiBsKGUuYyw3MSkuWGsodCxuKX1mdW5jdGlvbiBlMG4oZSx0LG4pe3JldHVybiB1Zm4oZSxsKHQsMzQzKSxuKX1mdW5jdGlvbiBkNGUoZSx0LG4pe3JldHVybiBsZm4oZSxsKHQsMzQzKSxuKX1mdW5jdGlvbiB0MG4oZSx0LG4pe3JldHVybiBMZ3QoZSxsKHQsMzQzKSxuKX1mdW5jdGlvbiB1aXQoZSx0LG4pe3JldHVybiBIeG4oZSxsKHQsMzQzKSxuKX1mdW5jdGlvbiBIXyhlLHQpe3JldHVybiB0PT1udWxsP251bGw6T3koZS5iLHQpfWZ1bmN0aW9uIGc0ZShlKXtyZXR1cm4gZnkoZSk/KG5yKGUpLGUpOmUudWUoKX1mdW5jdGlvbiBHcShlKXtyZXR1cm4haXNOYU4oZSkmJiFpc0Zpbml0ZShlKX1mdW5jdGlvbiBkYWUoZSl7a250KHRoaXMpLENoKHRoaXMpLEthKHRoaXMsZSl9ZnVuY3Rpb24gT2woZSl7WXNlKHRoaXMpLE00ZSh0aGlzLmMsMCxlLlBjKCkpfWZ1bmN0aW9uIFpoKGUsdCxuKXt0aGlzLmE9ZSx0aGlzLmI9dCx0aGlzLmM9bn1mdW5jdGlvbiBsaXQoZSx0LG4pe3RoaXMuYT1lLHRoaXMuYj10LHRoaXMuYz1ufWZ1bmN0aW9uIGhpdChlLHQsbil7dGhpcy5kPWUsdGhpcy5iPW4sdGhpcy5hPXR9ZnVuY3Rpb24gZml0KGUpe3RoaXMuYT1lLFZnKCksWmMoRGF0ZS5ub3coKSl9ZnVuY3Rpb24gZGl0KGUpe3BoKGUuYSksTDZlKGUuYyxlLmIpLGUuYj1udWxsfWZ1bmN0aW9uIGdhZSgpe2dhZT1VLHBfZT1uZXcgRXQsXzZ0PW5ldyBHdH1mdW5jdGlvbiBnaXQoKXtnaXQ9VSxNX3Q9V2Uod2EsUm4sMSwwLDUsMSl9ZnVuY3Rpb24gcGl0KCl7cGl0PVUsV190PVdlKHdhLFJuLDEsMCw1LDEpfWZ1bmN0aW9uIHA0ZSgpe3A0ZT1VLFlfdD1XZSh3YSxSbiwxLDAsNSwxKX1mdW5jdGlvbiB3ZCgpe3dkPVUsbmV3IFR3ZSgoQ24oKSxDbigpLF9vKSl9ZnVuY3Rpb24gbjBuKGUpe3JldHVybiByRSgpLEdyKCh4bHQoKSxNNnQpLGUpfWZ1bmN0aW9uIHIwbihlKXtyZXR1cm4gRmwoKSxHcigoaGx0KCksQjZ0KSxlKX1mdW5jdGlvbiBpMG4oZSl7cmV0dXJuIFpWKCksR3IoKFhjdCgpLHE2dCksZSl9ZnVuY3Rpb24gczBuKGUpe3JldHVybiBhVigpLEdyKChRY3QoKSxINnQpLGUpfWZ1bmN0aW9uIGEwbihlKXtyZXR1cm4gUFUoKSxHcigoWGZ0KCksVjZ0KSxlKX1mdW5jdGlvbiBvMG4oZSl7cmV0dXJuIHQxKCksR3IoKHVsdCgpLEs2dCksZSl9ZnVuY3Rpb24gYzBuKGUpe3JldHVybiBCbCgpLEdyKChjbHQoKSxZNnQpLGUpfWZ1bmN0aW9uIHUwbihlKXtyZXR1cm4gb2woKSxHcigobGx0KCksUTZ0KSxlKX1mdW5jdGlvbiBsMG4oZSl7cmV0dXJuIFlVKCksR3IoKEd0dCgpLHk3dCksZSl9ZnVuY3Rpb24gaDBuKGUpe3JldHVybiBQdygpLEdyKChFbHQoKSxrN3QpLGUpfWZ1bmN0aW9uIGYwbihlKXtyZXR1cm4gYngoKSxHcigoQ2x0KCksVDd0KSxlKX1mdW5jdGlvbiBkMG4oZSl7cmV0dXJuIE5BKCksR3IoKFRsdCgpLF83dCksZSl9ZnVuY3Rpb24gZzBuKGUpe3JldHVybiBaeigpLEdyKChrY3QoKSxBN3QpLGUpfWZ1bmN0aW9uIHAwbihlKXtyZXR1cm4gb1YoKSxHcigoSmN0KCksVTd0KSxlKX1mdW5jdGlvbiBiMG4oZSl7cmV0dXJuIGxBKCksR3IoKGZsdCgpLG04dCksZSl9ZnVuY3Rpb24gbTBuKGUpe3JldHVybiB1bygpLEdyKChhaHQoKSx4OHQpLGUpfWZ1bmN0aW9uIHYwbihlKXtyZXR1cm4gd0UoKSxHcigoX2x0KCksUzh0KSxlKX1mdW5jdGlvbiB3MG4oZSl7cmV0dXJuIEttKCksR3IoKFNsdCgpLEk4dCksZSl9ZnVuY3Rpb24gYjRlKGUsdCl7aWYoIWUpdGhyb3cgdWUobmV3IFluKHQpKX1mdW5jdGlvbiBSayhlKXtpZighZSl0aHJvdyB1ZShuZXcgbmMoSmtlKSl9ZnVuY3Rpb24gcGFlKGUsdCl7aWYoZSE9dCl0aHJvdyB1ZShuZXcgWGgpfWZ1bmN0aW9uIGJpdChlLHQsbil7dGhpcy5hPWUsdGhpcy5iPXQsdGhpcy5jPW59ZnVuY3Rpb24gbTRlKGUsdCxuKXt0aGlzLmE9ZSx0aGlzLmI9dCx0aGlzLmM9bn1mdW5jdGlvbiBtaXQoZSx0LG4pe3RoaXMuYT1lLHRoaXMuYj10LHRoaXMuYz1ufWZ1bmN0aW9uIEtxKGUsdCxuKXt0aGlzLmI9ZSx0aGlzLmE9dCx0aGlzLmM9bn1mdW5jdGlvbiB2NGUoZSx0LG4pe3RoaXMuYj1lLHRoaXMuYz10LHRoaXMuYT1ufWZ1bmN0aW9uIHc0ZShlLHQsbil7dGhpcy5hPWUsdGhpcy5iPXQsdGhpcy5jPW59ZnVuY3Rpb24gV3EoZSx0LG4pe3RoaXMuZT10LHRoaXMuYj1lLHRoaXMuZD1ufWZ1bmN0aW9uIHZpdChlLHQsbil7dGhpcy5iPWUsdGhpcy5hPXQsdGhpcy5jPW59ZnVuY3Rpb24geTBuKGUsdCxuKXtyZXR1cm4gQW0oKSxlLmEuWWQodCxuKSx0fWZ1bmN0aW9uIGJhZShlKXt2YXIgdDtyZXR1cm4gdD1uZXcgTWwsdC5lPWUsdH1mdW5jdGlvbiB5NGUoZSl7dmFyIHQ7cmV0dXJuIHQ9bmV3IHpRZSx0LmI9ZSx0fWZ1bmN0aW9uIE9PKCl7T089VSxDSz1uZXcgcFosU0s9bmV3IGRqfWZ1bmN0aW9uIFlxKCl7WXE9VSxLOHQ9bmV3IFNaLEc4dD1uZXcgYlN9ZnVuY3Rpb24gdTAoKXt1MD1VLEo4dD1uZXcgaWVlLFo4dD1uZXcgc2VlfWZ1bmN0aW9uIHgwbihlKXtyZXR1cm4gT3coKSxHcigoSHV0KCksdXh0KSxlKX1mdW5jdGlvbiBrMG4oZSl7cmV0dXJuIHZvKCksR3IoKEt0dCgpLHE4dCksZSl9ZnVuY3Rpb24gRTBuKGUpe3JldHVybiBJVigpLEdyKChMbHQoKSxVOHQpLGUpfWZ1bmN0aW9uIFQwbihlKXtyZXR1cm4gUjEoKSxHcigoQWx0KCksbnh0KSxlKX1mdW5jdGlvbiBDMG4oZSl7cmV0dXJuIFJ5KCksR3IoKG9odCgpLGl4dCksZSl9ZnVuY3Rpb24gUzBuKGUpe3JldHVybiBPVSgpLEdyKChQZnQoKSxseHQpLGUpfWZ1bmN0aW9uIF8wbihlKXtyZXR1cm4geXgoKSxHcigoSWh0KCksaHh0KSxlKX1mdW5jdGlvbiBBMG4oZSl7cmV0dXJuIEpIKCksR3IoKHN1dCgpLGZ4dCksZSl9ZnVuY3Rpb24gTDBuKGUpe3JldHVybiBkQSgpLEdyKCh6dXQoKSxkeHQpLGUpfWZ1bmN0aW9uIE0wbihlKXtyZXR1cm4gcFYoKSxHcigocXV0KCksZ3h0KSxlKX1mdW5jdGlvbiBEMG4oZSl7cmV0dXJuIGwyKCksR3IoKGNodCgpLHB4dCksZSl9ZnVuY3Rpb24gSTBuKGUpe3JldHVybiBwTigpLEdyKCh0dXQoKSxieHQpLGUpfWZ1bmN0aW9uIE8wbihlKXtyZXR1cm4gekUoKSxHcigoUGh0KCksa3h0KSxlKX1mdW5jdGlvbiBOMG4oZSl7cmV0dXJuIEhvKCksR3IoKGYwdCgpLEV4dCksZSl9ZnVuY3Rpb24gUDBuKGUpe3JldHVybiB2RSgpLEdyKChVdXQoKSxUeHQpLGUpfWZ1bmN0aW9uIEIwbihlKXtyZXR1cm4gZXAoKSxHcigoR3V0KCksU3h0KSxlKX1mdW5jdGlvbiBGMG4oZSl7cmV0dXJuIHpIKCksR3IoKGV1dCgpLF94dCksZSl9ZnVuY3Rpb24gUjBuKGUpe3JldHVybiBXTigpLEdyKChOaHQoKSx4eHQpLGUpfWZ1bmN0aW9uIGowbihlKXtyZXR1cm4gVm0oKSxHcigoVnV0KCksdnh0KSxlKX1mdW5jdGlvbiAkMG4oZSl7cmV0dXJuIHlVKCksR3IoKE9odCgpLHd4dCksZSl9ZnVuY3Rpb24gejBuKGUpe3JldHVybiBjTigpLEdyKChudXQoKSx5eHQpLGUpfWZ1bmN0aW9uIHEwbihlKXtyZXR1cm4gaGYoKSxHcigobGh0KCksQXh0KSxlKX1mdW5jdGlvbiBIMG4oZSl7cmV0dXJuIHAyKCksR3IoKEtmdCgpLEprdCksZSl9ZnVuY3Rpb24gVjBuKGUpe3JldHVybiBFQSgpLEdyKChLdXQoKSxaa3QpLGUpfWZ1bmN0aW9uIFUwbihlKXtyZXR1cm4gQnkoKSxHcigoTWx0KCksZUV0KSxlKX1mdW5jdGlvbiBHMG4oZSl7cmV0dXJuIE9BKCksR3IoKHVodCgpLHRFdCksZSl9ZnVuY3Rpb24gSzBuKGUpe3JldHVybiBOZigpLEdyKChkMHQoKSxuRXQpLGUpfWZ1bmN0aW9uIFcwbihlKXtyZXR1cm4gRWQoKSxHcigoRGx0KCksckV0KSxlKX1mdW5jdGlvbiBZMG4oZSl7cmV0dXJuIGROKCksR3IoKHJ1dCgpLGlFdCksZSl9ZnVuY3Rpb24gWDBuKGUpe3JldHVybiBxbygpLEdyKChYdXQoKSxhRXQpLGUpfWZ1bmN0aW9uIFEwbihlKXtyZXR1cm4gTFYoKSxHcigoV3V0KCksb0V0KSxlKX1mdW5jdGlvbiBKMG4oZSl7cmV0dXJuIHlBKCksR3IoKFl1dCgpLGNFdCksZSl9ZnVuY3Rpb24gWjBuKGUpe3JldHVybiBTRSgpLEdyKChRdXQoKSx1RXQpLGUpfWZ1bmN0aW9uIGUxbihlKXtyZXR1cm4gZ1YoKSxHcigoSnV0KCksbEV0KSxlKX1mdW5jdGlvbiB0MW4oZSl7cmV0dXJuIE9WKCksR3IoKFp1dCgpLGhFdCksZSl9ZnVuY3Rpb24gbjFuKGUpe3JldHVybiBJdygpLEdyKChvbHQoKSxfRXQpLGUpfWZ1bmN0aW9uIHIxbihlKXtyZXR1cm4gb0EoKSxHcigoaXV0KCksSUV0KSxlKX1mdW5jdGlvbiBpMW4oZSl7cmV0dXJuIHhkKCksR3IoKGN1dCgpLGpFdCksZSl9ZnVuY3Rpb24gczFuKGUpe3JldHVybiBEMSgpLEdyKCh1dXQoKSx6RXQpLGUpfWZ1bmN0aW9uIGExbihlKXtyZXR1cm4gSjAoKSxHcigobHV0KCksblR0KSxlKX1mdW5jdGlvbiBvMW4oZSl7cmV0dXJuIFN3KCksR3IoKGh1dCgpLHVUdCksZSl9ZnVuY3Rpb24gYzFuKGUpe3JldHVybiB3eCgpLEdyKChSbHQoKSxsVHQpLGUpfWZ1bmN0aW9uIHUxbihlKXtyZXR1cm4gV0EoKSxHcigoV3R0KCksaFR0KSxlKX1mdW5jdGlvbiBsMW4oZSl7cmV0dXJuIHhBKCksR3IoKGVsdCgpLGZUdCksZSl9ZnVuY3Rpb24gaDFuKGUpe3JldHVybiBrQSgpLEdyKChGbHQoKSxQVHQpLGUpfWZ1bmN0aW9uIGYxbihlKXtyZXR1cm4gUkgoKSxHcigoYXV0KCksQlR0KSxlKX1mdW5jdGlvbiBkMW4oZSl7cmV0dXJuIGtWKCksR3IoKG91dCgpLHpUdCksZSl9ZnVuY3Rpb24gZzFuKGUpe3JldHVybiBiVSgpLEdyKChoaHQoKSxIVHQpLGUpfWZ1bmN0aW9uIHAxbihlKXtyZXR1cm4gTE4oKSxHcigodGx0KCksVVR0KSxlKX1mdW5jdGlvbiBiMW4oZSl7cmV0dXJuIGVWKCksR3IoKGZ1dCgpLFZUdCksZSl9ZnVuY3Rpb24gbTFuKGUpe3JldHVybiB1VSgpLEdyKChCbHQoKSxoQ3QpLGUpfWZ1bmN0aW9uIHYxbihlKXtyZXR1cm4gQVYoKSxHcigobmx0KCksZkN0KSxlKX1mdW5jdGlvbiB3MW4oZSl7cmV0dXJuIFdWKCksR3IoKHJsdCgpLGRDdCksZSl9ZnVuY3Rpb24geTFuKGUpe3JldHVybiBzVSgpLEdyKChpbHQoKSxwQ3QpLGUpfWZ1bmN0aW9uIHgxbihlKXtyZXR1cm4gcVYoKSxHcigoc2x0KCksdkN0KSxlKX1mdW5jdGlvbiBrMW4oZSl7cmV0dXJuIEdIKCksR3IoKGR1dCgpLGpDdCksZSl9ZnVuY3Rpb24gRTFuKGUpe3JldHVybiBkRSgpLEdyKChaY3QoKSx6OHQpLGUpfWZ1bmN0aW9uIFQxbihlKXtyZXR1cm4gWm4oKSxHcigoQmh0KCksQjh0KSxlKX1mdW5jdGlvbiBDMW4oZSl7cmV0dXJuIHRWKCksR3IoKGFsdCgpLCRDdCksZSl9ZnVuY3Rpb24gUzFuKGUpe3JldHVybiBmY2UoKSxHcigoZ3V0KCksekN0KSxlKX1mdW5jdGlvbiBfMW4oZSl7cmV0dXJuIFZBKCksR3IoKGZodCgpLEhDdCksZSl9ZnVuY3Rpb24gQTFuKGUpe3JldHVybiBucSgpLEdyKChNY3QoKSxVQ3QpLGUpfWZ1bmN0aW9uIEwxbihlKXtyZXR1cm4gUE4oKSxHcigoZ2x0KCksVkN0KSxlKX1mdW5jdGlvbiBNMW4oZSl7cmV0dXJuIHJxKCksR3IoKERjdCgpLEtDdCksZSl9ZnVuY3Rpb24gRDFuKGUpe3JldHVybiByTigpLEdyKChwdXQoKSxXQ3QpLGUpfWZ1bmN0aW9uIEkxbihlKXtyZXR1cm4gWE4oKSxHcigoZGh0KCksWUN0KSxlKX1mdW5jdGlvbiBPMW4oZSl7cmV0dXJuIGJfKCksR3IoKEljdCgpLGhTdCksZSl9ZnVuY3Rpb24gTjFuKGUpe3JldHVybiBDTigpLEdyKChidXQoKSxmU3QpLGUpfWZ1bmN0aW9uIFAxbihlKXtyZXR1cm4gcjEoKSxHcigocGh0KCksdlN0KSxlKX1mdW5jdGlvbiBCMW4oZSl7cmV0dXJuIGcyKCksR3IoKE9mdCgpLHlTdCksZSl9ZnVuY3Rpb24gRjFuKGUpe3JldHVybiBvZygpLEdyKChGaHQoKSx4U3QpLGUpfWZ1bmN0aW9uIFIxbihlKXtyZXR1cm4gWW0oKSxHcigoUmh0KCksX1N0KSxlKX1mdW5jdGlvbiBqMW4oZSl7cmV0dXJuIEpzKCksR3IoKGdodCgpLEdTdCksZSl9ZnVuY3Rpb24gJDFuKGUpe3JldHVybiBGMSgpLEdyKChwbHQoKSxLU3QpLGUpfWZ1bmN0aW9uIHoxbihlKXtyZXR1cm4gaXAoKSxHcigoamx0KCksV1N0KSxlKX1mdW5jdGlvbiBxMW4oZSl7cmV0dXJuIHZVKCksR3IoKGpodCgpLFlTdCksZSl9ZnVuY3Rpb24gSDFuKGUpe3JldHVybiBycCgpLEdyKChkbHQoKSxRU3QpLGUpfWZ1bmN0aW9uIFYxbihlKXtyZXR1cm4gSWgoKSxHcigoJGx0KCksWlN0KSxlKX1mdW5jdGlvbiBVMW4oZSl7cmV0dXJuIHF5KCksR3IoKFlmdCgpLGVfdCksZSl9ZnVuY3Rpb24gRzFuKGUpe3JldHVybiB0NigpLEdyKChiaHQoKSx0X3QpLGUpfWZ1bmN0aW9uIEsxbihlKXtyZXR1cm4gUmEoKSxHcigoJGh0KCksbl90KSxlKX1mdW5jdGlvbiBXMW4oZSl7cmV0dXJuIFJsKCksR3IoKHpodCgpLHJfdCksZSl9ZnVuY3Rpb24gWTFuKGUpe3JldHVybiBDdCgpLEdyKChtaHQoKSxpX3QpLGUpfWZ1bmN0aW9uIFgxbihlKXtyZXR1cm4gbWgoKSxHcigoemx0KCksdV90KSxlKX1mdW5jdGlvbiBRMW4oZSl7cmV0dXJuIFpsKCksR3IoKFdmdCgpLGxfdCksZSl9ZnVuY3Rpb24gSjFuKGUpe3JldHVybiBkeCgpLEdyKChibHQoKSxoX3QpLGUpfWZ1bmN0aW9uIFoxbihlLHQpe3JldHVybiBucihlKSxlKyhucih0KSx0KX1mdW5jdGlvbiBlZG4oZSl7cmV0dXJuIG1hZSgpLEdyKChtdXQoKSxmX3QpLGUpfWZ1bmN0aW9uIHRkbihlKXtyZXR1cm4gVlYoKSxHcigocWx0KCksZF90KSxlKX1mdW5jdGlvbiBuZG4oZSl7cmV0dXJuIE5WKCksR3IoKEhsdCgpLGJfdCksZSl9ZnVuY3Rpb24gamsoKXtqaz1VLCREZT0oQ3QoKSxlciksRFc9YXJ9ZnVuY3Rpb24gbWFlKCl7bWFlPVUsclBlPW5ldyBXaXQsaVBlPW5ldyBPc3R9ZnVuY3Rpb24gcmRuKGUpe3JldHVybiFlLmUmJihlLmU9bmV3IGJ0KSxlLmV9ZnVuY3Rpb24gdmFlKGUsdCl7dGhpcy5jPWUsdGhpcy5hPXQsdGhpcy5iPXQtZX1mdW5jdGlvbiB3aXQoZSx0LG4pe3RoaXMuYT1lLHRoaXMuYj10LHRoaXMuYz1ufWZ1bmN0aW9uIHdhZShlLHQsbil7dGhpcy5hPWUsdGhpcy5iPXQsdGhpcy5jPW59ZnVuY3Rpb24geDRlKGUsdCxuKXt0aGlzLmE9ZSx0aGlzLmI9dCx0aGlzLmM9bn1mdW5jdGlvbiBrNGUoZSx0LG4pe3RoaXMuYT1lLHRoaXMuYj10LHRoaXMuYz1ufWZ1bmN0aW9uIHlpdChlLHQsbil7dGhpcy5hPWUsdGhpcy5iPXQsdGhpcy5jPW59ZnVuY3Rpb24geGl0KGUsdCxuKXt0aGlzLmE9ZSx0aGlzLmI9dCx0aGlzLmM9bn1mdW5jdGlvbiBYcChlLHQsbil7dGhpcy5lPWUsdGhpcy5hPXQsdGhpcy5jPW59ZnVuY3Rpb24ga2l0KGUsdCxuKXtKaCgpLCQ1ZS5jYWxsKHRoaXMsZSx0LG4pfWZ1bmN0aW9uIHlhZShlLHQsbil7SmgoKSxFNWUuY2FsbCh0aGlzLGUsdCxuKX1mdW5jdGlvbiBFNGUoZSx0LG4pe0poKCksRTVlLmNhbGwodGhpcyxlLHQsbil9ZnVuY3Rpb24gVDRlKGUsdCxuKXtKaCgpLEU1ZS5jYWxsKHRoaXMsZSx0LG4pfWZ1bmN0aW9uIEVpdChlLHQsbil7SmgoKSx5YWUuY2FsbCh0aGlzLGUsdCxuKX1mdW5jdGlvbiBDNGUoZSx0LG4pe0poKCkseWFlLmNhbGwodGhpcyxlLHQsbil9ZnVuY3Rpb24gVGl0KGUsdCxuKXtKaCgpLEM0ZS5jYWxsKHRoaXMsZSx0LG4pfWZ1bmN0aW9uIENpdChlLHQsbil7SmgoKSxFNGUuY2FsbCh0aGlzLGUsdCxuKX1mdW5jdGlvbiBTaXQoZSx0LG4pe0poKCksVDRlLmNhbGwodGhpcyxlLHQsbil9ZnVuY3Rpb24geGFlKGUpe3NILmNhbGwodGhpcyxlLmQsZS5jLGUuYSxlLmIpfWZ1bmN0aW9uIFM0ZShlKXtzSC5jYWxsKHRoaXMsZS5kLGUuYyxlLmEsZS5iKX1mdW5jdGlvbiBfNGUoZSl7dGhpcy5kPWUsTXIodGhpcyksdGhpcy5iPW5nbihlLmQpfWZ1bmN0aW9uIGlkbihlKXtyZXR1cm4gSEUoKSxHcigoTmZ0KCksTF90KSxlKX1mdW5jdGlvbiBOTyhlLHQpe3JldHVybiBYcihlKSxYcih0KSxuZXcgSVplKGUsdCl9ZnVuY3Rpb24gRzgoZSx0KXtyZXR1cm4gWHIoZSksWHIodCksbmV3IGppdChlLHQpfWZ1bmN0aW9uIHNkbihlLHQpe3JldHVybiBYcihlKSxYcih0KSxuZXcgJGl0KGUsdCl9ZnVuY3Rpb24gYWRuKGUsdCl7cmV0dXJuIFhyKGUpLFhyKHQpLG5ldyB6WmUoZSx0KX1mdW5jdGlvbiBrYWUoZSl7cmV0dXJuIG1yKGUuYiE9MCksYWYoZSxlLmEuYSl9ZnVuY3Rpb24gb2RuKGUpe3JldHVybiBtcihlLmIhPTApLGFmKGUsZS5jLmIpfWZ1bmN0aW9uIGNkbihlKXtyZXR1cm4hZS5jJiYoZS5jPW5ldyBYZCksZS5jfWZ1bmN0aW9uICRrKGUpe3ZhciB0O3JldHVybiB0PW5ldyBidCxHb2UodCxlKSx0fWZ1bmN0aW9uIHVkbihlKXt2YXIgdDtyZXR1cm4gdD1uZXcgS3MsR29lKHQsZSksdH1mdW5jdGlvbiBfaXQoZSl7dmFyIHQ7cmV0dXJuIHQ9bmV3IEx3ZSxzY2UodCxlKSx0fWZ1bmN0aW9uIFBPKGUpe3ZhciB0O3JldHVybiB0PW5ldyBvcyxzY2UodCxlKSx0fWZ1bmN0aW9uIGwoZSx0KXtyZXR1cm4gVl8oZT09bnVsbHx8aXVlKGUsdCkpLGV9ZnVuY3Rpb24gbGRuKGUsdCxuKXtTc3QuY2FsbCh0aGlzLHQsbiksdGhpcy5hPWV9ZnVuY3Rpb24gQWl0KGUsdCl7dGhpcy5jPWUsdGhpcy5iPXQsdGhpcy5hPSExfWZ1bmN0aW9uIExpdCgpe3RoaXMuYT0iOyw7Iix0aGlzLmI9IiIsdGhpcy5jPSIifWZ1bmN0aW9uIE1pdChlLHQsbil7dGhpcy5iPWUsenR0LmNhbGwodGhpcyx0LG4pfWZ1bmN0aW9uIEE0ZShlLHQsbil7dGhpcy5jPWUsY3EuY2FsbCh0aGlzLHQsbil9ZnVuY3Rpb24gTDRlKGUsdCxuKXtJay5jYWxsKHRoaXMsZSx0KSx0aGlzLmI9bn1mdW5jdGlvbiBNNGUoZSx0LG4pe2s5ZShuLDAsZSx0LG4ubGVuZ3RoLCExKX1mdW5jdGlvbiB0ZyhlLHQsbixyLGEpe2UuYj10LGUuYz1uLGUuZD1yLGUuYT1hfWZ1bmN0aW9uIEQ0ZShlLHQsbixyLGEpe2UuZD10LGUuYz1uLGUuYT1yLGUuYj1hfWZ1bmN0aW9uIGhkbihlLHQpe3QmJihlLmI9dCxlLmE9KGZiKHQpLHQuYSkpfWZ1bmN0aW9uIEJPKGUsdCl7aWYoIWUpdGhyb3cgdWUobmV3IFluKHQpKX1mdW5jdGlvbiBLOChlLHQpe2lmKCFlKXRocm93IHVlKG5ldyBuYyh0KSl9ZnVuY3Rpb24gSTRlKGUsdCl7aWYoIWUpdGhyb3cgdWUobmV3IEJKZSh0KSl9ZnVuY3Rpb24gZmRuKGUsdCl7cmV0dXJuIGVxKCkscnUoZS5kLnAsdC5kLnApfWZ1bmN0aW9uIGRkbihlLHQpe3JldHVybiB0cCgpLFlpKGUuZS5iLHQuZS5iKX1mdW5jdGlvbiBnZG4oZSx0KXtyZXR1cm4gdHAoKSxZaShlLmUuYSx0LmUuYSl9ZnVuY3Rpb24gcGRuKGUsdCl7cmV0dXJuIHJ1KFVpdChlLmQpLFVpdCh0LmQpKX1mdW5jdGlvbiBYcShlLHQpe3JldHVybiB0JiZ5SChlLHQuZCk/dDpudWxsfWZ1bmN0aW9uIGJkbihlLHQpe3JldHVybiB0PT0oQ3QoKSxlcik/ZS5jOmUuZH1mdW5jdGlvbiBPNGUoZSl7cmV0dXJuIG1iKHBnbih3YyhlKT9NZihlKTplKSl9ZnVuY3Rpb24gbWRuKGUpe3JldHVybiBuZXcgbHQoZS5jK2UuYixlLmQrZS5hKX1mdW5jdGlvbiBEaXQoZSl7cmV0dXJuIGUhPW51bGwmJiFIY2UoZSwkTSx6TSl9ZnVuY3Rpb24gdmRuKGUsdCl7cmV0dXJuKHUxdChlKTw8NHx1MXQodCkpJlpzfWZ1bmN0aW9uIElpdChlLHQsbixyLGEpe2UuYz10LGUuZD1uLGUuYj1yLGUuYT1hfWZ1bmN0aW9uIE40ZShlKXt2YXIgdCxuO3Q9ZS5iLG49ZS5jLGUuYj1uLGUuYz10fWZ1bmN0aW9uIFA0ZShlKXt2YXIgdCxuO249ZS5kLHQ9ZS5hLGUuZD10LGUuYT1ufWZ1bmN0aW9uIHdkbihlLHQpe3ZhciBuO3JldHVybiBuPWUuYyxkN2UoZSx0KSxufWZ1bmN0aW9uIEI0ZShlLHQpe3JldHVybiB0PDA/ZS5nPS0xOmUuZz10LGV9ZnVuY3Rpb24gUXEoZSx0KXtyZXR1cm4gX3duKGUpLGUuYSo9dCxlLmIqPXQsZX1mdW5jdGlvbiBPaXQoZSx0LG4pe19odC5jYWxsKHRoaXMsdCxuKSx0aGlzLmQ9ZX1mdW5jdGlvbiBGTyhlLHQsbil7dHllLmNhbGwodGhpcyxlLHQpLHRoaXMuYz1ufWZ1bmN0aW9uIEpxKGUsdCxuKXt0eWUuY2FsbCh0aGlzLGUsdCksdGhpcy5jPW59ZnVuY3Rpb24gRjRlKGUpe3A0ZSgpLG01LmNhbGwodGhpcyksdGhpcy5jaShlKX1mdW5jdGlvbiBOaXQoKXtlRSgpLCRnbi5jYWxsKHRoaXMsKGliKCksR2YpKX1mdW5jdGlvbiBQaXQoZSl7cmV0dXJuIERpKCksbmV3IG5nKDAsZSl9ZnVuY3Rpb24gQml0KCl7Qml0PVUsc3BlPShDbigpLG5ldyBEYShjMGUpKX1mdW5jdGlvbiBacSgpe1pxPVUsbmV3IFc4ZSgoR2llKCkseTBlKSwoVWllKCksdzBlKSl9ZnVuY3Rpb24gRml0KCl7Rml0PVUsdF9lPVdlKHJvLGR0LDE3LDI1NiwwLDEpfWZ1bmN0aW9uIFJpdCgpe3RoaXMuYj16ZShHZShJdCgoYjAoKSxaMGUpKSkpfWZ1bmN0aW9uIEVhZShlKXt0aGlzLmI9ZSx0aGlzLmE9TW0odGhpcy5iLmEpLk9kKCl9ZnVuY3Rpb24gaml0KGUsdCl7dGhpcy5iPWUsdGhpcy5hPXQsR1MuY2FsbCh0aGlzKX1mdW5jdGlvbiAkaXQoZSx0KXt0aGlzLmE9ZSx0aGlzLmI9dCxHUy5jYWxsKHRoaXMpfWZ1bmN0aW9uIHppdChlLHQsbil7dGhpcy5hPWUsTjUuY2FsbCh0aGlzLHQsbil9ZnVuY3Rpb24gcWl0KGUsdCxuKXt0aGlzLmE9ZSxONS5jYWxsKHRoaXMsdCxuKX1mdW5jdGlvbiB6ayhlLHQsbil7dmFyIHI7cj1uZXcgeXkobiksZTEoZSx0LHIpfWZ1bmN0aW9uIFI0ZShlLHQsbil7dmFyIHI7cmV0dXJuIHI9ZVt0XSxlW3RdPW4scn1mdW5jdGlvbiBlSChlKXt2YXIgdDtyZXR1cm4gdD1lLnNsaWNlKCksam9lKHQsZSl9ZnVuY3Rpb24gdEgoZSl7dmFyIHQ7cmV0dXJuIHQ9ZS5uLGUuYS5iK3QuZCt0LmF9ZnVuY3Rpb24gSGl0KGUpe3ZhciB0O3JldHVybiB0PWUubixlLmUuYit0LmQrdC5hfWZ1bmN0aW9uIGo0ZShlKXt2YXIgdDtyZXR1cm4gdD1lLm4sZS5lLmErdC5iK3QuY31mdW5jdGlvbiAkNGUoZSl7ZS5hLmI9ZS5iLGUuYi5hPWUuYSxlLmE9ZS5iPW51bGx9ZnVuY3Rpb24gdWkoZSx0KXtyZXR1cm4gQ3MoZSx0LGUuYy5iLGUuYyksITB9ZnVuY3Rpb24geWRuKGUpe3JldHVybiBlLmE/ZS5hOlFhZShlKX1mdW5jdGlvbiB4ZG4oZSl7cmV0dXJuIHR4KCksY2coZSk9PWRzKEViKGUpKX1mdW5jdGlvbiBrZG4oZSl7cmV0dXJuIHR4KCksRWIoZSk9PWRzKGNnKGUpKX1mdW5jdGlvbiBndyhlLHQpe3JldHVybiBSQShlLG5ldyBJayh0LmEsdC5iKSl9ZnVuY3Rpb24gRWRuKGUsdCl7cmV0dXJuIGtIKCksZnVlKGUsdCksbmV3IGhhdChlLHQpfWZ1bmN0aW9uIFRkbihlLHQpe3JldHVybiBlLmM8dC5jPy0xOmUuYz09dC5jPzA6MX1mdW5jdGlvbiBWaXQoZSl7cmV0dXJuIGUuYi5jLmxlbmd0aC1lLmUuYy5sZW5ndGh9ZnVuY3Rpb24gVWl0KGUpe3JldHVybiBlLmUuYy5sZW5ndGgtZS5nLmMubGVuZ3RofWZ1bmN0aW9uIFRhZShlKXtyZXR1cm4gZS5lLmMubGVuZ3RoK2UuZy5jLmxlbmd0aH1mdW5jdGlvbiBSTyhlKXtyZXR1cm4gZT09MHx8aXNOYU4oZSk/ZTplPDA/LTE6MX1mdW5jdGlvbiBDZG4oZSl7cmV0dXJuIURvKGUpJiZlLmMuaS5jPT1lLmQuaS5jfWZ1bmN0aW9uIFNkbihlKXtyZXR1cm4gU2goKSwoQ3QoKSxKdSkuSGMoZS5qKX1mdW5jdGlvbiBfZG4oZSx0LG4pe3JldHVybiB0cCgpLG4uZS5hK24uZi5hK2UqdH1mdW5jdGlvbiBBZG4oZSx0LG4pe3JldHVybiB0cCgpLG4uZS5iK24uZi5iK2UqdH1mdW5jdGlvbiBMZG4oZSx0LG4pe3JldHVybiBraShlLmIsbChuLmIsMTgpLHQpfWZ1bmN0aW9uIE1kbihlLHQsbil7cmV0dXJuIGtpKGUuYixsKG4uYiwxOCksdCl9ZnVuY3Rpb24gRGRuKGUsdCxuKXttRG4oZS5hLGUuYixlLmMsbCh0LDE2Niksbil9ZnVuY3Rpb24gejRlKGUsdCxuLHIpe3o4ZS5jYWxsKHRoaXMsZSx0LG4sciwwLDApfWZ1bmN0aW9uIEdpdChlKXtwNGUoKSxGNGUuY2FsbCh0aGlzLGUpLHRoaXMuYT0tMX1mdW5jdGlvbiBLaXQoZSx0KXtTc3QuY2FsbCh0aGlzLHQsMTA0MCksdGhpcy5hPWV9ZnVuY3Rpb24gV2l0KCl7Y3R0LmNhbGwodGhpcywiQ09VTlRfQ0hJTERSRU4iLDApfWZ1bmN0aW9uIG5IKGUsdCl7eU8uY2FsbCh0aGlzLGUsdCksdGhpcy5hPXRoaXN9ZnVuY3Rpb24ga3MoZSx0KXt2YXIgbjtyZXR1cm4gbj1HYWUoZSx0KSxuLmk9MixufWZ1bmN0aW9uIHJIKGUsdCl7dmFyIG47cmV0dXJuKytlLmosbj1lLkNqKHQpLG59ZnVuY3Rpb24gZmkoZSx0LG4pe3JldHVybiBlLmE9LTEsQnllKGUsdC5nLG4pLGV9ZnVuY3Rpb24gSWRuKGUsdCl7cmV0dXJuIHZ0KGUsbmV3IGx0KHQuYSx0LmIpKX1mdW5jdGlvbiBZaXQoZSl7cmV0dXJuIHV4KCksV2UoUFcsSUcsNDAsZSwwLDEpfWZ1bmN0aW9uIFhpdChlKXtyZXR1cm4gZS5lLlJkKCkuZ2MoKSplLmMuUmQoKS5nYygpfWZ1bmN0aW9uIENhZShlLHQsbil7cmV0dXJuIG5ldyBzaXQocWduKGUpLl9lKCksbix0KX1mdW5jdGlvbiBPZG4oZSx0KXtnN2UoZSx0PT1udWxsP251bGw6KG5yKHQpLHQpKX1mdW5jdGlvbiBOZG4oZSx0KXtmN2UoZSx0PT1udWxsP251bGw6KG5yKHQpLHQpKX1mdW5jdGlvbiBQZG4oZSx0KXtmN2UoZSx0PT1udWxsP251bGw6KG5yKHQpLHQpKX1mdW5jdGlvbiBWXyhlKXtpZighZSl0aHJvdyB1ZShuZXcga2sobnVsbCkpfWZ1bmN0aW9uIHE0ZShlKXtpZihlLmMuZSE9ZS5hKXRocm93IHVlKG5ldyBYaCl9ZnVuY3Rpb24gSDRlKGUpe2lmKGUuZS5jIT1lLmIpdGhyb3cgdWUobmV3IFhoKX1mdW5jdGlvbiBpSChlKXtmb3IoWHIoZSk7ZS5PYigpOyllLlBiKCksZS5RYigpfWZ1bmN0aW9uIFNhZShlKXt3dygpLHRoaXMuYT0oQ24oKSxuZXcgRGEoWHIoZSkpKX1mdW5jdGlvbiBWNGUoZSl7dGhpcy5jPWUsdGhpcy5iPXRoaXMuYy5kLnZjKCkuS2MoKX1mdW5jdGlvbiBCZG4oZSl7ZS5hLmxkKCksbChlLmEubWQoKSwxNikuZ2MoKSxad2UoKX1mdW5jdGlvbiBRaXQoZSx0KXtyZXR1cm4gZS5hKz1JZih0LDAsdC5sZW5ndGgpLGV9ZnVuY3Rpb24ganQoZSx0KXtyZXR1cm4gU24odCxlLmMubGVuZ3RoKSxlLmNbdF19ZnVuY3Rpb24gSml0KGUsdCl7cmV0dXJuIFNuKHQsZS5hLmxlbmd0aCksZS5hW3RdfWZ1bmN0aW9uIEZkbihlLHQpe3JldHVybiBucih0KSx2Tih0LChucihlKSxlKSl9ZnVuY3Rpb24gUmRuKGUsdCl7cmV0dXJuIG5yKGUpLHZOKGUsKG5yKHQpLHQpKX1mdW5jdGlvbiBMbShlLHQsbixyLGEsbyl7cmV0dXJuIGtndChlLHQsbixyLGEsMCxvKX1mdW5jdGlvbiBqZG4oZSx0KXtyZXR1cm4gVHModCwwLFU0ZSh0WzBdLGFwKDEpKSl9ZnVuY3Rpb24gJGRuKGUsdCl7cmV0dXJuIGFwKGJvKGFwKGUuYSkuYSx0LmEpKX1mdW5jdGlvbiBVNGUoZSx0KXtyZXR1cm4gJGRuKGwoZSwxNjgpLGwodCwxNjgpKX1mdW5jdGlvbiBaaXQoKXtaaXQ9VSxuX2U9V2UocjMsZHQsMTY4LDI1NiwwLDEpfWZ1bmN0aW9uIGVzdCgpe2VzdD1VLHNfZT1XZShpMyxkdCwxOTEsMjU2LDAsMSl9ZnVuY3Rpb24gdHN0KCl7dHN0PVUsSlNlPVdlKGp4LGR0LDIyMiwyNTYsMCwxKX1mdW5jdGlvbiBuc3QoKXtuc3Q9VSxlX2U9V2UoUEwsZHQsMTgwLDEyOCwwLDEpfWZ1bmN0aW9uIEc0ZSgpe3RnKHRoaXMsITEsITEsITEsITEpfWZ1bmN0aW9uIEs0ZShlKXt3ci5jYWxsKHRoaXMsbmV3IGUyKSxLYSh0aGlzLGUpfWZ1bmN0aW9uIFVfKGUpe3RoaXMuYT1uZXcgTjgoZS5nYygpKSxLYSh0aGlzLGUpfWZ1bmN0aW9uIHJzdChlKXt0aGlzLmM9ZSx0aGlzLmE9bmV3IFA4KHRoaXMuYy5hKX1mdW5jdGlvbiBpc3QoZSl7dGhpcy5hPWUsdGhpcy5jPW5ldyBQcix1eW4odGhpcyl9ZnVuY3Rpb24gc3N0KCl7dGhpcy5kPW5ldyBsdCgwLDApLHRoaXMuZT1uZXcgS3N9ZnVuY3Rpb24gYm4oZSx0KXtBbSgpLFBvZS5jYWxsKHRoaXMsZSksdGhpcy5hPXR9ZnVuY3Rpb24gc0goZSx0LG4scil7RDRlKHRoaXMsZSx0LG4scil9ZnVuY3Rpb24gemRuKGUsdCxuKXtyZXR1cm4gcnUodC5kW2UuZ10sbi5kW2UuZ10pfWZ1bmN0aW9uIHFkbihlLHQsbil7cmV0dXJuIHJ1KGUuZFt0LnBdLGUuZFtuLnBdKX1mdW5jdGlvbiBIZG4oZSx0LG4pe3JldHVybiBydShlLmRbdC5wXSxlLmRbbi5wXSl9ZnVuY3Rpb24gVmRuKGUsdCxuKXtyZXR1cm4gcnUoZS5kW3QucF0sZS5kW24ucF0pfWZ1bmN0aW9uIFVkbihlLHQsbil7cmV0dXJuIHJ1KGUuZFt0LnBdLGUuZFtuLnBdKX1mdW5jdGlvbiBhSChlLHQsbil7cmV0dXJuIGIuTWF0aC5taW4obi9lLDEvdCl9ZnVuY3Rpb24gYXN0KGUsdCl7cmV0dXJuIGU/MDpiLk1hdGgubWF4KDAsdC0xKX1mdW5jdGlvbiBfYWUoZSx0KXtyZXR1cm4gZT09bnVsbD90PT1udWxsOnZuKGUsdCl9ZnVuY3Rpb24gR2RuKGUsdCl7cmV0dXJuIGU9PW51bGw/dD09bnVsbDpRVihlLHQpfWZ1bmN0aW9uIG9zdChlKXtyZXR1cm4gZS5xP2UucTooQ24oKSxDbigpLG1nKX1mdW5jdGlvbiBjc3QoZSl7cmV0dXJuIGUuYy1sKGp0KGUuYSxlLmIpLDI5NCkuYn1mdW5jdGlvbiBnaChlKXtyZXR1cm4gZS5jP2UuYy5mOmUuZS5ifWZ1bmN0aW9uIHdsKGUpe3JldHVybiBlLmM/ZS5jLmc6ZS5lLmF9ZnVuY3Rpb24gS2RuKGUsdCl7cmV0dXJuIGUuYT09bnVsbCYmSGJ0KGUpLGUuYVt0XX1mdW5jdGlvbiB1c3QoZSl7dmFyIHQ7cmV0dXJuIHQ9VGd0KGUpLHQ/dXN0KHQpOmV9ZnVuY3Rpb24gb0goZSx0KXtyZXR1cm4gRGkoKSxuZXcgZjVlKGUsdCl9ZnVuY3Rpb24gbmcoZSx0KXtEaSgpLFh2LmNhbGwodGhpcyxlKSx0aGlzLmE9dH1mdW5jdGlvbiBjSChlLHQpe0poKCksTnouY2FsbCh0aGlzLHQpLHRoaXMuYT1lfWZ1bmN0aW9uIEdfKGUsdCxuKXt0aGlzLmE9ZSxZcy5jYWxsKHRoaXMsdCxuLDIpfWZ1bmN0aW9uIGxzdChlKXt0aGlzLmI9bmV3IG9zLHRoaXMuYT1lLHRoaXMuYz0tMX1mdW5jdGlvbiBoc3QoZSl7TnllLmNhbGwodGhpcywwLDApLHRoaXMuYT1lLHRoaXMuYj0wfWZ1bmN0aW9uIHVIKGUpe0x3LmNhbGwodGhpcyxlLmdjKCkpLEFzKHRoaXMsZSl9ZnVuY3Rpb24gbEgoZSl7ZS5iP2xIKGUuYik6ZS5kLmRjKCkmJmUuZi5jLkJjKGUuZSl9ZnVuY3Rpb24gVzRlKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpJiZlLlRtPT09eGV9ZnVuY3Rpb24gQWFlKGUsdCl7cmV0dXJuIERlKHQsMjIpJiZ2bChlLGwodCwyMikpfWZ1bmN0aW9uIGZzdChlLHQpe3JldHVybiBEZSh0LDIyKSYma3duKGUsbCh0LDIyKSl9ZnVuY3Rpb24gem8oZSx0KXtyZXR1cm4gUjB0KGUsdCxKbW4oZSxlLmIuQ2UodCkpKX1mdW5jdGlvbiBXZG4oZSx0KXtyZXR1cm4gZS5hLmdldCh0KSE9PXZvaWQgMH1mdW5jdGlvbiBZNGUoZSl7cmV0dXJuIEpsKGUsMjYpKmlMK0psKGUsMjcpKnNMfWZ1bmN0aW9uIGRzdChlLHQpe3JldHVybiB6d24obmV3IHpzLG5ldyBaMihlKSx0KX1mdW5jdGlvbiBMYWUoZSx0LG4pe0IwdCgwLHQsZS5sZW5ndGgpLG5FKGUsMCx0LG4pfWZ1bmN0aW9uIHB3KGUsdCxuKXtFeSh0LGUuYy5sZW5ndGgpLHhfKGUuYyx0LG4pfWZ1bmN0aW9uIGhIKGUsdCxuKXt2YXIgcjtlJiYocj1lLmksci5jPXQsci5iPW4pfWZ1bmN0aW9uIGZIKGUsdCxuKXt2YXIgcjtlJiYocj1lLmksci5kPXQsci5hPW4pfWZ1bmN0aW9uIGdzdChlLHQsbil7dmFyIHI7Zm9yKHI9MDtyPHQ7KytyKWVbcl09bn1mdW5jdGlvbiBZZG4oZSx0KXt2YXIgbjtmb3Iobj0wO248dDsrK24pZVtuXT0tMX1mdW5jdGlvbiBycyhlLHQpe3ZhciBuO3JldHVybiBuPXVuKGUpLGo3ZShuLHQpLG59ZnVuY3Rpb24gWGRuKGUsdCl7cmV0dXJuIWUmJihlPVtdKSxlW2UubGVuZ3RoXT10LGV9ZnVuY3Rpb24gTWFlKGUsdCl7T2koZS5jLHQpLGUuYi5jKz10LmEsZS5iLmQrPXQuYn1mdW5jdGlvbiBRZG4oZSx0KXtNYWUoZSxtYShuZXcgbHQodC5hLHQuYiksZS5jKSl9ZnVuY3Rpb24gRGFlKGUsdCl7dGhpcy5iPW5ldyBvcyx0aGlzLmE9ZSx0aGlzLmM9dH1mdW5jdGlvbiBwc3QoKXt0aGlzLmI9bmV3IFgzLHRoaXMuYz1uZXcgWWF0KHRoaXMpfWZ1bmN0aW9uIFg0ZSgpe3RoaXMuZD1uZXcgZGEsdGhpcy5lPW5ldyBXYXQodGhpcyl9ZnVuY3Rpb24gUTRlKCl7VTVlKCksdGhpcy5mPW5ldyBvcyx0aGlzLmU9bmV3IG9zfWZ1bmN0aW9uIGJzdCgpe1NoKCksdGhpcy5rPW5ldyBQcix0aGlzLmQ9bmV3IEtzfWZ1bmN0aW9uIElhZSgpe0lhZT1VLHZfdD1uZXcgSGEoKHBpKCkscmgpLDApfWZ1bmN0aW9uIG1zdCgpe21zdD1VLHM2dD1uZXcgaHN0KFdlKHdhLFJuLDEsMCw1LDEpKX1mdW5jdGlvbiBKZG4oZSx0LG4pe3JldHVybiBuYShlLG5ldyBCOCh0LmEsbi5hKSl9ZnVuY3Rpb24gWmRuKGUsdCxuKXtyZXR1cm4tcnUoZS5mW3QucF0sZS5mW24ucF0pfWZ1bmN0aW9uIGVnbihlLHQsbil7STJ0KG4sZSwxKSx2dCh0LG5ldyBJZXQobixlKSl9ZnVuY3Rpb24gdGduKGUsdCxuKXtGQShuLGUsMSksdnQodCxuZXcgUGV0KG4sZSkpfWZ1bmN0aW9uIHZzdChlLHQsbil7dGhpcy5hPWUsQnEuY2FsbCh0aGlzLHQsbiwyMil9ZnVuY3Rpb24gd3N0KGUsdCxuKXt0aGlzLmE9ZSxCcS5jYWxsKHRoaXMsdCxuLDE0KX1mdW5jdGlvbiB5c3QoZSx0LG4scil7SmgoKSxpY3QuY2FsbCh0aGlzLGUsdCxuLHIpfWZ1bmN0aW9uIHhzdChlLHQsbixyKXtKaCgpLGljdC5jYWxsKHRoaXMsZSx0LG4scil9ZnVuY3Rpb24geWwoZSx0LG4pe3JldHVybiBlLmE9LTEsQnllKGUsdC5nKzEsbiksZX1mdW5jdGlvbiBKNGUoZSx0LG4pe3JldHVybiBuPU5oKGUsbCh0LDU0KSw3LG4pLG59ZnVuY3Rpb24gWjRlKGUsdCxuKXtyZXR1cm4gbj1OaChlLGwodCw1NCksMyxuKSxufWZ1bmN0aW9uIFlyKGUpe3JldHVybiB3YyhlKT9lfDA6clplKGUpfWZ1bmN0aW9uIGtzdChlKXtyZXR1cm4gRGkoKSxuZXcgY29lKDEwLGUsMCl9ZnVuY3Rpb24gRXN0KGUpe3ZhciB0O3JldHVybiB0PWUuZix0fHwoZS5mPWUuRGMoKSl9ZnVuY3Rpb24gVzgoZSl7dmFyIHQ7cmV0dXJuIHQ9ZS5pLHR8fChlLmk9ZS5iYygpKX1mdW5jdGlvbiBkSChlKXtpZihlLmUuaiE9ZS5kKXRocm93IHVlKG5ldyBYaCl9ZnVuY3Rpb24gTW0oZSl7cmV0dXJuIGUuYz9lLmM6ZS5jPWUuU2QoKX1mdW5jdGlvbiBPYWUoZSl7cmV0dXJuIGUuZD9lLmQ6ZS5kPWUuVGQoKX1mdW5jdGlvbiBLXyhlLHQpe3JldHVybiBVNW4obE4oZSx0KSk/dC56aSgpOm51bGx9ZnVuY3Rpb24gbmduKGUpe3JldHVybiBEZShlLDE1KT9sKGUsMTUpLmVkKCk6ZS5LYygpfWZ1bmN0aW9uIGU1ZShlKXtyZXR1cm4gZS5RYyhXZSh3YSxSbiwxLGUuZ2MoKSw1LDEpKX1mdW5jdGlvbiBUc3QoZSl7cmV0dXJuIGUhPW51bGwmJlJhZShlKSYmZS5UbSE9PXhlfWZ1bmN0aW9uIHQ1ZShlKXtyZXR1cm4hQXJyYXkuaXNBcnJheShlKSYmZS5UbT09PXhlfWZ1bmN0aW9uIENzdChlLHQpe3JldHVybiBYcih0KSxlLmEuSmQodCkmJiFlLmIuSmQodCl9ZnVuY3Rpb24gcmduKGUsdCl7cmV0dXJuIHF1KGUubCZ0LmwsZS5tJnQubSxlLmgmdC5oKX1mdW5jdGlvbiBpZ24oZSx0KXtyZXR1cm4gcXUoZS5sfHQubCxlLm18dC5tLGUuaHx0LmgpfWZ1bmN0aW9uIHNnbihlLHQpe3JldHVybiBxdShlLmxedC5sLGUubV50Lm0sZS5oXnQuaCl9ZnVuY3Rpb24gbDAoZSx0KXtyZXR1cm4gbWIobnB0KHdjKGUpP01mKGUpOmUsdCkpfWZ1bmN0aW9uIGJ3KGUsdCl7cmV0dXJuIG1iKEQ5ZSh3YyhlKT9NZihlKTplLHQpKX1mdW5jdGlvbiB1YihlLHQpe3JldHVybiBtYigkOW4od2MoZSk/TWYoZSk6ZSx0KSl9ZnVuY3Rpb24gYWduKGUsdCl7cmV0dXJuIENmbigobnIoZSksZSksKG5yKHQpLHQpKX1mdW5jdGlvbiBOYWUoZSx0KXtyZXR1cm4gWWkoKG5yKGUpLGUpLChucih0KSx0KSl9ZnVuY3Rpb24gZ0goZSl7dGhpcy5iPW5ldyBCdSgxMSksdGhpcy5hPShFdygpLGUpfWZ1bmN0aW9uIGhyKGUpe3RoaXMuYT0obXN0KCksczZ0KSx0aGlzLmQ9bChYcihlKSw1MSl9ZnVuY3Rpb24gU3N0KGUsdCl7dGhpcy5jPTAsdGhpcy5kPWUsdGhpcy5iPXR8NjR8X2R9ZnVuY3Rpb24gbjVlKGUsdCl7dGhpcy5lPWUsdGhpcy5kPXQmNjQ/dHxfZDp0fWZ1bmN0aW9uIFBhZShlKXt0aGlzLmI9bnVsbCx0aGlzLmE9KEV3KCksZXx8ZF9lKX1mdW5jdGlvbiBfc3QoZSl7RnEodGhpcyksdGhpcy5nPWUsU0godGhpcyksdGhpcy5qZSgpfWZ1bmN0aW9uIERtKGUpe3NiKCksdGhpcy5hPTAsdGhpcy5iPWUtMSx0aGlzLmM9MX1mdW5jdGlvbiByNWUoZSx0LG4scil7dGhpcy5hPWUsWUguY2FsbCh0aGlzLGUsdCxuLHIpfWZ1bmN0aW9uIG9nbihlLHQsbil7ZS5hLk1iKG4pJiYoZS5iPSEwLHQuQ2QobikpfWZ1bmN0aW9uIGk1ZShlKXtlLmR8fChlLmQ9ZS5iLktjKCksZS5jPWUuYi5nYygpKX1mdW5jdGlvbiBxayhlLHQpe2lmKGU8MHx8ZT49dCl0aHJvdyB1ZShuZXcgQndlKX1mdW5jdGlvbiB2eShlLHQpe3JldHVybiBPTihlLChucih0KSxuZXcgeG8odCkpKX1mdW5jdGlvbiBZOChlLHQpe3JldHVybiBPTihlLChucih0KSxuZXcgbGgodCkpKX1mdW5jdGlvbiBBc3QoZSx0LG4pe3JldHVybiBYSW4oZSxsKHQsMTIpLGwobiwxMikpfWZ1bmN0aW9uIExzdChlKXtyZXR1cm4ga2woKSxsKGUsMTIpLmcuYy5sZW5ndGghPTB9ZnVuY3Rpb24gTXN0KGUpe3JldHVybiBrbCgpLGwoZSwxMikuZS5jLmxlbmd0aCE9MH1mdW5jdGlvbiBjZ24oZSx0KXtyZXR1cm4gbHgoKSxZaSh0LmEuby5hLGUuYS5vLmEpfWZ1bmN0aW9uIHVnbihlLHQpe3QuQmImZXUmJiFlLmEubyYmKGUuYS5vPXQpfWZ1bmN0aW9uIGxnbihlLHQpe3QuVWcoIkdlbmVyYWwgJ1JvdGF0b3IiLDEpLFREbihlKX1mdW5jdGlvbiBoZ24oZSx0LG4pe3QucWYobix6ZShHZShjcihlLmIsbikpKSplLmEpfWZ1bmN0aW9uIERzdChlLHQsbil7cmV0dXJuIGg2KCksZ0UoZSx0KSYmZ0UoZSxuKX1mdW5jdGlvbiBXXyhlKXtyZXR1cm4gUmwoKSwhZS5IYyh2cCkmJiFlLkhjKFliKX1mdW5jdGlvbiBmZ24oZSl7cmV0dXJuIGUuZT9fNmUoZS5lKTpudWxsfWZ1bmN0aW9uIFlfKGUpe3JldHVybiB3YyhlKT8iIitlOlBidChlKX1mdW5jdGlvbiBzNWUoZSl7dmFyIHQ7Zm9yKHQ9ZTt0LmY7KXQ9dC5mO3JldHVybiB0fWZ1bmN0aW9uIGRnbihlLHQsbil7cmV0dXJuIFRzKHQsMCxVNGUodFswXSxuWzBdKSksdH1mdW5jdGlvbiBRcChlLHQsbixyKXt2YXIgYTthPWUuaSxhLmk9dCxhLmE9bixhLmI9cn1mdW5jdGlvbiBudChlLHQsbixyKXtZcy5jYWxsKHRoaXMsZSx0LG4pLHRoaXMuYj1yfWZ1bmN0aW9uIF9hKGUsdCxuLHIsYSl7Rm9lLmNhbGwodGhpcyxlLHQsbixyLGEsLTEpfWZ1bmN0aW9uIFhfKGUsdCxuLHIsYSl7c04uY2FsbCh0aGlzLGUsdCxuLHIsYSwtMSl9ZnVuY3Rpb24gcEgoZSx0LG4scil7Rk8uY2FsbCh0aGlzLGUsdCxuKSx0aGlzLmI9cn1mdW5jdGlvbiBJc3QoZSl7THR0LmNhbGwodGhpcyxlLCExKSx0aGlzLmE9ITF9ZnVuY3Rpb24gT3N0KCl7Y3R0LmNhbGwodGhpcywiTE9PS0FIRUFEX0xBWU9VVCIsMSl9ZnVuY3Rpb24gTnN0KGUpe3RoaXMuYj1lLHE4LmNhbGwodGhpcyxlKSxqbnQodGhpcyl9ZnVuY3Rpb24gUHN0KGUpe3RoaXMuYj1lLENPLmNhbGwodGhpcyxlKSwkbnQodGhpcyl9ZnVuY3Rpb24gd3koZSx0LG4pe3RoaXMuYT1lLFY4LmNhbGwodGhpcyx0LG4sNSw2KX1mdW5jdGlvbiBhNWUoZSx0LG4scil7dGhpcy5iPWUsWXMuY2FsbCh0aGlzLHQsbixyKX1mdW5jdGlvbiBCc3QoZSx0KXt0aGlzLmI9ZSxxZy5jYWxsKHRoaXMsZS5iKSx0aGlzLmE9dH1mdW5jdGlvbiBGc3QoZSl7dGhpcy5hPXlkdChlLmEpLHRoaXMuYj1uZXcgT2woZS5iKX1mdW5jdGlvbiBvNWUoZSx0KXt3dygpLFZ1bi5jYWxsKHRoaXMsZSxSVihuZXcgSWwodCkpKX1mdW5jdGlvbiBiSChlLHQpe3JldHVybiBEaSgpLG5ldyBrNWUoZSx0LDApfWZ1bmN0aW9uIEJhZShlLHQpe3JldHVybiBEaSgpLG5ldyBrNWUoNixlLHQpfWZ1bmN0aW9uIFphKGUsdCl7Zm9yKG5yKHQpO2UuT2IoKTspdC5DZChlLlBiKCkpfWZ1bmN0aW9uIEh1KGUsdCl7cmV0dXJuIElhKHQpP3NvZShlLHQpOiEhem8oZS5mLHQpfWZ1bmN0aW9uIEZhZShlLHQpe3JldHVybiB0LlZoKCk/eWIoZS5iLGwodCw1NCkpOnR9ZnVuY3Rpb24gZ2duKGUsdCl7cmV0dXJuIHZuKGUuc3Vic3RyKDAsdC5sZW5ndGgpLHQpfWZ1bmN0aW9uIHJnKGUpe3JldHVybiBuZXcgaHIobmV3IEF5ZShlLmEubGVuZ3RoLGUuYSkpfWZ1bmN0aW9uIG1IKGUpe3JldHVybiBuZXcgbHQoZS5jK2UuYi8yLGUuZCtlLmEvMil9ZnVuY3Rpb24gcGduKGUpe3JldHVybiBxdSh+ZS5sJmVoLH5lLm0mZWgsfmUuaCZocCl9ZnVuY3Rpb24gUmFlKGUpe3JldHVybiB0eXBlb2YgZT09PXdQfHx0eXBlb2YgZT09PU9sZX1mdW5jdGlvbiBObChlKXtlLmY9bmV3IHJudChlKSxlLmk9bmV3IGludChlKSwrK2UuZ31mdW5jdGlvbiBSc3QoZSl7aWYoIWUpdGhyb3cgdWUobmV3IF9jKTtyZXR1cm4gZS5kfWZ1bmN0aW9uIFg4KGUpe3ZhciB0O3JldHVybiB0PXdBKGUpLG1yKHQhPW51bGwpLHR9ZnVuY3Rpb24gYmduKGUpe3ZhciB0O3JldHVybiB0PUk0bihlKSxtcih0IT1udWxsKSx0fWZ1bmN0aW9uIEhrKGUsdCl7dmFyIG47cmV0dXJuIG49ZS5hLmdjKCksazZlKHQsbiksbi10fWZ1bmN0aW9uIG5hKGUsdCl7dmFyIG47cmV0dXJuIG49ZS5hLnpjKHQsZSksbj09bnVsbH1mdW5jdGlvbiBqTyhlLHQpe3JldHVybiBlLmEuemModCwoSG4oKSxQYikpPT1udWxsfWZ1bmN0aW9uIGM1ZShlKXtyZXR1cm4gbmV3IGJuKG51bGwseGduKGUsZS5sZW5ndGgpKX1mdW5jdGlvbiB1NWUoZSx0LG4pe3JldHVybiBzdnQoZSxsKHQsNDIpLGwobiwxNzYpKX1mdW5jdGlvbiBROChlLHQsbil7cmV0dXJuIGQwKGUuYSx0KSxSNGUoZS5iLHQuZyxuKX1mdW5jdGlvbiBtZ24oZSx0LG4pe3FrKG4sZS5hLmMubGVuZ3RoKSxyZihlLmEsbix0KX1mdW5jdGlvbiBIZShlLHQsbixyKXtCMHQodCxuLGUubGVuZ3RoKSx2Z24oZSx0LG4scil9ZnVuY3Rpb24gdmduKGUsdCxuLHIpe3ZhciBhO2ZvcihhPXQ7YTxuOysrYSllW2FdPXJ9ZnVuY3Rpb24gbDVlKGUsdCl7dmFyIG47Zm9yKG49MDtuPHQ7KytuKWVbbl09ITF9ZnVuY3Rpb24gSW0oZSx0LG4pe0NkKCksdGhpcy5lPWUsdGhpcy5kPXQsdGhpcy5hPW59ZnVuY3Rpb24gaDVlKGUsdCxuKXt0aGlzLmM9ZSx0aGlzLmE9dCxDbigpLHRoaXMuYj1ufWZ1bmN0aW9uIGphZShlLHQpe3RoaXMuZD1lLG9yLmNhbGwodGhpcyxlKSx0aGlzLmU9dH1mdW5jdGlvbiBYMChlLHQsbil7cmV0dXJuIEZ5bihlLHQuZyxuKSxkMChlLmMsdCksZX1mdW5jdGlvbiB3Z24oZSl7cmV0dXJuIHA2KGUsKEpzKCksdWMpKSxlLmQ9ITAsZX1mdW5jdGlvbiAkYWUoZSl7cmV0dXJuIWUuaiYmaXIoZSxFX24oZS5nLGUuYikpLGUuan1mdW5jdGlvbiBqc3QoZSl7ZS5hPW51bGwsZS5lPW51bGwsTmwoZS5iKSxlLmQ9MCwrK2UuY31mdW5jdGlvbiBRXyhlKXtneShlLmIhPS0xKSx0MihlLmMsZS5hPWUuYiksZS5iPS0xfWZ1bmN0aW9uIGY1ZShlLHQpe1h2LmNhbGwodGhpcywxKSx0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiB5Z24oZSx0KXtyZXR1cm4gZT4wP2IuTWF0aC5sb2coZS90KTotMTAwfWZ1bmN0aW9uICRzdChlLHQpe3JldHVybiBpdShlLHQpPDA/LTE6aXUoZSx0KT4wPzE6MH1mdW5jdGlvbiAkTyhlLHQpe0RudChlLERlKHQsMTYwKT90OmwodCwyMDM2KS5SbCgpKX1mdW5jdGlvbiBkNWUoZSx0KXtpZihlPT1udWxsKXRocm93IHVlKG5ldyBEOCh0KSl9ZnVuY3Rpb24geGduKGUsdCl7cmV0dXJuIEV3bih0LGUubGVuZ3RoKSxuZXcgS2l0KGUsdCl9ZnVuY3Rpb24gZzVlKGUsdCl7cmV0dXJuIHQ/S2EoZSx0KTohMX1mdW5jdGlvbiBrZ24oKXtyZXR1cm4gJHooKSxoZShsZShhNnQsMSksaXQsNTQ5LDAsW0UwZV0pfWZ1bmN0aW9uIEpfKGUpe3JldHVybiBlLmU9PTA/ZTpuZXcgSW0oLWUuZSxlLmQsZS5hKX1mdW5jdGlvbiBFZ24oZSx0KXtyZXR1cm4gWWkoZS5jLmMrZS5jLmIsdC5jLmMrdC5jLmIpfWZ1bmN0aW9uIHpPKGUsdCl7Q3MoZS5kLHQsZS5iLmIsZS5iKSwrK2UuYSxlLmM9bnVsbH1mdW5jdGlvbiB6c3QoZSx0KXtyZXR1cm4gZS5jP3pzdChlLmMsdCk6dnQoZS5iLHQpLGV9ZnVuY3Rpb24gVGduKGUsdCxuKXt2YXIgcjtyZXR1cm4gcj1feShlLHQpLHhvZShlLHQsbikscn1mdW5jdGlvbiBxc3QoZSx0LG4pe3ZhciByO2ZvcihyPTA7cjx0OysrcilUcyhlLHIsbil9ZnVuY3Rpb24gSHN0KGUsdCxuLHIsYSl7Zm9yKDt0PG47KXJbYSsrXT1jbyhlLHQrKyl9ZnVuY3Rpb24gVmsoZSx0LG4scixhKXtMdWUoZSxsKCRpKHQuayxuKSwxNSksbixyLGEpfWZ1bmN0aW9uIG13KGUsdCl7SXMoZmMoZS5PYygpLG5ldyBGaiksbmV3IGtZZSh0KSl9ZnVuY3Rpb24gQ2duKGUsdCl7cmV0dXJuIFlpKGUuZS5hK2UuZi5hLHQuZS5hK3QuZi5hKX1mdW5jdGlvbiBTZ24oZSx0KXtyZXR1cm4gWWkoZS5lLmIrZS5mLmIsdC5lLmIrdC5mLmIpfWZ1bmN0aW9uIHphZShlKXtyZXR1cm4gYi5NYXRoLmFicyhlLmQuZS1lLmUuZSktZS5hfWZ1bmN0aW9uIF9nbihlKXtyZXR1cm4gZT09Z3M/ZUI6ZT09aWE/Ii1JTkYiOiIiK2V9ZnVuY3Rpb24gQWduKGUpe3JldHVybiBlPT1ncz9lQjplPT1pYT8iLUlORiI6IiIrZX1mdW5jdGlvbiBMZ24oZSl7cmV0dXJuIHR4KCksZHMoY2coZSkpPT1kcyhFYihlKSl9ZnVuY3Rpb24gTWduKGUsdCxuKXtyZXR1cm4gbChlLmMuaGQodCxsKG4sMTM2KSksNDQpfWZ1bmN0aW9uIERnbihlLHQpe0o4KGUsbmV3IHl5KHQuZiE9bnVsbD90LmY6IiIrdC5nKSl9ZnVuY3Rpb24gSWduKGUsdCl7SjgoZSxuZXcgeXkodC5mIT1udWxsP3QuZjoiIit0LmcpKX1mdW5jdGlvbiBBcyhlLHQpe3JldHVybiBlLlNpKCkmJih0PWJvdChlLHQpKSxlLkZpKHQpfWZ1bmN0aW9uIHFhZShlLHQpe3JldHVybiB0PWUuWWsobnVsbCx0KSxSZ3QoZSxudWxsLHQpfWZ1bmN0aW9uIE9nbihlLHQpeysrZS5qLEF1ZShlLGUuaSx0KSxuRW4oZSxsKHQsMzQzKSl9ZnVuY3Rpb24gcDVlKGUpe2U/RnhlKGUsKFZnKCksbTZ0KSk6RnBuKChWZygpLGUpKX1mdW5jdGlvbiB2dyhlKXt0aGlzLmQ9KG5yKGUpLGUpLHRoaXMuYT0wLHRoaXMuYz1FUH1mdW5jdGlvbiBIYWUoZSx0KXt0aGlzLmQ9VDRuKGUpLHRoaXMuYz10LHRoaXMuYT0uNSp0fWZ1bmN0aW9uIFZzdChlKXtSNWUuY2FsbCh0aGlzKSx0aGlzLmE9ZSx2dChlLmEsdGhpcyl9ZnVuY3Rpb24gVXN0KCl7ZTIuY2FsbCh0aGlzKSx0aGlzLmE9ITAsdGhpcy5iPSEwfWZ1bmN0aW9uIEdzdCgpe0dzdD1VLGg2dD1uZXcgamMoITEpLGY2dD1uZXcgamMoITApfWZ1bmN0aW9uIFpfKGUpe3ZhciB0O3JldHVybiB0PWUuZyx0fHwoZS5nPW5ldyB2eihlKSl9ZnVuY3Rpb24gdkgoZSl7dmFyIHQ7cmV0dXJuIHQ9ZS5rLHR8fChlLms9bmV3IFEyKGUpKX1mdW5jdGlvbiBiNWUoZSl7dmFyIHQ7cmV0dXJuIHQ9ZS5rLHR8fChlLms9bmV3IFEyKGUpKX1mdW5jdGlvbiBOZ24oZSl7dmFyIHQ7cmV0dXJuIHQ9ZS5pLHR8fChlLmk9bmV3IHdpZShlKSl9ZnVuY3Rpb24gS3N0KGUpe3ZhciB0O3JldHVybiB0PWUuZix0fHwoZS5mPW5ldyBfeWUoZSkpfWZ1bmN0aW9uIFZhZShlKXt2YXIgdDtyZXR1cm4gdD1lLmosdHx8KGUuaj1uZXcga3ooZSkpfWZ1bmN0aW9uIFVhZShlKXt2YXIgdDtyZXR1cm4gdD1lLmQsdHx8KGUuZD1uZXcgSjIoZSkpfWZ1bmN0aW9uIFdzdChlLHQsbil7cmV0dXJuIERpKCksbmV3IEhvdChlLHQsbil9ZnVuY3Rpb24gWXN0KGUsdCl7cmV0dXJuIFpPKHQsZS5jLmIuYy5nYygpKSxuZXcgRFplKGUsdCl9ZnVuY3Rpb24gbTVlKGUsdCl7dmFyIG47cmV0dXJuIG49ZS5hLmdjKCksWk8odCxuKSxuLTEtdH1mdW5jdGlvbiBJKGUsdCxuKXt2YXIgcjtyZXR1cm4gcj1HYWUoZSx0KSxVaHQobixyKSxyfWZ1bmN0aW9uIEdhZShlLHQpe3ZhciBuO3JldHVybiBuPW5ldyBCN2Usbi5qPWUsbi5kPXQsbn1mdW5jdGlvbiBYcihlKXtpZihlPT1udWxsKXRocm93IHVlKG5ldyBTOCk7cmV0dXJuIGV9ZnVuY3Rpb24geXkoZSl7aWYoZT09bnVsbCl0aHJvdyB1ZShuZXcgUzgpO3RoaXMuYT1lfWZ1bmN0aW9uIFhzdChlKXtDd2UoKSx0aGlzLmI9bmV3IGJ0LHRoaXMuYT1lLFNNbih0aGlzLGUpfWZ1bmN0aW9uIHY1ZShlKXt0aGlzLmI9ZSx0aGlzLmE9bChMZih0aGlzLmIuYS5lKSwyMjcpfWZ1bmN0aW9uIHd3KCl7d3c9VSx3ZCgpLHgwZT1uZXcgb29lKChDbigpLENuKCksX28pKX1mdW5jdGlvbiBLYWUoKXtLYWU9VSx3ZCgpLFZTZT1uZXcgazNlKChDbigpLENuKCksaEspKX1mdW5jdGlvbiBsYigpe2xiPVUsVm49dEVuKCksVG4oKSxPNCYmbjhuKCl9ZnVuY3Rpb24gd0goZSl7ZS5zPU5hTixlLmM9TmFOLHkydChlLGUuZSkseTJ0KGUsZS5qKX1mdW5jdGlvbiB5cihlKXtyZXR1cm4oZS5pPT1udWxsJiZTZChlKSxlLmkpLmxlbmd0aH1mdW5jdGlvbiBRc3QoZSx0KXtyZXR1cm4gbChNbShlLmEpLk1kKCkuWGIodCksNDQpLmxkKCl9ZnVuY3Rpb24gY3IoZSx0KXtyZXR1cm4gSWEodCk/eHUoZSx0KTpoYyh6byhlLmYsdCkpfWZ1bmN0aW9uIFBnbihlLHQpe3JldHVybiB0eCgpLGU9PWNnKHQpP0ViKHQpOmNnKHQpfWZ1bmN0aW9uIEJnbihlLHQsbixyKXtyZXR1cm4gbj09MHx8KG4tcikvbjxlLmV8fHQ+PWUuZ31mdW5jdGlvbiBUcyhlLHQsbil7cmV0dXJuIHBmbihuPT1udWxsfHxsQW4oZSxuKSksZVt0XT1ufWZ1bmN0aW9uIHc1ZShlLHQpe3JldHVybiBYbih0LGUubGVuZ3RoKzEpLGUuc3Vic3RyKHQpfWZ1bmN0aW9uIFdhZShlLHQpe2Zvcihucih0KTtlLmM8ZS5kOyllLlNlKHQsZS5jKyspfWZ1bmN0aW9uIHk1ZShlKXt0aGlzLmQ9ZSx0aGlzLmM9ZS5hLmQuYSx0aGlzLmI9ZS5hLmUuZ31mdW5jdGlvbiBKc3QoZSl7dGhpcy5jPWUsdGhpcy5hPW5ldyBvcyx0aGlzLmI9bmV3IG9zfWZ1bmN0aW9uIHl1KGUpe3RoaXMuYz1uZXcgcWEsdGhpcy5hPW5ldyBidCx0aGlzLmI9ZX1mdW5jdGlvbiBac3QoZSl7dGhpcy5iPW5ldyBidCx0aGlzLmE9bmV3IGJ0LHRoaXMuYz1lfWZ1bmN0aW9uIEZnbihlLHQsbil7bCh0LmIsNjgpLFZ1KHQuYSxuZXcgeDRlKGUsbix0KSl9ZnVuY3Rpb24gUmduKGUsdCl7cmV0dXJuIGx4KCksbChRbyhlLHQuZCksMTUpLkZjKHQpfWZ1bmN0aW9uIEo4KGUsdCl7dmFyIG47bj1lLmEubGVuZ3RoLF95KGUsbikseG9lKGUsbix0KX1mdW5jdGlvbiBlYXQoZSx0KXt2YXIgbjtuPWNvbnNvbGVbZV0sbi5jYWxsKGNvbnNvbGUsdCl9ZnVuY3Rpb24gdGF0KGUsdCl7dmFyIG47KytlLmosbj1lLkVqKCksZS5yaihlLlppKG4sdCkpfWZ1bmN0aW9uIFlhZShlLHQsbil7dmFyIHI7cmV0dXJuIHI9aWNlKGUsdCxuKSxza2UoZSxyKX1mdW5jdGlvbiB5dyhlKXtyZXR1cm4hZS5kJiYoZS5kPW5ldyBZcyhXbyxlLDEpKSxlLmR9ZnVuY3Rpb24gamduKGUpe3JldHVybiFlLmEmJihlLmE9bmV3IFlzKFhiLGUsNCkpLGUuYX1mdW5jdGlvbiBVayhlLHQpe3JldHVybiBlLmErPVN0cmluZy5mcm9tQ2hhckNvZGUodCksZX1mdW5jdGlvbiBoYihlLHQpe3JldHVybiBlLmErPVN0cmluZy5mcm9tQ2hhckNvZGUodCksZX1mdW5jdGlvbiB4NWUoZSx0LG4pe3RoaXMuYT1lLHh3ZS5jYWxsKHRoaXMsdCksdGhpcy5iPW59ZnVuY3Rpb24gbmF0KGUsdCxuKXt0aGlzLmE9ZSxyNmUuY2FsbCh0aGlzLDgsdCxudWxsLG4pfWZ1bmN0aW9uIGs1ZShlLHQsbil7WHYuY2FsbCh0aGlzLGUpLHRoaXMuYT10LHRoaXMuYj1ufWZ1bmN0aW9uIEU1ZShlLHQsbil7TnouY2FsbCh0aGlzLHQpLHRoaXMuYT1lLHRoaXMuYj1ufWZ1bmN0aW9uIHJhdChlKXt0aGlzLmM9ZSx0aGlzLmI9dGhpcy5jLmEsdGhpcy5hPXRoaXMuYy5lfWZ1bmN0aW9uICRnbihlKXt0aGlzLmE9KG5yKGxpKSxsaSksdGhpcy5iPWUsbmV3ICR3ZX1mdW5jdGlvbiBpYXQoZSl7TTVlKGUuYSksZS5iPVdlKHdhLFJuLDEsZS5iLmxlbmd0aCw1LDEpfWZ1bmN0aW9uIHBoKGUpe2d5KGUuYyE9LTEpLGUuZC5nZChlLmMpLGUuYj1lLmMsZS5jPS0xfWZ1bmN0aW9uIGVBKGUpe3JldHVybiBiLk1hdGguc3FydChlLmEqZS5hK2UuYiplLmIpfWZ1bmN0aW9uIHlIKGUsdCl7cmV0dXJuIHh1ZShlLmMsZS5mLHQsZS5iLGUuYSxlLmUsZS5kKX1mdW5jdGlvbiB4dyhlLHQpe3JldHVybiBxayh0LGUuYS5jLmxlbmd0aCksanQoZS5hLHQpfWZ1bmN0aW9uIHlkKGUsdCl7cmV0dXJuIHFlKGUpPT09cWUodCl8fGUhPW51bGwmJlBpKGUsdCl9ZnVuY3Rpb24gc2F0KGUpe3JldHVybiBEZShlLDEwMikmJihsKGUsMTkpLkJiJmV1KSE9MH1mdW5jdGlvbiBhYXQoZSl7cmV0dXJuIExmKGUpLERlKGUsNDg0KT9sKGUsNDg0KTp4YyhlKX1mdW5jdGlvbiBvYXQoZSl7cmV0dXJuIGU/ZS5kYygpOiFlLktjKCkuT2IoKX1mdW5jdGlvbiB6Z24oZSl7cmV0dXJuIFA0P3NvZShQNCxlKTohMX1mdW5jdGlvbiBxZ24oZSl7cmV0dXJuIDA+PWU/bmV3IGIzZTpLd24oZS0xKX1mdW5jdGlvbiBlbyhlKXtyZXR1cm4hZS5hJiZlLmM/ZS5jLmI6ZS5hfWZ1bmN0aW9uIFQ1ZShlKXtyZXR1cm4gRGUoZSw2MTYpP2U6bmV3IG9vdChlKX1mdW5jdGlvbiBmYihlKXtlLmM/ZmIoZS5jKTooeGIoZSksZS5kPSEwKX1mdW5jdGlvbiB0QShlKXtlLmM/ZS5jLiRlKCk6KGUuZD0hMCxoQ24oZSkpfWZ1bmN0aW9uIGNhdChlKXtlLmI9ITEsZS5jPSExLGUuZD0hMSxlLmE9ITF9ZnVuY3Rpb24gdWF0KGUpe3ZhciB0LG47cmV0dXJuIHQ9ZS5jLmkuYyxuPWUuZC5pLmMsdD09bn1mdW5jdGlvbiBIZ24oZSx0KXt2YXIgbjtuPWUuSWgodCksbj49MD9lLmtpKG4pOmQ5ZShlLHQpfWZ1bmN0aW9uIGxhdChlLHQpe2UuYzwwfHxlLmIuYjxlLmM/a28oZS5iLHQpOmUuYS50Zih0KX1mdW5jdGlvbiBWZ24oZSx0KXtxcigoIWUuYSYmKGUuYT1uZXcgTE8oZSxlKSksZS5hKSx0KX1mdW5jdGlvbiBVZ24oZSx0KXtNYWUobCh0LmIsNjgpLGUpLFZ1KHQuYSxuZXcgTXooZSkpfWZ1bmN0aW9uIEdnbihlLHQpe3JldHVybiBydSh0LmouYy5sZW5ndGgsZS5qLmMubGVuZ3RoKX1mdW5jdGlvbiBLZ24oZSx0LG4pe3JldHVybiBoeCgpLG4uTGcoZSxsKHQubGQoKSwxNDkpKX1mdW5jdGlvbiBMZihlKXtpZihlPT1udWxsKXRocm93IHVlKG5ldyBTOCk7cmV0dXJuIGV9ZnVuY3Rpb24gbnIoZSl7aWYoZT09bnVsbCl0aHJvdyB1ZShuZXcgUzgpO3JldHVybiBlfWZ1bmN0aW9uIFdnbihlKXtpZihlLnAhPTQpdGhyb3cgdWUobmV3IHBsKTtyZXR1cm4gZS5lfWZ1bmN0aW9uIFlnbihlKXtpZihlLnAhPTMpdGhyb3cgdWUobmV3IHBsKTtyZXR1cm4gZS5lfWZ1bmN0aW9uIFhnbihlKXtpZihlLnAhPTMpdGhyb3cgdWUobmV3IHBsKTtyZXR1cm4gZS5qfWZ1bmN0aW9uIFFnbihlKXtpZihlLnAhPTQpdGhyb3cgdWUobmV3IHBsKTtyZXR1cm4gZS5qfWZ1bmN0aW9uIEpnbihlKXtpZihlLnAhPTYpdGhyb3cgdWUobmV3IHBsKTtyZXR1cm4gZS5mfWZ1bmN0aW9uIFpnbihlKXtpZihlLnAhPTYpdGhyb3cgdWUobmV3IHBsKTtyZXR1cm4gZS5rfWZ1bmN0aW9uIEM1ZShlKXtyZXR1cm4hZS5iJiYoZS5iPW5ldyBQeihuZXcgVmllKSksZS5ifWZ1bmN0aW9uIGt3KGUpe3JldHVybiBlLmM9PS0yJiZMdChlLEd4bihlLmcsZS5iKSksZS5jfWZ1bmN0aW9uIEdrKGUsdCl7dmFyIG47cmV0dXJuIG49R2FlKCIiLGUpLG4ubj10LG4uaT0xLG59ZnVuY3Rpb24geEgoZSx0LG4scil7aXcuY2FsbCh0aGlzLGUsbiksdGhpcy5hPXQsdGhpcy5mPXJ9ZnVuY3Rpb24gUzVlKGUsdCxuLHIpe2l3LmNhbGwodGhpcyxlLHQpLHRoaXMuZD1uLHRoaXMuYT1yfWZ1bmN0aW9uIGhhdChlLHQpe2Zobi5jYWxsKHRoaXMsV3duKFhyKGUpLFhyKHQpKSksdGhpcy5hPXR9ZnVuY3Rpb24gWHMoKXttSmUuY2FsbCh0aGlzKSxheSh0aGlzLmouYywwKSx0aGlzLmE9LTF9ZnVuY3Rpb24gZmF0KCl7VnhlLmNhbGwodGhpcyxGZiwoU2soKSxBUGUpKSx4TG4odGhpcyl9ZnVuY3Rpb24gZGF0KCl7VnhlLmNhbGwodGhpcyxjdiwoblplKCksckF0KSksZk1uKHRoaXMpfWZ1bmN0aW9uIGdhdCgpe1VyLmNhbGwodGhpcywiREVMQVVOQVlfVFJJQU5HVUxBVElPTiIsMCl9ZnVuY3Rpb24gZXBuKGUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZSl9ZnVuY3Rpb24ga2koZSx0LG4pe3JldHVybiBJYSh0KT9yYyhlLHQsbik6anUoZS5mLHQsbil9ZnVuY3Rpb24gXzVlKGUpe3JldHVybiBDbigpLGU/ZS5PZSgpOihFdygpLEV3KCksZ19lKX1mdW5jdGlvbiB0cG4oZSl7cmV0dXJuIE1oKGUsRmxlKSxjVihibyhibyg1LGUpLGUvMTB8MCkpfWZ1bmN0aW9uIHBhdChlLHQpe3JldHVybiBacSgpLG5ldyBXOGUobmV3IFFudChlKSxuZXcgWG50KHQpKX1mdW5jdGlvbiBrSCgpe2tIPVUsaTZ0PW5ldyBZd2UoaGUobGUodXYsMSksWFUsNDQsMCxbXSkpfWZ1bmN0aW9uIGJhdChlKXtyZXR1cm4hZS5kJiYoZS5kPW5ldyAkYShlLmMuQ2MoKSkpLGUuZH1mdW5jdGlvbiBLayhlKXtyZXR1cm4hZS5hJiYoZS5hPW5ldyB6SmUoZS5jLnZjKCkpKSxlLmF9ZnVuY3Rpb24gbWF0KGUpe3JldHVybiFlLmImJihlLmI9bmV3IEVrKGUuYy5lYygpKSksZS5ifWZ1bmN0aW9uIGlnKGUsdCl7Zm9yKDt0LS0gPjA7KWU9ZTw8MXwoZTwwPzE6MCk7cmV0dXJuIGV9ZnVuY3Rpb24gdmF0KGUsdCl7dmFyIG47cmV0dXJuIG49bmV3IHl1KGUpLCRuKHQuYyxuKSxufWZ1bmN0aW9uIHdhdChlLHQpe2UudS5IYygoUmwoKSx2cCkpJiZXa24oZSx0KSxmdm4oZSx0KX1mdW5jdGlvbiBKYyhlLHQpe3JldHVybiBxZShlKT09PXFlKHQpfHxlIT1udWxsJiZQaShlLHQpfWZ1bmN0aW9uIFFvKGUsdCl7cmV0dXJuIEFhZShlLmEsdCk/ZS5iW2wodCwyMikuZ106bnVsbH1mdW5jdGlvbiBucG4oKXtyZXR1cm4gWnooKSxoZShsZShVX2UsMSksaXQsNDg5LDAsW0cwZV0pfWZ1bmN0aW9uIHJwbigpe3JldHVybiBucSgpLGhlKGxlKHdPZSwxKSxpdCw0OTAsMCxbYmdlXSl9ZnVuY3Rpb24gaXBuKCl7cmV0dXJuIHJxKCksaGUobGUoR0N0LDEpLGl0LDU1OCwwLFttZ2VdKX1mdW5jdGlvbiBzcG4oKXtyZXR1cm4gYl8oKSxoZShsZSgkT2UsMSksaXQsNTM5LDAsW3FCXSl9ZnVuY3Rpb24gRUgoZSl7cmV0dXJuIWUubiYmKGUubj1uZXcgbnQoZWMsZSwxLDcpKSxlLm59ZnVuY3Rpb24gWGFlKGUpe3JldHVybiFlLmMmJihlLmM9bmV3IG50KEhsLGUsOSw5KSksZS5jfWZ1bmN0aW9uIEE1ZShlKXtyZXR1cm4hZS5jJiYoZS5jPW5ldyBMbihfcixlLDUsOCkpLGUuY31mdW5jdGlvbiBhcG4oZSl7cmV0dXJuIWUuYiYmKGUuYj1uZXcgTG4oX3IsZSw0LDcpKSxlLmJ9ZnVuY3Rpb24gcU8oZSl7cmV0dXJuIGUuai5jLmxlbmd0aD0wLE01ZShlLmMpLFJmbihlLmEpLGV9ZnVuY3Rpb24gV2soZSl7cmV0dXJuIGUuZT09RVQmJmhuKGUsZTZuKGUuZyxlLmIpKSxlLmV9ZnVuY3Rpb24gSE8oZSl7cmV0dXJuIGUuZj09RVQmJkRuKGUsVTduKGUuZyxlLmIpKSxlLmZ9ZnVuY3Rpb24gRWkoZSx0LG4scil7cmV0dXJuIHFmdChlLHQsbiwhMSksalYoZSxyKSxlfWZ1bmN0aW9uIHlhdChlLHQpe3RoaXMuYj1lLGphZS5jYWxsKHRoaXMsZSx0KSxqbnQodGhpcyl9ZnVuY3Rpb24geGF0KGUsdCl7dGhpcy5iPWUsZjRlLmNhbGwodGhpcyxlLHQpLCRudCh0aGlzKX1mdW5jdGlvbiBuQShlKXt0aGlzLmQ9ZSx0aGlzLmE9dGhpcy5kLmIsdGhpcy5iPXRoaXMuZC5jfWZ1bmN0aW9uIEw1ZShlLHQpe3RoaXMuYj1lLHRoaXMuYz10LHRoaXMuYT1uZXcgUDgodGhpcy5iKX1mdW5jdGlvbiBjbyhlLHQpe3JldHVybiBYbih0LGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQodCl9ZnVuY3Rpb24gb3BuKGUsdCl7YjhlKGUsemUobnAodCwieCIpKSx6ZShucCh0LCJ5IikpKX1mdW5jdGlvbiBjcG4oZSx0KXtiOGUoZSx6ZShucCh0LCJ4IikpLHplKG5wKHQsInkiKSkpfWZ1bmN0aW9uIEZpKGUsdCl7cmV0dXJuIHhiKGUpLG5ldyBibihlLG5ldyAkNmUodCxlLmEpKX1mdW5jdGlvbiBmYyhlLHQpe3JldHVybiB4YihlKSxuZXcgYm4oZSxuZXcgQzZlKHQsZS5hKSl9ZnVuY3Rpb24geHkoZSx0KXtyZXR1cm4geGIoZSksbmV3IFZ5ZShlLG5ldyBNdXQodCxlLmEpKX1mdW5jdGlvbiBUSChlLHQpe3JldHVybiB4YihlKSxuZXcgVXllKGUsbmV3IER1dCh0LGUuYSkpfWZ1bmN0aW9uIHVwbihlLHQpe3JldHVybiBuZXcgVWF0KGwoWHIoZSksNTApLGwoWHIodCksNTApKX1mdW5jdGlvbiBscG4oZSx0KXtyZXR1cm4gWWkoZS5kLmMrZS5kLmIvMix0LmQuYyt0LmQuYi8yKX1mdW5jdGlvbiBrYXQoZSx0LG4pe24uYT9HdShlLHQuYi1lLmYvMik6VXUoZSx0LmEtZS5nLzIpfWZ1bmN0aW9uIGhwbihlLHQpe3JldHVybiBZaShlLmcuYytlLmcuYi8yLHQuZy5jK3QuZy5iLzIpfWZ1bmN0aW9uIGZwbihlLHQpe3JldHVybiB3M2UoKSxZaSgobnIoZSksZSksKG5yKHQpLHQpKX1mdW5jdGlvbiBkcG4oZSl7cmV0dXJuIGUhPW51bGwmJm5PKEVZLGUudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gTTVlKGUpe3ZhciB0O2Zvcih0PWUuS2MoKTt0Lk9iKCk7KXQuUGIoKSx0LlFiKCl9ZnVuY3Rpb24gVjUoZSl7dmFyIHQ7cmV0dXJuIHQ9ZS5iLCF0JiYoZS5iPXQ9bmV3IG1pZShlKSksdH1mdW5jdGlvbiBRYWUoZSl7dmFyIHQ7cmV0dXJuIHQ9UXduKGUpLHR8fG51bGx9ZnVuY3Rpb24gRWF0KGUsdCl7dmFyIG4scjtyZXR1cm4gbj1lL3Qscj11YShuKSxuPnImJisrcixyfWZ1bmN0aW9uIGdwbihlLHQsbil7dmFyIHI7cj1sKGUuZC5LYihuKSwxNTkpLHImJnIuTmIodCl9ZnVuY3Rpb24gcHBuKGUsdCxuKXttTG4oZS5hLG4pLFczbihuKSxSRW4oZS5iLG4pLFJMbih0LG4pfWZ1bmN0aW9uIENIKGUsdCxuLHIpe3RoaXMuYT1lLHRoaXMuYz10LHRoaXMuYj1uLHRoaXMuZD1yfWZ1bmN0aW9uIEQ1ZShlLHQsbixyKXt0aGlzLmM9ZSx0aGlzLmI9dCx0aGlzLmE9bix0aGlzLmQ9cn1mdW5jdGlvbiBUYXQoZSx0LG4scil7dGhpcy5jPWUsdGhpcy5iPXQsdGhpcy5kPW4sdGhpcy5hPXJ9ZnVuY3Rpb24gZWYoZSx0LG4scil7dGhpcy5jPWUsdGhpcy5kPXQsdGhpcy5iPW4sdGhpcy5hPXJ9ZnVuY3Rpb24gQ2F0KGUsdCxuLHIpe3RoaXMuYT1lLHRoaXMuZD10LHRoaXMuYz1uLHRoaXMuYj1yfWZ1bmN0aW9uIEphZShlLHQsbixyKXt0aGlzLmE9ZSx0aGlzLmU9dCx0aGlzLmQ9bix0aGlzLmM9cn1mdW5jdGlvbiBTYXQoZSx0LG4scil7dGhpcy5hPWUsdGhpcy5jPXQsdGhpcy5kPW4sdGhpcy5iPXJ9ZnVuY3Rpb24gWmFlKGUsdCxuKXt0aGlzLmE9aUVlLHRoaXMuZD1lLHRoaXMuYj10LHRoaXMuYz1ufWZ1bmN0aW9uIFo4KGUsdCxuLHIpe1VyLmNhbGwodGhpcyxlLHQpLHRoaXMuYT1uLHRoaXMuYj1yfWZ1bmN0aW9uIF9hdChlLHQpe3RoaXMuZD0obnIoZSksZSksdGhpcy5hPTE2NDQ5LHRoaXMuYz10fWZ1bmN0aW9uIEFhdChlKXt0aGlzLmE9bmV3IGJ0LHRoaXMuZT1XZShWcixkdCw1MyxlLDAsMil9ZnVuY3Rpb24gYnBuKGUpe2UuVWcoIk5vIGNyb3NzaW5nIG1pbmltaXphdGlvbiIsMSksZS5WZygpfWZ1bmN0aW9uIExhdCgpe0FjLmNhbGwodGhpcywiVGhlcmUgaXMgbm8gbW9yZSBlbGVtZW50LiIpfWZ1bmN0aW9uIE1hdChlLHQsbixyKXt0aGlzLmE9ZSx0aGlzLmI9dCx0aGlzLmM9bix0aGlzLmQ9cn1mdW5jdGlvbiBEYXQoZSx0LG4scil7dGhpcy5hPWUsdGhpcy5iPXQsdGhpcy5jPW4sdGhpcy5kPXJ9ZnVuY3Rpb24gT20oZSx0LG4scil7dGhpcy5lPWUsdGhpcy5hPXQsdGhpcy5jPW4sdGhpcy5kPXJ9ZnVuY3Rpb24gSWF0KGUsdCxuLHIpe3RoaXMuYT1lLHRoaXMuYz10LHRoaXMuZD1uLHRoaXMuYj1yfWZ1bmN0aW9uIE9hdChlLHQsbixyKXtKaCgpLEl1dC5jYWxsKHRoaXMsdCxuLHIpLHRoaXMuYT1lfWZ1bmN0aW9uIE5hdChlLHQsbixyKXtKaCgpLEl1dC5jYWxsKHRoaXMsdCxuLHIpLHRoaXMuYT1lfWZ1bmN0aW9uIGVvZShlLHQsbil7dmFyIHIsYTtyZXR1cm4gcj1Wa2UoZSksYT10LnRpKG4sciksYX1mdW5jdGlvbiBLZyhlKXt2YXIgdCxuO3JldHVybiBuPSh0PW5ldyBRdix0KSxzRShuLGUpLG59ZnVuY3Rpb24gdG9lKGUpe3ZhciB0LG47cmV0dXJuIG49KHQ9bmV3IFF2LHQpLEt4ZShuLGUpLG59ZnVuY3Rpb24gbXBuKGUsdCl7dmFyIG47cmV0dXJuIG49Y3IoZS5mLHQpLFM3ZSh0LG4pLG51bGx9ZnVuY3Rpb24gUGF0KGUpe3JldHVybiFlLmImJihlLmI9bmV3IG50KGpzLGUsMTIsMykpLGUuYn1mdW5jdGlvbiBCYXQoZSl7cmV0dXJuIFZfKGU9PW51bGx8fFJhZShlKSYmZS5UbSE9PXhlKSxlfWZ1bmN0aW9uIFNIKGUpe3JldHVybiBlLm4mJihlLmUhPT1Gd3QmJmUuamUoKSxlLmo9bnVsbCksZX1mdW5jdGlvbiBZayhlKXtpZihRbChlLmQpLGUuZC5kIT1lLmMpdGhyb3cgdWUobmV3IFhoKX1mdW5jdGlvbiBJNWUoZSl7cmV0dXJuIG1yKGUuYjxlLmQuZ2MoKSksZS5kLlhiKGUuYz1lLmIrKyl9ZnVuY3Rpb24gQ2goZSl7ZS5hLmE9ZS5jLGUuYy5iPWUuYSxlLmEuYj1lLmMuYT1udWxsLGUuYj0wfWZ1bmN0aW9uIG5vZShlKXt0aGlzLmY9ZSx0aGlzLmM9dGhpcy5mLmUsZS5mPjAmJmdndCh0aGlzKX1mdW5jdGlvbiBGYXQoZSx0KXt0aGlzLmE9ZSxiZm4uY2FsbCh0aGlzLGUsbChlLmQsMTUpLmZkKHQpKX1mdW5jdGlvbiB2cG4oZSx0KXtyZXR1cm4gWWkod2woZSkqZ2goZSksd2wodCkqZ2godCkpfWZ1bmN0aW9uIHdwbihlLHQpe3JldHVybiBZaSh3bChlKSpnaChlKSx3bCh0KSpnaCh0KSl9ZnVuY3Rpb24geXBuKGUpe3JldHVybiBxdyhlKSYmUnQoQnQoYXQoZSwoTnQoKSxndikpKSl9ZnVuY3Rpb24geHBuKGUsdCl7cmV0dXJuIHhuKGUsbChRKHQsKE50KCksSFQpKSwxNyksdCl9ZnVuY3Rpb24ga3BuKGUsdCl7cmV0dXJuIGwoUShlLChmdCgpLFd4KSksMTUpLkZjKHQpLHR9ZnVuY3Rpb24gTzVlKGUsdCl7cmV0dXJuIGUuYj10LmIsZS5jPXQuYyxlLmQ9dC5kLGUuYT10LmEsZX1mdW5jdGlvbiBSYXQoZSx0LG4scil7dGhpcy5iPWUsdGhpcy5jPXIsRHEuY2FsbCh0aGlzLHQsbil9ZnVuY3Rpb24gRXBuKGUsdCxuKXtlLmk9MCxlLmU9MCx0IT1uJiZ4MHQoZSx0LG4pfWZ1bmN0aW9uIFRwbihlLHQsbil7ZS5pPTAsZS5lPTAsdCE9biYmazB0KGUsdCxuKX1mdW5jdGlvbiBDcG4oZSx0LG4pe3JldHVybiBwXygpLEo0bihsKGNyKGUuZSx0KSw1MjkpLG4pfWZ1bmN0aW9uIGV4KGUpe3ZhciB0O3JldHVybiB0PWUuZix0fHwoZS5mPW5ldyBMayhlLGUuYykpfWZ1bmN0aW9uIGphdChlLHQpe3JldHVybiBlNihlLmosdC5zLHQuYykrZTYodC5lLGUucyxlLmMpfWZ1bmN0aW9uICRhdChlLHQpe2UuZSYmIWUuZS5hJiYoQ1FlKGUuZSx0KSwkYXQoZS5lLHQpKX1mdW5jdGlvbiB6YXQoZSx0KXtlLmQmJiFlLmQuYSYmKENRZShlLmQsdCksemF0KGUuZCx0KSl9ZnVuY3Rpb24gU3BuKGUsdCl7cmV0dXJuLVlpKHdsKGUpKmdoKGUpLHdsKHQpKmdoKHQpKX1mdW5jdGlvbiBfcG4oZSl7cmV0dXJuIGwoZS5sZCgpLDE0OSkuUGcoKSsiOiIreGMoZS5tZCgpKX1mdW5jdGlvbiBxYXQoKXtOdWUodGhpcyxuZXcgZnopLHRoaXMud2I9KGxiKCksVm4pLFNrKCl9ZnVuY3Rpb24gSGF0KGUpe3RoaXMuYj1uZXcgYnQscmEodGhpcy5iLHRoaXMuYiksdGhpcy5hPWV9ZnVuY3Rpb24gTjVlKGUsdCl7bmV3IG9zLHRoaXMuYT1uZXcgYmwsdGhpcy5iPWUsdGhpcy5jPXR9ZnVuY3Rpb24gRXcoKXtFdz1VLGRfZT1uZXcgS2UsRDBlPW5ldyBLZSxnX2U9bmV3IEZ0fWZ1bmN0aW9uIENuKCl7Q249VSxfbz1uZXcgamUsbWc9bmV3IFNlLGhLPW5ldyBDZX1mdW5jdGlvbiBQNWUoKXtQNWU9VSxqNnQ9bmV3IHdvLHo2dD1uZXcgWDRlLCQ2dD1uZXcgX3N9ZnVuY3Rpb24gdHgoKXt0eD1VLHdLPW5ldyBidCxYMGU9bmV3IFByLFkwZT1uZXcgYnR9ZnVuY3Rpb24gX0goZSx0KXtpZihlPT1udWxsKXRocm93IHVlKG5ldyBEOCh0KSk7cmV0dXJuIGV9ZnVuY3Rpb24gQUgoZSl7cmV0dXJuIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYX1mdW5jdGlvbiBxaShlKXtyZXR1cm4hZS5xJiYoZS5xPW5ldyBudChVZixlLDExLDEwKSksZS5xfWZ1bmN0aW9uIHR0KGUpe3JldHVybiFlLnMmJihlLnM9bmV3IG50KGRsLGUsMjEsMTcpKSxlLnN9ZnVuY3Rpb24gQXBuKGUpe3JldHVybiBYcihlKSxNZHQobmV3IGhyKGRyKGUuYS5LYygpLG5ldyBqKSkpfWZ1bmN0aW9uIExwbihlLHQpe3JldHVybiBiaChlKSxiaCh0KSxQSmUobChlLDIyKSxsKHQsMjIpKX1mdW5jdGlvbiBObShlLHQsbil7dmFyIHIsYTtyPWc0ZShuKSxhPW5ldyB2ayhyKSxlMShlLHQsYSl9ZnVuY3Rpb24gcm9lKGUsdCxuLHIsYSxvKXtzTi5jYWxsKHRoaXMsZSx0LG4scixhLG8/LTI6LTEpfWZ1bmN0aW9uIFZhdChlLHQsbixyKXt0eWUuY2FsbCh0aGlzLHQsbiksdGhpcy5iPWUsdGhpcy5hPXJ9ZnVuY3Rpb24gVWF0KGUsdCl7WGNuLmNhbGwodGhpcyxuZXcgUGFlKGUpKSx0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBCNWUoZSl7dGhpcy5iPWUsdGhpcy5jPWUsZS5lPW51bGwsZS5jPW51bGwsdGhpcy5hPTF9ZnVuY3Rpb24gTXBuKGUpe3UwKCk7dmFyIHQ7dD1sKGUuZywxMCksdC5uLmE9ZS5kLmMrdC5kLmJ9ZnVuY3Rpb24gWGsoKXtYaz1VO3ZhciBlLHQ7dD0hRjVuKCksZT1uZXcgc2UsUzBlPXQ/bmV3IG5lOmV9ZnVuY3Rpb24gaW9lKGUpe3JldHVybiBDbigpLERlKGUsNTkpP25ldyBlc2UoZSk6bmV3IGpxKGUpfWZ1bmN0aW9uIExIKGUpe3JldHVybiBEZShlLDE2KT9uZXcgVV8obChlLDE2KSk6dWRuKGUuS2MoKSl9ZnVuY3Rpb24gRHBuKGUpe3JldHVybiBuZXcgcW50KGUsZS5lLlJkKCkuZ2MoKSplLmMuUmQoKS5nYygpKX1mdW5jdGlvbiBJcG4oZSl7cmV0dXJuIG5ldyBIbnQoZSxlLmUuUmQoKS5nYygpKmUuYy5SZCgpLmdjKCkpfWZ1bmN0aW9uIEY1ZShlKXtyZXR1cm4gZSYmZS5oYXNoQ29kZT9lLmhhc2hDb2RlKCk6ZncoZSl9ZnVuY3Rpb24gc29lKGUsdCl7cmV0dXJuIHQ9PW51bGw/ISF6byhlLmYsbnVsbCk6V2RuKGUuaSx0KX1mdW5jdGlvbiBPcG4oZSx0KXt2YXIgbjtyZXR1cm4gbj13eWUoZS5hLHQpLG4mJih0LmQ9bnVsbCksbn1mdW5jdGlvbiBHYXQoZSx0LG4pe3JldHVybiBlLmY/ZS5mLmVmKHQsbik6ITF9ZnVuY3Rpb24gVk8oZSx0LG4scil7VHMoZS5jW3QuZ10sbi5nLHIpLFRzKGUuY1tuLmddLHQuZyxyKX1mdW5jdGlvbiBhb2UoZSx0LG4scil7VHMoZS5jW3QuZ10sdC5nLG4pLFRzKGUuYlt0LmddLHQuZyxyKX1mdW5jdGlvbiBOcG4oZSx0LG4pe3JldHVybiB6ZShHZShuLmEpKTw9ZSYmemUoR2Uobi5iKSk+PXR9ZnVuY3Rpb24gS2F0KGUsdCl7dGhpcy5nPWUsdGhpcy5kPWhlKGxlKHdnLDEpLG0yLDEwLDAsW3RdKX1mdW5jdGlvbiBXYXQoZSl7dGhpcy5jPWUsdGhpcy5iPW5ldyBLcChsKFhyKG5ldyB0bCksNTApKX1mdW5jdGlvbiBZYXQoZSl7dGhpcy5jPWUsdGhpcy5iPW5ldyBLcChsKFhyKG5ldyBsNSksNTApKX1mdW5jdGlvbiBYYXQoZSl7dGhpcy5iPWUsdGhpcy5hPW5ldyBLcChsKFhyKG5ldyBCaSksNTApKX1mdW5jdGlvbiBRYXQoKXt0aGlzLmI9bmV3IEtzLHRoaXMuZD1uZXcgb3MsdGhpcy5lPW5ldyBGd2V9ZnVuY3Rpb24gUjVlKCl7dGhpcy5jPW5ldyBxYSx0aGlzLmQ9bmV3IHFhLHRoaXMuZT1uZXcgcWF9ZnVuY3Rpb24gVHcoKXt0aGlzLmE9bmV3IGJsLHRoaXMuYj0oTWgoMyxZeSksbmV3IEJ1KDMpKX1mdW5jdGlvbiBKcChlLHQpe3RoaXMuZT1lLHRoaXMuYT13YSx0aGlzLmI9UWJ0KHQpLHRoaXMuYz10fWZ1bmN0aW9uIE1IKGUpe3RoaXMuYz1lLmMsdGhpcy5kPWUuZCx0aGlzLmI9ZS5iLHRoaXMuYT1lLmF9ZnVuY3Rpb24gSmF0KGUsdCxuLHIsYSxvKXt0aGlzLmE9ZSxKb2UuY2FsbCh0aGlzLHQsbixyLGEsbyl9ZnVuY3Rpb24gWmF0KGUsdCxuLHIsYSxvKXt0aGlzLmE9ZSxKb2UuY2FsbCh0aGlzLHQsbixyLGEsbyl9ZnVuY3Rpb24gZGIoZSx0LG4scixhLG8sZil7cmV0dXJuIG5ldyBFb2UoZS5lLHQsbixyLGEsbyxmKX1mdW5jdGlvbiBQcG4oZSx0LG4pe3JldHVybiBuPj0wJiZ2bihlLnN1YnN0cihuLHQubGVuZ3RoKSx0KX1mdW5jdGlvbiBlb3QoZSx0KXtyZXR1cm4gRGUodCwxNDkpJiZ2bihlLmIsbCh0LDE0OSkuUGcoKSl9ZnVuY3Rpb24gQnBuKGUsdCl7cmV0dXJuIGUuYT90LkdoKCkuS2MoKTpsKHQuR2goKSw3MSkuSWkoKX1mdW5jdGlvbiB0b3QoZSx0KXt2YXIgbjtyZXR1cm4gbj1lLmIuUWModCksWWN0KG4sZS5iLmdjKCkpLG59ZnVuY3Rpb24gVU8oZSx0KXtpZihlPT1udWxsKXRocm93IHVlKG5ldyBEOCh0KSk7cmV0dXJuIGV9ZnVuY3Rpb24gZGMoZSl7cmV0dXJuIGUudXx8KFlsKGUpLGUudT1uZXcgTnJ0KGUsZSkpLGUudX1mdW5jdGlvbiBvb2UoZSl7dGhpcy5hPShDbigpLERlKGUsNTkpP25ldyBlc2UoZSk6bmV3IGpxKGUpKX1mdW5jdGlvbiBzbChlKXt2YXIgdDtyZXR1cm4gdD1sKEtuKGUsMTYpLDI5KSx0fHxlLmlpKCl9ZnVuY3Rpb24gREgoZSx0KXt2YXIgbjtyZXR1cm4gbj1fbShlLlJtKSx0PT1udWxsP246bisiOiAiK3R9ZnVuY3Rpb24gdGYoZSx0LG4pe3JldHVybiBHYSh0LG4sZS5sZW5ndGgpLGUuc3Vic3RyKHQsbi10KX1mdW5jdGlvbiBub3QoZSx0KXtWcS5jYWxsKHRoaXMpLFk2ZSh0aGlzKSx0aGlzLmE9ZSx0aGlzLmM9dH1mdW5jdGlvbiBGcG4oZSl7ZSYmREgoZSxlLmllKCkpfWZ1bmN0aW9uIFJwbihlKXtIeigpLGIuc2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IGV9LDApfWZ1bmN0aW9uIGpwbigpe3JldHVybiBaVigpLGhlKGxlKGtfZSwxKSxpdCw0MzYsMCxbajBlLHhfZV0pfWZ1bmN0aW9uICRwbigpe3JldHVybiBhVigpLGhlKGxlKFRfZSwxKSxpdCw0MzUsMCxbRV9lLCQwZV0pfWZ1bmN0aW9uIHpwbigpe3JldHVybiBvVigpLGhlKGxlKEpfZSwxKSxpdCw0MzIsMCxbUTBlLHlLXSl9ZnVuY3Rpb24gcXBuKCl7cmV0dXJuIGRFKCksaGUobGUoJDh0LDEpLGl0LDUxNywwLFtkQixoMWVdKX1mdW5jdGlvbiBIcG4oKXtyZXR1cm4gekgoKSxoZShsZShQTGUsMSksaXQsNDI5LDAsW3oxZSxOTGVdKX1mdW5jdGlvbiBWcG4oKXtyZXR1cm4gcE4oKSxoZShsZSh3TGUsMSksaXQsNDI4LDAsW1hLLHZMZV0pfWZ1bmN0aW9uIFVwbigpe3JldHVybiBKSCgpLGhlKGxlKGhMZSwxKSxpdCw0MzEsMCxbbExlLFMxZV0pfWZ1bmN0aW9uIEdwbigpe3JldHVybiBkTigpLGhlKGxlKF9EZSwxKSxpdCw0MzAsMCxba2RlLEVkZV0pfWZ1bmN0aW9uIEtwbigpe3JldHVybiBvQSgpLGhlKGxlKERFdCwxKSxpdCw1MzEsMCxbdU0sY01dKX1mdW5jdGlvbiBXcG4oKXtyZXR1cm4ga1YoKSxoZShsZShFSWUsMSksaXQsNTAxLDAsWyRXLFg2XSl9ZnVuY3Rpb24gWXBuKCl7cmV0dXJuIHhkKCksaGUobGUoUkV0LDEpLGl0LDUyMywwLFt3MyxUMl0pfWZ1bmN0aW9uIFhwbigpe3JldHVybiBEMSgpLGhlKGxlKCRFdCwxKSxpdCw1MjIsMCxbd3YsWTFdKX1mdW5jdGlvbiBRcG4oKXtyZXR1cm4gSjAoKSxoZShsZSh0VHQsMSksaXQsNTI4LDAsW0U0LHFiXSl9ZnVuY3Rpb24gSnBuKCl7cmV0dXJuIGNOKCksaGUobGUoa0xlLDEpLGl0LDQ4OCwwLFt4TGUsSktdKX1mdW5jdGlvbiBacG4oKXtyZXR1cm4gR0goKSxoZShsZShmT2UsMSksaXQsNDkxLDAsW2RnZSxoT2VdKX1mdW5jdGlvbiBlMm4oKXtyZXR1cm4gZmNlKCksaGUobGUodk9lLDEpLGl0LDQ5MiwwLFtiT2UsbU9lXSl9ZnVuY3Rpb24gdDJuKCl7cmV0dXJuIFJIKCksaGUobGUoa0llLDEpLGl0LDQzMywwLFtVZGUseEllXSl9ZnVuY3Rpb24gbjJuKCl7cmV0dXJuIGVWKCksaGUobGUoQ0llLDEpLGl0LDQzNCwwLFtUSWUsUWRlXSl9ZnVuY3Rpb24gcjJuKCl7cmV0dXJuIFN3KCksaGUobGUoY1R0LDEpLGl0LDQ2NSwwLFtIYixLNl0pfWZ1bmN0aW9uIGkybigpe3JldHVybiByTigpLGhlKGxlKHlPZSwxKSxpdCw0MzgsMCxbdmdlLFFXXSl9ZnVuY3Rpb24gczJuKCl7cmV0dXJuIENOKCksaGUobGUocU9lLDEpLGl0LDQzNywwLFtaVyx6T2VdKX1mdW5jdGlvbiBhMm4oKXtyZXR1cm4gbWFlKCksaGUobGUoZ1ksMSksaXQsMzQ3LDAsW3JQZSxpUGVdKX1mdW5jdGlvbiBJSChlLHQsbixyKXtyZXR1cm4gbj49MD9lLlVoKHQsbixyKTplLkNoKG51bGwsbixyKX1mdW5jdGlvbiBHTyhlKXtyZXR1cm4gZS5iLmI9PTA/ZS5hLnNmKCk6a2FlKGUuYil9ZnVuY3Rpb24gbzJuKGUpe2lmKGUucCE9NSl0aHJvdyB1ZShuZXcgcGwpO3JldHVybiBZcihlLmYpfWZ1bmN0aW9uIGMybihlKXtpZihlLnAhPTUpdGhyb3cgdWUobmV3IHBsKTtyZXR1cm4gWXIoZS5rKX1mdW5jdGlvbiBqNWUoZSl7cmV0dXJuIHFlKGUuYSk9PT1xZSgobGNlKCksbnBlKSkmJmFNbihlKSxlLmF9ZnVuY3Rpb24gdTJuKGUsdCl7ZS5iPXQsZS5jPjAmJmUuYj4wJiYoZS5nPWFIKGUuYyxlLmIsZS5hKSl9ZnVuY3Rpb24gbDJuKGUsdCl7ZS5jPXQsZS5jPjAmJmUuYj4wJiYoZS5nPWFIKGUuYyxlLmIsZS5hKSl9ZnVuY3Rpb24gcm90KGUsdCl7Y2UodGhpcyxuZXcgbHQoZS5hLGUuYikpLHZlKHRoaXMsUE8odCkpfWZ1bmN0aW9uIEN3KCl7UWNuLmNhbGwodGhpcyxuZXcgTjgoQXkoMTIpKSksVHllKCEwKSx0aGlzLmE9Mn1mdW5jdGlvbiBjb2UoZSx0LG4pe0RpKCksWHYuY2FsbCh0aGlzLGUpLHRoaXMuYj10LHRoaXMuYT1ufWZ1bmN0aW9uICQ1ZShlLHQsbil7SmgoKSxOei5jYWxsKHRoaXMsdCksdGhpcy5hPWUsdGhpcy5iPW59ZnVuY3Rpb24gaW90KGUpe3ZhciB0O3Q9ZS5jLmQuYixlLmI9dCxlLmE9ZS5jLmQsdC5hPWUuYy5kLmI9ZX1mdW5jdGlvbiBoMm4oZSl7cmV0dXJuIGUuYj09MD9udWxsOihtcihlLmIhPTApLGFmKGUsZS5hLmEpKX1mdW5jdGlvbiB4dShlLHQpe3JldHVybiB0PT1udWxsP2hjKHpvKGUuZixudWxsKSk6eV8oZS5pLHQpfWZ1bmN0aW9uIHNvdChlLHQsbixyLGEpe3JldHVybiBuZXcgQnVlKGUsKHJFKCksUDBlKSx0LG4scixhKX1mdW5jdGlvbiBPSChlLHQpe3JldHVybiBHY3QodCksUHduKGUsV2UoVnIsZGksMjgsdCwxNSwxKSx0KX1mdW5jdGlvbiBOSChlLHQpe3JldHVybiBfSChlLCJzZXQxIiksX0godCwic2V0MiIpLG5ldyBHWmUoZSx0KX1mdW5jdGlvbiBmMm4oZSx0KXt2YXIgbj1DMGVbZS5jaGFyQ29kZUF0KDApXTtyZXR1cm4gbj8/ZX1mdW5jdGlvbiBhb3QoZSx0KXt2YXIgbixyO3JldHVybiBuPXQscj1uZXcgeHQsT3Z0KGUsbixyKSxyLmR9ZnVuY3Rpb24gdW9lKGUsdCxuLHIpe3ZhciBhO2E9bmV3IEZydCx0LmFbbi5nXT1hLFE4KGUuYixyLGEpfWZ1bmN0aW9uIGQybihlLHQpe3ZhciBuO3JldHVybiBuPUl3bihlLmYsdCksT2koSHEobiksZS5mLmQpfWZ1bmN0aW9uIEtPKGUpe3ZhciB0O0h3bihlLmEpLGRudChlLmEpLHQ9bmV3IGVfKGUuYSksUzhlKHQpfWZ1bmN0aW9uIGcybihlLHQpe3pidChlLCEwKSxWdShlLmUuUmYoKSxuZXcgdjRlKGUsITAsdCkpfWZ1bmN0aW9uIHAybihlLHQpe3JldHVybiB0eCgpLGU9PWRzKGNnKHQpKXx8ZT09ZHMoRWIodCkpfWZ1bmN0aW9uIGIybihlLHQpe3JldHVybiB0cCgpLGwoUSh0LChIYygpLCRkKSksMTcpLmE9PWV9ZnVuY3Rpb24gdWEoZSl7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKGUsSWkpLC0yMTQ3NDgzNjQ4KXwwfWZ1bmN0aW9uIG9vdChlKXt0aGlzLmE9bChYcihlKSwyNzcpLHRoaXMuYj0oQ24oKSxuZXcgRHllKGUpKX1mdW5jdGlvbiBjb3QoZSx0LG4pe3RoaXMuaT1uZXcgYnQsdGhpcy5iPWUsdGhpcy5nPXQsdGhpcy5hPW59ZnVuY3Rpb24gejVlKGUsdCxuKXt0aGlzLmE9bmV3IGJ0LHRoaXMuZT1lLHRoaXMuZj10LHRoaXMuYz1ufWZ1bmN0aW9uIFBIKGUsdCxuKXt0aGlzLmM9bmV3IGJ0LHRoaXMuZT1lLHRoaXMuZj10LHRoaXMuYj1ufWZ1bmN0aW9uIHVvdChlKXtWcS5jYWxsKHRoaXMpLFk2ZSh0aGlzKSx0aGlzLmE9ZSx0aGlzLmM9ITB9ZnVuY3Rpb24gbTJuKGUpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlPWV8fHt9LG5ldyB0fWZ1bmN0aW9uIHYybihlKXtpZihlLkFlKCkpcmV0dXJuIG51bGw7dmFyIHQ9ZS5uO3JldHVybiBzS1t0XX1mdW5jdGlvbiBXTyhlKXtyZXR1cm4gZS5EYj4+MTYhPTM/bnVsbDpsKGUuQ2IsMjcpfWZ1bmN0aW9uIE0xKGUpe3JldHVybiBlLkRiPj4xNiE9OT9udWxsOmwoZS5DYiwyNyl9ZnVuY3Rpb24gbG90KGUpe3JldHVybiBlLkRiPj4xNiE9Nj9udWxsOmwoZS5DYiw3NCl9ZnVuY3Rpb24gU3coKXtTdz1VLEhiPW5ldyBIM2UoTXgsMCksSzY9bmV3IEgzZShEeCwxKX1mdW5jdGlvbiB4ZCgpe3hkPVUsdzM9bmV3ICQzZShEeCwwKSxUMj1uZXcgJDNlKE14LDEpfWZ1bmN0aW9uIEQxKCl7RDE9VSx3dj1uZXcgejNlKHdoZSwwKSxZMT1uZXcgejNlKCJVUCIsMSl9ZnVuY3Rpb24gaG90KCl7aG90PVUsbzZ0PUtyKCgkeigpLGhlKGxlKGE2dCwxKSxpdCw1NDksMCxbRTBlXSkpKX1mdW5jdGlvbiBmb3QoZSl7dmFyIHQ7cmV0dXJuIHQ9bmV3IEt6KEF5KGUubGVuZ3RoKSksajdlKHQsZSksdH1mdW5jdGlvbiBkb3QoZSx0KXtyZXR1cm4gZS5iKz10LmIsZS5jKz10LmMsZS5kKz10LmQsZS5hKz10LmEsZX1mdW5jdGlvbiB3Mm4oZSx0KXtyZXR1cm4gWmZ0KGUsdCk/KFlodChlKSwhMCk6ITF9ZnVuY3Rpb24gV2coZSx0KXtpZih0PT1udWxsKXRocm93IHVlKG5ldyBTOCk7cmV0dXJuIGo1bihlLHQpfWZ1bmN0aW9uIFlPKGUsdCl7dmFyIG47bj1lLnEuZ2V0SG91cnMoKSxlLnEuc2V0RGF0ZSh0KSxYQShlLG4pfWZ1bmN0aW9uIHE1ZShlLHQsbil7dmFyIHI7cj1lLkloKHQpLHI+PTA/ZS5iaShyLG4pOiQ5ZShlLHQsbil9ZnVuY3Rpb24gZ290KGUsdCl7dmFyIG47cmV0dXJuIG49ZS5JaCh0KSxuPj0wP2UuV2gobik6cXVlKGUsdCl9ZnVuY3Rpb24gcG90KGUsdCl7dmFyIG47Zm9yKFhyKHQpLG49ZS5hO247bj1uLmMpdC5ZZChuLmcsbi5pKX1mdW5jdGlvbiBsb2UoZSx0LG4pe3ZhciByO3I9dzB0KGUsdCxuKSxlLmI9bmV3IFRWKHIuYy5sZW5ndGgpfWZ1bmN0aW9uIFU1KGUsdCxuKXtCSCgpLGUmJmtpKFpnZSxlLHQpLGUmJmtpKGxGLGUsbil9ZnVuY3Rpb24geTJuKGUsdCl7cmV0dXJuIFlxKCksSG4oKSxsKHQuYSwxNykuYTxlfWZ1bmN0aW9uIHgybihlLHQpe3JldHVybiBZcSgpLEhuKCksbCh0LmIsMTcpLmE8ZX1mdW5jdGlvbiBob2UoZSx0KXtyZXR1cm4gYi5NYXRoLmFicyhlKTxiLk1hdGguYWJzKHQpP2U6dH1mdW5jdGlvbiBrMm4oZSl7cmV0dXJuIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYS5pPjB9ZnVuY3Rpb24gSDVlKGUpe3ZhciB0O3JldHVybiB0PWUuZCx0PWUuYmooZS5mKSxxcihlLHQpLHQuT2IoKX1mdW5jdGlvbiBib3QoZSx0KXt2YXIgbjtyZXR1cm4gbj1uZXcgSzRlKHQpLHpndChuLGUpLG5ldyBPbChuKX1mdW5jdGlvbiBFMm4oZSl7aWYoZS5wIT0wKXRocm93IHVlKG5ldyBwbCk7cmV0dXJuIElfKGUuZiwwKX1mdW5jdGlvbiBUMm4oZSl7aWYoZS5wIT0wKXRocm93IHVlKG5ldyBwbCk7cmV0dXJuIElfKGUuaywwKX1mdW5jdGlvbiBtb3QoZSl7cmV0dXJuIGUuRGI+PjE2IT03P251bGw6bChlLkNiLDI0MSl9ZnVuY3Rpb24gUWsoZSl7cmV0dXJuIGUuRGI+PjE2IT02P251bGw6bChlLkNiLDI0MSl9ZnVuY3Rpb24gdm90KGUpe3JldHVybiBlLkRiPj4xNiE9Nz9udWxsOmwoZS5DYiwxNjcpfWZ1bmN0aW9uIGRzKGUpe3JldHVybiBlLkRiPj4xNiE9MTE/bnVsbDpsKGUuQ2IsMjcpfWZ1bmN0aW9uIGt5KGUpe3JldHVybiBlLkRiPj4xNiE9MTc/bnVsbDpsKGUuQ2IsMjkpfWZ1bmN0aW9uIHdvdChlKXtyZXR1cm4gZS5EYj4+MTYhPTM/bnVsbDpsKGUuQ2IsMTU1KX1mdW5jdGlvbiBWNWUoZSl7dmFyIHQ7cmV0dXJuIHhiKGUpLHQ9bmV3IEtzLEZpKGUsbmV3IGs1KHQpKX1mdW5jdGlvbiB5b3QoZSx0KXt2YXIgbj1lLmE9ZS5hfHxbXTtyZXR1cm4gblt0XXx8KG5bdF09ZS52ZSh0KSl9ZnVuY3Rpb24gQzJuKGUsdCl7dmFyIG47bj1lLnEuZ2V0SG91cnMoKSxlLnEuc2V0TW9udGgodCksWEEoZSxuKX1mdW5jdGlvbiB4b3QoZSx0KXtGcSh0aGlzKSx0aGlzLmY9dCx0aGlzLmc9ZSxTSCh0aGlzKSx0aGlzLmplKCl9ZnVuY3Rpb24ga290KGUsdCl7dGhpcy5hPWUsdGhpcy5jPUphKHRoaXMuYSksdGhpcy5iPW5ldyBNSCh0KX1mdW5jdGlvbiBFb3QoZSx0LG4pe3RoaXMuYT10LHRoaXMuYz1lLHRoaXMuYj0oWHIobiksbmV3IE9sKG4pKX1mdW5jdGlvbiBUb3QoZSx0LG4pe3RoaXMuYT10LHRoaXMuYz1lLHRoaXMuYj0oWHIobiksbmV3IE9sKG4pKX1mdW5jdGlvbiBDb3QoZSl7dGhpcy5hPWUsdGhpcy5iPVdlKEFFdCxkdCwyMDQzLGUuZS5sZW5ndGgsMCwyKX1mdW5jdGlvbiBTb3QoKXt0aGlzLmE9bmV3IGJkLHRoaXMuZT1uZXcgS3MsdGhpcy5nPTAsdGhpcy5pPTB9ZnVuY3Rpb24gQkgoKXtCSD1VLFpnZT1uZXcgUHIsbEY9bmV3IFByLHdsbihDNnQsbmV3IExTKX1mdW5jdGlvbiBfb3QoKXtfb3Q9VSxmRXQ9eWwobmV3IFhzLCh1bygpLG1jKSwodm8oKSxnQikpfWZ1bmN0aW9uIFU1ZSgpe1U1ZT1VLGRFdD15bChuZXcgWHMsKHVvKCksbWMpLCh2bygpLGdCKSl9ZnVuY3Rpb24gQW90KCl7QW90PVUscEV0PXlsKG5ldyBYcywodW8oKSxtYyksKHZvKCksZ0IpKX1mdW5jdGlvbiBMb3QoKXtMb3Q9VSxPRXQ9ZmkobmV3IFhzLCh1bygpLG1jKSwodm8oKSx6TCkpfWZ1bmN0aW9uIFNoKCl7U2g9VSxCRXQ9ZmkobmV3IFhzLCh1bygpLG1jKSwodm8oKSx6TCkpfWZ1bmN0aW9uIE1vdCgpe01vdD1VLEZFdD1maShuZXcgWHMsKHVvKCksbWMpLCh2bygpLHpMKSl9ZnVuY3Rpb24gZm9lKCl7Zm9lPVUscUV0PWZpKG5ldyBYcywodW8oKSxtYyksKHZvKCksekwpKX1mdW5jdGlvbiByQShlLHQsbixyLGEsbyl7cmV0dXJuIG5ldyBaZyhlLmUsdCxlLkxqKCksbixyLGEsbyl9ZnVuY3Rpb24gcmMoZSx0LG4pe3JldHVybiB0PT1udWxsP2p1KGUuZixudWxsLG4pOkJ3KGUuaSx0LG4pfWZ1bmN0aW9uIHBvKGUsdCl7ZS5jJiZhbChlLmMuZyxlKSxlLmM9dCxlLmMmJnZ0KGUuYy5nLGUpfWZ1bmN0aW9uIFZhKGUsdCl7ZS5jJiZhbChlLmMuYSxlKSxlLmM9dCxlLmMmJnZ0KGUuYy5hLGUpfWZ1bmN0aW9uIE1jKGUsdCl7ZS5pJiZhbChlLmkuaixlKSxlLmk9dCxlLmkmJnZ0KGUuaS5qLGUpfWZ1bmN0aW9uIEZhKGUsdCl7ZS5kJiZhbChlLmQuZSxlKSxlLmQ9dCxlLmQmJnZ0KGUuZC5lLGUpfWZ1bmN0aW9uIGRvZShlLHQpe2UuYSYmYWwoZS5hLmssZSksZS5hPXQsZS5hJiZ2dChlLmEuayxlKX1mdW5jdGlvbiBnb2UoZSx0KXtlLmImJmFsKGUuYi5mLGUpLGUuYj10LGUuYiYmdnQoZS5iLmYsZSl9ZnVuY3Rpb24gRG90KGUsdCl7RmduKGUsZS5iLGUuYyksbChlLmIuYiw2OCksdCYmbCh0LmIsNjgpLmJ9ZnVuY3Rpb24gUzJuKGUsdCl7cmV0dXJuIFlpKGwoZS5jLDY1KS5jLmUuYixsKHQuYyw2NSkuYy5lLmIpfWZ1bmN0aW9uIF8ybihlLHQpe3JldHVybiBZaShsKGUuYyw2NSkuYy5lLmEsbCh0LmMsNjUpLmMuZS5hKX1mdW5jdGlvbiBBMm4oZSl7cmV0dXJuIE1jZSgpLEhuKCksbChlLmEsODYpLmQuZSE9MH1mdW5jdGlvbiBGSChlLHQpe0RlKGUuQ2IsMTg0KSYmKGwoZS5DYiwxODQpLnRiPW51bGwpLEZ1KGUsdCl9ZnVuY3Rpb24gcG9lKGUsdCl7RGUoZS5DYiw5MCkmJnp5KFlsKGwoZS5DYiw5MCkpLDQpLEZ1KGUsdCl9ZnVuY3Rpb24gTDJuKGUsdCl7bThlKGUsdCksRGUoZS5DYiw5MCkmJnp5KFlsKGwoZS5DYiw5MCkpLDIpfWZ1bmN0aW9uIE0ybihlLHQpe3ZhciBuLHI7bj10LmMscj1uIT1udWxsLHImJko4KGUsbmV3IHl5KHQuYykpfWZ1bmN0aW9uIElvdChlKXt2YXIgdCxuO3JldHVybiBuPShTaygpLHQ9bmV3IFF2LHQpLHNFKG4sZSksbn1mdW5jdGlvbiBPb3QoZSl7dmFyIHQsbjtyZXR1cm4gbj0oU2soKSx0PW5ldyBRdix0KSxzRShuLGUpLG59ZnVuY3Rpb24gTm90KGUpe2Zvcih2YXIgdDs7KWlmKHQ9ZS5QYigpLCFlLk9iKCkpcmV0dXJuIHR9ZnVuY3Rpb24gRDJuKGUsdCxuKXtyZXR1cm4gdnQoZS5hLChrSCgpLGZ1ZSh0LG4pLG5ldyBpdyh0LG4pKSksZX1mdW5jdGlvbiBrdShlLHQpe3JldHVybiBGbygpLFZvZSh0KT9uZXcgbkgodCxlKTpuZXcgeU8odCxlKX1mdW5jdGlvbiBYTyhlKXtyZXR1cm4gQ2QoKSxpdShlLDApPj0wP2tiKGUpOkpfKGtiKHIyKGUpKSl9ZnVuY3Rpb24gSTJuKGUpe3ZhciB0O3JldHVybiB0PWwoZUgoZS5iKSw5KSxuZXcgWmgoZS5hLHQsZS5jKX1mdW5jdGlvbiBQb3QoZSx0KXt2YXIgbjtyZXR1cm4gbj1sKE95KGV4KGUuYSksdCksMTYpLG4/bi5nYygpOjB9ZnVuY3Rpb24gQm90KGUsdCxuKXt2YXIgcjtvMXQodCxuLGUuYy5sZW5ndGgpLHI9bi10LGQzZShlLmMsdCxyKX1mdW5jdGlvbiBacChlLHQsbil7bzF0KHQsbixlLmdjKCkpLHRoaXMuYz1lLHRoaXMuYT10LHRoaXMuYj1uLXR9ZnVuY3Rpb24gbngoZSl7dGhpcy5jPW5ldyBvcyx0aGlzLmI9ZS5iLHRoaXMuZD1lLmMsdGhpcy5hPWUuYX1mdW5jdGlvbiBib2UoZSl7dGhpcy5hPWIuTWF0aC5jb3MoZSksdGhpcy5iPWIuTWF0aC5zaW4oZSl9ZnVuY3Rpb24gUG0oZSx0LG4scil7dGhpcy5jPWUsdGhpcy5kPXIsZG9lKHRoaXMsdCksZ29lKHRoaXMsbil9ZnVuY3Rpb24gRzVlKGUsdCl7WWNuLmNhbGwodGhpcyxuZXcgTjgoQXkoZSkpKSxNaCh0LER3dCksdGhpcy5hPXR9ZnVuY3Rpb24gRm90KGUsdCxuKXtyZXR1cm4gbmV3IEJ1ZShlLChyRSgpLE4wZSksbnVsbCwhMSx0LG4pfWZ1bmN0aW9uIFJvdChlLHQsbil7cmV0dXJuIG5ldyBCdWUoZSwockUoKSxCMGUpLHQsbixudWxsLCExKX1mdW5jdGlvbiBPMm4oKXtyZXR1cm4gRmwoKSxoZShsZShvYywxKSxpdCwxMDgsMCxbeV9lLEVjLGk0XSl9ZnVuY3Rpb24gTjJuKCl7cmV0dXJuIG9sKCksaGUobGUoWDZ0LDEpLGl0LDQ3MiwwLFthMSxGYix3MF0pfWZ1bmN0aW9uIFAybigpe3JldHVybiBCbCgpLGhlKGxlKFc2dCwxKSxpdCw0NzEsMCxbRmQsQmIsdjBdKX1mdW5jdGlvbiBCMm4oKXtyZXR1cm4gdDEoKSxoZShsZShzNCwxKSxpdCwyMzcsMCxbR2MsJHUsS2NdKX1mdW5jdGlvbiBGMm4oKXtyZXR1cm4gbEEoKSxoZShsZShkQWUsMSksaXQsMzkxLDAsW3QxZSxlMWUsbjFlXSl9ZnVuY3Rpb24gUjJuKCl7cmV0dXJuIE93KCksaGUobGUobTFlLDEpLGl0LDM3MiwwLFtvMyxSYixhM10pfWZ1bmN0aW9uIGoybigpe3JldHVybiBkQSgpLGhlKGxlKGRMZSwxKSxpdCwzMjIsMCxbSEwsbUIsZkxlXSl9ZnVuY3Rpb24gJDJuKCl7cmV0dXJuIHBWKCksaGUobGUocExlLDEpLGl0LDM1MSwwLFtnTGUsWUssXzFlXSl9ZnVuY3Rpb24gejJuKCl7cmV0dXJuIFZtKCksaGUobGUobXh0LDEpLGl0LDQ2MCwwLFtNMWUsRlQsUDZdKX1mdW5jdGlvbiBxMm4oKXtyZXR1cm4gdkUoKSxoZShsZSgkMWUsMSksaXQsMjk5LDAsW1IxZSxqMWUsdkJdKX1mdW5jdGlvbiBIMm4oKXtyZXR1cm4gZXAoKSxoZShsZShDeHQsMSksaXQsMzExLDAsW3dCLEY2LFV4XSl9ZnVuY3Rpb24gVjJuKCl7cmV0dXJuIEVBKCksaGUobGUobURlLDEpLGl0LDM5MCwwLFtwZGUsYkRlLFNXXSl9ZnVuY3Rpb24gVTJuKCl7cmV0dXJuIHFvKCksaGUobGUoc0V0LDEpLGl0LDQ2MywwLFtzTSwkbCx6dV0pfWZ1bmN0aW9uIEcybigpe3JldHVybiBMVigpLGhlKGxlKE1EZSwxKSxpdCwzODcsMCxbQURlLFRkZSxMRGVdKX1mdW5jdGlvbiBLMm4oKXtyZXR1cm4geUEoKSxoZShsZShERGUsMSksaXQsMzQ5LDAsW1NkZSxDZGUsTUJdKX1mdW5jdGlvbiBXMm4oKXtyZXR1cm4gU0UoKSxoZShsZShPRGUsMSksaXQsMzUwLDAsW19kZSxJRGUsYU1dKX1mdW5jdGlvbiBZMm4oKXtyZXR1cm4gZ1YoKSxoZShsZShCRGUsMSksaXQsMzUyLDAsW1BEZSxBZGUsTkRlXSl9ZnVuY3Rpb24gWDJuKCl7cmV0dXJuIE9WKCksaGUobGUoRkRlLDEpLGl0LDM4OCwwLFtMZGUsWFQsazRdKX1mdW5jdGlvbiBRMm4oKXtyZXR1cm4gSXcoKSxoZShsZShTRXQsMSksaXQsNDY0LDAsW0RCLG9NLE1XXSl9ZnVuY3Rpb24gSTEoZSl7cmV0dXJuIEljKGhlKGxlKEVhLDEpLGR0LDgsMCxbZS5pLm4sZS5uLGUuYV0pKX1mdW5jdGlvbiBKMm4oKXtyZXR1cm4geEEoKSxoZShsZShlSWUsMSksaXQsMzkyLDAsW1pEZSxJZGUsT0JdKX1mdW5jdGlvbiBqb3QoKXtqb3Q9VSxGVHQ9eWwobmV3IFhzLCh3eCgpLGhNKSwoV0EoKSxWRGUpKX1mdW5jdGlvbiBSSCgpe1JIPVUsVWRlPW5ldyBWM2UoIkRGUyIsMCkseEllPW5ldyBWM2UoIkJGUyIsMSl9ZnVuY3Rpb24gJG90KGUsdCxuKXt2YXIgcjtyPW5ldyBodGUsci5iPXQsci5hPW4sKyt0LmIsdnQoZS5kLHIpfWZ1bmN0aW9uIFoybihlLHQsbil7dmFyIHI7cj1uZXcgRW8obi5kKSxPaShyLGUpLGI4ZSh0LHIuYSxyLmIpfWZ1bmN0aW9uIGVibihlLHQpe09udChlLFlyKHZhKGJ3KHQsMjQpLFpVKSksWXIodmEodCxaVSkpKX1mdW5jdGlvbiBFeShlLHQpe2lmKGU8MHx8ZT50KXRocm93IHVlKG5ldyB0YyhkRWUrZStnRWUrdCkpfWZ1bmN0aW9uIFNuKGUsdCl7aWYoZTwwfHxlPj10KXRocm93IHVlKG5ldyB0YyhkRWUrZStnRWUrdCkpfWZ1bmN0aW9uIFhuKGUsdCl7aWYoZTwwfHxlPj10KXRocm93IHVlKG5ldyBlM2UoZEVlK2UrZ0VlK3QpKX1mdW5jdGlvbiBrbihlLHQpe3RoaXMuYj0obnIoZSksZSksdGhpcy5hPXQmWHk/dDp0fDY0fF9kfWZ1bmN0aW9uIEs1ZShlKXt2YXIgdDtyZXR1cm4geGIoZSksdD0oRXcoKSxFdygpLEQwZSksbFYoZSx0KX1mdW5jdGlvbiB0Ym4oZSx0LG4pe3ZhciByO3JldHVybiByPVpBKGUsdCwhMSksci5iPD10JiZyLmE8PW59ZnVuY3Rpb24gbmJuKCl7cmV0dXJuIHRWKCksaGUobGUocE9lLDEpLGl0LDQzOSwwLFtnZ2UsZ09lLGRPZV0pfWZ1bmN0aW9uIHJibigpe3JldHVybiBxVigpLGhlKGxlKFhJZSwxKSxpdCwzOTQsMCxbWUllLHVnZSxXSWVdKX1mdW5jdGlvbiBpYm4oKXtyZXR1cm4gV1YoKSxoZShsZShLSWUsMSksaXQsNDQ1LDAsW1JCLFZXLHJnZV0pfWZ1bmN0aW9uIHNibigpe3JldHVybiBzVSgpLGhlKGxlKGdDdCwxKSxpdCw0NTYsMCxbaWdlLGFnZSxzZ2VdKX1mdW5jdGlvbiBhYm4oKXtyZXR1cm4gTE4oKSxoZShsZShBSWUsMSksaXQsMzkzLDAsW3pXLFNJZSxfSWVdKX1mdW5jdGlvbiBvYm4oKXtyZXR1cm4gQVYoKSxoZShsZShHSWUsMSksaXQsMzAwLDAsW25nZSxVSWUsVkllXSl9ZnVuY3Rpb24gY2JuKCl7cmV0dXJuIHJwKCksaGUobGUoWU5lLDEpLGl0LDM0NiwwLFtvWSxBMixETV0pfWZ1bmN0aW9uIHVibigpe3JldHVybiBQTigpLGhlKGxlKHBnZSwxKSxpdCw0NDQsMCxbV1csWVcsWFddKX1mdW5jdGlvbiBsYm4oKXtyZXR1cm4gRjEoKSxoZShsZShGTmUsMSksaXQsMjc4LDAsW25DLF80LHJDXSl9ZnVuY3Rpb24gaGJuKCl7cmV0dXJuIGR4KCksaGUobGUoblBlLDEpLGl0LDI4MCwwLFt0UGUsTDQsZFldKX1mdW5jdGlvbiBfdyhlKXtyZXR1cm4gWHIoZSksRGUoZSwxNik/bmV3IE9sKGwoZSwxNikpOiRrKGUuS2MoKSl9ZnVuY3Rpb24gVzVlKGUsdCl7cmV0dXJuIGUmJmUuZXF1YWxzP2UuZXF1YWxzKHQpOnFlKGUpPT09cWUodCl9ZnVuY3Rpb24gdmEoZSx0KXtyZXR1cm4gbWIocmduKHdjKGUpP01mKGUpOmUsd2ModCk/TWYodCk6dCkpfWZ1bmN0aW9uIFEwKGUsdCl7cmV0dXJuIG1iKGlnbih3YyhlKT9NZihlKTplLHdjKHQpP01mKHQpOnQpKX1mdW5jdGlvbiBtb2UoZSx0KXtyZXR1cm4gbWIoc2duKHdjKGUpP01mKGUpOmUsd2ModCk/TWYodCk6dCkpfWZ1bmN0aW9uIGZibihlLHQpe3ZhciBuO3JldHVybiBuPShucihlKSxlKS5nLHF5ZSghIW4pLG5yKHQpLG4odCl9ZnVuY3Rpb24gem90KGUsdCl7dmFyIG4scjtyZXR1cm4gcj1IayhlLHQpLG49ZS5hLmZkKHIpLG5ldyBWWmUoZSxuKX1mdW5jdGlvbiBkYm4oZSl7cmV0dXJuIGUuRGI+PjE2IT02P251bGw6bChVdWUoZSksMjQxKX1mdW5jdGlvbiBnYm4oZSl7aWYoZS5wIT0yKXRocm93IHVlKG5ldyBwbCk7cmV0dXJuIFlyKGUuZikmWnN9ZnVuY3Rpb24gcGJuKGUpe2lmKGUucCE9Mil0aHJvdyB1ZShuZXcgcGwpO3JldHVybiBZcihlLmspJlpzfWZ1bmN0aW9uIHJlKGUpe3JldHVybiBtcihlLmE8ZS5jLmMubGVuZ3RoKSxlLmI9ZS5hKyssZS5jLmNbZS5iXX1mdW5jdGlvbiBiYm4oZSx0KXtlLmI9ZS5ifHQuYixlLmM9ZS5jfHQuYyxlLmQ9ZS5kfHQuZCxlLmE9ZS5hfHQuYX1mdW5jdGlvbiBtYm4oZSx0KXt2YXIgbjtuPXplKEdlKGUuYS5vZigocGkoKSxpWSkpKSksbnd0KGUsdCxuKX1mdW5jdGlvbiBxb3QoZSx0KXtJbS5jYWxsKHRoaXMsMSwyLGhlKGxlKFZyLDEpLGRpLDI4LDE1LFtlLHRdKSl9ZnVuY3Rpb24gSG90KGUsdCxuKXtYdi5jYWxsKHRoaXMsMjUpLHRoaXMuYj1lLHRoaXMuYT10LHRoaXMuYz1ufWZ1bmN0aW9uIF9oKGUpe0RpKCksWHYuY2FsbCh0aGlzLGUpLHRoaXMuYz0hMSx0aGlzLmE9ITF9ZnVuY3Rpb24gdmJuKGUpe3JldHVybiBlLmE9PShlRSgpLF9ZKSYmdXQoZSxJU24oZS5nLGUuYikpLGUuYX1mdW5jdGlvbiByeChlKXtyZXR1cm4gZS5kPT0oZUUoKSxfWSkmJlR0KGUsREFuKGUuZyxlLmIpKSxlLmR9ZnVuY3Rpb24gd2JuKGUsdCl7cmV0dXJuIGhBKCksZS5jPT10LmM/WWkodC5kLGUuZCk6WWkodC5jLGUuYyl9ZnVuY3Rpb24geWJuKGUsdCl7cmV0dXJuIGhBKCksZS5jPT10LmM/WWkodC5kLGUuZCk6WWkoZS5jLHQuYyl9ZnVuY3Rpb24geGJuKGUsdCl7cmV0dXJuIGhBKCksZS5jPT10LmM/WWkoZS5kLHQuZCk6WWkoZS5jLHQuYyl9ZnVuY3Rpb24ga2JuKGUsdCl7cmV0dXJuIGhBKCksZS5jPT10LmM/WWkoZS5kLHQuZCk6WWkodC5jLGUuYyl9ZnVuY3Rpb24gWTVlKGUsdCl7cmV0dXJuIGZzdChlLmEsdCk/UjRlKGUuYixsKHQsMjIpLmcsbnVsbCk6bnVsbH1mdW5jdGlvbiBFYm4oZSl7cmV0dXJuIGJvKGwwKFpjKEpsKGUsMzIpKSwzMiksWmMoSmwoZSwzMikpKX1mdW5jdGlvbiBYNWUoZSl7cmV0dXJuIGUuYj09bnVsbHx8ZS5iLmxlbmd0aD09MD8ibl8iK2UuYToibl8iK2UuYn1mdW5jdGlvbiBCbShlKXtyZXR1cm4gZS5jPT1udWxsfHxlLmMubGVuZ3RoPT0wPyJuXyIrZS5nOiJuXyIrZS5jfWZ1bmN0aW9uIFZvdChlLHQpe3ZhciBuO2ZvcihuPWUrIiI7bi5sZW5ndGg8dDspbj0iMCIrbjtyZXR1cm4gbn1mdW5jdGlvbiBUYm4oZSx0KXt2YXIgbjtuPWwoY3IoZS5nLHQpLDYwKSxWdSh0LmQsbmV3IFJldChlLG4pKX1mdW5jdGlvbiBDYm4oZSx0KXt2YXIgbixyO3JldHVybiBuPUtkdChlKSxyPUtkdCh0KSxuPHI/LTE6bj5yPzE6MH1mdW5jdGlvbiBVb3QoZSx0KXt2YXIgbixyO3JldHVybiBuPSRvZSh0KSxyPW4sbChjcihlLmMsciksMTcpLmF9ZnVuY3Rpb24gdm9lKGUsdCxuKXt2YXIgcjtyPWUuZFt0LnBdLGUuZFt0LnBdPWUuZFtuLnBdLGUuZFtuLnBdPXJ9ZnVuY3Rpb24gU2JuKGUsdCxuKXt2YXIgcjtlLm4mJnQmJm4mJihyPW5ldyBLbmUsdnQoZS5lLHIpKX1mdW5jdGlvbiB3b2UoZSx0KXtpZihuYShlLmEsdCksdC5kKXRocm93IHVlKG5ldyBBYyhlM3QpKTt0LmQ9ZX1mdW5jdGlvbiBRNWUoZSx0KXt0aGlzLmE9bmV3IGJ0LHRoaXMuZD1uZXcgYnQsdGhpcy5mPWUsdGhpcy5jPXR9ZnVuY3Rpb24gR290KCl7dGhpcy5jPW5ldyBMbnQsdGhpcy5hPW5ldyBQdXQsdGhpcy5iPW5ldyBVUWUsdWV0KCl9ZnVuY3Rpb24gS290KCl7aHgoKSx0aGlzLmI9bmV3IFByLHRoaXMuYT1uZXcgUHIsdGhpcy5jPW5ldyBidH1mdW5jdGlvbiBXb3QoZSx0LG4pe3RoaXMuZD1lLHRoaXMuaj10LHRoaXMuZT1uLHRoaXMubz0tMSx0aGlzLnA9M31mdW5jdGlvbiBZb3QoZSx0LG4pe3RoaXMuZD1lLHRoaXMuaz10LHRoaXMuZj1uLHRoaXMubz0tMSx0aGlzLnA9NX1mdW5jdGlvbiBYb3QoZSx0LG4scixhLG8pe1E2ZS5jYWxsKHRoaXMsZSx0LG4scixhKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBRb3QoZSx0LG4scixhLG8pe0o2ZS5jYWxsKHRoaXMsZSx0LG4scixhKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBKb3QoZSx0LG4scixhLG8pe3A2ZS5jYWxsKHRoaXMsZSx0LG4scixhKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBab3QoZSx0LG4scixhLG8pe3Q3ZS5jYWxsKHRoaXMsZSx0LG4scixhKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBlY3QoZSx0LG4scixhLG8pe2I2ZS5jYWxsKHRoaXMsZSx0LG4scixhKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiB0Y3QoZSx0LG4scixhLG8pe1o2ZS5jYWxsKHRoaXMsZSx0LG4scixhKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBuY3QoZSx0LG4scixhLG8pe2U3ZS5jYWxsKHRoaXMsZSx0LG4scixhKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiByY3QoZSx0LG4scixhLG8pe202ZS5jYWxsKHRoaXMsZSx0LG4scixhKSxvJiYodGhpcy5vPS0yKX1mdW5jdGlvbiBpY3QoZSx0LG4scil7TnouY2FsbCh0aGlzLG4pLHRoaXMuYj1lLHRoaXMuYz10LHRoaXMuZD1yfWZ1bmN0aW9uIHNjdChlLHQpe3RoaXMuZj1lLHRoaXMuYT0oZUUoKSxTWSksdGhpcy5jPVNZLHRoaXMuYj10fWZ1bmN0aW9uIGFjdChlLHQpe3RoaXMuZz1lLHRoaXMuZD0oZUUoKSxfWSksdGhpcy5hPV9ZLHRoaXMuYj10fWZ1bmN0aW9uIEo1ZShlLHQpeyFlLmMmJihlLmM9bmV3IExzKGUsMCkpLEhVKGUuYywoR2koKSxITSksdCl9ZnVuY3Rpb24gX2JuKGUsdCl7cmV0dXJuIHVUbihlLHQsRGUodCwxMDIpJiYobCh0LDE5KS5CYiZJbykhPTApfWZ1bmN0aW9uIEFibihlLHQpe3JldHVybiAkc3QoWmMoZS5xLmdldFRpbWUoKSksWmModC5xLmdldFRpbWUoKSkpfWZ1bmN0aW9uIG9jdChlKXtyZXR1cm4gQ2FlKGUuZS5SZCgpLmdjKCkqZS5jLlJkKCkuZ2MoKSwxNixuZXcgcGllKGUpKX1mdW5jdGlvbiBMYm4oZSl7cmV0dXJuISFlLnUmJmR1KGUudS5hKS5pIT0wJiYhKGUubiYmY3VlKGUubikpfWZ1bmN0aW9uIE1ibihlKXtyZXR1cm4hIWUuYSYmWGwoZS5hLmEpLmkhPTAmJiEoZS5iJiZ1dWUoZS5iKSl9ZnVuY3Rpb24gWjVlKGUsdCl7cmV0dXJuIHQ9PTA/ISFlLm8mJmUuby5mIT0wOm51ZShlLHQpfWZ1bmN0aW9uIERibihlLHQsbil7dmFyIHI7cmV0dXJuIHI9bChlLlpiKCkueGModCksMTYpLCEhciYmci5IYyhuKX1mdW5jdGlvbiBjY3QoZSx0LG4pe3ZhciByO3JldHVybiByPWwoZS5aYigpLnhjKHQpLDE2KSwhIXImJnIuTWMobil9ZnVuY3Rpb24gdWN0KGUsdCl7dmFyIG47cmV0dXJuIG49MS10LGUuYVtuXT1FVihlLmFbbl0sbiksRVYoZSx0KX1mdW5jdGlvbiBsY3QoZSx0KXt2YXIgbixyO3JldHVybiByPXZhKGUsVm8pLG49bDAodCwzMiksUTAobixyKX1mdW5jdGlvbiBoY3QoZSx0LG4pe3ZhciByO3I9KFhyKGUpLG5ldyBPbChlKSksTzduKG5ldyBFb3Qocix0LG4pKX1mdW5jdGlvbiBRTyhlLHQsbil7dmFyIHI7cj0oWHIoZSksbmV3IE9sKGUpKSxON24obmV3IFRvdChyLHQsbikpfWZ1bmN0aW9uIHpjKGUsdCxuLHIsYSxvKXtyZXR1cm4gcWZ0KGUsdCxuLG8pLGM4ZShlLHIpLHU4ZShlLGEpLGV9ZnVuY3Rpb24gZmN0KGUsdCxuLHIpe3JldHVybiBlLmErPSIiK3RmKHQ9PW51bGw/dWw6eGModCksbixyKSxlfWZ1bmN0aW9uIFVhKGUsdCl7dGhpcy5hPWUsa3IuY2FsbCh0aGlzLGUpLEV5KHQsZS5nYygpKSx0aGlzLmI9dH1mdW5jdGlvbiBkY3QoZSl7dGhpcy5hPVdlKHdhLFJuLDEsUDdlKGIuTWF0aC5tYXgoOCxlKSk8PDEsNSwxKX1mdW5jdGlvbiBKTyhlKXtyZXR1cm4gbChqMShlLFdlKHdnLG0yLDEwLGUuYy5sZW5ndGgsMCwxKSksMTk5KX1mdW5jdGlvbiBrZChlKXtyZXR1cm4gbChqMShlLFdlKHUxZSxCaGUsMTgsZS5jLmxlbmd0aCwwLDEpKSw0ODMpfWZ1bmN0aW9uIGdjdChlKXtyZXR1cm4gZS5hP2UuZS5sZW5ndGg9PTA/ZS5hLmE6ZS5hLmErKCIiK2UuZSk6ZS5jfWZ1bmN0aW9uIGlBKGUpe2Zvcig7ZS5kPjAmJmUuYVstLWUuZF09PTA7KTtlLmFbZS5kKytdPT0wJiYoZS5lPTApfWZ1bmN0aW9uIHBjdChlKXtyZXR1cm4gbXIoZS5iLmIhPWUuZC5hKSxlLmM9ZS5iPWUuYi5iLC0tZS5hLGUuYy5jfWZ1bmN0aW9uIElibihlLHQsbil7ZS5hPXQsZS5jPW4sZS5iLmEuJGIoKSxDaChlLmQpLGF5KGUuZS5hLmMsMCl9ZnVuY3Rpb24gYmN0KGUsdCl7dmFyIG47ZS5lPW5ldyBWd2Usbj1IeSh0KSxWcyhuLGUuYyksTWJ0KGUsbiwwKX1mdW5jdGlvbiBRcyhlLHQsbixyKXt2YXIgYTthPW5ldyBKOSxhLmE9dCxhLmI9bixhLmM9cix1aShlLmEsYSl9ZnVuY3Rpb24gZ3QoZSx0LG4scil7dmFyIGE7YT1uZXcgSjksYS5hPXQsYS5iPW4sYS5jPXIsdWkoZS5iLGEpfWZ1bmN0aW9uIG1jdChlLHQsbil7aWYoZTwwfHx0PGV8fHQ+bil0aHJvdyB1ZShuZXcgdGMoVTluKGUsdCxuKSkpfWZ1bmN0aW9uIFpPKGUsdCl7aWYoZTwwfHxlPj10KXRocm93IHVlKG5ldyB0Yyhra24oZSx0KSkpO3JldHVybiBlfWZ1bmN0aW9uIE9ibihlKXtpZighKCJzdGFjayJpbiBlKSl0cnl7dGhyb3cgZX1jYXRjaHt9cmV0dXJuIGV9ZnVuY3Rpb24gRzUoZSl7cmV0dXJuIHBfKCksRGUoZS5nLDEwKT9sKGUuZywxMCk6bnVsbH1mdW5jdGlvbiBOYm4oZSl7cmV0dXJuIFY1KGUpLmRjKCk/ITE6KHJobihlLG5ldyBvZSksITApfWZ1bmN0aW9uIEZtKGUpe3ZhciB0O3JldHVybiB3YyhlKT8odD1lLHQ9PS0wPzA6dCk6WXZuKGUpfWZ1bmN0aW9uIHZjdChlLHQpe3JldHVybiBEZSh0LDQ0KT9ndWUoZS5hLGwodCw0NCkpOiExfWZ1bmN0aW9uIHdjdChlLHQpe3JldHVybiBEZSh0LDQ0KT9ndWUoZS5hLGwodCw0NCkpOiExfWZ1bmN0aW9uIHljdChlLHQpe3JldHVybiBEZSh0LDQ0KT9ndWUoZS5hLGwodCw0NCkpOiExfWZ1bmN0aW9uIGU2ZShlKXt2YXIgdDtyZXR1cm4gZmIoZSksdD1uZXcgTmUsQTUoZS5hLG5ldyB4NSh0KSksdH1mdW5jdGlvbiB0NmUoKXt2YXIgZSx0LG47cmV0dXJuIHQ9KG49KGU9bmV3IFF2LGUpLG4pLHZ0KFJQZSx0KSx0fWZ1bmN0aW9uIGpIKGUpe3ZhciB0O3JldHVybiBmYihlKSx0PW5ldyBnbixBNShlLmEsbmV3IFQ4KHQpKSx0fWZ1bmN0aW9uIFBibihlLHQpe3JldHVybiBlLmE8PWUuYj8odC5EZChlLmErKyksITApOiExfWZ1bmN0aW9uIHhjdChlKXtvY2UuY2FsbCh0aGlzLGUsKHJFKCksTzBlKSxudWxsLCExLG51bGwsITEpfWZ1bmN0aW9uIGtjdCgpe2tjdD1VLEE3dD1LcigoWnooKSxoZShsZShVX2UsMSksaXQsNDg5LDAsW0cwZV0pKSl9ZnVuY3Rpb24gRWN0KCl7RWN0PVUsakRlPXBhdChwdCgxKSxwdCg0KSksUkRlPXBhdChwdCgxKSxwdCgyKSl9ZnVuY3Rpb24gQmJuKGUsdCl7cmV0dXJuIG5ldyB3YWUodCx6XyhKYSh0LmUpLGUsZSksKEhuKCksITApKX1mdW5jdGlvbiAkSChlKXtyZXR1cm4gbmV3IEJ1KChNaChlLEZsZSksY1YoYm8oYm8oNSxlKSxlLzEwfDApKSkpfWZ1bmN0aW9uIEZibihlKXtyZXR1cm4gQ2FlKGUuZS5SZCgpLmdjKCkqZS5jLlJkKCkuZ2MoKSwyNzMsbmV3IGdpZShlKSl9ZnVuY3Rpb24gVGN0KGUpe3JldHVybiBsKGoxKGUsV2UoRjh0LEkzdCwxMixlLmMubGVuZ3RoLDAsMSkpLDIwNDIpfWZ1bmN0aW9uIFJibihlKXtyZXR1cm4gU2goKSwhRG8oZSkmJiEoIURvKGUpJiZlLmMuaS5jPT1lLmQuaS5jKX1mdW5jdGlvbiBqYm4oZSx0KXtyZXR1cm4gdXgoKSxsKFEodCwoSGMoKSxXNikpLDE3KS5hPj1lLmdjKCl9ZnVuY3Rpb24gc0EoZSx0KXt4SW4odCxlKSxONGUoZS5kKSxONGUobChRKGUsKE50KCksd1cpKSwyMTQpKX1mdW5jdGlvbiB5b2UoZSx0KXtrSW4odCxlKSxQNGUoZS5kKSxQNGUobChRKGUsKE50KCksd1cpKSwyMTQpKX1mdW5jdGlvbiAkYm4oZSx0LG4pe2UuZCYmYWwoZS5kLmUsZSksZS5kPXQsZS5kJiZwdyhlLmQuZSxuLGUpfWZ1bmN0aW9uIHpibihlLHQsbil7cmV0dXJuIG4uZi5jLmxlbmd0aD4wP3U1ZShlLmEsdCxuKTp1NWUoZS5iLHQsbil9ZnVuY3Rpb24gcWJuKGUsdCxuKXt2YXIgcjtyPXM2bigpO3RyeXtyZXR1cm4gTGZuKGUsdCxuKX1maW5hbGx5e05tbihyKX19ZnVuY3Rpb24gQXcoZSx0KXt2YXIgbixyO3JldHVybiBuPVdnKGUsdCkscj1udWxsLG4mJihyPW4ucGUoKSkscn1mdW5jdGlvbiBhQShlLHQpe3ZhciBuLHI7cmV0dXJuIG49V2coZSx0KSxyPW51bGwsbiYmKHI9bi5zZSgpKSxyfWZ1bmN0aW9uIEprKGUsdCl7dmFyIG4scjtyZXR1cm4gbj1feShlLHQpLHI9bnVsbCxuJiYocj1uLnNlKCkpLHJ9ZnVuY3Rpb24gWWcoZSx0KXt2YXIgbixyO3JldHVybiBuPVdnKGUsdCkscj1udWxsLG4mJihyPWU5ZShuKSkscn1mdW5jdGlvbiBIYm4oZSx0LG4pe3ZhciByO3JldHVybiByPU5FKG4pLFJVKGUuZyxyLHQpLFJVKGUuaSx0LG4pLHR9ZnVuY3Rpb24gbjZlKGUsdCxuKXt0aGlzLmQ9bmV3IE9ZZSh0aGlzKSx0aGlzLmU9ZSx0aGlzLmk9dCx0aGlzLmY9bn1mdW5jdGlvbiBDY3QoZSx0LG4scil7dGhpcy5lPW51bGwsdGhpcy5jPWUsdGhpcy5kPXQsdGhpcy5hPW4sdGhpcy5iPXJ9ZnVuY3Rpb24gU2N0KGUsdCxuLHIpe0VudCh0aGlzKSx0aGlzLmM9ZSx0aGlzLmU9dCx0aGlzLmY9bix0aGlzLmI9cn1mdW5jdGlvbiByNmUoZSx0LG4scil7dGhpcy5kPWUsdGhpcy5uPXQsdGhpcy5nPW4sdGhpcy5vPXIsdGhpcy5wPS0xfWZ1bmN0aW9uIF9jdChlLHQsbixyKXtyZXR1cm4gRGUobiw1OSk/bmV3IHJydChlLHQsbixyKTpuZXcgcjVlKGUsdCxuLHIpfWZ1bmN0aW9uIFprKGUpe3JldHVybiBEZShlLDE2KT9sKGUsMTYpLmRjKCk6IWUuS2MoKS5PYigpfWZ1bmN0aW9uIEFjdChlKXtpZihlLmUuZyE9ZS5iKXRocm93IHVlKG5ldyBYaCk7cmV0dXJuISFlLmMmJmUuZD4wfWZ1bmN0aW9uIEJyKGUpe3JldHVybiBtcihlLmIhPWUuZC5jKSxlLmM9ZS5iLGUuYj1lLmIuYSwrK2UuYSxlLmMuY31mdW5jdGlvbiBpNmUoZSx0KXtucih0KSxUcyhlLmEsZS5jLHQpLGUuYz1lLmMrMSZlLmEubGVuZ3RoLTEsWGR0KGUpfWZ1bmN0aW9uIGdiKGUsdCl7bnIodCksZS5iPWUuYi0xJmUuYS5sZW5ndGgtMSxUcyhlLmEsZS5iLHQpLFhkdChlKX1mdW5jdGlvbiBMY3QoZSl7dmFyIHQ7dD1lLkdoKCksdGhpcy5hPURlKHQsNzEpP2wodCw3MSkuSWkoKTp0LktjKCl9ZnVuY3Rpb24gVmJuKGUpe3JldHVybiBuZXcga24oTHduKGwoZS5hLm1kKCksMTYpLmdjKCksZS5hLmxkKCkpLDE2KX1mdW5jdGlvbiBNY3QoKXtNY3Q9VSxVQ3Q9S3IoKG5xKCksaGUobGUod09lLDEpLGl0LDQ5MCwwLFtiZ2VdKSkpfWZ1bmN0aW9uIERjdCgpe0RjdD1VLEtDdD1LcigocnEoKSxoZShsZShHQ3QsMSksaXQsNTU4LDAsW21nZV0pKSl9ZnVuY3Rpb24gSWN0KCl7SWN0PVUsaFN0PUtyKChiXygpLGhlKGxlKCRPZSwxKSxpdCw1MzksMCxbcUJdKSkpfWZ1bmN0aW9uIFVibigpe3JldHVybiBLbSgpLGhlKGxlKG1BZSwxKSxpdCwzODksMCxbYzQsYkFlLG8xZSxjMWVdKX1mdW5jdGlvbiBHYm4oKXtyZXR1cm4gckUoKSxoZShsZShmSywxKSxpdCwzMDQsMCxbTzBlLE4wZSxQMGUsQjBlXSl9ZnVuY3Rpb24gS2JuKCl7cmV0dXJuIGJ4KCksaGUobGUoRTd0LDEpLGl0LDMzMiwwLFthQixzQixvQixjQl0pfWZ1bmN0aW9uIFdibigpe3JldHVybiBOQSgpLGhlKGxlKFM3dCwxKSxpdCw0MDYsMCxbdUIsYkssbUssbEJdKX1mdW5jdGlvbiBZYm4oKXtyZXR1cm4gUHcoKSxoZShsZSh4N3QsMSksaXQsNDE3LDAsW2lCLHJCLFYwZSxVMGVdKX1mdW5jdGlvbiBYYm4oKXtyZXR1cm4gd0UoKSxoZShsZShDOHQsMSksaXQsNDE2LDAsW3MzLG80LGE0LE02XSl9ZnVuY3Rpb24gUWJuKCl7cmV0dXJuIFIxKCksaGUobGUodHh0LDEpLGl0LDQyMSwwLFtWeCxNVCxEVCxiMWVdKX1mdW5jdGlvbiBKYm4oKXtyZXR1cm4gSVYoKSxoZShsZShWOHQsMSksaXQsMzcxLDAsW3AxZSxISyxWSyxwQl0pfWZ1bmN0aW9uIFpibigpe3JldHVybiBCeSgpLGhlKGxlKG1kZSwxKSxpdCwyMDMsMCxbX1csYmRlLEc2LFU2XSl9ZnVuY3Rpb24gZW1uKCl7cmV0dXJuIEVkKCksaGUobGUoU0RlLDEpLGl0LDI4NCwwLFtFMixDRGUseWRlLHhkZV0pfWZ1bmN0aW9uIHRtbihlKXt2YXIgdDtyZXR1cm4gZS5qPT0oQ3QoKSxEcikmJih0PXYydChlKSx2bCh0LGFyKSl9ZnVuY3Rpb24gbm1uKGUsdCl7dmFyIG47bj10LmEscG8obix0LmMuZCksRmEobix0LmQuZCksRHkobi5hLGUubil9ZnVuY3Rpb24gczZlKGUsdCl7dmFyIG47cmV0dXJuIG49bChCMShlLmIsdCksNjcpLCFuJiYobj1uZXcgb3MpLG59ZnVuY3Rpb24gaXgoZSl7cmV0dXJuIHBfKCksRGUoZS5nLDE1NCk/bChlLmcsMTU0KTpudWxsfWZ1bmN0aW9uIHJtbihlKXtlLmE9bnVsbCxlLmU9bnVsbCxheShlLmIuYywwKSxheShlLmYuYywwKSxlLmM9bnVsbH1mdW5jdGlvbiB6SCgpe3pIPVUsejFlPW5ldyBGM2UoY1QsMCksTkxlPW5ldyBGM2UoIlRPUF9MRUZUIiwxKX1mdW5jdGlvbiBvQSgpe29BPVUsdU09bmV3IGozZSgiVVBQRVIiLDApLGNNPW5ldyBqM2UoIkxPV0VSIiwxKX1mdW5jdGlvbiBpbW4oZSx0KXtyZXR1cm4gejgobmV3IGx0KHQuZS5hK3QuZi5hLzIsdC5lLmIrdC5mLmIvMiksZSl9ZnVuY3Rpb24gT2N0KGUsdCl7cmV0dXJuIGwoZmgodnkobCgkaShlLmssdCksMTUpLk9jKCksSTYpKSwxMTMpfWZ1bmN0aW9uIE5jdChlLHQpe3JldHVybiBsKGZoKFk4KGwoJGkoZS5rLHQpLDE1KS5PYygpLEk2KSksMTEzKX1mdW5jdGlvbiBzbW4oKXtyZXR1cm4gd3goKSxoZShsZShxRGUsMSksaXQsNDA1LDAsW05XLGxNLGhNLGZNXSl9ZnVuY3Rpb24gYW1uKCl7cmV0dXJuIGtBKCksaGUobGUoeUllLDEpLGl0LDM1MywwLFtWZGUsalcsSGRlLHFkZV0pfWZ1bmN0aW9uIG9tbigpe3JldHVybiB1VSgpLGhlKGxlKEhJZSwxKSxpdCwzNTQsMCxbdGdlLHpJZSxxSWUsJEllXSl9ZnVuY3Rpb24gY21uKCl7cmV0dXJuIG1oKCksaGUobGUoQk0sMSksaXQsMzg2LDAsW2lGLEN2LHJGLEE0XSl9ZnVuY3Rpb24gdW1uKCl7cmV0dXJuIEloKCksaGUobGUoSlN0LDEpLGl0LDI5MSwwLFtlRixrZyxHYixaQl0pfWZ1bmN0aW9uIGxtbigpe3JldHVybiBpcCgpLGhlKGxlKFZnZSwxKSxpdCwyMjMsMCxbSGdlLEpCLGlDLHM5XSl9ZnVuY3Rpb24gaG1uKCl7cmV0dXJuIFZWKCksaGUobGUoY1BlLDEpLGl0LDMyMCwwLFtLZ2Usc1BlLG9QZSxhUGVdKX1mdW5jdGlvbiBmbW4oKXtyZXR1cm4gTlYoKSxoZShsZShwX3QsMSksaXQsNDE1LDAsW1dnZSxsUGUsdVBlLGhQZV0pfWZ1bmN0aW9uIGRtbihlKXtyZXR1cm4gQkgoKSxIdShaZ2UsZSk/bChjcihaZ2UsZSksMzQxKS5RZygpOm51bGx9ZnVuY3Rpb24gbmYoZSx0LG4pe3JldHVybiB0PDA/cXVlKGUsbik6bChuLDY5KS53aygpLkJrKGUsZS5oaSgpLHQpfWZ1bmN0aW9uIGdtbihlLHQsbil7dmFyIHI7cmV0dXJuIHI9TkUobiksUlUoZS5qLHIsdCksa2koZS5rLHQsbiksdH1mdW5jdGlvbiBwbW4oZSx0LG4pe3ZhciByO3JldHVybiByPU5FKG4pLFJVKGUuZCxyLHQpLGtpKGUuZSx0LG4pLHR9ZnVuY3Rpb24gUGN0KGUpe3ZhciB0LG47cmV0dXJuIHQ9KHJiKCksbj1uZXcgVEksbiksZSYmQVUodCxlKSx0fWZ1bmN0aW9uIGE2ZShlKXt2YXIgdDtyZXR1cm4gdD1lLmFqKGUuaSksZS5pPjAmJnB1KGUuZywwLHQsMCxlLmkpLHR9ZnVuY3Rpb24gQmN0KGUsdCl7dmFyIG47Zm9yKG49ZS5qLmMubGVuZ3RoO248dDtuKyspdnQoZS5qLGUuTmcoKSl9ZnVuY3Rpb24gRmN0KGUsdCxuLHIpe3ZhciBhO3JldHVybiBhPXJbdC5nXVtuLmddLHplKEdlKFEoZS5hLGEpKSl9ZnVuY3Rpb24gUmN0KGUsdCl7aXEoKTt2YXIgbjtyZXR1cm4gbj1sKGNyKGtZLGUpLDU3KSwhbnx8bi5mayh0KX1mdW5jdGlvbiBibW4oZSl7aWYoZS5wIT0xKXRocm93IHVlKG5ldyBwbCk7cmV0dXJuIFlyKGUuZik8PDI0Pj4yNH1mdW5jdGlvbiBtbW4oZSl7aWYoZS5wIT0xKXRocm93IHVlKG5ldyBwbCk7cmV0dXJuIFlyKGUuayk8PDI0Pj4yNH1mdW5jdGlvbiB2bW4oZSl7aWYoZS5wIT03KXRocm93IHVlKG5ldyBwbCk7cmV0dXJuIFlyKGUuayk8PDE2Pj4xNn1mdW5jdGlvbiB3bW4oZSl7aWYoZS5wIT03KXRocm93IHVlKG5ldyBwbCk7cmV0dXJuIFlyKGUuZik8PDE2Pj4xNn1mdW5jdGlvbiBLNShlLHQpe3JldHVybiB0LmU9PTB8fGUuZT09MD9CTDooR0UoKSxRdWUoZSx0KSl9ZnVuY3Rpb24gamN0KGUsdCl7cmV0dXJuIHFlKHQpPT09cWUoZSk/Iih0aGlzIE1hcCkiOnQ9PW51bGw/dWw6eGModCl9ZnVuY3Rpb24geW1uKGUsdCxuKXtyZXR1cm4gTmFlKEdlKGhjKHpvKGUuZix0KSkpLEdlKGhjKHpvKGUuZixuKSkpKX1mdW5jdGlvbiB4bW4oZSx0LG4pe3ZhciByO3I9bChjcihlLmcsbiksNjApLHZ0KGUuYS5jLG5ldyBjYSh0LHIpKX1mdW5jdGlvbiAkY3QoZSx0LG4pe2UuaT0wLGUuZT0wLHQhPW4mJihrMHQoZSx0LG4pLHgwdChlLHQsbikpfWZ1bmN0aW9uIGttbihlLHQsbixyLGEpe3ZhciBvO289RVRuKGEsbixyKSx2dCh0LHBrbihhLG8pKSxhOW4oZSxhLHQpfWZ1bmN0aW9uIG82ZShlLHQsbixyLGEpe3RoaXMuaT1lLHRoaXMuYT10LHRoaXMuZT1uLHRoaXMuaj1yLHRoaXMuZj1hfWZ1bmN0aW9uIHpjdChlLHQpe1I1ZS5jYWxsKHRoaXMpLHRoaXMuYT1lLHRoaXMuYj10LHZ0KHRoaXMuYS5iLHRoaXMpfWZ1bmN0aW9uIHFjdChlKXt0aGlzLmI9bmV3IFByLHRoaXMuYz1uZXcgUHIsdGhpcy5kPW5ldyBQcix0aGlzLmE9ZX1mdW5jdGlvbiBIY3QoZSx0KXt2YXIgbjtyZXR1cm4gbj1uZXcgUzUsZS5HZChuKSxuLmErPSIuLiIsdC5IZChuKSxuLmF9ZnVuY3Rpb24gVmN0KGUsdCl7dmFyIG47Zm9yKG49dDtuOylkdyhlLG4uaSxuLmopLG49ZHMobik7cmV0dXJuIGV9ZnVuY3Rpb24gVWN0KGUsdCxuKXt2YXIgcjtyZXR1cm4gcj1ORShuKSxraShlLmIscix0KSxraShlLmMsdCxuKSx0fWZ1bmN0aW9uIFhnKGUpe3ZhciB0O2Zvcih0PTA7ZS5PYigpOyllLlBiKCksdD1ibyh0LDEpO3JldHVybiBjVih0KX1mdW5jdGlvbiBzZyhlLHQpe0ZvKCk7dmFyIG47cmV0dXJuIG49bChlLDY5KS52aygpLGs5bihuLHQpLG4ueGwodCl9ZnVuY3Rpb24gRW1uKGUsdCxuKXtpZihuKXt2YXIgcj1uLm9lKCk7ZS5hW3RdPXIobil9ZWxzZSBkZWxldGUgZS5hW3RdfWZ1bmN0aW9uIGM2ZShlLHQpe3ZhciBuO249ZS5xLmdldEhvdXJzKCksZS5xLnNldEZ1bGxZZWFyKHQrTGIpLFhBKGUsbil9ZnVuY3Rpb24gVG1uKGUsdCl7cmV0dXJuIGwodD09bnVsbD9oYyh6byhlLmYsbnVsbCkpOnlfKGUuaSx0KSwyODgpfWZ1bmN0aW9uIHU2ZShlLHQpe3JldHVybiBlPT0oWm4oKSxQcykmJnQ9PVBzPzQ6ZT09UHN8fHQ9PVBzPzg6MzJ9ZnVuY3Rpb24gcUgoZSx0LG4pe3JldHVybiAkVShlLHQsbixEZSh0LDEwMikmJihsKHQsMTkpLkJiJklvKSE9MCl9ZnVuY3Rpb24gQ21uKGUsdCxuKXtyZXR1cm4gWEUoZSx0LG4sRGUodCwxMDIpJiYobCh0LDE5KS5CYiZJbykhPTApfWZ1bmN0aW9uIFNtbihlLHQsbil7cmV0dXJuIGJUbihlLHQsbixEZSh0LDEwMikmJihsKHQsMTkpLkJiJklvKSE9MCl9ZnVuY3Rpb24gbDZlKGUpe2UuYiE9ZS5jJiYoZS5hPVdlKHdhLFJuLDEsOCw1LDEpLGUuYj0wLGUuYz0wKX1mdW5jdGlvbiBjQShlKXtyZXR1cm4gbXIoZS5hPGUuYy5hLmxlbmd0aCksZS5iPWUuYSxyaHQoZSksZS5jLmJbZS5iXX1mdW5jdGlvbiBkdShlKXtyZXR1cm4gZS5ufHwoWWwoZSksZS5uPW5ldyB2c3QoZSxXbyxlKSxkYyhlKSksZS5ufWZ1bmN0aW9uIEdjdChlKXtpZihlPDApdGhyb3cgdWUobmV3IEZKZSgiTmVnYXRpdmUgYXJyYXkgc2l6ZTogIitlKSl9ZnVuY3Rpb24geG9lKGUsdCxuKXtpZihuKXt2YXIgcj1uLm9lKCk7bj1yKG4pfWVsc2Ugbj12b2lkIDA7ZS5hW3RdPW59ZnVuY3Rpb24gS2N0KGUsdCl7VEUoKTt2YXIgbjtyZXR1cm4gbj1lLmouZy10LmouZyxuIT0wP246MH1mdW5jdGlvbiBfbW4oZSx0KXtyZXR1cm4gVmcoKSxxcih0dChlLmEpLHQpfWZ1bmN0aW9uIEFtbihlLHQpe3JldHVybiBWZygpLHFyKHR0KGUuYSksdCl9ZnVuY3Rpb24gUWcoZSx0KXtDZCgpLEltLmNhbGwodGhpcyxlLDEsaGUobGUoVnIsMSksZGksMjgsMTUsW3RdKSl9ZnVuY3Rpb24gVHkoZSx0KXtEaSgpLFh2LmNhbGwodGhpcyxlKSx0aGlzLmE9dCx0aGlzLmM9LTEsdGhpcy5iPS0xfWZ1bmN0aW9uIEN5KGUsdCxuLHIpe1dvdC5jYWxsKHRoaXMsMSxuLHIpLHRoaXMuYz1lLHRoaXMuYj10fWZ1bmN0aW9uIGtvZShlLHQsbixyKXtZb3QuY2FsbCh0aGlzLDEsbixyKSx0aGlzLmM9ZSx0aGlzLmI9dH1mdW5jdGlvbiBFb2UoZSx0LG4scixhLG8sZil7Sm9lLmNhbGwodGhpcyx0LHIsYSxvLGYpLHRoaXMuYz1lLHRoaXMuYT1ufWZ1bmN0aW9uIFJtKGUsdCxuKXt0aGlzLmU9ZSx0aGlzLmE9d2EsdGhpcy5iPVFidCh0KSx0aGlzLmM9dCx0aGlzLmQ9bn1mdW5jdGlvbiBUb2UoZSl7dGhpcy5lPWUsdGhpcy5jPXRoaXMuZS5hLHRoaXMuYj10aGlzLmUuZyx0aGlzLmQ9dGhpcy5lLml9ZnVuY3Rpb24gaDZlKGUpe3RoaXMuZD1lLHRoaXMuYj10aGlzLmQuYS5lbnRyaWVzKCksdGhpcy5hPXRoaXMuYi5uZXh0KCl9ZnVuY3Rpb24gV2N0KGUpe3RoaXMuYz1lLHRoaXMuYT1sKE9mKGUpLDE1NiksdGhpcy5iPXRoaXMuYS5qaygpLndpKCl9ZnVuY3Rpb24gZTIoKXtQci5jYWxsKHRoaXMpLGNydCh0aGlzKSx0aGlzLmQuYj10aGlzLmQsdGhpcy5kLmE9dGhpcy5kfWZ1bmN0aW9uIENzKGUsdCxuLHIpe3ZhciBhO2E9bmV3IF90LGEuYz10LGEuYj1uLGEuYT1yLHIuYj1uLmE9YSwrK2UuYn1mdW5jdGlvbiBMbW4oZSx0KXt2YXIgbjtyZXR1cm4gbj10IT1udWxsP3h1KGUsdCk6aGMoem8oZS5mLHQpKSxNcShuKX1mdW5jdGlvbiBNbW4oZSx0KXt2YXIgbjtyZXR1cm4gbj10IT1udWxsP3h1KGUsdCk6aGMoem8oZS5mLHQpKSxNcShuKX1mdW5jdGlvbiB5YyhlLHQpe3ZhciBuO3JldHVybiB0LmIuS2IoVWx0KGUsdC5jLlhlKCksKG49bmV3IF8xKHQpLG4pKSl9ZnVuY3Rpb24gRG1uKGUsdCl7dmFyIG47cmV0dXJuIEdjdCh0KSxuPWUuc2xpY2UoMCx0KSxuLmxlbmd0aD10LGpvZShuLGUpfWZ1bmN0aW9uIFljdChlLHQpe3ZhciBuO2ZvcihuPTA7bjx0OysrbilUcyhlLG4sbmV3IGxyKGwoZVtuXSw0NCkpKX1mdW5jdGlvbiBJbW4oZSx0KXt2YXIgbjtmb3Iobj1lLmQtMTtuPj0wJiZlLmFbbl09PT10W25dO24tLSk7cmV0dXJuIG48MH1mdW5jdGlvbiBISChlKXt2YXIgdDtyZXR1cm4gZT9uZXcgSzRlKGUpOih0PW5ldyBiZCxzY2UodCxlKSx0KX1mdW5jdGlvbiBPbW4oZSx0KXt2YXIgbixyO3I9ITE7ZG8gbj1oMHQoZSx0KSxyPXJ8bjt3aGlsZShuKTtyZXR1cm4gcn1mdW5jdGlvbiBObW4oZSl7ZSYmYXduKChYd2UoKSxHU2UpKSwtLWFLLGUmJm9LIT0tMSYmKENsbihvSyksb0s9LTEpfWZ1bmN0aW9uIFZIKGUpe1J4ZSgpLE9udCh0aGlzLFlyKHZhKGJ3KGUsMjQpLFpVKSksWXIodmEoZSxaVSkpKX1mdW5jdGlvbiBYY3QoKXtYY3Q9VSxxNnQ9S3IoKFpWKCksaGUobGUoa19lLDEpLGl0LDQzNiwwLFtqMGUseF9lXSkpKX1mdW5jdGlvbiBRY3QoKXtRY3Q9VSxINnQ9S3IoKGFWKCksaGUobGUoVF9lLDEpLGl0LDQzNSwwLFtFX2UsJDBlXSkpKX1mdW5jdGlvbiBKY3QoKXtKY3Q9VSxVN3Q9S3IoKG9WKCksaGUobGUoSl9lLDEpLGl0LDQzMiwwLFtRMGUseUtdKSkpfWZ1bmN0aW9uIFpjdCgpe1pjdD1VLHo4dD1LcigoZEUoKSxoZShsZSgkOHQsMSksaXQsNTE3LDAsW2RCLGgxZV0pKSl9ZnVuY3Rpb24gZXV0KCl7ZXV0PVUsX3h0PUtyKCh6SCgpLGhlKGxlKFBMZSwxKSxpdCw0MjksMCxbejFlLE5MZV0pKSl9ZnVuY3Rpb24gdHV0KCl7dHV0PVUsYnh0PUtyKChwTigpLGhlKGxlKHdMZSwxKSxpdCw0MjgsMCxbWEssdkxlXSkpKX1mdW5jdGlvbiBudXQoKXtudXQ9VSx5eHQ9S3IoKGNOKCksaGUobGUoa0xlLDEpLGl0LDQ4OCwwLFt4TGUsSktdKSkpfWZ1bmN0aW9uIHJ1dCgpe3J1dD1VLGlFdD1LcigoZE4oKSxoZShsZShfRGUsMSksaXQsNDMwLDAsW2tkZSxFZGVdKSkpfWZ1bmN0aW9uIGl1dCgpe2l1dD1VLElFdD1Lcigob0EoKSxoZShsZShERXQsMSksaXQsNTMxLDAsW3VNLGNNXSkpKX1mdW5jdGlvbiBzdXQoKXtzdXQ9VSxmeHQ9S3IoKEpIKCksaGUobGUoaExlLDEpLGl0LDQzMSwwLFtsTGUsUzFlXSkpKX1mdW5jdGlvbiBhdXQoKXthdXQ9VSxCVHQ9S3IoKFJIKCksaGUobGUoa0llLDEpLGl0LDQzMywwLFtVZGUseEllXSkpKX1mdW5jdGlvbiBvdXQoKXtvdXQ9VSx6VHQ9S3IoKGtWKCksaGUobGUoRUllLDEpLGl0LDUwMSwwLFskVyxYNl0pKSl9ZnVuY3Rpb24gY3V0KCl7Y3V0PVUsakV0PUtyKCh4ZCgpLGhlKGxlKFJFdCwxKSxpdCw1MjMsMCxbdzMsVDJdKSkpfWZ1bmN0aW9uIHV1dCgpe3V1dD1VLHpFdD1LcigoRDEoKSxoZShsZSgkRXQsMSksaXQsNTIyLDAsW3d2LFkxXSkpKX1mdW5jdGlvbiBsdXQoKXtsdXQ9VSxuVHQ9S3IoKEowKCksaGUobGUodFR0LDEpLGl0LDUyOCwwLFtFNCxxYl0pKSl9ZnVuY3Rpb24gaHV0KCl7aHV0PVUsdVR0PUtyKChTdygpLGhlKGxlKGNUdCwxKSxpdCw0NjUsMCxbSGIsSzZdKSkpfWZ1bmN0aW9uIGZ1dCgpe2Z1dD1VLFZUdD1LcigoZVYoKSxoZShsZShDSWUsMSksaXQsNDM0LDAsW1RJZSxRZGVdKSkpfWZ1bmN0aW9uIGR1dCgpe2R1dD1VLGpDdD1LcigoR0goKSxoZShsZShmT2UsMSksaXQsNDkxLDAsW2RnZSxoT2VdKSkpfWZ1bmN0aW9uIGd1dCgpe2d1dD1VLHpDdD1LcigoZmNlKCksaGUobGUodk9lLDEpLGl0LDQ5MiwwLFtiT2UsbU9lXSkpKX1mdW5jdGlvbiBwdXQoKXtwdXQ9VSxXQ3Q9S3IoKHJOKCksaGUobGUoeU9lLDEpLGl0LDQzOCwwLFt2Z2UsUVddKSkpfWZ1bmN0aW9uIGJ1dCgpe2J1dD1VLGZTdD1LcigoQ04oKSxoZShsZShxT2UsMSksaXQsNDM3LDAsW1pXLHpPZV0pKSl9ZnVuY3Rpb24gbXV0KCl7bXV0PVUsZl90PUtyKChtYWUoKSxoZShsZShnWSwxKSxpdCwzNDcsMCxbclBlLGlQZV0pKSl9ZnVuY3Rpb24gUG1uKCl7cmV0dXJuIEpzKCksaGUobGUoTE0sMSksaXQsODgsMCxbSjEsdmMsdWMsUTEsd2ZdKX1mdW5jdGlvbiBCbW4oKXtyZXR1cm4gQ3QoKSxoZShsZShPbywxKSxhdSw2NCwwLFtQYyxRbixhcixEcixlcl0pfWZ1bmN0aW9uIEZtbihlLHQsbil7cmV0dXJuIGwodD09bnVsbD9qdShlLmYsbnVsbCxuKTpCdyhlLmksdCxuKSwyODgpfWZ1bmN0aW9uIFJtbihlKXtyZXR1cm4oZS5rPT0oWm4oKSxQcyl8fGUuaz09VXMpJiZucyhlLChmdCgpLEtMKSl9ZnVuY3Rpb24gQ29lKGUpe3JldHVybiBlLmMmJmUuZD9YNWUoZS5jKSsiLT4iK1g1ZShlLmQpOiJlXyIrZncoZSl9ZnVuY3Rpb24gdG8oZSx0KXt2YXIgbixyO2Zvcihucih0KSxyPWUuS2MoKTtyLk9iKCk7KW49ci5QYigpLHQuQ2Qobil9ZnVuY3Rpb24gam1uKGUsdCl7dmFyIG47bj1uZXcgTTgsTm0obiwieCIsdC5hKSxObShuLCJ5Iix0LmIpLEo4KGUsbil9ZnVuY3Rpb24gJG1uKGUsdCl7dmFyIG47bj1uZXcgTTgsTm0obiwieCIsdC5hKSxObShuLCJ5Iix0LmIpLEo4KGUsbil9ZnVuY3Rpb24gdnV0KGUsdCl7dmFyIG47Zm9yKG49dDtuOylkdyhlLC1uLmksLW4uaiksbj1kcyhuKTtyZXR1cm4gZX1mdW5jdGlvbiBmNmUoZSx0KXt2YXIgbixyO2ZvcihuPXQscj0wO24+MDspcis9ZS5hW25dLG4tPW4mLW47cmV0dXJuIHJ9ZnVuY3Rpb24gcmYoZSx0LG4pe3ZhciByO3JldHVybiByPShTbih0LGUuYy5sZW5ndGgpLGUuY1t0XSksZS5jW3RdPW4scn1mdW5jdGlvbiBkNmUoZSx0LG4pe2UuYS5jLmxlbmd0aD0wLGhNbihlLHQsbiksZS5hLmMubGVuZ3RoPT0wfHxqX24oZSx0KX1mdW5jdGlvbiBlTihlKXtlLmk9MCxhTyhlLmIsbnVsbCksYU8oZS5jLG51bGwpLGUuYT1udWxsLGUuZT1udWxsLCsrZS5nfWZ1bmN0aW9uIFVIKCl7VUg9VSxHMT0hMCxJNnQ9ITEsTzZ0PSExLFA2dD0hMSxONnQ9ITF9ZnVuY3Rpb24gU29lKGUpe1VIKCksIUcxJiYodGhpcy5jPWUsdGhpcy5lPSEwLHRoaXMuYT1uZXcgYnQpfWZ1bmN0aW9uIHd1dChlLHQpe3RoaXMuYz0wLHRoaXMuYj10LHF0dC5jYWxsKHRoaXMsZSwxNzQ5MyksdGhpcy5hPXRoaXMuY31mdW5jdGlvbiB5dXQoZSl7a3d0KCksU1FlKHRoaXMpLHRoaXMuYT1uZXcgb3MsRzdlKHRoaXMsZSksdWkodGhpcy5hLGUpfWZ1bmN0aW9uIHh1dCgpe1lzZSh0aGlzKSx0aGlzLmI9bmV3IGx0KGdzLGdzKSx0aGlzLmE9bmV3IGx0KGlhLGlhKX1mdW5jdGlvbiBHSCgpe0dIPVUsZGdlPW5ldyBLM2UoSEVlLDApLGhPZT1uZXcgSzNlKCJUQVJHRVRfV0lEVEgiLDEpfWZ1bmN0aW9uIFc1KGUsdCl7cmV0dXJuKHhiKGUpLF9rKG5ldyBibihlLG5ldyAkNmUodCxlLmEpKSkpLkJkKHp4KX1mdW5jdGlvbiB6bW4oKXtyZXR1cm4gdW8oKSxoZShsZShnQWUsMSksaXQsMzY3LDAsW3kwLHZnLGJ1LF91LG1jXSl9ZnVuY3Rpb24gcW1uKCl7cmV0dXJuIFJ5KCksaGUobGUocnh0LDEpLGl0LDM3NSwwLFtiQixLSyxXSyxHSyxVS10pfWZ1bmN0aW9uIEhtbigpe3JldHVybiBsMigpLGhlKGxlKG1MZSwxKSxpdCwzNDgsMCxbQTFlLGJMZSxMMWUsQlQsUFRdKX1mdW5jdGlvbiBWbW4oKXtyZXR1cm4gT0EoKSxoZShsZSh3RGUsMSksaXQsMzIzLDAsW3ZEZSx2ZGUsd2RlLHJNLGlNXSl9ZnVuY3Rpb24gVW1uKCl7cmV0dXJuIGhmKCksaGUobGUoV0xlLDEpLGl0LDE3MSwwLFtFQixZTCwkYixYTCxkNF0pfWZ1bmN0aW9uIEdtbigpe3JldHVybiBiVSgpLGhlKGxlKHFUdCwxKSxpdCwzNjgsMCxbWWRlLEdkZSxYZGUsS2RlLFdkZV0pfWZ1bmN0aW9uIEttbigpe3JldHVybiBWQSgpLGhlKGxlKHFDdCwxKSxpdCwzNzMsMCxbUTYsZTkseE0seU0sekJdKX1mdW5jdGlvbiBXbW4oKXtyZXR1cm4gWE4oKSxoZShsZShUT2UsMSksaXQsMzI0LDAsW3hPZSx3Z2UsRU9lLHlnZSxrT2VdKX1mdW5jdGlvbiBZbW4oKXtyZXR1cm4gcjEoKSxoZShsZSh4ZywxKSxpdCwxNzAsMCxbUG4saGEsemQseXYsUzJdKX1mdW5jdGlvbiBYbW4oKXtyZXR1cm4gdDYoKSxoZShsZShPTSwxKSxpdCwyNTYsMCxbS2IsdEYsWE5lLElNLFFOZV0pfWZ1bmN0aW9uIFFtbihlKXtyZXR1cm4gSHooKSxmdW5jdGlvbigpe3JldHVybiBxYm4oZSx0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIERvKGUpe3JldHVybiFlLmN8fCFlLmQ/ITE6ISFlLmMuaSYmZS5jLmk9PWUuZC5pfWZ1bmN0aW9uIGc2ZShlLHQpe3JldHVybiBEZSh0LDE0Myk/dm4oZS5jLGwodCwxNDMpLmMpOiExfWZ1bmN0aW9uIFlsKGUpe3JldHVybiBlLnR8fChlLnQ9bmV3IGJRZShlKSxfQShuZXcgSUplKGUpLDAsZS50KSksZS50fWZ1bmN0aW9uIGt1dChlKXt0aGlzLmI9ZSxvci5jYWxsKHRoaXMsZSksdGhpcy5hPWwoS24odGhpcy5iLmEsNCksMTI5KX1mdW5jdGlvbiBFdXQoZSl7dGhpcy5iPWUsSDguY2FsbCh0aGlzLGUpLHRoaXMuYT1sKEtuKHRoaXMuYi5hLDQpLDEyOSl9ZnVuY3Rpb24gaDAoZSx0LG4scixhKXtPdXQuY2FsbCh0aGlzLHQscixhKSx0aGlzLmM9ZSx0aGlzLmI9bn1mdW5jdGlvbiBwNmUoZSx0LG4scixhKXtXb3QuY2FsbCh0aGlzLHQscixhKSx0aGlzLmM9ZSx0aGlzLmE9bn1mdW5jdGlvbiBiNmUoZSx0LG4scixhKXtZb3QuY2FsbCh0aGlzLHQscixhKSx0aGlzLmM9ZSx0aGlzLmE9bn1mdW5jdGlvbiBtNmUoZSx0LG4scixhKXtPdXQuY2FsbCh0aGlzLHQscixhKSx0aGlzLmM9ZSx0aGlzLmE9bn1mdW5jdGlvbiBfb2UoZSx0KXt2YXIgbjtyZXR1cm4gbj1sKEIxKGUuZCx0KSwyMyksbnx8bChCMShlLmUsdCksMjMpfWZ1bmN0aW9uIFR1dChlLHQpe3ZhciBuLHI7cmV0dXJuIG49dC5sZCgpLHI9ZS5GZShuKSwhIXImJkpjKHIuZSx0Lm1kKCkpfWZ1bmN0aW9uIEN1dChlLHQpe3ZhciBuO3JldHVybiBuPXQubGQoKSxuZXcgaXcobixlLmUucGMobixsKHQubWQoKSwxNikpKX1mdW5jdGlvbiBKbW4oZSx0KXt2YXIgbjtyZXR1cm4gbj1lLmEuZ2V0KHQpLG4/P1dlKHdhLFJuLDEsMCw1LDEpfWZ1bmN0aW9uIFN1dChlKXt2YXIgdDtyZXR1cm4gdD1lLmxlbmd0aCx2bihzci5zdWJzdHIoc3IubGVuZ3RoLXQsdCksZSl9ZnVuY3Rpb24geHIoZSl7aWYoanIoZSkpcmV0dXJuIGUuYz1lLmEsZS5hLlBiKCk7dGhyb3cgdWUobmV3IF9jKX1mdW5jdGlvbiB2NmUoZSx0KXtyZXR1cm4gdD09MHx8ZS5lPT0wP2U6dD4wP3BidChlLHQpOmoxdChlLC10KX1mdW5jdGlvbiBzeChlLHQpe3JldHVybiB0PT0wfHxlLmU9PTA/ZTp0PjA/ajF0KGUsdCk6cGJ0KGUsLXQpfWZ1bmN0aW9uIHc2ZShlKXt1bG4uY2FsbCh0aGlzLGU9PW51bGw/dWw6eGMoZSksRGUoZSw4Mik/bChlLDgyKTpudWxsKX1mdW5jdGlvbiBfdXQoZSl7dmFyIHQ7cmV0dXJuIGUuY3x8KHQ9ZS5yLERlKHQsOTApJiYoZS5jPWwodCwyOSkpKSxlLmN9ZnVuY3Rpb24gQW9lKGUpe3ZhciB0O3JldHVybiB0PW5ldyBUdyxwYyh0LGUpLHJ0KHQsKE50KCksY2MpLG51bGwpLHR9ZnVuY3Rpb24gQXV0KGUpe3ZhciB0LG47cmV0dXJuIHQ9ZS5jLmksbj1lLmQuaSx0Lms9PShabigpLFVzKSYmbi5rPT1Vc31mdW5jdGlvbiBMb2UoZSl7dmFyIHQsbixyO3JldHVybiB0PWUmZWgsbj1lPj4yMiZlaCxyPWU8MD9ocDowLHF1KHQsbixyKX1mdW5jdGlvbiBabW4oZSl7dmFyIHQsbixyLGE7Zm9yKG49ZSxyPTAsYT1uLmxlbmd0aDtyPGE7KytyKXQ9bltyXSx0QSh0KX1mdW5jdGlvbiBldm4oZSx0KXt2YXIgbixyO249bCh1NG4oZS5jLHQpLDE2KSxuJiYocj1uLmdjKCksbi4kYigpLGUuZC09cil9ZnVuY3Rpb24gTW9lKGUsdCxuKXt2YXIgcjtyZXR1cm4gcj1lLkloKHQpLHI+PTA/ZS5MaChyLG4sITApOkh3KGUsdCxuKX1mdW5jdGlvbiB0dm4oZSx0LG4pe3JldHVybiBZaSh6OChCRShlKSxKYSh0LmIpKSx6OChCRShlKSxKYShuLmIpKSl9ZnVuY3Rpb24gbnZuKGUsdCxuKXtyZXR1cm4gWWkoejgoQkUoZSksSmEodC5lKSksejgoQkUoZSksSmEobi5lKSkpfWZ1bmN0aW9uIHJ2bihlLHQpe3JldHVybiBiLk1hdGgubWluKHBiKHQuYSxlLmQuZC5jKSxwYih0LmIsZS5kLmQuYykpfWZ1bmN0aW9uIHROKGUsdCl7ZS5faShlLmkrMSksUl8oZSxlLmksZS5aaShlLmksdCkpLGUuTWkoZS5pKyssdCksZS5OaSgpfWZ1bmN0aW9uIHVBKGUpe3ZhciB0LG47KytlLmosdD1lLmcsbj1lLmksZS5nPW51bGwsZS5pPTAsZS5PaShuLHQpLGUuTmkoKX1mdW5jdGlvbiBMdXQoZSx0LG4pe3ZhciByO3I9bmV3IHZ5ZShlLmEpLGJBKHIsZS5hLmEpLGp1KHIuZix0LG4pLGUuYS5hPXJ9ZnVuY3Rpb24geTZlKGUsdCxuLHIpe3ZhciBhO2ZvcihhPTA7YTxnSzthKyspaEgoZS5hW2FdW3QuZ10sbixyW3QuZ10pfWZ1bmN0aW9uIHg2ZShlLHQsbixyKXt2YXIgYTtmb3IoYT0wO2E8cTBlO2ErKylmSChlLmFbdC5nXVthXSxuLHJbdC5nXSl9ZnVuY3Rpb24gJGkoZSx0KXt2YXIgbjtyZXR1cm4gbj1sKGUuYy54Yyh0KSwxNiksIW4mJihuPWUuaWModCkpLGUucGModCxuKX1mdW5jdGlvbiBpdm4oZSl7dmFyIHQ7cmV0dXJuIHQ9KFhyKGUpLGU/bmV3IE9sKGUpOiRrKGUuS2MoKSkpLEpOKHQpLFJWKHQpfWZ1bmN0aW9uIE8xKGUpe3ZhciB0LG47cmV0dXJuIFhyKGUpLHQ9dHBuKGUubGVuZ3RoKSxuPW5ldyBCdSh0KSxqN2UobixlKSxufWZ1bmN0aW9uIERvZShlLHQsbixyKXt2YXIgYTtyZXR1cm4gYT1XZShWcixkaSwyOCx0LDE1LDEpLEN4bihhLGUsdCxuLHIpLGF9ZnVuY3Rpb24gazZlKGUsdCl7aWYoZTwwfHxlPnQpdGhyb3cgdWUobmV3IHRjKHU5ZShlLHQsImluZGV4IikpKTtyZXR1cm4gZX1mdW5jdGlvbiB0MihlLHQpe3ZhciBuO3JldHVybiBuPShTbih0LGUuYy5sZW5ndGgpLGUuY1t0XSksZDNlKGUuYyx0LDEpLG59ZnVuY3Rpb24gRTZlKGUsdCl7dmFyIG4scjtyZXR1cm4gbj0obnIoZSksZSkscj0obnIodCksdCksbj09cj8wOm48cj8tMToxfWZ1bmN0aW9uIFQ2ZShlKXt2YXIgdDtyZXR1cm4gdD1lLmUrZS5mLGlzTmFOKHQpJiZHcShlLmQpP2UuZDp0fWZ1bmN0aW9uIHN2bihlKXtyZXR1cm4gZS5lPTMsZS5kPWUuWWIoKSxlLmUhPTI/KGUuZT0wLCEwKTohMX1mdW5jdGlvbiBKZyhlLHQpe3JldHVybiBlLmE/aGkoZS5hLGUuYik6ZS5hPW5ldyBUaChlLmQpLE5fKGUuYSx0KSxlfWZ1bmN0aW9uIGF4KGUsdCl7cmV0dXJuIElhKHQpP3Q9PW51bGw/UzllKGUuZixudWxsKTpVZnQoZS5pLHQpOlM5ZShlLmYsdCl9ZnVuY3Rpb24gTXV0KGUsdCl7enR0LmNhbGwodGhpcyx0LnpkKCksdC55ZCgpJi02KSxucihlKSx0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBEdXQoZSx0KXtxdHQuY2FsbCh0aGlzLHQuemQoKSx0LnlkKCkmLTYpLG5yKGUpLHRoaXMuYT1lLHRoaXMuYj10fWZ1bmN0aW9uIEM2ZShlLHQpe0RxLmNhbGwodGhpcyx0LnpkKCksdC55ZCgpJi02KSxucihlKSx0aGlzLmE9ZSx0aGlzLmI9dH1mdW5jdGlvbiBJdXQoZSx0LG4pe056LmNhbGwodGhpcyxuKSx0aGlzLmI9ZSx0aGlzLmM9dCx0aGlzLmQ9KFdjZSgpLGlwZSl9ZnVuY3Rpb24gT3V0KGUsdCxuKXt0aGlzLmQ9ZSx0aGlzLms9dD8xOjAsdGhpcy5mPW4/MTowLHRoaXMubz0tMSx0aGlzLnA9MH1mdW5jdGlvbiBOMShlKXt0aGlzLmM9ZSx0aGlzLmE9bmV3IEcodGhpcy5jLmEpLHRoaXMuYj1uZXcgRyh0aGlzLmMuYil9ZnVuY3Rpb24gS0goKXt0aGlzLmU9bmV3IGJ0LHRoaXMuYz1uZXcgYnQsdGhpcy5kPW5ldyBidCx0aGlzLmI9bmV3IGJ0fWZ1bmN0aW9uIE51dCgpe3RoaXMuZz1uZXcgTXdlLHRoaXMuYj1uZXcgTXdlLHRoaXMuYT1uZXcgYnQsdGhpcy5rPW5ldyBidH1mdW5jdGlvbiBQdXQoKXt0aGlzLmE9bmV3IE53ZSx0aGlzLmI9bmV3IFpRZSx0aGlzLmQ9bmV3IGNoLHRoaXMuZT1uZXcgcUp9ZnVuY3Rpb24gQnV0KGUsdCxuKXt0aGlzLmE9ZSx0aGlzLmM9dCx0aGlzLmQ9bix2dCh0LmUsdGhpcyksdnQobi5iLHRoaXMpfWZ1bmN0aW9uIFM2ZShlLHQsbil7dmFyIHIsYTtmb3Iocj0wLGE9MDthPHQubGVuZ3RoO2ErKylyKz1lLnRnKHRbYV0scixuKX1mdW5jdGlvbiBhdm4oZSx0KXt2YXIgbjtyZXR1cm4gbj1DTW4oZSx0KSxlLmI9bmV3IFRWKG4uYy5sZW5ndGgpLFZMbihlLG4pfWZ1bmN0aW9uIG92bihlLHQpe3ZhciBuO249ZS5xLmdldEhvdXJzKCkrKHQvNjB8MCksZS5xLnNldE1pbnV0ZXModCksWEEoZSxuKX1mdW5jdGlvbiBJb2UoZSl7dmFyIHQ7cmV0dXJuIHQ9ZS5iLHQuYj09MD9udWxsOmwoZmYodCwwKSw2NSkuYn1mdW5jdGlvbiBfNmUoZSl7aWYoZS5hKXtpZihlLmUpcmV0dXJuIF82ZShlLmUpfWVsc2UgcmV0dXJuIGU7cmV0dXJuIG51bGx9ZnVuY3Rpb24gY3ZuKGUsdCl7cmV0dXJuIGUucDx0LnA/MTplLnA+dC5wPy0xOjB9ZnVuY3Rpb24gRnV0KGUpe3ZhciB0O3JldHVybiBlLmF8fCh0PWUucixEZSh0LDE1NikmJihlLmE9bCh0LDE1NikpKSxlLmF9ZnVuY3Rpb24gdXZuKGUsdCxuKXt2YXIgcjtyZXR1cm4rK2UuZSwtLWUuZixyPWwoZS5kW3RdLmdkKG4pLDEzNiksci5tZCgpfWZ1bmN0aW9uIGx2bihlKXt2YXIgdCxuO3JldHVybiB0PWUubGQoKSxuPWwoZS5tZCgpLDE2KSxOTyhuLk5jKCksbmV3IGJpZSh0KSl9ZnVuY3Rpb24gUnV0KGUsdCl7cmV0dXJuIEh1KGUuYSx0KT8oYXgoZS5hLHQpLCEwKTohMX1mdW5jdGlvbiBveChlLHQsbil7cmV0dXJuIFpPKHQsZS5lLlJkKCkuZ2MoKSksWk8obixlLmMuUmQoKS5nYygpKSxlLmFbdF1bbl19ZnVuY3Rpb24gV0goZSx0LG4pe3RoaXMuYT1lLHRoaXMuYj10LHRoaXMuYz1uLHZ0KGUudCx0aGlzKSx2dCh0LmksdGhpcyl9ZnVuY3Rpb24gWUgoZSx0LG4scil7dGhpcy5mPWUsdGhpcy5lPXQsdGhpcy5kPW4sdGhpcy5iPXIsdGhpcy5jPXI/ci5kOm51bGx9ZnVuY3Rpb24gbk4oKXt0aGlzLmI9bmV3IG9zLHRoaXMuYT1uZXcgb3MsdGhpcy5iPW5ldyBvcyx0aGlzLmE9bmV3IG9zfWZ1bmN0aW9uIGVFKCl7ZUU9VTt2YXIgZSx0O1NZPShTaygpLHQ9bmV3IEZ6LHQpLF9ZPShlPW5ldyB6aWUsZSl9ZnVuY3Rpb24gaHZuKGUpe3ZhciB0O3JldHVybiB4YihlKSx0PW5ldyBNaXQoZSxlLmEuZSxlLmEuZHw0KSxuZXcgVnllKGUsdCl9ZnVuY3Rpb24ganV0KGUpe3ZhciB0O2ZvcihmYihlKSx0PTA7ZS5hLkJkKG5ldyBBbik7KXQ9Ym8odCwxKTtyZXR1cm4gdH1mdW5jdGlvbiBYSChlLHQpe3JldHVybiBucih0KSxlLmM8ZS5kPyhlLlNlKHQsZS5jKyspLCEwKTohMX1mdW5jdGlvbiBCdShlKXtZc2UodGhpcyksQk8oZT49MCwiSW5pdGlhbCBjYXBhY2l0eSBtdXN0IG5vdCBiZSBuZWdhdGl2ZSIpfWZ1bmN0aW9uIFFIKCl7UUg9VSxrTT1uZXcgVWkoIm9yZy5lY2xpcHNlLmVsay5sYWJlbHMubGFiZWxNYW5hZ2VyIil9ZnVuY3Rpb24gJHV0KCl7JHV0PVUsc0xlPW5ldyB2cygic2VwYXJhdGVMYXllckNvbm5lY3Rpb25zIiwoSVYoKSxwMWUpKX1mdW5jdGlvbiBKMCgpe0owPVUsRTQ9bmV3IHEzZSgiUkVHVUxBUiIsMCkscWI9bmV3IHEzZSgiQ1JJVElDQUwiLDEpfWZ1bmN0aW9uIHJOKCl7ck49VSx2Z2U9bmV3IFkzZSgiRklYRUQiLDApLFFXPW5ldyBZM2UoIkNFTlRFUl9OT0RFIiwxKX1mdW5jdGlvbiBKSCgpe0pIPVUsbExlPW5ldyBOM2UoIlFVQURSQVRJQyIsMCksUzFlPW5ldyBOM2UoIlNDQU5MSU5FIiwxKX1mdW5jdGlvbiB6dXQoKXt6dXQ9VSxkeHQ9S3IoKGRBKCksaGUobGUoZExlLDEpLGl0LDMyMiwwLFtITCxtQixmTGVdKSkpfWZ1bmN0aW9uIHF1dCgpe3F1dD1VLGd4dD1LcigocFYoKSxoZShsZShwTGUsMSksaXQsMzUxLDAsW2dMZSxZSyxfMWVdKSkpfWZ1bmN0aW9uIEh1dCgpe0h1dD1VLHV4dD1LcigoT3coKSxoZShsZShtMWUsMSksaXQsMzcyLDAsW28zLFJiLGEzXSkpKX1mdW5jdGlvbiBWdXQoKXtWdXQ9VSx2eHQ9S3IoKFZtKCksaGUobGUobXh0LDEpLGl0LDQ2MCwwLFtNMWUsRlQsUDZdKSkpfWZ1bmN0aW9uIFV1dCgpe1V1dD1VLFR4dD1LcigodkUoKSxoZShsZSgkMWUsMSksaXQsMjk5LDAsW1IxZSxqMWUsdkJdKSkpfWZ1bmN0aW9uIEd1dCgpe0d1dD1VLFN4dD1LcigoZXAoKSxoZShsZShDeHQsMSksaXQsMzExLDAsW3dCLEY2LFV4XSkpKX1mdW5jdGlvbiBLdXQoKXtLdXQ9VSxaa3Q9S3IoKEVBKCksaGUobGUobURlLDEpLGl0LDM5MCwwLFtwZGUsYkRlLFNXXSkpKX1mdW5jdGlvbiBXdXQoKXtXdXQ9VSxvRXQ9S3IoKExWKCksaGUobGUoTURlLDEpLGl0LDM4NywwLFtBRGUsVGRlLExEZV0pKSl9ZnVuY3Rpb24gWXV0KCl7WXV0PVUsY0V0PUtyKCh5QSgpLGhlKGxlKEREZSwxKSxpdCwzNDksMCxbU2RlLENkZSxNQl0pKSl9ZnVuY3Rpb24gWHV0KCl7WHV0PVUsYUV0PUtyKChxbygpLGhlKGxlKHNFdCwxKSxpdCw0NjMsMCxbc00sJGwsenVdKSkpfWZ1bmN0aW9uIFF1dCgpe1F1dD1VLHVFdD1LcigoU0UoKSxoZShsZShPRGUsMSksaXQsMzUwLDAsW19kZSxJRGUsYU1dKSkpfWZ1bmN0aW9uIEp1dCgpe0p1dD1VLGxFdD1LcigoZ1YoKSxoZShsZShCRGUsMSksaXQsMzUyLDAsW1BEZSxBZGUsTkRlXSkpKX1mdW5jdGlvbiBadXQoKXtadXQ9VSxoRXQ9S3IoKE9WKCksaGUobGUoRkRlLDEpLGl0LDM4OCwwLFtMZGUsWFQsazRdKSkpfWZ1bmN0aW9uIGVsdCgpe2VsdD1VLGZUdD1LcigoeEEoKSxoZShsZShlSWUsMSksaXQsMzkyLDAsW1pEZSxJZGUsT0JdKSkpfWZ1bmN0aW9uIHRsdCgpe3RsdD1VLFVUdD1LcigoTE4oKSxoZShsZShBSWUsMSksaXQsMzkzLDAsW3pXLFNJZSxfSWVdKSkpfWZ1bmN0aW9uIG5sdCgpe25sdD1VLGZDdD1LcigoQVYoKSxoZShsZShHSWUsMSksaXQsMzAwLDAsW25nZSxVSWUsVkllXSkpKX1mdW5jdGlvbiBybHQoKXtybHQ9VSxkQ3Q9S3IoKFdWKCksaGUobGUoS0llLDEpLGl0LDQ0NSwwLFtSQixWVyxyZ2VdKSkpfWZ1bmN0aW9uIGlsdCgpe2lsdD1VLHBDdD1Lcigoc1UoKSxoZShsZShnQ3QsMSksaXQsNDU2LDAsW2lnZSxhZ2Usc2dlXSkpKX1mdW5jdGlvbiBzbHQoKXtzbHQ9VSx2Q3Q9S3IoKHFWKCksaGUobGUoWEllLDEpLGl0LDM5NCwwLFtZSWUsdWdlLFdJZV0pKSl9ZnVuY3Rpb24gYWx0KCl7YWx0PVUsJEN0PUtyKCh0VigpLGhlKGxlKHBPZSwxKSxpdCw0MzksMCxbZ2dlLGdPZSxkT2VdKSkpfWZ1bmN0aW9uIG9sdCgpe29sdD1VLF9FdD1LcigoSXcoKSxoZShsZShTRXQsMSksaXQsNDY0LDAsW0RCLG9NLE1XXSkpKX1mdW5jdGlvbiBjbHQoKXtjbHQ9VSxZNnQ9S3IoKEJsKCksaGUobGUoVzZ0LDEpLGl0LDQ3MSwwLFtGZCxCYix2MF0pKSl9ZnVuY3Rpb24gdWx0KCl7dWx0PVUsSzZ0PUtyKCh0MSgpLGhlKGxlKHM0LDEpLGl0LDIzNywwLFtHYywkdSxLY10pKSl9ZnVuY3Rpb24gbGx0KCl7bGx0PVUsUTZ0PUtyKChvbCgpLGhlKGxlKFg2dCwxKSxpdCw0NzIsMCxbYTEsRmIsdzBdKSkpfWZ1bmN0aW9uIGhsdCgpe2hsdD1VLEI2dD1LcigoRmwoKSxoZShsZShvYywxKSxpdCwxMDgsMCxbeV9lLEVjLGk0XSkpKX1mdW5jdGlvbiBmbHQoKXtmbHQ9VSxtOHQ9S3IoKGxBKCksaGUobGUoZEFlLDEpLGl0LDM5MSwwLFt0MWUsZTFlLG4xZV0pKSl9ZnVuY3Rpb24gZGx0KCl7ZGx0PVUsUVN0PUtyKChycCgpLGhlKGxlKFlOZSwxKSxpdCwzNDYsMCxbb1ksQTIsRE1dKSkpfWZ1bmN0aW9uIGdsdCgpe2dsdD1VLFZDdD1LcigoUE4oKSxoZShsZShwZ2UsMSksaXQsNDQ0LDAsW1dXLFlXLFhXXSkpKX1mdW5jdGlvbiBwbHQoKXtwbHQ9VSxLU3Q9S3IoKEYxKCksaGUobGUoRk5lLDEpLGl0LDI3OCwwLFtuQyxfNCxyQ10pKSl9ZnVuY3Rpb24gYmx0KCl7Ymx0PVUsaF90PUtyKChkeCgpLGhlKGxlKG5QZSwxKSxpdCwyODAsMCxbdFBlLEw0LGRZXSkpKX1mdW5jdGlvbiBQMShlLHQpe3JldHVybiFlLm8mJihlLm89bmV3IHhsKChzdSgpLENnKSxMMixlLDApKSxLY2UoZS5vLHQpfWZ1bmN0aW9uIGZ2bihlLHQpe3ZhciBuO2UuQyYmKG49bChRbyhlLmIsdCksMTI3KS5uLG4uZD1lLkMuZCxuLmE9ZS5DLmEpfWZ1bmN0aW9uIEE2ZShlKXt2YXIgdCxuLHIsYTthPWUuZCx0PWUuYSxuPWUuYixyPWUuYyxlLmQ9bixlLmE9cixlLmI9YSxlLmM9dH1mdW5jdGlvbiBkdm4oZSl7cmV0dXJuIWUuZyYmKGUuZz1uZXcgTVMpLCFlLmcuYiYmKGUuZy5iPW5ldyBmUWUoZSkpLGUuZy5ifWZ1bmN0aW9uIGlOKGUpe3JldHVybiFlLmcmJihlLmc9bmV3IE1TKSwhZS5nLmMmJihlLmcuYz1uZXcgcFFlKGUpKSxlLmcuY31mdW5jdGlvbiBndm4oZSl7cmV0dXJuIWUuZyYmKGUuZz1uZXcgTVMpLCFlLmcuZCYmKGUuZy5kPW5ldyBkUWUoZSkpLGUuZy5kfWZ1bmN0aW9uIHB2bihlKXtyZXR1cm4hZS5nJiYoZS5nPW5ldyBNUyksIWUuZy5hJiYoZS5nLmE9bmV3IGdRZShlKSksZS5nLmF9ZnVuY3Rpb24gYnZuKGUsdCxuLHIpe3JldHVybiBuJiYocj1uLlJoKHQsbXMobi5EaCgpLGUuYy51aygpKSxudWxsLHIpKSxyfWZ1bmN0aW9uIG12bihlLHQsbixyKXtyZXR1cm4gbiYmKHI9bi5UaCh0LG1zKG4uRGgoKSxlLmMudWsoKSksbnVsbCxyKSkscn1mdW5jdGlvbiBPb2UoZSx0LG4scil7dmFyIGE7cmV0dXJuIGE9V2UoVnIsZGksMjgsdCsxLDE1LDEpLHhBbihhLGUsdCxuLHIpLGF9ZnVuY3Rpb24gV2UoZSx0LG4scixhLG8pe3ZhciBmO3JldHVybiBmPXpkdChhLHIpLGEhPTEwJiZoZShsZShlLG8pLHQsbixhLGYpLGZ9ZnVuY3Rpb24gdnZuKGUsdCxuKXt2YXIgcixhO2ZvcihhPW5ldyBtRSh0LGUpLHI9MDtyPG47KytyKWlVKGEpO3JldHVybiBhfWZ1bmN0aW9uIE5vZShlLHQsbil7dmFyIHIsYTtpZihuIT1udWxsKWZvcihyPTA7cjx0OysrcilhPW5bcl0sZS5RaShyLGEpfWZ1bmN0aW9uIEw2ZShlLHQpe3ZhciBuO3JldHVybiBuPW5ldyB4dCxuLmM9ITAsbi5kPXQubWQoKSxPdnQoZSx0LmxkKCksbil9ZnVuY3Rpb24gd3ZuKGUsdCl7dmFyIG47bj1lLnEuZ2V0SG91cnMoKSsodC8zNjAwfDApLGUucS5zZXRTZWNvbmRzKHQpLFhBKGUsbil9ZnVuY3Rpb24gTTZlKGUsdCl7dmFyIG4scjtyZXR1cm4gbj10LHI9aW9lKCRrKG5ldyB6b2UoZSxuKSkpLGlIKG5ldyB6b2UoZSxuKSkscn1mdW5jdGlvbiB5dm4oZSx0KXt0LlVnKCJMYWJlbCBtYW5hZ2VtZW50IiwxKSxNcShRKGUsKFFIKCksa00pKSksdC5WZygpfWZ1bmN0aW9uIHh2bihlLHQsbixyKXtPbXQoZSx0LG4sWEUoZSx0LHIsRGUodCwxMDIpJiYobCh0LDE5KS5CYiZJbykhPTApKX1mdW5jdGlvbiBENmUoZSx0LG4pe2woZS5iLDY4KSxsKGUuYiw2OCksbChlLmIsNjgpLFZ1KGUuYSxuZXcgYml0KG4sdCxlKSl9ZnVuY3Rpb24gR2EoZSx0LG4pe2lmKGU8MHx8dD5ufHx0PGUpdGhyb3cgdWUobmV3IGUzZShlRytlK2ZFZSt0K3VFZStuKSl9ZnVuY3Rpb24gUG9lKGUpe2U/KHRoaXMuYz1lLHRoaXMuYj1udWxsKToodGhpcy5jPW51bGwsdGhpcy5iPW5ldyBidCl9ZnVuY3Rpb24gQm9lKGUsdCl7Y3EuY2FsbCh0aGlzLGUsdCksdGhpcy5hPVdlKGRPbixYVSw0NDcsMiwwLDEpLHRoaXMuYj0hMH1mdW5jdGlvbiBJNmUoZSl7cDB0LmNhbGwodGhpcyxlLDApLGNydCh0aGlzKSx0aGlzLmQuYj10aGlzLmQsdGhpcy5kLmE9dGhpcy5kfWZ1bmN0aW9uIE82ZShlKXt0aGlzLmU9ZSx0aGlzLmI9dGhpcy5lLmEuZW50cmllcygpLHRoaXMuYT1XZSh3YSxSbiwxLDAsNSwxKX1mdW5jdGlvbiBtbHQoKXttbHQ9VSxnRXQ9eWwoZmkobmV3IFhzLCh1bygpLHkwKSwodm8oKSxmMWUpKSxtYyxnQil9ZnVuY3Rpb24ga3ZuKCl7cmV0dXJuIHlVKCksaGUobGUoeUxlLDEpLGl0LDI4MywwLFtJMWUsRDFlLE4xZSxPMWUsUDFlLFFLXSl9ZnVuY3Rpb24gRXZuKCl7cmV0dXJuIFdOKCksaGUobGUoX0xlLDEpLGl0LDI4MSwwLFtaSyxUTGUsU0xlLEVMZSxDTGUsQjFlXSl9ZnVuY3Rpb24gVHZuKCl7cmV0dXJuIHpFKCksaGUobGUoT0xlLDEpLGl0LDI4MiwwLFtWTCxMTGUsSUxlLERMZSxNTGUsQUxlXSl9ZnVuY3Rpb24gQ3ZuKCl7cmV0dXJuIHl4KCksaGUobGUoTlQsMSksaXQsMjMyLDAsW09ULHFMLElULGg0LE42LE82XSl9ZnVuY3Rpb24gU3ZuKCl7cmV0dXJuIFpuKCksaGUobGUobDFlLDEpLGl0LDI3MywwLFtQcyxBYSxVcyxBdSxjdSxLMV0pfWZ1bmN0aW9uIF92bigpe3JldHVybiBSbCgpLGhlKGxlKGNZLDEpLGl0LDI3OSwwLFtZYix2cCxuRixQTSxOTSxhOV0pfWZ1bmN0aW9uIEF2bigpe3JldHVybiBSYSgpLGhlKGxlKEpOZSwxKSxpdCwxMDEsMCxbV2IsWjEsc0MsVHYsVGcsTXVdKX1mdW5jdGlvbiBMdm4oKXtyZXR1cm4gdlUoKSxoZShsZShITmUsMSksaXQsMzIxLDAsW1VnZSwkTmUscU5lLFJOZSx6TmUsak5lXSl9ZnVuY3Rpb24gTXZuKCl7cmV0dXJuIG9nKCksaGUobGUoS09lLDEpLGl0LDI1NSwwLFtTZ2UsSEIsVkIsblksZVksdFldKX1mdW5jdGlvbiBEdm4oKXtyZXR1cm4gWW0oKSxoZShsZShNZ2UsMSksaXQsMjk4LDAsW0xnZSxTTSxDTSxBZ2UsRU0sVE1dKX1mdW5jdGlvbiBONmUoZSl7dmFyIHQ7cmV0dXJuIWUuYSYmZS5iIT0tMSYmKHQ9ZS5jLkRoKCksZS5hPU1uKHQsZS5iKSksZS5hfWZ1bmN0aW9uIHFyKGUsdCl7cmV0dXJuIGUuU2koKSYmZS5IYyh0KT8hMTooZS5IaSh0KSwhMCl9ZnVuY3Rpb24gWjAoZSx0KXtyZXR1cm4gVU8odCwiSG9yaXpvbnRhbCBhbGlnbm1lbnQgY2Fubm90IGJlIG51bGwiKSxlLmI9dCxlfWZ1bmN0aW9uIHZsdChlLHQsbil7RGkoKTt2YXIgcjtyZXR1cm4gcj1fYihlLHQpLG4mJnImJnpnbihlKSYmKHI9bnVsbCkscn1mdW5jdGlvbiBQNmUoZSx0LG4pe3ZhciByO3I9ZS5iW24uYy5wXVtuLnBdLHIuYis9dC5iLHIuYys9dC5jLHIuYSs9dC5hLCsrci5hfWZ1bmN0aW9uIEI2ZShlLHQsbil7dmFyIHI7ZS5kW3QuZ109bixyPWUuZy5jLHJbdC5nXT1iLk1hdGgubWF4KHJbdC5nXSxuKzEpfWZ1bmN0aW9uIHBiKGUsdCl7dmFyIG4scjtyZXR1cm4gbj1lLmEtdC5hLHI9ZS5iLXQuYixiLk1hdGguc3FydChuKm4rcipyKX1mdW5jdGlvbiBGNmUoZSx0KXt2YXIgbixyO2ZvcihyPXQuS2MoKTtyLk9iKCk7KW49bChyLlBiKCksMzYpLGNtdChlLG4sMCwwKX1mdW5jdGlvbiBuMihlLHQsbil7dmFyIHIsYTtmb3IoYT1lLktjKCk7YS5PYigpOylyPWwoYS5QYigpLDM2KSxLRShyLHQsbil9ZnVuY3Rpb24gSXZuKGUpe3ZhciB0LG47Zm9yKG49UnIoZS5hLDApO24uYiE9bi5kLmM7KXQ9bChCcihuKSw2NSksYjllKHQpfWZ1bmN0aW9uIHdsdChlLHQpe3JldHVybiB3ZXQoZS5lLHQpfHxoMihlLmUsdCxuZXcgdWR0KHQpKSxsKEIxKGUuZSx0KSwxMTMpfWZ1bmN0aW9uIFBsKGUsdCxuLHIpe3JldHVybiBucihlKSxucih0KSxucihuKSxucihyKSxuZXcgaDVlKGUsdCxuZXcgUHQpfWZ1bmN0aW9uIHhsKGUsdCxuLHIpe3RoaXMuYWsoKSx0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9bmV3IGE1ZSh0aGlzLHQsbixyKX1mdW5jdGlvbiBGb2UoZSx0LG4scixhLG8pe3I2ZS5jYWxsKHRoaXMsdCxyLGEsbyksdGhpcy5jPWUsdGhpcy5iPW59ZnVuY3Rpb24gc04oZSx0LG4scixhLG8pe3I2ZS5jYWxsKHRoaXMsdCxyLGEsbyksdGhpcy5jPWUsdGhpcy5hPW59ZnVuY3Rpb24gYU4oZSx0KXt2YXIgbixyLGE7cmV0dXJuIGE9ZS5yLHI9ZS5kLG49WkEoZSx0LCEwKSxuLmIhPWF8fG4uYSE9cn1mdW5jdGlvbiBvTihlLHQsbil7dmFyIHIsYTtyZXR1cm4gYT0ocj1WRShlLmIsdCksciksYT9WVShsTihlLGEpLG4pOm51bGx9ZnVuY3Rpb24gT3ZuKGUsdCxuKXt2YXIgcixhLG87cj1XZyhlLG4pLGE9bnVsbCxyJiYoYT1lOWUocikpLG89YSxhZHQodCxuLG8pfWZ1bmN0aW9uIE52bihlLHQsbil7dmFyIHIsYSxvO3I9V2coZSxuKSxhPW51bGwsciYmKGE9ZTllKHIpKSxvPWEsYWR0KHQsbixvKX1mdW5jdGlvbiB0RShlLHQpe3ZhciBuO3JldHVybiBuPWUuSWgodCksbj49MD9lLkxoKG4sITAsITApOkh3KGUsdCwhMCl9ZnVuY3Rpb24gUHZuKGUsdCxuKXt2YXIgcjtyZXR1cm4gcj13MHQoZSx0LG4pLGUuYj1uZXcgVFYoci5jLmxlbmd0aCksUTllKGUscil9ZnVuY3Rpb24gQnZuKGUpe2lmKGUuYjw9MCl0aHJvdyB1ZShuZXcgX2MpO3JldHVybi0tZS5iLGUuYS09ZS5jLmMscHQoZS5hKX1mdW5jdGlvbiBGdm4oZSl7dmFyIHQ7aWYoIWUuYSl0aHJvdyB1ZShuZXcgTGF0KTtyZXR1cm4gdD1lLmEsZS5hPWRzKGUuYSksdH1mdW5jdGlvbiBSdm4oZSl7Zm9yKDshZS5hOylpZighdGl0KGUuYyxuZXcgWlMoZSkpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGN4KGUpe3ZhciB0O3JldHVybiBYcihlKSxEZShlLDIwNCk/KHQ9bChlLDIwNCksdCk6bmV3IHc4KGUpfWZ1bmN0aW9uIGp2bihlKXtaSCgpLGwoZS5vZigocGkoKSxTNCkpLDE4MSkuRmMoKFJsKCksbkYpKSxlLnFmKCRnZSxudWxsKX1mdW5jdGlvbiBaSCgpe1pIPVUscFN0PW5ldyBsJCxtU3Q9bmV3IGgkLGJTdD1feW4oKHBpKCksJGdlKSxwU3QsVWIsbVN0KX1mdW5jdGlvbiBlVigpe2VWPVUsVEllPW5ldyBHM2UoIkxFQUZfTlVNQkVSIiwwKSxRZGU9bmV3IEczZSgiTk9ERV9TSVpFIiwxKX1mdW5jdGlvbiBSb2UoZSl7ZS5hPVdlKFZyLGRpLDI4LGUuYisxLDE1LDEpLGUuYz1XZShWcixkaSwyOCxlLmIsMTUsMSksZS5kPTB9ZnVuY3Rpb24gJHZuKGUsdCl7ZS5hLk5lKHQuZCxlLmIpPjAmJih2dChlLmMsbmV3IEw0ZSh0LmMsdC5kLGUuZCkpLGUuYj10LmQpfWZ1bmN0aW9uIFI2ZShlLHQpe2lmKGUuZz09bnVsbHx8dD49ZS5pKXRocm93IHVlKG5ldyBWc2UodCxlLmkpKTtyZXR1cm4gZS5nW3RdfWZ1bmN0aW9uIHlsdChlLHQsbil7aWYoRUUoZSxuKSxuIT1udWxsJiYhZS5mayhuKSl0aHJvdyB1ZShuZXcgUmllKTtyZXR1cm4gbn1mdW5jdGlvbiBqb2UoZSx0KXtyZXR1cm4gZ04odCkhPTEwJiZoZShiaCh0KSx0LlNtLHQuX19lbGVtZW50VHlwZUlkJCxnTih0KSxlKSxlfWZ1bmN0aW9uIG5FKGUsdCxuLHIpe3ZhciBhO3I9KEV3KCkscnx8ZF9lKSxhPWUuc2xpY2UodCxuKSxsOWUoYSxlLHQsbiwtdCxyKX1mdW5jdGlvbiBzZihlLHQsbixyLGEpe3JldHVybiB0PDA/SHcoZSxuLHIpOmwobiw2OSkud2soKS55ayhlLGUuaGkoKSx0LHIsYSl9ZnVuY3Rpb24genZuKGUsdCl7cmV0dXJuIFlpKHplKEdlKFEoZSwoZnQoKSxsMykpKSksemUoR2UoUSh0LGwzKSkpKX1mdW5jdGlvbiB4bHQoKXt4bHQ9VSxNNnQ9S3IoKHJFKCksaGUobGUoZkssMSksaXQsMzA0LDAsW08wZSxOMGUsUDBlLEIwZV0pKSl9ZnVuY3Rpb24gckUoKXtyRT1VLE8wZT1uZXcgb3EoIkFsbCIsMCksTjBlPW5ldyBobnQsUDBlPW5ldyB5bnQsQjBlPW5ldyBsbnR9ZnVuY3Rpb24gQmwoKXtCbD1VLEZkPW5ldyBwc2UoTXgsMCksQmI9bmV3IHBzZShjVCwxKSx2MD1uZXcgcHNlKER4LDIpfWZ1bmN0aW9uIGtsdCgpe2tsdD1VLHpVKCksR1BlPWdzLHZBdD1pYSxLUGU9bmV3IHBhKGdzKSx3QXQ9bmV3IHBhKGlhKX1mdW5jdGlvbiBFbHQoKXtFbHQ9VSxrN3Q9S3IoKFB3KCksaGUobGUoeDd0LDEpLGl0LDQxNywwLFtpQixyQixWMGUsVTBlXSkpKX1mdW5jdGlvbiBUbHQoKXtUbHQ9VSxfN3Q9S3IoKE5BKCksaGUobGUoUzd0LDEpLGl0LDQwNiwwLFt1QixiSyxtSyxsQl0pKSl9ZnVuY3Rpb24gQ2x0KCl7Q2x0PVUsVDd0PUtyKChieCgpLGhlKGxlKEU3dCwxKSxpdCwzMzIsMCxbYUIsc0Isb0IsY0JdKSkpfWZ1bmN0aW9uIFNsdCgpe1NsdD1VLEk4dD1LcigoS20oKSxoZShsZShtQWUsMSksaXQsMzg5LDAsW2M0LGJBZSxvMWUsYzFlXSkpKX1mdW5jdGlvbiBfbHQoKXtfbHQ9VSxTOHQ9S3IoKHdFKCksaGUobGUoQzh0LDEpLGl0LDQxNiwwLFtzMyxvNCxhNCxNNl0pKSl9ZnVuY3Rpb24gQWx0KCl7QWx0PVUsbnh0PUtyKChSMSgpLGhlKGxlKHR4dCwxKSxpdCw0MjEsMCxbVngsTVQsRFQsYjFlXSkpKX1mdW5jdGlvbiBMbHQoKXtMbHQ9VSxVOHQ9S3IoKElWKCksaGUobGUoVjh0LDEpLGl0LDM3MSwwLFtwMWUsSEssVksscEJdKSkpfWZ1bmN0aW9uIE1sdCgpe01sdD1VLGVFdD1LcigoQnkoKSxoZShsZShtZGUsMSksaXQsMjAzLDAsW19XLGJkZSxHNixVNl0pKSl9ZnVuY3Rpb24gRGx0KCl7RGx0PVUsckV0PUtyKChFZCgpLGhlKGxlKFNEZSwxKSxpdCwyODQsMCxbRTIsQ0RlLHlkZSx4ZGVdKSkpfWZ1bmN0aW9uIGNOKCl7Y049VSx4TGU9bmV3IEIzZShJZCwwKSxKSz1uZXcgQjNlKCJJTVBST1ZFX1NUUkFJR0hUTkVTUyIsMSl9ZnVuY3Rpb24gSWx0KGUsdCl7dmFyIG4scjtyZXR1cm4gcj10L2UuYy5SZCgpLmdjKCl8MCxuPXQlZS5jLlJkKCkuZ2MoKSxveChlLHIsbil9ZnVuY3Rpb24gT2x0KGUpe3ZhciB0O2lmKGUubmwoKSlmb3IodD1lLmktMTt0Pj0wOy0tdClPZShlLHQpO3JldHVybiBhNmUoZSl9ZnVuY3Rpb24gajZlKGUpe3ZhciB0LG47aWYoIWUuYilyZXR1cm4gbnVsbDtmb3Iobj1lLmI7dD1uLmFbMF07KW49dDtyZXR1cm4gbn1mdW5jdGlvbiBObHQoZSl7dmFyIHQsbjtpZighZS5iKXJldHVybiBudWxsO2ZvcihuPWUuYjt0PW4uYVsxXTspbj10O3JldHVybiBufWZ1bmN0aW9uIHF2bihlKXtyZXR1cm4gRGUoZSwxODApPyIiK2woZSwxODApLmE6ZT09bnVsbD9udWxsOnhjKGUpfWZ1bmN0aW9uIEh2bihlKXtyZXR1cm4gRGUoZSwxODApPyIiK2woZSwxODApLmE6ZT09bnVsbD9udWxsOnhjKGUpfWZ1bmN0aW9uIFBsdChlLHQpe2lmKHQuYSl0aHJvdyB1ZShuZXcgQWMoZTN0KSk7bmEoZS5hLHQpLHQuYT1lLCFlLmomJihlLmo9dCl9ZnVuY3Rpb24gJDZlKGUsdCl7RHEuY2FsbCh0aGlzLHQuemQoKSx0LnlkKCkmLTE2NDQ5KSxucihlKSx0aGlzLmE9ZSx0aGlzLmM9dH1mdW5jdGlvbiBWdm4oZSx0KXtyZXR1cm4gbmV3IHdhZSh0LGR3KEphKHQuZSksdC5mLmErZSx0LmYuYitlKSwoSG4oKSwhMSkpfWZ1bmN0aW9uIFV2bihlLHQpe3JldHVybiBqaygpLHZ0KGUsbmV3IGNhKHQscHQodC5lLmMubGVuZ3RoK3QuZy5jLmxlbmd0aCkpKX1mdW5jdGlvbiBHdm4oZSx0KXtyZXR1cm4gamsoKSx2dChlLG5ldyBjYSh0LHB0KHQuZS5jLmxlbmd0aCt0LmcuYy5sZW5ndGgpKSl9ZnVuY3Rpb24gQmx0KCl7Qmx0PVUsaEN0PUtyKCh1VSgpLGhlKGxlKEhJZSwxKSxpdCwzNTQsMCxbdGdlLHpJZSxxSWUsJEllXSkpKX1mdW5jdGlvbiBGbHQoKXtGbHQ9VSxQVHQ9S3IoKGtBKCksaGUobGUoeUllLDEpLGl0LDM1MywwLFtWZGUsalcsSGRlLHFkZV0pKSl9ZnVuY3Rpb24gUmx0KCl7Umx0PVUsbFR0PUtyKCh3eCgpLGhlKGxlKHFEZSwxKSxpdCw0MDUsMCxbTlcsbE0saE0sZk1dKSkpfWZ1bmN0aW9uIGpsdCgpe2psdD1VLFdTdD1LcigoaXAoKSxoZShsZShWZ2UsMSksaXQsMjIzLDAsW0hnZSxKQixpQyxzOV0pKSl9ZnVuY3Rpb24gJGx0KCl7JGx0PVUsWlN0PUtyKChJaCgpLGhlKGxlKEpTdCwxKSxpdCwyOTEsMCxbZUYsa2csR2IsWkJdKSkpfWZ1bmN0aW9uIHpsdCgpe3psdD1VLHVfdD1LcigobWgoKSxoZShsZShCTSwxKSxpdCwzODYsMCxbaUYsQ3YsckYsQTRdKSkpfWZ1bmN0aW9uIHFsdCgpe3FsdD1VLGRfdD1LcigoVlYoKSxoZShsZShjUGUsMSksaXQsMzIwLDAsW0tnZSxzUGUsb1BlLGFQZV0pKSl9ZnVuY3Rpb24gSGx0KCl7SGx0PVUsYl90PUtyKChOVigpLGhlKGxlKHBfdCwxKSxpdCw0MTUsMCxbV2dlLGxQZSx1UGUsaFBlXSkpKX1mdW5jdGlvbiB0Vigpe3RWPVUsZ2dlPW5ldyBqc2Uodnl0LDApLGdPZT1uZXcganNlKGNDZSwxKSxkT2U9bmV3IGpzZShJZCwyKX1mdW5jdGlvbiBTeShlLHQsbixyLGEpe3JldHVybiBucihlKSxucih0KSxucihuKSxucihyKSxucihhKSxuZXcgaDVlKGUsdCxyKX1mdW5jdGlvbiBWbHQoZSx0KXt2YXIgbjtyZXR1cm4gbj1sKGF4KGUuZSx0KSw0MDApLG4/KCQ0ZShuKSxuLmUpOm51bGx9ZnVuY3Rpb24gYWwoZSx0KXt2YXIgbjtyZXR1cm4gbj1nYyhlLHQsMCksbj09LTE/ITE6KHQyKGUsbiksITApfWZ1bmN0aW9uIFVsdChlLHQsbil7dmFyIHI7cmV0dXJuIGZiKGUpLHI9bmV3IG9uLHIuYT10LGUuYS5OYihuZXcgQ2V0KHIsbikpLHIuYX1mdW5jdGlvbiBLdm4oZSl7dmFyIHQ7cmV0dXJuIGZiKGUpLHQ9V2UoTmEsWm8sMjgsMCwxNSwxKSxBNShlLmEsbmV3IEU4KHQpKSx0fWZ1bmN0aW9uIHo2ZShlKXt2YXIgdDtpZighdGNlKGUpKXRocm93IHVlKG5ldyBfYyk7cmV0dXJuIGUuZT0xLHQ9ZS5kLGUuZD1udWxsLHR9ZnVuY3Rpb24gcjIoZSl7dmFyIHQ7cmV0dXJuIHdjKGUpJiYodD0wLWUsIWlzTmFOKHQpKT90Om1iKHhFKGUpKX1mdW5jdGlvbiBnYyhlLHQsbil7Zm9yKDtuPGUuYy5sZW5ndGg7KytuKWlmKEpjKHQsZS5jW25dKSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiAkb2UoZSl7dmFyIHQsbjtyZXR1cm4gbj1sKGp0KGUuaiwwKSwxMiksdD1sKFEobiwoZnQoKSx6aSkpLDEyKSx0fWZ1bmN0aW9uIHpvZShlLHQpe3ZhciBuO3RoaXMuZj1lLHRoaXMuYj10LG49bChjcihlLmIsdCksMjYwKSx0aGlzLmM9bj9uLmI6bnVsbH1mdW5jdGlvbiBHbHQoKXt1MCgpLHRoaXMuYj1uZXcgUHIsdGhpcy5mPW5ldyBQcix0aGlzLmc9bmV3IFByLHRoaXMuZT1uZXcgUHJ9ZnVuY3Rpb24gblYoZSl7RnEodGhpcyksdGhpcy5nPWU/REgoZSxlLmllKCkpOm51bGwsdGhpcy5mPWUsU0godGhpcyksdGhpcy5qZSgpfWZ1bmN0aW9uIHFvZShlKXt2YXIgdDt0PWUuamooKSx0IT1udWxsJiZlLmQhPS0xJiZsKHQsOTQpLnhoKGUpLGUuaSYmZS5pLm9qKCl9ZnVuY3Rpb24gdU4oZSl7dmFyIHQ7Zm9yKHQ9ZS5wKzE7dDxlLmMuYS5jLmxlbmd0aDsrK3QpLS1sKGp0KGUuYy5hLHQpLDEwKS5wfWZ1bmN0aW9uIEtsdChlKXtneSghIWUuYykscGFlKGUuZi5nLGUuZCksZS5jLlFiKCksZS5jPW51bGwsZS5iPUw3ZShlKSxlLmQ9ZS5mLmd9ZnVuY3Rpb24gWGwoZSl7cmV0dXJuIGUuYnx8KGUuYj1uZXcgd3N0KGUsV28sZSksIWUuYSYmKGUuYT1uZXcgTE8oZSxlKSkpLGUuYn1mdW5jdGlvbiBsTihlLHQpe3ZhciBuLHI7cmV0dXJuIG49bCh0LDY5MCkscj1uLnhpKCksIXImJm4uQWkocj1uZXcgRnR0KGUsdCkpLHJ9ZnVuY3Rpb24gaWMoZSx0KXt2YXIgbixyO3JldHVybiBuPWwodCw2OTIpLHI9bi4kaygpLCFyJiZuLmNsKHI9bmV3IGFjdChlLHQpKSxyfWZ1bmN0aW9uIHE2ZShlLHQpe3BfKCk7dmFyIG4scjtyZXR1cm4gbj1peChlKSxyPWl4KHQpLCEhbiYmISFyJiYhbWR0KG4uayxyLmspfWZ1bmN0aW9uIHJWKGUsdCl7cmV0dXJuIEpjKHQsanQoZS5mLDApKXx8SmModCxqdChlLmYsMSkpfHxKYyh0LGp0KGUuZiwyKSl9ZnVuY3Rpb24gaE4oZSx0KXtpZih0PDApdGhyb3cgdWUobmV3IHRjKEl5dCt0KSk7cmV0dXJuIEJjdChlLHQrMSksanQoZS5qLHQpfWZ1bmN0aW9uIFdsdChlLHQsbixyKXtpZighZSl0aHJvdyB1ZShuZXcgWW4oS0EodCxoZShsZSh3YSwxKSxSbiwxLDUsW24scl0pKSkpfWZ1bmN0aW9uIFpnKGUsdCxuLHIsYSxvLGYpe0pvZS5jYWxsKHRoaXMsdCxyLGEsbyxmKSx0aGlzLmM9ZSx0aGlzLmI9bn1mdW5jdGlvbiBhZyhlLHQsbil7dmFyIHIsYTtmb3Iocj0xMCxhPTA7YTxuLTE7YSsrKXQ8ciYmKGUuYSs9IjAiKSxyKj0xMDtlLmErPXR9ZnVuY3Rpb24gaVYoZSl7dmFyIHQsbjtyZXR1cm4gbj1lLmxlbmd0aCx0PVdlKGtmLEFkLDI4LG4sMTUsMSksSHN0KGUsMCxuLHQsMCksdH1mdW5jdGlvbiBmTihlKXt0c3QoKTt2YXIgdCxuO3JldHVybiB0PWUrMTI4LG49SlNlW3RdLCFuJiYobj1KU2VbdF09bmV3IFNpKGUpKSxufWZ1bmN0aW9uIFlsdChlKXtyZXR1cm4gcGFlKGUuZC5hLmUuZyxlLmIpLG1yKGUuYyE9ZS5kLmEuZCksZS5hPWUuYyxlLmM9ZS5jLmEsZS5hfWZ1bmN0aW9uIFd2bihlKXtzd2l0Y2goZS5nKXtjYXNlIDA6cmV0dXJuIElpO2Nhc2UgMTpyZXR1cm4tMTtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiBZdm4oZSl7cmV0dXJuIGJ4ZShlLChpRSgpLFhTZSkpPDA/LURobih4RShlKSk6ZS5sK2UubSpMeCtlLmgqWm19ZnVuY3Rpb24gWGx0KGUpeyh0aGlzLnE/dGhpcy5xOihDbigpLENuKCksbWcpKS5BYyhlLnE/ZS5xOihDbigpLENuKCksbWcpKX1mdW5jdGlvbiBYdm4oZSx0KXtVOChsKGwoZS5mLDI3KS5vZigocGkoKSxfTSkpLDEwMSkpJiZyNW4oWGFlKGwoZS5mLDI3KSksdCl9ZnVuY3Rpb24gSG9lKGUsdCl7dmFyIG47cmV0dXJuIG49bXMoZS5kLHQpLG4+PTA/clUoZSxuLCEwLCEwKTpIdyhlLHQsITApfWZ1bmN0aW9uIEg2ZShlKXt2YXIgdDtyZXR1cm4gdD1qbShLbihlLDMyKSksdD09bnVsbCYmKEt1KGUpLHQ9am0oS24oZSwzMikpKSx0fWZ1bmN0aW9uIFY2ZShlKXt2YXIgdDtyZXR1cm4gZS5PaCgpfHwodD15cihlLkRoKCkpLWUuamkoKSxlLiRoKCkuTWsodCkpLGUuemgoKX1mdW5jdGlvbiBRbHQoZSx0KXtIX2U9bmV3IE90LEM3dD10LFJMPWUsbChSTC5iLDY4KSxENmUoUkwsSF9lLG51bGwpLGZ2dChSTCl9ZnVuY3Rpb24gbEEoKXtsQT1VLHQxZT1uZXcgbXNlKCJYWSIsMCksZTFlPW5ldyBtc2UoIlgiLDEpLG4xZT1uZXcgbXNlKCJZIiwyKX1mdW5jdGlvbiBvbCgpe29sPVUsYTE9bmV3IGJzZSgiVE9QIiwwKSxGYj1uZXcgYnNlKGNULDEpLHcwPW5ldyBic2UoeEVlLDIpfWZ1bmN0aW9uIGVwKCl7ZXA9VSx3Qj1uZXcgRXNlKElkLDApLEY2PW5ldyBFc2UoIlRPUCIsMSksVXg9bmV3IEVzZSh4RWUsMil9ZnVuY3Rpb24gZE4oKXtkTj1VLGtkZT1uZXcgUjNlKCJJTlBVVF9PUkRFUiIsMCksRWRlPW5ldyBSM2UoIlBPUlRfREVHUkVFIiwxKX1mdW5jdGlvbiBpRSgpe2lFPVUsV1NlPXF1KGVoLGVoLDUyNDI4NyksZzZ0PXF1KDAsMCxTUCksWVNlPUxvZSgxKSxMb2UoMiksWFNlPUxvZSgwKX1mdW5jdGlvbiBWb2UoZSl7dmFyIHQ7cmV0dXJuIGUuZCE9ZS5yJiYodD1PZihlKSxlLmU9ISF0JiZ0LmxrKCk9PWc1dCxlLmQ9dCksZS5lfWZ1bmN0aW9uIFVvZShlLHQsbil7dmFyIHI7cmV0dXJuIHI9ZS5nW3RdLFJfKGUsdCxlLlppKHQsbikpLGUuUmkodCxuLHIpLGUuTmkoKSxyfWZ1bmN0aW9uIHNWKGUsdCl7dmFyIG47cmV0dXJuIG49ZS5kZCh0KSxuPj0wPyhlLmdkKG4pLCEwKTohMX1mdW5jdGlvbiBHb2UoZSx0KXt2YXIgbjtmb3IoWHIoZSksWHIodCksbj0hMTt0Lk9iKCk7KW49bnxlLkZjKHQuUGIoKSk7cmV0dXJuIG59ZnVuY3Rpb24gQjEoZSx0KXt2YXIgbjtyZXR1cm4gbj1sKGNyKGUuZSx0KSw0MDApLG4/KEludChlLG4pLG4uZSk6bnVsbH1mdW5jdGlvbiBKbHQoZSl7dmFyIHQsbjtyZXR1cm4gdD1lLzYwfDAsbj1lJTYwLG49PTA/IiIrdDoiIit0KyI6IisoIiIrbil9ZnVuY3Rpb24gX3koZSx0KXt2YXIgbj1lLmFbdF0scj0odmNlKCksXzBlKVt0eXBlb2Ygbl07cmV0dXJuIHI/cihuKTpaN2UodHlwZW9mIG4pfWZ1bmN0aW9uIERjKGUsdCl7dmFyIG4scjtyZXR1cm4geGIoZSkscj1uZXcgQzZlKHQsZS5hKSxuPW5ldyBpaXQociksbmV3IGJuKGUsbil9ZnVuY3Rpb24gS29lKGUpe3ZhciB0O3JldHVybiB0PWUuYi5jLmxlbmd0aD09MD9udWxsOmp0KGUuYiwwKSx0IT1udWxsJiZyY2UoZSwwKSx0fWZ1bmN0aW9uIFF2bihlLHQpe3ZhciBuLHIsYTthPXQuYy5pLG49bChjcihlLmYsYSksNjApLHI9bi5kLmMtbi5lLmMsazdlKHQuYSxyLDApfWZ1bmN0aW9uIFU2ZShlLHQpe3ZhciBuO2ZvcigrK2UuZCwrK2UuY1t0XSxuPXQrMTtuPGUuYS5sZW5ndGg7KSsrZS5hW25dLG4rPW4mLW59ZnVuY3Rpb24gWmx0KGUsdCxuLHIpe0RpKCksWHYuY2FsbCh0aGlzLDI2KSx0aGlzLmM9ZSx0aGlzLmE9dCx0aGlzLmQ9bix0aGlzLmI9cn1mdW5jdGlvbiBlaHQoZSx0KXtmb3IoO3RbMF08ZS5sZW5ndGgmJnBkKGAgCVxyCmAsY2woY28oZSx0WzBdKSkpPj0wOykrK3RbMF19ZnVuY3Rpb24gSnZuKGUsdCl7VXUoZSx0PT1udWxsfHxHcSgobnIodCksdCkpfHxpc05hTigobnIodCksdCkpPzA6KG5yKHQpLHQpKX1mdW5jdGlvbiBadm4oZSx0KXtHdShlLHQ9PW51bGx8fEdxKChucih0KSx0KSl8fGlzTmFOKChucih0KSx0KSk/MDoobnIodCksdCkpfWZ1bmN0aW9uIGV3bihlLHQpe0R3KGUsdD09bnVsbHx8R3EoKG5yKHQpLHQpKXx8aXNOYU4oKG5yKHQpLHQpKT8wOihucih0KSx0KSl9ZnVuY3Rpb24gdHduKGUsdCl7TXcoZSx0PT1udWxsfHxHcSgobnIodCksdCkpfHxpc05hTigobnIodCksdCkpPzA6KG5yKHQpLHQpKX1mdW5jdGlvbiBud24oZSx0LG4pe3JldHVybiB6OChuZXcgbHQobi5lLmErbi5mLmEvMixuLmUuYituLmYuYi8yKSxlKT09KG5yKHQpLHQpfWZ1bmN0aW9uIHJ3bihlLHQpe3JldHVybiBEZSh0LDEwMikmJmwodCwxOSkuQmImSW8/bmV3IFVzZSh0LGUpOm5ldyBtRSh0LGUpfWZ1bmN0aW9uIGl3bihlLHQpe3JldHVybiBEZSh0LDEwMikmJmwodCwxOSkuQmImSW8/bmV3IFVzZSh0LGUpOm5ldyBtRSh0LGUpfWZ1bmN0aW9uIGdOKGUpe3JldHVybiBlLl9fZWxlbWVudFR5cGVDYXRlZ29yeSQ9PW51bGw/MTA6ZS5fX2VsZW1lbnRUeXBlQ2F0ZWdvcnkkfWZ1bmN0aW9uIHRodChlLHQpe3JldHVybiB0PT0oZ2FlKCksZ2FlKCksXzZ0KT9lLnRvTG9jYWxlTG93ZXJDYXNlKCk6ZS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIG5odChlKXtpZighZS5lKXRocm93IHVlKG5ldyBfYyk7cmV0dXJuIGUuYz1lLmE9ZS5lLGUuZT1lLmUuZSwtLWUuZCxlLmEuZn1mdW5jdGlvbiBHNmUoZSl7aWYoIWUuYyl0aHJvdyB1ZShuZXcgX2MpO3JldHVybiBlLmU9ZS5hPWUuYyxlLmM9ZS5jLmMsKytlLmQsZS5hLmZ9ZnVuY3Rpb24gcmh0KGUpe3ZhciB0O2ZvcigrK2UuYSx0PWUuYy5hLmxlbmd0aDtlLmE8dDsrK2UuYSlpZihlLmMuYltlLmFdKXJldHVybn1mdW5jdGlvbiBzd24oZSl7dmFyIHQsbjtpZihlLmEpe249bnVsbDtkbyB0PWUuYSxlLmE9bnVsbCxuPWRwdCh0LG4pO3doaWxlKGUuYSk7ZS5hPW59fWZ1bmN0aW9uIGF3bihlKXt2YXIgdCxuO2lmKGUuYil7bj1udWxsO2RvIHQ9ZS5iLGUuYj1udWxsLG49ZHB0KHQsbik7d2hpbGUoZS5iKTtlLmI9bn19ZnVuY3Rpb24gb3duKGUsdCl7dmFyIG47Zm9yKG49MDtlLmUhPWUuaS5nYygpOylEZG4odCxncihlKSxwdChuKSksbiE9SWkmJisrbn1mdW5jdGlvbiBjd24oZSx0KXt2YXIgbjtyZXR1cm4gbj1GdyhlLmUuYyx0LmUuYyksbj09MD9ZaShlLmUuZCx0LmUuZCk6bn1mdW5jdGlvbiB1d24oZSx0KXt2YXIgbixyO2ZvcihyPXQuYyxuPXIrMTtuPD10LmY7bisrKWUuYVtuXT5lLmFbcl0mJihyPW4pO3JldHVybiByfWZ1bmN0aW9uIGlodChlKXt2YXIgdDtyZXR1cm4gdD1sKFEoZSwoZnQoKSxjMykpLDMxMyksdD90LmE9PWU6ITF9ZnVuY3Rpb24gc2h0KGUpe3ZhciB0O3JldHVybiB0PWwoUShlLChmdCgpLGMzKSksMzEzKSx0P3QuaT09ZTohMX1mdW5jdGlvbiBhaHQoKXthaHQ9VSx4OHQ9S3IoKHVvKCksaGUobGUoZ0FlLDEpLGl0LDM2NywwLFt5MCx2ZyxidSxfdSxtY10pKSl9ZnVuY3Rpb24gb2h0KCl7b2h0PVUsaXh0PUtyKChSeSgpLGhlKGxlKHJ4dCwxKSxpdCwzNzUsMCxbYkIsS0ssV0ssR0ssVUtdKSkpfWZ1bmN0aW9uIGNodCgpe2NodD1VLHB4dD1LcigobDIoKSxoZShsZShtTGUsMSksaXQsMzQ4LDAsW0ExZSxiTGUsTDFlLEJULFBUXSkpKX1mdW5jdGlvbiB1aHQoKXt1aHQ9VSx0RXQ9S3IoKE9BKCksaGUobGUod0RlLDEpLGl0LDMyMywwLFt2RGUsdmRlLHdkZSxyTSxpTV0pKSl9ZnVuY3Rpb24gbGh0KCl7bGh0PVUsQXh0PUtyKChoZigpLGhlKGxlKFdMZSwxKSxpdCwxNzEsMCxbRUIsWUwsJGIsWEwsZDRdKSkpfWZ1bmN0aW9uIGhodCgpe2hodD1VLEhUdD1LcigoYlUoKSxoZShsZShxVHQsMSksaXQsMzY4LDAsW1lkZSxHZGUsWGRlLEtkZSxXZGVdKSkpfWZ1bmN0aW9uIGZodCgpe2ZodD1VLEhDdD1LcigoVkEoKSxoZShsZShxQ3QsMSksaXQsMzczLDAsW1E2LGU5LHhNLHlNLHpCXSkpKX1mdW5jdGlvbiBkaHQoKXtkaHQ9VSxZQ3Q9S3IoKFhOKCksaGUobGUoVE9lLDEpLGl0LDMyNCwwLFt4T2Usd2dlLEVPZSx5Z2Usa09lXSkpKX1mdW5jdGlvbiBnaHQoKXtnaHQ9VSxHU3Q9S3IoKEpzKCksaGUobGUoTE0sMSksaXQsODgsMCxbSjEsdmMsdWMsUTEsd2ZdKSkpfWZ1bmN0aW9uIHBodCgpe3BodD1VLHZTdD1LcigocjEoKSxoZShsZSh4ZywxKSxpdCwxNzAsMCxbUG4saGEsemQseXYsUzJdKSkpfWZ1bmN0aW9uIGJodCgpe2JodD1VLHRfdD1LcigodDYoKSxoZShsZShPTSwxKSxpdCwyNTYsMCxbS2IsdEYsWE5lLElNLFFOZV0pKSl9ZnVuY3Rpb24gbWh0KCl7bWh0PVUsaV90PUtyKChDdCgpLGhlKGxlKE9vLDEpLGF1LDY0LDAsW1BjLFFuLGFyLERyLGVyXSkpKX1mdW5jdGlvbiBhVigpe2FWPVUsRV9lPW5ldyBBM2UoIkJZX1NJWkUiLDApLCQwZT1uZXcgQTNlKCJCWV9TSVpFX0FORF9TSEFQRSIsMSl9ZnVuY3Rpb24gb1YoKXtvVj1VLFEwZT1uZXcgRDNlKCJFQURFUyIsMCkseUs9bmV3IEQzZSgiRlJVQ0hURVJNQU5fUkVJTkdPTEQiLDEpfWZ1bmN0aW9uIHBOKCl7cE49VSxYSz1uZXcgUDNlKCJSRUFESU5HX0RJUkVDVElPTiIsMCksdkxlPW5ldyBQM2UoIlJPVEFUSU9OIiwxKX1mdW5jdGlvbiBoQSgpe2hBPVUsTDh0PW5ldyBuSSxNOHQ9bmV3ICRKLF84dD1uZXcgdm0sQTh0PW5ldyBodSxEOHQ9bmV3IHpKfWZ1bmN0aW9uIHZodChlKXt0aGlzLmI9bmV3IGJ0LHRoaXMuYT1uZXcgYnQsdGhpcy5jPW5ldyBidCx0aGlzLmQ9bmV3IGJ0LHRoaXMuZT1lfWZ1bmN0aW9uIHdodChlKXt0aGlzLmc9ZSx0aGlzLmY9bmV3IGJ0LHRoaXMuYT1iLk1hdGgubWluKHRoaXMuZy5jLmMsdGhpcy5nLmQuYyl9ZnVuY3Rpb24geWh0KGUsdCxuKXtWcS5jYWxsKHRoaXMpLFk2ZSh0aGlzKSx0aGlzLmE9ZSx0aGlzLmM9bix0aGlzLmI9dC5kLHRoaXMuZj10LmV9ZnVuY3Rpb24gbHduKGUsdCxuKXt2YXIgcixhO2ZvcihhPW5ldyBHKG4pO2EuYTxhLmMuYy5sZW5ndGg7KXI9cmUoYSksT3hlKGUsdCxyKX1mdW5jdGlvbiBlMShlLHQsbil7dmFyIHI7aWYodD09bnVsbCl0aHJvdyB1ZShuZXcgUzgpO3JldHVybiByPVdnKGUsdCksRW1uKGUsdCxuKSxyfWZ1bmN0aW9uIFdvZShlLHQpe3ZhciBuO3JldHVybiBuPWwoY3IoZS5hLHQpLDEzNyksbnx8KG49bmV3IEJzLGtpKGUuYSx0LG4pKSxufWZ1bmN0aW9uIE1uKGUsdCl7dmFyIG47cmV0dXJuIG49KGUuaT09bnVsbCYmU2QoZSksZS5pKSx0Pj0wJiZ0PG4ubGVuZ3RoP25bdF06bnVsbH1mdW5jdGlvbiBod24oZSx0KXt2YXIgbjtyZXR1cm4gbj10PjA/dC0xOnQsWkplKEZ1bihWaHQoQjRlKG5ldyBMOCxuKSxlLm4pLGUuaiksZS5rKX1mdW5jdGlvbiBzYyhlKXt2YXIgdCxuO249KHQ9bmV3IHFpZSx0KSxxcigoIWUucSYmKGUucT1uZXcgbnQoVWYsZSwxMSwxMCkpLGUucSksbil9ZnVuY3Rpb24gSzZlKGUpe3JldHVybihlLmkmMj8iaW50ZXJmYWNlICI6ZS5pJjE/IiI6ImNsYXNzICIpKyhHZyhlKSxlLm8pfWZ1bmN0aW9uIGNWKGUpe3JldHVybiBpdShlLElpKT4wP0lpOml1KGUsbG8pPDA/bG86WXIoZSl9ZnVuY3Rpb24gQXkoZSl7cmV0dXJuIGU8Mz8oTWgoZSxQd3QpLGUrMSk6ZTxyTD91YShlLy43NSsxKTpJaX1mdW5jdGlvbiB4aHQoZSx0KXtyZXR1cm4gbnIodCksaTVlKGUpLGUuZC5PYigpPyh0LkNkKGUuZC5QYigpKSwhMCk6ITF9ZnVuY3Rpb24gZnduKGUsdCl7dmFyIG4scjtyZXR1cm4gbj1sKE95KGUuZCx0KSwxNiksbj8ocj10LGUuZS5wYyhyLG4pKTpudWxsfWZ1bmN0aW9uIGR3bihlLHQsbixyKXt2YXIgYTtlLmo9LTEsRTllKGUsdDllKGUsdCxuKSwoRm8oKSxhPWwodCw2OSkudmsoKSxhLnhsKHIpKSl9ZnVuY3Rpb24gZ3duKGUsdCl7cmV0dXJuIHV4KCksLXJ1KGwoUShlLChIYygpLFc2KSksMTcpLmEsbChRKHQsVzYpLDE3KS5hKX1mdW5jdGlvbiBraHQoZSx0KXtyZXR1cm4hIXBBKGUsdCxZcihtbyhmZyxpZyhZcihtbyh0PT1udWxsPzA6ZXModCksZGcpKSwxNSkpKSl9ZnVuY3Rpb24gcHduKCl7cmV0dXJuIEhFKCksaGUobGUoeFksMSksaXQsMjQ1LDAsW0pnZSx3WSx5WSx2WSxRZ2UsbVksYlksWGdlXSl9ZnVuY3Rpb24gYnduKCl7cmV0dXJuIGcyKCksaGUobGUod1N0LDEpLGl0LDI4NSwwLFtWT2UseWEsVGMsSjYsZm8scHMsdDksWDFdKX1mdW5jdGlvbiBtd24oKXtyZXR1cm4gT1UoKSxoZShsZSh1TGUsMSksaXQsMjc2LDAsW3cxZSxrMWUsdjFlLEMxZSx4MWUseTFlLFQxZSxFMWVdKX1mdW5jdGlvbiB2d24oZSl7dmFyIHQ7cmV0dXJuIHQ9emUoR2UoUShlLChOdCgpLHgyKSkpKSx0PDAmJih0PTAscnQoZSx4Mix0KSksdH1mdW5jdGlvbiB1VihlLHQpe3ZhciBuLHI7Zm9yKHI9ZS5LYygpO3IuT2IoKTspbj1sKHIuUGIoKSw3MikscnQobiwoZnQoKSxZeCksdCl9ZnVuY3Rpb24gd3duKGUsdCxuKXt2YXIgcjtyPWIuTWF0aC5tYXgoMCxlLmIvMi0uNSksRkEobixyLDEpLHZ0KHQsbmV3IExldChuLHIpKX1mdW5jdGlvbiB5d24oZSx0LG4pe3ZhciByO3JldHVybiByPWUuYS5lW2wodC5hLDEwKS5wXS1lLmEuZVtsKG4uYSwxMCkucF0sdWEoUk8ocikpfWZ1bmN0aW9uIGxWKGUsdCl7dmFyIG47cmV0dXJuIHhiKGUpLG49bmV3IFJhdChlLGUuYS56ZCgpLGUuYS55ZCgpfDQsdCksbmV3IGJuKGUsbil9ZnVuY3Rpb24gWW9lKGUpe3ZhciB0O2d5KCEhZS5jKSx0PWUuYy5hLGFmKGUuZCxlLmMpLGUuYj09ZS5jP2UuYj10Oi0tZS5hLGUuYz1udWxsfWZ1bmN0aW9uIEVodChlKXtyZXR1cm4gZS5hPj0tLjAxJiZlLmE8PUgxJiYoZS5hPTApLGUuYj49LS4wMSYmZS5iPD1IMSYmKGUuYj0wKSxlfWZ1bmN0aW9uIFk1KGUpe2g2KCk7dmFyIHQsbjtmb3Iobj1oQ2UsdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0+biYmKG49ZVt0XSk7cmV0dXJuIG59ZnVuY3Rpb24gVGh0KGUsdCl7dmFyIG47aWYobj1vUChlLkRoKCksdCksIW4pdGhyb3cgdWUobmV3IFluKE9iK3QrJGZlKSk7cmV0dXJuIG59ZnVuY3Rpb24gTHkoZSx0KXt2YXIgbjtmb3Iobj1lO2RzKG4pOylpZihuPWRzKG4pLG49PXQpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24geHduKGUsdCl7dmFyIG4scixhO2ZvcihyPXQuYS5sZCgpLG49bCh0LmEubWQoKSwxNikuZ2MoKSxhPTA7YTxuO2ErKyllLkNkKHIpfWZ1bmN0aW9uIFZ1KGUsdCl7dmFyIG4scixhLG87Zm9yKG5yKHQpLHI9ZS5jLGE9MCxvPXIubGVuZ3RoO2E8bzsrK2Epbj1yW2FdLHQuQ2Qobil9ZnVuY3Rpb24gQ2h0KGUsdCxuLHIsYSxvKXt2YXIgZjtmPUFvZShyKSxwbyhmLGEpLEZhKGYsbykseG4oZS5hLHIsbmV3IEtxKGYsdCxuLmYpKX1mdW5jdGlvbiBTaHQoZSx0KXtIaShlLCh1ZygpLGNnZSksdC5mKSxIaShlLG1DdCx0LmUpLEhpKGUsb2dlLHQuZCksSGkoZSxiQ3QsdC5jKX1mdW5jdGlvbiBfaHQoZSx0KXt0aGlzLmE9bmV3IFByLHRoaXMuZT1uZXcgUHIsdGhpcy5iPShFQSgpLFNXKSx0aGlzLmM9ZSx0aGlzLmI9dH1mdW5jdGlvbiBBaHQoZSl7dGhpcy5kPWUsdGhpcy5jPWUuYy52YygpLktjKCksdGhpcy5iPW51bGwsdGhpcy5hPW51bGwsdGhpcy5lPSgkeigpLEUwZSl9ZnVuY3Rpb24gYWYoZSx0KXt2YXIgbjtyZXR1cm4gbj10LmMsdC5hLmI9dC5iLHQuYi5hPXQuYSx0LmE9dC5iPW51bGwsdC5jPW51bGwsLS1lLmIsbn1mdW5jdGlvbiBrd24oZSx0KXtyZXR1cm4gdCYmZS5iW3QuZ109PXQ/KFRzKGUuYix0LmcsbnVsbCksLS1lLmMsITApOiExfWZ1bmN0aW9uIEV3bihlLHQpe2lmKDA+ZXx8ZT50KXRocm93IHVlKG5ldyB0M2UoImZyb21JbmRleDogMCwgdG9JbmRleDogIitlK3VFZSt0KSl9ZnVuY3Rpb24gTHcoZSl7aWYoZTwwKXRocm93IHVlKG5ldyBZbigiSWxsZWdhbCBDYXBhY2l0eTogIitlKSk7dGhpcy5nPXRoaXMuYWooZSl9ZnVuY3Rpb24gVzZlKGUsdCl7cmV0dXJuIEExKCksZjAoQWIpLGIuTWF0aC5hYnMoZS10KTw9QWJ8fGU9PXR8fGlzTmFOKGUpJiZpc05hTih0KX1mdW5jdGlvbiBYb2UoZSx0KXt2YXIgbixyLGEsbztmb3Iocj1lLmQsYT0wLG89ci5sZW5ndGg7YTxvOysrYSluPXJbYV0sTDEoZS5nLG4pLmE9dH1mdW5jdGlvbiBUd24oZSx0LG4pe3ZhciByLGEsbztmb3IoYT10W25dLHI9MDtyPGEubGVuZ3RoO3IrKylvPWFbcl0sZS5lW28uYy5wXVtvLnBdPXJ9ZnVuY3Rpb24gQ3duKGUpe3ZhciB0O2Zvcih0PTA7dDxlLmMubGVuZ3RoO3QrKykoU24odCxlLmMubGVuZ3RoKSxsKGUuY1t0XSwxMikpLnA9dH1mdW5jdGlvbiBTd24oZSl7dmFyIHQsbjtmb3IodD1lLmEuZC5qLG49ZS5jLmQuajt0IT1uOylkMChlLmIsdCksdD0kVih0KTtkMChlLmIsdCl9ZnVuY3Rpb24gX3duKGUpe3ZhciB0O3JldHVybiB0PWIuTWF0aC5zcXJ0KGUuYSplLmErZS5iKmUuYiksdD4wJiYoZS5hLz10LGUuYi89dCksZX1mdW5jdGlvbiBBaChlKXt2YXIgdDtyZXR1cm4gZS53P2UudzoodD1kYm4oZSksdCYmIXQuVmgoKSYmKGUudz10KSx0KX1mdW5jdGlvbiBzRShlLHQpe3ZhciBuLHI7cj1lLmEsbj1tNG4oZSx0LG51bGwpLHIhPXQmJiFlLmUmJihuPVpFKGUsdCxuKSksbiYmbi5vaigpfWZ1bmN0aW9uIExodChlLHQsbil7dmFyIHIsYTtyPXQ7ZG8gYT16ZShlLnBbci5wXSkrbixlLnBbci5wXT1hLHI9ZS5hW3IucF07d2hpbGUociE9dCl9ZnVuY3Rpb24gTWh0KGUsdCxuKXt2YXIgcj1mdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHIsYXJndW1lbnRzKX07cmV0dXJuIHQuYXBwbHkocixuKSxyfWZ1bmN0aW9uIEF3bihlKXt2YXIgdDtyZXR1cm4gZT09bnVsbD9udWxsOih0PWwoZSwxOTUpLCR4bih0LHQubGVuZ3RoKSl9ZnVuY3Rpb24gT2UoZSx0KXtpZihlLmc9PW51bGx8fHQ+PWUuaSl0aHJvdyB1ZShuZXcgVnNlKHQsZS5pKSk7cmV0dXJuIGUuV2kodCxlLmdbdF0pfWZ1bmN0aW9uIEx3bihlLHQpe0NuKCk7dmFyIG4scjtmb3Iocj1uZXcgYnQsbj0wO248ZTsrK24pJG4oci5jLHQpO3JldHVybiBuZXcgZXNlKHIpfWZ1bmN0aW9uIERodChlKXtyZXR1cm4geGIoZSksSzgoITAsIm4gbWF5IG5vdCBiZSBuZWdhdGl2ZSIpLG5ldyBibihlLG5ldyBhZnQoZS5hKSl9ZnVuY3Rpb24gWTZlKGUpe2UuYj0oQmwoKSxCYiksZS5mPShvbCgpLEZiKSxlLmQ9KE1oKDIsWXkpLG5ldyBCdSgyKSksZS5lPW5ldyBxYX1mdW5jdGlvbiBoVihlKXt0aGlzLmI9KFhyKGUpLG5ldyBPbChlKSksdGhpcy5hPW5ldyBidCx0aGlzLmQ9bmV3IGJ0LHRoaXMuZT1uZXcgcWF9ZnVuY3Rpb24gdDEoKXt0MT1VLEdjPW5ldyBnc2UoIkJFR0lOIiwwKSwkdT1uZXcgZ3NlKGNULDEpLEtjPW5ldyBnc2UoIkVORCIsMil9ZnVuY3Rpb24gRjEoKXtGMT1VLG5DPW5ldyB6c2UoY1QsMCksXzQ9bmV3IHpzZSgiSEVBRCIsMSksckM9bmV3IHpzZSgiVEFJTCIsMil9ZnVuY3Rpb24gdXgoKXt1eD1VLFJUdD1UZChUZChUZCh2XyhuZXcgWHMsKHd4KCksbE0pKSwoV0EoKSxEZGUpKSxHRGUpLFhEZSl9ZnVuY3Rpb24gdHAoKXt0cD1VLCRUdD1UZChUZChUZCh2XyhuZXcgWHMsKHd4KCksZk0pKSwoV0EoKSxXRGUpKSxIRGUpLEtEZSl9ZnVuY3Rpb24gSWh0KCl7SWh0PVUsaHh0PUtyKCh5eCgpLGhlKGxlKE5ULDEpLGl0LDIzMiwwLFtPVCxxTCxJVCxoNCxONixPNl0pKSl9ZnVuY3Rpb24gT2h0KCl7T2h0PVUsd3h0PUtyKCh5VSgpLGhlKGxlKHlMZSwxKSxpdCwyODMsMCxbSTFlLEQxZSxOMWUsTzFlLFAxZSxRS10pKSl9ZnVuY3Rpb24gTmh0KCl7Tmh0PVUseHh0PUtyKChXTigpLGhlKGxlKF9MZSwxKSxpdCwyODEsMCxbWkssVExlLFNMZSxFTGUsQ0xlLEIxZV0pKSl9ZnVuY3Rpb24gUGh0KCl7UGh0PVUsa3h0PUtyKCh6RSgpLGhlKGxlKE9MZSwxKSxpdCwyODIsMCxbVkwsTExlLElMZSxETGUsTUxlLEFMZV0pKSl9ZnVuY3Rpb24gQmh0KCl7Qmh0PVUsQjh0PUtyKChabigpLGhlKGxlKGwxZSwxKSxpdCwyNzMsMCxbUHMsQWEsVXMsQXUsY3UsSzFdKSkpfWZ1bmN0aW9uIEZodCgpe0ZodD1VLHhTdD1Lcigob2coKSxoZShsZShLT2UsMSksaXQsMjU1LDAsW1NnZSxIQixWQixuWSxlWSx0WV0pKSl9ZnVuY3Rpb24gUmh0KCl7Umh0PVUsX1N0PUtyKChZbSgpLGhlKGxlKE1nZSwxKSxpdCwyOTgsMCxbTGdlLFNNLENNLEFnZSxFTSxUTV0pKSl9ZnVuY3Rpb24gamh0KCl7amh0PVUsWVN0PUtyKCh2VSgpLGhlKGxlKEhOZSwxKSxpdCwzMjEsMCxbVWdlLCROZSxxTmUsUk5lLHpOZSxqTmVdKSkpfWZ1bmN0aW9uICRodCgpeyRodD1VLG5fdD1LcigoUmEoKSxoZShsZShKTmUsMSksaXQsMTAxLDAsW1diLFoxLHNDLFR2LFRnLE11XSkpKX1mdW5jdGlvbiB6aHQoKXt6aHQ9VSxyX3Q9S3IoKFJsKCksaGUobGUoY1ksMSksaXQsMjc5LDAsW1liLHZwLG5GLFBNLE5NLGE5XSkpKX1mdW5jdGlvbiBxaHQoKXtxaHQ9VSxnSz0odDEoKSxoZShsZShzNCwxKSxpdCwyMzcsMCxbR2MsJHUsS2NdKSkubGVuZ3RoLHEwZT1nS31mdW5jdGlvbiBNd24oKXtyZXR1cm4gcXkoKSxoZShsZShLbywxKSxpdCw5NSwwLFtFMCxtcCxUMCxTMCxFZyxxZixqaCxDMCx6Zl0pfWZ1bmN0aW9uIER3bihlLHQpe3JldHVybiBDYigpLHJ1KGUuYi5jLmxlbmd0aC1lLmUuYy5sZW5ndGgsdC5iLmMubGVuZ3RoLXQuZS5jLmxlbmd0aCl9ZnVuY3Rpb24gWDUoZSx0KXtyZXR1cm4gJHVuKGdBKGUsdCxZcihtbyhmZyxpZyhZcihtbyh0PT1udWxsPzA6ZXModCksZGcpKSwxNSkpKSkpfWZ1bmN0aW9uIFg2ZShlLHQpe3JldHVybiBBMSgpLGYwKEFiKSxiLk1hdGguYWJzKGUtdCk8PUFifHxlPT10fHxpc05hTihlKSYmaXNOYU4odCl9ZnVuY3Rpb24gZlYoZSx0KXt2YXIgbjtuPWUuYixlLmI9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgQ3koZSwxLG4sZS5iKSl9ZnVuY3Rpb24gYUUoZSx0KXt2YXIgbjtuPWUuYixlLmI9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgQ3koZSwzLG4sZS5iKSl9ZnVuY3Rpb24gTXcoZSx0KXt2YXIgbjtuPWUuZixlLmY9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgQ3koZSwzLG4sZS5mKSl9ZnVuY3Rpb24gRHcoZSx0KXt2YXIgbjtuPWUuZyxlLmc9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgQ3koZSw0LG4sZS5nKSl9ZnVuY3Rpb24gVXUoZSx0KXt2YXIgbjtuPWUuaSxlLmk9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgQ3koZSw1LG4sZS5pKSl9ZnVuY3Rpb24gR3UoZSx0KXt2YXIgbjtuPWUuaixlLmo9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgQ3koZSw2LG4sZS5qKSl9ZnVuY3Rpb24gb0UoZSx0KXt2YXIgbjtuPWUuaixlLmo9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgQ3koZSwxLG4sZS5qKSl9ZnVuY3Rpb24gY0UoZSx0KXt2YXIgbjtuPWUuYyxlLmM9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgQ3koZSw0LG4sZS5jKSl9ZnVuY3Rpb24gdUUoZSx0KXt2YXIgbjtuPWUuayxlLms9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgQ3koZSwyLG4sZS5rKSl9ZnVuY3Rpb24gZFYoZSx0KXt2YXIgbjtuPWUuYSxlLmE9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgQ3koZSwwLG4sZS5hKSl9ZnVuY3Rpb24gaTIoZSx0KXt2YXIgbjtuPWUucyxlLnM9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcga29lKGUsNCxuLGUucykpfWZ1bmN0aW9uIE15KGUsdCl7dmFyIG47bj1lLnQsZS50PXQsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IGtvZShlLDUsbixlLnQpKX1mdW5jdGlvbiBRb2UoZSx0KXt2YXIgbjtuPWUuZCxlLmQ9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcga29lKGUsMixuLGUuZCkpfWZ1bmN0aW9uIGxFKGUsdCl7dmFyIG47bj1lLkYsZS5GPXQsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsMSw1LG4sdCkpfWZ1bmN0aW9uIGJOKGUsdCl7dmFyIG47cmV0dXJuIG49bChjcigoaXEoKSxrWSksZSksNTcpLG4/bi5nayh0KTpXZSh3YSxSbiwxLHQsNSwxKX1mdW5jdGlvbiBJd24oZSx0KXt2YXIgbjtyZXR1cm4gbj1tYShKYShsKGNyKGUuZyx0KSw4KSksbXllKGwoY3IoZS5mLHQpLDQ3MCkuYikpLG59ZnVuY3Rpb24gT3duKGUsdCl7dmFyIG4scixhO3JldHVybiBuPShyPShyYigpLGE9bmV3IHNrLGEpLHQmJlU5ZShyLHQpLHIpLGw3ZShuLGUpLG59ZnVuY3Rpb24gbnAoZSx0KXt2YXIgbixyO3JldHVybiBuPXQgaW4gZS5hLG4mJihyPVdnKGUsdCkucmUoKSxyKT9yLmE6bnVsbH1mdW5jdGlvbiBIaHQoZSx0LG4pe2lmKEVFKGUsbiksIWUua2woKSYmbiE9bnVsbCYmIWUuZmsobikpdGhyb3cgdWUobmV3IFJpZSk7cmV0dXJuIG59ZnVuY3Rpb24gVmh0KGUsdCl7cmV0dXJuIGUubj10LGUubj8oZS5mPW5ldyBidCxlLmU9bmV3IGJ0KTooZS5mPW51bGwsZS5lPW51bGwpLGV9ZnVuY3Rpb24gVWh0KGUsdCl7aWYoZSl7dC5uPWU7dmFyIG49djJuKHQpO2lmKCFuKXtzS1tlXT1bdF07cmV0dXJufW4uUm09dH19ZnVuY3Rpb24gam0oZSl7dmFyIHQ7cmV0dXJuIFZfKGU9PW51bGx8fEFycmF5LmlzQXJyYXkoZSkmJih0PWdOKGUpLCEodD49MTQmJnQ8PTE2KSkpLGV9ZnVuY3Rpb24gR3IoZSx0KXt2YXIgbjtyZXR1cm4gbnIodCksbj1lWyI6Iit0XSxCTyghIW4sIkVudW0gY29uc3RhbnQgdW5kZWZpbmVkOiAiK3QpLG59ZnVuY3Rpb24gRnIoZSx0LG4scixhLG8pe3ZhciBmO3JldHVybiBmPUdhZShlLHQpLFVodChuLGYpLGYuaT1hPzg6MCxmLmY9cixmLmU9YSxmLmc9byxmfWZ1bmN0aW9uIFE2ZShlLHQsbixyLGEpe3RoaXMuZD10LHRoaXMuaz1yLHRoaXMuZj1hLHRoaXMubz0tMSx0aGlzLnA9MSx0aGlzLmM9ZSx0aGlzLmE9bn1mdW5jdGlvbiBKNmUoZSx0LG4scixhKXt0aGlzLmQ9dCx0aGlzLms9cix0aGlzLmY9YSx0aGlzLm89LTEsdGhpcy5wPTIsdGhpcy5jPWUsdGhpcy5hPW59ZnVuY3Rpb24gWjZlKGUsdCxuLHIsYSl7dGhpcy5kPXQsdGhpcy5rPXIsdGhpcy5mPWEsdGhpcy5vPS0xLHRoaXMucD02LHRoaXMuYz1lLHRoaXMuYT1ufWZ1bmN0aW9uIGU3ZShlLHQsbixyLGEpe3RoaXMuZD10LHRoaXMuaz1yLHRoaXMuZj1hLHRoaXMubz0tMSx0aGlzLnA9Nyx0aGlzLmM9ZSx0aGlzLmE9bn1mdW5jdGlvbiB0N2UoZSx0LG4scixhKXt0aGlzLmQ9dCx0aGlzLmo9cix0aGlzLmU9YSx0aGlzLm89LTEsdGhpcy5wPTQsdGhpcy5jPWUsdGhpcy5hPW59ZnVuY3Rpb24gR2h0KGUsdCl7dmFyIG4scixhLG87Zm9yKHI9dCxhPTAsbz1yLmxlbmd0aDthPG87KythKW49clthXSxQbHQoZS5hLG4pO3JldHVybiBlfWZ1bmN0aW9uIExoKGUpe3ZhciB0LG4scixhO2ZvcihuPWUscj0wLGE9bi5sZW5ndGg7cjxhOysrcil0PW5bcl0sWHIodCk7cmV0dXJuIG5ldyBzbnQoZSl9ZnVuY3Rpb24gbjdlKGUpe3ZhciB0O3JldHVybiB0PW1hKEphKGUuZC5kKSxlLmMuZCksUkUodCxlLmMuZS5hLGUuYy5lLmIpLE9pKHQsZS5jLmQpfWZ1bmN0aW9uIHI3ZShlKXt2YXIgdDtyZXR1cm4gdD1tYShKYShlLmMuZCksZS5kLmQpLFJFKHQsZS5kLmUuYSxlLmQuZS5iKSxPaSh0LGUuZC5kKX1mdW5jdGlvbiBOd24oZSl7dmFyIHQ9L2Z1bmN0aW9uKD86XHMrKFtcdyRdKykpP1xzKlwoLyxuPXQuZXhlYyhlKTtyZXR1cm4gbiYmblsxXXx8UmxlfWZ1bmN0aW9uIFB3bihlLHQsbil7dmFyIHIsYTtyZXR1cm4gYT1lLmxlbmd0aCxyPWIuTWF0aC5taW4obixhKSxrOWUoZSwwLHQsMCxyLCEwKSx0fWZ1bmN0aW9uIEtodChlLHQsbil7dmFyIHIsYTtmb3IoYT10LktjKCk7YS5PYigpOylyPWwoYS5QYigpLDc0KSxuYShlLGwobi5LYihyKSwyNykpfWZ1bmN0aW9uIEJ3bihlLHQpe1U4KGwoUShsKGUuZSwxMCksKE50KCksTXMpKSwxMDEpKSYmKENuKCksVnMobChlLmUsMTApLmosdCkpfWZ1bmN0aW9uIEZ3bigpe3JldHVybiBQVSgpLGhlKGxlKCRfZSwxKSxpdCwyNTcsMCxbal9lLFBfZSxCX2UsTl9lLHowZSxSX2UsRl9lLE9fZSxJX2VdKX1mdW5jdGlvbiBSd24oKXtyZXR1cm4gcDIoKSxoZShsZShwRGUsMSksaXQsMjY1LDAsW2dkZSxmRGUsZERlLGRkZSxoRGUsZ0RlLENXLFdULFlUXSl9ZnVuY3Rpb24gSXcoKXtJdz1VLERCPW5ldyBEc2UoIkJBUllDRU5URVIiLDApLG9NPW5ldyBEc2UoSDN0LDEpLE1XPW5ldyBEc2UoVjN0LDIpfWZ1bmN0aW9uIGdWKCl7Z1Y9VSxQRGU9bmV3IExzZSgiTk8iLDApLEFkZT1uZXcgTHNlKEhFZSwxKSxORGU9bmV3IExzZSgiTE9PS19CQUNLIiwyKX1mdW5jdGlvbiBwVigpe3BWPVUsZ0xlPW5ldyB5c2UoIkFSRCIsMCksWUs9bmV3IHlzZSgiTVNEIiwxKSxfMWU9bmV3IHlzZSgiTUFOVUFMIiwyKX1mdW5jdGlvbiBxbygpe3FvPVUsc009bmV3IENzZShjTCwwKSwkbD1uZXcgQ3NlKCJJTlBVVCIsMSksenU9bmV3IENzZSgiT1VUUFVUIiwyKX1mdW5jdGlvbiBoRSgpe3JldHVybiBUZ2V8fChUZ2U9bmV3IFhidCxRNShUZ2UsaGUobGUoTDYsMSksUm4sMTM0LDAsW25ldyB1el0pKSksVGdlfWZ1bmN0aW9uIGYwKGUpe2lmKCEoZT49MCkpdGhyb3cgdWUobmV3IFluKCJ0b2xlcmFuY2UgKCIrZSsiKSBtdXN0IGJlID49IDAiKSk7cmV0dXJuIGV9ZnVuY3Rpb24gV2h0KGUsdCl7dmFyIG47cmV0dXJuIERlKHQsNDQpP2UuYy5NYyh0KToobj1LY2UoZSx0KSxZVihlLHQpLG4pfWZ1bmN0aW9uIEpvKGUsdCxuKXtyZXR1cm4gR20oZSx0KSxGdShlLG4pLGkyKGUsMCksTXkoZSwxKSx1MihlLCEwKSxjMihlLCEwKSxlfWZ1bmN0aW9uIG1OKGUsdCl7dmFyIG47aWYobj1lLmdjKCksdDwwfHx0Pm4pdGhyb3cgdWUobmV3IG15KHQsbikpO3JldHVybiBuZXcgZjRlKGUsdCl9ZnVuY3Rpb24gYlYoZSx0KXtlLmI9Yi5NYXRoLm1heChlLmIsdC5kKSxlLmUrPXQucisoZS5hLmMubGVuZ3RoPT0wPzA6ZS5jKSx2dChlLmEsdCl9ZnVuY3Rpb24gWWh0KGUpe2d5KGUuYz49MCksSDVuKGUuZCxlLmMpPDAmJihlLmE9ZS5hLTEmZS5kLmEubGVuZ3RoLTEsZS5iPWUuZC5jKSxlLmM9LTF9ZnVuY3Rpb24gbVYoZSl7dmFyIHQsbjtmb3Iobj1lLmMuQ2MoKS5LYygpO24uT2IoKTspdD1sKG4uUGIoKSwxNiksdC4kYigpO2UuYy4kYigpLGUuZD0wfWZ1bmN0aW9uIGp3bihlKXt2YXIgdCxuLHIsYTtmb3Iobj1lLmEscj0wLGE9bi5sZW5ndGg7cjxhOysrcil0PW5bcl0scXN0KHQsdC5sZW5ndGgsbnVsbCl9ZnVuY3Rpb24gZkEoZSx0KXt2YXIgbixyLGEsbztmb3Iocj10LGE9MCxvPXIubGVuZ3RoO2E8bzsrK2Epbj1yW2FdLENzKGUsbixlLmMuYixlLmMpfWZ1bmN0aW9uIFhodChlLHQpe3ZhciBuLHI7Zm9yKG49MCxyPWUuZ2MoKTtuPHI7KytuKWlmKEpjKHQsZS5YYihuKSkpcmV0dXJuIG47cmV0dXJuLTF9ZnVuY3Rpb24gaTdlKGUpe3ZhciB0LG47aWYoZT09MClyZXR1cm4gMzI7Zm9yKG49MCx0PTE7ISh0JmUpO3Q8PD0xKSsrbjtyZXR1cm4gbn1mdW5jdGlvbiBNaChlLHQpe2lmKGU8MCl0aHJvdyB1ZShuZXcgWW4odCsiIGNhbm5vdCBiZSBuZWdhdGl2ZSBidXQgd2FzOiAiK2UpKTtyZXR1cm4gZX1mdW5jdGlvbiAkd24oZSx0KXt0eXBlb2Ygd2luZG93PT09d1AmJnR5cGVvZiB3aW5kb3cuJGd3dD09PXdQJiYod2luZG93LiRnd3RbZV09dCl9ZnVuY3Rpb24gdlYoZSx0KXtyZXR1cm4ganVuKHBBKGUuYSx0LFlyKG1vKGZnLGlnKFlyKG1vKHQ9PW51bGw/MDplcyh0KSxkZykpLDE1KSkpKSl9ZnVuY3Rpb24genduKGUsdCxuKXtyZXR1cm4gU3koZSxuZXcgZmQodCksbmV3IEF0LG5ldyBXdihuKSxoZShsZShvYywxKSxpdCwxMDgsMCxbXSkpfWZ1bmN0aW9uIHF3bigpe3JldHVybiBabCgpLGhlKGxlKGVQZSwxKSxpdCwyNjQsMCxbYUMsYUYsdVksRk0sbFksZlksaFksR2dlLHNGXSl9ZnVuY3Rpb24gUWh0KCl7UWh0PVUscDZ0PWhlKGxlKFZyLDEpLGRpLDI4LDE1LFswLDgsNCwxMiwyLDEwLDYsMTQsMSw5LDUsMTMsMywxMSw3LDE1XSl9ZnVuY3Rpb24gZEEoKXtkQT1VLEhMPW5ldyB3c2UoIkxBWUVSX1NXRUVQIiwwKSxtQj1uZXcgd3NlKCRoZSwxKSxmTGU9bmV3IHdzZShJZCwyKX1mdW5jdGlvbiBzN2UoKXtzN2U9VSxiRXQ9ZmkoZmkoZmkobmV3IFhzLCh1bygpLHkwKSwodm8oKSxENikpLHZnLGw0KSxidSx1NCl9ZnVuY3Rpb24gSmh0KCl7Smh0PVUsbUV0PWZpKGZpKGZpKG5ldyBYcywodW8oKSx5MCksKHZvKCksRDYpKSx2ZyxsNCksYnUsdTQpfWZ1bmN0aW9uIGE3ZSgpe2E3ZT1VLHZFdD1maShmaShmaShuZXcgWHMsKHVvKCkseTApLCh2bygpLEQ2KSksdmcsbDQpLGJ1LHU0KX1mdW5jdGlvbiBaaHQoKXtaaHQ9VSx3RXQ9ZmkoZmkoZmkobmV3IFhzLCh1bygpLHkwKSwodm8oKSxENikpLHZnLGw0KSxidSx1NCl9ZnVuY3Rpb24gZWZ0KCl7ZWZ0PVUseUV0PWZpKGZpKGZpKG5ldyBYcywodW8oKSx5MCksKHZvKCksRDYpKSx2ZyxsNCksYnUsdTQpfWZ1bmN0aW9uIHRmdCgpe3RmdD1VLHhFdD1maShmaShmaShuZXcgWHMsKHVvKCkseTApLCh2bygpLEQ2KSksdmcsbDQpLGJ1LHU0KX1mdW5jdGlvbiBuZnQoKXtuZnQ9VSxURXQ9eWwoZmkoZmkobmV3IFhzLCh1bygpLGJ1KSwodm8oKSxQSykpLF91LE1LKSxtYyxOSyl9ZnVuY3Rpb24gSHduKGUpe3ZhciB0LG47Zm9yKG49bmV3IEcoR2R0KGUpKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksNjk1KSx0Ll9mKCl9ZnVuY3Rpb24gVnduKCl7TVplKCk7Zm9yKHZhciBlPW0wZSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllLnB1c2goYXJndW1lbnRzW3RdKX1mdW5jdGlvbiByZnQoZSl7bTNlKCksdGhpcy5nPW5ldyBQcix0aGlzLmY9bmV3IFByLHRoaXMuYj1uZXcgUHIsdGhpcy5jPW5ldyBDdyx0aGlzLmk9ZX1mdW5jdGlvbiBvN2UoKXt0aGlzLmY9bmV3IHFhLHRoaXMuZD1uZXcgUndlLHRoaXMuYz1uZXcgcWEsdGhpcy5hPW5ldyBidCx0aGlzLmI9bmV3IGJ0fWZ1bmN0aW9uIGlmdChlLHQsbixyKXt0aGlzLmFrKCksdGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5jPW51bGwsdGhpcy5jPW5ldyBacnQodGhpcyx0LG4scil9ZnVuY3Rpb24gSm9lKGUsdCxuLHIsYSl7dGhpcy5kPWUsdGhpcy5uPXQsdGhpcy5nPW4sdGhpcy5vPXIsdGhpcy5wPS0xLGF8fCh0aGlzLm89LTItci0xKX1mdW5jdGlvbiBzZnQoKXtreWUuY2FsbCh0aGlzKSx0aGlzLm49LTEsdGhpcy5nPW51bGwsdGhpcy5pPW51bGwsdGhpcy5qPW51bGwsdGhpcy5CYnw9bTB9ZnVuY3Rpb24gYWZ0KGUpe0RxLmNhbGwodGhpcyxlLkFkKDY0KT9weWUoMCxEZihlLnpkKCksMSkpOkVQLGUueWQoKSksdGhpcy5iPTEsdGhpcy5hPWV9ZnVuY3Rpb24gVXduKGUsdCl7cmV0dXJuIHV4KCksbChRKHQsKEhjKCksVzYpKSwxNykuYTxlLmdjKCkmJmwoUSh0LFc2KSwxNykuYT49MH1mdW5jdGlvbiBjN2UoZSx0KXtlLnI+MCYmZS5jPGUuciYmKGUuYys9dCxlLmkmJmUuaS5kPjAmJmUuZyE9MCYmYzdlKGUuaSx0L2UuciplLmkuZCkpfWZ1bmN0aW9uIHU3ZShlLHQpe3ZhciBuO249ZS5jLGUuYz10LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMSxuLGUuYykpfWZ1bmN0aW9uIFpvZShlLHQpe3ZhciBuO249ZS5jLGUuYz10LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsNCxuLGUuYykpfWZ1bmN0aW9uIGZFKGUsdCl7dmFyIG47bj1lLmssZS5rPXQsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsMSwyLG4sZS5rKSl9ZnVuY3Rpb24gZWNlKGUsdCl7dmFyIG47bj1lLkQsZS5EPXQsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsMSwyLG4sZS5EKSl9ZnVuY3Rpb24gd1YoZSx0KXt2YXIgbjtuPWUuZixlLmY9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgX2EoZSwxLDgsbixlLmYpKX1mdW5jdGlvbiB5VihlLHQpe3ZhciBuO249ZS5pLGUuaT10LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsNyxuLGUuaSkpfWZ1bmN0aW9uIGw3ZShlLHQpe3ZhciBuO249ZS5hLGUuYT10LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsOCxuLGUuYSkpfWZ1bmN0aW9uIGg3ZShlLHQpe3ZhciBuO249ZS5iLGUuYj10LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMCxuLGUuYikpfWZ1bmN0aW9uIGY3ZShlLHQpe3ZhciBuO249ZS5iLGUuYj10LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMCxuLGUuYikpfWZ1bmN0aW9uIGQ3ZShlLHQpe3ZhciBuO249ZS5jLGUuYz10LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMSxuLGUuYykpfWZ1bmN0aW9uIGc3ZShlLHQpe3ZhciBuO249ZS5kLGUuZD10LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMSxuLGUuZCkpfWZ1bmN0aW9uIEd3bihlLHQsbil7dmFyIHI7ZS5iPXQsZS5hPW4scj0oZS5hJjUxMik9PTUxMj9uZXcgZ0plOm5ldyBKJCxlLmM9YVNuKHIsZS5iLGUuYSl9ZnVuY3Rpb24gb2Z0KGUsdCl7cmV0dXJuIHVwKGUuZSx0KT8oRm8oKSxWb2UodCk/bmV3IG5IKHQsZSk6bmV3IHlPKHQsZSkpOm5ldyBQdHQodCxlKX1mdW5jdGlvbiBLd24oZSl7dmFyIHQsbjtyZXR1cm4gMD5lP25ldyBiM2U6KHQ9ZSsxLG49bmV3IHd1dCh0LGUpLG5ldyBVeWUobnVsbCxuKSl9ZnVuY3Rpb24gV3duKGUsdCl7Q24oKTt2YXIgbjtyZXR1cm4gbj1uZXcgTjgoMSksSWEoZSk/cmMobixlLHQpOmp1KG4uZixlLHQpLG5ldyB0cihuKX1mdW5jdGlvbiBZd24oZSx0KXt2YXIgbixyO3JldHVybiBuPWUuYyxyPXQuZVtlLnBdLHI+MD9sKGp0KG4uYSxyLTEpLDEwKTpudWxsfWZ1bmN0aW9uIFh3bihlLHQpe3ZhciBuLHI7cmV0dXJuIG49ZS5vK2UucCxyPXQubyt0LnAsbjxyPy0xOm49PXI/MDoxfWZ1bmN0aW9uIFF3bihlKXt2YXIgdDtyZXR1cm4gdD1RKGUsKGZ0KCksemkpKSxEZSh0LDE2Nyk/QzF0KGwodCwxNjcpKTpudWxsfWZ1bmN0aW9uIGNmdChlKXt2YXIgdDtyZXR1cm4gZT1iLk1hdGgubWF4KGUsMiksdD1QN2UoZSksZT50Pyh0PDw9MSx0PjA/dDpyTCk6dH1mdW5jdGlvbiB0Y2UoZSl7c3dpdGNoKEN5ZShlLmUhPTMpLGUuZSl7Y2FzZSAyOnJldHVybiExO2Nhc2UgMDpyZXR1cm4hMH1yZXR1cm4gc3ZuKGUpfWZ1bmN0aW9uIHVmdChlLHQpe3ZhciBuO3JldHVybiBEZSh0LDgpPyhuPWwodCw4KSxlLmE9PW4uYSYmZS5iPT1uLmIpOiExfWZ1bmN0aW9uIEp3bihlLHQpe3ZhciBuO249bmV3IE90LGwodC5iLDY4KSxsKHQuYiw2OCksbCh0LmIsNjgpLFZ1KHQuYSxuZXcgazRlKGUsbix0KSl9ZnVuY3Rpb24gbGZ0KGUsdCl7dmFyIG4scjtmb3Iocj10LnZjKCkuS2MoKTtyLk9iKCk7KW49bChyLlBiKCksNDQpLEdOKGUsbi5sZCgpLG4ubWQoKSl9ZnVuY3Rpb24gcDdlKGUsdCl7dmFyIG47bj1lLmQsZS5kPXQsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsMSwxMSxuLGUuZCkpfWZ1bmN0aW9uIHhWKGUsdCl7dmFyIG47bj1lLmosZS5qPXQsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsMSwxMyxuLGUuaikpfWZ1bmN0aW9uIGI3ZShlLHQpe3ZhciBuO249ZS5iLGUuYj10LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMjEsbixlLmIpKX1mdW5jdGlvbiBad24oZSx0KXsoVUgoKSxHMT9udWxsOnQuYykubGVuZ3RoPT0wJiZTcnQodCxuZXcgRHQpLHJjKGUuYSxHMT9udWxsOnQuYyx0KX1mdW5jdGlvbiBlM24oZSx0KXt0LlVnKCJIaWVyYXJjaGljYWwgcG9ydCBjb25zdHJhaW50IHByb2Nlc3NpbmciLDEpLHY2bihlKSxSSW4oZSksdC5WZygpfWZ1bmN0aW9uIE93KCl7T3c9VSxvMz1uZXcgdnNlKCJTVEFSVCIsMCksUmI9bmV3IHZzZSgiTUlERExFIiwxKSxhMz1uZXcgdnNlKCJFTkQiLDIpfWZ1bmN0aW9uIGtWKCl7a1Y9VSwkVz1uZXcgVTNlKCJQMV9OT0RFX1BMQUNFTUVOVCIsMCksWDY9bmV3IFUzZSgiUDJfRURHRV9ST1VUSU5HIiwxKX1mdW5jdGlvbiBiYigpe2JiPVUsSHg9bmV3IFVpKE5FZSksRUs9bmV3IFVpKEMzdCksJEw9bmV3IFVpKFMzdCksaEI9bmV3IFVpKF8zdCl9ZnVuY3Rpb24gTncoZSl7dmFyIHQ7cmV0dXJuIHBhZShlLmYuZyxlLmQpLG1yKGUuYiksZS5jPWUuYSx0PWwoZS5hLlBiKCksNDQpLGUuYj1MN2UoZSksdH1mdW5jdGlvbiBtN2UoZSl7dmFyIHQ7cmV0dXJuIGUuYj09bnVsbD8oV3AoKSxXcCgpLGRGKToodD1lLnVsKCk/ZS50bCgpOmUuc2woKSx0KX1mdW5jdGlvbiBoZnQoZSx0KXt2YXIgbjtyZXR1cm4gbj10PT1udWxsPy0xOmdjKGUuYix0LDApLG48MD8hMToocmNlKGUsbiksITApfWZ1bmN0aW9uIGQwKGUsdCl7dmFyIG47cmV0dXJuIG5yKHQpLG49dC5nLGUuYltuXT8hMTooVHMoZS5iLG4sdCksKytlLmMsITApfWZ1bmN0aW9uIEVWKGUsdCl7dmFyIG4scjtyZXR1cm4gbj0xLXQscj1lLmFbbl0sZS5hW25dPXIuYVt0XSxyLmFbdF09ZSxlLmI9ITAsci5iPSExLHJ9ZnVuY3Rpb24gdDNuKGUsdCl7dmFyIG4scjtmb3Iocj10LktjKCk7ci5PYigpOyluPWwoci5QYigpLDI3MiksZS5iPSEwLG5hKGUuZSxuKSxuLmI9ZX1mdW5jdGlvbiBuM24oZSx0KXt2YXIgbixyO3JldHVybiBuPWwoUShlLChOdCgpLHc0KSksOCkscj1sKFEodCx3NCksOCksWWkobi5iLHIuYil9ZnVuY3Rpb24gbmNlKGUsdCxuKXt2YXIgcixhLG87cmV0dXJuIG89dD4+NSxhPXQmMzEscj12YSh1YihlLm5bbl1bb10sWXIobDAoYSwxKSkpLDMpLHJ9ZnVuY3Rpb24gZmZ0KGUsdCxuKXt2YXIgcixhLG87Zm9yKG89ZS5hLmxlbmd0aC0xLGE9ZS5iLHI9MDtyPG47YT1hKzEmbywrK3IpVHModCxyLGUuYVthXSl9ZnVuY3Rpb24gcmNlKGUsdCl7dmFyIG47bj10MihlLmIsZS5iLmMubGVuZ3RoLTEpLHQ8ZS5iLmMubGVuZ3RoJiYocmYoZS5iLHQsbiksUHB0KGUsdCkpfWZ1bmN0aW9uIGRmdChlLHQpe3ZhciBuO3JldHVybiBuPWwoY3IoZS5jLHQpLDQ2Nyksbnx8KG49bmV3IFdRZSxuLmM9dCxraShlLmMsbi5jLG4pKSxufWZ1bmN0aW9uIHIzbihlLHQpe3ZhciBuLHI7cj1uZXcgYnQsbj10O2RvICRuKHIuYyxuKSxuPWwoY3IoZS5rLG4pLDE4KTt3aGlsZShuKTtyZXR1cm4gcn1mdW5jdGlvbiBpY2UoZSx0LG4pe3ZhciByO3JldHVybiByPW5ldyBidCxXOWUoZSx0LHIsbiwhMCwhMCksZS5iPW5ldyBUVihyLmMubGVuZ3RoKSxyfWZ1bmN0aW9uICRtKGUsdCl7dmFyIG4scjtmb3Iobj1lLlBjKCksbkUobiwwLG4ubGVuZ3RoLHQpLHI9MDtyPG4ubGVuZ3RoO3IrKyllLmhkKHIsbltyXSl9ZnVuY3Rpb24gdjdlKGUpe3ZhciB0LG47Zm9yKG49bmV3IG9yKGUpO24uZSE9bi5pLmdjKCk7KXQ9bChncihuKSwyNyksVXUodCwwKSxHdSh0LDApfWZ1bmN0aW9uIGdmdChlKXt0aGlzLmU9ZSx0aGlzLmQ9bmV3IEt6KEF5KFc4KHRoaXMuZSkuZ2MoKSkpLHRoaXMuYz10aGlzLmUuYSx0aGlzLmI9dGhpcy5lLmN9ZnVuY3Rpb24gVFYoZSl7dGhpcy5iPWUsdGhpcy5hPVdlKFZyLGRpLDI4LGUrMSwxNSwxKSx0aGlzLmM9V2UoVnIsZGksMjgsZSwxNSwxKSx0aGlzLmQ9MH1mdW5jdGlvbiBwZnQoZSx0LG4pe19odC5jYWxsKHRoaXMsdCxuKSx0aGlzLmQ9V2Uod2csbTIsMTAsZS5hLmMubGVuZ3RoLDAsMSksajEoZS5hLHRoaXMuZCl9ZnVuY3Rpb24gYmZ0KGUsdCxuKXtuNmUuY2FsbCh0aGlzLGUsdCxuKSx0aGlzLmE9bmV3IFByLHRoaXMuYj1uZXcgUHIsdGhpcy5kPW5ldyB6WWUodGhpcyl9ZnVuY3Rpb24gbWZ0KGUpe1g0ZS5jYWxsKHRoaXMpLHRoaXMuYj16ZShHZShRKGUsKE50KCkseDApKSkpLHRoaXMuYT1sKFEoZSxicCksMjIzKX1mdW5jdGlvbiBzY2UoZSx0KXt2YXIgbjtyZXR1cm4gRGUodCwxNik/KG49bCh0LDE2KSxlLkdjKG4pKTpHb2UoZSxsKFhyKHQpLDIwKS5LYygpKX1mdW5jdGlvbiBpM24oZSx0KXtJcyhGaShuZXcgYm4obnVsbCxuZXcga24obmV3IGJyKGUuYiksMSkpLG5ldyB1dHQoZSx0KSksbmV3IGh0dChlLHQpKX1mdW5jdGlvbiBzM24oZSx0KXt0LlVnKHEzdCwxKSxJcyhEYyhuZXcgYm4obnVsbCxuZXcga24oZS5iLDE2KSksbmV3IEtKKSxuZXcgV0opLHQuVmcoKX1mdW5jdGlvbiBlcyhlKXtyZXR1cm4gSWEoZSk/czIoZSk6ZnkoZSk/ajgoZSk6aHkoZSk/QXJ0KGUpOnQ1ZShlKT9lLkhiKCk6VzRlKGUpP2Z3KGUpOkY1ZShlKX1mdW5jdGlvbiB2ZnQoZSl7dmFyIHQsbjtmb3Iobj1lLmMuYS5lYygpLktjKCk7bi5PYigpOyl0PWwobi5QYigpLDIxOSksTSh0LG5ldyBGc3QodC5mKSl9ZnVuY3Rpb24gdzdlKGUpe3ZhciB0LG47Zm9yKG49ZS5jLmEuZWMoKS5LYygpO24uT2IoKTspdD1sKG4uUGIoKSwyMTkpLE8odCxuZXcgUWd0KHQuZSkpfWZ1bmN0aW9uIEZ1KGUsdCl7dmFyIG47bj1lLnpiLGUuemI9dCxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgX2EoZSwxLDEsbixlLnpiKSl9ZnVuY3Rpb24gQ1YoZSx0KXt2YXIgbjtuPWUueGIsZS54Yj10LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMyxuLGUueGIpKX1mdW5jdGlvbiBTVihlLHQpe3ZhciBuO249ZS55YixlLnliPXQsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsMSwyLG4sZS55YikpfWZ1bmN0aW9uIFNzKGUsdCl7dmFyIG4scjtuPShyPW5ldyB6aWUsciksbi5uPXQscXIoKCFlLnMmJihlLnM9bmV3IG50KGRsLGUsMjEsMTcpKSxlLnMpLG4pfWZ1bmN0aW9uIGlzKGUsdCl7dmFyIG4scjtyPShuPW5ldyBIeWUsbiksci5uPXQscXIoKCFlLnMmJihlLnM9bmV3IG50KGRsLGUsMjEsMTcpKSxlLnMpLHIpfWZ1bmN0aW9uIEthKGUsdCl7dmFyIG4scixhO2Zvcihucih0KSxuPSExLGE9dC5LYygpO2EuT2IoKTspcj1hLlBiKCksbj1ufGUuRmMocik7cmV0dXJuIG59ZnVuY3Rpb24gd2Z0KGUpe3ZhciB0LG4scjtmb3IodD0wLHI9ZS5LYygpO3IuT2IoKTspbj1yLlBiKCksdCs9biE9bnVsbD9lcyhuKTowLHQ9fn50O3JldHVybiB0fWZ1bmN0aW9uIGFjZShlLHQpe3ZhciBuPWUuYSxyPTA7Zm9yKHZhciBhIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShhKSYmKHRbcisrXT1hKTtyZXR1cm4gdH1mdW5jdGlvbiB5ZnQoZSl7dmFyIHQ7cmV0dXJuIGU9PTA/IlVUQyI6KGU8MD8oZT0tZSx0PSJVVEMrIik6dD0iVVRDLSIsdCtKbHQoZSkpfWZ1bmN0aW9uIHk3ZShlKXtyZXR1cm4gZS5hPDU0P2UuZjwwPy0xOmUuZj4wPzE6MDooIWUuYyYmKGUuYz1YTyhaYyhlLmYpKSksZS5jKS5lfWZ1bmN0aW9uIHhmdChlLHQpe3Q/ZS5CPT1udWxsJiYoZS5CPWUuRCxlLkQ9bnVsbCk6ZS5CIT1udWxsJiYoZS5EPWUuQixlLkI9bnVsbCl9ZnVuY3Rpb24gYTNuKGUsdCl7cmV0dXJuIHdFKCksZT09czMmJnQ9PW80fHxlPT1vNCYmdD09czN8fGU9PU02JiZ0PT1hNHx8ZT09YTQmJnQ9PU02fWZ1bmN0aW9uIG8zbihlLHQpe3JldHVybiB3RSgpLGU9PXMzJiZ0PT1hNHx8ZT09czMmJnQ9PU02fHxlPT1vNCYmdD09TTZ8fGU9PW80JiZ0PT1hNH1mdW5jdGlvbiBrZnQoZSx0KXtyZXR1cm4gQTEoKSxmMChIMSksYi5NYXRoLmFicygwLXQpPD1IMXx8dD09MHx8aXNOYU4oMCkmJmlzTmFOKHQpPzA6ZS90fWZ1bmN0aW9uIEVmdChlLHQpe3JldHVybiB6ZShHZShmaChPTihmYyhuZXcgYm4obnVsbCxuZXcga24oZS5jLmIsMTYpKSxuZXcgQVllKGUpKSx0KSkpKX1mdW5jdGlvbiB4N2UoZSx0KXtyZXR1cm4gemUoR2UoZmgoT04oZmMobmV3IGJuKG51bGwsbmV3IGtuKGUuYy5iLDE2KSksbmV3IF9ZZShlKSksdCkpKSl9ZnVuY3Rpb24gYzNuKCl7cmV0dXJuIEhvKCksaGUobGUoRjFlLDEpLGl0LDI1OSwwLFtlVyx2ZixVTCx0VywkVCxCNixHTCxSVCxqVCxuV10pfWZ1bmN0aW9uIHUzbigpe3JldHVybiBOZigpLGhlKGxlKFREZSwxKSxpdCwyNDMsMCxbQVcsQUIsTEIseERlLGtEZSx5RGUsRURlLExXLHYzLHg0XSl9ZnVuY3Rpb24gbDNuKGUsdCl7dmFyIG47dC5VZygiR2VuZXJhbCBDb21wYWN0b3IiLDEpLG49cDVuKGwoYXQoZSwoU2IoKSxaZGUpKSwzOTMpKSxuLkNnKGUpfWZ1bmN0aW9uIGgzbihlLHQpe3ZhciBuLHI7cmV0dXJuIG49bChhdChlLChTYigpLHFXKSksMTcpLHI9bChhdCh0LHFXKSwxNykscnUobi5hLHIuYSl9ZnVuY3Rpb24gazdlKGUsdCxuKXt2YXIgcixhO2ZvcihhPVJyKGUsMCk7YS5iIT1hLmQuYzspcj1sKEJyKGEpLDgpLHIuYSs9dCxyLmIrPW47cmV0dXJuIGV9ZnVuY3Rpb24gZ0EoZSx0LG4pe3ZhciByO2ZvcihyPWUuYltuJmUuZl07cjtyPXIuYilpZihuPT1yLmEmJnlkKHQsci5nKSlyZXR1cm4gcjtyZXR1cm4gbnVsbH1mdW5jdGlvbiBwQShlLHQsbil7dmFyIHI7Zm9yKHI9ZS5jW24mZS5mXTtyO3I9ci5kKWlmKG49PXIuZiYmeWQodCxyLmkpKXJldHVybiByO3JldHVybiBudWxsfWZ1bmN0aW9uIGYzbihlLHQsbil7dmFyIHIsYSxvO2ZvcihyPTAsYT0wO2E8bjthKyspbz10W2FdLGVbYV09bzw8MXxyLHI9bz4+PjMxO3IhPTAmJihlW25dPXIpfWZ1bmN0aW9uIG9jZShlLHQsbixyLGEsbyl7dmFyIGY7dGhpcy5jPWUsZj1uZXcgYnQsdHhlKGUsZix0LGUuYixuLHIsYSxvKSx0aGlzLmE9bmV3IFVhKGYsMCl9ZnVuY3Rpb24gVGZ0KCl7dGhpcy5jPW5ldyBXeigwKSx0aGlzLmI9bmV3IFd6KGxDZSksdGhpcy5kPW5ldyBXeihoeXQpLHRoaXMuYT1uZXcgV3ooTGhlKX1mdW5jdGlvbiBvZihlLHQsbixyLGEsbyxmKXtVci5jYWxsKHRoaXMsZSx0KSx0aGlzLmQ9bix0aGlzLmU9cix0aGlzLmM9YSx0aGlzLmI9byx0aGlzLmE9TzEoZil9ZnVuY3Rpb24gT3MoZSx0LG4scixhLG8sZixnLHcsRSxDLEwsQil7cmV0dXJuIExwdChlLHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCKSwkY2UoZSwhMSksZX1mdW5jdGlvbiBkM24oZSl7cmV0dXJuIGUuYi5jLmkuaz09KFpuKCksVXMpP2woUShlLmIuYy5pLChmdCgpLHppKSksMTIpOmUuYi5jfWZ1bmN0aW9uIENmdChlKXtyZXR1cm4gZS5iLmQuaS5rPT0oWm4oKSxVcyk/bChRKGUuYi5kLmksKGZ0KCksemkpKSwxMik6ZS5iLmR9ZnVuY3Rpb24gZzNuKGUpe3ZhciB0O3JldHVybiB0PWpIKGUpLGN3KHQuYSwwKT8oSnooKSxKeigpLEE2dCk6KEp6KCksbmV3IGFydCh0LmIpKX1mdW5jdGlvbiBjY2UoZSl7dmFyIHQ7cmV0dXJuIHQ9ZTZlKGUpLGN3KHQuYSwwKT8oY3koKSxjeSgpLEkwZSk6KGN5KCksbmV3IHNhZSh0LmIpKX1mdW5jdGlvbiB1Y2UoZSl7dmFyIHQ7cmV0dXJuIHQ9ZTZlKGUpLGN3KHQuYSwwKT8oY3koKSxjeSgpLEkwZSk6KGN5KCksbmV3IHNhZSh0LmMpKX1mdW5jdGlvbiBTZnQoZSl7c3dpdGNoKGUuZyl7Y2FzZSAyOnJldHVybiBDdCgpLGVyO2Nhc2UgNDpyZXR1cm4gQ3QoKSxhcjtkZWZhdWx0OnJldHVybiBlfX1mdW5jdGlvbiBfZnQoZSl7c3dpdGNoKGUuZyl7Y2FzZSAxOnJldHVybiBDdCgpLERyO2Nhc2UgMzpyZXR1cm4gQ3QoKSxRbjtkZWZhdWx0OnJldHVybiBlfX1mdW5jdGlvbiBBZnQoZSl7c3dpdGNoKGUuZyl7Y2FzZSAwOnJldHVybiBuZXcgTW5lO2Nhc2UgMTpyZXR1cm4gbmV3IERuZTtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBseCgpe2x4PVUsZzFlPW5ldyB2cygiZWRnZWxhYmVsY2VudGVyZWRuZXNzYW5hbHlzaXMuaW5jbHVkZWxhYmVsIiwoSG4oKSxQYikpfWZ1bmN0aW9uIEU3ZSgpe0U3ZT1VLENFdD1UZChZdHQoZmkoZmkobmV3IFhzLCh1bygpLGJ1KSwodm8oKSxQSykpLF91LE1LKSxtYyksTkspfWZ1bmN0aW9uIExmdCgpe0xmdD1VLExFdD1UZChZdHQoZmkoZmkobmV3IFhzLCh1bygpLGJ1KSwodm8oKSxQSykpLF91LE1LKSxtYyksTkspfWZ1bmN0aW9uIGxjZSgpe2xjZT1VLHFNPW5ldyB1SmUsbnBlPWhlKGxlKGRsLDEpLFM2LDE3OSwwLFtdKSxYX3Q9aGUobGUoVWYsMSksTFNlLDYyLDAsW10pfWZ1bmN0aW9uIGRFKCl7ZEU9VSxkQj1uZXcgSTNlKCJUT19JTlRFUk5BTF9MVFIiLDApLGgxZT1uZXcgSTNlKCJUT19JTlBVVF9ESVJFQ1RJT04iLDEpfWZ1bmN0aW9uIGtsKCl7a2w9VSxFQWU9bmV3IEsyLHhBZT1uZXcgSjMsa0FlPW5ldyBISix5QWU9bmV3IHdtLFRBZT1uZXcgVkosQ0FlPW5ldyBVSn1mdW5jdGlvbiBwM24oZSx0KXt0LlVnKHEzdCwxKSxTOGUoWnVuKG5ldyBlXygoZ18oKSxuZXcgSmFlKGUsITEsITEsbmV3IGNTKSkpKSksdC5WZygpfWZ1bmN0aW9uIGIzbihlLHQsbil7bi5VZygiREZTIFRyZWVpZnlpbmcgcGhhc2UiLDEpLE81bihlLHQpLERDbihlLHQpLGUuYT1udWxsLGUuYj1udWxsLG4uVmcoKX1mdW5jdGlvbiB2TihlLHQpe3JldHVybiBIbigpLElhKGUpP0U2ZShlLGVpKHQpKTpmeShlKT9OYWUoZSxHZSh0KSk6aHkoZSk/YWduKGUsQnQodCkpOmUuRmQodCl9ZnVuY3Rpb24gYkEoZSx0KXt2YXIgbixyO2Zvcihucih0KSxyPXQudmMoKS5LYygpO3IuT2IoKTspbj1sKHIuUGIoKSw0NCksZS56YyhuLmxkKCksbi5tZCgpKX1mdW5jdGlvbiBtM24oZSx0LG4pe3ZhciByO2ZvcihyPW4uS2MoKTtyLk9iKCk7KWlmKCFxSChlLHQsci5QYigpKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiB2M24oZSx0LG4scixhKXt2YXIgbztyZXR1cm4gbiYmKG89bXModC5EaCgpLGUuYyksYT1uLlJoKHQsLTEtKG89PS0xP3I6byksbnVsbCxhKSksYX1mdW5jdGlvbiB3M24oZSx0LG4scixhKXt2YXIgbztyZXR1cm4gbiYmKG89bXModC5EaCgpLGUuYyksYT1uLlRoKHQsLTEtKG89PS0xP3I6byksbnVsbCxhKSksYX1mdW5jdGlvbiBNZnQoZSl7dmFyIHQ7aWYoZS5iPT0tMil7aWYoZS5lPT0wKXQ9LTE7ZWxzZSBmb3IodD0wO2UuYVt0XT09MDt0KyspO2UuYj10fXJldHVybiBlLmJ9ZnVuY3Rpb24geTNuKGUpe2lmKG5yKGUpLGUubGVuZ3RoPT0wKXRocm93IHVlKG5ldyBnZCgiWmVybyBsZW5ndGggQmlnSW50ZWdlciIpKTtTX24odGhpcyxlKX1mdW5jdGlvbiBUN2UoZSl7dGhpcy5pPWUuZ2MoKSx0aGlzLmk+MCYmKHRoaXMuZz10aGlzLmFqKHRoaXMuaSsodGhpcy5pLzh8MCkrMSksZS5RYyh0aGlzLmcpKX1mdW5jdGlvbiBEZnQoZSx0LG4pe3RoaXMuZz1lLHRoaXMuZD10LHRoaXMuZT1uLHRoaXMuYT1uZXcgYnQsSWtuKHRoaXMpLENuKCksVnModGhpcy5hLG51bGwpfWZ1bmN0aW9uIEM3ZShlLHQpe3QucT1lLGUuZD1iLk1hdGgubWF4KGUuZCx0LnIpLGUuYis9dC5kKyhlLmEuYy5sZW5ndGg9PTA/MDplLmMpLHZ0KGUuYSx0KX1mdW5jdGlvbiBnRShlLHQpe3ZhciBuLHIsYSxvO3JldHVybiBhPWUuYyxuPWUuYytlLmIsbz1lLmQscj1lLmQrZS5hLHQuYT5hJiZ0LmE8biYmdC5iPm8mJnQuYjxyfWZ1bmN0aW9uIER5KGUsdCl7dmFyIG4scjtmb3Iocj1ScihlLDApO3IuYiE9ci5kLmM7KW49bChCcihyKSw4KSxuLmErPXQuYSxuLmIrPXQuYjtyZXR1cm4gZX1mdW5jdGlvbiB4M24oZSl7dmFyIHQsbixyO2ZvcihyPTAsbj1uZXcgRyhlLmIpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwzMCksdC5wPXIsKytyfWZ1bmN0aW9uIGszbihlKXt2YXIgdCxuLHI7cmV0dXJuIGUuaj09KEN0KCksUW4pJiYodD12MnQoZSksbj12bCh0LGFyKSxyPXZsKHQsZXIpLHJ8fHImJm4pfWZ1bmN0aW9uIEUzbihlLHQpe3ZhciBuO3JldHVybiBuPSR4ZShlKSxtOWUobmV3IGx0KG4uYyxuLmQpLG5ldyBsdChuLmIsbi5hKSxlLk1mKCksdCxlLmFnKCkpfWZ1bmN0aW9uIFM3ZShlLHQpe3ZhciBuO249bCh0LDE5MCksTm0obiwieCIsZS5pKSxObShuLCJ5IixlLmopLE5tKG4sVWZlLGUuZyksTm0obixWZmUsZS5mKX1mdW5jdGlvbiBfVihlLHQpe3ZhciBuO0RlKHQsODUpPyhsKGUuYyw3OSkuR2soKSxuPWwodCw4NSksbGZ0KGUsbikpOmwoZS5jLDc5KS5XYih0KX1mdW5jdGlvbiBtQShlLHQpe3ZhciBuLHI7Zm9yKG5yKHQpLHI9ZS52YygpLktjKCk7ci5PYigpOyluPWwoci5QYigpLDQ0KSx0LllkKG4ubGQoKSxuLm1kKCkpfWZ1bmN0aW9uIFQzbihlLHQpe3ZhciBuO2ZvcihYcih0KTtlLk9iKCk7KWlmKG49ZS5QYigpLCFBN2UobChuLDEwKSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gQzNuKCl7dmFyIGU7cmV0dXJuIEYwZXx8KEYwZT1uZXcgRlFlLGU9bmV3IFNvZSgiIiksJGxuKGUsKERrKCksd19lKSksWnduKEYwZSxlKSksRjBlfWZ1bmN0aW9uIElmdChlLHQpe3JldHVybiBTeShuZXcgZWIoZSksbmV3IEcwKHQpLG5ldyB6cCh0KSxuZXcgYW8saGUobGUob2MsMSksaXQsMTA4LDAsW10pKX1mdW5jdGlvbiBBVigpe0FWPVUsbmdlPW5ldyBQc2UoSWQsMCksVUllPW5ldyBQc2UoIlBPTEFSX0NPT1JESU5BVEUiLDEpLFZJZT1uZXcgUHNlKCJJRCIsMil9ZnVuY3Rpb24gTFYoKXtMVj1VLEFEZT1uZXcgU3NlKCJFUVVBTExZIiwwKSxUZGU9bmV3IFNzZShuRywxKSxMRGU9bmV3IFNzZSgiTk9SVEhfU09VVEgiLDIpfWZ1bmN0aW9uIHBFKCl7cEU9VSxqTD1uZXcgdnMoImRlYnVnU1ZHIiwoSG4oKSwhMSkpLFZfZT1uZXcgdnMoIm92ZXJsYXBzRXhpc3RlZCIsITApfWZ1bmN0aW9uIE9mdCgpe09mdD1VLHlTdD1LcigoZzIoKSxoZShsZSh3U3QsMSksaXQsMjg1LDAsW1ZPZSx5YSxUYyxKNixmbyxwcyx0OSxYMV0pKSl9ZnVuY3Rpb24gTmZ0KCl7TmZ0PVUsTF90PUtyKChIRSgpLGhlKGxlKHhZLDEpLGl0LDI0NSwwLFtKZ2Usd1kseVksdlksUWdlLG1ZLGJZLFhnZV0pKSl9ZnVuY3Rpb24gUGZ0KCl7UGZ0PVUsbHh0PUtyKChPVSgpLGhlKGxlKHVMZSwxKSxpdCwyNzYsMCxbdzFlLGsxZSx2MWUsQzFlLHgxZSx5MWUsVDFlLEUxZV0pKSl9ZnVuY3Rpb24gQmZ0KCl7cmV0dXJuIFdBKCksaGUobGUoQU9uLDEpLGl0LDI2MiwwLFtEZGUsR0RlLFhEZSxRRGUsWURlLFVEZSxKRGUsSERlLFdEZSxLRGUsVkRlXSl9ZnVuY3Rpb24gem0oZSx0LG4pe3ZhciByLGE7cmV0dXJuIGE9bChIXyhlLmQsdCksMTcpLHI9bChIXyhlLmIsbiksMTcpLCFhfHwhcj9udWxsOm94KGUsYS5hLHIuYSl9ZnVuY3Rpb24gRmZ0KGUsdCl7dmFyIG47cmV0dXJuIG49aWxlKGhFKCksZSksbj8oSGkodCwocGkoKSxhNyksbiksITApOiExfWZ1bmN0aW9uIFJmdChlKXtyZXR1cm4gcHkoKSxlLkEuSGMoKG1oKCksQTQpKSYmIWUuQi5IYygoWmwoKSxhRikpP04xdChlKTpudWxsfWZ1bmN0aW9uIGpmdCgpe3RoaXMuYT1sKEl0KChiMCgpLHhLKSksMTcpLmEsdGhpcy5jPXplKEdlKEl0KGtLKSkpLHRoaXMuYj16ZShHZShJdChKMGUpKSl9ZnVuY3Rpb24gcW0oZSl7dGhpcy5mPWUsdGhpcy5lPW5ldyBoNmUodGhpcy5mLmkpLHRoaXMuYT10aGlzLmUsdGhpcy5iPUw3ZSh0aGlzKSx0aGlzLmQ9dGhpcy5mLmd9ZnVuY3Rpb24gTHMoZSx0KXtKcS5jYWxsKHRoaXMsUV90LGUsdCksdGhpcy5iPXRoaXMsdGhpcy5hPVd1KGUuRGgoKSxNbih0aGlzLmUuRGgoKSx0aGlzLmMpKX1mdW5jdGlvbiBTM24oZSx0KXt2YXIgbixyO2ZvcihyPW5ldyBHKHQuYik7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDMwKSxlLmFbbi5wXT1zOW4obil9ZnVuY3Rpb24gRGgoZSx0KXt2YXIgbjtmb3Iobj0wO248dC5qLmMubGVuZ3RoO24rKylsKGhOKGUsbiksMjEpLkdjKGwoaE4odCxuKSwxNikpO3JldHVybiBlfWZ1bmN0aW9uIGhjZShlLHQsbixyKXt2YXIgYTthPWUuYS5sZW5ndGgsbj5hP249YTpYbih0LG4rMSksZS5hPXRmKGUuYSwwLHQpKygiIityKSt3NWUoZS5hLG4pfWZ1bmN0aW9uICRmdChlLHQpe2UuYT1ibyhlLmEsMSksZS5jPWIuTWF0aC5taW4oZS5jLHQpLGUuYj1iLk1hdGgubWF4KGUuYix0KSxlLmQ9Ym8oZS5kLHQpfWZ1bmN0aW9uIF8zbihlLHQpe3JldHVybiB0PGUuYi5nYygpP2woZS5iLlhiKHQpLDEwKTp0PT1lLmIuZ2MoKT9lLmE6bChqdChlLmUsdC1lLmIuZ2MoKS0xKSwxMCl9ZnVuY3Rpb24gQTNuKGUsdCxuKXtyZXR1cm4gWWkoejgoQkUoZSksbmV3IGx0KHQuZS5hLHQuZS5iKSksejgoQkUoZSksbmV3IGx0KG4uZS5hLG4uZS5iKSkpfWZ1bmN0aW9uIEwzbihlLHQsbil7cmV0dXJuIGU9PShJdygpLE1XKT9uZXcgSGVlOkpsKHQsMSkhPTA/bmV3IG8zZShuLmxlbmd0aCk6bmV3IEtKZShuLmxlbmd0aCl9ZnVuY3Rpb24gTmkoZSx0KXt2YXIgbixyLGE7aWYobj1lLnRoKCksbiE9bnVsbCYmZS53aCgpKWZvcihyPTAsYT1uLmxlbmd0aDtyPGE7KytyKW5bcl0uZGoodCl9ZnVuY3Rpb24gTTNuKGUsdCl7dmFyIG4scixhO2ZvcihuPWUuYy5YZSgpLGE9dC5LYygpO2EuT2IoKTspcj1hLlBiKCksZS5hLllkKG4scik7cmV0dXJuIGUuYi5LYihuKX1mdW5jdGlvbiBiRShlLHQpe3ZhciBuLHI7Zm9yKG49ZSxyPWVvKG4pLmU7cjspe2lmKG49cixuPT10KXJldHVybiEwO3I9ZW8obikuZX1yZXR1cm4hMX1mdW5jdGlvbiBtYihlKXt2YXIgdDtyZXR1cm4gdD1lLmgsdD09MD9lLmwrZS5tKkx4OnQ9PWhwP2UubCtlLm0qTHgtWm06ZX1mdW5jdGlvbiBEM24oZSx0LG4pe3ZhciByLGE7cmV0dXJuIHI9ZS5hLmZbdC5wXSxhPWUuYS5mW24ucF0scjxhPy0xOnI9PWE/MDoxfWZ1bmN0aW9uIEkzbihlLHQpe3ZhciBuLHI7Zm9yKHI9bmV3IEcodCk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDcyKSx2dChlLmQsbiksZTluKGUsbil9ZnVuY3Rpb24gTzNuKGUsdCl7dmFyIG47dC5VZygiRWRnZSBhbmQgbGF5ZXIgY29uc3RyYWludCBlZGdlIHJldmVyc2FsIiwxKSxuPXFTbihlKSx3RG4obiksdC5WZygpfWZ1bmN0aW9uIE4zbihlLHQpe3ZhciBuLHI7Zm9yKHI9bmV3IG9yKGUpO3IuZSE9ci5pLmdjKCk7KW49bChncihyKSwyNyksUWgobixuLmkrdC5iLG4uait0LmQpfWZ1bmN0aW9uIHpmdChlKXt2YXIgdDtlLmQ9PW51bGw/KCsrZS5lLGUuZj0wLFowdChudWxsKSk6KCsrZS5lLHQ9ZS5kLGUuZD1udWxsLGUuZj0wLFowdCh0KSl9ZnVuY3Rpb24gUDNuKGUpe3ZhciB0O2lmKGUuYT09ZS5iLmEpdGhyb3cgdWUobmV3IF9jKTtyZXR1cm4gdD1lLmEsZS5jPXQsZS5hPWwoTGYoZS5hLmUpLDIyNyksdH1mdW5jdGlvbiBLbihlLHQpe3ZhciBuO3JldHVybiBlLkRiJnQ/KG49bXVlKGUsdCksbj09LTE/ZS5FYjpqbShlLkViKVtuXSk6bnVsbH1mdW5jdGlvbiBxYyhlLHQpe3ZhciBuLHI7cmV0dXJuIG49KHI9bmV3IGh6LHIpLG4uRz10LCFlLnJiJiYoZS5yYj1uZXcgd3koZSxsMSxlKSkscXIoZS5yYixuKSxufWZ1bmN0aW9uIFRpKGUsdCl7dmFyIG4scjtyZXR1cm4gbj0ocj1uZXcgRnosciksbi5HPXQsIWUucmImJihlLnJiPW5ldyB3eShlLGwxLGUpKSxxcihlLnJiLG4pLG59ZnVuY3Rpb24gcWZ0KGUsdCxuLHIpe0RlKGUuQ2IsMTg0KSYmKGwoZS5DYiwxODQpLnRiPW51bGwpLEZ1KGUsbiksdCYmSmtuKGUsdCksciYmZS5nbCghMCl9ZnVuY3Rpb24gSGZ0KGUsdCl7ZS5jJiYoc210KGUsdCwhMCksSXMobmV3IGJuKG51bGwsbmV3IGtuKHQsMTYpKSxuZXcgTlllKGUpKSksc210KGUsdCwhMSl9ZnVuY3Rpb24gQjNuKGUpe3BudCgpO3ZhciB0O3JldHVybiB2ZXQoTWRlLGUpfHwodD1uZXcgZHRlLHQuYT1lLHQ0ZShNZGUsZSx0KSksbChRbyhNZGUsZSksNjQ1KX1mdW5jdGlvbiBNVihlKXt2YXIgdDtpZihlLmc+MXx8ZS5PYigpKXJldHVybisrZS5hLGUuZz0wLHQ9ZS5pLGUuT2IoKSx0O3Rocm93IHVlKG5ldyBfYyl9ZnVuY3Rpb24gVmZ0KGUpe3N3aXRjaChlLmEuZyl7Y2FzZSAxOnJldHVybiBuZXcgWWV0O2Nhc2UgMzpyZXR1cm4gbmV3IFlkdDtkZWZhdWx0OnJldHVybiBuZXcgbmllfX1mdW5jdGlvbiBfN2UoZSx0KXtzd2l0Y2godCl7Y2FzZSAxOnJldHVybiEhZS5uJiZlLm4uaSE9MDtjYXNlIDI6cmV0dXJuIGUuayE9bnVsbH1yZXR1cm4gWjVlKGUsdCl9ZnVuY3Rpb24gWmMoZSl7cmV0dXJuIF9QPGUmJmU8Wm0/ZTwwP2IuTWF0aC5jZWlsKGUpOmIuTWF0aC5mbG9vcihlKTptYihsQ24oZSkpfWZ1bmN0aW9uIHdOKGUpe3ZhciB0O3JldHVybiBlPDEyOD8obnN0KCksdD1lX2VbZV0sIXQmJih0PWVfZVtlXT1uZXcgeXMoZSkpLHQpOm5ldyB5cyhlKX1mdW5jdGlvbiBGM24oZSx0KXt2YXIgbjt0cnl7dC5kZSgpfWNhdGNoKHIpe2lmKHI9YnMociksRGUociw4Mikpbj1yLCRuKGUuYyxuKTtlbHNlIHRocm93IHVlKHIpfX1mdW5jdGlvbiBNZihlKXt2YXIgdCxuLHIsYTtyZXR1cm4gYT1lLHI9MCxhPDAmJihhKz1abSxyPWhwKSxuPXVhKGEvTHgpLHQ9dWEoYS1uKkx4KSxxdSh0LG4scil9ZnVuY3Rpb24geU4oZSl7dmFyIHQsbixyO2ZvcihyPTAsbj1uZXcgUDgoZS5hKTtuLmE8bi5jLmEubGVuZ3RoOyl0PWNBKG4pLGUuYi5IYyh0KSYmKytyO3JldHVybiByfWZ1bmN0aW9uIFIzbihlKXt2YXIgdCxuLHI7Zm9yKHQ9MSxyPWUuS2MoKTtyLk9iKCk7KW49ci5QYigpLHQ9MzEqdCsobj09bnVsbD8wOmVzKG4pKSx0PX5+dDtyZXR1cm4gdH1mdW5jdGlvbiBwYyhlLHQpe3ZhciBuO3JldHVybiB0JiYobj10Lm5mKCksbi5kYygpfHwoZS5xP2JBKGUucSxuKTplLnE9bmV3IGp0dChuKSkpLGV9ZnVuY3Rpb24gVWZ0KGUsdCl7dmFyIG47cmV0dXJuIG49ZS5hLmdldCh0KSxuPT09dm9pZCAwPysrZS5kOihEZm4oZS5hLHQpLC0tZS5jLCsrZS5iLmcpLG59ZnVuY3Rpb24gajNuKGUsdCl7dmFyIG4scixhO3JldHVybiBuPXQucC1lLnAsbj09MD8ocj1lLmYuYSplLmYuYixhPXQuZi5hKnQuZi5iLFlpKHIsYSkpOm59ZnVuY3Rpb24gJDNuKGUsdCl7dmFyIG4scjtyZXR1cm4gbj1lLmoscj10LmosbiE9cj9uLmctci5nOmUucD09dC5wPzA6bj09KEN0KCksUW4pP2UucC10LnA6dC5wLWUucH1mdW5jdGlvbiB2QShlLHQsbixyLGEpe1RzKGUuY1t0LmddLG4uZyxyKSxUcyhlLmNbbi5nXSx0LmcsciksVHMoZS5iW3QuZ10sbi5nLGEpLFRzKGUuYltuLmddLHQuZyxhKX1mdW5jdGlvbiBIbShlLHQsbil7dGhpcy5iPShucihlKSxlKSx0aGlzLmQ9KG5yKHQpLHQpLHRoaXMuZT0obnIobiksbiksdGhpcy5jPXRoaXMuZCsoIiIrdGhpcy5lKX1mdW5jdGlvbiBtRShlLHQpe3RoaXMuYj1lLHRoaXMuZT10LHRoaXMuZD10LmosdGhpcy5mPShGbygpLGwoZSw2OSkueGsoKSksdGhpcy5rPVd1KHQuZS5EaCgpLGUpfWZ1bmN0aW9uIHhOKGUpe3RoaXMubj1uZXcgYnQsdGhpcy5lPW5ldyBvcyx0aGlzLmo9bmV3IG9zLHRoaXMuaz1uZXcgYnQsdGhpcy5mPW5ldyBidCx0aGlzLnA9ZX1mdW5jdGlvbiBHZnQoZSl7ZS5yPW5ldyBLcyxlLnc9bmV3IEtzLGUudD1uZXcgYnQsZS5pPW5ldyBidCxlLmQ9bmV3IEtzLGUuYT1uZXcgJDgsZS5jPW5ldyBQcn1mdW5jdGlvbiBQdygpe1B3PVUsaUI9bmV3IHVxKCJVUCIsMCksckI9bmV3IHVxKHdoZSwxKSxWMGU9bmV3IHVxKE14LDIpLFUwZT1uZXcgdXEoRHgsMyl9ZnVuY3Rpb24gdkUoKXt2RT1VLFIxZT1uZXcga3NlKCJPTkVfU0lERUQiLDApLGoxZT1uZXcga3NlKCJUV09fU0lERUQiLDEpLHZCPW5ldyBrc2UoIk9GRiIsMil9ZnVuY3Rpb24gZmNlKCl7ZmNlPVUsYk9lPW5ldyBXM2UoIkVRVUFMX0JFVFdFRU5fU1RSVUNUVVJFUyIsMCksbU9lPW5ldyBXM2UoIlRPX0FTUEVDVF9SQVRJTyIsMSl9ZnVuY3Rpb24gS2Z0KCl7S2Z0PVUsSmt0PUtyKChwMigpLGhlKGxlKHBEZSwxKSxpdCwyNjUsMCxbZ2RlLGZEZSxkRGUsZGRlLGhEZSxnRGUsQ1csV1QsWVRdKSkpfWZ1bmN0aW9uIFdmdCgpe1dmdD1VLGxfdD1LcigoWmwoKSxoZShsZShlUGUsMSksaXQsMjY0LDAsW2FDLGFGLHVZLEZNLGxZLGZZLGhZLEdnZSxzRl0pKSl9ZnVuY3Rpb24gWWZ0KCl7WWZ0PVUsZV90PUtyKChxeSgpLGhlKGxlKEtvLDEpLGl0LDk1LDAsW0UwLG1wLFQwLFMwLEVnLHFmLGpoLEMwLHpmXSkpKX1mdW5jdGlvbiBYZnQoKXtYZnQ9VSxWNnQ9S3IoKFBVKCksaGUobGUoJF9lLDEpLGl0LDI1NywwLFtqX2UsUF9lLEJfZSxOX2UsejBlLFJfZSxGX2UsT19lLElfZV0pKSl9ZnVuY3Rpb24gQTdlKGUpe3ZhciB0O3JldHVybiB0PWwoUShlLChmdCgpLFdjKSksNjQpLGUuaz09KFpuKCksVXMpJiYodD09KEN0KCksZXIpfHx0PT1hcil9ZnVuY3Rpb24gejNuKGUsdCxuKXt2YXIgcixhO2E9bChRKGUsKE50KCksY2MpKSw3NSksYSYmKHI9bmV3IGJsLEFjZShyLDAsYSksRHkocixuKSxLYSh0LHIpKX1mdW5jdGlvbiBEVihlLHQsbil7dmFyIHIsYSxvLGY7Zj1lbyhlKSxyPWYuZCxhPWYuYyxvPWUubix0JiYoby5hPW8uYS1yLmItYS5hKSxuJiYoby5iPW8uYi1yLmQtYS5iKX1mdW5jdGlvbiBxM24oZSx0KXt2YXIgbixyO3JldHVybiBuPWUuZi5jLmxlbmd0aCxyPXQuZi5jLmxlbmd0aCxuPHI/LTE6bj09cj8wOjF9ZnVuY3Rpb24gSDNuKGUpe3JldHVybiBlLmIuYy5sZW5ndGghPTAmJmwoanQoZS5iLDApLDcyKS5hP2woanQoZS5iLDApLDcyKS5hOlFhZShlKX1mdW5jdGlvbiBWM24oZSl7dmFyIHQ7aWYoZSl7aWYodD1lLHQuZGMoKSl0aHJvdyB1ZShuZXcgX2MpO3JldHVybiB0LlhiKHQuZ2MoKS0xKX1yZXR1cm4gTm90KGUuS2MoKSl9ZnVuY3Rpb24gUWZ0KGUpe3ZhciB0O3JldHVybiBpdShlLDApPDAmJihlPU80ZShlKSksdD1Zcih1YihlLDMyKSksNjQtKHQhPTA/clAodCk6clAoWXIoZSkpKzMyKX1mdW5jdGlvbiBVM24oKXtyZXR1cm4gVUgoKSxHMT9uZXcgU29lKG51bGwpOnAydChDM24oKSwiY29tLmdvb2dsZS5jb21tb24uYmFzZS5TdHJpbmdzIil9ZnVuY3Rpb24gZGNlKGUsdCxuLHIpe3JldHVybiBuPT0xPyghZS5uJiYoZS5uPW5ldyBudChlYyxlLDEsNykpLFRvKGUubix0LHIpKTpXeGUoZSx0LG4scil9ZnVuY3Rpb24ga04oZSx0KXt2YXIgbixyO3JldHVybiByPShuPW5ldyBQUyxuKSxGdShyLHQpLHFyKCghZS5BJiYoZS5BPW5ldyBtbChadSxlLDcpKSxlLkEpLHIpLHJ9ZnVuY3Rpb24gRzNuKGUsdCxuKXt2YXIgcixhLG8sZjtyZXR1cm4gbz1udWxsLGY9dCxhPUF3KGYsV2ZlKSxyPW5ldyBwdHQoZSxuKSxvPShFOG4oci5hLHIuYixhKSxhKSxvfWZ1bmN0aW9uIGdjZShlKXt2YXIgdDtyZXR1cm4oIWUuYXx8IShlLkJiJjEpJiZlLmEuVmgoKSkmJih0PU9mKGUpLERlKHQsMTU2KSYmKGUuYT1sKHQsMTU2KSkpLGUuYX1mdW5jdGlvbiBFTihlLHQpe3ZhciBuLHI7Zm9yKG5yKHQpLHI9dC5LYygpO3IuT2IoKTspaWYobj1yLlBiKCksIWUuSGMobikpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gSzNuKGUsdCl7dmFyIG4scixhO3JldHVybiBuPWUubCt0Lmwscj1lLm0rdC5tKyhuPj4yMiksYT1lLmgrdC5oKyhyPj4yMikscXUobiZlaCxyJmVoLGEmaHApfWZ1bmN0aW9uIEpmdChlLHQpe3ZhciBuLHIsYTtyZXR1cm4gbj1lLmwtdC5sLHI9ZS5tLXQubSsobj4+MjIpLGE9ZS5oLXQuaCsocj4+MjIpLHF1KG4mZWgsciZlaCxhJmhwKX1mdW5jdGlvbiBXM24oZSl7dmFyIHQsbjtmb3IoekRuKGUpLG49bmV3IEcoZS5kKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMTA1KSx0LmkmJkI5bih0KX1mdW5jdGlvbiBicyhlKXt2YXIgdDtyZXR1cm4gRGUoZSw4Mik/ZToodD1lJiZlLl9famF2YSRleGNlcHRpb24sdHx8KHQ9bmV3IFUwdChlKSxEUWUodCkpLHQpfWZ1bmN0aW9uIFROKGUpe2lmKERlKGUsMTkzKSlyZXR1cm4gbChlLDEyMyk7aWYoZSlyZXR1cm4gbnVsbDt0aHJvdyB1ZShuZXcgRDgoVDR0KSl9ZnVuY3Rpb24gTDdlKGUpe3JldHVybiBlLmEuT2IoKT8hMDplLmEhPWUuZT8hMTooZS5hPW5ldyBPNmUoZS5mLmYpLGUuYS5PYigpKX1mdW5jdGlvbiBaZnQoZSx0KXtpZih0PT1udWxsKXJldHVybiExO2Zvcig7ZS5hIT1lLmI7KWlmKFBpKHQsRlYoZSkpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGUwdChlLHQpe3JldHVybiFlfHwhdHx8ZT09dD8hMTokMXQoZS5kLmMsdC5kLmMrdC5kLmIpJiYkMXQodC5kLmMsZS5kLmMrZS5kLmIpfWZ1bmN0aW9uIHJhKGUsdCl7dmFyIG4scjtyZXR1cm4gbj10LlBjKCkscj1uLmxlbmd0aCxyPT0wPyExOihNNGUoZS5jLGUuYy5sZW5ndGgsbiksITApfWZ1bmN0aW9uIFkzbihlLHQsbil7dmFyIHIsYTtmb3IoYT10LnZjKCkuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksNDQpLGUueWMoci5sZCgpLHIubWQoKSxuKTtyZXR1cm4gZX1mdW5jdGlvbiBwY2UoZSl7dmFyIHQsbixyO2Zvcih0PW5ldyBvcyxyPVJyKGUuZCwwKTtyLmIhPXIuZC5jOyluPWwoQnIociksNjUpLHVpKHQsbi5jKTtyZXR1cm4gdH1mdW5jdGlvbiB0MHQoZSx0KXt2YXIgbixyO2ZvcihyPW5ldyBHKGUuYik7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDcyKSxydChuLChmdCgpLFl4KSx0KX1mdW5jdGlvbiBYM24oZSx0LG4pe3ZhciByLGE7Zm9yKGE9bmV3IEcoZS5iKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMjcpLFFoKHIsci5pK3Qsci5qK24pfWZ1bmN0aW9uIG4wdChlLHQpe2lmKCFlKXRocm93IHVlKG5ldyBZbihLQSgidmFsdWUgYWxyZWFkeSBwcmVzZW50OiAlcyIsaGUobGUod2EsMSksUm4sMSw1LFt0XSkpKSl9ZnVuY3Rpb24gUTNuKGUsdCxuLHIsYSl7cmV0dXJuIGg2KCksYi5NYXRoLm1pbihNdnQoZSx0LG4scixhKSxNdnQobixyLGUsdCxIcShuZXcgbHQoYS5hLGEuYikpKSl9ZnVuY3Rpb24gSjNuKGUsdCxuLHIpe2wobi5iLDY4KSxsKG4uYiw2OCksbChyLmIsNjgpLGwoci5iLDY4KSxsKHIuYiw2OCksVnUoci5hLG5ldyB4NGUoZSx0LHIpKX1mdW5jdGlvbiBaM24oZSx0KXtlLmQ9PShKcygpLHVjKXx8ZS5kPT13Zj9sKHQuYSw2MCkuYy5GYyhsKHQuYiw2MCkpOmwodC5iLDYwKS5jLkZjKGwodC5hLDYwKSl9ZnVuY3Rpb24gcjB0KGUsdCl7dmFyIG47cmV0dXJuIG49ZWcodC5hLmdjKCkpLElzKGxWKG5ldyBibihudWxsLG5ldyBrbih0LDEpKSxlLmkpLG5ldyBvdHQoZSxuKSksbn1mdW5jdGlvbiBpMHQoZSl7dmFyIHQsbjtyZXR1cm4gbj0odD1uZXcgUFMsdCksRnUobiwiVCIpLHFyKCghZS5kJiYoZS5kPW5ldyBtbChadSxlLDExKSksZS5kKSxuKSxufWZ1bmN0aW9uIE03ZShlKXt2YXIgdCxuLHIsYTtmb3IodD0xLG49MCxhPWUuZ2MoKTtuPGE7KytuKXI9ZS5WaShuKSx0PTMxKnQrKHI9PW51bGw/MDplcyhyKSk7cmV0dXJuIHR9ZnVuY3Rpb24gczB0KGUsdCxuLHIpe3ZhciBhO3JldHVybiBaTyh0LGUuZS5SZCgpLmdjKCkpLFpPKG4sZS5jLlJkKCkuZ2MoKSksYT1lLmFbdF1bbl0sVHMoZS5hW3RdLG4sciksYX1mdW5jdGlvbiBoZShlLHQsbixyLGEpe3JldHVybiBhLlJtPWUsYS5TbT10LGEuVG09eGUsYS5fX2VsZW1lbnRUeXBlSWQkPW4sYS5fX2VsZW1lbnRUeXBlQ2F0ZWdvcnkkPXIsYX1mdW5jdGlvbiBJVigpe0lWPVUscDFlPW5ldyBncShJZCwwKSxISz1uZXcgZ3EoVTN0LDEpLFZLPW5ldyBncShHM3QsMikscEI9bmV3IGdxKCJCT1RIIiwzKX1mdW5jdGlvbiBSMSgpe1IxPVUsVng9bmV3IHBxKGNULDApLE1UPW5ldyBwcShNeCwxKSxEVD1uZXcgcHEoRHgsMiksYjFlPW5ldyBwcSgiVE9QIiwzKX1mdW5jdGlvbiB3RSgpe3dFPVUsczM9bmV3IGZxKCJRMSIsMCksbzQ9bmV3IGZxKCJRNCIsMSksYTQ9bmV3IGZxKCJRMiIsMiksTTY9bmV3IGZxKCJRMyIsMyl9ZnVuY3Rpb24gT1YoKXtPVj1VLExkZT1uZXcgTXNlKCJPRkYiLDApLFhUPW5ldyBNc2UoIlNJTkdMRV9FREdFIiwxKSxrND1uZXcgTXNlKCJNVUxUSV9FREdFIiwyKX1mdW5jdGlvbiBDTigpe0NOPVUsWlc9bmV3IFgzZSgiTUlOSU1VTV9TUEFOTklOR19UUkVFIiwwKSx6T2U9bmV3IFgzZSgiTUFYSU1VTV9TUEFOTklOR19UUkVFIiwxKX1mdW5jdGlvbiBoeCgpe2h4PVUsZ1N0PW5ldyBleSxkU3Q9bmV3IE5uZX1mdW5jdGlvbiBEN2UoZSl7dmFyIHQsbjtyZXR1cm4gbj0ocmIoKSx0PW5ldyByayx0KSxlJiZxcigoIWUuYSYmKGUuYT1uZXcgbnQoY3MsZSw2LDYpKSxlLmEpLG4pLG59ZnVuY3Rpb24gYmNlKGUpe3ZhciB0LG4scixhO2ZvcihhPW5ldyBidCxyPWUuS2MoKTtyLk9iKCk7KW49bChyLlBiKCksMjcpLHQ9SHkobikscmEoYSx0KTtyZXR1cm4gYX1mdW5jdGlvbiBleW4oZSx0KXt2YXIgbixyO2ZvcihfSCh0LCJwcmVkaWNhdGUiKSxyPTA7ZS5PYigpO3IrKylpZihuPWUuUGIoKSx0LkxiKG4pKXJldHVybiByO3JldHVybi0xfWZ1bmN0aW9uIGZ4KGUsdCl7dmFyIG4scjtpZihyPTAsZTw2NCYmZTw9dClmb3IodD10PDY0P3Q6NjMsbj1lO248PXQ7bisrKXI9UTAocixsMCgxLG4pKTtyZXR1cm4gcn1mdW5jdGlvbiB0eW4oZSx0KXt2YXIgbixyO3JldHVybiBuPWUuYyxyPXQuZVtlLnBdLHI8bi5hLmMubGVuZ3RoLTE/bChqdChuLmEscisxKSwxMCk6bnVsbH1mdW5jdGlvbiBJN2UoZSl7Q24oKTt2YXIgdCxuLHI7Zm9yKHI9MCxuPWUuS2MoKTtuLk9iKCk7KXQ9bi5QYigpLHI9cisodCE9bnVsbD9lcyh0KTowKSxyPXJ8MDtyZXR1cm4gcn1mdW5jdGlvbiBueW4oZSl7dmFyIHQsbixyO3JldHVybiB0PWwoZS5lJiZlLmUoKSw5KSxyPShuPXQuc2xpY2UoKSxsKGpvZShuLHQpLDkpKSxuZXcgWmgodCxyLHQubGVuZ3RoKX1mdW5jdGlvbiBhMHQoZSx0LG4pe3ZhciByO05sKGUuYSksVnUobi5pLG5ldyBfWGUoZSkpLHI9bmV3IE5xKGwoY3IoZS5hLHQuYiksNjgpKSxYMXQoZSxyLHQpLG4uZj1yfWZ1bmN0aW9uIHJ5bihlKXt2YXIgdDtVdyhlLCEwKSx0PWIyLG5zKGUsKE50KCksVVQpKSYmKHQrPWwoUShlLFVUKSwxNykuYSkscnQoZSxVVCxwdCh0KSl9ZnVuY3Rpb24gaXluKGUpe3ZhciB0O3JldHVybiB0PW5ldyBYLHQuYT1lLHQuYj1neW4oZSksdC5jPVdlKHp0LGR0LDIsMiw2LDEpLHQuY1swXT15ZnQoZSksdC5jWzFdPXlmdChlKSx0fWZ1bmN0aW9uIG8wdChlKXt2YXIgdCxuLHI7cmV0dXJuIG49ZS5uLHI9ZS5vLHQ9ZS5kLG5ldyBlZihuLmEtdC5iLG4uYi10LmQsci5hKyh0LmIrdC5jKSxyLmIrKHQuZCt0LmEpKX1mdW5jdGlvbiBzeW4oZSx0KXtyZXR1cm4hZXx8IXR8fGU9PXQ/ITE6RncoZS5iLmMsdC5iLmMrdC5iLmIpPDAmJkZ3KHQuYi5jLGUuYi5jK2UuYi5iKTwwfWZ1bmN0aW9uIGMwdChlKXtzd2l0Y2goZS5nKXtjYXNlIDE6cmV0dXJuIEdiO2Nhc2UgMjpyZXR1cm4ga2c7Y2FzZSAzOnJldHVybiBaQjtkZWZhdWx0OnJldHVybiBlRn19ZnVuY3Rpb24gYXluKGUpe3N3aXRjaChsKFEoZSwoTnQoKSxRdSkpLDE3MSkuZyl7Y2FzZSAyOmNhc2UgNDpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBTTihlLHQsbil7c3dpdGNoKG4uZyl7Y2FzZSAyOmUuYj10O2JyZWFrO2Nhc2UgMTplLmM9dDticmVhaztjYXNlIDQ6ZS5kPXQ7YnJlYWs7Y2FzZSAzOmUuYT10fX1mdW5jdGlvbiBPN2UoZSx0KXtzd2l0Y2godCl7Y2FzZSAwOiFlLm8mJihlLm89bmV3IHhsKChzdSgpLENnKSxMMixlLDApKSxlLm8uYy4kYigpO3JldHVybn1GdWUoZSx0KX1mdW5jdGlvbiBveW4oZSx0KXt2YXIgbixyO3JldHVybiBuPWwobChjcihlLmcsdC5hKSw0MikuYSw2OCkscj1sKGwoY3IoZS5nLHQuYiksNDIpLmEsNjgpLEJtdChuLHIpfWZ1bmN0aW9uIE43ZShlLHQsbil7dmFyIHI7aWYocj1lLmdjKCksdD5yKXRocm93IHVlKG5ldyBteSh0LHIpKTtyZXR1cm4gZS5TaSgpJiYobj1ib3QoZSxuKSksZS5FaSh0LG4pfWZ1bmN0aW9uIHlFKGUsdCxuLHIsYSl7dmFyIG8sZjtmb3IoZj1uO2Y8PWE7ZisrKWZvcihvPXQ7bzw9cjtvKyspcjYoZSxvLGYpfHxGVShlLG8sZiwhMCwhMSl9ZnVuY3Rpb24gY3luKGUpe2g2KCk7dmFyIHQsbixyO2ZvcihuPVdlKEVhLGR0LDgsMiwwLDEpLHI9MCx0PTA7dDwyO3QrKylyKz0uNSxuW3RdPXQ3bihyLGUpO3JldHVybiBufWZ1bmN0aW9uIHhFKGUpe3ZhciB0LG4scjtyZXR1cm4gdD1+ZS5sKzEmZWgsbj1+ZS5tKyh0PT0wPzE6MCkmZWgscj1+ZS5oKyh0PT0wJiZuPT0wPzE6MCkmaHAscXUodCxuLHIpfWZ1bmN0aW9uIFA3ZShlKXt2YXIgdDtpZihlPDApcmV0dXJuIGxvO2lmKGU9PTApcmV0dXJuIDA7Zm9yKHQ9ckw7ISh0JmUpO3Q+Pj0xKTtyZXR1cm4gdH1mdW5jdGlvbiBtY2UoZSx0LG4pe3JldHVybiBlPj0xMjg/ITE6ZTw2ND9JXyh2YShsMCgxLGUpLG4pLDApOklfKHZhKGwwKDEsZS02NCksdCksMCl9ZnVuY3Rpb24gX04oZSx0LG4pe3JldHVybiBuPT1udWxsPyghZS5xJiYoZS5xPW5ldyBQciksYXgoZS5xLHQpKTooIWUucSYmKGUucT1uZXcgUHIpLGtpKGUucSx0LG4pKSxlfWZ1bmN0aW9uIHJ0KGUsdCxuKXtyZXR1cm4gbj09bnVsbD8oIWUucSYmKGUucT1uZXcgUHIpLGF4KGUucSx0KSk6KCFlLnEmJihlLnE9bmV3IFByKSxraShlLnEsdCxuKSksZX1mdW5jdGlvbiB1MHQoZSl7dmFyIHQsbjtyZXR1cm4gbj1uZXcgS0gscGMobixlKSxydChuLChiYigpLEh4KSxlKSx0PW5ldyBQcixGQW4oZSxuLHQpLGhEbihlLG4sdCksbn1mdW5jdGlvbiBsMHQoZSl7dmFyIHQsbjtyZXR1cm4gdD1lLnQtZS5rW2Uuby5wXSplLmQrZS5qW2Uuby5wXT5lLmYsbj1lLnUrZS5lW2Uuby5wXSplLmQ+ZS5mKmUucyplLmQsdHx8bn1mdW5jdGlvbiBoMHQoZSx0KXt2YXIgbixyLGEsbztmb3Iobj0hMSxyPWUuYVt0XS5sZW5ndGgsbz0wO288ci0xO28rKylhPW8rMSxuPW58UDVuKGUsdCxvLGEpO3JldHVybiBufWZ1bmN0aW9uIHV5bihlKXt2YXIgdCxuLHIsYTtmb3Iobj1lLmEscj0wLGE9bi5sZW5ndGg7cjxhOysrcil0PW5bcl0sdjB0KGUsdCwoQ3QoKSxEcikpLHYwdChlLHQsUW4pfWZ1bmN0aW9uIGYwdCgpe2YwdD1VLEV4dD1LcigoSG8oKSxoZShsZShGMWUsMSksaXQsMjU5LDAsW2VXLHZmLFVMLHRXLCRULEI2LEdMLFJULGpULG5XXSkpKX1mdW5jdGlvbiBkMHQoKXtkMHQ9VSxuRXQ9S3IoKE5mKCksaGUobGUoVERlLDEpLGl0LDI0MywwLFtBVyxBQixMQix4RGUsa0RlLHlEZSxFRGUsTFcsdjMseDRdKSkpfWZ1bmN0aW9uIFZtKCl7Vm09VSxNMWU9bmV3IHhzZShJZCwwKSxGVD1uZXcgeHNlKCJJTkNPTUlOR19PTkxZIiwxKSxQNj1uZXcgeHNlKCJPVVRHT0lOR19PTkxZIiwyKX1mdW5jdGlvbiB2Y2UoKXt2Y2U9VSxfMGU9e2Jvb2xlYW46VXVuLG51bWJlcjpzdW4sc3RyaW5nOmF1bixvYmplY3Q6SXB0LGZ1bmN0aW9uOklwdCx1bmRlZmluZWQ6amNufX1mdW5jdGlvbiBCN2UoKXt0aGlzLm89bnVsbCx0aGlzLms9bnVsbCx0aGlzLmo9bnVsbCx0aGlzLmQ9bnVsbCx0aGlzLmI9bnVsbCx0aGlzLm49bnVsbCx0aGlzLmE9bnVsbH1mdW5jdGlvbiBGN2UoZSx0KXt0aGlzLmM9ZSx0aGlzLmQ9dCx0aGlzLmI9dGhpcy5kL3RoaXMuYy5jLlJkKCkuZ2MoKXwwLHRoaXMuYT10aGlzLmQldGhpcy5jLmMuUmQoKS5nYygpfWZ1bmN0aW9uIGcwdChlLHQpe3RoaXMuYj1lLE41LmNhbGwodGhpcywobChPZSh0dCgobGIoKSxWbikubyksMTApLDE5KSx0LmkpLHQuZyksdGhpcy5hPShsY2UoKSxucGUpfWZ1bmN0aW9uIFI3ZShlLHQsbil7dGhpcy5xPW5ldyBiLkRhdGUsdGhpcy5xLnNldEZ1bGxZZWFyKGUrTGIsdCxuKSx0aGlzLnEuc2V0SG91cnMoMCwwLDAsMCksWEEodGhpcywwKX1mdW5jdGlvbiBwMHQoZSx0KXtCTyhlPj0wLCJOZWdhdGl2ZSBpbml0aWFsIGNhcGFjaXR5IiksQk8odD49MCwiTm9uLXBvc2l0aXZlIGxvYWQgZmFjdG9yIiksTmwodGhpcyl9ZnVuY3Rpb24gbHluKGUsdCxuLHIsYSl7dmFyIG8sZjtpZihmPWUubGVuZ3RoLG89bi5sZW5ndGgsdDwwfHxyPDB8fGE8MHx8dCthPmZ8fHIrYT5vKXRocm93IHVlKG5ldyBfd2UpfWZ1bmN0aW9uIGo3ZShlLHQpe0NuKCk7dmFyIG4scixhLG8sZjtmb3IoZj0hMSxyPXQsYT0wLG89ci5sZW5ndGg7YTxvOysrYSluPXJbYV0sZj1mfGUuRmMobik7cmV0dXJuIGZ9ZnVuY3Rpb24gYjB0KGUsdCxuKXt2YXIgcixhO3JldHVybiByPW5ldyBCb2UodCxuKSxhPW5ldyB4dCxlLmI9eGJ0KGUsZS5iLHIsYSksYS5ifHwrK2UuYyxlLmIuYj0hMSxhLmR9ZnVuY3Rpb24gd0EoZSl7dmFyIHQ7cmV0dXJuIHQ9ZS5hW2UuYl0sdD09bnVsbD9udWxsOihUcyhlLmEsZS5iLG51bGwpLGUuYj1lLmIrMSZlLmEubGVuZ3RoLTEsdCl9ZnVuY3Rpb24gbTB0KGUpe3ZhciB0LG47cmV0dXJuIG49clAoZS5oKSxuPT0zMj8odD1yUChlLm0pLHQ9PTMyP3JQKGUubCkrMzI6dCsyMC0xMCk6bi0xMn1mdW5jdGlvbiAkN2UoZSl7dmFyIHQ7cmV0dXJuKCFlLmN8fCEoZS5CYiYxKSYmZS5jLkRiJjY0KSYmKHQ9T2YoZSksRGUodCw5MCkmJihlLmM9bCh0LDI5KSkpLGUuY31mdW5jdGlvbiB2YihlKXt2YXIgdCxuO2ZvcihuPW5ldyBHKGUuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksNjApLHQuZC5jPS10LmQuYy10LmQuYjtWOWUoZSl9ZnVuY3Rpb24gd2IoZSl7dmFyIHQsbjtmb3Iobj1uZXcgRyhlLmEuYik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDg2KSx0LmcuYz0tdC5nLmMtdC5nLmI7TVUoZSl9ZnVuY3Rpb24gdjB0KGUsdCxuKXt2YXIgcixhLG8sZjtmb3IoZj1UQSh0LG4pLG89MCxhPWYuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMTIpLGtpKGUuYyxyLHB0KG8rKykpfWZ1bmN0aW9uIHcwdChlLHQsbil7dmFyIHI7cmV0dXJuIHI9bmV3IGJ0LFc5ZShlLHQsciwoQ3QoKSxhciksITAsITEpLFc5ZShlLG4scixlciwhMSwhMSkscn1mdW5jdGlvbiBJYyhlKXt2YXIgdCxuLHIsYSxvO2Zvcih0PW5ldyBxYSxyPWUsYT0wLG89ci5sZW5ndGg7YTxvOysrYSluPXJbYV0sdC5hKz1uLmEsdC5iKz1uLmI7cmV0dXJuIHR9ZnVuY3Rpb24gd2NlKGUsdCxuKXt2YXIgcixhLG8sZjtyZXR1cm4gbz1udWxsLGY9dCxhPUF3KGYsImxhYmVscyIpLHI9bmV3IEN0dChlLG4pLG89KEtFbihyLmEsci5iLGEpLGEpLG99ZnVuY3Rpb24gaHluKGUsdCxuLHIpe3ZhciBhO3JldHVybiBhPVA5ZShlLHQsbixyKSwhYSYmKGE9dzRuKGUsbixyKSxhJiYhZzYoZSx0LGEpKT9udWxsOmF9ZnVuY3Rpb24gZnluKGUsdCxuLHIpe3ZhciBhO3JldHVybiBhPUI5ZShlLHQsbixyKSwhYSYmKGE9QmNlKGUsbixyKSxhJiYhZzYoZSx0LGEpKT9udWxsOmF9ZnVuY3Rpb24gZHluKGUsdCxuKXtpZihYcih0KSxuLk9iKCkpZm9yKG55ZSh0LGFhdChuLlBiKCkpKTtuLk9iKCk7KW55ZSh0LGUuYSksbnllKHQsYWF0KG4uUGIoKSkpO3JldHVybiB0fWZ1bmN0aW9uIHkwdChlLHQpe3ZhciBuO2ZvcihuPTA7bjxlLmEuYS5sZW5ndGg7bisrKWlmKCFsKEppdChlLmEsbiksMTc4KS5MYih0KSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBneW4oZSl7dmFyIHQ7cmV0dXJuIGU9PTA/IkV0Yy9HTVQiOihlPDA/KGU9LWUsdD0iRXRjL0dNVC0iKTp0PSJFdGMvR01UKyIsdCtKbHQoZSkpfWZ1bmN0aW9uIHo3ZShlKXt2YXIgdDtyZXR1cm4gZS5iPD0wPyExOih0PXBkKCJNTHlkaEhtc1NEa0siLGNsKGNvKGUuYywwKSkpLHQ+MXx8dD49MCYmZS5iPDMpfWZ1bmN0aW9uIHljZShlKXt2YXIgdCxuLHI7dD1+ZS5sKzEmZWgsbj1+ZS5tKyh0PT0wPzE6MCkmZWgscj1+ZS5oKyh0PT0wJiZuPT0wPzE6MCkmaHAsZS5sPXQsZS5tPW4sZS5oPXJ9ZnVuY3Rpb24gcTdlKGUpe0NuKCk7dmFyIHQsbixyO2ZvcihyPTEsbj1lLktjKCk7bi5PYigpOyl0PW4uUGIoKSxyPTMxKnIrKHQhPW51bGw/ZXModCk6MCkscj1yfDA7cmV0dXJuIHJ9ZnVuY3Rpb24gcHluKGUsdCxuLHIsYSl7dmFyIG87cmV0dXJuIG89RDllKGUsdCksbiYmeWNlKG8pLGEmJihlPWM3bihlLHQpLHI/TmI9eEUoZSk6TmI9cXUoZS5sLGUubSxlLmgpKSxvfWZ1bmN0aW9uIHgwdChlLHQsbil7ZS5nPVJ1ZShlLHQsKEN0KCksYXIpLGUuYiksZS5kPVJ1ZShlLG4sYXIsZS5iKSwhKGUuZy5jPT0wfHxlLmQuYz09MCkmJkpndChlKX1mdW5jdGlvbiBrMHQoZSx0LG4pe2UuZz1SdWUoZSx0LChDdCgpLGVyKSxlLmopLGUuZD1SdWUoZSxuLGVyLGUuaiksIShlLmcuYz09MHx8ZS5kLmM9PTApJiZKZ3QoZSl9ZnVuY3Rpb24gSDdlKGUsdCl7c3dpdGNoKHQpe2Nhc2UgNzpyZXR1cm4hIWUuZSYmZS5lLmkhPTA7Y2FzZSA4OnJldHVybiEhZS5kJiZlLmQuaSE9MH1yZXR1cm4gXzhlKGUsdCl9ZnVuY3Rpb24gYnluKGUsdCl7c3dpdGNoKHQuZyl7Y2FzZSAwOkRlKGUuYiw2NDEpfHwoZS5iPW5ldyBqZnQpO2JyZWFrO2Nhc2UgMTpEZShlLmIsNjQyKXx8KGUuYj1uZXcgUml0KX19ZnVuY3Rpb24gRTB0KGUpe3N3aXRjaChlLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IE9uZTtkZWZhdWx0OnRocm93IHVlKG5ldyBZbihGRysoZS5mIT1udWxsP2UuZjoiIitlLmcpKSl9fWZ1bmN0aW9uIFQwdChlKXtzd2l0Y2goZS5nKXtjYXNlIDA6cmV0dXJuIG5ldyBnbDtkZWZhdWx0OnRocm93IHVlKG5ldyBZbihGRysoZS5mIT1udWxsP2UuZjoiIitlLmcpKSl9fWZ1bmN0aW9uIG15bihlLHQsbil7cmV0dXJuIV9rKEZpKG5ldyBibihudWxsLG5ldyBrbihlLmMsMTYpKSxuZXcgV2wobmV3IGx0dCh0LG4pKSkpLkJkKChBbSgpLHp4KSl9ZnVuY3Rpb24gQzB0KGUsdCl7cmV0dXJuIHo4KEJFKGwoUSh0LChIYygpLHkzKSksODgpKSxuZXcgbHQoZS5jLmUuYS1lLmIuZS5hLGUuYy5lLmItZS5iLmUuYikpPD0wfWZ1bmN0aW9uIHZ5bihlLHQpe2Zvcig7ZS5nPT1udWxsJiYhZS5jP0g1ZShlKTplLmc9PW51bGx8fGUuaSE9MCYmbChlLmdbZS5pLTFdLDUxKS5PYigpOylrbG4odCxDVShlKSl9ZnVuY3Rpb24gVW0oZSl7dmFyIHQsbjtmb3Iobj1uZXcgRyhlLmEuYik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDg2KSx0LmYuJGIoKTtldW4oZS5iLGUpLGFidChlKX1mdW5jdGlvbiBBTihlKXt2YXIgdCxuLHI7Zm9yKHQ9bmV3IGJsLHI9UnIoZSwwKTtyLmIhPXIuZC5jOyluPWwoQnIociksOCksUGsodCwwLG5ldyBFbyhuKSk7cmV0dXJuIHR9ZnVuY3Rpb24ga0UoZSl7dmFyIHQ7cmV0dXJuIGZiKGUpLHQ9bmV3IG9uLGUuYS5CZCh0KT8oT2soKSxuZXcgS2llKG5yKHQuYSkpKTooT2soKSxPaygpLGJfZSl9ZnVuY3Rpb24gVjdlKGUsdCxuKXtzd2l0Y2godCl7Y2FzZSAwOiFlLm8mJihlLm89bmV3IHhsKChzdSgpLENnKSxMMixlLDApKSxfVihlLm8sbik7cmV0dXJufSR1ZShlLHQsbil9ZnVuY3Rpb24geGNlKGUsdCxuKXt0aGlzLmc9ZSx0aGlzLmU9bmV3IHFhLHRoaXMuZj1uZXcgcWEsdGhpcy5kPW5ldyBvcyx0aGlzLmI9bmV3IG9zLHRoaXMuYT10LHRoaXMuYz1ufWZ1bmN0aW9uIGtjZShlLHQsbixyKXt0aGlzLmI9bmV3IGJ0LHRoaXMubj1uZXcgYnQsdGhpcy5pPXIsdGhpcy5qPW4sdGhpcy5zPWUsdGhpcy50PXQsdGhpcy5yPTAsdGhpcy5kPTB9ZnVuY3Rpb24gRUUoZSx0KXtpZighZS5MaSgpJiZ0PT1udWxsKXRocm93IHVlKG5ldyBZbigiVGhlICdubyBudWxsJyBjb25zdHJhaW50IGlzIHZpb2xhdGVkIikpO3JldHVybiB0fWZ1bmN0aW9uIHMyKGUpe3ZhciB0LG47Zm9yKHQ9MCxuPTA7bjxlLmxlbmd0aDtuKyspdD0odDw8NSktdCsoWG4obixlLmxlbmd0aCksZS5jaGFyQ29kZUF0KG4pKXwwO3JldHVybiB0fWZ1bmN0aW9uIFMwdChlLHQpe3ZhciBuLHIsYTtmb3IoYT1lLmI7YTspe2lmKG49ZS5hLk5lKHQsYS5kKSxuPT0wKXJldHVybiBhO3I9bjwwPzA6MSxhPWEuYVtyXX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB3eW4oZSx0LG4pe3ZhciByLGE7cj0oSG4oKSwhIXN5ZShuKSksYT1sKHQueGMociksMTUpLGF8fChhPW5ldyBidCx0LnpjKHIsYSkpLGEuRmMobil9ZnVuY3Rpb24geXluKGUsdCl7dmFyIG4scjtyZXR1cm4gbj1sKGF0KGUsKHoxKCksakIpKSwxNykuYSxyPWwoYXQodCxqQiksMTcpLmEsbj09cnx8bjxyPy0xOm4+cj8xOjB9ZnVuY3Rpb24geHluKGUpe3JldHVybiB2dChlLmMsKGh4KCksZ1N0KSksVzZlKGUuYSx6ZShHZShJdCgoR2NlKCksVFcpKSkpKT9uZXcgSG5lOm5ldyBPWGUoZSl9ZnVuY3Rpb24ga3luKGUpe2Zvcig7IWUuZHx8IWUuZC5PYigpOylpZihlLmImJiFsXyhlLmIpKWUuZD1sKFg4KGUuYiksNTEpO2Vsc2UgcmV0dXJuIG51bGw7cmV0dXJuIGUuZH1mdW5jdGlvbiBVN2UoZSl7c3dpdGNoKGUuZyl7Y2FzZSAxOnJldHVybiBoeXQ7ZGVmYXVsdDpjYXNlIDI6cmV0dXJuIDA7Y2FzZSAzOnJldHVybiBMaGU7Y2FzZSA0OnJldHVybiBsQ2V9fWZ1bmN0aW9uIEV5bigpe0RpKCk7dmFyIGU7cmV0dXJuIGNwZXx8KGU9SGhuKF9iKCJNIiwhMCkpLGU9b0goX2IoIk0iLCExKSxlKSxjcGU9ZSxjcGUpfWZ1bmN0aW9uIE5WKCl7TlY9VSxXZ2U9bmV3IENxKCJFTEsiLDApLGxQZT1uZXcgQ3EoIkpTT04iLDEpLHVQZT1uZXcgQ3EoIkRPVCIsMiksaFBlPW5ldyBDcSgiU1ZHIiwzKX1mdW5jdGlvbiB5QSgpe3lBPVUsU2RlPW5ldyBfc2UoIlNUQUNLRUQiLDApLENkZT1uZXcgX3NlKCJSRVZFUlNFX1NUQUNLRUQiLDEpLE1CPW5ldyBfc2UoIlNFUVVFTkNFRCIsMil9ZnVuY3Rpb24geEEoKXt4QT1VLFpEZT1uZXcgT3NlKElkLDApLElkZT1uZXcgT3NlKCJNSURETEVfVE9fTUlERExFIiwxKSxPQj1uZXcgT3NlKCJBVk9JRF9PVkVSTEFQIiwyKX1mdW5jdGlvbiBURSgpe1RFPVUsb0xlPW5ldyBNWixjTGU9bmV3IGxJLFg4dD1uZXcgeWosWTh0PW5ldyBEWixXOHQ9bmV3IG44LGFMZT0obnIoVzh0KSxuZXcga2UpfWZ1bmN0aW9uIFBWKCl7UFY9VSxXTmU9bmV3IGx3KDE1KSxYU3Q9bmV3IEhhKChwaSgpLF8yKSxXTmUpLE1NPW45LFZOZT1MU3QsVU5lPWt2LEtOZT1pNyxHTmU9QzR9ZnVuY3Rpb24gUTUoZSx0KXt2YXIgbixyLGEsbyxmO2ZvcihyPXQsYT0wLG89ci5sZW5ndGg7YTxvOysrYSluPXJbYV0sZj1uZXcgSnN0KGUpLG4uaGYoZiksWEFuKGYpO05sKGUuZil9ZnVuY3Rpb24gRWNlKGUsdCl7dmFyIG47cmV0dXJuIHQ9PT1lPyEwOkRlKHQsMjI5KT8obj1sKHQsMjI5KSxQaShlLlpiKCksbi5aYigpKSk6ITF9ZnVuY3Rpb24gRzdlKGUsdCl7cmV0dXJuIG5idChlLHQpPyh4bihlLmIsbChRKHQsKGZ0KCkscHApKSwyMSksdCksdWkoZS5hLHQpLCEwKTohMX1mdW5jdGlvbiBUeW4oZSl7dmFyIHQsbjt0PWwoUShlLChmdCgpLGpsKSksMTApLHQmJihuPXQuYyxhbChuLmEsdCksbi5hLmMubGVuZ3RoPT0wJiZhbChlbyh0KS5iLG4pKX1mdW5jdGlvbiBDeW4oZSx0KXtyZXR1cm4gbnMoZSwoZnQoKSxLaSkpJiZucyh0LEtpKT9sKFEodCxLaSksMTcpLmEtbChRKGUsS2kpLDE3KS5hOjB9ZnVuY3Rpb24gU3luKGUsdCl7cmV0dXJuIG5zKGUsKGZ0KCksS2kpKSYmbnModCxLaSk/bChRKGUsS2kpLDE3KS5hLWwoUSh0LEtpKSwxNykuYTowfWZ1bmN0aW9uIF8wdChlKXtyZXR1cm4gRzE/V2UoRDZ0LFh3dCw1ODEsMCwwLDEpOmwoajEoZS5hLFdlKEQ2dCxYd3QsNTgxLGUuYS5jLmxlbmd0aCwwLDEpKSw4NTYpfWZ1bmN0aW9uIF95bihlLHQsbixyKXtyZXR1cm4ga0goKSxuZXcgWXdlKGhlKGxlKHV2LDEpLFhVLDQ0LDAsWyhmdWUoZSx0KSxuZXcgaXcoZSx0KSksKGZ1ZShuLHIpLG5ldyBpdyhuLHIpKV0pKX1mdW5jdGlvbiBKNShlLHQsbil7dmFyIHIsYTtyZXR1cm4gYT0ocj1uZXcgcWllLHIpLEpvKGEsdCxuKSxxcigoIWUucSYmKGUucT1uZXcgbnQoVWYsZSwxMSwxMCkpLGUucSksYSksYX1mdW5jdGlvbiBUY2UoZSl7dmFyIHQsbixyLGE7Zm9yKGE9Y2xuKFNfdCxlKSxuPWEubGVuZ3RoLHI9V2UoenQsZHQsMixuLDYsMSksdD0wO3Q8bjsrK3Qpclt0XT1hW3RdO3JldHVybiByfWZ1bmN0aW9uIEs3ZShlLHQpe3ZhciBuO3QqMisxPj1lLmIuYy5sZW5ndGh8fChLN2UoZSwyKnQrMSksbj0yKnQrMixuPGUuYi5jLmxlbmd0aCYmSzdlKGUsbiksUHB0KGUsdCkpfWZ1bmN0aW9uIEF5bihlLHQpe3ZhciBuLHI7Zm9yKHI9UnIoZSwwKTtyLmIhPXIuZC5jOyluPWwoQnIociksMjE5KSxuLmUubGVuZ3RoPjAmJih0LkNkKG4pLG4uaSYmQzRuKG4pKX1mdW5jdGlvbiBXN2UoZSx0LG4pe3ZhciByO2ZvcihyPW4tMTtyPj0wJiZlW3JdPT09dFtyXTtyLS0pO3JldHVybiByPDA/MDpmc2UodmEoZVtyXSxWbyksdmEodFtyXSxWbykpPy0xOjF9ZnVuY3Rpb24gQTB0KGUsdCxuKXt2YXIgcixhO3RoaXMuZz1lLHRoaXMuYz10LHRoaXMuYT10aGlzLHRoaXMuZD10aGlzLGE9Y2Z0KG4pLHI9V2UoYzZ0LFRQLDIyNyxhLDAsMSksdGhpcy5iPXJ9ZnVuY3Rpb24gQ2NlKGUsdCxuLHIsYSl7dmFyIG8sZjtmb3IoZj1uO2Y8PWE7ZisrKWZvcihvPXQ7bzw9cjtvKyspaWYocjYoZSxvLGYpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEx5bihlLHQpe3ZhciBuLHI7Zm9yKHI9ZS5aYigpLkNjKCkuS2MoKTtyLk9iKCk7KWlmKG49bChyLlBiKCksMTYpLG4uSGModCkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gTDB0KGUsdCxuKXt2YXIgcixhLG8sZjtmb3IobnIobiksZj0hMSxvPWUuZmQodCksYT1uLktjKCk7YS5PYigpOylyPWEuUGIoKSxvLlJiKHIpLGY9ITA7cmV0dXJuIGZ9ZnVuY3Rpb24gU2NlKGUsdCl7dmFyIG4scjtyZXR1cm4gcj1sKEtuKGUuYSw0KSwxMjkpLG49V2UoZXBlLHIwZSw0MjQsdCwwLDEpLHIhPW51bGwmJnB1KHIsMCxuLDAsci5sZW5ndGgpLG59ZnVuY3Rpb24gTTB0KGUsdCl7dmFyIG47cmV0dXJuIG49bmV3IGVsZSgoZS5mJjI1NikhPTAsZS5pLGUuYSxlLmQsKGUuZiYxNikhPTAsZS5qLGUuZyx0KSxlLmUhPW51bGx8fChuLmM9ZSksbn1mdW5jdGlvbiBNeW4oZSx0KXt2YXIgbjtyZXR1cm4gZT09PXQ/ITA6RGUodCw4NSk/KG49bCh0LDg1KSxReGUoTW0oZSksbi52YygpKSk6ITF9ZnVuY3Rpb24gRDB0KGUsdCxuKXt2YXIgcixhO2ZvcihhPW4uS2MoKTthLk9iKCk7KWlmKHI9bChhLlBiKCksNDQpLGUuQmUodCxyLm1kKCkpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEkwdChlLHQsbil7cmV0dXJuIGUuZFt0LnBdW24ucF18fChPNm4oZSx0LG4pLGUuZFt0LnBdW24ucF09ITAsZS5kW24ucF1bdC5wXT0hMCksZS5hW3QucF1bbi5wXX1mdW5jdGlvbiBEeW4oZSx0KXt2YXIgbjtyZXR1cm4hZXx8ZT09dHx8IW5zKHQsKGZ0KCksdTMpKT8hMToobj1sKFEodCwoZnQoKSx1MykpLDEwKSxuIT1lKX1mdW5jdGlvbiBfY2UoZSl7c3dpdGNoKGUuaSl7Y2FzZSAyOnJldHVybiEwO2Nhc2UgMTpyZXR1cm4hMTtjYXNlLTE6KytlLmM7ZGVmYXVsdDpyZXR1cm4gZS4kbCgpfX1mdW5jdGlvbiBPMHQoZSl7c3dpdGNoKGUuaSl7Y2FzZS0yOnJldHVybiEwO2Nhc2UtMTpyZXR1cm4hMTtjYXNlIDE6LS1lLmM7ZGVmYXVsdDpyZXR1cm4gZS5fbCgpfX1mdW5jdGlvbiBOMHQoZSl7eG90LmNhbGwodGhpcywiVGhlIGdpdmVuIHN0cmluZyBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgZm9ybWF0IGZvciBpbmRpdmlkdWFsIHNwYWNpbmdzLiIsZSl9ZnVuY3Rpb24gSXluKGUsdCl7dmFyIG47dC5VZygiTWluIFNpemUgUHJlcHJvY2Vzc2luZyIsMSksbj1hOWUoZSksSGkoZSwodWcoKSxtTSksbi5hKSxIaShlLFVXLG4uYiksdC5WZygpfWZ1bmN0aW9uIE95bihlKXt2YXIgdCxuLHI7Zm9yKHQ9MCxyPVdlKEVhLGR0LDgsZS5iLDAsMSksbj1ScihlLDApO24uYiE9bi5kLmM7KXJbdCsrXT1sKEJyKG4pLDgpO3JldHVybiByfWZ1bmN0aW9uIEFjZShlLHQsbil7dmFyIHIsYSxvO2ZvcihyPW5ldyBvcyxvPVJyKG4sMCk7by5iIT1vLmQuYzspYT1sKEJyKG8pLDgpLHVpKHIsbmV3IEVvKGEpKTtMMHQoZSx0LHIpfWZ1bmN0aW9uIE55bihlLHQpe3ZhciBuO3JldHVybiBuPWJvKGUsdCksZnNlKG1vZShlLHQpLDApfEFxKG1vZShlLG4pLDApP246Ym8oRVAsbW9lKHViKG4sNjMpLDEpKX1mdW5jdGlvbiBQeW4oZSx0KXt2YXIgbixyO3JldHVybiBuPWwoZS5kLkJjKHQpLDE2KSxuPyhyPWUuZS5oYygpLHIuR2MobiksZS5lLmQtPW4uZ2MoKSxuLiRiKCkscik6bnVsbH1mdW5jdGlvbiBQMHQoZSl7dmFyIHQ7aWYodD1lLmEuYy5sZW5ndGgsdD4wKXJldHVybiBxayh0LTEsZS5hLmMubGVuZ3RoKSx0MihlLmEsdC0xKTt0aHJvdyB1ZShuZXcgT1FlKX1mdW5jdGlvbiBCMHQoZSx0LG4pe2lmKGU+dCl0aHJvdyB1ZShuZXcgWW4oZUcrZStRd3QrdCkpO2lmKGU8MHx8dD5uKXRocm93IHVlKG5ldyB0M2UoZUcrZStmRWUrdCt1RWUrbikpfWZ1bmN0aW9uIENFKGUsdCl7ZS5EPT1udWxsJiZlLkIhPW51bGwmJihlLkQ9ZS5CLGUuQj1udWxsKSxlY2UoZSx0PT1udWxsP251bGw6KG5yKHQpLHQpKSxlLkMmJmUuaGwobnVsbCl9ZnVuY3Rpb24gQnluKGUsdCl7dmFyIG47bj1JdCgoR2NlKCksVFcpKSE9bnVsbCYmdC5TZygpIT1udWxsP3plKEdlKHQuU2coKSkpL3plKEdlKEl0KFRXKSkpOjEsa2koZS5iLHQsbil9ZnVuY3Rpb24gWTdlKGUsdCl7dmFyIG4scjtpZihyPWUuY1t0XSxyIT0wKWZvcihlLmNbdF09MCxlLmQtPXIsbj10KzE7bjxlLmEubGVuZ3RoOyllLmFbbl0tPXIsbis9biYtbn1mdW5jdGlvbiBJeShlKXt2YXIgdDsrK2UuaixlLmk9PTA/ZS5nPW51bGw6ZS5pPGUuZy5sZW5ndGgmJih0PWUuZyxlLmc9ZS5haihlLmkpLHB1KHQsMCxlLmcsMCxlLmkpKX1mdW5jdGlvbiBGeW4oZSx0LG4pe2lmKHQ8MCl0aHJvdyB1ZShuZXcgdGMoSXl0K3QpKTt0PGUuai5jLmxlbmd0aD9yZihlLmosdCxuKTooQmN0KGUsdCksdnQoZS5qLG4pKX1mdW5jdGlvbiBGMHQoZSl7aWYoIWUuYXx8IShlLmEuaSY4KSl0aHJvdyB1ZShuZXcgbmMoIkVudW1lcmF0aW9uIGNsYXNzIGV4cGVjdGVkIGZvciBsYXlvdXQgb3B0aW9uICIrZS5mKSl9ZnVuY3Rpb24gWDdlKGUpe3ZhciB0O3JldHVybiB0PSghZS5hJiYoZS5hPW5ldyBudCh3cCxlLDksNSkpLGUuYSksdC5pIT0wP2FsbihsKE9lKHQsMCksNjk0KSk6bnVsbH1mdW5jdGlvbiBSeW4oZSl7dmFyIHQ7Zm9yKFhyKGUpLGI0ZSghMCwibnVtYmVyVG9BZHZhbmNlIG11c3QgYmUgbm9ubmVnYXRpdmUiKSx0PTA7dDwwJiZqcihlKTt0KyspeHIoZSk7cmV0dXJuIHR9ZnVuY3Rpb24gTGNlKCl7TGNlPVUsS19lPShaeigpLEcwZSksR19lPW5ldyBwbihDRWUsS19lKSxMN3Q9bmV3IFVpKFNFZSksTTd0PW5ldyBVaShfRWUpLEQ3dD1uZXcgVWkoQUVlKX1mdW5jdGlvbiBrQSgpe2tBPVUsVmRlPW5ldyB3cSgkRWUsMCksalc9bmV3IHdxKGd5dCwxKSxIZGU9bmV3IHdxKCJGQU4iLDIpLHFkZT1uZXcgd3EoIkNPTlNUUkFJTlQiLDMpfWZ1bmN0aW9uIExOKCl7TE49VSx6Vz1uZXcgTnNlKElkLDApLFNJZT1uZXcgTnNlKCJSQURJQUxfQ09NUEFDVElPTiIsMSksX0llPW5ldyBOc2UoIldFREdFX0NPTVBBQ1RJT04iLDIpfWZ1bmN0aW9uIFNFKCl7U0U9VSxfZGU9bmV3IEFzZSgiQ09OU0VSVkFUSVZFIiwwKSxJRGU9bmV3IEFzZSgiQ09OU0VSVkFUSVZFX1NPRlQiLDEpLGFNPW5ldyBBc2UoIlNMT1BQWSIsMil9ZnVuY3Rpb24gRmwoKXtGbD1VLHlfZT1uZXcgZHNlKCJDT05DVVJSRU5UIiwwKSxFYz1uZXcgZHNlKCJJREVOVElUWV9GSU5JU0giLDEpLGk0PW5ldyBkc2UoIlVOT1JERVJFRCIsMil9ZnVuY3Rpb24gTWNlKCl7TWNlPVUsaTFlPWZvdChoZShsZShMTSwxKSxpdCw4OCwwLFsoSnMoKSx1YyksdmNdKSksczFlPWZvdChoZShsZShMTSwxKSxpdCw4OCwwLFt3ZixRMV0pKX1mdW5jdGlvbiBiaChlKXtyZXR1cm4gSWEoZSk/enQ6ZnkoZSk/dGE6aHkoZSk/TnM6dDVlKGUpfHxXNGUoZSk/ZS5SbTplLlJtfHxBcnJheS5pc0FycmF5KGUpJiZsZSh1NnQsMSl8fHU2dH1mdW5jdGlvbiBqeW4oZSl7cmV0dXJuIGU/ZS5pJjE/ZT09aWg/TnM6ZT09VnI/cm86ZT09QjQ/X1Q6ZT09TmE/dGE6ZT09bm0/cjM6ZT09aDc/aTM6ZT09QWw/ang6UEw6ZTpudWxsfWZ1bmN0aW9uIFo1KGUpe3JldHVybihlLmMhPWUuYi5ifHxlLmkhPWUuZy5iKSYmKGF5KGUuYS5jLDApLHJhKGUuYSxlLmIpLHJhKGUuYSxlLmcpLGUuYz1lLmIuYixlLmk9ZS5nLmIpLGUuYX1mdW5jdGlvbiAkeW4oZSx0KXt2YXIgbixyO2ZvcihuPWUuYS5sZW5ndGgtMTt0IT1lLmI7KXI9dC0xJm4sVHMoZS5hLHQsZS5hW3JdKSx0PXI7VHMoZS5hLGUuYixudWxsKSxlLmI9ZS5iKzEmbn1mdW5jdGlvbiB6eW4oZSx0KXt2YXIgbixyO2ZvcihuPWUuYS5sZW5ndGgtMSxlLmM9ZS5jLTEmbjt0IT1lLmM7KXI9dCsxJm4sVHMoZS5hLHQsZS5hW3JdKSx0PXI7VHMoZS5hLGUuYyxudWxsKX1mdW5jdGlvbiBRN2UoZSx0LG4pe3ZhciByLGE7cmV0dXJuIEV5KHQsZS5jLmxlbmd0aCkscj1uLlBjKCksYT1yLmxlbmd0aCxhPT0wPyExOihNNGUoZS5jLHQsciksITApfWZ1bmN0aW9uIFIwdChlLHQsbil7dmFyIHIsYSxvLGY7Zm9yKGE9bixvPTAsZj1hLmxlbmd0aDtvPGY7KytvKWlmKHI9YVtvXSxlLmIuQmUodCxyLmxkKCkpKXJldHVybiByO3JldHVybiBudWxsfWZ1bmN0aW9uIE1OKGUpe3ZhciB0LG4scixhLG87Zm9yKG89MSxuPWUscj0wLGE9bi5sZW5ndGg7cjxhOysrcil0PW5bcl0sbz0zMSpvKyh0IT1udWxsP2VzKHQpOjApLG89b3wwO3JldHVybiBvfWZ1bmN0aW9uIEtyKGUpe3ZhciB0LG4scixhLG87Zm9yKHQ9e30scj1lLGE9MCxvPXIubGVuZ3RoO2E8bzsrK2Epbj1yW2FdLHRbIjoiKyhuLmYhPW51bGw/bi5mOiIiK24uZyldPW47cmV0dXJuIHR9ZnVuY3Rpb24gcXluKGUpe3ZhciB0LG47aWYoZT09bnVsbClyZXR1cm4gbnVsbDtmb3IodD0wLG49ZS5sZW5ndGg7dDxuO3QrKylpZighRGl0KGVbdF0pKXJldHVybiBlW3RdO3JldHVybiBudWxsfWZ1bmN0aW9uIERjZShlLHQpe3JldHVybiFlfHx0JiYhZS5qfHxEZShlLDEyNykmJmwoZSwxMjcpLmEuYj09MD8wOmUuamYoKX1mdW5jdGlvbiBCVihlLHQpe3JldHVybiFlfHx0JiYhZS5rfHxEZShlLDEyNykmJmwoZSwxMjcpLmEuYT09MD8wOmUua2YoKX1mdW5jdGlvbiBqMHQoZSx0KXtyZXR1cm4gbnMoZSwoZnQoKSxLaSkpJiZucyh0LEtpKT9ydShsKFEoZSxLaSksMTcpLmEsbChRKHQsS2kpLDE3KS5hKTowfWZ1bmN0aW9uICQwdChlKXt2YXIgdCxuLHI7Zm9yKHI9MCxuPW5ldyBocihkcihlLmEuS2MoKSxuZXcgaikpO2pyKG4pOyl0PWwoeHIobiksMTgpLHQuYy5pPT10LmQuaXx8KytyO3JldHVybiByfWZ1bmN0aW9uIHowdChlLHQpe3ZhciBuLHIsYTtmb3IoYT10LWUuZixyPW5ldyBHKGUuZCk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDMxNSksQjF0KG4sbi5lLG4uZithKTtlLmY9dH1mdW5jdGlvbiBHbShlLHQpe3ZhciBuLHIsYTtyPWUuWWsodCxudWxsKSxhPW51bGwsdCYmKGE9KFNrKCksbj1uZXcgUXYsbiksc0UoYSxlLnIpKSxyPSQxKGUsYSxyKSxyJiZyLm9qKCl9ZnVuY3Rpb24gcTB0KGUsdCl7dmFyIG4scixhO249ZSxhPTA7ZG97aWYobj09dClyZXR1cm4gYTtpZihyPW4uZSwhcil0aHJvdyB1ZShuZXcgWUkpO249ZW8ociksKythfXdoaWxlKCEwKX1mdW5jdGlvbiBIeW4oZSl7dmFyIHQsbixyLGE7Zm9yKHI9ZS5iLmEsbj1yLmEuZWMoKS5LYygpO24uT2IoKTspdD1sKG4uUGIoKSw1NjcpLGE9bmV3IEcydCh0LGUuZSxlLmYpLHZ0KGUuZyxhKX1mdW5jdGlvbiBWeW4oZSl7dmFyIHQ7cmV0dXJuIHQ9bmV3IHdodChlKSxRTyhlLmEsRDh0LG5ldyBJbChoZShsZShmQiwxKSxSbiwzODIsMCxbdF0pKSksdC5kJiZ2dCh0LmYsdC5kKSx0LmZ9ZnVuY3Rpb24gSDB0KGUsdCl7dmFyIG47Zm9yKG49MDtuPHQubGVuZ3RoO24rKylpZihlPT0oWG4obix0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KG4pKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBVeW4oZSx0KXtyZXR1cm4gdDxlLmxlbmd0aCYmKFhuKHQsZS5sZW5ndGgpLGUuY2hhckNvZGVBdCh0KSE9NjMpJiYoWG4odCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KHQpIT0zNSl9ZnVuY3Rpb24gVjB0KGUsdCxuLHIpe0VudCh0aGlzKSx0aGlzLmM9V2Uod2csbTIsMTAsZS5hLmMubGVuZ3RoLDAsMSksdGhpcy5lPXQsajEoZS5hLHRoaXMuYyksdGhpcy5mPW4sdGhpcy5iPXJ9ZnVuY3Rpb24gVTB0KGUpe0RKZSgpLEZxKHRoaXMpLFNIKHRoaXMpLHRoaXMuZT1lLGdidCh0aGlzLGUpLHRoaXMuZz1lPT1udWxsP3VsOnhjKGUpLHRoaXMuYT0iIix0aGlzLmI9ZSx0aGlzLmE9IiJ9ZnVuY3Rpb24gSjdlKCl7dGhpcy5hPW5ldyB3SSx0aGlzLmY9bmV3IHlYZSh0aGlzKSx0aGlzLmI9bmV3IHhYZSh0aGlzKSx0aGlzLmk9bmV3IGtYZSh0aGlzKSx0aGlzLmU9bmV3IEVYZSh0aGlzKX1mdW5jdGlvbiBHMHQoKXtKY24uY2FsbCh0aGlzLG5ldyBJNmUoQXkoMTYpKSksTWgoMixEd3QpLHRoaXMuYj0yLHRoaXMuYT1uZXcgUzVlKG51bGwsbnVsbCwwLG51bGwpLFdJKHRoaXMuYSx0aGlzLmEpfWZ1bmN0aW9uIFo3ZShlKXt0aHJvdyB2Y2UoKSx1ZShuZXcgTEplKCJVbmV4cGVjdGVkIHR5cGVvZiByZXN1bHQgJyIrZSsiJzsgcGxlYXNlIHJlcG9ydCB0aGlzIGJ1ZyB0byB0aGUgR1dUIHRlYW0iKSl9ZnVuY3Rpb24gSWNlKGUsdCxuKXtyZXR1cm4gYi5NYXRoLmFicyh0LWUpPE1HfHxiLk1hdGguYWJzKG4tZSk8TUc/ITA6dC1lPk1HP2Utbj5NRzpuLWU+TUd9ZnVuY3Rpb24gSzB0KGUsdCl7dmFyIG47Zm9yKG49MDtuPHQubGVuZ3RoO24rKylpZihlPT0oWG4obix0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KG4pKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBHeW4oZSl7dmFyIHQsbjtpZihlPT1udWxsKXJldHVybiExO2Zvcih0PTAsbj1lLmxlbmd0aDt0PG47dCsrKWlmKCFEaXQoZVt0XSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gZThlKGUsdCl7dmFyIG4scixhO3JldHVybiByPSExLG49dC5xLmQsdC5kPGUuYiYmKGE9SDllKHQucSxlLmIpLHQucS5kPmEmJihFZ3QodC5xLGEpLHI9biE9dC5xLmQpKSxyfWZ1bmN0aW9uIFcwdChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEU7cmV0dXJuIHc9dC5pLEU9dC5qLHI9ZS5mLGE9ci5pLG89ci5qLGY9dy1hLGc9RS1vLG49Yi5NYXRoLnNxcnQoZipmK2cqZyksbn1mdW5jdGlvbiB0OGUoZSx0KXt2YXIgbixyO3JldHVybiByPVhWKGUpLHJ8fChuPShrbGUoKSxQMnQodCkpLHI9bmV3IGtRZShuKSxxcihyLkVsKCksZSkpLHJ9ZnVuY3Rpb24gRE4oZSx0KXt2YXIgbixyO3JldHVybiBuPWwoZS5jLkJjKHQpLDE2KSxuPyhyPWUuaGMoKSxyLkdjKG4pLGUuZC09bi5nYygpLG4uJGIoKSxlLm1jKHIpKTplLmpjKCl9ZnVuY3Rpb24gS3luKGUsdCl7dmFyIG4scjtmb3Iocj1KbChlLmQsMSkhPTAsbj0hMDtuOyluPSExLG49dC5jLm1nKHQuZSxyKSxuPW58Y1AoZSx0LHIsITEpLHI9IXI7dzdlKGUpfWZ1bmN0aW9uIFkwdChlLHQsbixyKXt2YXIgYSxvO2UuYT10LG89cj8wOjEsZS5mPShhPW5ldyBjcHQoZS5jLGUuYSxuLG8pLG5ldyAkYnQobixlLmEsYSxlLmUsZS5iLGUuYz09KEl3KCksb00pKSl9ZnVuY3Rpb24gRlYoZSl7dmFyIHQ7cmV0dXJuIG1yKGUuYSE9ZS5iKSx0PWUuZC5hW2UuYV0sRXJ0KGUuYj09ZS5kLmMmJnQhPW51bGwpLGUuYz1lLmEsZS5hPWUuYSsxJmUuZC5hLmxlbmd0aC0xLHR9ZnVuY3Rpb24gWDB0KGUpe3ZhciB0O2lmKGUuYyE9MClyZXR1cm4gZS5jO2Zvcih0PTA7dDxlLmEubGVuZ3RoO3QrKyllLmM9ZS5jKjMzKyhlLmFbdF0mLTEpO3JldHVybiBlLmM9ZS5jKmUuZSxlLmN9ZnVuY3Rpb24gV3luKGUpe3ZhciB0O2lmKCEoZS5jLmM8MD9lLmE+PWUuYy5iOmUuYTw9ZS5jLmIpKXRocm93IHVlKG5ldyBfYyk7cmV0dXJuIHQ9ZS5hLGUuYSs9ZS5jLmMsKytlLmIscHQodCl9ZnVuY3Rpb24gT2NlKGUpe3ZhciB0O3JldHVybiB0PW5ldyBieWUoZS5hKSxwYyh0LGUpLHJ0KHQsKGZ0KCksemkpLGUpLHQuby5hPWUuZyx0Lm8uYj1lLmYsdC5uLmE9ZS5pLHQubi5iPWUuaix0fWZ1bmN0aW9uIE5jZShlKXtyZXR1cm4oQ3QoKSxobCkuSGMoZS5qKT96ZShHZShRKGUsKGZ0KCkselQpKSkpOkljKGhlKGxlKEVhLDEpLGR0LDgsMCxbZS5pLm4sZS5uLGUuYV0pKS5ifWZ1bmN0aW9uIFl5bihlKXt2YXIgdDtyZXR1cm4gdD1PcShURXQpLGwoUShlLChmdCgpLEx1KSksMjEpLkhjKChIbygpLCRUKSkmJmZpKHQsKHVvKCksYnUpLCh2bygpLFJLKSksdH1mdW5jdGlvbiBYeW4oZSl7dmFyIHQsbixyLGE7Zm9yKGE9bmV3IEtzLHI9bmV3IEcoZSk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDI3KSx0PW1TbihuKSxLYShhLHQpO3JldHVybiBhfWZ1bmN0aW9uIFF5bihlKXt2YXIgdCxuO2ZvcihuPW5ldyBHKGUucik7bi5hPG4uYy5jLmxlbmd0aDspaWYodD1sKHJlKG4pLDEwKSxlLm5bdC5wXTw9MClyZXR1cm4gdDtyZXR1cm4gbnVsbH1mdW5jdGlvbiBKeW4oZSx0LG4pe3ZhciByLGE7Zm9yKGE9dC5hLmEuZWMoKS5LYygpO2EuT2IoKTspaWYocj1sKGEuUGIoKSw2MCksR2F0KGUscixuKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBaeW4oZSx0LG4scil7dmFyIGEsbztmb3Iobz1lLktjKCk7by5PYigpOylhPWwoby5QYigpLDcyKSxhLm4uYT10LmErKHIuYS1hLm8uYSkvMixhLm4uYj10LmIsdC5iKz1hLm8uYitufWZ1bmN0aW9uIGU0bihlLHQsbil7dmFyIHI7cj1uZXcgYzJ0KGUsdCkseG4oZS5yLHQuYWcoKSxyKSxuJiYhV18oZS51KSYmKHIuYz1uZXcgdW90KGUuZCksVnUodC5SZigpLG5ldyBEaWUocikpKX1mdW5jdGlvbiBpdShlLHQpe3ZhciBuO3JldHVybiB3YyhlKSYmd2ModCkmJihuPWUtdCwhaXNOYU4obikpP246YnhlKHdjKGUpP01mKGUpOmUsd2ModCk/TWYodCk6dCl9ZnVuY3Rpb24gbjhlKGUsdCl7dmFyIG4scixhO2ZvcihhPTEsbj1lLHI9dD49MD90Oi10O3I+MDspciUyPT0wPyhuKj1uLHI9ci8yfDApOihhKj1uLHItPTEpO3JldHVybiB0PDA/MS9hOmF9ZnVuY3Rpb24gdDRuKGUsdCl7dmFyIG4scixhO2ZvcihhPTEsbj1lLHI9dD49MD90Oi10O3I+MDspciUyPT0wPyhuKj1uLHI9ci8yfDApOihhKj1uLHItPTEpO3JldHVybiB0PDA/MS9hOmF9ZnVuY3Rpb24geWIoZSx0KXt2YXIgbixyLGEsbztyZXR1cm4gbz0oYT1lP1hWKGUpOm51bGwsRHB0KChyPXQsYSYmYS5HbCgpLHIpKSksbz09dCYmKG49WFYoZSksbiYmbi5HbCgpKSxvfWZ1bmN0aW9uIFEwdChlLHQsbil7dmFyIHIsYTtyZXR1cm4gYT1lLmYsZS5mPXQsZS5EYiY0JiYhKGUuRGImMSkmJihyPW5ldyBfYShlLDEsMCxhLHQpLG4/bi5uaihyKTpuPXIpLG59ZnVuY3Rpb24gSjB0KGUsdCxuKXt2YXIgcixhO3JldHVybiBhPWUuYixlLmI9dCxlLkRiJjQmJiEoZS5EYiYxKSYmKHI9bmV3IF9hKGUsMSwzLGEsdCksbj9uLm5qKHIpOm49ciksbn1mdW5jdGlvbiByOGUoZSx0LG4pe3ZhciByLGE7cmV0dXJuIGE9ZS5hLGUuYT10LGUuRGImNCYmIShlLkRiJjEpJiYocj1uZXcgX2EoZSwxLDEsYSx0KSxuP24ubmoocik6bj1yKSxufWZ1bmN0aW9uIFowdChlKXt2YXIgdCxuO2lmKGUhPW51bGwpZm9yKG49MDtuPGUubGVuZ3RoOysrbil0PWVbbl0sdCYmKGwodC5nLDM3OSksdC5pKX1mdW5jdGlvbiBuNG4oZSx0LG4scixhLG8sZixnKXt2YXIgdztmb3Iodz1uO288Zjspdz49cnx8dDxuJiZnLk5lKGVbdF0sZVt3XSk8PTA/VHMoYSxvKyssZVt0KytdKTpUcyhhLG8rKyxlW3crK10pfWZ1bmN0aW9uIHI0bihlLHQsbixyLGEpe3Q9PTB8fHI9PTB8fCh0PT0xP2Fbcl09WThlKGEsbixyLGVbMF0pOnI9PTE/YVt0XT1ZOGUoYSxlLHQsblswXSk6Q0VuKGUsbixhLHQscikpfWZ1bmN0aW9uIGk0bihlLHQsbil7dmFyIHIsYSxvLGY7Zm9yKHI9bi9lLmdjKCksYT0wLGY9ZS5LYygpO2YuT2IoKTspbz1sKGYuUGIoKSwxODYpLHowdChvLG8uZityKmEpLHY4bihvLHQsciksKythfWZ1bmN0aW9uIHM0bihlKXt2YXIgdCxuLHI7Zm9yKHI9MCxuPW5ldyBHKGUuYSk7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDE3Mikscj1iLk1hdGgubWF4KHIsdC5nKTtyZXR1cm4gcn1mdW5jdGlvbiBhNG4oZSl7dmFyIHQsbixyO2ZvcihyPW5ldyBHKGUuYik7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDIxOSksdD1uLmMua2coKT9uLmY6bi5hLHQmJklMbih0LG4uail9ZnVuY3Rpb24gRUEoKXtFQT1VLHBkZT1uZXcgVHNlKCJEVU1NWV9OT0RFX09WRVIiLDApLGJEZT1uZXcgVHNlKCJEVU1NWV9OT0RFX1VOREVSIiwxKSxTVz1uZXcgVHNlKCJFUVVBTCIsMil9ZnVuY3Rpb24gZHgoKXtkeD1VLHRQZT1uZXcgSHNlKCJQQVJBTExFTF9OT0RFIiwwKSxMND1uZXcgSHNlKCJISUVSQVJDSElDQUxfTk9ERSIsMSksZFk9bmV3IEhzZSgiUk9PVF9OT0RFIiwyKX1mdW5jdGlvbiBycCgpe3JwPVUsb1k9bmV3IHFzZSgiSU5IRVJJVCIsMCksQTI9bmV3IHFzZSgiSU5DTFVERV9DSElMRFJFTiIsMSksRE09bmV3IHFzZSgiU0VQQVJBVEVfQ0hJTERSRU4iLDIpfWZ1bmN0aW9uIGk4ZShlLHQpe3N3aXRjaCh0KXtjYXNlIDE6IWUubiYmKGUubj1uZXcgbnQoZWMsZSwxLDcpKSwkcihlLm4pO3JldHVybjtjYXNlIDI6ZkUoZSxudWxsKTtyZXR1cm59TzdlKGUsdCl9ZnVuY3Rpb24gZTF0KGUpe3N3aXRjaChlLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IEFuZTtjYXNlIDE6cmV0dXJuIG5ldyBjJDtjYXNlIDI6cmV0dXJuIG5ldyBMbmU7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gYTIoZSl7c3dpdGNoKHdkKCksZS5jKXtjYXNlIDA6cmV0dXJuIEthZSgpLFZTZTtjYXNlIDE6cmV0dXJuIG5ldyBPOChScHQobmV3IFA4KGUpKSk7ZGVmYXVsdDpyZXR1cm4gbmV3IFNKZShlKX19ZnVuY3Rpb24gdDF0KGUpe3N3aXRjaCh3ZCgpLGUuZ2MoKSl7Y2FzZSAwOnJldHVybiBLYWUoKSxWU2U7Y2FzZSAxOnJldHVybiBuZXcgTzgoZS5LYygpLlBiKCkpO2RlZmF1bHQ6cmV0dXJuIG5ldyBrM2UoZSl9fWZ1bmN0aW9uIFJWKGUpe3ZhciB0O3N3aXRjaChlLmdjKCkpe2Nhc2UgMDpyZXR1cm4geDBlO2Nhc2UgMTpyZXR1cm4gbmV3IFNhZShYcihlLlhiKDApKSk7ZGVmYXVsdDpyZXR1cm4gdD1lLG5ldyBvb2UodCl9fWZ1bmN0aW9uIHB0KGUpe3ZhciB0LG47cmV0dXJuIGU+LTEyOSYmZTwxMjg/KEZpdCgpLHQ9ZSsxMjgsbj10X2VbdF0sIW4mJihuPXRfZVt0XT1uZXcgQ3IoZSkpLG4pOm5ldyBDcihlKX1mdW5jdGlvbiBfRShlKXt2YXIgdCxuO3JldHVybiBlPi0xMjkmJmU8MTI4Pyhlc3QoKSx0PWUrMTI4LG49c19lW3RdLCFuJiYobj1zX2VbdF09bmV3IFduKGUpKSxuKTpuZXcgV24oZSl9ZnVuY3Rpb24gbjF0KGUsdCl7dmFyIG47ZS5hLmMubGVuZ3RoPjAmJihuPWwoanQoZS5hLGUuYS5jLmxlbmd0aC0xKSw1NzkpLEc3ZShuLHQpKXx8dnQoZS5hLG5ldyB5dXQodCkpfWZ1bmN0aW9uIG80bihlKXt1MCgpO3ZhciB0LG47dD1lLmQuYy1lLmUuYyxuPWwoZS5nLDE1NCksVnUobi5iLG5ldyBwWWUodCkpLFZ1KG4uYyxuZXcgYlllKHQpKSx0byhuLmksbmV3IG1ZZSh0KSl9ZnVuY3Rpb24gcjF0KGUpe3ZhciB0O3JldHVybiB0PW5ldyB0Yix0LmErPSJWZXJ0aWNhbFNlZ21lbnQgIix3dSh0LGUuZSksdC5hKz0iICIsaGkodCxFeWUobmV3IFppZSxuZXcgRyhlLmspKSksdC5hfWZ1bmN0aW9uIFBjZShlLHQpe3ZhciBuLHIsYTtmb3Iobj0wLGE9T2MoZSx0KS5LYygpO2EuT2IoKTspcj1sKGEuUGIoKSwxMiksbis9UShyLChmdCgpLGpsKSkhPW51bGw/MTowO3JldHVybiBufWZ1bmN0aW9uIGU2KGUsdCxuKXt2YXIgcixhLG87Zm9yKHI9MCxvPVJyKGUsMCk7by5iIT1vLmQuYyYmKGE9emUoR2UoQnIobykpKSwhKGE+bikpOylhPj10JiYrK3I7cmV0dXJuIHJ9ZnVuY3Rpb24gaTF0KGUsdCl7WHIoZSk7dHJ5e3JldHVybiBlLl9iKHQpfWNhdGNoKG4pe2lmKG49YnMobiksRGUobiwyMTIpfHxEZShuLDE2OSkpcmV0dXJuITE7dGhyb3cgdWUobil9fWZ1bmN0aW9uIHM4ZShlLHQpe1hyKGUpO3RyeXtyZXR1cm4gZS5IYyh0KX1jYXRjaChuKXtpZihuPWJzKG4pLERlKG4sMjEyKXx8RGUobiwxNjkpKXJldHVybiExO3Rocm93IHVlKG4pfX1mdW5jdGlvbiBjNG4oZSx0KXtYcihlKTt0cnl7cmV0dXJuIGUuTWModCl9Y2F0Y2gobil7aWYobj1icyhuKSxEZShuLDIxMil8fERlKG4sMTY5KSlyZXR1cm4hMTt0aHJvdyB1ZShuKX19ZnVuY3Rpb24gT3koZSx0KXtYcihlKTt0cnl7cmV0dXJuIGUueGModCl9Y2F0Y2gobil7aWYobj1icyhuKSxEZShuLDIxMil8fERlKG4sMTY5KSlyZXR1cm4gbnVsbDt0aHJvdyB1ZShuKX19ZnVuY3Rpb24gdTRuKGUsdCl7WHIoZSk7dHJ5e3JldHVybiBlLkJjKHQpfWNhdGNoKG4pe2lmKG49YnMobiksRGUobiwyMTIpfHxEZShuLDE2OSkpcmV0dXJuIG51bGw7dGhyb3cgdWUobil9fWZ1bmN0aW9uIFRBKGUsdCl7c3dpdGNoKHQuZyl7Y2FzZSAyOmNhc2UgMTpyZXR1cm4gT2MoZSx0KTtjYXNlIDM6Y2FzZSA0OnJldHVybiBsZihPYyhlLHQpKX1yZXR1cm4gQ24oKSxDbigpLF9vfWZ1bmN0aW9uIENBKGUpe3ZhciB0O3JldHVybiBlLkRiJjY0P2cwKGUpOih0PW5ldyBBZihnMChlKSksdC5hKz0iIChuYW1lOiAiLFhvKHQsZS56YiksdC5hKz0iKSIsdC5hKX1mdW5jdGlvbiBsNG4oZSl7dmFyIHQ7cmV0dXJuIHQ9bChCMShlLmMuYywiIiksMjMzKSx0fHwodD1uZXcgbngoQ2soVGsobmV3IG55LCIiKSwiT3RoZXIiKSksaDIoZS5jLmMsIiIsdCkpLHR9ZnVuY3Rpb24gYThlKGUsdCxuKXt2YXIgcixhO3JldHVybiBhPWUuc2IsZS5zYj10LGUuRGImNCYmIShlLkRiJjEpJiYocj1uZXcgX2EoZSwxLDQsYSx0KSxuP24ubmoocik6bj1yKSxufWZ1bmN0aW9uIG84ZShlLHQsbil7dmFyIHIsYTtyZXR1cm4gYT1lLnIsZS5yPXQsZS5EYiY0JiYhKGUuRGImMSkmJihyPW5ldyBfYShlLDEsOCxhLGUuciksbj9uLm5qKHIpOm49ciksbn1mdW5jdGlvbiBoNG4oZSx0LG4pe3ZhciByLGE7cmV0dXJuIHI9bmV3IFpnKGUuZSw0LDEzLChhPXQuYyxhfHwoVG4oKSx0ZCkpLG51bGwsZjIoZSx0KSwhMSksbj9uLm5qKHIpOm49cixufWZ1bmN0aW9uIGY0bihlLHQsbil7dmFyIHIsYTtyZXR1cm4gcj1uZXcgWmcoZS5lLDMsMTMsbnVsbCwoYT10LmMsYXx8KFRuKCksdGQpKSxmMihlLHQpLCExKSxuP24ubmoocik6bj1yLG59ZnVuY3Rpb24gbzIoZSx0KXt2YXIgbixyO3JldHVybiBuPWwodCw2OTEpLHI9bi5lbCgpLCFyJiZuLmZsKHI9RGUodCw5MCk/bmV3IEJ0dChlLGwodCwyOSkpOm5ldyBzY3QoZSxsKHQsMTU2KSkpLHJ9ZnVuY3Rpb24gSU4oZSx0LG4pe3ZhciByO2UuX2koZS5pKzEpLHI9ZS5aaSh0LG4pLHQhPWUuaSYmcHUoZS5nLHQsZS5nLHQrMSxlLmktdCksVHMoZS5nLHQsciksKytlLmksZS5NaSh0LG4pLGUuTmkoKX1mdW5jdGlvbiBkNG4oZSx0KXt2YXIgbjtyZXR1cm4gdC5hJiYobj10LmEuYS5sZW5ndGgsZS5hP2hpKGUuYSxlLmIpOmUuYT1uZXcgVGgoZS5kKSxmY3QoZS5hLHQuYSx0LmQubGVuZ3RoLG4pKSxlfWZ1bmN0aW9uIGc0bihlLHQpe3ZhciBuO2UuYz10LGUuYT13NW4odCksZS5hPDU0JiYoZS5mPShuPXQuZD4xP2xjdCh0LmFbMF0sdC5hWzFdKTpsY3QodC5hWzBdLDApLEZtKHQuZT4wP246cjIobikpKSl9ZnVuY3Rpb24gT04oZSx0KXt2YXIgbjtyZXR1cm4gbj1uZXcgb24sZS5hLkJkKG4pPyhPaygpLG5ldyBLaWUobnIoVWx0KGUsbi5hLHQpKSkpOihmYihlKSxPaygpLE9rKCksYl9lKX1mdW5jdGlvbiBzMXQoZSx0KXt2YXIgbjtlLmMubGVuZ3RoIT0wJiYobj1sKGoxKGUsV2Uod2csbTIsMTAsZS5jLmxlbmd0aCwwLDEpKSwxOTkpLGN5ZShuLG5ldyBVOSksSnB0KG4sdCkpfWZ1bmN0aW9uIGExdChlLHQpe3ZhciBuO2UuYy5sZW5ndGghPTAmJihuPWwoajEoZSxXZSh3ZyxtMiwxMCxlLmMubGVuZ3RoLDAsMSkpLDE5OSksY3llKG4sbmV3IFdkKSxKcHQobix0KSl9ZnVuY3Rpb24gUGkoZSx0KXtyZXR1cm4gSWEoZSk/dm4oZSx0KTpmeShlKT9laXQoZSx0KTpoeShlKT8obnIoZSkscWUoZSk9PT1xZSh0KSk6dDVlKGUpP2UuRmIodCk6VzRlKGUpP0p0dChlLHQpOlc1ZShlLHQpfWZ1bmN0aW9uIGNmKGUsdCxuKXtpZih0PDApZDllKGUsbik7ZWxzZXtpZighbi5yaygpKXRocm93IHVlKG5ldyBZbihPYituLnhlKCkra0wpKTtsKG4sNjkpLndrKCkuRWsoZSxlLmhpKCksdCl9fWZ1bmN0aW9uIG8xdChlLHQsbil7aWYoZTwwfHx0Pm4pdGhyb3cgdWUobmV3IHRjKGVHK2UrZkVlK3QrIiwgc2l6ZTogIituKSk7aWYoZT50KXRocm93IHVlKG5ldyBZbihlRytlK1F3dCt0KSl9ZnVuY3Rpb24gYzF0KGUpe3ZhciB0O3JldHVybiBlLkRiJjY0P2cwKGUpOih0PW5ldyBBZihnMChlKSksdC5hKz0iIChzb3VyY2U6ICIsWG8odCxlLmQpLHQuYSs9IikiLHQuYSl9ZnVuY3Rpb24gdTF0KGUpe3JldHVybiBlPj02NSYmZTw9NzA/ZS02NSsxMDplPj05NyYmZTw9MTAyP2UtOTcrMTA6ZT49NDgmJmU8PTU3P2UtNDg6MH1mdW5jdGlvbiBwNG4oZSl7WVUoKTt2YXIgdCxuLHIsYTtmb3Iobj1ldWUoKSxyPTAsYT1uLmxlbmd0aDtyPGE7KytyKWlmKHQ9bltyXSxnYyh0LmEsZSwwKSE9LTEpcmV0dXJuIHQ7cmV0dXJuIEgwZX1mdW5jdGlvbiBiNG4oZSx0KXt2YXIgbixyLGEsbztpZih0LmVqKGUuYSksbz1sKEtuKGUuYSw4KSwyMDM1KSxvIT1udWxsKWZvcihuPW8scj0wLGE9bi5sZW5ndGg7cjxhOysrciludWxsLlVtKCl9ZnVuY3Rpb24gYzIoZSx0KXt2YXIgbjtuPShlLkJiJjI1NikhPTAsdD9lLkJifD0yNTY6ZS5CYiY9LTI1NyxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgaDAoZSwxLDIsbix0KSl9ZnVuY3Rpb24gYzhlKGUsdCl7dmFyIG47bj0oZS5CYiYyNTYpIT0wLHQ/ZS5CYnw9MjU2OmUuQmImPS0yNTcsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IGgwKGUsMSw4LG4sdCkpfWZ1bmN0aW9uIGpWKGUsdCl7dmFyIG47bj0oZS5CYiYyNTYpIT0wLHQ/ZS5CYnw9MjU2OmUuQmImPS0yNTcsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IGgwKGUsMSw4LG4sdCkpfWZ1bmN0aW9uIHUyKGUsdCl7dmFyIG47bj0oZS5CYiY1MTIpIT0wLHQ/ZS5CYnw9NTEyOmUuQmImPS01MTMsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IGgwKGUsMSwzLG4sdCkpfWZ1bmN0aW9uIHU4ZShlLHQpe3ZhciBuO249KGUuQmImNTEyKSE9MCx0P2UuQmJ8PTUxMjplLkJiJj0tNTEzLGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBoMChlLDEsOSxuLHQpKX1mdW5jdGlvbiBtNG4oZSx0LG4pe3ZhciByLGE7cmV0dXJuIGE9ZS5hLGUuYT10LGUuRGImNCYmIShlLkRiJjEpJiYocj1uZXcgX2EoZSwxLDUsYSxlLmEpLG4/TXhlKG4scik6bj1yKSxufWZ1bmN0aW9uIFNBKGUsdCl7dmFyIG47cmV0dXJuIGUuYj09LTEmJmUuYSYmKG49ZS5hLnBrKCksZS5iPW4/ZS5jLkhoKGUuYS5MaigpLG4pOm1zKGUuYy5EaCgpLGUuYSkpLGUuYy55aChlLmIsdCl9ZnVuY3Rpb24gbDF0KGUsdCl7dmFyIG4scjtmb3Iocj1uZXcgb3IoZSk7ci5lIT1yLmkuZ2MoKTspaWYobj1sKGdyKHIpLDI5KSxxZSh0KT09PXFlKG4pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGw4ZShlKXt2YXIgdCxuO3JldHVybiB0PWUuayx0PT0oWm4oKSxVcyk/KG49bChRKGUsKGZ0KCksV2MpKSw2NCksbj09KEN0KCksUW4pfHxuPT1Ecik6ITF9ZnVuY3Rpb24gaDF0KGUpe3ZhciB0O3JldHVybiB0PWU2ZShlKSxjdyh0LmEsMCk/KGN5KCksY3koKSxJMGUpOihjeSgpLG5ldyBzYWUoaHNlKHQuYSwwKT9UNmUodCkvRm0odC5hKTowKSl9ZnVuY3Rpb24gTk4oZSx0KXt0aGlzLmU9dCx0aGlzLmE9UWZ0KGUpLHRoaXMuYTw1ND90aGlzLmY9Rm0oZSk6dGhpcy5jPShDZCgpLGl1KGUsMCk+PTA/a2IoZSk6Sl8oa2IocjIoZSkpKSl9ZnVuY3Rpb24gZjF0KGUsdCxuLHIsYSxvKXt0aGlzLmU9bmV3IGJ0LHRoaXMuZj0ocW8oKSxzTSksdnQodGhpcy5lLGUpLHRoaXMuZD10LHRoaXMuYT1uLHRoaXMuYj1yLHRoaXMuZj1hLHRoaXMuYz1vfWZ1bmN0aW9uIHY0bihlLHQsbil7ZS5uPUxtKG5tLFtkdCxhaGVdLFszNzYsMjhdLDE0LFtuLHVhKGIuTWF0aC5jZWlsKHQvMzIpKV0sMiksZS5vPXQsZS5wPW4sZS5qPXQtMT4+MSxlLms9bi0xPj4xfWZ1bmN0aW9uIGQxdChlKXtyZXR1cm4gZS09ZT4+MSYxNDMxNjU1NzY1LGU9KGU+PjImODU4OTkzNDU5KSsoZSY4NTg5OTM0NTkpLGU9KGU+PjQpK2UmMjUyNjQ1MTM1LGUrPWU+PjgsZSs9ZT4+MTYsZSY2M31mdW5jdGlvbiBnMXQoZSx0KXt2YXIgbixyO2ZvcihyPW5ldyBvcihlKTtyLmUhPXIuaS5nYygpOylpZihuPWwoZ3IociksMTQyKSxxZSh0KT09PXFlKG4pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHc0bihlLHQsbil7dmFyIHIsYSxvO3JldHVybiBvPShhPVZFKGUuYix0KSxhKSxvJiYocj1sKFZVKGxOKGUsbyksIiIpLDI5KSxyKT9QOWUoZSxyLHQsbik6bnVsbH1mdW5jdGlvbiBCY2UoZSx0LG4pe3ZhciByLGEsbztyZXR1cm4gbz0oYT1WRShlLmIsdCksYSksbyYmKHI9bChWVShsTihlLG8pLCIiKSwyOSkscik/QjllKGUscix0LG4pOm51bGx9ZnVuY3Rpb24geTRuKGUsdCl7dmFyIG47aWYobj1YNShlLmksdCksbj09bnVsbCl0aHJvdyB1ZShuZXcgZGQoIk5vZGUgZGlkIG5vdCBleGlzdCBpbiBpbnB1dC4iKSk7cmV0dXJuIFM3ZSh0LG4pLG51bGx9ZnVuY3Rpb24geDRuKGUsdCl7dmFyIG47aWYobj1vUChlLHQpLERlKG4sMzMxKSlyZXR1cm4gbChuLDM1KTt0aHJvdyB1ZShuZXcgWW4oT2IrdCsiJyBpcyBub3QgYSB2YWxpZCBhdHRyaWJ1dGUiKSl9ZnVuY3Rpb24gX0EoZSx0LG4pe3ZhciByO2lmKHI9ZS5nYygpLHQ+cil0aHJvdyB1ZShuZXcgbXkodCxyKSk7aWYoZS5TaSgpJiZlLkhjKG4pKXRocm93IHVlKG5ldyBZbihXUCkpO2UuR2kodCxuKX1mdW5jdGlvbiBrNG4oZSx0KXt0LlVnKCJTb3J0IGVuZCBsYWJlbHMiLDEpLElzKEZpKERjKG5ldyBibihudWxsLG5ldyBrbihlLmIsMTYpKSxuZXcgaGopLG5ldyBKNyksbmV3IGFaKSx0LlZnKCl9ZnVuY3Rpb24gSnMoKXtKcz1VLEoxPW5ldyBtTyhjTCwwKSx2Yz1uZXcgbU8oRHgsMSksdWM9bmV3IG1PKE14LDIpLFExPW5ldyBtTyh3aGUsMyksd2Y9bmV3IG1PKCJVUCIsNCl9ZnVuY3Rpb24gUE4oKXtQTj1VLFdXPW5ldyAkc2UoIlAxX1NUUlVDVFVSRSIsMCksWVc9bmV3ICRzZSgiUDJfUFJPQ0VTU0lOR19PUkRFUiIsMSksWFc9bmV3ICRzZSgiUDNfRVhFQ1VUSU9OIiwyKX1mdW5jdGlvbiBwMXQoKXtwMXQ9VSxqVHQ9VGQoVGQodl8oVGQoVGQodl8oZmkobmV3IFhzLCh3eCgpLGxNKSwoV0EoKSxEZGUpKSxoTSksWURlKSxRRGUpLGZNKSxVRGUpLEpEZSl9ZnVuY3Rpb24gRTRuKGUpe3N3aXRjaChsKFEoZSwoZnQoKSxodikpLDMxMSkuZyl7Y2FzZSAxOnJ0KGUsaHYsKGVwKCksVXgpKTticmVhaztjYXNlIDI6cnQoZSxodiwoZXAoKSxGNikpfX1mdW5jdGlvbiBUNG4oZSl7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4gbmV3IG5KZTtjYXNlIDE6cmV0dXJuIG5ldyBlSmU7Y2FzZSAyOnJldHVybiBuZXcgdEplO2RlZmF1bHQ6dGhyb3cgdWUobmV3IFlJKX19ZnVuY3Rpb24gYjF0KGUpe3N3aXRjaChlLmcpe2Nhc2UgMjpyZXR1cm4gdmM7Y2FzZSAxOnJldHVybiB1YztjYXNlIDQ6cmV0dXJuIFExO2Nhc2UgMzpyZXR1cm4gd2Y7ZGVmYXVsdDpyZXR1cm4gSjF9fWZ1bmN0aW9uIGg4ZShlLHQpe3N3aXRjaChlLmIuZyl7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gdDtjYXNlIDI6Y2FzZSAzOnJldHVybiBuZXcgZWYodC5kLDAsdC5hLHQuYik7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gZjhlKGUpe3N3aXRjaChlLmcpe2Nhc2UgMTpyZXR1cm4gZXI7Y2FzZSAyOnJldHVybiBRbjtjYXNlIDM6cmV0dXJuIGFyO2Nhc2UgNDpyZXR1cm4gRHI7ZGVmYXVsdDpyZXR1cm4gUGN9fWZ1bmN0aW9uIEJOKGUpe3N3aXRjaChlLmcpe2Nhc2UgMTpyZXR1cm4gRHI7Y2FzZSAyOnJldHVybiBlcjtjYXNlIDM6cmV0dXJuIFFuO2Nhc2UgNDpyZXR1cm4gYXI7ZGVmYXVsdDpyZXR1cm4gUGN9fWZ1bmN0aW9uICRWKGUpe3N3aXRjaChlLmcpe2Nhc2UgMTpyZXR1cm4gYXI7Y2FzZSAyOnJldHVybiBEcjtjYXNlIDM6cmV0dXJuIGVyO2Nhc2UgNDpyZXR1cm4gUW47ZGVmYXVsdDpyZXR1cm4gUGN9fWZ1bmN0aW9uIGQ4ZShlLHQsbixyKXtzd2l0Y2godCl7Y2FzZSAxOnJldHVybiFlLm4mJihlLm49bmV3IG50KGVjLGUsMSw3KSksZS5uO2Nhc2UgMjpyZXR1cm4gZS5rfXJldHVybiBzeGUoZSx0LG4scil9ZnVuY3Rpb24gQUEoZSx0LG4pe3ZhciByLGE7cmV0dXJuIGUuUGooKT8oYT1lLlFqKCkscj1IdWUoZSx0LG4pLGUuSmooZS5Jaig3LHB0KG4pLHIsdCxhKSkscik6SHVlKGUsdCxuKX1mdW5jdGlvbiBGY2UoZSx0KXt2YXIgbixyLGE7ZS5kPT1udWxsPygrK2UuZSwtLWUuZik6KGE9dC5sZCgpLG49dC5CaSgpLHI9KG4mSWkpJWUuZC5sZW5ndGgsdXZuKGUscixqMnQoZSxyLG4sYSkpKX1mdW5jdGlvbiBBRShlLHQpe3ZhciBuO249KGUuQmImbTApIT0wLHQ/ZS5CYnw9bTA6ZS5CYiY9LTEwMjUsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IGgwKGUsMSwxMCxuLHQpKX1mdW5jdGlvbiBMRShlLHQpe3ZhciBuO249KGUuQmImWHkpIT0wLHQ/ZS5CYnw9WHk6ZS5CYiY9LTQwOTcsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IGgwKGUsMSwxMixuLHQpKX1mdW5jdGlvbiBNRShlLHQpe3ZhciBuO249KGUuQmImU2wpIT0wLHQ/ZS5CYnw9U2w6ZS5CYiY9LTgxOTMsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IGgwKGUsMSwxNSxuLHQpKX1mdW5jdGlvbiBERShlLHQpe3ZhciBuO249KGUuQmImcjQpIT0wLHQ/ZS5CYnw9cjQ6ZS5CYiY9LTIwNDksZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IGgwKGUsMSwxMSxuLHQpKX1mdW5jdGlvbiBDNG4oZSl7dmFyIHQ7ZS5nJiYodD1lLmMua2coKT9lLmY6ZS5hLFk5ZSh0LmEsZS5vLCEwKSxZOWUodC5hLGUubywhMSkscnQoZS5vLChOdCgpLE1zKSwoUmEoKSxUdikpKX1mdW5jdGlvbiBTNG4oZSl7dmFyIHQ7aWYoIWUuYSl0aHJvdyB1ZShuZXcgbmMoIkNhbm5vdCBvZmZzZXQgYW4gdW5hc3NpZ25lZCBjdXQuIikpO3Q9ZS5jLWUuYixlLmIrPXQsemF0KGUsdCksJGF0KGUsdCl9ZnVuY3Rpb24gXzRuKGUsdCl7dmFyIG47aWYobj1jcihlLmssdCksbj09bnVsbCl0aHJvdyB1ZShuZXcgZGQoIlBvcnQgZGlkIG5vdCBleGlzdCBpbiBpbnB1dC4iKSk7cmV0dXJuIFM3ZSh0LG4pLG51bGx9ZnVuY3Rpb24gQTRuKGUpe3ZhciB0LG47Zm9yKG49QjJ0KEFoKGUpKS5LYygpO24uT2IoKTspaWYodD1laShuLlBiKCkpLFlBKGUsdCkpcmV0dXJuIExtbigobWV0KCksUl90KSx0KTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBtMXQoZSl7dmFyIHQsbjtmb3Iobj1lLnAuYS5lYygpLktjKCk7bi5PYigpOylpZih0PWwobi5QYigpLDIxOCksdC5mJiZlLmJbdC5jXTwtMWUtMTApcmV0dXJuIHQ7cmV0dXJuIG51bGx9ZnVuY3Rpb24gTDRuKGUpe3ZhciB0LG47Zm9yKG49aGIobmV3IHRiLDkxKSx0PSEwO2UuT2IoKTspdHx8KG4uYSs9Q28pLHQ9ITEsd3UobixlLlBiKCkpO3JldHVybihuLmErPSJdIixuKS5hfWZ1bmN0aW9uIE00bihlKXt2YXIgdCxuLHI7Zm9yKHQ9bmV3IGJ0LHI9bmV3IEcoZS5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksNjAyKSxyYSh0LGwobi5DZigpLDE2KSk7cmV0dXJuIHR9ZnVuY3Rpb24gUmNlKGUsdCl7dmFyIG4scjtmb3Iocj1uZXcgRyh0KTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksNDIpLGFsKGUuYi5iLG4uYiksT3BuKGwobi5hLDE5NCksbChuLmIsODYpKX1mdW5jdGlvbiBENG4oZSx0KXt2YXIgbjtyZXR1cm4gbj1ZaShlLmIuYyx0LmIuYyksbiE9MHx8KG49WWkoZS5hLmEsdC5hLmEpLG4hPTApP246WWkoZS5hLmIsdC5hLmIpfWZ1bmN0aW9uIFlpKGUsdCl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPT10P2U9PTA/WWkoMS9lLDEvdCk6MDppc05hTihlKT9pc05hTih0KT8wOjE6LTF9ZnVuY3Rpb24gSTRuKGUpe3ZhciB0O3JldHVybiB0PWUuYVtlLmMtMSZlLmEubGVuZ3RoLTFdLHQ9PW51bGw/bnVsbDooZS5jPWUuYy0xJmUuYS5sZW5ndGgtMSxUcyhlLmEsZS5jLG51bGwpLHQpfWZ1bmN0aW9uIE80bihlKXt2YXIgdCxuLHI7Zm9yKHI9MCxuPWUubGVuZ3RoLHQ9MDt0PG47dCsrKWVbdF09PTMyfHxlW3RdPT0xM3x8ZVt0XT09MTB8fGVbdF09PTl8fChlW3IrK109ZVt0XSk7cmV0dXJuIHJ9ZnVuY3Rpb24gTjRuKGUsdCl7dmFyIG4scixhLG8sZjtmb3IoZj1XdShlLmUuRGgoKSx0KSxvPTAsbj1sKGUuZywxMjQpLGE9MDthPGUuaTsrK2Epcj1uW2FdLGYuYW0oci5MaygpKSYmKytvO3JldHVybiBvfWZ1bmN0aW9uIFA0bihlLHQsbil7dmFyIHIsYTtmb3IoYT1EZSh0LDEwMikmJmwodCwxOSkuQmImSW8/bmV3IFVzZSh0LGUpOm5ldyBtRSh0LGUpLHI9MDtyPG47KytyKWlVKGEpO3JldHVybiBhfWZ1bmN0aW9uIHYxdChlLHQsbil7dmFyIHIsYTtpZihlLmMpSHhlKGUuYyx0LG4pO2Vsc2UgZm9yKGE9bmV3IEcoZS5iKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTYzKSx2MXQocix0LG4pfWZ1bmN0aW9uIEI0bihlLHQsbil7dmFyIHIsYTtyZXR1cm4gcj1sKHQub2YoZS5hKSwzNCksYT1sKG4ub2YoZS5hKSwzNCksciE9bnVsbCYmYSE9bnVsbD92TihyLGEpOnIhPW51bGw/LTE6YSE9bnVsbD8xOjB9ZnVuY3Rpb24gZzhlKGUsdCl7dmFyIG4scixhO2Zvcihucih0KSxuPSExLHI9bmV3IEcoZSk7ci5hPHIuYy5jLmxlbmd0aDspYT1yZShyKSx0LkhjKGEpJiYoUV8ociksbj0hMCk7cmV0dXJuIG59ZnVuY3Rpb24gdW4oZSl7dmFyIHQsbixyLGE7cmV0dXJuIG49KHQ9bChLMCgocj1lLlJtLGE9ci5mLGE9PUhyP3I6YSkpLDkpLG5ldyBaaCh0LGwoYzAodCx0Lmxlbmd0aCksOSksMCkpLGQwKG4sZSksbn1mdW5jdGlvbiB6VihlKXt2YXIgdCxuO3JldHVybiBuPWwoUShlLChOdCgpLFJoKSksODgpLG49PShKcygpLEoxKT8odD16ZShHZShRKGUsY1cpKSksdD49MT92YzpRMSk6bn1mdW5jdGlvbiBGNG4oZSl7c3dpdGNoKGwoUShlLChOdCgpLGJwKSksMjIzKS5nKXtjYXNlIDE6cmV0dXJuIG5ldyBUZWU7Y2FzZSAzOnJldHVybiBuZXcgTGVlO2RlZmF1bHQ6cmV0dXJuIG5ldyBFZWV9fWZ1bmN0aW9uIHhiKGUpe2lmKGUuYyl4YihlLmMpO2Vsc2UgaWYoZS5kKXRocm93IHVlKG5ldyBuYygiU3RyZWFtIGFscmVhZHkgdGVybWluYXRlZCwgY2FuJ3QgYmUgbW9kaWZpZWQgb3IgdXNlZCIpKX1mdW5jdGlvbiBCdyhlLHQsbil7dmFyIHI7cmV0dXJuIHI9ZS5hLmdldCh0KSxlLmEuc2V0KHQsbj09PXZvaWQgMD9udWxsOm4pLHI9PT12b2lkIDA/KCsrZS5jLCsrZS5iLmcpOisrZS5kLHJ9ZnVuY3Rpb24gUjRuKGUsdCxuKXt2YXIgcixhO2ZvcihhPWUuYS5lYygpLktjKCk7YS5PYigpOylpZihyPWwoYS5QYigpLDEwKSxFTihuLGwoanQodCxyLnApLDE2KSkpcmV0dXJuIHI7cmV0dXJuIG51bGx9ZnVuY3Rpb24gcDhlKGUsdCxuKXt2YXIgcjtyZXR1cm4gcj0wLHQmJihCNShlLmEpP3IrPXQuZi5hLzI6cis9dC5mLmIvMiksbiYmKEI1KGUuYSk/cis9bi5mLmEvMjpyKz1uLmYuYi8yKSxyfWZ1bmN0aW9uIGo0bihlLHQsbil7dmFyIHI7cj1uLCFyJiYocj1CNGUobmV3IEw4LDApKSxyLlVnKEwzdCwyKSxrZHQoZS5iLHQsci5laCgxKSksZU1uKGUsdCxyLmVoKDEpKSxySW4odCxyLmVoKDEpKSxyLlZnKCl9ZnVuY3Rpb24gYjhlKGUsdCxuKXt2YXIgcixhO3JldHVybiByPShyYigpLGE9bmV3IEFTLGEpLGRWKHIsdCksZlYocixuKSxlJiZxcigoIWUuYSYmKGUuYT1uZXcgWXMocWgsZSw1KSksZS5hKSxyKSxyfWZ1bmN0aW9uIGpjZShlKXt2YXIgdDtyZXR1cm4gZS5EYiY2ND9nMChlKToodD1uZXcgQWYoZzAoZSkpLHQuYSs9IiAoaWRlbnRpZmllcjogIixYbyh0LGUuayksdC5hKz0iKSIsdC5hKX1mdW5jdGlvbiAkY2UoZSx0KXt2YXIgbjtuPShlLkJiJmV1KSE9MCx0P2UuQmJ8PWV1OmUuQmImPS0zMjc2OSxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgaDAoZSwxLDE4LG4sdCkpfWZ1bmN0aW9uIG04ZShlLHQpe3ZhciBuO249KGUuQmImZXUpIT0wLHQ/ZS5CYnw9ZXU6ZS5CYiY9LTMyNzY5LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBoMChlLDEsMTgsbix0KSl9ZnVuY3Rpb24gSUUoZSx0KXt2YXIgbjtuPShlLkJiJl9kKSE9MCx0P2UuQmJ8PV9kOmUuQmImPS0xNjM4NSxlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgaDAoZSwxLDE2LG4sdCkpfWZ1bmN0aW9uIHY4ZShlLHQpe3ZhciBuO249KGUuQmImSW8pIT0wLHQ/ZS5CYnw9SW86ZS5CYiY9LTY1NTM3LGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBoMChlLDEsMjAsbix0KSl9ZnVuY3Rpb24gdzhlKGUpe3ZhciB0O3JldHVybiB0PVdlKGtmLEFkLDI4LDIsMTUsMSksZS09SW8sdFswXT0oZT4+MTApK0FQJlpzLHRbMV09KGUmMTAyMykrNTYzMjAmWnMsSWYodCwwLHQubGVuZ3RoKX1mdW5jdGlvbiAkNG4oZSl7dmFyIHQ7cmV0dXJuIHQ9ankoZSksdD4zNDAyODIzNDY2Mzg1Mjg4NmUyMj9nczp0PC0zNDAyODIzNDY2Mzg1Mjg4NmUyMj9pYTp0fWZ1bmN0aW9uIGJvKGUsdCl7dmFyIG47cmV0dXJuIHdjKGUpJiZ3Yyh0KSYmKG49ZSt0LF9QPG4mJm48Wm0pP246bWIoSzNuKHdjKGUpP01mKGUpOmUsd2ModCk/TWYodCk6dCkpfWZ1bmN0aW9uIG1vKGUsdCl7dmFyIG47cmV0dXJuIHdjKGUpJiZ3Yyh0KSYmKG49ZSp0LF9QPG4mJm48Wm0pP246bWIocUxuKHdjKGUpP01mKGUpOmUsd2ModCk/TWYodCk6dCkpfWZ1bmN0aW9uIERmKGUsdCl7dmFyIG47cmV0dXJuIHdjKGUpJiZ3Yyh0KSYmKG49ZS10LF9QPG4mJm48Wm0pP246bWIoSmZ0KHdjKGUpP01mKGUpOmUsd2ModCk/TWYodCk6dCkpfWZ1bmN0aW9uIE9jKGUsdCl7dmFyIG47cmV0dXJuIGUuaXx8ZjllKGUpLG49bChRbyhlLmcsdCksNDIpLG4/bmV3IFpwKGUuaixsKG4uYSwxNykuYSxsKG4uYiwxNykuYSk6KENuKCksQ24oKSxfbyl9ZnVuY3Rpb24gejRuKGUpe3JldHVybiBNY2UoKSxIbigpLCEhKHgxdChsKGUuYSw4NikuaixsKGUuYiw4OCkpfHxsKGUuYSw4NikuZC5lIT0wJiZ4MXQobChlLmEsODYpLmosbChlLmIsODgpKSl9ZnVuY3Rpb24gcTRuKGUsdCl7cmV0dXJuIHZuKHQuYiYmdC5jP0JtKHQuYikrIi0+IitCbSh0LmMpOiJlXyIrZXModCksZS5iJiZlLmM/Qm0oZS5iKSsiLT4iK0JtKGUuYyk6ImVfIitlcyhlKSl9ZnVuY3Rpb24gSDRuKGUsdCl7cmV0dXJuIHZuKHQuYiYmdC5jP0JtKHQuYikrIi0+IitCbSh0LmMpOiJlXyIrZXModCksZS5iJiZlLmM/Qm0oZS5iKSsiLT4iK0JtKGUuYyk6ImVfIitlcyhlKSl9ZnVuY3Rpb24gRncoZSx0KXtyZXR1cm4gQTEoKSxmMChBYiksYi5NYXRoLmFicyhlLXQpPD1BYnx8ZT09dHx8aXNOYU4oZSkmJmlzTmFOKHQpPzA6ZTx0Py0xOmU+dD8xOnV3KGlzTmFOKGUpLGlzTmFOKHQpKX1mdW5jdGlvbiBpcCgpe2lwPVUsSGdlPW5ldyB4cShjTCwwKSxKQj1uZXcgeHEoIlBPTFlMSU5FIiwxKSxpQz1uZXcgeHEoIk9SVEhPR09OQUwiLDIpLHM5PW5ldyB4cSgiU1BMSU5FUyIsMyl9ZnVuY3Rpb24gcVYoKXtxVj1VLFlJZT1uZXcgUnNlKCJBU1BFQ1RfUkFUSU9fRFJJVkVOIiwwKSx1Z2U9bmV3IFJzZSgiTUFYX1NDQUxFX0RSSVZFTiIsMSksV0llPW5ldyBSc2UoIkFSRUFfRFJJVkVOIiwyKX1mdW5jdGlvbiBWNG4oZSx0LG4pe3ZhciByO3RyeXtkeW4oZSx0LG4pfWNhdGNoKGEpe3Rocm93IGE9YnMoYSksRGUoYSw2MDYpPyhyPWEsdWUobmV3IHc2ZShyKSkpOnVlKGEpfXJldHVybiB0fWZ1bmN0aW9uIFU0bihlKXt2YXIgdCxuLHI7Zm9yKG49MCxyPWUubGVuZ3RoO248cjtuKyspaWYoZVtuXT09bnVsbCl0aHJvdyB1ZShuZXcgRDgoImF0IGluZGV4ICIrbikpO3JldHVybiB0PWUsbmV3IElsKHQpfWZ1bmN0aW9uIHNwKGUpe3ZhciB0LG4scjtmb3IodD1uZXcgYnQscj1uZXcgRyhlLmopO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwxMiksdnQodCxuLmIpO3JldHVybiBYcih0KSxuZXcgUF8odCl9ZnVuY3Rpb24ga2EoZSl7dmFyIHQsbixyO2Zvcih0PW5ldyBidCxyPW5ldyBHKGUuaik7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDEyKSx2dCh0LG4uZSk7cmV0dXJuIFhyKHQpLG5ldyBQXyh0KX1mdW5jdGlvbiBxcyhlKXt2YXIgdCxuLHI7Zm9yKHQ9bmV3IGJ0LHI9bmV3IEcoZS5qKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMTIpLHZ0KHQsbi5nKTtyZXR1cm4gWHIodCksbmV3IFBfKHQpfWZ1bmN0aW9uIEc0bihlLHQpe3ZhciBuLHIsYTtmb3IoYT1uZXcgUHIscj10LnZjKCkuS2MoKTtyLk9iKCk7KW49bChyLlBiKCksNDQpLGtpKGEsbi5sZCgpLE0zbihlLGwobi5tZCgpLDE1KSkpO3JldHVybiBhfWZ1bmN0aW9uIEs0bihlKXt2YXIgdCxuO2ZvcihuPUJFbihBaChreShlKSkpLktjKCk7bi5PYigpOylpZih0PWVpKG4uUGIoKSksWUEoZSx0KSlyZXR1cm4gTW1uKChwZXQoKSxqX3QpLHQpO3JldHVybiBudWxsfWZ1bmN0aW9uIHpjZShlLHQpe3ZhciBuLHIsYTtmb3IoYT0wLHI9bCh0LktiKGUpLDIwKS5LYygpO3IuT2IoKTspbj1sKHIuUGIoKSwxOCksUnQoQnQoUShuLChmdCgpLFcxKSkpKXx8KythO3JldHVybiBhfWZ1bmN0aW9uIHcxdChlKXt2YXIgdCxuLHIsYTtmb3IodD1uZXcgS3J0KGUuUmQoKS5nYygpKSxhPTAscj1jeChlLlJkKCkuS2MoKSk7ci5PYigpOyluPXIuUGIoKSxEMm4odCxuLHB0KGErKykpO3JldHVybiBNOW4odC5hKX1mdW5jdGlvbiBxY2UoZSx0LG4scil7dmFyIGEsbztyZXR1cm4gbnIociksbnIobiksYT1lLnhjKHQpLG89YT09bnVsbD9uOnJldChsKGEsMTUpLGwobiwxNikpLG89PW51bGw/ZS5CYyh0KTplLnpjKHQsbyksb31mdW5jdGlvbiBXNG4oZSx0LG4scil7dmFyIGEsbyxmO2ZvcihhPXQrMTthPG47KythKWZvcihvPWE7bz50JiZyLk5lKGVbby0xXSxlW29dKT4wOy0tbylmPWVbb10sVHMoZSxvLGVbby0xXSksVHMoZSxvLTEsZil9ZnVuY3Rpb24gc24oZSx0KXt2YXIgbixyLGEsbyxmO2lmKG49dC5mLGgyKGUuYy5kLG4sdCksdC5nIT1udWxsKWZvcihhPXQuZyxvPTAsZj1hLmxlbmd0aDtvPGY7KytvKXI9YVtvXSxoMihlLmMuZSxyLHQpfWZ1bmN0aW9uIHkxdChlLHQpe3ZhciBuLHI7Zm9yKG49UnIoZSwwKTtuLmIhPW4uZC5jOyl7aWYocj1YSShHZShCcihuKSkpLHI9PXQpcmV0dXJuO2lmKHI+dCl7cGN0KG4pO2JyZWFrfX16TyhuLHQpfWZ1bmN0aW9uIFk0bihlLHQpe3ZhciBuLHIsYTtyPUc1KHQpLGE9emUoR2UoUHkociwoTnQoKSx4MCkpKSksbj1iLk1hdGgubWF4KDAsYS8yLS41KSxGQSh0LG4sMSksdnQoZSxuZXcgTmV0KHQsbikpfWZ1bmN0aW9uIFg0bihlLHQsbil7dmFyIHI7bi5VZygiU3RyYWlnaHQgTGluZSBFZGdlIFJvdXRpbmciLDEpLG4uZGgodCx5Q2UpLHI9bChhdCh0LChINSgpLFk2KSksMjcpLHJ2dChlLHIpLG4uZGgodCxPRyl9ZnVuY3Rpb24geThlKGUsdCl7ZS5uLmMubGVuZ3RoPT0wJiZ2dChlLm4sbmV3IFBIKGUucyxlLnQsZS5pKSksdnQoZS5iLHQpLGV4ZShsKGp0KGUubixlLm4uYy5sZW5ndGgtMSksMjA5KSx0KSxqbXQoZSx0KX1mdW5jdGlvbiBMQShlKXt2YXIgdDt0aGlzLmE9KHQ9bChlLmUmJmUuZSgpLDkpLG5ldyBaaCh0LGwoYzAodCx0Lmxlbmd0aCksOSksMCkpLHRoaXMuYj1XZSh3YSxSbiwxLHRoaXMuYS5hLmxlbmd0aCw1LDEpfWZ1bmN0aW9uIHhjKGUpe3ZhciB0O3JldHVybiBBcnJheS5pc0FycmF5KGUpJiZlLlRtPT09eGU/X20oYmgoZSkpKyJAIisodD1lcyhlKT4+PjAsdC50b1N0cmluZygxNikpOmUudG9TdHJpbmcoKX1mdW5jdGlvbiBRNG4oZSx0KXtyZXR1cm4gZS5oPT1TUCYmZS5tPT0wJiZlLmw9PTA/KHQmJihOYj1xdSgwLDAsMCkpLGVudCgoaUUoKSxZU2UpKSk6KHQmJihOYj1xdShlLmwsZS5tLGUuaCkpLHF1KDAsMCwwKSl9ZnVuY3Rpb24gSjRuKGUsdCl7c3dpdGNoKHQuZyl7Y2FzZSAyOnJldHVybiBlLmI7Y2FzZSAxOnJldHVybiBlLmM7Y2FzZSA0OnJldHVybiBlLmQ7Y2FzZSAzOnJldHVybiBlLmE7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24geDF0KGUsdCl7c3dpdGNoKHQuZyl7Y2FzZSAyOnJldHVybiBlLmI7Y2FzZSAxOnJldHVybiBlLmM7Y2FzZSA0OnJldHVybiBlLmQ7Y2FzZSAzOnJldHVybiBlLmE7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24geDhlKGUsdCxuLHIpe3N3aXRjaCh0KXtjYXNlIDM6cmV0dXJuIGUuZjtjYXNlIDQ6cmV0dXJuIGUuZztjYXNlIDU6cmV0dXJuIGUuaTtjYXNlIDY6cmV0dXJuIGUuan1yZXR1cm4gZDhlKGUsdCxuLHIpfWZ1bmN0aW9uIEhWKGUsdCl7aWYodD09ZS5kKXJldHVybiBlLmU7aWYodD09ZS5lKXJldHVybiBlLmQ7dGhyb3cgdWUobmV3IFluKCJOb2RlICIrdCsiIG5vdCBwYXJ0IG9mIGVkZ2UgIitlKSl9ZnVuY3Rpb24gWjRuKGUsdCl7dmFyIG47aWYobj1vUChlLkRoKCksdCksRGUobiwxMDIpKXJldHVybiBsKG4sMTkpO3Rocm93IHVlKG5ldyBZbihPYit0KyInIGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSIpKX1mdW5jdGlvbiB1ZihlLHQsbixyKXtpZih0PDApJDllKGUsbixyKTtlbHNle2lmKCFuLnJrKCkpdGhyb3cgdWUobmV3IFluKE9iK24ueGUoKStrTCkpO2wobiw2OSkud2soKS5DayhlLGUuaGkoKSx0LHIpfX1mdW5jdGlvbiBRbChlKXt2YXIgdDtpZihlLmIpe2lmKFFsKGUuYiksZS5iLmQhPWUuYyl0aHJvdyB1ZShuZXcgWGgpfWVsc2UgZS5kLmRjKCkmJih0PWwoZS5mLmMueGMoZS5lKSwxNiksdCYmKGUuZD10KSl9ZnVuY3Rpb24gZTVuKGUpe3B5KCk7dmFyIHQsbixyLGE7Zm9yKHQ9ZS5vLmIscj1sKGwoJGkoZS5yLChDdCgpLERyKSksMjEpLDg3KS5LYygpO3IuT2IoKTspbj1sKHIuUGIoKSwxMTcpLGE9bi5lLGEuYis9dH1mdW5jdGlvbiB0NW4oZSl7dmFyIHQsbixyO2Zvcih0aGlzLmE9bmV3IGJkLHI9bmV3IEcoZSk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDE2KSx0PW5ldyBzc3QsdDNuKHQsbiksbmEodGhpcy5hLHQpfWZ1bmN0aW9uIG41bihlLHQpe3ZhciBuLHIsYTtmb3Iocj1yX24oZSx0KSxhPXJbci5sZW5ndGgtMV0vMixuPTA7bjxyLmxlbmd0aDtuKyspaWYocltuXT49YSlyZXR1cm4gdC5jK247cmV0dXJuIHQuYyt0LmIuZ2MoKX1mdW5jdGlvbiByNW4oZSx0KXtGaygpO3ZhciBuLHIsYSxvO2ZvcihyPU9sdChlKSxhPXQsbkUociwwLHIubGVuZ3RoLGEpLG49MDtuPHIubGVuZ3RoO24rKylvPVY3bihlLHJbbl0sbiksbiE9byYmQUEoZSxuLG8pfWZ1bmN0aW9uIEhjZShlLHQsbil7dmFyIHIsYTtmb3Iocj0wLGE9ZS5sZW5ndGg7cjxhO3IrKylpZihtY2UoKFhuKHIsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChyKSksdCxuKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBpNW4oZSx0KXt2YXIgbixyO2ZvcihyPWUuZS5hLmVjKCkuS2MoKTtyLk9iKCk7KWlmKG49bChyLlBiKCksMjcyKSxoOW4odCxuLmQpfHx5a24odCxuLmQpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGs4ZShlLHQsbixyLGEpe3ZhciBvLGYsZztmb3IoZj1hO3QuYiE9dC5jOylvPWwoWDgodCksMTApLGc9bChPYyhvLHIpLlhiKDApLDEyKSxlLmRbZy5wXT1mKyssJG4obi5jLGcpO3JldHVybiBmfWZ1bmN0aW9uIEU4ZShlLHQpe3ZhciBuLHIsYSxvLGYsZztmb3Iocj0wLG49MCxvPXQsZj0wLGc9by5sZW5ndGg7ZjxnOysrZilhPW9bZl0sYT4wJiYocis9YSwrK24pO3JldHVybiBuPjEmJihyKz1lLmQqKG4tMSkpLHJ9ZnVuY3Rpb24gczVuKGUpe3ZhciB0LG4scixhLG87cmV0dXJuIG89anhlKGUpLG49WkkoZS5jKSxyPSFuLHImJihhPW5ldyAkcCxlMShvLCJrbm93bkxheW91dGVycyIsYSksdD1uZXcgdVFlKGEpLHRvKGUuYyx0KSksb31mdW5jdGlvbiBUOGUoZSl7dmFyIHQsbixyO2ZvcihyPW5ldyBVcCxyLmErPSJbIix0PTAsbj1lLmdjKCk7dDxuOylYbyhyLGpfKGUuVmkodCkpKSwrK3Q8biYmKHIuYSs9Q28pO3JldHVybiByLmErPSJdIixyLmF9ZnVuY3Rpb24gYTVuKGUpe3JldHVybiBlLmU9PW51bGw/ZTooIWUuYyYmKGUuYz1uZXcgZWxlKChlLmYmMjU2KSE9MCxlLmksZS5hLGUuZCwoZS5mJjE2KSE9MCxlLmosZS5nLG51bGwpKSxlLmMpfWZ1bmN0aW9uIG81bihlKXtyZXR1cm4gZS5rIT0oWm4oKSxQcyk/ITE6VzUobmV3IGJuKG51bGwsbmV3IHZ3KG5ldyBocihkcihxcyhlKS5hLktjKCksbmV3IGopKSkpLG5ldyBIail9ZnVuY3Rpb24gbGYoZSl7dmFyIHQsbjtyZXR1cm4gRGUoZSwzMDcpPyhuPWl2bihsKGUsMzA3KSksdD1uLHQpOkRlKGUsNDQxKT9sKGUsNDQxKS5hOkRlKGUsNTkpP25ldyBfSmUoZSk6bmV3IHAzZShlKX1mdW5jdGlvbiBjNW4oZSl7dmFyIHQ7cmV0dXJuIGU9PW51bGw/ITA6KHQ9ZS5sZW5ndGgsdD4wJiYoWG4odC0xLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQodC0xKT09NTgpJiYhSGNlKGUsJE0sek0pKX1mdW5jdGlvbiBDOGUoZSx0KXt2YXIgbjtyZXR1cm4gcWUoZSk9PT1xZSh0KT8hMDpEZSh0LDkyKT8obj1sKHQsOTIpLGUuZT09bi5lJiZlLmQ9PW4uZCYmSW1uKGUsbi5hKSk6ITF9ZnVuY3Rpb24gZ3goZSl7c3dpdGNoKEN0KCksZS5nKXtjYXNlIDQ6cmV0dXJuIFFuO2Nhc2UgMTpyZXR1cm4gYXI7Y2FzZSAzOnJldHVybiBEcjtjYXNlIDI6cmV0dXJuIGVyO2RlZmF1bHQ6cmV0dXJuIFBjfX1mdW5jdGlvbiB1NW4oZSl7dmFyIHQsbjtpZihlLmIpcmV0dXJuIGUuYjtmb3Iobj1HMT9udWxsOmUuZDtuOyl7aWYodD1HMT9udWxsOm4uYix0KXJldHVybiB0O249RzE/bnVsbDpuLmR9cmV0dXJuIERrKCksd19lfWZ1bmN0aW9uIFM4ZShlKXt2YXIgdCxuLHI7Zm9yKHI9emUoR2UoZS5hLm9mKChwaSgpLGlZKSkpKSxuPW5ldyBHKGUuYS5TZigpKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksNjk1KSxud3QoZSx0LHIpfWZ1bmN0aW9uIGw1bihlKXt2YXIgdCxuLHIsYTtmb3IodD0oZS5qPT1udWxsJiYoZS5qPShYaygpLGE9UzBlLm1lKGUpLEE4bihhKSkpLGUuaiksbj0wLHI9dC5sZW5ndGg7bjxyOysrbik7fWZ1bmN0aW9uIFZjZShlLHQpe3ZhciBuLHI7Zm9yKHI9bmV3IEcodCk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDQyKSx2dChlLmIuYixsKG4uYiw4NikpLHdvZShsKG4uYSwxOTQpLGwobi5iLDg2KSl9ZnVuY3Rpb24gaDVuKGUsdCxuKXt2YXIgcixhO2ZvcihhPWUuYS5iLHI9YS5jLmxlbmd0aDtyPG47cisrKXB3KGEsMCxuZXcgeXUoZS5hKSk7VmEodCxsKGp0KGEsYS5jLmxlbmd0aC1uKSwzMCkpLGUuYlt0LnBdPW59ZnVuY3Rpb24gZjVuKGUsdCxuLHIsYSl7U2goKSxwMChzMChpMChyMChhMChuZXcgX2YsMCksYS5kLmUtZSksdCksYS5kKSkscDAoczAoaTAocjAoYTAobmV3IF9mLDApLG4tYS5hLmUpLGEuYSkscikpfWZ1bmN0aW9uIGsxdChlLHQpe3ZhciBuO3JldHVybiBlLmQ/SHUoZS5iLHQpP2woY3IoZS5iLHQpLDQ3KToobj10LmRnKCksa2koZS5iLHQsbiksbik6dC5kZygpfWZ1bmN0aW9uIGQ1bihlKXt2YXIgdD1lLmU7ZnVuY3Rpb24gbihyKXtyZXR1cm4hcnx8ci5sZW5ndGg9PTA/IiI6IgkiK3Iuam9pbihgCglgKX1yZXR1cm4gdCYmKHQuc3RhY2t8fG4oZVtqbGVdKSl9ZnVuY3Rpb24gXzhlKGUsdCl7c3dpdGNoKHQpe2Nhc2UgMzpyZXR1cm4gZS5mIT0wO2Nhc2UgNDpyZXR1cm4gZS5nIT0wO2Nhc2UgNTpyZXR1cm4gZS5pIT0wO2Nhc2UgNjpyZXR1cm4gZS5qIT0wfXJldHVybiBfN2UoZSx0KX1mdW5jdGlvbiBFMXQoZSl7c3dpdGNoKGUuZyl7Y2FzZSAwOnJldHVybiBuZXcga25lO2Nhc2UgMTpyZXR1cm4gbmV3IFB1O2RlZmF1bHQ6dGhyb3cgdWUobmV3IFluKEZoZSsoZS5mIT1udWxsP2UuZjoiIitlLmcpKSl9fWZ1bmN0aW9uIGc1bihlKXtzd2l0Y2goZS5nKXtjYXNlIDA6cmV0dXJuIG5ldyBTUztjYXNlIDE6cmV0dXJuIG5ldyBSYztkZWZhdWx0OnRocm93IHVlKG5ldyBZbihFZmUrKGUuZiE9bnVsbD9lLmY6IiIrZS5nKSkpfX1mdW5jdGlvbiBwNW4oZSl7c3dpdGNoKGUuZyl7Y2FzZSAxOnJldHVybiBuZXcgYm5lO2Nhc2UgMjpyZXR1cm4gbmV3IHVydDtkZWZhdWx0OnRocm93IHVlKG5ldyBZbihFZmUrKGUuZiE9bnVsbD9lLmY6IiIrZS5nKSkpfX1mdW5jdGlvbiBUMXQoZSl7c3dpdGNoKGUuZyl7Y2FzZSAwOnJldHVybiBuZXcgSHdlO2Nhc2UgMTpyZXR1cm4gbmV3IHJKZTtkZWZhdWx0OnRocm93IHVlKG5ldyBZbihGRysoZS5mIT1udWxsP2UuZjoiIitlLmcpKSl9fWZ1bmN0aW9uIFVjZSgpe1J4ZSgpO3ZhciBlLHQsbjtuPWZPbisrK0RhdGUubm93KCksZT11YShiLk1hdGguZmxvb3IobipNUCkpJlpVLHQ9dWEobi1lKmNFZSksdGhpcy5hPWVeMTUwMix0aGlzLmI9dF5oaGV9ZnVuY3Rpb24gaGYoKXtoZj1VLEVCPW5ldyBsTyhJZCwwKSxZTD1uZXcgbE8oIkZJUlNUIiwxKSwkYj1uZXcgbE8oVTN0LDIpLFhMPW5ldyBsTygiTEFTVCIsMyksZDQ9bmV3IGxPKEczdCw0KX1mdW5jdGlvbiBWVigpe1ZWPVUsS2dlPW5ldyBUcShjQ2UsMCksc1BlPW5ldyBUcSgiR1JPVVBfREVDIiwxKSxvUGU9bmV3IFRxKCJHUk9VUF9NSVhFRCIsMiksYVBlPW5ldyBUcSgiR1JPVVBfSU5DIiwzKX1mdW5jdGlvbiBiNW4oZSx0KXt2YXIgbixyLGEsbzt0JiYoYT1ucCh0LCJ4Iiksbj1uZXcgZVFlKGUpLG9FKG4uYSwobnIoYSksYSkpLG89bnAodCwieSIpLHI9bmV3IG5RZShlKSx1RShyLmEsKG5yKG8pLG8pKSl9ZnVuY3Rpb24gbTVuKGUsdCl7dmFyIG4scixhLG87dCYmKGE9bnAodCwieCIpLG49bmV3IGlRZShlKSxhRShuLmEsKG5yKGEpLGEpKSxvPW5wKHQsInkiKSxyPW5ldyBzUWUoZSksY0Uoci5hLChucihvKSxvKSkpfWZ1bmN0aW9uIHY1bihlLHQpe3ZhciBuLHIsYSxvO2ZvcihhPW5ldyBCdSh0LmdjKCkpLHI9dC5LYygpO3IuT2IoKTspbj1yLlBiKCksbz1jbGUoZSxsKG4sNTgpKSxvJiYkbihhLmMsbyk7cmV0dXJuIGF9ZnVuY3Rpb24gTnkoZSx0LG4pe3ZhciByLGE7Zm9yKGE9ZS5LYygpO2EuT2IoKTspaWYocj1hLlBiKCkscWUodCk9PT1xZShyKXx8dCE9bnVsbCYmUGkodCxyKSlyZXR1cm4gbiYmYS5RYigpLCEwO3JldHVybiExfWZ1bmN0aW9uIEMxdChlKXt2YXIgdCxuLHI7cmV0dXJuIG49ZS5qaCgpLG4/KHQ9ZS5FaCgpLERlKHQsMTY3KSYmKHI9QzF0KGwodCwxNjcpKSxyIT1udWxsKT9yKyIuIituOm4pOm51bGx9ZnVuY3Rpb24gdzVuKGUpe3ZhciB0LG4scjtyZXR1cm4gZS5lPT0wPzA6KHQ9ZS5kPDw1LG49ZS5hW2UuZC0xXSxlLmU8MCYmKHI9TWZ0KGUpLHI9PWUuZC0xJiYoLS1uLG49bnwwKSksdC09clAobiksdCl9ZnVuY3Rpb24geTVuKGUpe3ZhciB0LG4scjtyZXR1cm4gZTxsSy5sZW5ndGg/bEtbZV06KG49ZT4+NSx0PWUmMzEscj1XZShWcixkaSwyOCxuKzEsMTUsMSkscltuXT0xPDx0LG5ldyBJbSgxLG4rMSxyKSl9ZnVuY3Rpb24gUzF0KGUsdCl7dmFyIG4scjtpZih0KXtmb3Iobj0wO248ZS5pOysrbilpZihyPWwoZS5nW25dLDM3OCksci5taih0KSlyZXR1cm4hMTtyZXR1cm4gcXIoZSx0KX1lbHNlIHJldHVybiExfWZ1bmN0aW9uIEE4ZShlLHQsbil7dmFyIHIsYTtpZigrK2UuaixuLmRjKCkpcmV0dXJuITE7Zm9yKGE9bi5LYygpO2EuT2IoKTspcj1hLlBiKCksZS5xaih0LGUuWmkodCxyKSksKyt0O3JldHVybiEwfWZ1bmN0aW9uIHg1bihlLHQsbixyKXt2YXIgYSxvO2lmKG89bi10LG88Mylmb3IoO288MzspZSo9MTAsKytvO2Vsc2V7Zm9yKGE9MTtvPjM7KWEqPTEwLC0tbztlPShlKyhhPj4xKSkvYXwwfXJldHVybiByLmk9ZSwhMH1mdW5jdGlvbiBtcyhlLHQpe3ZhciBuLHIsYTtpZihuPShlLmk9PW51bGwmJlNkKGUpLGUuaSkscj10LkxqKCksciE9LTEpe2ZvcihhPW4ubGVuZ3RoO3I8YTsrK3IpaWYobltyXT09dClyZXR1cm4gcn1yZXR1cm4tMX1mdW5jdGlvbiBrNW4oZSl7dmFyIHQsbixyLGEsbztmb3Iobj1sKGUuZyw2ODkpLHI9ZS5pLTE7cj49MDstLXIpZm9yKHQ9bltyXSxhPTA7YTxyOysrYSlpZihvPW5bYV0sSW10KGUsdCxvKSl7dngoZSxyKTticmVha319ZnVuY3Rpb24gTDhlKGUpe3ZhciB0LG4scixhO2Zvcih0PW5ldyAkcCxhPW5ldyB5byhlLmIuS2MoKSk7YS5iLk9iKCk7KXI9bChhLmIuUGIoKSw3MDEpLG49UjluKHIpLFRnbih0LHQuYS5sZW5ndGgsbik7cmV0dXJuIHQuYX1mdW5jdGlvbiBNOGUoZSl7dmFyIHQ7cmV0dXJuIWUuYyYmKGUuYz1uZXcga2gpLFZzKGUuZCxuZXcgbzUpLHhTbihlKSx0PWZTbihlKSxJcyhuZXcgYm4obnVsbCxuZXcga24oZS5kLDE2KSksbmV3IElpZShlKSksdH1mdW5jdGlvbiBFNW4oZSx0KXt0LlVnKCJFbmQgbGFiZWwgcG9zdC1wcm9jZXNzaW5nIiwxKSxJcyhGaShEYyhuZXcgYm4obnVsbCxuZXcga24oZS5iLDE2KSksbmV3IGVaKSxuZXcgdFopLG5ldyBuWiksdC5WZygpfWZ1bmN0aW9uIEQ4ZShlKXtHY2UoKSx0aGlzLmM9TzEoaGUobGUoRE9uLDEpLFJuLDg0NSwwLFtYa3RdKSksdGhpcy5iPW5ldyBQcix0aGlzLmE9ZSxraSh0aGlzLmIsVFcsMSksVnUoUWt0LG5ldyBJWGUodGhpcykpfWZ1bmN0aW9uIF8xdChlLHQsbil7cWh0KCksSlFlLmNhbGwodGhpcyksdGhpcy5hPUxtKEc2dCxbZHQsd0VlXSxbNjAzLDIxN10sMCxbZ0sscTBlXSwyKSx0aGlzLmM9bmV3ICQ4LHRoaXMuZz1lLHRoaXMuZj10LHRoaXMuZD1ufWZ1bmN0aW9uIEk4ZShlLHQpe3RoaXMubj1MbShubSxbZHQsYWhlXSxbMzc2LDI4XSwxNCxbdCx1YShiLk1hdGguY2VpbChlLzMyKSldLDIpLHRoaXMubz1lLHRoaXMucD10LHRoaXMuaj1lLTE+PjEsdGhpcy5rPXQtMT4+MX1mdW5jdGlvbiBUNW4oZSl7WkgoKSxsKGUub2YoKHBpKCksVWIpKSwxODEpLkhjKChabCgpLGhZKSkmJihsKGUub2YoUzQpLDE4MSkuRmMoKFJsKCksYTkpKSxsKGUub2YoVWIpLDE4MSkuTWMoaFkpKX1mdW5jdGlvbiBBMXQoZSl7dmFyIHQsbjt0PWUuZD09KHl4KCksSVQpLG49THhlKGUpLHQmJiFufHwhdCYmbj9ydChlLmEsKE50KCksUmQpLChvZygpLFZCKSk6cnQoZS5hLChOdCgpLFJkKSwob2coKSxIQikpfWZ1bmN0aW9uIEdjZSgpe0djZT1VLHRxKCksVFc9KE50KCksbTMpLFFrdD1PMShoZShsZShDZ2UsMSksb0NlLDE0OSwwLFtTQix4MCxINixiMyx5NCxjZGUsR1QsS1QsdWRlLHRNLHE2LHZ2LFY2XSkpfWZ1bmN0aW9uIEM1bihlLHQpe3ZhciBuO3JldHVybiBuPWwoeWMoZSxQbChuZXcgenIsbmV3IGh0LG5ldyBGbixoZShsZShvYywxKSxpdCwxMDgsMCxbKEZsKCksRWMpXSkpKSwxNSksbi5RYyhZaXQobi5nYygpKSl9ZnVuY3Rpb24gTDF0KGUsdCl7dmFyIG4scjtpZihyPW5ldyBiYShlLmEuYWQodCwhMCkpLHIuYS5nYygpPD0xKXRocm93IHVlKG5ldyBTOCk7cmV0dXJuIG49ci5hLmVjKCkuS2MoKSxuLlBiKCksbChuLlBiKCksNDApfWZ1bmN0aW9uIFM1bihlLHQsbil7dmFyIHIsYTtyZXR1cm4gcj16ZShlLnBbdC5pLnBdKSt6ZShlLmRbdC5pLnBdKSt0Lm4uYit0LmEuYixhPXplKGUucFtuLmkucF0pK3plKGUuZFtuLmkucF0pK24ubi5iK24uYS5iLGEtcn1mdW5jdGlvbiBPOGUoZSx0KXt2YXIgbjtyZXR1cm4gZS5pPjAmJih0Lmxlbmd0aDxlLmkmJihuPWJOKGJoKHQpLmMsZS5pKSx0PW4pLHB1KGUuZywwLHQsMCxlLmkpKSx0Lmxlbmd0aD5lLmkmJlRzKHQsZS5pLG51bGwpLHR9ZnVuY3Rpb24gVVYoZSl7dmFyIHQ7cmV0dXJuIGUuRGImNjQ/Q0EoZSk6KHQ9bmV3IEFmKENBKGUpKSx0LmErPSIgKGluc3RhbmNlQ2xhc3NOYW1lOiAiLFhvKHQsZS5EKSx0LmErPSIpIix0LmEpfWZ1bmN0aW9uIEdWKGUpe3ZhciB0LG4scixhO2ZvcihhPTAsbj0wLHI9ZS5sZW5ndGg7bjxyO24rKyl0PShYbihuLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQobikpLHQ8NjQmJihhPVEwKGEsbDAoMSx0KSkpO3JldHVybiBhfWZ1bmN0aW9uIF81bihlLHQsbil7dmFyIHIsYTtmb3Iocj12YShuLFZvKSxhPTA7aXUociwwKSE9MCYmYTx0O2ErKylyPWJvKHIsdmEoZVthXSxWbykpLGVbYV09WXIocikscj1idyhyLDMyKTtyZXR1cm4gWXIocil9ZnVuY3Rpb24gRk4oZSx0KXt2YXIgbixyLGEsbztmb3Iobz1XdShlLmUuRGgoKSx0KSxuPWwoZS5nLDEyNCksYT0wO2E8ZS5pOysrYSlpZihyPW5bYV0sby5hbShyLkxrKCkpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIEtjZShlLHQpe3ZhciBuLHIsYTtyZXR1cm4gZS5mPjA/KGUuX2ooKSxyPXQ9PW51bGw/MDplcyh0KSxhPShyJklpKSVlLmQubGVuZ3RoLG49ajJ0KGUsYSxyLHQpLG4hPS0xKTohMX1mdW5jdGlvbiBNMXQoZSx0KXt2YXIgbixyO2UuYT1ibyhlLmEsMSksZS5jPWIuTWF0aC5taW4oZS5jLHQpLGUuYj1iLk1hdGgubWF4KGUuYix0KSxlLmQrPXQsbj10LWUuZixyPWUuZStuLGUuZj1yLWUuZS1uLGUuZT1yfWZ1bmN0aW9uIE44ZShlLHQpe3N3aXRjaCh0KXtjYXNlIDM6TXcoZSwwKTtyZXR1cm47Y2FzZSA0OkR3KGUsMCk7cmV0dXJuO2Nhc2UgNTpVdShlLDApO3JldHVybjtjYXNlIDY6R3UoZSwwKTtyZXR1cm59aThlKGUsdCl9ZnVuY3Rpb24gUncoZSx0KXtzd2l0Y2godC5nKXtjYXNlIDE6cmV0dXJuIEc4KGUuaiwoa2woKSx4QWUpKTtjYXNlIDI6cmV0dXJuIEc4KGUuaiwoa2woKSxFQWUpKTtkZWZhdWx0OnJldHVybiBDbigpLENuKCksX299fWZ1bmN0aW9uIFA4ZShlKXt3dygpO3ZhciB0O3N3aXRjaCh0PWUuUGMoKSx0Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiB4MGU7Y2FzZSAxOnJldHVybiBuZXcgU2FlKFhyKHRbMF0pKTtkZWZhdWx0OnJldHVybiBuZXcgb29lKFU0bih0KSl9fWZ1bmN0aW9uIEQxdChlLHQpe2UuWGooKTt0cnl7ZS5kLmJkKGUuZSsrLHQpLGUuZj1lLmQuaixlLmc9LTF9Y2F0Y2gobil7dGhyb3cgbj1icyhuKSxEZShuLDc3KT91ZShuZXcgWGgpOnVlKG4pfX1mdW5jdGlvbiBXY2UoKXtXY2U9VSxpcGU9bmV3IE5TLE1QZT1uZXcgSDAsRFBlPW5ldyBBSSxJUGU9bmV3IExJLE9QZT1uZXcgZjgsTlBlPW5ldyB0cmUsUFBlPW5ldyBucmUsQlBlPW5ldyBycmUsRlBlPW5ldyBpcmV9ZnVuY3Rpb24gS1YoZSx0KXtpeWUoKTt2YXIgbixyO3JldHVybiBuPU1PKCh6eigpLHp6KCksTkwpKSxyPW51bGwsdD09biYmKHI9bCh4dShLU2UsZSksNjI0KSkscnx8KHI9bmV3IFhzdChlKSx0PT1uJiZyYyhLU2UsZSxyKSkscn1mdW5jdGlvbiBJMXQoZSl7QnkoKTt2YXIgdDtyZXR1cm4oZS5xP2UucTooQ24oKSxDbigpLG1nKSkuX2IoKE50KCksZzMpKT90PWwoUShlLGczKSwyMDMpOnQ9bChRKGVvKGUpLGVNKSwyMDMpLHR9ZnVuY3Rpb24gUHkoZSx0KXt2YXIgbixyO3JldHVybiByPW51bGwsbnMoZSwoTnQoKSxrVykpJiYobj1sKFEoZSxrVyksOTYpLG4ucGYodCkmJihyPW4ub2YodCkpKSxyPT1udWxsJiYocj1RKGVvKGUpLHQpKSxyfWZ1bmN0aW9uIE8xdChlLHQpe3ZhciBuLHIsYTtyZXR1cm4gRGUodCw0NCk/KG49bCh0LDQ0KSxyPW4ubGQoKSxhPU95KGUuUmMoKSxyKSx5ZChhLG4ubWQoKSkmJihhIT1udWxsfHxlLlJjKCkuX2IocikpKTohMX1mdW5jdGlvbiBuMShlLHQpe3ZhciBuLHIsYTtyZXR1cm4gZS5mPjAmJihlLl9qKCkscj10PT1udWxsPzA6ZXModCksYT0ociZJaSklZS5kLmxlbmd0aCxuPXk5ZShlLGEscix0KSxuKT9uLm1kKCk6bnVsbH1mdW5jdGlvbiBSdShlLHQsbil7dmFyIHIsYSxvO3JldHVybiBlLlBqKCk/KHI9ZS5pLG89ZS5RaigpLElOKGUscix0KSxhPWUuSWooMyxudWxsLHQscixvKSxuP24ubmooYSk6bj1hKTpJTihlLGUuaSx0KSxufWZ1bmN0aW9uIEE1bihlLHQsbil7dmFyIHIsYTtyZXR1cm4gcj1uZXcgWmcoZS5lLDQsMTAsKGE9dC5jLERlKGEsOTApP2woYSwyOSk6KFRuKCksS2YpKSxudWxsLGYyKGUsdCksITEpLG4/bi5uaihyKTpuPXIsbn1mdW5jdGlvbiBMNW4oZSx0LG4pe3ZhciByLGE7cmV0dXJuIHI9bmV3IFpnKGUuZSwzLDEwLG51bGwsKGE9dC5jLERlKGEsOTApP2woYSwyOSk6KFRuKCksS2YpKSxmMihlLHQpLCExKSxuP24ubmoocik6bj1yLG59ZnVuY3Rpb24gTjF0KGUpe3B5KCk7dmFyIHQ7cmV0dXJuIHQ9bmV3IEVvKGwoZS5lLm9mKChwaSgpLGk3KSksOCkpLGUuQi5IYygoWmwoKSxhQykpJiYodC5hPD0wJiYodC5hPTIwKSx0LmI8PTAmJih0LmI9MjApKSx0fWZ1bmN0aW9uIGtiKGUpe0NkKCk7dmFyIHQsbjtyZXR1cm4gbj1ZcihlKSx0PVlyKHViKGUsMzIpKSx0IT0wP25ldyBxb3Qobix0KTpuPjEwfHxuPDA/bmV3IFFnKDEsbik6eTZ0W25dfWZ1bmN0aW9uIFJOKGUsdCl7dmFyIG47cmV0dXJuIHdjKGUpJiZ3Yyh0KSYmKG49ZSV0LF9QPG4mJm48Wm0pP246bWIoKE5rZSh3YyhlKT9NZihlKTplLHdjKHQpP01mKHQpOnQsITApLE5iKSl9ZnVuY3Rpb24gTUEoZSx0KXt2YXIgbjtiRG4odCksbj1sKFEoZSwoTnQoKSxwVykpLDI4MyksbiYmcnQoZSxwVyxJN24obikpLFlwKGUuYyksWXAoZS5mKSxBNmUoZS5kKSxBNmUobChRKGUsd1cpLDIxNCkpfWZ1bmN0aW9uIE01bihlKXt2YXIgdCxuLHIsYTtmb3Iocj1ja24oZSksVnMocixqOHQpLGE9ZS5kLGEuYy5sZW5ndGg9MCxuPW5ldyBHKHIpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSw0NjYpLHJhKGEsdC5iKX1mdW5jdGlvbiBZY2UoZSl7dmFyIHQ7ZS5jIT0wJiYodD1sKGp0KGUuYSxlLmIpLDI5NCksdC5iPT0xPygrK2UuYixlLmI8ZS5hLmMubGVuZ3RoJiZFcihsKGp0KGUuYSxlLmIpLDI5NCkpKTotLXQuYiwtLWUuYyl9ZnVuY3Rpb24gRDVuKGUpe3ZhciB0O3Q9ZS5hO2RvIHQ9bCh4cihuZXcgaHIoZHIocXModCkuYS5LYygpLG5ldyBqKSkpLDE4KS5kLmksdC5rPT0oWm4oKSxBYSkmJnZ0KGUuZSx0KTt3aGlsZSh0Lms9PShabigpLEFhKSl9ZnVuY3Rpb24gUDF0KGUpe3RoaXMuZT1XZShWcixkaSwyOCxlLmxlbmd0aCwxNSwxKSx0aGlzLmM9V2UoaWgscGcsMjgsZS5sZW5ndGgsMTYsMSksdGhpcy5iPVdlKGloLHBnLDI4LGUubGVuZ3RoLDE2LDEpLHRoaXMuZj0wfWZ1bmN0aW9uIEk1bihlKXt2YXIgdCxuO2ZvcihlLmo9V2UoTmEsWm8sMjgsZS5wLmMubGVuZ3RoLDE1LDEpLG49bmV3IEcoZS5wKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMTApLGUualt0LnBdPXQuby5iL2UuaX1mdW5jdGlvbiBPNW4oZSx0KXt2YXIgbixyLGEsbztmb3Iobz10LmIuYixlLmE9bmV3IG9zLGUuYj1XZShWcixkaSwyOCxvLDE1LDEpLG49MCxhPVJyKHQuYiwwKTthLmIhPWEuZC5jOylyPWwoQnIoYSksNDApLHIuZz1uKyt9ZnVuY3Rpb24gQjF0KGUsdCxuKXt2YXIgcixhLG8sZjtmb3Iobz10LWUuZSxmPW4tZS5mLGE9bmV3IEcoZS5hKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTcyKSxxTihyLHIucytvLHIudCtmKTtlLmU9dCxlLmY9bn1mdW5jdGlvbiBqTihlLHQpe3ZhciBuLHI7Zm9yKHI9dC5sZW5ndGgsbj0wO248cjtuKz0yKUV1KGUsKFhuKG4sdC5sZW5ndGgpLHQuY2hhckNvZGVBdChuKSksKFhuKG4rMSx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KG4rMSkpKX1mdW5jdGlvbiBONW4oZSx0KXt0LlVnKCJNaW4gU2l6ZSBQb3N0cHJvY2Vzc2luZyIsMSksSGkoZSwodWcoKSxUNCksYi5NYXRoLm1heCh6ZShHZShhdChlLFQ0KSkpLHplKEdlKGF0KGUsbU0pKSkpKSx0LlZnKCl9ZnVuY3Rpb24gQjhlKCl7QjhlPVUsWk5lPW5ldyBsdygxNSksYV90PW5ldyBIYSgocGkoKSxfMiksWk5lKSxjX3Q9bmV3IEhhKEV2LDE1KSxvX3Q9bmV3IEhhKHpnZSxwdCgwKSksc190PW5ldyBIYShaNixsVCl9ZnVuY3Rpb24gbWgoKXttaD1VLGlGPW5ldyBFcSgiUE9SVFMiLDApLEN2PW5ldyBFcSgiUE9SVF9MQUJFTFMiLDEpLHJGPW5ldyBFcSgiTk9ERV9MQUJFTFMiLDIpLEE0PW5ldyBFcSgiTUlOSU1VTV9TSVpFIiwzKX1mdW5jdGlvbiBXVigpe1dWPVUsUkI9bmV3IEJzZSgiUDFfV0lEVEhfQVBQUk9YSU1BVElPTiIsMCksVlc9bmV3IEJzZSgiUDJfUEFDS0lORyIsMSkscmdlPW5ldyBCc2UoIlAzX1dISVRFU1BBQ0VfRUxJTUlOQVRJT04iLDIpfWZ1bmN0aW9uIEYxdChlKXtpZihlLmI9PW51bGwpe2Zvcig7ZS5hLk9iKCk7KWlmKGUuYj1lLmEuUGIoKSwhbChlLmIsNTQpLkpoKCkpcmV0dXJuITA7cmV0dXJuIGUuYj1udWxsLCExfWVsc2UgcmV0dXJuITB9ZnVuY3Rpb24gT0UoZSx0LG4pe3ZhciByLGEsbztmb3IoYT1udWxsLG89ZS5iO287KXtpZihyPWUuYS5OZSh0LG8uZCksbiYmcj09MClyZXR1cm4gbztyPj0wP289by5hWzFdOihhPW8sbz1vLmFbMF0pfXJldHVybiBhfWZ1bmN0aW9uICROKGUsdCxuKXt2YXIgcixhLG87Zm9yKGE9bnVsbCxvPWUuYjtvOyl7aWYocj1lLmEuTmUodCxvLmQpLG4mJnI9PTApcmV0dXJuIG87cjw9MD9vPW8uYVswXTooYT1vLG89by5hWzFdKX1yZXR1cm4gYX1mdW5jdGlvbiBQNW4oZSx0LG4scil7dmFyIGEsbyxmO3JldHVybiBhPSExLFJNbihlLmYsbixyKSYmKHI2bihlLmYsZS5hW3RdW25dLGUuYVt0XVtyXSksbz1lLmFbdF0sZj1vW3JdLG9bcl09b1tuXSxvW25dPWYsYT0hMCksYX1mdW5jdGlvbiBSMXQoZSx0LG4pe3ZhciByLGEsbyxmO2ZvcihhPWwoY3IoZS5iLG4pLDE4Mykscj0wLGY9bmV3IEcodC5qKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMTEzKSxhW28uZC5wXSYmKytyO3JldHVybiByfWZ1bmN0aW9uIEY4ZShlLHQsbil7dmFyIHIsYTtyPWwoeHUodUMsdCksMTIyKSxhPWwoeHUoS00sdCksMTIyKSxuPyhyYyh1QyxlLHIpLHJjKEtNLGUsYSkpOihyYyhLTSxlLHIpLHJjKHVDLGUsYSkpfWZ1bmN0aW9uIGoxdChlLHQpe3ZhciBuLHIsYSxvO3JldHVybiBuPXQ+PjUsdCY9MzEsYT1lLmQrbisodD09MD8wOjEpLHI9V2UoVnIsZGksMjgsYSwxNSwxKSxPeG4ocixlLmEsbix0KSxvPW5ldyBJbShlLmUsYSxyKSxpQShvKSxvfWZ1bmN0aW9uIEI1bihlLHQpe3ZhciBuLHIsYTtmb3Iocj1uZXcgaHIoZHIocXMoZSkuYS5LYygpLG5ldyBqKSk7anIocik7KWlmKG49bCh4cihyKSwxOCksYT1uLmQuaSxhLmM9PXQpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gUjhlKGUsdCxuKXt2YXIgcixhLG8sZixnO3JldHVybiBmPWUuayxnPXQuayxyPW5bZi5nXVtnLmddLGE9R2UoUHkoZSxyKSksbz1HZShQeSh0LHIpKSxiLk1hdGgubWF4KChucihhKSxhKSwobnIobyksbykpfWZ1bmN0aW9uIEY1bigpe3JldHVybiBFcnJvci5zdGFja1RyYWNlTGltaXQ+MD8oYi5FcnJvci5zdGFja1RyYWNlTGltaXQ9RXJyb3Iuc3RhY2tUcmFjZUxpbWl0PTY0LCEwKToic3RhY2siaW4gbmV3IEVycm9yfWZ1bmN0aW9uIFI1bihlLHQpe3JldHVybiBBMSgpLEExKCksZjAoQWIpLChiLk1hdGguYWJzKGUtdCk8PUFifHxlPT10fHxpc05hTihlKSYmaXNOYU4odCk/MDplPHQ/LTE6ZT50PzE6dXcoaXNOYU4oZSksaXNOYU4odCkpKT4wfWZ1bmN0aW9uIGo4ZShlLHQpe3JldHVybiBBMSgpLEExKCksZjAoQWIpLChiLk1hdGguYWJzKGUtdCk8PUFifHxlPT10fHxpc05hTihlKSYmaXNOYU4odCk/MDplPHQ/LTE6ZT50PzE6dXcoaXNOYU4oZSksaXNOYU4odCkpKTwwfWZ1bmN0aW9uICQxdChlLHQpe3JldHVybiBBMSgpLEExKCksZjAoQWIpLChiLk1hdGguYWJzKGUtdCk8PUFifHxlPT10fHxpc05hTihlKSYmaXNOYU4odCk/MDplPHQ/LTE6ZT50PzE6dXcoaXNOYU4oZSksaXNOYU4odCkpKTw9MH1mdW5jdGlvbiBYY2UoZSx0KXtmb3IodmFyIG49MDshdFtuXXx8dFtuXT09IiI7KW4rKztmb3IodmFyIHI9dFtuKytdO248dC5sZW5ndGg7bisrKSF0W25dfHx0W25dPT0iInx8KHIrPWUrdFtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gejF0KGUpe3ZhciB0LG47cmV0dXJuIHQ9bChLbihlLmEsNCksMTI5KSx0IT1udWxsPyhuPVdlKGVwZSxyMGUsNDI0LHQubGVuZ3RoLDAsMSkscHUodCwwLG4sMCx0Lmxlbmd0aCksbik6TV90fWZ1bmN0aW9uIHExdChlKXt2YXIgdCxuLHIsYSxvO2lmKGU9PW51bGwpcmV0dXJuIG51bGw7Zm9yKG89bmV3IGJ0LG49VGNlKGUpLHI9MCxhPW4ubGVuZ3RoO3I8YTsrK3IpdD1uW3JdLHZ0KG8sVHUodCwhMCkpO3JldHVybiBvfWZ1bmN0aW9uIEgxdChlKXt2YXIgdCxuLHIsYSxvO2lmKGU9PW51bGwpcmV0dXJuIG51bGw7Zm9yKG89bmV3IGJ0LG49VGNlKGUpLHI9MCxhPW4ubGVuZ3RoO3I8YTsrK3IpdD1uW3JdLHZ0KG8sVHUodCwhMCkpO3JldHVybiBvfWZ1bmN0aW9uIFYxdChlKXt2YXIgdCxuLHIsYSxvO2lmKGU9PW51bGwpcmV0dXJuIG51bGw7Zm9yKG89bmV3IGJ0LG49VGNlKGUpLHI9MCxhPW4ubGVuZ3RoO3I8YTsrK3IpdD1uW3JdLHZ0KG8sVHUodCwhMCkpO3JldHVybiBvfWZ1bmN0aW9uIFUxdChlLHQpe3ZhciBuLHIsYTtpZihlLmMpTXcoZS5jLHQpO2Vsc2UgZm9yKG49dC1naChlKSxhPW5ldyBHKGUuYSk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDE2MyksVTF0KHIsZ2gocikrbil9ZnVuY3Rpb24gRzF0KGUsdCl7dmFyIG4scixhO2lmKGUuYylEdyhlLmMsdCk7ZWxzZSBmb3Iobj10LXdsKGUpLGE9bmV3IEcoZS5kKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTYzKSxHMXQocix3bChyKStuKX1mdW5jdGlvbiBJZihlLHQsbil7dmFyIHIsYSxvLGY7Zm9yKG89dCtuLEdhKHQsbyxlLmxlbmd0aCksZj0iIixhPXQ7YTxvOylyPWIuTWF0aC5taW4oYSsxZTQsbyksZis9ZXBuKGUuc2xpY2UoYSxyKSksYT1yO3JldHVybiBmfWZ1bmN0aW9uICQ4ZShlKXtzd2l0Y2goZS5nKXtjYXNlIDEyOmNhc2UgMTM6Y2FzZSAxNDpjYXNlIDE1OmNhc2UgMTY6Y2FzZSAxNzpjYXNlIDE4OmNhc2UgMTk6Y2FzZSAyMDpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBsMigpe2wyPVUsQTFlPW5ldyB1TyhIRWUsMCksYkxlPW5ldyB1TyhXM3QsMSksTDFlPW5ldyB1TygkaGUsMiksQlQ9bmV3IHVPKCRFZSwzKSxQVD1uZXcgdU8oIkdSRUVEWV9NT0RFTF9PUkRFUiIsNCl9ZnVuY3Rpb24gRWQoKXtFZD1VLEUyPW5ldyBtcShJZCwwKSxDRGU9bmV3IG1xKCJOT0RFU19BTkRfRURHRVMiLDEpLHlkZT1uZXcgbXEoIlBSRUZFUl9FREdFUyIsMikseGRlPW5ldyBtcSgiUFJFRkVSX05PREVTIiwzKX1mdW5jdGlvbiB6OGUoZSx0LG4scixhLG8pe3RoaXMuYT1lLHRoaXMuYz10LHRoaXMuYj1uLHRoaXMuZj1yLHRoaXMuZD1hLHRoaXMuZT1vLHRoaXMuYz4wJiZ0aGlzLmI+MCYmKHRoaXMuZz1hSCh0aGlzLmMsdGhpcy5iLHRoaXMuYSkpfWZ1bmN0aW9uIGo1bihlLHQpe3ZhciBuPWUuYSxyO3Q9U3RyaW5nKHQpLG4uaGFzT3duUHJvcGVydHkodCkmJihyPW5bdF0pO3ZhciBhPSh2Y2UoKSxfMGUpW3R5cGVvZiByXSxvPWE/YShyKTpaN2UodHlwZW9mIHIpO3JldHVybiBvfWZ1bmN0aW9uIE5FKGUpe3ZhciB0LG4scjtpZihyPW51bGwsdD1QZCBpbiBlLmEsbj0hdCxuKXRocm93IHVlKG5ldyBkZCgiRXZlcnkgZWxlbWVudCBtdXN0IGhhdmUgYW4gaWQuIikpO3JldHVybiByPXh4KFdnKGUsUGQpKSxyfWZ1bmN0aW9uIGp3KGUpe3ZhciB0LG47Zm9yKG49ZnB0KGUpLHQ9bnVsbDtlLmM9PTI7KUxpKGUpLHR8fCh0PShEaSgpLERpKCksbmV3IEJfKDIpKSxRbSh0LG4pLG49dCksbi5KbShmcHQoZSkpO3JldHVybiBufWZ1bmN0aW9uIFlWKGUsdCl7dmFyIG4scixhO3JldHVybiBlLl9qKCkscj10PT1udWxsPzA6ZXModCksYT0ociZJaSklZS5kLmxlbmd0aCxuPXk5ZShlLGEscix0KSxuPyhXaHQoZSxuKSxuLm1kKCkpOm51bGx9ZnVuY3Rpb24gSzF0KGUsdCl7cmV0dXJuIGUuZT50LmU/MTplLmU8dC5lPy0xOmUuZD50LmQ/ZS5lOmUuZDx0LmQ/LXQuZTplLmUqVzdlKGUuYSx0LmEsZS5kKX1mdW5jdGlvbiBXMXQoZSl7cmV0dXJuIGU+PTQ4JiZlPDQ4K2IuTWF0aC5taW4oMTAsMTApP2UtNDg6ZT49OTcmJmU8OTc/ZS05NysxMDplPj02NSYmZTw2NT9lLTY1KzEwOi0xfWZ1bmN0aW9uICQ1bihlLHQpe2lmKHQuYz09ZSlyZXR1cm4gdC5kO2lmKHQuZD09ZSlyZXR1cm4gdC5jO3Rocm93IHVlKG5ldyBZbigiSW5wdXQgZWRnZSBpcyBub3QgY29ubmVjdGVkIHRvIHRoZSBpbnB1dCBwb3J0LiIpKX1mdW5jdGlvbiB6NW4oZSl7aWYoUVYod1QsZSkpcmV0dXJuIEhuKCksU1Q7aWYoUVYoRmZlLGUpKXJldHVybiBIbigpLFBiO3Rocm93IHVlKG5ldyBZbigiRXhwZWN0aW5nIHRydWUgb3IgZmFsc2UiKSl9ZnVuY3Rpb24gcThlKGUpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSBJbGU6cmV0dXJuIHMyKGUpO2Nhc2UgUWtlOnJldHVybiBqOChlKTtjYXNlIEN4OnJldHVybiBBcnQoZSk7ZGVmYXVsdDpyZXR1cm4gZT09bnVsbD8wOmZ3KGUpfX1mdW5jdGlvbiBUZChlLHQpe2lmKGUuYTwwKXRocm93IHVlKG5ldyBuYygiRGlkIG5vdCBjYWxsIGJlZm9yZSguLi4pIG9yIGFmdGVyKC4uLikgYmVmb3JlIGNhbGxpbmcgYWRkKC4uLikuIikpO3JldHVybiBCeWUoZSxlLmEsdCksZX1mdW5jdGlvbiBIOGUoZSl7cmV0dXJuIEJIKCksRGUoZSwxNjIpP2woY3IobEYsQzZ0KSwyOTUpLlJnKGUpOkh1KGxGLGJoKGUpKT9sKGNyKGxGLGJoKGUpKSwyOTUpLlJnKGUpOm51bGx9ZnVuY3Rpb24gS3UoZSl7dmFyIHQsbjtyZXR1cm4gZS5EYiYzMnx8KG49KHQ9bChLbihlLDE2KSwyOSkseXIodHx8ZS5paSgpKS15cihlLmlpKCkpKSxuIT0wJiZweChlLDMyLFdlKHdhLFJuLDEsbiw1LDEpKSksZX1mdW5jdGlvbiBweChlLHQsbil7dmFyIHI7ZS5EYiZ0P249PW51bGw/VEVuKGUsdCk6KHI9bXVlKGUsdCkscj09LTE/ZS5FYj1uOlRzKGptKGUuRWIpLHIsbikpOm4hPW51bGwmJktDbihlLHQsbil9ZnVuY3Rpb24gcTVuKGUsdCxuLHIpe3ZhciBhLG87dC5jLmxlbmd0aCE9MCYmKGE9RlRuKG4sciksbz1Sa24odCksSXMobFYobmV3IGJuKG51bGwsbmV3IGtuKG8sMSkpLG5ldyBhOCksbmV3IENhdChlLG4sYSxyKSkpfWZ1bmN0aW9uIEg1bihlLHQpe3ZhciBuLHIsYSxvO3JldHVybiByPWUuYS5sZW5ndGgtMSxuPXQtZS5iJnIsbz1lLmMtdCZyLGE9ZS5jLWUuYiZyLEVydChuPGEpLG4+PW8/KHp5bihlLHQpLC0xKTooJHluKGUsdCksMSl9ZnVuY3Rpb24gWFYoZSl7dmFyIHQsbixyO2lmKHI9ZS5KaCgpLCFyKWZvcih0PTAsbj1lLlBoKCk7bjtuPW4uUGgoKSl7aWYoKyt0Pm9oZSlyZXR1cm4gbi5RaCgpO2lmKHI9bi5KaCgpLHJ8fG49PWUpYnJlYWt9cmV0dXJuIHJ9ZnVuY3Rpb24gWTF0KGUsdCl7dmFyIG47cmV0dXJuIHFlKHQpPT09cWUoZSk/ITA6IURlKHQsMjEpfHwobj1sKHQsMjEpLG4uZ2MoKSE9ZS5nYygpKT8hMTplLkljKG4pfWZ1bmN0aW9uIFY1bihlLHQpe3JldHVybiBlLmU8dC5lPy0xOmUuZT50LmU/MTplLmY8dC5mPy0xOmUuZj50LmY/MTplcyhlKS1lcyh0KX1mdW5jdGlvbiBRVihlLHQpe3JldHVybiBucihlKSx0PT1udWxsPyExOnZuKGUsdCk/ITA6ZS5sZW5ndGg9PXQubGVuZ3RoJiZ2bihlLnRvTG93ZXJDYXNlKCksdC50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBhcChlKXt2YXIgdCxuO3JldHVybiBpdShlLC0xMjkpPjAmJml1KGUsMTI4KTwwPyhaaXQoKSx0PVlyKGUpKzEyOCxuPW5fZVt0XSwhbiYmKG49bl9lW3RdPW5ldyBPcihlKSksbik6bmV3IE9yKGUpfWZ1bmN0aW9uIEttKCl7S209VSxjND1uZXcgZHEoSWQsMCksYkFlPW5ldyBkcSgiSU5TSURFX1BPUlRfU0lERV9HUk9VUFMiLDEpLG8xZT1uZXcgZHEoIkdST1VQX01PREVMX09SREVSIiwyKSxjMWU9bmV3IGRxKCRFZSwzKX1mdW5jdGlvbiBVNW4oZSl7dmFyIHQ7cmV0dXJuIGUuYnx8UnVuKGUsKHQ9RmZuKGUuZSxlLmEpLCF0fHwhdm4oRmZlLG4xKCghdC5iJiYodC5iPW5ldyBkaCgoVG4oKSxObyksWWMsdCkpLHQuYiksInF1YWxpZmllZCIpKSkpLGUuY31mdW5jdGlvbiBHNW4oZSx0KXt2YXIgbixyO2ZvcihuPShYbih0LGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQodCkpLHI9dCsxO3I8ZS5sZW5ndGgmJihYbihyLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQocik9PW4pOykrK3I7cmV0dXJuIHItdH1mdW5jdGlvbiBLNW4oZSx0KXsoIXQmJmNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQhPW51bGw/Y29uc29sZS5ncm91cENvbGxhcHNlZDpjb25zb2xlLmdyb3VwPz9jb25zb2xlLmxvZykuY2FsbChjb25zb2xlLGUpfWZ1bmN0aW9uIFc1bihlLHQsbixyKXtyPT1lLGwobi5iLDY4KSxsKG4uYiw2OCksbChyLmIsNjgpLGwoci5iLDY4KS5jLmIsRDZlKHIsdCxlKX1mdW5jdGlvbiBZNW4oZSl7dmFyIHQsbjtmb3IodD1uZXcgRyhlLmcpO3QuYTx0LmMuYy5sZW5ndGg7KWwocmUodCksNTY4KTtuPW5ldyBsYnQoZS5nLHplKGUuYSksZS5jKSxFRG4obiksZS5nPW4uYixlLmQ9bi5hfWZ1bmN0aW9uIFgxdChlLHQsbil7dmFyIHIsYSxvO2ZvcihvPW5ldyBHKG4uYSk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDIyNSkscj1uZXcgTnEobChjcihlLmEsYS5iKSw2OCkpLHZ0KHQuYSxyKSxYMXQoZSxyLGEpfWZ1bmN0aW9uIFg1bihlLHQsbil7dmFyIHIsYSxvO3JldHVybiByPWwoT2UoWGwoZS5hKSx0KSw4OSksbz0oYT1yLmMsYXx8KFRuKCksdGQpKSwoby5WaCgpP3liKGUuYixsKG8sNTQpKTpvKT09bj9qVShyKTpzRShyLG4pLG99ZnVuY3Rpb24gVjhlKGUsdCxuKXt0LmI9Yi5NYXRoLm1heCh0LmIsLW4uYSksdC5jPWIuTWF0aC5tYXgodC5jLG4uYS1lLmEpLHQuZD1iLk1hdGgubWF4KHQuZCwtbi5iKSx0LmE9Yi5NYXRoLm1heCh0LmEsbi5iLWUuYil9ZnVuY3Rpb24gVThlKGUsdCxuKXt0aGlzLmM9ZSx0aGlzLmY9bmV3IGJ0LHRoaXMuZT1uZXcgcWEsdGhpcy5qPW5ldyBHNGUsdGhpcy5uPW5ldyBHNGUsdGhpcy5iPXQsdGhpcy5nPW5ldyBlZih0LmMsdC5kLHQuYix0LmEpLHRoaXMuYT1ufWZ1bmN0aW9uIFFjZShlKXt2YXIgdCxuLHIsYTtmb3IodGhpcy5hPW5ldyBiZCx0aGlzLmQ9bmV3IEtzLHRoaXMuZT0wLG49ZSxyPTAsYT1uLmxlbmd0aDtyPGE7KytyKXQ9bltyXSwhdGhpcy5mJiYodGhpcy5mPXQpLHdvZSh0aGlzLHQpfWZ1bmN0aW9uIFExdChlKXtDZCgpLGUubGVuZ3RoPT0wPyh0aGlzLmU9MCx0aGlzLmQ9MSx0aGlzLmE9aGUobGUoVnIsMSksZGksMjgsMTUsWzBdKSk6KHRoaXMuZT0xLHRoaXMuZD1lLmxlbmd0aCx0aGlzLmE9ZSxpQSh0aGlzKSl9ZnVuY3Rpb24gREEoZSx0LG4pe0pRZS5jYWxsKHRoaXMpLHRoaXMuYT1XZShHNnQsd0VlLDIxNywodDEoKSxoZShsZShzNCwxKSxpdCwyMzcsMCxbR2MsJHUsS2NdKSkubGVuZ3RoLDAsMSksdGhpcy5iPWUsdGhpcy5kPXQsdGhpcy5jPW59ZnVuY3Rpb24gUTVuKGUpe3ZhciB0LG4scixhLG8sZjtmb3IoZj1sKFEoZSwoZnQoKSx6aSkpLDEyKSxydChmLHpULGUuaS5uLmIpLHQ9a2QoZS5lKSxyPXQsYT0wLG89ci5sZW5ndGg7YTxvOysrYSluPXJbYV0sRmEobixmKX1mdW5jdGlvbiBKNW4oZSl7dmFyIHQsbixyLGEsbyxmO2ZvcihuPWwoUShlLChmdCgpLHppKSksMTIpLHJ0KG4selQsZS5pLm4uYiksdD1rZChlLmcpLGE9dCxvPTAsZj1hLmxlbmd0aDtvPGY7KytvKXI9YVtvXSxwbyhyLG4pfWZ1bmN0aW9uIFo1bihlLHQpe2ZvZSgpO3ZhciBuLHI7Zm9yKHI9bmV3IGhyKGRyKHNwKGUpLmEuS2MoKSxuZXcgaikpO2pyKHIpOylpZihuPWwoeHIociksMTgpLG4uZC5pPT10fHxuLmMuaT09dClyZXR1cm4gbjtyZXR1cm4gbnVsbH1mdW5jdGlvbiBKMXQoZSx0KXt2YXIgbixyO3JldHVybiBuPXQucWkoZS5hKSxuJiYocj1laShuMSgoIW4uYiYmKG4uYj1uZXcgZGgoKFRuKCksTm8pLFljLG4pKSxuLmIpLF9pKSksciE9bnVsbCk/cjp0LnhlKCl9ZnVuY3Rpb24gZTZuKGUsdCl7dmFyIG4scjtyZXR1cm4gbj10LnFpKGUuYSksbiYmKHI9ZWkobjEoKCFuLmImJihuLmI9bmV3IGRoKChUbigpLE5vKSxZYyxuKSksbi5iKSxfaSkpLHIhPW51bGwpP3I6dC54ZSgpfWZ1bmN0aW9uIHQ2bihlLHQpe3ZhciBuLHI7cmV0dXJuIG49cnUoZS5hLmMucCx0LmEuYy5wKSxuIT0wP246KHI9cnUoZS5hLmQuaS5wLHQuYS5kLmkucCksciE9MD9yOnJ1KHQuYS5kLnAsZS5hLmQucCkpfWZ1bmN0aW9uIG42bihlLHQpe3ZhciBuLHIsYSxvO2ZvcihyPTAsYT10LmdjKCk7cjxhOysrciluPXQuVGwociksRGUobiwxMDIpJiZsKG4sMTkpLkJiJmV1JiYobz10LlVsKHIpLG8hPW51bGwmJmNsZShlLGwobyw1OCkpKX1mdW5jdGlvbiBaMXQoZSx0KXt2YXIgbixyLGE7aWYodnQod0ssZSksdC5GYyhlKSxuPWwoY3IoWDBlLGUpLDIxKSxuKWZvcihhPW4uS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMjcpLGdjKHdLLHIsMCkhPS0xfHxaMXQocix0KX1mdW5jdGlvbiByNm4oZSx0LG4pe3ZhciByLGE7T3VlKGUuZSx0LG4sKEN0KCksZXIpKSxPdWUoZS5pLHQsbixhciksZS5hJiYoYT1sKFEodCwoZnQoKSx6aSkpLDEyKSxyPWwoUShuLHppKSwxMiksdm9lKGUuZyxhLHIpKX1mdW5jdGlvbiBlZHQoZSx0LG4pe3ZhciByLGEsbztyPXQuYy5wLG89dC5wLGUuYltyXVtvXT1uZXcgS2F0KGUsdCksbiYmKGUuYVtyXVtvXT1uZXcgUFllKHQpLGE9bChRKHQsKGZ0KCksdTMpKSwxMCksYSYmeG4oZS5kLGEsdCkpfWZ1bmN0aW9uIGk2bihlLHQsbil7dmFyIHIsYSxvLGY7cmV0dXJuIG89dC5qLGY9bi5qLG8hPWY/by5nLWYuZzoocj1lLmZbdC5wXSxhPWUuZltuLnBdLHI9PTAmJmE9PTA/MDpyPT0wPy0xOmE9PTA/MTpZaShyLGEpKX1mdW5jdGlvbiBzNm4oKXt2YXIgZTtyZXR1cm4gYUshPTAmJihlPURhdGUubm93KCksZS1sNnQ+MmUzJiYobDZ0PWUsb0s9Yi5zZXRUaW1lb3V0KEh1biwxMCkpKSxhSysrPT0wPyhzd24oKFh3ZSgpLEdTZSkpLCEwKTohMX1mdW5jdGlvbiBhNm4oZSx0LG4pe3ZhciByOyhJNnQ/KHU1bihlKSwhMCk6TzZ0fHxQNnQ/KERrKCksITApOk42dCYmKERrKCksITEpKSYmKHI9bmV3IGZpdCh0KSxyLmI9bixnOW4oZSxyKSl9ZnVuY3Rpb24gSmNlKGUsdCl7dmFyIG47bj0hZS5BLkhjKChtaCgpLEN2KSl8fGUucT09KFJhKCksTXUpLGUudS5IYygoUmwoKSx2cCkpP24/WURuKGUsdCk6VnZ0KGUsdCk6ZS51LkhjKFliKSYmKG4/cERuKGUsdCk6c3d0KGUsdCkpfWZ1bmN0aW9uIHRkdChlKXt2YXIgdDtxZShhdChlLChwaSgpLG43KSkpPT09cWUoKHJwKCksb1kpKSYmKGRzKGUpPyh0PWwoYXQoZHMoZSksbjcpLDM0NiksSGkoZSxuNyx0KSk6SGkoZSxuNyxETSkpfWZ1bmN0aW9uIG82bihlKXt2YXIgdCxuO3JldHVybiBucyhlLmQuaSwoTnQoKSxIVCkpPyh0PWwoUShlLmMuaSxIVCksMTcpLG49bChRKGUuZC5pLEhUKSwxNykscnUodC5hLG4uYSk+MCk6ITF9ZnVuY3Rpb24gbmR0KGUsdCxuKXtyZXR1cm4gbmV3IGVmKGIuTWF0aC5taW4oZS5hLHQuYSktbi8yLGIuTWF0aC5taW4oZS5iLHQuYiktbi8yLGIuTWF0aC5hYnMoZS5hLXQuYSkrbixiLk1hdGguYWJzKGUuYi10LmIpK24pfWZ1bmN0aW9uIHJkdChlKXt2YXIgdDt0aGlzLmQ9bmV3IGJ0LHRoaXMuaj1uZXcgcWEsdGhpcy5nPW5ldyBxYSx0PWUuZy5iLHRoaXMuZj1sKFEoZW8odCksKE50KCksUmgpKSw4OCksdGhpcy5lPXplKEdlKHRVKHQseTQpKSl9ZnVuY3Rpb24gaWR0KGUpe3RoaXMuZD1uZXcgYnQsdGhpcy5lPW5ldyBlMix0aGlzLmM9V2UoVnIsZGksMjgsKEN0KCksaGUobGUoT28sMSksYXUsNjQsMCxbUGMsUW4sYXIsRHIsZXJdKSkubGVuZ3RoLDE1LDEpLHRoaXMuYj1lfWZ1bmN0aW9uIEc4ZShlLHQsbil7dmFyIHI7c3dpdGNoKHI9bltlLmddW3RdLGUuZyl7Y2FzZSAxOmNhc2UgMzpyZXR1cm4gbmV3IGx0KDAscik7Y2FzZSAyOmNhc2UgNDpyZXR1cm4gbmV3IGx0KHIsMCk7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gc2R0KGUsdCxuKXt2YXIgcixhO2E9bChHTyh0LmYpLDIwNSk7dHJ5e2EucmYoZSxuKSxsYXQodC5mLGEpfWNhdGNoKG8pe3Rocm93IG89YnMobyksRGUobywxMDMpPyhyPW8sdWUocikpOnVlKG8pfX1mdW5jdGlvbiBhZHQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdztyZXR1cm4gcj1udWxsLGc9RmtlKGhFKCksdCksbz1udWxsLGcmJihhPW51bGwsdz1Qa2UoZyxuKSxmPW51bGwsdyE9bnVsbCYmKGY9ZS5xZihnLHcpKSxhPWYsbz1hKSxyPW8scn1mdW5jdGlvbiBaY2UoZSx0LG4scil7dmFyIGE7aWYoYT1lLmxlbmd0aCx0Pj1hKXJldHVybiBhO2Zvcih0PXQ+MD90OjA7dDxhJiYhbWNlKChYbih0LGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQodCkpLG4scik7dCsrKTtyZXR1cm4gdH1mdW5jdGlvbiBqMShlLHQpe3ZhciBuLHI7Zm9yKHI9ZS5jLmxlbmd0aCx0Lmxlbmd0aDxyJiYodD1WeihuZXcgQXJyYXkociksdCkpLG49MDtuPHI7KytuKVRzKHQsbixlLmNbbl0pO3JldHVybiB0Lmxlbmd0aD5yJiZUcyh0LHIsbnVsbCksdH1mdW5jdGlvbiBvZHQoZSx0KXt2YXIgbixyO2ZvcihyPWUuYS5sZW5ndGgsdC5sZW5ndGg8ciYmKHQ9VnoobmV3IEFycmF5KHIpLHQpKSxuPTA7bjxyOysrbilUcyh0LG4sZS5hW25dKTtyZXR1cm4gdC5sZW5ndGg+ciYmVHModCxyLG51bGwpLHR9ZnVuY3Rpb24gUEUoZSx0KXt2YXIgbixyO2lmKCsrZS5qLHQhPW51bGwmJihuPShyPWUuYS5DYixEZShyLDk5KT9sKHIsOTkpLnRoKCk6bnVsbCksZkVuKHQsbikpKXtweChlLmEsNCxuKTtyZXR1cm59cHgoZS5hLDQsbCh0LDEyOSkpfWZ1bmN0aW9uIGM2bihlKXt2YXIgdDtpZihlPT1udWxsKXJldHVybiBudWxsO2lmKHQ9ZFRuKFR1KGUsITApKSx0PT1udWxsKXRocm93IHVlKG5ldyBKaWUoIkludmFsaWQgaGV4QmluYXJ5IHZhbHVlOiAnIitlKyInIikpO3JldHVybiB0fWZ1bmN0aW9uIEpWKGUsdCxuKXt2YXIgcjt0LmEubGVuZ3RoPjAmJih2dChlLmIsbmV3IEFpdCh0LmEsbikpLHI9dC5hLmxlbmd0aCwwPHI/dC5hPXRmKHQuYSwwLDApOjA+ciYmKHQuYSs9TW50KFdlKGtmLEFkLDI4LC1yLDE1LDEpKSkpfWZ1bmN0aW9uIGNkdChlLHQsbil7dmFyIHIsYSxvO2lmKCFuW3QuZF0pZm9yKG5bdC5kXT0hMCxhPW5ldyBHKFo1KHQpKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMjE4KSxvPUhWKHIsdCksY2R0KGUsbyxuKX1mdW5jdGlvbiBoMihlLHQsbil7dmFyIHIsYSxvO3JldHVybiBhPWwoY3IoZS5lLHQpLDQwMCksYT8obz1aeWUoYSxuKSxJbnQoZSxhKSxvKToocj1uZXcgQTRlKGUsdCxuKSxraShlLmUsdCxyKSxpb3QociksbnVsbCl9ZnVuY3Rpb24gdTZuKGUsdCxuLHIpe3ZhciBhLG8sZjtyZXR1cm4gYT1uZXcgWmcoZS5lLDEsMTMsKGY9dC5jLGZ8fChUbigpLHRkKSksKG89bi5jLG98fChUbigpLHRkKSksZjIoZSx0KSwhMSkscj9yLm5qKGEpOnI9YSxyfWZ1bmN0aW9uIGV1ZSgpe3JldHVybiBZVSgpLGhlKGxlKHc3dCwxKSxpdCwxNjQsMCxbbTd0LGI3dCx2N3QsYzd0LG83dCx1N3QsZjd0LGg3dCxsN3QscDd0LGc3dCxkN3Qsczd0LGk3dCxhN3Qsbjd0LHQ3dCxyN3QsWjZ0LEo2dCxlN3QsSDBlXSl9ZnVuY3Rpb24gQkUoZSl7c3dpdGNoKGUuZyl7Y2FzZSA0OnJldHVybiBuZXcgbHQoMCwtMSk7Y2FzZSAxOnJldHVybiBuZXcgbHQoMSwwKTtjYXNlIDI6cmV0dXJuIG5ldyBsdCgtMSwwKTtkZWZhdWx0OnJldHVybiBuZXcgbHQoMCwxKX19ZnVuY3Rpb24gdHVlKGUpe3N3aXRjaChlLmcpe2Nhc2UgMTpyZXR1cm4gSnMoKSx3ZjtjYXNlIDQ6cmV0dXJuIEpzKCksdWM7Y2FzZSAyOnJldHVybiBKcygpLHZjO2Nhc2UgMzpyZXR1cm4gSnMoKSxRMX1yZXR1cm4gSnMoKSxKMX1mdW5jdGlvbiBsNm4oZSl7dmFyIHQ7c3dpdGNoKHQ9ZS5oaihudWxsKSx0KXtjYXNlIDEwOnJldHVybiAwO2Nhc2UgMTU6cmV0dXJuIDE7Y2FzZSAxNDpyZXR1cm4gMjtjYXNlIDExOnJldHVybiAzO2Nhc2UgMjE6cmV0dXJuIDR9cmV0dXJuLTF9ZnVuY3Rpb24gcjEoKXtyMT1VLFBuPW5ldyBiTygiUEFSRU5UUyIsMCksaGE9bmV3IGJPKCJOT0RFUyIsMSksemQ9bmV3IGJPKCJFREdFUyIsMikseXY9bmV3IGJPKCJQT1JUUyIsMyksUzI9bmV3IGJPKCJMQUJFTFMiLDQpfWZ1bmN0aW9uIGg2bihlLHQsbil7dmFyIHI7c3dpdGNoKHI9bi5xLmdldEZ1bGxZZWFyKCktTGIrTGIscjwwJiYocj0tciksdCl7Y2FzZSAxOmUuYSs9cjticmVhaztjYXNlIDI6YWcoZSxyJTEwMCwyKTticmVhaztkZWZhdWx0OmFnKGUscix0KX19ZnVuY3Rpb24gUnIoZSx0KXt2YXIgbixyO2lmKEV5KHQsZS5iKSx0Pj1lLmI+PjEpZm9yKHI9ZS5jLG49ZS5iO24+dDstLW4pcj1yLmI7ZWxzZSBmb3Iocj1lLmEuYSxuPTA7bjx0OysrbilyPXIuYTtyZXR1cm4gbmV3IGhpdChlLHQscil9ZnVuY3Rpb24gWlYoKXtaVj1VLGowZT1uZXcgXzNlKCJOVU1fT0ZfRVhURVJOQUxfU0lERVNfVEhBTl9OVU1fT0ZfRVhURU5TSU9OU19MQVNUIiwwKSx4X2U9bmV3IF8zZSgiQ09STkVSX0NBU0VTX1RIQU5fU0lOR0xFX1NJREVfTEFTVCIsMSl9ZnVuY3Rpb24gdWR0KGUpe3RoaXMuYj1uZXcgYnQsdGhpcy5lPW5ldyBidCx0aGlzLmQ9ZSx0aGlzLmE9IV9rKEZpKG5ldyBibihudWxsLG5ldyB2dyhuZXcgTjEoZS5iKSkpLG5ldyBXbChuZXcgdmVlKSkpLkJkKChBbSgpLHp4KSl9ZnVuY3Rpb24gbGR0KGUsdCl7dmFyIG4scixhLG87Zm9yKG49MCxhPW5ldyBHKHQuYSk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDEwKSxvPXIuby5hK3IuZC5jK3IuZC5iK2UuaixuPWIuTWF0aC5tYXgobixvKTtyZXR1cm4gbn1mdW5jdGlvbiBoZHQoZSx0KXt2YXIgbixyLGE7YT10LmQuaSxyPWEuaywhKHI9PShabigpLFBzKXx8cj09SzEpJiYobj1uZXcgaHIoZHIocXMoYSkuYS5LYygpLG5ldyBqKSksanIobikmJmtpKGUuayx0LGwoeHIobiksMTgpKSl9ZnVuY3Rpb24gZjZuKGUsdCl7cmV0dXJuIHRwKCksWWkoKGUuYS5iPT0wP25ldyBsdChlLmMuZS5hLGUuYy5lLmIpOmwoQmsoZS5hKSw4KSkuYiwodC5hLmI9PTA/bmV3IGx0KHQuYy5lLmEsdC5jLmUuYik6bChCayh0LmEpLDgpKS5iKX1mdW5jdGlvbiBkNm4oZSx0KXtyZXR1cm4gdHAoKSxZaSgoZS5hLmI9PTA/bmV3IGx0KGUuYy5lLmEsZS5jLmUuYik6bChCayhlLmEpLDgpKS5hLCh0LmEuYj09MD9uZXcgbHQodC5jLmUuYSx0LmMuZS5iKTpsKEJrKHQuYSksOCkpLmEpfWZ1bmN0aW9uIGc2bihlLHQpe3JldHVybiB0cCgpLFlpKChlLmEuYj09MD9uZXcgbHQoZS5iLmUuYSxlLmIuZS5iKTpsKG8wKGUuYSksOCkpLmEsKHQuYS5iPT0wP25ldyBsdCh0LmIuZS5hLHQuYi5lLmIpOmwobzAodC5hKSw4KSkuYSl9ZnVuY3Rpb24gcDZuKGUsdCl7cmV0dXJuIHRwKCksWWkoKGUuYS5iPT0wP25ldyBsdChlLmIuZS5hLGUuYi5lLmIpOmwobzAoZS5hKSw4KSkuYiwodC5hLmI9PTA/bmV3IGx0KHQuYi5lLmEsdC5iLmUuYik6bChvMCh0LmEpLDgpKS5iKX1mdW5jdGlvbiB0Nigpe3Q2PVUsS2I9bmV3IHZPKCJESVNUUklCVVRFRCIsMCksdEY9bmV3IHZPKCJKVVNUSUZJRUQiLDEpLFhOZT1uZXcgdk8oIkJFR0lOIiwyKSxJTT1uZXcgdk8oY1QsMyksUU5lPW5ldyB2TygiRU5EIiw0KX1mdW5jdGlvbiBudWUoZSx0KXt2YXIgbixyLGE7cmV0dXJuIHI9TW4oZS5EaCgpLHQpLG49dC1lLmppKCksbjwwPyhhPWUuSWgociksYT49MD9lLldoKGEpOnF1ZShlLHIpKTpuPDA/cXVlKGUscik6bChyLDY5KS53aygpLkJrKGUsZS5oaSgpLG4pfWZ1bmN0aW9uIGZkdChlKXt2YXIgdCxuLHI7Zm9yKHI9KCFlLm8mJihlLm89bmV3IHhsKChzdSgpLENnKSxMMixlLDApKSxlLm8pLG49ci5jLktjKCk7bi5lIT1uLmkuZ2MoKTspdD1sKG4uWWooKSw0NCksdC5tZCgpO3JldHVybiBpTihyKX1mdW5jdGlvbiBJdChlKXt2YXIgdDtpZihEZShlLmEsNCkpe2lmKHQ9SDhlKGUuYSksdD09bnVsbCl0aHJvdyB1ZShuZXcgbmMoTnl0K2UuYisiJy4gIitPeXQrKEdnKGhGKSxoRi5rKStKQ2UpKTtyZXR1cm4gdH1lbHNlIHJldHVybiBlLmF9ZnVuY3Rpb24gYjZuKGUsdCl7dmFyIG4scjtpZihlLmoubGVuZ3RoIT10LmoubGVuZ3RoKXJldHVybiExO2ZvcihuPTAscj1lLmoubGVuZ3RoO248cjtuKyspaWYoIXZuKGUualtuXSx0Lmpbbl0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGdyKGUpe3ZhciB0O3RyeXtyZXR1cm4gdD1lLmkuWGIoZS5lKSxlLlhqKCksZS5nPWUuZSsrLHR9Y2F0Y2gobil7dGhyb3cgbj1icyhuKSxEZShuLDc3KT8oZS5YaigpLHVlKG5ldyBfYykpOnVlKG4pfX1mdW5jdGlvbiBydWUoZSl7dmFyIHQ7dHJ5e3JldHVybiB0PWUuYy5WaShlLmUpLGUuWGooKSxlLmc9ZS5lKyssdH1jYXRjaChuKXt0aHJvdyBuPWJzKG4pLERlKG4sNzcpPyhlLlhqKCksdWUobmV3IF9jKSk6dWUobil9fWZ1bmN0aW9uIGVVKGUpe3ZhciB0LG4scixhO2ZvcihhPTAsbj0wLHI9ZS5sZW5ndGg7bjxyO24rKyl0PShYbihuLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQobikpLHQ+PTY0JiZ0PDEyOCYmKGE9UTAoYSxsMCgxLHQtNjQpKSk7cmV0dXJuIGF9ZnVuY3Rpb24gdFUoZSx0KXt2YXIgbixyO3JldHVybiByPW51bGwsbnMoZSwocGkoKSxyOSkpJiYobj1sKFEoZSxyOSksOTYpLG4ucGYodCkmJihyPW4ub2YodCkpKSxyPT1udWxsJiZlbyhlKSYmKHI9UShlbyhlKSx0KSkscn1mdW5jdGlvbiBtNm4oZSx0KXt2YXIgbjtyZXR1cm4gbj1sKFEoZSwoTnQoKSxjYykpLDc1KSxac2UodCxPOHQpP24/Q2gobik6KG49bmV3IGJsLHJ0KGUsY2MsbikpOm4mJnJ0KGUsY2MsbnVsbCksbn1mdW5jdGlvbiBJQSgpe0lBPVUsWF9lPShwaSgpLF9OZSksVzBlPW9OZSxJN3Q9WjYsWV9lPV8yLEI3dD0oZFUoKSxBX2UpLFA3dD1TX2UsRjd0PU1fZSxON3Q9Q19lLE83dD0oTGNlKCksR19lKSxLMGU9TDd0LFdfZT1NN3Qsdks9RDd0fWZ1bmN0aW9uIG5VKGUpe3N3aXRjaCh3M2UoKSx0aGlzLmM9bmV3IGJ0LHRoaXMuZD1lLGUuZyl7Y2FzZSAwOmNhc2UgMjp0aGlzLmE9XzVlKHBBZSksdGhpcy5iPWdzO2JyZWFrO2Nhc2UgMzpjYXNlIDE6dGhpcy5hPXBBZSx0aGlzLmI9aWF9fWZ1bmN0aW9uIHY2bihlKXt2YXIgdDtVOChsKFEoZSwoTnQoKSxNcykpLDEwMSkpJiYodD1lLmIsZTJ0KChTbigwLHQuYy5sZW5ndGgpLGwodC5jWzBdLDMwKSkpLGUydChsKGp0KHQsdC5jLmxlbmd0aC0xKSwzMCkpKX1mdW5jdGlvbiB3Nm4oZSx0KXt0LlVnKCJTZWxmLUxvb3AgcG9zdC1wcm9jZXNzaW5nIiwxKSxJcyhGaShGaShEYyhuZXcgYm4obnVsbCxuZXcga24oZS5iLDE2KSksbmV3IFJaKSxuZXcgalopLG5ldyAkWiksbmV3IEVqKSx0LlZnKCl9ZnVuY3Rpb24gZGR0KGUsdCxuKXt2YXIgcixhO2lmKGUuYylVdShlLmMsZS5jLmkrdCksR3UoZS5jLGUuYy5qK24pO2Vsc2UgZm9yKGE9bmV3IEcoZS5iKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTYzKSxkZHQocix0LG4pfWZ1bmN0aW9uIHk2bihlKXt2YXIgdDtpZihlPT1udWxsKXJldHVybiBudWxsO2lmKHQ9c0luKFR1KGUsITApKSx0PT1udWxsKXRocm93IHVlKG5ldyBKaWUoIkludmFsaWQgYmFzZTY0QmluYXJ5IHZhbHVlOiAnIitlKyInIikpO3JldHVybiB0fWZ1bmN0aW9uIGZmKGUsdCl7dmFyIG47bj1lLmZkKHQpO3RyeXtyZXR1cm4gbi5QYigpfWNhdGNoKHIpe3Rocm93IHI9YnMociksRGUociwxMTIpP3VlKG5ldyB0YygiQ2FuJ3QgZ2V0IGVsZW1lbnQgIit0KSk6dWUocil9fWZ1bmN0aW9uIGdkdChlLHQpe3ZhciBuLHIsYTtmb3Iobj1lLm8sYT1sKGwoJGkoZS5yLHQpLDIxKSw4NykuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMTE3KSxyLmUuYT1FN24ocixuLmEpLHIuZS5iPW4uYip6ZShHZShyLmIub2YocEspKSl9ZnVuY3Rpb24geDZuKGUsdCl7dmFyIG4scixhO2ZvcihhPW5ldyBCdSh0LmdjKCkpLHI9dC5LYygpO3IuT2IoKTspbj1sKHIuUGIoKSwyOTMpLG4uYz09bi5mP3FFKGUsbixuLmMpOlY5bihlLG4pfHwkbihhLmMsbik7cmV0dXJuIGF9ZnVuY3Rpb24gcGR0KGUpe3ZhciB0O3JldHVybiB0PW5ldyB0Yix0LmErPSJuIixlLmshPShabigpLFBzKSYmaGkoaGkoKHQuYSs9IigiLHQpLGFhZShlLmspLnRvTG93ZXJDYXNlKCkpLCIpIiksaGkoKHQuYSs9Il8iLHQpLEhOKGUpKSx0LmF9ZnVuY3Rpb24gazZuKGUsdCl7dmFyIG4scixhLG87cmV0dXJuIGE9ZS5rLG49emUoR2UoUShlLChmdCgpLGwzKSkpKSxvPXQuayxyPXplKEdlKFEodCxsMykpKSxvIT0oWm4oKSxVcyk/LTE6YSE9VXM/MTpuPT1yPzA6bjxyPy0xOjF9ZnVuY3Rpb24gRTZuKGUsdCl7dmFyIG4scjtyZXR1cm4gbj1sKGwoY3IoZS5nLHQuYSksNDIpLmEsNjgpLHI9bChsKGNyKGUuZyx0LmIpLDQyKS5hLDY4KSxwYih0LmEsdC5iKS1wYih0LmEsbXllKG4uYikpLXBiKHQuYixteWUoci5iKSl9ZnVuY3Rpb24gYmR0KGUsdCl7dmFyIG47c3dpdGNoKG49bChRbyhlLmIsdCksMTI3KS5uLHQuZyl7Y2FzZSAxOmUudD49MCYmKG4uZD1lLnQpO2JyZWFrO2Nhc2UgMzplLnQ+PTAmJihuLmE9ZS50KX1lLkMmJihuLmI9ZS5DLmIsbi5jPWUuQy5jKX1mdW5jdGlvbiBPQSgpe09BPVUsdkRlPW5ldyBoTyhjQ2UsMCksdmRlPW5ldyBoTygkaGUsMSksd2RlPW5ldyBoTygiTElORUFSX1NFR01FTlRTIiwyKSxyTT1uZXcgaE8oIkJSQU5ERVNfS09FUEYiLDMpLGlNPW5ldyBoTyhjeXQsNCl9ZnVuY3Rpb24gTkEoKXtOQT1VLHVCPW5ldyBocShuRywwKSxiSz1uZXcgaHEoeWhlLDEpLG1LPW5ldyBocSh4aGUsMiksbEI9bmV3IGhxKGtoZSwzKSx1Qi5hPSExLGJLLmE9ITAsbUsuYT0hMSxsQi5hPSEwfWZ1bmN0aW9uIGJ4KCl7Yng9VSxhQj1uZXcgbHEobkcsMCksc0I9bmV3IGxxKHloZSwxKSxvQj1uZXcgbHEoeGhlLDIpLGNCPW5ldyBscShraGUsMyksYUIuYT0hMSxzQi5hPSEwLG9CLmE9ITEsY0IuYT0hMH1mdW5jdGlvbiBteChlLHQsbixyKXt2YXIgYTtyZXR1cm4gbj49MD9lLlNoKHQsbixyKTooZS5QaCgpJiYocj0oYT1lLkZoKCksYT49MD9lLkFoKHIpOmUuUGgoKS5UaChlLC0xLWEsbnVsbCxyKSkpLGUuQ2godCxuLHIpKX1mdW5jdGlvbiBLOGUoZSx0KXtzd2l0Y2godCl7Y2FzZSA3OiFlLmUmJihlLmU9bmV3IExuKGpzLGUsNyw0KSksJHIoZS5lKTtyZXR1cm47Y2FzZSA4OiFlLmQmJihlLmQ9bmV3IExuKGpzLGUsOCw1KSksJHIoZS5kKTtyZXR1cm59TjhlKGUsdCl9ZnVuY3Rpb24gSGkoZSx0LG4pe3JldHVybiBuPT1udWxsPyghZS5vJiYoZS5vPW5ldyB4bCgoc3UoKSxDZyksTDIsZSwwKSksWVYoZS5vLHQpKTooIWUubyYmKGUubz1uZXcgeGwoKHN1KCksQ2cpLEwyLGUsMCkpLEdOKGUubyx0LG4pKSxlfWZ1bmN0aW9uIG1kdChlLHQpe0NuKCk7dmFyIG4scixhLG87Zm9yKG49ZSxvPXQsRGUoZSwyMSkmJiFEZSh0LDIxKSYmKG49dCxvPWUpLGE9bi5LYygpO2EuT2IoKTspaWYocj1hLlBiKCksby5IYyhyKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBUNm4oZSx0LG4scil7aWYodC5hPHIuYSlyZXR1cm4hMDtpZih0LmE9PXIuYSl7aWYodC5iPHIuYilyZXR1cm4hMDtpZih0LmI9PXIuYiYmZS5iPm4uYilyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBpdWUoZSx0KXtyZXR1cm4gSWEoZSk/ISFyNnRbdF06ZS5TbT8hIWUuU21bdF06ZnkoZSk/ISFuNnRbdF06aHkoZSk/ISF0NnRbdF06ITF9ZnVuY3Rpb24gQzZuKGUpe3ZhciB0O3Q9ZS5hO2RvIHQ9bCh4cihuZXcgaHIoZHIoa2EodCkuYS5LYygpLG5ldyBqKSkpLDE4KS5jLmksdC5rPT0oWm4oKSxBYSkmJmUuYi5GYyh0KTt3aGlsZSh0Lms9PShabigpLEFhKSk7ZS5iPWxmKGUuYil9ZnVuY3Rpb24gdmR0KGUsdCl7dmFyIG4scixhO2ZvcihhPWUscj1uZXcgaHIoZHIoa2EodCkuYS5LYygpLG5ldyBqKSk7anIocik7KW49bCh4cihyKSwxOCksbi5jLmkuYyYmKGE9Yi5NYXRoLm1heChhLG4uYy5pLmMucCkpO3JldHVybiBhfWZ1bmN0aW9uIFM2bihlLHQpe3ZhciBuLHIsYTtmb3IoYT0wLHI9bChsKCRpKGUucix0KSwyMSksODcpLktjKCk7ci5PYigpOyluPWwoci5QYigpLDExNyksYSs9bi5kLmQrbi5iLk1mKCkuYituLmQuYSxyLk9iKCkmJihhKz1lLncpO3JldHVybiBhfWZ1bmN0aW9uIF82bihlLHQpe3ZhciBuLHIsYTtmb3IoYT0wLHI9bChsKCRpKGUucix0KSwyMSksODcpLktjKCk7ci5PYigpOyluPWwoci5QYigpLDExNyksYSs9bi5kLmIrbi5iLk1mKCkuYStuLmQuYyxyLk9iKCkmJihhKz1lLncpO3JldHVybiBhfWZ1bmN0aW9uIHdkdChlKXt2YXIgdCxuLHIsYTtpZihyPTAsYT1IeShlKSxhLmMubGVuZ3RoPT0wKXJldHVybiAxO2ZvcihuPW5ldyBHKGEpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwyNykscis9d2R0KHQpO3JldHVybiByfWZ1bmN0aW9uIEE2bihlKXt2YXIgdCxuLHI7Zm9yKHI9ZS5jLmEsZS5wPShYcihyKSxuZXcgT2wocikpLG49bmV3IEcocik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDEwKSx0LnA9aGtuKHQpLmE7Q24oKSxWcyhlLnAsbmV3IHFlZSl9ZnVuY3Rpb24gTDZuKGUsdCxuKXt2YXIgcixhLG8sZjtyZXR1cm4gcj1lLmRkKHQpLHIhPS0xJiYoZS5QaigpPyhvPWUuUWooKSxmPXJIKGUsciksYT1lLklqKDQsZixudWxsLHIsbyksbj9uLm5qKGEpOm49YSk6ckgoZSxyKSksbn1mdW5jdGlvbiBUbyhlLHQsbil7dmFyIHIsYSxvLGY7cmV0dXJuIHI9ZS5kZCh0KSxyIT0tMSYmKGUuUGooKT8obz1lLlFqKCksZj12eChlLHIpLGE9ZS5Jaig0LGYsbnVsbCxyLG8pLG4/bi5uaihhKTpuPWEpOnZ4KGUscikpLG59ZnVuY3Rpb24gTTZuKGUsdCxuLHIpe3ZhciBhLG8sZjtuLlhoKHQpJiYoRm8oKSxWb2UodCk/KGE9bChuLk1oKHQpLDE2MCksbjZuKGUsYSkpOihvPShmPXQsZj9sKHIsNTQpLmdpKGYpOm51bGwpLG8mJkljbihuLk1oKHQpLG8pKSl9ZnVuY3Rpb24gclUoZSx0LG4scil7dmFyIGEsbyxmO3JldHVybiBvPU1uKGUuRGgoKSx0KSxhPXQtZS5qaSgpLGE8MD8oZj1lLkloKG8pLGY+PTA/ZS5MaChmLG4sITApOkh3KGUsbyxuKSk6bChvLDY5KS53aygpLnlrKGUsZS5oaSgpLGEsbixyKX1mdW5jdGlvbiBENm4oZSx0LG4scil7dmFyIGEsbztvPXQucGYoKHBpKCkscjcpKT9sKHQub2YocjcpLDIxKTplLmosYT1wNG4obyksYSE9KFlVKCksSDBlKSYmKG4mJiEkOGUoYSl8fEp4ZShnVG4oZSxhLHIpLHQpKX1mdW5jdGlvbiBJNm4oZSl7c3dpdGNoKGUuZyl7Y2FzZSAxOnJldHVybiBQdygpLGlCO2Nhc2UgMzpyZXR1cm4gUHcoKSxyQjtjYXNlIDI6cmV0dXJuIFB3KCksVTBlO2Nhc2UgNDpyZXR1cm4gUHcoKSxWMGU7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gTzZuKGUsdCxuKXtpZihlLmUpc3dpdGNoKGUuYil7Y2FzZSAxOkVwbihlLmMsdCxuKTticmVhaztjYXNlIDA6VHBuKGUuYyx0LG4pfWVsc2UgJGN0KGUuYyx0LG4pO2UuYVt0LnBdW24ucF09ZS5jLmksZS5hW24ucF1bdC5wXT1lLmMuZX1mdW5jdGlvbiB5ZHQoZSl7dmFyIHQsbjtpZihlPT1udWxsKXJldHVybiBudWxsO2ZvcihuPVdlKHdnLGR0LDE5OSxlLmxlbmd0aCwwLDIpLHQ9MDt0PG4ubGVuZ3RoO3QrKyluW3RdPWwoRG1uKGVbdF0sZVt0XS5sZW5ndGgpLDE5OSk7cmV0dXJuIG59ZnVuY3Rpb24gaVUoZSl7dmFyIHQ7aWYoX2NlKGUpKXJldHVybiBkSChlKSxlLnVsKCkmJih0PXpBKGUuZSxlLmIsZS5jLGUuYSxlLmopLGUuaj10KSxlLmc9ZS5hLCsrZS5hLCsrZS5jLGUuaT0wLGUuajt0aHJvdyB1ZShuZXcgX2MpfWZ1bmN0aW9uIE42bihlLHQpe3ZhciBuLHIsYSxvO3JldHVybiBvPWUubyxuPWUucCxvPG4/byo9bzpuKj1uLHI9bytuLG89dC5vLG49dC5wLG88bj9vKj1vOm4qPW4sYT1vK24scjxhPy0xOnI9PWE/MDoxfWZ1bmN0aW9uIGYyKGUsdCl7dmFyIG4scixhO2lmKGE9dGd0KGUsdCksYT49MClyZXR1cm4gYTtpZihlLm9sKCkpe2ZvcihyPTA7cjxlLmk7KytyKWlmKG49ZS5wbChsKGUuZ1tyXSw1OCkpLHFlKG4pPT09cWUodCkpcmV0dXJuIHJ9cmV0dXJuLTF9ZnVuY3Rpb24gbjYoZSx0LG4pe3ZhciByLGE7aWYoYT1lLmdjKCksdD49YSl0aHJvdyB1ZShuZXcgbXkodCxhKSk7aWYoZS5TaSgpJiYocj1lLmRkKG4pLHI+PTAmJnIhPXQpKXRocm93IHVlKG5ldyBZbihXUCkpO3JldHVybiBlLlhpKHQsbil9ZnVuY3Rpb24gVzhlKGUsdCl7aWYodGhpcy5hPWwoWHIoZSksMjUzKSx0aGlzLmI9bChYcih0KSwyNTMpLGUuRWQodCk+MHx8ZT09KFVpZSgpLHcwZSl8fHQ9PShHaWUoKSx5MGUpKXRocm93IHVlKG5ldyBZbigiSW52YWxpZCByYW5nZTogIitIY3QoZSx0KSkpfWZ1bmN0aW9uIHhkdChlKXt2YXIgdCxuO2Zvcih0aGlzLmI9bmV3IGJ0LHRoaXMuYz1lLHRoaXMuYT0hMSxuPW5ldyBHKGUuYSk7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDEwKSx0aGlzLmE9dGhpcy5hfHQuaz09KFpuKCksUHMpfWZ1bmN0aW9uIFA2bihlLHQpe3ZhciBuLHIsYTtmb3Iobj1odyhuZXcgU20sZSksYT1uZXcgRyh0KTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTI1KSxwMChzMChpMChhMChyMChuZXcgX2YsMCksMCksbikscikpO3JldHVybiBufWZ1bmN0aW9uIGtkdChlLHQsbil7bi5VZygiQ29tcG91bmQgZ3JhcGggcHJlcHJvY2Vzc29yIiwxKSxlLmE9bmV3IEN3LCR2dChlLHQsbnVsbCksTExuKGUsdCksWlRuKGUpLHJ0KHQsKGZ0KCksakxlKSxlLmEpLGUuYT1udWxsLE5sKGUuYiksbi5WZygpfWZ1bmN0aW9uIEVkdChlLHQsbil7dmFyIHIsYSxvO2ZvcihhPW5ldyBocihkcigodD9rYShlKTpxcyhlKSkuYS5LYygpLG5ldyBqKSk7anIoYSk7KXI9bCh4cihhKSwxOCksbz10P3IuYy5pOnIuZC5pLG8uaz09KFpuKCksY3UpJiZWYShvLG4pfWZ1bmN0aW9uIEI2bihlLHQpe3ZhciBuLHIsYTtmb3IodC5VZygiVW50cmVlaWZ5IiwxKSxuPWwoUShlLChRaSgpLHNJZSkpLDE1KSxhPW4uS2MoKTthLk9iKCk7KXI9bChhLlBiKCksNjUpLHVpKHIuYi5kLHIpLHVpKHIuYy5iLHIpO3QuVmcoKX1mdW5jdGlvbiBGNm4oZSl7dmFyIHQsbixyO2ZvcihyPWwoJGkoZS5hLChSeSgpLEtLKSksMTUpLktjKCk7ci5PYigpOyluPWwoci5QYigpLDEwNSksdD1veGUobiksVmsoZSxuLHRbMF0sKE93KCksYTMpLDApLFZrKGUsbix0WzFdLG8zLDEpfWZ1bmN0aW9uIFI2bihlKXt2YXIgdCxuLHI7Zm9yKHI9bCgkaShlLmEsKFJ5KCksV0spKSwxNSkuS2MoKTtyLk9iKCk7KW49bChyLlBiKCksMTA1KSx0PW94ZShuKSxWayhlLG4sdFswXSwoT3coKSxhMyksMCksVmsoZSxuLHRbMV0sbzMsMSl9ZnVuY3Rpb24gQnkoKXtCeT1VLF9XPW5ldyBicShJZCwwKSxiZGU9bmV3IGJxKCJQT1JUX1BPU0lUSU9OIiwxKSxHNj1uZXcgYnEoIk5PREVfU0laRV9XSEVSRV9TUEFDRV9QRVJNSVRTIiwyKSxVNj1uZXcgYnEoIk5PREVfU0laRSIsMyl9ZnVuY3Rpb24gc1UoKXtzVT1VLGlnZT1uZXcgRnNlKCJJTlRFUkFDVElWRV9OT0RFX1JFT1JERVJFUiIsMCksYWdlPW5ldyBGc2UoIk1JTl9TSVpFX1BSRV9QUk9DRVNTT1IiLDEpLHNnZT1uZXcgRnNlKCJNSU5fU0laRV9QT1NUX1BST0NFU1NPUiIsMil9ZnVuY3Rpb24gb2coKXtvZz1VLFNnZT1uZXcgX18oIkFVVE9NQVRJQyIsMCksSEI9bmV3IF9fKE14LDEpLFZCPW5ldyBfXyhEeCwyKSxuWT1uZXcgX18oIlRPUCIsMyksZVk9bmV3IF9fKHhFZSw0KSx0WT1uZXcgX18oY1QsNSl9ZnVuY3Rpb24gWThlKGUsdCxuLHIpe0dFKCk7dmFyIGEsbztmb3IoYT0wLG89MDtvPG47bysrKWE9Ym8obW8odmEodFtvXSxWbyksdmEocixWbykpLHZhKFlyKGEpLFZvKSksZVtvXT1ZcihhKSxhPXViKGEsMzIpO3JldHVybiBZcihhKX1mdW5jdGlvbiBYOGUoZSx0LG4pe3ZhciByLGE7Zm9yKGE9MCxyPTA7cjxxMGU7cisrKWE9Yi5NYXRoLm1heChhLERjZShlLmFbdC5nXVtyXSxuKSk7cmV0dXJuIHQ9PSh0MSgpLCR1KSYmZS5iJiYoYT1iLk1hdGgubWF4KGEsZS5iLmIpKSxhfWZ1bmN0aW9uIGFVKGUsdCl7dmFyIG4scjtpZihxeWUodD4wKSwodCYtdCk9PXQpcmV0dXJuIHVhKHQqSmwoZSwzMSkqNDY1NjYxMjg3MzA3NzM5M2UtMjUpO2RvIG49SmwoZSwzMSkscj1uJXQ7d2hpbGUobi1yKyh0LTEpPDApO3JldHVybiB1YShyKX1mdW5jdGlvbiBqNm4oZSx0LG4pe3N3aXRjaChuLmcpe2Nhc2UgMTplLmE9dC5hLzIsZS5iPTA7YnJlYWs7Y2FzZSAyOmUuYT10LmEsZS5iPXQuYi8yO2JyZWFrO2Nhc2UgMzplLmE9dC5hLzIsZS5iPXQuYjticmVhaztjYXNlIDQ6ZS5hPTAsZS5iPXQuYi8yfX1mdW5jdGlvbiB6TihlLHQsbixyKXt2YXIgYSxvO2ZvcihhPXQ7YTxlLmMubGVuZ3RoO2ErKylpZihvPShTbihhLGUuYy5sZW5ndGgpLGwoZS5jW2FdLDEyKSksbi5NYihvKSkkbihyLmMsbyk7ZWxzZSByZXR1cm4gYTtyZXR1cm4gZS5jLmxlbmd0aH1mdW5jdGlvbiBzdWUoZSl7c3dpdGNoKGUuZyl7Y2FzZSAwOnJldHVybiBudWxsO2Nhc2UgMTpyZXR1cm4gbmV3IFRmdDtjYXNlIDI6cmV0dXJuIG5ldyBWd2U7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgWW4oRWZlKyhlLmYhPW51bGw/ZS5mOiIiK2UuZykpKX19ZnVuY3Rpb24gcU4oZSx0LG4pe3ZhciByLGE7Zm9yKFgzbihlLHQtZS5zLG4tZS50KSxhPW5ldyBHKGUubik7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDIwOSksRWUocixyLmUrdC1lLnMpLEJlKHIsci5mK24tZS50KTtlLnM9dCxlLnQ9bn1mdW5jdGlvbiAkNm4oZSl7dmFyIHQsbixyLGEsbztmb3Iobj0wLGE9bmV3IEcoZS5hKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTI1KSxyLmQ9bisrO3JldHVybiB0PVl4bihlKSxvPW51bGwsdC5jLmxlbmd0aD4xJiYobz1QNm4oZSx0KSksb31mdW5jdGlvbiBUZHQoZSl7dmFyIHQ7cmV0dXJuIHQ9emUoR2UoYXQoZSwocGkoKSxRQikpKSkqYi5NYXRoLnNxcnQoKCFlLmEmJihlLmE9bmV3IG50KEFpLGUsMTAsMTEpKSxlLmEpLmkpLG5ldyBsdCh0LHQvemUoR2UoYXQoZSxzWSkpKSl9ZnVuY3Rpb24gYXVlKGUpe3ZhciB0O3JldHVybiBlLmYmJmUuZi5WaCgpJiYodD1sKGUuZiw1NCksZS5mPWwoeWIoZSx0KSw4NCksZS5mIT10JiZlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgX2EoZSw5LDgsdCxlLmYpKSksZS5mfWZ1bmN0aW9uIG91ZShlKXt2YXIgdDtyZXR1cm4gZS5pJiZlLmkuVmgoKSYmKHQ9bChlLmksNTQpLGUuaT1sKHliKGUsdCksODQpLGUuaSE9dCYmZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsOSw3LHQsZS5pKSkpLGUuaX1mdW5jdGlvbiBSbyhlKXt2YXIgdDtyZXR1cm4gZS5iJiZlLmIuRGImNjQmJih0PWUuYixlLmI9bCh5YihlLHQpLDE5KSxlLmIhPXQmJmUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDksMjEsdCxlLmIpKSksZS5ifWZ1bmN0aW9uIG9VKGUsdCl7dmFyIG4scixhO2UuZD09bnVsbD8oKytlLmUsKytlLmYpOihyPXQuQmkoKSxjQ24oZSxlLmYrMSksYT0ociZJaSklZS5kLmxlbmd0aCxuPWUuZFthXSwhbiYmKG49ZS5kW2FdPWUuZGsoKSksbi5GYyh0KSwrK2UuZil9ZnVuY3Rpb24gUThlKGUsdCxuKXt2YXIgcjtyZXR1cm4gdC50aygpPyExOnQuSWsoKSE9LTI/KHI9dC5paygpLHI9PW51bGw/bj09bnVsbDpQaShyLG4pKTp0LnFrKCk9PWUuZS5EaCgpJiZuPT1udWxsfWZ1bmN0aW9uIGNVKCl7dmFyIGU7TWgoMTYsUHd0KSxlPWNmdCgxNiksdGhpcy5iPVdlKGswZSxUUCwzMDMsZSwwLDEpLHRoaXMuYz1XZShrMGUsVFAsMzAzLGUsMCwxKSx0aGlzLmE9bnVsbCx0aGlzLmU9bnVsbCx0aGlzLmk9MCx0aGlzLmY9ZS0xLHRoaXMuZz0wfWZ1bmN0aW9uIG9wKGUpe3I0ZS5jYWxsKHRoaXMpLHRoaXMuaz0oWm4oKSxQcyksdGhpcy5qPShNaCg2LFl5KSxuZXcgQnUoNikpLHRoaXMuYj0oTWgoMixZeSksbmV3IEJ1KDIpKSx0aGlzLmQ9bmV3ICRpZSx0aGlzLmY9bmV3IFJ3ZSx0aGlzLmE9ZX1mdW5jdGlvbiB6Nm4oZSl7dmFyIHQsbjtlLmMubGVuZ3RoPD0xfHwodD1BYnQoZSwoQ3QoKSxEcikpLHBwdChlLGwodC5hLDE3KS5hLGwodC5iLDE3KS5hKSxuPUFidChlLGVyKSxwcHQoZSxsKG4uYSwxNykuYSxsKG4uYiwxNykuYSkpfWZ1bmN0aW9uIHE2bihlLHQsbil7dmFyIHIsYTtmb3IoYT1lLmEuYixyPWEuYy5sZW5ndGg7cjxuO3IrKylwdyhhLGEuYy5sZW5ndGgsbmV3IHl1KGUuYSkpO1ZhKHQsKFNuKG4tMSxhLmMubGVuZ3RoKSxsKGEuY1tuLTFdLDMwKSkpLGUuYlt0LnBdPW59ZnVuY3Rpb24gQ2R0KGUsdCl7dmFyIG4scixhO2ZvcihlLmJbdC5nXT0xLHI9UnIodC5kLDApO3IuYiE9ci5kLmM7KW49bChCcihyKSw2NSksYT1uLmMsZS5iW2EuZ109PTE/dWkoZS5hLG4pOmUuYlthLmddPT0yP2UuYlthLmddPTE6Q2R0KGUsYSl9ZnVuY3Rpb24gU2R0KGUsdCxuLHIpe3ZhciBhLG8sZjtmb3IoYT1sKCRpKHI/ZS5hOmUuYix0KSwyMSksZj1hLktjKCk7Zi5PYigpOylpZihvPWwoZi5QYigpLDI3KSxOVShlLG4sbykpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gY3VlKGUpe3ZhciB0LG47Zm9yKG49bmV3IG9yKGUpO24uZSE9bi5pLmdjKCk7KWlmKHQ9bChncihuKSw4OSksdC5lfHwoIXQuZCYmKHQuZD1uZXcgWXMoV28sdCwxKSksdC5kKS5pIT0wKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHV1ZShlKXt2YXIgdCxuO2ZvcihuPW5ldyBvcihlKTtuLmUhPW4uaS5nYygpOylpZih0PWwoZ3IobiksODkpLHQuZXx8KCF0LmQmJih0LmQ9bmV3IFlzKFdvLHQsMSkpLHQuZCkuaSE9MClyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBINm4oZSl7dmFyIHQsbixyO2Zvcih0PTAscj1uZXcgRyhlLmMuYSk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDEwKSx0Kz1YZyhuZXcgaHIoZHIocXMobikuYS5LYygpLG5ldyBqKSkpO3JldHVybiB0L2UuYy5hLmMubGVuZ3RofWZ1bmN0aW9uIGx1ZSgpe2x1ZT1VLGpPZT0odGxlKCksUE9lKSxST2U9bmV3IGx3KDgpLG5ldyBIYSgocGkoKSxfMiksUk9lKSxuZXcgSGEoRXYsOCksbFN0PU9PZSxCT2U9blN0LEZPZT1yU3QsdVN0PW5ldyBIYShHQiwoSG4oKSwhMSkpfWZ1bmN0aW9uIFY2bihlLHQsbil7dmFyIHI7bi5VZygiU2hyaW5raW5nIHRyZWUgY29tcGFjdGlvbiIsMSksUnQoQnQoUSh0LChwRSgpLGpMKSkpKT8oSnduKGUsdC5mKSxRbHQodC5mLChyPXQuYyxyKSkpOlFsdCh0LmYsdC5jKSxuLlZnKCl9ZnVuY3Rpb24gSjhlKGUsdCxuLHIpe3N3aXRjaCh0KXtjYXNlIDc6cmV0dXJuIWUuZSYmKGUuZT1uZXcgTG4oanMsZSw3LDQpKSxlLmU7Y2FzZSA4OnJldHVybiFlLmQmJihlLmQ9bmV3IExuKGpzLGUsOCw1KSksZS5kfXJldHVybiB4OGUoZSx0LG4scil9ZnVuY3Rpb24gaHVlKGUpe3ZhciB0O3JldHVybiBlLmEmJmUuYS5WaCgpJiYodD1sKGUuYSw1NCksZS5hPWwoeWIoZSx0KSwxNDIpLGUuYSE9dCYmZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsOSw1LHQsZS5hKSkpLGUuYX1mdW5jdGlvbiBXbShlKXtyZXR1cm4gZTw0OHx8ZT4xMDI/LTE6ZTw9NTc/ZS00ODplPDY1Py0xOmU8PTcwP2UtNjUrMTA6ZTw5Nz8tMTplLTk3KzEwfWZ1bmN0aW9uIGZ1ZShlLHQpe2lmKGU9PW51bGwpdGhyb3cgdWUobmV3IEQ4KCJudWxsIGtleSBpbiBlbnRyeTogbnVsbD0iK3QpKTtpZih0PT1udWxsKXRocm93IHVlKG5ldyBEOCgibnVsbCB2YWx1ZSBpbiBlbnRyeTogIitlKyI9bnVsbCIpKX1mdW5jdGlvbiBVNm4oZSx0KXtmb3IodmFyIG4scjtlLk9iKCk7KWlmKCF0Lk9iKCl8fChuPWUuUGIoKSxyPXQuUGIoKSwhKHFlKG4pPT09cWUocil8fG4hPW51bGwmJlBpKG4scikpKSlyZXR1cm4hMTtyZXR1cm4hdC5PYigpfWZ1bmN0aW9uIF9kdChlLHQpe3ZhciBuO3JldHVybiBuPWhlKGxlKE5hLDEpLFpvLDI4LDE1LFtEY2UoZS5hWzBdLHQpLERjZShlLmFbMV0sdCksRGNlKGUuYVsyXSx0KV0pLGUuZCYmKG5bMF09Yi5NYXRoLm1heChuWzBdLG5bMl0pLG5bMl09blswXSksbn1mdW5jdGlvbiBBZHQoZSx0KXt2YXIgbjtyZXR1cm4gbj1oZShsZShOYSwxKSxabywyOCwxNSxbQlYoZS5hWzBdLHQpLEJWKGUuYVsxXSx0KSxCVihlLmFbMl0sdCldKSxlLmQmJihuWzBdPWIuTWF0aC5tYXgoblswXSxuWzJdKSxuWzJdPW5bMF0pLG59ZnVuY3Rpb24gWjhlKGUsdCxuKXtVOChsKFEodCwoTnQoKSxNcykpLDEwMSkpfHwoZDZlKGUsdCxkMih0LG4pKSxkNmUoZSx0LGQyKHQsKEN0KCksRHIpKSksZDZlKGUsdCxkMih0LFFuKSksQ24oKSxWcyh0LmosbmV3IElZZShlKSkpfWZ1bmN0aW9uIExkdChlKXt2YXIgdCxuO2ZvcihlLmN8fGxNbihlKSxuPW5ldyBibCx0PW5ldyBHKGUuYSkscmUodCk7dC5hPHQuYy5jLmxlbmd0aDspdWkobixsKHJlKHQpLDQxOCkuYSk7cmV0dXJuIG1yKG4uYiE9MCksYWYobixuLmMuYiksbn1mdW5jdGlvbiBHNm4oZSx0LG4pe3ZhciByLGEsbyxmLGc7Zm9yKGc9ZS5yK3QsZS5yKz10LGUuZCs9bixyPW4vZS5uLmMubGVuZ3RoLGE9MCxmPW5ldyBHKGUubik7Zi5hPGYuYy5jLmxlbmd0aDspbz1sKHJlKGYpLDIwOSksc1RuKG8sZyxyLGEpLCsrYX1mdW5jdGlvbiBLNm4oZSl7dmFyIHQsbixyO2ZvcihlLmIuYS4kYigpLGUuYT1XZShkSyxSbiw2MCxlLmMuYy5hLmIuYy5sZW5ndGgsMCwxKSx0PTAscj1uZXcgRyhlLmMuYy5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSw2MCksbi5mPXQrK31mdW5jdGlvbiBXNm4oZSl7dmFyIHQsbixyO2ZvcihlLmIuYS4kYigpLGUuYT1XZShyMWUsUm4sODYsZS5jLmEuYS5iLmMubGVuZ3RoLDAsMSksdD0wLHI9bmV3IEcoZS5jLmEuYS5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksODYpLG4uaT10Kyt9ZnVuY3Rpb24gTWR0KGUpe3ZhciB0O2lmKHQ9UnluKGUpLCFqcihlKSl0aHJvdyB1ZShuZXcgdGMoInBvc2l0aW9uICgwKSBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRoYXQgcmVtYWluZWQgKCIrdCsiKSIpKTtyZXR1cm4geHIoZSl9ZnVuY3Rpb24gWTZuKGUsdCl7dmFyIG47cmV0dXJuIGUuYXx8KG49V2UoTmEsWm8sMjgsMCwxNSwxKSxBNShlLmIuYSxuZXcgc3kobikpLF9RZShuLE1odChQZS5wcm90b3R5cGUuTWUsUGUsW10pKSxlLmE9bmV3IG9pdChuLGUuZCkpLFhIKGUuYSx0KX1mdW5jdGlvbiBEZHQoZSx0LG4pe3ZhciByO3RyeXtyZXR1cm4gcjYoZSx0K2UuaixuK2Uuayl9Y2F0Y2goYSl7dGhyb3cgYT1icyhhKSxEZShhLDc3KT8ocj1hLHVlKG5ldyB0YyhyLmcraUcrdCtDbytuKyIpLiIpKSk6dWUoYSl9fWZ1bmN0aW9uIFg2bihlLHQsbil7dmFyIHI7dHJ5e3JldHVybiBOZHQoZSx0K2UuaixuK2Uuayl9Y2F0Y2goYSl7dGhyb3cgYT1icyhhKSxEZShhLDc3KT8ocj1hLHVlKG5ldyB0YyhyLmcraUcrdCtDbytuKyIpLiIpKSk6dWUoYSl9fWZ1bmN0aW9uIFE2bihlLHQsbil7dmFyIHI7dHJ5e3JldHVybiBQZHQoZSx0K2UuaixuK2Uuayl9Y2F0Y2goYSl7dGhyb3cgYT1icyhhKSxEZShhLDc3KT8ocj1hLHVlKG5ldyB0YyhyLmcraUcrdCtDbytuKyIpLiIpKSk6dWUoYSl9fWZ1bmN0aW9uIElkdChlKXtzd2l0Y2goZS5nKXtjYXNlIDE6cmV0dXJuIEN0KCksZXI7Y2FzZSA0OnJldHVybiBDdCgpLFFuO2Nhc2UgMzpyZXR1cm4gQ3QoKSxhcjtjYXNlIDI6cmV0dXJuIEN0KCksRHI7ZGVmYXVsdDpyZXR1cm4gQ3QoKSxQY319ZnVuY3Rpb24gSjZuKGUsdCxuKXt0Lms9PShabigpLFBzKSYmbi5rPT1BYSYmKGUuZD1QY2UodCwoQ3QoKSxEcikpLGUuYj1QY2UodCxRbikpLG4uaz09UHMmJnQuaz09QWEmJihlLmQ9UGNlKG4sKEN0KCksUW4pKSxlLmI9UGNlKG4sRHIpKX1mdW5jdGlvbiBkdWUoZSx0KXt2YXIgbixyLGE7Zm9yKGE9T2MoZSx0KSxyPWEuS2MoKTtyLk9iKCk7KWlmKG49bChyLlBiKCksMTIpLFEobiwoZnQoKSxqbCkpIT1udWxsfHwkXyhuZXcgTjEobi5iKSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gWjZuKGUsdCxuKXtuLlVnKCJMaW5lYXIgc2VnbWVudHMgbm9kZSBwbGFjZW1lbnQiLDEpLGUuYj1sKFEodCwoZnQoKSwkNikpLDMxMiksakluKGUsdCkscExuKGUsdCksT0xuKGUsdCksYkluKGUpLGUuYT1udWxsLGUuYj1udWxsLG4uVmcoKX1mdW5jdGlvbiBleGUoZSx0KXtyZXR1cm4gVXUodCxlLmUrZS5kKyhlLmMuYy5sZW5ndGg9PTA/MDplLmIpKSxHdSh0LGUuZiksZS5hPWIuTWF0aC5tYXgoZS5hLHQuZiksZS5kKz10LmcrKGUuYy5jLmxlbmd0aD09MD8wOmUuYiksdnQoZS5jLHQpLCEwfWZ1bmN0aW9uIGU3bihlLHQsbil7dmFyIHIsYSxvLGY7Zm9yKGY9MCxyPW4vZS5hLmMubGVuZ3RoLG89bmV3IEcoZS5hKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMTcyKSxxTihhLGEucyxhLnQrZipyKSxHNm4oYSxlLmQtYS5yK3QsciksKytmfWZ1bmN0aW9uIHQ3bihlLHQpe3ZhciBuLHIsYSxvLGYsZztmb3IoYT10Lmxlbmd0aC0xLGY9MCxnPTAscj0wO3I8PWE7cisrKW89dFtyXSxuPXc5bihhLHIpKm44ZSgxLWUsYS1yKSpuOGUoZSxyKSxmKz1vLmEqbixnKz1vLmIqbjtyZXR1cm4gbmV3IGx0KGYsZyl9ZnVuY3Rpb24gT2R0KGUsdCl7dmFyIG4scixhLG8sZjtmb3Iobj10LmdjKCksZS5faShlLmkrbiksbz10LktjKCksZj1lLmksZS5pKz1uLHI9ZjtyPGUuaTsrK3IpYT1vLlBiKCksUl8oZSxyLGUuWmkocixhKSksZS5NaShyLGEpLGUuTmkoKTtyZXR1cm4gbiE9MH1mdW5jdGlvbiBuN24oZSx0LG4pe3ZhciByLGEsbztyZXR1cm4gZS5QaigpPyhyPWUuRWooKSxvPWUuUWooKSwrK2UuaixlLnFqKHIsZS5aaShyLHQpKSxhPWUuSWooMyxudWxsLHQscixvKSxuP24ubmooYSk6bj1hKTpNcnQoZSxlLkVqKCksdCksbn1mdW5jdGlvbiByN24oZSx0LG4pe3ZhciByLGEsbztyZXR1cm4gcj1sKE9lKGR1KGUuYSksdCksODkpLG89KGE9ci5jLERlKGEsOTApP2woYSwyOSk6KFRuKCksS2YpKSwoby5EYiY2ND95YihlLmIsbyk6byk9PW4/alUocik6c0UocixuKSxvfWZ1bmN0aW9uIGk3bihlKXt2YXIgdDtyZXR1cm4gZT09bnVsbD9udWxsOm5ldyBvYigodD1UdShlLCEwKSx0Lmxlbmd0aD4wJiYoWG4oMCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KDApPT00Myk/KFhuKDEsdC5sZW5ndGgrMSksdC5zdWJzdHIoMSkpOnQpKX1mdW5jdGlvbiBzN24oZSl7dmFyIHQ7cmV0dXJuIGU9PW51bGw/bnVsbDpuZXcgb2IoKHQ9VHUoZSwhMCksdC5sZW5ndGg+MCYmKFhuKDAsdC5sZW5ndGgpLHQuY2hhckNvZGVBdCgwKT09NDMpPyhYbigxLHQubGVuZ3RoKzEpLHQuc3Vic3RyKDEpKTp0KSl9ZnVuY3Rpb24gdHhlKGUsdCxuLHIsYSxvLGYsZyl7dmFyIHcsRTtyJiYodz1yLmFbMF0sdyYmdHhlKGUsdCxuLHcsYSxvLGYsZykseHVlKGUsbixyLmQsYSxvLGYsZykmJnQuRmMociksRT1yLmFbMV0sRSYmdHhlKGUsdCxuLEUsYSxvLGYsZykpfWZ1bmN0aW9uIHI2KGUsdCxuKXt0cnl7cmV0dXJuIGN3KG5jZShlLHQsbiksMSl9Y2F0Y2gocil7dGhyb3cgcj1icyhyKSxEZShyLDMzMyk/dWUobmV3IHRjKEVoZStlLm8rIioiK2UucCtUaGUrdCtDbytuK0NoZSkpOnVlKHIpfX1mdW5jdGlvbiBOZHQoZSx0LG4pe3RyeXtyZXR1cm4gY3cobmNlKGUsdCxuKSwwKX1jYXRjaChyKXt0aHJvdyByPWJzKHIpLERlKHIsMzMzKT91ZShuZXcgdGMoRWhlK2UubysiKiIrZS5wK1RoZSt0K0NvK24rQ2hlKSk6dWUocil9fWZ1bmN0aW9uIFBkdChlLHQsbil7dHJ5e3JldHVybiBjdyhuY2UoZSx0LG4pLDIpfWNhdGNoKHIpe3Rocm93IHI9YnMociksRGUociwzMzMpP3VlKG5ldyB0YyhFaGUrZS5vKyIqIitlLnArVGhlK3QrQ28rbitDaGUpKTp1ZShyKX19ZnVuY3Rpb24gQmR0KGUsdCl7aWYoZS5nPT0tMSl0aHJvdyB1ZShuZXcgcGwpO2UuWGooKTt0cnl7ZS5kLmhkKGUuZyx0KSxlLmY9ZS5kLmp9Y2F0Y2gobil7dGhyb3cgbj1icyhuKSxEZShuLDc3KT91ZShuZXcgWGgpOnVlKG4pfX1mdW5jdGlvbiBhN24oZSl7dmFyIHQsbixyLGEsbztmb3Iocj1uZXcgRyhlLmIpO3IuYTxyLmMuYy5sZW5ndGg7KWZvcihuPWwocmUociksMzApLHQ9MCxvPW5ldyBHKG4uYSk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDEwKSxhLnA9dCsrfWZ1bmN0aW9uIFBBKGUsdCl7dmFyIG4scixhLG87Zm9yKG89ZS5nYygpLHQubGVuZ3RoPG8mJih0PVZ6KG5ldyBBcnJheShvKSx0KSksYT10LHI9ZS5LYygpLG49MDtuPG87KytuKVRzKGEsbixyLlBiKCkpO3JldHVybiB0Lmxlbmd0aD5vJiZUcyh0LG8sbnVsbCksdH1mdW5jdGlvbiBvN24oZSx0KXt2YXIgbixyO2lmKHI9ZS5nYygpLHQ9PW51bGwpe2ZvcihuPTA7bjxyO24rKylpZihlLlhiKG4pPT1udWxsKXJldHVybiBufWVsc2UgZm9yKG49MDtuPHI7bisrKWlmKFBpKHQsZS5YYihuKSkpcmV0dXJuIG47cmV0dXJuLTF9ZnVuY3Rpb24gZ3VlKGUsdCl7dmFyIG4scixhO3JldHVybiBuPXQubGQoKSxhPXQubWQoKSxyPWUueGMobiksISghKHFlKGEpPT09cWUocil8fGEhPW51bGwmJlBpKGEscikpfHxyPT1udWxsJiYhZS5fYihuKSl9ZnVuY3Rpb24gYzduKGUsdCl7dmFyIG4scixhO3JldHVybiB0PD0yMj8obj1lLmwmKDE8PHQpLTEscj1hPTApOnQ8PTQ0PyhuPWUubCxyPWUubSYoMTw8dC0yMiktMSxhPTApOihuPWUubCxyPWUubSxhPWUuaCYoMTw8dC00NCktMSkscXUobixyLGEpfWZ1bmN0aW9uIHU3bihlLHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMTpyZXR1cm4gZS5mLm4uZCtlLnQ7Y2FzZSAzOnJldHVybiBlLmYubi5hK2UudDtjYXNlIDI6cmV0dXJuIGUuZi5uLmMrZS5zO2Nhc2UgNDpyZXR1cm4gZS5mLm4uYitlLnM7ZGVmYXVsdDpyZXR1cm4gMH19ZnVuY3Rpb24gbDduKGUsdCl7dmFyIG4scjtzd2l0Y2gocj10LmMsbj10LmEsZS5iLmcpe2Nhc2UgMDpuLmQ9ZS5lLXIuYS1yLmQ7YnJlYWs7Y2FzZSAxOm4uZCs9ZS5lO2JyZWFrO2Nhc2UgMjpuLmM9ZS5lLXIuYS1yLmQ7YnJlYWs7Y2FzZSAzOm4uYz1lLmUrci5kfX1mdW5jdGlvbiBueGUoZSx0LG4scil7dmFyIGEsbzt0aGlzLmE9dCx0aGlzLmM9cixhPWUuYSxTaWUodGhpcyxuZXcgbHQoLWEuYywtYS5kKSksT2kodGhpcy5iLG4pLG89ci8yLHQuYT96Xyh0aGlzLmIsMCxvKTp6Xyh0aGlzLmIsbywwKSx2dChlLmMsdGhpcyl9ZnVuY3Rpb24gRmR0KGUsdCxuLHIpe3ZhciBhO3RoaXMuYz1lLHRoaXMuZD10LGE9bmV3IG9zLENzKGEsbixhLmMuYixhLmMpLHRoaXMuYT1hLHRoaXMuYj1sKFEociwoSGMoKSx5MykpLDg4KSx0aGlzLmU9emUoR2UoUShyLG1JZSkpKSxFd3QodGhpcyl9ZnVuY3Rpb24gdVUoKXt1VT1VLHRnZT1uZXcgeXEoSWQsMCksekllPW5ldyB5cShZM3QsMSkscUllPW5ldyB5cSgiRURHRV9MRU5HVEhfQllfUE9TSVRJT04iLDIpLCRJZT1uZXcgeXEoIkNST1NTSU5HX01JTklNSVpBVElPTl9CWV9QT1NJVElPTiIsMyl9ZnVuY3Rpb24gcHVlKGUsdCl7dmFyIG4scjtpZihuPWwoWDUoZS5nLHQpLDI3KSxuKXJldHVybiBuO2lmKHI9bChYNShlLmosdCksMTIzKSxyKXJldHVybiByO3Rocm93IHVlKG5ldyBkZCgiUmVmZXJlbmNlZCBzaGFwZSBkb2VzIG5vdCBleGlzdDogIit0KSl9ZnVuY3Rpb24gcnhlKGUsdCl7dmFyIG4scjtpZihEZSh0LDI1Mykpe3I9bCh0LDI1Myk7dHJ5e3JldHVybiBuPWUuRWQociksbj09MH1jYXRjaChhKXtpZihhPWJzKGEpLERlKGEsMjEyKSlyZXR1cm4hMTt0aHJvdyB1ZShhKX19cmV0dXJuITF9ZnVuY3Rpb24gaDduKGUsdCl7aWYoZS5jPT10KXJldHVybiBlLmQ7aWYoZS5kPT10KXJldHVybiBlLmM7dGhyb3cgdWUobmV3IFluKCJOb2RlICdvbmUnIG11c3QgYmUgZWl0aGVyIHNvdXJjZSBvciB0YXJnZXQgb2YgZWRnZSAnZWRnZScuIikpfWZ1bmN0aW9uIGY3bihlLHQpe2lmKGUuYy5pPT10KXJldHVybiBlLmQuaTtpZihlLmQuaT09dClyZXR1cm4gZS5jLmk7dGhyb3cgdWUobmV3IFluKCJOb2RlICIrdCsiIGlzIG5laXRoZXIgc291cmNlIG5vciB0YXJnZXQgb2YgZWRnZSAiK2UpKX1mdW5jdGlvbiBkN24oZSx0LG4pe24uVWcoIlNlbGYtTG9vcCBvcmRlcmluZyIsMSksSXMoZmMoRmkoRmkoRGMobmV3IGJuKG51bGwsbmV3IGtuKHQuYiwxNikpLG5ldyBOWiksbmV3IHhqKSxuZXcgUFopLG5ldyBCWiksbmV3IGlZZShlKSksbi5WZygpfWZ1bmN0aW9uIGc3bihlLHQpe3ZhciBuO3N3aXRjaCh0Lmcpe2Nhc2UgMjpjYXNlIDQ6bj1lLmEsZS5jLmQubi5iPG4uZC5uLmImJihuPWUuYyksUXAoZSx0LChSMSgpLGIxZSksbik7YnJlYWs7Y2FzZSAxOmNhc2UgMzpRcChlLHQsKFIxKCksVngpLG51bGwpfX1mdW5jdGlvbiBidWUoZSx0LG4scixhLG8pe3ZhciBmLGcsdyxFLEM7Zm9yKGY9ZzhuKHQsbixvKSxnPW49PShDdCgpLFFuKXx8bj09ZXI/LTE6MSxFPWVbbi5nXSxDPTA7QzxFLmxlbmd0aDtDKyspdz1FW0NdLHc+MCYmKHcrPWEpLEVbQ109ZixmKz1nKih3K3IpfWZ1bmN0aW9uIFJkdChlKXt2YXIgdCxuLHI7Zm9yKHI9ZS5mLGUubj1XZShOYSxabywyOCxyLDE1LDEpLGUuZD1XZShOYSxabywyOCxyLDE1LDEpLHQ9MDt0PHI7dCsrKW49bChqdChlLmMuYix0KSwzMCksZS5uW3RdPWxkdChlLG4pLGUuZFt0XT10YnQoZSxuKX1mdW5jdGlvbiBtdWUoZSx0KXt2YXIgbixyLGE7Zm9yKGE9MCxyPTI7cjx0O3I8PD0xKWUuRGImciYmKythO2lmKGE9PTApe2ZvcihuPXQ8PD0xO248PTEyODtuPDw9MSlpZihlLkRiJm4pcmV0dXJuIDA7cmV0dXJuLTF9ZWxzZSByZXR1cm4gYX1mdW5jdGlvbiBqZHQoZSx0KXt2YXIgbixyLGEsbyxmO2ZvcihmPVd1KGUuZS5EaCgpLHQpLG89bnVsbCxuPWwoZS5nLDEyNCksYT0wO2E8ZS5pOysrYSlyPW5bYV0sZi5hbShyLkxrKCkpJiYoIW8mJihvPW5ldyBYMikscXIobyxyKSk7byYmYXd0KGUsbyl9ZnVuY3Rpb24gJGR0KGUpe3ZhciB0LG4scjtpZighZSlyZXR1cm4gbnVsbDtpZihlLmRjKCkpcmV0dXJuIiI7Zm9yKHI9bmV3IFVwLG49ZS5LYygpO24uT2IoKTspdD1uLlBiKCksWG8ocixlaSh0KSksci5hKz0iICI7cmV0dXJuIEdzZShyLHIuYS5sZW5ndGgtMSl9ZnVuY3Rpb24gemR0KGUsdCl7dmFyIG49bmV3IEFycmF5KHQpLHI7c3dpdGNoKGUpe2Nhc2UgMTQ6Y2FzZSAxNTpyPTA7YnJlYWs7Y2FzZSAxNjpyPSExO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG59Zm9yKHZhciBhPTA7YTx0OysrYSluW2FdPXI7cmV0dXJuIG59ZnVuY3Rpb24gJHcoZSl7dmFyIHQsbixyO2ZvcihuPW5ldyBHKGUuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksNjApLHQuYy4kYigpO1VnKGUuZCk/cj1lLmEuYzpyPWUuYS5kLFZ1KHIsbmV3IExpZShlKSksZS5jLmRmKGUpLHdidChlKX1mdW5jdGlvbiBxZHQoZSl7dmFyIHQsbixyLGE7Zm9yKG49bmV3IEcoZS5lLmMpO24uYTxuLmMuYy5sZW5ndGg7KXtmb3IodD1sKHJlKG4pLDI5MCksYT1uZXcgRyh0LmIpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSw0NTQpLEFrZShyKTtZcHQodCl9fWZ1bmN0aW9uIGxVKGUpe3ZhciB0LG4scixhLG87Zm9yKHI9MCxvPTAsYT0wLG49bmV3IEcoZS5hKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMTcyKSxvPWIuTWF0aC5tYXgobyx0LnIpLHIrPXQuZCsoYT4wP2UuYzowKSwrK2E7ZS5iPXIsZS5kPW99ZnVuY3Rpb24gSGR0KGUsdCl7dmFyIG47cmV0dXJuIG49aGUobGUoTmEsMSksWm8sMjgsMTUsW1g4ZShlLCh0MSgpLEdjKSx0KSxYOGUoZSwkdSx0KSxYOGUoZSxLYyx0KV0pLGUuZiYmKG5bMF09Yi5NYXRoLm1heChuWzBdLG5bMl0pLG5bMl09blswXSksbn1mdW5jdGlvbiBwN24oZSx0LG4pe3ZhciByO3RyeXtGVShlLHQrZS5qLG4rZS5rLCExLCEwKX1jYXRjaChhKXt0aHJvdyBhPWJzKGEpLERlKGEsNzcpPyhyPWEsdWUobmV3IHRjKHIuZytpRyt0K0NvK24rIikuIikpKTp1ZShhKX19ZnVuY3Rpb24gYjduKGUsdCxuKXt2YXIgcjt0cnl7RlUoZSx0K2UuaixuK2UuaywhMCwhMSl9Y2F0Y2goYSl7dGhyb3cgYT1icyhhKSxEZShhLDc3KT8ocj1hLHVlKG5ldyB0YyhyLmcraUcrdCtDbytuKyIpLiIpKSk6dWUoYSl9fWZ1bmN0aW9uIFZkdChlKXt2YXIgdDtucyhlLChOdCgpLGQzKSkmJih0PWwoUShlLGQzKSwyMSksdC5IYygocXkoKSxFMCkpPyh0Lk1jKEUwKSx0LkZjKFQwKSk6dC5IYyhUMCkmJih0Lk1jKFQwKSx0LkZjKEUwKSkpfWZ1bmN0aW9uIFVkdChlKXt2YXIgdDtucyhlLChOdCgpLGQzKSkmJih0PWwoUShlLGQzKSwyMSksdC5IYygocXkoKSxTMCkpPyh0Lk1jKFMwKSx0LkZjKHFmKSk6dC5IYyhxZikmJih0Lk1jKHFmKSx0LkZjKFMwKSkpfWZ1bmN0aW9uIHZ1ZShlLHQsbixyKXt2YXIgYSxvLGYsZztyZXR1cm4gZS5hPT1udWxsJiZ2OW4oZSx0KSxmPXQuYi5qLmMubGVuZ3RoLG89bi5kLnAsZz1yLmQucCxhPWctMSxhPDAmJihhPWYtMSksbzw9YT9lLmFbYV0tZS5hW29dOmUuYVtmLTFdLWUuYVtvXStlLmFbYV19ZnVuY3Rpb24gbTduKGUpe3ZhciB0LG47aWYoIWUuYilmb3IoZS5iPSRIKGwoZS5mLDI3KS5raCgpLmkpLG49bmV3IG9yKGwoZS5mLDI3KS5raCgpKTtuLmUhPW4uaS5nYygpOyl0PWwoZ3IobiksMTM1KSx2dChlLmIsbmV3IFlpZSh0KSk7cmV0dXJuIGUuYn1mdW5jdGlvbiB2N24oZSl7dmFyIHQsbjtpZighZS5lKWZvcihlLmU9JEgoWGFlKGwoZS5mLDI3KSkuaSksbj1uZXcgb3IoWGFlKGwoZS5mLDI3KSkpO24uZSE9bi5pLmdjKCk7KXQ9bChncihuKSwxMjMpLHZ0KGUuZSxuZXcgQlhlKHQpKTtyZXR1cm4gZS5lfWZ1bmN0aW9uIEdkdChlKXt2YXIgdCxuO2lmKCFlLmEpZm9yKGUuYT0kSChBSChsKGUuZiwyNykpLmkpLG49bmV3IG9yKEFIKGwoZS5mLDI3KSkpO24uZSE9bi5pLmdjKCk7KXQ9bChncihuKSwyNyksdnQoZS5hLG5ldyByYWUoZSx0KSk7cmV0dXJuIGUuYX1mdW5jdGlvbiB6dyhlKXt2YXIgdDtpZighZS5DJiYoZS5EIT1udWxsfHxlLkIhPW51bGwpKWlmKHQ9c0RuKGUpLHQpZS5obCh0KTtlbHNlIHRyeXtlLmhsKG51bGwpfWNhdGNoKG4pe2lmKG49YnMobiksIURlKG4sNjMpKXRocm93IHVlKG4pfXJldHVybiBlLkN9ZnVuY3Rpb24gdzduKGUpe3N3aXRjaChlLnEuZyl7Y2FzZSA1OmJndChlLChDdCgpLFFuKSksYmd0KGUsRHIpO2JyZWFrO2Nhc2UgNDp2dnQoZSwoQ3QoKSxRbikpLHZ2dChlLERyKTticmVhaztkZWZhdWx0OnhwdChlLChDdCgpLFFuKSkseHB0KGUsRHIpfX1mdW5jdGlvbiB5N24oZSl7c3dpdGNoKGUucS5nKXtjYXNlIDU6bWd0KGUsKEN0KCksYXIpKSxtZ3QoZSxlcik7YnJlYWs7Y2FzZSA0Ond2dChlLChDdCgpLGFyKSksd3Z0KGUsZXIpO2JyZWFrO2RlZmF1bHQ6a3B0KGUsKEN0KCksYXIpKSxrcHQoZSxlcil9fWZ1bmN0aW9uIGk2KGUsdCl7dmFyIG4scixhO2ZvcihhPW5ldyBxYSxyPWUuS2MoKTtyLk9iKCk7KW49bChyLlBiKCksMzYpLEtFKG4sYS5hLDApLGEuYSs9bi5mLmErdCxhLmI9Yi5NYXRoLm1heChhLmIsbi5mLmIpO3JldHVybiBhLmI+MCYmKGEuYis9dCksYX1mdW5jdGlvbiBoVShlLHQpe3ZhciBuLHIsYTtmb3IoYT1uZXcgcWEscj1lLktjKCk7ci5PYigpOyluPWwoci5QYigpLDM2KSxLRShuLDAsYS5iKSxhLmIrPW4uZi5iK3QsYS5hPWIuTWF0aC5tYXgoYS5hLG4uZi5hKTtyZXR1cm4gYS5hPjAmJihhLmErPXQpLGF9ZnVuY3Rpb24gS2R0KGUpe3ZhciB0LG4scjtmb3Iocj1JaSxuPW5ldyBHKGUuYSk7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDEwKSxucyh0LChmdCgpLEtpKSkmJihyPWIuTWF0aC5taW4ocixsKFEodCxLaSksMTcpLmEpKTtyZXR1cm4gcn1mdW5jdGlvbiBXZHQoZSx0KXt2YXIgbixyO2lmKHQubGVuZ3RoPT0wKXJldHVybiAwO2ZvcihuPVlhZShlLmEsdFswXSwoQ3QoKSxlcikpLG4rPVlhZShlLmEsdFt0Lmxlbmd0aC0xXSxhcikscj0wO3I8dC5sZW5ndGg7cisrKW4rPXI5bihlLHIsdCk7cmV0dXJuIG59ZnVuY3Rpb24gWWR0KCl7R0EoKSx0aGlzLmM9bmV3IGJ0LHRoaXMuaT1uZXcgYnQsdGhpcy5lPW5ldyBiZCx0aGlzLmY9bmV3IGJkLHRoaXMuZz1uZXcgYmQsdGhpcy5qPW5ldyBidCx0aGlzLmE9bmV3IGJ0LHRoaXMuYj1uZXcgUHIsdGhpcy5rPW5ldyBQcn1mdW5jdGlvbiB3dWUoZSx0KXt2YXIgbixyO3JldHVybiBlLkRiPj4xNj09Nj9lLkNiLlRoKGUsNSx1MSx0KToocj1SbyhsKE1uKChuPWwoS24oZSwxNiksMjkpLG58fGUuaWkoKSksZS5EYj4+MTYpLDE5KSksZS5DYi5UaChlLHIubixyLmYsdCkpfWZ1bmN0aW9uIHg3bihlKXtYaygpO3ZhciB0PWUuZTtpZih0JiZ0LnN0YWNrKXt2YXIgbj10LnN0YWNrLHI9dCtgCmA7cmV0dXJuIG4uc3Vic3RyaW5nKDAsci5sZW5ndGgpPT1yJiYobj1uLnN1YnN0cmluZyhyLmxlbmd0aCkpLG4uc3BsaXQoYApgKX1yZXR1cm5bXX1mdW5jdGlvbiBrN24oZSl7dmFyIHQ7cmV0dXJuIHQ9KFFodCgpLHA2dCksdFtlPj4+MjhdfHRbZT4+MjQmMTVdPDw0fHRbZT4+MjAmMTVdPDw4fHRbZT4+MTYmMTVdPDwxMnx0W2U+PjEyJjE1XTw8MTZ8dFtlPj44JjE1XTw8MjB8dFtlPj40JjE1XTw8MjR8dFtlJjE1XTw8Mjh9ZnVuY3Rpb24gWGR0KGUpe3ZhciB0LG4scjtlLmI9PWUuYyYmKHI9ZS5hLmxlbmd0aCxuPVA3ZShiLk1hdGgubWF4KDgscikpPDwxLGUuYiE9MD8odD1jMChlLmEsbiksZmZ0KGUsdCxyKSxlLmE9dCxlLmI9MCk6YXkoZS5hLG4pLGUuYz1yKX1mdW5jdGlvbiBFN24oZSx0KXt2YXIgbjtyZXR1cm4gbj1lLmIsbi5wZigocGkoKSxyaCkpP24uYWcoKT09KEN0KCksZXIpPy1uLk1mKCkuYS16ZShHZShuLm9mKHJoKSkpOnQremUoR2Uobi5vZihyaCkpKTpuLmFnKCk9PShDdCgpLGVyKT8tbi5NZigpLmE6dH1mdW5jdGlvbiBITihlKXt2YXIgdDtyZXR1cm4gZS5iLmMubGVuZ3RoIT0wJiZsKGp0KGUuYiwwKSw3MikuYT9sKGp0KGUuYiwwKSw3MikuYToodD1RYWUoZSksdD8/IiIrKGUuYz9nYyhlLmMuYSxlLDApOi0xKSl9ZnVuY3Rpb24gZlUoZSl7dmFyIHQ7cmV0dXJuIGUuZi5jLmxlbmd0aCE9MCYmbChqdChlLmYsMCksNzIpLmE/bChqdChlLmYsMCksNzIpLmE6KHQ9UWFlKGUpLHQ/PyIiKyhlLmk/Z2MoZS5pLmosZSwwKTotMSkpfWZ1bmN0aW9uIFQ3bihlLHQpe3ZhciBuLHI7aWYodDwwfHx0Pj1lLmdjKCkpcmV0dXJuIG51bGw7Zm9yKG49dDtuPGUuZ2MoKTsrK24paWYocj1sKGUuWGIobiksMTMxKSxuPT1lLmdjKCktMXx8IXIubylyZXR1cm4gbmV3IGNhKHB0KG4pLHIpO3JldHVybiBudWxsfWZ1bmN0aW9uIEM3bihlLHQsbil7dmFyIHIsYSxvLGYsZztmb3Iobz1lLmMsZz1uP3Q6ZSxyPW4/ZTp0LGE9Zy5wKzE7YTxyLnA7KythKWlmKGY9bChqdChvLmEsYSksMTApLCEoZi5rPT0oWm4oKSxLMSl8fFo3bihmKSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gaXhlKGUpe3ZhciB0LG4scixhLG87Zm9yKG89MCxhPWlhLHI9MCxuPW5ldyBHKGUuYSk7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDE3Miksbys9dC5yKyhyPjA/ZS5jOjApLGE9Yi5NYXRoLm1heChhLHQuZCksKytyO2UuZT1vLGUuYj1hfWZ1bmN0aW9uIFM3bihlKXt2YXIgdCxuO2lmKCFlLmIpZm9yKGUuYj0kSChsKGUuZiwxMjMpLmtoKCkuaSksbj1uZXcgb3IobChlLmYsMTIzKS5raCgpKTtuLmUhPW4uaS5nYygpOyl0PWwoZ3IobiksMTM1KSx2dChlLmIsbmV3IFlpZSh0KSk7cmV0dXJuIGUuYn1mdW5jdGlvbiBfN24oZSx0KXt2YXIgbixyLGE7aWYodC5kYygpKXJldHVybiBGaygpLEZrKCksZkY7Zm9yKG49bmV3IE9ydChlLHQuZ2MoKSksYT1uZXcgb3IoZSk7YS5lIT1hLmkuZ2MoKTspcj1ncihhKSx0LkhjKHIpJiZxcihuLHIpO3JldHVybiBufWZ1bmN0aW9uIHN4ZShlLHQsbixyKXtyZXR1cm4gdD09MD9yPyghZS5vJiYoZS5vPW5ldyB4bCgoc3UoKSxDZyksTDIsZSwwKSksZS5vKTooIWUubyYmKGUubz1uZXcgeGwoKHN1KCksQ2cpLEwyLGUsMCkpLGlOKGUubykpOnJVKGUsdCxuLHIpfWZ1bmN0aW9uIHl1ZShlKXt2YXIgdCxuO2lmKGUucmIpZm9yKHQ9MCxuPWUucmIuaTt0PG47Kyt0KVNPKE9lKGUucmIsdCkpO2lmKGUudmIpZm9yKHQ9MCxuPWUudmIuaTt0PG47Kyt0KVNPKE9lKGUudmIsdCkpO0tfKChFbCgpLGlvKSxlKSxlLkJifD0xfWZ1bmN0aW9uIHNzKGUsdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEIseil7cmV0dXJuIExwdChlLHQscixudWxsLGEsbyxmLGcsdyxFLEIsITAseiksbThlKGUsQyksRGUoZS5DYiw5MCkmJnp5KFlsKGwoZS5DYiw5MCkpLDIpLG4mJmI3ZShlLG4pLHY4ZShlLEwpLGV9ZnVuY3Rpb24gQTduKGUpe3ZhciB0LG47aWYoZT09bnVsbClyZXR1cm4gbnVsbDtuPTA7dHJ5e249T2goZSxsbyxJaSkmWnN9Y2F0Y2gocil7aWYocj1icyhyKSxEZShyLDEzMCkpdD1pVihlKSxuPXRbMF07ZWxzZSB0aHJvdyB1ZShyKX1yZXR1cm4gd04obil9ZnVuY3Rpb24gTDduKGUpe3ZhciB0LG47aWYoZT09bnVsbClyZXR1cm4gbnVsbDtuPTA7dHJ5e249T2goZSxsbyxJaSkmWnN9Y2F0Y2gocil7aWYocj1icyhyKSxEZShyLDEzMCkpdD1pVihlKSxuPXRbMF07ZWxzZSB0aHJvdyB1ZShyKX1yZXR1cm4gd04obil9ZnVuY3Rpb24gTTduKGUsdCl7dmFyIG4scixhO3JldHVybiBhPWUuaC10LmgsYTwwfHwobj1lLmwtdC5sLHI9ZS5tLXQubSsobj4+MjIpLGErPXI+PjIyLGE8MCk/ITE6KGUubD1uJmVoLGUubT1yJmVoLGUuaD1hJmhwLCEwKX1mdW5jdGlvbiB4dWUoZSx0LG4scixhLG8sZil7dmFyIGcsdztyZXR1cm4hKHQuVGUoKSYmKHc9ZS5hLk5lKG4sciksdzwwfHwhYSYmdz09MCl8fHQuVWUoKSYmKGc9ZS5hLk5lKG4sbyksZz4wfHwhZiYmZz09MCkpfWZ1bmN0aW9uIEQ3bihlLHQpe1RFKCk7dmFyIG47aWYobj1lLmouZy10LmouZyxuIT0wKXJldHVybiAwO3N3aXRjaChlLmouZyl7Y2FzZSAyOnJldHVybiB6Y2UodCxjTGUpLXpjZShlLGNMZSk7Y2FzZSA0OnJldHVybiB6Y2UoZSxvTGUpLXpjZSh0LG9MZSl9cmV0dXJuIDB9ZnVuY3Rpb24gSTduKGUpe3N3aXRjaChlLmcpe2Nhc2UgMDpyZXR1cm4gRDFlO2Nhc2UgMTpyZXR1cm4gSTFlO2Nhc2UgMjpyZXR1cm4gTzFlO2Nhc2UgMzpyZXR1cm4gTjFlO2Nhc2UgNDpyZXR1cm4gUUs7Y2FzZSA1OnJldHVybiBQMWU7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gYWMoZSx0LG4pe3ZhciByLGE7cmV0dXJuIHI9KGE9bmV3IEhpZSxHbShhLHQpLEZ1KGEsbikscXIoKCFlLmMmJihlLmM9bmV3IG50KGszLGUsMTIsMTApKSxlLmMpLGEpLGEpLGkyKHIsMCksTXkociwxKSx1MihyLCEwKSxjMihyLCEwKSxyfWZ1bmN0aW9uIHZ4KGUsdCl7dmFyIG4scjtpZih0Pj1lLmkpdGhyb3cgdWUobmV3IFZzZSh0LGUuaSkpO3JldHVybisrZS5qLG49ZS5nW3RdLHI9ZS5pLXQtMSxyPjAmJnB1KGUuZyx0KzEsZS5nLHQsciksVHMoZS5nLC0tZS5pLG51bGwpLGUuUWkodCxuKSxlLk5pKCksbn1mdW5jdGlvbiBRZHQoZSx0KXt2YXIgbixyO3JldHVybiBlLkRiPj4xNj09MTc/ZS5DYi5UaChlLDIxLFZmLHQpOihyPVJvKGwoTW4oKG49bChLbihlLDE2KSwyOSksbnx8ZS5paSgpKSxlLkRiPj4xNiksMTkpKSxlLkNiLlRoKGUsci5uLHIuZix0KSl9ZnVuY3Rpb24gTzduKGUpe3ZhciB0LG4scixhO2ZvcihDbigpLFZzKGUuYyxlLmEpLGE9bmV3IEcoZS5jKTthLmE8YS5jLmMubGVuZ3RoOylmb3Iocj1yZShhKSxuPW5ldyBHKGUuYik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDY5MyksdC5iZihyKX1mdW5jdGlvbiBON24oZSl7dmFyIHQsbixyLGE7Zm9yKENuKCksVnMoZS5jLGUuYSksYT1uZXcgRyhlLmMpO2EuYTxhLmMuYy5sZW5ndGg7KWZvcihyPXJlKGEpLG49bmV3IEcoZS5iKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMzgyKSx0LmJmKHIpfWZ1bmN0aW9uIFA3bihlKXt2YXIgdCxuLHIsYSxvO2ZvcihhPUlpLG89bnVsbCxyPW5ldyBHKGUuZCk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDIxOCksbi5kLmpebi5lLmomJih0PW4uZS5lLW4uZC5lLW4uYSx0PGEmJihhPXQsbz1uKSk7cmV0dXJuIG99ZnVuY3Rpb24gYXhlKCl7YXhlPVUsbDh0PW5ldyBwbihQRWUsKEhuKCksITEpKSxvOHQ9bmV3IHBuKEJFZSwxMDApLGFBZT0obEEoKSx0MWUpLGM4dD1uZXcgcG4oRkVlLGFBZSksdTh0PW5ldyBwbihSRWUsRGQpLGg4dD1uZXcgcG4oakVlLHB0KElpKSl9ZnVuY3Rpb24gSmR0KGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDO2ZvcihFPTAsYT1lLmFbdF0sbz0wLGY9YS5sZW5ndGg7bzxmOysrbylmb3Iocj1hW29dLEM9VEEocixuKSx3PUMuS2MoKTt3Lk9iKCk7KWc9bCh3LlBiKCksMTIpLGtpKGUuZixnLHB0KEUrKykpfWZ1bmN0aW9uIEI3bihlLHQsbil7dmFyIHIsYSxvLGY7aWYobilmb3IoYT1uLmEubGVuZ3RoLHI9bmV3IERtKGEpLGY9KHIuYi1yLmEpKnIuYzwwPyhzYigpLHRtKTpuZXcgY2Iocik7Zi5PYigpOylvPWwoZi5QYigpLDE3KSx4bihlLHQseHgoX3kobixvLmEpKSl9ZnVuY3Rpb24gRjduKGUsdCxuKXt2YXIgcixhLG8sZjtpZihuKWZvcihhPW4uYS5sZW5ndGgscj1uZXcgRG0oYSksZj0oci5iLXIuYSkqci5jPDA/KHNiKCksdG0pOm5ldyBjYihyKTtmLk9iKCk7KW89bChmLlBiKCksMTcpLHhuKGUsdCx4eChfeShuLG8uYSkpKX1mdW5jdGlvbiBveGUoZSl7Q2IoKTt2YXIgdDtyZXR1cm4gdD1sKFBBKFc4KGUuayksV2UoT28sYXUsNjQsMiwwLDEpKSwxMjYpLG5FKHQsMCx0Lmxlbmd0aCxudWxsKSx0WzBdPT0oQ3QoKSxRbikmJnRbMV09PWVyJiYoVHModCwwLGVyKSxUcyh0LDEsUW4pKSx0fWZ1bmN0aW9uIFpkdChlLHQsbil7dmFyIHIsYSxvO3JldHVybiBhPUNDbihlLHQsbiksbz1ROWUoZSxhKSxSb2UoZS5iKSx2b2UoZSx0LG4pLENuKCksVnMoYSxuZXcgcVllKGUpKSxyPVE5ZShlLGEpLFJvZShlLmIpLHZvZShlLG4sdCksbmV3IGNhKHB0KG8pLHB0KHIpKX1mdW5jdGlvbiBlZ3QoKXtlZ3Q9VSxORXQ9ZmkobmV3IFhzLCh1bygpLG1jKSwodm8oKSx6TCkpLElXPW5ldyB2cygibGluZWFyU2VnbWVudHMuaW5wdXRQcmlvIixwdCgwKSksT1c9bmV3IHZzKCJsaW5lYXJTZWdtZW50cy5vdXRwdXRQcmlvIixwdCgwKSl9ZnVuY3Rpb24gd3goKXt3eD1VLE5XPW5ldyB2cSgiUDFfVFJFRUlGSUNBVElPTiIsMCksbE09bmV3IHZxKCJQMl9OT0RFX09SREVSSU5HIiwxKSxoTT1uZXcgdnEoIlAzX05PREVfUExBQ0VNRU5UIiwyKSxmTT1uZXcgdnEoIlA0X0VER0VfUk9VVElORyIsMyl9ZnVuY3Rpb24gUjduKGUpe3ZhciB0LG4scixhO2ZvcihuPTAsdD0wLGE9bmV3IG9yKGUpO2EuZSE9YS5pLmdjKCk7KXI9bChncihhKSwyNyksbj1iLk1hdGgubWF4KHIuZytyLmksbiksdD1iLk1hdGgubWF4KHIuZityLmosdCk7cmV0dXJuIG5ldyBsdChuLHQpfWZ1bmN0aW9uIGo3bihlLHQpe3ZhciBuLHIsYSxvO2ZvcihvPTAscj1uZXcgRyhlKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMjcpLG8rPWIuTWF0aC5wb3cobi5nKm4uZi10LDIpO3JldHVybiBhPWIuTWF0aC5zcXJ0KG8vKGUuYy5sZW5ndGgtMSkpLGF9ZnVuY3Rpb24gSWgoKXtJaD1VLGVGPW5ldyBrcSgiVU5LTk9XTiIsMCksa2c9bmV3IGtxKCJBQk9WRSIsMSksR2I9bmV3IGtxKCJCRUxPVyIsMiksWkI9bmV3IGtxKCJJTkxJTkUiLDMpLG5ldyB2cygib3JnLmVjbGlwc2UuZWxrLmxhYmVsU2lkZSIsZUYpfWZ1bmN0aW9uIHRndChlLHQpe3ZhciBuO2lmKGUuWWkoKSYmdCE9bnVsbCl7Zm9yKG49MDtuPGUuaTsrK24paWYoUGkodCxlLmdbbl0pKXJldHVybiBufWVsc2UgZm9yKG49MDtuPGUuaTsrK24paWYocWUoZS5nW25dKT09PXFlKHQpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uICQ3bihlLHQsbil7dmFyIHIsYTtyZXR1cm4gdC5jPT0ocW8oKSx6dSkmJm4uYz09JGw/LTE6dC5jPT0kbCYmbi5jPT16dT8xOihyPXEwdCh0LmEsZS5hKSxhPXEwdChuLmEsZS5hKSx0LmM9PXp1P2EtcjpyLWEpfWZ1bmN0aW9uIEZ5KGUsdCxuKXtpZihuJiYodDwwfHx0Pm4uYS5jLmxlbmd0aCkpdGhyb3cgdWUobmV3IFluKCJpbmRleCBtdXN0IGJlID49IDAgYW5kIDw9IGxheWVyIG5vZGUgY291bnQiKSk7ZS5jJiZhbChlLmMuYSxlKSxlLmM9bixuJiZwdyhuLmEsdCxlKX1mdW5jdGlvbiBuZ3QoZSx0KXt2YXIgbixyLGE7Zm9yKHI9bmV3IGhyKGRyKHNwKGUpLmEuS2MoKSxuZXcgaikpO2pyKHIpOylyZXR1cm4gbj1sKHhyKHIpLDE4KSxhPWwodC5LYihuKSwxMCksbmV3IEpTKFhyKGEubi5iK2Euby5iLzIpKTtyZXR1cm4gb18oKSxvXygpLHYwZX1mdW5jdGlvbiByZ3QoZSx0KXt0aGlzLmM9bmV3IFByLHRoaXMuYT1lLHRoaXMuYj10LHRoaXMuZD1sKFEoZSwoZnQoKSwkNikpLDMxMikscWUoUShlLChOdCgpLEdNZSkpKT09PXFlKChjTigpLEpLKSk/dGhpcy5lPW5ldyBYUWU6dGhpcy5lPW5ldyBZUWV9ZnVuY3Rpb24gQkEoZSx0KXt2YXIgbixyO3JldHVybiByPW51bGwsZS5wZigocGkoKSxyOSkpJiYobj1sKGUub2YocjkpLDk2KSxuLnBmKHQpJiYocj1uLm9mKHQpKSkscj09bnVsbCYmZS5UZigpJiYocj1lLlRmKCkub2YodCkpLHI9PW51bGwmJihyPUl0KHQpKSxyfWZ1bmN0aW9uIGt1ZShlLHQpe3ZhciBuLHI7bj1lLmZkKHQpO3RyeXtyZXR1cm4gcj1uLlBiKCksbi5RYigpLHJ9Y2F0Y2goYSl7dGhyb3cgYT1icyhhKSxEZShhLDExMik/dWUobmV3IHRjKCJDYW4ndCByZW1vdmUgZWxlbWVudCAiK3QpKTp1ZShhKX19ZnVuY3Rpb24gejduKGUsdCl7dmFyIG4scixhO2lmKHI9bmV3IFF6LGE9bmV3IFI3ZShyLnEuZ2V0RnVsbFllYXIoKS1MYixyLnEuZ2V0TW9udGgoKSxyLnEuZ2V0RGF0ZSgpKSxuPUpBbihlLHQsYSksbj09MHx8bjx0Lmxlbmd0aCl0aHJvdyB1ZShuZXcgWW4odCkpO3JldHVybiBhfWZ1bmN0aW9uIGN4ZShlLHQpe3ZhciBuLHIsYTtmb3IobnIodCkscXllKHQhPWUpLGE9ZS5iLmMubGVuZ3RoLHI9dC5LYygpO3IuT2IoKTspbj1yLlBiKCksdnQoZS5iLG5yKG4pKTtyZXR1cm4gYSE9ZS5iLmMubGVuZ3RoPyhLN2UoZSwwKSwhMCk6ITF9ZnVuY3Rpb24gVk4oKXtWTj1VLGxBZT0ocGkoKSxXQiksbmV3IEhhKERnZSwoSG4oKSwhMCkpLGQ4dD1rdixnOHQ9aTcscDh0PVViLGY4dD1yNyxmQWU9WUIsYjh0PVM0LHVBZT0oYXhlKCksbDh0KSxvQWU9Yzh0LGNBZT11OHQsaEFlPWg4dCxUSz1vOHR9ZnVuY3Rpb24gcTduKGUsdCl7aWYodD09ZS5jKXJldHVybiBlLmQ7aWYodD09ZS5kKXJldHVybiBlLmM7dGhyb3cgdWUobmV3IFluKCIncG9ydCcgbXVzdCBiZSBlaXRoZXIgdGhlIHNvdXJjZSBwb3J0IG9yIHRhcmdldCBwb3J0IG9mIHRoZSBlZGdlLiIpKX1mdW5jdGlvbiBIN24oZSx0LG4pe3ZhciByLGE7c3dpdGNoKGE9ZS5vLHI9ZS5kLHQuZyl7Y2FzZSAxOnJldHVybi1yLmQtbjtjYXNlIDM6cmV0dXJuIGEuYityLmErbjtjYXNlIDI6cmV0dXJuIGEuYStyLmMrbjtjYXNlIDQ6cmV0dXJuLXIuYi1uO2RlZmF1bHQ6cmV0dXJuIDB9fWZ1bmN0aW9uIHV4ZShlLHQsbixyKXt2YXIgYSxvLGYsZztmb3IoVmEodCxsKHIuWGIoMCksMzApKSxnPXIua2QoMSxyLmdjKCkpLG89bChuLktiKHQpLDIwKS5LYygpO28uT2IoKTspYT1sKG8uUGIoKSwxOCksZj1hLmMuaT09dD9hLmQuaTphLmMuaSx1eGUoZSxmLG4sZyl9ZnVuY3Rpb24gaWd0KGUpe3ZhciB0O3JldHVybiB0PW5ldyBQcixucyhlLChmdCgpLFcxZSkpP2woUShlLFcxZSksODUpOihJcyhGaShuZXcgYm4obnVsbCxuZXcga24oZS5qLDE2KSksbmV3IEdaKSxuZXcgdVllKHQpKSxydChlLFcxZSx0KSx0KX1mdW5jdGlvbiBzZ3QoZSx0KXt2YXIgbixyLGEsbyxmO2ZvcihyPTAsYT0wLG49MCxmPW5ldyBHKGUpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxODYpLHI9Yi5NYXRoLm1heChyLG8uZSksYSs9by5iKyhuPjA/dDowKSwrK247cmV0dXJuIG5ldyBsdChyLGEpfWZ1bmN0aW9uIGx4ZShlLHQpe3ZhciBuLHI7cmV0dXJuIGUuRGI+PjE2PT02P2UuQ2IuVGgoZSw2LGpzLHQpOihyPVJvKGwoTW4oKG49bChLbihlLDE2KSwyOSksbnx8KHN1KCkscFkpKSxlLkRiPj4xNiksMTkpKSxlLkNiLlRoKGUsci5uLHIuZix0KSl9ZnVuY3Rpb24gaHhlKGUsdCl7dmFyIG4scjtyZXR1cm4gZS5EYj4+MTY9PTc/ZS5DYi5UaChlLDEsb0YsdCk6KHI9Um8obChNbigobj1sKEtuKGUsMTYpLDI5KSxufHwoc3UoKSxkUGUpKSxlLkRiPj4xNiksMTkpKSxlLkNiLlRoKGUsci5uLHIuZix0KSl9ZnVuY3Rpb24gZnhlKGUsdCl7dmFyIG4scjtyZXR1cm4gZS5EYj4+MTY9PTk/ZS5DYi5UaChlLDksQWksdCk6KHI9Um8obChNbigobj1sKEtuKGUsMTYpLDI5KSxufHwoc3UoKSxwUGUpKSxlLkRiPj4xNiksMTkpKSxlLkNiLlRoKGUsci5uLHIuZix0KSl9ZnVuY3Rpb24gYWd0KGUsdCl7dmFyIG4scjtyZXR1cm4gZS5EYj4+MTY9PTU/ZS5DYi5UaChlLDksVFksdCk6KHI9Um8obChNbigobj1sKEtuKGUsMTYpLDI5KSxufHwoVG4oKSxEMikpLGUuRGI+PjE2KSwxOSkpLGUuQ2IuVGgoZSxyLm4sci5mLHQpKX1mdW5jdGlvbiBvZ3QoZSx0KXt2YXIgbixyO3JldHVybiBlLkRiPj4xNj09Nz9lLkNiLlRoKGUsNix1MSx0KToocj1SbyhsKE1uKChuPWwoS24oZSwxNiksMjkpLG58fChUbigpLE8yKSksZS5EYj4+MTYpLDE5KSksZS5DYi5UaChlLHIubixyLmYsdCkpfWZ1bmN0aW9uIGR4ZShlLHQpe3ZhciBuLHI7cmV0dXJuIGUuRGI+PjE2PT0zP2UuQ2IuVGgoZSwwLHVGLHQpOihyPVJvKGwoTW4oKG49bChLbihlLDE2KSwyOSksbnx8KFRuKCksTTIpKSxlLkRiPj4xNiksMTkpKSxlLkNiLlRoKGUsci5uLHIuZix0KSl9ZnVuY3Rpb24gY2d0KCl7dGhpcy5hPW5ldyBUJCx0aGlzLmc9bmV3IGNVLHRoaXMuaj1uZXcgY1UsdGhpcy5iPW5ldyBQcix0aGlzLmQ9bmV3IGNVLHRoaXMuaT1uZXcgY1UsdGhpcy5rPW5ldyBQcix0aGlzLmM9bmV3IFByLHRoaXMuZT1uZXcgUHIsdGhpcy5mPW5ldyBQcn1mdW5jdGlvbiBWN24oZSx0LG4pe3ZhciByLGEsbztmb3IobjwwJiYobj0wKSxvPWUuaSxhPW47YTxvO2ErKylpZihyPU9lKGUsYSksdD09bnVsbCl7aWYocj09bnVsbClyZXR1cm4gYX1lbHNlIGlmKHFlKHQpPT09cWUocil8fFBpKHQscikpcmV0dXJuIGE7cmV0dXJuLTF9ZnVuY3Rpb24gVTduKGUsdCl7dmFyIG4scjtyZXR1cm4gbj10LnFpKGUuYSksbj8ocj1laShuMSgoIW4uYiYmKG4uYj1uZXcgZGgoKFRuKCksTm8pLFljLG4pKSxuLmIpLHRLKSksdm4oSlAscik/S18oZSxBaCh0LnFrKCkpKTpyKTpudWxsfWZ1bmN0aW9uIEZFKGUsdCl7dmFyIG4scjtpZih0KXtpZih0PT1lKXJldHVybiEwO2ZvcihuPTAscj1sKHQsNTQpLlBoKCk7ciYmciE9dDtyPXIuUGgoKSl7aWYoKytuPm9oZSlyZXR1cm4gRkUoZSxyKTtpZihyPT1lKXJldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiBHN24oZSl7c3dpdGNoKHpxKCksZS5xLmcpe2Nhc2UgNTpWcHQoZSwoQ3QoKSxRbikpLFZwdChlLERyKTticmVhaztjYXNlIDQ6VTJ0KGUsKEN0KCksUW4pKSxVMnQoZSxEcik7YnJlYWs7ZGVmYXVsdDpXdnQoZSwoQ3QoKSxRbikpLFd2dChlLERyKX19ZnVuY3Rpb24gSzduKGUpe3N3aXRjaCh6cSgpLGUucS5nKXtjYXNlIDU6dTJ0KGUsKEN0KCksYXIpKSx1MnQoZSxlcik7YnJlYWs7Y2FzZSA0OmdkdChlLChDdCgpLGFyKSksZ2R0KGUsZXIpO2JyZWFrO2RlZmF1bHQ6WXZ0KGUsKEN0KCksYXIpKSxZdnQoZSxlcil9fWZ1bmN0aW9uIFc3bihlKXt2YXIgdCxuO3Q9bChRKGUsKGIwKCksZTh0KSksMTcpLHQ/KG49dC5hLG49PTA/cnQoZSwoYmIoKSxFSyksbmV3IFVjZSk6cnQoZSwoYmIoKSxFSyksbmV3IFZIKG4pKSk6cnQoZSwoYmIoKSxFSyksbmV3IFZIKDEpKX1mdW5jdGlvbiBZN24oZSx0KXt2YXIgbjtzd2l0Y2gobj1lLmksdC5nKXtjYXNlIDE6cmV0dXJuLShlLm4uYitlLm8uYik7Y2FzZSAyOnJldHVybiBlLm4uYS1uLm8uYTtjYXNlIDM6cmV0dXJuIGUubi5iLW4uby5iO2Nhc2UgNDpyZXR1cm4tKGUubi5hK2Uuby5hKX1yZXR1cm4gMH1mdW5jdGlvbiBYN24oZSx0KXtzd2l0Y2goZS5nKXtjYXNlIDA6cmV0dXJuIHQ9PShoZigpLCRiKT9ISzpWSztjYXNlIDE6cmV0dXJuIHQ9PShoZigpLCRiKT9ISzpwQjtjYXNlIDI6cmV0dXJuIHQ9PShoZigpLCRiKT9wQjpWSztkZWZhdWx0OnJldHVybiBwQn19ZnVuY3Rpb24gVU4oZSx0KXt2YXIgbixyLGE7Zm9yKGFsKGUuYSx0KSxlLmUtPXQucisoZS5hLmMubGVuZ3RoPT0wPzA6ZS5jKSxhPXhDZSxyPW5ldyBHKGUuYSk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDE3MiksYT1iLk1hdGgubWF4KGEsbi5kKTtlLmI9YX1mdW5jdGlvbiBneGUoZSx0KXt2YXIgbixyO3JldHVybiBlLkRiPj4xNj09Mz9lLkNiLlRoKGUsMTIsQWksdCk6KHI9Um8obChNbigobj1sKEtuKGUsMTYpLDI5KSxufHwoc3UoKSxmUGUpKSxlLkRiPj4xNiksMTkpKSxlLkNiLlRoKGUsci5uLHIuZix0KSl9ZnVuY3Rpb24gcHhlKGUsdCl7dmFyIG4scjtyZXR1cm4gZS5EYj4+MTY9PTExP2UuQ2IuVGgoZSwxMCxBaSx0KToocj1SbyhsKE1uKChuPWwoS24oZSwxNiksMjkpLG58fChzdSgpLGdQZSkpLGUuRGI+PjE2KSwxOSkpLGUuQ2IuVGgoZSxyLm4sci5mLHQpKX1mdW5jdGlvbiB1Z3QoZSx0KXt2YXIgbixyO3JldHVybiBlLkRiPj4xNj09MTA/ZS5DYi5UaChlLDExLFZmLHQpOihyPVJvKGwoTW4oKG49bChLbihlLDE2KSwyOSksbnx8KFRuKCksSTIpKSxlLkRiPj4xNiksMTkpKSxlLkNiLlRoKGUsci5uLHIuZix0KSl9ZnVuY3Rpb24gbGd0KGUsdCl7dmFyIG4scjtyZXR1cm4gZS5EYj4+MTY9PTEwP2UuQ2IuVGgoZSwxMixVZix0KToocj1SbyhsKE1uKChuPWwoS24oZSwxNiksMjkpLG58fChUbigpLE40KSksZS5EYj4+MTYpLDE5KSksZS5DYi5UaChlLHIubixyLmYsdCkpfWZ1bmN0aW9uIE9mKGUpe3ZhciB0O3JldHVybiEoZS5CYiYxKSYmZS5yJiZlLnIuVmgoKSYmKHQ9bChlLnIsNTQpLGUucj1sKHliKGUsdCksMTQyKSxlLnIhPXQmJmUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDksOCx0LGUucikpKSxlLnJ9ZnVuY3Rpb24gRXVlKGUsdCxuKXt2YXIgcjtyZXR1cm4gcj1oZShsZShOYSwxKSxabywyOCwxNSxbenhlKGUsKHQxKCksR2MpLHQsbiksenhlKGUsJHUsdCxuKSx6eGUoZSxLYyx0LG4pXSksZS5mJiYoclswXT1iLk1hdGgubWF4KHJbMF0sclsyXSksclsyXT1yWzBdKSxyfWZ1bmN0aW9uIFE3bihlLHQpe3ZhciBuLHIsYTtpZihhPXg2bihlLHQpLGEuYy5sZW5ndGghPTApZm9yKFZzKGEsbmV3IHBTKSxuPWEuYy5sZW5ndGgscj0wO3I8bjtyKyspcUUoZSwoU24ocixhLmMubGVuZ3RoKSxsKGEuY1tyXSwyOTMpKSx5U24oZSxhLHIpKX1mdW5jdGlvbiBKN24oZSl7dmFyIHQsbixyLGE7Zm9yKGE9bCgkaShlLmEsKFJ5KCksVUspKSwxNSkuS2MoKTthLk9iKCk7KWZvcihyPWwoYS5QYigpLDEwNSksbj1XOChyLmspLktjKCk7bi5PYigpOyl0PWwobi5QYigpLDY0KSxWayhlLHIsdCwoT3coKSxSYiksMSl9ZnVuY3Rpb24gWjduKGUpe3ZhciB0LG47aWYoZS5rPT0oWm4oKSxBYSkpe2ZvcihuPW5ldyBocihkcihzcChlKS5hLktjKCksbmV3IGopKTtqcihuKTspaWYodD1sKHhyKG4pLDE4KSwhRG8odCkmJmUuYz09a3hlKHQsZSkuYylyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBlOG4oZSl7dmFyIHQsbjtpZihlLms9PShabigpLEFhKSl7Zm9yKG49bmV3IGhyKGRyKHNwKGUpLmEuS2MoKSxuZXcgaikpO2pyKG4pOylpZih0PWwoeHIobiksMTgpLCFEbyh0KSYmdC5jLmkuYz09dC5kLmkuYylyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiB0OG4oZSx0KXt2YXIgbixyLGEsbyxmO2lmKHQpZm9yKGE9dC5hLmxlbmd0aCxuPW5ldyBEbShhKSxmPShuLmItbi5hKSpuLmM8MD8oc2IoKSx0bSk6bmV3IGNiKG4pO2YuT2IoKTspbz1sKGYuUGIoKSwxNykscj1Kayh0LG8uYSksciYmUjJ0KGUscil9ZnVuY3Rpb24gbjhuKCl7eDNlKCk7dmFyIGUsdDtmb3IoSEluKChsYigpLFZuKSksT0luKFZuKSx5dWUoVm4pLExQZT0oVG4oKSx0ZCksdD1uZXcgRyhSUGUpO3QuYTx0LmMuYy5sZW5ndGg7KWU9bChyZSh0KSwyNDgpLFpFKGUsdGQsbnVsbCk7cmV0dXJuITB9ZnVuY3Rpb24gYnhlKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRTtyZXR1cm4gdz1lLmg+PjE5LEU9dC5oPj4xOSx3IT1FP0UtdzooYT1lLmgsZz10LmgsYSE9Zz9hLWc6KHI9ZS5tLGY9dC5tLHIhPWY/ci1mOihuPWUubCxvPXQubCxuLW8pKSl9ZnVuY3Rpb24gZFUoKXtkVT1VLERfZT0oUFUoKSx6MGUpLE1fZT1uZXcgcG4ocEVlLERfZSksTF9lPShhVigpLCQwZSksQV9lPW5ldyBwbihiRWUsTF9lKSxfX2U9KFpWKCksajBlKSxTX2U9bmV3IHBuKG1FZSxfX2UpLENfZT1uZXcgcG4odkVlLChIbigpLCEwKSl9ZnVuY3Rpb24gRkEoZSx0LG4pe3ZhciByLGE7cj10Km4sRGUoZS5nLDE1NCk/KGE9aXgoZSksYS5mLmQ/YS5mLmF8fChlLmQuYSs9citIMSk6KGUuZC5kLT1yK0gxLGUuZC5hKz1yK0gxKSk6RGUoZS5nLDEwKSYmKGUuZC5kLT1yLGUuZC5hKz0yKnIpfWZ1bmN0aW9uIGhndChlLHQsbil7dmFyIHIsYSxvLGYsZztmb3IoYT1lW24uZ10sZz1uZXcgRyh0LmQpO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwxMDUpLG89Zi5pLG8mJm8uaT09biYmKHI9Zi5kW24uZ10sYVtyXT1iLk1hdGgubWF4KGFbcl0sby5qLmIpKX1mdW5jdGlvbiByOG4oZSx0KXt2YXIgbixyLGEsbyxmO2ZvcihyPTAsYT0wLG49MCxmPW5ldyBHKHQuZCk7Zi5hPGYuYy5jLmxlbmd0aDspbz1sKHJlKGYpLDMxNSksbFUobykscj1iLk1hdGgubWF4KHIsby5iKSxhKz1vLmQrKG4+MD9lLmI6MCksKytuO3QuYj1yLHQuZT1hfWZ1bmN0aW9uIGZndChlKXt2YXIgdCxuLHI7aWYocj1lLmIsdGV0KGUuaSxyLmxlbmd0aCkpe2ZvcihuPXIubGVuZ3RoKjIsZS5iPVdlKGswZSxUUCwzMDMsbiwwLDEpLGUuYz1XZShrMGUsVFAsMzAzLG4sMCwxKSxlLmY9bi0xLGUuaT0wLHQ9ZS5hO3Q7dD10LmMpZVAoZSx0LHQpOysrZS5nfX1mdW5jdGlvbiBpOG4oZSx0LG4scil7dmFyIGEsbyxmLGc7Zm9yKGE9MDthPHQubzthKyspZm9yKG89YS10LmorbixmPTA7Zjx0LnA7ZisrKWc9Zi10LmsrcixyNih0LGEsZik/UTZuKGUsbyxnKXx8cDduKGUsbyxnKTpQZHQodCxhLGYpJiYoRGR0KGUsbyxnKXx8YjduKGUsbyxnKSl9ZnVuY3Rpb24gUkEoZSx0KXtyZXR1cm4gZS5iLmE9Yi5NYXRoLm1pbihlLmIuYSx0LmMpLGUuYi5iPWIuTWF0aC5taW4oZS5iLmIsdC5kKSxlLmEuYT1iLk1hdGgubWF4KGUuYS5hLHQuYyksZS5hLmI9Yi5NYXRoLm1heChlLmEuYix0LmQpLCRuKGUuYyx0KSwhMH1mdW5jdGlvbiBzOG4oZSx0LG4pe3ZhciByO3I9dC5jLmksci5rPT0oWm4oKSxBYSk/KHJ0KGUsKGZ0KCksbzEpLGwoUShyLG8xKSwxMikpLHJ0KGUsJGYsbChRKHIsJGYpLDEyKSkpOihydChlLChmdCgpLG8xKSx0LmMpLHJ0KGUsJGYsbi5kKSl9ZnVuY3Rpb24gUkUoZSx0LG4pe2g2KCk7dmFyIHIsYSxvLGYsZyx3O3JldHVybiBmPXQvMixvPW4vMixyPWIuTWF0aC5hYnMoZS5hKSxhPWIuTWF0aC5hYnMoZS5iKSxnPTEsdz0xLHI+ZiYmKGc9Zi9yKSxhPm8mJih3PW8vYSksbWQoZSxiLk1hdGgubWluKGcsdykpLGV9ZnVuY3Rpb24gYThuKCl7elUoKTt2YXIgZSx0O3RyeXtpZih0PWwoU3hlKChpYigpLEdmKSx4VCksMjExMyksdClyZXR1cm4gdH1jYXRjaChuKXtpZihuPWJzKG4pLERlKG4sMTAzKSllPW4scDVlKChKcigpLGUpKTtlbHNlIHRocm93IHVlKG4pfXJldHVybiBuZXcgaWt9ZnVuY3Rpb24gbzhuKCl7elUoKTt2YXIgZSx0O3RyeXtpZih0PWwoU3hlKChpYigpLEdmKSxGZiksMjA0MCksdClyZXR1cm4gdH1jYXRjaChuKXtpZihuPWJzKG4pLERlKG4sMTAzKSllPW4scDVlKChKcigpLGUpKTtlbHNlIHRocm93IHVlKG4pfXJldHVybiBuZXcgZDh9ZnVuY3Rpb24gYzhuKCl7a2x0KCk7dmFyIGUsdDt0cnl7aWYodD1sKFN4ZSgoaWIoKSxHZiksY3YpLDIxMjIpLHQpcmV0dXJuIHR9Y2F0Y2gobil7aWYobj1icyhuKSxEZShuLDEwMykpZT1uLHA1ZSgoSnIoKSxlKSk7ZWxzZSB0aHJvdyB1ZShuKX1yZXR1cm4gbmV3IHVrfWZ1bmN0aW9uIHU4bihlLHQsbil7dmFyIHIsYTtyZXR1cm4gYT1lLmUsZS5lPXQsZS5EYiY0JiYhKGUuRGImMSkmJihyPW5ldyBfYShlLDEsNCxhLHQpLG4/bi5uaihyKTpuPXIpLGEhPXQmJih0P249WkUoZSxTVShlLHQpLG4pOm49WkUoZSxlLmEsbikpLG59ZnVuY3Rpb24gZGd0KCl7UXouY2FsbCh0aGlzKSx0aGlzLmU9LTEsdGhpcy5hPSExLHRoaXMucD1sbyx0aGlzLms9LTEsdGhpcy5jPS0xLHRoaXMuYj0tMSx0aGlzLmc9ITEsdGhpcy5mPS0xLHRoaXMuaj0tMSx0aGlzLm49LTEsdGhpcy5pPS0xLHRoaXMuZD0tMSx0aGlzLm89bG99ZnVuY3Rpb24gbDhuKGUsdCl7dmFyIG4scixhO2lmKHI9ZS5iLmQuZCxlLmF8fChyKz1lLmIuZC5hKSxhPXQuYi5kLmQsdC5hfHwoYSs9dC5iLmQuYSksbj1ZaShyLGEpLG49PTApe2lmKCFlLmEmJnQuYSlyZXR1cm4tMTtpZighdC5hJiZlLmEpcmV0dXJuIDF9cmV0dXJuIG59ZnVuY3Rpb24gaDhuKGUsdCl7dmFyIG4scixhO2lmKHI9ZS5iLmIuZCxlLmF8fChyKz1lLmIuYi5hKSxhPXQuYi5iLmQsdC5hfHwoYSs9dC5iLmIuYSksbj1ZaShyLGEpLG49PTApe2lmKCFlLmEmJnQuYSlyZXR1cm4tMTtpZighdC5hJiZlLmEpcmV0dXJuIDF9cmV0dXJuIG59ZnVuY3Rpb24gZjhuKGUsdCl7dmFyIG4scixhO2lmKHI9ZS5iLmcuZCxlLmF8fChyKz1lLmIuZy5hKSxhPXQuYi5nLmQsdC5hfHwoYSs9dC5iLmcuYSksbj1ZaShyLGEpLG49PTApe2lmKCFlLmEmJnQuYSlyZXR1cm4tMTtpZighdC5hJiZlLmEpcmV0dXJuIDF9cmV0dXJuIG59ZnVuY3Rpb24gbXhlKCl7bXhlPVUsdjh0PXlsKGZpKGZpKGZpKG5ldyBYcywodW8oKSxfdSksKHZvKCksS0FlKSksX3UsV0FlKSxtYyxZQWUpLG1jLEJBZSkseTh0PWZpKGZpKG5ldyBYcyxfdSxMQWUpLF91LEZBZSksdzh0PXlsKG5ldyBYcyxtYyxqQWUpfWZ1bmN0aW9uIGQ4bihlKXt2YXIgdCxuLHIsYSxvO2Zvcih0PWwoUShlLChmdCgpLEtMKSksODUpLG89ZS5uLHI9dC5DYygpLktjKCk7ci5PYigpOyluPWwoci5QYigpLDMxNCksYT1uLmksYS5jKz1vLmEsYS5kKz1vLmIsbi5jP0lidChuKTpPYnQobik7cnQoZSxLTCxudWxsKX1mdW5jdGlvbiBnOG4oZSx0LG4pe3ZhciByLGE7c3dpdGNoKGE9ZS5iLHI9YS5kLHQuZyl7Y2FzZSAxOnJldHVybi1yLmQtbjtjYXNlIDI6cmV0dXJuIGEuby5hK3IuYytuO2Nhc2UgMzpyZXR1cm4gYS5vLmIrci5hK247Y2FzZSA0OnJldHVybi1yLmItbjtkZWZhdWx0OnJldHVybi0xfX1mdW5jdGlvbiBwOG4oZSx0LG4pe3ZhciByLGE7Zm9yKG4uVWcoIkludGVyYWN0aXZlIG5vZGUgcGxhY2VtZW50IiwxKSxlLmE9bChRKHQsKGZ0KCksJDYpKSwzMTIpLGE9bmV3IEcodC5iKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMzApLG9TbihlLHIpO24uVmcoKX1mdW5jdGlvbiBiOG4oZSl7dmFyIHQsbixyLGEsbztpZihyPTAsYT15NixlLmIpZm9yKHQ9MDt0PDM2MDt0Kyspbj10Ki4wMTc0NTMyOTI1MTk5NDMyOTUsZ2tlKGUsZS5kLDAsMCxpdixuKSxvPWUuYi5EZyhlLmQpLG88YSYmKHI9bixhPW8pO2drZShlLGUuZCwwLDAsaXYscil9ZnVuY3Rpb24gbThuKGUsdCl7dmFyIG4scixhLG87Zm9yKG89bmV3IFByLHQuZT1udWxsLHQuZj1udWxsLHI9bmV3IEcodC5pKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksNjgpLGE9bChjcihlLmcsbi5hKSw0Miksbi5hPW1IKG4uYiksa2kobyxuLmEsYSk7ZS5nPW99ZnVuY3Rpb24gdjhuKGUsdCxuKXt2YXIgcixhLG8sZixnLHc7Zm9yKGE9dC1lLmUsbz1hL2UuZC5jLmxlbmd0aCxmPTAsdz1uZXcgRyhlLmQpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwzMTUpLHI9ZS5iLWcuYituLEIxdChnLGcuZStmKm8sZy5mKSxlN24oZyxvLHIpLCsrZn1mdW5jdGlvbiBnZ3QoZSl7dmFyIHQ7aWYoZS5mLl9qKCksZS5iIT0tMSl7aWYoKytlLmIsdD1lLmYuZFtlLmFdLGUuYjx0LmkpcmV0dXJuOysrZS5hfWZvcig7ZS5hPGUuZi5kLmxlbmd0aDsrK2UuYSlpZih0PWUuZi5kW2UuYV0sdCYmdC5pIT0wKXtlLmI9MDtyZXR1cm59ZS5iPS0xfWZ1bmN0aW9uIHc4bihlLHQpe3ZhciBuLHIsYTtmb3IoYT10LmMubGVuZ3RoLG49eGtuKGUsYT09MD8iIjooU24oMCx0LmMubGVuZ3RoKSxlaSh0LmNbMF0pKSkscj0xO3I8YSYmbjsrK3Ipbj1sKG4sNTQpLlpoKChTbihyLHQuYy5sZW5ndGgpLGVpKHQuY1tyXSkpKTtyZXR1cm4gbn1mdW5jdGlvbiBwZ3QoZSx0KXt2YXIgbixyO2ZvcihyPW5ldyBHKHQpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwxMCksZS5jW24uYy5wXVtuLnBdLmE9WTRlKGUuaSksZS5jW24uYy5wXVtuLnBdLmQ9emUoZS5jW24uYy5wXVtuLnBdLmEpLGUuY1tuLmMucF1bbi5wXS5iPTF9ZnVuY3Rpb24geThuKGUsdCl7dmFyIG4scixhLG87Zm9yKG89MCxyPW5ldyBHKGUpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwxNjMpLG8rPWIuTWF0aC5wb3cod2wobikqZ2gobiktdCwyKTtyZXR1cm4gYT1iLk1hdGguc3FydChvLyhlLmMubGVuZ3RoLTEpKSxhfWZ1bmN0aW9uIGJndChlLHQpe3ZhciBuLHIsYSxvO2ZvcihvPTAsYT1sKGwoJGkoZS5yLHQpLDIxKSw4NykuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMTE3KSxvPWIuTWF0aC5tYXgobyxyLmUuYStyLmIuTWYoKS5hKTtuPWwoUW8oZS5iLHQpLDEyNyksbi5uLmI9MCxuLmEuYT1vfWZ1bmN0aW9uIG1ndChlLHQpe3ZhciBuLHIsYSxvO2ZvcihuPTAsbz1sKGwoJGkoZS5yLHQpLDIxKSw4NykuS2MoKTtvLk9iKCk7KWE9bChvLlBiKCksMTE3KSxuPWIuTWF0aC5tYXgobixhLmUuYithLmIuTWYoKS5iKTtyPWwoUW8oZS5iLHQpLDEyNyksci5uLmQ9MCxyLmEuYj1ufWZ1bmN0aW9uIHZndChlLHQsbixyKXt2YXIgYSxvLGY7cmV0dXJuIG89bl9uKGUsdCxuLHIpLGY9c2tlKGUsbyksT3VlKGUsdCxuLHIpLFJvZShlLmIpLENuKCksVnMobyxuZXcgSFllKGUpKSxhPXNrZShlLG8pLE91ZShlLG4sdCxyKSxSb2UoZS5iKSxuZXcgY2EocHQoZikscHQoYSkpfWZ1bmN0aW9uIHg4bihlLHQpe3ZhciBuO3QuVWcoIkRlbGF1bmF5IHRyaWFuZ3VsYXRpb24iLDEpLG49bmV3IGJ0LFZ1KGUuaSxuZXcgQ1hlKG4pKSxSdChCdChRKGUsKHBFKCksakwpKSkpLGUuZT9LYShlLmUsZnd0KG4pKTplLmU9Znd0KG4pLHQuVmcoKX1mdW5jdGlvbiBrOG4oZSx0LG4pe3ZhciByLGE7Zm9yKGtPKGUsZS5qK3QsZS5rK24pLGE9bmV3IG9yKCghZS5hJiYoZS5hPW5ldyBZcyhxaCxlLDUpKSxlLmEpKTthLmUhPWEuaS5nYygpOylyPWwoZ3IoYSksMzc3KSxXc2UocixyLmErdCxyLmIrbik7eE8oZSxlLmIrdCxlLmMrbil9ZnVuY3Rpb24gdnhlKGUsdCxuLHIpe3N3aXRjaChuKXtjYXNlIDc6cmV0dXJuIWUuZSYmKGUuZT1uZXcgTG4oanMsZSw3LDQpKSxSdShlLmUsdCxyKTtjYXNlIDg6cmV0dXJuIWUuZCYmKGUuZD1uZXcgTG4oanMsZSw4LDUpKSxSdShlLmQsdCxyKX1yZXR1cm4gTXVlKGUsdCxuLHIpfWZ1bmN0aW9uIHd4ZShlLHQsbixyKXtzd2l0Y2gobil7Y2FzZSA3OnJldHVybiFlLmUmJihlLmU9bmV3IExuKGpzLGUsNyw0KSksVG8oZS5lLHQscik7Y2FzZSA4OnJldHVybiFlLmQmJihlLmQ9bmV3IExuKGpzLGUsOCw1KSksVG8oZS5kLHQscil9cmV0dXJuIGRjZShlLHQsbixyKX1mdW5jdGlvbiBFOG4oZSx0LG4pe3ZhciByLGEsbyxmLGc7aWYobilmb3Iobz1uLmEubGVuZ3RoLHI9bmV3IERtKG8pLGc9KHIuYi1yLmEpKnIuYzwwPyhzYigpLHRtKTpuZXcgY2Iocik7Zy5PYigpOylmPWwoZy5QYigpLDE3KSxhPUprKG4sZi5hKSxhJiZIcHQoZSxhLHQpfWZ1bmN0aW9uIEdOKGUsdCxuKXt2YXIgcixhLG8sZixnO3JldHVybiBlLl9qKCksbz10PT1udWxsPzA6ZXModCksZS5mPjAmJihmPShvJklpKSVlLmQubGVuZ3RoLGE9eTllKGUsZixvLHQpLGEpPyhnPWEubmQobiksZyk6KHI9ZS5jayhvLHQsbiksZS5jLkZjKHIpLG51bGwpfWZ1bmN0aW9uIHl4ZShlLHQpe3ZhciBuLHIsYSxvO3N3aXRjaChvMihlLHQpLktsKCkpe2Nhc2UgMzpjYXNlIDI6e2ZvcihuPWQ2KHQpLGE9MCxvPW4uaTthPG87KythKWlmKHI9bChPZShuLGEpLDM1KSxrdyhpYyhlLHIpKT09NSlyZXR1cm4gcjticmVha319cmV0dXJuIG51bGx9ZnVuY3Rpb24gVDhuKGUpe3ZhciB0LG4scixhLG87aWYodGV0KGUuZixlLmIubGVuZ3RoKSlmb3Iocj1XZShjNnQsVFAsMjI3LGUuYi5sZW5ndGgqMiwwLDEpLGUuYj1yLGE9ci5sZW5ndGgtMSxuPWUuYTtuIT1lO249bi5fZCgpKW89bChuLDIyNyksdD1vLmQmYSxvLmE9clt0XSxyW3RdPW99ZnVuY3Rpb24gQzhuKGUpe3ZhciB0LG47cmV0dXJuIG49bChRKGUsKGZ0KCksTHUpKSwyMSksdD1PcShYRXQpLG4uSGMoKEhvKCksQjYpKSYmRGgodCxaRXQpLG4uSGMoR0wpJiZEaCh0LGVUdCksbi5IYyhSVCkmJkRoKHQsUUV0KSxuLkhjKGpUKSYmRGgodCxKRXQpLHR9ZnVuY3Rpb24geHhlKGUpe2lmKGU8MCl0aHJvdyB1ZShuZXcgWW4oIlRoZSBpbnB1dCBtdXN0IGJlIHBvc2l0aXZlIikpO3JldHVybiBlPFVPZS5sZW5ndGg/Rm0oVU9lW2VdKTpiLk1hdGguc3FydChpdiplKSoodDRuKGUsZSkvbjhlKDIuNzE4MjgxODI4NDU5MDQ1LGUpKX1mdW5jdGlvbiBqRShlLHQpe3ZhciBuO2lmKGUuWWkoKSYmdCE9bnVsbCl7Zm9yKG49MDtuPGUuaTsrK24paWYoUGkodCxlLmdbbl0pKXJldHVybiEwfWVsc2UgZm9yKG49MDtuPGUuaTsrK24paWYocWUoZS5nW25dKT09PXFlKHQpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFM4bihlLHQpe2lmKHQ9PW51bGwpe2Zvcig7ZS5hLk9iKCk7KWlmKGwoZS5hLlBiKCksNDQpLm1kKCk9PW51bGwpcmV0dXJuITB9ZWxzZSBmb3IoO2UuYS5PYigpOylpZihQaSh0LGwoZS5hLlBiKCksNDQpLm1kKCkpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIF84bihlLHQpe3ZhciBuLHIsYTtyZXR1cm4gdD09PWU/ITA6RGUodCw2NzgpPyhhPWwodCwyMDQ2KSxZMXQoKHI9ZS5nLHJ8fChlLmc9bmV3ICRJKGUpKSksKG49YS5nLG58fChhLmc9bmV3ICRJKGEpKSkpKTohMX1mdW5jdGlvbiBBOG4oZSl7dmFyIHQsbixyLGE7Zm9yKHQ9ImdBIixuPSJ2eiIsYT1iLk1hdGgubWluKGUubGVuZ3RoLDUpLHI9YS0xO3I+PTA7ci0tKWlmKHZuKGVbcl0uZCx0KXx8dm4oZVtyXS5kLG4pKXtlLmxlbmd0aD49cisxJiZlLnNwbGljZSgwLHIrMSk7YnJlYWt9cmV0dXJuIGV9ZnVuY3Rpb24gS04oZSx0KXt2YXIgbjtyZXR1cm4gd2MoZSkmJndjKHQpJiYobj1lL3QsX1A8biYmbjxabSk/bjwwP2IuTWF0aC5jZWlsKG4pOmIuTWF0aC5mbG9vcihuKTptYihOa2Uod2MoZSk/TWYoZSk6ZSx3Yyh0KT9NZih0KTp0LCExKSl9ZnVuY3Rpb24ga3hlKGUsdCl7aWYodD09ZS5jLmkpcmV0dXJuIGUuZC5pO2lmKHQ9PWUuZC5pKXJldHVybiBlLmMuaTt0aHJvdyB1ZShuZXcgWW4oIidub2RlJyBtdXN0IGVpdGhlciBiZSB0aGUgc291cmNlIG5vZGUgb3IgdGFyZ2V0IG5vZGUgb2YgdGhlIGVkZ2UuIikpfWZ1bmN0aW9uIEw4bihlKXt2YXIgdCxuLHIsYTtpZihhPWwoUShlLChmdCgpLFJMZSkpLDM2KSxhKXtmb3Iocj1uZXcgcWEsdD1lbyhlLmMuaSk7dCE9YTspbj10LmUsdD1lbyhuKSxkdyhPaShPaShyLG4ubiksdC5jKSx0LmQuYix0LmQuZCk7cmV0dXJuIHJ9cmV0dXJuIFI4dH1mdW5jdGlvbiBNOG4oZSl7dmFyIHQ7dD1sKFEoZSwoZnQoKSxoMykpLDMzNyksSXMoRGMobmV3IGJuKG51bGwsbmV3IGtuKHQuZCwxNikpLG5ldyB6WiksbmV3IHJZZShlKSksSXMoRmkobmV3IGJuKG51bGwsbmV3IGtuKHQuZCwxNikpLG5ldyBxWiksbmV3IHNZZShlKSl9ZnVuY3Rpb24gVHVlKGUsdCl7dmFyIG4scixhLG87Zm9yKGE9dD9xcyhlKTprYShlKSxyPW5ldyBocihkcihhLmEuS2MoKSxuZXcgaikpO2pyKHIpOylpZihuPWwoeHIociksMTgpLG89a3hlKG4sZSksby5rPT0oWm4oKSxBYSkmJm8uYyE9ZS5jKXJldHVybiBvO3JldHVybiBudWxsfWZ1bmN0aW9uIEQ4bihlKXt2YXIgdCxuLHI7Zm9yKG49bmV3IEcoZS5wKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMTApLHQuaz09KFpuKCksUHMpJiYocj10Lm8uYixlLmk9Yi5NYXRoLm1pbihlLmksciksZS5nPWIuTWF0aC5tYXgoZS5nLHIpKX1mdW5jdGlvbiB3Z3QoZSx0LG4pe3ZhciByLGEsbztmb3Iobz1uZXcgRyh0KTtvLmE8by5jLmMubGVuZ3RoOylyPWwocmUobyksMTApLGUuY1tyLmMucF1bci5wXS5lPSExO2ZvcihhPW5ldyBHKHQpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwxMCksJGtlKGUscixuKX1mdW5jdGlvbiBDdWUoZSx0LG4pe3ZhciByLGE7cj1lNih0Lmosbi5zLG4uYykrZTYobi5lLHQucyx0LmMpLGE9ZTYobi5qLHQucyx0LmMpK2U2KHQuZSxuLnMsbi5jKSxyPT1hP3I+MCYmKGUuYis9MixlLmErPXIpOihlLmIrPTEsZS5hKz1iLk1hdGgubWluKHIsYSkpfWZ1bmN0aW9uIHlndChlKXt2YXIgdDt0PWwoUShsKGZmKGUuYiwwKSw0MCksKEhjKCksZ0llKSksMTA3KSxydChlLChRaSgpLFFUKSxuZXcgbHQoMCwwKSksaG10KG5ldyBuTixlLHQuYit0LmMtemUoR2UoUShlLEJkZSkpKSx0LmQrdC5hLXplKEdlKFEoZSxGZGUpKSkpfWZ1bmN0aW9uIHhndChlLHQpe3ZhciBuLHI7aWYocj0hMSxJYSh0KSYmKHI9ITAsSjgoZSxuZXcgeXkoZWkodCkpKSkscnx8RGUodCwyNDIpJiYocj0hMCxKOChlLChuPWc0ZShsKHQsMjQyKSksbmV3IHZrKG4pKSkpLCFyKXRocm93IHVlKG5ldyBRaWUobVNlKSl9ZnVuY3Rpb24gSThuKGUsdCxuLHIpe3ZhciBhLG8sZjtyZXR1cm4gYT1uZXcgWmcoZS5lLDEsMTAsKGY9dC5jLERlKGYsOTApP2woZiwyOSk6KFRuKCksS2YpKSwobz1uLmMsRGUobyw5MCk/bChvLDI5KTooVG4oKSxLZikpLGYyKGUsdCksITEpLHI/ci5uaihhKTpyPWEscn1mdW5jdGlvbiBFeGUoZSl7dmFyIHQsbjtzd2l0Y2gobChRKGVvKGUpLChOdCgpLGpNZSkpLDQyOSkuZyl7Y2FzZSAwOnJldHVybiB0PWUubixuPWUubyxuZXcgbHQodC5hK24uYS8yLHQuYituLmIvMik7Y2FzZSAxOnJldHVybiBuZXcgRW8oZS5uKTtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBXTigpe1dOPVUsWks9bmV3IENfKElkLDApLFRMZT1uZXcgQ18oIkxFRlRVUCIsMSksU0xlPW5ldyBDXygiUklHSFRVUCIsMiksRUxlPW5ldyBDXygiTEVGVERPV04iLDMpLENMZT1uZXcgQ18oIlJJR0hURE9XTiIsNCksQjFlPW5ldyBDXygiQkFMQU5DRUQiLDUpfWZ1bmN0aW9uIE84bihlLHQsbil7dmFyIHIsYSxvO2lmKHI9WWkoZS5hW3QucF0sZS5hW24ucF0pLHI9PTApe2lmKGE9bChRKHQsKGZ0KCksV3gpKSwxNSksbz1sKFEobixXeCksMTUpLGEuSGMobikpcmV0dXJuLTE7aWYoby5IYyh0KSlyZXR1cm4gMX1yZXR1cm4gcn1mdW5jdGlvbiBOOG4oZSl7c3dpdGNoKGUuZyl7Y2FzZSAxOnJldHVybiBuZXcgdm5lO2Nhc2UgMjpyZXR1cm4gbmV3IHduZTtjYXNlIDM6cmV0dXJuIG5ldyBtbmU7Y2FzZSAwOnJldHVybiBudWxsO2RlZmF1bHQ6dGhyb3cgdWUobmV3IFluKEVmZSsoZS5mIT1udWxsP2UuZjoiIitlLmcpKSl9fWZ1bmN0aW9uIFR4ZShlLHQsbil7c3dpdGNoKHQpe2Nhc2UgMTohZS5uJiYoZS5uPW5ldyBudChlYyxlLDEsNykpLCRyKGUubiksIWUubiYmKGUubj1uZXcgbnQoZWMsZSwxLDcpKSxBcyhlLm4sbChuLDE2KSk7cmV0dXJuO2Nhc2UgMjpmRShlLGVpKG4pKTtyZXR1cm59VjdlKGUsdCxuKX1mdW5jdGlvbiBDeGUoZSx0LG4pe3N3aXRjaCh0KXtjYXNlIDM6TXcoZSx6ZShHZShuKSkpO3JldHVybjtjYXNlIDQ6RHcoZSx6ZShHZShuKSkpO3JldHVybjtjYXNlIDU6VXUoZSx6ZShHZShuKSkpO3JldHVybjtjYXNlIDY6R3UoZSx6ZShHZShuKSkpO3JldHVybn1UeGUoZSx0LG4pfWZ1bmN0aW9uIGdVKGUsdCxuKXt2YXIgcixhLG87bz0ocj1uZXcgSGllLHIpLGE9JDEobyx0LG51bGwpLGEmJmEub2ooKSxGdShvLG4pLHFyKCghZS5jJiYoZS5jPW5ldyBudChrMyxlLDEyLDEwKSksZS5jKSxvKSxpMihvLDApLE15KG8sMSksdTIobywhMCksYzIobywhMCl9ZnVuY3Rpb24gU3hlKGUsdCl7dmFyIG4scixhO3JldHVybiBuPXlfKGUuaSx0KSxEZShuLDI0MSk/KGE9bChuLDI0MSksYS56aSgpPT1udWxsLGEud2koKSk6RGUobiw1MDcpPyhyPWwobiwyMDM3KSxhPXIuYixhKTpudWxsfWZ1bmN0aW9uIFA4bihlLHQsbixyKXt2YXIgYSxvO3JldHVybiBYcih0KSxYcihuKSxvPWwoSF8oZS5kLHQpLDE3KSxXbHQoISFvLCJSb3cgJXMgbm90IGluICVzIix0LGUuZSksYT1sKEhfKGUuYixuKSwxNyksV2x0KCEhYSwiQ29sdW1uICVzIG5vdCBpbiAlcyIsbixlLmMpLHMwdChlLG8uYSxhLmEscil9ZnVuY3Rpb24ga2d0KGUsdCxuLHIsYSxvLGYpe3ZhciBnLHcsRSxDLEw7aWYoQz1hW29dLEU9bz09Zi0xLGc9RT9yOjAsTD16ZHQoZyxDKSxyIT0xMCYmaGUobGUoZSxmLW8pLHRbb10sbltvXSxnLEwpLCFFKWZvcigrK28sdz0wO3c8QzsrK3cpTFt3XT1rZ3QoZSx0LG4scixhLG8sZik7cmV0dXJuIEx9ZnVuY3Rpb24gakEoZSl7aWYoZS5nPT0tMSl0aHJvdyB1ZShuZXcgcGwpO2UuWGooKTt0cnl7ZS5pLmdkKGUuZyksZS5mPWUuaS5qLGUuZzxlLmUmJi0tZS5lLGUuZz0tMX1jYXRjaCh0KXt0aHJvdyB0PWJzKHQpLERlKHQsNzcpP3VlKG5ldyBYaCk6dWUodCl9fWZ1bmN0aW9uIEI4bihlKXt2YXIgdCxuLHIsYTtmb3IoYT0tMSxyPTAsbj1uZXcgRyhlKTtuLmE8bi5jLmMubGVuZ3RoOyl7aWYodD1sKHJlKG4pLDI0OSksdC5jPT0ocW8oKSwkbCkpe2E9cj09MD8wOnItMTticmVha31lbHNlIHI9PWUuYy5sZW5ndGgtMSYmKGE9cik7cis9MX1yZXR1cm4gYX1mdW5jdGlvbiBGOG4oZSl7dmFyIHQsbixyLGE7Zm9yKGE9MCx0PTAscj1uZXcgRyhlLmMpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwyNyksVXUobixlLmUrYSksR3UobixlLmYpLGErPW4uZytlLmIsdD1iLk1hdGgubWF4KHQsbi5mK2UuYik7ZS5kPWEtZS5iLGUuYT10LWUuYn1mdW5jdGlvbiBzNihlKXt2YXIgdCxuLHI7Zm9yKG49bmV3IEcoZS5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSw2MCkscj10LmQuYyx0LmQuYz10LmQuZCx0LmQuZD1yLHI9dC5kLmIsdC5kLmI9dC5kLmEsdC5kLmE9cixyPXQuYi5hLHQuYi5hPXQuYi5iLHQuYi5iPXI7VjllKGUpfWZ1bmN0aW9uIGE2KGUpe3ZhciB0LG4scjtmb3Iobj1uZXcgRyhlLmEuYik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDg2KSxyPXQuZy5jLHQuZy5jPXQuZy5kLHQuZy5kPXIscj10LmcuYix0LmcuYj10LmcuYSx0LmcuYT1yLHI9dC5lLmEsdC5lLmE9dC5lLmIsdC5lLmI9cjtNVShlKX1mdW5jdGlvbiBSOG4oZSl7dmFyIHQsbixyLGEsbztmb3Iobz1XOChlLmspLG49KEN0KCksaGUobGUoT28sMSksYXUsNjQsMCxbUGMsUW4sYXIsRHIsZXJdKSkscj0wLGE9bi5sZW5ndGg7cjxhOysrcilpZih0PW5bcl0sdCE9UGMmJiFvLkhjKHQpKXJldHVybiB0O3JldHVybiBudWxsfWZ1bmN0aW9uIFN1ZShlLHQpe3ZhciBuLHI7cmV0dXJuIHI9bChSaG4oa0UoRmkobmV3IGJuKG51bGwsbmV3IGtuKHQuaiwxNikpLG5ldyBNZWUpKSksMTIpLHImJihuPWwoanQoci5lLDApLDE4KSxuKT9sKFEobiwoZnQoKSxLaSkpLDE3KS5hOld2bihlLmIpfWZ1bmN0aW9uIGo4bihlLHQpe3ZhciBuLHIsYSxvO2ZvcihvPW5ldyBHKHQuYSk7by5hPG8uYy5jLmxlbmd0aDspZm9yKGE9bChyZShvKSwxMCksdV8oZS5kKSxyPW5ldyBocihkcihxcyhhKS5hLktjKCksbmV3IGopKTtqcihyKTspbj1sKHhyKHIpLDE4KSx3MnQoZSxhLG4uZC5pKX1mdW5jdGlvbiAkOG4oZSx0KXt2YXIgbixyO2ZvcihhbChlLmIsdCkscj1uZXcgRyhlLm4pO3IuYTxyLmMuYy5sZW5ndGg7KWlmKG49bChyZShyKSwyMDkpLGdjKG4uYyx0LDApIT0tMSl7YWwobi5jLHQpLEY4bihuKSxuLmMuYy5sZW5ndGg9PTAmJmFsKGUubixuKTticmVha31abXQoZSl9ZnVuY3Rpb24gRWd0KGUsdCl7dmFyIG4scixhLG8sZjtmb3IoZj1lLmYsYT0wLG89MCxyPW5ldyBHKGUuYSk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDE3MikscU4obixlLmUsZiksYU4obix0KSxvPWIuTWF0aC5tYXgobyxuLnIpLGYrPW4uZCtlLmMsYT1mO2UuZD1vLGUuYj1hfWZ1bmN0aW9uIFRndChlKXt2YXIgdCxuO3JldHVybiBuPXNQKGUpLFprKG4pP251bGw6KHQ9KFhyKG4pLGwoTWR0KG5ldyBocihkcihuLmEuS2MoKSxuZXcgaikpKSw3NCkpLGJjKGwoT2UoKCF0LmImJih0LmI9bmV3IExuKF9yLHQsNCw3KSksdC5iKSwwKSw4NCkpKX1mdW5jdGlvbiBwVShlKXt2YXIgdDtyZXR1cm4gZS5vfHwodD1lLnVrKCksdD9lLm89bmV3IHg1ZShlLGUsbnVsbCk6ZS5hbCgpP2Uubz1uZXcgSnllKGUsbnVsbCk6a3coaWMoKEVsKCksaW8pLGUpKT09MT9lLm89bmV3IFdjdChlKTplLm89bmV3IGxhZShlLG51bGwpKSxlLm99ZnVuY3Rpb24gejhuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHc7bi5YaCh0KSYmKGE9KGY9dCxmP2wociw1NCkuZ2koZik6bnVsbCksYSYmKHc9bi5NaCh0KSxnPXQudCxnPjF8fGc9PS0xPyhvPWwodywxNSksYS5XYih2NW4oZSxvKSkpOmEuV2IoY2xlKGUsbCh3LDU4KSkpKSl9ZnVuY3Rpb24gcThuKGUsdCxuLHIpe01aZSgpO3ZhciBhPW0wZTtmdW5jdGlvbiBvKCl7Zm9yKHZhciBmPTA7ZjxhLmxlbmd0aDtmKyspYVtmXSgpfWlmKGUpdHJ5e01BdChvKSgpfWNhdGNoKGYpe2UodCxmKX1lbHNlIE1BdChvKSgpfWZ1bmN0aW9uIEg4bihlLHQpe3ZhciBuLHIsYSxvO2ZvcihhPShvPW5ldyBicihlLmIpLmEudmMoKS5LYygpLG5ldyBNaShvKSk7YS5hLk9iKCk7KWlmKHI9KG49bChhLmEuUGIoKSw0NCksbChuLmxkKCksMzQpKSxheWUodCxsKHIsMTcpKTwwKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFY4bihlLHQpe3ZhciBuLHIsYSxvO2ZvcihhPShvPW5ldyBicihlLmIpLmEudmMoKS5LYygpLG5ldyBNaShvKSk7YS5hLk9iKCk7KWlmKHI9KG49bChhLmEuUGIoKSw0NCksbChuLmxkKCksMzQpKSxheWUodCxsKHIsMTcpKT4wKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFU4bihlKXt2YXIgdCxuLHIsYSxvO2ZvcihyPW5ldyBxbShuZXcgU3IoZS5iKS5hKTtyLmI7KW49TncociksdD1sKG4ubGQoKSwxMCksbz1sKGwobi5tZCgpLDQyKS5hLDEwKSxhPWwobChuLm1kKCksNDIpLmIsOCksT2koWTAodC5uKSxPaShKYShvLm4pLGEpKX1mdW5jdGlvbiBHOG4oZSl7c3dpdGNoKGwoUShlLmIsKE50KCksSU1lKSksMzg3KS5nKXtjYXNlIDE6SXMoZmMoRGMobmV3IGJuKG51bGwsbmV3IGtuKGUuZCwxNikpLG5ldyBkSSksbmV3IGc1KSxuZXcgd2VlKTticmVhaztjYXNlIDI6elNuKGUpO2JyZWFrO2Nhc2UgMDp3a24oZSl9fWZ1bmN0aW9uIEs4bihlLHQsbil7dmFyIHIsYSxvO2ZvcihyPW4sIXImJihyPW5ldyBMOCksci5VZygiTGF5b3V0IixlLmEuYy5sZW5ndGgpLG89bmV3IEcoZS5hKTtvLmE8by5jLmMubGVuZ3RoOyl7aWYoYT1sKHJlKG8pLDQ3KSxyLiRnKCkpcmV0dXJuO2EuS2YodCxyLmVoKDEpKX1yLlZnKCl9ZnVuY3Rpb24gWW0oKXtZbT1VLExnZT1uZXcgQV8oIlZfVE9QIiwwKSxTTT1uZXcgQV8oIlZfQ0VOVEVSIiwxKSxDTT1uZXcgQV8oIlZfQk9UVE9NIiwyKSxBZ2U9bmV3IEFfKCJIX0xFRlQiLDMpLEVNPW5ldyBBXygiSF9DRU5URVIiLDQpLFRNPW5ldyBBXygiSF9SSUdIVCIsNSl9ZnVuY3Rpb24gX3hlKGUpe3ZhciB0O3JldHVybiBlLkRiJjY0P1VWKGUpOih0PW5ldyBBZihVVihlKSksdC5hKz0iIChhYnN0cmFjdDogIixHcCh0LChlLkJiJjI1NikhPTApLHQuYSs9IiwgaW50ZXJmYWNlOiAiLEdwKHQsKGUuQmImNTEyKSE9MCksdC5hKz0iKSIsdC5hKX1mdW5jdGlvbiBXOG4oZSl7dmFyIHQ7ZS5jPT1udWxsJiYodD1xZShlLmIpPT09cWUoVVNlKT9udWxsOmUuYixlLmQ9dD09bnVsbD91bDpUc3QodCk/TWhuKEJhdCh0KSk6SWEodCk/bkVlOl9tKGJoKHQpKSxlLmE9ZS5hKyI6ICIrKFRzdCh0KT9BZm4oQmF0KHQpKTp0KyIiKSxlLmM9IigiK2UuZCsiKSAiK2UuYSl9ZnVuY3Rpb24gWThuKCl7ZnVuY3Rpb24gZSgpe3RyeXtyZXR1cm4gbmV3IE1hcCgpLmVudHJpZXMoKS5uZXh0KCkuZG9uZX1jYXRjaHtyZXR1cm4hMX19cmV0dXJuIHR5cGVvZiBNYXA9PT1PbGUmJk1hcC5wcm90b3R5cGUuZW50cmllcyYmZSgpP01hcDpQRG4oKX1mdW5jdGlvbiBYOG4oZSx0KXt2YXIgbixyLGEsbztmb3Iobz1uZXcgVWEoZS5lLDApLG49MDtvLmI8by5kLmdjKCk7KXtpZihyPXplKChtcihvLmI8by5kLmdjKCkpLEdlKG8uZC5YYihvLmM9by5iKyspKSkpLGE9ci10LGE+d2ZlKXJldHVybiBuO2E+LTFlLTYmJisrbn1yZXR1cm4gbn1mdW5jdGlvbiBBeGUoZSx0KXt2YXIgbjt0IT1lLmI/KG49bnVsbCxlLmImJihuPUlIKGUuYixlLC00LG4pKSx0JiYobj1teCh0LGUsLTQsbikpLG49SjB0KGUsdCxuKSxuJiZuLm9qKCkpOmUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMyx0LHQpKX1mdW5jdGlvbiBDZ3QoZSx0KXt2YXIgbjt0IT1lLmY/KG49bnVsbCxlLmYmJihuPUlIKGUuZixlLC0xLG4pKSx0JiYobj1teCh0LGUsLTEsbikpLG49UTB0KGUsdCxuKSxuJiZuLm9qKCkpOmUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMCx0LHQpKX1mdW5jdGlvbiBROG4oZSx0LG4scil7dmFyIGEsbyxmLGc7cmV0dXJuIGhoKGUuZSkmJihhPXQuTGsoKSxnPXQubWQoKSxvPW4ubWQoKSxmPWRiKGUsMSxhLGcsbyxhLkprKCk/WEUoZSxhLG8sRGUoYSwxMDIpJiYobChhLDE5KS5CYiZJbykhPTApOi0xLCEwKSxyP3IubmooZik6cj1mKSxyfWZ1bmN0aW9uIFNndChlKXt2YXIgdCxuLHI7aWYoZT09bnVsbClyZXR1cm4gbnVsbDtpZihuPWwoZSwxNSksbi5kYygpKXJldHVybiIiO2ZvcihyPW5ldyBVcCx0PW4uS2MoKTt0Lk9iKCk7KVhvKHIsKEdpKCksZWkodC5QYigpKSkpLHIuYSs9IiAiO3JldHVybiBHc2UocixyLmEubGVuZ3RoLTEpfWZ1bmN0aW9uIF9ndChlKXt2YXIgdCxuLHI7aWYoZT09bnVsbClyZXR1cm4gbnVsbDtpZihuPWwoZSwxNSksbi5kYygpKXJldHVybiIiO2ZvcihyPW5ldyBVcCx0PW4uS2MoKTt0Lk9iKCk7KVhvKHIsKEdpKCksZWkodC5QYigpKSkpLHIuYSs9IiAiO3JldHVybiBHc2UocixyLmEubGVuZ3RoLTEpfWZ1bmN0aW9uIEo4bihlLHQsbil7dmFyIHIsYTtyZXR1cm4gcj1lLmNbdC5jLnBdW3QucF0sYT1lLmNbbi5jLnBdW24ucF0sci5hIT1udWxsJiZhLmEhPW51bGw/TmFlKHIuYSxhLmEpOnIuYSE9bnVsbD8tMTphLmEhPW51bGw/MTowfWZ1bmN0aW9uIFo4bihlLHQsbil7cmV0dXJuIG4uVWcoIlRyZWUgbGF5b3V0IiwxKSxxTyhlLmIpLFgwKGUuYiwod3goKSxOVyksTlcpLFgwKGUuYixsTSxsTSksWDAoZS5iLGhNLGhNKSxYMChlLmIsZk0sZk0pLGUuYT1iUChlLmIsdCksSzhuKGUsdCxuLmVoKDEpKSxuLlZnKCksdH1mdW5jdGlvbiBleG4oZSx0KXt2YXIgbixyLGEsbyxmLGc7aWYodClmb3Iobz10LmEubGVuZ3RoLG49bmV3IERtKG8pLGc9KG4uYi1uLmEpKm4uYzwwPyhzYigpLHRtKTpuZXcgY2Iobik7Zy5PYigpOylmPWwoZy5QYigpLDE3KSxhPUprKHQsZi5hKSxyPW5ldyBHWGUoZSksY3BuKHIuYSxhKX1mdW5jdGlvbiB0eG4oZSx0KXt2YXIgbixyLGEsbyxmLGc7aWYodClmb3Iobz10LmEubGVuZ3RoLG49bmV3IERtKG8pLGc9KG4uYi1uLmEpKm4uYzwwPyhzYigpLHRtKTpuZXcgY2Iobik7Zy5PYigpOylmPWwoZy5QYigpLDE3KSxhPUprKHQsZi5hKSxyPW5ldyBGWGUoZSksb3BuKHIuYSxhKX1mdW5jdGlvbiBueG4oZSl7dmFyIHQ7aWYoZSE9bnVsbCYmZS5sZW5ndGg+MCYmY28oZSxlLmxlbmd0aC0xKT09MzMpdHJ5e3JldHVybiB0PVAydCh0ZihlLDAsZS5sZW5ndGgtMSkpLHQuZT09bnVsbH1jYXRjaChuKXtpZihuPWJzKG4pLCFEZShuLDMzKSl0aHJvdyB1ZShuKX1yZXR1cm4hMX1mdW5jdGlvbiByeG4oZSx0LG4pe3ZhciByLGEsbztzd2l0Y2gocj1lbyh0KSxhPXpWKHIpLG89bmV3IGd1LE1jKG8sdCksbi5nKXtjYXNlIDE6bGEobyxCTihneChhKSkpO2JyZWFrO2Nhc2UgMjpsYShvLGd4KGEpKX1yZXR1cm4gcnQobywoTnQoKSxtNCksR2UoUShlLG00KSkpLG99ZnVuY3Rpb24gTHhlKGUpe3ZhciB0LG47cmV0dXJuIHQ9bCh4cihuZXcgaHIoZHIoa2EoZS5hKS5hLktjKCksbmV3IGopKSksMTgpLG49bCh4cihuZXcgaHIoZHIocXMoZS5hKS5hLktjKCksbmV3IGopKSksMTgpLFJ0KEJ0KFEodCwoZnQoKSxXMSkpKSl8fFJ0KEJ0KFEobixXMSkpKX1mdW5jdGlvbiBSeSgpe1J5PVUsYkI9bmV3IGNPKCJPTkVfU0lERSIsMCksS0s9bmV3IGNPKCJUV09fU0lERVNfQ09STkVSIiwxKSxXSz1uZXcgY08oIlRXT19TSURFU19PUFBPU0lORyIsMiksR0s9bmV3IGNPKCJUSFJFRV9TSURFUyIsMyksVUs9bmV3IGNPKCJGT1VSX1NJREVTIiw0KX1mdW5jdGlvbiBBZ3QoZSx0KXt2YXIgbixyLGEsbztmb3Iobz1uZXcgYnQsYT0wLHI9dC5LYygpO3IuT2IoKTspe2ZvcihuPXB0KGwoci5QYigpLDE3KS5hK2EpO24uYTxlLmYmJiFLZG4oZSxuLmEpOyluPXB0KG4uYSsxKSwrK2E7aWYobi5hPj1lLmYpYnJlYWs7JG4oby5jLG4pfXJldHVybiBvfWZ1bmN0aW9uIGl4bihlLHQpe3ZhciBuLHIsYSxvLGY7Zm9yKG89bmV3IEcodC5hKTtvLmE8by5jLmMubGVuZ3RoOylmb3IoYT1sKHJlKG8pLDEwKSxyPW5ldyBocihkcihrYShhKS5hLktjKCksbmV3IGopKTtqcihyKTspbj1sKHhyKHIpLDE4KSxmPW4uYy5pLnAsZS5uW2ZdPWUubltmXS0xfWZ1bmN0aW9uIHN4bihlKXt2YXIgdCxuO2ZvcihuPW5ldyBHKGUuZS5iKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMzApLGVEbihlLHQpO0lzKEZpKERjKERjKG5ldyBibihudWxsLG5ldyBrbihlLmUuYiwxNikpLG5ldyBydGUpLG5ldyBvdGUpLG5ldyBjdGUpLG5ldyByWGUoZSkpfWZ1bmN0aW9uIE14ZShlLHQpe3JldHVybiB0P2UubWoodCk/ITE6ZS5pP2UuaS5uaih0KTpEZSh0LDE1Mik/KGUuaT1sKHQsMTUyKSwhMCk6KGUuaT1uZXcgQyQsZS5pLm5qKHQpKTohMX1mdW5jdGlvbiBMZ3QoZSx0LG4pe3ZhciByLGEsbztyZXR1cm4gcj10LkxrKCksbz10Lm1kKCksYT1yLkprKCk/ZGIoZSwzLHIsbnVsbCxvLFhFKGUscixvLERlKHIsMTAyKSYmKGwociwxOSkuQmImSW8pIT0wKSwhMCk6ZGIoZSwxLHIsci5paygpLG8sLTEsITApLG4/bi5uaihhKTpuPWEsbn1mdW5jdGlvbiBheG4oZSl7aWYoZT1UdShlLCEwKSx2bih3VCxlKXx8dm4oIjEiLGUpKXJldHVybiBIbigpLFNUO2lmKHZuKEZmZSxlKXx8dm4oIjAiLGUpKXJldHVybiBIbigpLFBiO3Rocm93IHVlKG5ldyBKaWUoIkludmFsaWQgYm9vbGVhbiB2YWx1ZTogJyIrZSsiJyIpKX1mdW5jdGlvbiBEeGUoZSx0LG4pe3ZhciByLGEsbztmb3IoYT1lLnZjKCkuS2MoKTthLk9iKCk7KWlmKHI9bChhLlBiKCksNDQpLG89ci5sZCgpLHFlKHQpPT09cWUobyl8fHQhPW51bGwmJlBpKHQsbykpcmV0dXJuIG4mJihyPW5ldyBjcShyLmxkKCksci5tZCgpKSxhLlFiKCkpLHI7cmV0dXJuIG51bGx9ZnVuY3Rpb24gb3huKGUpe3B5KCk7dmFyIHQsbixyO2UuQi5IYygoWmwoKSx1WSkpJiYocj1lLmYuaSx0PW5ldyBNSChlLmEuYyksbj1uZXcgQTgsbi5iPXQuYy1yLmMsbi5kPXQuZC1yLmQsbi5jPXIuYytyLmItKHQuYyt0LmIpLG4uYT1yLmQrci5hLSh0LmQrdC5hKSxlLmUuJGYobikpfWZ1bmN0aW9uIE1ndChlLHQsbixyKXt2YXIgYSxvLGY7Zm9yKGY9Yi5NYXRoLm1pbihuLHptdChsKGUuYiw2OCksdCxuLHIpKSxvPW5ldyBHKGUuYSk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDIyNSksYSE9dCYmKGY9Yi5NYXRoLm1pbihmLE1ndChhLHQsZixyKSkpO3JldHVybiBmfWZ1bmN0aW9uIEl4ZShlKXt2YXIgdCxuLHIsYTtmb3IoYT1XZSh3ZyxkdCwxOTksZS5iLmMubGVuZ3RoLDAsMikscj1uZXcgVWEoZS5iLDApO3IuYjxyLmQuZ2MoKTspdD0obXIoci5iPHIuZC5nYygpKSxsKHIuZC5YYihyLmM9ci5iKyspLDMwKSksbj1yLmItMSxhW25dPUpPKHQuYSk7cmV0dXJuIGF9ZnVuY3Rpb24gT3hlKGUsdCxuKXt2YXIgcixhLG87cj1sKEIxKGUuYSxuKSwzNCksciE9bnVsbCYmKG89bChCMShlLmIsciksNjcpLE55KG8sbiwhMCkpLGE9bChCMShlLmIsdCksNjcpLGF8fChhPW5ldyBvcyxoMihlLmIsdCxhKSksQ3MoYSxuLGEuYy5iLGEuYyksaDIoZS5hLG4sdCl9ZnVuY3Rpb24gX3VlKGUsdCxuLHIsYSl7dmFyIG8sZixnLHc7Zm9yKGY9Q3VuKGkzZSh5NGUoSTZuKG4pKSxyKSxIN24oZSxuLGEpKSx3PWQyKGUsbikuS2MoKTt3Lk9iKCk7KWc9bCh3LlBiKCksMTIpLHRbZy5wXSYmKG89dFtnLnBdLmksdnQoZi5kLG5ldyBEYWUobyxoOGUoZixvKSkpKTtNOGUoZil9ZnVuY3Rpb24gTnhlKGUsdCl7dGhpcy5mPW5ldyBQcix0aGlzLmI9bmV3IFByLHRoaXMuaj1uZXcgUHIsdGhpcy5hPWUsdGhpcy5jPXQsdGhpcy5jPjAmJkpkdCh0aGlzLHRoaXMuYy0xLChDdCgpLGFyKSksdGhpcy5jPHRoaXMuYS5sZW5ndGgtMSYmSmR0KHRoaXMsdGhpcy5jKzEsKEN0KCksZXIpKX1mdW5jdGlvbiBjeG4oZSx0KXt2YXIgbixyLGEsbyxmO2ZvcihvPW5ldyBHKHQuZCk7by5hPG8uYy5jLmxlbmd0aDspZm9yKGE9bChyZShvKSwxMDUpLGY9bChjcihlLmMsYSksMTE4KS5vLHI9bmV3IFA4KGEuYik7ci5hPHIuYy5hLmxlbmd0aDspbj1sKGNBKHIpLDY0KSxCNmUoYSxuLGYpfWZ1bmN0aW9uIFB4ZShlKXtlLmxlbmd0aD4wJiZlWzBdLmxlbmd0aD4wJiYodGhpcy5jPVJ0KEJ0KFEoZW8oZVswXVswXSksKGZ0KCksekxlKSkpKSksdGhpcy5hPVdlKGtFdCxkdCwyMTE3LGUubGVuZ3RoLDAsMiksdGhpcy5iPVdlKEVFdCxkdCwyMTE4LGUubGVuZ3RoLDAsMiksdGhpcy5kPW5ldyBHMHR9ZnVuY3Rpb24gdXhuKGUpe3JldHVybiBlLmMubGVuZ3RoPT0wPyExOihTbigwLGUuYy5sZW5ndGgpLGwoZS5jWzBdLDE4KSkuYy5pLms9PShabigpLEFhKT8hMDpXNShmYyhuZXcgYm4obnVsbCxuZXcga24oZSwxNikpLG5ldyBXZWUpLG5ldyBZZWUpfWZ1bmN0aW9uIERndChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2ZvcihnPUh5KHQpLG89dC5mLHc9dC5nLGY9Yi5NYXRoLnNxcnQobypvK3cqdyksYT0wLHI9bmV3IEcoZyk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDI3KSxhKz1EZ3QoZSxuKTtyZXR1cm4gYi5NYXRoLm1heChhLGYpfWZ1bmN0aW9uIFJhKCl7UmE9VSxXYj1uZXcgTV8oY0wsMCksWjE9bmV3IE1fKCJGUkVFIiwxKSxzQz1uZXcgTV8oIkZJWEVEX1NJREUiLDIpLFR2PW5ldyBNXygiRklYRURfT1JERVIiLDMpLFRnPW5ldyBNXygiRklYRURfUkFUSU8iLDQpLE11PW5ldyBNXygiRklYRURfUE9TIiw1KX1mdW5jdGlvbiBseG4oZSx0KXt2YXIgbixyLGE7aWYobj10LnFpKGUuYSksbil7Zm9yKGE9ZWkobjEoKCFuLmImJihuLmI9bmV3IGRoKChUbigpLE5vKSxZYyxuKSksbi5iKSxSZikpLHI9MTtyPChFbCgpLHFQZSkubGVuZ3RoOysrcilpZih2bihxUGVbcl0sYSkpcmV0dXJuIHJ9cmV0dXJuIDB9ZnVuY3Rpb24gaHhuKGUpe3ZhciB0LG4scixhLG87aWYoZT09bnVsbClyZXR1cm4gdWw7Zm9yKG89bmV3IEhtKENvLCJbIiwiXSIpLG49ZSxyPTAsYT1uLmxlbmd0aDtyPGE7KytyKXQ9bltyXSxKZyhvLCIiK3QpO3JldHVybiBvLmE/by5lLmxlbmd0aD09MD9vLmEuYTpvLmEuYSsoIiIrby5lKTpvLmN9ZnVuY3Rpb24gZnhuKGUpe3ZhciB0LG4scixhLG87aWYoZT09bnVsbClyZXR1cm4gdWw7Zm9yKG89bmV3IEhtKENvLCJbIiwiXSIpLG49ZSxyPTAsYT1uLmxlbmd0aDtyPGE7KytyKXQ9bltyXSxKZyhvLCIiK3QpO3JldHVybiBvLmE/by5lLmxlbmd0aD09MD9vLmEuYTpvLmEuYSsoIiIrby5lKTpvLmN9ZnVuY3Rpb24gSWd0KGUpe3ZhciB0LG4scjtmb3Iocj1uZXcgSG0oQ28sInsiLCJ9Iiksbj1lLnZjKCkuS2MoKTtuLk9iKCk7KXQ9bChuLlBiKCksNDQpLEpnKHIsamN0KGUsdC5sZCgpKSsiPSIramN0KGUsdC5tZCgpKSk7cmV0dXJuIHIuYT9yLmUubGVuZ3RoPT0wP3IuYS5hOnIuYS5hKygiIityLmUpOnIuY31mdW5jdGlvbiBkeG4oZSl7Zm9yKHZhciB0LG4scixhOyFsXyhlLm8pOyluPWwoWDgoZS5vKSw0Mikscj1sKG4uYSwxMjUpLHQ9bChuLmIsMjE4KSxhPUhWKHQsciksdC5lPT1yPygkcShhLmcsdCksci5lPWEuZSt0LmEpOigkcShhLmIsdCksci5lPWEuZS10LmEpLHZ0KGUuZS5hLHIpfWZ1bmN0aW9uIEJ4ZShlLHQpe3ZhciBuLHIsYTtmb3Iobj1udWxsLGE9bCh0LktiKGUpLDIwKS5LYygpO2EuT2IoKTspaWYocj1sKGEuUGIoKSwxOCksIW4pbj1yLmMuaT09ZT9yLmQuaTpyLmMuaTtlbHNlIGlmKChyLmMuaT09ZT9yLmQuaTpyLmMuaSkhPW4pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gT2d0KGUsdCl7dmFyIG4scixhLG8sZjtmb3Iobj1YMnQoZSwhMSx0KSxhPW5ldyBHKG4pO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwxMzIpLHIuZD09MD8oZG9lKHIsbnVsbCksZ29lKHIsbnVsbCkpOihvPXIuYSxmPXIuYixkb2UocixmKSxnb2UocixvKSl9ZnVuY3Rpb24gZ3huKGUpe3ZhciB0LG47cmV0dXJuIHQ9bmV3IFhzLERoKHQsclR0KSxuPWwoUShlLChmdCgpLEx1KSksMjEpLG4uSGMoKEhvKCksR0wpKSYmRGgodCxvVHQpLG4uSGMoUlQpJiZEaCh0LGlUdCksbi5IYyhCNikmJkRoKHQsYVR0KSxuLkhjKGpUKSYmRGgodCxzVHQpLHR9ZnVuY3Rpb24gRnhlKGUsdCxuKXt2YXIgcixhLG8sZixnO2ZvcihsNW4oZSksYT0oZS5rPT1udWxsJiYoZS5rPVdlKFQwZSxkdCw4MiwwLDAsMSkpLGUuayksbz0wLGY9YS5sZW5ndGg7bzxmOysrbylyPWFbb10sRnhlKHIpO2c9ZS5mLGcmJkZ4ZShnKX1mdW5jdGlvbiBweG4oZSl7dmFyIHQsbixyLGE7Zm9yKG5NbihlKSxuPW5ldyBocihkcihzcChlKS5hLktjKCksbmV3IGopKTtqcihuKTspdD1sKHhyKG4pLDE4KSxyPXQuYy5pPT1lLGE9cj90LmQ6dC5jLHI/RmEodCxudWxsKTpwbyh0LG51bGwpLHJ0KHQsKGZ0KCksVUxlKSxhKSxMRW4oZSxhLmkpfWZ1bmN0aW9uIGJ4bihlLHQsbixyKXt2YXIgYSxvO3N3aXRjaChvPXQuaSxhPW5bby5nXVtlLmRbby5nXV0sby5nKXtjYXNlIDE6YS09cit0LmouYix0LmcuYj1hO2JyZWFrO2Nhc2UgMzphKz1yLHQuZy5iPWE7YnJlYWs7Y2FzZSA0OmEtPXIrdC5qLmEsdC5nLmE9YTticmVhaztjYXNlIDI6YSs9cix0LmcuYT1hfX1mdW5jdGlvbiBteG4oZSl7dmFyIHQsbixyO2ZvcihuPW5ldyBvcigoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkpO24uZSE9bi5pLmdjKCk7KWlmKHQ9bChncihuKSwyNykscj1zUCh0KSwhanIobmV3IGhyKGRyKHIuYS5LYygpLG5ldyBqKSkpKXJldHVybiB0O3JldHVybiBudWxsfWZ1bmN0aW9uIGJVKCl7YlU9VSxZZGU9bmV3IGRPKCJPVkVSTEFQX1JFTU9WQUwiLDApLEdkZT1uZXcgZE8odnl0LDEpLFhkZT1uZXcgZE8oIlJPVEFUSU9OIiwyKSxLZGU9bmV3IGRPKCJHUkFQSF9TSVpFX0NBTENVTEFUSU9OIiwzKSxXZGU9bmV3IGRPKCJPVVRHT0lOR19FREdFX0FOR0xFUyIsNCl9ZnVuY3Rpb24gdnhuKCl7dmFyIGU7cmV0dXJuIF9fdD9sKFZFKChpYigpLEdmKSx4VCksMjExNSk6KGU9bChEZSh4dSgoaWIoKSxHZikseFQpLDU2OSk/eHUoR2YseFQpOm5ldyBrMnQsNTY5KSxfX3Q9ITAsJE1uKGUpLHJPbihlKSx5dWUoZSkscmMoR2YseFQsZSksZSl9ZnVuY3Rpb24gQXVlKGUsdCxuKXt2YXIgcixhO2lmKGUuaj09MClyZXR1cm4gbjtpZihhPWwoSGh0KGUsdCxuKSw3Nikscj1uLkxrKCksIXIucmsoKXx8IWUuYS5hbShyKSl0aHJvdyB1ZShuZXcgQWMoIkludmFsaWQgZW50cnkgZmVhdHVyZSAnIityLnFrKCkuemIrIi4iK3IueGUoKSsiJyIpKTtyZXR1cm4gYX1mdW5jdGlvbiB3eG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFO2ZvcihnPWUuYSx3PTAsRT1nLmxlbmd0aDt3PEU7Kyt3KWZvcihmPWdbd10scj1mLGE9MCxvPXIubGVuZ3RoO2E8bzsrK2EpaWYobj1yW2FdLHFlKHQpPT09cWUobil8fHQhPW51bGwmJlBpKHQsbikpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24geXhuKGUpe3ZhciB0LG4scjtyZXR1cm4gaXUoZSwwKT49MD8obj1LTihlLEpVKSxyPVJOKGUsSlUpKToodD11YihlLDEpLG49S04odCw1ZTgpLHI9Uk4odCw1ZTgpLHI9Ym8obDAociwxKSx2YShlLDEpKSksUTAobDAociwzMiksdmEobixWbykpfWZ1bmN0aW9uIE5ndChlLHQsbil7dmFyIHIsYTtzd2l0Y2gocj0obXIodC5iIT0wKSxsKGFmKHQsdC5hLmEpLDgpKSxuLmcpe2Nhc2UgMDpyLmI9MDticmVhaztjYXNlIDI6ci5iPWUuZjticmVhaztjYXNlIDM6ci5hPTA7YnJlYWs7ZGVmYXVsdDpyLmE9ZS5nfXJldHVybiBhPVJyKHQsMCksek8oYSxyKSx0fWZ1bmN0aW9uIFBndChlLHQsbixyKXt2YXIgYSxvLGYsZyx3O3N3aXRjaCh3PWUuYixvPXQuZCxmPW8uaixnPUc4ZShmLHcuZFtmLmddLG4pLGE9T2koSmEoby5uKSxvLmEpLG8uai5nKXtjYXNlIDE6Y2FzZSAzOmcuYSs9YS5hO2JyZWFrO2Nhc2UgMjpjYXNlIDQ6Zy5iKz1hLmJ9Q3MocixnLHIuYy5iLHIuYyl9ZnVuY3Rpb24geHhuKGUsdCxuKXt2YXIgcixhLG8sZjtmb3IoZj1nYyhlLmUsdCwwKSxvPW5ldyBQd2Usby5iPW4scj1uZXcgVWEoZS5lLGYpO3IuYjxyLmQuZ2MoKTspYT0obXIoci5iPHIuZC5nYygpKSxsKHIuZC5YYihyLmM9ci5iKyspLDEwKSksYS5wPW4sdnQoby5lLGEpLHBoKHIpO3JldHVybiBvfWZ1bmN0aW9uIGt4bihlLHQsbixyKXt2YXIgYSxvLGYsZyx3O2ZvcihhPW51bGwsbz0wLGc9bmV3IEcodCk7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDI3KSx3PWYuaStmLmcsZTxmLmorZi5mK3ImJihhP24uaS13PG4uaS1vJiYoYT1mKTphPWYsbz1hLmkrYS5nKTtyZXR1cm4gYT9vK3I6MH1mdW5jdGlvbiBFeG4oZSx0LG4scil7dmFyIGEsbyxmLGcsdztmb3Iobz1udWxsLGE9MCxnPW5ldyBHKHQpO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwyNyksdz1mLmorZi5mLGU8Zi5pK2YuZytyJiYobz9uLmotdzxuLmotYSYmKG89Zik6bz1mLGE9by5qK28uZik7cmV0dXJuIG8/YStyOjB9ZnVuY3Rpb24gVHhuKGUpe3ZhciB0LG4scjtmb3IodD0hMSxyPWUuYi5jLmxlbmd0aCxuPTA7bjxyO24rKyl6N2UobChqdChlLmIsbiksNDQzKSk/IXQmJm4rMTxyJiZ6N2UobChqdChlLmIsbisxKSw0NDMpKSYmKHQ9ITAsbChqdChlLmIsbiksNDQzKS5hPSEwKTp0PSExfWZ1bmN0aW9uIEN4bihlLHQsbixyLGEpe3ZhciBvLGY7Zm9yKG89MCxmPTA7ZjxhO2YrKylvPWJvKG8sRGYodmEodFtmXSxWbyksdmEocltmXSxWbykpKSxlW2ZdPVlyKG8pLG89YncobywzMik7Zm9yKDtmPG47ZisrKW89Ym8obyx2YSh0W2ZdLFZvKSksZVtmXT1ZcihvKSxvPWJ3KG8sMzIpfWZ1bmN0aW9uIFN4bihlLHQpe0dFKCk7dmFyIG4scjtmb3Iocj0oQ2QoKSx1Syksbj1lO3Q+MTt0Pj49MSl0JjEmJihyPUs1KHIsbikpLG4uZD09MT9uPUs1KG4sbik6bj1uZXcgUTF0KG1tdChuLmEsbi5kLFdlKFZyLGRpLDI4LG4uZDw8MSwxNSwxKSkpO3JldHVybiByPUs1KHIsbikscn1mdW5jdGlvbiBSeGUoKXtSeGU9VTt2YXIgZSx0LG4scjtmb3IobV9lPVdlKE5hLFpvLDI4LDI1LDE1LDEpLHZfZT1XZShOYSxabywyOCwzMywxNSwxKSxyPTE1MjU4Nzg5MDYyNWUtMTYsdD0zMjt0Pj0wO3QtLSl2X2VbdF09cixyKj0uNTtmb3Iobj0xLGU9MjQ7ZT49MDtlLS0pbV9lW2VdPW4sbio9LjV9ZnVuY3Rpb24gX3huKGUpe3ZhciB0LG47aWYoUnQoQnQoYXQoZSwoTnQoKSxiNCkpKSkpe2ZvcihuPW5ldyBocihkcihjcChlKS5hLktjKCksbmV3IGopKTtqcihuKTspaWYodD1sKHhyKG4pLDc0KSxxdyh0KSYmUnQoQnQoYXQodCxndikpKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBCZ3QoZSx0KXt2YXIgbixyLGE7bmEoZS5mLHQpJiYodC5iPWUscj10LmMsZ2MoZS5qLHIsMCkhPS0xfHx2dChlLmosciksYT10LmQsZ2MoZS5qLGEsMCkhPS0xfHx2dChlLmosYSksbj10LmEuYixuLmMubGVuZ3RoIT0wJiYoIWUuaSYmKGUuaT1uZXcgcmR0KGUpKSxJM24oZS5pLG4pKSl9ZnVuY3Rpb24gQXhuKGUpe3ZhciB0LG4scixhLG87cmV0dXJuIG49ZS5jLmQscj1uLmosYT1lLmQuZCxvPWEuaixyPT1vP24ucDxhLnA/MDoxOiRWKHIpPT1vPzA6ZjhlKHIpPT1vPzE6KHQ9ZS5iLHZsKHQuYiwkVihyKSk/MDoxKX1mdW5jdGlvbiBYbShlKXt2YXIgdDt0aGlzLmQ9bmV3IFByLHRoaXMuYz1lLmMsdGhpcy5lPWUuZCx0aGlzLmI9ZS5iLHRoaXMuZj1uZXcgbHN0KGUuZSksdGhpcy5hPWUuYSxlLmY/dGhpcy5nPWUuZjp0aGlzLmc9KHQ9bChLMCh4WSksOSksbmV3IFpoKHQsbChjMCh0LHQubGVuZ3RoKSw5KSwwKSl9ZnVuY3Rpb24gbVUoZSx0KXt2YXIgbixyLGEsbyxmLGc7YT1lLGY9YUEoYSwibGF5b3V0T3B0aW9ucyIpLCFmJiYoZj1hQShhLHA0dCkpLGYmJihnPWYscj1udWxsLGcmJihyPShvPWFjZShnLFdlKHp0LGR0LDIsMCw2LDEpKSxuZXcgYXNlKGcsbykpKSxyJiYobj1uZXcgRXR0KGcsdCksdG8ocixuKSkpfWZ1bmN0aW9uIGJjKGUpe2lmKERlKGUsMjA3KSlyZXR1cm4gbChlLDI3KTtpZihEZShlLDE5MykpcmV0dXJuIE0xKGwoZSwxMjMpKTt0aHJvdyB1ZShlP25ldyBIcCgiT25seSBzdXBwb3J0IG5vZGVzIGFuZCBwb3J0cy4iKTpuZXcgRDgoVDR0KSl9ZnVuY3Rpb24gTHhuKGUsdCxuLHIpe3JldHVybih0Pj0wJiZ2bihlLnN1YnN0cih0LDMpLCJHTVQiKXx8dD49MCYmdm4oZS5zdWJzdHIodCwzKSwiVVRDIikpJiYoblswXT10KzMpLG1rZShlLG4scil9ZnVuY3Rpb24gTXhuKGUsdCl7dmFyIG4scixhLG8sZjtmb3Iobz1lLmcuYSxmPWUuZy5iLHI9bmV3IEcoZS5kKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksNzIpLGE9bi5uLGEuYT1vLGUuaT09KEN0KCksUW4pP2EuYj1mK2Uuai5iLW4uby5iOmEuYj1mLE9pKGEsdCksbys9bi5vLmErZS5lfWZ1bmN0aW9uIEZndChlLHQsbil7aWYoZS5iKXRocm93IHVlKG5ldyBuYygiVGhlIHRhc2sgaXMgYWxyZWFkeSBkb25lLiIpKTtyZXR1cm4gZS5wIT1udWxsPyExOihlLnA9dCxlLnI9bixlLmsmJihlLm89KFZnKCksbW8oWmMoRGF0ZS5ub3coKSksYjIpKSksITApfWZ1bmN0aW9uIGp4ZShlKXt2YXIgdCxuLHIsYSxvLGYsZztyZXR1cm4gZz1uZXcgTTgsbj1lLlBnKCksYT1uIT1udWxsLGEmJnprKGcsUGQsZS5QZygpKSxyPWUueGUoKSxvPXIhPW51bGwsbyYmemsoZyxfaSxlLnhlKCkpLHQ9ZS5PZygpLGY9dCE9bnVsbCxmJiZ6ayhnLCJkZXNjcmlwdGlvbiIsZS5PZygpKSxnfWZ1bmN0aW9uIFJndChlLHQsbil7dmFyIHIsYSxvO3JldHVybiBvPWUucSxlLnE9dCxlLkRiJjQmJiEoZS5EYiYxKSYmKGE9bmV3IF9hKGUsMSw5LG8sdCksbj9uLm5qKGEpOm49YSksdD8ocj10LmMsciE9ZS5yJiYobj1lLllrKHIsbikpKTplLnImJihuPWUuWWsobnVsbCxuKSksbn1mdW5jdGlvbiBEeG4oZSx0LG4pe3ZhciByLGEsbyxmLGc7Zm9yKG49KGc9dCxteChnLGUuZSwtMS1lLmMsbikpLGY9QzVlKGUuYSksbz0ocj1uZXcgcW0obmV3IFNyKGYuYSkuYSksbmV3IEJ6KHIpKTtvLmEuYjspYT1sKE53KG8uYSkubGQoKSw4OSksbj1aRShhLFNVKGEsZS5hKSxuKTtyZXR1cm4gbn1mdW5jdGlvbiBJeG4oZSx0LG4pe3ZhciByLGEsbyxmLGc7Zm9yKG49KGc9dCxJSChnLGUuZSwtMS1lLmMsbikpLGY9QzVlKGUuYSksbz0ocj1uZXcgcW0obmV3IFNyKGYuYSkuYSksbmV3IEJ6KHIpKTtvLmEuYjspYT1sKE53KG8uYSkubGQoKSw4OSksbj1aRShhLFNVKGEsZS5hKSxuKTtyZXR1cm4gbn1mdW5jdGlvbiBPeG4oZSx0LG4scil7dmFyIGEsbyxmO2lmKHI9PTApcHUodCwwLGUsbixlLmxlbmd0aC1uKTtlbHNlIGZvcihmPTMyLXIsZVtlLmxlbmd0aC0xXT0wLG89ZS5sZW5ndGgtMTtvPm47by0tKWVbb118PXRbby1uLTFdPj4+ZixlW28tMV09dFtvLW4tMV08PHI7Zm9yKGE9MDthPG47YSsrKWVbYV09MH1mdW5jdGlvbiBOeG4oZSl7dmFyIHQsbixyLGEsbztmb3IodD0wLG49MCxvPWUuS2MoKTtvLk9iKCk7KXI9bChvLlBiKCksMTE3KSx0PWIuTWF0aC5tYXgodCxyLmQuYiksbj1iLk1hdGgubWF4KG4sci5kLmMpO2ZvcihhPWUuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMTE3KSxyLmQuYj10LHIuZC5jPW59ZnVuY3Rpb24gUHhuKGUpe3ZhciB0LG4scixhLG87Zm9yKG49MCx0PTAsbz1lLktjKCk7by5PYigpOylyPWwoby5QYigpLDExNyksbj1iLk1hdGgubWF4KG4sci5kLmQpLHQ9Yi5NYXRoLm1heCh0LHIuZC5hKTtmb3IoYT1lLktjKCk7YS5PYigpOylyPWwoYS5QYigpLDExNyksci5kLmQ9bixyLmQuYT10fWZ1bmN0aW9uIEx1ZShlLHQsbixyLGEpe3ZhciBvLGY7bz1sKHljKEZpKHQuT2MoKSxuZXcgamopLFBsKG5ldyB6cixuZXcgaHQsbmV3IEZuLGhlKGxlKG9jLDEpLGl0LDEwOCwwLFsoRmwoKSxFYyldKSkpLDE1KSxKTihvKSxmPWwoem0oZS5iLG4sciksMTUpLGE9PTA/Zi5jZCgwLG8pOmYuR2Mobyl9ZnVuY3Rpb24gQnhuKGUsdCxuKXtuLlVnKCJHcm93IFRyZWUiLDEpLGUuYj10LmYsUnQoQnQoUSh0LChwRSgpLGpMKSkpKT8oZS5jPW5ldyBPdCxEb3QoZSxudWxsKSk6ZS5jPW5ldyBPdCxlLmE9ITEsc2J0KGUsdC5mKSxydCh0LFZfZSwoSG4oKSwhIWUuYSkpLG4uVmcoKX1mdW5jdGlvbiAkeGUoZSl7dmFyIHQsbixyLGE7Zm9yKHQ9bnVsbCxhPW5ldyBHKGUuUmYoKSk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDE4Nyksbj1uZXcgZWYoci5MZigpLmEsci5MZigpLmIsci5NZigpLmEsci5NZigpLmIpLHQ/JEEodCxuKTp0PW47cmV0dXJuIXQmJih0PW5ldyAkOCksdH1mdW5jdGlvbiBNdWUoZSx0LG4scil7dmFyIGEsbztyZXR1cm4gbj09MT8oIWUubiYmKGUubj1uZXcgbnQoZWMsZSwxLDcpKSxSdShlLm4sdCxyKSk6KG89bChNbigoYT1sKEtuKGUsMTYpLDI5KSxhfHxlLmlpKCkpLG4pLDY5KSxvLndrKCkuemsoZSxLdShlKSxuLXlyKGUuaWkoKSksdCxyKSl9ZnVuY3Rpb24gRHVlKGUsdCxuKXt2YXIgcixhLG8sZixnO2ZvcihyPW4uZ2MoKSxlLl9pKGUuaStyKSxnPWUuaS10LGc+MCYmcHUoZS5nLHQsZS5nLHQrcixnKSxmPW4uS2MoKSxlLmkrPXIsYT0wO2E8cjsrK2Epbz1mLlBiKCksUl8oZSx0LGUuWmkodCxvKSksZS5NaSh0LG8pLGUuTmkoKSwrK3Q7cmV0dXJuIHIhPTB9ZnVuY3Rpb24gJDEoZSx0LG4pe3ZhciByO3JldHVybiB0IT1lLnE/KGUucSYmKG49SUgoZS5xLGUsLTEwLG4pKSx0JiYobj1teCh0LGUsLTEwLG4pKSxuPVJndChlLHQsbikpOmUuRGImNCYmIShlLkRiJjEpJiYocj1uZXcgX2EoZSwxLDksdCx0KSxuP24ubmoocik6bj1yKSxufWZ1bmN0aW9uIEl1ZShlLHQsbixyKXtyZXR1cm4gYjRlKChuJl9kKT09MCwiZmxhdE1hcCBkb2VzIG5vdCBzdXBwb3J0IFNVQlNJWkVEIGNoYXJhY3RlcmlzdGljIiksYjRlKChuJjQpPT0wLCJmbGF0TWFwIGRvZXMgbm90IHN1cHBvcnQgU09SVEVEIGNoYXJhY3RlcmlzdGljIiksWHIoZSksWHIodCksbmV3IENjdChlLHQsbixyKX1mdW5jdGlvbiBGeG4oZSx0KXtkNWUodCwiQ2Fubm90IHN1cHByZXNzIGEgbnVsbCBleGNlcHRpb24uIiksQk8odCE9ZSwiRXhjZXB0aW9uIGNhbiBub3Qgc3VwcHJlc3MgaXRzZWxmLiIpLCFlLmkmJihlLms9PW51bGw/ZS5rPWhlKGxlKFQwZSwxKSxkdCw4MiwwLFt0XSk6ZS5rW2Uuay5sZW5ndGhdPXQpfWZ1bmN0aW9uIFJ4bihlLHQpe3ZhciBuO2lmKG49dG50KGUuYi5hZygpLHQuYi5hZygpKSxuIT0wKXJldHVybiBuO3N3aXRjaChlLmIuYWcoKS5nKXtjYXNlIDE6Y2FzZSAyOnJldHVybiBydShlLmIuTmYoKSx0LmIuTmYoKSk7Y2FzZSAzOmNhc2UgNDpyZXR1cm4gcnUodC5iLk5mKCksZS5iLk5mKCkpfXJldHVybiAwfWZ1bmN0aW9uIGp4bihlKXt2YXIgdCxuLHI7Zm9yKHI9ZS5lLmMubGVuZ3RoLGUuYT1MbShWcixbZHQsZGldLFs1MywyOF0sMTUsW3Iscl0sMiksbj1uZXcgRyhlLmMpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwyOTApLGUuYVt0LmMuYV1bdC5kLmFdKz1sKFEodCwoYjAoKSxxeCkpLDE3KS5hfWZ1bmN0aW9uICR4bihlLHQpe3ZhciBuLHIsYSxvLGY7aWYoZT09bnVsbClyZXR1cm4gbnVsbDtmb3IoZj1XZShrZixBZCwyOCwyKnQsMTUsMSkscj0wLGE9MDtyPHQ7KytyKW49ZVtyXT4+NCYxNSxvPWVbcl0mMTUsZlthKytdPWJQZVtuXSxmW2ErK109YlBlW29dO3JldHVybiBJZihmLDAsZi5sZW5ndGgpfWZ1bmN0aW9uIGNsKGUpe3ZhciB0LG47cmV0dXJuIGU+PUlvPyh0PUFQKyhlLUlvPj4xMCYxMDIzKSZacyxuPTU2MzIwKyhlLUlvJjEwMjMpJlpzLFN0cmluZy5mcm9tQ2hhckNvZGUodCkrKCIiK1N0cmluZy5mcm9tQ2hhckNvZGUobikpKTpTdHJpbmcuZnJvbUNoYXJDb2RlKGUmWnMpfWZ1bmN0aW9uIHp4bihlLHQpe3B5KCk7dmFyIG4scixhLG87cmV0dXJuIGE9bChsKCRpKGUucix0KSwyMSksODcpLGEuZ2MoKT49Mj8ocj1sKGEuS2MoKS5QYigpLDExNyksbj1lLnUuSGMoKFJsKCksUE0pKSxvPWUudS5IYyhhOSksIXIuYSYmIW4mJihhLmdjKCk9PTJ8fG8pKTohMX1mdW5jdGlvbiBqZ3QoZSx0LG4scixhKXt2YXIgbyxmLGc7Zm9yKG89VGJ0KGUsdCxuLHIsYSksZz0hMTshbzspVFUoZSxhLCEwKSxnPSEwLG89VGJ0KGUsdCxuLHIsYSk7ZyYmVFUoZSxhLCExKSxmPWJjZShhKSxmLmMubGVuZ3RoIT0wJiYoZS5kJiZlLmQuR2coZiksamd0KGUsYSxuLHIsZikpfWZ1bmN0aW9uIHZVKCl7dlU9VSxVZ2U9bmV3IExfKElkLDApLCROZT1uZXcgTF8oIkRJUkVDVEVEIiwxKSxxTmU9bmV3IExfKCJVTkRJUkVDVEVEIiwyKSxSTmU9bmV3IExfKCJBU1NPQ0lBVElPTiIsMyksek5lPW5ldyBMXygiR0VORVJBTElaQVRJT04iLDQpLGpOZT1uZXcgTF8oIkRFUEVOREVOQ1kiLDUpfWZ1bmN0aW9uIHF4bihlLHQpe3ZhciBuO2lmKCFNMShlKSl0aHJvdyB1ZShuZXcgbmModDR0KSk7c3dpdGNoKG49TTEoZSksdC5nKXtjYXNlIDE6cmV0dXJuLShlLmorZS5mKTtjYXNlIDI6cmV0dXJuIGUuaS1uLmc7Y2FzZSAzOnJldHVybiBlLmotbi5mO2Nhc2UgNDpyZXR1cm4tKGUuaStlLmcpfXJldHVybiAwfWZ1bmN0aW9uIEh4bihlLHQsbil7dmFyIHIsYSxvO3JldHVybiByPXQuTGsoKSxvPXQubWQoKSxhPXIuSmsoKT9kYihlLDQscixvLG51bGwsWEUoZSxyLG8sRGUociwxMDIpJiYobChyLDE5KS5CYiZJbykhPTApLCEwKTpkYihlLHIudGsoKT8yOjEscixvLHIuaWsoKSwtMSwhMCksbj9uLm5qKGEpOm49YSxufWZ1bmN0aW9uICRFKGUsdCl7dmFyIG4scjtmb3IobnIodCkscj1lLmIuYy5sZW5ndGgsdnQoZS5iLHQpO3I+MDspe2lmKG49cixyPShyLTEpLzJ8MCxlLmEuTmUoanQoZS5iLHIpLHQpPD0wKXJldHVybiByZihlLmIsbix0KSwhMDtyZihlLmIsbixqdChlLmIscikpfXJldHVybiByZihlLmIscix0KSwhMH1mdW5jdGlvbiB6eGUoZSx0LG4scil7dmFyIGEsbztpZihhPTAsbilhPUJWKGUuYVtuLmddW3QuZ10scik7ZWxzZSBmb3Iobz0wO288Z0s7bysrKWE9Yi5NYXRoLm1heChhLEJWKGUuYVtvXVt0LmddLHIpKTtyZXR1cm4gdD09KHQxKCksJHUpJiZlLmImJihhPWIuTWF0aC5tYXgoYSxlLmIuYSkpLGF9ZnVuY3Rpb24gVnhuKGUsdCl7dmFyIG4scixhLG8sZixnO3JldHVybiBhPWUuaSxvPXQuaSwhYXx8IW98fGEuaSE9by5pfHxhLmk9PShDdCgpLGFyKXx8YS5pPT0oQ3QoKSxlcik/ITE6KGY9YS5nLmEsbj1mK2Euai5hLGc9by5nLmEscj1nK28uai5hLGY8PXImJm4+PWcpfWZ1bmN0aW9uICRndChlKXtzd2l0Y2goZS5nKXtjYXNlIDA6cmV0dXJuIG5ldyBTbmU7Y2FzZSAxOnJldHVybiBuZXcgX25lO2RlZmF1bHQ6dGhyb3cgdWUobmV3IFluKCJObyBpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgZm9yIHRoZSB3aWR0aCBhcHByb3hpbWF0b3IgIisoZS5mIT1udWxsP2UuZjoiIitlLmcpKSl9fWZ1bmN0aW9uIHF4ZShlLHQsbixyKXt2YXIgYTtpZihhPSExLElhKHIpJiYoYT0hMCx6ayh0LG4sZWkocikpKSxhfHxoeShyKSYmKGE9ITAscXhlKGUsdCxuLHIpKSxhfHxEZShyLDI0MikmJihhPSEwLE5tKHQsbixsKHIsMjQyKSkpLCFhKXRocm93IHVlKG5ldyBRaWUobVNlKSl9ZnVuY3Rpb24gVXhuKGUsdCl7dmFyIG4scixhO2lmKG49dC5xaShlLmEpLG4mJihhPW4xKCghbi5iJiYobi5iPW5ldyBkaCgoVG4oKSxObyksWWMsbikpLG4uYiksQmYpLGEhPW51bGwpKXtmb3Iocj0xO3I8KEVsKCksJFBlKS5sZW5ndGg7KytyKWlmKHZuKCRQZVtyXSxhKSlyZXR1cm4gcn1yZXR1cm4gMH1mdW5jdGlvbiBHeG4oZSx0KXt2YXIgbixyLGE7aWYobj10LnFpKGUuYSksbiYmKGE9bjEoKCFuLmImJihuLmI9bmV3IGRoKChUbigpLE5vKSxZYyxuKSksbi5iKSxCZiksYSE9bnVsbCkpe2ZvcihyPTE7cjwoRWwoKSx6UGUpLmxlbmd0aDsrK3IpaWYodm4oelBlW3JdLGEpKXJldHVybiByfXJldHVybiAwfWZ1bmN0aW9uIHpndChlLHQpe3ZhciBuLHIsYSxvO2lmKG5yKHQpLG89ZS5hLmdjKCksbzx0LmdjKCkpZm9yKG49ZS5hLmVjKCkuS2MoKTtuLk9iKCk7KXI9bi5QYigpLHQuSGMocikmJm4uUWIoKTtlbHNlIGZvcihhPXQuS2MoKTthLk9iKCk7KXI9YS5QYigpLGUuYS5CYyhyKSE9bnVsbDtyZXR1cm4gbyE9ZS5hLmdjKCl9ZnVuY3Rpb24gcWd0KGUpe3ZhciB0LG47c3dpdGNoKG49SmEoSWMoaGUobGUoRWEsMSksZHQsOCwwLFtlLmkubixlLm4sZS5hXSkpKSx0PWUuaS5kLGUuai5nKXtjYXNlIDE6bi5iLT10LmQ7YnJlYWs7Y2FzZSAyOm4uYSs9dC5jO2JyZWFrO2Nhc2UgMzpuLmIrPXQuYTticmVhaztjYXNlIDQ6bi5hLT10LmJ9cmV0dXJuIG59ZnVuY3Rpb24gS3huKGUpe3ZhciB0O2Zvcih0PShseCgpLGwoeHIobmV3IGhyKGRyKGthKGUpLmEuS2MoKSxuZXcgaikpKSwxOCkuYy5pKTt0Lms9PShabigpLEFhKTspcnQodCwoZnQoKSxrQiksKEhuKCksITApKSx0PWwoeHIobmV3IGhyKGRyKGthKHQpLmEuS2MoKSxuZXcgaikpKSwxOCkuYy5pfWZ1bmN0aW9uIE91ZShlLHQsbixyKXt2YXIgYSxvLGYsZztmb3IoZz1UQSh0LHIpLGY9Zy5LYygpO2YuT2IoKTspYT1sKGYuUGIoKSwxMiksZS5kW2EucF09ZS5kW2EucF0rZS5jW24ucF07Zm9yKGc9VEEobixyKSxvPWcuS2MoKTtvLk9iKCk7KWE9bChvLlBiKCksMTIpLGUuZFthLnBdPWUuZFthLnBdLWUuY1t0LnBdfWZ1bmN0aW9uIEh4ZShlLHQsbil7dmFyIHIsYTtmb3IoYT1uZXcgb3IoKCFlLmEmJihlLmE9bmV3IG50KEFpLGUsMTAsMTEpKSxlLmEpKTthLmUhPWEuaS5nYygpOylyPWwoZ3IoYSksMjcpLFFoKHIsci5pK3Qsci5qK24pO3RvKCghZS5iJiYoZS5iPW5ldyBudChqcyxlLDEyLDMpKSxlLmIpLG5ldyBmdHQodCxuKSl9ZnVuY3Rpb24gV3huKGUsdCxuLHIpe3ZhciBhLG87Zm9yKG89dCxhPW8uZD09bnVsbHx8ZS5hLk5lKG4uZCxvLmQpPjA/MTowO28uYVthXSE9bjspbz1vLmFbYV0sYT1lLmEuTmUobi5kLG8uZCk+MD8xOjA7by5hW2FdPXIsci5iPW4uYixyLmFbMF09bi5hWzBdLHIuYVsxXT1uLmFbMV0sbi5hWzBdPW51bGwsbi5hWzFdPW51bGx9ZnVuY3Rpb24gWXhuKGUpe3ZhciB0LG4scixhO2Zvcih0PW5ldyBidCxuPVdlKGloLHBnLDI4LGUuYS5jLmxlbmd0aCwxNiwxKSxsNWUobixuLmxlbmd0aCksYT1uZXcgRyhlLmEpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwxMjUpLG5bci5kXXx8KCRuKHQuYyxyKSxjZHQoZSxyLG4pKTtyZXR1cm4gdH1mdW5jdGlvbiBIZ3QoZSx0KXt2YXIgbixyLGEsbyxmO2ZvcihhPXQ9PTE/czFlOmkxZSxyPWEuYS5lYygpLktjKCk7ci5PYigpOylmb3Iobj1sKHIuUGIoKSw4OCksZj1sKCRpKGUuZi5jLG4pLDIxKS5LYygpO2YuT2IoKTspbz1sKGYuUGIoKSw0MiksYWwoZS5iLmIsby5iKSxhbChlLmIuYSxsKG8uYiw4NikuZCl9ZnVuY3Rpb24gWHhuKGUsdCl7dmFyIG47dC5VZygiSGllcmFyY2hpY2FsIHBvcnQgcG9zaXRpb24gcHJvY2Vzc2luZyIsMSksbj1lLmIsbi5jLmxlbmd0aD4wJiZkbXQoKFNuKDAsbi5jLmxlbmd0aCksbChuLmNbMF0sMzApKSxlKSxuLmMubGVuZ3RoPjEmJmRtdChsKGp0KG4sbi5jLmxlbmd0aC0xKSwzMCksZSksdC5WZygpfWZ1bmN0aW9uIFF4bihlKXtSbCgpO3ZhciB0LG47cmV0dXJuIHQ9cnModnAsaGUobGUoY1ksMSksaXQsMjc5LDAsW1liXSkpLCEoeU4oTkgodCxlKSk+MXx8KG49cnMoUE0saGUobGUoY1ksMSksaXQsMjc5LDAsW05NLGE5XSkpLHlOKE5IKG4sZSkpPjEpKX1mdW5jdGlvbiBWeGUoZSx0KXt2YXIgbjtuPXh1KChpYigpLEdmKSxlKSxEZShuLDUwNyk/cmMoR2YsZSxuZXcgT3R0KHRoaXMsdCkpOnJjKEdmLGUsdGhpcyksTnVlKHRoaXMsdCksdD09KFNrKCksQVBlKT8odGhpcy53Yj1sKHRoaXMsMjAzOCksbCh0LDIwNDApKTp0aGlzLndiPShsYigpLFZuKX1mdW5jdGlvbiBKeG4oZSl7dmFyIHQsbixyO2lmKGU9PW51bGwpcmV0dXJuIG51bGw7Zm9yKHQ9bnVsbCxuPTA7bjxqTS5sZW5ndGg7KytuKXRyeXtyZXR1cm4gZ2V0KGpNW25dLGUpfWNhdGNoKGEpe2lmKGE9YnMoYSksRGUoYSwzMykpcj1hLHQ9cjtlbHNlIHRocm93IHVlKGEpfXRocm93IHVlKG5ldyBuVih0KSl9ZnVuY3Rpb24gVmd0KCl7Vmd0PVUsRTZ0PWhlKGxlKHp0LDEpLGR0LDIsNixbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdKSxUNnQ9aGUobGUoenQsMSksZHQsMiw2LFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIixfeCwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0pfWZ1bmN0aW9uIFVndChlKXt2YXIgdCxuLHI7dD12bih0eXBlb2YgdCxnaGUpP251bGw6bmV3IG9vLHQmJihEaygpLG49KHI9OTAwLHI+PWIyPyJlcnJvciI6cj49OTAwPyJ3YXJuIjpyPj04MDA/ImluZm8iOiJsb2ciKSxlYXQobixlLmEpLGUuYiYmRzllKHQsbixlLmIsIkV4Y2VwdGlvbjogIiwhMCkpfWZ1bmN0aW9uIFEoZSx0KXt2YXIgbixyO3JldHVybiByPSghZS5xJiYoZS5xPW5ldyBQciksY3IoZS5xLHQpKSxyPz8obj10LlNnKCksRGUobiw0KSYmKG49PW51bGw/KCFlLnEmJihlLnE9bmV3IFByKSxheChlLnEsdCkpOighZS5xJiYoZS5xPW5ldyBQciksa2koZS5xLHQsbikpKSxuKX1mdW5jdGlvbiB1bygpe3VvPVUseTA9bmV3IG9PKCJQMV9DWUNMRV9CUkVBS0lORyIsMCksdmc9bmV3IG9PKCJQMl9MQVlFUklORyIsMSksYnU9bmV3IG9PKCJQM19OT0RFX09SREVSSU5HIiwyKSxfdT1uZXcgb08oIlA0X05PREVfUExBQ0VNRU5UIiwzKSxtYz1uZXcgb08oIlA1X0VER0VfUk9VVElORyIsNCl9ZnVuY3Rpb24gWnhuKGUsdCl7aEEoKTt2YXIgbjtpZihlLmM9PXQuYyl7aWYoZS5iPT10LmJ8fGEzbihlLmIsdC5iKSl7aWYobj1EbG4oZS5iKT8xOi0xLGUuYSYmIXQuYSlyZXR1cm4gbjtpZighZS5hJiZ0LmEpcmV0dXJuLW59cmV0dXJuIHJ1KGUuYi5nLHQuYi5nKX1lbHNlIHJldHVybiBZaShlLmMsdC5jKX1mdW5jdGlvbiBHZ3QoZSx0KXt2YXIgbixyLGE7aWYoR3hlKGUsdCkpcmV0dXJuITA7Zm9yKHI9bmV3IEcodCk7ci5hPHIuYy5jLmxlbmd0aDspaWYobj1sKHJlKHIpLDI3KSxhPVRndChuKSxOVShlLG4sYSl8fFcwdChlLG4pLWUuZzw9ZS5hKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFlOKCl7WU49VSxKVz0odGxlKCksUE9lKSxFZ2U9Y1N0LGtnZT1vU3QsQU9lPWlTdCx4Z2U9YVN0LF9PZT1uZXcgbHcoOCksUUN0PW5ldyBIYSgocGkoKSxfMiksX09lKSxKQ3Q9bmV3IEhhKEV2LDgpLFpDdD1PT2UsQ09lPWVTdCxTT2U9dFN0LFhDdD1uZXcgSGEoR0IsKEhuKCksITEpKX1mdW5jdGlvbiB3VSgpe3dVPVUsSk9lPW5ldyBsdygxNSksQ1N0PW5ldyBIYSgocGkoKSxfMiksSk9lKSxTU3Q9bmV3IEhhKEV2LDE1KSxaT2U9bmV3IEhhKFhCLHB0KDApKSxZT2U9SVN0LEVTdD1rdixUU3Q9VWIsV09lPW5ldyBIYShaNixQeXQpLFhPZT1XQixRT2U9aTcsX2dlPU1TdCxrU3Q9VUJ9ZnVuY3Rpb24gY2coZSl7aWYoKCFlLmImJihlLmI9bmV3IExuKF9yLGUsNCw3KSksZS5iKS5pIT0xfHwoIWUuYyYmKGUuYz1uZXcgTG4oX3IsZSw1LDgpKSxlLmMpLmkhPTEpdGhyb3cgdWUobmV3IFluKFhmZSkpO3JldHVybiBiYyhsKE9lKCghZS5iJiYoZS5iPW5ldyBMbihfcixlLDQsNykpLGUuYiksMCksODQpKX1mdW5jdGlvbiBLZ3QoZSl7aWYoKCFlLmImJihlLmI9bmV3IExuKF9yLGUsNCw3KSksZS5iKS5pIT0xfHwoIWUuYyYmKGUuYz1uZXcgTG4oX3IsZSw1LDgpKSxlLmMpLmkhPTEpdGhyb3cgdWUobmV3IFluKFhmZSkpO3JldHVybiBUTihsKE9lKCghZS5iJiYoZS5iPW5ldyBMbihfcixlLDQsNykpLGUuYiksMCksODQpKX1mdW5jdGlvbiBXZ3QoZSl7aWYoKCFlLmImJihlLmI9bmV3IExuKF9yLGUsNCw3KSksZS5iKS5pIT0xfHwoIWUuYyYmKGUuYz1uZXcgTG4oX3IsZSw1LDgpKSxlLmMpLmkhPTEpdGhyb3cgdWUobmV3IFluKFhmZSkpO3JldHVybiBUTihsKE9lKCghZS5jJiYoZS5jPW5ldyBMbihfcixlLDUsOCkpLGUuYyksMCksODQpKX1mdW5jdGlvbiBFYihlKXtpZigoIWUuYiYmKGUuYj1uZXcgTG4oX3IsZSw0LDcpKSxlLmIpLmkhPTF8fCghZS5jJiYoZS5jPW5ldyBMbihfcixlLDUsOCkpLGUuYykuaSE9MSl0aHJvdyB1ZShuZXcgWW4oWGZlKSk7cmV0dXJuIGJjKGwoT2UoKCFlLmMmJihlLmM9bmV3IExuKF9yLGUsNSw4KSksZS5jKSwwKSw4NCkpfWZ1bmN0aW9uIFV4ZShlLHQsbil7dmFyIHIsYSxvO2lmKCsrZS5qLGE9ZS5FaigpLHQ+PWF8fHQ8MCl0aHJvdyB1ZShuZXcgdGMoUWZlK3QrYXYrYSkpO2lmKG4+PWF8fG48MCl0aHJvdyB1ZShuZXcgdGMoSmZlK24rYXYrYSkpO3JldHVybiB0IT1uP3I9KG89ZS5DaihuKSxlLnFqKHQsbyksbyk6cj1lLnhqKG4pLHJ9ZnVuY3Rpb24gWWd0KGUpe3ZhciB0LG4scjtpZihyPWUsZSlmb3IodD0wLG49ZS5FaCgpO247bj1uLkVoKCkpe2lmKCsrdD5vaGUpcmV0dXJuIFlndChuKTtpZihyPW4sbj09ZSl0aHJvdyB1ZShuZXcgbmMoIlRoZXJlIGlzIGEgY3ljbGUgaW4gdGhlIGNvbnRhaW5tZW50IGhpZXJhcmNoeSBvZiAiK2UpKX1yZXR1cm4gcn1mdW5jdGlvbiBUYihlKXt2YXIgdCxuLHI7Zm9yKHI9bmV3IEhtKENvLCJbIiwiXSIpLG49ZS5LYygpO24uT2IoKTspdD1uLlBiKCksSmcocixxZSh0KT09PXFlKGUpPyIodGhpcyBDb2xsZWN0aW9uKSI6dD09bnVsbD91bDp4Yyh0KSk7cmV0dXJuIHIuYT9yLmUubGVuZ3RoPT0wP3IuYS5hOnIuYS5hKygiIityLmUpOnIuY31mdW5jdGlvbiBHeGUoZSx0KXt2YXIgbixyO2lmKHI9ITEsdC5nYygpPDIpcmV0dXJuITE7Zm9yKG49MDtuPHQuZ2MoKTtuKyspbjx0LmdjKCktMT9yPXJ8TlUoZSxsKHQuWGIobiksMjcpLGwodC5YYihuKzEpLDI3KSk6cj1yfE5VKGUsbCh0LlhiKG4pLDI3KSxsKHQuWGIoMCksMjcpKTtyZXR1cm4gcn1mdW5jdGlvbiBYZ3QoZSx0KXt2YXIgbjt0IT1lLmE/KG49bnVsbCxlLmEmJihuPWwoZS5hLDU0KS5UaChlLDQsdTEsbikpLHQmJihuPWwodCw1NCkuUmgoZSw0LHUxLG4pKSxuPXI4ZShlLHQsbiksbiYmbi5vaigpKTplLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgX2EoZSwxLDEsdCx0KSl9ZnVuY3Rpb24gS3hlKGUsdCl7dmFyIG47dCE9ZS5lPyhlLmUmJlJ1dChDNWUoZS5lKSxlKSx0JiYoIXQuYiYmKHQuYj1uZXcgUHoobmV3IFZpZSkpLFdydCh0LmIsZSkpLG49dThuKGUsdCxudWxsKSxuJiZuLm9qKCkpOmUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsNCx0LHQpKX1mdW5jdGlvbiBlOW4oZSx0KXt2YXIgbjtuPXQubyxVZyhlLmYpPyhlLmouYT1iLk1hdGgubWF4KGUuai5hLG4uYSksZS5qLmIrPW4uYixlLmQuYy5sZW5ndGg+MSYmKGUuai5iKz1lLmUpKTooZS5qLmErPW4uYSxlLmouYj1iLk1hdGgubWF4KGUuai5iLG4uYiksZS5kLmMubGVuZ3RoPjEmJihlLmouYSs9ZS5lKSl9ZnVuY3Rpb24gQ2IoKXtDYj1VLGF4dD1oZShsZShPbywxKSxhdSw2NCwwLFsoQ3QoKSxRbiksYXIsRHJdKSxzeHQ9aGUobGUoT28sMSksYXUsNjQsMCxbYXIsRHIsZXJdKSxveHQ9aGUobGUoT28sMSksYXUsNjQsMCxbRHIsZXIsUW5dKSxjeHQ9aGUobGUoT28sMSksYXUsNjQsMCxbZXIsUW4sYXJdKX1mdW5jdGlvbiB0OW4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEM7aWYoZj1lLmMuZCxnPWUuZC5kLGYuaiE9Zy5qKWZvcihDPWUuYixhPWYuaix3PW51bGw7YSE9Zy5qOyl3PXQ9PTA/JFYoYSk6ZjhlKGEpLG89RzhlKGEsQy5kW2EuZ10sbiksRT1HOGUodyxDLmRbdy5nXSxuKSx1aShyLE9pKG8sRSkpLGE9d31mdW5jdGlvbiBuOW4oZSx0LG4scil7dmFyIGEsbyxmLGcsdztyZXR1cm4gZj1aZHQoZS5hLHQsbiksZz1sKGYuYSwxNykuYSxvPWwoZi5iLDE3KS5hLHImJih3PWwoUSh0LChmdCgpLGpsKSksMTApLGE9bChRKG4samwpLDEwKSx3JiZhJiYoJGN0KGUuYix3LGEpLGcrPWUuYi5pLG8rPWUuYi5lKSksZz5vfWZ1bmN0aW9uIFFndChlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEU7Zm9yKHRoaXMuYT15ZHQoZSksdGhpcy5iPW5ldyBidCxuPWUscj0wLGE9bi5sZW5ndGg7cjxhOysrcilmb3IodD1uW3JdLG89bmV3IGJ0LHZ0KHRoaXMuYixvKSxnPXQsdz0wLEU9Zy5sZW5ndGg7dzxFOysrdylmPWdbd10sdnQobyxuZXcgT2woZi5qKSl9ZnVuY3Rpb24gcjluKGUsdCxuKXt2YXIgcixhLG87cmV0dXJuIG89MCxyPW5bdF0sdDxuLmxlbmd0aC0xJiYoYT1uW3QrMV0sZS5iW3RdPyhvPWVPbihlLmQscixhKSxvKz1ZYWUoZS5hLHIsKEN0KCksYXIpKSxvKz1ZYWUoZS5hLGEsZXIpKTpvPVB2bihlLmEscixhKSksZS5jW3RdJiYobys9YXZuKGUuYSxyKSksb31mdW5jdGlvbiBpOW4oZSx0LG4scixhKXt2YXIgbyxmLGcsdztmb3Iodz1udWxsLGc9bmV3IEcocik7Zy5hPGcuYy5jLmxlbmd0aDspaWYoZj1sKHJlKGcpLDQ1MyksZiE9biYmZ2MoZi5lLGEsMCkhPS0xKXt3PWY7YnJlYWt9bz1Bb2UoYSkscG8obyxuLmIpLEZhKG8sdy5iKSx4bihlLmEsYSxuZXcgS3Eobyx0LG4uZikpfWZ1bmN0aW9uIHM5bihlKXt2YXIgdCxuLHIsYTtpZihCNShsKFEoZS5iLChOdCgpLFJoKSksODgpKSlyZXR1cm4gMDtmb3IodD0wLHI9bmV3IEcoZS5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMTApLG4uaz09KFpuKCksUHMpJiYoYT1uLm8uYSx0PWIuTWF0aC5tYXgodCxhKSk7cmV0dXJuIHR9ZnVuY3Rpb24gSmd0KGUpe2Zvcig7ZS5nLmMhPTAmJmUuZC5jIT0wOyl1YWUoZS5nKS5jPnVhZShlLmQpLmM/KGUuaSs9ZS5nLmMsWWNlKGUuZCkpOnVhZShlLmQpLmM+dWFlKGUuZykuYz8oZS5lKz1lLmQuYyxZY2UoZS5nKSk6KGUuaSs9Y3N0KGUuZyksZS5lKz1jc3QoZS5kKSxZY2UoZS5nKSxZY2UoZS5kKSl9ZnVuY3Rpb24gYTluKGUsdCxuKXt2YXIgcixhLG8sZjtmb3Iobz10LnEsZj10LnIsbmV3IFBtKChKMCgpLHFiKSx0LG8sMSksbmV3IFBtKHFiLG8sZiwxKSxhPW5ldyBHKG4pO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwxMTgpLHIhPW8mJnIhPXQmJnIhPWYmJihEa2UoZS5hLHIsdCksRGtlKGUuYSxyLGYpKX1mdW5jdGlvbiBaZ3QoZSx0LG4scil7ZS5hLmQ9Yi5NYXRoLm1pbih0LG4pLGUuYS5hPWIuTWF0aC5tYXgodCxyKS1lLmEuZCx0PG4/KGUuYj0uNSoodCtuKSxlLmc9eWZlKmUuYisuOSp0LGUuZj15ZmUqZS5iKy45Km4pOihlLmI9LjUqKHQrciksZS5nPXlmZSplLmIrLjkqcixlLmY9eWZlKmUuYisuOSp0KX1mdW5jdGlvbiBvOW4oZSl7dmFyIHQsbixyLGE7aWYoZS5iIT0wKXtmb3IodD1uZXcgb3MsYT1ScihlLDApO2EuYiE9YS5kLmM7KXI9bChCcihhKSw0MCksS2EodCxwY2UocikpLG49ci5lLG4uYT1sKFEociwoUWkoKSxQQikpLDE3KS5hLG4uYj1sKFEocixCQiksMTcpLmE7cmV0dXJuIHR9cmV0dXJuIG5ldyBvc31mdW5jdGlvbiBjOW4oZSl7c3dpdGNoKGwoUShlLChOdCgpLFF1KSksMTcxKS5nKXtjYXNlIDE6cnQoZSxRdSwoaGYoKSxYTCkpO2JyZWFrO2Nhc2UgMjpydChlLFF1LChoZigpLGQ0KSk7YnJlYWs7Y2FzZSAzOnJ0KGUsUXUsKGhmKCksWUwpKTticmVhaztjYXNlIDQ6cnQoZSxRdSwoaGYoKSwkYikpfX1mdW5jdGlvbiB1OW4oZSx0LG4pe3ZhciByO24uVWcoIlNlbGYtTG9vcCByb3V0aW5nIiwxKSxyPUY0bih0KSxNcShRKHQsKFFIKCksa00pKSksSXMoZmMoRmkoRmkoRGMobmV3IGJuKG51bGwsbmV3IGtuKHQuYiwxNikpLG5ldyBWWiksbmV3IFk5KSxuZXcgcjgpLG5ldyBtUyksbmV3IEFldChlLHIpKSxuLlZnKCl9ZnVuY3Rpb24gekUoKXt6RT1VLFZMPW5ldyBTXyhJZCwwKSxMTGU9bmV3IFNfKE14LDEpLElMZT1uZXcgU18oRHgsMiksRExlPW5ldyBTXygiTEVGVF9SSUdIVF9DT05TVFJBSU5UX0xPQ0tJTkciLDMpLE1MZT1uZXcgU18oIkxFRlRfUklHSFRfQ09OTkVDVElPTl9MT0NLSU5HIiw0KSxBTGU9bmV3IFNfKFkzdCw1KX1mdW5jdGlvbiBlcHQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFO2c9bi5hLzIsbz1uLmIvMixyPWIuTWF0aC5hYnModC5hLWUuYSksYT1iLk1hdGguYWJzKHQuYi1lLmIpLHc9MSxFPTEscj5nJiYodz1nL3IpLGE+byYmKEU9by9hKSxmPWIuTWF0aC5taW4odyxFKSxlLmErPWYqKHQuYS1lLmEpLGUuYis9ZioodC5iLWUuYil9ZnVuY3Rpb24gbDluKGUsdCxuLHIsYSl7dmFyIG8sZjtmb3IoZj0hMSxvPWwoanQobi5iLDApLDI3KTtqQW4oZSx0LG8scixhKSYmKGY9ITAsJDhuKG4sbyksbi5iLmMubGVuZ3RoIT0wKTspbz1sKGp0KG4uYiwwKSwyNyk7cmV0dXJuIG4uYi5jLmxlbmd0aD09MCYmVU4obi5qLG4pLGYmJmxVKHQucSksZn1mdW5jdGlvbiBoOW4oZSx0KXtoNigpO3ZhciBuLHIsYSxvO2lmKHQuYjwyKXJldHVybiExO2ZvcihvPVJyKHQsMCksbj1sKEJyKG8pLDgpLHI9bjtvLmIhPW8uZC5jOyl7aWYoYT1sKEJyKG8pLDgpLFh1ZShlLHIsYSkpcmV0dXJuITA7cj1hfXJldHVybiEhWHVlKGUscixuKX1mdW5jdGlvbiBXeGUoZSx0LG4scil7dmFyIGEsbztyZXR1cm4gbj09MD8oIWUubyYmKGUubz1uZXcgeGwoKHN1KCksQ2cpLEwyLGUsMCkpLFVxKGUubyx0LHIpKToobz1sKE1uKChhPWwoS24oZSwxNiksMjkpLGF8fGUuaWkoKSksbiksNjkpLG8ud2soKS5BayhlLEt1KGUpLG4teXIoZS5paSgpKSx0LHIpKX1mdW5jdGlvbiBOdWUoZSx0KXt2YXIgbjt0IT1lLnNiPyhuPW51bGwsZS5zYiYmKG49bChlLnNiLDU0KS5UaChlLDEsUk0sbikpLHQmJihuPWwodCw1NCkuUmgoZSwxLFJNLG4pKSxuPWE4ZShlLHQsbiksbiYmbi5vaigpKTplLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgX2EoZSwxLDQsdCx0KSl9ZnVuY3Rpb24gZjluKGUsdCl7dmFyIG4scixhLG87aWYodClhPW5wKHQsIngiKSxuPW5ldyBIWGUoZSksYUUobi5hLChucihhKSxhKSksbz1ucCh0LCJ5Iikscj1uZXcgVlhlKGUpLGNFKHIuYSwobnIobyksbykpO2Vsc2UgdGhyb3cgdWUobmV3IGRkKCJBbGwgZWRnZSBzZWN0aW9ucyBuZWVkIGFuIGVuZCBwb2ludC4iKSl9ZnVuY3Rpb24gZDluKGUsdCl7dmFyIG4scixhLG87aWYodClhPW5wKHQsIngiKSxuPW5ldyAkWGUoZSksb0Uobi5hLChucihhKSxhKSksbz1ucCh0LCJ5Iikscj1uZXcgelhlKGUpLHVFKHIuYSwobnIobyksbykpO2Vsc2UgdGhyb3cgdWUobmV3IGRkKCJBbGwgZWRnZSBzZWN0aW9ucyBuZWVkIGEgc3RhcnQgcG9pbnQuIikpfWZ1bmN0aW9uIGc5bihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2ZvcihyPV8wdChlKSxvPTAsZz1yLmxlbmd0aDtvPGc7KytvKVVndCh0KTtmb3Iodz0hRzEmJmUuZT9HMT9udWxsOmUuZDpudWxsO3c7KXtmb3Iobj1fMHQodyksYT0wLGY9bi5sZW5ndGg7YTxmOysrYSlVZ3QodCk7dz0hRzEmJncuZT9HMT9udWxsOncuZDpudWxsfX1mdW5jdGlvbiB0cHQoZSx0KXt2YXIgbixyO3I9bChRKHQsKE50KCksTXMpKSwxMDEpLHJ0KHQsKGZ0KCksR0xlKSxyKSxuPXQuZSxuJiYoSXMobmV3IGJuKG51bGwsbmV3IGtuKG4uYSwxNikpLG5ldyBxcChlKSksSXMoRGMobmV3IGJuKG51bGwsbmV3IGtuKG4uYiwxNikpLG5ldyB1NSksbmV3IG5fKGUpKSl9ZnVuY3Rpb24gWm4oKXtabj1VLFBzPW5ldyBrXygiTk9STUFMIiwwKSxBYT1uZXcga18oIkxPTkdfRURHRSIsMSksVXM9bmV3IGtfKCJFWFRFUk5BTF9QT1JUIiwyKSxBdT1uZXcga18oIk5PUlRIX1NPVVRIX1BPUlQiLDMpLGN1PW5ldyBrXygiTEFCRUwiLDQpLEsxPW5ldyBrXygiQlJFQUtJTkdfUE9JTlQiLDUpfWZ1bmN0aW9uIHA5bihlKXt2YXIgdCxuLHIsYTtpZih0PSExLG5zKGUsKGZ0KCksS0wpKSlmb3Iobj1sKFEoZSxLTCksODUpLGE9bmV3IEcoZS5qKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTIpLFRUbihyKSYmKHR8fChGa24oZW8oZSkpLHQ9ITApLE01bihsKG4ueGMociksMzE0KSkpfWZ1bmN0aW9uIGI5bihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEU7cmV0dXJuIEU9anhlKGUpLG49ZS5lLG89biE9bnVsbCxvJiZ6ayhFLHpHLGUuZSksZz1lLmssZj0hIWcsZiYmemsoRSwidHlwZSIsYWFlKGUuaykpLHI9WkkoZS5qKSxhPSFyLGEmJih3PW5ldyAkcCxlMShFLFlmZSx3KSx0PW5ldyBsUWUodyksdG8oZS5qLHQpKSxFfWZ1bmN0aW9uIG05bihlKXt2YXIgdCxuLHIsYTtmb3IoYT1oYigoTWgoZS5nYygpLCJzaXplIiksbmV3IFM1KSwxMjMpLHI9ITAsbj1NbShlKS5LYygpO24uT2IoKTspdD1sKG4uUGIoKSw0NCkscnx8KGEuYSs9Q28pLHI9ITEsd3UoaGIod3UoYSx0LmxkKCkpLDYxKSx0Lm1kKCkpO3JldHVybihhLmErPSJ9IixhKS5hfWZ1bmN0aW9uIG5wdChlLHQpe3ZhciBuLHIsYTtyZXR1cm4gdCY9NjMsdDwyMj8obj1lLmw8PHQscj1lLm08PHR8ZS5sPj4yMi10LGE9ZS5oPDx0fGUubT4+MjItdCk6dDw0ND8obj0wLHI9ZS5sPDx0LTIyLGE9ZS5tPDx0LTIyfGUubD4+NDQtdCk6KG49MCxyPTAsYT1lLmw8PHQtNDQpLHF1KG4mZWgsciZlaCxhJmhwKX1mdW5jdGlvbiBqeShlKXtpZihRU2U9PW51bGwmJihRU2U9bmV3IFJlZ0V4cCgiXlxccypbKy1dPyhOYU58SW5maW5pdHl8KChcXGQrXFwuP1xcZCopfChcXC5cXGQrKSkoW2VFXVsrLV0/XFxkKyk/W2REZkZdPylcXHMqJCIpKSwhUVNlLnRlc3QoZSkpdGhyb3cgdWUobmV3IGdkKFl3K2UrJyInKSk7cmV0dXJuIHBhcnNlRmxvYXQoZSl9ZnVuY3Rpb24gcnB0KGUsdCl7dmFyIG4scixhLG8sZjtmb3IoYT10PT0xP3MxZTppMWUscj1hLmEuZWMoKS5LYygpO3IuT2IoKTspZm9yKG49bChyLlBiKCksODgpLGY9bCgkaShlLmYuYyxuKSwyMSkuS2MoKTtmLk9iKCk7KW89bChmLlBiKCksNDIpLHZ0KGUuYi5iLGwoby5iLDg2KSksdnQoZS5iLmEsbChvLmIsODYpLmQpfWZ1bmN0aW9uIHY5bihlLHQpe3ZhciBuLHIsYSxvO2ZvcihvPXQuYi5qLGUuYT1XZShWcixkaSwyOCxvLmMubGVuZ3RoLDE1LDEpLGE9MCxyPTA7cjxvLmMubGVuZ3RoO3IrKyluPShTbihyLG8uYy5sZW5ndGgpLGwoby5jW3JdLDEyKSksbi5lLmMubGVuZ3RoPT0wJiZuLmcuYy5sZW5ndGg9PTA/YSs9MTphKz0zLGUuYVtyXT1hfWZ1bmN0aW9uIHlVKCl7eVU9VSxJMWU9bmV3IFRfKCJBTFdBWVNfVVAiLDApLEQxZT1uZXcgVF8oIkFMV0FZU19ET1dOIiwxKSxOMWU9bmV3IFRfKCJESVJFQ1RJT05fVVAiLDIpLE8xZT1uZXcgVF8oIkRJUkVDVElPTl9ET1dOIiwzKSxQMWU9bmV3IFRfKCJTTUFSVF9VUCIsNCksUUs9bmV3IFRfKCJTTUFSVF9ET1dOIiw1KX1mdW5jdGlvbiB3OW4oZSx0KXtpZihlPDB8fHQ8MCl0aHJvdyB1ZShuZXcgWW4oImsgYW5kIG4gbXVzdCBiZSBwb3NpdGl2ZSIpKTtpZih0PmUpdGhyb3cgdWUobmV3IFluKCJrIG11c3QgYmUgc21hbGxlciB0aGFuIG4iKSk7cmV0dXJuIHQ9PTB8fHQ9PWU/MTplPT0wPzA6eHhlKGUpLyh4eGUodCkqeHhlKGUtdCkpfWZ1bmN0aW9uIFl4ZShlLHQpe3ZhciBuLHIsYSxvO2ZvcihuPW5ldyBoeWUoZSk7bi5nPT1udWxsJiYhbi5jP0g1ZShuKTpuLmc9PW51bGx8fG4uaSE9MCYmbChuLmdbbi5pLTFdLDUxKS5PYigpOylpZihvPWwoQ1UobiksNTgpLERlKG8sMTY3KSlmb3Iocj1sKG8sMTY3KSxhPTA7YTx0Lmxlbmd0aDthKyspdFthXS5LZyhyKX1mdW5jdGlvbiBQdWUoZSl7dmFyIHQ7cmV0dXJuIGUuRGImNjQ/amNlKGUpOih0PW5ldyBBZihqY2UoZSkpLHQuYSs9IiAoaGVpZ2h0OiAiLF81KHQsZS5mKSx0LmErPSIsIHdpZHRoOiAiLF81KHQsZS5nKSx0LmErPSIsIHg6ICIsXzUodCxlLmkpLHQuYSs9IiwgeTogIixfNSh0LGUuaiksdC5hKz0iKSIsdC5hKX1mdW5jdGlvbiB5OW4oZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKHQ9bmV3IGUyLHI9ZSxhPTAsbz1yLmxlbmd0aDthPG87KythKWlmKG49clthXSxmPVhyKG4ubGQoKSksZz1oMih0LGYsWHIobi5tZCgpKSksZyE9bnVsbCl0aHJvdyB1ZShuZXcgWW4oImR1cGxpY2F0ZSBrZXk6ICIrZikpO3RoaXMuYj0oQ24oKSxuZXcgdHIodCkpfWZ1bmN0aW9uIHg5bihlKXt2YXIgdCxuLHIsYSxvO2lmKGU9PW51bGwpcmV0dXJuIHVsO2ZvcihvPW5ldyBIbShDbywiWyIsIl0iKSxuPWUscj0wLGE9bi5sZW5ndGg7cjxhOysrcil0PW5bcl0sSmcobyxTdHJpbmcuZnJvbUNoYXJDb2RlKHQpKTtyZXR1cm4gby5hP28uZS5sZW5ndGg9PTA/by5hLmE6by5hLmErKCIiK28uZSk6by5jfWZ1bmN0aW9uIFh4ZSgpe1h4ZT1VLFFfZT0ob1YoKSx5Syksajd0PW5ldyBwbihhRyxRX2UpLHB0KDEpLFI3dD1uZXcgcG4oSUVlLHB0KDMwMCkpLHB0KDApLHE3dD1uZXcgcG4oT0VlLHB0KDApKSxIN3Q9bmV3IHBuKERoZSxEZCksJDd0PW5ldyBwbihJaGUsNSksVjd0PXlLLHo3dD1RMGV9ZnVuY3Rpb24gazluKGUsdCl7dmFyIG47aWYodCE9bnVsbCYmIWUuYy5IaygpLmZrKHQpKXRocm93IG49RGUodCw1OCk/bCh0LDU4KS5EaCgpLnpiOl9tKGJoKHQpKSx1ZShuZXcga2soT2IrZS5jLnhlKCkrIidzIHR5cGUgJyIrZS5jLkhrKCkueGUoKSsiJyBkb2VzIG5vdCBwZXJtaXQgYSB2YWx1ZSBvZiB0eXBlICciK24rIiciKSl9ZnVuY3Rpb24gRTluKGUsdCxuKXt2YXIgcixhO2ZvcihhPW5ldyBVYShlLmIsMCk7YS5iPGEuZC5nYygpOylyPShtcihhLmI8YS5kLmdjKCkpLGwoYS5kLlhiKGEuYz1hLmIrKyksNzIpKSxxZShRKHIsKGZ0KCksVkxlKSkpPT09cWUodCkmJihuOWUoci5uLGVvKGUuYy5pKSxuKSxwaChhKSx2dCh0LmIscikpfWZ1bmN0aW9uIGlwdChlKXt2YXIgdCxuO3JldHVybiBuPWIuTWF0aC5zcXJ0KChlLms9PW51bGwmJihlLms9eDdlKGUsbmV3IEJlZSkpLHplKGUuaykvKGUuYiooZS5nPT1udWxsJiYoZS5nPUVmdChlLG5ldyBLaikpLHplKGUuZykpKSkpLHQ9WXIoWmMoYi5NYXRoLnJvdW5kKG4pKSksdD1iLk1hdGgubWluKHQsZS5mKSx0fWZ1bmN0aW9uIFQ5bigpe3ZhciBlLHQsbjtmb3IodD0wLGU9MDtlPDE7ZSsrKXtpZihuPUM5ZSgoWG4oZSwxKSwiWCIuY2hhckNvZGVBdChlKSkpLG49PTApdGhyb3cgdWUobmV3IHJpKChYbihlLDErMSksIlVua25vd24gT3B0aW9uOiAiKyJYIi5zdWJzdHIoZSkpKSk7dHw9bn1yZXR1cm4gdH1mdW5jdGlvbiBndSgpe2tsKCkscjRlLmNhbGwodGhpcyksdGhpcy5qPShDdCgpLFBjKSx0aGlzLmE9bmV3IHFhLG5ldyAkaWUsdGhpcy5mPShNaCgyLFl5KSxuZXcgQnUoMikpLHRoaXMuZT0oTWgoNCxZeSksbmV3IEJ1KDQpKSx0aGlzLmc9KE1oKDQsWXkpLG5ldyBCdSg0KSksdGhpcy5iPW5ldyBNZXQodGhpcy5lLHRoaXMuZyl9ZnVuY3Rpb24gQzluKGUsdCl7dmFyIG4scjtyZXR1cm4hKFJ0KEJ0KFEodCwoZnQoKSxXMSkpKSl8fChyPXQuYy5pLGU9PShoZigpLFlMKSYmci5rPT0oWm4oKSxjdSkpfHwobj1sKFEociwoTnQoKSxRdSkpLDE3MSksbj09JGIpKX1mdW5jdGlvbiBTOW4oZSx0KXt2YXIgbixyO3JldHVybiEoUnQoQnQoUSh0LChmdCgpLFcxKSkpKXx8KHI9dC5kLmksZT09KGhmKCksWEwpJiZyLms9PShabigpLGN1KSl8fChuPWwoUShyLChOdCgpLFF1KSksMTcxKSxuPT1kNCkpfWZ1bmN0aW9uIF85bihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2ZvcihmPWUuZCx3PWUubyxnPW5ldyBlZigtZi5iLC1mLmQsZi5iK3cuYStmLmMsZi5kK3cuYitmLmEpLHI9dCxhPTAsbz1yLmxlbmd0aDthPG87KythKW49clthXSxuJiYkQShnLG4uaSk7Zi5iPS1nLmMsZi5kPS1nLmQsZi5jPWcuYi1mLmItdy5hLGYuYT1nLmEtZi5kLXcuYn1mdW5jdGlvbiBBOW4oZSx0KXtpZih0LmEpc3dpdGNoKGwoUSh0LmIsKGZ0KCksR0xlKSksMTAxKS5nKXtjYXNlIDA6Y2FzZSAxOkc4bih0KTtjYXNlIDI6SXMobmV3IGJuKG51bGwsbmV3IGtuKHQuZCwxNikpLG5ldyBraiksTUVuKGUuYSx0KX1lbHNlIElzKG5ldyBibihudWxsLG5ldyBrbih0LmQsMTYpKSxuZXcga2opfWZ1bmN0aW9uIFhOKCl7WE49VSx4T2U9bmV3IHBPKCJDRU5URVJfRElTVEFOQ0UiLDApLHdnZT1uZXcgcE8oIkNJUkNMRV9VTkRFUkxBUCIsMSksRU9lPW5ldyBwTygiUkVDVEFOR0xFX1VOREVSTEFQIiwyKSx5Z2U9bmV3IHBPKCJJTlZFUlRFRF9PVkVSTEFQIiwzKSxrT2U9bmV3IHBPKCJNSU5JTVVNX1JPT1RfRElTVEFOQ0UiLDQpfWZ1bmN0aW9uIEw5bihlKXtaOWUoKTt2YXIgdCxuLHIsYSxvO2lmKGU9PW51bGwpcmV0dXJuIG51bGw7Zm9yKHI9ZS5sZW5ndGgsYT1yKjIsdD1XZShrZixBZCwyOCxhLDE1LDEpLG49MDtuPHI7bisrKW89ZVtuXSxvPDAmJihvKz0yNTYpLHRbbioyXT1MWVtvPj40XSx0W24qMisxXT1MWVtvJjE1XTtyZXR1cm4gSWYodCwwLHQubGVuZ3RoKX1mdW5jdGlvbiBNOW4oZSl7a0goKTt2YXIgdCxuLHI7c3dpdGNoKHI9ZS5jLmxlbmd0aCxyKXtjYXNlIDA6cmV0dXJuIGk2dDtjYXNlIDE6cmV0dXJuIHQ9bChScHQobmV3IEcoZSkpLDQ0KSxFZG4odC5sZCgpLHQubWQoKSk7ZGVmYXVsdDpyZXR1cm4gbj1sKGoxKGUsV2UodXYsWFUsNDQsZS5jLmxlbmd0aCwwLDEpKSwxNzMpLG5ldyBXd2Uobil9fWZ1bmN0aW9uIEQ5bihlKXt2YXIgdCxuLHIsYSxvLGY7Zm9yKHQ9bmV3IHo1LG49bmV3IHo1LGdiKHQsZSksZ2IobixlKTtuLmIhPW4uYzspZm9yKGE9bChYOChuKSwzNiksZj1uZXcgRyhhLmEpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxMCksby5lJiYocj1vLmUsZ2IodCxyKSxnYihuLHIpKTtyZXR1cm4gdH1mdW5jdGlvbiBkMihlLHQpe3N3aXRjaCh0Lmcpe2Nhc2UgMTpyZXR1cm4gRzgoZS5qLChrbCgpLGtBZSkpO2Nhc2UgMjpyZXR1cm4gRzgoZS5qLChrbCgpLHlBZSkpO2Nhc2UgMzpyZXR1cm4gRzgoZS5qLChrbCgpLFRBZSkpO2Nhc2UgNDpyZXR1cm4gRzgoZS5qLChrbCgpLENBZSkpO2RlZmF1bHQ6cmV0dXJuIENuKCksQ24oKSxfb319ZnVuY3Rpb24gSTluKGUsdCl7dmFyIG4scixhO249YmRuKHQsZS5lKSxyPWwoY3IoZS5nLmYsbiksMTcpLmEsYT1lLmEuYy5sZW5ndGgtMSxlLmEuYy5sZW5ndGghPTAmJmwoanQoZS5hLGEpLDI5NCkuYz09cj8oKytsKGp0KGUuYSxhKSwyOTQpLmEsKytsKGp0KGUuYSxhKSwyOTQpLmIpOnZ0KGUuYSxuZXcgbHJ0KHIpKX1mdW5jdGlvbiBPOW4oZSx0LG4pe3ZhciByLGE7cmV0dXJuIHI9WVNuKGUsdCxuKSxyIT0wP3I6bnModCwoZnQoKSxLaSkpJiZucyhuLEtpKT8oYT1ydShsKFEodCxLaSksMTcpLmEsbChRKG4sS2kpLDE3KS5hKSxhPDA/bFAoZSx0LG4pOmE+MCYmbFAoZSxuLHQpLGEpOndFbihlLHQsbil9ZnVuY3Rpb24gU2IoKXtTYj1VLHVDdD0ocGkoKSxuOSksbEN0PUV2LHNDdD1rdixhQ3Q9aTcsb0N0PVViLGlDdD1yNyxOSWU9WUIsY0N0PVM0LEpkZT0odWtlKCksS1R0KSxaZGU9V1R0LEJJZT1KVHQsZWdlPXRDdCxGSWU9WlR0LFJJZT1lQ3QsUEllPVlUdCxxVz1YVHQsSFc9UVR0LEZCPW5DdCxqSWU9ckN0LE9JZT1HVHR9ZnVuY3Rpb24gc3B0KGUsdCl7dmFyIG4scixhLG8sZjtpZihlLmU8PXR8fHRibihlLGUuZyx0KSlyZXR1cm4gZS5nO2ZvcihvPWUucixyPWUuZyxmPWUucixhPShvLXIpLzIrcjtyKzE8bzspbj1aQShlLGEsITEpLG4uYjw9YSYmbi5hPD10PyhmPWEsbz1hKTpyPWEsYT0oby1yKS8yK3I7cmV0dXJuIGZ9ZnVuY3Rpb24gTjluKGUsdCxuKXt2YXIgcjtyPVNidChlLHQsITApLEZndChuLCJSZWN1cnNpdmUgR3JhcGggTGF5b3V0IixyKSxZeGUodCxoZShsZShIT2UsMSksUm4sNTM2LDAsW25ldyBoaWVdKSksUDEodCwocGkoKSxhNykpfHxZeGUodCxoZShsZShIT2UsMSksUm4sNTM2LDAsW25ldyBmJF0pKSxYa2UoZSx0LG51bGwsbiksYXB0KG4pfWZ1bmN0aW9uIGFwdChlKXt2YXIgdDtpZihlLnA9PW51bGwpdGhyb3cgdWUobmV3IG5jKCJUaGUgdGFzayBoYXMgbm90IGJlZ3VuIHlldC4iKSk7ZS5ifHwoZS5rJiYodD0oVmcoKSxtbyhaYyhEYXRlLm5vdygpKSxiMikpLGUucT1GbShEZih0LGUubykpKjFlLTkpLGUuYzxlLnImJmM3ZShlLGUuci1lLmMpLGUuYj0hMCl9ZnVuY3Rpb24gUU4oZSl7dmFyIHQsbixyO2ZvcihyPW5ldyBibCx1aShyLG5ldyBsdChlLmosZS5rKSksbj1uZXcgb3IoKCFlLmEmJihlLmE9bmV3IFlzKHFoLGUsNSkpLGUuYSkpO24uZSE9bi5pLmdjKCk7KXQ9bChncihuKSwzNzcpLHVpKHIsbmV3IGx0KHQuYSx0LmIpKTtyZXR1cm4gdWkocixuZXcgbHQoZS5iLGUuYykpLHJ9ZnVuY3Rpb24gUDluKGUsdCxuLHIsYSl7dmFyIG8sZixnLHcsRSxDO2lmKGEpZm9yKHc9YS5hLmxlbmd0aCxvPW5ldyBEbSh3KSxDPShvLmItby5hKSpvLmM8MD8oc2IoKSx0bSk6bmV3IGNiKG8pO0MuT2IoKTspRT1sKEMuUGIoKSwxNyksZz1KayhhLEUuYSksZj1uZXcgRGF0KGUsdCxuLHIpLHJBbihmLmEsZi5iLGYuYyxmLmQsZyl9ZnVuY3Rpb24gUXhlKGUsdCl7dmFyIG47aWYocWUoZSk9PT1xZSh0KSlyZXR1cm4hMDtpZihEZSh0LDIxKSl7bj1sKHQsMjEpO3RyeXtyZXR1cm4gZS5nYygpPT1uLmdjKCkmJmUuSWMobil9Y2F0Y2gocil7aWYocj1icyhyKSxEZShyLDE2OSl8fERlKHIsMjEyKSlyZXR1cm4hMTt0aHJvdyB1ZShyKX19cmV0dXJuITF9ZnVuY3Rpb24gQnVlKGUsdCxuLHIsYSxvKXtzd2l0Y2godGhpcy5jPWUsdC5nKXtjYXNlIDI6aWYoZS5hLk5lKGEsbik8MCl0aHJvdyB1ZShuZXcgWW4obEVlK2ErWXd0K24pKTticmVhaztjYXNlIDE6ZS5hLk5lKGEsYSk7YnJlYWs7Y2FzZSAzOmUuYS5OZShuLG4pfXRoaXMuZj10LHRoaXMuYj1uLHRoaXMuYT1yLHRoaXMuZT1hLHRoaXMuZD1vfWZ1bmN0aW9uIEp4ZShlLHQpe3ZhciBuO3Z0KGUuZCx0KSxuPXQuTWYoKSxlLmM/KGUuZS5hPWIuTWF0aC5tYXgoZS5lLmEsbi5hKSxlLmUuYis9bi5iLGUuZC5jLmxlbmd0aD4xJiYoZS5lLmIrPWUuYSkpOihlLmUuYSs9bi5hLGUuZS5iPWIuTWF0aC5tYXgoZS5lLmIsbi5iKSxlLmQuYy5sZW5ndGg+MSYmKGUuZS5hKz1lLmEpKX1mdW5jdGlvbiBCOW4oZSl7dmFyIHQsbixyLGE7c3dpdGNoKGE9ZS5pLHQ9YS5iLHI9YS5qLG49YS5nLGEuYS5nKXtjYXNlIDA6bi5hPShlLmcuYi5vLmEtci5hKS8yO2JyZWFrO2Nhc2UgMTpuLmE9dC5kLm4uYSt0LmQuYS5hO2JyZWFrO2Nhc2UgMjpuLmE9dC5kLm4uYSt0LmQuYS5hLXIuYTticmVhaztjYXNlIDM6bi5iPXQuZC5uLmIrdC5kLmEuYn19ZnVuY3Rpb24gRjluKGUsdCxuKXt2YXIgcixhLG87Zm9yKGE9bmV3IGhyKGRyKHNwKG4pLmEuS2MoKSxuZXcgaikpO2pyKGEpOylyPWwoeHIoYSksMTgpLCFEbyhyKSYmISghRG8ocikmJnIuYy5pLmM9PXIuZC5pLmMpJiYobz1ZMnQoZSxyLG4sbmV3IFFRZSksby5jLmxlbmd0aD4xJiYkbih0LmMsbykpfWZ1bmN0aW9uIG9wdChlLHQsbixyLGEpe2lmKHI8dHx8YTxuKXRocm93IHVlKG5ldyBZbigiVGhlIGhpZ2h4IG11c3QgYmUgYmlnZ2VyIHRoZW4gbG93eCBhbmQgdGhlIGhpZ2h5IG11c3QgYmUgYmlnZ2VyIHRoZW4gbG93eSIpKTtyZXR1cm4gZS5hPHQ/ZS5hPXQ6ZS5hPnImJihlLmE9ciksZS5iPG4/ZS5iPW46ZS5iPmEmJihlLmI9YSksZX1mdW5jdGlvbiBSOW4oZSl7aWYoRGUoZSwxNDMpKXJldHVybiBwQ24obChlLDE0MykpO2lmKERlKGUsMjMzKSlyZXR1cm4gczVuKGwoZSwyMzMpKTtpZihEZShlLDIzKSlyZXR1cm4gYjluKGwoZSwyMykpO3Rocm93IHVlKG5ldyBZbih2U2UrVGIobmV3IElsKGhlKGxlKHdhLDEpLFJuLDEsNSxbZV0pKSkpKX1mdW5jdGlvbiBqOW4oZSx0LG4scixhKXt2YXIgbyxmLGc7Zm9yKG89ITAsZj0wO2Y8cjtmKyspbz1vJm5bZl09PTA7aWYoYT09MClwdShuLHIsZSwwLHQpLGY9dDtlbHNle2ZvcihnPTMyLWEsbz1vJm5bZl08PGc9PTAsZj0wO2Y8dC0xO2YrKyllW2ZdPW5bZityXT4+PmF8bltmK3IrMV08PGc7ZVtmXT1uW2Yrcl0+Pj5hLCsrZn1yZXR1cm4gb31mdW5jdGlvbiBaeGUoZSx0LG4scil7dmFyIGEsbyxmO2lmKHQuaz09KFpuKCksQWEpKXtmb3Iobz1uZXcgaHIoZHIoa2EodCkuYS5LYygpLG5ldyBqKSk7anIobyk7KWlmKGE9bCh4cihvKSwxOCksZj1hLmMuaS5rLGY9PUFhJiZlLmMuYVthLmMuaS5jLnBdPT1yJiZlLmMuYVt0LmMucF09PW4pcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gJDluKGUsdCl7dmFyIG4scixhLG87cmV0dXJuIHQmPTYzLG49ZS5oJmhwLHQ8MjI/KG89bj4+PnQsYT1lLm0+PnR8bjw8MjItdCxyPWUubD4+dHxlLm08PDIyLXQpOnQ8NDQ/KG89MCxhPW4+Pj50LTIyLHI9ZS5tPj50LTIyfGUuaDw8NDQtdCk6KG89MCxhPTAscj1uPj4+dC00NCkscXUociZlaCxhJmVoLG8maHApfWZ1bmN0aW9uIGNwdChlLHQsbixyKXt2YXIgYTt0aGlzLmI9cix0aGlzLmU9ZT09KEl3KCksb00pLGE9dFtuXSx0aGlzLmQ9TG0oaWgsW2R0LHBnXSxbMTgzLDI4XSwxNixbYS5sZW5ndGgsYS5sZW5ndGhdLDIpLHRoaXMuYT1MbShWcixbZHQsZGldLFs1MywyOF0sMTUsW2EubGVuZ3RoLGEubGVuZ3RoXSwyKSx0aGlzLmM9bmV3IE54ZSh0LG4pfWZ1bmN0aW9uIHo5bihlKXt2YXIgdCxuLHI7Zm9yKGUuaz1uZXcgRzVlKChDdCgpLGhlKGxlKE9vLDEpLGF1LDY0LDAsW1BjLFFuLGFyLERyLGVyXSkpLmxlbmd0aCxlLmouYy5sZW5ndGgpLHI9bmV3IEcoZS5qKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMTEzKSx0PW4uZC5qLHhuKGUuayx0LG4pO2UuZT10Q24oVzgoZS5rKSl9ZnVuY3Rpb24gdXB0KGUsdCl7dmFyIG4scixhO25hKGUuZCx0KSxuPW5ldyBBdGUsa2koZS5jLHQsbiksbi5mPU5jZSh0LmMpLG4uYT1OY2UodC5kKSxuLmQ9KEdBKCksYT10LmMuaS5rLGE9PShabigpLFBzKXx8YT09SzEpLG4uZT0ocj10LmQuaS5rLHI9PVBzfHxyPT1LMSksbi5iPXQuYy5qPT0oQ3QoKSxlciksbi5jPXQuZC5qPT1hcn1mdW5jdGlvbiBxOW4oZSl7dmFyIHQsbixyLGEsbztmb3Iobz1JaSxhPUlpLHI9bmV3IEcoWjUoZSkpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwyMTgpLHQ9bi5lLmUtbi5kLmUsbi5lPT1lJiZ0PGE/YT10OnQ8byYmKG89dCk7cmV0dXJuIGE9PUlpJiYoYT0tMSksbz09SWkmJihvPS0xKSxuZXcgY2EocHQoYSkscHQobykpfWZ1bmN0aW9uIEg5bihlLHQpe3ZhciBuLHIsYTtyZXR1cm4gYT15NixyPShOQSgpLHVCKSxhPWIuTWF0aC5hYnMoZS5iKSxuPWIuTWF0aC5hYnModC5mLWUuYiksbjxhJiYoYT1uLHI9bUspLG49Yi5NYXRoLmFicyhlLmEpLG48YSYmKGE9bixyPWxCKSxuPWIuTWF0aC5hYnModC5nLWUuYSksbjxhJiYoYT1uLHI9YkspLHJ9ZnVuY3Rpb24gVjluKGUsdCl7dmFyIG4scixhLG87Zm9yKG49dC5hLm8uYSxvPW5ldyBacChlbyh0LmEpLmIsdC5jLHQuZisxKSxhPW5ldyBrcihvKTthLmI8YS5kLmdjKCk7KWlmKHI9KG1yKGEuYjxhLmQuZ2MoKSksbChhLmQuWGIoYS5jPWEuYisrKSwzMCkpLHIuYy5hPj1uKXJldHVybiBxRShlLHQsci5wKSwhMDtyZXR1cm4hMX1mdW5jdGlvbiBvNihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEU7Zm9yKGY9bi5sZW5ndGgsbz0wLGE9LTEsRT10aHQoKFhuKHQsZS5sZW5ndGgrMSksZS5zdWJzdHIodCkpLChnYWUoKSxwX2UpKSxnPTA7ZzxmOysrZyl3PW5bZ10ubGVuZ3RoLHc+byYmZ2duKEUsdGh0KG5bZ10scF9lKSkmJihhPWcsbz13KTtyZXR1cm4gYT49MCYmKHJbMF09dCtvKSxhfWZ1bmN0aW9uIGxwdChlKXt2YXIgdDtyZXR1cm4gZS5EYiY2ND9QdWUoZSk6KHQ9bmV3IFRoKG9TZSksIWUuYXx8aGkoaGkoKHQuYSs9JyAiJyx0KSxlLmEpLCciJyksaGkocncoaGkocncoaGkocncoaGkocncoKHQuYSs9IiAoIix0KSxlLmkpLCIsIiksZS5qKSwiIHwgIiksZS5nKSwiLCIpLGUuZiksIikiKSx0LmEpfWZ1bmN0aW9uIGhwdChlLHQsbil7dmFyIHIsYSxvLGYsZztmb3IoZz1XdShlLmUuRGgoKSx0KSxhPWwoZS5nLDEyNCkscj0wLGY9MDtmPGUuaTsrK2YpaWYobz1hW2ZdLGcuYW0oby5MaygpKSl7aWYocj09bilyZXR1cm4gVnkoZSxmKSxGbygpLGwodCw2OSkueGsoKT9vOm8ubWQoKTsrK3J9dGhyb3cgdWUobmV3IHRjKENMK24rYXYrcikpfWZ1bmN0aW9uIGZwdChlKXt2YXIgdCxuLHI7aWYodD1lLmMsdD09Mnx8dD09N3x8dD09MSlyZXR1cm4gRGkoKSxEaSgpLFdNO2ZvcihyPUdrZShlKSxuPW51bGw7KHQ9ZS5jKSE9MiYmdCE9NyYmdCE9MTspbnx8KG49KERpKCksRGkoKSxuZXcgQl8oMSkpLFFtKG4scikscj1uKSxRbShuLEdrZShlKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gVTluKGUsdCxuKXtyZXR1cm4gZTwwfHxlPm4/dTllKGUsbiwic3RhcnQgaW5kZXgiKTp0PDB8fHQ+bj91OWUodCxuLCJlbmQgaW5kZXgiKTpLQSgiZW5kIGluZGV4ICglcykgbXVzdCBub3QgYmUgbGVzcyB0aGFuIHN0YXJ0IGluZGV4ICglcykiLGhlKGxlKHdhLDEpLFJuLDEsNSxbcHQodCkscHQoZSldKSl9ZnVuY3Rpb24gZHB0KGUsdCl7dmFyIG4scixhLG87Zm9yKHI9MCxhPWUubGVuZ3RoO3I8YTtyKyspe289ZVtyXTt0cnl7b1sxXT9vWzBdLlVtKCkmJih0PVhkbih0LG8pKTpvWzBdLlVtKCl9Y2F0Y2goZil7aWYoZj1icyhmKSxEZShmLDgyKSluPWYsSHooKSxScG4oRGUobiw0ODYpP2wobiw0ODYpLmtlKCk6bik7ZWxzZSB0aHJvdyB1ZShmKX19cmV0dXJuIHR9ZnVuY3Rpb24gcUUoZSx0LG4pe3ZhciByLGEsbztmb3IobiE9dC5jK3QuYi5nYygpJiZoTG4odC5hLF8zbih0LG4tdC5jKSksbz10LmEuYy5wLGUuYVtvXT1iLk1hdGgubWF4KGUuYVtvXSx0LmEuby5hKSxhPWwoUSh0LmEsKGZ0KCksV0wpKSwxNSkuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksNzIpLHJ0KHIsZzFlLChIbigpLCEwKSl9ZnVuY3Rpb24gRzluKGUsdCl7dmFyIG4scixhO2E9RUNuKHQpLHJ0KHQsKGZ0KCksVTFlKSxhKSxhJiYocj1JaSx6byhlLmYsYSkmJihyPWwoaGMoem8oZS5mLGEpKSwxNykuYSksbj1sKGp0KHQuZywwKSwxOCksUnQoQnQoUShuLFcxKSkpfHxraShlLGEscHQoYi5NYXRoLm1pbihsKFEobixLaSksMTcpLmEscikpKSl9ZnVuY3Rpb24gZ3B0KGUsdCxuKXt2YXIgcixhLG8sZixnO2Zvcih0LnA9LTEsZz1Sdyh0LChxbygpLHp1KSkuS2MoKTtnLk9iKCk7KWZvcihmPWwoZy5QYigpLDEyKSxhPW5ldyBHKGYuZyk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDE4KSxvPXIuZC5pLHQhPW8mJihvLnA8MD9uLkZjKHIpOm8ucD4wJiZncHQoZSxvLG4pKTt0LnA9MH1mdW5jdGlvbiBYdChlKXt2YXIgdDt0aGlzLmM9bmV3IG9zLHRoaXMuZj1lLmUsdGhpcy5lPWUuZCx0aGlzLmk9ZS5nLHRoaXMuZD1lLmMsdGhpcy5iPWUuYix0aGlzLms9ZS5qLHRoaXMuYT1lLmEsZS5pP3RoaXMuaj1lLmk6dGhpcy5qPSh0PWwoSzAoeGcpLDkpLG5ldyBaaCh0LGwoYzAodCx0Lmxlbmd0aCksOSksMCkpLHRoaXMuZz1lLmZ9ZnVuY3Rpb24gSzluKGUpe3ZhciB0LG4scixhO2Zvcih0PWhiKGhpKG5ldyBUaCgiUHJlZGljYXRlcy4iKSwiYW5kIiksNDApLG49ITAsYT1uZXcga3IoZSk7YS5iPGEuZC5nYygpOylyPShtcihhLmI8YS5kLmdjKCkpLGEuZC5YYihhLmM9YS5iKyspKSxufHwodC5hKz0iLCIpLHQuYSs9IiIrcixuPSExO3JldHVybih0LmErPSIpIix0KS5hfWZ1bmN0aW9uIHBwdChlLHQsbil7dmFyIHIsYSxvO2lmKCEobjw9dCsyKSlmb3IoYT0obi10KS8yfDAscj0wO3I8YTsrK3Ipbz0oU24odCtyLGUuYy5sZW5ndGgpLGwoZS5jW3Qrcl0sMTIpKSxyZihlLHQrciwoU24obi1yLTEsZS5jLmxlbmd0aCksbChlLmNbbi1yLTFdLDEyKSkpLFNuKG4tci0xLGUuYy5sZW5ndGgpLGUuY1tuLXItMV09b31mdW5jdGlvbiBXOW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEM7bz1lLmQucCxnPW8uZSx3PW8ucixlLmc9bmV3IElPKHcpLGY9ZS5kLm8uYy5wLHI9Zj4wP2dbZi0xXTpXZSh3ZyxtMiwxMCwwLDAsMSksYT1nW2ZdLEU9ZjxnLmxlbmd0aC0xP2dbZisxXTpXZSh3ZyxtMiwxMCwwLDAsMSksQz10PT1uLTEsQz9sb2UoZS5nLGEsRSk6bG9lKGUuZyxyLGEpfWZ1bmN0aW9uIGJwdChlKXt2YXIgdDt0aGlzLmo9bmV3IGJ0LHRoaXMuZj1uZXcgS3MsdGhpcy5iPSh0PWwoSzAoT28pLDkpLG5ldyBaaCh0LGwoYzAodCx0Lmxlbmd0aCksOSksMCkpLHRoaXMuZD1XZShWcixkaSwyOCwoQ3QoKSxoZShsZShPbywxKSxhdSw2NCwwLFtQYyxRbixhcixEcixlcl0pKS5sZW5ndGgsMTUsMSksdGhpcy5nPWV9ZnVuY3Rpb24gbXB0KGUsdCl7dmFyIG4scixhO2lmKHQuYy5sZW5ndGghPTApe2ZvcihuPUdndChlLHQpLGE9ITE7IW47KVRVKGUsdCwhMCksYT0hMCxuPUdndChlLHQpO2EmJlRVKGUsdCwhMSkscj1iY2UodCksZS5iJiZlLmIuR2cociksZS5hPVcwdChlLChTbigwLHQuYy5sZW5ndGgpLGwodC5jWzBdLDI3KSkpLG1wdChlLHIpfX1mdW5jdGlvbiBGdWUoZSx0KXt2YXIgbixyLGE7aWYocj1NbihlLkRoKCksdCksbj10LWUuamkoKSxuPDApaWYocilpZihyLnJrKCkpYT1lLkloKHIpLGE+PTA/ZS5raShhKTpkOWUoZSxyKTtlbHNlIHRocm93IHVlKG5ldyBZbihPYityLnhlKCkra0wpKTtlbHNlIHRocm93IHVlKG5ldyBZbihmNHQrdCtkNHQpKTtlbHNlIGNmKGUsbixyKX1mdW5jdGlvbiBlOWUoZSl7dmFyIHQsbjtpZihuPW51bGwsdD0hMSxEZShlLDIxMSkmJih0PSEwLG49bChlLDIxMSkuYSksdHx8RGUoZSwyNjMpJiYodD0hMCxuPSIiK2woZSwyNjMpLmEpLHR8fERlKGUsNDkzKSYmKHQ9ITAsbj0iIitsKGUsNDkzKS5hKSwhdCl0aHJvdyB1ZShuZXcgUWllKG1TZSkpO3JldHVybiBufWZ1bmN0aW9uIHQ5ZShlLHQsbil7dmFyIHIsYSxvLGYsZyx3O2Zvcih3PVd1KGUuZS5EaCgpLHQpLHI9MCxnPWUuaSxhPWwoZS5nLDEyNCksZj0wO2Y8ZS5pOysrZilpZihvPWFbZl0sdy5hbShvLkxrKCkpKXtpZihuPT1yKXJldHVybiBmOysrcixnPWYrMX1pZihuPT1yKXJldHVybiBnO3Rocm93IHVlKG5ldyB0YyhDTCtuK2F2K3IpKX1mdW5jdGlvbiBZOW4oZSx0KXt2YXIgbixyLGEsbztpZihlLmYuYy5sZW5ndGg9PTApcmV0dXJuIG51bGw7Zm9yKG89bmV3ICQ4LHI9bmV3IEcoZS5mKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksNzIpLGE9bi5vLG8uYj1iLk1hdGgubWF4KG8uYixhLmEpLG8uYSs9YS5iO3JldHVybiBvLmErPShlLmYuYy5sZW5ndGgtMSkqdCxvfWZ1bmN0aW9uIFg5bihlKXt2YXIgdCxuLHIsYTtmb3Iobj1uZXcgb3MsS2EobixlLm8pLHI9bmV3IEZ3ZTtuLmIhPTA7KXQ9bChuLmI9PTA/bnVsbDoobXIobi5iIT0wKSxhZihuLG4uYS5hKSksNTE1KSxhPXR3dChlLHQsITApLGEmJnZ0KHIuYSx0KTtmb3IoO3IuYS5jLmxlbmd0aCE9MDspdD1sKFAwdChyKSw1MTUpLHR3dChlLHQsITEpfWZ1bmN0aW9uIGcyKCl7ZzI9VSxWT2U9bmV3IEY4KGNMLDApLHlhPW5ldyBGOCgiQk9PTEVBTiIsMSksVGM9bmV3IEY4KCJJTlQiLDIpLEo2PW5ldyBGOCgiU1RSSU5HIiwzKSxmbz1uZXcgRjgoIkRPVUJMRSIsNCkscHM9bmV3IEY4KCJFTlVNIiw1KSx0OT1uZXcgRjgoIkVOVU1TRVQiLDYpLFgxPW5ldyBGOCgiT0JKRUNUIiw3KX1mdW5jdGlvbiAkQShlLHQpe3ZhciBuLHIsYSxvLGY7cj1iLk1hdGgubWluKGUuYyx0LmMpLG89Yi5NYXRoLm1pbihlLmQsdC5kKSxhPWIuTWF0aC5tYXgoZS5jK2UuYix0LmMrdC5iKSxmPWIuTWF0aC5tYXgoZS5kK2UuYSx0LmQrdC5hKSxhPHImJihuPXIscj1hLGE9biksZjxvJiYobj1vLG89ZixmPW4pLElpdChlLHIsbyxhLXIsZi1vKX1mdW5jdGlvbiB2cHQoZSx0KXt2YXIgbixyO2lmKGUuZil7Zm9yKDt0Lk9iKCk7KWlmKG49bCh0LlBiKCksNzYpLHI9bi5MaygpLERlKHIsMTAyKSYmbChyLDE5KS5CYiZldSYmKCFlLmV8fHIucGsoKSE9b0N8fHIuTGooKSE9MCkmJm4ubWQoKSE9bnVsbClyZXR1cm4gdC5VYigpLCEwO3JldHVybiExfWVsc2UgcmV0dXJuIHQuT2IoKX1mdW5jdGlvbiB3cHQoZSx0KXt2YXIgbixyO2lmKGUuZil7Zm9yKDt0LlNiKCk7KWlmKG49bCh0LlViKCksNzYpLHI9bi5MaygpLERlKHIsMTAyKSYmbChyLDE5KS5CYiZldSYmKCFlLmV8fHIucGsoKSE9b0N8fHIuTGooKSE9MCkmJm4ubWQoKSE9bnVsbClyZXR1cm4gdC5QYigpLCEwO3JldHVybiExfWVsc2UgcmV0dXJuIHQuU2IoKX1mdW5jdGlvbiBFbCgpe0VsPVUselBlPWhlKGxlKHp0LDEpLGR0LDIsNixbSVNlLFFQLFpHLEw1dCxlSyxhMGUsekddKSwkUGU9aGUobGUoenQsMSksZHQsMiw2LFtJU2UsImVtcHR5IixRUCxYUCwiZWxlbWVudE9ubHkiXSkscVBlPWhlKGxlKHp0LDEpLGR0LDIsNixbSVNlLCJwcmVzZXJ2ZSIsInJlcGxhY2UiLHMxXSksaW89bmV3IE5pdH1mdW5jdGlvbiBuOWUoZSx0LG4pe3ZhciByLGEsbztpZih0IT1uKXtyPXQ7ZG8gT2koZSxyLmMpLGE9ci5lLGEmJihvPXIuZCxkdyhlLG8uYixvLmQpLE9pKGUsYS5uKSxyPWVvKGEpKTt3aGlsZShhKTtyPW47ZG8gbWEoZSxyLmMpLGE9ci5lLGEmJihvPXIuZCx6XyhlLG8uYixvLmQpLG1hKGUsYS5uKSxyPWVvKGEpKTt3aGlsZShhKX19ZnVuY3Rpb24gUnVlKGUsdCxuLHIpe3ZhciBhLG8sZixnLHc7aWYoci5mLmMrci5pLmM9PTApZm9yKGY9ZS5hW2UuY10sZz0wLHc9Zi5sZW5ndGg7Zzx3OysrZylvPWZbZ10sa2kocixvLG5ldyBEZnQoZSxvLG4pKTtyZXR1cm4gYT1sKGhjKHpvKHIuZix0KSksNjc3KSxhLmI9MCxhLmM9YS5mLGEuYz09MHx8RXIobChqdChhLmEsYS5iKSwyOTQpKSxhfWZ1bmN0aW9uIHl4KCl7eXg9VSxPVD1uZXcgRV8oIk1FRElBTl9MQVlFUiIsMCkscUw9bmV3IEVfKCJUQUlMX0xBWUVSIiwxKSxJVD1uZXcgRV8oIkhFQURfTEFZRVIiLDIpLGg0PW5ldyBFXygiU1BBQ0VfRUZGSUNJRU5UX0xBWUVSIiwzKSxONj1uZXcgRV8oIldJREVTVF9MQVlFUiIsNCksTzY9bmV3IEVfKCJDRU5URVJfTEFZRVIiLDUpfWZ1bmN0aW9uIHI5ZShlKXt2YXIgdCxuLHIsYTtmb3IoZS5lPTAsYT1ScihlLmYsMCk7YS5iIT1hLmQuYzspcj1sKEJyKGEpLDEwKSxyLnA+PWUuZC5iLmMubGVuZ3RoJiYodD1uZXcgeXUoZS5kKSx0LnA9ci5wLTEsdnQoZS5kLmIsdCksbj1uZXcgeXUoZS5kKSxuLnA9ci5wLHZ0KGUuZC5iLG4pKSxWYShyLGwoanQoZS5kLmIsci5wKSwzMCkpfWZ1bmN0aW9uIGk5ZShlLHQsbil7dmFyIHIsYSxvO2lmKCFlLmJbdC5nXSl7Zm9yKGUuYlt0LmddPSEwLHI9biwhciYmKHI9bmV3IG5OKSx1aShyLmIsdCksbz1lLmFbdC5nXS5LYygpO28uT2IoKTspYT1sKG8uUGIoKSw2NSksYS5iIT10JiZpOWUoZSxhLmIsciksYS5jIT10JiZpOWUoZSxhLmMsciksdWkoci5hLGEpO3JldHVybiByfXJldHVybiBudWxsfWZ1bmN0aW9uIFE5bihlKXtzd2l0Y2goZS5nKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpyZXR1cm4gQ3QoKSxRbjtjYXNlIDM6Y2FzZSA0OmNhc2UgNTpyZXR1cm4gQ3QoKSxEcjtjYXNlIDY6Y2FzZSA3OmNhc2UgODpyZXR1cm4gQ3QoKSxlcjtjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOnJldHVybiBDdCgpLGFyO2RlZmF1bHQ6cmV0dXJuIEN0KCksUGN9fWZ1bmN0aW9uIEo5bihlLHQpe3ZhciBuO3JldHVybiBlLmMubGVuZ3RoPT0wPyExOihuPUkxdCgoU24oMCxlLmMubGVuZ3RoKSxsKGUuY1swXSwxOCkpLmMuaSksU2goKSxuPT0oQnkoKSxHNil8fG49PVU2PyEwOlc1KGZjKG5ldyBibihudWxsLG5ldyBrbihlLDE2KSksbmV3IFhlZSksbmV3IFhZZSh0KSkpfWZ1bmN0aW9uIGp1ZShlLHQpe2lmKERlKHQsMjA3KSlyZXR1cm4gR2xuKGUsbCh0LDI3KSk7aWYoRGUodCwxOTMpKXJldHVybiBLbG4oZSxsKHQsMTIzKSk7aWYoRGUodCw0NTIpKXJldHVybiBVbG4oZSxsKHQsMTY2KSk7dGhyb3cgdWUobmV3IFluKHZTZStUYihuZXcgSWwoaGUobGUod2EsMSksUm4sMSw1LFt0XSkpKSkpfWZ1bmN0aW9uIHlwdChlLHQsbil7dmFyIHIsYTtpZih0aGlzLmY9ZSxyPWwoY3IoZS5iLHQpLDI2MCksYT1yP3IuYTowLGs2ZShuLGEpLG4+PShhLzJ8MCkpZm9yKHRoaXMuZT1yP3IuYzpudWxsLHRoaXMuZD1hO24rKzxhOyluaHQodGhpcyk7ZWxzZSBmb3IodGhpcy5jPXI/ci5iOm51bGw7bi0tID4wOylHNmUodGhpcyk7dGhpcy5iPXQsdGhpcy5hPW51bGx9ZnVuY3Rpb24gWjluKGUsdCl7dmFyIG4scjt0LmE/T0NuKGUsdCk6KG49bChjc2UoZS5iLHQuYiksNjApLG4mJm49PWUuYVt0LmIuZl0mJm4uYSYmbi5hIT10LmIuYSYmbi5jLkZjKHQuYikscj1sKG9zZShlLmIsdC5iKSw2MCksciYmZS5hW3IuZl09PXQuYiYmci5hJiZyLmEhPXQuYi5hJiZ0LmIuYy5GYyhyKSx0YWUoZS5iLHQuYikpfWZ1bmN0aW9uIHhwdChlLHQpe3ZhciBuLHI7aWYobj1sKFFvKGUuYix0KSwxMjcpLGwobCgkaShlLnIsdCksMjEpLDg3KS5kYygpKXtuLm4uYj0wLG4ubi5jPTA7cmV0dXJufW4ubi5iPWUuQy5iLG4ubi5jPWUuQy5jLGUuQS5IYygobWgoKSxDdikpJiZLYnQoZSx0KSxyPV82bihlLHQpLEp1ZShlLHQpPT0odDYoKSxLYikmJihyKz0yKmUudyksbi5hLmE9cn1mdW5jdGlvbiBrcHQoZSx0KXt2YXIgbixyO2lmKG49bChRbyhlLmIsdCksMTI3KSxsKGwoJGkoZS5yLHQpLDIxKSw4NykuZGMoKSl7bi5uLmQ9MCxuLm4uYT0wO3JldHVybn1uLm4uZD1lLkMuZCxuLm4uYT1lLkMuYSxlLkEuSGMoKG1oKCksQ3YpKSYmV2J0KGUsdCkscj1TNm4oZSx0KSxKdWUoZSx0KT09KHQ2KCksS2IpJiYocis9MiplLncpLG4uYS5iPXJ9ZnVuY3Rpb24gZWtuKGUsdCl7dmFyIG4scixhLG87Zm9yKG89bmV3IGJ0LHI9bmV3IEcodCk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDY4KSx2dChvLG5ldyBNM2UobiwhMCkpLHZ0KG8sbmV3IE0zZShuLCExKSk7YT1uZXcgWGF0KGUpLGEuYS5hLiRiKCksaGN0KG8sZS5iLG5ldyBJbChoZShsZShGNnQsMSksUm4sNjkzLDAsW2FdKSkpfWZ1bmN0aW9uIEVwdChlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGU7cmV0dXJuIHc9ZS5hLHo9ZS5iLEU9dC5hLFY9dC5iLEM9bi5hLEo9bi5iLEw9ci5hLHRlPXIuYixvPXcqVi16KkUsZj1DKnRlLUoqTCxhPSh3LUUpKihKLXRlKS0oei1WKSooQy1MKSxnPShvKihDLUwpLWYqKHctRSkpL2EsQj0obyooSi10ZSktZiooei1WKSkvYSxuZXcgbHQoZyxCKX1mdW5jdGlvbiB0a24oZSx0KXt2YXIgbixyLGE7dC5VZygiRW5kIGxhYmVsIHByZS1wcm9jZXNzaW5nIiwxKSxuPXplKEdlKFEoZSwoTnQoKSxINikpKSkscj16ZShHZShRKGUseTQpKSksYT1CNShsKFEoZSxSaCksODgpKSxJcyhEYyhuZXcgYm4obnVsbCxuZXcga24oZS5iLDE2KSksbmV3IHJJKSxuZXcgbWl0KG4scixhKSksdC5WZygpfWZ1bmN0aW9uIHM5ZShlLHQpe3ZhciBuLHIsYTtpZighZS5kW3QucF0pe2ZvcihlLmRbdC5wXT0hMCxlLmFbdC5wXT0hMCxyPW5ldyBocihkcihxcyh0KS5hLktjKCksbmV3IGopKTtqcihyKTspbj1sKHhyKHIpLDE4KSwhRG8obikmJihhPW4uZC5pLGUuYVthLnBdP3Z0KGUuYixuKTpzOWUoZSxhKSk7ZS5hW3QucF09ITF9fWZ1bmN0aW9uIFRwdChlLHQsbil7dmFyIHI7c3dpdGNoKHI9MCxsKFEodCwoTnQoKSxRdSkpLDE3MSkuZyl7Y2FzZSAyOnI9MiotbitlLmEsKytlLmE7YnJlYWs7Y2FzZSAxOnI9LW47YnJlYWs7Y2FzZSAzOnI9bjticmVhaztjYXNlIDQ6cj0yKm4rZS5iLCsrZS5ifXJldHVybiBucyh0LChmdCgpLEtpKSkmJihyKz1sKFEodCxLaSksMTcpLmEpLHJ9ZnVuY3Rpb24gQ3B0KGUsdCxuKXt2YXIgcixhLG87Zm9yKG4uemModCxlKSx2dChlLm4sdCksbz1lLnAuemcodCksdC5qPT1lLnAuQWcoKT95MXQoZS5lLG8pOnkxdChlLmosbyksd0goZSksYT1yZyhMaChoZShsZShGaCwxKSxSbiwyMCwwLFtuZXcgVDUodCksbmV3IEM4KHQpXSkpKTtqcihhKTspcj1sKHhyKGEpLDEyKSxuLl9iKHIpfHxDcHQoZSxyLG4pfWZ1bmN0aW9uIG5rbihlLHQsbil7dmFyIHIsYSxvO2ZvcihuLlVnKCJQcm9jZXNzb3Igc2V0IG5laWdoYm9ycyIsMSksZS5hPXQuYi5iPT0wPzE6dC5iLmIsYT1udWxsLHI9UnIodC5iLDApOyFhJiZyLmIhPXIuZC5jOylvPWwoQnIociksNDApLFJ0KEJ0KFEobywoUWkoKSxWYikpKSkmJihhPW8pO2EmJkxidChlLG5ldyBIZyhhKSxuKSxuLlZnKCl9ZnVuY3Rpb24gYTllKGUpe3ZhciB0LG4scjtyZXR1cm4gbj1sKGF0KGUsKHBpKCksa3YpKSwyMSksbi5IYygobWgoKSxBNCkpPyhyPWwoYXQoZSxVYiksMjEpLHQ9bmV3IEVvKGwoYXQoZSxpNyksOCkpLHIuSGMoKFpsKCksYUMpKSYmKHQuYTw9MCYmKHQuYT0yMCksdC5iPD0wJiYodC5iPTIwKSksdCk6bmV3IHFhfWZ1bmN0aW9uIG85ZShlKXt2YXIgdCxuLHI7aWYoIWUuYil7Zm9yKHI9bmV3IFpuZSxuPW5ldyBIOChKQShlKSk7bi5lIT1uLmkuZ2MoKTspdD1sKHJ1ZShuKSwxOSksdC5CYiZldSYmcXIocix0KTtJeShyKSxlLmI9bmV3IE41KChsKE9lKHR0KChsYigpLFZuKS5vKSw4KSwxOSksci5pKSxyLmcpLFlsKGUpLmImPS05fXJldHVybiBlLmJ9ZnVuY3Rpb24gJHkoZSl7dmFyIHQsbixyO2ZvcihuPWUubGVuZ3RoLHI9MDtyPG4mJihYbihyLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQocik8PTMyKTspKytyO2Zvcih0PW47dD5yJiYoWG4odC0xLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQodC0xKTw9MzIpOyktLXQ7cmV0dXJuIHI+MHx8dDxuPyhHYShyLHQsZS5sZW5ndGgpLGUuc3Vic3RyKHIsdC1yKSk6ZX1mdW5jdGlvbiBya24oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFO3c9bChQQShXOCh0LmspLFdlKE9vLGF1LDY0LDIsMCwxKSksMTI2KSxFPXQuZyxuPU5jdCh0LHdbMF0pLGE9T2N0KHQsd1sxXSkscj12dWUoZSxFLG4sYSksbz1OY3QodCx3WzFdKSxnPU9jdCh0LHdbMF0pLGY9dnVlKGUsRSxvLGcpLHI8PWY/KHQuYT1uLHQuYz1hKToodC5hPW8sdC5jPWcpfWZ1bmN0aW9uIEpOKGUpe3ZhciB0O0NuKCk7dmFyIG4scixhLG8sZixnO2lmKERlKGUsNTkpKWZvcihvPTAsYT1lLmdjKCktMTtvPGE7KytvLC0tYSl0PWUuWGIobyksZS5oZChvLGUuWGIoYSkpLGUuaGQoYSx0KTtlbHNlIGZvcihuPWUuZWQoKSxmPWUuZmQoZS5nYygpKTtuLlRiKCk8Zi5WYigpOylyPW4uUGIoKSxnPWYuVWIoKSxuLldiKGcpLGYuV2Iocil9ZnVuY3Rpb24geFUoZSx0KXt2YXIgbixyLGEsbyxmLGc7Zm9yKGc9MCxvPW5ldyB6NSxnYihvLHQpO28uYiE9by5jOylmb3IoZj1sKFg4KG8pLDIxOSksZys9V2R0KGYuZCxmLmUpLGE9bmV3IEcoZi5iKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMzYpLG49bChqdChlLmIsci5wKSwyMTkpLG4uc3x8KGcrPXhVKGUsbikpO3JldHVybiBnfWZ1bmN0aW9uIFNwdChlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEU7aWYodClmb3IoZz10LktjKCk7Zy5PYigpOylmb3IoZj1sKGcuUGIoKSwxMCksRT1ya2UoZiwocW8oKSx6dSksbikuS2MoKTtFLk9iKCk7KXc9bChFLlBiKCksMTIpLG89bChoYyh6byhhLmYsdykpLDExOCksb3x8KG89bmV3IHhOKGUuZCksJG4oci5jLG8pLENwdChvLHcsYSkpfWZ1bmN0aW9uIF9wdChlLHQsbil7dmFyIHIsYTtHZnQodGhpcyksdD09KFN3KCksSGIpP25hKHRoaXMucixlLmMpOm5hKHRoaXMudyxlLmMpLG49PUhiP25hKHRoaXMucixlLmQpOm5hKHRoaXMudyxlLmQpLHVwdCh0aGlzLGUpLHI9TmNlKGUuYyksYT1OY2UoZS5kKSxaZ3QodGhpcyxyLGEsYSksdGhpcy5vPShHQSgpLGIuTWF0aC5hYnMoci1hKTwuMil9ZnVuY3Rpb24gQXB0KGUsdCxuKXt2YXIgcixhLG8sZixnLHc7aWYoZz1sKEtuKGUuYSw4KSwyMDM1KSxnIT1udWxsKWZvcihhPWcsbz0wLGY9YS5sZW5ndGg7bzxmOysrbyludWxsLlVtKCk7cj1uLGUuYS5EYiYxfHwodz1uZXcgbmF0KGUsbix0KSxyLmRqKHcpKSxEZShyLDY4Nik/bChyLDY4NikuZmooZS5hKTpyLmNqKCk9PWUuYSYmci5laihudWxsKX1mdW5jdGlvbiBpa24oKXt2YXIgZTtyZXR1cm4geUF0P2woVkUoKGliKCksR2YpLGN2KSwyMDQ0KTooTkRuKCksZT1sKERlKHh1KChpYigpLEdmKSxjdiksNTk0KT94dShHZixjdik6bmV3IGRhdCw1OTQpLHlBdD0hMCx5SW4oZSksdE9uKGUpLGtpKCh5M2UoKSxfUGUpLGUsbmV3IGxrKSx5dWUoZSkscmMoR2YsY3YsZSksZSl9ZnVuY3Rpb24gc2tuKGUsdCxuLHIpe3ZhciBhO3JldHVybiBhPW82KGUsbixoZShsZSh6dCwxKSxkdCwyLDYsW1FsZSxKbGUsWmxlLGVoZSx0aGUsbmhlLHJoZV0pLHQpLGE8MCYmKGE9bzYoZSxuLGhlKGxlKHp0LDEpLGR0LDIsNixbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdKSx0KSksYTwwPyExOihyLmQ9YSwhMCl9ZnVuY3Rpb24gYWtuKGUsdCxuLHIpe3ZhciBhO3JldHVybiBhPW82KGUsbixoZShsZSh6dCwxKSxkdCwyLDYsW1FsZSxKbGUsWmxlLGVoZSx0aGUsbmhlLHJoZV0pLHQpLGE8MCYmKGE9bzYoZSxuLGhlKGxlKHp0LDEpLGR0LDIsNixbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdKSx0KSksYTwwPyExOihyLmQ9YSwhMCl9ZnVuY3Rpb24ganUoZSx0LG4pe3ZhciByLGEsbyxmO2lmKGY9ZS5iLkNlKHQpLGE9KHI9ZS5hLmdldChmKSxyPz9XZSh3YSxSbiwxLDAsNSwxKSksYS5sZW5ndGg9PTApZS5hLnNldChmLGEpO2Vsc2UgaWYobz1SMHQoZSx0LGEpLG8pcmV0dXJuIG8ubmQobik7cmV0dXJuIFRzKGEsYS5sZW5ndGgsbmV3IGNxKHQsbikpLCsrZS5jLCsrZS5iLmcsbnVsbH1mdW5jdGlvbiBva24oZSl7dmFyIHQsbixyO2Zvcih3VG4oZSkscj1uZXcgYnQsbj1uZXcgRyhlLmEuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksODYpLHZ0KHIsbmV3IE8zZSh0LCEwKSksdnQocixuZXcgTzNlKHQsITEpKTtXNm4oZS5jKSxRTyhyLGUuYixuZXcgSWwoaGUobGUoZkIsMSksUm4sMzgyLDAsW2UuY10pKSksSUVuKGUpfWZ1bmN0aW9uIFpOKGUsdCl7dmFyIG4scixhO2ZvcihhPW5ldyBidCxyPW5ldyBHKGUuYy5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSw2MCksdC5MYihuKSYmKHZ0KGEsbmV3IFMzZShuLCEwKSksdnQoYSxuZXcgUzNlKG4sITEpKSk7SzZuKGUuZSksaGN0KGEsZS5kLG5ldyBJbChoZShsZShGNnQsMSksUm4sNjkzLDAsW2UuZV0pKSl9ZnVuY3Rpb24gY2tuKGUpe3ZhciB0LG4scixhO2ZvcihuPW5ldyBQcixhPW5ldyBHKGUuZCk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDE4NyksdD1sKHIub2YoKGZ0KCksS3gpKSwxOCksem8obi5mLHQpfHxraShuLHQsbmV3IEhhdCh0KSksdnQobChoYyh6byhuLmYsdCkpLDQ2NikuYixyKTtyZXR1cm4gbmV3IE9sKG5ldyBnaShuKSl9ZnVuY3Rpb24gdWtuKGUsdCl7dmFyIG4scixhLG8sZjtmb3Iocj1uZXcgZGN0KGUuai5jLmxlbmd0aCksbj1udWxsLG89bmV3IEcoZS5qKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMTIpLGEuaiE9biYmKHIuYj09ci5jfHxIMnQocixuLHQpLGw2ZShyKSxuPWEuaiksZj1DMnQoYSksZiYmaTZlKHIsZik7ci5iPT1yLmN8fEgydChyLG4sdCl9ZnVuY3Rpb24gbGtuKGUsdCl7dmFyIG4scixhO2ZvcihyPW5ldyBVYShlLmIsMCk7ci5iPHIuZC5nYygpOyluPShtcihyLmI8ci5kLmdjKCkpLGwoci5kLlhiKHIuYz1yLmIrKyksNzIpKSxhPWwoUShuLChOdCgpLGpkKSksMjc4KSxhPT0oRjEoKSxfNCkmJihwaChyKSx2dCh0LmIsbiksbnMobiwoZnQoKSxLeCkpfHxydChuLEt4LGUpKX1mdW5jdGlvbiBoa24oZSl7dmFyIHQsbixyLGEsbztmb3IodD1YZyhuZXcgaHIoZHIocXMoZSkuYS5LYygpLG5ldyBqKSkpLGE9bmV3IGhyKGRyKGthKGUpLmEuS2MoKSxuZXcgaikpO2pyKGEpOylyPWwoeHIoYSksMTgpLG49ci5jLmksbz1YZyhuZXcgaHIoZHIocXMobikuYS5LYygpLG5ldyBqKSkpLHQ9Yi5NYXRoLm1heCh0LG8pO3JldHVybiBwdCh0KX1mdW5jdGlvbiBjOWUoZSx0LG4pe3ZhciByLGEsbztyPWwoYXQoZSwocGkoKSxVQikpLDIxKSxhPTAsbz0wLHQuYT5uLmEmJihyLkhjKChZbSgpLEVNKSk/YT0odC5hLW4uYSkvMjpyLkhjKFRNKSYmKGE9dC5hLW4uYSkpLHQuYj5uLmImJihyLkhjKChZbSgpLFNNKSk/bz0odC5iLW4uYikvMjpyLkhjKENNKSYmKG89dC5iLW4uYikpLEh4ZShlLGEsbyl9ZnVuY3Rpb24gTHB0KGUsdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEIpe0RlKGUuQ2IsOTApJiZ6eShZbChsKGUuQ2IsOTApKSw0KSxGdShlLG4pLGUuZj1mLExFKGUsZyksREUoZSx3KSxBRShlLEUpLE1FKGUsQyksdTIoZSxMKSxJRShlLEIpLGMyKGUsITApLGkyKGUsYSksZS5aayhvKSxHbShlLHQpLHIhPW51bGwmJihlLmk9bnVsbCx4VihlLHIpKX1mdW5jdGlvbiB1OWUoZSx0LG4pe2lmKGU8MClyZXR1cm4gS0EoU3d0LGhlKGxlKHdhLDEpLFJuLDEsNSxbbixwdChlKV0pKTtpZih0PDApdGhyb3cgdWUobmV3IFluKF93dCt0KSk7cmV0dXJuIEtBKCIlcyAoJXMpIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiBzaXplICglcykiLGhlKGxlKHdhLDEpLFJuLDEsNSxbbixwdChlKSxwdCh0KV0pKX1mdW5jdGlvbiBsOWUoZSx0LG4scixhLG8pe3ZhciBmLGcsdyxFO2lmKGY9ci1uLGY8Nyl7VzRuKHQsbixyLG8pO3JldHVybn1pZih3PW4rYSxnPXIrYSxFPXcrKGctdz4+MSksbDllKHQsZSx3LEUsLWEsbyksbDllKHQsZSxFLGcsLWEsbyksby5OZShlW0UtMV0sZVtFXSk8PTApe2Zvcig7bjxyOylUcyh0LG4rKyxlW3crK10pO3JldHVybn1uNG4oZSx3LEUsZyx0LG4scixvKX1mdW5jdGlvbiBma24oZSx0KXt2YXIgbixyLGEsbyxmLGcsdztmb3Iodz10LmQsYT10LmIuaixnPW5ldyBHKHcpO2cuYTxnLmMuYy5sZW5ndGg7KWZvcihmPWwocmUoZyksMTA1KSxvPVdlKGloLHBnLDI4LGEuYy5sZW5ndGgsMTYsMSksa2koZS5iLGYsbyksbj1mLmEuZC5wLTEscj1mLmMuZC5wO24hPXI7KW49KG4rMSklYS5jLmxlbmd0aCxvW25dPSEwfWZ1bmN0aW9uIGRrbihlLHQpe2lmKHM3ZSgpLG5zKGUsKGZ0KCksS2kpKSYmbnModCxLaSkpcmV0dXJuIHJ1KGwoUShlLEtpKSwxNykuYSxsKFEodCxLaSksMTcpLmEpO3Rocm93IHVlKG5ldyBJOCgiVGhlIEJGIG1vZGVsIG9yZGVyIGxheWVyIGFzc2lnbmVyIHJlcXVpcmVzIGFsbCByZWFsIG5vZGVzIHRvIGhhdmUgYSBtb2RlbCBvcmRlci4iKSl9ZnVuY3Rpb24gZ2tuKGUsdCl7aWYoYTdlKCksbnMoZSwoZnQoKSxLaSkpJiZucyh0LEtpKSlyZXR1cm4gcnUobChRKGUsS2kpLDE3KS5hLGwoUSh0LEtpKSwxNykuYSk7dGhyb3cgdWUobmV3IEk4KCJUaGUgREYgbW9kZWwgb3JkZXIgbGF5ZXIgYXNzaWduZXIgcmVxdWlyZXMgYWxsIHJlYWwgbm9kZXMgdG8gaGF2ZSBhIG1vZGVsIG9yZGVyLiIpKX1mdW5jdGlvbiBwa24oZSx0KXtmb3IoZS5yPW5ldyB4TihlLnApLFooZS5yLGUpLEthKGUuci5qLGUuaiksQ2goZS5qKSx1aShlLmosdCksdWkoZS5yLmUsdCksd0goZSksd0goZS5yKTtlLmYuYy5sZW5ndGghPTA7KVRudChsKGp0KGUuZiwwKSwxMzIpKTtmb3IoO2Uuay5jLmxlbmd0aCE9MDspVG50KGwoanQoZS5rLDApLDEzMikpO3JldHVybiBlLnJ9ZnVuY3Rpb24gJHVlKGUsdCxuKXt2YXIgcixhLG87aWYoYT1NbihlLkRoKCksdCkscj10LWUuamkoKSxyPDApaWYoYSlpZihhLnJrKCkpbz1lLkloKGEpLG8+PTA/ZS5iaShvLG4pOiQ5ZShlLGEsbik7ZWxzZSB0aHJvdyB1ZShuZXcgWW4oT2IrYS54ZSgpK2tMKSk7ZWxzZSB0aHJvdyB1ZShuZXcgWW4oZjR0K3QrZDR0KSk7ZWxzZSB1ZihlLHIsYSxuKX1mdW5jdGlvbiBNcHQoZSl7dmFyIHQsbjtpZihlLmYpe2Zvcig7ZS5uPjA7KXtpZih0PWwoZS5rLlhiKGUubi0xKSw3Niksbj10LkxrKCksRGUobiwxMDIpJiZsKG4sMTkpLkJiJmV1JiYoIWUuZXx8bi5waygpIT1vQ3x8bi5MaigpIT0wKSYmdC5tZCgpIT1udWxsKXJldHVybiEwOy0tZS5ufXJldHVybiExfWVsc2UgcmV0dXJuIGUubj4wfWZ1bmN0aW9uIERwdChlKXt2YXIgdCxuLHIsYTtpZihuPWwoZSw1NCkuX2goKSxuKXRyeXtpZihyPW51bGwsdD1WRSgoaWIoKSxHZiksYm10KGE1bihuKSkpLHQmJihhPXQuYWkoKSxhJiYocj1hLkZsKG91bihuLmUpKSkpLHImJnIhPWUpcmV0dXJuIERwdChyKX1jYXRjaChvKXtpZihvPWJzKG8pLCFEZShvLDYzKSl0aHJvdyB1ZShvKX1yZXR1cm4gZX1mdW5jdGlvbiBia24oZSx0LG4pe3ZhciByLGEsbztuLlVnKCJSZW1vdmUgb3ZlcmxhcHMiLDEpLG4uZGgodCx5Q2UpLHI9bChhdCh0LChINSgpLFk2KSksMjcpLGUuZj1yLGUuYT1zdWUobChhdCh0LChTYigpLEZCKSksMzAwKSksYT1HZShhdCh0LChwaSgpLEV2KSkpLF9lKGUsKG5yKGEpLGEpKSxvPUh5KHIpLFJ2dChlLHQsbyxuKSxuLmRoKHQsT0cpfWZ1bmN0aW9uIG1rbihlKXt2YXIgdCxuLHI7aWYoUnQoQnQoYXQoZSwocGkoKSxLQikpKSkpe2ZvcihyPW5ldyBidCxuPW5ldyBocihkcihjcChlKS5hLktjKCksbmV3IGopKTtqcihuKTspdD1sKHhyKG4pLDc0KSxxdyh0KSYmUnQoQnQoYXQodCxPZ2UpKSkmJiRuKHIuYyx0KTtyZXR1cm4gcn1lbHNlIHJldHVybiBDbigpLENuKCksX299ZnVuY3Rpb24gSXB0KGUpe2lmKCFlKXJldHVybiBNSmUoKSxkNnQ7dmFyIHQ9ZS52YWx1ZU9mP2UudmFsdWVPZigpOmU7aWYodCE9PWUpe3ZhciBuPV8wZVt0eXBlb2YgdF07cmV0dXJuIG4/bih0KTpaN2UodHlwZW9mIHQpfWVsc2UgcmV0dXJuIGUgaW5zdGFuY2VvZiBBcnJheXx8ZSBpbnN0YW5jZW9mIGIuQXJyYXk/bmV3IFN6KGUpOm5ldyB3ayhlKX1mdW5jdGlvbiBPcHQoZSx0LG4pe3ZhciByLGEsbztzd2l0Y2gobz1lLm8scj1sKFFvKGUucCxuKSwyNTIpLGE9ci5pLGEuYj1uUChyKSxhLmE9dFAociksYS5iPWIuTWF0aC5tYXgoYS5iLG8uYSksYS5iPm8uYSYmIXQmJihhLmI9by5hKSxhLmM9LShhLmItby5hKS8yLG4uZyl7Y2FzZSAxOmEuZD0tYS5hO2JyZWFrO2Nhc2UgMzphLmQ9by5ifWhsZShyKSxmbGUocil9ZnVuY3Rpb24gTnB0KGUsdCxuKXt2YXIgcixhLG87c3dpdGNoKG89ZS5vLHI9bChRbyhlLnAsbiksMjUyKSxhPXIuaSxhLmI9blAociksYS5hPXRQKHIpLGEuYT1iLk1hdGgubWF4KGEuYSxvLmIpLGEuYT5vLmImJiF0JiYoYS5hPW8uYiksYS5kPS0oYS5hLW8uYikvMixuLmcpe2Nhc2UgNDphLmM9LWEuYjticmVhaztjYXNlIDI6YS5jPW8uYX1obGUociksZmxlKHIpfWZ1bmN0aW9uIHZrbihlLHQpe3ZhciBuLHIsYSxvLGY7aWYoIXQuZGMoKSl7aWYoYT1sKHQuWGIoMCksMTMxKSx0LmdjKCk9PTEpe2hidChlLGEsYSwxLDAsdCk7cmV0dXJufWZvcihuPTE7bjx0LmdjKCk7KShhLmp8fCFhLm8pJiYobz1UN24odCxuKSxvJiYocj1sKG8uYSwxNykuYSxmPWwoby5iLDEzMSksaGJ0KGUsYSxmLG4scix0KSxuPXIrMSxhPWYpKX19ZnVuY3Rpb24gd2tuKGUpe3ZhciB0LG4scixhLG8sZjtmb3IoZj1uZXcgT2woZS5kKSxWcyhmLG5ldyBpOCksdD0oT1UoKSxoZShsZSh1TGUsMSksaXQsMjc2LDAsW3cxZSxrMWUsdjFlLEMxZSx4MWUseTFlLFQxZSxFMWVdKSksbj0wLG89bmV3IEcoZik7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDEwNSkscj10W24ldC5sZW5ndGhdLHZFbihhLHIpLCsrbn1mdW5jdGlvbiB5a24oZSx0KXtoNigpO3ZhciBuLHIsYSxvO2lmKHQuYjwyKXJldHVybiExO2ZvcihvPVJyKHQsMCksbj1sKEJyKG8pLDgpLHI9bjtvLmIhPW8uZC5jOyl7aWYoYT1sKEJyKG8pLDgpLCEoZ0UoZSxyKSYmZ0UoZSxhKSkpcmV0dXJuITE7cj1hfXJldHVybiEhKGdFKGUscikmJmdFKGUsbikpfWZ1bmN0aW9uIGg5ZShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMO3JldHVybiBDPW51bGwsTD1lLGY9bnAoTCwieCIpLG49bmV3IFdYZSh0KSxKdm4obi5hLGYpLGc9bnAoTCwieSIpLHI9bmV3IFlYZSh0KSxadm4oci5hLGcpLHc9bnAoTCxVZmUpLGE9bmV3IFhYZSh0KSxld24oYS5hLHcpLEU9bnAoTCxWZmUpLG89bmV3IFFYZSh0KSxDPSh0d24oby5hLEUpLEUpLEN9ZnVuY3Rpb24genkoZSx0KXtWYnQoZSx0KSxlLmImMSYmKGUuYS5hPW51bGwpLGUuYiYyJiYoZS5hLmY9bnVsbCksZS5iJjQmJihlLmEuZz1udWxsLGUuYS5pPW51bGwpLGUuYiYxNiYmKGUuYS5kPW51bGwsZS5hLmU9bnVsbCksZS5iJjgmJihlLmEuYj1udWxsKSxlLmImMzImJihlLmEuaj1udWxsLGUuYS5jPW51bGwpfWZ1bmN0aW9uIHhrbihlLHQpe3ZhciBuLHIsYTtpZihhPTAsdC5sZW5ndGg+MCl0cnl7YT1PaCh0LGxvLElpKX1jYXRjaChvKXt0aHJvdyBvPWJzKG8pLERlKG8sMTMwKT8ocj1vLHVlKG5ldyBuVihyKSkpOnVlKG8pfXJldHVybiBuPSghZS5hJiYoZS5hPW5ldyBQaWUoZSkpLGUuYSksYTxuLmkmJmE+PTA/bChPZShuLGEpLDU4KTpudWxsfWZ1bmN0aW9uIGtrbihlLHQpe2lmKGU8MClyZXR1cm4gS0EoU3d0LGhlKGxlKHdhLDEpLFJuLDEsNSxbImluZGV4IixwdChlKV0pKTtpZih0PDApdGhyb3cgdWUobmV3IFluKF93dCt0KSk7cmV0dXJuIEtBKCIlcyAoJXMpIG11c3QgYmUgbGVzcyB0aGFuIHNpemUgKCVzKSIsaGUobGUod2EsMSksUm4sMSw1LFsiaW5kZXgiLHB0KGUpLHB0KHQpXSkpfWZ1bmN0aW9uIEVrbihlKXt2YXIgdCxuLHIsYSxvO2lmKGU9PW51bGwpcmV0dXJuIHVsO2ZvcihvPW5ldyBIbShDbywiWyIsIl0iKSxuPWUscj0wLGE9bi5sZW5ndGg7cjxhOysrcil0PW5bcl0sby5hP2hpKG8uYSxvLmIpOm8uYT1uZXcgVGgoby5kKSxOXyhvLmEsIiIrdCk7cmV0dXJuIG8uYT9vLmUubGVuZ3RoPT0wP28uYS5hOm8uYS5hKygiIitvLmUpOm8uY31mdW5jdGlvbiBUa24oZSl7dmFyIHQsbixyLGEsbztpZihlPT1udWxsKXJldHVybiB1bDtmb3Iobz1uZXcgSG0oQ28sIlsiLCJdIiksbj1lLHI9MCxhPW4ubGVuZ3RoO3I8YTsrK3IpdD1uW3JdLG8uYT9oaShvLmEsby5iKTpvLmE9bmV3IFRoKG8uZCksTl8oby5hLCIiK3QpO3JldHVybiBvLmE/by5lLmxlbmd0aD09MD9vLmEuYTpvLmEuYSsoIiIrby5lKTpvLmN9ZnVuY3Rpb24gQ2tuKGUpe3ZhciB0LG4scixhLG87aWYoZT09bnVsbClyZXR1cm4gdWw7Zm9yKG89bmV3IEhtKENvLCJbIiwiXSIpLG49ZSxyPTAsYT1uLmxlbmd0aDtyPGE7KytyKXQ9bltyXSxvLmE/aGkoby5hLG8uYik6by5hPW5ldyBUaChvLmQpLE5fKG8uYSwiIit0KTtyZXR1cm4gby5hP28uZS5sZW5ndGg9PTA/by5hLmE6by5hLmErKCIiK28uZSk6by5jfWZ1bmN0aW9uIFNrbihlKXt2YXIgdCxuLHIsYSxvO2lmKGU9PW51bGwpcmV0dXJuIHVsO2ZvcihvPW5ldyBIbShDbywiWyIsIl0iKSxuPWUscj0wLGE9bi5sZW5ndGg7cjxhOysrcil0PW5bcl0sby5hP2hpKG8uYSxvLmIpOm8uYT1uZXcgVGgoby5kKSxOXyhvLmEsIiIrdCk7cmV0dXJuIG8uYT9vLmUubGVuZ3RoPT0wP28uYS5hOm8uYS5hKygiIitvLmUpOm8uY31mdW5jdGlvbiBQcHQoZSx0KXt2YXIgbixyLGEsbyxmLGc7Zm9yKG49ZS5iLmMubGVuZ3RoLGE9anQoZS5iLHQpO3QqMisxPG4mJihyPShvPTIqdCsxLGY9bysxLGc9byxmPG4mJmUuYS5OZShqdChlLmIsZiksanQoZS5iLG8pKTwwJiYoZz1mKSxnKSwhKGUuYS5OZShhLGp0KGUuYixyKSk8MCkpOylyZihlLmIsdCxqdChlLmIscikpLHQ9cjtyZihlLmIsdCxhKX1mdW5jdGlvbiB6dWUoZSx0LG4pe3ZhciByLGE7cmV0dXJuIHI9bi5kLGE9bi5lLGUuZ1tyLmRdPD1lLmlbdC5kXSYmZS5pW3QuZF08PWUuaVtyLmRdJiZlLmdbYS5kXTw9ZS5pW3QuZF0mJmUuaVt0LmRdPD1lLmlbYS5kXT8hKGUuaVtyLmRdPGUuaVthLmRdKTplLmlbci5kXTxlLmlbYS5kXX1mdW5jdGlvbiBfa24oZSx0KXt2YXIgbjtpZihuPWwoUSh0LChOdCgpLEpMKSksMzIyKSxuIT1lKXRocm93IHVlKG5ldyBJOCgiVGhlIGhpZXJhcmNoeSBhd2FyZSBwcm9jZXNzb3IgIituKyIgaW4gY2hpbGQgbm9kZSAiK3QrIiBpcyBvbmx5IGFsbG93ZWQgaWYgdGhlIHJvb3Qgbm9kZSBzcGVjaWZpZXMgdGhlIHNhbWUgaGllcmFyY2hpY2FsIHByb2Nlc3Nvci4iKSl9ZnVuY3Rpb24gQWtuKGUsdCl7dmFyIG4scixhLG8sZjtmb3Iocj0oIXQucyYmKHQucz1uZXcgbnQoZGwsdCwyMSwxNykpLHQucyksbz1udWxsLGE9MCxmPXIuaTthPGY7KythKXN3aXRjaChuPWwoT2UocixhKSwxNzkpLGt3KGljKGUsbikpKXtjYXNlIDI6Y2FzZSAzOiFvJiYobz1uZXcgYnQpLCRuKG8uYyxuKX1yZXR1cm4gb3x8KENuKCksQ24oKSxfbyl9ZnVuY3Rpb24gQnB0KGUsdCxuKXt2YXIgcixhLG8sZixnLHc7Zm9yKHc9Z3Msbz1uZXcgRyhlYnQoZS5iKSk7by5hPG8uYy5jLmxlbmd0aDspZm9yKGE9bChyZShvKSwxNzcpLGc9bmV3IEcoZWJ0KHQuYikpO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwxNzcpLHI9UTNuKGEuYSxhLmIsZi5hLGYuYixuKSx3PWIuTWF0aC5taW4odyxyKTtyZXR1cm4gd31mdW5jdGlvbiBsYShlLHQpe2lmKCF0KXRocm93IHVlKG5ldyBTOCk7aWYoZS5qPXQsIWUuZClzd2l0Y2goZS5qLmcpe2Nhc2UgMTplLmEuYT1lLm8uYS8yLGUuYS5iPTA7YnJlYWs7Y2FzZSAyOmUuYS5hPWUuby5hLGUuYS5iPWUuby5iLzI7YnJlYWs7Y2FzZSAzOmUuYS5hPWUuby5hLzIsZS5hLmI9ZS5vLmI7YnJlYWs7Y2FzZSA0OmUuYS5hPTAsZS5hLmI9ZS5vLmIvMn19ZnVuY3Rpb24gTGtuKGUsdCl7dmFyIG4scixhO3JldHVybiBEZSh0LmcsMTApJiZsKHQuZywxMCkuaz09KFpuKCksVXMpP2dzOihhPWl4KHQpLGE/Yi5NYXRoLm1heCgwLGUuYi8yLS41KToobj1HNSh0KSxuPyhyPXplKEdlKFB5KG4sKE50KCksbTMpKSkpLGIuTWF0aC5tYXgoMCxyLzItLjUpKTpncykpfWZ1bmN0aW9uIE1rbihlLHQpe3ZhciBuLHIsYTtyZXR1cm4gRGUodC5nLDEwKSYmbCh0LmcsMTApLms9PShabigpLFVzKT9nczooYT1peCh0KSxhP2IuTWF0aC5tYXgoMCxlLmIvMi0uNSk6KG49RzUodCksbj8ocj16ZShHZShQeShuLChOdCgpLG0zKSkpKSxiLk1hdGgubWF4KDAsci8yLS41KSk6Z3MpKX1mdW5jdGlvbiBEa24oZSx0KXt1MCgpO3ZhciBuLHIsYSxvLGYsZztmb3Iobj1udWxsLGY9dC5LYygpO2YuT2IoKTspbz1sKGYuUGIoKSwxMzEpLCFvLm8mJihyPWhobihvLmEpLGE9bWRuKG8uYSksZz1uZXcgUUEocixhLG51bGwsbChvLmQuYS5lYygpLktjKCkuUGIoKSwxOCkpLHZ0KGcuYyxvLmEpLCRuKGUuYyxnKSxuJiZ2dChuLmQsZyksbj1nKX1mdW5jdGlvbiBJa24oZSl7dmFyIHQsbixyLGEsbyxmO2ZvcihmPVRBKGUuZCxlLmUpLG89Zi5LYygpO28uT2IoKTspZm9yKGE9bChvLlBiKCksMTIpLHI9ZS5lPT0oQ3QoKSxlcik/YS5lOmEuZyxuPW5ldyBHKHIpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwxOCksIURvKHQpJiZ0LmMuaS5jIT10LmQuaS5jJiYoSTluKGUsdCksKytlLmYsKytlLmMpfWZ1bmN0aW9uIEZwdChlLHQpe3ZhciBuLHI7aWYodC5kYygpKXJldHVybiBDbigpLENuKCksX287Zm9yKHI9bmV3IGJ0LHZ0KHIscHQobG8pKSxuPTE7bjxlLmY7KytuKWUuYT09bnVsbCYmSGJ0KGUpLGUuYVtuXSYmdnQocixwdChuKSk7cmV0dXJuIHIuYy5sZW5ndGg9PTE/KENuKCksQ24oKSxfbyk6KHZ0KHIscHQoSWkpKSxxQW4odCxyKSl9ZnVuY3Rpb24gT2tuKGUsdCl7dmFyIG4scixhLG8sZixnLHc7Zj10LmMuaS5rIT0oWm4oKSxQcyksdz1mP3QuZDp0LmMsbj1xN24odCx3KS5pLGE9bChjcihlLmssdyksMTI1KSxyPWUuaVtuLnBdLmEsbml0KHcuaSk8KG4uYz9nYyhuLmMuYSxuLDApOi0xKT8obz1hLGc9cik6KG89cixnPWEpLHAwKHMwKGkwKGEwKHIwKG5ldyBfZiwwKSw0KSxvKSxnKSl9ZnVuY3Rpb24gTmtuKGUsdCxuKXt2YXIgcixhLG8sZixnLHc7aWYobilmb3IoYT1uLmEubGVuZ3RoLHI9bmV3IERtKGEpLGc9KHIuYi1yLmEpKnIuYzwwPyhzYigpLHRtKTpuZXcgY2Iocik7Zy5PYigpOylmPWwoZy5QYigpLDE3KSx3PXB1ZShlLHh4KF95KG4sZi5hKSkpLHcmJihvPSghdC5iJiYodC5iPW5ldyBMbihfcix0LDQsNykpLHQuYikscXIobyx3KSl9ZnVuY3Rpb24gUGtuKGUsdCxuKXt2YXIgcixhLG8sZixnLHc7aWYobilmb3IoYT1uLmEubGVuZ3RoLHI9bmV3IERtKGEpLGc9KHIuYi1yLmEpKnIuYzwwPyhzYigpLHRtKTpuZXcgY2Iocik7Zy5PYigpOylmPWwoZy5QYigpLDE3KSx3PXB1ZShlLHh4KF95KG4sZi5hKSkpLHcmJihvPSghdC5jJiYodC5jPW5ldyBMbihfcix0LDUsOCkpLHQuYykscXIobyx3KSl9ZnVuY3Rpb24gZVAoZSx0LG4pe3ZhciByLGE7cj10LmEmZS5mLHQuYj1lLmJbcl0sZS5iW3JdPXQsYT10LmYmZS5mLHQuZD1lLmNbYV0sZS5jW2FdPXQsbj8odC5lPW4uZSx0LmU/dC5lLmM9dDplLmE9dCx0LmM9bi5jLHQuYz90LmMuZT10OmUuZT10KToodC5lPWUuZSx0LmM9bnVsbCxlLmU/ZS5lLmM9dDplLmE9dCxlLmU9dCksKytlLmksKytlLmd9ZnVuY3Rpb24gUnB0KGUpe3ZhciB0LG4scjtpZih0PWUuUGIoKSwhZS5PYigpKXJldHVybiB0O2ZvcihyPXd1KGhpKG5ldyB0YiwiZXhwZWN0ZWQgb25lIGVsZW1lbnQgYnV0IHdhczogPCIpLHQpLG49MDtuPDQmJmUuT2IoKTtuKyspd3UoKHIuYSs9Q28sciksZS5QYigpKTt0aHJvdyBlLk9iKCkmJihyLmErPSIsIC4uLiIpLHIuYSs9Ij4iLHVlKG5ldyBZbihyLmEpKX1mdW5jdGlvbiBCa24oZSl7dmFyIHQsbjtyZXR1cm4gbj0tZS5hLHQ9aGUobGUoa2YsMSksQWQsMjgsMTUsWzQzLDQ4LDQ4LDQ4LDQ4XSksbjwwJiYodFswXT00NSxuPS1uKSx0WzFdPXRbMV0rKChuLzYwfDApLzEwfDApJlpzLHRbMl09dFsyXSsobi82MHwwKSUxMCZacyx0WzNdPXRbM10rKG4lNjAvMTB8MCkmWnMsdFs0XT10WzRdK24lMTAmWnMsSWYodCwwLHQubGVuZ3RoKX1mdW5jdGlvbiBmOWUoZSl7dmFyIHQsbixyLGE7Zm9yKGUuZz1uZXcgTEEobChYcihPbyksMjk3KSkscj0wLG49KEN0KCksUW4pLHQ9MDt0PGUuai5jLmxlbmd0aDt0KyspYT1sKGp0KGUuaix0KSwxMiksYS5qIT1uJiYociE9dCYmUTgoZS5nLG4sbmV3IGNhKHB0KHIpLHB0KHQpKSksbj1hLmoscj10KTtROChlLmcsbixuZXcgY2EocHQocikscHQodCkpKX1mdW5jdGlvbiBGa24oZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKHI9MCxuPW5ldyBHKGUuYik7bi5hPG4uYy5jLmxlbmd0aDspZm9yKHQ9bChyZShuKSwzMCksbz1uZXcgRyh0LmEpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihhPWwocmUobyksMTApLGEucD1yKyssZz1uZXcgRyhhLmopO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwxMiksZi5wPXIrK31mdW5jdGlvbiBkOWUoZSx0KXt2YXIgbixyLGE7aWYoYT1nNigoRWwoKSxpbyksZS5EaCgpLHQpLGEpRm8oKSxsKGEsNjkpLnhrKCl8fChhPXJ4KGljKGlvLGEpKSkscj0obj1lLkloKGEpLGwobj49MD9lLkxoKG4sITAsITApOkh3KGUsYSwhMCksMTYwKSksbChyLDIyMCkuWmwodCk7ZWxzZSB0aHJvdyB1ZShuZXcgWW4oT2IrdC54ZSgpK2tMKSl9ZnVuY3Rpb24gZzllKGUpe3ZhciB0LG47cmV0dXJuIGU+LTB4ODAwMDAwMDAwMDAwJiZlPDB4ODAwMDAwMDAwMDAwP2U9PTA/MDoodD1lPDAsdCYmKGU9LWUpLG49dWEoYi5NYXRoLmZsb29yKGIuTWF0aC5sb2coZSkvLjY5MzE0NzE4MDU1OTk0NTMpKSwoIXR8fGUhPWIuTWF0aC5wb3coMixuKSkmJisrbixuKTpRZnQoWmMoZSkpfWZ1bmN0aW9uIFJrbihlKXt2YXIgdCxuLHIsYSxvLGYsZztmb3Iobz1uZXcgYmQsbj1uZXcgRyhlKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMTMyKSxmPXQuYSxnPXQuYiwhKG8uYS5fYihmKXx8by5hLl9iKGcpKSYmKGE9ZixyPWcsZi5lLmIrZi5qLmI+MiYmZy5lLmIrZy5qLmI8PTImJihhPWcscj1mKSxvLmEuemMoYSxvKSxhLnE9cik7cmV0dXJuIG99ZnVuY3Rpb24gamtuKGUsdCxuKXtuLlVnKCJFYWRlcyByYWRpYWwiLDEpLG4uZGgodCxPRyksZS5kPWwoYXQodCwoSDUoKSxZNikpLDI3KSxlLmM9emUoR2UoYXQodCwoU2IoKSxIVykpKSksZS5lPXN1ZShsKGF0KHQsRkIpLDMwMCkpLGUuYT1nNW4obChhdCh0LGpJZSksNDM0KSksZS5iPU44bihsKGF0KHQsUEllKSwzNTQpKSxiOG4oZSksbi5kaCh0LE9HKX1mdW5jdGlvbiAka24oZSx0KXtpZih0LlVnKCJUYXJnZXQgV2lkdGggU2V0dGVyIiwxKSxQMShlLCh6MSgpLGZnZSkpKUhpKGUsKHVnKCksVDQpLEdlKGF0KGUsZmdlKSkpO2Vsc2UgdGhyb3cgdWUobmV3IFZwKCJBIHRhcmdldCB3aWR0aCBoYXMgdG8gYmUgc2V0IGlmIHRoZSBUYXJnZXRXaWR0aFdpZHRoQXBwcm94aW1hdG9yIHNob3VsZCBiZSB1c2VkLiIpKTt0LlZnKCl9ZnVuY3Rpb24ganB0KGUsdCl7dmFyIG4scixhO3JldHVybiByPW5ldyBvcChlKSxwYyhyLHQpLHJ0KHIsKGZ0KCksYVcpLHQpLHJ0KHIsKE50KCksTXMpLChSYSgpLE11KSkscnQocixSZCwob2coKSx0WSkpLHgociwoWm4oKSxVcykpLG49bmV3IGd1LE1jKG4sciksbGEobiwoQ3QoKSxlcikpLGE9bmV3IGd1LE1jKGEsciksbGEoYSxhcikscn1mdW5jdGlvbiAkcHQoZSl7c3dpdGNoKGUuZyl7Y2FzZSAwOnJldHVybiBuZXcgV2llKChJdygpLERCKSk7Y2FzZSAxOnJldHVybiBuZXcgUXJlO2Nhc2UgMjpyZXR1cm4gbmV3IEpyZTtkZWZhdWx0OnRocm93IHVlKG5ldyBZbigiTm8gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGUgY3Jvc3NpbmcgbWluaW1pemVyICIrKGUuZiE9bnVsbD9lLmY6IiIrZS5nKSkpfX1mdW5jdGlvbiB6cHQoZSx0KXt2YXIgbixyLGEsbyxmO2ZvcihlLmNbdC5wXT0hMCx2dChlLmEsdCksZj1uZXcgRyh0LmopO2YuYTxmLmMuYy5sZW5ndGg7KWZvcihvPWwocmUoZiksMTIpLHI9bmV3IE4xKG8uYik7TGMoci5hKXx8TGMoci5iKTspbj1sKExjKHIuYSk/cmUoci5hKTpyZShyLmIpLDE4KSxhPSQ1bihvLG4pLmksZS5jW2EucF18fHpwdChlLGEpfWZ1bmN0aW9uIHFwdChlKXt2YXIgdCxuLHIsYSxvLGYsZztmb3IoZj0wLG49bmV3IG9yKCghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKSk7bi5lIT1uLmkuZ2MoKTspdD1sKGdyKG4pLDI3KSxnPXQuZyxhPXQuZixyPWIuTWF0aC5zcXJ0KGcqZythKmEpLGY9Yi5NYXRoLm1heChyLGYpLG89cXB0KHQpLGY9Yi5NYXRoLm1heChvLGYpO3JldHVybiBmfWZ1bmN0aW9uIFJsKCl7Umw9VSxZYj1uZXcgRF8oIk9VVFNJREUiLDApLHZwPW5ldyBEXygiSU5TSURFIiwxKSxuRj1uZXcgRF8oIk5FWFRfVE9fUE9SVF9JRl9QT1NTSUJMRSIsMiksUE09bmV3IERfKCJBTFdBWVNfU0FNRV9TSURFIiwzKSxOTT1uZXcgRF8oIkFMV0FZU19PVEhFUl9TQU1FX1NJREUiLDQpLGE5PW5ldyBEXygiU1BBQ0VfRUZGSUNJRU5UIiw1KX1mdW5jdGlvbiBIcHQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdztyZXR1cm4gcj1IYm4oZSwoYT0ocmIoKSxvPW5ldyBhXyxvKSxuJiZMVShhLG4pLGEpLHQpLGZFKHIsWWcodCxQZCkpLG1VKHQsciksZVRuKHQsciksaDllKHQsciksZj10LGc9QXcoZiwicG9ydHMiKSx3PW5ldyBTdHQoZSxyKSxSVG4ody5hLHcuYixnKSx3Y2UoZSx0LHIpLEczbihlLHQscikscn1mdW5jdGlvbiB6a24oZSl7dmFyIHQsbjtyZXR1cm4gbj0tZS5hLHQ9aGUobGUoa2YsMSksQWQsMjgsMTUsWzQzLDQ4LDQ4LDU4LDQ4LDQ4XSksbjwwJiYodFswXT00NSxuPS1uKSx0WzFdPXRbMV0rKChuLzYwfDApLzEwfDApJlpzLHRbMl09dFsyXSsobi82MHwwKSUxMCZacyx0WzRdPXRbNF0rKG4lNjAvMTB8MCkmWnMsdFs1XT10WzVdK24lMTAmWnMsSWYodCwwLHQubGVuZ3RoKX1mdW5jdGlvbiBxa24oZSl7dmFyIHQ7cmV0dXJuIHQ9aGUobGUoa2YsMSksQWQsMjgsMTUsWzcxLDc3LDg0LDQ1LDQ4LDQ4LDU4LDQ4LDQ4XSksZTw9MCYmKHRbM109NDMsZT0tZSksdFs0XT10WzRdKygoZS82MHwwKS8xMHwwKSZacyx0WzVdPXRbNV0rKGUvNjB8MCklMTAmWnMsdFs3XT10WzddKyhlJTYwLzEwfDApJlpzLHRbOF09dFs4XStlJTEwJlpzLElmKHQsMCx0Lmxlbmd0aCl9ZnVuY3Rpb24gSGtuKGUpe3ZhciB0LG4scixhLG87aWYoZT09bnVsbClyZXR1cm4gdWw7Zm9yKG89bmV3IEhtKENvLCJbIiwiXSIpLG49ZSxyPTAsYT1uLmxlbmd0aDtyPGE7KytyKXQ9bltyXSxvLmE/aGkoby5hLG8uYik6by5hPW5ldyBUaChvLmQpLE5fKG8uYSwiIitZXyh0KSk7cmV0dXJuIG8uYT9vLmUubGVuZ3RoPT0wP28uYS5hOm8uYS5hKygiIitvLmUpOm8uY31mdW5jdGlvbiBwOWUoZSx0KXt2YXIgbixyLGE7Zm9yKGE9SWkscj1uZXcgRyhaNSh0KSk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDIxOCksbi5mJiYhZS5jW24uY10mJihlLmNbbi5jXT0hMCxhPWIuTWF0aC5taW4oYSxwOWUoZSxIVihuLHQpKSkpO3JldHVybiBlLmlbdC5kXT1lLmosZS5nW3QuZF09Yi5NYXRoLm1pbihhLGUuaisrKSxlLmdbdC5kXX1mdW5jdGlvbiBWcHQoZSx0KXt2YXIgbixyLGE7Zm9yKGE9bChsKCRpKGUucix0KSwyMSksODcpLktjKCk7YS5PYigpOylyPWwoYS5QYigpLDExNyksci5lLmI9KG49ci5iLG4ucGYoKHBpKCkscmgpKT9uLmFnKCk9PShDdCgpLFFuKT8tbi5NZigpLmItemUoR2Uobi5vZihyaCkpKTp6ZShHZShuLm9mKHJoKSkpOm4uYWcoKT09KEN0KCksUW4pPy1uLk1mKCkuYjowKX1mdW5jdGlvbiBWa24oZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKG49ZHllKGUuZSksbz1tZCh6XyhKYShmeWUoZS5lKSksZS5kKmUuYSxlLmMqZS5iKSwtLjUpLHQ9bi5hLW8uYSxhPW4uYi1vLmIsZz0wO2c8ZS5jO2crKyl7Zm9yKHI9dCxmPTA7ZjxlLmQ7ZisrKWk1bihlLmUsbmV3IGVmKHIsYSxlLmEsZS5iKSkmJkZVKGUsZixnLCExLCEwKSxyKz1lLmE7YSs9ZS5ifX1mdW5jdGlvbiBiOWUoZSl7dmFyIHQsbixyLGEsbzt0PWUuYSxuPWUuYixhPWUuYyxyPW5ldyBsdChuLmUuYStuLmYuYS8yLG4uZS5iK24uZi5iLzIpLG89bmV3IGx0KGEuZS5hK2EuZi5hLzIsYS5lLmIrYS5mLmIvMiksQ3ModCxyLHQuYSx0LmEuYSksQ3ModCxvLHQuYy5iLHQuYyksZXB0KHIsbChmZih0LDEpLDgpLGUuYi5mKSxlcHQobyxsKGZmKHQsdC5iLTIpLDgpLGUuYy5mKX1mdW5jdGlvbiB4eChlKXt2YXIgdCxuO2lmKG49ITEsRGUoZSwyMTEpKXJldHVybiBuPSEwLGwoZSwyMTEpLmE7aWYoIW4mJkRlKGUsMjYzKSYmKHQ9bChlLDI2MykuYSUxPT0wLHQpKXJldHVybiBuPSEwLHB0KF9sbihsKGUsMjYzKS5hKSk7dGhyb3cgdWUobmV3IGRkKCJJZCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIGludGVnZXI6ICciK2UrIicuIikpfWZ1bmN0aW9uIFVrbihlLHQpe3ZhciBuLHIsYSxvLGYsZztmb3Iobz1udWxsLGE9bmV3IElzdCgoIWUuYSYmKGUuYT1uZXcgUGllKGUpKSxlLmEpKTt4OWUoYSk7KWlmKG49bChDVShhKSw1OCkscj0oZj1uLkRoKCksZz0oZDYoZiksZi5vKSwhZ3x8IW4uWGgoZyk/bnVsbDp1NGUoZ2NlKGcpLG4uTWgoZykpKSxyIT1udWxsJiZ2bihyLHQpKXtvPW47YnJlYWt9cmV0dXJuIG99ZnVuY3Rpb24gVXB0KGUsdCxuKXt2YXIgcixhLG8sZixnO2lmKE1oKG4sIm9jY3VycmVuY2VzIiksbj09MClyZXR1cm4gZz1sKE95KGV4KGUuYSksdCksMTYpLGc/Zy5nYygpOjA7aWYoZj1sKE95KGV4KGUuYSksdCksMTYpLCFmKXJldHVybiAwO2lmKG89Zi5nYygpLG4+PW8pZi4kYigpO2Vsc2UgZm9yKGE9Zi5LYygpLHI9MDtyPG47cisrKWEuUGIoKSxhLlFiKCk7cmV0dXJuIG99ZnVuY3Rpb24gR2tuKGUsdCxuKXt2YXIgcixhLG8sZjtyZXR1cm4gTWgobiwib2xkQ291bnQiKSxNaCgwLCJuZXdDb3VudCIpLHI9bChPeShleChlLmEpLHQpLDE2KSwocj9yLmdjKCk6MCk9PW4/KE1oKDAsImNvdW50IiksYT0obz1sKE95KGV4KGUuYSksdCksMTYpLG8/by5nYygpOjApLGY9LWEsZj4wP1p3ZSgpOmY8MCYmVXB0KGUsdCwtZiksITApOiExfWZ1bmN0aW9uIHRQKGUpe3ZhciB0LG4scixhLG8sZixnO2lmKGc9MCxlLmI9PTApe2ZvcihmPV9kdChlLCEwKSx0PTAscj1mLGE9MCxvPXIubGVuZ3RoO2E8bzsrK2Epbj1yW2FdLG4+MCYmKGcrPW4sKyt0KTt0PjEmJihnKz1lLmMqKHQtMSkpfWVsc2UgZz1xSmUoY2NlKHh5KEZpKGM1ZShlLmEpLG5ldyBqYSksbmV3IE91KSkpO3JldHVybiBnPjA/ZytlLm4uZCtlLm4uYTowfWZ1bmN0aW9uIG5QKGUpe3ZhciB0LG4scixhLG8sZixnO2lmKGc9MCxlLmI9PTApZz1xSmUoY2NlKHh5KEZpKGM1ZShlLmEpLG5ldyBYYyksbmV3IEJjKSkpO2Vsc2V7Zm9yKGY9QWR0KGUsITApLHQ9MCxyPWYsYT0wLG89ci5sZW5ndGg7YTxvOysrYSluPXJbYV0sbj4wJiYoZys9biwrK3QpO3Q+MSYmKGcrPWUuYyoodC0xKSl9cmV0dXJuIGc+MD9nK2Uubi5iK2Uubi5jOjB9ZnVuY3Rpb24gS2tuKGUpe3ZhciB0LG47aWYoZS5jLmxlbmd0aCE9Mil0aHJvdyB1ZShuZXcgbmMoIk9yZGVyIG9ubHkgYWxsb3dlZCBmb3IgdHdvIHBhdGhzLiIpKTt0PShTbigwLGUuYy5sZW5ndGgpLGwoZS5jWzBdLDE4KSksbj0oU24oMSxlLmMubGVuZ3RoKSxsKGUuY1sxXSwxOCkpLHQuZC5pIT1uLmMuaSYmKGUuYy5sZW5ndGg9MCwkbihlLmMsbiksJG4oZS5jLHQpKX1mdW5jdGlvbiBHcHQoZSx0LG4pe3ZhciByO2ZvcihGNShuLHQuZyx0LmYpLFFoKG4sdC5pLHQuaikscj0wO3I8KCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpLmk7cisrKUdwdChlLGwoT2UoKCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpLHIpLDI3KSxsKE9lKCghbi5hJiYobi5hPW5ldyBudChBaSxuLDEwLDExKSksbi5hKSxyKSwyNykpfWZ1bmN0aW9uIFdrbihlLHQpe3ZhciBuLHIsYSxvO2ZvcihvPWwoUW8oZS5iLHQpLDEyNyksbj1vLmEsYT1sKGwoJGkoZS5yLHQpLDIxKSw4NykuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMTE3KSxyLmMmJihuLmE9Yi5NYXRoLm1heChuLmEsajRlKHIuYykpKTtpZihuLmE+MClzd2l0Y2godC5nKXtjYXNlIDI6by5uLmM9ZS5zO2JyZWFrO2Nhc2UgNDpvLm4uYj1lLnN9fWZ1bmN0aW9uIFlrbihlLHQpe3ZhciBuLHIsYTtyZXR1cm4gbj1sKFEodCwoYjAoKSxxeCkpLDE3KS5hLWwoUShlLHF4KSwxNykuYSxuPT0wPyhyPW1hKEphKGwoUShlLChiYigpLGhCKSksOCkpLGwoUShlLCRMKSw4KSksYT1tYShKYShsKFEodCxoQiksOCkpLGwoUSh0LCRMKSw4KSksWWkoci5hKnIuYixhLmEqYS5iKSk6bn1mdW5jdGlvbiBYa24oZSx0KXt2YXIgbixyLGE7cmV0dXJuIG49bChRKHQsKEhjKCksUlcpKSwxNykuYS1sKFEoZSxSVyksMTcpLmEsbj09MD8ocj1tYShKYShsKFEoZSwoUWkoKSxOQikpLDgpKSxsKFEoZSxRVCksOCkpLGE9bWEoSmEobChRKHQsTkIpLDgpKSxsKFEodCxRVCksOCkpLFlpKHIuYSpyLmIsYS5hKmEuYikpOm59ZnVuY3Rpb24gS3B0KGUpe3ZhciB0LG47cmV0dXJuIG49bmV3IHRiLG4uYSs9ImVfIix0PUgzbihlKSx0IT1udWxsJiYobi5hKz0iIit0KSxlLmMmJmUuZCYmKGhpKChuLmErPSIgIixuKSxmVShlLmMpKSxoaSh3dSgobi5hKz0iWyIsbiksZS5jLmkpLCJdIiksaGkoKG4uYSs9UGhlLG4pLGZVKGUuZCkpLGhpKHd1KChuLmErPSJbIixuKSxlLmQuaSksIl0iKSksbi5hfWZ1bmN0aW9uIFdwdChlKXtzd2l0Y2goZS5nKXtjYXNlIDA6cmV0dXJuIG5ldyBhaWU7Y2FzZSAxOnJldHVybiBuZXcgZGs7Y2FzZSAyOnJldHVybiBuZXcgc2llO2Nhc2UgMzpyZXR1cm4gbmV3IGlpZTtkZWZhdWx0OnRocm93IHVlKG5ldyBZbigiTm8gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGUgbGF5b3V0IHBoYXNlICIrKGUuZiE9bnVsbD9lLmY6IiIrZS5nKSkpfX1mdW5jdGlvbiBtOWUoZSx0LG4scixhKXt2YXIgbztzd2l0Y2gobz0wLGEuZyl7Y2FzZSAxOm89Yi5NYXRoLm1heCgwLHQuYitlLmItKG4uYityKSk7YnJlYWs7Y2FzZSAzOm89Yi5NYXRoLm1heCgwLC1lLmItcik7YnJlYWs7Y2FzZSAyOm89Yi5NYXRoLm1heCgwLC1lLmEtcik7YnJlYWs7Y2FzZSA0Om89Yi5NYXRoLm1heCgwLHQuYStlLmEtKG4uYStyKSl9cmV0dXJuIG99ZnVuY3Rpb24gUWtuKGUsdCxuKXt2YXIgcixhLG8sZixnO2lmKG4pZm9yKGE9bi5hLmxlbmd0aCxyPW5ldyBEbShhKSxnPShyLmItci5hKSpyLmM8MD8oc2IoKSx0bSk6bmV3IGNiKHIpO2cuT2IoKTspZj1sKGcuUGIoKSwxNyksbz1KayhuLGYuYSksaFNlIGluIG8uYXx8WWZlIGluIG8uYT9oX24oZSxvLHQpOk1JbihlLG8sdCksTGhuKGwoY3IoZS5iLE5FKG8pKSw3NCkpfWZ1bmN0aW9uIHY5ZShlKXt2YXIgdCxuO3N3aXRjaChlLmIpe2Nhc2UtMTpyZXR1cm4hMDtjYXNlIDA6cmV0dXJuIG49ZS50LG4+MXx8bj09LTE/KGUuYj0tMSwhMCk6KHQ9T2YoZSksdCYmKEZvKCksdC5saygpPT1nNXQpPyhlLmI9LTEsITApOihlLmI9MSwhMSkpO2RlZmF1bHQ6Y2FzZSAxOnJldHVybiExfX1mdW5jdGlvbiB3OWUoZSx0KXt2YXIgbixyLGEsbztpZihMaShlKSxlLmMhPTB8fGUuYSE9MTIzKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxCNHQpKSkpO2lmKG89dD09MTEyLHI9ZS5kLG49TmsoZS5pLDEyNSxyKSxuPDApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLEY0dCkpKSk7cmV0dXJuIGE9dGYoZS5pLHIsbiksZS5kPW4rMSx2bHQoYSxvLChlLmUmNTEyKT09NTEyKX1mdW5jdGlvbiBZcHQoZSl7dmFyIHQsbixyLGEsbyxmLGc7aWYocj1lLmEuYy5sZW5ndGgscj4wKWZvcihmPWUuYy5kLGc9ZS5kLmQsYT1tZChtYShuZXcgbHQoZy5hLGcuYiksZiksMS8ocisxKSksbz1uZXcgbHQoZi5hLGYuYiksbj1uZXcgRyhlLmEpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwyNTApLHQuZC5hPW8uYSthLmEsdC5kLmI9by5iK2EuYixPaShvLGEpfWZ1bmN0aW9uIEprbihlLHQpe3ZhciBuLHIsYTtpZighdCllY2UoZSxudWxsKSxsRShlLG51bGwpO2Vsc2UgaWYodC5pJjQpZm9yKHI9IltdIixuPXQuYzs7bj1uLmMpe2lmKCEobi5pJjQpKXthPVF3ZSgoR2cobiksbi5vK3IpKSxlY2UoZSxhKSxsRShlLGEpO2JyZWFrfXIrPSJbXSJ9ZWxzZSBhPVF3ZSgoR2codCksdC5vKSksZWNlKGUsYSksbEUoZSxhKTtlLmhsKHQpfWZ1bmN0aW9uIHpBKGUsdCxuLHIsYSl7dmFyIG8sZixnLHc7cmV0dXJuIHc9Y2FlKGUsbChhLDU4KSkscWUodykhPT1xZShhKT8oZz1sKGUuZ1tuXSw3Niksbz1zZyh0LHcpLFJfKGUsbixBdWUoZSxuLG8pKSxoaChlLmUpJiYoZj1kYihlLDksby5MaygpLGEsdyxyLCExKSxNeGUoZixuZXcgWmcoZS5lLDksZS5jLGcsbyxyLCExKSkscW9lKGYpKSx3KTphfWZ1bmN0aW9uIFprbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3O2ZvcihyPWwoJGkoZS5jLHQpLDE1KSxhPWwoJGkoZS5jLG4pLDE1KSxvPXIuZmQoci5nYygpKSxmPWEuZmQoYS5nYygpKTtvLlNiKCkmJmYuU2IoKTspaWYoZz1sKG8uVWIoKSwxNyksdz1sKGYuVWIoKSwxNyksZyE9dylyZXR1cm4gcnUoZy5hLHcuYSk7cmV0dXJuIW8uT2IoKSYmIWYuT2IoKT8wOm8uT2IoKT8xOi0xfWZ1bmN0aW9uIGVFbihlKXt2YXIgdCxuLHIsYSxvLGYsZztmb3IoZz1lZyhlLmMubGVuZ3RoKSxhPW5ldyBHKGUpO2EuYTxhLmMuYy5sZW5ndGg7KXtmb3Iocj1sKHJlKGEpLDEwKSxmPW5ldyBLcyxvPXFzKHIpLG49bmV3IGhyKGRyKG8uYS5LYygpLG5ldyBqKSk7anIobik7KXQ9bCh4cihuKSwxOCksdC5jLmk9PXQuZC5pfHxuYShmLHQuZC5pKTskbihnLmMsZil9cmV0dXJuIGd9ZnVuY3Rpb24gWHB0KGUsdCl7dmFyIG4scixhO3RyeXtyZXR1cm4gYT1mYm4oZS5hLHQpLGF9Y2F0Y2gobyl7aWYobz1icyhvKSxEZShvLDMzKSl7dHJ5e2lmKHI9T2godCxsbyxJaSksbj1LMChlLmEpLHI+PTAmJnI8bi5sZW5ndGgpcmV0dXJuIG5bcl19Y2F0Y2goZil7aWYoZj1icyhmKSwhRGUoZiwxMzApKXRocm93IHVlKGYpfXJldHVybiBudWxsfWVsc2UgdGhyb3cgdWUobyl9fWZ1bmN0aW9uIHF1ZShlLHQpe3ZhciBuLHIsYTtpZihhPWc2KChFbCgpLGlvKSxlLkRoKCksdCksYSlyZXR1cm4gRm8oKSxsKGEsNjkpLnhrKCl8fChhPXJ4KGljKGlvLGEpKSkscj0obj1lLkloKGEpLGwobj49MD9lLkxoKG4sITAsITApOkh3KGUsYSwhMCksMTYwKSksbChyLDIyMCkuV2wodCk7dGhyb3cgdWUobmV3IFluKE9iK3QueGUoKSskZmUpKX1mdW5jdGlvbiB0RW4oKXt4M2UoKTt2YXIgZTtyZXR1cm4gSl90P2woVkUoKGliKCksR2YpLEZmKSwyMDM4KTood2kodXYsbmV3IE9JKSxYTW4oKSxlPWwoRGUoeHUoKGliKCksR2YpLEZmKSw1NjApP3h1KEdmLEZmKTpuZXcgZmF0LDU2MCksSl90PSEwLFFJbihlKSxpT24oZSksa2koKHkzZSgpLF9QZSksZSxuZXcgazEpLHJjKEdmLEZmLGUpLGUpfWZ1bmN0aW9uIG5FbihlLHQpe3ZhciBuLHIsYSxvO2Uuaj0tMSxoaChlLmUpPyhuPWUuaSxvPWUuaSE9MCx0TihlLHQpLHI9bmV3IFpnKGUuZSwzLGUuYyxudWxsLHQsbixvKSxhPXQuemwoZS5lLGUuYyxudWxsKSxhPUxndChlLHQsYSksYT8oYS5uaihyKSxhLm9qKCkpOk5pKGUuZSxyKSk6KHROKGUsdCksYT10LnpsKGUuZSxlLmMsbnVsbCksYSYmYS5vaigpKX1mdW5jdGlvbiBrVShlLHQpe3ZhciBuLHIsYTtpZihhPTAscj10WzBdLHI+PWUubGVuZ3RoKXJldHVybi0xO2ZvcihuPShYbihyLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQocikpO24+PTQ4JiZuPD01NyYmKGE9YSoxMCsobi00OCksKytyLCEocj49ZS5sZW5ndGgpKTspbj0oWG4ocixlLmxlbmd0aCksZS5jaGFyQ29kZUF0KHIpKTtyZXR1cm4gcj50WzBdP3RbMF09cjphPS0xLGF9ZnVuY3Rpb24gckVuKGUpe3ZhciB0LG4scixhLG87cmV0dXJuIGE9bChlLmEsMTcpLmEsbz1sKGUuYiwxNykuYSxuPWEscj1vLHQ9Yi5NYXRoLm1heChiLk1hdGguYWJzKGEpLGIuTWF0aC5hYnMobykpLGE8PTAmJmE9PW8/KG49MCxyPW8tMSk6YT09LXQmJm8hPXQ/KG49byxyPWEsbz49MCYmKytuKToobj0tbyxyPWEpLG5ldyBjYShwdChuKSxwdChyKSl9ZnVuY3Rpb24gaUVuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRTtmb3IoYT0wO2E8dC5vO2ErKylmb3Iobz1hLXQuaituLGY9MDtmPHQucDtmKyspaWYoZz1mLXQuaytyLHc9byxFPWcsdys9ZS5qLEUrPWUuayx3Pj0wJiZFPj0wJiZ3PGUubyYmRTxlLnAmJighTmR0KHQsYSxmKSYmRGR0KGUsbyxnKXx8cjYodCxhLGYpJiYhWDZuKGUsbyxnKSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gc0VuKGUsdCxuKXt2YXIgcixhLG8sZixnO2Y9ZS5jLGc9ZS5kLG89SWMoaGUobGUoRWEsMSksZHQsOCwwLFtmLmkubixmLm4sZi5hXSkpLmIsYT0obytJYyhoZShsZShFYSwxKSxkdCw4LDAsW2cuaS5uLGcubixnLmFdKSkuYikvMixyPW51bGwsZi5qPT0oQ3QoKSxhcik/cj1uZXcgbHQodCtmLmkuYy5jLmErbixhKTpyPW5ldyBsdCh0LW4sYSksUGsoZS5hLDAscil9ZnVuY3Rpb24gcXcoZSl7dmFyIHQsbixyLGE7Zm9yKHQ9bnVsbCxyPXJnKExoKGhlKGxlKEZoLDEpLFJuLDIwLDAsWyghZS5iJiYoZS5iPW5ldyBMbihfcixlLDQsNykpLGUuYiksKCFlLmMmJihlLmM9bmV3IExuKF9yLGUsNSw4KSksZS5jKV0pKSk7anIocik7KWlmKG49bCh4cihyKSw4NCksYT1iYyhuKSwhdCl0PWE7ZWxzZSBpZih0IT1hKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIEh1ZShlLHQsbil7dmFyIHI7aWYoKytlLmosdD49ZS5pKXRocm93IHVlKG5ldyB0YyhRZmUrdCthditlLmkpKTtpZihuPj1lLmkpdGhyb3cgdWUobmV3IHRjKEpmZStuK2F2K2UuaSkpO3JldHVybiByPWUuZ1tuXSx0IT1uJiYodDxuP3B1KGUuZyx0LGUuZyx0KzEsbi10KTpwdShlLmcsbisxLGUuZyxuLHQtbiksVHMoZS5nLHQsciksZS5QaSh0LHIsbiksZS5OaSgpKSxyfWZ1bmN0aW9uIHhuKGUsdCxuKXt2YXIgcjtpZihyPWwoZS5jLnhjKHQpLDE2KSxyKXJldHVybiByLkZjKG4pPygrK2UuZCwhMCk6ITE7aWYocj1lLmljKHQpLHIuRmMobikpcmV0dXJuKytlLmQsZS5jLnpjKHQsciksITA7dGhyb3cgdWUobmV3IHc2ZSgiTmV3IENvbGxlY3Rpb24gdmlvbGF0ZWQgdGhlIENvbGxlY3Rpb24gc3BlYyIpKX1mdW5jdGlvbiByUChlKXt2YXIgdCxuLHI7cmV0dXJuIGU8MD8wOmU9PTA/MzI6KHI9LShlPj4xNiksdD1yPj4xNiYxNixuPTE2LXQsZT1lPj50LHI9ZS0yNTYsdD1yPj4xNiY4LG4rPXQsZTw8PXQscj1lLVh5LHQ9cj4+MTYmNCxuKz10LGU8PD10LHI9ZS1fZCx0PXI+PjE2JjIsbis9dCxlPDw9dCxyPWU+PjE0LHQ9ciZ+KHI+PjEpLG4rMi10KX1mdW5jdGlvbiBhRW4oZSl7dHgoKTt2YXIgdCxuLHIsYTtmb3Iod0s9bmV3IGJ0LFgwZT1uZXcgUHIsWTBlPW5ldyBidCx0PSghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKSxYRG4odCksYT1uZXcgb3IodCk7YS5lIT1hLmkuZ2MoKTspcj1sKGdyKGEpLDI3KSxnYyh3SyxyLDApPT0tMSYmKG49bmV3IGJ0LHZ0KFkwZSxuKSxaMXQocixuKSk7cmV0dXJuIFkwZX1mdW5jdGlvbiBvRW4oZSx0LG4pe3ZhciByLGEsbyxmO2UuYT1uLmIuZCxEZSh0LDMyNik/KGE9bDYobCh0LDc0KSwhMSwhMSksbz1RTihhKSxyPW5ldyB0XyhlKSx0byhvLHIpLGRQKG8sYSksdC5vZigocGkoKSx4MykpIT1udWxsJiZ0byhsKHQub2YoeDMpLDc1KSxyKSk6KGY9bCh0LDQyMiksZi5yaChmLm5oKCkrZS5hLmEpLGYuc2goZi5vaCgpK2UuYS5iKSl9ZnVuY3Rpb24gY0VuKGUsdCl7dmFyIG4scixhO2ZvcihhPW5ldyBidCxyPVJyKHQuYSwwKTtyLmIhPXIuZC5jOyluPWwoQnIociksNjUpLG4uYy5nPT1lLmcmJnFlKFEobi5iLChIYygpLCRkKSkpIT09cWUoUShuLmMsJGQpKSYmIVc1KG5ldyBibihudWxsLG5ldyBrbihhLDE2KSksbmV3IGNYZShuKSkmJiRuKGEuYyxuKTtyZXR1cm4gVnMoYSxuZXcgTXRlKSxhfWZ1bmN0aW9uIFFwdChlLHQsbil7dmFyIHIsYSxvLGY7cmV0dXJuIERlKHQsMTUzKSYmRGUobiwxNTMpPyhvPWwodCwxNTMpLGY9bChuLDE1MyksZS5hW28uYV1bZi5hXStlLmFbZi5hXVtvLmFdKTpEZSh0LDI1MCkmJkRlKG4sMjUwKSYmKHI9bCh0LDI1MCksYT1sKG4sMjUwKSxyLmE9PWEuYSk/bChRKGEuYSwoYjAoKSxxeCkpLDE3KS5hOjB9ZnVuY3Rpb24gSnB0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRTtmb3IoRT16ZShHZShRKHQsKE50KCksdE0pKSkpLHc9ZVswXS5uLmErZVswXS5vLmErZVswXS5kLmMrRSxnPTE7ZzxlLmxlbmd0aDtnKyspcj1lW2ddLm4sYT1lW2ddLm8sbj1lW2ddLmQsbz1yLmEtbi5iLXcsbzwwJiYoci5hLT1vKSxmPXQuZixmLmE9Yi5NYXRoLm1heChmLmEsci5hK2EuYSksdz1yLmErYS5hK24uYytFfWZ1bmN0aW9uIHVFbihlLHQpe3ZhciBuLHIsYSxvLGYsZztyZXR1cm4gcj1sKGwoY3IoZS5nLHQuYSksNDIpLmEsNjgpLGE9bChsKGNyKGUuZyx0LmIpLDQyKS5hLDY4KSxvPXIuYixmPWEuYixuPVBMbihvLGYpLG4+PTA/bjooZz1lQShtYShuZXcgbHQoZi5jK2YuYi8yLGYuZCtmLmEvMiksbmV3IGx0KG8uYytvLmIvMixvLmQrby5hLzIpKSksLShUbXQobyxmKS0xKSpnKX1mdW5jdGlvbiBsRW4oZSx0LG4pe3ZhciByO0lzKG5ldyBibihudWxsLCghbi5hJiYobi5hPW5ldyBudChjcyxuLDYsNikpLG5ldyBrbihuLmEsMTYpKSksbmV3IGR0dChlLHQpKSxJcyhuZXcgYm4obnVsbCwoIW4ubiYmKG4ubj1uZXcgbnQoZWMsbiwxLDcpKSxuZXcga24obi5uLDE2KSkpLG5ldyBndHQoZSx0KSkscj1sKGF0KG4sKHBpKCkseDMpKSw3NSksciYmazdlKHIsZSx0KX1mdW5jdGlvbiBIdyhlLHQsbil7dmFyIHIsYSxvO2lmKG89ZzYoKEVsKCksaW8pLGUuRGgoKSx0KSxvKXJldHVybiBGbygpLGwobyw2OSkueGsoKXx8KG89cngoaWMoaW8sbykpKSxhPShyPWUuSWgobyksbChyPj0wP2UuTGgociwhMCwhMCk6SHcoZSxvLCEwKSwxNjApKSxsKGEsMjIwKS5TbCh0LG4pO3Rocm93IHVlKG5ldyBZbihPYit0LnhlKCkrJGZlKSl9ZnVuY3Rpb24geTllKGUsdCxuLHIpe3ZhciBhLG8sZixnLHc7aWYoYT1lLmRbdF0sYSl7aWYobz1hLmcsdz1hLmksciE9bnVsbCl7Zm9yKGc9MDtnPHc7KytnKWlmKGY9bChvW2ddLDEzNiksZi5CaSgpPT1uJiZQaShyLGYubGQoKSkpcmV0dXJuIGZ9ZWxzZSBmb3IoZz0wO2c8dzsrK2cpaWYoZj1sKG9bZ10sMTM2KSxxZShmLmxkKCkpPT09cWUocikpcmV0dXJuIGZ9cmV0dXJuIG51bGx9ZnVuY3Rpb24gaEVuKGUsdCl7dmFyIG4scixhLG8sZjtmb3Iocj0oIXQucyYmKHQucz1uZXcgbnQoZGwsdCwyMSwxNykpLHQucyksbz1udWxsLGE9MCxmPXIuaTthPGY7KythKXN3aXRjaChuPWwoT2UocixhKSwxNzkpLGt3KGljKGUsbikpKXtjYXNlIDQ6Y2FzZSA1OmNhc2UgNjp7IW8mJihvPW5ldyBidCksJG4oby5jLG4pO2JyZWFrfX1yZXR1cm4gb3x8KENuKCksQ24oKSxfbyl9ZnVuY3Rpb24gaVAoZSx0KXt2YXIgbjtpZih0PDApdGhyb3cgdWUobmV3IHF6KCJOZWdhdGl2ZSBleHBvbmVudCIpKTtpZih0PT0wKXJldHVybiB1SztpZih0PT0xfHxDOGUoZSx1Syl8fEM4ZShlLEJMKSlyZXR1cm4gZTtpZighVDJ0KGUsMCkpe2ZvcihuPTE7IVQydChlLG4pOykrK247cmV0dXJuIEs1KHk1bihuKnQpLGlQKHY2ZShlLG4pLHQpKX1yZXR1cm4gU3huKGUsdCl9ZnVuY3Rpb24gZkVuKGUsdCl7dmFyIG4scixhO2lmKHFlKGUpPT09cWUodCkpcmV0dXJuITA7aWYoZT09bnVsbHx8dD09bnVsbHx8ZS5sZW5ndGghPXQubGVuZ3RoKXJldHVybiExO2ZvcihuPTA7bjxlLmxlbmd0aDsrK24paWYocj1lW25dLGE9dFtuXSwhKHFlKHIpPT09cWUoYSl8fHIhPW51bGwmJlBpKHIsYSkpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFpwdChlKXt2M2UoKTt2YXIgdCxuLHI7Zm9yKHRoaXMuYj1UOHQsdGhpcy5jPShKcygpLEoxKSx0aGlzLmY9KGNldCgpLEU4dCksdGhpcy5hPWUsczNlKHRoaXMsbmV3IFg3KSxNVSh0aGlzKSxyPW5ldyBHKGUuYik7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDg2KSxuLmR8fCh0PW5ldyBRY2UoaGUobGUocjFlLDEpLFJuLDg2LDAsW25dKSksdnQoZS5hLHQpKX1mdW5jdGlvbiBkRW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdztpZighZXx8ZS5jLmxlbmd0aD09MClyZXR1cm4gbnVsbDtmb3Iobz1uZXcgbm90KHQsIW4pLGE9bmV3IEcoZSk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDcyKSxKeGUobywoZ18oKSxuZXcgWmQocikpKTtyZXR1cm4gZj1vLmksZi5hPSh3PW8ubixvLmUuYit3LmQrdy5hKSxmLmI9KGc9by5uLG8uZS5hK2cuYitnLmMpLG99ZnVuY3Rpb24gZTJ0KGUpe3ZhciB0LG4scixhLG8sZixnO2ZvcihnPUpPKGUuYSksY3llKGcsbmV3IHQwKSxuPW51bGwsYT1nLG89MCxmPWEubGVuZ3RoO288ZiYmKHI9YVtvXSxyLms9PShabigpLFVzKSk7KytvKXQ9bChRKHIsKGZ0KCksV2MpKSw2NCksISh0IT0oQ3QoKSxlcikmJnQhPWFyKSYmKG4mJmwoUShuLFd4KSwxNSkuRmMociksbj1yKX1mdW5jdGlvbiBnRW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFO3c9KFNuKHQsZS5jLmxlbmd0aCksbChlLmNbdF0sMzM5KSksdDIoZSx0KSx3LmIvMj49biYmKHI9dCxFPSh3LmMrdy5hKS8yLGY9RS1uLHcuYzw9RS1uJiYoYT1uZXcgdmFlKHcuYyxmKSxwdyhlLHIrKyxhKSksZz1FK24sZzw9dy5hJiYobz1uZXcgdmFlKGcsdy5hKSxFeShyLGUuYy5sZW5ndGgpLHhfKGUuYyxyLG8pKSl9ZnVuY3Rpb24gdDJ0KGUsdCxuKXt2YXIgcixhLG8sZixnLHc7aWYoIXQuZGMoKSl7Zm9yKGE9bmV3IG9zLHc9dC5LYygpO3cuT2IoKTspZm9yKGc9bCh3LlBiKCksNDApLGtpKGUuYSxwdChnLmcpLHB0KG4pKSxmPShyPVJyKG5ldyBIZyhnKS5hLmQsMCksbmV3IEM1KHIpKTtRSShmLmEpOylvPWwoQnIoZi5hKSw2NSkuYyxDcyhhLG8sYS5jLmIsYS5jKTt0MnQoZSxhLG4rMSl9fWZ1bmN0aW9uIHg5ZShlKXt2YXIgdDtpZighZS5jJiZlLmc9PW51bGwpZS5kPWUuYmooZS5mKSxxcihlLGUuZCksdD1lLmQ7ZWxzZXtpZihlLmc9PW51bGwpcmV0dXJuITA7aWYoZS5pPT0wKXJldHVybiExO3Q9bChlLmdbZS5pLTFdLDUxKX1yZXR1cm4gdD09ZS5iJiZudWxsLlZtPj1udWxsLlVtKCk/KENVKGUpLHg5ZShlKSk6dC5PYigpfWZ1bmN0aW9uIG4ydChlKXtpZih0aGlzLmE9ZSxlLmMuaS5rPT0oWm4oKSxVcykpdGhpcy5jPWUuYyx0aGlzLmQ9bChRKGUuYy5pLChmdCgpLFdjKSksNjQpO2Vsc2UgaWYoZS5kLmkuaz09VXMpdGhpcy5jPWUuZCx0aGlzLmQ9bChRKGUuZC5pLChmdCgpLFdjKSksNjQpO2Vsc2UgdGhyb3cgdWUobmV3IFluKCJFZGdlICIrZSsiIGlzIG5vdCBhbiBleHRlcm5hbCBlZGdlLiIpKX1mdW5jdGlvbiByMnQoZSx0KXt2YXIgbixyLGE7YT1lLmIsZS5iPXQsZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsMSwzLGEsZS5iKSksdD90IT1lJiYoRnUoZSx0LnpiKSxRb2UoZSx0LmQpLG49KHI9dC5jLHI/P3QuemIpLFpvZShlLG49PW51bGx8fHZuKG4sdC56Yik/bnVsbDpuKSk6KEZ1KGUsbnVsbCksUW9lKGUsMCksWm9lKGUsbnVsbCkpfWZ1bmN0aW9uIGkydChlLHQpe3ZhciBuO3RoaXMuZT0od3coKSxYcihlKSx3dygpLFA4ZShlKSksdGhpcy5jPShYcih0KSxQOGUodCkpLFR5ZSh0aGlzLmUuUmQoKS5kYygpPT10aGlzLmMuUmQoKS5kYygpKSx0aGlzLmQ9dzF0KHRoaXMuZSksdGhpcy5iPXcxdCh0aGlzLmMpLG49TG0od2EsW2R0LFJuXSxbNSwxXSw1LFt0aGlzLmUuUmQoKS5nYygpLHRoaXMuYy5SZCgpLmdjKCldLDIpLHRoaXMuYT1uLGp3bih0aGlzKX1mdW5jdGlvbiBzMnQoZSl7IUMwZSYmKEMwZT1jSW4oKSk7dmFyIHQ9ZS5yZXBsYWNlKC9bXHgwMC1ceDFmXHhhZFx1MDYwMC1cdTA2MDNcdTA2ZGRcdTA3MGZcdTE3YjRcdTE3YjVcdTIwMGItXHUyMDBmXHUyMDI4LVx1MjAyZVx1MjA2MC1cdTIwNjRcdTIwNmEtXHUyMDZmXHVmZWZmXHVmZmY5LVx1ZmZmYiJcXF0vZyxmdW5jdGlvbihuKXtyZXR1cm4gZjJuKG4pfSk7cmV0dXJuJyInK3QrJyInfWZ1bmN0aW9uIGs5ZShlLHQsbixyLGEsbyl7dmFyIGYsZyx3LEUsQztpZihhIT0wKWZvcihxZShlKT09PXFlKG4pJiYoZT1lLnNsaWNlKHQsdCthKSx0PTApLHc9bixnPXQsRT10K2E7ZzxFOylmPWIuTWF0aC5taW4oZysxZTQsRSksYT1mLWcsQz1lLnNsaWNlKGcsZiksQy5zcGxpY2UoMCwwLHIsbz9hOjApLEFycmF5LnByb3RvdHlwZS5zcGxpY2UuYXBwbHkodyxDKSxnPWYscis9YX1mdW5jdGlvbiBhMnQoZSl7UDVlKCk7dmFyIHQsbjtmb3IodGhpcy5iPWo2dCx0aGlzLmM9ejZ0LHRoaXMuZz0ob2V0KCksUjZ0KSx0aGlzLmQ9KEpzKCksSjEpLHRoaXMuYT1lLFY5ZSh0aGlzKSxuPW5ldyBHKGUuYik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDYwKSwhdC5hJiZlcnQoR2h0KG5ldyBJd2UsaGUobGUoZEssMSksUm4sNjAsMCxbdF0pKSxlKSx0LmU9bmV3IE1IKHQuZCl9ZnVuY3Rpb24gcEVuKGUpe3ZhciB0LG4scixhLG8sZjtmb3IoYT1lLmUuYy5sZW5ndGgscj1XZShtZixReSwxNSxhLDAsMSksZj1uZXcgRyhlLmUpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxNTMpLHJbby5hXT1uZXcgb3M7Zm9yKG49bmV3IEcoZS5jKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMjkwKSxyW3QuYy5hXS5GYyh0KSxyW3QuZC5hXS5GYyh0KTtyZXR1cm4gcn1mdW5jdGlvbiBiRW4oZSx0KXt2YXIgbixyLGEsbyxmO2lmKG49bChLbihlLmEsNCksMTI5KSxmPW49PW51bGw/MDpuLmxlbmd0aCx0Pj1mKXRocm93IHVlKG5ldyBteSh0LGYpKTtyZXR1cm4gYT1uW3RdLGY9PTE/cj1udWxsOihyPVdlKGVwZSxyMGUsNDI0LGYtMSwwLDEpLHB1KG4sMCxyLDAsdCksbz1mLXQtMSxvPjAmJnB1KG4sdCsxLHIsdCxvKSksUEUoZSxyKSxBcHQoZSx0LGEpLGF9ZnVuY3Rpb24gbzJ0KGUpe3ZhciB0LG47aWYoZS5mKXtmb3IoO2UubjxlLm87KXtpZih0PWwoZS5qP2Uuai4kaShlLm4pOmUuay5YYihlLm4pLDc2KSxuPXQuTGsoKSxEZShuLDEwMikmJmwobiwxOSkuQmImZXUmJighZS5lfHxuLnBrKCkhPW9DfHxuLkxqKCkhPTApJiZ0Lm1kKCkhPW51bGwpcmV0dXJuITA7KytlLm59cmV0dXJuITF9ZWxzZSByZXR1cm4gZS5uPGUub31mdW5jdGlvbiBreCgpe2t4PVUsdTk9bChPZSh0dCgodTNlKCksdHUpLnFiKSw2KSwzNSksYzk9bChPZSh0dCh0dS5xYiksMyksMzUpLGFwZT1sKE9lKHR0KHR1LnFiKSw0KSwzNSksb3BlPWwoT2UodHQodHUucWIpLDUpLDE5KSxwVSh1OSkscFUoYzkpLHBVKGFwZSkscFUob3BlKSxuQXQ9bmV3IElsKGhlKGxlKGRsLDEpLFM2LDE3OSwwLFt1OSxjOV0pKX1mdW5jdGlvbiBjMnQoZSx0KXt2YXIgbjt0aGlzLmQ9bmV3IHNfLHRoaXMuYj10LHRoaXMuZT1uZXcgRW8odC5MZigpKSxuPWUudS5IYygoUmwoKSxuRikpLGUudS5IYyh2cCk/ZS5EP3RoaXMuYT1uJiYhdC5iZygpOnRoaXMuYT0hMDplLnUuSGMoWWIpP24/dGhpcy5hPSEodC5VZigpLktjKCkuT2IoKXx8dC5XZigpLktjKCkuT2IoKSk6dGhpcy5hPSExOnRoaXMuYT0hMX1mdW5jdGlvbiB1MnQoZSx0KXt2YXIgbixyLGEsbztmb3Iobj1lLm8uYSxvPWwobCgkaShlLnIsdCksMjEpLDg3KS5LYygpO28uT2IoKTspYT1sKG8uUGIoKSwxMTcpLGEuZS5hPShyPWEuYixyLnBmKChwaSgpLHJoKSk/ci5hZygpPT0oQ3QoKSxlcik/LXIuTWYoKS5hLXplKEdlKHIub2YocmgpKSk6bit6ZShHZShyLm9mKHJoKSkpOnIuYWcoKT09KEN0KCksZXIpPy1yLk1mKCkuYTpuKX1mdW5jdGlvbiBsMnQoZSx0KXt2YXIgbixyLGEsbztuPWwoUShlLChOdCgpLFJoKSksODgpLG89bChhdCh0LFZUKSw2NCksYT1sKFEoZSxNcyksMTAxKSxhIT0oUmEoKSxaMSkmJmEhPVdiP289PShDdCgpLFBjKSYmKG89RWtlKHQsbiksbz09UGMmJihvPWd4KG4pKSk6KHI9bHZ0KHQpLHI+MD9vPWd4KG4pOm89Qk4oZ3gobikpKSxIaSh0LFZULG8pfWZ1bmN0aW9uIG1FbihlLHQpe3ZhciBuO3QuVWcoIlBhcnRpdGlvbiBwcmVwcm9jZXNzaW5nIiwxKSxuPWwoeWMoRmkoRGMoRmkobmV3IGJuKG51bGwsbmV3IGtuKGUuYSwxNikpLG5ldyBBWiksbmV3IExaKSxuZXcgd2opLFBsKG5ldyB6cixuZXcgaHQsbmV3IEZuLGhlKGxlKG9jLDEpLGl0LDEwOCwwLFsoRmwoKSxFYyldKSkpLDE1KSxJcyhuLk9jKCksbmV3IHQ4KSx0LlZnKCl9ZnVuY3Rpb24gdkVuKGUsdCl7dmFyIG4scixhLG8sZjtmb3IoZj1lLmosdC5hIT10LmImJlZzKGYsbmV3IGtTKSxhPWYuYy5sZW5ndGgvMnwwLHI9MDtyPGE7cisrKW89KFNuKHIsZi5jLmxlbmd0aCksbChmLmNbcl0sMTEzKSksby5jJiZsYShvLmQsdC5hKTtmb3Iobj1hO248Zi5jLmxlbmd0aDtuKyspbz0oU24obixmLmMubGVuZ3RoKSxsKGYuY1tuXSwxMTMpKSxvLmMmJmxhKG8uZCx0LmIpfWZ1bmN0aW9uIHdFbihlLHQsbil7dmFyIHIsYSxvO3JldHVybiByPWUuY1t0LmMucF1bdC5wXSxhPWUuY1tuLmMucF1bbi5wXSxyLmEhPW51bGwmJmEuYSE9bnVsbD8obz1OYWUoci5hLGEuYSksbzwwP2xQKGUsdCxuKTpvPjAmJmxQKGUsbix0KSxvKTpyLmEhPW51bGw/KGxQKGUsdCxuKSwtMSk6YS5hIT1udWxsPyhsUChlLG4sdCksMSk6MH1mdW5jdGlvbiB5RW4oZSx0KXt2YXIgbixyLGEsbyxmO2ZvcihhPXQuYi5iLGUuYT1XZShtZixReSwxNSxhLDAsMSksZS5iPVdlKGloLHBnLDI4LGEsMTYsMSksZj1Scih0LmIsMCk7Zi5iIT1mLmQuYzspbz1sKEJyKGYpLDQwKSxlLmFbby5nXT1uZXcgb3M7Zm9yKHI9UnIodC5hLDApO3IuYiE9ci5kLmM7KW49bChCcihyKSw2NSksZS5hW24uYi5nXS5GYyhuKSxlLmFbbi5jLmddLkZjKG4pfWZ1bmN0aW9uIGgydChlLHQpe3ZhciBuLHIsYSxvO2UuUGooKT8obj1lLkVqKCksbz1lLlFqKCksKytlLmosZS5xaihuLGUuWmkobix0KSkscj1lLklqKDMsbnVsbCx0LG4sbyksZS5NaigpPyhhPWUuTmoodCxudWxsKSxhPyhhLm5qKHIpLGEub2ooKSk6ZS5KaihyKSk6ZS5KaihyKSk6KHRhdChlLHQpLGUuTWooKSYmKGE9ZS5Oaih0LG51bGwpLGEmJmEub2ooKSkpfWZ1bmN0aW9uIEU5ZShlLHQsbil7dmFyIHIsYSxvO2UuUGooKT8obz1lLlFqKCksSU4oZSx0LG4pLHI9ZS5JaigzLG51bGwsbix0LG8pLGUuTWooKT8oYT1lLk5qKG4sbnVsbCksZS5UaigpJiYoYT1lLlVqKG4sYSkpLGE/KGEubmoociksYS5vaigpKTplLkpqKHIpKTplLkpqKHIpKTooSU4oZSx0LG4pLGUuTWooKSYmKGE9ZS5OaihuLG51bGwpLGEmJmEub2ooKSkpfWZ1bmN0aW9uIEVVKGUsdCl7dmFyIG4scixhLG8sZjtmb3IoZj1XdShlLmUuRGgoKSx0KSxhPW5ldyBYMixuPWwoZS5nLDEyNCksbz1lLmk7LS1vPj0wOylyPW5bb10sZi5hbShyLkxrKCkpJiZxcihhLHIpOyFhd3QoZSxhKSYmaGgoZS5lKSYmeGsoZSx0LkprKCk/ZGIoZSw2LHQsKENuKCksX28pLG51bGwsLTEsITEpOmRiKGUsdC50aygpPzI6MSx0LG51bGwsbnVsbCwtMSwhMSkpfWZ1bmN0aW9uIHhFbihlLHQpe3ZhciBuLHIsYSxvLGY7cmV0dXJuIGUuYT09KHpFKCksVkwpPyEwOihvPXQuYS5jLG49dC5hLmMrdC5hLmIsISh0LmomJihyPXQuQSxmPXIuYy5jLmEtci5vLmEvMixhPW8tKHIubi5hK3Iuby5hKSxhPmYpfHx0LnEmJihyPXQuQyxmPXIuYy5jLmEtci5vLmEvMixhPXIubi5hLW4sYT5mKSkpfWZ1bmN0aW9uIGYydChlKXtmb2UoKTt2YXIgdCxuLHIsYSxvLGYsZztmb3Iobj1uZXcgZTIsYT1uZXcgRyhlLmUuYik7YS5hPGEuYy5jLmxlbmd0aDspZm9yKHI9bChyZShhKSwzMCksZj1uZXcgRyhyLmEpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxMCksZz1lLmdbby5wXSx0PWwoQjEobixnKSwxNSksdHx8KHQ9bmV3IGJ0LGgyKG4sZyx0KSksdC5GYyhvKTtyZXR1cm4gbn1mdW5jdGlvbiBkMnQoZSl7dmFyIHQ7cmV0dXJuIGUuRGImNjQ/ZzAoZSk6KHQ9bmV3IEFmKGcwKGUpKSx0LmErPSIgKHN0YXJ0WDogIixfNSh0LGUuaiksdC5hKz0iLCBzdGFydFk6ICIsXzUodCxlLmspLHQuYSs9IiwgZW5kWDogIixfNSh0LGUuYiksdC5hKz0iLCBlbmRZOiAiLF81KHQsZS5jKSx0LmErPSIsIGlkZW50aWZpZXI6ICIsWG8odCxlLmQpLHQuYSs9IikiLHQuYSl9ZnVuY3Rpb24gVDllKGUpe3ZhciB0O3JldHVybiBlLkRiJjY0P0NBKGUpOih0PW5ldyBBZihDQShlKSksdC5hKz0iIChvcmRlcmVkOiAiLEdwKHQsKGUuQmImMjU2KSE9MCksdC5hKz0iLCB1bmlxdWU6ICIsR3AodCwoZS5CYiY1MTIpIT0wKSx0LmErPSIsIGxvd2VyQm91bmQ6ICIsaXNlKHQsZS5zKSx0LmErPSIsIHVwcGVyQm91bmQ6ICIsaXNlKHQsZS50KSx0LmErPSIpIix0LmEpfWZ1bmN0aW9uIGcydChlLHQsbixyLGEsbyxmLGcpe3ZhciB3O3JldHVybiBEZShlLkNiLDkwKSYmenkoWWwobChlLkNiLDkwKSksNCksRnUoZSxuKSxlLmY9cixMRShlLGEpLERFKGUsbyksQUUoZSxmKSxNRShlLCExKSx1MihlLCEwKSxJRShlLGcpLGMyKGUsITApLGkyKGUsMCksZS5iPTAsTXkoZSwxKSx3PSQxKGUsdCxudWxsKSx3JiZ3Lm9qKCksJGNlKGUsITEpLGV9ZnVuY3Rpb24gcDJ0KGUsdCl7dmFyIG4scixhLG87cmV0dXJuIG49bCh4dShlLmEsdCksNTI1KSxufHwocj1uZXcgU29lKHQpLGE9KFVIKCksRzE/bnVsbDpyLmMpLG89dGYoYSwwLGIuTWF0aC5tYXgoMCxScShhLGNsKDQ2KSkpKSxKZm4ocixwMnQoZSxvKSksKEcxP251bGw6ci5jKS5sZW5ndGg9PTAmJlNydChyLG5ldyBEdCkscmMoZS5hLEcxP251bGw6ci5jLHIpLHIpfWZ1bmN0aW9uIGtFbihlLHQpe3ZhciBuO2UuYj10LGUuZz1uZXcgYnQsbj1TRW4oZS5iKSxlLmU9bixlLmY9bixlLmM9UnQoQnQoUShlLmIsKGRVKCksQ19lKSkpKSxlLmE9R2UoUShlLmIsKHBpKCksWjYpKSksZS5hPT1udWxsJiYoZS5hPTEpLHplKGUuYSk+MT9lLmUqPXplKGUuYSk6ZS5mLz16ZShlLmEpLEh5bihlKSxZNW4oZSksR1NuKGUpLHJ0KGUuYiwoSUEoKSx2SyksZS5nKX1mdW5jdGlvbiBiMnQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdztmb3Iocj0wLHc9bix0fHwocj1uKihlLmMubGVuZ3RoLTEpLHcqPS0xKSxvPW5ldyBHKGUpO28uYTxvLmMuYy5sZW5ndGg7KXtmb3IoYT1sKHJlKG8pLDEwKSxydChhLChOdCgpLFJkKSwob2coKSx0WSkpLGEuby5hPXIsZz1kMihhLChDdCgpLGFyKSkuS2MoKTtnLk9iKCk7KWY9bChnLlBiKCksMTIpLGYubi5hPXI7cis9d319ZnVuY3Rpb24gRXgoZSx0LG4pe3ZhciByLGEsbyxmLGcsdztyZXR1cm4gZz1lLnBsKG4pLGchPW4/KGY9ZS5nW3RdLHc9ZyxSXyhlLHQsZS5aaSh0LHcpKSxvPWYsZS5SaSh0LHcsbyksZS5hbCgpJiYocj1uLGE9ZS5PaihyLG51bGwpLCFsKGcsNTQpLlBoKCkmJihhPWUuTmoodyxhKSksYSYmYS5vaigpKSxoaChlLmUpJiZ4ayhlLGUuSWooOSxuLGcsdCwhMSkpLGcpOm59ZnVuY3Rpb24gRUVuKGUsdCl7dmFyIG4scixhLG87Zm9yKHI9bmV3IEcoZS5hLmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwxOTQpLG4uZz0hMDtmb3Iobz1uZXcgRyhlLmEuYik7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDg2KSxhLms9UnQoQnQoZS5lLktiKG5ldyBjYShhLHQpKSkpLGEuZC5nPWEuZC5nJlJ0KEJ0KGUuZS5LYihuZXcgY2EoYSx0KSkpKTtyZXR1cm4gZX1mdW5jdGlvbiBtMnQoZSx0KXt2YXIgbixyO2lmKGUuYy5sZW5ndGghPTApe2lmKGUuYy5sZW5ndGg9PTIpVHgoKFNuKDAsZS5jLmxlbmd0aCksbChlLmNbMF0sMTApKSwoSWgoKSxrZykpLFR4KChTbigxLGUuYy5sZW5ndGgpLGwoZS5jWzFdLDEwKSksR2IpO2Vsc2UgZm9yKHI9bmV3IEcoZSk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDEwKSxUeChuLHQpO2UuYy5sZW5ndGg9MH19ZnVuY3Rpb24gdjJ0KGUpe3ZhciB0LG4scixhLG87aWYobj0odD1sKEswKE9vKSw5KSxuZXcgWmgodCxsKGMwKHQsdC5sZW5ndGgpLDkpLDApKSxvPWwoUShlLChmdCgpLGpsKSksMTApLG8pZm9yKGE9bmV3IEcoby5qKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTIpLHFlKFEocix6aSkpPT09cWUoZSkmJiRfKG5ldyBOMShyLmIpKSYmZDAobixyLmopO3JldHVybiBufWZ1bmN0aW9uIHcydChlLHQsbil7dmFyIHIsYSxvLGYsZztpZighZS5kW24ucF0pe2ZvcihhPW5ldyBocihkcihxcyhuKS5hLktjKCksbmV3IGopKTtqcihhKTspe2ZvcihyPWwoeHIoYSksMTgpLGc9ci5kLmksZj1uZXcgaHIoZHIoa2EoZykuYS5LYygpLG5ldyBqKSk7anIoZik7KW89bCh4cihmKSwxOCksby5jLmk9PXQmJihlLmFbby5wXT0hMCk7dzJ0KGUsdCxnKX1lLmRbbi5wXT0hMH19ZnVuY3Rpb24gVEVuKGUsdCl7dmFyIG4scixhLG8sZixnLHc7aWYocj1kMXQoZS5EYiYyNTQpLHI9PTEpZS5FYj1udWxsO2Vsc2UgaWYobz1qbShlLkViKSxyPT0yKWE9bXVlKGUsdCksZS5FYj1vW2E9PTA/MTowXTtlbHNle2ZvcihmPVdlKHdhLFJuLDEsci0xLDUsMSksbj0yLGc9MCx3PTA7bjw9MTI4O248PD0xKW49PXQ/KytnOmUuRGImbiYmKGZbdysrXT1vW2crK10pO2UuRWI9Zn1lLkRiJj1+dH1mdW5jdGlvbiBDOWUoZSl7dmFyIHQ7c3dpdGNoKHQ9MCxlKXtjYXNlIDEwNTp0PTI7YnJlYWs7Y2FzZSAxMDk6dD04O2JyZWFrO2Nhc2UgMTE1OnQ9NDticmVhaztjYXNlIDEyMDp0PTE2O2JyZWFrO2Nhc2UgMTE3OnQ9MzI7YnJlYWs7Y2FzZSAxMTk6dD02NDticmVhaztjYXNlIDcwOnQ9MjU2O2JyZWFrO2Nhc2UgNzI6dD0xMjg7YnJlYWs7Y2FzZSA4ODp0PTUxMjticmVhaztjYXNlIDQ0OnQ9bTB9cmV0dXJuIHR9ZnVuY3Rpb24gQ0VuKGUsdCxuLHIsYSl7dmFyIG8sZixnLHc7aWYocWUoZSk9PT1xZSh0KSYmcj09YSl7bW10KGUscixuKTtyZXR1cm59Zm9yKGc9MDtnPHI7ZysrKXtmb3IoZj0wLG89ZVtnXSx3PTA7dzxhO3crKylmPWJvKGJvKG1vKHZhKG8sVm8pLHZhKHRbd10sVm8pKSx2YShuW2crd10sVm8pKSx2YShZcihmKSxWbykpLG5bZyt3XT1ZcihmKSxmPXViKGYsMzIpO25bZythXT1ZcihmKX19ZnVuY3Rpb24gU0VuKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDLEw7Zm9yKEM9MCxFPTAsYT1lLmEsZz1hLmEuZ2MoKSxyPWEuYS5lYygpLktjKCk7ci5PYigpOyluPWwoci5QYigpLDU2NyksdD0obi5iJiZnbGUobiksbi5hKSxMPXQuYSxmPXQuYixDKz1MK2YsRSs9TCpmO3JldHVybiB3PWIuTWF0aC5zcXJ0KDQwMCpnKkUtNCpFK0MqQykrQyxvPTIqKDEwMCpnLTEpLG89PTA/dzp3L299ZnVuY3Rpb24geTJ0KGUsdCl7dC5iIT0wJiYoaXNOYU4oZS5zKT9lLnM9emUoKG1yKHQuYiE9MCksR2UodC5hLmEuYykpKTplLnM9Yi5NYXRoLm1pbihlLnMsemUoKG1yKHQuYiE9MCksR2UodC5hLmEuYykpKSksaXNOYU4oZS5jKT9lLmM9emUoKG1yKHQuYiE9MCksR2UodC5jLmIuYykpKTplLmM9Yi5NYXRoLm1heChlLmMsemUoKG1yKHQuYiE9MCksR2UodC5jLmIuYykpKSkpfWZ1bmN0aW9uIHFBKGUpe3ZhciB0LG4scixhO2Zvcih0PW51bGwscj1yZyhMaChoZShsZShGaCwxKSxSbiwyMCwwLFsoIWUuYiYmKGUuYj1uZXcgTG4oX3IsZSw0LDcpKSxlLmIpLCghZS5jJiYoZS5jPW5ldyBMbihfcixlLDUsOCkpLGUuYyldKSkpO2pyKHIpOylpZihuPWwoeHIociksODQpLGE9YmMobiksIXQpdD1kcyhhKTtlbHNlIGlmKHQhPWRzKGEpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFZ1ZShlLHQpe3ZhciBuLHIsYSxvO2UuUGooKT8obj1lLmksbz1lLlFqKCksdE4oZSx0KSxyPWUuSWooMyxudWxsLHQsbixvKSxlLk1qKCk/KGE9ZS5Oaih0LG51bGwpLGUuVGooKSYmKGE9ZS5Vaih0LGEpKSxhPyhhLm5qKHIpLGEub2ooKSk6ZS5KaihyKSk6ZS5KaihyKSk6KHROKGUsdCksZS5NaigpJiYoYT1lLk5qKHQsbnVsbCksYSYmYS5vaigpKSl9ZnVuY3Rpb24gX0VuKGUsdCl7dmFyIG4scixhLG87aWYobz1qTyhlLmEsdC5iKSwhbyl0aHJvdyB1ZShuZXcgbmMoIkludmFsaWQgaGl0Ym94ZXMgZm9yIHNjYW5saW5lIG92ZXJsYXAgY2FsY3VsYXRpb24uIikpO2ZvcihhPSExLHI9ZS5hLmEuZWMoKS5LYygpO3IuT2IoKTspaWYobj1sKHIuUGIoKSw2OCksc3luKHQuYixuKSlCdW4oZS5iLmEsdC5iLG4pLGE9ITA7ZWxzZSBpZihhKWJyZWFrfWZ1bmN0aW9uIEFFbihlKXt2YXIgdDtpZighZS5hKXRocm93IHVlKG5ldyBuYygiSURhdGFUeXBlIGNsYXNzIGV4cGVjdGVkIGZvciBsYXlvdXQgb3B0aW9uICIrZS5mKSk7aWYodD1kbW4oZS5hKSx0PT1udWxsKXRocm93IHVlKG5ldyBuYygiQ291bGRuJ3QgY3JlYXRlIG5ldyBpbnN0YW5jZSBvZiBwcm9wZXJ0eSAnIitlLmYrIicuICIrT3l0KyhHZyhoRiksaEYuaykrSkNlKSk7cmV0dXJuIGwodCw0MjMpfWZ1bmN0aW9uIFV1ZShlKXt2YXIgdCxuLHIsYSxvO3JldHVybiBvPWUuUGgoKSxvJiZvLlZoKCkmJihhPXliKGUsbyksYSE9byk/KG49ZS5GaCgpLHI9KHQ9ZS5GaCgpLHQ+PTA/ZS5BaChudWxsKTplLlBoKCkuVGgoZSwtMS10LG51bGwsbnVsbCkpLGUuQmgobChhLDU0KSxuKSxyJiZyLm9qKCksZS52aCgpJiZlLndoKCkmJm4+LTEmJk5pKGUsbmV3IF9hKGUsOSxuLG8sYSkpLGEpOm99ZnVuY3Rpb24gUzllKGUsdCl7dmFyIG4scixhLG8sZjtmb3Iobz1lLmIuQ2UodCkscj0obj1lLmEuZ2V0KG8pLG4/P1dlKHdhLFJuLDEsMCw1LDEpKSxmPTA7ZjxyLmxlbmd0aDtmKyspaWYoYT1yW2ZdLGUuYi5CZSh0LGEubGQoKSkpcmV0dXJuIHIubGVuZ3RoPT0xPyhyLmxlbmd0aD0wLE1mbihlLmEsbykpOnIuc3BsaWNlKGYsMSksLS1lLmMsKytlLmIuZyxhLm1kKCk7cmV0dXJuIG51bGx9ZnVuY3Rpb24geDJ0KGUpe3ZhciB0LG4scixhLG8sZixnLHc7Zm9yKGY9MCxvPWUuZi5lLHI9MDtyPG8uYy5sZW5ndGg7KytyKWZvcihnPShTbihyLG8uYy5sZW5ndGgpLGwoby5jW3JdLDE1MykpLGE9cisxO2E8by5jLmxlbmd0aDsrK2Epdz0oU24oYSxvLmMubGVuZ3RoKSxsKG8uY1thXSwxNTMpKSxuPXBiKGcuZCx3LmQpLHQ9bi1lLmFbZy5hXVt3LmFdLGYrPWUuaVtnLmFdW3cuYV0qdCp0O3JldHVybiBmfWZ1bmN0aW9uIExFbihlLHQpe3ZhciBuO2lmKCFucyh0LChOdCgpLFF1KSkmJihuPVg3bihsKFEodCxzTGUpLDM3MSksbChRKGUsUXUpLDE3MSkpLHJ0KHQsc0xlLG4pLCFqcihuZXcgaHIoZHIoc3AodCkuYS5LYygpLG5ldyBqKSkpKSlzd2l0Y2gobi5nKXtjYXNlIDE6cnQodCxRdSwoaGYoKSxZTCkpO2JyZWFrO2Nhc2UgMjpydCh0LFF1LChoZigpLFhMKSl9fWZ1bmN0aW9uIE1FbihlLHQpe3ZhciBuO0hTbihlKSxlLmE9KG49bmV3IG5zZSxJcyhuZXcgYm4obnVsbCxuZXcga24odC5kLDE2KSksbmV3IEVZZShuKSksbiksc19uKGUsbChRKHQuYiwoTnQoKSxuZGUpKSwzNDkpKSxGNm4oZSksRkVuKGUpLEo3bihlKSxSNm4oZSksUUxuKGUsdCksSXMoRGMobmV3IGJuKG51bGwsb2N0KE5nbihlLmIpLmEpKSxuZXcgeFMpLG5ldyBtZWUpLHQuYT0hMSxlLmE9bnVsbH1mdW5jdGlvbiBfOWUoKXtfOWU9VSxnVHQ9bmV3IHBuKGZDZSwoSG4oKSwhMSkpLHBUdD1uZXcgcG4oZENlLDcpLHB0KDApLHdUdD1uZXcgcG4oZ0NlLHB0KDApKSxtVHQ9bmV3IHBuKHBDZSxwdCgtMSkpLGNJZT0oa0EoKSxWZGUpLHlUdD1uZXcgcG4oYkNlLGNJZSksYUllPSh4QSgpLE9CKSxiVHQ9bmV3IHBuKG1DZSxhSWUpLG9JZT0oUkgoKSxVZGUpLHZUdD1uZXcgcG4odkNlLG9JZSl9ZnVuY3Rpb24gazJ0KCl7VnhlLmNhbGwodGhpcyx4VCwocmIoKSx3X3QpKSx0aGlzLnA9bnVsbCx0aGlzLmE9bnVsbCx0aGlzLmY9bnVsbCx0aGlzLm49bnVsbCx0aGlzLmc9bnVsbCx0aGlzLmM9bnVsbCx0aGlzLmk9bnVsbCx0aGlzLmo9bnVsbCx0aGlzLmQ9bnVsbCx0aGlzLmI9bnVsbCx0aGlzLmU9bnVsbCx0aGlzLms9bnVsbCx0aGlzLm89bnVsbCx0aGlzLnM9bnVsbCx0aGlzLnE9ITEsdGhpcy5yPSExfWZ1bmN0aW9uIEhFKCl7SEU9VSxKZ2U9bmV3IFI4KFgzdCwwKSx3WT1uZXcgUjgoIklOU0lERV9TRUxGX0xPT1BTIiwxKSx5WT1uZXcgUjgoIk1VTFRJX0VER0VTIiwyKSx2WT1uZXcgUjgoIkVER0VfTEFCRUxTIiwzKSxRZ2U9bmV3IFI4KCJQT1JUUyIsNCksbVk9bmV3IFI4KCJDT01QT1VORCIsNSksYlk9bmV3IFI4KCJDTFVTVEVSUyIsNiksWGdlPW5ldyBSOCgiRElTQ09OTkVDVEVEIiw3KX1mdW5jdGlvbiBFMnQoZSx0LG4pe3ZhciByLGEsbztlLlBqKCk/KG89ZS5RaigpLCsrZS5qLGUucWoodCxlLlppKHQsbikpLHI9ZS5JaigzLG51bGwsbix0LG8pLGUuTWooKT8oYT1lLk5qKG4sbnVsbCksYT8oYS5uaihyKSxhLm9qKCkpOmUuSmoocikpOmUuSmoocikpOigrK2UuaixlLnFqKHQsZS5aaSh0LG4pKSxlLk1qKCkmJihhPWUuTmoobixudWxsKSxhJiZhLm9qKCkpKX1mdW5jdGlvbiBUMnQoZSx0KXt2YXIgbixyLGE7aWYodD09MClyZXR1cm4oZS5hWzBdJjEpIT0wO2lmKHQ8MCl0aHJvdyB1ZShuZXcgcXooIk5lZ2F0aXZlIGJpdCBhZGRyZXNzIikpO2lmKGE9dD4+NSxhPj1lLmQpcmV0dXJuIGUuZTwwO2lmKG49ZS5hW2FdLHQ9MTw8KHQmMzEpLGUuZTwwKXtpZihyPU1mdChlKSxhPHIpcmV0dXJuITE7cj09YT9uPS1uOm49fm59cmV0dXJuKG4mdCkhPTB9ZnVuY3Rpb24gREVuKGUsdCxuLHIpe3ZhciBhO2wobi5iLDY4KSxsKG4uYiw2OCksbChyLmIsNjgpLGwoci5iLDY4KSxhPW1hKEphKGwobi5iLDY4KS5jKSxsKHIuYiw2OCkuYyksUXEoYSxCcHQobChuLmIsNjgpLGwoci5iLDY4KSxhKSksbChyLmIsNjgpLGwoci5iLDY4KSxsKHIuYiw2OCkuYy5hK2EuYSxsKHIuYiw2OCkuYy5iK2EuYixsKHIuYiw2OCksVnUoci5hLG5ldyBrNGUoZSx0LHIpKX1mdW5jdGlvbiBBOWUoZSx0KXt2YXIgbixyLGEsbyxmLGcsdztpZihvPXQuZSxvKXtmb3Iobj1VdWUobykscj1sKGUuZyw2ODkpLGY9MDtmPGUuaTsrK2YpaWYodz1yW2ZdLGh1ZSh3KT09biYmKGE9KCF3LmQmJih3LmQ9bmV3IFlzKFdvLHcsMSkpLHcuZCksZz1sKG4uTWgoc2xlKG8sby5DYixvLkRiPj4xNikpLDE1KS5kZChvKSxnPGEuaSkpcmV0dXJuIEE5ZShlLGwoT2UoYSxnKSw4OSkpfXJldHVybiB0fWZ1bmN0aW9uIEQoZSx0LG4pe3ZhciByPXNLLGEsbz1yW2VdLGY9byBpbnN0YW5jZW9mIEFycmF5P29bMF06bnVsbDtvJiYhZj9oPW86KGg9KGE9dCYmdC5wcm90b3R5cGUsIWEmJihhPXNLW3RdKSxtMm4oYSkpLGguU209biwhdCYmKGguVG09eGUpLHJbZV09aCk7Zm9yKHZhciBnPTM7Zzxhcmd1bWVudHMubGVuZ3RoOysrZylhcmd1bWVudHNbZ10ucHJvdG90eXBlPWg7ZiYmKGguUm09Zil9ZnVuY3Rpb24ganIoZSl7Zm9yKHZhciB0OyFsKFhyKGUuYSksNTEpLk9iKCk7KXtpZihlLmQ9a3luKGUpLCFlLmQpcmV0dXJuITE7aWYoZS5hPWwoZS5kLlBiKCksNTEpLERlKGUuYSwzOCkpe2lmKHQ9bChlLmEsMzgpLGUuYT10LmEsIWUuYiYmKGUuYj1uZXcgejUpLGdiKGUuYixlLmQpLHQuYilmb3IoOyFsXyh0LmIpOylnYihlLmIsbChiZ24odC5iKSw1MSkpO2UuZD10LmR9fXJldHVybiEwfWZ1bmN0aW9uIEw5ZShlLHQpe3ZhciBuLHIsYSxvO2ZvcihhPTEsdC5qPSEwLG89bnVsbCxyPW5ldyBHKFo1KHQpKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMjE4KSxlLmNbbi5jXXx8KGUuY1tuLmNdPSEwLG89SFYobix0KSxuLmY/YSs9TDllKGUsbyk6IW8uaiYmbi5hPT1uLmUuZS1uLmQuZSYmKG4uZj0hMCxuYShlLnAsbiksYSs9TDllKGUsbykpKTtyZXR1cm4gYX1mdW5jdGlvbiBJRW4oZSl7dmFyIHQsbixyO2ZvcihuPW5ldyBHKGUuYS5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSw4Nikscj0obnIoMCksMCkscj4wJiYoIShVZyhlLmEuYykmJnQubi5kKSYmIShCNShlLmEuYykmJnQubi5iKSYmKHQuZy5kKz1iLk1hdGgubWF4KDAsci8yLS41KSksIShVZyhlLmEuYykmJnQubi5hKSYmIShCNShlLmEuYykmJnQubi5jKSYmKHQuZy5hLT1yLTEpKX1mdW5jdGlvbiBDMnQoZSl7dmFyIHQsbixyLGEsbztpZihhPW5ldyBidCxvPXltdChlLGEpLHQ9bChRKGUsKGZ0KCksamwpKSwxMCksdClmb3Iocj1uZXcgRyh0LmopO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwxMikscWUoUShuLHppKSk9PT1xZShlKSYmKG89Yi5NYXRoLm1heChvLHltdChuLGEpKSk7cmV0dXJuIGEuYy5sZW5ndGg9PTB8fHJ0KGUsUjYsbyksbyE9LTE/YTpudWxsfWZ1bmN0aW9uIFMydChlLHQsbil7dmFyIHIsYSxvLGYsZyx3O289bChqdCh0LmUsMCksMTgpLmMscj1vLmksYT1yLmssdz1sKGp0KG4uZywwKSwxOCkuZCxmPXcuaSxnPWYuayxhPT0oWm4oKSxBYSk/cnQoZSwoZnQoKSxvMSksbChRKHIsbzEpLDEyKSk6cnQoZSwoZnQoKSxvMSksbyksZz09QWE/cnQoZSwoZnQoKSwkZiksbChRKGYsJGYpLDEyKSk6cnQoZSwoZnQoKSwkZiksdyl9ZnVuY3Rpb24gTTllKGUpe3ZhciB0LG4scjt0aGlzLmM9ZSxyPWwoUShlLChOdCgpLFJoKSksODgpLHQ9emUoR2UoUShlLGNXKSkpLG49emUoR2UoUShlLGlEZSkpKSxyPT0oSnMoKSx1Yyl8fHI9PXZjfHxyPT1KMT90aGlzLmI9dCpuOnRoaXMuYj0xLyh0Km4pLHRoaXMuaj16ZShHZShRKGUsVjYpKSksdGhpcy5lPXplKEdlKFEoZSxtMykpKSx0aGlzLmY9ZS5iLmMubGVuZ3RofWZ1bmN0aW9uIEQ5ZShlLHQpe3ZhciBuLHIsYSxvLGY7cmV0dXJuIHQmPTYzLG49ZS5oLHI9KG4mU1ApIT0wLHImJihufD0tMTA0ODU3NiksdDwyMj8oZj1uPj50LG89ZS5tPj50fG48PDIyLXQsYT1lLmw+PnR8ZS5tPDwyMi10KTp0PDQ0PyhmPXI/aHA6MCxvPW4+PnQtMjIsYT1lLm0+PnQtMjJ8bjw8NDQtdCk6KGY9cj9ocDowLG89cj9laDowLGE9bj4+dC00NCkscXUoYSZlaCxvJmVoLGYmaHApfWZ1bmN0aW9uIEd1ZShlKXt2YXIgdCxuLHIsYSxvLGY7Zm9yKHRoaXMuYz1uZXcgYnQsdGhpcy5kPWUscj1ncyxhPWdzLHQ9aWEsbj1pYSxmPVJyKGUsMCk7Zi5iIT1mLmQuYzspbz1sKEJyKGYpLDgpLHI9Yi5NYXRoLm1pbihyLG8uYSksYT1iLk1hdGgubWluKGEsby5iKSx0PWIuTWF0aC5tYXgodCxvLmEpLG49Yi5NYXRoLm1heChuLG8uYik7dGhpcy5hPW5ldyBlZihyLGEsdC1yLG4tYSl9ZnVuY3Rpb24gXzJ0KGUsdCl7dmFyIG4scixhLG8sZixnO2ZvcihvPW5ldyBHKGUuYik7by5hPG8uYy5jLmxlbmd0aDspZm9yKGE9bChyZShvKSwzMCksZz1uZXcgRyhhLmEpO2cuYTxnLmMuYy5sZW5ndGg7KWZvcihmPWwocmUoZyksMTApLGYuaz09KFpuKCksY3UpJiZUeChmLHQpLHI9bmV3IGhyKGRyKHFzKGYpLmEuS2MoKSxuZXcgaikpO2pyKHIpOyluPWwoeHIociksMTgpLHQwdChuLHQpfWZ1bmN0aW9uIE9FbihlLHQpe3ZhciBuLHIsYTtmb3IodC5VZygiTGF5ZXIgY29uc3RyYWludCBwcmVwcm9jZXNzaW5nIiwxKSxuPW5ldyBidCxhPW5ldyBVYShlLmEsMCk7YS5iPGEuZC5nYygpOylyPShtcihhLmI8YS5kLmdjKCkpLGwoYS5kLlhiKGEuYz1hLmIrKyksMTApKSxheW4ocikmJihweG4ociksJG4obi5jLHIpLHBoKGEpKTtuLmMubGVuZ3RoPT0wfHxydChlLChmdCgpLEgxZSksbiksdC5WZygpfWZ1bmN0aW9uIE5FbihlKXt2YXIgdCxuO2ZvcihlLmU9V2UoVnIsZGksMjgsZS5wLmMubGVuZ3RoLDE1LDEpLGUuaz1XZShWcixkaSwyOCxlLnAuYy5sZW5ndGgsMTUsMSksbj1uZXcgRyhlLnApO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwxMCksZS5lW3QucF09WGcobmV3IGhyKGRyKGthKHQpLmEuS2MoKSxuZXcgaikpKSxlLmtbdC5wXT1YZyhuZXcgaHIoZHIocXModCkuYS5LYygpLG5ldyBqKSkpfWZ1bmN0aW9uIFBFbihlKXt2YXIgdCxuLHIsYSxvLGY7Zm9yKGE9MCxlLnE9bmV3IGJ0LHQ9bmV3IEtzLGY9bmV3IEcoZS5wKTtmLmE8Zi5jLmMubGVuZ3RoOyl7Zm9yKG89bChyZShmKSwxMCksby5wPWEscj1uZXcgaHIoZHIocXMobykuYS5LYygpLG5ldyBqKSk7anIocik7KW49bCh4cihyKSwxOCksbmEodCxuLmQuaSk7dC5hLkJjKG8pIT1udWxsLHZ0KGUucSxuZXcgVV8odCkpLHQuYS4kYigpLCsrYX19ZnVuY3Rpb24gQTJ0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2lmKGUuYS5mPjAmJkRlKHQsNDQpJiYoZS5hLl9qKCksRT1sKHQsNDQpLHc9RS5sZCgpLG89dz09bnVsbD8wOmVzKHcpLGY9UXllKGUuYSxvKSxuPWUuYS5kW2ZdLG4pKXtmb3Iocj1sKG4uZywzNzkpLEM9bi5pLGc9MDtnPEM7KytnKWlmKGE9cltnXSxhLkJpKCk9PW8mJmEuRmIoRSkpcmV0dXJuIEEydChlLEUpLCEwfXJldHVybiExfWZ1bmN0aW9uIEJFbihlKXt2YXIgdCxuLHIsYSxvLGYsZztpZih0PWUucWkoRmYpLHQmJihnPWVpKG4xKCghdC5iJiYodC5iPW5ldyBkaCgoVG4oKSxObyksWWMsdCkpLHQuYiksInNldHRpbmdEZWxlZ2F0ZXMiKSksZyE9bnVsbCkpe2ZvcihuPW5ldyBidCxhPUd5KGcsIlxcdysiKSxvPTAsZj1hLmxlbmd0aDtvPGY7KytvKXI9YVtvXSwkbihuLmMscik7cmV0dXJuIG59cmV0dXJuIENuKCksQ24oKSxfb31mdW5jdGlvbiBGRW4oZSl7dmFyIHQsbixyLGE7Zm9yKGE9bCgkaShlLmEsKFJ5KCksR0spKSwxNSkuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMTA1KSxuPSh0PVc4KHIuayksdC5IYygoQ3QoKSxRbikpP3QuSGMoYXIpP3QuSGMoRHIpP3QuSGMoZXIpP251bGw6YXh0OmN4dDpveHQ6c3h0KSxWayhlLHIsblswXSwoT3coKSxhMyksMCksVmsoZSxyLG5bMV0sUmIsMSksVmsoZSxyLG5bMl0sbzMsMSl9ZnVuY3Rpb24gUkVuKGUsdCl7dmFyIG4scjtuPXZfbih0KSxzU24oZSx0LG4pLE9ndChlLmEsbChRKGVvKHQuYiksKGZ0KCksWHgpKSwyMzQpKSwkX24oZSksY3huKGUsdCkscj1XZShWcixkaSwyOCx0LmIuai5jLmxlbmd0aCwxNSwxKSxTbGUoZSx0LChDdCgpLFFuKSxyLG4pLFNsZShlLHQsYXIscixuKSxTbGUoZSx0LERyLHIsbiksU2xlKGUsdCxlcixyLG4pLGUuYT1udWxsLGUuYz1udWxsLGUuYj1udWxsfWZ1bmN0aW9uIEk5ZShlLHQsbil7c3dpdGNoKHQpe2Nhc2UgNzohZS5lJiYoZS5lPW5ldyBMbihqcyxlLDcsNCkpLCRyKGUuZSksIWUuZSYmKGUuZT1uZXcgTG4oanMsZSw3LDQpKSxBcyhlLmUsbChuLDE2KSk7cmV0dXJuO2Nhc2UgODohZS5kJiYoZS5kPW5ldyBMbihqcyxlLDgsNSkpLCRyKGUuZCksIWUuZCYmKGUuZD1uZXcgTG4oanMsZSw4LDUpKSxBcyhlLmQsbChuLDE2KSk7cmV0dXJufUN4ZShlLHQsbil9ZnVuY3Rpb24gTzllKGUsdCl7dmFyIG4scixhLG8sZjtpZihxZSh0KT09PXFlKGUpKXJldHVybiEwO2lmKCFEZSh0LDE1KXx8KGY9bCh0LDE1KSxlLmdjKCkhPWYuZ2MoKSkpcmV0dXJuITE7Zm9yKG89Zi5LYygpLHI9ZS5LYygpO3IuT2IoKTspaWYobj1yLlBiKCksYT1vLlBiKCksIShxZShuKT09PXFlKGEpfHxuIT1udWxsJiZQaShuLGEpKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBqRW4oZSx0KXt2YXIgbixyLGEsbztmb3Iobz1sKHljKERjKERjKG5ldyBibihudWxsLG5ldyBrbih0LmIsMTYpKSxuZXcgZlMpLG5ldyBkUyksUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsWyhGbCgpLEVjKV0pKSksMTUpLG8uSmMobmV3IGdqKSxuPTAsYT1vLktjKCk7YS5PYigpOylyPWwoYS5QYigpLDEyKSxyLnA9PS0xJiZOOWUoZSxyLG4rKyl9ZnVuY3Rpb24gTDJ0KGUpe3N3aXRjaChlLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IHRpZTtjYXNlIDE6cmV0dXJuIG5ldyBacmU7Y2FzZSAyOnJldHVybiBuZXcgZWllO2Nhc2UgMzpyZXR1cm4gbmV3IFhldDtjYXNlIDQ6cmV0dXJuIG5ldyBic3Q7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgWW4oIk5vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIG5vZGUgcGxhY2VyICIrKGUuZiE9bnVsbD9lLmY6IiIrZS5nKSkpfX1mdW5jdGlvbiBNMnQoZSl7c3dpdGNoKGUuZyl7Y2FzZSAwOnJldHVybiBuZXcgUTRlO2Nhc2UgMTpyZXR1cm4gbmV3IFVyZTtjYXNlIDI6cmV0dXJuIG5ldyBvejtjYXNlIDM6cmV0dXJuIG5ldyBtODtjYXNlIDQ6cmV0dXJuIG5ldyAkdHQ7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgWW4oIk5vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGN5Y2xlIGJyZWFrZXIgIisoZS5mIT1udWxsP2UuZjoiIitlLmcpKSl9fWZ1bmN0aW9uICRFbihlLHQpe3ZhciBuLHIsYSxvLGY7cj1uZXcgb3MsQ3Mocix0LHIuYy5iLHIuYyk7ZG8gZm9yKG49KG1yKHIuYiE9MCksbChhZihyLHIuYS5hKSw0MCkpLGUuYltuLmddPTEsbz1ScihuLmQsMCk7by5iIT1vLmQuYzspYT1sKEJyKG8pLDY1KSxmPWEuYyxlLmJbZi5nXT09MT91aShlLmEsYSk6ZS5iW2YuZ109PTI/ZS5iW2YuZ109MTpDcyhyLGYsci5jLmIsci5jKTt3aGlsZShyLmIhPTApfWZ1bmN0aW9uIHpFbihlLHQsbil7dmFyIHI7cj1udWxsLHQmJihyPXQuZCksUkEoZSxuZXcgSWsodC5uLmEtci5iK24uYSx0Lm4uYi1yLmQrbi5iKSksUkEoZSxuZXcgSWsodC5uLmEtci5iK24uYSx0Lm4uYit0Lm8uYityLmErbi5iKSksUkEoZSxuZXcgSWsodC5uLmErdC5vLmErci5jK24uYSx0Lm4uYi1yLmQrbi5iKSksUkEoZSxuZXcgSWsodC5uLmErdC5vLmErci5jK24uYSx0Lm4uYit0Lm8uYityLmErbi5iKSl9ZnVuY3Rpb24gTjllKGUsdCxuKXt2YXIgcixhLG87Zm9yKHQucD1uLG89cmcoTGgoaGUobGUoRmgsMSksUm4sMjAsMCxbbmV3IFQ1KHQpLG5ldyBDOCh0KV0pKSk7anIobyk7KXI9bCh4cihvKSwxMiksci5wPT0tMSYmTjllKGUscixuKTtpZih0Lmkuaz09KFpuKCksQWEpKWZvcihhPW5ldyBHKHQuaS5qKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTIpLHIhPXQmJnIucD09LTEmJk45ZShlLHIsbil9ZnVuY3Rpb24gcUVuKGUsdCl7dmFyIG4scixhLG8sZixnO2ZvcihyPW5ldyBlMixmPUhIKG5ldyBJbChlLmcpKSxvPWYuYS5lYygpLktjKCk7by5PYigpOyl7aWYoYT1sKG8uUGIoKSwxMCksIWEpe3QuYmgoIlRoZXJlIGFyZSBubyBjbGFzc2VzIGluIGEgYmFsYW5jZWQgbGF5b3V0LiIpO2JyZWFrfWc9ZS5qW2EucF0sbj1sKEIxKHIsZyksMTUpLG58fChuPW5ldyBidCxoMihyLGcsbikpLG4uRmMoYSl9cmV0dXJuIHJ9ZnVuY3Rpb24gRDJ0KGUpe3ZhciB0LG4scixhLG87aWYoYT1sKHljKFY1ZShLNWUoZSkpLFBsKG5ldyB6cixuZXcgaHQsbmV3IEZuLGhlKGxlKG9jLDEpLGl0LDEwOCwwLFsoRmwoKSxFYyldKSkpLDE1KSxyPXk2LGEuZ2MoKT49Milmb3Iobj1hLktjKCksdD1HZShuLlBiKCkpO24uT2IoKTspbz10LHQ9R2Uobi5QYigpKSxyPWIuTWF0aC5taW4ociwobnIodCksdC0obnIobyksbykpKTtyZXR1cm4gcn1mdW5jdGlvbiBIRW4oZSx0KXt2YXIgbixyLGE7Zm9yKGE9bmV3IGJ0LHI9UnIodC5hLDApO3IuYiE9ci5kLmM7KW49bChCcihyKSw2NSksbi5iLmc9PWUuZyYmIXZuKG4uYi5jLERHKSYmcWUoUShuLmIsKEhjKCksJGQpKSkhPT1xZShRKG4uYywkZCkpJiYhVzUobmV3IGJuKG51bGwsbmV3IGtuKGEsMTYpKSxuZXcgdVhlKG4pKSYmJG4oYS5jLG4pO3JldHVybiBWcyhhLG5ldyBOdGUpLGF9ZnVuY3Rpb24gVkVuKGUsdCl7dmFyIG4scixhO2lmKHFlKHQpPT09cWUoWHIoZSkpKXJldHVybiEwO2lmKCFEZSh0LDE1KXx8KHI9bCh0LDE1KSxhPWUuZ2MoKSxhIT1yLmdjKCkpKXJldHVybiExO2lmKERlKHIsNTkpKXtmb3Iobj0wO248YTtuKyspaWYoIXlkKGUuWGIobiksci5YYihuKSkpcmV0dXJuITE7cmV0dXJuITB9ZWxzZSByZXR1cm4gVTZuKGUuS2MoKSxyLktjKCkpfWZ1bmN0aW9uIFVFbihlLHQsbixyLGEsbyl7dmFyIGYsZyx3LEU7Zm9yKGc9IV9rKEZpKGUuT2MoKSxuZXcgV2wobmV3IFV2KSkpLkJkKChBbSgpLHp4KSksZj1lLG89PShKcygpLHdmKSYmKGY9bGYoZikpLEU9Zi5LYygpO0UuT2IoKTspdz1sKEUuUGIoKSw3Miksdy5uLmE9dC5hLGc/dy5uLmI9dC5iKyhyLmItdy5vLmIpLzI6YT93Lm4uYj10LmI6dy5uLmI9dC5iK3IuYi13Lm8uYix0LmErPXcuby5hK259ZnVuY3Rpb24gR0VuKGUsdCl7dmFyIG4scixhLG8sZjtmb3IodC5VZygiUG9ydCBzaWRlIHByb2Nlc3NpbmciLDEpLGY9bmV3IEcoZS5hKTtmLmE8Zi5jLmMubGVuZ3RoOylhPWwocmUoZiksMTApLFVtdChhKTtmb3Iocj1uZXcgRyhlLmIpO3IuYTxyLmMuYy5sZW5ndGg7KWZvcihuPWwocmUociksMzApLG89bmV3IEcobi5hKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMTApLFVtdChhKTt0LlZnKCl9ZnVuY3Rpb24gS0VuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRTtpZihuKWZvcihvPW4uYS5sZW5ndGgscj1uZXcgRG0obyksZz0oci5iLXIuYSkqci5jPDA/KHNiKCksdG0pOm5ldyBjYihyKTtnLk9iKCk7KWY9bChnLlBiKCksMTcpLHc9SmsobixmLmEpLHcmJihFPU93bihZZyh3LEtmZSksdCksa2koZS5mLEUsdyksYT1QZCBpbiB3LmEsYSYmZkUoRSxZZyh3LFBkKSksbVUodyxFKSxoOWUodyxFKSl9ZnVuY3Rpb24gV0VuKGUsdCxuKXt2YXIgcixhLG8sZixnO2lmKGc9biwhZyYmKGc9QjRlKG5ldyBMOCwwKSksZy5VZyhMM3QsMSksX3Z0KGUuYyx0KSxmPUpNbihlLmEsdCksZi5nYygpPT0xKWN2dChsKGYuWGIoMCksMzYpLGcpO2Vsc2UgZm9yKG89MS9mLmdjKCksYT1mLktjKCk7YS5PYigpOyl7aWYocj1sKGEuUGIoKSwzNiksbi4kZygpKXJldHVybjtjdnQocixnLmVoKG8pKX1sdW4oZS5hLGYsdCksU1NuKHQpLGcuVmcoKX1mdW5jdGlvbiBJMnQoZSx0LG4pe3ZhciByLGEsbyxmLGc7aWYoYT1lLmYsIWEmJihhPWwoZS5hLmEuZWMoKS5LYygpLlBiKCksNjApKSxGQShhLHQsbiksZS5hLmEuZ2MoKSE9MSlmb3Iocj10Km4sZj1lLmEuYS5lYygpLktjKCk7Zi5PYigpOylvPWwoZi5QYigpLDYwKSxvIT1hJiYoZz1peChvKSxnLmYuZD8oby5kLmQrPXIrSDEsby5kLmEtPXIrSDEpOmcuZi5hJiYoby5kLmEtPXIrSDEpKX1mdW5jdGlvbiBLdWUoZSx0LG4scixhKXt2YXIgbyxmLGcsdyxFLEMsTCxCLHo7cmV0dXJuIGY9bi1lLGc9ci10LG89Yi5NYXRoLmF0YW4yKGYsZyksdz1vK0xoZSxFPW8tTGhlLEM9YSpiLk1hdGguc2luKHcpK2UsQj1hKmIuTWF0aC5jb3ModykrdCxMPWEqYi5NYXRoLnNpbihFKStlLHo9YSpiLk1hdGguY29zKEUpK3QsTzEoaGUobGUoRWEsMSksZHQsOCwwLFtuZXcgbHQoQyxCKSxuZXcgbHQoTCx6KV0pKX1mdW5jdGlvbiBZRW4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTDthPW4sQz10LG89QztkbyBvPWUuYVtvLnBdLGc9KEw9ZS5nW28ucF0semUoZS5wW0wucF0pK3plKGUuZFtvLnBdKS1vLmQuZCksdz1Zd24obyxyKSx3JiYoZj0oRT1lLmdbdy5wXSx6ZShlLnBbRS5wXSkremUoZS5kW3cucF0pK3cuby5iK3cuZC5hKSxhPWIuTWF0aC5taW4oYSxnLShmK2o1KGUuayxvLHcpKSkpO3doaWxlKEMhPW8pO3JldHVybiBhfWZ1bmN0aW9uIFhFbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMO2E9bixDPXQsbz1DO2RvIG89ZS5hW28ucF0sZj0oTD1lLmdbby5wXSx6ZShlLnBbTC5wXSkremUoZS5kW28ucF0pK28uby5iK28uZC5hKSx3PXR5bihvLHIpLHcmJihnPShFPWUuZ1t3LnBdLHplKGUucFtFLnBdKSt6ZShlLmRbdy5wXSktdy5kLmQpLGE9Yi5NYXRoLm1pbihhLGctKGYrajUoZS5rLG8sdykpKSk7d2hpbGUoQyE9byk7cmV0dXJuIGF9ZnVuY3Rpb24gTzJ0KGUsdCl7dmFyIG47aWYodC5VZygiRXF1YWwgV2hpdGVzcGFjZSBFbGltaW5hdG9yIiwxKSxQMShlLCh1ZygpLEdXKSkpaTRuKGwoYXQoZSxHVyksMTUpLHplKEdlKGF0KGUsWngpKSksKG49emUoR2UoYXQoZSxiTSkpKSx6ZShHZShhdChlLCh6MSgpLHdNKSkpKSxuKSk7ZWxzZSB0aHJvdyB1ZShuZXcgVnAoIlRoZSBncmFwaCBkb2VzIG5vdCBjb250YWluIHJvd3MuIikpO3QuVmcoKX1mdW5jdGlvbiBhdChlLHQpe3ZhciBuLHI7cmV0dXJuIHI9KCFlLm8mJihlLm89bmV3IHhsKChzdSgpLENnKSxMMixlLDApKSxuMShlLm8sdCkpLHI/PyhuPXQuU2coKSxEZShuLDQpJiYobj09bnVsbD8oIWUubyYmKGUubz1uZXcgeGwoKHN1KCksQ2cpLEwyLGUsMCkpLFlWKGUubyx0KSk6KCFlLm8mJihlLm89bmV3IHhsKChzdSgpLENnKSxMMixlLDApKSxHTihlLm8sdCxuKSkpLG4pfWZ1bmN0aW9uIHF5KCl7cXk9VSxFMD1uZXcgRDUoIkhfTEVGVCIsMCksbXA9bmV3IEQ1KCJIX0NFTlRFUiIsMSksVDA9bmV3IEQ1KCJIX1JJR0hUIiwyKSxTMD1uZXcgRDUoIlZfVE9QIiwzKSxFZz1uZXcgRDUoIlZfQ0VOVEVSIiw0KSxxZj1uZXcgRDUoIlZfQk9UVE9NIiw1KSxqaD1uZXcgRDUoIklOU0lERSIsNiksQzA9bmV3IEQ1KCJPVVRTSURFIiw3KSx6Zj1uZXcgRDUoIkhfUFJJT1JJVFkiLDgpfWZ1bmN0aW9uIFFFbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2lmKCF0LmYpdGhyb3cgdWUobmV3IFluKCJUaGUgaW5wdXQgZWRnZSBpcyBub3QgYSB0cmVlIGVkZ2UuIikpO2ZvcihvPW51bGwsYT1JaSxyPW5ldyBHKGUuZCk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDIxOCksZz1uLmQsdz1uLmUsenVlKGUsZyx0KSYmIXp1ZShlLHcsdCkmJihmPXcuZS1nLmUtbi5hLGY8YSYmKGE9ZixvPW4pKTtyZXR1cm4gb31mdW5jdGlvbiBKRW4oZSl7dmFyIHQsbixyLGEsbyxmO2lmKCEoZS5mLmUuYy5sZW5ndGg8PTEpKXt0PTAsYT14MnQoZSksbj1ncztkb3tmb3IodD4wJiYoYT1uKSxmPW5ldyBHKGUuZi5lKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMTUzKSwhUnQoQnQoUShvLChWTigpLHVBZSkpKSkmJihyPWhBbihlLG8pLE9pKFkwKG8uZCkscikpO249eDJ0KGUpfXdoaWxlKCFCZ24oZSx0KyssYSxuKSl9fWZ1bmN0aW9uIFpFbihlLHQpe3ZhciBuLHIsYSxvLGY7Zm9yKG89ZS5nLmEsZj1lLmcuYixyPW5ldyBHKGUuZCk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDcyKSxhPW4ubixlLmE9PShSMSgpLE1UKXx8ZS5pPT0oQ3QoKSxhcik/YS5hPW86ZS5hPT1EVHx8ZS5pPT0oQ3QoKSxlcik/YS5hPW8rZS5qLmEtbi5vLmE6YS5hPW8rKGUuai5hLW4uby5hKS8yLGEuYj1mLE9pKGEsdCksZis9bi5vLmIrZS5lfWZ1bmN0aW9uIGVUbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMO0U9ZSx3PWFBKEUsImluZGl2aWR1YWxTcGFjaW5ncyIpLHcmJihyPVAxKHQsKHBpKCkscjkpKSxmPSFyLGYmJihhPW5ldyBFSSxIaSh0LHI5LGEpKSxnPWwoYXQodCxyOSksMzg1KSxMPXcsbz1udWxsLEwmJihvPShDPWFjZShMLFdlKHp0LGR0LDIsMCw2LDEpKSxuZXcgYXNlKEwsQykpKSxvJiYobj1uZXcgVHR0KEwsZyksdG8obyxuKSkpfWZ1bmN0aW9uIHRUbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEI7cmV0dXJuIHc9bnVsbCxMPWUsQz1udWxsLChrNHQgaW4gTC5hfHxFNHQgaW4gTC5hfHwkRyBpbiBMLmEpJiYoRT1udWxsLEI9RDdlKHQpLGY9YUEoTCxrNHQpLG49bmV3IEtYZShCKSxiNW4obi5hLGYpLGc9YUEoTCxFNHQpLHI9bmV3IHJRZShCKSxtNW4oci5hLGcpLG89QXcoTCwkRyksYT1uZXcgYVFlKEIpLEU9KHR4bihhLmEsbyksbyksQz1FKSx3PUMsd31mdW5jdGlvbiBuVG4oZSx0KXt2YXIgbixyLGE7aWYodD09PWUpcmV0dXJuITA7aWYoRGUodCw1NTIpKXtpZihhPWwodCw4NDkpLGUuYS5kIT1hLmEuZHx8VjUoZSkuZ2MoKSE9VjUoYSkuZ2MoKSlyZXR1cm4hMTtmb3Iocj1WNShhKS5LYygpO3IuT2IoKTspaWYobj1sKHIuUGIoKSw0MjUpLFBvdChlLG4uYS5sZCgpKSE9bChuLmEubWQoKSwxNikuZ2MoKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiByVG4oZSl7dmFyIHQsbixyLGE7cmV0dXJuIHI9bChlLmEsMTcpLmEsYT1sKGUuYiwxNykuYSx0PXIsbj1hLHI9PTAmJmE9PTA/bi09MTpyPT0tMSYmYTw9MD8odD0wLG4tPTIpOnI8PTAmJmE+MD8odC09MSxuLT0xKTpyPj0wJiZhPDA/KHQrPTEsbis9MSk6cj4wJiZhPj0wPyh0LT0xLG4rPTEpOih0Kz0xLG4tPTEpLG5ldyBjYShwdCh0KSxwdChuKSl9ZnVuY3Rpb24gaVRuKGUsdCl7cmV0dXJuIGUuYzx0LmM/LTE6ZS5jPnQuYz8xOmUuYjx0LmI/LTE6ZS5iPnQuYj8xOmUuYSE9dC5hP2VzKGUuYSktZXModC5hKTplLmQ9PShvQSgpLHVNKSYmdC5kPT1jTT8tMTplLmQ9PWNNJiZ0LmQ9PXVNPzE6MH1mdW5jdGlvbiBOMnQoZSx0KXt2YXIgbixyLGEsbyxmO3JldHVybiBvPXQuYSxvLmMuaT09dC5iP2Y9by5kOmY9by5jLG8uYy5pPT10LmI/cj1vLmM6cj1vLmQsYT1TNW4oZS5hLGYsciksYT4wJiZhPHk2PyhuPVlFbihlLmEsci5pLGEsZS5jKSxMaHQoZS5hLHIuaSwtbiksbj4wKTphPDAmJi1hPHk2PyhuPVhFbihlLmEsci5pLC1hLGUuYyksTGh0KGUuYSxyLmksbiksbj4wKTohMX1mdW5jdGlvbiBzVG4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTDtmb3IoYT0odC1lLmQpL2UuYy5jLmxlbmd0aCxvPTAsZS5hKz1uLGUuZD10LEw9bmV3IEcoZS5jKTtMLmE8TC5jLmMubGVuZ3RoOylDPWwocmUoTCksMjcpLEU9Qy5nLHc9Qy5mLFV1KEMsQy5pK28qYSksR3UoQyxDLmorcipuKSxEdyhDLEMuZythKSxNdyhDLGUuYSksKytvLGc9Qy5nLGY9Qy5mLGM5ZShDLG5ldyBsdChnLGYpLG5ldyBsdChFLHcpKX1mdW5jdGlvbiBhVG4oZSl7dmFyIHQsbixyLGEsbyxmLGc7aWYoZT09bnVsbClyZXR1cm4gbnVsbDtmb3IoZz1lLmxlbmd0aCxhPShnKzEpLzJ8MCxmPVdlKEFsLEM2LDI4LGEsMTUsMSksZyUyIT0wJiYoZlstLWFdPW5rZSgoWG4oZy0xLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoZy0xKSkpKSxuPTAscj0wO248YTsrK24pdD1ua2UoY28oZSxyKyspKSxvPW5rZShjbyhlLHIrKykpLGZbbl09KHQ8PDR8byk8PDI0Pj4yNDtyZXR1cm4gZn1mdW5jdGlvbiBvVG4oZSl7aWYoZS56ZSgpKXt2YXIgdD1lLmM7dC5BZSgpP2Uubz0iWyIrdC5uOnQuemUoKT9lLm89IlsiK3QueGUoKTplLm89IltMIit0LnhlKCkrIjsiLGUuYj10LndlKCkrIltdIixlLms9dC55ZSgpKyJbXSI7cmV0dXJufXZhciBuPWUuaixyPWUuZDtyPXIuc3BsaXQoIi8iKSxlLm89WGNlKCIuIixbbixYY2UoIiQiLHIpXSksZS5iPVhjZSgiLiIsW24sWGNlKCIuIixyKV0pLGUuaz1yW3IubGVuZ3RoLTFdfWZ1bmN0aW9uIGNUbihlLHQpe3ZhciBuLHIsYSxvLGY7Zm9yKGY9bnVsbCxvPW5ldyBHKGUuZS5hKTtvLmE8by5jLmMubGVuZ3RoOylpZihhPWwocmUobyksMTI1KSxhLmIuYS5jLmxlbmd0aD09YS5nLmEuYy5sZW5ndGgpe2ZvcihyPWEuZSxmPXE5bihhKSxuPWEuZS1sKGYuYSwxNykuYSsxO248YS5lK2woZi5iLDE3KS5hO24rKyl0W25dPHRbcl0mJihyPW4pO3Rbcl08dFthLmVdJiYoLS10W2EuZV0sKyt0W3JdLGEuZT1yKX19ZnVuY3Rpb24gV3VlKGUpe3ZhciB0LG4scixhLG8sZixnLHc7Zm9yKGE9Z3Mscj1pYSxuPW5ldyBHKGUuZS5iKTtuLmE8bi5jLmMubGVuZ3RoOylmb3IodD1sKHJlKG4pLDMwKSxmPW5ldyBHKHQuYSk7Zi5hPGYuYy5jLmxlbmd0aDspbz1sKHJlKGYpLDEwKSx3PXplKGUucFtvLnBdKSxnPXcremUoZS5iW2UuZ1tvLnBdLnBdKSxhPWIuTWF0aC5taW4oYSx3KSxyPWIuTWF0aC5tYXgocixnKTtyZXR1cm4gci1hfWZ1bmN0aW9uIFAydChlKXtrbGUoKTt2YXIgdCxuLHIsYTtyZXR1cm4gcj1wZChlLGNsKDM1KSksdD1yPT0tMT9lOihHYSgwLHIsZS5sZW5ndGgpLGUuc3Vic3RyKDAscikpLG49cj09LTE/bnVsbDooWG4ocisxLGUubGVuZ3RoKzEpLGUuc3Vic3RyKHIrMSkpLGE9VG1uKFNQZSx0KSxhP24hPW51bGwmJihhPU0wdChhLChucihuKSxuKSkpOihhPVVJbih0KSxGbW4oU1BlLHQsYSksbiE9bnVsbCYmKGE9TTB0KGEsbikpKSxhfWZ1bmN0aW9uIFA5ZShlLHQsbixyKXt2YXIgYSxvLGYsZyx3O2ZvcihhPWhrZShlLHQpLGc9MCx3PWEuZ2MoKTtnPHc7KytnKWlmKG89bChhLlhiKGcpLDE3OSksdm4ocixXayhpYyhlLG8pKSkpe2lmKGY9SE8oaWMoZSxvKSksbj09bnVsbCl7aWYoZj09bnVsbClyZXR1cm4gb31lbHNlIGlmKHZuKG4sZikpcmV0dXJuIG99cmV0dXJuIG51bGx9ZnVuY3Rpb24gQjllKGUsdCxuLHIpe3ZhciBhLG8sZixnLHc7Zm9yKGE9YWxlKGUsdCksZz0wLHc9YS5nYygpO2c8dzsrK2cpaWYobz1sKGEuWGIoZyksMTc5KSx2bihyLFdrKGljKGUsbykpKSl7aWYoZj1ITyhpYyhlLG8pKSxuPT1udWxsKXtpZihmPT1udWxsKXJldHVybiBvfWVsc2UgaWYodm4obixmKSlyZXR1cm4gb31yZXR1cm4gbnVsbH1mdW5jdGlvbiB1VG4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdztpZihmPW5ldyBYMixnPVd1KGUuZS5EaCgpLHQpLHI9bChlLmcsMTI0KSxGbygpLGwodCw2OSkueGsoKSlmb3Iobz0wO288ZS5pOysrbylhPXJbb10sZy5hbShhLkxrKCkpJiZxcihmLGEpO2Vsc2UgZm9yKG89MDtvPGUuaTsrK28pYT1yW29dLGcuYW0oYS5MaygpKSYmKHc9YS5tZCgpLHFyKGYsbj96QShlLHQsbyxmLmksdyk6dykpO3JldHVybiBhNmUoZil9ZnVuY3Rpb24gQjJ0KGUpe3ZhciB0LG4scixhLG8sZixnO2lmKGUmJih0PWUucWkoRmYpLHQmJihmPWVpKG4xKCghdC5iJiYodC5iPW5ldyBkaCgoVG4oKSxObyksWWMsdCkpLHQuYiksImNvbnZlcnNpb25EZWxlZ2F0ZXMiKSksZiE9bnVsbCkpKXtmb3IoZz1uZXcgYnQscj1HeShmLCJcXHcrIiksYT0wLG89ci5sZW5ndGg7YTxvOysrYSluPXJbYV0sJG4oZy5jLG4pO3JldHVybiBnfXJldHVybiBDbigpLENuKCksX299ZnVuY3Rpb24gRjJ0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRTtmb3IoZj10PT0xP3MxZTppMWUsbz1mLmEuZWMoKS5LYygpO28uT2IoKTspZm9yKGE9bChvLlBiKCksODgpLHc9bCgkaShlLmYuYyxhKSwyMSkuS2MoKTt3Lk9iKCk7KXN3aXRjaChnPWwody5QYigpLDQyKSxyPWwoZy5iLDg2KSxFPWwoZy5hLDE5NCksbj1FLmMsYS5nKXtjYXNlIDI6Y2FzZSAxOnIuZy5kKz1uO2JyZWFrO2Nhc2UgNDpjYXNlIDM6ci5nLmMrPW59fWZ1bmN0aW9uIGxUbihlLHQpe3ZhciBuLHIsYSxvLGY7Zm9yKG49bmV3IExBKE5UKSxhPSh5eCgpLGhlKGxlKE5ULDEpLGl0LDIzMiwwLFtPVCxxTCxJVCxoNCxONixPNl0pKSxvPTAsZj1hLmxlbmd0aDtvPGY7KytvKXI9YVtvXSx0NGUobixyLG5ldyBidCk7cmV0dXJuIElzKGZjKEZpKERjKG5ldyBibihudWxsLG5ldyBrbihlLmIsMTYpKSxuZXcgVFopLG5ldyBnUyksbmV3IHRZZSh0KSksbmV3IG5ZZShuKSksbn1mdW5jdGlvbiBUVShlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKG89dC5LYygpO28uT2IoKTspYT1sKG8uUGIoKSwyNyksQz1hLmkrYS5nLzIsQj1hLmorYS5mLzIsdz1lLmYsZj13Lmkrdy5nLzIsZz13Lmordy5mLzIsRT1DLWYsTD1CLWcscj1iLk1hdGguc3FydChFKkUrTCpMKSxFKj1lLmUvcixMKj1lLmUvcixuPyhDLT1FLEItPUwpOihDKz1FLEIrPUwpLFV1KGEsQy1hLmcvMiksR3UoYSxCLWEuZi8yKX1mdW5jdGlvbiBjNihlKXt2YXIgdCxuLHI7aWYoIWUuYyYmZS5iIT1udWxsKXtmb3IodD1lLmIubGVuZ3RoLTQ7dD49MDt0LT0yKWZvcihuPTA7bjw9dDtuKz0yKShlLmJbbl0+ZS5iW24rMl18fGUuYltuXT09PWUuYltuKzJdJiZlLmJbbisxXT5lLmJbbiszXSkmJihyPWUuYltuKzJdLGUuYltuKzJdPWUuYltuXSxlLmJbbl09cixyPWUuYltuKzNdLGUuYltuKzNdPWUuYltuKzFdLGUuYltuKzFdPXIpO2UuYz0hMH19ZnVuY3Rpb24gaFRuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2ZvcihFPS0xLEM9MCxmPWUsZz0wLHc9Zi5sZW5ndGg7Zzx3OysrZyl7Zm9yKG89ZltnXSxuPW5ldyBPaXQoRT09LTE/ZVswXTplW0VdLHQsKEVBKCksU1cpKSxyPTA7cjxvLmxlbmd0aDtyKyspZm9yKGE9cisxO2E8by5sZW5ndGg7YSsrKW5zKG9bcl0sKGZ0KCksS2kpKSYmbnMob1thXSxLaSkmJmR3dChuLG9bcl0sb1thXSk+MCYmKytDOysrRX1yZXR1cm4gQ31mdW5jdGlvbiBnMChlKXt2YXIgdCxuO3JldHVybiBuPW5ldyBUaChfbShlLlJtKSksbi5hKz0iQCIsaGkobiwodD1lcyhlKT4+PjAsdC50b1N0cmluZygxNikpKSxlLlZoKCk/KG4uYSs9IiAoZVByb3h5VVJJOiAiLHd1KG4sZS5faCgpKSxlLktoKCkmJihuLmErPSIgZUNsYXNzOiAiLHd1KG4sZS5LaCgpKSksbi5hKz0iKSIpOmUuS2goKSYmKG4uYSs9IiAoZUNsYXNzOiAiLHd1KG4sZS5LaCgpKSxuLmErPSIpIiksbi5hfWZ1bmN0aW9uIEhBKGUpe3ZhciB0LG4scixhO2lmKGUuZSl0aHJvdyB1ZShuZXcgbmMoKEdnKFIwZSkscGhlK1IwZS5rK2JoZSkpKTtmb3IoZS5kPT0oSnMoKSxKMSkmJlVVKGUsdWMpLG49bmV3IEcoZS5hLmEpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwzMTYpLHQuZz10Lmk7Zm9yKGE9bmV3IEcoZS5hLmIpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSw2MCksci5pPWlhO3JldHVybiBlLmIuY2YoZSksZX1mdW5jdGlvbiBmVG4oZSx0KXt2YXIgbixyLGEsbyxmO2lmKHQ8MiplLmIpdGhyb3cgdWUobmV3IFluKCJUaGUga25vdCB2ZWN0b3IgbXVzdCBoYXZlIGF0IGxlYXN0IHR3byB0aW1lIHRoZSBkaW1lbnNpb24gZWxlbWVudHMuIikpO2ZvcihlLmY9MSxhPTA7YTxlLmI7YSsrKXZ0KGUuZSwwKTtmb3IoZj10KzEtMiplLmIsbj1mLG89MTtvPGY7bysrKXZ0KGUuZSxvL24pO2lmKGUuZClmb3Iocj0wO3I8ZS5iO3IrKyl2dChlLmUsMSl9ZnVuY3Rpb24gUjJ0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2lmKEU9dCxDPWwodlYoVWFlKGUuaSksRSksMjcpLCFDKXRocm93IGE9WWcoRSxQZCksZz0iVW5hYmxlIHRvIGZpbmQgZWxrIG5vZGUgZm9yIGpzb24gb2JqZWN0ICciK2Esdz1nKyInIFBhbmljISIsdWUobmV3IGRkKHcpKTtvPUF3KEUsImVkZ2VzIiksbj1uZXcgYnR0KGUsQyksUWtuKG4uYSxuLmIsbyksZj1BdyhFLFdmZSkscj1uZXcgalhlKGUpLHQ4bihyLmEsZil9ZnVuY3Rpb24gajJ0KGUsdCxuLHIpe3ZhciBhLG8sZixnLHc7aWYociE9bnVsbCl7aWYoYT1lLmRbdF0sYSl7Zm9yKG89YS5nLHc9YS5pLGc9MDtnPHc7KytnKWlmKGY9bChvW2ddLDEzNiksZi5CaSgpPT1uJiZQaShyLGYubGQoKSkpcmV0dXJuIGd9fWVsc2UgaWYoYT1lLmRbdF0sYSl7Zm9yKG89YS5nLHc9YS5pLGc9MDtnPHc7KytnKWlmKGY9bChvW2ddLDEzNikscWUoZi5sZCgpKT09PXFlKHIpKXJldHVybiBnfXJldHVybi0xfWZ1bmN0aW9uIFZFKGUsdCl7dmFyIG4scixhO3JldHVybiBuPXQ9PW51bGw/aGMoem8oZS5mLG51bGwpKTp5XyhlLmksdCksRGUobiwyNDEpPyhhPWwobiwyNDEpLGEuemkoKT09bnVsbCxhKTpEZShuLDUwNyk/KHI9bChuLDIwMzcpLGE9ci5hLGEmJihhLnliPT1udWxsfHwodD09bnVsbD9qdShlLmYsbnVsbCxhKTpCdyhlLmksdCxhKSkpLGEpOm51bGx9ZnVuY3Rpb24gZFRuKGUpe1o5ZSgpO3ZhciB0LG4scixhLG8sZixnO2lmKGU9PW51bGx8fChhPWUubGVuZ3RoLGElMiE9MCkpcmV0dXJuIG51bGw7Zm9yKHQ9aVYoZSksbz1hLzJ8MCxuPVdlKEFsLEM2LDI4LG8sMTUsMSkscj0wO3I8bztyKyspe2lmKGY9R01bdFtyKjJdXSxmPT0tMXx8KGc9R01bdFtyKjIrMV1dLGc9PS0xKSlyZXR1cm4gbnVsbDtuW3JdPShmPDw0fGcpPDwyND4+MjR9cmV0dXJuIG59ZnVuY3Rpb24gZ1RuKGUsdCxuKXt2YXIgcixhLG87aWYoYT1sKFFvKGUuaSx0KSwzMTQpLCFhKWlmKGE9bmV3IHlodChlLmQsdCxuKSxROChlLmksdCxhKSwkOGUodCkpdmhuKGUuYSx0LmMsdC5iLGEpO2Vsc2Ugc3dpdGNoKG89UTluKHQpLHI9bChRbyhlLnAsbyksMjUyKSxvLmcpe2Nhc2UgMTpjYXNlIDM6YS5qPSEwLFhpZShyLHQuYixhKTticmVhaztjYXNlIDQ6Y2FzZSAyOmEuaz0hMCxYaWUocix0LmMsYSl9cmV0dXJuIGF9ZnVuY3Rpb24gcFRuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2Zvcih3PWVnKGUuYy1lLmImZS5hLmxlbmd0aC0xKSxFPW51bGwsQz1udWxsLG89bmV3IG5BKGUpO28uYSE9by5iOylhPWwoRlYobyksMTApLG49KGc9bChRKGEsKGZ0KCksbzEpKSwxMiksZz9nLmk6bnVsbCkscj0oZj1sKFEoYSwkZiksMTIpLGY/Zi5pOm51bGwpLChFIT1ufHxDIT1yKSYmKG0ydCh3LHQpLEU9bixDPXIpLCRuKHcuYyxhKTttMnQodyx0KX1mdW5jdGlvbiBiVG4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFO2lmKGc9bmV3IFgyLHc9V3UoZS5lLkRoKCksdCksYT1sKGUuZywxMjQpLEZvKCksbCh0LDY5KS54aygpKWZvcihmPTA7ZjxlLmk7KytmKW89YVtmXSx3LmFtKG8uTGsoKSkmJnFyKGcsbyk7ZWxzZSBmb3IoZj0wO2Y8ZS5pOysrZilvPWFbZl0sdy5hbShvLkxrKCkpJiYoRT1vLm1kKCkscXIoZyxyP3pBKGUsdCxmLGcuaSxFKTpFKSk7cmV0dXJuIE84ZShnLG4pfWZ1bmN0aW9uICQydChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEU7aWYoYT1lLmJbdC5wXSxhPj0wKXJldHVybiBhO2ZvcihvPTEsZz1uZXcgRyh0LmopO2cuYTxnLmMuYy5sZW5ndGg7KWZvcihmPWwocmUoZyksMTIpLHI9bmV3IEcoZi5nKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMTgpLEU9bi5kLmksdCE9RSYmKHc9JDJ0KGUsRSksbz1iLk1hdGgubWF4KG8sdysxKSk7cmV0dXJuIGg1bihlLHQsbyksb31mdW5jdGlvbiB6MnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFO2lmKGE9ZS5iW3QucF0sYT49MClyZXR1cm4gYTtmb3Iobz0xLGc9bmV3IEcodC5qKTtnLmE8Zy5jLmMubGVuZ3RoOylmb3IoZj1sKHJlKGcpLDEyKSxyPW5ldyBHKGYuZSk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDE4KSxFPW4uYy5pLHQhPUUmJih3PXoydChlLEUpLG89Yi5NYXRoLm1heChvLHcrMSkpO3JldHVybiBxNm4oZSx0LG8pLG99ZnVuY3Rpb24gcTJ0KGUsdCxuKXt2YXIgcixhLG87Zm9yKHI9MTtyPGUuYy5sZW5ndGg7cisrKXtmb3Iobz0oU24ocixlLmMubGVuZ3RoKSxsKGUuY1tyXSwxMCkpLGE9cjthPjAmJnQuTmUoKFNuKGEtMSxlLmMubGVuZ3RoKSxsKGUuY1thLTFdLDEwKSksbyk+MDspcmYoZSxhLChTbihhLTEsZS5jLmxlbmd0aCksbChlLmNbYS0xXSwxMCkpKSwtLWE7U24oYSxlLmMubGVuZ3RoKSxlLmNbYV09b31uLmE9bmV3IFByLG4uYj1uZXcgUHJ9ZnVuY3Rpb24gbVRuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDO2ZvcihDPShyPWwodC5lJiZ0LmUoKSw5KSxuZXcgWmgocixsKGMwKHIsci5sZW5ndGgpLDkpLDApKSx3PUd5KG4sIltcXFtcXF1cXHMsXSsiKSxvPXcsZj0wLGc9by5sZW5ndGg7ZjxnOysrZilpZihhPW9bZl0sJHkoYSkubGVuZ3RoIT0wKXtpZihFPVhwdChlLGEpLEU9PW51bGwpcmV0dXJuIG51bGw7ZDAoQyxsKEUsMjIpKX1yZXR1cm4gQ31mdW5jdGlvbiB2VG4oZSl7dmFyIHQsbixyLGE7Zm9yKGE9ZS5sZW5ndGgsdD1udWxsLHI9MDtyPGE7cisrKW49KFhuKHIsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChyKSkscGQoIi4qKz97WygpfFxcXiQiLGNsKG4pKT49MD8odHx8KHQ9bmV3IGhfLHI+MCYmWG8odCwoR2EoMCxyLGUubGVuZ3RoKSxlLnN1YnN0cigwLHIpKSkpLHQuYSs9IlxcIixVayh0LG4mWnMpKTp0JiZVayh0LG4mWnMpO3JldHVybiB0P3QuYTplfWZ1bmN0aW9uIHdUbihlKXt2YXIgdCxuLHI7Zm9yKG49bmV3IEcoZS5hLmEuYik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDg2KSxyPShucigwKSwwKSxyPjAmJighKFVnKGUuYS5jKSYmdC5uLmQpJiYhKEI1KGUuYS5jKSYmdC5uLmIpJiYodC5nLmQtPWIuTWF0aC5tYXgoMCxyLzItLjUpKSwhKFVnKGUuYS5jKSYmdC5uLmEpJiYhKEI1KGUuYS5jKSYmdC5uLmMpJiYodC5nLmErPWIuTWF0aC5tYXgoMCxyLTEpKSl9ZnVuY3Rpb24gSDJ0KGUsdCxuKXt2YXIgcixhO2lmKChlLmMtZS5iJmUuYS5sZW5ndGgtMSk9PTIpdD09KEN0KCksUW4pfHx0PT1hcj8odVYobCh3QShlKSwxNSksKEloKCksa2cpKSx1VihsKHdBKGUpLDE1KSxHYikpOih1VihsKHdBKGUpLDE1KSwoSWgoKSxHYikpLHVWKGwod0EoZSksMTUpLGtnKSk7ZWxzZSBmb3IoYT1uZXcgbkEoZSk7YS5hIT1hLmI7KXI9bChGVihhKSwxNSksdVYocixuKX1mdW5jdGlvbiB5VG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdztmb3IoYT0kayhuZXcgeXdlKGUpKSxnPW5ldyBVYShhLGEuYy5sZW5ndGgpLG89JGsobmV3IHl3ZSh0KSksdz1uZXcgVWEobyxvLmMubGVuZ3RoKSxmPW51bGw7Zy5iPjAmJncuYj4wJiYobj0obXIoZy5iPjApLGwoZy5hLlhiKGcuYz0tLWcuYiksMjcpKSxyPShtcih3LmI+MCksbCh3LmEuWGIody5jPS0tdy5iKSwyNykpLG49PXIpOylmPW47cmV0dXJuIGZ9ZnVuY3Rpb24gVjJ0KGUsdCxuKXt2YXIgcixhLG8sZjtVb3QoZSx0KT5Vb3QoZSxuKT8ocj1PYyhuLChDdCgpLGFyKSksZS5kPXIuZGMoKT8wOlRhZShsKHIuWGIoMCksMTIpKSxmPU9jKHQsZXIpLGUuYj1mLmRjKCk/MDpUYWUobChmLlhiKDApLDEyKSkpOihhPU9jKG4sKEN0KCksZXIpKSxlLmQ9YS5kYygpPzA6VGFlKGwoYS5YYigwKSwxMikpLG89T2ModCxhciksZS5iPW8uZGMoKT8wOlRhZShsKG8uWGIoMCksMTIpKSl9ZnVuY3Rpb24gVTJ0KGUsdCl7dmFyIG4scixhLG87Zm9yKG49ZS5vLmEsbz1sKGwoJGkoZS5yLHQpLDIxKSw4NykuS2MoKTtvLk9iKCk7KWE9bChvLlBiKCksMTE3KSxhLmUuYT1uKnplKEdlKGEuYi5vZihwSykpKSxhLmUuYj0ocj1hLmIsci5wZigocGkoKSxyaCkpP3IuYWcoKT09KEN0KCksUW4pPy1yLk1mKCkuYi16ZShHZShyLm9mKHJoKSkpOnplKEdlKHIub2YocmgpKSk6ci5hZygpPT0oQ3QoKSxRbik/LXIuTWYoKS5iOjApfWZ1bmN0aW9uIHhUbihlLHQpe3ZhciBuLHIsYSxvO2Zvcih0LlVnKCJTZWxmLUxvb3AgcHJlLXByb2Nlc3NpbmciLDEpLHI9bmV3IEcoZS5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMTApLG81bihuKSYmKGE9KG89bmV3IGlkdChuKSxydChuLChmdCgpLGgzKSxvKSxVX24obyksbyksSXMoZmMoRGMobmV3IGJuKG51bGwsbmV3IGtuKGEuZCwxNikpLG5ldyBDaiksbmV3IFNqKSxuZXcgSFopLFJDbihhKSk7dC5WZygpfWZ1bmN0aW9uIGtUbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3O3Q9ITAsYT1udWxsLG89bnVsbDtlOmZvcih3PW5ldyBHKGUuYSk7dy5hPHcuYy5jLmxlbmd0aDspZm9yKGc9bChyZSh3KSwxMCkscj1uZXcgaHIoZHIoa2EoZykuYS5LYygpLG5ldyBqKSk7anIocik7KXtpZihuPWwoeHIociksMTgpLGEmJmEhPWcpe3Q9ITE7YnJlYWsgZX1pZihhPWcsZj1uLmMuaSxvJiZvIT1mKXt0PSExO2JyZWFrIGV9bz1mfXJldHVybiB0fWZ1bmN0aW9uIEVUbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3O2ZvcihvPS0xLGc9LTEsZj0wO2Y8dC5jLmxlbmd0aCYmKGE9KFNuKGYsdC5jLmxlbmd0aCksbCh0LmNbZl0sMzM5KSksIShhLmM+ZS5jKSk7ZisrKWEuYT49ZS5zJiYobzwwJiYobz1mKSxnPWYpO3JldHVybiB3PShlLnMrZS5jKS8yLG8+PTAmJihyPXVfbihlLHQsbyxnKSx3PW9sbigoU24ocix0LmMubGVuZ3RoKSxsKHQuY1tyXSwzMzkpKSksZ0VuKHQscixuKSksd31mdW5jdGlvbiBXcihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEU7Zm9yKGY9KG89bmV3IENJLG8pLGc3ZShmLChucih0KSx0KSksRT0oIWYuYiYmKGYuYj1uZXcgZGgoKFRuKCksTm8pLFljLGYpKSxmLmIpLHc9MTt3PG4ubGVuZ3RoO3crPTIpR04oRSxuW3ctMV0sblt3XSk7Zm9yKHI9KCFlLkFiJiYoZS5BYj1uZXcgbnQobWksZSwwLDMpKSxlLkFiKSxnPTA7ZzwwOysrZylhPWpnbihsKE9lKHIsci5pLTEpLDU5OCkpLHI9YTtxcihyLGYpfWZ1bmN0aW9uIEcydChlLHQsbil7dmFyIHIsYSxvO2ZvcihUZm4uY2FsbCh0aGlzLG5ldyBidCksdGhpcy5hPXQsdGhpcy5iPW4sdGhpcy5lPWUscj0oZS5iJiZnbGUoZSksZS5hKSx0aGlzLmQ9RWF0KHIuYSx0aGlzLmEpLHRoaXMuYz1FYXQoci5iLHRoaXMuYiksdjRuKHRoaXMsdGhpcy5kLHRoaXMuYyksVmtuKHRoaXMpLG89dGhpcy5lLmUuYS5lYygpLktjKCk7by5PYigpOylhPWwoby5QYigpLDI3MiksYS5jLmMubGVuZ3RoPjAmJnNNbih0aGlzLGEpfWZ1bmN0aW9uIEY5ZShlLHQsbixyLGEsbyl7dmFyIGYsZyx3O2lmKCFhW3QuYV0pe2ZvcihhW3QuYV09ITAsZj1yLCFmJiYoZj1uZXcgS0gpLHZ0KGYuZSx0KSx3PW9bdC5hXS5LYygpO3cuT2IoKTspZz1sKHcuUGIoKSwyOTApLCEoZy5kPT1ufHxnLmM9PW4pJiYoZy5jIT10JiZGOWUoZSxnLmMsdCxmLGEsbyksZy5kIT10JiZGOWUoZSxnLmQsdCxmLGEsbyksdnQoZi5jLGcpLHJhKGYuZCxnLmIpKTtyZXR1cm4gZn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBUVG4oZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKHQ9MCxhPW5ldyBHKGUuZSk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDE4KSxuPVc1KG5ldyBibihudWxsLG5ldyBrbihyLmIsMTYpKSxuZXcgb1opLG4mJisrdDtmb3IoZj1uZXcgRyhlLmcpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxOCksZz1XNShuZXcgYm4obnVsbCxuZXcga24oby5iLDE2KSksbmV3IGNaKSxnJiYrK3Q7cmV0dXJuIHQ+PTJ9ZnVuY3Rpb24gQ1RuKGUsdCxuLHIsYSl7dmFyIG8sZixnLHcsRSxDO2ZvcihvPWUuYy5kLmosZj1sKGZmKG4sMCksOCksQz0xO0M8bi5iO0MrKylFPWwoZmYobixDKSw4KSxDcyhyLGYsci5jLmIsci5jKSxnPW1kKE9pKG5ldyBFbyhmKSxFKSwuNSksdz1tZChuZXcgYm9lKFU3ZShvKSksYSksT2koZyx3KSxDcyhyLGcsci5jLmIsci5jKSxmPUUsbz10PT0wPyRWKG8pOmY4ZShvKTt1aShyLChtcihuLmIhPTApLGwobi5jLmIuYyw4KSkpfWZ1bmN0aW9uIFNUbihlKXtxeSgpO3ZhciB0LG4scjtyZXR1cm4gbj1ycyhqaCxoZShsZShLbywxKSxpdCw5NSwwLFtDMF0pKSwhKHlOKE5IKG4sZSkpPjF8fCh0PXJzKEUwLGhlKGxlKEtvLDEpLGl0LDk1LDAsW21wLFQwXSkpLHlOKE5IKHQsZSkpPjEpfHwocj1ycyhTMCxoZShsZShLbywxKSxpdCw5NSwwLFtFZyxxZl0pKSx5TihOSChyLGUpKT4xKSl9ZnVuY3Rpb24gUjllKGUsdCxuKXt2YXIgcixhLG87Zm9yKG89bmV3IEcoZS50KTtvLmE8by5jLmMubGVuZ3RoOylyPWwocmUobyksMjc0KSxyLmIuczwwJiZyLmM+MCYmKHIuYi5uLT1yLmMsci5iLm48PTAmJnIuYi51PjAmJnVpKHQsci5iKSk7Zm9yKGE9bmV3IEcoZS5pKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMjc0KSxyLmEuczwwJiZyLmM+MCYmKHIuYS51LT1yLmMsci5hLnU8PTAmJnIuYS5uPjAmJnVpKG4sci5hKSl9ZnVuY3Rpb24gQ1UoZSl7dmFyIHQsbixyLGEsbztpZihlLmc9PW51bGwmJihlLmQ9ZS5iaihlLmYpLHFyKGUsZS5kKSxlLmMpKXJldHVybiBvPWUuZixvO2lmKHQ9bChlLmdbZS5pLTFdLDUxKSxhPXQuUGIoKSxlLmU9dCxuPWUuYmooYSksbi5PYigpKWUuZD1uLHFyKGUsbik7ZWxzZSBmb3IoZS5kPW51bGw7IXQuT2IoKSYmKFRzKGUuZywtLWUuaSxudWxsKSxlLmkhPTApOylyPWwoZS5nW2UuaS0xXSw1MSksdD1yO3JldHVybiBhfWZ1bmN0aW9uIF9UbihlLHQpe3ZhciBuLHIsYSxvLGYsZztpZihyPXQsYT1yLkxrKCksdXAoZS5lLGEpKXtpZihhLlNpKCkmJnFIKGUsYSxyLm1kKCkpKXJldHVybiExfWVsc2UgZm9yKGc9V3UoZS5lLkRoKCksYSksbj1sKGUuZywxMjQpLG89MDtvPGUuaTsrK28paWYoZj1uW29dLGcuYW0oZi5MaygpKSlyZXR1cm4gUGkoZixyKT8hMToobChuNihlLG8sdCksNzYpLCEwKTtyZXR1cm4gcXIoZSx0KX1mdW5jdGlvbiBBVG4oZSx0LG4scil7dmFyIGEsbyxmLGc7Zm9yKGE9bmV3IG9wKGUpLHgoYSwoWm4oKSxjdSkpLHJ0KGEsKGZ0KCksemkpLHQpLHJ0KGEsV0wscikscnQoYSwoTnQoKSxNcyksKFJhKCksTXUpKSxydChhLG8xLHQuYykscnQoYSwkZix0LmQpLHlidCh0LGEpLGc9Yi5NYXRoLmZsb29yKG4vMiksZj1uZXcgRyhhLmopO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxMiksby5uLmI9ZztyZXR1cm4gYX1mdW5jdGlvbiBLMnQoZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKHQ9MCxyPW5ldyBHKGUuYSk7ci5hPHIuYy5jLmxlbmd0aDspZm9yKG49bChyZShyKSwxMCksbz1uZXcgaHIoZHIocXMobikuYS5LYygpLG5ldyBqKSk7anIobyk7KWE9bCh4cihvKSwxOCksZT09YS5kLmkuYyYmYS5jLmo9PShDdCgpLGVyKSYmKGY9STEoYS5jKS5iLGc9STEoYS5kKS5iLHQ9Yi5NYXRoLm1heCh0LGIuTWF0aC5hYnMoZy1mKSkpO3JldHVybiB0fWZ1bmN0aW9uIFcydChlLHQsbil7dmFyIHIsYSxvLGYsZztmb3Iobi5VZygiRUxLIEZvcmNlIiwxKSxSdChCdChhdCh0LChiMCgpLHRBZSkpKSl8fEtPKChyPW5ldyBZdigoYXcoKSxuZXcgSnYodCkpKSxyKSksZz11MHQodCksVzduKGcpLGJ5bihlLGwoUShnLGVBZSksNDMyKSksZj0kbXQoZS5hLGcpLG89Zi5LYygpO28uT2IoKTspYT1sKG8uUGIoKSwyMzUpLHdBbihlLmIsYSxuLmVoKDEvZi5nYygpKSk7Zz1ld3QoZiksbHd0KGcpLG4uVmcoKX1mdW5jdGlvbiBqOWUoZSx0LG4pe3N3aXRjaChuLmcpe2Nhc2UgMTpyZXR1cm4gbmV3IGx0KHQuYSxiLk1hdGgubWluKGUuZC5iLHQuYikpO2Nhc2UgMjpyZXR1cm4gbmV3IGx0KGIuTWF0aC5tYXgoZS5jLmEsdC5hKSx0LmIpO2Nhc2UgMzpyZXR1cm4gbmV3IGx0KHQuYSxiLk1hdGgubWF4KGUuYy5iLHQuYikpO2Nhc2UgNDpyZXR1cm4gbmV3IGx0KGIuTWF0aC5taW4odC5hLGUuZC5hKSx0LmIpfXJldHVybiBuZXcgbHQodC5hLHQuYil9ZnVuY3Rpb24gc1AoZSl7dmFyIHQsbixyO2Zvcih0PWVnKDErKCFlLmMmJihlLmM9bmV3IG50KEhsLGUsOSw5KSksZS5jKS5pKSx2dCh0LCghZS5kJiYoZS5kPW5ldyBMbihqcyxlLDgsNSkpLGUuZCkpLHI9bmV3IG9yKCghZS5jJiYoZS5jPW5ldyBudChIbCxlLDksOSkpLGUuYykpO3IuZSE9ci5pLmdjKCk7KW49bChncihyKSwxMjMpLHZ0KHQsKCFuLmQmJihuLmQ9bmV3IExuKGpzLG4sOCw1KSksbi5kKSk7cmV0dXJuIFhyKHQpLG5ldyBQXyh0KX1mdW5jdGlvbiBjcChlKXt2YXIgdCxuLHI7Zm9yKHQ9ZWcoMSsoIWUuYyYmKGUuYz1uZXcgbnQoSGwsZSw5LDkpKSxlLmMpLmkpLHZ0KHQsKCFlLmUmJihlLmU9bmV3IExuKGpzLGUsNyw0KSksZS5lKSkscj1uZXcgb3IoKCFlLmMmJihlLmM9bmV3IG50KEhsLGUsOSw5KSksZS5jKSk7ci5lIT1yLmkuZ2MoKTspbj1sKGdyKHIpLDEyMyksdnQodCwoIW4uZSYmKG4uZT1uZXcgTG4oanMsbiw3LDQpKSxuLmUpKTtyZXR1cm4gWHIodCksbmV3IFBfKHQpfWZ1bmN0aW9uIExUbihlKXt2YXIgdCxuLHIsYTtpZihlPT1udWxsKXJldHVybiBudWxsO2lmKHI9VHUoZSwhMCksYT1lQi5sZW5ndGgsdm4oci5zdWJzdHIoci5sZW5ndGgtYSxhKSxlQikpe2lmKG49ci5sZW5ndGgsbj09NCl7aWYodD0oWG4oMCxyLmxlbmd0aCksci5jaGFyQ29kZUF0KDApKSx0PT00MylyZXR1cm4gR1BlO2lmKHQ9PTQ1KXJldHVybiB2QXR9ZWxzZSBpZihuPT0zKXJldHVybiBHUGV9cmV0dXJuIGp5KHIpfWZ1bmN0aW9uIE1UbihlLHQpe3ZhciBuLHIsYSxvLGY7aWYodC5VZygiQnJlYWtpbmcgUG9pbnQgUHJvY2Vzc29yIiwxKSxkRG4oZSksUnQoQnQoUShlLChOdCgpLHVEZSkpKSkpe2ZvcihhPW5ldyBHKGUuYik7YS5hPGEuYy5jLmxlbmd0aDspZm9yKHI9bChyZShhKSwzMCksbj0wLGY9bmV3IEcoci5hKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMTApLG8ucD1uKys7Y0xuKGUpLGZidChlLCEwKSxmYnQoZSwhMSl9dC5WZygpfWZ1bmN0aW9uIERUbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKEw9cj8oQ3QoKSxlcik6KEN0KCksYXIpLGE9ITEsdz10W25dLEU9MCxDPXcubGVuZ3RoO0U8QzsrK0UpZz13W0VdLCFVOChsKFEoZywoTnQoKSxNcykpLDEwMSkpJiYoZj1nLmUsQj0hT2MoZyxMKS5kYygpJiYhIWYsQiYmKG89SXhlKGYpLGUuYj1uZXcgTnhlKG8scj8wOm8ubGVuZ3RoLTEpKSxhPWF8dlNuKGUsZyxMLEIpKTtyZXR1cm4gYX1mdW5jdGlvbiBZMnQoZSx0LG4scil7dmFyIGEsbyxmO2lmKGY9a3hlKHQsbiksJG4oci5jLHQpLGUualtmLnBdPT0tMXx8ZS5qW2YucF09PTJ8fGUuYVt0LnBdKXJldHVybiByO2ZvcihlLmpbZi5wXT0tMSxvPW5ldyBocihkcihzcChmKS5hLktjKCksbmV3IGopKTtqcihvKTspaWYoYT1sKHhyKG8pLDE4KSwhKCEoIURvKGEpJiYhKCFEbyhhKSYmYS5jLmkuYz09YS5kLmkuYykpfHxhPT10KSlyZXR1cm4gWTJ0KGUsYSxmLHIpO3JldHVybiByfWZ1bmN0aW9uIElUbihlKXt2YXIgdCxuLHIsYTtmb3IodD0wLG49MCxhPW5ldyBHKGUuaik7YS5hPGEuYy5jLmxlbmd0aDspaWYocj1sKHJlKGEpLDEyKSx0PVlyKGJvKHQsanV0KEZpKG5ldyBibihudWxsLG5ldyBrbihyLmUsMTYpKSxuZXcgczgpKSkpLG49WXIoYm8obixqdXQoRmkobmV3IGJuKG51bGwsbmV3IGtuKHIuZywxNikpLG5ldyBRaikpKSksdD4xfHxuPjEpcmV0dXJuIDI7cmV0dXJuIHQrbj09MT8yOjB9ZnVuY3Rpb24gSmwoZSx0KXt2YXIgbixyLGEsbyxmLGc7cmV0dXJuIG89ZS5hKmhoZStlLmIqMTUwMixnPWUuYipoaGUrMTEsbj1iLk1hdGguZmxvb3IoZypNUCksbys9bixnLT1uKmNFZSxvJT1jRWUsZS5hPW8sZS5iPWcsdDw9MjQ/Yi5NYXRoLmZsb29yKGUuYSptX2VbdF0pOihhPWUuYSooMTw8dC0yNCksZj1iLk1hdGguZmxvb3IoZS5iKnZfZVt0XSkscj1hK2Yscj49MjE0NzQ4MzY0OCYmKHItPTQyOTQ5NjcyOTYpLHIpfWZ1bmN0aW9uIFgydChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEU7Zm9yKG89bmV3IGJ0LEU9bmV3IG9zLGY9bmV3IG9zLFlBbihlLEUsZix0KSxfTW4oZSxFLGYsdCxuKSx3PW5ldyBHKGUpO3cuYTx3LmMuYy5sZW5ndGg7KWZvcihnPWwocmUodyksMTE4KSxhPW5ldyBHKGcuayk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDEzMiksKCF0fHxyLmM9PShKMCgpLHFiKSkmJmcuZz5yLmIuZyYmJG4oby5jLHIpO3JldHVybiBvfWZ1bmN0aW9uIE9UbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3O2ZvcihnPWUuYyxmPShuLnE/bi5xOihDbigpLENuKCksbWcpKS52YygpLktjKCk7Zi5PYigpOylvPWwoZi5QYigpLDQ0KSxyPSFfayhGaShuZXcgYm4obnVsbCxuZXcga24oZywxNikpLG5ldyBXbChuZXcgYXR0KHQsbykpKSkuQmQoKEFtKCksengpKSxyJiYodz1vLm1kKCksRGUodyw0KSYmKGE9SDhlKHcpLGEhPW51bGwmJih3PWEpKSx0LnFmKGwoby5sZCgpLDE0OSksdykpfWZ1bmN0aW9uIE5UbihlLHQsbil7dmFyIHIsYTtpZihxTyhlLmIpLFgwKGUuYiwoUE4oKSxXVyksKGJfKCkscUIpKSxYMChlLmIsWVcsdC5nKSxYMChlLmIsWFcsdC5hKSxlLmE9YlAoZS5iLHQpLG4uVWcoIkNvbXBhY3Rpb24gYnkgc2hyaW5raW5nIGEgdHJlZSIsZS5hLmMubGVuZ3RoKSx0LmkuYy5sZW5ndGg+MSlmb3IoYT1uZXcgRyhlLmEpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSw0Nyksci5LZih0LG4uZWgoMSkpO24uVmcoKX1mdW5jdGlvbiAkOWUoZSx0LG4pe3ZhciByLGEsbztpZihvPWc2KChFbCgpLGlvKSxlLkRoKCksdCksbyl7aWYoRm8oKSwhbChvLDY5KS54aygpJiYobz1yeChpYyhpbyxvKSksIW8pKXRocm93IHVlKG5ldyBZbihPYit0LnhlKCkra0wpKTthPShyPWUuSWgobyksbChyPj0wP2UuTGgociwhMCwhMCk6SHcoZSxvLCEwKSwxNjApKSxsKGEsMjIwKS5YbCh0LG4pfWVsc2UgdGhyb3cgdWUobmV3IFluKE9iK3QueGUoKStrTCkpfWZ1bmN0aW9uIFNVKGUsdCl7dmFyIG4scixhLG8sZjtpZih0KXtmb3Iobz1EZShlLkNiLDkwKXx8RGUoZS5DYiwxMDIpLGY9IW8mJkRlKGUuQ2IsMzMxKSxyPW5ldyBvcigoIXQuYSYmKHQuYT1uZXcgR18odCxXbyx0KSksdC5hKSk7ci5lIT1yLmkuZ2MoKTspaWYobj1sKGdyKHIpLDg5KSxhPWpVKG4pLG8/RGUoYSw5MCk6Zj9EZShhLDE1Nik6YSlyZXR1cm4gYTtyZXR1cm4gbz8oVG4oKSxLZik6KFRuKCksdGQpfWVsc2UgcmV0dXJuIG51bGx9ZnVuY3Rpb24gUFRuKGUsdCl7dmFyIG4scixhLG87Zm9yKHQuVWcoIlJlc2l6ZSBjaGlsZCBncmFwaCB0byBmaXQgcGFyZW50LiIsMSkscj1uZXcgRyhlLmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwzMCkscmEoZS5hLG4uYSksbi5hLmMubGVuZ3RoPTA7Zm9yKG89bmV3IEcoZS5hKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMTApLFZhKGEsbnVsbCk7ZS5iLmMubGVuZ3RoPTAsdFNuKGUpLGUuZSYmSl9uKGUuZSxlKSx0LlZnKCl9ZnVuY3Rpb24gQlRuKGUsdCl7dmFyIG4scixhLG8sZjtmb3IodC5VZygiRWRnZSBqb2luaW5nIiwxKSxuPVJ0KEJ0KFEoZSwoTnQoKSxsZGUpKSkpLGE9bmV3IEcoZS5iKTthLmE8YS5jLmMubGVuZ3RoOylmb3Iocj1sKHJlKGEpLDMwKSxmPW5ldyBVYShyLmEsMCk7Zi5iPGYuZC5nYygpOylvPShtcihmLmI8Zi5kLmdjKCkpLGwoZi5kLlhiKGYuYz1mLmIrKyksMTApKSxvLms9PShabigpLEFhKSYmKENsZShvLG4pLHBoKGYpKTt0LlZnKCl9ZnVuY3Rpb24gRlRuKGUsdCl7dmFyIG4scixhLG8sZjtmb3Iobj1uZXcgYnQsYT1EYyhuZXcgYm4obnVsbCxuZXcga24oZSwxNikpLG5ldyB4dGUpLG89RGMobmV3IGJuKG51bGwsbmV3IGtuKGUsMTYpKSxuZXcga3RlKSxmPUt2bihodm4oeHkoYkNuKGhlKGxlKHBPbiwxKSxSbiw4NDgsMCxbYSxvXSkpLG5ldyBFdGUpKSkscj0xO3I8Zi5sZW5ndGg7cisrKWZbcl0tZltyLTFdPj0yKnQmJnZ0KG4sbmV3IHZhZShmW3ItMV0rdCxmW3JdLXQpKTtyZXR1cm4gbn1mdW5jdGlvbiBSVG4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEM7aWYobilmb3Iobz1uLmEubGVuZ3RoLHI9bmV3IERtKG8pLGc9KHIuYi1yLmEpKnIuYzwwPyhzYigpLHRtKTpuZXcgY2Iocik7Zy5PYigpOylmPWwoZy5QYigpLDE3KSxhPUprKG4sZi5hKSxhJiYodz1nbW4oZSwoRT0ocmIoKSxDPW5ldyBqd2UsQyksdCYmejllKEUsdCksRSksYSksZkUodyxZZyhhLFBkKSksbVUoYSx3KSxoOWUoYSx3KSx3Y2UoZSxhLHcpKX1mdW5jdGlvbiBfVShlKXt2YXIgdCxuLHIsYSxvLGY7aWYoIWUuail7aWYoZj1uZXcgSVMsdD1xTSxvPXQuYS56YyhlLHQpLG89PW51bGwpe2ZvcihyPW5ldyBvcihkYyhlKSk7ci5lIT1yLmkuZ2MoKTspbj1sKGdyKHIpLDI5KSxhPV9VKG4pLEFzKGYsYSkscXIoZixuKTt0LmEuQmMoZSkhPW51bGx9SXkoZiksZS5qPW5ldyBONSgobChPZSh0dCgobGIoKSxWbikubyksMTEpLDE5KSxmLmkpLGYuZyksWWwoZSkuYiY9LTMzfXJldHVybiBlLmp9ZnVuY3Rpb24galRuKGUpe3ZhciB0LG4scixhO2lmKGU9PW51bGwpcmV0dXJuIG51bGw7aWYocj1UdShlLCEwKSxhPWVCLmxlbmd0aCx2bihyLnN1YnN0cihyLmxlbmd0aC1hLGEpLGVCKSl7aWYobj1yLmxlbmd0aCxuPT00KXtpZih0PShYbigwLHIubGVuZ3RoKSxyLmNoYXJDb2RlQXQoMCkpLHQ9PTQzKXJldHVybiBLUGU7aWYodD09NDUpcmV0dXJuIHdBdH1lbHNlIGlmKG49PTMpcmV0dXJuIEtQZX1yZXR1cm4gbmV3IEF3ZShyKX1mdW5jdGlvbiAkVG4oZSl7dmFyIHQsbixyO3JldHVybiBuPWUubCxuJm4tMXx8KHI9ZS5tLHImci0xKXx8KHQ9ZS5oLHQmdC0xKXx8dD09MCYmcj09MCYmbj09MD8tMTp0PT0wJiZyPT0wJiZuIT0wP2k3ZShuKTp0PT0wJiZyIT0wJiZuPT0wP2k3ZShyKSsyMjp0IT0wJiZyPT0wJiZuPT0wP2k3ZSh0KSs0NDotMX1mdW5jdGlvbiB1NihlLHQpe3ZhciBuLHIsYSxvLGY7Zm9yKGE9dC5hJmUuZixvPW51bGwscj1lLmJbYV07O3I9ci5iKXtpZihyPT10KXtvP28uYj10LmI6ZS5iW2FdPXQuYjticmVha31vPXJ9Zm9yKGY9dC5mJmUuZixvPW51bGwsbj1lLmNbZl07O249bi5kKXtpZihuPT10KXtvP28uZD10LmQ6ZS5jW2ZdPXQuZDticmVha31vPW59dC5lP3QuZS5jPXQuYzplLmE9dC5jLHQuYz90LmMuZT10LmU6ZS5lPXQuZSwtLWUuaSwrK2UuZ31mdW5jdGlvbiB6VG4oZSx0KXt2YXIgbjt0LmQ/dC5kLmI9dC5iOmUuYT10LmIsdC5iP3QuYi5kPXQuZDplLmU9dC5kLCF0LmUmJiF0LmM/KG49bChMZihsKGF4KGUuYix0LmEpLDI2MCkpLDI2MCksbi5hPTAsKytlLmMpOihuPWwoTGYobChjcihlLmIsdC5hKSwyNjApKSwyNjApLC0tbi5hLHQuZT90LmUuYz10LmM6bi5iPWwoTGYodC5jKSw1MTEpLHQuYz90LmMuZT10LmU6bi5jPWwoTGYodC5lKSw1MTEpKSwtLWUuZH1mdW5jdGlvbiBxVG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEM7Zm9yKG49ZS5vLHQ9ZS5wLGY9SWksYT1sbyxnPUlpLG89bG8sRT0wO0U8bjsrK0UpZm9yKEM9MDtDPHQ7KytDKXI2KGUsRSxDKSYmKGY9Yi5NYXRoLm1pbihmLEUpLGE9Yi5NYXRoLm1heChhLEUpLGc9Yi5NYXRoLm1pbihnLEMpLG89Yi5NYXRoLm1heChvLEMpKTtyZXR1cm4gdz1hLWYrMSxyPW8tZysxLG5ldyBTYXQocHQoZikscHQoZykscHQodykscHQocikpfWZ1bmN0aW9uIFl1ZShlLHQpe3ZhciBuLHIsYSxvO2ZvcihvPW5ldyBVYShlLDApLG49KG1yKG8uYjxvLmQuZ2MoKSksbChvLmQuWGIoby5jPW8uYisrKSwxNDgpKTtvLmI8by5kLmdjKCk7KXI9KG1yKG8uYjxvLmQuZ2MoKSksbChvLmQuWGIoby5jPW8uYisrKSwxNDgpKSxhPW5ldyBMNGUoci5jLG4uZCx0KSxtcihvLmI+MCksby5hLlhiKG8uYz0tLW8uYiksYnkobyxhKSxtcihvLmI8by5kLmdjKCkpLG8uZC5YYihvLmM9by5iKyspLGEuYT0hMSxuPXJ9ZnVuY3Rpb24gUTJ0KGUpe3ZhciB0LG4scixhLG8sZjtmb3IoYT1sKFEoZSwoZnQoKSxyVykpLDEyKSxmPW5ldyBHKGUuaik7Zi5hPGYuYy5jLmxlbmd0aDspe2ZvcihvPWwocmUoZiksMTIpLHI9bmV3IEcoby5nKTtyLmE8ci5jLmMubGVuZ3RoOylyZXR1cm4gdD1sKHJlKHIpLDE4KSxGYSh0LGEpLG87Zm9yKG49bmV3IEcoby5lKTtuLmE8bi5jLmMubGVuZ3RoOylyZXR1cm4gdD1sKHJlKG4pLDE4KSxwbyh0LGEpLG99cmV0dXJuIG51bGx9ZnVuY3Rpb24gSjJ0KGUsdCxuKXt2YXIgcixhLG8sZixnLHc7Zm9yKHc9bChkeShlLmEsdCksMTcpLmEsbj9PeGUoZS5hLHB0KHcrMSksdCk6T3hlKGUuYSxwdCh3LTEpLHQpLGY9bmV3IGJkLGE9bmV3IGhyKGRyKChuP3FzKHQpOmthKHQpKS5hLktjKCksbmV3IGopKTtqcihhKTspcj1sKHhyKGEpLDE4KSxuP289ci5kLmk6bz1yLmMuaSxxZShkeShlLmEsbykpPT09cWUoZHkoZS5hLHQpKSYmKGc9Zi5hLnpjKG8sZiksZz09bnVsbCk7cmV0dXJuIGZ9ZnVuY3Rpb24gSFRuKGUsdCxuKXt2YXIgcixhO3I9WmMobi5xLmdldFRpbWUoKSksaXUociwwKTwwPyhhPWIyLVlyKFJOKHIyKHIpLGIyKSksYT09YjImJihhPTApKTphPVlyKFJOKHIsYjIpKSx0PT0xPyhhPWIuTWF0aC5taW4oKGErNTApLzEwMHwwLDkpLGhiKGUsNDgrYSZacykpOnQ9PTI/KGE9Yi5NYXRoLm1pbigoYSs1KS8xMHwwLDk5KSxhZyhlLGEsMikpOihhZyhlLGEsMyksdD4zJiZhZyhlLDAsdC0zKSl9ZnVuY3Rpb24gVlRuKGUpe3ZhciB0LG4scixhO3JldHVybiBxZShRKGUsKE50KCkscDQpKSk9PT1xZSgocnAoKSxBMikpPyFlLmUmJnFlKFEoZSxUQikpIT09cWUoKHZFKCksdkIpKToocj1sKFEoZSxaMWUpLDI5OSksYT1SdChCdChRKGUsZWRlKSkpfHxxZShRKGUsSkwpKT09PXFlKChkQSgpLG1CKSksdD1sKFEoZSxTTWUpLDE3KS5hLG49ZS5hLmMubGVuZ3RoLCFhJiZyIT0odkUoKSx2QikmJih0PT0wfHx0Pm4pKX1mdW5jdGlvbiBVVG4oZSl7dmFyIHQsbjtmb3Iobj0wO248ZS5jLmxlbmd0aCYmIShWaXQoKFNuKG4sZS5jLmxlbmd0aCksbChlLmNbbl0sMTEzKSkpPjApO24rKyk7aWYobj4wJiZuPGUuYy5sZW5ndGgtMSlyZXR1cm4gbjtmb3IodD0wO3Q8ZS5jLmxlbmd0aCYmIShWaXQoKFNuKHQsZS5jLmxlbmd0aCksbChlLmNbdF0sMTEzKSkpPjApO3QrKyk7cmV0dXJuIHQ+MCYmbjxlLmMubGVuZ3RoLTE/dDplLmMubGVuZ3RoLzJ8MH1mdW5jdGlvbiBaMnQoZSx0KXt2YXIgbixyO2lmKHQhPWUuQ2J8fGUuRGI+PjE2IT02JiZ0KXtpZihGRShlLHQpKXRocm93IHVlKG5ldyBZbihFTCtkMnQoZSkpKTtyPW51bGwsZS5DYiYmKHI9KG49ZS5EYj4+MTYsbj49MD9seGUoZSxyKTplLkNiLlRoKGUsLTEtbixudWxsLHIpKSksdCYmKHI9bXgodCxlLDYscikpLHI9V3llKGUsdCxyKSxyJiZyLm9qKCl9ZWxzZSBlLkRiJjQmJiEoZS5EYiYxKSYmTmkoZSxuZXcgX2EoZSwxLDYsdCx0KSl9ZnVuY3Rpb24gQVUoZSx0KXt2YXIgbixyO2lmKHQhPWUuQ2J8fGUuRGI+PjE2IT0zJiZ0KXtpZihGRShlLHQpKXRocm93IHVlKG5ldyBZbihFTCtldnQoZSkpKTtyPW51bGwsZS5DYiYmKHI9KG49ZS5EYj4+MTYsbj49MD9neGUoZSxyKTplLkNiLlRoKGUsLTEtbixudWxsLHIpKSksdCYmKHI9bXgodCxlLDEyLHIpKSxyPVl5ZShlLHQsciksciYmci5vaigpfWVsc2UgZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsMSwzLHQsdCkpfWZ1bmN0aW9uIHo5ZShlLHQpe3ZhciBuLHI7aWYodCE9ZS5DYnx8ZS5EYj4+MTYhPTkmJnQpe2lmKEZFKGUsdCkpdGhyb3cgdWUobmV3IFluKEVMK0pidChlKSkpO3I9bnVsbCxlLkNiJiYocj0obj1lLkRiPj4xNixuPj0wP2Z4ZShlLHIpOmUuQ2IuVGgoZSwtMS1uLG51bGwscikpKSx0JiYocj1teCh0LGUsOSxyKSkscj1YeWUoZSx0LHIpLHImJnIub2ooKX1lbHNlIGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsOSx0LHQpKX1mdW5jdGlvbiBVRShlKXt2YXIgdCxuLHIsYSxvO2lmKHI9T2YoZSksbz1lLmosbz09bnVsbCYmcilyZXR1cm4gZS5KaygpP251bGw6ci5paygpO2lmKERlKHIsMTU2KSl7aWYobj1yLmprKCksbiYmKGE9bi53aSgpLGEhPWUuaSkpe2lmKHQ9bChyLDE1NiksdC5uaygpKXRyeXtlLmc9YS50aSh0LG8pfWNhdGNoKGYpe2lmKGY9YnMoZiksRGUoZiw4MikpZS5nPW51bGw7ZWxzZSB0aHJvdyB1ZShmKX1lLmk9YX1yZXR1cm4gZS5nfXJldHVybiBudWxsfWZ1bmN0aW9uIGVidChlKXt2YXIgdDtyZXR1cm4gdD1uZXcgYnQsdnQodCxuZXcgQjgobmV3IGx0KGUuYyxlLmQpLG5ldyBsdChlLmMrZS5iLGUuZCkpKSx2dCh0LG5ldyBCOChuZXcgbHQoZS5jLGUuZCksbmV3IGx0KGUuYyxlLmQrZS5hKSkpLHZ0KHQsbmV3IEI4KG5ldyBsdChlLmMrZS5iLGUuZCtlLmEpLG5ldyBsdChlLmMrZS5iLGUuZCkpKSx2dCh0LG5ldyBCOChuZXcgbHQoZS5jK2UuYixlLmQrZS5hKSxuZXcgbHQoZS5jLGUuZCtlLmEpKSksdH1mdW5jdGlvbiBHVG4oZSl7dmFyIHQsbixyO2lmKGU9PW51bGwpcmV0dXJuIHVsO3RyeXtyZXR1cm4geGMoZSl9Y2F0Y2goYSl7aWYoYT1icyhhKSxEZShhLDEwMykpcmV0dXJuIHQ9YSxyPV9tKGJoKGUpKSsiQCIrKG49KFZnKCkscThlKGUpPj4+MCksbi50b1N0cmluZygxNikpLGE2bihVM24oKSwoRGsoKSwiRXhjZXB0aW9uIGR1cmluZyBsZW5pZW50Rm9ybWF0IGZvciAiK3IpLHQpLCI8IityKyIgdGhyZXcgIitfbSh0LlJtKSsiPiI7dGhyb3cgdWUoYSl9fWZ1bmN0aW9uIEtUbihlLHQsbil7dmFyIHIsYSxvO2ZvcihvPXQuYS5lYygpLktjKCk7by5PYigpOylhPWwoby5QYigpLDc0KSxyPWwoY3IoZS5iLGEpLDI3MiksIXImJihkcyhjZyhhKSk9PWRzKEViKGEpKT9OQ24oZSxhLG4pOmNnKGEpPT1kcyhFYihhKSk/Y3IoZS5jLGEpPT1udWxsJiZjcihlLmIsRWIoYSkpIT1udWxsJiZJdnQoZSxhLG4sITEpOmNyKGUuZCxhKT09bnVsbCYmY3IoZS5iLGNnKGEpKSE9bnVsbCYmSXZ0KGUsYSxuLCEwKSl9ZnVuY3Rpb24gV1RuKGUsdCl7dmFyIG4scixhLG8sZixnLHc7Zm9yKGE9ZS5LYygpO2EuT2IoKTspZm9yKHI9bChhLlBiKCksMTApLGc9bmV3IGd1LE1jKGcsciksbGEoZywoQ3QoKSxhcikpLHJ0KGcsKGZ0KCksb1cpLChIbigpLCEwKSksZj10LktjKCk7Zi5PYigpOylvPWwoZi5QYigpLDEwKSx3PW5ldyBndSxNYyh3LG8pLGxhKHcsZXIpLHJ0KHcsb1csITApLG49bmV3IFR3LHJ0KG4sb1csITApLHBvKG4sZyksRmEobix3KX1mdW5jdGlvbiBZVG4oZSx0LG4scil7dmFyIGEsbyxmLGc7YT1SMXQoZSx0LG4pLG89UjF0KGUsbix0KSxmPWwoY3IoZS5jLHQpLDExOCksZz1sKGNyKGUuYyxuKSwxMTgpLGE8bz9uZXcgUG0oKEowKCksRTQpLGYsZyxvLWEpOm88YT9uZXcgUG0oKEowKCksRTQpLGcsZixhLW8pOihhIT0wfHwhKCF0Lml8fCFuLmkpJiZyW3QuaS5jXVtuLmkuY10pJiYobmV3IFBtKChKMCgpLEU0KSxmLGcsMCksbmV3IFBtKEU0LGcsZiwwKSl9ZnVuY3Rpb24gdGJ0KGUsdCl7dmFyIG4scixhLG8sZixnLHc7Zm9yKGE9MCxmPW5ldyBHKHQuYSk7Zi5hPGYuYy5jLmxlbmd0aDspZm9yKG89bChyZShmKSwxMCksYSs9by5vLmIrby5kLmErby5kLmQrZS5lLHI9bmV3IGhyKGRyKGthKG8pLmEuS2MoKSxuZXcgaikpO2pyKHIpOyluPWwoeHIociksMTgpLG4uYy5pLms9PShabigpLEF1KSYmKHc9bi5jLmksZz1sKFEodywoZnQoKSx6aSkpLDEwKSxhKz1nLm8uYitnLmQuYStnLmQuZCk7cmV0dXJuIGF9ZnVuY3Rpb24gVkEoKXtWQT1VLFE2PW5ldyBnTygiQ0FORElEQVRFX1BPU0lUSU9OX0xBU1RfUExBQ0VEX1JJR0hUIiwwKSxlOT1uZXcgZ08oIkNBTkRJREFURV9QT1NJVElPTl9MQVNUX1BMQUNFRF9CRUxPVyIsMSkseE09bmV3IGdPKCJDQU5ESURBVEVfUE9TSVRJT05fV0hPTEVfRFJBV0lOR19SSUdIVCIsMikseU09bmV3IGdPKCJDQU5ESURBVEVfUE9TSVRJT05fV0hPTEVfRFJBV0lOR19CRUxPVyIsMyksekI9bmV3IGdPKCJXSE9MRV9EUkFXSU5HIiw0KX1mdW5jdGlvbiBYVG4oZSx0KXtpZihEZSh0LDIwNykpcmV0dXJuIHk0bihlLGwodCwyNykpO2lmKERlKHQsMTkzKSlyZXR1cm4gXzRuKGUsbCh0LDEyMykpO2lmKERlKHQsMzY2KSlyZXR1cm4gbXBuKGUsbCh0LDEzNSkpO2lmKERlKHQsMzI2KSlyZXR1cm4gTkFuKGUsbCh0LDc0KSk7aWYodClyZXR1cm4gbnVsbDt0aHJvdyB1ZShuZXcgWW4odlNlK1RiKG5ldyBJbChoZShsZSh3YSwxKSxSbiwxLDUsW3RdKSkpKSl9ZnVuY3Rpb24gUVRuKGUpe3ZhciB0LG4scixhLG8sZixnO2ZvcihvPW5ldyBvcyxhPW5ldyBHKGUuZC5hKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTI1KSxyLmIuYS5jLmxlbmd0aD09MCYmQ3MobyxyLG8uYy5iLG8uYyk7aWYoby5iPjEpZm9yKHQ9aHcoKG49bmV3IFNtLCsrZS5iLG4pLGUuZCksZz1ScihvLDApO2cuYiE9Zy5kLmM7KWY9bChCcihnKSwxMjUpLHAwKHMwKGkwKGEwKHIwKG5ldyBfZiwxKSwwKSx0KSxmKSl9ZnVuY3Rpb24gSlRuKGUsdCxuKXt2YXIgcixhLG8sZixnO2ZvcihuLlVnKCJCcmVha2luZyBQb2ludCBSZW1vdmluZyIsMSksZS5hPWwoUSh0LChOdCgpLGJwKSksMjIzKSxvPW5ldyBHKHQuYik7by5hPG8uYy5jLmxlbmd0aDspZm9yKGE9bChyZShvKSwzMCksZz1uZXcgRyhfdyhhLmEpKTtnLmE8Zy5jLmMubGVuZ3RoOylmPWwocmUoZyksMTApLGlodChmKSYmKHI9bChRKGYsKGZ0KCksYzMpKSwzMTMpLCFyLmQmJlV2dChlLHIpKTtuLlZnKCl9ZnVuY3Rpb24gTFUoZSx0KXt2YXIgbixyO2lmKHQhPWUuQ2J8fGUuRGI+PjE2IT0xMSYmdCl7aWYoRkUoZSx0KSl0aHJvdyB1ZShuZXcgWW4oRUwrb2tlKGUpKSk7cj1udWxsLGUuQ2ImJihyPShuPWUuRGI+PjE2LG4+PTA/cHhlKGUscik6ZS5DYi5UaChlLC0xLW4sbnVsbCxyKSkpLHQmJihyPW14KHQsZSwxMCxyKSkscj1zNGUoZSx0LHIpLHImJnIub2ooKX1lbHNlIGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMTEsdCx0KSl9ZnVuY3Rpb24gWlRuKGUpe3ZhciB0LG4scixhO2ZvcihyPW5ldyBxbShuZXcgU3IoZS5iKS5hKTtyLmI7KW49TncociksYT1sKG4ubGQoKSwxMiksdD1sKG4ubWQoKSwxMCkscnQodCwoZnQoKSx6aSksYSkscnQoYSxqbCx0KSxydChhLHhCLChIbigpLCEwKSksbGEoYSxsKFEodCxXYyksNjQpKSxRKHQsV2MpLHJ0KGEuaSwoTnQoKSxNcyksKFJhKCksc0MpKSxsKFEoZW8oYS5pKSxMdSksMjEpLkZjKChIbygpLCRUKSl9ZnVuY3Rpb24gZUNuKGUsdCxuKXt2YXIgcixhLG8sZixnLHc7aWYobz0wLGY9MCxlLmMpZm9yKHc9bmV3IEcoZS5kLmkuaik7dy5hPHcuYy5jLmxlbmd0aDspZz1sKHJlKHcpLDEyKSxvKz1nLmUuYy5sZW5ndGg7ZWxzZSBvPTE7aWYoZS5kKWZvcih3PW5ldyBHKGUuYy5pLmopO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwxMiksZis9Zy5nLmMubGVuZ3RoO2Vsc2UgZj0xO3JldHVybiBhPXVhKFJPKGYtbykpLHI9KG4rdCkvMisobi10KSooLjQqYSkscn1mdW5jdGlvbiB0Q24oZSl7UnkoKTt2YXIgdCxuO2lmKGUuSGMoKEN0KCksUGMpKSl0aHJvdyB1ZShuZXcgWW4oIlBvcnQgc2lkZXMgbXVzdCBub3QgY29udGFpbiBVTkRFRklORUQiKSk7c3dpdGNoKGUuZ2MoKSl7Y2FzZSAxOnJldHVybiBiQjtjYXNlIDI6cmV0dXJuIHQ9ZS5IYyhhcikmJmUuSGMoZXIpLG49ZS5IYyhRbikmJmUuSGMoRHIpLHR8fG4/V0s6S0s7Y2FzZSAzOnJldHVybiBHSztjYXNlIDQ6cmV0dXJuIFVLO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIFh1ZShlLHQsbil7cmV0dXJuIGg2KCksZ0UoZSx0KSYmZ0UoZSxuKT8hMTpfbGUobmV3IGx0KGUuYyxlLmQpLG5ldyBsdChlLmMrZS5iLGUuZCksdCxuKXx8X2xlKG5ldyBsdChlLmMrZS5iLGUuZCksbmV3IGx0KGUuYytlLmIsZS5kK2UuYSksdCxuKXx8X2xlKG5ldyBsdChlLmMrZS5iLGUuZCtlLmEpLG5ldyBsdChlLmMsZS5kK2UuYSksdCxuKXx8X2xlKG5ldyBsdChlLmMsZS5kK2UuYSksbmV3IGx0KGUuYyxlLmQpLHQsbil9ZnVuY3Rpb24gcTllKGUsdCl7dmFyIG4scixhLG87aWYoIWUuZGMoKSl7Zm9yKG49MCxyPWUuZ2MoKTtuPHI7KytuKWlmKG89ZWkoZS5YYihuKSksbz09bnVsbD90PT1udWxsOnZuKG8uc3Vic3RyKDAsMyksIiEjIyIpP3QhPW51bGwmJihhPXQubGVuZ3RoLCF2bihvLnN1YnN0cihvLmxlbmd0aC1hLGEpLHQpfHxvLmxlbmd0aCE9dC5sZW5ndGgrMykmJiF2bihjdix0KTp2bihvLGMwZSkmJiF2bihjdix0KXx8dm4obyx0KSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBuQ24oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFO2ZvcihmPWUuai5jLmxlbmd0aCx3PVdlKHZPbix3RWUsMzE0LGYsMCwxKSxnPTA7ZzxmO2crKylvPWwoanQoZS5qLGcpLDEyKSxvLnA9Zyx3W2ddPWRFbihDMnQobyksbixyKTtmb3IoX0NuKGUsdyxuLHQsciksRT1uZXcgUHIsYT0wO2E8dy5sZW5ndGg7YSsrKXdbYV0mJmtpKEUsbChqdChlLmosYSksMTIpLHdbYV0pO0UuZi5jK0UuaS5jIT0wJiYocnQoZSwoZnQoKSxLTCksRSksXzluKGUsdykpfWZ1bmN0aW9uIHJDbihlLHQpe3ZhciBuLHIsYSxvLGYsZztmb3IodC5VZygiUGFydGl0aW9uIHBvc3Rwcm9jZXNzaW5nIiwxKSxyPW5ldyBHKGUuYik7ci5hPHIuYy5jLmxlbmd0aDspZm9yKG49bChyZShyKSwzMCksbz1uZXcgRyhuLmEpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihhPWwocmUobyksMTApLGc9bmV3IEcoYS5qKTtnLmE8Zy5jLmMubGVuZ3RoOylmPWwocmUoZyksMTIpLFJ0KEJ0KFEoZiwoZnQoKSxvVykpKSkmJlFfKGcpO3QuVmcoKX1mdW5jdGlvbiBpQ24oZSx0LG4pe3ZhciByLGEsbztmb3IoYT1uZXcgRyhlLmEuYik7YS5hPGEuYy5jLmxlbmd0aDspaWYocj1sKHJlKGEpLDYwKSxvPUc1KHIpLG8mJm8uaz09KFpuKCksVXMpKXN3aXRjaChsKFEobywoZnQoKSxXYykpLDY0KS5nKXtjYXNlIDQ6by5uLmE9dC5hO2JyZWFrO2Nhc2UgMjpvLm4uYT1uLmEtKG8uby5hK28uZC5jKTticmVhaztjYXNlIDE6by5uLmI9dC5iO2JyZWFrO2Nhc2UgMzpvLm4uYj1uLmItKG8uby5iK28uZC5hKX19ZnVuY3Rpb24gc0NuKGUsdCxuKXt2YXIgcixhLG87Zm9yKG4uVWcoIlByb2Nlc3NvciBkZXRlcm1pbmUgdGhlIGhlaWdodCBmb3IgZWFjaCBsZXZlbCIsMSksZS5hPXQuYi5iPT0wPzE6dC5iLmIsYT1udWxsLHI9UnIodC5iLDApOyFhJiZyLmIhPXIuZC5jOylvPWwoQnIociksNDApLFJ0KEJ0KFEobywoUWkoKSxWYikpKSkmJihhPW8pO2EmJlZtdChlLE8xKGhlKGxlKFBXLDEpLElHLDQwLDAsW2FdKSksbixsKFEodCwoSGMoKSx5MykpLDg4KSksbi5WZygpfWZ1bmN0aW9uIGFDbihlKXt2YXIgdCxuLHIsYSxvLGY7Zm9yKHI9KHJiKCksbz1uZXcgYV8sbyksYVAocixlKSxuPW5ldyBvcigoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkpO24uZSE9bi5pLmdjKCk7KXQ9bChncihuKSwyNyksZj0oYT1uZXcgYV8sYSksTFUoZixyKSxGNShmLHQuZyx0LmYpLGZFKGYsdC5rKSxRaChmLHQuaSx0LmopLHFyKCghci5hJiYoci5hPW5ldyBudChBaSxyLDEwLDExKSksci5hKSxmKSxhUChmLHQpO3JldHVybiByfWZ1bmN0aW9uIG9DbihlLHQsbil7dmFyIHIsYSxvLGYsZztyZXR1cm4gYT1sKGF0KHQsKHdVKCksWk9lKSksMTcpLCFhJiYoYT1wdCgwKSksbz1sKGF0KG4sWk9lKSwxNyksIW8mJihvPXB0KDApKSxhLmE+by5hPy0xOmEuYTxvLmE/MTplLmEmJihyPVlpKHQuaixuLmopLHIhPTB8fChyPVlpKHQuaSxuLmkpLHIhPTApKT9yOihmPXQuZyp0LmYsZz1uLmcqbi5mLFlpKGYsZykpfWZ1bmN0aW9uIGNDbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMO2lmKCsrZS5lLHc9ZS5kPT1udWxsPzA6ZS5kLmxlbmd0aCx0Pncpe2ZvcihDPWUuZCxlLmQ9V2UodlBlLF9TZSw2NiwyKncrNCwwLDEpLG89MDtvPHc7KytvKWlmKEU9Q1tvXSxFKWZvcihyPUUuZyxMPUUuaSxnPTA7ZzxMOysrZylhPWwocltnXSwxMzYpLGY9UXllKGUsYS5CaSgpKSxuPWUuZFtmXSwhbiYmKG49ZS5kW2ZdPWUuZGsoKSksbi5GYyhhKTtyZXR1cm4hMH1lbHNlIHJldHVybiExfWZ1bmN0aW9uIHVDbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3O2lmKGE9bixvPWEuTGsoKSx1cChlLmUsbykpe2lmKG8uU2koKSl7Zm9yKHI9bChlLmcsMTI0KSxmPTA7ZjxlLmk7KytmKWlmKGc9cltmXSxQaShnLGEpJiZmIT10KXRocm93IHVlKG5ldyBZbihXUCkpfX1lbHNlIGZvcih3PVd1KGUuZS5EaCgpLG8pLHI9bChlLmcsMTI0KSxmPTA7ZjxlLmk7KytmKWlmKGc9cltmXSx3LmFtKGcuTGsoKSkpdGhyb3cgdWUobmV3IFluKFpQKSk7X0EoZSx0LG4pfWZ1bmN0aW9uIG5idChlLHQpe3ZhciBuLHIsYSxvLGYsZztmb3Iobj1sKFEodCwoZnQoKSxwcCkpLDIxKSxmPWwoJGkoKE1sZSgpLFhpKSxuKSwyMSksZz1sKCRpKGJpLG4pLDIxKSxvPWYuS2MoKTtvLk9iKCk7KWlmKHI9bChvLlBiKCksMjEpLCFsKCRpKGUuYixyKSwxNSkuZGMoKSlyZXR1cm4hMTtmb3IoYT1nLktjKCk7YS5PYigpOylpZihyPWwoYS5QYigpLDIxKSwhbCgkaShlLmIsciksMTUpLmRjKCkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gSDllKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2lmKGUuYS5jLmxlbmd0aD09MSlyZXR1cm4gc3B0KGwoanQoZS5hLDApLDE3MiksdCk7Zm9yKGY9czRuKGUpLHc9MCxFPWUuZCxvPWYsQz1lLmQsZz0oRS1vKS8yK287bysxPEU7KXtmb3Iodz0wLHI9bmV3IEcoZS5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMTcyKSx3Kz0oYT1aQShuLGcsITEpLGEuYSk7dzx0PyhDPWcsRT1nKTpvPWcsZz0oRS1vKS8yK299cmV0dXJuIEN9ZnVuY3Rpb24gYVAoZSx0KXt2YXIgbixyLGEsbyxmO2lmKCF0KXJldHVybiBlO2lmKERlKHQsMzQyKSlmb3IoYT1sKHQsMzQyKSxvPSghZS5vJiYoZS5vPW5ldyB4bCgoc3UoKSxDZyksTDIsZSwwKSksZS5vKSxyPWEuZ2goKS5jLktjKCk7ci5lIT1yLmkuZ2MoKTspbj1sKHIuWWooKSw0NCksZj1uLm1kKCksR04obyxsKG4ubGQoKSwxNDkpLGYpO2Vsc2UhZS5vJiYoZS5vPW5ldyB4bCgoc3UoKSxDZyksTDIsZSwwKSksbGZ0KGUubyx0Lm5mKCkpO3JldHVybiBlfWZ1bmN0aW9uIGxDbihlKXt2YXIgdCxuLHIsYSxvO3JldHVybiBpc05hTihlKT8oaUUoKSxYU2UpOmU8LTkyMjMzNzIwMzY4NTQ3NzZlMz8oaUUoKSxnNnQpOmU+PTkyMjMzNzIwMzY4NTQ3NzZlMz8oaUUoKSxXU2UpOihhPSExLGU8MCYmKGE9ITAsZT0tZSkscj0wLGU+PVptJiYocj11YShlL1ptKSxlLT1yKlptKSxuPTAsZT49THgmJihuPXVhKGUvTHgpLGUtPW4qTHgpLHQ9dWEoZSksbz1xdSh0LG4sciksYSYmeWNlKG8pLG8pfWZ1bmN0aW9uIGhDbihlKXt2YXIgdCxuLHIsYSxvO2lmKG89bmV3IGJ0LFZ1KGUuYixuZXcgSmQobykpLGUuYi5jLmxlbmd0aD0wLG8uYy5sZW5ndGghPTApe2Zvcih0PShTbigwLG8uYy5sZW5ndGgpLGwoby5jWzBdLDgyKSksbj0xLHI9by5jLmxlbmd0aDtuPHI7KytuKWE9KFNuKG4sby5jLmxlbmd0aCksbChvLmNbbl0sODIpKSxhIT10JiZGeG4odCxhKTtpZihEZSh0LDYzKSl0aHJvdyB1ZShsKHQsNjMpKTtpZihEZSh0LDI5NikpdGhyb3cgdWUobCh0LDI5NikpfX1mdW5jdGlvbiBmQ24oZSx0KXt2YXIgbixyLGEsbztmb3Iobj0hdHx8IWUudS5IYygoUmwoKSx2cCkpLG89MCxhPW5ldyBHKGUuZS5YZigpKTthLmE8YS5jLmMubGVuZ3RoOyl7aWYocj1sKHJlKGEpLDg1Miksci5hZygpPT0oQ3QoKSxQYykpdGhyb3cgdWUobmV3IFluKCJMYWJlbCBhbmQgbm9kZSBzaXplIGNhbGN1bGF0b3IgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHBvcnRzIHRoYXQgaGF2ZSBwb3J0IHNpZGVzIGFzc2lnbmVkLiIpKTtyLlFmKG8rKyksZTRuKGUscixuKX19ZnVuY3Rpb24gVjllKGUpe3ZhciB0LG4scixhLG87Zm9yKG49bmV3IEcoZS5hLmEpO24uYTxuLmMuYy5sZW5ndGg7KXtmb3IodD1sKHJlKG4pLDMxNiksdC5qPW51bGwsbz10LmEuYS5lYygpLktjKCk7by5PYigpOylyPWwoby5QYigpLDYwKSxZMChyLmIpLCghdC5qfHxyLmQuYzx0LmouZC5jKSYmKHQuaj1yKTtmb3IoYT10LmEuYS5lYygpLktjKCk7YS5PYigpOylyPWwoYS5QYigpLDYwKSxyLmIuYT1yLmQuYy10LmouZC5jLHIuYi5iPXIuZC5kLXQuai5kLmR9cmV0dXJuIGV9ZnVuY3Rpb24gTVUoZSl7dmFyIHQsbixyLGEsbztmb3Iobj1uZXcgRyhlLmEuYSk7bi5hPG4uYy5jLmxlbmd0aDspe2Zvcih0PWwocmUobiksMTk0KSx0LmY9bnVsbCxvPXQuYS5hLmVjKCkuS2MoKTtvLk9iKCk7KXI9bChvLlBiKCksODYpLFkwKHIuZSksKCF0LmZ8fHIuZy5jPHQuZi5nLmMpJiYodC5mPXIpO2ZvcihhPXQuYS5hLmVjKCkuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksODYpLHIuZS5hPXIuZy5jLXQuZi5nLmMsci5lLmI9ci5nLmQtdC5mLmcuZH1yZXR1cm4gZX1mdW5jdGlvbiBkQ24oZSl7dmFyIHQsbixyO3JldHVybiBuPWwoZS5hLDE3KS5hLHI9bChlLmIsMTcpLmEsdD1iLk1hdGgubWF4KGIuTWF0aC5hYnMobiksYi5NYXRoLmFicyhyKSksbjx0JiZyPT0tdD9uZXcgY2EocHQobisxKSxwdChyKSk6bj09dCYmcjx0P25ldyBjYShwdChuKSxwdChyKzEpKTpuPj0tdCYmcj09dD9uZXcgY2EocHQobi0xKSxwdChyKSk6bmV3IGNhKHB0KG4pLHB0KHItMSkpfWZ1bmN0aW9uIHJidCgpe3JldHVybiB2bygpLGhlKGxlKEVPbiwxKSxpdCw4MSwwLFtQQWUsSUFlLEQ2LGYxZSxlTGUsREssekssbDQsSkFlLEhBZSxYQWUsdTQsWkFlLCRBZSx0TGUsU0FlLFBLLGQxZSxMSyxSSyxyTGUsRkssX0FlLFFBZSxpTGUsakssbkxlLE1LLEZBZSxXQWUsS0FlLHFLLE1BZSxBSyxPSyxMQWUsTFQsVUFlLHpBZSxZQWUsekwsT0FlLERBZSxHQWUscUFlLE5LLCRLLEFBZSxCSyxWQWUsSUssUkFlLEJBZSxnQixfSyxqQWUsTkFlXSl9ZnVuY3Rpb24gZ0NuKGUsdCxuKXtlLmQ9MCxlLmI9MCx0Lms9PShabigpLEF1KSYmbi5rPT1BdSYmbChRKHQsKGZ0KCksemkpKSwxMCk9PWwoUShuLHppKSwxMCkmJigkb2UodCkuaj09KEN0KCksUW4pP1YydChlLHQsbik6VjJ0KGUsbix0KSksdC5rPT1BdSYmbi5rPT1BYT8kb2UodCkuaj09KEN0KCksUW4pP2UuZD0xOmUuYj0xOm4uaz09QXUmJnQuaz09QWEmJigkb2Uobikuaj09KEN0KCksUW4pP2UuYj0xOmUuZD0xKSxKNm4oZSx0LG4pfWZ1bmN0aW9uIHBDbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMO3JldHVybiBMPWp4ZShlKSx0PWUuYSx3PXQhPW51bGwsdyYmemsoTCwiY2F0ZWdvcnkiLGUuYSksYT1aSShuZXcgYnIoZS5kKSksZj0hYSxmJiYoRT1uZXcgJHAsZTEoTCwia25vd25PcHRpb25zIixFKSxuPW5ldyBvUWUoRSksdG8obmV3IGJyKGUuZCksbikpLG89WkkoZS5nKSxnPSFvLGcmJihDPW5ldyAkcCxlMShMLCJzdXBwb3J0ZWRGZWF0dXJlcyIsQykscj1uZXcgY1FlKEMpLHRvKGUuZyxyKSksTH1mdW5jdGlvbiBiQ24oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFO2ZvcihyPSExLHQ9MzM2LG49MCxvPW5ldyBHcnQoZS5sZW5ndGgpLGc9ZSx3PTAsRT1nLmxlbmd0aDt3PEU7Kyt3KWY9Z1t3XSxyPXJ8KHhiKGYpLCExKSxhPShmYihmKSxmLmEpLHZ0KG8uYSxYcihhKSksdCY9YS55ZCgpLG49TnluKG4sYS56ZCgpKTtyZXR1cm4gbChsKHpzdChuZXcgYm4obnVsbCxJdWUobmV3IGtuKCh3dygpLFA4ZShvLmEpKSwxNiksbmV3IGJlLHQsbikpLG5ldyBDeihlKSksNjg3KSw4NDgpfWZ1bmN0aW9uIG1DbihlLHQpe3ZhciBuO2UuZCYmKHQuYyE9ZS5lLmN8fG8zbihlLmUuYix0LmIpKSYmKHZ0KGUuZixlLmQpLGUuYT1lLmQuYytlLmQuYixlLmQ9bnVsbCxlLmU9bnVsbCksSWxuKHQuYik/ZS5jPXQ6ZS5iPXQsKHQuYj09KHdFKCksczMpJiYhdC5hfHx0LmI9PWE0JiZ0LmF8fHQuYj09TTYmJnQuYXx8dC5iPT1vNCYmIXQuYSkmJmUuYyYmZS5iJiYobj1uZXcgZWYoZS5hLGUuYy5kLHQuYy1lLmEsZS5iLmQtZS5jLmQpLGUuZD1uLGUuZT10KX1mdW5jdGlvbiBVQShlKXt2YXIgdDtpZihtSmUuY2FsbCh0aGlzKSx0aGlzLmk9bmV3IHlJLHRoaXMuZz1lLHRoaXMuZj1sKGUuZSYmZS5lKCksOSkubGVuZ3RoLHRoaXMuZj09MCl0aHJvdyB1ZShuZXcgWW4oIlRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIHBoYXNlIGluIHRoZSBwaGFzZSBlbnVtZXJhdGlvbi4iKSk7dGhpcy5jPSh0PWwoSzAodGhpcy5nKSw5KSxuZXcgWmgodCxsKGMwKHQsdC5sZW5ndGgpLDkpLDApKSx0aGlzLmE9bmV3IFhzLHRoaXMuYj1uZXcgUHJ9ZnVuY3Rpb24gVTllKGUsdCl7dmFyIG4scjtpZih0IT1lLkNifHxlLkRiPj4xNiE9NyYmdCl7aWYoRkUoZSx0KSl0aHJvdyB1ZShuZXcgWW4oRUwrbHB0KGUpKSk7cj1udWxsLGUuQ2ImJihyPShuPWUuRGI+PjE2LG4+PTA/aHhlKGUscik6ZS5DYi5UaChlLC0xLW4sbnVsbCxyKSkpLHQmJihyPWwodCw1NCkuUmgoZSwxLG9GLHIpKSxyPUo0ZShlLHQsciksciYmci5vaigpfWVsc2UgZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsMSw3LHQsdCkpfWZ1bmN0aW9uIGlidChlLHQpe3ZhciBuLHI7aWYodCE9ZS5DYnx8ZS5EYj4+MTYhPTMmJnQpe2lmKEZFKGUsdCkpdGhyb3cgdWUobmV3IFluKEVMK2MxdChlKSkpO3I9bnVsbCxlLkNiJiYocj0obj1lLkRiPj4xNixuPj0wP2R4ZShlLHIpOmUuQ2IuVGgoZSwtMS1uLG51bGwscikpKSx0JiYocj1sKHQsNTQpLlJoKGUsMCx1RixyKSkscj1aNGUoZSx0LHIpLHImJnIub2ooKX1lbHNlIGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsMyx0LHQpKX1mdW5jdGlvbiBRdWUoZSx0KXtHRSgpO3ZhciBuLHIsYSxvLGYsZyx3LEUsQztyZXR1cm4gdC5kPmUuZCYmKGc9ZSxlPXQsdD1nKSx0LmQ8NjM/aVNuKGUsdCk6KGY9KGUuZCYtMik8PDQsRT12NmUoZSxmKSxDPXY2ZSh0LGYpLHI9bWxlKGUsc3goRSxmKSksYT1tbGUodCxzeChDLGYpKSx3PVF1ZShFLEMpLG49UXVlKHIsYSksbz1RdWUobWxlKEUsciksbWxlKGEsQykpLG89VGxlKFRsZShvLHcpLG4pLG89c3gobyxmKSx3PXN4KHcsZjw8MSksVGxlKFRsZSh3LG8pLG4pKX1mdW5jdGlvbiBwMigpe3AyPVUsZ2RlPW5ldyBNNShjeXQsMCksZkRlPW5ldyBNNSgiTE9OR0VTVF9QQVRIIiwxKSxkRGU9bmV3IE01KCJMT05HRVNUX1BBVEhfU09VUkNFIiwyKSxkZGU9bmV3IE01KCJDT0ZGTUFOX0dSQUhBTSIsMyksaERlPW5ldyBNNSgkaGUsNCksZ0RlPW5ldyBNNSgiU1RSRVRDSF9XSURUSCIsNSksQ1c9bmV3IE01KCJNSU5fV0lEVEgiLDYpLFdUPW5ldyBNNSgiQkZfTU9ERUxfT1JERVIiLDcpLFlUPW5ldyBNNSgiREZfTU9ERUxfT1JERVIiLDgpfWZ1bmN0aW9uIHZDbihlLHQsbil7dmFyIHIsYSxvLGYsZztmb3IoZj1UQShlLG4pLGc9V2Uod2csbTIsMTAsdC5sZW5ndGgsMCwxKSxyPTAsbz1mLktjKCk7by5PYigpOylhPWwoby5QYigpLDEyKSxSdChCdChRKGEsKGZ0KCkseEIpKSkpJiYoZ1tyKytdPWwoUShhLGpsKSwxMCkpO2lmKHI8dC5sZW5ndGgpdGhyb3cgdWUobmV3IG5jKCJFeHBlY3RlZCAiK3QubGVuZ3RoKyIgaGllcmFyY2hpY2FsIHBvcnRzLCBidXQgZm91bmQgb25seSAiK3IrIi4iKSk7cmV0dXJuIGd9ZnVuY3Rpb24gd0NuKGUsdCl7dmFyIG4scixhLG8sZixnO2lmKCFlLnRiKXtmb3Iobz0oIWUucmImJihlLnJiPW5ldyB3eShlLGwxLGUpKSxlLnJiKSxnPW5ldyBOOChvLmkpLGE9bmV3IG9yKG8pO2EuZSE9YS5pLmdjKCk7KXI9bChncihhKSwxNDIpLGY9ci54ZSgpLG49bChmPT1udWxsP2p1KGcuZixudWxsLHIpOkJ3KGcuaSxmLHIpLDE0MiksbiYmKGY9PW51bGw/anUoZy5mLG51bGwsbik6QncoZy5pLGYsbikpO2UudGI9Z31yZXR1cm4gbCh4dShlLnRiLHQpLDE0Mil9ZnVuY3Rpb24gb1AoZSx0KXt2YXIgbixyLGEsbyxmO2lmKChlLmk9PW51bGwmJlNkKGUpLGUuaSkubGVuZ3RoLCFlLnApe2ZvcihmPW5ldyBOOCgoMyplLmcuaS8yfDApKzEpLGE9bmV3IEg4KGUuZyk7YS5lIT1hLmkuZ2MoKTspcj1sKHJ1ZShhKSwxNzkpLG89ci54ZSgpLG49bChvPT1udWxsP2p1KGYuZixudWxsLHIpOkJ3KGYuaSxvLHIpLDE3OSksbiYmKG89PW51bGw/anUoZi5mLG51bGwsbik6QncoZi5pLG8sbikpO2UucD1mfXJldHVybiBsKHh1KGUucCx0KSwxNzkpfWZ1bmN0aW9uIEc5ZShlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEU7Zm9yKEs1bihyK0RIKG4sbi5pZSgpKSxhKSxlYXQodCxkNW4obikpLG89bi5mLG8mJkc5ZShlLHQsbywiQ2F1c2VkIGJ5OiAiLCExKSxnPShuLms9PW51bGwmJihuLms9V2UoVDBlLGR0LDgyLDAsMCwxKSksbi5rKSx3PTAsRT1nLmxlbmd0aDt3PEU7Kyt3KWY9Z1t3XSxHOWUoZSx0LGYsIlN1cHByZXNzZWQ6ICIsITEpO2NvbnNvbGUuZ3JvdXBFbmQhPW51bGwmJmNvbnNvbGUuZ3JvdXBFbmQuY2FsbChjb25zb2xlKX1mdW5jdGlvbiBjUChlLHQsbixyKXt2YXIgYSxvLGYsZyx3O2Zvcih3PXQuZSxnPXcubGVuZ3RoLGY9dC5xLnVnKHcsbj8wOmctMSxuKSxhPXdbbj8wOmctMV0sZj1mfFVidChlLGEsbixyKSxvPW4/MTpnLTI7bj9vPGc6bz49MDtvKz1uPzE6LTEpZj1mfHQuYy5sZyh3LG8sbixyJiYhUnQoQnQoUSh0LmosKGZ0KCksamIpKSkpJiYhUnQoQnQoUSh0LmosKGZ0KCksajYpKSkpKSxmPWZ8dC5xLnVnKHcsbyxuKSxmPWZ8VWJ0KGUsd1tvXSxuLHIpO3JldHVybiBuYShlLmMsdCksZn1mdW5jdGlvbiBEVShlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKEM9VGN0KGUuaiksTD0wLEI9Qy5sZW5ndGg7TDxCOysrTCl7aWYoRT1DW0xdLG49PShxbygpLCRsKXx8bj09c00pZm9yKHc9a2QoRS5nKSxhPXcsbz0wLGY9YS5sZW5ndGg7bzxmOysrbylyPWFbb10sUzluKHQscikmJlV3KHIsITApO2lmKG49PXp1fHxuPT1zTSlmb3IoZz1rZChFLmUpLGE9ZyxvPTAsZj1hLmxlbmd0aDtvPGY7KytvKXI9YVtvXSxDOW4odCxyKSYmVXcociwhMCl9fWZ1bmN0aW9uIHlDbihlKXt2YXIgdCxuO3N3aXRjaCh0PW51bGwsbj1udWxsLFI4bihlKS5nKXtjYXNlIDE6dD0oQ3QoKSxhciksbj1lcjticmVhaztjYXNlIDI6dD0oQ3QoKSxEciksbj1RbjticmVhaztjYXNlIDM6dD0oQ3QoKSxlciksbj1hcjticmVhaztjYXNlIDQ6dD0oQ3QoKSxRbiksbj1Ecn1TKGUsbChmaChZOChsKCRpKGUuayx0KSwxNSkuT2MoKSxJNikpLDExMykpLGsoZSxsKGZoKHZ5KGwoJGkoZS5rLG4pLDE1KS5PYygpLEk2KSksMTEzKSl9ZnVuY3Rpb24geENuKGUpe3ZhciB0LG4scixhLG8sZjtpZihhPWwoanQoZS5qLDApLDEyKSxhLmUuYy5sZW5ndGgrYS5nLmMubGVuZ3RoPT0wKWUubi5hPTA7ZWxzZXtmb3IoZj0wLHI9cmcoTGgoaGUobGUoRmgsMSksUm4sMjAsMCxbbmV3IFQ1KGEpLG5ldyBDOChhKV0pKSk7anIocik7KW49bCh4cihyKSwxMiksZis9bi5pLm4uYStuLm4uYStuLmEuYTt0PWwoUShlLChOdCgpLHAzKSksOCksbz10P3QuYTowLGUubi5hPWYvKGEuZS5jLmxlbmd0aCthLmcuYy5sZW5ndGgpLW99fWZ1bmN0aW9uIHNidChlLHQpe3ZhciBuLHIsYTtmb3Iocj1uZXcgRyh0LmEpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwyMjUpLE1hZShsKG4uYiw2OCksbWEoSmEobCh0LmIsNjgpLmMpLGwodC5iLDY4KS5hKSksYT1UbXQobCh0LmIsNjgpLmIsbChuLmIsNjgpLmIpLGE+MSYmKGUuYT0hMCksUWRuKGwobi5iLDY4KSxPaShKYShsKHQuYiw2OCkuYyksbWQobWEoSmEobChuLmIsNjgpLmEpLGwodC5iLDY4KS5hKSxhKSkpLERvdChlLHQpLHNidChlLG4pfWZ1bmN0aW9uIGFidChlKXt2YXIgdCxuLHIsYSxvLGYsZztmb3Iobz1uZXcgRyhlLmEuYSk7by5hPG8uYy5jLmxlbmd0aDspcj1sKHJlKG8pLDE5NCksci5lPTAsci5kLmEuJGIoKTtmb3IoYT1uZXcgRyhlLmEuYSk7YS5hPGEuYy5jLmxlbmd0aDspZm9yKHI9bChyZShhKSwxOTQpLG49ci5hLmEuZWMoKS5LYygpO24uT2IoKTspZm9yKHQ9bChuLlBiKCksODYpLGc9dC5mLktjKCk7Zy5PYigpOylmPWwoZy5QYigpLDg2KSxmLmQhPXImJihuYShyLmQsZiksKytmLmQuZSl9ZnVuY3Rpb24ga0NuKGUpe3ZhciB0LG4scixhLG8sZixnLHc7Zm9yKHc9ZS5qLmMubGVuZ3RoLG49MCx0PXcsYT0yKncsZz1uZXcgRyhlLmopO2cuYTxnLmMuYy5sZW5ndGg7KXN3aXRjaChmPWwocmUoZyksMTIpLGYuai5nKXtjYXNlIDI6Y2FzZSA0OmYucD0tMTticmVhaztjYXNlIDE6Y2FzZSAzOnI9Zi5lLmMubGVuZ3RoLG89Zi5nLmMubGVuZ3RoLHI+MCYmbz4wP2YucD10Kys6cj4wP2YucD1uKys6bz4wP2YucD1hKys6Zi5wPW4rK31DbigpLFZzKGUuaixuZXcgVzkpfWZ1bmN0aW9uIEVDbihlKXt2YXIgdCxuO249bnVsbCx0PWwoanQoZS5nLDApLDE4KTtkb3tpZihuPXQuZC5pLG5zKG4sKGZ0KCksJGYpKSlyZXR1cm4gbChRKG4sJGYpLDEyKS5pO2lmKG4uayE9KFpuKCksUHMpJiZqcihuZXcgaHIoZHIocXMobikuYS5LYygpLG5ldyBqKSkpKXQ9bCh4cihuZXcgaHIoZHIocXMobikuYS5LYygpLG5ldyBqKSkpLDE4KTtlbHNlIGlmKG4uayE9UHMpcmV0dXJuIG51bGx9d2hpbGUobiYmbi5rIT0oWm4oKSxQcykpO3JldHVybiBufWZ1bmN0aW9uIFRDbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQztmb3IoZz10LmosZj10Lmcsdz1sKGp0KGcsZy5jLmxlbmd0aC0xKSwxMTMpLEM9KFNuKDAsZy5jLmxlbmd0aCksbChnLmNbMF0sMTEzKSksRT12dWUoZSxmLHcsQyksbz0xO288Zy5jLmxlbmd0aDtvKyspbj0oU24oby0xLGcuYy5sZW5ndGgpLGwoZy5jW28tMV0sMTEzKSksYT0oU24obyxnLmMubGVuZ3RoKSxsKGcuY1tvXSwxMTMpKSxyPXZ1ZShlLGYsbixhKSxyPkUmJih3PW4sQz1hLEU9cik7dC5hPUMsdC5jPXd9ZnVuY3Rpb24gQ0NuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRTtmb3IoRT1uZXcgS3AobmV3IFVZZShlKSksZj1oZShsZShGOHQsMSksSTN0LDEyLDAsW3Qsbl0pLGc9MCx3PWYubGVuZ3RoO2c8dzsrK2cpZm9yKG89ZltnXSxFLmEuemMobywoSG4oKSxQYikpPT1udWxsLGE9bmV3IE4xKG8uYik7TGMoYS5hKXx8TGMoYS5iKTspcj1sKExjKGEuYSk/cmUoYS5hKTpyZShhLmIpLDE4KSxyLmM9PXIuZHx8ak8oRSxvPT1yLmM/ci5kOnIuYyk7cmV0dXJuIFhyKEUpLG5ldyBPbChFKX1mdW5jdGlvbiBwMChlKXtpZighZS5hLmR8fCFlLmEuZSl0aHJvdyB1ZShuZXcgbmMoKEdnKFU2dCksVTZ0LmsrIiBtdXN0IGhhdmUgYSBzb3VyY2UgYW5kIHRhcmdldCAiKyhHZyh6X2UpLHpfZS5rKSsiIHNwZWNpZmllZC4iKSkpO2lmKGUuYS5kPT1lLmEuZSl0aHJvdyB1ZShuZXcgbmMoIk5ldHdvcmsgc2ltcGxleCBkb2VzIG5vdCBzdXBwb3J0IHNlbGYtbG9vcHM6ICIrZS5hKyIgIitlLmEuZCsiICIrZS5hLmUpKTtyZXR1cm4gJHEoZS5hLmQuZyxlLmEpLCRxKGUuYS5lLmIsZS5hKSxlLmF9ZnVuY3Rpb24gU0NuKGUsdCl7dmFyIG4scixhLG8sZixnLHc7Zm9yKHQuVWcoIkNvbnN0cmFpbnRzIFBvc3Rwcm9jZXNzb3IiLDEpLGY9MCxvPW5ldyBHKGUuYik7by5hPG8uYy5jLmxlbmd0aDspe2ZvcihhPWwocmUobyksMzApLHc9MCxnPSExLHI9bmV3IEcoYS5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMTApLG4uaz09KFpuKCksUHMpJiYoZz0hMCxydChuLChOdCgpLG1XKSxwdChmKSkscnQobixkVyxwdCh3KSksKyt3KTtnJiYrK2Z9dC5WZygpfWZ1bmN0aW9uIG9idChlLHQsbil7dmFyIHIsYSxvLGYsZyx3O2lmKHI9MCx0LmIhPTAmJm4uYiE9MCl7bz1Scih0LDApLGY9UnIobiwwKSxnPXplKEdlKEJyKG8pKSksdz16ZShHZShCcihmKSkpLGE9ITA7ZG97aWYoZz53LWUuYiYmZzx3K2UuYilyZXR1cm4tMTtnPnctZS5hJiZnPHcrZS5hJiYrK3IsZzw9dyYmby5iIT1vLmQuYz9nPXplKEdlKEJyKG8pKSk6dzw9ZyYmZi5iIT1mLmQuYz93PXplKEdlKEJyKGYpKSk6YT0hMX13aGlsZShhKX1yZXR1cm4gcn1mdW5jdGlvbiBjYnQoZSx0KXt2YXIgbixyO3JldHVybiBxTyhlLmEpLFgwKGUuYSwoa1YoKSwkVyksJFcpLFgwKGUuYSxYNixYNikscj1uZXcgWHMsZmkocixYNiwoYlUoKSxZZGUpKSxxZShhdCh0LChTYigpLFpkZSkpKSE9PXFlKChMTigpLHpXKSkmJmZpKHIsWDYsR2RlKSxSdChCdChhdCh0LEJJZSkpKSYmZmkocixYNixYZGUpLGZpKHIsWDYsS2RlKSxSdChCdChhdCh0LFJJZSkpKSYmeWwocixYNixXZGUpLHV5ZShlLmEsciksbj1iUChlLmEsdCksbn1mdW5jdGlvbiBfQ24oZSx0LG4scixhKXt2YXIgbyxmLGcsdztmb3Iodz0obz1sKEswKE9vKSw5KSxuZXcgWmgobyxsKGMwKG8sby5sZW5ndGgpLDkpLDApKSxnPW5ldyBHKGUuaik7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDEyKSx0W2YucF0mJihaRG4oZix0W2YucF0sciksZDAodyxmLmopKTthPyhfdWUoZSx0LChDdCgpLGFyKSwyKm4sciksX3VlKGUsdCxlciwyKm4scikpOihfdWUoZSx0LChDdCgpLFFuKSwyKm4sciksX3VlKGUsdCxEciwyKm4scikpfWZ1bmN0aW9uIEFDbihlKXt2YXIgdCxuO2ZvcihuPW5ldyBocihkcihxcyhlKS5hLktjKCksbmV3IGopKTtqcihuKTspaWYodD1sKHhyKG4pLDE4KSx0LmQuaS5rIT0oWm4oKSxjdSkpdGhyb3cgdWUobmV3IFZwKGpoZStITihlKSsiJyBoYXMgaXRzIGxheWVyIGNvbnN0cmFpbnQgc2V0IHRvIExBU1QsIGJ1dCBoYXMgYXQgbGVhc3Qgb25lIG91dGdvaW5nIGVkZ2UgdGhhdCAgZG9lcyBub3QgZ28gdG8gYSBMQVNUX1NFUEFSQVRFIG5vZGUuIFRoYXQgbXVzdCBub3QgaGFwcGVuLiIpKX1mdW5jdGlvbiBMQ24oZSx0LG4pe3ZhciByLGEsbyxmLGc7Zm9yKG4uVWcoIkxvbmdlc3QgcGF0aCBsYXllcmluZyIsMSksZS5hPXQsZz1lLmEuYSxlLmI9V2UoVnIsZGksMjgsZy5jLmxlbmd0aCwxNSwxKSxyPTAsZj1uZXcgRyhnKTtmLmE8Zi5jLmMubGVuZ3RoOylhPWwocmUoZiksMTApLGEucD1yLGUuYltyXT0tMSwrK3I7Zm9yKG89bmV3IEcoZyk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDEwKSwkMnQoZSxhKTtnLmMubGVuZ3RoPTAsZS5hPW51bGwsZS5iPW51bGwsbi5WZygpfWZ1bmN0aW9uIE1DbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKHc9MCxDPW5ldyBHKGUuYSk7Qy5hPEMuYy5jLmxlbmd0aDspe2ZvcihFPWwocmUoQyksMTApLGc9MCxvPW5ldyBocihkcihrYShFKS5hLktjKCksbmV3IGopKTtqcihvKTspYT1sKHhyKG8pLDE4KSxMPUkxKGEuYykuYixCPUkxKGEuZCkuYixnPWIuTWF0aC5tYXgoZyxiLk1hdGguYWJzKEItTCkpO3c9Yi5NYXRoLm1heCh3LGcpfXJldHVybiBmPXIqYi5NYXRoLm1pbigxLHQvbikqdyxmfWZ1bmN0aW9uIERDbihlLHQpe3ZhciBuLHIsYSxvLGY7Zm9yKGY9bChRKHQsKEhjKCksYkllKSksNDMzKSxvPVJyKHQuYiwwKTtvLmIhPW8uZC5jOylpZihhPWwoQnIobyksNDApLGUuYlthLmddPT0wKXtzd2l0Y2goZi5nKXtjYXNlIDA6Q2R0KGUsYSk7YnJlYWs7Y2FzZSAxOiRFbihlLGEpfWUuYlthLmddPTJ9Zm9yKHI9UnIoZS5hLDApO3IuYiE9ci5kLmM7KW49bChCcihyKSw2NSksTnkobi5iLmQsbiwhMCksTnkobi5jLmIsbiwhMCk7cnQodCwoUWkoKSxzSWUpLGUuYSl9ZnVuY3Rpb24gSzllKGUpe3ZhciB0O3JldHVybiB0PW5ldyBoXyxlJjI1NiYmKHQuYSs9IkYiKSxlJjEyOCYmKHQuYSs9IkgiKSxlJjUxMiYmKHQuYSs9IlgiKSxlJjImJih0LmErPSJpIiksZSY4JiYodC5hKz0ibSIpLGUmNCYmKHQuYSs9InMiKSxlJjMyJiYodC5hKz0idSIpLGUmNjQmJih0LmErPSJ3IiksZSYxNiYmKHQuYSs9IngiKSxlJm0wJiYodC5hKz0iLCIpLFF3ZSh0LmEpfWZ1bmN0aW9uIElDbihlLHQpe3ZhciBuLHIsYSxvLGYsZzt0LlVnKEF5dCwxKSxhPWwoYXQoZSwoejEoKSx2TSkpLDEwNyksbz0oIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSksZj1SN24obyksZz1iLk1hdGgubWF4KGYuYSx6ZShHZShhdChlLCh1ZygpLG1NKSkpKS0oYS5iK2EuYykpLHI9Yi5NYXRoLm1heChmLmIsemUoR2UoYXQoZSxVVykpKS0oYS5kK2EuYSkpLG49ci1mLmIsSGkoZSxiTSxuKSxIaShlLFp4LGcpLEhpKGUsWlQscituKSx0LlZnKCl9ZnVuY3Rpb24gV3UoZSx0KXtGbygpO3ZhciBuLHIsYSxvO3JldHVybiB0P3Q9PShHaSgpLG1BdCl8fCh0PT1zQXR8fHQ9PVN2fHx0PT1pQXQpJiZlIT1VUGU/bmV3IHFrZShlLHQpOihyPWwodCw2OTIpLG49ci4kaygpLG58fChXayhpYygoRWwoKSxpbyksdCkpLG49ci4kaygpKSxvPSghbi5pJiYobi5pPW5ldyBQciksbi5pKSxhPWwoaGMoem8oby5mLGUpKSwyMDQxKSwhYSYma2kobyxlLGE9bmV3IHFrZShlLHQpKSxhKTp0QXR9ZnVuY3Rpb24gT0NuKGUsdCl7dmFyIG4scjtpZihyPWpPKGUuYix0LmIpLCFyKXRocm93IHVlKG5ldyBuYygiSW52YWxpZCBoaXRib3hlcyBmb3Igc2NhbmxpbmUgY29uc3RyYWludCBjYWxjdWxhdGlvbi4iKSk7KGUwdCh0LmIsbChLdW4oZS5iLHQuYiksNjApKXx8ZTB0KHQuYixsKEd1bihlLmIsdC5iKSw2MCkpKSYmKFZnKCksU3RyaW5nLmZyb21DaGFyQ29kZSgxMCkpLGUuYVt0LmIuZl09bChjc2UoZS5iLHQuYiksNjApLG49bChvc2UoZS5iLHQuYiksNjApLG4mJihlLmFbbi5mXT10LmIpfWZ1bmN0aW9uIE5DbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMO2ZvcihvPWw2KHQsITEsITEpLEU9UU4obyksTD16ZShHZShhdCh0LChJQSgpLFcwZSkpKSksYT12d3QoRSxMK2UuYSksQz1uZXcgR3VlKGEpLHBjKEMsdCksa2koZS5iLHQsQyksJG4obi5jLEMpLHc9KCF0Lm4mJih0Lm49bmV3IG50KGVjLHQsMSw3KSksdC5uKSxnPW5ldyBvcih3KTtnLmUhPWcuaS5nYygpOylmPWwoZ3IoZyksMTM1KSxyPXVQKGUsZiwhMCwwLDApLCRuKG4uYyxyKTtyZXR1cm4gQ31mdW5jdGlvbiBQQ24oZSx0KXt2YXIgbixyLGEsbyxmLGcsdztmb3IoYT1uZXcgYnQsbj0wO248PWUuajtuKyspcj1uZXcgeXUodCksci5wPWUuai1uLCRuKGEuYyxyKTtmb3IoZz1uZXcgRyhlLnApO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwxMCksVmEoZixsKGp0KGEsZS5qLWUuZ1tmLnBdKSwzMCkpO2ZvcihvPW5ldyBHKGEpO28uYTxvLmMuYy5sZW5ndGg7KXc9bChyZShvKSwzMCksdy5hLmMubGVuZ3RoPT0wJiZRXyhvKTt0LmIuYy5sZW5ndGg9MCxyYSh0LmIsYSl9ZnVuY3Rpb24gQkNuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2Zvcih3PWwoUShlLChmdCgpLHppKSksMTIpLEU9SWMoaGUobGUoRWEsMSksZHQsOCwwLFt3Lmkubix3Lm4sdy5hXSkpLmEsQz1lLmkubi5iLG49a2QoZS5lKSxhPW4sbz0wLGY9YS5sZW5ndGg7bzxmOysrbylyPWFbb10sRmEocix3KSxrbyhyLmEsbmV3IGx0KEUsQykpLHQmJihnPWwoUShyLChOdCgpLGNjKSksNzUpLGd8fChnPW5ldyBibCxydChyLGNjLGcpKSx1aShnLG5ldyBsdChFLEMpKSl9ZnVuY3Rpb24gRkNuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2ZvcihhPWwoUShlLChmdCgpLHppKSksMTIpLEU9SWMoaGUobGUoRWEsMSksZHQsOCwwLFthLmkubixhLm4sYS5hXSkpLmEsQz1lLmkubi5iLG49a2QoZS5nKSxmPW4sZz0wLHc9Zi5sZW5ndGg7Zzx3OysrZylvPWZbZ10scG8obyxhKSxPNShvLmEsbmV3IGx0KEUsQykpLHQmJihyPWwoUShvLChOdCgpLGNjKSksNzUpLHJ8fChyPW5ldyBibCxydChvLGNjLHIpKSx1aShyLG5ldyBsdChFLEMpKSl9ZnVuY3Rpb24gUkNuKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRTtpZihyPWUuYixvPXIuZSxmPVU4KGwoUShyLChOdCgpLE1zKSksMTAxKSksbj0hIW8mJmwoUShvLChmdCgpLEx1KSksMjEpLkhjKChIbygpLHZmKSksIShmfHxuKSlmb3IoRT0oZz1uZXcgZ2koZS5lKS5hLnZjKCkuS2MoKSxuZXcgZnMoZykpO0UuYS5PYigpOyl3PSh0PWwoRS5hLlBiKCksNDQpLGwodC5tZCgpLDExMykpLHcuYSYmKGE9dy5kLE1jKGEsbnVsbCksdy5jPSEwLGUuYT0hMCl9ZnVuY3Rpb24gakNuKGUsdCl7dmFyIG4scixhLG87Zm9yKHQuVWcoIlNlbWktSW50ZXJhY3RpdmUgQ3Jvc3NpbmcgTWluaW1pemF0aW9uIFByb2Nlc3NvciIsMSksbj0hMSxhPW5ldyBHKGUuYik7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDMwKSxvPU9OKGxWKEZpKEZpKG5ldyBibihudWxsLG5ldyBrbihyLmEsMTYpKSxuZXcgaEkpLG5ldyB2UyksbmV3IGZJKSxuZXcgX2opLG49bnxvLmEhPW51bGw7biYmcnQoZSwoZnQoKSx6TGUpLChIbigpLCEwKSksdC5WZygpfWZ1bmN0aW9uICRDbihlLHQpe3ZhciBuLHIsYSxvLGYsZztmb3IoZS5iPW5ldyBidCxlLmQ9bChRKHQsKGZ0KCksWHgpKSwyMzQpLGUuZT1FYm4oZS5kKSxvPW5ldyBvcyxhPU8xKGhlKGxlKE44dCwxKSxNM3QsMzYsMCxbdF0pKSxmPTA7ZjxhLmMubGVuZ3RoOylyPShTbihmLGEuYy5sZW5ndGgpLGwoYS5jW2ZdLDM2KSksci5wPWYrKyxuPW5ldyBFdnQocixlLmEsZS5iKSxyYShhLG4uYiksdnQoZS5iLG4pLG4ucyYmKGc9UnIobywwKSx6TyhnLG4pKTtyZXR1cm4gZS5jPW5ldyBLcyxvfWZ1bmN0aW9uIHpDbihlLHQpe3ZhciBuLHIsYSxvLGYsZztmb3IoZj1sKGwoJGkoZS5yLHQpLDIxKSw4NykuS2MoKTtmLk9iKCk7KW89bChmLlBiKCksMTE3KSxuPW8uYz9qNGUoby5jKTowLG4+MD9vLmE/KGc9by5iLk1mKCkuYSxuPmcmJihhPShuLWcpLzIsby5kLmI9YSxvLmQuYz1hKSk6by5kLmM9ZS5zK246V18oZS51KSYmKHI9JHhlKG8uYiksci5jPDAmJihvLmQuYj0tci5jKSxyLmMrci5iPm8uYi5NZigpLmEmJihvLmQuYz1yLmMrci5iLW8uYi5NZigpLmEpKX1mdW5jdGlvbiBxQ24oZSx0KXt2YXIgbixyLGEsbyxmO2Y9bmV3IGJ0LG49dDtkbyBvPWwoY3IoZS5iLG4pLDEzMSksby5CPW4uYyxvLkQ9bi5kLCRuKGYuYyxvKSxuPWwoY3IoZS5rLG4pLDE4KTt3aGlsZShuKTtyZXR1cm4gcj0oU24oMCxmLmMubGVuZ3RoKSxsKGYuY1swXSwxMzEpKSxyLmo9ITAsci5BPWwoci5kLmEuZWMoKS5LYygpLlBiKCksMTgpLmMuaSxhPWwoanQoZixmLmMubGVuZ3RoLTEpLDEzMSksYS5xPSEwLGEuQz1sKGEuZC5hLmVjKCkuS2MoKS5QYigpLDE4KS5kLmksZn1mdW5jdGlvbiBIQ24oZSl7dmFyIHQsbjtpZih0PWwoZS5hLDE3KS5hLG49bChlLmIsMTcpLmEsdD49MCl7aWYodD09bilyZXR1cm4gbmV3IGNhKHB0KC10LTEpLHB0KC10LTEpKTtpZih0PT0tbilyZXR1cm4gbmV3IGNhKHB0KC10KSxwdChuKzEpKX1yZXR1cm4gYi5NYXRoLmFicyh0KT5iLk1hdGguYWJzKG4pP3Q8MD9uZXcgY2EocHQoLXQpLHB0KG4pKTpuZXcgY2EocHQoLXQpLHB0KG4rMSkpOm5ldyBjYShwdCh0KzEpLHB0KG4pKX1mdW5jdGlvbiBWQ24oZSl7dmFyIHQsbjtuPWwoUShlLChOdCgpLFF1KSksMTcxKSx0PWwoUShlLChmdCgpLGh2KSksMzExKSxuPT0oaGYoKSwkYik/KHJ0KGUsUXUsRUIpLHJ0KGUsaHYsKGVwKCksRjYpKSk6bj09ZDQ/KHJ0KGUsUXUsRUIpLHJ0KGUsaHYsKGVwKCksVXgpKSk6dD09KGVwKCksRjYpPyhydChlLFF1LCRiKSxydChlLGh2LHdCKSk6dD09VXgmJihydChlLFF1LGQ0KSxydChlLGh2LHdCKSl9ZnVuY3Rpb24gSVUoKXtJVT1VLElCPW5ldyBwdGUsWEV0PWZpKG5ldyBYcywodW8oKSxidSksKHZvKCksTEspKSxaRXQ9eWwoZmkobmV3IFhzLGJ1LEZLKSxtYyxCSyksZVR0PVRkKFRkKHZfKHlsKGZpKG5ldyBYcyx5MCx6SyksbWMsJEspLF91KSxqSykscUspLFFFdD15bChmaShmaShmaShuZXcgWHMsdmcsREspLF91LE9LKSxfdSxMVCksbWMsSUspLEpFdD15bChmaShmaShuZXcgWHMsX3UsTFQpLF91LEFLKSxtYyxfSyl9ZnVuY3Rpb24gR0EoKXtHQT1VLHJUdD1maSh5bChuZXcgWHMsKHVvKCksbWMpLCh2bygpLFJBZSkpLGJ1LExLKSxvVHQ9VGQoVGQodl8oeWwoZmkobmV3IFhzLHkwLHpLKSxtYywkSyksX3UpLGpLKSxxSyksaVR0PXlsKGZpKGZpKGZpKG5ldyBYcyx2ZyxESyksX3UsT0spLF91LExUKSxtYyxJSyksYVR0PWZpKGZpKG5ldyBYcyxidSxGSyksbWMsQkspLHNUdD15bChmaShmaShuZXcgWHMsX3UsTFQpLF91LEFLKSxtYyxfSyl9ZnVuY3Rpb24gVUNuKGUsdCxuLHIsYSl7dmFyIG8sZjsoIURvKHQpJiZ0LmMuaS5jPT10LmQuaS5jfHwhdWZ0KEljKGhlKGxlKEVhLDEpLGR0LDgsMCxbYS5pLm4sYS5uLGEuYV0pKSxuKSkmJiFEbyh0KSYmKHQuYz09YT9Qayh0LmEsMCxuZXcgRW8obikpOnVpKHQuYSxuZXcgRW8obikpLHImJiFXMChlLmEsbikmJihmPWwoUSh0LChOdCgpLGNjKSksNzUpLGZ8fChmPW5ldyBibCxydCh0LGNjLGYpKSxvPW5ldyBFbyhuKSxDcyhmLG8sZi5jLmIsZi5jKSxuYShlLmEsbykpKX1mdW5jdGlvbiB1YnQoZSx0KXt2YXIgbixyLGEsbztmb3Iobz1ZcihtbyhmZyxpZyhZcihtbyh0PT1udWxsPzA6ZXModCksZGcpKSwxNSkpKSxuPW8mZS5iLmxlbmd0aC0xLGE9bnVsbCxyPWUuYltuXTtyO2E9cixyPXIuYSlpZihyLmQ9PW8mJnlkKHIuaSx0KSlyZXR1cm4gYT9hLmE9ci5hOmUuYltuXT1yLmEsUkplKGwoTGYoci5jKSw2MDQpLGwoTGYoci5mKSw2MDQpKSxXSShsKExmKHIuYiksMjI3KSxsKExmKHIuZSksMjI3KSksLS1lLmYsKytlLmUsITA7cmV0dXJuITF9ZnVuY3Rpb24gR0NuKGUpe3ZhciB0LG47Zm9yKG49bmV3IGhyKGRyKGthKGUpLmEuS2MoKSxuZXcgaikpO2pyKG4pOylpZih0PWwoeHIobiksMTgpLHQuYy5pLmshPShabigpLGN1KSl0aHJvdyB1ZShuZXcgVnAoamhlK0hOKGUpKyInIGhhcyBpdHMgbGF5ZXIgY29uc3RyYWludCBzZXQgdG8gRklSU1QsIGJ1dCBoYXMgYXQgbGVhc3Qgb25lIGluY29taW5nIGVkZ2UgdGhhdCAgZG9lcyBub3QgY29tZSBmcm9tIGEgRklSU1RfU0VQQVJBVEUgbm9kZS4gVGhhdCBtdXN0IG5vdCBoYXBwZW4uIikpfWZ1bmN0aW9uIEtDbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEU7aWYoYT1kMXQoZS5EYiYyNTQpLGE9PTApZS5FYj1uO2Vsc2V7aWYoYT09MSlnPVdlKHdhLFJuLDEsMiw1LDEpLG89bXVlKGUsdCksbz09MD8oZ1swXT1uLGdbMV09ZS5FYik6KGdbMF09ZS5FYixnWzFdPW4pO2Vsc2UgZm9yKGc9V2Uod2EsUm4sMSxhKzEsNSwxKSxmPWptKGUuRWIpLHI9Mix3PTAsRT0wO3I8PTEyODtyPDw9MSlyPT10P2dbRSsrXT1uOmUuRGImciYmKGdbRSsrXT1mW3crK10pO2UuRWI9Z31lLkRifD10fWZ1bmN0aW9uIGxidChlLHQsbil7dmFyIHIsYSxvLGY7Zm9yKHRoaXMuYj1uZXcgYnQsYT0wLHI9MCxmPW5ldyBHKGUpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxNzYpLG4mJmVMbihvKSx2dCh0aGlzLmIsbyksYSs9by5vLHIrPW8ucDt0aGlzLmIuYy5sZW5ndGg+MCYmKG89bChqdCh0aGlzLmIsMCksMTc2KSxhKz1vLm8scis9by5wKSxhKj0yLHIqPTIsdD4xP2E9dWEoYi5NYXRoLmNlaWwoYSp0KSk6cj11YShiLk1hdGguY2VpbChyL3QpKSx0aGlzLmE9bmV3IEk4ZShhLHIpfWZ1bmN0aW9uIGhidChlLHQsbixyLGEsbyl7dmFyIGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmU7Zm9yKEM9cix0LmomJnQubz8oej1sKGNyKGUuZix0LkEpLDYwKSxKPXouZC5jK3ouZC5iLC0tQyk6Sj10LmEuYyt0LmEuYixMPWEsbi5xJiZuLm8/KHo9bChjcihlLmYsbi5DKSw2MCksRT16LmQuYywrK0wpOkU9bi5hLmMsdGU9RS1KLHc9Yi5NYXRoLm1heCgyLEwtQyksZz10ZS93LFY9SitnLEI9QztCPEw7KytCKWY9bChvLlhiKEIpLDEzMSksZmU9Zi5hLmIsZi5hLmM9Vi1mZS8yLFYrPWd9ZnVuY3Rpb24gZmJ0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQjthPXQ/bmV3IEllZTpuZXcgT2VlLG89ITE7ZG8gZm9yKG89ITEsRT10P2xmKGUuYik6ZS5iLHc9RS5LYygpO3cuT2IoKTspZm9yKGc9bCh3LlBiKCksMzApLEI9X3coZy5hKSx0fHxsZihCKSxMPW5ldyBHKEIpO0wuYTxMLmMuYy5sZW5ndGg7KUM9bChyZShMKSwxMCksYS5NYihDKSYmKHI9QyxuPWwoUShDLChmdCgpLGMzKSksMzEzKSxmPXQ/bi5iOm4uayxvPVJidChyLGYsdCwhMSkpO3doaWxlKG8pfWZ1bmN0aW9uIFc5ZShlLHQsbixyLGEsbyl7dmFyIGYsZyx3LEUsQyxMO2ZvcihFPW4uYy5sZW5ndGgsbyYmKGUuYz1XZShWcixkaSwyOCx0Lmxlbmd0aCwxNSwxKSksZj1hPzA6dC5sZW5ndGgtMTthP2Y8dC5sZW5ndGg6Zj49MDtmKz1hPzE6LTEpe2ZvcihnPXRbZl0sdz1yPT0oQ3QoKSxhcik/YT9PYyhnLHIpOmxmKE9jKGcscikpOmE/bGYoT2MoZyxyKSk6T2MoZyxyKSxvJiYoZS5jW2cucF09dy5nYygpKSxMPXcuS2MoKTtMLk9iKCk7KUM9bChMLlBiKCksMTIpLGUuZFtDLnBdPUUrKztyYShuLHcpfX1mdW5jdGlvbiBkYnQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEM7Zm9yKG89emUoR2UoZS5iLktjKCkuUGIoKSkpLEU9emUoR2UoVjNuKHQuYikpKSxyPW1kKEphKGUuYSksRS1uKSxhPW1kKEphKHQuYSksbi1vKSxDPU9pKHIsYSksbWQoQywxLyhFLW8pKSx0aGlzLmE9Qyx0aGlzLmI9bmV3IGJ0LGc9ITAsZj1lLmIuS2MoKSxmLlBiKCk7Zi5PYigpOyl3PXplKEdlKGYuUGIoKSkpLGcmJnctbj53ZmUmJih0aGlzLmIuRmMobiksZz0hMSksdGhpcy5iLkZjKHcpO2cmJnRoaXMuYi5GYyhuKX1mdW5jdGlvbiBXQ24oZSl7dmFyIHQsbixyLGE7aWYoZl9uKGUsZS5uKSxlLmQuYy5sZW5ndGg+MCl7Zm9yKHVfKGUuYyk7TDllKGUsbChyZShuZXcgRyhlLmUuYSkpLDEyNSkpPGUuZS5hLmMubGVuZ3RoOyl7Zm9yKHQ9UDduKGUpLGE9dC5lLmUtdC5kLmUtdC5hLHQuZS5qJiYoYT0tYSkscj1uZXcgRyhlLmUuYSk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDEyNSksbi5qJiYobi5lKz1hKTt1XyhlLmMpfXVfKGUuYykscDllKGUsbChyZShuZXcgRyhlLmUuYSkpLDEyNSkpLG12dChlKX19ZnVuY3Rpb24gWUNuKGUsdCl7aHgoKTt2YXIgbixyO2lmKG49X29lKGhFKCksdC5QZygpKSxuKXtpZihyPW4uaixEZShlLDIwNykpcmV0dXJuIGsybihsKGUsMjcpKT92bChyLChyMSgpLGhhKSl8fHZsKHIsUG4pOnZsKHIsKHIxKCksaGEpKTtpZihEZShlLDMyNikpcmV0dXJuIHZsKHIsKHIxKCksemQpKTtpZihEZShlLDE5MykpcmV0dXJuIHZsKHIsKHIxKCkseXYpKTtpZihEZShlLDM2NikpcmV0dXJuIHZsKHIsKHIxKCksUzIpKX1yZXR1cm4hMH1mdW5jdGlvbiBYQ24oZSx0LG4pe3ZhciByLGEsbyxmLGcsdztpZihhPW4sbz1hLkxrKCksdXAoZS5lLG8pKXtpZihvLlNpKCkpe2ZvcihyPWwoZS5nLDEyNCksZj0wO2Y8ZS5pOysrZilpZihnPXJbZl0sUGkoZyxhKSYmZiE9dCl0aHJvdyB1ZShuZXcgWW4oV1ApKX19ZWxzZSBmb3Iodz1XdShlLmUuRGgoKSxvKSxyPWwoZS5nLDEyNCksZj0wO2Y8ZS5pOysrZilpZihnPXJbZl0sdy5hbShnLkxrKCkpJiZmIT10KXRocm93IHVlKG5ldyBZbihaUCkpO3JldHVybiBsKG42KGUsdCxuKSw3Nil9ZnVuY3Rpb24gZ2J0KGUsdCl7aWYodCBpbnN0YW5jZW9mIE9iamVjdCl0cnl7aWYodC5fX2phdmEkZXhjZXB0aW9uPWUsbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoIm1zaWUiKSE9LTEmJiRkb2MuZG9jdW1lbnRNb2RlPDkpcmV0dXJuO3ZhciBuPWU7T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCx7Y2F1c2U6e2dldDpmdW5jdGlvbigpe3ZhciByPW4uaGUoKTtyZXR1cm4gciYmci5mZSgpfX0sc3VwcHJlc3NlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uZ2UoKX19fSl9Y2F0Y2h7fX1mdW5jdGlvbiBwYnQoZSx0KXt2YXIgbixyLGEsbyxmO2lmKHI9dD4+NSx0Jj0zMSxyPj1lLmQpcmV0dXJuIGUuZTwwPyhDZCgpLHc2dCk6KENkKCksQkwpO2lmKG89ZS5kLXIsYT1XZShWcixkaSwyOCxvKzEsMTUsMSksajluKGEsbyxlLmEscix0KSxlLmU8MCl7Zm9yKG49MDtuPHImJmUuYVtuXT09MDtuKyspO2lmKG48cnx8dD4wJiZlLmFbbl08PDMyLXQpe2ZvcihuPTA7bjxvJiZhW25dPT0tMTtuKyspYVtuXT0wO249PW8mJisrbywrK2Fbbl19fXJldHVybiBmPW5ldyBJbShlLmUsbyxhKSxpQShmKSxmfWZ1bmN0aW9uIGJidChlKXt2YXIgdCxuLHIsYTtyZXR1cm4gYT1NMShlKSxuPW5ldyB5ayhhKSxyPW5ldyBVSShhKSx0PW5ldyBidCxyYSh0LCghZS5kJiYoZS5kPW5ldyBMbihqcyxlLDgsNSkpLGUuZCkpLHJhKHQsKCFlLmUmJihlLmU9bmV3IExuKGpzLGUsNyw0KSksZS5lKSksbCh5YyhmYyhGaShuZXcgYm4obnVsbCxuZXcga24odCwxNikpLG4pLHIpLFN5KG5ldyB5dCxuZXcgamksbmV3IHFuLG5ldyBVbixoZShsZShvYywxKSxpdCwxMDgsMCxbKEZsKCksaTQpLEVjXSkpKSwyMSl9ZnVuY3Rpb24gUUNuKGUsdCl7dmFyIG47c3dpdGNoKG49bChRKGUsKE50KCkscFcpKSwyODMpLHQuVWcoIkxhYmVsIHNpZGUgc2VsZWN0aW9uICgiK24rIikiLDEpLG4uZyl7Y2FzZSAwOl8ydChlLChJaCgpLGtnKSk7YnJlYWs7Y2FzZSAxOl8ydChlLChJaCgpLEdiKSk7YnJlYWs7Y2FzZSAyOkdtdChlLChJaCgpLGtnKSk7YnJlYWs7Y2FzZSAzOkdtdChlLChJaCgpLEdiKSk7YnJlYWs7Y2FzZSA0OkNidChlLChJaCgpLGtnKSk7YnJlYWs7Y2FzZSA1OkNidChlLChJaCgpLEdiKSl9dC5WZygpfWZ1bmN0aW9uIHVwKGUsdCl7Rm8oKTt2YXIgbixyLGE7cmV0dXJuIHQuSmsoKT8hMDp0LklrKCk9PS0yP3Q9PShreCgpLHU5KXx8dD09Yzl8fHQ9PWFwZXx8dD09b3BlPyEwOihhPWUuRGgoKSxtcyhhLHQpPj0wPyExOihuPWc2KChFbCgpLGlvKSxhLHQpLG4/KHI9bi5JaygpLChyPjF8fHI9PS0xKSYma3coaWMoaW8sbikpIT0zKTohMCkpOiExfWZ1bmN0aW9uIEpDbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3O3JldHVybiBnPWJjKGwoT2UoKCF0LmImJih0LmI9bmV3IExuKF9yLHQsNCw3KSksdC5iKSwwKSw4NCkpLHc9YmMobChPZSgoIXQuYyYmKHQuYz1uZXcgTG4oX3IsdCw1LDgpKSx0LmMpLDApLDg0KSksZHMoZyk9PWRzKHcpfHxMeSh3LGcpP251bGw6KGY9V08odCksZj09bj9yOihvPWwoY3IoZS5hLGYpLDEwKSxvJiYoYT1vLmUsYSk/YTpudWxsKSl9ZnVuY3Rpb24gWkNuKGUsdCxuKXt2YXIgcixhLG8sZixnO2ZvcihuLlVnKCJMb25nZXN0IHBhdGggdG8gc291cmNlIGxheWVyaW5nIiwxKSxlLmE9dCxnPWUuYS5hLGUuYj1XZShWcixkaSwyOCxnLmMubGVuZ3RoLDE1LDEpLHI9MCxmPW5ldyBHKGcpO2YuYTxmLmMuYy5sZW5ndGg7KWE9bChyZShmKSwxMCksYS5wPXIsZS5iW3JdPS0xLCsrcjtmb3Iobz1uZXcgRyhnKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMTApLHoydChlLGEpO2cuYy5sZW5ndGg9MCxlLmE9bnVsbCxlLmI9bnVsbCxuLlZnKCl9ZnVuY3Rpb24gWTllKGUsdCxuKXt2YXIgcixhLG8sZixnLHc7aWYocj1EdW4obixlLmxlbmd0aCksZj1lW3JdLG89VUplKG4sZi5sZW5ndGgpLGZbb10uaz09KFpuKCksVXMpKWZvcih3PXQuaixhPTA7YTx3LmMubGVuZ3RoO2ErKylnPShTbihhLHcuYy5sZW5ndGgpLGwody5jW2FdLDEyKSksKG4/Zy5qPT0oQ3QoKSxhcik6Zy5qPT0oQ3QoKSxlcikpJiZSdChCdChRKGcsKGZ0KCkseEIpKSkpJiYocmYodyxhLGwoUShmW29dLChmdCgpLHppKSksMTIpKSxvKz1uPzE6LTEpfWZ1bmN0aW9uIGVTbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEU7dC5VZygiR3JlZWR5IFdpZHRoIEFwcHJveGltYXRvciIsMSksbj16ZShHZShhdChlLCh6MSgpLEtXKSkpKSx3PWwoYXQoZSx2TSksMTA3KSxvPWwoYXQoZSxjT2UpLDM5NCksZj1SdChCdChhdChlLG9PZSkpKSxnPXplKEdlKGF0KGUsd00pKSksRT0oIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSksdjdlKEUpLGE9bmV3IHdpdChuLG8sZikscj1sX24oYSxFLGcsdyksSGkoZSwodWcoKSxUNCksci5jKSx0LlZnKCl9ZnVuY3Rpb24gbWJ0KGUpe2lmKGUuZz09bnVsbClzd2l0Y2goZS5wKXtjYXNlIDA6ZS5nPUUybihlKT8oSG4oKSxTVCk6KEhuKCksUGIpO2JyZWFrO2Nhc2UgMTplLmc9Zk4oYm1uKGUpKTticmVhaztjYXNlIDI6ZS5nPXdOKGdibihlKSk7YnJlYWs7Y2FzZSAzOmUuZz1ZZ24oZSk7YnJlYWs7Y2FzZSA0OmUuZz1uZXcgcGEoV2duKGUpKTticmVhaztjYXNlIDY6ZS5nPWFwKEpnbihlKSk7YnJlYWs7Y2FzZSA1OmUuZz1wdChvMm4oZSkpO2JyZWFrO2Nhc2UgNzplLmc9X0Uod21uKGUpKX1yZXR1cm4gZS5nfWZ1bmN0aW9uIFg5ZShlKXtpZihlLm49PW51bGwpc3dpdGNoKGUucCl7Y2FzZSAwOmUubj1UMm4oZSk/KEhuKCksU1QpOihIbigpLFBiKTticmVhaztjYXNlIDE6ZS5uPWZOKG1tbihlKSk7YnJlYWs7Y2FzZSAyOmUubj13TihwYm4oZSkpO2JyZWFrO2Nhc2UgMzplLm49WGduKGUpO2JyZWFrO2Nhc2UgNDplLm49bmV3IHBhKFFnbihlKSk7YnJlYWs7Y2FzZSA2OmUubj1hcChaZ24oZSkpO2JyZWFrO2Nhc2UgNTplLm49cHQoYzJuKGUpKTticmVhaztjYXNlIDc6ZS5uPV9FKHZtbihlKSl9cmV0dXJuIGUubn1mdW5jdGlvbiB2YnQoZSx0LG4scil7dmFyIGEsbyxmLGcsdztpZihnPShGbygpLGwodCw2OSkueGsoKSksdXAoZS5lLHQpKXtpZih0LlNpKCkmJiRVKGUsdCxyLERlKHQsMTAyKSYmKGwodCwxOSkuQmImSW8pIT0wKSl0aHJvdyB1ZShuZXcgWW4oV1ApKX1lbHNlIGZvcih3PVd1KGUuZS5EaCgpLHQpLGE9bChlLmcsMTI0KSxmPTA7ZjxlLmk7KytmKWlmKG89YVtmXSx3LmFtKG8uTGsoKSkpdGhyb3cgdWUobmV3IFluKFpQKSk7X0EoZSx0OWUoZSx0LG4pLGc/bChyLDc2KTpzZyh0LHIpKX1mdW5jdGlvbiB3YnQoZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKG89bmV3IEcoZS5hLmEpO28uYTxvLmMuYy5sZW5ndGg7KXI9bChyZShvKSwzMTYpLHIuZz0wLHIuaT0wLHIuZS5hLiRiKCk7Zm9yKGE9bmV3IEcoZS5hLmEpO2EuYTxhLmMuYy5sZW5ndGg7KWZvcihyPWwocmUoYSksMzE2KSxuPXIuYS5hLmVjKCkuS2MoKTtuLk9iKCk7KWZvcih0PWwobi5QYigpLDYwKSxnPXQuYy5LYygpO2cuT2IoKTspZj1sKGcuUGIoKSw2MCksZi5hIT1yJiYobmEoci5lLGYpLCsrZi5hLmcsKytmLmEuaSl9ZnVuY3Rpb24gdFNuKGUpe3ZhciB0LG4scixhLG87YT1sKFEoZSwoTnQoKSxidikpLDIxKSxvPWwoUShlLHhXKSwyMSksbj1uZXcgbHQoZS5mLmErZS5kLmIrZS5kLmMsZS5mLmIrZS5kLmQrZS5kLmEpLHQ9bmV3IEVvKG4pLGEuSGMoKG1oKCksQTQpKSYmKHI9bChRKGUscVQpLDgpLG8uSGMoKFpsKCksYUMpKSYmKHIuYTw9MCYmKHIuYT0yMCksci5iPD0wJiYoci5iPTIwKSksdC5hPWIuTWF0aC5tYXgobi5hLHIuYSksdC5iPWIuTWF0aC5tYXgobi5iLHIuYikpLHJMbihlLG4sdCl9ZnVuY3Rpb24gblNuKGUsdCl7dmFyIG4scixhO3QuYT8oak8oZS5iLHQuYiksZS5hW3QuYi5pXT1sKGNzZShlLmIsdC5iKSw4Niksbj1sKG9zZShlLmIsdC5iKSw4NiksbiYmKGUuYVtuLmldPXQuYikpOihyPWwoY3NlKGUuYix0LmIpLDg2KSxyJiZyPT1lLmFbdC5iLmldJiZyLmQmJnIuZCE9dC5iLmQmJnIuZi5GYyh0LmIpLGE9bChvc2UoZS5iLHQuYiksODYpLGEmJmUuYVthLmldPT10LmImJmEuZCYmYS5kIT10LmIuZCYmdC5iLmYuRmMoYSksdGFlKGUuYix0LmIpKX1mdW5jdGlvbiB5YnQoZSx0KXt2YXIgbixyLGEsbyxmLGc7cmV0dXJuIG89ZS5kLGc9emUoR2UoUShlLChOdCgpLHgyKSkpKSxnPDAmJihnPTAscnQoZSx4MixnKSksdC5vLmI9ZyxmPWIuTWF0aC5mbG9vcihnLzIpLHI9bmV3IGd1LGxhKHIsKEN0KCksZXIpKSxNYyhyLHQpLHIubi5iPWYsYT1uZXcgZ3UsbGEoYSxhciksTWMoYSx0KSxhLm4uYj1mLEZhKGUsciksbj1uZXcgVHcscGMobixlKSxydChuLGNjLG51bGwpLHBvKG4sYSksRmEobixvKSxiQW4odCxlLG4pLGxrbihlLG4pLG59ZnVuY3Rpb24gclNuKGUpe3ZhciB0LG47cmV0dXJuIG49bChRKGUsKGZ0KCksTHUpKSwyMSksdD1uZXcgWHMsbi5IYygoSG8oKSxVTCkpJiYoRGgodCxHRXQpLERoKHQsekRlKSksKG4uSGMoJFQpfHxSdChCdChRKGUsKE50KCksaWRlKSkpKSkmJihEaCh0LHpEZSksbi5IYyhCNikmJkRoKHQsV0V0KSksbi5IYyh2ZikmJkRoKHQsVUV0KSxuLkhjKEdMKSYmRGgodCxZRXQpLG4uSGModFcpJiZEaCh0LEtFdCksbi5IYyhSVCkmJkRoKHQsSEV0KSxuLkhjKGpUKSYmRGgodCxWRXQpLHR9ZnVuY3Rpb24gaVNuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQjtyZXR1cm4gcj1lLmQsbz10LmQsZz1yK28sdz1lLmUhPXQuZT8tMToxLGc9PTI/KEM9bW8odmEoZS5hWzBdLFZvKSx2YSh0LmFbMF0sVm8pKSxCPVlyKEMpLEw9WXIodWIoQywzMikpLEw9PTA/bmV3IFFnKHcsQik6bmV3IEltKHcsMixoZShsZShWciwxKSxkaSwyOCwxNSxbQixMXSkpKToobj1lLmEsYT10LmEsZj1XZShWcixkaSwyOCxnLDE1LDEpLHI0bihuLHIsYSxvLGYpLEU9bmV3IEltKHcsZyxmKSxpQShFKSxFKX1mdW5jdGlvbiB4YnQoZSx0LG4scil7dmFyIGEsbztpZih0KXtpZihhPWUuYS5OZShuLmQsdC5kKSxhPT0wKXJldHVybiByLmQ9WnllKHQsbi5lKSxyLmI9ITAsdDtvPWE8MD8wOjEsdC5hW29dPXhidChlLHQuYVtvXSxuLHIpLG95KHQuYVtvXSkmJihveSh0LmFbMS1vXSk/KHQuYj0hMCx0LmFbMF0uYj0hMSx0LmFbMV0uYj0hMSk6b3kodC5hW29dLmFbb10pP3Q9RVYodCwxLW8pOm95KHQuYVtvXS5hWzEtb10pJiYodD11Y3QodCwxLW8pKSl9ZWxzZSByZXR1cm4gbjtyZXR1cm4gdH1mdW5jdGlvbiBrYnQoZSx0LG4pe3ZhciByLGEsbyxmO2E9ZS5pLHI9ZS5uLHk2ZShlLCh0MSgpLEdjKSxhLmMrci5iLG4pLHk2ZShlLEtjLGEuYythLmItci5jLW5bMl0sbiksZj1hLmItci5iLXIuYyxuWzBdPjAmJihuWzBdKz1lLmQsZi09blswXSksblsyXT4wJiYoblsyXSs9ZS5kLGYtPW5bMl0pLG89Yi5NYXRoLm1heCgwLGYpLG5bMV09Yi5NYXRoLm1heChuWzFdLGYpLHk2ZShlLCR1LGEuYytyLmIrblswXS0oblsxXS1mKS8yLG4pLHQ9PSR1JiYoZS5jLmI9byxlLmMuYz1hLmMrci5iKyhvLWYpLzIpfWZ1bmN0aW9uIEVidCgpe3RoaXMuYz1XZShOYSxabywyOCwoQ3QoKSxoZShsZShPbywxKSxhdSw2NCwwLFtQYyxRbixhcixEcixlcl0pKS5sZW5ndGgsMTUsMSksdGhpcy5iPVdlKE5hLFpvLDI4LGhlKGxlKE9vLDEpLGF1LDY0LDAsW1BjLFFuLGFyLERyLGVyXSkubGVuZ3RoLDE1LDEpLHRoaXMuYT1XZShOYSxabywyOCxoZShsZShPbywxKSxhdSw2NCwwLFtQYyxRbixhcixEcixlcl0pLmxlbmd0aCwxNSwxKSxFM2UodGhpcy5jLGdzKSxFM2UodGhpcy5iLGlhKSxFM2UodGhpcy5hLGlhKX1mdW5jdGlvbiBFdShlLHQsbil7dmFyIHIsYSxvLGY7aWYodDw9bj8oYT10LG89bik6KGE9bixvPXQpLHI9MCxlLmI9PW51bGwpZS5iPVdlKFZyLGRpLDI4LDIsMTUsMSksZS5iWzBdPWEsZS5iWzFdPW8sZS5jPSEwO2Vsc2V7aWYocj1lLmIubGVuZ3RoLGUuYltyLTFdKzE9PWEpe2UuYltyLTFdPW87cmV0dXJufWY9V2UoVnIsZGksMjgscisyLDE1LDEpLHB1KGUuYiwwLGYsMCxyKSxlLmI9ZixlLmJbci0xXT49YSYmKGUuYz0hMSxlLmE9ITEpLGUuYltyKytdPWEsZS5iW3JdPW8sZS5jfHxjNihlKX19ZnVuY3Rpb24gc1NuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRTtmb3IoRT10LmQsZS5hPW5ldyBCdShFLmMubGVuZ3RoKSxlLmM9bmV3IFByLGc9bmV3IEcoRSk7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDEwNSksbz1uZXcgeE4obnVsbCksdnQoZS5hLG8pLGtpKGUuYyxmLG8pO2ZvcihlLmI9bmV3IFByLGZrbihlLHQpLHI9MDtyPEUuYy5sZW5ndGgtMTtyKyspZm9yKHc9bChqdCh0LmQsciksMTA1KSxhPXIrMTthPEUuYy5sZW5ndGg7YSsrKVlUbihlLHcsbChqdCh0LmQsYSksMTA1KSxuKX1mdW5jdGlvbiBIeShlKXt2YXIgdCxuLHIsYSxvO2ZvcihhPW5ldyBidCx0PW5ldyBVXygoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkpLHI9bmV3IGhyKGRyKGNwKGUpLmEuS2MoKSxuZXcgaikpO2pyKHIpOyluPWwoeHIociksNzQpLERlKE9lKCghbi5iJiYobi5iPW5ldyBMbihfcixuLDQsNykpLG4uYiksMCksMTkzKXx8KG89YmMobChPZSgoIW4uYyYmKG4uYz1uZXcgTG4oX3Isbiw1LDgpKSxuLmMpLDApLDg0KSksdC5hLl9iKG8pfHwkbihhLmMsbykpO3JldHVybiBhfWZ1bmN0aW9uIGFTbihlLHQsbil7dmFyIHIsYSxvO2lmKGUuZT1uLGUuZD0wLGUuYj0wLGUuZj0xLGUuaT10LChlLmUmMTYpPT0xNiYmKGUuaT1iX24oZS5pKSksZS5qPWUuaS5sZW5ndGgsTGkoZSksbz1qdyhlKSxlLmQhPWUuail0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksXzR0KSkpKTtpZihlLmcpe2ZvcihyPTA7cjxlLmcuYS5jLmxlbmd0aDtyKyspaWYoYT1sKHh3KGUuZyxyKSw1OTIpLGUuZjw9YS5hKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxBNHQpKSkpO2UuZy5hLmMubGVuZ3RoPTB9cmV0dXJuIG99ZnVuY3Rpb24gb1NuKGUsdCl7dmFyIG4scixhLG8sZixnLHc7Zm9yKG49aWEsZz0oWm4oKSxQcyksYT1uZXcgRyh0LmEpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwxMCksbz1yLmssbyE9UHMmJihmPUdlKFEociwoZnQoKSxITGUpKSksZj09bnVsbD8obj1iLk1hdGgubWF4KG4sMCksci5uLmI9bitPeWUoZS5hLG8sZykpOnIubi5iPShucihmKSxmKSksdz1PeWUoZS5hLG8sZyksci5uLmI8bit3K3IuZC5kJiYoci5uLmI9bit3K3IuZC5kKSxuPXIubi5iK3Iuby5iK3IuZC5hLGc9b31mdW5jdGlvbiBUYnQoZSx0LG4scixhKXt2YXIgbyxmLGcsdyxFLEM7aWYoZS5kJiZlLmQuR2coYSksbz1sKGEuWGIoMCksMjcpLFNkdChlLG4sbywhMSl8fChmPWwoYS5YYihhLmdjKCktMSksMjcpLFNkdChlLHIsZiwhMCkpfHxHeGUoZSxhKSlyZXR1cm4hMDtmb3IoQz1hLktjKCk7Qy5PYigpOylmb3IoRT1sKEMuUGIoKSwyNyksdz10LktjKCk7dy5PYigpOylpZihnPWwody5QYigpLDI3KSxOVShlLEUsZykpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gY1NuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQjtCPXQuYy5sZW5ndGgsTD0oRT1lLkloKG4pLGwoRT49MD9lLkxoKEUsITEsITApOkh3KGUsbiwhMSksNjEpKTtlOmZvcihvPUwuS2MoKTtvLk9iKCk7KXtmb3IoYT1sKG8uUGIoKSw1OCksQz0wO0M8QjsrK0MpaWYoZj0oU24oQyx0LmMubGVuZ3RoKSxsKHQuY1tDXSw3NikpLHc9Zi5tZCgpLGc9Zi5MaygpLHI9YS5OaChnLCExKSx3PT1udWxsP3IhPW51bGw6IVBpKHcscikpY29udGludWUgZTtyZXR1cm4gYX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB1U24oZSx0KXt2YXIgbixyLGEsbyxmLGcsdztmb3IodC5VZygiQ29tbWVudCBwb3N0LXByb2Nlc3NpbmciLDEpLG89bmV3IEcoZS5iKTtvLmE8by5jLmMubGVuZ3RoOyl7Zm9yKGE9bChyZShvKSwzMCkscj1uZXcgYnQsZz1uZXcgRyhhLmEpO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwxMCksdz1sKFEoZiwoZnQoKSxReCkpLDE1KSxuPWwoUShmLEd4KSwxNSksKHd8fG4pJiYoU0RuKGYsdyxuKSx3JiZyYShyLHcpLG4mJnJhKHIsbikpO3JhKGEuYSxyKX10LlZnKCl9ZnVuY3Rpb24gbFNuKGUsdCxuLHIpe3ZhciBhLG8sZixnO2ZvcihhPWwoZDIodCwoQ3QoKSxlcikpLktjKCkuUGIoKSwxMiksbz1sKGQyKHQsYXIpLktjKCkuUGIoKSwxMiksZz1uZXcgRyhlLmopO2cuYTxnLmMuYy5sZW5ndGg7KXtmb3IoZj1sKHJlKGcpLDEyKTtmLmUuYy5sZW5ndGghPTA7KUZhKGwoanQoZi5lLDApLDE4KSxhKTtmb3IoO2YuZy5jLmxlbmd0aCE9MDspcG8obChqdChmLmcsMCksMTgpLG8pfW58fHJ0KHQsKGZ0KCksbzEpLG51bGwpLHJ8fHJ0KHQsKGZ0KCksJGYpLG51bGwpfWZ1bmN0aW9uIGw2KGUsdCxuKXt2YXIgcixhO2lmKCghZS5hJiYoZS5hPW5ldyBudChjcyxlLDYsNikpLGUuYSkuaT09MClyZXR1cm4gRDdlKGUpO2lmKHI9bChPZSgoIWUuYSYmKGUuYT1uZXcgbnQoY3MsZSw2LDYpKSxlLmEpLDApLDE2NiksdCYmKCRyKCghci5hJiYoci5hPW5ldyBZcyhxaCxyLDUpKSxyLmEpKSxvRShyLDApLHVFKHIsMCksYUUociwwKSxjRShyLDApKSxuKWZvcihhPSghZS5hJiYoZS5hPW5ldyBudChjcyxlLDYsNikpLGUuYSk7YS5pPjE7KVZ5KGEsYS5pLTEpO3JldHVybiByfWZ1bmN0aW9uIENidChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2ZvcihuPW5ldyB6NSxvPW5ldyBHKGUuYik7by5hPG8uYy5jLmxlbmd0aDspe2ZvcihhPWwocmUobyksMzApLHc9ITAscj0wLGc9bmV3IEcoYS5hKTtnLmE8Zy5jLmMubGVuZ3RoOylzd2l0Y2goZj1sKHJlKGcpLDEwKSxmLmsuZyl7Y2FzZSA0OisrcjtjYXNlIDE6aTZlKG4sZik7YnJlYWs7Y2FzZSAwOnVrbihmLHQpO2RlZmF1bHQ6bi5iPT1uLmN8fHBtdChuLHIsdywhMSx0KSx3PSExLHI9MH1uLmI9PW4uY3x8cG10KG4scix3LCEwLHQpfX1mdW5jdGlvbiBROWUoZSx0KXt2YXIgbixyLGEsbyxmLGc7Zm9yKG49MCxnPW5ldyBHKHQpO2cuYTxnLmMuYy5sZW5ndGg7KXtmb3IoZj1sKHJlKGcpLDEyKSxZN2UoZS5iLGUuZFtmLnBdKSxhPW5ldyBOMShmLmIpO0xjKGEuYSl8fExjKGEuYik7KXI9bChMYyhhLmEpP3JlKGEuYSk6cmUoYS5iKSwxOCksbz1mM2UoZSxmPT1yLmM/ci5kOnIuYyksbz5lLmRbZi5wXSYmKG4rPWY2ZShlLmIsbyksZ2IoZS5hLHB0KG8pKSk7Zm9yKDshbF8oZS5hKTspVTZlKGUuYixsKFg4KGUuYSksMTcpLmEpfXJldHVybiBufWZ1bmN0aW9uIGhTbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEU7Zm9yKGUuYT1uZXcgaTRlLEU9MCxhPTAscj1uZXcgRyhlLmkuYik7ci5hPHIuYy5jLmxlbmd0aDspe2Zvcih0PWwocmUociksMzApLHQucD1hLHc9bmV3IEcodC5hKTt3LmE8dy5jLmMubGVuZ3RoOylnPWwocmUodyksMTApLGcucD1FLCsrRTsrK2F9Zm9yKG89ZS5yPT0oTmYoKSx2MyksZj1vP0s4dDpHOHQsbj1uZXcgRyhlLmkuYik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDMwKSxWcyh0LmEsZiksbHduKGUuYSxwdCh0LnApLHQuYSl9ZnVuY3Rpb24gU2J0KGUsdCxuKXt2YXIgcixhLG8sZjtmb3Iobz0oIXQuYSYmKHQuYT1uZXcgbnQoQWksdCwxMCwxMSkpLHQuYSkuaSxhPW5ldyBvcigoIXQuYSYmKHQuYT1uZXcgbnQoQWksdCwxMCwxMSkpLHQuYSkpO2EuZSE9YS5pLmdjKCk7KXI9bChncihhKSwyNyksKCFyLmEmJihyLmE9bmV3IG50KEFpLHIsMTAsMTEpKSxyLmEpLmk9PTB8fChvKz1TYnQoZSxyLCExKSk7aWYobilmb3IoZj1kcyh0KTtmOylvKz0oIWYuYSYmKGYuYT1uZXcgbnQoQWksZiwxMCwxMSkpLGYuYSkuaSxmPWRzKGYpO3JldHVybiBvfWZ1bmN0aW9uIFZ5KGUsdCl7dmFyIG4scixhLG87cmV0dXJuIGUuUGooKT8ocj1udWxsLGE9ZS5RaigpLGUuVGooKSYmKHI9ZS5WaihlLiRpKHQpLG51bGwpKSxuPWUuSWooNCxvPXZ4KGUsdCksbnVsbCx0LGEpLGUuTWooKSYmbyE9bnVsbCYmKHI9ZS5PaihvLHIpKSxyPyhyLm5qKG4pLHIub2ooKSk6ZS5KaihuKSxvKToobz12eChlLHQpLGUuTWooKSYmbyE9bnVsbCYmKHI9ZS5PaihvLG51bGwpLHImJnIub2ooKSksbyl9ZnVuY3Rpb24gZlNuKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDO2ZvcihFPWUuYSx0PW5ldyBLcyx3PTAscj1uZXcgRyhlLmQpO3IuYTxyLmMuYy5sZW5ndGg7KXtmb3Iobj1sKHJlKHIpLDIyNiksQz0wLCRtKG4uYixuZXcgbHUpLGY9UnIobi5iLDApO2YuYiE9Zi5kLmM7KW89bChCcihmKSwyMjYpLHQuYS5fYihvKSYmKGE9bi5jLGc9by5jLEM8Zy5kK2cuYStFJiZDK2EuYStFPmcuZCYmKEM9Zy5kK2cuYStFKSk7bi5jLmQ9Qyx0LmEuemMobix0KSx3PWIuTWF0aC5tYXgodyxuLmMuZCtuLmMuYSl9cmV0dXJuIHd9ZnVuY3Rpb24gSG8oKXtIbz1VLGVXPW5ldyB1eSgiQ09NTUVOVFMiLDApLHZmPW5ldyB1eSgiRVhURVJOQUxfUE9SVFMiLDEpLFVMPW5ldyB1eSgiSFlQRVJFREdFUyIsMiksdFc9bmV3IHV5KCJIWVBFUk5PREVTIiwzKSwkVD1uZXcgdXkoIk5PTl9GUkVFX1BPUlRTIiw0KSxCNj1uZXcgdXkoIk5PUlRIX1NPVVRIX1BPUlRTIiw1KSxHTD1uZXcgdXkoWDN0LDYpLFJUPW5ldyB1eSgiQ0VOVEVSX0xBQkVMUyIsNyksalQ9bmV3IHV5KCJFTkRfTEFCRUxTIiw4KSxuVz1uZXcgdXkoIlBBUlRJVElPTlMiLDkpfWZ1bmN0aW9uIGRTbihlLHQsbixyLGEpe3JldHVybiByPDA/KHI9bzYoZSxhLGhlKGxlKHp0LDEpLGR0LDIsNixbJGxlLHpsZSxxbGUsSGxlLF94LFZsZSxVbGUsR2xlLEtsZSxXbGUsWWxlLFhsZV0pLHQpLHI8MCYmKHI9bzYoZSxhLGhlKGxlKHp0LDEpLGR0LDIsNixbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsX3gsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdKSx0KSkscjwwPyExOihuLms9ciwhMCkpOnI+MD8obi5rPXItMSwhMCk6ITF9ZnVuY3Rpb24gZ1NuKGUsdCxuLHIsYSl7cmV0dXJuIHI8MD8ocj1vNihlLGEsaGUobGUoenQsMSksZHQsMiw2LFskbGUsemxlLHFsZSxIbGUsX3gsVmxlLFVsZSxHbGUsS2xlLFdsZSxZbGUsWGxlXSksdCkscjwwJiYocj1vNihlLGEsaGUobGUoenQsMSksZHQsMiw2LFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIixfeCwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0pLHQpKSxyPDA/ITE6KG4uaz1yLCEwKSk6cj4wPyhuLms9ci0xLCEwKTohMX1mdW5jdGlvbiBwU24oZSx0LG4scixhLG8pe3ZhciBmLGcsdyxFO2lmKGc9MzIscjwwKXtpZih0WzBdPj1lLmxlbmd0aHx8KGc9Y28oZSx0WzBdKSxnIT00MyYmZyE9NDUpfHwoKyt0WzBdLHI9a1UoZSx0KSxyPDApKXJldHVybiExO2c9PTQ1JiYocj0tcil9cmV0dXJuIGc9PTMyJiZ0WzBdLW49PTImJmEuYj09MiYmKHc9bmV3IFF6LEU9dy5xLmdldEZ1bGxZZWFyKCktTGIrTGItODAsZj1FJTEwMCxvLmE9cj09ZixyKz0oRS8xMDB8MCkqMTAwKyhyPGY/MTAwOjApKSxvLnA9ciwhMH1mdW5jdGlvbiBfYnQoZSx0KXt2YXIgbixyLGEsbyxmO2RzKGUpJiYoZj1sKFEodCwoTnQoKSxidikpLDE4MSkscWUoYXQoZSxNcykpPT09cWUoKFJhKCksV2IpKSYmSGkoZSxNcyxaMSkscj0oYXcoKSxuZXcgSnYoZHMoZSkpKSxvPW5ldyByYWUoZHMoZSk/bmV3IEp2KGRzKGUpKTpudWxsLGUpLGE9cXZ0KHIsbywhMSwhMCksZDAoZiwobWgoKSxBNCkpLG49bChRKHQscVQpLDgpLG4uYT1iLk1hdGgubWF4KGEuYSxuLmEpLG4uYj1iLk1hdGgubWF4KGEuYixuLmIpKX1mdW5jdGlvbiBiU24oZSx0LG4pe3ZhciByLGEsbyxmLGcsdztmb3IoZj1sKFEoZSwoZnQoKSxIMWUpKSwxNSkuS2MoKTtmLk9iKCk7KXtzd2l0Y2gobz1sKGYuUGIoKSwxMCksbChRKG8sKE50KCksUXUpKSwxNzEpLmcpe2Nhc2UgMjpWYShvLHQpO2JyZWFrO2Nhc2UgNDpWYShvLG4pfWZvcihhPW5ldyBocihkcihzcChvKS5hLktjKCksbmV3IGopKTtqcihhKTspcj1sKHhyKGEpLDE4KSwhKHIuYyYmci5kKSYmKGc9IXIuZCx3PWwoUShyLFVMZSksMTIpLGc/RmEocix3KTpwbyhyLHcpKX19ZnVuY3Rpb24gT1UoKXtPVT1VLHcxZT1uZXcgWjgobkcsMCwoQ3QoKSxRbiksUW4pLGsxZT1uZXcgWjgoeGhlLDEsRHIsRHIpLHYxZT1uZXcgWjgoeWhlLDIsYXIsYXIpLEMxZT1uZXcgWjgoa2hlLDMsZXIsZXIpLHgxZT1uZXcgWjgoIk5PUlRIX1dFU1RfQ09STkVSIiw0LGVyLFFuKSx5MWU9bmV3IFo4KCJOT1JUSF9FQVNUX0NPUk5FUiIsNSxRbixhciksVDFlPW5ldyBaOCgiU09VVEhfV0VTVF9DT1JORVIiLDYsRHIsZXIpLEUxZT1uZXcgWjgoIlNPVVRIX0VBU1RfQ09STkVSIiw3LGFyLERyKX1mdW5jdGlvbiBtU24oZSl7dmFyIHQsbixyLGEsbyxmO2ZvcihvPW5ldyBLcyx0PW5ldyBVXygoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkpLGE9bmV3IGhyKGRyKGNwKGUpLmEuS2MoKSxuZXcgaikpO2pyKGEpOylyPWwoeHIoYSksNzQpLERlKE9lKCghci5iJiYoci5iPW5ldyBMbihfcixyLDQsNykpLHIuYiksMCksMTkzKXx8KGY9YmMobChPZSgoIXIuYyYmKHIuYz1uZXcgTG4oX3Isciw1LDgpKSxyLmMpLDApLDg0KSksdC5hLl9iKGYpfHwobj1vLmEuemMoZixvKSxuPT1udWxsKSk7cmV0dXJuIG99ZnVuY3Rpb24gaDYoKXtoNj1VLFVPZT1oZShsZShubSwxKSxhaGUsMjgsMTQsWzEsMSwyLDYsMjQsMTIwLDcyMCw1MDQwLDQwMzIwLDM2Mjg4MCwzNjI4ODAwLDM5OTE2ODAwLDQ3OTAwMTYwMCw2MjI3MDIwODAwLDg3MTc4MjkxMjAwLDEzMDc2NzQzNjhlMyx7bDozNTA2MTc2LG06Nzk0MDc3LGg6MX0se2w6ODg0NzM2LG06OTE2NDExLGg6MjB9LHtsOjMzNDIzMzYsbTozOTEyNDg5LGg6MzYzfSx7bDo1ODk4MjQsbTozMDM0MTM4LGg6NjkxNH0se2w6MzQwNzg3MixtOjE5NjI1MDYsaDoxMzgyOTR9XSksYi5NYXRoLnBvdygyLC02NSl9ZnVuY3Rpb24gR0UoKXtHRT1VO3ZhciBlLHQ7Zm9yKCR4PVdlKEE2LGR0LDkyLDMyLDAsMSksRkw9V2UoQTYsZHQsOTIsMzIsMCwxKSxlPTEsdD0wO3Q8PTE4O3QrKykkeFt0XT0oQ2QoKSxpdShlLDApPj0wP2tiKGUpOkpfKGtiKHIyKGUpKSkpLEZMW3RdPUFxKGwwKGUsdCksMCk/a2IobDAoZSx0KSk6Sl8oa2IocjIobDAoZSx0KSkpKSxlPW1vKGUsNSk7Zm9yKDt0PEZMLmxlbmd0aDt0KyspJHhbdF09SzUoJHhbdC0xXSwkeFsxXSksRkxbdF09SzUoRkxbdC0xXSwoQ2QoKSxNMGUpKX1mdW5jdGlvbiBBYnQoZSx0KXt2YXIgbixyLGEsbyxmO2lmKGUuYy5sZW5ndGg9PTApcmV0dXJuIG5ldyBjYShwdCgwKSxwdCgwKSk7Zm9yKG49KFNuKDAsZS5jLmxlbmd0aCksbChlLmNbMF0sMTIpKS5qLGY9MCxvPXQuZyxyPXQuZysxO2Y8ZS5jLmxlbmd0aC0xJiZuLmc8bzspKytmLG49KFNuKGYsZS5jLmxlbmd0aCksbChlLmNbZl0sMTIpKS5qO2ZvcihhPWY7YTxlLmMubGVuZ3RoLTEmJm4uZzxyOykrK2Esbj0oU24oZixlLmMubGVuZ3RoKSxsKGUuY1tmXSwxMikpLmo7cmV0dXJuIG5ldyBjYShwdChmKSxwdChhKSl9ZnVuY3Rpb24gdlNuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDO3c9T2ModCxuKSwobj09KEN0KCksRHIpfHxuPT1lcikmJih3PWxmKHcpKSxmPSExO2RvIGZvcihhPSExLG89MDtvPHcuZ2MoKS0xO28rKylFPWwody5YYihvKSwxMiksZz1sKHcuWGIobysxKSwxMiksbjluKGUsRSxnLHIpJiYoZj0hMCx2b2UoZS5hLGwody5YYihvKSwxMiksbCh3LlhiKG8rMSksMTIpKSxDPWwody5YYihvKzEpLDEyKSx3LmhkKG8rMSxsKHcuWGIobyksMTIpKSx3LmhkKG8sQyksYT0hMCk7d2hpbGUoYSk7cmV0dXJuIGZ9ZnVuY3Rpb24gd1NuKGUsdCxuKXt2YXIgcixhLG8sZjtmb3Iobi5VZyhmeXQsMSksYT1sKHljKEZpKG5ldyBibihudWxsLG5ldyBrbih0LmIsMTYpKSxuZXcgR3RlKSxQbChuZXcgenIsbmV3IGh0LG5ldyBGbixoZShsZShvYywxKSxpdCwxMDgsMCxbKEZsKCksRWMpXSkpKSwxNSksdDJ0KGUsYSwwKSxmPVJyKHQuYiwwKTtmLmIhPWYuZC5jOylvPWwoQnIoZiksNDApLHI9Y3IoZS5hLHB0KG8uZykpIT1udWxsP2woY3IoZS5hLHB0KG8uZykpLDE3KS5hOjAscnQobywoSGMoKSwkZCkscHQocikpO24uVmcoKX1mdW5jdGlvbiBOVShlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQztyZXR1cm4gZz10LmktZS5nLzIsdz1uLmktZS5nLzIsRT10LmotZS5nLzIsQz1uLmotZS5nLzIsbz10LmcrZS5nLGY9bi5nK2UuZyxyPXQuZitlLmcsYT1uLmYrZS5nLGc8dytmJiZ3PGcmJkU8QythJiZDPEV8fHc8ZytvJiZnPHcmJkM8RStyJiZFPEN8fGc8dytmJiZ3PGcmJkU8QyYmQzxFK3I/ITA6dzxnK28mJmc8dyYmRTxDK2EmJkM8RX1mdW5jdGlvbiB5U24oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCO2ZvcihvPXQuYy5sZW5ndGgsZj0oU24obix0LmMubGVuZ3RoKSxsKHQuY1tuXSwyOTMpKSxnPWYuYS5vLmEsTD1mLmMsQj0wLEU9Zi5jO0U8PWYuZjtFKyspe2lmKGc8PWUuYVtFXSlyZXR1cm4gRTtmb3IoQz1lLmFbRV0sdz1udWxsLGE9bisxO2E8bzthKyspcj0oU24oYSx0LmMubGVuZ3RoKSxsKHQuY1thXSwyOTMpKSxyLmM8PUUmJnIuZj49RSYmKHc9cik7dyYmKEM9Yi5NYXRoLm1heChDLHcuYS5vLmEpKSxDPkImJihMPUUsQj1DKX1yZXR1cm4gTH1mdW5jdGlvbiB4U24oZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKG89bmV3IEtwKGwoWHIobmV3IFdoKSw1MCkpLGc9aWEsbj1uZXcgRyhlLmQpO24uYTxuLmMuYy5sZW5ndGg7KXtmb3IodD1sKHJlKG4pLDIyNiksZz10LmMuYztvLmEuZ2MoKSE9MCYmKGY9bChvLmEuVGMoKSwyMjYpLGYuYy5jK2YuYy5iPGcpOylvLmEuQmMoZikhPW51bGw7Zm9yKGE9by5hLmVjKCkuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMjI2KSx1aShyLmIsdCksdWkodC5iLHIpO28uYS56Yyh0LChIbigpLFBiKSk9PW51bGx9fWZ1bmN0aW9uIExidChlLHQsbil7dmFyIHIsYSxvLGYsZztpZighWmsodCkpe2ZvcihnPW4uZWgoKERlKHQsMTYpP2wodCwxNikuZ2MoKTpYZyh0LktjKCkpKS9lLmF8MCksZy5VZyhkeXQsMSksZj1uZXcgciQsbz1udWxsLGE9dC5LYygpO2EuT2IoKTspcj1sKGEuUGIoKSw0MCksZj1MaChoZShsZShGaCwxKSxSbiwyMCwwLFtmLG5ldyBIZyhyKV0pKSxvJiYocnQobywoUWkoKSxkVHQpLHIpLHJ0KHIsUmRlLG8pLElvZShyKT09SW9lKG8pJiYocnQobyxqZGUscikscnQocixCVyxvKSkpLG89cjtnLlZnKCksTGJ0KGUsZixuKX19ZnVuY3Rpb24ga1NuKGUsdCl7dmFyIG4scixhO2lmKHQ9PW51bGwpe2ZvcihyPSghZS5hJiYoZS5hPW5ldyBudCh3cCxlLDksNSkpLG5ldyBvcihlLmEpKTtyLmUhPXIuaS5nYygpOylpZihuPWwoZ3IociksNjk0KSxhPW4uYywoYT8/bi56Yik9PW51bGwpcmV0dXJuIG59ZWxzZSBmb3Iocj0oIWUuYSYmKGUuYT1uZXcgbnQod3AsZSw5LDUpKSxuZXcgb3IoZS5hKSk7ci5lIT1yLmkuZ2MoKTspaWYobj1sKGdyKHIpLDY5NCksdm4odCwoYT1uLmMsYT8/bi56YikpKXJldHVybiBuO3JldHVybiBudWxsfWZ1bmN0aW9uIEp1ZShlLHQpe3ZhciBuO3N3aXRjaChuPW51bGwsdC5nKXtjYXNlIDE6ZS5lLnBmKChwaSgpLEJnZSkpJiYobj1sKGUuZS5vZihCZ2UpLDI1NikpO2JyZWFrO2Nhc2UgMzplLmUucGYoKHBpKCksRmdlKSkmJihuPWwoZS5lLm9mKEZnZSksMjU2KSk7YnJlYWs7Y2FzZSAyOmUuZS5wZigocGkoKSxQZ2UpKSYmKG49bChlLmUub2YoUGdlKSwyNTYpKTticmVhaztjYXNlIDQ6ZS5lLnBmKChwaSgpLFJnZSkpJiYobj1sKGUuZS5vZihSZ2UpLDI1NikpfXJldHVybiFuJiYobj1sKGUuZS5vZigocGkoKSx5TmUpKSwyNTYpKSxufWZ1bmN0aW9uIE1idChlLHQsbil7dmFyIHIsYSxvLGYsZyx3O2ZvcihhPW4sbz0wLGc9bmV3IEcodCk7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDI3KSxIaShmLChTYigpLHFXKSxwdChhKyspKSx3PUh5KGYpLHI9Yi5NYXRoLmF0YW4yKGYuaitmLmYvMixmLmkrZi5nLzIpLHIrPXI8MD9pdjowLHI8Ljc4NTM5ODE2MzM5NzQ0ODN8fHI+a3l0P1ZzKHcsZS5iKTpyPD1reXQmJnI+RXl0P1ZzKHcsZS5kKTpyPD1FeXQmJnI+VHl0P1ZzKHcsZS5jKTpyPD1UeXQmJlZzKHcsZS5hKSxvPU1idChlLHcsbyk7cmV0dXJuIGF9ZnVuY3Rpb24gRGJ0KGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRTtmb3IoYT0oci5jK3IuYSkvMixDaCh0LmopLHVpKHQuaixhKSxDaChuLmUpLHVpKG4uZSxhKSxFPW5ldyBRSmUsZz1uZXcgRyhlLmYpO2cuYTxnLmMuYy5sZW5ndGg7KW89bChyZShnKSwxMzIpLHc9by5hLEN1ZShFLHQsdyksQ3VlKEUsbix3KTtmb3IoZj1uZXcgRyhlLmspO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxMzIpLHc9by5iLEN1ZShFLHQsdyksQ3VlKEUsbix3KTtyZXR1cm4gRS5iKz0yLEUuYSs9amF0KHQsZS5xKSxFLmErPWphdChlLnEsbiksRX1mdW5jdGlvbiBFU24oZSx0LG4pe3ZhciByO24uVWcoIlByb2Nlc3NvciBhcnJhbmdlIG5vZGUiLDEpLFJ0KEJ0KFEodCwoSGMoKSxsSWUpKSkpLHI9bChmaChrRShGaShuZXcgYm4obnVsbCxuZXcga24odC5iLDE2KSksbmV3IGFuZSkpKSw0MCksZS5hPWwoUSh0LHdJZSksMzUzKSxlLmE9PShrQSgpLEhkZSl8fGUuYT09alc/SHZ0KGUsbmV3IElsKGhlKGxlKFBXLDEpLElHLDQwLDAsW3JdKSksbi5laCgxKSk6ZS5hPT1xZGUmJm13dChlLG5ldyBJbChoZShsZShQVywxKSxJRyw0MCwwLFtyXSkpLG4uZWgoMSkpLG4uVmcoKX1mdW5jdGlvbiB6MSgpe3oxPVUsS1c9bmV3IEhhKChwaSgpLFo2KSwxLjMpLFBDdD1uZXcgSGEoQzQsKEhuKCksITEpKSxpT2U9bmV3IGx3KDE1KSx2TT1uZXcgSGEoXzIsaU9lKSx3TT1uZXcgSGEoRXYsMTUpLERDdD1VQixOQ3Q9a3YsQkN0PWk3LEZDdD1VYixPQ3Q9cjcsbGdlPVlCLFJDdD1TNCxjT2U9KGxrZSgpLEFDdCksb09lPV9DdCxmZ2U9TUN0LHVPZT1MQ3Qsck9lPVRDdCxoZ2U9RUN0LG5PZT1rQ3QsYU9lPVNDdCx0T2U9V0IsSUN0PU5nZSxqQj15Q3QsZU9lPXdDdCwkQj14Q3Qsc09lPUNDdH1mdW5jdGlvbiBJYnQoZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKG49ZS5pLHQ9ZS5uLGc9bi5kLGUuZj09KG9sKCksRmIpP2crPShuLmEtZS5lLmIpLzI6ZS5mPT13MCYmKGcrPW4uYS1lLmUuYiksYT1uZXcgRyhlLmQpO2EuYTxhLmMuYy5sZW5ndGg7KXtzd2l0Y2gocj1sKHJlKGEpLDE4NyksZj1yLk1mKCksbz1uZXcgcWEsby5iPWcsZys9Zi5iK2UuYSxlLmIuZyl7Y2FzZSAwOm8uYT1uLmMrdC5iO2JyZWFrO2Nhc2UgMTpvLmE9bi5jK3QuYisobi5iLWYuYSkvMjticmVhaztjYXNlIDI6by5hPW4uYytuLmItdC5jLWYuYX1yLk9mKG8pfX1mdW5jdGlvbiBPYnQoZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKG49ZS5pLHQ9ZS5uLGc9bi5jLGUuYj09KEJsKCksQmIpP2crPShuLmItZS5lLmEpLzI6ZS5iPT12MCYmKGcrPW4uYi1lLmUuYSksYT1uZXcgRyhlLmQpO2EuYTxhLmMuYy5sZW5ndGg7KXtzd2l0Y2gocj1sKHJlKGEpLDE4NyksZj1yLk1mKCksbz1uZXcgcWEsby5hPWcsZys9Zi5hK2UuYSxlLmYuZyl7Y2FzZSAwOm8uYj1uLmQrdC5kO2JyZWFrO2Nhc2UgMTpvLmI9bi5kK3QuZCsobi5hLWYuYikvMjticmVhaztjYXNlIDI6by5iPW4uZCtuLmEtdC5hLWYuYn1yLk9mKG8pfX1mdW5jdGlvbiBUU24oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVjtDPW4uYS5jLGY9bi5hLmMrbi5hLmIsbz1sKGNyKG4uYyx0KSw0NjgpLHo9by5mLFY9by5hLHc9bmV3IGx0KEMseiksTD1uZXcgbHQoZixWKSxhPUMsbi5wfHwoYSs9ZS5jKSxhKz1uLkYrbi52KmUuYixFPW5ldyBsdChhLHopLEI9bmV3IGx0KGEsViksZkEodC5hLGhlKGxlKEVhLDEpLGR0LDgsMCxbdyxFXSkpLGc9bi5kLmEuZ2MoKT4xLGcmJihyPW5ldyBsdChhLG4uYiksdWkodC5hLHIpKSxmQSh0LmEsaGUobGUoRWEsMSksZHQsOCwwLFtCLExdKSl9ZnVuY3Rpb24gSjllKGUsdCxuKXt2YXIgcixhO2Zvcih0PGUuZC5iLmMubGVuZ3RoPyhlLmI9bChqdChlLmQuYix0KSwzMCksZS5hPWwoanQoZS5kLmIsdC0xKSwzMCksZS5jPXQpOihlLmE9bmV3IHl1KGUuZCksZS5hLnA9dC0xLHZ0KGUuZC5iLGUuYSksZS5iPW5ldyB5dShlLmQpLGUuYi5wPXQsdnQoZS5kLmIsZS5iKSxlLmM9dCksVmEobixlLmIpLGE9bmV3IGhyKGRyKGthKG4pLmEuS2MoKSxuZXcgaikpO2pyKGEpOylyPWwoeHIoYSksMTgpLCFyLmMuaS5jJiZyLmMuaS5rPT0oWm4oKSxjdSkmJlZhKHIuYy5pLGUuYSl9ZnVuY3Rpb24gTmJ0KGUpe3N3KGUsbmV3IFhtKG53KFp2KHR3KGV3KG5ldyB4MSxqRyksIkVMSyBSYW5kb21pemVyIiksJ0Rpc3RyaWJ1dGVzIHRoZSBub2RlcyByYW5kb21seSBvbiB0aGUgcGxhbmUsIGxlYWRpbmcgdG8gdmVyeSBvYmZ1c2NhdGluZyBsYXlvdXRzLiBDYW4gYmUgdXNlZnVsIHRvIGRlbW9uc3RyYXRlIHRoZSBwb3dlciBvZiAicmVhbCIgbGF5b3V0IGFsZ29yaXRobXMuJyksbmV3IHckKSkpLGd0KGUsakcsWHcsWk5lKSxndChlLGpHLEp5LDE1KSxndChlLGpHLG9HLHB0KDApKSxndChlLGpHLE94LGxUKX1mdW5jdGlvbiBaOWUoKXtaOWU9VTt2YXIgZSx0LG4scixhLG87Zm9yKEdNPVdlKEFsLEM2LDI4LDI1NSwxNSwxKSxMWT1XZShrZixBZCwyOCwxNiwxNSwxKSx0PTA7dDwyNTU7dCsrKUdNW3RdPS0xO2ZvcihuPTU3O24+PTQ4O24tLSlHTVtuXT1uLTQ4PDwyND4+MjQ7Zm9yKHI9NzA7cj49NjU7ci0tKUdNW3JdPXItNjUrMTA8PDI0Pj4yNDtmb3IoYT0xMDI7YT49OTc7YS0tKUdNW2FdPWEtOTcrMTA8PDI0Pj4yNDtmb3Iobz0wO288MTA7bysrKUxZW29dPTQ4K28mWnM7Zm9yKGU9MTA7ZTw9MTU7ZSsrKUxZW2VdPTY1K2UtMTAmWnN9ZnVuY3Rpb24gQ1NuKGUsdCl7dC5VZygiUHJvY2VzcyBncmFwaCBib3VuZHMiLDEpLHJ0KGUsKFFpKCksQmRlKSxmTyh1Y2UoeHkobmV3IGJuKG51bGwsbmV3IGtuKGUuYiwxNikpLG5ldyB6dGUpKSkpLHJ0KGUsRmRlLGZPKHVjZSh4eShuZXcgYm4obnVsbCxuZXcga24oZS5iLDE2KSksbmV3IHF0ZSkpKSkscnQoZSxySWUsZk8oY2NlKHh5KG5ldyBibihudWxsLG5ldyBrbihlLmIsMTYpKSxuZXcgSHRlKSkpKSxydChlLGlJZSxmTyhjY2UoeHkobmV3IGJuKG51bGwsbmV3IGtuKGUuYiwxNikpLG5ldyBWdGUpKSkpLHQuVmcoKX1mdW5jdGlvbiBTU24oZSl7dmFyIHQsbixyLGEsbzthPWwoUShlLChOdCgpLGJ2KSksMjEpLG89bChRKGUseFcpLDIxKSxuPW5ldyBsdChlLmYuYStlLmQuYitlLmQuYyxlLmYuYitlLmQuZCtlLmQuYSksdD1uZXcgRW8obiksYS5IYygobWgoKSxBNCkpJiYocj1sKFEoZSxxVCksOCksby5IYygoWmwoKSxhQykpJiYoci5hPD0wJiYoci5hPTIwKSxyLmI8PTAmJihyLmI9MjApKSx0LmE9Yi5NYXRoLm1heChuLmEsci5hKSx0LmI9Yi5NYXRoLm1heChuLmIsci5iKSksUnQoQnQoUShlLGFkZSkpKXx8bkxuKGUsbix0KX1mdW5jdGlvbiBfU24oZSx0KXt2YXIgbixyLGEsbztmb3Iobz1PYyh0LChDdCgpLERyKSkuS2MoKTtvLk9iKCk7KXI9bChvLlBiKCksMTIpLG49bChRKHIsKGZ0KCksamwpKSwxMCksbiYmcDAoczAoaTAoYTAocjAobmV3IF9mLDApLC4xKSxlLmlbdC5wXS5kKSxlLmlbbi5wXS5hKSk7Zm9yKGE9T2ModCxRbikuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMTIpLG49bChRKHIsKGZ0KCksamwpKSwxMCksbiYmcDAoczAoaTAoYTAocjAobmV3IF9mLDApLC4xKSxlLmlbbi5wXS5kKSxlLmlbdC5wXS5hKSl9ZnVuY3Rpb24gWnVlKGUpe3ZhciB0LG4scixhLG8sZjtpZighZS5jKXtpZihmPW5ldyBRYyx0PXFNLG89dC5hLnpjKGUsdCksbz09bnVsbCl7Zm9yKHI9bmV3IG9yKGR1KGUpKTtyLmUhPXIuaS5nYygpOyluPWwoZ3IociksODkpLGE9alUobiksRGUoYSw5MCkmJkFzKGYsWnVlKGwoYSwyOSkpKSxxcihmLG4pO3QuYS5CYyhlKSE9bnVsbCx0LmEuZ2MoKT09MH1rNW4oZiksSXkoZiksZS5jPW5ldyBONSgobChPZSh0dCgobGIoKSxWbikubyksMTUpLDE5KSxmLmkpLGYuZyksWWwoZSkuYiY9LTMzfXJldHVybiBlLmN9ZnVuY3Rpb24gZWtlKGUpe3ZhciB0O2lmKGUuYyE9MTApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLFZHKSkpKTtzd2l0Y2godD1lLmEsdCl7Y2FzZSAxMTA6dD0xMDticmVhaztjYXNlIDExNDp0PTEzO2JyZWFrO2Nhc2UgMTE2OnQ9OTticmVhaztjYXNlIDkyOmNhc2UgMTI0OmNhc2UgNDY6Y2FzZSA5NDpjYXNlIDQ1OmNhc2UgNjM6Y2FzZSA0MjpjYXNlIDQzOmNhc2UgMTIzOmNhc2UgMTI1OmNhc2UgNDA6Y2FzZSA0MTpjYXNlIDkxOmNhc2UgOTM6YnJlYWs7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksYmYpKSkpfXJldHVybiB0fWZ1bmN0aW9uIFBidChlKXt2YXIgdCxuLHIsYSxvO2lmKGUubD09MCYmZS5tPT0wJiZlLmg9PTApcmV0dXJuIjAiO2lmKGUuaD09U1AmJmUubT09MCYmZS5sPT0wKXJldHVybiItOTIyMzM3MjAzNjg1NDc3NTgwOCI7aWYoZS5oPj4xOSlyZXR1cm4iLSIrUGJ0KHhFKGUpKTtmb3Iobj1lLHI9IiI7IShuLmw9PTAmJm4ubT09MCYmbi5oPT0wKTspe2lmKGE9TG9lKEpVKSxuPU5rZShuLGEsITApLHQ9IiIrclplKE5iKSwhKG4ubD09MCYmbi5tPT0wJiZuLmg9PTApKWZvcihvPTktdC5sZW5ndGg7bz4wO28tLSl0PSIwIit0O3I9dCtyfXJldHVybiByfWZ1bmN0aW9uIEFTbihlKXt2YXIgdCxuLHIsYSxvLGYsZztmb3IodD0hMSxuPTAsYT1uZXcgRyhlLmQuYik7YS5hPGEuYy5jLmxlbmd0aDspZm9yKHI9bChyZShhKSwzMCksci5wPW4rKyxmPW5ldyBHKHIuYSk7Zi5hPGYuYy5jLmxlbmd0aDspbz1sKHJlKGYpLDEwKSwhdCYmIVprKHNwKG8pKSYmKHQ9ITApO2c9cnMoKEpzKCksSjEpLGhlKGxlKExNLDEpLGl0LDg4LDAsW3VjLHZjXSkpLHR8fChkMChnLHdmKSxkMChnLFExKSksZS5hPW5ldyB2aHQoZyksTmwoZS5mKSxObChlLmIpLE5sKGUuZSksTmwoZS5nKX1mdW5jdGlvbiBMU24oKXtpZighT2JqZWN0LmNyZWF0ZXx8IU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKXJldHVybiExO3ZhciBlPSJfX3Byb3RvX18iLHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtpZih0W2VdIT09dm9pZCAwKXJldHVybiExO3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpO3JldHVybiEobi5sZW5ndGghPTB8fCh0W2VdPTQyLHRbZV0hPT00Mil8fE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLmxlbmd0aD09MCl9ZnVuY3Rpb24gTVNuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEw7Zm9yKHI9bi5jLGE9bi5kLGc9STEodC5jKSx3PUkxKHQuZCkscj09dC5jPyhnPWo5ZShlLGcsYSksdz1xZ3QodC5kKSk6KGc9cWd0KHQuYyksdz1qOWUoZSx3LGEpKSxFPW5ldyBHeih0LmEpLENzKEUsZyxFLmEsRS5hLmEpLENzKEUsdyxFLmMuYixFLmMpLGY9dC5jPT1yLEw9bmV3IGpRZSxvPTA7bzxFLmItMTsrK28pQz1uZXcgY2EobChmZihFLG8pLDgpLGwoZmYoRSxvKzEpLDgpKSxmJiZvPT0wfHwhZiYmbz09RS5iLTI/TC5iPUM6dnQoTC5hLEMpO3JldHVybiBMfWZ1bmN0aW9uIERTbihlLHQpe3ZhciBuLHIsYSxvO2lmKG89ZS5qLmctdC5qLmcsbyE9MClyZXR1cm4gbztpZihuPWwoUShlLChOdCgpLGsyKSksMTcpLHI9bChRKHQsazIpLDE3KSxuJiZyJiYoYT1uLmEtci5hLGEhPTApKXJldHVybiBhO3N3aXRjaChlLmouZyl7Y2FzZSAxOnJldHVybiBZaShlLm4uYSx0Lm4uYSk7Y2FzZSAyOnJldHVybiBZaShlLm4uYix0Lm4uYik7Y2FzZSAzOnJldHVybiBZaSh0Lm4uYSxlLm4uYSk7Y2FzZSA0OnJldHVybiBZaSh0Lm4uYixlLm4uYik7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgbmMoekVlKSl9fWZ1bmN0aW9uIHRrZShlLHQsbixyKXt2YXIgYSxvLGYsZyx3O2lmKFhnKChPTygpLG5ldyBocihkcihzcCh0KS5hLktjKCksbmV3IGopKSkpPj1lLmF8fCFCeGUodCxuKSlyZXR1cm4tMTtpZihaayhsKHIuS2IodCksMjApKSlyZXR1cm4gMTtmb3IoYT0wLGY9bChyLktiKHQpLDIwKS5LYygpO2YuT2IoKTspaWYobz1sKGYuUGIoKSwxOCksdz1vLmMuaT09dD9vLmQuaTpvLmMuaSxnPXRrZShlLHcsbixyKSxnPT0tMXx8KGE9Yi5NYXRoLm1heChhLGcpLGE+ZS5jLTEpKXJldHVybi0xO3JldHVybiBhKzF9ZnVuY3Rpb24gQmJ0KGUsdCl7dmFyIG4scixhLG8sZixnO2lmKHFlKHQpPT09cWUoZSkpcmV0dXJuITA7aWYoIURlKHQsMTUpfHwocj1sKHQsMTUpLGc9ZS5nYygpLHIuZ2MoKSE9ZykpcmV0dXJuITE7aWYoZj1yLktjKCksZS5ZaSgpKXtmb3Iobj0wO248ZzsrK24paWYoYT1lLlZpKG4pLG89Zi5QYigpLGE9PW51bGw/byE9bnVsbDohUGkoYSxvKSlyZXR1cm4hMX1lbHNlIGZvcihuPTA7bjxnOysrbilpZihhPWUuVmkobiksbz1mLlBiKCkscWUoYSkhPT1xZShvKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBGYnQoZSx0KXt2YXIgbixyLGEsbyxmLGc7aWYoZS5mPjApe2lmKGUuX2ooKSx0IT1udWxsKXtmb3Iobz0wO288ZS5kLmxlbmd0aDsrK28paWYobj1lLmRbb10sbil7Zm9yKHI9bChuLmcsMzc5KSxnPW4uaSxmPTA7ZjxnOysrZilpZihhPXJbZl0sUGkodCxhLm1kKCkpKXJldHVybiEwfX1lbHNlIGZvcihvPTA7bzxlLmQubGVuZ3RoOysrbylpZihuPWUuZFtvXSxuKXtmb3Iocj1sKG4uZywzNzkpLGc9bi5pLGY9MDtmPGc7KytmKWlmKGE9cltmXSxxZSh0KT09PXFlKGEubWQoKSkpcmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIElTbihlLHQpe3ZhciBuLHIsYTtyZXR1cm4gbj10LnFpKGUuYSksbiYmKGE9ZWkobjEoKCFuLmImJihuLmI9bmV3IGRoKChUbigpLE5vKSxZYyxuKSksbi5iKSwiYWZmaWxpYXRpb24iKSksYSE9bnVsbCk/KHI9UnEoYSxjbCgzNSkpLHI9PS0xP0JjZShlLEtfKGUsQWgodC5xaygpKSksYSk6cj09MD9CY2UoZSxudWxsLChYbigxLGEubGVuZ3RoKzEpLGEuc3Vic3RyKDEpKSk6QmNlKGUsKEdhKDAscixhLmxlbmd0aCksYS5zdWJzdHIoMCxyKSksKFhuKHIrMSxhLmxlbmd0aCsxKSxhLnN1YnN0cihyKzEpKSkpOm51bGx9ZnVuY3Rpb24gT1NuKGUsdCxuKXt2YXIgcixhLG8sZjtuLlVnKCJPcnRob2dvbmFsbHkgcm91dGluZyBoaWVyYXJjaGljYWwgcG9ydCBlZGdlcyIsMSksZS5hPTAscj1BTG4odCksT01uKHQsciksbU1uKGUsdCxyKSxPRG4odCksYT1sKFEodCwoTnQoKSxNcykpLDEwMSksbz10LmIsanZ0KChTbigwLG8uYy5sZW5ndGgpLGwoby5jWzBdLDMwKSksYSx0KSxqdnQobChqdChvLG8uYy5sZW5ndGgtMSksMzApLGEsdCksZj10LmIsWW10KChTbigwLGYuYy5sZW5ndGgpLGwoZi5jWzBdLDMwKSkpLFltdChsKGp0KGYsZi5jLmxlbmd0aC0xKSwzMCkpLG4uVmcoKX1mdW5jdGlvbiBua2UoZSl7c3dpdGNoKGUpe2Nhc2UgNDg6Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA1MjpjYXNlIDUzOmNhc2UgNTQ6Y2FzZSA1NTpjYXNlIDU2OmNhc2UgNTc6cmV0dXJuIGUtNDg8PDI0Pj4yNDtjYXNlIDk3OmNhc2UgOTg6Y2FzZSA5OTpjYXNlIDEwMDpjYXNlIDEwMTpjYXNlIDEwMjpyZXR1cm4gZS05NysxMDw8MjQ+PjI0O2Nhc2UgNjU6Y2FzZSA2NjpjYXNlIDY3OmNhc2UgNjg6Y2FzZSA2OTpjYXNlIDcwOnJldHVybiBlLTY1KzEwPDwyND4+MjQ7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgZ2QoIkludmFsaWQgaGV4YWRlY2ltYWwiKSl9fWZ1bmN0aW9uIFBVKCl7UFU9VSxqX2U9bmV3IEw1KCJTUElSQUwiLDApLFBfZT1uZXcgTDUoIkxJTkVfQllfTElORSIsMSksQl9lPW5ldyBMNSgiTUFOSEFUVEFOIiwyKSxOX2U9bmV3IEw1KCJKSVRURVIiLDMpLHowZT1uZXcgTDUoIlFVQURSQU5UU19MSU5FX0JZX0xJTkUiLDQpLFJfZT1uZXcgTDUoIlFVQURSQU5UU19NQU5IQVRUQU4iLDUpLEZfZT1uZXcgTDUoIlFVQURSQU5UU19KSVRURVIiLDYpLE9fZT1uZXcgTDUoIkNPTUJJTkVfTElORV9CWV9MSU5FX01BTkhBVFRBTiIsNyksSV9lPW5ldyBMNSgiQ09NQklORV9KSVRURVJfTUFOSEFUVEFOIiw4KX1mdW5jdGlvbiBSYnQoZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFO2Zvcih3PVR1ZShlLG4pLEU9VHVlKHQsbiksYT0hMTt3JiZFJiYocnx8QzduKHcsRSxuKSk7KWY9VHVlKHcsbiksZz1UdWUoRSxuKSx1Tih0KSx1TihlKSxvPXcuYyxDbGUodywhMSksQ2xlKEUsITEpLG4/KEZ5KHQsRS5wLG8pLHQucD1FLnAsRnkoZSx3LnArMSxvKSxlLnA9dy5wKTooRnkoZSx3LnAsbyksZS5wPXcucCxGeSh0LEUucCsxLG8pLHQucD1FLnApLFZhKHcsbnVsbCksVmEoRSxudWxsKSx3PWYsRT1nLGE9ITA7cmV0dXJuIGF9ZnVuY3Rpb24gamJ0KGUpe3N3aXRjaChlLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IEdyZTtjYXNlIDE6cmV0dXJuIG5ldyBYUztjYXNlIDM6cmV0dXJuIG5ldyBmZXQ7Y2FzZSA0OnJldHVybiBuZXcgemVlO2Nhc2UgNTpyZXR1cm4gbmV3IHpydDtjYXNlIDY6cmV0dXJuIG5ldyBqSTtjYXNlIDI6cmV0dXJuIG5ldyBZUztjYXNlIDc6cmV0dXJuIG5ldyBhejtjYXNlIDg6cmV0dXJuIG5ldyBSSTtkZWZhdWx0OnRocm93IHVlKG5ldyBZbigiTm8gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGUgbGF5ZXJlciAiKyhlLmYhPW51bGw/ZS5mOiIiK2UuZykpKX19ZnVuY3Rpb24gTlNuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHc7Zm9yKGE9ITEsbz0hMSxnPW5ldyBHKHIuaik7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDEyKSxxZShRKGYsKGZ0KCksemkpKSk9PT1xZShuKSYmKGYuZy5jLmxlbmd0aD09MD9mLmUuYy5sZW5ndGg9PTB8fChhPSEwKTpvPSEwKTtyZXR1cm4gdz0wLGEmJmFebz93PW4uaj09KEN0KCksUW4pPy1lLmVbci5jLnBdW3IucF06dC1lLmVbci5jLnBdW3IucF06byYmYV5vP3c9ZS5lW3IuYy5wXVtyLnBdKzE6YSYmbyYmKHc9bi5qPT0oQ3QoKSxRbik/MDp0LzIpLHd9ZnVuY3Rpb24gZWxlKGUsdCxuLHIsYSxvLGYsZyl7dmFyIHcsRSxDO2Zvcih3PTAsdCE9bnVsbCYmKHdePXMyKHQudG9Mb3dlckNhc2UoKSkpLG4hPW51bGwmJih3Xj1zMihuKSksciE9bnVsbCYmKHdePXMyKHIpKSxmIT1udWxsJiYod149czIoZikpLGchPW51bGwmJih3Xj1zMihnKSksRT0wLEM9by5sZW5ndGg7RTxDO0UrKyl3Xj1zMihvW0VdKTtlP3d8PTI1Njp3Jj0tMjU3LGE/d3w9MTY6dyY9LTE3LHRoaXMuZj13LHRoaXMuaT10PT1udWxsP251bGw6KG5yKHQpLHQpLHRoaXMuYT1uLHRoaXMuZD1yLHRoaXMuaj1vLHRoaXMuZz1mLHRoaXMuZT1nfWZ1bmN0aW9uIHJrZShlLHQsbil7dmFyIHIsYTtzd2l0Y2goYT1udWxsLHQuZyl7Y2FzZSAxOmE9KGtsKCkseEFlKTticmVhaztjYXNlIDI6YT0oa2woKSxFQWUpfXN3aXRjaChyPW51bGwsbi5nKXtjYXNlIDE6cj0oa2woKSxrQWUpO2JyZWFrO2Nhc2UgMjpyPShrbCgpLHlBZSk7YnJlYWs7Y2FzZSAzOnI9KGtsKCksVEFlKTticmVhaztjYXNlIDQ6cj0oa2woKSxDQWUpfXJldHVybiBhJiZyP0c4KGUuaixuZXcgZ3oobmV3IElsKGhlKGxlKG9PbiwxKSxSbiwxNzgsMCxbbChYcihhKSwxNzgpLGwoWHIociksMTc4KV0pKSkpOihDbigpLENuKCksX28pfWZ1bmN0aW9uIFBTbihlKXt2YXIgdCxuLHI7c3dpdGNoKHQ9bChRKGUsKE50KCkscVQpKSw4KSxydChlLHFULG5ldyBsdCh0LmIsdC5hKSksbChRKGUsUmQpLDI1NSkuZyl7Y2FzZSAxOnJ0KGUsUmQsKG9nKCksblkpKTticmVhaztjYXNlIDI6cnQoZSxSZCwob2coKSxlWSkpO2JyZWFrO2Nhc2UgMzpydChlLFJkLChvZygpLEhCKSk7YnJlYWs7Y2FzZSA0OnJ0KGUsUmQsKG9nKCksVkIpKX0oZS5xP2UucTooQ24oKSxDbigpLG1nKSkuX2IodzQpJiYobj1sKFEoZSx3NCksOCkscj1uLmEsbi5hPW4uYixuLmI9cil9ZnVuY3Rpb24gJGJ0KGUsdCxuLHIsYSxvKXtpZih0aGlzLmI9bix0aGlzLmQ9YSxlPj10Lmxlbmd0aCl0aHJvdyB1ZShuZXcgdGMoIkdyZWVkeSBTd2l0Y2hEZWNpZGVyOiBGcmVlIGxheWVyIG5vdCBpbiBncmFwaC4iKSk7dGhpcy5jPXRbZV0sdGhpcy5lPW5ldyBJTyhyKSxpY2UodGhpcy5lLHRoaXMuYywoQ3QoKSxlcikpLHRoaXMuaT1uZXcgSU8ociksaWNlKHRoaXMuaSx0aGlzLmMsYXIpLHRoaXMuZj1uZXcgaXN0KHRoaXMuYyksdGhpcy5hPSFvJiZhLmkmJiFhLnMmJnRoaXMuY1swXS5rPT0oWm4oKSxVcyksdGhpcy5hJiZXOW4odGhpcyxlLHQubGVuZ3RoKX1mdW5jdGlvbiB6YnQoZSx0KXt2YXIgbixyLGEsbyxmLGc7bz0hZS5CLkhjKChabCgpLHNGKSksZj1lLkIuSGMoR2dlKSxlLmE9bmV3IF8xdChmLG8sZS5jKSxlLm4mJk81ZShlLmEubixlLm4pLFhpZShlLmcsKHQxKCksJHUpLGUuYSksdHx8KHI9bmV3IERBKDEsbyxlLmMpLHIubi5hPWUuayxROChlLnAsKEN0KCksUW4pLHIpLGE9bmV3IERBKDEsbyxlLmMpLGEubi5kPWUuayxROChlLnAsRHIsYSksZz1uZXcgREEoMCxvLGUuYyksZy5uLmM9ZS5rLFE4KGUucCxlcixnKSxuPW5ldyBEQSgwLG8sZS5jKSxuLm4uYj1lLmssUTgoZS5wLGFyLG4pKX1mdW5jdGlvbiBCU24oZSl7dmFyIHQsbixyO3N3aXRjaCh0PWwoUShlLmQsKE50KCksYnApKSwyMjMpLHQuZyl7Y2FzZSAyOm49VEluKGUpO2JyZWFrO2Nhc2UgMzpuPShyPW5ldyBidCxJcyhGaShmYyhEYyhEYyhuZXcgYm4obnVsbCxuZXcga24oZS5kLmIsMTYpKSxuZXcgZGVlKSxuZXcgZ2VlKSxuZXcgcGVlKSxuZXcgd1MpLG5ldyB4WWUocikpLHIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgdWUobmV3IG5jKCJDb21wYWN0aW9uIG5vdCBzdXBwb3J0ZWQgZm9yICIrdCsiIGVkZ2VzLiIpKX1HTG4oZSxuKSx0byhuZXcgYnIoZS5nKSxuZXcgd1llKGUpKX1mdW5jdGlvbiBGU24oZSx0KXt2YXIgbixyLGEsbyxmLGcsdztpZih0LlVnKCJQcm9jZXNzIGRpcmVjdGlvbnMiLDEpLG49bChRKGUsKEhjKCkseTMpKSw4OCksbiE9KEpzKCksUTEpKWZvcihhPVJyKGUuYiwwKTthLmIhPWEuZC5jOyl7c3dpdGNoKHI9bChCcihhKSw0MCksZz1sKFEociwoUWkoKSxQQikpLDE3KS5hLHc9bChRKHIsQkIpLDE3KS5hLG4uZyl7Y2FzZSA0OncqPS0xO2JyZWFrO2Nhc2UgMTpvPWcsZz13LHc9bzticmVhaztjYXNlIDI6Zj1nLGc9LXcsdz1mfXJ0KHIsUEIscHQoZykpLHJ0KHIsQkIscHQodykpfXQuVmcoKX1mdW5jdGlvbiBSU24oZSx0KXt2YXIgbjtyZXR1cm4gbj1uZXcgQnMsdCYmcGMobixsKGNyKGUuYSxvRiksOTYpKSxEZSh0LDQyMikmJnBjKG4sbChjcihlLmEsY0YpLDk2KSksRGUodCwzNjYpPyhwYyhuLGwoY3IoZS5hLGVjKSw5NikpLG4pOihEZSh0LDg0KSYmcGMobixsKGNyKGUuYSxfciksOTYpKSxEZSh0LDIwNyk/KHBjKG4sbChjcihlLmEsQWkpLDk2KSksbik6RGUodCwxOTMpPyhwYyhuLGwoY3IoZS5hLEhsKSw5NikpLG4pOihEZSh0LDMyNikmJnBjKG4sbChjcihlLmEsanMpLDk2KSksbikpfWZ1bmN0aW9uIGpTbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3O2Zvcih3PW5ldyB4dXQsZz1uZXcgRyhlLmEpO2cuYTxnLmMuYy5sZW5ndGg7KWlmKGY9bChyZShnKSwxMCksZi5rIT0oWm4oKSxVcykpe2Zvcih6RW4odyxmLG5ldyBxYSksbz1uZXcgaHIoZHIocXMoZikuYS5LYygpLG5ldyBqKSk7anIobyk7KWlmKGE9bCh4cihvKSwxOCksIShhLmMuaS5rPT1Vc3x8YS5kLmkuaz09VXMpKWZvcihyPVJyKGEuYSwwKTtyLmIhPXIuZC5jOyluPWwoQnIociksOCksdD1uLFJBKHcsbmV3IElrKHQuYSx0LmIpKX1yZXR1cm4gd31mdW5jdGlvbiB0bGUoKXt0bGU9VSxQT2U9bmV3IFVpKE1mZSksTk9lPShiXygpLHFCKSxPT2U9bmV3IHBuKE9mZSxOT2UpLElPZT0oQ04oKSxaVyksY1N0PW5ldyBwbihHQ2UsSU9lKSxET2U9KFhOKCksd2dlKSxvU3Q9bmV3IHBuKEtDZSxET2UpLGlTdD1uZXcgcG4oRGZlLG51bGwpLE1PZT0ock4oKSxRVyksYVN0PW5ldyBwbihJZmUsTU9lKSxMT2U9KG5xKCksYmdlKSxlU3Q9bmV3IHBuKFdDZSxMT2UpLHRTdD1uZXcgcG4oWUNlLChIbigpLCExKSksblN0PW5ldyBwbihYQ2UscHQoNjQpKSxyU3Q9bmV3IHBuKFFDZSwhMCksc1N0PXZnZX1mdW5jdGlvbiBxYnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTDtmb3IoZS5wPTEsYT1lLmMsTD1uZXcgYmQsQz1SdyhlLChxbygpLHp1KSkuS2MoKTtDLk9iKCk7KWZvcihFPWwoQy5QYigpLDEyKSxyPW5ldyBHKEUuZyk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDE4KSx3PW4uZC5pLGUhPXcmJihvPXcuYyxvLnA8PWEucCYmKGY9YS5wKzEsZj09dC5iLmMubGVuZ3RoPyhnPW5ldyB5dSh0KSxnLnA9Zix2dCh0LmIsZyksVmEodyxnKSk6KGc9bChqdCh0LmIsZiksMzApLFZhKHcsZykpLEwuYS56Yyh3LEwpKSk7cmV0dXJuIEx9ZnVuY3Rpb24gJFNuKGUsdCl7dmFyIG4scjtpZihuPWwoUShlLChRaSgpLE9kZSkpLDE1KSwhbnx8bi5nYygpPDEpcmV0dXJuIG51bGw7aWYobi5nYygpPT0xKXJldHVybiBsKG4uWGIoMCksNDApO3N3aXRjaChyPW51bGwsdC5nKXtjYXNlIDI6cj1sKGZoKFk4KG4uT2MoKSxuZXcgUnRlKSksNDApO2JyZWFrO2Nhc2UgMTpyPWwoZmgodnkobi5PYygpLG5ldyBvOCkpLDQwKTticmVhaztjYXNlIDQ6cj1sKGZoKFk4KG4uT2MoKSxuZXcgWmopKSw0MCk7YnJlYWs7Y2FzZSAzOnI9bChmaCh2eShuLk9jKCksbmV3IEZ0ZSkpLDQwKX1yZXR1cm4gcn1mdW5jdGlvbiBIYnQoZSl7dmFyIHQsbixyLGEsbyxmO2lmKGUuYT09bnVsbClpZihlLmE9V2UoaWgscGcsMjgsZS5jLmIuYy5sZW5ndGgsMTYsMSksZS5hWzBdPSExLG5zKGUuYywoTnQoKSxmZGUpKSlmb3Iocj1sKFEoZS5jLGZkZSksMTUpLG49ci5LYygpO24uT2IoKTspdD1sKG4uUGIoKSwxNykuYSx0PjAmJnQ8ZS5hLmxlbmd0aCYmKGUuYVt0XT0hMSk7ZWxzZSBmb3IoZj1uZXcgRyhlLmMuYiksZi5hPGYuYy5jLmxlbmd0aCYmcmUoZiksYT0xO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwzMCksZS5hW2ErK109a1RuKG8pfWZ1bmN0aW9uIHVnKCl7dWc9VSxiTT1uZXcgVWkoImFkZGl0aW9uYWxIZWlnaHQiKSxaVD1uZXcgVWkoImRyYXdpbmdIZWlnaHQiKSxaeD1uZXcgVWkoImRyYXdpbmdXaWR0aCIpLFVXPW5ldyBVaSgibWluSGVpZ2h0IiksbU09bmV3IFVpKCJtaW5XaWR0aCIpLEdXPW5ldyBVaSgicm93cyIpLFQ0PW5ldyBVaSgidGFyZ2V0V2lkdGgiKSxjZ2U9bmV3IHZzKCJtaW5Sb3dJbmNyZWFzZSIsMCksbUN0PW5ldyB2cygibWF4Um93SW5jcmVhc2UiLDApLG9nZT1uZXcgdnMoIm1pblJvd0RlY3JlYXNlIiwwKSxiQ3Q9bmV3IHZzKCJtYXhSb3dEZWNyZWFzZSIsMCl9ZnVuY3Rpb24gVmJ0KGUsdCl7dmFyIG4scixhLG87c3dpdGNoKGE9ZS5iLHQpe2Nhc2UgMTp7ZS5ifD0xLGUuYnw9NCxlLmJ8PTg7YnJlYWt9Y2FzZSAyOntlLmJ8PTIsZS5ifD00LGUuYnw9ODticmVha31jYXNlIDQ6e2UuYnw9MSxlLmJ8PTIsZS5ifD00LGUuYnw9ODticmVha31jYXNlIDM6e2UuYnw9MTYsZS5ifD04O2JyZWFrfWNhc2UgMDp7ZS5ifD0zMixlLmJ8PTE2LGUuYnw9OCxlLmJ8PTEsZS5ifD0yLGUuYnw9NDticmVha319aWYoZS5iIT1hJiZlLmMpZm9yKHI9bmV3IG9yKGUuYyk7ci5lIT1yLmkuZ2MoKTspbz1sKGdyKHIpLDQ4Miksbj1ZbChvKSx6eShuLHQpfWZ1bmN0aW9uIFVidChlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWO2ZvcihhPSExLGY9dCxnPTAsdz1mLmxlbmd0aDtnPHc7KytnKW89ZltnXSxSdCgoSG4oKSwhIW8uZSkpJiYhbChqdChlLmIsby5lLnApLDIxOSkucyYmKGE9YXwoRT1vLmUsQz1sKGp0KGUuYixFLnApLDIxOSksTD1DLmUsQj1VSmUobixMLmxlbmd0aCksej1MW0JdWzBdLHouaz09KFpuKCksVXMpP0xbQl09dkNuKG8sTFtCXSxuPyhDdCgpLGVyKTooQ3QoKSxhcikpOkMuYy5tZyhMLG4pLFY9Y1AoZSxDLG4sciksWTllKEMuZSxDLm8sbiksVikpO3JldHVybiBhfWZ1bmN0aW9uIEdidChlLHQpe3ZhciBuLHIsYSxvLGY7Zm9yKG89KCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpLmksYT1uZXcgb3IoKCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpKTthLmUhPWEuaS5nYygpOylyPWwoZ3IoYSksMjcpLHFlKGF0KHIsKHBpKCksbjcpKSkhPT1xZSgocnAoKSxETSkpJiYoZj1sKGF0KHQsYTcpLDE0Myksbj1sKGF0KHIsYTcpLDE0MyksKGY9PW58fGYmJmc2ZShmLG4pKSYmKCFyLmEmJihyLmE9bmV3IG50KEFpLHIsMTAsMTEpKSxyLmEpLmkhPTAmJihvKz1HYnQoZSxyKSkpO3JldHVybiBvfWZ1bmN0aW9uIHpTbihlKXt2YXIgdCxuLHIsYSxvLGYsZztmb3Iocj0wLGc9MCxmPW5ldyBHKGUuZCk7Zi5hPGYuYy5jLmxlbmd0aDspbz1sKHJlKGYpLDEwNSksYT1sKHljKEZpKG5ldyBibihudWxsLG5ldyBrbihvLmosMTYpKSxuZXcgVmopLFBsKG5ldyB6cixuZXcgaHQsbmV3IEZuLGhlKGxlKG9jLDEpLGl0LDEwOCwwLFsoRmwoKSxFYyldKSkpLDE1KSxuPW51bGwscjw9Zz8obj0oQ3QoKSxRbikscis9YS5nYygpKTpnPHImJihuPShDdCgpLERyKSxnKz1hLmdjKCkpLHQ9bixJcyhmYyhhLk9jKCksbmV3IHllZSksbmV3IFRZZSh0KSl9ZnVuY3Rpb24gcVNuKGUpe3ZhciB0LG4scixhLG87Zm9yKG89bmV3IEJ1KGUuYS5jLmxlbmd0aCksYT1uZXcgRyhlLmEpO2EuYTxhLmMuYy5sZW5ndGg7KXtzd2l0Y2gocj1sKHJlKGEpLDEwKSxuPWwoUShyLChOdCgpLFF1KSksMTcxKSx0PW51bGwsbi5nKXtjYXNlIDE6Y2FzZSAyOnQ9KFZtKCksUDYpO2JyZWFrO2Nhc2UgMzpjYXNlIDQ6dD0oVm0oKSxGVCl9dD8ocnQociwoZnQoKSxzVyksKFZtKCksUDYpKSx0PT1GVD9EVShyLG4sKHFvKCksJGwpKTp0PT1QNiYmRFUocixuLChxbygpLHp1KSkpOiRuKG8uYyxyKX1yZXR1cm4gb31mdW5jdGlvbiBIU24oZSl7dmFyIHQsbixyLGEsbyxmLGcsdztmb3IoZS5iPW5ldyBpMnQobmV3IElsKChDdCgpLGhlKGxlKE9vLDEpLGF1LDY0LDAsW1BjLFFuLGFyLERyLGVyXSkpKSxuZXcgSWwoKE93KCksaGUobGUobTFlLDEpLGl0LDM3MiwwLFtvMyxSYixhM10pKSkpLGY9aGUobGUoT28sMSksYXUsNjQsMCxbUGMsUW4sYXIsRHIsZXJdKSxnPTAsdz1mLmxlbmd0aDtnPHc7KytnKWZvcihvPWZbZ10sbj1oZShsZShtMWUsMSksaXQsMzcyLDAsW28zLFJiLGEzXSkscj0wLGE9bi5sZW5ndGg7cjxhOysrcil0PW5bcl0sUDhuKGUuYixvLHQsbmV3IGJ0KX1mdW5jdGlvbiBLYnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTDtpZihmPWwobCgkaShlLnIsdCksMjEpLDg3KSxnPWUudS5IYygoUmwoKSxZYikpLG49ZS51LkhjKFBNKSxyPWUudS5IYyhOTSksRT1lLnUuSGMoYTkpLEw9ZS5CLkhjKChabCgpLGZZKSksQz0hbiYmIXImJihFfHxmLmdjKCk9PTIpLHpDbihlLHQpLGE9bnVsbCx3PW51bGwsZyl7Zm9yKG89Zi5LYygpLGE9bChvLlBiKCksMTE3KSx3PWE7by5PYigpOyl3PWwoby5QYigpLDExNyk7YS5kLmI9MCx3LmQuYz0wLEMmJiFhLmEmJihhLmQuYz0wKX1MJiYoTnhuKGYpLGcmJihhLmQuYj0wLHcuZC5jPTApKX1mdW5jdGlvbiBXYnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTDtpZihmPWwobCgkaShlLnIsdCksMjEpLDg3KSxnPWUudS5IYygoUmwoKSxZYikpLG49ZS51LkhjKFBNKSxyPWUudS5IYyhOTSksdz1lLnUuSGMoYTkpLEw9ZS5CLkhjKChabCgpLGZZKSksRT0hbiYmIXImJih3fHxmLmdjKCk9PTIpLHVBbihlLHQpLEM9bnVsbCxhPW51bGwsZyl7Zm9yKG89Zi5LYygpLEM9bChvLlBiKCksMTE3KSxhPUM7by5PYigpOylhPWwoby5QYigpLDExNyk7Qy5kLmQ9MCxhLmQuYT0wLEUmJiFDLmEmJihDLmQuYT0wKX1MJiYoUHhuKGYpLGcmJihDLmQuZD0wLGEuZC5hPTApKX1mdW5jdGlvbiBZYnQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEM7aWYoYT10LmssdC5wPj0wKXJldHVybiExO2lmKHQucD1uLmIsdnQobi5lLHQpLGE9PShabigpLEFhKXx8YT09QXUpe2ZvcihmPW5ldyBHKHQuaik7Zi5hPGYuYy5jLmxlbmd0aDspZm9yKG89bChyZShmKSwxMiksQz0ocj1uZXcgRyhuZXcgQzgobykuYS5nKSxuZXcgdndlKHIpKTtMYyhDLmEpOylpZihFPWwocmUoQy5hKSwxOCkuZCxnPUUuaSx3PWcuayx0LmMhPWcuYyYmKHc9PUFhfHx3PT1BdSkmJllidChlLGcsbikpcmV0dXJuITB9cmV0dXJuITB9ZnVuY3Rpb24gQlUoZSl7dmFyIHQ7cmV0dXJuIGUuRGImNjQ/VDllKGUpOih0PW5ldyBBZihUOWUoZSkpLHQuYSs9IiAoY2hhbmdlYWJsZTogIixHcCh0LChlLkJiJm0wKSE9MCksdC5hKz0iLCB2b2xhdGlsZTogIixHcCh0LChlLkJiJnI0KSE9MCksdC5hKz0iLCB0cmFuc2llbnQ6ICIsR3AodCwoZS5CYiZYeSkhPTApLHQuYSs9IiwgZGVmYXVsdFZhbHVlTGl0ZXJhbDogIixYbyh0LGUuaiksdC5hKz0iLCB1bnNldHRhYmxlOiAiLEdwKHQsKGUuQmImU2wpIT0wKSx0LmErPSIsIGRlcml2ZWQ6ICIsR3AodCwoZS5CYiZfZCkhPTApLHQuYSs9IikiLHQuYSl9ZnVuY3Rpb24gVlNuKGUsdCl7dmFyIG4scixhLG8sZjtyZXR1cm4gYT10LnFpKGUuYSksYSYmKHI9KCFhLmImJihhLmI9bmV3IGRoKChUbigpLE5vKSxZYyxhKSksYS5iKSxuPWVpKG4xKHIsaG8pKSxuIT1udWxsJiYobz1uLmxhc3RJbmRleE9mKCIjIiksZj1vPT0tMT96eWUoZSx0LmprKCksbik6bz09MD9vTihlLG51bGwsKFhuKDEsbi5sZW5ndGgrMSksbi5zdWJzdHIoMSkpKTpvTihlLChHYSgwLG8sbi5sZW5ndGgpLG4uc3Vic3RyKDAsbykpLChYbihvKzEsbi5sZW5ndGgrMSksbi5zdWJzdHIobysxKSkpLERlKGYsMTU2KSkpP2woZiwxNTYpOm51bGx9ZnVuY3Rpb24gVVNuKGUsdCl7dmFyIG4scixhLG8sZjtyZXR1cm4gcj10LnFpKGUuYSksciYmKG49KCFyLmImJihyLmI9bmV3IGRoKChUbigpLE5vKSxZYyxyKSksci5iKSxvPWVpKG4xKG4sbzBlKSksbyE9bnVsbCYmKGE9by5sYXN0SW5kZXhPZigiIyIpLGY9YT09LTE/enllKGUsdC5qaygpLG8pOmE9PTA/b04oZSxudWxsLChYbigxLG8ubGVuZ3RoKzEpLG8uc3Vic3RyKDEpKSk6b04oZSwoR2EoMCxhLG8ubGVuZ3RoKSxvLnN1YnN0cigwLGEpKSwoWG4oYSsxLG8ubGVuZ3RoKzEpLG8uc3Vic3RyKGErMSkpKSxEZShmLDE1NikpKT9sKGYsMTU2KTpudWxsfWZ1bmN0aW9uIEdTbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKGE9cVRuKGUuZCksZj1sKFEoZS5iLChJQSgpLFlfZSkpLDEwNyksZz1mLmIrZi5jLHc9Zi5kK2YuYSxDPWEuZC5hKmUuZStnLEU9YS5iLmEqZS5mK3csX2llKGUuYixuZXcgbHQoQyxFKSksQj1uZXcgRyhlLmcpO0IuYTxCLmMuYy5sZW5ndGg7KUw9bChyZShCKSw1NjgpLHQ9TC5nLWEuYS5hLG49TC5pLWEuYy5hLHI9T2koc2ZuKG5ldyBsdCh0LG4pLEwuYSxMLmIpLG1kKHpfKEphKGZ5ZShMLmUpKSxMLmQqTC5hLEwuYypMLmIpLC0uNSkpLG89ZHllKEwuZSksX3VuKEwuZSxtYShyLG8pKX1mdW5jdGlvbiBLU24oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCO2Zvcih0LlVnKCJSZXN0b3JpbmcgcmV2ZXJzZWQgZWRnZXMiLDEpLHc9bmV3IEcoZS5iKTt3LmE8dy5jLmMubGVuZ3RoOylmb3IoZz1sKHJlKHcpLDMwKSxDPW5ldyBHKGcuYSk7Qy5hPEMuYy5jLmxlbmd0aDspZm9yKEU9bChyZShDKSwxMCksQj1uZXcgRyhFLmopO0IuYTxCLmMuYy5sZW5ndGg7KWZvcihMPWwocmUoQiksMTIpLGY9a2QoTC5nKSxyPWYsYT0wLG89ci5sZW5ndGg7YTxvOysrYSluPXJbYV0sUnQoQnQoUShuLChmdCgpLFcxKSkpKSYmVXcobiwhMSk7dC5WZygpfWZ1bmN0aW9uIFdTbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3O2Zvcih3PVdlKE5hLGR0LDEwOSwoQ3QoKSxoZShsZShPbywxKSxhdSw2NCwwLFtQYyxRbixhcixEcixlcl0pKS5sZW5ndGgsMCwyKSxvPWhlKGxlKE9vLDEpLGF1LDY0LDAsW1BjLFFuLGFyLERyLGVyXSksZj0wLGc9by5sZW5ndGg7ZjxnOysrZilhPW9bZl0sd1thLmddPVdlKE5hLFpvLDI4LGUuY1thLmddLDE1LDEpO3JldHVybiBoZ3QodyxlLFFuKSxoZ3QodyxlLERyKSxidWUodyxlLFFuLHQsbixyKSxidWUodyxlLGFyLHQsbixyKSxidWUodyxlLERyLHQsbixyKSxidWUodyxlLGVyLHQsbixyKSx3fWZ1bmN0aW9uIFlTbihlLHQsbil7aWYoSHUoZS5hLHQpKXtpZihXMChsKGNyKGUuYSx0KSw0OSksbikpcmV0dXJuIDF9ZWxzZSBraShlLmEsdCxuZXcgS3MpO2lmKEh1KGUuYSxuKSl7aWYoVzAobChjcihlLmEsbiksNDkpLHQpKXJldHVybi0xfWVsc2Uga2koZS5hLG4sbmV3IEtzKTtpZihIdShlLmIsdCkpe2lmKFcwKGwoY3IoZS5iLHQpLDQ5KSxuKSlyZXR1cm4tMX1lbHNlIGtpKGUuYix0LG5ldyBLcyk7aWYoSHUoZS5iLG4pKXtpZihXMChsKGNyKGUuYixuKSw0OSksdCkpcmV0dXJuIDF9ZWxzZSBraShlLmIsbixuZXcgS3MpO3JldHVybiAwfWZ1bmN0aW9uIFhTbihlKXt2YXIgdCxuLHIsYSxvLGY7ZS5xPT0oUmEoKSxUZyl8fGUucT09TXV8fChhPWUuZi5uLmQrdEgobChRbyhlLmIsKEN0KCksUW4pKSwxMjcpKStlLmMsdD1lLmYubi5hK3RIKGwoUW8oZS5iLERyKSwxMjcpKStlLmMscj1sKFFvKGUuYixhciksMTI3KSxmPWwoUW8oZS5iLGVyKSwxMjcpLG89Yi5NYXRoLm1heCgwLHIubi5kLWEpLG89Yi5NYXRoLm1heChvLGYubi5kLWEpLG49Yi5NYXRoLm1heCgwLHIubi5hLXQpLG49Yi5NYXRoLm1heChuLGYubi5hLXQpLHIubi5kPW8sZi5uLmQ9byxyLm4uYT1uLGYubi5hPW4pfWZ1bmN0aW9uIGlrZShlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEU7aWYobj09bnVsbCl7Zm9yKGE9bChlLmcsMTI0KSxnPTA7ZzxlLmk7KytnKWlmKGY9YVtnXSxmLkxrKCk9PXQpcmV0dXJuIFRvKGUsZixyKX1yZXR1cm4gbz0oRm8oKSxsKHQsNjkpLnhrKCk/bChuLDc2KTpzZyh0LG4pKSxoaChlLmUpPyhFPSFGTihlLHQpLHI9UnUoZSxvLHIpLHc9dC5KaygpP2RiKGUsMyx0LG51bGwsbixYRShlLHQsbixEZSh0LDEwMikmJihsKHQsMTkpLkJiJklvKSE9MCksRSk6ZGIoZSwxLHQsdC5paygpLG4sLTEsRSkscj9yLm5qKHcpOnI9dyk6cj1SdShlLG8scikscn1mdW5jdGlvbiBYYnQoKXt0aGlzLmI9bmV3IGUyLHRoaXMuZD1uZXcgZTIsdGhpcy5lPW5ldyBlMix0aGlzLmM9bmV3IGUyLHRoaXMuYT1uZXcgUHIsdGhpcy5mPW5ldyBQcixVNShFYSxuZXcgUG5lLG5ldyB4SSksVTUoR09lLG5ldyBiNSxuZXcgWjkpLFU1KHZBZSxuZXcgX1MsbmV3IGtJKSxVNSh3QWUsbmV3IEZuZSxuZXcgUm5lKSxVNShnX3QsbmV3IGIkLG5ldyBtJCksVTUoY09uLG5ldyBsOCxuZXcgVzIpLFU1KGhPbixuZXcgZCQsbmV3IGckKSxVNSh1T24sbmV3IHAkLG5ldyBCbmUpLFU1KGxPbixuZXcgaDgsbmV3IHJ5KSxVNShnT24sbmV3IGpwLG5ldyBZMil9ZnVuY3Rpb24gS0EoZSx0KXt2YXIgbixyLGEsbyxmO2ZvcihlPWU9PW51bGw/dWw6KG5yKGUpLGUpLGE9MDthPHQubGVuZ3RoO2ErKyl0W2FdPUdUbih0W2FdKTtmb3Iobj1uZXcgUzUsZj0wLHI9MDtyPHQubGVuZ3RoJiYobz1lLmluZGV4T2YoIiVzIixmKSxvIT0tMSk7KW4uYSs9IiIrdGYoZT09bnVsbD91bDoobnIoZSksZSksZixvKSx3dShuLHRbcisrXSksZj1vKzI7aWYoZmN0KG4sZSxmLGUubGVuZ3RoKSxyPHQubGVuZ3RoKXtmb3Iobi5hKz0iIFsiLHd1KG4sdFtyKytdKTtyPHQubGVuZ3RoOyluLmErPUNvLHd1KG4sdFtyKytdKTtuLmErPSJdIn1yZXR1cm4gbi5hfWZ1bmN0aW9uIHNrZShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2ZvcihuPTAsdz1uZXcgRyh0KTt3LmE8dy5jLmMubGVuZ3RoOyl7Zm9yKGc9bChyZSh3KSwxMiksWTdlKGUuYixlLmRbZy5wXSksZj0wLGE9bmV3IE4xKGcuYik7TGMoYS5hKXx8TGMoYS5iKTspcj1sKExjKGEuYSk/cmUoYS5hKTpyZShhLmIpLDE4KSx1YXQocik/KG89ZjNlKGUsZz09ci5jP3IuZDpyLmMpLG8+ZS5kW2cucF0mJihuKz1mNmUoZS5iLG8pLGdiKGUuYSxwdChvKSkpKTorK2Y7Zm9yKG4rPWUuYi5kKmY7IWxfKGUuYSk7KVU2ZShlLmIsbChYOChlLmEpLDE3KS5hKX1yZXR1cm4gbn1mdW5jdGlvbiBRYnQoZSl7dmFyIHQsbixyLGEsbyxmO3JldHVybiBvPTAsdD1PZihlKSx0LmtrKCkmJihvfD00KSxlLkJiJlNsJiYob3w9MiksRGUoZSwxMDIpPyhuPWwoZSwxOSksYT1SbyhuKSxuLkJiJmV1JiYob3w9MzIpLGEmJih5cihreShhKSksb3w9OCxmPWEudCwoZj4xfHxmPT0tMSkmJihvfD0xNiksYS5CYiZldSYmKG98PTY0KSksbi5CYiZJbyYmKG98PXI0KSxvfD1tMCk6RGUodCw0NjkpP298PTUxMjoocj10LmtrKCksciYmci5pJjEmJihvfD0yNTYpKSxlLkJiJjUxMiYmKG98PTEyOCksb31mdW5jdGlvbiBRU24oZSx0KXt2YXIgbjtyZXR1cm4gZS5mPT1zcGU/KG49a3coaWMoKEVsKCksaW8pLHQpKSxlLmU/bj09NCYmdCE9KGt4KCksdTkpJiZ0IT0oa3goKSxjOSkmJnQhPShreCgpLGFwZSkmJnQhPShreCgpLG9wZSk6bj09Mik6ZS5kJiYoZS5kLkhjKHQpfHxlLmQuSGMocngoaWMoKEVsKCksaW8pLHQpKSl8fGUuZC5IYyhnNigoRWwoKSxpbyksZS5iLHQpKSk/ITA6ZS5mJiZxOWUoKEVsKCksZS5mKSxITyhpYyhpbyx0KSkpPyhuPWt3KGljKGlvLHQpKSxlLmU/bj09NDpuPT0yKTohMX1mdW5jdGlvbiBKU24oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHo7Zm9yKEI9LTEsej0wLEU9ZSxDPTAsTD1FLmxlbmd0aDtDPEw7KytDKXtmb3Iodz1FW0NdLG89dyxmPTAsZz1vLmxlbmd0aDtmPGc7KytmKWZvcihhPW9bZl0sdD1uZXcgU2N0KEI9PS0xP2VbMF06ZVtCXSxsKFEoZW8oYSksKE50KCkseWcpKSwyODQpLGlndChhKSxSdChCdChRKGVvKGEpLFExZSkpKSksbj0wO248YS5qLmMubGVuZ3RoO24rKylmb3Iocj1uKzE7cjxhLmouYy5sZW5ndGg7cisrKUFzdCh0LGwoanQoYS5qLG4pLDEyKSxsKGp0KGEuaixyKSwxMikpPjAmJisrejsrK0J9cmV0dXJuIHp9ZnVuY3Rpb24gWlNuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDLEw7cmV0dXJuIGY9bChhdChuLChwaSgpLG45KSksOCksdz1mLmEsQz1mLmIrZSxhPWIuTWF0aC5hdGFuMihDLHcpLGE8MCYmKGErPWl2KSxhKz10LGE+aXYmJihhLT1pdiksZz1sKGF0KHIsbjkpLDgpLEU9Zy5hLEw9Zy5iK2Usbz1iLk1hdGguYXRhbjIoTCxFKSxvPDAmJihvKz1pdiksbys9dCxvPml2JiYoby09aXYpLEExKCksZjAoMWUtMTApLGIuTWF0aC5hYnMoYS1vKTw9MWUtMTB8fGE9PW98fGlzTmFOKGEpJiZpc05hTihvKT8wOmE8bz8tMTphPm8/MTp1dyhpc05hTihhKSxpc05hTihvKSl9ZnVuY3Rpb24gbmxlKGUpe3ZhciB0LG4scixhLG8sZixnO2ZvcihnPW5ldyBQcixyPW5ldyBHKGUuYS5iKTtyLmE8ci5jLmMubGVuZ3RoOyl0PWwocmUociksNjApLGtpKGcsdCxuZXcgYnQpO2ZvcihhPW5ldyBHKGUuYS5iKTthLmE8YS5jLmMubGVuZ3RoOylmb3IodD1sKHJlKGEpLDYwKSx0Lmk9aWEsZj10LmMuS2MoKTtmLk9iKCk7KW89bChmLlBiKCksNjApLGwoaGMoem8oZy5mLG8pKSwxNSkuRmModCk7Zm9yKG49bmV3IEcoZS5hLmIpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSw2MCksdC5jLiRiKCksdC5jPWwoaGMoem8oZy5mLHQpKSwxNSk7d2J0KGUpfWZ1bmN0aW9uIHJsZShlKXt2YXIgdCxuLHIsYSxvLGYsZztmb3IoZz1uZXcgUHIscj1uZXcgRyhlLmEuYik7ci5hPHIuYy5jLmxlbmd0aDspdD1sKHJlKHIpLDg2KSxraShnLHQsbmV3IGJ0KTtmb3IoYT1uZXcgRyhlLmEuYik7YS5hPGEuYy5jLmxlbmd0aDspZm9yKHQ9bChyZShhKSw4NiksdC5vPWlhLGY9dC5mLktjKCk7Zi5PYigpOylvPWwoZi5QYigpLDg2KSxsKGhjKHpvKGcuZixvKSksMTUpLkZjKHQpO2ZvcihuPW5ldyBHKGUuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksODYpLHQuZi4kYigpLHQuZj1sKGhjKHpvKGcuZix0KSksMTUpO2FidChlKX1mdW5jdGlvbiBlX24oZSx0LG4scil7dmFyIGEsbztmb3IoaThuKGUsdCxuLHIpLGJ3ZSh0LGUuai10LmorbiksQXoodCxlLmstdC5rK3IpLG89bmV3IEcodC5mKTtvLmE8by5jLmMubGVuZ3RoOylzd2l0Y2goYT1sKHJlKG8pLDMzNCksYS5hLmcpe2Nhc2UgMDp5RShlLHQuZythLmIuYSwwLHQuZythLmMuYSx0LmktMSk7YnJlYWs7Y2FzZSAxOnlFKGUsdC5nK3Qubyx0LmkrYS5iLmEsZS5vLTEsdC5pK2EuYy5hKTticmVhaztjYXNlIDI6eUUoZSx0LmcrYS5iLmEsdC5pK3QucCx0LmcrYS5jLmEsZS5wLTEpO2JyZWFrO2RlZmF1bHQ6eUUoZSwwLHQuaSthLmIuYSx0LmctMSx0LmkrYS5jLmEpfX1mdW5jdGlvbiB0X24oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFO2ZvcihvPW5ldyBidCx0LmIuYy5sZW5ndGg9MCxuPWwoeWMoSzVlKG5ldyBibihudWxsLG5ldyBrbihuZXcgYnIoZS5hLmIpLDEpKSksUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsWyhGbCgpLEVjKV0pKSksMTUpLGE9bi5LYygpO2EuT2IoKTspaWYocj1sKGEuUGIoKSwxNyksZj1zNmUoZS5hLHIpLGYuYiE9MClmb3IoZz1uZXcgeXUodCksJG4oby5jLGcpLGcucD1yLmEsRT1ScihmLDApO0UuYiE9RS5kLmM7KXc9bChCcihFKSwxMCksVmEodyxnKTtyYSh0LmIsbyl9ZnVuY3Rpb24gRlUoZSx0LG4scixhKXt2YXIgbyxmLGc7dHJ5e2lmKHQ+PWUubyl0aHJvdyB1ZShuZXcgQndlKTtnPXQ+PjUsZj10JjMxLG89bDAoMSxZcihsMChmLDEpKSksYT9lLm5bbl1bZ109UTAoZS5uW25dW2ddLG8pOmUubltuXVtnXT12YShlLm5bbl1bZ10sTzRlKG8pKSxvPWwwKG8sMSkscj9lLm5bbl1bZ109UTAoZS5uW25dW2ddLG8pOmUubltuXVtnXT12YShlLm5bbl1bZ10sTzRlKG8pKX1jYXRjaCh3KXt0aHJvdyB3PWJzKHcpLERlKHcsMzMzKT91ZShuZXcgdGMoRWhlK2UubysiKiIrZS5wK1RoZSt0K0NvK24rQ2hlKSk6dWUodyl9fWZ1bmN0aW9uIG5fbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKEI9bmV3IEtwKG5ldyBWWWUoZSkpLGc9aGUobGUod2csMSksbTIsMTAsMCxbdCxuXSksdz0wLEU9Zy5sZW5ndGg7dzxFOysrdylmb3IoZj1nW3ddLEw9VEEoZixyKS5LYygpO0wuT2IoKTspZm9yKEM9bChMLlBiKCksMTIpLG89bmV3IE4xKEMuYik7TGMoby5hKXx8TGMoby5iKTspYT1sKExjKG8uYSk/cmUoby5hKTpyZShvLmIpLDE4KSxEbyhhKXx8KEIuYS56YyhDLChIbigpLFBiKSk9PW51bGwsdWF0KGEpJiZqTyhCLEM9PWEuYz9hLmQ6YS5jKSk7cmV0dXJuIFhyKEIpLG5ldyBPbChCKX1mdW5jdGlvbiBha2UoZSx0LG4scil7dmFyIGEsbyxmO3QmJihvPXplKEdlKFEodCwoUWkoKSxDMikpKSkrcixmPW4remUoR2UoUSh0LEZXKSkpLzIscnQodCxQQixwdChZcihaYyhiLk1hdGgucm91bmQobykpKSkpLHJ0KHQsQkIscHQoWXIoWmMoYi5NYXRoLnJvdW5kKGYpKSkpKSx0LmQuYj09MHx8YWtlKGUsbChQcSgoYT1ScihuZXcgSGcodCkuYS5kLDApLG5ldyBDNShhKSkpLDQwKSxuK3plKEdlKFEodCxGVykpKStlLmIscit6ZShHZShRKHQsSlQpKSkpLFEodCxqZGUpIT1udWxsJiZha2UoZSxsKFEodCxqZGUpLDQwKSxuLHIpKX1mdW5jdGlvbiByX24oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCO2Zvcih3PWVvKHQuYSksYT16ZShHZShRKHcsKE50KCksdnYpKSkpKjIsQz16ZShHZShRKHcsVjYpKSksRT1iLk1hdGgubWF4KGEsQyksbz1XZShOYSxabywyOCx0LmYtdC5jKzEsMTUsMSkscj0tRSxuPTAsZz10LmIuS2MoKTtnLk9iKCk7KWY9bChnLlBiKCksMTApLHIrPWUuYVtmLmMucF0rRSxvW24rK109cjtmb3Iocis9ZS5hW3QuYS5jLnBdK0Usb1tuKytdPXIsQj1uZXcgRyh0LmUpO0IuYTxCLmMuYy5sZW5ndGg7KUw9bChyZShCKSwxMCkscis9ZS5hW0wuYy5wXStFLG9bbisrXT1yO3JldHVybiBvfWZ1bmN0aW9uIGlfbihlLHQpe3ZhciBuLHIsYSxvO2lmKG89bChhdChlLChwaSgpLHM3KSksNjQpLmctbChhdCh0LHM3KSw2NCkuZyxvIT0wKXJldHVybiBvO2lmKG49bChhdChlLGpnZSksMTcpLHI9bChhdCh0LGpnZSksMTcpLG4mJnImJihhPW4uYS1yLmEsYSE9MCkpcmV0dXJuIGE7c3dpdGNoKGwoYXQoZSxzNyksNjQpLmcpe2Nhc2UgMTpyZXR1cm4gWWkoZS5pLHQuaSk7Y2FzZSAyOnJldHVybiBZaShlLmosdC5qKTtjYXNlIDM6cmV0dXJuIFlpKHQuaSxlLmkpO2Nhc2UgNDpyZXR1cm4gWWkodC5qLGUuaik7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgbmMoekVlKSl9fWZ1bmN0aW9uIG9rZShlKXt2YXIgdCxuLHI7cmV0dXJuIGUuRGImNjQ/UHVlKGUpOih0PW5ldyBUaChjU2UpLG49ZS5rLG4/aGkoaGkoKHQuYSs9JyAiJyx0KSxuKSwnIicpOighZS5uJiYoZS5uPW5ldyBudChlYyxlLDEsNykpLGUubi5pPjAmJihyPSghZS5uJiYoZS5uPW5ldyBudChlYyxlLDEsNykpLGwoT2UoZS5uLDApLDEzNSkpLmEsIXJ8fGhpKGhpKCh0LmErPScgIicsdCksciksJyInKSkpLGhpKHJ3KGhpKHJ3KGhpKHJ3KGhpKHJ3KCh0LmErPSIgKCIsdCksZS5pKSwiLCIpLGUuaiksIiB8ICIpLGUuZyksIiwiKSxlLmYpLCIpIiksdC5hKX1mdW5jdGlvbiBKYnQoZSl7dmFyIHQsbixyO3JldHVybiBlLkRiJjY0P1B1ZShlKToodD1uZXcgVGgodVNlKSxuPWUuayxuP2hpKGhpKCh0LmErPScgIicsdCksbiksJyInKTooIWUubiYmKGUubj1uZXcgbnQoZWMsZSwxLDcpKSxlLm4uaT4wJiYocj0oIWUubiYmKGUubj1uZXcgbnQoZWMsZSwxLDcpKSxsKE9lKGUubiwwKSwxMzUpKS5hLCFyfHxoaShoaSgodC5hKz0nICInLHQpLHIpLCciJykpKSxoaShydyhoaShydyhoaShydyhoaShydygodC5hKz0iICgiLHQpLGUuaSksIiwiKSxlLmopLCIgfCAiKSxlLmcpLCIsIiksZS5mKSwiKSIpLHQuYSl9ZnVuY3Rpb24gc19uKGUsdCl7dmFyIG4scixhLG8sZjtmb3IodD09KHlBKCksQ2RlKSYmSk4obCgkaShlLmEsKFJ5KCksYkIpKSwxNSkpLGE9bCgkaShlLmEsKFJ5KCksYkIpKSwxNSkuS2MoKTthLk9iKCk7KXN3aXRjaChyPWwoYS5QYigpLDEwNSksbj1sKGp0KHIuaiwwKSwxMTMpLmQuaixvPW5ldyBPbChyLmopLFZzKG8sbmV3IFJqKSx0Lmcpe2Nhc2UgMjpMdWUoZSxvLG4sKE93KCksUmIpLDEpO2JyZWFrO2Nhc2UgMTpjYXNlIDA6Zj1VVG4obyksTHVlKGUsbmV3IFpwKG8sMCxmKSxuLChPdygpLFJiKSwwKSxMdWUoZSxuZXcgWnAobyxmLG8uYy5sZW5ndGgpLG4sUmIsMSl9fWZ1bmN0aW9uIGlsZShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2lmKHQ9PW51bGx8fHQubGVuZ3RoPT0wKXJldHVybiBudWxsO2lmKGE9bCh4dShlLmEsdCksMTQzKSwhYSl7Zm9yKHI9KGc9bmV3IGdpKGUuYikuYS52YygpLktjKCksbmV3IGZzKGcpKTtyLmEuT2IoKTspaWYobj0obz1sKHIuYS5QYigpLDQ0KSxsKG8ubWQoKSwxNDMpKSxmPW4uYyx3PXQubGVuZ3RoLHZuKGYuc3Vic3RyKGYubGVuZ3RoLXcsdyksdCkmJih0Lmxlbmd0aD09Zi5sZW5ndGh8fGNvKGYsZi5sZW5ndGgtdC5sZW5ndGgtMSk9PTQ2KSl7aWYoYSlyZXR1cm4gbnVsbDthPW59YSYmcmMoZS5hLHQsYSl9cmV0dXJuIGF9ZnVuY3Rpb24gYV9uKGUsdCl7dmFyIG4scixhLG87cmV0dXJuIG49bmV3IGFzLHI9bCh5YyhmYyhuZXcgYm4obnVsbCxuZXcga24oZS5mLDE2KSksbiksU3kobmV3IHl0LG5ldyBqaSxuZXcgcW4sbmV3IFVuLGhlKGxlKG9jLDEpLGl0LDEwOCwwLFsoRmwoKSxpNCksRWNdKSkpLDIxKSxhPXIuZ2MoKSxyPWwoeWMoZmMobmV3IGJuKG51bGwsbmV3IGtuKHQuZiwxNikpLG4pLFN5KG5ldyB5dCxuZXcgamksbmV3IHFuLG5ldyBVbixoZShsZShvYywxKSxpdCwxMDgsMCxbaTQsRWNdKSkpLDIxKSxvPXIuZ2MoKSxhPG8/LTE6YT09bz8wOjF9ZnVuY3Rpb24gWmJ0KGUpe3ZhciB0LG4scjtucyhlLChOdCgpLGQzKSkmJihyPWwoUShlLGQzKSwyMSksIXIuZGMoKSYmKG49KHQ9bChLMChLbyksOSksbmV3IFpoKHQsbChjMCh0LHQubGVuZ3RoKSw5KSwwKSksci5IYygocXkoKSxqaCkpP2QwKG4samgpOmQwKG4sQzApLHIuSGMoemYpfHxkMChuLHpmKSxyLkhjKEUwKT9kMChuLFMwKTpyLkhjKG1wKT9kMChuLEVnKTpyLkhjKFQwKSYmZDAobixxZiksci5IYyhTMCk/ZDAobixFMCk6ci5IYyhFZyk/ZDAobixtcCk6ci5IYyhxZikmJmQwKG4sVDApLHJ0KGUsZDMsbikpKX1mdW5jdGlvbiBvX24oZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKGE9bChRKGUsKGZ0KCksdTMpKSwxMCkscj1lLmosbj0oU24oMCxyLmMubGVuZ3RoKSxsKHIuY1swXSwxMikpLGY9bmV3IEcoYS5qKTtmLmE8Zi5jLmMubGVuZ3RoOylpZihvPWwocmUoZiksMTIpLHFlKG8pPT09cWUoUShuLHppKSkpe28uaj09KEN0KCksUW4pJiZlLnA+YS5wPyhsYShvLERyKSxvLmQmJihnPW8uby5iLHQ9by5hLmIsby5hLmI9Zy10KSk6by5qPT1EciYmYS5wPmUucCYmKGxhKG8sUW4pLG8uZCYmKGc9by5vLmIsdD1vLmEuYixvLmEuYj0tKGctdCkpKTticmVha31yZXR1cm4gYX1mdW5jdGlvbiB1UChlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEUsQyxMO2lmKCEoRGUodCwyMDcpfHxEZSh0LDM2Nil8fERlKHQsMTkzKSkpdGhyb3cgdWUobmV3IFluKCJNZXRob2Qgb25seSB3b3JrcyBmb3IgRWxrTm9kZS0sIEVsa0xhYmVsIGFuZCBFbGtQb3J0LW9iamVjdHMuIikpO3JldHVybiBmPWUuYS8yLHc9dC5pK3ItZixDPXQuaithLWYsRT13K3QuZytlLmEsTD1DK3QuZitlLmEsbz1uZXcgYmwsdWkobyxuZXcgbHQodyxDKSksdWkobyxuZXcgbHQodyxMKSksdWkobyxuZXcgbHQoRSxMKSksdWkobyxuZXcgbHQoRSxDKSksZz1uZXcgR3VlKG8pLHBjKGcsdCksbiYma2koZS5iLHQsZyksZ31mdW5jdGlvbiBLRShlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKG89bmV3IGx0KHQsbiksQz1uZXcgRyhlLmEpO0MuYTxDLmMuYy5sZW5ndGg7KWZvcihFPWwocmUoQyksMTApLE9pKEUubixvKSxCPW5ldyBHKEUuaik7Qi5hPEIuYy5jLmxlbmd0aDspZm9yKEw9bChyZShCKSwxMiksYT1uZXcgRyhMLmcpO2EuYTxhLmMuYy5sZW5ndGg7KWZvcihyPWwocmUoYSksMTgpLER5KHIuYSxvKSxmPWwoUShyLChOdCgpLGNjKSksNzUpLGYmJkR5KGYsbyksdz1uZXcgRyhyLmIpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSw3MiksT2koZy5uLG8pfWZ1bmN0aW9uIGNfbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKG89bmV3IGx0KHQsbiksQz1uZXcgRyhlLmEpO0MuYTxDLmMuYy5sZW5ndGg7KWZvcihFPWwocmUoQyksMTApLE9pKEUubixvKSxCPW5ldyBHKEUuaik7Qi5hPEIuYy5jLmxlbmd0aDspZm9yKEw9bChyZShCKSwxMiksYT1uZXcgRyhMLmcpO2EuYTxhLmMuYy5sZW5ndGg7KWZvcihyPWwocmUoYSksMTgpLER5KHIuYSxvKSxmPWwoUShyLChOdCgpLGNjKSksNzUpLGYmJkR5KGYsbyksdz1uZXcgRyhyLmIpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSw3MiksT2koZy5uLG8pfWZ1bmN0aW9uIGVtdChlKXtpZigoIWUuYiYmKGUuYj1uZXcgTG4oX3IsZSw0LDcpKSxlLmIpLmk9PTApdGhyb3cgdWUobmV3IEk4KCJFZGdlcyBtdXN0IGhhdmUgYSBzb3VyY2UuIikpO2lmKCghZS5jJiYoZS5jPW5ldyBMbihfcixlLDUsOCkpLGUuYykuaT09MCl0aHJvdyB1ZShuZXcgSTgoIkVkZ2VzIG11c3QgaGF2ZSBhIHRhcmdldC4iKSk7aWYoIWUuYiYmKGUuYj1uZXcgTG4oX3IsZSw0LDcpKSwhKGUuYi5pPD0xJiYoIWUuYyYmKGUuYz1uZXcgTG4oX3IsZSw1LDgpKSxlLmMuaTw9MSkpKXRocm93IHVlKG5ldyBJOCgiSHlwZXJlZGdlcyBhcmUgbm90IHN1cHBvcnRlZC4iKSl9ZnVuY3Rpb24gY2tlKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEw7Zm9yKEw9MCxvPW5ldyB6NSxnYihvLHQpO28uYiE9by5jOylmb3Iodz1sKFg4KG8pLDIxOSksRT0wLEM9bChRKHQuaiwoTnQoKSx5ZykpLDI4NCksZj16ZShHZShRKHQuaixoVykpKSxnPXplKEdlKFEodC5qLFRNZSkpKSxDIT0oRWQoKSxFMikmJihFKz1mKmhUbih3LmUsQyksRSs9ZypKU24ody5lKSksTCs9V2R0KHcuZCx3LmUpK0UsYT1uZXcgRyh3LmIpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwzNiksbj1sKGp0KGUuYixyLnApLDIxOSksbi5zfHwoTCs9eFUoZSxuKSk7cmV0dXJuIEx9ZnVuY3Rpb24gQ2QoKXtDZD1VO3ZhciBlO2Zvcih1Sz1uZXcgUWcoMSwxKSxNMGU9bmV3IFFnKDEsMTApLEJMPW5ldyBRZygwLDApLHc2dD1uZXcgUWcoLTEsMSkseTZ0PWhlKGxlKEE2LDEpLGR0LDkyLDAsW0JMLHVLLG5ldyBRZygxLDIpLG5ldyBRZygxLDMpLG5ldyBRZygxLDQpLG5ldyBRZygxLDUpLG5ldyBRZygxLDYpLG5ldyBRZygxLDcpLG5ldyBRZygxLDgpLG5ldyBRZygxLDkpLE0wZV0pLGxLPVdlKEE2LGR0LDkyLDMyLDAsMSksZT0wO2U8bEsubGVuZ3RoO2UrKylsS1tlXT1BcShsMCgxLGUpLDApP2tiKGwwKDEsZSkpOkpfKGtiKHIyKGwwKDEsZSkpKSl9ZnVuY3Rpb24gdG10KGUsdCxuLHIsYSxvLGYpe2lmKGUuYz1yLkxmKCkuYSxlLmQ9ci5MZigpLmIsYSYmKGUuYys9YS5MZigpLmEsZS5kKz1hLkxmKCkuYiksZS5iPXQuTWYoKS5hLGUuYT10Lk1mKCkuYiwhYSluP2UuYy09Zit0Lk1mKCkuYTplLmMrPXIuTWYoKS5hK2Y7ZWxzZSBzd2l0Y2goYS5hZygpLmcpe2Nhc2UgMDpjYXNlIDI6ZS5jKz1hLk1mKCkuYStmK28uYStmO2JyZWFrO2Nhc2UgNDplLmMtPWYrby5hK2YrdC5NZigpLmE7YnJlYWs7Y2FzZSAxOmUuYys9YS5NZigpLmErZixlLmQtPWYrby5iK2YrdC5NZigpLmI7YnJlYWs7Y2FzZSAzOmUuYys9YS5NZigpLmErZixlLmQrPWEuTWYoKS5iK2Yrby5iK2Z9fWZ1bmN0aW9uIG5tdChlLHQpe3ZhciBuLHI7Zm9yKHRoaXMuYj1uZXcgYnQsdGhpcy5lPW5ldyBidCx0aGlzLmE9ZSx0aGlzLmQ9dCxDNm4odGhpcyksRDVuKHRoaXMpLHRoaXMuYi5kYygpP3RoaXMuYz1lLmMucDp0aGlzLmM9bCh0aGlzLmIuWGIoMCksMTApLmMucCx0aGlzLmUuYy5sZW5ndGg9PTA/dGhpcy5mPWUuYy5wOnRoaXMuZj1sKGp0KHRoaXMuZSx0aGlzLmUuYy5sZW5ndGgtMSksMTApLmMucCxyPWwoUShlLChmdCgpLFdMKSksMTUpLktjKCk7ci5PYigpOylpZihuPWwoci5QYigpLDcyKSxucyhuLChOdCgpLGdXKSkpe3RoaXMuZD1sKFEobixnVyksMjMyKTticmVha319ZnVuY3Rpb24gV0UoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEM7Zm9yKHI9bChjcihlLmEsdCksNDkpLG89bChjcihlLmEsbiksNDkpLGE9bChjcihlLmUsdCksNDkpLGY9bChjcihlLmUsbiksNDkpLHIuYS56YyhuLHIpLGYuYS56Yyh0LGYpLEM9by5hLmVjKCkuS2MoKTtDLk9iKCk7KUU9bChDLlBiKCksMTApLHIuYS56YyhFLHIpLG5hKGwoY3IoZS5lLEUpLDQ5KSx0KSxLYShsKGNyKGUuZSxFKSw0OSksYSk7Zm9yKHc9YS5hLmVjKCkuS2MoKTt3Lk9iKCk7KWc9bCh3LlBiKCksMTApLGYuYS56YyhnLGYpLG5hKGwoY3IoZS5hLGcpLDQ5KSxuKSxLYShsKGNyKGUuYSxnKSw0OSksbyl9ZnVuY3Rpb24gbFAoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEM7Zm9yKHI9bChjcihlLmEsdCksNDkpLG89bChjcihlLmEsbiksNDkpLGE9bChjcihlLmIsdCksNDkpLGY9bChjcihlLmIsbiksNDkpLHIuYS56YyhuLHIpLGYuYS56Yyh0LGYpLEM9by5hLmVjKCkuS2MoKTtDLk9iKCk7KUU9bChDLlBiKCksMTApLHIuYS56YyhFLHIpLG5hKGwoY3IoZS5iLEUpLDQ5KSx0KSxLYShsKGNyKGUuYixFKSw0OSksYSk7Zm9yKHc9YS5hLmVjKCkuS2MoKTt3Lk9iKCk7KWc9bCh3LlBiKCksMTApLGYuYS56YyhnLGYpLG5hKGwoY3IoZS5hLGcpLDQ5KSxuKSxLYShsKGNyKGUuYSxnKSw0OSksbyl9ZnVuY3Rpb24gZGYoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEM7Zm9yKHI9bChjcihlLmEsdCksNDkpLG89bChjcihlLmEsbiksNDkpLGE9bChjcihlLmQsdCksNDkpLGY9bChjcihlLmQsbiksNDkpLHIuYS56YyhuLHIpLGYuYS56Yyh0LGYpLEM9by5hLmVjKCkuS2MoKTtDLk9iKCk7KUU9bChDLlBiKCksMTIpLHIuYS56YyhFLHIpLG5hKGwoY3IoZS5kLEUpLDQ5KSx0KSxLYShsKGNyKGUuZCxFKSw0OSksYSk7Zm9yKHc9YS5hLmVjKCkuS2MoKTt3Lk9iKCk7KWc9bCh3LlBiKCksMTIpLGYuYS56YyhnLGYpLG5hKGwoY3IoZS5hLGcpLDQ5KSxuKSxLYShsKGNyKGUuYSxnKSw0OSksbyl9ZnVuY3Rpb24gdV9uKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDLEwsQix6LFY7aWYobz1uLG48cilmb3IoQj0oej1uZXcgeE4oZS5wKSxWPW5ldyB4TihlLnApLEthKHouZSxlLmUpLHoucT1lLnEsei5yPVYsd0goeiksS2EoVi5qLGUuaiksVi5yPXosd0goViksbmV3IGNhKHosVikpLEw9bChCLmEsMTE4KSxDPWwoQi5iLDExOCksYT0oU24obyx0LmMubGVuZ3RoKSxsKHQuY1tvXSwzMzkpKSxmPURidChlLEwsQyxhKSxFPW4rMTtFPD1yO0UrKylnPShTbihFLHQuYy5sZW5ndGgpLGwodC5jW0VdLDMzOSkpLHc9RGJ0KGUsTCxDLGcpLFQ2bihnLHcsYSxmKSYmKGE9ZyxmPXcsbz1FKTtyZXR1cm4gb31mdW5jdGlvbiBsX24oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCLHosVjtmb3IoZj1sKE9lKHQsMCksMjcpLFV1KGYsMCksR3UoZiwwKSxCPW5ldyBidCwkbihCLmMsZiksZz1mLG89bmV3IHo0ZShlLmEsZi5nLGYuZiwoVkEoKSx6QikpLHo9MTt6PHQuaTt6KyspVj1sKE9lKHQseiksMjcpLHc9cGxlKGUsUTYsVixnLG8sQixuKSxFPXBsZShlLGU5LFYsZyxvLEIsbiksQz1wbGUoZSx4TSxWLGcsbyxCLG4pLEw9cGxlKGUseU0sVixnLG8sQixuKSxhPWpMbihlLHcsRSxDLEwsVixnLHIpLFV1KFYsYS5kKSxHdShWLGEuZSksUmUoYSx6Qiksbz1hLGc9ViwkbihCLmMsVik7cmV0dXJuIG99ZnVuY3Rpb24gaF9uKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQjtpZihDPW51bGwsQj10LEw9VWN0KGUsUGN0KG4pLEIpLGZFKEwsWWcoQixQZCkpLGY9QXcoQixoU2UpLHI9bmV3IG10dChlLEwpLE5rbihyLmEsci5iLGYpLGc9QXcoQixZZmUpLGE9bmV3IHZ0dChlLEwpLFBrbihhLmEsYS5iLGcpLCghTC5iJiYoTC5iPW5ldyBMbihfcixMLDQsNykpLEwuYikuaT09MHx8KCFMLmMmJihMLmM9bmV3IExuKF9yLEwsNSw4KSksTC5jKS5pPT0wKXRocm93IG89WWcoQixQZCksdz13NHQrbyxFPXcra1QsdWUobmV3IGRkKEUpKTtyZXR1cm4gbVUoQixMKSxwSW4oZSxCLEwpLEM9d2NlKGUsQixMKSxDfWZ1bmN0aW9uIGZfbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2ZvcihhPVdlKFZyLGRpLDI4LGUuZS5hLmMubGVuZ3RoLDE1LDEpLGY9bmV3IEcoZS5lLmEpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxMjUpLGFbby5kXSs9by5iLmEuYy5sZW5ndGg7Zm9yKGc9UE8odCk7Zy5iIT0wOylmb3Iobz1sKGcuYj09MD9udWxsOihtcihnLmIhPTApLGFmKGcsZy5hLmEpKSwxMjUpLHI9Y3gobmV3IEcoby5nLmEpKTtyLk9iKCk7KW49bChyLlBiKCksMjE4KSx3PW4uZSx3LmU9Yi5NYXRoLm1heCh3LmUsby5lK24uYSksLS1hW3cuZF0sYVt3LmRdPT0wJiZDcyhnLHcsZy5jLmIsZy5jKX1mdW5jdGlvbiBybXQoZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTDtmb3Iobj1sbyxhPUlpLGc9bmV3IEcoZS5lLmEpO2cuYTxnLmMuYy5sZW5ndGg7KW89bChyZShnKSwxMjUpLGE9Yi5NYXRoLm1pbihhLG8uZSksbj1iLk1hdGgubWF4KG4sby5lKTtmb3IodD1XZShWcixkaSwyOCxuLWErMSwxNSwxKSxmPW5ldyBHKGUuZS5hKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMTI1KSxvLmUtPWEsKyt0W28uZV07aWYocj0wLGUuayE9bnVsbClmb3IoRT1lLmssQz0wLEw9RS5sZW5ndGg7QzxMJiYodz1FW0NdLHRbcisrXSs9dyx0Lmxlbmd0aCE9cik7KytDKTtyZXR1cm4gdH1mdW5jdGlvbiBkX24oZSx0KXt2YXIgbixyLGEsbyxmLGc7aWYodC5VZygiRWRnZSByb3V0aW5nIiwxKSxhPWwoUShlLChIYygpLCRkZSkpLDM5MiksYT09KHhBKCksSWRlKSlJdm4oZSk7ZWxzZSBpZihhPT1PQilmb3IobChmaChrRShGaShuZXcgYm4obnVsbCxuZXcga24oZS5iLDE2KSksbmV3IE90ZSkpKSw0MCksbz16ZShHZShRKGUsbUllKSkpLGY9emUoR2UoUShlLGZJZSkpKSxnPWwoUShlLHkzKSw4OCksdkluKGUsZyxvKSxZSW4oZSxnLG8sZiksWkluKGUsZyxvLGYpLHI9UnIoZS5hLDApO3IuYiE9ci5kLmM7KW49bChCcihyKSw2NSksbi5hLmI8MiYmYjllKG4pO3QuVmcoKX1mdW5jdGlvbiBpbXQoZSl7c3dpdGNoKGUuZCl7Y2FzZSA5OmNhc2UgODpyZXR1cm4hMDtjYXNlIDM6Y2FzZSA1OmNhc2UgNDpjYXNlIDY6cmV0dXJuITE7Y2FzZSA3OnJldHVybiBsKFg5ZShlKSwxNykuYT09ZS5vO2Nhc2UgMTpjYXNlIDI6e2lmKGUubz09LTIpcmV0dXJuITE7c3dpdGNoKGUucCl7Y2FzZSAwOmNhc2UgMTpjYXNlIDI6Y2FzZSA2OmNhc2UgNTpjYXNlIDc6cmV0dXJuIGN3KGUuayxlLmYpO2Nhc2UgMzpjYXNlIDQ6cmV0dXJuIGUuaj09ZS5lO2RlZmF1bHQ6cmV0dXJuIGUubj09bnVsbD9lLmc9PW51bGw6UGkoZS5uLGUuZyl9fWRlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIGdfbihlLHQpe3ZhciBuLHIsYTtzd2l0Y2godC5VZygiQnJlYWtpbmcgUG9pbnQgSW5zZXJ0aW9uIiwxKSxyPW5ldyBNOWUoZSksbChRKGUsKE50KCksaGRlKSksMzUxKS5nKXtjYXNlIDI6YT1uZXcgV2o7YnJlYWs7Y2FzZSAwOmE9bmV3IEVTO2JyZWFrO2RlZmF1bHQ6YT1uZXcgWWp9aWYobj1hLm9nKGUsciksUnQoQnQoUShlLGNEZSkpKSYmKG49ck1uKGUsbikpLCFhLnBnKCkmJm5zKGUsRVcpKXN3aXRjaChsKFEoZSxFVyksMzUyKS5nKXtjYXNlIDI6bj1GcHQocixuKTticmVhaztjYXNlIDE6bj1BZ3QocixuKX1pZihuLmRjKCkpe3QuVmcoKTtyZXR1cm59RUluKGUsbiksdC5WZygpfWZ1bmN0aW9uIHNtdChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMO2ZvcihvPW5ldyBCdSh0LmMubGVuZ3RoKSxFPW5ldyBHKHQpO0UuYTxFLmMuYy5sZW5ndGg7KWY9bChyZShFKSwxMCksdnQobyxlLmJbZi5jLnBdW2YucF0pO2ZvcihKTG4oZSxvLG4pLEw9bnVsbDtMPUhNbihvKTspSUFuKGUsbChMLmEsMjM5KSxsKEwuYiwyMzkpLG8pO2Zvcih0LmMubGVuZ3RoPTAsYT1uZXcgRyhvKTthLmE8YS5jLmMubGVuZ3RoOylmb3Iocj1sKHJlKGEpLDIzOSksZz1yLmQsdz0wLEM9Zy5sZW5ndGg7dzxDOysrdylmPWdbd10sJG4odC5jLGYpLGUuYVtmLmMucF1bZi5wXS5hPUwxKHIuZyxyLmRbMF0pLmF9ZnVuY3Rpb24gYW10KGUpe3N3KGUsbmV3IFhtKG53KFp2KHR3KGV3KG5ldyB4MSx5TCksIkVMSyBGaXhlZCIpLCJLZWVwcyB0aGUgY3VycmVudCBsYXlvdXQgYXMgaXQgaXMsIHdpdGhvdXQgYW55IGF1dG9tYXRpYyBtb2RpZmljYXRpb24uIE9wdGlvbmFsIGNvb3JkaW5hdGVzIGNhbiBiZSBnaXZlbiBmb3Igbm9kZXMgYW5kIGVkZ2UgYmVuZCBwb2ludHMuIiksbmV3IHYkKSkpLGd0KGUseUwsWHcsV05lKSxndChlLHlMLF9HLEl0KE1NKSksZ3QoZSx5TCx0U2UsSXQoVk5lKSksZ3QoZSx5TCx4NixJdChVTmUpKSxndChlLHlMLFB4LEl0KEtOZSkpLGd0KGUseUwsaFQsSXQoR05lKSl9ZnVuY3Rpb24gUlUoZSx0LG4pe3ZhciByLGEsbyxmLGc7aWYocj1ZcihtbyhmZyxpZyhZcihtbyh0PT1udWxsPzA6ZXModCksZGcpKSwxNSkpKSxnPVlyKG1vKGZnLGlnKFlyKG1vKG49PW51bGw/MDplcyhuKSxkZykpLDE1KSkpLG89Z0EoZSx0LHIpLG8mJmc9PW8uZiYmeWQobixvLmkpKXJldHVybiBuO2lmKGY9cEEoZSxuLGcpLGYpdGhyb3cgdWUobmV3IFluKCJ2YWx1ZSBhbHJlYWR5IHByZXNlbnQ6ICIrbikpO3JldHVybiBhPW5ldyB4SCh0LHIsbixnKSxvPyh1NihlLG8pLGVQKGUsYSxvKSxvLmU9bnVsbCxvLmM9bnVsbCxvLmkpOihlUChlLGEsbnVsbCksZmd0KGUpLG51bGwpfWZ1bmN0aW9uIHBfbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWO0M9bi5hLmMsZj1uLmEuYytuLmEuYixvPWwoY3Iobi5jLHQpLDQ2OCksej1vLmYsVj1vLmEsby5iP3c9bmV3IGx0KGYseik6dz1uZXcgbHQoQyx6KSxvLmM/TD1uZXcgbHQoQyxWKTpMPW5ldyBsdChmLFYpLGE9QyxuLnB8fChhKz1lLmMpLGErPW4uRituLnYqZS5iLEU9bmV3IGx0KGEseiksQj1uZXcgbHQoYSxWKSxmQSh0LmEsaGUobGUoRWEsMSksZHQsOCwwLFt3LEVdKSksZz1uLmQuYS5nYygpPjEsZyYmKHI9bmV3IGx0KGEsbi5iKSx1aSh0LmEscikpLGZBKHQuYSxoZShsZShFYSwxKSxkdCw4LDAsW0IsTF0pKX1mdW5jdGlvbiBOZigpe05mPVUsQVc9bmV3IGx5KElkLDApLEFCPW5ldyBseSgiTklLT0xPViIsMSksTEI9bmV3IGx5KCJOSUtPTE9WX1BJWEVMIiwyKSx4RGU9bmV3IGx5KCJOSUtPTE9WX0lNUFJPVkVEIiwzKSxrRGU9bmV3IGx5KCJOSUtPTE9WX0lNUFJPVkVEX1BJWEVMIiw0KSx5RGU9bmV3IGx5KCJEVU1NWU5PREVfUEVSQ0VOVEFHRSIsNSksRURlPW5ldyBseSgiTk9ERUNPVU5UX1BFUkNFTlRBR0UiLDYpLExXPW5ldyBseSgiTk9fQk9VTkRBUlkiLDcpLHYzPW5ldyBseSgiTU9ERUxfT1JERVJfTEVGVF9UT19SSUdIVCIsOCkseDQ9bmV3IGx5KCJNT0RFTF9PUkRFUl9SSUdIVF9UT19MRUZUIiw5KX1mdW5jdGlvbiBiX24oZSl7dmFyIHQsbixyLGEsbztmb3Iocj1lLmxlbmd0aCx0PW5ldyBoXyxvPTA7bzxyOylpZihuPWNvKGUsbysrKSwhKG49PTl8fG49PTEwfHxuPT0xMnx8bj09MTN8fG49PTMyKSl7aWYobj09MzUpe2Zvcig7bzxyJiYobj1jbyhlLG8rKyksIShuPT0xM3x8bj09MTApKTspO2NvbnRpbnVlfW49PTkyJiZvPHI/KGE9KFhuKG8sZS5sZW5ndGgpLGUuY2hhckNvZGVBdChvKSkpPT0zNXx8YT09OXx8YT09MTB8fGE9PTEyfHxhPT0xM3x8YT09MzI/KFVrKHQsYSZacyksKytvKToodC5hKz0iXFwiLFVrKHQsYSZacyksKytvKTpVayh0LG4mWnMpfXJldHVybiB0LmF9ZnVuY3Rpb24gdWtlKCl7dWtlPVUsR1R0PW5ldyBwbihUQ2UsKEhuKCksITEpKSxYVHQ9bmV3IHBuKENDZSxwdCgwKSksUVR0PW5ldyBwbihTQ2UsMCksSlR0PW5ldyBwbihORywhMSksTEllPShMTigpLHpXKSxXVHQ9bmV3IHBuKFRmZSxMSWUpLHB0KDApLEtUdD1uZXcgcG4oQ2ZlLHB0KDEpKSxESWU9KEFWKCksbmdlKSxuQ3Q9bmV3IHBuKF9DZSxESWUpLElJZT0oZVYoKSxRZGUpLHJDdD1uZXcgcG4oQUNlLElJZSksTUllPSh1VSgpLHRnZSksWVR0PW5ldyBwbihMQ2UsTUllKSx0Q3Q9bmV3IHBuKFNmZSwwKSxaVHQ9bmV3IHBuKF9mZSwhMSksZUN0PW5ldyBwbihNQ2UsITEpfWZ1bmN0aW9uIG1fbihlLHQpe3ZhciBuLHIsYTtmb3Iocj1uZXcgRyh0KTtyLmE8ci5jLmMubGVuZ3RoOylpZihuPWwocmUociksMjcpLHhuKGUuYSxuLG4pLHhuKGUuYixuLG4pLGE9SHkobiksYS5jLmxlbmd0aCE9MClmb3IoZS5kJiZlLmQuR2coYSkseG4oZS5hLG4sKFNuKDAsYS5jLmxlbmd0aCksbChhLmNbMF0sMjcpKSkseG4oZS5iLG4sbChqdChhLGEuYy5sZW5ndGgtMSksMjcpKTtiY2UoYSkuYy5sZW5ndGghPTA7KWE9YmNlKGEpLGUuZCYmZS5kLkdnKGEpLHhuKGUuYSxuLChTbigwLGEuYy5sZW5ndGgpLGwoYS5jWzBdLDI3KSkpLHhuKGUuYixuLGwoanQoYSxhLmMubGVuZ3RoLTEpLDI3KSl9ZnVuY3Rpb24gc2xlKGUsdCxuKXt2YXIgcixhLG8sZixnLHc7aWYodClpZihuPD0tMSl7aWYocj1Nbih0LkRoKCksLTEtbiksRGUociwxMDIpKXJldHVybiBsKHIsMTkpO2ZvcihmPWwodC5NaChyKSwxNjApLGc9MCx3PWYuZ2MoKTtnPHc7KytnKWlmKHFlKGYuVWwoZykpPT09cWUoZSkmJihhPWYuVGwoZyksRGUoYSwxMDIpJiYobz1sKGEsMTkpLG8uQmImZXUpKSlyZXR1cm4gbzt0aHJvdyB1ZShuZXcgbmMoIlRoZSBjb250YWlubWVudCBmZWF0dXJlIGNvdWxkIG5vdCBiZSBsb2NhdGVkIikpfWVsc2UgcmV0dXJuIFJvKGwoTW4oZS5EaCgpLG4pLDE5KSk7ZWxzZSByZXR1cm4gbnVsbH1mdW5jdGlvbiB2X24oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEM7Zm9yKG49MCxnPW5ldyBHKGUuZCk7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDEwNSksZi5pJiYoZi5pLmM9bisrKTtmb3IodD1MbShpaCxbZHQscGddLFsxODMsMjhdLDE2LFtuLG5dLDIpLEM9ZS5kLGE9MDthPEMuYy5sZW5ndGg7YSsrKWlmKHc9KFNuKGEsQy5jLmxlbmd0aCksbChDLmNbYV0sMTA1KSksdy5pKWZvcihvPWErMTtvPEMuYy5sZW5ndGg7bysrKUU9KFNuKG8sQy5jLmxlbmd0aCksbChDLmNbb10sMTA1KSksRS5pJiYocj1WeG4odyxFKSx0W3cuaS5jXVtFLmkuY109cix0W0UuaS5jXVt3LmkuY109cik7cmV0dXJuIHR9ZnVuY3Rpb24gbGtlKCl7bGtlPVUsQ0N0PW5ldyBwbihPQ2UsKEhuKCksITEpKSxwdCgtMSksd0N0PW5ldyBwbihOQ2UscHQoLTEpKSxwdCgtMSkseUN0PW5ldyBwbihQQ2UscHQoLTEpKSx4Q3Q9bmV3IHBuKEJDZSwhMSksWkllPShHSCgpLGRnZSksTEN0PW5ldyBwbihGQ2UsWkllKSxNQ3Q9bmV3IHBuKFJDZSwtMSksSkllPShxVigpLHVnZSksQUN0PW5ldyBwbihqQ2UsSkllKSxfQ3Q9bmV3IHBuKCRDZSwhMCksUUllPSh0VigpLGdnZSksVEN0PW5ldyBwbih6Q2UsUUllKSxFQ3Q9bmV3IHBuKHFDZSwhMSkscHQoMSksa0N0PW5ldyBwbihIQ2UscHQoMSkpLFNDdD1uZXcgVWkoVkNlKX1mdW5jdGlvbiBXQSgpe1dBPVUsRGRlPW5ldyBvdygiUk9PVF9QUk9DIiwwKSxHRGU9bmV3IG93KCJGQU5fUFJPQyIsMSksWERlPW5ldyBvdygiTEVWRUxfUFJPQyIsMiksUURlPW5ldyBvdygiTkVJR0hCT1JTX1BST0MiLDMpLFlEZT1uZXcgb3coIkxFVkVMX0hFSUdIVCIsNCksVURlPW5ldyBvdygiRElSRUNUSU9OX1BST0MiLDUpLEpEZT1uZXcgb3coIk5PREVfUE9TSVRJT05fUFJPQyIsNiksSERlPW5ldyBvdygiQ09NUEFDVElPTl9QUk9DIiw3KSxXRGU9bmV3IG93KCJMRVZFTF9DT09SRFMiLDgpLEtEZT1uZXcgb3coIkdSQVBIX0JPVU5EU19QUk9DIiw5KSxWRGU9bmV3IG93KCJERVRSRUVJRllJTkdfUFJPQyIsMTApfWZ1bmN0aW9uIGhrZShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMO2ZvcihMPWRjKHQpLEU9bnVsbCxhPSExLGc9MCxDPWR1KEwuYSkuaTtnPEM7KytnKWY9bChtUChMLGcsKG89bChPZShkdShMLmEpLGcpLDg5KSx3PW8uYyxEZSh3LDkwKT9sKHcsMjkpOihUbigpLEtmKSkpLDI5KSxuPWhrZShlLGYpLG4uZGMoKXx8KEU/KGF8fChhPSEwLEU9bmV3IHVIKEUpKSxFLkdjKG4pKTpFPW4pO3JldHVybiByPUFrbihlLHQpLHIuZGMoKT9FfHwoQ24oKSxDbigpLF9vKTpFPyhhfHwoRT1uZXcgdUgoRSkpLEUuR2MociksRSk6cn1mdW5jdGlvbiBhbGUoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTDtmb3IoTD1kYyh0KSxFPW51bGwscj0hMSxnPTAsQz1kdShMLmEpLmk7ZzxDOysrZylvPWwobVAoTCxnLChhPWwoT2UoZHUoTC5hKSxnKSw4OSksdz1hLmMsRGUodyw5MCk/bCh3LDI5KTooVG4oKSxLZikpKSwyOSksbj1hbGUoZSxvKSxuLmRjKCl8fChFPyhyfHwocj0hMCxFPW5ldyB1SChFKSksRS5HYyhuKSk6RT1uKTtyZXR1cm4gZj1oRW4oZSx0KSxmLmRjKCk/RXx8KENuKCksQ24oKSxfbyk6RT8ocnx8KEU9bmV3IHVIKEUpKSxFLkdjKGYpLEUpOmZ9ZnVuY3Rpb24gd19uKGUpe3ZhciB0LG4scixhO3I9ZS5vLHB5KCksZS5BLmRjKCl8fFBpKGUuQSxxX2UpP2E9ci5hOihhPW5QKGUuZiksZS5BLkhjKChtaCgpLHJGKSkmJiFlLkIuSGMoKFpsKCksRk0pKSYmKGE9Yi5NYXRoLm1heChhLG5QKGwoUW8oZS5wLChDdCgpLFFuKSksMjUyKSkpLGE9Yi5NYXRoLm1heChhLG5QKGwoUW8oZS5wLERyKSwyNTIpKSkpLHQ9UmZ0KGUpLHQmJihhPWIuTWF0aC5tYXgoYSx0LmEpKSksUnQoQnQoZS5lLlRmKCkub2YoKHBpKCksQzQpKSkpP3IuYT1iLk1hdGgubWF4KHIuYSxhKTpyLmE9YSxuPWUuZi5pLG4uYz0wLG4uYj1hLGhsZShlLmYpfWZ1bmN0aW9uIGhQKGUsdCxuKXt2YXIgcixhLG8sZixnLHc7aWYoRGUodCw3NikpcmV0dXJuIFRvKGUsdCxuKTtmb3IoZz1udWxsLG89bnVsbCxyPWwoZS5nLDEyNCksZj0wO2Y8ZS5pOysrZilpZihhPXJbZl0sUGkodCxhLm1kKCkpJiYobz1hLkxrKCksRGUobywxMDIpJiZsKG8sMTkpLkJiJmV1KSl7Zz1hO2JyZWFrfXJldHVybiBnJiYoaGgoZS5lKSYmKHc9by5KaygpP2RiKGUsNCxvLHQsbnVsbCxYRShlLG8sdCxEZShvLDEwMikmJihsKG8sMTkpLkJiJklvKSE9MCksITApOmRiKGUsby50aygpPzI6MSxvLHQsby5paygpLC0xLCEwKSxuP24ubmoodyk6bj13KSxuPWhQKGUsZyxuKSksbn1mdW5jdGlvbiB5X24oZSx0LG4pe3ZhciByLGEsbyxmO2lmKGY9V3UoZS5lLkRoKCksdCkscj1sKGUuZywxMjQpLEZvKCksbCh0LDY5KS54aygpKXtmb3Iobz0wO288ZS5pOysrbylpZihhPXJbb10sZi5hbShhLkxrKCkpJiZQaShhLG4pKXJldHVybiBWeShlLG8pLCEwfWVsc2UgaWYobiE9bnVsbCl7Zm9yKG89MDtvPGUuaTsrK28paWYoYT1yW29dLGYuYW0oYS5MaygpKSYmUGkobixhLm1kKCkpKXJldHVybiBWeShlLG8pLCEwfWVsc2UgZm9yKG89MDtvPGUuaTsrK28paWYoYT1yW29dLGYuYW0oYS5MaygpKSYmYS5tZCgpPT1udWxsKXJldHVybiBWeShlLG8pLCEwO3JldHVybiExfWZ1bmN0aW9uIHhfbihlLHQpe3ZhciBuLHIsYSxvLGY7aWYodC5VZygiTm9kZSBhbmQgUG9ydCBMYWJlbCBQbGFjZW1lbnQgYW5kIE5vZGUgU2l6aW5nIiwxKSxkbnQoKGdfKCksbmV3IEphZShlLCEwLCEwLG5ldyBrWikpKSxsKFEoZSwoZnQoKSxMdSkpLDIxKS5IYygoSG8oKSx2ZikpKWZvcihvPWwoUShlLChOdCgpLHY0KSksMjEpLGE9by5IYygoUmwoKSxuRikpLGY9UnQoQnQoUShlLEpNZSkpKSxyPW5ldyBHKGUuYik7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDMwKSxJcyhGaShuZXcgYm4obnVsbCxuZXcga24obi5hLDE2KSksbmV3IEVaKSxuZXcgdml0KG8sYSxmKSk7dC5WZygpfWZ1bmN0aW9uIGtfbihlLHQpe3ZhciBuLHIsYSxvLGY7Zm9yKGUuYz09bnVsbHx8ZS5jLmxlbmd0aDx0LmMubGVuZ3RoP2UuYz1XZShpaCxwZywyOCx0LmMubGVuZ3RoLDE2LDEpOnVfKGUuYyksZS5hPW5ldyBidCxyPTAsZj1uZXcgRyh0KTtmLmE8Zi5jLmMubGVuZ3RoOylhPWwocmUoZiksMTApLGEucD1yKys7Zm9yKG49bmV3IG9zLG89bmV3IEcodCk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDEwKSxlLmNbYS5wXXx8KHpwdChlLGEpLG4uYj09MHx8KG1yKG4uYiE9MCksbChuLmEuYS5jLDE1KSkuZ2MoKTxlLmEuYy5sZW5ndGg/TzUobixlLmEpOmtvKG4sZS5hKSxlLmE9bmV3IGJ0KTtyZXR1cm4gbn1mdW5jdGlvbiBvbXQoZSl7c3coZSxuZXcgWG0obncoWnYodHcoZXcobmV3IHgxLG1UKSwiRUxLIFNQT3JFIE92ZXJsYXAgUmVtb3ZhbCIpLCdBIG5vZGUgb3ZlcmxhcCByZW1vdmFsIGFsZ29yaXRobSBwcm9wb3NlZCBieSBOYWNobWFuc29uIGV0IGFsLiBpbiAiTm9kZSBvdmVybGFwIHJlbW92YWwgYnkgZ3Jvd2luZyBhIHRyZWUiLicpLG5ldyB1aCkpKSxndChlLG1ULE1mZSxJdChqT2UpKSxndChlLG1ULFh3LFJPZSksZ3QoZSxtVCxKeSw4KSxndChlLG1ULE9mZSxJdChsU3QpKSxndChlLG1ULFhDZSxJdChCT2UpKSxndChlLG1ULFFDZSxJdChGT2UpKSxndChlLG1ULFZQLChIbigpLCExKSl9ZnVuY3Rpb24gRV9uKGUsdCl7dmFyIG4scixhLG8sZixnLHc7aWYobj10LnFpKGUuYSksbiYmKHc9ZWkobjEoKCFuLmImJihuLmI9bmV3IGRoKChUbigpLE5vKSxZYyxuKSksbi5iKSxPU2UpKSx3IT1udWxsKSl7Zm9yKHI9bmV3IGJ0LG89R3kodywiXFx3IiksZj0wLGc9by5sZW5ndGg7ZjxnOysrZilhPW9bZl0sdm4oYSwiIyNvdGhlciIpP3Z0KHIsIiEjIyIrS18oZSxBaCh0LnFrKCkpKSk6dm4oYSwiIyNsb2NhbCIpP3IuYy5wdXNoKG51bGwpOnZuKGEsSlApP3Z0KHIsS18oZSxBaCh0LnFrKCkpKSk6JG4oci5jLGEpO3JldHVybiByfXJldHVybiBDbigpLENuKCksX299ZnVuY3Rpb24gY210KGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDLEwsQix6O2ZvcihmPWR3KHQuYyxuLHIpLEw9bmV3IEcodC5hKTtMLmE8TC5jLmMubGVuZ3RoOyl7Zm9yKEM9bChyZShMKSwxMCksT2koQy5uLGYpLHo9bmV3IEcoQy5qKTt6LmE8ei5jLmMubGVuZ3RoOylmb3IoQj1sKHJlKHopLDEyKSxvPW5ldyBHKEIuZyk7by5hPG8uYy5jLmxlbmd0aDspZm9yKGE9bChyZShvKSwxOCksRHkoYS5hLGYpLGc9bChRKGEsKE50KCksY2MpKSw3NSksZyYmRHkoZyxmKSxFPW5ldyBHKGEuYik7RS5hPEUuYy5jLmxlbmd0aDspdz1sKHJlKEUpLDcyKSxPaSh3Lm4sZik7dnQoZS5hLEMpLEMuYT1lfX1mdW5jdGlvbiBmUChlKXt2YXIgdCxuLHIsYSxvLGYsZyx3O2lmKGUuZCl0aHJvdyB1ZShuZXcgbmMoKEdnKGExZSkscGhlK2ExZS5rK2JoZSkpKTtmb3IoZS5jPT0oSnMoKSxKMSkmJnA2KGUsdWMpLG49bmV3IEcoZS5hLmEpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwxOTQpLHQuZT0wO2ZvcihmPW5ldyBHKGUuYS5iKTtmLmE8Zi5jLmMubGVuZ3RoOylmb3Iobz1sKHJlKGYpLDg2KSxvLm89aWEsYT1vLmYuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksODYpLCsrci5kLmU7Zm9yKGtEbihlKSx3PW5ldyBHKGUuYS5iKTt3LmE8dy5jLmMubGVuZ3RoOylnPWwocmUodyksODYpLGcuaz0hMDtyZXR1cm4gZX1mdW5jdGlvbiBUX24oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFO2ZvcihnPW5ldyBicHQoZSksbj1uZXcgb3MsQ3Mobix0LG4uYy5iLG4uYyk7bi5iIT0wOyl7Zm9yKHI9bChuLmI9PTA/bnVsbDoobXIobi5iIT0wKSxhZihuLG4uYS5hKSksMTEzKSxyLmQucD0xLGY9bmV3IEcoci5lKTtmLmE8Zi5jLmMubGVuZ3RoOylhPWwocmUoZiksMzQwKSxCZ3QoZyxhKSxFPWEuZCxFLmQucD09MCYmQ3MobixFLG4uYy5iLG4uYyk7Zm9yKG89bmV3IEcoci5iKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMzQwKSxCZ3QoZyxhKSx3PWEuYyx3LmQucD09MCYmQ3Mobix3LG4uYy5iLG4uYyl9cmV0dXJuIGd9ZnVuY3Rpb24gdW10KGUpe3ZhciB0LG4scixhLG87aWYocj16ZShHZShhdChlLChwaSgpLEZTdCkpKSksciE9MSlmb3IoRjUoZSxyKmUuZyxyKmUuZiksbj1TbG4oc2RuKCghZS5jJiYoZS5jPW5ldyBudChIbCxlLDksOSkpLGUuYyksbmV3IFZuZSkpLG89cmcoTGgoaGUobGUoRmgsMSksUm4sMjAsMCxbKCFlLm4mJihlLm49bmV3IG50KGVjLGUsMSw3KSksZS5uKSwoIWUuYyYmKGUuYz1uZXcgbnQoSGwsZSw5LDkpKSxlLmMpLG5dKSkpO2pyKG8pOylhPWwoeHIobyksNDIyKSxhLnFoKHIqYS5uaCgpLHIqYS5vaCgpKSxhLnBoKHIqYS5taCgpLHIqYS5saCgpKSx0PWwoYS5vZihrTmUpLDgpLHQmJih0LmEqPXIsdC5iKj1yKX1mdW5jdGlvbiBma2UoZSx0LG4pe3ZhciByLGEsbyxmLGc7aWYoZj0oRm8oKSxsKHQsNjkpLnhrKCkpLHVwKGUuZSx0KSl7aWYodC5TaSgpJiYkVShlLHQsbixEZSh0LDEwMikmJihsKHQsMTkpLkJiJklvKSE9MCkpcmV0dXJuITF9ZWxzZSBmb3IoZz1XdShlLmUuRGgoKSx0KSxyPWwoZS5nLDEyNCksbz0wO288ZS5pOysrbylpZihhPXJbb10sZy5hbShhLkxrKCkpKXJldHVybihmP1BpKGEsbik6bj09bnVsbD9hLm1kKCk9PW51bGw6UGkobixhLm1kKCkpKT8hMToobChuNihlLG8sZj9sKG4sNzYpOnNnKHQsbikpLDc2KSwhMCk7cmV0dXJuIHFyKGUsZj9sKG4sNzYpOnNnKHQsbikpfWZ1bmN0aW9uIENfbihlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEUsQyxMLEI7Zm9yKGY9bmV3IEcoZS5iKTtmLmE8Zi5jLmMubGVuZ3RoOylmb3Iobz1sKHJlKGYpLDMwKSxCPUpPKG8uYSksRT1CLEM9MCxMPUUubGVuZ3RoO0M8TDsrK0Mpc3dpdGNoKHc9RVtDXSxsKFEodywoTnQoKSxRdSkpLDE3MSkuZyl7Y2FzZSAxOkdDbih3KSxWYSh3LHQpLEVkdCh3LCEwLHIpO2JyZWFrO2Nhc2UgMzpBQ24odyksVmEodyxuKSxFZHQodywhMSxhKX1mb3IoZz1uZXcgVWEoZS5iLDApO2cuYjxnLmQuZ2MoKTspKG1yKGcuYjxnLmQuZ2MoKSksbChnLmQuWGIoZy5jPWcuYisrKSwzMCkpLmEuYy5sZW5ndGg9PTAmJnBoKGcpfWZ1bmN0aW9uIFNfbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGU7Zm9yKHo9dC5sZW5ndGgsdz16LFhuKDAsdC5sZW5ndGgpLHQuY2hhckNvZGVBdCgwKT09NDU/KEw9LTEsQj0xLC0teik6KEw9MSxCPTApLG89KGJsZSgpLGs2dClbMTBdLGE9ei9vfDAsdGU9eiVvLHRlIT0wJiYrK2EsZz1XZShWcixkaSwyOCxhLDE1LDEpLG49eDZ0WzhdLGY9MCxWPUIrKHRlPT0wP286dGUpLEo9QjtKPHc7Sj1WLFY9SitvKXI9T2goKEdhKEosVix0Lmxlbmd0aCksdC5zdWJzdHIoSixWLUopKSxsbyxJaSksRT0oR0UoKSxZOGUoZyxnLGYsbikpLEUrPV81bihnLGYsciksZ1tmKytdPUU7Qz1mLGUuZT1MLGUuZD1DLGUuYT1nLGlBKGUpfWZ1bmN0aW9uIF9fbihlLHQpe3ZhciBuLHIsYSxvO3JldHVybiBuPW5ldyB2dSxyPWwoeWMoZmMobmV3IGJuKG51bGwsbmV3IGtuKGUuZiwxNikpLG4pLFN5KG5ldyB5dCxuZXcgamksbmV3IHFuLG5ldyBVbixoZShsZShvYywxKSxpdCwxMDgsMCxbKEZsKCksaTQpLEVjXSkpKSwyMSksYT1yLmdjKCkscj1sKHljKGZjKG5ldyBibihudWxsLG5ldyBrbih0LmYsMTYpKSxuKSxTeShuZXcgeXQsbmV3IGppLG5ldyBxbixuZXcgVW4saGUobGUob2MsMSksaXQsMTA4LDAsW2k0LEVjXSkpKSwyMSksbz1yLmdjKCksYT1hPT0xPzE6MCxvPW89PTE/MTowLGE8bz8tMTphPT1vPzA6MX1mdW5jdGlvbiBBX24oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCO2ZvcihnPWUuaSxhPVJ0KEJ0KFEoZywoTnQoKSxiNCkpKSksQz0wLHI9MCxFPW5ldyBHKGUuZyk7RS5hPEUuYy5jLmxlbmd0aDspdz1sKHJlKEUpLDE4KSxmPURvKHcpLG89ZiYmYSYmUnQoQnQoUSh3LGd2KSkpLEI9dy5kLmksZiYmbz8rK3I6ZiYmIW8/KytDOmVvKEIpLmU9PWc/KytyOisrQztmb3Iobj1uZXcgRyhlLmUpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwxOCksZj1Ebyh0KSxvPWYmJmEmJlJ0KEJ0KFEodCxndikpKSxMPXQuYy5pLGYmJm8/KytDOmYmJiFvPysrcjplbyhMKS5lPT1nPysrQzorK3I7cmV0dXJuIEMtcn1mdW5jdGlvbiBmNihlLHQsbixyKXt0aGlzLmU9ZSx0aGlzLms9bChRKGUsKGZ0KCksJDYpKSwzMTIpLHRoaXMuZz1XZSh3ZyxtMiwxMCx0LDAsMSksdGhpcy5iPVdlKHRhLGR0LDM0NSx0LDcsMSksdGhpcy5hPVdlKHdnLG0yLDEwLHQsMCwxKSx0aGlzLmQ9V2UodGEsZHQsMzQ1LHQsNywxKSx0aGlzLmo9V2Uod2csbTIsMTAsdCwwLDEpLHRoaXMuaT1XZSh0YSxkdCwzNDUsdCw3LDEpLHRoaXMucD1XZSh0YSxkdCwzNDUsdCw3LDEpLHRoaXMubj1XZShOcyxkdCw0ODUsdCw4LDEpLGFPKHRoaXMubiwoSG4oKSwhMSkpLHRoaXMuZj1XZShOcyxkdCw0ODUsdCw4LDEpLGFPKHRoaXMuZiwhMCksdGhpcy5vPW4sdGhpcy5jPXJ9ZnVuY3Rpb24gbG10KGUsdCl7dmFyIG4scixhLG8sZixnO2lmKCF0LmRjKCkpaWYobCh0LlhiKDApLDI5MykuZD09KHl4KCksaDQpKVE3bihlLHQpO2Vsc2UgZm9yKHI9dC5LYygpO3IuT2IoKTspe3N3aXRjaChuPWwoci5QYigpLDI5Myksbi5kLmcpe2Nhc2UgNTpxRShlLG4sbjVuKGUsbikpO2JyZWFrO2Nhc2UgMDpxRShlLG4sKGY9bi5mLW4uYysxLGc9KGYtMSkvMnwwLG4uYytnKSk7YnJlYWs7Y2FzZSA0OnFFKGUsbix1d24oZSxuKSk7YnJlYWs7Y2FzZSAyOkExdChuKSxxRShlLG4sKG89THhlKG4pLG8/bi5jOm4uZikpO2JyZWFrO2Nhc2UgMTpBMXQobikscUUoZSxuLChhPUx4ZShuKSxhP24uZjpuLmMpKX1LeG4obi5hKX19ZnVuY3Rpb24gZGtlKGUsdCxuLHIpe3ZhciBhLG8sZjtyZXR1cm4gZj1uZXcgSFplKHQsbiksZS5hP3I/KGE9bChMZihsKGNyKGUuYix0KSwyNjApKSwyNjApLCsrYS5hLGYuZD1yLmQsZi5lPXIuZSxmLmI9cixmLmM9cixyLmU/ci5lLmM9ZjphLmI9ZixyLmQ/ci5kLmI9ZjplLmE9ZixyLmQ9ZixyLmU9Zik6KGwoTGYoZS5lKSw1MTEpLmI9ZixmLmQ9ZS5lLGUuZT1mLGE9bChjcihlLmIsdCksMjYwKSxhPygrK2EuYSxvPWEuYyxvLmM9ZixmLmU9byxhLmM9Zik6KGtpKGUuYix0LGE9bmV3IEI1ZShmKSksKytlLmMpKTooZS5hPWUuZT1mLGtpKGUuYix0LG5ldyBCNWUoZikpLCsrZS5jKSwrK2UuZCxmfWZ1bmN0aW9uIG9sZShlLHQpe3ZhciBuLHIsYSxvLGY7aWYodC5VZygiTmV0d29yayBzaW1wbGV4IiwxKSxlLmUuYS5jLmxlbmd0aDwxKXt0LlZnKCk7cmV0dXJufWZvcihvPW5ldyBHKGUuZS5hKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMTI1KSxhLmU9MDtmb3IoZj1lLmUuYS5jLmxlbmd0aD49NDAsZiYmbUFuKGUpLFNMbihlKSxXQ24oZSksbj1tMXQoZSkscj0wO24mJnI8ZS5mOylPX24oZSxuLFFFbihlLG4pKSxuPW0xdChlKSwrK3I7ZiYmZHhuKGUpLGUuYT9jVG4oZSxybXQoZSkpOnJtdChlKSxlLmI9bnVsbCxlLmQ9bnVsbCxlLnA9bnVsbCxlLmM9bnVsbCxlLmc9bnVsbCxlLmk9bnVsbCxlLm49bnVsbCxlLm89bnVsbCx0LlZnKCl9ZnVuY3Rpb24gTF9uKGUsdCl7dmFyIG4scixhLG8sZixnLHc7aWYoIXQuZSl7Zm9yKHQuZT0hMCxyPXQuZC5hLmVjKCkuS2MoKTtyLk9iKCk7KXtpZihuPWwoci5QYigpLDE4KSx0Lm8mJnQuZC5hLmdjKCk8PTEpe2Y9dC5hLmMsZz10LmEuYyt0LmEuYix3PW5ldyBsdChmKyhnLWYpLzIsdC5iKSx1aShsKHQuZC5hLmVjKCkuS2MoKS5QYigpLDE4KS5hLHcpO2NvbnRpbnVlfWlmKGE9bChjcih0LmMsbiksNDY4KSxhLmJ8fGEuYyl7cF9uKGUsbix0KTtjb250aW51ZX1vPWUuZD09KFNFKCksYU0pJiYoYS5kfHxhLmUpJiZ4RW4oZSx0KSYmdC5kLmEuZ2MoKTw9MSxvP25EbihuLHQpOlRTbihlLG4sdCl9dC5rJiZ0byh0LmQsbmV3IGg1KX19ZnVuY3Rpb24gZ2tlKGUsdCxuLHIsYSxvKXt2YXIgZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZTtmb3IoQj1vLGc9KHIrYSkvMitCLHRlPW4qYi5NYXRoLmNvcyhnKSxmZT1uKmIuTWF0aC5zaW4oZyksVGU9dGUtdC5nLzIsTWU9ZmUtdC5mLzIsVXUodCxUZSksR3UodCxNZSksTD1lLmEuRWcodCksSj0yKmIuTWF0aC5hY29zKG4vbitlLmMpLEo8YS1yPyh6PUovTCxmPShyK2EtSikvMik6KHo9KGEtcikvTCxmPXIpLFY9SHkodCksZS5lJiYoZS5lLkZnKGUuZCksZS5lLkdnKFYpKSxFPW5ldyBHKFYpO0UuYTxFLmMuYy5sZW5ndGg7KXc9bChyZShFKSwyNyksQz1lLmEuRWcodyksZ2tlKGUsdyxuK2UuYyxmLGYreipDLG8pLGYrPXoqQ31mdW5jdGlvbiBNX24oZSx0LG4pe3ZhciByO3N3aXRjaChyPW4ucS5nZXRNb250aCgpLHQpe2Nhc2UgNTpoaShlLGhlKGxlKHp0LDEpLGR0LDIsNixbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdKVtyXSk7YnJlYWs7Y2FzZSA0OmhpKGUsaGUobGUoenQsMSksZHQsMiw2LFskbGUsemxlLHFsZSxIbGUsX3gsVmxlLFVsZSxHbGUsS2xlLFdsZSxZbGUsWGxlXSlbcl0pO2JyZWFrO2Nhc2UgMzpoaShlLGhlKGxlKHp0LDEpLGR0LDIsNixbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsX3gsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdKVtyXSk7YnJlYWs7ZGVmYXVsdDphZyhlLHIrMSx0KX19ZnVuY3Rpb24gRF9uKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDLEwsQjtmb3Iodz1uZXcgbHQobixyKSxtYSh3LGwoUSh0LChiYigpLCRMKSksOCkpLEI9bmV3IEcodC5lKTtCLmE8Qi5jLmMubGVuZ3RoOylMPWwocmUoQiksMTUzKSxPaShMLmQsdyksdnQoZS5lLEwpO2ZvcihnPW5ldyBHKHQuYyk7Zy5hPGcuYy5jLmxlbmd0aDspe2ZvcihmPWwocmUoZyksMjkwKSxvPW5ldyBHKGYuYSk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDI1MCksT2koYS5kLHcpO3Z0KGUuYyxmKX1mb3IoQz1uZXcgRyh0LmQpO0MuYTxDLmMuYy5sZW5ndGg7KUU9bChyZShDKSw0NTQpLE9pKEUuZCx3KSx2dChlLmQsRSl9ZnVuY3Rpb24gcGtlKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRTtmb3Iodz1uZXcgRyh0LmopO3cuYTx3LmMuYy5sZW5ndGg7KWZvcihnPWwocmUodyksMTIpLGE9bmV3IE4xKGcuYik7TGMoYS5hKXx8TGMoYS5iKTspcj1sKExjKGEuYSk/cmUoYS5hKTpyZShhLmIpLDE4KSxuPXIuYz09Zz9yLmQ6ci5jLG89bi5pLHQhPW8mJihFPWwoUShyLChOdCgpLFVUKSksMTcpLmEsRTwwJiYoRT0wKSxmPW8ucCxlLmJbZl09PTAmJihyLmQ9PW4/KGUuYVtmXS09RSsxLGUuYVtmXTw9MCYmZS5jW2ZdPjAmJnVpKGUuZixvKSk6KGUuY1tmXS09RSsxLGUuY1tmXTw9MCYmZS5hW2ZdPjAmJnVpKGUuZSxvKSkpKX1mdW5jdGlvbiBobXQoZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEM7Zm9yKHc9bmV3IGx0KG4sciksbWEodyxsKFEodCwoUWkoKSxRVCkpLDgpKSxDPVJyKHQuYiwwKTtDLmIhPUMuZC5jOylFPWwoQnIoQyksNDApLE9pKEUuZSx3KSx1aShlLmIsRSk7Zm9yKGc9bCh5YyhWNWUobmV3IGJuKG51bGwsbmV3IGtuKHQuYSwxNikpKSxQbChuZXcgenIsbmV3IGh0LG5ldyBGbixoZShsZShvYywxKSxpdCwxMDgsMCxbKEZsKCksRWMpXSkpKSwxNSkuS2MoKTtnLk9iKCk7KXtmb3IoZj1sKGcuUGIoKSw2NSksbz1ScihmLmEsMCk7by5iIT1vLmQuYzspYT1sKEJyKG8pLDgpLGEuYSs9dy5hLGEuYis9dy5iO3VpKGUuYSxmKX19ZnVuY3Rpb24gYmtlKGUsdCl7dmFyIG4scixhLG87aWYoMDwoRGUoZSwxNik/bChlLDE2KS5nYygpOlhnKGUuS2MoKSkpKXtpZihhPXQsMTxhKXtmb3IoLS1hLG89bmV3IER0ZSxyPWUuS2MoKTtyLk9iKCk7KW49bChyLlBiKCksNDApLG89TGgoaGUobGUoRmgsMSksUm4sMjAsMCxbbyxuZXcgSGcobildKSk7cmV0dXJuIGJrZShvLGEpfWlmKGE8MCl7Zm9yKG89bmV3IEl0ZSxyPWUuS2MoKTtyLk9iKCk7KW49bChyLlBiKCksNDApLG89TGgoaGUobGUoRmgsMSksUm4sMjAsMCxbbyxuZXcgSGcobildKSk7aWYoMDwoRGUobywxNik/bChvLDE2KS5nYygpOlhnKG8uS2MoKSkpKXJldHVybiBia2UobyxhKX19cmV0dXJuIGwoUHEoZS5LYygpKSw0MCl9ZnVuY3Rpb24gSV9uKGUsdCxuKXt2YXIgcixhLG8sZjtmb3Iobi5VZygiUHJvY2Vzc29yIG9yZGVyIG5vZGVzIiwyKSxlLmI9emUoR2UoUSh0LChIYygpLHpkZSkpKSksZS5hPWwoUSh0LHkzKSw4OCksZS5hPT0oSnMoKSxKMSkmJihlLmE9UTEscnQodCx5MyxlLmEpKSxhPW5ldyBvcyxmPVJyKHQuYiwwKTtmLmIhPWYuZC5jOylvPWwoQnIoZiksNDApLFJ0KEJ0KFEobywoUWkoKSxWYikpKSkmJkNzKGEsbyxhLmMuYixhLmMpO3I9KG1yKGEuYiE9MCksbChhLmEuYS5jLDQwKSksb3Z0KGUsciksbi5maCgxKSxha2UoZSxyLDAtemUoR2UoUShyLChRaSgpLEZXKSkpKS8yLDApLG4uZmgoMSksbi5WZygpfWZ1bmN0aW9uIFpsKCl7Wmw9VSxhQz1uZXcgSTUoIkRFRkFVTFRfTUlOSU1VTV9TSVpFIiwwKSxhRj1uZXcgSTUoIk1JTklNVU1fU0laRV9BQ0NPVU5UU19GT1JfUEFERElORyIsMSksdVk9bmV3IEk1KCJDT01QVVRFX1BBRERJTkciLDIpLEZNPW5ldyBJNSgiT1VUU0lERV9OT0RFX0xBQkVMU19PVkVSSEFORyIsMyksbFk9bmV3IEk1KCJQT1JUU19PVkVSSEFORyIsNCksZlk9bmV3IEk1KCJVTklGT1JNX1BPUlRfU1BBQ0lORyIsNSksaFk9bmV3IEk1KCJTUEFDRV9FRkZJQ0lFTlRfUE9SVF9MQUJFTFMiLDYpLEdnZT1uZXcgSTUoIkZPUkNFX1RBQlVMQVJfTk9ERV9MQUJFTFMiLDcpLHNGPW5ldyBJNSgiQVNZTU1FVFJJQ0FMIiw4KX1mdW5jdGlvbiBjbGUoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFO2lmKHQpe2lmKG49KG89dC5EaCgpLG8/QWgobykud2koKS5zaShvKTpudWxsKSxuKXtmb3IoaDIoZSx0LG4pLGE9dC5EaCgpLHc9MCxFPShhLmk9PW51bGwmJlNkKGEpLGEuaSkubGVuZ3RoO3c8RTsrK3cpZz0ocj0oYS5pPT1udWxsJiZTZChhKSxhLmkpLHc+PTAmJnc8ci5sZW5ndGg/clt3XTpudWxsKSxnLnJrKCkmJiFnLnNrKCkmJihEZShnLDMzMSk/TTZuKGUsbChnLDM1KSx0LG4pOihmPWwoZywxOSksZi5CYiZldSYmejhuKGUsZix0LG4pKSk7dC5WaCgpJiZsKG4sNTQpLmVpKGwodCw1NCkuX2goKSl9cmV0dXJuIG59ZWxzZSByZXR1cm4gbnVsbH1mdW5jdGlvbiBPX24oZSx0LG4pe3ZhciByLGEsbztpZighdC5mKXRocm93IHVlKG5ldyBZbigiR2l2ZW4gbGVhdmUgZWRnZSBpcyBubyB0cmVlIGVkZ2UuIikpO2lmKG4uZil0aHJvdyB1ZShuZXcgWW4oIkdpdmVuIGVudGVyIGVkZ2UgaXMgYSB0cmVlIGVkZ2UgYWxyZWFkeS4iKSk7Zm9yKHQuZj0hMSx3eWUoZS5wLHQpLG4uZj0hMCxuYShlLnAsbikscj1uLmUuZS1uLmQuZS1uLmEsenVlKGUsbi5lLHQpfHwocj0tciksbz1uZXcgRyhlLmUuYSk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDEyNSksenVlKGUsYSx0KXx8KGEuZSs9cik7ZS5qPTEsdV8oZS5jKSxwOWUoZSxsKHJlKG5ldyBHKGUuZS5hKSksMTI1KSksbXZ0KGUpfWZ1bmN0aW9uIGZtdChlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIsejtpZihUd24oZSx0LG4pLG89dFtuXSx6PXI/KEN0KCksZXIpOihDdCgpLGFyKSxfaG4odC5sZW5ndGgsbixyKSl7Zm9yKGE9dFtyP24tMTpuKzFdLFM2ZShlLGEscj8ocW8oKSx6dSk6KHFvKCksJGwpKSx3PW8sQz0wLEI9dy5sZW5ndGg7QzxCOysrQylmPXdbQ10sWjhlKGUsZix6KTtmb3IoUzZlKGUsbyxyPyhxbygpLCRsKToocW8oKSx6dSkpLGc9YSxFPTAsTD1nLmxlbmd0aDtFPEw7KytFKWY9Z1tFXSxmLmV8fFo4ZShlLGYsQk4oeikpfWVsc2UgZm9yKGc9byxFPTAsTD1nLmxlbmd0aDtFPEw7KytFKWY9Z1tFXSxaOGUoZSxmLHopO3JldHVybiExfWZ1bmN0aW9uIE5fbihlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEUsQyxMO2ZvcihDbigpLFZzKGUsbmV3IHkkKSxnPW5ldyBVYShlLDApLEw9bmV3IGJ0LG89MDtnLmI8Zy5kLmdjKCk7KWY9KG1yKGcuYjxnLmQuZ2MoKSksbChnLmQuWGIoZy5jPWcuYisrKSwxNjMpKSxMLmMubGVuZ3RoIT0wJiZ3bChmKSpnaChmKT5vKjI/KEM9bmV3IGhWKEwpLEU9d2woZikvZ2goZiksdz1MbGUoQyx0LG5ldyBBOCxuLHIsYSxFKSxPaShZMChDLmUpLHcpLEwuYy5sZW5ndGg9MCxvPTAsJG4oTC5jLEMpLCRuKEwuYyxmKSxvPXdsKEMpKmdoKEMpK3dsKGYpKmdoKGYpKTooJG4oTC5jLGYpLG8rPXdsKGYpKmdoKGYpKTtyZXR1cm4gTH1mdW5jdGlvbiBkbXQoZSx0KXt2YXIgbixyLGEsbyxmLGc7aWYoZz1sKFEodCwoTnQoKSxNcykpLDEwMSksZz09KFJhKCksVGcpfHxnPT1NdSlmb3IoYT1uZXcgbHQodC5mLmErdC5kLmIrdC5kLmMsdC5mLmIrdC5kLmQrdC5kLmEpLmIsZj1uZXcgRyhlLmEpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxMCksby5rPT0oWm4oKSxVcykmJihuPWwoUShvLChmdCgpLFdjKSksNjQpLCEobiE9KEN0KCksYXIpJiZuIT1lcikmJihyPXplKEdlKFEobyxsMykpKSxnPT1UZyYmKHIqPWEpLG8ubi5iPXItbChRKG8scDMpLDgpLmIsRFYobywhMSwhMCkpKX1mdW5jdGlvbiBQX24oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVjtpZihoaChlLmUpKXtpZih0IT1uJiYoYT1sKGUuZywxMjQpLHo9YVtuXSxmPXouTGsoKSx1cChlLmUsZikpKXtmb3IoVj1XdShlLmUuRGgoKSxmKSx3PS0xLGc9LTEscj0wLEU9MCxMPXQ+bj90Om47RTw9TDsrK0UpRT09bj9nPXIrKzoobz1hW0VdLEM9Vi5hbShvLkxrKCkpLEU9PXQmJih3PUU9PUwmJiFDP3ItMTpyKSxDJiYrK3IpO3JldHVybiBCPWwoQUEoZSx0LG4pLDc2KSxnIT13JiZ4ayhlLG5ldyBzTihlLmUsNyxmLHB0KGcpLHoubWQoKSx3KSksQn19ZWxzZSByZXR1cm4gbChIdWUoZSx0LG4pLDc2KTtyZXR1cm4gbChBQShlLHQsbiksNzYpfWZ1bmN0aW9uIEJfbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2Zvcih0LlVnKCJQb3J0IG9yZGVyIHByb2Nlc3NpbmciLDEpLHc9bChRKGUsKE50KCksWk1lKSksNDMwKSxyPW5ldyBHKGUuYik7ci5hPHIuYy5jLmxlbmd0aDspZm9yKG49bChyZShyKSwzMCksbz1uZXcgRyhuLmEpO28uYTxvLmMuYy5sZW5ndGg7KWE9bChyZShvKSwxMCksZj1sKFEoYSxNcyksMTAxKSxnPWEuaixmPT0oUmEoKSxUdil8fGY9PVRnfHxmPT1NdT8oQ24oKSxWcyhnLGFMZSkpOmYhPVoxJiZmIT1XYiYmKENuKCksVnMoZyxYOHQpLHo2bihnKSx3PT0oZE4oKSxFZGUpJiZWcyhnLFk4dCkpLGEuaT0hMCxmOWUoYSk7dC5WZygpfWZ1bmN0aW9uIEZfbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3O2Zvcih3PW5ldyBQcix0PW5ldyBqaWUsZj1lLktjKCk7Zi5PYigpOylhPWwoZi5QYigpLDEwKSxnPWh3KHJPKG5ldyBTbSxhKSx0KSxqdSh3LmYsYSxnKTtmb3Iobz1lLktjKCk7by5PYigpOylmb3IoYT1sKG8uUGIoKSwxMCkscj1uZXcgaHIoZHIocXMoYSkuYS5LYygpLG5ldyBqKSk7anIocik7KW49bCh4cihyKSwxOCksIURvKG4pJiZwMChzMChpMChyMChhMChuZXcgX2YsYi5NYXRoLm1heCgxLGwoUShuLChOdCgpLGVEZSkpLDE3KS5hKSksMSksbChjcih3LG4uYy5pKSwxMjUpKSxsKGNyKHcsbi5kLmkpLDEyNSkpKTtyZXR1cm4gdH1mdW5jdGlvbiBnbXQoKXtnbXQ9VSxHRXQ9ZmkobmV3IFhzLCh1bygpLF91KSwodm8oKSxVQWUpKSx6RGU9ZmkobmV3IFhzLGJ1LExLKSxXRXQ9eWwoZmkobmV3IFhzLGJ1LEZLKSxtYyxCSyksVUV0PXlsKGZpKGZpKG5ldyBYcyxidSwkQWUpLF91LHpBZSksbWMscUFlKSxZRXQ9VGQoVGQodl8oeWwoZmkobmV3IFhzLHkwLHpLKSxtYywkSyksX3UpLGpLKSxxSyksS0V0PXlsKG5ldyBYcyxtYyxHQWUpLEhFdD15bChmaShmaShmaShuZXcgWHMsdmcsREspLF91LE9LKSxfdSxMVCksbWMsSUspLFZFdD15bChmaShmaShuZXcgWHMsX3UsTFQpLF91LEFLKSxtYyxfSyl9ZnVuY3Rpb24gUl9uKGUsdCxuLHIsYSxvKXt2YXIgZixnLHcsRSxDLEwsQjtmb3IoRT1tMHQodCktbTB0KGUpLGY9bnB0KHQsRSksdz1xdSgwLDAsMCk7RT49MCYmKGc9TTduKGUsZiksIShnJiYoRTwyMj93Lmx8PTE8PEU6RTw0ND93Lm18PTE8PEUtMjI6dy5ofD0xPDxFLTQ0LGUubD09MCYmZS5tPT0wJiZlLmg9PTApKSk7KUM9Zi5tLEw9Zi5oLEI9Zi5sLGYuaD1MPj4+MSxmLm09Qz4+PjF8KEwmMSk8PDIxLGYubD1CPj4+MXwoQyYxKTw8MjEsLS1FO3JldHVybiBuJiZ5Y2UodyksbyYmKHI/KE5iPXhFKGUpLGEmJihOYj1KZnQoTmIsKGlFKCksWVNlKSkpKTpOYj1xdShlLmwsZS5tLGUuaCkpLHd9ZnVuY3Rpb24gal9uKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEw7Zm9yKEU9ZS5lW3QuYy5wXVt0LnBdKzEsdz10LmMuYS5jLmxlbmd0aCsxLGc9bmV3IEcoZS5hKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zm9yKGY9bChyZShnKSwxMiksTD0wLG89MCxhPXJnKExoKGhlKGxlKEZoLDEpLFJuLDIwLDAsW25ldyBUNShmKSxuZXcgQzgoZildKSkpO2pyKGEpOylyPWwoeHIoYSksMTIpLHIuaS5jPT10LmMmJihMKz13aG4oZSxyLmkpKzEsKytvKTtuPUwvbyxDPWYuaixDPT0oQ3QoKSxhcik/bjxFP2UuZltmLnBdPWUuYy1uOmUuZltmLnBdPWUuYisody1uKTpDPT1lciYmKG48RT9lLmZbZi5wXT1lLmIrbjplLmZbZi5wXT1lLmMtKHctbikpfX1mdW5jdGlvbiBPaChlLHQsbil7dmFyIHIsYSxvLGYsZztpZihlPT1udWxsKXRocm93IHVlKG5ldyBnZCh1bCkpO2ZvcihvPWUubGVuZ3RoLGY9bz4wJiYoWG4oMCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KDApPT00NXx8KFhuKDAsZS5sZW5ndGgpLGUuY2hhckNvZGVBdCgwKT09NDMpKT8xOjAscj1mO3I8bztyKyspaWYoVzF0KChYbihyLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQocikpKT09LTEpdGhyb3cgdWUobmV3IGdkKFl3K2UrJyInKSk7aWYoZz1wYXJzZUludChlLDEwKSxhPWc8dCxpc05hTihnKSl0aHJvdyB1ZShuZXcgZ2QoWXcrZSsnIicpKTtpZihhfHxnPm4pdGhyb3cgdWUobmV3IGdkKFl3K2UrJyInKSk7cmV0dXJuIGd9ZnVuY3Rpb24gJF9uKGUpe3ZhciB0LG4scixhLG8sZixnO2ZvcihmPW5ldyBvcyxvPW5ldyBHKGUuYSk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDExOCksSChhLGEuZi5jLmxlbmd0aCkscShhLGEuay5jLmxlbmd0aCksYS5pPT0wJiYoYS5vPTAsQ3MoZixhLGYuYy5iLGYuYykpO2Zvcig7Zi5iIT0wOylmb3IoYT1sKGYuYj09MD9udWxsOihtcihmLmIhPTApLGFmKGYsZi5hLmEpKSwxMTgpLHI9YS5vKzEsbj1uZXcgRyhhLmYpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwxMzIpLGc9dC5hLFkoZyxiLk1hdGgubWF4KGcubyxyKSkscShnLGcuaS0xKSxnLmk9PTAmJkNzKGYsZyxmLmMuYixmLmMpfWZ1bmN0aW9uIHpfbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3O2ZvcihmPW5ldyBHKGUpO2YuYTxmLmMuYy5sZW5ndGg7KXtmb3Iobz1sKHJlKGYpLDc0KSxyPWJjKGwoT2UoKCFvLmImJihvLmI9bmV3IExuKF9yLG8sNCw3KSksby5iKSwwKSw4NCkpLGc9ci5pLHc9ci5qLGE9bChPZSgoIW8uYSYmKG8uYT1uZXcgbnQoY3Msbyw2LDYpKSxvLmEpLDApLDE2Niksa08oYSxhLmorZyxhLmsrdykseE8oYSxhLmIrZyxhLmMrdyksbj1uZXcgb3IoKCFhLmEmJihhLmE9bmV3IFlzKHFoLGEsNSkpLGEuYSkpO24uZSE9bi5pLmdjKCk7KXQ9bChncihuKSwzNzcpLFdzZSh0LHQuYStnLHQuYit3KTtrN2UobChhdChvLChwaSgpLHgzKSksNzUpLGcsdyl9fWZ1bmN0aW9uIFlFKGUpe3ZhciB0O3N3aXRjaChlKXtjYXNlIDEwMDpyZXR1cm4gYjYoT0wsITApO2Nhc2UgNjg6cmV0dXJuIGI2KE9MLCExKTtjYXNlIDExOTpyZXR1cm4gYjYoaDBlLCEwKTtjYXNlIDg3OnJldHVybiBiNihoMGUsITEpO2Nhc2UgMTE1OnJldHVybiBiNihmMGUsITApO2Nhc2UgODM6cmV0dXJuIGI2KGYwZSwhMSk7Y2FzZSA5OTpyZXR1cm4gYjYoZDBlLCEwKTtjYXNlIDY3OnJldHVybiBiNihkMGUsITEpO2Nhc2UgMTA1OnJldHVybiBiNihnMGUsITApO2Nhc2UgNzM6cmV0dXJuIGI2KGcwZSwhMSk7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgQWMoKHQ9ZSxHNXQrdC50b1N0cmluZygxNikpKSl9fWZ1bmN0aW9uIHFfbihlKXt2YXIgdCxuLHIsYSxvO3N3aXRjaChhPWwoanQoZS5hLDApLDEwKSx0PW5ldyBvcChlKSx2dChlLmEsdCksdC5vLmE9Yi5NYXRoLm1heCgxLGEuby5hKSx0Lm8uYj1iLk1hdGgubWF4KDEsYS5vLmIpLHQubi5hPWEubi5hLHQubi5iPWEubi5iLGwoUShhLChmdCgpLFdjKSksNjQpLmcpe2Nhc2UgNDp0Lm4uYSs9MjticmVhaztjYXNlIDE6dC5uLmIrPTI7YnJlYWs7Y2FzZSAyOnQubi5hLT0yO2JyZWFrO2Nhc2UgMzp0Lm4uYi09Mn1yZXR1cm4gcj1uZXcgZ3UsTWMocix0KSxuPW5ldyBUdyxvPWwoanQoYS5qLDApLDEyKSxwbyhuLG8pLEZhKG4sciksT2koWTAoci5uKSxvLm4pLE9pKFkwKHIuYSksby5hKSx0fWZ1bmN0aW9uIHBtdChlLHQsbixyLGEpe24mJighcnx8KGUuYy1lLmImZS5hLmxlbmd0aC0xKT4xKSYmdD09MSYmbChlLmFbZS5iXSwxMCkuaz09KFpuKCksY3UpP1R4KGwoZS5hW2UuYl0sMTApLChJaCgpLGtnKSk6ciYmKCFufHwoZS5jLWUuYiZlLmEubGVuZ3RoLTEpPjEpJiZ0PT0xJiZsKGUuYVtlLmMtMSZlLmEubGVuZ3RoLTFdLDEwKS5rPT0oWm4oKSxjdSk/VHgobChlLmFbZS5jLTEmZS5hLmxlbmd0aC0xXSwxMCksKEloKCksR2IpKTooZS5jLWUuYiZlLmEubGVuZ3RoLTEpPT0yPyhUeChsKHdBKGUpLDEwKSwoSWgoKSxrZykpLFR4KGwod0EoZSksMTApLEdiKSk6cFRuKGUsYSksbDZlKGUpfWZ1bmN0aW9uIEhfbihlLHQsbil7dmFyIHIsYSxvLGYsZztmb3Iobz0wLGE9bmV3IG9yKCghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKSk7YS5lIT1hLmkuZ2MoKTspcj1sKGdyKGEpLDI3KSxmPSIiLCghci5uJiYoci5uPW5ldyBudChlYyxyLDEsNykpLHIubikuaT09MHx8KGY9bChPZSgoIXIubiYmKHIubj1uZXcgbnQoZWMsciwxLDcpKSxyLm4pLDApLDEzNSkuYSksZz1uZXcgeGNlKG8rKyx0LGYpLHBjKGcscikscnQoZywoUWkoKSxnTSksciksZy5lLmI9ci5qK3IuZi8yLGcuZi5hPWIuTWF0aC5tYXgoci5nLDEpLGcuZS5hPXIuaStyLmcvMixnLmYuYj1iLk1hdGgubWF4KHIuZiwxKSx1aSh0LmIsZyksanUobi5mLHIsZyl9ZnVuY3Rpb24gVl9uKGUpe3ZhciB0LG4scixhLG87cj1sKFEoZSwoZnQoKSx6aSkpLDI3KSxvPWwoYXQociwoTnQoKSxidikpLDE4MSkuSGMoKG1oKCksQ3YpKSxlLmV8fChhPWwoUShlLEx1KSwyMSksdD1uZXcgbHQoZS5mLmErZS5kLmIrZS5kLmMsZS5mLmIrZS5kLmQrZS5kLmEpLGEuSGMoKEhvKCksdmYpKT8oSGkocixNcywoUmEoKSxNdSkpLEd3KHIsdC5hLHQuYiwhMSwhMCkpOlJ0KEJ0KGF0KHIsYWRlKSkpfHxHdyhyLHQuYSx0LmIsITAsITApKSxvP0hpKHIsYnYsdW4oQ3YpKTpIaShyLGJ2LChuPWwoSzAoQk0pLDkpLG5ldyBaaChuLGwoYzAobixuLmxlbmd0aCksOSksMCkpKX1mdW5jdGlvbiBta2UoZSx0LG4pe3ZhciByLGEsbyxmO2lmKHRbMF0+PWUubGVuZ3RoKXJldHVybiBuLm89MCwhMDtzd2l0Y2goY28oZSx0WzBdKSl7Y2FzZSA0MzphPTE7YnJlYWs7Y2FzZSA0NTphPS0xO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG4ubz0wLCEwfWlmKCsrdFswXSxvPXRbMF0sZj1rVShlLHQpLGY9PTAmJnRbMF09PW8pcmV0dXJuITE7aWYodFswXTxlLmxlbmd0aCYmY28oZSx0WzBdKT09NTgpe2lmKHI9Zio2MCwrK3RbMF0sbz10WzBdLGY9a1UoZSx0KSxmPT0wJiZ0WzBdPT1vKXJldHVybiExO3IrPWZ9ZWxzZSByPWYscjwyNCYmdFswXS1vPD0yP3IqPTYwOnI9ciUxMDArKHIvMTAwfDApKjYwO3JldHVybiByKj1hLG4ubz0tciwhMH1mdW5jdGlvbiBVX24oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFO2ZvcihmPW5ldyBidCxyPW5ldyBocihkcihxcyhlLmIpLmEuS2MoKSxuZXcgaikpO2pyKHIpOyluPWwoeHIociksMTgpLERvKG4pJiZ2dChmLG5ldyBCdXQobix3bHQoZSxuLmMpLHdsdChlLG4uZCkpKTtmb3IoRT0obz1uZXcgZ2koZS5lKS5hLnZjKCkuS2MoKSxuZXcgZnMobykpO0UuYS5PYigpOylnPSh0PWwoRS5hLlBiKCksNDQpLGwodC5tZCgpLDExMykpLGcuZC5wPTA7Zm9yKHc9KGE9bmV3IGdpKGUuZSkuYS52YygpLktjKCksbmV3IGZzKGEpKTt3LmEuT2IoKTspZz0odD1sKHcuYS5QYigpLDQ0KSxsKHQubWQoKSwxMTMpKSxnLmQucD09MCYmdnQoZS5kLFRfbihlLGcpKX1mdW5jdGlvbiBHX24oZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKG89TTEoZSksYT1uZXcgb3IoKCFlLmUmJihlLmU9bmV3IExuKGpzLGUsNyw0KSksZS5lKSk7YS5lIT1hLmkuZ2MoKTspaWYocj1sKGdyKGEpLDc0KSxnPWJjKGwoT2UoKCFyLmMmJihyLmM9bmV3IExuKF9yLHIsNSw4KSksci5jKSwwKSw4NCkpLCFMeShnLG8pKXJldHVybiEwO2ZvcihuPW5ldyBvcigoIWUuZCYmKGUuZD1uZXcgTG4oanMsZSw4LDUpKSxlLmQpKTtuLmUhPW4uaS5nYygpOylpZih0PWwoZ3IobiksNzQpLGY9YmMobChPZSgoIXQuYiYmKHQuYj1uZXcgTG4oX3IsdCw0LDcpKSx0LmIpLDApLDg0KSksIUx5KGYsbykpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gS19uKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2ZvcihmPW5ldyBHKHQuYik7Zi5hPGYuYy5jLmxlbmd0aDspZm9yKG89bChyZShmKSwzMCksRT1uZXcgRyhvLmEpO0UuYTxFLmMuYy5sZW5ndGg7KXtmb3Iodz1sKHJlKEUpLDEwKSxDPW5ldyBidCxnPTAscj1uZXcgaHIoZHIoa2EodykuYS5LYygpLG5ldyBqKSk7anIocik7KW49bCh4cihyKSwxOCksIShEbyhuKXx8IURvKG4pJiZuLmMuaS5jPT1uLmQuaS5jKSYmKGE9bChRKG4sKE50KCksSngpKSwxNykuYSxhPmcmJihnPWEsQy5jLmxlbmd0aD0wKSxhPT1nJiZ2dChDLG5ldyBjYShuLmMuaSxuKSkpO0NuKCksVnMoQyxlLmMpLHB3KGUuYix3LnAsQyl9fWZ1bmN0aW9uIFdfbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQztmb3IoZj1uZXcgRyh0LmIpO2YuYTxmLmMuYy5sZW5ndGg7KWZvcihvPWwocmUoZiksMzApLEU9bmV3IEcoby5hKTtFLmE8RS5jLmMubGVuZ3RoOyl7Zm9yKHc9bChyZShFKSwxMCksQz1uZXcgYnQsZz0wLHI9bmV3IGhyKGRyKHFzKHcpLmEuS2MoKSxuZXcgaikpO2pyKHIpOyluPWwoeHIociksMTgpLCEoRG8obil8fCFEbyhuKSYmbi5jLmkuYz09bi5kLmkuYykmJihhPWwoUShuLChOdCgpLEp4KSksMTcpLmEsYT5nJiYoZz1hLEMuYy5sZW5ndGg9MCksYT09ZyYmdnQoQyxuZXcgY2Eobi5kLmksbikpKTtDbigpLFZzKEMsZS5jKSxwdyhlLmYsdy5wLEMpfX1mdW5jdGlvbiBZX24oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFO2lmKEU9QnQoUSh0LChIYygpLE1UdCkpKSxFPT1udWxsfHwobnIoRSksRSkpe2Zvcih5RW4oZSx0KSxhPW5ldyBidCx3PVJyKHQuYiwwKTt3LmIhPXcuZC5jOylmPWwoQnIodyksNDApLG49aTllKGUsZixudWxsKSxuJiYocGMobix0KSwkbihhLmMsbikpO2lmKGUuYT1udWxsLGUuYj1udWxsLGEuYy5sZW5ndGg+MSlmb3Iocj1uZXcgRyhhKTtyLmE8ci5jLmMubGVuZ3RoOylmb3Iobj1sKHJlKHIpLDEyMSksbz0wLGc9UnIobi5iLDApO2cuYiE9Zy5kLmM7KWY9bChCcihnKSw0MCksZi5nPW8rKztyZXR1cm4gYX1yZXR1cm4gTzEoaGUobGUoX09uLDEpLGszdCwxMjEsMCxbdF0pKX1mdW5jdGlvbiBYX24oZSl7dmFyIHQsbixyLGEsbyxmLGcsdztmb3Iodz1uZXcgYmwsdD1ScihlLDApLGc9bnVsbCxuPWwoQnIodCksOCksYT1sKEJyKHQpLDgpO3QuYiE9dC5kLmM7KWc9bixuPWEsYT1sKEJyKHQpLDgpLG89RWh0KG1hKG5ldyBsdChnLmEsZy5iKSxuKSksZj1FaHQobWEobmV3IGx0KGEuYSxhLmIpLG4pKSxyPTEwLHI9Yi5NYXRoLm1pbihyLGIuTWF0aC5hYnMoby5hK28uYikvMikscj1iLk1hdGgubWluKHIsYi5NYXRoLmFicyhmLmErZi5iKS8yKSxvLmE9Uk8oby5hKSpyLG8uYj1STyhvLmIpKnIsZi5hPVJPKGYuYSkqcixmLmI9Uk8oZi5iKSpyLHVpKHcsT2kobyxuKSksdWkodyxPaShmLG4pKTtyZXR1cm4gd31mdW5jdGlvbiBRX24oZSx0LG4pe3ZhciByLGEsbyxmLGcsdztpZihuLlVnKCJNaW5pbWl6ZSBDcm9zc2luZ3MgIitlLmEsMSkscj10LmIuYy5sZW5ndGg9PTB8fCFfayhGaShuZXcgYm4obnVsbCxuZXcga24odC5iLDE2KSksbmV3IFdsKG5ldyBWZWUpKSkuQmQoKEFtKCksengpKSx3PXQuYi5jLmxlbmd0aD09MSYmbChqdCh0LmIsMCksMzApLmEuYy5sZW5ndGg9PTEsbz1xZShRKHQsKE50KCkscDQpKSk9PT1xZSgocnAoKSxBMikpLHJ8fHcmJiFvKXtuLlZnKCk7cmV0dXJufWE9JENuKGUsdCksZj0oZz1sKGZmKGEsMCksMjE5KSxnLmMua2coKT9nLmMuZWcoKT9uZXcgalllKGUpOm5ldyAkWWUoZSk6bmV3IFJZZShlKSksQXluKGEsZiksYTRuKGUpLG4uVmcoKX1mdW5jdGlvbiBOaChlLHQsbixyKXt2YXIgYSxvLGYsZyx3O3JldHVybiBmPWUuUGgoKSx3PWUuSmgoKSxhPW51bGwsdz90JiYhKHNsZShlLHQsbikuQmImSW8pPyhyPVRvKHcuRWwoKSxlLHIpLGUuZGkobnVsbCksYT10LlFoKCkpOnc9bnVsbDooZiYmKHc9Zi5RaCgpKSx0JiYoYT10LlFoKCkpKSx3IT1hJiZ3JiZ3LklsKGUpLGc9ZS5GaCgpLGUuQmgodCxuKSx3IT1hJiZhJiZhLkhsKGUpLGUudmgoKSYmZS53aCgpJiYoZiYmZz49MCYmZyE9biYmKG89bmV3IF9hKGUsMSxnLGYsbnVsbCkscj9yLm5qKG8pOnI9byksbj49MCYmKG89bmV3IF9hKGUsMSxuLGc9PW4/ZjpudWxsLHQpLHI/ci5uaihvKTpyPW8pKSxyfWZ1bmN0aW9uIGJtdChlKXt2YXIgdCxuLHI7aWYoZS5iPT1udWxsKXtpZihyPW5ldyBVcCxlLmkhPW51bGwmJihYbyhyLGUuaSksci5hKz0iOiIpLGUuZiYyNTYpe2ZvcihlLmYmMjU2JiZlLmEhPW51bGwmJihkcG4oZS5pKXx8KHIuYSs9Ii8vIiksWG8ocixlLmEpKSxlLmQhPW51bGwmJihyLmErPSIvIixYbyhyLGUuZCkpLGUuZiYxNiYmKHIuYSs9Ii8iKSx0PTAsbj1lLmoubGVuZ3RoO3Q8bjt0KyspdCE9MCYmKHIuYSs9Ii8iKSxYbyhyLGUualt0XSk7ZS5nIT1udWxsJiYoci5hKz0iPyIsWG8ocixlLmcpKX1lbHNlIFhvKHIsZS5hKTtlLmUhPW51bGwmJihyLmErPSIjIixYbyhyLGUuZSkpLGUuYj1yLmF9cmV0dXJuIGUuYn1mdW5jdGlvbiBKX24oZSx0KXt2YXIgbixyLGEsbyxmLGc7Zm9yKGE9bmV3IEcodC5hKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTApLG89UShyLChmdCgpLHppKSksRGUobywxMikmJihmPWwobywxMiksZz1ObXQodCxyLGYuby5hLGYuby5iKSxmLm4uYT1nLmEsZi5uLmI9Zy5iLGxhKGYsbChRKHIsV2MpLDY0KSkpO249bmV3IGx0KHQuZi5hK3QuZC5iK3QuZC5jLHQuZi5iK3QuZC5kK3QuZC5hKSxsKFEodCwoZnQoKSxMdSkpLDIxKS5IYygoSG8oKSx2ZikpPyhydChlLChOdCgpLE1zKSwoUmEoKSxNdSkpLGwoUShlbyhlKSxMdSksMjEpLkZjKCRUKSxrdnQoZSxuLCExKSk6a3Z0KGUsbiwhMCl9ZnVuY3Rpb24gWl9uKGUsdCxuLHIsYSl7dmFyIG8sZixnLHc7bz1uZXcgb3AoZSkseChvLChabigpLEF1KSkscnQobywoTnQoKSxNcyksKFJhKCksTXUpKSxydChvLChmdCgpLHppKSx0LmMuaSksZj1uZXcgZ3UscnQoZix6aSx0LmMpLGxhKGYsYSksTWMoZixvKSxydCh0LmMsamwsbyksZz1uZXcgb3AoZSkseChnLEF1KSxydChnLE1zLE11KSxydChnLHppLHQuZC5pKSx3PW5ldyBndSxydCh3LHppLHQuZCksbGEodyxhKSxNYyh3LGcpLHJ0KHQuZCxqbCxnKSxwbyh0LGYpLEZhKHQsdyksRXkoMCxuLmMubGVuZ3RoKSx4XyhuLmMsMCxvKSwkbihyLmMsZykscnQobyxpVyxwdCgxKSkscnQoZyxpVyxwdCgxKSl9ZnVuY3Rpb24gZUFuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHc7aWYodz1ZcihtbyhmZyxpZyhZcihtbyh0PT1udWxsPzA6ZXModCksZGcpKSwxNSkpKSxhPVlyKG1vKGZnLGlnKFlyKG1vKG49PW51bGw/MDplcyhuKSxkZykpLDE1KSkpLGc9cEEoZSx0LHcpLGY9Z0EoZSxuLGEpLGcmJmE9PWcuYSYmeWQobixnLmcpKXJldHVybiBuO2lmKGYmJiFyKXRocm93IHVlKG5ldyBZbigia2V5IGFscmVhZHkgcHJlc2VudDogIituKSk7cmV0dXJuIGcmJnU2KGUsZyksZiYmdTYoZSxmKSxvPW5ldyB4SChuLGEsdCx3KSxlUChlLG8sZiksZiYmKGYuZT1udWxsLGYuYz1udWxsKSxnJiYoZy5lPW51bGwsZy5jPW51bGwpLGZndChlKSxnP2cuZzpudWxsfWZ1bmN0aW9uIG1tdChlLHQsbil7dmFyIHIsYSxvLGYsZztmb3Iobz0wO288dDtvKyspe2ZvcihyPTAsZz1vKzE7Zzx0O2crKylyPWJvKGJvKG1vKHZhKGVbb10sVm8pLHZhKGVbZ10sVm8pKSx2YShuW28rZ10sVm8pKSx2YShZcihyKSxWbykpLG5bbytnXT1ZcihyKSxyPXViKHIsMzIpO25bbyt0XT1ZcihyKX1mb3IoZjNuKG4sbix0PDwxKSxyPTAsYT0wLGY9MDthPHQ7KythLGYrKylyPWJvKGJvKG1vKHZhKGVbYV0sVm8pLHZhKGVbYV0sVm8pKSx2YShuW2ZdLFZvKSksdmEoWXIociksVm8pKSxuW2ZdPVlyKHIpLHI9dWIociwzMiksKytmLHI9Ym8ocix2YShuW2ZdLFZvKSksbltmXT1ZcihyKSxyPXViKHIsMzIpO3JldHVybiBufWZ1bmN0aW9uIHZtdChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQztpZighWmsodCkpe2Zvcih3PXplKEdlKFB5KG4uYywoTnQoKSx0TSkpKSksRT1sKFB5KG4uYyxfQiksMTQwKSwhRSYmKEU9bmV3IHNfKSxyPW4uYSxhPW51bGwsZz10LktjKCk7Zy5PYigpOylmPWwoZy5QYigpLDEyKSxDPTAsYT8oQz13LEMrPWEuby5iKTpDPUUuZCxvPWh3KHJPKG5ldyBTbSxmKSxlLmYpLGtpKGUuayxmLG8pLHAwKHMwKGkwKHIwKGEwKG5ldyBfZiwwKSx1YShiLk1hdGguY2VpbChDKSkpLHIpLG8pKSxhPWYscj1vO3AwKHMwKGkwKHIwKGEwKG5ldyBfZiwwKSx1YShiLk1hdGguY2VpbChFLmErYS5vLmIpKSksciksbi5kKSl9fWZ1bmN0aW9uIHRBbihlLHQsbixyLGEsbyxmLGcpe3ZhciB3LEUsQyxMLEIsejtyZXR1cm4gej0hMSxCPW8tbi5zLEM9bi50LXQuZisoRT1aQShuLEIsITEpLEUuYSksci5nK2c+Qj8hMTooTD0odz1aQShyLEIsITEpLHcuYSksQytnK0w8PXQuYiYmKGFOKG4sby1uLnMpLG4uYz0hMCxhTihyLG8tbi5zKSxxTihyLG4ucyxuLnQrbi5kK2cpLHIuaz0hMCxDN2Uobi5xLHIpLHo9ITAsYSYmKGJWKHQsciksci5qPXQsZS5jLmxlbmd0aD5mJiYoVU4oKFNuKGYsZS5jLmxlbmd0aCksbChlLmNbZl0sMTg2KSksciksKFNuKGYsZS5jLmxlbmd0aCksbChlLmNbZl0sMTg2KSkuYS5jLmxlbmd0aD09MCYmdDIoZSxmKSkpKSx6KX1mdW5jdGlvbiBuQW4oZSx0KXt2YXIgbixyLGEsbyxmLGc7aWYodC5VZygiUGFydGl0aW9uIG1pZHByb2Nlc3NpbmciLDEpLGE9bmV3IEN3LElzKEZpKG5ldyBibihudWxsLG5ldyBrbihlLmEsMTYpKSxuZXcgdmopLG5ldyBjWWUoYSkpLGEuZCE9MCl7Zm9yKGc9bCh5YyhLNWUoKG89YS5pLG5ldyBibihudWxsLChvfHwoYS5pPW5ldyBxNShhLGEuYykpKS5OYygpKSkpLFBsKG5ldyB6cixuZXcgaHQsbmV3IEZuLGhlKGxlKG9jLDEpLGl0LDEwOCwwLFsoRmwoKSxFYyldKSkpLDE1KSxyPWcuS2MoKSxuPWwoci5QYigpLDE3KTtyLk9iKCk7KWY9bChyLlBiKCksMTcpLFdUbihsKCRpKGEsbiksMjEpLGwoJGkoYSxmKSwyMSkpLG49Zjt0LlZnKCl9fWZ1bmN0aW9uIHdtdChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQztpZih0LnA9PTApe2Zvcih0LnA9MSxmPW4sZnx8KGE9bmV3IGJ0LG89KHI9bChLMChPbyksOSksbmV3IFpoKHIsbChjMChyLHIubGVuZ3RoKSw5KSwwKSksZj1uZXcgY2EoYSxvKSksbChmLmEsMTUpLkZjKHQpLHQuaz09KFpuKCksVXMpJiZsKGYuYiwyMSkuRmMobChRKHQsKGZ0KCksV2MpKSw2NCkpLHc9bmV3IEcodC5qKTt3LmE8dy5jLmMubGVuZ3RoOylmb3IoZz1sKHJlKHcpLDEyKSxDPXJnKExoKGhlKGxlKEZoLDEpLFJuLDIwLDAsW25ldyBUNShnKSxuZXcgQzgoZyldKSkpO2pyKEMpOylFPWwoeHIoQyksMTIpLHdtdChlLEUuaSxmKTtyZXR1cm4gZn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBZQShlLHQpe3ZhciBuLHIsYSxvLGY7aWYoZS5BYil7aWYoZS5BYil7aWYoZj1lLkFiLmksZj4wKXtpZihhPWwoZS5BYi5nLDIwMzMpLHQ9PW51bGwpe2ZvcihvPTA7bzxmOysrbylpZihuPWFbb10sbi5kPT1udWxsKXJldHVybiBufWVsc2UgZm9yKG89MDtvPGY7KytvKWlmKG49YVtvXSx2bih0LG4uZCkpcmV0dXJuIG59fWVsc2UgaWYodD09bnVsbCl7Zm9yKHI9bmV3IG9yKGUuQWIpO3IuZSE9ci5pLmdjKCk7KWlmKG49bChncihyKSw1OTgpLG4uZD09bnVsbClyZXR1cm4gbn1lbHNlIGZvcihyPW5ldyBvcihlLkFiKTtyLmUhPXIuaS5nYygpOylpZihuPWwoZ3IociksNTk4KSx2bih0LG4uZCkpcmV0dXJuIG59cmV0dXJuIG51bGx9ZnVuY3Rpb24gckFuKGUsdCxuLHIsYSl7dmFyIG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZTt6PXBtbihlLEQ3ZSh0KSxhKSxwN2UoeixZZyhhLFBkKSkseT1udWxsLFY9YSxKPWFBKFYsdjR0KSx0ZT1uZXcgUlhlKHopLGQ5bih0ZS5hLEopLGZlPWFBKFYsImVuZFBvaW50IiksVGU9bmV3IHFYZSh6KSxmOW4oVGUuYSxmZSksTWU9QXcoViwkRyksJGU9bmV3IFVYZSh6KSxleG4oJGUuYSxNZSksTD1ZZyhhLGdTZSksbz1uZXcgd3R0KGUseiksamZuKG8uYSxvLmIsTCksQj1ZZyhhLGRTZSksZj1uZXcgeXR0KGUseiksJGZuKGYuYSxmLmIsQiksRT1BdyhhLGJTZSksZz1uZXcgeHR0KG4seiksQjduKGcuYixnLmEsRSksQz1BdyhhLHBTZSksdz1uZXcga3R0KHIseiksRjduKHcuYix3LmEsQyl9ZnVuY3Rpb24gdmtlKGUsdCxuKXt2YXIgcixhLG8sZixnO3N3aXRjaChnPW51bGwsdC5nKXtjYXNlIDE6Zm9yKGE9bmV3IEcoZS5qKTthLmE8YS5jLmMubGVuZ3RoOylpZihyPWwocmUoYSksMTIpLFJ0KEJ0KFEociwoZnQoKSxWMWUpKSkpKXJldHVybiByO2c9bmV3IGd1LHJ0KGcsKGZ0KCksVjFlKSwoSG4oKSwhMCkpO2JyZWFrO2Nhc2UgMjpmb3IoZj1uZXcgRyhlLmopO2YuYTxmLmMuYy5sZW5ndGg7KWlmKG89bChyZShmKSwxMiksUnQoQnQoUShvLChmdCgpLEcxZSkpKSkpcmV0dXJuIG87Zz1uZXcgZ3UscnQoZywoZnQoKSxHMWUpLChIbigpLCEwKSl9cmV0dXJuIGcmJihNYyhnLGUpLGxhKGcsbiksajZuKGcubixlLm8sbikpLGd9ZnVuY3Rpb24geW10KGUsdCl7dmFyIG4scixhLG8sZixnO2ZvcihnPS0xLGY9bmV3IG9zLHI9bmV3IE4xKGUuYik7TGMoci5hKXx8TGMoci5iKTspe2ZvcihuPWwoTGMoci5hKT9yZShyLmEpOnJlKHIuYiksMTgpLGc9Yi5NYXRoLm1heChnLHplKEdlKFEobiwoTnQoKSx4MikpKSkpLG4uYz09ZT9JcyhGaShuZXcgYm4obnVsbCxuZXcga24obi5iLDE2KSksbmV3IGlaKSxuZXcgV1dlKGYpKTpJcyhGaShuZXcgYm4obnVsbCxuZXcga24obi5iLDE2KSksbmV3IHNaKSxuZXcgWVdlKGYpKSxvPVJyKGYsMCk7by5iIT1vLmQuYzspYT1sKEJyKG8pLDcyKSxucyhhLChmdCgpLEt4KSl8fHJ0KGEsS3gsbik7cmEodCxmKSxDaChmKX1yZXR1cm4gZ31mdW5jdGlvbiBWdyhlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEU7Zz1hP3IuYjpyLmEsIVcwKGUuYSxyKSYmKEU9Zz5uLnMmJmc8bi5jLHc9ITEsbi5lLmIhPTAmJm4uai5iIT0wJiYodz13fChiLk1hdGguYWJzKGctemUoR2UoQmsobi5lKSkpKTxEZCYmYi5NYXRoLmFicyhnLXplKEdlKEJrKG4uaikpKSk8RGQpLHc9d3woYi5NYXRoLmFicyhnLXplKEdlKG8wKG4uZSkpKSk8RGQmJmIuTWF0aC5hYnMoZy16ZShHZShvMChuLmopKSkpPERkKSksKEV8fHcpJiYoZj1sKFEodCwoTnQoKSxjYykpLDc1KSxmfHwoZj1uZXcgYmwscnQodCxjYyxmKSksbz1uZXcgRW8ociksQ3MoZixvLGYuYy5iLGYuYyksbmEoZS5hLG8pKSl9ZnVuY3Rpb24gaUFuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDO2lmKGlFbihlLHQsbixyKSlyZXR1cm4hMDtmb3IoZj1uZXcgRyh0LmYpO2YuYTxmLmMuYy5sZW5ndGg7KXtzd2l0Y2gobz1sKHJlKGYpLDMzNCksZz0hMSx3PWUuai10LmorbixFPXcrdC5vLEM9ZS5rLXQuaytyLGE9Qyt0LnAsby5hLmcpe2Nhc2UgMDpnPUNjZShlLHcrby5iLmEsMCx3K28uYy5hLEMtMSk7YnJlYWs7Y2FzZSAxOmc9Q2NlKGUsRSxDK28uYi5hLGUuby0xLEMrby5jLmEpO2JyZWFrO2Nhc2UgMjpnPUNjZShlLHcrby5iLmEsYSx3K28uYy5hLGUucC0xKTticmVhaztkZWZhdWx0Omc9Q2NlKGUsMCxDK28uYi5hLHctMSxDK28uYy5hKX1pZihnKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHNBbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMO2ZvcihuLlVnKCJQcm9jZXNzb3Igc2V0IGNvb3JkaW5hdGVzIiwxKSxlLmE9dC5iLmI9PTA/MTp0LmIuYixFPW51bGwscj1Scih0LmIsMCk7IUUmJnIuYiE9ci5kLmM7KUw9bChCcihyKSw0MCksUnQoQnQoUShMLChRaSgpLFZiKSkpKSYmKEU9TCx3PUwuZSx3LmE9bChRKEwsUEIpLDE3KS5hLHcuYj1sKFEoTCxCQiksMTcpLmEpO2c9cGNlKEUpLEM9MTtkbyBnPW85bigoYT1nLG4uZWgoQyksYSkpLEM9Zy5iL2UuYXwwO3doaWxlKGcuYiE9MCk7Zm9yKGY9UnIodC5iLDApO2YuYiE9Zi5kLmM7KW89bChCcihmKSw0MCksbWEoby5lLG5ldyBsdChvLmYuYS8yLG8uZi5iLzIpKTtuLlZnKCl9ZnVuY3Rpb24gYUFuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDO2ZvcihuLlVnKGZ5dCwxKSxObChlLmIpLE5sKGUuYSksZz1udWxsLG89UnIodC5iLDApOyFnJiZvLmIhPW8uZC5jOylFPWwoQnIobyksNDApLFJ0KEJ0KFEoRSwoUWkoKSxWYikpKSkmJihnPUUpO2Zvcih3PW5ldyBvcyxDcyh3LGcsdy5jLmIsdy5jKSxYdnQoZSx3KSxDPVJyKHQuYiwwKTtDLmIhPUMuZC5jOylFPWwoQnIoQyksNDApLGY9ZWkoUShFLChRaSgpLGRNKSkpLGE9eHUoZS5iLGYpIT1udWxsP2woeHUoZS5iLGYpLDE3KS5hOjAscnQoRSxQZGUscHQoYSkpLHI9MSsoeHUoZS5hLGYpIT1udWxsP2woeHUoZS5hLGYpLDE3KS5hOjApLHJ0KEUsbkllLHB0KHIpKTtuLlZnKCl9ZnVuY3Rpb24geG10KGUpe3N3KGUsbmV3IFhtKG53KFp2KHR3KGV3KG5ldyB4MSxlMyksIkVMSyBCb3giKSwiQWxnb3JpdGhtIGZvciBwYWNraW5nIG9mIHVuY29ubmVjdGVkIGJveGVzLCBpLmUuIGdyYXBocyB3aXRob3V0IGVkZ2VzLiIpLG5ldyBlaykpKSxndChlLGUzLFh3LEpPZSksZ3QoZSxlMyxKeSwxNSksZ3QoZSxlMyxOUCxwdCgwKSksZ3QoZSxlMyxaQ2UsSXQoWU9lKSksZ3QoZSxlMyx4NixJdChFU3QpKSxndChlLGUzLE54LEl0KFRTdCkpLGd0KGUsZTMsT3gsUHl0KSxndChlLGUzLGhMLEl0KFhPZSkpLGd0KGUsZTMsUHgsSXQoUU9lKSksZ3QoZSxlMyxlU2UsSXQoX2dlKSksZ3QoZSxlMyxTRyxJdChrU3QpKX1mdW5jdGlvbiBrbXQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7aWYoYT1lLmksZj1hLm8uYSxvPWEuby5iLGY8PTAmJm88PTApcmV0dXJuIEN0KCksUGM7c3dpdGNoKEU9ZS5uLmEsQz1lLm4uYixnPWUuby5hLG49ZS5vLmIsdC5nKXtjYXNlIDI6Y2FzZSAxOmlmKEU8MClyZXR1cm4gQ3QoKSxlcjtpZihFK2c+ZilyZXR1cm4gQ3QoKSxhcjticmVhaztjYXNlIDQ6Y2FzZSAzOmlmKEM8MClyZXR1cm4gQ3QoKSxRbjtpZihDK24+bylyZXR1cm4gQ3QoKSxEcn1yZXR1cm4gdz0oRStnLzIpL2Yscj0oQytuLzIpL28sdytyPD0xJiZ3LXI8PTA/KEN0KCksZXIpOncrcj49MSYmdy1yPj0wPyhDdCgpLGFyKTpyPC41PyhDdCgpLFFuKTooQ3QoKSxEcil9ZnVuY3Rpb24gb0FuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSjtmb3Iobj0hMSxDPXplKEdlKFEodCwoTnQoKSxtMykpKSksVj1BYipDLGE9bmV3IEcodC5iKTthLmE8YS5jLmMubGVuZ3RoOylmb3Iocj1sKHJlKGEpLDMwKSxFPW5ldyBHKHIuYSksbz1sKHJlKEUpLDEwKSxMPXM1ZShlLmFbby5wXSk7RS5hPEUuYy5jLmxlbmd0aDspZz1sKHJlKEUpLDEwKSxCPXM1ZShlLmFbZy5wXSksTCE9QiYmKHo9ajUoZS5iLG8sZyksZj1vLm4uYitvLm8uYitvLmQuYStMLmEreix3PWcubi5iLWcuZC5kK0IuYSxmPncrViYmKEo9TC5nK0IuZyxCLmE9KEIuZypCLmErTC5nKkwuYSkvSixCLmc9SixMLmY9QixuPSEwKSksbz1nLEw9QjtyZXR1cm4gbn1mdW5jdGlvbiBFbXQoZSx0LG4scixhLG8sZil7dmFyIGcsdyxFLEMsTCxCO2ZvcihCPW5ldyAkOCxFPXQuS2MoKTtFLk9iKCk7KWZvcihnPWwoRS5QYigpLDg1MyksTD1uZXcgRyhnLlJmKCkpO0wuYTxMLmMuYy5sZW5ndGg7KUM9bChyZShMKSwxODcpLHFlKEMub2YoKHBpKCksSWdlKSkpPT09cWUoKEYxKCksckMpKSYmKHRtdChCLEMsITEscixhLG8sZiksJEEoZSxCKSk7Zm9yKHc9bi5LYygpO3cuT2IoKTspZm9yKGc9bCh3LlBiKCksODUzKSxMPW5ldyBHKGcuUmYoKSk7TC5hPEwuYy5jLmxlbmd0aDspQz1sKHJlKEwpLDE4NykscWUoQy5vZigocGkoKSxJZ2UpKSk9PT1xZSgoRjEoKSxfNCkpJiYodG10KEIsQywhMCxyLGEsbyxmKSwkQShlLEIpKX1mdW5jdGlvbiBjQW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFO2ZvcihmPW5ldyBvcigoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkpO2YuZSE9Zi5pLmdjKCk7KWZvcihvPWwoZ3IoZiksMjcpLGE9bmV3IGhyKGRyKGNwKG8pLmEuS2MoKSxuZXcgaikpO2pyKGEpOylyPWwoeHIoYSksNzQpLCFxQShyKSYmIXFBKHIpJiYhcXcocikmJih3PWwoaGMoem8obi5mLG8pKSw0MCksRT1sKGNyKG4sYmMobChPZSgoIXIuYyYmKHIuYz1uZXcgTG4oX3Isciw1LDgpKSxyLmMpLDApLDg0KSkpLDQwKSx3JiZFJiYoZz1uZXcgTjVlKHcsRSkscnQoZywoUWkoKSxnTSkscikscGMoZyxyKSx1aSh3LmQsZyksdWkoRS5iLGcpLHVpKHQuYSxnKSkpfWZ1bmN0aW9uIHVBbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEU7Zm9yKHc9bChsKCRpKGUucix0KSwyMSksODcpLktjKCk7dy5PYigpOylnPWwody5QYigpLDExNyksYT1nLmM/SGl0KGcuYyk6MCxhPjA/Zy5hPyhFPWcuYi5NZigpLmIsYT5FJiYoZS52fHxnLmMuZC5jLmxlbmd0aD09MT8oZj0oYS1FKS8yLGcuZC5kPWYsZy5kLmE9Zik6KG49bChqdChnLmMuZCwwKSwxODcpLk1mKCkuYixyPShuLUUpLzIsZy5kLmQ9Yi5NYXRoLm1heCgwLHIpLGcuZC5hPWEtci1FKSkpOmcuZC5hPWUudCthOldfKGUudSkmJihvPSR4ZShnLmIpLG8uZDwwJiYoZy5kLmQ9LW8uZCksby5kK28uYT5nLmIuTWYoKS5iJiYoZy5kLmE9by5kK28uYS1nLmIuTWYoKS5iKSl9ZnVuY3Rpb24gYjAoKXtiMD1VLHF4PW5ldyBIYSgocGkoKSxYQikscHQoMSkpLGtLPW5ldyBIYShFdiw4MCksbjh0PW5ldyBIYShBTmUsNSksRzd0PW5ldyBIYShaNixsVCksZTh0PW5ldyBIYSh6Z2UscHQoMSkpLHQ4dD1uZXcgSGEocWdlLChIbigpLCEwKSksbkFlPW5ldyBsdyg1MCksSjd0PW5ldyBIYShfMixuQWUpLFpfZT1XQixyQWU9X00sSzd0PW5ldyBIYShEZ2UsITEpLHRBZT1ZQixYN3Q9QzQsUTd0PVViLFk3dD1rdixXN3Q9cjcsWjd0PVM0LGVBZT0oWHhlKCksajd0KSxaMGU9SDd0LHhLPVI3dCxKMGU9JDd0LGlBZT1xN3Qsczh0PUFNLGE4dD1hWSxpOHQ9UUIscjh0PXNZLHNBZT0oZHgoKSxMNCksbmV3IEhhKGk5LHNBZSl9ZnVuY3Rpb24gbEFuKGUsdCl7dmFyIG47c3dpdGNoKGdOKGUpKXtjYXNlIDY6cmV0dXJuIElhKHQpO2Nhc2UgNzpyZXR1cm4gZnkodCk7Y2FzZSA4OnJldHVybiBoeSh0KTtjYXNlIDM6cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJihuPWdOKHQpLCEobj49MTQmJm48PTE2KSk7Y2FzZSAxMTpyZXR1cm4gdCE9bnVsbCYmdHlwZW9mIHQ9PT1PbGU7Y2FzZSAxMjpyZXR1cm4gdCE9bnVsbCYmKHR5cGVvZiB0PT09d1B8fHR5cGVvZiB0PT1PbGUpO2Nhc2UgMDpyZXR1cm4gaXVlKHQsZS5fX2VsZW1lbnRUeXBlSWQkKTtjYXNlIDI6cmV0dXJuIFJhZSh0KSYmdC5UbSE9PXhlO2Nhc2UgMTpyZXR1cm4gUmFlKHQpJiZ0LlRtIT09eGV8fGl1ZSh0LGUuX19lbGVtZW50VHlwZUlkJCk7ZGVmYXVsdDpyZXR1cm4hMH19ZnVuY3Rpb24gVG10KGUsdCl7dmFyIG4scixhLG87cmV0dXJuIHI9Yi5NYXRoLm1pbihiLk1hdGguYWJzKGUuYy0odC5jK3QuYikpLGIuTWF0aC5hYnMoZS5jK2UuYi10LmMpKSxvPWIuTWF0aC5taW4oYi5NYXRoLmFicyhlLmQtKHQuZCt0LmEpKSxiLk1hdGguYWJzKGUuZCtlLmEtdC5kKSksbj1iLk1hdGguYWJzKGUuYytlLmIvMi0odC5jK3QuYi8yKSksbj5lLmIvMit0LmIvMnx8KGE9Yi5NYXRoLmFicyhlLmQrZS5hLzItKHQuZCt0LmEvMikpLGE+ZS5hLzIrdC5hLzIpPzE6bj09MCYmYT09MD8wOm49PTA/by9hKzE6YT09MD9yL24rMTpiLk1hdGgubWluKHIvbixvL2EpKzF9ZnVuY3Rpb24gaEFuKGUsdCl7dmFyIG4scixhLG8sZixnLHc7Zm9yKG89MCxnPTAsdz0wLGE9bmV3IEcoZS5mLmUpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwxNTMpLHQhPXImJihmPWUuaVt0LmFdW3IuYV0sbys9ZixuPXBiKHQuZCxyLmQpLG4+MCYmZS5kIT0obEEoKSxuMWUpJiYoZys9Ziooci5kLmErZS5hW3QuYV1bci5hXSoodC5kLmEtci5kLmEpL24pKSxuPjAmJmUuZCE9KGxBKCksZTFlKSYmKHcrPWYqKHIuZC5iK2UuYVt0LmFdW3IuYV0qKHQuZC5iLXIuZC5iKS9uKSkpO3N3aXRjaChlLmQuZyl7Y2FzZSAxOnJldHVybiBuZXcgbHQoZy9vLHQuZC5iKTtjYXNlIDI6cmV0dXJuIG5ldyBsdCh0LmQuYSx3L28pO2RlZmF1bHQ6cmV0dXJuIG5ldyBsdChnL28sdy9vKX19ZnVuY3Rpb24gQ210KGUpe3ZhciB0LG4scixhLG8sZjtmb3Iobj0oIWUuYSYmKGUuYT1uZXcgWXMocWgsZSw1KSksZS5hKS5pKzIsZj1uZXcgQnUobiksdnQoZixuZXcgbHQoZS5qLGUuaykpLElzKG5ldyBibihudWxsLCghZS5hJiYoZS5hPW5ldyBZcyhxaCxlLDUpKSxuZXcga24oZS5hLDE2KSkpLG5ldyBOWGUoZikpLHZ0KGYsbmV3IGx0KGUuYixlLmMpKSx0PTE7dDxmLmMubGVuZ3RoLTE7KXI9KFNuKHQtMSxmLmMubGVuZ3RoKSxsKGYuY1t0LTFdLDgpKSxhPShTbih0LGYuYy5sZW5ndGgpLGwoZi5jW3RdLDgpKSxvPShTbih0KzEsZi5jLmxlbmd0aCksbChmLmNbdCsxXSw4KSksci5hPT1hLmEmJmEuYT09by5hfHxyLmI9PWEuYiYmYS5iPT1vLmI/dDIoZix0KTorK3Q7cmV0dXJuIGZ9ZnVuY3Rpb24gU210KGUsdCl7VEUoKTt2YXIgbixyLGEsbyxmO2lmKGY9bChRKGUuaSwoTnQoKSxNcykpLDEwMSksbz1lLmouZy10LmouZyxvIT0wfHwhKGY9PShSYSgpLFR2KXx8Zj09VGd8fGY9PU11KSlyZXR1cm4gMDtpZihmPT0oUmEoKSxUdikmJihuPWwoUShlLGsyKSwxNykscj1sKFEodCxrMiksMTcpLG4mJnImJihhPW4uYS1yLmEsYSE9MCkpKXJldHVybiBhO3N3aXRjaChlLmouZyl7Y2FzZSAxOnJldHVybiBZaShlLm4uYSx0Lm4uYSk7Y2FzZSAyOnJldHVybiBZaShlLm4uYix0Lm4uYik7Y2FzZSAzOnJldHVybiBZaSh0Lm4uYSxlLm4uYSk7Y2FzZSA0OnJldHVybiBZaSh0Lm4uYixlLm4uYik7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgbmMoekVlKSl9fWZ1bmN0aW9uIF9tdChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2ZvcihuPXRydChhZXQoaWV0KHNldChuZXcgT3dlLHQpLG5ldyBNSCh0LmUpKSxaOHQpLGUuYSksdC5qLmMubGVuZ3RoPT0wfHxQbHQobChqdCh0LmosMCksNjApLmEsbiksdz1uZXcgQmllLGtpKGUuZSxuLHcpLGY9bmV3IEtzLGc9bmV3IEtzLG89bmV3IEcodC5rKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMTgpLG5hKGYsYS5jKSxuYShnLGEuZCk7cj1mLmEuZ2MoKS1nLmEuZ2MoKSxyPDA/KFNOKHcsITAsKEpzKCksdWMpKSxTTih3LCExLHZjKSk6cj4wJiYoU04odywhMSwoSnMoKSx1YykpLFNOKHcsITAsdmMpKSxWdSh0LmcsbmV3IGpldChlLG4pKSxraShlLmcsdCxuKX1mdW5jdGlvbiBBbXQoKXtBbXQ9VTt2YXIgZTtmb3Iocl9lPWhlKGxlKFZyLDEpLGRpLDI4LDE1LFstMSwtMSwzMCwxOSwxNSwxMywxMSwxMSwxMCw5LDksOCw4LDgsOCw3LDcsNyw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw1XSksQTBlPVdlKFZyLGRpLDI4LDM3LDE1LDEpLGI2dD1oZShsZShWciwxKSxkaSwyOCwxNSxbLTEsLTEsNjMsNDAsMzIsMjgsMjUsMjMsMjEsMjAsMTksMTksMTgsMTgsMTcsMTcsMTYsMTYsMTYsMTUsMTUsMTUsMTUsMTQsMTQsMTQsMTQsMTQsMTQsMTMsMTMsMTMsMTMsMTMsMTMsMTMsMTNdKSxpX2U9V2Uobm0sYWhlLDI4LDM3LDE0LDEpLGU9MjtlPD0zNjtlKyspQTBlW2VdPXVhKGIuTWF0aC5wb3coZSxyX2VbZV0pKSxpX2VbZV09S04oRVAsQTBlW2VdKX1mdW5jdGlvbiBmQW4oZSl7dmFyIHQ7aWYoKCFlLmEmJihlLmE9bmV3IG50KGNzLGUsNiw2KSksZS5hKS5pIT0xKXRocm93IHVlKG5ldyBZbihuNHQrKCFlLmEmJihlLmE9bmV3IG50KGNzLGUsNiw2KSksZS5hKS5pKSk7cmV0dXJuIHQ9bmV3IGJsLFROKGwoT2UoKCFlLmImJihlLmI9bmV3IExuKF9yLGUsNCw3KSksZS5iKSwwKSw4NCkpJiZLYSh0LGJ3dChlLFROKGwoT2UoKCFlLmImJihlLmI9bmV3IExuKF9yLGUsNCw3KSksZS5iKSwwKSw4NCkpLCExKSksVE4obChPZSgoIWUuYyYmKGUuYz1uZXcgTG4oX3IsZSw1LDgpKSxlLmMpLDApLDg0KSkmJkthKHQsYnd0KGUsVE4obChPZSgoIWUuYyYmKGUuYz1uZXcgTG4oX3IsZSw1LDgpKSxlLmMpLDApLDg0KSksITApKSx0fWZ1bmN0aW9uIExtdChlLHQpe3ZhciBuLHIsYSxvLGY7Zm9yKHQuZD9hPWUuYS5jPT0oeGQoKSx3Myk/a2EodC5iKTpxcyh0LmIpOmE9ZS5hLmM9PSh4ZCgpLFQyKT9rYSh0LmIpOnFzKHQuYiksbz0hMSxyPW5ldyBocihkcihhLmEuS2MoKSxuZXcgaikpO2pyKHIpOylpZihuPWwoeHIociksMTgpLGY9UnQoZS5hLmZbZS5hLmdbdC5iLnBdLnBdKSwhKCFmJiYhRG8obikmJm4uYy5pLmM9PW4uZC5pLmMpJiYhKFJ0KGUuYS5uW2UuYS5nW3QuYi5wXS5wXSl8fFJ0KGUuYS5uW2UuYS5nW3QuYi5wXS5wXSkpJiYobz0hMCxXMChlLmIsZS5hLmdbZjduKG4sdC5iKS5wXSkpKXJldHVybiB0LmM9ITAsdC5hPW4sdDtyZXR1cm4gdC5jPW8sdC5hPW51bGwsdH1mdW5jdGlvbiB3a2UoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFO2lmKHI9bi5nYygpLHI9PTApcmV0dXJuITE7aWYoZS5QaigpKWlmKHc9ZS5RaigpLEE4ZShlLHQsbiksZj1yPT0xP2UuSWooMyxudWxsLG4uS2MoKS5QYigpLHQsdyk6ZS5Jaig1LG51bGwsbix0LHcpLGUuTWooKSl7Zm9yKGc9cjwxMDA/bnVsbDpuZXcgbmIociksbz10K3IsYT10O2E8bzsrK2EpRT1lLnhqKGEpLGc9ZS5OaihFLGcpLGc9ZztnPyhnLm5qKGYpLGcub2ooKSk6ZS5KaihmKX1lbHNlIGUuSmooZik7ZWxzZSBpZihBOGUoZSx0LG4pLGUuTWooKSl7Zm9yKGc9cjwxMDA/bnVsbDpuZXcgbmIociksbz10K3IsYT10O2E8bzsrK2EpZz1lLk5qKGUueGooYSksZyk7ZyYmZy5vaigpfXJldHVybiEwfWZ1bmN0aW9uIE1tdChlLHQsbil7dmFyIHIsYSxvLGYsZztyZXR1cm4gZS5QaigpPyhhPW51bGwsbz1lLlFqKCkscj1lLklqKDEsZz0oZj1lLkRqKHQsZS5aaSh0LG4pKSxmKSxuLHQsbyksZS5NaigpJiYhKGUuWWkoKSYmZz9QaShnLG4pOnFlKGcpPT09cWUobikpJiYoZyYmKGE9ZS5PaihnLGEpKSxhPWUuTmoobixhKSksYT8oYS5uaihyKSxhLm9qKCkpOmUuSmoociksZyk6KGc9KGY9ZS5Eaih0LGUuWmkodCxuKSksZiksZS5NaigpJiYhKGUuWWkoKSYmZz9QaShnLG4pOnFlKGcpPT09cWUobikpJiYoYT1udWxsLGcmJihhPWUuT2ooZyxudWxsKSksYT1lLk5qKG4sYSksYSYmYS5vaigpKSxnKX1mdW5jdGlvbiB5a2UoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7aWYoZS5lPXQsZS5mPWwoUSh0LChiYigpLEVLKSksMjM0KSxqeG4odCksZS5kPWIuTWF0aC5tYXgodC5lLmMubGVuZ3RoKjE2K3QuYy5jLmxlbmd0aCwyNTYpLCFSdChCdChRKHQsKGIwKCksWl9lKSkpKSlmb3IoQz1lLmUuZS5jLmxlbmd0aCx3PW5ldyBHKHQuZSk7dy5hPHcuYy5jLmxlbmd0aDspZz1sKHJlKHcpLDE1MyksRT1nLmQsRS5hPVk0ZShlLmYpKkMsRS5iPVk0ZShlLmYpKkM7Zm9yKG49dC5iLG89bmV3IEcodC5jKTtvLmE8by5jLmMubGVuZ3RoOylpZihhPWwocmUobyksMjkwKSxyPWwoUShhLGlBZSksMTcpLmEscj4wKXtmb3IoZj0wO2Y8cjtmKyspdnQobixuZXcgVnN0KGEpKTtZcHQoYSl9fWZ1bmN0aW9uIERtdChlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWO2lmKEI9bmV3IHl5KGUuWmcoKSksZTEodCxfaSxCKSxuJiYhZS5YZygpLmEuZGMoKSlmb3IoQz1uZXcgJHAsZTEodCwibG9ncyIsQyksZz0wLFY9bmV3IHlvKGUuWGcoKS5iLktjKCkpO1YuYi5PYigpOyl6PWVpKFYuYi5QYigpKSxMPW5ldyB5eSh6KSxfeShDLGcpLHhvZShDLGcsTCksKytnO2lmKHImJihFPW5ldyB2ayhlLldnKCkpLGUxKHQsImV4ZWN1dGlvblRpbWUiLEUpKSwhZS5ZZygpLmEuZGMoKSlmb3IoZj1uZXcgJHAsZTEodCxXZmUsZiksZz0wLG89bmV3IHlvKGUuWWcoKS5iLktjKCkpO28uYi5PYigpOylhPWwoby5iLlBiKCksODcxKSx3PW5ldyBNOCxfeShmLGcpLHhvZShmLGcsdyksRG10KGEsdyxuLHIpLCsrZ31mdW5jdGlvbiB4a2UoKXt4a2U9VSx1c2UoKSxMQXQ9bmV3IGttLGhlKGxlKG85LDIpLGR0LDM4MSwwLFtoZShsZShvOSwxKSxpSyw2MDAsMCxbbmV3IEpJKEI1dCldKV0pLGhlKGxlKG85LDIpLGR0LDM4MSwwLFtoZShsZShvOSwxKSxpSyw2MDAsMCxbbmV3IEpJKEZTZSldKV0pLGhlKGxlKG85LDIpLGR0LDM4MSwwLFtoZShsZShvOSwxKSxpSyw2MDAsMCxbbmV3IEpJKEY1dCldKSxoZShsZShvOSwxKSxpSyw2MDAsMCxbbmV3IEpJKEZTZSldKV0pLG5ldyBvYigiLTEiKSxoZShsZShvOSwyKSxkdCwzODEsMCxbaGUobGUobzksMSksaUssNjAwLDAsW25ldyBKSSgiXFxjKyIpXSldKSxuZXcgb2IoIjAiKSxuZXcgb2IoIjAiKSxuZXcgb2IoIjEiKSxuZXcgb2IoIjAiKSxuZXcgb2IoSDV0KX1mdW5jdGlvbiBkQW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTDtmb3IodC5VZygiSHlwZXJub2RlcyBwcm9jZXNzaW5nIiwxKSxhPW5ldyBHKGUuYik7YS5hPGEuYy5jLmxlbmd0aDspZm9yKHI9bChyZShhKSwzMCksZz1uZXcgRyhyLmEpO2cuYTxnLmMuYy5sZW5ndGg7KWlmKGY9bChyZShnKSwxMCksUnQoQnQoUShmLChOdCgpLGJXKSkpKSYmZi5qLmMubGVuZ3RoPD0yKXtmb3IoTD0wLEM9MCxuPTAsbz0wLEU9bmV3IEcoZi5qKTtFLmE8RS5jLmMubGVuZ3RoOylzd2l0Y2godz1sKHJlKEUpLDEyKSx3LmouZyl7Y2FzZSAxOisrTDticmVhaztjYXNlIDI6KytDO2JyZWFrO2Nhc2UgMzorK247YnJlYWs7Y2FzZSA0Oisrb31MPT0wJiZuPT0wJiZtSW4oZSxmLG88PUMpfXQuVmcoKX1mdW5jdGlvbiBnQW4oZSx0LG4scixhKXt2YXIgbyxmLGcsdyxFLEMsTDtmb3IoZj1uZXcgRyh0KTtmLmE8Zi5jLmMubGVuZ3RoOyl7aWYobz1sKHJlKGYpLDE4KSx3PW8uYyxuLmEuX2IodykpRT0oU3coKSxIYik7ZWxzZSBpZihyLmEuX2IodykpRT0oU3coKSxLNik7ZWxzZSB0aHJvdyB1ZShuZXcgWW4oIlNvdXJjZSBwb3J0IG11c3QgYmUgaW4gb25lIG9mIHRoZSBwb3J0IHNldHMuIikpO2lmKEM9by5kLG4uYS5fYihDKSlMPShTdygpLEhiKTtlbHNlIGlmKHIuYS5fYihDKSlMPShTdygpLEs2KTtlbHNlIHRocm93IHVlKG5ldyBZbigiVGFyZ2V0IHBvcnQgbXVzdCBiZSBpbiBvbmUgb2YgdGhlIHBvcnQgc2V0cy4iKSk7Zz1uZXcgX3B0KG8sRSxMKSxraShlLmIsbyxnKSwkbihhLmMsZyl9fWZ1bmN0aW9uIGpVKGUpe3ZhciB0LG47cmV0dXJuIGUuYyYmZS5jLlZoKCkmJihuPWwoZS5jLDU0KSxlLmM9bCh5YihlLG4pLDE0MiksZS5jIT1uJiYoZS5EYiY0JiYhKGUuRGImMSkmJk5pKGUsbmV3IF9hKGUsOSwyLG4sZS5jKSksRGUoZS5DYiw0MTEpP2UuRGI+PjE2PT0tMTUmJmUuQ2IuWWgoKSYmcW9lKG5ldyBGb2UoZS5DYiw5LDEzLG4sZS5jLGYyKFhsKGwoZS5DYiw2MikpLGUpKSk6RGUoZS5DYiw5MCkmJmUuRGI+PjE2PT0tMjMmJmUuQ2IuWWgoKSYmKHQ9ZS5jLERlKHQsOTApfHwodD0oVG4oKSxLZikpLERlKG4sOTApfHwobj0oVG4oKSxLZikpLHFvZShuZXcgRm9lKGUuQ2IsOSwxMCxuLHQsZjIoZHUobChlLkNiLDI5KSksZSkpKSkpKSxlLmN9ZnVuY3Rpb24gcEFuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEw7Zm9yKG4uVWcoIkh5cGVyZWRnZSBtZXJnaW5nIiwxKSxqRW4oZSx0KSx3PW5ldyBVYSh0LmIsMCk7dy5iPHcuZC5nYygpOylpZihnPShtcih3LmI8dy5kLmdjKCkpLGwody5kLlhiKHcuYz13LmIrKyksMzApKSxDPWcuYSxDLmMubGVuZ3RoIT0wKWZvcihyPW51bGwsYT1udWxsLG89bnVsbCxmPW51bGwsRT0wO0U8Qy5jLmxlbmd0aDtFKyspcj0oU24oRSxDLmMubGVuZ3RoKSxsKEMuY1tFXSwxMCkpLGE9ci5rLGE9PShabigpLEFhKSYmZj09QWEmJihMPWxMbihyLG8pLEwuYSYmKGxTbihyLG8sTC5iLEwuYyksU24oRSxDLmMubGVuZ3RoKSxkM2UoQy5jLEUsMSksLS1FLHI9byxhPWYpKSxvPXIsZj1hO24uVmcoKX1mdW5jdGlvbiBJbXQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVjtpZih0PT1uKXJldHVybiEwO2lmKHQ9QTllKGUsdCksbj1BOWUoZSxuKSxyPWh1ZSh0KSxyKXtpZihDPWh1ZShuKSxDIT1yKXJldHVybiBDPyh3PXIubWsoKSxWPUMubWsoKSx3PT1WJiZ3IT1udWxsKTohMTtpZihmPSghdC5kJiYodC5kPW5ldyBZcyhXbyx0LDEpKSx0LmQpLG89Zi5pLEI9KCFuLmQmJihuLmQ9bmV3IFlzKFdvLG4sMSkpLG4uZCksbz09Qi5pKXtmb3IoRT0wO0U8bzsrK0UpaWYoYT1sKE9lKGYsRSksODkpLEw9bChPZShCLEUpLDg5KSwhSW10KGUsYSxMKSlyZXR1cm4hMX1yZXR1cm4hMH1lbHNlIHJldHVybiBnPXQuZSx6PW4uZSxnPT16fWZ1bmN0aW9uIE9tdChlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMO2lmKHVwKGUuZSx0KSl7Zm9yKEw9V3UoZS5lLkRoKCksdCksbz1sKGUuZywxMjQpLEM9bnVsbCx3PS0xLGc9LTEsYT0wLEU9MDtFPGUuaTsrK0UpZj1vW0VdLEwuYW0oZi5MaygpKSYmKGE9PW4mJih3PUUpLGE9PXImJihnPUUsQz1mLm1kKCkpLCsrYSk7aWYodz09LTEpdGhyb3cgdWUobmV3IHRjKFFmZStuK2F2K2EpKTtpZihnPT0tMSl0aHJvdyB1ZShuZXcgdGMoSmZlK3IrYXYrYSkpO3JldHVybiBBQShlLHcsZyksaGgoZS5lKSYmeGsoZSxkYihlLDcsdCxwdChyKSxDLG4sITApKSxDfWVsc2UgdGhyb3cgdWUobmV3IFluKCJUaGUgZmVhdHVyZSBtdXN0IGJlIG1hbnktdmFsdWVkIHRvIHN1cHBvcnQgbW92ZSIpKX1mdW5jdGlvbiBObXQoZSx0LG4scil7dmFyIGEsbyxmLGcsdztzd2l0Y2godz1uZXcgRW8odC5uKSx3LmErPXQuby5hLzIsdy5iKz10Lm8uYi8yLGc9emUoR2UoUSh0LChOdCgpLG00KSkpKSxvPWUuZixmPWUuZCxhPWUuYyxsKFEodCwoZnQoKSxXYykpLDY0KS5nKXtjYXNlIDE6dy5hKz1mLmIrYS5hLW4vMix3LmI9LXItZyx0Lm4uYj0tKGYuZCtnK2EuYik7YnJlYWs7Y2FzZSAyOncuYT1vLmErZi5iK2YuYytnLHcuYis9Zi5kK2EuYi1yLzIsdC5uLmE9by5hK2YuYytnLWEuYTticmVhaztjYXNlIDM6dy5hKz1mLmIrYS5hLW4vMix3LmI9by5iK2YuZCtmLmErZyx0Lm4uYj1vLmIrZi5hK2ctYS5iO2JyZWFrO2Nhc2UgNDp3LmE9LW4tZyx3LmIrPWYuZCthLmItci8yLHQubi5hPS0oZi5iK2crYS5hKX1yZXR1cm4gd31mdW5jdGlvbiBQbXQoZSl7dmFyIHQsbixyLGEsbyxmO3JldHVybiByPW5ldyBvN2UscGMocixlKSxxZShRKHIsKE50KCksUmgpKSk9PT1xZSgoSnMoKSxKMSkpJiZydChyLFJoLHpWKHIpKSxRKHIsKFFIKCksa00pKT09bnVsbCYmKGY9bChZZ3QoZSksMTY3KSxydChyLGtNLE1xKGYub2Yoa00pKSkpLHJ0KHIsKGZ0KCksemkpLGUpLHJ0KHIsTHUsKHQ9bChLMChGMWUpLDkpLG5ldyBaaCh0LGwoYzAodCx0Lmxlbmd0aCksOSksMCkpKSxhPWdEbigoZHMoZSkmJihhdygpLG5ldyBKdihkcyhlKSkpLGF3KCksbmV3IHJhZShkcyhlKT9uZXcgSnYoZHMoZSkpOm51bGwsZSkpLHZjKSxvPWwoUShyLFdNZSksMTA3KSxuPXIuZCxkb3QobixvKSxkb3QobixhKSxyfWZ1bmN0aW9uIGJBbihlLHQsbil7dmFyIHIsYTtyPXQuYy5pLGE9bi5kLmksci5rPT0oWm4oKSxBYSk/KHJ0KGUsKGZ0KCksbzEpLGwoUShyLG8xKSwxMikpLHJ0KGUsJGYsbChRKHIsJGYpLDEyKSkscnQoZSxmNCxCdChRKHIsZjQpKSkpOnIuaz09Y3U/KHJ0KGUsKGZ0KCksbzEpLGwoUShyLG8xKSwxMikpLHJ0KGUsJGYsbChRKHIsJGYpLDEyKSkscnQoZSxmNCwoSG4oKSwhMCkpKTphLms9PWN1PyhydChlLChmdCgpLG8xKSxsKFEoYSxvMSksMTIpKSxydChlLCRmLGwoUShhLCRmKSwxMikpLHJ0KGUsZjQsKEhuKCksITApKSk6KHJ0KGUsKGZ0KCksbzEpLHQuYykscnQoZSwkZixuLmQpKX1mdW5jdGlvbiBtQW4oZSl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKGUubz1uZXcgejUscj1uZXcgb3MsZj1uZXcgRyhlLmUuYSk7Zi5hPGYuYy5jLmxlbmd0aDspbz1sKHJlKGYpLDEyNSksWjUobykuYy5sZW5ndGg9PTEmJkNzKHIsbyxyLmMuYixyLmMpO2Zvcig7ci5iIT0wOylvPWwoci5iPT0wP251bGw6KG1yKHIuYiE9MCksYWYocixyLmEuYSkpLDEyNSksWjUobykuYy5sZW5ndGghPTAmJih0PWwoanQoWjUobyksMCksMjE4KSxuPW8uZy5hLmMubGVuZ3RoPjAsZz1IVih0LG8pLEl5ZShuP2cuYjpnLmcsdCksWjUoZykuYy5sZW5ndGg9PTEmJkNzKHIsZyxyLmMuYixyLmMpLGE9bmV3IGNhKG8sdCksZ2IoZS5vLGEpLGFsKGUuZS5hLG8pKX1mdW5jdGlvbiBCbXQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdztyZXR1cm4gcj1iLk1hdGguYWJzKG1IKGUuYikuYS1tSCh0LmIpLmEpLGc9Yi5NYXRoLmFicyhtSChlLmIpLmItbUgodC5iKS5iKSxhPTAsdz0wLG49MSxmPTEscj5lLmIuYi8yK3QuYi5iLzImJihhPWIuTWF0aC5taW4oYi5NYXRoLmFicyhlLmIuYy0odC5iLmMrdC5iLmIpKSxiLk1hdGguYWJzKGUuYi5jK2UuYi5iLXQuYi5jKSksbj0xLWEvciksZz5lLmIuYS8yK3QuYi5hLzImJih3PWIuTWF0aC5taW4oYi5NYXRoLmFicyhlLmIuZC0odC5iLmQrdC5iLmEpKSxiLk1hdGguYWJzKGUuYi5kK2UuYi5hLXQuYi5kKSksZj0xLXcvZyksbz1iLk1hdGgubWluKG4sZiksKDEtbykqYi5NYXRoLnNxcnQocipyK2cqZyl9ZnVuY3Rpb24gdkFuKGUpe3ZhciB0LG4scixhO2ZvcihBbGUoZSxlLmUsZS5mLChTdygpLEhiKSwhMCxlLmMsZS5pKSxBbGUoZSxlLmUsZS5mLEhiLCExLGUuYyxlLmkpLEFsZShlLGUuZSxlLmYsSzYsITAsZS5jLGUuaSksQWxlKGUsZS5lLGUuZixLNiwhMSxlLmMsZS5pKSxnQW4oZSxlLmMsZS5lLGUuZixlLmkpLHI9bmV3IFVhKGUuaSwwKTtyLmI8ci5kLmdjKCk7KWZvcih0PShtcihyLmI8ci5kLmdjKCkpLGwoci5kLlhiKHIuYz1yLmIrKyksMTMxKSksYT1uZXcgVWEoZS5pLHIuYik7YS5iPGEuZC5nYygpOyluPShtcihhLmI8YS5kLmdjKCkpLGwoYS5kLlhiKGEuYz1hLmIrKyksMTMxKSksaU1uKHQsbik7X0luKGUuaSxsKFEoZS5kLChmdCgpLFh4KSksMjM0KSksek1uKGUuaSl9ZnVuY3Rpb24gdWxlKGUsdCl7dmFyIG4scjtpZih0IT1udWxsKXtpZihyPXp3KGUpLHIpaWYoci5pJjEpe2lmKHI9PWloKXJldHVybiBoeSh0KTtpZihyPT1WcilyZXR1cm4gRGUodCwxNyk7aWYocj09QjQpcmV0dXJuIERlKHQsMTYxKTtpZihyPT1BbClyZXR1cm4gRGUodCwyMjIpO2lmKHI9PWtmKXJldHVybiBEZSh0LDE4MCk7aWYocj09TmEpcmV0dXJuIGZ5KHQpO2lmKHI9PWg3KXJldHVybiBEZSh0LDE5MSk7aWYocj09bm0pcmV0dXJuIERlKHQsMTY4KX1lbHNlIHJldHVybiBpcSgpLG49bChjcihrWSxyKSw1NyksIW58fG4uZmsodCk7ZWxzZSBpZihEZSh0LDU4KSlyZXR1cm4gZS5kbChsKHQsNTgpKX1yZXR1cm4hMX1mdW5jdGlvbiBra2UoKXtra2U9VTt2YXIgZSx0LG4scixhLG8sZixnLHc7Zm9yKG5kPVdlKEFsLEM2LDI4LDI1NSwxNSwxKSxOMj1XZShrZixBZCwyOCw2NCwxNSwxKSx0PTA7dDwyNTU7dCsrKW5kW3RdPS0xO2ZvcihuPTkwO24+PTY1O24tLSluZFtuXT1uLTY1PDwyND4+MjQ7Zm9yKHI9MTIyO3I+PTk3O3ItLSluZFtyXT1yLTk3KzI2PDwyND4+MjQ7Zm9yKGE9NTc7YT49NDg7YS0tKW5kW2FdPWEtNDgrNTI8PDI0Pj4yNDtmb3IobmRbNDNdPTYyLG5kWzQ3XT02MyxvPTA7bzw9MjU7bysrKU4yW29dPTY1K28mWnM7Zm9yKGY9MjYsdz0wO2Y8PTUxOysrZix3KyspTjJbZl09OTcrdyZacztmb3IoZT01MixnPTA7ZTw9NjE7KytlLGcrKylOMltlXT00OCtnJlpzO04yWzYyXT00MyxOMls2M109NDd9ZnVuY3Rpb24gRm10KGUsdCl7dmFyIG4scixhLG8sZixnO3JldHVybiBhPXk3ZShlKSxnPXk3ZSh0KSxhPT1nP2UuZT09dC5lJiZlLmE8NTQmJnQuYTw1ND9lLmY8dC5mPy0xOmUuZj50LmY/MTowOihyPWUuZS10LmUsbj0oZS5kPjA/ZS5kOmIuTWF0aC5mbG9vcigoZS5hLTEpKlZ3dCkrMSktKHQuZD4wP3QuZDpiLk1hdGguZmxvb3IoKHQuYS0xKSpWd3QpKzEpLG4+cisxP2E6bjxyLTE/LWE6KG89KCFlLmMmJihlLmM9WE8oWmMoZS5mKSkpLGUuYyksZj0oIXQuYyYmKHQuYz1YTyhaYyh0LmYpKSksdC5jKSxyPDA/bz1LNShvLFdtdCgtcikpOnI+MCYmKGY9SzUoZixXbXQocikpKSxLMXQobyxmKSkpOmE8Zz8tMToxfWZ1bmN0aW9uIHdBbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQztmb3Iobi5VZyhUM3QsMSksZS52Zih0KSxvPTA7ZS54ZihvKSYmIW4uJGcoKTspe2ZvcihlLndmKCksQz1yZyhMaChoZShsZShGaCwxKSxSbiwyMCwwLFt0LmUsdC5kLHQuYl0pKSk7anIoQyk7KWZvcih3PWwoeHIoQyksMzA5KSxnPXJnKExoKGhlKGxlKEZoLDEpLFJuLDIwLDAsW3QuZSx0LmQsdC5iXSkpKTtqcihnKTspZj1sKHhyKGcpLDMwOSksZiE9dyYmKGE9ZS51ZihmLHcpLGEmJk9pKHcuYyxhKSk7Zm9yKEU9cmcoTGgoaGUobGUoRmgsMSksUm4sMjAsMCxbdC5lLHQuZCx0LmJdKSkpO2pyKEUpOyl3PWwoeHIoRSksMzA5KSxyPXcuYyxvcHQociwtZS5kLC1lLmQsZS5kLGUuZCksT2kody5kLHIpLHIuYT0wLHIuYj0wOysrb31uLlZnKCl9ZnVuY3Rpb24geUFuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6O2lmKGUuZGMoKSlyZXR1cm4gbmV3IHFhO2ZvcihFPTAsTD0wLGE9ZS5LYygpO2EuT2IoKTspcj1sKGEuUGIoKSwzNiksbz1yLmYsRT1iLk1hdGgubWF4KEUsby5hKSxMKz1vLmEqby5iO2ZvcihFPWIuTWF0aC5tYXgoRSxiLk1hdGguc3FydChMKSp6ZShHZShRKGwoZS5LYygpLlBiKCksMzYpLChOdCgpLGNXKSkpKSksQj0wLHo9MCx3PTAsbj10LGc9ZS5LYygpO2cuT2IoKTspZj1sKGcuUGIoKSwzNiksQz1mLmYsQitDLmE+RSYmKEI9MCx6Kz13K3Qsdz0wKSxLRShmLEIseiksbj1iLk1hdGgubWF4KG4sQitDLmEpLHc9Yi5NYXRoLm1heCh3LEMuYiksQis9Qy5hK3Q7cmV0dXJuIG5ldyBsdChuK3Qseit3K3QpfWZ1bmN0aW9uIEVrZShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2lmKCFNMShlKSl0aHJvdyB1ZShuZXcgbmModDR0KSk7aWYocj1NMShlKSxvPXIuZyxhPXIuZixvPD0wJiZhPD0wKXJldHVybiBDdCgpLFBjO3N3aXRjaChnPWUuaSx3PWUuaix0Lmcpe2Nhc2UgMjpjYXNlIDE6aWYoZzwwKXJldHVybiBDdCgpLGVyO2lmKGcrZS5nPm8pcmV0dXJuIEN0KCksYXI7YnJlYWs7Y2FzZSA0OmNhc2UgMzppZih3PDApcmV0dXJuIEN0KCksUW47aWYodytlLmY+YSlyZXR1cm4gQ3QoKSxEcn1yZXR1cm4gZj0oZytlLmcvMikvbyxuPSh3K2UuZi8yKS9hLGYrbjw9MSYmZi1uPD0wPyhDdCgpLGVyKTpmK24+PTEmJmYtbj49MD8oQ3QoKSxhcik6bjwuNT8oQ3QoKSxRbik6KEN0KCksRHIpfWZ1bmN0aW9uIHhBbihlLHQsbixyLGEpe3ZhciBvLGY7aWYobz1ibyh2YSh0WzBdLFZvKSx2YShyWzBdLFZvKSksZVswXT1ZcihvKSxvPWJ3KG8sMzIpLG4+PWEpe2ZvcihmPTE7ZjxhO2YrKylvPWJvKG8sYm8odmEodFtmXSxWbyksdmEocltmXSxWbykpKSxlW2ZdPVlyKG8pLG89YncobywzMik7Zm9yKDtmPG47ZisrKW89Ym8obyx2YSh0W2ZdLFZvKSksZVtmXT1ZcihvKSxvPWJ3KG8sMzIpfWVsc2V7Zm9yKGY9MTtmPG47ZisrKW89Ym8obyxibyh2YSh0W2ZdLFZvKSx2YShyW2ZdLFZvKSkpLGVbZl09WXIobyksbz1idyhvLDMyKTtmb3IoO2Y8YTtmKyspbz1ibyhvLHZhKHJbZl0sVm8pKSxlW2ZdPVlyKG8pLG89YncobywzMil9aXUobywwKSE9MCYmKGVbZl09WXIobykpfWZ1bmN0aW9uIFV5KGUpe0RpKCk7dmFyIHQsbixyLGEsbyxmO2lmKGUuZSE9NCYmZS5lIT01KXRocm93IHVlKG5ldyBZbigiVG9rZW4jY29tcGxlbWVudFJhbmdlcygpOiBtdXN0IGJlIFJBTkdFOiAiK2UuZSkpO2ZvcihvPWUsYzYobyksZUwobykscj1vLmIubGVuZ3RoKzIsby5iWzBdPT0wJiYoci09Miksbj1vLmJbby5iLmxlbmd0aC0xXSxuPT1UVCYmKHItPTIpLGE9bmV3IF9oKDQpLGEuYj1XZShWcixkaSwyOCxyLDE1LDEpLGY9MCxvLmJbMF0+MCYmKGEuYltmKytdPTAsYS5iW2YrK109by5iWzBdLTEpLHQ9MTt0PG8uYi5sZW5ndGgtMjt0Kz0yKWEuYltmKytdPW8uYlt0XSsxLGEuYltmKytdPW8uYlt0KzFdLTE7cmV0dXJuIG4hPVRUJiYoYS5iW2YrK109bisxLGEuYltmXT1UVCksYS5hPSEwLGF9ZnVuY3Rpb24ga0FuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2Zvcih0LlVnKCJMYXllciBjb25zdHJhaW50IGVkZ2UgcmV2ZXJzYWwiLDEpLGY9bmV3IEcoZS5iKTtmLmE8Zi5jLmMubGVuZ3RoOyl7Zm9yKG89bChyZShmKSwzMCksQz0tMSxuPW5ldyBidCxFPUpPKG8uYSksYT0wO2E8RS5sZW5ndGg7YSsrKXI9bChRKEVbYV0sKGZ0KCksaHYpKSwzMTEpLEM9PS0xP3IhPShlcCgpLEY2KSYmKEM9YSk6cj09KGVwKCksRjYpJiYoVmEoRVthXSxudWxsKSxGeShFW2FdLEMrKyxvKSkscj09KGVwKCksVXgpJiYkbihuLmMsRVthXSk7Zm9yKHc9bmV3IEcobik7dy5hPHcuYy5jLmxlbmd0aDspZz1sKHJlKHcpLDEwKSxWYShnLG51bGwpLFZhKGcsbyl9dC5WZygpfWZ1bmN0aW9uIGxsZShlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQztpZihyPW4uZ2MoKSxyPT0wKXJldHVybiExO2lmKGUuUGooKSlpZihFPWUuUWooKSxEdWUoZSx0LG4pLGY9cj09MT9lLklqKDMsbnVsbCxuLktjKCkuUGIoKSx0LEUpOmUuSWooNSxudWxsLG4sdCxFKSxlLk1qKCkpe2ZvcihnPXI8MTAwP251bGw6bmV3IG5iKHIpLG89dCtyLGE9dDthPG87KythKUM9ZS5nW2FdLGc9ZS5OaihDLGcpLGc9ZS5VaihDLGcpO2c/KGcubmooZiksZy5vaigpKTplLkpqKGYpfWVsc2UgZS5KaihmKTtlbHNlIGlmKER1ZShlLHQsbiksZS5NaigpKXtmb3IoZz1yPDEwMD9udWxsOm5ldyBuYihyKSxvPXQrcixhPXQ7YTxvOysrYSl3PWUuZ1thXSxnPWUuTmoodyxnKTtnJiZnLm9qKCl9cmV0dXJuITB9ZnVuY3Rpb24gRUFuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2Zvcih0LlVnKCJIaWVyYXJjaGljYWwgcG9ydCBkdW1teSBzaXplIHByb2Nlc3NpbmciLDEpLHc9bmV3IGJ0LEM9bmV3IGJ0LHI9emUoR2UoUShlLChOdCgpLHE2KSkpKSxuPXIqMixvPW5ldyBHKGUuYik7by5hPG8uYy5jLmxlbmd0aDspe2ZvcihhPWwocmUobyksMzApLHcuYy5sZW5ndGg9MCxDLmMubGVuZ3RoPTAsZz1uZXcgRyhhLmEpO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwxMCksZi5rPT0oWm4oKSxVcykmJihFPWwoUShmLChmdCgpLFdjKSksNjQpLEU9PShDdCgpLFFuKT8kbih3LmMsZik6RT09RHImJiRuKEMuYyxmKSk7YjJ0KHcsITAsbiksYjJ0KEMsITEsbil9dC5WZygpfWZ1bmN0aW9uIFRrZShlLHQsbixyKXt2YXIgYSxvLGYsZyx3O2ZvcihmPW5ldyBHKGUuayk7Zi5hPGYuYy5jLmxlbmd0aDspYT1sKHJlKGYpLDEzMiksKCFyfHxhLmM9PShKMCgpLHFiKSkmJih3PWEuYix3Lmc8MCYmYS5kPjAmJihIKHcsdy5kLWEuZCksYS5jPT0oSjAoKSxxYikmJk4odyx3LmEtYS5kKSx3LmQ8PTAmJncuaT4wJiZDcyh0LHcsdC5jLmIsdC5jKSkpO2ZvcihvPW5ldyBHKGUuZik7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDEzMiksKCFyfHxhLmM9PShKMCgpLHFiKSkmJihnPWEuYSxnLmc8MCYmYS5kPjAmJihxKGcsZy5pLWEuZCksYS5jPT0oSjAoKSxxYikmJiQoZyxnLmItYS5kKSxnLmk8PTAmJmcuZD4wJiZDcyhuLGcsbi5jLmIsbi5jKSkpfWZ1bmN0aW9uIFRBbihlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEUsQyxMLEIsejtmb3IoQ24oKSxWcyhlLG5ldyB0ayksZj1QTyhlKSx6PW5ldyBidCxCPW5ldyBidCxnPW51bGwsdz0wO2YuYiE9MDspbz1sKGYuYj09MD9udWxsOihtcihmLmIhPTApLGFmKGYsZi5hLmEpKSwxNjMpLCFnfHx3bChnKSpnaChnKS8yPHdsKG8pKmdoKG8pPyhnPW8sJG4oei5jLG8pKToodys9d2wobykqZ2gobyksJG4oQi5jLG8pLEIuYy5sZW5ndGg+MSYmKHc+d2woZykqZ2goZykvMnx8Zi5iPT0wKSYmKEw9bmV3IGhWKEIpLEM9d2woZykvZ2goZyksRT1MbGUoTCx0LG5ldyBBOCxuLHIsYSxDKSxPaShZMChMLmUpLEUpLGc9TCwkbih6LmMsTCksdz0wLEIuYy5sZW5ndGg9MCkpO3JldHVybiByYSh6LEIpLHp9ZnVuY3Rpb24gcHUoZSx0LG4scixhKXtWZygpO3ZhciBvLGYsZyx3LEUsQyxMO2lmKGQ1ZShlLCJzcmMiKSxkNWUobiwiZGVzdCIpLEw9YmgoZSksdz1iaChuKSxJNGUoKEwuaSY0KSE9MCwic3JjVHlwZSBpcyBub3QgYW4gYXJyYXkiKSxJNGUoKHcuaSY0KSE9MCwiZGVzdFR5cGUgaXMgbm90IGFuIGFycmF5IiksQz1MLmMsZj13LmMsSTRlKEMuaSYxP0M9PWY6KGYuaSYxKT09MCwiQXJyYXkgdHlwZXMgZG9uJ3QgbWF0Y2giKSxseW4oZSx0LG4scixhKSwhKEMuaSYxKSYmTCE9dylpZihFPWptKGUpLG89am0obikscWUoZSk9PT1xZShuKSYmdDxyKWZvcih0Kz1hLGc9cithO2ctLSA+cjspVHMobyxnLEVbLS10XSk7ZWxzZSBmb3IoZz1yK2E7cjxnOylUcyhvLHIrKyxFW3QrK10pO2Vsc2UgazllKGUsdCxuLHIsYSwhMCl9ZnVuY3Rpb24gUm10KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO3N3aXRjaCh0LlVnKCJCb3ggbGF5b3V0IiwyKSxhPVhJKEdlKGF0KGUsKHdVKCksU1N0KSkpKSxvPWwoYXQoZSxDU3QpLDEwNyksbj1SdChCdChhdChlLFlPZSkpKSxyPVJ0KEJ0KGF0KGUsWE9lKSkpLGwoYXQoZSxfZ2UpLDMyMCkuZyl7Y2FzZSAwOmY9KEM9bmV3IE9sKCghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKSksQ24oKSxWcyhDLG5ldyBEWGUocikpLEMpLGc9YTllKGUpLHc9R2UoYXQoZSxXT2UpKSwodz09bnVsbHx8KG5yKHcpLHc8PTApKSYmKHc9MS4zKSxFPW5JbihmLGEsbyxnLmEsZy5iLG4sKG5yKHcpLHcpKSxHdyhlLEUuYSxFLmIsITEsITApO2JyZWFrO2RlZmF1bHQ6V0xuKGUsYSxvLG4pfXQuVmcoKX1mdW5jdGlvbiBDQW4oZSx0LG4scixhKXt2YXIgbyxmLGcsdyxFLEMsTCxCLHosVjtmb3IoQj1YOG4oZSxuKSx3PTA7dzx0O3crKyl7Zm9yKGJ5KGEsbiksej1uZXcgYnQsVj0obXIoci5iPHIuZC5nYygpKSxsKHIuZC5YYihyLmM9ci5iKyspLDQxOCkpLEM9Qit3O0M8ZS5iO0MrKylnPVYsVj0obXIoci5iPHIuZC5nYygpKSxsKHIuZC5YYihyLmM9ci5iKyspLDQxOCkpLHZ0KHosbmV3IGRidChnLFYsbikpO2ZvcihMPUIrdztMPGUuYjtMKyspbXIoci5iPjApLHIuYS5YYihyLmM9LS1yLmIpLEw+Qit3JiZwaChyKTtmb3IoZj1uZXcgRyh6KTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksNDE4KSxieShyLG8pO2lmKHc8dC0xKWZvcihFPUIrdztFPGUuYjtFKyspbXIoci5iPjApLHIuYS5YYihyLmM9LS1yLmIpfX1mdW5jdGlvbiBTQW4oKXtEaSgpO3ZhciBlLHQsbixyLGEsbztpZih1cGUpcmV0dXJuIHVwZTtmb3IoZT1uZXcgX2goNCksS3koZSxfYihwMGUsITApKSxuTChlLF9iKCJNIiwhMCkpLG5MKGUsX2IoIkMiLCEwKSksbz1uZXcgX2goNCkscj0wO3I8MTE7cisrKUV1KG8scixyKTtyZXR1cm4gdD1uZXcgX2goNCksS3kodCxfYigiTSIsITApKSxFdSh0LDQ0NDgsNDYwNyksRXUodCw2NTQzOCw2NTQzOSksYT1uZXcgQl8oMiksUW0oYSxlKSxRbShhLFdNKSxuPW5ldyBCXygyKSxuLkptKG9IKG8sX2IoIkwiLCEwKSkpLG4uSm0odCksbj1uZXcgVHkoMyxuKSxuPW5ldyBmNWUoYSxuKSx1cGU9bix1cGV9ZnVuY3Rpb24gR3koZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFO2ZvcihuPW5ldyBSZWdFeHAodCwiZyIpLHc9V2UoenQsZHQsMiwwLDYsMSkscj0wLEU9ZSxvPW51bGw7OylpZihnPW4uZXhlYyhFKSxnPT1udWxsfHxFPT0iIil7d1tyXT1FO2JyZWFrfWVsc2UgZj1nLmluZGV4LHdbcl09KEdhKDAsZixFLmxlbmd0aCksRS5zdWJzdHIoMCxmKSksRT10ZihFLGYrZ1swXS5sZW5ndGgsRS5sZW5ndGgpLG4ubGFzdEluZGV4PTAsbz09RSYmKHdbcl09KEdhKDAsMSxFLmxlbmd0aCksRS5zdWJzdHIoMCwxKSksRT0oWG4oMSxFLmxlbmd0aCsxKSxFLnN1YnN0cigxKSkpLG89RSwrK3I7aWYoZS5sZW5ndGg+MCl7Zm9yKGE9dy5sZW5ndGg7YT4wJiZ3W2EtMV09PSIiOyktLWE7YTx3Lmxlbmd0aCYmKHcubGVuZ3RoPWEpfXJldHVybiB3fWZ1bmN0aW9uIEhjKCl7SGM9VSxwSWU9bmV3IGx3KDIwKSxnSWU9bmV3IEhhKChwaSgpLF8yKSxwSWUpLHpkZT1uZXcgSGEoRXYsMjApLG1JZT1uZXcgSGEoTE5lLDMpLHhUdD1uZXcgSGEoWjYsbFQpLFJXPW5ldyBIYShYQixwdCgxKSksTVR0PW5ldyBIYShxZ2UsKEhuKCksITApKSxsSWU9R0IsaEllPShKcygpLEoxKSx5Mz1uZXcgSGEoeHYsaEllKSxrVHQ9V0IsRVR0PU5nZSxDVHQ9a3YsU1R0PUM0LF9UdD1pNyxBVHQ9VWIsVFR0PXI3LGRJZT1ZQixMVHQ9UzQsd0llPShfOWUoKSx5VHQpLGJJZT12VHQsT1R0PUFNLE5UdD1hWSxJVHQ9UUIsRFR0PXNZLHZJZT0oZHgoKSxMNCksbmV3IEhhKGk5LHZJZSksVzY9bVR0LCRkZT1iVHQsJGQ9d1R0LHVJZT1nVHQsZkllPXBUdH1mdW5jdGlvbiBfQW4oZSl7dmFyIHQsbjtpZih0PWVpKGF0KGUsKHBpKCksZUMpKSksIUZmdCh0LGUpJiYhUDEoZSxhNykmJigoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkuaSE9MHx8UnQoQnQoYXQoZSxLQikpKSkpaWYodD09bnVsbHx8JHkodCkubGVuZ3RoPT0wKXtpZighRmZ0KHNyLGUpKXRocm93IG49aGkoaGkobmV3IFRoKCJVbmFibGUgdG8gbG9hZCBkZWZhdWx0IGxheW91dCBhbGdvcml0aG0gIiksc3IpLCIgZm9yIHVuY29uZmlndXJlZCBub2RlICIpLEdVKGUsbiksdWUobmV3IFZwKG4uYSkpfWVsc2UgdGhyb3cgbj1oaShoaShuZXcgVGgoIkxheW91dCBhbGdvcml0aG0gJyIpLHQpLCInIG5vdCBmb3VuZCBmb3IgIiksR1UoZSxuKSx1ZShuZXcgVnAobi5hKSl9ZnVuY3Rpb24gaGxlKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDLEwsQix6O2lmKG49ZS5pLHQ9ZS5uLGUuYj09MClmb3Ioej1uLmMrdC5iLEI9bi5iLXQuYi10LmMsZj1lLmEsdz0wLEM9Zi5sZW5ndGg7dzxDOysrdylhPWZbd10saEgoYSx6LEIpO2Vsc2Ugcj1BZHQoZSwhMSksaEgoZS5hWzBdLG4uYyt0LmIsclswXSksaEgoZS5hWzJdLG4uYytuLmItdC5jLXJbMl0sclsyXSksTD1uLmItdC5iLXQuYyxyWzBdPjAmJihMLT1yWzBdK2UuYyxyWzBdKz1lLmMpLHJbMl0+MCYmKEwtPXJbMl0rZS5jKSxyWzFdPWIuTWF0aC5tYXgoclsxXSxMKSxoSChlLmFbMV0sbi5jK3QuYityWzBdLShyWzFdLUwpLzIsclsxXSk7Zm9yKG89ZS5hLGc9MCxFPW8ubGVuZ3RoO2c8RTsrK2cpYT1vW2ddLERlKGEsMzM2KSYmbChhLDMzNikubGYoKX1mdW5jdGlvbiBBQW4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTDtmb3IoTD1uZXcgZnRlLEwuZD0wLGY9bmV3IEcoZS5iKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMzApLEwuZCs9by5hLmMubGVuZ3RoO2ZvcihyPTAsYT0wLEwuYT1XZShWcixkaSwyOCxlLmIuYy5sZW5ndGgsMTUsMSksRT0wLEM9MCxMLmU9V2UoVnIsZGksMjgsTC5kLDE1LDEpLG49bmV3IEcoZS5iKTtuLmE8bi5jLmMubGVuZ3RoOylmb3IodD1sKHJlKG4pLDMwKSx0LnA9cisrLEwuYVt0LnBdPWErKyxDPTAsdz1uZXcgRyh0LmEpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwxMCksZy5wPUUrKyxMLmVbZy5wXT1DKys7cmV0dXJuIEwuYz1uZXcgaVhlKEwpLEwuYj1lZyhMLmQpLEtfbihMLGUpLEwuZj1lZyhMLmQpLFdfbihMLGUpLEx9ZnVuY3Rpb24gam10KGUsdCl7dmFyIG4scixhLG87Zm9yKG89bChqdChlLm4sZS5uLmMubGVuZ3RoLTEpLDIwOSkuZCxlLnA9Yi5NYXRoLm1pbihlLnAsdC5nKSxlLnI9Yi5NYXRoLm1heChlLnIsbyksZS5nPWIuTWF0aC5tYXgoZS5nLHQuZysoZS5iLmMubGVuZ3RoPT0xPzA6ZS5pKSksZS5vPWIuTWF0aC5taW4oZS5vLHQuZiksZS5lKz10LmYrKGUuYi5jLmxlbmd0aD09MT8wOmUuaSksZS5mPWIuTWF0aC5tYXgoZS5mLHQuZiksYT1lLm4uYy5sZW5ndGg+MD8oZS5uLmMubGVuZ3RoLTEpKmUuaTowLHI9bmV3IEcoZS5uKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMjA5KSxhKz1uLmE7ZS5kPWEsZS5hPWUuZS9lLmIuYy5sZW5ndGgtZS5pKigoZS5iLmMubGVuZ3RoLTEpL2UuYi5jLmxlbmd0aCksaXhlKGUuail9ZnVuY3Rpb24gJG10KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEw7aWYoQz1CdChRKHQsKGIwKCksdDh0KSkpLEM9PW51bGx8fChucihDKSxDKSl7Zm9yKEw9V2UoaWgscGcsMjgsdC5lLmMubGVuZ3RoLDE2LDEpLGY9cEVuKHQpLGE9bmV3IG9zLEU9bmV3IEcodC5lKTtFLmE8RS5jLmMubGVuZ3RoOylnPWwocmUoRSksMTUzKSxuPUY5ZShlLGcsbnVsbCxudWxsLEwsZiksbiYmKHBjKG4sdCksQ3MoYSxuLGEuYy5iLGEuYykpO2lmKGEuYj4xKWZvcihyPVJyKGEsMCk7ci5iIT1yLmQuYzspZm9yKG49bChCcihyKSwyMzUpLG89MCx3PW5ldyBHKG4uZSk7dy5hPHcuYy5jLmxlbmd0aDspZz1sKHJlKHcpLDE1MyksZy5hPW8rKztyZXR1cm4gYX1yZXR1cm4gTzEoaGUobGUoeU9uLDEpLGszdCwyMzUsMCxbdF0pKX1mdW5jdGlvbiBTZChlKXt2YXIgdCxuLHIsYSxvLGYsZztpZighZS5nKXtpZihnPW5ldyBTSSx0PXFNLGY9dC5hLnpjKGUsdCksZj09bnVsbCl7Zm9yKHI9bmV3IG9yKGRjKGUpKTtyLmUhPXIuaS5nYygpOyluPWwoZ3IociksMjkpLEFzKGcsU2QobikpO3QuYS5CYyhlKSE9bnVsbCx0LmEuZ2MoKT09MH1mb3IoYT1nLmksbz0oIWUucyYmKGUucz1uZXcgbnQoZGwsZSwyMSwxNykpLG5ldyBvcihlLnMpKTtvLmUhPW8uaS5nYygpOysrYSlzdChsKGdyKG8pLDQ2MiksYSk7QXMoZywoIWUucyYmKGUucz1uZXcgbnQoZGwsZSwyMSwxNykpLGUucykpLEl5KGcpLGUuZz1uZXcgZzB0KGUsZyksZS5pPWwoZy5nLDI1NCksZS5pPT1udWxsJiYoZS5pPW5wZSksZS5wPW51bGwsWWwoZSkuYiY9LTV9cmV0dXJuIGUuZ31mdW5jdGlvbiBMQW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7aWYobj10LnFpKGUuYSksbiYmKHc9ZWkobjEoKCFuLmImJihuLmI9bmV3IGRoKChUbigpLE5vKSxZYyxuKSksbi5iKSwibWVtYmVyVHlwZXMiKSksdyE9bnVsbCkpe2ZvcihFPW5ldyBidCxvPUd5KHcsIlxcdyIpLGY9MCxnPW8ubGVuZ3RoO2Y8ZzsrK2YpYT1vW2ZdLHI9YS5sYXN0SW5kZXhPZigiIyIpLEM9cj09LTE/enllKGUsdC5qaygpLGEpOnI9PTA/b04oZSxudWxsLChYbigxLGEubGVuZ3RoKzEpLGEuc3Vic3RyKDEpKSk6b04oZSwoR2EoMCxyLGEubGVuZ3RoKSxhLnN1YnN0cigwLHIpKSwoWG4ocisxLGEubGVuZ3RoKzEpLGEuc3Vic3RyKHIrMSkpKSxEZShDLDE1NikmJnZ0KEUsbChDLDE1NikpO3JldHVybiBFfXJldHVybiBDbigpLENuKCksX299ZnVuY3Rpb24gZmxlKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDLEwsQix6LFY7aWYocj1lLmksbj1lLm4sZS5iPT0wKXQ9X2R0KGUsITEpLGZIKGUuYVswXSxyLmQrbi5kLHRbMF0pLGZIKGUuYVsyXSxyLmQrci5hLW4uYS10WzJdLHRbMl0pLEI9ci5hLW4uZC1uLmEsTD1CLHRbMF0+MCYmKHRbMF0rPWUuYyxMLT10WzBdKSx0WzJdPjAmJihMLT10WzJdK2UuYyksdFsxXT1iLk1hdGgubWF4KHRbMV0sTCksZkgoZS5hWzFdLHIuZCtuLmQrdFswXS0odFsxXS1MKS8yLHRbMV0pO2Vsc2UgZm9yKFY9ci5kK24uZCx6PXIuYS1uLmQtbi5hLGY9ZS5hLHc9MCxDPWYubGVuZ3RoO3c8QzsrK3cpYT1mW3ddLGZIKGEsVix6KTtmb3Iobz1lLmEsZz0wLEU9by5sZW5ndGg7ZzxFOysrZylhPW9bZ10sRGUoYSwzMzYpJiZsKGEsMzM2KS5tZigpfWZ1bmN0aW9uIE1BbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQztmb3IoQz1XZShWcixkaSwyOCxlLmIuYy5sZW5ndGgrMSwxNSwxKSxFPW5ldyBLcyxyPTAsbz1uZXcgRyhlLmIpO28uYTxvLmMuYy5sZW5ndGg7KXtmb3IoYT1sKHJlKG8pLDMwKSxDW3IrK109RS5hLmdjKCksdz1uZXcgRyhhLmEpO3cuYTx3LmMuYy5sZW5ndGg7KWZvcihmPWwocmUodyksMTApLG49bmV3IGhyKGRyKHFzKGYpLmEuS2MoKSxuZXcgaikpO2pyKG4pOyl0PWwoeHIobiksMTgpLEUuYS56Yyh0LEUpO2ZvcihnPW5ldyBHKGEuYSk7Zy5hPGcuYy5jLmxlbmd0aDspZm9yKGY9bChyZShnKSwxMCksbj1uZXcgaHIoZHIoa2EoZikuYS5LYygpLG5ldyBqKSk7anIobik7KXQ9bCh4cihuKSwxOCksRS5hLkJjKHQpIT1udWxsfXJldHVybiBDfWZ1bmN0aW9uICRVKGUsdCxuLHIpe3ZhciBhLG8sZixnLHc7aWYodz1XdShlLmUuRGgoKSx0KSxhPWwoZS5nLDEyNCksRm8oKSxsKHQsNjkpLnhrKCkpe2ZvcihmPTA7ZjxlLmk7KytmKWlmKG89YVtmXSx3LmFtKG8uTGsoKSkmJlBpKG8sbikpcmV0dXJuITB9ZWxzZSBpZihuIT1udWxsKXtmb3IoZz0wO2c8ZS5pOysrZylpZihvPWFbZ10sdy5hbShvLkxrKCkpJiZQaShuLG8ubWQoKSkpcmV0dXJuITA7aWYocil7Zm9yKGY9MDtmPGUuaTsrK2YpaWYobz1hW2ZdLHcuYW0oby5MaygpKSYmcWUobik9PT1xZShjYWUoZSxsKG8ubWQoKSw1OCkpKSlyZXR1cm4hMH19ZWxzZSBmb3IoZj0wO2Y8ZS5pOysrZilpZihvPWFbZl0sdy5hbShvLkxrKCkpJiZvLm1kKCk9PW51bGwpcmV0dXJuITE7cmV0dXJuITF9ZnVuY3Rpb24gREFuKGUsdCl7dmFyIG4scixhLG8sZixnO2lmKG49dC5xaShlLmEpLG4mJihnPWVpKG4xKCghbi5iJiYobi5iPW5ldyBkaCgoVG4oKSxObyksWWMsbikpLG4uYiksekcpKSxnIT1udWxsKSlzd2l0Y2goYT1ScShnLGNsKDM1KSkscj10LnFrKCksYT09LTE/KGY9S18oZSxBaChyKSksbz1nKTphPT0wPyhmPW51bGwsbz0oWG4oMSxnLmxlbmd0aCsxKSxnLnN1YnN0cigxKSkpOihmPShHYSgwLGEsZy5sZW5ndGgpLGcuc3Vic3RyKDAsYSkpLG89KFhuKGErMSxnLmxlbmd0aCsxKSxnLnN1YnN0cihhKzEpKSksa3coaWMoZSx0KSkpe2Nhc2UgMjpjYXNlIDM6cmV0dXJuIGh5bihlLHIsZixvKTtjYXNlIDA6Y2FzZSA0OmNhc2UgNTpjYXNlIDY6cmV0dXJuIGZ5bihlLHIsZixvKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB6bXQoZSx0LG4scil7dmFyIGEsbyxmLGc7Zm9yKGc9bixmPW5ldyBHKHQuYSk7Zi5hPGYuYy5jLmxlbmd0aDspe2lmKG89bChyZShmKSwyMjUpLGE9bChvLmIsNjgpLEZ3KGUuYi5jLGEuYi5jK2EuYi5iKTw9MCYmRncoYS5iLmMsZS5iLmMrZS5iLmIpPD0wJiZGdyhlLmIuZCxhLmIuZCthLmIuYSk8PTAmJkZ3KGEuYi5kLGUuYi5kK2UuYi5hKTw9MCl7aWYoRncoYS5iLmMsZS5iLmMrZS5iLmIpPT0wJiZyLmE8MHx8RncoYS5iLmMrYS5iLmIsZS5iLmMpPT0wJiZyLmE+MHx8RncoYS5iLmQsZS5iLmQrZS5iLmEpPT0wJiZyLmI8MHx8RncoYS5iLmQrYS5iLmEsZS5iLmQpPT0wJiZyLmI+MCl7Zz0wO2JyZWFrfX1lbHNlIGc9Yi5NYXRoLm1pbihnLEJwdChlLGEscikpO2c9Yi5NYXRoLm1pbihnLHptdChlLG8sZyxyKSl9cmV0dXJuIGd9ZnVuY3Rpb24gZFAoZSx0KXt2YXIgbixyLGEsbyxmLGcsdztpZihlLmI8Mil0aHJvdyB1ZShuZXcgWW4oIlRoZSB2ZWN0b3IgY2hhaW4gbXVzdCBjb250YWluIGF0IGxlYXN0IGEgc291cmNlIGFuZCBhIHRhcmdldCBwb2ludC4iKSk7Zm9yKGE9KG1yKGUuYiE9MCksbChlLmEuYS5jLDgpKSxrTyh0LGEuYSxhLmIpLHc9bmV3IHE4KCghdC5hJiYodC5hPW5ldyBZcyhxaCx0LDUpKSx0LmEpKSxmPVJyKGUsMSk7Zi5hPGUuYi0xOylnPWwoQnIoZiksOCksdy5lIT13LmkuZ2MoKT9uPWwoZ3IodyksMzc3KToobj0ocmIoKSxyPW5ldyBBUyxyKSxEMXQodyxuKSksV3NlKG4sZy5hLGcuYik7Zm9yKDt3LmUhPXcuaS5nYygpOylncih3KSxqQSh3KTtvPShtcihlLmIhPTApLGwoZS5jLmIuYyw4KSkseE8odCxvLmEsby5iKX1mdW5jdGlvbiBxbXQoZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFO2lmKEU9V3UoZS5lLkRoKCksdCksZj1sKGUuZywxMjQpLHVwKGUuZSx0KSl7aWYodC5TaSgpJiYobz1YRShlLHQscixEZSh0LDEwMikmJihsKHQsMTkpLkJiJklvKSE9MCksbz49MCYmbyE9bikpdGhyb3cgdWUobmV3IFluKFdQKSk7Zm9yKGE9MCx3PTA7dzxlLmk7Kyt3KWlmKGc9Zlt3XSxFLmFtKGcuTGsoKSkpe2lmKGE9PW4pcmV0dXJuIGwobjYoZSx3LChGbygpLGwodCw2OSkueGsoKT9sKHIsNzYpOnNnKHQscikpKSw3Nik7KythfXRocm93IHVlKG5ldyB0YyhDTCtuK2F2K2EpKX1lbHNle2Zvcih3PTA7dzxlLmk7Kyt3KWlmKGc9Zlt3XSxFLmFtKGcuTGsoKSkpcmV0dXJuIEZvKCksbCh0LDY5KS54aygpP2c6Zy5tZCgpO3JldHVybiBudWxsfX1mdW5jdGlvbiBIbXQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7Zm9yKG49MCxhPW5ldyBHKChTbigwLGUuYy5sZW5ndGgpLGwoZS5jWzBdLDEwNSkpLmcuYi5qKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTIpLHIucD1uKys7Zm9yKHQ9PShDdCgpLFFuKT9WcyhlLG5ldyB4ZWUpOlZzKGUsbmV3IGtlZSksZz0wLEM9ZS5jLmxlbmd0aC0xO2c8QzspZj0oU24oZyxlLmMubGVuZ3RoKSxsKGUuY1tnXSwxMDUpKSxFPShTbihDLGUuYy5sZW5ndGgpLGwoZS5jW0NdLDEwNSkpLG89dD09UW4/Zi5jOmYuYSx3PXQ9PVFuP0UuYTpFLmMsUXAoZix0LChSMSgpLERUKSxvKSxRcChFLHQsTVQsdyksKytnLC0tQztnPT1DJiZRcCgoU24oZyxlLmMubGVuZ3RoKSxsKGUuY1tnXSwxMDUpKSx0LChSMSgpLFZ4KSxudWxsKX1mdW5jdGlvbiBJQW4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFO2ZvcihmPW5ldyB5dnQoZSx0LG4pLHc9bmV3IFVhKHIsMCksYT0hMTt3LmI8dy5kLmdjKCk7KWc9KG1yKHcuYjx3LmQuZ2MoKSksbCh3LmQuWGIody5jPXcuYisrKSwyMzkpKSxnPT10fHxnPT1uP3BoKHcpOiFhJiZ6ZShMMShnLmcsZy5kWzBdKS5hKT56ZShMMShmLmcsZi5kWzBdKS5hKT8obXIody5iPjApLHcuYS5YYih3LmM9LS13LmIpLGJ5KHcsZiksYT0hMCk6Zy5lJiZnLmUuZ2MoKT4wJiYobz0oIWcuZSYmKGcuZT1uZXcgYnQpLGcuZSkuTWModCksRT0oIWcuZSYmKGcuZT1uZXcgYnQpLGcuZSkuTWMobiksKG98fEUpJiYoKCFnLmUmJihnLmU9bmV3IGJ0KSxnLmUpLkZjKGYpLCsrZi5jKSk7YXx8JG4oci5jLGYpfWZ1bmN0aW9uIE9BbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmU7cmV0dXJuIEw9ZS5hLmkrZS5hLmcvMixCPWUuYS5pK2UuYS5nLzIsVj10LmkrdC5nLzIsdGU9dC5qK3QuZi8yLGc9bmV3IGx0KFYsdGUpLEU9bChhdCh0LChwaSgpLG45KSksOCksRS5hPUUuYStMLEUuYj1FLmIrQixvPShnLmItRS5iKS8oZy5hLUUuYSkscj1nLmItbypnLmEsSj1uLmkrbi5nLzIsZmU9bi5qK24uZi8yLHc9bmV3IGx0KEosZmUpLEM9bChhdChuLG45KSw4KSxDLmE9Qy5hK0wsQy5iPUMuYitCLGY9KHcuYi1DLmIpLyh3LmEtQy5hKSxhPXcuYi1mKncuYSx6PShyLWEpLyhmLW8pLEUuYTx6JiZnLmE8enx8ejxFLmEmJno8Zy5hPyExOiEoQy5hPHomJncuYTx6fHx6PEMuYSYmejx3LmEpfWZ1bmN0aW9uIE5BbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIsejtpZihCPWwoY3IoZS5jLHQpLDE5MCksIUIpdGhyb3cgdWUobmV3IGRkKCJFZGdlIGRpZCBub3QgZXhpc3QgaW4gaW5wdXQuIikpO3JldHVybiBFPU5FKEIpLG89WkkoKCF0LmEmJih0LmE9bmV3IG50KGNzLHQsNiw2KSksdC5hKSksZz0hbyxnJiYoej1uZXcgJHAsbj1uZXcgeWl0KGUsRSx6KSxFbG4oKCF0LmEmJih0LmE9bmV3IG50KGNzLHQsNiw2KSksdC5hKSxuKSxlMShCLGZTZSx6KSksYT1QMSh0LChwaSgpLHgzKSksYSYmKEM9bChhdCh0LHgzKSw3NSksZj0hQ3x8b2F0KEMpLHc9IWYsdyYmKEw9bmV3ICRwLHI9bmV3IHRRZShMKSx0byhDLHIpLGUxKEIsImp1bmN0aW9uUG9pbnRzIixMKSkpLHprKEIsImNvbnRhaW5lciIsV08odCkuayksbnVsbH1mdW5jdGlvbiBWbXQoZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFO2lmKCFaayh0KSl7aWYoRT1uLmVoKChEZSh0LDE2KT9sKHQsMTYpLmdjKCk6WGcodC5LYygpKSkvZS5hfDApLEUuVWcoZHl0LDEpLHc9bmV3IHQkLGc9MCxyPT0oSnMoKSx1Yyl8fHI9PXZjKWZvcihmPXQuS2MoKTtmLk9iKCk7KWE9bChmLlBiKCksNDApLHc9TGgoaGUobGUoRmgsMSksUm4sMjAsMCxbdyxuZXcgSGcoYSldKSksZzxhLmYuYSYmKGc9YS5mLmEpO2Vsc2UgZm9yKGY9dC5LYygpO2YuT2IoKTspYT1sKGYuUGIoKSw0MCksdz1MaChoZShsZShGaCwxKSxSbiwyMCwwLFt3LG5ldyBIZyhhKV0pKSxnPGEuZi5iJiYoZz1hLmYuYik7Zm9yKG89dC5LYygpO28uT2IoKTspYT1sKG8uUGIoKSw0MCkscnQoYSwoUWkoKSxGVyksZyk7RS5WZygpLFZtdChlLHcsbixyKX19ZnVuY3Rpb24gQ2tlKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDO3RoaXMuYT1lLHRoaXMuYj10LHRoaXMuYz1uLHRoaXMuZT1PMShoZShsZShtT24sMSksUm4sMTc3LDAsW25ldyBCOChlLHQpLG5ldyBCOCh0LG4pLG5ldyBCOChuLGUpXSkpLHRoaXMuZj1PMShoZShsZShFYSwxKSxkdCw4LDAsW2UsdCxuXSkpLHRoaXMuZD0ocj1tYShKYSh0aGlzLmIpLHRoaXMuYSksYT1tYShKYSh0aGlzLmMpLHRoaXMuYSksbz1tYShKYSh0aGlzLmMpLHRoaXMuYiksZj1yLmEqKHRoaXMuYS5hK3RoaXMuYi5hKStyLmIqKHRoaXMuYS5iK3RoaXMuYi5iKSxnPWEuYSoodGhpcy5hLmErdGhpcy5jLmEpK2EuYioodGhpcy5hLmIrdGhpcy5jLmIpLHc9Miooci5hKm8uYi1yLmIqby5hKSxFPShhLmIqZi1yLmIqZykvdyxDPShyLmEqZy1hLmEqZikvdyxuZXcgbHQoRSxDKSl9ZnVuY3Rpb24gVXcoZSx0KXt2YXIgbixyLGEsbyxmLGc7Zm9yKG89ZS5jLGY9ZS5kLHBvKGUsbnVsbCksRmEoZSxudWxsKSx0JiZSdChCdChRKGYsKGZ0KCksVjFlKSkpKT9wbyhlLHZrZShmLmksKHFvKCksenUpLChDdCgpLGFyKSkpOnBvKGUsZiksdCYmUnQoQnQoUShvLChmdCgpLEcxZSkpKSk/RmEoZSx2a2Uoby5pLChxbygpLCRsKSwoQ3QoKSxlcikpKTpGYShlLG8pLHI9bmV3IEcoZS5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksNzIpLGE9bChRKG4sKE50KCksamQpKSwyNzgpLGE9PShGMSgpLHJDKT9ydChuLGpkLF80KTphPT1fNCYmcnQobixqZCxyQyk7Zz1SdChCdChRKGUsKGZ0KCksVzEpKSkpLHJ0KGUsVzEsKEhuKCksIWcpKSxlLmE9QU4oZS5hKX1mdW5jdGlvbiBQQW4oZSx0KXt2YXIgbixyLGEsbyxmO3JldHVybiBuPUJFKGwoUSh0LChIYygpLHkzKSksODgpKSxlLmIuYj09MD9udWxsOihmPWwoeWMoZmMobmV3IGJuKG51bGwsbmV3IGtuKGUuYiwxNikpLG5ldyBQdGUpLFBsKG5ldyB6cixuZXcgaHQsbmV3IEZuLGhlKGxlKG9jLDEpLGl0LDEwOCwwLFsoRmwoKSxFYyldKSkpLDE1KSxvPWwoeWMoRmkobmV3IGJuKG51bGwsbmV3IGtuKHQuYiwxNikpLG5ldyBhWGUoZikpLFBsKG5ldyB6cixuZXcgaHQsbmV3IEZuLGhlKGxlKG9jLDEpLGl0LDEwOCwwLFtFY10pKSksMTUpLGE9R2UoZmgodnkoZmMoby5PYygpLG5ldyBvWGUobikpLChFdygpLEV3KCksRDBlKSkpKSxyPWwoZmgoa0UoRmkoby5PYygpLG5ldyBldHQobixhKSkpKSw0MCkscil9ZnVuY3Rpb24gQkFuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZTtuPWh3KG5ldyBTbSxlLmYpLEU9ZS5pW3QuYy5pLnBdLHo9ZS5pW3QuZC5pLnBdLHc9dC5jLEI9dC5kLGc9dy5hLmIsTD1CLmEuYixFLmJ8fChnKz13Lm4uYiksei5ifHwoTCs9Qi5uLmIpLEM9dWEoYi5NYXRoLm1heCgwLGctTCkpLGY9dWEoYi5NYXRoLm1heCgwLEwtZykpLFY9KEo9Yi5NYXRoLm1heCgxLGwoUSh0LChOdCgpLEp4KSksMTcpLmEpLHRlPXU2ZSh0LmMuaS5rLHQuZC5pLmspLEoqdGUpLGE9cDAoczAoaTAocjAoYTAobmV3IF9mLFYpLGYpLG4pLGwoY3IoZS5rLHQuYyksMTI1KSkpLG89cDAoczAoaTAocjAoYTAobmV3IF9mLFYpLEMpLG4pLGwoY3IoZS5rLHQuZCksMTI1KSkpLHI9bmV3IEhldChhLG8pLGUuY1t0LnBdPXJ9ZnVuY3Rpb24gRkFuKGUsdCxuKXt2YXIgcixhLG8sZixnLHc7Zm9yKHI9MCxvPW5ldyBvcigoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkpO28uZSE9by5pLmdjKCk7KWE9bChncihvKSwyNyksZj0iIiwoIWEubiYmKGEubj1uZXcgbnQoZWMsYSwxLDcpKSxhLm4pLmk9PTB8fChmPWwoT2UoKCFhLm4mJihhLm49bmV3IG50KGVjLGEsMSw3KSksYS5uKSwwKSwxMzUpLmEpLGc9bmV3IHdudChmKSxwYyhnLGEpLHJ0KGcsKGJiKCksSHgpLGEpLGcuYT1yKyssZy5kLmE9YS5pK2EuZy8yLGcuZC5iPWEuaithLmYvMixnLmUuYT1iLk1hdGgubWF4KGEuZywxKSxnLmUuYj1iLk1hdGgubWF4KGEuZiwxKSx2dCh0LmUsZyksanUobi5mLGEsZyksdz1sKGF0KGEsKGIwKCksckFlKSksMTAxKSx3PT0oUmEoKSxXYikmJih3PVoxKX1mdW5jdGlvbiBSQW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdzt0LlVnKCJMYXllciBjb25zdHJhaW50IHBvc3Rwcm9jZXNzaW5nIiwxKSx3PWUuYix3LmMubGVuZ3RoIT0wJiYocj0oU24oMCx3LmMubGVuZ3RoKSxsKHcuY1swXSwzMCkpLGY9bChqdCh3LHcuYy5sZW5ndGgtMSksMzApLG49bmV3IHl1KGUpLG89bmV3IHl1KGUpLENfbihlLHIsZixuLG8pLG4uYS5jLmxlbmd0aD09MHx8KEV5KDAsdy5jLmxlbmd0aCkseF8ody5jLDAsbikpLG8uYS5jLmxlbmd0aD09MHx8JG4ody5jLG8pKSxucyhlLChmdCgpLEgxZSkpJiYoYT1uZXcgeXUoZSksZz1uZXcgeXUoZSksYlNuKGUsYSxnKSxhLmEuYy5sZW5ndGg9PTB8fChFeSgwLHcuYy5sZW5ndGgpLHhfKHcuYywwLGEpKSxnLmEuYy5sZW5ndGg9PTB8fCRuKHcuYyxnKSksdC5WZygpfWZ1bmN0aW9uIGdQKGUpe3ZhciB0LG4scjtzd2l0Y2goZSl7Y2FzZSA5MTpjYXNlIDkzOmNhc2UgNDU6Y2FzZSA5NDpjYXNlIDQ0OmNhc2UgOTI6cj0iXFwiK1N0cmluZy5mcm9tQ2hhckNvZGUoZSZacyk7YnJlYWs7Y2FzZSAxMjpyPSJcXGYiO2JyZWFrO2Nhc2UgMTA6cj0iXFxuIjticmVhaztjYXNlIDEzOnI9IlxcciI7YnJlYWs7Y2FzZSA5OnI9IlxcdCI7YnJlYWs7Y2FzZSAyNzpyPSJcXGUiO2JyZWFrO2RlZmF1bHQ6ZTwzMj8obj0odD1lPj4+MCwiMCIrdC50b1N0cmluZygxNikpLHI9IlxceCIrdGYobixuLmxlbmd0aC0yLG4ubGVuZ3RoKSk6ZT49SW8/KG49KHQ9ZT4+PjAsIjAiK3QudG9TdHJpbmcoMTYpKSxyPSJcXHYiK3RmKG4sbi5sZW5ndGgtNixuLmxlbmd0aCkpOnI9IiIrU3RyaW5nLmZyb21DaGFyQ29kZShlJlpzKX1yZXR1cm4gcn1mdW5jdGlvbiBVbXQoZSl7dmFyIHQsbixyO2lmKFA1KGwoUShlLChOdCgpLE1zKSksMTAxKSkpZm9yKG49bmV3IEcoZS5qKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMTIpLHQuaj09KEN0KCksUGMpJiYocj1sKFEodCwoZnQoKSxqbCkpLDEwKSxyP2xhKHQsbChRKHIsV2MpLDY0KSk6dC5lLmMubGVuZ3RoLXQuZy5jLmxlbmd0aDwwP2xhKHQsYXIpOmxhKHQsZXIpKTtlbHNle2ZvcihuPW5ldyBHKGUuaik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDEyKSxyPWwoUSh0LChmdCgpLGpsKSksMTApLHI/bGEodCxsKFEocixXYyksNjQpKTp0LmUuYy5sZW5ndGgtdC5nLmMubGVuZ3RoPDA/bGEodCwoQ3QoKSxhcikpOmxhKHQsKEN0KCksZXIpKTtydChlLE1zLChSYSgpLHNDKSl9fWZ1bmN0aW9uIFNrZShlKXt2YXIgdCxuLHIsYSxvLGY7Zm9yKHRoaXMuZT1uZXcgYnQsdGhpcy5hPW5ldyBidCxuPWUuYi0xO248MztuKyspUGsoZSwwLGwoZmYoZSwwKSw4KSk7aWYoZS5iPDQpdGhyb3cgdWUobmV3IFluKCJBdCAobGVhc3QgZGltZW5zaW9uICsgMSkgY29udHJvbCBwb2ludHMgYXJlIG5lY2Vzc2FyeSEiKSk7Zm9yKHRoaXMuYj0zLHRoaXMuZD0hMCx0aGlzLmM9ITEsZlRuKHRoaXMsZS5iK3RoaXMuYi0xKSxmPW5ldyBidCxvPW5ldyBHKHRoaXMuZSksdD0wO3Q8dGhpcy5iLTE7dCsrKXZ0KGYsR2UocmUobykpKTtmb3IoYT1ScihlLDApO2EuYiE9YS5kLmM7KXI9bChCcihhKSw4KSx2dChmLEdlKHJlKG8pKSksdnQodGhpcy5hLG5ldyByb3QocixmKSksU24oMCxmLmMubGVuZ3RoKSxmLmMuc3BsaWNlKDAsMSl9ZnVuY3Rpb24gR210KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2ZvcihvPW5ldyBHKGUuYik7by5hPG8uYy5jLmxlbmd0aDspZm9yKGE9bChyZShvKSwzMCksZz1uZXcgRyhhLmEpO2cuYTxnLmMuYy5sZW5ndGg7KWZvcihmPWwocmUoZyksMTApLGYuaz09KFpuKCksY3UpJiYodz0oRT1sKHhyKG5ldyBocihkcihrYShmKS5hLktjKCksbmV3IGopKSksMTgpLEM9bCh4cihuZXcgaHIoZHIocXMoZikuYS5LYygpLG5ldyBqKSkpLDE4KSwhUnQoQnQoUShFLChmdCgpLFcxKSkpKXx8IVJ0KEJ0KFEoQyxXMSkpKT90OmMwdCh0KSksVHgoZix3KSkscj1uZXcgaHIoZHIocXMoZikuYS5LYygpLG5ldyBqKSk7anIocik7KW49bCh4cihyKSwxOCksdz1SdChCdChRKG4sKGZ0KCksVzEpKSkpP2MwdCh0KTp0LHQwdChuLHcpfWZ1bmN0aW9uIGpBbihlLHQsbixyLGEpe3ZhciBvLGYsZztpZihuLmY+PXQubyYmbi5mPD10LmZ8fHQuYSouNTw9bi5mJiZ0LmEqMS41Pj1uLmYpe2lmKGY9bChqdCh0Lm4sdC5uLmMubGVuZ3RoLTEpLDIwOSksZi5lK2YuZCtuLmcrYTw9ciYmKG89bChqdCh0Lm4sdC5uLmMubGVuZ3RoLTEpLDIwOSksby5mLWUuZituLmY8PWUuYnx8ZS5hLmMubGVuZ3RoPT0xKSlyZXR1cm4geThlKHQsbiksITA7aWYodC5zK24uZzw9ciYmKHQudCt0LmQrbi5mK2E8PWUuYnx8ZS5hLmMubGVuZ3RoPT0xKSlyZXR1cm4gdnQodC5iLG4pLGc9bChqdCh0Lm4sdC5uLmMubGVuZ3RoLTEpLDIwOSksdnQodC5uLG5ldyBQSCh0LnMsZy5mK2cuYSt0LmksdC5pKSksZXhlKGwoanQodC5uLHQubi5jLmxlbmd0aC0xKSwyMDkpLG4pLGptdCh0LG4pLCEwfXJldHVybiExfWZ1bmN0aW9uIEttdChlLHQsbil7dmFyIHIsYSxvLGY7cmV0dXJuIGUuUGooKT8oYT1udWxsLG89ZS5RaigpLHI9ZS5JaigxLGY9VW9lKGUsdCxuKSxuLHQsbyksZS5NaigpJiYhKGUuWWkoKSYmZiE9bnVsbD9QaShmLG4pOnFlKGYpPT09cWUobikpPyhmIT1udWxsJiYoYT1lLk9qKGYsYSkpLGE9ZS5OaihuLGEpLGUuVGooKSYmKGE9ZS5XaihmLG4sYSkpLGE/KGEubmoociksYS5vaigpKTplLkpqKHIpKTooZS5UaigpJiYoYT1lLldqKGYsbixhKSksYT8oYS5uaihyKSxhLm9qKCkpOmUuSmoocikpLGYpOihmPVVvZShlLHQsbiksZS5NaigpJiYhKGUuWWkoKSYmZiE9bnVsbD9QaShmLG4pOnFlKGYpPT09cWUobikpJiYoYT1udWxsLGYhPW51bGwmJihhPWUuT2ooZixudWxsKSksYT1lLk5qKG4sYSksYSYmYS5vaigpKSxmKX1mdW5jdGlvbiAkQW4oZSx0KXt2YXIgbixyLGEsbyxmO2lmKHQuVWcoIlBhdGgtTGlrZSBHcmFwaCBXcmFwcGluZyIsMSksZS5iLmMubGVuZ3RoPT0wKXt0LlZnKCk7cmV0dXJufWlmKGE9bmV3IE05ZShlKSxmPShhLmk9PW51bGwmJihhLmk9eDdlKGEsbmV3IEdqKSksemUoYS5pKSphLmYpLG49Zi8oYS5pPT1udWxsJiYoYS5pPXg3ZShhLG5ldyBHaikpLHplKGEuaSkpLGEuYj5uKXt0LlZnKCk7cmV0dXJufXN3aXRjaChsKFEoZSwoTnQoKSxoZGUpKSwzNTEpLmcpe2Nhc2UgMjpvPW5ldyBXajticmVhaztjYXNlIDA6bz1uZXcgRVM7YnJlYWs7ZGVmYXVsdDpvPW5ldyBZan1pZihyPW8ub2coZSxhKSwhby5wZygpKXN3aXRjaChsKFEoZSxFVyksMzUyKS5nKXtjYXNlIDI6cj1GcHQoYSxyKTticmVhaztjYXNlIDE6cj1BZ3QoYSxyKX1CTG4oZSxhLHIpLHQuVmcoKX1mdW5jdGlvbiBYQShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEU7dCU9MjQsZS5xLmdldEhvdXJzKCkhPXQmJihyPW5ldyBiLkRhdGUoZS5xLmdldFRpbWUoKSksci5zZXREYXRlKHIuZ2V0RGF0ZSgpKzEpLGc9ZS5xLmdldFRpbWV6b25lT2Zmc2V0KCktci5nZXRUaW1lem9uZU9mZnNldCgpLGc+MCYmKHc9Zy82MHwwLEU9ZyU2MCxhPWUucS5nZXREYXRlKCksbj1lLnEuZ2V0SG91cnMoKSxuK3c+PTI0JiYrK2Esbz1uZXcgYi5EYXRlKGUucS5nZXRGdWxsWWVhcigpLGUucS5nZXRNb250aCgpLGEsdCt3LGUucS5nZXRNaW51dGVzKCkrRSxlLnEuZ2V0U2Vjb25kcygpLGUucS5nZXRNaWxsaXNlY29uZHMoKSksZS5xLnNldFRpbWUoby5nZXRUaW1lKCkpKSksZj1lLnEuZ2V0VGltZSgpLGUucS5zZXRUaW1lKGYrMzZlNSksZS5xLmdldEhvdXJzKCkhPXQmJmUucS5zZXRUaW1lKGYpfWZ1bmN0aW9uIHpBbihlLHQpe3ZhciBuLHIsYSxvO2lmKGVibihlLmQsZS5lKSxlLmMuYS4kYigpLHplKEdlKFEodC5qLChOdCgpLGhXKSkpKSE9MHx8emUoR2UoUSh0LmosaFcpKSkhPTApZm9yKG49eTYscWUoUSh0LmoseWcpKSE9PXFlKChFZCgpLEUyKSkmJnJ0KHQuaiwoZnQoKSxqYiksKEhuKCksITApKSxvPWwoUSh0Lmosbk0pLDE3KS5hLGE9MDthPG8mJihyPXRMbihlLHQpLCEocjxuJiYobj1yLHZmdChlKSxuPT0wKSkpO2ErKyk7ZWxzZSBmb3Iobj1JaSxxZShRKHQuaix5ZykpIT09cWUoKEVkKCksRTIpKSYmcnQodC5qLChmdCgpLGpiKSwoSG4oKSwhMCkpLG89bChRKHQuaixuTSksMTcpLmEsYT0wO2E8byYmKHI9Sm10KGUsdCksIShyPG4mJihuPXIsdmZ0KGUpLG49PTApKSk7YSsrKTt9ZnVuY3Rpb24gcUFuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRTtmb3IoZj1uZXcgYnQsZz0wLG49MCx3PTA7Zzx0LmMubGVuZ3RoLTEmJm48ZS5nYygpOyl7Zm9yKHI9bChlLlhiKG4pLDE3KS5hK3c7KFNuKGcrMSx0LmMubGVuZ3RoKSxsKHQuY1tnKzFdLDE3KSkuYTxyOykrK2c7Zm9yKEU9MCxvPXItKFNuKGcsdC5jLmxlbmd0aCksbCh0LmNbZ10sMTcpKS5hLGE9KFNuKGcrMSx0LmMubGVuZ3RoKSxsKHQuY1tnKzFdLDE3KSkuYS1yLG8+YSYmKytFLHZ0KGYsKFNuKGcrRSx0LmMubGVuZ3RoKSxsKHQuY1tnK0VdLDE3KSkpLHcrPShTbihnK0UsdC5jLmxlbmd0aCksbCh0LmNbZytFXSwxNykpLmEtciwrK247bjxlLmdjKCkmJmwoZS5YYihuKSwxNykuYSt3PD0oU24oZytFLHQuYy5sZW5ndGgpLGwodC5jW2crRV0sMTcpKS5hOykrK247Zys9MStFfXJldHVybiBmfWZ1bmN0aW9uIEhBbihlLHQpe3ZhciBuLHIsYSxvLGY7Zm9yKGY9bmV3IGhyKGRyKGthKHQpLmEuS2MoKSxuZXcgaikpO2pyKGYpOylpZihvPWwoeHIoZiksMTgpLGUuZi5iPT0wPyhhPW8uYy5pLms9PShabigpLFBzKSYmISFvLmMuaS5jJiZvLmMuaS5jLnA9PWUuYyxqcihuZXcgaHIoZHIoa2Eoby5jLmkpLmEuS2MoKSxuZXcgaikpKT8obj1sKHhyKG5ldyBocihkcihrYShvLmMuaSkuYS5LYygpLG5ldyBqKSkpLDE4KS5jLmkuYyxyPW8uYy5pLms9PWN1JiYhIW4mJm4ucD09ZS5jKTpyPSExKTooYT1vLmMuaS5rPT0oWm4oKSxQcykmJm8uYy5pLnA9PWUuYyxyPW8uYy5pLms9PWN1JiZsKHhyKG5ldyBocihkcihrYShvLmMuaSkuYS5LYygpLG5ldyBqKSkpLDE4KS5jLmkucD09ZS5jKSxhfHxyKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFZBbihlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWU7Zm9yKEI9bmV3IGJ0LGZlPUhIKHIpLHRlPXQqZS5hLEw9MCxWPTAsbz1uZXcgS3MsZj1uZXcgS3MsZz1uZXcgYnQsVGU9MCxNZT0wLHo9MCxKPTAsRT0wLEM9MDtmZS5hLmdjKCkhPTA7KXc9UjRuKGZlLGEsZiksdyYmKGZlLmEuQmModykhPW51bGwsJG4oZy5jLHcpLG8uYS56Yyh3LG8pLFY9ZS5mW3cucF0sVGUrPWUuZVt3LnBdLVYqZS5iLEw9ZS5jW3cucF0sTWUrPUwqZS5iLEMrPVYqZS5iLEorPWUuZVt3LnBdKSwoIXd8fGZlLmEuZ2MoKT09MHx8VGU+PXRlJiZlLmVbdy5wXT5WKmUuYnx8TWU+PW4qdGUpJiYoJG4oQi5jLGcpLGc9bmV3IGJ0LEthKGYsbyksby5hLiRiKCksRS09Qyx6PWIuTWF0aC5tYXgoeixFKmUuYitKKSxFKz1NZSxUZT1NZSxNZT0wLEM9MCxKPTApO3JldHVybiBuZXcgY2EoeixCKX1mdW5jdGlvbiBkbGUoZSl7dmFyIHQsbixyLGEsbyxmLGc7aWYoIWUuZCl7aWYoZz1uZXcgSm5lLHQ9cU0sbz10LmEuemMoZSx0KSxvPT1udWxsKXtmb3Iocj1uZXcgb3IoZGMoZSkpO3IuZSE9ci5pLmdjKCk7KW49bChncihyKSwyOSksQXMoZyxkbGUobikpO3QuYS5CYyhlKSE9bnVsbCx0LmEuZ2MoKT09MH1mb3IoZj1nLmksYT0oIWUucSYmKGUucT1uZXcgbnQoVWYsZSwxMSwxMCkpLG5ldyBvcihlLnEpKTthLmUhPWEuaS5nYygpOysrZilsKGdyKGEpLDQxMSk7QXMoZywoIWUucSYmKGUucT1uZXcgbnQoVWYsZSwxMSwxMCkpLGUucSkpLEl5KGcpLGUuZD1uZXcgTjUoKGwoT2UodHQoKGxiKCksVm4pLm8pLDkpLDE5KSxnLmkpLGcuZyksZS5lPWwoZy5nLDY4OCksZS5lPT1udWxsJiYoZS5lPVhfdCksWWwoZSkuYiY9LTE3fXJldHVybiBlLmR9ZnVuY3Rpb24gWEUoZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFO2lmKEU9V3UoZS5lLkRoKCksdCksdz0wLGE9bChlLmcsMTI0KSxGbygpLGwodCw2OSkueGsoKSl7Zm9yKGY9MDtmPGUuaTsrK2YpaWYobz1hW2ZdLEUuYW0oby5MaygpKSl7aWYoUGkobyxuKSlyZXR1cm4gdzsrK3d9fWVsc2UgaWYobiE9bnVsbCl7Zm9yKGc9MDtnPGUuaTsrK2cpaWYobz1hW2ddLEUuYW0oby5MaygpKSl7aWYoUGkobixvLm1kKCkpKXJldHVybiB3Oysrd31pZihyKXtmb3Iodz0wLGY9MDtmPGUuaTsrK2YpaWYobz1hW2ZdLEUuYW0oby5MaygpKSl7aWYocWUobik9PT1xZShjYWUoZSxsKG8ubWQoKSw1OCkpKSlyZXR1cm4gdzsrK3d9fX1lbHNlIGZvcihmPTA7ZjxlLmk7KytmKWlmKG89YVtmXSxFLmFtKG8uTGsoKSkpe2lmKG8ubWQoKT09bnVsbClyZXR1cm4gdzsrK3d9cmV0dXJuLTF9ZnVuY3Rpb24gVUFuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDLEwsQix6LFYsSjtpZihuLlhoKHQpJiYoQz0oej10LHo/bChyLDU0KS5naSh6KTpudWxsKSxDKSlpZihKPW4uTmgodCxlLmEpLFY9dC50LFY+MXx8Vj09LTEpaWYoTD1sKEosNzEpLEI9bChDLDcxKSxMLmRjKCkpQi4kYigpO2Vsc2UgZm9yKGY9ISFSbyh0KSxvPTAsZz1lLmE/TC5LYygpOkwuSWkoKTtnLk9iKCk7KUU9bChnLlBiKCksNTgpLGE9bChCMShlLEUpLDU4KSxhPyhmPyh3PUIuZGQoYSksdz09LTE/Qi5HaShvLGEpOm8hPXcmJkIuVWkobyxhKSk6Qi5HaShvLGEpLCsrbyk6ZS5iJiYhZiYmKEIuR2kobyxFKSwrK28pO2Vsc2UgSj09bnVsbD9DLldiKG51bGwpOihhPUIxKGUsSiksYT09bnVsbD9lLmImJiFSbyh0KSYmQy5XYihKKTpDLldiKGEpKX1mdW5jdGlvbiBHQW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFO2ZvcihuPW5ldyBnWixhPW5ldyBocihkcihrYSh0KS5hLktjKCksbmV3IGopKTtqcihhKTspaWYocj1sKHhyKGEpLDE4KSwhRG8ocikmJihnPXIuYy5pLEJ4ZShnLFNLKSkpe2lmKEU9dGtlKGUsZyxTSyxDSyksRT09LTEpY29udGludWU7bi5iPWIuTWF0aC5tYXgobi5iLEUpLCFuLmEmJihuLmE9bmV3IGJ0KSx2dChuLmEsZyl9Zm9yKGY9bmV3IGhyKGRyKHFzKHQpLmEuS2MoKSxuZXcgaikpO2pyKGYpOylpZihvPWwoeHIoZiksMTgpLCFEbyhvKSYmKHc9by5kLmksQnhlKHcsQ0spKSl7aWYoRT10a2UoZSx3LENLLFNLKSxFPT0tMSljb250aW51ZTtuLmQ9Yi5NYXRoLm1heChuLmQsRSksIW4uYyYmKG4uYz1uZXcgYnQpLHZ0KG4uYyx3KX1yZXR1cm4gbn1mdW5jdGlvbiBLQW4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEM7aWYobi5kLmkhPXQuaSl7Zm9yKGE9bmV3IG9wKGUpLHgoYSwoWm4oKSxBYSkpLHJ0KGEsKGZ0KCksemkpLG4pLHJ0KGEsKE50KCksTXMpLChSYSgpLE11KSksJG4oci5jLGEpLGY9bmV3IGd1LE1jKGYsYSksbGEoZiwoQ3QoKSxlcikpLGc9bmV3IGd1LE1jKGcsYSksbGEoZyxhciksQz1uLmQsRmEobixmKSxvPW5ldyBUdyxwYyhvLG4pLHJ0KG8sY2MsbnVsbCkscG8obyxnKSxGYShvLEMpLEU9bmV3IFVhKG4uYiwwKTtFLmI8RS5kLmdjKCk7KXc9KG1yKEUuYjxFLmQuZ2MoKSksbChFLmQuWGIoRS5jPUUuYisrKSw3MikpLHFlKFEodyxqZCkpPT09cWUoKEYxKCksXzQpKSYmKHJ0KHcsS3gsbikscGgoRSksdnQoby5iLHcpKTtTMnQoYSxmLGcpfX1mdW5jdGlvbiBXQW4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEM7aWYobi5jLmkhPXQuaSlmb3IoYT1uZXcgb3AoZSkseChhLChabigpLEFhKSkscnQoYSwoZnQoKSx6aSksbikscnQoYSwoTnQoKSxNcyksKFJhKCksTXUpKSwkbihyLmMsYSksZj1uZXcgZ3UsTWMoZixhKSxsYShmLChDdCgpLGVyKSksZz1uZXcgZ3UsTWMoZyxhKSxsYShnLGFyKSxGYShuLGYpLG89bmV3IFR3LHBjKG8sbikscnQobyxjYyxudWxsKSxwbyhvLGcpLEZhKG8sdCksUzJ0KGEsZixnKSxFPW5ldyBVYShuLmIsMCk7RS5iPEUuZC5nYygpOyl3PShtcihFLmI8RS5kLmdjKCkpLGwoRS5kLlhiKEUuYz1FLmIrKyksNzIpKSxDPWwoUSh3LGpkKSwyNzgpLEM9PShGMSgpLF80KSYmKG5zKHcsS3gpfHxydCh3LEt4LG4pLHBoKEUpLHZ0KG8uYix3KSl9ZnVuY3Rpb24gV210KGUpe0dFKCk7dmFyIHQsbixyLGE7aWYodD11YShlKSxlPEZMLmxlbmd0aClyZXR1cm4gRkxbdF07aWYoZTw9NTApcmV0dXJuIGlQKChDZCgpLE0wZSksdCk7aWYoZTw9YjIpcmV0dXJuIHN4KGlQKCR4WzFdLHQpLHQpO2lmKGU+MWU2KXRocm93IHVlKG5ldyBxeigicG93ZXIgb2YgdGVuIHRvbyBiaWciKSk7aWYoZTw9SWkpcmV0dXJuIHN4KGlQKCR4WzFdLHQpLHQpO2ZvcihyPWlQKCR4WzFdLElpKSxhPXIsbj1aYyhlLUlpKSx0PXVhKGUlSWkpO2l1KG4sSWkpPjA7KWE9SzUoYSxyKSxuPURmKG4sSWkpO2ZvcihhPUs1KGEsaVAoJHhbMV0sdCkpLGE9c3goYSxJaSksbj1aYyhlLUlpKTtpdShuLElpKT4wOylhPXN4KGEsSWkpLG49RGYobixJaSk7cmV0dXJuIGE9c3goYSx0KSxhfWZ1bmN0aW9uIFltdChlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQztmb3Iodz1uZXcgRyhlLmEpO3cuYTx3LmMuYy5sZW5ndGg7KWlmKGc9bChyZSh3KSwxMCksZy5rPT0oWm4oKSxVcykmJihhPWwoUShnLChmdCgpLFdjKSksNjQpLGE9PShDdCgpLGFyKXx8YT09ZXIpKWZvcihyPW5ldyBocihkcihzcChnKS5hLktjKCksbmV3IGopKTtqcihyKTspbj1sKHhyKHIpLDE4KSx0PW4uYSx0LmIhPTAmJihFPW4uYyxFLmk9PWcmJihvPShtcih0LmIhPTApLGwodC5hLmEuYyw4KSksby5iPUljKGhlKGxlKEVhLDEpLGR0LDgsMCxbRS5pLm4sRS5uLEUuYV0pKS5iKSxDPW4uZCxDLmk9PWcmJihmPShtcih0LmIhPTApLGwodC5jLmIuYyw4KSksZi5iPUljKGhlKGxlKEVhLDEpLGR0LDgsMCxbQy5pLm4sQy5uLEMuYV0pKS5iKSl9ZnVuY3Rpb24gUUEoZSx0LG4scil7dmFyIGEsbyxmO2lmKHRoaXMuaj1uZXcgYnQsdGhpcy5rPW5ldyBidCx0aGlzLmI9bmV3IGJ0LHRoaXMuYz1uZXcgYnQsdGhpcy5lPW5ldyAkOCx0aGlzLmk9bmV3IGJsLHRoaXMuZj1uZXcgQmllLHRoaXMuZD1uZXcgYnQsdGhpcy5nPW5ldyBidCx2dCh0aGlzLmIsZSksdnQodGhpcy5iLHQpLHRoaXMuZS5jPWIuTWF0aC5taW4oZS5hLHQuYSksdGhpcy5lLmQ9Yi5NYXRoLm1pbihlLmIsdC5iKSx0aGlzLmUuYj1iLk1hdGguYWJzKGUuYS10LmEpLHRoaXMuZS5hPWIuTWF0aC5hYnMoZS5iLXQuYiksYT1sKFEociwoTnQoKSxjYykpLDc1KSxhKWZvcihmPVJyKGEsMCk7Zi5iIT1mLmQuYzspbz1sKEJyKGYpLDgpLFg2ZShvLmEsZS5hKSYmdWkodGhpcy5pLG8pO24mJnZ0KHRoaXMuaixuKSx2dCh0aGlzLmsscil9ZnVuY3Rpb24gWUFuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDO2ZvcihnPS0xLEM9bmV3IEcoZSk7Qy5hPEMuYy5jLmxlbmd0aDspRT1sKHJlKEMpLDExOCksRS5nPWctLSxhPVlyKGpIKFRIKEZpKG5ldyBibihudWxsLG5ldyBrbihFLmYsMTYpKSxuZXcgYnRlKSxuZXcgbXRlKSkuZCksbz1ZcihqSChUSChGaShuZXcgYm4obnVsbCxuZXcga24oRS5rLDE2KSksbmV3IHZ0ZSksbmV3IHd0ZSkpLmQpLGY9YSx3PW8scnx8KGY9WXIoakgoVEgobmV3IGJuKG51bGwsbmV3IGtuKEUuZiwxNikpLG5ldyB5dGUpKS5kKSx3PVlyKGpIKFRIKG5ldyBibihudWxsLG5ldyBrbihFLmssMTYpKSxuZXcgZ3RlKSkuZCkpLEUuZD1mLEUuYT1hLEUuaT13LEUuYj1vLHc9PTA/Q3MobixFLG4uYy5iLG4uYyk6Zj09MCYmQ3ModCxFLHQuYy5iLHQuYyl9ZnVuY3Rpb24gVHgoZSx0KXt2YXIgbixyLGEsbyxmLGc7aWYoZS5rPT0oWm4oKSxjdSkmJihuPWUuaz09Y3UmJiFfayhGaShsKFEoZSwoZnQoKSxXTCkpLDE1KS5PYygpLG5ldyBXbChuZXcgdWopKSkuQmQoKEFtKCksengpKT8oSWgoKSxaQik6dCxydChlLChmdCgpLFl4KSxuKSxuIT0oSWgoKSxHYikpKWZvcihyPWwoUShlLHppKSwxOCksZz16ZShHZShRKHIsKE50KCkseDIpKSkpLGY9MCxuPT1rZz9mPWUuby5iLWIuTWF0aC5jZWlsKGcvMik6bj09WkImJihmPWIuTWF0aC5jZWlsKGUuby5iLXplKEdlKFEoZW8oZSksSDYpKSktZykvMixlLm8uYi09emUoR2UoUShlbyhlKSxINikpKSxlLm8uYi09Zyksbz1uZXcgRyhlLmopO28uYTxvLmMuYy5sZW5ndGg7KWE9bChyZShvKSwxMiksYS5uLmI9Zn1mdW5jdGlvbiBYbXQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTDtmb3IoYT0hMCxmPW5ldyBHKGUuYik7Zi5hPGYuYy5jLmxlbmd0aDspe2ZvcihvPWwocmUoZiksMzApLEU9aWEsQz1udWxsLHc9bmV3IEcoby5hKTt3LmE8dy5jLmMubGVuZ3RoOylpZihnPWwocmUodyksMTApLEw9emUodC5wW2cucF0pK3plKHQuZFtnLnBdKS1nLmQuZCxyPXplKHQucFtnLnBdKSt6ZSh0LmRbZy5wXSkrZy5vLmIrZy5kLmEsTD5FJiZyPkUpQz1nLEU9emUodC5wW2cucF0pK3plKHQuZFtnLnBdKStnLm8uYitnLmQuYTtlbHNle2E9ITEsbi5fZygpJiZuLmJoKCJiayBub2RlIHBsYWNlbWVudCBicmVha3Mgb24gIitnKyIgd2hpY2ggc2hvdWxkIGhhdmUgYmVlbiBhZnRlciAiK0MpO2JyZWFrfWlmKCFhKWJyZWFrfXJldHVybiBuLl9nKCkmJm4uYmgodCsiIGlzIGZlYXNpYmxlOiAiK2EpLGF9ZnVuY3Rpb24gX2tlKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDLEwsQjtpZihvPW5ldyBvcChlKSx4KG8sKFpuKCksQXUpKSxydChvLChOdCgpLE1zKSwoUmEoKSxNdSkpLGE9MCx0KXtmb3IoZj1uZXcgZ3UscnQoZiwoZnQoKSx6aSksdCkscnQobyx6aSx0LmkpLGxhKGYsKEN0KCksZXIpKSxNYyhmLG8pLEI9a2QodC5lKSxFPUIsQz0wLEw9RS5sZW5ndGg7QzxMOysrQyl3PUVbQ10sRmEodyxmKTtydCh0LGpsLG8pLCsrYX1pZihuKXtmb3IoZz1uZXcgZ3UscnQobywoZnQoKSx6aSksbi5pKSxydChnLHppLG4pLGxhKGcsKEN0KCksYXIpKSxNYyhnLG8pLEI9a2Qobi5nKSxFPUIsQz0wLEw9RS5sZW5ndGg7QzxMOysrQyl3PUVbQ10scG8odyxnKTtydChuLGpsLG8pLCsrYX1yZXR1cm4gcnQobywoZnQoKSxpVykscHQoYSkpLCRuKHIuYyxvKSxvfWZ1bmN0aW9uIFhBbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEIsejtmb3Iobj0oRT1uZXcgZ2koZS5jLmIpLmEudmMoKS5LYygpLG5ldyBmcyhFKSk7bi5hLk9iKCk7KXQ9KGc9bChuLmEuUGIoKSw0NCksbChnLm1kKCksMTQzKSksYT10LmEsYT09bnVsbCYmKGE9IiIpLHI9a2ZuKGUuYyxhKSwhciYmYS5sZW5ndGg9PTAmJihyPWw0bihlKSksciYmIU55KHIuYyx0LCExKSYmdWkoci5jLHQpO2ZvcihmPVJyKGUuYSwwKTtmLmIhPWYuZC5jOylvPWwoQnIoZiksNDg3KSxDPV9vZShlLmMsby5hKSx6PV9vZShlLmMsby5iKSxDJiZ6JiZ1aShDLmMsbmV3IGNhKHosby5jKSk7Zm9yKENoKGUuYSksQj1ScihlLmIsMCk7Qi5iIT1CLmQuYzspTD1sKEJyKEIpLDQ4NyksdD14Zm4oZS5jLEwuYSksdz1fb2UoZS5jLEwuYiksdCYmdyYmZWxuKHQsdyxMLmMpO0NoKGUuYil9ZnVuY3Rpb24gUUFuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQix6O289bmV3IHdrKGUpLGY9bmV3IGNndCxhPShlTihmLmcpLGVOKGYuaiksTmwoZi5iKSxlTihmLmQpLGVOKGYuaSksTmwoZi5rKSxObChmLmMpLE5sKGYuZSksej1IcHQoZixvLG51bGwpLFIydChmLG8pLHopLHQmJihFPW5ldyB3ayh0KSxnPWFMbihFKSxZeGUoYSxoZShsZShIT2UsMSksUm4sNTM2LDAsW2ddKSkpLEI9ITEsTD0hMSxuJiYoRT1uZXcgd2sobiksSEcgaW4gRS5hJiYoQj1XZyhFLEhHKS5xZSgpLmEpLFM0dCBpbiBFLmEmJihMPVdnKEUsUzR0KS5xZSgpLmEpKSxDPVpKZShWaHQobmV3IEw4LEIpLEwpLE45bihuZXcgdHksYSxDKSxIRyBpbiBvLmEmJmUxKG8sSEcsbnVsbCksKEJ8fEwpJiYodz1uZXcgTTgsRG10KEMsdyxCLEwpLGUxKG8sSEcsdykpLHI9bmV3IEpYZShmKSx2eW4obmV3IGh5ZShhKSxyKX1mdW5jdGlvbiBKQW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTDtmb3IoZj1uZXcgZGd0LEU9aGUobGUoVnIsMSksZGksMjgsMTUsWzBdKSxhPS0xLG89MCxyPTAsdz0wO3c8ZS5iLmMubGVuZ3RoOysrdylpZihDPWwoanQoZS5iLHcpLDQ0MyksQy5iPjApe2lmKGE8MCYmQy5hJiYoYT13LG89RVswXSxyPTApLGE+PTApe2lmKGc9Qy5iLHc9PWEmJihnLT1yKyssZz09MCkpcmV0dXJuIDA7aWYoIVp2dCh0LEUsQyxnLGYpKXt3PWEtMSxFWzBdPW87Y29udGludWV9fWVsc2UgaWYoYT0tMSwhWnZ0KHQsRSxDLDAsZikpcmV0dXJuIDB9ZWxzZXtpZihhPS0xLGNvKEMuYywwKT09MzIpe2lmKEw9RVswXSxlaHQodCxFKSxFWzBdPkwpY29udGludWV9ZWxzZSBpZihQcG4odCxDLmMsRVswXSkpe0VbMF0rPUMuYy5sZW5ndGg7Y29udGludWV9cmV0dXJuIDB9cmV0dXJuIEZEbihmLG4pP0VbMF06MH1mdW5jdGlvbiBaQW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCO2ZvcihDPW5ldyBnSChuZXcgRHoobikpLGc9V2UoaWgscGcsMjgsZS5mLmUuYy5sZW5ndGgsMTYsMSksbDVlKGcsZy5sZW5ndGgpLG5bdC5hXT0wLEU9bmV3IEcoZS5mLmUpO0UuYTxFLmMuYy5sZW5ndGg7KXc9bChyZShFKSwxNTMpLHcuYSE9dC5hJiYoblt3LmFdPUlpKSxLOCgkRShDLHcpLGFUKTtmb3IoO0MuYi5jLmxlbmd0aCE9MDspZm9yKEw9bChLb2UoQyksMTUzKSxnW0wuYV09ITAsbz1ZbnQobmV3IHNzZShlLmIsTCksMCk7by5jOylhPWwoRzZlKG8pLDI5MCksQj1oN24oYSxMKSwhZ1tCLmFdJiYobnMoYSwoVk4oKSxUSykpP2Y9emUoR2UoUShhLFRLKSkpOmY9ZS5jLHI9bltMLmFdK2YscjxuW0IuYV0mJihuW0IuYV09cixoZnQoQyxCKSxLOCgkRShDLEIpLGFUKSkpfWZ1bmN0aW9uIGVMbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWO2ZvcihmPWUubyxyPVdlKFZyLGRpLDI4LGYsMTUsMSksYT1XZShWcixkaSwyOCxmLDE1LDEpLG49ZS5wLHQ9V2UoVnIsZGksMjgsbiwxNSwxKSxvPVdlKFZyLGRpLDI4LG4sMTUsMSksRT0wO0U8ZjtFKyspe2ZvcihMPTA7TDxuJiYhcjYoZSxFLEwpOykrK0w7cltFXT1MfWZvcihDPTA7QzxmO0MrKyl7Zm9yKEw9bi0xO0w+PTAmJiFyNihlLEMsTCk7KS0tTDthW0NdPUx9Zm9yKHo9MDt6PG47eisrKXtmb3IoZz0wO2c8ZiYmIXI2KGUsZyx6KTspKytnO3Rbel09Z31mb3IoVj0wO1Y8bjtWKyspe2ZvcihnPWYtMTtnPj0wJiYhcjYoZSxnLFYpOyktLWc7b1tWXT1nfWZvcih3PTA7dzxmO3crKylmb3IoQj0wO0I8bjtCKyspdzxvW0JdJiZ3PnRbQl0mJkI8YVt3XSYmQj5yW3ddJiZGVShlLHcsQiwhMSwhMCl9ZnVuY3Rpb24gQWtlKGUpe3ZhciB0LG4scixhLG8sZixnLHc7bj1SdChCdChRKGUsKGIwKCksSzd0KSkpKSxvPWUuYS5jLmQsZz1lLmEuZC5kLG4/KGY9bWQobWEobmV3IGx0KGcuYSxnLmIpLG8pLC41KSx3PW1kKEphKGUuZSksLjUpLHQ9bWEoT2kobmV3IGx0KG8uYSxvLmIpLGYpLHcpLEZ5ZShlLmQsdCkpOihhPXplKEdlKFEoZS5hLG44dCkpKSxyPWUuZCxvLmE+PWcuYT9vLmI+PWcuYj8oci5hPWcuYSsoby5hLWcuYSkvMithLHIuYj1nLmIrKG8uYi1nLmIpLzItYS1lLmUuYik6KHIuYT1nLmErKG8uYS1nLmEpLzIrYSxyLmI9by5iKyhnLmItby5iKS8yK2EpOm8uYj49Zy5iPyhyLmE9by5hKyhnLmEtby5hKS8yK2Esci5iPWcuYisoby5iLWcuYikvMithKTooci5hPW8uYSsoZy5hLW8uYSkvMithLHIuYj1vLmIrKGcuYi1vLmIpLzItYS1lLmUuYikpfWZ1bmN0aW9uIEpBKGUpe3ZhciB0LG4scixhLG8sZixnLHc7aWYoIWUuZil7aWYodz1uZXcgX0ksZz1uZXcgX0ksdD1xTSxmPXQuYS56YyhlLHQpLGY9PW51bGwpe2ZvcihvPW5ldyBvcihkYyhlKSk7by5lIT1vLmkuZ2MoKTspYT1sKGdyKG8pLDI5KSxBcyh3LEpBKGEpKTt0LmEuQmMoZSkhPW51bGwsdC5hLmdjKCk9PTB9Zm9yKHI9KCFlLnMmJihlLnM9bmV3IG50KGRsLGUsMjEsMTcpKSxuZXcgb3IoZS5zKSk7ci5lIT1yLmkuZ2MoKTspbj1sKGdyKHIpLDE3OSksRGUobiwxMDIpJiZxcihnLGwobiwxOSkpO0l5KGcpLGUucj1uZXcgeml0KGUsKGwoT2UodHQoKGxiKCksVm4pLm8pLDYpLDE5KSxnLmkpLGcuZyksQXModyxlLnIpLEl5KHcpLGUuZj1uZXcgTjUoKGwoT2UodHQoVm4ubyksNSksMTkpLHcuaSksdy5nKSxZbChlKS5iJj0tM31yZXR1cm4gZS5mfWZ1bmN0aW9uIFFtdChlKXtzdyhlLG5ldyBYbShudyhadih0dyhldyhuZXcgeDEsbnYpLCJFTEsgRGlzQ28iKSwiTGF5b3V0ZXIgZm9yIGFycmFuZ2luZyB1bmNvbm5lY3RlZCBzdWJncmFwaHMuIFRoZSBzdWJncmFwaHMgdGhlbXNlbHZlcyBhcmUsIGJ5IGRlZmF1bHQsIG5vdCBsYWlkIG91dC4iKSxuZXcgejApKSksZ3QoZSxudixfaGUsSXQoWF9lKSksZ3QoZSxudixBaGUsSXQoVzBlKSksZ3QoZSxudixPeCxJdChJN3QpKSxndChlLG52LFh3LEl0KFlfZSkpLGd0KGUsbnYsYkVlLEl0KEI3dCkpLGd0KGUsbnYsbUVlLEl0KFA3dCkpLGd0KGUsbnYscEVlLEl0KEY3dCkpLGd0KGUsbnYsdkVlLEl0KE43dCkpLGd0KGUsbnYsQ0VlLEl0KE83dCkpLGd0KGUsbnYsU0VlLEl0KEswZSkpLGd0KGUsbnYsX0VlLEl0KFdfZSkpLGd0KGUsbnYsQUVlLEl0KHZLKSl9ZnVuY3Rpb24gelUoKXt6VT1VLGJQZT1oZShsZShrZiwxKSxBZCwyOCwxNSxbNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjUsNjYsNjcsNjgsNjksNzBdKSxTX3Q9bmV3IFJlZ0V4cChgWyAJClxyXGZdK2ApO3RyeXtqTT1oZShsZShQT24sMSksUm4sMjExNCwwLFtuZXcgS0koKGl5ZSgpLEtWKCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3MnLidTU1NaIixNTygoenooKSx6eigpLE5MKSkpKSksbmV3IEtJKEtWKCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3MnLidTU1MiLE1PKE5MKSkpLG5ldyBLSShLVigieXl5eS1NTS1kZCdUJ0hIOm1tOnNzIixNTyhOTCkpKSxuZXcgS0koS1YoInl5eXktTU0tZGQnVCdISDptbSIsTU8oTkwpKSksbmV3IEtJKEtWKCJ5eXl5LU1NLWRkIixNTyhOTCkpKV0pfWNhdGNoKGUpe2lmKGU9YnMoZSksIURlKGUsODIpKXRocm93IHVlKGUpfX1mdW5jdGlvbiB0TG4oZSx0KXt2YXIgbixyLGEsbztpZihhPUpsKGUuZCwxKSE9MCxyPWNrZShlLHQpLHI9PTAmJlJ0KEJ0KFEodC5qLChmdCgpLGpiKSkpKSlyZXR1cm4gMDshUnQoQnQoUSh0LmosKGZ0KCksamIpKSkpJiYhUnQoQnQoUSh0LmosajYpKSl8fHFlKFEodC5qLChOdCgpLHlnKSkpPT09cWUoKEVkKCksRTIpKT90LmMubWcodC5lLGEpOmE9UnQoQnQoUSh0LmosamIpKSksY1AoZSx0LGEsITApLFJ0KEJ0KFEodC5qLGo2KSkpJiZydCh0LmosajYsKEhuKCksITEpKSxSdChCdChRKHQuaixqYikpKSYmKHJ0KHQuaixqYiwoSG4oKSwhMSkpLHJ0KHQuaixqNiwhMCkpLG49Y2tlKGUsdCk7ZG97aWYodzdlKGUpLG49PTApcmV0dXJuIDA7YT0hYSxvPW4sY1AoZSx0LGEsITEpLG49Y2tlKGUsdCl9d2hpbGUobz5uKTtyZXR1cm4gb31mdW5jdGlvbiBKbXQoZSx0KXt2YXIgbixyLGEsbztpZihhPUpsKGUuZCwxKSE9MCxyPXhVKGUsdCkscj09MCYmUnQoQnQoUSh0LmosKGZ0KCksamIpKSkpKXJldHVybiAwOyFSdChCdChRKHQuaiwoZnQoKSxqYikpKSkmJiFSdChCdChRKHQuaixqNikpKXx8cWUoUSh0LmosKE50KCkseWcpKSk9PT1xZSgoRWQoKSxFMikpP3QuYy5tZyh0LmUsYSk6YT1SdChCdChRKHQuaixqYikpKSxjUChlLHQsYSwhMCksUnQoQnQoUSh0LmosajYpKSkmJnJ0KHQuaixqNiwoSG4oKSwhMSkpLFJ0KEJ0KFEodC5qLGpiKSkpJiYocnQodC5qLGpiLChIbigpLCExKSkscnQodC5qLGo2LCEwKSksbj14VShlLHQpO2Rve2lmKHc3ZShlKSxuPT0wKXJldHVybiAwO2E9IWEsbz1uLGNQKGUsdCxhLCExKSxuPXhVKGUsdCl9d2hpbGUobz5uKTtyZXR1cm4gb31mdW5jdGlvbiBMa2UoZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCO3JldHVybiB3PW1hKG5ldyBsdChuLmEsbi5iKSxlKSxFPXcuYSp0LmItdy5iKnQuYSxDPXQuYSpyLmItdC5iKnIuYSxMPSh3LmEqci5iLXcuYipyLmEpL0MsQj1FL0MsQz09MD9FPT0wPyhhPU9pKG5ldyBsdChuLmEsbi5iKSxtZChuZXcgbHQoci5hLHIuYiksLjUpKSxvPXBiKGUsYSksZj1wYihPaShuZXcgbHQoZS5hLGUuYiksdCksYSksZz1iLk1hdGguc3FydChyLmEqci5hK3IuYipyLmIpKi41LG88ZiYmbzw9Zz9uZXcgbHQoZS5hLGUuYik6Zjw9Zz9PaShuZXcgbHQoZS5hLGUuYiksdCk6bnVsbCk6bnVsbDpMPj0wJiZMPD0xJiZCPj0wJiZCPD0xP09pKG5ldyBsdChlLmEsZS5iKSxtZChuZXcgbHQodC5hLHQuYiksTCkpOm51bGx9ZnVuY3Rpb24gbkxuKGUsdCxuKXt2YXIgcixhLG8sZixnO2lmKHI9bChRKGUsKE50KCksSjFlKSksMjEpLG4uYT50LmEmJihyLkhjKChZbSgpLEVNKSk/ZS5jLmErPShuLmEtdC5hKS8yOnIuSGMoVE0pJiYoZS5jLmErPW4uYS10LmEpKSxuLmI+dC5iJiYoci5IYygoWW0oKSxTTSkpP2UuYy5iKz0obi5iLXQuYikvMjpyLkhjKENNKSYmKGUuYy5iKz1uLmItdC5iKSksbChRKGUsKGZ0KCksTHUpKSwyMSkuSGMoKEhvKCksdmYpKSYmKG4uYT50LmF8fG4uYj50LmIpKWZvcihnPW5ldyBHKGUuYSk7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDEwKSxmLms9PShabigpLFVzKSYmKGE9bChRKGYsV2MpLDY0KSxhPT0oQ3QoKSxhcik/Zi5uLmErPW4uYS10LmE6YT09RHImJihmLm4uYis9bi5iLXQuYikpO289ZS5kLGUuZi5hPW4uYS1vLmItby5jLGUuZi5iPW4uYi1vLmQtby5hfWZ1bmN0aW9uIHJMbihlLHQsbil7dmFyIHIsYSxvLGYsZztpZihyPWwoUShlLChOdCgpLEoxZSkpLDIxKSxuLmE+dC5hJiYoci5IYygoWW0oKSxFTSkpP2UuYy5hKz0obi5hLXQuYSkvMjpyLkhjKFRNKSYmKGUuYy5hKz1uLmEtdC5hKSksbi5iPnQuYiYmKHIuSGMoKFltKCksU00pKT9lLmMuYis9KG4uYi10LmIpLzI6ci5IYyhDTSkmJihlLmMuYis9bi5iLXQuYikpLGwoUShlLChmdCgpLEx1KSksMjEpLkhjKChIbygpLHZmKSkmJihuLmE+dC5hfHxuLmI+dC5iKSlmb3IoZj1uZXcgRyhlLmEpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxMCksby5rPT0oWm4oKSxVcykmJihhPWwoUShvLFdjKSw2NCksYT09KEN0KCksYXIpP28ubi5hKz1uLmEtdC5hOmE9PURyJiYoby5uLmIrPW4uYi10LmIpKTtnPWUuZCxlLmYuYT1uLmEtZy5iLWcuYyxlLmYuYj1uLmItZy5kLWcuYX1mdW5jdGlvbiBpTG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCO2Zvcih0PWYydChlKSxDPShnPW5ldyBicih0KS5hLnZjKCkuS2MoKSxuZXcgTWkoZykpO0MuYS5PYigpOyl7Zm9yKEU9KGE9bChDLmEuUGIoKSw0NCksbChhLmxkKCksMTApKSxMPTAsQj0wLEw9RS5kLmQsQj1FLm8uYitFLmQuYSxlLmRbRS5wXT0wLG49RTsobz1lLmFbbi5wXSkhPUU7KXI9WjVuKG4sbyksdz0wLGUuYz09KHhkKCksVDIpP3c9ci5kLm4uYityLmQuYS5iLXIuYy5uLmItci5jLmEuYjp3PXIuYy5uLmIrci5jLmEuYi1yLmQubi5iLXIuZC5hLmIsZj16ZShlLmRbbi5wXSkrdyxlLmRbby5wXT1mLEw9Yi5NYXRoLm1heChMLG8uZC5kLWYpLEI9Yi5NYXRoLm1heChCLGYrby5vLmIrby5kLmEpLG49bztuPUU7ZG8gZS5kW24ucF09emUoZS5kW24ucF0pK0wsbj1lLmFbbi5wXTt3aGlsZShuIT1FKTtlLmJbRS5wXT1MK0J9fWZ1bmN0aW9uIFpBKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQjtmb3Iobz0wLGY9ZS50LGE9MCxyPTAsdz0wLEI9MCxMPTAsbiYmKGUubi5jLmxlbmd0aD0wLHZ0KGUubixuZXcgUEgoZS5zLGUudCxlLmkpKSksZz0wLEM9bmV3IEcoZS5iKTtDLmE8Qy5jLmMubGVuZ3RoOylFPWwocmUoQyksMjcpLG8rRS5nKyhnPjA/ZS5pOjApPnQmJnc+MCYmKG89MCxmKz13K2UuaSxhPWIuTWF0aC5tYXgoYSxCKSxyKz13K2UuaSx3PTAsQj0wLG4mJigrK0wsdnQoZS5uLG5ldyBQSChlLnMsZixlLmkpKSksZz0wKSxCKz1FLmcrKGc+MD9lLmk6MCksdz1iLk1hdGgubWF4KHcsRS5mKSxuJiZleGUobChqdChlLm4sTCksMjA5KSxFKSxvKz1FLmcrKGc+MD9lLmk6MCksKytnO3JldHVybiBhPWIuTWF0aC5tYXgoYSxCKSxyKz13LG4mJihlLnI9YSxlLmQ9cixpeGUoZS5qKSksbmV3IGVmKGUucyxlLnQsYSxyKX1mdW5jdGlvbiBnbGUoZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCO2ZvcihlLmI9ITEsTD1ncyx3PWlhLEI9Z3MsRT1pYSxyPWUuZS5hLmVjKCkuS2MoKTtyLk9iKCk7KWZvcihuPWwoci5QYigpLDI3MiksYT1uLmEsTD1iLk1hdGgubWluKEwsYS5jKSx3PWIuTWF0aC5tYXgodyxhLmMrYS5iKSxCPWIuTWF0aC5taW4oQixhLmQpLEU9Yi5NYXRoLm1heChFLGEuZCthLmEpLGY9bmV3IEcobi5jKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksNDA3KSx0PW8uYSx0LmE/KEM9YS5kK28uYi5iLGc9QytvLmMsQj1iLk1hdGgubWluKEIsQyksRT1iLk1hdGgubWF4KEUsZykpOihDPWEuYytvLmIuYSxnPUMrby5jLEw9Yi5NYXRoLm1pbihMLEMpLHc9Yi5NYXRoLm1heCh3LGcpKTtlLmE9bmV3IGx0KHctTCxFLUIpLGUuYz1uZXcgbHQoTCtlLmQuYSxCK2UuZC5iKX1mdW5jdGlvbiBkNihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3O2lmKCFlLmEpe2lmKGUubz1udWxsLHc9bmV3IG1RZShlKSx0PW5ldyBEUyxuPXFNLGc9bi5hLnpjKGUsbiksZz09bnVsbCl7Zm9yKGY9bmV3IG9yKGRjKGUpKTtmLmUhPWYuaS5nYygpOylvPWwoZ3IoZiksMjkpLEFzKHcsZDYobykpO24uYS5CYyhlKSE9bnVsbCxuLmEuZ2MoKT09MH1mb3IoYT0oIWUucyYmKGUucz1uZXcgbnQoZGwsZSwyMSwxNykpLG5ldyBvcihlLnMpKTthLmUhPWEuaS5nYygpOylyPWwoZ3IoYSksMTc5KSxEZShyLDMzMSkmJnFyKHQsbChyLDM1KSk7SXkodCksZS5rPW5ldyBxaXQoZSwobChPZSh0dCgobGIoKSxWbikubyksNyksMTkpLHQuaSksdC5nKSxBcyh3LGUuayksSXkodyksZS5hPW5ldyBONSgobChPZSh0dChWbi5vKSw0KSwxOSksdy5pKSx3LmcpLFlsKGUpLmImPS0yfXJldHVybiBlLmF9ZnVuY3Rpb24gTWtlKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDO2lmKEM9V3UoZS5lLkRoKCksdCksYT0wLG89bChlLmcsMTI0KSx3PW51bGwsRm8oKSxsKHQsNjkpLnhrKCkpe2ZvcihnPTA7ZzxlLmk7KytnKWlmKGY9b1tnXSxDLmFtKGYuTGsoKSkpe2lmKFBpKGYsbikpe3c9ZjticmVha30rK2F9fWVsc2UgaWYobiE9bnVsbCl7Zm9yKGc9MDtnPGUuaTsrK2cpaWYoZj1vW2ddLEMuYW0oZi5MaygpKSl7aWYoUGkobixmLm1kKCkpKXt3PWY7YnJlYWt9KythfX1lbHNlIGZvcihnPTA7ZzxlLmk7KytnKWlmKGY9b1tnXSxDLmFtKGYuTGsoKSkpe2lmKGYubWQoKT09bnVsbCl7dz1mO2JyZWFrfSsrYX1yZXR1cm4gdyYmKGhoKGUuZSkmJihFPXQuSmsoKT9uZXcgRW9lKGUuZSw0LHQsbixudWxsLGEsITApOmRiKGUsdC50aygpPzI6MSx0LG4sdC5paygpLC0xLCEwKSxyP3IubmooRSk6cj1FKSxyPWhQKGUsdyxyKSkscn1mdW5jdGlvbiBwbGUoZSx0LG4scixhLG8sZil7dmFyIGcsdyxFLEMsTCxCLHosVixKO3N3aXRjaChWPTAsSj0wLHc9YS5jLGc9YS5iLEM9bi5mLHo9bi5nLHQuZyl7Y2FzZSAwOlY9ci5pK3IuZytmLGUuYz9KPUV4bihWLG8scixmKTpKPXIuaixCPWIuTWF0aC5tYXgodyxWK3opLEU9Yi5NYXRoLm1heChnLEorQyk7YnJlYWs7Y2FzZSAxOko9ci5qK3IuZitmLGUuYz9WPWt4bihKLG8scixmKTpWPXIuaSxCPWIuTWF0aC5tYXgodyxWK3opLEU9Yi5NYXRoLm1heChnLEorQyk7YnJlYWs7Y2FzZSAyOlY9dytmLEo9MCxCPXcrZit6LEU9Yi5NYXRoLm1heChnLEMpO2JyZWFrO2Nhc2UgMzpWPTAsSj1nK2YsQj1iLk1hdGgubWF4KHcseiksRT1nK2YrQzticmVhaztkZWZhdWx0OnRocm93IHVlKG5ldyBZbigiSWxsZWdhbFBsYWNlbWVudE9wdGlvbi4iKSl9cmV0dXJuIEw9bmV3IHo4ZShlLmEsQixFLHQsVixKKSxMfWZ1bmN0aW9uIHNMbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEI7aWYoZz1lLmQsTD1sKFEoZSwoZnQoKSxReCkpLDE1KSx0PWwoUShlLEd4KSwxNSksISghTCYmIXQpKXtpZihvPXplKEdlKFB5KGUsKE50KCksb2RlKSkpKSxmPXplKEdlKFB5KGUsdERlKSkpLEI9MCxMKXtmb3IoRT0wLGE9TC5LYygpO2EuT2IoKTspcj1sKGEuUGIoKSwxMCksRT1iLk1hdGgubWF4KEUsci5vLmIpLEIrPXIuby5hO0IrPW8qKEwuZ2MoKS0xKSxnLmQrPUUrZn1pZihuPTAsdCl7Zm9yKEU9MCxhPXQuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMTApLEU9Yi5NYXRoLm1heChFLHIuby5iKSxuKz1yLm8uYTtuKz1vKih0LmdjKCktMSksZy5hKz1FK2Z9dz1iLk1hdGgubWF4KEIsbiksdz5lLm8uYSYmKEM9KHctZS5vLmEpLzIsZy5iPWIuTWF0aC5tYXgoZy5iLEMpLGcuYz1iLk1hdGgubWF4KGcuYyxDKSl9fWZ1bmN0aW9uIGFMbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3O2ZvcihvPW5ldyBLb3QsRmxuKG8sKGh4KCksZFN0KSkscj0oYT1hY2UoZSxXZSh6dCxkdCwyLDAsNiwxKSksbmV3IGtyKG5ldyBJbChuZXcgYXNlKGUsYSkuYikpKTtyLmI8ci5kLmdjKCk7KW49KG1yKHIuYjxyLmQuZ2MoKSksZWkoci5kLlhiKHIuYz1yLmIrKykpKSxmPUZrZShRYixuKSxmJiYodD1XZyhlLG4pLHQudGUoKT9nPXQudGUoKS5hOnQucWUoKT9nPSIiK3QucWUoKS5hOnQucmUoKT9nPSIiK3QucmUoKS5hOmc9dC5JYigpLHc9UGtlKGYsZyksdyE9bnVsbCYmKCh2bChmLmosKHIxKCksaGEpKXx8dmwoZi5qLFBuKSkmJl9OKFdvZShvLEFpKSxmLHcpLHZsKGYuaix6ZCkmJl9OKFdvZShvLGpzKSxmLHcpLHZsKGYuaix5dikmJl9OKFdvZShvLEhsKSxmLHcpLHZsKGYuaixTMikmJl9OKFdvZShvLGVjKSxmLHcpKSk7cmV0dXJuIG99ZnVuY3Rpb24gcFAoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEM7aWYoYT1sKGUuZywxMjQpLHVwKGUuZSx0KSlyZXR1cm4gRm8oKSxsKHQsNjkpLnhrKCk/bmV3IG5IKHQsZSk6bmV3IHlPKHQsZSk7Zm9yKEU9V3UoZS5lLkRoKCksdCkscj0wLGc9MDtnPGUuaTsrK2cpe2lmKG89YVtnXSxmPW8uTGsoKSxFLmFtKGYpKXtpZihGbygpLGwodCw2OSkueGsoKSlyZXR1cm4gbztpZihmPT0oa3goKSx1OSl8fGY9PWM5KXtmb3Iodz1uZXcgVGgoeGMoby5tZCgpKSk7KytnPGUuaTspbz1hW2ddLGY9by5MaygpLChmPT11OXx8Zj09YzkpJiZoaSh3LHhjKG8ubWQoKSkpO3JldHVybiBsNGUobCh0LkhrKCksMTU2KSx3LmEpfWVsc2UgcmV0dXJuIEM9by5tZCgpLEMhPW51bGwmJm4mJkRlKHQsMTAyKSYmbCh0LDE5KS5CYiZJbyYmKEM9ekEoZSx0LGcscixDKSksQ30rK3J9cmV0dXJuIHQuaWsoKX1mdW5jdGlvbiBxVShlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEU7aWYodz1XdShlLmUuRGgoKSx0KSxvPWwoZS5nLDEyNCksdXAoZS5lLHQpKXtmb3IoYT0wLGc9MDtnPGUuaTsrK2cpaWYoZj1vW2ddLHcuYW0oZi5MaygpKSl7aWYoYT09bilyZXR1cm4gRm8oKSxsKHQsNjkpLnhrKCk/ZjooRT1mLm1kKCksRSE9bnVsbCYmciYmRGUodCwxMDIpJiZsKHQsMTkpLkJiJklvJiYoRT16QShlLHQsZyxhLEUpKSxFKTsrK2F9dGhyb3cgdWUobmV3IHRjKENMK24rYXYrYSkpfWVsc2V7Zm9yKGE9MCxnPTA7ZzxlLmk7KytnKXtpZihmPW9bZ10sdy5hbShmLkxrKCkpKXJldHVybiBGbygpLGwodCw2OSkueGsoKT9mOihFPWYubWQoKSxFIT1udWxsJiZyJiZEZSh0LDEwMikmJmwodCwxOSkuQmImSW8mJihFPXpBKGUsdCxnLGEsRSkpLEUpOysrYX1yZXR1cm4gdC5paygpfX1mdW5jdGlvbiBibGUoKXtibGU9VSx4NnQ9aGUobGUoVnIsMSksZGksMjgsMTUsW2xvLDExNjIyNjE0NjcsckwsMTIyMDcwMzEyNSwzNjI3OTcwNTYsMTk3NzMyNjc0MyxyTCwzODc0MjA0ODksSlUsMjE0MzU4ODgxLDQyOTk4MTY5Niw4MTU3MzA3MjEsMTQ3NTc4OTA1NiwxNzA4NTkzNzUsMjY4NDM1NDU2LDQxMDMzODY3Myw2MTIyMjAwMzIsODkzODcxNzM5LDEyOGU3LDE4MDEwODg1NDEsMTEzMzc5OTA0LDE0ODAzNTg4OSwxOTExMDI5NzYsMjQ0MTQwNjI1LDMwODkxNTc3NiwzODc0MjA0ODksNDgxODkwMzA0LDU5NDgyMzMyMSw3MjllNiw4ODc1MDM2ODEsckwsMTI5MTQ2Nzk2OSwxNTQ0ODA0NDE2LDE4MzgyNjU2MjUsNjA0NjYxNzZdKSxrNnQ9aGUobGUoVnIsMSksZGksMjgsMTUsWy0xLC0xLDMxLDE5LDE1LDEzLDExLDExLDEwLDksOSw4LDgsOCw4LDcsNyw3LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDVdKX1mdW5jdGlvbiBtbGUoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTDtpZihmPWUuZSx3PXQuZSx3PT0wKXJldHVybiBlO2lmKGY9PTApcmV0dXJuIHQuZT09MD90Om5ldyBJbSgtdC5lLHQuZCx0LmEpO2lmKG89ZS5kLGc9dC5kLG8rZz09MilyZXR1cm4gbj12YShlLmFbMF0sVm8pLHI9dmEodC5hWzBdLFZvKSxmPDAmJihuPXIyKG4pKSx3PDAmJihyPXIyKHIpKSxDZCgpLEFxKERmKG4sciksMCk/a2IoRGYobixyKSk6Sl8oa2IocjIoRGYobixyKSkpKTtpZihhPW8hPWc/bz5nPzE6LTE6VzdlKGUuYSx0LmEsbyksYT09LTEpTD0tdyxDPWY9PXc/RG9lKHQuYSxnLGUuYSxvKTpPb2UodC5hLGcsZS5hLG8pO2Vsc2UgaWYoTD1mLGY9PXcpe2lmKGE9PTApcmV0dXJuIENkKCksQkw7Qz1Eb2UoZS5hLG8sdC5hLGcpfWVsc2UgQz1Pb2UoZS5hLG8sdC5hLGcpO3JldHVybiBFPW5ldyBJbShMLEMubGVuZ3RoLEMpLGlBKEUpLEV9ZnVuY3Rpb24gb0xuKGUsdCl7dmFyIG4scixhLG87aWYobz1QbXQodCksIXQuYyYmKHQuYz1uZXcgbnQoSGwsdCw5LDkpKSxJcyhuZXcgYm4obnVsbCwoIXQuYyYmKHQuYz1uZXcgbnQoSGwsdCw5LDkpKSxuZXcga24odC5jLDE2KSkpLG5ldyAkV2UobykpLGE9bChRKG8sKGZ0KCksTHUpKSwyMSksWk1uKHQsYSksYS5IYygoSG8oKSx2ZikpKWZvcihyPW5ldyBvcigoIXQuYyYmKHQuYz1uZXcgbnQoSGwsdCw5LDkpKSx0LmMpKTtyLmUhPXIuaS5nYygpOyluPWwoZ3IociksMTIzKSxBRG4oZSx0LG8sbik7cmV0dXJuIGwoYXQodCwoTnQoKSxidikpLDE4MSkuZ2MoKSE9MCYmX2J0KHQsbyksUnQoQnQoUShvLFhNZSkpKSYmYS5GYyhuVyksbnMobyxDQikmJk5KZShuZXcgRDhlKHplKEdlKFEobyxDQikpKSksbykscWUoYXQodCxwNCkpPT09cWUoKHJwKCksQTIpKT9KSW4oZSx0LG8pOkJJbihlLHQsbyksb31mdW5jdGlvbiBjTG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdztmb3IoYT1uZXcgRyhlLmIpO2EuYTxhLmMuYy5sZW5ndGg7KWZvcihyPWwocmUoYSksMzApLGY9bmV3IEcoX3coci5hKSk7Zi5hPGYuYy5jLmxlbmd0aDspaWYobz1sKHJlKGYpLDEwKSxzaHQobykmJihuPWwoUShvLChmdCgpLGMzKSksMzEzKSwhbi5nJiZuLmQpKWZvcih0PW4sdz1uLmQ7dzspUmJ0KHcuaSx3LmssITEsITApLHVOKHQuYSksdU4ody5pKSx1Tih3LmspLHVOKHcuYiksRmEody5jLHQuYy5kKSxGYSh0LmMsbnVsbCksVmEodC5hLG51bGwpLFZhKHcuaSxudWxsKSxWYSh3LmssbnVsbCksVmEody5iLG51bGwpLGc9bmV3IG82ZSh0Lmksdy5hLHQuZSx3Lmosdy5mKSxnLms9dC5rLGcubj10Lm4sZy5iPXQuYixnLmM9dy5jLGcuZz10LmcsZy5kPXcuZCxydCh0LmksYzMsZykscnQody5hLGMzLGcpLHc9dy5kLHQ9Z31mdW5jdGlvbiBUdShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2lmKGU9PW51bGwpcmV0dXJuIG51bGw7aWYobz1lLmxlbmd0aCxvPT0wKXJldHVybiIiO2Zvcih3PVdlKGtmLEFkLDI4LG8sMTUsMSksR2EoMCxvLGUubGVuZ3RoKSxHYSgwLG8sdy5sZW5ndGgpLEhzdChlLDAsbyx3LDApLG49bnVsbCxnPXQsYT0wLGY9MDthPG87YSsrKXI9d1thXSxDd3QoKSxyPD0zMiYmeWVbcl0mMj9nPyghbiYmKG49bmV3IEFmKGUpKSxLaG4obixhLWYrKykpOihnPXQsciE9MzImJighbiYmKG49bmV3IEFmKGUpKSxoY2UobixhLWYsYS1mKzEsU3RyaW5nLmZyb21DaGFyQ29kZSgzMikpKSk6Zz0hMTtyZXR1cm4gZz9uPyhvPW4uYS5sZW5ndGgsbz4wP3RmKG4uYSwwLG8tMSk6IiIpOihHYSgwLG8tMSxlLmxlbmd0aCksZS5zdWJzdHIoMCxvLTEpKTpuP24uYTplfWZ1bmN0aW9uIHVMbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2Zvcih0LlVnKCJTb3J0IEJ5IElucHV0IE1vZGVsICIrUShlLChOdCgpLHlnKSksMSksYT0wLHI9bmV3IEcoZS5iKTtyLmE8ci5jLmMubGVuZ3RoOyl7Zm9yKG49bChyZShyKSwzMCksdz1hPT0wPzA6YS0xLGc9bChqdChlLmIsdyksMzApLGY9bmV3IEcobi5hKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMTApLHFlKFEobyxNcykpIT09cWUoKFJhKCksVHYpKSYmcWUoUShvLE1zKSkhPT1xZShNdSkmJihDbigpLFZzKG8uaixuZXcgVjB0KGcsbChRKGUseWcpLDI4NCksaWd0KG8pLFJ0KEJ0KFEoZSxRMWUpKSkpKSx0LmJoKCJOb2RlICIrbysiIHBvcnRzOiAiK28uaikpO0NuKCksVnMobi5hLG5ldyBwZnQoZyxsKFEoZSx5ZyksMjg0KSxsKFEoZSxDTWUpLDM5MCkpKSx0LmJoKCJMYXllciAiK2ErIjogIituKSwrK2F9dC5WZygpfWZ1bmN0aW9uIEt5KGUsdCl7dmFyIG4scixhLG8sZjtpZihmPWwodCwxMzgpLGM2KGUpLGM2KGYpLGYuYiE9bnVsbCl7aWYoZS5jPSEwLGUuYj09bnVsbCl7ZS5iPVdlKFZyLGRpLDI4LGYuYi5sZW5ndGgsMTUsMSkscHUoZi5iLDAsZS5iLDAsZi5iLmxlbmd0aCk7cmV0dXJufWZvcihvPVdlKFZyLGRpLDI4LGUuYi5sZW5ndGgrZi5iLmxlbmd0aCwxNSwxKSxuPTAscj0wLGE9MDtuPGUuYi5sZW5ndGh8fHI8Zi5iLmxlbmd0aDspbj49ZS5iLmxlbmd0aD8ob1thKytdPWYuYltyKytdLG9bYSsrXT1mLmJbcisrXSk6cj49Zi5iLmxlbmd0aD8ob1thKytdPWUuYltuKytdLG9bYSsrXT1lLmJbbisrXSk6Zi5iW3JdPGUuYltuXXx8Zi5iW3JdPT09ZS5iW25dJiZmLmJbcisxXTxlLmJbbisxXT8ob1thKytdPWYuYltyKytdLG9bYSsrXT1mLmJbcisrXSk6KG9bYSsrXT1lLmJbbisrXSxvW2ErK109ZS5iW24rK10pO2UuYj1vfX1mdW5jdGlvbiBsTG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTDtyZXR1cm4gbj1SdChCdChRKGUsKGZ0KCksZjQpKSkpLGc9UnQoQnQoUSh0LGY0KSkpLHI9bChRKGUsbzEpLDEyKSx3PWwoUSh0LG8xKSwxMiksYT1sKFEoZSwkZiksMTIpLEU9bChRKHQsJGYpLDEyKSxDPSEhciYmcj09dyxMPSEhYSYmYT09RSwhbiYmIWc/bmV3IHc0ZShsKHJlKG5ldyBHKGUuaikpLDEyKS5wPT1sKHJlKG5ldyBHKHQuaikpLDEyKS5wLEMsTCk6KG89KCFSdChCdChRKGUsZjQpKSl8fFJ0KEJ0KFEoZSxrQikpKSkmJighUnQoQnQoUSh0LGY0KSkpfHxSdChCdChRKHQsa0IpKSkpLGY9KCFSdChCdChRKGUsZjQpKSl8fCFSdChCdChRKGUsa0IpKSkpJiYoIVJ0KEJ0KFEodCxmNCkpKXx8IVJ0KEJ0KFEodCxrQikpKSksbmV3IHc0ZShDJiZvfHxMJiZmLEMsTCkpfWZ1bmN0aW9uIFptdChlKXt2YXIgdCxuLHIsYSxvLGYsZyx3O2ZvcihyPTAsbj0wLHc9bmV3IG9zLHQ9MCxnPW5ldyBHKGUubik7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDIwOSksZi5jLmMubGVuZ3RoPT0wP0NzKHcsZix3LmMuYix3LmMpOihyPWIuTWF0aC5tYXgocixmLmQpLG4rPWYuYSsodD4wP2UuaTowKSksKyt0O2ZvcihnOGUoZS5uLHcpLGUuZD1uLGUucj1yLGUuZz0wLGUuZj0wLGUuZT0wLGUubz1ncyxlLnA9Z3Msbz1uZXcgRyhlLmIpO28uYTxvLmMuYy5sZW5ndGg7KWE9bChyZShvKSwyNyksZS5wPWIuTWF0aC5taW4oZS5wLGEuZyksZS5nPWIuTWF0aC5tYXgoZS5nLGEuZyksZS5mPWIuTWF0aC5tYXgoZS5mLGEuZiksZS5vPWIuTWF0aC5taW4oZS5vLGEuZiksZS5lKz1hLmYrZS5pO2UuYT1lLmUvZS5iLmMubGVuZ3RoLWUuaSooKGUuYi5jLmxlbmd0aC0xKS9lLmIuYy5sZW5ndGgpLGl4ZShlLmopfWZ1bmN0aW9uIGV2dChlKXt2YXIgdCxuLHIsYTtyZXR1cm4gZS5EYiY2ND9qY2UoZSk6KHQ9bmV3IFRoKGFTZSkscj1lLmsscj9oaShoaSgodC5hKz0nICInLHQpLHIpLCciJyk6KCFlLm4mJihlLm49bmV3IG50KGVjLGUsMSw3KSksZS5uLmk+MCYmKGE9KCFlLm4mJihlLm49bmV3IG50KGVjLGUsMSw3KSksbChPZShlLm4sMCksMTM1KSkuYSwhYXx8aGkoaGkoKHQuYSs9JyAiJyx0KSxhKSwnIicpKSksbj0oIWUuYiYmKGUuYj1uZXcgTG4oX3IsZSw0LDcpKSwhKGUuYi5pPD0xJiYoIWUuYyYmKGUuYz1uZXcgTG4oX3IsZSw1LDgpKSxlLmMuaTw9MSkpKSxuP3QuYSs9IiBbIjp0LmErPSIgIixoaSh0LEV5ZShuZXcgWmllLG5ldyBvcihlLmIpKSksbiYmKHQuYSs9Il0iKSx0LmErPVBoZSxuJiYodC5hKz0iWyIpLGhpKHQsRXllKG5ldyBaaWUsbmV3IG9yKGUuYykpKSxuJiYodC5hKz0iXSIpLHQuYSl9ZnVuY3Rpb24gaExuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdCxjbixhbixCbjtmb3IoWmU9ZS5jLG90PXQuYyxuPWdjKFplLmEsZSwwKSxyPWdjKG90LmEsdCwwKSxNZT1sKFJ3KGUsKHFvKCksJGwpKS5LYygpLlBiKCksMTIpLGFuPWwoUncoZSx6dSkuS2MoKS5QYigpLDEyKSwkZT1sKFJ3KHQsJGwpLktjKCkuUGIoKSwxMiksQm49bChSdyh0LHp1KS5LYygpLlBiKCksMTIpLGZlPWtkKE1lLmUpLFN0PWtkKGFuLmcpLFRlPWtkKCRlLmUpLGNuPWtkKEJuLmcpLEZ5KGUscixvdCksZj1UZSxDPTAsVj1mLmxlbmd0aDtDPFY7KytDKWE9ZltDXSxGYShhLE1lKTtmb3IoZz1jbixMPTAsSj1nLmxlbmd0aDtMPEo7KytMKWE9Z1tMXSxwbyhhLGFuKTtmb3IoRnkodCxuLFplKSx3PWZlLEI9MCx0ZT13Lmxlbmd0aDtCPHRlOysrQilhPXdbQl0sRmEoYSwkZSk7Zm9yKG89U3QsRT0wLHo9by5sZW5ndGg7RTx6OysrRSlhPW9bRV0scG8oYSxCbil9ZnVuY3Rpb24gZkxuKGUpe3ZhciB0LG4scixhLG8sZixnO2ZvcihmPWwoYXQoZSwoSDUoKSxZNikpLDI3KSxyPW5ldyBvcigoIWYuZSYmKGYuZT1uZXcgTG4oanMsZiw3LDQpKSxmLmUpKTtyLmUhPXIuaS5nYygpOyluPWwoZ3IociksNzQpLGc9bmV3IGx0KGwoT2UoKCFuLmEmJihuLmE9bmV3IG50KGNzLG4sNiw2KSksbi5hKSwwKSwxNjYpLmosbChPZSgoIW4uYSYmKG4uYT1uZXcgbnQoY3Msbiw2LDYpKSxuLmEpLDApLDE2Nikuayksbz1uZXcgbHQobChPZSgoIW4uYSYmKG4uYT1uZXcgbnQoY3Msbiw2LDYpKSxuLmEpLDApLDE2NikuYixsKE9lKCghbi5hJiYobi5hPW5ldyBudChjcyxuLDYsNikpLG4uYSksMCksMTY2KS5jKSxhPW5ldyBsdChvLmEtZy5hLG8uYi1nLmIpLHQ9Yi5NYXRoLmF0YW4yKGEuYixhLmEpLGwoT2UoKCFuLmMmJihuLmM9bmV3IExuKF9yLG4sNSw4KSksbi5jKSwwKSw4NCkucWYoKFNiKCksZWdlKSx0KX1mdW5jdGlvbiBkTG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7Zm9yKHQuVWcoIkludGVyYWN0aXZlIE5vZGUgUmVvcmRlcmVyIiwxKSxDPSghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKSxnPW5ldyBidCxhPW5ldyBvcihDKTthLmUhPWEuaS5nYygpOyluPWwoZ3IoYSksMjcpLFAxKG4sKHoxKCksakIpKSYmJG4oZy5jLG4pO2ZvcihvPW5ldyBHKGcpO28uYTxvLmMuYy5sZW5ndGg7KW49bChyZShvKSwyNyksc1YoQyxuKTtmb3IoQ24oKSxWcyhnLG5ldyBFbmUpLGY9bmV3IEcoZyk7Zi5hPGYuYy5jLmxlbmd0aDspbj1sKHJlKGYpLDI3KSxFPWwoYXQobiwoejEoKSxqQikpLDE3KS5hLEU9Yi5NYXRoLm1pbihFLEMuaSksX0EoQyxFLG4pO2Zvcih3PTAscj1uZXcgb3IoQyk7ci5lIT1yLmkuZ2MoKTspbj1sKGdyKHIpLDI3KSxIaShuLCh6MSgpLGVPZSkscHQodykpLCsrdzt0LlZnKCl9ZnVuY3Rpb24gRGtlKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDO3JldHVybiBiLk1hdGguYWJzKHQucy10LmMpPERkfHxiLk1hdGguYWJzKG4ucy1uLmMpPERkPzA6KHI9b2J0KGUsdC5qLG4uZSksYT1vYnQoZSxuLmosdC5lKSxvPXI9PS0xfHxhPT0tMSxmPTAsbz8ocj09LTEmJihuZXcgUG0oKEowKCkscWIpLG4sdCwxKSwrK2YpLGE9PS0xJiYobmV3IFBtKChKMCgpLHFiKSx0LG4sMSksKytmKSk6KGc9ZTYodC5qLG4ucyxuLmMpLGcrPWU2KG4uZSx0LnMsdC5jKSx3PWU2KG4uaix0LnMsdC5jKSx3Kz1lNih0LmUsbi5zLG4uYyksRT1yKzE2KmcsQz1hKzE2KncsRTxDP25ldyBQbSgoSjAoKSxFNCksdCxuLEMtRSk6RT5DP25ldyBQbSgoSjAoKSxFNCksbix0LEUtQyk6RT4wJiZDPjAmJihuZXcgUG0oKEowKCksRTQpLHQsbiwwKSxuZXcgUG0oRTQsbix0LDApKSksZil9ZnVuY3Rpb24gZ0xuKGUsdCxuKXt2YXIgcixhLG87Zm9yKGUuYT1uZXcgYnQsbz1Scih0LmIsMCk7by5iIT1vLmQuYzspe2ZvcihhPWwoQnIobyksNDApO2woUShhLChIYygpLCRkKSksMTcpLmE+ZS5hLmMubGVuZ3RoLTE7KXZ0KGUuYSxuZXcgY2EoeTYsaENlKSk7cj1sKFEoYSwkZCksMTcpLmEsbj09KEpzKCksdWMpfHxuPT12Yz8oYS5lLmE8emUoR2UobChqdChlLmEsciksNDIpLmEpKSYmVmUobChqdChlLmEsciksNDIpLGEuZS5hKSxhLmUuYSthLmYuYT56ZShHZShsKGp0KGUuYSxyKSw0MikuYikpJiZjdChsKGp0KGUuYSxyKSw0MiksYS5lLmErYS5mLmEpKTooYS5lLmI8emUoR2UobChqdChlLmEsciksNDIpLmEpKSYmVmUobChqdChlLmEsciksNDIpLGEuZS5iKSxhLmUuYithLmYuYj56ZShHZShsKGp0KGUuYSxyKSw0MikuYikpJiZjdChsKGp0KGUuYSxyKSw0MiksYS5lLmIrYS5mLmIpKX19ZnVuY3Rpb24gdHZ0KGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDO2lmKG89elYociksZz1SdChCdChRKHIsKE50KCksVk1lKSkpKSwoZ3x8UnQoQnQoUShlLGJXKSkpKSYmIVA1KGwoUShlLE1zKSwxMDEpKSlhPWd4KG8pLHc9dmtlKGUsbixuPT0ocW8oKSx6dSk/YTpCTihhKSk7ZWxzZSBzd2l0Y2godz1uZXcgZ3UsTWModyxlKSx0PyhDPXcubixDLmE9dC5hLWUubi5hLEMuYj10LmItZS5uLmIsb3B0KEMsMCwwLGUuby5hLGUuby5iKSxsYSh3LGttdCh3LG8pKSk6KGE9Z3gobyksbGEodyxuPT0ocW8oKSx6dSk/YTpCTihhKSkpLGY9bChRKHIsKGZ0KCksTHUpKSwyMSksRT13Lmosby5nKXtjYXNlIDI6Y2FzZSAxOihFPT0oQ3QoKSxRbil8fEU9PURyKSYmZi5GYygoSG8oKSxCNikpO2JyZWFrO2Nhc2UgNDpjYXNlIDM6KEU9PShDdCgpLGFyKXx8RT09ZXIpJiZmLkZjKChIbygpLEI2KSl9cmV0dXJuIHd9ZnVuY3Rpb24gbnZ0KGUsdCl7dmFyIG4scixhLG8sZixnO2ZvcihmPW5ldyBxbShuZXcgU3IoZS5mLmIpLmEpO2YuYjspe2lmKG89TncoZiksYT1sKG8ubGQoKSw2MDIpLHQ9PTEpe2lmKGEuQWYoKSE9KEpzKCksd2YpJiZhLkFmKCkhPVExKWNvbnRpbnVlfWVsc2UgaWYoYS5BZigpIT0oSnMoKSx1YykmJmEuQWYoKSE9dmMpY29udGludWU7c3dpdGNoKHI9bChsKG8ubWQoKSw0MikuYiw4NiksZz1sKGwoby5tZCgpLDQyKS5hLDE5NCksbj1nLmMsYS5BZigpLmcpe2Nhc2UgMjpyLmcuYz1lLmUuYSxyLmcuYj1iLk1hdGgubWF4KDEsci5nLmIrbik7YnJlYWs7Y2FzZSAxOnIuZy5jPXIuZy5jK24sci5nLmI9Yi5NYXRoLm1heCgxLHIuZy5iLW4pO2JyZWFrO2Nhc2UgNDpyLmcuZD1lLmUuYixyLmcuYT1iLk1hdGgubWF4KDEsci5nLmErbik7YnJlYWs7Y2FzZSAzOnIuZy5kPXIuZy5kK24sci5nLmE9Yi5NYXRoLm1heCgxLHIuZy5hLW4pfX19ZnVuY3Rpb24gcExuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSjtmb3IoZz1XZShWcixkaSwyOCx0LmIuYy5sZW5ndGgsMTUsMSksRT1XZShsMWUsaXQsMjczLHQuYi5jLmxlbmd0aCwwLDEpLHc9V2Uod2csbTIsMTAsdC5iLmMubGVuZ3RoLDAsMSksTD1lLmEsQj0wLHo9TC5sZW5ndGg7Qjx6OysrQil7Zm9yKEM9TFtCXSxKPTAsZj1uZXcgRyhDLmUpO2YuYTxmLmMuYy5sZW5ndGg7KWE9bChyZShmKSwxMCkscj1veWUoYS5jKSwrK2dbcl0sVj16ZShHZShRKHQsKE50KCkseDApKSkpLGdbcl0+MCYmd1tyXSYmKFY9ajUoZS5iLHdbcl0sYSkpLEo9Yi5NYXRoLm1heChKLGEuYy5jLmIrVik7Zm9yKG89bmV3IEcoQy5lKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMTApLGEubi5iPUorYS5kLmQsbj1hLmMsbi5jLmI9SithLmQuZCthLm8uYithLmQuYSxFW2djKG4uYi5iLG4sMCldPWEuayx3W2djKG4uYi5iLG4sMCldPWF9fWZ1bmN0aW9uIHJ2dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKHI9bmV3IGhyKGRyKGNwKHQpLmEuS2MoKSxuZXcgaikpO2pyKHIpOyluPWwoeHIociksNzQpLERlKE9lKCghbi5iJiYobi5iPW5ldyBMbihfcixuLDQsNykpLG4uYiksMCksMTkzKXx8KHc9YmMobChPZSgoIW4uYyYmKG4uYz1uZXcgTG4oX3Isbiw1LDgpKSxuLmMpLDApLDg0KSkscUEobil8fChmPXQuaSt0LmcvMixnPXQuait0LmYvMixDPXcuaSt3LmcvMixMPXcuait3LmYvMixCPW5ldyBxYSxCLmE9Qy1mLEIuYj1MLWcsbz1uZXcgbHQoQi5hLEIuYiksUkUobyx0LmcsdC5mKSxCLmEtPW8uYSxCLmItPW8uYixmPUMtQi5hLGc9TC1CLmIsRT1uZXcgbHQoQi5hLEIuYiksUkUoRSx3Lmcsdy5mKSxCLmEtPUUuYSxCLmItPUUuYixDPWYrQi5hLEw9ZytCLmIsYT1sNihuLCEwLCEwKSxvRShhLGYpLHVFKGEsZyksYUUoYSxDKSxjRShhLEwpLHJ2dChlLHcpKSl9ZnVuY3Rpb24gaXZ0KGUpe3N3KGUsbmV3IFhtKG53KFp2KHR3KGV3KG5ldyB4MSxKdyksIkVMSyBTUE9yRSBDb21wYWN0aW9uIiksIlNocmlua1RyZWUgaXMgYSBjb21wYWN0aW9uIGFsZ29yaXRobSB0aGF0IG1haW50YWlucyB0aGUgdG9wb2xvZ3kgb2YgYSBsYXlvdXQuIFRoZSByZWxvY2F0aW9uIG9mIGRpYWdyYW0gZWxlbWVudHMgaXMgYmFzZWQgb24gY29udHJhY3RpbmcgYSBzcGFubmluZyB0cmVlLiIpLG5ldyBJbmUpKSksZ3QoZSxKdyxNZmUsSXQoSlcpKSxndChlLEp3LEdDZSxJdChFZ2UpKSxndChlLEp3LEtDZSxJdChrZ2UpKSxndChlLEp3LERmZSxJdChBT2UpKSxndChlLEp3LElmZSxJdCh4Z2UpKSxndChlLEp3LFh3LF9PZSksZ3QoZSxKdyxKeSw4KSxndChlLEp3LE9mZSxJdChaQ3QpKSxndChlLEp3LFdDZSxJdChDT2UpKSxndChlLEp3LFlDZSxJdChTT2UpKSxndChlLEp3LFZQLChIbigpLCExKSl9ZnVuY3Rpb24gYkxuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEw7Zm9yKHQuVWcoIlNpbXBsZSBub2RlIHBsYWNlbWVudCIsMSksTD1sKFEoZSwoZnQoKSwkNikpLDMxMiksZz0wLG89bmV3IEcoZS5iKTtvLmE8by5jLmMubGVuZ3RoOyl7Zm9yKHI9bChyZShvKSwzMCksZj1yLmMsZi5iPTAsbj1udWxsLEU9bmV3IEcoci5hKTtFLmE8RS5jLmMubGVuZ3RoOyl3PWwocmUoRSksMTApLG4mJihmLmIrPVI4ZSh3LG4sTC5jKSksZi5iKz13LmQuZCt3Lm8uYit3LmQuYSxuPXc7Zz1iLk1hdGgubWF4KGcsZi5iKX1mb3IoYT1uZXcgRyhlLmIpO2EuYTxhLmMuYy5sZW5ndGg7KWZvcihyPWwocmUoYSksMzApLGY9ci5jLEM9KGctZi5iKS8yLG49bnVsbCxFPW5ldyBHKHIuYSk7RS5hPEUuYy5jLmxlbmd0aDspdz1sKHJlKEUpLDEwKSxuJiYoQys9UjhlKHcsbixMLmMpKSxDKz13LmQuZCx3Lm4uYj1DLEMrPXcuby5iK3cuZC5hLG49dzt0LlZnKCl9ZnVuY3Rpb24gbUxuKGUsdCl7dmFyIG4scixhLG87Zm9yKEN3bih0LmIuaiksSXMoZmMobmV3IGJuKG51bGwsbmV3IGtuKHQuZCwxNikpLG5ldyBTZWUpLG5ldyBfZWUpLG89bmV3IEcodC5kKTtvLmE8by5jLmMubGVuZ3RoOyl7c3dpdGNoKGE9bChyZShvKSwxMDUpLGEuZS5nKXtjYXNlIDA6bj1sKGp0KGEuaiwwKSwxMTMpLmQuaixTKGEsbChmaChZOChsKCRpKGEuayxuKSwxNSkuT2MoKSxJNikpLDExMykpLGsoYSxsKGZoKHZ5KGwoJGkoYS5rLG4pLDE1KS5PYygpLEk2KSksMTEzKSk7YnJlYWs7Y2FzZSAxOnI9b3hlKGEpLFMoYSxsKGZoKFk4KGwoJGkoYS5rLHJbMF0pLDE1KS5PYygpLEk2KSksMTEzKSksayhhLGwoZmgodnkobCgkaShhLmssclsxXSksMTUpLk9jKCksSTYpKSwxMTMpKTticmVhaztjYXNlIDI6cmtuKGUsYSk7YnJlYWs7Y2FzZSAzOnlDbihhKTticmVhaztjYXNlIDQ6VENuKGUsYSl9U3duKGEpfWUuYT1udWxsfWZ1bmN0aW9uIHZsZShlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQztyZXR1cm4gcj1lLmEubz09KEQxKCksWTEpP2dzOmlhLGc9TG10KGUsbmV3IFFldCh0LG4pKSwhZy5hJiZnLmM/KHVpKGUuZCxnKSxyKTpnLmE/KGE9Zy5hLmMsdz1nLmEuZCxuPyhFPWUuYS5jPT0oeGQoKSx3Myk/dzphLG89ZS5hLmM9PXczP2E6dyxmPWUuYS5nW28uaS5wXSxDPXplKGUuYS5wW2YucF0pK3plKGUuYS5kW28uaS5wXSkrby5uLmIrby5hLmItemUoZS5hLmRbRS5pLnBdKS1FLm4uYi1FLmEuYik6KEU9ZS5hLmM9PSh4ZCgpLFQyKT93OmEsbz1lLmEuYz09VDI/YTp3LEM9emUoZS5hLnBbZS5hLmdbby5pLnBdLnBdKSt6ZShlLmEuZFtvLmkucF0pK28ubi5iK28uYS5iLXplKGUuYS5kW0UuaS5wXSktRS5uLmItRS5hLmIpLGUuYS5uW2UuYS5nW2EuaS5wXS5wXT0oSG4oKSwhMCksZS5hLm5bZS5hLmdbdy5pLnBdLnBdPSEwLEMpOnJ9ZnVuY3Rpb24gdkxuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDLEw7aWYoci5nYygpPT0wKXJldHVybiExO2lmKHc9KEZvKCksbCh0LDY5KS54aygpKSxmPXc/cjpuZXcgTHcoci5nYygpKSx1cChlLmUsdCkpe2lmKHQuU2koKSlmb3IoQz1yLktjKCk7Qy5PYigpOylFPUMuUGIoKSwkVShlLHQsRSxEZSh0LDEwMikmJihsKHQsMTkpLkJiJklvKSE9MCl8fChvPXNnKHQsRSksZi5GYyhvKSk7ZWxzZSBpZighdylmb3IoQz1yLktjKCk7Qy5PYigpOylFPUMuUGIoKSxvPXNnKHQsRSksZi5GYyhvKX1lbHNle2ZvcihMPVd1KGUuZS5EaCgpLHQpLGE9bChlLmcsMTI0KSxnPTA7ZzxlLmk7KytnKWlmKG89YVtnXSxMLmFtKG8uTGsoKSkpdGhyb3cgdWUobmV3IFluKFpQKSk7aWYoci5nYygpPjEpdGhyb3cgdWUobmV3IFluKFpQKSk7d3x8KG89c2codCxyLktjKCkuUGIoKSksZi5GYyhvKSl9cmV0dXJuIE43ZShlLHQ5ZShlLHQsbiksZil9ZnVuY3Rpb24gSFUoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEM7aWYodXAoZS5lLHQpKXc9KEZvKCksbCh0LDY5KS54aygpP25ldyBuSCh0LGUpOm5ldyB5Tyh0LGUpKSxFVSh3LmMsdy5iKSxGXyh3LGwobiwxNikpO2Vsc2V7Zm9yKEM9V3UoZS5lLkRoKCksdCkscj1sKGUuZywxMjQpLGY9MDtmPGUuaTsrK2YpaWYoYT1yW2ZdLG89YS5MaygpLEMuYW0obykpe2lmKG89PShreCgpLHU5KXx8bz09Yzkpe2ZvcihFPVE4ZShlLHQsbiksZz1mLEU/VnkoZSxmKTorK2Y7ZjxlLmk7KWE9cltmXSxvPWEuTGsoKSxvPT11OXx8bz09Yzk/VnkoZSxmKTorK2Y7RXx8bChuNihlLGcsc2codCxuKSksNzYpfWVsc2UgUThlKGUsdCxuKT9WeShlLGYpOmwobjYoZSxmLChGbygpLGwodCw2OSkueGsoKT9sKG4sNzYpOnNnKHQsbikpKSw3Nik7cmV0dXJufVE4ZShlLHQsbil8fHFyKGUsKEZvKCksbCh0LDY5KS54aygpP2wobiw3Nik6c2codCxuKSkpfX1mdW5jdGlvbiBzdnQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEM7cmV0dXJuIFBpKG4sZS5iKXx8KGUuYj1uLG89bmV3IFdpLGY9bCh5YyhmYyhuZXcgYm4obnVsbCxuZXcga24obi5mLDE2KSksbyksU3kobmV3IHl0LG5ldyBqaSxuZXcgcW4sbmV3IFVuLGhlKGxlKG9jLDEpLGl0LDEwOCwwLFsoRmwoKSxpNCksRWNdKSkpLDIxKSxlLmU9ITAsZS5mPSEwLGUuYz0hMCxlLmQ9ITAsYT1mLkhjKChieCgpLGFCKSkscj1mLkhjKG9CKSxhJiYhciYmKGUuZj0hMSksIWEmJnImJihlLmQ9ITEpLGE9Zi5IYyhzQikscj1mLkhjKGNCKSxhJiYhciYmKGUuYz0hMSksIWEmJnImJihlLmU9ITEpKSxDPWwoZS5hLlZlKHQsbiksNDIpLHc9bChDLmEsMTcpLmEsRT1sKEMuYiwxNykuYSxnPSExLHc8MD9lLmN8fChnPSEwKTplLmV8fChnPSEwKSxFPDA/ZS5kfHwoZz0hMCk6ZS5mfHwoZz0hMCksZz9zdnQoZSxDLG4pOkN9ZnVuY3Rpb24gd0xuKGUpe3ZhciB0LG4scixhO2E9ZS5vLHB5KCksZS5BLmRjKCl8fFBpKGUuQSxxX2UpP3Q9YS5iOih0PXRQKGUuZiksZS5BLkhjKChtaCgpLHJGKSkmJiFlLkIuSGMoKFpsKCksRk0pKSYmKHQ9Yi5NYXRoLm1heCh0LHRQKGwoUW8oZS5wLChDdCgpLGFyKSksMjUyKSkpLHQ9Yi5NYXRoLm1heCh0LHRQKGwoUW8oZS5wLGVyKSwyNTIpKSkpLG49UmZ0KGUpLG4mJih0PWIuTWF0aC5tYXgodCxuLmIpKSxlLkEuSGMoaUYpJiYoZS5xPT0oUmEoKSxUZyl8fGUucT09TXUpJiYodD1iLk1hdGgubWF4KHQsdEgobChRbyhlLmIsKEN0KCksYXIpKSwxMjcpKSksdD1iLk1hdGgubWF4KHQsdEgobChRbyhlLmIsZXIpLDEyNykpKSkpLFJ0KEJ0KGUuZS5UZigpLm9mKChwaSgpLEM0KSkpKT9hLmI9Yi5NYXRoLm1heChhLmIsdCk6YS5iPXQscj1lLmYuaSxyLmQ9MCxyLmE9dCxmbGUoZS5mKX1mdW5jdGlvbiBhdnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKO2ZvcihMPTA7TDx0Lmxlbmd0aDtMKyspe2ZvcihnPWUuS2MoKTtnLk9iKCk7KW89bChnLlBiKCksMjMwKSxvLmhnKEwsdCk7Zm9yKEI9MDtCPHRbTF0ubGVuZ3RoO0IrKyl7Zm9yKHc9ZS5LYygpO3cuT2IoKTspbz1sKHcuUGIoKSwyMzApLG8uaWcoTCxCLHQpO2ZvcihKPXRbTF1bQl0uaix6PTA7ejxKLmMubGVuZ3RoO3orKyl7Zm9yKEU9ZS5LYygpO0UuT2IoKTspbz1sKEUuUGIoKSwyMzApLG8uamcoTCxCLHosdCk7Zm9yKFY9KFNuKHosSi5jLmxlbmd0aCksbChKLmNbel0sMTIpKSxuPTAsYT1uZXcgTjEoVi5iKTtMYyhhLmEpfHxMYyhhLmIpOylmb3Iocj1sKExjKGEuYSk/cmUoYS5hKTpyZShhLmIpLDE4KSxDPWUuS2MoKTtDLk9iKCk7KW89bChDLlBiKCksMjMwKSxvLmdnKEwsQix6LG4rKyxyLHQpfX19Zm9yKGY9ZS5LYygpO2YuT2IoKTspbz1sKGYuUGIoKSwyMzApLG8uZmcoKX1mdW5jdGlvbiB5TG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdztmb3IoZS5iPXplKEdlKFEodCwoTnQoKSxxNikpKSksZS5jPXplKEdlKFEodCx2dikpKSxlLmQ9bChRKHQscmRlKSwzNTApLGUuYT1sKFEodCxsVyksMjgyKSxhN24odCksZz1sKHljKEZpKEZpKERjKERjKG5ldyBibihudWxsLG5ldyBrbih0LmIsMTYpKSxuZXcgbFopLG5ldyBoUyksbmV3IGlJKSxuZXcgZmopLFBsKG5ldyB6cixuZXcgaHQsbmV3IEZuLGhlKGxlKG9jLDEpLGl0LDEwOCwwLFsoRmwoKSxFYyldKSkpLDE1KSxhPWcuS2MoKTthLk9iKCk7KW49bChhLlBiKCksMTgpLGY9bChRKG4sKGZ0KCksZnYpKSwxNSksZi5KYyhuZXcgWFdlKGUpKSxydChuLGZ2LG51bGwpO2ZvcihyPWcuS2MoKTtyLk9iKCk7KW49bChyLlBiKCksMTgpLHc9bChRKG4sKGZ0KCksS0xlKSksMTgpLG89bChRKG4sejYpLDE1KSxOSW4oZSxvLHcpLHJ0KG4sejYsbnVsbCl9ZnVuY3Rpb24gd2xlKGUsdCl7dmFyIG4scixhLG8sZixnLHc7aWYoZS5hKXtpZihnPWUuYS54ZSgpLHc9bnVsbCxnIT1udWxsP3QuYSs9IiIrZzooZj1lLmEubWsoKSxmIT1udWxsJiYobz1wZChmLGNsKDkxKSksbyE9LTE/KHc9KFhuKG8sZi5sZW5ndGgrMSksZi5zdWJzdHIobykpLHQuYSs9IiIrdGYoZj09bnVsbD91bDoobnIoZiksZiksMCxvKSk6dC5hKz0iIitmKSksZS5kJiZlLmQuaSE9MCl7Zm9yKGE9ITAsdC5hKz0iPCIscj1uZXcgb3IoZS5kKTtyLmUhPXIuaS5nYygpOyluPWwoZ3IociksODkpLGE/YT0hMTp0LmErPUNvLHdsZShuLHQpO3QuYSs9Ij4ifXchPW51bGwmJih0LmErPSIiK3cpfWVsc2UgZS5lPyhnPWUuZS56YixnIT1udWxsJiYodC5hKz0iIitnKSk6KHQuYSs9Ij8iLGUuYj8odC5hKz0iIHN1cGVyICIsd2xlKGUuYix0KSk6ZS5mJiYodC5hKz0iIGV4dGVuZHMgIix3bGUoZS5mLHQpKSl9ZnVuY3Rpb24geExuKGUpe2UuYj1udWxsLGUuYT1udWxsLGUubz1udWxsLGUucT1udWxsLGUudj1udWxsLGUudz1udWxsLGUuQj1udWxsLGUucD1udWxsLGUuUT1udWxsLGUuUj1udWxsLGUuUz1udWxsLGUuVD1udWxsLGUuVT1udWxsLGUuVj1udWxsLGUuVz1udWxsLGUuYmI9bnVsbCxlLmViPW51bGwsZS5hYj1udWxsLGUuSD1udWxsLGUuZGI9bnVsbCxlLmM9bnVsbCxlLmQ9bnVsbCxlLmY9bnVsbCxlLm49bnVsbCxlLnI9bnVsbCxlLnM9bnVsbCxlLnU9bnVsbCxlLkc9bnVsbCxlLko9bnVsbCxlLmU9bnVsbCxlLmo9bnVsbCxlLmk9bnVsbCxlLmc9bnVsbCxlLms9bnVsbCxlLnQ9bnVsbCxlLkY9bnVsbCxlLkk9bnVsbCxlLkw9bnVsbCxlLk09bnVsbCxlLk89bnVsbCxlLlA9bnVsbCxlLiQ9bnVsbCxlLk49bnVsbCxlLlo9bnVsbCxlLmNiPW51bGwsZS5LPW51bGwsZS5EPW51bGwsZS5BPW51bGwsZS5DPW51bGwsZS5fPW51bGwsZS5mYj1udWxsLGUuWD1udWxsLGUuWT1udWxsLGUuZ2I9ITEsZS5oYj0hMX1mdW5jdGlvbiBrTG4oZSl7dmFyIHQsbixyLGE7aWYocj1EbGUoKCFlLmMmJihlLmM9WE8oWmMoZS5mKSkpLGUuYyksMCksZS5lPT0wfHxlLmE9PTAmJmUuZiE9LTEmJmUuZTwwKXJldHVybiByO2lmKHQ9eTdlKGUpPDA/MTowLG49ZS5lLGE9KHIubGVuZ3RoKzErYi5NYXRoLmFicyh1YShlLmUpKSxuZXcgUzUpLHQ9PTEmJihhLmErPSItIiksZS5lPjApaWYobi09ci5sZW5ndGgtdCxuPj0wKXtmb3IoYS5hKz0iMC4iO24+bHYubGVuZ3RoO24tPWx2Lmxlbmd0aClRaXQoYSxsdik7UHJ0KGEsbHYsdWEobikpLGhpKGEsKFhuKHQsci5sZW5ndGgrMSksci5zdWJzdHIodCkpKX1lbHNlIG49dC1uLGhpKGEsdGYocix0LHVhKG4pKSksYS5hKz0iLiIsaGkoYSx3NWUocix1YShuKSkpO2Vsc2V7Zm9yKGhpKGEsKFhuKHQsci5sZW5ndGgrMSksci5zdWJzdHIodCkpKTtuPC1sdi5sZW5ndGg7bis9bHYubGVuZ3RoKVFpdChhLGx2KTtQcnQoYSxsdix1YSgtbikpfXJldHVybiBhLmF9ZnVuY3Rpb24geWxlKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRTtyZXR1cm4hKGUuayE9KFpuKCksUHMpfHxlLmouYy5sZW5ndGg8PTF8fChvPWwoUShlLChOdCgpLE1zKSksMTAxKSxvPT0oUmEoKSxNdSkpfHwoYT0oQnkoKSwoZS5xP2UucTooQ24oKSxDbigpLG1nKSkuX2IoZzMpP3I9bChRKGUsZzMpLDIwMyk6cj1sKFEoZW8oZSksZU0pLDIwMyksciksYT09X1cpfHwhKGE9PUc2fHxhPT1VNikmJihmPXplKEdlKFB5KGUsdE0pKSksdD1sKFEoZSxfQiksMTQwKSwhdCYmKHQ9bmV3IG40ZShmLGYsZixmKSksRT1PYyhlLChDdCgpLGVyKSksdz10LmQrdC5hKyhFLmdjKCktMSkqZix3PmUuby5ifHwobj1PYyhlLGFyKSxnPXQuZCt0LmErKG4uZ2MoKS0xKSpmLGc+ZS5vLmIpKSl9ZnVuY3Rpb24gRUxuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZTt0LlVnKCJPcnRob2dvbmFsIGVkZ2Ugcm91dGluZyIsMSksRT16ZShHZShRKGUsKE50KCksVjYpKSkpLG49emUoR2UoUShlLHE2KSkpLHI9emUoR2UoUShlLHZ2KSkpLEI9bmV3IEhhZSgwLG4pLHRlPTAsZj1uZXcgVWEoZS5iLDApLGc9bnVsbCxDPW51bGwsdz1udWxsLEw9bnVsbDtkbyBDPWYuYjxmLmQuZ2MoKT8obXIoZi5iPGYuZC5nYygpKSxsKGYuZC5YYihmLmM9Zi5iKyspLDMwKSk6bnVsbCxMPUM/Qy5hOm51bGwsZyYmKE9rZShnLHRlKSx0ZSs9Zy5jLmEpLEo9Zz90ZStyOnRlLFY9UmtlKEIsZSx3LEwsSiksYT0hZ3x8THEodywoSVUoKSxJQikpLG89IUN8fExxKEwsKElVKCksSUIpKSxWPjA/KHo9KFYtMSkqbixnJiYoeis9ciksQyYmKHorPXIpLHo8RSYmIWEmJiFvJiYoej1FKSx0ZSs9eik6IWEmJiFvJiYodGUrPUUpLGc9Qyx3PUw7d2hpbGUoQyk7ZS5mLmE9dGUsdC5WZygpfWZ1bmN0aW9uIFZVKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEw7aWYoQz1udWxsLGUuZCYmKEM9bCh4dShlLmQsdCksMTQyKSksIUMpe2lmKG89ZS5hLnZpKCksTD1vLmksIWUuZHx8ZF8oZS5kKSE9TCl7Zm9yKHc9bmV3IFByLGUuZCYmYkEodyxlLmQpLEU9dy5mLmMrdy5pLmMsZz1FO2c8TDsrK2cpcj1sKE9lKG8sZyksMTQyKSxhPW8yKGUuZSxyKS54ZSgpLG49bChhPT1udWxsP2p1KHcuZixudWxsLHIpOkJ3KHcuaSxhLHIpLDE0MiksbiYmbiE9ciYmKGE9PW51bGw/anUody5mLG51bGwsbik6Qncody5pLGEsbikpO2lmKHcuZi5jK3cuaS5jIT1MKWZvcihmPTA7ZjxFOysrZilyPWwoT2UobyxmKSwxNDIpLGE9bzIoZS5lLHIpLnhlKCksbj1sKGE9PW51bGw/anUody5mLG51bGwscik6Qncody5pLGEsciksMTQyKSxuJiZuIT1yJiYoYT09bnVsbD9qdSh3LmYsbnVsbCxuKTpCdyh3LmksYSxuKSk7ZS5kPXd9Qz1sKHh1KGUuZCx0KSwxNDIpfXJldHVybiBDfWZ1bmN0aW9uIHhsZShlLHQsbixyLGEsbyxmKXt2YXIgZyx3LEUsQyxMLEIsejtyZXR1cm4gTD1SdChCdChRKHQsKE50KCksVU1lKSkpKSxCPW51bGwsbz09KHFvKCksJGwpJiZyLmMuaT09bj9CPXIuYzpvPT16dSYmci5kLmk9PW4mJihCPXIuZCksRT1mLCFFfHwhTHx8Qj8oQz0oQ3QoKSxQYyksQj9DPUIuajpQNShsKFEobixNcyksMTAxKSkmJihDPW89PSRsP2VyOmFyKSx3PVRMbihlLHQsbixvLEMsciksZz1Bb2UoKGVvKG4pLHIpKSxvPT0kbD8ocG8oZyxsKGp0KHcuaiwwKSwxMikpLEZhKGcsYSkpOihwbyhnLGEpLEZhKGcsbChqdCh3LmosMCksMTIpKSksRT1uZXcgZjF0KHIsZyx3LGwoUSh3LChmdCgpLHppKSksMTIpLG8sIUIpKToodnQoRS5lLHIpLHo9Yi5NYXRoLm1heCh6ZShHZShRKEUuZCx4MikpKSx6ZShHZShRKHIseDIpKSkpLHJ0KEUuZCx4Mix6KSkseG4oZS5hLHIsbmV3IEtxKEUuZCx0LG8pKSxFfWZ1bmN0aW9uIGtsZSgpe2tsZT1VO3ZhciBlO1NQZT1uZXcgYUplLFBfdD1XZSh6dCxkdCwyLDAsNiwxKSxPX3Q9UTAoZngoMzMsNTgpLGZ4KDEsMjYpKSxOX3Q9UTAoZngoOTcsMTIyKSxmeCg2NSw5MCkpLHhQZT1meCg0OCw1NyksRF90PVEwKE9fdCwwKSxJX3Q9UTAoTl90LHhQZSksa1BlPVEwKFEwKDAsZngoMSw2KSksZngoMzMsMzgpKSxFUGU9UTAoUTAoeFBlLGZ4KDY1LDcwKSksZngoOTcsMTAyKSksQl90PVEwKERfdCxlVSgiLV8uIX4qJygpIikpLEZfdD1RMChJX3QsR1YoIi1fLiF+KicoKSIpKSxlVSh0NXQpLEdWKHQ1dCksUTAoQl90LGVVKCI7OkAmPSskLCIpKSxRMChGX3QsR1YoIjs6QCY9KyQsIikpLFRQZT1lVSgiOi8/IyIpLENQZT1HVigiOi8/IyIpLCRNPWVVKCIvPyMiKSx6TT1HVigiLz8jIiksZT1uZXcgS3MsZS5hLnpjKCJqYXIiLGUpLGUuYS56YygiemlwIixlKSxlLmEuemMoImFyY2hpdmUiLGUpLEVZPShDbigpLG5ldyBFayhlKSl9ZnVuY3Rpb24gVExuKGUsdCxuLHIsYSxvKXt2YXIgZixnLHcsRSxDLEw7cmV0dXJuIGY9bnVsbCxFPXI9PShxbygpLCRsKT9vLmM6by5kLHc9elYodCksRS5pPT1uPyhmPWwoY3IoZS5iLEUpLDEwKSxmfHwoZj12UChFLGwoUShuLChOdCgpLE1zKSksMTAxKSxhLEFfbihFKSxudWxsLEUubixFLm8sdyx0KSxydChmLChmdCgpLHppKSxFKSxraShlLmIsRSxmKSkpOihmPXZQKChDPW5ldyBCcyxMPXplKEdlKFEodCwoTnQoKSx4MCkpKSkvMixfTihDLG00LEwpLEMpLGwoUShuLE1zKSwxMDEpLGEscj09JGw/LTE6MSxudWxsLG5ldyBxYSxuZXcgbHQoMCwwKSx3LHQpLGc9cnhuKGYsbixyKSxydChmLChmdCgpLHppKSxnKSxraShlLmIsZyxmKSksbChRKHQsKGZ0KCksTHUpKSwyMSkuRmMoKEhvKCksdmYpKSxQNShsKFEodCwoTnQoKSxNcykpLDEwMSkpP3J0KHQsTXMsKFJhKCksc0MpKTpydCh0LE1zLChSYSgpLFoxKSksZn1mdW5jdGlvbiBRRShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWO2c9MCxWPTAsdz1PSChlLmcsZS5nLmxlbmd0aCksbz1lLmUsZj1lLmoscj1lLmIsYT1lLmM7ZG97Zm9yKHo9MCxDPW5ldyBHKGUucSk7Qy5hPEMuYy5jLmxlbmd0aDspRT1sKHJlKEMpLDEwKSxCPVN2dChlLEUpLG49ITAsKGUucj09KE5mKCksQUIpfHxlLnI9PUxCKSYmKG49UnQoQnQoQi5iKSkpLGwoQi5hLDE3KS5hPDAmJm4/KCsreix3PU9IKGUuZyxlLmcubGVuZ3RoKSxlLmU9ZS5lK2woQi5hLDE3KS5hLFYrPW8tZS5lLG89ZS5lK2woQi5hLDE3KS5hLGY9ZS5qLHI9X3coZS5iKSxhPV93KGUuYykpOihlLmc9T0godyx3Lmxlbmd0aCksZS5lPW8sZS5iPShYcihyKSxyP25ldyBPbChyKTokayhuZXcgRyhyKSkpLGUuYz0oWHIoYSksYT9uZXcgT2woYSk6JGsobmV3IEcoYSkpKSxlLmo9Zik7KytnLEw9eiE9MCYmUnQoQnQodC5LYihuZXcgY2EocHQoVikscHQoZykpKSkpfXdoaWxlKEwpfWZ1bmN0aW9uIENMbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW47cmV0dXJuIGY9ZS5mLEI9dC5mLGc9Zj09KFZBKCksZTkpfHxmPT15TSx6PUI9PWU5fHxCPT15TSx3PWY9PVE2fHxmPT14TSxWPUI9PVE2fHxCPT14TSxFPWY9PVE2fHxmPT1lOSxKPUI9PVE2fHxCPT1lOSxnJiZ6P2UuZj09eU0/ZTp0OncmJlY/ZS5mPT14TT9lOnQ6RSYmSj8oZj09UTY/KEw9ZSxDPXQpOihMPXQsQz1lKSxvPSh0ZT1uLmorbi5mLGZlPUwuZStyLmYsVGU9Yi5NYXRoLm1heCh0ZSxmZSksTWU9VGUtYi5NYXRoLm1pbihuLmosTC5lKSwkZT1MLmQrci5nLW4uaSwkZSpNZSksYT0oWmU9bi5pK24uZyxvdD1DLmQrci5nLFN0PWIuTWF0aC5tYXgoWmUsb3QpLGNuPVN0LWIuTWF0aC5taW4obi5pLEMuZCksYW49Qy5lK3IuZi1uLmosY24qYW4pLG88PWE/ZS5mPT1RNj9lOnQ6ZS5mPT1lOT9lOnQpOmV9ZnVuY3Rpb24gb3Z0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEw7aWYocnQodCwoUWkoKSxKVCksMCksdz1sKFEodCxCVyksNDApLHQuZC5iPT0wKXc/KEM9emUoR2UoUSh3LEMyKSkpK2UuYitwOGUoZSx3LHQpLHJ0KHQsQzIsQykpOnJ0KHQsQzIsMCk7ZWxzZXtmb3Iocj0obz1ScihuZXcgSGcodCkuYS5kLDApLG5ldyBDNShvKSk7UUkoci5hKTspbj1sKEJyKHIuYSksNjUpLmMsb3Z0KGUsbik7Zz1sKFBxKChmPVJyKG5ldyBIZyh0KS5hLmQsMCksbmV3IEM1KGYpKSksNDApLEw9bChJaG4oKGE9UnIobmV3IEhnKHQpLmEuZCwwKSxuZXcgQzUoYSkpKSw0MCksRT0oemUoR2UoUShMLEMyKSkpK3plKEdlKFEoZyxDMikpKSkvMix3PyhDPXplKEdlKFEodyxDMikpKStlLmIrcDhlKGUsdyx0KSxydCh0LEMyLEMpLHJ0KHQsSlQsemUoR2UoUSh0LEMyKSkpLUUpLEZNbihlLHQpKTpydCh0LEMyLEUpfX1mdW5jdGlvbiBTTG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTDtmb3IoQz1lLmUuYS5jLmxlbmd0aCxmPW5ldyBHKGUuZS5hKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMTI1KSxvLmo9ITE7Zm9yKGUuaT1XZShWcixkaSwyOCxDLDE1LDEpLGUuZz1XZShWcixkaSwyOCxDLDE1LDEpLGUubj1uZXcgYnQsYT0wLEw9bmV3IGJ0LHc9bmV3IEcoZS5lLmEpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwxMjUpLGcuZD1hKyssZy5iLmEuYy5sZW5ndGg9PTAmJnZ0KGUubixnKSxyYShMLGcuZyk7Zm9yKHQ9MCxyPW5ldyBHKEwpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwyMTgpLG4uYz10Kyssbi5mPSExO0U9TC5jLmxlbmd0aCxlLmI9PW51bGx8fGUuYi5sZW5ndGg8RT8oZS5iPVdlKE5hLFpvLDI4LEUsMTUsMSksZS5jPVdlKGloLHBnLDI4LEUsMTYsMSkpOnVfKGUuYyksZS5kPUwsZS5wPW5ldyBuYWUoQXkoZS5kLmMubGVuZ3RoKSksZS5qPTF9ZnVuY3Rpb24gX0xuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2lmKCEodC5lLmMubGVuZ3RoPD0xKSl7Zm9yKGUuZj10LGUuZD1sKFEoZS5mLChWTigpLG9BZSkpLDM5MSksZS5nPWwoUShlLmYsaEFlKSwxNykuYSxlLmU9emUoR2UoUShlLmYsY0FlKSkpLGUuYz16ZShHZShRKGUuZixUSykpKSxqc3QoZS5iKSxhPW5ldyBHKGUuZi5jKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMjkwKSxka2UoZS5iLHIuYyxyLG51bGwpLGRrZShlLmIsci5kLHIsbnVsbCk7Zm9yKGc9ZS5mLmUuYy5sZW5ndGgsZS5hPUxtKE5hLFtkdCxab10sWzEwOSwyOF0sMTUsW2csZ10sMiksRT1uZXcgRyhlLmYuZSk7RS5hPEUuYy5jLmxlbmd0aDspdz1sKHJlKEUpLDE1MyksWkFuKGUsdyxlLmFbdy5hXSk7Zm9yKGUuaT1MbShOYSxbZHQsWm9dLFsxMDksMjhdLDE1LFtnLGddLDIpLG89MDtvPGc7KytvKWZvcihmPTA7ZjxnOysrZiluPWUuYVtvXVtmXSxDPTEvKG4qbiksZS5pW29dW2ZdPUN9fWZ1bmN0aW9uIGN2dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIsejtpZihnPXQuYWgoKSxnfHx0LlVnKFQzdCwxKSxuPWwoUShlLChmdCgpLEsxZSkpLDE1KSxmPTEvbi5nYygpLHQuX2coKSlmb3IodC5iaCgiRUxLIExheWVyZWQgdXNlcyB0aGUgZm9sbG93aW5nICIrbi5nYygpKyIgbW9kdWxlczoiKSx6PTAsQj1uLktjKCk7Qi5PYigpOylDPWwoQi5QYigpLDQ3KSxyPSh6PDEwPyIwIjoiIikreisrLHQuYmgoIiAgIFNsb3QgIityKyI6ICIrX20oYmgoQykpKTtmb3IoTD1uLktjKCk7TC5PYigpOyl7aWYoQz1sKEwuUGIoKSw0NyksdC4kZygpKXJldHVybjtDLktmKGUsdC5laChmKSl9Zm9yKG89bmV3IEcoZS5iKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMzApLHJhKGUuYSxhLmEpLGEuYS5jLmxlbmd0aD0wO2ZvcihFPW5ldyBHKGUuYSk7RS5hPEUuYy5jLmxlbmd0aDspdz1sKHJlKEUpLDEwKSxWYSh3LG51bGwpO2UuYi5jLmxlbmd0aD0wLGd8fHQuVmcoKX1mdW5jdGlvbiBBTG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHo7aWYoRT1uZXcgYnQsIW5zKGUsKGZ0KCkscTFlKSkpcmV0dXJuIEU7Zm9yKHI9bChRKGUscTFlKSwxNSkuS2MoKTtyLk9iKCk7KXQ9bChyLlBiKCksMTApLFVMbih0LGUpLCRuKEUuYyx0KTtmb3Iobz1uZXcgRyhlLmIpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihhPWwocmUobyksMzApLGc9bmV3IEcoYS5hKTtnLmE8Zy5jLmMubGVuZ3RoOylmPWwocmUoZyksMTApLGYuaz09KFpuKCksVXMpJiYodz1sKFEoZixhVyksMTApLHcmJihDPW5ldyBndSxNYyhDLGYpLEw9bChRKGYsV2MpLDY0KSxsYShDLEwpLEI9bChqdCh3LmosMCksMTIpLHo9bmV3IFR3LHBvKHosQyksRmEoeixCKSkpO2ZvcihuPW5ldyBHKEUpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwxMCksVmEodCxsKGp0KGUuYixlLmIuYy5sZW5ndGgtMSksMzApKTtyZXR1cm4gRX1mdW5jdGlvbiB1dnQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTDtmb3IoTD1uZXcgYnQsQz1uZXcgUTVlKDAsbiksbz0wLGJWKEMsbmV3IGtjZSgwLDAsQyxuKSksYT0wLEU9bmV3IG9yKGUpO0UuZSE9RS5pLmdjKCk7KXc9bChncihFKSwyNykscj1sKGp0KEMuYSxDLmEuYy5sZW5ndGgtMSksMTcyKSxnPWErdy5nKyhsKGp0KEMuYSwwKSwxNzIpLmIuYy5sZW5ndGg9PTA/MDpuKSwoZz50fHxSdChCdChhdCh3LCh6MSgpLCRCKSkpKSkmJihhPTAsbys9Qy5iK24sJG4oTC5jLEMpLEM9bmV3IFE1ZShvLG4pLHI9bmV3IGtjZSgwLEMuZixDLG4pLGJWKEMsciksYT0wKSxyLmIuYy5sZW5ndGg9PTB8fCFSdChCdChhdChkcyh3KSwoejEoKSxoZ2UpKSkpJiYody5mPj1yLm8mJncuZjw9ci5mfHxyLmEqLjU8PXcuZiYmci5hKjEuNT49dy5mKT95OGUocix3KTooZj1uZXcga2NlKHIucytyLnIrbixDLmYsQyxuKSxiVihDLGYpLHk4ZShmLHcpKSxhPXcuaSt3Lmc7cmV0dXJuICRuKEwuYyxDKSxMfWZ1bmN0aW9uIGVMKGUpe3ZhciB0LG4scixhO2lmKCEoZS5iPT1udWxsfHxlLmIubGVuZ3RoPD0yKSYmIWUuYSl7Zm9yKHQ9MCxhPTA7YTxlLmIubGVuZ3RoOyl7Zm9yKHQhPWE/KGUuYlt0XT1lLmJbYSsrXSxlLmJbdCsxXT1lLmJbYSsrXSk6YSs9MixuPWUuYlt0KzFdO2E8ZS5iLmxlbmd0aCYmIShuKzE8ZS5iW2FdKTspaWYobisxPT1lLmJbYV0pZS5iW3QrMV09ZS5iW2ErMV0sbj1lLmJbdCsxXSxhKz0yO2Vsc2UgaWYobj49ZS5iW2ErMV0pYSs9MjtlbHNlIGlmKG48ZS5iW2ErMV0pZS5iW3QrMV09ZS5iW2ErMV0sbj1lLmJbdCsxXSxhKz0yO2Vsc2UgdGhyb3cgdWUobmV3IEFjKCJUb2tlbiNjb21wYWN0UmFuZ2VzKCk6IEludGVybmVsIEVycm9yOiBbIitlLmJbdF0rIiwiK2UuYlt0KzFdKyJdIFsiK2UuYlthXSsiLCIrZS5iW2ErMV0rIl0iKSk7dCs9Mn10IT1lLmIubGVuZ3RoJiYocj1XZShWcixkaSwyOCx0LDE1LDEpLHB1KGUuYiwwLHIsMCx0KSxlLmI9ciksZS5hPSEwfX1mdW5jdGlvbiBMTG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdztmb3IoZj1XOChlLmEpLktjKCk7Zi5PYigpOyl7aWYobz1sKGYuUGIoKSwxOCksby5iLmMubGVuZ3RoPjApZm9yKHI9bmV3IE9sKGwoJGkoZS5hLG8pLDIxKSksQ24oKSxWcyhyLG5ldyBHSSh0KSksYT1uZXcgVWEoby5iLDApO2EuYjxhLmQuZ2MoKTspe3N3aXRjaChuPShtcihhLmI8YS5kLmdjKCkpLGwoYS5kLlhiKGEuYz1hLmIrKyksNzIpKSxnPS0xLGwoUShuLChOdCgpLGpkKSksMjc4KS5nKXtjYXNlIDE6Zz1yLmMubGVuZ3RoLTE7YnJlYWs7Y2FzZSAwOmc9QjhuKHIpO2JyZWFrO2Nhc2UgMjpnPTB9ZyE9LTEmJih3PShTbihnLHIuYy5sZW5ndGgpLGwoci5jW2ddLDI0OSkpLHZ0KHcuYi5iLG4pLGwoUShlbyh3LmIuYy5pKSwoZnQoKSxMdSkpLDIxKS5GYygoSG8oKSxqVCkpLGwoUShlbyh3LmIuYy5pKSxMdSksMjEpLkZjKFJUKSxwaChhKSxydChuLFZMZSxvKSl9cG8obyxudWxsKSxGYShvLG51bGwpfX1mdW5jdGlvbiBNTG4oZSx0KXt2YXIgbixyLGEsbztyZXR1cm4gbj1uZXcgR2Qscj1sKHljKGZjKG5ldyBibihudWxsLG5ldyBrbihlLmYsMTYpKSxuKSxTeShuZXcgeXQsbmV3IGppLG5ldyBxbixuZXcgVW4saGUobGUob2MsMSksaXQsMTA4LDAsWyhGbCgpLGk0KSxFY10pKSksMjEpLGE9ci5nYygpLGE9YT09Mj8xOjAsYT09MSYmY3coUk4obCh5YyhGaShyLkxjKCksbmV3IGNkKSxJZnQoYXAoMCksbmV3IFRyKSksMTY4KS5hLDIpLDApJiYoYT0wKSxyPWwoeWMoZmMobmV3IGJuKG51bGwsbmV3IGtuKHQuZiwxNikpLG4pLFN5KG5ldyB5dCxuZXcgamksbmV3IHFuLG5ldyBVbixoZShsZShvYywxKSxpdCwxMDgsMCxbaTQsRWNdKSkpLDIxKSxvPXIuZ2MoKSxvPW89PTI/MTowLG89PTEmJmN3KFJOKGwoeWMoRmkoci5MYygpLG5ldyBLZCksSWZ0KGFwKDApLG5ldyBUcikpLDE2OCkuYSwyKSwwKSYmKG89MCksYTxvPy0xOmE9PW8/MDoxfWZ1bmN0aW9uIGx2dChlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKHQ9TTEoZSksbz1SdChCdChhdCh0LChOdCgpLGI0KSkpKSxDPTAsYT0wLEU9bmV3IG9yKCghZS5lJiYoZS5lPW5ldyBMbihqcyxlLDcsNCkpLGUuZSkpO0UuZSE9RS5pLmdjKCk7KXc9bChncihFKSw3NCksZz1xdyh3KSxmPWcmJm8mJlJ0KEJ0KGF0KHcsZ3YpKSksQj1iYyhsKE9lKCghdy5jJiYody5jPW5ldyBMbihfcix3LDUsOCkpLHcuYyksMCksODQpKSxnJiZmPysrYTpnJiYhZj8rK0M6ZHMoQik9PXR8fEI9PXQ/KythOisrQztmb3Iocj1uZXcgb3IoKCFlLmQmJihlLmQ9bmV3IExuKGpzLGUsOCw1KSksZS5kKSk7ci5lIT1yLmkuZ2MoKTspbj1sKGdyKHIpLDc0KSxnPXF3KG4pLGY9ZyYmbyYmUnQoQnQoYXQobixndikpKSxMPWJjKGwoT2UoKCFuLmImJihuLmI9bmV3IExuKF9yLG4sNCw3KSksbi5iKSwwKSw4NCkpLGcmJmY/KytDOmcmJiFmPysrYTpkcyhMKT09dHx8TD09dD8rK0M6KythO3JldHVybiBDLWF9ZnVuY3Rpb24gRExuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6O2lmKHQuVWcoIkVkZ2Ugc3BsaXR0aW5nIiwxKSxlLmIuYy5sZW5ndGg8PTIpe3QuVmcoKTtyZXR1cm59Zm9yKG89bmV3IFVhKGUuYiwwKSxmPShtcihvLmI8by5kLmdjKCkpLGwoby5kLlhiKG8uYz1vLmIrKyksMzApKTtvLmI8by5kLmdjKCk7KWZvcihhPWYsZj0obXIoby5iPG8uZC5nYygpKSxsKG8uZC5YYihvLmM9by5iKyspLDMwKSksdz1uZXcgRyhhLmEpO3cuYTx3LmMuYy5sZW5ndGg7KWZvcihnPWwocmUodyksMTApLEM9bmV3IEcoZy5qKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3IoRT1sKHJlKEMpLDEyKSxyPW5ldyBHKEUuZyk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDE4KSxCPW4uZCxMPUIuaS5jLEwhPWEmJkwhPWYmJnlidChuLCh6PW5ldyBvcChlKSx4KHosKFpuKCksQWEpKSxydCh6LChmdCgpLHppKSxuKSxydCh6LChOdCgpLE1zKSwoUmEoKSxNdSkpLFZhKHosZikseikpO3QuVmcoKX1mdW5jdGlvbiBJTG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCO2ZvcihDPW5ldyBidCxCPW5ldyBLcyxmPXQuYixhPTA7YTxmLmMubGVuZ3RoO2ErKyl7Zm9yKEU9KFNuKGEsZi5jLmxlbmd0aCksbChmLmNbYV0sMzApKS5hLEMuYy5sZW5ndGg9MCxvPTA7bzxFLmMubGVuZ3RoO28rKylnPWUuYVthXVtvXSxnLnA9byxnLms9PShabigpLEF1KSYmJG4oQy5jLGcpLHJmKGwoanQodC5iLGEpLDMwKS5hLG8sZyksZy5qLmMubGVuZ3RoPTAscmEoZy5qLGwobChqdChlLmIsYSksMTUpLlhiKG8pLDE2KSksVTgobChRKGcsKE50KCksTXMpKSwxMDEpKXx8cnQoZyxNcywoUmEoKSxUdikpO2ZvcihyPW5ldyBHKEMpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwxMCksTD1vX24obiksQi5hLnpjKEwsQiksQi5hLnpjKG4sQil9Zm9yKHc9Qi5hLmVjKCkuS2MoKTt3Lk9iKCk7KWc9bCh3LlBiKCksMTApLENuKCksVnMoZy5qLChURSgpLGFMZSkpLGcuaT0hMCxmOWUoZyl9ZnVuY3Rpb24gaHZ0KGUpe3ZhciB0LG4scixhLG87cmV0dXJuIGUuZyE9bnVsbD9lLmc6ZS5hPDMyPyhlLmc9UURuKFpjKGUuZiksdWEoZS5lKSksZS5nKTooYT1EbGUoKCFlLmMmJihlLmM9WE8oWmMoZS5mKSkpLGUuYyksMCksZS5lPT0wP2E6KHQ9KCFlLmMmJihlLmM9WE8oWmMoZS5mKSkpLGUuYykuZTwwPzI6MSxuPWEubGVuZ3RoLHI9LWUuZStuLXQsbz1uZXcgdGIsby5hKz0iIithLGUuZT4wJiZyPj0tNj9yPj0wP0VPKG8sbi11YShlLmUpLFN0cmluZy5mcm9tQ2hhckNvZGUoNDYpKTooaGNlKG8sdC0xLHQtMSwiMC4iKSxFTyhvLHQrMSxJZihsdiwwLC11YShyKS0xKSkpOihuLXQ+PTEmJihFTyhvLHQsU3RyaW5nLmZyb21DaGFyQ29kZSg0NikpLCsrbiksRU8obyxuLFN0cmluZy5mcm9tQ2hhckNvZGUoNjkpKSxyPjAmJkVPKG8sKytuLFN0cmluZy5mcm9tQ2hhckNvZGUoNDMpKSxFTyhvLCsrbiwiIitZXyhaYyhyKSkpKSxlLmc9by5hLGUuZykpfWZ1bmN0aW9uIE9MbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3Q7cj16ZShHZShRKHQsKE50KCksS01lKSkpKSxaZT1sKFEodCxuTSksMTcpLmEsQj00LGE9MyxvdD0yMC9aZSx6PSExLHc9MCxmPUlpO2Rve2ZvcihvPXchPTEsTD13IT0wLFN0PTAsdGU9ZS5hLFRlPTAsJGU9dGUubGVuZ3RoO1RlPCRlOysrVGUpVj10ZVtUZV0sVi5mPW51bGwseURuKGUsVixvLEwsciksU3QrPWIuTWF0aC5hYnMoVi5hKTtkbyBnPW9BbihlLHQpO3doaWxlKGcpO2ZvcihKPWUuYSxmZT0wLE1lPUoubGVuZ3RoO2ZlPE1lOysrZmUpaWYoVj1KW2ZlXSxuPXM1ZShWKS5hLG4hPTApZm9yKEM9bmV3IEcoVi5lKTtDLmE8Qy5jLmMubGVuZ3RoOylFPWwocmUoQyksMTApLEUubi5iKz1uO3c9PTB8fHc9PTE/KC0tQixCPD0wJiYoU3Q8Znx8LUI+WmUpPyh3PTIsZj1JaSk6dz09MD8odz0xLGY9U3QpOih3PTAsZj1TdCkpOih6PVN0Pj1mfHxmLVN0PG90LGY9U3QseiYmLS1hKX13aGlsZSghKHomJmE8PTApKX1mdW5jdGlvbiBFbGUoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVjtmb3IoVj1uZXcgUHIsbz1lLmEuZWMoKS5LYygpO28uT2IoKTspcj1sKG8uUGIoKSwxNzcpLGtpKFYscixuLmFmKHIpKTtmb3IoZj0oWHIoZSksZT9uZXcgT2woZSk6JGsoZS5hLmVjKCkuS2MoKSkpLFZzKGYsbmV3IEx6KFYpKSxnPUhIKGYpLHc9bmV3IE5xKHQpLHo9bmV3IFByLGp1KHouZix0LHcpO2cuYS5nYygpIT0wOyl7Zm9yKEU9bnVsbCxDPW51bGwsTD1udWxsLGE9Zy5hLmVjKCkuS2MoKTthLk9iKCk7KWlmKHI9bChhLlBiKCksMTc3KSx6ZShHZShoYyh6byhWLmYscikpKSk8PWdzKXtpZihIdSh6LHIuYSkmJiFIdSh6LHIuYikpe0M9ci5iLEw9ci5hLEU9cjticmVha31pZihIdSh6LHIuYikmJiFIdSh6LHIuYSkpe0M9ci5hLEw9ci5iLEU9cjticmVha319aWYoIUUpYnJlYWs7Qj1uZXcgTnEoQyksdnQobChoYyh6byh6LmYsTCkpLDIyNSkuYSxCKSxqdSh6LmYsQyxCKSxnLmEuQmMoRSkhPW51bGx9cmV0dXJuIHd9ZnVuY3Rpb24gTkxuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQix6O2ZvcihuLlVnKCJEZXB0aC1maXJzdCBjeWNsZSByZW1vdmFsIiwxKSxMPXQuYSxDPUwuYy5sZW5ndGgsZS5jPW5ldyBidCxlLmQ9V2UoaWgscGcsMjgsQywxNiwxKSxlLmE9V2UoaWgscGcsMjgsQywxNiwxKSxlLmI9bmV3IGJ0LGY9MCxFPW5ldyBHKEwpO0UuYTxFLmMuYy5sZW5ndGg7KXc9bChyZShFKSwxMCksdy5wPWYsWmsoa2EodykpJiZ2dChlLmMsdyksKytmO2Zvcih6PW5ldyBHKGUuYyk7ei5hPHouYy5jLmxlbmd0aDspQj1sKHJlKHopLDEwKSxzOWUoZSxCKTtmb3Iobz0wO288QztvKyspZS5kW29dfHwoZz0oU24obyxMLmMubGVuZ3RoKSxsKEwuY1tvXSwxMCkpLHM5ZShlLGcpKTtmb3IoYT1uZXcgRyhlLmIpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwxOCksVXcociwhMCkscnQodCwoZnQoKSx5QiksKEhuKCksITApKTtlLmM9bnVsbCxlLmQ9bnVsbCxlLmE9bnVsbCxlLmI9bnVsbCxuLlZnKCl9ZnVuY3Rpb24gUExuKGUsdCl7aDYoKTt2YXIgbixyLGEsbyxmLGc7cmV0dXJuIG89dC5jLShlLmMrZS5iKSxhPWUuYy0odC5jK3QuYiksZj1lLmQtKHQuZCt0LmEpLG49dC5kLShlLmQrZS5hKSxyPWIuTWF0aC5tYXgoYSxvKSxnPWIuTWF0aC5tYXgoZixuKSxBMSgpLGYwKE5kKSwoYi5NYXRoLmFicyhyKTw9TmR8fHI9PTB8fGlzTmFOKHIpJiZpc05hTigwKT8wOnI8MD8tMTpyPjA/MTp1dyhpc05hTihyKSxpc05hTigwKSkpPj0wXihmMChOZCksKGIuTWF0aC5hYnMoZyk8PU5kfHxnPT0wfHxpc05hTihnKSYmaXNOYU4oMCk/MDpnPDA/LTE6Zz4wPzE6dXcoaXNOYU4oZyksaXNOYU4oMCkpKT49MCk/Yi5NYXRoLm1heChnLHIpOihmMChOZCksKGIuTWF0aC5hYnMocik8PU5kfHxyPT0wfHxpc05hTihyKSYmaXNOYU4oMCk/MDpyPDA/LTE6cj4wPzE6dXcoaXNOYU4ociksaXNOYU4oMCkpKT4wP2IuTWF0aC5zcXJ0KGcqZytyKnIpOi1iLk1hdGguc3FydChnKmcrcipyKSl9ZnVuY3Rpb24gUW0oZSx0KXt2YXIgbixyLGEsbyxmLGc7aWYodCl7aWYoIWUuYSYmKGUuYT1uZXcganopLGUuZT09Mil7UnooZS5hLHQpO3JldHVybn1pZih0LmU9PTEpe2ZvcihhPTA7YTx0LlBtKCk7YSsrKVFtKGUsdC5MbShhKSk7cmV0dXJufWlmKGc9ZS5hLmEuYy5sZW5ndGgsZz09MCl7UnooZS5hLHQpO3JldHVybn1pZihmPWwoeHcoZS5hLGctMSksMTIyKSwhKChmLmU9PTB8fGYuZT09MTApJiYodC5lPT0wfHx0LmU9PTEwKSkpe1J6KGUuYSx0KTtyZXR1cm59bz10LmU9PTA/Mjp0Lk1tKCkubGVuZ3RoLGYuZT09MD8obj1uZXcgaF8scj1mLkttKCkscj49SW8/WG8obix3OGUocikpOlVrKG4sciZacyksZj1uZXcgY29lKDEwLG51bGwsMCksbWduKGUuYSxmLGctMSkpOihuPShmLk1tKCkubGVuZ3RoK28sbmV3IGhfKSxYbyhuLGYuTW0oKSkpLHQuZT09MD8ocj10LkttKCkscj49SW8/WG8obix3OGUocikpOlVrKG4sciZacykpOlhvKG4sdC5NbSgpKSxsKGYsNTMwKS5iPW4uYX19ZnVuY3Rpb24gQkxuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZTtpZighbi5kYygpKXtmb3IoZz0wLEI9MCxyPW4uS2MoKSxWPWwoci5QYigpLDE3KS5hO2c8dC5mOyl7aWYoZz09ViYmKEI9MCxyLk9iKCk/Vj1sKHIuUGIoKSwxNykuYTpWPXQuZisxKSxnIT1CKXtmb3IodGU9bChqdChlLmIsZyksMzApLHo9bChqdChlLmIsQiksMzApLEo9X3codGUuYSksTD1uZXcgRyhKKTtMLmE8TC5jLmMubGVuZ3RoOylpZihDPWwocmUoTCksMTApLEZ5KEMsei5hLmMubGVuZ3RoLHopLEI9PTApZm9yKGY9X3coa2EoQykpLG89bmV3IEcoZik7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDE4KSxVdyhhLCEwKSxydChlLChmdCgpLHlCKSwoSG4oKSwhMCkpLGJ2dChlLGEsMSl9KytCLCsrZ31mb3Iodz1uZXcgVWEoZS5iLDApO3cuYjx3LmQuZ2MoKTspRT0obXIody5iPHcuZC5nYygpKSxsKHcuZC5YYih3LmM9dy5iKyspLDMwKSksRS5hLmMubGVuZ3RoPT0wJiZwaCh3KX19ZnVuY3Rpb24gRkxuKGUsdCxuKXt2YXIgcixhLG87aWYoYT1sKFEodCwoTnQoKSxsVykpLDI4MiksYSE9KHpFKCksVkwpKXtzd2l0Y2gobi5VZygiSG9yaXpvbnRhbCBDb21wYWN0aW9uIiwxKSxlLmE9dCxvPW5ldyBHbHQscj1uZXcgYTJ0KChvLmQ9dCxvLmM9bChRKG8uZCxicCksMjIzKSxBU24obyksUE1uKG8pLEJTbihvKSxvLmEpKSxFdW4ocixlLmIpLGwoUSh0LEVNZSksNDMxKS5nKXtjYXNlIDE6SEplKHIsbmV3IG1mdChlLmEpKTticmVhaztkZWZhdWx0OkhKZShyLChQNWUoKSwkNnQpKX1zd2l0Y2goYS5nKXtjYXNlIDE6SEEocik7YnJlYWs7Y2FzZSAyOkhBKFVVKHIsKEpzKCksdmMpKSk7YnJlYWs7Y2FzZSAzOkhBKFZKZShVVShIQShyKSwoSnMoKSx2YykpLG5ldyBJaikpO2JyZWFrO2Nhc2UgNDpIQShWSmUoVVUoSEEociksKEpzKCksdmMpKSxuZXcgZ1llKG8pKSk7YnJlYWs7Y2FzZSA1OkhBKGt1bihyLFE4dCkpfVVVKHIsKEpzKCksdWMpKSxyLmU9ITAsbERuKG8pLG4uVmcoKX19ZnVuY3Rpb24gUkxuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZTtmb3IoZj10LmIsQz1mLm8sdz1mLmQscj16ZShHZSh0VShmLChOdCgpLHgwKSkpKSxhPXplKEdlKHRVKGYsSDYpKSksRT16ZShHZSh0VShmLHVkZSkpKSxnPW5ldyAkaWUsRDRlKGcsdy5kLHcuYyx3LmEsdy5iKSxCPVdTbih0LHIsYSxFKSxmZT1uZXcgRyh0LmQpO2ZlLmE8ZmUuYy5jLmxlbmd0aDspe2Zvcih0ZT1sKHJlKGZlKSwxMDUpLFY9dGUuZi5hLmVjKCkuS2MoKTtWLk9iKCk7KXo9bChWLlBiKCksMzQwKSxvPXouYSxMPUF4bih6KSxuPShUZT1uZXcgYmwsUGd0KHosei5jLEIsVGUpLHQ5bih6LEwsQixUZSksUGd0KHosei5kLEIsVGUpLFRlKSxuPWUubmcoeixMLG4pLENoKG8uYSksS2Eoby5hLG4pLElzKG5ldyBibihudWxsLG5ldyBrbihuLDE2KSksbmV3ICRldChDLGcpKTtKPXRlLmksSiYmKGJ4bih0ZSxKLEIsYSksTWU9bmV3IEVvKEouZyksVjhlKEMsZyxNZSksT2koTWUsSi5qKSxWOGUoQyxnLE1lKSl9RDRlKHcsZy5kLGcuYyxnLmEsZy5iKX1mdW5jdGlvbiBqTG4oZSx0LG4scixhLG8sZixnKXt2YXIgdyxFLEMsTDtzd2l0Y2godz1PMShoZShsZShNT24sMSksUm4sMjM4LDAsW3QsbixyLGFdKSksTD1udWxsLGUuYi5nKXtjYXNlIDE6TD1PMShoZShsZShsT2UsMSksUm4sNTM1LDAsW25ldyB2SSxuZXcgeW0sbmV3IFE5XSkpO2JyZWFrO2Nhc2UgMDpMPU8xKGhlKGxlKGxPZSwxKSxSbiw1MzUsMCxbbmV3IFE5LG5ldyB5bSxuZXcgdkldKSk7YnJlYWs7Y2FzZSAyOkw9TzEoaGUobGUobE9lLDEpLFJuLDUzNSwwLFtuZXcgeW0sbmV3IHZJLG5ldyBROV0pKX1mb3IoQz1uZXcgRyhMKTtDLmE8Qy5jLmMubGVuZ3RoOylFPWwocmUoQyksNTM1KSx3LmMubGVuZ3RoPjEmJih3PUUuSGcodyxlLmEsZykpO3JldHVybiB3LmMubGVuZ3RoPT0xP2woanQodyx3LmMubGVuZ3RoLTEpLDIzOCk6dy5jLmxlbmd0aD09Mj9DTG4oKFNuKDAsdy5jLmxlbmd0aCksbCh3LmNbMF0sMjM4KSksKFNuKDEsdy5jLmxlbmd0aCksbCh3LmNbMV0sMjM4KSksZixvKTpudWxsfWZ1bmN0aW9uICRMbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEU7Zm9yKG4uVWcoIkZpbmQgcm9vdHMiLDEpLGUuYS5jLmxlbmd0aD0wLGE9UnIodC5iLDApO2EuYiE9YS5kLmM7KXI9bChCcihhKSw0MCksci5iLmI9PTAmJihydChyLChRaSgpLFZiKSwoSG4oKSwhMCkpLHZ0KGUuYSxyKSk7c3dpdGNoKGUuYS5jLmxlbmd0aCl7Y2FzZSAwOm89bmV3IHhjZSgwLHQsIkRVTU1ZX1JPT1QiKSxydChvLChRaSgpLFZiKSwoSG4oKSwhMCkpLHJ0KG8sTmRlLCEwKSx1aSh0LmIsbyk7YnJlYWs7Y2FzZSAxOmJyZWFrO2RlZmF1bHQ6Zm9yKGY9bmV3IHhjZSgwLHQsREcpLHc9bmV3IEcoZS5hKTt3LmE8dy5jLmMubGVuZ3RoOylnPWwocmUodyksNDApLEU9bmV3IE41ZShmLGcpLHJ0KEUsKFFpKCksTmRlKSwoSG4oKSwhMCkpLHVpKGYuYS5hLEUpLHVpKGYuZCxFKSx1aShnLmIsRSkscnQoZyxWYiwhMSk7cnQoZiwoUWkoKSxWYiksKEhuKCksITApKSxydChmLE5kZSwhMCksdWkodC5iLGYpfW4uVmcoKX1mdW5jdGlvbiBmdnQoZSl7dmFyIHQsbixyLGEsbyxmO2ZvcihWdShlLmEsbmV3IFFhKSxuPW5ldyBHKGUuYSk7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDIyNSkscj1tYShKYShsKGUuYiw2OCkuYyksbCh0LmIsNjgpLmMpLEM3dD8oZj1sKGUuYiw2OCkuYixvPWwodC5iLDY4KS5iLGIuTWF0aC5hYnMoci5hKT49Yi5NYXRoLmFicyhyLmIpPyhyLmI9MCxvLmQrby5hPmYuZCYmby5kPGYuZCtmLmEmJlFxKHIsYi5NYXRoLm1heChmLmMtKG8uYytvLmIpLG8uYy0oZi5jK2YuYikpKSk6KHIuYT0wLG8uYytvLmI+Zi5jJiZvLmM8Zi5jK2YuYiYmUXEocixiLk1hdGgubWF4KGYuZC0oby5kK28uYSksby5kLShmLmQrZi5hKSkpKSk6UXEocixCbXQobChlLmIsNjgpLGwodC5iLDY4KSkpLGE9Yi5NYXRoLnNxcnQoci5hKnIuYStyLmIqci5iKSxhPU1ndChSTCx0LGEsciksUXEocixhKSxNYWUobCh0LmIsNjgpLHIpLFZ1KHQuYSxuZXcgTXoocikpLGwoUkwuYiw2OCksRDZlKFJMLEhfZSx0KX1mdW5jdGlvbiB6TG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVjtmb3IoZS5mPW5ldyBqaWUsRT0wLGE9MCxmPW5ldyBHKGUuZS5iKTtmLmE8Zi5jLmMubGVuZ3RoOylmb3Iobz1sKHJlKGYpLDMwKSx3PW5ldyBHKG8uYSk7dy5hPHcuYy5jLmxlbmd0aDspe2ZvcihnPWwocmUodyksMTApLGcucD1FKysscj1uZXcgaHIoZHIocXMoZykuYS5LYygpLG5ldyBqKSk7anIocik7KW49bCh4cihyKSwxOCksbi5wPWErKztmb3IodD15bGUoZyksQj1uZXcgRyhnLmopO0IuYTxCLmMuYy5sZW5ndGg7KUw9bChyZShCKSwxMiksdCYmKFY9TC5hLmIsViE9Yi5NYXRoLmZsb29yKFYpJiYoQz1WLUZtKFpjKGIuTWF0aC5yb3VuZChWKSkpLEwuYS5iLT1DKSksej1MLm4uYitMLmEuYix6IT1iLk1hdGguZmxvb3IoeikmJihDPXotRm0oWmMoYi5NYXRoLnJvdW5kKHopKSksTC5uLmItPUMpfWUuZz1FLGUuYj1hLGUuaT1XZShTT24sUm4sNDEyLEUsMCwxKSxlLmM9V2UoQ09uLFJuLDY1NSxhLDAsMSksZS5kLmEuJGIoKX1mdW5jdGlvbiAkcihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEU7aWYoZS5QaigpKWlmKHc9ZS5RaigpLGUuaT4wKXtpZih0PW5ldyBleWUoZS5pLGUuZyksbj1lLmksbz1uPDEwMD9udWxsOm5ldyBuYihuKSxlLlRqKCkpZm9yKHI9MDtyPGUuaTsrK3IpZj1lLmdbcl0sbz1lLlZqKGYsbyk7aWYodUEoZSksYT1uPT0xP2UuSWooNCxPZSh0LDApLG51bGwsMCx3KTplLklqKDYsdCxudWxsLC0xLHcpLGUuTWooKSl7Zm9yKHI9bmV3IEg4KHQpO3IuZSE9ci5pLmdjKCk7KW89ZS5PaihydWUociksbyk7bz8oby5uaihhKSxvLm9qKCkpOmUuSmooYSl9ZWxzZSBvPyhvLm5qKGEpLG8ub2ooKSk6ZS5KaihhKX1lbHNlIHVBKGUpLGUuSmooZS5Jaig2LChDbigpLF9vKSxudWxsLC0xLHcpKTtlbHNlIGlmKGUuTWooKSlpZihlLmk+MCl7Zm9yKGc9ZS5nLEU9ZS5pLHVBKGUpLG89RTwxMDA/bnVsbDpuZXcgbmIoRSkscj0wO3I8RTsrK3IpZj1nW3JdLG89ZS5PaihmLG8pO28mJm8ub2ooKX1lbHNlIHVBKGUpO2Vsc2UgdUEoZSl9ZnVuY3Rpb24gSWtlKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQjtmb3IoR2Z0KHRoaXMpLG49PShTdygpLEhiKT9uYSh0aGlzLnIsZSk6bmEodGhpcy53LGUpLEM9Z3MsRT1pYSxmPXQuYS5lYygpLktjKCk7Zi5PYigpOylhPWwoZi5QYigpLDQyKSxnPWwoYS5hLDQ2NSkscj1sKGEuYiwxOCksdz1yLmMsdz09ZSYmKHc9ci5kKSxnPT1IYj9uYSh0aGlzLnIsdyk6bmEodGhpcy53LHcpLEI9KEN0KCksaGwpLkhjKHcuaik/emUoR2UoUSh3LChmdCgpLHpUKSkpKTpJYyhoZShsZShFYSwxKSxkdCw4LDAsW3cuaS5uLHcubix3LmFdKSkuYixDPWIuTWF0aC5taW4oQyxCKSxFPWIuTWF0aC5tYXgoRSxCKTtmb3IoTD0oQ3QoKSxobCkuSGMoZS5qKT96ZShHZShRKGUsKGZ0KCkselQpKSkpOkljKGhlKGxlKEVhLDEpLGR0LDgsMCxbZS5pLm4sZS5uLGUuYV0pKS5iLFpndCh0aGlzLEwsQyxFKSxvPXQuYS5lYygpLktjKCk7by5PYigpOylhPWwoby5QYigpLDQyKSx1cHQodGhpcyxsKGEuYiwxOCkpO3RoaXMubz0hMX1mdW5jdGlvbiBxTG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuLGpuLHVyO3JldHVybiBuPWUubCY4MTkxLHI9ZS5sPj4xM3woZS5tJjE1KTw8OSxhPWUubT4+NCY4MTkxLG89ZS5tPj4xN3woZS5oJjI1NSk8PDUsZj0oZS5oJjEwNDgzMjApPj44LGc9dC5sJjgxOTEsdz10Lmw+PjEzfCh0Lm0mMTUpPDw5LEU9dC5tPj40JjgxOTEsQz10Lm0+PjE3fCh0LmgmMjU1KTw8NSxMPSh0LmgmMTA0ODMyMCk+PjgsY249bipnLGFuPXIqZyxCbj1hKmcsam49bypnLHVyPWYqZyx3IT0wJiYoYW4rPW4qdyxCbis9cip3LGpuKz1hKncsdXIrPW8qdyksRSE9MCYmKEJuKz1uKkUsam4rPXIqRSx1cis9YSpFKSxDIT0wJiYoam4rPW4qQyx1cis9cipDKSxMIT0wJiYodXIrPW4qTCksej1jbiZlaCxWPShhbiY1MTEpPDwxMyxCPXorVix0ZT1jbj4+MjIsZmU9YW4+PjksVGU9KEJuJjI2MjE0Myk8PDQsTWU9KGpuJjMxKTw8MTcsSj10ZStmZStUZStNZSxaZT1Cbj4+MTgsb3Q9am4+PjUsU3Q9KHVyJjQwOTUpPDw4LCRlPVplK290K1N0LEorPUI+PjIyLEImPWVoLCRlKz1KPj4yMixKJj1laCwkZSY9aHAscXUoQixKLCRlKX1mdW5jdGlvbiBkdnQoZSl7dmFyIHQsbixyLGEsbyxmLGc7aWYoZz1sKGp0KGUuaiwwKSwxMiksZy5nLmMubGVuZ3RoIT0wJiZnLmUuYy5sZW5ndGghPTApdGhyb3cgdWUobmV3IG5jKCJJbnRlcmFjdGl2ZSBsYXlvdXQgZG9lcyBub3Qgc3VwcG9ydCBOT1JUSC9TT1VUSCBwb3J0cyB3aXRoIGluY29taW5nIF9hbmRfIG91dGdvaW5nIGVkZ2VzLiIpKTtpZihnLmcuYy5sZW5ndGghPTApe2ZvcihvPWdzLG49bmV3IEcoZy5nKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMTgpLGY9dC5kLmkscj1sKFEoZiwoTnQoKSx2VykpLDE0MCksbz1iLk1hdGgubWluKG8sZi5uLmEtci5iKTtyZXR1cm4gbmV3IEpTKFhyKG8pKX1pZihnLmUuYy5sZW5ndGghPTApe2ZvcihhPWlhLG49bmV3IEcoZy5lKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMTgpLGY9dC5jLmkscj1sKFEoZiwoTnQoKSx2VykpLDE0MCksYT1iLk1hdGgubWF4KGEsZi5uLmErZi5vLmErci5jKTtyZXR1cm4gbmV3IEpTKFhyKGEpKX1yZXR1cm4gb18oKSxvXygpLHYwZX1mdW5jdGlvbiBndnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdztpZihlLm9sKCkpe2lmKGUuaT40KWlmKGUuZmsodCkpe2lmKGUuYWwoKSl7aWYoYT1sKHQsNTQpLHI9YS5FaCgpLHc9cj09ZS5lJiYoZS5tbCgpP2EueWgoYS5GaCgpLGUuaWwoKSk9PWUuamwoKTotMS1hLkZoKCk9PWUuTGooKSksZS5ubCgpJiYhdyYmIXImJmEuSmgoKSl7Zm9yKG89MDtvPGUuaTsrK28paWYobj1lLnBsKGwoZS5nW29dLDU4KSkscWUobik9PT1xZSh0KSlyZXR1cm4hMH1yZXR1cm4gd31lbHNlIGlmKGUubWwoKSYmIWUubGwoKSl7aWYoZj1sKHQsNTgpLk1oKFJvKGwoZS5MaygpLDE5KSkpLHFlKGYpPT09cWUoZS5lKSlyZXR1cm4hMDtpZihmPT1udWxsfHwhbChmLDU4KS5WaCgpKXJldHVybiExfX1lbHNlIHJldHVybiExO2lmKGc9akUoZSx0KSxlLm5sKCkmJiFnKXtmb3Iobz0wO288ZS5pOysrbylpZihhPWUucGwobChlLmdbb10sNTgpKSxxZShhKT09PXFlKHQpKXJldHVybiEwfXJldHVybiBnfWVsc2UgcmV0dXJuIGpFKGUsdCl9ZnVuY3Rpb24gSExuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZTtmb3Iobi5VZygiSW50ZXJhY3RpdmUgY3ljbGUgYnJlYWtpbmciLDEpLEw9bmV3IGJ0LHo9bmV3IEcodC5hKTt6LmE8ei5jLmMubGVuZ3RoOylmb3IoQj1sKHJlKHopLDEwKSxCLnA9MSxWPUV4ZShCKS5hLEM9UncoQiwocW8oKSx6dSkpLktjKCk7Qy5PYigpOylmb3IoRT1sKEMuUGIoKSwxMiksbz1uZXcgRyhFLmcpO28uYTxvLmMuYy5sZW5ndGg7KXI9bChyZShvKSwxOCksSj1yLmQuaSxKIT1CJiYodGU9RXhlKEopLmEsdGU8ViYmJG4oTC5jLHIpKTtmb3IoZj1uZXcgRyhMKTtmLmE8Zi5jLmMubGVuZ3RoOylyPWwocmUoZiksMTgpLFV3KHIsITApO2ZvcihMLmMubGVuZ3RoPTAsdz1uZXcgRyh0LmEpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwxMCksZy5wPjAmJmdwdChlLGcsTCk7Zm9yKGE9bmV3IEcoTCk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDE4KSxVdyhyLCEwKTtMLmMubGVuZ3RoPTAsbi5WZygpfWZ1bmN0aW9uIFZMbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQztmb3Iobj0wLEM9bmV3IGJ0LGc9bmV3IEcodCk7Zy5hPGcuYy5jLmxlbmd0aDspe3N3aXRjaChmPWwocmUoZyksMTIpLFk3ZShlLmIsZS5kW2YucF0pLEMuYy5sZW5ndGg9MCxmLmkuay5nKXtjYXNlIDA6cj1sKFEoZiwoZnQoKSxqbCkpLDEwKSxWdShyLmosbmV3IEdZZShDKSk7YnJlYWs7Y2FzZSAxOmlobihrRShGaShuZXcgYm4obnVsbCxuZXcga24oZi5pLmosMTYpKSxuZXcgS1llKGYpKSksbmV3IFdZZShDKSk7YnJlYWs7Y2FzZSAzOmE9bChRKGYsKGZ0KCksemkpKSwxMiksdnQoQyxuZXcgY2EoYSxwdChmLmUuYy5sZW5ndGgrZi5nLmMubGVuZ3RoKSkpfWZvcihFPW5ldyBHKEMpO0UuYTxFLmMuYy5sZW5ndGg7KXc9bChyZShFKSw0Miksbz1mM2UoZSxsKHcuYSwxMikpLG8+ZS5kW2YucF0mJihuKz1mNmUoZS5iLG8pKmwody5iLDE3KS5hLGdiKGUuYSxwdChvKSkpO2Zvcig7IWxfKGUuYSk7KVU2ZShlLmIsbChYOChlLmEpLDE3KS5hKX1yZXR1cm4gbn1mdW5jdGlvbiBVTG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTDtpZihDPWwoUShlLChmdCgpLFdjKSksNjQpLHI9bChqdChlLmosMCksMTIpLEM9PShDdCgpLFFuKT9sYShyLERyKTpDPT1EciYmbGEocixRbiksbChRKHQsKE50KCksYnYpKSwxODEpLkhjKChtaCgpLEN2KSkpe2lmKHc9emUoR2UoUShlLEdUKSkpLEU9emUoR2UoUShlLEtUKSkpLGY9emUoR2UoUShlLHk0KSkpLGc9bChRKHQsdjQpLDIxKSxnLkhjKChSbCgpLHZwKSkpZm9yKG49RSxMPWUuby5hLzItci5uLmEsbz1uZXcgRyhyLmYpO28uYTxvLmMuYy5sZW5ndGg7KWE9bChyZShvKSw3MiksYS5uLmI9bixhLm4uYT1MLWEuby5hLzIsbis9YS5vLmIrZjtlbHNlIGlmKGcuSGMoWWIpKWZvcihvPW5ldyBHKHIuZik7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDcyKSxhLm4uYT13K2Uuby5hLXIubi5hO21ibihuZXcgZV8oKGdfKCksbmV3IEphZSh0LCExLCExLG5ldyBjUykpKSxuZXcgV3EobnVsbCxlLCExKSl9fWZ1bmN0aW9uIEdMbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQztpZih0LmMubGVuZ3RoIT0wKXtmb3IoQ24oKSxMYWUodC5jLHQuYy5sZW5ndGgsbnVsbCksYT1uZXcgRyh0KSxyPWwocmUoYSksMTU0KTthLmE8YS5jLmMubGVuZ3RoOyluPWwocmUoYSksMTU0KSxYNmUoci5lLmMsbi5lLmMpJiYhKGo4ZShfcnQoci5lKS5iLG4uZS5kKXx8ajhlKF9ydChuLmUpLmIsci5lLmQpKT9yPShyYShyLmssbi5rKSxyYShyLmIsbi5iKSxyYShyLmMsbi5jKSxLYShyLmksbi5pKSxyYShyLmQsbi5kKSxyYShyLmosbi5qKSxvPWIuTWF0aC5taW4oci5lLmMsbi5lLmMpLGY9Yi5NYXRoLm1pbihyLmUuZCxuLmUuZCksZz1iLk1hdGgubWF4KHIuZS5jK3IuZS5iLG4uZS5jK24uZS5iKSx3PWctbyxFPWIuTWF0aC5tYXgoci5lLmQrci5lLmEsbi5lLmQrbi5lLmEpLEM9RS1mLElpdChyLmUsbyxmLHcsQyksYmJuKHIuZixuLmYpLCFyLmEmJihyLmE9bi5hKSxyYShyLmcsbi5nKSx2dChyLmcsbikscik6KF9tdChlLHIpLHI9bik7X210KGUscil9fWZ1bmN0aW9uIEtMbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmU7Zm9yKHc9bmV3IGJ0LG89bmV3IEcodC5hKTtvLmE8by5jLmMubGVuZ3RoOylmb3IoYT1sKHJlKG8pLDEwKSxnPW5ldyBHKGEuaik7Zy5hPGcuYy5jLmxlbmd0aDspe2ZvcihmPWwocmUoZyksMTIpLEM9bnVsbCxNZT1rZChmLmcpLCRlPTAsWmU9TWUubGVuZ3RoOyRlPFplOysrJGUpVGU9TWVbJGVdLGJFKFRlLmQuaSxuKXx8KGZlPXhsZShlLHQsbixUZSxUZS5jLChxbygpLHp1KSxDKSxmZSE9QyYmJG4ody5jLGZlKSxmZS5jJiYoQz1mZSkpO2ZvcihFPW51bGwsVj1rZChmLmUpLEo9MCx0ZT1WLmxlbmd0aDtKPHRlOysrSil6PVZbSl0sYkUoei5jLmksbil8fChmZT14bGUoZSx0LG4seix6LmQsKHFvKCksJGwpLEUpLGZlIT1FJiYkbih3LmMsZmUpLGZlLmMmJihFPWZlKSl9Zm9yKEI9bmV3IEcodyk7Qi5hPEIuYy5jLmxlbmd0aDspTD1sKHJlKEIpLDQ1MyksZ2ModC5hLEwuYSwwKSE9LTF8fHZ0KHQuYSxMLmEpLEwuYyYmJG4oci5jLEwpfWZ1bmN0aW9uIFdMbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGU7Zm9yKEw9bmV3IEVvKGwoYXQoZSwod1UoKSxRT2UpKSw4KSksTC5hPWIuTWF0aC5tYXgoTC5hLW4uYi1uLmMsMCksTC5iPWIuTWF0aC5tYXgoTC5iLW4uZC1uLmEsMCksYT1HZShhdChlLFdPZSkpLChhPT1udWxsfHwobnIoYSksYTw9MCkpJiYoYT0xLjMpLGc9bmV3IGJ0LFY9bmV3IG9yKCghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKSk7Vi5lIT1WLmkuZ2MoKTspej1sKGdyKFYpLDI3KSxmPW5ldyB2cnQoeiksJG4oZy5jLGYpO3N3aXRjaChCPWwoYXQoZSxfZ2UpLDMyMCksQi5nKXtjYXNlIDM6dGU9Tl9uKGcsdCxMLmEsTC5iLChFPXIsbnIoYSksRSkpO2JyZWFrO2Nhc2UgMTp0ZT1UQW4oZyx0LEwuYSxMLmIsKEM9cixucihhKSxDKSk7YnJlYWs7ZGVmYXVsdDp0ZT1YTG4oZyx0LEwuYSxMLmIsKHc9cixucihhKSx3KSl9bz1uZXcgaFYodGUpLEo9TGxlKG8sdCxuLEwuYSxMLmIsciwobnIoYSksYSkpLEd3KGUsSi5hLEouYiwhMSwhMCl9ZnVuY3Rpb24gWUxuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRTtpZihnPWUuaixnPT0oQ3QoKSxQYykmJnQhPShSYSgpLFoxKSYmdCE9KFJhKCksV2IpJiYoZz1rbXQoZSxuKSxsYShlLGcpLCEoZS5xP2UucTooQ24oKSxDbigpLG1nKSkuX2IoKE50KCksbTQpKSYmZyE9UGMmJihlLm4uYSE9MHx8ZS5uLmIhPTApJiZydChlLG00LFk3bihlLGcpKSksdD09KFJhKCksVGcpKXtzd2l0Y2goRT0wLGcuZyl7Y2FzZSAxOmNhc2UgMzpvPWUuaS5vLmEsbz4wJiYoRT1lLm4uYS9vKTticmVhaztjYXNlIDI6Y2FzZSA0OmE9ZS5pLm8uYixhPjAmJihFPWUubi5iL2EpfXJ0KGUsKGZ0KCksbDMpLEUpfWlmKHc9ZS5vLGY9ZS5hLHIpZi5hPXIuYSxmLmI9ci5iLGUuZD0hMDtlbHNlIGlmKHQhPVoxJiZ0IT1XYiYmZyE9UGMpc3dpdGNoKGcuZyl7Y2FzZSAxOmYuYT13LmEvMjticmVhaztjYXNlIDI6Zi5hPXcuYSxmLmI9dy5iLzI7YnJlYWs7Y2FzZSAzOmYuYT13LmEvMixmLmI9dy5iO2JyZWFrO2Nhc2UgNDpmLmI9dy5iLzJ9ZWxzZSBmLmE9dy5hLzIsZi5iPXcuYi8yfWZ1bmN0aW9uIHRMKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDO2lmKGUuUGooKSlpZihDPWUuRWooKSx3PWUuUWooKSxDPjApaWYodD1uZXcgVDdlKGUucGooKSksbj1DLG89bjwxMDA/bnVsbDpuZXcgbmIobiksQU8oZSxuLHQuZyksYT1uPT0xP2UuSWooNCxPZSh0LDApLG51bGwsMCx3KTplLklqKDYsdCxudWxsLC0xLHcpLGUuTWooKSl7Zm9yKHI9bmV3IG9yKHQpO3IuZSE9ci5pLmdjKCk7KW89ZS5PaihncihyKSxvKTtvPyhvLm5qKGEpLG8ub2ooKSk6ZS5KaihhKX1lbHNlIG8/KG8ubmooYSksby5vaigpKTplLkpqKGEpO2Vsc2UgQU8oZSxlLkVqKCksZS5GaigpKSxlLkpqKGUuSWooNiwoQ24oKSxfbyksbnVsbCwtMSx3KSk7ZWxzZSBpZihlLk1qKCkpaWYoQz1lLkVqKCksQz4wKXtmb3IoZz1lLkZqKCksRT1DLEFPKGUsQyxnKSxvPUU8MTAwP251bGw6bmV3IG5iKEUpLHI9MDtyPEU7KytyKWY9Z1tyXSxvPWUuT2ooZixvKTtvJiZvLm9qKCl9ZWxzZSBBTyhlLGUuRWooKSxlLkZqKCkpO2Vsc2UgQU8oZSxlLkVqKCksZS5GaigpKX1mdW5jdGlvbiBYTG4oZSx0LG4scixhKXt2YXIgbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2ZvcihnPVdlKE5hLFpvLDI4LGUuYy5sZW5ndGgsMTUsMSksQj1uZXcgZ0gobmV3IG5rKSxjeGUoQixlKSxFPTAsSj1uZXcgYnQ7Qi5iLmMubGVuZ3RoIT0wOylpZihmPWwoQi5iLmMubGVuZ3RoPT0wP251bGw6anQoQi5iLDApLDE2MyksRT4xJiZ3bChmKSpnaChmKS8yPmdbMF0pe2ZvcihvPTA7bzxKLmMubGVuZ3RoLTEmJndsKGYpKmdoKGYpLzI+Z1tvXTspKytvO1Y9bmV3IFpwKEosMCxvKzEpLEw9bmV3IGhWKFYpLEM9d2woZikvZ2goZiksdz1MbGUoTCx0LG5ldyBBOCxuLHIsYSxDKSxPaShZMChMLmUpLHcpLEs4KCRFKEIsTCksYVQpLHo9bmV3IFpwKEosbysxLEouYy5sZW5ndGgpLGN4ZShCLHopLEouYy5sZW5ndGg9MCxFPTAsZ3N0KGcsZy5sZW5ndGgsMCl9ZWxzZSB0ZT1CLmIuYy5sZW5ndGg9PTA/bnVsbDpqdChCLmIsMCksdGUhPW51bGwmJnJjZShCLDApLEU+MCYmKGdbRV09Z1tFLTFdKSxnW0VdKz13bChmKSpnaChmKSwrK0UsJG4oSi5jLGYpO3JldHVybiBKfWZ1bmN0aW9uIFFMbihlLHQpe3ZhciBuLHIsYSxvO249dC5iLG89bmV3IE9sKG4uaiksYT0wLHI9bi5qLHIuYy5sZW5ndGg9MCxtdyhsKHptKGUuYiwoQ3QoKSxRbiksKE93KCksbzMpKSwxNSksbiksYT16TihvLGEsbmV3IEd2LHIpLG13KGwoem0oZS5iLFFuLFJiKSwxNSksbiksYT16TihvLGEsbmV3IGJlZSxyKSxtdyhsKHptKGUuYixRbixhMyksMTUpLG4pLG13KGwoem0oZS5iLGFyLG8zKSwxNSksbiksbXcobCh6bShlLmIsYXIsUmIpLDE1KSxuKSxhPXpOKG8sYSxuZXcgJGosciksbXcobCh6bShlLmIsYXIsYTMpLDE1KSxuKSxtdyhsKHptKGUuYixEcixvMyksMTUpLG4pLGE9ek4obyxhLG5ldyB6aixyKSxtdyhsKHptKGUuYixEcixSYiksMTUpLG4pLGE9ek4obyxhLG5ldyBxaixyKSxtdyhsKHptKGUuYixEcixhMyksMTUpLG4pLG13KGwoem0oZS5iLGVyLG8zKSwxNSksbiksYT16TihvLGEsbmV3IEJqLHIpLG13KGwoem0oZS5iLGVyLFJiKSwxNSksbiksbXcobCh6bShlLmIsZXIsYTMpLDE1KSxuKX1mdW5jdGlvbiBKTG4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHo7Zm9yKGc9bmV3IEcodCk7Zy5hPGcuYy5jLmxlbmd0aDspbz1sKHJlKGcpLDIzOSksby5lPW51bGwsby5jPTA7Zm9yKHc9bnVsbCxmPW5ldyBHKHQpO2YuYTxmLmMuYy5sZW5ndGg7KWlmKG89bChyZShmKSwyMzkpLEw9by5kWzBdLCEobiYmTC5rIT0oWm4oKSxQcykpKXtmb3Ioej1sKFEoTCwoZnQoKSxXeCkpLDE1KS5LYygpO3ouT2IoKTspQj1sKHouUGIoKSwxMCksKCFufHxCLms9PShabigpLFBzKSkmJigoIW8uZSYmKG8uZT1uZXcgYnQpLG8uZSkuRmMoZS5iW0IuYy5wXVtCLnBdKSwrK2UuYltCLmMucF1bQi5wXS5jKTtpZighbiYmTC5rPT0oWm4oKSxQcykpe2lmKHcpZm9yKEM9bCgkaShlLmQsdyksMjEpLktjKCk7Qy5PYigpOylmb3IoRT1sKEMuUGIoKSwxMCksYT1sKCRpKGUuZCxMKSwyMSkuS2MoKTthLk9iKCk7KXI9bChhLlBiKCksMTApLHJkbihlLmJbRS5jLnBdW0UucF0pLkZjKGUuYltyLmMucF1bci5wXSksKytlLmJbci5jLnBdW3IucF0uYzt3PUx9fX1mdW5jdGlvbiBaTG4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2ZvcihuLlVnKCJNb2RlbCBvcmRlciBjeWNsZSBicmVha2luZyIsMSksZS5hPTAsZS5iPTAsej1uZXcgYnQsQz10LmEuYy5sZW5ndGgsRT1uZXcgRyh0LmEpO0UuYTxFLmMuYy5sZW5ndGg7KXc9bChyZShFKSwxMCksbnModywoZnQoKSxLaSkpJiYoQz1iLk1hdGgubWF4KEMsbChRKHcsS2kpLDE3KS5hKzEpKTtmb3IoSj1uZXcgRyh0LmEpO0ouYTxKLmMuYy5sZW5ndGg7KWZvcihWPWwocmUoSiksMTApLGY9VHB0KGUsVixDKSxCPVJ3KFYsKHFvKCksenUpKS5LYygpO0IuT2IoKTspZm9yKEw9bChCLlBiKCksMTIpLG89bmV3IEcoTC5nKTtvLmE8by5jLmMubGVuZ3RoOylyPWwocmUobyksMTgpLHRlPXIuZC5pLGc9VHB0KGUsdGUsQyksZzxmJiYkbih6LmMscik7Zm9yKGE9bmV3IEcoeik7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDE4KSxVdyhyLCEwKSxydCh0LChmdCgpLHlCKSwoSG4oKSwhMCkpO3ouYy5sZW5ndGg9MCxuLlZnKCl9ZnVuY3Rpb24gcHZ0KGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQjtmb3IoZj10LmQsZz1uLmQ7Zi5hLWcuYT09MCYmZi5iLWcuYj09MDspdz0hMSxEZSh0LDI1MCkmJkRlKG4sMjUwKSYmIXc/KEU9bCh0LDI1MCkuYSxDPW1hKG5ldyBFbyhyN2UoRSkpLG43ZShFKSkscj0yLGE9bmV3IGx0KEMuYS9iLk1hdGguc3FydChDLmEqQy5hK0MuYipDLmIpKnIsLUMuYi9iLk1hdGguc3FydChDLmEqQy5hK0MuYipDLmIpKnIpLE9pKGYsYSksTD1sKG4sMjUwKS5hLEI9bWEobmV3IEVvKHI3ZShMKSksbjdlKEwpKSxyPUM9PUI/LTI6MixvPW5ldyBsdChCLmEvYi5NYXRoLnNxcnQoQi5hKkIuYStCLmIqQi5iKSpyLC0oQi5iL2IuTWF0aC5zcXJ0KEIuYSpCLmErQi5iKkIuYikpKnIpLE9pKGYsbyksdz0hMCk6KGYuYSs9SmwoZSwyNikqaUwrSmwoZSwyNykqc0wtLjUsZi5iKz1KbChlLDI2KSppTCtKbChlLDI3KSpzTC0uNSxnLmErPUpsKGUsMjYpKmlMK0psKGUsMjcpKnNMLS41LGcuYis9SmwoZSwyNikqaUwrSmwoZSwyNykqc0wtLjUpfWZ1bmN0aW9uIGVNbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGU7Zm9yKEU9RDluKHQpLEo9bChRKHQsKE50KCksSkwpKSwzMjIpLHRvKEUsbmV3IEl6KEopKSx0ZT1sKFEodCxUQiksMjk5KSx0byhFLG5ldyBPaWUodGUpKSxWPTAsQz1uZXcgYnQsbz1uZXcgbkEoRSk7by5hIT1vLmI7KWE9bChGVihvKSwzNiksX3Z0KGUuYyxhKSxCPWwoUShhLChmdCgpLEsxZSkpLDE1KSxWKz1CLmdjKCkscj1CLktjKCksdnQoQyxuZXcgY2EoYSxyKSk7Zm9yKG4uVWcoIlJlY3Vyc2l2ZSBoaWVyYXJjaGljYWwgbGF5b3V0IixWKSx6PWwobChqdChDLEMuYy5sZW5ndGgtMSksNDIpLmIsNTEpO3ouT2IoKTspZm9yKHc9bmV3IEcoQyk7dy5hPHcuYy5jLmxlbmd0aDspZm9yKGc9bChyZSh3KSw0MiksQj1sKGcuYiw1MSksZj1sKGcuYSwzNik7Qi5PYigpOylpZihMPWwoQi5QYigpLDQ3KSxEZShMLDUxNCkpe2lmKGYuZSlicmVhaztMLktmKGYsbi5laCgxKSk7YnJlYWt9ZWxzZSBMLktmKGYsbi5laCgxKSk7bi5WZygpfWZ1bmN0aW9uIHRNbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEo7Zm9yKHQuVWcoIkxheWVyIHNpemUgY2FsY3VsYXRpb24iLDEpLEM9Z3MsRT1pYSxhPSExLGc9bmV3IEcoZS5iKTtnLmE8Zy5jLmMubGVuZ3RoOylpZihmPWwocmUoZyksMzApLHc9Zi5jLHcuYT0wLHcuYj0wLGYuYS5jLmxlbmd0aCE9MCl7Zm9yKGE9ITAsQj1uZXcgRyhmLmEpO0IuYTxCLmMuYy5sZW5ndGg7KUw9bChyZShCKSwxMCksVj1MLm8sej1MLmQsdy5hPWIuTWF0aC5tYXgody5hLFYuYSt6LmIrei5jKTtyPWwoanQoZi5hLDApLDEwKSxKPXIubi5iLXIuZC5kLHIuaz09KFpuKCksVXMpJiYoSi09bChRKGUsKE50KCksX0IpKSwxNDApLmQpLG89bChqdChmLmEsZi5hLmMubGVuZ3RoLTEpLDEwKSxuPW8ubi5iK28uby5iK28uZC5hLG8uaz09VXMmJihuKz1sKFEoZSwoTnQoKSxfQikpLDE0MCkuYSksdy5iPW4tSixDPWIuTWF0aC5taW4oQyxKKSxFPWIuTWF0aC5tYXgoRSxuKX1hfHwoQz0wLEU9MCksZS5mLmI9RS1DLGUuYy5iLT1DLHQuVmcoKX1mdW5jdGlvbiBPa2UoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlO2ZvcihvPTAsZj0wLEU9bmV3IEcoZS5hKTtFLmE8RS5jLmMubGVuZ3RoOylnPWwocmUoRSksMTApLG89Yi5NYXRoLm1heChvLGcuZC5iKSxmPWIuTWF0aC5tYXgoZixnLmQuYyk7Zm9yKHc9bmV3IEcoZS5hKTt3LmE8dy5jLmMubGVuZ3RoOyl7c3dpdGNoKGc9bChyZSh3KSwxMCksbj1sKFEoZywoTnQoKSxSZCkpLDI1NSksbi5nKXtjYXNlIDE6Vj0wO2JyZWFrO2Nhc2UgMjpWPTE7YnJlYWs7Y2FzZSA1OlY9LjU7YnJlYWs7ZGVmYXVsdDpmb3Iocj0wLEw9MCx6PW5ldyBHKGcuaik7ei5hPHouYy5jLmxlbmd0aDspQj1sKHJlKHopLDEyKSxCLmUuYy5sZW5ndGg9PTB8fCsrcixCLmcuYy5sZW5ndGg9PTB8fCsrTDtyK0w9PTA/Vj0uNTpWPUwvKHIrTCl9dGU9ZS5jLEM9Zy5vLmEsZmU9KHRlLmEtQykqVixWPi41P2ZlLT1mKjIqKFYtLjUpOlY8LjUmJihmZSs9byoyKiguNS1WKSksYT1nLmQuYixmZTxhJiYoZmU9YSksSj1nLmQuYyxmZT50ZS5hLUotQyYmKGZlPXRlLmEtSi1DKSxnLm4uYT10K2ZlfX1mdW5jdGlvbiBuTW4oZSl7dmFyIHQsbixyLGEsbztpZihyPWwoUShlLChOdCgpLFF1KSksMTcxKSxyPT0oaGYoKSwkYikpe2ZvcihuPW5ldyBocihkcihrYShlKS5hLktjKCksbmV3IGopKTtqcihuKTspaWYodD1sKHhyKG4pLDE4KSwhQXV0KHQpKXRocm93IHVlKG5ldyBWcChqaGUrSE4oZSkrIicgaGFzIGl0cyBsYXllciBjb25zdHJhaW50IHNldCB0byBGSVJTVF9TRVBBUkFURSwgYnV0IGhhcyBhdCBsZWFzdCBvbmUgaW5jb21pbmcgZWRnZS4gRklSU1RfU0VQQVJBVEUgbm9kZXMgbXVzdCBub3QgaGF2ZSBpbmNvbWluZyBlZGdlcy4iKSl9ZWxzZSBpZihyPT1kNCl7Zm9yKG89bmV3IGhyKGRyKHFzKGUpLmEuS2MoKSxuZXcgaikpO2pyKG8pOylpZihhPWwoeHIobyksMTgpLCFBdXQoYSkpdGhyb3cgdWUobmV3IFZwKGpoZStITihlKSsiJyBoYXMgaXRzIGxheWVyIGNvbnN0cmFpbnQgc2V0IHRvIExBU1RfU0VQQVJBVEUsIGJ1dCBoYXMgYXQgbGVhc3Qgb25lIG91dGdvaW5nIGVkZ2UuIExBU1RfU0VQQVJBVEUgbm9kZXMgbXVzdCBub3QgaGF2ZSBvdXRnb2luZyBlZGdlcy4iKSl9fWZ1bmN0aW9uIGJQKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFY7aWYoZS5lJiZlLmMuYzxlLmYpdGhyb3cgdWUobmV3IG5jKCJFeHBlY3RlZCAiK2UuZisiIHBoYXNlcyB0byBiZSBjb25maWd1cmVkOyBvbmx5IGZvdW5kICIrZS5jLmMpKTtmb3IoQz1sKEswKGUuZyksOSksej1lZyhlLmYpLG89QyxnPTAsRT1vLmxlbmd0aDtnPEU7KytnKXI9b1tnXSxMPWwoaE4oZSxyLmcpLDE4OCksTD92dCh6LGwoazF0KGUsTCksMTA2KSk6ei5jLnB1c2gobnVsbCk7Zm9yKFY9bmV3IFhzLElzKEZpKGZjKEZpKG5ldyBibihudWxsLG5ldyBrbih6LDE2KSksbmV3IFJwKSxuZXcgQVhlKHQpKSxuZXcgdTgpLG5ldyBMWGUoVikpLERoKFYsZS5hKSxuPW5ldyBidCxhPUMsZj0wLHc9YS5sZW5ndGg7Zjx3OysrZilyPWFbZl0scmEobixyMHQoZSxMSChsKGhOKFYsci5nKSwyMCkpKSksQj1sKGp0KHosci5nKSwxMDYpLEImJiRuKG4uYyxCKTtyZXR1cm4gcmEobixyMHQoZSxMSChsKGhOKFYsQ1tDLmxlbmd0aC0xXS5nKzEpLDIwKSkpKSxufWZ1bmN0aW9uIHJNbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGU7Zm9yKEI9bmV3IGJ0LGE9bmV3IGJ0LEo9bnVsbCxnPXQuS2MoKTtnLk9iKCk7KWY9bChnLlBiKCksMTcpLG89bmV3IEJZZShmLmEpLCRuKGEuYyxvKSxKJiYoby5kPUosSi5lPW8pLEo9bztmb3IoTWU9TUFuKGUpLEM9MDtDPGEuYy5sZW5ndGg7KytDKXtmb3Ioej1udWxsLHRlPV82ZSgoU24oMCxhLmMubGVuZ3RoKSxsKGEuY1swXSw2NjEpKSksbj1udWxsLHI9Z3MsTD0xO0w8ZS5iLmMubGVuZ3RoOysrTClmZT10ZT9iLk1hdGguYWJzKHRlLmItTCk6Yi5NYXRoLmFicyhMLXouYikrMSxWPXo/Yi5NYXRoLmFicyhMLXouYik6ZmUrMSxWPGZlPyhFPXosdz1WKTooRT10ZSx3PWZlKSxUZT0oJGU9emUoR2UoUShlLChOdCgpLG9EZSkpKSksTWVbTF0rYi5NYXRoLnBvdyh3LCRlKSksVGU8ciYmKHI9VGUsbj1FLG4uYz1MKSx0ZSYmTD09dGUuYiYmKHo9dGUsdGU9ZmduKHRlKSk7biYmKHZ0KEIscHQobi5jKSksbi5hPSEwLFM0bihuKSl9cmV0dXJuIENuKCksTGFlKEIuYyxCLmMubGVuZ3RoLG51bGwpLEJ9ZnVuY3Rpb24gTmtlKGUsdCxuKXt2YXIgcixhLG8sZixnLHc7aWYodC5sPT0wJiZ0Lm09PTAmJnQuaD09MCl0aHJvdyB1ZShuZXcgcXooImRpdmlkZSBieSB6ZXJvIikpO2lmKGUubD09MCYmZS5tPT0wJiZlLmg9PTApcmV0dXJuIG4mJihOYj1xdSgwLDAsMCkpLHF1KDAsMCwwKTtpZih0Lmg9PVNQJiZ0Lm09PTAmJnQubD09MClyZXR1cm4gUTRuKGUsbik7aWYodz0hMSx0Lmg+PjE5JiYodD14RSh0KSx3PSF3KSxmPSRUbih0KSxvPSExLGE9ITEscj0hMSxlLmg9PVNQJiZlLm09PTAmJmUubD09MClpZihhPSEwLG89ITAsZj09LTEpZT1lbnQoKGlFKCksV1NlKSkscj0hMCx3PSF3O2Vsc2UgcmV0dXJuIGc9RDllKGUsZiksdyYmeWNlKGcpLG4mJihOYj1xdSgwLDAsMCkpLGc7ZWxzZSBlLmg+PjE5JiYobz0hMCxlPXhFKGUpLHI9ITAsdz0hdyk7cmV0dXJuIGYhPS0xP3B5bihlLGYsdyxvLG4pOmJ4ZShlLHQpPDA/KG4mJihvP05iPXhFKGUpOk5iPXF1KGUubCxlLm0sZS5oKSkscXUoMCwwLDApKTpSX24ocj9lOnF1KGUubCxlLm0sZS5oKSx0LHcsbyxhLG4pfWZ1bmN0aW9uIFRsZShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWO2lmKGY9ZS5lLHc9dC5lLGY9PTApcmV0dXJuIHQ7aWYodz09MClyZXR1cm4gZTtpZihvPWUuZCxnPXQuZCxvK2c9PTIpcmV0dXJuIG49dmEoZS5hWzBdLFZvKSxyPXZhKHQuYVswXSxWbyksZj09dz8oQz1ibyhuLHIpLFY9WXIoQyksej1Zcih1YihDLDMyKSksej09MD9uZXcgUWcoZixWKTpuZXcgSW0oZiwyLGhlKGxlKFZyLDEpLGRpLDI4LDE1LFtWLHpdKSkpOihDZCgpLEFxKGY8MD9EZihyLG4pOkRmKG4sciksMCk/a2IoZjwwP0RmKHIsbik6RGYobixyKSk6Sl8oa2IocjIoZjwwP0RmKHIsbik6RGYobixyKSkpKSk7aWYoZj09dylCPWYsTD1vPj1nP09vZShlLmEsbyx0LmEsZyk6T29lKHQuYSxnLGUuYSxvKTtlbHNle2lmKGE9byE9Zz9vPmc/MTotMTpXN2UoZS5hLHQuYSxvKSxhPT0wKXJldHVybiBDZCgpLEJMO2E9PTE/KEI9ZixMPURvZShlLmEsbyx0LmEsZykpOihCPXcsTD1Eb2UodC5hLGcsZS5hLG8pKX1yZXR1cm4gRT1uZXcgSW0oQixMLmxlbmd0aCxMKSxpQShFKSxFfWZ1bmN0aW9uIGlNbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3O2lmKCEoZS5nPnQuZnx8dC5nPmUuZikpe2ZvcihuPTAscj0wLGY9ZS53LmEuZWMoKS5LYygpO2YuT2IoKTspYT1sKGYuUGIoKSwxMiksSWNlKEljKGhlKGxlKEVhLDEpLGR0LDgsMCxbYS5pLm4sYS5uLGEuYV0pKS5iLHQuZyx0LmYpJiYrK247Zm9yKGc9ZS5yLmEuZWMoKS5LYygpO2cuT2IoKTspYT1sKGcuUGIoKSwxMiksSWNlKEljKGhlKGxlKEVhLDEpLGR0LDgsMCxbYS5pLm4sYS5uLGEuYV0pKS5iLHQuZyx0LmYpJiYtLW47Zm9yKHc9dC53LmEuZWMoKS5LYygpO3cuT2IoKTspYT1sKHcuUGIoKSwxMiksSWNlKEljKGhlKGxlKEVhLDEpLGR0LDgsMCxbYS5pLm4sYS5uLGEuYV0pKS5iLGUuZyxlLmYpJiYrK3I7Zm9yKG89dC5yLmEuZWMoKS5LYygpO28uT2IoKTspYT1sKG8uUGIoKSwxMiksSWNlKEljKGhlKGxlKEVhLDEpLGR0LDgsMCxbYS5pLm4sYS5uLGEuYV0pKS5iLGUuZyxlLmYpJiYtLXI7bjxyP25ldyBXSChlLHQsci1uKTpyPG4/bmV3IFdIKHQsZSxuLXIpOihuZXcgV0godCxlLDApLG5ldyBXSChlLHQsMCkpfX1mdW5jdGlvbiBzTW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlO2ZvcihFPXQuYyxhPWR5ZShlLmUpLEw9bWQoel8oSmEoZnllKGUuZSkpLGUuZCplLmEsZS5jKmUuYiksLS41KSxuPWEuYS1MLmEscj1hLmItTC5iLGY9dC5hLG49Zi5jLW4scj1mLmQtcix3PW5ldyBHKEUpO3cuYTx3LmMuYy5sZW5ndGg7KXtzd2l0Y2goZz1sKHJlKHcpLDQwNyksQj1nLmIsej1uK0IuYSx0ZT1yK0IuYixWPXVhKHovZS5hKSxmZT11YSh0ZS9lLmIpLG89Zy5hLG8uZyl7Y2FzZSAwOkM9KGJ4KCksYUIpO2JyZWFrO2Nhc2UgMTpDPShieCgpLHNCKTticmVhaztjYXNlIDI6Qz0oYngoKSxvQik7YnJlYWs7ZGVmYXVsdDpDPShieCgpLGNCKX1vLmE/KFRlPXVhKCh0ZStnLmMpL2UuYiksdnQoZS5mLG5ldyBtNGUoQyxwdChmZSkscHQoVGUpKSksbz09KE5BKCksbEIpP3lFKGUsMCxmZSxWLFRlKTp5RShlLFYsZmUsZS5kLTEsVGUpKTooSj11YSgoeitnLmMpL2UuYSksdnQoZS5mLG5ldyBtNGUoQyxwdChWKSxwdChKKSkpLG89PShOQSgpLHVCKT95RShlLFYsMCxKLGZlKTp5RShlLFYsZmUsSixlLmMtMSkpfX1mdW5jdGlvbiBhTW4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEM7Zm9yKHQ9bmV3IFNJLG49bmV3IFNJLEU9dm4oWFAsKGE9WUEoZS5iLGxpKSxhP2VpKG4xKCghYS5iJiYoYS5iPW5ldyBkaCgoVG4oKSxObyksWWMsYSkpLGEuYiksQmYpKTpudWxsKSksdz0wO3c8ZS5pOysrdylnPWwoZS5nW3ddLDE3OSksRGUoZywxMDIpPyhmPWwoZywxOSksZi5CYiZldT8oIShmLkJiJl9kKXx8IUUmJihvPVlBKGYsbGkpLChvP2VpKG4xKCghby5iJiYoby5iPW5ldyBkaCgoVG4oKSxObyksWWMsbykpLG8uYiksekcpKTpudWxsKT09bnVsbCkpJiZxcih0LGYpOihDPVJvKGYpLEMmJkMuQmImZXV8fCghKGYuQmImX2QpfHwhRSYmKHI9WUEoZixsaSksKHI/ZWkobjEoKCFyLmImJihyLmI9bmV3IGRoKChUbigpLE5vKSxZYyxyKSksci5iKSx6RykpOm51bGwpPT1udWxsKSkmJnFyKG4sZikpKTooRm8oKSxsKGcsNjkpLnhrKCkmJihnLnNrKCl8fChxcih0LGcpLHFyKG4sZykpKSk7SXkodCksSXkobiksZS5hPWwodC5nLDI1NCksbChuLmcsMjU0KX1mdW5jdGlvbiBnNihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMO2lmKG1zKHQsbik+PTApcmV0dXJuIG47c3dpdGNoKGt3KGljKGUsbikpKXtjYXNlIDI6e2lmKHZuKCIiLG8yKGUsbi5xaygpKS54ZSgpKSl7aWYodz1ITyhpYyhlLG4pKSxnPVdrKGljKGUsbikpLEM9UDllKGUsdCx3LGcpLEMpcmV0dXJuIEM7Zm9yKGE9aGtlKGUsdCksZj0wLEw9YS5nYygpO2Y8TDsrK2YpaWYoQz1sKGEuWGIoZiksMTc5KSxxOWUoJGFlKGljKGUsQykpLHcpKXJldHVybiBDfXJldHVybiBudWxsfWNhc2UgNDp7aWYodm4oIiIsbzIoZSxuLnFrKCkpLnhlKCkpKXtmb3Iocj1uO3I7cj12Ym4oaWMoZSxyKSkpaWYoRT1ITyhpYyhlLHIpKSxnPVdrKGljKGUscikpLEM9QjllKGUsdCxFLGcpLEMpcmV0dXJuIEM7aWYodz1ITyhpYyhlLG4pKSx2bihjdix3KSlyZXR1cm4geXhlKGUsdCk7Zm9yKG89YWxlKGUsdCksZj0wLEw9by5nYygpO2Y8TDsrK2YpaWYoQz1sKG8uWGIoZiksMTc5KSxxOWUoJGFlKGljKGUsQykpLHcpKXJldHVybiBDfXJldHVybiBudWxsfWRlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIG9NbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQztpZihuLmdjKCk9PTApcmV0dXJuITE7aWYoZz0oRm8oKSxsKHQsNjkpLnhrKCkpLG89Zz9uOm5ldyBMdyhuLmdjKCkpLHVwKGUuZSx0KSl7aWYodC5TaSgpKWZvcihFPW4uS2MoKTtFLk9iKCk7KXc9RS5QYigpLCRVKGUsdCx3LERlKHQsMTAyKSYmKGwodCwxOSkuQmImSW8pIT0wKXx8KGE9c2codCx3KSxvLkhjKGEpfHxvLkZjKGEpKTtlbHNlIGlmKCFnKWZvcihFPW4uS2MoKTtFLk9iKCk7KXc9RS5QYigpLGE9c2codCx3KSxvLkZjKGEpfWVsc2V7aWYobi5nYygpPjEpdGhyb3cgdWUobmV3IFluKFpQKSk7Zm9yKEM9V3UoZS5lLkRoKCksdCkscj1sKGUuZywxMjQpLGY9MDtmPGUuaTsrK2YpaWYoYT1yW2ZdLEMuYW0oYS5MaygpKSl7aWYobi5IYyhnP2E6YS5tZCgpKSlyZXR1cm4hMTtmb3IoRT1uLktjKCk7RS5PYigpOyl3PUUuUGIoKSxsKG42KGUsZixnP2wodyw3Nik6c2codCx3KSksNzYpO3JldHVybiEwfWd8fChhPXNnKHQsbi5LYygpLlBiKCkpLG8uRmMoYSkpfXJldHVybiBBcyhlLG8pfWZ1bmN0aW9uIGNNbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQztmb3IoQz1uZXcgb3MsZz0oRT1uZXcgZ2koZS5jKS5hLnZjKCkuS2MoKSxuZXcgZnMoRSkpO2cuYS5PYigpOylvPShhPWwoZy5hLlBiKCksNDQpLGwoYS5tZCgpLDQ2NykpLG8uYj09MCYmQ3MoQyxvLEMuYy5iLEMuYyk7Zm9yKDtDLmIhPTA7KWZvcihvPWwoQy5iPT0wP251bGw6KG1yKEMuYiE9MCksYWYoQyxDLmEuYSkpLDQ2Nyksby5hPT1udWxsJiYoby5hPTApLHI9bmV3IEcoby5kKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksNjYzKSxuLmIuYT09bnVsbD9uLmIuYT16ZShvLmEpK24uYTp0Lm89PShEMSgpLHd2KT9uLmIuYT1iLk1hdGgubWluKHplKG4uYi5hKSx6ZShvLmEpK24uYSk6bi5iLmE9Yi5NYXRoLm1heCh6ZShuLmIuYSksemUoby5hKStuLmEpLC0tbi5iLmIsbi5iLmI9PTAmJnVpKEMsbi5iKTtmb3IoZj0odz1uZXcgZ2koZS5jKS5hLnZjKCkuS2MoKSxuZXcgZnModykpO2YuYS5PYigpOylvPShhPWwoZi5hLlBiKCksNDQpLGwoYS5tZCgpLDQ2NykpLHQuaVtvLmMucF09by5hfWZ1bmN0aW9uIHVNbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWO2ZvcihDPW4rdC5jLmMuYSx6PW5ldyBHKHQuaik7ei5hPHouYy5jLmxlbmd0aDspe2lmKEI9bChyZSh6KSwxMiksYT1JYyhoZShsZShFYSwxKSxkdCw4LDAsW0IuaS5uLEIubixCLmFdKSksdC5rPT0oWm4oKSxBdSkmJihnPWwoUShCLChmdCgpLHppKSksMTIpLGEuYT1JYyhoZShsZShFYSwxKSxkdCw4LDAsW2cuaS5uLGcubixnLmFdKSkuYSx0Lm4uYT1hLmEpLGY9bmV3IGx0KDAsYS5iKSxCLmo9PShDdCgpLGFyKSlmLmE9QztlbHNlIGlmKEIuaj09ZXIpZi5hPW47ZWxzZSBjb250aW51ZTtpZihWPWIuTWF0aC5hYnMoYS5hLWYuYSksIShWPD1yJiYhZThuKHQpKSlmb3Iobz1CLmcuYy5sZW5ndGgrQi5lLmMubGVuZ3RoPjEsRT1uZXcgTjEoQi5iKTtMYyhFLmEpfHxMYyhFLmIpOyl3PWwoTGMoRS5hKT9yZShFLmEpOnJlKEUuYiksMTgpLEw9dy5jPT1CP3cuZDp3LmMsYi5NYXRoLmFicyhJYyhoZShsZShFYSwxKSxkdCw4LDAsW0wuaS5uLEwubixMLmFdKSkuYi1mLmIpPjEmJlVDbihlLHcsZixvLEIpfX1mdW5jdGlvbiBsTW4oZSl7dmFyIHQsbixyLGEsbyxmO2lmKGE9bmV3IFVhKGUuZSwwKSxyPW5ldyBVYShlLmEsMCksZS5kKWZvcihuPTA7bjxlLmI7bisrKW1yKGEuYjxhLmQuZ2MoKSksYS5kLlhiKGEuYz1hLmIrKyk7ZWxzZSBmb3Iobj0wO248ZS5iLTE7bisrKW1yKGEuYjxhLmQuZ2MoKSksYS5kLlhiKGEuYz1hLmIrKykscGgoYSk7Zm9yKHQ9emUoKG1yKGEuYjxhLmQuZ2MoKSksR2UoYS5kLlhiKGEuYz1hLmIrKykpKSk7ZS5mLXQ+d2ZlOyl7Zm9yKG89dCxmPTA7Yi5NYXRoLmFicyh0LW8pPHdmZTspKytmLHQ9emUoKG1yKGEuYjxhLmQuZ2MoKSksR2UoYS5kLlhiKGEuYz1hLmIrKykpKSksbXIoci5iPHIuZC5nYygpKSxyLmQuWGIoci5jPXIuYisrKTtmPGUuYiYmKG1yKGEuYj4wKSxhLmEuWGIoYS5jPS0tYS5iKSxDQW4oZSxlLmItZixvLHIsYSksbXIoYS5iPGEuZC5nYygpKSxhLmQuWGIoYS5jPWEuYisrKSksbXIoci5iPjApLHIuYS5YYihyLmM9LS1yLmIpfWlmKCFlLmQpZm9yKG49MDtuPGUuYi0xO24rKyltcihhLmI8YS5kLmdjKCkpLGEuZC5YYihhLmM9YS5iKyspLHBoKGEpO2UuZD0hMCxlLmM9ITB9ZnVuY3Rpb24gR2koKXtHaT1VLFVQZT0odTNlKCksdHUpLmIsc0F0PWwoT2UodHQodHUuYiksMCksMzUpLFN2PWwoT2UodHQodHUuYiksMSksMzUpLGlBdD1sKE9lKHR0KHR1LmIpLDIpLDM1KSxjNz10dS5iYixsKE9lKHR0KHR1LmJiKSwwKSwzNSksbChPZSh0dCh0dS5iYiksMSksMzUpLHU3PXR1LmZiLEhNPWwoT2UodHQodHUuZmIpLDApLDM1KSxsKE9lKHR0KHR1LmZiKSwxKSwzNSksbChPZSh0dCh0dS5mYiksMiksMTkpLEMzPXR1LnFiLG1BdD1sKE9lKHR0KHR1LnFiKSwwKSwzNSksbChPZSh0dCh0dS5xYiksMSksMTkpLGwoT2UodHQodHUucWIpLDIpLDE5KSxiRj1sKE9lKHR0KHR1LnFiKSwzKSwzNSksbUY9bChPZSh0dCh0dS5xYiksNCksMzUpLFVNPWwoT2UodHQodHUucWIpLDYpLDM1KSxWTT1sKE9lKHR0KHR1LnFiKSw1KSwxOSksYUF0PXR1Lmosb0F0PXR1LmssY0F0PXR1LnEsdUF0PXR1LncsbEF0PXR1LkIsaEF0PXR1LkEsZkF0PXR1LkMsZEF0PXR1LkQsZ0F0PXR1Ll8scEF0PXR1LmNiLGJBdD10dS5oYn1mdW5jdGlvbiBoTW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHo7ZS5jPTAsZS5iPTAscj0yKnQuYy5hLmMubGVuZ3RoKzE7ZTpmb3IoTD1uLktjKCk7TC5PYigpOyl7aWYoQz1sKEwuUGIoKSwxMiksZz1DLmo9PShDdCgpLFFuKXx8Qy5qPT1Ecix6PTAsZyl7aWYoQj1sKFEoQywoZnQoKSxqbCkpLDEwKSwhQiljb250aW51ZTt6Kz1OU24oZSxyLEMsQil9ZWxzZXtmb3IoRT1uZXcgRyhDLmcpO0UuYTxFLmMuYy5sZW5ndGg7KWlmKHc9bChyZShFKSwxOCksYT13LmQsYS5pLmM9PXQuYyl7dnQoZS5hLEMpO2NvbnRpbnVlIGV9ZWxzZSB6Kz1lLmdbYS5wXTtmb3IoZj1uZXcgRyhDLmUpO2YuYTxmLmMuYy5sZW5ndGg7KWlmKG89bChyZShmKSwxOCksYT1vLmMsYS5pLmM9PXQuYyl7dnQoZS5hLEMpO2NvbnRpbnVlIGV9ZWxzZSB6LT1lLmdbYS5wXX1DLmUuYy5sZW5ndGgrQy5nLmMubGVuZ3RoPjA/KGUuZltDLnBdPXovKEMuZS5jLmxlbmd0aCtDLmcuYy5sZW5ndGgpLGUuYz1iLk1hdGgubWluKGUuYyxlLmZbQy5wXSksZS5iPWIuTWF0aC5tYXgoZS5iLGUuZltDLnBdKSk6ZyYmKGUuZltDLnBdPXopfX1mdW5jdGlvbiBmTW4oZSl7ZS5iPW51bGwsZS5iYj1udWxsLGUuZmI9bnVsbCxlLnFiPW51bGwsZS5hPW51bGwsZS5jPW51bGwsZS5kPW51bGwsZS5lPW51bGwsZS5mPW51bGwsZS5uPW51bGwsZS5NPW51bGwsZS5MPW51bGwsZS5RPW51bGwsZS5SPW51bGwsZS5LPW51bGwsZS5kYj1udWxsLGUuZWI9bnVsbCxlLmc9bnVsbCxlLmk9bnVsbCxlLmo9bnVsbCxlLms9bnVsbCxlLmdiPW51bGwsZS5vPW51bGwsZS5wPW51bGwsZS5xPW51bGwsZS5yPW51bGwsZS4kPW51bGwsZS5pYj1udWxsLGUuUz1udWxsLGUuVD1udWxsLGUudD1udWxsLGUucz1udWxsLGUudT1udWxsLGUudj1udWxsLGUudz1udWxsLGUuQj1udWxsLGUuQT1udWxsLGUuQz1udWxsLGUuRD1udWxsLGUuRj1udWxsLGUuRz1udWxsLGUuSD1udWxsLGUuST1udWxsLGUuSj1udWxsLGUuUD1udWxsLGUuWj1udWxsLGUuVT1udWxsLGUuVj1udWxsLGUuVz1udWxsLGUuWD1udWxsLGUuWT1udWxsLGUuXz1udWxsLGUuYWI9bnVsbCxlLmNiPW51bGwsZS5oYj1udWxsLGUubmI9bnVsbCxlLmxiPW51bGwsZS5tYj1udWxsLGUub2I9bnVsbCxlLnBiPW51bGwsZS5qYj1udWxsLGUua2I9bnVsbCxlLk49ITEsZS5PPSExfWZ1bmN0aW9uIGRNbihlLHQsbil7dmFyIHIsYSxvLGY7Zm9yKG4uVWcoIkdyYXBoIHRyYW5zZm9ybWF0aW9uICgiK2UuYSsiKSIsMSksZj1fdyh0LmEpLG89bmV3IEcodC5iKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMzApLHJhKGYsYS5hKTtpZihyPWwoUSh0LChOdCgpLEFNZSkpLDQyOCkscj09KHBOKCksWEspKXN3aXRjaChsKFEodCxSaCksODgpLmcpe2Nhc2UgMjpzQSh0LGYpO2JyZWFrO2Nhc2UgMzpNQSh0LGYpO2JyZWFrO2Nhc2UgNDplLmE9PShkRSgpLGRCKT8oTUEodCxmKSx5b2UodCxmKSk6KHlvZSh0LGYpLE1BKHQsZikpfWVsc2UgaWYoZS5hPT0oZEUoKSxkQikpc3dpdGNoKGwoUSh0LFJoKSw4OCkuZyl7Y2FzZSAyOnNBKHQsZikseW9lKHQsZik7YnJlYWs7Y2FzZSAzOk1BKHQsZiksc0EodCxmKTticmVhaztjYXNlIDQ6c0EodCxmKSxNQSh0LGYpfWVsc2Ugc3dpdGNoKGwoUSh0LFJoKSw4OCkuZyl7Y2FzZSAyOnNBKHQsZikseW9lKHQsZik7YnJlYWs7Y2FzZSAzOnNBKHQsZiksTUEodCxmKTticmVhaztjYXNlIDQ6TUEodCxmKSxzQSh0LGYpfW4uVmcoKX1mdW5jdGlvbiBnTW4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdztmb3Iobz1uZXcgRyhlLmEuYik7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDg2KSxhLmIuYz1hLmcuYyxhLmIuZD1hLmcuZDtmb3Iodz1uZXcgbHQoZ3MsZ3MpLHQ9bmV3IGx0KGlhLGlhKSxyPW5ldyBHKGUuYS5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksODYpLHcuYT1iLk1hdGgubWluKHcuYSxuLmcuYyksdy5iPWIuTWF0aC5taW4ody5iLG4uZy5kKSx0LmE9Yi5NYXRoLm1heCh0LmEsbi5nLmMrbi5nLmIpLHQuYj1iLk1hdGgubWF4KHQuYixuLmcuZCtuLmcuYSk7Zm9yKGc9dkgoZS5jKS5hLm5jKCk7Zy5PYigpOylmPWwoZy5QYigpLDQyKSxuPWwoZi5iLDg2KSx3LmE9Yi5NYXRoLm1pbih3LmEsbi5nLmMpLHcuYj1iLk1hdGgubWluKHcuYixuLmcuZCksdC5hPWIuTWF0aC5tYXgodC5hLG4uZy5jK24uZy5iKSx0LmI9Yi5NYXRoLm1heCh0LmIsbi5nLmQrbi5nLmEpO2UuZD1IcShuZXcgbHQody5hLHcuYikpLGUuZT1tYShuZXcgbHQodC5hLHQuYiksdyksZS5hLmEuYy5sZW5ndGg9MCxlLmEuYi5jLmxlbmd0aD0wfWZ1bmN0aW9uIHBNbihlKXtoQSgpO3ZhciB0LG4scixhLG8sZixnO2ZvcihnPW5ldyAkUWUsbj1uZXcgRyhlKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMTQ4KSwoIWcuYnx8dC5jPj1nLmIuYykmJihnLmI9dCksKCFnLmN8fHQuYzw9Zy5jLmMpJiYoZy5kPWcuYyxnLmM9dCksKCFnLmV8fHQuZD49Zy5lLmQpJiYoZy5lPXQpLCghZy5mfHx0LmQ8PWcuZi5kKSYmKGcuZj10KTtyZXR1cm4gcj1uZXcgblUoKHdFKCksczMpKSxRTyhlLE04dCxuZXcgSWwoaGUobGUoZkIsMSksUm4sMzgyLDAsW3JdKSkpLGY9bmV3IG5VKG80KSxRTyhlLEw4dCxuZXcgSWwoaGUobGUoZkIsMSksUm4sMzgyLDAsW2ZdKSkpLGE9bmV3IG5VKGE0KSxRTyhlLEE4dCxuZXcgSWwoaGUobGUoZkIsMSksUm4sMzgyLDAsW2FdKSkpLG89bmV3IG5VKE02KSxRTyhlLF84dCxuZXcgSWwoaGUobGUoZkIsMSksUm4sMzgyLDAsW29dKSkpLFl1ZShyLmMsczMpLFl1ZShhLmMsYTQpLFl1ZShvLmMsTTYpLFl1ZShmLmMsbzQpLGcuYS5jLmxlbmd0aD0wLHJhKGcuYSxyLmMpLHJhKGcuYSxsZihhLmMpKSxyYShnLmEsby5jKSxyYShnLmEsbGYoZi5jKSksZ31mdW5jdGlvbiBiTW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVjtmb3IodC5VZyhBeXQsMSksej16ZShHZShhdChlLCh1ZygpLFQ0KSkpKSxmPXplKEdlKGF0KGUsKHoxKCksd00pKSkpLGc9bChhdChlLHZNKSwxMDcpLHY3ZSgoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkpLEM9dXZ0KCghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKSx6LGYpLCFlLmEmJihlLmE9bmV3IG50KEFpLGUsMTAsMTEpKSxFPW5ldyBHKEMpO0UuYTxFLmMuYy5sZW5ndGg7KWZvcih3PWwocmUoRSksMTg2KSxhPW5ldyBHKHcuYSk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDE3MiksQj1uZXcgejVlKHIucyxyLnQsemUoR2UoYXQoZSx3TSkpKSksQzdlKEIsciksdnQody5kLEIpO0w9c2d0KEMsZiksVj1iLk1hdGgubWF4KEwuYSx6ZShHZShhdChlLG1NKSkpLShnLmIrZy5jKSksbz1iLk1hdGgubWF4KEwuYix6ZShHZShhdChlLFVXKSkpLShnLmQrZy5hKSksbj1vLUwuYixIaShlLGJNLG4pLEhpKGUsWngsViksSGkoZSxaVCxvK24pLEhpKGUsR1csQyksdC5WZygpfWZ1bmN0aW9uIG1NbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEo7Zm9yKEU9bmV3IGJkLEM9bmV3IGJkLFY9bmV3IGJkLEo9bmV3IGJkLHc9emUoR2UoUSh0LChOdCgpLG0zKSkpKSxvPXplKEdlKFEodCx4MCkpKSxnPW5ldyBHKG4pO2cuYTxnLmMuYy5sZW5ndGg7KWlmKGY9bChyZShnKSwxMCksTD1sKFEoZiwoZnQoKSxXYykpLDY0KSxMPT0oQ3QoKSxRbikpZm9yKEMuYS56YyhmLEMpLGE9bmV3IGhyKGRyKGthKGYpLmEuS2MoKSxuZXcgaikpO2pyKGEpOylyPWwoeHIoYSksMTgpLG5hKEUsci5jLmkpO2Vsc2UgaWYoTD09RHIpZm9yKEouYS56YyhmLEopLGE9bmV3IGhyKGRyKGthKGYpLmEuS2MoKSxuZXcgaikpO2pyKGEpOylyPWwoeHIoYSksMTgpLG5hKFYsci5jLmkpO0UuYS5nYygpIT0wJiYoQj1uZXcgSGFlKDIsbyksej1Sa2UoQix0LEUsQywtdy10LmMuYiksej4wJiYoZS5hPXcrKHotMSkqbyx0LmMuYis9ZS5hLHQuZi5iKz1lLmEpKSxWLmEuZ2MoKSE9MCYmKEI9bmV3IEhhZSgxLG8pLHo9UmtlKEIsdCxWLEosdC5mLmIrdy10LmMuYiksej4wJiYodC5mLmIrPXcrKHotMSkqbykpfWZ1bmN0aW9uIGJ2dChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGU7Zm9yKEM9emUoR2UoUShlLChOdCgpLGIzKSkpKSxyPXplKEdlKFEoZSxyRGUpKSksQj1uZXcgRUkscnQoQixiMyxDK3IpLEU9dCxmZT1FLmQsSj1FLmMuaSxUZT1FLmQuaSx0ZT1veWUoSi5jKSxNZT1veWUoVGUuYyksYT1uZXcgYnQsTD10ZTtMPD1NZTtMKyspZz1uZXcgb3AoZSkseChnLChabigpLEFhKSkscnQoZywoZnQoKSx6aSksRSkscnQoZyxNcywoUmEoKSxNdSkpLHJ0KGcsa1csQiksej1sKGp0KGUuYixMKSwzMCksTD09dGU/RnkoZyx6LmEuYy5sZW5ndGgtbix6KTpWYShnLHopLCRlPXplKEdlKFEoRSx4MikpKSwkZTwwJiYoJGU9MCxydChFLHgyLCRlKSksZy5vLmI9JGUsVj1iLk1hdGguZmxvb3IoJGUvMiksZj1uZXcgZ3UsbGEoZiwoQ3QoKSxlcikpLE1jKGYsZyksZi5uLmI9Vix3PW5ldyBndSxsYSh3LGFyKSxNYyh3LGcpLHcubi5iPVYsRmEoRSxmKSxvPW5ldyBUdyxwYyhvLEUpLHJ0KG8sY2MsbnVsbCkscG8obyx3KSxGYShvLGZlKSxzOG4oZyxFLG8pLCRuKGEuYyxvKSxFPW87cmV0dXJuIGF9ZnVuY3Rpb24gQ2xlKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZTtmb3Iodz1sKGQyKGUsKEN0KCksZXIpKS5LYygpLlBiKCksMTIpLmUsej1sKGQyKGUsYXIpLktjKCkuUGIoKSwxMikuZyxnPXcuYy5sZW5ndGgsTWU9STEobChqdChlLmosMCksMTIpKTtnLS0gPjA7KXtmb3IoSj0oU24oMCx3LmMubGVuZ3RoKSxsKHcuY1swXSwxOCkpLGE9KFNuKDAsei5jLmxlbmd0aCksbCh6LmNbMF0sMTgpKSxUZT1hLmQuZSxvPWdjKFRlLGEsMCksJGJuKEosYS5kLG8pLHBvKGEsbnVsbCksRmEoYSxudWxsKSxWPUouYSx0JiZ1aShWLG5ldyBFbyhNZSkpLHI9UnIoYS5hLDApO3IuYiE9ci5kLmM7KW49bChCcihyKSw4KSx1aShWLG5ldyBFbyhuKSk7Zm9yKGZlPUouYixCPW5ldyBHKGEuYik7Qi5hPEIuYy5jLmxlbmd0aDspTD1sKHJlKEIpLDcyKSwkbihmZS5jLEwpO2lmKHRlPWwoUShKLChOdCgpLGNjKSksNzUpLGY9bChRKGEsY2MpLDc1KSxmKWZvcih0ZXx8KHRlPW5ldyBibCxydChKLGNjLHRlKSksQz1ScihmLDApO0MuYiE9Qy5kLmM7KUU9bChCcihDKSw4KSx1aSh0ZSxuZXcgRW8oRSkpfX1mdW5jdGlvbiB2TW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lO2lmKEo9dC5iLmMubGVuZ3RoLCEoSjwzKSl7Zm9yKHo9V2UoVnIsZGksMjgsSiwxNSwxKSxMPTAsQz1uZXcgRyh0LmIpO0MuYTxDLmMuYy5sZW5ndGg7KUU9bChyZShDKSwzMCkseltMKytdPUUuYS5jLmxlbmd0aDtmb3IoQj1uZXcgVWEodC5iLDIpLHI9MTtyPEotMTtyKyspZm9yKG49KG1yKEIuYjxCLmQuZ2MoKSksbChCLmQuWGIoQi5jPUIuYisrKSwzMCkpLFY9bmV3IEcobi5hKSxvPTAsZz0wLHc9MDt3PHpbcisxXTt3KyspaWYoTWU9bChyZShWKSwxMCksdz09eltyKzFdLTF8fFp4ZShlLE1lLHIrMSxyKSl7Zm9yKGY9eltyXS0xLFp4ZShlLE1lLHIrMSxyKSYmKGY9ZS5jLmVbbChsKGwoanQoZS5jLmIsTWUucCksMTUpLlhiKDApLDQyKS5hLDEwKS5wXSk7Zzw9dzspe2lmKFRlPWwoanQobi5hLGcpLDEwKSwhWnhlKGUsVGUscisxLHIpKWZvcihmZT1sKGp0KGUuYy5iLFRlLnApLDE1KS5LYygpO2ZlLk9iKCk7KXRlPWwoZmUuUGIoKSw0MiksYT1lLmMuZVtsKHRlLmEsMTApLnBdLChhPG98fGE+ZikmJm5hKGUuYixsKHRlLmIsMTgpKTsrK2d9bz1mfX19ZnVuY3Rpb24gUGtlKGUsdCl7dmFyIG47aWYodD09bnVsbHx8dm4odCx1bCl8fHQubGVuZ3RoPT0wJiZlLmshPShnMigpLHQ5KSlyZXR1cm4gbnVsbDtzd2l0Y2goZS5rLmcpe2Nhc2UgMTpyZXR1cm4gUVYodCx3VCk/KEhuKCksU1QpOlFWKHQsRmZlKT8oSG4oKSxQYik6bnVsbDtjYXNlIDI6dHJ5e3JldHVybiBwdChPaCh0LGxvLElpKSl9Y2F0Y2gocil7aWYocj1icyhyKSxEZShyLDEzMCkpcmV0dXJuIG51bGw7dGhyb3cgdWUocil9Y2FzZSA0OnRyeXtyZXR1cm4gankodCl9Y2F0Y2gocil7aWYocj1icyhyKSxEZShyLDEzMCkpcmV0dXJuIG51bGw7dGhyb3cgdWUocil9Y2FzZSAzOnJldHVybiB0O2Nhc2UgNTpyZXR1cm4gRjB0KGUpLFhwdChlLHQpO2Nhc2UgNjpyZXR1cm4gRjB0KGUpLG1UbihlLGUuYSx0KTtjYXNlIDc6dHJ5e3JldHVybiBuPUFFbihlKSxuLmNnKHQpLG59Y2F0Y2gocil7aWYocj1icyhyKSxEZShyLDMzKSlyZXR1cm4gbnVsbDt0aHJvdyB1ZShyKX1kZWZhdWx0OnRocm93IHVlKG5ldyBuYygiSW52YWxpZCB0eXBlIHNldCBmb3IgdGhpcyBsYXlvdXQgb3B0aW9uLiIpKX19ZnVuY3Rpb24gQmtlKGUpe3ZhciB0O3N3aXRjaChlLmQpe2Nhc2UgMTp7aWYoZS5TaigpKXJldHVybiBlLm8hPS0yO2JyZWFrfWNhc2UgMjp7aWYoZS5TaigpKXJldHVybiBlLm89PS0yO2JyZWFrfWNhc2UgMzpjYXNlIDU6Y2FzZSA0OmNhc2UgNjpjYXNlIDc6cmV0dXJuIGUubz4tMjtkZWZhdWx0OnJldHVybiExfXN3aXRjaCh0PWUuUmooKSxlLnApe2Nhc2UgMDpyZXR1cm4gdCE9bnVsbCYmUnQoQnQodCkpIT1JXyhlLmssMCk7Y2FzZSAxOnJldHVybiB0IT1udWxsJiZsKHQsMjIyKS5hIT1ZcihlLmspPDwyND4+MjQ7Y2FzZSAyOnJldHVybiB0IT1udWxsJiZsKHQsMTgwKS5hIT0oWXIoZS5rKSZacyk7Y2FzZSA2OnJldHVybiB0IT1udWxsJiZJXyhsKHQsMTY4KS5hLGUuayk7Y2FzZSA1OnJldHVybiB0IT1udWxsJiZsKHQsMTcpLmEhPVlyKGUuayk7Y2FzZSA3OnJldHVybiB0IT1udWxsJiZsKHQsMTkxKS5hIT1ZcihlLmspPDwxNj4+MTY7Y2FzZSAzOnJldHVybiB0IT1udWxsJiZ6ZShHZSh0KSkhPWUuajtjYXNlIDQ6cmV0dXJuIHQhPW51bGwmJmwodCwxNjEpLmEhPWUuajtkZWZhdWx0OnJldHVybiB0PT1udWxsP2UubiE9bnVsbDohUGkodCxlLm4pfX1mdW5jdGlvbiBtUChlLHQsbil7dmFyIHIsYSxvLGY7cmV0dXJuIGUub2woKSYmZS5ubCgpJiYoZj1GYWUoZSxsKG4sNTgpKSxxZShmKSE9PXFlKG4pKT8oZS54aih0KSxlLkRqKHQseWx0KGUsdCxmKSksZS5hbCgpJiYobz0oYT1sKG4sNTQpLGUubWwoKT9lLmtsKCk/YS5UaChlLmIsUm8obChNbihzbChlLmIpLGUuTGooKSksMTkpKS5uLGwoTW4oc2woZS5iKSxlLkxqKCkpLkhrKCksMjkpLmtrKCksbnVsbCk6YS5UaChlLmIsbXMoYS5EaCgpLFJvKGwoTW4oc2woZS5iKSxlLkxqKCkpLDE5KSkpLG51bGwsbnVsbCk6YS5UaChlLmIsLTEtZS5MaigpLG51bGwsbnVsbCkpLCFsKGYsNTQpLlBoKCkmJihvPShyPWwoZiw1NCksZS5tbCgpP2Uua2woKT9yLlJoKGUuYixSbyhsKE1uKHNsKGUuYiksZS5MaigpKSwxOSkpLm4sbChNbihzbChlLmIpLGUuTGooKSkuSGsoKSwyOSkua2soKSxvKTpyLlJoKGUuYixtcyhyLkRoKCksUm8obChNbihzbChlLmIpLGUuTGooKSksMTkpKSksbnVsbCxvKTpyLlJoKGUuYiwtMS1lLkxqKCksbnVsbCxvKSkpLG8mJm8ub2ooKSksaGgoZS5iKSYmZS5KaihlLklqKDksbixmLHQsITEpKSxmKTpufWZ1bmN0aW9uIG12dChlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQztmb3Iocj1uZXcgYnQsZj1uZXcgRyhlLmUuYSk7Zi5hPGYuYy5jLmxlbmd0aDspe2ZvcihhPWwocmUoZiksMTI1KSxDPTAsYS5rLmMubGVuZ3RoPTAsbj1uZXcgRyhaNShhKSk7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDIxOCksdC5mJiYodnQoYS5rLHQpLCsrQyk7Qz09MSYmJG4oci5jLGEpfWZvcihvPW5ldyBHKHIpO28uYTxvLmMuYy5sZW5ndGg7KWZvcihhPWwocmUobyksMTI1KTthLmsuYy5sZW5ndGg9PTE7KXtmb3IoRT1sKHJlKG5ldyBHKGEuaykpLDIxOCksZS5iW0UuY109RS5nLGc9RS5kLHc9RS5lLG49bmV3IEcoWjUoYSkpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwyMTgpLFBpKHQsRSl8fCh0LmY/Zz09dC5kfHx3PT10LmU/ZS5iW0UuY10tPWUuYlt0LmNdLXQuZzplLmJbRS5jXSs9ZS5iW3QuY10tdC5nOmE9PWc/dC5kPT1hP2UuYltFLmNdKz10Lmc6ZS5iW0UuY10tPXQuZzp0LmQ9PWE/ZS5iW0UuY10tPXQuZzplLmJbRS5jXSs9dC5nKTthbChnLmssRSksYWwody5rLEUpLGc9PWE/YT1FLmU6YT1FLmR9fWZ1bmN0aW9uIHZ2dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIsejtpZihuPWwoUW8oZS5iLHQpLDEyNyksdz1sKGwoJGkoZS5yLHQpLDIxKSw4Nyksdy5kYygpKXtuLm4uYj0wLG4ubi5jPTA7cmV0dXJufWZvcihFPWUudS5IYygoUmwoKSx2cCkpLGY9MCxnPXcuS2MoKSxDPW51bGwsTD0wLEI9MDtnLk9iKCk7KXI9bChnLlBiKCksMTE3KSxhPXplKEdlKHIuYi5vZigoenEoKSxwSykpKSksbz1yLmIuTWYoKS5hLGUuQS5IYygobWgoKSxDdikpJiZLYnQoZSx0KSxDPyh6PUIrQy5kLmMrZS53K3IuZC5iLGY9Yi5NYXRoLm1heChmLChBMSgpLGYwKEgxKSxiLk1hdGguYWJzKEwtYSk8PUgxfHxMPT1hfHxpc05hTihMKSYmaXNOYU4oYSk/MDp6LyhhLUwpKSkpOmUuQyYmZS5DLmI+MCYmKGY9Yi5NYXRoLm1heChmLGtmdChlLkMuYityLmQuYixhKSkpLEM9cixMPWEsQj1vO2UuQyYmZS5DLmM+MCYmKHo9QitlLkMuYyxFJiYoeis9Qy5kLmMpLGY9Yi5NYXRoLm1heChmLChBMSgpLGYwKEgxKSxiLk1hdGguYWJzKEwtMSk8PUgxfHxMPT0xfHxpc05hTihMKSYmaXNOYU4oMSk/MDp6LygxLUwpKSkpLG4ubi5iPTAsbi5hLmE9Zn1mdW5jdGlvbiB3dnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHo7aWYobj1sKFFvKGUuYix0KSwxMjcpLHc9bChsKCRpKGUucix0KSwyMSksODcpLHcuZGMoKSl7bi5uLmQ9MCxuLm4uYT0wO3JldHVybn1mb3IoRT1lLnUuSGMoKFJsKCksdnApKSxmPTAsZS5BLkhjKChtaCgpLEN2KSkmJldidChlLHQpLGc9dy5LYygpLEM9bnVsbCxCPTAsTD0wO2cuT2IoKTspcj1sKGcuUGIoKSwxMTcpLG89emUoR2Uoci5iLm9mKCh6cSgpLHBLKSkpKSxhPXIuYi5NZigpLmIsQz8oej1MK0MuZC5hK2UudytyLmQuZCxmPWIuTWF0aC5tYXgoZiwoQTEoKSxmMChIMSksYi5NYXRoLmFicyhCLW8pPD1IMXx8Qj09b3x8aXNOYU4oQikmJmlzTmFOKG8pPzA6ei8oby1CKSkpKTplLkMmJmUuQy5kPjAmJihmPWIuTWF0aC5tYXgoZixrZnQoZS5DLmQrci5kLmQsbykpKSxDPXIsQj1vLEw9YTtlLkMmJmUuQy5hPjAmJih6PUwrZS5DLmEsRSYmKHorPUMuZC5hKSxmPWIuTWF0aC5tYXgoZiwoQTEoKSxmMChIMSksYi5NYXRoLmFicyhCLTEpPD1IMXx8Qj09MXx8aXNOYU4oQikmJmlzTmFOKDEpPzA6ei8oMS1CKSkpKSxuLm4uZD0wLG4uYS5iPWZ9ZnVuY3Rpb24gd01uKGUsdCxuLHIsYSxvLGYsZyl7dmFyIHcsRSxDLEwsQix6LFYsSix0ZSxmZTtpZihWPSExLEU9SDllKG4ucSx0LmYrdC5iLW4ucS5mKSx6PXIuZj50LmImJmcsZmU9YS0obi5xLmUrRS1mKSxMPSh3PVpBKHIsZmUsITEpLHcuYSkseiYmTD5yLmYpcmV0dXJuITE7aWYoeil7Zm9yKEI9MCx0ZT1uZXcgRyh0LmQpO3RlLmE8dGUuYy5jLmxlbmd0aDspSj1sKHJlKHRlKSwzMTUpLEIrPUg5ZShKLHIuZikrZjtmZT1hLUJ9cmV0dXJuIGZlPHIuZ3x8KEM9bz09ZS5jLmxlbmd0aC0xJiZmZT49KFNuKG8sZS5jLmxlbmd0aCksbChlLmNbb10sMTg2KSkuZSwheiYmTD50LmImJiFDKT8hMTooKEN8fHp8fEw8PXQuYikmJihDJiZMPnQuYj8obi5kPUwsYU4obixzcHQobixMKSkpOihFZ3Qobi5xLEUpLG4uYz0hMCksYU4ocixhLShuLnMrbi5yKSkscU4ocixuLnEuZStuLnEuZCx0LmYpLGJWKHQsciksZS5jLmxlbmd0aD5vJiYoVU4oKFNuKG8sZS5jLmxlbmd0aCksbChlLmNbb10sMTg2KSksciksKFNuKG8sZS5jLmxlbmd0aCksbChlLmNbb10sMTg2KSkuYS5jLmxlbmd0aD09MCYmdDIoZSxvKSksVj0hMCksVil9ZnVuY3Rpb24geXZ0KGUsdCxuKXt2YXIgcixhLG8sZixnLHc7Zm9yKHRoaXMuZz1lLGc9dC5kLmxlbmd0aCx3PW4uZC5sZW5ndGgsdGhpcy5kPVdlKHdnLG0yLDEwLGcrdywwLDEpLGY9MDtmPGc7ZisrKXRoaXMuZFtmXT10LmRbZl07Zm9yKG89MDtvPHc7bysrKXRoaXMuZFtnK29dPW4uZFtvXTtpZih0LmUpe2lmKHRoaXMuZT1QTyh0LmUpLHRoaXMuZS5NYyhuKSxuLmUpZm9yKGE9bi5lLktjKCk7YS5PYigpOylyPWwoYS5QYigpLDIzOSksciE9dCYmKHRoaXMuZS5IYyhyKT8tLXIuYzp0aGlzLmUuRmMocikpfWVsc2Ugbi5lJiYodGhpcy5lPVBPKG4uZSksdGhpcy5lLk1jKHQpKTt0aGlzLmY9dC5mK24uZix0aGlzLmE9dC5hK24uYSx0aGlzLmE+MD9Yb2UodGhpcyx0aGlzLmYvdGhpcy5hKTpMMSh0LmcsdC5kWzBdKS5hIT1udWxsJiZMMShuLmcsbi5kWzBdKS5hIT1udWxsP1hvZSh0aGlzLCh6ZShMMSh0LmcsdC5kWzBdKS5hKSt6ZShMMShuLmcsbi5kWzBdKS5hKSkvMik6TDEodC5nLHQuZFswXSkuYSE9bnVsbD9Yb2UodGhpcyxMMSh0LmcsdC5kWzBdKS5hKTpMMShuLmcsbi5kWzBdKS5hIT1udWxsJiZYb2UodGhpcyxMMShuLmcsbi5kWzBdKS5hKX1mdW5jdGlvbiB5TW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTDtmb3IoZS5hPW5ldyBac3QobnluKExNKSkscj1uZXcgRyh0LmEpO3IuYTxyLmMuYy5sZW5ndGg7KXtmb3Iobj1sKHJlKHIpLDg1NSksZz1uZXcgUWNlKGhlKGxlKHIxZSwxKSxSbiw4NiwwLFtdKSksdnQoZS5hLmEsZyksRT1uZXcgRyhuLmQpO0UuYTxFLmMuYy5sZW5ndGg7KXc9bChyZShFKSwxMTYpLEM9bmV3IFB5ZShlLHcpLGprZShDLGwoUShuLmMsKGZ0KCkscHApKSwyMSkpLEh1KGUuZyxuKXx8KGtpKGUuZyxuLG5ldyBsdCh3LmMsdy5kKSksa2koZS5mLG4sQykpLHZ0KGUuYS5iLEMpLHdvZShnLEMpO2ZvcihmPW5ldyBHKG4uYik7Zi5hPGYuYy5jLmxlbmd0aDspbz1sKHJlKGYpLDYwMiksQz1uZXcgUHllKGUsby5EZigpKSxraShlLmIsbyxuZXcgY2EoZyxDKSksamtlKEMsbChRKG4uYywoZnQoKSxwcCkpLDIxKSksby5CZigpJiYoTD1uZXcgVThlKGUsby5CZigpLDEpLGprZShMLGwoUShuLmMscHApLDIxKSksYT1uZXcgUWNlKGhlKGxlKHIxZSwxKSxSbiw4NiwwLFtdKSksd29lKGEsTCkseG4oZS5jLG8uQWYoKSxuZXcgY2EoZyxMKSkpfXJldHVybiBlLmF9ZnVuY3Rpb24geHZ0KGUpe3ZhciB0O3RoaXMuYT1lLHQ9KFpuKCksaGUobGUobDFlLDEpLGl0LDI3MywwLFtQcyxBYSxVcyxBdSxjdSxLMV0pKS5sZW5ndGgsdGhpcy5iPUxtKENnZSxbZHQsb0NlXSxbNjAxLDE0OV0sMCxbdCx0XSwyKSx0aGlzLmM9TG0oQ2dlLFtkdCxvQ2VdLFs2MDEsMTQ5XSwwLFt0LHRdLDIpLGFvZSh0aGlzLFBzLChOdCgpLG0zKSxWNiksdkEodGhpcyxQcyxBYSxiMyx2diksVk8odGhpcyxQcyxBdSxiMyksVk8odGhpcyxQcyxVcyxiMyksdkEodGhpcyxQcyxjdSxtMyxWNiksYW9lKHRoaXMsQWEseDAscTYpLFZPKHRoaXMsQWEsQXUseDApLFZPKHRoaXMsQWEsVXMseDApLHZBKHRoaXMsQWEsY3UsYjMsdnYpLGZudCh0aGlzLEF1LHgwKSxWTyh0aGlzLEF1LFVzLHgwKSxWTyh0aGlzLEF1LGN1LGNkZSksZm50KHRoaXMsVXMsdE0pLHZBKHRoaXMsVXMsY3UsS1QsR1QpLGFvZSh0aGlzLGN1LHgwLHgwKSxhb2UodGhpcyxLMSx4MCxxNiksdkEodGhpcyxLMSxQcyxiMyx2diksdkEodGhpcyxLMSxjdSxiMyx2diksdkEodGhpcyxLMSxBYSxiMyx2dil9ZnVuY3Rpb24geE1uKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZTtpZihmPW4uTGsoKSxEZShmLDEwMikmJmwoZiwxOSkuQmImSW8mJihCPWwobi5tZCgpLDU0KSxKPXliKGUuZSxCKSxKIT1CKSl7aWYoQz1zZyhmLEopLFJfKGUsdCxBdWUoZSx0LEMpKSxMPW51bGwsaGgoZS5lKSYmKHI9ZzYoKEVsKCksaW8pLGUuZS5EaCgpLGYpLHIhPU1uKGUuZS5EaCgpLGUuYykpKXtmb3IodGU9V3UoZS5lLkRoKCksZiksZz0wLG89bChlLmcsMTI0KSx3PTA7dzx0OysrdylhPW9bd10sdGUuYW0oYS5MaygpKSYmKytnO0w9bmV3IEVvZShlLmUsOSxyLEIsSixnLCExKSxMLm5qKG5ldyBaZyhlLmUsOSxlLmMsbixDLHQsITEpKX1yZXR1cm4gVj1sKGYsMTkpLHo9Um8oViksej8oTD1CLlRoKGUuZSxtcyhCLkRoKCkseiksbnVsbCxMKSxMPWwoSiw1NCkuUmgoZS5lLG1zKEouRGgoKSx6KSxudWxsLEwpKTpWLkJiJmV1JiYoRT0tMS1tcyhlLmUuRGgoKSxWKSxMPUIuVGgoZS5lLEUsbnVsbCxudWxsKSwhbChKLDU0KS5QaCgpJiYoTD1sKEosNTQpLlJoKGUuZSxFLG51bGwsTCkpKSxMJiZMLm9qKCksQ31yZXR1cm4gbn1mdW5jdGlvbiBrTW4oZSl7dmFyIHQsbixyO2ZvcihRNShRYixoZShsZShMNiwxKSxSbiwxMzQsMCxbbmV3IHV6XSkpLG49bmV3IFN6KGUpLHI9MDtyPG4uYS5sZW5ndGg7KytyKXQ9X3kobixyKS50ZSgpLmEsdm4odCwibGF5ZXJlZCIpP1E1KFFiLGhlKGxlKEw2LDEpLFJuLDEzNCwwLFtuZXcgWXJlXSkpOnZuKHQsImZvcmNlIik/UTUoUWIsaGUobGUoTDYsMSksUm4sMTM0LDAsW25ldyBLU10pKTp2bih0LCJzdHJlc3MiKT9RNShRYixoZShsZShMNiwxKSxSbiwxMzQsMCxbbmV3IHJ6XSkpOnZuKHQsIm1ydHJlZSIpP1E1KFFiLGhlKGxlKEw2LDEpLFJuLDEzNCwwLFtuZXcgcmllXSkpOnZuKHQsInJhZGlhbCIpP1E1KFFiLGhlKGxlKEw2LDEpLFJuLDEzNCwwLFtuZXcgQ2ZdKSk6dm4odCwiZGlzY28iKT9RNShRYixoZShsZShMNiwxKSxSbiwxMzQsMCxbbmV3IGV6LG5ldyB0el0pKTp2bih0LCJzcG9yZU92ZXJsYXAiKXx8dm4odCwic3BvcmVDb21wYWN0aW9uIik/UTUoUWIsaGUobGUoTDYsMSksUm4sMTM0LDAsW25ldyB1aWVdKSk6dm4odCwicmVjdHBhY2tpbmciKSYmUTUoUWIsaGUobGUoTDYsMSksUm4sMTM0LDAsW25ldyBna10pKX1mdW5jdGlvbiBrdnQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlO2lmKEI9bmV3IEVvKGUubyksZmU9dC5hL0IuYSxnPXQuYi9CLmIsSj10LmEtQi5hLG89dC5iLUIuYixuKWZvcihhPXFlKFEoZSwoTnQoKSxNcykpKT09PXFlKChSYSgpLE11KSksVj1uZXcgRyhlLmopO1YuYTxWLmMuYy5sZW5ndGg7KXN3aXRjaCh6PWwocmUoViksMTIpLHouai5nKXtjYXNlIDE6YXx8KHoubi5hKj1mZSk7YnJlYWs7Y2FzZSAyOnoubi5hKz1KLGF8fCh6Lm4uYio9Zyk7YnJlYWs7Y2FzZSAzOmF8fCh6Lm4uYSo9ZmUpLHoubi5iKz1vO2JyZWFrO2Nhc2UgNDphfHwoei5uLmIqPWcpfWZvcihFPW5ldyBHKGUuYik7RS5hPEUuYy5jLmxlbmd0aDspdz1sKHJlKEUpLDcyKSxDPXcubi5hK3cuby5hLzIsTD13Lm4uYit3Lm8uYi8yLHRlPUMvQi5hLGY9TC9CLmIsdGUrZj49MSYmKHRlLWY+MCYmTD49MD8ody5uLmErPUosdy5uLmIrPW8qZik6dGUtZjwwJiZDPj0wJiYody5uLmErPUoqdGUsdy5uLmIrPW8pKTtlLm8uYT10LmEsZS5vLmI9dC5iLHJ0KGUsKE50KCksYnYpLChtaCgpLHI9bChLMChCTSksOSksbmV3IFpoKHIsbChjMChyLHIubGVuZ3RoKSw5KSwwKSkpfWZ1bmN0aW9uIEVNbihlLHQsbixyLGEsbyl7dmFyIGY7aWYoISh0PT1udWxsfHwhSGNlKHQsVFBlLENQZSkpKXRocm93IHVlKG5ldyBZbigiaW52YWxpZCBzY2hlbWU6ICIrdCkpO2lmKCFlJiYhKG4hPW51bGwmJnBkKG4sY2woMzUpKT09LTEmJm4ubGVuZ3RoPjAmJihYbigwLG4ubGVuZ3RoKSxuLmNoYXJDb2RlQXQoMCkhPTQ3KSkpdGhyb3cgdWUobmV3IFluKCJpbnZhbGlkIG9wYXF1ZVBhcnQ6ICIrbikpO2lmKGUmJiEodCE9bnVsbCYmbk8oRVksdC50b0xvd2VyQ2FzZSgpKSkmJiEobj09bnVsbHx8IUhjZShuLCRNLHpNKSkpdGhyb3cgdWUobmV3IFluKG41dCtuKSk7aWYoZSYmdCE9bnVsbCYmbk8oRVksdC50b0xvd2VyQ2FzZSgpKSYmIW54bihuKSl0aHJvdyB1ZShuZXcgWW4objV0K24pKTtpZighYzVuKHIpKXRocm93IHVlKG5ldyBZbigiaW52YWxpZCBkZXZpY2U6ICIrcikpO2lmKCFHeW4oYSkpdGhyb3cgZj1hPT1udWxsPyJpbnZhbGlkIHNlZ21lbnRzOiBudWxsIjoiaW52YWxpZCBzZWdtZW50OiAiK3F5bihhKSx1ZShuZXcgWW4oZikpO2lmKCEobz09bnVsbHx8cGQobyxjbCgzNSkpPT0tMSkpdGhyb3cgdWUobmV3IFluKCJpbnZhbGlkIHF1ZXJ5OiAiK28pKX1mdW5jdGlvbiBUTW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlO2lmKG4uVWcoIk5ldHdvcmsgc2ltcGxleCBsYXllcmluZyIsMSksZS5iPXQsZmU9bChRKHQsKE50KCksbk0pKSwxNykuYSo0LHRlPWUuYi5hLHRlLmMubGVuZ3RoPDEpe24uVmcoKTtyZXR1cm59Zm9yKG89a19uKGUsdGUpLEo9bnVsbCxhPVJyKG8sMCk7YS5iIT1hLmQuYzspe2ZvcihyPWwoQnIoYSksMTUpLGc9ZmUqdWEoYi5NYXRoLnNxcnQoci5nYygpKSksZj1GX24ociksb2xlKG4zZShUdW4ocjNlKGJhZShmKSxnKSxKKSwhMCksbi5laCgxKSksQj1lLmIuYixWPW5ldyBHKGYuYSk7Vi5hPFYuYy5jLmxlbmd0aDspe2Zvcih6PWwocmUoViksMTI1KTtCLmMubGVuZ3RoPD16LmU7KXB3KEIsQi5jLmxlbmd0aCxuZXcgeXUoZS5iKSk7Qz1sKHouZiwxMCksVmEoQyxsKGp0KEIsei5lKSwzMCkpfWlmKG8uYj4xKWZvcihKPVdlKFZyLGRpLDI4LGUuYi5iLmMubGVuZ3RoLDE1LDEpLEw9MCxFPW5ldyBHKGUuYi5iKTtFLmE8RS5jLmMubGVuZ3RoOyl3PWwocmUoRSksMzApLEpbTCsrXT13LmEuYy5sZW5ndGh9dGUuYy5sZW5ndGg9MCxlLmE9bnVsbCxlLmI9bnVsbCxlLmM9bnVsbCxuLlZnKCl9ZnVuY3Rpb24gQ01uKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEw7Zm9yKEM9bmV3IGJ0LEw9bmV3IHo1LG89bnVsbCxhPTAscj0wO3I8dC5sZW5ndGg7KytyKXN3aXRjaChuPXRbcl0sRHluKG8sbikmJihhPWs4ZShlLEwsQyxEVyxhKSksbnMobiwoZnQoKSx1MykpJiYobz1sKFEobix1MyksMTApKSxuLmsuZyl7Y2FzZSAwOmZvcih3PWx5ZShHOChPYyhuLChDdCgpLFFuKSksbmV3IFhqKSk7dGNlKHcpOylmPWwoejZlKHcpLDEyKSxlLmRbZi5wXT1hKyssJG4oQy5jLGYpO2ZvcihhPWs4ZShlLEwsQyxEVyxhKSxFPWx5ZShHOChPYyhuLERyKSxuZXcgWGopKTt0Y2UoRSk7KWY9bCh6NmUoRSksMTIpLGUuZFtmLnBdPWErKywkbihDLmMsZik7YnJlYWs7Y2FzZSAzOk9jKG4sJERlKS5kYygpfHwoZj1sKE9jKG4sJERlKS5YYigwKSwxMiksZS5kW2YucF09YSsrLCRuKEMuYyxmKSksT2MobixEVykuZGMoKXx8Z2IoTCxuKTticmVhaztjYXNlIDE6Zm9yKGc9T2MobiwoQ3QoKSxlcikpLktjKCk7Zy5PYigpOylmPWwoZy5QYigpLDEyKSxlLmRbZi5wXT1hKyssJG4oQy5jLGYpO09jKG4sYXIpLkpjKG5ldyBxZXQoTCxuKSl9cmV0dXJuIGs4ZShlLEwsQyxEVyxhKSxDfWZ1bmN0aW9uIEZrZShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWO2lmKHQ9PW51bGx8fHQubGVuZ3RoPT0wKXJldHVybiBudWxsO2lmKG89bCh4dShlLmYsdCksMjMpLCFvKXtmb3IoYT0oej1uZXcgZ2koZS5kKS5hLnZjKCkuS2MoKSxuZXcgZnMoeikpO2EuYS5PYigpOylpZihuPShmPWwoYS5hLlBiKCksNDQpLGwoZi5tZCgpLDIzKSksZz1uLmYsVj10Lmxlbmd0aCx2bihnLnN1YnN0cihnLmxlbmd0aC1WLFYpLHQpJiYodC5sZW5ndGg9PWcubGVuZ3RofHxjbyhnLGcubGVuZ3RoLXQubGVuZ3RoLTEpPT00Nikpe2lmKG8pcmV0dXJuIG51bGw7bz1ufWlmKCFvKXtmb3Iocj0oQj1uZXcgZ2koZS5kKS5hLnZjKCkuS2MoKSxuZXcgZnMoQikpO3IuYS5PYigpOylpZihuPShmPWwoci5hLlBiKCksNDQpLGwoZi5tZCgpLDIzKSksTD1uLmcsTCE9bnVsbCl7Zm9yKHc9TCxFPTAsQz13Lmxlbmd0aDtFPEM7KytFKWlmKGc9d1tFXSxWPXQubGVuZ3RoLHZuKGcuc3Vic3RyKGcubGVuZ3RoLVYsViksdCkmJih0Lmxlbmd0aD09Zy5sZW5ndGh8fGNvKGcsZy5sZW5ndGgtdC5sZW5ndGgtMSk9PTQ2KSl7aWYobylyZXR1cm4gbnVsbDtvPW59fX1vJiZyYyhlLmYsdCxvKX1yZXR1cm4gb31mdW5jdGlvbiBTTW4oZSx0KXt2YXIgbixyLGEsbyxmO2ZvcihuPW5ldyBTNSxmPSExLG89MDtvPHQubGVuZ3RoO28rKyl7aWYocj0oWG4obyx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KG8pKSxyPT0zMil7Zm9yKEpWKGUsbiwwKSxuLmErPSIgIixKVihlLG4sMCk7bysxPHQubGVuZ3RoJiYoWG4obysxLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQobysxKT09MzIpOykrK287Y29udGludWV9aWYoZil7cj09Mzk/bysxPHQubGVuZ3RoJiYoWG4obysxLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQobysxKT09MzkpPyhuLmErPVN0cmluZy5mcm9tQ2hhckNvZGUociksKytvKTpmPSExOm4uYSs9U3RyaW5nLmZyb21DaGFyQ29kZShyKTtjb250aW51ZX1pZihwZCgiR3lNTGRrSG1zU0VjRGFoS3padiIsY2wocikpPjApe0pWKGUsbiwwKSxuLmErPVN0cmluZy5mcm9tQ2hhckNvZGUociksYT1HNW4odCxvKSxKVihlLG4sYSksbys9YS0xO2NvbnRpbnVlfXI9PTM5P28rMTx0Lmxlbmd0aCYmKFhuKG8rMSx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KG8rMSk9PTM5KT8obi5hKz0iJyIsKytvKTpmPSEwOm4uYSs9U3RyaW5nLmZyb21DaGFyQ29kZShyKX1KVihlLG4sMCksVHhuKGUpfWZ1bmN0aW9uIF9NbihlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWU7Zm9yKE1lPV9pdChlKSx3PW5ldyBidCxvPWUuYy5sZW5ndGgsRT1vLTEsQz1vKzE7TWUuYS5nYygpIT0wOyl7Zm9yKDtuLmIhPTA7KWZlPShtcihuLmIhPTApLGwoYWYobixuLmEuYSksMTE4KSksTWUuYS5CYyhmZSkhPW51bGwsZmUuZz1FLS0sVGtlKGZlLHQsbixyKTtmb3IoO3QuYiE9MDspVGU9KG1yKHQuYiE9MCksbChhZih0LHQuYS5hKSwxMTgpKSxNZS5hLkJjKFRlKSE9bnVsbCxUZS5nPUMrKyxUa2UoVGUsdCxuLHIpO2ZvcihnPWxvLEo9TWUuYS5lYygpLktjKCk7Si5PYigpOyl7aWYoVj1sKEouUGIoKSwxMTgpLCFyJiZWLmI+MCYmVi5hPD0wKXt3LmMubGVuZ3RoPTAsJG4ody5jLFYpO2JyZWFrfXo9Vi5pLVYuZCx6Pj1nJiYoej5nJiYody5jLmxlbmd0aD0wLGc9eiksJG4ody5jLFYpKX13LmMubGVuZ3RoIT0wJiYoZj1sKGp0KHcsYVUoYSx3LmMubGVuZ3RoKSksMTE4KSxNZS5hLkJjKGYpIT1udWxsLGYuZz1DKyssVGtlKGYsdCxuLHIpLHcuYy5sZW5ndGg9MCl9Zm9yKHRlPWUuYy5sZW5ndGgrMSxCPW5ldyBHKGUpO0IuYTxCLmMuYy5sZW5ndGg7KUw9bChyZShCKSwxMTgpLEwuZzxvJiYoTC5nPUwuZyt0ZSl9ZnVuY3Rpb24gRXZ0KGUsdCxuKXt2YXIgcixhLG8sZjt0aGlzLmo9ZSx0aGlzLmU9SXhlKGUpLHRoaXMubz10aGlzLmouZSx0aGlzLmk9ISF0aGlzLm8sdGhpcy5wPXRoaXMuaT9sKGp0KG4sZW8odGhpcy5vKS5wKSwyMTkpOm51bGwsYT1sKFEoZSwoZnQoKSxMdSkpLDIxKSx0aGlzLmc9YS5IYygoSG8oKSx2ZikpLHRoaXMuYj1uZXcgYnQsdGhpcy5kPW5ldyBQMXQodGhpcy5lKSxmPWwoUSh0aGlzLmosWHgpLDIzNCksdGhpcy5xPUwzbih0LGYsdGhpcy5lKSx0aGlzLms9bmV3IENvdCh0aGlzKSxvPU8xKGhlKGxlKGV4dCwxKSxSbiwyMzAsMCxbdGhpcyx0aGlzLmQsdGhpcy5rLHRoaXMucV0pKSx0PT0oSXcoKSxEQikmJiFSdChCdChRKGUsKE50KCksZjMpKSkpPyhyPW5ldyBQeGUodGhpcy5lKSwkbihvLmMsciksdGhpcy5jPW5ldyBuNmUocixmLGwodGhpcy5xLDQxMykpKTp0PT1EQiYmUnQoQnQoUShlLChOdCgpLGYzKSkpKT8ocj1uZXcgUHhlKHRoaXMuZSksJG4oby5jLHIpLHRoaXMuYz1uZXcgYmZ0KHIsZixsKHRoaXMucSw0MTMpKSk6dGhpcy5jPW5ldyB6ZXQodCx0aGlzKSx2dChvLHRoaXMuYyksYXZ0KG8sdGhpcy5lKSx0aGlzLnM9Z0luKHRoaXMuayl9ZnVuY3Rpb24gQU1uKGUsdCxuLHIsYSl7dmFyIG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZTtmb3Iobz1uZXcgYnQsRT1uZXcgRyhyKTtFLmE8RS5jLmMubGVuZ3RoOylpZihnPWwocmUoRSksNDUzKSxmPW51bGwsZy5mPT0ocW8oKSx6dSkpZm9yKFY9bmV3IEcoZy5lKTtWLmE8Vi5jLmMubGVuZ3RoOyl6PWwocmUoViksMTgpLHRlPXouZC5pLGVvKHRlKT09dD9DaHQoZSx0LGcseixnLmIsei5kKTohbnx8YkUodGUsbik/aTluKGUsdCxnLHIseik6KEI9eGxlKGUsdCxuLHosZy5iLHp1LGYpLEIhPWYmJiRuKG8uYyxCKSxCLmMmJihmPUIpKTtlbHNlIGZvcihMPW5ldyBHKGcuZSk7TC5hPEwuYy5jLmxlbmd0aDspaWYoQz1sKHJlKEwpLDE4KSxKPUMuYy5pLGVvKEopPT10KUNodChlLHQsZyxDLEMuYyxnLmIpO2Vsc2V7aWYoIW58fGJFKEosbikpY29udGludWU7Qj14bGUoZSx0LG4sQyxnLmIsJGwsZiksQiE9ZiYmJG4oby5jLEIpLEIuYyYmKGY9Qil9Zm9yKHc9bmV3IEcobyk7dy5hPHcuYy5jLmxlbmd0aDspZz1sKHJlKHcpLDQ1MyksZ2ModC5hLGcuYSwwKSE9LTF8fHZ0KHQuYSxnLmEpLGcuYyYmJG4oYS5jLGcpfWZ1bmN0aW9uIFR2dChlKXt2YXIgdCxuLHIsYSxvLGYsZztmb3IodD0wLG89bmV3IEcoZS5iLmEpO28uYTxvLmMuYy5sZW5ndGg7KXI9bChyZShvKSwxOTQpLHIuYj0wLHIuYz0wO2ZvcihycHQoZSwwKSxWY2UoZSxlLmcpLE1VKGUuYyksSndlKGUuYyksbj0oSnMoKSx1YyksZlAoSXNlKHA2KGZQKElzZShwNihmUChwNihlLmMsbikpLGIxdChuKSkpKSxuKSkpLHA2KGUuYyx1YyksUmNlKGUsZS5nKSxIZ3QoZSwwKSxudnQoZSwwKSxGMnQoZSwxKSxycHQoZSwxKSxWY2UoZSxlLmQpLE1VKGUuYyksZj1uZXcgRyhlLmIuYSk7Zi5hPGYuYy5jLmxlbmd0aDspcj1sKHJlKGYpLDE5NCksdCs9Yi5NYXRoLmFicyhyLmMpO2ZvcihnPW5ldyBHKGUuYi5hKTtnLmE8Zy5jLmMubGVuZ3RoOylyPWwocmUoZyksMTk0KSxyLmI9MCxyLmM9MDtmb3Iobj13ZixmUChJc2UocDYoZlAoSXNlKHA2KGZQKEp3ZShwNihlLmMsbikpKSxiMXQobikpKSksbikpKSxwNihlLmMsdWMpLFJjZShlLGUuZCksSGd0KGUsMSksbnZ0KGUsMSksRjJ0KGUsMCksSndlKGUuYyksYT1uZXcgRyhlLmIuYSk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDE5NCksdCs9Yi5NYXRoLmFicyhyLmMpO3JldHVybiB0fWZ1bmN0aW9uIExNbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGU7aWYoUnQoQnQoUShuLChOdCgpLGI0KSkpKSlmb3IoZz1uZXcgRyhuLmopO2cuYTxnLmMuYy5sZW5ndGg7KWZvcihmPWwocmUoZyksMTIpLEI9a2QoZi5nKSxFPUIsQz0wLEw9RS5sZW5ndGg7QzxMOysrQyl3PUVbQ10sbz13LmQuaT09bixhPW8mJlJ0KEJ0KFEodyxndikpKSxhJiYoVj13LmMsej1sKGNyKGUuYixWKSwxMCksenx8KHo9dlAoViwoUmEoKSxaMSksVi5qLC0xLG51bGwsbnVsbCxWLm8sbChRKHQsUmgpLDg4KSx0KSxydCh6LChmdCgpLHppKSxWKSxraShlLmIsVix6KSx2dCh0LmEseikpLHRlPXcuZCxKPWwoY3IoZS5iLHRlKSwxMCksSnx8KEo9dlAodGUsKFJhKCksWjEpLHRlLmosMSxudWxsLG51bGwsdGUubyxsKFEodCxSaCksODgpLHQpLHJ0KEosKGZ0KCksemkpLHRlKSxraShlLmIsdGUsSiksdnQodC5hLEopKSxyPUFvZSh3KSxwbyhyLGwoanQoei5qLDApLDEyKSksRmEocixsKGp0KEouaiwwKSwxMikpLHhuKGUuYSx3LG5ldyBLcShyLHQsKHFvKCksenUpKSksbChRKHQsKGZ0KCksTHUpKSwyMSkuRmMoKEhvKCksdmYpKSl9ZnVuY3Rpb24gTU1uKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQjtmb3IoYT1uZXcgRyhlLmEuYik7YS5hPGEuYy5jLmxlbmd0aDspZm9yKG49bChyZShhKSwzMCksdz1uZXcgRyhuLmEpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwxMCksdC5qW2cucF09Zyx0LmlbZy5wXT10Lm89PShEMSgpLFkxKT9pYTpncztmb3IoTmwoZS5jKSxmPWUuYS5iLHQuYz09KHhkKCksVDIpJiYoZj1sZihmKSksSWJuKGUuZSx0LGUuYiksYU8odC5wLG51bGwpLG89Zi5LYygpO28uT2IoKTspZm9yKG49bChvLlBiKCksMzApLEU9bi5hLHQubz09KEQxKCksWTEpJiYoRT1sZihFKSksQj1FLktjKCk7Qi5PYigpOylMPWwoQi5QYigpLDEwKSx0LmdbTC5wXT09TCYmb3d0KGUsTCx0KTtmb3IoY01uKGUsdCkscj1mLktjKCk7ci5PYigpOylmb3Iobj1sKHIuUGIoKSwzMCksQj1uZXcgRyhuLmEpO0IuYTxCLmMuYy5sZW5ndGg7KUw9bChyZShCKSwxMCksdC5wW0wucF09dC5wW3QuZ1tMLnBdLnBdLEw9PXQuZ1tMLnBdJiYoQz16ZSh0LmlbdC5qW0wucF0ucF0pLCh0Lm89PShEMSgpLFkxKSYmQz5pYXx8dC5vPT13diYmQzxncykmJih0LnBbTC5wXT16ZSh0LnBbTC5wXSkrQykpO2UuZS54ZygpfWZ1bmN0aW9uIERNbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWO2ZvcihuLlVnKCJMYWJlbCBkdW1teSBzd2l0Y2hpbmciLDEpLHI9bChRKHQsKE50KCksZ1cpKSwyMzIpLHgzbih0KSxhPWxUbih0LHIpLGUuYT1XZShOYSxabywyOCx0LmIuYy5sZW5ndGgsMTUsMSksZz0oeXgoKSxoZShsZShOVCwxKSxpdCwyMzIsMCxbT1QscUwsSVQsaDQsTjYsTzZdKSksQz0wLHo9Zy5sZW5ndGg7Qzx6OysrQylpZihvPWdbQ10sKG89PU42fHxvPT1PNnx8bz09aDQpJiYhbCh2bChhLmEsbyk/YS5iW28uZ106bnVsbCwxNSkuZGMoKSl7UzNuKGUsdCk7YnJlYWt9Zm9yKHc9aGUobGUoTlQsMSksaXQsMjMyLDAsW09ULHFMLElULGg0LE42LE82XSksTD0wLFY9dy5sZW5ndGg7TDxWOysrTClvPXdbTF0sbz09TjZ8fG89PU82fHxvPT1oNHx8bG10KGUsbCh2bChhLmEsbyk/YS5iW28uZ106bnVsbCwxNSkpO2ZvcihmPWhlKGxlKE5ULDEpLGl0LDIzMiwwLFtPVCxxTCxJVCxoNCxONixPNl0pLEU9MCxCPWYubGVuZ3RoO0U8QjsrK0Upbz1mW0VdLChvPT1ONnx8bz09TzZ8fG89PWg0KSYmbG10KGUsbCh2bChhLmEsbyk/YS5iW28uZ106bnVsbCwxNSkpO2UuYT1udWxsLG4uVmcoKX1mdW5jdGlvbiBDdnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7aWYoRT10LCEoRS5iPT1udWxsfHxlLmI9PW51bGwpKXtmb3IoYzYoZSksZUwoZSksYzYoRSksZUwoRSksbj1XZShWcixkaSwyOCxlLmIubGVuZ3RoK0UuYi5sZW5ndGgsMTUsMSksQz0wLHI9MCxmPTA7cjxlLmIubGVuZ3RoJiZmPEUuYi5sZW5ndGg7KWlmKGE9ZS5iW3JdLG89ZS5iW3IrMV0sZz1FLmJbZl0sdz1FLmJbZisxXSxvPGcpcis9MjtlbHNlIGlmKG8+PWcmJmE8PXcpZzw9YSYmbzw9dz8obltDKytdPWEsbltDKytdPW8scis9Mik6Zzw9YT8obltDKytdPWEsbltDKytdPXcsZS5iW3JdPXcrMSxmKz0yKTpvPD13PyhuW0MrK109ZyxuW0MrK109byxyKz0yKToobltDKytdPWcsbltDKytdPXcsZS5iW3JdPXcrMSk7ZWxzZSBpZih3PGEpZis9MjtlbHNlIHRocm93IHVlKG5ldyBBYygiVG9rZW4jaW50ZXJzZWN0UmFuZ2VzKCk6IEludGVybmFsIEVycm9yOiBbIitlLmJbcl0rIiwiK2UuYltyKzFdKyJdICYgWyIrRS5iW2ZdKyIsIitFLmJbZisxXSsiXSIpKTtmb3IoO3I8ZS5iLmxlbmd0aDspbltDKytdPWUuYltyKytdLG5bQysrXT1lLmJbcisrXTtlLmI9V2UoVnIsZGksMjgsQywxNSwxKSxwdShuLDAsZS5iLDAsQyl9fWZ1bmN0aW9uIElNbihlKXt2YXIgdCxuLHIsYSxvLGYsZztmb3IodD1uZXcgYnQsZS5nPW5ldyBidCxlLmQ9bmV3IGJ0LGY9bmV3IHFtKG5ldyBTcihlLmYuYikuYSk7Zi5iOylvPU53KGYpLHZ0KHQsbChsKG8ubWQoKSw0MikuYiw4NikpLFVnKGwoby5sZCgpLDYwMikuQWYoKSk/dnQoZS5kLGwoby5tZCgpLDQyKSk6dnQoZS5nLGwoby5tZCgpLDQyKSk7Zm9yKFZjZShlLGUuZCksVmNlKGUsZS5nKSxlLmM9bmV3IFpwdChlLmIpLFN1bihlLmMsKG0zZSgpLGs4dCkpLFJjZShlLGUuZCksUmNlKGUsZS5nKSxyYSh0LGUuYy5hLmIpLGUuZT1uZXcgbHQoZ3MsZ3MpLGUuYT1uZXcgbHQoaWEsaWEpLHI9bmV3IEcodCk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDg2KSxlLmUuYT1iLk1hdGgubWluKGUuZS5hLG4uZy5jKSxlLmUuYj1iLk1hdGgubWluKGUuZS5iLG4uZy5kKSxlLmEuYT1iLk1hdGgubWF4KGUuYS5hLG4uZy5jK24uZy5iKSxlLmEuYj1iLk1hdGgubWF4KGUuYS5iLG4uZy5kK24uZy5hKTtzM2UoZS5jLG5ldyBWdiksZz0wO2RvIGE9VHZ0KGUpLCsrZzt3aGlsZSgoZzwyfHxhPkFiKSYmZzwxMCk7czNlKGUuYyxuZXcgWTcpLFR2dChlKSx3Z24oZS5jKSxnTW4oZS5mKX1mdW5jdGlvbiBPTW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKO2ZvcihuPWwoUShlLChOdCgpLE1zKSksMTAxKSxmPWUuZixvPWUuZCxnPWYuYStvLmIrby5jLHc9MC1vLmQtZS5jLmIsQz1mLmIrby5kK28uYS1lLmMuYixFPW5ldyBidCxMPW5ldyBidCxhPW5ldyBHKHQpO2EuYTxhLmMuYy5sZW5ndGg7KXtzd2l0Y2gocj1sKHJlKGEpLDEwKSxuLmcpe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOnhDbihyKTticmVhaztjYXNlIDQ6Qj1sKFEocixwMyksOCksej1CP0IuYTowLHIubi5hPWcqemUoR2UoUShyLChmdCgpLGwzKSkpKS16LERWKHIsITAsITEpO2JyZWFrO2Nhc2UgNTpWPWwoUShyLHAzKSw4KSxKPVY/Vi5hOjAsci5uLmE9emUoR2UoUShyLChmdCgpLGwzKSkpKS1KLERWKHIsITAsITEpLGYuYT1iLk1hdGgubWF4KGYuYSxyLm4uYStyLm8uYS8yKX1zd2l0Y2gobChRKHIsKGZ0KCksV2MpKSw2NCkuZyl7Y2FzZSAxOnIubi5iPXcsJG4oRS5jLHIpO2JyZWFrO2Nhc2UgMzpyLm4uYj1DLCRuKEwuYyxyKX19c3dpdGNoKG4uZyl7Y2FzZSAxOmNhc2UgMjpzMXQoRSxlKSxzMXQoTCxlKTticmVhaztjYXNlIDM6YTF0KEUsZSksYTF0KEwsZSl9fWZ1bmN0aW9uIE5NbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEI7c3dpdGNoKGUuay5nKXtjYXNlIDE6aWYocj1sKFEoZSwoZnQoKSx6aSkpLDE4KSxuPWwoUShyLHFMZSksNzUpLG4/UnQoQnQoUShyLFcxKSkpJiYobj1BTihuKSk6bj1uZXcgYmwsRT1sKFEoZSxvMSksMTIpLEUpe2lmKEM9SWMoaGUobGUoRWEsMSksZHQsOCwwLFtFLmkubixFLm4sRS5hXSkpLHQ8PUMuYSlyZXR1cm4gQy5iO0NzKG4sQyxuLmEsbi5hLmEpfWlmKEw9bChRKGUsJGYpLDEyKSxMKXtpZihCPUljKGhlKGxlKEVhLDEpLGR0LDgsMCxbTC5pLm4sTC5uLEwuYV0pKSxCLmE8PXQpcmV0dXJuIEIuYjtDcyhuLEIsbi5jLmIsbi5jKX1pZihuLmI+PTIpe2Zvcih3PVJyKG4sMCksZj1sKEJyKHcpLDgpLGc9bChCcih3KSw4KTtnLmE8dCYmdy5iIT13LmQuYzspZj1nLGc9bChCcih3KSw4KTtyZXR1cm4gZi5iKyh0LWYuYSkvKGcuYS1mLmEpKihnLmItZi5iKX1icmVhaztjYXNlIDM6c3dpdGNoKG89bChRKGwoanQoZS5qLDApLDEyKSwoZnQoKSx6aSkpLDEyKSxhPW8uaSxvLmouZyl7Y2FzZSAxOnJldHVybiBhLm4uYjtjYXNlIDM6cmV0dXJuIGEubi5iK2Euby5ifX1yZXR1cm4gRXhlKGUpLmJ9ZnVuY3Rpb24gUE1uKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDLEw7Zm9yKGY9bmV3IEcoZS5kLmIpO2YuYTxmLmMuYy5sZW5ndGg7KWZvcihvPWwocmUoZiksMzApLHc9bmV3IEcoby5hKTt3LmE8dy5jLmMubGVuZ3RoOyl7aWYoZz1sKHJlKHcpLDEwKSxSdChCdChRKGcsKE50KCksUUwpKSkpJiYhWmsoc3AoZykpKXtyPWwoQXBuKHNwKGcpKSwxOCksQz1yLmMuaSxDPT1nJiYoQz1yLmQuaSksTD1uZXcgY2EoQyxtYShKYShnLm4pLEMubikpLGtpKGUuYixnLEwpO2NvbnRpbnVlfWE9bmV3IGVmKGcubi5hLWcuZC5iLGcubi5iLWcuZC5kLGcuby5hK2cuZC5iK2cuZC5jLGcuby5iK2cuZC5kK2cuZC5hKSx0PXRydChhZXQoaWV0KHNldChuZXcgT3dlLGcpLGEpLEo4dCksZS5hKSxlcnQoSnVuKEdodChuZXcgSXdlLGhlKGxlKGRLLDEpLFJuLDYwLDAsW3RdKSksdCksZS5hKSxFPW5ldyBCaWUsa2koZS5lLHQsRSksbj1YZyhuZXcgaHIoZHIoa2EoZykuYS5LYygpLG5ldyBqKSkpLVhnKG5ldyBocihkcihxcyhnKS5hLktjKCksbmV3IGopKSksbjwwP1NOKEUsITAsKEpzKCksdWMpKTpuPjAmJlNOKEUsITAsKEpzKCksdmMpKSxnLms9PShabigpLFVzKSYmY2F0KEUpLGtpKGUuZixnLHQpfX1mdW5jdGlvbiBCTW4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlO2ZvcihhPWwoUShlLChRaSgpLGdNKSksMjcpLEU9SWksQz1JaSxnPWxvLHc9bG8sTWU9UnIoZS5iLDApO01lLmIhPU1lLmQuYzspZmU9bChCcihNZSksNDApLHo9ZmUuZSxWPWZlLmYsRT1iLk1hdGgubWluKEUsei5hLVYuYS8yKSxDPWIuTWF0aC5taW4oQyx6LmItVi5iLzIpLGc9Yi5NYXRoLm1heChnLHouYStWLmEvMiksdz1iLk1hdGgubWF4KHcsei5iK1YuYi8yKTtmb3IoQj1sKGF0KGEsKEhjKCksZ0llKSksMTA3KSxUZT1ScihlLmIsMCk7VGUuYiE9VGUuZC5jOylmZT1sKEJyKFRlKSw0MCksTD1RKGZlLGdNKSxEZShMLDIwNykmJihvPWwoTCwyNyksUWgobyxmZS5lLmEsZmUuZS5iKSxhUChvLGZlKSk7Zm9yKHRlPVJyKGUuYSwwKTt0ZS5iIT10ZS5kLmM7KUo9bChCcih0ZSksNjUpLHI9bChRKEosZ00pLDc0KSxyJiYodD1KLmEsbj1sNihyLCEwLCEwKSxkUCh0LG4pKTskZT1nLUUrKEIuYitCLmMpLGY9dy1DKyhCLmQrQi5hKSxSdChCdChhdChhLChwaSgpLEM0KSkpKXx8R3coYSwkZSxmLCExLCExKSxIaShhLHQ3LCRlLShCLmIrQi5jKSksSGkoYSxlNyxmLShCLmQrQi5hKSl9ZnVuY3Rpb24gU3Z0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEw7Zm9yKHc9ITAsYT0wLEU9ZS5nW3QucF0sQz10Lm8uYitlLm8sbj1lLmRbdC5wXVsyXSxyZihlLmIsRSxwdChsKGp0KGUuYixFKSwxNykuYS0xK24pKSxyZihlLmMsRSx6ZShHZShqdChlLmMsRSkpKS1DK24qZS5mKSwrK0UsRT49ZS5qPygrK2Uuaix2dChlLmIscHQoMSkpLHZ0KGUuYyxDKSk6KHI9ZS5kW3QucF1bMV0scmYoZS5iLEUscHQobChqdChlLmIsRSksMTcpLmErMS1yKSkscmYoZS5jLEUsemUoR2UoanQoZS5jLEUpKSkrQy1yKmUuZikpLChlLnI9PShOZigpLEFCKSYmKGwoanQoZS5iLEUpLDE3KS5hPmUua3x8bChqdChlLmIsRS0xKSwxNykuYT5lLmspfHxlLnI9PUxCJiYoemUoR2UoanQoZS5jLEUpKSk+ZS5ufHx6ZShHZShqdChlLmMsRS0xKSkpPmUubikpJiYodz0hMSksZj1uZXcgaHIoZHIoa2EodCkuYS5LYygpLG5ldyBqKSk7anIoZik7KW89bCh4cihmKSwxOCksZz1vLmMuaSxlLmdbZy5wXT09RSYmKEw9U3Z0KGUsZyksYT1hK2woTC5hLDE3KS5hLHc9dyYmUnQoQnQoTC5iKSkpO3JldHVybiBlLmdbdC5wXT1FLGE9YStlLmRbdC5wXVswXSxuZXcgY2EocHQoYSksKEhuKCksISF3KSl9ZnVuY3Rpb24gX3Z0KGUsdCl7dmFyIG4scixhLG8sZjtuPXplKEdlKFEodCwoTnQoKSx4MCkpKSksbjwyJiZydCh0LHgwLDIpLHI9bChRKHQsUmgpLDg4KSxyPT0oSnMoKSxKMSkmJnJ0KHQsUmgselYodCkpLGE9bChRKHQsVmt0KSwxNyksYS5hPT0wP3J0KHQsKGZ0KCksWHgpLG5ldyBVY2UpOnJ0KHQsKGZ0KCksWHgpLG5ldyBWSChhLmEpKSxvPUJ0KFEodCxaTCkpLG89PW51bGwmJnJ0KHQsWkwsKEhuKCkscWUoUSh0LGJwKSk9PT1xZSgoaXAoKSxpQykpKSksSXMobmV3IGJuKG51bGwsbmV3IGtuKHQuYSwxNikpLG5ldyBxcChlKSksSXMoRGMobmV3IGJuKG51bGwsbmV3IGtuKHQuYiwxNikpLG5ldyB1NSksbmV3IG5fKGUpKSxmPW5ldyB4dnQodCkscnQodCwoZnQoKSwkNiksZikscU8oZS5hKSxYMChlLmEsKHVvKCkseTApLGwoUSh0LGR2KSwxODgpKSxYMChlLmEsdmcsbChRKHQscHYpLDE4OCkpLFgwKGUuYSxidSxsKFEodCxKTCksMTg4KSksWDAoZS5hLF91LGwoUSh0LHlXKSwxODgpKSxYMChlLmEsbWMsQjNuKGwoUSh0LGJwKSwyMjMpKSksdXllKGUuYSxESW4odCkpLHJ0KHQsSzFlLGJQKGUuYSx0KSl9ZnVuY3Rpb24gUmtlKGUsdCxuLHIsYSl7dmFyIG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZTtmb3IoTD1uZXcgUHIsZj1uZXcgYnQsU3B0KGUsbixlLmQuQWcoKSxmLEwpLFNwdChlLHIsZS5kLkJnKCksZixMKSxlLmI9LjIqKEo9RDJ0KERjKG5ldyBibihudWxsLG5ldyBrbihmLDE2KSksbmV3IFR0ZSkpLHRlPUQydChEYyhuZXcgYm4obnVsbCxuZXcga24oZiwxNikpLG5ldyBDdGUpKSxiLk1hdGgubWluKEosdGUpKSxvPTAsZz0wO2c8Zi5jLmxlbmd0aC0xO2crKylmb3Iodz0oU24oZyxmLmMubGVuZ3RoKSxsKGYuY1tnXSwxMTgpKSxWPWcrMTtWPGYuYy5sZW5ndGg7VisrKW8rPURrZShlLHcsKFNuKFYsZi5jLmxlbmd0aCksbChmLmNbVl0sMTE4KSkpO2ZvcihCPWwoUSh0LChmdCgpLFh4KSksMjM0KSxvPj0yJiYoZmU9WDJ0KGYsITAsQiksIWUuZSYmKGUuZT1uZXcgc1hlKGUpKSxxNW4oZS5lLGZlLGYsZS5iKSksT2d0KGYsQikscU1uKGYpLHo9LTEsQz1uZXcgRyhmKTtDLmE8Qy5jLmMubGVuZ3RoOylFPWwocmUoQyksMTE4KSwhKGIuTWF0aC5hYnMoRS5zLUUuYyk8RGQpJiYoej1iLk1hdGgubWF4KHosRS5vKSxlLmQueWcoRSxhLGUuYykpO3JldHVybiBlLmQuYS5hLiRiKCkseisxfWZ1bmN0aW9uIEZNbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGU7Zm9yKEw9bChQcSgoZj1ScihuZXcgSGcodCkuYS5kLDApLG5ldyBDNShmKSkpLDQwKSxWPUw/bChRKEwsKFFpKCksUmRlKSksNDApOm51bGwsYT0xO0wmJlY7KXtmb3Iodz0wLCRlPTAsbj1MLHI9VixnPTA7ZzxhO2crKyluPUlvZShuKSxyPUlvZShyKSwkZSs9emUoR2UoUShuLChRaSgpLEpUKSkpKSx3Kz16ZShHZShRKHIsSlQpKSk7aWYoTWU9emUoR2UoUShWLChRaSgpLEMyKSkpKSxUZT16ZShHZShRKEwsQzIpKSksQj1wOGUoZSxMLFYpLHo9TWUrdytlLmIrQi1UZS0kZSwwPHope2ZvcihFPXQsQz0wO0UmJkUhPXI7KSsrQyxFPWwoUShFLEJXKSw0MCk7aWYoRSlmb3IoZmU9ei9DLEU9dDtFIT1yOyl0ZT16ZShHZShRKEUsQzIpKSkreixydChFLEMyLHRlKSxKPXplKEdlKFEoRSxKVCkpKSt6LHJ0KEUsSlQsSiksei09ZmUsRT1sKFEoRSxCVyksNDApO2Vsc2UgcmV0dXJufSsrYSxMLmQuYj09MD9MPWJrZShuZXcgSGcodCksYSk6TD1sKFBxKChvPVJyKG5ldyBIZyhMKS5hLmQsMCksbmV3IEM1KG8pKSksNDApLFY9TD9sKFEoTCxSZGUpLDQwKTpudWxsfX1mdW5jdGlvbiBSTW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90O3JldHVybiBCPWUuY1t0XSx6PWUuY1tuXSxWPWwoUShCLChmdCgpLFd4KSksMTUpLCEhViYmVi5nYygpIT0wJiZWLkhjKHopfHwoSj1CLmshPShabigpLEFhKSYmei5rIT1BYSx0ZT1sKFEoQix1MyksMTApLGZlPWwoUSh6LHUzKSwxMCksVGU9dGUhPWZlLE1lPSEhdGUmJnRlIT1CfHwhIWZlJiZmZSE9eiwkZT1kdWUoQiwoQ3QoKSxRbikpLFplPWR1ZSh6LERyKSxNZT1NZXwoZHVlKEIsRHIpfHxkdWUoeixRbikpLG90PU1lJiZUZXx8JGV8fFplLEomJm90KXx8Qi5rPT0oWm4oKSxBdSkmJnouaz09UHN8fHouaz09KFpuKCksQXUpJiZCLms9PVBzPyExOihDPWUuY1t0XSxvPWUuY1tuXSxhPXZndChlLmUsQyxvLChDdCgpLGVyKSksdz12Z3QoZS5pLEMsbyxhciksZ0NuKGUuZixDLG8pLEU9STB0KGUuYixDLG8pK2woYS5hLDE3KS5hK2wody5hLDE3KS5hK2UuZi5kLGc9STB0KGUuYixvLEMpK2woYS5iLDE3KS5hK2wody5iLDE3KS5hK2UuZi5iLGUuYSYmKEw9bChRKEMsemkpLDEyKSxmPWwoUShvLHppKSwxMikscj1aZHQoZS5nLEwsZiksRSs9bChyLmEsMTcpLmEsZys9bChyLmIsMTcpLmEpLEU+Zyl9ZnVuY3Rpb24gQXZ0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZTtmb3IoRT1ncyxDPWdzLGc9aWEsdz1pYSxCPW5ldyBHKHQuaSk7Qi5hPEIuYy5jLmxlbmd0aDspTD1sKHJlKEIpLDY4KSxhPWwobChjcihlLmcsTC5hKSw0MikuYiwyNyksUWgoYSxMLmIuYyxMLmIuZCksRT1iLk1hdGgubWluKEUsYS5pKSxDPWIuTWF0aC5taW4oQyxhLmopLGc9Yi5NYXRoLm1heChnLGEuaSthLmcpLHc9Yi5NYXRoLm1heCh3LGEuaithLmYpO2Zvcih6PWwoYXQoZS5jLChZTigpLFFDdCkpLDEwNyksR3coZS5jLGctRSsoei5iK3ouYyksdy1DKyh6LmQrei5hKSwhMCwhMCksSHhlKGUuYywtRSt6LmIsLUMrei5kKSxyPW5ldyBvcihQYXQoZS5jKSk7ci5lIT1yLmkuZ2MoKTspbj1sKGdyKHIpLDc0KSxmPWw2KG4sITAsITApLFY9Y2cobiksdGU9RWIobiksSj1uZXcgbHQoVi5pK1YuZy8yLFYuaitWLmYvMiksbz1uZXcgbHQodGUuaSt0ZS5nLzIsdGUuait0ZS5mLzIpLGZlPW1hKG5ldyBsdChvLmEsby5iKSxKKSxSRShmZSxWLmcsVi5mKSxPaShKLGZlKSxUZT1tYShuZXcgbHQoSi5hLEouYiksbyksUkUoVGUsdGUuZyx0ZS5mKSxPaShvLFRlKSxrTyhmLEouYSxKLmIpLHhPKGYsby5hLG8uYil9ZnVuY3Rpb24gak1uKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFY7Zm9yKHQuVWcoIkxhYmVsIGR1bW15IHJlbW92YWwiLDEpLHI9emUoR2UoUShlLChOdCgpLEg2KSkpKSxhPXplKEdlKFEoZSx5NCkpKSxFPWwoUShlLFJoKSw4OCksdz1uZXcgRyhlLmIpO3cuYTx3LmMuYy5sZW5ndGg7KWZvcihnPWwocmUodyksMzApLEw9bmV3IFVhKGcuYSwwKTtMLmI8TC5kLmdjKCk7KUM9KG1yKEwuYjxMLmQuZ2MoKSksbChMLmQuWGIoTC5jPUwuYisrKSwxMCkpLEMuaz09KFpuKCksY3UpJiYoQj1sKFEoQywoZnQoKSx6aSkpLDE4KSxWPXplKEdlKFEoQix4MikpKSxmPXFlKFEoQyxZeCkpPT09cWUoKEloKCksR2IpKSxuPW5ldyBFbyhDLm4pLGYmJihuLmIrPVYrciksbz1uZXcgbHQoQy5vLmEsQy5vLmIrKEMuaz09Y3UmJiFfayhGaShsKFEoQyxXTCksMTUpLk9jKCksbmV3IFdsKG5ldyB1aikpKS5CZCgoQW0oKSx6eCkpPzA6LVYtcikpLHo9bChRKEMsV0wpLDE1KSxFPT0oSnMoKSx3Zil8fEU9PVExP1VFbih6LG4sYSxvLGYsRSk6WnluKHosbixhLG8pLHJhKEIuYix6KSxDbGUoQyxxZShRKGUsYnApKT09PXFlKChpcCgpLEpCKSkpLHBoKEwpKTt0LlZnKCl9ZnVuY3Rpb24gJE1uKGUpe2UucXx8KGUucT0hMCxlLnA9cWMoZSwwKSxlLmE9cWMoZSwxKSxpcyhlLmEsMCksZS5mPXFjKGUsMiksaXMoZS5mLDEpLFNzKGUuZiwyKSxlLm49cWMoZSwzKSxTcyhlLm4sMyksU3MoZS5uLDQpLFNzKGUubiw1KSxTcyhlLm4sNiksZS5nPXFjKGUsNCksaXMoZS5nLDcpLFNzKGUuZyw4KSxlLmM9cWMoZSw1KSxpcyhlLmMsNyksaXMoZS5jLDgpLGUuaT1xYyhlLDYpLGlzKGUuaSw5KSxpcyhlLmksMTApLGlzKGUuaSwxMSksaXMoZS5pLDEyKSxTcyhlLmksMTMpLGUuaj1xYyhlLDcpLGlzKGUuaiw5KSxlLmQ9cWMoZSw4KSxpcyhlLmQsMyksaXMoZS5kLDQpLGlzKGUuZCw1KSxpcyhlLmQsNiksU3MoZS5kLDcpLFNzKGUuZCw4KSxTcyhlLmQsOSksU3MoZS5kLDEwKSxlLmI9cWMoZSw5KSxTcyhlLmIsMCksU3MoZS5iLDEpLGUuZT1xYyhlLDEwKSxTcyhlLmUsMSksU3MoZS5lLDIpLFNzKGUuZSwzKSxTcyhlLmUsNCksaXMoZS5lLDUpLGlzKGUuZSw2KSxpcyhlLmUsNyksaXMoZS5lLDgpLGlzKGUuZSw5KSxpcyhlLmUsMTApLFNzKGUuZSwxMSksZS5rPXFjKGUsMTEpLFNzKGUuaywwKSxTcyhlLmssMSksZS5vPVRpKGUsMTIpLGUucz1UaShlLDEzKSl9ZnVuY3Rpb24gamtlKGUsdCl7dC5kYygpJiZ0ZyhlLmosITAsITAsITAsITApLFBpKHQsKEN0KCksXzApKSYmdGcoZS5qLCEwLCEwLCEwLCExKSxQaSh0LHlmKSYmdGcoZS5qLCExLCEwLCEwLCEwKSxQaSh0LCRoKSYmdGcoZS5qLCEwLCEwLCExLCEwKSxQaSh0LEhmKSYmdGcoZS5qLCEwLCExLCEwLCEwKSxQaSh0LHpsKSYmdGcoZS5qLCExLCEwLCEwLCExKSxQaSh0LHhmKSYmdGcoZS5qLCExLCEwLCExLCEwKSxQaSh0LHpoKSYmdGcoZS5qLCEwLCExLCExLCEwKSxQaSh0LEEwKSYmdGcoZS5qLCEwLCExLCEwLCExKSxQaSh0LGhsKSYmdGcoZS5qLCEwLCEwLCEwLCEwKSxQaSh0LEp1KSYmdGcoZS5qLCEwLCEwLCEwLCEwKSxQaSh0LGhsKSYmdGcoZS5qLCEwLCEwLCEwLCEwKSxQaSh0LGxsKSYmdGcoZS5qLCEwLCEwLCEwLCEwKSxQaSh0LGZsKSYmdGcoZS5qLCEwLCEwLCEwLCEwKSxQaSh0LHFsKSYmdGcoZS5qLCEwLCEwLCEwLCEwKSxQaSh0LER1KSYmdGcoZS5qLCEwLCEwLCEwLCEwKX1mdW5jdGlvbiBMdnQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTDtpZihlLmEhPXQuamsoKSl0aHJvdyB1ZShuZXcgWW4oeVQrdC54ZSgpK3QzKSk7aWYocj1vMigoRWwoKSxpbyksdCkuSmwoKSxyKXJldHVybiByLmprKCkud2koKS5yaShyLG4pO2lmKGY9bzIoaW8sdCkuTGwoKSxmKXtpZihuPT1udWxsKXJldHVybiBudWxsO2lmKGc9bChuLDE1KSxnLmRjKCkpcmV0dXJuIiI7Zm9yKEw9bmV3IFVwLG89Zy5LYygpO28uT2IoKTspYT1vLlBiKCksWG8oTCxmLmprKCkud2koKS5yaShmLGEpKSxMLmErPSIgIjtyZXR1cm4gR3NlKEwsTC5hLmxlbmd0aC0xKX1pZihDPW8yKGlvLHQpLk1sKCksIUMuZGMoKSl7Zm9yKEU9Qy5LYygpO0UuT2IoKTspaWYodz1sKEUuUGIoKSwxNTYpLHcuZmsobikpdHJ5e2lmKEw9dy5qaygpLndpKCkucmkodyxuKSxMIT1udWxsKXJldHVybiBMfWNhdGNoKEIpe2lmKEI9YnMoQiksIURlKEIsMTAzKSl0aHJvdyB1ZShCKX10aHJvdyB1ZShuZXcgWW4oIkludmFsaWQgdmFsdWU6ICciK24rIicgZm9yIGRhdGF0eXBlIDoiK3QueGUoKSkpfXJldHVybiBsKHQsODQ3KS5vaygpLG49PW51bGw/bnVsbDpEZShuLDE4MCk/IiIrbChuLDE4MCkuYTpiaChuKT09Y0s/Q250KGpNWzBdLGwobiwyMDYpKTp4YyhuKX1mdW5jdGlvbiB6TW4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEM7Zm9yKEU9bmV3IG9zLGc9bmV3IG9zLG89bmV3IEcoZSk7by5hPG8uYy5jLmxlbmd0aDspcj1sKHJlKG8pLDEzMSksci52PTAsci5uPXIuaS5jLmxlbmd0aCxyLnU9ci50LmMubGVuZ3RoLHIubj09MCYmQ3MoRSxyLEUuYy5iLEUuYyksci51PT0wJiZyLnIuYS5nYygpPT0wJiZDcyhnLHIsZy5jLmIsZy5jKTtmb3IoZj0tMTtFLmIhPTA7KWZvcihyPWwoa3VlKEUsMCksMTMxKSxuPW5ldyBHKHIudCk7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDI3NCksQz10LmIsQy52PWIuTWF0aC5tYXgoQy52LHIudisxKSxmPWIuTWF0aC5tYXgoZixDLnYpLC0tQy5uLEMubj09MCYmQ3MoRSxDLEUuYy5iLEUuYyk7aWYoZj4tMSl7Zm9yKGE9UnIoZywwKTthLmIhPWEuZC5jOylyPWwoQnIoYSksMTMxKSxyLnY9Zjtmb3IoO2cuYiE9MDspZm9yKHI9bChrdWUoZywwKSwxMzEpLG49bmV3IEcoci5pKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksMjc0KSx3PXQuYSx3LnIuYS5nYygpPT0wJiYody52PWIuTWF0aC5taW4ody52LHIudi0xKSwtLXcudSx3LnU9PTAmJkNzKGcsdyxnLmMuYixnLmMpKX19ZnVuY3Rpb24gcU1uKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDO2ZvcihFPW5ldyBidCxnPW5ldyBidCxmPW5ldyBHKGUpO2YuYTxmLmMuYy5sZW5ndGg7KWE9bChyZShmKSwxMTgpLEgoYSxhLmYuYy5sZW5ndGgpLHEoYSxhLmsuYy5sZW5ndGgpLGEuZD09MCYmJG4oRS5jLGEpLGEuaT09MCYmYS5lLmI9PTAmJiRuKGcuYyxhKTtmb3Iocj0tMTtFLmMubGVuZ3RoIT0wOylmb3IoYT1sKHQyKEUsMCksMTE4KSxuPW5ldyBHKGEuayk7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDEzMiksQz10LmIsWShDLGIuTWF0aC5tYXgoQy5vLGEubysxKSkscj1iLk1hdGgubWF4KHIsQy5vKSxIKEMsQy5kLTEpLEMuZD09MCYmJG4oRS5jLEMpO2lmKHI+LTEpe2ZvcihvPW5ldyBHKGcpO28uYTxvLmMuYy5sZW5ndGg7KWE9bChyZShvKSwxMTgpLGEubz1yO2Zvcig7Zy5jLmxlbmd0aCE9MDspZm9yKGE9bCh0MihnLDApLDExOCksbj1uZXcgRyhhLmYpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwxMzIpLHc9dC5hLCEody5lLmI+MCkmJihZKHcsYi5NYXRoLm1pbih3Lm8sYS5vLTEpKSxxKHcsdy5pLTEpLHcuaT09MCYmJG4oZy5jLHcpKX19ZnVuY3Rpb24gTXZ0KGUsdCxuLHIsYSl7dmFyIG8sZixnLHc7cmV0dXJuIHc9Z3MsZj0hMSxnPUxrZShlLG1hKG5ldyBsdCh0LmEsdC5iKSxlKSxPaShuZXcgbHQobi5hLG4uYiksYSksbWEobmV3IGx0KHIuYSxyLmIpLG4pKSxvPSEhZyYmIShiLk1hdGguYWJzKGcuYS1lLmEpPD1adyYmYi5NYXRoLmFicyhnLmItZS5iKTw9Wnd8fGIuTWF0aC5hYnMoZy5hLXQuYSk8PVp3JiZiLk1hdGguYWJzKGcuYi10LmIpPD1adyksZz1Ma2UoZSxtYShuZXcgbHQodC5hLHQuYiksZSksbixhKSxnJiYoKGIuTWF0aC5hYnMoZy5hLWUuYSk8PVp3JiZiLk1hdGguYWJzKGcuYi1lLmIpPD1adyk9PShiLk1hdGguYWJzKGcuYS10LmEpPD1adyYmYi5NYXRoLmFicyhnLmItdC5iKTw9WncpfHxvP3c9Yi5NYXRoLm1pbih3LGVBKG1hKGcsbikpKTpmPSEwKSxnPUxrZShlLG1hKG5ldyBsdCh0LmEsdC5iKSxlKSxyLGEpLGcmJihmfHwoYi5NYXRoLmFicyhnLmEtZS5hKTw9WncmJmIuTWF0aC5hYnMoZy5iLWUuYik8PVp3KT09KGIuTWF0aC5hYnMoZy5hLXQuYSk8PVp3JiZiLk1hdGguYWJzKGcuYi10LmIpPD1adyl8fG8pJiYodz1iLk1hdGgubWluKHcsZUEobWEoZyxyKSkpKSx3fWZ1bmN0aW9uIER2dChlKXtzdyhlLG5ldyBYbShVeihudyhadih0dyhldyhuZXcgeDEsTWIpLEEzdCksIk1pbmltaXplcyB0aGUgc3RyZXNzIHdpdGhpbiBhIGxheW91dCB1c2luZyBzdHJlc3MgbWFqb3JpemF0aW9uLiBTdHJlc3MgZXhpc3RzIGlmIHRoZSBldWNsaWRlYW4gZGlzdGFuY2UgYmV0d2VlbiBhIHBhaXIgb2Ygbm9kZXMgZG9lc24ndCBtYXRjaCB0aGVpciBncmFwaCB0aGVvcmV0aWMgZGlzdGFuY2UsIHRoYXQgaXMsIHRoZSBzaG9ydGVzdCBwYXRoIGJldHdlZW4gdGhlIHR3byBub2Rlcy4gVGhlIG1ldGhvZCBhbGxvd3MgdG8gc3BlY2lmeSBpbmRpdmlkdWFsIGVkZ2UgbGVuZ3Rocy4iKSxuZXcgeTEpLFl1KSkpLGd0KGUsTWIsaEwsSXQobEFlKSksZ3QoZSxNYixjRywoSG4oKSwhMCkpLGd0KGUsTWIseDYsSXQoZDh0KSksZ3QoZSxNYixQeCxJdChnOHQpKSxndChlLE1iLE54LEl0KHA4dCkpLGd0KGUsTWIsZlQsSXQoZjh0KSksZ3QoZSxNYixmTCxJdChmQWUpKSxndChlLE1iLGRULEl0KGI4dCkpLGd0KGUsTWIsUEVlLEl0KHVBZSkpLGd0KGUsTWIsRkVlLEl0KG9BZSkpLGd0KGUsTWIsUkVlLEl0KGNBZSkpLGd0KGUsTWIsakVlLEl0KGhBZSkpLGd0KGUsTWIsQkVlLEl0KFRLKSl9ZnVuY3Rpb24gSE1uKGUpe3ZhciB0LG4scixhLG8sZixnLHc7Zm9yKHQ9bnVsbCxyPW5ldyBHKGUpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwyMzkpLHplKEwxKG4uZyxuLmRbMF0pLmEpLG4uYj1udWxsLG4uZSYmbi5lLmdjKCk+MCYmbi5jPT0wJiYoIXQmJih0PW5ldyBidCksJG4odC5jLG4pKTtpZih0KWZvcig7dC5jLmxlbmd0aCE9MDspe2lmKG49bCh0Mih0LDApLDIzOSksbi5iJiZuLmIuYy5sZW5ndGg+MCl7Zm9yKG89KCFuLmImJihuLmI9bmV3IGJ0KSxuZXcgRyhuLmIpKTtvLmE8by5jLmMubGVuZ3RoOylpZihhPWwocmUobyksMjM5KSxYSShMMShhLmcsYS5kWzBdKS5hKT09WEkoTDEobi5nLG4uZFswXSkuYSkpe2lmKGdjKGUsYSwwKT5nYyhlLG4sMCkpcmV0dXJuIG5ldyBjYShhLG4pfWVsc2UgaWYoemUoTDEoYS5nLGEuZFswXSkuYSk+emUoTDEobi5nLG4uZFswXSkuYSkpcmV0dXJuIG5ldyBjYShhLG4pfWZvcihnPSghbi5lJiYobi5lPW5ldyBidCksbi5lKS5LYygpO2cuT2IoKTspZj1sKGcuUGIoKSwyMzkpLHc9KCFmLmImJihmLmI9bmV3IGJ0KSxmLmIpLEV5KDAsdy5jLmxlbmd0aCkseF8ody5jLDAsbiksZi5jPT13LmMubGVuZ3RoJiYkbih0LmMsZil9cmV0dXJuIG51bGx9ZnVuY3Rpb24gVk1uKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZTtmb3IodC5VZygiSW50ZXJhY3RpdmUgY3Jvc3NpbmcgbWluaW1pemF0aW9uIiwxKSxmPTAsbz1uZXcgRyhlLmIpO28uYTxvLmMuYy5sZW5ndGg7KXI9bChyZShvKSwzMCksci5wPWYrKztmb3IoQj1JeGUoZSksdGU9bmV3IG8zZShCLmxlbmd0aCksYXZ0KG5ldyBJbChoZShsZShleHQsMSksUm4sMjMwLDAsW3RlXSkpLEIpLEo9MCxmPTAsYT1uZXcgRyhlLmIpO2EuYTxhLmMuYy5sZW5ndGg7KXtmb3Iocj1sKHJlKGEpLDMwKSxuPTAsTD0wLEM9bmV3IEcoci5hKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3Iodz1sKHJlKEMpLDEwKSx3Lm4uYT4wJiYobis9dy5uLmErdy5vLmEvMiwrK0wpLFY9bmV3IEcody5qKTtWLmE8Vi5jLmMubGVuZ3RoOyl6PWwocmUoViksMTIpLHoucD1KKys7Zm9yKEw+MCYmKG4vPUwpLGZlPVdlKE5hLFpvLDI4LHIuYS5jLmxlbmd0aCwxNSwxKSxnPTAsRT1uZXcgRyhyLmEpO0UuYTxFLmMuYy5sZW5ndGg7KXc9bChyZShFKSwxMCksdy5wPWcrKyxmZVt3LnBdPU5Nbih3LG4pLHcuaz09KFpuKCksQWEpJiZydCh3LChmdCgpLEhMZSksZmVbdy5wXSk7Q24oKSxWcyhyLmEsbmV3IEZZZShmZSkpLGZtdCh0ZSxCLGYsITApLCsrZn10LlZnKCl9ZnVuY3Rpb24gbkwoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7aWYodC5lPT01KXtDdnQoZSx0KTtyZXR1cm59aWYoRT10LCEoRS5iPT1udWxsfHxlLmI9PW51bGwpKXtmb3IoYzYoZSksZUwoZSksYzYoRSksZUwoRSksbj1XZShWcixkaSwyOCxlLmIubGVuZ3RoK0UuYi5sZW5ndGgsMTUsMSksQz0wLHI9MCxmPTA7cjxlLmIubGVuZ3RoJiZmPEUuYi5sZW5ndGg7KWlmKGE9ZS5iW3JdLG89ZS5iW3IrMV0sZz1FLmJbZl0sdz1FLmJbZisxXSxvPGcpbltDKytdPWUuYltyKytdLG5bQysrXT1lLmJbcisrXTtlbHNlIGlmKG8+PWcmJmE8PXcpZzw9YSYmbzw9dz9yKz0yOmc8PWE/KGUuYltyXT13KzEsZis9Mik6bzw9dz8obltDKytdPWEsbltDKytdPWctMSxyKz0yKToobltDKytdPWEsbltDKytdPWctMSxlLmJbcl09dysxLGYrPTIpO2Vsc2UgaWYodzxhKWYrPTI7ZWxzZSB0aHJvdyB1ZShuZXcgQWMoIlRva2VuI3N1YnRyYWN0UmFuZ2VzKCk6IEludGVybmFsIEVycm9yOiBbIitlLmJbcl0rIiwiK2UuYltyKzFdKyJdIC0gWyIrRS5iW2ZdKyIsIitFLmJbZisxXSsiXSIpKTtmb3IoO3I8ZS5iLmxlbmd0aDspbltDKytdPWUuYltyKytdLG5bQysrXT1lLmJbcisrXTtlLmI9V2UoVnIsZGksMjgsQywxNSwxKSxwdShuLDAsZS5iLDAsQyl9fWZ1bmN0aW9uIEl2dChlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWU7Zm9yKGc9bDYodCwhMSwhMSksZmU9UU4oZyksciYmKGZlPUFOKGZlKSksTWU9emUoR2UoYXQodCwoSUEoKSxXMGUpKSkpLHRlPShtcihmZS5iIT0wKSxsKGZlLmEuYS5jLDgpKSxMPWwoZmYoZmUsMSksOCksZmUuYj4yPyhDPW5ldyBidCxyYShDLG5ldyBacChmZSwxLGZlLmIpKSxvPXZ3dChDLE1lK2UuYSksVGU9bmV3IEd1ZShvKSxwYyhUZSx0KSwkbihuLmMsVGUpKTpyP1RlPWwoY3IoZS5iLGNnKHQpKSwyNzIpOlRlPWwoY3IoZS5iLEViKHQpKSwyNzIpLHc9Y2codCksciYmKHc9RWIodCkpLGY9SDluKHRlLHcpLEU9TWUrZS5hLGYuYT8oRSs9Yi5NYXRoLmFicyh0ZS5iLUwuYiksSj1uZXcgbHQoTC5hLChMLmIrdGUuYikvMikpOihFKz1iLk1hdGguYWJzKHRlLmEtTC5hKSxKPW5ldyBsdCgoTC5hK3RlLmEpLzIsTC5iKSkscj9raShlLmQsdCxuZXcgbnhlKFRlLGYsSixFKSk6a2koZS5jLHQsbmV3IG54ZShUZSxmLEosRSkpLGtpKGUuYix0LFRlKSxWPSghdC5uJiYodC5uPW5ldyBudChlYyx0LDEsNykpLHQubiksej1uZXcgb3IoVik7ei5lIT16LmkuZ2MoKTspQj1sKGdyKHopLDEzNSksYT11UChlLEIsITAsMCwwKSwkbihuLmMsYSl9ZnVuY3Rpb24gVU1uKGUpe3ZhciB0LG4scixhLG8sZixnO2lmKCFlLkEuZGMoKSl7aWYoZS5BLkhjKChtaCgpLGlGKSkmJihsKFFvKGUuYiwoQ3QoKSxRbikpLDEyNykuaz0hMCxsKFFvKGUuYixEciksMTI3KS5rPSEwLHQ9ZS5xIT0oUmEoKSxUZykmJmUucSE9TXUsX3oobChRbyhlLmIsYXIpLDEyNyksdCksX3oobChRbyhlLmIsZXIpLDEyNyksdCksX3ooZS5nLHQpLGUuQS5IYyhDdikmJihsKFFvKGUuYixRbiksMTI3KS5qPSEwLGwoUW8oZS5iLERyKSwxMjcpLmo9ITAsbChRbyhlLmIsYXIpLDEyNykuaz0hMCxsKFFvKGUuYixlciksMTI3KS5rPSEwLGUuZy5rPSEwKSksZS5BLkhjKHJGKSlmb3IoZS5hLmo9ITAsZS5hLms9ITAsZS5nLmo9ITAsZS5nLms9ITAsZz1lLkIuSGMoKFpsKCksRk0pKSxhPWV1ZSgpLG89MCxmPWEubGVuZ3RoO288ZjsrK28pcj1hW29dLG49bChRbyhlLmksciksMzE0KSxuJiYoJDhlKHIpPyhuLmo9ITAsbi5rPSEwKToobi5qPSFnLG4uaz0hZykpO2UuQS5IYyhBNCkmJmUuQi5IYygoWmwoKSxhRikpJiYoZS5nLmo9ITAsZS5nLmo9ITAsZS5hLmp8fChlLmEuaj0hMCxlLmEuaz0hMCxlLmEuZT0hMCkpfX1mdW5jdGlvbiBHTW4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlO2ZvcihyPW5ldyBHKGUuZS5iKTtyLmE8ci5jLmMubGVuZ3RoOylmb3Iobj1sKHJlKHIpLDMwKSxvPW5ldyBHKG4uYSk7by5hPG8uYy5jLmxlbmd0aDspaWYoYT1sKHJlKG8pLDEwKSx6PWUuaVthLnBdLEU9ei5hLmUsdz16LmQuZSxhLm4uYj1FLGZlPXctRS1hLm8uYix0PXlsZShhKSxCPShCeSgpLChhLnE/YS5xOihDbigpLENuKCksbWcpKS5fYigoTnQoKSxnMykpP0w9bChRKGEsZzMpLDIwMyk6TD1sKFEoZW8oYSksZU0pLDIwMyksTCksdCYmKEI9PUc2fHxCPT1VNikmJihhLm8uYis9ZmUpLHQmJihCPT1iZGV8fEI9PUc2fHxCPT1VNikpe2ZvcihKPW5ldyBHKGEuaik7Si5hPEouYy5jLmxlbmd0aDspVj1sKHJlKEopLDEyKSwoQ3QoKSxKdSkuSGMoVi5qKSYmKEM9bChjcihlLmssViksMTI1KSxWLm4uYj1DLmUtRSk7Zm9yKGc9bmV3IEcoYS5iKTtnLmE8Zy5jLmMubGVuZ3RoOylmPWwocmUoZyksNzIpLHRlPWwoUShhLGQzKSwyMSksdGUuSGMoKHF5KCkscWYpKT9mLm4uYis9ZmU6dGUuSGMoRWcpJiYoZi5uLmIrPWZlLzIpOyhCPT1HNnx8Qj09VTYpJiZPYyhhLChDdCgpLERyKSkuSmMobmV3IFpZZShmZSkpfX1mdW5jdGlvbiBLTW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCO2ZvcihFPW5ldyBidCx3PW5ldyBHKHQuYSk7dy5hPHcuYy5jLmxlbmd0aDspZm9yKGY9bChyZSh3KSwxMCksQj1PYyhmLChDdCgpLGFyKSkuS2MoKTtCLk9iKCk7KWZvcihMPWwoQi5QYigpLDEyKSxhPW5ldyBHKEwuZyk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDE4KSwhKCFEbyhyKSYmci5jLmkuYz09ci5kLmkuY3x8RG8ocil8fHIuZC5pLmMhPW4pJiYkbihFLmMscik7Zm9yKGc9bGYobi5hKS5LYygpO2cuT2IoKTspZm9yKGY9bChnLlBiKCksMTApLEI9T2MoZiwoQ3QoKSxlcikpLktjKCk7Qi5PYigpOylmb3IoTD1sKEIuUGIoKSwxMiksYT1uZXcgRyhMLmUpO2EuYTxhLmMuYy5sZW5ndGg7KWlmKHI9bChyZShhKSwxOCksISghRG8ocikmJnIuYy5pLmM9PXIuZC5pLmN8fERvKHIpfHxyLmMuaS5jIT10KSYmRS5jLmxlbmd0aCE9MCl7Zm9yKEM9bmV3IFVhKEUsRS5jLmxlbmd0aCksbz0obXIoQy5iPjApLGwoQy5hLlhiKEMuYz0tLUMuYiksMTgpKTtvIT1yJiZDLmI+MDspZS5hW28ucF09ITAsZS5hW3IucF09ITAsbz0obXIoQy5iPjApLGwoQy5hLlhiKEMuYz0tLUMuYiksMTgpKTtDLmI+MCYmcGgoQyl9fWZ1bmN0aW9uIE92dChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIsejtpZighZS5iKXJldHVybiExO2ZvcihmPW51bGwsQj1udWxsLHc9bmV3IEJvZShudWxsLG51bGwpLGE9MSx3LmFbMV09ZS5iLEw9dztMLmFbYV07KUU9YSxnPUIsQj1MLEw9TC5hW2FdLHI9ZS5hLk5lKHQsTC5kKSxhPXI8MD8wOjEscj09MCYmKCFuLmN8fEpjKEwuZSxuLmQpKSYmKGY9TCksIShMJiZMLmIpJiYhb3koTC5hW2FdKSYmKG95KEwuYVsxLWFdKT9CPUIuYVtFXT1FVihMLGEpOm95KEwuYVsxLWFdKXx8KHo9Qi5hWzEtRV0seiYmKCFveSh6LmFbMS1FXSkmJiFveSh6LmFbRV0pPyhCLmI9ITEsei5iPSEwLEwuYj0hMCk6KG89Zy5hWzFdPT1CPzE6MCxveSh6LmFbRV0pP2cuYVtvXT11Y3QoQixFKTpveSh6LmFbMS1FXSkmJihnLmFbb109RVYoQixFKSksTC5iPWcuYVtvXS5iPSEwLGcuYVtvXS5hWzBdLmI9ITEsZy5hW29dLmFbMV0uYj0hMSkpKSk7cmV0dXJuIGYmJihuLmI9ITAsbi5kPWYuZSxMIT1mJiYoQz1uZXcgQm9lKEwuZCxMLmUpLFd4bihlLHcsZixDKSxCPT1mJiYoQj1DKSksQi5hW0IuYVsxXT09TD8xOjBdPUwuYVtMLmFbMF0/MDoxXSwtLWUuYyksZS5iPXcuYVsxXSxlLmImJihlLmIuYj0hMSksbi5ifWZ1bmN0aW9uIFdNbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKGE9bmV3IEcoZS5hLmEuYik7YS5hPGEuYy5jLmxlbmd0aDspZm9yKHI9bChyZShhKSw2MCksdz1yLmMuS2MoKTt3Lk9iKCk7KWc9bCh3LlBiKCksNjApLHIuYSE9Zy5hJiYoVWcoZS5hLmQpP0w9ZS5hLmcuZmYocixnKTpMPWUuYS5nLmdmKHIsZyksbz1yLmIuYStyLmQuYitMLWcuYi5hLG89Yi5NYXRoLmNlaWwobyksbz1iLk1hdGgubWF4KDAsbykscTZlKHIsZyk/KGY9aHcobmV3IFNtLGUuZCksRT11YShiLk1hdGguY2VpbChnLmIuYS1yLmIuYSkpLHQ9RS0oZy5iLmEtci5iLmEpLEM9aXgocikuYSxuPXIsQ3x8KEM9aXgoZykuYSx0PS10LG49ZyksQyYmKG4uYi5hLT10LEMubi5hLT10KSxwMChzMChpMChhMChyMChuZXcgX2YsYi5NYXRoLm1heCgwLEUpKSwxKSxmKSxlLmNbci5hLmRdKSkscDAoczAoaTAoYTAocjAobmV3IF9mLGIuTWF0aC5tYXgoMCwtRSkpLDEpLGYpLGUuY1tnLmEuZF0pKSk6KEI9MSwoRGUoci5nLDE1NCkmJkRlKGcuZywxMCl8fERlKGcuZywxNTQpJiZEZShyLmcsMTApKSYmKEI9MikscDAoczAoaTAoYTAocjAobmV3IF9mLHVhKG8pKSxCKSxlLmNbci5hLmRdKSxlLmNbZy5hLmRdKSkpKX1mdW5jdGlvbiBOdnQoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCO2lmKG4pZm9yKHI9LTEsQz1uZXcgVWEodCwwKTtDLmI8Qy5kLmdjKCk7KXtpZihnPShtcihDLmI8Qy5kLmdjKCkpLGwoQy5kLlhiKEMuYz1DLmIrKyksMTApKSxMPWUuY1tnLmMucF1bZy5wXS5hLEw9PW51bGwpe2ZvcihmPXIrMSxvPW5ldyBVYSh0LEMuYik7by5iPG8uZC5nYygpOylpZihCPXlobihlLChtcihvLmI8by5kLmdjKCkpLGwoby5kLlhiKG8uYz1vLmIrKyksMTApKSkuYSxCIT1udWxsKXtmPShucihCKSxCKTticmVha31MPShyK2YpLzIsZS5jW2cuYy5wXVtnLnBdLmE9TCxlLmNbZy5jLnBdW2cucF0uZD0obnIoTCksTCksZS5jW2cuYy5wXVtnLnBdLmI9MX1yPShucihMKSxMKX1lbHNle2ZvcihhPTAsRT1uZXcgRyh0KTtFLmE8RS5jLmMubGVuZ3RoOylnPWwocmUoRSksMTApLGUuY1tnLmMucF1bZy5wXS5hIT1udWxsJiYoYT1iLk1hdGgubWF4KGEsemUoZS5jW2cuYy5wXVtnLnBdLmEpKSk7Zm9yKGErPTIsdz1uZXcgRyh0KTt3LmE8dy5jLmMubGVuZ3RoOylnPWwocmUodyksMTApLGUuY1tnLmMucF1bZy5wXS5hPT1udWxsJiYoTD1KbChlLmksMjQpKk1QKmEtMSxlLmNbZy5jLnBdW2cucF0uYT1MLGUuY1tnLmMucF1bZy5wXS5kPUwsZS5jW2cuYy5wXVtnLnBdLmI9MSl9fWZ1bmN0aW9uIFlNbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMO2ZvcighbiYmKG49aXluKHQucS5nZXRUaW1lem9uZU9mZnNldCgpKSksYT0odC5xLmdldFRpbWV6b25lT2Zmc2V0KCktbi5hKSo2ZTQsZz1uZXcgS3llKGJvKFpjKHQucS5nZXRUaW1lKCkpLGEpKSx3PWcsZy5xLmdldFRpbWV6b25lT2Zmc2V0KCkhPXQucS5nZXRUaW1lem9uZU9mZnNldCgpJiYoYT4wP2EtPTg2NGU1OmErPTg2NGU1LHc9bmV3IEt5ZShibyhaYyh0LnEuZ2V0VGltZSgpKSxhKSkpLEM9bmV3IFM1LEU9ZS5hLmxlbmd0aCxvPTA7bzxFOylpZihyPWNvKGUuYSxvKSxyPj05NyYmcjw9MTIyfHxyPj02NSYmcjw9OTApe2ZvcihmPW8rMTtmPEUmJmNvKGUuYSxmKT09cjsrK2YpO1dJbihDLHIsZi1vLGcsdyxuKSxvPWZ9ZWxzZSBpZihyPT0zOSl7aWYoKytvLG88RSYmY28oZS5hLG8pPT0zOSl7Qy5hKz0iJyIsKytvO2NvbnRpbnVlfWZvcihMPSExOyFMOyl7Zm9yKGY9bztmPEUmJmNvKGUuYSxmKSE9Mzk7KSsrZjtpZihmPj1FKXRocm93IHVlKG5ldyBZbigiTWlzc2luZyB0cmFpbGluZyAnIikpO2YrMTxFJiZjbyhlLmEsZisxKT09Mzk/KytmOkw9ITAsaGkoQyx0ZihlLmEsbyxmKSksbz1mKzF9fWVsc2UgQy5hKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpLCsrbztyZXR1cm4gQy5hfWZ1bmN0aW9uIFhNbigpe3dpKEQ0LG5ldyBvcmUpLHdpKG1pLG5ldyBocmUpLHdpKFZmLG5ldyBncmUpLHdpKGwxLG5ldyBVMCksd2kodHBlLG5ldyB6Uyksd2koVFksbmV3IFQxKSx3aSh3cCxuZXcgQzEpLHdpKFJNLG5ldyBwcmUpLHdpKHVGLG5ldyBBJCksd2koWWdlLG5ldyBMJCksd2koWGIsbmV3IE0kKSx3aShVZixuZXcgRCQpLHdpKHUxLG5ldyBJJCksd2koazMsbmV3IE8kKSx3aShJNCxuZXcgVjApLHdpKGRsLG5ldyBubCksd2koTTQsbmV3IHNyZSksd2koWWMsbmV3IGFyZSksd2koV28sbmV3IHJsKSx3aShadSxuZXcgQlMpLHdpKE5zLG5ldyBOJCksd2kobGUoQWwsMSksbmV3IFAkKSx3aShqeCxuZXcgZzgpLHdpKFBMLG5ldyBjcmUpLHdpKGNLLG5ldyBhayksd2kobkJlLG5ldyB1cmUpLHdpKHRhLG5ldyBCJCksd2kobVBlLG5ldyBscmUpLHdpKHlQZSxuZXcgRlMpLHdpKEhQZSxuZXcgRiQpLHdpKENZLG5ldyBNSSksd2koX1QsbmV3IFJTKSx3aShybyxuZXcgZnJlKSx3aShxU2UsbmV3IGRyZSksd2kocjMsbmV3IERJKSx3aShIU2UsbmV3IGpTKSx3aShqUGUsbmV3IEUxKSx3aShyQmUsbmV3IG9rKSx3aShpMyxuZXcgY2spLHdpKHp0LG5ldyBJSSksd2kod1BlLG5ldyB4bSksd2koaUJlLG5ldyAkUyl9ZnVuY3Rpb24gUHZ0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDO2lmKGU9PW51bGwpcmV0dXJuIHVsO2lmKHc9dC5hLnpjKGUsdCksdyE9bnVsbClyZXR1cm4iWy4uLl0iO2ZvcihuPW5ldyBIbShDbywiWyIsIl0iKSxhPWUsbz0wLGY9YS5sZW5ndGg7bzxmOysrbylyPWFbb10sciE9bnVsbCYmYmgocikuaSY0P0FycmF5LmlzQXJyYXkocikmJihDPWdOKHIpLCEoQz49MTQmJkM8PTE2KSk/dC5hLl9iKHIpPyhuLmE/aGkobi5hLG4uYik6bi5hPW5ldyBUaChuLmQpLE5fKG4uYSwiWy4uLl0iKSk6KGc9am0ociksRT1uZXcgVV8odCksSmcobixQdnQoZyxFKSkpOkRlKHIsMTgzKT9KZyhuLFNrbihsKHIsMTgzKSkpOkRlKHIsMTk1KT9KZyhuLGh4bihsKHIsMTk1KSkpOkRlKHIsMjAxKT9KZyhuLHg5bihsKHIsMjAxKSkpOkRlKHIsMjExMSk/SmcobixmeG4obChyLDIxMTEpKSk6RGUociw1Myk/SmcobixDa24obChyLDUzKSkpOkRlKHIsMzc2KT9KZyhuLEhrbihsKHIsMzc2KSkpOkRlKHIsODQ2KT9KZyhuLFRrbihsKHIsODQ2KSkpOkRlKHIsMTA5KSYmSmcobixFa24obChyLDEwOSkpKTpKZyhuLHI9PW51bGw/dWw6eGMocikpO3JldHVybiBuLmE/bi5lLmxlbmd0aD09MD9uLmEuYTpuLmEuYSsoIiIrbi5lKTpuLmN9ZnVuY3Rpb24gSkUoZSx0KXt2YXIgbixyLGEsbztvPWUuRix0PT1udWxsPyhlLkY9bnVsbCxDRShlLG51bGwpKTooZS5GPShucih0KSx0KSxyPXBkKHQsY2woNjApKSxyIT0tMT8oYT0oR2EoMCxyLHQubGVuZ3RoKSx0LnN1YnN0cigwLHIpKSxwZCh0LGNsKDQ2KSk9PS0xJiYhdm4oYSxDeCkmJiF2bihhLFNMKSYmIXZuKGEsR0cpJiYhdm4oYSxfTCkmJiF2bihhLEFMKSYmIXZuKGEsTEwpJiYhdm4oYSxNTCkmJiF2bihhLERMKSYmKGE9cDV0KSxuPVJxKHQsY2woNjIpKSxuIT0tMSYmKGErPSIiKyhYbihuKzEsdC5sZW5ndGgrMSksdC5zdWJzdHIobisxKSkpLENFKGUsYSkpOihhPXQscGQodCxjbCg0NikpPT0tMSYmKHI9cGQodCxjbCg5MSkpLHIhPS0xJiYoYT0oR2EoMCxyLHQubGVuZ3RoKSx0LnN1YnN0cigwLHIpKSksIXZuKGEsQ3gpJiYhdm4oYSxTTCkmJiF2bihhLEdHKSYmIXZuKGEsX0wpJiYhdm4oYSxBTCkmJiF2bihhLExMKSYmIXZuKGEsTUwpJiYhdm4oYSxETCk/KGE9cDV0LHIhPS0xJiYoYSs9IiIrKFhuKHIsdC5sZW5ndGgrMSksdC5zdWJzdHIocikpKSk6YT10KSxDRShlLGEpLGE9PXQmJihlLkY9ZS5EKSkpLGUuRGImNCYmIShlLkRiJjEpJiZOaShlLG5ldyBfYShlLDEsNSxvLHQpKX1mdW5jdGlvbiBCdnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTDtpZih3PXQubGVuZ3RoLTEsZz0oWG4odyx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KHcpKSxnPT05Myl7aWYoZj1wZCh0LGNsKDkxKSksZj49MClyZXR1cm4gYT1aNG4oZSwoR2EoMSxmLHQubGVuZ3RoKSx0LnN1YnN0cigxLGYtMSkpKSxDPShHYShmKzEsdyx0Lmxlbmd0aCksdC5zdWJzdHIoZisxLHctKGYrMSkpKSxDSW4oZSxDLGEpfWVsc2V7aWYobj0tMSxaU2U9PW51bGwmJihaU2U9bmV3IFJlZ0V4cCgiXFxkIikpLFpTZS50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZykpJiYobj1oNGUodCxjbCg0Niksdy0xKSxuPj0wKSl7cj1sKE1vZShlLFRodChlLChHYSgxLG4sdC5sZW5ndGgpLHQuc3Vic3RyKDEsbi0xKSkpLCExKSw2MSksRT0wO3RyeXtFPU9oKChYbihuKzEsdC5sZW5ndGgrMSksdC5zdWJzdHIobisxKSksbG8sSWkpfWNhdGNoKEIpe3Rocm93IEI9YnMoQiksRGUoQiwxMzApPyhvPUIsdWUobmV3IG5WKG8pKSk6dWUoQil9aWYoRTxyLmdjKCkpcmV0dXJuIEw9ci5YYihFKSxEZShMLDc2KSYmKEw9bChMLDc2KS5tZCgpKSxsKEwsNTgpfWlmKG48MClyZXR1cm4gbChNb2UoZSxUaHQoZSwoWG4oMSx0Lmxlbmd0aCsxKSx0LnN1YnN0cigxKSkpLCExKSw1OCl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gUU1uKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSjtmb3IodC5VZygiTGFiZWwgZHVtbXkgaW5zZXJ0aW9ucyIsMSksTD1uZXcgYnQsZj16ZShHZShRKGUsKE50KCksSDYpKSkpLEU9emUoR2UoUShlLHk0KSkpLEM9bChRKGUsUmgpLDg4KSx6PW5ldyBHKGUuYSk7ei5hPHouYy5jLmxlbmd0aDspZm9yKEI9bChyZSh6KSwxMCksbz1uZXcgaHIoZHIocXMoQikuYS5LYygpLG5ldyBqKSk7anIobyk7KWlmKGE9bCh4cihvKSwxOCksYS5jLmkhPWEuZC5pJiZac2UoYS5iLEg4dCkpe2ZvcihKPXZ3bihhKSxWPWVnKGEuYi5jLmxlbmd0aCksbj1BVG4oZSxhLEosViksJG4oTC5jLG4pLHI9bi5vLGc9bmV3IFVhKGEuYiwwKTtnLmI8Zy5kLmdjKCk7KXc9KG1yKGcuYjxnLmQuZ2MoKSksbChnLmQuWGIoZy5jPWcuYisrKSw3MikpLHFlKFEodyxqZCkpPT09cWUoKEYxKCksbkMpKSYmKEM9PShKcygpLHdmKXx8Qz09UTE/KHIuYSs9dy5vLmErRSxyLmI9Yi5NYXRoLm1heChyLmIsdy5vLmIpKTooci5hPWIuTWF0aC5tYXgoci5hLHcuby5hKSxyLmIrPXcuby5iK0UpLCRuKFYuYyx3KSxwaChnKSk7Qz09KEpzKCksd2YpfHxDPT1RMT8oci5hLT1FLHIuYis9ZitKKTpyLmIrPWYtRStKfXJhKGUuYSxMKSx0LlZnKCl9ZnVuY3Rpb24gSk1uKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFY7aWYoZS5jPWUuZSxWPUJ0KFEodCwoTnQoKSxVa3QpKSksej1WPT1udWxsfHwobnIoViksViksbz1sKFEodCwoZnQoKSxMdSkpLDIxKS5IYygoSG8oKSx2ZikpLGE9bChRKHQsTXMpLDEwMSksbj0hKGE9PShSYSgpLFR2KXx8YT09VGd8fGE9PU11KSx6JiYobnx8IW8pKXtmb3IoTD1uZXcgRyh0LmEpO0wuYTxMLmMuYy5sZW5ndGg7KUU9bChyZShMKSwxMCksRS5wPTA7Zm9yKEI9bmV3IGJ0LEM9bmV3IEcodC5hKTtDLmE8Qy5jLmMubGVuZ3RoOylpZihFPWwocmUoQyksMTApLHI9d210KGUsRSxudWxsKSxyKXtmb3Iodz1uZXcgbzdlLHBjKHcsdCkscnQodyxwcCxsKHIuYiwyMSkpLE81ZSh3LmQsdC5kKSxydCh3LHFULG51bGwpLGc9bChyLmEsMTUpLktjKCk7Zy5PYigpOylmPWwoZy5QYigpLDEwKSx2dCh3LmEsZiksZi5hPXc7Qi5GYyh3KX1vJiYocWUoUSh0LGc0KSk9PT1xZSgoS20oKSxvMWUpKT9lLmM9ZS5iOnFlKFEodCxnNCkpPT09cWUoYzFlKT9lLmM9ZS5kOmUuYz1lLmEpfWVsc2UgQj1uZXcgSWwoaGUobGUoTjh0LDEpLE0zdCwzNiwwLFt0XSkpO3JldHVybiBxZShRKHQsZzQpKSE9PXFlKChLbSgpLGM0KSkmJihDbigpLEIuamQobmV3IG9qKSksQn1mdW5jdGlvbiBaRShlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEU7aWYoRT1lLmMsIXQmJih0PUxQZSksZS5jPXQsZS5EYiY0JiYhKGUuRGImMSkmJih3PW5ldyBfYShlLDEsMixFLGUuYyksbj9uLm5qKHcpOm49dyksRSE9dCl7aWYoRGUoZS5DYiwyOTIpKWUuRGI+PjE2PT0tMTA/bj1sKGUuQ2IsMjkyKS5Zayh0LG4pOmUuRGI+PjE2PT0tMTUmJighdCYmKHQ9KFRuKCksdGQpKSwhRSYmKEU9KFRuKCksdGQpKSxlLkNiLlloKCkmJih3PW5ldyBaZyhlLkNiLDEsMTMsRSx0LGYyKFhsKGwoZS5DYiw2MikpLGUpLCExKSxuP24ubmoodyk6bj13KSk7ZWxzZSBpZihEZShlLkNiLDkwKSllLkRiPj4xNj09LTIzJiYoRGUodCw5MCl8fCh0PShUbigpLEtmKSksRGUoRSw5MCl8fChFPShUbigpLEtmKSksZS5DYi5ZaCgpJiYodz1uZXcgWmcoZS5DYiwxLDEwLEUsdCxmMihkdShsKGUuQ2IsMjkpKSxlKSwhMSksbj9uLm5qKHcpOm49dykpO2Vsc2UgaWYoRGUoZS5DYiw0NTcpKWZvcihnPWwoZS5DYiw4NTApLGY9KCFnLmImJihnLmI9bmV3IFB6KG5ldyBWaWUpKSxnLmIpLG89KHI9bmV3IHFtKG5ldyBTcihmLmEpLmEpLG5ldyBCeihyKSk7by5hLmI7KWE9bChOdyhvLmEpLmxkKCksODkpLG49WkUoYSxTVShhLGcpLG4pfXJldHVybiBufWZ1bmN0aW9uIFpNbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKGY9UnQoQnQoYXQoZSwoTnQoKSxiNCkpKSksQj1sKGF0KGUsdjQpLDIxKSx3PSExLEU9ITEsTD1uZXcgb3IoKCFlLmMmJihlLmM9bmV3IG50KEhsLGUsOSw5KSksZS5jKSk7TC5lIT1MLmkuZ2MoKSYmKCF3fHwhRSk7KXtmb3Iobz1sKGdyKEwpLDEyMyksZz0wLGE9cmcoTGgoaGUobGUoRmgsMSksUm4sMjAsMCxbKCFvLmQmJihvLmQ9bmV3IExuKGpzLG8sOCw1KSksby5kKSwoIW8uZSYmKG8uZT1uZXcgTG4oanMsbyw3LDQpKSxvLmUpXSkpKTtqcihhKSYmKHI9bCh4cihhKSw3NCksQz1mJiZxdyhyKSYmUnQoQnQoYXQocixndikpKSxuPWd2dCgoIXIuYiYmKHIuYj1uZXcgTG4oX3Isciw0LDcpKSxyLmIpLG8pP2U9PWRzKGJjKGwoT2UoKCFyLmMmJihyLmM9bmV3IExuKF9yLHIsNSw4KSksci5jKSwwKSw4NCkpKTplPT1kcyhiYyhsKE9lKCghci5iJiYoci5iPW5ldyBMbihfcixyLDQsNykpLHIuYiksMCksODQpKSksISgoQ3x8bikmJigrK2csZz4xKSkpOyk7KGc+MHx8Qi5IYygoUmwoKSx2cCkpJiYoIW8ubiYmKG8ubj1uZXcgbnQoZWMsbywxLDcpKSxvLm4pLmk+MCkmJih3PSEwKSxnPjEmJihFPSEwKX13JiZ0LkZjKChIbygpLHZmKSksRSYmdC5GYygoSG8oKSxVTCkpfWZ1bmN0aW9uIEZ2dChlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEI7aWYoQj1sKGF0KGUsKHBpKCksa3YpKSwyMSksQi5kYygpKXJldHVybiBudWxsO2lmKGc9MCxmPTAsQi5IYygobWgoKSxpRikpKXtmb3IoQz1sKGF0KGUsX00pLDEwMSkscj0yLG49MixhPTIsbz0yLHQ9ZHMoZSk/bChhdChkcyhlKSx4diksODgpOmwoYXQoZSx4diksODgpLEU9bmV3IG9yKCghZS5jJiYoZS5jPW5ldyBudChIbCxlLDksOSkpLGUuYykpO0UuZSE9RS5pLmdjKCk7KWlmKHc9bChncihFKSwxMjMpLEw9bChhdCh3LHM3KSw2NCksTD09KEN0KCksUGMpJiYoTD1Fa2Uodyx0KSxIaSh3LHM3LEwpKSxDPT0oUmEoKSxNdSkpc3dpdGNoKEwuZyl7Y2FzZSAxOnI9Yi5NYXRoLm1heChyLHcuaSt3LmcpO2JyZWFrO2Nhc2UgMjpuPWIuTWF0aC5tYXgobix3Lmordy5mKTticmVhaztjYXNlIDM6YT1iLk1hdGgubWF4KGEsdy5pK3cuZyk7YnJlYWs7Y2FzZSA0Om89Yi5NYXRoLm1heChvLHcuait3LmYpfWVsc2Ugc3dpdGNoKEwuZyl7Y2FzZSAxOnIrPXcuZysyO2JyZWFrO2Nhc2UgMjpuKz13LmYrMjticmVhaztjYXNlIDM6YSs9dy5nKzI7YnJlYWs7Y2FzZSA0Om8rPXcuZisyfWc9Yi5NYXRoLm1heChyLGEpLGY9Yi5NYXRoLm1heChuLG8pfXJldHVybiBHdyhlLGcsZiwhMCwhMCl9ZnVuY3Rpb24gU2xlKGUsdCxuLHIsYSl7dmFyIG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZTtmb3IoVGU9bCh5YyhsVihGaShuZXcgYm4obnVsbCxuZXcga24odC5kLDE2KSksbmV3IENZZShuKSksbmV3IFNZZShuKSksUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsWyhGbCgpLEVjKV0pKSksMTUpLEw9SWksQz1sbyx3PW5ldyBHKHQuYi5qKTt3LmE8dy5jLmMubGVuZ3RoOylnPWwocmUodyksMTIpLGcuaj09biYmKEw9Yi5NYXRoLm1pbihMLGcucCksQz1iLk1hdGgubWF4KEMsZy5wKSk7aWYoTD09SWkpZm9yKGY9MDtmPFRlLmdjKCk7ZisrKUI2ZShsKFRlLlhiKGYpLDEwNSksbixmKTtlbHNlIGZvcihNZT1XZShWcixkaSwyOCxhLmxlbmd0aCwxNSwxKSxZZG4oTWUsTWUubGVuZ3RoKSxmZT1UZS5LYygpO2ZlLk9iKCk7KXtmb3IodGU9bChmZS5QYigpLDEwNSksbz1sKGNyKGUuYix0ZSksMTgzKSxFPTAsSj1MO0o8PUM7SisrKW9bSl0mJihFPWIuTWF0aC5tYXgoRSxyW0pdKSk7aWYodGUuaSl7Zm9yKHo9dGUuaS5jLCRlPW5ldyBLcyxCPTA7QjxhLmxlbmd0aDtCKyspYVt6XVtCXSYmbmEoJGUscHQoTWVbQl0pKTtmb3IoO1cwKCRlLHB0KEUpKTspKytFfWZvcihCNmUodGUsbixFKSxWPUw7Vjw9QztWKyspb1tWXSYmKHJbVl09RSsxKTt0ZS5pJiYoTWVbdGUuaS5jXT1FKX19ZnVuY3Rpb24gZURuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSjtmb3IoYT1udWxsLHI9bmV3IEcodC5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMTApLHlsZShuKT9vPShnPWh3KHJPKG5ldyBTbSxuKSxlLmYpLHc9aHcock8obmV3IFNtLG4pLGUuZiksRT1uZXcgRDVlKG4sITAsZyx3KSxDPW4uby5iLEw9KEJ5KCksKG4ucT9uLnE6KENuKCksQ24oKSxtZykpLl9iKChOdCgpLGczKSk/Qj1sKFEobixnMyksMjAzKTpCPWwoUShlbyhuKSxlTSksMjAzKSxCKSx6PTFlNCxMPT1VNiYmKHo9MSksVj1wMChzMChpMChyMChhMChuZXcgX2YseiksdWEoYi5NYXRoLmNlaWwoQykpKSxnKSx3KSksTD09RzYmJm5hKGUuZCxWKSx2bXQoZSxsZihPYyhuLChDdCgpLGVyKSkpLEUpLHZtdChlLE9jKG4sYXIpLEUpLEUpOm89KEo9aHcock8obmV3IFNtLG4pLGUuZiksSXMoRmkobmV3IGJuKG51bGwsbmV3IGtuKG4uaiwxNikpLG5ldyBRZWUpLG5ldyBWZXQoZSxKKSksbmV3IEQ1ZShuLCExLEosSikpLGUuaVtuLnBdPW8sYSYmKGY9YS5jLmQuYStqNShlLm4sYS5jLG4pK24uZC5kLGEuYnx8KGYrPWEuYy5vLmIpLHAwKHMwKGkwKGEwKHIwKG5ldyBfZix1YShiLk1hdGguY2VpbChmKSkpLDApLGEuZCksby5hKSkpLGE9b31mdW5jdGlvbiB0RG4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCLHo7Zm9yKG89bmV3IG4ydCh0KSxMPU1TbihlLHQsbyksej1iLk1hdGgubWF4KHplKEdlKFEodCwoTnQoKSx4MikpKSksMSksQz1uZXcgRyhMLmEpO0MuYTxDLmMuYy5sZW5ndGg7KUU9bChyZShDKSw0Miksdz1uZHQobChFLmEsOCksbChFLmIsOCkseikseT0hMCx5PXkmZ3cobixuZXcgbHQody5jLHcuZCkpLHk9eSZndyhuLGR3KG5ldyBsdCh3LmMsdy5kKSx3LmIsMCkpLHk9eSZndyhuLGR3KG5ldyBsdCh3LmMsdy5kKSwwLHcuYSkpLHkmZ3cobixkdyhuZXcgbHQody5jLHcuZCksdy5iLHcuYSkpO3N3aXRjaChCPW8uZCxnPW5kdChsKEwuYi5hLDgpLGwoTC5iLmIsOCkseiksQj09KEN0KCksZXIpfHxCPT1hcj8oci5jW0IuZ109Yi5NYXRoLm1pbihyLmNbQi5nXSxnLmQpLHIuYltCLmddPWIuTWF0aC5tYXgoci5iW0IuZ10sZy5kK2cuYSkpOihyLmNbQi5nXT1iLk1hdGgubWluKHIuY1tCLmddLGcuYyksci5iW0IuZ109Yi5NYXRoLm1heChyLmJbQi5nXSxnLmMrZy5iKSksYT1pYSxmPW8uYy5pLmQsQi5nKXtjYXNlIDQ6YT1mLmM7YnJlYWs7Y2FzZSAyOmE9Zi5iO2JyZWFrO2Nhc2UgMTphPWYuYTticmVhaztjYXNlIDM6YT1mLmR9cmV0dXJuIHIuYVtCLmddPWIuTWF0aC5tYXgoci5hW0IuZ10sYSksb31mdW5jdGlvbiBuRG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuO2c9bChjcih0LmMsZSksNDY4KSxUZT10LmEuYyx3PXQuYS5jK3QuYS5iLGFuPWcuZixCbj1nLmEsZj1hbjxCbixKPW5ldyBsdChUZSxhbiksTWU9bmV3IGx0KHcsQm4pLGE9KFRlK3cpLzIsdGU9bmV3IGx0KGEsYW4pLCRlPW5ldyBsdChhLEJuKSxvPWVDbihlLGFuLEJuKSxvdD1JMSh0LkIpLFN0PW5ldyBsdChhLG8pLGNuPUkxKHQuRCksbj1jeW4oaGUobGUoRWEsMSksZHQsOCwwLFtvdCxTdCxjbl0pKSx6PSExLGZlPXQuQi5pLGZlJiZmZS5jJiZnLmQmJihFPWYmJmZlLnA8ZmUuYy5hLmMubGVuZ3RoLTF8fCFmJiZmZS5wPjAsRT9FJiYoQj1mZS5wLGY/KytCOi0tQixMPWwoanQoZmUuYy5hLEIpLDEwKSxyPW8wdChMKSx6PSEoWHVlKHIsb3QsblswXSl8fERzdChyLG90LG5bMF0pKSk6ej0hMCksVj0hMSxaZT10LkQuaSxaZSYmWmUuYyYmZy5lJiYoQz1mJiZaZS5wPjB8fCFmJiZaZS5wPFplLmMuYS5jLmxlbmd0aC0xLEM/KEI9WmUucCxmPy0tQjorK0IsTD1sKGp0KFplLmMuYSxCKSwxMCkscj1vMHQoTCksVj0hKFh1ZShyLG5bMF0sY24pfHxEc3QocixuWzBdLGNuKSkpOlY9ITApLHomJlYmJnVpKGUuYSxTdCksenx8ZkEoZS5hLGhlKGxlKEVhLDEpLGR0LDgsMCxbSix0ZV0pKSxWfHxmQShlLmEsaGUobGUoRWEsMSksZHQsOCwwLFskZSxNZV0pKX1mdW5jdGlvbiByRG4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlO2Zvcih6PXQuYy5sZW5ndGgsQj0wLEw9bmV3IEcoZS5iKTtMLmE8TC5jLmMubGVuZ3RoOylpZihDPWwocmUoTCksMzApLGZlPUMuYSxmZS5jLmxlbmd0aCE9MCl7Zm9yKHRlPW5ldyBHKGZlKSxFPTAsVGU9bnVsbCxhPWwocmUodGUpLDEwKSxvPW51bGw7YTspe2lmKG89bChqdCh0LGEucCksMjYxKSxvLmM+PTApe2Zvcih3PW51bGwsZz1uZXcgVWEoQy5hLEUrMSk7Zy5iPGcuZC5nYygpJiYoZj0obXIoZy5iPGcuZC5nYygpKSxsKGcuZC5YYihnLmM9Zy5iKyspLDEwKSksdz1sKGp0KHQsZi5wKSwyNjEpLCEody5kPT1vLmQmJncuYzxvLmMpKTspdz1udWxsO3cmJihUZSYmKHJmKHIsYS5wLHB0KGwoanQocixhLnApLDE3KS5hLTEpKSxsKGp0KG4sVGUucCksMTUpLk1jKG8pKSxvPXh4bihvLGEseisrKSwkbih0LmMsbyksdnQobixuZXcgYnQpLFRlPyhsKGp0KG4sVGUucCksMTUpLkZjKG8pLHZ0KHIscHQoMSkpKTp2dChyLHB0KDApKSl9Vj1udWxsLHRlLmE8dGUuYy5jLmxlbmd0aCYmKFY9bChyZSh0ZSksMTApLEo9bChqdCh0LFYucCksMjYxKSxsKGp0KG4sYS5wKSwxNSkuRmMoSikscmYocixWLnAscHQobChqdChyLFYucCksMTcpLmErMSkpKSxvLmQ9QixvLmM9RSsrLFRlPWEsYT1WfSsrQn19ZnVuY3Rpb24gaURuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQix6O2lmKG89bChRKGUsKGZ0KCksemkpKSw3NCksISFvKXtmb3Iocj1lLmEsYT1uZXcgRW8obiksT2koYSxMOG4oZSkpLGJFKGUuZC5pLGUuYy5pKT8oQj1lLmMsTD1JYyhoZShsZShFYSwxKSxkdCw4LDAsW0IubixCLmFdKSksbWEoTCxuKSk6TD1JMShlLmMpLENzKHIsTCxyLmEsci5hLmEpLHo9STEoZS5kKSxRKGUsWTFlKSE9bnVsbCYmT2koeixsKFEoZSxZMWUpLDgpKSxDcyhyLHosci5jLmIsci5jKSxEeShyLGEpLGY9bDYobywhMCwhMCksd1YoZixsKE9lKCghby5iJiYoby5iPW5ldyBMbihfcixvLDQsNykpLG8uYiksMCksODQpKSx5VihmLGwoT2UoKCFvLmMmJihvLmM9bmV3IExuKF9yLG8sNSw4KSksby5jKSwwKSw4NCkpLGRQKHIsZiksQz1uZXcgRyhlLmIpO0MuYTxDLmMuYy5sZW5ndGg7KUU9bChyZShDKSw3MiksZz1sKFEoRSx6aSksMTM1KSxEdyhnLEUuby5hKSxNdyhnLEUuby5iKSxRaChnLEUubi5hK2EuYSxFLm4uYithLmIpLEhpKGcsKGx4KCksZzFlKSxCdChRKEUsZzFlKSkpO3c9bChRKGUsKE50KCksY2MpKSw3NSksdz8oRHkodyxhKSxIaShvLGNjLHcpKTpIaShvLGNjLG51bGwpLHQ9PShpcCgpLHM5KT9IaShvLGJwLHM5KTpIaShvLGJwLG51bGwpfX1mdW5jdGlvbiBSdnQoZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuO2lmKG4uYy5sZW5ndGghPTApe2ZvcihWPW5ldyBidCx6PW5ldyBHKG4pO3ouYTx6LmMuYy5sZW5ndGg7KUI9bChyZSh6KSwyNyksdnQoVixuZXcgbHQoQi5pLEIuaikpO2ZvcihyLmRoKHQsIkJlZm9yZSByZW1vdmluZyBvdmVybGFwcyIpO0d4ZShlLG4pOylUVShlLG4sITEpO2lmKHIuZGgodCwiQWZ0ZXIgcmVtb3Zpbmcgb3ZlcmxhcHMiKSxnPTAsdz0wLGE9bnVsbCxuLmMubGVuZ3RoIT0wJiYoYT0oU24oMCxuLmMubGVuZ3RoKSxsKG4uY1swXSwyNykpLGc9YS5pLShTbigwLFYuYy5sZW5ndGgpLGwoVi5jWzBdLDgpKS5hLHc9YS5qLShTbigwLFYuYy5sZW5ndGgpLGwoVi5jWzBdLDgpKS5iKSxmPWIuTWF0aC5zcXJ0KGcqZyt3KncpLEw9WHluKG4pLG89MSxMLmEuZ2MoKSE9MCl7Zm9yKEM9TC5hLmVjKCkuS2MoKTtDLk9iKCk7KUU9bChDLlBiKCksMjcpLEo9ZS5mLHRlPUouaStKLmcvMixmZT1KLmorSi5mLzIsVGU9RS5pK0UuZy8yLE1lPUUuaitFLmYvMiwkZT1UZS10ZSxaZT1NZS1mZSxvdD1iLk1hdGguc3FydCgkZSokZStaZSpaZSksU3Q9JGUvb3QsY249WmUvb3QsVXUoRSxFLmkrU3QqZiksR3UoRSxFLmorY24qZik7ci5kaCh0LCJDaGlsZCBtb3ZlbWVudCAiK28pLCsrb31lLmEmJmUuYS5HZyhuZXcgT2woTCkpLFJ2dChlLHQsbmV3IE9sKEwpLHIpfX1mdW5jdGlvbiBfbGUoZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lO3JldHVybiB3PWUsQz1tYShuZXcgbHQodC5hLHQuYiksZSksRT1uLEw9bWEobmV3IGx0KHIuYSxyLmIpLG4pLEI9dy5hLHRlPXcuYixWPUUuYSxUZT1FLmIsej1DLmEsZmU9Qy5iLEo9TC5hLE1lPUwuYixhPUoqZmUteipNZSxBMSgpLGYwKE5kKSxiLk1hdGguYWJzKDAtYSk8PU5kfHxhPT0wfHxpc05hTigwKSYmaXNOYU4oYSk/ITE6KGY9MS9hKigoQi1WKSpmZS0odGUtVGUpKnopLGc9MS9hKi0oLShCLVYpKk1lKyh0ZS1UZSkqSiksbz0oZjAoTmQpLChiLk1hdGguYWJzKDAtZik8PU5kfHxmPT0wfHxpc05hTigwKSYmaXNOYU4oZik/MDowPGY/LTE6MD5mPzE6dXcoaXNOYU4oMCksaXNOYU4oZikpKTwwJiYoZjAoTmQpLChiLk1hdGguYWJzKGYtMSk8PU5kfHxmPT0xfHxpc05hTihmKSYmaXNOYU4oMSk/MDpmPDE/LTE6Zj4xPzE6dXcoaXNOYU4oZiksaXNOYU4oMSkpKTwwKSYmKGYwKE5kKSwoYi5NYXRoLmFicygwLWcpPD1OZHx8Zz09MHx8aXNOYU4oMCkmJmlzTmFOKGcpPzA6MDxnPy0xOjA+Zz8xOnV3KGlzTmFOKDApLGlzTmFOKGcpKSk8MCkmJihmMChOZCksKGIuTWF0aC5hYnMoZy0xKTw9TmR8fGc9PTF8fGlzTmFOKGcpJiZpc05hTigxKT8wOmc8MT8tMTpnPjE/MTp1dyhpc05hTihnKSxpc05hTigxKSkpPDApKSxvKX1mdW5jdGlvbiBzRG4oZSl7dmFyIHQsbixyLGE7aWYobj1lLkQhPW51bGw/ZS5EOmUuQix0PXBkKG4sY2woOTEpKSx0IT0tMSl7cj0oR2EoMCx0LG4ubGVuZ3RoKSxuLnN1YnN0cigwLHQpKSxhPW5ldyBVcDtkbyBhLmErPSJbIjt3aGlsZSgodD1OayhuLDkxLCsrdCkpIT0tMSk7dm4ocixDeCk/YS5hKz0iWiI6dm4ocixTTCk/YS5hKz0iQiI6dm4ocixHRyk/YS5hKz0iQyI6dm4ocixfTCk/YS5hKz0iRCI6dm4ocixBTCk/YS5hKz0iRiI6dm4ocixMTCk/YS5hKz0iSSI6dm4ocixNTCk/YS5hKz0iSiI6dm4ocixETCk/YS5hKz0iUyI6KGEuYSs9IkwiLGEuYSs9IiIrcixhLmErPSI7Iik7dHJ5e3JldHVybiBudWxsfWNhdGNoKG8pe2lmKG89YnMobyksIURlKG8sNjMpKXRocm93IHVlKG8pfX1lbHNlIGlmKHBkKG4sY2woNDYpKT09LTEpe2lmKHZuKG4sQ3gpKXJldHVybiBpaDtpZih2bihuLFNMKSlyZXR1cm4gQWw7aWYodm4obixHRykpcmV0dXJuIGtmO2lmKHZuKG4sX0wpKXJldHVybiBOYTtpZih2bihuLEFMKSlyZXR1cm4gQjQ7aWYodm4obixMTCkpcmV0dXJuIFZyO2lmKHZuKG4sTUwpKXJldHVybiBubTtpZih2bihuLERMKSlyZXR1cm4gaDd9cmV0dXJuIG51bGx9ZnVuY3Rpb24gYURuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdDtmb3IoZS5lPXQsZz1hRW4odCksb3Q9bmV3IGJ0LHI9bmV3IEcoZyk7ci5hPHIuYy5jLmxlbmd0aDspe2ZvcihuPWwocmUociksMTUpLFN0PW5ldyBidCwkbihvdC5jLFN0KSx3PW5ldyBLcyxWPW4uS2MoKTtWLk9iKCk7KXtmb3Ioej1sKFYuUGIoKSwyNyksbz11UChlLHosITAsMCwwKSwkbihTdC5jLG8pLEo9ei5pLHRlPXouaixCPSghei5uJiYoei5uPW5ldyBudChlYyx6LDEsNykpLHoubiksTD1uZXcgb3IoQik7TC5lIT1MLmkuZ2MoKTspRT1sKGdyKEwpLDEzNSksYT11UChlLEUsITEsSix0ZSksJG4oU3QuYyxhKTtmb3IoWmU9KCF6LmMmJih6LmM9bmV3IG50KEhsLHosOSw5KSksei5jKSxUZT1uZXcgb3IoWmUpO1RlLmUhPVRlLmkuZ2MoKTspZm9yKGZlPWwoZ3IoVGUpLDEyMyksZj11UChlLGZlLCExLEosdGUpLCRuKFN0LmMsZiksTWU9ZmUuaStKLCRlPWZlLmordGUsQj0oIWZlLm4mJihmZS5uPW5ldyBudChlYyxmZSwxLDcpKSxmZS5uKSxDPW5ldyBvcihCKTtDLmUhPUMuaS5nYygpOylFPWwoZ3IoQyksMTM1KSxhPXVQKGUsRSwhMSxNZSwkZSksJG4oU3QuYyxhKTtLYSh3LExIKExoKGhlKGxlKEZoLDEpLFJuLDIwLDAsW2NwKHopLHNQKHopXSkpKSl9S1RuKGUsdyxTdCl9cmV0dXJuIGUuZj1uZXcgR0plKG90KSxwYyhlLmYsdCksZS5mfWZ1bmN0aW9uIG9EbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3Q7Zm9yKEw9bmV3IHk1ZShuZXcgU2MoZSkpO0wuYyE9TC5kLmEuZDspZm9yKEM9WWx0KEwpLGc9bChDLmQsNTgpLHQ9bChDLmUsNTgpLGY9Zy5EaCgpLEo9MCwkZT0oZi5pPT1udWxsJiZTZChmKSxmLmkpLmxlbmd0aDtKPCRlOysrSilpZihFPShvPShmLmk9PW51bGwmJlNkKGYpLGYuaSksSj49MCYmSjxvLmxlbmd0aD9vW0pdOm51bGwpLEUucmsoKSYmIUUuc2soKSl7aWYoRGUoRSwxMDIpKXc9bChFLDE5KSwhKHcuQmImZXUpJiYob3Q9Um8odyksIShvdCYmb3QuQmImZXUpKSYmVUFuKGUsdyxnLHQpO2Vsc2UgaWYoRm8oKSxsKEUsNjkpLnhrKCkmJihuPShaZT1FLGwoWmU/bCh0LDU0KS5naShaZSk6bnVsbCwxNjApKSxuKSlmb3Ioej1sKGcuTWgoRSksMTYwKSxyPW4uZ2MoKSx0ZT0wLFY9ei5nYygpO3RlPFY7Kyt0ZSlpZihCPXouVGwodGUpLERlKEIsMTAyKSl7aWYoTWU9ei5VbCh0ZSksYT1CMShlLE1lKSxhPT1udWxsJiZNZSE9bnVsbCl7aWYoVGU9bChCLDE5KSwhZS5ifHxUZS5CYiZldXx8Um8oVGUpKWNvbnRpbnVlO2E9TWV9aWYoIW4uT2woQixhKSl7Zm9yKGZlPTA7ZmU8cjsrK2ZlKWlmKG4uVGwoZmUpPT1CJiZxZShuLlVsKGZlKSk9PT1xZShhKSl7bi5UaShuLmdjKCktMSxmZSksLS1yO2JyZWFrfX19ZWxzZSBuLk9sKHouVGwodGUpLHouVWwodGUpKX19ZnVuY3Rpb24gY0RuKGUsdCxuKXt2YXIgcjtpZihuLlVnKCJTdHJldGNoV2lkdGggbGF5ZXJpbmciLDEpLHQuYS5jLmxlbmd0aD09MCl7bi5WZygpO3JldHVybn1mb3IoZS5jPXQsZS50PTAsZS51PTAsZS5pPWdzLGUuZz1pYSxlLmQ9emUoR2UoUSh0LChOdCgpLHgwKSkpKSxBNm4oZSksUEVuKGUpLE5FbihlKSxEOG4oZSksSTVuKGUpLGUuaT1iLk1hdGgubWF4KDEsZS5pKSxlLmc9Yi5NYXRoLm1heCgxLGUuZyksZS5kPWUuZC9lLmksZS5mPWUuZy9lLmksZS5zPUg2bihlKSxyPW5ldyB5dShlLmMpLHZ0KGUuYy5iLHIpLGUucj1fdyhlLnApLGUubj1PSChlLmssZS5rLmxlbmd0aCk7ZS5yLmMubGVuZ3RoIT0wOyllLm89UXluKGUpLCFlLm98fGwwdChlKSYmZS5iLmEuZ2MoKSE9MD8oaXhuKGUscikscj1uZXcgeXUoZS5jKSx2dChlLmMuYixyKSxLYShlLmEsZS5iKSxlLmIuYS4kYigpLGUudD1lLnUsZS51PTApOmwwdChlKT8oZS5jLmIuYy5sZW5ndGg9MCxyPW5ldyB5dShlLmMpLHZ0KGUuYy5iLHIpLGUudD0wLGUudT0wLGUuYi5hLiRiKCksZS5hLmEuJGIoKSwrK2UuZixlLnI9X3coZS5wKSxlLm49T0goZS5rLGUuay5sZW5ndGgpKTooVmEoZS5vLHIpLGFsKGUucixlLm8pLG5hKGUuYixlLm8pLGUudD1lLnQtZS5rW2Uuby5wXSplLmQrZS5qW2Uuby5wXSxlLnUrPWUuZVtlLm8ucF0qZS5kKTt0LmEuYy5sZW5ndGg9MCxKTih0LmIpLG4uVmcoKX1mdW5jdGlvbiB1RG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTDtmb3IoZS5qPVdlKFZyLGRpLDI4LGUuZywxNSwxKSxlLm89bmV3IGJ0LElzKERjKG5ldyBibihudWxsLG5ldyBrbihlLmUuYiwxNikpLG5ldyBpdGUpLG5ldyBlWGUoZSkpLGUuYT1XZShpaCxwZywyOCxlLmIsMTYsMSksT04obmV3IGJuKG51bGwsbmV3IGtuKGUuZS5iLDE2KSksbmV3IG5YZShlKSkscj0oTD1uZXcgYnQsSXMoRmkoRGMobmV3IGJuKG51bGwsbmV3IGtuKGUuZS5iLDE2KSksbmV3IGF0ZSksbmV3IHRYZShlKSksbmV3IFVldChlLEwpKSxMKSx3PW5ldyBHKHIpO3cuYTx3LmMuYy5sZW5ndGg7KWlmKGc9bChyZSh3KSw1MTUpLCEoZy5jLmxlbmd0aDw9MSkpe2lmKGcuYy5sZW5ndGg9PTIpe0trbihnKSx5bGUoKFNuKDAsZy5jLmxlbmd0aCksbChnLmNbMF0sMTgpKS5kLmkpfHx2dChlLm8sZyk7Y29udGludWV9aWYoISh1eG4oZyl8fEo5bihnLG5ldyBzdGUpKSlmb3IoRT1uZXcgRyhnKSxhPW51bGw7RS5hPEUuYy5jLmxlbmd0aDspdD1sKHJlKEUpLDE4KSxuPWUuY1t0LnBdLCFhfHxFLmE+PUUuYy5jLmxlbmd0aD9DPXU2ZSgoWm4oKSxQcyksQWEpOkM9dTZlKChabigpLEFhKSxBYSksQyo9MixvPW4uYS5nLG4uYS5nPWIuTWF0aC5tYXgobyxvKyhDLW8pKSxmPW4uYi5nLG4uYi5nPWIuTWF0aC5tYXgoZixmKyhDLWYpKSxhPXR9fWZ1bmN0aW9uIGxEbihlKXt2YXIgdCxuLHIsYTtmb3IoSXMoRmkobmV3IGJuKG51bGwsbmV3IGtuKGUuYS5iLDE2KSksbmV3IE9qKSxuZXcgYWVlKSxVOG4oZSksSXMoRmkobmV3IGJuKG51bGwsbmV3IGtuKGUuYS5iLDE2KSksbmV3IG9lZSksbmV3IGNlZSksZS5jPT0oaXAoKSxzOSkmJihJcyhGaShEYyhuZXcgYm4obnVsbCxuZXcga24obmV3IGJyKGUuZiksMSkpLG5ldyB1ZWUpLG5ldyBsZWUpLG5ldyB2WWUoZSkpLElzKEZpKGZjKERjKERjKG5ldyBibihudWxsLG5ldyBrbihlLmQuYiwxNikpLG5ldyBoZWUpLG5ldyBOaiksbmV3IGZlZSksbmV3IFBqKSxuZXcgeVllKGUpKSksYT1uZXcgbHQoZ3MsZ3MpLHQ9bmV3IGx0KGlhLGlhKSxyPW5ldyBHKGUuYS5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksNjApLGEuYT1iLk1hdGgubWluKGEuYSxuLmQuYyksYS5iPWIuTWF0aC5taW4oYS5iLG4uZC5kKSx0LmE9Yi5NYXRoLm1heCh0LmEsbi5kLmMrbi5kLmIpLHQuYj1iLk1hdGgubWF4KHQuYixuLmQuZCtuLmQuYSk7T2koWTAoZS5kLmMpLEhxKG5ldyBsdChhLmEsYS5iKSkpLE9pKFkwKGUuZC5mKSxtYShuZXcgbHQodC5hLHQuYiksYSkpLGlDbihlLGEsdCksTmwoZS5mKSxObChlLmIpLE5sKGUuZyksTmwoZS5lKSxlLmEuYS5jLmxlbmd0aD0wLGUuYS5iLmMubGVuZ3RoPTAsZS5hPW51bGwsZS5kPW51bGx9ZnVuY3Rpb24gVVUoZSx0KXt2YXIgbjtpZihlLmUpdGhyb3cgdWUobmV3IG5jKChHZyhSMGUpLHBoZStSMGUuaytiaGUpKSk7aWYoIXBsbihlLmEsdCkpdGhyb3cgdWUobmV3IEFjKG4zdCt0K3IzdCkpO2lmKHQ9PWUuZClyZXR1cm4gZTtzd2l0Y2gobj1lLmQsZS5kPXQsbi5nKXtjYXNlIDA6c3dpdGNoKHQuZyl7Y2FzZSAyOiR3KGUpO2JyZWFrO2Nhc2UgMTp2YihlKSwkdyhlKTticmVhaztjYXNlIDQ6czYoZSksJHcoZSk7YnJlYWs7Y2FzZSAzOnM2KGUpLHZiKGUpLCR3KGUpfWJyZWFrO2Nhc2UgMjpzd2l0Y2godC5nKXtjYXNlIDE6dmIoZSksbmxlKGUpO2JyZWFrO2Nhc2UgNDpzNihlKSwkdyhlKTticmVhaztjYXNlIDM6czYoZSksdmIoZSksJHcoZSl9YnJlYWs7Y2FzZSAxOnN3aXRjaCh0Lmcpe2Nhc2UgMjp2YihlKSxubGUoZSk7YnJlYWs7Y2FzZSA0OnZiKGUpLHM2KGUpLCR3KGUpO2JyZWFrO2Nhc2UgMzp2YihlKSxzNihlKSx2YihlKSwkdyhlKX1icmVhaztjYXNlIDQ6c3dpdGNoKHQuZyl7Y2FzZSAyOnM2KGUpLCR3KGUpO2JyZWFrO2Nhc2UgMTpzNihlKSx2YihlKSwkdyhlKTticmVhaztjYXNlIDM6dmIoZSksbmxlKGUpfWJyZWFrO2Nhc2UgMzpzd2l0Y2godC5nKXtjYXNlIDI6dmIoZSksczYoZSksJHcoZSk7YnJlYWs7Y2FzZSAxOnZiKGUpLHM2KGUpLHZiKGUpLCR3KGUpO2JyZWFrO2Nhc2UgNDp2YihlKSxubGUoZSl9fXJldHVybiBlfWZ1bmN0aW9uIHA2KGUsdCl7dmFyIG47aWYoZS5kKXRocm93IHVlKG5ldyBuYygoR2coYTFlKSxwaGUrYTFlLmsrYmhlKSkpO2lmKCFnbG4oZS5hLHQpKXRocm93IHVlKG5ldyBBYyhuM3QrdCtyM3QpKTtpZih0PT1lLmMpcmV0dXJuIGU7c3dpdGNoKG49ZS5jLGUuYz10LG4uZyl7Y2FzZSAwOnN3aXRjaCh0Lmcpe2Nhc2UgMjpVbShlKTticmVhaztjYXNlIDE6d2IoZSksVW0oZSk7YnJlYWs7Y2FzZSA0OmE2KGUpLFVtKGUpO2JyZWFrO2Nhc2UgMzphNihlKSx3YihlKSxVbShlKX1icmVhaztjYXNlIDI6c3dpdGNoKHQuZyl7Y2FzZSAxOndiKGUpLHJsZShlKTticmVhaztjYXNlIDQ6YTYoZSksVW0oZSk7YnJlYWs7Y2FzZSAzOmE2KGUpLHdiKGUpLFVtKGUpfWJyZWFrO2Nhc2UgMTpzd2l0Y2godC5nKXtjYXNlIDI6d2IoZSkscmxlKGUpO2JyZWFrO2Nhc2UgNDp3YihlKSxhNihlKSxVbShlKTticmVhaztjYXNlIDM6d2IoZSksYTYoZSksd2IoZSksVW0oZSl9YnJlYWs7Y2FzZSA0OnN3aXRjaCh0Lmcpe2Nhc2UgMjphNihlKSxVbShlKTticmVhaztjYXNlIDE6YTYoZSksd2IoZSksVW0oZSk7YnJlYWs7Y2FzZSAzOndiKGUpLHJsZShlKX1icmVhaztjYXNlIDM6c3dpdGNoKHQuZyl7Y2FzZSAyOndiKGUpLGE2KGUpLFVtKGUpO2JyZWFrO2Nhc2UgMTp3YihlKSxhNihlKSx3YihlKSxVbShlKTticmVhaztjYXNlIDQ6d2IoZSkscmxlKGUpfX1yZXR1cm4gZX1mdW5jdGlvbiBHVShlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEU7aWYoRGUoZS5FaCgpLDE2Nyk/KEdVKGwoZS5FaCgpLDE2NyksdCksdC5hKz0iID4gIik6dC5hKz0iUm9vdCAiLG49ZS5EaCgpLnpiLHZuKG4uc3Vic3RyKDAsMyksIkVsayIpP2hpKHQsKFhuKDMsbi5sZW5ndGgrMSksbi5zdWJzdHIoMykpKTp0LmErPSIiK24sYT1lLmpoKCksYSl7aGkoKHQuYSs9IiAiLHQpLGEpO3JldHVybn1pZihEZShlLDM2NikmJihFPWwoZSwxMzUpLmEsRSkpe2hpKCh0LmErPSIgIix0KSxFKTtyZXR1cm59Zm9yKGY9bmV3IG9yKGUua2goKSk7Zi5lIT1mLmkuZ2MoKTspaWYobz1sKGdyKGYpLDEzNSksRT1vLmEsRSl7aGkoKHQuYSs9IiAiLHQpLEUpO3JldHVybn1pZihEZShlLDMyNikmJihyPWwoZSw3NCksIXIuYiYmKHIuYj1uZXcgTG4oX3Isciw0LDcpKSxyLmIuaSE9MCYmKCFyLmMmJihyLmM9bmV3IExuKF9yLHIsNSw4KSksci5jLmkhPTApKSl7Zm9yKHQuYSs9IiAoIixnPW5ldyBxOCgoIXIuYiYmKHIuYj1uZXcgTG4oX3Isciw0LDcpKSxyLmIpKTtnLmUhPWcuaS5nYygpOylnLmU+MCYmKHQuYSs9Q28pLEdVKGwoZ3IoZyksMTY3KSx0KTtmb3IodC5hKz1QaGUsdz1uZXcgcTgoKCFyLmMmJihyLmM9bmV3IExuKF9yLHIsNSw4KSksci5jKSk7dy5lIT13LmkuZ2MoKTspdy5lPjAmJih0LmErPUNvKSxHVShsKGdyKHcpLDE2NyksdCk7dC5hKz0iKSJ9fWZ1bmN0aW9uIGhEbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQztmb3Iodz1uZXcgb3IoKCFlLmEmJihlLmE9bmV3IG50KEFpLGUsMTAsMTEpKSxlLmEpKTt3LmUhPXcuaS5nYygpOylmb3IoZz1sKGdyKHcpLDI3KSxhPW5ldyBocihkcihjcChnKS5hLktjKCksbmV3IGopKTtqcihhKTspe2lmKHI9bCh4cihhKSw3NCksIXIuYiYmKHIuYj1uZXcgTG4oX3Isciw0LDcpKSwhKHIuYi5pPD0xJiYoIXIuYyYmKHIuYz1uZXcgTG4oX3Isciw1LDgpKSxyLmMuaTw9MSkpKXRocm93IHVlKG5ldyBJOCgiR3JhcGggbXVzdCBub3QgY29udGFpbiBoeXBlcmVkZ2VzLiIpKTtpZighcUEocikmJmchPWJjKGwoT2UoKCFyLmMmJihyLmM9bmV3IExuKF9yLHIsNSw4KSksci5jKSwwKSw4NCkpKWZvcihFPW5ldyBqcnQscGMoRSxyKSxydChFLChiYigpLEh4KSxyKSxBaWUoRSxsKGhjKHpvKG4uZixnKSksMTUzKSksazgoRSxsKGNyKG4sYmMobChPZSgoIXIuYyYmKHIuYz1uZXcgTG4oX3Isciw1LDgpKSxyLmMpLDApLDg0KSkpLDE1MykpLHZ0KHQuYyxFKSxmPW5ldyBvcigoIXIubiYmKHIubj1uZXcgbnQoZWMsciwxLDcpKSxyLm4pKTtmLmUhPWYuaS5nYygpOylvPWwoZ3IoZiksMTM1KSxDPW5ldyB6Y3QoRSxvLmEpLHBjKEMsbykscnQoQyxIeCxvKSxDLmUuYT1iLk1hdGgubWF4KG8uZywxKSxDLmUuYj1iLk1hdGgubWF4KG8uZiwxKSxBa2UoQyksdnQodC5kLEMpfX1mdW5jdGlvbiBmRG4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCO3N3aXRjaChuLlVnKCJOb2RlIHByb21vdGlvbiBoZXVyaXN0aWMiLDEpLGUuaT10LGUucj1sKFEodCwoTnQoKSx6YikpLDI0MyksZS5yIT0oTmYoKSx2MykmJmUuciE9eDQ/akRuKGUpOmhTbihlKSxDPWwoUShlLmksSE1lKSwxNykuYSxvPW5ldyBoZCxlLnIuZyl7Y2FzZSAyOmNhc2UgMTpRRShlLG8pO2JyZWFrO2Nhc2UgMzpmb3IoZS5yPUxXLFFFKGUsbyksdz0wLGc9bmV3IEcoZS5iKTtnLmE8Zy5jLmMubGVuZ3RoOylmPWwocmUoZyksMTcpLHc9Yi5NYXRoLm1heCh3LGYuYSk7dz5lLmsmJihlLnI9QUIsUUUoZSxvKSk7YnJlYWs7Y2FzZSA0OmZvcihlLnI9TFcsUUUoZSxvKSxFPTAsYT1uZXcgRyhlLmMpO2EuYTxhLmMuYy5sZW5ndGg7KXI9R2UocmUoYSkpLEU9Yi5NYXRoLm1heChFLChucihyKSxyKSk7RT5lLm4mJihlLnI9TEIsUUUoZSxvKSk7YnJlYWs7Y2FzZSA2OkI9dWEoYi5NYXRoLmNlaWwoZS5nLmxlbmd0aCpDLzEwMCkpLFFFKGUsbmV3IGFZZShCKSk7YnJlYWs7Y2FzZSA1Okw9dWEoYi5NYXRoLmNlaWwoZS5lKkMvMTAwKSksUUUoZSxuZXcgb1llKEwpKTticmVhaztjYXNlIDg6eHd0KGUsITApO2JyZWFrO2Nhc2UgOTp4d3QoZSwhMSk7YnJlYWs7ZGVmYXVsdDpRRShlLG8pfWUuciE9djMmJmUuciE9eDQ/UENuKGUsdCk6dF9uKGUsdCksbi5WZygpfWZ1bmN0aW9uIGREbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWU7Zm9yKEw9ZS5iLEM9bmV3IFVhKEwsMCksYnkoQyxuZXcgeXUoZSkpLFRlPSExLGY9MTtDLmI8Qy5kLmdjKCk7KXtmb3IoRT0obXIoQy5iPEMuZC5nYygpKSxsKEMuZC5YYihDLmM9Qy5iKyspLDMwKSksSj0oU24oZixMLmMubGVuZ3RoKSxsKEwuY1tmXSwzMCkpLHRlPV93KEUuYSksZmU9dGUuYy5sZW5ndGgsVj1uZXcgRyh0ZSk7Vi5hPFYuYy5jLmxlbmd0aDspQj1sKHJlKFYpLDEwKSxWYShCLEopO2lmKFRlKXtmb3Ioej1sZih0ZSkuS2MoKTt6Lk9iKCk7KWZvcihCPWwoei5QYigpLDEwKSxvPW5ldyBHKF93KGthKEIpKSk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDE4KSxVdyhhLCEwKSxydChlLChmdCgpLHlCKSwoSG4oKSwhMCkpLHI9YnZ0KGUsYSxmZSksbj1sKFEoQixjMyksMzEzKSxNZT1sKGp0KHIsci5jLmxlbmd0aC0xKSwxOCksbi5rPU1lLmMuaSxuLm49TWUsbi5iPWEuZC5pLG4uYz1hO1RlPSExfWVsc2UgdGUuYy5sZW5ndGghPTAmJih0PShTbigwLHRlLmMubGVuZ3RoKSxsKHRlLmNbMF0sMTApKSx0Lms9PShabigpLEsxKSYmKFRlPSEwLGY9LTEpKTsrK2Z9Zm9yKGc9bmV3IFVhKGUuYiwwKTtnLmI8Zy5kLmdjKCk7KXc9KG1yKGcuYjxnLmQuZ2MoKSksbChnLmQuWGIoZy5jPWcuYisrKSwzMCkpLHcuYS5jLmxlbmd0aD09MCYmcGgoZyl9ZnVuY3Rpb24gZ0RuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZTtmb3IoTD1uZXcgemtlKGUpLGcybihMLCEodD09KEpzKCksd2YpfHx0PT1RMSkpLEM9TC5hLEI9bmV3IEE4LGE9KHQxKCksaGUobGUoczQsMSksaXQsMjM3LDAsW0djLCR1LEtjXSkpLGY9MCx3PWEubGVuZ3RoO2Y8dzsrK2Ypbj1hW2ZdLEU9ZWFlKEMsR2MsbiksRSYmKEIuZD1iLk1hdGgubWF4KEIuZCxFLmpmKCkpKTtmb3Iocj1oZShsZShzNCwxKSxpdCwyMzcsMCxbR2MsJHUsS2NdKSxvPTAsZz1yLmxlbmd0aDtvPGc7KytvKW49cltvXSxFPWVhZShDLEtjLG4pLEUmJihCLmE9Yi5NYXRoLm1heChCLmEsRS5qZigpKSk7Zm9yKEo9aGUobGUoczQsMSksaXQsMjM3LDAsW0djLCR1LEtjXSksZmU9MCxNZT1KLmxlbmd0aDtmZTxNZTsrK2ZlKXo9SltmZV0sRT1lYWUoQyx6LEdjKSxFJiYoQi5iPWIuTWF0aC5tYXgoQi5iLEUua2YoKSkpO2ZvcihWPWhlKGxlKHM0LDEpLGl0LDIzNywwLFtHYywkdSxLY10pLHRlPTAsVGU9Vi5sZW5ndGg7dGU8VGU7Kyt0ZSl6PVZbdGVdLEU9ZWFlKEMseixLYyksRSYmKEIuYz1iLk1hdGgubWF4KEIuYyxFLmtmKCkpKTtyZXR1cm4gQi5kPjAmJihCLmQrPUMubi5kLEIuZCs9Qy5kKSxCLmE+MCYmKEIuYSs9Qy5uLmEsQi5hKz1DLmQpLEIuYj4wJiYoQi5iKz1DLm4uYixCLmIrPUMuZCksQi5jPjAmJihCLmMrPUMubi5jLEIuYys9Qy5kKSxCfWZ1bmN0aW9uIGp2dChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWO2ZvcihCPW4uZCxMPW4uYyxvPW5ldyBsdChuLmYuYStuLmQuYituLmQuYyxuLmYuYituLmQuZCtuLmQuYSksZj1vLmIsRT1uZXcgRyhlLmEpO0UuYTxFLmMuYy5sZW5ndGg7KWlmKGc9bChyZShFKSwxMCksZy5rPT0oWm4oKSxVcykpe3N3aXRjaChyPWwoUShnLChmdCgpLFdjKSksNjQpLGE9bChRKGcsJExlKSw4KSxDPWcubixyLmcpe2Nhc2UgMjpDLmE9bi5mLmErQi5jLUwuYTticmVhaztjYXNlIDQ6Qy5hPS1MLmEtQi5ifXN3aXRjaChWPTAsci5nKXtjYXNlIDI6Y2FzZSA0OnQ9PShSYSgpLFRnKT8oej16ZShHZShRKGcsbDMpKSksQy5iPW8uYip6LWwoUShnLChOdCgpLHAzKSksOCkuYixWPUMuYithLmIsRFYoZywhMSwhMCkpOnQ9PU11JiYoQy5iPXplKEdlKFEoZyxsMykpKS1sKFEoZywoTnQoKSxwMykpLDgpLmIsVj1DLmIrYS5iLERWKGcsITEsITApKX1mPWIuTWF0aC5tYXgoZixWKX1mb3Iobi5mLmIrPWYtby5iLHc9bmV3IEcoZS5hKTt3LmE8dy5jLmMubGVuZ3RoOylpZihnPWwocmUodyksMTApLGcuaz09KFpuKCksVXMpKXN3aXRjaChyPWwoUShnLChmdCgpLFdjKSksNjQpLEM9Zy5uLHIuZyl7Y2FzZSAxOkMuYj0tTC5iLUIuZDticmVhaztjYXNlIDM6Qy5iPW4uZi5iK0IuYS1MLmJ9fWZ1bmN0aW9uIHBEbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmU7aWYoQz1sKGwoJGkoZS5yLHQpLDIxKSw4NyksQy5nYygpPD0yfHx0PT0oQ3QoKSxhcil8fHQ9PShDdCgpLGVyKSl7c3d0KGUsdCk7cmV0dXJufWZvcihKPWUudS5IYygoUmwoKSxhOSkpLG49dD09KEN0KCksUW4pPyhQdygpLGlCKTooUHcoKSxyQiksZmU9dD09UW4/KG9sKCksdzApOihvbCgpLGExKSxyPWkzZSh5NGUobiksZS5zKSx0ZT10PT1Rbj9nczppYSxFPUMuS2MoKTtFLk9iKCk7KWc9bChFLlBiKCksMTE3KSwhKCFnLmN8fGcuYy5kLmMubGVuZ3RoPD0wKSYmKFY9Zy5iLk1mKCksej1nLmUsTD1nLmMsQj1MLmksQi5iPShvPUwubixMLmUuYStvLmIrby5jKSxCLmE9KGY9TC5uLEwuZS5iK2YuZCtmLmEpLEo/KEIuYz16LmEtKGE9TC5uLEwuZS5hK2EuYithLmMpLWUucyxKPSExKTpCLmM9ei5hK1YuYStlLnMsVU8oZmUseUVlKSxMLmY9ZmUsWjAoTCwoQmwoKSx2MCkpLHZ0KHIuZCxuZXcgRGFlKEIsaDhlKHIsQikpKSx0ZT10PT1Rbj9iLk1hdGgubWluKHRlLHouYik6Yi5NYXRoLm1heCh0ZSx6LmIrZy5iLk1mKCkuYikpO2Zvcih0ZSs9dD09UW4/LWUudDplLnQsTThlKChyLmU9dGUscikpLHc9Qy5LYygpO3cuT2IoKTspZz1sKHcuUGIoKSwxMTcpLCEoIWcuY3x8Zy5jLmQuYy5sZW5ndGg8PTApJiYoQj1nLmMuaSxCLmMtPWcuZS5hLEIuZC09Zy5lLmIpfWZ1bmN0aW9uICR2dChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWU7Zm9yKGE9bmV3IGJ0LEo9bmV3IEcodC5hKTtKLmE8Si5jLmMubGVuZ3RoOylpZihWPWwocmUoSiksMTApLHo9Vi5lLHomJihyPSR2dChlLHosVikscmEoYSxyKSxMTW4oZSx6LFYpLGwoUSh6LChmdCgpLEx1KSksMjEpLkhjKChIbygpLHZmKSkpKWZvcihUZT1sKFEoViwoTnQoKSxNcykpLDEwMSksQj1sKFEoVix2NCksMTgxKS5IYygoUmwoKSx2cCkpLGZlPW5ldyBHKFYuaik7ZmUuYTxmZS5jLmMubGVuZ3RoOylmb3IodGU9bChyZShmZSksMTIpLG89bChjcihlLmIsdGUpLDEwKSxvfHwobz12UCh0ZSxUZSx0ZS5qLC0odGUuZS5jLmxlbmd0aC10ZS5nLmMubGVuZ3RoKSxudWxsLG5ldyBxYSx0ZS5vLGwoUSh6LFJoKSw4OCkseikscnQobyx6aSx0ZSksa2koZS5iLHRlLG8pLHZ0KHouYSxvKSksZj1sKGp0KG8uaiwwKSwxMiksQz1uZXcgRyh0ZS5mKTtDLmE8Qy5jLmMubGVuZ3RoOylFPWwocmUoQyksNzIpLGc9bmV3IFhKZSxnLm8uYT1FLm8uYSxnLm8uYj1FLm8uYix2dChmLmYsZyksQnx8KE1lPXRlLmosTD0wLFdfKGwoUShWLHY0KSwyMSkpJiYoTD1tOWUoRS5uLEUubyx0ZS5vLDAsTWUpKSxUZT09KFJhKCksWjEpfHwoQ3QoKSxKdSkuSGMoTWUpP2cuby5hPUw6Zy5vLmI9TCk7cmV0dXJuIHc9bmV3IGJ0LEFNbihlLHQsbixhLHcpLG4mJktMbihlLHQsbix3KSx3fWZ1bmN0aW9uICRrZShlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMO2lmKCFlLmNbdC5jLnBdW3QucF0uZSl7Zm9yKGUuY1t0LmMucF1bdC5wXS5lPSEwLGUuY1t0LmMucF1bdC5wXS5iPTAsZS5jW3QuYy5wXVt0LnBdLmQ9MCxlLmNbdC5jLnBdW3QucF0uYT1udWxsLEM9bmV3IEcodC5qKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3IoRT1sKHJlKEMpLDEyKSxMPW4/bmV3IFQ1KEUpOm5ldyBDOChFKSx3PUwuS2MoKTt3Lk9iKCk7KWc9bCh3LlBiKCksMTIpLGY9Zy5pLGYuYz09dC5jP2YhPXQmJigka2UoZSxmLG4pLGUuY1t0LmMucF1bdC5wXS5iKz1lLmNbZi5jLnBdW2YucF0uYixlLmNbdC5jLnBdW3QucF0uZCs9ZS5jW2YuYy5wXVtmLnBdLmQpOihlLmNbdC5jLnBdW3QucF0uZCs9ZS5nW2cucF0sKytlLmNbdC5jLnBdW3QucF0uYik7aWYobz1sKFEodCwoZnQoKSxCTGUpKSwxNSksbylmb3IoYT1vLktjKCk7YS5PYigpOylyPWwoYS5QYigpLDEwKSx0LmM9PXIuYyYmKCRrZShlLHIsbiksZS5jW3QuYy5wXVt0LnBdLmIrPWUuY1tyLmMucF1bci5wXS5iLGUuY1t0LmMucF1bdC5wXS5kKz1lLmNbci5jLnBdW3IucF0uZCk7ZS5jW3QuYy5wXVt0LnBdLmI+MCYmKGUuY1t0LmMucF1bdC5wXS5kKz1KbChlLmksMjQpKk1QKi4wNzAwMDAwMDAyOTgwMjMyMi0uMDM1MDAwMDAwMTQ5MDExNjEsZS5jW3QuYy5wXVt0LnBdLmE9ZS5jW3QuYy5wXVt0LnBdLmQvZS5jW3QuYy5wXVt0LnBdLmIpfX1mdW5jdGlvbiBiRG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2ZvcihWPW5ldyBHKGUpO1YuYTxWLmMuYy5sZW5ndGg7KXtmb3Ioej1sKHJlKFYpLDEwKSxZcCh6Lm4pLFlwKHoubyksQTZlKHouZiksWmJ0KHopLFBTbih6KSx0ZT1uZXcgRyh6LmopO3RlLmE8dGUuYy5jLmxlbmd0aDspe2ZvcihKPWwocmUodGUpLDEyKSxZcChKLm4pLFlwKEouYSksWXAoSi5vKSxsYShKLElkdChKLmopKSxvPWwoUShKLChOdCgpLGsyKSksMTcpLG8mJnJ0KEosazIscHQoLW8uYSkpLGE9bmV3IEcoSi5nKTthLmE8YS5jLmMubGVuZ3RoOyl7Zm9yKHI9bChyZShhKSwxOCksbj1ScihyLmEsMCk7bi5iIT1uLmQuYzspdD1sKEJyKG4pLDgpLFlwKHQpO2lmKHc9bChRKHIsY2MpLDc1KSx3KWZvcihnPVJyKHcsMCk7Zy5iIT1nLmQuYzspZj1sKEJyKGcpLDgpLFlwKGYpO2ZvcihMPW5ldyBHKHIuYik7TC5hPEwuYy5jLmxlbmd0aDspRT1sKHJlKEwpLDcyKSxZcChFLm4pLFlwKEUubyl9Zm9yKEI9bmV3IEcoSi5mKTtCLmE8Qi5jLmMubGVuZ3RoOylFPWwocmUoQiksNzIpLFlwKEUubiksWXAoRS5vKX1mb3Ioei5rPT0oWm4oKSxVcykmJihydCh6LChmdCgpLFdjKSxJZHQobChRKHosV2MpLDY0KSkpLFZDbih6KSksQz1uZXcgRyh6LmIpO0MuYTxDLmMuYy5sZW5ndGg7KUU9bChyZShDKSw3MiksWmJ0KEUpLFlwKEUubyksWXAoRS5uKX19ZnVuY3Rpb24gbURuKGUsdCxuLHIsYSl7dmFyIG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdCxjbixhbixCbixqbix1cjtCbj1jcihlLmUsciksQm49PW51bGwmJihCbj1uZXcgTTgsej1sKEJuLDE5MCksVGU9dCsiX3MiLE1lPVRlK2EsQj1uZXcgeXkoTWUpLGUxKHosUGQsQikpLGFuPWwoQm4sMTkwKSxKOChuLGFuKSx1cj1uZXcgTTgsTm0odXIsIngiLHIuaiksTm0odXIsInkiLHIuayksZTEoYW4sdjR0LHVyKSxTdD1uZXcgTTgsTm0oU3QsIngiLHIuYiksTm0oU3QsInkiLHIuYyksZTEoYW4sImVuZFBvaW50IixTdCksTD1aSSgoIXIuYSYmKHIuYT1uZXcgWXMocWgsciw1KSksci5hKSksVj0hTCxWJiYob3Q9bmV3ICRwLG89bmV3IFpYZShvdCksdG8oKCFyLmEmJihyLmE9bmV3IFlzKHFoLHIsNSkpLHIuYSksbyksZTEoYW4sJEcsb3QpKSx3PWF1ZShyKSwkZT0hIXcsJGUmJnF4ZShlLmEsYW4sZ1NlLGp1ZShlLGF1ZShyKSkpLGZlPW91ZShyKSxaZT0hIWZlLFplJiZxeGUoZS5hLGFuLGRTZSxqdWUoZSxvdWUocikpKSxFPSghci5lJiYoci5lPW5ldyBMbihjcyxyLDEwLDkpKSxyLmUpLmk9PTAsSj0hRSxKJiYoY249bmV3ICRwLGY9bmV3IF90dChlLGNuKSx0bygoIXIuZSYmKHIuZT1uZXcgTG4oY3MsciwxMCw5KSksci5lKSxmKSxlMShhbixiU2UsY24pKSxDPSghci5nJiYoci5nPW5ldyBMbihjcyxyLDksMTApKSxyLmcpLmk9PTAsdGU9IUMsdGUmJihqbj1uZXcgJHAsZz1uZXcgQXR0KGUsam4pLHRvKCghci5nJiYoci5nPW5ldyBMbihjcyxyLDksMTApKSxyLmcpLGcpLGUxKGFuLHBTZSxqbikpfWZ1bmN0aW9uIHZEbihlKXtweSgpO3ZhciB0LG4scixhLG8sZixnO2ZvcihyPWUuZi5uLGY9YjVlKGUucikuYS5uYygpO2YuT2IoKTspe2lmKG89bChmLlBiKCksMTE3KSxhPTAsby5iLnBmKChwaSgpLHJoKSkmJihhPXplKEdlKG8uYi5vZihyaCkpKSxhPDApKXN3aXRjaChvLmIuYWcoKS5nKXtjYXNlIDE6ci5kPWIuTWF0aC5tYXgoci5kLC1hKTticmVhaztjYXNlIDM6ci5hPWIuTWF0aC5tYXgoci5hLC1hKTticmVhaztjYXNlIDI6ci5jPWIuTWF0aC5tYXgoci5jLC1hKTticmVhaztjYXNlIDQ6ci5iPWIuTWF0aC5tYXgoci5iLC1hKX1pZihXXyhlLnUpKXN3aXRjaCh0PUUzbihvLmIsYSksZz0hbChlLmUub2YoVWIpLDE4MSkuSGMoKFpsKCksc0YpKSxuPSExLG8uYi5hZygpLmcpe2Nhc2UgMTpuPXQ+ci5kLHIuZD1iLk1hdGgubWF4KHIuZCx0KSxnJiZuJiYoci5kPWIuTWF0aC5tYXgoci5kLHIuYSksci5hPXIuZCthKTticmVhaztjYXNlIDM6bj10PnIuYSxyLmE9Yi5NYXRoLm1heChyLmEsdCksZyYmbiYmKHIuYT1iLk1hdGgubWF4KHIuYSxyLmQpLHIuZD1yLmErYSk7YnJlYWs7Y2FzZSAyOm49dD5yLmMsci5jPWIuTWF0aC5tYXgoci5jLHQpLGcmJm4mJihyLmM9Yi5NYXRoLm1heChyLmIsci5jKSxyLmI9ci5jK2EpO2JyZWFrO2Nhc2UgNDpuPXQ+ci5iLHIuYj1iLk1hdGgubWF4KHIuYix0KSxnJiZuJiYoci5iPWIuTWF0aC5tYXgoci5iLHIuYyksci5jPXIuYithKX19fWZ1bmN0aW9uIHp2dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQztyZXR1cm4gRT0iIix0Lmxlbmd0aD09MD9lLm5lKGlFZSxSbGUsLTEsLTEpOihDPSR5KHQpLHZuKEMuc3Vic3RyKDAsMyksImF0ICIpJiYoQz0oWG4oMyxDLmxlbmd0aCsxKSxDLnN1YnN0cigzKSkpLEM9Qy5yZXBsYWNlKC9cWy4qP1xdL2csIiIpLGY9Qy5pbmRleE9mKCIoIiksZj09LTE/KGY9Qy5pbmRleE9mKCJAIiksZj09LTE/KEU9QyxDPSIiKTooRT0keSgoWG4oZisxLEMubGVuZ3RoKzEpLEMuc3Vic3RyKGYrMSkpKSxDPSR5KChHYSgwLGYsQy5sZW5ndGgpLEMuc3Vic3RyKDAsZikpKSkpOihuPUMuaW5kZXhPZigiKSIsZiksRT0oR2EoZisxLG4sQy5sZW5ndGgpLEMuc3Vic3RyKGYrMSxuLShmKzEpKSksQz0keSgoR2EoMCxmLEMubGVuZ3RoKSxDLnN1YnN0cigwLGYpKSkpLGY9cGQoQyxjbCg0NikpLGYhPS0xJiYoQz0oWG4oZisxLEMubGVuZ3RoKzEpLEMuc3Vic3RyKGYrMSkpKSwoQy5sZW5ndGg9PTB8fHZuKEMsIkFub255bW91cyBmdW5jdGlvbiIpKSYmKEM9UmxlKSxnPVJxKEUsY2woNTgpKSxhPWg0ZShFLGNsKDU4KSxnLTEpLHc9LTEscj0tMSxvPWlFZSxnIT0tMSYmYSE9LTEmJihvPShHYSgwLGEsRS5sZW5ndGgpLEUuc3Vic3RyKDAsYSkpLHc9aXJ0KChHYShhKzEsZyxFLmxlbmd0aCksRS5zdWJzdHIoYSsxLGctKGErMSkpKSkscj1pcnQoKFhuKGcrMSxFLmxlbmd0aCsxKSxFLnN1YnN0cihnKzEpKSkpLGUubmUobyxDLHcscikpfWZ1bmN0aW9uIHdEbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMO2ZvcihFPW5ldyBHKGUpO0UuYTxFLmMuYy5sZW5ndGg7KXtzd2l0Y2godz1sKHJlKEUpLDEwKSxmPWwoUSh3LChOdCgpLFF1KSksMTcxKSxvPW51bGwsZi5nKXtjYXNlIDE6Y2FzZSAyOm89KFZtKCksUDYpO2JyZWFrO2Nhc2UgMzpjYXNlIDQ6bz0oVm0oKSxGVCl9aWYobylydCh3LChmdCgpLHNXKSwoVm0oKSxQNikpLG89PUZUP0RVKHcsZiwocW8oKSwkbCkpOm89PVA2JiZEVSh3LGYsKHFvKCksenUpKTtlbHNlIGlmKFA1KGwoUSh3LE1zKSwxMDEpKSYmdy5qLmMubGVuZ3RoIT0wKXtmb3IodD0hMCxMPW5ldyBHKHcuaik7TC5hPEwuYy5jLmxlbmd0aDspe2lmKEM9bChyZShMKSwxMiksIShDLmo9PShDdCgpLGFyKSYmQy5lLmMubGVuZ3RoLUMuZy5jLmxlbmd0aD4wfHxDLmo9PWVyJiZDLmUuYy5sZW5ndGgtQy5nLmMubGVuZ3RoPDApKXt0PSExO2JyZWFrfWZvcihhPW5ldyBHKEMuZyk7YS5hPGEuYy5jLmxlbmd0aDspaWYobj1sKHJlKGEpLDE4KSxnPWwoUShuLmQuaSxRdSksMTcxKSxnPT0oaGYoKSxYTCl8fGc9PWQ0KXt0PSExO2JyZWFrfWZvcihyPW5ldyBHKEMuZSk7ci5hPHIuYy5jLmxlbmd0aDspaWYobj1sKHJlKHIpLDE4KSxnPWwoUShuLmMuaSxRdSksMTcxKSxnPT0oaGYoKSxZTCl8fGc9PSRiKXt0PSExO2JyZWFrfX10JiZEVSh3LGYsKHFvKCksc00pKX19fWZ1bmN0aW9uIHlEbihlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3Q7Zm9yKG90PTAsej0wLEw9bmV3IEcodC5lKTtMLmE8TC5jLmMubGVuZ3RoOyl7Zm9yKEM9bChyZShMKSwxMCksQj0wLGc9MCx3PW4/bChRKEMsSVcpLDE3KS5hOmxvLGZlPXI/bChRKEMsT1cpLDE3KS5hOmxvLEU9Yi5NYXRoLm1heCh3LGZlKSxNZT1uZXcgRyhDLmopO01lLmE8TWUuYy5jLmxlbmd0aDspe2lmKFRlPWwocmUoTWUpLDEyKSwkZT1DLm4uYitUZS5uLmIrVGUuYS5iLHIpZm9yKGY9bmV3IEcoVGUuZyk7Zi5hPGYuYy5jLmxlbmd0aDspbz1sKHJlKGYpLDE4KSxKPW8uZCxWPUouaSx0IT1lLmFbVi5wXSYmKHRlPWIuTWF0aC5tYXgobChRKFYsSVcpLDE3KS5hLGwoUShWLE9XKSwxNykuYSksWmU9bChRKG8sKE50KCksSngpKSwxNykuYSxaZT49RSYmWmU+PXRlJiYoQis9Vi5uLmIrSi5uLmIrSi5hLmItJGUsKytnKSk7aWYobilmb3IoZj1uZXcgRyhUZS5lKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMTgpLEo9by5jLFY9Si5pLHQhPWUuYVtWLnBdJiYodGU9Yi5NYXRoLm1heChsKFEoVixJVyksMTcpLmEsbChRKFYsT1cpLDE3KS5hKSxaZT1sKFEobywoTnQoKSxKeCkpLDE3KS5hLFplPj1FJiZaZT49dGUmJihCKz1WLm4uYitKLm4uYitKLmEuYi0kZSwrK2cpKX1nPjAmJihvdCs9Qi9nLCsreil9ej4wPyh0LmE9YSpvdC96LHQuZz16KToodC5hPTAsdC5nPTApfWZ1bmN0aW9uIHhEbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3Q7Zm9yKG89ZS5mLmIsQj1vLmEsQz1vLmIsVj1lLmUuZyx6PWUuZS5mLEY1KGUuZSxvLmEsby5iKSxvdD1CL1YsU3Q9Qy96LEU9bmV3IG9yKEVIKGUuZSkpO0UuZSE9RS5pLmdjKCk7KXc9bChncihFKSwxMzUpLFV1KHcsdy5pKm90KSxHdSh3LHcuaipTdCk7Zm9yKFRlPW5ldyBvcihYYWUoZS5lKSk7VGUuZSE9VGUuaS5nYygpOylmZT1sKGdyKFRlKSwxMjMpLCRlPWZlLmksWmU9ZmUuaiwkZT4wJiZVdShmZSwkZSpvdCksWmU+MCYmR3UoZmUsWmUqU3QpO2ZvcihtQShlLmIsbmV3IHpnKSx0PW5ldyBidCxnPW5ldyBxbShuZXcgU3IoZS5jKS5hKTtnLmI7KWY9TncoZykscj1sKGYubGQoKSw3NCksbj1sKGYubWQoKSw0MDcpLmEsYT1sNihyLCExLCExKSxMPU5ndChjZyhyKSxRTihhKSxuKSxkUChMLGEpLE1lPUtndChyKSxNZSYmZ2ModCxNZSwwKT09LTEmJigkbih0LmMsTWUpLGthdChNZSwobXIoTC5iIT0wKSxsKEwuYS5hLmMsOCkpLG4pKTtmb3IodGU9bmV3IHFtKG5ldyBTcihlLmQpLmEpO3RlLmI7KUo9TncodGUpLHI9bChKLmxkKCksNzQpLG49bChKLm1kKCksNDA3KS5hLGE9bDYociwhMSwhMSksTD1OZ3QoRWIociksQU4oUU4oYSkpLG4pLEw9QU4oTCksZFAoTCxhKSxNZT1XZ3QociksTWUmJmdjKHQsTWUsMCk9PS0xJiYoJG4odC5jLE1lKSxrYXQoTWUsKG1yKEwuYiE9MCksbChMLmMuYi5jLDgpKSxuKSl9ZnVuY3Rpb24gcXZ0KGUsdCxuLHIpe3ZhciBhLG8sZixnLHc7cmV0dXJuIGc9bmV3IHprZSh0KSxmQ24oZyxyKSxhPSEwLGUmJmUucGYoKHBpKCkseHYpKSYmKG89bChlLm9mKChwaSgpLHh2KSksODgpLGE9bz09KEpzKCksSjEpfHxvPT11Y3x8bz09dmMpLHpidChnLCExKSxWdShnLmUuUmYoKSxuZXcgdjRlKGcsITEsYSkpLHVvZShnLGcuZiwodDEoKSxHYyksKEN0KCksUW4pKSx1b2UoZyxnLmYsS2MsRHIpLHVvZShnLGcuZyxHYyxlciksdW9lKGcsZy5nLEtjLGFyKSxiZHQoZyxRbiksYmR0KGcsRHIpLHdhdChnLGFyKSx3YXQoZyxlcikscHkoKSxmPWcuQS5IYygobWgoKSxBNCkpJiZnLkIuSGMoKFpsKCksYUYpKT9OMXQoZyk6bnVsbCxmJiZ4dW4oZy5hLGYpLHZEbihnKSx3N24oZykseTduKGcpLFVNbihnKSx3X24oZyksRzduKGcpLEpjZShnLFFuKSxKY2UoZyxEciksWFNuKGcpLHdMbihnKSxuJiYoZTVuKGcpLEs3bihnKSxKY2UoZyxhciksSmNlKGcsZXIpLHc9Zy5CLkhjKChabCgpLEZNKSksT3B0KGcsdyxRbiksT3B0KGcsdyxEciksTnB0KGcsdyxhciksTnB0KGcsdyxlciksSXMobmV3IGJuKG51bGwsbmV3IGtuKG5ldyBnaShnLmkpLDApKSxuZXcgRmMpLElzKEZpKG5ldyBibihudWxsLGI1ZShnLnIpLmEub2MoKSksbmV3IHhhKSxuZXcgQmEpLG94bihnKSxnLmUuUGYoZy5vKSxJcyhuZXcgYm4obnVsbCxiNWUoZy5yKS5hLm9jKCkpLG5ldyBnYSkpLGcub31mdW5jdGlvbiBrRG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKO2ZvcihFPWdzLHI9bmV3IEcoZS5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KXQ9bChyZShyKSw4NiksRT1iLk1hdGgubWluKEUsdC5kLmYuZy5jK3QuZS5hKTtmb3Ioej1uZXcgb3MsZj1uZXcgRyhlLmEuYSk7Zi5hPGYuYy5jLmxlbmd0aDspbz1sKHJlKGYpLDE5NCksby5pPUUsby5lPT0wJiZDcyh6LG8sei5jLmIsei5jKTtmb3IoO3ouYiE9MDspe2ZvcihvPWwoei5iPT0wP251bGw6KG1yKHouYiE9MCksYWYoeix6LmEuYSkpLDE5NCksYT1vLmYuZy5jLEI9by5hLmEuZWMoKS5LYygpO0IuT2IoKTspQz1sKEIuUGIoKSw4NiksSj1vLmkrQy5lLmEsQy5kLmd8fEMuZy5jPEo/Qy5vPUo6Qy5vPUMuZy5jO2ZvcihhLT1vLmYubyxvLmIrPWEsZS5jPT0oSnMoKSx2Yyl8fGUuYz09UTE/by5jKz1hOm8uYy09YSxMPW8uYS5hLmVjKCkuS2MoKTtMLk9iKCk7KWZvcihDPWwoTC5QYigpLDg2KSx3PUMuZi5LYygpO3cuT2IoKTspZz1sKHcuUGIoKSw4NiksVWcoZS5jKT9WPWUuZi55ZihDLGcpOlY9ZS5mLnpmKEMsZyksZy5kLmk9Yi5NYXRoLm1heChnLmQuaSxDLm8rQy5nLmIrVi1nLmUuYSksZy5rfHwoZy5kLmk9Yi5NYXRoLm1heChnLmQuaSxnLmcuYy1nLmUuYSkpLC0tZy5kLmUsZy5kLmU9PTAmJnVpKHosZy5kKX1mb3Iobj1uZXcgRyhlLmEuYik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDg2KSx0LmcuYz10Lm99ZnVuY3Rpb24gRURuKGUpe3ZhciB0LG4scixhLG8sZixnLHc7c3dpdGNoKGc9ZS5iLHQ9ZS5hLGwoUShlLChkVSgpLEFfZSkpLDQzNSkuZyl7Y2FzZSAwOlZzKGcsbmV3IFZ0KG5ldyBacikpO2JyZWFrO2Nhc2UgMTpkZWZhdWx0OlZzKGcsbmV3IFZ0KG5ldyBaaSkpfXN3aXRjaChsKFEoZSxTX2UpLDQzNikuZyl7Y2FzZSAxOlZzKGcsbmV3IHduKSxWcyhnLG5ldyBudSksVnMoZyxuZXcgb2QpO2JyZWFrO2Nhc2UgMDpkZWZhdWx0OlZzKGcsbmV3IHduKSxWcyhnLG5ldyAkZyl9c3dpdGNoKGwoUShlLE1fZSksMjU3KS5nKXtjYXNlIDA6dz1uZXcgJDA7YnJlYWs7Y2FzZSAxOnc9bmV3IFloO2JyZWFrO2Nhc2UgMjp3PW5ldyB3MTticmVhaztjYXNlIDM6dz1uZXcgRGw7YnJlYWs7Y2FzZSA1Onc9bmV3IEU1KG5ldyB3MSk7YnJlYWs7Y2FzZSA0Onc9bmV3IEU1KG5ldyBZaCk7YnJlYWs7Y2FzZSA3Onc9bmV3IEwzZShuZXcgRTUobmV3IFloKSxuZXcgRTUobmV3IHcxKSk7YnJlYWs7Y2FzZSA4Onc9bmV3IEwzZShuZXcgRTUobmV3IERsKSxuZXcgRTUobmV3IHcxKSk7YnJlYWs7Y2FzZSA2OmRlZmF1bHQ6dz1uZXcgRTUobmV3IERsKX1mb3IoZj1uZXcgRyhnKTtmLmE8Zi5jLmMubGVuZ3RoOyl7Zm9yKG89bChyZShmKSwxNzYpLHI9MCxhPTAsbj1uZXcgY2EocHQocikscHQoYSkpO2lBbih0LG8scixhKTspbj1sKHcuVmUobixvKSw0Mikscj1sKG4uYSwxNykuYSxhPWwobi5iLDE3KS5hO2Vfbih0LG8scixhKX19ZnVuY3Rpb24gSHZ0KGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdDtmb3Iobi5VZyhteXQsMSksQj0oUWkoKSxQZGUpLGUuYT09KGtBKCksalcpJiYoQj1uSWUpLEM9MCxDbigpLHQuamQobmV3IE5pZShCKSksbz10LmdjKCksZz10LmZkKHQuZ2MoKSksRT0hMDtFJiZnLlNiKCk7KVRlPWwoZy5VYigpLDQwKSxsKFEoVGUsQiksMTcpLmE9PTA/LS1vOkU9ITE7aWYob3Q9dC5rZCgwLG8pLGY9bmV3IGRhZShvdCksb3Q9dC5rZChvLHQuZ2MoKSksdz1uZXcgZGFlKG90KSxmLmI9PTApZm9yKEo9UnIodywwKTtKLmIhPUouZC5jOylWPWwoQnIoSiksNDApLHJ0KFYscE0scHQoQysrKSk7ZWxzZSBmb3IoTD1mLmIsWmU9UnIoZiwwKTtaZS5iIT1aZS5kLmM7KXtmb3IoJGU9bChCcihaZSksNDApLHJ0KCRlLHBNLHB0KEMrKykpLHI9cGNlKCRlKSxIdnQoZSxyLG4uZWgoMS9MfDApKSwkbShyLF81ZShuZXcgTmllKHBNKSkpLHo9bmV3IG9zLE1lPVJyKHIsMCk7TWUuYiE9TWUuZC5jOylmb3IoVGU9bChCcihNZSksNDApLGZlPVJyKCRlLmQsMCk7ZmUuYiE9ZmUuZC5jOyl0ZT1sKEJyKGZlKSw2NSksdGUuYz09VGUmJkNzKHosdGUsei5jLmIsei5jKTtmb3IoQ2goJGUuZCksS2EoJGUuZCx6KSxnPVJyKHcsdy5iKSxhPSRlLmQuYixFPSEwOzA8YSYmRSYmZy5TYigpOylUZT1sKGcuVWIoKSw0MCksbChRKFRlLEIpLDE3KS5hPT0wPyhydChUZSxwTSxwdChDKyspKSwtLWEsZy5RYigpKTpFPSExfW4uVmcoKX1mdW5jdGlvbiBURG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHo7Zm9yKEw9emUoR2UoYXQoZSwoU2IoKSxlZ2UpKSkpLFJ0KEJ0KGF0KGUsRkllKSkpJiYoQz1sKGF0KGUsKEg1KCksWTYpKSwyNyksbz1sKE9lKEE1ZShsKE9lKCghQy5lJiYoQy5lPW5ldyBMbihqcyxDLDcsNCkpLEMuZSksKCFDLmUmJihDLmU9bmV3IExuKGpzLEMsNyw0KSksQy5lKS5pLTEpLDc0KSksMCksMjcpLHI9bChPZShBNWUobChPZSgoIUMuZSYmKEMuZT1uZXcgTG4oanMsQyw3LDQpKSxDLmUpLDApLDc0KSksMCksMjcpLGY9bmV3IGx0KG8uaStvLmcvMixvLmorby5mLzIpLGE9bmV3IGx0KHIuaStyLmcvMixyLmorci5mLzIpLG49TCxuPD0wJiYobis9aXYpLEI9Yi5NYXRoLmFjb3MoKGYuYSphLmErZi5iKmEuYikvKGIuTWF0aC5zcXJ0KGYuYSpmLmErZi5iKmYuYikqYi5NYXRoLnNxcnQoYS5hKmEuYSthLmIqYS5iKSkpLEI8PTAmJihCKz1pdiksdD1iLk1hdGguYXRhbjIoZi5iLGYuYSksdDw9MCYmKHQrPWl2KSxMPWxDZS0odC1uK0IvMikpLHc9bmV3IG9yKCghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKSk7dy5lIT13LmkuZ2MoKTspZz1sKGdyKHcpLDI3KSxFPW5ldyBsdChnLmkrZy5nLzIsZy5qK2cuZi8yKSx6PUUuYSpiLk1hdGguY29zKEwpLUUuYipiLk1hdGguc2luKEwpLEUuYj1FLmEqYi5NYXRoLnNpbihMKStFLmIqYi5NYXRoLmNvcyhMKSxFLmE9eixRaChnLEUuYS1nLmcvMixFLmItZy5mLzIpfWZ1bmN0aW9uIENEbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWU7Zm9yKHQuVWcoIkludmVydGVkIHBvcnQgcHJlcHJvY2Vzc2luZyIsMSksQz1lLmIsRT1uZXcgVWEoQywwKSxuPW51bGwsTWU9bmV3IGJ0O0UuYjxFLmQuZ2MoKTspe2ZvcihUZT1uLG49KG1yKEUuYjxFLmQuZ2MoKSksbChFLmQuWGIoRS5jPUUuYisrKSwzMCkpLHo9bmV3IEcoTWUpO3ouYTx6LmMuYy5sZW5ndGg7KUw9bChyZSh6KSwxMCksVmEoTCxUZSk7Zm9yKE1lLmMubGVuZ3RoPTAsVj1uZXcgRyhuLmEpO1YuYTxWLmMuYy5sZW5ndGg7KWlmKEw9bChyZShWKSwxMCksTC5rPT0oWm4oKSxQcykmJlA1KGwoUShMLChOdCgpLE1zKSksMTAxKSkpe2ZvcihmZT1ya2UoTCwocW8oKSwkbCksKEN0KCksYXIpKS5LYygpO2ZlLk9iKCk7KWZvcihKPWwoZmUuUGIoKSwxMiksdz1KLmUsZz1sKGoxKHcsV2UodTFlLEJoZSwxOCx3LmMubGVuZ3RoLDAsMSkpLDQ4MyksYT1nLG89MCxmPWEubGVuZ3RoO288ZjsrK28pcj1hW29dLFdBbihlLEoscixNZSk7Zm9yKHRlPXJrZShMLHp1LGVyKS5LYygpO3RlLk9iKCk7KWZvcihKPWwodGUuUGIoKSwxMiksdz1KLmcsZz1sKGoxKHcsV2UodTFlLEJoZSwxOCx3LmMubGVuZ3RoLDAsMSkpLDQ4MyksYT1nLG89MCxmPWEubGVuZ3RoO288ZjsrK28pcj1hW29dLEtBbihlLEoscixNZSl9fWZvcihCPW5ldyBHKE1lKTtCLmE8Qi5jLmMubGVuZ3RoOylMPWwocmUoQiksMTApLFZhKEwsbik7dC5WZygpfWZ1bmN0aW9uIEFsZShlLHQsbixyLGEsbyxmKXt2YXIgZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWU7Zm9yKEI9bnVsbCxyPT0oU3coKSxIYik/Qj10OnI9PUs2JiYoQj1uKSxKPUIuYS5lYygpLktjKCk7Si5PYigpOyl7Zm9yKFY9bChKLlBiKCksMTIpLHRlPUljKGhlKGxlKEVhLDEpLGR0LDgsMCxbVi5pLm4sVi5uLFYuYV0pKS5iLE1lPW5ldyBLcyxnPW5ldyBLcyxFPW5ldyBOMShWLmIpO0xjKEUuYSl8fExjKEUuYik7KWlmKHc9bChMYyhFLmEpP3JlKEUuYSk6cmUoRS5iKSwxOCksUnQoQnQoUSh3LChmdCgpLFcxKSkpKT09YSYmZ2Mobyx3LDApIT0tMSl7aWYody5kPT1WP2ZlPXcuYzpmZT13LmQsVGU9SWMoaGUobGUoRWEsMSksZHQsOCwwLFtmZS5pLm4sZmUubixmZS5hXSkpLmIsYi5NYXRoLmFicyhUZS10ZSk8LjIpY29udGludWU7VGU8dGU/dC5hLl9iKGZlKT9uYShNZSxuZXcgY2EoSGIsdykpOm5hKE1lLG5ldyBjYShLNix3KSk6dC5hLl9iKGZlKT9uYShnLG5ldyBjYShIYix3KSk6bmEoZyxuZXcgY2EoSzYsdykpfWlmKE1lLmEuZ2MoKT4xKWZvcih6PW5ldyBJa2UoVixNZSxyKSx0byhNZSxuZXcgSmV0KGUseikpLCRuKGYuYyx6KSxMPU1lLmEuZWMoKS5LYygpO0wuT2IoKTspQz1sKEwuUGIoKSw0MiksYWwobyxDLmIpO2lmKGcuYS5nYygpPjEpZm9yKHo9bmV3IElrZShWLGcsciksdG8oZyxuZXcgWmV0KGUseikpLCRuKGYuYyx6KSxMPWcuYS5lYygpLktjKCk7TC5PYigpOylDPWwoTC5QYigpLDQyKSxhbChvLEMuYil9fWZ1bmN0aW9uIFNEbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmU7aWYoSj1lLm4sdGU9ZS5vLEI9ZS5kLEw9emUoR2UoUHkoZSwoTnQoKSxvZGUpKSkpLHQpe2ZvcihDPUwqKHQuZ2MoKS0xKSx6PTAsdz10LktjKCk7dy5PYigpOylmPWwody5QYigpLDEwKSxDKz1mLm8uYSx6PWIuTWF0aC5tYXgoeixmLm8uYik7Zm9yKGZlPUouYS0oQy10ZS5hKS8yLG89Si5iLUIuZCt6LHI9dGUuYS8odC5nYygpKzEpLGE9cixnPXQuS2MoKTtnLk9iKCk7KWY9bChnLlBiKCksMTApLGYubi5hPWZlLGYubi5iPW8tZi5vLmIsZmUrPWYuby5hK0wsRT1RMnQoZiksRS5uLmE9Zi5vLmEvMi1FLmEuYSxFLm4uYj1mLm8uYixWPWwoUShmLChmdCgpLHJXKSksMTIpLFYuZS5jLmxlbmd0aCtWLmcuYy5sZW5ndGg9PTEmJihWLm4uYT1hLVYuYS5hLFYubi5iPTAsTWMoVixlKSksYSs9cn1pZihuKXtmb3IoQz1MKihuLmdjKCktMSksej0wLHc9bi5LYygpO3cuT2IoKTspZj1sKHcuUGIoKSwxMCksQys9Zi5vLmEsej1iLk1hdGgubWF4KHosZi5vLmIpO2ZvcihmZT1KLmEtKEMtdGUuYSkvMixvPUouYit0ZS5iK0IuYS16LHI9dGUuYS8obi5nYygpKzEpLGE9cixnPW4uS2MoKTtnLk9iKCk7KWY9bChnLlBiKCksMTApLGYubi5hPWZlLGYubi5iPW8sZmUrPWYuby5hK0wsRT1RMnQoZiksRS5uLmE9Zi5vLmEvMi1FLmEuYSxFLm4uYj0wLFY9bChRKGYsKGZ0KCksclcpKSwxMiksVi5lLmMubGVuZ3RoK1YuZy5jLmxlbmd0aD09MSYmKFYubi5hPWEtVi5hLmEsVi5uLmI9dGUuYixNYyhWLGUpKSxhKz1yfX1mdW5jdGlvbiBfRG4oZSx0KXt2YXIgbixyLGEsbyxmLGc7aWYobChRKHQsKGZ0KCksTHUpKSwyMSkuSGMoKEhvKCksdmYpKSl7Zm9yKGc9bmV3IEcodC5hKTtnLmE8Zy5jLmMubGVuZ3RoOylvPWwocmUoZyksMTApLG8uaz09KFpuKCksUHMpJiYoYT1sKFEobywoTnQoKSx2VykpLDE0MCksZS5jPWIuTWF0aC5taW4oZS5jLG8ubi5hLWEuYiksZS5hPWIuTWF0aC5tYXgoZS5hLG8ubi5hK28uby5hK2EuYyksZS5kPWIuTWF0aC5taW4oZS5kLG8ubi5iLWEuZCksZS5iPWIuTWF0aC5tYXgoZS5iLG8ubi5iK28uby5iK2EuYSkpO2ZvcihmPW5ldyBHKHQuYSk7Zi5hPGYuYy5jLmxlbmd0aDspaWYobz1sKHJlKGYpLDEwKSxvLmshPShabigpLFBzKSlzd2l0Y2goby5rLmcpe2Nhc2UgMjppZihyPWwoUShvLChOdCgpLFF1KSksMTcxKSxyPT0oaGYoKSwkYikpe28ubi5hPWUuYy0xMCxuZ3QobyxuZXcgYmopLkpiKG5ldyBRV2UobykpO2JyZWFrfWlmKHI9PWQ0KXtvLm4uYT1lLmErMTAsbmd0KG8sbmV3IHZaKS5KYihuZXcgSldlKG8pKTticmVha31pZihuPWwoUShvLGh2KSwzMTEpLG49PShlcCgpLEY2KSl7ZHZ0KG8pLkpiKG5ldyBaV2UobykpLG8ubi5iPWUuZC0xMDticmVha31pZihuPT1VeCl7ZHZ0KG8pLkpiKG5ldyBlWWUobykpLG8ubi5iPWUuYisxMDticmVha31icmVhaztkZWZhdWx0OnRocm93IHVlKG5ldyBZbigiVGhlIG5vZGUgdHlwZSAiK28uaysiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlICIra09uKSl9fX1mdW5jdGlvbiBBRG4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2Zvcih3PW5ldyBsdChyLmkrci5nLzIsci5qK3IuZi8yKSx6PWx2dChyKSxWPWwoYXQodCwoTnQoKSxNcykpLDEwMSksdGU9bChhdChyLFZUKSw2NCksTXR0KGZkdChyKSxtNCl8fChyLmk9PTAmJnIuaj09MD9KPTA6Sj1xeG4ocix0ZSksSGkocixtNCxKKSksRT1uZXcgbHQodC5nLHQuZiksYT12UChyLFYsdGUseixFLHcsbmV3IGx0KHIuZyxyLmYpLGwoUShuLFJoKSw4OCksbikscnQoYSwoZnQoKSx6aSksciksbz1sKGp0KGEuaiwwKSwxMiksbShvLEdfbihyKSkscnQoYSx2NCwoUmwoKSx1bihZYikpKSxMPWwoYXQodCx2NCksMTgxKS5IYyh2cCksZz1uZXcgb3IoKCFyLm4mJihyLm49bmV3IG50KGVjLHIsMSw3KSksci5uKSk7Zy5lIT1nLmkuZ2MoKTspaWYoZj1sKGdyKGcpLDEzNSksIVJ0KEJ0KGF0KGYsbXYpKSkmJmYuYSYmKEI9T2NlKGYpLHZ0KG8uZixCKSwhTCkpc3dpdGNoKEM9MCxXXyhsKGF0KHQsdjQpLDIxKSkmJihDPW05ZShuZXcgbHQoZi5pLGYuaiksbmV3IGx0KGYuZyxmLmYpLG5ldyBsdChyLmcsci5mKSwwLHRlKSksdGUuZyl7Y2FzZSAyOmNhc2UgNDpCLm8uYT1DO2JyZWFrO2Nhc2UgMTpjYXNlIDM6Qi5vLmI9Q31ydChhLEdULEdlKGF0KGRzKHQpLEdUKSkpLHJ0KGEsS1QsR2UoYXQoZHModCksS1QpKSkscnQoYSx5NCxHZShhdChkcyh0KSx5NCkpKSx2dChuLmEsYSksa2koZS5hLHIsYSl9ZnVuY3Rpb24gTERuKGUsdCxuLHIsYSxvKXt2YXIgZixnLHcsRSxDLEw7Zm9yKEU9bmV3IGd1LHBjKEUsdCksbGEoRSxsKGF0KHQsKE50KCksVlQpKSw2NCkpLHJ0KEUsKGZ0KCksemkpLHQpLE1jKEUsbiksTD1FLm8sTC5hPXQuZyxMLmI9dC5mLEM9RS5uLEMuYT10LmksQy5iPXQuaixraShlLmEsdCxFKSxmPVc1KGZjKERjKG5ldyBibihudWxsLCghdC5lJiYodC5lPW5ldyBMbihqcyx0LDcsNCkpLG5ldyBrbih0LmUsMTYpKSksbmV3IGxqKSxuZXcgUTcpLG5ldyBxV2UodCkpLGZ8fChmPVc1KGZjKERjKG5ldyBibihudWxsLCghdC5kJiYodC5kPW5ldyBMbihqcyx0LDgsNSkpLG5ldyBrbih0LmQsMTYpKSksbmV3IEg5KSxuZXcgdVMpLG5ldyBIV2UodCkpKSxmfHwoZj1XNShuZXcgYm4obnVsbCwoIXQuZSYmKHQuZT1uZXcgTG4oanMsdCw3LDQpKSxuZXcga24odC5lLDE2KSkpLG5ldyBHSikpLHJ0KEUseEIsKEhuKCksISFmKSksWUxuKEUsbyxhLGwoYXQodCxwMyksOCkpLHc9bmV3IG9yKCghdC5uJiYodC5uPW5ldyBudChlYyx0LDEsNykpLHQubikpO3cuZSE9dy5pLmdjKCk7KWc9bChncih3KSwxMzUpLCFSdChCdChhdChnLG12KSkpJiZnLmEmJnZ0KEUuZixPY2UoZykpO3N3aXRjaChhLmcpe2Nhc2UgMjpjYXNlIDE6KEUuaj09KEN0KCksUW4pfHxFLmo9PURyKSYmci5GYygoSG8oKSxCNikpO2JyZWFrO2Nhc2UgNDpjYXNlIDM6KEUuaj09KEN0KCksYXIpfHxFLmo9PWVyKSYmci5GYygoSG8oKSxCNikpfXJldHVybiBFfWZ1bmN0aW9uIE1EbihlLHQsbixyLGEpe3ZhciBvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm47Zm9yKE1lPTAsVj0wLHo9MCxCPTEsVGU9bmV3IG9yKCghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKSk7VGUuZSE9VGUuaS5nYygpOyl0ZT1sKGdyKFRlKSwyNyksQis9WGcobmV3IGhyKGRyKGNwKHRlKS5hLktjKCksbmV3IGopKSksY249dGUuZyxWPWIuTWF0aC5tYXgoVixjbiksTD10ZS5mLHo9Yi5NYXRoLm1heCh6LEwpLE1lKz1jbipMO2ZvcihKPSghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKS5pLGY9TWUrMipyKnIqQipKLG89Yi5NYXRoLnNxcnQoZiksdz1iLk1hdGgubWF4KG8qbixWKSxnPWIuTWF0aC5tYXgoby9uLHopLGZlPW5ldyBvcigoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkpO2ZlLmUhPWZlLmkuZ2MoKTspdGU9bChncihmZSksMjcpLGFuPWEuYisoSmwodCwyNikqaUwrSmwodCwyNykqc0wpKih3LXRlLmcpLEJuPWEuYisoSmwodCwyNikqaUwrSmwodCwyNykqc0wpKihnLXRlLmYpLFV1KHRlLGFuKSxHdSh0ZSxCbik7Zm9yKFN0PXcrKGEuYithLmMpLG90PWcrKGEuZCthLmEpLFplPW5ldyBvcigoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkpO1plLmUhPVplLmkuZ2MoKTspZm9yKCRlPWwoZ3IoWmUpLDI3KSxDPW5ldyBocihkcihjcCgkZSkuYS5LYygpLG5ldyBqKSk7anIoQyk7KUU9bCh4cihDKSw3NCkscUEoRSl8fFBJbihFLHQsU3Qsb3QpO1N0Kz1hLmIrYS5jLG90Kz1hLmQrYS5hLEd3KGUsU3Qsb3QsITEsITApfWZ1bmN0aW9uIHprZShlKXt2YXIgdDtpZih0aGlzLnI9dXBuKG5ldyBTYSxuZXcgUG8pLHRoaXMuYj1uZXcgTEEobChYcihPbyksMjk3KSksdGhpcy5wPW5ldyBMQShsKFhyKE9vKSwyOTcpKSx0aGlzLmk9bmV3IExBKGwoWHIodzd0KSwyOTcpKSx0aGlzLmU9ZSx0aGlzLm89bmV3IEVvKGUuTWYoKSksdGhpcy5EPWUuWWYoKXx8UnQoQnQoZS5vZigocGkoKSxLQikpKSksdGhpcy5BPWwoZS5vZigocGkoKSxrdikpLDIxKSx0aGlzLkI9bChlLm9mKFViKSwyMSksdGhpcy5xPWwoZS5vZihfTSksMTAxKSx0aGlzLnU9bChlLm9mKFM0KSwyMSksIVF4bih0aGlzLnUpKXRocm93IHVlKG5ldyBWcCgiSW52YWxpZCBwb3J0IGxhYmVsIHBsYWNlbWVudDogIit0aGlzLnUpKTtpZih0aGlzLnY9UnQoQnQoZS5vZihDTmUpKSksdGhpcy5qPWwoZS5vZihyNyksMjEpLCFTVG4odGhpcy5qKSl0aHJvdyB1ZShuZXcgVnAoIkludmFsaWQgbm9kZSBsYWJlbCBwbGFjZW1lbnQ6ICIrdGhpcy5qKSk7dGhpcy5uPWwoQkEoZSxmTmUpLDEwNyksdGhpcy5rPXplKEdlKEJBKGUsaVkpKSksdGhpcy5kPXplKEdlKEJBKGUsTU5lKSkpLHRoaXMudz16ZShHZShCQShlLFBOZSkpKSx0aGlzLnM9emUoR2UoQkEoZSxETmUpKSksdGhpcy50PXplKEdlKEJBKGUsSU5lKSkpLHRoaXMuQz1sKEJBKGUsT05lKSwxNDApLHRoaXMuYz0yKnRoaXMuZCx0PSF0aGlzLkIuSGMoKFpsKCksc0YpKSx0aGlzLmY9bmV3IERBKDAsdCwwKSx0aGlzLmc9bmV3IERBKDEsdCwwKSxYaWUodGhpcy5mLCh0MSgpLCR1KSx0aGlzLmcpfWZ1bmN0aW9uIEREbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmU7Zm9yKHQuVWcoIkNvbW1lbnQgcHJlLXByb2Nlc3NpbmciLDEpLG49MCx3PW5ldyBHKGUuYSk7dy5hPHcuYy5jLmxlbmd0aDspaWYoZz1sKHJlKHcpLDEwKSxSdChCdChRKGcsKE50KCksUUwpKSkpKXtmb3IoKytuLGE9MCxyPW51bGwsRT1udWxsLFY9bmV3IEcoZy5qKTtWLmE8Vi5jLmMubGVuZ3RoOylCPWwocmUoViksMTIpLGErPUIuZS5jLmxlbmd0aCtCLmcuYy5sZW5ndGgsQi5lLmMubGVuZ3RoPT0xJiYocj1sKGp0KEIuZSwwKSwxOCksRT1yLmMpLEIuZy5jLmxlbmd0aD09MSYmKHI9bChqdChCLmcsMCksMTgpLEU9ci5kKTtpZihhPT0xJiZFLmUuYy5sZW5ndGgrRS5nLmMubGVuZ3RoPT0xJiYhUnQoQnQoUShFLmksUUwpKSkpdUluKGcscixFLEUuaSksUV8odyk7ZWxzZXtmb3IoZmU9bmV3IGJ0LHo9bmV3IEcoZy5qKTt6LmE8ei5jLmMubGVuZ3RoOyl7Zm9yKEI9bChyZSh6KSwxMiksTD1uZXcgRyhCLmcpO0wuYTxMLmMuYy5sZW5ndGg7KUM9bChyZShMKSwxOCksQy5kLmcuYy5sZW5ndGg9PTB8fCRuKGZlLmMsQyk7Zm9yKGY9bmV3IEcoQi5lKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMTgpLG8uYy5lLmMubGVuZ3RoPT0wfHwkbihmZS5jLG8pfWZvcih0ZT1uZXcgRyhmZSk7dGUuYTx0ZS5jLmMubGVuZ3RoOylKPWwocmUodGUpLDE4KSxVdyhKLCEwKX19dC5fZygpJiZ0LmJoKCJGb3VuZCAiK24rIiBjb21tZW50IGJveGVzIiksdC5WZygpfWZ1bmN0aW9uIHFrZShlLHQpe0JpdCgpO3ZhciBuLHIsYSxvLGYsZyx3O2lmKHRoaXMuYT1uZXcgdnllKHRoaXMpLHRoaXMuYj1lLHRoaXMuYz10LHRoaXMuZj0kYWUoaWMoKEVsKCksaW8pLHQpKSx0aGlzLmYuZGMoKSlpZigoZz15eGUoaW8sZSkpPT10KWZvcih0aGlzLmU9ITAsdGhpcy5kPW5ldyBidCx0aGlzLmY9bmV3IEUkLHRoaXMuZi5GYyhjdiksbChWVShsTihpbyxBaChlKSksIiIpLDI5KT09ZSYmdGhpcy5mLkZjKEtfKGlvLEFoKGUpKSksYT1hbGUoaW8sZSkuS2MoKTthLk9iKCk7KXN3aXRjaChyPWwoYS5QYigpLDE3OSksa3coaWMoaW8scikpKXtjYXNlIDQ6e3RoaXMuZC5GYyhyKTticmVha31jYXNlIDU6e3RoaXMuZi5HYygkYWUoaWMoaW8scikpKTticmVha319ZWxzZSBpZihGbygpLGwodCw2OSkueGsoKSlmb3IodGhpcy5lPSEwLHRoaXMuZj1udWxsLHRoaXMuZD1uZXcgYnQsZj0wLHc9KGUuaT09bnVsbCYmU2QoZSksZS5pKS5sZW5ndGg7Zjx3OysrZilmb3Iocj0obj0oZS5pPT1udWxsJiZTZChlKSxlLmkpLGY+PTAmJmY8bi5sZW5ndGg/bltmXTpudWxsKSxvPXJ4KGljKGlvLHIpKTtvO289cngoaWMoaW8sbykpKW89PXQmJnRoaXMuZC5GYyhyKTtlbHNlIGt3KGljKGlvLHQpKT09MSYmZz8odGhpcy5mPW51bGwsdGhpcy5kPShreCgpLG5BdCkpOih0aGlzLmY9bnVsbCx0aGlzLmU9ITAsdGhpcy5kPShDbigpLG5ldyBEYSh0KSkpO2Vsc2UgdGhpcy5lPWt3KGljKGlvLHQpKT09NSx0aGlzLmYuRmIoc3BlKSYmKHRoaXMuZj1zcGUpfWZ1bmN0aW9uIFZ2dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWO2ZvcihuPTAscj11N24oZSx0KSxCPWUucyx6PWUudCxFPWwobCgkaShlLnIsdCksMjEpLDg3KS5LYygpO0UuT2IoKTspaWYodz1sKEUuUGIoKSwxMTcpLCEoIXcuY3x8dy5jLmQuYy5sZW5ndGg8PTApKXtzd2l0Y2goVj13LmIuTWYoKSxnPXcuYi5wZigocGkoKSxyaCkpP3plKEdlKHcuYi5vZihyaCkpKTowLEM9dy5jLEw9Qy5pLEwuYj0oZj1DLm4sQy5lLmErZi5iK2YuYyksTC5hPShvPUMubixDLmUuYitvLmQrby5hKSx0Lmcpe2Nhc2UgMTpMLmM9dy5hPyhWLmEtTC5iKS8yOlYuYStCLEwuZD1WLmIrZytyLFowKEMsKEJsKCksQmIpKSx2ZChDLChvbCgpLGExKSk7YnJlYWs7Y2FzZSAzOkwuYz13LmE/KFYuYS1MLmIpLzI6Vi5hK0IsTC5kPS1nLXItTC5hLFowKEMsKEJsKCksQmIpKSx2ZChDLChvbCgpLHcwKSk7YnJlYWs7Y2FzZSAyOkwuYz0tZy1yLUwuYix3LmE/KGE9ZS52P0wuYTpsKGp0KEMuZCwwKSwxODcpLk1mKCkuYixMLmQ9KFYuYi1hKS8yKTpMLmQ9Vi5iK3osWjAoQywoQmwoKSx2MCkpLHZkKEMsKG9sKCksRmIpKTticmVhaztjYXNlIDQ6TC5jPVYuYStnK3Isdy5hPyhhPWUudj9MLmE6bChqdChDLmQsMCksMTg3KS5NZigpLmIsTC5kPShWLmItYSkvMik6TC5kPVYuYit6LFowKEMsKEJsKCksRmQpKSx2ZChDLChvbCgpLEZiKSl9KHQ9PShDdCgpLFFuKXx8dD09RHIpJiYobj1iLk1hdGgubWF4KG4sTC5hKSl9bj4wJiYobChRbyhlLmIsdCksMTI3KS5hLmI9bil9ZnVuY3Rpb24gSURuKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDLEwsQix6LFYsSjtpZihCPXplKEdlKFEoZSwoTnQoKSxHVCkpKSksej16ZShHZShRKGUsS1QpKSksTD16ZShHZShRKGUseTQpKSksZz1lLm8sbz1sKGp0KGUuaiwwKSwxMiksZj1vLm4sSj1ZOW4obyxMKSwhIUope2lmKHQuSGMoKFJsKCksdnApKSlzd2l0Y2gobChRKGUsKGZ0KCksV2MpKSw2NCkuZyl7Y2FzZSAxOkouYz0oZy5hLUouYikvMi1mLmEsSi5kPXo7YnJlYWs7Y2FzZSAzOkouYz0oZy5hLUouYikvMi1mLmEsSi5kPS16LUouYTticmVhaztjYXNlIDI6biYmby5lLmMubGVuZ3RoPT0wJiZvLmcuYy5sZW5ndGg9PTA/KEM9cj9KLmE6bChqdChvLmYsMCksNzIpLm8uYixKLmQ9KGcuYi1DKS8yLWYuYik6Si5kPWcuYit6LWYuYixKLmM9LUItSi5iO2JyZWFrO2Nhc2UgNDpuJiZvLmUuYy5sZW5ndGg9PTAmJm8uZy5jLmxlbmd0aD09MD8oQz1yP0ouYTpsKGp0KG8uZiwwKSw3Mikuby5iLEouZD0oZy5iLUMpLzItZi5iKTpKLmQ9Zy5iK3otZi5iLEouYz1CfWVsc2UgaWYodC5IYyhZYikpc3dpdGNoKGwoUShlLChmdCgpLFdjKSksNjQpLmcpe2Nhc2UgMTpjYXNlIDM6Si5jPWYuYStCO2JyZWFrO2Nhc2UgMjpjYXNlIDQ6biYmIW8uYz8oQz1yP0ouYTpsKGp0KG8uZiwwKSw3Mikuby5iLEouZD0oZy5iLUMpLzItZi5iKTpKLmQ9Zi5iK3p9Zm9yKGE9Si5kLEU9bmV3IEcoby5mKTtFLmE8RS5jLmMubGVuZ3RoOyl3PWwocmUoRSksNzIpLFY9dy5uLFYuYT1KLmMsVi5iPWEsYSs9dy5vLmIrTH19ZnVuY3Rpb24gT0RuKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdCxjbixhbixCbixqbjtmb3Iob3Q9bmV3IGJ0LFY9bmV3IEcoZS5iKTtWLmE8Vi5jLmMubGVuZ3RoOylmb3Ioej1sKHJlKFYpLDMwKSxmZT1uZXcgRyh6LmEpO2ZlLmE8ZmUuYy5jLmxlbmd0aDspaWYoSj1sKHJlKGZlKSwxMCksSi5rPT0oWm4oKSxVcykmJm5zKEosKGZ0KCksYVcpKSl7Zm9yKFRlPW51bGwsJGU9bnVsbCxNZT1udWxsLGFuPW5ldyBHKEouaik7YW4uYTxhbi5jLmMubGVuZ3RoOylzd2l0Y2goY249bChyZShhbiksMTIpLGNuLmouZyl7Y2FzZSA0OlRlPWNuO2JyZWFrO2Nhc2UgMjokZT1jbjticmVhaztkZWZhdWx0Ok1lPWNufWZvcihaZT1sKGp0KE1lLmcsMCksMTgpLEM9bmV3IEd6KFplLmEpLEU9bmV3IEVvKE1lLm4pLE9pKEUsSi5uKSxMPVJyKEMsMCksek8oTCxFKSxTdD1BTihaZS5hKSxCPW5ldyBFbyhNZS5uKSxPaShCLEoubiksQ3MoU3QsQixTdC5jLmIsU3QuYyksQm49bChRKEosYVcpLDEwKSxqbj1sKGp0KEJuLmosMCksMTIpLHc9bChqMShUZS5lLFdlKHUxZSxCaGUsMTgsMCwwLDEpKSw0ODMpLHI9dyxvPTAsZz1yLmxlbmd0aDtvPGc7KytvKXQ9cltvXSxGYSh0LGpuKSxBY2UodC5hLHQuYS5iLEMpO2Zvcih3PWtkKCRlLmcpLG49dyxhPTAsZj1uLmxlbmd0aDthPGY7KythKXQ9blthXSxwbyh0LGpuKSxBY2UodC5hLDAsU3QpO3BvKFplLG51bGwpLEZhKFplLG51bGwpLCRuKG90LmMsSil9Zm9yKHRlPW5ldyBHKG90KTt0ZS5hPHRlLmMuYy5sZW5ndGg7KUo9bChyZSh0ZSksMTApLFZhKEosbnVsbCl9ZnVuY3Rpb24gTkRuKCl7d2koZ0YsbmV3IHhyZSksd2koQVksbmV3IEgkKSx3aShwRixuZXcgUnJlKSx3aShWUGUsbmV3IFgkKSx3aSh6dCxuZXcgUzEpLHdpKGxlKEFsLDEpLG5ldyBRJCksd2koTnMsbmV3IGhrKSx3aShqeCxuZXcgRkkpLHdpKHp0LG5ldyBxUyksd2koenQsbmV3IG1yZSksd2koenQsbmV3IHZyZSksd2kodGEsbmV3IHA4KSx3aSh6dCxuZXcgUiQpLHdpKG1mLG5ldyBqJCksd2kobWYsbmV3IHdyZSksd2koenQsbmV3ICQkKSx3aShfVCxuZXcgeiQpLHdpKHp0LG5ldyBOSSksd2koenQsbmV3IEhTKSx3aSh6dCxuZXcga3JlKSx3aSh6dCxuZXcgRXJlKSx3aSh6dCxuZXcgVHJlKSx3aShsZShBbCwxKSxuZXcgQ3JlKSx3aSh6dCxuZXcgU3JlKSx3aSh6dCxuZXcgcSQpLHdpKG1mLG5ldyBfcmUpLHdpKG1mLG5ldyBBcmUpLHdpKHp0LG5ldyBMcmUpLHdpKHJvLG5ldyBNcmUpLHdpKHp0LG5ldyBEcmUpLHdpKHIzLG5ldyBWUyksd2koenQsbmV3IElyZSksd2koenQsbmV3IE9yZSksd2koenQsbmV3IE5yZSksd2koenQsbmV3IFByZSksd2kobWYsbmV3IEJyZSksd2kobWYsbmV3IEZyZSksd2koenQsbmV3IFYkKSx3aSh6dCxuZXcgVSQpLHdpKHp0LG5ldyBqcmUpLHdpKHp0LG5ldyBQSSksd2koenQsbmV3ICRyZSksd2koenQsbmV3IEckKSx3aShpMyxuZXcgenJlKSx3aSh6dCxuZXcgSyQpLHdpKHp0LG5ldyBxcmUpLHdpKHp0LG5ldyBXJCksd2koaTMsbmV3IFkkKSx3aShyMyxuZXcgQkkpLHdpKHp0LG5ldyB3NSksd2kocm8sbmV3IFVTKX1mdW5jdGlvbiBVdnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVjtzd2l0Y2goQz1uZXcgYmwsZS5hLmcpe2Nhc2UgMzpCPWwoUSh0LmUsKGZ0KCksZnYpKSwxNSksej1sKFEodC5qLGZ2KSwxNSksVj1sKFEodC5mLGZ2KSwxNSksbj1sKFEodC5lLHo2KSwxNSkscj1sKFEodC5qLHo2KSwxNSksYT1sKFEodC5mLHo2KSwxNSksZj1uZXcgYnQscmEoZixCKSx6LkpjKG5ldyBQZWUpLHJhKGYsbGYoeikpLHJhKGYsViksbz1uZXcgYnQscmEobyxuKSxyYShvLGxmKHIpKSxyYShvLGEpLHJ0KHQuZixmdixmKSxydCh0LmYsejYsbykscnQodC5mLEtMZSx0LmYpLHJ0KHQuZSxmdixudWxsKSxydCh0LmUsejYsbnVsbCkscnQodC5qLGZ2LG51bGwpLHJ0KHQuaix6NixudWxsKTticmVhaztjYXNlIDE6S2EoQyx0LmUuYSksdWkoQyx0LmkubiksS2EoQyxsZih0LmouYSkpLHVpKEMsdC5hLm4pLEthKEMsdC5mLmEpO2JyZWFrO2RlZmF1bHQ6S2EoQyx0LmUuYSksS2EoQyxsZih0LmouYSkpLEthKEMsdC5mLmEpfUNoKHQuZi5hKSxLYSh0LmYuYSxDKSxwbyh0LmYsdC5lLmMpLGc9bChRKHQuZSwoTnQoKSxjYykpLDc1KSxFPWwoUSh0LmosY2MpLDc1KSx3PWwoUSh0LmYsY2MpLDc1KSwoZ3x8RXx8dykmJihMPW5ldyBibCxnNWUoTCx3KSxnNWUoTCxFKSxnNWUoTCxnKSxydCh0LmYsY2MsTCkpLHBvKHQuaixudWxsKSxGYSh0LmosbnVsbCkscG8odC5lLG51bGwpLEZhKHQuZSxudWxsKSxWYSh0LmEsbnVsbCksVmEodC5pLG51bGwpLHQuZyYmVXZ0KGUsdC5nKX1mdW5jdGlvbiBHdnQoKXtHdnQ9VTt2YXIgZSx0LG47Zm9yKG5ldyBOTigxLDApLG5ldyBOTigxMCwwKSxuZXcgTk4oMCwwKSx2NnQ9V2UoTDBlLGR0LDI0NywxMSwwLDEpLGx2PVdlKGtmLEFkLDI4LDEwMCwxNSwxKSxvX2U9aGUobGUoTmEsMSksWm8sMjgsMTUsWzEsNSwyNSwxMjUsNjI1LDMxMjUsMTU2MjUsNzgxMjUsMzkwNjI1LDE5NTMxMjUsOTc2NTYyNSw0ODgyODEyNSwyNDQxNDA2MjUsMTIyMDcwMzEyNSw2MTAzNTE1NjI1LDMwNTE3NTc4MTI1LDE1MjU4Nzg5MDYyNSw3NjI5Mzk0NTMxMjUsMzgxNDY5NzI2NTYyNSwxOTA3MzQ4NjMyODEyNSw5NTM2NzQzMTY0MDYyNSw0NzY4MzcxNTgyMDMxMjUsMHg4Nzg2NzgzMjZlYWM5XSksY19lPVdlKFZyLGRpLDI4LG9fZS5sZW5ndGgsMTUsMSksdV9lPWhlKGxlKE5hLDEpLFpvLDI4LDE1LFsxLDEwLDEwMCxiMiwxZTQsb2hlLDFlNiwxZTcsMWU4LEpVLDFlMTAsMWUxMSwxZTEyLDFlMTMsMWUxNCwxZTE1LDFlMTZdKSxsX2U9V2UoVnIsZGksMjgsdV9lLmxlbmd0aCwxNSwxKSxoX2U9V2UoTDBlLGR0LDI0NywxMSwwLDEpLGU9MDtlPGhfZS5sZW5ndGg7ZSsrKXY2dFtlXT1uZXcgTk4oZSwwKSxoX2VbZV09bmV3IE5OKDAsZSksbHZbZV09NDg7Zm9yKDtlPGx2Lmxlbmd0aDtlKyspbHZbZV09NDg7Zm9yKG49MDtuPGNfZS5sZW5ndGg7bisrKWNfZVtuXT1nOWUob19lW25dKTtmb3IodD0wO3Q8bF9lLmxlbmd0aDt0KyspbF9lW3RdPWc5ZSh1X2VbdF0pO0dFKCl9ZnVuY3Rpb24gUERuKCl7ZnVuY3Rpb24gZSgpe3RoaXMub2JqPXRoaXMuY3JlYXRlT2JqZWN0KCl9cmV0dXJuIGUucHJvdG90eXBlLmNyZWF0ZU9iamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmNyZWF0ZShudWxsKX0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9ialt0XX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsbil7dGhpcy5vYmpbdF09bn0sZS5wcm90b3R5cGVbbGhlXT1mdW5jdGlvbih0KXtkZWxldGUgdGhpcy5vYmpbdF19LGUucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5vYmopfSxlLnByb3RvdHlwZS5lbnRyaWVzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5rZXlzKCksbj10aGlzLHI9MDtyZXR1cm57bmV4dDpmdW5jdGlvbigpe2lmKHI+PXQubGVuZ3RoKXJldHVybntkb25lOiEwfTt2YXIgYT10W3IrK107cmV0dXJue3ZhbHVlOlthLG4uZ2V0KGEpXSxkb25lOiExfX19fSxMU24oKXx8KGUucHJvdG90eXBlLmNyZWF0ZU9iamVjdD1mdW5jdGlvbigpe3JldHVybnt9fSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub2JqWyI6Iit0XX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsbil7dGhpcy5vYmpbIjoiK3RdPW59LGUucHJvdG90eXBlW2xoZV09ZnVuY3Rpb24odCl7ZGVsZXRlIHRoaXMub2JqWyI6Iit0XX0sZS5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiB0aGlzLm9iailuLmNoYXJDb2RlQXQoMCk9PTU4JiZ0LnB1c2gobi5zdWJzdHJpbmcoMSkpO3JldHVybiB0fSksZX1mdW5jdGlvbiBRaSgpe1FpPVUsZ009bmV3IFVpKE5FZSksbmV3IHZzKCJERVBUSCIscHQoMCkpLFBkZT1uZXcgdnMoIkZBTiIscHQoMCkpLG5JZT1uZXcgdnMoZ3l0LHB0KDApKSxWYj1uZXcgdnMoIlJPT1QiLChIbigpLCExKSksUmRlPW5ldyB2cygiTEVGVE5FSUdIQk9SIixudWxsKSxkVHQ9bmV3IHZzKCJSSUdIVE5FSUdIQk9SIixudWxsKSxCVz1uZXcgdnMoIkxFRlRTSUJMSU5HIixudWxsKSxqZGU9bmV3IHZzKCJSSUdIVFNJQkxJTkciLG51bGwpLE5kZT1uZXcgdnMoIkRVTU1ZIiwhMSksbmV3IHZzKCJMRVZFTCIscHQoMCkpLHNJZT1uZXcgdnMoIlJFTU9WQUJMRV9FREdFUyIsbmV3IG9zKSxQQj1uZXcgdnMoIlhDT09SIixwdCgwKSksQkI9bmV3IHZzKCJZQ09PUiIscHQoMCkpLEZXPW5ldyB2cygiTEVWRUxIRUlHSFQiLDApLGMxPW5ldyB2cygiTEVWRUxNSU4iLDApLGswPW5ldyB2cygiTEVWRUxNQVgiLDApLEJkZT1uZXcgdnMoIkdSQVBIX1hNSU4iLDApLEZkZT1uZXcgdnMoIkdSQVBIX1lNSU4iLDApLHJJZT1uZXcgdnMoIkdSQVBIX1hNQVgiLDApLGlJZT1uZXcgdnMoIkdSQVBIX1lNQVgiLDApLHRJZT1uZXcgdnMoIkNPTVBBQ1RfTEVWRUxfQVNDRU5TSU9OIiwhMSksT2RlPW5ldyB2cygiQ09NUEFDVF9DT05TVFJBSU5UUyIsbmV3IGJ0KSxkTT1uZXcgdnMoIklEIiwiIikscE09bmV3IHZzKCJQT1NJVElPTiIscHQoMCkpLEMyPW5ldyB2cygiUFJFTElNIiwwKSxKVD1uZXcgdnMoIk1PRElGSUVSIiwwKSxRVD1uZXcgVWkoUzN0KSxOQj1uZXcgVWkoXzN0KX1mdW5jdGlvbiBCRG4oZSl7a2tlKCk7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2lmKGU9PW51bGwpcmV0dXJuIG51bGw7aWYoTD1lLmxlbmd0aCo4LEw9PTApcmV0dXJuIiI7Zm9yKGc9TCUyNCx6PUwvMjR8MCxCPWchPTA/eisxOnosbz1udWxsLG89V2Uoa2YsQWQsMjgsQio0LDE1LDEpLEU9MCxDPTAsdD0wLG49MCxyPTAsZj0wLGE9MCx3PTA7dzx6O3crKyl0PWVbYSsrXSxuPWVbYSsrXSxyPWVbYSsrXSxDPShuJjE1KTw8MjQ+PjI0LEU9KHQmMyk8PDI0Pj4yNCxWPXQmLTEyOD8odD4+Ml4xOTIpPDwyND4+MjQ6dD4+Mjw8MjQ+PjI0LEo9biYtMTI4PyhuPj40XjI0MCk8PDI0Pj4yNDpuPj40PDwyND4+MjQsdGU9ciYtMTI4PyhyPj42XjI1Mik8PDI0Pj4yNDpyPj42PDwyND4+MjQsb1tmKytdPU4yW1ZdLG9bZisrXT1OMltKfEU8PDRdLG9bZisrXT1OMltDPDwyfHRlXSxvW2YrK109TjJbciY2M107cmV0dXJuIGc9PTg/KHQ9ZVthXSxFPSh0JjMpPDwyND4+MjQsVj10Ji0xMjg/KHQ+PjJeMTkyKTw8MjQ+PjI0OnQ+PjI8PDI0Pj4yNCxvW2YrK109TjJbVl0sb1tmKytdPU4yW0U8PDRdLG9bZisrXT02MSxvW2YrK109NjEpOmc9PTE2JiYodD1lW2FdLG49ZVthKzFdLEM9KG4mMTUpPDwyND4+MjQsRT0odCYzKTw8MjQ+PjI0LFY9dCYtMTI4Pyh0Pj4yXjE5Mik8PDI0Pj4yNDp0Pj4yPDwyND4+MjQsSj1uJi0xMjg/KG4+PjReMjQwKTw8MjQ+PjI0Om4+PjQ8PDI0Pj4yNCxvW2YrK109TjJbVl0sb1tmKytdPU4yW0p8RTw8NF0sb1tmKytdPU4yW0M8PDJdLG9bZisrXT02MSksSWYobywwLG8ubGVuZ3RoKX1mdW5jdGlvbiBGRG4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdztpZihlLmU9PTAmJmUucD4wJiYoZS5wPS0oZS5wLTEpKSxlLnA+bG8mJmM2ZSh0LGUucC1MYiksZj10LnEuZ2V0RGF0ZSgpLFlPKHQsMSksZS5rPj0wJiZDMm4odCxlLmspLGUuYz49MD9ZTyh0LGUuYyk6ZS5rPj0wPyh3PW5ldyBSN2UodC5xLmdldEZ1bGxZZWFyKCktTGIsdC5xLmdldE1vbnRoKCksMzUpLHI9MzUtdy5xLmdldERhdGUoKSxZTyh0LGIuTWF0aC5taW4ocixmKSkpOllPKHQsZiksZS5mPDAmJihlLmY9dC5xLmdldEhvdXJzKCkpLGUuYj4wJiZlLmY8MTImJihlLmYrPTEyKSxiaG4odCxlLmY9PTI0JiZlLmc/MDplLmYpLGUuaj49MCYmb3ZuKHQsZS5qKSxlLm4+PTAmJnd2bih0LGUubiksZS5pPj0wJiZRdHQodCxibyhtbyhLTihaYyh0LnEuZ2V0VGltZSgpKSxiMiksYjIpLGUuaSkpLGUuYSYmKGE9bmV3IFF6LGM2ZShhLGEucS5nZXRGdWxsWWVhcigpLUxiLTgwKSxmc2UoWmModC5xLmdldFRpbWUoKSksWmMoYS5xLmdldFRpbWUoKSkpJiZjNmUodCxhLnEuZ2V0RnVsbFllYXIoKS1MYisxMDApKSxlLmQ+PTApe2lmKGUuYz09LTEpbj0oNytlLmQtdC5xLmdldERheSgpKSU3LG4+MyYmKG4tPTcpLGc9dC5xLmdldE1vbnRoKCksWU8odCx0LnEuZ2V0RGF0ZSgpK24pLHQucS5nZXRNb250aCgpIT1nJiZZTyh0LHQucS5nZXREYXRlKCkrKG4+MD8tNzo3KSk7ZWxzZSBpZih0LnEuZ2V0RGF5KCkhPWUuZClyZXR1cm4hMX1yZXR1cm4gZS5vPmxvJiYobz10LnEuZ2V0VGltZXpvbmVPZmZzZXQoKSxRdHQodCxibyhaYyh0LnEuZ2V0VGltZSgpKSwoZS5vLW8pKjYwKmIyKSkpLCEwfWZ1bmN0aW9uIEt2dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGU7aWYoYT1RKHQsKGZ0KCksemkpKSwhIURlKGEsMjA3KSl7Zm9yKFY9bChhLDI3KSxKPXQuZSxCPW5ldyBFbyh0LmMpLG89dC5kLEIuYSs9by5iLEIuYis9by5kLCRlPWwoYXQoViwoTnQoKSx4VykpLDE4MSksdmwoJGUsKFpsKCksdVkpKSYmKHo9bChhdChWLFdNZSksMTA3KSxUaWUoeixvLmEpLG13ZSh6LG8uZCksQ2llKHosby5iKSx4OCh6LG8uYykpLG49bmV3IGJ0LEM9bmV3IEcodC5hKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3Iodz1sKHJlKEMpLDEwKSxEZShRKHcsemkpLDIwNyk/SERuKHcsQik6RGUoUSh3LHppKSwxOTMpJiYhSiYmKHI9bChRKHcsemkpLDEyMyksVGU9Tm10KHQsdyxyLmcsci5mKSxRaChyLFRlLmEsVGUuYikpLGZlPW5ldyBHKHcuaik7ZmUuYTxmZS5jLmMubGVuZ3RoOyl0ZT1sKHJlKGZlKSwxMiksSXMoRmkobmV3IGJuKG51bGwsbmV3IGtuKHRlLmcsMTYpKSxuZXcgVldlKHcpKSxuZXcgVVdlKG4pKTtpZihKKWZvcihmZT1uZXcgRyhKLmopO2ZlLmE8ZmUuYy5jLmxlbmd0aDspdGU9bChyZShmZSksMTIpLElzKEZpKG5ldyBibihudWxsLG5ldyBrbih0ZS5nLDE2KSksbmV3IEdXZShKKSksbmV3IEtXZShuKSk7Zm9yKE1lPWwoYXQoVixicCksMjIzKSxnPW5ldyBHKG4pO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwxOCksaURuKGYsTWUsQik7Zm9yKFZfbih0KSxFPW5ldyBHKHQuYSk7RS5hPEUuYy5jLmxlbmd0aDspdz1sKHJlKEUpLDEwKSxMPXcuZSxMJiZLdnQoZSxMKX19ZnVuY3Rpb24gV3Z0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6O2lmKCFsKGwoJGkoZS5yLHQpLDIxKSw4NykuZGMoKSl7aWYoZj1sKFFvKGUuYix0KSwxMjcpLHc9Zi5pLGc9Zi5uLEM9SnVlKGUsdCkscj13LmItZy5iLWcuYyxhPWYuYS5hLG89dy5jK2cuYix6PWUudywoQz09KHQ2KCksS2IpfHxDPT10RikmJmwobCgkaShlLnIsdCksMjEpLDg3KS5nYygpPT0xJiYoYT1DPT1LYj9hLTIqZS53OmEsQz1JTSkscjxhJiYhZS5CLkhjKChabCgpLGxZKSkpQz09S2I/KHorPShyLWEpLyhsKGwoJGkoZS5yLHQpLDIxKSw4NykuZ2MoKSsxKSxvKz16KTp6Kz0oci1hKS8obChsKCRpKGUucix0KSwyMSksODcpLmdjKCktMSk7ZWxzZSBzd2l0Y2gocjxhJiYoYT1DPT1LYj9hLTIqZS53OmEsQz1JTSksQy5nKXtjYXNlIDM6bys9KHItYSkvMjticmVhaztjYXNlIDQ6bys9ci1hO2JyZWFrO2Nhc2UgMDpuPShyLWEpLyhsKGwoJGkoZS5yLHQpLDIxKSw4NykuZ2MoKSsxKSx6Kz1iLk1hdGgubWF4KDAsbiksbys9ejticmVhaztjYXNlIDE6bj0oci1hKS8obChsKCRpKGUucix0KSwyMSksODcpLmdjKCktMSkseis9Yi5NYXRoLm1heCgwLG4pfWZvcihCPWwobCgkaShlLnIsdCksMjEpLDg3KS5LYygpO0IuT2IoKTspTD1sKEIuUGIoKSwxMTcpLEwuZS5hPW8rTC5kLmIsTC5lLmI9KEU9TC5iLEUucGYoKHBpKCkscmgpKT9FLmFnKCk9PShDdCgpLFFuKT8tRS5NZigpLmItemUoR2UoRS5vZihyaCkpKTp6ZShHZShFLm9mKHJoKSkpOkUuYWcoKT09KEN0KCksUW4pPy1FLk1mKCkuYjowKSxvKz1MLmQuYitMLmIuTWYoKS5hK0wuZC5jK3p9fWZ1bmN0aW9uIFl2dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWO2lmKCFsKGwoJGkoZS5yLHQpLDIxKSw4NykuZGMoKSl7aWYoZj1sKFFvKGUuYix0KSwxMjcpLHc9Zi5pLGc9Zi5uLEw9SnVlKGUsdCkscj13LmEtZy5kLWcuYSxhPWYuYS5iLG89dy5kK2cuZCxWPWUudyxFPWUuby5hLChMPT0odDYoKSxLYil8fEw9PXRGKSYmbChsKCRpKGUucix0KSwyMSksODcpLmdjKCk9PTEmJihhPUw9PUtiP2EtMiplLnc6YSxMPUlNKSxyPGEmJiFlLkIuSGMoKFpsKCksbFkpKSlMPT1LYj8oVis9KHItYSkvKGwobCgkaShlLnIsdCksMjEpLDg3KS5nYygpKzEpLG8rPVYpOlYrPShyLWEpLyhsKGwoJGkoZS5yLHQpLDIxKSw4NykuZ2MoKS0xKTtlbHNlIHN3aXRjaChyPGEmJihhPUw9PUtiP2EtMiplLnc6YSxMPUlNKSxMLmcpe2Nhc2UgMzpvKz0oci1hKS8yO2JyZWFrO2Nhc2UgNDpvKz1yLWE7YnJlYWs7Y2FzZSAwOm49KHItYSkvKGwobCgkaShlLnIsdCksMjEpLDg3KS5nYygpKzEpLFYrPWIuTWF0aC5tYXgoMCxuKSxvKz1WO2JyZWFrO2Nhc2UgMTpuPShyLWEpLyhsKGwoJGkoZS5yLHQpLDIxKSw4NykuZ2MoKS0xKSxWKz1iLk1hdGgubWF4KDAsbil9Zm9yKHo9bChsKCRpKGUucix0KSwyMSksODcpLktjKCk7ei5PYigpOylCPWwoei5QYigpLDExNyksQi5lLmE9KEM9Qi5iLEMucGYoKHBpKCkscmgpKT9DLmFnKCk9PShDdCgpLGVyKT8tQy5NZigpLmEtemUoR2UoQy5vZihyaCkpKTpFK3plKEdlKEMub2YocmgpKSk6Qy5hZygpPT0oQ3QoKSxlcik/LUMuTWYoKS5hOkUpLEIuZS5iPW8rQi5kLmQsbys9Qi5kLmQrQi5iLk1mKCkuYitCLmQuYStWfX1mdW5jdGlvbiBSRG4oZSx0KXt2YXIgbixyLGEsbyxmO2Zvcih0LlVnKCJQcm9jZXNzb3IgZGV0ZXJtaW5lIHRoZSBjb29yZHMgZm9yIGVhY2ggbGV2ZWwiLDEpLHI9bmV3IGJ0LGY9UnIoZS5iLDApO2YuYiE9Zi5kLmM7KXtmb3IoYT1sKEJyKGYpLDQwKTtsKFEoYSwoSGMoKSwkZCkpLDE3KS5hPnIuYy5sZW5ndGgtMTspdnQocixuZXcgY2EoeTYsaENlKSk7bj1sKFEoYSwkZCksMTcpLmEsVWcobChRKGUseTMpLDg4KSk/KGEuZS5hPHplKEdlKChTbihuLHIuYy5sZW5ndGgpLGwoci5jW25dLDQyKSkuYSkpJiZWZSgoU24obixyLmMubGVuZ3RoKSxsKHIuY1tuXSw0MikpLGEuZS5hKSxhLmUuYSthLmYuYT56ZShHZSgoU24obixyLmMubGVuZ3RoKSxsKHIuY1tuXSw0MikpLmIpKSYmY3QoKFNuKG4sci5jLmxlbmd0aCksbChyLmNbbl0sNDIpKSxhLmUuYSthLmYuYSkpOihhLmUuYjx6ZShHZSgoU24obixyLmMubGVuZ3RoKSxsKHIuY1tuXSw0MikpLmEpKSYmVmUoKFNuKG4sci5jLmxlbmd0aCksbChyLmNbbl0sNDIpKSxhLmUuYiksYS5lLmIrYS5mLmI+emUoR2UoKFNuKG4sci5jLmxlbmd0aCksbChyLmNbbl0sNDIpKS5iKSkmJmN0KChTbihuLHIuYy5sZW5ndGgpLGwoci5jW25dLDQyKSksYS5lLmIrYS5mLmIpKX1mb3Iobz1ScihlLmIsMCk7by5iIT1vLmQuYzspYT1sKEJyKG8pLDQwKSxuPWwoUShhLChIYygpLCRkKSksMTcpLmEscnQoYSwoUWkoKSxjMSksR2UoKFNuKG4sci5jLmxlbmd0aCksbChyLmNbbl0sNDIpKS5hKSkscnQoYSxrMCxHZSgoU24obixyLmMubGVuZ3RoKSxsKHIuY1tuXSw0MikpLmIpKTt0LlZnKCl9ZnVuY3Rpb24gakRuKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSjtmb3IoZS5vPXplKEdlKFEoZS5pLChOdCgpLG0zKSkpKSxlLmY9emUoR2UoUShlLmksdnYpKSksZS5qPWUuaS5iLmMubGVuZ3RoLGc9ZS5qLTEsQj0wLGUuaz0wLGUubj0wLGUuYj1PMShXZShybyxkdCwxNyxlLmosMCwxKSksZS5jPU8xKFdlKHRhLGR0LDM0NSxlLmosNywxKSksZj1uZXcgRyhlLmkuYik7Zi5hPGYuYy5jLmxlbmd0aDspe2ZvcihhPWwocmUoZiksMzApLGEucD1nLEw9bmV3IEcoYS5hKTtMLmE8TC5jLmMubGVuZ3RoOylDPWwocmUoTCksMTApLEMucD1CLCsrQjstLWd9Zm9yKGUuZz1XZShWcixkaSwyOCxCLDE1LDEpLGUuZD1MbShWcixbZHQsZGldLFs1MywyOF0sMTUsW0IsM10sMiksZS5wPW5ldyBidCxlLnE9bmV3IGJ0LHQ9MCxlLmU9MCxvPW5ldyBHKGUuaS5iKTtvLmE8by5jLmMubGVuZ3RoOyl7Zm9yKGE9bChyZShvKSwzMCksZz1hLnAscj0wLEo9MCx3PWEuYS5jLmxlbmd0aCxFPTAsTD1uZXcgRyhhLmEpO0wuYTxMLmMuYy5sZW5ndGg7KUM9bChyZShMKSwxMCksQj1DLnAsZS5nW0JdPUMuYy5wLEUrPUMuby5iK2UubyxuPVhnKG5ldyBocihkcihrYShDKS5hLktjKCksbmV3IGopKSksVj1YZyhuZXcgaHIoZHIocXMoQykuYS5LYygpLG5ldyBqKSkpLGUuZFtCXVswXT1WLW4sZS5kW0JdWzFdPW4sZS5kW0JdWzJdPVYscis9bixKKz1WLG4+MCYmdnQoZS5xLEMpLHZ0KGUucCxDKTt0LT1yLHo9dyt0LEUrPXQqZS5mLHJmKGUuYixnLHB0KHopKSxyZihlLmMsZyxFKSxlLms9Yi5NYXRoLm1heChlLmsseiksZS5uPWIuTWF0aC5tYXgoZS5uLEUpLGUuZSs9dCx0Kz1KfX1mdW5jdGlvbiBDdCgpe0N0PVU7dmFyIGU7UGM9bmV3IHdPKGNMLDApLFFuPW5ldyB3TyhuRywxKSxhcj1uZXcgd08oeWhlLDIpLERyPW5ldyB3Tyh4aGUsMyksZXI9bmV3IHdPKGtoZSw0KSxlZD0oQ24oKSxuZXcgRWsoKGU9bChLMChPbyksOSksbmV3IFpoKGUsbChjMChlLGUubGVuZ3RoKSw5KSwwKSkpKSxfMD1hMihycyhRbixoZShsZShPbywxKSxhdSw2NCwwLFtdKSkpLHlmPWEyKHJzKGFyLGhlKGxlKE9vLDEpLGF1LDY0LDAsW10pKSksJGg9YTIocnMoRHIsaGUobGUoT28sMSksYXUsNjQsMCxbXSkpKSxIZj1hMihycyhlcixoZShsZShPbywxKSxhdSw2NCwwLFtdKSkpLGhsPWEyKHJzKFFuLGhlKGxlKE9vLDEpLGF1LDY0LDAsW0RyXSkpKSxKdT1hMihycyhhcixoZShsZShPbywxKSxhdSw2NCwwLFtlcl0pKSksQTA9YTIocnMoUW4saGUobGUoT28sMSksYXUsNjQsMCxbZXJdKSkpLHpsPWEyKHJzKFFuLGhlKGxlKE9vLDEpLGF1LDY0LDAsW2FyXSkpKSx6aD1hMihycyhEcixoZShsZShPbywxKSxhdSw2NCwwLFtlcl0pKSkseGY9YTIocnMoYXIsaGUobGUoT28sMSksYXUsNjQsMCxbRHJdKSkpLHFsPWEyKHJzKFFuLGhlKGxlKE9vLDEpLGF1LDY0LDAsW2FyLGVyXSkpKSxsbD1hMihycyhhcixoZShsZShPbywxKSxhdSw2NCwwLFtEcixlcl0pKSksZmw9YTIocnMoUW4saGUobGUoT28sMSksYXUsNjQsMCxbRHIsZXJdKSkpLF9sPWEyKHJzKFFuLGhlKGxlKE9vLDEpLGF1LDY0LDAsW2FyLERyXSkpKSxEdT1hMihycyhRbixoZShsZShPbywxKSxhdSw2NCwwLFthcixEcixlcl0pKSl9ZnVuY3Rpb24gJERuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdDtmb3IodC5VZyhLM3QsMSksSj1uZXcgYnQsb3Q9bmV3IGJ0LEU9bmV3IEcoZS5iKTtFLmE8RS5jLmMubGVuZ3RoOylmb3Iodz1sKHJlKEUpLDMwKSxmZT0tMSxWPUpPKHcuYSksTD1WLEI9MCx6PUwubGVuZ3RoO0I8ejsrK0IpaWYoQz1MW0JdLCsrZmUsISEoQy5rPT0oWm4oKSxQcykmJlA1KGwoUShDLChOdCgpLE1zKSksMTAxKSkpKXtmb3IoVTgobChRKEMsKE50KCksTXMpKSwxMDEpKXx8a0NuKEMpLHJ0KEMsKGZ0KCksdTMpLEMpLEouYy5sZW5ndGg9MCxvdC5jLmxlbmd0aD0wLG49bmV3IGJ0LCRlPW5ldyBvcyxzY2UoJGUsZDIoQywoQ3QoKSxRbikpKSx1d3QoZSwkZSxKLG90LG4pLGc9ZmUsU3Q9QyxvPW5ldyBHKEopO28uYTxvLmMuYy5sZW5ndGg7KXI9bChyZShvKSwxMCksRnkocixnLHcpLCsrZmUscnQocix1MyxDKSxmPWwoanQoci5qLDApLDEyKSx0ZT1sKFEoZix6aSksMTIpLFJ0KEJ0KFEodGUsWDFlKSkpfHxsKFEocixXeCksMTUpLkZjKFN0KTtmb3IoQ2goJGUpLE1lPWQyKEMsRHIpLktjKCk7TWUuT2IoKTspVGU9bChNZS5QYigpLDEyKSxDcygkZSxUZSwkZS5hLCRlLmEuYSk7Zm9yKHV3dChlLCRlLG90LG51bGwsbiksWmU9QyxhPW5ldyBHKG90KTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTApLEZ5KHIsKytmZSx3KSxydChyLHUzLEMpLGY9bChqdChyLmosMCksMTIpLHRlPWwoUShmLHppKSwxMiksUnQoQnQoUSh0ZSxYMWUpKSl8fGwoUShaZSxXeCksMTUpLkZjKHIpO24uYy5sZW5ndGg9PTB8fHJ0KEMsQkxlLG4pfXQuVmcoKX1mdW5jdGlvbiBYdnQoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lO2lmKHQuYiE9MCl7Zm9yKHo9bmV3IG9zLGc9bnVsbCxWPW51bGwscj11YShiLk1hdGguZmxvb3IoYi5NYXRoLmxvZyh0LmIpKmIuTWF0aC5MT0cxMEUpKzEpLHc9MCxNZT1Scih0LDApO01lLmIhPU1lLmQuYzspZm9yKGZlPWwoQnIoTWUpLDQwKSxxZShWKSE9PXFlKFEoZmUsKFFpKCksZE0pKSkmJihWPWVpKFEoZmUsZE0pKSx3PTApLFYhPW51bGw/Zz1WK1ZvdCh3Kysscik6Zz1Wb3QodysrLHIpLHJ0KGZlLGRNLGcpLHRlPShhPVJyKG5ldyBIZyhmZSkuYS5kLDApLG5ldyBDNShhKSk7UUkodGUuYSk7KUo9bChCcih0ZS5hKSw2NSkuYyxDcyh6LEosei5jLmIsei5jKSxydChKLGRNLGcpO2ZvcihCPW5ldyBQcixmPTA7ZjxnLmxlbmd0aC1yO2YrKylmb3IoVGU9UnIodCwwKTtUZS5iIT1UZS5kLmM7KWZlPWwoQnIoVGUpLDQwKSxFPXRmKGVpKFEoZmUsKFFpKCksZE0pKSksMCxmKzEpLG49KEU9PW51bGw/aGMoem8oQi5mLG51bGwpKTp5XyhCLmksRSkpIT1udWxsP2woRT09bnVsbD9oYyh6byhCLmYsbnVsbCkpOnlfKEIuaSxFKSwxNykuYSsxOjEscmMoQixFLHB0KG4pKTtmb3IoTD1uZXcgcW0obmV3IFNyKEIpLmEpO0wuYjspQz1OdyhMKSxvPXB0KGNyKGUuYSxDLmxkKCkpIT1udWxsP2woY3IoZS5hLEMubGQoKSksMTcpLmE6MCkscmMoZS5hLGVpKEMubGQoKSkscHQobChDLm1kKCksMTcpLmErby5hKSksbz1sKGNyKGUuYixDLmxkKCkpLDE3KSwoIW98fG8uYTxsKEMubWQoKSwxNykuYSkmJnJjKGUuYixlaShDLmxkKCkpLGwoQy5tZCgpLDE3KSk7WHZ0KGUseil9fWZ1bmN0aW9uIHpEbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKG49bnVsbCx3PW51bGwsYT1sKFEoZS5iLChOdCgpLG5kZSkpLDM0OSksYT09KHlBKCksTUIpJiYobj1uZXcgYnQsdz1uZXcgYnQpLGc9bmV3IEcoZS5kKTtnLmE8Zy5jLmMubGVuZ3RoOylpZihmPWwocmUoZyksMTA1KSxvPWYuaSwhIW8pc3dpdGNoKGYuZS5nKXtjYXNlIDA6dD1sKGNBKG5ldyBQOChmLmIpKSw2NCksYT09TUImJnQ9PShDdCgpLFFuKT8kbihuLmMsZik6YT09TUImJnQ9PShDdCgpLERyKT8kbih3LmMsZik6ZzduKGYsdCk7YnJlYWs7Y2FzZSAxOkU9Zi5hLmQuaixDPWYuYy5kLmosRT09KEN0KCksUW4pP1FwKGYsUW4sKFIxKCksTVQpLGYuYSk6Qz09UW4/UXAoZixRbiwoUjEoKSxEVCksZi5jKTpFPT1Ecj9RcChmLERyLChSMSgpLERUKSxmLmEpOkM9PURyJiZRcChmLERyLChSMSgpLE1UKSxmLmMpO2JyZWFrO2Nhc2UgMjpjYXNlIDM6cj1mLmIsdmwociwoQ3QoKSxRbikpP3ZsKHIsRHIpP3ZsKHIsZXIpP3ZsKHIsYXIpfHxRcChmLFFuLChSMSgpLERUKSxmLmMpOlFwKGYsUW4sKFIxKCksTVQpLGYuYSk6UXAoZixRbiwoUjEoKSxWeCksbnVsbCk6UXAoZixEciwoUjEoKSxWeCksbnVsbCk7YnJlYWs7Y2FzZSA0Okw9Zi5hLmQuaixCPWYuYS5kLmosTD09KEN0KCksUW4pfHxCPT1Rbj9RcChmLERyLChSMSgpLFZ4KSxudWxsKTpRcChmLFFuLChSMSgpLFZ4KSxudWxsKX1uJiYobi5jLmxlbmd0aD09MHx8SG10KG4sKEN0KCksUW4pKSx3LmMubGVuZ3RoPT0wfHxIbXQodywoQ3QoKSxEcikpKX1mdW5jdGlvbiBxRG4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlO2ZvcihuLlVnKCJCcmVhZHRoIGZpcnN0IG1vZGVsIG9yZGVyIGxheWVyaW5nIiwxKSxlLmE9dCx0ZT1uZXcgYnQsSj1uZXcgRyhlLmEuYSk7Si5hPEouYy5jLmxlbmd0aDspej1sKHJlKEopLDEwKSx6Lms9PShabigpLFBzKSYmJG4odGUuYyx6KTtmb3IoQ24oKSxWcyh0ZSxuZXcgamVlKSx3PSEwLGE9bmV3IHl1KGUuYSkscj1udWxsLHZ0KGUuYS5iLGEpLFY9bmV3IEcodGUpO1YuYTxWLmMuYy5sZW5ndGg7KWlmKHo9bChyZShWKSwxMCksdylWYSh6LGEpLHc9ITE7ZWxzZXtmb3IoZz1uZXcgaHIoZHIoa2EoeikuYS5LYygpLG5ldyBqKSk7anIoZyk7KW89bCh4cihnKSwxOCksKG8uYy5pLms9PShabigpLFBzKSYmby5jLmkuYz09YXx8by5jLmkuaz09Y3UmJmwoeHIobmV3IGhyKGRyKGthKG8uYy5pKS5hLktjKCksbmV3IGopKSksMTgpLmMuaS5jPT1hKSYmKHI9bmV3IHl1KGUuYSksdnQoZS5hLmIsciksYT1uZXcgeXUoZS5hKSx2dChlLmEuYixhKSk7Zm9yKGY9bmV3IGhyKGRyKGthKHopLmEuS2MoKSxuZXcgaikpO2pyKGYpOylvPWwoeHIoZiksMTgpLG8uYy5pLms9PShabigpLGN1KSYmIW8uYy5pLmMmJlZhKG8uYy5pLHIpO1ZhKHosYSl9Zm9yKGUuYS5hLmMubGVuZ3RoPTAsZmU9bmV3IGJ0LEw9bmV3IEcoZS5hLmIpO0wuYTxMLmMuYy5sZW5ndGg7KUU9bChyZShMKSwzMCksRS5hLmMubGVuZ3RoPT0wJiYkbihmZS5jLEUpO2ZvcihnOGUoZS5hLmIsZmUpLEI9MCxDPW5ldyBHKGUuYS5iKTtDLmE8Qy5jLmMubGVuZ3RoOylFPWwocmUoQyksMzApLEUucD1CLCsrQjtuLlZnKCl9ZnVuY3Rpb24gSERuKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSjtmb3Iocj1sKFEoZSwoZnQoKSx6aSkpLDI3KSxWPWwoUShlLChOdCgpLGRXKSksMTcpLmEsbz1sKFEoZSxtVyksMTcpLmEsSGkocixkVyxwdChWKSksSGkocixtVyxwdChvKSksVXUocixlLm4uYSt0LmEpLEd1KHIsZS5uLmIrdC5iKSwobChhdChyLGJ2KSwxODEpLmdjKCkhPTB8fGUuZXx8cWUoUShlbyhlKSx5VykpPT09cWUoKE9BKCksaU0pKSYmb250KChCeSgpLChlLnE/ZS5xOihDbigpLENuKCksbWcpKS5fYihnMyk/Qj1sKFEoZSxnMyksMjAzKTpCPWwoUShlbyhlKSxlTSksMjAzKSxCKSkpJiYoRHcocixlLm8uYSksTXcocixlLm8uYikpLEw9bmV3IEcoZS5qKTtMLmE8TC5jLmMubGVuZ3RoOylFPWwocmUoTCksMTIpLEo9UShFLHppKSxEZShKLDE5MykmJihhPWwoSiwxMjMpLFFoKGEsRS5uLmEsRS5uLmIpLEhpKGEsVlQsRS5qKSk7Zm9yKHo9bChRKGUsZDMpLDE4MSkuZ2MoKSE9MCx3PW5ldyBHKGUuYik7dy5hPHcuYy5jLmxlbmd0aDspZj1sKHJlKHcpLDcyKSwoenx8bChRKGYsZDMpLDE4MSkuZ2MoKSE9MCkmJihuPWwoUShmLHppKSwxMzUpLEY1KG4sZi5vLmEsZi5vLmIpLFFoKG4sZi5uLmEsZi5uLmIpKTtpZighV18obChRKGUsdjQpLDIxKSkpZm9yKEM9bmV3IEcoZS5qKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3IoRT1sKHJlKEMpLDEyKSxnPW5ldyBHKEUuZik7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDcyKSxuPWwoUShmLHppKSwxMzUpLER3KG4sZi5vLmEpLE13KG4sZi5vLmIpLFFoKG4sZi5uLmEsZi5uLmIpfWZ1bmN0aW9uIFZEbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW47Zm9yKHQuVWcoIkNhbGN1bGF0ZSBHcmFwaCBTaXplIiwxKSx0LmRoKGUseUNlKSxMPXk2LEI9eTYsRT14Q2UsQz14Q2UsSj1uZXcgb3IoKCFlLmEmJihlLmE9bmV3IG50KEFpLGUsMTAsMTEpKSxlLmEpKTtKLmUhPUouaS5nYygpOyl6PWwoZ3IoSiksMjcpLFRlPXouaSxNZT16LmosYW49ei5nLGc9ei5mLHc9bChhdCh6LChwaSgpLHRDKSksMTQwKSxMPWIuTWF0aC5taW4oTCxUZS13LmIpLEI9Yi5NYXRoLm1pbihCLE1lLXcuZCksRT1iLk1hdGgubWF4KEUsVGUrYW4rdy5jKSxDPWIuTWF0aC5tYXgoQyxNZStnK3cuYSk7Zm9yKGZlPWwoYXQoZSwocGkoKSxfMikpLDEwNyksdGU9bmV3IGx0KEwtZmUuYixCLWZlLmQpLGNuPUUtTCsoZmUuYitmZS5jKSxmPUMtQisoZmUuZCtmZS5hKSxSdChCdChhdChlLChTYigpLE9JZSkpKSkmJigkZT1sKGF0KGUsKEg1KCksWTYpKSwyNyksWmU9bChhdCgkZSx0QyksMTQwKSxvdD0kZS5pKyRlLmcvMisoWmUuYitaZS5jKS8yLXRlLmEsU3Q9JGUuaiskZS5mLzIrKFplLmQrWmUuYSkvMi10ZS5iLGE9Y24tb3Qsbz1mLVN0LGE8Y24vMj8obj1hLW90LGNuKz1uLHRlLmEtPW4pOihuPW90LWEsY24rPW4pLG88Zi8yPyhyPW8tU3QsZis9cix0ZS5iLT1yKToocj1TdC1vLGYrPXIpKSxWPW5ldyBvcigoIWUuYSYmKGUuYT1uZXcgbnQoQWksZSwxMCwxMSkpLGUuYSkpO1YuZSE9Vi5pLmdjKCk7KXo9bChncihWKSwyNyksVXUoeix6LmktdGUuYSksR3Uoeix6LmotdGUuYik7UnQoQnQoYXQoZSxDNCkpKXx8KER3KGUsY24pLE13KGUsZikpLEhpKGUsdDcsY24tKGZlLmIrZmUuYykpLEhpKGUsZTcsZi0oZmUuZCtmZS5hKSksdC5kaChlLE9HKX1mdW5jdGlvbiBVRG4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHo7aWYoZS5lLmEuJGIoKSxlLmYuYS4kYigpLGUuYy5jLmxlbmd0aD0wLGUuaS5jLmxlbmd0aD0wLGUuZy5hLiRiKCksdClmb3IoZj1uZXcgRyh0LmEpO2YuYTxmLmMuYy5sZW5ndGg7KWZvcihvPWwocmUoZiksMTApLEw9ZDIobywoQ3QoKSxhcikpLktjKCk7TC5PYigpOylmb3IoQz1sKEwuUGIoKSwxMiksbmEoZS5lLEMpLGE9bmV3IEcoQy5nKTthLmE8YS5jLmMubGVuZ3RoOylyPWwocmUoYSksMTgpLCFEbyhyKSYmKHZ0KGUuYyxyKSxoZHQoZSxyKSxnPXIuYy5pLmssKGc9PShabigpLFBzKXx8Zz09QXV8fGc9PVVzfHxnPT1LMSkmJnZ0KGUuaixyKSx6PXIuZCxCPXouaS5jLEI9PW4/bmEoZS5mLHopOkI9PXQ/bmEoZS5lLHopOmFsKGUuYyxyKSk7aWYobilmb3IoZj1uZXcgRyhuLmEpO2YuYTxmLmMuYy5sZW5ndGg7KXtmb3Iobz1sKHJlKGYpLDEwKSxFPW5ldyBHKG8uaik7RS5hPEUuYy5jLmxlbmd0aDspZm9yKHc9bChyZShFKSwxMiksYT1uZXcgRyh3LmcpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwxOCksRG8ocikmJm5hKGUuZyxyKTtmb3IoTD1kMihvLChDdCgpLGVyKSkuS2MoKTtMLk9iKCk7KWZvcihDPWwoTC5QYigpLDEyKSxuYShlLmYsQyksYT1uZXcgRyhDLmcpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwxOCksIURvKHIpJiYodnQoZS5jLHIpLGhkdChlLHIpLGc9ci5jLmkuaywoZz09KFpuKCksUHMpfHxnPT1BdXx8Zz09VXN8fGc9PUsxKSYmdnQoZS5qLHIpLHo9ci5kLEI9ei5pLmMsQj09bj9uYShlLmYseik6Qj09dD9uYShlLmUseik6YWwoZS5jLHIpKX19ZnVuY3Rpb24gR0RuKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZTtmb3Iobi5VZygiUG9seWxpbmUgZWRnZSByb3V0aW5nIiwxKSx0ZT16ZShHZShRKHQsKE50KCksRE1lKSkpKSx6PXplKEdlKFEodCxWNikpKSxhPXplKEdlKFEodCxxNikpKSxyPWIuTWF0aC5taW4oMSxhL3opLE1lPTAsdz0wLHQuYi5jLmxlbmd0aCE9MCYmKCRlPUsydChsKGp0KHQuYiwwKSwzMCkpLE1lPS40KnIqJGUpLGc9bmV3IFVhKHQuYiwwKTtnLmI8Zy5kLmdjKCk7KXtmb3IoZj0obXIoZy5iPGcuZC5nYygpKSxsKGcuZC5YYihnLmM9Zy5iKyspLDMwKSksbz1McShmLElCKSxvJiZNZT4wJiYoTWUtPXopLE9rZShmLE1lKSxDPTAsQj1uZXcgRyhmLmEpO0IuYTxCLmMuYy5sZW5ndGg7KXtmb3IoTD1sKHJlKEIpLDEwKSxFPTAsSj1uZXcgaHIoZHIocXMoTCkuYS5LYygpLG5ldyBqKSk7anIoSik7KVY9bCh4cihKKSwxOCksZmU9STEoVi5jKS5iLFRlPUkxKFYuZCkuYixmPT1WLmQuaS5jJiYhRG8oVikmJihzRW4oVixNZSwuNCpyKmIuTWF0aC5hYnMoZmUtVGUpKSxWLmMuaj09KEN0KCksZXIpJiYoZmU9MCxUZT0wKSksRT1iLk1hdGgubWF4KEUsYi5NYXRoLmFicyhUZS1mZSkpO3N3aXRjaChMLmsuZyl7Y2FzZSAwOmNhc2UgNDpjYXNlIDE6Y2FzZSAzOmNhc2UgNTp1TW4oZSxMLE1lLHRlKX1DPWIuTWF0aC5tYXgoQyxFKX1nLmI8Zy5kLmdjKCkmJigkZT1LMnQoKG1yKGcuYjxnLmQuZ2MoKSksbChnLmQuWGIoZy5jPWcuYisrKSwzMCkpKSxDPWIuTWF0aC5tYXgoQywkZSksbXIoZy5iPjApLGcuYS5YYihnLmM9LS1nLmIpKSx3PS40KnIqQywhbyYmZy5iPGcuZC5nYygpJiYodys9eiksTWUrPWYuYy5hK3d9ZS5hLmEuJGIoKSx0LmYuYT1NZSxuLlZnKCl9ZnVuY3Rpb24gS0RuKGUpe3ZhciB0LG4scixhLG87c3dpdGNoKFVPKGUsQzR0KSwoIWUuYiYmKGUuYj1uZXcgTG4oX3IsZSw0LDcpKSxlLmIpLmkrKCFlLmMmJihlLmM9bmV3IExuKF9yLGUsNSw4KSksZS5jKS5pKXtjYXNlIDA6dGhyb3cgdWUobmV3IFluKCJUaGUgZWRnZSBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIHNvdXJjZSBvciB0YXJnZXQuIikpO2Nhc2UgMTpyZXR1cm4oIWUuYiYmKGUuYj1uZXcgTG4oX3IsZSw0LDcpKSxlLmIpLmk9PTA/ZHMoYmMobChPZSgoIWUuYyYmKGUuYz1uZXcgTG4oX3IsZSw1LDgpKSxlLmMpLDApLDg0KSkpOmRzKGJjKGwoT2UoKCFlLmImJihlLmI9bmV3IExuKF9yLGUsNCw3KSksZS5iKSwwKSw4NCkpKX1pZigoIWUuYiYmKGUuYj1uZXcgTG4oX3IsZSw0LDcpKSxlLmIpLmk9PTEmJighZS5jJiYoZS5jPW5ldyBMbihfcixlLDUsOCkpLGUuYykuaT09MSl7aWYoYT1iYyhsKE9lKCghZS5iJiYoZS5iPW5ldyBMbihfcixlLDQsNykpLGUuYiksMCksODQpKSxvPWJjKGwoT2UoKCFlLmMmJihlLmM9bmV3IExuKF9yLGUsNSw4KSksZS5jKSwwKSw4NCkpLGRzKGEpPT1kcyhvKSlyZXR1cm4gZHMoYSk7aWYoYT09ZHMobykpcmV0dXJuIGE7aWYobz09ZHMoYSkpcmV0dXJuIG99Zm9yKHI9cmcoTGgoaGUobGUoRmgsMSksUm4sMjAsMCxbKCFlLmImJihlLmI9bmV3IExuKF9yLGUsNCw3KSksZS5iKSwoIWUuYyYmKGUuYz1uZXcgTG4oX3IsZSw1LDgpKSxlLmMpXSkpKSx0PWJjKGwoeHIociksODQpKTtqcihyKTspaWYobj1iYyhsKHhyKHIpLDg0KSksbiE9dCYmIUx5KG4sdCkpe2lmKGRzKG4pPT1kcyh0KSl0PWRzKG4pO2Vsc2UgaWYodD15VG4odCxuKSwhdClyZXR1cm4gbnVsbH1yZXR1cm4gdH1mdW5jdGlvbiBIa2UoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lO2lmKEI9dC5sZW5ndGgsQj4wJiYodz0oWG4oMCx0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KDApKSx3IT02NCkpe2lmKHc9PTM3JiYoTD10Lmxhc3RJbmRleE9mKCIlIiksRT0hMSxMIT0wJiYoTD09Qi0xfHwoRT0oWG4oTCsxLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoTCsxKT09NDYpKSkpKXtpZihmPShHYSgxLEwsdC5sZW5ndGgpLHQuc3Vic3RyKDEsTC0xKSksTWU9dm4oIiUiLGYpP251bGw6VmtlKGYpLHI9MCxFKXRyeXtyPU9oKChYbihMKzIsdC5sZW5ndGgrMSksdC5zdWJzdHIoTCsyKSksbG8sSWkpfWNhdGNoKCRlKXt0aHJvdyAkZT1icygkZSksRGUoJGUsMTMwKT8oZz0kZSx1ZShuZXcgblYoZykpKTp1ZSgkZSl9Zm9yKHRlPW03ZShlLkdoKCkpO3RlLk9iKCk7KWlmKFY9TVYodGUpLERlKFYsNTE5KSYmKGE9bChWLDU5OCksVGU9YS5kLChNZT09bnVsbD9UZT09bnVsbDp2bihNZSxUZSkpJiZyLS09PTApKXJldHVybiBhO3JldHVybiBudWxsfWlmKEM9dC5sYXN0SW5kZXhPZigiLiIpLHo9Qz09LTE/dDooR2EoMCxDLHQubGVuZ3RoKSx0LnN1YnN0cigwLEMpKSxuPTAsQyE9LTEpdHJ5e249T2goKFhuKEMrMSx0Lmxlbmd0aCsxKSx0LnN1YnN0cihDKzEpKSxsbyxJaSl9Y2F0Y2goJGUpe2lmKCRlPWJzKCRlKSxEZSgkZSwxMzApKXo9dDtlbHNlIHRocm93IHVlKCRlKX1mb3Ioej12bigiJSIseik/bnVsbDpWa2UoeiksSj1tN2UoZS5HaCgpKTtKLk9iKCk7KWlmKFY9TVYoSiksRGUoViwxOTcpJiYobz1sKFYsMTk3KSxmZT1vLnhlKCksKHo9PW51bGw/ZmU9PW51bGw6dm4oeixmZSkpJiZuLS09PTApKXJldHVybiBvO3JldHVybiBudWxsfXJldHVybiBCdnQoZSx0KX1mdW5jdGlvbiBXRG4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlO2ZvcihDPW5ldyBQcix3PW5ldyBDdyxyPW5ldyBHKGUuYS5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KWlmKHQ9bChyZShyKSw2MCksRT1HNSh0KSxFKWp1KEMuZixFLHQpO2Vsc2UgaWYoVGU9aXgodCksVGUpZm9yKG89bmV3IEcoVGUuayk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDE4KSx4bih3LGEsdCk7Zm9yKG49bmV3IEcoZS5hLmEuYik7bi5hPG4uYy5jLmxlbmd0aDspaWYodD1sKHJlKG4pLDYwKSxFPUc1KHQpLEUpe2ZvcihnPW5ldyBocihkcihxcyhFKS5hLktjKCksbmV3IGopKTtqcihnKTspaWYoZj1sKHhyKGcpLDE4KSwhRG8oZikmJihWPWYuYyxmZT1mLmQsISgoQ3QoKSxobCkuSGMoZi5jLmopJiZobC5IYyhmLmQuaikpKSl7aWYoSj1sKGNyKEMsZi5kLmkpLDYwKSxwMChzMChpMChhMChyMChuZXcgX2YsMCksMTAwKSxlLmNbdC5hLmRdKSxlLmNbSi5hLmRdKSksVi5qPT1lciYmTHN0KChrbCgpLFYpKSl7Zm9yKEI9bCgkaSh3LGYpLDIxKS5LYygpO0IuT2IoKTspaWYoTD1sKEIuUGIoKSw2MCksTC5kLmM8dC5kLmMpe2lmKHo9ZS5jW0wuYS5kXSx0ZT1lLmNbdC5hLmRdLHo9PXRlKWNvbnRpbnVlO3AwKHMwKGkwKGEwKHIwKG5ldyBfZiwxKSwxMDApLHopLHRlKSl9fWlmKGZlLmo9PWFyJiZNc3QoKGtsKCksZmUpKSl7Zm9yKEI9bCgkaSh3LGYpLDIxKS5LYygpO0IuT2IoKTspaWYoTD1sKEIuUGIoKSw2MCksTC5kLmM+dC5kLmMpe2lmKHo9ZS5jW3QuYS5kXSx0ZT1lLmNbTC5hLmRdLHo9PXRlKWNvbnRpbnVlO3AwKHMwKGkwKGEwKHIwKG5ldyBfZiwxKSwxMDApLHopLHRlKSl9fX19fWZ1bmN0aW9uIFlEbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3Q7aWYoQj1sKGwoJGkoZS5yLHQpLDIxKSw4NyksdD09KEN0KCksYXIpfHx0PT1lcil7VnZ0KGUsdCk7cmV0dXJufWZvcihvPXQ9PVFuPyhQdygpLHJCKTooUHcoKSxpQiksJGU9dD09UW4/KG9sKCksYTEpOihvbCgpLHcwKSxuPWwoUW8oZS5iLHQpLDEyNykscj1uLmksYT1yLmMrWTUoaGUobGUoTmEsMSksWm8sMjgsMTUsW24ubi5iLGUuQy5iLGUua10pKSxmZT1yLmMrci5iLVk1KGhlKGxlKE5hLDEpLFpvLDI4LDE1LFtuLm4uYyxlLkMuYyxlLmtdKSksZj1pM2UoeTRlKG8pLGUudCksVGU9dD09UW4/aWE6Z3MsTD1CLktjKCk7TC5PYigpOylFPWwoTC5QYigpLDExNyksISghRS5jfHxFLmMuZC5jLmxlbmd0aDw9MCkmJih0ZT1FLmIuTWYoKSxKPUUuZSx6PUUuYyxWPXouaSxWLmI9KHc9ei5uLHouZS5hK3cuYit3LmMpLFYuYT0oZz16Lm4sei5lLmIrZy5kK2cuYSksVU8oJGUseUVlKSx6LmY9JGUsWjAoeiwoQmwoKSx2MCkpLFYuYz1KLmEtKFYuYi10ZS5hKS8yLFplPWIuTWF0aC5taW4oYSxKLmEpLG90PWIuTWF0aC5tYXgoZmUsSi5hK3RlLmEpLFYuYzxaZT9WLmM9WmU6Vi5jK1YuYj5vdCYmKFYuYz1vdC1WLmIpLHZ0KGYuZCxuZXcgRGFlKFYsaDhlKGYsVikpKSxUZT10PT1Rbj9iLk1hdGgubWF4KFRlLEouYitFLmIuTWYoKS5iKTpiLk1hdGgubWluKFRlLEouYikpO2ZvcihUZSs9dD09UW4/ZS50Oi1lLnQsTWU9TThlKChmLmU9VGUsZikpLE1lPjAmJihsKFFvKGUuYix0KSwxMjcpLmEuYj1NZSksQz1CLktjKCk7Qy5PYigpOylFPWwoQy5QYigpLDExNyksISghRS5jfHxFLmMuZC5jLmxlbmd0aDw9MCkmJihWPUUuYy5pLFYuYy09RS5lLmEsVi5kLT1FLmUuYil9ZnVuY3Rpb24gWERuKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDLEwsQix6O2Zvcih0PW5ldyBQcix3PW5ldyBvcihlKTt3LmUhPXcuaS5nYygpOyl7Zm9yKGc9bChncih3KSwyNyksbj1uZXcgS3Msa2koWDBlLGcsbiksej1uZXcgQnAsYT1sKHljKG5ldyBibihudWxsLG5ldyB2dyhuZXcgaHIoZHIoc1AoZykuYS5LYygpLG5ldyBqKSkpKSxkc3QoeixQbChuZXcgenIsbmV3IGh0LG5ldyBGbixoZShsZShvYywxKSxpdCwxMDgsMCxbKEZsKCksRWMpXSkpKSksODUpLEtodChuLGwoYS54YygoSG4oKSwhMCkpLDE2KSxuZXcgWTMpLHI9bCh5YyhGaShsKGEueGMoITEpLDE1KS5MYygpLG5ldyAkOSksUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsW0VjXSkpKSwxNSksZj1yLktjKCk7Zi5PYigpOylvPWwoZi5QYigpLDc0KSxCPUtndChvKSxCJiYoRT1sKGhjKHpvKHQuZixCKSksMjEpLEV8fChFPWJidChCKSxqdSh0LmYsQixFKSksS2EobixFKSk7Zm9yKGE9bCh5YyhuZXcgYm4obnVsbCxuZXcgdncobmV3IGhyKGRyKGNwKGcpLmEuS2MoKSxuZXcgaikpKSksZHN0KHosUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsW0VjXSkpKSksODUpLEtodChuLGwoYS54YyghMCksMTYpLG5ldyBjNSkscj1sKHljKEZpKGwoYS54YyghMSksMTUpLkxjKCksbmV3IEVoKSxQbChuZXcgenIsbmV3IGh0LG5ldyBGbixoZShsZShvYywxKSxpdCwxMDgsMCxbRWNdKSkpLDE1KSxMPXIuS2MoKTtMLk9iKCk7KUM9bChMLlBiKCksNzQpLEI9V2d0KEMpLEImJihFPWwoaGMoem8odC5mLEIpKSwyMSksRXx8KEU9YmJ0KEIpLGp1KHQuZixCLEUpKSxLYShuLEUpKX19ZnVuY3Rpb24gUURuKGUsdCl7YmxlKCk7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSjtpZih3PWl1KGUsMCk8MCx3JiYoZT1yMihlKSksaXUoZSwwKT09MClzd2l0Y2godCl7Y2FzZSAwOnJldHVybiIwIjtjYXNlIDE6cmV0dXJuIHNUO2Nhc2UgMjpyZXR1cm4iMC4wMCI7Y2FzZSAzOnJldHVybiIwLjAwMCI7Y2FzZSA0OnJldHVybiIwLjAwMDAiO2Nhc2UgNTpyZXR1cm4iMC4wMDAwMCI7Y2FzZSA2OnJldHVybiIwLjAwMDAwMCI7ZGVmYXVsdDpyZXR1cm4gej1uZXcgdGIsdDwwP3ouYSs9IjBFKyI6ei5hKz0iMEUiLHouYSs9dD09bG8/IjIxNDc0ODM2NDgiOiIiKy10LHouYX1DPTE4LEw9V2Uoa2YsQWQsMjgsQysxLDE1LDEpLG49QyxKPWU7ZG8gRT1KLEo9S04oSiwxMCksTFstLW5dPVlyKGJvKDQ4LERmKEUsbW8oSiwxMCkpKSkmWnM7d2hpbGUoaXUoSiwwKSE9MCk7aWYoYT1EZihEZihEZihDLG4pLHQpLDEpLHQ9PTApcmV0dXJuIHcmJihMWy0tbl09NDUpLElmKEwsbixDLW4pO2lmKHQ+MCYmaXUoYSwtNik+PTApe2lmKGl1KGEsMCk+PTApe2ZvcihvPW4rWXIoYSksZz1DLTE7Zz49bztnLS0pTFtnKzFdPUxbZ107cmV0dXJuIExbKytvXT00Nix3JiYoTFstLW5dPTQ1KSxJZihMLG4sQy1uKzEpfWZvcihmPTI7ZnNlKGYsYm8ocjIoYSksMSkpO2YrKylMWy0tbl09NDg7cmV0dXJuIExbLS1uXT00NixMWy0tbl09NDgsdyYmKExbLS1uXT00NSksSWYoTCxuLEMtbil9cmV0dXJuIFY9bisxLHI9QyxCPW5ldyBTNSx3JiYoQi5hKz0iLSIpLHItVj49MT8oaGIoQixMW25dKSxCLmErPSIuIixCLmErPUlmKEwsbisxLEMtbi0xKSk6Qi5hKz1JZihMLG4sQy1uKSxCLmErPSJFIixpdShhLDApPjAmJihCLmErPSIrIiksQi5hKz0iIitZXyhhKSxCLmF9ZnVuY3Rpb24gR3coZSx0LG4scixhKXt2YXIgbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90O2lmKHRlPW5ldyBsdChlLmcsZS5mKSxKPWE5ZShlKSxKLmE9Yi5NYXRoLm1heChKLmEsdCksSi5iPWIuTWF0aC5tYXgoSi5iLG4pLG90PUouYS90ZS5hLEM9Si5iL3RlLmIsJGU9Si5hLXRlLmEsdz1KLmItdGUuYixyKWZvcihmPWRzKGUpP2woYXQoZHMoZSksKHBpKCkseHYpKSw4OCk6bChhdChlLChwaSgpLHh2KSksODgpLGc9cWUoYXQoZSwocGkoKSxfTSkpKT09PXFlKChSYSgpLE11KSksVGU9bmV3IG9yKCghZS5jJiYoZS5jPW5ldyBudChIbCxlLDksOSkpLGUuYykpO1RlLmUhPVRlLmkuZ2MoKTspc3dpdGNoKGZlPWwoZ3IoVGUpLDEyMyksTWU9bChhdChmZSxzNyksNjQpLE1lPT0oQ3QoKSxQYykmJihNZT1Fa2UoZmUsZiksSGkoZmUsczcsTWUpKSxNZS5nKXtjYXNlIDE6Z3x8VXUoZmUsZmUuaSpvdCk7YnJlYWs7Y2FzZSAyOlV1KGZlLGZlLmkrJGUpLGd8fEd1KGZlLGZlLmoqQyk7YnJlYWs7Y2FzZSAzOmd8fFV1KGZlLGZlLmkqb3QpLEd1KGZlLGZlLmordyk7YnJlYWs7Y2FzZSA0Omd8fEd1KGZlLGZlLmoqQyl9aWYoRjUoZSxKLmEsSi5iKSxhKWZvcihCPW5ldyBvcigoIWUubiYmKGUubj1uZXcgbnQoZWMsZSwxLDcpKSxlLm4pKTtCLmUhPUIuaS5nYygpOylMPWwoZ3IoQiksMTM1KSx6PUwuaStMLmcvMixWPUwuaitMLmYvMixaZT16L3RlLmEsRT1WL3RlLmIsWmUrRT49MSYmKFplLUU+MCYmVj49MD8oVXUoTCxMLmkrJGUpLEd1KEwsTC5qK3cqRSkpOlplLUU8MCYmej49MCYmKFV1KEwsTC5pKyRlKlplKSxHdShMLEwuait3KSkpO3JldHVybiBIaShlLChwaSgpLGt2KSwobWgoKSxvPWwoSzAoQk0pLDkpLG5ldyBaaChvLGwoYzAobyxvLmxlbmd0aCksOSksMCkpKSxuZXcgbHQob3QsQyl9ZnVuY3Rpb24gUXZ0KGUpe3N3KGUsbmV3IFhtKFV6KG53KFp2KHR3KGV3KG5ldyB4MSxnZiksIkVMSyBSYWRpYWwiKSwnQSByYWRpYWwgbGF5b3V0IHByb3ZpZGVyIHdoaWNoIGlzIGJhc2VkIG9uIHRoZSBhbGdvcml0aG0gb2YgUGV0ZXIgRWFkZXMgcHVibGlzaGVkIGluICJEcmF3aW5nIGZyZWUgdHJlZXMuIiwgcHVibGlzaGVkIGJ5IEludGVybmF0aW9uYWwgSW5zdGl0dXRlIGZvciBBZHZhbmNlZCBTdHVkeSBvZiBTb2NpYWwgSW5mb3JtYXRpb24gU2NpZW5jZSwgRnVqaXRzdSBMaW1pdGVkIGluIDE5OTEuIFRoZSByYWRpYWwgbGF5b3V0ZXIgdGFrZXMgYSB0cmVlIGFuZCBwbGFjZXMgdGhlIG5vZGVzIGluIHJhZGlhbCBvcmRlciBhcm91bmQgdGhlIHJvb3QuIFRoZSBub2RlcyBvZiB0aGUgc2FtZSB0cmVlIGxldmVsIGFyZSBwbGFjZWQgb24gdGhlIHNhbWUgcmFkaXVzLicpLG5ldyBmdSksZ2YpKSksZ3QoZSxnZixfRyxJdCh1Q3QpKSxndChlLGdmLEp5LEl0KGxDdCkpLGd0KGUsZ2YseDYsSXQoc0N0KSksZ3QoZSxnZixQeCxJdChhQ3QpKSxndChlLGdmLE54LEl0KG9DdCkpLGd0KGUsZ2YsZlQsSXQoaUN0KSksZ3QoZSxnZixmTCxJdChOSWUpKSxndChlLGdmLGRULEl0KGNDdCkpLGd0KGUsZ2YsQ2ZlLEl0KEpkZSkpLGd0KGUsZ2YsVGZlLEl0KFpkZSkpLGd0KGUsZ2YsTkcsSXQoQkllKSksZ3QoZSxnZixTZmUsSXQoZWdlKSksZ3QoZSxnZixfZmUsSXQoRkllKSksZ3QoZSxnZixNQ2UsSXQoUkllKSksZ3QoZSxnZixMQ2UsSXQoUEllKSksZ3QoZSxnZixDQ2UsSXQocVcpKSxndChlLGdmLFNDZSxJdChIVykpLGd0KGUsZ2YsX0NlLEl0KEZCKSksZ3QoZSxnZixBQ2UsSXQoakllKSksZ3QoZSxnZixUQ2UsSXQoT0llKSl9ZnVuY3Rpb24gS1UoZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTDtpZihlPT1udWxsKXRocm93IHVlKG5ldyBnZCh1bCkpO2lmKEU9ZSxvPWUubGVuZ3RoLHc9ITEsbz4wJiYodD0oWG4oMCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KDApKSwodD09NDV8fHQ9PTQzKSYmKGU9KFhuKDEsZS5sZW5ndGgrMSksZS5zdWJzdHIoMSkpLC0tbyx3PXQ9PTQ1KSksbz09MCl0aHJvdyB1ZShuZXcgZ2QoWXcrRSsnIicpKTtmb3IoO2UubGVuZ3RoPjAmJihYbigwLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoMCk9PTQ4KTspZT0oWG4oMSxlLmxlbmd0aCsxKSxlLnN1YnN0cigxKSksLS1vO2lmKG8+KEFtdCgpLGI2dClbMTBdKXRocm93IHVlKG5ldyBnZChZdytFKyciJykpO2ZvcihhPTA7YTxvO2ErKylpZihXMXQoKFhuKGEsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChhKSkpPT0tMSl0aHJvdyB1ZShuZXcgZ2QoWXcrRSsnIicpKTtmb3IoTD0wLGY9cl9lWzEwXSxDPUEwZVsxMF0sZz1yMihpX2VbMTBdKSxuPSEwLHI9byVmLHI+MCYmKEw9LXBhcnNlSW50KChHYSgwLHIsZS5sZW5ndGgpLGUuc3Vic3RyKDAscikpLDEwKSxlPShYbihyLGUubGVuZ3RoKzEpLGUuc3Vic3RyKHIpKSxvLT1yLG49ITEpO28+PWY7KXtpZihyPXBhcnNlSW50KChHYSgwLGYsZS5sZW5ndGgpLGUuc3Vic3RyKDAsZikpLDEwKSxlPShYbihmLGUubGVuZ3RoKzEpLGUuc3Vic3RyKGYpKSxvLT1mLG4pbj0hMTtlbHNle2lmKGl1KEwsZyk8MCl0aHJvdyB1ZShuZXcgZ2QoWXcrRSsnIicpKTtMPW1vKEwsQyl9TD1EZihMLHIpfWlmKGl1KEwsMCk+MCl0aHJvdyB1ZShuZXcgZ2QoWXcrRSsnIicpKTtpZighdyYmKEw9cjIoTCksaXUoTCwwKTwwKSl0aHJvdyB1ZShuZXcgZ2QoWXcrRSsnIicpKTtyZXR1cm4gTH1mdW5jdGlvbiBWa2UoZSl7a2xlKCk7dmFyIHQsbixyLGEsbyxmLGcsdztpZihlPT1udWxsKXJldHVybiBudWxsO2lmKGE9cGQoZSxjbCgzNykpLGE8MClyZXR1cm4gZTtmb3Iodz1uZXcgVGgoKEdhKDAsYSxlLmxlbmd0aCksZS5zdWJzdHIoMCxhKSkpLHQ9V2UoQWwsQzYsMjgsNCwxNSwxKSxnPTAscj0wLGY9ZS5sZW5ndGg7YTxmO2ErKylpZihYbihhLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoYSk9PTM3JiZlLmxlbmd0aD5hKzImJm1jZSgoWG4oYSsxLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoYSsxKSksa1BlLEVQZSkmJm1jZSgoWG4oYSsyLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoYSsyKSksa1BlLEVQZSkpaWYobj12ZG4oKFhuKGErMSxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGErMSkpLChYbihhKzIsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChhKzIpKSksYSs9MixyPjA/KG4mMTkyKT09MTI4P3RbZysrXT1uPDwyND4+MjQ6cj0wOm4+PTEyOCYmKChuJjIyNCk9PTE5Mj8odFtnKytdPW48PDI0Pj4yNCxyPTIpOihuJjI0MCk9PTIyND8odFtnKytdPW48PDI0Pj4yNCxyPTMpOihuJjI0OCk9PTI0MCYmKHRbZysrXT1uPDwyND4+MjQscj00KSkscj4wKXtpZihnPT1yKXtzd2l0Y2goZyl7Y2FzZSAyOntoYih3LCgodFswXSYzMSk8PDZ8dFsxXSY2MykmWnMpO2JyZWFrfWNhc2UgMzp7aGIodywoKHRbMF0mMTUpPDwxMnwodFsxXSY2Myk8PDZ8dFsyXSY2MykmWnMpO2JyZWFrfX1nPTAscj0wfX1lbHNle2ZvcihvPTA7bzxnOysrbyloYih3LHRbb10mWnMpO2c9MCx3LmErPVN0cmluZy5mcm9tQ2hhckNvZGUobil9ZWxzZXtmb3Iobz0wO288ZzsrK28paGIodyx0W29dJlpzKTtnPTAsaGIodywoWG4oYSxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGEpKSl9cmV0dXJuIHcuYX1mdW5jdGlvbiBKdnQoZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVjtpZih6PWRzKGJjKGwoT2UoKCFlLmImJihlLmI9bmV3IExuKF9yLGUsNCw3KSksZS5iKSwwKSw4NCkpKSxWPWRzKGJjKGwoT2UoKCFlLmMmJihlLmM9bmV3IExuKF9yLGUsNSw4KSksZS5jKSwwKSw4NCkpKSxMPXo9PVYsZz1uZXcgcWEsdD1sKGF0KGUsKFBWKCksVk5lKSksNzUpLHQmJnQuYj49Mil7aWYoKCFlLmEmJihlLmE9bmV3IG50KGNzLGUsNiw2KSksZS5hKS5pPT0wKW49KHJiKCksYT1uZXcgcmssYSkscXIoKCFlLmEmJihlLmE9bmV3IG50KGNzLGUsNiw2KSksZS5hKSxuKTtlbHNlIGlmKCghZS5hJiYoZS5hPW5ldyBudChjcyxlLDYsNikpLGUuYSkuaT4xKWZvcihCPW5ldyBxOCgoIWUuYSYmKGUuYT1uZXcgbnQoY3MsZSw2LDYpKSxlLmEpKTtCLmUhPUIuaS5nYygpOylqQShCKTtkUCh0LGwoT2UoKCFlLmEmJihlLmE9bmV3IG50KGNzLGUsNiw2KSksZS5hKSwwKSwxNjYpKX1pZihMKWZvcihyPW5ldyBvcigoIWUuYSYmKGUuYT1uZXcgbnQoY3MsZSw2LDYpKSxlLmEpKTtyLmUhPXIuaS5nYygpOylmb3Iobj1sKGdyKHIpLDE2NiksRT1uZXcgb3IoKCFuLmEmJihuLmE9bmV3IFlzKHFoLG4sNSkpLG4uYSkpO0UuZSE9RS5pLmdjKCk7KXc9bChncihFKSwzNzcpLGcuYT1iLk1hdGgubWF4KGcuYSx3LmEpLGcuYj1iLk1hdGgubWF4KGcuYix3LmIpO2ZvcihmPW5ldyBvcigoIWUubiYmKGUubj1uZXcgbnQoZWMsZSwxLDcpKSxlLm4pKTtmLmUhPWYuaS5nYygpOylvPWwoZ3IoZiksMTM1KSxDPWwoYXQobyxNTSksOCksQyYmUWgobyxDLmEsQy5iKSxMJiYoZy5hPWIuTWF0aC5tYXgoZy5hLG8uaStvLmcpLGcuYj1iLk1hdGgubWF4KGcuYixvLmorby5mKSk7cmV0dXJuIGd9ZnVuY3Rpb24gWnZ0KGUsdCxuLHIsYSl7dmFyIG8sZixnO2lmKGVodChlLHQpLGY9dFswXSxvPWNvKG4uYywwKSxnPS0xLHo3ZShuKSlpZihyPjApe2lmKGYrcj5lLmxlbmd0aClyZXR1cm4hMTtnPWtVKChHYSgwLGYrcixlLmxlbmd0aCksZS5zdWJzdHIoMCxmK3IpKSx0KX1lbHNlIGc9a1UoZSx0KTtzd2l0Y2gobyl7Y2FzZSA3MTpyZXR1cm4gZz1vNihlLGYsaGUobGUoenQsMSksZHQsMiw2LFtSd3Qsand0XSksdCksYS5lPWcsITA7Y2FzZSA3NzpyZXR1cm4gZFNuKGUsdCxhLGcsZik7Y2FzZSA3NjpyZXR1cm4gZ1NuKGUsdCxhLGcsZik7Y2FzZSA2OTpyZXR1cm4gc2tuKGUsdCxmLGEpO2Nhc2UgOTk6cmV0dXJuIGFrbihlLHQsZixhKTtjYXNlIDk3OnJldHVybiBnPW82KGUsZixoZShsZSh6dCwxKSxkdCwyLDYsWyJBTSIsIlBNIl0pLHQpLGEuYj1nLCEwO2Nhc2UgMTIxOnJldHVybiBwU24oZSx0LGYsZyxuLGEpO2Nhc2UgMTAwOnJldHVybiBnPD0wPyExOihhLmM9ZywhMCk7Y2FzZSA4MzpyZXR1cm4gZzwwPyExOng1bihnLGYsdFswXSxhKTtjYXNlIDEwNDpnPT0xMiYmKGc9MCk7Y2FzZSA3NTpjYXNlIDcyOnJldHVybiBnPDA/ITE6KGEuZj1nLGEuZz0hMSwhMCk7Y2FzZSAxMDc6cmV0dXJuIGc8MD8hMTooYS5mPWcsYS5nPSEwLCEwKTtjYXNlIDEwOTpyZXR1cm4gZzwwPyExOihhLmo9ZywhMCk7Y2FzZSAxMTU6cmV0dXJuIGc8MD8hMTooYS5uPWcsITApO2Nhc2UgOTA6aWYoZjxlLmxlbmd0aCYmKFhuKGYsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChmKT09OTApKXJldHVybisrdFswXSxhLm89MCwhMDtjYXNlIDEyMjpjYXNlIDExODpyZXR1cm4gTHhuKGUsZix0LGEpO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIEpEbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY247Zm9yKE1lPXQuYy5sZW5ndGgsYT1uZXcgZjYoZS5hLG4sbnVsbCxudWxsKSxjbj1XZShOYSxabywyOCxNZSwxNSwxKSxKPVdlKE5hLFpvLDI4LE1lLDE1LDEpLFY9V2UoTmEsWm8sMjgsTWUsMTUsMSksdGU9MCxnPTA7ZzxNZTtnKyspSltnXT1JaSxWW2ddPWxvO2Zvcih3PTA7dzxNZTt3KyspZm9yKHI9KFNuKHcsdC5jLmxlbmd0aCksbCh0LmNbd10sMTg1KSksY25bd109V3VlKHIpLGNuW3RlXT5jblt3XSYmKHRlPXcpLEw9bmV3IEcoZS5hLmIpO0wuYTxMLmMuYy5sZW5ndGg7KWZvcihDPWwocmUoTCksMzApLFRlPW5ldyBHKEMuYSk7VGUuYTxUZS5jLmMubGVuZ3RoOylmZT1sKHJlKFRlKSwxMCksb3Q9emUoci5wW2ZlLnBdKSt6ZShyLmRbZmUucF0pLEpbd109Yi5NYXRoLm1pbihKW3ddLG90KSxWW3ddPWIuTWF0aC5tYXgoVlt3XSxvdCtmZS5vLmIpO2ZvcihTdD1XZShOYSxabywyOCxNZSwxNSwxKSxFPTA7RTxNZTtFKyspKFNuKEUsdC5jLmxlbmd0aCksbCh0LmNbRV0sMTg1KSkubz09KEQxKCksd3YpP1N0W0VdPUpbdGVdLUpbRV06U3RbRV09Vlt0ZV0tVltFXTtmb3Iobz1XZShOYSxabywyOCxNZSwxNSwxKSx6PW5ldyBHKGUuYS5iKTt6LmE8ei5jLmMubGVuZ3RoOylmb3IoQj1sKHJlKHopLDMwKSxaZT1uZXcgRyhCLmEpO1plLmE8WmUuYy5jLmxlbmd0aDspe2ZvcigkZT1sKHJlKFplKSwxMCksZj0wO2Y8TWU7ZisrKW9bZl09emUoKFNuKGYsdC5jLmxlbmd0aCksbCh0LmNbZl0sMTg1KSkucFskZS5wXSkremUoKFNuKGYsdC5jLmxlbmd0aCksbCh0LmNbZl0sMTg1KSkuZFskZS5wXSkrU3RbZl07X1FlKG8sTWh0KFBlLnByb3RvdHlwZS5NZSxQZSxbXSkpLGEucFskZS5wXT0ob1sxXStvWzJdKS8yLGEuZFskZS5wXT0wfXJldHVybiBhfWZ1bmN0aW9uIFpEbihlLHQsbil7dmFyIHIsYSxvLGYsZztzd2l0Y2gocj10Lmksbz1lLmkubyxhPWUuaS5kLGc9ZS5uLGY9SWMoaGUobGUoRWEsMSksZHQsOCwwLFtnLGUuYV0pKSxlLmouZyl7Y2FzZSAxOnZkKHQsKG9sKCksdzApKSxyLmQ9LWEuZC1uLXIuYSxsKGwoanQodC5kLDApLDE4Nykub2YoKGZ0KCksWXgpKSwyOTEpPT0oSWgoKSxrZyk/KFowKHQsKEJsKCksdjApKSxyLmM9Zi5hLXplKEdlKFEoZSxSNikpKS1uLXIuYik6KFowKHQsKEJsKCksRmQpKSxyLmM9Zi5hK3plKEdlKFEoZSxSNikpKStuKTticmVhaztjYXNlIDI6WjAodCwoQmwoKSxGZCkpLHIuYz1vLmErYS5jK24sbChsKGp0KHQuZCwwKSwxODcpLm9mKChmdCgpLFl4KSksMjkxKT09KEloKCksa2cpPyh2ZCh0LChvbCgpLHcwKSksci5kPWYuYi16ZShHZShRKGUsUjYpKSktbi1yLmEpOih2ZCh0LChvbCgpLGExKSksci5kPWYuYit6ZShHZShRKGUsUjYpKSkrbik7YnJlYWs7Y2FzZSAzOnZkKHQsKG9sKCksYTEpKSxyLmQ9by5iK2EuYStuLGwobChqdCh0LmQsMCksMTg3KS5vZigoZnQoKSxZeCkpLDI5MSk9PShJaCgpLGtnKT8oWjAodCwoQmwoKSx2MCkpLHIuYz1mLmEtemUoR2UoUShlLFI2KSkpLW4tci5iKTooWjAodCwoQmwoKSxGZCkpLHIuYz1mLmEremUoR2UoUShlLFI2KSkpK24pO2JyZWFrO2Nhc2UgNDpaMCh0LChCbCgpLHYwKSksci5jPS1hLmItbi1yLmIsbChsKGp0KHQuZCwwKSwxODcpLm9mKChmdCgpLFl4KSksMjkxKT09KEloKCksa2cpPyh2ZCh0LChvbCgpLHcwKSksci5kPWYuYi16ZShHZShRKGUsUjYpKSktbi1yLmEpOih2ZCh0LChvbCgpLGExKSksci5kPWYuYit6ZShHZShRKGUsUjYpKSkrbil9fWZ1bmN0aW9uIGVJbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEo7Zm9yKG4uVWcoeXl0LDEpLCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSxyPXplKEdlKGF0KHQsKHoxKCksS1cpKSkpLEM9emUoR2UoYXQodCx3TSkpKSxCPWwoYXQodCx2TSksMTA3KSx6PW5ldyBRM2UocixDKSxvPXd3dCh6LHQsQiksU2h0KHQseiksZz1sKGF0KHQsbk9lKSwxNykuYTtnPjE7KXtpZihhPWFDbih0KSxMPW8uZyxWPWwoYXQodCx2TSksMTA3KSxKPXplKEdlKGF0KHQsS1cpKSksKCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpLmk+MSYmemUoR2UoYXQodCwodWcoKSxjZ2UpKSkpIT1ncyYmKG8uYysoVi5iK1YuYykpLyhvLmIrKFYuZCtWLmEpKTxKP0hpKGEsKHVnKCksVDQpLHplKEdlKGF0KHQsVDQpKSkremUoR2UoYXQodCxjZ2UpKSkpOighdC5hJiYodC5hPW5ldyBudChBaSx0LDEwLDExKSksdC5hKS5pPjEmJnplKEdlKGF0KHQsKHVnKCksb2dlKSkpKSE9Z3MmJihvLmMrKFYuYitWLmMpKS8oby5iKyhWLmQrVi5hKSk+SiYmSGkoYSwodWcoKSxUNCksYi5NYXRoLm1heCh6ZShHZShhdCh0LG1NKSkpLHplKEdlKGF0KGEsVDQpKSktemUoR2UoYXQodCxvZ2UpKSkpKSx6PW5ldyBRM2UocixDKSx3PXd3dCh6LGEsQiksRT13LmcsRT49TCYmRT09RSl7Zm9yKGY9MDtmPCghYS5hJiYoYS5hPW5ldyBudChBaSxhLDEwLDExKSksYS5hKS5pO2YrKylHcHQoZSxsKE9lKCghYS5hJiYoYS5hPW5ldyBudChBaSxhLDEwLDExKSksYS5hKSxmKSwyNyksbChPZSgoIXQuYSYmKHQuYT1uZXcgbnQoQWksdCwxMCwxMSkpLHQuYSksZiksMjcpKTtTaHQodCx6KSxsMm4obyx3LmMpLHUybihvLHcuYil9LS1nfUhpKHQsKHVnKCksWlQpLG8uYiksSGkodCxaeCxvLmMpLG4uVmcoKX1mdW5jdGlvbiB0SW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlO2Zvcih0LlVnKCJJbnRlcmFjdGl2ZSBub2RlIGxheWVyaW5nIiwxKSxuPW5ldyBidCxCPW5ldyBHKGUuYSk7Qi5hPEIuYy5jLmxlbmd0aDspe2ZvcihDPWwocmUoQiksMTApLHc9Qy5uLmEsZz13K0Muby5hLGc9Yi5NYXRoLm1heCh3KzEsZyksVGU9bmV3IFVhKG4sMCkscj1udWxsO1RlLmI8VGUuZC5nYygpOylpZih0ZT0obXIoVGUuYjxUZS5kLmdjKCkpLGwoVGUuZC5YYihUZS5jPVRlLmIrKyksNTc4KSksdGUuYz49Zyl7bXIoVGUuYj4wKSxUZS5hLlhiKFRlLmM9LS1UZS5iKTticmVha31lbHNlIHRlLmE+dyYmKHI/KHJhKHIuYix0ZS5iKSxyLmE9Yi5NYXRoLm1heChyLmEsdGUuYSkscGgoVGUpKToodnQodGUuYixDKSx0ZS5jPWIuTWF0aC5taW4odGUuYyx3KSx0ZS5hPWIuTWF0aC5tYXgodGUuYSxnKSxyPXRlKSk7cnx8KHI9bmV3IEdRZSxyLmM9dyxyLmE9ZyxieShUZSxyKSx2dChyLmIsQykpfWZvcihmPWUuYixFPTAsZmU9bmV3IEcobik7ZmUuYTxmZS5jLmMubGVuZ3RoOylmb3IodGU9bChyZShmZSksNTc4KSxhPW5ldyB5dShlKSxhLnA9RSsrLCRuKGYuYyxhKSx6PW5ldyBHKHRlLmIpO3ouYTx6LmMuYy5sZW5ndGg7KUM9bChyZSh6KSwxMCksVmEoQyxhKSxDLnA9MDtmb3IoTD1uZXcgRyhlLmEpO0wuYTxMLmMuYy5sZW5ndGg7KWlmKEM9bChyZShMKSwxMCksQy5wPT0wKWZvcihKPXFidChDLGUpO0ouYS5nYygpIT0wOylWPWwoSi5hLmVjKCkuS2MoKS5QYigpLDEwKSxKLmEuQmMoVikhPW51bGwsS2EoSixxYnQoVixlKSk7Zm9yKG89bmV3IFVhKGYsMCk7by5iPG8uZC5nYygpOykobXIoby5iPG8uZC5nYygpKSxsKG8uZC5YYihvLmM9by5iKyspLDMwKSkuYS5jLmxlbmd0aD09MCYmcGgobyk7ZS5hLmMubGVuZ3RoPTAsdC5WZygpfWZ1bmN0aW9uIG5JbihlLHQsbixyLGEsbyxmKXt2YXIgZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm4sam4sdXIsb2ksd3M7Zm9yKHo9MCxCbj0wLHc9bmV3IEcoZSk7dy5hPHcuYy5jLmxlbmd0aDspZz1sKHJlKHcpLDI3KSxGdnQoZyksej1iLk1hdGgubWF4KHosZy5nKSxCbis9Zy5nKmcuZjtmb3IoVj1Cbi9lLmMubGVuZ3RoLGFuPWo3bihlLFYpLEJuKz1lLmMubGVuZ3RoKmFuLHo9Yi5NYXRoLm1heCh6LGIuTWF0aC5zcXJ0KEJuKmYpKStuLmIsb2k9bi5iLHdzPW4uZCxCPTAsQz1uLmIrbi5jLGNuPW5ldyBvcyx1aShjbixwdCgwKSksb3Q9bmV3IG9zLEU9bmV3IFVhKGUsMCk7RS5iPEUuZC5nYygpOylnPShtcihFLmI8RS5kLmdjKCkpLGwoRS5kLlhiKEUuYz1FLmIrKyksMjcpKSx1cj1nLmcsTD1nLmYsb2krdXI+eiYmKG8mJihrbyhvdCxCKSxrbyhjbixwdChFLmItMSkpKSxvaT1uLmIsd3MrPUIrdCxCPTAsQz1iLk1hdGgubWF4KEMsbi5iK24uYyt1cikpLFV1KGcsb2kpLEd1KGcsd3MpLEM9Yi5NYXRoLm1heChDLG9pK3VyK24uYyksQj1iLk1hdGgubWF4KEIsTCksb2krPXVyK3Q7aWYoQz1iLk1hdGgubWF4KEMsciksam49d3MrQituLmEsam48YSYmKEIrPWEtam4sam49YSksbylmb3Iob2k9bi5iLEU9bmV3IFVhKGUsMCksa28oY24scHQoZS5jLmxlbmd0aCkpLFN0PVJyKGNuLDApLGZlPWwoQnIoU3QpLDE3KS5hLGtvKG90LEIpLFplPVJyKG90LDApLCRlPTA7RS5iPEUuZC5nYygpOylFLmI9PWZlJiYob2k9bi5iLCRlPXplKEdlKEJyKFplKSkpLGZlPWwoQnIoU3QpLDE3KS5hKSxnPShtcihFLmI8RS5kLmdjKCkpLGwoRS5kLlhiKEUuYz1FLmIrKyksMjcpKSxUZT1nLmYsTXcoZywkZSksSj0kZSxFLmI9PWZlJiYodGU9Qy1vaS1uLmMsTWU9Zy5nLER3KGcsdGUpLGM5ZShnLG5ldyBsdCh0ZSxKKSxuZXcgbHQoTWUsVGUpKSksb2krPWcuZyt0O3JldHVybiBuZXcgbHQoQyxqbil9ZnVuY3Rpb24gckluKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdCxjbixhbjtmb3IodC5VZygiQ29tcG91bmQgZ3JhcGggcG9zdHByb2Nlc3NvciIsMSksbj1SdChCdChRKGUsKE50KCksbGRlKSkpKSxnPWwoUShlLChmdCgpLGpMZSkpLDIyOSksQz1uZXcgS3MsZmU9Zy5lYygpLktjKCk7ZmUuT2IoKTspe2Zvcih0ZT1sKGZlLlBiKCksMTgpLGY9bmV3IE9sKGcuY2ModGUpKSxDbigpLFZzKGYsbmV3IEdJKGUpKSxaZT1kM24oKFNuKDAsZi5jLmxlbmd0aCksbChmLmNbMF0sMjQ5KSkpLFN0PUNmdChsKGp0KGYsZi5jLmxlbmd0aC0xKSwyNDkpKSxNZT1aZS5pLGJFKFN0LmksTWUpP1RlPU1lLmU6VGU9ZW8oTWUpLEw9bTZuKHRlLGYpLENoKHRlLmEpLEI9bnVsbCxvPW5ldyBHKGYpO28uYTxvLmMuYy5sZW5ndGg7KWE9bChyZShvKSwyNDkpLEo9bmV3IHFhLG45ZShKLGEuYSxUZSksej1hLmIscj1uZXcgYmwsQWNlKHIsMCx6LmEpLER5KHIsSiksJGU9bmV3IEVvKEkxKHouYykpLG90PW5ldyBFbyhJMSh6LmQpKSxPaSgkZSxKKSxPaShvdCxKKSxCJiYoci5iPT0wP1Y9b3Q6Vj0obXIoci5iIT0wKSxsKHIuYS5hLmMsOCkpLGNuPWIuTWF0aC5hYnMoQi5hLVYuYSk+RGQsYW49Yi5NYXRoLmFicyhCLmItVi5iKT5EZCwoIW4mJmNuJiZhbnx8biYmKGNufHxhbikpJiZ1aSh0ZS5hLCRlKSksS2EodGUuYSxyKSxyLmI9PTA/Qj0kZTpCPShtcihyLmIhPTApLGwoci5jLmIuYyw4KSksejNuKHosTCxKKSxDZnQoYSk9PVN0JiYoZW8oU3QuaSkhPWEuYSYmKEo9bmV3IHFhLG45ZShKLGVvKFN0LmkpLFRlKSkscnQodGUsWTFlLEopKSxFOW4oeix0ZSxUZSksQy5hLnpjKHosQyk7cG8odGUsWmUpLEZhKHRlLFN0KX1mb3IoRT1DLmEuZWMoKS5LYygpO0UuT2IoKTspdz1sKEUuUGIoKSwxOCkscG8odyxudWxsKSxGYSh3LG51bGwpO3QuVmcoKX1mdW5jdGlvbiBpSW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCO2ZvcihhPWwoUShlLChIYygpLHkzKSksODgpLEM9YT09KEpzKCksdWMpfHxhPT12Yz9RMTp2YyxuPWwoeWMoRmkobmV3IGJuKG51bGwsbmV3IGtuKGUuYiwxNikpLG5ldyBwSSksUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsWyhGbCgpLEVjKV0pKSksMTUpLHc9bCh5YyhmYyhuLk9jKCksbmV3IGRYZSh0KSksUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsW0VjXSkpKSwxNSksdy5HYyhsKHljKGZjKG4uT2MoKSxuZXcgZ1hlKHQpKSxQbChuZXcgenIsbmV3IGh0LG5ldyBGbixoZShsZShvYywxKSxpdCwxMDgsMCxbRWNdKSkpLDE2KSksdy5qZChuZXcgcFhlKEMpKSxCPW5ldyBLcChuZXcgYlhlKGEpKSxyPW5ldyBQcixnPXcuS2MoKTtnLk9iKCk7KWY9bChnLlBiKCksMjQwKSxFPWwoZi5hLDQwKSxSdChCdChmLmMpKT8oQi5hLnpjKEUsKEhuKCksUGIpKT09bnVsbCxuZXcgYmEoQi5hLlpjKEUsITEpKS5hLmdjKCk+MCYma2kocixFLGwobmV3IGJhKEIuYS5aYyhFLCExKSkuYS5WYygpLDQwKSksbmV3IGJhKEIuYS5hZChFLCEwKSkuYS5nYygpPjEmJmtpKHIsTDF0KEIsRSksRSkpOihuZXcgYmEoQi5hLlpjKEUsITEpKS5hLmdjKCk+MCYmKG89bChuZXcgYmEoQi5hLlpjKEUsITEpKS5hLlZjKCksNDApLHFlKG8pPT09cWUoaGMoem8oci5mLEUpKSkmJmwoUShFLChRaSgpLE9kZSkpLDE1KS5GYyhvKSksbmV3IGJhKEIuYS5hZChFLCEwKSkuYS5nYygpPjEmJihMPUwxdChCLEUpLHFlKGhjKHpvKHIuZixMKSkpPT09cWUoRSkmJmwoUShMLChRaSgpLE9kZSkpLDE1KS5GYyhFKSksQi5hLkJjKEUpIT1udWxsKX1mdW5jdGlvbiBld3QoZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlO2lmKGUuZ2MoKT09MSlyZXR1cm4gbChlLlhiKDApLDIzNSk7aWYoZS5nYygpPD0wKXJldHVybiBuZXcgS0g7Zm9yKGE9ZS5LYygpO2EuT2IoKTspe2ZvcihuPWwoYS5QYigpLDIzNSksVj0wLEM9SWksTD1JaSx3PWxvLEU9bG8sej1uZXcgRyhuLmUpO3ouYTx6LmMuYy5sZW5ndGg7KUI9bChyZSh6KSwxNTMpLFYrPWwoUShCLChiMCgpLHF4KSksMTcpLmEsQz1iLk1hdGgubWluKEMsQi5kLmEtQi5lLmEvMiksTD1iLk1hdGgubWluKEwsQi5kLmItQi5lLmIvMiksdz1iLk1hdGgubWF4KHcsQi5kLmErQi5lLmEvMiksRT1iLk1hdGgubWF4KEUsQi5kLmIrQi5lLmIvMik7cnQobiwoYjAoKSxxeCkscHQoVikpLHJ0KG4sKGJiKCksJEwpLG5ldyBsdChDLEwpKSxydChuLGhCLG5ldyBsdCh3LEUpKX1mb3IoQ24oKSxlLmpkKG5ldyB6OSksSj1uZXcgS0gscGMoSixsKGUuWGIoMCksOTYpKSxnPTAsVGU9MCxvPWUuS2MoKTtvLk9iKCk7KW49bChvLlBiKCksMjM1KSx0ZT1tYShKYShsKFEobiwoYmIoKSxoQikpLDgpKSxsKFEobiwkTCksOCkpLGc9Yi5NYXRoLm1heChnLHRlLmEpLFRlKz10ZS5hKnRlLmI7Zm9yKGc9Yi5NYXRoLm1heChnLGIuTWF0aC5zcXJ0KFRlKSp6ZShHZShRKEosKGIwKCksRzd0KSkpKSksZmU9emUoR2UoUShKLGtLKSkpLE1lPTAsJGU9MCxmPTAsdD1mZSxyPWUuS2MoKTtyLk9iKCk7KW49bChyLlBiKCksMjM1KSx0ZT1tYShKYShsKFEobiwoYmIoKSxoQikpLDgpKSxsKFEobiwkTCksOCkpLE1lK3RlLmE+ZyYmKE1lPTAsJGUrPWYrZmUsZj0wKSxEX24oSixuLE1lLCRlKSx0PWIuTWF0aC5tYXgodCxNZSt0ZS5hKSxmPWIuTWF0aC5tYXgoZix0ZS5iKSxNZSs9dGUuYStmZTtyZXR1cm4gSn1mdW5jdGlvbiBzSW4oZSl7a2tlKCk7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2lmKGU9PW51bGx8fChvPWlWKGUpLFY9TzRuKG8pLFYlNCE9MCkpcmV0dXJuIG51bGw7aWYoSj1WLzR8MCxKPT0wKXJldHVybiBXZShBbCxDNiwyOCwwLDE1LDEpO2ZvcihMPW51bGwsdD0wLG49MCxyPTAsYT0wLGY9MCxnPTAsdz0wLEU9MCx6PTAsQj0wLEM9MCxMPVdlKEFsLEM2LDI4LEoqMywxNSwxKTt6PEotMTt6Kyspe2lmKCFlTyhmPW9bQysrXSl8fCFlTyhnPW9bQysrXSl8fCFlTyh3PW9bQysrXSl8fCFlTyhFPW9bQysrXSkpcmV0dXJuIG51bGw7dD1uZFtmXSxuPW5kW2ddLHI9bmRbd10sYT1uZFtFXSxMW0IrK109KHQ8PDJ8bj4+NCk8PDI0Pj4yNCxMW0IrK109KChuJjE1KTw8NHxyPj4yJjE1KTw8MjQ+PjI0LExbQisrXT0ocjw8NnxhKTw8MjQ+PjI0fXJldHVybiFlTyhmPW9bQysrXSl8fCFlTyhnPW9bQysrXSk/bnVsbDoodD1uZFtmXSxuPW5kW2ddLHc9b1tDKytdLEU9b1tDKytdLG5kW3ddPT0tMXx8bmRbRV09PS0xP3c9PTYxJiZFPT02MT9uJjE1P251bGw6KHRlPVdlKEFsLEM2LDI4LHoqMysxLDE1LDEpLHB1KEwsMCx0ZSwwLHoqMyksdGVbQl09KHQ8PDJ8bj4+NCk8PDI0Pj4yNCx0ZSk6dyE9NjEmJkU9PTYxPyhyPW5kW3ddLHImMz9udWxsOih0ZT1XZShBbCxDNiwyOCx6KjMrMiwxNSwxKSxwdShMLDAsdGUsMCx6KjMpLHRlW0IrK109KHQ8PDJ8bj4+NCk8PDI0Pj4yNCx0ZVtCXT0oKG4mMTUpPDw0fHI+PjImMTUpPDwyND4+MjQsdGUpKTpudWxsOihyPW5kW3ddLGE9bmRbRV0sTFtCKytdPSh0PDwyfG4+PjQpPDwyND4+MjQsTFtCKytdPSgobiYxNSk8PDR8cj4+MiYxNSk8PDI0Pj4yNCxMW0IrK109KHI8PDZ8YSk8PDI0Pj4yNCxMKSl9ZnVuY3Rpb24gYUluKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZTtmb3IodC5VZyhLM3QsMSksVj1sKFEoZSwoTnQoKSxicCkpLDIyMyksYT1uZXcgRyhlLmIpO2EuYTxhLmMuYy5sZW5ndGg7KWZvcihyPWwocmUoYSksMzApLEU9Sk8oci5hKSxmPUUsZz0wLHc9Zi5sZW5ndGg7Zzx3OysrZylpZihvPWZbZ10sby5rPT0oWm4oKSxBdSkpe2lmKFY9PShpcCgpLHM5KSlmb3IoTD1uZXcgRyhvLmopO0wuYTxMLmMuYy5sZW5ndGg7KUM9bChyZShMKSwxMiksQy5lLmMubGVuZ3RoPT0wfHxRNW4oQyksQy5nLmMubGVuZ3RoPT0wfHxKNW4oQyk7ZWxzZSBpZihEZShRKG8sKGZ0KCksemkpKSwxOCkpdGU9bChRKG8semkpLDE4KSxmZT1sKGQyKG8sKEN0KCksZXIpKS5LYygpLlBiKCksMTIpLFRlPWwoZDIobyxhcikuS2MoKS5QYigpLDEyKSxNZT1sKFEoZmUsemkpLDEyKSwkZT1sKFEoVGUsemkpLDEyKSxwbyh0ZSwkZSksRmEodGUsTWUpLFplPW5ldyBFbyhUZS5pLm4pLFplLmE9SWMoaGUobGUoRWEsMSksZHQsOCwwLFskZS5pLm4sJGUubiwkZS5hXSkpLmEsdWkodGUuYSxaZSksWmU9bmV3IEVvKGZlLmkubiksWmUuYT1JYyhoZShsZShFYSwxKSxkdCw4LDAsW01lLmkubixNZS5uLE1lLmFdKSkuYSx1aSh0ZS5hLFplKTtlbHNle2lmKG8uai5jLmxlbmd0aD49Mil7Zm9yKEo9ITAsQj1uZXcgRyhvLmopLG49bChyZShCKSwxMiksej1udWxsO0IuYTxCLmMuYy5sZW5ndGg7KWlmKHo9bixuPWwocmUoQiksMTIpLCFQaShRKHosemkpLFEobix6aSkpKXtKPSExO2JyZWFrfX1lbHNlIEo9ITE7Zm9yKEw9bmV3IEcoby5qKTtMLmE8TC5jLmMubGVuZ3RoOylDPWwocmUoTCksMTIpLEMuZS5jLmxlbmd0aD09MHx8QkNuKEMsSiksQy5nLmMubGVuZ3RoPT0wfHxGQ24oQyxKKX1WYShvLG51bGwpfXQuVmcoKX1mdW5jdGlvbiBvSW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplO2ZvcihnPW5ldyBHKGUuYS5iKTtnLmE8Zy5jLmMubGVuZ3RoOylmb3Iobz1sKHJlKGcpLDMwKSxNZT1uZXcgRyhvLmEpO01lLmE8TWUuYy5jLmxlbmd0aDspVGU9bChyZShNZSksMTApLHQuZ1tUZS5wXT1UZSx0LmFbVGUucF09VGUsdC5kW1RlLnBdPTA7Zm9yKHc9ZS5hLmIsdC5jPT0oeGQoKSxUMikmJih3PWxmKHcpKSxmPXcuS2MoKTtmLk9iKCk7KWZvcihvPWwoZi5QYigpLDMwKSx6PS0xLEI9by5hLHQubz09KEQxKCksWTEpJiYoej1JaSxCPWxmKEIpKSxaZT1CLktjKCk7WmUuT2IoKTspaWYoJGU9bChaZS5QYigpLDEwKSxMPW51bGwsdC5jPT1UMj9MPWwoanQoZS5iLmYsJGUucCksMTUpOkw9bChqdChlLmIuYiwkZS5wKSwxNSksTC5nYygpPjApaWYocj1MLmdjKCksRT11YShiLk1hdGguZmxvb3IoKHIrMSkvMikpLTEsYT11YShiLk1hdGguY2VpbCgocisxKS8yKSktMSx0Lm89PVkxKWZvcihDPWE7Qz49RTtDLS0pdC5hWyRlLnBdPT0kZSYmKEo9bChMLlhiKEMpLDQyKSxWPWwoSi5hLDEwKSwhVzAobixKLmIpJiZ6PmUuYi5lW1YucF0mJih0LmFbVi5wXT0kZSx0LmdbJGUucF09dC5nW1YucF0sdC5hWyRlLnBdPXQuZ1skZS5wXSx0LmZbdC5nWyRlLnBdLnBdPShIbigpLCEhKFJ0KHQuZlt0LmdbJGUucF0ucF0pJiRlLms9PShabigpLEFhKSkpLHo9ZS5iLmVbVi5wXSkpO2Vsc2UgZm9yKEM9RTtDPD1hO0MrKyl0LmFbJGUucF09PSRlJiYoZmU9bChMLlhiKEMpLDQyKSx0ZT1sKGZlLmEsMTApLCFXMChuLGZlLmIpJiZ6PGUuYi5lW3RlLnBdJiYodC5hW3RlLnBdPSRlLHQuZ1skZS5wXT10LmdbdGUucF0sdC5hWyRlLnBdPXQuZ1skZS5wXSx0LmZbdC5nWyRlLnBdLnBdPShIbigpLCEhKFJ0KHQuZlt0LmdbJGUucF0ucF0pJiRlLms9PShabigpLEFhKSkpLHo9ZS5iLmVbdGUucF0pKX1mdW5jdGlvbiB0d3QoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuO3JldHVybiBNZT1lLmNbKFNuKDAsdC5jLmxlbmd0aCksbCh0LmNbMF0sMTgpKS5wXSxTdD1lLmNbKFNuKDEsdC5jLmxlbmd0aCksbCh0LmNbMV0sMTgpKS5wXSxNZS5hLmUuZS1NZS5hLmEtKE1lLmIuZS5lLU1lLmIuYSk9PTAmJlN0LmEuZS5lLVN0LmEuYS0oU3QuYi5lLmUtU3QuYi5hKT09MHx8KGZlPU1lLmIuZS5mLCFEZShmZSwxMCkpPyExOih0ZT1sKGZlLDEwKSxaZT1lLmlbdGUucF0sb3Q9dGUuYz9nYyh0ZS5jLmEsdGUsMCk6LTEsbz1ncyxvdD4wJiYoYT1sKGp0KHRlLmMuYSxvdC0xKSwxMCksZj1lLmlbYS5wXSxjbj1iLk1hdGguY2VpbChqNShlLm4sYSx0ZSkpLG89WmUuYS5lLXRlLmQuZC0oZi5hLmUrYS5vLmIrYS5kLmEpLWNuKSxFPWdzLG90PHRlLmMuYS5jLmxlbmd0aC0xJiYodz1sKGp0KHRlLmMuYSxvdCsxKSwxMCksQz1lLmlbdy5wXSxjbj1iLk1hdGguY2VpbChqNShlLm4sdyx0ZSkpLEU9Qy5hLmUtdy5kLmQtKFplLmEuZSt0ZS5vLmIrdGUuZC5hKS1jbiksbiYmKEExKCksZjAoTmQpLGIuTWF0aC5hYnMoby1FKTw9TmR8fG89PUV8fGlzTmFOKG8pJiZpc05hTihFKSk/ITA6KHI9emFlKE1lLmEpLGc9LXphZShNZS5iKSxMPS16YWUoU3QuYSksVGU9emFlKFN0LmIpLEo9TWUuYS5lLmUtTWUuYS5hLShNZS5iLmUuZS1NZS5iLmEpPjAmJlN0LmEuZS5lLVN0LmEuYS0oU3QuYi5lLmUtU3QuYi5hKTwwLFY9TWUuYS5lLmUtTWUuYS5hLShNZS5iLmUuZS1NZS5iLmEpPDAmJlN0LmEuZS5lLVN0LmEuYS0oU3QuYi5lLmUtU3QuYi5hKT4wLHo9TWUuYS5lLmUrTWUuYi5hPFN0LmIuZS5lK1N0LmEuYSxCPU1lLmEuZS5lK01lLmIuYT5TdC5iLmUuZStTdC5hLmEsJGU9MCwhSiYmIVYmJihCP28rTD4wPyRlPUw6RS1yPjAmJigkZT1yKTp6JiYobytnPjA/JGU9ZzpFLVRlPjAmJigkZT1UZSkpKSxaZS5hLmUrPSRlLFplLmImJihaZS5kLmUrPSRlKSwhMSkpfWZ1bmN0aW9uIG53dChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEI7aWYocj1uZXcgZWYodC5MZigpLmEsdC5MZigpLmIsdC5NZigpLmEsdC5NZigpLmIpLGE9bmV3ICQ4LGUuYylmb3IoZj1uZXcgRyh0LlJmKCkpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxODcpLGEuYz1vLkxmKCkuYSt0LkxmKCkuYSxhLmQ9by5MZigpLmIrdC5MZigpLmIsYS5iPW8uTWYoKS5hLGEuYT1vLk1mKCkuYiwkQShyLGEpO2ZvcihFPW5ldyBHKHQuWGYoKSk7RS5hPEUuYy5jLmxlbmd0aDspe2lmKHc9bChyZShFKSw4NTIpLEM9dy5MZigpLmErdC5MZigpLmEsTD13LkxmKCkuYit0LkxmKCkuYixlLmUmJihhLmM9QyxhLmQ9TCxhLmI9dy5NZigpLmEsYS5hPXcuTWYoKS5iLCRBKHIsYSkpLGUuZClmb3IoZj1uZXcgRyh3LlJmKCkpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxODcpLGEuYz1vLkxmKCkuYStDLGEuZD1vLkxmKCkuYitMLGEuYj1vLk1mKCkuYSxhLmE9by5NZigpLmIsJEEocixhKTtpZihlLmIpe2lmKEI9bmV3IGx0KC1uLC1uKSxsKHQub2YoKHBpKCksUzQpKSwxODEpLkhjKChSbCgpLFliKSkpZm9yKGY9bmV3IEcody5SZigpKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMTg3KSxCLmErPW8uTWYoKS5hK24sQi5iKz1vLk1mKCkuYituO0IuYT1iLk1hdGgubWF4KEIuYSwwKSxCLmI9Yi5NYXRoLm1heChCLmIsMCksRW10KHIsdy5XZigpLHcuVWYoKSx0LHcsQixuKX19ZS5iJiZFbXQocix0LldmKCksdC5VZigpLHQsbnVsbCxudWxsLG4pLGc9bmV3IHhhZSh0LlZmKCkpLGcuZD1iLk1hdGgubWF4KDAsdC5MZigpLmItci5kKSxnLmE9Yi5NYXRoLm1heCgwLHIuZCtyLmEtKHQuTGYoKS5iK3QuTWYoKS5iKSksZy5iPWIuTWF0aC5tYXgoMCx0LkxmKCkuYS1yLmMpLGcuYz1iLk1hdGgubWF4KDAsci5jK3IuYi0odC5MZigpLmErdC5NZigpLmEpKSx0LlpmKGcpfWZ1bmN0aW9uIGNJbigpe3ZhciBlPVsiXFx1MDAwMCIsIlxcdTAwMDEiLCJcXHUwMDAyIiwiXFx1MDAwMyIsIlxcdTAwMDQiLCJcXHUwMDA1IiwiXFx1MDAwNiIsIlxcdTAwMDciLCJcXGIiLCJcXHQiLCJcXG4iLCJcXHUwMDBCIiwiXFxmIiwiXFxyIiwiXFx1MDAwRSIsIlxcdTAwMEYiLCJcXHUwMDEwIiwiXFx1MDAxMSIsIlxcdTAwMTIiLCJcXHUwMDEzIiwiXFx1MDAxNCIsIlxcdTAwMTUiLCJcXHUwMDE2IiwiXFx1MDAxNyIsIlxcdTAwMTgiLCJcXHUwMDE5IiwiXFx1MDAxQSIsIlxcdTAwMUIiLCJcXHUwMDFDIiwiXFx1MDAxRCIsIlxcdTAwMUUiLCJcXHUwMDFGIl07cmV0dXJuIGVbMzRdPSdcXCInLGVbOTJdPSJcXFxcIixlWzE3M109IlxcdTAwYWQiLGVbMTUzNl09IlxcdTA2MDAiLGVbMTUzN109IlxcdTA2MDEiLGVbMTUzOF09IlxcdTA2MDIiLGVbMTUzOV09IlxcdTA2MDMiLGVbMTc1N109IlxcdTA2ZGQiLGVbMTgwN109IlxcdTA3MGYiLGVbNjA2OF09IlxcdTE3YjQiLGVbNjA2OV09IlxcdTE3YjUiLGVbODIwM109IlxcdTIwMGIiLGVbODIwNF09IlxcdTIwMGMiLGVbODIwNV09IlxcdTIwMGQiLGVbODIwNl09IlxcdTIwMGUiLGVbODIwN109IlxcdTIwMGYiLGVbODIzMl09IlxcdTIwMjgiLGVbODIzM109IlxcdTIwMjkiLGVbODIzNF09IlxcdTIwMmEiLGVbODIzNV09IlxcdTIwMmIiLGVbODIzNl09IlxcdTIwMmMiLGVbODIzN109IlxcdTIwMmQiLGVbODIzOF09IlxcdTIwMmUiLGVbODI4OF09IlxcdTIwNjAiLGVbODI4OV09IlxcdTIwNjEiLGVbODI5MF09IlxcdTIwNjIiLGVbODI5MV09IlxcdTIwNjMiLGVbODI5Ml09IlxcdTIwNjQiLGVbODI5OF09IlxcdTIwNmEiLGVbODI5OV09IlxcdTIwNmIiLGVbODMwMF09IlxcdTIwNmMiLGVbODMwMV09IlxcdTIwNmQiLGVbODMwMl09IlxcdTIwNmUiLGVbODMwM109IlxcdTIwNmYiLGVbNjUyNzldPSJcXHVmZWZmIixlWzY1NTI5XT0iXFx1ZmZmOSIsZVs2NTUzMF09IlxcdWZmZmEiLGVbNjU1MzFdPSJcXHVmZmZiIixlfWZ1bmN0aW9uIHJ3dChlKXtzdyhlLG5ldyBYbShhM2UoVXoobncoWnYodHcoZXcobmV3IHgxLFl1KSwiRUxLIEZvcmNlIiksIkZvcmNlLWJhc2VkIGFsZ29yaXRobSBwcm92aWRlZCBieSB0aGUgRWNsaXBzZSBMYXlvdXQgS2VybmVsLiBJbXBsZW1lbnRzIG1ldGhvZHMgdGhhdCBmb2xsb3cgcGh5c2ljYWwgYW5hbG9naWVzIGJ5IHNpbXVsYXRpbmcgZm9yY2VzIHRoYXQgbW92ZSB0aGUgbm9kZXMgaW50byBhIGJhbGFuY2VkIGRpc3RyaWJ1dGlvbi4gQ3VycmVudGx5IHRoZSBvcmlnaW5hbCBFYWRlcyBtb2RlbCBhbmQgdGhlIEZydWNodGVybWFuIC0gUmVpbmdvbGQgbW9kZWwgYXJlIHN1cHBvcnRlZC4iKSxuZXcgbGQpLFl1KSxycygoSEUoKSx5WSksaGUobGUoeFksMSksaXQsMjQ1LDAsW3ZZXSkpKSkpLGd0KGUsWXUsTlAscHQoMSkpLGd0KGUsWXUsSnksODApLGd0KGUsWXUsT2hlLDUpLGd0KGUsWXUsT3gsbFQpLGd0KGUsWXUsb0cscHQoMSkpLGd0KGUsWXUsbEwsKEhuKCksITApKSxndChlLFl1LFh3LG5BZSksZ3QoZSxZdSxoTCxJdChaX2UpKSxndChlLFl1LE5oZSxJdChyQWUpKSxndChlLFl1LGNHLCExKSxndChlLFl1LGZMLEl0KHRBZSkpLGd0KGUsWXUsaFQsSXQoWDd0KSksZ3QoZSxZdSxOeCxJdChRN3QpKSxndChlLFl1LHg2LEl0KFk3dCkpLGd0KGUsWXUsZlQsSXQoVzd0KSksZ3QoZSxZdSxkVCxJdChaN3QpKSxndChlLFl1LGFHLEl0KGVBZSkpLGd0KGUsWXUsRGhlLEl0KFowZSkpLGd0KGUsWXUsSUVlLEl0KHhLKSksZ3QoZSxZdSxJaGUsSXQoSjBlKSksZ3QoZSxZdSxPRWUsSXQoaUFlKSksZ3QoZSxZdSxQUCxJdChzOHQpKSxndChlLFl1LEJQLEl0KGE4dCkpLGd0KGUsWXUsRlAsSXQoaTh0KSksZ3QoZSxZdSxSUCxJdChyOHQpKSxndChlLFl1LFF3LHNBZSl9ZnVuY3Rpb24gX2IoZSx0KXtEaSgpO3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWO2lmKGRfKHVDKT09MCl7Zm9yKEw9V2UoQk9uLGR0LDEyMix4QXQubGVuZ3RoLDAsMSksZj0wO2Y8TC5sZW5ndGg7ZisrKUxbZl09bmV3IF9oKDQpO2ZvcihyPW5ldyBoXyxvPTA7bzxXUGUubGVuZ3RoO28rKyl7aWYoQz1uZXcgX2goNCksbzw4ND8oZz1vKjIsej0oWG4oZyxiMGUubGVuZ3RoKSxiMGUuY2hhckNvZGVBdChnKSksQj0oWG4oZysxLGIwZS5sZW5ndGgpLGIwZS5jaGFyQ29kZUF0KGcrMSkpLEV1KEMseixCKSk6KGc9KG8tODQpKjIsRXUoQyxZUGVbZ10sWVBlW2crMV0pKSx3PVdQZVtvXSx2bih3LCJTcGVjaWFscyIpJiZFdShDLDY1NTIwLDY1NTMzKSx2bih3LFk1dCkmJihFdShDLDk4MzA0MCwxMDQ4NTczKSxFdShDLDEwNDg1NzYsMTExNDEwOSkpLHJjKHVDLHcsQykscmMoS00sdyxVeShDKSksRT1yLmEubGVuZ3RoLDA8RT9yLmE9dGYoci5hLDAsMCk6MD5FJiYoci5hKz1NbnQoV2Uoa2YsQWQsMjgsLUUsMTUsMSkpKSxyLmErPSJJcyIscGQodyxjbCgzMikpPj0wKWZvcihhPTA7YTx3Lmxlbmd0aDthKyspWG4oYSx3Lmxlbmd0aCksdy5jaGFyQ29kZUF0KGEpIT0zMiYmVWsociwoWG4oYSx3Lmxlbmd0aCksdy5jaGFyQ29kZUF0KGEpKSk7ZWxzZSByLmErPSIiK3c7RjhlKHIuYSx3LCEwKX1GOGUocDBlLCJDbiIsITEpLEY4ZSgkU2UsIkNuIiwhMCksbj1uZXcgX2goNCksRXUobiwwLFRUKSxyYyh1QywiQUxMIixuKSxyYyhLTSwiQUxMIixVeShuKSksIVA0JiYoUDQ9bmV3IFByKSxyYyhQNCxwMGUscDBlKSwhUDQmJihQND1uZXcgUHIpLHJjKFA0LCRTZSwkU2UpLCFQNCYmKFA0PW5ldyBQcikscmMoUDQsIkFMTCIsIkFMTCIpfXJldHVybiBWPWwoeHUodD91QzpLTSxlKSwxMzgpLFZ9ZnVuY3Rpb24gaXd0KGUpe3N3KGUsbmV3IFhtKGEzZShVeihudyhadih0dyhldyhuZXcgeDEsWHUpLCJFTEsgTXIuIFRyZWUiKSwiVHJlZS1iYXNlZCBhbGdvcml0aG0gcHJvdmlkZWQgYnkgdGhlIEVjbGlwc2UgTGF5b3V0IEtlcm5lbC4gQ29tcHV0ZXMgYSBzcGFubmluZyB0cmVlIG9mIHRoZSBpbnB1dCBncmFwaCBhbmQgYXJyYW5nZXMgYWxsIG5vZGVzIGFjY29yZGluZyB0byB0aGUgcmVzdWx0aW5nIHBhcmVudC1jaGlsZHJlbiBoaWVyYXJjaHkuIEkgcGl0eSB0aGUgZm9vbCB3aG8gZG9lc24ndCB1c2UgTXIuIFRyZWUgTGF5b3V0LiIpLG5ldyBXdGUpLGJ5dCksdW4oKEhFKCksWGdlKSkpKSksZ3QoZSxYdSxYdyxwSWUpLGd0KGUsWHUsSnksMjApLGd0KGUsWHUsZGZlLDMpLGd0KGUsWHUsT3gsbFQpLGd0KGUsWHUsTlAscHQoMSkpLGd0KGUsWHUsbEwsKEhuKCksITApKSxndChlLFh1LFZQLEl0KGxJZSkpLGd0KGUsWHUsZ2ZlLGhJZSksZ3QoZSxYdSxoTCxJdChrVHQpKSxndChlLFh1LEFHLEl0KEVUdCkpLGd0KGUsWHUseDYsSXQoQ1R0KSksZ3QoZSxYdSxoVCxJdChTVHQpKSxndChlLFh1LFB4LEl0KF9UdCkpLGd0KGUsWHUsTngsSXQoQVR0KSksZ3QoZSxYdSxmVCxJdChUVHQpKSxndChlLFh1LGZMLEl0KGRJZSkpLGd0KGUsWHUsZFQsSXQoTFR0KSksZ3QoZSxYdSxiQ2UsSXQod0llKSksZ3QoZSxYdSx2Q2UsSXQoYkllKSksZ3QoZSxYdSxQUCxJdChPVHQpKSxndChlLFh1LEJQLEl0KE5UdCkpLGd0KGUsWHUsRlAsSXQoSVR0KSksZ3QoZSxYdSxSUCxJdChEVHQpKSxndChlLFh1LFF3LHZJZSksZ3QoZSxYdSxwQ2UsSXQoVzYpKSxndChlLFh1LG1DZSxJdCgkZGUpKSxndChlLFh1LGdDZSxJdCgkZCkpLGd0KGUsWHUsZkNlLEl0KHVJZSkpLGd0KGUsWHUsZENlLEl0KGZJZSkpfWZ1bmN0aW9uIHN3dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKEU9bChsKCRpKGUucix0KSwyMSksODcpLGY9enhuKGUsdCksbj1lLnUuSGMoKFJsKCksTk0pKSx3PUUuS2MoKTt3Lk9iKCk7KWlmKGc9bCh3LlBiKCksMTE3KSwhKCFnLmN8fGcuYy5kLmMubGVuZ3RoPD0wKSl7c3dpdGNoKEI9Zy5iLk1mKCksQz1nLmMsTD1DLmksTC5iPShvPUMubixDLmUuYStvLmIrby5jKSxMLmE9KGE9Qy5uLEMuZS5iK2EuZCthLmEpLHQuZyl7Y2FzZSAxOmcuYT8oTC5jPShCLmEtTC5iKS8yLFowKEMsKEJsKCksQmIpKSk6Znx8bj8oTC5jPS1MLmItZS5zLFowKEMsKEJsKCksdjApKSk6KEwuYz1CLmErZS5zLFowKEMsKEJsKCksRmQpKSksTC5kPS1MLmEtZS50LHZkKEMsKG9sKCksdzApKTticmVhaztjYXNlIDM6Zy5hPyhMLmM9KEIuYS1MLmIpLzIsWjAoQywoQmwoKSxCYikpKTpmfHxuPyhMLmM9LUwuYi1lLnMsWjAoQywoQmwoKSx2MCkpKTooTC5jPUIuYStlLnMsWjAoQywoQmwoKSxGZCkpKSxMLmQ9Qi5iK2UudCx2ZChDLChvbCgpLGExKSk7YnJlYWs7Y2FzZSAyOmcuYT8ocj1lLnY/TC5hOmwoanQoQy5kLDApLDE4NykuTWYoKS5iLEwuZD0oQi5iLXIpLzIsdmQoQywob2woKSxGYikpKTpmfHxuPyhMLmQ9LUwuYS1lLnQsdmQoQywob2woKSx3MCkpKTooTC5kPUIuYitlLnQsdmQoQywob2woKSxhMSkpKSxMLmM9Qi5hK2UucyxaMChDLChCbCgpLEZkKSk7YnJlYWs7Y2FzZSA0OmcuYT8ocj1lLnY/TC5hOmwoanQoQy5kLDApLDE4NykuTWYoKS5iLEwuZD0oQi5iLXIpLzIsdmQoQywob2woKSxGYikpKTpmfHxuPyhMLmQ9LUwuYS1lLnQsdmQoQywob2woKSx3MCkpKTooTC5kPUIuYitlLnQsdmQoQywob2woKSxhMSkpKSxMLmM9LUwuYi1lLnMsWjAoQywoQmwoKSx2MCkpfWY9ITF9fWZ1bmN0aW9uIHVJbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGU7aWYoQj0hMSxMPSExLFA1KGwoUShyLChOdCgpLE1zKSksMTAxKSkpe2Y9ITEsZz0hMTtlOmZvcihWPW5ldyBHKHIuaik7Vi5hPFYuYy5jLmxlbmd0aDspZm9yKHo9bChyZShWKSwxMiksdGU9cmcoTGgoaGUobGUoRmgsMSksUm4sMjAsMCxbbmV3IFQ1KHopLG5ldyBDOCh6KV0pKSk7anIodGUpOylpZihKPWwoeHIodGUpLDEyKSwhUnQoQnQoUShKLmksUUwpKSkpe2lmKHouaj09KEN0KCksUW4pKXtmPSEwO2JyZWFrIGV9aWYoei5qPT1Ecil7Zz0hMDticmVhayBlfX1CPWcmJiFmLEw9ZiYmIWd9aWYoIUImJiFMJiZyLmIuYy5sZW5ndGghPTApe2ZvcihDPTAsRT1uZXcgRyhyLmIpO0UuYTxFLmMuYy5sZW5ndGg7KXc9bChyZShFKSw3MiksQys9dy5uLmIrdy5vLmIvMjtDLz1yLmIuYy5sZW5ndGgsVGU9Qz49ci5vLmIvMn1lbHNlIFRlPSFMO1RlPyhmZT1sKFEociwoZnQoKSxReCkpLDE1KSxmZT9CP289ZmU6KGE9bChRKHIsR3gpLDE1KSxhP2ZlLmdjKCk8PWEuZ2MoKT9vPWZlOm89YToobz1uZXcgYnQscnQocixHeCxvKSkpOihvPW5ldyBidCxydChyLFF4LG8pKSk6KGE9bChRKHIsKGZ0KCksR3gpKSwxNSksYT9MP289YTooZmU9bChRKHIsUXgpLDE1KSxmZT9hLmdjKCk8PWZlLmdjKCk/bz1hOm89ZmU6KG89bmV3IGJ0LHJ0KHIsUXgsbykpKToobz1uZXcgYnQscnQocixHeCxvKSkpLG8uRmMoZSkscnQoZSwoZnQoKSxyVyksbiksdC5kPT1uPyhGYSh0LG51bGwpLG4uZS5jLmxlbmd0aCtuLmcuYy5sZW5ndGg9PTAmJk1jKG4sbnVsbCksVHluKG4pKToocG8odCxudWxsKSxuLmUuYy5sZW5ndGgrbi5nLmMubGVuZ3RoPT0wJiZNYyhuLG51bGwpKSxDaCh0LmEpfWZ1bmN0aW9uIGxJbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm4sam4sdXIsb2ksd3M7Zm9yKG4uVWcoIk1pbldpZHRoIGxheWVyaW5nIiwxKSx6PXQuYixTdD10LmEsd3M9bChRKHQsKE50KCksek1lKSksMTcpLmEsZz1sKFEodCxxTWUpLDE3KS5hLGUuYj16ZShHZShRKHQseDApKSksZS5kPWdzLCRlPW5ldyBHKFN0KTskZS5hPCRlLmMuYy5sZW5ndGg7KVRlPWwocmUoJGUpLDEwKSxUZS5rPT0oWm4oKSxQcykmJihCbj1UZS5vLmIsZS5kPWIuTWF0aC5taW4oZS5kLEJuKSk7Zm9yKGUuZD1iLk1hdGgubWF4KDEsZS5kKSxjbj1TdC5jLmxlbmd0aCxlLmM9V2UoVnIsZGksMjgsY24sMTUsMSksZS5mPVdlKFZyLGRpLDI4LGNuLDE1LDEpLGUuZT1XZShOYSxabywyOCxjbiwxNSwxKSxFPTAsZS5hPTAsWmU9bmV3IEcoU3QpO1plLmE8WmUuYy5jLmxlbmd0aDspVGU9bChyZShaZSksMTApLFRlLnA9RSsrLGUuY1tUZS5wXT0kMHQoa2EoVGUpKSxlLmZbVGUucF09JDB0KHFzKFRlKSksZS5lW1RlLnBdPVRlLm8uYi9lLmQsZS5hKz1lLmVbVGUucF07Zm9yKGUuYi89ZS5kLGUuYS89Y24sb3Q9ZUVuKFN0KSxWcyhTdCxfNWUobmV3IERZZShlKSkpLEo9Z3MsVj1JaSxmPW51bGwsb2k9d3MsdXI9d3Msbz1nLGE9Zyx3czwwJiYob2k9bChqRGUuYS5JZCgpLDE3KS5hLHVyPWwoakRlLmIuSWQoKSwxNykuYSksZzwwJiYobz1sKFJEZS5hLklkKCksMTcpLmEsYT1sKFJEZS5iLklkKCksMTcpLmEpLGpuPW9pO2puPD11cjtqbisrKWZvcihyPW87cjw9YTtyKyspYW49VkFuKGUsam4scixTdCxvdCksZmU9emUoR2UoYW4uYSkpLEI9bChhbi5iLDE1KSx0ZT1CLmdjKCksKGZlPEp8fGZlPT1KJiZ0ZTxWKSYmKEo9ZmUsVj10ZSxmPUIpO2ZvcihMPWYuS2MoKTtMLk9iKCk7KXtmb3IoQz1sKEwuUGIoKSwxNSksdz1uZXcgeXUodCksTWU9Qy5LYygpO01lLk9iKCk7KVRlPWwoTWUuUGIoKSwxMCksVmEoVGUsdyk7JG4oei5jLHcpfUpOKHopLFN0LmMubGVuZ3RoPTAsbi5WZygpfWZ1bmN0aW9uIGhJbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm4sam4sdXI7aWYobi5VZygiU3BsaW5lIGVkZ2Ugcm91dGluZyIsMSksdC5iLmMubGVuZ3RoPT0wKXt0LmYuYT0wLG4uVmcoKTtyZXR1cm59VGU9emUoR2UoUSh0LChOdCgpLFY2KSkpKSxnPXplKEdlKFEodCx2dikpKSxmPXplKEdlKFEodCxxNikpKSxmZT1sKFEodCxyZGUpLDM1MCksY249ZmU9PShTRSgpLGFNKSxTdD16ZShHZShRKHQsT01lKSkpLGUuZD10LGUuai5jLmxlbmd0aD0wLGUuYS5jLmxlbmd0aD0wLE5sKGUuayksdz1sKGp0KHQuYiwwKSwzMCksQz1McSh3LmEsKElVKCksSUIpKSxWPWwoanQodC5iLHQuYi5jLmxlbmd0aC0xKSwzMCksTD1McShWLmEsSUIpLEo9bmV3IEcodC5iKSx0ZT1udWxsLHVyPTA7ZG97Zm9yKE1lPUouYTxKLmMuYy5sZW5ndGg/bChyZShKKSwzMCk6bnVsbCxVRG4oZSx0ZSxNZSksdkFuKGUpLGFuPXZ1bihnM24oVEgoRmkobmV3IGJuKG51bGwsbmV3IGtuKGUuaSwxNikpLG5ldyBTdGUpLG5ldyBfdGUpKSksam49MCwkZT11cixCPSF0ZXx8QyYmdGU9PXcsej0hTWV8fEwmJk1lPT1WLGFuPjA/KEU9MCx0ZSYmKEUrPWcpLEUrPShhbi0xKSpmLE1lJiYoRSs9ZyksY24mJk1lJiYoRT1iLk1hdGgubWF4KEUsTUNuKE1lLGYsVGUsU3QpKSksRTxUZSYmIUImJiF6JiYoam49KFRlLUUpLzIsRT1UZSksJGUrPUUpOiFCJiYheiYmKCRlKz1UZSksTWUmJk9rZShNZSwkZSksb3Q9bmV3IEcoZS5pKTtvdC5hPG90LmMuYy5sZW5ndGg7KVplPWwocmUob3QpLDEzMSksWmUuYS5jPXVyLFplLmEuYj0kZS11cixaZS5GPWpuLFplLnA9IXRlO3JhKGUuYSxlLmkpLHVyPSRlLE1lJiYodXIrPU1lLmMuYSksdGU9TWUsQj16fXdoaWxlKE1lKTtmb3IoYT1uZXcgRyhlLmopO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwxOCksbz1yM24oZSxyKSxydChyLChmdCgpLHo2KSxvKSxCbj1xQ24oZSxyKSxydChyLGZ2LEJuKTt0LmYuYT11cixlLmQ9bnVsbCxuLlZnKCl9ZnVuY3Rpb24gZkluKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdCxjbixhbixCbjtmb3IoZS5iPXQsZS5hPWwoUSh0LChOdCgpLFBNZSkpLDE3KS5hLGUuYz1sKFEodCxGTWUpLDE3KS5hLGUuYz09MCYmKGUuYz1JaSksdGU9bmV3IFVhKHQuYiwwKTt0ZS5iPHRlLmQuZ2MoKTspe2ZvcihKPShtcih0ZS5iPHRlLmQuZ2MoKSksbCh0ZS5kLlhiKHRlLmM9dGUuYisrKSwzMCkpLGc9bmV3IGJ0LEM9LTEsJGU9LTEsTWU9bmV3IEcoSi5hKTtNZS5hPE1lLmMuYy5sZW5ndGg7KVRlPWwocmUoTWUpLDEwKSxYZygoT08oKSxuZXcgaHIoZHIoc3AoVGUpLmEuS2MoKSxuZXcgaikpKSk+PWUuYSYmKHI9R0FuKGUsVGUpLEM9Yi5NYXRoLm1heChDLHIuYiksJGU9Yi5NYXRoLm1heCgkZSxyLmQpLHZ0KGcsbmV3IGNhKFRlLHIpKSk7Zm9yKGNuPW5ldyBidCxFPTA7RTxDOysrRSlwdyhjbiwwLChtcih0ZS5iPjApLHRlLmEuWGIodGUuYz0tLXRlLmIpLGFuPW5ldyB5dShlLmIpLGJ5KHRlLGFuKSxtcih0ZS5iPHRlLmQuZ2MoKSksdGUuZC5YYih0ZS5jPXRlLmIrKyksYW4pKTtmb3IoZj1uZXcgRyhnKTtmLmE8Zi5jLmMubGVuZ3RoOylpZihhPWwocmUoZiksNDIpLHo9bChhLmIsNTgwKS5hLCEheilmb3IoQj1uZXcgRyh6KTtCLmE8Qi5jLmMubGVuZ3RoOylMPWwocmUoQiksMTApLHV4ZShlLEwsQ0ssY24pO2ZvcihuPW5ldyBidCx3PTA7dzwkZTsrK3cpdnQobiwoQm49bmV3IHl1KGUuYiksYnkodGUsQm4pLEJuKSk7Zm9yKG89bmV3IEcoZyk7by5hPG8uYy5jLmxlbmd0aDspaWYoYT1sKHJlKG8pLDQyKSxTdD1sKGEuYiw1ODApLmMsISFTdClmb3Iob3Q9bmV3IEcoU3QpO290LmE8b3QuYy5jLmxlbmd0aDspWmU9bChyZShvdCksMTApLHV4ZShlLFplLFNLLG4pfWZvcihmZT1uZXcgVWEodC5iLDApO2ZlLmI8ZmUuZC5nYygpOylWPShtcihmZS5iPGZlLmQuZ2MoKSksbChmZS5kLlhiKGZlLmM9ZmUuYisrKSwzMCkpLFYuYS5jLmxlbmd0aD09MCYmcGgoZmUpfWZ1bmN0aW9uIGF3dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGU7aWYoSj1lLmkhPTAsTWU9ITEsZmU9bnVsbCxoaChlLmUpKXtpZihDPXQuZ2MoKSxDPjApe2ZvcihCPUM8MTAwP251bGw6bmV3IG5iKEMpLEU9bmV3IFQ3ZSh0KSxWPUUuZyxmZT1XZShWcixkaSwyOCxDLDE1LDEpLHI9MCwkZT1uZXcgTHcoQyksYT0wO2E8ZS5pOysrYSl7Zz1lLmdbYV0sej1nO2U6Zm9yKFRlPTA7VGU8MjsrK1RlKXtmb3Iodz1DOy0tdz49MDspaWYoeiE9bnVsbD9QaSh6LFZbd10pOnFlKHopPT09cWUoVlt3XSkpe2ZlLmxlbmd0aDw9ciYmKHRlPWZlLGZlPVdlKFZyLGRpLDI4LDIqZmUubGVuZ3RoLDE1LDEpLHB1KHRlLDAsZmUsMCxyKSksZmVbcisrXT1hLHFyKCRlLFZbd10pO2JyZWFrIGV9aWYoej16LHFlKHopPT09cWUoZykpYnJlYWt9fWlmKEU9JGUsVj0kZS5nLEM9cixyPmZlLmxlbmd0aCYmKHRlPWZlLGZlPVdlKFZyLGRpLDI4LHIsMTUsMSkscHUodGUsMCxmZSwwLHIpKSxyPjApe2ZvcihNZT0hMCxvPTA7bzxyOysrbyl6PVZbb10sQj11aXQoZSxsKHosNzYpLEIpO2ZvcihmPXI7LS1mPj0wOyl2eChlLGZlW2ZdKTtpZihyIT1DKXtmb3IoYT1DOy0tYT49cjspdngoRSxhKTt0ZT1mZSxmZT1XZShWcixkaSwyOCxyLDE1LDEpLHB1KHRlLDAsZmUsMCxyKX10PUV9fX1lbHNlIGZvcih0PV83bihlLHQpLGE9ZS5pOy0tYT49MDspdC5IYyhlLmdbYV0pJiYodngoZSxhKSxNZT0hMCk7aWYoTWUpe2lmKGZlIT1udWxsKXtmb3Iobj10LmdjKCksTD1uPT0xP3JBKGUsNCx0LktjKCkuUGIoKSxudWxsLGZlWzBdLEopOnJBKGUsNix0LGZlLGZlWzBdLEopLEI9bjwxMDA/bnVsbDpuZXcgbmIobiksYT10LktjKCk7YS5PYigpOyl6PWEuUGIoKSxCPWQ0ZShlLGwoeiw3NiksQik7Qj8oQi5uaihMKSxCLm9qKCkpOk5pKGUuZSxMKX1lbHNle2ZvcihCPU9mbih0LmdjKCkpLGE9dC5LYygpO2EuT2IoKTspej1hLlBiKCksQj1kNGUoZSxsKHosNzYpLEIpO0ImJkIub2ooKX1yZXR1cm4hMH1lbHNlIHJldHVybiExfWZ1bmN0aW9uIGRJbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWU7Zm9yKG49bmV3IHhkdCh0KSxuLmF8fHFfbih0KSxFPWpTbih0KSx3PW5ldyBDdyx0ZT1uZXcgRWJ0LEo9bmV3IEcodC5hKTtKLmE8Si5jLmMubGVuZ3RoOylmb3IoVj1sKHJlKEopLDEwKSxhPW5ldyBocihkcihxcyhWKS5hLktjKCksbmV3IGopKTtqcihhKTspcj1sKHhyKGEpLDE4KSwoci5jLmkuaz09KFpuKCksVXMpfHxyLmQuaS5rPT1VcykmJihDPXREbihlLHIsRSx0ZSkseG4odyx0dWUoQy5kKSxDLmEpKTtmb3IoZj1uZXcgYnQsTWU9bChRKG4uYywoZnQoKSxwcCkpLDIxKS5LYygpO01lLk9iKCk7KXtzd2l0Y2goVGU9bChNZS5QYigpLDY0KSx6PXRlLmNbVGUuZ10sQj10ZS5iW1RlLmddLGc9dGUuYVtUZS5nXSxvPW51bGwsZmU9bnVsbCxUZS5nKXtjYXNlIDQ6bz1uZXcgZWYoZS5kLmEseixFLmIuYS1lLmQuYSxCLXopLGZlPW5ldyBlZihlLmQuYSx6LGcsQi16KSxndyhFLG5ldyBsdChvLmMrby5iLG8uZCkpLGd3KEUsbmV3IGx0KG8uYytvLmIsby5kK28uYSkpO2JyZWFrO2Nhc2UgMjpvPW5ldyBlZihFLmEuYSx6LGUuYy5hLUUuYS5hLEIteiksZmU9bmV3IGVmKGUuYy5hLWcseixnLEIteiksZ3coRSxuZXcgbHQoby5jLG8uZCkpLGd3KEUsbmV3IGx0KG8uYyxvLmQrby5hKSk7YnJlYWs7Y2FzZSAxOm89bmV3IGVmKHosZS5kLmIsQi16LEUuYi5iLWUuZC5iKSxmZT1uZXcgZWYoeixlLmQuYixCLXosZyksZ3coRSxuZXcgbHQoby5jLG8uZCtvLmEpKSxndyhFLG5ldyBsdChvLmMrby5iLG8uZCtvLmEpKTticmVhaztjYXNlIDM6bz1uZXcgZWYoeixFLmEuYixCLXosZS5jLmItRS5hLmIpLGZlPW5ldyBlZih6LGUuYy5iLWcsQi16LGcpLGd3KEUsbmV3IGx0KG8uYyxvLmQpKSxndyhFLG5ldyBsdChvLmMrby5iLG8uZCkpfW8mJihMPW5ldyBIUWUsTC5kPVRlLEwuYj1vLEwuYz1mZSxMLmE9TEgobCgkaSh3LHR1ZShUZSkpLDIxKSksJG4oZi5jLEwpKX1yZXR1cm4gcmEobi5iLGYpLG4uZD1WeW4ocE1uKEUpKSxufWZ1bmN0aW9uIG93dChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEo7aWYobi5wW3QucF09PW51bGwpe2c9ITAsbi5wW3QucF09MCxmPXQsSj1uLm89PShEMSgpLHd2KT9pYTpncztkbyBhPWUuYi5lW2YucF0sbz1mLmMuYS5jLmxlbmd0aCxuLm89PXd2JiZhPjB8fG4ubz09WTEmJmE8by0xPyh3PW51bGwsRT1udWxsLG4ubz09WTE/dz1sKGp0KGYuYy5hLGErMSksMTApOnc9bChqdChmLmMuYSxhLTEpLDEwKSxFPW4uZ1t3LnBdLG93dChlLEUsbiksSj1lLmUud2coSix0LGYpLG4ualt0LnBdPT10JiYobi5qW3QucF09bi5qW0UucF0pLG4ualt0LnBdPT1uLmpbRS5wXT8oVj1qNShlLmQsZix3KSxuLm89PVkxPyhyPXplKG4ucFt0LnBdKSxMPXplKG4ucFtFLnBdKSt6ZShuLmRbdy5wXSktdy5kLmQtVi1mLmQuYS1mLm8uYi16ZShuLmRbZi5wXSksZz8oZz0hMSxuLnBbdC5wXT1iLk1hdGgubWluKEwsSikpOm4ucFt0LnBdPWIuTWF0aC5taW4ocixiLk1hdGgubWluKEwsSikpKToocj16ZShuLnBbdC5wXSksTD16ZShuLnBbRS5wXSkremUobi5kW3cucF0pK3cuby5iK3cuZC5hK1YrZi5kLmQtemUobi5kW2YucF0pLGc/KGc9ITEsbi5wW3QucF09Yi5NYXRoLm1heChMLEopKTpuLnBbdC5wXT1iLk1hdGgubWF4KHIsYi5NYXRoLm1heChMLEopKSkpOihWPXplKEdlKFEoZS5hLChOdCgpLG0zKSkpKSx6PWRmdChlLG4ualt0LnBdKSxDPWRmdChlLG4ualtFLnBdKSxuLm89PVkxPyhCPXplKG4ucFt0LnBdKSt6ZShuLmRbZi5wXSkrZi5vLmIrZi5kLmErVi0oemUobi5wW0UucF0pK3plKG4uZFt3LnBdKS13LmQuZCksJG90KHosQyxCKSk6KEI9emUobi5wW3QucF0pK3plKG4uZFtmLnBdKS1mLmQuZC16ZShuLnBbRS5wXSktemUobi5kW3cucF0pLXcuby5iLXcuZC5hLVYsJG90KHosQyxCKSkpKTpKPWUuZS53ZyhKLHQsZiksZj1uLmFbZi5wXTt3aGlsZShmIT10KTtVY24oZS5lLHQpfX1mdW5jdGlvbiBnSW4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuO2lmKG49emUoR2UoUShlLmEuaiwoTnQoKSxfTWUpKSkpLG48LTF8fCFlLmEuaXx8VTgobChRKGUuYS5vLE1zKSwxMDEpKXx8T2MoZS5hLm8sKEN0KCksYXIpKS5nYygpPDImJk9jKGUuYS5vLGVyKS5nYygpPDIpcmV0dXJuITA7aWYoZS5hLmMua2coKSlyZXR1cm4hMTtmb3IoWmU9MCwkZT0wLE1lPW5ldyBidCx3PWUuYS5lLEU9MCxDPXcubGVuZ3RoO0U8QzsrK0Upe2ZvcihnPXdbRV0sQj1nLHo9MCxKPUIubGVuZ3RoO3o8SjsrK3ope2lmKEw9Qlt6XSxMLms9PShabigpLEF1KSl7JG4oTWUuYyxMKTtjb250aW51ZX1mb3Iocj1lLmJbTC5jLnBdW0wucF0sTC5rPT1Vcz8oci5iPTEsbChRKEwsKGZ0KCksemkpKSwxMikuaj09KEN0KCksYXIpJiYoJGUrPXIuYSkpOihhbj1PYyhMLChDdCgpLGVyKSksYW4uZGMoKXx8IVpzZShhbixuZXcgWDkpP3IuYz0xOihhPU9jKEwsYXIpLChhLmRjKCl8fCFac2UoYSxuZXcgVWVlKSkmJihaZSs9ci5hKSkpLGY9bmV3IGhyKGRyKHFzKEwpLmEuS2MoKSxuZXcgaikpO2pyKGYpOylvPWwoeHIoZiksMTgpLFplKz1yLmMsJGUrPXIuYixjbj1vLmQuaSxQNmUoZSxyLGNuKTtmb3IoZmU9TGgoaGUobGUoRmgsMSksUm4sMjAsMCxbT2MoTCwoQ3QoKSxRbikpLE9jKEwsRHIpXSkpLFN0PW5ldyBocihuZXcgQXllKGZlLmEubGVuZ3RoLGZlLmEpKTtqcihTdCk7KW90PWwoeHIoU3QpLDEyKSxUZT1sKFEob3QsKGZ0KCksamwpKSwxMCksVGUmJihaZSs9ci5jLCRlKz1yLmIsUDZlKGUscixUZSkpfWZvcihWPW5ldyBHKE1lKTtWLmE8Vi5jLmMubGVuZ3RoOylmb3IoTD1sKHJlKFYpLDEwKSxyPWUuYltMLmMucF1bTC5wXSxmPW5ldyBocihkcihxcyhMKS5hLktjKCksbmV3IGopKTtqcihmKTspbz1sKHhyKGYpLDE4KSxaZSs9ci5jLCRlKz1yLmIsY249by5kLmksUDZlKGUscixjbik7TWUuYy5sZW5ndGg9MH1yZXR1cm4gdD1aZSskZSx0ZT10PT0wP2dzOihaZS0kZSkvdCx0ZT49bn1mdW5jdGlvbiBwSW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuLGpuLHVyO2ZvcihNZT10LFRlPW5ldyBDdywkZT1uZXcgQ3csQz1BdyhNZSxmU2UpLHI9bmV3IE1hdChlLG4sVGUsJGUpLFA5bihyLmEsci5iLHIuYyxyLmQsQyksdz0oU3Q9VGUuaSxTdHx8KFRlLmk9bmV3IHE1KFRlLFRlLmMpKSksYW49dy5LYygpO2FuLk9iKCk7KWZvcihjbj1sKGFuLlBiKCksMTY2KSxhPWwoJGkoVGUsY24pLDIxKSxKPWEuS2MoKTtKLk9iKCk7KWlmKFY9Si5QYigpLFplPWwoWDUoZS5kLFYpLDE2NiksWmUpZz0oIWNuLmUmJihjbi5lPW5ldyBMbihjcyxjbiwxMCw5KSksY24uZSkscXIoZyxaZSk7ZWxzZSB0aHJvdyBmPVlnKE1lLFBkKSxCPXk0dCtWK3g0dCtmLHo9QitrVCx1ZShuZXcgZGQoeikpO2ZvcihFPShvdD0kZS5pLG90fHwoJGUuaT1uZXcgcTUoJGUsJGUuYykpKSxqbj1FLktjKCk7am4uT2IoKTspZm9yKEJuPWwoam4uUGIoKSwxNjYpLG89bCgkaSgkZSxCbiksMjEpLGZlPW8uS2MoKTtmZS5PYigpOylpZih0ZT1mZS5QYigpLFplPWwoWDUoZS5kLHRlKSwxNjYpLFplKUw9KCFCbi5nJiYoQm4uZz1uZXcgTG4oY3MsQm4sOSwxMCkpLEJuLmcpLHFyKEwsWmUpO2Vsc2UgdGhyb3cgZj1ZZyhNZSxQZCksQj15NHQrdGUreDR0K2Ysej1CK2tULHVlKG5ldyBkZCh6KSk7IW4uYiYmKG4uYj1uZXcgTG4oX3Isbiw0LDcpKSxuLmIuaSE9MCYmKCFuLmMmJihuLmM9bmV3IExuKF9yLG4sNSw4KSksbi5jLmkhPTApJiYoIW4uYiYmKG4uYj1uZXcgTG4oX3Isbiw0LDcpKSxuLmIuaTw9MSYmKCFuLmMmJihuLmM9bmV3IExuKF9yLG4sNSw4KSksbi5jLmk8PTEpKSYmKCFuLmEmJihuLmE9bmV3IG50KGNzLG4sNiw2KSksbi5hKS5pPT0xJiYodXI9bChPZSgoIW4uYSYmKG4uYT1uZXcgbnQoY3Msbiw2LDYpKSxuLmEpLDApLDE2NiksIWF1ZSh1cikmJiFvdWUodXIpJiYod1YodXIsbChPZSgoIW4uYiYmKG4uYj1uZXcgTG4oX3Isbiw0LDcpKSxuLmIpLDApLDg0KSkseVYodXIsbChPZSgoIW4uYyYmKG4uYz1uZXcgTG4oX3Isbiw1LDgpKSxuLmMpLDApLDg0KSkpKX1mdW5jdGlvbiBiSW4oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuO2ZvcihNZT1lLmEsJGU9MCxaZT1NZS5sZW5ndGg7JGU8WmU7KyskZSl7Zm9yKFRlPU1lWyRlXSxFPUlpLEM9SWksVj1uZXcgRyhUZS5lKTtWLmE8Vi5jLmMubGVuZ3RoOylCPWwocmUoViksMTApLGY9Qi5jP2djKEIuYy5hLEIsMCk6LTEsZj4wPyhMPWwoanQoQi5jLmEsZi0xKSwxMCksY249ajUoZS5iLEIsTCksdGU9Qi5uLmItQi5kLmQtKEwubi5iK0wuby5iK0wuZC5hK2NuKSk6dGU9Qi5uLmItQi5kLmQsRT1iLk1hdGgubWluKHRlLEUpLGY8Qi5jLmEuYy5sZW5ndGgtMT8oTD1sKGp0KEIuYy5hLGYrMSksMTApLGNuPWo1KGUuYixCLEwpLGZlPUwubi5iLUwuZC5kLShCLm4uYitCLm8uYitCLmQuYStjbikpOmZlPTIqQi5uLmIsQz1iLk1hdGgubWluKGZlLEMpO2Zvcih3PUlpLG89ITEsYT1sKGp0KFRlLmUsMCksMTApLEJuPW5ldyBHKGEuaik7Qm4uYTxCbi5jLmMubGVuZ3RoOylmb3IoYW49bChyZShCbiksMTIpLEo9YS5uLmIrYW4ubi5iK2FuLmEuYixyPW5ldyBHKGFuLmUpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwxOCksb3Q9bi5jLHQ9b3QuaS5uLmIrb3Qubi5iK290LmEuYi1KLGIuTWF0aC5hYnModCk8Yi5NYXRoLmFicyh3KSYmYi5NYXRoLmFicyh0KTwodDwwP0U6QykmJih3PXQsbz0hMCk7Zm9yKGc9bChqdChUZS5lLFRlLmUuYy5sZW5ndGgtMSksMTApLFN0PW5ldyBHKGcuaik7U3QuYTxTdC5jLmMubGVuZ3RoOylmb3Iob3Q9bChyZShTdCksMTIpLEo9Zy5uLmIrb3Qubi5iK290LmEuYixyPW5ldyBHKG90LmcpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSwxOCksYW49bi5kLHQ9YW4uaS5uLmIrYW4ubi5iK2FuLmEuYi1KLGIuTWF0aC5hYnModCk8Yi5NYXRoLmFicyh3KSYmYi5NYXRoLmFicyh0KTwodDwwP0U6QykmJih3PXQsbz0hMCk7aWYobyYmdyE9MClmb3Ioej1uZXcgRyhUZS5lKTt6LmE8ei5jLmMubGVuZ3RoOylCPWwocmUoeiksMTApLEIubi5iKz13fX1mdW5jdGlvbiBtSW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlO2lmKHI9bmV3IGJ0LGE9SWksbz1JaSxmPUlpLG4pZm9yKGE9ZS5mLmEsSj1uZXcgRyh0LmopO0ouYTxKLmMuYy5sZW5ndGg7KWZvcihWPWwocmUoSiksMTIpLHc9bmV3IEcoVi5nKTt3LmE8dy5jLmMubGVuZ3RoOylnPWwocmUodyksMTgpLGcuYS5iIT0wJiYoQz1sKEJrKGcuYSksOCksQy5hPGEmJihvPWEtQy5hLGY9SWksci5jLmxlbmd0aD0wLGE9Qy5hKSxDLmE8PWEmJigkbihyLmMsZyksZy5hLmI+MSYmKGY9Yi5NYXRoLm1pbihmLGIuTWF0aC5hYnMobChmZihnLmEsMSksOCkuYi1DLmIpKSkpKTtlbHNlIGZvcihKPW5ldyBHKHQuaik7Si5hPEouYy5jLmxlbmd0aDspZm9yKFY9bChyZShKKSwxMiksdz1uZXcgRyhWLmUpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwxOCksZy5hLmIhPTAmJihCPWwobzAoZy5hKSw4KSxCLmE+YSYmKG89Qi5hLWEsZj1JaSxyLmMubGVuZ3RoPTAsYT1CLmEpLEIuYT49YSYmKCRuKHIuYyxnKSxnLmEuYj4xJiYoZj1iLk1hdGgubWluKGYsYi5NYXRoLmFicyhsKGZmKGcuYSxnLmEuYi0yKSw4KS5iLUIuYikpKSkpO2lmKHIuYy5sZW5ndGghPTAmJm8+dC5vLmEvMiYmZj50Lm8uYi8yKXtmb3Ioej1uZXcgZ3UsTWMoeix0KSxsYSh6LChDdCgpLFFuKSksei5uLmE9dC5vLmEvMixmZT1uZXcgZ3UsTWMoZmUsdCksbGEoZmUsRHIpLGZlLm4uYT10Lm8uYS8yLGZlLm4uYj10Lm8uYix3PW5ldyBHKHIpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwxOCksbj8oRT1sKGthZShnLmEpLDgpLHRlPWcuYS5iPT0wP0kxKGcuZCk6bChCayhnLmEpLDgpLHRlLmI+PUUuYj9wbyhnLGZlKTpwbyhnLHopKTooRT1sKG9kbihnLmEpLDgpLHRlPWcuYS5iPT0wP0kxKGcuYyk6bChvMChnLmEpLDgpLHRlLmI+PUUuYj9GYShnLGZlKTpGYShnLHopKSxMPWwoUShnLChOdCgpLGNjKSksNzUpLEwmJk55KEwsRSwhMCk7dC5uLmE9YS10Lm8uYS8yfX1mdW5jdGlvbiB2SW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCO2ZvcihnPVJyKGUuYiwwKTtnLmIhPWcuZC5jOylpZihmPWwoQnIoZyksNDApLCF2bihmLmMsREcpKWZvcihFPUhFbihmLGUpLHQ9PShKcygpLHVjKXx8dD09dmM/VnMoRSxuZXcgZW5lKTpWcyhFLG5ldyB0bmUpLHc9RS5jLmxlbmd0aCxyPTA7cjx3O3IrKylDPShTbihyLEUuYy5sZW5ndGgpLGwoRS5jW3JdLDY1KSkuYyx2bihDLmMsIm4xMSIpLCEoUnQoQnQoUShmLChRaSgpLHRJZSkpKSkmJiFDMHQoKFNuKHIsRS5jLmxlbmd0aCksbChFLmNbcl0sNjUpKSxlKSkmJihhPXc9PTE/LjU6KHIrMSkvKHcrMSksdD09dWM/KG89emUoR2UoUShmLGMxKSkpLEI9Zi5lLmIrZi5mLmIqYSxPNSgoU24ocixFLmMubGVuZ3RoKSxsKEUuY1tyXSw2NSkpLmEsbmV3IGx0KGIuTWF0aC5taW4obyxmLmUuYS1uKSxCKSksTzUoKFNuKHIsRS5jLmxlbmd0aCksbChFLmNbcl0sNjUpKS5hLG5ldyBsdChmLmUuYSxCKSkpOnQ9PXZjPyhvPXplKEdlKFEoZixrMCkpKStuLEI9Zi5lLmIrZi5mLmIqYSxPNSgoU24ocixFLmMubGVuZ3RoKSxsKEUuY1tyXSw2NSkpLmEsbmV3IGx0KG8sQikpLE81KChTbihyLEUuYy5sZW5ndGgpLGwoRS5jW3JdLDY1KSkuYSxuZXcgbHQoZi5lLmErZi5mLmEsQikpKTp0PT13Zj8obz16ZShHZShRKGYsYzEpKSksTD1mLmUuYStmLmYuYSphLE81KChTbihyLEUuYy5sZW5ndGgpLGwoRS5jW3JdLDY1KSkuYSxuZXcgbHQoTCxiLk1hdGgubWluKGYuZS5iLW4sbykpKSxPNSgoU24ocixFLmMubGVuZ3RoKSxsKEUuY1tyXSw2NSkpLmEsbmV3IGx0KEwsZi5lLmIpKSk6KG89emUoR2UoUShmLGswKSkpK24sTD1mLmUuYStmLmYuYSphLE81KChTbihyLEUuYy5sZW5ndGgpLGwoRS5jW3JdLDY1KSkuYSxuZXcgbHQoTCxvKSksTzUoKFNuKHIsRS5jLmxlbmd0aCksbChFLmNbcl0sNjUpKS5hLG5ldyBsdChMLGYuZS5iK2YuZi5iKSkpKX1mdW5jdGlvbiB2UChlLHQsbixyLGEsbyxmLGcsdyl7dmFyIEUsQyxMLEIseixWLEo7c3dpdGNoKHo9bixDPW5ldyBvcCh3KSx4KEMsKFpuKCksVXMpKSxydChDLChmdCgpLCRMZSksZikscnQoQywoTnQoKSxNcyksKFJhKCksTXUpKSxKPXplKEdlKGUub2YobTQpKSkscnQoQyxtNCxKKSxMPW5ldyBndSxNYyhMLEMpLHQhPVoxJiZ0IT1XYnx8KHI+PTA/ej1neChnKTp6PUJOKGd4KGcpKSxlLnFmKFZULHopKSxFPW5ldyBxYSxCPSExLGUucGYocDMpPyhGeWUoRSxsKGUub2YocDMpLDgpKSxCPSEwKTpBaG4oRSxmLmEvMixmLmIvMiksei5nKXtjYXNlIDQ6cnQoQyxRdSwoaGYoKSwkYikpLHJ0KEMsc1csKFZtKCksUDYpKSxDLm8uYj1mLmIsSjwwJiYoQy5vLmE9LUopLGxhKEwsKEN0KCksYXIpKSxCfHwoRS5hPWYuYSksRS5hLT1mLmE7YnJlYWs7Y2FzZSAyOnJ0KEMsUXUsKGhmKCksZDQpKSxydChDLHNXLChWbSgpLEZUKSksQy5vLmI9Zi5iLEo8MCYmKEMuby5hPS1KKSxsYShMLChDdCgpLGVyKSksQnx8KEUuYT0wKTticmVhaztjYXNlIDE6cnQoQyxodiwoZXAoKSxGNikpLEMuby5hPWYuYSxKPDAmJihDLm8uYj0tSiksbGEoTCwoQ3QoKSxEcikpLEJ8fChFLmI9Zi5iKSxFLmItPWYuYjticmVhaztjYXNlIDM6cnQoQyxodiwoZXAoKSxVeCkpLEMuby5hPWYuYSxKPDAmJihDLm8uYj0tSiksbGEoTCwoQ3QoKSxRbikpLEJ8fChFLmI9MCl9aWYoRnllKEwubixFKSxydChDLHAzLEUpLHQ9PVR2fHx0PT1UZ3x8dD09TXUpe2lmKFY9MCx0PT1UdiYmZS5wZihrMikpc3dpdGNoKHouZyl7Y2FzZSAxOmNhc2UgMjpWPWwoZS5vZihrMiksMTcpLmE7YnJlYWs7Y2FzZSAzOmNhc2UgNDpWPS1sKGUub2YoazIpLDE3KS5hfWVsc2Ugc3dpdGNoKHouZyl7Y2FzZSA0OmNhc2UgMjpWPW8uYix0PT1UZyYmKFYvPWEuYik7YnJlYWs7Y2FzZSAxOmNhc2UgMzpWPW8uYSx0PT1UZyYmKFYvPWEuYSl9cnQoQyxsMyxWKX1yZXR1cm4gcnQoQyxXYyx6KSxDfWZ1bmN0aW9uIHdJbigpe2MzZSgpO2Z1bmN0aW9uIGUocil7dmFyIGE9dGhpczt0aGlzLmRpc3BhdGNoPWZ1bmN0aW9uKG8pe3ZhciBmPW8uZGF0YTtzd2l0Y2goZi5jbWQpe2Nhc2UiYWxnb3JpdGhtcyI6dmFyIGc9TDhlKChDbigpLG5ldyAkYShuZXcgZ2koUWIuYikpKSk7ci5wb3N0TWVzc2FnZSh7aWQ6Zi5pZCxkYXRhOmd9KTticmVhaztjYXNlImNhdGVnb3JpZXMiOnZhciB3PUw4ZSgoQ24oKSxuZXcgJGEobmV3IGdpKFFiLmMpKSkpO3IucG9zdE1lc3NhZ2Uoe2lkOmYuaWQsZGF0YTp3fSk7YnJlYWs7Y2FzZSJvcHRpb25zIjp2YXIgRT1MOGUoKENuKCksbmV3ICRhKG5ldyBnaShRYi5kKSkpKTtyLnBvc3RNZXNzYWdlKHtpZDpmLmlkLGRhdGE6RX0pO2JyZWFrO2Nhc2UicmVnaXN0ZXIiOmtNbihmLmFsZ29yaXRobXMpLHIucG9zdE1lc3NhZ2Uoe2lkOmYuaWR9KTticmVhaztjYXNlImxheW91dCI6UUFuKGYuZ3JhcGgsZi5sYXlvdXRPcHRpb25zfHx7fSxmLm9wdGlvbnN8fHt9KSxyLnBvc3RNZXNzYWdlKHtpZDpmLmlkLGRhdGE6Zi5ncmFwaH0pO2JyZWFrfX0sdGhpcy5zYXZlRGlzcGF0Y2g9ZnVuY3Rpb24obyl7dHJ5e2EuZGlzcGF0Y2gobyl9Y2F0Y2goZil7ci5wb3N0TWVzc2FnZSh7aWQ6by5kYXRhLmlkLGVycm9yOmZ9KX19fWZ1bmN0aW9uIHQocil7dmFyIGE9dGhpczt0aGlzLmRpc3BhdGNoZXI9bmV3IGUoe3Bvc3RNZXNzYWdlOmZ1bmN0aW9uKG8pe2Eub25tZXNzYWdlKHtkYXRhOm99KX19KSx0aGlzLnBvc3RNZXNzYWdlPWZ1bmN0aW9uKG8pe3NldFRpbWVvdXQoZnVuY3Rpb24oKXthLmRpc3BhdGNoZXIuc2F2ZURpc3BhdGNoKHtkYXRhOm99KX0sMCl9fWlmKHR5cGVvZiBkb2N1bWVudD09PWdoZSYmdHlwZW9mIHNlbGYhPT1naGUpe3ZhciBuPW5ldyBlKHNlbGYpO3NlbGYub25tZXNzYWdlPW4uc2F2ZURpc3BhdGNofWVsc2UgdHlwZW9mIGQhPT1naGUmJmQuZXhwb3J0cyYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxkLmV4cG9ydHM9e2RlZmF1bHQ6dCxXb3JrZXI6dH0pfWZ1bmN0aW9uIGN3dChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEI7Zm9yKEM9bmV3IG9wKG4pLHBjKEMsdCkscnQoQywoZnQoKSx6aSksdCksQy5vLmE9dC5nLEMuby5iPXQuZixDLm4uYT10LmksQy5uLmI9dC5qLHZ0KG4uYSxDKSxraShlLmEsdCxDKSwoKCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpLmkhPTB8fFJ0KEJ0KGF0KHQsKE50KCksYjQpKSkpKSYmcnQoQyxGTGUsKEhuKCksITApKSxFPWwoUShuLEx1KSwyMSksTD1sKFEoQywoTnQoKSxNcykpLDEwMSksTD09KFJhKCksV2IpP3J0KEMsTXMsWjEpOkwhPVoxJiZFLkZjKChIbygpLCRUKSksQj0wLHI9bChRKG4sUmgpLDg4KSx3PW5ldyBvcigoIXQuYyYmKHQuYz1uZXcgbnQoSGwsdCw5LDkpKSx0LmMpKTt3LmUhPXcuaS5nYygpOylnPWwoZ3IodyksMTIzKSxhPWRzKHQpLChxZShhdChhLHlnKSkhPT1xZSgoRWQoKSxFMikpfHxxZShhdChhLGR2KSk9PT1xZSgobDIoKSxCVCkpfHxxZShhdChhLGR2KSk9PT1xZSgobDIoKSxQVCkpfHxSdChCdChhdChhLGYzKSkpfHxxZShhdChhLGc0KSkhPT1xZSgoS20oKSxjNCkpfHxxZShhdChhLHpiKSk9PT1xZSgoTmYoKSx2MykpfHxxZShhdChhLHpiKSk9PT1xZSgoTmYoKSx4NCkpfHxxZShhdChhLHB2KSk9PT1xZSgocDIoKSxXVCkpfHxxZShhdChhLHB2KSk9PT1xZSgocDIoKSxZVCkpKSYmIVJ0KEJ0KGF0KHQsZlcpKSkmJkhpKGcsS2kscHQoQisrKSksUnQoQnQoYXQoZyxtdikpKXx8TERuKGUsZyxDLEUscixMKTtmb3IoZj1uZXcgb3IoKCF0Lm4mJih0Lm49bmV3IG50KGVjLHQsMSw3KSksdC5uKSk7Zi5lIT1mLmkuZ2MoKTspbz1sKGdyKGYpLDEzNSksIVJ0KEJ0KGF0KG8sbXYpKSkmJm8uYSYmdnQoQy5iLE9jZShvKSk7cmV0dXJuIFJ0KEJ0KFEoQyxRTCkpKSYmRS5GYygoSG8oKSxlVykpLFJ0KEJ0KFEoQyxiVykpKSYmKEUuRmMoKEhvKCksdFcpKSxFLkZjKFVMKSxydChDLE1zLFoxKSksQ31mdW5jdGlvbiBMbGUoZSx0LG4scixhLG8sZil7dmFyIGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuLGpuLHVyLG9pLHdzO2ZvcihKPTAsQm49MCxFPW5ldyBHKGUuYik7RS5hPEUuYy5jLmxlbmd0aDspdz1sKHJlKEUpLDE2Myksdy5jJiZGdnQody5jKSxKPWIuTWF0aC5tYXgoSix3bCh3KSksQm4rPXdsKHcpKmdoKHcpO2Zvcih0ZT1Cbi9lLmIuYy5sZW5ndGgsYW49eThuKGUuYix0ZSksQm4rPWUuYi5jLmxlbmd0aCphbixKPWIuTWF0aC5tYXgoSixiLk1hdGguc3FydChCbipmKSkrbi5iLG9pPW4uYix3cz1uLmQsej0wLEw9bi5iK24uYyxjbj1uZXcgb3MsdWkoY24scHQoMCkpLG90PW5ldyBvcyxDPW5ldyBVYShlLmIsMCksVj1udWxsLGc9bmV3IGJ0O0MuYjxDLmQuZ2MoKTspdz0obXIoQy5iPEMuZC5nYygpKSxsKEMuZC5YYihDLmM9Qy5iKyspLDE2MykpLHVyPXdsKHcpLEI9Z2godyksb2krdXI+SiYmKG8mJihrbyhvdCx6KSxrbyhjbixwdChDLmItMSkpLHZ0KGUuZCxWKSxnLmMubGVuZ3RoPTApLG9pPW4uYix3cys9eit0LHo9MCxMPWIuTWF0aC5tYXgoTCxuLmIrbi5jK3VyKSksJG4oZy5jLHcpLGRkdCh3LG9pLHdzKSxMPWIuTWF0aC5tYXgoTCxvaSt1cituLmMpLHo9Yi5NYXRoLm1heCh6LEIpLG9pKz11cit0LFY9dztpZihyYShlLmEsZyksdnQoZS5kLGwoanQoZyxnLmMubGVuZ3RoLTEpLDE2MykpLEw9Yi5NYXRoLm1heChMLHIpLGpuPXdzK3orbi5hLGpuPGEmJih6Kz1hLWpuLGpuPWEpLG8pZm9yKG9pPW4uYixDPW5ldyBVYShlLmIsMCksa28oY24scHQoZS5iLmMubGVuZ3RoKSksU3Q9UnIoY24sMCksVGU9bChCcihTdCksMTcpLmEsa28ob3QseiksWmU9UnIob3QsMCksJGU9MDtDLmI8Qy5kLmdjKCk7KUMuYj09VGUmJihvaT1uLmIsJGU9emUoR2UoQnIoWmUpKSksVGU9bChCcihTdCksMTcpLmEpLHc9KG1yKEMuYjxDLmQuZ2MoKSksbChDLmQuWGIoQy5jPUMuYisrKSwxNjMpKSxVMXQodywkZSksQy5iPT1UZSYmKGZlPUwtb2ktbi5jLE1lPXdsKHcpLEcxdCh3LGZlKSx2MXQodywoZmUtTWUpLzIsMCkpLG9pKz13bCh3KSt0O3JldHVybiBuZXcgbHQoTCxqbil9ZnVuY3Rpb24geUluKGUpe2UuTnx8KGUuTj0hMCxlLmI9cWMoZSwwKSxTcyhlLmIsMCksU3MoZS5iLDEpLFNzKGUuYiwyKSxlLmJiPXFjKGUsMSksU3MoZS5iYiwwKSxTcyhlLmJiLDEpLGUuZmI9cWMoZSwyKSxTcyhlLmZiLDMpLFNzKGUuZmIsNCksaXMoZS5mYiw1KSxlLnFiPXFjKGUsMyksU3MoZS5xYiwwKSxpcyhlLnFiLDEpLGlzKGUucWIsMiksU3MoZS5xYiwzKSxTcyhlLnFiLDQpLGlzKGUucWIsNSksU3MoZS5xYiw2KSxlLmE9VGkoZSw0KSxlLmM9VGkoZSw1KSxlLmQ9VGkoZSw2KSxlLmU9VGkoZSw3KSxlLmY9VGkoZSw4KSxlLmc9VGkoZSw5KSxlLmk9VGkoZSwxMCksZS5qPVRpKGUsMTEpLGUuaz1UaShlLDEyKSxlLm49VGkoZSwxMyksZS5vPVRpKGUsMTQpLGUucD1UaShlLDE1KSxlLnE9VGkoZSwxNiksZS5zPVRpKGUsMTcpLGUucj1UaShlLDE4KSxlLnQ9VGkoZSwxOSksZS51PVRpKGUsMjApLGUudj1UaShlLDIxKSxlLnc9VGkoZSwyMiksZS5CPVRpKGUsMjMpLGUuQT1UaShlLDI0KSxlLkM9VGkoZSwyNSksZS5EPVRpKGUsMjYpLGUuRj1UaShlLDI3KSxlLkc9VGkoZSwyOCksZS5IPVRpKGUsMjkpLGUuSj1UaShlLDMwKSxlLkk9VGkoZSwzMSksZS5LPVRpKGUsMzIpLGUuTT1UaShlLDMzKSxlLkw9VGkoZSwzNCksZS5QPVRpKGUsMzUpLGUuUT1UaShlLDM2KSxlLlI9VGkoZSwzNyksZS5TPVRpKGUsMzgpLGUuVD1UaShlLDM5KSxlLlU9VGkoZSw0MCksZS5WPVRpKGUsNDEpLGUuWD1UaShlLDQyKSxlLlc9VGkoZSw0MyksZS5ZPVRpKGUsNDQpLGUuWj1UaShlLDQ1KSxlLiQ9VGkoZSw0NiksZS5fPVRpKGUsNDcpLGUuYWI9VGkoZSw0OCksZS5jYj1UaShlLDQ5KSxlLmRiPVRpKGUsNTApLGUuZWI9VGkoZSw1MSksZS5nYj1UaShlLDUyKSxlLmhiPVRpKGUsNTMpLGUuaWI9VGkoZSw1NCksZS5qYj1UaShlLDU1KSxlLmtiPVRpKGUsNTYpLGUubGI9VGkoZSw1NyksZS5tYj1UaShlLDU4KSxlLm5iPVRpKGUsNTkpLGUub2I9VGkoZSw2MCksZS5wYj1UaShlLDYxKSl9ZnVuY3Rpb24geEluKGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZTtpZihUZT0wLHQuZi5hPT0wKWZvcih0ZT1uZXcgRyhlKTt0ZS5hPHRlLmMuYy5sZW5ndGg7KVY9bChyZSh0ZSksMTApLFRlPWIuTWF0aC5tYXgoVGUsVi5uLmErVi5vLmErVi5kLmMpO2Vsc2UgVGU9dC5mLmEtdC5jLmE7Zm9yKFRlLT10LmMuYSxKPW5ldyBHKGUpO0ouYTxKLmMuYy5sZW5ndGg7KXtzd2l0Y2goVj1sKHJlKEopLDEwKSxpXyhWLm4sVGUtVi5vLmEpLE40ZShWLmYpLFZkdChWKSwoVi5xP1YucTooQ24oKSxDbigpLG1nKSkuX2IoKE50KCksdzQpKSYmaV8obChRKFYsdzQpLDgpLFRlLVYuby5hKSxsKFEoVixSZCksMjU1KS5nKXtjYXNlIDE6cnQoVixSZCwob2coKSxWQikpO2JyZWFrO2Nhc2UgMjpydChWLFJkLChvZygpLEhCKSl9Zm9yKGZlPVYubywkZT1uZXcgRyhWLmopOyRlLmE8JGUuYy5jLmxlbmd0aDspe2ZvcihNZT1sKHJlKCRlKSwxMiksaV8oTWUubixmZS5hLU1lLm8uYSksaV8oTWUuYSxNZS5vLmEpLGxhKE1lLFNmdChNZS5qKSksZj1sKFEoTWUsazIpLDE3KSxmJiZydChNZSxrMixwdCgtZi5hKSksbz1uZXcgRyhNZS5nKTtvLmE8by5jLmMubGVuZ3RoOyl7Zm9yKGE9bChyZShvKSwxOCkscj1ScihhLmEsMCk7ci5iIT1yLmQuYzspbj1sKEJyKHIpLDgpLG4uYT1UZS1uLmE7aWYoRT1sKFEoYSxjYyksNzUpLEUpZm9yKHc9UnIoRSwwKTt3LmIhPXcuZC5jOylnPWwoQnIodyksOCksZy5hPVRlLWcuYTtmb3IoQj1uZXcgRyhhLmIpO0IuYTxCLmMuYy5sZW5ndGg7KUM9bChyZShCKSw3MiksaV8oQy5uLFRlLUMuby5hKX1mb3Ioej1uZXcgRyhNZS5mKTt6LmE8ei5jLmMubGVuZ3RoOylDPWwocmUoeiksNzIpLGlfKEMubixNZS5vLmEtQy5vLmEpfWZvcihWLms9PShabigpLFVzKSYmKHJ0KFYsKGZ0KCksV2MpLFNmdChsKFEoVixXYyksNjQpKSksYzluKFYpKSxMPW5ldyBHKFYuYik7TC5hPEwuYy5jLmxlbmd0aDspQz1sKHJlKEwpLDcyKSxWZHQoQyksaV8oQy5uLGZlLmEtQy5vLmEpfX1mdW5jdGlvbiBrSW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlO2lmKFRlPTAsdC5mLmI9PTApZm9yKHRlPW5ldyBHKGUpO3RlLmE8dGUuYy5jLmxlbmd0aDspVj1sKHJlKHRlKSwxMCksVGU9Yi5NYXRoLm1heChUZSxWLm4uYitWLm8uYitWLmQuYSk7ZWxzZSBUZT10LmYuYi10LmMuYjtmb3IoVGUtPXQuYy5iLEo9bmV3IEcoZSk7Si5hPEouYy5jLmxlbmd0aDspe3N3aXRjaChWPWwocmUoSiksMTApLHJfKFYubixUZS1WLm8uYiksUDRlKFYuZiksVWR0KFYpLChWLnE/Vi5xOihDbigpLENuKCksbWcpKS5fYigoTnQoKSx3NCkpJiZyXyhsKFEoVix3NCksOCksVGUtVi5vLmIpLGwoUShWLFJkKSwyNTUpLmcpe2Nhc2UgMzpydChWLFJkLChvZygpLGVZKSk7YnJlYWs7Y2FzZSA0OnJ0KFYsUmQsKG9nKCksblkpKX1mb3IoZmU9Vi5vLCRlPW5ldyBHKFYuaik7JGUuYTwkZS5jLmMubGVuZ3RoOyl7Zm9yKE1lPWwocmUoJGUpLDEyKSxyXyhNZS5uLGZlLmItTWUuby5iKSxyXyhNZS5hLE1lLm8uYiksbGEoTWUsX2Z0KE1lLmopKSxmPWwoUShNZSxrMiksMTcpLGYmJnJ0KE1lLGsyLHB0KC1mLmEpKSxvPW5ldyBHKE1lLmcpO28uYTxvLmMuYy5sZW5ndGg7KXtmb3IoYT1sKHJlKG8pLDE4KSxyPVJyKGEuYSwwKTtyLmIhPXIuZC5jOyluPWwoQnIociksOCksbi5iPVRlLW4uYjtpZihFPWwoUShhLGNjKSw3NSksRSlmb3Iodz1ScihFLDApO3cuYiE9dy5kLmM7KWc9bChCcih3KSw4KSxnLmI9VGUtZy5iO2ZvcihCPW5ldyBHKGEuYik7Qi5hPEIuYy5jLmxlbmd0aDspQz1sKHJlKEIpLDcyKSxyXyhDLm4sVGUtQy5vLmIpfWZvcih6PW5ldyBHKE1lLmYpO3ouYTx6LmMuYy5sZW5ndGg7KUM9bChyZSh6KSw3Mikscl8oQy5uLE1lLm8uYi1DLm8uYil9Zm9yKFYuaz09KFpuKCksVXMpJiYocnQoViwoZnQoKSxXYyksX2Z0KGwoUShWLFdjKSw2NCkpKSxFNG4oVikpLEw9bmV3IEcoVi5iKTtMLmE8TC5jLmMubGVuZ3RoOylDPWwocmUoTCksNzIpLFVkdChDKSxyXyhDLm4sZmUuYi1DLm8uYil9fWZ1bmN0aW9uIEVJbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm4sam4sdXIsb2k7Zm9yKFRlPW5ldyBVYShlLmIsMCksQz10LktjKCksVj0wLEU9bChDLlBiKCksMTcpLmEsWmU9MCxuPW5ldyBLcyxTdD1uZXcgYmQ7VGUuYjxUZS5kLmdjKCk7KXtmb3IoZmU9KG1yKFRlLmI8VGUuZC5nYygpKSxsKFRlLmQuWGIoVGUuYz1UZS5iKyspLDMwKSksJGU9bmV3IEcoZmUuYSk7JGUuYTwkZS5jLmMubGVuZ3RoOyl7Zm9yKE1lPWwocmUoJGUpLDEwKSx6PW5ldyBocihkcihxcyhNZSkuYS5LYygpLG5ldyBqKSk7anIoeik7KUw9bCh4cih6KSwxOCksU3QuYS56YyhMLFN0KTtmb3IoQj1uZXcgaHIoZHIoa2EoTWUpLmEuS2MoKSxuZXcgaikpO2pyKEIpOylMPWwoeHIoQiksMTgpLFN0LmEuQmMoTCkhPW51bGx9aWYoVisxPT1FKXtmb3IoYT1uZXcgeXUoZSksYnkoVGUsYSksbz1uZXcgeXUoZSksYnkoVGUsbyksYW49U3QuYS5lYygpLktjKCk7YW4uT2IoKTspY249bChhbi5QYigpLDE4KSxuLmEuX2IoY24pfHwoKytaZSxuLmEuemMoY24sbikpLGY9bmV3IG9wKGUpLHJ0KGYsKE50KCksTXMpLChSYSgpLHNDKSksVmEoZixhKSx4KGYsKFpuKCksSzEpKSxKPW5ldyBndSxNYyhKLGYpLGxhKEosKEN0KCksZXIpKSxCbj1uZXcgZ3UsTWMoQm4sZiksbGEoQm4sYXIpLHI9bmV3IG9wKGUpLHJ0KHIsTXMsc0MpLFZhKHIsbykseChyLEsxKSx0ZT1uZXcgZ3UsTWModGUsciksbGEodGUsZXIpLGpuPW5ldyBndSxNYyhqbixyKSxsYShqbixhciksb3Q9bmV3IFR3LHBvKG90LGNuLmMpLEZhKG90LEopLHJ0KG90LChmdCgpLEtpKSxsKFEoY24sS2kpLDE3KSksb2k9bmV3IFR3LHBvKG9pLEJuKSxGYShvaSx0ZSkscnQob2ksS2ksbChRKGNuLEtpKSwxNykpLHBvKGNuLGpuKSxnPW5ldyBvNmUoZixyLG90LG9pLGNuKSxydChmLGMzLGcpLHJ0KHIsYzMsZyksdXI9b3QuYy5pLHVyLms9PUsxJiYodz1sKFEodXIsYzMpLDMxMyksdy5kPWcsZy5nPXcpO2lmKEMuT2IoKSlFPWwoQy5QYigpLDE3KS5hO2Vsc2UgYnJlYWt9KytWfXJldHVybiBwdChaZSl9ZnVuY3Rpb24gVEluKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZTtmb3IoSj1uZXcgYnQsQj1uZXcgRyhlLmQuYik7Qi5hPEIuYy5jLmxlbmd0aDspZm9yKEw9bChyZShCKSwzMCksVj1uZXcgRyhMLmEpO1YuYTxWLmMuYy5sZW5ndGg7KXtmb3Ioej1sKHJlKFYpLDEwKSxhPWwoY3IoZS5mLHopLDYwKSx3PW5ldyBocihkcihxcyh6KS5hLktjKCksbmV3IGopKTtqcih3KTspaWYoZj1sKHhyKHcpLDE4KSxyPVJyKGYuYSwwKSxFPSEwLEM9bnVsbCxyLmIhPXIuZC5jKXtmb3IodD1sKEJyKHIpLDgpLG49bnVsbCxmLmMuaj09KEN0KCksUW4pJiYodGU9bmV3IFFBKHQsbmV3IGx0KHQuYSxhLmQuZCksYSxmKSx0ZS5mLmE9ITAsdGUuYT1mLmMsJG4oSi5jLHRlKSksZi5jLmo9PURyJiYodGU9bmV3IFFBKHQsbmV3IGx0KHQuYSxhLmQuZCthLmQuYSksYSxmKSx0ZS5mLmQ9ITAsdGUuYT1mLmMsJG4oSi5jLHRlKSk7ci5iIT1yLmQuYzspbj1sKEJyKHIpLDgpLFg2ZSh0LmIsbi5iKXx8KEM9bmV3IFFBKHQsbixudWxsLGYpLCRuKEouYyxDKSxFJiYoRT0hMSxuLmI8YS5kLmQ/Qy5mLmE9ITA6bi5iPmEuZC5kK2EuZC5hP0MuZi5kPSEwOihDLmYuZD0hMCxDLmYuYT0hMCkpKSxyLmIhPXIuZC5jJiYodD1uKTtDJiYobz1sKGNyKGUuZixmLmQuaSksNjApLHQuYjxvLmQuZD9DLmYuYT0hMDp0LmI+by5kLmQrby5kLmE/Qy5mLmQ9ITA6KEMuZi5kPSEwLEMuZi5hPSEwKSl9Zm9yKGc9bmV3IGhyKGRyKGthKHopLmEuS2MoKSxuZXcgaikpO2pyKGcpOylmPWwoeHIoZyksMTgpLGYuYS5iIT0wJiYodD1sKG8wKGYuYSksOCksZi5kLmo9PShDdCgpLFFuKSYmKHRlPW5ldyBRQSh0LG5ldyBsdCh0LmEsYS5kLmQpLGEsZiksdGUuZi5hPSEwLHRlLmE9Zi5kLCRuKEouYyx0ZSkpLGYuZC5qPT1EciYmKHRlPW5ldyBRQSh0LG5ldyBsdCh0LmEsYS5kLmQrYS5kLmEpLGEsZiksdGUuZi5kPSEwLHRlLmE9Zi5kLCRuKEouYyx0ZSkpKX1yZXR1cm4gSn1mdW5jdGlvbiBDSW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCO2Zvcih3PW5ldyBidCxMPXQubGVuZ3RoLGY9JDdlKG4pLEU9MDtFPEw7KytFKXtzd2l0Y2goQz1MeWUodCxjbCg2MSksRSkscj14NG4oZiwoR2EoRSxDLHQubGVuZ3RoKSx0LnN1YnN0cihFLEMtRSkpKSxhPWdjZShyKSxvPWEuamsoKS53aSgpLGNvKHQsKytDKSl7Y2FzZSAzOTp7Zz1Oayh0LDM5LCsrQyksdnQodyxuZXcgU3Eocixlb2UoKEdhKEMsZyx0Lmxlbmd0aCksdC5zdWJzdHIoQyxnLUMpKSxvLGEpKSksRT1nKzE7YnJlYWt9Y2FzZSAzNDp7Zz1Oayh0LDM0LCsrQyksdnQodyxuZXcgU3Eocixlb2UoKEdhKEMsZyx0Lmxlbmd0aCksdC5zdWJzdHIoQyxnLUMpKSxvLGEpKSksRT1nKzE7YnJlYWt9Y2FzZSA5MTp7Qj1uZXcgYnQsdnQodyxuZXcgU3EocixCKSk7ZTpmb3IoOzspe3N3aXRjaChjbyh0LCsrQykpe2Nhc2UgMzk6e2c9TmsodCwzOSwrK0MpLHZ0KEIsZW9lKChHYShDLGcsdC5sZW5ndGgpLHQuc3Vic3RyKEMsZy1DKSksbyxhKSksQz1nKzE7YnJlYWt9Y2FzZSAzNDp7Zz1Oayh0LDM0LCsrQyksdnQoQixlb2UoKEdhKEMsZyx0Lmxlbmd0aCksdC5zdWJzdHIoQyxnLUMpKSxvLGEpKSxDPWcrMTticmVha31jYXNlIDExMDp7aWYoKytDLHQuaW5kZXhPZigidWxsIixDKT09QylCLmMucHVzaChudWxsKTtlbHNlIHRocm93IHVlKG5ldyBBYyhoNHQpKTtDKz0zO2JyZWFrfX1pZihDPEwpc3dpdGNoKFhuKEMsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChDKSl7Y2FzZSA0NDpicmVhaztjYXNlIDkzOmJyZWFrIGU7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgQWMoIkV4cGVjdGluZyAsIG9yIF0iKSl9ZWxzZSBicmVha31FPUMrMTticmVha31jYXNlIDExMDp7aWYoKytDLHQuaW5kZXhPZigidWxsIixDKT09Qyl2dCh3LG5ldyBTcShyLG51bGwpKTtlbHNlIHRocm93IHVlKG5ldyBBYyhoNHQpKTtFPUMrMzticmVha319aWYoRTxMKXtpZihYbihFLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoRSkhPTQ0KXRocm93IHVlKG5ldyBBYygiRXhwZWN0aW5nICwiKSl9ZWxzZSBicmVha31yZXR1cm4gY1NuKGUsdyxuKX1mdW5jdGlvbiBTSW4oZSl7dmFyIHQsbixyLGEsbztzd2l0Y2godD1lLmMsbz1udWxsLHQpe2Nhc2UgNjpyZXR1cm4gZS5FbSgpO2Nhc2UgMTM6cmV0dXJuIGUuRm0oKTtjYXNlIDIzOnJldHVybiBlLndtKCk7Y2FzZSAyMjpyZXR1cm4gZS5CbSgpO2Nhc2UgMTg6cmV0dXJuIGUueW0oKTtjYXNlIDg6TGkoZSksbz0oRGkoKSxYUGUpO2JyZWFrO2Nhc2UgOTpyZXR1cm4gZS5lbSghMCk7Y2FzZSAxOTpyZXR1cm4gZS5mbSgpO2Nhc2UgMTA6c3dpdGNoKGUuYSl7Y2FzZSAxMDA6Y2FzZSA2ODpjYXNlIDExOTpjYXNlIDg3OmNhc2UgMTE1OmNhc2UgODM6cmV0dXJuIG89ZS5kbShlLmEpLExpKGUpLG87Y2FzZSAxMDE6Y2FzZSAxMDI6Y2FzZSAxMTA6Y2FzZSAxMTQ6Y2FzZSAxMTY6Y2FzZSAxMTc6Y2FzZSAxMTg6Y2FzZSAxMjA6bj1lLmNtKCksbjxJbz9vPShEaSgpLERpKCksbmV3IG5nKDAsbikpOm89a3N0KHc4ZShuKSk7YnJlYWs7Y2FzZSA5OTpyZXR1cm4gZS5vbSgpO2Nhc2UgNjc6cmV0dXJuIGUuam0oKTtjYXNlIDEwNTpyZXR1cm4gZS5ybSgpO2Nhc2UgNzM6cmV0dXJuIGUua20oKTtjYXNlIDEwMzpyZXR1cm4gZS5wbSgpO2Nhc2UgODg6cmV0dXJuIGUubG0oKTtjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpyZXR1cm4gZS5nbSgpO2Nhc2UgODA6Y2FzZSAxMTI6aWYobz13OWUoZSxlLmEpLCFvKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSx0MGUpKSkpO2JyZWFrO2RlZmF1bHQ6bz1QaXQoZS5hKX1MaShlKTticmVhaztjYXNlIDA6aWYoZS5hPT05M3x8ZS5hPT0xMjN8fGUuYT09MTI1KXRocm93IHVlKG5ldyByaShhaSgoSnIoKSx4U2UpKSkpO289UGl0KGUuYSkscj1lLmEsTGkoZSksKHImNjQ1MTIpPT1BUCYmZS5jPT0wJiYoZS5hJjY0NTEyKT09NTYzMjAmJihhPVdlKGtmLEFkLDI4LDIsMTUsMSksYVswXT1yJlpzLGFbMV09ZS5hJlpzLG89QmFlKGtzdChJZihhLDAsYS5sZW5ndGgpKSwwKSxMaShlKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCkseFNlKSkpKX1yZXR1cm4gb31mdW5jdGlvbiBfSW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuLGpuO2Zvcihhbj1uZXcgb3Msb3Q9bmV3IG9zLHRlPS0xLHc9bmV3IEcoZSk7dy5hPHcuYy5jLmxlbmd0aDspe2ZvcihmPWwocmUodyksMTMxKSxmLnM9dGUtLSxDPTAsTWU9MCxvPW5ldyBHKGYudCk7by5hPG8uYy5jLmxlbmd0aDspcj1sKHJlKG8pLDI3NCksTWUrPXIuYztmb3IoYT1uZXcgRyhmLmkpO2EuYTxhLmMuYy5sZW5ndGg7KXI9bChyZShhKSwyNzQpLEMrPXIuYztmLm49QyxmLnU9TWUsTWU9PTA/Q3Mob3QsZixvdC5jLmIsb3QuYyk6Qz09MCYmQ3MoYW4sZixhbi5jLmIsYW4uYyl9Zm9yKGpuPUhIKGUpLEw9ZS5jLmxlbmd0aCxKPUwrMSxmZT1MLTEsej1uZXcgYnQ7am4uYS5nYygpIT0wOyl7Zm9yKDtvdC5iIT0wOylaZT0obXIob3QuYiE9MCksbChhZihvdCxvdC5hLmEpLDEzMSkpLGpuLmEuQmMoWmUpIT1udWxsLFplLnM9ZmUtLSxSOWUoWmUsYW4sb3QpO2Zvcig7YW4uYiE9MDspU3Q9KG1yKGFuLmIhPTApLGwoYWYoYW4sYW4uYS5hKSwxMzEpKSxqbi5hLkJjKFN0KSE9bnVsbCxTdC5zPUorKyxSOWUoU3QsYW4sb3QpO2ZvcihWPWxvLEU9am4uYS5lYygpLktjKCk7RS5PYigpOylmPWwoRS5QYigpLDEzMSksVGU9Zi51LWYubixUZT49ViYmKFRlPlYmJih6LmMubGVuZ3RoPTAsVj1UZSksJG4oei5jLGYpKTt6LmMubGVuZ3RoIT0wJiYoQj1sKGp0KHosYVUodCx6LmMubGVuZ3RoKSksMTMxKSxqbi5hLkJjKEIpIT1udWxsLEIucz1KKyssUjllKEIsYW4sb3QpLHouYy5sZW5ndGg9MCl9Zm9yKCRlPWUuYy5sZW5ndGgrMSxnPW5ldyBHKGUpO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwxMzEpLGYuczxMJiYoZi5zKz0kZSk7Zm9yKGNuPW5ldyBHKGUpO2NuLmE8Y24uYy5jLmxlbmd0aDspZm9yKFN0PWwocmUoY24pLDEzMSksbj1uZXcgVWEoU3QudCwwKTtuLmI8bi5kLmdjKCk7KXI9KG1yKG4uYjxuLmQuZ2MoKSksbChuLmQuWGIobi5jPW4uYisrKSwyNzQpKSxCbj1yLmIsU3Qucz5Cbi5zJiYocGgobiksYWwoQm4uaSxyKSxyLmM+MCYmKHIuYT1Cbix2dChCbi50LHIpLHIuYj1TdCx2dChTdC5pLHIpKSl9ZnVuY3Rpb24gdXd0KGUsdCxuLHIsYSl7dmFyIG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdCxjbixhbixCbixqbjtmb3IoSj1uZXcgQnUodC5iKSwkZT1uZXcgQnUodC5iKSxCPW5ldyBCdSh0LmIpLGNuPW5ldyBCdSh0LmIpLHRlPW5ldyBCdSh0LmIpLFN0PVJyKHQsMCk7U3QuYiE9U3QuZC5jOylmb3IoWmU9bChCcihTdCksMTIpLGc9bmV3IEcoWmUuZyk7Zy5hPGcuYy5jLmxlbmd0aDspaWYobz1sKHJlKGcpLDE4KSxvLmMuaT09by5kLmkpe2lmKFplLmo9PW8uZC5qKXskbihjbi5jLG8pO2NvbnRpbnVlfWVsc2UgaWYoWmUuaj09KEN0KCksUW4pJiZvLmQuaj09RHIpeyRuKHRlLmMsbyk7Y29udGludWV9fWZvcih3PW5ldyBHKHRlKTt3LmE8dy5jLmMubGVuZ3RoOylvPWwocmUodyksMTgpLFpfbihlLG8sbixyLChDdCgpLGFyKSk7Zm9yKGY9bmV3IEcoY24pO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxOCksYW49bmV3IG9wKGUpLHgoYW4sKFpuKCksQXUpKSxydChhbiwoTnQoKSxNcyksKFJhKCksTXUpKSxydChhbiwoZnQoKSx6aSksbyksQm49bmV3IGd1LHJ0KEJuLHppLG8uZCksbGEoQm4sKEN0KCksZXIpKSxNYyhCbixhbiksam49bmV3IGd1LHJ0KGpuLHppLG8uYyksbGEoam4sYXIpLE1jKGpuLGFuKSxydChvLmMsamwsYW4pLHJ0KG8uZCxqbCxhbikscG8obyxudWxsKSxGYShvLG51bGwpLCRuKG4uYyxhbikscnQoYW4saVcscHQoMikpO2ZvcihvdD1Scih0LDApO290LmIhPW90LmQuYzspWmU9bChCcihvdCksMTIpLEU9WmUuZS5jLmxlbmd0aD4wLGZlPVplLmcuYy5sZW5ndGg+MCxFJiZmZT8kbihCLmMsWmUpOkU/JG4oSi5jLFplKTpmZSYmJG4oJGUuYyxaZSk7Zm9yKFY9bmV3IEcoSik7Vi5hPFYuYy5jLmxlbmd0aDspej1sKHJlKFYpLDEyKSx2dChhLF9rZShlLHosbnVsbCxuKSk7Zm9yKE1lPW5ldyBHKCRlKTtNZS5hPE1lLmMuYy5sZW5ndGg7KVRlPWwocmUoTWUpLDEyKSx2dChhLF9rZShlLG51bGwsVGUsbikpO2ZvcihMPW5ldyBHKEIpO0wuYTxMLmMuYy5sZW5ndGg7KUM9bChyZShMKSwxMiksdnQoYSxfa2UoZSxDLEMsbikpfWZ1bmN0aW9uIFVrZShlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWU7Zm9yKEI9Z3Msej1ncyxDPTAsTD0wLHc9bmV3IGJ0LGc9bmV3IG9yKCghZS5iJiYoZS5iPW5ldyBudChqcyxlLDEyLDMpKSxlLmIpKTtnLmUhPWcuaS5nYygpOylvPWwoZ3IoZyksNzQpLHc9TGgoaGUobGUoRmgsMSksUm4sMjAsMCxbdywoIW8ubiYmKG8ubj1uZXcgbnQoZWMsbywxLDcpKSxvLm4pXSkpO2ZvcihNZT1yZyhMaChoZShsZShGaCwxKSxSbiwyMCwwLFsoIWUubiYmKGUubj1uZXcgbnQoZWMsZSwxLDcpKSxlLm4pLCghZS5hJiYoZS5hPW5ldyBudChBaSxlLDEwLDExKSksZS5hKSx3XSkpKTtqcihNZSk7KVRlPWwoeHIoTWUpLDQyMiksRT1sKFRlLm9mKChwaSgpLHRDKSksMTQwKSxCPlRlLm5oKCktRS5iJiYoQj1UZS5uaCgpLUUuYiksej5UZS5vaCgpLUUuZCYmKHo9VGUub2goKS1FLmQpLEM8VGUubmgoKStUZS5taCgpK0UuYyYmKEM9VGUubmgoKStUZS5taCgpK0UuYyksTDxUZS5vaCgpK1RlLmxoKCkrRS5hJiYoTD1UZS5vaCgpK1RlLmxoKCkrRS5hKTtmb3IoZj1uZXcgb3IoKCFlLmImJihlLmI9bmV3IG50KGpzLGUsMTIsMykpLGUuYikpO2YuZSE9Zi5pLmdjKCk7KWZvcihvPWwoZ3IoZiksNzQpLGZlPW5ldyBvcigoIW8uYSYmKG8uYT1uZXcgbnQoY3Msbyw2LDYpKSxvLmEpKTtmZS5lIT1mZS5pLmdjKCk7KWZvcih0ZT1sKGdyKGZlKSwxNjYpLFY9dGUuaixyPXRlLmIsSj10ZS5rLGE9dGUuYyxCPWIuTWF0aC5taW4oQixWKSxCPWIuTWF0aC5taW4oQixyKSxDPWIuTWF0aC5tYXgoQyxWKSxDPWIuTWF0aC5tYXgoQyxyKSx6PWIuTWF0aC5taW4oeixKKSx6PWIuTWF0aC5taW4oeixhKSxMPWIuTWF0aC5tYXgoTCxKKSxMPWIuTWF0aC5tYXgoTCxhKSxuPW5ldyBvcigoIXRlLmEmJih0ZS5hPW5ldyBZcyhxaCx0ZSw1KSksdGUuYSkpO24uZSE9bi5pLmdjKCk7KXQ9bChncihuKSwzNzcpLEI9Yi5NYXRoLm1pbihCLHQuYSksQz1iLk1hdGgubWF4KEMsdC5hKSx6PWIuTWF0aC5taW4oeix0LmIpLEw9Yi5NYXRoLm1heChMLHQuYik7SGkoZSwocGkoKSx0NyksQy1CKSxIaShlLGU3LEwteil9ZnVuY3Rpb24gQUluKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEw7aWYobi5VZygiTmV0d29yayBzaW1wbGV4IG5vZGUgcGxhY2VtZW50IiwxKSxlLmU9dCxlLm49bChRKHQsKGZ0KCksJDYpKSwzMTIpLHpMbihlKSxzeG4oZSksSXMoRGMobmV3IGJuKG51bGwsbmV3IGtuKGUuZS5iLDE2KSksbmV3IEplZSksbmV3IEpZZShlKSksSXMoRmkoRGMoRmkoRGMobmV3IGJuKG51bGwsbmV3IGtuKGUuZS5iLDE2KSksbmV3IHV0ZSksbmV3IEpqKSxuZXcgbHRlKSxuZXcgVFMpLG5ldyBRWWUoZSkpLFJ0KEJ0KFEoZS5lLChOdCgpLFpMKSkpKSYmKGY9bi5laCgxKSxmLlVnKCJTdHJhaWdodCBFZGdlcyBQcmUtUHJvY2Vzc2luZyIsMSksdURuKGUpLGYuVmcoKSksJDZuKGUuZiksbz1sKFEodCxuTSksMTcpLmEqZS5mLmEuYy5sZW5ndGgsb2xlKG4zZShyM2UoYmFlKGUuZiksbyksITEpLG4uZWgoMSkpLGUuZC5hLmdjKCkhPTApe2ZvcihmPW4uZWgoMSksZi5VZygiRmxleGlibGUgV2hlcmUgU3BhY2UgUHJvY2Vzc2luZyIsMSksZz1sKGZoKFk4KGZjKG5ldyBibihudWxsLG5ldyBrbihlLmYuYSwxNikpLG5ldyBaZWUpLG5ldyBHZWUpKSwxNykuYSx3PWwoZmgodnkoZmMobmV3IGJuKG51bGwsbmV3IGtuKGUuZi5hLDE2KSksbmV3IGV0ZSksbmV3IEtlZSkpLDE3KS5hLEU9dy1nLEM9aHcobmV3IFNtLGUuZiksTD1odyhuZXcgU20sZS5mKSxwMChzMChpMChyMChhMChuZXcgX2YsMmU0KSxFKSxDKSxMKSksSXMoRmkoRmkoYzVlKGUuaSksbmV3IHR0ZSksbmV3IG50ZSksbmV3IFRhdChnLEMsRSxMKSksYT1lLmQuYS5lYygpLktjKCk7YS5PYigpOylyPWwoYS5QYigpLDIxOCksci5nPTE7b2xlKG4zZShyM2UoYmFlKGUuZiksbyksITEpLGYuZWgoMSkpLGYuVmcoKX1SdChCdChRKHQsWkwpKSkmJihmPW4uZWgoMSksZi5VZygiU3RyYWlnaHQgRWRnZXMgUG9zdC1Qcm9jZXNzaW5nIiwxKSxYOW4oZSksZi5WZygpKSxHTW4oZSksZS5lPW51bGwsZS5mPW51bGwsZS5pPW51bGwsZS5jPW51bGwsTmwoZS5rKSxlLmo9bnVsbCxlLmE9bnVsbCxlLm89bnVsbCxlLmQuYS4kYigpLG4uVmcoKX1mdW5jdGlvbiBMSW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lO2ZvcihuLlVnKCJEZXB0aCBmaXJzdCBtb2RlbCBvcmRlciBsYXllcmluZyIsMSksZS5kPXQsdGU9bmV3IGJ0LEo9bmV3IEcoZS5kLmEpO0ouYTxKLmMuYy5sZW5ndGg7KXo9bChyZShKKSwxMCksei5rPT0oWm4oKSxQcykmJiRuKHRlLmMseik7Zm9yKENuKCksVnModGUsbmV3ICRlZSksZj0hMCxlLmI9bmV3IHl1KGUuZCksZS5hPW51bGwsdnQoZS5kLmIsZS5iKSxlLmIucD0wLGUuYz0wLGUuZj1uZXcgb3MsVj1uZXcgRyh0ZSk7Vi5hPFYuYy5jLmxlbmd0aDspaWYoej1sKHJlKFYpLDEwKSxmKVZhKHosZS5iKSxmPSExO2Vsc2UgaWYoSEFuKGUseikpaWYoQj1lLmMsQj12ZHQoQix6KSxyPUIrMixDPUItZS5jLGUuZi5iPT0wKUo5ZShlLHIseik7ZWxzZSBpZihDPjApe2ZvcihNZT1ScihlLmYsMCk7TWUuYiE9TWUuZC5jOylUZT1sKEJyKE1lKSwxMCksVGUucCs9Qi1lLmU7cjllKGUpLENoKGUuZiksSjllKGUscix6KX1lbHNle2Zvcih1aShlLmYseiksei5wPXIsZS5lPWIuTWF0aC5tYXgoZS5lLHIpLG89bmV3IGhyKGRyKGthKHopLmEuS2MoKSxuZXcgaikpO2pyKG8pOylhPWwoeHIobyksMTgpLCFhLmMuaS5jJiZhLmMuaS5rPT0oWm4oKSxjdSkmJih1aShlLmYsYS5jLmkpLGEuYy5pLnA9ci0xKTtlLmM9cn1lbHNlIHI5ZShlKSxDaChlLmYpLHI9MCxqcihuZXcgaHIoZHIoa2EoeikuYS5LYygpLG5ldyBqKSkpPyhCPTAsQj12ZHQoQix6KSxyPUIrMixKOWUoZSxyLHopKToodWkoZS5mLHopLHoucD0wLGUuZT1iLk1hdGgubWF4KGUuZSwwKSxlLmI9bChqdChlLmQuYiwwKSwzMCksZS5jPTApO2ZvcihlLmYuYj09MHx8cjllKGUpLGUuZC5hLmMubGVuZ3RoPTAsZmU9bmV3IGJ0LEU9bmV3IEcoZS5kLmIpO0UuYTxFLmMuYy5sZW5ndGg7KWc9bChyZShFKSwzMCksZy5hLmMubGVuZ3RoPT0wJiYkbihmZS5jLGcpO2ZvcihnOGUoZS5kLmIsZmUpLEw9MCx3PW5ldyBHKGUuZC5iKTt3LmE8dy5jLmMubGVuZ3RoOylnPWwocmUodyksMzApLGcucD1MLCsrTDtuLlZnKCl9ZnVuY3Rpb24gTUluKGUsdCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdCxjbixhbixCbixqbix1cixvaSx3cyxWbCxsYztpZihCbj1udWxsLHVyPXQsam49VWN0KGUsUGN0KG4pLHVyKSxmRShqbixZZyh1cixQZCkpLG9pPWwoWDUoZS5nLHh4KFdnKHVyLEhmZSkpKSwyNyksQj1XZyh1ciwic291cmNlUG9ydCIpLHI9bnVsbCxCJiYocj14eChCKSksd3M9bChYNShlLmosciksMTIzKSwhb2kpdGhyb3cgZz1ORSh1ciksVj0iQW4gZWRnZSBtdXN0IGhhdmUgYSBzb3VyY2Ugbm9kZSAoZWRnZSBpZDogJyIrZyxKPVYra1QsdWUobmV3IGRkKEopKTtpZih3cyYmIXlkKE0xKHdzKSxvaSkpdGhyb3cgdz1ZZyh1cixQZCksdGU9IlRoZSBzb3VyY2UgcG9ydCBvZiBhbiBlZGdlIG11c3QgYmUgYSBwb3J0IG9mIHRoZSBlZGdlJ3Mgc291cmNlIG5vZGUgKGVkZ2UgaWQ6ICciK3csZmU9dGUra1QsdWUobmV3IGRkKGZlKSk7aWYoY249KCFqbi5iJiYoam4uYj1uZXcgTG4oX3Isam4sNCw3KSksam4uYiksbz1udWxsLHdzP289d3M6bz1vaSxxcihjbixvKSxWbD1sKFg1KGUuZyx4eChXZyh1cix3U2UpKSksMjcpLHo9V2codXIsInRhcmdldFBvcnQiKSxhPW51bGwseiYmKGE9eHgoeikpLGxjPWwoWDUoZS5qLGEpLDEyMyksIVZsKXRocm93IEw9TkUodXIpLFRlPSJBbiBlZGdlIG11c3QgaGF2ZSBhIHRhcmdldCBub2RlIChlZGdlIGlkOiAnIitMLE1lPVRlK2tULHVlKG5ldyBkZChNZSkpO2lmKGxjJiYheWQoTTEobGMpLFZsKSl0aHJvdyBFPVlnKHVyLFBkKSwkZT0iVGhlIHRhcmdldCBwb3J0IG9mIGFuIGVkZ2UgbXVzdCBiZSBhIHBvcnQgb2YgdGhlIGVkZ2UncyB0YXJnZXQgbm9kZSAoZWRnZSBpZDogJyIrRSxaZT0kZStrVCx1ZShuZXcgZGQoWmUpKTtpZihhbj0oIWpuLmMmJihqbi5jPW5ldyBMbihfcixqbiw1LDgpKSxqbi5jKSxmPW51bGwsbGM/Zj1sYzpmPVZsLHFyKGFuLGYpLCgham4uYiYmKGpuLmI9bmV3IExuKF9yLGpuLDQsNykpLGpuLmIpLmk9PTB8fCgham4uYyYmKGpuLmM9bmV3IExuKF9yLGpuLDUsOCkpLGpuLmMpLmk9PTApdGhyb3cgQz1ZZyh1cixQZCksb3Q9dzR0K0MsU3Q9b3Qra1QsdWUobmV3IGRkKFN0KSk7cmV0dXJuIG1VKHVyLGpuKSx0VG4odXIsam4pLEJuPXdjZShlLHVyLGpuKSxCbn1mdW5jdGlvbiBsd3QoZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuLGpuLHVyLG9pLHdzO2Zvcih6PWwoUShlLChiYigpLEh4KSksMjcpLE1lPUlpLCRlPUlpLGZlPWxvLFRlPWxvLG90PW5ldyBHKGUuZSk7b3QuYTxvdC5jLmMubGVuZ3RoOylaZT1sKHJlKG90KSwxNTMpLGpuPVplLmQsdXI9WmUuZSxNZT1iLk1hdGgubWluKE1lLGpuLmEtdXIuYS8yKSwkZT1iLk1hdGgubWluKCRlLGpuLmItdXIuYi8yKSxmZT1iLk1hdGgubWF4KGZlLGpuLmErdXIuYS8yKSxUZT1iLk1hdGgubWF4KFRlLGpuLmIrdXIuYi8yKTtmb3Iobj1uZXcgRyhlLmIpO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwyNTApLGpuPXQuZCx1cj10LmUsTWU9Yi5NYXRoLm1pbihNZSxqbi5hLXVyLmEvMiksJGU9Yi5NYXRoLm1pbigkZSxqbi5iLXVyLmIvMiksZmU9Yi5NYXRoLm1heChmZSxqbi5hK3VyLmEvMiksVGU9Yi5NYXRoLm1heChUZSxqbi5iK3VyLmIvMik7Zm9yKEJuPWwoYXQoeiwoYjAoKSxKN3QpKSwxMDcpLGFuPW5ldyBsdChCbi5iLU1lLEJuLmQtJGUpLEU9bmV3IEcoZS5lKTtFLmE8RS5jLmMubGVuZ3RoOyl3PWwocmUoRSksMTUzKSxjbj1RKHcsSHgpLERlKGNuLDIwNykmJihKPWwoY24sMjcpLFN0PU9pKG5ldyBFbyh3LmQpLGFuKSxRaChKLFN0LmEtSi5nLzIsU3QuYi1KLmYvMikpO2ZvcihvPW5ldyBHKGUuYyk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDI5MCksTD1sKFEoYSxIeCksNzQpLEI9bDYoTCwhMCwhMCksb2k9bmV3IEVvKG43ZShhKSksT2kob2ksYW4pLGtPKEIsb2kuYSxvaS5iKSxWdShhLmEsbmV3IF9ldChhbixCKSkscj1uZXcgRW8ocjdlKGEpKSxPaShyLGFuKSx4TyhCLHIuYSxyLmIpO2ZvcihnPW5ldyBHKGUuZCk7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDQ1NCksVj1sKFEoZixIeCksMTM1KSx0ZT1PaShuZXcgRW8oZi5kKSxhbiksUWgoVix0ZS5hLHRlLmIpO3dzPWZlLU1lKyhCbi5iK0JuLmMpLEM9VGUtJGUrKEJuLmQrQm4uYSksUnQoQnQoYXQoeiwocGkoKSxDNCkpKSl8fEd3KHosd3MsQywhMSwhMCksSGkoeix0Nyx3cy0oQm4uYitCbi5jKSksSGkoeixlNyxDLShCbi5kK0JuLmEpKX1mdW5jdGlvbiBod3QoZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuO3JldHVybiBMPXlBbihpbChlLChDdCgpLGVkKSksdCksVj1pNihpbChlLF8wKSx0KSwkZT1pNihpbChlLCRoKSx0KSxjbj1oVShpbChlLEhmKSx0KSxCPWhVKGlsKGUseWYpLHQpLFRlPWk2KGlsKGUsQTApLHQpLEo9aTYoaWwoZSx6bCksdCksb3Q9aTYoaWwoZSx6aCksdCksWmU9aTYoaWwoZSx4ZiksdCksYW49aFUoaWwoZSxKdSksdCksZmU9aTYoaWwoZSxobCksdCksTWU9aTYoaWwoZSxxbCksdCksU3Q9aTYoaWwoZSxsbCksdCksQm49aFUoaWwoZSxmbCksdCksej1oVShpbChlLF9sKSx0KSx0ZT1pNihpbChlLER1KSx0KSxuPVk1KGhlKGxlKE5hLDEpLFpvLDI4LDE1LFtUZS5hLGNuLmEsb3QuYSxCbi5hXSkpLHI9WTUoaGUobGUoTmEsMSksWm8sMjgsMTUsW1YuYSxMLmEsJGUuYSx0ZS5hXSkpLGE9ZmUuYSxvPVk1KGhlKGxlKE5hLDEpLFpvLDI4LDE1LFtKLmEsQi5hLFplLmEsei5hXSkpLEU9WTUoaGUobGUoTmEsMSksWm8sMjgsMTUsW1RlLmIsVi5iLEouYixNZS5iXSkpLHc9WTUoaGUobGUoTmEsMSksWm8sMjgsMTUsW2NuLmIsTC5iLEIuYix0ZS5iXSkpLEM9YW4uYixnPVk1KGhlKGxlKE5hLDEpLFpvLDI4LDE1LFtvdC5iLCRlLmIsWmUuYixTdC5iXSkpLG4yKGlsKGUsZWQpLG4rYSxFK0MpLG4yKGlsKGUsRHUpLG4rYSxFK0MpLG4yKGlsKGUsXzApLG4rYSwwKSxuMihpbChlLCRoKSxuK2EsRStDK3cpLG4yKGlsKGUsSGYpLDAsRStDKSxuMihpbChlLHlmKSxuK2ErcixFK0MpLG4yKGlsKGUsemwpLG4rYStyLDApLG4yKGlsKGUsemgpLDAsRStDK3cpLG4yKGlsKGUseGYpLG4rYStyLEUrQyt3KSxuMihpbChlLEp1KSwwLEUpLG4yKGlsKGUsaGwpLG4sMCksbjIoaWwoZSxsbCksMCxFK0MrdyksbjIoaWwoZSxfbCksbithK3IsMCksZj1uZXcgcWEsZi5hPVk1KGhlKGxlKE5hLDEpLFpvLDI4LDE1LFtuK3IrYStvLGFuLmEsTWUuYSxTdC5hXSkpLGYuYj1ZNShoZShsZShOYSwxKSxabywyOCwxNSxbRSt3K0MrZyxmZS5iLEJuLmIsei5iXSkpLGZ9ZnVuY3Rpb24gZnd0KGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdCxjbixhbixCbjtmb3IoVGU9bmV3IGx0KGdzLGdzKSx0PW5ldyBsdChpYSxpYSksY249bmV3IEcoZSk7Y24uYTxjbi5jLmMubGVuZ3RoOylTdD1sKHJlKGNuKSw4KSxUZS5hPWIuTWF0aC5taW4oVGUuYSxTdC5hKSxUZS5iPWIuTWF0aC5taW4oVGUuYixTdC5iKSx0LmE9Yi5NYXRoLm1heCh0LmEsU3QuYSksdC5iPWIuTWF0aC5tYXgodC5iLFN0LmIpO2ZvcihCPW5ldyBsdCh0LmEtVGUuYSx0LmItVGUuYiksRT1uZXcgbHQoVGUuYS01MCxUZS5iLUIuYS01MCksQz1uZXcgbHQoVGUuYS01MCx0LmIrQi5hKzUwKSxMPW5ldyBsdCh0LmErQi5iLzIrNTAsVGUuYitCLmIvMiksej1uZXcgQ2tlKEUsQyxMKSxvdD1uZXcgS3Msbz1uZXcgYnQsbj1uZXcgYnQsb3QuYS56Yyh6LG90KSxCbj1uZXcgRyhlKTtCbi5hPEJuLmMuYy5sZW5ndGg7KXtmb3IoYW49bChyZShCbiksOCksby5jLmxlbmd0aD0wLFplPW90LmEuZWMoKS5LYygpO1plLk9iKCk7KU1lPWwoWmUuUGIoKSwzMTcpLHI9TWUuZCxwYihyLE1lLmEpLEZ3KHBiKE1lLmQsYW4pLHBiKE1lLmQsTWUuYSkpPDAmJiRuKG8uYyxNZSk7Zm9yKG4uYy5sZW5ndGg9MCwkZT1uZXcgRyhvKTskZS5hPCRlLmMuYy5sZW5ndGg7KWZvcihNZT1sKHJlKCRlKSwzMTcpLHRlPW5ldyBHKE1lLmUpO3RlLmE8dGUuYy5jLmxlbmd0aDspe2ZvcihWPWwocmUodGUpLDE3NyksZj0hMCx3PW5ldyBHKG8pO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwzMTcpLGchPU1lJiYoSmMoVixqdChnLmUsMCkpfHxKYyhWLGp0KGcuZSwxKSl8fEpjKFYsanQoZy5lLDIpKSkmJihmPSExKTtmJiYkbihuLmMsVil9Zm9yKHpndChvdCxvKSx0byhvdCxuZXcgam8pLEo9bmV3IEcobik7Si5hPEouYy5jLmxlbmd0aDspVj1sKHJlKEopLDE3NyksbmEob3QsbmV3IENrZShhbixWLmEsVi5iKSl9Zm9yKGZlPW5ldyBLcyx0byhvdCxuZXcgRW0oZmUpKSxhPWZlLmEuZWMoKS5LYygpO2EuT2IoKTspVj1sKGEuUGIoKSwxNzcpLChyVih6LFYuYSl8fHJWKHosVi5iKSkmJmEuUWIoKTtyZXR1cm4gdG8oZmUsbmV3ICRvKSxmZX1mdW5jdGlvbiBzdSgpe3N1PVUsdFplKCksVF90PUxhLmEsbChPZSh0dChMYS5hKSwwKSwxOSksa190PUxhLmYsbChPZSh0dChMYS5mKSwwKSwxOSksbChPZSh0dChMYS5mKSwxKSwzNSksRV90PUxhLm4sbChPZSh0dChMYS5uKSwwKSwzNSksbChPZSh0dChMYS5uKSwxKSwzNSksbChPZSh0dChMYS5uKSwyKSwzNSksbChPZSh0dChMYS5uKSwzKSwzNSksZFBlPUxhLmcsbChPZSh0dChMYS5nKSwwKSwxOSksbChPZSh0dChMYS5nKSwxKSwzNSkseF90PUxhLmMsbChPZSh0dChMYS5jKSwwKSwxOSksbChPZSh0dChMYS5jKSwxKSwxOSksZ1BlPUxhLmksbChPZSh0dChMYS5pKSwwKSwxOSksbChPZSh0dChMYS5pKSwxKSwxOSksbChPZSh0dChMYS5pKSwyKSwxOSksbChPZSh0dChMYS5pKSwzKSwxOSksbChPZSh0dChMYS5pKSw0KSwzNSkscFBlPUxhLmosbChPZSh0dChMYS5qKSwwKSwxOSksZlBlPUxhLmQsbChPZSh0dChMYS5kKSwwKSwxOSksbChPZSh0dChMYS5kKSwxKSwxOSksbChPZSh0dChMYS5kKSwyKSwxOSksbChPZSh0dChMYS5kKSwzKSwxOSksbChPZSh0dChMYS5kKSw0KSwzNSksbChPZSh0dChMYS5kKSw1KSwzNSksbChPZSh0dChMYS5kKSw2KSwzNSksbChPZSh0dChMYS5kKSw3KSwzNSkseV90PUxhLmIsbChPZSh0dChMYS5iKSwwKSwzNSksbChPZSh0dChMYS5iKSwxKSwzNSkscFk9TGEuZSxsKE9lKHR0KExhLmUpLDApLDM1KSxsKE9lKHR0KExhLmUpLDEpLDM1KSxsKE9lKHR0KExhLmUpLDIpLDM1KSxsKE9lKHR0KExhLmUpLDMpLDM1KSxsKE9lKHR0KExhLmUpLDQpLDE5KSxsKE9lKHR0KExhLmUpLDUpLDE5KSxsKE9lKHR0KExhLmUpLDYpLDE5KSxsKE9lKHR0KExhLmUpLDcpLDE5KSxsKE9lKHR0KExhLmUpLDgpLDE5KSxsKE9lKHR0KExhLmUpLDkpLDE5KSxsKE9lKHR0KExhLmUpLDEwKSwzNSksQ2c9TGEuayxsKE9lKHR0KExhLmspLDApLDM1KSxsKE9lKHR0KExhLmspLDEpLDM1KX1mdW5jdGlvbiBHa2UoZSl7dmFyIHQsbixyLGEsbztzd2l0Y2godD1lLmMsdCl7Y2FzZSAxMTpyZXR1cm4gZS52bSgpO2Nhc2UgMTI6cmV0dXJuIGUueG0oKTtjYXNlIDE0OnJldHVybiBlLnptKCk7Y2FzZSAxNTpyZXR1cm4gZS5DbSgpO2Nhc2UgMTY6cmV0dXJuIGUuQW0oKTtjYXNlIDE3OnJldHVybiBlLkRtKCk7Y2FzZSAyMTpyZXR1cm4gTGkoZSksRGkoKSxEaSgpLFdNO2Nhc2UgMTA6c3dpdGNoKGUuYSl7Y2FzZSA2NTpyZXR1cm4gZS5obSgpO2Nhc2UgOTA6cmV0dXJuIGUubW0oKTtjYXNlIDEyMjpyZXR1cm4gZS50bSgpO2Nhc2UgOTg6cmV0dXJuIGUubm0oKTtjYXNlIDY2OnJldHVybiBlLmltKCk7Y2FzZSA2MDpyZXR1cm4gZS5zbSgpO2Nhc2UgNjI6cmV0dXJuIGUucW0oKX19c3dpdGNoKG89U0luKGUpLHQ9ZS5jLHQpe2Nhc2UgMzpyZXR1cm4gZS5JbShvKTtjYXNlIDQ6cmV0dXJuIGUuR20obyk7Y2FzZSA1OnJldHVybiBlLkhtKG8pO2Nhc2UgMDppZihlLmE9PTEyMyYmZS5kPGUuail7aWYoYT1lLmQscj0wLG49LTEsKHQ9Y28oZS5pLGErKykpPj00OCYmdDw9NTcpe2ZvcihyPXQtNDg7YTxlLmomJih0PWNvKGUuaSxhKyspKT49NDgmJnQ8PTU3OylpZihyPXIqMTArdC00OCxyPDApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLENTZSkpKSl9ZWxzZSB0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksSzR0KSkpKTtpZihuPXIsdD09NDQpe2lmKGE+PWUuail0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksWTR0KSkpKTtpZigodD1jbyhlLmksYSsrKSk+PTQ4JiZ0PD01Nyl7Zm9yKG49dC00ODthPGUuaiYmKHQ9Y28oZS5pLGErKykpPj00OCYmdDw9NTc7KWlmKG49bioxMCt0LTQ4LG48MCl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksQ1NlKSkpKTtpZihyPm4pdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLFg0dCkpKSl9ZWxzZSBuPS0xfWlmKHQhPTEyNSl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksVzR0KSkpKTtlLmJtKGEpPyhvPShEaSgpLERpKCksbmV3IFR5KDksbykpLGUuZD1hKzEpOihvPShEaSgpLERpKCksbmV3IFR5KDMsbykpLGUuZD1hKSxvLk9tKHIpLG8uTm0obiksTGkoZSl9fXJldHVybiBvfWZ1bmN0aW9uIERJbihlKXt2YXIgdCxuLHIsYSxvO3N3aXRjaChuPWwoUShlLChmdCgpLEx1KSksMjEpLHQ9T3Eodjh0KSxhPWwoUShlLChOdCgpLHA0KSksMzQ2KSxhPT0ocnAoKSxBMikmJkRoKHQsdzh0KSxSdChCdChRKGUsaWRlKSkpP2ZpKHQsKHVvKCkseTApLCh2bygpLGQxZSkpOmZpKHQsKHVvKCksYnUpLCh2bygpLGQxZSkpLFEoZSwoUUgoKSxrTSkpIT1udWxsJiZEaCh0LHk4dCksKFJ0KEJ0KFEoZSxSTWUpKSl8fFJ0KEJ0KFEoZSxOTWUpKSkpJiZ5bCh0LCh1bygpLG1jKSwodm8oKSxPQWUpKSxsKFEoZSxSaCksODgpLmcpe2Nhc2UgMjpjYXNlIDM6Y2FzZSA0OnlsKGZpKHQsKHVvKCkseTApLCh2bygpLFBBZSkpLG1jLE5BZSl9c3dpdGNoKG4uSGMoKEhvKCksZVcpKSYmeWwoZmkoZmkodCwodW8oKSx5MCksKHZvKCksSUFlKSksX3UsTUFlKSxtYyxEQWUpLHFlKFEoZSx6YikpIT09cWUoKE5mKCksQVcpKSYmZmkodCwodW8oKSxidSksKHZvKCksWEFlKSksbi5IYyhuVykmJihmaSh0LCh1bygpLHkwKSwodm8oKSxlTGUpKSxmaSh0LHZnLEpBZSksZmkodCxidSxaQWUpKSxxZShRKGUsbFcpKSE9PXFlKCh6RSgpLFZMKSkmJnFlKFEoZSxicCkpIT09cWUoKGlwKCksSkIpKSYmeWwodCwodW8oKSxtYyksKHZvKCksVkFlKSksUnQoQnQoUShlLEJNZSkpKSYmZmkodCwodW8oKSxidSksKHZvKCksSEFlKSksUnQoQnQoUShlLGVkZSkpKSYmZmkodCwodW8oKSxidSksKHZvKCksdExlKSksVlRuKGUpJiYocWUoUShlLHA0KSk9PT1xZShBMik/cj1sKFEoZSxUQiksMjk5KTpyPWwoUShlLFoxZSksMjk5KSxvPXI9PSh2RSgpLFIxZSk/KHZvKCksUUFlKToodm8oKSxpTGUpLGZpKHQsKHVvKCksX3UpLG8pKSxsKFEoZSxsRGUpLDM4OCkuZyl7Y2FzZSAxOmZpKHQsKHVvKCksX3UpLCh2bygpLG5MZSkpO2JyZWFrO2Nhc2UgMjp5bChmaShmaSh0LCh1bygpLGJ1KSwodm8oKSxTQWUpKSxfdSxfQWUpLG1jLEFBZSl9cmV0dXJuIHFlKFEoZSx5ZykpIT09cWUoKEVkKCksRTIpKSYmZmkodCwodW8oKSxidSksKHZvKCksckxlKSksdH1mdW5jdGlvbiBkd3QoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lO2lmKEh1KGUuYSx0KSl7aWYoVzAobChjcihlLmEsdCksNDkpLG4pKXJldHVybiAxfWVsc2Uga2koZS5hLHQsbmV3IEtzKTtpZihIdShlLmEsbikpe2lmKFcwKGwoY3IoZS5hLG4pLDQ5KSx0KSlyZXR1cm4tMX1lbHNlIGtpKGUuYSxuLG5ldyBLcyk7aWYoSHUoZS5lLHQpKXtpZihXMChsKGNyKGUuZSx0KSw0OSksbikpcmV0dXJuLTF9ZWxzZSBraShlLmUsdCxuZXcgS3MpO2lmKEh1KGUuZSxuKSl7aWYoVzAobChjcihlLmEsbiksNDkpLHQpKXJldHVybiAxfWVsc2Uga2koZS5lLG4sbmV3IEtzKTtpZihlLmM9PShFZCgpLHlkZSl8fCFucyh0LChmdCgpLEtpKSl8fCFucyhuLChmdCgpLEtpKSkpe2ZvcihMPW51bGwsRT1uZXcgRyh0LmopO0UuYTxFLmMuYy5sZW5ndGg7KWc9bChyZShFKSwxMiksZy5lLmMubGVuZ3RoPT0wfHxsKGp0KGcuZSwwKSwxOCkuYy5pLmMhPXQuYyYmKEw9bChqdChnLmUsMCksMTgpLmMpO2Zvcih6PW51bGwsdz1uZXcgRyhuLmopO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwxMiksZy5lLmMubGVuZ3RoPT0wfHxsKGp0KGcuZSwwKSwxOCkuYy5pLmMhPW4uYyYmKHo9bChqdChnLmUsMCksMTgpLmMpO2lmKEwmJnope2lmKEM9TC5pLEI9ei5pLEMmJkM9PUIpe2ZvcihKPW5ldyBHKEMuaik7Si5hPEouYy5jLmxlbmd0aDspe2lmKFY9bChyZShKKSwxMiksVj09TClyZXR1cm4gV0UoZSxuLHQpLC0xO2lmKFY9PXopcmV0dXJuIFdFKGUsdCxuKSwxfXJldHVybiBydShTdWUoZSx0KSxTdWUoZSxuKSl9Zm9yKGZlPWUuZCxUZT0wLE1lPWZlLmxlbmd0aDtUZTxNZTsrK1RlKXtpZih0ZT1mZVtUZV0sdGU9PUMpcmV0dXJuIFdFKGUsbix0KSwtMTtpZih0ZT09QilyZXR1cm4gV0UoZSx0LG4pLDF9fWlmKCFucyh0LChmdCgpLEtpKSl8fCFucyhuLEtpKSlyZXR1cm4gYT1TdWUoZSx0KSxmPVN1ZShlLG4pLGE+Zj9XRShlLHQsbik6V0UoZSxuLHQpLGE8Zj8tMTphPmY/MTowfXJldHVybiByPWwoUSh0LChmdCgpLEtpKSksMTcpLmEsbz1sKFEobixLaSksMTcpLmEscj5vP1dFKGUsdCxuKTpXRShlLG4sdCkscjxvPy0xOnI+bz8xOjB9ZnVuY3Rpb24gS3coZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2lmKG49PW51bGwpcmV0dXJuIG51bGw7aWYoZS5hIT10LmprKCkpdGhyb3cgdWUobmV3IFluKHlUK3QueGUoKSt0MykpO2lmKERlKHQsNDY5KSl7aWYodGU9a1NuKGwodCw2ODUpLG4pLCF0ZSl0aHJvdyB1ZShuZXcgWW4oemZlK24rIicgaXMgbm90IGEgdmFsaWQgZW51bWVyYXRvciBvZiAnIit0LnhlKCkrIiciKSk7cmV0dXJuIHRlfXN3aXRjaChvMigoRWwoKSxpbyksdCkuTmwoKSl7Y2FzZSAyOntuPVR1KG4sITEpO2JyZWFrfWNhc2UgMzp7bj1UdShuLCEwKTticmVha319aWYocj1vMihpbyx0KS5KbCgpLHIpcmV0dXJuIHIuamsoKS53aSgpLnRpKHIsbik7aWYoQj1vMihpbyx0KS5MbCgpLEIpe2Zvcih0ZT1uZXcgYnQsRT1UY2UobiksQz0wLEw9RS5sZW5ndGg7QzxMOysrQyl3PUVbQ10sdnQodGUsQi5qaygpLndpKCkudGkoQix3KSk7cmV0dXJuIHRlfWlmKEo9bzIoaW8sdCkuTWwoKSwhSi5kYygpKXtmb3IoVj1KLktjKCk7Vi5PYigpOyl7ej1sKFYuUGIoKSwxNTYpO3RyeXtpZih0ZT16LmprKCkud2koKS50aSh6LG4pLHRlIT1udWxsKXJldHVybiB0ZX1jYXRjaChmZSl7aWYoZmU9YnMoZmUpLCFEZShmZSw2MykpdGhyb3cgdWUoZmUpfX10aHJvdyB1ZShuZXcgWW4oemZlK24rIicgZG9lcyBub3QgbWF0Y2ggYW55IG1lbWJlciB0eXBlcyBvZiB0aGUgdW5pb24gZGF0YXR5cGUgJyIrdC54ZSgpKyInIikpfWlmKGwodCw4NDcpLm9rKCksYT1qeW4odC5raygpKSwhYSlyZXR1cm4gbnVsbDtpZihhPT1QTCl7Zj0wO3RyeXtmPU9oKG4sbG8sSWkpJlpzfWNhdGNoKGZlKXtpZihmZT1icyhmZSksRGUoZmUsMTMwKSlvPWlWKG4pLGY9b1swXTtlbHNlIHRocm93IHVlKGZlKX1yZXR1cm4gd04oZil9aWYoYT09Y0spe2ZvcihnPTA7ZzxqTS5sZW5ndGg7KytnKXRyeXtyZXR1cm4gZ2V0KGpNW2ddLG4pfWNhdGNoKGZlKXtpZihmZT1icyhmZSksIURlKGZlLDMzKSl0aHJvdyB1ZShmZSl9dGhyb3cgdWUobmV3IFluKHpmZStuKyInIGlzIG5vdCBhIGRhdGUgZm9ybWF0dGVkIHN0cmluZyBvZiB0aGUgZm9ybSB5eXl5LU1NLWRkJ1QnSEg6bW06c3MnLidTU1NaIG9yIGEgdmFsaWQgc3Vic2V0IHRoZXJlb2YiKSl9dGhyb3cgdWUobmV3IFluKHpmZStuKyInIGlzIGludmFsaWQuICIpKX1mdW5jdGlvbiBNbGUoKXtNbGU9VSxYaT1uZXcgQ3cseG4oWGksKEN0KCksZWQpLER1KSx4bihYaSxIZixEdSkseG4oWGksSGYsZmwpLHhuKFhpLHlmLF9sKSx4bihYaSx5ZixEdSkseG4oWGksXzAsRHUpLHhuKFhpLF8wLHFsKSx4bihYaSwkaCxsbCkseG4oWGksJGgsRHUpLHhuKFhpLGhsLEp1KSx4bihYaSxobCxEdSkseG4oWGksaGwscWwpLHhuKFhpLGhsLGxsKSx4bihYaSxKdSxobCkseG4oWGksSnUsZmwpLHhuKFhpLEp1LF9sKSx4bihYaSxKdSxEdSkseG4oWGksQTAsQTApLHhuKFhpLEEwLHFsKSx4bihYaSxBMCxmbCkseG4oWGksemwsemwpLHhuKFhpLHpsLHFsKSx4bihYaSx6bCxfbCkseG4oWGksemgsemgpLHhuKFhpLHpoLGxsKSx4bihYaSx6aCxmbCkseG4oWGkseGYseGYpLHhuKFhpLHhmLGxsKSx4bihYaSx4ZixfbCkseG4oWGkscWwsXzApLHhuKFhpLHFsLGhsKSx4bihYaSxxbCxBMCkseG4oWGkscWwsemwpLHhuKFhpLHFsLER1KSx4bihYaSxxbCxxbCkseG4oWGkscWwsZmwpLHhuKFhpLHFsLF9sKSx4bihYaSxsbCwkaCkseG4oWGksbGwsaGwpLHhuKFhpLGxsLHpoKSx4bihYaSxsbCx4ZikseG4oWGksbGwsbGwpLHhuKFhpLGxsLGZsKSx4bihYaSxsbCxfbCkseG4oWGksbGwsRHUpLHhuKFhpLGZsLEhmKSx4bihYaSxmbCxKdSkseG4oWGksZmwsQTApLHhuKFhpLGZsLHpoKSx4bihYaSxmbCxxbCkseG4oWGksZmwsbGwpLHhuKFhpLGZsLGZsKSx4bihYaSxmbCxEdSkseG4oWGksX2wseWYpLHhuKFhpLF9sLEp1KSx4bihYaSxfbCx6bCkseG4oWGksX2wseGYpLHhuKFhpLF9sLHFsKSx4bihYaSxfbCxsbCkseG4oWGksX2wsX2wpLHhuKFhpLF9sLER1KSx4bihYaSxEdSxlZCkseG4oWGksRHUsSGYpLHhuKFhpLER1LHlmKSx4bihYaSxEdSxfMCkseG4oWGksRHUsJGgpLHhuKFhpLER1LGhsKSx4bihYaSxEdSxKdSkseG4oWGksRHUscWwpLHhuKFhpLER1LGxsKSx4bihYaSxEdSxmbCkseG4oWGksRHUsX2wpLHhuKFhpLER1LER1KX1mdW5jdGlvbiBLa2UoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuO2ZvcihlLmQ9bmV3IGx0KGdzLGdzKSxlLmM9bmV3IGx0KGlhLGlhKSxCPXQuS2MoKTtCLk9iKCk7KWZvcihDPWwoQi5QYigpLDM2KSxNZT1uZXcgRyhDLmEpO01lLmE8TWUuYy5jLmxlbmd0aDspVGU9bChyZShNZSksMTApLGUuZC5hPWIuTWF0aC5taW4oZS5kLmEsVGUubi5hLVRlLmQuYiksZS5kLmI9Yi5NYXRoLm1pbihlLmQuYixUZS5uLmItVGUuZC5kKSxlLmMuYT1iLk1hdGgubWF4KGUuYy5hLFRlLm4uYStUZS5vLmErVGUuZC5jKSxlLmMuYj1iLk1hdGgubWF4KGUuYy5iLFRlLm4uYitUZS5vLmIrVGUuZC5hKTtmb3IoZz1uZXcgUlFlLEw9dC5LYygpO0wuT2IoKTspQz1sKEwuUGIoKSwzNikscj1kSW4oZSxDKSx2dChnLmEsciksci5hPXIuYXwhbChRKHIuYywoZnQoKSxwcCkpLDIxKS5kYygpO2ZvcihlLmI9KE1jZSgpLGNuPW5ldyBxOSxjbi5mPW5ldyByZnQobiksY24uYj15TW4oY24uZixnKSxjbiksSU1uKChWPWUuYixuZXcgTDgsVikpLGUuZT1uZXcgcWEsZS5hPWUuYi5mLmUsZj1uZXcgRyhnLmEpO2YuYTxmLmMuYy5sZW5ndGg7KWZvcihhPWwocmUoZiksODU1KSwkZT1kMm4oZS5iLGEpLGNfbihhLmMsJGUuYSwkZS5iKSx0ZT1uZXcgRyhhLmMuYSk7dGUuYTx0ZS5jLmMubGVuZ3RoOylKPWwocmUodGUpLDEwKSxKLms9PShabigpLFVzKSYmKGZlPWo5ZShlLEoubixsKFEoSiwoZnQoKSxXYykpLDY0KSksT2koWTAoSi5uKSxmZSkpO2ZvcihvPW5ldyBHKGcuYSk7by5hPG8uYy5jLmxlbmd0aDspZm9yKGE9bChyZShvKSw4NTUpLEU9bmV3IEcoTTRuKGEpKTtFLmE8RS5jLmMubGVuZ3RoOylmb3Iodz1sKHJlKEUpLDE4KSxTdD1uZXcgR3oody5hKSxQayhTdCwwLEkxKHcuYykpLHVpKFN0LEkxKHcuZCkpLHo9bnVsbCxvdD1ScihTdCwwKTtvdC5iIT1vdC5kLmM7KXtpZihaZT1sKEJyKG90KSw4KSwheil7ej1aZTtjb250aW51ZX1XNmUoei5hLFplLmEpPyhlLmUuYT1iLk1hdGgubWluKGUuZS5hLHouYSksZS5hLmE9Yi5NYXRoLm1heChlLmEuYSx6LmEpKTpXNmUoei5iLFplLmIpJiYoZS5lLmI9Yi5NYXRoLm1pbihlLmUuYix6LmIpLGUuYS5iPWIuTWF0aC5tYXgoZS5hLmIsei5iKSksej1aZX1IcShlLmUpLE9pKGUuYSxlLmUpfWZ1bmN0aW9uIElJbihlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEU7aWYobj0wLGY9MCxvPXQubGVuZ3RoLGc9bnVsbCxFPW5ldyBTNSxmPG8mJihYbihmLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZik9PTQzKSYmKCsrZiwrK24sZjxvJiYoWG4oZix0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGYpPT00M3x8KFhuKGYsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChmKT09NDUpKSkpdGhyb3cgdWUobmV3IGdkKFl3K3QrJyInKSk7Zm9yKDtmPG8mJihYbihmLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZikhPTQ2KSYmKFhuKGYsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChmKSE9MTAxKSYmKFhuKGYsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChmKSE9NjkpOykrK2Y7aWYoRS5hKz0iIit0Zih0PT1udWxsP3VsOihucih0KSx0KSxuLGYpLGY8byYmKFhuKGYsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChmKT09NDYpKXtmb3IoKytmLG49ZjtmPG8mJihYbihmLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZikhPTEwMSkmJihYbihmLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZikhPTY5KTspKytmO2UuZT1mLW4sRS5hKz0iIit0Zih0PT1udWxsP3VsOihucih0KSx0KSxuLGYpfWVsc2UgZS5lPTA7aWYoZjxvJiYoWG4oZix0Lmxlbmd0aCksdC5jaGFyQ29kZUF0KGYpPT0xMDF8fChYbihmLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZik9PTY5KSkmJigrK2Ysbj1mLGY8byYmKFhuKGYsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChmKT09NDMpJiYoKytmLGY8byYmKFhuKGYsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChmKSE9NDUpJiYrK24pLGc9KEdhKG4sbyx0Lmxlbmd0aCksdC5zdWJzdHIobixvLW4pKSxlLmU9ZS5lLU9oKGcsbG8sSWkpLGUuZSE9dWEoZS5lKSkpdGhyb3cgdWUobmV3IGdkKCJTY2FsZSBvdXQgb2YgcmFuZ2UuIikpO2lmKHc9RS5hLHcubGVuZ3RoPDE2KXtpZihlLmY9KGZfZT09bnVsbCYmKGZfZT1uZXcgUmVnRXhwKCJeWystXT9cXGQqJCIsImkiKSksZl9lLnRlc3Qodyk/cGFyc2VJbnQodywxMCk6TmFOKSxpc05hTihlLmYpKXRocm93IHVlKG5ldyBnZChZdyt0KyciJykpO2UuYT1nOWUoZS5mKX1lbHNlIGc0bihlLG5ldyBvYih3KSk7Zm9yKGUuZD1FLmEubGVuZ3RoLGE9MDthPEUuYS5sZW5ndGgmJihyPWNvKEUuYSxhKSwhKHIhPTQ1JiZyIT00OCkpOysrYSktLWUuZDtlLmQ9PTAmJihlLmQ9MSl9ZnVuY3Rpb24gT0luKGUpe1dyKGUuYixGZixoZShsZSh6dCwxKSxkdCwyLDYsW24zLCJDb25zaXN0ZW50VHJhbnNpZW50Il0pKSxXcihlLmEsRmYsaGUobGUoenQsMSksZHQsMiw2LFtuMywiV2VsbEZvcm1lZFNvdXJjZVVSSSJdKSksV3IoZS5vLEZmLGhlKGxlKHp0LDEpLGR0LDIsNixbbjMsIkludGVyZmFjZUlzQWJzdHJhY3QgQXRNb3N0T25lSUQgVW5pcXVlRmVhdHVyZU5hbWVzIFVuaXF1ZU9wZXJhdGlvblNpZ25hdHVyZXMgTm9DaXJjdWxhclN1cGVyVHlwZXMgV2VsbEZvcm1lZE1hcEVudHJ5Q2xhc3MgQ29uc2lzdGVudFN1cGVyVHlwZXMgRGlzam9pbnRGZWF0dXJlQW5kT3BlcmF0aW9uU2lnbmF0dXJlcyJdKSksV3IoZS5wLEZmLGhlKGxlKHp0LDEpLGR0LDIsNixbbjMsIldlbGxGb3JtZWRJbnN0YW5jZVR5cGVOYW1lIFVuaXF1ZVR5cGVQYXJhbWV0ZXJOYW1lcyJdKSksV3IoZS52LEZmLGhlKGxlKHp0LDEpLGR0LDIsNixbbjMsIlVuaXF1ZUVudW1lcmF0b3JOYW1lcyBVbmlxdWVFbnVtZXJhdG9yTGl0ZXJhbHMiXSkpLFdyKGUuUixGZixoZShsZSh6dCwxKSxkdCwyLDYsW24zLCJXZWxsRm9ybWVkTmFtZSJdKSksV3IoZS5ULEZmLGhlKGxlKHp0LDEpLGR0LDIsNixbbjMsIlVuaXF1ZVBhcmFtZXRlck5hbWVzIFVuaXF1ZVR5cGVQYXJhbWV0ZXJOYW1lcyBOb1JlcGVhdGluZ1ZvaWQiXSkpLFdyKGUuVSxGZixoZShsZSh6dCwxKSxkdCwyLDYsW24zLCJXZWxsRm9ybWVkTnNVUkkgV2VsbEZvcm1lZE5zUHJlZml4IFVuaXF1ZVN1YnBhY2thZ2VOYW1lcyBVbmlxdWVDbGFzc2lmaWVyTmFtZXMgVW5pcXVlTnNVUklzIl0pKSxXcihlLlcsRmYsaGUobGUoenQsMSksZHQsMiw2LFtuMywiQ29uc2lzdGVudE9wcG9zaXRlIFNpbmdsZUNvbnRhaW5lciBDb25zaXN0ZW50S2V5cyBDb25zaXN0ZW50VW5pcXVlIENvbnNpc3RlbnRDb250YWluZXIiXSkpLFdyKGUuYmIsRmYsaGUobGUoenQsMSksZHQsMiw2LFtuMywiVmFsaWREZWZhdWx0VmFsdWVMaXRlcmFsIl0pKSxXcihlLmViLEZmLGhlKGxlKHp0LDEpLGR0LDIsNixbbjMsIlZhbGlkTG93ZXJCb3VuZCBWYWxpZFVwcGVyQm91bmQgQ29uc2lzdGVudEJvdW5kcyBWYWxpZFR5cGUiXSkpLFdyKGUuSCxGZixoZShsZSh6dCwxKSxkdCwyLDYsW24zLCJDb25zaXN0ZW50VHlwZSBDb25zaXN0ZW50Qm91bmRzIENvbnNpc3RlbnRBcmd1bWVudHMiXSkpfWZ1bmN0aW9uIE5JbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW47aWYoIXQuZGMoKSl7aWYoYT1uZXcgYmwsZz1ufHxsKHQuWGIoMCksMTgpLFY9Zy5jLEdBKCksQj1WLmkuaywhKEI9PShabigpLFBzKXx8Qj09QXV8fEI9PVVzfHxCPT1LMSkpdGhyb3cgdWUobmV3IFluKCJUaGUgdGFyZ2V0IG5vZGUgb2YgdGhlIGVkZ2UgbXVzdCBiZSBhIG5vcm1hbCBub2RlIG9yIGEgbm9ydGhTb3V0aFBvcnQuIikpO2ZvcihrbyhhLEljKGhlKGxlKEVhLDEpLGR0LDgsMCxbVi5pLm4sVi5uLFYuYV0pKSksKEN0KCksaGwpLkhjKFYuaikmJih0ZT16ZShHZShRKFYsKGZ0KCkselQpKSkpLEw9bmV3IGx0KEljKGhlKGxlKEVhLDEpLGR0LDgsMCxbVi5pLm4sVi5uLFYuYV0pKS5hLHRlKSxDcyhhLEwsYS5jLmIsYS5jKSksQz1udWxsLHI9ITEsdz10LktjKCk7dy5PYigpOylmPWwody5QYigpLDE4KSxvPWYuYSxvLmIhPTAmJihyPyhFPW1kKE9pKEMsKG1yKG8uYiE9MCksbChvLmEuYS5jLDgpKSksLjUpLENzKGEsRSxhLmMuYixhLmMpLHI9ITEpOnI9ITAsQz1KYSgobXIoby5iIT0wKSxsKG8uYy5iLmMsOCkpKSxLYShhLG8pLENoKG8pKTtKPWcuZCxobC5IYyhKLmopJiYodGU9emUoR2UoUShKLChmdCgpLHpUKSkpKSxMPW5ldyBsdChJYyhoZShsZShFYSwxKSxkdCw4LDAsW0ouaS5uLEoubixKLmFdKSkuYSx0ZSksQ3MoYSxMLGEuYy5iLGEuYykpLGtvKGEsSWMoaGUobGUoRWEsMSksZHQsOCwwLFtKLmkubixKLm4sSi5hXSkpKSxlLmQ9PShTRSgpLF9kZSkmJihmZT0obXIoYS5iIT0wKSxsKGEuYS5hLmMsOCkpLFRlPWwoZmYoYSwxKSw4KSxNZT1uZXcgYm9lKFU3ZShWLmopKSxNZS5hKj01LE1lLmIqPTUsJGU9bWEobmV3IGx0KFRlLmEsVGUuYiksZmUpLFplPW5ldyBsdChob2UoTWUuYSwkZS5hKSxob2UoTWUuYiwkZS5iKSksT2koWmUsZmUpLG90PVJyKGEsMSksek8ob3QsWmUpLFN0PShtcihhLmIhPTApLGwoYS5jLmIuYyw4KSksY249bChmZihhLGEuYi0yKSw4KSxNZT1uZXcgYm9lKFU3ZShKLmopKSxNZS5hKj01LE1lLmIqPTUsJGU9bWEobmV3IGx0KGNuLmEsY24uYiksU3QpLGFuPW5ldyBsdChob2UoTWUuYSwkZS5hKSxob2UoTWUuYiwkZS5iKSksT2koYW4sU3QpLFBrKGEsYS5iLTEsYW4pKSx6PW5ldyBTa2UoYSksS2EoZy5hLExkdCh6KSl9fWZ1bmN0aW9uIFBJbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm4sam4sdXIsb2ksd3MsVmwsbGMsSGgsZjcsUDIsTDAsTTA7aWYoTWU9bChPZSgoIWUuYiYmKGUuYj1uZXcgTG4oX3IsZSw0LDcpKSxlLmIpLDApLDg0KSxaZT1NZS5uaCgpLG90PU1lLm9oKCksJGU9TWUubWgoKS8yLEo9TWUubGgoKS8yLERlKE1lLDE5MykmJihUZT1sKE1lLDEyMyksWmUrPU0xKFRlKS5pLFplKz1NMShUZSkuaSksWmUrPSRlLG90Kz1KLGpuPWwoT2UoKCFlLmImJihlLmI9bmV3IExuKF9yLGUsNCw3KSksZS5iKSwwKSw4NCksb2k9am4ubmgoKSx3cz1qbi5vaCgpLHVyPWpuLm1oKCkvMixTdD1qbi5saCgpLzIsRGUoam4sMTkzKSYmKEJuPWwoam4sMTIzKSxvaSs9TTEoQm4pLmksb2krPU0xKEJuKS5pKSxvaSs9dXIsd3MrPVN0LCghZS5hJiYoZS5hPW5ldyBudChjcyxlLDYsNikpLGUuYSkuaT09MClnPShyYigpLEU9bmV3IHJrLEUpLHFyKCghZS5hJiYoZS5hPW5ldyBudChjcyxlLDYsNikpLGUuYSksZyk7ZWxzZSBpZigoIWUuYSYmKGUuYT1uZXcgbnQoY3MsZSw2LDYpKSxlLmEpLmk+MSlmb3IoVj1uZXcgcTgoKCFlLmEmJihlLmE9bmV3IG50KGNzLGUsNiw2KSksZS5hKSk7Vi5lIT1WLmkuZ2MoKTspakEoVik7Zm9yKGY9bChPZSgoIWUuYSYmKGUuYT1uZXcgbnQoY3MsZSw2LDYpKSxlLmEpLDApLDE2NiksdGU9b2ksb2k+WmUrJGU/dGU9WmUrJGU6b2k8WmUtJGUmJih0ZT1aZS0kZSksZmU9d3Msd3M+b3QrSj9mZT1vdCtKOndzPG90LUomJihmZT1vdC1KKSx0ZT5aZS0kZSYmdGU8WmUrJGUmJmZlPm90LUomJmZlPG90K0omJih0ZT1aZSskZSksb0UoZix0ZSksdUUoZixmZSksY249WmUsWmU+b2krdXI/Y249b2krdXI6WmU8b2ktdXImJihjbj1vaS11ciksYW49b3Qsb3Q+d3MrU3Q/YW49d3MrU3Q6b3Q8d3MtU3QmJihhbj13cy1TdCksY24+b2ktdXImJmNuPG9pK3VyJiZhbj53cy1TdCYmYW48d3MrU3QmJihhbj13cytTdCksYUUoZixjbiksY0UoZixhbiksJHIoKCFmLmEmJihmLmE9bmV3IFlzKHFoLGYsNSkpLGYuYSkpLG89YVUodCw1KSxNZT09am4mJisrbyxIaD1jbi10ZSxMMD1hbi1mZSxWbD1iLk1hdGguc3FydChIaCpIaCtMMCpMMCksTD1WbCouMjAwMDAwMDAyOTgwMjMyMjQsZjc9SGgvKG8rMSksTTA9TDAvKG8rMSksbGM9dGUsUDI9ZmUsQz0wO0M8bztDKyspbGMrPWY3LFAyKz1NMCxCPWxjK0psKHQsMjQpKk1QKkwtTC8yLEI8MD9CPTE6Qj5uJiYoQj1uLTEpLHo9UDIrSmwodCwyNCkqTVAqTC1MLzIsejwwP3o9MTp6PnImJih6PXItMSksYT0ocmIoKSx3PW5ldyBBUyx3KSxkVihhLEIpLGZWKGEseikscXIoKCFmLmEmJihmLmE9bmV3IFlzKHFoLGYsNSkpLGYuYSksYSl9ZnVuY3Rpb24gZ3d0KGUpe3N3KGUsbmV3IFhtKG53KFp2KHR3KGV3KG5ldyB4MSx0aCksIkVMSyBSZWN0YW5nbGUgUGFja2luZyIpLCJBbGdvcml0aG0gZm9yIHBhY2tpbmcgb2YgdW5jb25uZWN0ZWQgYm94ZXMsIGkuZS4gZ3JhcGhzIHdpdGhvdXQgZWRnZXMuIFRoZSBnaXZlbiBvcmRlciBvZiB0aGUgYm94ZXMgaXMgYWx3YXlzIHByZXNlcnZlZCBhbmQgdGhlIG1haW4gcmVhZGluZyBkaXJlY3Rpb24gb2YgdGhlIGJveGVzIGlzIGxlZnQgdG8gcmlnaHQuIFRoZSBhbGdvcml0aG0gaXMgZGl2aWRlZCBpbnRvIHR3byBwaGFzZXMuIE9uZSBwaGFzZSBhcHByb3hpbWF0ZXMgdGhlIHdpZHRoIGluIHdoaWNoIHRoZSByZWN0YW5nbGVzIGNhbiBiZSBwbGFjZWQuIFRoZSBuZXh0IHBoYXNlIHBsYWNlcyB0aGUgcmVjdGFuZ2xlcyBpbiByb3dzIHVzaW5nIHRoZSBwcmV2aW91c2x5IGNhbGN1bGF0ZWQgd2lkdGggYXMgYm91bmRpbmcgd2lkdGggYW5kIGJ1bmRsZXMgcmVjdGFuZ2xlcyB3aXRoIGEgc2ltaWxhciBoZWlnaHQgaW4gYmxvY2tzLiBBIGNvbXBhY3Rpb24gc3RlcCByZWR1Y2VzIHRoZSBzaXplIG9mIHRoZSBkcmF3aW5nLiBGaW5hbGx5LCB0aGUgcmVjdGFuZ2xlcyBhcmUgZXhwYW5kZWQgdG8gZmlsbCB0aGVpciBib3VuZGluZyBib3ggYW5kIGVsaW1pbmF0ZSBlbXB0eSB1bnVzZWQgc3BhY2VzLiIpLG5ldyBjOCkpKSxndChlLHRoLE94LDEuMyksZ3QoZSx0aCxoVCwoSG4oKSwhMSkpLGd0KGUsdGgsWHcsaU9lKSxndChlLHRoLEp5LDE1KSxndChlLHRoLFNHLEl0KERDdCkpLGd0KGUsdGgseDYsSXQoTkN0KSksZ3QoZSx0aCxQeCxJdChCQ3QpKSxndChlLHRoLE54LEl0KEZDdCkpLGd0KGUsdGgsZlQsSXQoT0N0KSksZ3QoZSx0aCxmTCxJdChsZ2UpKSxndChlLHRoLGRULEl0KFJDdCkpLGd0KGUsdGgsakNlLEl0KGNPZSkpLGd0KGUsdGgsJENlLEl0KG9PZSkpLGd0KGUsdGgsUkNlLEl0KGZnZSkpLGd0KGUsdGgsRkNlLEl0KHVPZSkpLGd0KGUsdGgsekNlLEl0KHJPZSkpLGd0KGUsdGgscUNlLEl0KGhnZSkpLGd0KGUsdGgsSENlLEl0KG5PZSkpLGd0KGUsdGgsVkNlLEl0KGFPZSkpLGd0KGUsdGgsaEwsSXQodE9lKSksZ3QoZSx0aCxBRyxJdChJQ3QpKSxndChlLHRoLFBDZSxJdChqQikpLGd0KGUsdGgsTkNlLEl0KGVPZSkpLGd0KGUsdGgsQkNlLEl0KCRCKSksZ3QoZSx0aCxPQ2UsSXQoc09lKSl9ZnVuY3Rpb24gRGxlKGUsdCl7YmxlKCk7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdCxjbixhbixCbixqbix1cixvaTtpZihjbj1lLmUsVj1lLmQsYT1lLmEsY249PTApc3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4iMCI7Y2FzZSAxOnJldHVybiBzVDtjYXNlIDI6cmV0dXJuIjAuMDAiO2Nhc2UgMzpyZXR1cm4iMC4wMDAiO2Nhc2UgNDpyZXR1cm4iMC4wMDAwIjtjYXNlIDU6cmV0dXJuIjAuMDAwMDAiO2Nhc2UgNjpyZXR1cm4iMC4wMDAwMDAiO2RlZmF1bHQ6cmV0dXJuIG90PW5ldyB0Yix0PDA/b3QuYSs9IjBFKyI6b3QuYSs9IjBFIixvdC5hKz0tdCxvdC5hfWlmKE1lPVYqMTArMSs3LCRlPVdlKGtmLEFkLDI4LE1lKzEsMTUsMSksbj1NZSxWPT0xKWlmKGc9YVswXSxnPDApe29pPXZhKGcsVm8pO2RvIEo9b2ksb2k9S04ob2ksMTApLCRlWy0tbl09NDgrWXIoRGYoSixtbyhvaSwxMCkpKSZaczt3aGlsZShpdShvaSwwKSE9MCl9ZWxzZXtvaT1nO2RvIEo9b2ksb2k9b2kvMTB8MCwkZVstLW5dPTQ4KyhKLW9pKjEwKSZaczt3aGlsZShvaSE9MCl9ZWxzZXtCbj1XZShWcixkaSwyOCxWLDE1LDEpLHVyPVYscHUoYSwwLEJuLDAsdXIpO2U6Zm9yKDs7KXtmb3IoU3Q9MCxFPXVyLTE7RT49MDtFLS0pam49Ym8obDAoU3QsMzIpLHZhKEJuW0VdLFZvKSksZmU9eXhuKGpuKSxCbltFXT1ZcihmZSksU3Q9WXIoYncoZmUsMzIpKTtUZT1ZcihTdCksdGU9bjtkbyAkZVstLW5dPTQ4K1RlJTEwJlpzO3doaWxlKChUZT1UZS8xMHwwKSE9MCYmbiE9MCk7Zm9yKHI9OS10ZStuLHc9MDt3PHImJm4+MDt3KyspJGVbLS1uXT00ODtmb3IoTD11ci0xO0JuW0xdPT0wO0wtLSlpZihMPT0wKWJyZWFrIGU7dXI9TCsxfWZvcig7JGVbbl09PTQ4OykrK259aWYoej1jbjwwLGY9TWUtbi10LTEsdD09MClyZXR1cm4geiYmKCRlWy0tbl09NDUpLElmKCRlLG4sTWUtbik7aWYodD4wJiZmPj0tNil7aWYoZj49MCl7Zm9yKEM9bitmLEI9TWUtMTtCPj1DO0ItLSkkZVtCKzFdPSRlW0JdO3JldHVybiAkZVsrK0NdPTQ2LHomJigkZVstLW5dPTQ1KSxJZigkZSxuLE1lLW4rMSl9Zm9yKEw9MjtMPC1mKzE7TCsrKSRlWy0tbl09NDg7cmV0dXJuICRlWy0tbl09NDYsJGVbLS1uXT00OCx6JiYoJGVbLS1uXT00NSksSWYoJGUsbixNZS1uKX1yZXR1cm4gYW49bisxLG89TWUsWmU9bmV3IFM1LHomJihaZS5hKz0iLSIpLG8tYW4+PTE/KGhiKFplLCRlW25dKSxaZS5hKz0iLiIsWmUuYSs9SWYoJGUsbisxLE1lLW4tMSkpOlplLmErPUlmKCRlLG4sTWUtbiksWmUuYSs9IkUiLGY+MCYmKFplLmErPSIrIiksWmUuYSs9IiIrZixaZS5hfWZ1bmN0aW9uIHB3dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3Q7c3dpdGNoKGUuYz10LGUuZz1uZXcgUHIsbj0oYXcoKSxuZXcgSnYoZS5jKSkscj1uZXcgZV8obiksUzhlKHIpLE1lPWVpKGF0KGUuYywoWU4oKSxBT2UpKSksdz1sKGF0KGUuYyxrZ2UpLDMyNCksWmU9bChhdChlLmMsRWdlKSw0MzcpLGY9bChhdChlLmMsQ09lKSw0OTApLCRlPWwoYXQoZS5jLHhnZSksNDM4KSxlLmo9emUoR2UoYXQoZS5jLEpDdCkpKSxnPWUuYSx3Lmcpe2Nhc2UgMDpnPWUuYTticmVhaztjYXNlIDE6Zz1lLmI7YnJlYWs7Y2FzZSAyOmc9ZS5pO2JyZWFrO2Nhc2UgMzpnPWUuZTticmVhaztjYXNlIDQ6Zz1lLmY7YnJlYWs7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgWW4oRkcrKHcuZiE9bnVsbD93LmY6IiIrdy5nKSkpfWlmKGUuZD1uZXcgY290KGcsWmUsZikscnQoZS5kLChwRSgpLGpMKSxCdChhdChlLmMsWEN0KSkpLGUuZC5jPVJ0KEJ0KGF0KGUuYyxTT2UpKSksQUgoZS5jKS5pPT0wKXJldHVybiBlLmQ7Zm9yKEw9bmV3IG9yKEFIKGUuYykpO0wuZSE9TC5pLmdjKCk7KXtmb3IoQz1sKGdyKEwpLDI3KSx6PUMuZy8yLEI9Qy5mLzIsb3Q9bmV3IGx0KEMuaSt6LEMuaitCKTtIdShlLmcsb3QpOylkdyhvdCwoYi5NYXRoLnJhbmRvbSgpLS41KSpEZCwoYi5NYXRoLnJhbmRvbSgpLS41KSpEZCk7Sj1sKGF0KEMsKHBpKCksdEMpKSwxNDApLHRlPW5ldyBrb3Qob3QsbmV3IGVmKG90LmEtei1lLmovMi1KLmIsb3QuYi1CLWUuai8yLUouZCxDLmcrZS5qKyhKLmIrSi5jKSxDLmYrZS5qKyhKLmQrSi5hKSkpLHZ0KGUuZC5pLHRlKSxraShlLmcsb3QsbmV3IGNhKHRlLEMpKX1zd2l0Y2goJGUuZyl7Y2FzZSAwOmlmKE1lPT1udWxsKWUuZC5kPWwoanQoZS5kLmksMCksNjgpO2Vsc2UgZm9yKFRlPW5ldyBHKGUuZC5pKTtUZS5hPFRlLmMuYy5sZW5ndGg7KXRlPWwocmUoVGUpLDY4KSxWPWwobChjcihlLmcsdGUuYSksNDIpLmIsMjcpLmpoKCksViE9bnVsbCYmdm4oVixNZSkmJihlLmQuZD10ZSk7YnJlYWs7Y2FzZSAxOmZvcihhPW5ldyBsdChlLmMuZyxlLmMuZiksYS5hKj0uNSxhLmIqPS41LGR3KGEsZS5jLmksZS5jLmopLG89Z3MsZmU9bmV3IEcoZS5kLmkpO2ZlLmE8ZmUuYy5jLmxlbmd0aDspdGU9bChyZShmZSksNjgpLEU9cGIodGUuYSxhKSxFPG8mJihvPUUsZS5kLmQ9dGUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgdWUobmV3IFluKEZHKygkZS5mIT1udWxsPyRlLmY6IiIrJGUuZykpKX1yZXR1cm4gZS5kfWZ1bmN0aW9uIEJJbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGU7Zm9yKEI9MCxhPW5ldyBvcigoIXQuYSYmKHQuYT1uZXcgbnQoQWksdCwxMCwxMSkpLHQuYSkpO2EuZSE9YS5pLmdjKCk7KXI9bChncihhKSwyNyksUnQoQnQoYXQociwoTnQoKSxtdikpKSl8fChDPWRzKHIpLChxZShhdChDLHlnKSkhPT1xZSgoRWQoKSxFMikpfHxxZShhdChDLGR2KSk9PT1xZSgobDIoKSxCVCkpfHxxZShhdChDLGR2KSk9PT1xZSgobDIoKSxQVCkpfHxSdChCdChhdChDLGYzKSkpfHxxZShhdChDLGc0KSkhPT1xZSgoS20oKSxjNCkpfHxxZShhdChDLHpiKSk9PT1xZSgoTmYoKSx2MykpfHxxZShhdChDLHpiKSk9PT1xZSgoTmYoKSx4NCkpfHxxZShhdChDLHB2KSk9PT1xZSgocDIoKSxXVCkpfHxxZShhdChDLHB2KSk9PT1xZSgocDIoKSxZVCkpKSYmIVJ0KEJ0KGF0KHIsZlcpKSkmJihIaShyLChmdCgpLEtpKSxwdChCKSksKytCKSxjd3QoZSxyLG4pKTtmb3IoQj0wLEU9bmV3IG9yKCghdC5iJiYodC5iPW5ldyBudChqcyx0LDEyLDMpKSx0LmIpKTtFLmUhPUUuaS5nYygpOylnPWwoZ3IoRSksNzQpLChxZShhdCh0LChOdCgpLHlnKSkpIT09cWUoKEVkKCksRTIpKXx8cWUoYXQodCxkdikpPT09cWUoKGwyKCksQlQpKXx8cWUoYXQodCxkdikpPT09cWUoKGwyKCksUFQpKXx8UnQoQnQoYXQodCxmMykpKXx8cWUoYXQodCxnNCkpIT09cWUoKEttKCksYzQpKXx8cWUoYXQodCx6YikpPT09cWUoKE5mKCksdjMpKXx8cWUoYXQodCx6YikpPT09cWUoKE5mKCkseDQpKXx8cWUoYXQodCxwdikpPT09cWUoKHAyKCksV1QpKXx8cWUoYXQodCxwdikpPT09cWUoKHAyKCksWVQpKSkmJihIaShnLChmdCgpLEtpKSxwdChCKSksKytCKSxKPWNnKGcpLHRlPUViKGcpLEw9UnQoQnQoYXQoSixiNCkpKSxWPSFSdChCdChhdChnLG12KSkpLHo9TCYmcXcoZykmJlJ0KEJ0KGF0KGcsZ3YpKSksbz1kcyhKKT09dCYmZHMoSik9PWRzKHRlKSxmPShkcyhKKT09dCYmdGU9PXQpXihkcyh0ZSk9PXQmJko9PXQpLFYmJiF6JiYoZnx8bykmJldrZShlLGcsdCxuKTtpZihkcyh0KSlmb3Iodz1uZXcgb3IoUGF0KGRzKHQpKSk7dy5lIT13LmkuZ2MoKTspZz1sKGdyKHcpLDc0KSxKPWNnKGcpLEo9PXQmJnF3KGcpJiYoej1SdChCdChhdChKLChOdCgpLGI0KSkpKSYmUnQoQnQoYXQoZyxndikpKSx6JiZXa2UoZSxnLHQsbikpfWZ1bmN0aW9uIEZJbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm4sam4sdXIsb2ksd3MsVmwsbGMsSGg7Zm9yKG4uVWcoIkdyZWVkeSBjeWNsZSByZW1vdmFsIiwxKSxNZT10LmEsSGg9TWUuYy5sZW5ndGgsZS5hPVdlKFZyLGRpLDI4LEhoLDE1LDEpLGUuYz1XZShWcixkaSwyOCxIaCwxNSwxKSxlLmI9V2UoVnIsZGksMjgsSGgsMTUsMSksRT0wLGZlPW5ldyBHKE1lKTtmZS5hPGZlLmMuYy5sZW5ndGg7KXtmb3IoSj1sKHJlKGZlKSwxMCksSi5wPUUsYW49bmV3IEcoSi5qKTthbi5hPGFuLmMuYy5sZW5ndGg7KXtmb3Iob3Q9bChyZShhbiksMTIpLGc9bmV3IEcob3QuZSk7Zy5hPGcuYy5jLmxlbmd0aDspcj1sKHJlKGcpLDE4KSxyLmMuaSE9SiYmKHVyPWwoUShyLChOdCgpLFVUKSksMTcpLmEsZS5hW0VdKz11cj4wP3VyKzE6MSk7Zm9yKGY9bmV3IEcob3QuZyk7Zi5hPGYuYy5jLmxlbmd0aDspcj1sKHJlKGYpLDE4KSxyLmQuaSE9SiYmKHVyPWwoUShyLChOdCgpLFVUKSksMTcpLmEsZS5jW0VdKz11cj4wP3VyKzE6MSl9ZS5jW0VdPT0wP3VpKGUuZSxKKTplLmFbRV09PTAmJnVpKGUuZixKKSwrK0V9Zm9yKFY9LTEsej0xLEw9bmV3IGJ0LGUuZD1sKFEodCwoZnQoKSxYeCkpLDIzNCk7SGg+MDspe2Zvcig7ZS5lLmIhPTA7KXdzPWwoa2FlKGUuZSksMTApLGUuYlt3cy5wXT1WLS0scGtlKGUsd3MpLC0tSGg7Zm9yKDtlLmYuYiE9MDspVmw9bChrYWUoZS5mKSwxMCksZS5iW1ZsLnBdPXorKyxwa2UoZSxWbCksLS1IaDtpZihIaD4wKXtmb3IoQj1sbyxUZT1uZXcgRyhNZSk7VGUuYTxUZS5jLmMubGVuZ3RoOylKPWwocmUoVGUpLDEwKSxlLmJbSi5wXT09MCYmKCRlPWUuY1tKLnBdLWUuYVtKLnBdLCRlPj1CJiYoJGU+QiYmKEwuYy5sZW5ndGg9MCxCPSRlKSwkbihMLmMsSikpKTtDPWUuc2coTCksZS5iW0MucF09eisrLHBrZShlLEMpLC0tSGh9fWZvcihvaT1NZS5jLmxlbmd0aCsxLEU9MDtFPE1lLmMubGVuZ3RoO0UrKyllLmJbRV08MCYmKGUuYltFXSs9b2kpO2Zvcih0ZT1uZXcgRyhNZSk7dGUuYTx0ZS5jLmMubGVuZ3RoOylmb3IoSj1sKHJlKHRlKSwxMCksam49VGN0KEouaiksU3Q9am4sY249MCxCbj1TdC5sZW5ndGg7Y248Qm47Kytjbilmb3Iob3Q9U3RbY25dLFplPWtkKG90LmcpLGE9WmUsbz0wLHc9YS5sZW5ndGg7bzx3OysrbylyPWFbb10sbGM9ci5kLmkucCxlLmJbSi5wXT5lLmJbbGNdJiYoVXcociwhMCkscnQodCx5QiwoSG4oKSwhMCkpKTtlLmE9bnVsbCxlLmM9bnVsbCxlLmI9bnVsbCxDaChlLmYpLENoKGUuZSksbi5WZygpfWZ1bmN0aW9uIGJ3dChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3Q7Zm9yKFplPWwoT2UoKCFlLmEmJihlLmE9bmV3IG50KGNzLGUsNiw2KSksZS5hKSwwKSwxNjYpLEM9bmV3IGJsLCRlPW5ldyBQcixvdD1DbXQoWmUpLGp1KCRlLmYsWmUsb3QpLEI9bmV3IFByLHI9bmV3IG9zLFY9cmcoTGgoaGUobGUoRmgsMSksUm4sMjAsMCxbKCF0LmQmJih0LmQ9bmV3IExuKGpzLHQsOCw1KSksdC5kKSwoIXQuZSYmKHQuZT1uZXcgTG4oanMsdCw3LDQpKSx0LmUpXSkpKTtqcihWKTspe2lmKHo9bCh4cihWKSw3NCksKCFlLmEmJihlLmE9bmV3IG50KGNzLGUsNiw2KSksZS5hKS5pIT0xKXRocm93IHVlKG5ldyBZbihuNHQrKCFlLmEmJihlLmE9bmV3IG50KGNzLGUsNiw2KSksZS5hKS5pKSk7eiE9ZSYmKHRlPWwoT2UoKCF6LmEmJih6LmE9bmV3IG50KGNzLHosNiw2KSksei5hKSwwKSwxNjYpLENzKHIsdGUsci5jLmIsci5jKSxKPWwoaGMoem8oJGUuZix0ZSkpLDEzKSxKfHwoSj1DbXQodGUpLGp1KCRlLmYsdGUsSikpLEw9bj9tYShuZXcgRW8obChqdChvdCxvdC5jLmxlbmd0aC0xKSw4KSksbChqdChKLEouYy5sZW5ndGgtMSksOCkpOm1hKG5ldyBFbygoU24oMCxvdC5jLmxlbmd0aCksbChvdC5jWzBdLDgpKSksKFNuKDAsSi5jLmxlbmd0aCksbChKLmNbMF0sOCkpKSxqdShCLmYsdGUsTCkpfWlmKHIuYiE9MClmb3IoZmU9bChqdChvdCxuP290LmMubGVuZ3RoLTE6MCksOCksRT0xO0U8b3QuYy5sZW5ndGg7RSsrKXtmb3IoVGU9bChqdChvdCxuP290LmMubGVuZ3RoLTEtRTpFKSw4KSxhPVJyKHIsMCk7YS5iIT1hLmQuYzspdGU9bChCcihhKSwxNjYpLEo9bChoYyh6bygkZS5mLHRlKSksMTMpLEouYy5sZW5ndGg8PUU/WW9lKGEpOihNZT1PaShuZXcgRW8obChqdChKLG4/Si5jLmxlbmd0aC0xLUU6RSksOCkpLGwoaGMoem8oQi5mLHRlKSksOCkpLChUZS5hIT1NZS5hfHxUZS5iIT1NZS5iKSYmKG89VGUuYS1mZS5hLGc9VGUuYi1mZS5iLGY9TWUuYS1mZS5hLHc9TWUuYi1mZS5iLGYqZz09dypvJiYobz09MHx8aXNOYU4obyk/bzpvPDA/LTE6MSk9PShmPT0wfHxpc05hTihmKT9mOmY8MD8tMToxKSYmKGc9PTB8fGlzTmFOKGcpP2c6ZzwwPy0xOjEpPT0odz09MHx8aXNOYU4odyk/dzp3PDA/LTE6MSk/KGIuTWF0aC5hYnMobyk8Yi5NYXRoLmFicyhmKXx8Yi5NYXRoLmFicyhnKTxiLk1hdGguYWJzKHcpKSYmQ3MoQyxUZSxDLmMuYixDLmMpOkU+MSYmQ3MoQyxmZSxDLmMuYixDLmMpLFlvZShhKSkpO2ZlPVRlfXJldHVybiBDfWZ1bmN0aW9uIG13dChlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm47Zm9yKG4uVWcobXl0LDEpLEJuPWwoeWMoRmkobmV3IGJuKG51bGwsbmV3IGtuKHQsMTYpKSxuZXcgb25lKSxQbChuZXcgenIsbmV3IGh0LG5ldyBGbixoZShsZShvYywxKSxpdCwxMDgsMCxbKEZsKCksRWMpXSkpKSwxNSksQz1sKHljKEZpKG5ldyBibihudWxsLG5ldyBrbih0LDE2KSksbmV3IHZYZSh0KSksUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsW0VjXSkpKSwxNSksVj1sKHljKEZpKG5ldyBibihudWxsLG5ldyBrbih0LDE2KSksbmV3IG1YZSh0KSksUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsW0VjXSkpKSwxNSksSj1XZShQVyxJRyw0MCx0LmdjKCksMCwxKSxmPTA7ZjxDLmdjKCk7ZisrKWE9bChDLlhiKGYpLDQwKSxhbj1sKFEoYSwoSGMoKSxXNikpLDE3KS5hLGFuPj0wJiZhbjxDLmdjKCkmJiFKW2FuXSYmKEpbYW5dPWEsQy5nZChmKSwtLWYpO2ZvcihnPTA7ZzxDLmdjKCk7ZysrKWZvcihhPWwoQy5YYihnKSw0MCksYW49bChRKGEsKEhjKCksVzYpKSwxNykuYSxCPTA7O0IrKyl7aWYoej1hbitCLHo8Si5sZW5ndGgmJno+PTAmJiFKW3pdKXtKW3pdPWEsQy5nZChnKSwtLWc7YnJlYWt9aWYoej1hbi1CLHo8Si5sZW5ndGgmJno+PTAmJiFKW3pdKXtKW3pdPWEsQy5nZChnKSwtLWc7YnJlYWt9fWZvcihWLmpkKG5ldyBjbmUpLHc9Si5sZW5ndGgtMTt3Pj0wO3ctLSkhSlt3XSYmIVYuZGMoKSYmKEpbd109bChWLlhiKDApLDQwKSxWLmdkKDApKTtmb3IoRT0wO0U8Si5sZW5ndGg7RSsrKSFKW0VdJiYhQm4uZGMoKSYmKEpbRV09bChCbi5YYigwKSw0MCksQm4uZ2QoMCkpO2ZvcihvPTA7bzxKLmxlbmd0aDtvKyspcnQoSltvXSwoUWkoKSxwTSkscHQobykpO2ZvcihMPWwoQzVuKEZpKG5ldyBibihudWxsLG5ldyBrbih0LDE2KSksbmV3IHVuZSkpLDUzNCksb3Q9TCxTdD0wLGNuPW90Lmxlbmd0aDtTdDxjbjsrK1N0KXtmb3IoWmU9b3RbU3RdLHI9cGNlKFplKSxtd3QoZSxyLG4uZWgoMS9MLmxlbmd0aHwwKSksQ24oKSwkbShyLG5ldyBOaWUoKFFpKCkscE0pKSksdGU9bmV3IG9zLCRlPVJyKHIsMCk7JGUuYiE9JGUuZC5jOylmb3IoTWU9bChCcigkZSksNDApLFRlPVJyKFplLmQsMCk7VGUuYiE9VGUuZC5jOylmZT1sKEJyKFRlKSw2NSksZmUuYz09TWUmJkNzKHRlLGZlLHRlLmMuYix0ZS5jKTtDaChaZS5kKSxLYShaZS5kLHRlKX1uLlZnKCl9ZnVuY3Rpb24gdnd0KGUsdCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZTtmb3Iocj1uZXcgYnQsZz1uZXcgYnQsdGU9dC8yLHo9ZS5nYygpLGE9bChlLlhiKDApLDgpLGZlPWwoZS5YYigxKSw4KSxWPUt1ZShhLmEsYS5iLGZlLmEsZmUuYix0ZSksdnQociwoU24oMCxWLmMubGVuZ3RoKSxsKFYuY1swXSw4KSkpLHZ0KGcsKFNuKDEsVi5jLmxlbmd0aCksbChWLmNbMV0sOCkpKSxFPTI7RTx6O0UrKylKPWEsYT1mZSxmZT1sKGUuWGIoRSksOCksVj1LdWUoYS5hLGEuYixKLmEsSi5iLHRlKSx2dChyLChTbigxLFYuYy5sZW5ndGgpLGwoVi5jWzFdLDgpKSksdnQoZywoU24oMCxWLmMubGVuZ3RoKSxsKFYuY1swXSw4KSkpLFY9S3VlKGEuYSxhLmIsZmUuYSxmZS5iLHRlKSx2dChyLChTbigwLFYuYy5sZW5ndGgpLGwoVi5jWzBdLDgpKSksdnQoZywoU24oMSxWLmMubGVuZ3RoKSxsKFYuY1sxXSw4KSkpO2ZvcihWPUt1ZShmZS5hLGZlLmIsYS5hLGEuYix0ZSksdnQociwoU24oMSxWLmMubGVuZ3RoKSxsKFYuY1sxXSw4KSkpLHZ0KGcsKFNuKDAsVi5jLmxlbmd0aCksbChWLmNbMF0sOCkpKSxuPW5ldyBibCxmPW5ldyBidCx1aShuLChTbigwLHIuYy5sZW5ndGgpLGwoci5jWzBdLDgpKSksQz0xO0M8ci5jLmxlbmd0aC0yO0MrPTIpbz0oU24oQyxyLmMubGVuZ3RoKSxsKHIuY1tDXSw4KSksQj1FcHQoKFNuKEMtMSxyLmMubGVuZ3RoKSxsKHIuY1tDLTFdLDgpKSxvLChTbihDKzEsci5jLmxlbmd0aCksbChyLmNbQysxXSw4KSksKFNuKEMrMixyLmMubGVuZ3RoKSxsKHIuY1tDKzJdLDgpKSksIWlzRmluaXRlKEIuYSl8fCFpc0Zpbml0ZShCLmIpP0NzKG4sbyxuLmMuYixuLmMpOkNzKG4sQixuLmMuYixuLmMpO2Zvcih1aShuLGwoanQocixyLmMubGVuZ3RoLTEpLDgpKSx2dChmLChTbigwLGcuYy5sZW5ndGgpLGwoZy5jWzBdLDgpKSksTD0xO0w8Zy5jLmxlbmd0aC0yO0wrPTIpbz0oU24oTCxnLmMubGVuZ3RoKSxsKGcuY1tMXSw4KSksQj1FcHQoKFNuKEwtMSxnLmMubGVuZ3RoKSxsKGcuY1tMLTFdLDgpKSxvLChTbihMKzEsZy5jLmxlbmd0aCksbChnLmNbTCsxXSw4KSksKFNuKEwrMixnLmMubGVuZ3RoKSxsKGcuY1tMKzJdLDgpKSksIWlzRmluaXRlKEIuYSl8fCFpc0Zpbml0ZShCLmIpPyRuKGYuYyxvKTokbihmLmMsQik7Zm9yKHZ0KGYsbChqdChnLGcuYy5sZW5ndGgtMSksOCkpLHc9Zi5jLmxlbmd0aC0xO3c+PTA7dy0tKXVpKG4sKFNuKHcsZi5jLmxlbmd0aCksbChmLmNbd10sOCkpKTtyZXR1cm4gbn1mdW5jdGlvbiB3d3QoZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlO2ZvcihNZT16ZShHZShhdCh0LCh1ZygpLFQ0KSkpKSx6PXplKEdlKGF0KHQsbU0pKSksQj16ZShHZShhdCh0LFVXKSkpLHY3ZSgoIXQuYSYmKHQuYT1uZXcgbnQoQWksdCwxMCwxMSkpLHQuYSkpLGZlPXV2dCgoIXQuYSYmKHQuYT1uZXcgbnQoQWksdCwxMCwxMSkpLHQuYSksTWUsZS5iKSx0ZT0wO3RlPGZlLmMubGVuZ3RoO3RlKyspaWYodz0oU24odGUsZmUuYy5sZW5ndGgpLGwoZmUuY1t0ZV0sMTg2KSksdGUhPTAmJihWPShTbih0ZS0xLGZlLmMubGVuZ3RoKSxsKGZlLmNbdGUtMV0sMTg2KSksejB0KHcsVi5mK1YuYitlLmIpKSxKPSRJbih0ZSxmZSxNZSxlLmIsUnQoQnQoYXQodCwoejEoKSxoZ2UpKSkpKSxSdChCdChKLmIpKSl7Zm9yKG89bmV3IEcody5hKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMTcyKSxhLmM9ITEsYS5rPSExLFptdChhKTt3LmQ9bmV3IGJ0LHcuZT1NZSwtLXRlfWVsc2UgaWYocjhuKGUsdyksdGUrMTxmZS5jLmxlbmd0aCYmKGUuZT1iLk1hdGgubWF4KHcuZStlLmIrbChqdCgoU24odGUrMSxmZS5jLmxlbmd0aCksbChmZS5jW3RlKzFdLDE4NikpLmEsMCksMTcyKS5yLU1lLGUuYyksZS5mPWIuTWF0aC5taW4ody5lK2UuYitsKGp0KChTbih0ZSsxLGZlLmMubGVuZ3RoKSxsKGZlLmNbdGUrMV0sMTg2KSkuYSwwKSwxNzIpLnItTWUsZS5kKSx3LmQuYy5sZW5ndGghPTAmJihlLmM9Yi5NYXRoLm1heChlLmMsbChqdCh3LmQsdy5kLmMubGVuZ3RoLTEpLDMxNSkuZCsody5kLmMubGVuZ3RoPD0xPzA6ZS5iKSksZS5kPWIuTWF0aC5taW4oZS5jLGwoanQody5kLHcuZC5jLmxlbmd0aC0xKSwzMTUpLmQrKHcuZC5jLmxlbmd0aDw9MT8wOmUuYikpKSksZmUuYy5sZW5ndGg9PTEpZm9yKEw9bChqdCh3LmQsdy5kLmMubGVuZ3RoLTEpLDMxNSksQz1sKGp0KEwuYSxMLmEuYy5sZW5ndGgtMSksMTcyKSxnPW5ldyBHKEMubik7Zy5hPGcuYy5jLmxlbmd0aDspZj1sKHJlKGcpLDIwOSksZS5jPWIuTWF0aC5tYXgoZS5jLEMuci1mLmQpLGUuZD1iLk1hdGgubWluKGUuZCxDLnItZi5kKSxlLmU9Yi5NYXRoLm1heChlLmUsZi5kK2UuYiksZS5mPWIuTWF0aC5taW4oZS5mLGYuZCtlLmIpO3JldHVybiBUZT1zZ3QoZmUsZS5iKSwkZT1iLk1hdGgubWF4KFRlLmEsei0obi5iK24uYykpLEU9Yi5NYXRoLm1heChUZS5iLEItKG4uZCtuLmEpKSxyPUUtVGUuYixIaSh0LGJNLHIpLEhpKHQsR1csZmUpLG5ldyB6NGUoZS5hLCRlLFRlLmIrciwoVkEoKSx6QikpfWZ1bmN0aW9uIFJJbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm4sam4sdXI7aWYoU3Q9bChRKGUsKE50KCksTXMpKSwxMDEpLFN0IT0oUmEoKSxaMSkmJlN0IT1XYil7Zm9yKFY9ZS5iLHo9Vi5jLmxlbmd0aCxDPW5ldyBCdSgoTWgoeisyLEZsZSksY1YoYm8oYm8oNSx6KzIpLCh6KzIpLzEwfDApKSkpLEo9bmV3IEJ1KChNaCh6KzIsRmxlKSxjVihibyhibyg1LHorMiksKHorMikvMTB8MCkpKSksdnQoQyxuZXcgUHIpLHZ0KEMsbmV3IFByKSx2dChKLG5ldyBidCksdnQoSixuZXcgYnQpLG90PW5ldyBidCx0PTA7dDx6O3QrKylmb3Iobj0oU24odCxWLmMubGVuZ3RoKSxsKFYuY1t0XSwzMCkpLGNuPShTbih0LEMuYy5sZW5ndGgpLGwoQy5jW3RdLDg1KSksdGU9bmV3IFByLCRuKEMuYyx0ZSksQm49KFNuKHQsSi5jLmxlbmd0aCksbChKLmNbdF0sMTUpKSxUZT1uZXcgYnQsJG4oSi5jLFRlKSxhPW5ldyBHKG4uYSk7YS5hPGEuYy5jLmxlbmd0aDspe2lmKHI9bChyZShhKSwxMCksbDhlKHIpKXskbihvdC5jLHIpO2NvbnRpbnVlfWZvcihFPW5ldyBocihkcihrYShyKS5hLktjKCksbmV3IGopKTtqcihFKTspZz1sKHhyKEUpLDE4KSxqbj1nLmMuaSxsOGUoam4pJiYoYW49bChjbi54YyhRKGpuLChmdCgpLHppKSkpLDEwKSxhbnx8KGFuPWpwdChlLGpuKSxjbi56YyhRKGpuLHppKSxhbiksQm4uRmMoYW4pKSxwbyhnLGwoanQoYW4uaiwxKSwxMikpKTtmb3Iodz1uZXcgaHIoZHIocXMocikuYS5LYygpLG5ldyBqKSk7anIodyk7KWc9bCh4cih3KSwxOCksdXI9Zy5kLmksbDhlKHVyKSYmKGZlPWwoY3IodGUsUSh1ciwoZnQoKSx6aSkpKSwxMCksZmV8fChmZT1qcHQoZSx1ciksa2kodGUsUSh1cix6aSksZmUpLCRuKFRlLmMsZmUpKSxGYShnLGwoanQoZmUuaiwwKSwxMikpKX1mb3IoTD0wO0w8Si5jLmxlbmd0aDtMKyspaWYoTWU9KFNuKEwsSi5jLmxlbmd0aCksbChKLmNbTF0sMTUpKSwhTWUuZGMoKSlmb3IoQj1udWxsLEw9PTA/KEI9bmV3IHl1KGUpLEV5KDAsVi5jLmxlbmd0aCkseF8oVi5jLDAsQikpOkw9PUMuYy5sZW5ndGgtMT8oQj1uZXcgeXUoZSksJG4oVi5jLEIpKTpCPShTbihMLTEsVi5jLmxlbmd0aCksbChWLmNbTC0xXSwzMCkpLGY9TWUuS2MoKTtmLk9iKCk7KW89bChmLlBiKCksMTApLFZhKG8sQik7Zm9yKFplPW5ldyBHKG90KTtaZS5hPFplLmMuYy5sZW5ndGg7KSRlPWwocmUoWmUpLDEwKSxWYSgkZSxudWxsKTtydChlLChmdCgpLHExZSksb3QpfX1mdW5jdGlvbiBqSW4oZSx0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuLGpuLHVyLG9pLHdzLFZsLGxjO2Zvcih3cz1uZXcgYnQsVj1uZXcgRyh0LmIpO1YuYTxWLmMuYy5sZW5ndGg7KWZvcihCPWwocmUoViksMzApLFplPW5ldyBHKEIuYSk7WmUuYTxaZS5jLmMubGVuZ3RoOyl7Zm9yKCRlPWwocmUoWmUpLDEwKSwkZS5wPS0xLEw9bG8sY249bG8sQm49bmV3IEcoJGUuaik7Qm4uYTxCbi5jLmMubGVuZ3RoOyl7Zm9yKGFuPWwocmUoQm4pLDEyKSxhPW5ldyBHKGFuLmUpO2EuYTxhLmMuYy5sZW5ndGg7KW49bChyZShhKSwxOCksam49bChRKG4sKE50KCksSngpKSwxNykuYSxMPWIuTWF0aC5tYXgoTCxqbik7Zm9yKHI9bmV3IEcoYW4uZyk7ci5hPHIuYy5jLmxlbmd0aDspbj1sKHJlKHIpLDE4KSxqbj1sKFEobiwoTnQoKSxKeCkpLDE3KS5hLGNuPWIuTWF0aC5tYXgoY24sam4pfXJ0KCRlLElXLHB0KEwpKSxydCgkZSxPVyxwdChjbikpfWZvcihmZT0wLHo9bmV3IEcodC5iKTt6LmE8ei5jLmMubGVuZ3RoOylmb3IoQj1sKHJlKHopLDMwKSxaZT1uZXcgRyhCLmEpO1plLmE8WmUuYy5jLmxlbmd0aDspJGU9bChyZShaZSksMTApLCRlLnA8MCYmKG9pPW5ldyBQd2Usb2kuYj1mZSsrLFlidChlLCRlLG9pKSwkbih3cy5jLG9pKSk7Zm9yKFN0PWVnKHdzLmMubGVuZ3RoKSxDPWVnKHdzLmMubGVuZ3RoKSxmPTA7Zjx3cy5jLmxlbmd0aDtmKyspdnQoU3QsbmV3IGJ0KSx2dChDLHB0KDApKTtmb3IockRuKHQsd3MsU3QsQyksVmw9bChqMSh3cyxXZShQRXQsbHl0LDI2MSx3cy5jLmxlbmd0aCwwLDEpKSw4NTQpLG90PWwoajEoU3QsV2UobWYsUXksMTUsU3QuYy5sZW5ndGgsMCwxKSksMTk4KSxFPVdlKFZyLGRpLDI4LEMuYy5sZW5ndGgsMTUsMSksZz0wO2c8RS5sZW5ndGg7ZysrKUVbZ109KFNuKGcsQy5jLmxlbmd0aCksbChDLmNbZ10sMTcpKS5hO2ZvcihUZT0wLE1lPW5ldyBidCx3PTA7dzxWbC5sZW5ndGg7dysrKUVbd109PTAmJiRuKE1lLmMsVmxbd10pO2Zvcih0ZT1XZShWcixkaSwyOCxWbC5sZW5ndGgsMTUsMSk7TWUuYy5sZW5ndGghPTA7KWZvcihvaT1sKHQyKE1lLDApLDI2MSksdGVbb2kuYl09VGUrKzshb3Rbb2kuYl0uZGMoKTspbGM9bChvdFtvaS5iXS5nZCgwKSwyNjEpLC0tRVtsYy5iXSxFW2xjLmJdPT0wJiYkbihNZS5jLGxjKTtmb3IoZS5hPVdlKFBFdCxseXQsMjYxLFZsLmxlbmd0aCwwLDEpLG89MDtvPFZsLmxlbmd0aDtvKyspZm9yKEo9Vmxbb10sdXI9dGVbb10sZS5hW3VyXT1KLEouYj11cixaZT1uZXcgRyhKLmUpO1plLmE8WmUuYy5jLmxlbmd0aDspJGU9bChyZShaZSksMTApLCRlLnA9dXI7cmV0dXJuIGUuYX1mdW5jdGlvbiAkSW4oZSx0LG4scixhKXt2YXIgbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlO2ZvcihKPSExLHc9ITEsQj1lKzEsVj0oU24oZSx0LmMubGVuZ3RoKSxsKHQuY1tlXSwxODYpKSxnPVYuYSxFPW51bGwsZj0wO2Y8Vi5hLmMubGVuZ3RoO2YrKylpZihvPShTbihmLGcuYy5sZW5ndGgpLGwoZy5jW2ZdLDE3MikpLCFvLmMpe2lmKG8uYi5jLmxlbmd0aD09MCl7VmcoKSxVTihWLG8pLC0tZixKPSEwO2NvbnRpbnVlfWlmKG8ua3x8KEUmJmxVKEUpLEU9bmV3IHo1ZShFP0UuZStFLmQrcjowLFYuZixyKSxxTihvLEUuZStFLmQsVi5mKSx2dChWLmQsRSksQzdlKEUsbyksby5rPSEwKSxDPW51bGwsQz0oZmU9bnVsbCxmPFYuYS5jLmxlbmd0aC0xP2ZlPWwoanQoVi5hLGYrMSksMTcyKTpCPHQuYy5sZW5ndGgmJihTbihCLHQuYy5sZW5ndGgpLGwodC5jW0JdLDE4NikpLmEuYy5sZW5ndGghPTAmJihmZT1sKGp0KChTbihCLHQuYy5sZW5ndGgpLGwodC5jW0JdLDE4NikpLmEsMCksMTcyKSksZmUpLHRlPSExLEMmJih0ZT0hUGkoQy5qLFYpKSxDKXtpZihDLmIuYy5sZW5ndGghPTAmJiFSdChCdChsKGp0KEMuYiwwKSwyNykub2YoKHoxKCksJEIpKSkpKWFOKG8sbi1vLnMpLGxVKG8ucSksSj1KfGw5bihWLG8sQyxuLHIpO2Vsc2V7VU4oVixDKTticmVha31pZihDLmIuYy5sZW5ndGg9PTApZm9yKHQuYy5sZW5ndGg+QiYmVU4oKFNuKEIsdC5jLmxlbmd0aCksbCh0LmNbQl0sMTg2KSksQyksQz1udWxsO3QuYy5sZW5ndGg+QiYmKFNuKEIsdC5jLmxlbmd0aCksbCh0LmNbQl0sMTg2KSkuYS5jLmxlbmd0aD09MDspYWwodCwoU24oQix0LmMubGVuZ3RoKSx0LmNbQl0pKTtpZighQyl7LS1mO2NvbnRpbnVlfWlmKCFSdChCdChsKGp0KEMuYiwwKSwyNykub2YoKHoxKCksJEIpKSkpJiZ0QW4odCxWLG8sQyx0ZSxuLEIscikpe0o9ITA7Y29udGludWV9aWYodGUpe2lmKHo9Vi5iLEw9Qy5mLCFSdChCdChsKGp0KEMuYiwwKSwyNykub2YoJEIpKSkmJndNbih0LFYsbyxDLG4sQixyLGEpKXtpZihKPSEwLHo8TCl7dz0hMCxDLmo9VjticmVha31jb250aW51ZX1lbHNlIGlmKGU4ZShWLG8pKXtvLmM9ITAsSj0hMDtjb250aW51ZX19ZWxzZSBpZihlOGUoVixvKSl7by5jPSEwLEo9ITA7Y29udGludWV9aWYoSiljb250aW51ZX1pZihlOGUoVixvKSl7by5jPSEwLEo9ITAsQyYmKEMuaz0hMSk7Y29udGludWV9ZWxzZSBsVShvLnEpfXJldHVybiBuZXcgY2EoKEhuKCksISFKKSwhIXcpfWZ1bmN0aW9uIE50KCl7TnQ9VSxvZGU9KHBpKCksUlN0KSx0RGU9alN0LFNCPV9OZSx4MD0kU3QsSDY9QU5lLGIzPUxOZSx5ND1NTmUsR1Q9RE5lLEtUPUlOZSxjZGU9aVksbTM9RXYsdWRlPXpTdCx0TT1QTmUsa1c9cjksQ0I9KFlrZSgpLHRrdCkscTY9bmt0LHZ2PXJrdCxWNj1pa3QsSGt0PW5ldyBIYShYQixwdCgwKSksVVQ9Sjl0LGVEZT1aOXQsSng9ZWt0LGxEZT1Ta3QsckRlPW9rdCxpRGU9bGt0LGhkZT1ta3Qsc0RlPWRrdCxhRGU9cGt0LEVXPU1rdCxmZGU9X2t0LGNEZT1ra3Qsb0RlPXlrdCx1RGU9VGt0LGczPUc5dCxlTT1LOXQscmRlPWw5dCxPTWU9Zjl0LFdrdD1BTSxZa3Q9YVksS2t0PVFCLEdrdD1zWSxuRGU9KGR4KCksTDQpLG5ldyBIYShpOSxuRGUpLFlNZT1uZXcgbHcoMTIpLFdNZT1uZXcgSGEoXzIsWU1lKSxNTWU9KGlwKCksaUMpLGJwPW5ldyBIYShzTmUsTU1lKSxtND1uZXcgSGEocmgsMCksVmt0PW5ldyBIYSh6Z2UscHQoMSkpLGNXPW5ldyBIYShaNixsVCksbXY9clksTXM9X00sVlQ9czcsQmt0PUdCLFJkPUFTdCxwND1uNyxVa3Q9bmV3IEhhKHFnZSwoSG4oKSwhMCkpLGI0PUtCLGd2PU9nZSxidj1rdix4Vz1VYixhZGU9QzQsTE1lPShKcygpLEoxKSxSaD1uZXcgSGEoeHYsTE1lKSxkMz1yNyx3Vz1mTmUsdjQ9UzQscWt0PSRnZSxKTWU9Q05lLFFNZT0odDYoKSx0RiksbmV3IEhhKHlOZSxRTWUpLGprdD1CZ2UsJGt0PUZnZSx6a3Q9UmdlLFJrdD1QZ2UsbGRlPWFrdCxwdj1OOXQsemI9Tzl0LG5NPXNrdCxRdT1TOXQsZHY9bjl0LEpMPXQ5dCxmMz0keHQsU01lPXp4dCxaMWU9VXh0LFRCPXF4dCxlZGU9Wnh0LFZNZT1QOXQsVU1lPUI5dCxqTWU9eTl0LHlXPVg5dCxzZGU9ajl0LGlkZT1wOXQsS01lPVY5dCxJTWU9Yzl0LG5kZT11OXQsSjFlPVVCLEdNZT1GOXQsbFc9SXh0LEVNZT1EeHQsdVc9TXh0LEJNZT12OXQsUE1lPW05dCxGTWU9dzl0LHFUPWk3LGNjPXgzLHgyPW9OZSxqZD1JZ2UsdGRlPURnZSxfTWU9S3h0LGsyPWpnZSxRTD1EU3QsYlc9T1N0LHAzPWtOZSxYTWU9TlN0LEhUPVBTdCx6TWU9QTl0LHFNZT1NOXQsdzQ9bjksWDFlPUx4dCxITWU9STl0LHBXPXM5dCxnVz1pOXQsdlc9dEMsJE1lPUU5dCxaTD16OXQsX0I9T05lLEFNZT1yOXQsWk1lPVE5dCxETWU9YTl0LE9rdD1ZeHQsTmt0PVh4dCxGa3Q9Qzl0LFBrdD1ReHQsUk1lPU5nZSxtVz1fOXQsZFc9Snh0LHlnPWp4dCxDTWU9Qnh0LGhXPU54dCxUTWU9UHh0LGZXPUZ4dCxnND1PeHQsUTFlPVJ4dCxOTWU9Yjl0fWZ1bmN0aW9uIExpKGUpe3ZhciB0LG4scjtpZihlLmQ+PWUuail7ZS5hPS0xLGUuYz0xO3JldHVybn1pZih0PWNvKGUuaSxlLmQrKyksZS5hPXQsZS5iPT0xKXtzd2l0Y2godCl7Y2FzZSA5MjppZihyPTEwLGUuZD49ZS5qKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxWRykpKSk7ZS5hPWNvKGUuaSxlLmQrKyk7YnJlYWs7Y2FzZSA0NTooZS5lJjUxMik9PTUxMiYmZS5kPGUuaiYmY28oZS5pLGUuZCk9PTkxPygrK2UuZCxyPTI0KTpyPTA7YnJlYWs7Y2FzZSA5MTppZigoZS5lJjUxMikhPTUxMiYmZS5kPGUuaiYmY28oZS5pLGUuZCk9PTU4KXsrK2UuZCxyPTIwO2JyZWFrfWRlZmF1bHQ6KHQmNjQ1MTIpPT1BUCYmZS5kPGUuaiYmKG49Y28oZS5pLGUuZCksKG4mNjQ1MTIpPT01NjMyMCYmKGUuYT1JbysodC1BUDw8MTApK24tNTYzMjAsKytlLmQpKSxyPTB9ZS5jPXI7cmV0dXJufXN3aXRjaCh0KXtjYXNlIDEyNDpyPTI7YnJlYWs7Y2FzZSA0MjpyPTM7YnJlYWs7Y2FzZSA0MzpyPTQ7YnJlYWs7Y2FzZSA2MzpyPTU7YnJlYWs7Y2FzZSA0MTpyPTc7YnJlYWs7Y2FzZSA0NjpyPTg7YnJlYWs7Y2FzZSA5MTpyPTk7YnJlYWs7Y2FzZSA5NDpyPTExO2JyZWFrO2Nhc2UgMzY6cj0xMjticmVhaztjYXNlIDQwOmlmKHI9NixlLmQ+PWUuanx8Y28oZS5pLGUuZCkhPTYzKWJyZWFrO2lmKCsrZS5kPj1lLmopdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGUwZSkpKSk7c3dpdGNoKHQ9Y28oZS5pLGUuZCsrKSx0KXtjYXNlIDU4OnI9MTM7YnJlYWs7Y2FzZSA2MTpyPTE0O2JyZWFrO2Nhc2UgMzM6cj0xNTticmVhaztjYXNlIDkxOnI9MTk7YnJlYWs7Y2FzZSA2MjpyPTE4O2JyZWFrO2Nhc2UgNjA6aWYoZS5kPj1lLmopdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGUwZSkpKSk7aWYodD1jbyhlLmksZS5kKyspLHQ9PTYxKXI9MTY7ZWxzZSBpZih0PT0zMylyPTE3O2Vsc2UgdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLEw0dCkpKSk7YnJlYWs7Y2FzZSAzNTpmb3IoO2UuZDxlLmomJih0PWNvKGUuaSxlLmQrKyksdCE9NDEpOyk7aWYodCE9NDEpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLE00dCkpKSk7cj0yMTticmVhaztkZWZhdWx0OmlmKHQ9PTQ1fHw5Nzw9dCYmdDw9MTIyfHw2NTw9dCYmdDw9OTApey0tZS5kLHI9MjI7YnJlYWt9ZWxzZSBpZih0PT00MCl7cj0yMzticmVha310aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksZTBlKSkpKX1icmVhaztjYXNlIDkyOmlmKHI9MTAsZS5kPj1lLmopdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLFZHKSkpKTtlLmE9Y28oZS5pLGUuZCsrKTticmVhaztkZWZhdWx0OnI9MH1lLmM9cn1mdW5jdGlvbiB6SW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2lmKG4uVWcoIlByb2Nlc3MgY29tcGFjdGlvbiIsMSksISFSdChCdChRKHQsKEhjKCksdUllKSkpKSl7Zm9yKGE9bChRKHQseTMpLDg4KSx6PXplKEdlKFEodCx6ZGUpKSksZ0xuKGUsdCxhKSxpSW4odCx6LzIvMiksVj10LmIsJG0oVixuZXcgbFhlKGEpKSxFPVJyKFYsMCk7RS5iIT1FLmQuYzspaWYodz1sKEJyKEUpLDQwKSwhUnQoQnQoUSh3LChRaSgpLFZiKSkpKSl7aWYocj0kU24odyxhKSxKPVBBbih3LHQpLEw9MCxCPTAscilzd2l0Y2godGU9ci5lLGEuZyl7Y2FzZSAyOkw9dGUuYS16LXcuZi5hLEouZS5hLXotdy5mLmE8TCYmKEw9Si5lLmEtei13LmYuYSksQj1MK3cuZi5hO2JyZWFrO2Nhc2UgMTpMPXRlLmErci5mLmEreixKLmUuYSt6PkwmJihMPUouZS5hK0ouZi5hK3opLEI9TCt3LmYuYTticmVhaztjYXNlIDQ6TD10ZS5iLXotdy5mLmIsSi5lLmItei13LmYuYjxMJiYoTD1KLmUuYi16LXcuZi5iKSxCPUwrdy5mLmI7YnJlYWs7Y2FzZSAzOkw9dGUuYityLmYuYit6LEouZS5iK3o+TCYmKEw9Si5lLmIrSi5mLmIreiksQj1MK3cuZi5ifWVsc2UgaWYoSilzd2l0Y2goYS5nKXtjYXNlIDI6TD1KLmUuYS16LXcuZi5hLEI9TCt3LmYuYTticmVhaztjYXNlIDE6TD1KLmUuYStKLmYuYSt6LEI9TCt3LmYuYTticmVhaztjYXNlIDQ6TD1KLmUuYi16LXcuZi5iLEI9TCt3LmYuYjticmVhaztjYXNlIDM6TD1KLmUuYitKLmYuYit6LEI9TCt3LmYuYn1xZShRKHQsJGRlKSk9PT1xZSgoeEEoKSxPQikpPyhvPUwsZj1CLGc9a0UoRmkobmV3IGJuKG51bGwsbmV3IGtuKGUuYSwxNikpLG5ldyB0dHQobyxmKSkpLGcuYSE9bnVsbD9hPT0oSnMoKSx1Yyl8fGE9PXZjP3cuZS5hPUw6dy5lLmI9TDooYT09KEpzKCksdWMpfHxhPT13Zj9nPWtFKEZpKERodChuZXcgYm4obnVsbCxuZXcga24oZS5hLDE2KSkpLG5ldyBoWGUobykpKTpnPWtFKEZpKERodChuZXcgYm4obnVsbCxuZXcga24oZS5hLDE2KSkpLG5ldyBmWGUobykpKSxnLmEhPW51bGwmJihhPT11Y3x8YT09dmM/dy5lLmE9emUoR2UoKG1yKGcuYSE9bnVsbCksbChnLmEsNDIpKS5hKSk6dy5lLmI9emUoR2UoKG1yKGcuYSE9bnVsbCksbChnLmEsNDIpKS5hKSkpKSxnLmEhPW51bGwmJihDPWdjKGUuYSwobXIoZy5hIT1udWxsKSxnLmEpLDApLEM+MCYmQyE9bChRKHcsJGQpLDE3KS5hJiYocnQodyx0SWUsKEhuKCksITApKSxydCh3LCRkLHB0KEMpKSkpKTphPT0oSnMoKSx1Yyl8fGE9PXZjP3cuZS5hPUw6dy5lLmI9TH1uLlZnKCl9fWZ1bmN0aW9uIHl3dChlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEU7Zm9yKGUuYj0xLExpKGUpLHQ9bnVsbCxlLmM9PTAmJmUuYT09OTQ/KExpKGUpLHQ9KERpKCksRGkoKSxuZXcgX2goNCkpLEV1KHQsMCxUVCksZz1uZXcgX2goNCkpOmc9KERpKCksRGkoKSxuZXcgX2goNCkpLGE9ITA7KEU9ZS5jKSE9MTspe2lmKEU9PTAmJmUuYT09OTMmJiFhKXt0JiYobkwodCxnKSxnPXQpO2JyZWFrfWlmKG49ZS5hLHI9ITEsRT09MTApc3dpdGNoKG4pe2Nhc2UgMTAwOmNhc2UgNjg6Y2FzZSAxMTk6Y2FzZSA4NzpjYXNlIDExNTpjYXNlIDgzOkt5KGcsWUUobikpLHI9ITA7YnJlYWs7Y2FzZSAxMDU6Y2FzZSA3MzpjYXNlIDk5OmNhc2UgNjc6bj0oS3koZyxZRShuKSksLTEpLG48MCYmKHI9ITApO2JyZWFrO2Nhc2UgMTEyOmNhc2UgODA6aWYodz13OWUoZSxuKSwhdyl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksdDBlKSkpKTtLeShnLHcpLHI9ITA7YnJlYWs7ZGVmYXVsdDpuPWVrZShlKX1lbHNlIGlmKEU9PTI0JiYhYSl7aWYodCYmKG5MKHQsZyksZz10KSxvPXl3dChlKSxuTChnLG8pLGUuYyE9MHx8ZS5hIT05Myl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksajR0KSkpKTticmVha31pZihMaShlKSwhcil7aWYoRT09MCl7aWYobj09OTEpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLEVTZSkpKSk7aWYobj09OTMpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLFRTZSkpKSk7aWYobj09NDUmJiFhJiZlLmEhPTkzKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxuMGUpKSkpfWlmKGUuYyE9MHx8ZS5hIT00NXx8bj09NDUmJmEpRXUoZyxuLG4pO2Vsc2V7aWYoTGkoZSksKEU9ZS5jKT09MSl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksVUcpKSkpO2lmKEU9PTAmJmUuYT09OTMpRXUoZyxuLG4pLEV1KGcsNDUsNDUpO2Vsc2V7aWYoRT09MCYmZS5hPT05M3x8RT09MjQpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLG4wZSkpKSk7aWYoZj1lLmEsRT09MCl7aWYoZj09OTEpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLEVTZSkpKSk7aWYoZj09OTMpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLFRTZSkpKSk7aWYoZj09NDUpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLG4wZSkpKSl9ZWxzZSBFPT0xMCYmKGY9ZWtlKGUpKTtpZihMaShlKSxuPmYpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLHE0dCkpKSk7RXUoZyxuLGYpfX19YT0hMX1pZihlLmM9PTEpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLFVHKSkpKTtyZXR1cm4gYzYoZyksZUwoZyksZS5iPTAsTGkoZSksZ31mdW5jdGlvbiBxSW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplO2lmKG4uVWcoIkNvZmZtYW4tR3JhaGFtIExheWVyaW5nIiwxKSx0LmEuYy5sZW5ndGg9PTApe24uVmcoKTtyZXR1cm59Zm9yKFplPWwoUSh0LChOdCgpLCRNZSkpLDE3KS5hLHc9MCxmPTAsQj1uZXcgRyh0LmEpO0IuYTxCLmMuYy5sZW5ndGg7KWZvcihMPWwocmUoQiksMTApLEwucD13Kyssbz1uZXcgaHIoZHIocXMoTCkuYS5LYygpLG5ldyBqKSk7anIobyk7KWE9bCh4cihvKSwxOCksYS5wPWYrKztmb3IoZS5kPVdlKGloLHBnLDI4LHcsMTYsMSksZS5hPVdlKGloLHBnLDI4LGYsMTYsMSksZS5iPVdlKFZyLGRpLDI4LHcsMTUsMSksZS5lPVdlKFZyLGRpLDI4LHcsMTUsMSksZS5mPVdlKFZyLGRpLDI4LHcsMTUsMSksbVYoZS5jKSxqOG4oZSx0KSxWPW5ldyBnSChuZXcgTFllKGUpKSwkZT1uZXcgRyh0LmEpOyRlLmE8JGUuYy5jLmxlbmd0aDspe2ZvcihUZT1sKHJlKCRlKSwxMCksbz1uZXcgaHIoZHIoa2EoVGUpLmEuS2MoKSxuZXcgaikpO2pyKG8pOylhPWwoeHIobyksMTgpLGUuYVthLnBdfHwrK2UuYltUZS5wXTtlLmJbVGUucF09PTAmJks4KCRFKFYsVGUpLGFUKX1mb3IoZz0wO1YuYi5jLmxlbmd0aCE9MDspZm9yKFRlPWwoS29lKFYpLDEwKSxlLmZbVGUucF09ZysrLG89bmV3IGhyKGRyKHFzKFRlKS5hLktjKCksbmV3IGopKTtqcihvKTspYT1sKHhyKG8pLDE4KSwhZS5hW2EucF0mJih0ZT1hLmQuaSwtLWUuYlt0ZS5wXSx4bihlLmMsdGUscHQoZS5mW1RlLnBdKSksZS5iW3RlLnBdPT0wJiZLOCgkRShWLHRlKSxhVCkpO2Zvcih6PW5ldyBnSChuZXcgTVllKGUpKSxNZT1uZXcgRyh0LmEpO01lLmE8TWUuYy5jLmxlbmd0aDspe2ZvcihUZT1sKHJlKE1lKSwxMCksbz1uZXcgaHIoZHIocXMoVGUpLmEuS2MoKSxuZXcgaikpO2pyKG8pOylhPWwoeHIobyksMTgpLGUuYVthLnBdfHwrK2UuZVtUZS5wXTtlLmVbVGUucF09PTAmJks4KCRFKHosVGUpLGFUKX1mb3IoQz1uZXcgYnQscj12YXQodCxDKTt6LmIuYy5sZW5ndGghPTA7KWZvcihmZT1sKEtvZSh6KSwxMCksKHIuYS5jLmxlbmd0aD49WmV8fCFCNW4oZmUscikpJiYocj12YXQodCxDKSksVmEoZmUsciksbz1uZXcgaHIoZHIoa2EoZmUpLmEuS2MoKSxuZXcgaikpO2pyKG8pOylhPWwoeHIobyksMTgpLCFlLmFbYS5wXSYmKEo9YS5jLmksLS1lLmVbSi5wXSxlLmVbSi5wXT09MCYmSzgoJEUoeixKKSxhVCkpO2ZvcihFPUMuYy5sZW5ndGgtMTtFPj0wOy0tRSl2dCh0LmIsKFNuKEUsQy5jLmxlbmd0aCksbChDLmNbRV0sMzApKSk7dC5hLmMubGVuZ3RoPTAsbi5WZygpfWZ1bmN0aW9uIHh3dChlLHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGU7JGU9ITE7ZG8gZm9yKCRlPSExLG89dD9uZXcgYnIoZS5hLmIpLmEuZ2MoKS0yOjE7dD9vPj0wOm88bmV3IGJyKGUuYS5iKS5hLmdjKCk7bys9dD8tMToxKWZvcihhPXM2ZShlLmEscHQobykpLHo9MDt6PGEuYjt6KyspaWYoTD1sKGZmKGEseiksMTApLCEhbnMoTCwoZnQoKSxLaSkpJiYhKEg4bihlLmEscHQobykpJiZlLnI9PShOZigpLHYzKXx8VjhuKGUuYSxwdChvKSkmJmUucj09KE5mKCkseDQpKSl7Zm9yKE1lPSEwLGZlPTA7ZmU8YS5iO2ZlKyspdGU9bChmZihhLGZlKSwxMCksbnModGUsS2kpJiYodCYmbChRKEwsS2kpLDE3KS5hPGwoUSh0ZSxLaSksMTcpLmF8fCF0JiZsKFEoTCxLaSksMTcpLmE+bChRKHRlLEtpKSwxNykuYSkmJihNZT0hMSk7aWYoTWUpe2Zvcih3PXQ/bysxOm8tMSxnPXM2ZShlLmEscHQodykpLGY9ITEsVGU9ITAscj0hMSxDPVJyKGcsMCk7Qy5iIT1DLmQuYzspRT1sKEJyKEMpLDEwKSxucyhFLEtpKT9FLnAhPUwucCYmKGY9ZnwodD9sKFEoRSxLaSksMTcpLmE8bChRKEwsS2kpLDE3KS5hOmwoUShFLEtpKSwxNykuYT5sKFEoTCxLaSksMTcpLmEpLFRlPSExKTohZiYmVGUmJkUuaz09KFpuKCksY3UpJiYocj0hMCx0P0I9bCh4cihuZXcgaHIoZHIoa2EoRSkuYS5LYygpLG5ldyBqKSkpLDE4KS5jLmk6Qj1sKHhyKG5ldyBocihkcihxcyhFKS5hLktjKCksbmV3IGopKSksMTgpLmQuaSxCPT1MJiYodD9uPWwoeHIobmV3IGhyKGRyKHFzKEUpLmEuS2MoKSxuZXcgaikpKSwxOCkuZC5pOm49bCh4cihuZXcgaHIoZHIoa2EoRSkuYS5LYygpLG5ldyBqKSkpLDE4KS5jLmksKHQ/bChkeShlLmEsbiksMTcpLmEtbChkeShlLmEsQiksMTcpLmE6bChkeShlLmEsQiksMTcpLmEtbChkeShlLmEsbiksMTcpLmEpPD0yJiYoVGU9ITEpKSk7aWYociYmVGUmJih0P249bCh4cihuZXcgaHIoZHIocXMoTCkuYS5LYygpLG5ldyBqKSkpLDE4KS5kLmk6bj1sKHhyKG5ldyBocihkcihrYShMKS5hLktjKCksbmV3IGopKSksMTgpLmMuaSwodD9sKGR5KGUuYSxuKSwxNykuYS1sKGR5KGUuYSxMKSwxNykuYTpsKGR5KGUuYSxMKSwxNykuYS1sKGR5KGUuYSxuKSwxNykuYSk8PTImJm4uaz09KFpuKCksUHMpJiYoVGU9ITEpKSxmfHxUZSl7Zm9yKEo9SjJ0KGUsTCx0KTtKLmEuZ2MoKSE9MDspVj1sKEouYS5lYygpLktjKCkuUGIoKSwxMCksSi5hLkJjKFYpIT1udWxsLEthKEosSjJ0KGUsVix0KSk7LS16LCRlPSEwfX19d2hpbGUoJGUpfWZ1bmN0aW9uIEhJbihlKXtXcihlLmMsbGksaGUobGUoenQsMSksZHQsMiw2LFtobywiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjZGVjaW1hbCJdKSksV3IoZS5kLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbaG8sImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2ludGVnZXIiXSkpLFdyKGUuZSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW2hvLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNib29sZWFuIl0pKSxXcihlLmYsbGksaGUobGUoenQsMSksZHQsMiw2LFtobywiRUJvb2xlYW4iLF9pLCJFQm9vbGVhbjpPYmplY3QiXSkpLFdyKGUuaSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW2hvLCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNieXRlIl0pKSxXcihlLmcsbGksaGUobGUoenQsMSksZHQsMiw2LFtobywiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjaGV4QmluYXJ5Il0pKSxXcihlLmosbGksaGUobGUoenQsMSksZHQsMiw2LFtobywiRUJ5dGUiLF9pLCJFQnl0ZTpPYmplY3QiXSkpLFdyKGUubixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW2hvLCJFQ2hhciIsX2ksIkVDaGFyOk9iamVjdCJdKSksV3IoZS50LGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbaG8sImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2RvdWJsZSJdKSksV3IoZS51LGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbaG8sIkVEb3VibGUiLF9pLCJFRG91YmxlOk9iamVjdCJdKSksV3IoZS5GLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbaG8sImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2Zsb2F0Il0pKSxXcihlLkcsbGksaGUobGUoenQsMSksZHQsMiw2LFtobywiRUZsb2F0IixfaSwiRUZsb2F0Ok9iamVjdCJdKSksV3IoZS5JLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbaG8sImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2ludCJdKSksV3IoZS5KLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbaG8sIkVJbnQiLF9pLCJFSW50Ok9iamVjdCJdKSksV3IoZS5OLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbaG8sImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2xvbmciXSkpLFdyKGUuTyxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW2hvLCJFTG9uZyIsX2ksIkVMb25nOk9iamVjdCJdKSksV3IoZS5aLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbaG8sImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3Nob3J0Il0pKSxXcihlLiQsbGksaGUobGUoenQsMSksZHQsMiw2LFtobywiRVNob3J0IixfaSwiRVNob3J0Ok9iamVjdCJdKSksV3IoZS5fLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbaG8sImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyJdKSl9ZnVuY3Rpb24gVkluKGUsdCxuLHIsYSxvLGYpe3ZhciBnLHcsRSxDLEwsQix6LFY7cmV0dXJuIEI9bChyLmEsMTcpLmEsej1sKHIuYiwxNykuYSxMPWUuYixWPWUuYyxnPTAsQz0wLHQ9PShKcygpLHVjKXx8dD09dmM/KEM9Zk8oaDF0KHh5KGZjKG5ldyBibihudWxsLG5ldyBrbihuLmIsMTYpKSxuZXcgbG5lKSxuZXcgWXRlKSkpLEwuZS5iK0wuZi5iLzI+Qz8oRT0rK3osZz16ZShHZShmaCh2eShmYyhuZXcgYm4obnVsbCxuZXcga24obi5iLDE2KSksbmV3IGl0dChhLEUpKSxuZXcgYSQpKSkpKToodz0rK0IsZz16ZShHZShmaChZOChmYyhuZXcgYm4obnVsbCxuZXcga24obi5iLDE2KSksbmV3IHN0dChhLHcpKSxuZXcgWHRlKSkpKSkpOihDPWZPKGgxdCh4eShmYyhuZXcgYm4obnVsbCxuZXcga24obi5iLDE2KSksbmV3IFp0ZSksbmV3IHMkKSkpLEwuZS5hK0wuZi5hLzI+Qz8oRT0rK3osZz16ZShHZShmaCh2eShmYyhuZXcgYm4obnVsbCxuZXcga24obi5iLDE2KSksbmV3IG50dChhLEUpKSxuZXcgUXRlKSkpKSk6KHc9KytCLGc9emUoR2UoZmgoWTgoZmMobmV3IGJuKG51bGwsbmV3IGtuKG4uYiwxNikpLG5ldyBydHQoYSx3KSksbmV3IGJJKSkpKSkpLHQ9PXVjPyhrbyhlLmEsbmV3IGx0KHplKEdlKFEoTCwoUWkoKSxjMSkpKSktYSxnKSksa28oZS5hLG5ldyBsdChWLmUuYStWLmYuYSthK28sZykpLGtvKGUuYSxuZXcgbHQoVi5lLmErVi5mLmErYStvLFYuZS5iK1YuZi5iLzIpKSxrbyhlLmEsbmV3IGx0KFYuZS5hK1YuZi5hLFYuZS5iK1YuZi5iLzIpKSk6dD09dmM/KGtvKGUuYSxuZXcgbHQoemUoR2UoUShMLChRaSgpLGswKSkpKSthLEwuZS5iK0wuZi5iLzIpKSxrbyhlLmEsbmV3IGx0KEwuZS5hK0wuZi5hK2EsZykpLGtvKGUuYSxuZXcgbHQoVi5lLmEtYS1vLGcpKSxrbyhlLmEsbmV3IGx0KFYuZS5hLWEtbyxWLmUuYitWLmYuYi8yKSksa28oZS5hLG5ldyBsdChWLmUuYSxWLmUuYitWLmYuYi8yKSkpOnQ9PXdmPyhrbyhlLmEsbmV3IGx0KGcsemUoR2UoUShMLChRaSgpLGMxKSkpKS1hKSksa28oZS5hLG5ldyBsdChnLFYuZS5iK1YuZi5iK2ErbykpLGtvKGUuYSxuZXcgbHQoVi5lLmErVi5mLmEvMixWLmUuYitWLmYuYithK28pKSxrbyhlLmEsbmV3IGx0KFYuZS5hK1YuZi5hLzIsVi5lLmIrVi5mLmIrYSkpKTooZS5hLmI9PTB8fChsKG8wKGUuYSksOCkuYj16ZShHZShRKEwsKFFpKCksazApKSkpK2EqbChmLmIsMTcpLmEpLGtvKGUuYSxuZXcgbHQoZyx6ZShHZShRKEwsKFFpKCksazApKSkpK2EqbChmLmIsMTcpLmEpKSxrbyhlLmEsbmV3IGx0KGcsVi5lLmItYSpsKGYuYSwxNykuYS1vKSkpLG5ldyBjYShwdChCKSxwdCh6KSl9ZnVuY3Rpb24gVUluKGUpe3ZhciB0LG4scixhLG8sZixnLHcsRSxDLEwsQix6O2lmKGY9ITAsTD1udWxsLHI9bnVsbCxhPW51bGwsdD0hMSx6PVBfdCxFPW51bGwsbz1udWxsLGc9MCx3PVpjZShlLGcsVFBlLENQZSksdzxlLmxlbmd0aCYmKFhuKHcsZS5sZW5ndGgpLGUuY2hhckNvZGVBdCh3KT09NTgpJiYoTD0oR2EoZyx3LGUubGVuZ3RoKSxlLnN1YnN0cihnLHctZykpLGc9dysxKSxuPUwhPW51bGwmJm5PKEVZLEwudG9Mb3dlckNhc2UoKSksbil7aWYodz1lLmxhc3RJbmRleE9mKCIhLyIpLHc9PS0xKXRocm93IHVlKG5ldyBZbigibm8gYXJjaGl2ZSBzZXBhcmF0b3IiKSk7Zj0hMCxyPXRmKGUsZywrK3cpLGc9d31lbHNlIGc+PTAmJnZuKGUuc3Vic3RyKGcsMiksIi8vIik/KGcrPTIsdz1aY2UoZSxnLCRNLHpNKSxyPShHYShnLHcsZS5sZW5ndGgpLGUuc3Vic3RyKGcsdy1nKSksZz13KTpMIT1udWxsJiYoZz09ZS5sZW5ndGh8fChYbihnLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoZykhPTQ3KSkmJihmPSExLHc9THllKGUsY2woMzUpLGcpLHc9PS0xJiYodz1lLmxlbmd0aCkscj0oR2EoZyx3LGUubGVuZ3RoKSxlLnN1YnN0cihnLHctZykpLGc9dyk7aWYoIW4mJmc8ZS5sZW5ndGgmJihYbihnLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoZyk9PTQ3KSYmKHc9WmNlKGUsZysxLCRNLHpNKSxDPShHYShnKzEsdyxlLmxlbmd0aCksZS5zdWJzdHIoZysxLHctKGcrMSkpKSxDLmxlbmd0aD4wJiZjbyhDLEMubGVuZ3RoLTEpPT01OCYmKGE9QyxnPXcpKSxnPGUubGVuZ3RoJiYoWG4oZyxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGcpPT00NykmJigrK2csdD0hMCksZzxlLmxlbmd0aCYmKFhuKGcsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChnKSE9NjMpJiYoWG4oZyxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGcpIT0zNSkpe2ZvcihCPW5ldyBidDtnPGUubGVuZ3RoJiYoWG4oZyxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGcpIT02MykmJihYbihnLGUubGVuZ3RoKSxlLmNoYXJDb2RlQXQoZykhPTM1KTspdz1aY2UoZSxnLCRNLHpNKSx2dChCLChHYShnLHcsZS5sZW5ndGgpLGUuc3Vic3RyKGcsdy1nKSkpLGc9dyxnPGUubGVuZ3RoJiYoWG4oZyxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KGcpPT00NykmJihVeW4oZSwrK2cpfHxCLmMucHVzaCgiIikpO3o9V2UoenQsZHQsMixCLmMubGVuZ3RoLDYsMSksajEoQix6KX1yZXR1cm4gZzxlLmxlbmd0aCYmKFhuKGcsZS5sZW5ndGgpLGUuY2hhckNvZGVBdChnKT09NjMpJiYodz1OayhlLDM1LCsrZyksdz09LTEmJih3PWUubGVuZ3RoKSxFPShHYShnLHcsZS5sZW5ndGgpLGUuc3Vic3RyKGcsdy1nKSksZz13KSxnPGUubGVuZ3RoJiYobz13NWUoZSwrK2cpKSxFTW4oZixMLHIsYSx6LEUpLG5ldyBlbGUoZixMLHIsYSx0LHosRSxvKX1mdW5jdGlvbiBrd3QoKXtrd3Q9VSxNbGUoKSxiaT1uZXcgQ3cseG4oYmksKEN0KCksXzApLGVkKSx4bihiaSxIZixlZCkseG4oYmksemwsZWQpLHhuKGJpLEEwLGVkKSx4bihiaSxmbCxlZCkseG4oYmkscWwsZWQpLHhuKGJpLEEwLF8wKSx4bihiaSxlZCx5ZikseG4oYmksXzAseWYpLHhuKGJpLEhmLHlmKSx4bihiaSx6bCx5ZikseG4oYmksaGwseWYpLHhuKGJpLEEwLHlmKSx4bihiaSxmbCx5ZikseG4oYmkscWwseWYpLHhuKGJpLEp1LHlmKSx4bihiaSxlZCwkaCkseG4oYmksXzAsJGgpLHhuKGJpLHlmLCRoKSx4bihiaSxIZiwkaCkseG4oYmksemwsJGgpLHhuKGJpLGhsLCRoKSx4bihiaSxBMCwkaCkseG4oYmksSnUsJGgpLHhuKGJpLHpoLCRoKSx4bihiaSxmbCwkaCkseG4oYmksX2wsJGgpLHhuKGJpLHFsLCRoKSx4bihiaSxfMCxIZikseG4oYmksemwsSGYpLHhuKGJpLEEwLEhmKSx4bihiaSxxbCxIZikseG4oYmksXzAsemwpLHhuKGJpLEhmLHpsKSx4bihiaSxBMCx6bCkseG4oYmksemwsemwpLHhuKGJpLGZsLHpsKSx4bihiaSxlZCx4ZikseG4oYmksXzAseGYpLHhuKGJpLHlmLHhmKSx4bihiaSwkaCx4ZikseG4oYmksSGYseGYpLHhuKGJpLHpsLHhmKSx4bihiaSxobCx4ZikseG4oYmksQTAseGYpLHhuKGJpLHpoLHhmKSx4bihiaSxKdSx4ZikseG4oYmkscWwseGYpLHhuKGJpLGZsLHhmKSx4bihiaSxEdSx4ZikseG4oYmksZWQsemgpLHhuKGJpLF8wLHpoKSx4bihiaSx5Zix6aCkseG4oYmksSGYsemgpLHhuKGJpLHpsLHpoKSx4bihiaSxobCx6aCkseG4oYmksQTAsemgpLHhuKGJpLEp1LHpoKSx4bihiaSxxbCx6aCkseG4oYmksX2wsemgpLHhuKGJpLER1LHpoKSx4bihiaSxfMCxKdSkseG4oYmksSGYsSnUpLHhuKGJpLHpsLEp1KSx4bihiaSxBMCxKdSkseG4oYmksemgsSnUpLHhuKGJpLHFsLEp1KSx4bihiaSxmbCxKdSkseG4oYmksZWQsbGwpLHhuKGJpLF8wLGxsKSx4bihiaSx5ZixsbCkseG4oYmksSGYsbGwpLHhuKGJpLHpsLGxsKSx4bihiaSxobCxsbCkseG4oYmksQTAsbGwpLHhuKGJpLEp1LGxsKSx4bihiaSxxbCxsbCkseG4oYmksXzAsZmwpLHhuKGJpLHlmLGZsKSx4bihiaSwkaCxmbCkseG4oYmksemwsZmwpLHhuKGJpLGVkLF9sKSx4bihiaSxfMCxfbCkseG4oYmksJGgsX2wpLHhuKGJpLEhmLF9sKSx4bihiaSx6bCxfbCkseG4oYmksaGwsX2wpLHhuKGJpLEEwLF9sKSx4bihiaSxBMCxEdSkseG4oYmksemwsRHUpLHhuKGJpLEp1LGVkKSx4bihiaSxKdSxIZikseG4oYmksSnUseWYpLHhuKGJpLGhsLGVkKSx4bihiaSxobCxfMCkseG4oYmksaGwsJGgpfWZ1bmN0aW9uIEdJbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3Q7c3dpdGNoKG4uVWcoIkJyYW5kZXMgJiBLb2VwZiBub2RlIHBsYWNlbWVudCIsMSksZS5hPXQsZS5jPUFBbih0KSxyPWwoUSh0LChOdCgpLHNkZSkpLDI4MSksej1SdChCdChRKHQsWkwpKSksZS5kPXI9PShXTigpLFpLKSYmIXp8fHI9PUIxZSx2TW4oZSx0KSxaZT1udWxsLG90PW51bGwsZmU9bnVsbCxUZT1udWxsLHRlPShNaCg0LFl5KSxuZXcgQnUoNCkpLGwoUSh0LHNkZSksMjgxKS5nKXtjYXNlIDM6ZmU9bmV3IGY2KHQsZS5jLmQsKEQxKCksd3YpLCh4ZCgpLFQyKSksJG4odGUuYyxmZSk7YnJlYWs7Y2FzZSAxOlRlPW5ldyBmNih0LGUuYy5kLChEMSgpLFkxKSwoeGQoKSxUMikpLCRuKHRlLmMsVGUpO2JyZWFrO2Nhc2UgNDpaZT1uZXcgZjYodCxlLmMuZCwoRDEoKSx3diksKHhkKCksdzMpKSwkbih0ZS5jLFplKTticmVhaztjYXNlIDI6b3Q9bmV3IGY2KHQsZS5jLmQsKEQxKCksWTEpLCh4ZCgpLHczKSksJG4odGUuYyxvdCk7YnJlYWs7ZGVmYXVsdDpmZT1uZXcgZjYodCxlLmMuZCwoRDEoKSx3diksKHhkKCksVDIpKSxUZT1uZXcgZjYodCxlLmMuZCxZMSxUMiksWmU9bmV3IGY2KHQsZS5jLmQsd3YsdzMpLG90PW5ldyBmNih0LGUuYy5kLFkxLHczKSwkbih0ZS5jLFplKSwkbih0ZS5jLG90KSwkbih0ZS5jLGZlKSwkbih0ZS5jLFRlKX1mb3IoYT1uZXcgR2V0KHQsZS5jKSxnPW5ldyBHKHRlKTtnLmE8Zy5jLmMubGVuZ3RoOylvPWwocmUoZyksMTg1KSxvSW4oYSxvLGUuYiksaUxuKG8pO2ZvcihCPW5ldyByZ3QodCxlLmMpLHc9bmV3IEcodGUpO3cuYTx3LmMuYy5sZW5ndGg7KW89bChyZSh3KSwxODUpLE1NbihCLG8pO2lmKG4uX2coKSlmb3IoRT1uZXcgRyh0ZSk7RS5hPEUuYy5jLmxlbmd0aDspbz1sKHJlKEUpLDE4NSksbi5iaChvKyIgc2l6ZSBpcyAiK1d1ZShvKSk7aWYoTD1udWxsLGUuZCYmKEM9SkRuKGUsdGUsZS5jLmQpLFhtdCh0LEMsbikmJihMPUMpKSwhTClmb3IoRT1uZXcgRyh0ZSk7RS5hPEUuYy5jLmxlbmd0aDspbz1sKHJlKEUpLDE4NSksWG10KHQsbyxuKSYmKCFMfHxXdWUoTCk+V3VlKG8pKSYmKEw9byk7Zm9yKCFMJiYoTD0oU24oMCx0ZS5jLmxlbmd0aCksbCh0ZS5jWzBdLDE4NSkpKSxKPW5ldyBHKHQuYik7Si5hPEouYy5jLmxlbmd0aDspZm9yKFY9bChyZShKKSwzMCksJGU9bmV3IEcoVi5hKTskZS5hPCRlLmMuYy5sZW5ndGg7KU1lPWwocmUoJGUpLDEwKSxNZS5uLmI9emUoTC5wW01lLnBdKSt6ZShMLmRbTWUucF0pO2ZvcihuLl9nKCkmJihuLmJoKCJDaG9zZW4gbm9kZSBwbGFjZW1lbnQ6ICIrTCksbi5iaCgiQmxvY2tzOiAiK2YydChMKSksbi5iaCgiQ2xhc3NlczogIitxRW4oTCxuKSksbi5iaCgiTWFya2VkIGVkZ2VzOiAiK2UuYikpLGY9bmV3IEcodGUpO2YuYTxmLmMuYy5sZW5ndGg7KW89bChyZShmKSwxODUpLG8uZz1udWxsLG8uYj1udWxsLG8uYT1udWxsLG8uZD1udWxsLG8uaj1udWxsLG8uaT1udWxsLG8ucD1udWxsO3JtbihlLmMpLGUuYi5hLiRiKCksbi5WZygpfWZ1bmN0aW9uIEtJbihlKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm4sam4sdXI7aWYoZS5jLmxlbmd0aD09MSlyZXR1cm4geWd0KChTbigwLGUuYy5sZW5ndGgpLGwoZS5jWzBdLDEyMSkpKSxTbigwLGUuYy5sZW5ndGgpLGwoZS5jWzBdLDEyMSk7aWYoZS5jLmxlbmd0aDw9MClyZXR1cm4gbmV3IG5OO2Zvcih3PW5ldyBHKGUpO3cuYTx3LmMuYy5sZW5ndGg7KXtmb3IoZj1sKHJlKHcpLDEyMSksVGU9MCxWPUlpLEo9SWksQj1sbyx6PWxvLGZlPVJyKGYuYiwwKTtmZS5iIT1mZS5kLmM7KXRlPWwoQnIoZmUpLDQwKSxUZSs9bChRKHRlLChIYygpLFJXKSksMTcpLmEsVj1iLk1hdGgubWluKFYsdGUuZS5hKSxKPWIuTWF0aC5taW4oSix0ZS5lLmIpLEI9Yi5NYXRoLm1heChCLHRlLmUuYSt0ZS5mLmEpLHo9Yi5NYXRoLm1heCh6LHRlLmUuYit0ZS5mLmIpO3J0KGYsKEhjKCksUlcpLHB0KFRlKSkscnQoZiwoUWkoKSxRVCksbmV3IGx0KFYsSikpLHJ0KGYsTkIsbmV3IGx0KEIseikpfWZvcihDbigpLFZzKGUsbmV3IEx0ZSksWmU9bmV3IG5OLHBjKFplLChTbigwLGUuYy5sZW5ndGgpLGwoZS5jWzBdLDk2KSkpLEw9MCxCbj0wLEU9bmV3IEcoZSk7RS5hPEUuYy5jLmxlbmd0aDspZj1sKHJlKEUpLDEyMSksb3Q9bWEoSmEobChRKGYsKFFpKCksTkIpKSw4KSksbChRKGYsUVQpLDgpKSxMPWIuTWF0aC5tYXgoTCxvdC5hKSxCbis9b3QuYSpvdC5iO2ZvcihMPWIuTWF0aC5tYXgoTCxiLk1hdGguc3FydChCbikqemUoR2UoUShaZSwoSGMoKSx4VHQpKSkpKSxTdD16ZShHZShRKFplLHpkZSkpKSxqbj0wLHVyPTAsQz0wLHQ9U3QsZz1uZXcgRyhlKTtnLmE8Zy5jLmMubGVuZ3RoOylmPWwocmUoZyksMTIxKSxvdD1tYShKYShsKFEoZiwoUWkoKSxOQikpLDgpKSxsKFEoZixRVCksOCkpLGpuK290LmE+TCYmKGpuPTAsdXIrPUMrU3QsQz0wKSxobXQoWmUsZixqbix1ciksdD1iLk1hdGgubWF4KHQsam4rb3QuYSksQz1iLk1hdGgubWF4KEMsb3QuYiksam4rPW90LmErU3Q7Zm9yKCRlPW5ldyBQcixuPW5ldyBQcixhbj1uZXcgRyhlKTthbi5hPGFuLmMuYy5sZW5ndGg7KWZvcihjbj1sKHJlKGFuKSwxMjEpLHI9UnQoQnQoUShjbiwocGkoKSxHQikpKSksTWU9Y24ucT9jbi5xOm1nLG89TWUudmMoKS5LYygpO28uT2IoKTspYT1sKG8uUGIoKSw0NCksSHUoJGUsYS5sZCgpKT9xZShsKGEubGQoKSwxNDkpLlNnKCkpIT09cWUoYS5tZCgpKSYmKHImJkh1KG4sYS5sZCgpKT8oVmcoKSwiIitsKGEubGQoKSwxNDkpLlBnKCkpOihraSgkZSxsKGEubGQoKSwxNDkpLGEubWQoKSkscnQoWmUsbChhLmxkKCksMTQ5KSxhLm1kKCkpLHImJmtpKG4sbChhLmxkKCksMTQ5KSxhLm1kKCkpKSk6KGtpKCRlLGwoYS5sZCgpLDE0OSksYS5tZCgpKSxydChaZSxsKGEubGQoKSwxNDkpLGEubWQoKSkpO3JldHVybiB5Z3QoWmUpLFplfWZ1bmN0aW9uIFdVKGUsdCl7c3dpdGNoKGUuZSl7Y2FzZSAwOmNhc2UgMjpjYXNlIDQ6Y2FzZSA2OmNhc2UgNDI6Y2FzZSA0NDpjYXNlIDQ2OmNhc2UgNDg6Y2FzZSA4OmNhc2UgMTA6Y2FzZSAxMjpjYXNlIDE0OmNhc2UgMTY6Y2FzZSAxODpjYXNlIDIwOmNhc2UgMjI6Y2FzZSAyNDpjYXNlIDI2OmNhc2UgMjg6Y2FzZSAzMDpjYXNlIDMyOmNhc2UgMzQ6Y2FzZSAzNjpjYXNlIDM4OnJldHVybiBuZXcgVmF0KGUuYixlLmEsdCxlLmMpO2Nhc2UgMTpyZXR1cm4gbmV3IEJxKGUuYSx0LG1zKHQuRGgoKSxlLmMpKTtjYXNlIDQzOnJldHVybiBuZXcgQm50KGUuYSx0LG1zKHQuRGgoKSxlLmMpKTtjYXNlIDM6cmV0dXJuIG5ldyBZcyhlLmEsdCxtcyh0LkRoKCksZS5jKSk7Y2FzZSA0NTpyZXR1cm4gbmV3IG1sKGUuYSx0LG1zKHQuRGgoKSxlLmMpKTtjYXNlIDQxOnJldHVybiBuZXcgeGwobChPZihlLmMpLDI5KSxlLmEsdCxtcyh0LkRoKCksZS5jKSk7Y2FzZSA1MDpyZXR1cm4gbmV3IGlmdChsKE9mKGUuYyksMjkpLGUuYSx0LG1zKHQuRGgoKSxlLmMpKTtjYXNlIDU6cmV0dXJuIG5ldyBhNGUoZS5hLHQsbXModC5EaCgpLGUuYyksZS5kLm4pO2Nhc2UgNDc6cmV0dXJuIG5ldyBZcnQoZS5hLHQsbXModC5EaCgpLGUuYyksZS5kLm4pO2Nhc2UgNzpyZXR1cm4gbmV3IG50KGUuYSx0LG1zKHQuRGgoKSxlLmMpLGUuZC5uKTtjYXNlIDQ5OnJldHVybiBuZXcgVjgoZS5hLHQsbXModC5EaCgpLGUuYyksZS5kLm4pO2Nhc2UgOTpyZXR1cm4gbmV3IFBudChlLmEsdCxtcyh0LkRoKCksZS5jKSk7Y2FzZSAxMTpyZXR1cm4gbmV3IE5udChlLmEsdCxtcyh0LkRoKCksZS5jKSk7Y2FzZSAxMzpyZXR1cm4gbmV3IHl5ZShlLmEsdCxtcyh0LkRoKCksZS5jKSk7Y2FzZSAxNTpyZXR1cm4gbmV3IEpxKGUuYSx0LG1zKHQuRGgoKSxlLmMpKTtjYXNlIDE3OnJldHVybiBuZXcgRm50KGUuYSx0LG1zKHQuRGgoKSxlLmMpKTtjYXNlIDE5OnJldHVybiBuZXcgJDUoZS5hLHQsbXModC5EaCgpLGUuYykpO2Nhc2UgMjE6cmV0dXJuIG5ldyB4eWUoZS5hLHQsbXModC5EaCgpLGUuYykpO2Nhc2UgMjM6cmV0dXJuIG5ldyBGTyhlLmEsdCxtcyh0LkRoKCksZS5jKSk7Y2FzZSAyNTpyZXR1cm4gbmV3IEpydChlLmEsdCxtcyh0LkRoKCksZS5jKSxlLmQubik7Y2FzZSAyNzpyZXR1cm4gbmV3IExuKGUuYSx0LG1zKHQuRGgoKSxlLmMpLGUuZC5uKTtjYXNlIDI5OnJldHVybiBuZXcgUXJ0KGUuYSx0LG1zKHQuRGgoKSxlLmMpLGUuZC5uKTtjYXNlIDMxOnJldHVybiBuZXcgWHJ0KGUuYSx0LG1zKHQuRGgoKSxlLmMpLGUuZC5uKTtjYXNlIDMzOnJldHVybiBuZXcgYzRlKGUuYSx0LG1zKHQuRGgoKSxlLmMpLGUuZC5uKTtjYXNlIDM1OnJldHVybiBuZXcgbzRlKGUuYSx0LG1zKHQuRGgoKSxlLmMpLGUuZC5uKTtjYXNlIDM3OnJldHVybiBuZXcgZmFlKGUuYSx0LG1zKHQuRGgoKSxlLmMpLGUuZC5uKTtjYXNlIDM5OnJldHVybiBuZXcgcEgoZS5hLHQsbXModC5EaCgpLGUuYyksZS5kLm4pO2Nhc2UgNDA6cmV0dXJuIG5ldyBMcyh0LG1zKHQuRGgoKSxlLmMpKTtkZWZhdWx0OnRocm93IHVlKG5ldyBBYygiVW5rbm93biBmZWF0dXJlIHN0eWxlOiAiK2UuZSkpfX1mdW5jdGlvbiBFd3QoZSl7dmFyIHQsbixyLGEsbyxmLGcsdztmb3Iobz0wLGE9ZS5hLmIsdz1ScihlLmEsMCk7dy5iIT13LmQuYzspe2lmKGc9bChCcih3KSwyNDApLGY9KG8rMSkvKGErMSksIWUuYyYmIWUuZClyZXR1cm47ZS5jJiYhZS5kPyhlLmc9ITAsZS5iPT0oSnMoKSx1Yyk/KHI9ZS5jLmUuYitlLmMuZi5iK2UuZSoobysxKSx0PW5ldyBsdCh6ZShHZShRKGUuYywoUWkoKSxrMCkpKSkrZS5lLHIpLG49bmV3IGx0KHplKEdlKFEoZS5jLGMxKSkpLWUuZSxyKSk6ZS5iPT12Yz8ocj1lLmMuZS5iK2UuYy5mLmIrZS5lKihvKzEpLHQ9bmV3IGx0KHplKEdlKFEoZS5jLChRaSgpLGMxKSkpKS1lLmUsciksbj1uZXcgbHQoemUoR2UoUShlLmMsazApKSkrZS5lLHIpKTplLmI9PXdmPyhyPWUuYy5lLmErZS5jLmYuYStlLmUqKG8rMSksdD1uZXcgbHQocix6ZShHZShRKGUuYywoUWkoKSxrMCkpKSkrZS5lKSxuPW5ldyBsdChyLHplKEdlKFEoZS5jLGMxKSkpLWUuZSkpOihyPWUuYy5lLmErZS5jLmYuYStlLmUqKG8rMSksdD1uZXcgbHQocix6ZShHZShRKGUuYywoUWkoKSxjMSkpKSktZS5lKSxuPW5ldyBsdChyLHplKEdlKFEoZS5jLGswKSkpK2UuZSkpKTplLmMmJmUuZD9lLmI9PShKcygpLHVjKT8ocj1lLmQuZS5iKmYrKGUuYy5lLmIrZS5jLmYuYikqKDEtZiksdD1uZXcgbHQoemUoR2UoUShlLmMsKFFpKCksazApKSkpK2UuZSxyKSxuPW5ldyBsdCh6ZShHZShRKGUuYyxjMSkpKS1lLmUscikpOmUuYj09dmM/KHI9ZS5kLmUuYipmKyhlLmMuZS5iK2UuYy5mLmIpKigxLWYpLHQ9bmV3IGx0KHplKEdlKFEoZS5jLChRaSgpLGMxKSkpKS1lLmUsciksbj1uZXcgbHQoemUoR2UoUShlLmMsazApKSkrZS5lLHIpKTplLmI9PXdmPyhyPWUuZC5lLmEqZisoZS5jLmUuYStlLmMuZi5hKSooMS1mKSx0PW5ldyBsdChyLHplKEdlKFEoZS5jLChRaSgpLGswKSkpKStlLmUpLG49bmV3IGx0KHIsemUoR2UoUShlLmMsYzEpKSktZS5lKSk6KHI9ZS5kLmUuYSpmKyhlLmMuZS5hK2UuYy5mLmEpKigxLWYpLHQ9bmV3IGx0KHIsemUoR2UoUShlLmMsKFFpKCksYzEpKSkpLWUuZSksbj1uZXcgbHQocix6ZShHZShRKGUuYyxrMCkpKStlLmUpKTooZS5mPSEwLGUuYj09KEpzKCksdWMpPyhyPWUuZC5lLmItZS5lKihvKzEpLHQ9bmV3IGx0KHplKEdlKFEoZS5kLChRaSgpLGswKSkpKStlLmUsciksbj1uZXcgbHQoemUoR2UoUShlLmQsYzEpKSktZS5lLHIpKTplLmI9PXZjPyhyPWUuZC5lLmItZS5lKihvKzEpLHQ9bmV3IGx0KHplKEdlKFEoZS5kLChRaSgpLGMxKSkpKS1lLmUsciksbj1uZXcgbHQoemUoR2UoUShlLmQsazApKSkrZS5lLHIpKTplLmI9PXdmPyhyPWUuZC5lLmEtZS5lKihvKzEpLHQ9bmV3IGx0KHIsemUoR2UoUShlLmQsKFFpKCksazApKSkpK2UuZSksbj1uZXcgbHQocix6ZShHZShRKGUuZCxjMSkpKS1lLmUpKToocj1lLmQuZS5hLWUuZSoobysxKSx0PW5ldyBsdChyLHplKEdlKFEoZS5kLChRaSgpLGMxKSkpKS1lLmUpLG49bmV3IGx0KHIsemUoR2UoUShlLmQsazApKSkrZS5lKSkpLGwoZy5hLDgpLmE9dC5hLGwoZy5hLDgpLmI9dC5iLGcuYi5hPW4uYSxnLmIuYj1uLmIsKytvfX1mdW5jdGlvbiBXSW4oZSx0LG4scixhLG8pe3ZhciBmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlO3N3aXRjaCh0KXtjYXNlIDcxOmc9ci5xLmdldEZ1bGxZZWFyKCktTGI+PS0xOTAwPzE6MCxuPj00P2hpKGUsaGUobGUoenQsMSksZHQsMiw2LFtSd3Qsand0XSlbZ10pOmhpKGUsaGUobGUoenQsMSksZHQsMiw2LFsiQkMiLCJBRCJdKVtnXSk7YnJlYWs7Y2FzZSAxMjE6aDZuKGUsbixyKTticmVhaztjYXNlIDc3Ok1fbihlLG4scik7YnJlYWs7Y2FzZSAxMDc6dz1hLnEuZ2V0SG91cnMoKSx3PT0wP2FnKGUsMjQsbik6YWcoZSx3LG4pO2JyZWFrO2Nhc2UgODM6SFRuKGUsbixhKTticmVhaztjYXNlIDY5OkM9ci5xLmdldERheSgpLG49PTU/aGkoZSxoZShsZSh6dCwxKSxkdCwyLDYsWyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0pW0NdKTpuPT00P2hpKGUsaGUobGUoenQsMSksZHQsMiw2LFtRbGUsSmxlLFpsZSxlaGUsdGhlLG5oZSxyaGVdKVtDXSk6aGkoZSxoZShsZSh6dCwxKSxkdCwyLDYsWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSlbQ10pO2JyZWFrO2Nhc2UgOTc6YS5xLmdldEhvdXJzKCk+PTEyJiZhLnEuZ2V0SG91cnMoKTwyND9oaShlLGhlKGxlKHp0LDEpLGR0LDIsNixbIkFNIiwiUE0iXSlbMV0pOmhpKGUsaGUobGUoenQsMSksZHQsMiw2LFsiQU0iLCJQTSJdKVswXSk7YnJlYWs7Y2FzZSAxMDQ6TD1hLnEuZ2V0SG91cnMoKSUxMixMPT0wP2FnKGUsMTIsbik6YWcoZSxMLG4pO2JyZWFrO2Nhc2UgNzU6Qj1hLnEuZ2V0SG91cnMoKSUxMixhZyhlLEIsbik7YnJlYWs7Y2FzZSA3Mjp6PWEucS5nZXRIb3VycygpLGFnKGUseixuKTticmVhaztjYXNlIDk5OlY9ci5xLmdldERheSgpLG49PTU/aGkoZSxoZShsZSh6dCwxKSxkdCwyLDYsWyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0pW1ZdKTpuPT00P2hpKGUsaGUobGUoenQsMSksZHQsMiw2LFtRbGUsSmxlLFpsZSxlaGUsdGhlLG5oZSxyaGVdKVtWXSk6bj09Mz9oaShlLGhlKGxlKHp0LDEpLGR0LDIsNixbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdKVtWXSk6YWcoZSxWLDEpO2JyZWFrO2Nhc2UgNzY6Sj1yLnEuZ2V0TW9udGgoKSxuPT01P2hpKGUsaGUobGUoenQsMSksZHQsMiw2LFsiSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0pW0pdKTpuPT00P2hpKGUsaGUobGUoenQsMSksZHQsMiw2LFskbGUsemxlLHFsZSxIbGUsX3gsVmxlLFVsZSxHbGUsS2xlLFdsZSxZbGUsWGxlXSlbSl0pOm49PTM/aGkoZSxoZShsZSh6dCwxKSxkdCwyLDYsWyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLF94LCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSlbSl0pOmFnKGUsSisxLG4pO2JyZWFrO2Nhc2UgODE6dGU9ci5xLmdldE1vbnRoKCkvM3wwLG48ND9oaShlLGhlKGxlKHp0LDEpLGR0LDIsNixbIlExIiwiUTIiLCJRMyIsIlE0Il0pW3RlXSk6aGkoZSxoZShsZSh6dCwxKSxkdCwyLDYsWyIxc3QgcXVhcnRlciIsIjJuZCBxdWFydGVyIiwiM3JkIHF1YXJ0ZXIiLCI0dGggcXVhcnRlciJdKVt0ZV0pO2JyZWFrO2Nhc2UgMTAwOmZlPXIucS5nZXREYXRlKCksYWcoZSxmZSxuKTticmVhaztjYXNlIDEwOTpFPWEucS5nZXRNaW51dGVzKCksYWcoZSxFLG4pO2JyZWFrO2Nhc2UgMTE1OmY9YS5xLmdldFNlY29uZHMoKSxhZyhlLGYsbik7YnJlYWs7Y2FzZSAxMjI6bjw0P2hpKGUsby5jWzBdKTpoaShlLG8uY1sxXSk7YnJlYWs7Y2FzZSAxMTg6aGkoZSxvLmIpO2JyZWFrO2Nhc2UgOTA6bjwzP2hpKGUsQmtuKG8pKTpuPT0zP2hpKGUsemtuKG8pKTpoaShlLHFrbihvLmEpKTticmVhaztkZWZhdWx0OnJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIFdrZShlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmUsb3QsU3QsY24sYW4sQm4sam4sdXIsb2k7aWYoZW10KHQpLHc9bChPZSgoIXQuYiYmKHQuYj1uZXcgTG4oX3IsdCw0LDcpKSx0LmIpLDApLDg0KSxDPWwoT2UoKCF0LmMmJih0LmM9bmV3IExuKF9yLHQsNSw4KSksdC5jKSwwKSw4NCksZz1iYyh3KSxFPWJjKEMpLGY9KCF0LmEmJih0LmE9bmV3IG50KGNzLHQsNiw2KSksdC5hKS5pPT0wP251bGw6bChPZSgoIXQuYSYmKHQuYT1uZXcgbnQoY3MsdCw2LDYpKSx0LmEpLDApLDE2NiksU3Q9bChjcihlLmEsZyksMTApLGpuPWwoY3IoZS5hLEUpLDEwKSxjbj1udWxsLHVyPW51bGwsRGUodywxOTMpJiYob3Q9bChjcihlLmEsdyksMzA1KSxEZShvdCwxMik/Y249bChvdCwxMik6RGUob3QsMTApJiYoU3Q9bChvdCwxMCksY249bChqdChTdC5qLDApLDEyKSkpLERlKEMsMTkzKSYmKEJuPWwoY3IoZS5hLEMpLDMwNSksRGUoQm4sMTIpP3VyPWwoQm4sMTIpOkRlKEJuLDEwKSYmKGpuPWwoQm4sMTApLHVyPWwoanQoam4uaiwwKSwxMikpKSwhU3R8fCFqbil0aHJvdyB1ZShuZXcgSTgoIlRoZSBzb3VyY2Ugb3IgdGhlIHRhcmdldCBvZiBlZGdlICIrdCsiIGNvdWxkIG5vdCBiZSBmb3VuZC4gVGhpcyB1c3VhbGx5IGhhcHBlbnMgd2hlbiBhbiBlZGdlIGNvbm5lY3RzIGEgbm9kZSBsYWlkIG91dCBieSBFTEsgTGF5ZXJlZCB0byBhIG5vZGUgaW4gYW5vdGhlciBsZXZlbCBvZiBoaWVyYXJjaHkgbGFpZCBvdXQgYnkgZWl0aGVyIGFub3RoZXIgaW5zdGFuY2Ugb2YgRUxLIExheWVyZWQgb3IgYW5vdGhlciBsYXlvdXQgYWxnb3JpdGhtIGFsbHRvZ2V0aGVyLiBUaGUgZm9ybWVyIGNhbiBiZSBzb2x2ZWQgYnkgc2V0dGluZyB0aGUgaGllcmFyY2h5SGFuZGxpbmcgb3B0aW9uIHRvIElOQ0xVREVfQ0hJTERSRU4uIikpO2ZvcihKPW5ldyBUdyxwYyhKLHQpLHJ0KEosKGZ0KCksemkpLHQpLHJ0KEosKE50KCksY2MpLG51bGwpLHo9bChRKHIsTHUpLDIxKSxTdD09am4mJnouRmMoKEhvKCksR0wpKSxjbnx8KFplPShxbygpLHp1KSxhbj1udWxsLGYmJlA1KGwoUShTdCxNcyksMTAxKSkmJihhbj1uZXcgbHQoZi5qLGYuayksVmN0KGFuLFdPKHQpKSx2dXQoYW4sbiksTHkoRSxnKSYmKFplPSRsLE9pKGFuLFN0Lm4pKSksY249dHZ0KFN0LGFuLFplLHIpKSx1cnx8KFplPShxbygpLCRsKSxvaT1udWxsLGYmJlA1KGwoUShqbixNcyksMTAxKSkmJihvaT1uZXcgbHQoZi5iLGYuYyksVmN0KG9pLFdPKHQpKSx2dXQob2ksbikpLHVyPXR2dChqbixvaSxaZSxlbyhqbikpKSxwbyhKLGNuKSxGYShKLHVyKSwoY24uZS5jLmxlbmd0aD4xfHxjbi5nLmMubGVuZ3RoPjF8fHVyLmUuYy5sZW5ndGg+MXx8dXIuZy5jLmxlbmd0aD4xKSYmei5GYygoSG8oKSxVTCkpLEI9bmV3IG9yKCghdC5uJiYodC5uPW5ldyBudChlYyx0LDEsNykpLHQubikpO0IuZSE9Qi5pLmdjKCk7KWlmKEw9bChncihCKSwxMzUpLCFSdChCdChhdChMLG12KSkpJiZMLmEpc3dpdGNoKHRlPU9jZShMKSx2dChKLmIsdGUpLGwoUSh0ZSxqZCksMjc4KS5nKXtjYXNlIDE6Y2FzZSAyOnouRmMoKEhvKCksalQpKTticmVhaztjYXNlIDA6ei5GYygoSG8oKSxSVCkpLHJ0KHRlLGpkLChGMSgpLG5DKSl9aWYobz1sKFEocixKTCksMzIyKSxmZT1sKFEocix5VyksMzIzKSxhPW89PShkQSgpLG1CKXx8ZmU9PShPQSgpLHZkZSksZiYmKCFmLmEmJihmLmE9bmV3IFlzKHFoLGYsNSkpLGYuYSkuaSE9MCYmYSl7Zm9yKFRlPVFOKGYpLFY9bmV3IGJsLCRlPVJyKFRlLDApOyRlLmIhPSRlLmQuYzspTWU9bChCcigkZSksOCksdWkoVixuZXcgRW8oTWUpKTtydChKLHFMZSxWKX1yZXR1cm4gSn1mdW5jdGlvbiBZSW4oZSx0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuLGpuLHVyLG9pLHdzO2Zvcihhbj0wLEJuPTAsU3Q9bmV3IFByLFplPWwoZmgodnkoZmMobmV3IGJuKG51bGwsbmV3IGtuKGUuYiwxNikpLG5ldyBKdGUpLG5ldyBzbmUpKSwxNykuYSsxLGNuPVdlKFZyLGRpLDI4LFplLDE1LDEpLHRlPVdlKFZyLGRpLDI4LFplLDE1LDEpLEo9MDtKPFplO0orKyljbltKXT0wLHRlW0pdPTA7Zm9yKHc9bCh5YyhWNWUobmV3IGJuKG51bGwsbmV3IGtuKGUuYSwxNikpKSxQbChuZXcgenIsbmV3IGh0LG5ldyBGbixoZShsZShvYywxKSxpdCwxMDgsMCxbKEZsKCksRWMpXSkpKSwxNSksQz13LktjKCk7Qy5PYigpOylpZihFPWwoQy5QYigpLDY1KSx1cj1sKFEoRS5iLChIYygpLCRkKSksMTcpLmEsd3M9bChRKEUuYywkZCksMTcpLmEsJGU9d3MtdXIsJGU+MSlmb3IoZz11cisxO2c8d3M7ZysrKXtpZihMPWcsb3Q9bCh5YyhGaShuZXcgYm4obnVsbCxuZXcga24oZS5iLDE2KSksbmV3IHdYZShMKSksUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsW0VjXSkpKSwxNSksVj0wLHQ9PShKcygpLHVjKXx8dD09dmMpe2ZvcihvdC5qZChuZXcgcm5lKSxWPTA7VjxvdC5nYygpJiYoZmU9KGctdXIpLyh3cy11ciksIShsKG90LlhiKFYpLDQwKS5lLmI+RS5iLmUuYiooMS1mZSkrRS5jLmUuYipmZSkpO1YrKyk7aWYob3QuZ2MoKT4wJiYob2k9RS5hLmI9PTA/SmEoRS5iLmUpOmwobzAoRS5hKSw4KSxNZT1PaShKYShsKG90LlhiKG90LmdjKCktMSksNDApLmUpLGwob3QuWGIob3QuZ2MoKS0xKSw0MCkuZiksQj1PaShKYShsKG90LlhiKDApLDQwKS5lKSxsKG90LlhiKDApLDQwKS5mKSxWPj1vdC5nYygpLTEmJm9pLmI+TWUuYiYmRS5jLmUuYj5NZS5ifHxWPD0wJiZvaS5iPEIuYSYmRS5jLmUuYjxCLmIpKWNvbnRpbnVlfWVsc2V7Zm9yKG90LmpkKG5ldyBpbmUpLFY9MDtWPG90LmdjKCkmJihmZT0oZy11cikvKHdzLXVyKSwhKGwob3QuWGIoViksNDApLmUuYT5FLmIuZS5hKigxLWZlKStFLmMuZS5hKmZlKSk7VisrKTtpZihvdC5nYygpPjAmJihvaT1FLmEuYj09MD9KYShFLmIuZSk6bChvMChFLmEpLDgpLE1lPU9pKEphKGwob3QuWGIob3QuZ2MoKS0xKSw0MCkuZSksbChvdC5YYihvdC5nYygpLTEpLDQwKS5mKSxCPU9pKEphKGwob3QuWGIoMCksNDApLmUpLGwob3QuWGIoMCksNDApLmYpLFY+PW90LmdjKCktMSYmb2kuYT5NZS5hJiZFLmMuZS5hPk1lLmF8fFY8PTAmJm9pLmE8Qi5hJiZFLmMuZS5hPEIuYSkpY29udGludWV9YT1uZXcgcWEsbz1uZXcgcWEsdWkoRS5hLGEpLHVpKEUuYSxvKSxmPW5ldyB3YWUoYSxvLEUpLFRlPVEwKGwwKGcsMzIpLHZhKFYsVm8pKSxIdShTdCxhcChUZSkpPyh6PWwoY3IoU3QsYXAoVGUpKSw2NzUpLHVpKHouYSxmKSxVZyh6LmIpPyRtKHouYSxuZXcgaG5lKTokbSh6LmEsbmV3IGZuZSksRXd0KHopKTooej1uZXcgRmR0KFY9PTA/bnVsbDpsKG90LlhiKFYtMSksNDApLFY9PW90LmdjKCk/bnVsbDpsKG90LlhiKFYpLDQwKSxmLGUpLGtpKFN0LGFwKFRlKSx6KSksdD09dWN8fHQ9PXZjPyh6LmYmJnouZC5lLmI8PXplKEdlKFEoZSwoUWkoKSxGZGUpKSkpJiYrK2FuLHouZyYmei5jLmUuYit6LmMuZi5iPj16ZShHZShRKGUsKFFpKCksaUllKSkpKSYmKytCbik6KHouZiYmei5kLmUuYTw9emUoR2UoUShlLChRaSgpLEJkZSkpKSkmJisrYW4sei5nJiZ6LmMuZS5hK3ouYy5mLmE+PXplKEdlKFEoZSwoUWkoKSxySWUpKSkpJiYrK0JuKX1lbHNlICRlPT0wP2I5ZShFKTokZTwwJiYoKytjblt1cl0sKyt0ZVt3c10sam49VkluKEUsdCxlLG5ldyBjYShwdChhbikscHQoQm4pKSxuLHIsbmV3IGNhKHB0KHRlW3dzXSkscHQoY25bdXJdKSkpLGFuPWwoam4uYSwxNykuYSxCbj1sKGpuLmIsMTcpLmEpfWZ1bmN0aW9uIFhJbihlLHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGU7aWYocj10LHc9bixlLmImJnIuaj09KEN0KCksZXIpJiZ3Lmo9PShDdCgpLGVyKSYmKFRlPXIscj13LHc9VGUpLEh1KGUuYSxyKSl7aWYoVzAobChjcihlLmEsciksNDkpLHcpKXJldHVybiAxfWVsc2Uga2koZS5hLHIsbmV3IEtzKTtpZihIdShlLmEsdykpe2lmKFcwKGwoY3IoZS5hLHcpLDQ5KSxyKSlyZXR1cm4tMX1lbHNlIGtpKGUuYSx3LG5ldyBLcyk7aWYoSHUoZS5kLHIpKXtpZihXMChsKGNyKGUuZCxyKSw0OSksdykpcmV0dXJuLTF9ZWxzZSBraShlLmQscixuZXcgS3MpO2lmKEh1KGUuZCx3KSl7aWYoVzAobChjcihlLmEsdyksNDkpLHIpKXJldHVybiAxfWVsc2Uga2koZS5kLHcsbmV3IEtzKTtpZihyLmohPXcuailyZXR1cm4gZmU9UmxuKHIuaix3LmopLGZlPT0tMT9kZihlLHcscik6ZGYoZSxyLHcpLGZlO2lmKHIuZS5jLmxlbmd0aCE9MCYmdy5lLmMubGVuZ3RoIT0wKXtpZihlLmImJihmZT1qMHQocix3KSxmZSE9MCkpcmV0dXJuIGZlPT0tMT9kZihlLHcscik6ZmU9PTEmJmRmKGUscix3KSxmZTtpZihvPWwoanQoci5lLDApLDE4KS5jLmksQz1sKGp0KHcuZSwwKSwxOCkuYy5pLG89PUMpcmV0dXJuIGE9bChRKGwoanQoci5lLDApLDE4KSwoZnQoKSxLaSkpLDE3KS5hLEU9bChRKGwoanQody5lLDApLDE4KSxLaSksMTcpLmEsYT5FP2RmKGUscix3KTpkZihlLHcsciksYTxFPy0xOmE+RT8xOjA7Zm9yKFY9ZS5jLEo9MCx0ZT1WLmxlbmd0aDtKPHRlOysrSil7aWYoej1WW0pdLHo9PW8pcmV0dXJuIGRmKGUscix3KSwxO2lmKHo9PUMpcmV0dXJuIGRmKGUsdyxyKSwtMX19cmV0dXJuIHIuZy5jLmxlbmd0aCE9MCYmdy5nLmMubGVuZ3RoIT0wPyhnPWwoUShyLChmdCgpLFUxZSkpLDEwKSxCPWwoUSh3LFUxZSksMTApLGUuZT09KEVkKCkseGRlKSYmZyYmQiYmbnMoZyxLaSkmJm5zKEIsS2kpPyhhPWwoUShnLEtpKSwxNykuYSxFPWwoUShCLEtpKSwxNykuYSxhPkU/ZGYoZSxyLHcpOmRmKGUsdyxyKSxhPEU/LTE6YT5FPzE6MCk6ZS5iJiYoZmU9ajB0KHIsdyksZmUhPTApPyhmZT09LTE/ZGYoZSx3LHIpOmZlPT0xJiZkZihlLHIsdyksZmUpOihmPTAsTD0wLG5zKGwoanQoci5nLDApLDE4KSxLaSkmJihmPWwoUShsKGp0KHIuZywwKSwxOCksS2kpLDE3KS5hKSxucyhsKGp0KHcuZywwKSwxOCksS2kpJiYoTD1sKFEobChqdChyLmcsMCksMTgpLEtpKSwxNykuYSksZyYmZz09Qj9SdChCdChRKGwoanQoci5nLDApLDE4KSxXMSkpKSYmIVJ0KEJ0KFEobChqdCh3LmcsMCksMTgpLFcxKSkpPyhkZihlLHIsdyksMSk6IVJ0KEJ0KFEobChqdChyLmcsMCksMTgpLFcxKSkpJiZSdChCdChRKGwoanQody5nLDApLDE4KSxXMSkpKT8oZGYoZSx3LHIpLC0xKTooZj5MP2RmKGUscix3KTpkZihlLHcsciksZjxMPy0xOmY+TD8xOjApOihlLmYmJihlLmYuX2IoZykmJihmPWwoZS5mLnhjKGcpLDE3KS5hKSxlLmYuX2IoQikmJihMPWwoZS5mLnhjKEIpLDE3KS5hKSksZj5MP2RmKGUscix3KTpkZihlLHcsciksZjxMPy0xOmY+TD8xOjApKSk6ci5lLmMubGVuZ3RoIT0wJiZ3LmcuYy5sZW5ndGghPTA/KGRmKGUscix3KSwxKTpyLmcuYy5sZW5ndGghPTAmJncuZS5jLmxlbmd0aCE9MD8oZGYoZSx3LHIpLC0xKTpucyhyLChmdCgpLEtpKSkmJm5zKHcsS2kpPyhhPWwoUShyLEtpKSwxNykuYSxFPWwoUSh3LEtpKSwxNykuYSxhPkU/ZGYoZSxyLHcpOmRmKGUsdyxyKSxhPEU/LTE6YT5FPzE6MCk6KGRmKGUsdyxyKSwtMSl9ZnVuY3Rpb24gUUluKGUpe2UuZ2J8fChlLmdiPSEwLGUuYj1xYyhlLDApLFNzKGUuYiwxOCksaXMoZS5iLDE5KSxlLmE9cWMoZSwxKSxTcyhlLmEsMSksaXMoZS5hLDIpLGlzKGUuYSwzKSxpcyhlLmEsNCksaXMoZS5hLDUpLGUubz1xYyhlLDIpLFNzKGUubyw4KSxTcyhlLm8sOSksaXMoZS5vLDEwKSxpcyhlLm8sMTEpLGlzKGUubywxMiksaXMoZS5vLDEzKSxpcyhlLm8sMTQpLGlzKGUubywxNSksaXMoZS5vLDE2KSxpcyhlLm8sMTcpLGlzKGUubywxOCksaXMoZS5vLDE5KSxpcyhlLm8sMjApLGlzKGUubywyMSksaXMoZS5vLDIyKSxpcyhlLm8sMjMpLHNjKGUubyksc2MoZS5vKSxzYyhlLm8pLHNjKGUubyksc2MoZS5vKSxzYyhlLm8pLHNjKGUubyksc2MoZS5vKSxzYyhlLm8pLHNjKGUubyksZS5wPXFjKGUsMyksU3MoZS5wLDIpLFNzKGUucCwzKSxTcyhlLnAsNCksU3MoZS5wLDUpLGlzKGUucCw2KSxpcyhlLnAsNyksc2MoZS5wKSxzYyhlLnApLGUucT1xYyhlLDQpLFNzKGUucSw4KSxlLnY9cWMoZSw1KSxpcyhlLnYsOSksc2MoZS52KSxzYyhlLnYpLHNjKGUudiksZS53PXFjKGUsNiksU3MoZS53LDIpLFNzKGUudywzKSxTcyhlLncsNCksaXMoZS53LDUpLGUuQj1xYyhlLDcpLGlzKGUuQiwxKSxzYyhlLkIpLHNjKGUuQiksc2MoZS5CKSxlLlE9cWMoZSw4KSxpcyhlLlEsMCksc2MoZS5RKSxlLlI9cWMoZSw5KSxTcyhlLlIsMSksZS5TPXFjKGUsMTApLHNjKGUuUyksc2MoZS5TKSxzYyhlLlMpLHNjKGUuUyksc2MoZS5TKSxzYyhlLlMpLHNjKGUuUyksc2MoZS5TKSxzYyhlLlMpLHNjKGUuUyksc2MoZS5TKSxzYyhlLlMpLHNjKGUuUyksc2MoZS5TKSxzYyhlLlMpLGUuVD1xYyhlLDExKSxpcyhlLlQsMTApLGlzKGUuVCwxMSksaXMoZS5ULDEyKSxpcyhlLlQsMTMpLGlzKGUuVCwxNCksc2MoZS5UKSxzYyhlLlQpLGUuVT1xYyhlLDEyKSxTcyhlLlUsMiksU3MoZS5VLDMpLGlzKGUuVSw0KSxpcyhlLlUsNSksaXMoZS5VLDYpLGlzKGUuVSw3KSxzYyhlLlUpLGUuVj1xYyhlLDEzKSxpcyhlLlYsMTApLGUuVz1xYyhlLDE0KSxTcyhlLlcsMTgpLFNzKGUuVywxOSksU3MoZS5XLDIwKSxpcyhlLlcsMjEpLGlzKGUuVywyMiksaXMoZS5XLDIzKSxlLmJiPXFjKGUsMTUpLFNzKGUuYmIsMTApLFNzKGUuYmIsMTEpLFNzKGUuYmIsMTIpLFNzKGUuYmIsMTMpLFNzKGUuYmIsMTQpLFNzKGUuYmIsMTUpLFNzKGUuYmIsMTYpLGlzKGUuYmIsMTcpLHNjKGUuYmIpLHNjKGUuYmIpLGUuZWI9cWMoZSwxNiksU3MoZS5lYiwyKSxTcyhlLmViLDMpLFNzKGUuZWIsNCksU3MoZS5lYiw1KSxTcyhlLmViLDYpLFNzKGUuZWIsNyksaXMoZS5lYiw4KSxpcyhlLmViLDkpLGUuYWI9cWMoZSwxNyksU3MoZS5hYiwwKSxTcyhlLmFiLDEpLGUuSD1xYyhlLDE4KSxpcyhlLkgsMCksaXMoZS5ILDEpLGlzKGUuSCwyKSxpcyhlLkgsMyksaXMoZS5ILDQpLGlzKGUuSCw1KSxzYyhlLkgpLGUuZGI9cWMoZSwxOSksaXMoZS5kYiwyKSxlLmM9VGkoZSwyMCksZS5kPVRpKGUsMjEpLGUuZT1UaShlLDIyKSxlLmY9VGkoZSwyMyksZS5pPVRpKGUsMjQpLGUuZz1UaShlLDI1KSxlLmo9VGkoZSwyNiksZS5rPVRpKGUsMjcpLGUubj1UaShlLDI4KSxlLnI9VGkoZSwyOSksZS5zPVRpKGUsMzApLGUudD1UaShlLDMxKSxlLnU9VGkoZSwzMiksZS5mYj1UaShlLDMzKSxlLkE9VGkoZSwzNCksZS5DPVRpKGUsMzUpLGUuRD1UaShlLDM2KSxlLkY9VGkoZSwzNyksZS5HPVRpKGUsMzgpLGUuST1UaShlLDM5KSxlLko9VGkoZSw0MCksZS5MPVRpKGUsNDEpLGUuTT1UaShlLDQyKSxlLk49VGkoZSw0MyksZS5PPVRpKGUsNDQpLGUuUD1UaShlLDQ1KSxlLlg9VGkoZSw0NiksZS5ZPVRpKGUsNDcpLGUuWj1UaShlLDQ4KSxlLiQ9VGkoZSw0OSksZS5fPVRpKGUsNTApLGUuY2I9VGkoZSw1MSksZS5LPVRpKGUsNTIpKX1mdW5jdGlvbiBKSW4oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuLGpuLHVyO2ZvcihmPW5ldyBvcyxvdD1sKFEobiwoTnQoKSxSaCkpLDg4KSxKPTAsS2EoZiwoIXQuYSYmKHQuYT1uZXcgbnQoQWksdCwxMCwxMSkpLHQuYSkpO2YuYiE9MDspQz1sKGYuYj09MD9udWxsOihtcihmLmIhPTApLGFmKGYsZi5hLmEpKSwyNyksRT1kcyhDKSwocWUoYXQoRSx5ZykpIT09cWUoKEVkKCksRTIpKXx8cWUoYXQoRSxkdikpPT09cWUoKGwyKCksQlQpKXx8cWUoYXQoRSxkdikpPT09cWUoKGwyKCksUFQpKXx8UnQoQnQoYXQoRSxmMykpKXx8cWUoYXQoRSxnNCkpIT09cWUoKEttKCksYzQpKXx8cWUoYXQoRSx6YikpPT09cWUoKE5mKCksdjMpKXx8cWUoYXQoRSx6YikpPT09cWUoKE5mKCkseDQpKXx8cWUoYXQoRSxwdikpPT09cWUoKHAyKCksV1QpKXx8cWUoYXQoRSxwdikpPT09cWUoKHAyKCksWVQpKSkmJiFSdChCdChhdChDLGZXKSkpJiZIaShDLChmdCgpLEtpKSxwdChKKyspKSxmZT0hUnQoQnQoYXQoQyxtdikpKSxmZSYmKEI9KCFDLmEmJihDLmE9bmV3IG50KEFpLEMsMTAsMTEpKSxDLmEpLmkhPTAsVj1feG4oQyksej1xZShhdChDLHA0KSk9PT1xZSgocnAoKSxBMikpLHVyPSFQMShDLChwaSgpLGVDKSl8fFN1dChlaShhdChDLGVDKSkpLCRlPW51bGwsdXImJnomJihCfHxWKSYmKCRlPVBtdChDKSxydCgkZSxSaCxvdCksbnMoJGUsQ0IpJiZOSmUobmV3IEQ4ZSh6ZShHZShRKCRlLENCKSkpKSwkZSksbChhdChDLGJ2KSwxODEpLmdjKCkhPTAmJihMPSRlLElzKG5ldyBibihudWxsLCghQy5jJiYoQy5jPW5ldyBudChIbCxDLDksOSkpLG5ldyBrbihDLmMsMTYpKSksbmV3IHpXZShMKSksX2J0KEMsJGUpKSksU3Q9bixjbj1sKGNyKGUuYSxkcyhDKSksMTApLGNuJiYoU3Q9Y24uZSksTWU9Y3d0KGUsQyxTdCksJGUmJihNZS5lPSRlLCRlLmU9TWUsS2EoZiwoIUMuYSYmKEMuYT1uZXcgbnQoQWksQywxMCwxMSkpLEMuYSkpKSk7Zm9yKEo9MCxDcyhmLHQsZi5jLmIsZi5jKTtmLmIhPTA7KXtmb3Iobz1sKGYuYj09MD9udWxsOihtcihmLmIhPTApLGFmKGYsZi5hLmEpKSwyNyksdz1uZXcgb3IoKCFvLmImJihvLmI9bmV3IG50KGpzLG8sMTIsMykpLG8uYikpO3cuZSE9dy5pLmdjKCk7KWc9bChncih3KSw3NCksZW10KGcpLChxZShhdCh0LHlnKSkhPT1xZSgoRWQoKSxFMikpfHxxZShhdCh0LGR2KSk9PT1xZSgobDIoKSxCVCkpfHxxZShhdCh0LGR2KSk9PT1xZSgobDIoKSxQVCkpfHxSdChCdChhdCh0LGYzKSkpfHxxZShhdCh0LGc0KSkhPT1xZSgoS20oKSxjNCkpfHxxZShhdCh0LHpiKSk9PT1xZSgoTmYoKSx2MykpfHxxZShhdCh0LHpiKSk9PT1xZSgoTmYoKSx4NCkpfHxxZShhdCh0LHB2KSk9PT1xZSgocDIoKSxXVCkpfHxxZShhdCh0LHB2KSk9PT1xZSgocDIoKSxZVCkpKSYmSGkoZywoZnQoKSxLaSkscHQoSisrKSksQm49YmMobChPZSgoIWcuYiYmKGcuYj1uZXcgTG4oX3IsZyw0LDcpKSxnLmIpLDApLDg0KSksam49YmMobChPZSgoIWcuYyYmKGcuYz1uZXcgTG4oX3IsZyw1LDgpKSxnLmMpLDApLDg0KSksIShSdChCdChhdChnLG12KSkpfHxSdChCdChhdChCbixtdikpKXx8UnQoQnQoYXQoam4sbXYpKSkpJiYodGU9cXcoZykmJlJ0KEJ0KGF0KEJuLGI0KSkpJiZSdChCdChhdChnLGd2KSkpLFplPW8sdGV8fEx5KGpuLEJuKT9aZT1CbjpMeShCbixqbikmJihaZT1qbiksU3Q9bixjbj1sKGNyKGUuYSxaZSksMTApLGNuJiYoU3Q9Y24uZSksVGU9V2tlKGUsZyxaZSxTdCkscnQoVGUsKGZ0KCksUkxlKSxKQ24oZSxnLHQsbikpKTtpZih6PXFlKGF0KG8scDQpKT09PXFlKChycCgpLEEyKSkseilmb3IoYT1uZXcgb3IoKCFvLmEmJihvLmE9bmV3IG50KEFpLG8sMTAsMTEpKSxvLmEpKTthLmUhPWEuaS5nYygpOylyPWwoZ3IoYSksMjcpLHVyPSFQMShyLChwaSgpLGVDKSl8fFN1dChlaShhdChyLGVDKSkpLGFuPXFlKGF0KHIscDQpKT09PXFlKEEyKSx1ciYmYW4mJkNzKGYscixmLmMuYixmLmMpfX1mdW5jdGlvbiBmdCgpe2Z0PVU7dmFyIGUsdDt6aT1uZXcgVWkoTkVlKSxSTGU9bmV3IFVpKCJjb29yZGluYXRlT3JpZ2luIiksSzFlPW5ldyBVaSgicHJvY2Vzc29ycyIpLEZMZT1uZXcgdnMoImNvbXBvdW5kTm9kZSIsKEhuKCksITEpKSx4Qj1uZXcgdnMoImluc2lkZUNvbm5lY3Rpb25zIiwhMSkscUxlPW5ldyBVaSgib3JpZ2luYWxCZW5kcG9pbnRzIiksSExlPW5ldyBVaSgib3JpZ2luYWxEdW1teU5vZGVQb3NpdGlvbiIpLFZMZT1uZXcgVWkoIm9yaWdpbmFsTGFiZWxFZGdlIiksV0w9bmV3IFVpKCJyZXByZXNlbnRlZExhYmVscyIpLEtMPW5ldyBVaSgiZW5kTGFiZWxzIiksS3g9bmV3IFVpKCJlbmRMYWJlbC5vcmlnaW4iKSxZeD1uZXcgdnMoImxhYmVsU2lkZSIsKEloKCksZUYpKSxSNj1uZXcgdnMoIm1heEVkZ2VUaGlja25lc3MiLDApLFcxPW5ldyB2cygicmV2ZXJzZWQiLCExKSxYeD1uZXcgVWkoQzN0KSxvMT1uZXcgdnMoImxvbmdFZGdlU291cmNlIixudWxsKSwkZj1uZXcgdnMoImxvbmdFZGdlVGFyZ2V0IixudWxsKSxmND1uZXcgdnMoImxvbmdFZGdlSGFzTGFiZWxEdW1taWVzIiwhMSksa0I9bmV3IHZzKCJsb25nRWRnZUJlZm9yZUxhYmVsRHVtbXkiLCExKSxzVz1uZXcgdnMoImVkZ2VDb25zdHJhaW50IiwoVm0oKSxNMWUpKSx1Mz1uZXcgVWkoImluTGF5ZXJMYXlvdXRVbml0IiksaHY9bmV3IHZzKCJpbkxheWVyQ29uc3RyYWludCIsKGVwKCksd0IpKSxXeD1uZXcgdnMoImluTGF5ZXJTdWNjZXNzb3JDb25zdHJhaW50IixuZXcgYnQpLHpMZT1uZXcgdnMoImluTGF5ZXJTdWNjZXNzb3JDb25zdHJhaW50QmV0d2Vlbk5vbkR1bW1pZXMiLCExKSxqbD1uZXcgVWkoInBvcnREdW1teSIpLGlXPW5ldyB2cygiY3Jvc3NpbmdIaW50IixwdCgwKSksTHU9bmV3IHZzKCJncmFwaFByb3BlcnRpZXMiLCh0PWwoSzAoRjFlKSw5KSxuZXcgWmgodCxsKGMwKHQsdC5sZW5ndGgpLDkpLDApKSksV2M9bmV3IHZzKCJleHRlcm5hbFBvcnRTaWRlIiwoQ3QoKSxQYykpLCRMZT1uZXcgdnMoImV4dGVybmFsUG9ydFNpemUiLG5ldyBxYSkscTFlPW5ldyBVaSgiZXh0ZXJuYWxQb3J0UmVwbGFjZWREdW1taWVzIiksYVc9bmV3IFVpKCJleHRlcm5hbFBvcnRSZXBsYWNlZER1bW15IikscHA9bmV3IHZzKCJleHRlcm5hbFBvcnRDb25uZWN0aW9ucyIsKGU9bChLMChPbyksOSksbmV3IFpoKGUsbChjMChlLGUubGVuZ3RoKSw5KSwwKSkpLGwzPW5ldyB2cyhiM3QsMCksQkxlPW5ldyBVaSgiYmFyeWNlbnRlckFzc29jaWF0ZXMiKSxReD1uZXcgVWkoIlRvcFNpZGVDb21tZW50cyIpLEd4PW5ldyBVaSgiQm90dG9tU2lkZUNvbW1lbnRzIiksclc9bmV3IFVpKCJDb21tZW50Q29ubmVjdGlvblBvcnQiKSxWMWU9bmV3IHZzKCJpbnB1dENvbGxlY3QiLCExKSxHMWU9bmV3IHZzKCJvdXRwdXRDb2xsZWN0IiwhMSkseUI9bmV3IHZzKCJjeWNsaWMiLCExKSxqTGU9bmV3IFVpKCJjcm9zc0hpZXJhcmNoeU1hcCIpLFkxZT1uZXcgVWkoInRhcmdldE9mZnNldCIpLG5ldyB2cygic3BsaW5lTGFiZWxTaXplIixuZXcgcWEpLCQ2PW5ldyBVaSgic3BhY2luZ3MiKSxvVz1uZXcgdnMoInBhcnRpdGlvbkNvbnN0cmFpbnQiLCExKSxjMz1uZXcgVWkoImJyZWFraW5nUG9pbnQuaW5mbyIpLEtMZT1uZXcgVWkoInNwbGluZXMuc3Vydml2aW5nRWRnZSIpLGZ2PW5ldyBVaSgic3BsaW5lcy5yb3V0ZS5zdGFydCIpLHo2PW5ldyBVaSgic3BsaW5lcy5lZGdlQ2hhaW4iKSxHTGU9bmV3IFVpKCJvcmlnaW5hbFBvcnRDb25zdHJhaW50cyIpLGgzPW5ldyBVaSgic2VsZkxvb3BIb2xkZXIiKSx6VD1uZXcgVWkoInNwbGluZXMubnNQb3J0WSIpLEtpPW5ldyBVaSgibW9kZWxPcmRlciIpLFUxZT1uZXcgVWkoImxvbmdFZGdlVGFyZ2V0Tm9kZSIpLGpiPW5ldyB2cyhRM3QsITEpLGo2PW5ldyB2cyhRM3QsITEpLEgxZT1uZXcgVWkoImxheWVyQ29uc3RyYWludHMuaGlkZGVuTm9kZXMiKSxVTGU9bmV3IFVpKCJsYXllckNvbnN0cmFpbnRzLm9wcG9zaWRlUG9ydCIpLFcxZT1uZXcgVWkoInRhcmdldE5vZGUubW9kZWxPcmRlciIpfWZ1bmN0aW9uIFpJbihlLHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWO2ZvcihMPVJyKGUuYiwwKTtMLmIhPUwuZC5jOylpZihDPWwoQnIoTCksNDApLCF2bihDLmMsREcpKWZvcihvPWwoeWMobmV3IGJuKG51bGwsbmV3IGtuKGNFbihDLGUpLDE2KSksUGwobmV3IHpyLG5ldyBodCxuZXcgRm4saGUobGUob2MsMSksaXQsMTA4LDAsWyhGbCgpLEVjKV0pKSksMTUpLHQ9PShKcygpLHVjKXx8dD09dmM/by5qZChuZXcgbm5lKTpvLmpkKG5ldyBvJCksVj1vLmdjKCksYT0wO2E8VjthKyspZj1WPT0xPy41OigxK2EpLyhWKzEpLHQ9PXVjPyhFPXplKEdlKFEoQywoUWkoKSxrMCkpKSksQy5lLmErQy5mLmErcjxFP2tvKGwoby5YYihhKSw2NSkuYSxuZXcgbHQoRStuLEMuZS5iK0MuZi5iKmYpKTpsKG8uWGIoYSksNjUpLmEuYj4wJiYoZz1sKG8wKGwoby5YYihhKSw2NSkuYSksOCkuYSxCPUMuZS5hK0MuZi5hLzIsdz1sKG8wKGwoby5YYihhKSw2NSkuYSksOCkuYix6PUMuZS5iK0MuZi5iLzIscj4wJiZiLk1hdGguYWJzKHcteikvKGIuTWF0aC5hYnMoZy1CKS80MCk+NTAmJih6Pnc/a28obChvLlhiKGEpLDY1KS5hLG5ldyBsdChDLmUuYStDLmYuYStyLzUuMyxDLmUuYitDLmYuYipmLXIvMikpOmtvKGwoby5YYihhKSw2NSkuYSxuZXcgbHQoQy5lLmErQy5mLmErci81LjMsQy5lLmIrQy5mLmIqZityLzIpKSkpLGtvKGwoby5YYihhKSw2NSkuYSxuZXcgbHQoQy5lLmErQy5mLmEsQy5lLmIrQy5mLmIqZikpKTp0PT12Yz8oRT16ZShHZShRKEMsKFFpKCksYzEpKSkpLEMuZS5hLXI+RT9rbyhsKG8uWGIoYSksNjUpLmEsbmV3IGx0KEUtbixDLmUuYitDLmYuYipmKSk6bChvLlhiKGEpLDY1KS5hLmI+MCYmKGc9bChvMChsKG8uWGIoYSksNjUpLmEpLDgpLmEsQj1DLmUuYStDLmYuYS8yLHc9bChvMChsKG8uWGIoYSksNjUpLmEpLDgpLmIsej1DLmUuYitDLmYuYi8yLHI+MCYmYi5NYXRoLmFicyh3LXopLyhiLk1hdGguYWJzKGctQikvNDApPjUwJiYoej53P2tvKGwoby5YYihhKSw2NSkuYSxuZXcgbHQoQy5lLmEtci81LjMsQy5lLmIrQy5mLmIqZi1yLzIpKTprbyhsKG8uWGIoYSksNjUpLmEsbmV3IGx0KEMuZS5hLXIvNS4zLEMuZS5iK0MuZi5iKmYrci8yKSkpKSxrbyhsKG8uWGIoYSksNjUpLmEsbmV3IGx0KEMuZS5hLEMuZS5iK0MuZi5iKmYpKSk6dD09d2Y/KEU9emUoR2UoUShDLChRaSgpLGswKSkpKSxDLmUuYitDLmYuYityPEU/a28obChvLlhiKGEpLDY1KS5hLG5ldyBsdChDLmUuYStDLmYuYSpmLEUrbikpOmwoby5YYihhKSw2NSkuYS5iPjAmJihnPWwobzAobChvLlhiKGEpLDY1KS5hKSw4KS5hLEI9Qy5lLmErQy5mLmEvMix3PWwobzAobChvLlhiKGEpLDY1KS5hKSw4KS5iLHo9Qy5lLmIrQy5mLmIvMixyPjAmJmIuTWF0aC5hYnMoZy1CKS8oYi5NYXRoLmFicyh3LXopLzQwKT41MCYmKEI+Zz9rbyhsKG8uWGIoYSksNjUpLmEsbmV3IGx0KEMuZS5hK0MuZi5hKmYtci8yLEMuZS5iK3IvNS4zK0MuZi5iKSk6a28obChvLlhiKGEpLDY1KS5hLG5ldyBsdChDLmUuYStDLmYuYSpmK3IvMixDLmUuYityLzUuMytDLmYuYikpKSksa28obChvLlhiKGEpLDY1KS5hLG5ldyBsdChDLmUuYStDLmYuYSpmLEMuZS5iK0MuZi5iKSkpOihFPXplKEdlKFEoQywoUWkoKSxjMSkpKSksQzB0KGwoby5YYihhKSw2NSksZSk/a28obChvLlhiKGEpLDY1KS5hLG5ldyBsdChDLmUuYStDLmYuYSpmLGwobzAobChvLlhiKGEpLDY1KS5hKSw4KS5iKSk6Qy5lLmItcj5FP2tvKGwoby5YYihhKSw2NSkuYSxuZXcgbHQoQy5lLmErQy5mLmEqZixFLW4pKTpsKG8uWGIoYSksNjUpLmEuYj4wJiYoZz1sKG8wKGwoby5YYihhKSw2NSkuYSksOCkuYSxCPUMuZS5hK0MuZi5hLzIsdz1sKG8wKGwoby5YYihhKSw2NSkuYSksOCkuYix6PUMuZS5iK0MuZi5iLzIscj4wJiZiLk1hdGguYWJzKGctQikvKGIuTWF0aC5hYnMody16KS80MCk+NTAmJihCPmc/a28obChvLlhiKGEpLDY1KS5hLG5ldyBsdChDLmUuYStDLmYuYSpmLXIvMixDLmUuYi1yLzUuMykpOmtvKGwoby5YYihhKSw2NSkuYSxuZXcgbHQoQy5lLmErQy5mLmEqZityLzIsQy5lLmItci81LjMpKSkpLGtvKGwoby5YYihhKSw2NSkuYSxuZXcgbHQoQy5lLmErQy5mLmEqZixDLmUuYikpKX1mdW5jdGlvbiBwaSgpe3BpPVU7dmFyIGUsdDtlQz1uZXcgVWkoQnl0KSxhNz1uZXcgVWkoRnl0KSxlTmU9KG9nKCksU2dlKSxBU3Q9bmV3IHBuKHFUZSxlTmUpLFo2PW5ldyBwbihPeCxudWxsKSxMU3Q9bmV3IFVpKHRTZSksbk5lPShZbSgpLHJzKExnZSxoZShsZShNZ2UsMSksaXQsMjk4LDAsW0FnZV0pKSksVUI9bmV3IHBuKFNHLG5OZSksR0I9bmV3IHBuKFZQLChIbigpLCExKSksck5lPShKcygpLEoxKSx4dj1uZXcgcG4oZ2ZlLHJOZSksYU5lPShpcCgpLEhnZSksc05lPW5ldyBwbihIUCxhTmUpLElTdD1uZXcgcG4oWkNlLCExKSx1TmU9KHJwKCksb1kpLG43PW5ldyBwbihDRyx1TmUpLHZOZT1uZXcgbHcoMTIpLF8yPW5ldyBwbihYdyx2TmUpLFdCPW5ldyBwbihoTCwhMSksTmdlPW5ldyBwbihBRywhMSksWUI9bmV3IHBuKGZMLCExKSxFTmU9KFJhKCksV2IpLF9NPW5ldyBwbihOaGUsRU5lKSxuOT1uZXcgVWkoX0cpLFhCPW5ldyBVaShOUCksemdlPW5ldyBVaShvRykscWdlPW5ldyBVaShsTCksbE5lPW5ldyBibCx4Mz1uZXcgcG4oWlRlLGxOZSksRFN0PW5ldyBwbihuQ2UsITEpLE9TdD1uZXcgcG4ockNlLCExKSxoTmU9bmV3IHNfLHRDPW5ldyBwbihzQ2UsaE5lKSxyWT1uZXcgcG4oJFRlLCExKSxGU3Q9bmV3IHBuKFJ5dCwxKSx0Nz1uZXcgVWkoanl0KSxlNz1uZXcgVWkoJHl0KSxBTT1uZXcgcG4oUFAsITEpLG5ldyBwbih6eXQsITApLHB0KDApLG5ldyBwbihxeXQscHQoMTAwKSksbmV3IHBuKEh5dCwhMSkscHQoMCksbmV3IHBuKFZ5dCxwdCg0ZTMpKSxwdCgwKSxuZXcgcG4oVXl0LHB0KDQwMCkpLG5ldyBwbihHeXQsITEpLG5ldyBwbihLeXQsITEpLG5ldyBwbihXeXQsITApLG5ldyBwbihZeXQsITEpLHROZT0oVlYoKSxLZ2UpLE1TdD1uZXcgcG4oZVNlLHROZSksUlN0PW5ldyBwbihMVGUsMTApLGpTdD1uZXcgcG4oTVRlLDEwKSxfTmU9bmV3IHBuKF9oZSwyMCksJFN0PW5ldyBwbihEVGUsMTApLEFOZT1uZXcgcG4oT2hlLDIpLExOZT1uZXcgcG4oZGZlLDEwKSxNTmU9bmV3IHBuKElUZSwwKSxpWT1uZXcgcG4oUFRlLDUpLEROZT1uZXcgcG4oT1RlLDEpLElOZT1uZXcgcG4oTlRlLDEpLEV2PW5ldyBwbihKeSwyMCkselN0PW5ldyBwbihCVGUsMTApLFBOZT1uZXcgcG4oRlRlLDEwKSxyOT1uZXcgVWkoUlRlKSxOTmU9bmV3IG5udCxPTmU9bmV3IHBuKGFDZSxOTmUpLFBTdD1uZXcgVWkoYmZlKSx3TmU9ITEsTlN0PW5ldyBwbihwZmUsd05lKSxkTmU9bmV3IGx3KDUpLGZOZT1uZXcgcG4oVVRlLGROZSksZ05lPShxeSgpLHQ9bChLMChLbyksOSksbmV3IFpoKHQsbChjMCh0LHQubGVuZ3RoKSw5KSwwKSkscjc9bmV3IHBuKGZULGdOZSkseE5lPSh0NigpLEtiKSx5TmU9bmV3IHBuKFdUZSx4TmUpLEJnZT1uZXcgVWkoWVRlKSxGZ2U9bmV3IFVpKFhUZSksUmdlPW5ldyBVaShRVGUpLFBnZT1uZXcgVWkoSlRlKSxwTmU9KGU9bChLMChCTSksOSksbmV3IFpoKGUsbChjMChlLGUubGVuZ3RoKSw5KSwwKSksa3Y9bmV3IHBuKHg2LHBOZSksbU5lPXVuKChabCgpLGFDKSksVWI9bmV3IHBuKE54LG1OZSksYk5lPW5ldyBsdCgwLDApLGk3PW5ldyBwbihQeCxiTmUpLEM0PW5ldyBwbihoVCwhMSksaU5lPShGMSgpLG5DKSxJZ2U9bmV3IHBuKGVDZSxpTmUpLERnZT1uZXcgcG4oY0csITEpLHB0KDEpLG5ldyBwbihYeXQsbnVsbCksa05lPW5ldyBVaShpQ2UpLGpnZT1uZXcgVWkodENlKSxTTmU9KEN0KCksUGMpLHM3PW5ldyBwbih6VGUsU05lKSxyaD1uZXcgVWkoalRlKSxUTmU9KFJsKCksdW4oWWIpKSxTND1uZXcgcG4oZFQsVE5lKSwkZ2U9bmV3IHBuKEdUZSwhMSksQ05lPW5ldyBwbihLVGUsITApLGFZPW5ldyBwbihCUCwxKSxCTmU9bmV3IHBuKG5TZSxudWxsKSxRQj1uZXcgcG4oRlAsMTUwKSxzWT1uZXcgcG4oUlAsMS40MTQpLGk5PW5ldyBwbihRdyxudWxsKSxxU3Q9bmV3IHBuKHJTZSwxKSxLQj1uZXcgcG4oSFRlLCExKSxPZ2U9bmV3IHBuKFZUZSwhMSksb05lPW5ldyBwbihBaGUsMSksY05lPSh2VSgpLFVnZSksbmV3IHBuKFF5dCxjTmUpLEJTdD0hMCxWU3Q9KGR4KCksTDQpLFVTdD1MNCxIU3Q9TDR9ZnVuY3Rpb24gdm8oKXt2bz1VLFBBZT1uZXcgV3MoIkRJUkVDVElPTl9QUkVQUk9DRVNTT1IiLDApLElBZT1uZXcgV3MoIkNPTU1FTlRfUFJFUFJPQ0VTU09SIiwxKSxENj1uZXcgV3MoIkVER0VfQU5EX0xBWUVSX0NPTlNUUkFJTlRfRURHRV9SRVZFUlNFUiIsMiksZjFlPW5ldyBXcygiSU5URVJBQ1RJVkVfRVhURVJOQUxfUE9SVF9QT1NJVElPTkVSIiwzKSxlTGU9bmV3IFdzKCJQQVJUSVRJT05fUFJFUFJPQ0VTU09SIiw0KSxESz1uZXcgV3MoIkxBQkVMX0RVTU1ZX0lOU0VSVEVSIiw1KSx6Sz1uZXcgV3MoIlNFTEZfTE9PUF9QUkVQUk9DRVNTT1IiLDYpLGw0PW5ldyBXcygiTEFZRVJfQ09OU1RSQUlOVF9QUkVQUk9DRVNTT1IiLDcpLEpBZT1uZXcgV3MoIlBBUlRJVElPTl9NSURQUk9DRVNTT1IiLDgpLEhBZT1uZXcgV3MoIkhJR0hfREVHUkVFX05PREVfTEFZRVJfUFJPQ0VTU09SIiw5KSxYQWU9bmV3IFdzKCJOT0RFX1BST01PVElPTiIsMTApLHU0PW5ldyBXcygiTEFZRVJfQ09OU1RSQUlOVF9QT1NUUFJPQ0VTU09SIiwxMSksWkFlPW5ldyBXcygiUEFSVElUSU9OX1BPU1RQUk9DRVNTT1IiLDEyKSwkQWU9bmV3IFdzKCJISUVSQVJDSElDQUxfUE9SVF9DT05TVFJBSU5UX1BST0NFU1NPUiIsMTMpLHRMZT1uZXcgV3MoIlNFTUlfSU5URVJBQ1RJVkVfQ1JPU1NNSU5fUFJPQ0VTU09SIiwxNCksU0FlPW5ldyBXcygiQlJFQUtJTkdfUE9JTlRfSU5TRVJURVIiLDE1KSxQSz1uZXcgV3MoIkxPTkdfRURHRV9TUExJVFRFUiIsMTYpLGQxZT1uZXcgV3MoIlBPUlRfU0lERV9QUk9DRVNTT1IiLDE3KSxMSz1uZXcgV3MoIklOVkVSVEVEX1BPUlRfUFJPQ0VTU09SIiwxOCksUks9bmV3IFdzKCJQT1JUX0xJU1RfU09SVEVSIiwxOSksckxlPW5ldyBXcygiU09SVF9CWV9JTlBVVF9PUkRFUl9PRl9NT0RFTCIsMjApLEZLPW5ldyBXcygiTk9SVEhfU09VVEhfUE9SVF9QUkVQUk9DRVNTT1IiLDIxKSxfQWU9bmV3IFdzKCJCUkVBS0lOR19QT0lOVF9QUk9DRVNTT1IiLDIyKSxRQWU9bmV3IFdzKEgzdCwyMyksaUxlPW5ldyBXcyhWM3QsMjQpLGpLPW5ldyBXcygiU0VMRl9MT09QX1BPUlRfUkVTVE9SRVIiLDI1KSxuTGU9bmV3IFdzKCJTSU5HTEVfRURHRV9HUkFQSF9XUkFQUEVSIiwyNiksTUs9bmV3IFdzKCJJTl9MQVlFUl9DT05TVFJBSU5UX1BST0NFU1NPUiIsMjcpLEZBZT1uZXcgV3MoIkVORF9OT0RFX1BPUlRfTEFCRUxfTUFOQUdFTUVOVF9QUk9DRVNTT1IiLDI4KSxXQWU9bmV3IFdzKCJMQUJFTF9BTkRfTk9ERV9TSVpFX1BST0NFU1NPUiIsMjkpLEtBZT1uZXcgV3MoIklOTkVSTU9TVF9OT0RFX01BUkdJTl9DQUxDVUxBVE9SIiwzMCkscUs9bmV3IFdzKCJTRUxGX0xPT1BfUk9VVEVSIiwzMSksTUFlPW5ldyBXcygiQ09NTUVOVF9OT0RFX01BUkdJTl9DQUxDVUxBVE9SIiwzMiksQUs9bmV3IFdzKCJFTkRfTEFCRUxfUFJFUFJPQ0VTU09SIiwzMyksT0s9bmV3IFdzKCJMQUJFTF9EVU1NWV9TV0lUQ0hFUiIsMzQpLExBZT1uZXcgV3MoIkNFTlRFUl9MQUJFTF9NQU5BR0VNRU5UX1BST0NFU1NPUiIsMzUpLExUPW5ldyBXcygiTEFCRUxfU0lERV9TRUxFQ1RPUiIsMzYpLFVBZT1uZXcgV3MoIkhZUEVSRURHRV9EVU1NWV9NRVJHRVIiLDM3KSx6QWU9bmV3IFdzKCJISUVSQVJDSElDQUxfUE9SVF9EVU1NWV9TSVpFX1BST0NFU1NPUiIsMzgpLFlBZT1uZXcgV3MoIkxBWUVSX1NJWkVfQU5EX0dSQVBIX0hFSUdIVF9DQUxDVUxBVE9SIiwzOSksekw9bmV3IFdzKCJISUVSQVJDSElDQUxfUE9SVF9QT1NJVElPTl9QUk9DRVNTT1IiLDQwKSxPQWU9bmV3IFdzKCJDT05TVFJBSU5UU19QT1NUUFJPQ0VTU09SIiw0MSksREFlPW5ldyBXcygiQ09NTUVOVF9QT1NUUFJPQ0VTU09SIiw0MiksR0FlPW5ldyBXcygiSFlQRVJOT0RFX1BST0NFU1NPUiIsNDMpLHFBZT1uZXcgV3MoIkhJRVJBUkNISUNBTF9QT1JUX09SVEhPR09OQUxfRURHRV9ST1VURVIiLDQ0KSxOSz1uZXcgV3MoIkxPTkdfRURHRV9KT0lORVIiLDQ1KSwkSz1uZXcgV3MoIlNFTEZfTE9PUF9QT1NUUFJPQ0VTU09SIiw0NiksQUFlPW5ldyBXcygiQlJFQUtJTkdfUE9JTlRfUkVNT1ZFUiIsNDcpLEJLPW5ldyBXcygiTk9SVEhfU09VVEhfUE9SVF9QT1NUUFJPQ0VTU09SIiw0OCksVkFlPW5ldyBXcygiSE9SSVpPTlRBTF9DT01QQUNUT1IiLDQ5KSxJSz1uZXcgV3MoIkxBQkVMX0RVTU1ZX1JFTU9WRVIiLDUwKSxSQWU9bmV3IFdzKCJGSU5BTF9TUExJTkVfQkVORFBPSU5UU19DQUxDVUxBVE9SIiw1MSksQkFlPW5ldyBXcygiRU5EX0xBQkVMX1NPUlRFUiIsNTIpLGdCPW5ldyBXcygiUkVWRVJTRURfRURHRV9SRVNUT1JFUiIsNTMpLF9LPW5ldyBXcygiRU5EX0xBQkVMX1BPU1RQUk9DRVNTT1IiLDU0KSxqQWU9bmV3IFdzKCJISUVSQVJDSElDQUxfTk9ERV9SRVNJWkVSIiw1NSksTkFlPW5ldyBXcygiRElSRUNUSU9OX1BPU1RQUk9DRVNTT1IiLDU2KX1mdW5jdGlvbiBZa2UoKXtZa2U9VSxpTWU9KHBOKCksWEspLHI5dD1uZXcgcG4oVkVlLGlNZSkscDl0PW5ldyBwbihVRWUsKEhuKCksITEpKSxsTWU9KHpIKCksejFlKSx5OXQ9bmV3IHBuKGZHLGxNZSksUDl0PW5ldyBwbihHRWUsITEpLEI5dD1uZXcgcG4oS0VlLCEwKSxMeHQ9bmV3IHBuKFdFZSwhMSksdk1lPShkTigpLGtkZSksUTl0PW5ldyBwbihZRWUsdk1lKSxwdCgxKSxza3Q9bmV3IHBuKFhFZSxwdCg3KSksYWt0PW5ldyBwbihRRWUsITEpLGI5dD1uZXcgcG4oSkVlLCExKSxyTWU9KGwyKCksQTFlKSxuOXQ9bmV3IHBuKHpoZSxyTWUpLGRNZT0ocDIoKSxnZGUpLE45dD1uZXcgcG4ocVAsZE1lKSxoTWU9KGhmKCksRUIpLFM5dD1uZXcgcG4oWkVlLGhNZSkscHQoLTEpLEM5dD1uZXcgcG4oZVRlLG51bGwpLHB0KC0xKSxfOXQ9bmV3IHBuKHRUZSxwdCgtMSkpLHB0KC0xKSxBOXQ9bmV3IHBuKHFoZSxwdCg0KSkscHQoLTEpLE05dD1uZXcgcG4oSGhlLHB0KDIpKSxmTWU9KE5mKCksQVcpLE85dD1uZXcgcG4oVmhlLGZNZSkscHQoMCksSTl0PW5ldyBwbihVaGUscHQoMCkpLEU5dD1uZXcgcG4oR2hlLHB0KElpKSksbk1lPShkQSgpLEhMKSx0OXQ9bmV3IHBuKHBMLG5NZSksJHh0PW5ldyBwbihuVGUsITEpLEt4dD1uZXcgcG4oS2hlLC4xKSxaeHQ9bmV3IHBuKFdoZSwhMSksWXh0PW5ldyBwbihyVGUsbnVsbCksWHh0PW5ldyBwbihpVGUsbnVsbCkscHQoLTEpLFF4dD1uZXcgcG4oc1RlLG51bGwpLHB0KC0xKSxKeHQ9bmV3IHBuKGFUZSxwdCgtMSkpLHB0KDApLHp4dD1uZXcgcG4ob1RlLHB0KDQwKSksdE1lPSh2RSgpLGoxZSksVXh0PW5ldyBwbihZaGUsdE1lKSxlTWU9dkIscXh0PW5ldyBwbihkRyxlTWUpLG1NZT0oT0EoKSxyTSksWDl0PW5ldyBwbihrNixtTWUpLHo5dD1uZXcgVWkoZ0cpLGdNZT0oY04oKSxKSyksRjl0PW5ldyBwbihYaGUsZ01lKSxwTWU9KFdOKCksWkspLGo5dD1uZXcgcG4oUWhlLHBNZSksVjl0PW5ldyBwbihKaGUsLjMpLEc5dD1uZXcgVWkoWmhlKSxiTWU9KEJ5KCksX1cpLEs5dD1uZXcgcG4oZWZlLGJNZSksb01lPShMVigpLFRkZSksYzl0PW5ldyBwbihjVGUsb01lKSxjTWU9KHlBKCksU2RlKSx1OXQ9bmV3IHBuKHVUZSxjTWUpLHVNZT0oU0UoKSxhTSksbDl0PW5ldyBwbihwRyx1TWUpLGY5dD1uZXcgcG4oYkcsLjIpLGE5dD1uZXcgcG4odGZlLDIpLHRrdD1uZXcgcG4obFRlLG51bGwpLHJrdD1uZXcgcG4oaFRlLDEwKSxua3Q9bmV3IHBuKGZUZSwxMCksaWt0PW5ldyBwbihkVGUsMjApLHB0KDApLEo5dD1uZXcgcG4oZ1RlLHB0KDApKSxwdCgwKSxaOXQ9bmV3IHBuKHBUZSxwdCgwKSkscHQoMCksZWt0PW5ldyBwbihiVGUscHQoMCkpLE14dD1uZXcgcG4obmZlLCExKSxYTGU9KHpFKCksVkwpLEl4dD1uZXcgcG4obVRlLFhMZSksWUxlPShKSCgpLFMxZSksRHh0PW5ldyBwbih2VGUsWUxlKSx2OXQ9bmV3IHBuKG1HLCExKSxwdCgwKSxtOXQ9bmV3IHBuKHJmZSxwdCgxNikpLHB0KDApLHc5dD1uZXcgcG4oaWZlLHB0KDUpKSx4TWU9KE9WKCksTGRlKSxTa3Q9bmV3IHBuKGZwLHhNZSksb2t0PW5ldyBwbih2RywxMCksbGt0PW5ldyBwbih3RywxKSx5TWU9KHBWKCksWUspLG1rdD1uZXcgcG4oYkwseU1lKSxka3Q9bmV3IFVpKHNmZSksd01lPXB0KDEpLHB0KDApLHBrdD1uZXcgcG4oYWZlLHdNZSksa01lPShnVigpLEFkZSksTWt0PW5ldyBwbih5RyxrTWUpLF9rdD1uZXcgVWkoeEcpLGtrdD1uZXcgcG4oa0csITApLHlrdD1uZXcgcG4oRUcsMiksVGt0PW5ldyBwbihvZmUsITApLGFNZT0oeVUoKSxRSyksczl0PW5ldyBwbih3VGUsYU1lKSxzTWU9KHl4KCksT1QpLGk5dD1uZXcgcG4oeVRlLHNNZSksWkxlPShFZCgpLEUyKSxqeHQ9bmV3IHBuKFRHLFpMZSksUnh0PW5ldyBwbih4VGUsITEpLEZ4dD1uZXcgcG4oa1RlLCExKSxRTGU9KEttKCksYzQpLE94dD1uZXcgcG4oY2ZlLFFMZSksSkxlPShFQSgpLHBkZSksQnh0PW5ldyBwbihFVGUsSkxlKSxOeHQ9bmV3IHBuKHVmZSwwKSxQeHQ9bmV3IHBuKGxmZSwwKSxrOXQ9TDFlLHg5dD1tQixMOXQ9Q1csRDl0PUNXLFQ5dD1kZGUsV3h0PShycCgpLEEyKSxlOXQ9SEwsR3h0PUhMLEh4dD1ITCxWeHQ9QTIscTl0PWlNLEg5dD1yTSxSOXQ9ck0sJDl0PXJNLFU5dD13ZGUsWTl0PWlNLFc5dD1pTSxoOXQ9KGlwKCksczkpLGQ5dD1zOSxnOXQ9YU0sbzl0PUpCLGNrdD1YVCx1a3Q9azQsaGt0PVhULGZrdD1rNCx2a3Q9WFQsd2t0PWs0LGdrdD1fMWUsYmt0PVlLLERrdD1YVCxJa3Q9azQsQWt0PVhULExrdD1rNCxFa3Q9azQseGt0PWs0LENrdD1rNH1mdW5jdGlvbiBlT24oZSx0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuLGpuLHVyLG9pLHdzLFZsLGxjLEhoLGY3LFAyLEwwLE0wLF92LGg5LHJtLGY5LHFkLF9nLFMzLGQ5LGQ3LEhkLEF2LHlwLElBdCxzQmUsXzMsWU0sbHBlLGc5LFhNLEY0LFFNLGhwZSxPQXQ7Zm9yKHNCZT0wLG9pPXQsbGM9MCxQMj1vaS5sZW5ndGg7bGM8UDI7KytsYylmb3Ioam49b2lbbGNdLF9nPW5ldyBHKGpuLmopO19nLmE8X2cuYy5jLmxlbmd0aDspe2ZvcihxZD1sKHJlKF9nKSwxMiksZDk9MCxnPW5ldyBHKHFkLmcpO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwxOCksam4uYyE9Zi5kLmkuYyYmKytkOTtkOT4wJiYoZS5hW3FkLnBdPXNCZSsrKX1mb3IoWE09MCx3cz1uLEhoPTAsTDA9d3MubGVuZ3RoO0hoPEwwOysrSGgpe2Zvcihqbj13c1tIaF0sTTA9MCxfZz1uZXcgRyhqbi5qKTtfZy5hPF9nLmMuYy5sZW5ndGgmJihxZD1sKHJlKF9nKSwxMikscWQuaj09KEN0KCksUW4pKTspZm9yKGc9bmV3IEcocWQuZSk7Zy5hPGcuYy5jLmxlbmd0aDspaWYoZj1sKHJlKGcpLDE4KSxqbi5jIT1mLmMuaS5jKXsrK00wO2JyZWFrfWZvcihoOT0wLGQ3PW5ldyBVYShqbi5qLGpuLmouYy5sZW5ndGgpO2Q3LmI+MDspe2ZvcihxZD0obXIoZDcuYj4wKSxsKGQ3LmEuWGIoZDcuYz0tLWQ3LmIpLDEyKSksZDk9MCxnPW5ldyBHKHFkLmUpO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwxOCksam4uYyE9Zi5jLmkuYyYmKytkOTtkOT4wJiYocWQuaj09KEN0KCksUW4pPyhlLmFbcWQucF09WE0sKytYTSk6KGUuYVtxZC5wXT1YTStNMCtoOSwrK2g5KSl9WE0rPWg5fWZvcihTMz1uZXcgUHIsVj1uZXcgYmQsdXI9dCxWbD0wLGY3PXVyLmxlbmd0aDtWbDxmNzsrK1ZsKWZvcihqbj11cltWbF0sbHBlPW5ldyBHKGpuLmopO2xwZS5hPGxwZS5jLmMubGVuZ3RoOylmb3IoWU09bChyZShscGUpLDEyKSxnPW5ldyBHKFlNLmcpO2cuYTxnLmMuYy5sZW5ndGg7KWlmKGY9bChyZShnKSwxOCksUU09Zi5kLGpuLmMhPVFNLmkuYylpZihfMz1sKGhjKHpvKFMzLmYsWU0pKSw0NzgpLEY0PWwoaGMoem8oUzMuZixRTSkpLDQ3OCksIV8zJiYhRjQpej1uZXcgVXJ0LFYuYS56Yyh6LFYpLHZ0KHouYSxmKSx2dCh6LmQsWU0pLGp1KFMzLmYsWU0seiksdnQoei5kLFFNKSxqdShTMy5mLFFNLHopO2Vsc2UgaWYoIV8zKXZ0KEY0LmEsZiksdnQoRjQuZCxZTSksanUoUzMuZixZTSxGNCk7ZWxzZSBpZighRjQpdnQoXzMuYSxmKSx2dChfMy5kLFFNKSxqdShTMy5mLFFNLF8zKTtlbHNlIGlmKF8zPT1GNCl2dChfMy5hLGYpO2Vsc2V7Zm9yKHZ0KF8zLmEsZiksZjk9bmV3IEcoRjQuZCk7ZjkuYTxmOS5jLmMubGVuZ3RoOylybT1sKHJlKGY5KSwxMiksanUoUzMuZixybSxfMyk7cmEoXzMuYSxGNC5hKSxyYShfMy5kLEY0LmQpLFYuYS5CYyhGNCkhPW51bGx9Zm9yKEo9bChQQShWLFdlKFRPbix7MzoxLDQ6MSw1OjEsMjA0NToxfSw0NzgsVi5hLmdjKCksMCwxKSksMjA0NSksQm49dFswXS5jLElBdD1uWzBdLmMsQz1KLEw9MCxCPUMubGVuZ3RoO0w8QjsrK0wpZm9yKEU9Q1tMXSxFLmU9c0JlLEUuZj1YTSxfZz1uZXcgRyhFLmQpO19nLmE8X2cuYy5jLmxlbmd0aDspcWQ9bChyZShfZyksMTIpLEhkPWUuYVtxZC5wXSxxZC5pLmM9PUJuPyhIZDxFLmUmJihFLmU9SGQpLEhkPkUuYiYmKEUuYj1IZCkpOnFkLmkuYz09SUF0JiYoSGQ8RS5mJiYoRS5mPUhkKSxIZD5FLmMmJihFLmM9SGQpKTtmb3IobkUoSiwwLEoubGVuZ3RoLG51bGwpLGc5PVdlKFZyLGRpLDI4LEoubGVuZ3RoLDE1LDEpLHI9V2UoVnIsZGksMjgsWE0rMSwxNSwxKSxmZT0wO2ZlPEoubGVuZ3RoO2ZlKyspZzlbZmVdPUpbZmVdLmYscltnOVtmZV1dPTE7Zm9yKG89MCxUZT0wO1RlPHIubGVuZ3RoO1RlKyspcltUZV09PTE/cltUZV09bzotLW87Zm9yKEF2PTAsTWU9MDtNZTxnOS5sZW5ndGg7TWUrKylnOVtNZV0rPXJbZzlbTWVdXSxBdj1iLk1hdGgubWF4KEF2LGc5W01lXSsxKTtmb3Iodz0xO3c8QXY7KXcqPTI7Zm9yKE9BdD0yKnctMSx3LT0xLGhwZT1XZShWcixkaSwyOCxPQXQsMTUsMSksYT0wLGNuPTA7Y248ZzkubGVuZ3RoO2NuKyspZm9yKFN0PWc5W2NuXSt3LCsraHBlW1N0XTtTdD4wOylTdCUyPjAmJihhKz1ocGVbU3QrMV0pLFN0PShTdC0xKS8yfDAsKytocGVbU3RdO2Zvcihhbj1XZShNRXQsUm4sMzc0LEoubGVuZ3RoKjIsMCwxKSwkZT0wOyRlPEoubGVuZ3RoOyRlKyspYW5bMiokZV09bmV3IENIKEpbJGVdLEpbJGVdLmUsSlskZV0uYiwob0EoKSx1TSkpLGFuWzIqJGUrMV09bmV3IENIKEpbJGVdLEpbJGVdLmIsSlskZV0uZSxjTSk7Zm9yKG5FKGFuLDAsYW4ubGVuZ3RoLG51bGwpLF92PTAsWmU9MDtaZTxhbi5sZW5ndGg7WmUrKylzd2l0Y2goYW5bWmVdLmQuZyl7Y2FzZSAwOisrX3Y7YnJlYWs7Y2FzZSAxOi0tX3YsYSs9X3Z9Zm9yKHlwPVdlKE1FdCxSbiwzNzQsSi5sZW5ndGgqMiwwLDEpLG90PTA7b3Q8Si5sZW5ndGg7b3QrKyl5cFsyKm90XT1uZXcgQ0goSltvdF0sSltvdF0uZixKW290XS5jLChvQSgpLHVNKSkseXBbMipvdCsxXT1uZXcgQ0goSltvdF0sSltvdF0uYyxKW290XS5mLGNNKTtmb3IobkUoeXAsMCx5cC5sZW5ndGgsbnVsbCksX3Y9MCx0ZT0wO3RlPHlwLmxlbmd0aDt0ZSsrKXN3aXRjaCh5cFt0ZV0uZC5nKXtjYXNlIDA6KytfdjticmVhaztjYXNlIDE6LS1fdixhKz1fdn1yZXR1cm4gYX1mdW5jdGlvbiBEaSgpe0RpPVUsV009bmV3IFh2KDcpLFFQZT1uZXcgbmcoOCw5NCksbmV3IG5nKDgsNjQpLEpQZT1uZXcgbmcoOCwzNiksRUF0PW5ldyBuZyg4LDY1KSxUQXQ9bmV3IG5nKDgsMTIyKSxDQXQ9bmV3IG5nKDgsOTApLF9BdD1uZXcgbmcoOCw5OCksa0F0PW5ldyBuZyg4LDY2KSxTQXQ9bmV3IG5nKDgsNjApLEFBdD1uZXcgbmcoOCw2MiksWFBlPW5ldyBYdigxMSksTVk9bmV3IF9oKDQpLEV1KE1ZLDQ4LDU3KSxsQz1uZXcgX2goNCksRXUobEMsNDgsNTcpLEV1KGxDLDY1LDkwKSxFdShsQyw5NSw5NSksRXUobEMsOTcsMTIyKSxsOT1uZXcgX2goNCksRXUobDksOSw5KSxFdShsOSwxMCwxMCksRXUobDksMTIsMTIpLEV1KGw5LDEzLDEzKSxFdShsOSwzMiwzMiksWlBlPVV5KE1ZKSx0QmU9VXkobEMpLGVCZT1VeShsOSksdUM9bmV3IFByLEtNPW5ldyBQcix4QXQ9aGUobGUoenQsMSksZHQsMiw2LFsiQ24iLCJMdSIsIkxsIiwiTHQiLCJMbSIsIkxvIiwiTW4iLCJNZSIsIk1jIiwiTmQiLCJObCIsIk5vIiwiWnMiLCJabCIsIlpwIiwiQ2MiLCJDZiIsbnVsbCwiQ28iLCJDcyIsIlBkIiwiUHMiLCJQZSIsIlBjIiwiUG8iLCJTbSIsIlNjIiwiU2siLCJTbyIsIlBpIiwiUGYiLCJMIiwiTSIsIk4iLCJaIiwiQyIsIlAiLCJTIl0pLFdQZT1oZShsZSh6dCwxKSxkdCwyLDYsWyJCYXNpYyBMYXRpbiIsIkxhdGluLTEgU3VwcGxlbWVudCIsIkxhdGluIEV4dGVuZGVkLUEiLCJMYXRpbiBFeHRlbmRlZC1CIiwiSVBBIEV4dGVuc2lvbnMiLCJTcGFjaW5nIE1vZGlmaWVyIExldHRlcnMiLCJDb21iaW5pbmcgRGlhY3JpdGljYWwgTWFya3MiLCJHcmVlayIsIkN5cmlsbGljIiwiQXJtZW5pYW4iLCJIZWJyZXciLCJBcmFiaWMiLCJTeXJpYWMiLCJUaGFhbmEiLCJEZXZhbmFnYXJpIiwiQmVuZ2FsaSIsIkd1cm11a2hpIiwiR3VqYXJhdGkiLCJPcml5YSIsIlRhbWlsIiwiVGVsdWd1IiwiS2FubmFkYSIsIk1hbGF5YWxhbSIsIlNpbmhhbGEiLCJUaGFpIiwiTGFvIiwiVGliZXRhbiIsIk15YW5tYXIiLCJHZW9yZ2lhbiIsIkhhbmd1bCBKYW1vIiwiRXRoaW9waWMiLCJDaGVyb2tlZSIsIlVuaWZpZWQgQ2FuYWRpYW4gQWJvcmlnaW5hbCBTeWxsYWJpY3MiLCJPZ2hhbSIsIlJ1bmljIiwiS2htZXIiLCJNb25nb2xpYW4iLCJMYXRpbiBFeHRlbmRlZCBBZGRpdGlvbmFsIiwiR3JlZWsgRXh0ZW5kZWQiLCJHZW5lcmFsIFB1bmN0dWF0aW9uIiwiU3VwZXJzY3JpcHRzIGFuZCBTdWJzY3JpcHRzIiwiQ3VycmVuY3kgU3ltYm9scyIsIkNvbWJpbmluZyBNYXJrcyBmb3IgU3ltYm9scyIsIkxldHRlcmxpa2UgU3ltYm9scyIsIk51bWJlciBGb3JtcyIsIkFycm93cyIsIk1hdGhlbWF0aWNhbCBPcGVyYXRvcnMiLCJNaXNjZWxsYW5lb3VzIFRlY2huaWNhbCIsIkNvbnRyb2wgUGljdHVyZXMiLCJPcHRpY2FsIENoYXJhY3RlciBSZWNvZ25pdGlvbiIsIkVuY2xvc2VkIEFscGhhbnVtZXJpY3MiLCJCb3ggRHJhd2luZyIsIkJsb2NrIEVsZW1lbnRzIiwiR2VvbWV0cmljIFNoYXBlcyIsIk1pc2NlbGxhbmVvdXMgU3ltYm9scyIsIkRpbmdiYXRzIiwiQnJhaWxsZSBQYXR0ZXJucyIsIkNKSyBSYWRpY2FscyBTdXBwbGVtZW50IiwiS2FuZ3hpIFJhZGljYWxzIiwiSWRlb2dyYXBoaWMgRGVzY3JpcHRpb24gQ2hhcmFjdGVycyIsIkNKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvbiIsIkhpcmFnYW5hIiwiS2F0YWthbmEiLCJCb3BvbW9mbyIsIkhhbmd1bCBDb21wYXRpYmlsaXR5IEphbW8iLCJLYW5idW4iLCJCb3BvbW9mbyBFeHRlbmRlZCIsIkVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMiLCJDSksgQ29tcGF0aWJpbGl0eSIsIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEEiLCJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIiwiWWkgU3lsbGFibGVzIiwiWWkgUmFkaWNhbHMiLCJIYW5ndWwgU3lsbGFibGVzIixZNXQsIkNKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMiLCJBbHBoYWJldGljIFByZXNlbnRhdGlvbiBGb3JtcyIsIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQSIsIkNvbWJpbmluZyBIYWxmIE1hcmtzIiwiQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMiLCJTbWFsbCBGb3JtIFZhcmlhbnRzIiwiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CIiwiU3BlY2lhbHMiLCJIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcyIsIk9sZCBJdGFsaWMiLCJHb3RoaWMiLCJEZXNlcmV0IiwiQnl6YW50aW5lIE11c2ljYWwgU3ltYm9scyIsIk11c2ljYWwgU3ltYm9scyIsIk1hdGhlbWF0aWNhbCBBbHBoYW51bWVyaWMgU3ltYm9scyIsIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEIiLCJDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzIFN1cHBsZW1lbnQiLCJUYWdzIl0pLFlQZT1oZShsZShWciwxKSxkaSwyOCwxNSxbNjYzMDQsNjYzNTEsNjYzNTIsNjYzODMsNjY1NjAsNjY2MzksMTE4Nzg0LDExOTAzOSwxMTkwNDAsMTE5Mjk1LDExOTgwOCwxMjA4MzEsMTMxMDcyLDE3Mzc4MiwxOTQ1NjAsMTk1MTAzLDkxNzUwNCw5MTc2MzFdKX1mdW5jdGlvbiBZVSgpe1lVPVUsbTd0PW5ldyBvZigiT1VUX1RfTCIsMCwoQmwoKSxGZCksKG9sKCksdzApLCh0MSgpLEdjKSxHYyxoZShsZShqZiwxKSxSbiwyMSwwLFtycygocXkoKSxDMCksaGUobGUoS28sMSksaXQsOTUsMCxbUzAsRTBdKSldKSksYjd0PW5ldyBvZigiT1VUX1RfQyIsMSxCYix3MCxHYywkdSxoZShsZShqZiwxKSxSbiwyMSwwLFtycyhDMCxoZShsZShLbywxKSxpdCw5NSwwLFtTMCxtcF0pKSxycyhDMCxoZShsZShLbywxKSxpdCw5NSwwLFtTMCxtcCx6Zl0pKV0pKSx2N3Q9bmV3IG9mKCJPVVRfVF9SIiwyLHYwLHcwLEdjLEtjLGhlKGxlKGpmLDEpLFJuLDIxLDAsW3JzKEMwLGhlKGxlKEtvLDEpLGl0LDk1LDAsW1MwLFQwXSkpXSkpLGM3dD1uZXcgb2YoIk9VVF9CX0wiLDMsRmQsYTEsS2MsR2MsaGUobGUoamYsMSksUm4sMjEsMCxbcnMoQzAsaGUobGUoS28sMSksaXQsOTUsMCxbcWYsRTBdKSldKSksbzd0PW5ldyBvZigiT1VUX0JfQyIsNCxCYixhMSxLYywkdSxoZShsZShqZiwxKSxSbiwyMSwwLFtycyhDMCxoZShsZShLbywxKSxpdCw5NSwwLFtxZixtcF0pKSxycyhDMCxoZShsZShLbywxKSxpdCw5NSwwLFtxZixtcCx6Zl0pKV0pKSx1N3Q9bmV3IG9mKCJPVVRfQl9SIiw1LHYwLGExLEtjLEtjLGhlKGxlKGpmLDEpLFJuLDIxLDAsW3JzKEMwLGhlKGxlKEtvLDEpLGl0LDk1LDAsW3FmLFQwXSkpXSkpLGY3dD1uZXcgb2YoIk9VVF9MX1QiLDYsdjAsYTEsR2MsR2MsaGUobGUoamYsMSksUm4sMjEsMCxbcnMoQzAsaGUobGUoS28sMSksaXQsOTUsMCxbRTAsUzAsemZdKSldKSksaDd0PW5ldyBvZigiT1VUX0xfQyIsNyx2MCxGYiwkdSxHYyxoZShsZShqZiwxKSxSbiwyMSwwLFtycyhDMCxoZShsZShLbywxKSxpdCw5NSwwLFtFMCxFZ10pKSxycyhDMCxoZShsZShLbywxKSxpdCw5NSwwLFtFMCxFZyx6Zl0pKV0pKSxsN3Q9bmV3IG9mKCJPVVRfTF9CIiw4LHYwLHcwLEtjLEdjLGhlKGxlKGpmLDEpLFJuLDIxLDAsW3JzKEMwLGhlKGxlKEtvLDEpLGl0LDk1LDAsW0UwLHFmLHpmXSkpXSkpLHA3dD1uZXcgb2YoIk9VVF9SX1QiLDksRmQsYTEsR2MsS2MsaGUobGUoamYsMSksUm4sMjEsMCxbcnMoQzAsaGUobGUoS28sMSksaXQsOTUsMCxbVDAsUzAsemZdKSldKSksZzd0PW5ldyBvZigiT1VUX1JfQyIsMTAsRmQsRmIsJHUsS2MsaGUobGUoamYsMSksUm4sMjEsMCxbcnMoQzAsaGUobGUoS28sMSksaXQsOTUsMCxbVDAsRWddKSkscnMoQzAsaGUobGUoS28sMSksaXQsOTUsMCxbVDAsRWcsemZdKSldKSksZDd0PW5ldyBvZigiT1VUX1JfQiIsMTEsRmQsdzAsS2MsS2MsaGUobGUoamYsMSksUm4sMjEsMCxbcnMoQzAsaGUobGUoS28sMSksaXQsOTUsMCxbVDAscWYsemZdKSldKSksczd0PW5ldyBvZigiSU5fVF9MIiwxMixGZCxhMSxHYyxHYyxoZShsZShqZiwxKSxSbiwyMSwwLFtycyhqaCxoZShsZShLbywxKSxpdCw5NSwwLFtTMCxFMF0pKSxycyhqaCxoZShsZShLbywxKSxpdCw5NSwwLFtTMCxFMCx6Zl0pKV0pKSxpN3Q9bmV3IG9mKCJJTl9UX0MiLDEzLEJiLGExLEdjLCR1LGhlKGxlKGpmLDEpLFJuLDIxLDAsW3JzKGpoLGhlKGxlKEtvLDEpLGl0LDk1LDAsW1MwLG1wXSkpLHJzKGpoLGhlKGxlKEtvLDEpLGl0LDk1LDAsW1MwLG1wLHpmXSkpXSkpLGE3dD1uZXcgb2YoIklOX1RfUiIsMTQsdjAsYTEsR2MsS2MsaGUobGUoamYsMSksUm4sMjEsMCxbcnMoamgsaGUobGUoS28sMSksaXQsOTUsMCxbUzAsVDBdKSkscnMoamgsaGUobGUoS28sMSksaXQsOTUsMCxbUzAsVDAsemZdKSldKSksbjd0PW5ldyBvZigiSU5fQ19MIiwxNSxGZCxGYiwkdSxHYyxoZShsZShqZiwxKSxSbiwyMSwwLFtycyhqaCxoZShsZShLbywxKSxpdCw5NSwwLFtFZyxFMF0pKSxycyhqaCxoZShsZShLbywxKSxpdCw5NSwwLFtFZyxFMCx6Zl0pKV0pKSx0N3Q9bmV3IG9mKCJJTl9DX0MiLDE2LEJiLEZiLCR1LCR1LGhlKGxlKGpmLDEpLFJuLDIxLDAsW3JzKGpoLGhlKGxlKEtvLDEpLGl0LDk1LDAsW0VnLG1wXSkpLHJzKGpoLGhlKGxlKEtvLDEpLGl0LDk1LDAsW0VnLG1wLHpmXSkpXSkpLHI3dD1uZXcgb2YoIklOX0NfUiIsMTcsdjAsRmIsJHUsS2MsaGUobGUoamYsMSksUm4sMjEsMCxbcnMoamgsaGUobGUoS28sMSksaXQsOTUsMCxbRWcsVDBdKSkscnMoamgsaGUobGUoS28sMSksaXQsOTUsMCxbRWcsVDAsemZdKSldKSksWjZ0PW5ldyBvZigiSU5fQl9MIiwxOCxGZCx3MCxLYyxHYyxoZShsZShqZiwxKSxSbiwyMSwwLFtycyhqaCxoZShsZShLbywxKSxpdCw5NSwwLFtxZixFMF0pKSxycyhqaCxoZShsZShLbywxKSxpdCw5NSwwLFtxZixFMCx6Zl0pKV0pKSxKNnQ9bmV3IG9mKCJJTl9CX0MiLDE5LEJiLHcwLEtjLCR1LGhlKGxlKGpmLDEpLFJuLDIxLDAsW3JzKGpoLGhlKGxlKEtvLDEpLGl0LDk1LDAsW3FmLG1wXSkpLHJzKGpoLGhlKGxlKEtvLDEpLGl0LDk1LDAsW3FmLG1wLHpmXSkpXSkpLGU3dD1uZXcgb2YoIklOX0JfUiIsMjAsdjAsdzAsS2MsS2MsaGUobGUoamYsMSksUm4sMjEsMCxbcnMoamgsaGUobGUoS28sMSksaXQsOTUsMCxbcWYsVDBdKSkscnMoamgsaGUobGUoS28sMSksaXQsOTUsMCxbcWYsVDAsemZdKSldKSksSDBlPW5ldyBvZihjTCwyMSxudWxsLG51bGwsbnVsbCxudWxsLGhlKGxlKGpmLDEpLFJuLDIxLDAsW10pKX1mdW5jdGlvbiBUbigpe1RuPVUsTzQ9KGxiKCksVm4pLmIsbChPZSh0dChWbi5iKSwwKSwzNSksbChPZSh0dChWbi5iKSwxKSwxOSksTTI9Vm4uYSxsKE9lKHR0KFZuLmEpLDApLDM1KSxsKE9lKHR0KFZuLmEpLDEpLDE5KSxsKE9lKHR0KFZuLmEpLDIpLDE5KSxsKE9lKHR0KFZuLmEpLDMpLDE5KSxsKE9lKHR0KFZuLmEpLDQpLDE5KSxKYj1Wbi5vLGwoT2UodHQoVm4ubyksMCksMzUpLGwoT2UodHQoVm4ubyksMSksMzUpLHpfdD1sKE9lKHR0KFZuLm8pLDIpLDE5KSxsKE9lKHR0KFZuLm8pLDMpLDE5KSxsKE9lKHR0KFZuLm8pLDQpLDE5KSxsKE9lKHR0KFZuLm8pLDUpLDE5KSxsKE9lKHR0KFZuLm8pLDYpLDE5KSxsKE9lKHR0KFZuLm8pLDcpLDE5KSxsKE9lKHR0KFZuLm8pLDgpLDE5KSxsKE9lKHR0KFZuLm8pLDkpLDE5KSxsKE9lKHR0KFZuLm8pLDEwKSwxOSksbChPZSh0dChWbi5vKSwxMSksMTkpLGwoT2UodHQoVm4ubyksMTIpLDE5KSxsKE9lKHR0KFZuLm8pLDEzKSwxOSksbChPZSh0dChWbi5vKSwxNCksMTkpLGwoT2UodHQoVm4ubyksMTUpLDE5KSxsKE9lKHFpKFZuLm8pLDApLDYyKSxsKE9lKHFpKFZuLm8pLDEpLDYyKSxsKE9lKHFpKFZuLm8pLDIpLDYyKSxsKE9lKHFpKFZuLm8pLDMpLDYyKSxsKE9lKHFpKFZuLm8pLDQpLDYyKSxsKE9lKHFpKFZuLm8pLDUpLDYyKSxsKE9lKHFpKFZuLm8pLDYpLDYyKSxsKE9lKHFpKFZuLm8pLDcpLDYyKSxsKE9lKHFpKFZuLm8pLDgpLDYyKSxsKE9lKHFpKFZuLm8pLDkpLDYyKSwkX3Q9Vm4ucCxsKE9lKHR0KFZuLnApLDApLDM1KSxsKE9lKHR0KFZuLnApLDEpLDM1KSxsKE9lKHR0KFZuLnApLDIpLDM1KSxsKE9lKHR0KFZuLnApLDMpLDM1KSxsKE9lKHR0KFZuLnApLDQpLDE5KSxsKE9lKHR0KFZuLnApLDUpLDE5KSxsKE9lKHFpKFZuLnApLDApLDYyKSxsKE9lKHFpKFZuLnApLDEpLDYyKSxxX3Q9Vm4ucSxsKE9lKHR0KFZuLnEpLDApLDM1KSxaYj1Wbi52LGwoT2UodHQoVm4udiksMCksMTkpLGwoT2UocWkoVm4udiksMCksNjIpLGwoT2UocWkoVm4udiksMSksNjIpLGwoT2UocWkoVm4udiksMiksNjIpLEQyPVZuLncsbChPZSh0dChWbi53KSwwKSwzNSksbChPZSh0dChWbi53KSwxKSwzNSksbChPZSh0dChWbi53KSwyKSwzNSksbChPZSh0dChWbi53KSwzKSwxOSksZW09Vm4uQixsKE9lKHR0KFZuLkIpLDApLDE5KSxsKE9lKHFpKFZuLkIpLDApLDYyKSxsKE9lKHFpKFZuLkIpLDEpLDYyKSxsKE9lKHFpKFZuLkIpLDIpLDYyKSxIX3Q9Vm4uUSxsKE9lKHR0KFZuLlEpLDApLDE5KSxsKE9lKHFpKFZuLlEpLDApLDYyKSxWX3Q9Vm4uUixsKE9lKHR0KFZuLlIpLDApLDM1KSxLZj1Wbi5TLGwoT2UocWkoVm4uUyksMCksNjIpLGwoT2UocWkoVm4uUyksMSksNjIpLGwoT2UocWkoVm4uUyksMiksNjIpLGwoT2UocWkoVm4uUyksMyksNjIpLGwoT2UocWkoVm4uUyksNCksNjIpLGwoT2UocWkoVm4uUyksNSksNjIpLGwoT2UocWkoVm4uUyksNiksNjIpLGwoT2UocWkoVm4uUyksNyksNjIpLGwoT2UocWkoVm4uUyksOCksNjIpLGwoT2UocWkoVm4uUyksOSksNjIpLGwoT2UocWkoVm4uUyksMTApLDYyKSxsKE9lKHFpKFZuLlMpLDExKSw2MiksbChPZShxaShWbi5TKSwxMiksNjIpLGwoT2UocWkoVm4uUyksMTMpLDYyKSxsKE9lKHFpKFZuLlMpLDE0KSw2MiksSTI9Vm4uVCxsKE9lKHR0KFZuLlQpLDApLDE5KSxsKE9lKHR0KFZuLlQpLDIpLDE5KSxVX3Q9bChPZSh0dChWbi5UKSwzKSwxOSksbChPZSh0dChWbi5UKSw0KSwxOSksbChPZShxaShWbi5UKSwwKSw2MiksbChPZShxaShWbi5UKSwxKSw2MiksbChPZSh0dChWbi5UKSwxKSwxOSksTzI9Vm4uVSxsKE9lKHR0KFZuLlUpLDApLDM1KSxsKE9lKHR0KFZuLlUpLDEpLDM1KSxsKE9lKHR0KFZuLlUpLDIpLDE5KSxsKE9lKHR0KFZuLlUpLDMpLDE5KSxsKE9lKHR0KFZuLlUpLDQpLDE5KSxsKE9lKHR0KFZuLlUpLDUpLDE5KSxsKE9lKHFpKFZuLlUpLDApLDYyKSxOND1Wbi5WLGwoT2UodHQoVm4uViksMCksMTkpLG83PVZuLlcsbChPZSh0dChWbi5XKSwwKSwzNSksbChPZSh0dChWbi5XKSwxKSwzNSksbChPZSh0dChWbi5XKSwyKSwzNSksbChPZSh0dChWbi5XKSwzKSwxOSksbChPZSh0dChWbi5XKSw0KSwxOSksbChPZSh0dChWbi5XKSw1KSwxOSksR190PVZuLmJiLGwoT2UodHQoVm4uYmIpLDApLDM1KSxsKE9lKHR0KFZuLmJiKSwxKSwzNSksbChPZSh0dChWbi5iYiksMiksMzUpLGwoT2UodHQoVm4uYmIpLDMpLDM1KSxsKE9lKHR0KFZuLmJiKSw0KSwzNSksbChPZSh0dChWbi5iYiksNSksMzUpLGwoT2UodHQoVm4uYmIpLDYpLDM1KSxsKE9lKHR0KFZuLmJiKSw3KSwxOSksbChPZShxaShWbi5iYiksMCksNjIpLGwoT2UocWkoVm4uYmIpLDEpLDYyKSxLX3Q9Vm4uZWIsbChPZSh0dChWbi5lYiksMCksMzUpLGwoT2UodHQoVm4uZWIpLDEpLDM1KSxsKE9lKHR0KFZuLmViKSwyKSwzNSksbChPZSh0dChWbi5lYiksMyksMzUpLGwoT2UodHQoVm4uZWIpLDQpLDM1KSxsKE9lKHR0KFZuLmViKSw1KSwzNSksbChPZSh0dChWbi5lYiksNiksMTkpLGwoT2UodHQoVm4uZWIpLDcpLDE5KSxObz1Wbi5hYixsKE9lKHR0KFZuLmFiKSwwKSwzNSksbChPZSh0dChWbi5hYiksMSksMzUpLEUzPVZuLkgsbChPZSh0dChWbi5IKSwwKSwxOSksbChPZSh0dChWbi5IKSwxKSwxOSksbChPZSh0dChWbi5IKSwyKSwxOSksbChPZSh0dChWbi5IKSwzKSwxOSksbChPZSh0dChWbi5IKSw0KSwxOSksbChPZSh0dChWbi5IKSw1KSwxOSksbChPZShxaShWbi5IKSwwKSw2MiksVDM9Vm4uZGIsbChPZSh0dChWbi5kYiksMCksMTkpLHRkPVZuLk19ZnVuY3Rpb24gdE9uKGUpe3ZhciB0O2UuT3x8KGUuTz0hMCxGdShlLCJ0eXBlIiksQ1YoZSwiZWNvcmUueG1sLnR5cGUiKSxTVihlLGN2KSx0PWwoVkUoKGliKCksR2YpLGN2KSwyMDQ0KSxxcihkYyhlLmZiKSxlLmIpLHpjKGUuYixnRiwiQW55VHlwZSIsITEsITEsITApLE9zKGwoT2UodHQoZS5iKSwwKSwzNSksZS53Yi5ELFhQLG51bGwsMCwtMSxnRiwhMSwhMSwhMCwhMSwhMSwhMSksT3MobChPZSh0dChlLmIpLDEpLDM1KSxlLndiLkQsImFueSIsbnVsbCwwLC0xLGdGLCEwLCEwLCEwLCExLCExLCEwKSxPcyhsKE9lKHR0KGUuYiksMiksMzUpLGUud2IuRCwiYW55QXR0cmlidXRlIixudWxsLDAsLTEsZ0YsITEsITEsITAsITEsITEsITEpLHpjKGUuYmIsQVksTTV0LCExLCExLCEwKSxPcyhsKE9lKHR0KGUuYmIpLDApLDM1KSxlLmdiLCJkYXRhIixudWxsLDAsMSxBWSwhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLmJiKSwxKSwzNSksZS5nYix3U2UsbnVsbCwxLDEsQVksITEsITEsITAsITEsITAsITEpLHpjKGUuZmIscEYsRDV0LCExLCExLCEwKSxPcyhsKE9lKHR0KGUuZmIpLDApLDM1KSx0LmdiLCJyYXdWYWx1ZSIsbnVsbCwwLDEscEYsITAsITAsITAsITEsITAsITApLE9zKGwoT2UodHQoZS5mYiksMSksMzUpLHQuYSxUTCxudWxsLDAsMSxwRiwhMCwhMCwhMCwhMSwhMCwhMCksc3MobChPZSh0dChlLmZiKSwyKSwxOSksZS53Yi5xLG51bGwsImluc3RhbmNlVHlwZSIsMSwxLHBGLCExLCExLCEwLCExLCExLCExLCExKSx6YyhlLnFiLFZQZSxJNXQsITEsITEsITApLE9zKGwoT2UodHQoZS5xYiksMCksMzUpLGUud2IuRCxYUCxudWxsLDAsLTEsbnVsbCwhMSwhMSwhMCwhMSwhMSwhMSksc3MobChPZSh0dChlLnFiKSwxKSwxOSksZS53Yi5hYixudWxsLCJ4TUxOU1ByZWZpeE1hcCIsMCwtMSxudWxsLCEwLCExLCEwLCEwLCExLCExLCExKSxzcyhsKE9lKHR0KGUucWIpLDIpLDE5KSxlLndiLmFiLG51bGwsInhTSVNjaGVtYUxvY2F0aW9uIiwwLC0xLG51bGwsITAsITEsITAsITAsITEsITEsITEpLE9zKGwoT2UodHQoZS5xYiksMyksMzUpLGUuZ2IsImNEQVRBIixudWxsLDAsLTIsbnVsbCwhMCwhMCwhMCwhMSwhMSwhMCksT3MobChPZSh0dChlLnFiKSw0KSwzNSksZS5nYiwiY29tbWVudCIsbnVsbCwwLC0yLG51bGwsITAsITAsITAsITEsITEsITApLHNzKGwoT2UodHQoZS5xYiksNSksMTkpLGUuYmIsbnVsbCxVNXQsMCwtMixudWxsLCEwLCEwLCEwLCEwLCExLCExLCEwKSxPcyhsKE9lKHR0KGUucWIpLDYpLDM1KSxlLmdiLEtmZSxudWxsLDAsLTIsbnVsbCwhMCwhMCwhMCwhMSwhMSwhMCksRWkoZS5hLHdhLCJBbnlTaW1wbGVUeXBlIiwhMCksRWkoZS5jLHp0LCJBbnlVUkkiLCEwKSxFaShlLmQsbGUoQWwsMSksIkJhc2U2NEJpbmFyeSIsITApLEVpKGUuZSxpaCwiQm9vbGVhbiIsITApLEVpKGUuZixOcywiQm9vbGVhbk9iamVjdCIsITApLEVpKGUuZyxBbCwiQnl0ZSIsITApLEVpKGUuaSxqeCwiQnl0ZU9iamVjdCIsITApLEVpKGUuaix6dCwiRGF0ZSIsITApLEVpKGUuayx6dCwiRGF0ZVRpbWUiLCEwKSxFaShlLm4sTDBlLCJEZWNpbWFsIiwhMCksRWkoZS5vLE5hLCJEb3VibGUiLCEwKSxFaShlLnAsdGEsIkRvdWJsZU9iamVjdCIsITApLEVpKGUucSx6dCwiRHVyYXRpb24iLCEwKSxFaShlLnMsbWYsIkVOVElUSUVTIiwhMCksRWkoZS5yLG1mLCJFTlRJVElFU0Jhc2UiLCEwKSxFaShlLnQsenQsUFNlLCEwKSxFaShlLnUsQjQsIkZsb2F0IiwhMCksRWkoZS52LF9ULCJGbG9hdE9iamVjdCIsITApLEVpKGUudyx6dCwiR0RheSIsITApLEVpKGUuQix6dCwiR01vbnRoIiwhMCksRWkoZS5BLHp0LCJHTW9udGhEYXkiLCEwKSxFaShlLkMsenQsIkdZZWFyIiwhMCksRWkoZS5ELHp0LCJHWWVhck1vbnRoIiwhMCksRWkoZS5GLGxlKEFsLDEpLCJIZXhCaW5hcnkiLCEwKSxFaShlLkcsenQsIklEIiwhMCksRWkoZS5ILHp0LCJJRFJFRiIsITApLEVpKGUuSixtZiwiSURSRUZTIiwhMCksRWkoZS5JLG1mLCJJRFJFRlNCYXNlIiwhMCksRWkoZS5LLFZyLCJJbnQiLCEwKSxFaShlLk0sQTYsIkludGVnZXIiLCEwKSxFaShlLkwscm8sIkludE9iamVjdCIsITApLEVpKGUuUCx6dCwiTGFuZ3VhZ2UiLCEwKSxFaShlLlEsbm0sIkxvbmciLCEwKSxFaShlLlIscjMsIkxvbmdPYmplY3QiLCEwKSxFaShlLlMsenQsIk5hbWUiLCEwKSxFaShlLlQsenQsckssITApLEVpKGUuVSxBNiwiTmVnYXRpdmVJbnRlZ2VyIiwhMCksRWkoZS5WLHp0LFJTZSwhMCksRWkoZS5YLG1mLCJOTVRPS0VOUyIsITApLEVpKGUuVyxtZiwiTk1UT0tFTlNCYXNlIiwhMCksRWkoZS5ZLEE2LCJOb25OZWdhdGl2ZUludGVnZXIiLCEwKSxFaShlLlosQTYsIk5vblBvc2l0aXZlSW50ZWdlciIsITApLEVpKGUuJCx6dCwiTm9ybWFsaXplZFN0cmluZyIsITApLEVpKGUuXyx6dCwiTk9UQVRJT04iLCEwKSxFaShlLmFiLHp0LCJQb3NpdGl2ZUludGVnZXIiLCEwKSxFaShlLmNiLHp0LCJRTmFtZSIsITApLEVpKGUuZGIsaDcsIlNob3J0IiwhMCksRWkoZS5lYixpMywiU2hvcnRPYmplY3QiLCEwKSxFaShlLmdiLHp0LG5FZSwhMCksRWkoZS5oYix6dCwiVGltZSIsITApLEVpKGUuaWIsenQsIlRva2VuIiwhMCksRWkoZS5qYixoNywiVW5zaWduZWRCeXRlIiwhMCksRWkoZS5rYixpMywiVW5zaWduZWRCeXRlT2JqZWN0IiwhMCksRWkoZS5sYixubSwiVW5zaWduZWRJbnQiLCEwKSxFaShlLm1iLHIzLCJVbnNpZ25lZEludE9iamVjdCIsITApLEVpKGUubmIsQTYsIlVuc2lnbmVkTG9uZyIsITApLEVpKGUub2IsVnIsIlVuc2lnbmVkU2hvcnQiLCEwKSxFaShlLnBiLHJvLCJVbnNpZ25lZFNob3J0T2JqZWN0IiwhMCksdDhlKGUsY3YpLG5PbihlKSl9ZnVuY3Rpb24gWGtlKGUsdCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZSxUZSxNZSwkZSxaZSxvdCxTdCxjbixhbixCbixqbix1cixvaSx3cyxWbCxsYyxIaCxmNyxQMixMMCxNMCxfdixoOSxybSxmOSxxZCxfZyxTMyxkOSxkNyxIZCxBdix5cDtpZihyLiRnKCl8fFJ0KEJ0KGF0KHQsKHBpKCksclkpKSkpKXJldHVybiBDbigpLENuKCksX287aWYoU3Q9KCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpLmkhPTAsYW49bWtuKHQpLGNuPSFhbi5kYygpLFN0fHxjbil7aWYoYT1sKGF0KHQsYTcpLDE0MyksIWEpdGhyb3cgdWUobmV3IFZwKCJSZXNvbHZlZCBhbGdvcml0aG0gaXMgbm90IHNldDsgYXBwbHkgYSBMYXlvdXRBbGdvcml0aG1SZXNvbHZlciBiZWZvcmUgY29tcHV0aW5nIGxheW91dC4iKSk7aWYoZDc9SjNlKGEsKEhFKCksd1kpKSx0ZHQodCksIVN0JiZjbiYmIWQ3KXJldHVybiBDbigpLENuKCksX287aWYoTWU9bmV3IGJ0LHFlKGF0KHQsbjcpKT09PXFlKChycCgpLEEyKSkmJihKM2UoYSxtWSl8fEozZShhLGJZKSkpe2lmKFJ0KEJ0KGF0KHQsQU0pKSkpdGhyb3cgdWUobmV3IFZwKCJUb3Bkb3duIGxheW91dCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIGhpZXJhcmNoeSBoYW5kbGluZy4iKSk7Zm9yKGY3PUdidChlLHQpLFAyPW5ldyBvcyxLYShQMiwoIXQuYSYmKHQuYT1uZXcgbnQoQWksdCwxMCwxMSkpLHQuYSkpO1AyLmIhPTA7KWxjPWwoUDIuYj09MD9udWxsOihtcihQMi5iIT0wKSxhZihQMixQMi5hLmEpKSwyNyksdGR0KGxjKSxkOT1xZShhdChsYyxuNykpPT09cWUoRE0pLGQ5fHxQMShsYyxlQykmJiFnNmUoYSxhdChsYyxhNykpPyh0ZT1Ya2UoZSxsYyxuLHIpLHJhKE1lLHRlKSxIaShsYyxuNyxETSksdW10KGxjKSk6S2EoUDIsKCFsYy5hJiYobGMuYT1uZXcgbnQoQWksbGMsMTAsMTEpKSxsYy5hKSl9ZWxzZXtpZihmNz0oIXQuYSYmKHQuYT1uZXcgbnQoQWksdCwxMCwxMSkpLHQuYSkuaSxSdChCdChhdCh0LEFNKSkpKXtpZihIZD1yLmVoKDEpLEhkLlVnKER5dCwxKSxhdCh0LGk5KT09bnVsbCl0aHJvdyB1ZShuZXcgVnAodC5rKyIgaGFzIG5vdCBiZWVuIGFzc2lnbmVkIGEgdG9wLWRvd24gbm9kZSB0eXBlLiIpKTtpZihsKGF0KHQsaTkpLDI4MCk9PShkeCgpLEw0KXx8bChhdCh0LGk5KSwyODApPT1kWSlmb3IoVGU9bmV3IG9yKCghdC5hJiYodC5hPW5ldyBudChBaSx0LDEwLDExKSksdC5hKSk7VGUuZSE9VGUuaS5nYygpOylmZT1sKGdyKFRlKSwyNyksVmw9bChhdChmZSxhNyksMTQzKSwoIWZlLmEmJihmZS5hPW5ldyBudChBaSxmZSwxMCwxMSkpLGZlLmEpLmk+MCYmR08oVmwuZiksYXQoZmUsQk5lKSE9bnVsbCYmKGc9bChhdChmZSxCTmUpLDM0NyksUzM9Zy5UZyhmZSksRjUoZmUsYi5NYXRoLm1heChmZS5nLFMzLmEpLGIuTWF0aC5tYXgoZmUuZixTMy5iKSkpO2lmKEwwPWwoYXQodCxfMiksMTA3KSx6PXQuZy0oTDAuYitMMC5jKSxCPXQuZi0oTDAuZCtMMC5hKSxIZC5iaCgiQXZhaWxhYmxlIENoaWxkIEFyZWE6ICgiK3orInwiK0IrIikiKSxIaSh0LFo2LHovQiksc2R0KHQsYSxyLmVoKGY3KSksbChhdCh0LGk5KSwyODApPT1kWSYmKFVrZSh0KSxGNSh0LEwwLmIremUoR2UoYXQodCx0NykpKStMMC5jLEwwLmQremUoR2UoYXQodCxlNykpKStMMC5hKSksSGQuYmgoIkV4ZWN1dGVkIGxheW91dCBhbGdvcml0aG06ICIrZWkoYXQodCxlQykpKyIgb24gbm9kZSAiK3QuayksbChhdCh0LGk5KSwyODApPT1MNCl7aWYoejwwfHxCPDApdGhyb3cgdWUobmV3IFZwKCJUaGUgc2l6ZSBkZWZpbmVkIGJ5IHRoZSBwYXJlbnQgcGFyYWxsZWwgbm9kZSBpcyB0b28gc21hbGwgZm9yIHRoZSBzcGFjZSBwcm92aWRlZCBieSB0aGUgcGFkZGluZ3Mgb2YgdGhlIGNoaWxkIGhpZXJhcmNoaWNhbCBub2RlLiAiK3QuaykpO2ZvcihQMSh0LHQ3KXx8UDEodCxlNyl8fFVrZSh0KSxKPXplKEdlKGF0KHQsdDcpKSksVj16ZShHZShhdCh0LGU3KSkpLEhkLmJoKCJEZXNpcmVkIENoaWxkIEFyZWE6ICgiK0orInwiK1YrIikiKSxfdj16L0osaDk9Qi9WLE0wPWIuTWF0aC5taW4oX3YsYi5NYXRoLm1pbihoOSx6ZShHZShhdCh0LHFTdCkpKSkpLEhpKHQsYVksTTApLEhkLmJoKHQuaysiIC0tIExvY2FsIFNjYWxlIEZhY3RvciAoWHxZKTogKCIrX3YrInwiK2g5KyIpIiksJGU9bChhdCh0LFVCKSwyMSksbz0wLGY9MCxNMDxfdiYmKCRlLkhjKChZbSgpLEVNKSk/bz0oei8yLUoqTTAvMikvTTA6JGUuSGMoVE0pJiYobz0oei1KKk0wKS9NMCkpLE0wPGg5JiYoJGUuSGMoKFltKCksU00pKT9mPShCLzItVipNMC8yKS9NMDokZS5IYyhDTSkmJihmPShCLVYqTTApL00wKSksQXY9bysoTDAuYi9NMC1MMC5iKSx5cD1mKyhMMC5kL00wLUwwLmQpLEhkLmJoKCJTaGlmdDogKCIrQXYrInwiK3lwKyIpIiksSGg9bmV3IG9yKCghdC5hJiYodC5hPW5ldyBudChBaSx0LDEwLDExKSksdC5hKSk7SGguZSE9SGguaS5nYygpOylsYz1sKGdyKEhoKSwyNyksVXUobGMsbGMuaStBdiksR3UobGMsbGMuait5cCk7Zm9yKG90PW5ldyBvcigoIXQuYiYmKHQuYj1uZXcgbnQoanMsdCwxMiwzKSksdC5iKSk7b3QuZSE9b3QuaS5nYygpOyl7Zm9yKFplPWwoZ3Iob3QpLDc0KSxmOT1uZXcgb3IoKCFaZS5hJiYoWmUuYT1uZXcgbnQoY3MsWmUsNiw2KSksWmUuYSkpO2Y5LmUhPWY5LmkuZ2MoKTspZm9yKHJtPWwoZ3IoZjkpLDE2Niksa08ocm0scm0uaitBdixybS5rK3lwKSx4TyhybSxybS5iK0F2LHJtLmMreXApLEU9bmV3IG9yKCghcm0uYSYmKHJtLmE9bmV3IFlzKHFoLHJtLDUpKSxybS5hKSk7RS5lIT1FLmkuZ2MoKTspdz1sKGdyKEUpLDM3NyksV3NlKHcsdy5hK0F2LHcuYit5cCk7Zm9yKHdzPW5ldyBvcigoIVplLm4mJihaZS5uPW5ldyBudChlYyxaZSwxLDcpKSxaZS5uKSk7d3MuZSE9d3MuaS5nYygpOylvaT1sKGdyKHdzKSwxMzUpLFFoKG9pLG9pLmkrQXYsb2kuait5cCk7Zm9yKHVyPWwoYXQoWmUseDMpLDc1KSxqbj1Scih1ciwwKTtqbi5iIT1qbi5kLmM7KUJuPWwoQnIoam4pLDgpLEJuLmErPUF2LEJuLmIrPXlwO0hpKFplLHgzLHVyKX19SGQuVmcoKX1mb3IoTD1uZXcgb3IoKCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpKTtMLmUhPUwuaS5nYygpOylDPWwoZ3IoTCksMjcpLHRlPVhrZShlLEMsbixyKSxyYShNZSx0ZSksdW10KEMpfWlmKHIuJGcoKSlyZXR1cm4gQ24oKSxDbigpLF9vO2ZvcihfZz1uZXcgRyhNZSk7X2cuYTxfZy5jLmMubGVuZ3RoOylxZD1sKHJlKF9nKSw3NCksSGkocWQsclksKEhuKCksITApKTtyZXR1cm4gUnQoQnQoYXQodCxBTSkpKXx8c2R0KHQsYSxyLmVoKGY3KSksel9uKE1lKSxjbiYmZDc/YW46KENuKCksQ24oKSxfbyl9ZWxzZSByZXR1cm4gQ24oKSxDbigpLF9vfWZ1bmN0aW9uIGI2KGUsdCl7dmFyIG4scjtyZXR1cm4gbDd8fChsNz1uZXcgUHIsY0M9bmV3IFByLHI9KERpKCksRGkoKSxuZXcgX2goNCkpLGpOKHIsYAkKXHJcciAgYCkscmMobDcsZjBlLHIpLHJjKGNDLGYwZSxVeShyKSkscj1uZXcgX2goNCksak4ocixLNXQpLHJjKGw3LE9MLHIpLHJjKGNDLE9MLFV5KHIpKSxyPW5ldyBfaCg0KSxqTihyLEs1dCkscmMobDcsT0wscikscmMoY0MsT0wsVXkocikpLHI9bmV3IF9oKDQpLGpOKHIsVzV0KSxLeShyLGwoeHUobDcsT0wpLDEyMikpLHJjKGw3LGgwZSxyKSxyYyhjQyxoMGUsVXkocikpLHI9bmV3IF9oKDQpLGpOKHIsIi0uMDpBWl9fYXrCt8K3w4DDlsOYw7bDuMSxxLTEvsWBxYjFisW+xoDHg8eNx7DHtMe1x7rIl8mQyqjKu8uBy5DLkcyAzYXNoM2hzobOis6MzozOjs6hzqPPjs+Qz5bPms+az5zPnM+ez57PoM+gz6LPs9CB0IzQjtGP0ZHRnNGe0oHSg9KG0pDThNOH04jTi9OM05DTq9Ou07XTuNO51LHVltWZ1ZnVodaG1pHWodaj1rnWu9a91r/Wv9eB14LXhNeE15DXqtew17LYodi62YDZktmg2anZsNq32rravtuA247bkNuT25XbqNuq263bsNu54KSB4KSD4KSF4KS54KS84KWN4KWR4KWU4KWY4KWj4KWm4KWv4KaB4KaD4KaF4KaM4KaP4KaQ4KaT4Kao4Kaq4Kaw4Kay4Kay4Ka24Ka54Ka84Ka84Ka+4KeE4KeH4KeI4KeL4KeN4KeX4KeX4Kec4Ked4Kef4Kej4Kem4Kex4KiC4KiC4KiF4KiK4KiP4KiQ4KiT4Kio4Kiq4Kiw4Kiy4Kiz4Ki14Ki24Ki44Ki54Ki84Ki84Ki+4KmC4KmH4KmI4KmL4KmN4KmZ4Kmc4Kme4Kme4Kmm4Km04KqB4KqD4KqF4KqL4KqN4KqN4KqP4KqR4KqT4Kqo4Kqq4Kqw4Kqy4Kqz4Kq14Kq54Kq84KuF4KuH4KuJ4KuL4KuN4Kug4Kug4Kum4Kuv4KyB4KyD4KyF4KyM4KyP4KyQ4KyT4Kyo4Kyq4Kyw4Kyy4Kyz4Ky24Ky54Ky84K2D4K2H4K2I4K2L4K2N4K2W4K2X4K2c4K2d4K2f4K2h4K2m4K2v4K6C4K6D4K6F4K6K4K6O4K6Q4K6S4K6V4K6Z4K6a4K6c4K6c4K6e4K6f4K6j4K6k4K6o4K6q4K6u4K614K634K654K6+4K+C4K+G4K+I4K+K4K+N4K+X4K+X4K+n4K+v4LCB4LCD4LCF4LCM4LCO4LCQ4LCS4LCo4LCq4LCz4LC14LC54LC+4LGE4LGG4LGI4LGK4LGN4LGV4LGW4LGg4LGh4LGm4LGv4LKC4LKD4LKF4LKM4LKO4LKQ4LKS4LKo4LKq4LKz4LK14LK54LK+4LOE4LOG4LOI4LOK4LON4LOV4LOW4LOe4LOe4LOg4LOh4LOm4LOv4LSC4LSD4LSF4LSM4LSO4LSQ4LSS4LSo4LSq4LS54LS+4LWD4LWG4LWI4LWK4LWN4LWX4LWX4LWg4LWh4LWm4LWv4LiB4Liu4Liw4Li64LmA4LmO4LmQ4LmZ4LqB4LqC4LqE4LqE4LqH4LqI4LqK4LqK4LqN4LqN4LqU4LqX4LqZ4Lqf4Lqh4Lqj4Lql4Lql4Lqn4Lqn4Lqq4Lqr4Lqt4Lqu4Lqw4Lq54Lq74Lq94LuA4LuE4LuG4LuG4LuI4LuN4LuQ4LuZ4LyY4LyZ4Lyg4Lyp4Ly14Ly14Ly34Ly34Ly54Ly54Ly+4L2H4L2J4L2p4L2x4L6E4L6G4L6L4L6Q4L6V4L6X4L6X4L6Z4L6t4L6x4L634L654L654YKg4YOF4YOQ4YO24YSA4YSA4YSC4YSD4YSF4YSH4YSJ4YSJ4YSL4YSM4YSO4YSS4YS84YS84YS+4YS+4YWA4YWA4YWM4YWM4YWO4YWO4YWQ4YWQ4YWU4YWV4YWZ4YWZ4YWf4YWh4YWj4YWj4YWl4YWl4YWn4YWn4YWp4YWp4YWt4YWu4YWy4YWz4YW14YW14Yae4Yae4Yao4Yao4Yar4Yar4Yau4Yav4Ya34Ya44Ya64Ya64Ya84YeC4Yer4Yer4Yew4Yew4Ye54Ye54biA4bqb4bqg4bu54byA4byV4byY4byd4byg4b2F4b2I4b2N4b2Q4b2X4b2Z4b2Z4b2b4b2b4b2d4b2d4b2f4b294b6A4b604b624b684b6+4b6+4b+C4b+E4b+G4b+M4b+Q4b+T4b+W4b+b4b+g4b+s4b+y4b+04b+24b+84oOQ4oOc4oOh4oOh4oSm4oSm4oSq4oSr4oSu4oSu4oaA4oaC44CF44CF44CH44CH44Ch44Cv44Cx44C144GB44KU44KZ44Ka44Kd44Ke44Kh44O644O844O+44SF44Ss5LiA6b6l6rCA7Z6jIikscmMobDcsZDBlLHIpLHJjKGNDLGQwZSxVeShyKSkscj1uZXcgX2goNCksak4ocixXNXQpLEV1KHIsOTUsOTUpLEV1KHIsNTgsNTgpLHJjKGw3LGcwZSxyKSxyYyhjQyxnMGUsVXkocikpKSxuPWwoeHUodD9sNzpjQyxlKSwxMzgpLG59ZnVuY3Rpb24gVHd0KGUpe3N3KGUsbmV3IFhtKGEzZShVeihudyhadih0dyhldyhuZXcgeDEsc3IpLCJFTEsgTGF5ZXJlZCIpLCJMYXllci1iYXNlZCBhbGdvcml0aG0gcHJvdmlkZWQgYnkgdGhlIEVjbGlwc2UgTGF5b3V0IEtlcm5lbC4gQXJyYW5nZXMgYXMgbWFueSBlZGdlcyBhcyBwb3NzaWJsZSBpbnRvIG9uZSBkaXJlY3Rpb24gYnkgcGxhY2luZyBub2RlcyBpbnRvIHN1YnNlcXVlbnQgbGF5ZXJzLiBUaGlzIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIGRpZmZlcmVudCByb3V0aW5nIHN0eWxlcyAoc3RyYWlnaHQsIG9ydGhvZ29uYWwsIHNwbGluZXMpOyBpZiBvcnRob2dvbmFsIHJvdXRpbmcgaXMgc2VsZWN0ZWQsIGFyYml0cmFyeSBwb3J0IGNvbnN0cmFpbnRzIGFyZSByZXNwZWN0ZWQsIHRodXMgZW5hYmxpbmcgdGhlIGxheW91dCBvZiBibG9jayBkaWFncmFtcyBzdWNoIGFzIGFjdG9yLW9yaWVudGVkIG1vZGVscyBvciBjaXJjdWl0IHNjaGVtYXRpY3MuIEZ1cnRoZXJtb3JlLCBmdWxsIGxheW91dCBvZiBjb21wb3VuZCBncmFwaHMgd2l0aCBjcm9zcy1oaWVyYXJjaHkgZWRnZXMgaXMgc3VwcG9ydGVkIHdoZW4gdGhlIHJlc3BlY3RpdmUgb3B0aW9uIGlzIGFjdGl2YXRlZCBvbiB0aGUgdG9wIGxldmVsLiIpLG5ldyBSZWUpLHNyKSxycygoSEUoKSxKZ2UpLGhlKGxlKHhZLDEpLGl0LDI0NSwwLFt3WSx5WSx2WSxRZ2UsbVksYlldKSkpKSksZ3QoZSxzcixMVGUsSXQob2RlKSksZ3QoZSxzcixNVGUsSXQodERlKSksZ3QoZSxzcixfaGUsSXQoU0IpKSxndChlLHNyLERUZSxJdCh4MCkpLGd0KGUsc3IsT2hlLEl0KEg2KSksZ3QoZSxzcixkZmUsSXQoYjMpKSxndChlLHNyLElUZSxJdCh5NCkpLGd0KGUsc3IsT1RlLEl0KEdUKSksZ3QoZSxzcixOVGUsSXQoS1QpKSxndChlLHNyLFBUZSxJdChjZGUpKSxndChlLHNyLEp5LEl0KG0zKSksZ3QoZSxzcixCVGUsSXQodWRlKSksZ3QoZSxzcixGVGUsSXQodE0pKSxndChlLHNyLFJUZSxJdChrVykpLGd0KGUsc3IsbFRlLEl0KENCKSksZ3QoZSxzcixmVGUsSXQocTYpKSxndChlLHNyLGhUZSxJdCh2dikpLGd0KGUsc3IsZFRlLEl0KFY2KSksZ3QoZSxzcixOUCxwdCgwKSksZ3QoZSxzcixnVGUsSXQoVVQpKSxndChlLHNyLHBUZSxJdChlRGUpKSxndChlLHNyLGJUZSxJdChKeCkpLGd0KGUsc3IsZnAsSXQobERlKSksZ3QoZSxzcix2RyxJdChyRGUpKSxndChlLHNyLHdHLEl0KGlEZSkpLGd0KGUsc3IsYkwsSXQoaGRlKSksZ3QoZSxzcixzZmUsSXQoc0RlKSksZ3QoZSxzcixhZmUsSXQoYURlKSksZ3QoZSxzcix5RyxJdChFVykpLGd0KGUsc3IseEcsSXQoZmRlKSksZ3QoZSxzcixrRyxJdChjRGUpKSxndChlLHNyLEVHLEl0KG9EZSkpLGd0KGUsc3Isb2ZlLEl0KHVEZSkpLGd0KGUsc3IsWmhlLEl0KGczKSksZ3QoZSxzcixlZmUsSXQoZU0pKSxndChlLHNyLHBHLEl0KHJkZSkpLGd0KGUsc3IsYkcsSXQoT01lKSksZ3QoZSxzcixQUCxJdChXa3QpKSxndChlLHNyLEJQLEl0KFlrdCkpLGd0KGUsc3IsRlAsSXQoS2t0KSksZ3QoZSxzcixSUCxJdChHa3QpKSxndChlLHNyLFF3LG5EZSksZ3QoZSxzcixYdyxZTWUpLGd0KGUsc3IsSFAsTU1lKSxndChlLHNyLGpUZSwwKSxndChlLHNyLG9HLHB0KDEpKSxndChlLHNyLE94LGxUKSxndChlLHNyLCRUZSxJdChtdikpLGd0KGUsc3IsTmhlLEl0KE1zKSksZ3QoZSxzcix6VGUsSXQoVlQpKSxndChlLHNyLFZQLEl0KEJrdCkpLGd0KGUsc3IscVRlLEl0KFJkKSksZ3QoZSxzcixDRyxJdChwNCkpLGd0KGUsc3IsbEwsKEhuKCksITApKSxndChlLHNyLEhUZSxJdChiNCkpLGd0KGUsc3IsVlRlLEl0KGd2KSksZ3QoZSxzcix4NixJdChidikpLGd0KGUsc3IsTngsSXQoeFcpKSxndChlLHNyLGhULEl0KGFkZSkpLGd0KGUsc3IsZ2ZlLExNZSksZ3QoZSxzcixmVCxJdChkMykpLGd0KGUsc3IsVVRlLEl0KHdXKSksZ3QoZSxzcixkVCxJdCh2NCkpLGd0KGUsc3IsR1RlLEl0KHFrdCkpLGd0KGUsc3IsS1RlLEl0KEpNZSkpLGd0KGUsc3IsV1RlLFFNZSksZ3QoZSxzcixZVGUsSXQoamt0KSksZ3QoZSxzcixYVGUsSXQoJGt0KSksZ3QoZSxzcixRVGUsSXQoemt0KSksZ3QoZSxzcixKVGUsSXQoUmt0KSksZ3QoZSxzcixRRWUsSXQobGRlKSksZ3QoZSxzcixxUCxJdChwdikpLGd0KGUsc3IsVmhlLEl0KHpiKSksZ3QoZSxzcixYRWUsSXQobk0pKSxndChlLHNyLFpFZSxJdChRdSkpLGd0KGUsc3IsemhlLEl0KGR2KSksZ3QoZSxzcixwTCxJdChKTCkpLGd0KGUsc3IsblRlLEl0KGYzKSksZ3QoZSxzcixvVGUsSXQoU01lKSksZ3QoZSxzcixZaGUsSXQoWjFlKSksZ3QoZSxzcixkRyxJdChUQikpLGd0KGUsc3IsV2hlLEl0KGVkZSkpLGd0KGUsc3IsR0VlLEl0KFZNZSkpLGd0KGUsc3IsS0VlLEl0KFVNZSkpLGd0KGUsc3IsZkcsSXQoak1lKSksZ3QoZSxzcixrNixJdCh5VykpLGd0KGUsc3IsUWhlLEl0KHNkZSkpLGd0KGUsc3IsVUVlLEl0KGlkZSkpLGd0KGUsc3IsSmhlLEl0KEtNZSkpLGd0KGUsc3IsY1RlLEl0KElNZSkpLGd0KGUsc3IsdVRlLEl0KG5kZSkpLGd0KGUsc3IsU0csSXQoSjFlKSksZ3QoZSxzcixYaGUsSXQoR01lKSksZ3QoZSxzcixtVGUsSXQobFcpKSxndChlLHNyLHZUZSxJdChFTWUpKSxndChlLHNyLG5mZSxJdCh1VykpLGd0KGUsc3IsbUcsSXQoQk1lKSksZ3QoZSxzcixyZmUsSXQoUE1lKSksZ3QoZSxzcixpZmUsSXQoRk1lKSksZ3QoZSxzcixQeCxJdChxVCkpLGd0KGUsc3IsWlRlLEl0KGNjKSksZ3QoZSxzcixBaGUsSXQoeDIpKSxndChlLHNyLGVDZSxJdChqZCkpLGd0KGUsc3IsY0csSXQodGRlKSksZ3QoZSxzcixLaGUsSXQoX01lKSksZ3QoZSxzcix0Q2UsSXQoazIpKSxndChlLHNyLG5DZSxJdChRTCkpLGd0KGUsc3IsckNlLEl0KGJXKSksZ3QoZSxzcixpQ2UsSXQocDMpKSxndChlLHNyLHBmZSxJdChYTWUpKSxndChlLHNyLGJmZSxJdChIVCkpLGd0KGUsc3IscWhlLEl0KHpNZSkpLGd0KGUsc3IsSGhlLEl0KHFNZSkpLGd0KGUsc3IsX0csSXQodzQpKSxndChlLHNyLFdFZSxJdChYMWUpKSxndChlLHNyLFVoZSxJdChITWUpKSxndChlLHNyLHdUZSxJdChwVykpLGd0KGUsc3IseVRlLEl0KGdXKSksZ3QoZSxzcixzQ2UsSXQodlcpKSxndChlLHNyLEdoZSxJdCgkTWUpKSxndChlLHNyLGdHLEl0KFpMKSksZ3QoZSxzcixhQ2UsSXQoX0IpKSxndChlLHNyLFZFZSxJdChBTWUpKSxndChlLHNyLFlFZSxJdChaTWUpKSxndChlLHNyLHRmZSxJdChETWUpKSxndChlLHNyLHJUZSxJdChPa3QpKSxndChlLHNyLGlUZSxJdChOa3QpKSxndChlLHNyLGVUZSxJdChGa3QpKSxndChlLHNyLHNUZSxJdChQa3QpKSxndChlLHNyLEFHLEl0KFJNZSkpLGd0KGUsc3IsdFRlLEl0KG1XKSksZ3QoZSxzcixhVGUsSXQoZFcpKSxndChlLHNyLFRHLEl0KHlnKSksZ3QoZSxzcixFVGUsSXQoQ01lKSksZ3QoZSxzcix1ZmUsSXQoaFcpKSxndChlLHNyLGxmZSxJdChUTWUpKSxndChlLHNyLGtUZSxJdChmVykpLGd0KGUsc3IsY2ZlLEl0KGc0KSksZ3QoZSxzcix4VGUsSXQoUTFlKSksZ3QoZSxzcixKRWUsSXQoTk1lKSl9ZnVuY3Rpb24gbk9uKGUpe1dyKGUuYSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJhbnlTaW1wbGVUeXBlIl0pKSxXcihlLmIsbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSwiYW55VHlwZSIsQmYsWFBdKSksV3IobChPZSh0dChlLmIpLDApLDM1KSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW0JmLGEwZSxfaSwiOm1peGVkIl0pKSxXcihsKE9lKHR0KGUuYiksMSksMzUpLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbQmYsYTBlLE9TZSxjMGUsX2ksIjoxIixPNXQsImxheCJdKSksV3IobChPZSh0dChlLmIpLDIpLDM1KSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW0JmLEw1dCxPU2UsYzBlLF9pLCI6MiIsTzV0LCJsYXgiXSkpLFdyKGUuYyxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJhbnlVUkkiLFJmLHMxXSkpLFdyKGUuZCxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJiYXNlNjRCaW5hcnkiLFJmLHMxXSkpLFdyKGUuZSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLEN4LFJmLHMxXSkpLFdyKGUuZixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJib29sZWFuOk9iamVjdCIsaG8sQ3hdKSksV3IoZS5nLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksU0xdKSksV3IoZS5pLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksImJ5dGU6T2JqZWN0IixobyxTTF0pKSxXcihlLmosbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSwiZGF0ZSIsUmYsczFdKSksV3IoZS5rLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksImRhdGVUaW1lIixSZixzMV0pKSxXcihlLm4sbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSwiZGVjaW1hbCIsUmYsczFdKSksV3IoZS5vLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksX0wsUmYsczFdKSksV3IoZS5wLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksImRvdWJsZTpPYmplY3QiLGhvLF9MXSkpLFdyKGUucSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJkdXJhdGlvbiIsUmYsczFdKSksV3IoZS5zLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksIkVOVElUSUVTIixobyxONXQsTlNlLCIxIl0pKSxXcihlLnIsbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSxONXQsbzBlLFBTZV0pKSxXcihlLnQsbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSxQU2UsaG8scktdKSksV3IoZS51LGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksQUwsUmYsczFdKSksV3IoZS52LGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksImZsb2F0Ok9iamVjdCIsaG8sQUxdKSksV3IoZS53LGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksImdEYXkiLFJmLHMxXSkpLFdyKGUuQixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJnTW9udGgiLFJmLHMxXSkpLFdyKGUuQSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJnTW9udGhEYXkiLFJmLHMxXSkpLFdyKGUuQyxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJnWWVhciIsUmYsczFdKSksV3IoZS5ELGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksImdZZWFyTW9udGgiLFJmLHMxXSkpLFdyKGUuRixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJoZXhCaW5hcnkiLFJmLHMxXSkpLFdyKGUuRyxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJJRCIsaG8scktdKSksV3IoZS5ILGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksIklEUkVGIixobyxyS10pKSxXcihlLkosbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSwiSURSRUZTIixobyxQNXQsTlNlLCIxIl0pKSxXcihlLkksbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSxQNXQsbzBlLCJJRFJFRiJdKSksV3IoZS5LLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksTExdKSksV3IoZS5NLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksQlNlXSkpLFdyKGUuTCxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJpbnQ6T2JqZWN0IixobyxMTF0pKSxXcihlLlAsbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSwibGFuZ3VhZ2UiLGhvLHUwZSxsMGUsQjV0XSkpLFdyKGUuUSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLE1MXSkpLFdyKGUuUixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJsb25nOk9iamVjdCIsaG8sTUxdKSksV3IoZS5TLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksIk5hbWUiLGhvLHUwZSxsMGUsRlNlXSkpLFdyKGUuVCxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLHJLLGhvLCJOYW1lIixsMGUsRjV0XSkpLFdyKGUuVSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJuZWdhdGl2ZUludGVnZXIiLGhvLFI1dCx0QiwiLTEiXSkpLFdyKGUuVixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLFJTZSxobyx1MGUsbDBlLCJcXGMrIl0pKSxXcihlLlgsbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSwiTk1UT0tFTlMiLGhvLGo1dCxOU2UsIjEiXSkpLFdyKGUuVyxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLGo1dCxvMGUsUlNlXSkpLFdyKGUuWSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLGpTZSxobyxCU2UsbkIsIjAiXSkpLFdyKGUuWixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLFI1dCxobyxCU2UsdEIsIjAiXSkpLFdyKGUuJCxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCQ1dCxobyxJbGUsUmYsInJlcGxhY2UiXSkpLFdyKGUuXyxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJOT1RBVElPTiIsUmYsczFdKSksV3IoZS5hYixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJwb3NpdGl2ZUludGVnZXIiLGhvLGpTZSxuQiwiMSJdKSksV3IoZS5iYixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJwcm9jZXNzaW5nSW5zdHJ1Y3Rpb25fLl90eXBlIixCZiwiZW1wdHkiXSkpLFdyKGwoT2UodHQoZS5iYiksMCksMzUpLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbQmYsWkcsX2ksImRhdGEiXSkpLFdyKGwoT2UodHQoZS5iYiksMSksMzUpLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbQmYsWkcsX2ksd1NlXSkpLFdyKGUuY2IsbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSwiUU5hbWUiLFJmLHMxXSkpLFdyKGUuZGIsbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSxETF0pKSxXcihlLmViLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksInNob3J0Ok9iamVjdCIsaG8sRExdKSksV3IoZS5mYixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJzaW1wbGVBbnlUeXBlIixCZixRUF0pKSxXcihsKE9lKHR0KGUuZmIpLDApLDM1KSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCI6MyIsQmYsUVBdKSksV3IobChPZSh0dChlLmZiKSwxKSwzNSksbGksaGUobGUoenQsMSksZHQsMiw2LFtfaSwiOjQiLEJmLFFQXSkpLFdyKGwoT2UodHQoZS5mYiksMiksMTkpLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksIjo1IixCZixRUF0pKSxXcihlLmdiLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksSWxlLFJmLCJwcmVzZXJ2ZSJdKSksV3IoZS5oYixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJ0aW1lIixSZixzMV0pKSxXcihlLmliLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksdTBlLGhvLCQ1dCxSZixzMV0pKSxXcihlLmpiLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksejV0LHRCLCIyNTUiLG5CLCIwIl0pKSxXcihlLmtiLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksInVuc2lnbmVkQnl0ZTpPYmplY3QiLGhvLHo1dF0pKSxXcihlLmxiLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2kscTV0LHRCLCI0Mjk0OTY3Mjk1IixuQiwiMCJdKSksV3IoZS5tYixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCJ1bnNpZ25lZEludDpPYmplY3QiLGhvLHE1dF0pKSxXcihlLm5iLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksInVuc2lnbmVkTG9uZyIsaG8salNlLHRCLEg1dCxuQiwiMCJdKSksV3IoZS5vYixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLFY1dCx0QiwiNjU1MzUiLG5CLCIwIl0pKSxXcihlLnBiLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbX2ksInVuc2lnbmVkU2hvcnQ6T2JqZWN0IixobyxWNXRdKSksV3IoZS5xYixsaSxoZShsZSh6dCwxKSxkdCwyLDYsW19pLCIiLEJmLFhQXSkpLFdyKGwoT2UodHQoZS5xYiksMCksMzUpLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbQmYsYTBlLF9pLCI6bWl4ZWQiXSkpLFdyKGwoT2UodHQoZS5xYiksMSksMTkpLGxpLGhlKGxlKHp0LDEpLGR0LDIsNixbQmYsWkcsX2ksInhtbG5zOnByZWZpeCJdKSksV3IobChPZSh0dChlLnFiKSwyKSwxOSksbGksaGUobGUoenQsMSksZHQsMiw2LFtCZixaRyxfaSwieHNpOnNjaGVtYUxvY2F0aW9uIl0pKSxXcihsKE9lKHR0KGUucWIpLDMpLDM1KSxsaSxoZShsZSh6dCwxKSxkdCwyLDYsW0JmLGVLLF9pLCJjREFUQSIsdEssSlBdKSksV3IobChPZSh0dChlLnFiKSw0KSwzNSksbGksaGUobGUoenQsMSksZHQsMiw2LFtCZixlSyxfaSwiY29tbWVudCIsdEssSlBdKSksV3IobChPZSh0dChlLnFiKSw1KSwxOSksbGksaGUobGUoenQsMSksZHQsMiw2LFtCZixlSyxfaSxVNXQsdEssSlBdKSksV3IobChPZSh0dChlLnFiKSw2KSwzNSksbGksaGUobGUoenQsMSksZHQsMiw2LFtCZixlSyxfaSxLZmUsdEssSlBdKSl9ZnVuY3Rpb24gYWkoZSl7cmV0dXJuIHZuKCJfVUlfRU1GRGlhZ25vc3RpY19tYXJrZXIiLGUpPyJFTUYgUHJvYmxlbSI6dm4oIl9VSV9DaXJjdWxhckNvbnRhaW5tZW50X2RpYWdub3N0aWMiLGUpPyJBbiBvYmplY3QgbWF5IG5vdCBjaXJjdWxhcmx5IGNvbnRhaW4gaXRzZWxmIjp2bihfNHQsZSk/Ildyb25nIGNoYXJhY3Rlci4iOnZuKEE0dCxlKT8iSW52YWxpZCByZWZlcmVuY2UgbnVtYmVyLiI6dm4oVkcsZSk/IkEgY2hhcmFjdGVyIGlzIHJlcXVpcmVkIGFmdGVyIFxcLiI6dm4oZTBlLGUpPyInPycgaXMgbm90IGV4cGVjdGVkLiAgJyg/Oicgb3IgJyg/PScgb3IgJyg/IScgb3IgJyg/PCcgb3IgJyg/Iycgb3IgJyg/Pic/Ijp2bihMNHQsZSk/IicoPzwnIG9yICcoPzwhJyBpcyBleHBlY3RlZC4iOnZuKE00dCxlKT8iQSBjb21tZW50IGlzIG5vdCB0ZXJtaW5hdGVkLiI6dm4ob3YsZSk/IicpJyBpcyBleHBlY3RlZC4iOnZuKHlTZSxlKT8iVW5leHBlY3RlZCBlbmQgb2YgdGhlIHBhdHRlcm4gaW4gYSBtb2RpZmllciBncm91cC4iOnZuKEQ0dCxlKT8iJzonIGlzIGV4cGVjdGVkLiI6dm4oSTR0LGUpPyJVbmV4cGVjdGVkIGVuZCBvZiB0aGUgcGF0dGVybiBpbiBhIGNvbmRpdGlvbmFsIGdyb3VwLiI6dm4oTzR0LGUpPyJBIGJhY2sgcmVmZXJlbmNlIG9yIGFuIGFuY2hvciBvciBhIGxvb2thaGVhZCBvciBhIGxvb2stYmVoaW5kIGlzIGV4cGVjdGVkIGluIGEgY29uZGl0aW9uYWwgcGF0dGVybi4iOnZuKE40dCxlKT8iVGhlcmUgYXJlIG1vcmUgdGhhbiB0aHJlZSBjaG9pY2VzIGluIGEgY29uZGl0aW9uYWwgZ3JvdXAuIjp2bihQNHQsZSk/IkEgY2hhcmFjdGVyIGluIFUrMDA0MC1VKzAwNWYgbXVzdCBmb2xsb3cgXFxjLiI6dm4oQjR0LGUpPyJBICd7JyBpcyByZXF1aXJlZCBiZWZvcmUgYSBjaGFyYWN0ZXIgY2F0ZWdvcnkuIjp2bihGNHQsZSk/IkEgcHJvcGVydHkgbmFtZSBpcyBub3QgY2xvc2VkIGJ5ICd9Jy4iOnZuKHhTZSxlKT8iVW5leHBlY3RlZCBtZXRhIGNoYXJhY3Rlci4iOnZuKHQwZSxlKT8iVW5rbm93biBwcm9wZXJ0eS4iOnZuKGtTZSxlKT8iQSBQT1NJWCBjaGFyYWN0ZXIgY2xhc3MgbXVzdCBiZSBjbG9zZWQgYnkgJzpdJy4iOnZuKFVHLGUpPyJVbmV4cGVjdGVkIGVuZCBvZiB0aGUgcGF0dGVybiBpbiBhIGNoYXJhY3RlciBjbGFzcy4iOnZuKFI0dCxlKT8iVW5rbm93biBuYW1lIGZvciBhIFBPU0lYIGNoYXJhY3RlciBjbGFzcy4iOnZuKCJwYXJzZXIuY2MuNCIsZSk/IictJyBpcyBpbnZhbGlkIGhlcmUuIjp2bihqNHQsZSk/IiddJyBpcyBleHBlY3RlZC4iOnZuKEVTZSxlKT8iJ1snIGlzIGludmFsaWQgaW4gYSBjaGFyYWN0ZXIgY2xhc3MuICBXcml0ZSAnXFxbJy4iOnZuKFRTZSxlKT8iJ10nIGlzIGludmFsaWQgaW4gYSBjaGFyYWN0ZXIgY2xhc3MuICBXcml0ZSAnXFxdJy4iOnZuKG4wZSxlKT8iJy0nIGlzIGFuIGludmFsaWQgY2hhcmFjdGVyIHJhbmdlLiBXcml0ZSAnXFwtJy4iOnZuKCQ0dCxlKT8iJ1snIGlzIGV4cGVjdGVkLiI6dm4oejR0LGUpPyInKScgb3IgJy1bJyBvciAnK1snIG9yICcmWycgaXMgZXhwZWN0ZWQuIjp2bihxNHQsZSk/IlRoZSByYW5nZSBlbmQgY29kZSBwb2ludCBpcyBsZXNzIHRoYW4gdGhlIHN0YXJ0IGNvZGUgcG9pbnQuIjp2bih3MixlKT8iSW52YWxpZCBVbmljb2RlIGhleCBub3RhdGlvbi4iOnZuKEg0dCxlKT8iT3ZlcmZsb3cgaW4gYSBoZXggbm90YXRpb24uIjp2bihWNHQsZSk/IidcXHh7JyBtdXN0IGJlIGNsb3NlZCBieSAnfScuIjp2bihVNHQsZSk/IkludmFsaWQgVW5pY29kZSBjb2RlIHBvaW50LiI6dm4oRzR0LGUpPyJBbiBhbmNob3IgbXVzdCBub3QgYmUgaGVyZS4iOnZuKGJmLGUpPyJUaGlzIGV4cHJlc3Npb24gaXMgbm90IHN1cHBvcnRlZCBpbiB0aGUgY3VycmVudCBvcHRpb24gc2V0dGluZy4iOnZuKEs0dCxlKT8iSW52YWxpZCBxdWFudGlmaWVyLiBBIGRpZ2l0IGlzIGV4cGVjdGVkLiI6dm4oVzR0LGUpPyJJbnZhbGlkIHF1YW50aWZpZXIuIEludmFsaWQgcXVhbnRpdHkgb3IgYSAnfScgaXMgbWlzc2luZy4iOnZuKFk0dCxlKT8iSW52YWxpZCBxdWFudGlmaWVyLiBBIGRpZ2l0IG9yICd9JyBpcyBleHBlY3RlZC4iOnZuKFg0dCxlKT8iSW52YWxpZCBxdWFudGlmaWVyLiBBIG1pbiBxdWFudGl0eSBtdXN0IGJlIDw9IGEgbWF4IHF1YW50aXR5LiI6dm4oQ1NlLGUpPyJJbnZhbGlkIHF1YW50aWZpZXIuIEEgcXVhbnRpdHkgdmFsdWUgb3ZlcmZsb3cuIjp2bigiX1VJX1BhY2thZ2VSZWdpc3RyeV9leHRlbnNpb25wb2ludCIsZSk/IkVjb3JlIFBhY2thZ2UgUmVnaXN0cnkgZm9yIEdlbmVyYXRlZCBQYWNrYWdlcyI6dm4oIl9VSV9EeW5hbWljUGFja2FnZVJlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50IixlKT8iRWNvcmUgUGFja2FnZSBSZWdpc3RyeSBmb3IgRHluYW1pYyBQYWNrYWdlcyI6dm4oIl9VSV9GYWN0b3J5UmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQiLGUpPyJFY29yZSBGYWN0b3J5IE92ZXJyaWRlIFJlZ2lzdHJ5Ijp2bigiX1VJX1VSSUV4dGVuc2lvblBhcnNlclJlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50IixlKT8iVVJJIEV4dGVuc2lvbiBQYXJzZXIgUmVnaXN0cnkiOnZuKCJfVUlfVVJJUHJvdG9jb2xQYXJzZXJSZWdpc3RyeV9leHRlbnNpb25wb2ludCIsZSk/IlVSSSBQcm90b2NvbCBQYXJzZXIgUmVnaXN0cnkiOnZuKCJfVUlfVVJJQ29udGVudFBhcnNlclJlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50IixlKT8iVVJJIENvbnRlbnQgUGFyc2VyIFJlZ2lzdHJ5Ijp2bigiX1VJX0NvbnRlbnRIYW5kbGVyUmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQiLGUpPyJDb250ZW50IEhhbmRsZXIgUmVnaXN0cnkiOnZuKCJfVUlfVVJJTWFwcGluZ1JlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50IixlKT8iVVJJIENvbnZlcnRlciBNYXBwaW5nIFJlZ2lzdHJ5Ijp2bigiX1VJX1BhY2thZ2VSZWdpc3RyeUltcGxlbWVudGF0aW9uX2V4dGVuc2lvbnBvaW50IixlKT8iRWNvcmUgUGFja2FnZSBSZWdpc3RyeSBJbXBsZW1lbnRhdGlvbiI6dm4oIl9VSV9WYWxpZGF0aW9uRGVsZWdhdGVSZWdpc3RyeV9leHRlbnNpb25wb2ludCIsZSk/IlZhbGlkYXRpb24gRGVsZWdhdGUgUmVnaXN0cnkiOnZuKCJfVUlfU2V0dGluZ0RlbGVnYXRlUmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQiLGUpPyJGZWF0dXJlIFNldHRpbmcgRGVsZWdhdGUgRmFjdG9yeSBSZWdpc3RyeSI6dm4oIl9VSV9JbnZvY2F0aW9uRGVsZWdhdGVSZWdpc3RyeV9leHRlbnNpb25wb2ludCIsZSk/Ik9wZXJhdGlvbiBJbnZvY2F0aW9uIERlbGVnYXRlIEZhY3RvcnkgUmVnaXN0cnkiOnZuKCJfVUlfRUNsYXNzSW50ZXJmYWNlTm90QWJzdHJhY3RfZGlhZ25vc3RpYyIsZSk/IkEgY2xhc3MgdGhhdCBpcyBhbiBpbnRlcmZhY2UgbXVzdCBhbHNvIGJlIGFic3RyYWN0Ijp2bigiX1VJX0VDbGFzc05vQ2lyY3VsYXJTdXBlclR5cGVzX2RpYWdub3N0aWMiLGUpPyJBIGNsYXNzIG1heSBub3QgYmUgYSBzdXBlciB0eXBlIG9mIGl0c2VsZiI6dm4oIl9VSV9FQ2xhc3NOb3RXZWxsRm9ybWVkTWFwRW50cnlOb0luc3RhbmNlQ2xhc3NOYW1lX2RpYWdub3N0aWMiLGUpPyJBIGNsYXNzIHRoYXQgaW5oZXJpdHMgZnJvbSBhIG1hcCBlbnRyeSBjbGFzcyBtdXN0IGhhdmUgaW5zdGFuY2UgY2xhc3MgbmFtZSAnamF2YS51dGlsLk1hcCRFbnRyeSciOnZuKCJfVUlfRVJlZmVyZW5jZU9wcG9zaXRlT2ZPcHBvc2l0ZUluY29uc2lzdGVudF9kaWFnbm9zdGljIixlKT8iVGhlIG9wcG9zaXRlIG9mIHRoZSBvcHBvc2l0ZSBtYXkgbm90IGJlIGEgcmVmZXJlbmNlIGRpZmZlcmVudCBmcm9tIHRoaXMgb25lIjp2bigiX1VJX0VSZWZlcmVuY2VPcHBvc2l0ZU5vdEZlYXR1cmVPZlR5cGVfZGlhZ25vc3RpYyIsZSk/IlRoZSBvcHBvc2l0ZSBtdXN0IGJlIGEgZmVhdHVyZSBvZiB0aGUgcmVmZXJlbmNlJ3MgdHlwZSI6dm4oIl9VSV9FUmVmZXJlbmNlVHJhbnNpZW50T3Bwb3NpdGVOb3RUcmFuc2llbnRfZGlhZ25vc3RpYyIsZSk/IlRoZSBvcHBvc2l0ZSBvZiBhIHRyYW5zaWVudCByZWZlcmVuY2UgbXVzdCBiZSB0cmFuc2llbnQgaWYgaXQgaXMgcHJveHkgcmVzb2x2aW5nIjp2bigiX1VJX0VSZWZlcmVuY2VPcHBvc2l0ZUJvdGhDb250YWlubWVudF9kaWFnbm9zdGljIixlKT8iVGhlIG9wcG9zaXRlIG9mIGEgY29udGFpbm1lbnQgcmVmZXJlbmNlIG11c3Qgbm90IGJlIGEgY29udGFpbm1lbnQgcmVmZXJlbmNlIjp2bigiX1VJX0VSZWZlcmVuY2VDb25zaXN0ZW50VW5pcXVlX2RpYWdub3N0aWMiLGUpPyJBIGNvbnRhaW5tZW50IG9yIGJpZGlyZWN0aW9uYWwgcmVmZXJlbmNlIG11c3QgYmUgdW5pcXVlIGlmIGl0cyB1cHBlciBib3VuZCBpcyBkaWZmZXJlbnQgZnJvbSAxIjp2bigiX1VJX0VUeXBlZEVsZW1lbnROb1R5cGVfZGlhZ25vc3RpYyIsZSk/IlRoZSB0eXBlZCBlbGVtZW50IG11c3QgaGF2ZSBhIHR5cGUiOnZuKCJfVUlfRUF0dHJpYnV0ZU5vRGF0YVR5cGVfZGlhZ25vc3RpYyIsZSk/IlRoZSBnZW5lcmljIGF0dHJpYnV0ZSB0eXBlIG11c3Qgbm90IHJlZmVyIHRvIGEgY2xhc3MiOnZuKCJfVUlfRVJlZmVyZW5jZU5vQ2xhc3NfZGlhZ25vc3RpYyIsZSk/IlRoZSBnZW5lcmljIHJlZmVyZW5jZSB0eXBlIG11c3Qgbm90IHJlZmVyIHRvIGEgZGF0YSB0eXBlIjp2bigiX1VJX0VHZW5lcmljVHlwZU5vVHlwZVBhcmFtZXRlckFuZENsYXNzaWZpZXJfZGlhZ25vc3RpYyIsZSk/IkEgZ2VuZXJpYyB0eXBlIGNhbid0IHJlZmVyIHRvIGJvdGggYSB0eXBlIHBhcmFtZXRlciBhbmQgYSBjbGFzc2lmaWVyIjp2bigiX1VJX0VHZW5lcmljVHlwZU5vQ2xhc3NfZGlhZ25vc3RpYyIsZSk/IkEgZ2VuZXJpYyBzdXBlciB0eXBlIG11c3QgcmVmZXIgdG8gYSBjbGFzcyI6dm4oIl9VSV9FR2VuZXJpY1R5cGVOb1R5cGVQYXJhbWV0ZXJPckNsYXNzaWZpZXJfZGlhZ25vc3RpYyIsZSk/IkEgZ2VuZXJpYyB0eXBlIGluIHRoaXMgY29udGV4dCBtdXN0IHJlZmVyIHRvIGEgY2xhc3NpZmllciBvciBhIHR5cGUgcGFyYW1ldGVyIjp2bigiX1VJX0VHZW5lcmljVHlwZUJvdW5kc09ubHlGb3JUeXBlQXJndW1lbnRfZGlhZ25vc3RpYyIsZSk/IkEgZ2VuZXJpYyB0eXBlIG1heSBoYXZlIGJvdW5kcyBvbmx5IHdoZW4gdXNlZCBhcyBhIHR5cGUgYXJndW1lbnQiOnZuKCJfVUlfRUdlbmVyaWNUeXBlTm9VcHBlckFuZExvd2VyQm91bmRfZGlhZ25vc3RpYyIsZSk/IkEgZ2VuZXJpYyB0eXBlIG11c3Qgbm90IGhhdmUgYm90aCBhIGxvd2VyIGFuZCBhbiB1cHBlciBib3VuZCI6dm4oIl9VSV9FR2VuZXJpY1R5cGVOb1R5cGVQYXJhbWV0ZXJPckNsYXNzaWZpZXJBbmRCb3VuZF9kaWFnbm9zdGljIixlKT8iQSBnZW5lcmljIHR5cGUgd2l0aCBib3VuZHMgbXVzdCBub3QgYWxzbyByZWZlciB0byBhIHR5cGUgcGFyYW1ldGVyIG9yIGNsYXNzaWZpZXIiOnZuKCJfVUlfRUdlbmVyaWNUeXBlTm9Bcmd1bWVudHNfZGlhZ25vc3RpYyIsZSk/IkEgZ2VuZXJpYyB0eXBlIG1heSBoYXZlIGFyZ3VtZW50cyBvbmx5IGlmIGl0IHJlZmVycyB0byBhIGNsYXNzaWZpZXIiOnZuKCJfVUlfRUdlbmVyaWNUeXBlT3V0T2ZTY29wZVR5cGVQYXJhbWV0ZXJfZGlhZ25vc3RpYyIsZSk/IkEgZ2VuZXJpYyB0eXBlIG1heSBvbmx5IHJlZmVyIHRvIGEgdHlwZSBwYXJhbWV0ZXIgdGhhdCBpcyBpbiBzY29wZSI6ZX1mdW5jdGlvbiByT24oZSl7dmFyIHQsbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKO2Uucnx8KGUucj0hMCxGdShlLCJncmFwaCIpLENWKGUsImdyYXBoIiksU1YoZSx4VCksa04oZS5vLCJUIikscXIoZGMoZS5hKSxlLnApLHFyKGRjKGUuZiksZS5hKSxxcihkYyhlLm4pLGUuZikscXIoZGMoZS5nKSxlLm4pLHFyKGRjKGUuYyksZS5uKSxxcihkYyhlLmkpLGUuYykscXIoZGMoZS5qKSxlLmMpLHFyKGRjKGUuZCksZS5mKSxxcihkYyhlLmUpLGUuYSksemMoZS5wLHdPbixtM3QsITAsITAsITEpLFY9SjUoZS5wLGUucCwic2V0UHJvcGVydHkiKSxKPWkwdChWKSxFPUtnKGUubyksQz0obj0ocj1uZXcgUXYsciksbikscXIoKCFFLmQmJihFLmQ9bmV3IFlzKFdvLEUsMSkpLEUuZCksQyksTD10b2UoSiksQXhlKEMsTCksZ1UoVixFLGxTZSksRT10b2UoSiksZ1UoVixFLFRMKSxWPUo1KGUucCxudWxsLCJnZXRQcm9wZXJ0eSIpLEo9aTB0KFYpLEU9S2coZS5vKSxDPXRvZShKKSxxcigoIUUuZCYmKEUuZD1uZXcgWXMoV28sRSwxKSksRS5kKSxDKSxnVShWLEUsbFNlKSxFPXRvZShKKSx6PSQxKFYsRSxudWxsKSx6JiZ6Lm9qKCksVj1KNShlLnAsZS53Yi5lLCJoYXNQcm9wZXJ0eSIpLEU9S2coZS5vKSxDPShhPShvPW5ldyBRdixvKSxhKSxxcigoIUUuZCYmKEUuZD1uZXcgWXMoV28sRSwxKSksRS5kKSxDKSxnVShWLEUsbFNlKSxWPUo1KGUucCxlLnAsImNvcHlQcm9wZXJ0aWVzIiksYWMoVixlLnAsSGZlKSxWPUo1KGUucCxudWxsLCJnZXRBbGxQcm9wZXJ0aWVzIiksRT1LZyhlLndiLlApLEM9S2coZS5vKSxxcigoIUUuZCYmKEUuZD1uZXcgWXMoV28sRSwxKSksRS5kKSxDKSxMPShmPShnPW5ldyBRdixnKSxmKSxxcigoIUMuZCYmKEMuZD1uZXcgWXMoV28sQywxKSksQy5kKSxMKSxDPUtnKGUud2IuTSkscXIoKCFFLmQmJihFLmQ9bmV3IFlzKFdvLEUsMSkpLEUuZCksQyksQj0kMShWLEUsbnVsbCksQiYmQi5vaigpLHpjKGUuYSxvQyxyNHQsITAsITEsITApLHNzKGwoT2UodHQoZS5hKSwwKSwxOSksZS5rLG51bGwscDR0LDAsLTEsb0MsITEsITEsITAsITAsITEsITEsITEpLHpjKGUuZixvRixzNHQsITAsITEsITApLHNzKGwoT2UodHQoZS5mKSwwKSwxOSksZS5nLGwoT2UodHQoZS5nKSwwKSwxOSksImxhYmVscyIsMCwtMSxvRiwhMSwhMSwhMCwhMCwhMSwhMSwhMSksT3MobChPZSh0dChlLmYpLDEpLDM1KSxlLndiLl8sYjR0LG51bGwsMCwxLG9GLCExLCExLCEwLCExLCEwLCExKSx6YyhlLm4sY0YsIkVsa1NoYXBlIiwhMCwhMSwhMCksT3MobChPZSh0dChlLm4pLDApLDM1KSxlLndiLnQsVmZlLHNULDEsMSxjRiwhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLm4pLDEpLDM1KSxlLndiLnQsVWZlLHNULDEsMSxjRiwhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLm4pLDIpLDM1KSxlLndiLnQsIngiLHNULDEsMSxjRiwhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLm4pLDMpLDM1KSxlLndiLnQsInkiLHNULDEsMSxjRiwhMSwhMSwhMCwhMSwhMCwhMSksVj1KNShlLm4sbnVsbCwic2V0RGltZW5zaW9ucyIpLGFjKFYsZS53Yi50LFVmZSksYWMoVixlLndiLnQsVmZlKSxWPUo1KGUubixudWxsLCJzZXRMb2NhdGlvbiIpLGFjKFYsZS53Yi50LCJ4IiksYWMoVixlLndiLnQsInkiKSx6YyhlLmcsZWMsb1NlLCExLCExLCEwKSxzcyhsKE9lKHR0KGUuZyksMCksMTkpLGUuZixsKE9lKHR0KGUuZiksMCksMTkpLEdmZSwwLDEsZWMsITEsITEsITAsITEsITEsITEsITEpLE9zKGwoT2UodHQoZS5nKSwxKSwzNSksZS53Yi5fLEtmZSwiIiwwLDEsZWMsITEsITEsITAsITEsITAsITEpLHpjKGUuYyxfcixhNHQsITAsITEsITApLHNzKGwoT2UodHQoZS5jKSwwKSwxOSksZS5kLGwoT2UodHQoZS5kKSwxKSwxOSksIm91dGdvaW5nRWRnZXMiLDAsLTEsX3IsITEsITEsITAsITEsITAsITEsITEpLHNzKGwoT2UodHQoZS5jKSwxKSwxOSksZS5kLGwoT2UodHQoZS5kKSwyKSwxOSksImluY29taW5nRWRnZXMiLDAsLTEsX3IsITEsITEsITAsITEsITAsITEsITEpLHpjKGUuaSxBaSxjU2UsITEsITEsITApLHNzKGwoT2UodHQoZS5pKSwwKSwxOSksZS5qLGwoT2UodHQoZS5qKSwwKSwxOSksInBvcnRzIiwwLC0xLEFpLCExLCExLCEwLCEwLCExLCExLCExKSxzcyhsKE9lKHR0KGUuaSksMSksMTkpLGUuaSxsKE9lKHR0KGUuaSksMiksMTkpLFdmZSwwLC0xLEFpLCExLCExLCEwLCEwLCExLCExLCExKSxzcyhsKE9lKHR0KGUuaSksMiksMTkpLGUuaSxsKE9lKHR0KGUuaSksMSksMTkpLEdmZSwwLDEsQWksITEsITEsITAsITEsITEsITEsITEpLHNzKGwoT2UodHQoZS5pKSwzKSwxOSksZS5kLGwoT2UodHQoZS5kKSwwKSwxOSksImNvbnRhaW5lZEVkZ2VzIiwwLC0xLEFpLCExLCExLCEwLCEwLCExLCExLCExKSxPcyhsKE9lKHR0KGUuaSksNCksMzUpLGUud2IuZSxtNHQsbnVsbCwwLDEsQWksITAsITAsITEsITEsITAsITApLHpjKGUuaixIbCx1U2UsITEsITEsITApLHNzKGwoT2UodHQoZS5qKSwwKSwxOSksZS5pLGwoT2UodHQoZS5pKSwwKSwxOSksR2ZlLDAsMSxIbCwhMSwhMSwhMCwhMSwhMSwhMSwhMSksemMoZS5kLGpzLGFTZSwhMSwhMSwhMCksc3MobChPZSh0dChlLmQpLDApLDE5KSxlLmksbChPZSh0dChlLmkpLDMpLDE5KSwiY29udGFpbmluZ05vZGUiLDAsMSxqcywhMSwhMSwhMCwhMSwhMSwhMSwhMSksc3MobChPZSh0dChlLmQpLDEpLDE5KSxlLmMsbChPZSh0dChlLmMpLDApLDE5KSxoU2UsMCwtMSxqcywhMSwhMSwhMCwhMSwhMCwhMSwhMSksc3MobChPZSh0dChlLmQpLDIpLDE5KSxlLmMsbChPZSh0dChlLmMpLDEpLDE5KSxZZmUsMCwtMSxqcywhMSwhMSwhMCwhMSwhMCwhMSwhMSksc3MobChPZSh0dChlLmQpLDMpLDE5KSxlLmUsbChPZSh0dChlLmUpLDUpLDE5KSxmU2UsMCwtMSxqcywhMSwhMSwhMCwhMCwhMSwhMSwhMSksT3MobChPZSh0dChlLmQpLDQpLDM1KSxlLndiLmUsImh5cGVyZWRnZSIsbnVsbCwwLDEsanMsITAsITAsITEsITEsITAsITApLE9zKGwoT2UodHQoZS5kKSw1KSwzNSksZS53Yi5lLG00dCxudWxsLDAsMSxqcywhMCwhMCwhMSwhMSwhMCwhMCksT3MobChPZSh0dChlLmQpLDYpLDM1KSxlLndiLmUsInNlbGZsb29wIixudWxsLDAsMSxqcywhMCwhMCwhMSwhMSwhMCwhMCksT3MobChPZSh0dChlLmQpLDcpLDM1KSxlLndiLmUsImNvbm5lY3RlZCIsbnVsbCwwLDEsanMsITAsITAsITEsITEsITAsITApLHpjKGUuYixxaCxpNHQsITEsITEsITApLE9zKGwoT2UodHQoZS5iKSwwKSwzNSksZS53Yi50LCJ4IixzVCwxLDEscWgsITEsITEsITAsITEsITAsITEpLE9zKGwoT2UodHQoZS5iKSwxKSwzNSksZS53Yi50LCJ5IixzVCwxLDEscWgsITEsITEsITAsITEsITAsITEpLFY9SjUoZS5iLG51bGwsInNldCIpLGFjKFYsZS53Yi50LCJ4IiksYWMoVixlLndiLnQsInkiKSx6YyhlLmUsY3MsbzR0LCExLCExLCEwKSxPcyhsKE9lKHR0KGUuZSksMCksMzUpLGUud2IudCwic3RhcnRYIixudWxsLDAsMSxjcywhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLmUpLDEpLDM1KSxlLndiLnQsInN0YXJ0WSIsbnVsbCwwLDEsY3MsITEsITEsITAsITEsITAsITEpLE9zKGwoT2UodHQoZS5lKSwyKSwzNSksZS53Yi50LCJlbmRYIixudWxsLDAsMSxjcywhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLmUpLDMpLDM1KSxlLndiLnQsImVuZFkiLG51bGwsMCwxLGNzLCExLCExLCEwLCExLCEwLCExKSxzcyhsKE9lKHR0KGUuZSksNCksMTkpLGUuYixudWxsLCRHLDAsLTEsY3MsITEsITEsITAsITAsITEsITEsITEpLHNzKGwoT2UodHQoZS5lKSw1KSwxOSksZS5kLGwoT2UodHQoZS5kKSwzKSwxOSksR2ZlLDAsMSxjcywhMSwhMSwhMCwhMSwhMSwhMSwhMSksc3MobChPZSh0dChlLmUpLDYpLDE5KSxlLmMsbnVsbCxkU2UsMCwxLGNzLCExLCExLCEwLCExLCEwLCExLCExKSxzcyhsKE9lKHR0KGUuZSksNyksMTkpLGUuYyxudWxsLGdTZSwwLDEsY3MsITEsITEsITAsITEsITAsITEsITEpLHNzKGwoT2UodHQoZS5lKSw4KSwxOSksZS5lLGwoT2UodHQoZS5lKSw5KSwxOSkscFNlLDAsLTEsY3MsITEsITEsITAsITEsITAsITEsITEpLHNzKGwoT2UodHQoZS5lKSw5KSwxOSksZS5lLGwoT2UodHQoZS5lKSw4KSwxOSksYlNlLDAsLTEsY3MsITEsITEsITAsITEsITAsITEsITEpLE9zKGwoT2UodHQoZS5lKSwxMCksMzUpLGUud2IuXyxiNHQsbnVsbCwwLDEsY3MsITEsITEsITAsITEsITAsITEpLFY9SjUoZS5lLG51bGwsInNldFN0YXJ0TG9jYXRpb24iKSxhYyhWLGUud2IudCwieCIpLGFjKFYsZS53Yi50LCJ5IiksVj1KNShlLmUsbnVsbCwic2V0RW5kTG9jYXRpb24iKSxhYyhWLGUud2IudCwieCIpLGFjKFYsZS53Yi50LCJ5IiksemMoZS5rLHV2LCJFbGtQcm9wZXJ0eVRvVmFsdWVNYXBFbnRyeSIsITEsITEsITEpLEU9S2coZS5vKSxDPSh3PSh0PW5ldyBRdix0KSx3KSxxcigoIUUuZCYmKEUuZD1uZXcgWXMoV28sRSwxKSksRS5kKSxDKSxnMnQobChPZSh0dChlLmspLDApLDM1KSxFLCJrZXkiLHV2LCExLCExLCEwLCExKSxPcyhsKE9lKHR0KGUuayksMSksMzUpLGUucyxUTCxudWxsLDAsMSx1diwhMSwhMSwhMCwhMSwhMCwhMSksRWkoZS5vLENnZSwiSVByb3BlcnR5IiwhMCksRWkoZS5zLHdhLCJQcm9wZXJ0eVZhbHVlIiwhMCksdDhlKGUseFQpKX1mdW5jdGlvbiBDd3QoKXtDd3Q9VSx5ZT1XZShBbCxDNiwyOCxJbywxNSwxKSx5ZVs5XT0zNSx5ZVsxMF09MTkseWVbMTNdPTE5LHllWzMyXT01MSx5ZVszM109NDkseWVbMzRdPTMzLEhlKHllLDM1LDM4LDQ5KSx5ZVszOF09MSxIZSh5ZSwzOSw0NSw0OSksSGUoeWUsNDUsNDcsLTcxKSx5ZVs0N109NDksSGUoeWUsNDgsNTgsLTcxKSx5ZVs1OF09NjEseWVbNTldPTQ5LHllWzYwXT0xLHllWzYxXT00OSx5ZVs2Ml09MzMsSGUoeWUsNjMsNjUsNDkpLEhlKHllLDY1LDkxLC0zKSxIZSh5ZSw5MSw5MywzMykseWVbOTNdPTEseWVbOTRdPTMzLHllWzk1XT0tMyx5ZVs5Nl09MzMsSGUoeWUsOTcsMTIzLC0zKSxIZSh5ZSwxMjMsMTgzLDMzKSx5ZVsxODNdPS04NyxIZSh5ZSwxODQsMTkyLDMzKSxIZSh5ZSwxOTIsMjE1LC0xOSkseWVbMjE1XT0zMyxIZSh5ZSwyMTYsMjQ3LC0xOSkseWVbMjQ3XT0zMyxIZSh5ZSwyNDgsMzA2LC0xOSksSGUoeWUsMzA2LDMwOCwzMyksSGUoeWUsMzA4LDMxOSwtMTkpLEhlKHllLDMxOSwzMjEsMzMpLEhlKHllLDMyMSwzMjksLTE5KSx5ZVszMjldPTMzLEhlKHllLDMzMCwzODMsLTE5KSx5ZVszODNdPTMzLEhlKHllLDM4NCw0NTIsLTE5KSxIZSh5ZSw0NTIsNDYxLDMzKSxIZSh5ZSw0NjEsNDk3LC0xOSksSGUoeWUsNDk3LDUwMCwzMyksSGUoeWUsNTAwLDUwMiwtMTkpLEhlKHllLDUwMiw1MDYsMzMpLEhlKHllLDUwNiw1MzYsLTE5KSxIZSh5ZSw1MzYsNTkyLDMzKSxIZSh5ZSw1OTIsNjgxLC0xOSksSGUoeWUsNjgxLDY5OSwzMyksSGUoeWUsNjk5LDcwNiwtMTkpLEhlKHllLDcwNiw3MjAsMzMpLEhlKHllLDcyMCw3MjIsLTg3KSxIZSh5ZSw3MjIsNzY4LDMzKSxIZSh5ZSw3NjgsODM4LC04NyksSGUoeWUsODM4LDg2NCwzMyksSGUoeWUsODY0LDg2NiwtODcpLEhlKHllLDg2Niw5MDIsMzMpLHllWzkwMl09LTE5LHllWzkwM109LTg3LEhlKHllLDkwNCw5MDcsLTE5KSx5ZVs5MDddPTMzLHllWzkwOF09LTE5LHllWzkwOV09MzMsSGUoeWUsOTEwLDkzMCwtMTkpLHllWzkzMF09MzMsSGUoeWUsOTMxLDk3NSwtMTkpLHllWzk3NV09MzMsSGUoeWUsOTc2LDk4MywtMTkpLEhlKHllLDk4Myw5ODYsMzMpLHllWzk4Nl09LTE5LHllWzk4N109MzMseWVbOTg4XT0tMTkseWVbOTg5XT0zMyx5ZVs5OTBdPS0xOSx5ZVs5OTFdPTMzLHllWzk5Ml09LTE5LHllWzk5M109MzMsSGUoeWUsOTk0LDEwMTIsLTE5KSxIZSh5ZSwxMDEyLDEwMjUsMzMpLEhlKHllLDEwMjUsMTAzNywtMTkpLHllWzEwMzddPTMzLEhlKHllLDEwMzgsMTEwNCwtMTkpLHllWzExMDRdPTMzLEhlKHllLDExMDUsMTExNywtMTkpLHllWzExMTddPTMzLEhlKHllLDExMTgsMTE1NCwtMTkpLHllWzExNTRdPTMzLEhlKHllLDExNTUsMTE1OSwtODcpLEhlKHllLDExNTksMTE2OCwzMyksSGUoeWUsMTE2OCwxMjIxLC0xOSksSGUoeWUsMTIyMSwxMjIzLDMzKSxIZSh5ZSwxMjIzLDEyMjUsLTE5KSxIZSh5ZSwxMjI1LDEyMjcsMzMpLEhlKHllLDEyMjcsMTIyOSwtMTkpLEhlKHllLDEyMjksMTIzMiwzMyksSGUoeWUsMTIzMiwxMjYwLC0xOSksSGUoeWUsMTI2MCwxMjYyLDMzKSxIZSh5ZSwxMjYyLDEyNzAsLTE5KSxIZSh5ZSwxMjcwLDEyNzIsMzMpLEhlKHllLDEyNzIsMTI3NCwtMTkpLEhlKHllLDEyNzQsMTMyOSwzMyksSGUoeWUsMTMyOSwxMzY3LC0xOSksSGUoeWUsMTM2NywxMzY5LDMzKSx5ZVsxMzY5XT0tMTksSGUoeWUsMTM3MCwxMzc3LDMzKSxIZSh5ZSwxMzc3LDE0MTUsLTE5KSxIZSh5ZSwxNDE1LDE0MjUsMzMpLEhlKHllLDE0MjUsMTQ0MiwtODcpLHllWzE0NDJdPTMzLEhlKHllLDE0NDMsMTQ2NiwtODcpLHllWzE0NjZdPTMzLEhlKHllLDE0NjcsMTQ3MCwtODcpLHllWzE0NzBdPTMzLHllWzE0NzFdPS04Nyx5ZVsxNDcyXT0zMyxIZSh5ZSwxNDczLDE0NzUsLTg3KSx5ZVsxNDc1XT0zMyx5ZVsxNDc2XT0tODcsSGUoeWUsMTQ3NywxNDg4LDMzKSxIZSh5ZSwxNDg4LDE1MTUsLTE5KSxIZSh5ZSwxNTE1LDE1MjAsMzMpLEhlKHllLDE1MjAsMTUyMywtMTkpLEhlKHllLDE1MjMsMTU2OSwzMyksSGUoeWUsMTU2OSwxNTk1LC0xOSksSGUoeWUsMTU5NSwxNjAwLDMzKSx5ZVsxNjAwXT0tODcsSGUoeWUsMTYwMSwxNjExLC0xOSksSGUoeWUsMTYxMSwxNjE5LC04NyksSGUoeWUsMTYxOSwxNjMyLDMzKSxIZSh5ZSwxNjMyLDE2NDIsLTg3KSxIZSh5ZSwxNjQyLDE2NDgsMzMpLHllWzE2NDhdPS04NyxIZSh5ZSwxNjQ5LDE3MjAsLTE5KSxIZSh5ZSwxNzIwLDE3MjIsMzMpLEhlKHllLDE3MjIsMTcyNywtMTkpLHllWzE3MjddPTMzLEhlKHllLDE3MjgsMTc0MywtMTkpLHllWzE3NDNdPTMzLEhlKHllLDE3NDQsMTc0OCwtMTkpLHllWzE3NDhdPTMzLHllWzE3NDldPS0xOSxIZSh5ZSwxNzUwLDE3NjUsLTg3KSxIZSh5ZSwxNzY1LDE3NjcsLTE5KSxIZSh5ZSwxNzY3LDE3NjksLTg3KSx5ZVsxNzY5XT0zMyxIZSh5ZSwxNzcwLDE3NzQsLTg3KSxIZSh5ZSwxNzc0LDE3NzYsMzMpLEhlKHllLDE3NzYsMTc4NiwtODcpLEhlKHllLDE3ODYsMjMwNSwzMyksSGUoeWUsMjMwNSwyMzA4LC04NykseWVbMjMwOF09MzMsSGUoeWUsMjMwOSwyMzYyLC0xOSksSGUoeWUsMjM2MiwyMzY0LDMzKSx5ZVsyMzY0XT0tODcseWVbMjM2NV09LTE5LEhlKHllLDIzNjYsMjM4MiwtODcpLEhlKHllLDIzODIsMjM4NSwzMyksSGUoeWUsMjM4NSwyMzg5LC04NyksSGUoeWUsMjM4OSwyMzkyLDMzKSxIZSh5ZSwyMzkyLDI0MDIsLTE5KSxIZSh5ZSwyNDAyLDI0MDQsLTg3KSxIZSh5ZSwyNDA0LDI0MDYsMzMpLEhlKHllLDI0MDYsMjQxNiwtODcpLEhlKHllLDI0MTYsMjQzMywzMyksSGUoeWUsMjQzMywyNDM2LC04NykseWVbMjQzNl09MzMsSGUoeWUsMjQzNywyNDQ1LC0xOSksSGUoeWUsMjQ0NSwyNDQ3LDMzKSxIZSh5ZSwyNDQ3LDI0NDksLTE5KSxIZSh5ZSwyNDQ5LDI0NTEsMzMpLEhlKHllLDI0NTEsMjQ3MywtMTkpLHllWzI0NzNdPTMzLEhlKHllLDI0NzQsMjQ4MSwtMTkpLHllWzI0ODFdPTMzLHllWzI0ODJdPS0xOSxIZSh5ZSwyNDgzLDI0ODYsMzMpLEhlKHllLDI0ODYsMjQ5MCwtMTkpLEhlKHllLDI0OTAsMjQ5MiwzMykseWVbMjQ5Ml09LTg3LHllWzI0OTNdPTMzLEhlKHllLDI0OTQsMjUwMSwtODcpLEhlKHllLDI1MDEsMjUwMywzMyksSGUoeWUsMjUwMywyNTA1LC04NyksSGUoeWUsMjUwNSwyNTA3LDMzKSxIZSh5ZSwyNTA3LDI1MTAsLTg3KSxIZSh5ZSwyNTEwLDI1MTksMzMpLHllWzI1MTldPS04NyxIZSh5ZSwyNTIwLDI1MjQsMzMpLEhlKHllLDI1MjQsMjUyNiwtMTkpLHllWzI1MjZdPTMzLEhlKHllLDI1MjcsMjUzMCwtMTkpLEhlKHllLDI1MzAsMjUzMiwtODcpLEhlKHllLDI1MzIsMjUzNCwzMyksSGUoeWUsMjUzNCwyNTQ0LC04NyksSGUoeWUsMjU0NCwyNTQ2LC0xOSksSGUoeWUsMjU0NiwyNTYyLDMzKSx5ZVsyNTYyXT0tODcsSGUoeWUsMjU2MywyNTY1LDMzKSxIZSh5ZSwyNTY1LDI1NzEsLTE5KSxIZSh5ZSwyNTcxLDI1NzUsMzMpLEhlKHllLDI1NzUsMjU3NywtMTkpLEhlKHllLDI1NzcsMjU3OSwzMyksSGUoeWUsMjU3OSwyNjAxLC0xOSkseWVbMjYwMV09MzMsSGUoeWUsMjYwMiwyNjA5LC0xOSkseWVbMjYwOV09MzMsSGUoeWUsMjYxMCwyNjEyLC0xOSkseWVbMjYxMl09MzMsSGUoeWUsMjYxMywyNjE1LC0xOSkseWVbMjYxNV09MzMsSGUoeWUsMjYxNiwyNjE4LC0xOSksSGUoeWUsMjYxOCwyNjIwLDMzKSx5ZVsyNjIwXT0tODcseWVbMjYyMV09MzMsSGUoeWUsMjYyMiwyNjI3LC04NyksSGUoeWUsMjYyNywyNjMxLDMzKSxIZSh5ZSwyNjMxLDI2MzMsLTg3KSxIZSh5ZSwyNjMzLDI2MzUsMzMpLEhlKHllLDI2MzUsMjYzOCwtODcpLEhlKHllLDI2MzgsMjY0OSwzMyksSGUoeWUsMjY0OSwyNjUzLC0xOSkseWVbMjY1M109MzMseWVbMjY1NF09LTE5LEhlKHllLDI2NTUsMjY2MiwzMyksSGUoeWUsMjY2MiwyNjc0LC04NyksSGUoeWUsMjY3NCwyNjc3LC0xOSksSGUoeWUsMjY3NywyNjg5LDMzKSxIZSh5ZSwyNjg5LDI2OTIsLTg3KSx5ZVsyNjkyXT0zMyxIZSh5ZSwyNjkzLDI3MDAsLTE5KSx5ZVsyNzAwXT0zMyx5ZVsyNzAxXT0tMTkseWVbMjcwMl09MzMsSGUoeWUsMjcwMywyNzA2LC0xOSkseWVbMjcwNl09MzMsSGUoeWUsMjcwNywyNzI5LC0xOSkseWVbMjcyOV09MzMsSGUoeWUsMjczMCwyNzM3LC0xOSkseWVbMjczN109MzMsSGUoeWUsMjczOCwyNzQwLC0xOSkseWVbMjc0MF09MzMsSGUoeWUsMjc0MSwyNzQ2LC0xOSksSGUoeWUsMjc0NiwyNzQ4LDMzKSx5ZVsyNzQ4XT0tODcseWVbMjc0OV09LTE5LEhlKHllLDI3NTAsMjc1OCwtODcpLHllWzI3NThdPTMzLEhlKHllLDI3NTksMjc2MiwtODcpLHllWzI3NjJdPTMzLEhlKHllLDI3NjMsMjc2NiwtODcpLEhlKHllLDI3NjYsMjc4NCwzMykseWVbMjc4NF09LTE5LEhlKHllLDI3ODUsMjc5MCwzMyksSGUoeWUsMjc5MCwyODAwLC04NyksSGUoeWUsMjgwMCwyODE3LDMzKSxIZSh5ZSwyODE3LDI4MjAsLTg3KSx5ZVsyODIwXT0zMyxIZSh5ZSwyODIxLDI4MjksLTE5KSxIZSh5ZSwyODI5LDI4MzEsMzMpLEhlKHllLDI4MzEsMjgzMywtMTkpLEhlKHllLDI4MzMsMjgzNSwzMyksSGUoeWUsMjgzNSwyODU3LC0xOSkseWVbMjg1N109MzMsSGUoeWUsMjg1OCwyODY1LC0xOSkseWVbMjg2NV09MzMsSGUoeWUsMjg2NiwyODY4LC0xOSksSGUoeWUsMjg2OCwyODcwLDMzKSxIZSh5ZSwyODcwLDI4NzQsLTE5KSxIZSh5ZSwyODc0LDI4NzYsMzMpLHllWzI4NzZdPS04Nyx5ZVsyODc3XT0tMTksSGUoeWUsMjg3OCwyODg0LC04NyksSGUoeWUsMjg4NCwyODg3LDMzKSxIZSh5ZSwyODg3LDI4ODksLTg3KSxIZSh5ZSwyODg5LDI4OTEsMzMpLEhlKHllLDI4OTEsMjg5NCwtODcpLEhlKHllLDI4OTQsMjkwMiwzMyksSGUoeWUsMjkwMiwyOTA0LC04NyksSGUoeWUsMjkwNCwyOTA4LDMzKSxIZSh5ZSwyOTA4LDI5MTAsLTE5KSx5ZVsyOTEwXT0zMyxIZSh5ZSwyOTExLDI5MTQsLTE5KSxIZSh5ZSwyOTE0LDI5MTgsMzMpLEhlKHllLDI5MTgsMjkyOCwtODcpLEhlKHllLDI5MjgsMjk0NiwzMyksSGUoeWUsMjk0NiwyOTQ4LC04NykseWVbMjk0OF09MzMsSGUoeWUsMjk0OSwyOTU1LC0xOSksSGUoeWUsMjk1NSwyOTU4LDMzKSxIZSh5ZSwyOTU4LDI5NjEsLTE5KSx5ZVsyOTYxXT0zMyxIZSh5ZSwyOTYyLDI5NjYsLTE5KSxIZSh5ZSwyOTY2LDI5NjksMzMpLEhlKHllLDI5NjksMjk3MSwtMTkpLHllWzI5NzFdPTMzLHllWzI5NzJdPS0xOSx5ZVsyOTczXT0zMyxIZSh5ZSwyOTc0LDI5NzYsLTE5KSxIZSh5ZSwyOTc2LDI5NzksMzMpLEhlKHllLDI5NzksMjk4MSwtMTkpLEhlKHllLDI5ODEsMjk4NCwzMyksSGUoeWUsMjk4NCwyOTg3LC0xOSksSGUoeWUsMjk4NywyOTkwLDMzKSxIZSh5ZSwyOTkwLDI5OTgsLTE5KSx5ZVsyOTk4XT0zMyxIZSh5ZSwyOTk5LDMwMDIsLTE5KSxIZSh5ZSwzMDAyLDMwMDYsMzMpLEhlKHllLDMwMDYsMzAxMSwtODcpLEhlKHllLDMwMTEsMzAxNCwzMyksSGUoeWUsMzAxNCwzMDE3LC04NykseWVbMzAxN109MzMsSGUoeWUsMzAxOCwzMDIyLC04NyksSGUoeWUsMzAyMiwzMDMxLDMzKSx5ZVszMDMxXT0tODcsSGUoeWUsMzAzMiwzMDQ3LDMzKSxIZSh5ZSwzMDQ3LDMwNTYsLTg3KSxIZSh5ZSwzMDU2LDMwNzMsMzMpLEhlKHllLDMwNzMsMzA3NiwtODcpLHllWzMwNzZdPTMzLEhlKHllLDMwNzcsMzA4NSwtMTkpLHllWzMwODVdPTMzLEhlKHllLDMwODYsMzA4OSwtMTkpLHllWzMwODldPTMzLEhlKHllLDMwOTAsMzExMywtMTkpLHllWzMxMTNdPTMzLEhlKHllLDMxMTQsMzEyNCwtMTkpLHllWzMxMjRdPTMzLEhlKHllLDMxMjUsMzEzMCwtMTkpLEhlKHllLDMxMzAsMzEzNCwzMyksSGUoeWUsMzEzNCwzMTQxLC04NykseWVbMzE0MV09MzMsSGUoeWUsMzE0MiwzMTQ1LC04NykseWVbMzE0NV09MzMsSGUoeWUsMzE0NiwzMTUwLC04NyksSGUoeWUsMzE1MCwzMTU3LDMzKSxIZSh5ZSwzMTU3LDMxNTksLTg3KSxIZSh5ZSwzMTU5LDMxNjgsMzMpLEhlKHllLDMxNjgsMzE3MCwtMTkpLEhlKHllLDMxNzAsMzE3NCwzMyksSGUoeWUsMzE3NCwzMTg0LC04NyksSGUoeWUsMzE4NCwzMjAyLDMzKSxIZSh5ZSwzMjAyLDMyMDQsLTg3KSx5ZVszMjA0XT0zMyxIZSh5ZSwzMjA1LDMyMTMsLTE5KSx5ZVszMjEzXT0zMyxIZSh5ZSwzMjE0LDMyMTcsLTE5KSx5ZVszMjE3XT0zMyxIZSh5ZSwzMjE4LDMyNDEsLTE5KSx5ZVszMjQxXT0zMyxIZSh5ZSwzMjQyLDMyNTIsLTE5KSx5ZVszMjUyXT0zMyxIZSh5ZSwzMjUzLDMyNTgsLTE5KSxIZSh5ZSwzMjU4LDMyNjIsMzMpLEhlKHllLDMyNjIsMzI2OSwtODcpLHllWzMyNjldPTMzLEhlKHllLDMyNzAsMzI3MywtODcpLHllWzMyNzNdPTMzLEhlKHllLDMyNzQsMzI3OCwtODcpLEhlKHllLDMyNzgsMzI4NSwzMyksSGUoeWUsMzI4NSwzMjg3LC04NyksSGUoeWUsMzI4NywzMjk0LDMzKSx5ZVszMjk0XT0tMTkseWVbMzI5NV09MzMsSGUoeWUsMzI5NiwzMjk4LC0xOSksSGUoeWUsMzI5OCwzMzAyLDMzKSxIZSh5ZSwzMzAyLDMzMTIsLTg3KSxIZSh5ZSwzMzEyLDMzMzAsMzMpLEhlKHllLDMzMzAsMzMzMiwtODcpLHllWzMzMzJdPTMzLEhlKHllLDMzMzMsMzM0MSwtMTkpLHllWzMzNDFdPTMzLEhlKHllLDMzNDIsMzM0NSwtMTkpLHllWzMzNDVdPTMzLEhlKHllLDMzNDYsMzM2OSwtMTkpLHllWzMzNjldPTMzLEhlKHllLDMzNzAsMzM4NiwtMTkpLEhlKHllLDMzODYsMzM5MCwzMyksSGUoeWUsMzM5MCwzMzk2LC04NyksSGUoeWUsMzM5NiwzMzk4LDMzKSxIZSh5ZSwzMzk4LDM0MDEsLTg3KSx5ZVszNDAxXT0zMyxIZSh5ZSwzNDAyLDM0MDYsLTg3KSxIZSh5ZSwzNDA2LDM0MTUsMzMpLHllWzM0MTVdPS04NyxIZSh5ZSwzNDE2LDM0MjQsMzMpLEhlKHllLDM0MjQsMzQyNiwtMTkpLEhlKHllLDM0MjYsMzQzMCwzMyksSGUoeWUsMzQzMCwzNDQwLC04NyksSGUoeWUsMzQ0MCwzNTg1LDMzKSxIZSh5ZSwzNTg1LDM2MzEsLTE5KSx5ZVszNjMxXT0zMyx5ZVszNjMyXT0tMTkseWVbMzYzM109LTg3LEhlKHllLDM2MzQsMzYzNiwtMTkpLEhlKHllLDM2MzYsMzY0MywtODcpLEhlKHllLDM2NDMsMzY0OCwzMyksSGUoeWUsMzY0OCwzNjU0LC0xOSksSGUoeWUsMzY1NCwzNjYzLC04NykseWVbMzY2M109MzMsSGUoeWUsMzY2NCwzNjc0LC04NyksSGUoeWUsMzY3NCwzNzEzLDMzKSxIZSh5ZSwzNzEzLDM3MTUsLTE5KSx5ZVszNzE1XT0zMyx5ZVszNzE2XT0tMTksSGUoeWUsMzcxNywzNzE5LDMzKSxIZSh5ZSwzNzE5LDM3MjEsLTE5KSx5ZVszNzIxXT0zMyx5ZVszNzIyXT0tMTksSGUoeWUsMzcyMywzNzI1LDMzKSx5ZVszNzI1XT0tMTksSGUoeWUsMzcyNiwzNzMyLDMzKSxIZSh5ZSwzNzMyLDM3MzYsLTE5KSx5ZVszNzM2XT0zMyxIZSh5ZSwzNzM3LDM3NDQsLTE5KSx5ZVszNzQ0XT0zMyxIZSh5ZSwzNzQ1LDM3NDgsLTE5KSx5ZVszNzQ4XT0zMyx5ZVszNzQ5XT0tMTkseWVbMzc1MF09MzMseWVbMzc1MV09LTE5LEhlKHllLDM3NTIsMzc1NCwzMyksSGUoeWUsMzc1NCwzNzU2LC0xOSkseWVbMzc1Nl09MzMsSGUoeWUsMzc1NywzNzU5LC0xOSkseWVbMzc1OV09MzMseWVbMzc2MF09LTE5LHllWzM3NjFdPS04NyxIZSh5ZSwzNzYyLDM3NjQsLTE5KSxIZSh5ZSwzNzY0LDM3NzAsLTg3KSx5ZVszNzcwXT0zMyxIZSh5ZSwzNzcxLDM3NzMsLTg3KSx5ZVszNzczXT0tMTksSGUoeWUsMzc3NCwzNzc2LDMzKSxIZSh5ZSwzNzc2LDM3ODEsLTE5KSx5ZVszNzgxXT0zMyx5ZVszNzgyXT0tODcseWVbMzc4M109MzMsSGUoeWUsMzc4NCwzNzkwLC04NyksSGUoeWUsMzc5MCwzNzkyLDMzKSxIZSh5ZSwzNzkyLDM4MDIsLTg3KSxIZSh5ZSwzODAyLDM4NjQsMzMpLEhlKHllLDM4NjQsMzg2NiwtODcpLEhlKHllLDM4NjYsMzg3MiwzMyksSGUoeWUsMzg3MiwzODgyLC04NyksSGUoeWUsMzg4MiwzODkzLDMzKSx5ZVszODkzXT0tODcseWVbMzg5NF09MzMseWVbMzg5NV09LTg3LHllWzM4OTZdPTMzLHllWzM4OTddPS04NyxIZSh5ZSwzODk4LDM5MDIsMzMpLEhlKHllLDM5MDIsMzkwNCwtODcpLEhlKHllLDM5MDQsMzkxMiwtMTkpLHllWzM5MTJdPTMzLEhlKHllLDM5MTMsMzk0NiwtMTkpLEhlKHllLDM5NDYsMzk1MywzMyksSGUoeWUsMzk1MywzOTczLC04NykseWVbMzk3M109MzMsSGUoeWUsMzk3NCwzOTgwLC04NyksSGUoeWUsMzk4MCwzOTg0LDMzKSxIZSh5ZSwzOTg0LDM5OTAsLTg3KSx5ZVszOTkwXT0zMyx5ZVszOTkxXT0tODcseWVbMzk5Ml09MzMsSGUoeWUsMzk5Myw0MDE0LC04NyksSGUoeWUsNDAxNCw0MDE3LDMzKSxIZSh5ZSw0MDE3LDQwMjQsLTg3KSx5ZVs0MDI0XT0zMyx5ZVs0MDI1XT0tODcsSGUoeWUsNDAyNiw0MjU2LDMzKSxIZSh5ZSw0MjU2LDQyOTQsLTE5KSxIZSh5ZSw0Mjk0LDQzMDQsMzMpLEhlKHllLDQzMDQsNDM0MywtMTkpLEhlKHllLDQzNDMsNDM1MiwzMykseWVbNDM1Ml09LTE5LHllWzQzNTNdPTMzLEhlKHllLDQzNTQsNDM1NiwtMTkpLHllWzQzNTZdPTMzLEhlKHllLDQzNTcsNDM2MCwtMTkpLHllWzQzNjBdPTMzLHllWzQzNjFdPS0xOSx5ZVs0MzYyXT0zMyxIZSh5ZSw0MzYzLDQzNjUsLTE5KSx5ZVs0MzY1XT0zMyxIZSh5ZSw0MzY2LDQzNzEsLTE5KSxIZSh5ZSw0MzcxLDQ0MTIsMzMpLHllWzQ0MTJdPS0xOSx5ZVs0NDEzXT0zMyx5ZVs0NDE0XT0tMTkseWVbNDQxNV09MzMseWVbNDQxNl09LTE5LEhlKHllLDQ0MTcsNDQyOCwzMykseWVbNDQyOF09LTE5LHllWzQ0MjldPTMzLHllWzQ0MzBdPS0xOSx5ZVs0NDMxXT0zMyx5ZVs0NDMyXT0tMTksSGUoeWUsNDQzMyw0NDM2LDMzKSxIZSh5ZSw0NDM2LDQ0MzgsLTE5KSxIZSh5ZSw0NDM4LDQ0NDEsMzMpLHllWzQ0NDFdPS0xOSxIZSh5ZSw0NDQyLDQ0NDcsMzMpLEhlKHllLDQ0NDcsNDQ1MCwtMTkpLHllWzQ0NTBdPTMzLHllWzQ0NTFdPS0xOSx5ZVs0NDUyXT0zMyx5ZVs0NDUzXT0tMTkseWVbNDQ1NF09MzMseWVbNDQ1NV09LTE5LHllWzQ0NTZdPTMzLHllWzQ0NTddPS0xOSxIZSh5ZSw0NDU4LDQ0NjEsMzMpLEhlKHllLDQ0NjEsNDQ2MywtMTkpLEhlKHllLDQ0NjMsNDQ2NiwzMyksSGUoeWUsNDQ2Niw0NDY4LC0xOSkseWVbNDQ2OF09MzMseWVbNDQ2OV09LTE5LEhlKHllLDQ0NzAsNDUxMCwzMykseWVbNDUxMF09LTE5LEhlKHllLDQ1MTEsNDUyMCwzMykseWVbNDUyMF09LTE5LEhlKHllLDQ1MjEsNDUyMywzMykseWVbNDUyM109LTE5LEhlKHllLDQ1MjQsNDUyNiwzMyksSGUoeWUsNDUyNiw0NTI4LC0xOSksSGUoeWUsNDUyOCw0NTM1LDMzKSxIZSh5ZSw0NTM1LDQ1MzcsLTE5KSx5ZVs0NTM3XT0zMyx5ZVs0NTM4XT0tMTkseWVbNDUzOV09MzMsSGUoeWUsNDU0MCw0NTQ3LC0xOSksSGUoeWUsNDU0Nyw0NTg3LDMzKSx5ZVs0NTg3XT0tMTksSGUoeWUsNDU4OCw0NTkyLDMzKSx5ZVs0NTkyXT0tMTksSGUoeWUsNDU5Myw0NjAxLDMzKSx5ZVs0NjAxXT0tMTksSGUoeWUsNDYwMiw3NjgwLDMzKSxIZSh5ZSw3NjgwLDc4MzYsLTE5KSxIZSh5ZSw3ODM2LDc4NDAsMzMpLEhlKHllLDc4NDAsNzkzMCwtMTkpLEhlKHllLDc5MzAsNzkzNiwzMyksSGUoeWUsNzkzNiw3OTU4LC0xOSksSGUoeWUsNzk1OCw3OTYwLDMzKSxIZSh5ZSw3OTYwLDc5NjYsLTE5KSxIZSh5ZSw3OTY2LDc5NjgsMzMpLEhlKHllLDc5NjgsODAwNiwtMTkpLEhlKHllLDgwMDYsODAwOCwzMyksSGUoeWUsODAwOCw4MDE0LC0xOSksSGUoeWUsODAxNCw4MDE2LDMzKSxIZSh5ZSw4MDE2LDgwMjQsLTE5KSx5ZVs4MDI0XT0zMyx5ZVs4MDI1XT0tMTkseWVbODAyNl09MzMseWVbODAyN109LTE5LHllWzgwMjhdPTMzLHllWzgwMjldPS0xOSx5ZVs4MDMwXT0zMyxIZSh5ZSw4MDMxLDgwNjIsLTE5KSxIZSh5ZSw4MDYyLDgwNjQsMzMpLEhlKHllLDgwNjQsODExNywtMTkpLHllWzgxMTddPTMzLEhlKHllLDgxMTgsODEyNSwtMTkpLHllWzgxMjVdPTMzLHllWzgxMjZdPS0xOSxIZSh5ZSw4MTI3LDgxMzAsMzMpLEhlKHllLDgxMzAsODEzMywtMTkpLHllWzgxMzNdPTMzLEhlKHllLDgxMzQsODE0MSwtMTkpLEhlKHllLDgxNDEsODE0NCwzMyksSGUoeWUsODE0NCw4MTQ4LC0xOSksSGUoeWUsODE0OCw4MTUwLDMzKSxIZSh5ZSw4MTUwLDgxNTYsLTE5KSxIZSh5ZSw4MTU2LDgxNjAsMzMpLEhlKHllLDgxNjAsODE3MywtMTkpLEhlKHllLDgxNzMsODE3OCwzMyksSGUoeWUsODE3OCw4MTgxLC0xOSkseWVbODE4MV09MzMsSGUoeWUsODE4Miw4MTg5LC0xOSksSGUoeWUsODE4OSw4NDAwLDMzKSxIZSh5ZSw4NDAwLDg0MTMsLTg3KSxIZSh5ZSw4NDEzLDg0MTcsMzMpLHllWzg0MTddPS04NyxIZSh5ZSw4NDE4LDg0ODYsMzMpLHllWzg0ODZdPS0xOSxIZSh5ZSw4NDg3LDg0OTAsMzMpLEhlKHllLDg0OTAsODQ5MiwtMTkpLEhlKHllLDg0OTIsODQ5NCwzMykseWVbODQ5NF09LTE5LEhlKHllLDg0OTUsODU3NiwzMyksSGUoeWUsODU3Niw4NTc5LC0xOSksSGUoeWUsODU3OSwxMjI5MywzMykseWVbMTIyOTNdPS04Nyx5ZVsxMjI5NF09MzMseWVbMTIyOTVdPS0xOSxIZSh5ZSwxMjI5NiwxMjMyMSwzMyksSGUoeWUsMTIzMjEsMTIzMzAsLTE5KSxIZSh5ZSwxMjMzMCwxMjMzNiwtODcpLHllWzEyMzM2XT0zMyxIZSh5ZSwxMjMzNywxMjM0MiwtODcpLEhlKHllLDEyMzQyLDEyMzUzLDMzKSxIZSh5ZSwxMjM1MywxMjQzNywtMTkpLEhlKHllLDEyNDM3LDEyNDQxLDMzKSxIZSh5ZSwxMjQ0MSwxMjQ0MywtODcpLEhlKHllLDEyNDQzLDEyNDQ1LDMzKSxIZSh5ZSwxMjQ0NSwxMjQ0NywtODcpLEhlKHllLDEyNDQ3LDEyNDQ5LDMzKSxIZSh5ZSwxMjQ0OSwxMjUzOSwtMTkpLHllWzEyNTM5XT0zMyxIZSh5ZSwxMjU0MCwxMjU0MywtODcpLEhlKHllLDEyNTQzLDEyNTQ5LDMzKSxIZSh5ZSwxMjU0OSwxMjU4OSwtMTkpLEhlKHllLDEyNTg5LDE5OTY4LDMzKSxIZSh5ZSwxOTk2OCw0MDg3MCwtMTkpLEhlKHllLDQwODcwLDQ0MDMyLDMzKSxIZSh5ZSw0NDAzMiw1NTIwNCwtMTkpLEhlKHllLDU1MjA0LEFQLDMzKSxIZSh5ZSw1NzM0NCw2NTUzNCwzMyl9ZnVuY3Rpb24gaU9uKGUpe3ZhciB0LG4scixhLG8sZixnO2UuaGJ8fChlLmhiPSEwLEZ1KGUsImVjb3JlIiksQ1YoZSwiZWNvcmUiKSxTVihlLEZmKSxrTihlLmZiLCJFIiksa04oZS5MLCJUIiksa04oZS5QLCJLIiksa04oZS5QLCJWIiksa04oZS5jYiwiRSIpLHFyKGRjKGUuYiksZS5iYikscXIoZGMoZS5hKSxlLlEpLHFyKGRjKGUubyksZS5wKSxxcihkYyhlLnApLGUuUikscXIoZGMoZS5xKSxlLnApLHFyKGRjKGUudiksZS5xKSxxcihkYyhlLncpLGUuUikscXIoZGMoZS5CKSxlLlEpLHFyKGRjKGUuUiksZS5RKSxxcihkYyhlLlQpLGUuZWIpLHFyKGRjKGUuVSksZS5SKSxxcihkYyhlLlYpLGUuZWIpLHFyKGRjKGUuVyksZS5iYikscXIoZGMoZS5iYiksZS5lYikscXIoZGMoZS5lYiksZS5SKSxxcihkYyhlLmRiKSxlLlIpLHpjKGUuYixENCxhNXQsITEsITEsITApLE9zKGwoT2UodHQoZS5iKSwwKSwzNSksZS5lLCJpRCIsbnVsbCwwLDEsRDQsITEsITEsITAsITEsITAsITEpLHNzKGwoT2UodHQoZS5iKSwxKSwxOSksZS5xLG51bGwsImVBdHRyaWJ1dGVUeXBlIiwxLDEsRDQsITAsITAsITEsITEsITAsITEsITApLHpjKGUuYSxtaSxyNXQsITEsITEsITApLE9zKGwoT2UodHQoZS5hKSwwKSwzNSksZS5fLEhmZSxudWxsLDAsMSxtaSwhMSwhMSwhMCwhMSwhMCwhMSksc3MobChPZSh0dChlLmEpLDEpLDE5KSxlLmFiLG51bGwsImRldGFpbHMiLDAsLTEsbWksITEsITEsITAsITAsITEsITEsITEpLHNzKGwoT2UodHQoZS5hKSwyKSwxOSksZS5RLGwoT2UodHQoZS5RKSwwKSwxOSksImVNb2RlbEVsZW1lbnQiLDAsMSxtaSwhMCwhMSwhMCwhMSwhMSwhMSwhMSksc3MobChPZSh0dChlLmEpLDMpLDE5KSxlLlMsbnVsbCwiY29udGVudHMiLDAsLTEsbWksITEsITEsITAsITAsITEsITEsITEpLHNzKGwoT2UodHQoZS5hKSw0KSwxOSksZS5TLG51bGwsInJlZmVyZW5jZXMiLDAsLTEsbWksITEsITEsITAsITEsITAsITEsITEpLHpjKGUubyxWZiwiRUNsYXNzIiwhMSwhMSwhMCksT3MobChPZSh0dChlLm8pLDApLDM1KSxlLmUsImFic3RyYWN0IixudWxsLDAsMSxWZiwhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLm8pLDEpLDM1KSxlLmUsImludGVyZmFjZSIsbnVsbCwwLDEsVmYsITEsITEsITAsITEsITAsITEpLHNzKGwoT2UodHQoZS5vKSwyKSwxOSksZS5vLG51bGwsImVTdXBlclR5cGVzIiwwLC0xLFZmLCExLCExLCEwLCExLCEwLCEwLCExKSxzcyhsKE9lKHR0KGUubyksMyksMTkpLGUuVCxsKE9lKHR0KGUuVCksMCksMTkpLCJlT3BlcmF0aW9ucyIsMCwtMSxWZiwhMSwhMSwhMCwhMCwhMSwhMSwhMSksc3MobChPZSh0dChlLm8pLDQpLDE5KSxlLmIsbnVsbCwiZUFsbEF0dHJpYnV0ZXMiLDAsLTEsVmYsITAsITAsITEsITEsITAsITEsITApLHNzKGwoT2UodHQoZS5vKSw1KSwxOSksZS5XLG51bGwsImVBbGxSZWZlcmVuY2VzIiwwLC0xLFZmLCEwLCEwLCExLCExLCEwLCExLCEwKSxzcyhsKE9lKHR0KGUubyksNiksMTkpLGUuVyxudWxsLCJlUmVmZXJlbmNlcyIsMCwtMSxWZiwhMCwhMCwhMSwhMSwhMCwhMSwhMCksc3MobChPZSh0dChlLm8pLDcpLDE5KSxlLmIsbnVsbCwiZUF0dHJpYnV0ZXMiLDAsLTEsVmYsITAsITAsITEsITEsITAsITEsITApLHNzKGwoT2UodHQoZS5vKSw4KSwxOSksZS5XLG51bGwsImVBbGxDb250YWlubWVudHMiLDAsLTEsVmYsITAsITAsITEsITEsITAsITEsITApLHNzKGwoT2UodHQoZS5vKSw5KSwxOSksZS5ULG51bGwsImVBbGxPcGVyYXRpb25zIiwwLC0xLFZmLCEwLCEwLCExLCExLCEwLCExLCEwKSxzcyhsKE9lKHR0KGUubyksMTApLDE5KSxlLmJiLG51bGwsImVBbGxTdHJ1Y3R1cmFsRmVhdHVyZXMiLDAsLTEsVmYsITAsITAsITEsITEsITAsITEsITApLHNzKGwoT2UodHQoZS5vKSwxMSksMTkpLGUubyxudWxsLCJlQWxsU3VwZXJUeXBlcyIsMCwtMSxWZiwhMCwhMCwhMSwhMSwhMCwhMSwhMCksc3MobChPZSh0dChlLm8pLDEyKSwxOSksZS5iLG51bGwsImVJREF0dHJpYnV0ZSIsMCwxLFZmLCEwLCEwLCExLCExLCExLCExLCEwKSxzcyhsKE9lKHR0KGUubyksMTMpLDE5KSxlLmJiLGwoT2UodHQoZS5iYiksNyksMTkpLCJlU3RydWN0dXJhbEZlYXR1cmVzIiwwLC0xLFZmLCExLCExLCEwLCEwLCExLCExLCExKSxzcyhsKE9lKHR0KGUubyksMTQpLDE5KSxlLkgsbnVsbCwiZUdlbmVyaWNTdXBlclR5cGVzIiwwLC0xLFZmLCExLCExLCEwLCEwLCExLCEwLCExKSxzcyhsKE9lKHR0KGUubyksMTUpLDE5KSxlLkgsbnVsbCwiZUFsbEdlbmVyaWNTdXBlclR5cGVzIiwwLC0xLFZmLCEwLCEwLCExLCExLCEwLCExLCEwKSxnPUpvKGwoT2UocWkoZS5vKSwwKSw2MiksZS5lLCJpc1N1cGVyVHlwZU9mIiksYWMoZyxlLm8sInNvbWVDbGFzcyIpLEpvKGwoT2UocWkoZS5vKSwxKSw2MiksZS5JLCJnZXRGZWF0dXJlQ291bnQiKSxnPUpvKGwoT2UocWkoZS5vKSwyKSw2MiksZS5iYix2NXQpLGFjKGcsZS5JLCJmZWF0dXJlSUQiKSxnPUpvKGwoT2UocWkoZS5vKSwzKSw2MiksZS5JLHc1dCksYWMoZyxlLmJiLElMKSxnPUpvKGwoT2UocWkoZS5vKSw0KSw2MiksZS5iYix2NXQpLGFjKGcsZS5fLCJmZWF0dXJlTmFtZSIpLEpvKGwoT2UocWkoZS5vKSw1KSw2MiksZS5JLCJnZXRPcGVyYXRpb25Db3VudCIpLGc9Sm8obChPZShxaShlLm8pLDYpLDYyKSxlLlQsImdldEVPcGVyYXRpb24iKSxhYyhnLGUuSSwib3BlcmF0aW9uSUQiKSxnPUpvKGwoT2UocWkoZS5vKSw3KSw2MiksZS5JLHk1dCksYWMoZyxlLlQsRFNlKSxnPUpvKGwoT2UocWkoZS5vKSw4KSw2MiksZS5ULCJnZXRPdmVycmlkZSIpLGFjKGcsZS5ULERTZSksZz1KbyhsKE9lKHFpKGUubyksOSksNjIpLGUuSCwiZ2V0RmVhdHVyZVR5cGUiKSxhYyhnLGUuYmIsSUwpLHpjKGUucCxsMSxvNXQsITAsITEsITApLE9zKGwoT2UodHQoZS5wKSwwKSwzNSksZS5fLCJpbnN0YW5jZUNsYXNzTmFtZSIsbnVsbCwwLDEsbDEsITEsITAsITAsITAsITAsITEpLHQ9S2coZS5MKSxuPXQ2ZSgpLHFyKCghdC5kJiYodC5kPW5ldyBZcyhXbyx0LDEpKSx0LmQpLG4pLGcydChsKE9lKHR0KGUucCksMSksMzUpLHQsImluc3RhbmNlQ2xhc3MiLGwxLCEwLCEwLCExLCEwKSxPcyhsKE9lKHR0KGUucCksMiksMzUpLGUuTSx4NXQsbnVsbCwwLDEsbDEsITAsITAsITEsITEsITAsITApLE9zKGwoT2UodHQoZS5wKSwzKSwzNSksZS5fLCJpbnN0YW5jZVR5cGVOYW1lIixudWxsLDAsMSxsMSwhMSwhMCwhMCwhMCwhMCwhMSksc3MobChPZSh0dChlLnApLDQpLDE5KSxlLlUsbChPZSh0dChlLlUpLDMpLDE5KSwiZVBhY2thZ2UiLDAsMSxsMSwhMCwhMSwhMSwhMSwhMCwhMSwhMSksc3MobChPZSh0dChlLnApLDUpLDE5KSxlLmRiLG51bGwsazV0LDAsLTEsbDEsITEsITEsITAsITAsITAsITEsITEpLGc9Sm8obChPZShxaShlLnApLDApLDYyKSxlLmUsRTV0KSxhYyhnLGUuTSx3UCksSm8obChPZShxaShlLnApLDEpLDYyKSxlLkksImdldENsYXNzaWZpZXJJRCIpLHpjKGUucSx0cGUsIkVEYXRhVHlwZSIsITEsITEsITApLE9zKGwoT2UodHQoZS5xKSwwKSwzNSksZS5lLCJzZXJpYWxpemFibGUiLHdULDAsMSx0cGUsITEsITEsITAsITEsITAsITEpLHpjKGUudixUWSwiRUVudW0iLCExLCExLCEwKSxzcyhsKE9lKHR0KGUudiksMCksMTkpLGUudyxsKE9lKHR0KGUudyksMyksMTkpLCJlTGl0ZXJhbHMiLDAsLTEsVFksITEsITEsITAsITAsITEsITEsITEpLGc9Sm8obChPZShxaShlLnYpLDApLDYyKSxlLncsVDV0KSxhYyhnLGUuXyxfaSksZz1KbyhsKE9lKHFpKGUudiksMSksNjIpLGUudyxUNXQpLGFjKGcsZS5JLFRMKSxnPUpvKGwoT2UocWkoZS52KSwyKSw2MiksZS53LCJnZXRFRW51bUxpdGVyYWxCeUxpdGVyYWwiKSxhYyhnLGUuXywibGl0ZXJhbCIpLHpjKGUudyx3cCxjNXQsITEsITEsITApLE9zKGwoT2UodHQoZS53KSwwKSwzNSksZS5JLFRMLG51bGwsMCwxLHdwLCExLCExLCEwLCExLCEwLCExKSxPcyhsKE9lKHR0KGUudyksMSksMzUpLGUuQSwiaW5zdGFuY2UiLG51bGwsMCwxLHdwLCEwLCExLCEwLCExLCEwLCExKSxPcyhsKE9lKHR0KGUudyksMiksMzUpLGUuXywibGl0ZXJhbCIsbnVsbCwwLDEsd3AsITEsITEsITAsITEsITAsITEpLHNzKGwoT2UodHQoZS53KSwzKSwxOSksZS52LGwoT2UodHQoZS52KSwwKSwxOSksImVFbnVtIiwwLDEsd3AsITAsITEsITEsITEsITEsITEsITEpLHpjKGUuQixSTSwiRUZhY3RvcnkiLCExLCExLCEwKSxzcyhsKE9lKHR0KGUuQiksMCksMTkpLGUuVSxsKE9lKHR0KGUuVSksMiksMTkpLCJlUGFja2FnZSIsMSwxLFJNLCEwLCExLCEwLCExLCExLCExLCExKSxnPUpvKGwoT2UocWkoZS5CKSwwKSw2MiksZS5TLCJjcmVhdGUiKSxhYyhnLGUubywiZUNsYXNzIiksZz1KbyhsKE9lKHFpKGUuQiksMSksNjIpLGUuTSwiY3JlYXRlRnJvbVN0cmluZyIpLGFjKGcsZS5xLCJlRGF0YVR5cGUiKSxhYyhnLGUuXywibGl0ZXJhbFZhbHVlIiksZz1KbyhsKE9lKHFpKGUuQiksMiksNjIpLGUuXywiY29udmVydFRvU3RyaW5nIiksYWMoZyxlLnEsImVEYXRhVHlwZSIpLGFjKGcsZS5NLCJpbnN0YW5jZVZhbHVlIiksemMoZS5RLHVGLGM0dCwhMCwhMSwhMCksc3MobChPZSh0dChlLlEpLDApLDE5KSxlLmEsbChPZSh0dChlLmEpLDIpLDE5KSwiZUFubm90YXRpb25zIiwwLC0xLHVGLCExLCExLCEwLCEwLCExLCExLCExKSxnPUpvKGwoT2UocWkoZS5RKSwwKSw2MiksZS5hLCJnZXRFQW5ub3RhdGlvbiIpLGFjKGcsZS5fLEhmZSksemMoZS5SLFlnZSx1NHQsITAsITEsITApLE9zKGwoT2UodHQoZS5SKSwwKSwzNSksZS5fLF9pLG51bGwsMCwxLFlnZSwhMSwhMSwhMCwhMSwhMCwhMSksemMoZS5TLFhiLCJFT2JqZWN0IiwhMSwhMSwhMCksSm8obChPZShxaShlLlMpLDApLDYyKSxlLm8sImVDbGFzcyIpLEpvKGwoT2UocWkoZS5TKSwxKSw2MiksZS5lLCJlSXNQcm94eSIpLEpvKGwoT2UocWkoZS5TKSwyKSw2MiksZS5YLCJlUmVzb3VyY2UiKSxKbyhsKE9lKHFpKGUuUyksMyksNjIpLGUuUywiZUNvbnRhaW5lciIpLEpvKGwoT2UocWkoZS5TKSw0KSw2MiksZS5iYiwiZUNvbnRhaW5pbmdGZWF0dXJlIiksSm8obChPZShxaShlLlMpLDUpLDYyKSxlLlcsImVDb250YWlubWVudEZlYXR1cmUiKSxnPUpvKGwoT2UocWkoZS5TKSw2KSw2MiksbnVsbCwiZUNvbnRlbnRzIiksdD1LZyhlLmZiKSxuPUtnKGUuUykscXIoKCF0LmQmJih0LmQ9bmV3IFlzKFdvLHQsMSkpLHQuZCksbiksYT0kMShnLHQsbnVsbCksYSYmYS5vaigpLGc9Sm8obChPZShxaShlLlMpLDcpLDYyKSxudWxsLCJlQWxsQ29udGVudHMiKSx0PUtnKGUuY2IpLG49S2coZS5TKSxxcigoIXQuZCYmKHQuZD1uZXcgWXMoV28sdCwxKSksdC5kKSxuKSxvPSQxKGcsdCxudWxsKSxvJiZvLm9qKCksZz1KbyhsKE9lKHFpKGUuUyksOCksNjIpLG51bGwsImVDcm9zc1JlZmVyZW5jZXMiKSx0PUtnKGUuZmIpLG49S2coZS5TKSxxcigoIXQuZCYmKHQuZD1uZXcgWXMoV28sdCwxKSksdC5kKSxuKSxmPSQxKGcsdCxudWxsKSxmJiZmLm9qKCksZz1KbyhsKE9lKHFpKGUuUyksOSksNjIpLGUuTSwiZUdldCIpLGFjKGcsZS5iYixJTCksZz1KbyhsKE9lKHFpKGUuUyksMTApLDYyKSxlLk0sImVHZXQiKSxhYyhnLGUuYmIsSUwpLGFjKGcsZS5lLCJyZXNvbHZlIiksZz1KbyhsKE9lKHFpKGUuUyksMTEpLDYyKSxudWxsLCJlU2V0IiksYWMoZyxlLmJiLElMKSxhYyhnLGUuTSwibmV3VmFsdWUiKSxnPUpvKGwoT2UocWkoZS5TKSwxMiksNjIpLGUuZSwiZUlzU2V0IiksYWMoZyxlLmJiLElMKSxnPUpvKGwoT2UocWkoZS5TKSwxMyksNjIpLG51bGwsImVVbnNldCIpLGFjKGcsZS5iYixJTCksZz1KbyhsKE9lKHFpKGUuUyksMTQpLDYyKSxlLk0sImVJbnZva2UiKSxhYyhnLGUuVCxEU2UpLHQ9S2coZS5mYiksbj10NmUoKSxxcigoIXQuZCYmKHQuZD1uZXcgWXMoV28sdCwxKSksdC5kKSxuKSxnVShnLHQsImFyZ3VtZW50cyIpLFZnbihnLGUuSyksemMoZS5ULFVmLGw1dCwhMSwhMSwhMCksc3MobChPZSh0dChlLlQpLDApLDE5KSxlLm8sbChPZSh0dChlLm8pLDMpLDE5KSxDNXQsMCwxLFVmLCEwLCExLCExLCExLCExLCExLCExKSxzcyhsKE9lKHR0KGUuVCksMSksMTkpLGUuZGIsbnVsbCxrNXQsMCwtMSxVZiwhMSwhMSwhMCwhMCwhMCwhMSwhMSksc3MobChPZSh0dChlLlQpLDIpLDE5KSxlLlYsbChPZSh0dChlLlYpLDApLDE5KSwiZVBhcmFtZXRlcnMiLDAsLTEsVWYsITEsITEsITAsITAsITEsITEsITEpLHNzKGwoT2UodHQoZS5UKSwzKSwxOSksZS5wLG51bGwsImVFeGNlcHRpb25zIiwwLC0xLFVmLCExLCExLCEwLCExLCEwLCEwLCExKSxzcyhsKE9lKHR0KGUuVCksNCksMTkpLGUuSCxudWxsLCJlR2VuZXJpY0V4Y2VwdGlvbnMiLDAsLTEsVWYsITEsITEsITAsITAsITEsITAsITEpLEpvKGwoT2UocWkoZS5UKSwwKSw2MiksZS5JLHk1dCksZz1KbyhsKE9lKHFpKGUuVCksMSksNjIpLGUuZSwiaXNPdmVycmlkZU9mIiksYWMoZyxlLlQsInNvbWVPcGVyYXRpb24iKSx6YyhlLlUsdTEsIkVQYWNrYWdlIiwhMSwhMSwhMCksT3MobChPZSh0dChlLlUpLDApLDM1KSxlLl8sIm5zVVJJIixudWxsLDAsMSx1MSwhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLlUpLDEpLDM1KSxlLl8sIm5zUHJlZml4IixudWxsLDAsMSx1MSwhMSwhMSwhMCwhMSwhMCwhMSksc3MobChPZSh0dChlLlUpLDIpLDE5KSxlLkIsbChPZSh0dChlLkIpLDApLDE5KSwiZUZhY3RvcnlJbnN0YW5jZSIsMSwxLHUxLCEwLCExLCEwLCExLCExLCExLCExKSxzcyhsKE9lKHR0KGUuVSksMyksMTkpLGUucCxsKE9lKHR0KGUucCksNCksMTkpLCJlQ2xhc3NpZmllcnMiLDAsLTEsdTEsITEsITEsITAsITAsITAsITEsITEpLHNzKGwoT2UodHQoZS5VKSw0KSwxOSksZS5VLGwoT2UodHQoZS5VKSw1KSwxOSksImVTdWJwYWNrYWdlcyIsMCwtMSx1MSwhMSwhMSwhMCwhMCwhMCwhMSwhMSksc3MobChPZSh0dChlLlUpLDUpLDE5KSxlLlUsbChPZSh0dChlLlUpLDQpLDE5KSwiZVN1cGVyUGFja2FnZSIsMCwxLHUxLCEwLCExLCExLCExLCEwLCExLCExKSxnPUpvKGwoT2UocWkoZS5VKSwwKSw2MiksZS5wLCJnZXRFQ2xhc3NpZmllciIpLGFjKGcsZS5fLF9pKSx6YyhlLlYsazMsaDV0LCExLCExLCEwKSxzcyhsKE9lKHR0KGUuViksMCksMTkpLGUuVCxsKE9lKHR0KGUuVCksMiksMTkpLCJlT3BlcmF0aW9uIiwwLDEsazMsITAsITEsITEsITEsITEsITEsITEpLHpjKGUuVyxJNCxmNXQsITEsITEsITApLE9zKGwoT2UodHQoZS5XKSwwKSwzNSksZS5lLCJjb250YWlubWVudCIsbnVsbCwwLDEsSTQsITEsITEsITAsITEsITAsITEpLE9zKGwoT2UodHQoZS5XKSwxKSwzNSksZS5lLCJjb250YWluZXIiLG51bGwsMCwxLEk0LCEwLCEwLCExLCExLCEwLCEwKSxPcyhsKE9lKHR0KGUuVyksMiksMzUpLGUuZSwicmVzb2x2ZVByb3hpZXMiLHdULDAsMSxJNCwhMSwhMSwhMCwhMSwhMCwhMSksc3MobChPZSh0dChlLlcpLDMpLDE5KSxlLlcsbnVsbCwiZU9wcG9zaXRlIiwwLDEsSTQsITEsITEsITAsITEsITAsITEsITEpLHNzKGwoT2UodHQoZS5XKSw0KSwxOSksZS5vLG51bGwsImVSZWZlcmVuY2VUeXBlIiwxLDEsSTQsITAsITAsITEsITEsITAsITEsITApLHNzKGwoT2UodHQoZS5XKSw1KSwxOSksZS5iLG51bGwsImVLZXlzIiwwLC0xLEk0LCExLCExLCEwLCExLCEwLCExLCExKSx6YyhlLmJiLGRsLHM1dCwhMCwhMSwhMCksT3MobChPZSh0dChlLmJiKSwwKSwzNSksZS5lLCJjaGFuZ2VhYmxlIix3VCwwLDEsZGwsITEsITEsITAsITEsITAsITEpLE9zKGwoT2UodHQoZS5iYiksMSksMzUpLGUuZSwidm9sYXRpbGUiLG51bGwsMCwxLGRsLCExLCExLCEwLCExLCEwLCExKSxPcyhsKE9lKHR0KGUuYmIpLDIpLDM1KSxlLmUsInRyYW5zaWVudCIsbnVsbCwwLDEsZGwsITEsITEsITAsITEsITAsITEpLE9zKGwoT2UodHQoZS5iYiksMyksMzUpLGUuXywiZGVmYXVsdFZhbHVlTGl0ZXJhbCIsbnVsbCwwLDEsZGwsITEsITEsITAsITEsITAsITEpLE9zKGwoT2UodHQoZS5iYiksNCksMzUpLGUuTSx4NXQsbnVsbCwwLDEsZGwsITAsITAsITEsITEsITAsITApLE9zKGwoT2UodHQoZS5iYiksNSksMzUpLGUuZSwidW5zZXR0YWJsZSIsbnVsbCwwLDEsZGwsITEsITEsITAsITEsITAsITEpLE9zKGwoT2UodHQoZS5iYiksNiksMzUpLGUuZSwiZGVyaXZlZCIsbnVsbCwwLDEsZGwsITEsITEsITAsITEsITAsITEpLHNzKGwoT2UodHQoZS5iYiksNyksMTkpLGUubyxsKE9lKHR0KGUubyksMTMpLDE5KSxDNXQsMCwxLGRsLCEwLCExLCExLCExLCExLCExLCExKSxKbyhsKE9lKHFpKGUuYmIpLDApLDYyKSxlLkksdzV0KSxnPUpvKGwoT2UocWkoZS5iYiksMSksNjIpLG51bGwsImdldENvbnRhaW5lckNsYXNzIiksdD1LZyhlLkwpLG49dDZlKCkscXIoKCF0LmQmJih0LmQ9bmV3IFlzKFdvLHQsMSkpLHQuZCksbikscj0kMShnLHQsbnVsbCksciYmci5vaigpLHpjKGUuZWIsTTQsaTV0LCEwLCExLCEwKSxPcyhsKE9lKHR0KGUuZWIpLDApLDM1KSxlLmUsIm9yZGVyZWQiLHdULDAsMSxNNCwhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLmViKSwxKSwzNSksZS5lLCJ1bmlxdWUiLHdULDAsMSxNNCwhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLmViKSwyKSwzNSksZS5JLCJsb3dlckJvdW5kIixudWxsLDAsMSxNNCwhMSwhMSwhMCwhMSwhMCwhMSksT3MobChPZSh0dChlLmViKSwzKSwzNSksZS5JLCJ1cHBlckJvdW5kIiwiMSIsMCwxLE00LCExLCExLCEwLCExLCEwLCExKSxPcyhsKE9lKHR0KGUuZWIpLDQpLDM1KSxlLmUsIm1hbnkiLG51bGwsMCwxLE00LCEwLCEwLCExLCExLCEwLCEwKSxPcyhsKE9lKHR0KGUuZWIpLDUpLDM1KSxlLmUsInJlcXVpcmVkIixudWxsLDAsMSxNNCwhMCwhMCwhMSwhMSwhMCwhMCksc3MobChPZSh0dChlLmViKSw2KSwxOSksZS5wLG51bGwsImVUeXBlIiwwLDEsTTQsITEsITAsITAsITEsITAsITAsITEpLHNzKGwoT2UodHQoZS5lYiksNyksMTkpLGUuSCxudWxsLCJlR2VuZXJpY1R5cGUiLDAsMSxNNCwhMSwhMCwhMCwhMCwhMSwhMCwhMSksemMoZS5hYix1diwiRVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiLCExLCExLCExKSxPcyhsKE9lKHR0KGUuYWIpLDApLDM1KSxlLl8sImtleSIsbnVsbCwwLDEsdXYsITEsITEsITAsITEsITAsITEpLE9zKGwoT2UodHQoZS5hYiksMSksMzUpLGUuXyxUTCxudWxsLDAsMSx1diwhMSwhMSwhMCwhMSwhMCwhMSksemMoZS5ILFdvLHU1dCwhMSwhMSwhMCksc3MobChPZSh0dChlLkgpLDApLDE5KSxlLkgsbnVsbCwiZVVwcGVyQm91bmQiLDAsMSxXbywhMSwhMSwhMCwhMCwhMSwhMSwhMSksc3MobChPZSh0dChlLkgpLDEpLDE5KSxlLkgsbnVsbCwiZVR5cGVBcmd1bWVudHMiLDAsLTEsV28sITEsITEsITAsITAsITEsITEsITEpLHNzKGwoT2UodHQoZS5IKSwyKSwxOSksZS5wLG51bGwsImVSYXdUeXBlIiwxLDEsV28sITAsITEsITEsITEsITAsITEsITApLHNzKGwoT2UodHQoZS5IKSwzKSwxOSksZS5ILG51bGwsImVMb3dlckJvdW5kIiwwLDEsV28sITEsITEsITAsITAsITEsITEsITEpLHNzKGwoT2UodHQoZS5IKSw0KSwxOSksZS5kYixudWxsLCJlVHlwZVBhcmFtZXRlciIsMCwxLFdvLCExLCExLCEwLCExLCExLCExLCExKSxzcyhsKE9lKHR0KGUuSCksNSksMTkpLGUucCxudWxsLCJlQ2xhc3NpZmllciIsMCwxLFdvLCExLCExLCEwLCExLCEwLCExLCExKSxnPUpvKGwoT2UocWkoZS5IKSwwKSw2MiksZS5lLEU1dCksYWMoZyxlLk0sd1ApLHpjKGUuZGIsWnUsZDV0LCExLCExLCEwKSxzcyhsKE9lKHR0KGUuZGIpLDApLDE5KSxlLkgsbnVsbCwiZUJvdW5kcyIsMCwtMSxadSwhMSwhMSwhMCwhMCwhMSwhMSwhMSksRWkoZS5jLEwwZSwiRUJpZ0RlY2ltYWwiLCEwKSxFaShlLmQsQTYsIkVCaWdJbnRlZ2VyIiwhMCksRWkoZS5lLGloLCJFQm9vbGVhbiIsITApLEVpKGUuZixOcywiRUJvb2xlYW5PYmplY3QiLCEwKSxFaShlLmksQWwsIkVCeXRlIiwhMCksRWkoZS5nLGxlKEFsLDEpLCJFQnl0ZUFycmF5IiwhMCksRWkoZS5qLGp4LCJFQnl0ZU9iamVjdCIsITApLEVpKGUuayxrZiwiRUNoYXIiLCEwKSxFaShlLm4sUEwsIkVDaGFyYWN0ZXJPYmplY3QiLCEwKSxFaShlLnIsY0ssIkVEYXRlIiwhMCksRWkoZS5zLG5CZSwiRURpYWdub3N0aWNDaGFpbiIsITEpLEVpKGUudCxOYSwiRURvdWJsZSIsITApLEVpKGUudSx0YSwiRURvdWJsZU9iamVjdCIsITApLEVpKGUuZmIsbVBlLCJFRUxpc3QiLCExKSxFaShlLkEseVBlLCJFRW51bWVyYXRvciIsITEpLEVpKGUuQyxIUGUsIkVGZWF0dXJlTWFwIiwhMSksRWkoZS5ELENZLCJFRmVhdHVyZU1hcEVudHJ5IiwhMSksRWkoZS5GLEI0LCJFRmxvYXQiLCEwKSxFaShlLkcsX1QsIkVGbG9hdE9iamVjdCIsITApLEVpKGUuSSxWciwiRUludCIsITApLEVpKGUuSixybywiRUludGVnZXJPYmplY3QiLCEwKSxFaShlLkwscVNlLCJFSmF2YUNsYXNzIiwhMCksRWkoZS5NLHdhLCJFSmF2YU9iamVjdCIsITApLEVpKGUuTixubSwiRUxvbmciLCEwKSxFaShlLk8scjMsIkVMb25nT2JqZWN0IiwhMCksRWkoZS5QLEhTZSwiRU1hcCIsITEpLEVpKGUuWCxqUGUsIkVSZXNvdXJjZSIsITEpLEVpKGUuWSxyQmUsIkVSZXNvdXJjZVNldCIsITEpLEVpKGUuWixoNywiRVNob3J0IiwhMCksRWkoZS4kLGkzLCJFU2hvcnRPYmplY3QiLCEwKSxFaShlLl8senQsIkVTdHJpbmciLCEwKSxFaShlLmNiLHdQZSwiRVRyZWVJdGVyYXRvciIsITEpLEVpKGUuSyxpQmUsIkVJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIiwhMSksdDhlKGUsRmYpKX12YXIgd1A9Im9iamVjdCIsQ3g9ImJvb2xlYW4iLFFrZT0ibnVtYmVyIixJbGU9InN0cmluZyIsT2xlPSJmdW5jdGlvbiIsSWk9MjE0NzQ4MzY0NyxWYz0iamF2YS5sYW5nIix5UD17MzoxfSx4UD0iY29tLmdvb2dsZS5jb21tb24uYmFzZSIsQ289IiwgIixTd3Q9IiVzICglcykgbXVzdCBub3QgYmUgbmVnYXRpdmUiLFJuPXszOjEsNDoxLDU6MX0sX3d0PSJuZWdhdGl2ZSBzaXplOiAiLEprZT0ibm8gY2FsbHMgdG8gbmV4dCgpIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gcmVtb3ZlKCkiLEF3dD0iT3B0aW9uYWwub2YoIix1bD0ibnVsbCIsZVQ9ezIwNDoxLDUxOjF9LGRuPSJjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0Iix0VD17MjA0OjEsNTE6MSwxMjg6MX0sSm09ezIyOToxLDM6MX0sT2E9ezUxOjF9LExyPSJqYXZhLnV0aWwiLFd3PXs4NToxfSxXeT17MjA6MSwzMToxLDE2OjF9LHExPTIwNjMsVGw9ezIwOjEsMzE6MSwxNjoxLDIxOjF9LFprZT17ODU6MSwxMzk6MSwxMzM6MX0sTHd0PXsyMDoxLDMxOjEsMTY6MSwyMToxLDg3OjF9LGVFZT17MjA6MSwzMToxLDE2OjEsMjc3OjEsMjE6MSw4NzoxfSxsZz17NTE6MSwxMjg6MX0sTmxlPXszNTg6MSw0NDoxfSxNd3Q9IkFic3RyYWN0TWFwRW50cnkiLER3dD0iZXhwZWN0ZWRWYWx1ZXNQZXJLZXkiLGR0PXszOjEsNjoxLDQ6MSw1OjF9LF9kPTE2Mzg0LFBoPXsxNTk6MX0sZnI9ezQxOjF9LGtQPXsyMDI6MX0sRVA9e2w6NDE5NDMwMyxtOjQxOTQzMDMsaDo1MjQyODd9LFBsZT17MjUzOjEsMzoxLDM0OjF9LEl3dD0icmFuZ2UgdW5ib3VuZGVkIG9uIHRoaXMgc2lkZSIsaGc9ezIwOjF9LE93dD17MjA6MSwxNjoxfSx0RWU9ezM6MSwyMDoxLDMxOjEsMTY6MX0sblQ9ezMwNzoxLDM6MSwyMDoxLDMxOjEsMTY6MSwxNToxLDU5OjF9LFhVPXszOjEsNDoxLDU6MSwxNzM6MX0sclQ9ezM6MSw4NToxfSxCbGU9ezIwOjEsMTY6MSwyMToxfSxTeD17MzoxLDIwOjEsMzE6MSwxNjoxLDIxOjF9LE53dD17MjA6MSwxNjoxLDIxOjEsODc6MX0sZmc9NDYxODQ1OTA3LGRnPS04NjIwNDg5NDMsVFA9ezM6MSw2OjEsNDoxLDU6MSwxNzM6MX0sUHd0PSJleHBlY3RlZFNpemUiLG0wPTEwMjQsckw9MTA3Mzc0MTgyNCxZeT0iaW5pdGlhbEFycmF5U2l6ZSIsaXQ9ezM6MSw2OjEsNDoxLDk6MSw1OjF9LGlUPXsyMDoxLDMxOjEsNTY6MSwxNjoxLDE1OjF9LEZsZT0iYXJyYXlTaXplIixCd3Q9ezIwOjEsMzE6MSw1NjoxLDE2OjEsMTU6MSw1OToxfSx0aT17NDY6MX0sUVU9ezM4MDoxfSxBYj0xZS00LGxvPS0yMTQ3NDgzNjQ4LEZ3dD0iX19ub2luaXRfXyIsbHA9ezM6MSwxMDM6MSw2MzoxLDgyOjF9LENQPSJjb20uZ29vZ2xlLmd3dC5jb3JlLmNsaWVudC5pbXBsIixuRWU9IlN0cmluZyIsckVlPSJjb20uZ29vZ2xlLmd3dC5jb3JlLmNsaWVudCIsUmxlPSJhbm9ueW1vdXMiLGpsZT0iZm5TdGFjayIsaUVlPSJVbmtub3duIixBZD17MjAxOjEsMzoxLDQ6MX0sYjI9MWUzLFpzPTY1NTM1LCRsZT0iSmFudWFyeSIsemxlPSJGZWJydWFyeSIscWxlPSJNYXJjaCIsSGxlPSJBcHJpbCIsX3g9Ik1heSIsVmxlPSJKdW5lIixVbGU9Ikp1bHkiLEdsZT0iQXVndXN0IixLbGU9IlNlcHRlbWJlciIsV2xlPSJPY3RvYmVyIixZbGU9Ik5vdmVtYmVyIixYbGU9IkRlY2VtYmVyIixMYj0xOTAwLGRpPXs1MzoxLDM6MSw0OjF9LFJ3dD0iQmVmb3JlIENocmlzdCIsand0PSJBbm5vIERvbWluaSIsUWxlPSJTdW5kYXkiLEpsZT0iTW9uZGF5IixabGU9IlR1ZXNkYXkiLGVoZT0iV2VkbmVzZGF5Iix0aGU9IlRodXJzZGF5IixuaGU9IkZyaWRheSIscmhlPSJTYXR1cmRheSIsc0VlPSJjb20uZ29vZ2xlLmd3dC5pMThuLnNoYXJlZCIsJHd0PSJEYXRlVGltZUZvcm1hdCIsaWhlPSJjb20uZ29vZ2xlLmd3dC5pMThuLmNsaWVudCIsend0PSJEZWZhdWx0RGF0ZVRpbWVGb3JtYXRJbmZvIixxd3Q9ezM6MSw0OjEsMzQ6MSwyMDY6MX0sQXg9ImNvbS5nb29nbGUuZ3d0Lmpzb24uY2xpZW50IixlaD00MTk0MzAzLGhwPTEwNDg1NzUsU1A9NTI0Mjg4LEx4PTQxOTQzMDQsWm09MTc1OTIxODYwNDQ0MTYsSlU9MWU5LF9QPS0xNzU5MjE4NjA0NDQxNixhRWU9ImphdmEuaW8iLHNoZT17MzoxLDEwMzoxLDc3OjEsNjM6MSw4MjoxfSxId3Q9ezM6MSwyOTY6MSw4MjoxfSxZdz0nRm9yIGlucHV0IHN0cmluZzogIicsZ3M9MS8wLGlhPS0xLzAsWHk9NDA5NixhaGU9ezM6MSw0OjEsMzc2OjF9LHNyPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZCIsSW89NjU1MzYsQVA9NTUyOTYsWm89ezEwOToxLDM6MSw0OjF9LG9oZT0xZTUsVnd0PS4zMDEwMjk5OTU2NjM5ODEyLFZvPTQyOTQ5NjcyOTUsc1Q9IjAuMCIsY2hlPXs0NDoxfSxhVD0iVW5hYmxlIHRvIGFkZCBlbGVtZW50IHRvIHF1ZXVlIixVd3Q9ezM6MSw0OjEsMjA6MSwzMToxLDU2OjEsMTM6MSwxNjoxLDE1OjEsNTk6MX0sR3d0PXszOjEsMjA6MSwzMToxLDU2OjEsMTY6MSwxNToxLDU5OjF9LEt3dD17MjA6MSwxNjoxLDE1OjF9LHVoZT17MzoxLDUwOjF9LExQPXsxODk6MX0sbTY9ezM6MSw0OjEsODU6MX0sb0VlPXszOjEsNDoxLDIwOjEsMzE6MSwxNjoxLDQ5OjEsMjE6MX0sbGhlPSJkZWxldGUiLGlMPTE0OTAxMTYxMTkzODQ3NjU2ZS0yNCxzTD0xMTEwMjIzMDI0NjI1MTU2NWUtMzIsaGhlPTE1NTI1NDg1LE1QPTU5NjA0NjQ0Nzc1MzkwNjNlLTIzLGNFZT0xNjc3NzIxNixaVT0xNjc3NzIxNSx1RWU9IiwgbGVuZ3RoOiAiLFd3dD17MzoxLDQ6MSwyMDoxLDMxOjEsNTY6MSwxNjoxLDE1OjEsNTk6MX0sbEVlPSJzdWJNYXA6ICIsWXd0PSIgbGVzcyB0aGFuICIsZmhlPXszOjEsMzQ6MSwyMjoxLDMwNDoxfSxkaGU9ImphdmEudXRpbC5mdW5jdGlvbiIsYUw9ImphdmEudXRpbC5sb2dnaW5nIixYd3Q9ezM6MSw0OjEsNToxLDg1NjoxfSxnaGU9InVuZGVmaW5lZCIsc2E9ImphdmEudXRpbC5zdHJlYW0iLGhFZT17NTMzOjEsNjg3OjF9LGVHPSJmcm9tSW5kZXg6ICIsUXd0PSIgPiB0b0luZGV4OiAiLGZFZT0iLCB0b0luZGV4OiAiLGRFZT0iSW5kZXg6ICIsZ0VlPSIsIFNpemU6ICIsb1Q9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uIixpaT17NTA6MX0sSnd0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5jb21wYWN0aW9uIixad3Q9IlNjYW5saW5lL0V2ZW50SGFuZGxlciIsZ2c9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLmNvbXBhY3Rpb24ub25lZCIsZTN0PSJDTm9kZSBiZWxvbmdzIHRvIGFub3RoZXIgQ0dyb3VwLiIsdDN0PSJJU3BhY2luZ3NIYW5kbGVyLzEiLHBoZT0iVGhlICIsYmhlPSIgaW5zdGFuY2UgaGFzIGJlZW4gZmluaXNoZWQgYWxyZWFkeS4iLG4zdD0iVGhlIGRpcmVjdGlvbiAiLHIzdD0iIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIENHcmFwaCBpbnN0YW5jZS4iLGkzdD0iT25lRGltZW5zaW9uYWxDb21wYWN0b3IiLHMzdD0iT25lRGltZW5zaW9uYWxDb21wYWN0b3IvbGFtYmRhJDAkVHlwZSIsYTN0PSJRdWFkcnVwbGV0IixvM3Q9IlNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0b3IiLGMzdD0iU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRvci9Db25zdHJhaW50c1NjYW5saW5lSGFuZGxlciIsdTN0PSJTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdG9yL0NvbnN0cmFpbnRzU2NhbmxpbmVIYW5kbGVyL2xhbWJkYSQwJFR5cGUiLGwzdD0iU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRvci9UaW1lc3RhbXAiLGgzdD0iU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRvci9sYW1iZGEkMCRUeXBlIixMZD17MTc4OjEsNDY6MX0sbWhlPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5jb21wYWN0aW9uLm9wdGlvbnMiLE5jPSJvcmcuZWNsaXBzZS5lbGsuY29yZS5kYXRhIixwRWU9Im9yZy5lY2xpcHNlLmVsay5wb2x5b21pbm8udHJhdmVyc2FsU3RyYXRlZ3kiLGJFZT0ib3JnLmVjbGlwc2UuZWxrLnBvbHlvbWluby5sb3dMZXZlbFNvcnQiLG1FZT0ib3JnLmVjbGlwc2UuZWxrLnBvbHlvbWluby5oaWdoTGV2ZWxTb3J0Iix2RWU9Im9yZy5lY2xpcHNlLmVsay5wb2x5b21pbm8uZmlsbCIsUGY9ezEzNDoxfSx2aGU9InBvbHlvbWlubyIsb0w9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLm5ldHdvcmtzaW1wbGV4IixwZz17MTgzOjEsMzoxLDQ6MX0sZjN0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5ub2Rlc3BhY2luZyIsZXY9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLm5vZGVzcGFjaW5nLmNlbGxzeXN0ZW0iLGNUPSJDRU5URVIiLGQzdD17MjE3OjEsMzM2OjF9LHdFZT17MzoxLDQ6MSw1OjEsNjAzOjF9LE14PSJMRUZUIixEeD0iUklHSFQiLHlFZT0iVmVydGljYWwgYWxpZ25tZW50IGNhbm5vdCBiZSBudWxsIix4RWU9IkJPVFRPTSIsdEc9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLm5vZGVzcGFjaW5nLmludGVybmFsIixjTD0iVU5ERUZJTkVEIixIMT0uMDEsRFA9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLm5vZGVzcGFjaW5nLmludGVybmFsLmFsZ29yaXRobSIsZzN0PSJMYWJlbFBsYWNlci9sYW1iZGEkMCRUeXBlIixwM3Q9IkxhYmVsUGxhY2VyL2xhbWJkYSQxJFR5cGUiLGIzdD0icG9ydFJhdGlvT3JQb3NpdGlvbiIsdVQ9Im9yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLm92ZXJsYXBzIix3aGU9IkRPV04iLE1kPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5wb2x5b21pbm8iLG5HPSJOT1JUSCIseWhlPSJFQVNUIix4aGU9IlNPVVRIIixraGU9IldFU1QiLHJHPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5wb2x5b21pbm8uc3RydWN0dXJlcyIsa0VlPSJEaXJlY3Rpb24iLEVoZT0iR3JpZCBpcyBvbmx5IG9mIHNpemUgIixUaGU9Ii4gUmVxdWVzdGVkIHBvaW50ICgiLENoZT0iKSBpcyBvdXQgb2YgYm91bmRzLiIsaUc9IiBHaXZlbiBjZW50ZXIgYmFzZWQgY29vcmRpbmF0ZXMgd2VyZSAoIixJUD0ib3JnLmVjbGlwc2UuZWxrLmdyYXBoLnByb3BlcnRpZXMiLG0zdD0iSVByb3BlcnR5SG9sZGVyIixFRWU9ezM6MSw5NjoxLDEzNzoxfSxJeD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24uc3BvcmUiLHYzdD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24udXRpbHMiLHR2PXsyMDU6MX0sdjY9Im9yZy5lY2xpcHNlLmVsay5jb3JlIix3M3Q9IkNvbm5lY3RlZCBDb21wb25lbnRzIENvbXBhY3Rpb24iLHkzdD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5kaXNjbyIsc0c9Im9yZy5lY2xpcHNlLmVsay5hbGcuZGlzY28uZ3JhcGgiLFNoZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5kaXNjby5vcHRpb25zIixURWU9IkNvbXBhY3Rpb25TdHJhdGVneSIsQ0VlPSJvcmcuZWNsaXBzZS5lbGsuZGlzY28uY29tcG9uZW50Q29tcGFjdGlvbi5zdHJhdGVneSIsU0VlPSJvcmcuZWNsaXBzZS5lbGsuZGlzY28uY29tcG9uZW50Q29tcGFjdGlvbi5jb21wb25lbnRMYXlvdXRBbGdvcml0aG0iLF9FZT0ib3JnLmVjbGlwc2UuZWxrLmRpc2NvLmRlYnVnLmRpc2NvR3JhcGgiLEFFZT0ib3JnLmVjbGlwc2UuZWxrLmRpc2NvLmRlYnVnLmRpc2NvUG9seXMiLHgzdD0iY29tcG9uZW50Q29tcGFjdGlvbiIsbnY9Im9yZy5lY2xpcHNlLmVsay5kaXNjbyIsX2hlPSJvcmcuZWNsaXBzZS5lbGsuc3BhY2luZy5jb21wb25lbnRDb21wb25lbnQiLEFoZT0ib3JnLmVjbGlwc2UuZWxrLmVkZ2UudGhpY2tuZXNzIixPeD0ib3JnLmVjbGlwc2UuZWxrLmFzcGVjdFJhdGlvIixYdz0ib3JnLmVjbGlwc2UuZWxrLnBhZGRpbmciLHc2PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmRpc2NvLnRyYW5zZm9ybSIsTGhlPTEuNTcwNzk2MzI2Nzk0ODk2Nix5Nj0xNzk3NjkzMTM0ODYyMzE1N2UyOTIsUXk9ezM6MSw0OjEsNToxLDE5ODoxfSxrM3Q9ezM6MSw2OjEsNDoxLDU6MSwxMDA6MSwxMTU6MX0sTWhlPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmZvcmNlIixMRWU9IkNvbXBvbmVudHNQcm9jZXNzb3IiLEUzdD0iQ29tcG9uZW50c1Byb2Nlc3Nvci8xIixNRWU9IkVsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDAkVHlwZSIsT1A9Im9yZy5lY2xpcHNlLmVsay5hbGcuZm9yY2UuZ3JhcGgiLFQzdD0iQ29tcG9uZW50IExheW91dCIsREVlPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmZvcmNlLm1vZGVsIixhRz0ib3JnLmVjbGlwc2UuZWxrLmZvcmNlLm1vZGVsIixJRWU9Im9yZy5lY2xpcHNlLmVsay5mb3JjZS5pdGVyYXRpb25zIixPRWU9Im9yZy5lY2xpcHNlLmVsay5mb3JjZS5yZXB1bHNpdmVQb3dlciIsRGhlPSJvcmcuZWNsaXBzZS5lbGsuZm9yY2UudGVtcGVyYXR1cmUiLERkPS4wMDEsSWhlPSJvcmcuZWNsaXBzZS5lbGsuZm9yY2UucmVwdWxzaW9uIix1TD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5mb3JjZS5vcHRpb25zIixsVD0xLjYwMDAwMDAyMzg0MTg1OCxZdT0ib3JnLmVjbGlwc2UuZWxrLmZvcmNlIixOUD0ib3JnLmVjbGlwc2UuZWxrLnByaW9yaXR5IixKeT0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcubm9kZU5vZGUiLE9oZT0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuZWRnZUxhYmVsIixvRz0ib3JnLmVjbGlwc2UuZWxrLnJhbmRvbVNlZWQiLGxMPSJvcmcuZWNsaXBzZS5lbGsuc2VwYXJhdGVDb25uZWN0ZWRDb21wb25lbnRzIixoTD0ib3JnLmVjbGlwc2UuZWxrLmludGVyYWN0aXZlIixOaGU9Im9yZy5lY2xpcHNlLmVsay5wb3J0Q29uc3RyYWludHMiLGNHPSJvcmcuZWNsaXBzZS5lbGsuZWRnZUxhYmVscy5pbmxpbmUiLGZMPSJvcmcuZWNsaXBzZS5lbGsub21pdE5vZGVNaWNyb0xheW91dCIsaFQ9Im9yZy5lY2xpcHNlLmVsay5ub2RlU2l6ZS5maXhlZEdyYXBoU2l6ZSIsTng9Im9yZy5lY2xpcHNlLmVsay5ub2RlU2l6ZS5vcHRpb25zIix4Nj0ib3JnLmVjbGlwc2UuZWxrLm5vZGVTaXplLmNvbnN0cmFpbnRzIixmVD0ib3JnLmVjbGlwc2UuZWxrLm5vZGVMYWJlbHMucGxhY2VtZW50IixkVD0ib3JnLmVjbGlwc2UuZWxrLnBvcnRMYWJlbHMucGxhY2VtZW50IixQUD0ib3JnLmVjbGlwc2UuZWxrLnRvcGRvd25MYXlvdXQiLEJQPSJvcmcuZWNsaXBzZS5lbGsudG9wZG93bi5zY2FsZUZhY3RvciIsRlA9Im9yZy5lY2xpcHNlLmVsay50b3Bkb3duLmhpZXJhcmNoaWNhbE5vZGVXaWR0aCIsUlA9Im9yZy5lY2xpcHNlLmVsay50b3Bkb3duLmhpZXJhcmNoaWNhbE5vZGVBc3BlY3RSYXRpbyIsUXc9Im9yZy5lY2xpcHNlLmVsay50b3Bkb3duLm5vZGVUeXBlIixORWU9Im9yaWdpbiIsQzN0PSJyYW5kb20iLFMzdD0iYm91bmRpbmdCb3gudXBMZWZ0IixfM3Q9ImJvdW5kaW5nQm94Lmxvd1JpZ2h0IixQRWU9Im9yZy5lY2xpcHNlLmVsay5zdHJlc3MuZml4ZWQiLEJFZT0ib3JnLmVjbGlwc2UuZWxrLnN0cmVzcy5kZXNpcmVkRWRnZUxlbmd0aCIsRkVlPSJvcmcuZWNsaXBzZS5lbGsuc3RyZXNzLmRpbWVuc2lvbiIsUkVlPSJvcmcuZWNsaXBzZS5lbGsuc3RyZXNzLmVwc2lsb24iLGpFZT0ib3JnLmVjbGlwc2UuZWxrLnN0cmVzcy5pdGVyYXRpb25MaW1pdCIsTWI9Im9yZy5lY2xpcHNlLmVsay5zdHJlc3MiLEEzdD0iRUxLIFN0cmVzcyIsUHg9Im9yZy5lY2xpcHNlLmVsay5ub2RlU2l6ZS5taW5pbXVtIix1Rz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5mb3JjZS5zdHJlc3MiLEwzdD0iTGF5ZXJlZCBsYXlvdXQiLEJ4PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQiLGpQPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuY29tcGFjdGlvbi5jb21wb25lbnRzIixkTD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmNvbXBhY3Rpb24ub25lZCIsbEc9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5jb21wYWN0aW9uLm9uZWQuYWxncyIscnY9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5jb21wYWN0aW9uLnJlY3RodWxsIixWMT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmNvbXBvbmVudHMiLElkPSJOT05FIiwkRWU9Ik1PREVMX09SREVSIixhdT17MzoxLDY6MSw0OjEsOToxLDU6MSwxMjY6MX0sTTN0PXszOjEsNjoxLDQ6MSw1OjEsMTUwOjEsMTAwOjEsMTE1OjF9LGhHPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuY29tcG91bmQiLHRzPXs0NzoxfSxDdT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmdyYXBoIixQaGU9IiAtPiAiLEQzdD0iTm90IHN1cHBvcnRlZCBieSBMR3JhcGgiLHpFZT0iUG9ydCBzaWRlIGlzIHVuZGVmaW5lZCIsQmhlPXszOjEsNjoxLDQ6MSw1OjEsNDgzOjEsMTUwOjEsMTAwOjEsMTE1OjF9LG0yPXszOjEsNjoxLDQ6MSw1OjEsMTUwOjEsMTk5OjEsMjEwOjEsMTAwOjEsMTE1OjF9LEkzdD17MzoxLDY6MSw0OjEsNToxLDE1MDoxLDIwNDI6MSwyMTA6MSwxMDA6MSwxMTU6MX0sTzN0PWAoW3siJyAJXHIKYCxOM3Q9YCldfSInIAlccgpgLFAzdD0iVGhlIGdpdmVuIHN0cmluZyBjb250YWlucyBwYXJ0cyB0aGF0IGNhbm5vdCBiZSBwYXJzZWQgYXMgbnVtYmVycy4iLCRQPSJvcmcuZWNsaXBzZS5lbGsuY29yZS5tYXRoIixCM3Q9ezM6MSw0OjEsMTQwOjEsMjE0OjEsNDIzOjF9LEYzdD17MzoxLDQ6MSwxMDc6MSwyMTQ6MSw0MjM6MX0sdjI9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5ncmFwaC50cmFuc2Zvcm0iLFIzdD0iRWxrR3JhcGhJbXBvcnRlciIsajN0PSJFbGtHcmFwaEltcG9ydGVyL2xhbWJkYSQxJFR5cGUiLCQzdD0iRWxrR3JhcGhJbXBvcnRlci9sYW1iZGEkMiRUeXBlIix6M3Q9IkVsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDQkVHlwZSIscnI9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5pbnRlcm1lZGlhdGUiLHEzdD0iTm9kZSBtYXJnaW4gY2FsY3VsYXRpb24iLEgzdD0iT05FX1NJREVEX0dSRUVEWV9TV0lUQ0giLFYzdD0iVFdPX1NJREVEX0dSRUVEWV9TV0lUQ0giLEZoZT0iTm8gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIGZvciB0aGUgbGF5b3V0IHByb2Nlc3NvciAiLFJoZT0iSW50ZXJtZWRpYXRlUHJvY2Vzc29yU3RyYXRlZ3kiLGpoZT0iTm9kZSAnIixVM3Q9IkZJUlNUX1NFUEFSQVRFIixHM3Q9IkxBU1RfU0VQQVJBVEUiLEszdD0iT2RkIHBvcnQgc2lkZSBwcm9jZXNzaW5nIixhYT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS5jb21wYWN0aW9uIixnTD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS5ncmVlZHlzd2l0Y2giLGJnPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDNvcmRlci5jb3VudGluZyIselA9ezIzMDoxfSxGeD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS5sb29wcyIsQmg9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5pbnRlcm1lZGlhdGUubG9vcHMub3JkZXJpbmciLERiPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuaW50ZXJtZWRpYXRlLmxvb3BzLnJvdXRpbmciLHFFZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS5wcmVzZXJ2ZW9yZGVyIixPZD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS53cmFwcGluZyIsb3U9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5vcHRpb25zIiwkaGU9IklOVEVSQUNUSVZFIixIRWU9IkdSRUVEWSIsVzN0PSJERVBUSF9GSVJTVCIsWTN0PSJFREdFX0xFTkdUSCIsWDN0PSJTRUxGX0xPT1BTIixRM3Q9ImZpcnN0VHJ5V2l0aEluaXRpYWxPcmRlciIsVkVlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5kaXJlY3Rpb25Db25ncnVlbmN5IixVRWU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmZlZWRiYWNrRWRnZXMiLGZHPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5pbnRlcmFjdGl2ZVJlZmVyZW5jZVBvaW50IixHRWU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLm1lcmdlRWRnZXMiLEtFZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubWVyZ2VIaWVyYXJjaHlFZGdlcyIsV0VlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5hbGxvd05vbkZsb3dQb3J0c1RvU3dpdGNoU2lkZXMiLFlFZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQucG9ydFNvcnRpbmdTdHJhdGVneSIsWEVlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC50aG9yb3VnaG5lc3MiLFFFZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQudW5uZWNlc3NhcnlCZW5kcG9pbnRzIixKRWU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmdlbmVyYXRlUG9zaXRpb25BbmRMYXllcklkcyIsemhlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jeWNsZUJyZWFraW5nLnN0cmF0ZWd5IixxUD0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubGF5ZXJpbmcuc3RyYXRlZ3kiLFpFZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubGF5ZXJpbmcubGF5ZXJDb25zdHJhaW50IixlVGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyaW5nLmxheWVyQ2hvaWNlQ29uc3RyYWludCIsdFRlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5sYXllcklkIixxaGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyaW5nLm1pbldpZHRoLnVwcGVyQm91bmRPbldpZHRoIixIaGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyaW5nLm1pbldpZHRoLnVwcGVyTGF5ZXJFc3RpbWF0aW9uU2NhbGluZ0ZhY3RvciIsVmhlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5ub2RlUHJvbW90aW9uLnN0cmF0ZWd5IixVaGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyaW5nLm5vZGVQcm9tb3Rpb24ubWF4SXRlcmF0aW9ucyIsR2hlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5jb2ZmbWFuR3JhaGFtLmxheWVyQm91bmQiLHBMPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5zdHJhdGVneSIsblRlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5mb3JjZU5vZGVNb2RlbE9yZGVyIixLaGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNyb3NzaW5nTWluaW1pemF0aW9uLmhpZXJhcmNoaWNhbFN3ZWVwaW5lc3MiLFdoZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24uc2VtaUludGVyYWN0aXZlIixyVGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNyb3NzaW5nTWluaW1pemF0aW9uLmluTGF5ZXJQcmVkT2YiLGlUZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24uaW5MYXllclN1Y2NPZiIsc1RlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5wb3NpdGlvbkNob2ljZUNvbnN0cmFpbnQiLGFUZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24ucG9zaXRpb25JZCIsb1RlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5ncmVlZHlTd2l0Y2guYWN0aXZhdGlvblRocmVzaG9sZCIsWWhlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5ncmVlZHlTd2l0Y2gudHlwZSIsZEc9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNyb3NzaW5nTWluaW1pemF0aW9uLmdyZWVkeVN3aXRjaEhpZXJhcmNoaWNhbC50eXBlIixrNj0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5zdHJhdGVneSIsZ0c9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLm5vZGVQbGFjZW1lbnQuZmF2b3JTdHJhaWdodEVkZ2VzIixYaGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLm5vZGVQbGFjZW1lbnQuYmsuZWRnZVN0cmFpZ2h0ZW5pbmciLFFoZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5iay5maXhlZEFsaWdubWVudCIsSmhlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5ub2RlUGxhY2VtZW50LmxpbmVhclNlZ21lbnRzLmRlZmxlY3Rpb25EYW1wZW5pbmciLFpoZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5uZXR3b3JrU2ltcGxleC5ub2RlRmxleGliaWxpdHkiLGVmZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5uZXR3b3JrU2ltcGxleC5ub2RlRmxleGliaWxpdHkuZGVmYXVsdCIsY1RlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5lZGdlUm91dGluZy5zZWxmTG9vcERpc3RyaWJ1dGlvbiIsdVRlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5lZGdlUm91dGluZy5zZWxmTG9vcE9yZGVyaW5nIixwRz0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZWRnZVJvdXRpbmcuc3BsaW5lcy5tb2RlIixiRz0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZWRnZVJvdXRpbmcuc3BsaW5lcy5zbG9wcHkubGF5ZXJTcGFjaW5nRmFjdG9yIix0ZmU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmVkZ2VSb3V0aW5nLnBvbHlsaW5lLnNsb3BlZEVkZ2Vab25lV2lkdGgiLGxUZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuc3BhY2luZy5iYXNlVmFsdWUiLGhUZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuc3BhY2luZy5lZGdlTm9kZUJldHdlZW5MYXllcnMiLGZUZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuc3BhY2luZy5lZGdlRWRnZUJldHdlZW5MYXllcnMiLGRUZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuc3BhY2luZy5ub2RlTm9kZUJldHdlZW5MYXllcnMiLGdUZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQucHJpb3JpdHkuZGlyZWN0aW9uIixwVGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLnByaW9yaXR5LnNob3J0bmVzcyIsYlRlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5wcmlvcml0eS5zdHJhaWdodG5lc3MiLG5mZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29tcGFjdGlvbi5jb25uZWN0ZWRDb21wb25lbnRzIixtVGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNvbXBhY3Rpb24ucG9zdENvbXBhY3Rpb24uc3RyYXRlZ3kiLHZUZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29tcGFjdGlvbi5wb3N0Q29tcGFjdGlvbi5jb25zdHJhaW50cyIsbUc9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmhpZ2hEZWdyZWVOb2Rlcy50cmVhdG1lbnQiLHJmZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuaGlnaERlZ3JlZU5vZGVzLnRocmVzaG9sZCIsaWZlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5oaWdoRGVncmVlTm9kZXMudHJlZUhlaWdodCIsZnA9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLnN0cmF0ZWd5Iix2Rz0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQud3JhcHBpbmcuYWRkaXRpb25hbEVkZ2VTcGFjaW5nIix3Rz0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQud3JhcHBpbmcuY29ycmVjdGlvbkZhY3RvciIsYkw9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLmN1dHRpbmcuc3RyYXRlZ3kiLHNmZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQud3JhcHBpbmcuY3V0dGluZy5jdXRzIixhZmU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLmN1dHRpbmcubXNkLmZyZWVkb20iLHlHPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy52YWxpZGlmeS5zdHJhdGVneSIseEc9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLnZhbGlkaWZ5LmZvcmJpZGRlbkluZGljZXMiLGtHPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy5tdWx0aUVkZ2UuaW1wcm92ZUN1dHMiLEVHPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy5tdWx0aUVkZ2UuZGlzdGFuY2VQZW5hbHR5IixvZmU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLm11bHRpRWRnZS5pbXByb3ZlV3JhcHBlZEVkZ2VzIix3VGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmVkZ2VMYWJlbHMuc2lkZVNlbGVjdGlvbiIseVRlPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5lZGdlTGFiZWxzLmNlbnRlckxhYmVsUGxhY2VtZW50U3RyYXRlZ3kiLFRHPSJvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIuc3RyYXRlZ3kiLHhUZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29uc2lkZXJNb2RlbE9yZGVyLnBvcnRNb2RlbE9yZGVyIixrVGU9Im9yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNvbnNpZGVyTW9kZWxPcmRlci5ub01vZGVsT3JkZXIiLGNmZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29uc2lkZXJNb2RlbE9yZGVyLmNvbXBvbmVudHMiLEVUZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29uc2lkZXJNb2RlbE9yZGVyLmxvbmdFZGdlU3RyYXRlZ3kiLHVmZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29uc2lkZXJNb2RlbE9yZGVyLmNyb3NzaW5nQ291bnRlck5vZGVJbmZsdWVuY2UiLGxmZT0ib3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29uc2lkZXJNb2RlbE9yZGVyLmNyb3NzaW5nQ291bnRlclBvcnRJbmZsdWVuY2UiLGhmZT0ibGF5ZXJpbmciLEozdD0ibGF5ZXJpbmcubWluV2lkdGgiLFozdD0ibGF5ZXJpbmcubm9kZVByb21vdGlvbiIsZ1Q9ImNyb3NzaW5nTWluaW1pemF0aW9uIixDRz0ib3JnLmVjbGlwc2UuZWxrLmhpZXJhcmNoeUhhbmRsaW5nIixleXQ9ImNyb3NzaW5nTWluaW1pemF0aW9uLmdyZWVkeVN3aXRjaCIsdHl0PSJub2RlUGxhY2VtZW50IixueXQ9Im5vZGVQbGFjZW1lbnQuYmsiLHJ5dD0iZWRnZVJvdXRpbmciLEhQPSJvcmcuZWNsaXBzZS5lbGsuZWRnZVJvdXRpbmciLFUxPSJzcGFjaW5nIixUVGU9InByaW9yaXR5IixDVGU9ImNvbXBhY3Rpb24iLGl5dD0iY29tcGFjdGlvbi5wb3N0Q29tcGFjdGlvbiIsc3l0PSJTcGVjaWZpZXMgd2hldGhlciBhbmQgaG93IHBvc3QtcHJvY2VzcyBjb21wYWN0aW9uIGlzIGFwcGxpZWQuIixTVGU9ImhpZ2hEZWdyZWVOb2RlcyIsX1RlPSJ3cmFwcGluZyIsYXl0PSJ3cmFwcGluZy5jdXR0aW5nIixveXQ9IndyYXBwaW5nLnZhbGlkaWZ5IixBVGU9IndyYXBwaW5nLm11bHRpRWRnZSIsZmZlPSJlZGdlTGFiZWxzIixtTD0iY29uc2lkZXJNb2RlbE9yZGVyIixMVGU9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmNvbW1lbnRDb21tZW50IixNVGU9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmNvbW1lbnROb2RlIixEVGU9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmVkZ2VFZGdlIixkZmU9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmVkZ2VOb2RlIixJVGU9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmxhYmVsTGFiZWwiLE9UZT0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcubGFiZWxQb3J0SG9yaXpvbnRhbCIsTlRlPSJvcmcuZWNsaXBzZS5lbGsuc3BhY2luZy5sYWJlbFBvcnRWZXJ0aWNhbCIsUFRlPSJvcmcuZWNsaXBzZS5lbGsuc3BhY2luZy5sYWJlbE5vZGUiLEJUZT0ib3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcubm9kZVNlbGZMb29wIixGVGU9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLnBvcnRQb3J0IixSVGU9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmluZGl2aWR1YWwiLGpUZT0ib3JnLmVjbGlwc2UuZWxrLnBvcnQuYm9yZGVyT2Zmc2V0IiwkVGU9Im9yZy5lY2xpcHNlLmVsay5ub0xheW91dCIselRlPSJvcmcuZWNsaXBzZS5lbGsucG9ydC5zaWRlIixWUD0ib3JnLmVjbGlwc2UuZWxrLmRlYnVnTW9kZSIscVRlPSJvcmcuZWNsaXBzZS5lbGsuYWxpZ25tZW50IixIVGU9Im9yZy5lY2xpcHNlLmVsay5pbnNpZGVTZWxmTG9vcHMuYWN0aXZhdGUiLFZUZT0ib3JnLmVjbGlwc2UuZWxrLmluc2lkZVNlbGZMb29wcy55byIsZ2ZlPSJvcmcuZWNsaXBzZS5lbGsuZGlyZWN0aW9uIixVVGU9Im9yZy5lY2xpcHNlLmVsay5ub2RlTGFiZWxzLnBhZGRpbmciLEdUZT0ib3JnLmVjbGlwc2UuZWxrLnBvcnRMYWJlbHMubmV4dFRvUG9ydElmUG9zc2libGUiLEtUZT0ib3JnLmVjbGlwc2UuZWxrLnBvcnRMYWJlbHMudHJlYXRBc0dyb3VwIixXVGU9Im9yZy5lY2xpcHNlLmVsay5wb3J0QWxpZ25tZW50LmRlZmF1bHQiLFlUZT0ib3JnLmVjbGlwc2UuZWxrLnBvcnRBbGlnbm1lbnQubm9ydGgiLFhUZT0ib3JnLmVjbGlwc2UuZWxrLnBvcnRBbGlnbm1lbnQuc291dGgiLFFUZT0ib3JnLmVjbGlwc2UuZWxrLnBvcnRBbGlnbm1lbnQud2VzdCIsSlRlPSJvcmcuZWNsaXBzZS5lbGsucG9ydEFsaWdubWVudC5lYXN0IixTRz0ib3JnLmVjbGlwc2UuZWxrLmNvbnRlbnRBbGlnbm1lbnQiLFpUZT0ib3JnLmVjbGlwc2UuZWxrLmp1bmN0aW9uUG9pbnRzIixlQ2U9Im9yZy5lY2xpcHNlLmVsay5lZGdlTGFiZWxzLnBsYWNlbWVudCIsdENlPSJvcmcuZWNsaXBzZS5lbGsucG9ydC5pbmRleCIsbkNlPSJvcmcuZWNsaXBzZS5lbGsuY29tbWVudEJveCIsckNlPSJvcmcuZWNsaXBzZS5lbGsuaHlwZXJub2RlIixpQ2U9Im9yZy5lY2xpcHNlLmVsay5wb3J0LmFuY2hvciIscGZlPSJvcmcuZWNsaXBzZS5lbGsucGFydGl0aW9uaW5nLmFjdGl2YXRlIixiZmU9Im9yZy5lY2xpcHNlLmVsay5wYXJ0aXRpb25pbmcucGFydGl0aW9uIixfRz0ib3JnLmVjbGlwc2UuZWxrLnBvc2l0aW9uIixzQ2U9Im9yZy5lY2xpcHNlLmVsay5tYXJnaW5zIixhQ2U9Im9yZy5lY2xpcHNlLmVsay5zcGFjaW5nLnBvcnRzU3Vycm91bmRpbmciLEFHPSJvcmcuZWNsaXBzZS5lbGsuaW50ZXJhY3RpdmVMYXlvdXQiLFVjPSJvcmcuZWNsaXBzZS5lbGsuY29yZS51dGlsIixvQ2U9ezM6MSw0OjEsNToxLDYwMToxfSxjeXQ9Ik5FVFdPUktfU0lNUExFWCIsY0NlPSJTSU1QTEUiLFVvPXsxMDY6MSw0NzoxfSxMRz0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLnAxY3ljbGVzIixkcD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLnAybGF5ZXJzIix1Q2U9ezQxMzoxLDIzMDoxfSx1eXQ9ezg0NjoxLDM6MSw0OjF9LENsPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDNvcmRlciIsR289Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5wNG5vZGVzIixseXQ9ezM6MSw0OjEsNToxLDg1NDoxfSxOZD0xZS01LEliPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDRub2Rlcy5iayIsbWZlPSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDVlZGdlcyIsaTE9Im9yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5wNWVkZ2VzLm9ydGhvZ29uYWwiLHZmZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLnA1ZWRnZXMub3J0aG9nb25hbC5kaXJlY3Rpb24iLHdmZT0xZS02LFp5PSJvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDVlZGdlcy5zcGxpbmVzIix5ZmU9LjA5OTk5OTk5OTk5OTk5OTk4LE1HPTFlLTgsaHl0PTQuNzEyMzg4OTgwMzg0NjksbENlPTMuMTQxNTkyNjUzNTg5NzkzLGdwPSJvcmcuZWNsaXBzZS5lbGsuYWxnLm1ydHJlZSIseGZlPS4xMDAwMDAwMDE0OTAxMTYxMixERz0iU1VQRVJfUk9PVCIsdkw9Im9yZy5lY2xpcHNlLmVsay5hbGcubXJ0cmVlLmdyYXBoIixoQ2U9LTE3OTc2OTMxMzQ4NjIzMTU3ZTI5MixTdT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUuaW50ZXJtZWRpYXRlIixmeXQ9IlByb2Nlc3NvciBjb21wdXRlIGZhbm91dCIsSUc9ezM6MSw2OjEsNDoxLDU6MSw1MzQ6MSwxMDA6MSwxMTU6MX0sZHl0PSJTZXQgbmVpZ2hib3JzIGluIGxldmVsIixVUD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUub3B0aW9ucyIsZ3l0PSJERVNDRU5EQU5UUyIsZkNlPSJvcmcuZWNsaXBzZS5lbGsubXJ0cmVlLmNvbXBhY3Rpb24iLGRDZT0ib3JnLmVjbGlwc2UuZWxrLm1ydHJlZS5lZGdlRW5kVGV4dHVyZUxlbmd0aCIsZ0NlPSJvcmcuZWNsaXBzZS5lbGsubXJ0cmVlLnRyZWVMZXZlbCIscENlPSJvcmcuZWNsaXBzZS5lbGsubXJ0cmVlLnBvc2l0aW9uQ29uc3RyYWludCIsYkNlPSJvcmcuZWNsaXBzZS5lbGsubXJ0cmVlLndlaWdodGluZyIsbUNlPSJvcmcuZWNsaXBzZS5lbGsubXJ0cmVlLmVkZ2VSb3V0aW5nTW9kZSIsdkNlPSJvcmcuZWNsaXBzZS5lbGsubXJ0cmVlLnNlYXJjaE9yZGVyIixweXQ9IlBvc2l0aW9uIENvbnN0cmFpbnQiLFh1PSJvcmcuZWNsaXBzZS5lbGsubXJ0cmVlIixieXQ9Im9yZy5lY2xpcHNlLmVsay50cmVlIixteXQ9IlByb2Nlc3NvciBhcnJhbmdlIGxldmVsIixwVD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUucDJvcmRlciIsdmg9Im9yZy5lY2xpcHNlLmVsay5hbGcubXJ0cmVlLnA0cm91dGUiLHdDZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwiLGl2PTYuMjgzMTg1MzA3MTc5NTg2LHlDZT0iQmVmb3JlIix4Q2U9NWUtMzI0LE9HPSJBZnRlciIsa0NlPSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5pbnRlcm1lZGlhdGUiLHZ5dD0iQ09NUEFDVElPTiIsa2ZlPSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5pbnRlcm1lZGlhdGUuY29tcGFjdGlvbiIsd3l0PXszOjEsNDoxLDU6MSwxMDA6MX0sRUNlPSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5pbnRlcm1lZGlhdGUub3B0aW1pemF0aW9uIixFZmU9Ik5vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGxheW91dCBvcHRpb24gIix3TD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwub3B0aW9ucyIsVENlPSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLmNlbnRlck9uUm9vdCIsQ0NlPSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLm9yZGVySWQiLFNDZT0ib3JnLmVjbGlwc2UuZWxrLnJhZGlhbC5yYWRpdXMiLE5HPSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLnJvdGF0ZSIsVGZlPSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLmNvbXBhY3RvciIsQ2ZlPSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLmNvbXBhY3Rpb25TdGVwU2l6ZSIsX0NlPSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLnNvcnRlciIsQUNlPSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLndlZGdlQ3JpdGVyaWEiLExDZT0ib3JnLmVjbGlwc2UuZWxrLnJhZGlhbC5vcHRpbWl6YXRpb25Dcml0ZXJpYSIsU2ZlPSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsLnJvdGF0aW9uLnRhcmdldEFuZ2xlIixfZmU9Im9yZy5lY2xpcHNlLmVsay5yYWRpYWwucm90YXRpb24uY29tcHV0ZUFkZGl0aW9uYWxXZWRnZVNwYWNlIixNQ2U9Im9yZy5lY2xpcHNlLmVsay5yYWRpYWwucm90YXRpb24ub3V0Z29pbmdFZGdlQW5nbGVzIix5eXQ9IkNvbXBhY3Rpb24iLERDZT0icm90YXRpb24iLGdmPSJvcmcuZWNsaXBzZS5lbGsucmFkaWFsIix4eXQ9Im9yZy5lY2xpcHNlLmVsay5hbGcucmFkaWFsLnAxcG9zaXRpb24ud2VkZ2UiLElDZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwuc29ydGluZyIsa3l0PTUuNDk3Nzg3MTQzNzgyMTM4LEV5dD0zLjkyNjk5MDgxNjk4NzI0MTQsVHl0PTIuMzU2MTk0NDkwMTkyMzQ1LEN5dD0ib3JnLmVjbGlwc2UuZWxrLmFsZy5yZWN0cGFja2luZyIsUEc9Im9yZy5lY2xpcHNlLmVsay5hbGcucmVjdHBhY2tpbmcuaW50ZXJtZWRpYXRlIixBZmU9Im9yZy5lY2xpcHNlLmVsay5hbGcucmVjdHBhY2tpbmcub3B0aW9ucyIsT0NlPSJvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcudHJ5Ym94IixOQ2U9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy5jdXJyZW50UG9zaXRpb24iLFBDZT0ib3JnLmVjbGlwc2UuZWxrLnJlY3RwYWNraW5nLmRlc2lyZWRQb3NpdGlvbiIsQkNlPSJvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcuaW5OZXdSb3ciLEZDZT0ib3JnLmVjbGlwc2UuZWxrLnJlY3RwYWNraW5nLndpZHRoQXBwcm94aW1hdGlvbi5zdHJhdGVneSIsUkNlPSJvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcud2lkdGhBcHByb3hpbWF0aW9uLnRhcmdldFdpZHRoIixqQ2U9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy53aWR0aEFwcHJveGltYXRpb24ub3B0aW1pemF0aW9uR29hbCIsJENlPSJvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcud2lkdGhBcHByb3hpbWF0aW9uLmxhc3RQbGFjZVNoaWZ0Iix6Q2U9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy5wYWNraW5nLnN0cmF0ZWd5IixxQ2U9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy5wYWNraW5nLmNvbXBhY3Rpb24ucm93SGVpZ2h0UmVldmFsdWF0aW9uIixIQ2U9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy5wYWNraW5nLmNvbXBhY3Rpb24uaXRlcmF0aW9ucyIsVkNlPSJvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcud2hpdGVTcGFjZUVsaW1pbmF0aW9uLnN0cmF0ZWd5IixMZmU9IndpZHRoQXBwcm94aW1hdGlvbiIsU3l0PSJDb21wYWN0aW9uIFN0cmF0ZWd5IixfeXQ9InBhY2tpbmcuY29tcGFjdGlvbiIsdGg9Im9yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZyIsYlQ9Im9yZy5lY2xpcHNlLmVsay5hbGcucmVjdHBhY2tpbmcucDF3aWR0aGFwcHJveGltYXRpb24iLEJHPSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJlY3RwYWNraW5nLnAycGFja2luZyIsQXl0PSJObyBDb21wYWN0aW9uIixVQ2U9Im9yZy5lY2xpcHNlLmVsay5hbGcucmVjdHBhY2tpbmcucDN3aGl0ZXNwYWNlZWxpbWluYXRpb24iLEdQPSJvcmcuZWNsaXBzZS5lbGsuYWxnLnJlY3RwYWNraW5nLnV0aWwiLEZHPSJObyBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUgZm9yICIsZTQ9Im9yZy5lY2xpcHNlLmVsay5hbGcuc3BvcmUiLHQ0PSJvcmcuZWNsaXBzZS5lbGsuYWxnLnNwb3JlLm9wdGlvbnMiLEp3PSJvcmcuZWNsaXBzZS5lbGsuc3BvcmVDb21wYWN0aW9uIixNZmU9Im9yZy5lY2xpcHNlLmVsay51bmRlcmx5aW5nTGF5b3V0QWxnb3JpdGhtIixHQ2U9Im9yZy5lY2xpcHNlLmVsay5wcm9jZXNzaW5nT3JkZXIudHJlZUNvbnN0cnVjdGlvbiIsS0NlPSJvcmcuZWNsaXBzZS5lbGsucHJvY2Vzc2luZ09yZGVyLnNwYW5uaW5nVHJlZUNvc3RGdW5jdGlvbiIsRGZlPSJvcmcuZWNsaXBzZS5lbGsucHJvY2Vzc2luZ09yZGVyLnByZWZlcnJlZFJvb3QiLElmZT0ib3JnLmVjbGlwc2UuZWxrLnByb2Nlc3NpbmdPcmRlci5yb290U2VsZWN0aW9uIixPZmU9Im9yZy5lY2xpcHNlLmVsay5zdHJ1Y3R1cmUuc3RydWN0dXJlRXh0cmFjdGlvblN0cmF0ZWd5IixXQ2U9Im9yZy5lY2xpcHNlLmVsay5jb21wYWN0aW9uLmNvbXBhY3Rpb25TdHJhdGVneSIsWUNlPSJvcmcuZWNsaXBzZS5lbGsuY29tcGFjdGlvbi5vcnRob2dvbmFsIixYQ2U9Im9yZy5lY2xpcHNlLmVsay5vdmVybGFwUmVtb3ZhbC5tYXhJdGVyYXRpb25zIixRQ2U9Im9yZy5lY2xpcHNlLmVsay5vdmVybGFwUmVtb3ZhbC5ydW5TY2FubGluZSIsTmZlPSJwcm9jZXNzaW5nT3JkZXIiLEx5dD0ib3ZlcmxhcFJlbW92YWwiLG1UPSJvcmcuZWNsaXBzZS5lbGsuc3BvcmVPdmVybGFwIixNeXQ9Im9yZy5lY2xpcHNlLmVsay5hbGcuc3BvcmUucDFzdHJ1Y3R1cmUiLFBmZT0ib3JnLmVjbGlwc2UuZWxrLmFsZy5zcG9yZS5wMnByb2Nlc3NpbmdvcmRlciIsQmZlPSJvcmcuZWNsaXBzZS5lbGsuYWxnLnNwb3JlLnAzZXhlY3V0aW9uIixEeXQ9IlRvcGRvd24gTGF5b3V0IixJeXQ9IkludmFsaWQgaW5kZXg6ICIsdlQ9Im9yZy5lY2xpcHNlLmVsay5jb3JlLmFsZyIsRTY9ezM0MToxfSxuND17Mjk1OjF9LE95dD0iTWFrZSBzdXJlIGl0cyB0eXBlIGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgIixKQ2U9IiB1dGlsaXR5IGNsYXNzLiIsd1Q9InRydWUiLEZmZT0iZmFsc2UiLE55dD0iQ291bGRuJ3QgY2xvbmUgcHJvcGVydHkgJyIsWnc9LjA1LG5oPSJvcmcuZWNsaXBzZS5lbGsuY29yZS5vcHRpb25zIixQeXQ9MS4yOTk5OTk5NTIzMTYyODQyLGUzPSJvcmcuZWNsaXBzZS5lbGsuYm94IixaQ2U9Im9yZy5lY2xpcHNlLmVsay5leHBhbmROb2RlcyIsZVNlPSJvcmcuZWNsaXBzZS5lbGsuYm94LnBhY2tpbmdNb2RlIixCeXQ9Im9yZy5lY2xpcHNlLmVsay5hbGdvcml0aG0iLEZ5dD0ib3JnLmVjbGlwc2UuZWxrLnJlc29sdmVkQWxnb3JpdGhtIix0U2U9Im9yZy5lY2xpcHNlLmVsay5iZW5kUG9pbnRzIixzT249Im9yZy5lY2xpcHNlLmVsay5sYWJlbE1hbmFnZXIiLFJ5dD0ib3JnLmVjbGlwc2UuZWxrLnNjYWxlRmFjdG9yIixqeXQ9Im9yZy5lY2xpcHNlLmVsay5jaGlsZEFyZWFXaWR0aCIsJHl0PSJvcmcuZWNsaXBzZS5lbGsuY2hpbGRBcmVhSGVpZ2h0Iix6eXQ9Im9yZy5lY2xpcHNlLmVsay5hbmltYXRlIixxeXQ9Im9yZy5lY2xpcHNlLmVsay5hbmltVGltZUZhY3RvciIsSHl0PSJvcmcuZWNsaXBzZS5lbGsubGF5b3V0QW5jZXN0b3JzIixWeXQ9Im9yZy5lY2xpcHNlLmVsay5tYXhBbmltVGltZSIsVXl0PSJvcmcuZWNsaXBzZS5lbGsubWluQW5pbVRpbWUiLEd5dD0ib3JnLmVjbGlwc2UuZWxrLnByb2dyZXNzQmFyIixLeXQ9Im9yZy5lY2xpcHNlLmVsay52YWxpZGF0ZUdyYXBoIixXeXQ9Im9yZy5lY2xpcHNlLmVsay52YWxpZGF0ZU9wdGlvbnMiLFl5dD0ib3JnLmVjbGlwc2UuZWxrLnpvb21Ub0ZpdCIsYU9uPSJvcmcuZWNsaXBzZS5lbGsuZm9udC5uYW1lIixYeXQ9Im9yZy5lY2xpcHNlLmVsay5mb250LnNpemUiLG5TZT0ib3JnLmVjbGlwc2UuZWxrLnRvcGRvd24uc2l6ZUFwcHJveGltYXRvciIsclNlPSJvcmcuZWNsaXBzZS5lbGsudG9wZG93bi5zY2FsZUNhcCIsUXl0PSJvcmcuZWNsaXBzZS5lbGsuZWRnZS50eXBlIixKeXQ9InBhcnRpdGlvbmluZyIsWnl0PSJub2RlTGFiZWxzIixSRz0icG9ydEFsaWdubWVudCIsUmZlPSJub2RlU2l6ZSIsamZlPSJwb3J0IixpU2U9InBvcnRMYWJlbHMiLEtQPSJ0b3Bkb3duIixlNHQ9Imluc2lkZVNlbGZMb29wcyIseUw9Im9yZy5lY2xpcHNlLmVsay5maXhlZCIsakc9Im9yZy5lY2xpcHNlLmVsay5yYW5kb20iLHNTZT17MzoxLDM0OjEsMjI6MSwzNDc6MX0sdDR0PSJwb3J0IG11c3QgaGF2ZSBhIHBhcmVudCBub2RlIHRvIGNhbGN1bGF0ZSB0aGUgcG9ydCBzaWRlIixuNHQ9IlRoZSBlZGdlIG5lZWRzIHRvIGhhdmUgZXhhY3RseSBvbmUgZWRnZSBzZWN0aW9uLiBGb3VuZDogIix4TD0ib3JnLmVjbGlwc2UuZWxrLmNvcmUudXRpbC5hZGFwdGVycyIscGY9Im9yZy5lY2xpcHNlLmVtZi5lY29yZSIsVDY9Im9yZy5lY2xpcHNlLmVsay5ncmFwaCIscjR0PSJFTWFwUHJvcGVydHlIb2xkZXIiLGk0dD0iRWxrQmVuZFBvaW50IixzNHQ9IkVsa0dyYXBoRWxlbWVudCIsYTR0PSJFbGtDb25uZWN0YWJsZVNoYXBlIixhU2U9IkVsa0VkZ2UiLG80dD0iRWxrRWRnZVNlY3Rpb24iLGM0dD0iRU1vZGVsRWxlbWVudCIsdTR0PSJFTmFtZWRFbGVtZW50IixvU2U9IkVsa0xhYmVsIixjU2U9IkVsa05vZGUiLHVTZT0iRWxrUG9ydCIsbDR0PXs5NDoxLDkzOjF9LFJ4PSJvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsIixPYj0iVGhlIGZlYXR1cmUgJyIsa0w9IicgaXMgbm90IGEgdmFsaWQgY2hhbmdlYWJsZSBmZWF0dXJlIixoNHQ9IkV4cGVjdGluZyBudWxsIiwkZmU9IicgaXMgbm90IGEgdmFsaWQgZmVhdHVyZSIsZjR0PSJUaGUgZmVhdHVyZSBJRCIsZDR0PSIgaXMgbm90IGEgdmFsaWQgZmVhdHVyZSBJRCIsZXU9MzI3NjgsZzR0PXsxMTA6MSw5NDoxLDkzOjEsNTg6MSw1NDoxLDk5OjF9LEduPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbCIsc3Y9Im9yZy5lY2xpcHNlLmVsay5ncmFwaC5pbXBsIixFTD0iUmVjdXJzaXZlIGNvbnRhaW5tZW50IG5vdCBhbGxvd2VkIGZvciAiLHlUPSJUaGUgZGF0YXR5cGUgJyIsdDM9IicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIsemZlPSJUaGUgdmFsdWUgJyIsQzY9ezE5NToxLDM6MSw0OjF9LHFmZT0iVGhlIGNsYXNzICciLHhUPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2Vsay9FbGtHcmFwaCIsbFNlPSJwcm9wZXJ0eSIsVEw9InZhbHVlIixIZmU9InNvdXJjZSIscDR0PSJwcm9wZXJ0aWVzIixiNHQ9ImlkZW50aWZpZXIiLFZmZT0iaGVpZ2h0IixVZmU9IndpZHRoIixHZmU9InBhcmVudCIsS2ZlPSJ0ZXh0IixXZmU9ImNoaWxkcmVuIixtNHQ9ImhpZXJhcmNoaWNhbCIsaFNlPSJzb3VyY2VzIixZZmU9InRhcmdldHMiLGZTZT0ic2VjdGlvbnMiLCRHPSJiZW5kUG9pbnRzIixkU2U9Im91dGdvaW5nU2hhcGUiLGdTZT0iaW5jb21pbmdTaGFwZSIscFNlPSJvdXRnb2luZ1NlY3Rpb25zIixiU2U9ImluY29taW5nU2VjdGlvbnMiLFNvPSJvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwiLG1TZT0iU2V2ZXJlIGltcGxlbWVudGF0aW9uIGVycm9yIGluIHRoZSBKc29uIHRvIEVsa0dyYXBoIGltcG9ydGVyLiIsUGQ9ImlkIixubz0ib3JnLmVjbGlwc2UuZWxrLmdyYXBoLmpzb24iLHZTZT0iVW5oYW5kbGVkIHBhcmFtZXRlciB0eXBlczogIix2NHQ9InN0YXJ0UG9pbnQiLHc0dD0iQW4gZWRnZSBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIHNvdXJjZSBhbmQgb25lIHRhcmdldCAoZWRnZSBpZDogJyIsa1Q9IicpLiIseTR0PSJSZWZlcmVuY2VkIGVkZ2Ugc2VjdGlvbiBkb2VzIG5vdCBleGlzdDogIix4NHQ9IiAoZWRnZSBpZDogJyIsd1NlPSJ0YXJnZXQiLGs0dD0ic291cmNlUG9pbnQiLEU0dD0idGFyZ2V0UG9pbnQiLHpHPSJncm91cCIsX2k9Im5hbWUiLFQ0dD0iY29ubmVjdGFibGVTaGFwZSBjYW5ub3QgYmUgbnVsbCIsQzR0PSJlZGdlIGNhbm5vdCBiZSBudWxsIixYZmU9IlBhc3NlZCBlZGdlIGlzIG5vdCAnc2ltcGxlJy4iLHFHPSJvcmcuZWNsaXBzZS5lbGsuZ3JhcGgudXRpbCIsV1A9IlRoZSAnbm8gZHVwbGljYXRlcycgY29uc3RyYWludCBpcyB2aW9sYXRlZCIsUWZlPSJ0YXJnZXRJbmRleD0iLGF2PSIsIHNpemU9IixKZmU9InNvdXJjZUluZGV4PSIsQmQ9ezM6MSw0OjEsMjA6MSwzMToxLDU2OjEsMTY6MSwxNToxLDU5OjEsNzA6MSw2NjoxLDYxOjF9LFpmZT17MzoxLDQ6MSwyMDoxLDMxOjEsNTY6MSwxNjoxLDUxOjEsMTU6MSw1OToxLDcwOjEsNjY6MSw2MToxLDU5NjoxfSxIRz0ibG9nZ2luZyIsUzR0PSJtZWFzdXJlRXhlY3V0aW9uVGltZSIsXzR0PSJwYXJzZXIucGFyc2UuMSIsQTR0PSJwYXJzZXIucGFyc2UuMiIsVkc9InBhcnNlci5uZXh0LjEiLGUwZT0icGFyc2VyLm5leHQuMiIsTDR0PSJwYXJzZXIubmV4dC4zIixNNHQ9InBhcnNlci5uZXh0LjQiLG92PSJwYXJzZXIuZmFjdG9yLjEiLHlTZT0icGFyc2VyLmZhY3Rvci4yIixENHQ9InBhcnNlci5mYWN0b3IuMyIsSTR0PSJwYXJzZXIuZmFjdG9yLjQiLE80dD0icGFyc2VyLmZhY3Rvci41IixONHQ9InBhcnNlci5mYWN0b3IuNiIsUDR0PSJwYXJzZXIuYXRvbS4xIixCNHQ9InBhcnNlci5hdG9tLjIiLEY0dD0icGFyc2VyLmF0b20uMyIseFNlPSJwYXJzZXIuYXRvbS40Iix0MGU9InBhcnNlci5hdG9tLjUiLGtTZT0icGFyc2VyLmNjLjEiLFVHPSJwYXJzZXIuY2MuMiIsUjR0PSJwYXJzZXIuY2MuMyIsajR0PSJwYXJzZXIuY2MuNSIsRVNlPSJwYXJzZXIuY2MuNiIsVFNlPSJwYXJzZXIuY2MuNyIsbjBlPSJwYXJzZXIuY2MuOCIsJDR0PSJwYXJzZXIub3BlLjEiLHo0dD0icGFyc2VyLm9wZS4yIixxNHQ9InBhcnNlci5vcGUuMyIsdzI9InBhcnNlci5kZXNjYXBlLjEiLEg0dD0icGFyc2VyLmRlc2NhcGUuMiIsVjR0PSJwYXJzZXIuZGVzY2FwZS4zIixVNHQ9InBhcnNlci5kZXNjYXBlLjQiLEc0dD0icGFyc2VyLmRlc2NhcGUuNSIsYmY9InBhcnNlci5wcm9jZXNzLjEiLEs0dD0icGFyc2VyLnF1YW50aWZpZXIuMSIsVzR0PSJwYXJzZXIucXVhbnRpZmllci4yIixZNHQ9InBhcnNlci5xdWFudGlmaWVyLjMiLFg0dD0icGFyc2VyLnF1YW50aWZpZXIuNCIsQ1NlPSJwYXJzZXIucXVhbnRpZmllci41IixRNHQ9Im9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5IixTU2U9ezQyNDoxLDY4NjoxfSxKNHQ9ezM6MSw0OjEsMjA6MSwzMToxLDU2OjEsMTY6MSwxNToxLDcwOjEsNjE6MX0sWVA9ezM3ODoxLDE1MjoxfSxDTD0iaW5kZXg9IixyMGU9ezM6MSw0OjEsNToxLDEyOToxfSxaNHQ9ezM6MSw0OjEsMjA6MSwzMToxLDU2OjEsMTY6MSwxNToxLDU5OjEsNzA6MSw2MToxfSxfU2U9ezM6MSw2OjEsNDoxLDU6MSwxOTg6MX0sZTV0PXszOjEsNDoxLDU6MSwxNzM6MSwzNzk6MX0sdDV0PSI7Lz86QCY9KyQsIixuNXQ9ImludmFsaWQgYXV0aG9yaXR5OiAiLHI1dD0iRUFubm90YXRpb24iLGk1dD0iRVR5cGVkRWxlbWVudCIsczV0PSJFU3RydWN0dXJhbEZlYXR1cmUiLGE1dD0iRUF0dHJpYnV0ZSIsbzV0PSJFQ2xhc3NpZmllciIsYzV0PSJFRW51bUxpdGVyYWwiLHU1dD0iRUdlbmVyaWNUeXBlIixsNXQ9IkVPcGVyYXRpb24iLGg1dD0iRVBhcmFtZXRlciIsZjV0PSJFUmVmZXJlbmNlIixkNXQ9IkVUeXBlUGFyYW1ldGVyIix1cz0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwiLGkwZT17Nzk6MX0sQVNlPXszOjEsMjA6MSwxNjoxLDE1OjEsNjE6MSw1OTc6MSw3OToxLDcxOjEsOTc6MX0sZzV0PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5GZWF0dXJlTWFwJEVudHJ5IixTbD04MTkyLHI0PTIwNDgsU0w9ImJ5dGUiLEdHPSJjaGFyIixfTD0iZG91YmxlIixBTD0iZmxvYXQiLExMPSJpbnQiLE1MPSJsb25nIixETD0ic2hvcnQiLHA1dD0iamF2YS5sYW5nLk9iamVjdCIsUzY9ezM6MSw0OjEsNToxLDI1NDoxfSxMU2U9ezM6MSw0OjEsNToxLDY4ODoxfSxiNXQ9ezM6MSw0OjEsMjA6MSwzMToxLDU2OjEsMTY6MSwxNToxLDU5OjEsNzA6MSw2NjoxLDYxOjEsNzE6MX0sa2M9ezM6MSw0OjEsMjA6MSwzMToxLDU2OjEsMTY6MSwxNToxLDU5OjEsNzA6MSw2NjoxLDYxOjEsNzk6MSw3MToxLDk3OjF9LFhQPSJtaXhlZCIsbGk9Imh0dHA6Ly8vb3JnL2VjbGlwc2UvZW1mL2Vjb3JlL3V0aWwvRXh0ZW5kZWRNZXRhRGF0YSIsQmY9ImtpbmQiLG01dD17MzoxLDQ6MSw1OjEsNjg5OjF9LE1TZT17MzoxLDQ6MSwyMDoxLDMxOjEsNTY6MSwxNjoxLDE1OjEsNzA6MSw2MToxLDc5OjEsNzE6MSw5NzoxfSxLRz17MjA6MSwzMToxLDU2OjEsMTY6MSwxNToxLDYxOjEsNzE6MX0sV0c9ezUxOjEsMTI4OjEsMjg3OjF9LFlHPXs3NjoxLDM0MzoxfSxYRz0iVGhlIHZhbHVlIG9mIHR5cGUgJyIsUUc9IicgbXVzdCBiZSBvZiB0eXBlICciLF82PTEzNTIsRmY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiLEpHPS0zMjc2OCxuMz0iY29uc3RyYWludHMiLGhvPSJiYXNlVHlwZSIsdjV0PSJnZXRFU3RydWN0dXJhbEZlYXR1cmUiLHc1dD0iZ2V0RmVhdHVyZUlEIixJTD0iZmVhdHVyZSIseTV0PSJnZXRPcGVyYXRpb25JRCIsRFNlPSJvcGVyYXRpb24iLHg1dD0iZGVmYXVsdFZhbHVlIixrNXQ9ImVUeXBlUGFyYW1ldGVycyIsRTV0PSJpc0luc3RhbmNlIixUNXQ9ImdldEVFbnVtTGl0ZXJhbCIsQzV0PSJlQ29udGFpbmluZ0NsYXNzIix5aT17NTc6MX0sUzV0PXszOjEsNDoxLDU6MSwxMjQ6MX0sXzV0PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UiLEE1dD17OTQ6MSw5MzoxLDU5OToxLDIwMzQ6MX0sczBlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbCIsSVNlPSJ1bnNwZWNpZmllZCIsUVA9InNpbXBsZSIsWkc9ImF0dHJpYnV0ZSIsTDV0PSJhdHRyaWJ1dGVXaWxkY2FyZCIsZUs9ImVsZW1lbnQiLGEwZT0iZWxlbWVudFdpbGRjYXJkIixzMT0iY29sbGFwc2UiLG8wZT0iaXRlbVR5cGUiLHRLPSJuYW1lc3BhY2UiLEpQPSIjI3RhcmdldE5hbWVzcGFjZSIsUmY9IndoaXRlU3BhY2UiLE9TZT0id2lsZGNhcmRzIixjdj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMy9YTUxUeXBlIixjMGU9IiMjYW55IixFVD0idW5pbml0aWFsaXplZCIsWlA9IlRoZSBtdWx0aXBsaWNpdHkgY29uc3RyYWludCBpcyB2aW9sYXRlZCIsbks9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWwudHlwZSIsTTV0PSJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24iLEQ1dD0iU2ltcGxlQW55VHlwZSIsSTV0PSJYTUxUeXBlRG9jdW1lbnRSb290IixlYT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLmltcGwiLGVCPSJJTkYiLE81dD0icHJvY2Vzc2luZyIsTjV0PSJFTlRJVElFU18uX2Jhc2UiLE5TZT0ibWluTGVuZ3RoIixQU2U9IkVOVElUWSIscks9Ik5DTmFtZSIsUDV0PSJJRFJFRlNfLl9iYXNlIixCU2U9ImludGVnZXIiLHUwZT0idG9rZW4iLGwwZT0icGF0dGVybiIsQjV0PSJbYS16QS1aXXsxLDh9KC1bYS16QS1aMC05XXsxLDh9KSoiLEZTZT0iXFxpXFxjKiIsRjV0PSJbXFxpLVs6XV1bXFxjLVs6XV0qIixSNXQ9Im5vblBvc2l0aXZlSW50ZWdlciIsdEI9Im1heEluY2x1c2l2ZSIsUlNlPSJOTVRPS0VOIixqNXQ9Ik5NVE9LRU5TXy5fYmFzZSIsalNlPSJub25OZWdhdGl2ZUludGVnZXIiLG5CPSJtaW5JbmNsdXNpdmUiLCQ1dD0ibm9ybWFsaXplZFN0cmluZyIsejV0PSJ1bnNpZ25lZEJ5dGUiLHE1dD0idW5zaWduZWRJbnQiLEg1dD0iMTg0NDY3NDQwNzM3MDk1NTE2MTUiLFY1dD0idW5zaWduZWRTaG9ydCIsVTV0PSJwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24iLHkyPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuaW50ZXJuYWwiLFRUPTExMTQxMTEsRzV0PSJJbnRlcm5hbCBFcnJvcjogc2hvcnRoYW5kczogXFx1IixPTD0ieG1sOmlzRGlnaXQiLGgwZT0ieG1sOmlzV29yZCIsZjBlPSJ4bWw6aXNTcGFjZSIsZDBlPSJ4bWw6aXNOYW1lQ2hhciIsZzBlPSJ4bWw6aXNJbml0aWFsTmFtZUNoYXIiLEs1dD0iMDnZoNmp27DbueClpuClr+CnpuCnr+CppuCpr+CrpuCrr+CtpuCtr+Cvp+Cvr+CxpuCxr+CzpuCzr+C1puC1r+C5kOC5meC7kOC7meC8oOC8qSIsVzV0PSJBWmF6w4DDlsOYw7bDuMSxxLTEvsWBxYjFisW+xoDHg8eNx7DHtMe1x7rIl8mQyqjKu8uBzobOhs6IzorOjM6Mzo7Ooc6jz47PkM+Wz5rPms+cz5zPns+ez6DPoM+iz7PQgdCM0I7Rj9GR0ZzRntKB0pDThNOH04jTi9OM05DTq9Ou07XTuNO51LHVltWZ1ZnVodaG15DXqtew17LYodi62YHZitmx2rfautq+24DbjtuQ25PblduV26XbpuCkheCkueCkveCkveClmOCloeCmheCmjOCmj+CmkOCmk+CmqOCmquCmsOCmsuCmsuCmtuCmueCnnOCnneCnn+CnoeCnsOCnseCoheCoiuCoj+CokOCok+CoqOCoquCosOCosuCos+CoteCotuCouOCoueCpmeCpnOCpnuCpnuCpsuCptOCqheCqi+CqjeCqjeCqj+CqkeCqk+CqqOCqquCqsOCqsuCqs+CqteCqueCqveCqveCroOCroOCsheCsjOCsj+CskOCsk+CsqOCsquCssOCssuCss+CstuCsueCsveCsveCtnOCtneCtn+CtoeCuheCuiuCujuCukOCukuCuleCumeCumuCunOCunOCunuCun+Cuo+CupOCuqOCuquCuruCuteCut+CuueCwheCwjOCwjuCwkOCwkuCwqOCwquCws+CwteCwueCxoOCxoeCyheCyjOCyjuCykOCykuCyqOCyquCys+CyteCyueCznuCznuCzoOCzoeC0heC0jOC0juC0kOC0kuC0qOC0quC0ueC1oOC1oeC4geC4ruC4sOC4sOC4suC4s+C5gOC5heC6geC6guC6hOC6hOC6h+C6iOC6iuC6iuC6jeC6jeC6lOC6l+C6meC6n+C6oeC6o+C6peC6peC6p+C6p+C6quC6q+C6reC6ruC6sOC6sOC6suC6s+C6veC6veC7gOC7hOC9gOC9h+C9ieC9qeGCoOGDheGDkOGDtuGEgOGEgOGEguGEg+GEheGEh+GEieGEieGEi+GEjOGEjuGEkuGEvOGEvOGEvuGEvuGFgOGFgOGFjOGFjOGFjuGFjuGFkOGFkOGFlOGFleGFmeGFmeGFn+GFoeGFo+GFo+GFpeGFpeGFp+GFp+GFqeGFqeGFreGFruGFsuGFs+GFteGFteGGnuGGnuGGqOGGqOGGq+GGq+GGruGGr+GGt+GGuOGGuuGGuuGGvOGHguGHq+GHq+GHsOGHsOGHueGHueG4gOG6m+G6oOG7ueG8gOG8leG8mOG8neG8oOG9heG9iOG9jeG9kOG9l+G9meG9meG9m+G9m+G9neG9neG9n+G9veG+gOG+tOG+tuG+vOG+vuG+vuG/guG/hOG/huG/jOG/kOG/k+G/luG/m+G/oOG/rOG/suG/tOG/tuG/vOKEpuKEpuKEquKEq+KEruKEruKGgOKGguOAh+OAh+OAoeOAqeOBgeOClOOCoeODuuOEheOErOS4gOm+peqwgO2eoyIsWTV0PSJQcml2YXRlIFVzZSIscDBlPSJBU1NJR05FRCIsYjBlPSJcMH/CgMO/xIDFv8aAyY/JkMqvyrDLv8yAza/NsM+/0IDTv9Sw1o/WkNe/2IDbv9yA3Y/egN6/4KSA4KW/4KaA4Ke/4KiA4Km/4KqA4Ku/4KyA4K2/4K6A4K+/4LCA4LG/4LKA4LO/4LSA4LW/4LaA4Le/4LiA4Lm/4LqA4Lu/4LyA4L+/4YCA4YKf4YKg4YO/4YSA4Ye/4YiA4Y2/4Y6g4Y+/4ZCA4Zm/4ZqA4Zqf4Zqg4Zu/4Z6A4Z+/4aCA4aKv4biA4bu/4byA4b+/4oCA4oGv4oGw4oKf4oKg4oOP4oOQ4oO/4oSA4oWP4oWQ4oaP4oaQ4oe/4oiA4ou/4oyA4o+/4pCA4pC/4pGA4pGf4pGg4pO/4pSA4pW/4paA4paf4pag4pe/4piA4pu/4pyA4p6/4qCA4qO/4rqA4ru/4ryA4r+f4r+w4r+/44CA44C/44GA44Kf44Kg44O/44SA44Sv44Sw44aP44aQ44af44ag44a/44iA44u/44yA44+/45CA5La15LiA6b+/6oCA6pKP6pKQ6pOP6rCA7Z6j7oCA76O/76SA76u/76yA762P762Q77e/77ig77iv77iw77mP77mQ77mv77mw77u+XHVGRUZGXHVGRUZG77yA77+vIiwkU2U9IlVOQVNTSUdORUQiLENUPXszOjEsMTIyOjF9LFg1dD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLnV0aWwiLGlLPXszOjEsNDoxLDU6MSwzODE6MX0selNlPSJvcmcuZWNsaXBzZS54dGV4dC54YmFzZS5saWIiLFE1dD0iQ2Fubm90IGFkZCBlbGVtZW50cyB0byBhIFJhbmdlIixKNXQ9IkNhbm5vdCBzZXQgZWxlbWVudHMgaW4gYSBSYW5nZSIsWjV0PSJDYW5ub3QgcmVtb3ZlIGVsZW1lbnRzIGZyb20gYSBSYW5nZSIsZTZ0PSJ1c2VyLmFnZW50IixoLHNLLG0wZTtiLmdvb2c9Yi5nb29nfHx7fSxiLmdvb2cuZ2xvYmFsPWIuZ29vZy5nbG9iYWx8fGIsc0s9e30sRCgxLG51bGwse30sVCksaC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gSnR0KHRoaXMsdCl9LGguR2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5SbX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBmdyh0aGlzKX0saC5JYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiBfbShiaCh0aGlzKSkrIkAiKyh0PWVzKHRoaXMpPj4+MCx0LnRvU3RyaW5nKDE2KSl9LGguZXF1YWxzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLkZiKGUpfSxoLmhhc2hDb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSGIoKX0saC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkliKCl9O3ZhciB0NnQsbjZ0LHI2dDtEKDI5NywxLHsyOTc6MSwyMTI0OjF9LEI3ZSksaC52ZT1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbj1uZXcgQjdlLG4uaT00LHQ+MT9uLmM9eW90KHRoaXMsdC0xKTpuLmM9dGhpcyxufSxoLndlPWZ1bmN0aW9uKCl7cmV0dXJuIEdnKHRoaXMpLHRoaXMuYn0saC54ZT1mdW5jdGlvbigpe3JldHVybiBfbSh0aGlzKX0saC55ZT1mdW5jdGlvbigpe3JldHVybiBHZyh0aGlzKSx0aGlzLmt9LGguemU9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5pJjQpIT0wfSxoLkFlPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuaSYxKSE9MH0saC5JYj1mdW5jdGlvbigpe3JldHVybiBLNmUodGhpcyl9LGguaT0wO3ZhciB3YT1JKFZjLCJPYmplY3QiLDEpLHFTZT1JKFZjLCJDbGFzcyIsMjk3KTtEKDIwOTYsMSx5UCksSSh4UCwiT3B0aW9uYWwiLDIwOTYpLEQoMTE5MSwyMDk2LHlQLF8pLGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT10aGlzfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIDIwNDA3MzIzMzJ9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4iT3B0aW9uYWwuYWJzZW50KCkifSxoLkpiPWZ1bmN0aW9uKHQpe3JldHVybiBYcih0KSxvXygpLHYwZX07dmFyIHYwZTtJKHhQLCJBYnNlbnQiLDExOTEpLEQoNjM2LDEse30sWmllKSxJKHhQLCJKb2luZXIiLDYzNik7dmFyIG9Pbj1rcyh4UCwiUHJlZGljYXRlIik7RCg1ODksMSx7MTc4OjEsNTg5OjEsMzoxLDQ2OjF9LGd6KSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiB5MHQodGhpcyx0KX0saC5MYj1mdW5jdGlvbih0KXtyZXR1cm4geTB0KHRoaXMsdCl9LGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIERlKHQsNTg5KT8obj1sKHQsNTg5KSxPOWUodGhpcy5hLG4uYSkpOiExfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHE3ZSh0aGlzLmEpKzMwNjY1NDI1Mn0saC5JYj1mdW5jdGlvbigpe3JldHVybiBLOW4odGhpcy5hKX0sSSh4UCwiUHJlZGljYXRlcy9BbmRQcmVkaWNhdGUiLDU4OSksRCg0MTksMjA5Nix7NDE5OjEsMzoxfSxKUyksaC5GYj1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gRGUodCw0MTkpPyhuPWwodCw0MTkpLFBpKHRoaXMuYSxuLmEpKTohMX0saC5IYj1mdW5jdGlvbigpe3JldHVybiAxNTAyNDc2NTcyK2VzKHRoaXMuYSl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gQXd0K3RoaXMuYSsiKSJ9LGguSmI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBKUyhfSCh0LktiKHRoaXMuYSksInRoZSBGdW5jdGlvbiBwYXNzZWQgdG8gT3B0aW9uYWwudHJhbnNmb3JtKCkgbXVzdCBub3QgcmV0dXJuIG51bGwuIikpfSxJKHhQLCJQcmVzZW50Iiw0MTkpLEQoMjA0LDEsZVQpLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5RYj1mdW5jdGlvbigpe2pKZSgpfSxJKGRuLCJVbm1vZGlmaWFibGVJdGVyYXRvciIsMjA0KSxEKDIwNzYsMjA0LHRUKSxoLlFiPWZ1bmN0aW9uKCl7akplKCl9LGguUmI9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0saC5XYj1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxJKGRuLCJVbm1vZGlmaWFibGVMaXN0SXRlcmF0b3IiLDIwNzYpLEQoMzk5LDIwNzYsdFQpLGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jPHRoaXMuZH0saC5TYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmM+MH0saC5QYj1mdW5jdGlvbigpe2lmKHRoaXMuYz49dGhpcy5kKXRocm93IHVlKG5ldyBfYyk7cmV0dXJuIHRoaXMuWGIodGhpcy5jKyspfSxoLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30saC5VYj1mdW5jdGlvbigpe2lmKHRoaXMuYzw9MCl0aHJvdyB1ZShuZXcgX2MpO3JldHVybiB0aGlzLlhiKC0tdGhpcy5jKX0saC5WYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMtMX0saC5jPTAsaC5kPTAsSShkbiwiQWJzdHJhY3RJbmRleGVkTGlzdEl0ZXJhdG9yIiwzOTkpLEQoNzEzLDIwNCxlVCksaC5PYj1mdW5jdGlvbigpe3JldHVybiB0Y2UodGhpcyl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gejZlKHRoaXMpfSxoLmU9MSxJKGRuLCJBYnN0cmFjdEl0ZXJhdG9yIiw3MTMpLEQoMjA4NCwxLHsyMjk6MX0pLGguWmI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmYsdHx8KHRoaXMuZj10aGlzLmFjKCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiBFY2UodGhpcyx0KX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBlcyh0aGlzLlpiKCkpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2MoKT09MH0saC5lYz1mdW5jdGlvbigpe3JldHVybiBXOCh0aGlzKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiB4Yyh0aGlzLlpiKCkpfSxJKGRuLCJBYnN0cmFjdE11bHRpbWFwIiwyMDg0KSxEKDc0MiwyMDg0LEptKSxoLiRiPWZ1bmN0aW9uKCl7bVYodGhpcyl9LGguX2I9ZnVuY3Rpb24odCl7cmV0dXJuIGlaZSh0aGlzLHQpfSxoLmFjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBMayh0aGlzLHRoaXMuYyl9LGguaWM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaGMoKX0saC5iYz1mdW5jdGlvbigpe3JldHVybiBuZXcgcTUodGhpcyx0aGlzLmMpfSxoLmpjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWModGhpcy5oYygpKX0saC5rYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRUplKHRoaXMpfSxoLmxjPWZ1bmN0aW9uKCl7cmV0dXJuIEl1ZSh0aGlzLmMudmMoKS5OYygpLG5ldyBQLDY0LHRoaXMuZCl9LGguY2M9ZnVuY3Rpb24odCl7cmV0dXJuICRpKHRoaXMsdCl9LGguZmM9ZnVuY3Rpb24odCl7cmV0dXJuIEROKHRoaXMsdCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxoLm1jPWZ1bmN0aW9uKHQpe3JldHVybiBDbigpLG5ldyAkYSh0KX0saC5uYz1mdW5jdGlvbigpe3JldHVybiBuZXcga0plKHRoaXMpfSxoLm9jPWZ1bmN0aW9uKCl7cmV0dXJuIEl1ZSh0aGlzLmMuQ2MoKS5OYygpLG5ldyBBLDY0LHRoaXMuZCl9LGgucGM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbmV3IFlIKHRoaXMsdCxuLG51bGwpfSxoLmQ9MCxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAiLDc0MiksRCgxNjk2LDc0MixKbSksaC5oYz1mdW5jdGlvbigpe3JldHVybiBuZXcgQnUodGhpcy5hKX0saC5qYz1mdW5jdGlvbigpe3JldHVybiBDbigpLENuKCksX299LGguY2M9ZnVuY3Rpb24odCl7cmV0dXJuIGwoJGkodGhpcyx0KSwxNSl9LGguZmM9ZnVuY3Rpb24odCl7cmV0dXJuIGwoRE4odGhpcyx0KSwxNSl9LGguWmI9ZnVuY3Rpb24oKXtyZXR1cm4gZXgodGhpcyl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIEVjZSh0aGlzLHQpfSxoLnFjPWZ1bmN0aW9uKHQpe3JldHVybiBsKCRpKHRoaXMsdCksMTUpfSxoLnJjPWZ1bmN0aW9uKHQpe3JldHVybiBsKEROKHRoaXMsdCksMTUpfSxoLm1jPWZ1bmN0aW9uKHQpe3JldHVybiBpb2UobCh0LDE1KSl9LGgucGM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gX2N0KHRoaXMsdCxsKG4sMTUpLG51bGwpfSxJKGRuLCJBYnN0cmFjdExpc3RNdWx0aW1hcCIsMTY5NiksRCg3NDgsMSxPYSksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5PYigpfHx0aGlzLmUuT2IoKX0saC5QYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLmUuT2IoKXx8KHQ9bCh0aGlzLmMuUGIoKSw0NCksdGhpcy5iPXQubGQoKSx0aGlzLmE9bCh0Lm1kKCksMTYpLHRoaXMuZT10aGlzLmEuS2MoKSksdGhpcy5zYyh0aGlzLmIsdGhpcy5lLlBiKCkpfSxoLlFiPWZ1bmN0aW9uKCl7dGhpcy5lLlFiKCksbChMZih0aGlzLmEpLDE2KS5kYygpJiZ0aGlzLmMuUWIoKSwtLXRoaXMuZC5kfSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvSXRyIiw3NDgpLEQoMTEyOSw3NDgsT2Esa0plKSxoLnNjPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG59LEkoZG4sIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC8xIiwxMTI5KSxEKDExMzAsMSx7fSxBKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMTYpLk5jKCl9LEkoZG4sIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC8xbWV0aG9kcmVmJHNwbGl0ZXJhdG9yJFR5cGUiLDExMzApLEQoMTEzMSw3NDgsT2EsRUplKSxoLnNjPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG5ldyBpdyh0LG4pfSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvMiIsMTEzMSk7dmFyIEhTZT1rcyhMciwiTWFwIik7RCgyMDY1LDEsV3cpLGgud2M9ZnVuY3Rpb24odCl7bUEodGhpcyx0KX0saC55Yz1mdW5jdGlvbih0LG4scil7cmV0dXJuIHFjZSh0aGlzLHQsbixyKX0saC4kYj1mdW5jdGlvbigpe3RoaXMudmMoKS4kYigpfSxoLnRjPWZ1bmN0aW9uKHQpe3JldHVybiBndWUodGhpcyx0KX0saC5fYj1mdW5jdGlvbih0KXtyZXR1cm4hIUR4ZSh0aGlzLHQsITEpfSxoLnVjPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYTtmb3Iocj10aGlzLnZjKCkuS2MoKTtyLk9iKCk7KWlmKG49bChyLlBiKCksNDQpLGE9bi5tZCgpLHFlKHQpPT09cWUoYSl8fHQhPW51bGwmJlBpKHQsYSkpcmV0dXJuITA7cmV0dXJuITF9LGguRmI9ZnVuY3Rpb24odCl7dmFyIG4scixhO2lmKHQ9PT10aGlzKXJldHVybiEwO2lmKCFEZSh0LDg1KXx8KGE9bCh0LDg1KSx0aGlzLmdjKCkhPWEuZ2MoKSkpcmV0dXJuITE7Zm9yKHI9YS52YygpLktjKCk7ci5PYigpOylpZihuPWwoci5QYigpLDQ0KSwhdGhpcy50YyhuKSlyZXR1cm4hMTtyZXR1cm4hMH0saC54Yz1mdW5jdGlvbih0KXtyZXR1cm4gaGMoRHhlKHRoaXMsdCwhMSkpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEk3ZSh0aGlzLnZjKCkpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2MoKT09MH0saC5lYz1mdW5jdGlvbigpe3JldHVybiBuZXcgYnIodGhpcyl9LGguemM9ZnVuY3Rpb24odCxuKXt0aHJvdyB1ZShuZXcgSHAoIlB1dCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgbWFwIikpfSxoLkFjPWZ1bmN0aW9uKHQpe2JBKHRoaXMsdCl9LGguQmM9ZnVuY3Rpb24odCl7cmV0dXJuIGhjKER4ZSh0aGlzLHQsITApKX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZjKCkuZ2MoKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBJZ3QodGhpcyl9LGguQ2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGdpKHRoaXMpfSxJKExyLCJBYnN0cmFjdE1hcCIsMjA2NSksRCgyMDg1LDIwNjUsV3cpLGguYmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFl6KHRoaXMpfSxoLnZjPWZ1bmN0aW9uKCl7cmV0dXJuIEVzdCh0aGlzKX0saC5lYz1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PXRoaXMuZyx0fHwodGhpcy5nPXRoaXMuYmMoKSl9LGguQ2M9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmksdHx8KHRoaXMuaT1uZXcgV1plKHRoaXMpKX0sSShkbiwiTWFwcy9WaWV3Q2FjaGluZ0Fic3RyYWN0TWFwIiwyMDg1KSxEKDQwMiwyMDg1LFd3LExrKSxoLnhjPWZ1bmN0aW9uKHQpe3JldHVybiBmd24odGhpcyx0KX0saC5CYz1mdW5jdGlvbih0KXtyZXR1cm4gUHluKHRoaXMsdCl9LGguJGI9ZnVuY3Rpb24oKXt0aGlzLmQ9PXRoaXMuZS5jP3RoaXMuZS4kYigpOmlIKG5ldyBWNGUodGhpcykpfSxoLl9iPWZ1bmN0aW9uKHQpe3JldHVybiBpMXQodGhpcy5kLHQpfSxoLkVjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBweih0aGlzKX0saC5EYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkVjKCl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fHxQaSh0aGlzLmQsdCl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gZXModGhpcy5kKX0saC5lYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmUuZWMoKX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmQuZ2MoKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiB4Yyh0aGlzLmQpfSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvQXNNYXAiLDQwMik7dmFyIEZoPWtzKFZjLCJJdGVyYWJsZSIpO0QoMzEsMSxXeSksaC5KYz1mdW5jdGlvbih0KXt0byh0aGlzLHQpfSxoLkxjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuT2MoKX0saC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcga24odGhpcywwKX0saC5PYz1mdW5jdGlvbigpe3JldHVybiBuZXcgYm4obnVsbCx0aGlzLk5jKCkpfSxoLkZjPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBIcCgiQWRkIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBjb2xsZWN0aW9uIikpfSxoLkdjPWZ1bmN0aW9uKHQpe3JldHVybiBLYSh0aGlzLHQpfSxoLiRiPWZ1bmN0aW9uKCl7TTVlKHRoaXMpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBOeSh0aGlzLHQsITEpfSxoLkljPWZ1bmN0aW9uKHQpe3JldHVybiBFTih0aGlzLHQpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2MoKT09MH0saC5NYz1mdW5jdGlvbih0KXtyZXR1cm4gTnkodGhpcyx0LCEwKX0saC5QYz1mdW5jdGlvbigpe3JldHVybiBlNWUodGhpcyl9LGguUWM9ZnVuY3Rpb24odCl7cmV0dXJuIFBBKHRoaXMsdCl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gVGIodGhpcyl9LEkoTHIsIkFic3RyYWN0Q29sbGVjdGlvbiIsMzEpO3ZhciBqZj1rcyhMciwiU2V0Iik7RChxMSwzMSxUbCksaC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcga24odGhpcywxKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gWTF0KHRoaXMsdCl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gSTdlKHRoaXMpfSxJKExyLCJBYnN0cmFjdFNldCIscTEpLEQoMjA2OCxxMSxUbCksSShkbiwiU2V0cy9JbXByb3ZlZEFic3RyYWN0U2V0IiwyMDY4KSxEKDIwNjksMjA2OCxUbCksaC4kYj1mdW5jdGlvbigpe3RoaXMuUmMoKS4kYigpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBPMXQodGhpcyx0KX0saC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJjKCkuZGMoKX0saC5NYz1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gdGhpcy5IYyh0KSYmRGUodCw0NCk/KG49bCh0LDQ0KSx0aGlzLlJjKCkuZWMoKS5NYyhuLmxkKCkpKTohMX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJjKCkuZ2MoKX0sSShkbiwiTWFwcy9FbnRyeVNldCIsMjA2OSksRCgxMTI3LDIwNjksVGwscHopLGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIHM4ZSh0aGlzLmEuZC52YygpLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWNGUodGhpcy5hKX0saC5SYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguTWM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIHM4ZSh0aGlzLmEuZC52YygpLHQpPyhuPWwoTGYobCh0LDQ0KSksNDQpLGV2bih0aGlzLmEuZSxuLmxkKCkpLCEwKTohMX0saC5OYz1mdW5jdGlvbigpe3JldHVybiBOTyh0aGlzLmEuZC52YygpLk5jKCksbmV3IGJ6KHRoaXMuYSkpfSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvQXNNYXAvQXNNYXBFbnRyaWVzIiwxMTI3KSxEKDExMjgsMSx7fSxieiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gQ3V0KHRoaXMuYSxsKHQsNDQpKX0sSShkbiwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL0FzTWFwL0FzTWFwRW50cmllcy8wbWV0aG9kcmVmJHdyYXBFbnRyeSRUeXBlIiwxMTI4KSxEKDc0NiwxLE9hLFY0ZSksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLlBiPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9bCh0aGlzLmIuUGIoKSw0NCksdGhpcy5hPWwodC5tZCgpLDE2KSxDdXQodGhpcy5jLHQpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5PYigpfSxoLlFiPWZ1bmN0aW9uKCl7UmsoISF0aGlzLmEpLHRoaXMuYi5RYigpLHRoaXMuYy5lLmQtPXRoaXMuYS5nYygpLHRoaXMuYS4kYigpLHRoaXMuYT1udWxsfSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvQXNNYXAvQXNNYXBJdGVyYXRvciIsNzQ2KSxEKDU0MiwyMDY4LFRsLFl6KSxoLiRiPWZ1bmN0aW9uKCl7dGhpcy5iLiRiKCl9LGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYi5fYih0KX0saC5KYz1mdW5jdGlvbih0KXtYcih0KSx0aGlzLmIud2MobmV3IHh6KHQpKX0saC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuZGMoKX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgY18odGhpcy5iLnZjKCkuS2MoKSl9LGguTWM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYi5fYih0KT8odGhpcy5iLkJjKHQpLCEwKTohMX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuZ2MoKX0sSShkbiwiTWFwcy9LZXlTZXQiLDU0MiksRCgzMjcsNTQyLFRsLHE1KSxoLiRiPWZ1bmN0aW9uKCl7dmFyIHQ7aUgoKHQ9dGhpcy5iLnZjKCkuS2MoKSxuZXcgZzNlKHRoaXMsdCkpKX0saC5JYz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5iLmVjKCkuSWModCl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fHxQaSh0aGlzLmIuZWMoKSx0KX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBlcyh0aGlzLmIuZWMoKSl9LGguS2M9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmIudmMoKS5LYygpLG5ldyBnM2UodGhpcyx0KX0saC5NYz1mdW5jdGlvbih0KXt2YXIgbixyO3JldHVybiByPTAsbj1sKHRoaXMuYi5CYyh0KSwxNiksbiYmKHI9bi5nYygpLG4uJGIoKSx0aGlzLmEuZC09cikscj4wfSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5lYygpLk5jKCl9LEkoZG4sIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9LZXlTZXQiLDMyNyksRCg3NDcsMSxPYSxnM2UpLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuT2IoKX0saC5QYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE9bCh0aGlzLmMuUGIoKSw0NCksdGhpcy5hLmxkKCl9LGguUWI9ZnVuY3Rpb24oKXt2YXIgdDtSayghIXRoaXMuYSksdD1sKHRoaXMuYS5tZCgpLDE2KSx0aGlzLmMuUWIoKSx0aGlzLmIuYS5kLT10LmdjKCksdC4kYigpLHRoaXMuYT1udWxsfSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvS2V5U2V0LzEiLDc0NyksRCg1MDMsNDAyLHs4NToxLDEzMzoxfSxfTyksaC5iYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlNjKCl9LGguZWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5VYygpfSxoLlNjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0Tyh0aGlzLmMsdGhpcy5XYygpKX0saC5UYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLldjKCkuVGMoKX0saC5VYz1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PXRoaXMuYix0fHwodGhpcy5iPXRoaXMuU2MoKSl9LGguVmM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5XYygpLlZjKCl9LGguV2M9ZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzLmQsMTMzKX0sSShkbiwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1NvcnRlZEFzTWFwIiw1MDMpLEQoNDQ2LDUwMyxaa2UscV8pLGguYmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEFrKHRoaXMuYSxsKGwodGhpcy5kLDEzMyksMTM5KSl9LGguU2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEFrKHRoaXMuYSxsKGwodGhpcy5kLDEzMyksMTM5KSl9LGguZWM9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmIsbCh0fHwodGhpcy5iPW5ldyBBayh0aGlzLmEsbChsKHRoaXMuZCwxMzMpLDEzOSkpKSwyNzcpfSxoLlVjPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9dGhpcy5iLGwodHx8KHRoaXMuYj1uZXcgQWsodGhpcy5hLGwobCh0aGlzLmQsMTMzKSwxMzkpKSksMjc3KX0saC5XYz1mdW5jdGlvbigpe3JldHVybiBsKGwodGhpcy5kLDEzMyksMTM5KX0saC5YYz1mdW5jdGlvbih0KXtyZXR1cm4gbChsKHRoaXMuZCwxMzMpLDEzOSkuWGModCl9LGguWWM9ZnVuY3Rpb24odCl7cmV0dXJuIGwobCh0aGlzLmQsMTMzKSwxMzkpLlljKHQpfSxoLlpjPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG5ldyBxXyh0aGlzLmEsbChsKHRoaXMuZCwxMzMpLDEzOSkuWmModCxuKSl9LGguJGM9ZnVuY3Rpb24odCl7cmV0dXJuIGwobCh0aGlzLmQsMTMzKSwxMzkpLiRjKHQpfSxoLl9jPWZ1bmN0aW9uKHQpe3JldHVybiBsKGwodGhpcy5kLDEzMyksMTM5KS5fYyh0KX0saC5hZD1mdW5jdGlvbih0LG4pe3JldHVybiBuZXcgcV8odGhpcy5hLGwobCh0aGlzLmQsMTMzKSwxMzkpLmFkKHQsbikpfSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvTmF2aWdhYmxlQXNNYXAiLDQ0NiksRCg1MDIsMzI3LEx3dCx0TyksaC5OYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuZWMoKS5OYygpfSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvU29ydGVkS2V5U2V0Iiw1MDIpLEQoNDAxLDUwMixlRWUsQWspLEkoZG4sIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9OYXZpZ2FibGVLZXlTZXQiLDQwMSksRCg1NTEsMzEsV3ksWUgpLGguRmM9ZnVuY3Rpb24odCl7dmFyIG4scjtyZXR1cm4gUWwodGhpcykscj10aGlzLmQuZGMoKSxuPXRoaXMuZC5GYyh0KSxuJiYoKyt0aGlzLmYuZCxyJiZETyh0aGlzKSksbn0saC5HYz1mdW5jdGlvbih0KXt2YXIgbixyLGE7cmV0dXJuIHQuZGMoKT8hMTooYT0oUWwodGhpcyksdGhpcy5kLmdjKCkpLG49dGhpcy5kLkdjKHQpLG4mJihyPXRoaXMuZC5nYygpLHRoaXMuZi5kKz1yLWEsYT09MCYmRE8odGhpcykpLG4pfSxoLiRiPWZ1bmN0aW9uKCl7dmFyIHQ7dD0oUWwodGhpcyksdGhpcy5kLmdjKCkpLHQhPTAmJih0aGlzLmQuJGIoKSx0aGlzLmYuZC09dCxsSCh0aGlzKSl9LGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIFFsKHRoaXMpLHRoaXMuZC5IYyh0KX0saC5JYz1mdW5jdGlvbih0KXtyZXR1cm4gUWwodGhpcyksdGhpcy5kLkljKHQpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09dGhpcz8hMDooUWwodGhpcyksUGkodGhpcy5kLHQpKX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBRbCh0aGlzKSxlcyh0aGlzLmQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIFFsKHRoaXMpLG5ldyBfNGUodGhpcyl9LGguTWM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIFFsKHRoaXMpLG49dGhpcy5kLk1jKHQpLG4mJigtLXRoaXMuZi5kLGxIKHRoaXMpKSxufSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIFJ0dCh0aGlzKX0saC5OYz1mdW5jdGlvbigpe3JldHVybiBRbCh0aGlzKSx0aGlzLmQuTmMoKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBRbCh0aGlzKSx4Yyh0aGlzLmQpfSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvV3JhcHBlZENvbGxlY3Rpb24iLDU1MSk7dmFyIG1mPWtzKExyLCJMaXN0Iik7RCg3NDQsNTUxLHsyMDoxLDMxOjEsMTY6MSwxNToxfSxyNWUpLGguamQ9ZnVuY3Rpb24odCl7JG0odGhpcyx0KX0saC5OYz1mdW5jdGlvbigpe3JldHVybiBRbCh0aGlzKSx0aGlzLmQuTmMoKX0saC5iZD1mdW5jdGlvbih0LG4pe3ZhciByO1FsKHRoaXMpLHI9dGhpcy5kLmRjKCksbCh0aGlzLmQsMTUpLmJkKHQsbiksKyt0aGlzLmEuZCxyJiZETyh0aGlzKX0saC5jZD1mdW5jdGlvbih0LG4pe3ZhciByLGEsbztyZXR1cm4gbi5kYygpPyExOihvPShRbCh0aGlzKSx0aGlzLmQuZ2MoKSkscj1sKHRoaXMuZCwxNSkuY2QodCxuKSxyJiYoYT10aGlzLmQuZ2MoKSx0aGlzLmEuZCs9YS1vLG89PTAmJkRPKHRoaXMpKSxyKX0saC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gUWwodGhpcyksbCh0aGlzLmQsMTUpLlhiKHQpfSxoLmRkPWZ1bmN0aW9uKHQpe3JldHVybiBRbCh0aGlzKSxsKHRoaXMuZCwxNSkuZGQodCl9LGguZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gUWwodGhpcyksbmV3IGdudCh0aGlzKX0saC5mZD1mdW5jdGlvbih0KXtyZXR1cm4gUWwodGhpcyksbmV3IEZhdCh0aGlzLHQpfSxoLmdkPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBRbCh0aGlzKSxuPWwodGhpcy5kLDE1KS5nZCh0KSwtLXRoaXMuYS5kLGxIKHRoaXMpLG59LGguaGQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gUWwodGhpcyksbCh0aGlzLmQsMTUpLmhkKHQsbil9LGgua2Q9ZnVuY3Rpb24odCxuKXtyZXR1cm4gUWwodGhpcyksX2N0KHRoaXMuYSx0aGlzLmUsbCh0aGlzLmQsMTUpLmtkKHQsbiksdGhpcy5iP3RoaXMuYjp0aGlzKX0sSShkbiwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1dyYXBwZWRMaXN0Iiw3NDQpLEQoMTEyNiw3NDQsezIwOjEsMzE6MSwxNjoxLDE1OjEsNTk6MX0scnJ0KSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvUmFuZG9tQWNjZXNzV3JhcHBlZExpc3QiLDExMjYpLEQoNjI4LDEsT2EsXzRlKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4gWWsodGhpcyksdGhpcy5iLk9iKCl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gWWsodGhpcyksdGhpcy5iLlBiKCl9LGguUWI9ZnVuY3Rpb24oKXt6bnQodGhpcyl9LEkoZG4sIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9XcmFwcGVkQ29sbGVjdGlvbi9XcmFwcGVkSXRlcmF0b3IiLDYyOCksRCg3NDUsNjI4LGxnLGdudCxGYXQpLGguUWI9ZnVuY3Rpb24oKXt6bnQodGhpcyl9LGguUmI9ZnVuY3Rpb24odCl7dmFyIG47bj1SdHQodGhpcy5hKT09MCwoWWsodGhpcyksbCh0aGlzLmIsMTI4KSkuUmIodCksKyt0aGlzLmEuYS5kLG4mJkRPKHRoaXMuYSl9LGguU2I9ZnVuY3Rpb24oKXtyZXR1cm4oWWsodGhpcyksbCh0aGlzLmIsMTI4KSkuU2IoKX0saC5UYj1mdW5jdGlvbigpe3JldHVybihZayh0aGlzKSxsKHRoaXMuYiwxMjgpKS5UYigpfSxoLlViPWZ1bmN0aW9uKCl7cmV0dXJuKFlrKHRoaXMpLGwodGhpcy5iLDEyOCkpLlViKCl9LGguVmI9ZnVuY3Rpb24oKXtyZXR1cm4oWWsodGhpcyksbCh0aGlzLmIsMTI4KSkuVmIoKX0saC5XYj1mdW5jdGlvbih0KXsoWWsodGhpcyksbCh0aGlzLmIsMTI4KSkuV2IodCl9LEkoZG4sIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9XcmFwcGVkTGlzdC9XcmFwcGVkTGlzdEl0ZXJhdG9yIiw3NDUpLEQoNzQzLDU1MSxMd3QsR3llKSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIFFsKHRoaXMpLHRoaXMuZC5OYygpfSxJKGRuLCJBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvV3JhcHBlZFNvcnRlZFNldCIsNzQzKSxEKDExMjUsNzQzLGVFZSx1bnQpLEkoZG4sIkFic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9XcmFwcGVkTmF2aWdhYmxlU2V0IiwxMTI1KSxEKDExMjQsNTUxLFRsLFRydCksaC5OYz1mdW5jdGlvbigpe3JldHVybiBRbCh0aGlzKSx0aGlzLmQuTmMoKX0sSShkbiwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1dyYXBwZWRTZXQiLDExMjQpLEQoMTEzMywxLHt9LFApLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIGx2bihsKHQsNDQpKX0sSShkbiwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL2xhbWJkYSQxJFR5cGUiLDExMzMpLEQoMTEzMiwxLHt9LGJpZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGl3KHRoaXMuYSx0KX0sSShkbiwiQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL2xhbWJkYSQyJFR5cGUiLDExMzIpO3ZhciB1dj1rcyhMciwiTWFwL0VudHJ5Iik7RCgzNTgsMSxObGUpLGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIERlKHQsNDQpPyhuPWwodCw0NCkseWQodGhpcy5sZCgpLG4ubGQoKSkmJnlkKHRoaXMubWQoKSxuLm1kKCkpKTohMX0saC5IYj1mdW5jdGlvbigpe3ZhciB0LG47cmV0dXJuIHQ9dGhpcy5sZCgpLG49dGhpcy5tZCgpLCh0PT1udWxsPzA6ZXModCkpXihuPT1udWxsPzA6ZXMobikpfSxoLm5kPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZCgpKyI9Iit0aGlzLm1kKCl9LEkoZG4sTXd0LDM1OCksRCgyMDg2LDMxLFd5KSxoLiRiPWZ1bmN0aW9uKCl7dGhpcy5vZCgpLiRiKCl9LGguSGM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIERlKHQsNDQpPyhuPWwodCw0NCksRGJuKHRoaXMub2QoKSxuLmxkKCksbi5tZCgpKSk6ITF9LGguTWM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIERlKHQsNDQpPyhuPWwodCw0NCksY2N0KHRoaXMub2QoKSxuLmxkKCksbi5tZCgpKSk6ITF9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vZCgpLmR9LEkoZG4sIk11bHRpbWFwcy9FbnRyaWVzIiwyMDg2KSxEKDc0OSwyMDg2LFd5LHZ6KSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5rYygpfSxoLm9kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5OYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEubGMoKX0sSShkbiwiQWJzdHJhY3RNdWx0aW1hcC9FbnRyaWVzIiw3NDkpLEQoNzUwLDc0OSxUbCxVd2UpLGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmxjKCl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIFF4ZSh0aGlzLHQpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHdmdCh0aGlzKX0sSShkbiwiQWJzdHJhY3RNdWx0aW1hcC9FbnRyeVNldCIsNzUwKSxEKDc1MSwzMSxXeSxRMiksaC4kYj1mdW5jdGlvbigpe3RoaXMuYS4kYigpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBMeW4odGhpcy5hLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5uYygpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5kfSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5vYygpfSxJKGRuLCJBYnN0cmFjdE11bHRpbWFwL1ZhbHVlcyIsNzUxKSxEKDIwODcsMzEsezg0OToxLDIwOjEsMzE6MSwxNjoxfSksaC5KYz1mdW5jdGlvbih0KXtYcih0KSxWNSh0aGlzKS5KYyhuZXcga2llKHQpKX0saC5OYz1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PVY1KHRoaXMpLk5jKCksSXVlKHQsbmV3IHBlLDY0fHQueWQoKSYxMjk2LHRoaXMuYS5kKX0saC5GYz1mdW5jdGlvbih0KXtyZXR1cm4gWndlKCksITB9LGguR2M9ZnVuY3Rpb24odCl7cmV0dXJuIFhyKHRoaXMpLFhyKHQpLERlKHQsNTUyKT9OYm4obCh0LDg0OSkpOiF0LmRjKCkmJkdvZSh0aGlzLHQuS2MoKSl9LGguSGM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIG49bChPeShleCh0aGlzLmEpLHQpLDE2KSwobj9uLmdjKCk6MCk+MH0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gblRuKHRoaXMsdCl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gZXMoVjUodGhpcykpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIFY1KHRoaXMpLmRjKCl9LGguTWM9ZnVuY3Rpb24odCl7cmV0dXJuIFVwdCh0aGlzLHQsMSk+MH0saC5JYj1mdW5jdGlvbigpe3JldHVybiB4YyhWNSh0aGlzKSl9LEkoZG4sIkFic3RyYWN0TXVsdGlzZXQiLDIwODcpLEQoMjA4OSwyMDY4LFRsKSxoLiRiPWZ1bmN0aW9uKCl7bVYodGhpcy5hLmEpfSxoLkhjPWZ1bmN0aW9uKHQpe3ZhciBuLHI7cmV0dXJuIERlKHQsNTA0KT8ocj1sKHQsNDI1KSxsKHIuYS5tZCgpLDE2KS5nYygpPD0wPyExOihuPVBvdCh0aGlzLmEsci5hLmxkKCkpLG49PWwoci5hLm1kKCksMTYpLmdjKCkpKTohMX0saC5NYz1mdW5jdGlvbih0KXt2YXIgbixyLGEsbztyZXR1cm4gRGUodCw1MDQpJiYocj1sKHQsNDI1KSxuPXIuYS5sZCgpLGE9bChyLmEubWQoKSwxNikuZ2MoKSxhIT0wKT8obz10aGlzLmEsR2tuKG8sbixhKSk6ITF9LEkoZG4sIk11bHRpc2V0cy9FbnRyeVNldCIsMjA4OSksRCgxMTM5LDIwODksVGwsbWllKSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBSmUoRXN0KGV4KHRoaXMuYS5hKSkuS2MoKSl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gZXgodGhpcy5hLmEpLmdjKCl9LEkoZG4sIkFic3RyYWN0TXVsdGlzZXQvRW50cnlTZXQiLDExMzkpLEQoNjI3LDc0MixKbSksaC5oYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBkKCl9LGguamM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xZCgpfSxoLmNjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJkKHQpfSxoLmZjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNkKHQpfSxoLlpiPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9dGhpcy5mLHR8fCh0aGlzLmY9dGhpcy5hYygpKX0saC5xZD1mdW5jdGlvbigpe3JldHVybiBDbigpLENuKCksaEt9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIEVjZSh0aGlzLHQpfSxoLnJkPWZ1bmN0aW9uKHQpe3JldHVybiBsKCRpKHRoaXMsdCksMjEpfSxoLnNkPWZ1bmN0aW9uKHQpe3JldHVybiBsKEROKHRoaXMsdCksMjEpfSxoLm1jPWZ1bmN0aW9uKHQpe3JldHVybiBDbigpLG5ldyBFayhsKHQsMjEpKX0saC5wYz1mdW5jdGlvbih0LG4pe3JldHVybiBuZXcgVHJ0KHRoaXMsdCxsKG4sMjEpKX0sSShkbiwiQWJzdHJhY3RTZXRNdWx0aW1hcCIsNjI3KSxEKDE3MjMsNjI3LEptKSxoLmhjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBLcCh0aGlzLmIpfSxoLnBkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBLcCh0aGlzLmIpfSxoLmpjPWZ1bmN0aW9uKCl7cmV0dXJuIFQ1ZShuZXcgS3AodGhpcy5iKSl9LGgucWQ9ZnVuY3Rpb24oKXtyZXR1cm4gVDVlKG5ldyBLcCh0aGlzLmIpKX0saC5jYz1mdW5jdGlvbih0KXtyZXR1cm4gbChsKCRpKHRoaXMsdCksMjEpLDg3KX0saC5yZD1mdW5jdGlvbih0KXtyZXR1cm4gbChsKCRpKHRoaXMsdCksMjEpLDg3KX0saC5mYz1mdW5jdGlvbih0KXtyZXR1cm4gbChsKEROKHRoaXMsdCksMjEpLDg3KX0saC5zZD1mdW5jdGlvbih0KXtyZXR1cm4gbChsKEROKHRoaXMsdCksMjEpLDg3KX0saC5tYz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwyNzcpP1Q1ZShsKHQsMjc3KSk6KENuKCksbmV3IER5ZShsKHQsODcpKSl9LGguWmI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmYsdHx8KHRoaXMuZj1EZSh0aGlzLmMsMTM5KT9uZXcgcV8odGhpcyxsKHRoaXMuYywxMzkpKTpEZSh0aGlzLmMsMTMzKT9uZXcgX08odGhpcyxsKHRoaXMuYywxMzMpKTpuZXcgTGsodGhpcyx0aGlzLmMpKX0saC5wYz1mdW5jdGlvbih0LG4pe3JldHVybiBEZShuLDI3Nyk/bmV3IHVudCh0aGlzLHQsbChuLDI3NykpOm5ldyBHeWUodGhpcyx0LGwobiw4NykpfSxJKGRuLCJBYnN0cmFjdFNvcnRlZFNldE11bHRpbWFwIiwxNzIzKSxEKDE3MjQsMTcyMyxKbSksaC5aYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PXRoaXMuZixsKGwodHx8KHRoaXMuZj1EZSh0aGlzLmMsMTM5KT9uZXcgcV8odGhpcyxsKHRoaXMuYywxMzkpKTpEZSh0aGlzLmMsMTMzKT9uZXcgX08odGhpcyxsKHRoaXMuYywxMzMpKTpuZXcgTGsodGhpcyx0aGlzLmMpKSwxMzMpLDEzOSl9LGguZWM9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmksbChsKHR8fCh0aGlzLmk9RGUodGhpcy5jLDEzOSk/bmV3IEFrKHRoaXMsbCh0aGlzLmMsMTM5KSk6RGUodGhpcy5jLDEzMyk/bmV3IHRPKHRoaXMsbCh0aGlzLmMsMTMzKSk6bmV3IHE1KHRoaXMsdGhpcy5jKSksODcpLDI3Nyl9LGguYmM9ZnVuY3Rpb24oKXtyZXR1cm4gRGUodGhpcy5jLDEzOSk/bmV3IEFrKHRoaXMsbCh0aGlzLmMsMTM5KSk6RGUodGhpcy5jLDEzMyk/bmV3IHRPKHRoaXMsbCh0aGlzLmMsMTMzKSk6bmV3IHE1KHRoaXMsdGhpcy5jKX0sSShkbiwiQWJzdHJhY3RTb3J0ZWRLZXlTb3J0ZWRTZXRNdWx0aW1hcCIsMTcyNCksRCgyMTA5LDEsezIwNDY6MX0pLGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIF84bih0aGlzLHQpfSxoLkhiPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIEk3ZSgodD10aGlzLmcsdHx8KHRoaXMuZz1uZXcgJEkodGhpcykpKSl9LGguSWI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gSWd0KCh0PXRoaXMuZix0fHwodGhpcy5mPW5ldyBfeWUodGhpcykpKSl9LEkoZG4sIkFic3RyYWN0VGFibGUiLDIxMDkpLEQoNjc5LHExLFRsLCRJKSxoLiRiPWZ1bmN0aW9uKCl7JEplKCl9LGguSGM9ZnVuY3Rpb24odCl7dmFyIG4scjtyZXR1cm4gRGUodCw0NzkpPyhuPWwodCw2OTcpLHI9bChPeShLc3QodGhpcy5hKSxhYihuLmMuZSxuLmIpKSw4NSksISFyJiZzOGUoci52YygpLG5ldyBpdyhhYihuLmMuYyxuLmEpLG94KG4uYyxuLmIsbi5hKSkpKTohMX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBEcG4odGhpcy5hKX0saC5NYz1mdW5jdGlvbih0KXt2YXIgbixyO3JldHVybiBEZSh0LDQ3OSk/KG49bCh0LDY5Nykscj1sKE95KEtzdCh0aGlzLmEpLGFiKG4uYy5lLG4uYikpLDg1KSwhIXImJmM0bihyLnZjKCksbmV3IGl3KGFiKG4uYy5jLG4uYSksb3gobi5jLG4uYixuLmEpKSkpOiExfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIFhpdCh0aGlzLmEpfSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIEZibih0aGlzLmEpfSxJKGRuLCJBYnN0cmFjdFRhYmxlL0NlbGxTZXQiLDY3OSksRCgyMDI1LDMxLFd5LHdpZSksaC4kYj1mdW5jdGlvbigpeyRKZSgpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiB3eG4odGhpcy5hLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIElwbih0aGlzLmEpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIFhpdCh0aGlzLmEpfSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG9jdCh0aGlzLmEpfSxJKGRuLCJBYnN0cmFjdFRhYmxlL1ZhbHVlcyIsMjAyNSksRCgxNjk3LDE2OTYsSm0pLEkoZG4sIkFycmF5TGlzdE11bHRpbWFwR3d0U2VyaWFsaXphdGlvbkRlcGVuZGVuY2llcyIsMTY5NyksRCg1MjAsMTY5NyxKbSxuc2UsRzVlKSxoLmhjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBCdSh0aGlzLmEpfSxoLmE9MCxJKGRuLCJBcnJheUxpc3RNdWx0aW1hcCIsNTIwKSxEKDY3OCwyMTA5LHs2Nzg6MSwyMDQ2OjEsMzoxfSxpMnQpLEkoZG4sIkFycmF5VGFibGUiLDY3OCksRCgyMDIxLDM5OSx0VCxxbnQpLGguWGI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBGN2UodGhpcy5hLHQpfSxJKGRuLCJBcnJheVRhYmxlLzEiLDIwMjEpLEQoMjAyMiwxLHt9LGdpZSksaC50ZD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEY3ZSh0aGlzLmEsdCl9LEkoZG4sIkFycmF5VGFibGUvMW1ldGhvZHJlZiRnZXRDZWxsJFR5cGUiLDIwMjIpLEQoMjExMCwxLHs2OTc6MX0pLGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIHQ9PT10aGlzPyEwOkRlKHQsNDc5KT8obj1sKHQsNjk3KSx5ZChhYih0aGlzLmMuZSx0aGlzLmIpLGFiKG4uYy5lLG4uYikpJiZ5ZChhYih0aGlzLmMuYyx0aGlzLmEpLGFiKG4uYy5jLG4uYSkpJiZ5ZChveCh0aGlzLmMsdGhpcy5iLHRoaXMuYSksb3gobi5jLG4uYixuLmEpKSk6ITF9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gTU4oaGUobGUod2EsMSksUm4sMSw1LFthYih0aGlzLmMuZSx0aGlzLmIpLGFiKHRoaXMuYy5jLHRoaXMuYSksb3godGhpcy5jLHRoaXMuYix0aGlzLmEpXSkpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIigiK2FiKHRoaXMuYy5lLHRoaXMuYikrIiwiK2FiKHRoaXMuYy5jLHRoaXMuYSkrIik9IitveCh0aGlzLmMsdGhpcy5iLHRoaXMuYSl9LEkoZG4sIlRhYmxlcy9BYnN0cmFjdENlbGwiLDIxMTApLEQoNDc5LDIxMTAsezQ3OToxLDY5NzoxfSxGN2UpLGguYT0wLGguYj0wLGguZD0wLEkoZG4sIkFycmF5VGFibGUvMiIsNDc5KSxEKDIwMjQsMSx7fSxwaWUpLGgudGQ9ZnVuY3Rpb24odCl7cmV0dXJuIElsdCh0aGlzLmEsdCl9LEkoZG4sIkFycmF5VGFibGUvMm1ldGhvZHJlZiRnZXRWYWx1ZSRUeXBlIiwyMDI0KSxEKDIwMjMsMzk5LHRULEhudCksaC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gSWx0KHRoaXMuYSx0KX0sSShkbiwiQXJyYXlUYWJsZS8zIiwyMDIzKSxEKDIwNzcsMjA2NSxXdyksaC4kYj1mdW5jdGlvbigpe2lIKHRoaXMua2MoKSl9LGgudmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHl6KHRoaXMpfSxoLmxjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBfYXQodGhpcy5rYygpLHRoaXMuZ2MoKSl9LEkoZG4sIk1hcHMvSXRlcmF0b3JCYXNlZEFic3RyYWN0TWFwIiwyMDc3KSxEKDg0MiwyMDc3LFd3KSxoLiRiPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC5fYj1mdW5jdGlvbih0KXtyZXR1cm4gc1plKHRoaXMuYyx0KX0saC5rYz1mdW5jdGlvbigpe3JldHVybiBuZXcgVm50KHRoaXMsdGhpcy5jLmIuYy5nYygpKX0saC5sYz1mdW5jdGlvbigpe3JldHVybiBDYWUodGhpcy5jLmIuYy5nYygpLDE2LG5ldyBteih0aGlzKSl9LGgueGM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIG49bChIXyh0aGlzLmMsdCksMTcpLG4/dGhpcy52ZChuLmEpOm51bGx9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmIuYy5kYygpfSxoLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIE9hZSh0aGlzLmMpfSxoLnpjPWZ1bmN0aW9uKHQsbil7dmFyIHI7aWYocj1sKEhfKHRoaXMuYyx0KSwxNyksIXIpdGhyb3cgdWUobmV3IFluKHRoaXMudWQoKSsiICIrdCsiIG5vdCBpbiAiK09hZSh0aGlzLmMpKSk7cmV0dXJuIHRoaXMud2Qoci5hLG4pfSxoLkJjPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmIuYy5nYygpfSxJKGRuLCJBcnJheVRhYmxlL0FycmF5TWFwIiw4NDIpLEQoMjAyMCwxLHt9LG16KSxoLnRkPWZ1bmN0aW9uKHQpe3JldHVybiBZc3QodGhpcy5hLHQpfSxJKGRuLCJBcnJheVRhYmxlL0FycmF5TWFwLzBtZXRob2RyZWYkZ2V0RW50cnkkVHlwZSIsMjAyMCksRCgyMDE4LDM1OCxObGUsRFplKSxoLmxkPWZ1bmN0aW9uKCl7cmV0dXJuIFVobih0aGlzLmEsdGhpcy5iKX0saC5tZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEudmQodGhpcy5iKX0saC5uZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLndkKHRoaXMuYix0KX0saC5iPTAsSShkbiwiQXJyYXlUYWJsZS9BcnJheU1hcC8xIiwyMDE4KSxEKDIwMTksMzk5LHRULFZudCksaC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gWXN0KHRoaXMuYSx0KX0sSShkbiwiQXJyYXlUYWJsZS9BcnJheU1hcC8yIiwyMDE5KSxEKDIwMTcsODQyLFd3LEJzdCksaC51ZD1mdW5jdGlvbigpe3JldHVybiJDb2x1bW4ifSxoLnZkPWZ1bmN0aW9uKHQpe3JldHVybiBveCh0aGlzLmIsdGhpcy5hLHQpfSxoLndkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHMwdCh0aGlzLmIsdGhpcy5hLHQsbil9LGguYT0wLEkoZG4sIkFycmF5VGFibGUvUm93IiwyMDE3KSxEKDg0Myw4NDIsV3csX3llKSxoLnZkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQnN0KHRoaXMuYSx0KX0saC56Yz1mdW5jdGlvbih0LG4pe3JldHVybiBsKG4sODUpLGZ1bigpfSxoLndkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGwobiw4NSksZHVuKCl9LGgudWQ9ZnVuY3Rpb24oKXtyZXR1cm4iUm93In0sSShkbiwiQXJyYXlUYWJsZS9Sb3dNYXAiLDg0MyksRCgxMTU3LDEsUGgsSVplKSxoLkFkPWZ1bmN0aW9uKHQpe3JldHVybih0aGlzLmEueWQoKSYtMjYyJnQpIT0wfSxoLnlkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS55ZCgpJi0yNjJ9LGguemQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLnpkKCl9LGguTmI9ZnVuY3Rpb24odCl7dGhpcy5hLk5iKG5ldyBOWmUodCx0aGlzLmIpKX0saC5CZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLkJkKG5ldyBPWmUodCx0aGlzLmIpKX0sSShkbiwiQ29sbGVjdFNwbGl0ZXJhdG9ycy8xIiwxMTU3KSxEKDExNTgsMSxmcixPWmUpLGguQ2Q9ZnVuY3Rpb24odCl7dGhpcy5hLkNkKHRoaXMuYi5LYih0KSl9LEkoZG4sIkNvbGxlY3RTcGxpdGVyYXRvcnMvMS9sYW1iZGEkMCRUeXBlIiwxMTU4KSxEKDExNTksMSxmcixOWmUpLGguQ2Q9ZnVuY3Rpb24odCl7dGhpcy5hLkNkKHRoaXMuYi5LYih0KSl9LEkoZG4sIkNvbGxlY3RTcGxpdGVyYXRvcnMvMS9sYW1iZGEkMSRUeXBlIiwxMTU5KSxEKDExNTQsMSxQaCxzaXQpLGguQWQ9ZnVuY3Rpb24odCl7cmV0dXJuKCgxNjQ2NHx0aGlzLmIpJnQpIT0wfSxoLnlkPWZ1bmN0aW9uKCl7cmV0dXJuIDE2NDY0fHRoaXMuYn0saC56ZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuemQoKX0saC5OYj1mdW5jdGlvbih0KXt0aGlzLmEuUWUobmV3IEJaZSh0LHRoaXMuYykpfSxoLkJkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEuUmUobmV3IFBaZSh0LHRoaXMuYykpfSxoLmI9MCxJKGRuLCJDb2xsZWN0U3BsaXRlcmF0b3JzLzFXaXRoQ2hhcmFjdGVyaXN0aWNzIiwxMTU0KSxEKDExNTUsMSxrUCxQWmUpLGguRGQ9ZnVuY3Rpb24odCl7dGhpcy5hLkNkKHRoaXMuYi50ZCh0KSl9LEkoZG4sIkNvbGxlY3RTcGxpdGVyYXRvcnMvMVdpdGhDaGFyYWN0ZXJpc3RpY3MvbGFtYmRhJDAkVHlwZSIsMTE1NSksRCgxMTU2LDEsa1AsQlplKSxoLkRkPWZ1bmN0aW9uKHQpe3RoaXMuYS5DZCh0aGlzLmIudGQodCkpfSxJKGRuLCJDb2xsZWN0U3BsaXRlcmF0b3JzLzFXaXRoQ2hhcmFjdGVyaXN0aWNzL2xhbWJkYSQxJFR5cGUiLDExNTYpLEQoMTE1MCwxLFBoKSxoLkFkPWZ1bmN0aW9uKHQpe3JldHVybih0aGlzLmEmdCkhPTB9LGgueWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLnpkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZSYmKHRoaXMuYj1weWUodGhpcy5iLHRoaXMuZS56ZCgpKSkscHllKHRoaXMuYiwwKX0saC5OYj1mdW5jdGlvbih0KXt0aGlzLmUmJih0aGlzLmUuTmIodCksdGhpcy5lPW51bGwpLHRoaXMuYy5OYihuZXcgRlplKHRoaXMsdCkpLHRoaXMuYj0wfSxoLkJkPWZ1bmN0aW9uKHQpe2Zvcig7Oyl7aWYodGhpcy5lJiZ0aGlzLmUuQmQodCkpcmV0dXJuIElfKHRoaXMuYixFUCkmJih0aGlzLmI9RGYodGhpcy5iLDEpKSwhMDtpZih0aGlzLmU9bnVsbCwhdGhpcy5jLkJkKG5ldyB5aWUodGhpcykpKXJldHVybiExfX0saC5hPTAsaC5iPTAsSShkbiwiQ29sbGVjdFNwbGl0ZXJhdG9ycy9GbGF0TWFwU3BsaXRlcmF0b3IiLDExNTApLEQoMTE1MiwxLGZyLHlpZSksaC5DZD1mdW5jdGlvbih0KXtIZm4odGhpcy5hLHQpfSxJKGRuLCJDb2xsZWN0U3BsaXRlcmF0b3JzL0ZsYXRNYXBTcGxpdGVyYXRvci9sYW1iZGEkMCRUeXBlIiwxMTUyKSxEKDExNTMsMSxmcixGWmUpLGguQ2Q9ZnVuY3Rpb24odCl7Z3BuKHRoaXMuYSx0aGlzLmIsdCl9LEkoZG4sIkNvbGxlY3RTcGxpdGVyYXRvcnMvRmxhdE1hcFNwbGl0ZXJhdG9yL2xhbWJkYSQxJFR5cGUiLDExNTMpLEQoMTE1MSwxMTUwLFBoLENjdCksSShkbiwiQ29sbGVjdFNwbGl0ZXJhdG9ycy9GbGF0TWFwU3BsaXRlcmF0b3JPZk9iamVjdCIsMTE1MSksRCgyNTMsMSxQbGUpLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuRWQobCh0LDI1MykpfSxoLkVkPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiB0PT0oR2llKCkseTBlKT8xOnQ9PShVaWUoKSx3MGUpPy0xOihuPShacSgpLHZOKHRoaXMuYSx0LmEpKSxuIT0wP246RGUodGhpcyw1MjYpPT1EZSh0LDUyNik/MDpEZSh0aGlzLDUyNik/MTotMSl9LGguSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiByeGUodGhpcyx0KX0sSShkbiwiQ3V0IiwyNTMpLEQoMTgyMywyNTMsUGxlLHhKZSksaC5FZD1mdW5jdGlvbih0KXtyZXR1cm4gdD09dGhpcz8wOjF9LGguR2Q9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFN3ZSl9LGguSGQ9ZnVuY3Rpb24odCl7dC5hKz0iK+KInikifSxoLklkPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IG5jKEl3dCkpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIFZnKCkscThlKHRoaXMpfSxoLkpkPWZ1bmN0aW9uKHQpe3JldHVybiExfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIiviiJ4ifTt2YXIgdzBlO0koZG4sIkN1dC9BYm92ZUFsbCIsMTgyMyksRCg1MjYsMjUzLHsyNTM6MSw1MjY6MSwzOjEsMzQ6MX0sWG50KSxoLkdkPWZ1bmN0aW9uKHQpe3d1KCh0LmErPSIoIix0KSx0aGlzLmEpfSxoLkhkPWZ1bmN0aW9uKHQpe2hiKHd1KHQsdGhpcy5hKSw5Myl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm5+ZXModGhpcy5hKX0saC5KZD1mdW5jdGlvbih0KXtyZXR1cm4gWnEoKSx2Tih0aGlzLmEsdCk8MH0saC5JYj1mdW5jdGlvbigpe3JldHVybiIvIit0aGlzLmErIlxcIn0sSShkbiwiQ3V0L0Fib3ZlVmFsdWUiLDUyNiksRCgxODIyLDI1MyxQbGUseUplKSxoLkVkPWZ1bmN0aW9uKHQpe3JldHVybiB0PT10aGlzPzA6LTF9LGguR2Q9ZnVuY3Rpb24odCl7dC5hKz0iKC3iiJ4ifSxoLkhkPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBTd2UpfSxoLklkPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IG5jKEl3dCkpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIFZnKCkscThlKHRoaXMpfSxoLkpkPWZ1bmN0aW9uKHQpe3JldHVybiEwfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIi3iiJ4ifTt2YXIgeTBlO0koZG4sIkN1dC9CZWxvd0FsbCIsMTgyMiksRCgxODI0LDI1MyxQbGUsUW50KSxoLkdkPWZ1bmN0aW9uKHQpe3d1KCh0LmErPSJbIix0KSx0aGlzLmEpfSxoLkhkPWZ1bmN0aW9uKHQpe2hiKHd1KHQsdGhpcy5hKSw0MSl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gZXModGhpcy5hKX0saC5KZD1mdW5jdGlvbih0KXtyZXR1cm4gWnEoKSx2Tih0aGlzLmEsdCk8PTB9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4iXFwiK3RoaXMuYSsiLyJ9LEkoZG4sIkN1dC9CZWxvd1ZhbHVlIiwxODI0KSxEKDU0NywxLGhnKSxoLkpjPWZ1bmN0aW9uKHQpe3RvKHRoaXMsdCl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gTDRuKGwoX0godGhpcywidXNlIE9wdGlvbmFsLm9yTnVsbCgpIGluc3RlYWQgb2YgT3B0aW9uYWwub3IobnVsbCkiKSwyMCkuS2MoKSl9LEkoZG4sIkZsdWVudEl0ZXJhYmxlIiw1NDcpLEQoNDQyLDU0NyxoZyxQXyksaC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgaHIoZHIodGhpcy5hLktjKCksbmV3IGopKX0sSShkbiwiRmx1ZW50SXRlcmFibGUvMiIsNDQyKSxEKDEwNTksNTQ3LGhnLHNudCksaC5LYz1mdW5jdGlvbigpe3JldHVybiByZyh0aGlzKX0sSShkbiwiRmx1ZW50SXRlcmFibGUvMyIsMTA1OSksRCg3MjQsMzk5LHRULEF5ZSksaC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hW3RdLktjKCl9LEkoZG4sIkZsdWVudEl0ZXJhYmxlLzMvMSIsNzI0KSxEKDIwNzAsMSx7fSksaC5JYj1mdW5jdGlvbigpe3JldHVybiB4Yyh0aGlzLktkKCkuYil9LEkoZG4sIkZvcndhcmRpbmdPYmplY3QiLDIwNzApLEQoMjA3MSwyMDcwLE93dCksaC5LZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLkxkKCl9LGguSmM9ZnVuY3Rpb24odCl7dG8odGhpcyx0KX0saC5MYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLk9jKCl9LGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtuKHRoaXMsMCl9LGguT2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJuKG51bGwsdGhpcy5OYygpKX0saC5GYz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5MZCgpLG9aZSgpfSxoLkdjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLkxkKCksY1plKCl9LGguJGI9ZnVuY3Rpb24oKXt0aGlzLkxkKCksdVplKCl9LGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuTGQoKS5IYyh0KX0saC5JYz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5MZCgpLkljKHQpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTGQoKS5iLmRjKCl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5MZCgpLktjKCl9LGguTWM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuTGQoKSxsWmUoKX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkxkKCkuYi5nYygpfSxoLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuTGQoKS5QYygpfSxoLlFjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLkxkKCkuUWModCl9LEkoZG4sIkZvcndhcmRpbmdDb2xsZWN0aW9uIiwyMDcxKSxEKDIwNzgsMzEsdEVlKSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuT2QoKX0saC5GYz1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLkdjPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGguTWQ9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmMsdHx8KHRoaXMuYz10aGlzLk5kKCkpfSxoLiRiPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gdCE9bnVsbCYmTnkodGhpcyx0LCExKX0saC5OZD1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLmdjKCkpe2Nhc2UgMDpyZXR1cm4gd3coKSx3dygpLHgwZTtjYXNlIDE6cmV0dXJuIHd3KCksbmV3IFNhZShYcih0aGlzLk9kKCkuUGIoKSkpO2RlZmF1bHQ6cmV0dXJuIG5ldyBvNWUodGhpcyx0aGlzLlBjKCkpfX0saC5NYz1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxJKGRuLCJJbW11dGFibGVDb2xsZWN0aW9uIiwyMDc4KSxEKDcyNywyMDc4LHRFZSxUd2UpLGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gY3godGhpcy5hLktjKCkpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiB0IT1udWxsJiZ0aGlzLmEuSGModCl9LGguSWM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYS5JYyh0KX0saC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZGMoKX0saC5PZD1mdW5jdGlvbigpe3JldHVybiBjeCh0aGlzLmEuS2MoKSl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCl9LGguUGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLlBjKCl9LGguUWM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYS5RYyh0KX0saC5JYj1mdW5jdGlvbigpe3JldHVybiB4Yyh0aGlzLmEpfSxJKGRuLCJGb3J3YXJkaW5nSW1tdXRhYmxlQ29sbGVjdGlvbiIsNzI3KSxEKDMwNywyMDc4LG5UKSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuT2QoKX0saC5lZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLlBkKDApfSxoLmZkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLlBkKHQpfSxoLmpkPWZ1bmN0aW9uKHQpeyRtKHRoaXMsdCl9LGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtuKHRoaXMsMTYpfSxoLmtkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRoaXMuUWQodCxuKX0saC5iZD1mdW5jdGlvbih0LG4pe3Rocm93IHVlKG5ldyBRcil9LGguY2Q9ZnVuY3Rpb24odCxuKXt0aHJvdyB1ZShuZXcgUXIpfSxoLk1kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIFZFbih0aGlzLHQpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIFIzbih0aGlzKX0saC5kZD1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD8tMTpvN24odGhpcyx0KX0saC5PZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLlBkKDApfSxoLlBkPWZ1bmN0aW9uKHQpe3JldHVybiBpYWUodGhpcyx0KX0saC5nZD1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLmhkPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IFFyKX0saC5RZD1mdW5jdGlvbih0LG4pe3ZhciByO3JldHVybiBSVigocj1uZXcgS1plKHRoaXMpLG5ldyBacChyLHQsbikpKX07dmFyIHgwZTtJKGRuLCJJbW11dGFibGVMaXN0IiwzMDcpLEQoMjEwNSwzMDcsblQpLGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gY3godGhpcy5SZCgpLktjKCkpfSxoLmtkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFJWKHRoaXMuUmQoKS5rZCh0LG4pKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gdCE9bnVsbCYmdGhpcy5SZCgpLkhjKHQpfSxoLkljPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLlJkKCkuSWModCl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIFBpKHRoaXMuUmQoKSx0KX0saC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gYWIodGhpcyx0KX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBlcyh0aGlzLlJkKCkpfSxoLmRkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLlJkKCkuZGQodCl9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5SZCgpLmRjKCl9LGguT2Q9ZnVuY3Rpb24oKXtyZXR1cm4gY3godGhpcy5SZCgpLktjKCkpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUmQoKS5nYygpfSxoLlFkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFJWKHRoaXMuUmQoKS5rZCh0LG4pKX0saC5QYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJkKCkuUWMoV2Uod2EsUm4sMSx0aGlzLlJkKCkuZ2MoKSw1LDEpKX0saC5RYz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5SZCgpLlFjKHQpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHhjKHRoaXMuUmQoKSl9LEkoZG4sIkZvcndhcmRpbmdJbW11dGFibGVMaXN0IiwyMTA1KSxEKDcyOSwxLHJUKSxoLnZjPWZ1bmN0aW9uKCl7cmV0dXJuIE1tKHRoaXMpfSxoLndjPWZ1bmN0aW9uKHQpe21BKHRoaXMsdCl9LGguZWM9ZnVuY3Rpb24oKXtyZXR1cm4gT2FlKHRoaXMpfSxoLnljPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gcWNlKHRoaXMsdCxuLHIpfSxoLkNjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuVmQoKX0saC4kYj1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyBRcil9LGguX2I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueGModCkhPW51bGx9LGgudWM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuVmQoKS5IYyh0KX0saC5UZD1mdW5jdGlvbigpe3JldHVybiBuZXcgTFFlKHRoaXMpfSxoLlVkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBNUWUodGhpcyl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIE15bih0aGlzLHQpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIE1tKHRoaXMpLkhiKCl9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nYygpPT0wfSxoLnpjPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGh1bigpfSxoLkJjPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gbTluKHRoaXMpfSxoLlZkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZT90aGlzLmU6dGhpcy5lPXRoaXMuVWQoKX0saC5jPW51bGwsaC5kPW51bGwsaC5lPW51bGw7dmFyIGk2dDtJKGRuLCJJbW11dGFibGVNYXAiLDcyOSksRCg3MzAsNzI5LHJUKSxoLl9iPWZ1bmN0aW9uKHQpe3JldHVybiBzWmUodGhpcyx0KX0saC51Yz1mdW5jdGlvbih0KXtyZXR1cm4gWlplKHRoaXMuYix0KX0saC5TZD1mdW5jdGlvbigpe3JldHVybiB0MXQobmV3IHZpZSh0aGlzKSl9LGguVGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdDF0KG1hdCh0aGlzLmIpKX0saC5VZD1mdW5jdGlvbigpe3JldHVybiB3ZCgpLG5ldyBUd2UoYmF0KHRoaXMuYikpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiBlZXQodGhpcy5iLHQpfSxoLnhjPWZ1bmN0aW9uKHQpe3JldHVybiBIXyh0aGlzLHQpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIGVzKHRoaXMuYi5jKX0saC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuYy5kYygpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5jLmdjKCl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4geGModGhpcy5iLmMpfSxJKGRuLCJGb3J3YXJkaW5nSW1tdXRhYmxlTWFwIiw3MzApLEQoMjA3MiwyMDcxLEJsZSksaC5LZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLldkKCl9LGguTGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5XZCgpfSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrbih0aGlzLDEpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09dGhpc3x8dGhpcy5XZCgpLkZiKHQpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuV2QoKS5IYigpfSxJKGRuLCJGb3J3YXJkaW5nU2V0IiwyMDcyKSxEKDEwODUsMjA3MixCbGUsdmllKSxoLktkPWZ1bmN0aW9uKCl7cmV0dXJuIEtrKHRoaXMuYS5iKX0saC5MZD1mdW5jdGlvbigpe3JldHVybiBLayh0aGlzLmEuYil9LGguSGM9ZnVuY3Rpb24odCl7aWYoRGUodCw0NCkmJmwodCw0NCkubGQoKT09bnVsbClyZXR1cm4hMTt0cnl7cmV0dXJuIEpaZShLayh0aGlzLmEuYiksdCl9Y2F0Y2gobil7aWYobj1icyhuKSxEZShuLDIxMikpcmV0dXJuITE7dGhyb3cgdWUobil9fSxoLldkPWZ1bmN0aW9uKCl7cmV0dXJuIEtrKHRoaXMuYS5iKX0saC5RYz1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbj10b3QoS2sodGhpcy5hLmIpLHQpLEtrKHRoaXMuYS5iKS5iLmdjKCk8bi5sZW5ndGgmJlRzKG4sS2sodGhpcy5hLmIpLmIuZ2MoKSxudWxsKSxufSxJKGRuLCJGb3J3YXJkaW5nSW1tdXRhYmxlTWFwLzEiLDEwODUpLEQoMjA3OSwyMDc4LFN4KSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuT2QoKX0saC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcga24odGhpcywxKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gUXhlKHRoaXMsdCl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gd2Z0KHRoaXMpfSxJKGRuLCJJbW11dGFibGVTZXQiLDIwNzkpLEQoNzE5LDIwNzksU3gpLGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gY3gobmV3IHlvKHRoaXMuYS5iLktjKCkpKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gdCE9bnVsbCYmbk8odGhpcy5hLHQpfSxoLkljPWZ1bmN0aW9uKHQpe3JldHVybiBYWmUodGhpcy5hLHQpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIGVzKHRoaXMuYS5iKX0saC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuYi5kYygpfSxoLk9kPWZ1bmN0aW9uKCl7cmV0dXJuIGN4KG5ldyB5byh0aGlzLmEuYi5LYygpKSl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmIuZ2MoKX0saC5QYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuYi5QYygpfSxoLlFjPWZ1bmN0aW9uKHQpe3JldHVybiBRWmUodGhpcy5hLHQpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHhjKHRoaXMuYS5iKX0sSShkbiwiRm9yd2FyZGluZ0ltbXV0YWJsZVNldCIsNzE5KSxEKDIwNzMsMjA3MixOd3QpLGguS2Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLkxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0saC5XZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGFxKHRoaXMpfSxJKGRuLCJGb3J3YXJkaW5nU29ydGVkU2V0IiwyMDczKSxEKDU0MywyMDc3LHJULGNVKSxoLkFjPWZ1bmN0aW9uKHQpe2JBKHRoaXMsdCl9LGguQ2M9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmQsbmV3IFFzZSh0fHwodGhpcy5kPW5ldyBKMih0aGlzKSkpfSxoLiRiPWZ1bmN0aW9uKCl7ZU4odGhpcyl9LGguX2I9ZnVuY3Rpb24odCl7cmV0dXJuISFnQSh0aGlzLHQsWXIobW8oZmcsaWcoWXIobW8odD09bnVsbD8wOmVzKHQpLGRnKSksMTUpKSkpfSxoLnVjPWZ1bmN0aW9uKHQpe3JldHVybiBraHQodGhpcyx0KX0saC5rYz1mdW5jdGlvbigpe3JldHVybiBuZXcgVW50KHRoaXMsdGhpcyl9LGgud2M9ZnVuY3Rpb24odCl7cG90KHRoaXMsdCl9LGgueGM9ZnVuY3Rpb24odCl7cmV0dXJuIFg1KHRoaXMsdCl9LGguZWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEpzZSh0aGlzKX0saC56Yz1mdW5jdGlvbih0LG4pe3JldHVybiBSVSh0aGlzLHQsbil9LGguQmM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIG49Z0EodGhpcyx0LFlyKG1vKGZnLGlnKFlyKG1vKHQ9PW51bGw/MDplcyh0KSxkZykpLDE1KSkpKSxuPyh1Nih0aGlzLG4pLG4uZT1udWxsLG4uYz1udWxsLG4uaSk6bnVsbH0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLml9LGgueGQ9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmQsbmV3IFFzZSh0fHwodGhpcy5kPW5ldyBKMih0aGlzKSkpfSxoLmY9MCxoLmc9MCxoLmk9MCxJKGRuLCJIYXNoQmlNYXAiLDU0MyksRCg1NDQsMSxPYSksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIEFjdCh0aGlzKX0saC5QYj1mdW5jdGlvbigpe3ZhciB0O2lmKCFBY3QodGhpcykpdGhyb3cgdWUobmV3IF9jKTtyZXR1cm4gdD1sKExmKHRoaXMuYyksMzAzKSx0aGlzLmM9dC5jLHRoaXMuZj10LC0tdGhpcy5kLHRoaXMuWGQodCl9LGguUWI9ZnVuY3Rpb24oKXtpZih0aGlzLmUuZyE9dGhpcy5iKXRocm93IHVlKG5ldyBYaCk7aWYoIXRoaXMuZil0aHJvdyB1ZShuZXcgbmMoSmtlKSk7dTYodGhpcy5lLHRoaXMuZiksdGhpcy5iPXRoaXMuZS5nLHRoaXMuZj1udWxsfSxoLmI9MCxoLmQ9MCxoLmY9bnVsbCxJKGRuLCJIYXNoQmlNYXAvSXRyIiw1NDQpLEQoMTAyMyw1NDQsT2EsVW50KSxoLlhkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUlplKHRoaXMsdCl9LEkoZG4sIkhhc2hCaU1hcC8xIiwxMDIzKSxEKG0wLDM1OCxObGUsUlplKSxoLmxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nfSxoLm1kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5pfSxoLm5kPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYTtyZXR1cm4gcj10aGlzLmEuaSxhPVlyKG1vKGZnLGlnKFlyKG1vKHQ9PW51bGw/MDplcyh0KSxkZykpLDE1KSkpLGE9PXRoaXMuYS5mJiYocWUodCk9PT1xZShyKXx8dCE9bnVsbCYmUGkodCxyKSk/dDoobjB0KCFwQSh0aGlzLmIuYSx0LGEpLHQpLHU2KHRoaXMuYi5hLHRoaXMuYSksbj1uZXcgeEgodGhpcy5hLmcsdGhpcy5hLmEsdCxhKSxlUCh0aGlzLmIuYSxuLHRoaXMuYSksdGhpcy5hLmU9bnVsbCx0aGlzLmEuYz1udWxsLHRoaXMuYi5iPXRoaXMuYi5hLmcsdGhpcy5iLmY9PXRoaXMuYSYmKHRoaXMuYi5mPW4pLHRoaXMuYT1uLHIpfSxJKGRuLCJIYXNoQmlNYXAvMS9NYXBFbnRyeSIsbTApLEQoMjQ2LDM1OCx7MzU4OjEsMjQ2OjEsMzoxLDQ0OjF9LGl3KSxoLmxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ30saC5tZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLml9LGgubmQ9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0sSShkbiwiSW1tdXRhYmxlRW50cnkiLDI0NiksRCgzMDMsMjQ2LHszNTg6MSwzMDM6MSwyNDY6MSwzOjEsNDQ6MX0seEgpLGguYT0wLGguZj0wO3ZhciBrMGU9SShkbiwiSGFzaEJpTWFwL0JpRW50cnkiLDMwMyk7RCg2MTksMjA3NyxyVCxKMiksaC5BYz1mdW5jdGlvbih0KXtiQSh0aGlzLHQpfSxoLkNjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBKc2UodGhpcy5hKX0saC4kYj1mdW5jdGlvbigpe2VOKHRoaXMuYSl9LGguX2I9ZnVuY3Rpb24odCl7cmV0dXJuIGtodCh0aGlzLmEsdCl9LGgua2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEdudCh0aGlzLHRoaXMuYSl9LGgud2M9ZnVuY3Rpb24odCl7WHIodCkscG90KHRoaXMuYSxuZXcgd3oodCkpfSxoLnhjPWZ1bmN0aW9uKHQpe3JldHVybiB2Vih0aGlzLHQpfSxoLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBRc2UodGhpcyl9LGguemM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZUFuKHRoaXMuYSx0LG4sITEpfSxoLkJjPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBuPXBBKHRoaXMuYSx0LFlyKG1vKGZnLGlnKFlyKG1vKHQ9PW51bGw/MDplcyh0KSxkZykpLDE1KSkpKSxuPyh1Nih0aGlzLmEsbiksbi5lPW51bGwsbi5jPW51bGwsbi5nKTpudWxsfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5pfSxoLnhkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBKc2UodGhpcy5hKX0sSShkbiwiSGFzaEJpTWFwL0ludmVyc2UiLDYxOSksRCgxMDIwLDU0NCxPYSxHbnQpLGguWGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBqWmUodGhpcyx0KX0sSShkbiwiSGFzaEJpTWFwL0ludmVyc2UvMSIsMTAyMCksRCgxMDIxLDM1OCxObGUsalplKSxoLmxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5pfSxoLm1kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nfSxoLm5kPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYTtyZXR1cm4gYT10aGlzLmEuZyxuPVlyKG1vKGZnLGlnKFlyKG1vKHQ9PW51bGw/MDplcyh0KSxkZykpLDE1KSkpLG49PXRoaXMuYS5hJiYocWUodCk9PT1xZShhKXx8dCE9bnVsbCYmUGkodCxhKSk/dDoobjB0KCFnQSh0aGlzLmIuYS5hLHQsbiksdCksdTYodGhpcy5iLmEuYSx0aGlzLmEpLHI9bmV3IHhIKHQsbix0aGlzLmEuaSx0aGlzLmEuZiksdGhpcy5hPXIsZVAodGhpcy5iLmEuYSxyLG51bGwpLHRoaXMuYi5iPXRoaXMuYi5hLmEuZyxhKX0sSShkbiwiSGFzaEJpTWFwL0ludmVyc2UvMS9JbnZlcnNlRW50cnkiLDEwMjEpLEQoNjIwLDU0MixUbCxRc2UpLGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFRKZSh0aGlzLmEuYSl9LGguTWM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIG49cEEodGhpcy5hLmEsdCxZcihtbyhmZyxpZyhZcihtbyh0PT1udWxsPzA6ZXModCksZGcpKSwxNSkpKSksbj8odTYodGhpcy5hLmEsbiksITApOiExfSxJKGRuLCJIYXNoQmlNYXAvSW52ZXJzZS9JbnZlcnNlS2V5U2V0Iiw2MjApLEQoMTAxOSw1NDQsT2EsVEplKSxoLlhkPWZ1bmN0aW9uKHQpe3JldHVybiB0Lml9LEkoZG4sIkhhc2hCaU1hcC9JbnZlcnNlL0ludmVyc2VLZXlTZXQvMSIsMTAxOSksRCgxMDIyLDEse30sd3opLGguWWQ9ZnVuY3Rpb24odCxuKXtIY24odGhpcy5hLHQsbil9LEkoZG4sIkhhc2hCaU1hcC9JbnZlcnNlL2xhbWJkYSQwJFR5cGUiLDEwMjIpLEQoNjE4LDU0MixUbCxKc2UpLGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IENKZSh0aGlzLmEpfSxoLk1jPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBuPWdBKHRoaXMuYSx0LFlyKG1vKGZnLGlnKFlyKG1vKHQ9PW51bGw/MDplcyh0KSxkZykpLDE1KSkpKSxuPyh1Nih0aGlzLmEsbiksbi5lPW51bGwsbi5jPW51bGwsITApOiExfSxJKGRuLCJIYXNoQmlNYXAvS2V5U2V0Iiw2MTgpLEQoMTAxOCw1NDQsT2EsQ0plKSxoLlhkPWZ1bmN0aW9uKHQpe3JldHVybiB0Lmd9LEkoZG4sIkhhc2hCaU1hcC9LZXlTZXQvMSIsMTAxOCksRCgxMTIzLDYyNyxKbSksSShkbiwiSGFzaE11bHRpbWFwR3d0U2VyaWFsaXphdGlvbkRlcGVuZGVuY2llcyIsMTEyMyksRCgyNzEsMTEyMyxKbSxDdyksaC5oYz1mdW5jdGlvbigpe3JldHVybiBuZXcgS3ooQXkodGhpcy5hKSl9LGgucGQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEt6KEF5KHRoaXMuYSkpfSxoLmE9MixJKGRuLCJIYXNoTXVsdGltYXAiLDI3MSksRCgyMDk3LDMwNyxuVCksaC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5aZCgpLkhjKHQpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuWmQoKS5kYygpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuWmQoKS5nYygpfSxJKGRuLCJJbW11dGFibGVBc0xpc3QiLDIwOTcpLEQoMjAzMCw3MzAsclQpLGguVmQ9ZnVuY3Rpb24oKXtyZXR1cm4gd2QoKSxuZXcgTzgodGhpcy5hKX0saC5DYz1mdW5jdGlvbigpe3JldHVybiB3ZCgpLG5ldyBPOCh0aGlzLmEpfSxoLnhkPWZ1bmN0aW9uKCl7cmV0dXJuIHdkKCksbmV3IE84KHRoaXMuYSl9LEkoZG4sIkltbXV0YWJsZUJpTWFwIiwyMDMwKSxEKDIwNzUsMSx7fSksSShkbiwiSW1tdXRhYmxlQ29sbGVjdGlvbi9CdWlsZGVyIiwyMDc1KSxEKDEwMzUsNzE5LFN4LFNKZSksSShkbiwiSW1tdXRhYmxlRW51bVNldCIsMTAzNSksRCg5ODAsMzk5LHRULHJpdCksaC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLlhiKHQpfSxJKGRuLCJJbW11dGFibGVMaXN0LzEiLDk4MCksRCg5NzksMjA3NSx7fSxHcnQpLEkoZG4sIkltbXV0YWJsZUxpc3QvQnVpbGRlciIsOTc5KSxEKDYyMywyMDQsZVQsYmspLGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLk9iKCl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzLmEuUGIoKSw0NCkubGQoKX0sSShkbiwiSW1tdXRhYmxlTWFwLzEiLDYyMyksRCgxMDU0LDEse30sUiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDQ0KS5sZCgpfSxJKGRuLCJJbW11dGFibGVNYXAvMm1ldGhvZHJlZiRnZXRLZXkkVHlwZSIsMTA1NCksRCgxMDUzLDEse30sS3J0KSxJKGRuLCJJbW11dGFibGVNYXAvQnVpbGRlciIsMTA1MyksRCgyMDk4LDIwNzksU3gpLGguTWQ9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmIsdHx8KHRoaXMuYj1uZXcgRmllKHRoaXMpKX0saC5OZD1mdW5jdGlvbigpe3JldHVybiBuZXcgbzVlKHRoaXMsUEEodGhpcyxXZSh3YSxSbiwxLHRoaXMuZ2MoKSw1LDEpKSl9LEkoZG4sIkltbXV0YWJsZVNldC9DYWNoaW5nQXNMaXN0IiwyMDk4KSxEKDIwOTksMjA5OCxTeCksaC5LYz1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PU1tKHRoaXMuYSkuT2QoKSxuZXcgYmsodCl9LGguTmQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEZpZSh0aGlzKX0saC5KYz1mdW5jdGlvbih0KXt2YXIgbixyO2ZvcihYcih0KSxyPXRoaXMuZ2MoKSxuPTA7bjxyO24rKyl0LkNkKGwoTW0odGhpcy5hKS5NZCgpLlhiKG4pLDQ0KS5sZCgpKX0saC5PZD1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PXRoaXMuYixpYWUodHx8KHRoaXMuYj1uZXcgRmllKHRoaXMpKSwwKX0saC5OYz1mdW5jdGlvbigpe3JldHVybiBDYWUodGhpcy5nYygpLDEyOTYsbmV3IHpJKHRoaXMpKX0sSShkbiwiSW5kZXhlZEltbXV0YWJsZVNldCIsMjA5OSksRCgxMjMwLDIwOTksU3gsTFFlKSxoLktjPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9TW0odGhpcy5hKS5PZCgpLG5ldyBiayh0KX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLl9iKHQpfSxoLkpjPWZ1bmN0aW9uKHQpe1hyKHQpLG1BKHRoaXMuYSxuZXcgeTUodCkpfSxoLk9kPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9TW0odGhpcy5hKS5PZCgpLG5ldyBiayh0KX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX0saC5OYz1mdW5jdGlvbigpe3JldHVybiBOTyhNbSh0aGlzLmEpLk5jKCksbmV3IFIpfSxJKGRuLCJJbW11dGFibGVNYXBLZXlTZXQiLDEyMzApLEQoMTIzMSwxLHt9LHk1KSxoLllkPWZ1bmN0aW9uKHQsbil7d2QoKSx0aGlzLmEuQ2QodCl9LEkoZG4sIkltbXV0YWJsZU1hcEtleVNldC9sYW1iZGEkMCRUeXBlIiwxMjMxKSxEKDEyMjcsMjA3OCx0RWUsTVFlKSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBFYWUodGhpcyl9LGguTWQ9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1NbSh0aGlzLmEpLk1kKCksbmV3IG1udCh0aGlzLHQpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiB0IT1udWxsJiZTOG4obmV3IEVhZSh0aGlzKSx0KX0saC5PZD1mdW5jdGlvbigpe3JldHVybiBuZXcgRWFlKHRoaXMpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpfSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIE5PKE1tKHRoaXMuYSkuTmMoKSxuZXcgRil9LEkoZG4sIkltbXV0YWJsZU1hcFZhbHVlcyIsMTIyNyksRCgxMjI4LDEse30sRiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDQ0KS5tZCgpfSxJKGRuLCJJbW11dGFibGVNYXBWYWx1ZXMvMG1ldGhvZHJlZiRnZXRWYWx1ZSRUeXBlIiwxMjI4KSxEKDYzNywyMDQsZVQsRWFlKSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5PYigpfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcy5hLlBiKCksNDQpLm1kKCl9LEkoZG4sIkltbXV0YWJsZU1hcFZhbHVlcy8xIiw2MzcpLEQoMTIyOSwyMDk3LG5ULG1udCksaC5aZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguWGI9ZnVuY3Rpb24odCl7cmV0dXJuIGwodGhpcy5iLlhiKHQpLDQ0KS5tZCgpfSxJKGRuLCJJbW11dGFibGVNYXBWYWx1ZXMvMiIsMTIyOSksRCgxMjMyLDEse30sekkpLGgudGQ9ZnVuY3Rpb24odCl7cmV0dXJuIFFzdCh0aGlzLmEsdCl9LEkoZG4sIkluZGV4ZWRJbW11dGFibGVTZXQvMG1ldGhvZHJlZiRnZXQkVHlwZSIsMTIzMiksRCg2MzgsMjA5NyxuVCxGaWUpLGguWmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLlhiPWZ1bmN0aW9uKHQpe3JldHVybiBRc3QodGhpcy5hLHQpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5hLmdjKCl9LEkoZG4sIkluZGV4ZWRJbW11dGFibGVTZXQvMSIsNjM4KSxEKDQzLDEse30saiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDIwKS5LYygpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0sSShkbiwiSXRlcmFibGVzLzEwIiw0MyksRCgxMDU1LDU0NyxoZyxqaXQpLGguSmM9ZnVuY3Rpb24odCl7WHIodCksdGhpcy5iLkpjKG5ldyAkWmUodGhpcy5hLHQpKX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBseWUodGhpcyl9LEkoZG4sIkl0ZXJhYmxlcy80IiwxMDU1KSxEKDEwNTYsMSxmciwkWmUpLGguQ2Q9ZnVuY3Rpb24odCl7bGxuKHRoaXMuYix0aGlzLmEsdCl9LEkoZG4sIkl0ZXJhYmxlcy80L2xhbWJkYSQwJFR5cGUiLDEwNTYpLEQoMTA1Nyw1NDcsaGcsJGl0KSxoLkpjPWZ1bmN0aW9uKHQpe1hyKHQpLHRvKHRoaXMuYSxuZXcgcVplKHQsdGhpcy5iKSl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gZHIobmV3IG9yKHRoaXMuYSksdGhpcy5iKX0sSShkbiwiSXRlcmFibGVzLzUiLDEwNTcpLEQoMTA1OCwxLGZyLHFaZSksaC5DZD1mdW5jdGlvbih0KXt0aGlzLmEuQ2QoYW50KHQpKX0sSShkbiwiSXRlcmFibGVzLzUvbGFtYmRhJDAkVHlwZSIsMTA1OCksRCgxMDg3LDIwNCxlVCx3OCksaC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuT2IoKX0saC5QYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuUGIoKX0sSShkbiwiSXRlcmF0b3JzLzEiLDEwODcpLEQoMTA4OCw3MTMsZVQselplKSxoLlliPWZ1bmN0aW9uKCl7Zm9yKHZhciB0O3RoaXMuYi5PYigpOylpZih0PXRoaXMuYi5QYigpLHRoaXMuYS5MYih0KSlyZXR1cm4gdDtyZXR1cm4gdGhpcy5lPTIsbnVsbH0sSShkbiwiSXRlcmF0b3JzLzUiLDEwODgpLEQoNDk3LDEsT2EpLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuT2IoKX0saC5QYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkKHRoaXMuYi5QYigpKX0saC5RYj1mdW5jdGlvbigpe3RoaXMuYi5RYigpfSxJKGRuLCJUcmFuc2Zvcm1lZEl0ZXJhdG9yIiw0OTcpLEQoMTA4OSw0OTcsT2EsS250KSxoLiRkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEuS2IodCl9LEkoZG4sIkl0ZXJhdG9ycy82IiwxMDg5KSxEKDczMiwyMDQsZVQscUkpLGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5hfSxoLlBiPWZ1bmN0aW9uKCl7aWYodGhpcy5hKXRocm93IHVlKG5ldyBfYyk7cmV0dXJuIHRoaXMuYT0hMCx0aGlzLmJ9LGguYT0hMSxJKGRuLCJJdGVyYXRvcnMvOSIsNzMyKSxEKDEwODYsMzk5LHRULGhzdCksaC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hW3RoaXMuYit0XX0saC5iPTA7dmFyIHM2dDtJKGRuLCJJdGVyYXRvcnMvQXJyYXlJdHIiLDEwODYpLEQoMzgsMSx7Mzg6MSw1MToxfSxociksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIGpyKHRoaXMpfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIHhyKHRoaXMpfSxoLlFiPWZ1bmN0aW9uKCl7aWYoIXRoaXMuYyl0aHJvdyB1ZShuZXcgbmMoSmtlKSk7dGhpcy5jLlFiKCksdGhpcy5jPW51bGx9LEkoZG4sIkl0ZXJhdG9ycy9Db25jYXRlbmF0ZWRJdGVyYXRvciIsMzgpLEQoMjIsMSx7MzoxLDM0OjEsMjI6MX0pLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFBKZSh0aGlzLGwodCwyMikpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5IYj1mdW5jdGlvbigpe3JldHVybiBmdyh0aGlzKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBhYWUodGhpcyl9LGguZz0wO3ZhciBIcj1JKFZjLCJFbnVtIiwyMik7RCg1NDksMjIsezU0OToxLDM6MSwzNDoxLDIyOjEsNTE6MX0sQW50KSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5QYj1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyBfYyl9LGguUWI9ZnVuY3Rpb24oKXtSayghMSl9O3ZhciBFMGUsYTZ0PUZyKGRuLCJJdGVyYXRvcnMvRW1wdHlNb2RpZmlhYmxlSXRlcmF0b3IiLDU0OSxIcixrZ24sVmhuKSxvNnQ7RCgxOTA3LDYyNyxKbSksSShkbiwiTGlua2VkSGFzaE11bHRpbWFwR3d0U2VyaWFsaXphdGlvbkRlcGVuZGVuY2llcyIsMTkwNyksRCgxOTA4LDE5MDcsSm0sRzB0KSxoLmhjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuYWUoQXkodGhpcy5iKSl9LGguJGI9ZnVuY3Rpb24oKXttVih0aGlzKSxXSSh0aGlzLmEsdGhpcy5hKX0saC5wZD1mdW5jdGlvbigpe3JldHVybiBuZXcgbmFlKEF5KHRoaXMuYikpfSxoLmljPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQTB0KHRoaXMsdCx0aGlzLmIpfSxoLmtjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB2NWUodGhpcyl9LGgubGM9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gbmV3IGtuKCh0PXRoaXMuZyxsKHR8fCh0aGlzLmc9bmV3IFV3ZSh0aGlzKSksMjEpKSwxNyl9LGguZWM9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmksdHx8KHRoaXMuaT1uZXcgcTUodGhpcyx0aGlzLmMpKX0saC5uYz1mdW5jdGlvbigpe3JldHVybiBuZXcgS3dlKG5ldyB2NWUodGhpcykpfSxoLm9jPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIE5PKG5ldyBrbigodD10aGlzLmcsbCh0fHwodGhpcy5nPW5ldyBVd2UodGhpcykpLDIxKSksMTcpLG5ldyBLKX0saC5iPTIsSShkbiwiTGlua2VkSGFzaE11bHRpbWFwIiwxOTA4KSxEKDE5MTEsMSx7fSxLKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsNDQpLm1kKCl9LEkoZG4sIkxpbmtlZEhhc2hNdWx0aW1hcC8wbWV0aG9kcmVmJGdldFZhbHVlJFR5cGUiLDE5MTEpLEQoODM0LDEsT2EsdjVlKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gUDNuKHRoaXMpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYSE9dGhpcy5iLmF9LGguUWI9ZnVuY3Rpb24oKXtSayghIXRoaXMuYyksY2N0KHRoaXMuYix0aGlzLmMuZyx0aGlzLmMuaSksdGhpcy5jPW51bGx9LEkoZG4sIkxpbmtlZEhhc2hNdWx0aW1hcC8xIiw4MzQpLEQoMjI3LDI0Nix7MzU4OjEsMjQ2OjEsMjI3OjEsNjA0OjEsMzoxLDQ0OjF9LFM1ZSksaC5fZD1mdW5jdGlvbigpe3JldHVybiBsKExmKHRoaXMuZiksNjA0KX0saC5hZT1mdW5jdGlvbih0KXt0aGlzLmM9dH0saC5iZT1mdW5jdGlvbih0KXt0aGlzLmY9dH0saC5kPTA7dmFyIGM2dD1JKGRuLCJMaW5rZWRIYXNoTXVsdGltYXAvVmFsdWVFbnRyeSIsMjI3KTtEKDE5MDksMjA2OCx7NjA0OjEsMjA6MSwzMToxLDE2OjEsMjE6MX0sQTB0KSxoLkZjPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvLGY7Zm9yKGY9WXIobW8oZmcsaWcoWXIobW8odD09bnVsbD8wOmVzKHQpLGRnKSksMTUpKSksbj1mJnRoaXMuYi5sZW5ndGgtMSxvPXRoaXMuYltuXSxyPW87cjtyPXIuYSlpZihyLmQ9PWYmJnlkKHIuaSx0KSlyZXR1cm4hMTtyZXR1cm4gYT1uZXcgUzVlKHRoaXMuYyx0LGYsbyksUkplKHRoaXMuZCxhKSxhLmY9dGhpcyx0aGlzLmQ9YSxXSShsKExmKHRoaXMuZy5hLmIpLDIyNyksYSksV0koYSx0aGlzLmcuYSksdGhpcy5iW25dPWEsKyt0aGlzLmYsKyt0aGlzLmUsVDhuKHRoaXMpLCEwfSxoLiRiPWZ1bmN0aW9uKCl7dmFyIHQsbjtmb3IoYU8odGhpcy5iLG51bGwpLHRoaXMuZj0wLHQ9dGhpcy5hO3QhPXRoaXM7dD10Ll9kKCkpbj1sKHQsMjI3KSxXSShsKExmKG4uYiksMjI3KSxsKExmKG4uZSksMjI3KSk7dGhpcy5hPXRoaXMsdGhpcy5kPXRoaXMsKyt0aGlzLmV9LGguSGM9ZnVuY3Rpb24odCl7dmFyIG4scjtmb3Iocj1ZcihtbyhmZyxpZyhZcihtbyh0PT1udWxsPzA6ZXModCksZGcpKSwxNSkpKSxuPXRoaXMuYltyJnRoaXMuYi5sZW5ndGgtMV07bjtuPW4uYSlpZihuLmQ9PXImJnlkKG4uaSx0KSlyZXR1cm4hMDtyZXR1cm4hMX0saC5KYz1mdW5jdGlvbih0KXt2YXIgbjtmb3IoWHIodCksbj10aGlzLmE7biE9dGhpcztuPW4uX2QoKSl0LkNkKGwobiwyMjcpLmkpfSxoLl9kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgcmF0KHRoaXMpfSxoLk1jPWZ1bmN0aW9uKHQpe3JldHVybiB1YnQodGhpcyx0KX0saC5hZT1mdW5jdGlvbih0KXt0aGlzLmQ9dH0saC5iZT1mdW5jdGlvbih0KXt0aGlzLmE9dH0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZ9LGguZT0wLGguZj0wLEkoZG4sIkxpbmtlZEhhc2hNdWx0aW1hcC9WYWx1ZVNldCIsMTkwOSksRCgxOTEwLDEsT2EscmF0KSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4gcTRlKHRoaXMpLHRoaXMuYiE9dGhpcy5jfSxoLlBiPWZ1bmN0aW9uKCl7dmFyIHQsbjtpZihxNGUodGhpcyksdGhpcy5iPT10aGlzLmMpdGhyb3cgdWUobmV3IF9jKTtyZXR1cm4gdD1sKHRoaXMuYiwyMjcpLG49dC5pLHRoaXMuZD10LHRoaXMuYj1sKExmKHQuZiksNjA0KSxufSxoLlFiPWZ1bmN0aW9uKCl7cTRlKHRoaXMpLFJrKCEhdGhpcy5kKSx1YnQodGhpcy5jLHRoaXMuZC5pKSx0aGlzLmE9dGhpcy5jLmUsdGhpcy5kPW51bGx9LGguYT0wLEkoZG4sIkxpbmtlZEhhc2hNdWx0aW1hcC9WYWx1ZVNldC8xIiwxOTEwKSxEKDc4MCwyMDg0LEptLFV0dCksaC5aYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PXRoaXMuZix0fHwodGhpcy5mPW5ldyBDM2UodGhpcykpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiBFY2UodGhpcyx0KX0saC5jYz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHNzZSh0aGlzLHQpfSxoLmZjPWZ1bmN0aW9uKHQpe3JldHVybiBNNmUodGhpcyx0KX0saC4kYj1mdW5jdGlvbigpe2pzdCh0aGlzKX0saC5fYj1mdW5jdGlvbih0KXtyZXR1cm4gWVplKHRoaXMsdCl9LGguYWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEMzZSh0aGlzKX0saC5iYz1mdW5jdGlvbigpe3JldHVybiBuZXcgeGllKHRoaXMpfSxoLnFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgc3NlKHRoaXMsdCl9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5hfSxoLnJjPWZ1bmN0aW9uKHQpe3JldHVybiBNNmUodGhpcyx0KX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGguYz0wLGguZD0wLEkoZG4sIkxpbmtlZExpc3RNdWx0aW1hcCIsNzgwKSxEKDU2LDMxLGlUKSxoLmpkPWZ1bmN0aW9uKHQpeyRtKHRoaXMsdCl9LGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtuKHRoaXMsMTYpfSxoLmJkPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IEhwKCJBZGQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGxpc3QiKSl9LGguRmM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYmQodGhpcy5nYygpLHQpLCEwfSxoLmNkPWZ1bmN0aW9uKHQsbil7dmFyIHIsYSxvO2ZvcihucihuKSxyPSExLG89bi5LYygpO28uT2IoKTspYT1vLlBiKCksdGhpcy5iZCh0KyssYSkscj0hMDtyZXR1cm4gcn0saC4kYj1mdW5jdGlvbigpe3RoaXMuY2UoMCx0aGlzLmdjKCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiBPOWUodGhpcyx0KX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBxN2UodGhpcyl9LGguZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIFhodCh0aGlzLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrcih0aGlzKX0saC5lZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZkKDApfSxoLmZkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgVWEodGhpcyx0KX0saC5nZD1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgSHAoIlJlbW92ZSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgbGlzdCIpKX0saC5jZT1mdW5jdGlvbih0LG4pe3ZhciByLGE7Zm9yKGE9dGhpcy5mZCh0KSxyPXQ7cjxuOysrcilhLlBiKCksYS5RYigpfSxoLmhkPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IEhwKCJTZXQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGxpc3QiKSl9LGgua2Q9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbmV3IFpwKHRoaXMsdCxuKX0saC5qPTAsSShMciwiQWJzdHJhY3RMaXN0Iiw1NiksRCgyMDYyLDU2LGlUKSxoLmJkPWZ1bmN0aW9uKHQsbil7UGsodGhpcyx0LG4pfSxoLmNkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEwwdCh0aGlzLHQsbil9LGguWGI9ZnVuY3Rpb24odCl7cmV0dXJuIGZmKHRoaXMsdCl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZCgwKX0saC5nZD1mdW5jdGlvbih0KXtyZXR1cm4ga3VlKHRoaXMsdCl9LGguaGQ9ZnVuY3Rpb24odCxuKXt2YXIgcixhO3I9dGhpcy5mZCh0KTt0cnl7cmV0dXJuIGE9ci5QYigpLHIuV2IobiksYX1jYXRjaChvKXt0aHJvdyBvPWJzKG8pLERlKG8sMTEyKT91ZShuZXcgdGMoIkNhbid0IHNldCBlbGVtZW50ICIrdCkpOnVlKG8pfX0sSShMciwiQWJzdHJhY3RTZXF1ZW50aWFsTGlzdCIsMjA2MiksRCg2NDYsMjA2MixpVCxzc2UpLGguZmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFludCh0aGlzLHQpfSxoLmdjPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9bChjcih0aGlzLmEuYix0aGlzLmIpLDI2MCksdD90LmE6MH0sSShkbiwiTGlua2VkTGlzdE11bHRpbWFwLzEiLDY0NiksRCgxMzE2LDIwNjgsVGwseGllKSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBZWmUodGhpcy5hLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBnZnQodGhpcy5hKX0saC5NYz1mdW5jdGlvbih0KXtyZXR1cm4hTTZlKHRoaXMuYSx0KS5hLmRjKCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gZF8odGhpcy5hLmIpfSxJKGRuLCJMaW5rZWRMaXN0TXVsdGltYXAvMUtleVNldEltcGwiLDEzMTYpLEQoMTMxNSwxLE9hLGdmdCksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIEg0ZSh0aGlzKSwhIXRoaXMuY30saC5QYj1mdW5jdGlvbigpe2lmKEg0ZSh0aGlzKSwhdGhpcy5jKXRocm93IHVlKG5ldyBfYyk7dGhpcy5hPXRoaXMuYyxuYSh0aGlzLmQsdGhpcy5hLmEpO2RvIHRoaXMuYz10aGlzLmMuYjt3aGlsZSh0aGlzLmMmJiFuYSh0aGlzLmQsdGhpcy5jLmEpKTtyZXR1cm4gdGhpcy5hLmF9LGguUWI9ZnVuY3Rpb24oKXtINGUodGhpcyksUmsoISF0aGlzLmEpLGlIKG5ldyB6b2UodGhpcy5lLHRoaXMuYS5hKSksdGhpcy5hPW51bGwsdGhpcy5iPXRoaXMuZS5jfSxoLmI9MCxJKGRuLCJMaW5rZWRMaXN0TXVsdGltYXAvRGlzdGluY3RLZXlJdGVyYXRvciIsMTMxNSksRCgyNjAsMSx7MjYwOjF9LEI1ZSksaC5hPTAsSShkbiwiTGlua2VkTGlzdE11bHRpbWFwL0tleUxpc3QiLDI2MCksRCg1MTEsMzU4LHszNTg6MSw1MTE6MSw0NDoxfSxIWmUpLGgubGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLm1kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0saC5uZD1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbj10aGlzLmYsdGhpcy5mPXQsbn0sSShkbiwiTGlua2VkTGlzdE11bHRpbWFwL05vZGUiLDUxMSksRCg1NjYsMSxsZyx6b2UseXB0KSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguUmI9ZnVuY3Rpb24odCl7dGhpcy5lPWRrZSh0aGlzLmYsdGhpcy5iLHQsdGhpcy5jKSwrK3RoaXMuZCx0aGlzLmE9bnVsbH0saC5PYj1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5jfSxoLlNiPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmV9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gRzZlKHRoaXMpfSxoLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0saC5VYj1mdW5jdGlvbigpe3JldHVybiBuaHQodGhpcyl9LGguVmI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kLTF9LGguUWI9ZnVuY3Rpb24oKXtSayghIXRoaXMuYSksdGhpcy5hIT10aGlzLmM/KHRoaXMuZT10aGlzLmEuZSwtLXRoaXMuZCk6dGhpcy5jPXRoaXMuYS5jLHpUbih0aGlzLmYsdGhpcy5hKSx0aGlzLmE9bnVsbH0saC5XYj1mdW5jdGlvbih0KXtDeWUoISF0aGlzLmEpLHRoaXMuYS5mPXR9LGguZD0wLEkoZG4sIkxpbmtlZExpc3RNdWx0aW1hcC9WYWx1ZUZvcktleUl0ZXJhdG9yIiw1NjYpLEQoMTAzMSw1NixpVCksaC5iZD1mdW5jdGlvbih0LG4pe3RoaXMuYS5iZCh0LG4pfSxoLmNkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRoaXMuYS5jZCh0LG4pfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEuSGModCl9LGguWGI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYS5YYih0KX0saC5nZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLmdkKHQpfSxoLmhkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRoaXMuYS5oZCh0LG4pfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpfSxJKGRuLCJMaXN0cy9BYnN0cmFjdExpc3RXcmFwcGVyIiwxMDMxKSxEKDEwMzIsMTAzMSxCd3QpLEkoZG4sIkxpc3RzL1JhbmRvbUFjY2Vzc0xpc3RXcmFwcGVyIiwxMDMyKSxEKDEwMzQsMTAzMixCd3QsS1plKSxoLmZkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEuZmQodCl9LEkoZG4sIkxpc3RzLzEiLDEwMzQpLEQoNDQxLDU2LHs0NDE6MSwyMDoxLDMxOjEsNTY6MSwxNjoxLDE1OjF9LHAzZSksaC5iZD1mdW5jdGlvbih0LG4pe3RoaXMuYS5iZChIayh0aGlzLHQpLG4pfSxoLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLiRiKCl9LGguWGI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYS5YYihtNWUodGhpcyx0KSl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gem90KHRoaXMsMCl9LGguZmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHpvdCh0aGlzLHQpfSxoLmdkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEuZ2QobTVlKHRoaXMsdCkpfSxoLmNlPWZ1bmN0aW9uKHQsbil7KG1jdCh0LG4sdGhpcy5hLmdjKCkpLGxmKHRoaXMuYS5rZChIayh0aGlzLG4pLEhrKHRoaXMsdCkpKSkuJGIoKX0saC5oZD1mdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLmEuaGQobTVlKHRoaXMsdCksbil9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCl9LGgua2Q9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbWN0KHQsbix0aGlzLmEuZ2MoKSksbGYodGhpcy5hLmtkKEhrKHRoaXMsbiksSGsodGhpcyx0KSkpfSxJKGRuLCJMaXN0cy9SZXZlcnNlTGlzdCIsNDQxKSxEKDEwMzAsNDQxLHs0NDE6MSwyMDoxLDMxOjEsNTY6MSwxNjoxLDE1OjEsNTk6MX0sX0plKSxJKGRuLCJMaXN0cy9SYW5kb21BY2Nlc3NSZXZlcnNlTGlzdCIsMTAzMCksRCgxMDMzLDEsbGcsVlplKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguUmI9ZnVuY3Rpb24odCl7dGhpcy5jLlJiKHQpLHRoaXMuYy5VYigpLHRoaXMuYT0hMX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuU2IoKX0saC5TYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuT2IoKX0saC5QYj1mdW5jdGlvbigpe2lmKCF0aGlzLmMuU2IoKSl0aHJvdyB1ZShuZXcgX2MpO3JldHVybiB0aGlzLmE9ITAsdGhpcy5jLlViKCl9LGguVGI9ZnVuY3Rpb24oKXtyZXR1cm4gSGsodGhpcy5iLHRoaXMuYy5UYigpKX0saC5VYj1mdW5jdGlvbigpe2lmKCF0aGlzLmMuT2IoKSl0aHJvdyB1ZShuZXcgX2MpO3JldHVybiB0aGlzLmE9ITAsdGhpcy5jLlBiKCl9LGguVmI9ZnVuY3Rpb24oKXtyZXR1cm4gSGsodGhpcy5iLHRoaXMuYy5UYigpKS0xfSxoLlFiPWZ1bmN0aW9uKCl7UmsodGhpcy5hKSx0aGlzLmMuUWIoKSx0aGlzLmE9ITF9LGguV2I9ZnVuY3Rpb24odCl7Q3llKHRoaXMuYSksdGhpcy5jLldiKHQpfSxoLmE9ITEsSShkbiwiTGlzdHMvUmV2ZXJzZUxpc3QvMSIsMTAzMyksRCg0NDAsNDk3LE9hLGNfKSxoLiRkPWZ1bmN0aW9uKHQpe3JldHVybiBzcSh0KX0sSShkbiwiTWFwcy8xIiw0NDApLEQoNzEyLDQ5NyxPYSxLd2UpLGguJGQ9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCw0NCkubWQoKX0sSShkbiwiTWFwcy8yIiw3MTIpLEQoOTc1LDQ5NyxPYSxXbnQpLGguJGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBpdyh0LFp0dCh0aGlzLmEsdCkpfSxJKGRuLCJNYXBzLzMiLDk3NSksRCg5NzIsMjA2OSxUbCx5eiksaC5KYz1mdW5jdGlvbih0KXtXY24odGhpcy5hLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5rYygpfSxoLlJjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5OYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEubGMoKX0sSShkbiwiTWFwcy9JdGVyYXRvckJhc2VkQWJzdHJhY3RNYXAvMSIsOTcyKSxEKDk3MywxLHt9LHh6KSxoLllkPWZ1bmN0aW9uKHQsbil7dGhpcy5hLkNkKHQpfSxJKGRuLCJNYXBzL0tleVNldC9sYW1iZGEkMCRUeXBlIiw5NzMpLEQoOTcxLDMxLFd5LFdaZSksaC4kYj1mdW5jdGlvbigpe3RoaXMuYS4kYigpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEudWModCl9LGguSmM9ZnVuY3Rpb24odCl7WHIodCksdGhpcy5hLndjKG5ldyBpeSh0KSl9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmRjKCl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEt3ZSh0aGlzLmEudmMoKS5LYygpKX0saC5NYz1mdW5jdGlvbih0KXt2YXIgbixyO3RyeXtyZXR1cm4gTnkodGhpcyx0LCEwKX1jYXRjaChhKXtpZihhPWJzKGEpLERlKGEsNDgpKXtmb3Iocj10aGlzLmEudmMoKS5LYygpO3IuT2IoKTspaWYobj1sKHIuUGIoKSw0NCkseWQodCxuLm1kKCkpKXJldHVybiB0aGlzLmEuQmMobi5sZCgpKSwhMDtyZXR1cm4hMX1lbHNlIHRocm93IHVlKGEpfX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX0sSShkbiwiTWFwcy9WYWx1ZXMiLDk3MSksRCg5NzQsMSx7fSxpeSksaC5ZZD1mdW5jdGlvbih0LG4pe3RoaXMuYS5DZChuKX0sSShkbiwiTWFwcy9WYWx1ZXMvbGFtYmRhJDAkVHlwZSIsOTc0KSxEKDc1MiwyMDg1LFd3LEMzZSksaC54Yz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLl9iKHQpP3RoaXMuYS5jYyh0KTpudWxsfSxoLkJjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEuX2IodCk/dGhpcy5hLmZjKHQpOm51bGx9LGguJGI9ZnVuY3Rpb24oKXt0aGlzLmEuJGIoKX0saC5fYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLl9iKHQpfSxoLkVjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBISSh0aGlzKX0saC5EYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkVjKCl9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmRjKCl9LGguZWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmVjKCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmVjKCkuZ2MoKX0sSShkbiwiTXVsdGltYXBzL0FzTWFwIiw3NTIpLEQoMTEzNCwyMDY5LFRsLEhJKSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIGRobih0aGlzLmEuYS5lYygpLG5ldyBWSSh0aGlzKSl9LGguUmM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLk1jPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBPMXQodGhpcyx0KT8obj1sKExmKGwodCw0NCkpLDQ0KSxydW4odGhpcy5hLG4ubGQoKSksITApOiExfSxJKGRuLCJNdWx0aW1hcHMvQXNNYXAvRW50cnlTZXQiLDExMzQpLEQoMTEzOCwxLHt9LFZJKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBadHQodGhpcyx0KX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LEkoZG4sIk11bHRpbWFwcy9Bc01hcC9FbnRyeVNldC8xIiwxMTM4KSxEKDU1MiwyMDg3LHs1NTI6MSw4NDk6MSwyMDoxLDMxOjEsMTY6MX0sa3opLGguJGI9ZnVuY3Rpb24oKXttVih0aGlzLmEpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBpWmUodGhpcy5hLHQpfSxoLkpjPWZ1bmN0aW9uKHQpe1hyKHQpLHRvKFpfKHRoaXMuYSksbmV3IG1rKHQpKX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgY18oWl8odGhpcy5hKS5hLmtjKCkpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5kfSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIE5PKFpfKHRoaXMuYSkuTmMoKSxuZXcgZWUpfSxJKGRuLCJNdWx0aW1hcHMvS2V5cyIsNTUyKSxEKDExMzYsMSx7fSxlZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDQ0KS5sZCgpfSxJKGRuLCJNdWx0aW1hcHMvS2V5cy8wbWV0aG9kcmVmJGdldEtleSRUeXBlIiwxMTM2KSxEKDExMzUsNDk3LE9hLEFKZSksaC4kZD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHk4KGwodCw0NCkpfSxJKGRuLCJNdWx0aW1hcHMvS2V5cy8xIiwxMTM1KSxEKDIwODgsMSx7NDI1OjF9KSxoLkZiPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBEZSh0LDUwNCk/KG49bCh0LDQyNSksbCh0aGlzLmEubWQoKSwxNikuZ2MoKT09bChuLmEubWQoKSwxNikuZ2MoKSYmeWQodGhpcy5hLmxkKCksbi5hLmxkKCkpKTohMX0saC5IYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PXRoaXMuYS5sZCgpLCh0PT1udWxsPzA6ZXModCkpXmwodGhpcy5hLm1kKCksMTYpLmdjKCl9LGguSWI9ZnVuY3Rpb24oKXt2YXIgdCxuO3JldHVybiBuPWpfKHRoaXMuYS5sZCgpKSx0PWwodGhpcy5hLm1kKCksMTYpLmdjKCksdD09MT9uOm4rIiB4ICIrdH0sSShkbiwiTXVsdGlzZXRzL0Fic3RyYWN0RW50cnkiLDIwODgpLEQoNTA0LDIwODgsezUwNDoxLDQyNToxfSx5OCksSShkbiwiTXVsdGltYXBzL0tleXMvMS8xIiw1MDQpLEQoMTEzNywxLGZyLG1rKSxoLkNkPWZ1bmN0aW9uKHQpe3RoaXMuYS5DZChsKHQsNDQpLmxkKCkpfSxJKGRuLCJNdWx0aW1hcHMvS2V5cy9sYW1iZGEkMSRUeXBlIiwxMTM3KSxEKDExNDAsMSxmcixpZSksaC5DZD1mdW5jdGlvbih0KXtCZG4obCh0LDQyNSkpfSxJKGRuLCJNdWx0aXNldC9sYW1iZGEkMCRUeXBlIiwxMTQwKSxEKDc1MywxLGZyLGtpZSksaC5DZD1mdW5jdGlvbih0KXt4d24odGhpcy5hLGwodCw0MjUpKX0sSShkbiwiTXVsdGlzZXQvbGFtYmRhJDEkVHlwZSIsNzUzKSxEKDExNDEsMSx7fSxvZSksSShkbiwiTXVsdGlzZXRzLzBtZXRob2RyZWYkYWRkJFR5cGUiLDExNDEpLEQoNzU0LDEse30scGUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIFZibihsKHQsNDI1KSl9LEkoZG4sIk11bHRpc2V0cy9sYW1iZGEkMSRUeXBlIiw3NTQpLEQoMjEwNiwxLHlQKSxJKGRuLCJSYW5nZUd3dFNlcmlhbGl6YXRpb25EZXBlbmRlbmNpZXMiLDIxMDYpLEQoNTIxLDIxMDYsezE3ODoxLDUyMToxLDM6MSw0NjoxfSxXOGUpLGguTGI9ZnVuY3Rpb24odCl7cmV0dXJuIENzdCh0aGlzLGwodCwzNCkpfSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBDc3QodGhpcyxsKHQsMzQpKX0saC5GYj1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gRGUodCw1MjEpPyhuPWwodCw1MjEpLHJ4ZSh0aGlzLmEsbi5hKSYmcnhlKHRoaXMuYixuLmIpKTohMX0saC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuSGIoKSozMSt0aGlzLmIuSGIoKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBIY3QodGhpcy5hLHRoaXMuYil9LEkoZG4sIlJhbmdlIiw1MjEpLEQoNjU0LDIwOTcsblQsbzVlKSxoLmZkPWZ1bmN0aW9uKHQpe3JldHVybiBpYWUodGhpcy5iLHQpfSxoLlpkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gYWIodGhpcy5iLHQpfSxoLlBkPWZ1bmN0aW9uKHQpe3JldHVybiBpYWUodGhpcy5iLHQpfSxJKGRuLCJSZWd1bGFySW1tdXRhYmxlQXNMaXN0Iiw2NTQpLEQoNjU2LDIxMDUsblQsb29lKSxoLlJkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sSShkbiwiUmVndWxhckltbXV0YWJsZUxpc3QiLDY1NiksRCg1NDgsNzMwLHJULFd3ZSxZd2UpLEkoZG4sIlJlZ3VsYXJJbW11dGFibGVNYXAiLDU0OCksRCg3MzEsNzE5LFN4LGszZSk7dmFyIFZTZTtJKGRuLCJSZWd1bGFySW1tdXRhYmxlU2V0Iiw3MzEpLEQoMjA3NCxxMSxUbCksaC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgTDVlKHRoaXMuYSx0aGlzLmIpfSxoLkZjPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGguR2M9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0saC4kYj1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyBRcil9LGguTWM9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0sSShkbiwiU2V0cy9TZXRWaWV3IiwyMDc0KSxEKDk3NiwyMDc0LFRsLEdaZSksaC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgTDVlKHRoaXMuYSx0aGlzLmIpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBBYWUodGhpcy5hLHQpJiZ0aGlzLmIuSGModCl9LGguSWM9ZnVuY3Rpb24odCl7cmV0dXJuIEVOKHRoaXMuYSx0KSYmdGhpcy5iLkljKHQpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIG1kdCh0aGlzLmIsdGhpcy5hKX0saC5MYz1mdW5jdGlvbigpe3JldHVybiBGaShuZXcgYm4obnVsbCxuZXcga24odGhpcy5hLDEpKSxuZXcgVHoodGhpcy5iKSl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4geU4odGhpcyl9LGguT2M9ZnVuY3Rpb24oKXtyZXR1cm4gRmkobmV3IGJuKG51bGwsbmV3IGtuKHRoaXMuYSwxKSksbmV3IEV6KHRoaXMuYikpfSxJKGRuLCJTZXRzLzIiLDk3NiksRCg5NzcsMSx0aSxFeiksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLkhjKHQpfSxJKGRuLCJTZXRzLzIvMG1ldGhvZHJlZiRjb250YWlucyRUeXBlIiw5NzcpLEQoNzE0LDcxMyxlVCxMNWUpLGguWWI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ7Z3llKHRoaXMuYSk7KWlmKHQ9Y0EodGhpcy5hKSx0aGlzLmMuSGModCkpcmV0dXJuIHQ7cmV0dXJuIHRoaXMuZT0yLG51bGx9LEkoZG4sIlNldHMvMi8xIiw3MTQpLEQoOTc4LDEsdGksVHopLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYS5IYyh0KX0sSShkbiwiU2V0cy8yLzFtZXRob2RyZWYkY29udGFpbnMkVHlwZSIsOTc4KSxEKDYxNiwyMDczLHs2MTY6MSwzOjEsMjA6MSwxNjoxLDI3NzoxLDIxOjEsODc6MX0sb290KSxoLktkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0saC5MZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGguV2Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLkpjPWZ1bmN0aW9uKHQpe3RoaXMuYS5KYyh0KX0saC5MYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuTGMoKX0saC5PYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuT2MoKX0sSShkbiwiU2V0cy9Vbm1vZGlmaWFibGVOYXZpZ2FibGVTZXQiLDYxNiksRCgyMDMxLDIwMzAsclQsaGF0KSxoLlZkPWZ1bmN0aW9uKCl7cmV0dXJuIHdkKCksbmV3IE84KHRoaXMuYSl9LGguQ2M9ZnVuY3Rpb24oKXtyZXR1cm4gd2QoKSxuZXcgTzgodGhpcy5hKX0saC54ZD1mdW5jdGlvbigpe3JldHVybiB3ZCgpLG5ldyBPOCh0aGlzLmEpfSxJKGRuLCJTaW5nbGV0b25JbW11dGFibGVCaU1hcCIsMjAzMSksRCg2NTcsMjEwNSxuVCxTYWUpLGguUmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxJKGRuLCJTaW5nbGV0b25JbW11dGFibGVMaXN0Iiw2NTcpLEQoMzYzLDIwNzksU3gsTzgpLGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHFJKHRoaXMuYSl9LGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIFBpKHRoaXMuYSx0KX0saC5PZD1mdW5jdGlvbigpe3JldHVybiBuZXcgcUkodGhpcy5hKX0saC5nYz1mdW5jdGlvbigpe3JldHVybiAxfSxJKGRuLCJTaW5nbGV0b25JbW11dGFibGVTZXQiLDM2MyksRCgxMTQ4LDEse30sYmUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxNTkpfSxJKGRuLCJTdHJlYW1zL2xhbWJkYSQwJFR5cGUiLDExNDgpLEQoMTE0OSwxLFFVLEN6KSxoLmRlPWZ1bmN0aW9uKCl7Wm1uKHRoaXMuYSl9LEkoZG4sIlN0cmVhbXMvbGFtYmRhJDEkVHlwZSIsMTE0OSksRCgxNzI1LDE3MjQsSm0sVWF0KSxoLlpiPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9dGhpcy5mLGwobCh0fHwodGhpcy5mPURlKHRoaXMuYywxMzkpP25ldyBxXyh0aGlzLGwodGhpcy5jLDEzOSkpOkRlKHRoaXMuYywxMzMpP25ldyBfTyh0aGlzLGwodGhpcy5jLDEzMykpOm5ldyBMayh0aGlzLHRoaXMuYykpLDEzMyksMTM5KX0saC5oYz1mdW5jdGlvbigpe3JldHVybiBuZXcgS3AodGhpcy5iKX0saC5wZD1mdW5jdGlvbigpe3JldHVybiBuZXcgS3AodGhpcy5iKX0saC5lYz1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PXRoaXMuaSxsKGwodHx8KHRoaXMuaT1EZSh0aGlzLmMsMTM5KT9uZXcgQWsodGhpcyxsKHRoaXMuYywxMzkpKTpEZSh0aGlzLmMsMTMzKT9uZXcgdE8odGhpcyxsKHRoaXMuYywxMzMpKTpuZXcgcTUodGhpcyx0aGlzLmMpKSw4NyksMjc3KX0saC5hYz1mdW5jdGlvbigpe3JldHVybiBEZSh0aGlzLmMsMTM5KT9uZXcgcV8odGhpcyxsKHRoaXMuYywxMzkpKTpEZSh0aGlzLmMsMTMzKT9uZXcgX08odGhpcyxsKHRoaXMuYywxMzMpKTpuZXcgTGsodGhpcyx0aGlzLmMpfSxoLmljPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsJiZ0aGlzLmEuTmUodCx0KSxuZXcgS3AodGhpcy5iKX0sSShkbiwiVHJlZU11bHRpbWFwIiwxNzI1KSxEKDgyLDEsezM6MSw4MjoxfSksaC5lZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEVycm9yKHQpfSxoLmZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZX0saC5nZT1mdW5jdGlvbigpe3ZhciB0LG4scjtmb3Iocj0odGhpcy5rPT1udWxsJiYodGhpcy5rPVdlKFQwZSxkdCw4MiwwLDAsMSkpLHRoaXMuayksbj1XZSh3YSxSbiwxLHIubGVuZ3RoLDUsMSksdD0wO3Q8ci5sZW5ndGg7dCsrKW5bdF09clt0XS5lO3JldHVybiBufSxoLmhlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0saC5pZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmd9LGguamU9ZnVuY3Rpb24oKXtaY24odGhpcyxPYm4odGhpcy5lZShESCh0aGlzLHRoaXMuZykpKSksRFFlKHRoaXMpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIERIKHRoaXMsdGhpcy5pZSgpKX0saC5lPUZ3dCxoLmk9ITEsaC5uPSEwO3ZhciBUMGU9SShWYywiVGhyb3dhYmxlIiw4Mik7RCgxMDMsODIsezM6MSwxMDM6MSw4MjoxfSksSShWYywiRXhjZXB0aW9uIiwxMDMpLEQoNjMsMTAzLGxwLENtLEFjKSxJKFZjLCJSdW50aW1lRXhjZXB0aW9uIiw2MyksRCg2MDcsNjMsbHApLEkoVmMsIkpzRXhjZXB0aW9uIiw2MDcpLEQoODc1LDYwNyxscCksSShDUCwiSmF2YVNjcmlwdEV4Y2VwdGlvbkJhc2UiLDg3NSksRCg0ODYsODc1LHs0ODY6MSwzOjEsMTAzOjEsNjM6MSw4MjoxfSxVMHQpLGguaWU9ZnVuY3Rpb24oKXtyZXR1cm4gVzhuKHRoaXMpLHRoaXMuY30saC5rZT1mdW5jdGlvbigpe3JldHVybiBxZSh0aGlzLmIpPT09cWUoVVNlKT9udWxsOnRoaXMuYn07dmFyIFVTZTtJKHJFZSwiSmF2YVNjcmlwdEV4Y2VwdGlvbiIsNDg2KTt2YXIgdTZ0PUkockVlLCJKYXZhU2NyaXB0T2JqZWN0JCIsMCksQzBlO0QoMjA0NywxLHt9KSxJKHJFZSwiU2NoZWR1bGVyIiwyMDQ3KTt2YXIgYUs9MCxsNnQ9MCxvSz0tMTtEKDkwMiwyMDQ3LHt9LGFlKTt2YXIgR1NlO0koQ1AsIlNjaGVkdWxlckltcGwiLDkwMik7dmFyIFMwZTtEKDIwNTgsMSx7fSksSShDUCwiU3RhY2tUcmFjZUNyZWF0b3IvQ29sbGVjdG9yIiwyMDU4KSxEKDg3NiwyMDU4LHt9LG5lKSxoLmxlPWZ1bmN0aW9uKHQpe3ZhciBuPXt9LHI9W107dFtqbGVdPXI7Zm9yKHZhciBhPWFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyO2E7KXt2YXIgbz0oWGsoKSxhLm5hbWV8fChhLm5hbWU9TnduKGEudG9TdHJpbmcoKSkpKTtyLnB1c2gobyk7dmFyIGY9IjoiK28sZz1uW2ZdO2lmKGcpe3ZhciB3LEU7Zm9yKHc9MCxFPWcubGVuZ3RoO3c8RTt3KyspaWYoZ1t3XT09PWEpcmV0dXJufShnfHwobltmXT1bXSkpLnB1c2goYSksYT1hLmNhbGxlcn19LGgubWU9ZnVuY3Rpb24odCl7dmFyIG4scixhLG87Zm9yKGE9KFhrKCksdCYmdFtqbGVdP3RbamxlXTpbXSkscj1hLmxlbmd0aCxvPVdlKGFfZSxkdCwzMTksciwwLDEpLG49MDtuPHI7bisrKW9bbl09bmV3IFphZShhW25dLG51bGwsLTEpO3JldHVybiBvfSxJKENQLCJTdGFja1RyYWNlQ3JlYXRvci9Db2xsZWN0b3JMZWdhY3kiLDg3NiksRCgyMDU5LDIwNTgse30pLGgubGU9ZnVuY3Rpb24odCl7fSxoLm5lPWZ1bmN0aW9uKHQsbixyLGEpe3JldHVybiBuZXcgWmFlKG4sdCsiQCIrYSxyPDA/LTE6cil9LGgubWU9ZnVuY3Rpb24odCl7dmFyIG4scixhLG8sZixnO2lmKG89eDduKHQpLGY9V2UoYV9lLGR0LDMxOSwwLDAsMSksbj0wLGE9by5sZW5ndGgsYT09MClyZXR1cm4gZjtmb3IoZz16dnQodGhpcyxvWzBdKSx2bihnLmQsUmxlKXx8KGZbbisrXT1nKSxyPTE7cjxhO3IrKylmW24rK109enZ0KHRoaXMsb1tyXSk7cmV0dXJuIGZ9LEkoQ1AsIlN0YWNrVHJhY2VDcmVhdG9yL0NvbGxlY3Rvck1vZGVybiIsMjA1OSksRCg4NzcsMjA1OSx7fSxzZSksaC5uZT1mdW5jdGlvbih0LG4scixhKXtyZXR1cm4gbmV3IFphZShuLHQsLTEpfSxJKENQLCJTdGFja1RyYWNlQ3JlYXRvci9Db2xsZWN0b3JNb2Rlcm5Ob1NvdXJjZU1hcCIsODc3KSxEKDEwNjQsMSx7fSksSShzRWUsJHd0LDEwNjQpLEQoNjI0LDEwNjQsezYyNDoxfSxYc3QpO3ZhciBLU2U7SShpaGUsJHd0LDYyNCksRCgyMTAxLDEse30pLEkoc0VlLHp3dCwyMTAxKSxEKDIxMDIsMjEwMSx7fSksSShpaGUsend0LDIxMDIpLEQoMTEyMCwxLHt9LGRlKTt2YXIgTkw7SShpaGUsIkxvY2FsZUluZm8iLDExMjApLEQoMjAyNywxLHt9LFgpLGguYT0wLEkoaWhlLCJUaW1lWm9uZSIsMjAyNyksRCgxMjkzLDIxMDIse30sZ2UpLEkoImNvbS5nb29nbGUuZ3d0LmkxOG4uY2xpZW50LmltcGwuY2xkciIsIkRhdGVUaW1lRm9ybWF0SW5mb0ltcGwiLDEyOTMpLEQoNDQzLDEsezQ0MzoxfSxBaXQpLGguYT0hMSxoLmI9MCxJKHNFZSwiRGF0ZVRpbWVGb3JtYXQvUGF0dGVyblBhcnQiLDQ0MyksRCgyMDYsMSxxd3QsUXosUjdlLEt5ZSksaC5GZD1mdW5jdGlvbih0KXtyZXR1cm4gQWJuKHRoaXMsbCh0LDIwNikpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDIwNikmJmN3KFpjKHRoaXMucS5nZXRUaW1lKCkpLFpjKGwodCwyMDYpLnEuZ2V0VGltZSgpKSl9LGguSGI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1aYyh0aGlzLnEuZ2V0VGltZSgpKSxZcihtb2UodCx1Yih0LDMyKSkpfSxoLkliPWZ1bmN0aW9uKCl7dmFyIHQsbixyO3JldHVybiByPS10aGlzLnEuZ2V0VGltZXpvbmVPZmZzZXQoKSx0PShyPj0wPyIrIjoiIikrKHIvNjB8MCksbj1JcShiLk1hdGguYWJzKHIpJTYwKSwoVmd0KCksRTZ0KVt0aGlzLnEuZ2V0RGF5KCldKyIgIitUNnRbdGhpcy5xLmdldE1vbnRoKCldKyIgIitJcSh0aGlzLnEuZ2V0RGF0ZSgpKSsiICIrSXEodGhpcy5xLmdldEhvdXJzKCkpKyI6IitJcSh0aGlzLnEuZ2V0TWludXRlcygpKSsiOiIrSXEodGhpcy5xLmdldFNlY29uZHMoKSkrIiBHTVQiK3QrbisiICIrdGhpcy5xLmdldEZ1bGxZZWFyKCl9O3ZhciBjSz1JKExyLCJEYXRlIiwyMDYpO0QoMjAxNSwyMDYscXd0LGRndCksaC5hPSExLGguYj0wLGguYz0wLGguZD0wLGguZT0wLGguZj0wLGguZz0hMSxoLmk9MCxoLmo9MCxoLms9MCxoLm49MCxoLm89MCxoLnA9MCxJKCJjb20uZ29vZ2xlLmd3dC5pMThuLnNoYXJlZC5pbXBsIiwiRGF0ZVJlY29yZCIsMjAxNSksRCgyMDY0LDEse30pLGgucGU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0saC5xZT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLnJlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGguc2U9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0saC50ZT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxJKEF4LCJKU09OVmFsdWUiLDIwNjQpLEQoMjIxLDIwNjQsezIyMToxfSwkcCxTeiksaC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwyMjEpP1c1ZSh0aGlzLmEsbCh0LDIyMSkuYSk6ITF9LGgub2U9ZnVuY3Rpb24oKXtyZXR1cm4gQmNufSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIEY1ZSh0aGlzLmEpfSxoLnBlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGguSWI9ZnVuY3Rpb24oKXt2YXIgdCxuLHI7Zm9yKHI9bmV3IFRoKCJbIiksbj0wLHQ9dGhpcy5hLmxlbmd0aDtuPHQ7bisrKW4+MCYmKHIuYSs9IiwiKSx3dShyLF95KHRoaXMsbikpO3JldHVybiByLmErPSJdIixyLmF9LEkoQXgsIkpTT05BcnJheSIsMjIxKSxEKDQ5MywyMDY0LHs0OTM6MX0samMpLGgub2U9ZnVuY3Rpb24oKXtyZXR1cm4gRmNufSxoLnFlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gSG4oKSwiIit0aGlzLmF9LGguYT0hMTt2YXIgaDZ0LGY2dDtJKEF4LCJKU09OQm9vbGVhbiIsNDkzKSxEKDk5Nyw2MyxscCxMSmUpLEkoQXgsIkpTT05FeGNlcHRpb24iLDk5NyksRCgxMDM2LDIwNjQse30sVyksaC5vZT1mdW5jdGlvbigpe3JldHVybiBSY259LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdWx9O3ZhciBkNnQ7SShBeCwiSlNPTk51bGwiLDEwMzYpLEQoMjYzLDIwNjQsezI2MzoxfSx2ayksaC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwyNjMpP3RoaXMuYT09bCh0LDI2MykuYTohMX0saC5vZT1mdW5jdGlvbigpe3JldHVybiBOY259LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gajgodGhpcy5hKX0saC5yZT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYSsiIn0saC5hPTAsSShBeCwiSlNPTk51bWJlciIsMjYzKSxEKDE5MCwyMDY0LHsxOTA6MX0sTTgsd2spLGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMTkwKT9XNWUodGhpcy5hLGwodCwxOTApLmEpOiExfSxoLm9lPWZ1bmN0aW9uKCl7cmV0dXJuIFBjbn0saC5IYj1mdW5jdGlvbigpe3JldHVybiBGNWUodGhpcy5hKX0saC5zZT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxoLkliPWZ1bmN0aW9uKCl7dmFyIHQsbixyLGEsbyxmLGc7Zm9yKGc9bmV3IFRoKCJ7IiksdD0hMCxmPWFjZSh0aGlzLFdlKHp0LGR0LDIsMCw2LDEpKSxyPWYsYT0wLG89ci5sZW5ndGg7YTxvOysrYSluPXJbYV0sdD90PSExOmcuYSs9Q28saGkoZyxzMnQobikpLGcuYSs9IjoiLHd1KGcsV2codGhpcyxuKSk7cmV0dXJuIGcuYSs9In0iLGcuYX0sSShBeCwiSlNPTk9iamVjdCIsMTkwKSxEKDYwNSxxMSxUbCxhc2UpLGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpJiZtdW4odGhpcy5hLGVpKHQpKX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcga3IobmV3IElsKHRoaXMuYikpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5sZW5ndGh9LEkoQXgsIkpTT05PYmplY3QvMSIsNjA1KTt2YXIgXzBlO0QoMjExLDIwNjQsezIxMToxfSx5eSksaC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwyMTEpP3ZuKHRoaXMuYSxsKHQsMjExKS5hKTohMX0saC5vZT1mdW5jdGlvbigpe3JldHVybiBPY259LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gczIodGhpcy5hKX0saC50ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHMydCh0aGlzLmEpfSxJKEF4LCJKU09OU3RyaW5nIiwyMTEpO3ZhciBOYixXU2UsZzZ0LFlTZSxYU2U7RCgyMDYwLDEsezUzMzoxfSksSShhRWUsIk91dHB1dFN0cmVhbSIsMjA2MCksRCgyMDYxLDIwNjAsezUzMzoxfSksSShhRWUsIkZpbHRlck91dHB1dFN0cmVhbSIsMjA2MSksRCg4NzgsMjA2MSx7NTMzOjF9LEZlKSxJKGFFZSwiUHJpbnRTdHJlYW0iLDg3OCksRCg0MjcsMSx7NDg0OjF9KSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sSShWYywiQWJzdHJhY3RTdHJpbmdCdWlsZGVyIiw0MjcpLEQoNTM4LDYzLGxwLHF6KSxJKFZjLCJBcml0aG1ldGljRXhjZXB0aW9uIiw1MzgpLEQoNzcsNjMsc2hlLF93ZSx0YyksSShWYywiSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiIsNzcpLEQoMzMzLDc3LHszOjEsMzMzOjEsMTAzOjEsNzc6MSw2MzoxLDgyOjF9LEJ3ZSx0M2UpLEkoVmMsIkFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiIsMzMzKSxEKDUzNyw2MyxscCxSaWUsQkplKSxJKFZjLCJBcnJheVN0b3JlRXhjZXB0aW9uIiw1MzcpLEQoMjk2LDgyLEh3dCxRaWUpLEkoVmMsIkVycm9yIiwyOTYpLEQoMjAwLDI5NixId3QsU3dlLHc2ZSksSShWYywiQXNzZXJ0aW9uRXJyb3IiLDIwMCksdDZ0PXszOjEsNDg1OjEsMzQ6MX07dmFyIFBiLFNULE5zPUkoVmMsIkJvb2xlYW4iLDQ4NSk7RCgyNDIsMSx7MzoxLDI0MjoxfSk7dmFyIFFTZTtJKFZjLCJOdW1iZXIiLDI0MiksRCgyMjIsMjQyLHszOjEsMjIyOjEsMzQ6MSwyNDI6MX0sU2kpLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGd1bih0aGlzLGwodCwyMjIpKX0saC51ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMjIyKSYmbCh0LDIyMikuYT09dGhpcy5hfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5JYj1mdW5jdGlvbigpe3JldHVybiIiK3RoaXMuYX0saC5hPTA7dmFyIGp4PUkoVmMsIkJ5dGUiLDIyMiksSlNlO0QoMTgwLDEsezM6MSwxODA6MSwzNDoxfSx5cyksaC5GZD1mdW5jdGlvbih0KXtyZXR1cm4gcHVuKHRoaXMsbCh0LDE4MCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE4MCkmJmwodCwxODApLmE9PXRoaXMuYX0saC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLmEpfSxoLmE9MDt2YXIgWlNlLFBMPUkoVmMsIkNoYXJhY3RlciIsMTgwKSxlX2U7RCgyMTIsNjMsezM6MSwyMTI6MSwxMDM6MSw2MzoxLDgyOjF9LElRZSxrayksSShWYywiQ2xhc3NDYXN0RXhjZXB0aW9uIiwyMTIpLG42dD17MzoxLDM0OjEsMzQ1OjEsMjQyOjF9O3ZhciB0YT1JKFZjLCJEb3VibGUiLDM0NSk7RCgxNjEsMjQyLHszOjEsMzQ6MSwxNjE6MSwyNDI6MX0scGEsQXdlKSxoLkZkPWZ1bmN0aW9uKHQpe3JldHVybiBMbG4odGhpcyxsKHQsMTYxKSl9LGgudWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE2MSkmJmVpdCh0aGlzLmEsbCh0LDE2MSkuYSl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdWEodGhpcy5hKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiIiK3RoaXMuYX0saC5hPTA7dmFyIF9UPUkoVmMsIkZsb2F0IiwxNjEpO0QoMzMsNjMsezM6MSwxMDM6MSwzMzoxLDYzOjEsODI6MX0sWUksWW4sTjB0KSxJKFZjLCJJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iLDMzKSxEKDczLDYzLGxwLHBsLG5jKSxJKFZjLCJJbGxlZ2FsU3RhdGVFeGNlcHRpb24iLDczKSxEKDE3LDI0Mix7MzoxLDM0OjEsMTc6MSwyNDI6MX0sQ3IpLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGF5ZSh0aGlzLGwodCwxNykpfSxoLnVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNykmJmwodCwxNykuYT09dGhpcy5hfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5JYj1mdW5jdGlvbigpe3JldHVybiIiK3RoaXMuYX0saC5hPTA7dmFyIHJvPUkoVmMsIkludGVnZXIiLDE3KSx0X2UscDZ0O0QoMTY4LDI0Mix7MzoxLDM0OjEsMTY4OjEsMjQyOjF9LE9yKSxoLkZkPWZ1bmN0aW9uKHQpe3JldHVybiBBbG4odGhpcyxsKHQsMTY4KSl9LGgudWU9ZnVuY3Rpb24oKXtyZXR1cm4gRm0odGhpcy5hKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNjgpJiZjdyhsKHQsMTY4KS5hLHRoaXMuYSl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gX2ZuKHRoaXMuYSl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4iIitZXyh0aGlzLmEpfSxoLmE9MDt2YXIgcjM9SShWYywiTG9uZyIsMTY4KSxuX2U7RCgyMTQwLDEse30pLEQoMTkwNCw2MyxscCxGSmUpLEkoVmMsIk5lZ2F0aXZlQXJyYXlTaXplRXhjZXB0aW9uIiwxOTA0KSxEKDE2OSw2MDcsezM6MSwxMDM6MSwxNjk6MSw2MzoxLDgyOjF9LFM4LEQ4KSxoLmVlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgVHlwZUVycm9yKHQpfSxJKFZjLCJOdWxsUG9pbnRlckV4Y2VwdGlvbiIsMTY5KTt2YXIgcl9lLEEwZSxiNnQsaV9lO0QoMTMwLDMzLHszOjEsMTAzOjEsMzM6MSwxMzA6MSw2MzoxLDgyOjF9LGdkKSxJKFZjLCJOdW1iZXJGb3JtYXRFeGNlcHRpb24iLDEzMCksRCgxOTEsMjQyLHszOjEsMzQ6MSwyNDI6MSwxOTE6MX0sV24pLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGJ1bih0aGlzLGwodCwxOTEpKX0saC51ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMTkxKSYmbCh0LDE5MSkuYT09dGhpcy5hfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5JYj1mdW5jdGlvbigpe3JldHVybiIiK3RoaXMuYX0saC5hPTA7dmFyIGkzPUkoVmMsIlNob3J0IiwxOTEpLHNfZTtEKDMxOSwxLHszOjEsMzE5OjF9LFphZSksaC5GYj1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gRGUodCwzMTkpPyhuPWwodCwzMTkpLHRoaXMuYz09bi5jJiZ0aGlzLmQ9PW4uZCYmdGhpcy5hPT1uLmEmJnRoaXMuYj09bi5iKTohMX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBNTihoZShsZSh3YSwxKSxSbiwxLDUsW3B0KHRoaXMuYyksdGhpcy5hLHRoaXMuZCx0aGlzLmJdKSl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hKyIuIit0aGlzLmQrIigiKyh0aGlzLmIhPW51bGw/dGhpcy5iOiJVbmtub3duIFNvdXJjZSIpKyh0aGlzLmM+PTA/IjoiK3RoaXMuYzoiIikrIikifSxoLmM9MDt2YXIgYV9lPUkoVmMsIlN0YWNrVHJhY2VFbGVtZW50IiwzMTkpO3I2dD17MzoxLDQ4NDoxLDM0OjEsMjoxfTt2YXIgenQ9SShWYyxuRWUsMik7RCgxMTEsNDI3LHs0ODQ6MX0sVXAsaF8sQWYpLEkoVmMsIlN0cmluZ0J1ZmZlciIsMTExKSxEKDEwNCw0MjcsezQ4NDoxfSx0YixTNSxUaCksSShWYywiU3RyaW5nQnVpbGRlciIsMTA0KSxEKDcwMiw3NyxzaGUsZTNlKSxJKFZjLCJTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIiw3MDIpLEQoMjE0NSwxLHt9KTt2YXIgbTZ0O0QoNDgsNjMsezM6MSwxMDM6MSw2MzoxLDgyOjEsNDg6MX0sUXIsSHApLEkoVmMsIlVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIiw0OCksRCgyNDcsMjQyLHszOjEsMzQ6MSwyNDI6MSwyNDc6MX0sTk4saDNlKSxoLkZkPWZ1bmN0aW9uKHQpe3JldHVybiBGbXQodGhpcyxsKHQsMjQ3KSl9LGgudWU9ZnVuY3Rpb24oKXtyZXR1cm4gankoaHZ0KHRoaXMpKX0saC5GYj1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gdGhpcz09PXQ/ITA6RGUodCwyNDcpPyhuPWwodCwyNDcpLHRoaXMuZT09bi5lJiZGbXQodGhpcyxuKT09MCk6ITF9LGguSGI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdGhpcy5iIT0wP3RoaXMuYjp0aGlzLmE8NTQ/KHQ9WmModGhpcy5mKSx0aGlzLmI9WXIodmEodCwtMSkpLHRoaXMuYj0zMyp0aGlzLmIrWXIodmEoYncodCwzMiksLTEpKSx0aGlzLmI9MTcqdGhpcy5iK3VhKHRoaXMuZSksdGhpcy5iKToodGhpcy5iPTE3KlgwdCh0aGlzLmMpK3VhKHRoaXMuZSksdGhpcy5iKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBodnQodGhpcyl9LGguYT0wLGguYj0wLGguZD0wLGguZT0wLGguZj0wO3ZhciB2NnQsbHYsb19lLGNfZSx1X2UsbF9lLGhfZSxmX2UsTDBlPUkoImphdmEubWF0aCIsIkJpZ0RlY2ltYWwiLDI0Nyk7RCg5MiwyNDIsezM6MSwzNDoxLDI0MjoxLDkyOjF9LFFnLHFvdCxJbSxRMXQsb2IpLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIEsxdCh0aGlzLGwodCw5MikpfSxoLnVlPWZ1bmN0aW9uKCl7cmV0dXJuIGp5KERsZSh0aGlzLDApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gQzhlKHRoaXMsdCl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gWDB0KHRoaXMpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIERsZSh0aGlzLDApfSxoLmI9LTIsaC5jPTAsaC5kPTAsaC5lPTA7dmFyIHc2dCx1Syx5NnQsTTBlLGxLLEJMLEE2PUkoImphdmEubWF0aCIsIkJpZ0ludGVnZXIiLDkyKSx4NnQsazZ0LCR4LEZMO0QoNDk4LDIwNjUsV3cpLGguJGI9ZnVuY3Rpb24oKXtObCh0aGlzKX0saC5fYj1mdW5jdGlvbih0KXtyZXR1cm4gSHUodGhpcyx0KX0saC51Yz1mdW5jdGlvbih0KXtyZXR1cm4gRDB0KHRoaXMsdCx0aGlzLmkpfHxEMHQodGhpcyx0LHRoaXMuZil9LGgudmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFNyKHRoaXMpfSxoLnhjPWZ1bmN0aW9uKHQpe3JldHVybiBjcih0aGlzLHQpfSxoLnpjPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGtpKHRoaXMsdCxuKX0saC5CYz1mdW5jdGlvbih0KXtyZXR1cm4gYXgodGhpcyx0KX0saC5nYz1mdW5jdGlvbigpe3JldHVybiBkXyh0aGlzKX0saC5nPTAsSShMciwiQWJzdHJhY3RIYXNoTWFwIiw0OTgpLEQoMjY3LHExLFRsLFNyKSxoLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLiRiKCl9LGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIHZjdCh0aGlzLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBxbSh0aGlzLmEpfSxoLk1jPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiB2Y3QodGhpcyx0KT8obj1sKHQsNDQpLmxkKCksdGhpcy5hLkJjKG4pLCEwKTohMX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX0sSShMciwiQWJzdHJhY3RIYXNoTWFwL0VudHJ5U2V0IiwyNjcpLEQoMjY4LDEsT2EscW0pLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5QYj1mdW5jdGlvbigpe3JldHVybiBOdyh0aGlzKX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGguUWI9ZnVuY3Rpb24oKXtLbHQodGhpcyl9LGguYj0hMSxoLmQ9MCxJKExyLCJBYnN0cmFjdEhhc2hNYXAvRW50cnlTZXRJdGVyYXRvciIsMjY4KSxEKDQyNiwxLE9hLGtyKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4gbHNlKHRoaXMpfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIEk1ZSh0aGlzKX0saC5RYj1mdW5jdGlvbigpe3BoKHRoaXMpfSxoLmI9MCxoLmM9LTEsSShMciwiQWJzdHJhY3RMaXN0L0l0ZXJhdG9ySW1wbCIsNDI2KSxEKDk4LDQyNixsZyxVYSksaC5RYj1mdW5jdGlvbigpe3BoKHRoaXMpfSxoLlJiPWZ1bmN0aW9uKHQpe2J5KHRoaXMsdCl9LGguU2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iPjB9LGguVGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLlViPWZ1bmN0aW9uKCl7cmV0dXJuIG1yKHRoaXMuYj4wKSx0aGlzLmEuWGIodGhpcy5jPS0tdGhpcy5iKX0saC5WYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmItMX0saC5XYj1mdW5jdGlvbih0KXtneSh0aGlzLmMhPS0xKSx0aGlzLmEuaGQodGhpcy5jLHQpfSxJKExyLCJBYnN0cmFjdExpc3QvTGlzdEl0ZXJhdG9ySW1wbCIsOTgpLEQoMjQ0LDU2LGlULFpwKSxoLmJkPWZ1bmN0aW9uKHQsbil7RXkodCx0aGlzLmIpLHRoaXMuYy5iZCh0aGlzLmErdCxuKSwrK3RoaXMuYn0saC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gU24odCx0aGlzLmIpLHRoaXMuYy5YYih0aGlzLmErdCl9LGguZ2Q9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIFNuKHQsdGhpcy5iKSxuPXRoaXMuYy5nZCh0aGlzLmErdCksLS10aGlzLmIsbn0saC5oZD1mdW5jdGlvbih0LG4pe3JldHVybiBTbih0LHRoaXMuYiksdGhpcy5jLmhkKHRoaXMuYSt0LG4pfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0saC5hPTAsaC5iPTAsSShMciwiQWJzdHJhY3RMaXN0L1N1Ykxpc3QiLDI0NCksRCgyNjYscTEsVGwsYnIpLGguJGI9ZnVuY3Rpb24oKXt0aGlzLmEuJGIoKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLl9iKHQpfSxoLktjPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9dGhpcy5hLnZjKCkuS2MoKSxuZXcgTWkodCl9LGguTWM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYS5fYih0KT8odGhpcy5hLkJjKHQpLCEwKTohMX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX0sSShMciwiQWJzdHJhY3RNYXAvMSIsMjY2KSxEKDU0MSwxLE9hLE1pKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLk9iKCl9LGguUGI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1sKHRoaXMuYS5QYigpLDQ0KSx0LmxkKCl9LGguUWI9ZnVuY3Rpb24oKXt0aGlzLmEuUWIoKX0sSShMciwiQWJzdHJhY3RNYXAvMS8xIiw1NDEpLEQoMjMxLDMxLFd5LGdpKSxoLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLiRiKCl9LGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYS51Yyh0KX0saC5LYz1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PXRoaXMuYS52YygpLktjKCksbmV3IGZzKHQpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpfSxJKExyLCJBYnN0cmFjdE1hcC8yIiwyMzEpLEQoMzAxLDEsT2EsZnMpLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuT2IoKX0saC5QYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PWwodGhpcy5hLlBiKCksNDQpLHQubWQoKX0saC5RYj1mdW5jdGlvbigpe3RoaXMuYS5RYigpfSxJKExyLCJBYnN0cmFjdE1hcC8yLzEiLDMwMSksRCg0OTQsMSx7NDk0OjEsNDQ6MX0pLGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIERlKHQsNDQpPyhuPWwodCw0NCksSmModGhpcy5kLG4ubGQoKSkmJkpjKHRoaXMuZSxuLm1kKCkpKTohMX0saC5sZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGgubWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIFI1KHRoaXMuZCleUjUodGhpcy5lKX0saC5uZD1mdW5jdGlvbih0KXtyZXR1cm4gWnllKHRoaXMsdCl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kKyI9Iit0aGlzLmV9LEkoTHIsIkFic3RyYWN0TWFwL0Fic3RyYWN0RW50cnkiLDQ5NCksRCgzOTcsNDk0LHs0OTQ6MSwzOTc6MSw0NDoxfSxjcSksSShMciwiQWJzdHJhY3RNYXAvU2ltcGxlRW50cnkiLDM5NyksRCgyMDgyLDEsY2hlKSxoLkZiPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBEZSh0LDQ0KT8obj1sKHQsNDQpLEpjKHRoaXMubGQoKSxuLmxkKCkpJiZKYyh0aGlzLm1kKCksbi5tZCgpKSk6ITF9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gUjUodGhpcy5sZCgpKV5SNSh0aGlzLm1kKCkpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGQoKSsiPSIrdGhpcy5tZCgpfSxJKExyLE13dCwyMDgyKSxEKDIwOTAsMjA2NSxaa2UpLGguWGM9ZnVuY3Rpb24odCl7cmV0dXJuIHJzZSh0aGlzLkVlKHQpKX0saC50Yz1mdW5jdGlvbih0KXtyZXR1cm4gVHV0KHRoaXMsdCl9LGguX2I9ZnVuY3Rpb24odCl7cmV0dXJuIGU0ZSh0aGlzLHQpfSxoLnZjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBScyh0aGlzKX0saC5UYz1mdW5jdGlvbigpe3JldHVybiBSc3QodGhpcy5HZSgpKX0saC5ZYz1mdW5jdGlvbih0KXtyZXR1cm4gcnNlKHRoaXMuSGUodCkpfSxoLnhjPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBuPXQsaGModGhpcy5GZShuKSl9LGguJGM9ZnVuY3Rpb24odCl7cmV0dXJuIHJzZSh0aGlzLkllKHQpKX0saC5lYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRnModGhpcyl9LGguVmM9ZnVuY3Rpb24oKXtyZXR1cm4gUnN0KHRoaXMuSmUoKSl9LGguX2M9ZnVuY3Rpb24odCl7cmV0dXJuIHJzZSh0aGlzLktlKHQpKX0sSShMciwiQWJzdHJhY3ROYXZpZ2FibGVNYXAiLDIwOTApLEQoNjI5LHExLFRsLFJzKSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDQ0KSYmVHV0KHRoaXMuYixsKHQsNDQpKX0saC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuRGUoKX0saC5NYz1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gRGUodCw0NCk/KG49bCh0LDQ0KSx0aGlzLmIuTGUobikpOiExfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5nYygpfSxJKExyLCJBYnN0cmFjdE5hdmlnYWJsZU1hcC9FbnRyeVNldCIsNjI5KSxEKDExNDYscTEsZUVlLEZzKSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBhcSh0aGlzKX0saC4kYj1mdW5jdGlvbigpe3RoaXMuYS4kYigpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBlNGUodGhpcy5hLHQpfSxoLktjPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9dGhpcy5hLnZjKCkuYi5EZSgpLG5ldyB4cyh0KX0saC5NYz1mdW5jdGlvbih0KXtyZXR1cm4gZTRlKHRoaXMuYSx0KT8odGhpcy5hLkJjKHQpLCEwKTohMX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2MoKX0sSShMciwiQWJzdHJhY3ROYXZpZ2FibGVNYXAvTmF2aWdhYmxlS2V5U2V0IiwxMTQ2KSxEKDExNDcsMSxPYSx4cyksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIGxzZSh0aGlzLmEuYSl9LGguUGI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1vcnQodGhpcy5hKSx0LmxkKCl9LGguUWI9ZnVuY3Rpb24oKXtkaXQodGhpcy5hKX0sSShMciwiQWJzdHJhY3ROYXZpZ2FibGVNYXAvTmF2aWdhYmxlS2V5U2V0LzEiLDExNDcpLEQoMjEwMywzMSxXeSksaC5GYz1mdW5jdGlvbih0KXtyZXR1cm4gSzgoJEUodGhpcyx0KSxhVCksITB9LGguR2M9ZnVuY3Rpb24odCl7cmV0dXJuIG5yKHQpLEJPKHQhPXRoaXMsIkNhbid0IGFkZCBhIHF1ZXVlIHRvIGl0c2VsZiIpLEthKHRoaXMsdCl9LGguJGI9ZnVuY3Rpb24oKXtmb3IoO0tvZSh0aGlzKSE9bnVsbDspO30sSShMciwiQWJzdHJhY3RRdWV1ZSIsMjEwMyksRCgzMTAsMzEsezQ6MSwyMDoxLDMxOjEsMTY6MX0sejUsZGN0KSxoLkZjPWZ1bmN0aW9uKHQpe3JldHVybiBpNmUodGhpcyx0KSwhMH0saC4kYj1mdW5jdGlvbigpe2w2ZSh0aGlzKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gWmZ0KG5ldyBuQSh0aGlzKSx0KX0saC5kYz1mdW5jdGlvbigpe3JldHVybiBsXyh0aGlzKX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgbkEodGhpcyl9LGguTWM9ZnVuY3Rpb24odCl7cmV0dXJuIHcybihuZXcgbkEodGhpcyksdCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLXRoaXMuYiZ0aGlzLmEubGVuZ3RoLTF9LGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtuKHRoaXMsMjcyKX0saC5RYz1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbj10aGlzLmMtdGhpcy5iJnRoaXMuYS5sZW5ndGgtMSx0Lmxlbmd0aDxuJiYodD1WeihuZXcgQXJyYXkobiksdCkpLGZmdCh0aGlzLHQsbiksdC5sZW5ndGg+biYmVHModCxuLG51bGwpLHR9LGguYj0wLGguYz0wLEkoTHIsIkFycmF5RGVxdWUiLDMxMCksRCg0NTksMSxPYSxuQSksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYSE9dGhpcy5ifSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIEZWKHRoaXMpfSxoLlFiPWZ1bmN0aW9uKCl7WWh0KHRoaXMpfSxoLmE9MCxoLmI9MCxoLmM9LTEsSShMciwiQXJyYXlEZXF1ZS9JdGVyYXRvckltcGwiLDQ1OSksRCgxMyw1NixVd3QsYnQsQnUsT2wpLGguYmQ9ZnVuY3Rpb24odCxuKXtwdyh0aGlzLHQsbil9LGguRmM9ZnVuY3Rpb24odCl7cmV0dXJuIHZ0KHRoaXMsdCl9LGguY2Q9ZnVuY3Rpb24odCxuKXtyZXR1cm4gUTdlKHRoaXMsdCxuKX0saC5HYz1mdW5jdGlvbih0KXtyZXR1cm4gcmEodGhpcyx0KX0saC4kYj1mdW5jdGlvbigpe2F5KHRoaXMuYywwKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gZ2ModGhpcyx0LDApIT0tMX0saC5KYz1mdW5jdGlvbih0KXtWdSh0aGlzLHQpfSxoLlhiPWZ1bmN0aW9uKHQpe3JldHVybiBqdCh0aGlzLHQpfSxoLmRkPWZ1bmN0aW9uKHQpe3JldHVybiBnYyh0aGlzLHQsMCl9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmxlbmd0aD09MH0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRyh0aGlzKX0saC5nZD1mdW5jdGlvbih0KXtyZXR1cm4gdDIodGhpcyx0KX0saC5NYz1mdW5jdGlvbih0KXtyZXR1cm4gYWwodGhpcyx0KX0saC5jZT1mdW5jdGlvbih0LG4pe0JvdCh0aGlzLHQsbil9LGguaGQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gcmYodGhpcyx0LG4pfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5sZW5ndGh9LGguamQ9ZnVuY3Rpb24odCl7VnModGhpcyx0KX0saC5QYz1mdW5jdGlvbigpe3JldHVybiBlSCh0aGlzLmMpfSxoLlFjPWZ1bmN0aW9uKHQpe3JldHVybiBqMSh0aGlzLHQpfTt2YXIgY09uPUkoTHIsIkFycmF5TGlzdCIsMTMpO0QoNywxLE9hLEcpLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5PYj1mdW5jdGlvbigpe3JldHVybiBMYyh0aGlzKX0saC5QYj1mdW5jdGlvbigpe3JldHVybiByZSh0aGlzKX0saC5RYj1mdW5jdGlvbigpe1FfKHRoaXMpfSxoLmE9MCxoLmI9LTEsSShMciwiQXJyYXlMaXN0LzEiLDcpLEQoMjExMixiLkZ1bmN0aW9uLHt9LFBlKSxoLk1lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFlpKHQsbil9LEQoMTUxLDU2LEd3dCxJbCksaC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gWGh0KHRoaXMsdCkhPS0xfSxoLkpjPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvO2Zvcihucih0KSxyPXRoaXMuYSxhPTAsbz1yLmxlbmd0aDthPG87KythKW49clthXSx0LkNkKG4pfSxoLlhiPWZ1bmN0aW9uKHQpe3JldHVybiBKaXQodGhpcyx0KX0saC5oZD1mdW5jdGlvbih0LG4pe3ZhciByO3JldHVybiByPShTbih0LHRoaXMuYS5sZW5ndGgpLHRoaXMuYVt0XSksVHModGhpcy5hLHQsbikscn0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEubGVuZ3RofSxoLmpkPWZ1bmN0aW9uKHQpe0xhZSh0aGlzLmEsdGhpcy5hLmxlbmd0aCx0KX0saC5QYz1mdW5jdGlvbigpe3JldHVybiBvZHQodGhpcyxXZSh3YSxSbiwxLHRoaXMuYS5sZW5ndGgsNSwxKSl9LGguUWM9ZnVuY3Rpb24odCl7cmV0dXJuIG9kdCh0aGlzLHQpfSxJKExyLCJBcnJheXMvQXJyYXlMaXN0IiwxNTEpO3ZhciBfbyxtZyxoSztEKDk1Myw1NixHd3QsamUpLGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuITF9LGguWGI9ZnVuY3Rpb24odCl7cmV0dXJuIHJ5ZSh0KX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBDbigpLE1rKCksQVR9LGguZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gQ24oKSxNaygpLEFUfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LEkoTHIsIkNvbGxlY3Rpb25zL0VtcHR5TGlzdCIsOTUzKSxEKDk1NCwxLGxnLEllKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguUmI9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0saC5PYj1mdW5jdGlvbigpe3JldHVybiExfSxoLlNiPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGguUGI9ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgX2MpfSxoLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGguVWI9ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgX2MpfSxoLlZiPWZ1bmN0aW9uKCl7cmV0dXJuLTF9LGguUWI9ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgcGwpfSxoLldiPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBwbCl9O3ZhciBBVDtJKExyLCJDb2xsZWN0aW9ucy9FbXB0eUxpc3RJdGVyYXRvciIsOTU0KSxEKDk1NiwyMDY1LHJULFNlKSxoLl9iPWZ1bmN0aW9uKHQpe3JldHVybiExfSxoLnVjPWZ1bmN0aW9uKHQpe3JldHVybiExfSxoLnZjPWZ1bmN0aW9uKCl7cmV0dXJuIENuKCksaEt9LGgueGM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9LGguZWM9ZnVuY3Rpb24oKXtyZXR1cm4gQ24oKSxoS30saC5nYz1mdW5jdGlvbigpe3JldHVybiAwfSxoLkNjPWZ1bmN0aW9uKCl7cmV0dXJuIENuKCksX299LEkoTHIsIkNvbGxlY3Rpb25zL0VtcHR5TWFwIiw5NTYpLEQoOTU1LHExLFN4LENlKSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiExfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIENuKCksTWsoKSxBVH0saC5nYz1mdW5jdGlvbigpe3JldHVybiAwfSxJKExyLCJDb2xsZWN0aW9ucy9FbXB0eVNldCIsOTU1KSxEKDYwOCw1Nix7MzoxLDIwOjEsMzE6MSw1NjoxLDE2OjEsMTU6MX0sRGEpLGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIEpjKHRoaXMuYSx0KX0saC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gU24odCwxKSx0aGlzLmF9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gMX0sSShMciwiQ29sbGVjdGlvbnMvU2luZ2xldG9uTGlzdCIsNjA4KSxEKDM4NCwxLE93dCwkYSksaC5KYz1mdW5jdGlvbih0KXt0byh0aGlzLHQpfSxoLkxjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBibihudWxsLHRoaXMuTmMoKSl9LGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtuKHRoaXMsMCl9LGguT2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJuKG51bGwsdGhpcy5OYygpKX0saC5GYz1mdW5jdGlvbih0KXtyZXR1cm4gb1plKCl9LGguR2M9ZnVuY3Rpb24odCl7cmV0dXJuIGNaZSgpfSxoLiRiPWZ1bmN0aW9uKCl7dVplKCl9LGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIG5PKHRoaXMsdCl9LGguSWM9ZnVuY3Rpb24odCl7cmV0dXJuIFhaZSh0aGlzLHQpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5kYygpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB5byh0aGlzLmIuS2MoKSl9LGguTWM9ZnVuY3Rpb24odCl7cmV0dXJuIGxaZSgpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5nYygpfSxoLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5QYygpfSxoLlFjPWZ1bmN0aW9uKHQpe3JldHVybiBRWmUodGhpcyx0KX0saC5JYj1mdW5jdGlvbigpe3JldHVybiB4Yyh0aGlzLmIpfSxJKExyLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVDb2xsZWN0aW9uIiwzODQpLEQoMzgzLDEsT2EseW8pLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuT2IoKX0saC5QYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuUGIoKX0saC5RYj1mdW5jdGlvbigpe2haZSgpfSxJKExyLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVDb2xsZWN0aW9uSXRlcmF0b3IiLDM4MyksRCg1NDAsMzg0LEt3dCxqcSksaC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcga24odGhpcywxNil9LGguYmQ9ZnVuY3Rpb24odCxuKXt0aHJvdyB1ZShuZXcgUXIpfSxoLmNkPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IFFyKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gUGkodGhpcy5hLHQpfSxoLlhiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEuWGIodCl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gZXModGhpcy5hKX0saC5kZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLmRkKHQpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5kYygpfSxoLmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBNeWUodGhpcy5hLmZkKDApKX0saC5mZD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IE15ZSh0aGlzLmEuZmQodCkpfSxoLmdkPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGguaGQ9ZnVuY3Rpb24odCxuKXt0aHJvdyB1ZShuZXcgUXIpfSxoLmpkPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGgua2Q9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbmV3IGpxKHRoaXMuYS5rZCh0LG4pKX0sSShMciwiQ29sbGVjdGlvbnMvVW5tb2RpZmlhYmxlTGlzdCIsNTQwKSxEKDcwNSwzODMsbGcsTXllKSxoLlFiPWZ1bmN0aW9uKCl7aFplKCl9LGguUmI9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0saC5TYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuU2IoKX0saC5UYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuVGIoKX0saC5VYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuVWIoKX0saC5WYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuVmIoKX0saC5XYj1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxJKExyLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVMaXN0SXRlcmF0b3IiLDcwNSksRCg2MDksMSxXdyx0ciksaC53Yz1mdW5jdGlvbih0KXttQSh0aGlzLHQpfSxoLnljPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gcWNlKHRoaXMsdCxuLHIpfSxoLiRiPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC5fYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jLl9iKHQpfSxoLnVjPWZ1bmN0aW9uKHQpe3JldHVybiBaWmUodGhpcyx0KX0saC52Yz1mdW5jdGlvbigpe3JldHVybiBLayh0aGlzKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gZWV0KHRoaXMsdCl9LGgueGM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYy54Yyh0KX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBlcyh0aGlzLmMpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5kYygpfSxoLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIG1hdCh0aGlzKX0saC56Yz1mdW5jdGlvbih0LG4pe3Rocm93IHVlKG5ldyBRcil9LGguQmM9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuZ2MoKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiB4Yyh0aGlzLmMpfSxoLkNjPWZ1bmN0aW9uKCl7cmV0dXJuIGJhdCh0aGlzKX0sSShMciwiQ29sbGVjdGlvbnMvVW5tb2RpZmlhYmxlTWFwIiw2MDkpLEQoMzk2LDM4NCxCbGUsRWspLGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtuKHRoaXMsMSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIFBpKHRoaXMuYix0KX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBlcyh0aGlzLmIpfSxJKExyLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVTZXQiLDM5NiksRCg5NTcsMzk2LEJsZSx6SmUpLGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIEpaZSh0aGlzLHQpfSxoLkljPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmIuSWModCl9LGguS2M9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmIuS2MoKSxuZXcgQm8odCl9LGguUGM9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmIuUGMoKSxZY3QodCx0Lmxlbmd0aCksdH0saC5RYz1mdW5jdGlvbih0KXtyZXR1cm4gdG90KHRoaXMsdCl9LEkoTHIsIkNvbGxlY3Rpb25zL1VubW9kaWZpYWJsZU1hcC9Vbm1vZGlmaWFibGVFbnRyeVNldCIsOTU3KSxEKDk1OCwxLE9hLEJvKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGxyKGwodGhpcy5hLlBiKCksNDQpKX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuT2IoKX0saC5RYj1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyBRcil9LEkoTHIsIkNvbGxlY3Rpb25zL1VubW9kaWZpYWJsZU1hcC9Vbm1vZGlmaWFibGVFbnRyeVNldC8xIiw5NTgpLEQoNzAzLDEsY2hlLGxyKSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEuRmIodCl9LGgubGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmxkKCl9LGgubWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLm1kKCl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLkhiKCl9LGgubmQ9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiB4Yyh0aGlzLmEpfSxJKExyLCJDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVNYXAvVW5tb2RpZmlhYmxlRW50cnlTZXQvVW5tb2RpZmlhYmxlRW50cnkiLDcwMyksRCg2MTAsNTQwLHsyMDoxLDE2OjEsMTU6MSw1OToxfSxlc2UpLEkoTHIsIkNvbGxlY3Rpb25zL1VubW9kaWZpYWJsZVJhbmRvbUFjY2Vzc0xpc3QiLDYxMCksRCg3MDQsMzk2LE53dCxEeWUpLGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGFxKHRoaXMpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiBQaSh0aGlzLmEsdCl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gZXModGhpcy5hKX0sSShMciwiQ29sbGVjdGlvbnMvVW5tb2RpZmlhYmxlU29ydGVkU2V0Iiw3MDQpLEQoODU4LDEsdWhlLGtlKSxoLk5lPWZ1bmN0aW9uKHQsbil7dmFyIHI7cmV0dXJuIHI9S2N0KGwodCwxMiksbChuLDEyKSksciE9MD9yOlNtdChsKHQsMTIpLGwobiwxMikpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoTHIsIkNvbXBhcmF0b3IvbGFtYmRhJDAkVHlwZSIsODU4KTt2YXIgZF9lLEQwZSxnX2U7RCg3NjksMSx1aGUsS2UpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gUmRuKGwodCwzNCksbChuLDM0KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIEV3KCksZ19lfSxJKExyLCJDb21wYXJhdG9ycy9OYXR1cmFsT3JkZXJDb21wYXJhdG9yIiw3NjkpLEQoMTIyNiwxLHVoZSxGdCksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBGZG4obCh0LDM0KSxsKG4sMzQpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gRXcoKSxEMGV9LEkoTHIsIkNvbXBhcmF0b3JzL1JldmVyc2VOYXR1cmFsT3JkZXJDb21wYXJhdG9yIiwxMjI2KSxEKDUyLDEsdWhlLFZ0KSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLmEuTmUobix0KX0saC5PZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LEkoTHIsIkNvbXBhcmF0b3JzL1JldmVyc2VkQ29tcGFyYXRvciIsNTIpLEQoMTc1LDYzLGxwLFhoKSxJKExyLCJDb25jdXJyZW50TW9kaWZpY2F0aW9uRXhjZXB0aW9uIiwxNzUpO3ZhciBFNnQsVDZ0O0QoMTk0OCwxLExQLE5lKSxoLlBlPWZ1bmN0aW9uKHQpe00xdCh0aGlzLHQpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIkRvdWJsZVN1bW1hcnlTdGF0aXN0aWNzW2NvdW50ID0gIitZXyh0aGlzLmEpKyIsIGF2ZyA9ICIrKGhzZSh0aGlzLmEsMCk/VDZlKHRoaXMpL0ZtKHRoaXMuYSk6MCkrIiwgbWluID0gIit0aGlzLmMrIiwgbWF4ID0gIit0aGlzLmIrIiwgc3VtID0gIitUNmUodGhpcykrIl0ifSxoLmE9MCxoLmI9aWEsaC5jPWdzLGguZD0wLGguZT0wLGguZj0wLEkoTHIsIkRvdWJsZVN1bW1hcnlTdGF0aXN0aWNzIiwxOTQ4KSxEKDE4NjgsNjMsbHAsT1FlKSxJKExyLCJFbXB0eVN0YWNrRXhjZXB0aW9uIiwxODY4KSxEKDQ2MSwyMDY1LFd3LExBKSxoLnpjPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHQ0ZSh0aGlzLHQsbil9LGguJGI9ZnVuY3Rpb24oKXtpYXQodGhpcyl9LGguX2I9ZnVuY3Rpb24odCl7cmV0dXJuIHZldCh0aGlzLHQpfSxoLnVjPWZ1bmN0aW9uKHQpe3ZhciBuLHI7Zm9yKHI9bmV3IFA4KHRoaXMuYSk7ci5hPHIuYy5hLmxlbmd0aDspaWYobj1jQShyKSxKYyh0LHRoaXMuYltuLmddKSlyZXR1cm4hMDtyZXR1cm4hMX0saC52Yz1mdW5jdGlvbigpe3JldHVybiBuZXcgSHModGhpcyl9LGgueGM9ZnVuY3Rpb24odCl7cmV0dXJuIFFvKHRoaXMsdCl9LGguQmM9ZnVuY3Rpb24odCl7cmV0dXJuIFk1ZSh0aGlzLHQpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5jfSxJKExyLCJFbnVtTWFwIiw0NjEpLEQoMTM0MCxxMSxUbCxIcyksaC4kYj1mdW5jdGlvbigpe2lhdCh0aGlzLmEpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiB3Y3QodGhpcyx0KX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgcnN0KHRoaXMuYSl9LGguTWM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIHdjdCh0aGlzLHQpPyhuPWwodCw0NCkubGQoKSxZNWUodGhpcy5hLG4pLCEwKTohMX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuYS5jfSxJKExyLCJFbnVtTWFwL0VudHJ5U2V0IiwxMzQwKSxEKDEzNDEsMSxPYSxyc3QpLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5QYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmI9Y0EodGhpcy5hKSxuZXcgeWV0KHRoaXMuYyx0aGlzLmIpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIGd5ZSh0aGlzLmEpfSxoLlFiPWZ1bmN0aW9uKCl7Z3koISF0aGlzLmIpLFk1ZSh0aGlzLmMsdGhpcy5iKSx0aGlzLmI9bnVsbH0sSShMciwiRW51bU1hcC9FbnRyeVNldEl0ZXJhdG9yIiwxMzQxKSxEKDEzNDIsMjA4MixjaGUseWV0KSxoLmxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5tZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIuYlt0aGlzLmEuZ119LGgubmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFI0ZSh0aGlzLmIuYix0aGlzLmEuZyx0KX0sSShMciwiRW51bU1hcC9NYXBFbnRyeSIsMTM0MiksRCgxODEscTEsezIwOjEsMzE6MSwxNjoxLDE4MToxLDIxOjF9KTt2YXIgQzZ0PUkoTHIsIkVudW1TZXQiLDE4MSk7RCgxNjIsMTgxLHsyMDoxLDMxOjEsMTY6MSwxODE6MSwxNjI6MSwyMToxfSxaaCksaC5GYz1mdW5jdGlvbih0KXtyZXR1cm4gZDAodGhpcyxsKHQsMjIpKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gQWFlKHRoaXMsdCl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFA4KHRoaXMpfSxoLk1jPWZ1bmN0aW9uKHQpe3JldHVybiBmc3QodGhpcyx0KX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGguYz0wLEkoTHIsIkVudW1TZXQvRW51bVNldEltcGwiLDE2MiksRCgzNTYsMSxPYSxQOCksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIGNBKHRoaXMpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIGd5ZSh0aGlzKX0saC5RYj1mdW5jdGlvbigpe2d5KHRoaXMuYiE9LTEpLFRzKHRoaXMuYy5iLHRoaXMuYixudWxsKSwtLXRoaXMuYy5jLHRoaXMuYj0tMX0saC5hPS0xLGguYj0tMSxJKExyLCJFbnVtU2V0L0VudW1TZXRJbXBsL0l0ZXJhdG9ySW1wbCIsMzU2KSxEKDQ1LDQ5OCxtNixQcixOOCxqdHQpLGguQmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gcWUodCk9PT1xZShuKXx8dCE9bnVsbCYmUGkodCxuKX0saC5DZT1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gdD09bnVsbD8wOihuPWVzKHQpLG58MCl9LEkoTHIsIkhhc2hNYXAiLDQ1KSxEKDQ5LHExLG9FZSxLcyxLeixVXyksaC5GYz1mdW5jdGlvbih0KXtyZXR1cm4gbmEodGhpcyx0KX0saC4kYj1mdW5jdGlvbigpe3RoaXMuYS4kYigpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBXMCh0aGlzLHQpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpPT0wfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5lYygpLktjKCl9LGguTWM9ZnVuY3Rpb24odCl7cmV0dXJuIHd5ZSh0aGlzLHQpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpfTt2YXIgdU9uPUkoTHIsIkhhc2hTZXQiLDQ5KTtEKDE4OTcsMSxrUCxnbiksaC5EZD1mdW5jdGlvbih0KXskZnQodGhpcyx0KX0saC5JYj1mdW5jdGlvbigpe3JldHVybiJJbnRTdW1tYXJ5U3RhdGlzdGljc1tjb3VudCA9ICIrWV8odGhpcy5hKSsiLCBhdmcgPSAiKyhoc2UodGhpcy5hLDApP0ZtKHRoaXMuZCkvRm0odGhpcy5hKTowKSsiLCBtaW4gPSAiK3RoaXMuYysiLCBtYXggPSAiK3RoaXMuYisiLCBzdW0gPSAiK1lfKHRoaXMuZCkrIl0ifSxoLmE9MCxoLmI9bG8saC5jPUlpLGguZD0wLEkoTHIsIkludFN1bW1hcnlTdGF0aXN0aWNzIiwxODk3KSxEKDEwNjIsMSxoZyxybnQpLGguSmM9ZnVuY3Rpb24odCl7dG8odGhpcyx0KX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgTzZlKHRoaXMpfSxoLmM9MCxJKExyLCJJbnRlcm5hbEhhc2hDb2RlTWFwIiwxMDYyKSxEKDcyNiwxLE9hLE82ZSksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZD10aGlzLmFbdGhpcy5jKytdLHRoaXMuZH0saC5PYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLmM8dGhpcy5hLmxlbmd0aD8hMDoodD10aGlzLmIubmV4dCgpLHQuZG9uZT8hMToodGhpcy5hPXQudmFsdWVbMV0sdGhpcy5jPTAsITApKX0saC5RYj1mdW5jdGlvbigpe1M5ZSh0aGlzLmUsdGhpcy5kLmxkKCkpLHRoaXMuYyE9MCYmLS10aGlzLmN9LGguYz0wLGguZD1udWxsLEkoTHIsIkludGVybmFsSGFzaENvZGVNYXAvMSIsNzI2KTt2YXIgUzZ0O0QoMTA2MCwxLGhnLGludCksaC5KYz1mdW5jdGlvbih0KXt0byh0aGlzLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBoNmUodGhpcyl9LGguYz0wLGguZD0wLEkoTHIsIkludGVybmFsU3RyaW5nTWFwIiwxMDYwKSxEKDcyNSwxLE9hLGg2ZSksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYz10aGlzLmEsdGhpcy5hPXRoaXMuYi5uZXh0KCksbmV3IGxpdCh0aGlzLmQsdGhpcy5jLHRoaXMuZC5kKX0saC5PYj1mdW5jdGlvbigpe3JldHVybiF0aGlzLmEuZG9uZX0saC5RYj1mdW5jdGlvbigpe1VmdCh0aGlzLmQsdGhpcy5jLnZhbHVlWzBdKX0sSShMciwiSW50ZXJuYWxTdHJpbmdNYXAvMSIsNzI1KSxEKDEwNjEsMjA4MixjaGUsbGl0KSxoLmxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi52YWx1ZVswXX0saC5tZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZCE9dGhpcy5jP3lfKHRoaXMuYSx0aGlzLmIudmFsdWVbMF0pOnRoaXMuYi52YWx1ZVsxXX0saC5uZD1mdW5jdGlvbih0KXtyZXR1cm4gQncodGhpcy5hLHRoaXMuYi52YWx1ZVswXSx0KX0saC5jPTAsSShMciwiSW50ZXJuYWxTdHJpbmdNYXAvMiIsMTA2MSksRCgyMTUsNDUsbTYsZTIsSTZlKSxoLiRiPWZ1bmN0aW9uKCl7QnJ0KHRoaXMpfSxoLl9iPWZ1bmN0aW9uKHQpe3JldHVybiB3ZXQodGhpcyx0KX0saC51Yz1mdW5jdGlvbih0KXt2YXIgbjtmb3Iobj10aGlzLmQuYTtuIT10aGlzLmQ7KXtpZihKYyhuLmUsdCkpcmV0dXJuITA7bj1uLmF9cmV0dXJuITF9LGgudmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFNjKHRoaXMpfSxoLnhjPWZ1bmN0aW9uKHQpe3JldHVybiBCMSh0aGlzLHQpfSxoLnpjPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGgyKHRoaXMsdCxuKX0saC5CYz1mdW5jdGlvbih0KXtyZXR1cm4gVmx0KHRoaXMsdCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gZF8odGhpcy5lKX0saC5jPSExLEkoTHIsIkxpbmtlZEhhc2hNYXAiLDIxNSksRCg0MDAsMzk3LHs0OTQ6MSwzOTc6MSw0MDA6MSw0NDoxfSxzcnQsQTRlKSxJKExyLCJMaW5rZWRIYXNoTWFwL0NoYWluRW50cnkiLDQwMCksRCg3MTUscTEsVGwsU2MpLGguJGI9ZnVuY3Rpb24oKXtCcnQodGhpcy5hKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4geWN0KHRoaXMsdCl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHk1ZSh0aGlzKX0saC5NYz1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4geWN0KHRoaXMsdCk/KG49bCh0LDQ0KS5sZCgpLFZsdCh0aGlzLmEsbiksITApOiExfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIGRfKHRoaXMuYS5lKX0sSShMciwiTGlua2VkSGFzaE1hcC9FbnRyeVNldCIsNzE1KSxEKDcxNiwxLE9hLHk1ZSksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIFlsdCh0aGlzKX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMhPXRoaXMuZC5hLmR9LGguUWI9ZnVuY3Rpb24oKXtneSghIXRoaXMuYSkscGFlKHRoaXMuZC5hLmUuZyx0aGlzLmIpLCQ0ZSh0aGlzLmEpLGF4KHRoaXMuZC5hLmUsdGhpcy5hLmQpLHRoaXMuYj10aGlzLmQuYS5lLmcsdGhpcy5hPW51bGx9LGguYj0wLEkoTHIsIkxpbmtlZEhhc2hNYXAvRW50cnlTZXQvRW50cnlJdGVyYXRvciIsNzE2KSxEKDE3NCw0OSxvRWUsYmQsbmFlLEs0ZSk7dmFyIGxPbj1JKExyLCJMaW5rZWRIYXNoU2V0IiwxNzQpO0QoNjcsMjA2Mix7MzoxLDQ6MSwyMDoxLDMxOjEsNTY6MSwxNjoxLDY3OjEsMTU6MX0sb3MsZGFlKSxoLkZjPWZ1bmN0aW9uKHQpe3JldHVybiB1aSh0aGlzLHQpfSxoLiRiPWZ1bmN0aW9uKCl7Q2godGhpcyl9LGguZmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFJyKHRoaXMsdCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLmI9MDt2YXIgaE9uPUkoTHIsIkxpbmtlZExpc3QiLDY3KTtEKDk4MSwxLGxnLGhpdCksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLlJiPWZ1bmN0aW9uKHQpe3pPKHRoaXMsdCl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4gUUkodGhpcyl9LGguU2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmIhPXRoaXMuZC5hfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIEJyKHRoaXMpfSxoLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5VYj1mdW5jdGlvbigpe3JldHVybiBwY3QodGhpcyl9LGguVmI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLTF9LGguUWI9ZnVuY3Rpb24oKXtZb2UodGhpcyl9LGguV2I9ZnVuY3Rpb24odCl7Z3koISF0aGlzLmMpLHRoaXMuYy5jPXR9LGguYT0wLGguYz1udWxsLEkoTHIsIkxpbmtlZExpc3QvTGlzdEl0ZXJhdG9ySW1wbCIsOTgxKSxEKDYxNywxLHt9LF90KSxJKExyLCJMaW5rZWRMaXN0L05vZGUiLDYxNyksRCgyMDU3LDEse30pO3ZhciBwX2UsXzZ0O0koTHIsIkxvY2FsZSIsMjA1NyksRCg4NzMsMjA1Nyx7fSxFdCksaC5JYj1mdW5jdGlvbigpe3JldHVybiIifSxJKExyLCJMb2NhbGUvMSIsODczKSxEKDg3NCwyMDU3LHt9LEd0KSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuInVua25vd24ifSxJKExyLCJMb2NhbGUvNCIsODc0KSxEKDExMiw2Myx7MzoxLDEwMzoxLDYzOjEsODI6MSwxMTI6MX0sX2MsTGF0KSxJKExyLCJOb1N1Y2hFbGVtZW50RXhjZXB0aW9uIiwxMTIpLEQoNDc1LDEsezQ3NToxfSxLaWUpLGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIHQ9PT10aGlzPyEwOkRlKHQsNDc1KT8obj1sKHQsNDc1KSxKYyh0aGlzLmEsbi5hKSk6ITF9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gUjUodGhpcy5hKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEhPW51bGw/QXd0K2pfKHRoaXMuYSkrIikiOiJPcHRpb25hbC5lbXB0eSgpIn07dmFyIGJfZTtJKExyLCJPcHRpb25hbCIsNDc1KSxEKDQxNCwxLHs0MTQ6MX0sSHR0LHNhZSksaC5GYj1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gdD09PXRoaXM/ITA6RGUodCw0MTQpPyhuPWwodCw0MTQpLHRoaXMuYT09bi5hJiZZaSh0aGlzLmIsbi5iKT09MCk6ITF9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hP3VhKHRoaXMuYik6MH0saC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE/Ik9wdGlvbmFsRG91YmxlLm9mKCIrKCIiK3RoaXMuYikrIikiOiJPcHRpb25hbERvdWJsZS5lbXB0eSgpIn0saC5hPSExLGguYj0wO3ZhciBJMGU7SShMciwiT3B0aW9uYWxEb3VibGUiLDQxNCksRCg1MjQsMSx7NTI0OjF9LFZ0dCxhcnQpLGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIHQ9PT10aGlzPyEwOkRlKHQsNTI0KT8obj1sKHQsNTI0KSx0aGlzLmE9PW4uYSYmcnUodGhpcy5iLG4uYik9PTApOiExfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYT90aGlzLmI6MH0saC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE/Ik9wdGlvbmFsSW50Lm9mKCIrKCIiK3RoaXMuYikrIikiOiJPcHRpb25hbEludC5lbXB0eSgpIn0saC5hPSExLGguYj0wO3ZhciBBNnQ7SShMciwiT3B0aW9uYWxJbnQiLDUyNCksRCg1MTAsMjEwMyxXeSxnSCksaC5HYz1mdW5jdGlvbih0KXtyZXR1cm4gY3hlKHRoaXMsdCl9LGguJGI9ZnVuY3Rpb24oKXtheSh0aGlzLmIuYywwKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4odD09bnVsbD8tMTpnYyh0aGlzLmIsdCwwKSkhPS0xfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBKbih0aGlzKX0saC5NYz1mdW5jdGlvbih0KXtyZXR1cm4gaGZ0KHRoaXMsdCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iLmMubGVuZ3RofSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrbih0aGlzLDI1Nil9LGguUGM9ZnVuY3Rpb24oKXtyZXR1cm4gZUgodGhpcy5iLmMpfSxoLlFjPWZ1bmN0aW9uKHQpe3JldHVybiBqMSh0aGlzLmIsdCl9LEkoTHIsIlByaW9yaXR5UXVldWUiLDUxMCksRCgxMjk2LDEsT2EsSm4pLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE8dGhpcy5jLmIuYy5sZW5ndGh9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gbXIodGhpcy5hPHRoaXMuYy5iLmMubGVuZ3RoKSx0aGlzLmI9dGhpcy5hKyssanQodGhpcy5jLmIsdGhpcy5iKX0saC5RYj1mdW5jdGlvbigpe2d5KHRoaXMuYiE9LTEpLHJjZSh0aGlzLmMsdGhpcy5hPXRoaXMuYiksdGhpcy5iPS0xfSxoLmE9MCxoLmI9LTEsSShMciwiUHJpb3JpdHlRdWV1ZS8xIiwxMjk2KSxEKDIzNCwxLHsyMzQ6MX0sVWNlLFZIKSxoLmE9MCxoLmI9MDt2YXIgbV9lLHZfZSxmT249MDtJKExyLCJSYW5kb20iLDIzNCksRCgyNSwxLFBoLGtuLHZ3LF9hdCksaC5BZD1mdW5jdGlvbih0KXtyZXR1cm4odGhpcy5hJnQpIT0wfSxoLnlkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC56ZD1mdW5jdGlvbigpe3JldHVybiBpNWUodGhpcyksdGhpcy5jfSxoLk5iPWZ1bmN0aW9uKHQpe2k1ZSh0aGlzKSx0aGlzLmQuTmIodCl9LGguQmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHhodCh0aGlzLHQpfSxoLmE9MCxoLmM9MCxJKExyLCJTcGxpdGVyYXRvcnMvSXRlcmF0b3JTcGxpdGVyYXRvciIsMjUpLEQoNDk1LDI1LFBoLGFxKSxJKExyLCJTb3J0ZWRTZXQvMSIsNDk1KSxEKDYxMSwxLExQLGdvKSxoLlBlPWZ1bmN0aW9uKHQpe3RoaXMuYS5DZCh0KX0sSShMciwiU3BsaXRlcmF0b3IvT2ZEb3VibGUvMG1ldGhvZHJlZiRhY2NlcHQkVHlwZSIsNjExKSxEKDYxMiwxLExQLEVzKSxoLlBlPWZ1bmN0aW9uKHQpe3RoaXMuYS5DZCh0KX0sSShMciwiU3BsaXRlcmF0b3IvT2ZEb3VibGUvMW1ldGhvZHJlZiRhY2NlcHQkVHlwZSIsNjEyKSxEKDYxMywxLGtQLCRjKSxoLkRkPWZ1bmN0aW9uKHQpe3RoaXMuYS5DZChwdCh0KSl9LEkoTHIsIlNwbGl0ZXJhdG9yL09mSW50LzJtZXRob2RyZWYkYWNjZXB0JFR5cGUiLDYxMyksRCg2MTQsMSxrUCx6YSksaC5EZD1mdW5jdGlvbih0KXt0aGlzLmEuQ2QocHQodCkpfSxJKExyLCJTcGxpdGVyYXRvci9PZkludC8zbWV0aG9kcmVmJGFjY2VwdCRUeXBlIiw2MTQpLEQoNjI1LDEsUGgpLGguTmI9ZnVuY3Rpb24odCl7bDNlKHRoaXMsdCl9LGguQWQ9ZnVuY3Rpb24odCl7cmV0dXJuKHRoaXMuZCZ0KSE9MH0saC55ZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGguemQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lfSxoLmQ9MCxoLmU9MCxJKExyLCJTcGxpdGVyYXRvcnMvQmFzZVNwbGl0ZXJhdG9yIiw2MjUpLEQoNzM2LDYyNSxQaCksaC5RZT1mdW5jdGlvbih0KXtBNSh0aGlzLHQpfSxoLk5iPWZ1bmN0aW9uKHQpe0RlKHQsMTg5KT9BNSh0aGlzLGwodCwxODkpKTpBNSh0aGlzLG5ldyBFcyh0KSl9LGguQmQ9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMTg5KT90aGlzLlJlKGwodCwxODkpKTp0aGlzLlJlKG5ldyBnbyh0KSl9LEkoTHIsIlNwbGl0ZXJhdG9ycy9BYnN0cmFjdERvdWJsZVNwbGl0ZXJhdG9yIiw3MzYpLEQoNzM1LDYyNSxQaCksaC5RZT1mdW5jdGlvbih0KXtBNSh0aGlzLHQpfSxoLk5iPWZ1bmN0aW9uKHQpe0RlKHQsMjAyKT9BNSh0aGlzLGwodCwyMDIpKTpBNSh0aGlzLG5ldyB6YSh0KSl9LGguQmQ9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMjAyKT90aGlzLlJlKGwodCwyMDIpKTp0aGlzLlJlKG5ldyAkYyh0KSl9LEkoTHIsIlNwbGl0ZXJhdG9ycy9BYnN0cmFjdEludFNwbGl0ZXJhdG9yIiw3MzUpLEQoNTAwLDYyNSxQaCksSShMciwiU3BsaXRlcmF0b3JzL0Fic3RyYWN0U3BsaXRlcmF0b3IiLDUwMCksRCg3MDYsMSxQaCksaC5OYj1mdW5jdGlvbih0KXtsM2UodGhpcyx0KX0saC5BZD1mdW5jdGlvbih0KXtyZXR1cm4odGhpcy5iJnQpIT0wfSxoLnlkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0saC56ZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmQtdGhpcy5jfSxoLmI9MCxoLmM9MCxoLmQ9MCxJKExyLCJTcGxpdGVyYXRvcnMvQmFzZUFycmF5U3BsaXRlcmF0b3IiLDcwNiksRCg5NjAsNzA2LFBoLEtpdCksaC5TZT1mdW5jdGlvbih0LG4pe3d1bih0aGlzLGwodCw0MSksbil9LGguTmI9ZnVuY3Rpb24odCl7V2FlKHRoaXMsdCl9LGguQmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFhIKHRoaXMsdCl9LEkoTHIsIlNwbGl0ZXJhdG9ycy9BcnJheVNwbGl0ZXJhdG9yIiw5NjApLEQoNzA3LDcwNixQaCxvaXQpLGguU2U9ZnVuY3Rpb24odCxuKXt5dW4odGhpcyxsKHQsMTg5KSxuKX0saC5RZT1mdW5jdGlvbih0KXtXYWUodGhpcyx0KX0saC5OYj1mdW5jdGlvbih0KXtEZSh0LDE4OSk/V2FlKHRoaXMsbCh0LDE4OSkpOldhZSh0aGlzLG5ldyBFcyh0KSl9LGguUmU9ZnVuY3Rpb24odCl7cmV0dXJuIFhIKHRoaXMsdCl9LGguQmQ9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMTg5KT9YSCh0aGlzLGwodCwxODkpKTpYSCh0aGlzLG5ldyBnbyh0KSl9LEkoTHIsIlNwbGl0ZXJhdG9ycy9Eb3VibGVBcnJheVNwbGl0ZXJhdG9yIiw3MDcpLEQoMjA2NiwxLFBoKSxoLk5iPWZ1bmN0aW9uKHQpe2wzZSh0aGlzLHQpfSxoLkFkPWZ1bmN0aW9uKHQpe3JldHVybigxNjQ0OCZ0KSE9MH0saC55ZD1mdW5jdGlvbigpe3JldHVybiAxNjQ0OH0saC56ZD1mdW5jdGlvbigpe3JldHVybiAwfTt2YXIgTDZ0O0koTHIsIlNwbGl0ZXJhdG9ycy9FbXB0eVNwbGl0ZXJhdG9yIiwyMDY2KSxEKDk1OSwyMDY2LFBoLGxuKSxoLlFlPWZ1bmN0aW9uKHQpe24wKHQpfSxoLk5iPWZ1bmN0aW9uKHQpe0RlKHQsMjAyKT9uMChsKHQsMjAyKSk6bjAobmV3IHphKHQpKX0saC5SZT1mdW5jdGlvbih0KXtyZXR1cm4gVDNlKHQpfSxoLkJkPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDIwMik/VDNlKGwodCwyMDIpKTpUM2UobmV3ICRjKHQpKX0sSShMciwiU3BsaXRlcmF0b3JzL0VtcHR5U3BsaXRlcmF0b3IvT2ZJbnQiLDk1OSksRCg1ODgsNTYsV3d0LGp6KSxoLmJkPWZ1bmN0aW9uKHQsbil7cWsodCx0aGlzLmEuYy5sZW5ndGgrMSkscHcodGhpcy5hLHQsbil9LGguRmM9ZnVuY3Rpb24odCl7cmV0dXJuIHZ0KHRoaXMuYSx0KX0saC5jZD1mdW5jdGlvbih0LG4pe3JldHVybiBxayh0LHRoaXMuYS5jLmxlbmd0aCsxKSxRN2UodGhpcy5hLHQsbil9LGguR2M9ZnVuY3Rpb24odCl7cmV0dXJuIHJhKHRoaXMuYSx0KX0saC4kYj1mdW5jdGlvbigpe2F5KHRoaXMuYS5jLDApfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBnYyh0aGlzLmEsdCwwKSE9LTF9LGguSWM9ZnVuY3Rpb24odCl7cmV0dXJuIEVOKHRoaXMuYSx0KX0saC5KYz1mdW5jdGlvbih0KXtWdSh0aGlzLmEsdCl9LGguWGI9ZnVuY3Rpb24odCl7cmV0dXJuIHFrKHQsdGhpcy5hLmMubGVuZ3RoKSxqdCh0aGlzLmEsdCl9LGguZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIGdjKHRoaXMuYSx0LDApfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5jLmxlbmd0aD09MH0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRyh0aGlzLmEpfSxoLmdkPWZ1bmN0aW9uKHQpe3JldHVybiBxayh0LHRoaXMuYS5jLmxlbmd0aCksdDIodGhpcy5hLHQpfSxoLmNlPWZ1bmN0aW9uKHQsbil7Qm90KHRoaXMuYSx0LG4pfSxoLmhkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHFrKHQsdGhpcy5hLmMubGVuZ3RoKSxyZih0aGlzLmEsdCxuKX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuYy5sZW5ndGh9LGguamQ9ZnVuY3Rpb24odCl7VnModGhpcy5hLHQpfSxoLmtkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG5ldyBacCh0aGlzLmEsdCxuKX0saC5QYz1mdW5jdGlvbigpe3JldHVybiBlSCh0aGlzLmEuYyl9LGguUWM9ZnVuY3Rpb24odCl7cmV0dXJuIGoxKHRoaXMuYSx0KX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBUYih0aGlzLmEpfSxJKExyLCJWZWN0b3IiLDU4OCksRCg4MjQsNTg4LFd3dCxGd2UpLEkoTHIsIlN0YWNrIiw4MjQpLEQoMjEzLDEsezIxMzoxfSxIbSksaC5JYj1mdW5jdGlvbigpe3JldHVybiBnY3QodGhpcyl9LEkoTHIsIlN0cmluZ0pvaW5lciIsMjEzKSxEKDU1MywyMDkwLHszOjEsODU6MSwxMzk6MSwxMzM6MX0sbmV0LFBhZSksaC4kYj1mdW5jdGlvbigpe09KZSh0aGlzKX0saC5EZT1mdW5jdGlvbigpe3JldHVybiBuZXcgeGN0KHRoaXMpfSxoLnZjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBabnQodGhpcyl9LGguRWU9ZnVuY3Rpb24odCl7cmV0dXJuIE9FKHRoaXMsdCwhMCl9LGguRmU9ZnVuY3Rpb24odCl7cmV0dXJuIFMwdCh0aGlzLHQpfSxoLkdlPWZ1bmN0aW9uKCl7cmV0dXJuIGo2ZSh0aGlzKX0saC5IZT1mdW5jdGlvbih0KXtyZXR1cm4gJE4odGhpcyx0LCEwKX0saC5JZT1mdW5jdGlvbih0KXtyZXR1cm4gT0UodGhpcyx0LCExKX0saC5KZT1mdW5jdGlvbigpe3JldHVybiBObHQodGhpcyl9LGguS2U9ZnVuY3Rpb24odCl7cmV0dXJuICROKHRoaXMsdCwhMSl9LGguWmM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gRm90KHRoaXMsdCxuKX0saC56Yz1mdW5jdGlvbih0LG4pe3JldHVybiBiMHQodGhpcyx0LG4pfSxoLkJjPWZ1bmN0aW9uKHQpe3JldHVybiBhb3QodGhpcyx0KX0saC5MZT1mdW5jdGlvbih0KXtyZXR1cm4gTDZlKHRoaXMsdCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxoLmFkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFJvdCh0aGlzLHQsbil9LGguYz0wLEkoTHIsIlRyZWVNYXAiLDU1MyksRCg1NTQsMSxPYSx4Y3Qsb2NlKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gb3J0KHRoaXMpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIGxzZSh0aGlzLmEpfSxoLlFiPWZ1bmN0aW9uKCl7ZGl0KHRoaXMpfSxJKExyLCJUcmVlTWFwL0VudHJ5SXRlcmF0b3IiLDU1NCksRCgxMTQyLDYyOSxUbCxabnQpLGguJGI9ZnVuY3Rpb24oKXtPSmUodGhpcy5hKX0sSShMciwiVHJlZU1hcC9FbnRyeVNldCIsMTE0MiksRCg0NDcsMzk3LHs0OTQ6MSwzOTc6MSw0NDoxLDQ0NzoxfSxCb2UpLGguYj0hMTt2YXIgZE9uPUkoTHIsIlRyZWVNYXAvTm9kZSIsNDQ3KTtEKDYzMCwxLHt9LHh0KSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIlN0YXRlOiBtdj0iK3RoaXMuYysiIHZhbHVlPSIrdGhpcy5kKyIgZG9uZT0iK3RoaXMuYSsiIGZvdW5kPSIrdGhpcy5ifSxoLmE9ITEsaC5iPSExLGguYz0hMSxJKExyLCJUcmVlTWFwL1N0YXRlIiw2MzApLEQoNjMxLDIwOTAsWmtlLEJ1ZSksaC5EZT1mdW5jdGlvbigpe3JldHVybiBuZXcgb2NlKHRoaXMuYyx0aGlzLmYsdGhpcy5iLHRoaXMuYSx0aGlzLmUsdGhpcy5kKX0saC52Yz1mdW5jdGlvbigpe3JldHVybiBuZXcgUnModGhpcyl9LGguRWU9ZnVuY3Rpb24odCl7cmV0dXJuIFhxKHRoaXMsT0UodGhpcy5jLHQsITApKX0saC5GZT1mdW5jdGlvbih0KXtyZXR1cm4gWHEodGhpcyxTMHQodGhpcy5jLHQpKX0saC5HZT1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLmYuVGUoKT90aGlzLmE/dD1PRSh0aGlzLmMsdGhpcy5iLCEwKTp0PU9FKHRoaXMuYyx0aGlzLmIsITEpOnQ9ajZlKHRoaXMuYyksdCYmeUgodGhpcyx0LmQpP3Q6bnVsbH0saC5IZT1mdW5jdGlvbih0KXtyZXR1cm4gWHEodGhpcywkTih0aGlzLmMsdCwhMCkpfSxoLkllPWZ1bmN0aW9uKHQpe3JldHVybiBYcSh0aGlzLE9FKHRoaXMuYyx0LCExKSl9LGguSmU9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdGhpcy5mLlVlKCk/dGhpcy5kP3Q9JE4odGhpcy5jLHRoaXMuZSwhMCk6dD0kTih0aGlzLmMsdGhpcy5lLCExKTp0PU5sdCh0aGlzLmMpLHQmJnlIKHRoaXMsdC5kKT90Om51bGx9LGguS2U9ZnVuY3Rpb24odCl7cmV0dXJuIFhxKHRoaXMsJE4odGhpcy5jLHQsITEpKX0saC5aYz1mdW5jdGlvbih0LG4pe2lmKHRoaXMuZi5VZSgpJiZ0aGlzLmMuYS5OZSh0LHRoaXMuZSk+MCl0aHJvdyB1ZShuZXcgWW4obEVlK3QrIiBncmVhdGVyIHRoYW4gIit0aGlzLmUpKTtyZXR1cm4gdGhpcy5mLlRlKCk/c290KHRoaXMuYyx0aGlzLmIsdGhpcy5hLHQsbik6Rm90KHRoaXMuYyx0LG4pfSxoLnpjPWZ1bmN0aW9uKHQsbil7aWYoIXh1ZSh0aGlzLmMsdGhpcy5mLHQsdGhpcy5iLHRoaXMuYSx0aGlzLmUsdGhpcy5kKSl0aHJvdyB1ZShuZXcgWW4odCsiIG91dHNpZGUgdGhlIHJhbmdlICIrdGhpcy5iKyIgdG8gIit0aGlzLmUpKTtyZXR1cm4gYjB0KHRoaXMuYyx0LG4pfSxoLkJjPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBuPXQseHVlKHRoaXMuYyx0aGlzLmYsbix0aGlzLmIsdGhpcy5hLHRoaXMuZSx0aGlzLmQpP2FvdCh0aGlzLmMsbik6bnVsbH0saC5MZT1mdW5jdGlvbih0KXtyZXR1cm4geUgodGhpcyx0LmxkKCkpJiZMNmUodGhpcy5jLHQpfSxoLmdjPWZ1bmN0aW9uKCl7dmFyIHQsbixyO2lmKHRoaXMuZi5UZSgpP3RoaXMuYT9uPU9FKHRoaXMuYyx0aGlzLmIsITApOm49T0UodGhpcy5jLHRoaXMuYiwhMSk6bj1qNmUodGhpcy5jKSwhKG4mJnlIKHRoaXMsbi5kKSYmbikpcmV0dXJuIDA7Zm9yKHQ9MCxyPW5ldyBvY2UodGhpcy5jLHRoaXMuZix0aGlzLmIsdGhpcy5hLHRoaXMuZSx0aGlzLmQpO2xzZShyLmEpO3IuYj1sKEk1ZShyLmEpLDQ0KSkrK3Q7cmV0dXJuIHR9LGguYWQ9ZnVuY3Rpb24odCxuKXtpZih0aGlzLmYuVGUoKSYmdGhpcy5jLmEuTmUodCx0aGlzLmIpPDApdGhyb3cgdWUobmV3IFluKGxFZSt0K1l3dCt0aGlzLmIpKTtyZXR1cm4gdGhpcy5mLlVlKCk/c290KHRoaXMuYyx0LG4sdGhpcy5lLHRoaXMuZCk6Um90KHRoaXMuYyx0LG4pfSxoLmE9ITEsaC5kPSExLEkoTHIsIlRyZWVNYXAvU3ViTWFwIiw2MzEpLEQoMzA0LDIyLGZoZSxvcSksaC5UZT1mdW5jdGlvbigpe3JldHVybiExfSxoLlVlPWZ1bmN0aW9uKCl7cmV0dXJuITF9O3ZhciBPMGUsTjBlLFAwZSxCMGUsZks9RnIoTHIsIlRyZWVNYXAvU3ViTWFwVHlwZSIsMzA0LEhyLEdibixuMG4pO0QoMTE0MywzMDQsZmhlLGhudCksaC5VZT1mdW5jdGlvbigpe3JldHVybiEwfSxGcihMciwiVHJlZU1hcC9TdWJNYXBUeXBlLzEiLDExNDMsZkssbnVsbCxudWxsKSxEKDExNDQsMzA0LGZoZSx5bnQpLGguVGU9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5VZT1mdW5jdGlvbigpe3JldHVybiEwfSxGcihMciwiVHJlZU1hcC9TdWJNYXBUeXBlLzIiLDExNDQsZkssbnVsbCxudWxsKSxEKDExNDUsMzA0LGZoZSxsbnQpLGguVGU9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sRnIoTHIsIlRyZWVNYXAvU3ViTWFwVHlwZS8zIiwxMTQ1LGZLLG51bGwsbnVsbCk7dmFyIE02dDtEKDE1NyxxMSx7MzoxLDIwOjEsMzE6MSwxNjoxLDI3NzoxLDIxOjEsODc6MSwxNTc6MX0sTHdlLEtwLGJhKSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBhcSh0aGlzKX0saC5GYz1mdW5jdGlvbih0KXtyZXR1cm4gak8odGhpcyx0KX0saC4kYj1mdW5jdGlvbigpe3RoaXMuYS4kYigpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEuX2IodCl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmVjKCkuS2MoKX0saC5NYz1mdW5jdGlvbih0KXtyZXR1cm4gdGFlKHRoaXMsdCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmdjKCl9O3ZhciBnT249SShMciwiVHJlZVNldCIsMTU3KTtEKDEwODIsMSx7fSx4byksaC5WZT1mdW5jdGlvbih0LG4pe3JldHVybiB3Zm4odGhpcy5hLHQsbil9LEkoZGhlLCJCaW5hcnlPcGVyYXRvci9sYW1iZGEkMCRUeXBlIiwxMDgyKSxEKDEwODMsMSx7fSxsaCksaC5WZT1mdW5jdGlvbih0LG4pe3JldHVybiB5Zm4odGhpcy5hLHQsbil9LEkoZGhlLCJCaW5hcnlPcGVyYXRvci9sYW1iZGEkMSRUeXBlIiwxMDgzKSxEKDk1MiwxLHt9LFB0KSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxJKGRoZSwiRnVuY3Rpb24vbGFtYmRhJDAkVHlwZSIsOTUyKSxEKDM5NSwxLHRpLFdsKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiF0aGlzLmEuTWIodCl9LEkoZGhlLCJQcmVkaWNhdGUvbGFtYmRhJDIkVHlwZSIsMzk1KSxEKDU4MSwxLHs1ODE6MX0pO3ZhciBENnQ9SShhTCwiSGFuZGxlciIsNTgxKTtEKDIxMDcsMSx5UCksaC54ZT1mdW5jdGlvbigpe3JldHVybiJEVU1NWSJ9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54ZSgpfTt2YXIgd19lO0koYUwsIkxldmVsIiwyMTA3KSxEKDE3MDYsMjEwNyx5UCxRZSksaC54ZT1mdW5jdGlvbigpe3JldHVybiJJTkZPIn0sSShhTCwiTGV2ZWwvTGV2ZWxJbmZvIiwxNzA2KSxEKDE4NDMsMSx7fSxGUWUpO3ZhciBGMGU7SShhTCwiTG9nTWFuYWdlciIsMTg0MyksRCgxODk2LDEseVAsZml0KSxoLmI9bnVsbCxJKGFMLCJMb2dSZWNvcmQiLDE4OTYpLEQoNTI1LDEsezUyNToxfSxTb2UpLGguZT0hMTt2YXIgSTZ0PSExLE82dD0hMSxHMT0hMSxONnQ9ITEsUDZ0PSExO0koYUwsIkxvZ2dlciIsNTI1KSxEKDgzNSw1ODEsezU4MToxfSxEdCksSShhTCwiU2ltcGxlQ29uc29sZUxvZ0hhbmRsZXIiLDgzNSksRCgxMDgsMjIsezM6MSwzNDoxLDIyOjEsMTA4OjF9LGRzZSk7dmFyIHlfZSxFYyxpNCxvYz1GcihzYSwiQ29sbGVjdG9yL0NoYXJhY3RlcmlzdGljcyIsMTA4LEhyLE8ybixyMG4pLEI2dDtEKDc1OCwxLHt9LGg1ZSksSShzYSwiQ29sbGVjdG9ySW1wbCIsNzU4KSxEKDEwNzQsMSx7fSxrdCksaC5WZT1mdW5jdGlvbih0LG4pe3JldHVybiBkNG4obCh0LDIxMyksbChuLDIxMykpfSxJKHNhLCJDb2xsZWN0b3JzLzEwbWV0aG9kcmVmJG1lcmdlJFR5cGUiLDEwNzQpLEQoMTA3NSwxLHt9LE9uKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBnY3QobCh0LDIxMykpfSxJKHNhLCJDb2xsZWN0b3JzLzExbWV0aG9kcmVmJHRvU3RyaW5nJFR5cGUiLDEwNzUpLEQoMTA3NiwxLHt9LFoyKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBIbigpLCEhc3llKHQpfSxJKHNhLCJDb2xsZWN0b3JzLzEybWV0aG9kcmVmJHRlc3QkVHlwZSIsMTA3NiksRCgxNDQsMSx7fSxodCksaC5ZZD1mdW5jdGlvbih0LG4pe2wodCwxNikuRmMobil9LEkoc2EsIkNvbGxlY3RvcnMvMjBtZXRob2RyZWYkYWRkJFR5cGUiLDE0NCksRCgxNDYsMSx7fSx6ciksaC5YZT1mdW5jdGlvbigpe3JldHVybiBuZXcgYnR9LEkoc2EsIkNvbGxlY3RvcnMvMjFtZXRob2RyZWYkY3RvciRUeXBlIiwxNDYpLEQoMzU5LDEse30seXQpLGguWGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEtzfSxJKHNhLCJDb2xsZWN0b3JzLzIzbWV0aG9kcmVmJGN0b3IkVHlwZSIsMzU5KSxEKDM2MCwxLHt9LGppKSxoLllkPWZ1bmN0aW9uKHQsbil7bmEobCh0LDQ5KSxuKX0sSShzYSwiQ29sbGVjdG9ycy8yNG1ldGhvZHJlZiRhZGQkVHlwZSIsMzYwKSxEKDEwNjksMSx7fSx4aSksaC5WZT1mdW5jdGlvbih0LG4pe3JldHVybiByZXQobCh0LDE1KSxsKG4sMTYpKX0sSShzYSwiQ29sbGVjdG9ycy80bWV0aG9kcmVmJGFkZEFsbCRUeXBlIiwxMDY5KSxEKDEwNzMsMSx7fSxNYSksaC5ZZD1mdW5jdGlvbih0LG4pe0pnKGwodCwyMTMpLGwobiw0ODQpKX0sSShzYSwiQ29sbGVjdG9ycy85bWV0aG9kcmVmJGFkZCRUeXBlIiwxMDczKSxEKDEwNzIsMSx7fSxMaXQpLGguWGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEhtKHRoaXMuYSx0aGlzLmIsdGhpcy5jKX0sSShzYSwiQ29sbGVjdG9ycy9sYW1iZGEkMTUkVHlwZSIsMTA3MiksRCgxMDc3LDEse30senMpLGguWGU9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1uZXcgZTIsaDIodCwoSG4oKSwhMSksbmV3IGJ0KSxoMih0LCEwLG5ldyBidCksdH0sSShzYSwiQ29sbGVjdG9ycy9sYW1iZGEkMjIkVHlwZSIsMTA3NyksRCgxMDc4LDEse30sZWIpLGguWGU9ZnVuY3Rpb24oKXtyZXR1cm4gaGUobGUod2EsMSksUm4sMSw1LFt0aGlzLmFdKX0sSShzYSwiQ29sbGVjdG9ycy9sYW1iZGEkMjUkVHlwZSIsMTA3OCksRCgxMDc5LDEse30sRzApLGguWWQ9ZnVuY3Rpb24odCxuKXtqZG4odGhpcy5hLGptKHQpKX0sSShzYSwiQ29sbGVjdG9ycy9sYW1iZGEkMjYkVHlwZSIsMTA3OSksRCgxMDgwLDEse30senApLGguVmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZGduKHRoaXMuYSxqbSh0KSxqbShuKSl9LEkoc2EsIkNvbGxlY3RvcnMvbGFtYmRhJDI3JFR5cGUiLDEwODApLEQoMTA4MSwxLHt9LGFvKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBqbSh0KVswXX0sSShzYSwiQ29sbGVjdG9ycy9sYW1iZGEkMjgkVHlwZSIsMTA4MSksRCg3MjgsMSx7fSxUciksaC5WZT1mdW5jdGlvbih0LG4pe3JldHVybiBVNGUodCxuKX0sSShzYSwiQ29sbGVjdG9ycy9sYW1iZGEkNCRUeXBlIiw3MjgpLEQoMTQ1LDEse30sRm4pLGguVmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gV3VuKGwodCwxNiksbChuLDE2KSl9LEkoc2EsIkNvbGxlY3RvcnMvbGFtYmRhJDQyJFR5cGUiLDE0NSksRCgzNjEsMSx7fSxxbiksaC5WZT1mdW5jdGlvbih0LG4pe3JldHVybiBZdW4obCh0LDQ5KSxsKG4sNDkpKX0sSShzYSwiQ29sbGVjdG9ycy9sYW1iZGEkNTAkVHlwZSIsMzYxKSxEKDM2MiwxLHt9LFVuKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsNDkpfSxJKHNhLCJDb2xsZWN0b3JzL2xhbWJkYSQ1MSRUeXBlIiwzNjIpLEQoMTA2OCwxLHt9LGZkKSxoLllkPWZ1bmN0aW9uKHQsbil7d3luKHRoaXMuYSxsKHQsODUpLG4pfSxJKHNhLCJDb2xsZWN0b3JzL2xhbWJkYSQ3JFR5cGUiLDEwNjgpLEQoMTA3MCwxLHt9LEF0KSxoLlZlPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFkzbihsKHQsODUpLGwobiw4NSksbmV3IHhpKX0sSShzYSwiQ29sbGVjdG9ycy9sYW1iZGEkOCRUeXBlIiwxMDcwKSxEKDEwNzEsMSx7fSxXdiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gRzRuKHRoaXMuYSxsKHQsODUpKX0sSShzYSwiQ29sbGVjdG9ycy9sYW1iZGEkOSRUeXBlIiwxMDcxKSxEKDU1MCwxLHt9KSxoLiRlPWZ1bmN0aW9uKCl7dEEodGhpcyl9LGguZD0hMSxJKHNhLCJUZXJtaW5hdGFibGVTdHJlYW0iLDU1MCksRCg4MjcsNTUwLGhFZSxWeWUpLGguJGU9ZnVuY3Rpb24oKXt0QSh0aGlzKX0sSShzYSwiRG91YmxlU3RyZWFtSW1wbCIsODI3KSxEKDE4NDcsNzM2LFBoLE1pdCksaC5SZT1mdW5jdGlvbih0KXtyZXR1cm4gWTZuKHRoaXMsbCh0LDE4OSkpfSxoLmE9bnVsbCxJKHNhLCJEb3VibGVTdHJlYW1JbXBsLzIiLDE4NDcpLEQoMTg0OCwxLExQLHN5KSxoLlBlPWZ1bmN0aW9uKHQpe3Fsbih0aGlzLmEsdCl9LEkoc2EsIkRvdWJsZVN0cmVhbUltcGwvMi9sYW1iZGEkMCRUeXBlIiwxODQ4KSxEKDE4NDUsMSxMUCxFOCksaC5QZT1mdW5jdGlvbih0KXt6bG4odGhpcy5hLHQpfSxJKHNhLCJEb3VibGVTdHJlYW1JbXBsL2xhbWJkYSQwJFR5cGUiLDE4NDUpLEQoMTg0NiwxLExQLHg1KSxoLlBlPWZ1bmN0aW9uKHQpe00xdCh0aGlzLmEsdCl9LEkoc2EsIkRvdWJsZVN0cmVhbUltcGwvbGFtYmRhJDIkVHlwZSIsMTg0NiksRCgxMzk3LDczNSxQaCx3dXQpLGguUmU9ZnVuY3Rpb24odCl7cmV0dXJuIFBibih0aGlzLGwodCwyMDIpKX0saC5hPTAsaC5iPTAsaC5jPTAsSShzYSwiSW50U3RyZWFtLzUiLDEzOTcpLEQoODA2LDU1MCxoRWUsVXllKSxoLiRlPWZ1bmN0aW9uKCl7dEEodGhpcyl9LGguX2U9ZnVuY3Rpb24oKXtyZXR1cm4gZmIodGhpcyksdGhpcy5hfSxJKHNhLCJJbnRTdHJlYW1JbXBsIiw4MDYpLEQoODA3LDU1MCxoRWUsYjNlKSxoLiRlPWZ1bmN0aW9uKCl7dEEodGhpcyl9LGguX2U9ZnVuY3Rpb24oKXtyZXR1cm4gZmIodGhpcyksU3llKCksTDZ0fSxJKHNhLCJJbnRTdHJlYW1JbXBsL0VtcHR5Iiw4MDcpLEQoMTY4NywxLGtQLFQ4KSxoLkRkPWZ1bmN0aW9uKHQpeyRmdCh0aGlzLmEsdCl9LEkoc2EsIkludFN0cmVhbUltcGwvbGFtYmRhJDQkVHlwZSIsMTY4Nyk7dmFyIHBPbj1rcyhzYSwiU3RyZWFtIik7RCgyNiw1NTAsezUzMzoxLDY4NzoxLDg0ODoxfSxibiksaC4kZT1mdW5jdGlvbigpe3RBKHRoaXMpfTt2YXIgeng7SShzYSwiU3RyZWFtSW1wbCIsMjYpLEQoMTEwMiw1MDAsUGgsaWl0KSxoLkJkPWZ1bmN0aW9uKHQpe2Zvcig7UnZuKHRoaXMpOyl7aWYodGhpcy5hLkJkKHQpKXJldHVybiEwO3RBKHRoaXMuYiksdGhpcy5iPW51bGwsdGhpcy5hPW51bGx9cmV0dXJuITF9LEkoc2EsIlN0cmVhbUltcGwvMSIsMTEwMiksRCgxMTAzLDEsZnIsWlMpLGguQ2Q9ZnVuY3Rpb24odCl7aGRuKHRoaXMuYSxsKHQsODQ4KSl9LEkoc2EsIlN0cmVhbUltcGwvMS9sYW1iZGEkMCRUeXBlIiwxMTAzKSxEKDExMDQsMSx0aSxrNSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbmEodGhpcy5hLHQpfSxJKHNhLCJTdHJlYW1JbXBsLzFtZXRob2RyZWYkYWRkJFR5cGUiLDExMDQpLEQoMTEwNSw1MDAsUGgsUmF0KSxoLkJkPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiB0aGlzLmF8fChuPW5ldyBidCx0aGlzLmIuYS5OYihuZXcgUWQobikpLENuKCksVnMobix0aGlzLmMpLHRoaXMuYT1uZXcga24obiwxNikpLHhodCh0aGlzLmEsdCl9LGguYT1udWxsLEkoc2EsIlN0cmVhbUltcGwvNSIsMTEwNSksRCgxMTA2LDEsZnIsUWQpLGguQ2Q9ZnVuY3Rpb24odCl7dnQodGhpcy5hLHQpfSxJKHNhLCJTdHJlYW1JbXBsLzUvMm1ldGhvZHJlZiRhZGQkVHlwZSIsMTEwNiksRCg3MzcsNTAwLFBoLCQ2ZSksaC5CZD1mdW5jdGlvbih0KXtmb3IodGhpcy5iPSExOyF0aGlzLmImJnRoaXMuYy5CZChuZXcgeGV0KHRoaXMsdCkpOyk7cmV0dXJuIHRoaXMuYn0saC5iPSExLEkoc2EsIlN0cmVhbUltcGwvRmlsdGVyU3BsaXRlcmF0b3IiLDczNyksRCgxMDk2LDEsZnIseGV0KSxoLkNkPWZ1bmN0aW9uKHQpe29nbih0aGlzLmEsdGhpcy5iLHQpfSxJKHNhLCJTdHJlYW1JbXBsL0ZpbHRlclNwbGl0ZXJhdG9yL2xhbWJkYSQwJFR5cGUiLDEwOTYpLEQoMTA5MSw3MzYsUGgsTXV0KSxoLlJlPWZ1bmN0aW9uKHQpe3JldHVybiB6Zm4odGhpcyxsKHQsMTg5KSl9LEkoc2EsIlN0cmVhbUltcGwvTWFwVG9Eb3VibGVTcGxpdGVyYXRvciIsMTA5MSksRCgxMDk1LDEsZnIsa2V0KSxoLkNkPWZ1bmN0aW9uKHQpe2hsbih0aGlzLmEsdGhpcy5iLHQpfSxJKHNhLCJTdHJlYW1JbXBsL01hcFRvRG91YmxlU3BsaXRlcmF0b3IvbGFtYmRhJDAkVHlwZSIsMTA5NSksRCgxMDkwLDczNSxQaCxEdXQpLGguUmU9ZnVuY3Rpb24odCl7cmV0dXJuIHFmbih0aGlzLGwodCwyMDIpKX0sSShzYSwiU3RyZWFtSW1wbC9NYXBUb0ludFNwbGl0ZXJhdG9yIiwxMDkwKSxEKDEwOTQsMSxmcixFZXQpLGguQ2Q9ZnVuY3Rpb24odCl7ZmxuKHRoaXMuYSx0aGlzLmIsdCl9LEkoc2EsIlN0cmVhbUltcGwvTWFwVG9JbnRTcGxpdGVyYXRvci9sYW1iZGEkMCRUeXBlIiwxMDk0KSxEKDczNCw1MDAsUGgsQzZlKSxoLkJkPWZ1bmN0aW9uKHQpe3JldHVybiB0aXQodGhpcyx0KX0sSShzYSwiU3RyZWFtSW1wbC9NYXBUb09ialNwbGl0ZXJhdG9yIiw3MzQpLEQoMTA5MywxLGZyLFRldCksaC5DZD1mdW5jdGlvbih0KXtkbG4odGhpcy5hLHRoaXMuYix0KX0sSShzYSwiU3RyZWFtSW1wbC9NYXBUb09ialNwbGl0ZXJhdG9yL2xhbWJkYSQwJFR5cGUiLDEwOTMpLEQoMTA5Miw1MDAsUGgsYWZ0KSxoLkJkPWZ1bmN0aW9uKHQpe2Zvcig7aHNlKHRoaXMuYiwwKTspe2lmKCF0aGlzLmEuQmQobmV3IHd0KSlyZXR1cm4hMTt0aGlzLmI9RGYodGhpcy5iLDEpfXJldHVybiB0aGlzLmEuQmQodCl9LGguYj0wLEkoc2EsIlN0cmVhbUltcGwvU2tpcFNwbGl0ZXJhdG9yIiwxMDkyKSxEKDEwOTcsMSxmcix3dCksaC5DZD1mdW5jdGlvbih0KXt9LEkoc2EsIlN0cmVhbUltcGwvU2tpcFNwbGl0ZXJhdG9yL2xhbWJkYSQwJFR5cGUiLDEwOTcpLEQoNjI2LDEsZnIsb24pLGguQ2Q9ZnVuY3Rpb24odCl7RWllKHRoaXMsdCl9LEkoc2EsIlN0cmVhbUltcGwvVmFsdWVDb25zdW1lciIsNjI2KSxEKDEwOTgsMSxmcixmbiksaC5DZD1mdW5jdGlvbih0KXtBbSgpfSxJKHNhLCJTdHJlYW1JbXBsL2xhbWJkYSQwJFR5cGUiLDEwOTgpLEQoMTA5OSwxLGZyLEFuKSxoLkNkPWZ1bmN0aW9uKHQpe0FtKCl9LEkoc2EsIlN0cmVhbUltcGwvbGFtYmRhJDEkVHlwZSIsMTA5OSksRCgxMTAwLDEse30sXzEpLGguVmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4geTBuKHRoaXMuYSx0LG4pfSxJKHNhLCJTdHJlYW1JbXBsL2xhbWJkYSQ0JFR5cGUiLDExMDApLEQoMTEwMSwxLGZyLENldCksaC5DZD1mdW5jdGlvbih0KXtTZm4odGhpcy5iLHRoaXMuYSx0KX0sSShzYSwiU3RyZWFtSW1wbC9sYW1iZGEkNSRUeXBlIiwxMTAxKSxEKDExMDcsMSxmcixKZCksaC5DZD1mdW5jdGlvbih0KXtGM24odGhpcy5hLGwodCwzODApKX0sSShzYSwiVGVybWluYXRhYmxlU3RyZWFtL2xhbWJkYSQwJFR5cGUiLDExMDcpLEQoMjE0MiwxLHt9KSxEKDIwMTQsMSx7fSxvbyksSSgiamF2YWVtdWwuaW50ZXJuYWwiLCJDb25zb2xlTG9nZ2VyIiwyMDE0KTt2YXIgYk9uPTA7RCgyMTM0LDEse30pLEQoMTgzMCwxLGZyLGpvKSxoLkNkPWZ1bmN0aW9uKHQpe2wodCwzMTcpfSxJKG9ULCJCb3d5ZXJXYXRzb25Ucmlhbmd1bGF0aW9uL2xhbWJkYSQwJFR5cGUiLDE4MzApLEQoMTgzMSwxLGZyLEVtKSxoLkNkPWZ1bmN0aW9uKHQpe0thKHRoaXMuYSxsKHQsMzE3KS5lKX0sSShvVCwiQm93eWVyV2F0c29uVHJpYW5ndWxhdGlvbi9sYW1iZGEkMSRUeXBlIiwxODMxKSxEKDE4MzIsMSxmciwkbyksaC5DZD1mdW5jdGlvbih0KXtsKHQsMTc3KX0sSShvVCwiQm93eWVyV2F0c29uVHJpYW5ndWxhdGlvbi9sYW1iZGEkMiRUeXBlIiwxODMyKSxEKDE4MjcsMSxpaSxMeiksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiB5bW4odGhpcy5hLGwodCwxNzcpLGwobiwxNzcpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKG9ULCJOYWl2ZU1pblNUL2xhbWJkYSQwJFR5cGUiLDE4MjcpLEQoNDQ5LDEse30sWXYpLEkob1QsIk5vZGVNaWNyb0xheW91dCIsNDQ5KSxEKDE3NywxLHsxNzc6MX0sQjgpLGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIERlKHQsMTc3KT8obj1sKHQsMTc3KSxKYyh0aGlzLmEsbi5hKSYmSmModGhpcy5iLG4uYil8fEpjKHRoaXMuYSxuLmIpJiZKYyh0aGlzLmIsbi5hKSk6ITF9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gUjUodGhpcy5hKStSNSh0aGlzLmIpfTt2YXIgbU9uPUkob1QsIlRFZGdlIiwxNzcpO0QoMzE3LDEsezMxNzoxfSxDa2UpLGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIERlKHQsMzE3KT8obj1sKHQsMzE3KSxyVih0aGlzLG4uYSkmJnJWKHRoaXMsbi5iKSYmclYodGhpcyxuLmMpKTohMX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBSNSh0aGlzLmEpK1I1KHRoaXMuYikrUjUodGhpcy5jKX0sSShvVCwiVFRyaWFuZ2xlIiwzMTcpLEQoMjI1LDEsezIyNToxfSxOcSksSShvVCwiVHJlZSIsMjI1KSxEKDEyMTgsMSx7fSxFb3QpLEkoSnd0LCJTY2FubGluZSIsMTIxOCk7dmFyIEY2dD1rcyhKd3QsWnd0KTtEKDE3NTgsMSx7fSx2aHQpLEkoZ2csIkNHcmFwaCIsMTc1OCksRCgzMTYsMSx7MzE2OjF9LFNvdCksaC5iPTAsaC5jPTAsaC5kPTAsaC5nPTAsaC5pPTAsaC5rPWlhLEkoZ2csIkNHcm91cCIsMzE2KSxEKDgzMCwxLHt9LEl3ZSksSShnZywiQ0dyb3VwL0NHcm91cEJ1aWxkZXIiLDgzMCksRCg2MCwxLHs2MDoxfSxScnQpLGguSWI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdGhpcy5qP2VpKHRoaXMuai5LYih0aGlzKSk6KEdnKGRLKSxkSy5vKyJAIisodD1mdyh0aGlzKT4+PjAsdC50b1N0cmluZygxNikpKX0saC5mPTAsaC5pPWlhO3ZhciBkSz1JKGdnLCJDTm9kZSIsNjApO0QoODI5LDEse30sT3dlKSxJKGdnLCJDTm9kZS9DTm9kZUJ1aWxkZXIiLDgyOSk7dmFyIFI2dDtEKDE1OTAsMSx7fSxQYSksaC5mZj1mdW5jdGlvbih0LG4pe3JldHVybiAwfSxoLmdmPWZ1bmN0aW9uKHQsbil7cmV0dXJuIDB9LEkoZ2csdDN0LDE1OTApLEQoMTg1MywxLHt9LHdvKSxoLmNmPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGU7Zm9yKEM9Z3MsYT1uZXcgRyh0LmEuYik7YS5hPGEuYy5jLmxlbmd0aDspbj1sKHJlKGEpLDYwKSxDPWIuTWF0aC5taW4oQyxuLmEuai5kLmMrbi5iLmEpO2ZvcihWPW5ldyBvcyxnPW5ldyBHKHQuYS5hKTtnLmE8Zy5jLmMubGVuZ3RoOylmPWwocmUoZyksMzE2KSxmLms9QyxmLmc9PTAmJkNzKFYsZixWLmMuYixWLmMpO2Zvcig7Vi5iIT0wOyl7Zm9yKGY9bChWLmI9PTA/bnVsbDoobXIoVi5iIT0wKSxhZihWLFYuYS5hKSksMzE2KSxvPWYuai5kLmMsej1mLmEuYS5lYygpLktjKCk7ei5PYigpOylMPWwoei5QYigpLDYwKSx0ZT1mLmsrTC5iLmEsIUp5bih0LGYsdC5kKXx8TC5kLmM8dGU/TC5pPXRlOkwuaT1MLmQuYztmb3Ioby09Zi5qLmksZi5iKz1vLHQuZD09KEpzKCksdmMpfHx0LmQ9PVExP2YuYys9bzpmLmMtPW8sQj1mLmEuYS5lYygpLktjKCk7Qi5PYigpOylmb3IoTD1sKEIuUGIoKSw2MCksRT1MLmMuS2MoKTtFLk9iKCk7KXc9bChFLlBiKCksNjApLFVnKHQuZCk/Sj10LmcuZmYoTCx3KTpKPXQuZy5nZihMLHcpLHcuYS5rPWIuTWF0aC5tYXgody5hLmssTC5pK0wuZC5iK0otdy5iLmEpLEdhdCh0LHcsdC5kKSYmKHcuYS5rPWIuTWF0aC5tYXgody5hLmssdy5kLmMtdy5iLmEpKSwtLXcuYS5nLHcuYS5nPT0wJiZ1aShWLHcuYSl9Zm9yKHI9bmV3IEcodC5hLmIpO3IuYTxyLmMuYy5sZW5ndGg7KW49bChyZShyKSw2MCksbi5kLmM9bi5pfSxJKGdnLCJMb25nZXN0UGF0aENvbXBhY3Rpb24iLDE4NTMpLEQoMTc1NiwxLHt9LGEydCksaC5lPSExO3ZhciBqNnQsJDZ0LHo2dCxSMGU9SShnZyxpM3QsMTc1Nik7RCgxNzU3LDEsZnIsTGllKSxoLkNkPWZ1bmN0aW9uKHQpe1ozbih0aGlzLmEsbCh0LDQyKSl9LEkoZ2csczN0LDE3NTcpLEQoMTg1NCwxLHt9LF9zKSxoLmRmPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvLGYsZyx3O2ZvcihyPW5ldyBHKHQuYS5iKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksNjApLG4uYy4kYigpO2ZvcihvPW5ldyBHKHQuYS5iKTtvLmE8by5jLmMubGVuZ3RoOylmb3IoYT1sKHJlKG8pLDYwKSxnPW5ldyBHKHQuYS5iKTtnLmE8Zy5jLmMubGVuZ3RoOylmPWwocmUoZyksNjApLGEhPWYmJihhLmEmJmEuYT09Zi5hfHwoVWcodC5kKT93PXQuZy5nZihhLGYpOnc9dC5nLmZmKGEsZiksKGYuZC5jPmEuZC5jfHxhLmQuYz09Zi5kLmMmJmEuZC5iPGYuZC5iKSYmUjVuKGYuZC5kK2YuZC5hK3csYS5kLmQpJiZqOGUoZi5kLmQsYS5kLmQrYS5kLmErdykmJmEuYy5GYyhmKSkpfSxJKGdnLCJRdWFkcmF0aWNDb25zdHJhaW50Q2FsY3VsYXRpb24iLDE4NTQpLEQoNTI5LDEsezUyOToxfSxCaWUpLGguYT0hMSxoLmI9ITEsaC5jPSExLGguZD0hMSxJKGdnLGEzdCw1MjkpLEQoODE3LDEse30sWDRlKSxoLmRmPWZ1bmN0aW9uKHQpe3RoaXMuYz10LFpOKHRoaXMsbmV3IGowKX0sSShnZyxvM3QsODE3KSxEKDE3ODQsMSx7NjkzOjF9LFdhdCksaC5iZj1mdW5jdGlvbih0KXtaOW4odGhpcyxsKHQsNDczKSl9LEkoZ2csYzN0LDE3ODQpLEQoMTc4NSwxLGlpLHRsKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGxwbihsKHQsNjApLGwobiw2MCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoZ2csdTN0LDE3ODUpLEQoNDczLDEsezQ3MzoxfSxTM2UpLGguYT0hMSxJKGdnLGwzdCw0NzMpLEQoMTc4NiwxLGlpLGRhKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGw4bihsKHQsNDczKSxsKG4sNDczKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShnZyxoM3QsMTc4NiksRCgxNzg3LDEsTGQsajApLGguTGI9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCw2MCksITB9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsNjApLCEwfSxJKGdnLCJTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdG9yL2xhbWJkYSQxJFR5cGUiLDE3ODcpLEQoNDM2LDIyLHszOjEsMzQ6MSwyMjoxLDQzNjoxfSxfM2UpO3ZhciB4X2UsajBlLGtfZT1GcihtaGUsIkhpZ2hMZXZlbFNvcnRpbmdDcml0ZXJpb24iLDQzNixIcixqcG4saTBuKSxxNnQ7RCg0MzUsMjIsezM6MSwzNDoxLDIyOjEsNDM1OjF9LEEzZSk7dmFyIEVfZSwkMGUsVF9lPUZyKG1oZSwiTG93TGV2ZWxTb3J0aW5nQ3JpdGVyaW9uIiw0MzUsSHIsJHBuLHMwbiksSDZ0LEw2PWtzKE5jLCJJTGF5b3V0TWV0YURhdGFQcm92aWRlciIpO0QoODY0LDEsUGYsZXopLGguaGY9ZnVuY3Rpb24odCl7c24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHBFZSksdmhlKSwiUG9seW9taW5vIFRyYXZlcnNhbCBTdHJhdGVneSIpLCJUcmF2ZXJzYWwgc3RyYXRlZ3kgZm9yIHRyeWluZyBkaWZmZXJlbnQgY2FuZGlkYXRlIHBvc2l0aW9ucyBmb3IgcG9seW9taW5vZXMuIiksRF9lKSwoZzIoKSxwcykpLCRfZSksdW4oKHIxKCksUG4pKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsYkVlKSx2aGUpLCJQb2x5b21pbm8gU2Vjb25kYXJ5IFNvcnRpbmcgQ3JpdGVyaW9uIiksIlBvc3NpYmxlIHNlY29uZGFyeSBzb3J0aW5nIGNyaXRlcmlhIGZvciB0aGUgcHJvY2Vzc2luZyBvcmRlciBvZiBwb2x5b21pbm9lcy4gVGhleSBhcmUgdXNlZCB3aGVuIHBvbHlvbWlub2VzIGFyZSBlcXVhbCBhY2NvcmRpbmcgdG8gdGhlIHByaW1hcnkgc29ydGluZyBjcml0ZXJpb24gSGlnaExldmVsU29ydGluZ0NyaXRlcmlvbi4iKSxMX2UpLHBzKSxUX2UpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsbUVlKSx2aGUpLCJQb2x5b21pbm8gUHJpbWFyeSBTb3J0aW5nIENyaXRlcmlvbiIpLCJQb3NzaWJsZSBwcmltYXJ5IHNvcnRpbmcgY3JpdGVyaWEgZm9yIHRoZSBwcm9jZXNzaW5nIG9yZGVyIG9mIHBvbHlvbWlub2VzLiIpLF9fZSkscHMpLGtfZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCx2RWUpLHZoZSksIkZpbGwgUG9seW9taW5vZXMiKSwiVXNlIHRoZSBQcm9maWxlIEZpbGwgYWxnb3JpdGhtIHRvIGZpbGwgcG9seW9taW5vZXMgdG8gcHJldmVudCBzbWFsbCBwb2x5b21pbm9lcyBmcm9tIGJlaW5nIHBsYWNlZCBpbnNpZGUgb2YgYmlnIHBvbHlvbWlub2VzIHdpdGggbGFyZ2UgaG9sZXMuIE1pZ2h0IGluY3JlYXNlIHBhY2tpbmcgYXJlYS4iKSwoSG4oKSwhMCkpLHlhKSxOcyksdW4oUG4pKSkpfTt2YXIgQ19lLFNfZSxfX2UsQV9lLExfZSxNX2UsRF9lO0kobWhlLCJQb2x5b21pbm9PcHRpb25zIiw4NjQpLEQoMjU3LDIyLHszOjEsMzQ6MSwyMjoxLDI1NzoxfSxMNSk7dmFyIElfZSxPX2UsTl9lLFBfZSxCX2UsRl9lLHowZSxSX2Usal9lLCRfZT1GcihtaGUsIlRyYXZlcnNhbFN0cmF0ZWd5IiwyNTcsSHIsRnduLGEwbiksVjZ0O0QoMjE4LDEsezIxODoxfSxwbSksaC5JYj1mdW5jdGlvbigpe3JldHVybiJORWRnZVtpZD0iK3RoaXMuYisiIHc9Iit0aGlzLmcrIiBkPSIrdGhpcy5hKyJdIn0saC5hPTEsaC5iPTAsaC5jPTAsaC5mPSExLGguZz0wO3ZhciBVNnQ9SShvTCwiTkVkZ2UiLDIxOCk7RCgxODIsMSx7fSxfZiksSShvTCwiTkVkZ2UvTkVkZ2VCdWlsZGVyIiwxODIpLEQoNjYyLDEse30samllKSxJKG9MLCJOR3JhcGgiLDY2MiksRCgxMjUsMSx7MTI1OjF9LE51dCksaC5jPS0xLGguZD0wLGguZT0wLGguaT0tMSxoLmo9ITE7dmFyIHpfZT1JKG9MLCJOTm9kZSIsMTI1KTtEKDgwOCwxLEt3dCxNd2UpLGguSmM9ZnVuY3Rpb24odCl7dG8odGhpcyx0KX0saC5MYz1mdW5jdGlvbigpe3JldHVybiBuZXcgYm4obnVsbCxuZXcga24odGhpcywxNikpfSxoLmpkPWZ1bmN0aW9uKHQpeyRtKHRoaXMsdCl9LGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtuKHRoaXMsMTYpfSxoLk9jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyBrbih0aGlzLDE2KSl9LGguYmQ9ZnVuY3Rpb24odCxuKXsrK3RoaXMuYixwdyh0aGlzLmEsdCxuKX0saC5GYz1mdW5jdGlvbih0KXtyZXR1cm4gJHEodGhpcyx0KX0saC5jZD1mdW5jdGlvbih0LG4pe3JldHVybisrdGhpcy5iLFE3ZSh0aGlzLmEsdCxuKX0saC5HYz1mdW5jdGlvbih0KXtyZXR1cm4rK3RoaXMuYixyYSh0aGlzLmEsdCl9LGguJGI9ZnVuY3Rpb24oKXsrK3RoaXMuYixheSh0aGlzLmEuYywwKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gZ2ModGhpcy5hLHQsMCkhPS0xfSxoLkljPWZ1bmN0aW9uKHQpe3JldHVybiBFTih0aGlzLmEsdCl9LGguWGI9ZnVuY3Rpb24odCl7cmV0dXJuIGp0KHRoaXMuYSx0KX0saC5kZD1mdW5jdGlvbih0KXtyZXR1cm4gZ2ModGhpcy5hLHQsMCl9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmMubGVuZ3RoPT0wfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIGN4KG5ldyBHKHRoaXMuYSkpfSxoLmVkPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC5mZD1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLmdkPWZ1bmN0aW9uKHQpe3JldHVybisrdGhpcy5iLHQyKHRoaXMuYSx0KX0saC5NYz1mdW5jdGlvbih0KXtyZXR1cm4gSXllKHRoaXMsdCl9LGguaGQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4rK3RoaXMuYixyZih0aGlzLmEsdCxuKX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuYy5sZW5ndGh9LGgua2Q9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbmV3IFpwKHRoaXMuYSx0LG4pfSxoLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIGVIKHRoaXMuYS5jKX0saC5RYz1mdW5jdGlvbih0KXtyZXR1cm4gajEodGhpcy5hLHQpfSxoLmI9MCxJKG9MLCJOTm9kZS9DaGFuZ2VBd2FyZUFycmF5TGlzdCIsODA4KSxEKDI3NSwxLHt9LFNtKSxJKG9MLCJOTm9kZS9OTm9kZUJ1aWxkZXIiLDI3NSksRCgxNjk1LDEse30sTWwpLGguYT0hMSxoLmY9SWksaC5qPTAsSShvTCwiTmV0d29ya1NpbXBsZXgiLDE2OTUpLEQoMTMxNCwxLGZyLE1pZSksaC5DZD1mdW5jdGlvbih0KXtxdnQodGhpcy5hLGwodCw2OTUpLCEwLCExKX0sSShmM3QsIk5vZGVMYWJlbEFuZFNpemVDYWxjdWxhdG9yL2xhbWJkYSQwJFR5cGUiLDEzMTQpLEQoNTY1LDEse30sZV8pLGguYj0hMCxoLmM9ITAsaC5kPSEwLGguZT0hMCxJKGYzdCwiTm9kZU1hcmdpbkNhbGN1bGF0b3IiLDU2NSksRCgyMTcsMSx7MjE3OjF9KSxoLmo9ITEsaC5rPSExO3ZhciBHNnQ9SShldiwiQ2VsbCIsMjE3KTtEKDEyNywyMTcsezEyNzoxLDIxNzoxfSxGcnQpLGguamY9ZnVuY3Rpb24oKXtyZXR1cm4gdEgodGhpcyl9LGgua2Y9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLm4sdGhpcy5hLmErdC5iK3QuY30sSShldiwiQXRvbWljQ2VsbCIsMTI3KSxEKDIzNywyMix7MzoxLDM0OjEsMjI6MSwyMzc6MX0sZ3NlKTt2YXIgR2MsJHUsS2MsczQ9RnIoZXYsIkNvbnRhaW5lckFyZWEiLDIzNyxIcixCMm4sbzBuKSxLNnQ7RCgzMzYsMjE3LGQzdCksSShldiwiQ29udGFpbmVyQ2VsbCIsMzM2KSxEKDE1MzgsMzM2LGQzdCxfMXQpLGguamY9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD0wLHRoaXMuZT90aGlzLmI/dD10aGlzLmIuYjp0aGlzLmFbMV1bMV0mJih0PXRoaXMuYVsxXVsxXS5qZigpKTp0PUU4ZSh0aGlzLEhkdCh0aGlzLCEwKSksdD4wP3QrdGhpcy5uLmQrdGhpcy5uLmE6MH0saC5rZj1mdW5jdGlvbigpe3ZhciB0LG4scixhLG87aWYobz0wLHRoaXMuZSl0aGlzLmI/bz10aGlzLmIuYTp0aGlzLmFbMV1bMV0mJihvPXRoaXMuYVsxXVsxXS5rZigpKTtlbHNlIGlmKHRoaXMuZylvPUU4ZSh0aGlzLEV1ZSh0aGlzLG51bGwsITApKTtlbHNlIGZvcihuPSh0MSgpLGhlKGxlKHM0LDEpLGl0LDIzNywwLFtHYywkdSxLY10pKSxyPTAsYT1uLmxlbmd0aDtyPGE7KytyKXQ9bltyXSxvPWIuTWF0aC5tYXgobyxFOGUodGhpcyxFdWUodGhpcyx0LCEwKSkpO3JldHVybiBvPjA/byt0aGlzLm4uYit0aGlzLm4uYzowfSxoLmxmPWZ1bmN0aW9uKCl7dmFyIHQsbixyLGEsbztpZih0aGlzLmcpZm9yKHQ9RXVlKHRoaXMsbnVsbCwhMSkscj0odDEoKSxoZShsZShzNCwxKSxpdCwyMzcsMCxbR2MsJHUsS2NdKSksYT0wLG89ci5sZW5ndGg7YTxvOysrYSluPXJbYV0sa2J0KHRoaXMsbix0KTtlbHNlIGZvcihyPSh0MSgpLGhlKGxlKHM0LDEpLGl0LDIzNywwLFtHYywkdSxLY10pKSxhPTAsbz1yLmxlbmd0aDthPG87KythKW49clthXSx0PUV1ZSh0aGlzLG4sITEpLGtidCh0aGlzLG4sdCl9LGgubWY9ZnVuY3Rpb24oKXt2YXIgdCxuLHIsYTtuPXRoaXMuaSx0PXRoaXMubixhPUhkdCh0aGlzLCExKSx4NmUodGhpcywodDEoKSxHYyksbi5kK3QuZCxhKSx4NmUodGhpcyxLYyxuLmQrbi5hLXQuYS1hWzJdLGEpLHI9bi5hLXQuZC10LmEsYVswXT4wJiYoYVswXSs9dGhpcy5kLHItPWFbMF0pLGFbMl0+MCYmKGFbMl0rPXRoaXMuZCxyLT1hWzJdKSx0aGlzLmMuYT1iLk1hdGgubWF4KDAsciksdGhpcy5jLmQ9bi5kK3QuZCsodGhpcy5jLmEtcikvMixhWzFdPWIuTWF0aC5tYXgoYVsxXSxyKSx4NmUodGhpcywkdSxuLmQrdC5kK2FbMF0tKGFbMV0tcikvMixhKX0saC5iPW51bGwsaC5kPTAsaC5lPSExLGguZj0hMSxoLmc9ITE7dmFyIHEwZT0wLGdLPTA7SShldiwiR3JpZENvbnRhaW5lckNlbGwiLDE1MzgpLEQoNDcxLDIyLHszOjEsMzQ6MSwyMjoxLDQ3MToxfSxwc2UpO3ZhciBCYixGZCx2MCxXNnQ9RnIoZXYsIkhvcml6b250YWxMYWJlbEFsaWdubWVudCIsNDcxLEhyLFAybixjMG4pLFk2dDtEKDMxNCwyMTcsezIxNzoxLDMxNDoxfSx1b3QseWh0LG5vdCksaC5qZj1mdW5jdGlvbigpe3JldHVybiBIaXQodGhpcyl9LGgua2Y9ZnVuY3Rpb24oKXtyZXR1cm4gajRlKHRoaXMpfSxoLmE9MCxoLmM9ITE7dmFyIHZPbj1JKGV2LCJMYWJlbENlbGwiLDMxNCk7RCgyNTIsMzM2LHsyMTc6MSwzMzY6MSwyNTI6MX0sREEpLGguamY9ZnVuY3Rpb24oKXtyZXR1cm4gdFAodGhpcyl9LGgua2Y9ZnVuY3Rpb24oKXtyZXR1cm4gblAodGhpcyl9LGgubGY9ZnVuY3Rpb24oKXtobGUodGhpcyl9LGgubWY9ZnVuY3Rpb24oKXtmbGUodGhpcyl9LGguYj0wLGguYz0wLGguZD0hMSxJKGV2LCJTdHJpcENvbnRhaW5lckNlbGwiLDI1MiksRCgxNjkxLDEsdGksWGMpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGN1bihsKHQsMjE3KSl9LEkoZXYsIlN0cmlwQ29udGFpbmVyQ2VsbC9sYW1iZGEkMCRUeXBlIiwxNjkxKSxEKDE2OTIsMSx7fSxCYyksaC5ZZT1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDIxNykua2YoKX0sSShldiwiU3RyaXBDb250YWluZXJDZWxsL2xhbWJkYSQxJFR5cGUiLDE2OTIpLEQoMTY5MywxLHRpLGphKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiB1dW4obCh0LDIxNykpfSxJKGV2LCJTdHJpcENvbnRhaW5lckNlbGwvbGFtYmRhJDIkVHlwZSIsMTY5MyksRCgxNjk0LDEse30sT3UpLGguWWU9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwyMTcpLmpmKCl9LEkoZXYsIlN0cmlwQ29udGFpbmVyQ2VsbC9sYW1iZGEkMyRUeXBlIiwxNjk0KSxEKDQ3MiwyMix7MzoxLDM0OjEsMjI6MSw0NzI6MX0sYnNlKTt2YXIgdzAsRmIsYTEsWDZ0PUZyKGV2LCJWZXJ0aWNhbExhYmVsQWxpZ25tZW50Iiw0NzIsSHIsTjJuLHUwbiksUTZ0O0QoODAwLDEse30semtlKSxoLmM9MCxoLmQ9MCxoLms9MCxoLnM9MCxoLnQ9MCxoLnY9ITEsaC53PTAsaC5EPSExLEkodEcsIk5vZGVDb250ZXh0Iiw4MDApLEQoMTUzNiwxLGlpLFNhKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRudChsKHQsNjQpLGwobiw2NCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkodEcsIk5vZGVDb250ZXh0LzBtZXRob2RyZWYkY29tcGFyZVBvcnRTaWRlcyRUeXBlIiwxNTM2KSxEKDE1MzcsMSxpaSxQbyksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBSeG4obCh0LDExNyksbChuLDExNykpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkodEcsIk5vZGVDb250ZXh0LzFtZXRob2RyZWYkY29tcGFyZVBvcnRDb250ZXh0cyRUeXBlIiwxNTM3KSxEKDE2NCwyMix7MzoxLDM0OjEsMjI6MSwxNjQ6MX0sb2YpO3ZhciBKNnQsWjZ0LGU3dCx0N3Qsbjd0LHI3dCxpN3Qsczd0LGE3dCxvN3QsYzd0LHU3dCxsN3QsaDd0LGY3dCxkN3QsZzd0LHA3dCxiN3QsbTd0LHY3dCxIMGUsdzd0PUZyKHRHLCJOb2RlTGFiZWxMb2NhdGlvbiIsMTY0LEhyLGV1ZSxsMG4pLHk3dDtEKDExNywxLHsxMTc6MX0sYzJ0KSxoLmE9ITEsSSh0RywiUG9ydENvbnRleHQiLDExNyksRCgxNTQxLDEsZnIsRmMpLGguQ2Q9ZnVuY3Rpb24odCl7dlplKGwodCwzMTQpKX0sSShEUCxnM3QsMTU0MSksRCgxNTQyLDEsdGkseGEpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuISFsKHQsMTE3KS5jfSxJKERQLHAzdCwxNTQyKSxEKDE1NDMsMSxmcixCYSksaC5DZD1mdW5jdGlvbih0KXt2WmUobCh0LDExNykuYyl9LEkoRFAsIkxhYmVsUGxhY2VyL2xhbWJkYSQyJFR5cGUiLDE1NDMpO3ZhciBxX2U7RCgxNTQwLDEsZnIsZ2EpLGguQ2Q9ZnVuY3Rpb24odCl7cHkoKSx6Y24obCh0LDExNykpfSxJKERQLCJOb2RlTGFiZWxBbmRTaXplVXRpbGl0aWVzL2xhbWJkYSQwJFR5cGUiLDE1NDApLEQoODAxLDEsZnIsdjRlKSxoLkNkPWZ1bmN0aW9uKHQpe3Rsbih0aGlzLmIsdGhpcy5jLHRoaXMuYSxsKHQsMTg3KSl9LGguYT0hMSxoLmM9ITEsSShEUCwiTm9kZUxhYmVsQ2VsbENyZWF0b3IvbGFtYmRhJDAkVHlwZSIsODAxKSxEKDE1MzksMSxmcixEaWUpLGguQ2Q9ZnVuY3Rpb24odCl7VmNuKHRoaXMuYSxsKHQsMTg3KSl9LEkoRFAsIlBvcnRDb250ZXh0Q3JlYXRvci9sYW1iZGEkMCRUeXBlIiwxNTM5KTt2YXIgcEs7RCgxOTAyLDEse30sa2gpLEkodVQsIkdyZWVkeVJlY3RhbmdsZVN0cmlwT3ZlcmxhcFJlbW92ZXIiLDE5MDIpLEQoMTkwMywxLGlpLGx1KSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIE9obihsKHQsMjI2KSxsKG4sMjI2KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSSh1VCwiR3JlZWR5UmVjdGFuZ2xlU3RyaXBPdmVybGFwUmVtb3Zlci8wbWV0aG9kcmVmJGNvbXBhcmVCeVlDb29yZGluYXRlJFR5cGUiLDE5MDMpLEQoMTg0OSwxLHt9LHpRZSksaC5hPTUsaC5lPTAsSSh1VCwiUmVjdGFuZ2xlU3RyaXBPdmVybGFwUmVtb3ZlciIsMTg0OSksRCgxODUwLDEsaWksbzUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gTmhuKGwodCwyMjYpLGwobiwyMjYpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHVULCJSZWN0YW5nbGVTdHJpcE92ZXJsYXBSZW1vdmVyLzBtZXRob2RyZWYkY29tcGFyZUxlZnRSZWN0YW5nbGVCb3JkZXJzJFR5cGUiLDE4NTApLEQoMTg1MiwxLGlpLFdoKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEVnbihsKHQsMjI2KSxsKG4sMjI2KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSSh1VCwiUmVjdGFuZ2xlU3RyaXBPdmVybGFwUmVtb3Zlci8xbWV0aG9kcmVmJGNvbXBhcmVSaWdodFJlY3RhbmdsZUJvcmRlcnMkVHlwZSIsMTg1MiksRCg0MTcsMjIsezM6MSwzNDoxLDIyOjEsNDE3OjF9LHVxKTt2YXIgckIsVjBlLFUwZSxpQix4N3Q9RnIodVQsIlJlY3RhbmdsZVN0cmlwT3ZlcmxhcFJlbW92ZXIvT3ZlcmxhcFJlbW92YWxEaXJlY3Rpb24iLDQxNyxIcixZYm4saDBuKSxrN3Q7RCgyMjYsMSx7MjI2OjF9LERhZSksSSh1VCwiUmVjdGFuZ2xlU3RyaXBPdmVybGFwUmVtb3Zlci9SZWN0YW5nbGVOb2RlIiwyMjYpLEQoMTg1MSwxLGZyLElpZSksaC5DZD1mdW5jdGlvbih0KXtsN24odGhpcy5hLGwodCwyMjYpKX0sSSh1VCwiUmVjdGFuZ2xlU3RyaXBPdmVybGFwUmVtb3Zlci9sYW1iZGEkMSRUeXBlIiwxODUxKSxEKDEzMjMsMSxpaSxvZCksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBNTG4obCh0LDE3NiksbChuLDE3NikpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoTWQsIlBvbHlvbWlub0NvbXBhY3Rvci9Db3JuZXJDYXNlc0dyZWF0ZXJUaGFuUmVzdENvbXBhcmF0b3IiLDEzMjMpLEQoMTMyNiwxLHt9LEdkKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzM0KS5hfSxJKE1kLCJQb2x5b21pbm9Db21wYWN0b3IvQ29ybmVyQ2FzZXNHcmVhdGVyVGhhblJlc3RDb21wYXJhdG9yL2xhbWJkYSQwJFR5cGUiLDEzMjYpLEQoMTMyNywxLHRpLGNkKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzMyKS5hfSxJKE1kLCJQb2x5b21pbm9Db21wYWN0b3IvQ29ybmVyQ2FzZXNHcmVhdGVyVGhhblJlc3RDb21wYXJhdG9yL2xhbWJkYSQxJFR5cGUiLDEzMjcpLEQoMTMyOCwxLHRpLEtkKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzMyKS5hfSxJKE1kLCJQb2x5b21pbm9Db21wYWN0b3IvQ29ybmVyQ2FzZXNHcmVhdGVyVGhhblJlc3RDb21wYXJhdG9yL2xhbWJkYSQyJFR5cGUiLDEzMjgpLEQoMTMyMSwxLGlpLCRnKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGFfbihsKHQsMTc2KSxsKG4sMTc2KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShNZCwiUG9seW9taW5vQ29tcGFjdG9yL01pbk51bU9mRXh0ZW5zaW9uRGlyZWN0aW9uc0NvbXBhcmF0b3IiLDEzMjEpLEQoMTMyNCwxLHt9LGFzKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzM0KS5hfSxJKE1kLCJQb2x5b21pbm9Db21wYWN0b3IvTWluTnVtT2ZFeHRlbnNpb25EaXJlY3Rpb25zQ29tcGFyYXRvci9sYW1iZGEkMCRUeXBlIiwxMzI0KSxEKDc4MSwxLGlpLHduKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHEzbihsKHQsMTc2KSxsKG4sMTc2KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShNZCwiUG9seW9taW5vQ29tcGFjdG9yL01pbk51bU9mRXh0ZW5zaW9uc0NvbXBhcmF0b3IiLDc4MSksRCgxMzE5LDEsaWksWnIpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gWHduKGwodCwzMzApLGwobiwzMzApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKE1kLCJQb2x5b21pbm9Db21wYWN0b3IvTWluUGVyaW1ldGVyQ29tcGFyYXRvciIsMTMxOSksRCgxMzIwLDEsaWksWmkpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gTjZuKGwodCwzMzApLGwobiwzMzApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKE1kLCJQb2x5b21pbm9Db21wYWN0b3IvTWluUGVyaW1ldGVyQ29tcGFyYXRvcldpdGhTaGFwZSIsMTMyMCksRCgxMzIyLDEsaWksbnUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gX19uKGwodCwxNzYpLGwobiwxNzYpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKE1kLCJQb2x5b21pbm9Db21wYWN0b3IvU2luZ2xlRXh0ZW5zaW9uU2lkZUdyZWF0ZXJUaGFuUmVzdENvbXBhcmF0b3IiLDEzMjIpLEQoMTMyNSwxLHt9LHZ1KSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzM0KS5hfSxJKE1kLCJQb2x5b21pbm9Db21wYWN0b3IvU2luZ2xlRXh0ZW5zaW9uU2lkZUdyZWF0ZXJUaGFuUmVzdENvbXBhcmF0b3IvbGFtYmRhJDAkVHlwZSIsMTMyNSksRCg3ODIsMSx7fSxMM2UpLGguVmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gemJuKHRoaXMsbCh0LDQyKSxsKG4sMTc2KSl9LEkoTWQsIlN1Y2Nlc3NvckNvbWJpbmF0aW9uIiw3ODIpLEQoNjQ5LDEse30sRGwpLGguVmU9ZnVuY3Rpb24odCxuKXt2YXIgcjtyZXR1cm4gckVuKChyPWwodCw0MiksbChuLDE3NikscikpfSxJKE1kLCJTdWNjZXNzb3JKaXR0ZXIiLDY0OSksRCg2NDgsMSx7fSxZaCksaC5WZT1mdW5jdGlvbih0LG4pe3ZhciByO3JldHVybiBIQ24oKHI9bCh0LDQyKSxsKG4sMTc2KSxyKSl9LEkoTWQsIlN1Y2Nlc3NvckxpbmVCeUxpbmUiLDY0OCksRCg1NzMsMSx7fSx3MSksaC5WZT1mdW5jdGlvbih0LG4pe3ZhciByO3JldHVybiByVG4oKHI9bCh0LDQyKSxsKG4sMTc2KSxyKSl9LEkoTWQsIlN1Y2Nlc3Nvck1hbmhhdHRhbiIsNTczKSxEKDEzNDQsMSx7fSwkMCksaC5WZT1mdW5jdGlvbih0LG4pe3ZhciByO3JldHVybiBkQ24oKHI9bCh0LDQyKSxsKG4sMTc2KSxyKSl9LEkoTWQsIlN1Y2Nlc3Nvck1heE5vcm1XaW5kaW5nSW5NYXRoUG9zU2Vuc2UiLDEzNDQpLEQoNDA5LDEse30sRTUpLGguVmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdTVlKHRoaXMsdCxuKX0saC5jPSExLGguZD0hMSxoLmU9ITEsaC5mPSExLEkoTWQsIlN1Y2Nlc3NvclF1YWRyYW50c0dlbmVyaWMiLDQwOSksRCgxMzQ1LDEse30sV2kpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwzMzQpLmF9LEkoTWQsIlN1Y2Nlc3NvclF1YWRyYW50c0dlbmVyaWMvbGFtYmRhJDAkVHlwZSIsMTM0NSksRCgzMzIsMjIsezM6MSwzNDoxLDIyOjEsMzMyOjF9LGxxKSxoLmE9ITE7dmFyIHNCLGFCLG9CLGNCLEU3dD1GcihyRyxrRWUsMzMyLEhyLEtibixmMG4pLFQ3dDtEKDEzMTcsMSx7fSksaC5JYj1mdW5jdGlvbigpe3ZhciB0LG4scixhLG8sZjtmb3Iocj0iICIsdD1wdCgwKSxvPTA7bzx0aGlzLm87bysrKXIrPSIiK3QuYSx0PXB0KENydCh0LmEpKTtmb3Iocis9YApgLHQ9cHQoMCksZj0wO2Y8dGhpcy5wO2YrKyl7Zm9yKHIrPSIiK3QuYSx0PXB0KENydCh0LmEpKSxhPTA7YTx0aGlzLm87YSsrKW49bmNlKHRoaXMsYSxmKSxpdShuLDApPT0wP3IrPSJfIjppdShuLDEpPT0wP3IrPSJYIjpyKz0iMCI7cis9YApgfXJldHVybiB0ZihyLDAsci5sZW5ndGgtMSl9LGgubz0wLGgucD0wLEkockcsIlR3b0JpdEdyaWQiLDEzMTcpLEQoMzMwLDEzMTcsezMzMDoxfSxJOGUpLGguaj0wLGguaz0wLEkockcsIlBsYW5hckdyaWQiLDMzMCksRCgxNzYsMzMwLHszMzA6MSwxNzY6MX0pLGguZz0wLGguaT0wLEkockcsIlBvbHlvbWlubyIsMTc2KTt2YXIgd09uPWtzKElQLG0zdCk7RCgxMzcsMSxFRWUsQnMpLGgucWY9ZnVuY3Rpb24odCxuKXtyZXR1cm4gX04odGhpcyx0LG4pfSxoLm5mPWZ1bmN0aW9uKCl7cmV0dXJuIG9zdCh0aGlzKX0saC5vZj1mdW5jdGlvbih0KXtyZXR1cm4gUSh0aGlzLHQpfSxoLnBmPWZ1bmN0aW9uKHQpe3JldHVybiBucyh0aGlzLHQpfSxJKElQLCJNYXBQcm9wZXJ0eUhvbGRlciIsMTM3KSxEKDEzMTgsMTM3LEVFZSxsYnQpLEkockcsIlBvbHlvbWlub2VzIiwxMzE4KTt2YXIgQzd0PSExLFJMLEhfZTtEKDE4MjgsMSxmcixRYSksaC5DZD1mdW5jdGlvbih0KXtmdnQobCh0LDIyNSkpfSxJKEl4LCJEZXB0aEZpcnN0Q29tcGFjdGlvbi8wbWV0aG9kcmVmJGNvbXBhY3RUcmVlJFR5cGUiLDE4MjgpLEQoODI1LDEsZnIsTXopLGguQ2Q9ZnVuY3Rpb24odCl7VWduKHRoaXMuYSxsKHQsMjI1KSl9LEkoSXgsIkRlcHRoRmlyc3RDb21wYWN0aW9uL2xhbWJkYSQxJFR5cGUiLDgyNSksRCgxODI5LDEsZnIsYml0KSxoLkNkPWZ1bmN0aW9uKHQpe1c1bih0aGlzLmEsdGhpcy5iLHRoaXMuYyxsKHQsMjI1KSl9LEkoSXgsIkRlcHRoRmlyc3RDb21wYWN0aW9uL2xhbWJkYSQyJFR5cGUiLDE4MjkpO3ZhciBqTCxWX2U7RCg2OCwxLHs2ODoxfSxrb3QpLEkoSXgsIk5vZGUiLDY4KSxEKDEyMTQsMSx7fSx4bnQpLEkoSXgsIlNjYW5saW5lT3ZlcmxhcENoZWNrIiwxMjE0KSxEKDEyMTUsMSx7NjkzOjF9LFhhdCksaC5iZj1mdW5jdGlvbih0KXtFZm4odGhpcyxsKHQsNDUxKSl9LEkoSXgsIlNjYW5saW5lT3ZlcmxhcENoZWNrL092ZXJsYXBzU2NhbmxpbmVIYW5kbGVyIiwxMjE1KSxEKDEyMTYsMSxpaSxCaSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBENG4obCh0LDY4KSxsKG4sNjgpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKEl4LCJTY2FubGluZU92ZXJsYXBDaGVjay9PdmVybGFwc1NjYW5saW5lSGFuZGxlci9sYW1iZGEkMCRUeXBlIiwxMjE2KSxEKDQ1MSwxLHs0NTE6MX0sTTNlKSxoLmE9ITEsSShJeCwiU2NhbmxpbmVPdmVybGFwQ2hlY2svVGltZXN0YW1wIiw0NTEpLEQoMTIxNywxLGlpLE51KSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGg4bihsKHQsNDUxKSxsKG4sNDUxKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShJeCwiU2NhbmxpbmVPdmVybGFwQ2hlY2svbGFtYmRhJDAkVHlwZSIsMTIxNyksRCg1NTcsMSx7fSxPdCksSSh2M3QsIlNWR0ltYWdlIiw1NTcpLEQoMzM0LDEsezMzNDoxfSxtNGUpLGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4iKCIrdGhpcy5hK0NvK3RoaXMuYitDbyt0aGlzLmMrIikifSxJKHYzdCwiVW5pcXVlVHJpcGxlIiwzMzQpLEQoMjA1LDEsdHYpLEkodjYsIkFic3RyYWN0TGF5b3V0UHJvdmlkZXIiLDIwNSksRCgxMTE0LDIwNSx0dixXMyksaC5yZj1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmO3N3aXRjaChuLlVnKHczdCwxKSx0aGlzLmE9emUoR2UoYXQodCwoSUEoKSxYX2UpKSkpLFAxKHQsSzBlKSYmKG89ZWkoYXQodCxLMGUpKSxyPWlsZShoRSgpLG8pLHImJihhPWwoR08oci5mKSwyMDUpLGEucmYodCxuLmVoKDEpKSkpLGY9bmV3IHFjdCh0aGlzLmEpLHRoaXMuYj1hRG4oZix0KSxsKGF0KHQsKExjZSgpLEdfZSkpLDQ4OSkuZyl7Y2FzZSAwOmtFbihuZXcgS3QsdGhpcy5iKSxIaSh0LHZLLFEodGhpcy5iLHZLKSk7YnJlYWs7ZGVmYXVsdDpWZygpfXhEbihmKSxIaSh0LFdfZSx0aGlzLmIpLG4uVmcoKX0saC5hPTAsSSh5M3QsIkRpc0NvTGF5b3V0UHJvdmlkZXIiLDExMTQpLEQoMTIwOCwxLHt9LEt0KSxoLmM9ITEsaC5lPTAsaC5mPTAsSSh5M3QsIkRpc0NvUG9seW9taW5vQ29tcGFjdG9yIiwxMjA4KSxEKDU2NywxLHs1Njc6MX0sc3N0KSxoLmI9ITAsSShzRywiRENDb21wb25lbnQiLDU2NyksRCg0MDYsMjIsezM6MSwzNDoxLDIyOjEsNDA2OjF9LGhxKSxoLmE9ITE7dmFyIGJLLHVCLG1LLGxCLFM3dD1GcihzRywiRENEaXJlY3Rpb24iLDQwNixIcixXYm4sZDBuKSxfN3Q7RCgyNzIsMTM3LHszOjEsMjcyOjEsOTY6MSwxMzc6MX0sR3VlKSxJKHNHLCJEQ0VsZW1lbnQiLDI3MiksRCg0MDcsMSx7NDA3OjF9LG54ZSksaC5jPTAsSShzRywiRENFeHRlbnNpb24iLDQwNyksRCg3NjIsMTM3LEVFZSxHSmUpLEkoc0csIkRDR3JhcGgiLDc2MiksRCg0ODksMjIsezM6MSwzNDoxLDIyOjEsNDg5OjF9LGdydCk7dmFyIEcwZSxVX2U9RnIoU2hlLFRFZSw0ODksSHIsbnBuLGcwbiksQTd0O0QoODY1LDEsUGYsdHopLGguaGY9ZnVuY3Rpb24odCl7c24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LENFZSkseDN0KSwiQ29ubmVjdGVkIENvbXBvbmVudHMgQ29tcGFjdGlvbiBTdHJhdGVneSIpLCJTdHJhdGVneSBmb3IgcGFja2luZyBkaWZmZXJlbnQgY29ubmVjdGVkIGNvbXBvbmVudHMgaW4gb3JkZXIgdG8gc2F2ZSBzcGFjZSBhbmQgZW5oYW5jZSByZWFkYWJpbGl0eSBvZiBhIGdyYXBoLiIpLEtfZSksKGcyKCkscHMpKSxVX2UpLHVuKChyMSgpLFBuKSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LFNFZSkseDN0KSwiQ29ubmVjdGVkIENvbXBvbmVudHMgTGF5b3V0IEFsZ29yaXRobSIpLCJBIGxheW91dCBhbGdvcml0aG0gdGhhdCBpcyB0byBiZSBhcHBsaWVkIHRvIGVhY2ggY29ubmVjdGVkIGNvbXBvbmVudCBiZWZvcmUgdGhlIGNvbXBvbmVudHMgdGhlbXNlbHZlcyBhcmUgY29tcGFjdGVkLiBJZiB1bnNwZWNpZmllZCwgdGhlIHBvc2l0aW9ucyBvZiB0aGUgY29tcG9uZW50cycgbm9kZXMgYXJlIG5vdCBhbHRlcmVkLiIpLEo2KSx6dCksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKFF0KGVuKEp0KFp0KG5ldyBVdCxfRWUpLCJkZWJ1ZyIpLCJEQ0dyYXBoIiksIkFjY2VzcyB0byB0aGUgRENHcmFwaCBpcyBpbnRlbmRlZCBmb3IgdGhlIGRlYnVnIHZpZXcsIiksWDEpLHdhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LEFFZSksImRlYnVnIiksIkxpc3Qgb2YgUG9seW9taW5vZXMiKSwiQWNjZXNzIHRvIHRoZSBwb2x5b21pbm9lcyBpcyBpbnRlbmRlZCBmb3IgdGhlIGRlYnVnIHZpZXcsIiksWDEpLHdhKSx1bihQbikpKSksUW10KChuZXcgbnosdCkpfTt2YXIgTDd0LEdfZSxLX2UsTTd0LEQ3dDtJKFNoZSwiRGlzQ29NZXRhRGF0YVByb3ZpZGVyIiw4NjUpLEQoMTAxMCwxLFBmLG56KSxoLmhmPWZ1bmN0aW9uKHQpe1FtdCh0KX07dmFyIEk3dCxLMGUsTzd0LFdfZSx2SyxXMGUsWV9lLE43dCxQN3QsQjd0LEY3dCxYX2U7SShTaGUsIkRpc0NvT3B0aW9ucyIsMTAxMCksRCgxMDExLDEse30sejApLGguc2Y9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1uZXcgVzMsdH0saC50Zj1mdW5jdGlvbih0KXt9LEkoU2hlLCJEaXNDb09wdGlvbnMvRGlzY29GYWN0b3J5IiwxMDExKSxEKDU2OCwxNzYsezMzMDoxLDE3NjoxLDU2ODoxfSxHMnQpLGguYT0wLGguYj0wLGguYz0wLGguZD0wLEkoIm9yZy5lY2xpcHNlLmVsay5hbGcuZGlzY28uc3RydWN0dXJlcyIsIkRDUG9seW9taW5vIiw1NjgpO3ZhciBZMGUsWDBlLHdLO0QoMTI4NiwxLHRpLEJwKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBzeWUodCl9LEkodzYsIkVsa0dyYXBoQ29tcG9uZW50c1Byb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxMjg2KSxEKDEyODcsMSx7fSxZMyksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gdHgoKSxjZyhsKHQsNzQpKX0sSSh3NiwiRWxrR3JhcGhDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDEyODcpLEQoMTI4OCwxLHRpLCQ5KSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiB4ZG4obCh0LDc0KSl9LEkodzYsIkVsa0dyYXBoQ29tcG9uZW50c1Byb2Nlc3Nvci9sYW1iZGEkMiRUeXBlIiwxMjg4KSxEKDEyODksMSx7fSxjNSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gdHgoKSxFYihsKHQsNzQpKX0sSSh3NiwiRWxrR3JhcGhDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQzJFR5cGUiLDEyODkpLEQoMTI5MCwxLHRpLEVoKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBrZG4obCh0LDc0KSl9LEkodzYsIkVsa0dyYXBoQ29tcG9uZW50c1Byb2Nlc3Nvci9sYW1iZGEkNCRUeXBlIiwxMjkwKSxEKDEyOTEsMSx0aSx5ayksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gcDJuKHRoaXMuYSxsKHQsNzQpKX0sSSh3NiwiRWxrR3JhcGhDb21wb25lbnRzUHJvY2Vzc29yL2xhbWJkYSQ1JFR5cGUiLDEyOTEpLEQoMTI5MiwxLHt9LFVJKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBQZ24odGhpcy5hLGwodCw3NCkpfSxJKHc2LCJFbGtHcmFwaENvbXBvbmVudHNQcm9jZXNzb3IvbGFtYmRhJDYkVHlwZSIsMTI5MiksRCgxMjA1LDEse30scWN0KSxoLmE9MCxJKHc2LCJFbGtHcmFwaFRyYW5zZm9ybWVyIiwxMjA1KSxEKDEyMDYsMSx7fSx6ZyksaC5ZZD1mdW5jdGlvbih0LG4pe29Fbih0aGlzLGwodCwxNjcpLGwobiwyNzIpKX0sSSh3NiwiRWxrR3JhcGhUcmFuc2Zvcm1lci9PZmZzZXRBcHBsaWVyIiwxMjA2KSxEKDEyMDcsMSxmcix0XyksaC5DZD1mdW5jdGlvbih0KXttaG4odGhpcyxsKHQsOCkpfSxJKHc2LCJFbGtHcmFwaFRyYW5zZm9ybWVyL09mZnNldEFwcGxpZXIvT2ZmU2V0VG9DaGFpbkFwcGxpZXIiLDEyMDcpLEQoNzYwLDEse30sYm0pLEkoTWhlLExFZSw3NjApLEQoMTE5NSwxLGlpLHo5KSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFlrbihsKHQsMjM1KSxsKG4sMjM1KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShNaGUsRTN0LDExOTUpLEQoMTE5NiwxLGZyLF9ldCksaC5DZD1mdW5jdGlvbih0KXtaMm4odGhpcy5iLHRoaXMuYSxsKHQsMjUwKSl9LEkoTWhlLE1FZSwxMTk2KSxEKDczOCwyMDUsdHYsRHdlKSxoLnJmPWZ1bmN0aW9uKHQsbil7VzJ0KHRoaXMsdCxuKX0sSShNaGUsIkZvcmNlTGF5b3V0UHJvdmlkZXIiLDczOCksRCgzMDksMTM3LHszOjEsMzA5OjEsOTY6MSwxMzc6MX0pLEkoT1AsIkZQYXJ0aWNsZSIsMzA5KSxEKDI1MCwzMDksezM6MSwyNTA6MSwzMDk6MSw5NjoxLDEzNzoxfSxWc3QpLGguSWI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdGhpcy5hPyh0PWdjKHRoaXMuYS5hLHRoaXMsMCksdD49MD8iYiIrdCsiWyIrQ29lKHRoaXMuYSkrIl0iOiJiWyIrQ29lKHRoaXMuYSkrIl0iKToiYl8iK2Z3KHRoaXMpfSxJKE9QLCJGQmVuZHBvaW50IiwyNTApLEQoMjkwLDEzNyx7MzoxLDI5MDoxLDk2OjEsMTM3OjF9LGpydCksaC5JYj1mdW5jdGlvbigpe3JldHVybiBDb2UodGhpcyl9LEkoT1AsIkZFZGdlIiwyOTApLEQoMjM1LDEzNyx7MzoxLDIzNToxLDk2OjEsMTM3OjF9LEtIKTt2YXIgeU9uPUkoT1AsIkZHcmFwaCIsMjM1KTtEKDQ1NCwzMDksezM6MSw0NTQ6MSwzMDk6MSw5NjoxLDEzNzoxfSx6Y3QpLGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iPT1udWxsfHx0aGlzLmIubGVuZ3RoPT0wPyJsWyIrQ29lKHRoaXMuYSkrIl0iOiJsXyIrdGhpcy5ifSxJKE9QLCJGTGFiZWwiLDQ1NCksRCgxNTMsMzA5LHszOjEsMTUzOjEsMzA5OjEsOTY6MSwxMzc6MX0sd250KSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFg1ZSh0aGlzKX0saC5hPTAsSShPUCwiRk5vZGUiLDE1MyksRCgyMTAwLDEse30pLGgudmY9ZnVuY3Rpb24odCl7eWtlKHRoaXMsdCl9LGgud2Y9ZnVuY3Rpb24oKXtxZHQodGhpcyl9LGguZD0wLEkoREVlLCJBYnN0cmFjdEZvcmNlTW9kZWwiLDIxMDApLEQoNjQxLDIxMDAsezY0MToxfSxqZnQpLGgudWY9ZnVuY3Rpb24odCxuKXt2YXIgcixhLG8sZixnO3JldHVybiBwdnQodGhpcy5mLHQsbiksbz1tYShKYShuLmQpLHQuZCksZz1iLk1hdGguc3FydChvLmEqby5hK28uYipvLmIpLGE9Yi5NYXRoLm1heCgwLGctZUEodC5lKS8yLWVBKG4uZSkvMikscj1RcHQodGhpcy5lLHQsbikscj4wP2Y9LXlnbihhLHRoaXMuYykqcjpmPVlobihhLHRoaXMuYikqbChRKHQsKGIwKCkscXgpKSwxNykuYSxtZChvLGYvZyksb30saC52Zj1mdW5jdGlvbih0KXt5a2UodGhpcyx0KSx0aGlzLmE9bChRKHQsKGIwKCkseEspKSwxNykuYSx0aGlzLmM9emUoR2UoUSh0LGtLKSkpLHRoaXMuYj16ZShHZShRKHQsSjBlKSkpfSxoLnhmPWZ1bmN0aW9uKHQpe3JldHVybiB0PHRoaXMuYX0saC5hPTAsaC5iPTAsaC5jPTAsSShERWUsIkVhZGVzTW9kZWwiLDY0MSksRCg2NDIsMjEwMCx7NjQyOjF9LFJpdCksaC51Zj1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmLGc7cmV0dXJuIHB2dCh0aGlzLmYsdCxuKSxvPW1hKEphKG4uZCksdC5kKSxnPWIuTWF0aC5zcXJ0KG8uYSpvLmErby5iKm8uYiksYT1iLk1hdGgubWF4KDAsZy1lQSh0LmUpLzItZUEobi5lKS8yKSxmPVhobihhLHRoaXMuYSkqbChRKHQsKGIwKCkscXgpKSwxNykuYSxyPVFwdCh0aGlzLmUsdCxuKSxyPjAmJihmLT1pdW4oYSx0aGlzLmEpKnIpLG1kKG8sZip0aGlzLmIvZyksb30saC52Zj1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGcsdztmb3IoeWtlKHRoaXMsdCksdGhpcy5iPXplKEdlKFEodCwoYjAoKSxaMGUpKSkpLHRoaXMuYz10aGlzLmIvbChRKHQseEspLDE3KS5hLGE9dC5lLmMubGVuZ3RoLGY9MCxvPTAsdz1uZXcgRyh0LmUpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwxNTMpLGYrPWcuZS5hLG8rPWcuZS5iO249ZipvLHI9emUoR2UoUSh0LGtLKSkpKkgxLHRoaXMuYT1iLk1hdGguc3FydChuLygyKmEpKSpyfSxoLndmPWZ1bmN0aW9uKCl7cWR0KHRoaXMpLHRoaXMuYi09dGhpcy5jfSxoLnhmPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmI+MH0saC5hPTAsaC5iPTAsaC5jPTAsSShERWUsIkZydWNodGVybWFuUmVpbmdvbGRNb2RlbCIsNjQyKSxEKDg2MCwxLFBmLEtTKSxoLmhmPWZ1bmN0aW9uKHQpe3NuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxhRyksIiIpLCJGb3JjZSBNb2RlbCIpLCJEZXRlcm1pbmVzIHRoZSBtb2RlbCBmb3IgZm9yY2UgY2FsY3VsYXRpb24uIiksUV9lKSwoZzIoKSxwcykpLEpfZSksdW4oKHIxKCksUG4pKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsSUVlKSwiIiksIkl0ZXJhdGlvbnMiKSwiVGhlIG51bWJlciBvZiBpdGVyYXRpb25zIG9uIHRoZSBmb3JjZSBtb2RlbC4iKSxwdCgzMDApKSxUYykscm8pLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsT0VlKSwiIiksIlJlcHVsc2l2ZSBQb3dlciIpLCJEZXRlcm1pbmVzIGhvdyBtYW55IGJlbmQgcG9pbnRzIGFyZSBhZGRlZCB0byB0aGUgZWRnZTsgc3VjaCBiZW5kIHBvaW50cyBhcmUgcmVnYXJkZWQgYXMgcmVwZWxsaW5nIHBhcnRpY2xlcyBpbiB0aGUgZm9yY2UgbW9kZWwiKSxwdCgwKSksVGMpLHJvKSx1bih6ZCkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LERoZSksIiIpLCJGUiBUZW1wZXJhdHVyZSIpLCJUaGUgdGVtcGVyYXR1cmUgaXMgdXNlZCBhcyBhIHNjYWxpbmcgZmFjdG9yIGZvciBwYXJ0aWNsZSBkaXNwbGFjZW1lbnRzLiIpLERkKSxmbyksdGEpLHVuKFBuKSkpKSxRcyh0LERoZSxhRyxWN3QpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxJaGUpLCIiKSwiRWFkZXMgUmVwdWxzaW9uIiksIkZhY3RvciBmb3IgcmVwdWxzaXZlIGZvcmNlcyBpbiBFYWRlcycgbW9kZWwuIiksNSksZm8pLHRhKSx1bihQbikpKSksUXModCxJaGUsYUcsejd0KSxyd3QoKG5ldyBXUyx0KSl9O3ZhciBSN3Qsajd0LFFfZSwkN3Qsejd0LHE3dCxIN3QsVjd0O0kodUwsIkZvcmNlTWV0YURhdGFQcm92aWRlciIsODYwKSxEKDQzMiwyMix7MzoxLDM0OjEsMjI6MSw0MzI6MX0sRDNlKTt2YXIgUTBlLHlLLEpfZT1Gcih1TCwiRm9yY2VNb2RlbFN0cmF0ZWd5Iiw0MzIsSHIsenBuLHAwbiksVTd0O0QoYjIsMSxQZixXUyksaC5oZj1mdW5jdGlvbih0KXtyd3QodCl9O3ZhciBHN3QsSzd0LFpfZSx4SyxlQWUsVzd0LFk3dCxYN3QsUTd0LHRBZSxKN3QsbkFlLHJBZSxaN3QscXgsZTh0LEowZSxpQWUsdDh0LG44dCxrSyxaMGUscjh0LGk4dCxzOHQsc0FlLGE4dDtJKHVMLCJGb3JjZU9wdGlvbnMiLGIyKSxEKDEwMDEsMSx7fSxsZCksaC5zZj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PW5ldyBEd2UsdH0saC50Zj1mdW5jdGlvbih0KXt9LEkodUwsIkZvcmNlT3B0aW9ucy9Gb3JjZUZhY3RvcnkiLDEwMDEpO3ZhciBoQiwkTCxIeCxFSztEKDg2MSwxLFBmLHJ6KSxoLmhmPWZ1bmN0aW9uKHQpe3NuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxQRWUpLCIiKSwiRml4ZWQgUG9zaXRpb24iKSwiUHJldmVudCB0aGF0IHRoZSBub2RlIGlzIG1vdmVkIGJ5IHRoZSBsYXlvdXQgYWxnb3JpdGhtLiIpLChIbigpLCExKSksKGcyKCkseWEpKSxOcyksdW4oKHIxKCksaGEpKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsQkVlKSwiIiksIkRlc2lyZWQgRWRnZSBMZW5ndGgiKSwiRWl0aGVyIHNwZWNpZmllZCBmb3IgcGFyZW50IG5vZGVzIG9yIGZvciBpbmRpdmlkdWFsIGVkZ2VzLCB3aGVyZSB0aGUgbGF0dGVyIHRha2VzIGhpZ2hlciBwcmVjZWRlbmNlLiIpLDEwMCksZm8pLHRhKSxycyhQbixoZShsZSh4ZywxKSxpdCwxNzAsMCxbemRdKSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEZFZSksIiIpLCJMYXlvdXQgRGltZW5zaW9uIiksIkRpbWVuc2lvbnMgdGhhdCBhcmUgcGVybWl0dGVkIHRvIGJlIGFsdGVyZWQgZHVyaW5nIGxheW91dC4iKSxhQWUpLHBzKSxkQWUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsUkVlKSwiIiksIlN0cmVzcyBFcHNpbG9uIiksIlRlcm1pbmF0aW9uIGNyaXRlcmlvbiBmb3IgdGhlIGl0ZXJhdGl2ZSBwcm9jZXNzLiIpLERkKSxmbyksdGEpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsakVlKSwiIiksIkl0ZXJhdGlvbiBMaW1pdCIpLCJNYXhpbXVtIG51bWJlciBvZiBwZXJmb3JtZWQgaXRlcmF0aW9ucy4gVGFrZXMgaGlnaGVyIHByZWNlZGVuY2UgdGhhbiAnZXBzaWxvbicuIikscHQoSWkpKSxUYykscm8pLHVuKFBuKSkpKSxEdnQoKG5ldyBpeix0KSl9O3ZhciBvOHQsYzh0LGFBZSx1OHQsbDh0LGg4dDtJKHVMLCJTdHJlc3NNZXRhRGF0YVByb3ZpZGVyIiw4NjEpLEQoMTAwNCwxLFBmLGl6KSxoLmhmPWZ1bmN0aW9uKHQpe0R2dCh0KX07dmFyIFRLLG9BZSxjQWUsdUFlLGxBZSxoQWUsZjh0LGQ4dCxnOHQscDh0LGZBZSxiOHQ7SSh1TCwiU3RyZXNzT3B0aW9ucyIsMTAwNCksRCgxMDA1LDEse30seTEpLGguc2Y9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1uZXcgJHJ0LHR9LGgudGY9ZnVuY3Rpb24odCl7fSxJKHVMLCJTdHJlc3NPcHRpb25zL1N0cmVzc0ZhY3RvcnkiLDEwMDUpLEQoMTExMCwyMDUsdHYsJHJ0KSxoLnJmPWZ1bmN0aW9uKHQsbil7dmFyIHIsYSxvLGYsZztmb3Iobi5VZyhBM3QsMSksUnQoQnQoYXQodCwoVk4oKSxsQWUpKSkpP1J0KEJ0KGF0KHQsZkFlKSkpfHxLTygocj1uZXcgWXYoKGF3KCksbmV3IEp2KHQpKSkscikpOlcydChuZXcgRHdlLHQsbi5laCgxKSksbz11MHQodCksYT0kbXQodGhpcy5hLG8pLGc9YS5LYygpO2cuT2IoKTspZj1sKGcuUGIoKSwyMzUpLCEoZi5lLmMubGVuZ3RoPD0xKSYmKF9Mbih0aGlzLmIsZiksSkVuKHRoaXMuYiksVnUoZi5kLG5ldyB1ZCkpO289ZXd0KGEpLGx3dChvKSxuLlZnKCl9LEkodUcsIlN0cmVzc0xheW91dFByb3ZpZGVyIiwxMTEwKSxEKDExMTEsMSxmcix1ZCksaC5DZD1mdW5jdGlvbih0KXtBa2UobCh0LDQ1NCkpfSxJKHVHLCJTdHJlc3NMYXlvdXRQcm92aWRlci9sYW1iZGEkMCRUeXBlIiwxMTExKSxEKDEwMDIsMSx7fSxCUWUpLGguYz0wLGguZT0wLGguZz0wLEkodUcsIlN0cmVzc01ham9yaXphdGlvbiIsMTAwMiksRCgzOTEsMjIsezM6MSwzNDoxLDIyOjEsMzkxOjF9LG1zZSk7dmFyIGUxZSx0MWUsbjFlLGRBZT1Gcih1RywiU3RyZXNzTWFqb3JpemF0aW9uL0RpbWVuc2lvbiIsMzkxLEhyLEYybixiMG4pLG04dDtEKDEwMDMsMSxpaSxEeiksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBWZm4odGhpcy5hLGwodCwxNTMpLGwobiwxNTMpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHVHLCJTdHJlc3NNYWpvcml6YXRpb24vbGFtYmRhJDAkVHlwZSIsMTAwMyksRCgxMTkyLDEse30sR290KSxJKEJ4LCJFbGtMYXllcmVkIiwxMTkyKSxEKDExOTMsMSxmcixJeiksaC5DZD1mdW5jdGlvbih0KXtfa24odGhpcy5hLGwodCwzNikpfSxJKEJ4LCJFbGtMYXllcmVkL2xhbWJkYSQwJFR5cGUiLDExOTMpLEQoMTE5NCwxLGZyLE9pZSksaC5DZD1mdW5jdGlvbih0KXtVZm4odGhpcy5hLGwodCwzNikpfSxJKEJ4LCJFbGtMYXllcmVkL2xhbWJkYSQxJFR5cGUiLDExOTQpLEQoMTI4MSwxLHt9LExudCk7dmFyIHY4dCx3OHQseTh0O0koQngsIkdyYXBoQ29uZmlndXJhdG9yIiwxMjgxKSxEKDc3MCwxLGZyLHFwKSxoLkNkPWZ1bmN0aW9uKHQpe3RwdCh0aGlzLmEsbCh0LDEwKSl9LEkoQngsIkdyYXBoQ29uZmlndXJhdG9yL2xhbWJkYSQwJFR5cGUiLDc3MCksRCg3NzEsMSx7fSx1NSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbXhlKCksbmV3IGJuKG51bGwsbmV3IGtuKGwodCwzMCkuYSwxNikpfSxJKEJ4LCJHcmFwaENvbmZpZ3VyYXRvci9sYW1iZGEkMSRUeXBlIiw3NzEpLEQoNzcyLDEsZnIsbl8pLGguQ2Q9ZnVuY3Rpb24odCl7dHB0KHRoaXMuYSxsKHQsMTApKX0sSShCeCwiR3JhcGhDb25maWd1cmF0b3IvbGFtYmRhJDIkVHlwZSIsNzcyKSxEKDExMDksMjA1LHR2LHFRZSksaC5yZj1mdW5jdGlvbih0LG4pe3ZhciByO3I9b0xuKG5ldyBWUWUsdCkscWUoYXQodCwoTnQoKSxwNCkpKT09PXFlKChycCgpLEEyKSk/ajRuKHRoaXMuYSxyLG4pOldFbih0aGlzLmEscixuKSxuLiRnKCl8fEt2dChuZXcgYjgscil9LEkoQngsIkxheWVyZWRMYXlvdXRQcm92aWRlciIsMTEwOSksRCgzNjcsMjIsezM6MSwzNDoxLDIyOjEsMzY3OjF9LG9PKTt2YXIgeTAsdmcsYnUsX3UsbWMsZ0FlPUZyKEJ4LCJMYXllcmVkUGhhc2VzIiwzNjcsSHIsem1uLG0wbikseDh0O0QoMTcxNywxLHt9LHJmdCksaC5pPTA7dmFyIGs4dDtJKGpQLCJDb21wb25lbnRzVG9DR3JhcGhUcmFuc2Zvcm1lciIsMTcxNyk7dmFyIEU4dDtEKDE3MTgsMSx7fSxtbSksaC55Zj1mdW5jdGlvbih0LG4pe3JldHVybiBiLk1hdGgubWluKHQuYSE9bnVsbD96ZSh0LmEpOnQuYy5pLG4uYSE9bnVsbD96ZShuLmEpOm4uYy5pKX0saC56Zj1mdW5jdGlvbih0LG4pe3JldHVybiBiLk1hdGgubWluKHQuYSE9bnVsbD96ZSh0LmEpOnQuYy5pLG4uYSE9bnVsbD96ZShuLmEpOm4uYy5pKX0sSShqUCwiQ29tcG9uZW50c1RvQ0dyYXBoVHJhbnNmb3JtZXIvMSIsMTcxOCksRCg4NiwxLHs4NjoxfSksaC5pPTAsaC5rPSEwLGgubz1pYTt2YXIgcjFlPUkoZEwsIkNOb2RlIiw4Nik7RCg0NzAsODYsezQ3MDoxLDg2OjF9LFB5ZSxVOGUpLGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4iIn0sSShqUCwiQ29tcG9uZW50c1RvQ0dyYXBoVHJhbnNmb3JtZXIvQ1JlY3ROb2RlIiw0NzApLEQoMTY4OCwxLHt9LHE5KTt2YXIgaTFlLHMxZTtJKGpQLCJPbmVEaW1lbnNpb25hbENvbXBvbmVudHNDb21wYWN0aW9uIiwxNjg4KSxEKDE2ODksMSx7fSxWdiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gQTJuKGwodCw0MikpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0sSShqUCwiT25lRGltZW5zaW9uYWxDb21wb25lbnRzQ29tcGFjdGlvbi9sYW1iZGEkMCRUeXBlIiwxNjg5KSxEKDE2OTAsMSx7fSxZNyksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gejRuKGwodCw0MikpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0sSShqUCwiT25lRGltZW5zaW9uYWxDb21wb25lbnRzQ29tcGFjdGlvbi9sYW1iZGEkMSRUeXBlIiwxNjkwKSxEKDE3MjAsMSx7fSxac3QpLEkoZEwsIkNHcmFwaCIsMTcyMCksRCgxOTQsMSx7MTk0OjF9LFFjZSksaC5iPTAsaC5jPTAsaC5lPTAsaC5nPSEwLGguaT1pYSxJKGRMLCJDR3JvdXAiLDE5NCksRCgxNzE5LDEse30sRzIpLGgueWY9ZnVuY3Rpb24odCxuKXtyZXR1cm4gYi5NYXRoLm1heCh0LmEhPW51bGw/emUodC5hKTp0LmMuaSxuLmEhPW51bGw/emUobi5hKTpuLmMuaSl9LGguemY9ZnVuY3Rpb24odCxuKXtyZXR1cm4gYi5NYXRoLm1heCh0LmEhPW51bGw/emUodC5hKTp0LmMuaSxuLmEhPW51bGw/emUobi5hKTpuLmMuaSl9LEkoZEwsdDN0LDE3MTkpLEQoMTcyMSwxLHt9LFpwdCksaC5kPSExO3ZhciBUOHQsYTFlPUkoZEwsaTN0LDE3MjEpO0QoMTcyMiwxLHt9LFg3KSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiB2M2UoKSxIbigpLGwobCh0LDQyKS5hLDg2KS5kLmUhPTB9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxJKGRMLHMzdCwxNzIyKSxEKDgzMywxLHt9LEc0ZSksaC5hPSExLGguYj0hMSxoLmM9ITEsaC5kPSExLEkoZEwsYTN0LDgzMyksRCgxODk4LDEse30scHN0KSxJKGxHLG8zdCwxODk4KTt2YXIgZkI9a3MocnYsWnd0KTtEKDE4OTksMSx7MzgyOjF9LFlhdCksaC5iZj1mdW5jdGlvbih0KXtuU24odGhpcyxsKHQsNDc2KSl9LEkobEcsYzN0LDE4OTkpLEQoTGIsMSxpaSxsNSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBocG4obCh0LDg2KSxsKG4sODYpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKGxHLHUzdCxMYiksRCg0NzYsMSx7NDc2OjF9LE8zZSksaC5hPSExLEkobEcsbDN0LDQ3NiksRCgxOTAxLDEsaWksWDMpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZjhuKGwodCw0NzYpLGwobiw0NzYpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKGxHLGgzdCwxOTAxKSxEKDE0OCwxLHsxNDg6MX0sSWssTDRlKSxoLkZiPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiB0PT1udWxsfHx4T24hPWJoKHQpPyExOihuPWwodCwxNDgpLEpjKHRoaXMuYyxuLmMpJiZKYyh0aGlzLmQsbi5kKSl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gTU4oaGUobGUod2EsMSksUm4sMSw1LFt0aGlzLmMsdGhpcy5kXSkpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIigiK3RoaXMuYytDbyt0aGlzLmQrKHRoaXMuYT8iY3giOiIiKSt0aGlzLmIrIikifSxoLmE9ITAsaC5jPTAsaC5kPTA7dmFyIHhPbj1JKHJ2LCJQb2ludCIsMTQ4KTtEKDQxNiwyMix7MzoxLDM0OjEsMjI6MSw0MTY6MX0sZnEpO3ZhciBzMyxhNCxNNixvNCxDOHQ9RnIocnYsIlBvaW50L1F1YWRyYW50Iiw0MTYsSHIsWGJuLHYwbiksUzh0O0QoMTcwOCwxLHt9LCRRZSksaC5iPW51bGwsaC5jPW51bGwsaC5kPW51bGwsaC5lPW51bGwsaC5mPW51bGw7dmFyIF84dCxBOHQsTDh0LE04dCxEOHQ7SShydiwiUmVjdGlsaW5lYXJDb252ZXhIdWxsIiwxNzA4KSxEKDU4MywxLHszODI6MX0sblUpLGguYmY9ZnVuY3Rpb24odCl7JHZuKHRoaXMsbCh0LDE0OCkpfSxoLmI9MDt2YXIgcEFlO0kocnYsIlJlY3RpbGluZWFyQ29udmV4SHVsbC9NYXhpbWFsRWxlbWVudHNFdmVudEhhbmRsZXIiLDU4MyksRCgxNzEwLDEsaWksRnApLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZnBuKEdlKHQpLEdlKG4pKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJ2LCJSZWN0aWxpbmVhckNvbnZleEh1bGwvTWF4aW1hbEVsZW1lbnRzRXZlbnRIYW5kbGVyL2xhbWJkYSQwJFR5cGUiLDE3MTApLEQoMTcwOSwxLHszODI6MX0sd2h0KSxoLmJmPWZ1bmN0aW9uKHQpe21Dbih0aGlzLGwodCwxNDgpKX0saC5hPTAsaC5iPW51bGwsaC5jPW51bGwsaC5kPW51bGwsaC5lPW51bGwsSShydiwiUmVjdGlsaW5lYXJDb252ZXhIdWxsL1JlY3RhbmdsZUV2ZW50SGFuZGxlciIsMTcwOSksRCgxNzExLDEsaWksbkkpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4geWJuKGwodCwxNDgpLGwobiwxNDgpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJ2LCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDAkVHlwZSIsMTcxMSksRCgxNzEyLDEsaWksJEopLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4geGJuKGwodCwxNDgpLGwobiwxNDgpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJ2LCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDEkVHlwZSIsMTcxMiksRCgxNzEzLDEsaWksdm0pLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gd2JuKGwodCwxNDgpLGwobiwxNDgpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJ2LCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDIkVHlwZSIsMTcxMyksRCgxNzE0LDEsaWksaHUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4ga2JuKGwodCwxNDgpLGwobiwxNDgpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJ2LCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDMkVHlwZSIsMTcxNCksRCgxNzE1LDEsaWksekopLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gWnhuKGwodCwxNDgpLGwobiwxNDgpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJ2LCJSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDQkVHlwZSIsMTcxNSksRCgxNzE2LDEse30sVG90KSxJKHJ2LCJTY2FubGluZSIsMTcxNiksRCgyMTA0LDEse30pLEkoVjEsIkFic3RyYWN0R3JhcGhQbGFjZXIiLDIxMDQpLEQoMzM1LDEsezMzNToxfSxocnQpLGguRmY9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuR2YodCk/KHhuKHRoaXMuYixsKFEodCwoZnQoKSxwcCkpLDIxKSx0KSwhMCk6ITF9LGguR2Y9ZnVuY3Rpb24odCl7dmFyIG4scixhLG87Zm9yKG49bChRKHQsKGZ0KCkscHApKSwyMSksbz1sKCRpKFhpLG4pLDIxKSxhPW8uS2MoKTthLk9iKCk7KWlmKHI9bChhLlBiKCksMjEpLCFsKCRpKHRoaXMuYixyKSwxNSkuZGMoKSlyZXR1cm4hMTtyZXR1cm4hMH07dmFyIFhpO0koVjEsIkNvbXBvbmVudEdyb3VwIiwzMzUpLEQoNzc5LDIxMDQse30sTndlKSxoLkhmPWZ1bmN0aW9uKHQpe3ZhciBuLHI7Zm9yKHI9bmV3IEcodGhpcy5hKTtyLmE8ci5jLmMubGVuZ3RoOylpZihuPWwocmUociksMzM1KSxuLkZmKHQpKXJldHVybjt2dCh0aGlzLmEsbmV3IGhydCh0KSl9LGguRWY9ZnVuY3Rpb24odCxuKXt2YXIgcixhLG8sZixnLHcsRSxDLEwsQix6LFYsSjtpZih0aGlzLmEuYy5sZW5ndGg9MCxuLmEuYy5sZW5ndGg9MCx0LmRjKCkpe24uZi5hPTAsbi5mLmI9MDtyZXR1cm59Zm9yKGc9bCh0LlhiKDApLDM2KSxwYyhuLGcpLG89dC5LYygpO28uT2IoKTspYT1sKG8uUGIoKSwzNiksdGhpcy5IZihhKTtmb3IoSj1uZXcgcWEsZj16ZShHZShRKGcsKE50KCksU0IpKSkpLEM9bmV3IEcodGhpcy5hKTtDLmE8Qy5jLmMubGVuZ3RoOyl3PWwocmUoQyksMzM1KSxMPWh3dCh3LGYpLG4yKHZIKHcuYiksSi5hLEouYiksSi5hKz1MLmEsSi5iKz1MLmI7aWYobi5mLmE9Si5hLWYsbi5mLmI9Si5iLWYsUnQoQnQoUShnLHVXKSkpJiZxZShRKGcsYnApKT09PXFlKChpcCgpLGlDKSkpe2ZvcihWPXQuS2MoKTtWLk9iKCk7KUI9bChWLlBiKCksMzYpLEtFKEIsQi5jLmEsQi5jLmIpO2ZvcihyPW5ldyBvUyxLa2Uocix0LGYpLHo9dC5LYygpO3ouT2IoKTspQj1sKHouUGIoKSwzNiksT2koWTAoQi5jKSxyLmUpO09pKFkwKG4uZiksci5hKX1mb3IoRT1uZXcgRyh0aGlzLmEpO0UuYTxFLmMuYy5sZW5ndGg7KXc9bChyZShFKSwzMzUpLEY2ZShuLHZIKHcuYikpfSxJKFYxLCJDb21wb25lbnRHcm91cEdyYXBoUGxhY2VyIiw3NzkpLEQoMTMxMiw3Nzkse30sWlFlKSxoLkhmPWZ1bmN0aW9uKHQpe24xdCh0aGlzLHQpfSxoLkVmPWZ1bmN0aW9uKHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGU7aWYodGhpcy5hLmMubGVuZ3RoPTAsbi5hLmMubGVuZ3RoPTAsdC5kYygpKXtuLmYuYT0wLG4uZi5iPTA7cmV0dXJufWZvcihnPWwodC5YYigwKSwzNikscGMobixnKSxvPXQuS2MoKTtvLk9iKCk7KWE9bChvLlBiKCksMzYpLG4xdCh0aGlzLGEpO2ZvcigkZT1uZXcgcWEsTWU9bmV3IHFhLHRlPW5ldyBxYSxKPW5ldyBxYSxmPXplKEdlKFEoZywoTnQoKSxTQikpKSksQz1uZXcgRyh0aGlzLmEpO0MuYTxDLmMuYy5sZW5ndGg7KXtpZih3PWwocmUoQyksMzM1KSxVZyhsKFEobiwocGkoKSx4dikpLDg4KSkpe2Zvcih0ZS5hPSRlLmEsVGU9bmV3IGNfKFpfKFZhZSh3LmIpLmEpLmEua2MoKSk7VGUuYi5PYigpOylpZihmZT1sKHNxKFRlLmIuUGIoKSksMjEpLGZlLkhjKChDdCgpLFFuKSkpe3RlLmE9TWUuYTticmVha319ZWxzZSBpZihCNShsKFEobix4diksODgpKSl7Zm9yKHRlLmI9JGUuYixUZT1uZXcgY18oWl8oVmFlKHcuYikuYSkuYS5rYygpKTtUZS5iLk9iKCk7KWlmKGZlPWwoc3EoVGUuYi5QYigpKSwyMSksZmUuSGMoKEN0KCksZXIpKSl7dGUuYj1NZS5iO2JyZWFrfX1pZihMPWh3dChsKHcsNTc5KSxmKSxuMih2SCh3LmIpLHRlLmEsdGUuYiksVWcobChRKG4seHYpLDg4KSkpe2ZvcihNZS5hPXRlLmErTC5hLEouYT1iLk1hdGgubWF4KEouYSxNZS5hKSxUZT1uZXcgY18oWl8oVmFlKHcuYikuYSkuYS5rYygpKTtUZS5iLk9iKCk7KWlmKGZlPWwoc3EoVGUuYi5QYigpKSwyMSksZmUuSGMoKEN0KCksRHIpKSl7JGUuYT10ZS5hK0wuYTticmVha31NZS5iPXRlLmIrTC5iLHRlLmI9TWUuYixKLmI9Yi5NYXRoLm1heChKLmIsdGUuYil9ZWxzZSBpZihCNShsKFEobix4diksODgpKSl7Zm9yKE1lLmI9dGUuYitMLmIsSi5iPWIuTWF0aC5tYXgoSi5iLE1lLmIpLFRlPW5ldyBjXyhaXyhWYWUody5iKS5hKS5hLmtjKCkpO1RlLmIuT2IoKTspaWYoZmU9bChzcShUZS5iLlBiKCkpLDIxKSxmZS5IYygoQ3QoKSxhcikpKXskZS5iPXRlLmIrTC5iO2JyZWFrfU1lLmE9dGUuYStMLmEsdGUuYT1NZS5hLEouYT1iLk1hdGgubWF4KEouYSx0ZS5hKX19aWYobi5mLmE9Si5hLWYsbi5mLmI9Si5iLWYsUnQoQnQoUShnLHVXKSkpJiZxZShRKGcsYnApKT09PXFlKChpcCgpLGlDKSkpe2ZvcihWPXQuS2MoKTtWLk9iKCk7KUI9bChWLlBiKCksMzYpLEtFKEIsQi5jLmEsQi5jLmIpO2ZvcihyPW5ldyBvUyxLa2Uocix0LGYpLHo9dC5LYygpO3ouT2IoKTspQj1sKHouUGIoKSwzNiksT2koWTAoQi5jKSxyLmUpO09pKFkwKG4uZiksci5hKX1mb3IoRT1uZXcgRyh0aGlzLmEpO0UuYTxFLmMuYy5sZW5ndGg7KXc9bChyZShFKSwzMzUpLEY2ZShuLHZIKHcuYikpfSxJKFYxLCJDb21wb25lbnRHcm91cE1vZGVsT3JkZXJHcmFwaFBsYWNlciIsMTMxMiksRCgzODksMjIsezM6MSwzNDoxLDIyOjEsMzg5OjF9LGRxKTt2YXIgbzFlLGJBZSxjMWUsYzQsbUFlPUZyKFYxLCJDb21wb25lbnRPcmRlcmluZ1N0cmF0ZWd5IiwzODksSHIsVWJuLHcwbiksSTh0O0QoNjU5LDEse30sb1MpLEkoVjEsIkNvbXBvbmVudHNDb21wYWN0b3IiLDY1OSksRCgxNTMzLDEzLFV3dCx4dXQpLGguRmM9ZnVuY3Rpb24odCl7cmV0dXJuIFJBKHRoaXMsbCh0LDE0OCkpfSxJKFYxLCJDb21wb25lbnRzQ29tcGFjdG9yL0h1bGxwb2ludHMiLDE1MzMpLEQoMTUzMCwxLHs4NTU6MX0seGR0KSxoLmE9ITEsSShWMSwiQ29tcG9uZW50c0NvbXBhY3Rvci9JbnRlcm5hbENvbXBvbmVudCIsMTUzMCksRCgxNTI5LDEsaGcsUlFlKSxoLkpjPWZ1bmN0aW9uKHQpe3RvKHRoaXMsdCl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEcodGhpcy5hKX0sSShWMSwiQ29tcG9uZW50c0NvbXBhY3Rvci9JbnRlcm5hbENvbm5lY3RlZENvbXBvbmVudHMiLDE1MjkpLEQoMTUzMiwxLHs2MDI6MX0sbjJ0KSxoLkJmPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGguQ2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLkFmPWZ1bmN0aW9uKCl7cmV0dXJuIHR1ZSh0aGlzLmQpfSxoLkRmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sSShWMSwiQ29tcG9uZW50c0NvbXBhY3Rvci9JbnRlcm5hbEV4dGVybmFsRXh0ZW5zaW9uIiwxNTMyKSxEKDE1MzEsMSx7NjAyOjF9LEhRZSksaC5DZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguQWY9ZnVuY3Rpb24oKXtyZXR1cm4gdHVlKHRoaXMuZCl9LGguQmY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxoLkRmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sSShWMSwiQ29tcG9uZW50c0NvbXBhY3Rvci9JbnRlcm5hbFVuaW9uRXh0ZXJuYWxFeHRlbnNpb24iLDE1MzEpLEQoMTUzNSwxLHt9LEVidCksSShWMSwiQ29tcG9uZW50c0NvbXBhY3Rvci9PdXRlclNlZ21lbnRzIiwxNTM1KSxEKDE1MzQsMSx7fSxqUWUpLEkoVjEsIkNvbXBvbmVudHNDb21wYWN0b3IvU2VnbWVudHMiLDE1MzQpLEQoMTI4MiwxLHt9LFB1dCksSShWMSxMRWUsMTI4MiksRCgxMjgzLDEsaWksb2opLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gQ2JuKGwodCwzNiksbChuLDM2KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShWMSwiQ29tcG9uZW50c1Byb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxMjgzKSxEKDU3OSwzMzUsezMzNToxLDU3OToxfSx5dXQpLGguRmY9ZnVuY3Rpb24odCl7cmV0dXJuIEc3ZSh0aGlzLHQpfSxoLkdmPWZ1bmN0aW9uKHQpe3JldHVybiBuYnQodGhpcyx0KX07dmFyIGJpO0koVjEsIk1vZGVsT3JkZXJDb21wb25lbnRHcm91cCIsNTc5KSxEKDEzMTAsMjEwNCx7fSxxSiksaC5FZj1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHo7aWYodC5nYygpPT0xKXtCPWwodC5YYigwKSwzNiksQiE9biYmKG4uYS5jLmxlbmd0aD0wLGNtdChuLEIsMCwwKSxwYyhuLEIpLE81ZShuLmQsQi5kKSxuLmYuYT1CLmYuYSxuLmYuYj1CLmYuYik7cmV0dXJufWVsc2UgaWYodC5kYygpKXtuLmEuYy5sZW5ndGg9MCxuLmYuYT0wLG4uZi5iPTA7cmV0dXJufWZvcih0aGlzLkpmKHQsbiksbz1sKHQuWGIoMCksMzYpLG4uYS5jLmxlbmd0aD0wLHBjKG4sbyksQz0wLHo9MCxnPXQuS2MoKTtnLk9iKCk7KWY9bChnLlBiKCksMzYpLEw9Zi5mLEM9Yi5NYXRoLm1heChDLEwuYSkseis9TC5hKkwuYjtpZihDPWIuTWF0aC5tYXgoQyxiLk1hdGguc3FydCh6KSp6ZShHZShRKG4sKE50KCksY1cpKSkpKSxhPXplKEdlKFEobixTQikpKSx0aGlzLklmKHQsbixDLGEpLFJ0KEJ0KFEobyx1VykpKSl7Zm9yKHI9bmV3IG9TLEtrZShyLHQsYSksRT10LktjKCk7RS5PYigpOyl3PWwoRS5QYigpLDM2KSxPaShZMCh3LmMpLHIuZSk7T2koWTAobi5mKSxyLmEpfUY2ZShuLHQpfSxoLklmPWZ1bmN0aW9uKHQsbixyLGEpe3ZhciBvLGYsZyx3LEUsQyxMLEI7Zm9yKEw9MCxCPTAsdz0wLG89YSxnPXQuS2MoKTtnLk9iKCk7KWY9bChnLlBiKCksMzYpLEM9Zi5mLEwrQy5hPnImJihMPTAsQis9dythLHc9MCksRT1mLmMsS0UoZixMK0UuYSxCK0UuYiksWTAoRSksbz1iLk1hdGgubWF4KG8sTCtDLmEpLHc9Yi5NYXRoLm1heCh3LEMuYiksTCs9Qy5hK2E7bi5mLmE9byxuLmYuYj1CK3d9LGguSmY9ZnVuY3Rpb24odCxuKXt2YXIgcixhLG8sZixnO2lmKHFlKFEobiwoTnQoKSxnNCkpKT09PXFlKChLbSgpLGM0KSkpe2ZvcihhPXQuS2MoKTthLk9iKCk7KXtmb3Iocj1sKGEuUGIoKSwzNiksZz0wLGY9bmV3IEcoci5hKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMTApLGcrPWwoUShvLEhrdCksMTcpLmE7ci5wPWd9Q24oKSx0LmpkKG5ldyBjail9fSxJKFYxLCJTaW1wbGVSb3dHcmFwaFBsYWNlciIsMTMxMCksRCgxMzEzLDEzMTAse30sY2gpLGguSWY9ZnVuY3Rpb24odCxuLHIsYSl7dmFyIG8sZixnLHcsRSxDLEwsQix6LFY7Zm9yKHo9MCxWPTAsdz0wLG89YSxFPW51bGwsQj0wLGc9dC5LYygpO2cuT2IoKTspZj1sKGcuUGIoKSwzNiksTD1mLmYsKHorTC5hPnImJiFsKFEoZiwoZnQoKSxwcCkpLDIxKS5IYygoQ3QoKSxRbikpfHxFJiZsKFEoRSwoZnQoKSxwcCkpLDIxKS5IYygoQ3QoKSxhcikpfHxsKFEoZiwoZnQoKSxwcCkpLDIxKS5IYygoQ3QoKSxlcikpKSYmKHo9QixWKz13K2Esdz0wKSxDPWYuYyxsKFEoZiwoZnQoKSxwcCkpLDIxKS5IYygoQ3QoKSxRbikpJiYoej1vK2EpLEtFKGYseitDLmEsVitDLmIpLG89Yi5NYXRoLm1heChvLHorTC5hKSxsKFEoZixwcCksMjEpLkhjKERyKSYmKEI9Yi5NYXRoLm1heChCLHorTC5hK2EpKSxZMChDKSx3PWIuTWF0aC5tYXgodyxMLmIpLHorPUwuYSthLEU9ZjtuLmYuYT1vLG4uZi5iPVYrd30saC5KZj1mdW5jdGlvbih0LG4pe30sSShWMSwiTW9kZWxPcmRlclJvd0dyYXBoUGxhY2VyIiwxMzEzKSxEKDEzMTEsMSxpaSxjaiksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBqM24obCh0LDM2KSxsKG4sMzYpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKFYxLCJTaW1wbGVSb3dHcmFwaFBsYWNlci8xIiwxMzExKTt2YXIgTzh0O0QoMTI4MCwxLExkLHEwKSxoLkxiPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBuPWwoUShsKHQsMjQ5KS5iLChOdCgpLGNjKSksNzUpLCEhbiYmbi5iIT0wfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5NYj1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbj1sKFEobCh0LDI0OSkuYiwoTnQoKSxjYykpLDc1KSwhIW4mJm4uYiE9MH0sSShoRywiQ29tcG91bmRHcmFwaFBvc3Rwcm9jZXNzb3IvMSIsMTI4MCksRCgxMjc5LDEsdHMsVVFlKSxoLktmPWZ1bmN0aW9uKHQsbil7a2R0KHRoaXMsbCh0LDM2KSxuKX0sSShoRywiQ29tcG91bmRHcmFwaFByZXByb2Nlc3NvciIsMTI3OSksRCg0NTMsMSx7NDUzOjF9LGYxdCksaC5jPSExLEkoaEcsIkNvbXBvdW5kR3JhcGhQcmVwcm9jZXNzb3IvRXh0ZXJuYWxQb3J0Iiw0NTMpLEQoMjQ5LDEsezI0OToxfSxLcSksaC5JYj1mdW5jdGlvbigpe3JldHVybiBhYWUodGhpcy5jKSsiOiIrS3B0KHRoaXMuYil9LEkoaEcsIkNyb3NzSGllcmFyY2h5RWRnZSIsMjQ5KSxEKDc3NywxLGlpLEdJKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuICQ3bih0aGlzLGwodCwyNDkpLGwobiwyNDkpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKGhHLCJDcm9zc0hpZXJhcmNoeUVkZ2VDb21wYXJhdG9yIiw3NzcpLEQoMzA1LDEzNyx7MzoxLDMwNToxLDk2OjEsMTM3OjF9KSxoLnA9MCxJKEN1LCJMR3JhcGhFbGVtZW50IiwzMDUpLEQoMTgsMzA1LHszOjEsMTg6MSwzMDU6MSw5NjoxLDEzNzoxfSxUdyksaC5JYj1mdW5jdGlvbigpe3JldHVybiBLcHQodGhpcyl9O3ZhciB1MWU9SShDdSwiTEVkZ2UiLDE4KTtEKDM2LDMwNSx7MzoxLDIwOjEsMzY6MSwzMDU6MSw5NjoxLDEzNzoxfSxvN2UpLGguSmM9ZnVuY3Rpb24odCl7dG8odGhpcyx0KX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRyh0aGlzLmIpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi5jLmxlbmd0aD09MD8iRy11bmxheWVyZWQiK1RiKHRoaXMuYSk6dGhpcy5hLmMubGVuZ3RoPT0wPyJHLWxheWVyZWQiK1RiKHRoaXMuYik6IkdbbGF5ZXJsZXNzIitUYih0aGlzLmEpKyIsIGxheWVycyIrVGIodGhpcy5iKSsiXSJ9O3ZhciBOOHQ9SShDdSwiTEdyYXBoIiwzNiksUDh0O0QoNjY2LDEse30pLGguTGY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lLm59LGgub2Y9ZnVuY3Rpb24odCl7cmV0dXJuIFEodGhpcy5lLHQpfSxoLk1mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZS5vfSxoLk5mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZS5wfSxoLnBmPWZ1bmN0aW9uKHQpe3JldHVybiBucyh0aGlzLmUsdCl9LGguT2Y9ZnVuY3Rpb24odCl7dGhpcy5lLm4uYT10LmEsdGhpcy5lLm4uYj10LmJ9LGguUGY9ZnVuY3Rpb24odCl7dGhpcy5lLm8uYT10LmEsdGhpcy5lLm8uYj10LmJ9LGguUWY9ZnVuY3Rpb24odCl7dGhpcy5lLnA9dH0sSShDdSwiTEdyYXBoQWRhcHRlcnMvQWJzdHJhY3RMU2hhcGVBZGFwdGVyIiw2NjYpLEQoNDc0LDEsezg1MzoxfSxUbSksaC5SZj1mdW5jdGlvbigpe3ZhciB0LG47aWYoIXRoaXMuYilmb3IodGhpcy5iPWVnKHRoaXMuYS5iLmMubGVuZ3RoKSxuPW5ldyBHKHRoaXMuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksNzIpLHZ0KHRoaXMuYixuZXcgWmQodCkpO3JldHVybiB0aGlzLmJ9LGguYj1udWxsLEkoQ3UsIkxHcmFwaEFkYXB0ZXJzL0xFZGdlQWRhcHRlciIsNDc0KSxEKDY2NSwxLHt9LEphZSksaC5TZj1mdW5jdGlvbigpe3ZhciB0LG4scixhLG8sZjtpZighdGhpcy5iKXtmb3IodGhpcy5iPW5ldyBidCxhPW5ldyBHKHRoaXMuYS5iKTthLmE8YS5jLmMubGVuZ3RoOylmb3Iocj1sKHJlKGEpLDMwKSxmPW5ldyBHKHIuYSk7Zi5hPGYuYy5jLmxlbmd0aDspaWYobz1sKHJlKGYpLDEwKSx0aGlzLmMuTWIobykmJih2dCh0aGlzLmIsbmV3IFdxKHRoaXMsbyx0aGlzLmUpKSx0aGlzLmQpKXtpZihucyhvLChmdCgpLFF4KSkpZm9yKG49bChRKG8sUXgpLDE1KS5LYygpO24uT2IoKTspdD1sKG4uUGIoKSwxMCksdnQodGhpcy5iLG5ldyBXcSh0aGlzLHQsITEpKTtpZihucyhvLEd4KSlmb3Iobj1sKFEobyxHeCksMTUpLktjKCk7bi5PYigpOyl0PWwobi5QYigpLDEwKSx2dCh0aGlzLmIsbmV3IFdxKHRoaXMsdCwhMSkpfX1yZXR1cm4gdGhpcy5ifSxoLkxmPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IEhwKEQzdCkpfSxoLm9mPWZ1bmN0aW9uKHQpe3JldHVybiBRKHRoaXMuYSx0KX0saC5NZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZn0saC5OZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEucH0saC5wZj1mdW5jdGlvbih0KXtyZXR1cm4gbnModGhpcy5hLHQpfSxoLk9mPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBIcChEM3QpKX0saC5QZj1mdW5jdGlvbih0KXt0aGlzLmEuZi5hPXQuYSx0aGlzLmEuZi5iPXQuYn0saC5RZj1mdW5jdGlvbih0KXt0aGlzLmEucD10fSxoLmI9bnVsbCxoLmQ9ITEsaC5lPSExLEkoQ3UsIkxHcmFwaEFkYXB0ZXJzL0xHcmFwaEFkYXB0ZXIiLDY2NSksRCg1ODUsNjY2LHsxODc6MX0sWmQpLEkoQ3UsIkxHcmFwaEFkYXB0ZXJzL0xMYWJlbEFkYXB0ZXIiLDU4NSksRCg1ODQsNjY2LHs2OTU6MX0sV3EpLGguVGY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLlVmPWZ1bmN0aW9uKCl7cmV0dXJuIENuKCksQ24oKSxfb30saC5SZj1mdW5jdGlvbigpe3ZhciB0LG47aWYoIXRoaXMuYSlmb3IodGhpcy5hPWVnKGwodGhpcy5lLDEwKS5iLmMubGVuZ3RoKSxuPW5ldyBHKGwodGhpcy5lLDEwKS5iKTtuLmE8bi5jLmMubGVuZ3RoOyl0PWwocmUobiksNzIpLHZ0KHRoaXMuYSxuZXcgWmQodCkpO3JldHVybiB0aGlzLmF9LGguVmY9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1sKHRoaXMuZSwxMCkuZCxuZXcgbjRlKHQuZCx0LmMsdC5hLHQuYil9LGguV2Y9ZnVuY3Rpb24oKXtyZXR1cm4gQ24oKSxDbigpLF9vfSxoLlhmPWZ1bmN0aW9uKCl7dmFyIHQsbjtpZighdGhpcy5jKWZvcih0aGlzLmM9ZWcobCh0aGlzLmUsMTApLmouYy5sZW5ndGgpLG49bmV3IEcobCh0aGlzLmUsMTApLmopO24uYTxuLmMuYy5sZW5ndGg7KXQ9bChyZShuKSwxMiksdnQodGhpcy5jLG5ldyBCZXQodCx0aGlzLmQpKTtyZXR1cm4gdGhpcy5jfSxoLllmPWZ1bmN0aW9uKCl7cmV0dXJuIFJ0KEJ0KFEobCh0aGlzLmUsMTApLChmdCgpLEZMZSkpKSl9LGguWmY9ZnVuY3Rpb24odCl7bCh0aGlzLmUsMTApLmQuYj10LmIsbCh0aGlzLmUsMTApLmQuZD10LmQsbCh0aGlzLmUsMTApLmQuYz10LmMsbCh0aGlzLmUsMTApLmQuYT10LmF9LGguJGY9ZnVuY3Rpb24odCl7bCh0aGlzLmUsMTApLmYuYj10LmIsbCh0aGlzLmUsMTApLmYuZD10LmQsbCh0aGlzLmUsMTApLmYuYz10LmMsbCh0aGlzLmUsMTApLmYuYT10LmF9LGguX2Y9ZnVuY3Rpb24oKXtCd24odGhpcywoZ18oKSxQOHQpKX0saC5hPW51bGwsaC5iPW51bGwsaC5jPW51bGwsaC5kPSExLEkoQ3UsIkxHcmFwaEFkYXB0ZXJzL0xOb2RlQWRhcHRlciIsNTg0KSxEKDE3ODgsNjY2LHs4NTI6MX0sQmV0KSxoLlVmPWZ1bmN0aW9uKCl7dmFyIHQsbixyLGEsbyxmLGcsdztpZih0aGlzLmQmJmwodGhpcy5lLDEyKS5pLms9PShabigpLEF1KSlyZXR1cm4gQ24oKSxDbigpLF9vO2lmKCF0aGlzLmEpe2Zvcih0aGlzLmE9bmV3IGJ0LHI9bmV3IEcobCh0aGlzLmUsMTIpLmUpO3IuYTxyLmMuYy5sZW5ndGg7KXQ9bChyZShyKSwxOCksdnQodGhpcy5hLG5ldyBUbSh0KSk7aWYodGhpcy5kJiYoYT1sKFEobCh0aGlzLmUsMTIpLChmdCgpLGpsKSksMTApLGEpKWZvcihuPW5ldyBocihkcihrYShhKS5hLktjKCksbmV3IGopKTtqcihuKTspdD1sKHhyKG4pLDE4KSx2dCh0aGlzLmEsbmV3IFRtKHQpKTtpZihucyhsKHRoaXMuZSwxMikuaSwoZnQoKSxoMykpJiYoZz1sKFEobCh0aGlzLmUsMTIpLmksaDMpLDMzNyksdz1sKEIxKGcuZSx0aGlzLmUpLDExMyksdykpZm9yKGY9bmV3IEcody5iKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMzQwKSx2dCh0aGlzLmEsbmV3IFRtKG8uYSkpfXJldHVybiB0aGlzLmF9LGguUmY9ZnVuY3Rpb24oKXt2YXIgdCxuO2lmKCF0aGlzLmIpZm9yKHRoaXMuYj1lZyhsKHRoaXMuZSwxMikuZi5jLmxlbmd0aCksbj1uZXcgRyhsKHRoaXMuZSwxMikuZik7bi5hPG4uYy5jLmxlbmd0aDspdD1sKHJlKG4pLDcyKSx2dCh0aGlzLmIsbmV3IFpkKHQpKTtyZXR1cm4gdGhpcy5ifSxoLldmPWZ1bmN0aW9uKCl7dmFyIHQsbixyLGEsbyxmLGcsdztpZih0aGlzLmQmJmwodGhpcy5lLDEyKS5pLms9PShabigpLEF1KSlyZXR1cm4gQ24oKSxDbigpLF9vO2lmKCF0aGlzLmMpe2Zvcih0aGlzLmM9bmV3IGJ0LHI9bmV3IEcobCh0aGlzLmUsMTIpLmcpO3IuYTxyLmMuYy5sZW5ndGg7KXQ9bChyZShyKSwxOCksdnQodGhpcy5jLG5ldyBUbSh0KSk7aWYodGhpcy5kJiYoYT1sKFEobCh0aGlzLmUsMTIpLChmdCgpLGpsKSksMTApLGEpKWZvcihuPW5ldyBocihkcihxcyhhKS5hLktjKCksbmV3IGopKTtqcihuKTspdD1sKHhyKG4pLDE4KSx2dCh0aGlzLmMsbmV3IFRtKHQpKTtpZihucyhsKHRoaXMuZSwxMikuaSwoZnQoKSxoMykpJiYoZz1sKFEobCh0aGlzLmUsMTIpLmksaDMpLDMzNyksdz1sKEIxKGcuZSx0aGlzLmUpLDExMyksdykpZm9yKGY9bmV3IEcody5lKTtmLmE8Zi5jLmMubGVuZ3RoOylvPWwocmUoZiksMzQwKSx2dCh0aGlzLmMsbmV3IFRtKG8uYSkpfXJldHVybiB0aGlzLmN9LGguYWc9ZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzLmUsMTIpLmp9LGguYmc9ZnVuY3Rpb24oKXtyZXR1cm4gUnQoQnQoUShsKHRoaXMuZSwxMiksKGZ0KCkseEIpKSkpfSxoLmE9bnVsbCxoLmI9bnVsbCxoLmM9bnVsbCxoLmQ9ITEsSShDdSwiTEdyYXBoQWRhcHRlcnMvTFBvcnRBZGFwdGVyIiwxNzg4KSxEKDE3ODksMSxpaSxRMyksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBEU24obCh0LDEyKSxsKG4sMTIpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKEN1LCJMR3JhcGhBZGFwdGVycy9Qb3J0Q29tcGFyYXRvciIsMTc4OSksRCg4MTgsMSx0aSxjUyksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDEwKSxnXygpLCEwfSxJKEN1LCJMR3JhcGhBZGFwdGVycy9sYW1iZGEkMCRUeXBlIiw4MTgpLEQoNDA0LDMwNSx7MzoxLDMwNToxLDQwNDoxLDk2OjEsMTM3OjF9KSxJKEN1LCJMU2hhcGUiLDQwNCksRCg3Miw0MDQsezM6MSwzMDU6MSw3MjoxLDQwNDoxLDk2OjEsMTM3OjF9LFhKZSxieWUpLGguSWI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD15ZG4odGhpcyksdD09bnVsbD8ibGFiZWwiOiJsXyIrdH0sSShDdSwiTExhYmVsIiw3MiksRCgyMTQsMSx7MzoxLDQ6MSwyMTQ6MSw0MjM6MX0pLGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIERlKHQsMjE0KT8obj1sKHQsMjE0KSx0aGlzLmQ9PW4uZCYmdGhpcy5hPT1uLmEmJnRoaXMuYj09bi5iJiZ0aGlzLmM9PW4uYyk6ITF9LGguSGI9ZnVuY3Rpb24oKXt2YXIgdCxuO3JldHVybiB0PWo4KHRoaXMuYik8PDE2LHR8PWo4KHRoaXMuYSkmWnMsbj1qOCh0aGlzLmMpPDwxNixufD1qOCh0aGlzLmQpJlpzLHRebn0saC5jZz1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCO2ZvcihmPTA7Zjx0Lmxlbmd0aCYmSDB0KChYbihmLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoZikpLE8zdCk7KSsrZjtmb3Iobj10Lmxlbmd0aDtuPjAmJkgwdCgoWG4obi0xLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQobi0xKSksTjN0KTspLS1uO2lmKGY8bil7TD1HeSgoR2EoZixuLHQubGVuZ3RoKSx0LnN1YnN0cihmLG4tZikpLCIsfDsiKTt0cnl7Zm9yKHc9TCxFPTAsQz13Lmxlbmd0aDtFPEM7KytFKXtpZihnPXdbRV0sbz1HeShnLCI9Iiksby5sZW5ndGghPTIpdGhyb3cgdWUobmV3IFluKCJFeHBlY3RpbmcgYSBsaXN0IG9mIGtleS12YWx1ZSBwYWlycy4iKSk7YT0keShvWzBdKSxCPWp5KCR5KG9bMV0pKSx2bihhLCJ0b3AiKT90aGlzLmQ9Qjp2bihhLCJsZWZ0Iik/dGhpcy5iPUI6dm4oYSwiYm90dG9tIik/dGhpcy5hPUI6dm4oYSwicmlnaHQiKSYmKHRoaXMuYz1CKX19Y2F0Y2goeil7dGhyb3cgej1icyh6KSxEZSh6LDEzMCk/KHI9eix1ZShuZXcgWW4oUDN0K3IpKSk6dWUoeil9fX0saC5JYj1mdW5jdGlvbigpe3JldHVybiJbdG9wPSIrdGhpcy5kKyIsbGVmdD0iK3RoaXMuYisiLGJvdHRvbT0iK3RoaXMuYSsiLHJpZ2h0PSIrdGhpcy5jKyJdIn0saC5hPTAsaC5iPTAsaC5jPTAsaC5kPTAsSSgkUCwiU3BhY2luZyIsMjE0KSxEKDE0MCwyMTQsQjN0LHNfLG5udCxuNGUseGFlKTt2YXIgdkFlPUkoJFAsIkVsa01hcmdpbiIsMTQwKTtEKDY2MCwxNDAsQjN0LCRpZSksSShDdSwiTE1hcmdpbiIsNjYwKSxEKDEwLDQwNCx7MzoxLDMwNToxLDEwOjEsNDA0OjEsOTY6MSwxMzc6MX0sb3ApLGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gcGR0KHRoaXMpfSxoLmk9ITE7dmFyIHdnPUkoQ3UsIkxOb2RlIiwxMCk7RCgyNzMsMjIsezM6MSwzNDoxLDIyOjEsMjczOjF9LGtfKTt2YXIgSzEsVXMsY3UsQWEsUHMsQXUsbDFlPUZyKEN1LCJMTm9kZS9Ob2RlVHlwZSIsMjczLEhyLFN2bixUMW4pLEI4dDtEKDc3NSwxLHRpLHVqKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBSdChCdChRKGwodCw3MiksKE50KCksdGRlKSkpKX0sSShDdSwiTE5vZGUvbGFtYmRhJDAkVHlwZSIsNzc1KSxEKDEwNywyMTQsRjN0LEE4LGx3LFM0ZSk7dmFyIHdBZT1JKCRQLCJFbGtQYWRkaW5nIiwxMDcpO0QoNzc4LDEwNyxGM3QsUndlKSxJKEN1LCJMUGFkZGluZyIsNzc4KSxEKDEyLDQwNCx7MzoxLDMwNToxLDEyOjEsNDA0OjEsOTY6MSwxMzc6MX0sZ3UpLGguSWI9ZnVuY3Rpb24oKXt2YXIgdCxuLHI7cmV0dXJuIHQ9bmV3IHRiLGhpKCh0LmErPSJwXyIsdCksZlUodGhpcykpLHRoaXMuaSYmaGkod3UoKHQuYSs9IlsiLHQpLHRoaXMuaSksIl0iKSx0aGlzLmUuYy5sZW5ndGg9PTEmJnRoaXMuZy5jLmxlbmd0aD09MCYmbChqdCh0aGlzLmUsMCksMTgpLmMhPXRoaXMmJihuPWwoanQodGhpcy5lLDApLDE4KS5jLGhpKCh0LmErPSIgPDwgIix0KSxmVShuKSksaGkod3UoKHQuYSs9IlsiLHQpLG4uaSksIl0iKSksdGhpcy5lLmMubGVuZ3RoPT0wJiZ0aGlzLmcuYy5sZW5ndGg9PTEmJmwoanQodGhpcy5nLDApLDE4KS5kIT10aGlzJiYocj1sKGp0KHRoaXMuZywwKSwxOCkuZCxoaSgodC5hKz0iID4+ICIsdCksZlUocikpLGhpKHd1KCh0LmErPSJbIix0KSxyLmkpLCJdIikpLHQuYX0saC5jPSEwLGguZD0hMTt2YXIgeUFlLHhBZSxrQWUsRUFlLFRBZSxDQWUsRjh0PUkoQ3UsIkxQb3J0IiwxMik7RCg0MDgsMSxoZyxUNSksaC5KYz1mdW5jdGlvbih0KXt0byh0aGlzLHQpfSxoLktjPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9bmV3IEcodGhpcy5hLmUpLG5ldyBqV2UodCl9LEkoQ3UsIkxQb3J0LzEiLDQwOCksRCgxMzA5LDEsT2EsaldlKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gbChyZSh0aGlzLmEpLDE4KS5jfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIExjKHRoaXMuYSl9LGguUWI9ZnVuY3Rpb24oKXtRXyh0aGlzLmEpfSxJKEN1LCJMUG9ydC8xLzEiLDEzMDkpLEQoMzY5LDEsaGcsQzgpLGguSmM9ZnVuY3Rpb24odCl7dG8odGhpcyx0KX0saC5LYz1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PW5ldyBHKHRoaXMuYS5nKSxuZXcgdndlKHQpfSxJKEN1LCJMUG9ydC8yIiwzNjkpLEQoNzc2LDEsT2EsdndlKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gbChyZSh0aGlzLmEpLDE4KS5kfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIExjKHRoaXMuYSl9LGguUWI9ZnVuY3Rpb24oKXtRXyh0aGlzLmEpfSxJKEN1LCJMUG9ydC8yLzEiLDc3NiksRCgxMzAyLDEsaGcsTWV0KSxoLkpjPWZ1bmN0aW9uKHQpe3RvKHRoaXMsdCl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE4xKHRoaXMpfSxJKEN1LCJMUG9ydC9Db21iaW5lSXRlciIsMTMwMiksRCgyMDgsMSxPYSxOMSksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLlFiPWZ1bmN0aW9uKCl7YVplKCl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4gJF8odGhpcyl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gTGModGhpcy5hKT9yZSh0aGlzLmEpOnJlKHRoaXMuYil9LEkoQ3UsIkxQb3J0L0NvbWJpbmVJdGVyLzEiLDIwOCksRCgxMzAzLDEsTGQsSzIpLGguTGI9ZnVuY3Rpb24odCl7cmV0dXJuIExzdCh0KX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGtsKCksbCh0LDEyKS5nLmMubGVuZ3RoIT0wfSxJKEN1LCJMUG9ydC9sYW1iZGEkMCRUeXBlIiwxMzAzKSxEKDEzMDQsMSxMZCxKMyksaC5MYj1mdW5jdGlvbih0KXtyZXR1cm4gTXN0KHQpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5NYj1mdW5jdGlvbih0KXtyZXR1cm4ga2woKSxsKHQsMTIpLmUuYy5sZW5ndGghPTB9LEkoQ3UsIkxQb3J0L2xhbWJkYSQxJFR5cGUiLDEzMDQpLEQoMTMwNSwxLExkLEhKKSxoLkxiPWZ1bmN0aW9uKHQpe3JldHVybiBrbCgpLGwodCwxMikuaj09KEN0KCksUW4pfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5NYj1mdW5jdGlvbih0KXtyZXR1cm4ga2woKSxsKHQsMTIpLmo9PShDdCgpLFFuKX0sSShDdSwiTFBvcnQvbGFtYmRhJDIkVHlwZSIsMTMwNSksRCgxMzA2LDEsTGQsd20pLGguTGI9ZnVuY3Rpb24odCl7cmV0dXJuIGtsKCksbCh0LDEyKS5qPT0oQ3QoKSxhcil9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBrbCgpLGwodCwxMikuaj09KEN0KCksYXIpfSxJKEN1LCJMUG9ydC9sYW1iZGEkMyRUeXBlIiwxMzA2KSxEKDEzMDcsMSxMZCxWSiksaC5MYj1mdW5jdGlvbih0KXtyZXR1cm4ga2woKSxsKHQsMTIpLmo9PShDdCgpLERyKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGtsKCksbCh0LDEyKS5qPT0oQ3QoKSxEcil9LEkoQ3UsIkxQb3J0L2xhbWJkYSQ0JFR5cGUiLDEzMDcpLEQoMTMwOCwxLExkLFVKKSxoLkxiPWZ1bmN0aW9uKHQpe3JldHVybiBrbCgpLGwodCwxMikuaj09KEN0KCksZXIpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5NYj1mdW5jdGlvbih0KXtyZXR1cm4ga2woKSxsKHQsMTIpLmo9PShDdCgpLGVyKX0sSShDdSwiTFBvcnQvbGFtYmRhJDUkVHlwZSIsMTMwOCksRCgzMCwzMDUsezM6MSwyMDoxLDMwNToxLDMwOjEsOTY6MSwxMzc6MX0seXUpLGguSmM9ZnVuY3Rpb24odCl7dG8odGhpcyx0KX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgRyh0aGlzLmEpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIkxfIitnYyh0aGlzLmIuYix0aGlzLDApK1RiKHRoaXMuYSl9LEkoQ3UsIkxheWVyIiwzMCksRCgxMzMwLDEse30sVlFlKSxJKHYyLFIzdCwxMzMwKSxEKDEzMzQsMSx7fSxRNyksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gYmMobCh0LDg0KSl9LEkodjIsIkVsa0dyYXBoSW1wb3J0ZXIvMG1ldGhvZHJlZiRjb25uZWN0YWJsZVNoYXBlVG9Ob2RlJFR5cGUiLDEzMzQpLEQoMTMzNywxLHt9LHVTKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBiYyhsKHQsODQpKX0sSSh2MiwiRWxrR3JhcGhJbXBvcnRlci8xbWV0aG9kcmVmJGNvbm5lY3RhYmxlU2hhcGVUb05vZGUkVHlwZSIsMTMzNyksRCgxMzMxLDEsZnIsJFdlKSxoLkNkPWZ1bmN0aW9uKHQpe2wydCh0aGlzLmEsbCh0LDEyMykpfSxJKHYyLE1FZSwxMzMxKSxEKDEzMzIsMSxmcix6V2UpLGguQ2Q9ZnVuY3Rpb24odCl7bDJ0KHRoaXMuYSxsKHQsMTIzKSl9LEkodjIsajN0LDEzMzIpLEQoMTMzMywxLHt9LGxqKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYm4obnVsbCxuZXcga24oQTVlKGwodCw3NCkpLDE2KSl9LEkodjIsJDN0LDEzMzMpLEQoMTMzNSwxLHRpLHFXZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gSGxuKHRoaXMuYSxsKHQsMjcpKX0sSSh2Mix6M3QsMTMzNSksRCgxMzM2LDEse30sSDkpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyBrbihhcG4obCh0LDc0KSksMTYpKX0sSSh2MiwiRWxrR3JhcGhJbXBvcnRlci9sYW1iZGEkNSRUeXBlIiwxMzM2KSxEKDEzMzgsMSx0aSxIV2UpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIFZsbih0aGlzLmEsbCh0LDI3KSl9LEkodjIsIkVsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDckVHlwZSIsMTMzOCksRCgxMzM5LDEsdGksR0opLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIHlwbihsKHQsNzQpKX0sSSh2MiwiRWxrR3JhcGhJbXBvcnRlci9sYW1iZGEkOCRUeXBlIiwxMzM5KSxEKDEyOTcsMSx7fSxiOCk7dmFyIFI4dDtJKHYyLCJFbGtHcmFwaExheW91dFRyYW5zZmVycmVyIiwxMjk3KSxEKDEyOTgsMSx0aSxWV2UpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIElmbih0aGlzLmEsbCh0LDE4KSl9LEkodjIsIkVsa0dyYXBoTGF5b3V0VHJhbnNmZXJyZXIvbGFtYmRhJDAkVHlwZSIsMTI5OCksRCgxMjk5LDEsZnIsVVdlKSxoLkNkPWZ1bmN0aW9uKHQpe3NPKCksdnQodGhpcy5hLGwodCwxOCkpfSxJKHYyLCJFbGtHcmFwaExheW91dFRyYW5zZmVycmVyL2xhbWJkYSQxJFR5cGUiLDEyOTkpLEQoMTMwMCwxLHRpLEdXZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbWZuKHRoaXMuYSxsKHQsMTgpKX0sSSh2MiwiRWxrR3JhcGhMYXlvdXRUcmFuc2ZlcnJlci9sYW1iZGEkMiRUeXBlIiwxMzAwKSxEKDEzMDEsMSxmcixLV2UpLGguQ2Q9ZnVuY3Rpb24odCl7c08oKSx2dCh0aGlzLmEsbCh0LDE4KSl9LEkodjIsIkVsa0dyYXBoTGF5b3V0VHJhbnNmZXJyZXIvbGFtYmRhJDMkVHlwZSIsMTMwMSksRCg4MTksMSx7fSxpNGUpLEkocnIsIkJpTGlua2VkSGFzaE11bHRpTWFwIiw4MTkpLEQoMTU1MCwxLHRzLFY5KSxoLktmPWZ1bmN0aW9uKHQsbil7czNuKGwodCwzNiksbil9LEkocnIsIkNvbW1lbnROb2RlTWFyZ2luQ2FsY3VsYXRvciIsMTU1MCksRCgxNTUxLDEse30sS0opLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyBrbihsKHQsMzApLmEsMTYpKX0sSShyciwiQ29tbWVudE5vZGVNYXJnaW5DYWxjdWxhdG9yL2xhbWJkYSQwJFR5cGUiLDE1NTEpLEQoMTU1MiwxLGZyLFdKKSxoLkNkPWZ1bmN0aW9uKHQpe3NMbihsKHQsMTApKX0sSShyciwiQ29tbWVudE5vZGVNYXJnaW5DYWxjdWxhdG9yL2xhbWJkYSQxJFR5cGUiLDE1NTIpLEQoMTU1MywxLHRzLFlKKSxoLktmPWZ1bmN0aW9uKHQsbil7dVNuKGwodCwzNiksbil9LEkocnIsIkNvbW1lbnRQb3N0cHJvY2Vzc29yIiwxNTUzKSxEKDE1NTQsMSx0cyxYSiksaC5LZj1mdW5jdGlvbih0LG4pe0REbihsKHQsMzYpLG4pfSxJKHJyLCJDb21tZW50UHJlcHJvY2Vzc29yIiwxNTU0KSxEKDE1NTUsMSx0cyxRSiksaC5LZj1mdW5jdGlvbih0LG4pe1NDbihsKHQsMzYpLG4pfSxJKHJyLCJDb25zdHJhaW50c1Bvc3Rwcm9jZXNzb3IiLDE1NTUpLEQoMTU1NiwxLHRzLEpKKSxoLktmPWZ1bmN0aW9uKHQsbil7TzNuKGwodCwzNiksbil9LEkocnIsIkVkZ2VBbmRMYXllckNvbnN0cmFpbnRFZGdlUmV2ZXJzZXIiLDE1NTYpLEQoMTU1NywxLHRzLFpKKSxoLktmPWZ1bmN0aW9uKHQsbil7RTVuKGwodCwzNiksbil9LEkocnIsIkVuZExhYmVsUG9zdHByb2Nlc3NvciIsMTU1NyksRCgxNTU4LDEse30sZVopLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyBrbihsKHQsMzApLmEsMTYpKX0sSShyciwiRW5kTGFiZWxQb3N0cHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE1NTgpLEQoMTU1OSwxLHRpLHRaKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBSbW4obCh0LDEwKSl9LEkocnIsIkVuZExhYmVsUG9zdHByb2Nlc3Nvci9sYW1iZGEkMSRUeXBlIiwxNTU5KSxEKDE1NjAsMSxmcixuWiksaC5DZD1mdW5jdGlvbih0KXtkOG4obCh0LDEwKSl9LEkocnIsIkVuZExhYmVsUG9zdHByb2Nlc3Nvci9sYW1iZGEkMiRUeXBlIiwxNTYwKSxEKDE1NjEsMSx0cyxyWiksaC5LZj1mdW5jdGlvbih0LG4pe3RrbihsKHQsMzYpLG4pfSxJKHJyLCJFbmRMYWJlbFByZXByb2Nlc3NvciIsMTU2MSksRCgxNTYyLDEse30sckkpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyBrbihsKHQsMzApLmEsMTYpKX0sSShyciwiRW5kTGFiZWxQcmVwcm9jZXNzb3IvbGFtYmRhJDAkVHlwZSIsMTU2MiksRCgxNTYzLDEsZnIsbWl0KSxoLkNkPWZ1bmN0aW9uKHQpe25sbih0aGlzLmEsdGhpcy5iLHRoaXMuYyxsKHQsMTApKX0saC5hPTAsaC5iPTAsaC5jPSExLEkocnIsIkVuZExhYmVsUHJlcHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE1NjMpLEQoMTU2NCwxLHRpLGlaKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBxZShRKGwodCw3MiksKE50KCksamQpKSk9PT1xZSgoRjEoKSxyQykpfSxJKHJyLCJFbmRMYWJlbFByZXByb2Nlc3Nvci9sYW1iZGEkMiRUeXBlIiwxNTY0KSxEKDE1NjUsMSxmcixXV2UpLGguQ2Q9ZnVuY3Rpb24odCl7dWkodGhpcy5hLGwodCw3MikpfSxJKHJyLCJFbmRMYWJlbFByZXByb2Nlc3Nvci9sYW1iZGEkMyRUeXBlIiwxNTY1KSxEKDE1NjYsMSx0aSxzWiksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gcWUoUShsKHQsNzIpLChOdCgpLGpkKSkpPT09cWUoKEYxKCksXzQpKX0sSShyciwiRW5kTGFiZWxQcmVwcm9jZXNzb3IvbGFtYmRhJDQkVHlwZSIsMTU2NiksRCgxNTY3LDEsZnIsWVdlKSxoLkNkPWZ1bmN0aW9uKHQpe3VpKHRoaXMuYSxsKHQsNzIpKX0sSShyciwiRW5kTGFiZWxQcmVwcm9jZXNzb3IvbGFtYmRhJDUkVHlwZSIsMTU2NyksRCgxNjE1LDEsdHMsSHJlKSxoLktmPWZ1bmN0aW9uKHQsbil7azRuKGwodCwzNiksbil9O3ZhciBqOHQ7SShyciwiRW5kTGFiZWxTb3J0ZXIiLDE2MTUpLEQoMTYxNiwxLGlpLGxTKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHQ2bihsKHQsNDY2KSxsKG4sNDY2KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShyciwiRW5kTGFiZWxTb3J0ZXIvMSIsMTYxNiksRCg0NjYsMSx7NDY2OjF9LEhhdCksSShyciwiRW5kTGFiZWxTb3J0ZXIvTGFiZWxHcm91cCIsNDY2KSxEKDE2MTcsMSx7fSxoaiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gaU8oKSxuZXcgYm4obnVsbCxuZXcga24obCh0LDMwKS5hLDE2KSl9LEkocnIsIkVuZExhYmVsU29ydGVyL2xhbWJkYSQwJFR5cGUiLDE2MTcpLEQoMTYxOCwxLHRpLEo3KSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBpTygpLGwodCwxMCkuaz09KFpuKCksUHMpfSxJKHJyLCJFbmRMYWJlbFNvcnRlci9sYW1iZGEkMSRUeXBlIiwxNjE4KSxEKDE2MTksMSxmcixhWiksaC5DZD1mdW5jdGlvbih0KXtwOW4obCh0LDEwKSl9LEkocnIsIkVuZExhYmVsU29ydGVyL2xhbWJkYSQyJFR5cGUiLDE2MTkpLEQoMTYyMCwxLHRpLG9aKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBpTygpLHFlKFEobCh0LDcyKSwoTnQoKSxqZCkpKT09PXFlKChGMSgpLF80KSl9LEkocnIsIkVuZExhYmVsU29ydGVyL2xhbWJkYSQzJFR5cGUiLDE2MjApLEQoMTYyMSwxLHRpLGNaKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBpTygpLHFlKFEobCh0LDcyKSwoTnQoKSxqZCkpKT09PXFlKChGMSgpLHJDKSl9LEkocnIsIkVuZExhYmVsU29ydGVyL2xhbWJkYSQ0JFR5cGUiLDE2MjEpLEQoMTU2OCwxLHRzLHVaKSxoLktmPWZ1bmN0aW9uKHQsbil7eUxuKHRoaXMsbCh0LDM2KSl9LGguYj0wLGguYz0wLEkocnIsIkZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IiLDE1NjgpLEQoMTU2OSwxLHt9LGxaKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYm4obnVsbCxuZXcga24obCh0LDMwKS5hLDE2KSl9LEkocnIsIkZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IvbGFtYmRhJDAkVHlwZSIsMTU2OSksRCgxNTcwLDEse30saFMpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyB2dyhuZXcgaHIoZHIocXMobCh0LDEwKSkuYS5LYygpLG5ldyBqKSkpKX0sSShyciwiRmluYWxTcGxpbmVCZW5kcG9pbnRzQ2FsY3VsYXRvci9sYW1iZGEkMSRUeXBlIiwxNTcwKSxEKDE1NzEsMSx0aSxpSSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4hRG8obCh0LDE4KSl9LEkocnIsIkZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IvbGFtYmRhJDIkVHlwZSIsMTU3MSksRCgxNTcyLDEsdGksZmopLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIG5zKGwodCwxOCksKGZ0KCksZnYpKX0sSShyciwiRmluYWxTcGxpbmVCZW5kcG9pbnRzQ2FsY3VsYXRvci9sYW1iZGEkMyRUeXBlIiwxNTcyKSxEKDE1NzMsMSxmcixYV2UpLGguQ2Q9ZnVuY3Rpb24odCl7TF9uKHRoaXMuYSxsKHQsMTMxKSl9LEkocnIsIkZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IvbGFtYmRhJDQkVHlwZSIsMTU3MyksRCgxNTc0LDEsZnIsaDUpLGguQ2Q9ZnVuY3Rpb24odCl7Sk4obCh0LDE4KS5hKX0sSShyciwiRmluYWxTcGxpbmVCZW5kcG9pbnRzQ2FsY3VsYXRvci9sYW1iZGEkNSRUeXBlIiwxNTc0KSxEKDgwMywxLHRzLHd3ZSksaC5LZj1mdW5jdGlvbih0LG4pe2RNbih0aGlzLGwodCwzNiksbil9LEkocnIsIkdyYXBoVHJhbnNmb3JtZXIiLDgwMyksRCg1MTcsMjIsezM6MSwzNDoxLDIyOjEsNTE3OjF9LEkzZSk7dmFyIGgxZSxkQiwkOHQ9RnIocnIsIkdyYXBoVHJhbnNmb3JtZXIvTW9kZSIsNTE3LEhyLHFwbixFMW4pLHo4dDtEKDE1NzUsMSx0cyxmNSksaC5LZj1mdW5jdGlvbih0LG4pe1BUbihsKHQsMzYpLG4pfSxJKHJyLCJIaWVyYXJjaGljYWxOb2RlUmVzaXppbmdQcm9jZXNzb3IiLDE1NzUpLEQoMTU3NiwxLHRzLGhaKSxoLktmPWZ1bmN0aW9uKHQsbil7ZTNuKGwodCwzNiksbil9LEkocnIsIkhpZXJhcmNoaWNhbFBvcnRDb25zdHJhaW50UHJvY2Vzc29yIiwxNTc2KSxEKDE1NzcsMSxpaSx0MCksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBrNm4obCh0LDEwKSxsKG4sMTApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJyLCJIaWVyYXJjaGljYWxQb3J0Q29uc3RyYWludFByb2Nlc3Nvci9Ob2RlQ29tcGFyYXRvciIsMTU3NyksRCgxNTc4LDEsdHMsWjcpLGguS2Y9ZnVuY3Rpb24odCxuKXtFQW4obCh0LDM2KSxuKX0sSShyciwiSGllcmFyY2hpY2FsUG9ydER1bW15U2l6ZVByb2Nlc3NvciIsMTU3OCksRCgxNTc5LDEsdHMsZlopLGguS2Y9ZnVuY3Rpb24odCxuKXtPU24odGhpcyxsKHQsMzYpLG4pfSxoLmE9MCxJKHJyLCJIaWVyYXJjaGljYWxQb3J0T3J0aG9nb25hbEVkZ2VSb3V0ZXIiLDE1NzkpLEQoMTU4MCwxLGlpLFU5KSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFBobihsKHQsMTApLGwobiwxMCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkocnIsIkhpZXJhcmNoaWNhbFBvcnRPcnRob2dvbmFsRWRnZVJvdXRlci8xIiwxNTgwKSxEKDE1ODEsMSxpaSxXZCksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiB6dm4obCh0LDEwKSxsKG4sMTApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJyLCJIaWVyYXJjaGljYWxQb3J0T3J0aG9nb25hbEVkZ2VSb3V0ZXIvMiIsMTU4MSksRCgxNTgyLDEsdHMsZFopLGguS2Y9ZnVuY3Rpb24odCxuKXtYeG4obCh0LDM2KSxuKX0sSShyciwiSGllcmFyY2hpY2FsUG9ydFBvc2l0aW9uUHJvY2Vzc29yIiwxNTgyKSxEKDE1ODMsMSx0cyxLdiksaC5LZj1mdW5jdGlvbih0LG4pe2ZJbih0aGlzLGwodCwzNikpfSxoLmE9MCxoLmM9MDt2YXIgQ0ssU0s7SShyciwiSGlnaERlZ3JlZU5vZGVMYXllcmluZ1Byb2Nlc3NvciIsMTU4MyksRCg1ODAsMSx7NTgwOjF9LGdaKSxoLmI9LTEsaC5kPS0xLEkocnIsIkhpZ2hEZWdyZWVOb2RlTGF5ZXJpbmdQcm9jZXNzb3IvSGlnaERlZ3JlZU5vZGVJbmZvcm1hdGlvbiIsNTgwKSxEKDE1ODQsMSx7fSxwWiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gT08oKSxrYShsKHQsMTApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LEkocnIsIkhpZ2hEZWdyZWVOb2RlTGF5ZXJpbmdQcm9jZXNzb3IvbGFtYmRhJDAkVHlwZSIsMTU4NCksRCgxNTg1LDEse30sZGopLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIE9PKCkscXMobCh0LDEwKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxJKHJyLCJIaWdoRGVncmVlTm9kZUxheWVyaW5nUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE1ODUpLEQoMTU5MSwxLHRzLGJaKSxoLktmPWZ1bmN0aW9uKHQsbil7cEFuKHRoaXMsbCh0LDM2KSxuKX0sSShyciwiSHlwZXJlZGdlRHVtbXlNZXJnZXIiLDE1OTEpLEQoODA0LDEse30sdzRlKSxoLmE9ITEsaC5iPSExLGguYz0hMSxJKHJyLCJIeXBlcmVkZ2VEdW1teU1lcmdlci9NZXJnZVN0YXRlIiw4MDQpLEQoMTU5MiwxLHt9LGZTKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYm4obnVsbCxuZXcga24obCh0LDMwKS5hLDE2KSl9LEkocnIsIkh5cGVyZWRnZUR1bW15TWVyZ2VyL2xhbWJkYSQwJFR5cGUiLDE1OTIpLEQoMTU5MywxLHt9LGRTKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYm4obnVsbCxuZXcga24obCh0LDEwKS5qLDE2KSl9LEkocnIsIkh5cGVyZWRnZUR1bW15TWVyZ2VyL2xhbWJkYSQxJFR5cGUiLDE1OTMpLEQoMTU5NCwxLGZyLGdqKSxoLkNkPWZ1bmN0aW9uKHQpe2wodCwxMikucD0tMX0sSShyciwiSHlwZXJlZGdlRHVtbXlNZXJnZXIvbGFtYmRhJDIkVHlwZSIsMTU5NCksRCgxNTk1LDEsdHMsc0kpLGguS2Y9ZnVuY3Rpb24odCxuKXtkQW4obCh0LDM2KSxuKX0sSShyciwiSHlwZXJub2Rlc1Byb2Nlc3NvciIsMTU5NSksRCgxNTk2LDEsdHMsZTgpLGguS2Y9ZnVuY3Rpb24odCxuKXtrQW4obCh0LDM2KSxuKX0sSShyciwiSW5MYXllckNvbnN0cmFpbnRQcm9jZXNzb3IiLDE1OTYpLEQoMTU5NywxLHRzLG1aKSxoLktmPWZ1bmN0aW9uKHQsbil7cDNuKGwodCwzNiksbil9LEkocnIsIklubmVybW9zdE5vZGVNYXJnaW5DYWxjdWxhdG9yIiwxNTk3KSxEKDE1OTgsMSx0cyxwaiksaC5LZj1mdW5jdGlvbih0LG4pe19Ebih0aGlzLGwodCwzNikpfSxoLmE9aWEsaC5iPWlhLGguYz1ncyxoLmQ9Z3M7dmFyIGtPbj1JKHJyLCJJbnRlcmFjdGl2ZUV4dGVybmFsUG9ydFBvc2l0aW9uZXIiLDE1OTgpO0QoMTU5OSwxLHt9LGJqKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMTgpLmQuaX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LEkocnIsIkludGVyYWN0aXZlRXh0ZXJuYWxQb3J0UG9zaXRpb25lci9sYW1iZGEkMCRUeXBlIiwxNTk5KSxEKDE2MDAsMSx7fSxRV2UpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIEJobih0aGlzLmEsR2UodCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0sSShyciwiSW50ZXJhY3RpdmVFeHRlcm5hbFBvcnRQb3NpdGlvbmVyL2xhbWJkYSQxJFR5cGUiLDE2MDApLEQoMTYwMSwxLHt9LHZaKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMTgpLmMuaX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LEkocnIsIkludGVyYWN0aXZlRXh0ZXJuYWxQb3J0UG9zaXRpb25lci9sYW1iZGEkMiRUeXBlIiwxNjAxKSxEKDE2MDIsMSx7fSxKV2UpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIEZobih0aGlzLmEsR2UodCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0sSShyciwiSW50ZXJhY3RpdmVFeHRlcm5hbFBvcnRQb3NpdGlvbmVyL2xhbWJkYSQzJFR5cGUiLDE2MDIpLEQoMTYwMywxLHt9LFpXZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gTmZuKHRoaXMuYSxHZSh0KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxJKHJyLCJJbnRlcmFjdGl2ZUV4dGVybmFsUG9ydFBvc2l0aW9uZXIvbGFtYmRhJDQkVHlwZSIsMTYwMyksRCgxNjA0LDEse30sZVllKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBQZm4odGhpcy5hLEdlKHQpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LEkocnIsIkludGVyYWN0aXZlRXh0ZXJuYWxQb3J0UG9zaXRpb25lci9sYW1iZGEkNSRUeXBlIiwxNjA0KSxEKDgxLDIyLHszOjEsMzQ6MSwyMjoxLDgxOjEsMTk2OjF9LFdzKSxoLmRnPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZyl7Y2FzZSAxNTpyZXR1cm4gbmV3IFVqO2Nhc2UgMjI6cmV0dXJuIG5ldyBEZWU7Y2FzZSA0NzpyZXR1cm4gbmV3IE5lZTtjYXNlIDI4OmNhc2UgMzU6cmV0dXJuIG5ldyBDWjtjYXNlIDMyOnJldHVybiBuZXcgVjk7Y2FzZSA0MjpyZXR1cm4gbmV3IFlKO2Nhc2UgMTpyZXR1cm4gbmV3IFhKO2Nhc2UgNDE6cmV0dXJuIG5ldyBRSjtjYXNlIDU2OnJldHVybiBuZXcgd3dlKChkRSgpLGRCKSk7Y2FzZSAwOnJldHVybiBuZXcgd3dlKChkRSgpLGgxZSkpO2Nhc2UgMjpyZXR1cm4gbmV3IEpKO2Nhc2UgNTQ6cmV0dXJuIG5ldyBaSjtjYXNlIDMzOnJldHVybiBuZXcgclo7Y2FzZSA1MTpyZXR1cm4gbmV3IHVaO2Nhc2UgNTU6cmV0dXJuIG5ldyBmNTtjYXNlIDEzOnJldHVybiBuZXcgaFo7Y2FzZSAzODpyZXR1cm4gbmV3IFo3O2Nhc2UgNDQ6cmV0dXJuIG5ldyBmWjtjYXNlIDQwOnJldHVybiBuZXcgZFo7Y2FzZSA5OnJldHVybiBuZXcgS3Y7Y2FzZSA0OTpyZXR1cm4gbmV3IG5ydDtjYXNlIDM3OnJldHVybiBuZXcgYlo7Y2FzZSA0MzpyZXR1cm4gbmV3IHNJO2Nhc2UgMjc6cmV0dXJuIG5ldyBlODtjYXNlIDMwOnJldHVybiBuZXcgbVo7Y2FzZSAzOnJldHVybiBuZXcgcGo7Y2FzZSAxODpyZXR1cm4gbmV3IHlaO2Nhc2UgMjk6cmV0dXJuIG5ldyB4WjtjYXNlIDU6cmV0dXJuIG5ldyBmaztjYXNlIDUwOnJldHVybiBuZXcgd1o7Y2FzZSAzNDpyZXR1cm4gbmV3IHN6O2Nhc2UgMzY6cmV0dXJuIG5ldyBkNTtjYXNlIDUyOnJldHVybiBuZXcgSHJlO2Nhc2UgMTE6cmV0dXJuIG5ldyBHOTtjYXNlIDc6cmV0dXJuIG5ldyBWcmU7Y2FzZSAzOTpyZXR1cm4gbmV3IGFJO2Nhc2UgNDU6cmV0dXJuIG5ldyBaMztjYXNlIDE2OnJldHVybiBuZXcgSzk7Y2FzZSAxMDpyZXR1cm4gbmV3IFdldDtjYXNlIDQ4OnJldHVybiBuZXcgbWo7Y2FzZSAyMTpyZXR1cm4gbmV3IG9JO2Nhc2UgMjM6cmV0dXJuIG5ldyBXaWUoKEl3KCksb00pKTtjYXNlIDg6cmV0dXJuIG5ldyBjSTtjYXNlIDEyOnJldHVybiBuZXcgX1o7Y2FzZSA0OnJldHVybiBuZXcgdUk7Y2FzZSAxOTpyZXR1cm4gbmV3IGN6O2Nhc2UgMTc6cmV0dXJuIG5ldyBJWjtjYXNlIDUzOnJldHVybiBuZXcgT1o7Y2FzZSA2OnJldHVybiBuZXcgVGo7Y2FzZSAyNTpyZXR1cm4gbmV3IEtRZTtjYXNlIDQ2OnJldHVybiBuZXcgRlo7Y2FzZSAzMTpyZXR1cm4gbmV3IFZydDtjYXNlIDE0OnJldHVybiBuZXcgVVo7Y2FzZSAyNjpyZXR1cm4gbmV3IEZlZTtjYXNlIDIwOnJldHVybiBuZXcgQWo7Y2FzZSAyNDpyZXR1cm4gbmV3IFdpZSgoSXcoKSxNVykpO2RlZmF1bHQ6dGhyb3cgdWUobmV3IFluKEZoZSsodGhpcy5mIT1udWxsP3RoaXMuZjoiIit0aGlzLmcpKSl9fTt2YXIgU0FlLF9BZSxBQWUsTEFlLE1BZSxEQWUsSUFlLE9BZSxOQWUsUEFlLEQ2LF9LLEFLLEJBZSxGQWUsUkFlLGpBZSwkQWUsekFlLHFBZSx6TCxIQWUsVkFlLFVBZSxHQWUsS0FlLGYxZSxMSyxNSyxXQWUsREssSUssT0ssTFQsdTQsbDQsWUFlLE5LLFBLLFhBZSxCSyxGSyxRQWUsSkFlLFpBZSxlTGUsUkssZDFlLGdCLGpLLCRLLHpLLHFLLHRMZSxuTGUsckxlLGlMZSxFT249RnIocnIsUmhlLDgxLEhyLHJidCxrMG4pLHE4dDtEKDE2MDUsMSx0cyx5WiksaC5LZj1mdW5jdGlvbih0LG4pe0NEbihsKHQsMzYpLG4pfSxJKHJyLCJJbnZlcnRlZFBvcnRQcm9jZXNzb3IiLDE2MDUpLEQoMTYwNiwxLHRzLHhaKSxoLktmPWZ1bmN0aW9uKHQsbil7eF9uKGwodCwzNiksbil9LEkocnIsIkxhYmVsQW5kTm9kZVNpemVQcm9jZXNzb3IiLDE2MDYpLEQoMTYwNywxLHRpLGtaKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMTApLms9PShabigpLFBzKX0sSShyciwiTGFiZWxBbmROb2RlU2l6ZVByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNjA3KSxEKDE2MDgsMSx0aSxFWiksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDEwKS5rPT0oWm4oKSxVcyl9LEkocnIsIkxhYmVsQW5kTm9kZVNpemVQcm9jZXNzb3IvbGFtYmRhJDEkVHlwZSIsMTYwOCksRCgxNjA5LDEsZnIsdml0KSxoLkNkPWZ1bmN0aW9uKHQpe3Jsbih0aGlzLmIsdGhpcy5hLHRoaXMuYyxsKHQsMTApKX0saC5hPSExLGguYz0hMSxJKHJyLCJMYWJlbEFuZE5vZGVTaXplUHJvY2Vzc29yL2xhbWJkYSQyJFR5cGUiLDE2MDkpLEQoMTYxMCwxLHRzLGZrKSxoLktmPWZ1bmN0aW9uKHQsbil7UU1uKGwodCwzNiksbil9O3ZhciBIOHQ7SShyciwiTGFiZWxEdW1teUluc2VydGVyIiwxNjEwKSxEKDE2MTEsMSxMZCxZZCksaC5MYj1mdW5jdGlvbih0KXtyZXR1cm4gcWUoUShsKHQsNzIpLChOdCgpLGpkKSkpPT09cWUoKEYxKCksbkMpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIHFlKFEobCh0LDcyKSwoTnQoKSxqZCkpKT09PXFlKChGMSgpLG5DKSl9LEkocnIsIkxhYmVsRHVtbXlJbnNlcnRlci8xIiwxNjExKSxEKDE2MTIsMSx0cyx3WiksaC5LZj1mdW5jdGlvbih0LG4pe2pNbihsKHQsMzYpLG4pfSxJKHJyLCJMYWJlbER1bW15UmVtb3ZlciIsMTYxMiksRCgxNjEzLDEsdGksVXYpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIFJ0KEJ0KFEobCh0LDcyKSwoTnQoKSx0ZGUpKSkpfSxJKHJyLCJMYWJlbER1bW15UmVtb3Zlci9sYW1iZGEkMCRUeXBlIiwxNjEzKSxEKDEzNzgsMSx0cyxzeiksaC5LZj1mdW5jdGlvbih0LG4pe0RNbih0aGlzLGwodCwzNiksbil9LGguYT1udWxsO3ZhciBnMWU7SShyciwiTGFiZWxEdW1teVN3aXRjaGVyIiwxMzc4KSxEKDI5MywxLHsyOTM6MX0sbm10KSxoLmM9MCxoLmQ9bnVsbCxoLmY9MCxJKHJyLCJMYWJlbER1bW15U3dpdGNoZXIvTGFiZWxEdW1teUluZm8iLDI5MyksRCgxMzc5LDEse30sVFopLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIGx4KCksbmV3IGJuKG51bGwsbmV3IGtuKGwodCwzMCkuYSwxNikpfSxJKHJyLCJMYWJlbER1bW15U3dpdGNoZXIvbGFtYmRhJDAkVHlwZSIsMTM3OSksRCgxMzgwLDEsdGksZ1MpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGx4KCksbCh0LDEwKS5rPT0oWm4oKSxjdSl9LEkocnIsIkxhYmVsRHVtbXlTd2l0Y2hlci9sYW1iZGEkMSRUeXBlIiwxMzgwKSxEKDEzODEsMSx7fSx0WWUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIHZmbih0aGlzLmEsbCh0LDEwKSl9LEkocnIsIkxhYmVsRHVtbXlTd2l0Y2hlci9sYW1iZGEkMiRUeXBlIiwxMzgxKSxEKDEzODIsMSxmcixuWWUpLGguQ2Q9ZnVuY3Rpb24odCl7UmduKHRoaXMuYSxsKHQsMjkzKSl9LEkocnIsIkxhYmVsRHVtbXlTd2l0Y2hlci9sYW1iZGEkMyRUeXBlIiwxMzgyKSxEKDEzODMsMSxpaSxwUyksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBjZ24obCh0LDI5MyksbChuLDI5MykpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkocnIsIkxhYmVsRHVtbXlTd2l0Y2hlci9sYW1iZGEkNCRUeXBlIiwxMzgzKSxEKDgwMiwxLHRzLENaKSxoLktmPWZ1bmN0aW9uKHQsbil7eXZuKGwodCwzNiksbil9LEkocnIsIkxhYmVsTWFuYWdlbWVudFByb2Nlc3NvciIsODAyKSxEKDE2MTQsMSx0cyxkNSksaC5LZj1mdW5jdGlvbih0LG4pe1FDbihsKHQsMzYpLG4pfSxJKHJyLCJMYWJlbFNpZGVTZWxlY3RvciIsMTYxNCksRCgxNjIyLDEsdHMsRzkpLGguS2Y9ZnVuY3Rpb24odCxuKXtSQW4obCh0LDM2KSxuKX0sSShyciwiTGF5ZXJDb25zdHJhaW50UG9zdHByb2Nlc3NvciIsMTYyMiksRCgxNjIzLDEsdHMsVnJlKSxoLktmPWZ1bmN0aW9uKHQsbil7T0VuKGwodCwzNiksbil9O3ZhciBzTGU7SShyciwiTGF5ZXJDb25zdHJhaW50UHJlcHJvY2Vzc29yIiwxNjIzKSxEKDM3MSwyMix7MzoxLDM0OjEsMjI6MSwzNzE6MX0sZ3EpO3ZhciBwQixISyxWSyxwMWUsVjh0PUZyKHJyLCJMYXllckNvbnN0cmFpbnRQcmVwcm9jZXNzb3IvSGlkZGVuTm9kZUNvbm5lY3Rpb25zIiwzNzEsSHIsSmJuLEUwbiksVTh0O0QoMTYyNCwxLHRzLGFJKSxoLktmPWZ1bmN0aW9uKHQsbil7dE1uKGwodCwzNiksbil9LEkocnIsIkxheWVyU2l6ZUFuZEdyYXBoSGVpZ2h0Q2FsY3VsYXRvciIsMTYyNCksRCgxNjI1LDEsdHMsWjMpLGguS2Y9ZnVuY3Rpb24odCxuKXtCVG4obCh0LDM2KSxuKX0sSShyciwiTG9uZ0VkZ2VKb2luZXIiLDE2MjUpLEQoMTYyNiwxLHRzLEs5KSxoLktmPWZ1bmN0aW9uKHQsbil7RExuKGwodCwzNiksbil9LEkocnIsIkxvbmdFZGdlU3BsaXR0ZXIiLDE2MjYpLEQoMTYyNywxLHRzLFdldCksaC5LZj1mdW5jdGlvbih0LG4pe2ZEbih0aGlzLGwodCwzNiksbil9LGguZT0wLGguZj0wLGguaj0wLGguaz0wLGgubj0wLGgubz0wO3ZhciBHOHQsSzh0O0kocnIsIk5vZGVQcm9tb3Rpb24iLDE2MjcpLEQoMTYyOCwxLGlpLFNaKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEN5bihsKHQsMTApLGwobiwxMCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkocnIsIk5vZGVQcm9tb3Rpb24vMSIsMTYyOCksRCgxNjI5LDEsaWksYlMpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gU3luKGwodCwxMCksbChuLDEwKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShyciwiTm9kZVByb21vdGlvbi8yIiwxNjI5KSxEKDE2MzAsMSx7fSxoZCksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDQyKSxZcSgpLEhuKCksITB9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxJKHJyLCJOb2RlUHJvbW90aW9uL2xhbWJkYSQwJFR5cGUiLDE2MzApLEQoMTYzMSwxLHt9LGFZZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4geDJuKHRoaXMuYSxsKHQsNDIpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguYT0wLEkocnIsIk5vZGVQcm9tb3Rpb24vbGFtYmRhJDEkVHlwZSIsMTYzMSksRCgxNjMyLDEse30sb1llKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiB5Mm4odGhpcy5hLGwodCw0MikpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5hPTAsSShyciwiTm9kZVByb21vdGlvbi9sYW1iZGEkMiRUeXBlIiwxNjMyKSxEKDE2MzMsMSx0cyxtaiksaC5LZj1mdW5jdGlvbih0LG4pe2FJbihsKHQsMzYpLG4pfSxJKHJyLCJOb3J0aFNvdXRoUG9ydFBvc3Rwcm9jZXNzb3IiLDE2MzMpLEQoMTYzNCwxLHRzLG9JKSxoLktmPWZ1bmN0aW9uKHQsbil7JERuKGwodCwzNiksbil9LEkocnIsIk5vcnRoU291dGhQb3J0UHJlcHJvY2Vzc29yIiwxNjM0KSxEKDE2MzUsMSxpaSxXOSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiAkM24obCh0LDEyKSxsKG4sMTIpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJyLCJOb3J0aFNvdXRoUG9ydFByZXByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNjM1KSxEKDE2MzYsMSx0cyxjSSksaC5LZj1mdW5jdGlvbih0LG4pe25BbihsKHQsMzYpLG4pfSxJKHJyLCJQYXJ0aXRpb25NaWRwcm9jZXNzb3IiLDE2MzYpLEQoMTYzNywxLHRpLHZqKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBucyhsKHQsMTApLChOdCgpLEhUKSl9LEkocnIsIlBhcnRpdGlvbk1pZHByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNjM3KSxEKDE2MzgsMSxmcixjWWUpLGguQ2Q9ZnVuY3Rpb24odCl7eHBuKHRoaXMuYSxsKHQsMTApKX0sSShyciwiUGFydGl0aW9uTWlkcHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE2MzgpLEQoMTYzOSwxLHRzLF9aKSxoLktmPWZ1bmN0aW9uKHQsbil7ckNuKGwodCwzNiksbil9LEkocnIsIlBhcnRpdGlvblBvc3Rwcm9jZXNzb3IiLDE2MzkpLEQoMTY0MCwxLHRzLHVJKSxoLktmPWZ1bmN0aW9uKHQsbil7bUVuKGwodCwzNiksbil9LEkocnIsIlBhcnRpdGlvblByZXByb2Nlc3NvciIsMTY0MCksRCgxNjQxLDEsdGksQVopLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIG5zKGwodCwxMCksKE50KCksSFQpKX0sSShyciwiUGFydGl0aW9uUHJlcHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE2NDEpLEQoMTY0MiwxLHt9LExaKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYm4obnVsbCxuZXcgdncobmV3IGhyKGRyKHFzKGwodCwxMCkpLmEuS2MoKSxuZXcgaikpKSl9LEkocnIsIlBhcnRpdGlvblByZXByb2Nlc3Nvci9sYW1iZGEkMSRUeXBlIiwxNjQyKSxEKDE2NDMsMSx0aSx3aiksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbzZuKGwodCwxOCkpfSxJKHJyLCJQYXJ0aXRpb25QcmVwcm9jZXNzb3IvbGFtYmRhJDIkVHlwZSIsMTY0MyksRCgxNjQ0LDEsZnIsdDgpLGguQ2Q9ZnVuY3Rpb24odCl7cnluKGwodCwxOCkpfSxJKHJyLCJQYXJ0aXRpb25QcmVwcm9jZXNzb3IvbGFtYmRhJDMkVHlwZSIsMTY0NCksRCgxNjQ1LDEsdHMsY3opLGguS2Y9ZnVuY3Rpb24odCxuKXtCX24obCh0LDM2KSxuKX07dmFyIGFMZSxXOHQsWTh0LFg4dCxvTGUsY0xlO0kocnIsIlBvcnRMaXN0U29ydGVyIiwxNjQ1KSxEKDE2NDgsMSxpaSx5aiksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBLY3QobCh0LDEyKSxsKG4sMTIpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJyLCJQb3J0TGlzdFNvcnRlci9sYW1iZGEkMCRUeXBlIiwxNjQ4KSxEKDE2NTAsMSxpaSxuOCksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBTbXQobCh0LDEyKSxsKG4sMTIpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHJyLCJQb3J0TGlzdFNvcnRlci9sYW1iZGEkMSRUeXBlIiwxNjUwKSxEKDE2NDYsMSx7fSxNWiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gVEUoKSxsKHQsMTIpLmV9LEkocnIsIlBvcnRMaXN0U29ydGVyL2xhbWJkYSQyJFR5cGUiLDE2NDYpLEQoMTY0NywxLHt9LGxJKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBURSgpLGwodCwxMikuZ30sSShyciwiUG9ydExpc3RTb3J0ZXIvbGFtYmRhJDMkVHlwZSIsMTY0NyksRCgxNjQ5LDEsaWksRFopLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gRDduKGwodCwxMiksbChuLDEyKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShyciwiUG9ydExpc3RTb3J0ZXIvbGFtYmRhJDQkVHlwZSIsMTY0OSksRCgxNjUxLDEsdHMsSVopLGguS2Y9ZnVuY3Rpb24odCxuKXtHRW4obCh0LDM2KSxuKX0sSShyciwiUG9ydFNpZGVQcm9jZXNzb3IiLDE2NTEpLEQoMTY1MiwxLHRzLE9aKSxoLktmPWZ1bmN0aW9uKHQsbil7S1NuKGwodCwzNiksbil9LEkocnIsIlJldmVyc2VkRWRnZVJlc3RvcmVyIiwxNjUyKSxEKDE2NTcsMSx0cyxLUWUpLGguS2Y9ZnVuY3Rpb24odCxuKXtkN24odGhpcyxsKHQsMzYpLG4pfSxJKHJyLCJTZWxmTG9vcFBvcnRSZXN0b3JlciIsMTY1NyksRCgxNjU4LDEse30sTlopLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyBrbihsKHQsMzApLmEsMTYpKX0sSShyciwiU2VsZkxvb3BQb3J0UmVzdG9yZXIvbGFtYmRhJDAkVHlwZSIsMTY1OCksRCgxNjU5LDEsdGkseGopLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMCkuaz09KFpuKCksUHMpfSxJKHJyLCJTZWxmTG9vcFBvcnRSZXN0b3Jlci9sYW1iZGEkMSRUeXBlIiwxNjU5KSxEKDE2NjAsMSx0aSxQWiksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbnMobCh0LDEwKSwoZnQoKSxoMykpfSxJKHJyLCJTZWxmTG9vcFBvcnRSZXN0b3Jlci9sYW1iZGEkMiRUeXBlIiwxNjYwKSxEKDE2NjEsMSx7fSxCWiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbChRKGwodCwxMCksKGZ0KCksaDMpKSwzMzcpfSxJKHJyLCJTZWxmTG9vcFBvcnRSZXN0b3Jlci9sYW1iZGEkMyRUeXBlIiwxNjYxKSxEKDE2NjIsMSxmcixpWWUpLGguQ2Q9ZnVuY3Rpb24odCl7QTluKHRoaXMuYSxsKHQsMzM3KSl9LEkocnIsIlNlbGZMb29wUG9ydFJlc3RvcmVyL2xhbWJkYSQ0JFR5cGUiLDE2NjIpLEQoODA1LDEsZnIsa2opLGguQ2Q9ZnVuY3Rpb24odCl7ejluKGwodCwxMDUpKX0sSShyciwiU2VsZkxvb3BQb3J0UmVzdG9yZXIvbGFtYmRhJDUkVHlwZSIsODA1KSxEKDE2NjMsMSx0cyxGWiksaC5LZj1mdW5jdGlvbih0LG4pe3c2bihsKHQsMzYpLG4pfSxJKHJyLCJTZWxmTG9vcFBvc3RQcm9jZXNzb3IiLDE2NjMpLEQoMTY2NCwxLHt9LFJaKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYm4obnVsbCxuZXcga24obCh0LDMwKS5hLDE2KSl9LEkocnIsIlNlbGZMb29wUG9zdFByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNjY0KSxEKDE2NjUsMSx0aSxqWiksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDEwKS5rPT0oWm4oKSxQcyl9LEkocnIsIlNlbGZMb29wUG9zdFByb2Nlc3Nvci9sYW1iZGEkMSRUeXBlIiwxNjY1KSxEKDE2NjYsMSx0aSwkWiksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbnMobCh0LDEwKSwoZnQoKSxoMykpfSxJKHJyLCJTZWxmTG9vcFBvc3RQcm9jZXNzb3IvbGFtYmRhJDIkVHlwZSIsMTY2NiksRCgxNjY3LDEsZnIsRWopLGguQ2Q9ZnVuY3Rpb24odCl7TThuKGwodCwxMCkpfSxJKHJyLCJTZWxmTG9vcFBvc3RQcm9jZXNzb3IvbGFtYmRhJDMkVHlwZSIsMTY2NyksRCgxNjY4LDEse30selopLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyBrbihsKHQsMTA1KS5mLDEpKX0sSShyciwiU2VsZkxvb3BQb3N0UHJvY2Vzc29yL2xhbWJkYSQ0JFR5cGUiLDE2NjgpLEQoMTY2OSwxLGZyLHJZZSksaC5DZD1mdW5jdGlvbih0KXtubW4odGhpcy5hLGwodCwzNDApKX0sSShyciwiU2VsZkxvb3BQb3N0UHJvY2Vzc29yL2xhbWJkYSQ1JFR5cGUiLDE2NjkpLEQoMTY3MCwxLHRpLHFaKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiEhbCh0LDEwNSkuaX0sSShyciwiU2VsZkxvb3BQb3N0UHJvY2Vzc29yL2xhbWJkYSQ2JFR5cGUiLDE2NzApLEQoMTY3MSwxLGZyLHNZZSksaC5DZD1mdW5jdGlvbih0KXtudW4odGhpcy5hLGwodCwxMDUpKX0sSShyciwiU2VsZkxvb3BQb3N0UHJvY2Vzc29yL2xhbWJkYSQ3JFR5cGUiLDE2NzEpLEQoMTY1MywxLHRzLFRqKSxoLktmPWZ1bmN0aW9uKHQsbil7eFRuKGwodCwzNiksbil9LEkocnIsIlNlbGZMb29wUHJlUHJvY2Vzc29yIiwxNjUzKSxEKDE2NTQsMSx7fSxDaiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGJuKG51bGwsbmV3IGtuKGwodCwxMDUpLmYsMSkpfSxJKHJyLCJTZWxmTG9vcFByZVByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNjU0KSxEKDE2NTUsMSx7fSxTaiksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDM0MCkuYX0sSShyciwiU2VsZkxvb3BQcmVQcm9jZXNzb3IvbGFtYmRhJDEkVHlwZSIsMTY1NSksRCgxNjU2LDEsZnIsSFopLGguQ2Q9ZnVuY3Rpb24odCl7c2huKGwodCwxOCkpfSxJKHJyLCJTZWxmTG9vcFByZVByb2Nlc3Nvci9sYW1iZGEkMiRUeXBlIiwxNjU2KSxEKDE2NzIsMSx0cyxWcnQpLGguS2Y9ZnVuY3Rpb24odCxuKXt1OW4odGhpcyxsKHQsMzYpLG4pfSxJKHJyLCJTZWxmTG9vcFJvdXRlciIsMTY3MiksRCgxNjczLDEse30sVlopLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyBrbihsKHQsMzApLmEsMTYpKX0sSShyciwiU2VsZkxvb3BSb3V0ZXIvbGFtYmRhJDAkVHlwZSIsMTY3MyksRCgxNjc0LDEsdGksWTkpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMCkuaz09KFpuKCksUHMpfSxJKHJyLCJTZWxmTG9vcFJvdXRlci9sYW1iZGEkMSRUeXBlIiwxNjc0KSxEKDE2NzUsMSx0aSxyOCksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbnMobCh0LDEwKSwoZnQoKSxoMykpfSxJKHJyLCJTZWxmTG9vcFJvdXRlci9sYW1iZGEkMiRUeXBlIiwxNjc1KSxEKDE2NzYsMSx7fSxtUyksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbChRKGwodCwxMCksKGZ0KCksaDMpKSwzMzcpfSxJKHJyLCJTZWxmTG9vcFJvdXRlci9sYW1iZGEkMyRUeXBlIiwxNjc2KSxEKDE2NzcsMSxmcixBZXQpLGguQ2Q9ZnVuY3Rpb24odCl7cHBuKHRoaXMuYSx0aGlzLmIsbCh0LDMzNykpfSxJKHJyLCJTZWxmTG9vcFJvdXRlci9sYW1iZGEkNCRUeXBlIiwxNjc3KSxEKDE2NzgsMSx0cyxVWiksaC5LZj1mdW5jdGlvbih0LG4pe2pDbihsKHQsMzYpLG4pfSxJKHJyLCJTZW1pSW50ZXJhY3RpdmVDcm9zc01pblByb2Nlc3NvciIsMTY3OCksRCgxNjc5LDEsdGksaEkpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMCkuaz09KFpuKCksUHMpfSxJKHJyLCJTZW1pSW50ZXJhY3RpdmVDcm9zc01pblByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlIiwxNjc5KSxEKDE2ODAsMSx0aSx2UyksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gb3N0KGwodCwxMCkpLl9iKChOdCgpLHc0KSl9LEkocnIsIlNlbWlJbnRlcmFjdGl2ZUNyb3NzTWluUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE2ODApLEQoMTY4MSwxLGlpLGZJKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG4zbihsKHQsMTApLGwobiwxMCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkocnIsIlNlbWlJbnRlcmFjdGl2ZUNyb3NzTWluUHJvY2Vzc29yL2xhbWJkYSQyJFR5cGUiLDE2ODEpLEQoMTY4MiwxLHt9LF9qKSxoLlZlPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGtwbihsKHQsMTApLGwobiwxMCkpfSxJKHJyLCJTZW1pSW50ZXJhY3RpdmVDcm9zc01pblByb2Nlc3Nvci9sYW1iZGEkMyRUeXBlIiwxNjgyKSxEKDE2ODQsMSx0cyxBaiksaC5LZj1mdW5jdGlvbih0LG4pe3VMbihsKHQsMzYpLG4pfSxJKHJyLCJTb3J0QnlJbnB1dE1vZGVsUHJvY2Vzc29yIiwxNjg0KSxEKDE2ODUsMSx0aSxHWiksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDEyKS5nLmMubGVuZ3RoIT0wfSxJKHJyLCJTb3J0QnlJbnB1dE1vZGVsUHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE2ODUpLEQoMTY4NiwxLGZyLHVZZSksaC5DZD1mdW5jdGlvbih0KXtHOW4odGhpcy5hLGwodCwxMikpfSxJKHJyLCJTb3J0QnlJbnB1dE1vZGVsUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE2ODYpLEQoMTc1OSw4MTcse30sbWZ0KSxoLmRmPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvO3N3aXRjaCh0aGlzLmM9dCx0aGlzLmEuZyl7Y2FzZSAyOm49bmV3IGJ0LElzKEZpKG5ldyBibihudWxsLG5ldyBrbih0aGlzLmMuYS5iLDE2KSksbmV3IHJlZSksbmV3IEZldCh0aGlzLG4pKSxaTih0aGlzLG5ldyBXWiksVnUobixuZXcgTGopLG4uYy5sZW5ndGg9MCxJcyhGaShuZXcgYm4obnVsbCxuZXcga24odGhpcy5jLmEuYiwxNikpLG5ldyBNaiksbmV3IGhZZShuKSksWk4odGhpcyxuZXcgWVopLFZ1KG4sbmV3IFhaKSxuLmMubGVuZ3RoPTAscj12bnQodWNlKHh5KG5ldyBibihudWxsLG5ldyBrbih0aGlzLmMuYS5iLDE2KSksbmV3IGZZZSh0aGlzKSkpLG5ldyBRWiksSXMobmV3IGJuKG51bGwsbmV3IGtuKHRoaXMuYy5hLmEsMTYpKSxuZXcgRGV0KHIsbikpLFpOKHRoaXMsbmV3IFpaKSxWdShuLG5ldyBEaiksbi5jLmxlbmd0aD0wO2JyZWFrO2Nhc2UgMzphPW5ldyBidCxaTih0aGlzLG5ldyBLWiksbz12bnQodWNlKHh5KG5ldyBibihudWxsLG5ldyBrbih0aGlzLmMuYS5iLDE2KSksbmV3IGxZZSh0aGlzKSkpLG5ldyBKWiksSXMoRmkobmV3IGJuKG51bGwsbmV3IGtuKHRoaXMuYy5hLmIsMTYpKSxuZXcgZWVlKSxuZXcgT2V0KG8sYSkpLFpOKHRoaXMsbmV3IHRlZSksVnUoYSxuZXcgbmVlKSxhLmMubGVuZ3RoPTA7YnJlYWs7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgTlFlKX19LGguYj0wLEkoYWEsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uIiwxNzU5KSxEKDE3NjAsMSxMZCxLWiksaC5MYj1mdW5jdGlvbih0KXtyZXR1cm4gRGUobCh0LDYwKS5nLDE1NCl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBEZShsKHQsNjApLmcsMTU0KX0sSShhYSwiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDAkVHlwZSIsMTc2MCksRCgxNzYxLDEse30sbFllKSxoLlllPWZ1bmN0aW9uKHQpe3JldHVybiBMa24odGhpcy5hLGwodCw2MCkpfSxJKGFhLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMSRUeXBlIiwxNzYxKSxEKDE3NjksMSxRVSxMZXQpLGguZGU9ZnVuY3Rpb24oKXtGQSh0aGlzLmEsdGhpcy5iLC0xKX0saC5iPTAsSShhYSwiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDEwJFR5cGUiLDE3NjkpLEQoMTc3MSwxLExkLFdaKSxoLkxiPWZ1bmN0aW9uKHQpe3JldHVybiBEZShsKHQsNjApLmcsMTU0KX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIERlKGwodCw2MCkuZywxNTQpfSxJKGFhLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMTEkVHlwZSIsMTc3MSksRCgxNzcyLDEsZnIsTGopLGguQ2Q9ZnVuY3Rpb24odCl7bCh0LDM4MCkuZGUoKX0sSShhYSwiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDEyJFR5cGUiLDE3NzIpLEQoMTc3MywxLHRpLE1qKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBEZShsKHQsNjApLmcsMTApfSxJKGFhLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMTMkVHlwZSIsMTc3MyksRCgxNzc1LDEsZnIsaFllKSxoLkNkPWZ1bmN0aW9uKHQpe1k0bih0aGlzLmEsbCh0LDYwKSl9LEkoYWEsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxNCRUeXBlIiwxNzc1KSxEKDE3NzQsMSxRVSxOZXQpLGguZGU9ZnVuY3Rpb24oKXtGQSh0aGlzLmIsdGhpcy5hLC0xKX0saC5hPTAsSShhYSwiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDE1JFR5cGUiLDE3NzQpLEQoMTc3NiwxLExkLFlaKSxoLkxiPWZ1bmN0aW9uKHQpe3JldHVybiBEZShsKHQsNjApLmcsMTApfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gRGUobCh0LDYwKS5nLDEwKX0sSShhYSwiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDE2JFR5cGUiLDE3NzYpLEQoMTc3NywxLGZyLFhaKSxoLkNkPWZ1bmN0aW9uKHQpe2wodCwzODApLmRlKCl9LEkoYWEsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxNyRUeXBlIiwxNzc3KSxEKDE3NzgsMSx7fSxmWWUpLGguWWU9ZnVuY3Rpb24odCl7cmV0dXJuIE1rbih0aGlzLmEsbCh0LDYwKSl9LEkoYWEsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxOCRUeXBlIiwxNzc4KSxEKDE3NzksMSx7fSxRWiksaC5XZT1mdW5jdGlvbigpe3JldHVybiAwfSxJKGFhLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMTkkVHlwZSIsMTc3OSksRCgxNzYyLDEse30sSlopLGguV2U9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sSShhYSwiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDIkVHlwZSIsMTc2MiksRCgxNzgxLDEsZnIsRGV0KSxoLkNkPWZ1bmN0aW9uKHQpe2Vnbih0aGlzLmEsdGhpcy5iLGwodCwzMTYpKX0saC5hPTAsSShhYSwiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDIwJFR5cGUiLDE3ODEpLEQoMTc4MCwxLFFVLElldCksaC5kZT1mdW5jdGlvbigpe0kydCh0aGlzLmEsdGhpcy5iLC0xKX0saC5iPTAsSShhYSwiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDIxJFR5cGUiLDE3ODApLEQoMTc4MiwxLExkLFpaKSxoLkxiPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsNjApLCEwfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDYwKSwhMH0sSShhYSwiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDIyJFR5cGUiLDE3ODIpLEQoMTc4MywxLGZyLERqKSxoLkNkPWZ1bmN0aW9uKHQpe2wodCwzODApLmRlKCl9LEkoYWEsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQyMyRUeXBlIiwxNzgzKSxEKDE3NjMsMSx0aSxlZWUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIERlKGwodCw2MCkuZywxMCl9LEkoYWEsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQzJFR5cGUiLDE3NjMpLEQoMTc2NSwxLGZyLE9ldCksaC5DZD1mdW5jdGlvbih0KXt0Z24odGhpcy5hLHRoaXMuYixsKHQsNjApKX0saC5hPTAsSShhYSwiRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDQkVHlwZSIsMTc2NSksRCgxNzY0LDEsUVUsUGV0KSxoLmRlPWZ1bmN0aW9uKCl7RkEodGhpcy5iLHRoaXMuYSwtMSl9LGguYT0wLEkoYWEsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQ1JFR5cGUiLDE3NjQpLEQoMTc2NiwxLExkLHRlZSksaC5MYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDYwKSwhMH0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCw2MCksITB9LEkoYWEsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQ2JFR5cGUiLDE3NjYpLEQoMTc2NywxLGZyLG5lZSksaC5DZD1mdW5jdGlvbih0KXtsKHQsMzgwKS5kZSgpfSxJKGFhLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkNyRUeXBlIiwxNzY3KSxEKDE3NjgsMSx0aSxyZWUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIERlKGwodCw2MCkuZywxNTQpfSxJKGFhLCJFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkOCRUeXBlIiwxNzY4KSxEKDE3NzAsMSxmcixGZXQpLGguQ2Q9ZnVuY3Rpb24odCl7d3duKHRoaXMuYSx0aGlzLmIsbCh0LDYwKSl9LEkoYWEsIkVkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQ5JFR5cGUiLDE3NzApLEQoMTU4NiwxLHRzLG5ydCksaC5LZj1mdW5jdGlvbih0LG4pe0ZMbih0aGlzLGwodCwzNiksbil9O3ZhciBROHQ7SShhYSwiSG9yaXpvbnRhbEdyYXBoQ29tcGFjdG9yIiwxNTg2KSxEKDE1ODcsMSx7fSxkWWUpLGguZmY9ZnVuY3Rpb24odCxuKXt2YXIgcixhLG87cmV0dXJuIHE2ZSh0LG4pfHwocj1HNSh0KSxhPUc1KG4pLHImJnIuaz09KFpuKCksVXMpfHxhJiZhLms9PShabigpLFVzKSk/MDoobz1sKFEodGhpcy5hLmEsKGZ0KCksJDYpKSwzMTIpLHpobihvLHI/ci5rOihabigpLEFhKSxhP2EuazooWm4oKSxBYSkpKX0saC5nZj1mdW5jdGlvbih0LG4pe3ZhciByLGEsbztyZXR1cm4gcTZlKHQsbik/MToocj1HNSh0KSxhPUc1KG4pLG89bChRKHRoaXMuYS5hLChmdCgpLCQ2KSksMzEyKSxPeWUobyxyP3IuazooWm4oKSxBYSksYT9hLms6KFpuKCksQWEpKSl9LEkoYWEsIkhvcml6b250YWxHcmFwaENvbXBhY3Rvci8xIiwxNTg3KSxEKDE1ODgsMSx7fSxJaiksaC5lZj1mdW5jdGlvbih0LG4pe3JldHVybiBwXygpLHQuYS5pPT0wfSxJKGFhLCJIb3Jpem9udGFsR3JhcGhDb21wYWN0b3IvbGFtYmRhJDAkVHlwZSIsMTU4OCksRCgxNTg5LDEse30sZ1llKSxoLmVmPWZ1bmN0aW9uKHQsbil7cmV0dXJuIENwbih0aGlzLmEsdCxuKX0sSShhYSwiSG9yaXpvbnRhbEdyYXBoQ29tcGFjdG9yL2xhbWJkYSQxJFR5cGUiLDE1ODkpLEQoMTczMCwxLHt9LEdsdCk7dmFyIEo4dCxaOHQ7SShhYSwiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lciIsMTczMCksRCgxNzM4LDEsdGksd1MpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIHQhPW51bGx9LEkoYWEsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvMG1ldGhvZHJlZiRub25OdWxsJFR5cGUiLDE3MzgpLEQoMTczMSwxLHt9LGllZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gdTAoKSx4YyhRKGwobCh0LDYwKS5nLDEwKSwoZnQoKSx6aSkpKX0sSShhYSwiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMCRUeXBlIiwxNzMxKSxEKDE3MzIsMSx7fSxzZWUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIHUwKCkscjF0KGwobCh0LDYwKS5nLDE1NCkpfSxJKGFhLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxJFR5cGUiLDE3MzIpLEQoMTc0MSwxLHRpLE9qKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiB1MCgpLERlKGwodCw2MCkuZywxMCl9LEkoYWEsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDEwJFR5cGUiLDE3NDEpLEQoMTc0MiwxLGZyLGFlZSksaC5DZD1mdW5jdGlvbih0KXtNcG4obCh0LDYwKSl9LEkoYWEsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDExJFR5cGUiLDE3NDIpLEQoMTc0MywxLHRpLG9lZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gdTAoKSxEZShsKHQsNjApLmcsMTU0KX0sSShhYSwiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTIkVHlwZSIsMTc0MyksRCgxNzQ3LDEsZnIsY2VlKSxoLkNkPWZ1bmN0aW9uKHQpe280bihsKHQsNjApKX0sSShhYSwiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTMkVHlwZSIsMTc0NyksRCgxNzQ0LDEsZnIscFllKSxoLkNkPWZ1bmN0aW9uKHQpe05sbih0aGlzLmEsbCh0LDgpKX0saC5hPTAsSShhYSwiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTQkVHlwZSIsMTc0NCksRCgxNzQ1LDEsZnIsYlllKSxoLkNkPWZ1bmN0aW9uKHQpe0Jsbih0aGlzLmEsbCh0LDExNikpfSxoLmE9MCxJKGFhLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxNSRUeXBlIiwxNzQ1KSxEKDE3NDYsMSxmcixtWWUpLGguQ2Q9ZnVuY3Rpb24odCl7UGxuKHRoaXMuYSxsKHQsOCkpfSxoLmE9MCxJKGFhLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxNiRUeXBlIiwxNzQ2KSxEKDE3NDgsMSx7fSx1ZWUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIHUwKCksbmV3IGJuKG51bGwsbmV3IHZ3KG5ldyBocihkcihxcyhsKHQsMTApKS5hLktjKCksbmV3IGopKSkpfSxJKGFhLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxNyRUeXBlIiwxNzQ4KSxEKDE3NDksMSx0aSxsZWUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIHUwKCksRG8obCh0LDE4KSl9LEkoYWEsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDE4JFR5cGUiLDE3NDkpLEQoMTc1MCwxLGZyLHZZZSksaC5DZD1mdW5jdGlvbih0KXtRdm4odGhpcy5hLGwodCwxOCkpfSxJKGFhLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxOSRUeXBlIiwxNzUwKSxEKDE3MzQsMSxmcix3WWUpLGguQ2Q9ZnVuY3Rpb24odCl7VGJuKHRoaXMuYSxsKHQsMTU0KSl9LEkoYWEsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDIkVHlwZSIsMTczNCksRCgxNzUxLDEse30saGVlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiB1MCgpLG5ldyBibihudWxsLG5ldyBrbihsKHQsMzApLmEsMTYpKX0sSShhYSwiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMjAkVHlwZSIsMTc1MSksRCgxNzUyLDEse30sTmopLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIHUwKCksbmV3IGJuKG51bGwsbmV3IHZ3KG5ldyBocihkcihxcyhsKHQsMTApKS5hLktjKCksbmV3IGopKSkpfSxJKGFhLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQyMSRUeXBlIiwxNzUyKSxEKDE3NTMsMSx7fSxmZWUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIHUwKCksbChRKGwodCwxOCksKGZ0KCksZnYpKSwxNSl9LEkoYWEsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDIyJFR5cGUiLDE3NTMpLEQoMTc1NCwxLHRpLFBqKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBxaG4obCh0LDE1KSl9LEkoYWEsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDIzJFR5cGUiLDE3NTQpLEQoMTc1NSwxLGZyLHlZZSksaC5DZD1mdW5jdGlvbih0KXt2a24odGhpcy5hLGwodCwxNSkpfSxJKGFhLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQyNCRUeXBlIiwxNzU1KSxEKDE3MzMsMSxmcixSZXQpLGguQ2Q9ZnVuY3Rpb24odCl7eG1uKHRoaXMuYSx0aGlzLmIsbCh0LDE1NCkpfSxJKGFhLCJMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQzJFR5cGUiLDE3MzMpLEQoMTczNSwxLHt9LGRlZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gdTAoKSxuZXcgYm4obnVsbCxuZXcga24obCh0LDMwKS5hLDE2KSl9LEkoYWEsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDQkVHlwZSIsMTczNSksRCgxNzM2LDEse30sZ2VlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiB1MCgpLG5ldyBibihudWxsLG5ldyB2dyhuZXcgaHIoZHIocXMobCh0LDEwKSkuYS5LYygpLG5ldyBqKSkpKX0sSShhYSwiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkNSRUeXBlIiwxNzM2KSxEKDE3MzcsMSx7fSxwZWUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIHUwKCksbChRKGwodCwxOCksKGZ0KCksZnYpKSwxNSl9LEkoYWEsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDYkVHlwZSIsMTczNyksRCgxNzM5LDEsZnIseFllKSxoLkNkPWZ1bmN0aW9uKHQpe0Rrbih0aGlzLmEsbCh0LDE1KSl9LEkoYWEsIkxHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDgkVHlwZSIsMTczOSksRCgxNzQwLDEsZnIsamV0KSxoLkNkPWZ1bmN0aW9uKHQpe2Fobih0aGlzLmEsdGhpcy5iLGwodCwxNTQpKX0sSShhYSwiTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkOSRUeXBlIiwxNzQwKSxEKDE3MjksMSx7fSx5UyksaC5jZj1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmO2Zvcih0aGlzLmE9dCx0aGlzLmQ9bmV3IGppZSx0aGlzLmM9V2Uoel9lLFJuLDEyNSx0aGlzLmEuYS5hLmMubGVuZ3RoLDAsMSksdGhpcy5iPTAscj1uZXcgRyh0aGlzLmEuYS5hKTtyLmE8ci5jLmMubGVuZ3RoOyluPWwocmUociksMzE2KSxuLmQ9dGhpcy5iLGY9aHcock8obmV3IFNtLG4pLHRoaXMuZCksdGhpcy5jW3RoaXMuYl09ZiwrK3RoaXMuYjtmb3IoV01uKHRoaXMpLFdEbih0aGlzKSxRVG4odGhpcyksb2xlKGJhZSh0aGlzLmQpLG5ldyBMOCksbz1uZXcgRyh0aGlzLmEuYS5iKTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksNjApLGEuZC5jPXRoaXMuY1thLmEuZF0uZSthLmIuYX0saC5iPTAsSShhYSwiTmV0d29ya1NpbXBsZXhDb21wYWN0aW9uIiwxNzI5KSxEKDE1NCwxLHszNDoxLDE1NDoxfSxRQSksaC5GZD1mdW5jdGlvbih0KXtyZXR1cm4gY3duKHRoaXMsbCh0LDE1NCkpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHIxdCh0aGlzKX0sSShhYSwiVmVydGljYWxTZWdtZW50IiwxNTQpLEQoODQxLDEse30sTnhlKSxoLmM9MCxoLmU9MCxoLmk9MCxJKGdMLCJCZXR3ZWVuTGF5ZXJFZGdlVHdvTm9kZUNyb3NzaW5nc0NvdW50ZXIiLDg0MSksRCg2NzcsMSx7Njc3OjF9LERmdCksaC5JYj1mdW5jdGlvbigpe3JldHVybiJBZGphY2VuY3lMaXN0IFtub2RlPSIrdGhpcy5kKyIsIGFkamFjZW5jaWVzPSAiK3RoaXMuYSsiXSJ9LGguYj0wLGguYz0wLGguZj0wLEkoZ0wsIkJldHdlZW5MYXllckVkZ2VUd29Ob2RlQ3Jvc3NpbmdzQ291bnRlci9BZGphY2VuY3lMaXN0Iiw2NzcpLEQoMjk0LDEsezM0OjEsMjk0OjF9LGxydCksaC5GZD1mdW5jdGlvbih0KXtyZXR1cm4gVGRuKHRoaXMsbCh0LDI5NCkpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIkFkamFjZW5jeSBbcG9zaXRpb249Iit0aGlzLmMrIiwgY2FyZGluYWxpdHk9Iit0aGlzLmErIiwgY3VycmVudENhcmRpbmFsaXR5PSIrdGhpcy5iKyJdIn0saC5hPTAsaC5iPTAsaC5jPTAsSShnTCwiQmV0d2VlbkxheWVyRWRnZVR3b05vZGVDcm9zc2luZ3NDb3VudGVyL0FkamFjZW5jeUxpc3QvQWRqYWNlbmN5IiwyOTQpLEQoMjAyNiwxLHt9LGNwdCksaC5iPTAsaC5lPSExLEkoZ0wsIkNyb3NzaW5nTWF0cml4RmlsbGVyIiwyMDI2KTt2YXIgZXh0PWtzKGJnLCJJSW5pdGlhbGl6YWJsZSIpO0QoMTg2NywxLHpQLHpldCksaC5nZz1mdW5jdGlvbih0LG4scixhLG8sZil7fSxoLmlnPWZ1bmN0aW9uKHQsbixyKXt9LGguZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jIT0oSXcoKSxvTSl9LGguZmc9ZnVuY3Rpb24oKXt0aGlzLmU9V2UoVnIsZGksMjgsdGhpcy5kLDE1LDEpfSxoLmhnPWZ1bmN0aW9uKHQsbil7blt0XVswXS5jLnA9dH0saC5qZz1mdW5jdGlvbih0LG4scixhKXsrK3RoaXMuZH0saC5rZz1mdW5jdGlvbigpe3JldHVybiEwfSxoLmxnPWZ1bmN0aW9uKHQsbixyLGEpe3JldHVybiBZMHQodGhpcyx0LG4sciksT21uKHRoaXMsbil9LGgubWc9ZnVuY3Rpb24odCxuKXt2YXIgcjtyZXR1cm4gcj1NdW4obix0Lmxlbmd0aCksWTB0KHRoaXMsdCxyLG4pLGgwdCh0aGlzLHIpfSxoLmQ9MCxJKGdMLCJHcmVlZHlTd2l0Y2hIZXVyaXN0aWMiLDE4NjcpLEQoMjAyOSwxLHt9LGlzdCksaC5iPTAsaC5kPTAsSShnTCwiTm9ydGhTb3V0aEVkZ2VOZWlnaGJvdXJpbmdOb2RlQ3Jvc3NpbmdzQ291bnRlciIsMjAyOSksRCgyMDE2LDEse30sJGJ0KSxoLmE9ITEsSShnTCwiU3dpdGNoRGVjaWRlciIsMjAxNiksRCgxMDUsMSx7MTA1OjF9LGJwdCksaC5hPW51bGwsaC5jPW51bGwsaC5pPW51bGwsSShGeCwiU2VsZkh5cGVyTG9vcCIsMTA1KSxEKDIwMTMsMSx7fSxyZHQpLGguYz0wLGguZT0wLEkoRngsIlNlbGZIeXBlckxvb3BMYWJlbHMiLDIwMTMpLEQoNDIxLDIyLHszOjEsMzQ6MSwyMjoxLDQyMToxfSxwcSk7dmFyIFZ4LE1ULERULGIxZSx0eHQ9RnIoRngsIlNlbGZIeXBlckxvb3BMYWJlbHMvQWxpZ25tZW50Iiw0MjEsSHIsUWJuLFQwbiksbnh0O0QoMzQwLDEsezM0MDoxfSxCdXQpLEkoRngsIlNlbGZMb29wRWRnZSIsMzQwKSxEKDMzNywxLHszMzc6MX0saWR0KSxoLmE9ITEsSShGeCwiU2VsZkxvb3BIb2xkZXIiLDMzNyksRCgxNzkwLDEsdGksSGopLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIERvKGwodCwxOCkpfSxJKEZ4LCJTZWxmTG9vcEhvbGRlci9sYW1iZGEkMCRUeXBlIiwxNzkwKSxEKDExMywxLHsxMTM6MX0sdWR0KSxoLmE9ITEsaC5jPSExLEkoRngsIlNlbGZMb29wUG9ydCIsMTEzKSxEKDE4NTUsMSx0aSx2ZWUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIERvKGwodCwxOCkpfSxJKEZ4LCJTZWxmTG9vcFBvcnQvbGFtYmRhJDAkVHlwZSIsMTg1NSksRCgzNzUsMjIsezM6MSwzNDoxLDIyOjEsMzc1OjF9LGNPKTt2YXIgVUssYkIsR0ssS0ssV0sscnh0PUZyKEZ4LCJTZWxmTG9vcFR5cGUiLDM3NSxIcixxbW4sQzBuKSxpeHQ7RCgxNzk4LDEse30sS3JlKTt2YXIgc3h0LGF4dCxveHQsY3h0O0koQmgsIlBvcnRSZXN0b3JlciIsMTc5OCksRCgzNzIsMjIsezM6MSwzNDoxLDIyOjEsMzcyOjF9LHZzZSk7dmFyIGEzLFJiLG8zLG0xZT1GcihCaCwiUG9ydFJlc3RvcmVyL1BvcnRTaWRlQXJlYSIsMzcyLEhyLFIybix4MG4pLHV4dDtEKDE3OTksMSx7fSx4UyksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gQ2IoKSxsKHQsMTUpLk9jKCl9LEkoQmgsIlBvcnRSZXN0b3Jlci9sYW1iZGEkMCRUeXBlIiwxNzk5KSxEKDE4MDAsMSxmcixtZWUpLGguQ2Q9ZnVuY3Rpb24odCl7Q2IoKSxsKHQsMTEzKS5jPSExfSxJKEJoLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDEkVHlwZSIsMTgwMCksRCgxODA5LDEsdGksQmopLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIENiKCksbCh0LDEyKS5qPT0oQ3QoKSxlcil9LEkoQmgsIlBvcnRSZXN0b3Jlci9sYW1iZGEkMTAkVHlwZSIsMTgwOSksRCgxODEwLDEse30sRmopLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIENiKCksbCh0LDExMykuZH0sSShCaCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQxMSRUeXBlIiwxODEwKSxEKDE4MTEsMSxmcixrWWUpLGguQ2Q9ZnVuY3Rpb24odCl7UHVuKHRoaXMuYSxsKHQsMTIpKX0sSShCaCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQxMiRUeXBlIiwxODExKSxEKDE4MDEsMSxmcixFWWUpLGguQ2Q9ZnVuY3Rpb24odCl7UWhuKHRoaXMuYSxsKHQsMTA1KSl9LEkoQmgsIlBvcnRSZXN0b3Jlci9sYW1iZGEkMiRUeXBlIiwxODAxKSxEKDE4MDIsMSxpaSxSaiksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBEd24obCh0LDExMyksbChuLDExMykpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoQmgsIlBvcnRSZXN0b3Jlci9sYW1iZGEkMyRUeXBlIiwxODAyKSxEKDE4MDMsMSx0aSxqaiksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gQ2IoKSxsKHQsMTEzKS5jfSxJKEJoLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDQkVHlwZSIsMTgwMyksRCgxODA0LDEsdGksR3YpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGszbihsKHQsMTIpKX0sSShCaCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQ1JFR5cGUiLDE4MDQpLEQoMTgwNSwxLHRpLGJlZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gQ2IoKSxsKHQsMTIpLmo9PShDdCgpLFFuKX0sSShCaCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQ2JFR5cGUiLDE4MDUpLEQoMTgwNiwxLHRpLCRqKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBDYigpLGwodCwxMikuaj09KEN0KCksYXIpfSxJKEJoLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDckVHlwZSIsMTgwNiksRCgxODA3LDEsdGksemopLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIHRtbihsKHQsMTIpKX0sSShCaCwiUG9ydFJlc3RvcmVyL2xhbWJkYSQ4JFR5cGUiLDE4MDcpLEQoMTgwOCwxLHRpLHFqKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBDYigpLGwodCwxMikuaj09KEN0KCksRHIpfSxJKEJoLCJQb3J0UmVzdG9yZXIvbGFtYmRhJDkkVHlwZSIsMTgwOCksRCgyNzYsMjIsezM6MSwzNDoxLDIyOjEsMjc2OjF9LFo4KTt2YXIgdjFlLHcxZSx5MWUseDFlLGsxZSxFMWUsVDFlLEMxZSx1TGU9RnIoQmgsIlBvcnRTaWRlQXNzaWduZXIvVGFyZ2V0IiwyNzYsSHIsbXduLFMwbiksbHh0O0QoMTc5MSwxLHt9LGRJKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBGaShuZXcgYm4obnVsbCxuZXcga24obCh0LDEwNSkuaiwxNikpLG5ldyBWail9LEkoQmgsIlBvcnRTaWRlQXNzaWduZXIvbGFtYmRhJDEkVHlwZSIsMTc5MSksRCgxNzkyLDEse30sZzUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMTMpLmR9LEkoQmgsIlBvcnRTaWRlQXNzaWduZXIvbGFtYmRhJDIkVHlwZSIsMTc5MiksRCgxNzkzLDEsZnIsd2VlKSxoLkNkPWZ1bmN0aW9uKHQpe2xhKGwodCwxMiksKEN0KCksUW4pKX0sSShCaCwiUG9ydFNpZGVBc3NpZ25lci9sYW1iZGEkMyRUeXBlIiwxNzkzKSxEKDE3OTQsMSx7fSx5ZWUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMTMpLmR9LEkoQmgsIlBvcnRTaWRlQXNzaWduZXIvbGFtYmRhJDQkVHlwZSIsMTc5NCksRCgxNzk1LDEsZnIsVFllKSxoLkNkPWZ1bmN0aW9uKHQpe3Fjbih0aGlzLmEsbCh0LDEyKSl9LEkoQmgsIlBvcnRTaWRlQXNzaWduZXIvbGFtYmRhJDUkVHlwZSIsMTc5NSksRCgxNzk2LDEsaWksaTgpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gR2duKGwodCwxMDUpLGwobiwxMDUpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKEJoLCJQb3J0U2lkZUFzc2lnbmVyL2xhbWJkYSQ2JFR5cGUiLDE3OTYpLEQoMTc5NywxLGlpLGtTKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHBkbihsKHQsMTEzKSxsKG4sMTEzKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShCaCwiUG9ydFNpZGVBc3NpZ25lci9sYW1iZGEkNyRUeXBlIiwxNzk3KSxEKDgyMCwxLHRpLFZqKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMTEzKS5jfSxJKEJoLCJQb3J0U2lkZUFzc2lnbmVyL2xhbWJkYSQ4JFR5cGUiLDgyMCksRCgyMTA4LDEse30pLEkoRGIsIkFic3RyYWN0U2VsZkxvb3BSb3V0ZXIiLDIxMDgpLEQoMTgxNiwxLGlpLHhlZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBLZm4obCh0LDEwNSksbChuLDEwNSkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoRGIsZzN0LDE4MTYpLEQoMTgxNywxLGlpLGtlZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBHZm4obCh0LDEwNSksbChuLDEwNSkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoRGIscDN0LDE4MTcpLEQoMTg1NiwyMTA4LHt9LEVlZSksaC5uZz1mdW5jdGlvbih0LG4scil7cmV0dXJuIHJ9LEkoRGIsIk9ydGhvZ29uYWxTZWxmTG9vcFJvdXRlciIsMTg1NiksRCgxODU4LDEsZnIsJGV0KSxoLkNkPWZ1bmN0aW9uKHQpe1Y4ZSh0aGlzLmIsdGhpcy5hLGwodCw4KSl9LEkoRGIsIk9ydGhvZ29uYWxTZWxmTG9vcFJvdXRlci9sYW1iZGEkMCRUeXBlIiwxODU4KSxEKDE4NTcsMTg1Nix7fSxUZWUpLGgubmc9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG87cmV0dXJuIGE9dC5jLmQsUGsociwwLE9pKEphKGEubiksYS5hKSksbz10LmQuZCx1aShyLE9pKEphKG8ubiksby5hKSksWF9uKHIpfSxJKERiLCJQb2x5bGluZVNlbGZMb29wUm91dGVyIiwxODU3KSxEKDE4MTIsMSx7fSxXcmUpLGguYT1udWxsO3ZhciBJNjtJKERiLCJSb3V0aW5nRGlyZWN0b3IiLDE4MTIpLEQoMTgxMywxLGlpLENlZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBmZG4obCh0LDExMyksbChuLDExMykpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoRGIsIlJvdXRpbmdEaXJlY3Rvci9sYW1iZGEkMCRUeXBlIiwxODEzKSxEKDE4MTQsMSx7fSxTZWUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIGVxKCksbCh0LDEwNSkuan0sSShEYiwiUm91dGluZ0RpcmVjdG9yL2xhbWJkYSQxJFR5cGUiLDE4MTQpLEQoMTgxNSwxLGZyLF9lZSksaC5DZD1mdW5jdGlvbih0KXtlcSgpLGwodCwxNSkuamQoSTYpfSxJKERiLCJSb3V0aW5nRGlyZWN0b3IvbGFtYmRhJDIkVHlwZSIsMTgxNSksRCgxODE4LDEse30sQWVlKSxJKERiLCJSb3V0aW5nU2xvdEFzc2lnbmVyIiwxODE4KSxEKDE4MTksMSx0aSxDWWUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIG1sbih0aGlzLmEsbCh0LDEwNSkpfSxJKERiLCJSb3V0aW5nU2xvdEFzc2lnbmVyL2xhbWJkYSQwJFR5cGUiLDE4MTkpLEQoMTgyMCwxLGlpLFNZZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiB6ZG4odGhpcy5hLGwodCwxMDUpLGwobiwxMDUpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKERiLCJSb3V0aW5nU2xvdEFzc2lnbmVyL2xhbWJkYSQxJFR5cGUiLDE4MjApLEQoMTg1OSwxODU2LHt9LExlZSksaC5uZz1mdW5jdGlvbih0LG4scil7dmFyIGEsbyxmLGc7cmV0dXJuIGE9emUoR2UodFUodC5iLmcuYiwoTnQoKSxINikpKSksZz1uZXcgZnJ0KGhlKGxlKEVhLDEpLGR0LDgsMCxbKGY9dC5jLmQsT2kobmV3IEVvKGYubiksZi5hKSldKSksQ1RuKHQsbixyLGcsYSksdWkoZywobz10LmQuZCxPaShuZXcgRW8oby5uKSxvLmEpKSksTGR0KG5ldyBTa2UoZykpfSxJKERiLCJTcGxpbmVTZWxmTG9vcFJvdXRlciIsMTg1OSksRCg1ODYsMSxpaSxwZnQsT2l0KSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGR3dCh0aGlzLGwodCwxMCksbChuLDEwKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShxRWUsIk1vZGVsT3JkZXJOb2RlQ29tcGFyYXRvciIsNTg2KSxEKDE4MjEsMSx0aSxNZWUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMikuZS5jLmxlbmd0aCE9MH0sSShxRWUsIk1vZGVsT3JkZXJOb2RlQ29tcGFyYXRvci9sYW1iZGEkMCRUeXBlIiwxODIxKSxEKDgyMSwxLGlpLFYwdCxTY3QpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gQXN0KHRoaXMsdCxuKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxoLmI9ITEsSShxRWUsIk1vZGVsT3JkZXJQb3J0Q29tcGFyYXRvciIsODIxKSxEKDgxNSwxLHt9LEVTKSxoLm9nPWZ1bmN0aW9uKHQsbil7dmFyIHIsYSxvLGY7Zm9yKG89aXB0KG4pLHI9bmV3IGJ0LGY9bi5mL28sYT0xO2E8bzsrK2EpdnQocixwdChZcihaYyhiLk1hdGgucm91bmQoYSpmKSkpKSk7cmV0dXJuIHJ9LGgucGc9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sSShPZCwiQVJEQ3V0SW5kZXhIZXVyaXN0aWMiLDgxNSksRCgxNTQ0LDEsdHMsVWopLGguS2Y9ZnVuY3Rpb24odCxuKXtnX24obCh0LDM2KSxuKX0sSShPZCwiQnJlYWtpbmdQb2ludEluc2VydGVyIiwxNTQ0KSxEKDMxMywxLHszMTM6MX0sbzZlKSxoLkliPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9bmV3IHRiLHQuYSs9IkJQSW5mb1siLHQuYSs9YAoJc3RhcnQ9YCx3dSh0LHRoaXMuaSksdC5hKz1gCgllbmQ9YCx3dSh0LHRoaXMuYSksdC5hKz1gCglub2RlU3RhcnRFZGdlPWAsd3UodCx0aGlzLmUpLHQuYSs9YAoJc3RhcnRFbmRFZGdlPWAsd3UodCx0aGlzLmopLHQuYSs9YAoJb3JpZ2luYWxFZGdlPWAsd3UodCx0aGlzLmYpLHQuYSs9YAoJc3RhcnRJbkxheWVyRHVtbXk9YCx3dSh0LHRoaXMuayksdC5hKz1gCglzdGFydEluTGF5ZXJFZGdlPWAsd3UodCx0aGlzLm4pLHQuYSs9YAoJZW5kSW5MYXllckR1bW15PWAsd3UodCx0aGlzLmIpLHQuYSs9YAoJZW5kSW5MYXllckVkZ2U9YCx3dSh0LHRoaXMuYyksdC5hfSxJKE9kLCJCcmVha2luZ1BvaW50SW5zZXJ0ZXIvQlBJbmZvIiwzMTMpLEQoNjYxLDEsezY2MToxfSxCWWUpLGguYT0hMSxoLmI9MCxoLmM9MCxJKE9kLCJCcmVha2luZ1BvaW50SW5zZXJ0ZXIvQ3V0Iiw2NjEpLEQoMTU0NSwxLHRzLERlZSksaC5LZj1mdW5jdGlvbih0LG4pe01UbihsKHQsMzYpLG4pfSxJKE9kLCJCcmVha2luZ1BvaW50UHJvY2Vzc29yIiwxNTQ1KSxEKDE1NDYsMSx0aSxJZWUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGlodChsKHQsMTApKX0sSShPZCwiQnJlYWtpbmdQb2ludFByb2Nlc3Nvci8wbWV0aG9kcmVmJGlzRW5kJFR5cGUiLDE1NDYpLEQoMTU0NywxLHRpLE9lZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gc2h0KGwodCwxMCkpfSxJKE9kLCJCcmVha2luZ1BvaW50UHJvY2Vzc29yLzFtZXRob2RyZWYkaXNTdGFydCRUeXBlIiwxNTQ3KSxEKDE1NDgsMSx0cyxOZWUpLGguS2Y9ZnVuY3Rpb24odCxuKXtKVG4odGhpcyxsKHQsMzYpLG4pfSxJKE9kLCJCcmVha2luZ1BvaW50UmVtb3ZlciIsMTU0OCksRCgxNTQ5LDEsZnIsUGVlKSxoLkNkPWZ1bmN0aW9uKHQpe2wodCwxMzEpLms9ITB9LEkoT2QsIkJyZWFraW5nUG9pbnRSZW1vdmVyL2xhbWJkYSQwJFR5cGUiLDE1NDkpLEQoODExLDEse30sTTllKSxoLmI9MCxoLmU9MCxoLmY9MCxoLmo9MCxJKE9kLCJHcmFwaFN0YXRzIiw4MTEpLEQoODEyLDEse30sR2opLGguVmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gYi5NYXRoLm1heCh6ZShHZSh0KSksemUoR2UobikpKX0sSShPZCwiR3JhcGhTdGF0cy8wbWV0aG9kcmVmJG1heCRUeXBlIiw4MTIpLEQoODEzLDEse30sS2opLGguVmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gYi5NYXRoLm1heCh6ZShHZSh0KSksemUoR2UobikpKX0sSShPZCwiR3JhcGhTdGF0cy8ybWV0aG9kcmVmJG1heCRUeXBlIiw4MTMpLEQoMTcyNiwxLHt9LEJlZSksaC5WZT1mdW5jdGlvbih0LG4pe3JldHVybiBaMW4oR2UodCksR2UobikpfSxJKE9kLCJHcmFwaFN0YXRzL2xhbWJkYSQxJFR5cGUiLDE3MjYpLEQoMTcyNywxLHt9LF9ZZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbGR0KHRoaXMuYSxsKHQsMzApKX0sSShPZCwiR3JhcGhTdGF0cy9sYW1iZGEkMiRUeXBlIiwxNzI3KSxEKDE3MjgsMSx7fSxBWWUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIHRidCh0aGlzLmEsbCh0LDMwKSl9LEkoT2QsIkdyYXBoU3RhdHMvbGFtYmRhJDYkVHlwZSIsMTcyOCksRCg4MTQsMSx7fSxXaiksaC5vZz1mdW5jdGlvbih0LG4pe3ZhciByO3JldHVybiByPWwoUSh0LChOdCgpLHNEZSkpLDE1KSxyfHwoQ24oKSxDbigpLF9vKX0saC5wZz1mdW5jdGlvbigpe3JldHVybiExfSxJKE9kLCJJQ3V0SW5kZXhDYWxjdWxhdG9yL01hbnVhbEN1dEluZGV4Q2FsY3VsYXRvciIsODE0KSxEKDgxNiwxLHt9LFlqKSxoLm9nPWZ1bmN0aW9uKHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMLEIseixWLEosdGUsZmUsVGUsTWUsJGUsWmU7Zm9yKFplPShuLm49PW51bGwmJlJkdChuKSxuLm4pLEU9KG4uZD09bnVsbCYmUmR0KG4pLG4uZCksJGU9V2UoTmEsWm8sMjgsWmUubGVuZ3RoLDE1LDEpLCRlWzBdPVplWzBdLFRlPVplWzBdLEM9MTtDPFplLmxlbmd0aDtDKyspJGVbQ109JGVbQy0xXStaZVtDXSxUZSs9WmVbQ107Zm9yKG89aXB0KG4pLTEsZz1sKFEodCwoTnQoKSxhRGUpKSwxNykuYSxhPWlhLHI9bmV3IGJ0LHo9Yi5NYXRoLm1heCgwLG8tZyk7ejw9Yi5NYXRoLm1pbihuLmYtMSxvK2cpO3orKyl7aWYodGU9VGUvKHorMSksZmU9MCxMPTEsZj1uZXcgYnQsTWU9aWEsQj0wLHc9MCxKPUVbMF0sej09MClNZT1UZSx3PShuLmc9PW51bGwmJihuLmc9RWZ0KG4sbmV3IEtqKSksemUobi5nKSk7ZWxzZXtmb3IoO0w8bi5mOykkZVtMLTFdLWZlPj10ZSYmKHZ0KGYscHQoTCkpLE1lPWIuTWF0aC5tYXgoTWUsJGVbTC0xXS1CKSx3Kz1KLGZlKz0kZVtMLTFdLWZlLEI9JGVbTC0xXSxKPUVbTF0pLEo9Yi5NYXRoLm1heChKLEVbTF0pLCsrTDt3Kz1KfVY9Yi5NYXRoLm1pbigxL01lLDEvbi5iL3cpLFY+YSYmKGE9VixyPWYpfXJldHVybiByfSxoLnBnPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEkoT2QsIk1TREN1dEluZGV4SGV1cmlzdGljIiw4MTYpLEQoMTY4MywxLHRzLEZlZSksaC5LZj1mdW5jdGlvbih0LG4peyRBbihsKHQsMzYpLG4pfSxJKE9kLCJTaW5nbGVFZGdlR3JhcGhXcmFwcGVyIiwxNjgzKSxEKDIzMiwyMix7MzoxLDM0OjEsMjI6MSwyMzI6MX0sRV8pO3ZhciBPNixJVCxPVCxoNCxxTCxONixOVD1GcihvdSwiQ2VudGVyRWRnZUxhYmVsUGxhY2VtZW50U3RyYXRlZ3kiLDIzMixIcixDdm4sXzBuKSxoeHQ7RCg0MzEsMjIsezM6MSwzNDoxLDIyOjEsNDMxOjF9LE4zZSk7dmFyIGxMZSxTMWUsaExlPUZyKG91LCJDb25zdHJhaW50Q2FsY3VsYXRpb25TdHJhdGVneSIsNDMxLEhyLFVwbixBMG4pLGZ4dDtEKDMyMiwyMix7MzoxLDM0OjEsMjI6MSwzMjI6MSwxODg6MSwxOTY6MX0sd3NlKSxoLmRnPWZ1bmN0aW9uKCl7cmV0dXJuICRwdCh0aGlzKX0saC5xZz1mdW5jdGlvbigpe3JldHVybiAkcHQodGhpcyl9O3ZhciBtQixITCxmTGUsZExlPUZyKG91LCJDcm9zc2luZ01pbmltaXphdGlvblN0cmF0ZWd5IiwzMjIsSHIsajJuLEwwbiksZHh0O0QoMzUxLDIyLHszOjEsMzQ6MSwyMjoxLDM1MToxfSx5c2UpO3ZhciBnTGUsXzFlLFlLLHBMZT1GcihvdSwiQ3V0dGluZ1N0cmF0ZWd5IiwzNTEsSHIsJDJuLE0wbiksZ3h0O0QoMzQ4LDIyLHszOjEsMzQ6MSwyMjoxLDM0ODoxLDE4ODoxLDE5NjoxfSx1TyksaC5kZz1mdW5jdGlvbigpe3JldHVybiBNMnQodGhpcyl9LGgucWc9ZnVuY3Rpb24oKXtyZXR1cm4gTTJ0KHRoaXMpfTt2YXIgYkxlLEExZSxQVCxMMWUsQlQsbUxlPUZyKG91LCJDeWNsZUJyZWFraW5nU3RyYXRlZ3kiLDM0OCxIcixIbW4sRDBuKSxweHQ7RCg0MjgsMjIsezM6MSwzNDoxLDIyOjEsNDI4OjF9LFAzZSk7dmFyIFhLLHZMZSx3TGU9RnIob3UsIkRpcmVjdGlvbkNvbmdydWVuY3kiLDQyOCxIcixWcG4sSTBuKSxieHQ7RCg0NjAsMjIsezM6MSwzNDoxLDIyOjEsNDYwOjF9LHhzZSk7dmFyIEZULE0xZSxQNixteHQ9RnIob3UsIkVkZ2VDb25zdHJhaW50Iiw0NjAsSHIsejJuLGowbiksdnh0O0QoMjgzLDIyLHszOjEsMzQ6MSwyMjoxLDI4MzoxfSxUXyk7dmFyIEQxZSxJMWUsTzFlLE4xZSxRSyxQMWUseUxlPUZyKG91LCJFZGdlTGFiZWxTaWRlU2VsZWN0aW9uIiwyODMsSHIsa3ZuLCQwbiksd3h0O0QoNDg4LDIyLHszOjEsMzQ6MSwyMjoxLDQ4ODoxfSxCM2UpO3ZhciBKSyx4TGUsa0xlPUZyKG91LCJFZGdlU3RyYWlnaHRlbmluZ1N0cmF0ZWd5Iiw0ODgsSHIsSnBuLHowbikseXh0O0QoMjgxLDIyLHszOjEsMzQ6MSwyMjoxLDI4MToxfSxDXyk7dmFyIEIxZSxFTGUsVExlLFpLLENMZSxTTGUsX0xlPUZyKG91LCJGaXhlZEFsaWdubWVudCIsMjgxLEhyLEV2bixSMG4pLHh4dDtEKDI4MiwyMix7MzoxLDM0OjEsMjI6MSwyODI6MX0sU18pO3ZhciBBTGUsTExlLE1MZSxETGUsVkwsSUxlLE9MZT1GcihvdSwiR3JhcGhDb21wYWN0aW9uU3RyYXRlZ3kiLDI4MixIcixUdm4sTzBuKSxreHQ7RCgyNTksMjIsezM6MSwzNDoxLDIyOjEsMjU5OjF9LHV5KTt2YXIgUlQsZVcsalQsdmYsVUwsdFcsJFQsQjYsblcsR0wsRjFlPUZyKG91LCJHcmFwaFByb3BlcnRpZXMiLDI1OSxIcixjM24sTjBuKSxFeHQ7RCgyOTksMjIsezM6MSwzNDoxLDIyOjEsMjk5OjF9LGtzZSk7dmFyIHZCLFIxZSxqMWUsJDFlPUZyKG91LCJHcmVlZHlTd2l0Y2hUeXBlIiwyOTksSHIscTJuLFAwbiksVHh0O0QoMzExLDIyLHszOjEsMzQ6MSwyMjoxLDMxMToxfSxFc2UpO3ZhciBVeCx3QixGNixDeHQ9RnIob3UsIkluTGF5ZXJDb25zdHJhaW50IiwzMTEsSHIsSDJuLEIwbiksU3h0O0QoNDI5LDIyLHszOjEsMzQ6MSwyMjoxLDQyOToxfSxGM2UpO3ZhciB6MWUsTkxlLFBMZT1GcihvdSwiSW50ZXJhY3RpdmVSZWZlcmVuY2VQb2ludCIsNDI5LEhyLEhwbixGMG4pLF94dCxCTGUsR3gsYzMsclcsRkxlLFJMZSxpVyxqTGUseUIsc1csS0wsS3gscHAscTFlLGFXLFdjLCRMZSxqYixMdSxIMWUsVjFlLHhCLGh2LHUzLFd4LHpMZSxZeCxrQixmNCxvMSwkZixVMWUsUjYsS2ksemkscUxlLEhMZSxWTGUsVUxlLEdMZSxHMWUsb1csamwsbDMsSzFlLFh4LFdMLFcxLGo2LGgzLCQ2LHo2LHpULGZ2LEtMZSxXMWUsWTFlLFF4O0QoMTcxLDIyLHszOjEsMzQ6MSwyMjoxLDE3MToxfSxsTyk7dmFyIFlMLCRiLFhMLGQ0LEVCLFdMZT1GcihvdSwiTGF5ZXJDb25zdHJhaW50IiwxNzEsSHIsVW1uLHEwbiksQXh0O0QoODU5LDEsUGYsWXJlKSxoLmhmPWZ1bmN0aW9uKHQpe3NuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxWRWUpLCIiKSwiRGlyZWN0aW9uIENvbmdydWVuY3kiKSwiU3BlY2lmaWVzIGhvdyBkcmF3aW5ncyBvZiB0aGUgc2FtZSBncmFwaCB3aXRoIGRpZmZlcmVudCBsYXlvdXQgZGlyZWN0aW9ucyBjb21wYXJlIHRvIGVhY2ggb3RoZXI6IGVpdGhlciBhIG5hdHVyYWwgcmVhZGluZyBkaXJlY3Rpb24gaXMgcHJlc2VydmVkIG9yIHRoZSBkcmF3aW5ncyBhcmUgcm90YXRlZCB2ZXJzaW9ucyBvZiBlYWNoIG90aGVyLiIpLGlNZSksKGcyKCkscHMpKSx3TGUpLHVuKChyMSgpLFBuKSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFVFZSksIiIpLCJGZWVkYmFjayBFZGdlcyIpLCJXaGV0aGVyIGZlZWRiYWNrIGVkZ2VzIHNob3VsZCBiZSBoaWdobGlnaHRlZCBieSByb3V0aW5nIGFyb3VuZCB0aGUgbm9kZXMuIiksKEhuKCksITEpKSx5YSksTnMpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsZkcpLCIiKSwiSW50ZXJhY3RpdmUgUmVmZXJlbmNlIFBvaW50IiksIkRldGVybWluZXMgd2hpY2ggcG9pbnQgb2YgYSBub2RlIGlzIGNvbnNpZGVyZWQgYnkgaW50ZXJhY3RpdmUgbGF5b3V0IHBoYXNlcy4iKSxsTWUpLHBzKSxQTGUpLHVuKFBuKSkpKSxRcyh0LGZHLHpoZSxrOXQpLFFzKHQsZkcscEwseDl0KSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsR0VlKSwiIiksIk1lcmdlIEVkZ2VzIiksIkVkZ2VzIHRoYXQgaGF2ZSBubyBwb3J0cyBhcmUgbWVyZ2VkIHNvIHRoZXkgdG91Y2ggdGhlIGNvbm5lY3RlZCBub2RlcyBhdCB0aGUgc2FtZSBwb2ludHMuIFdoZW4gdGhpcyBvcHRpb24gaXMgZGlzYWJsZWQsIG9uZSBwb3J0IGlzIGNyZWF0ZWQgZm9yIGVhY2ggZWRnZSBkaXJlY3RseSBjb25uZWN0ZWQgdG8gYSBub2RlLiBXaGVuIGl0IGlzIGVuYWJsZWQsIGFsbCBzdWNoIGluY29taW5nIGVkZ2VzIHNoYXJlIGFuIGlucHV0IHBvcnQsIGFuZCBhbGwgb3V0Z29pbmcgZWRnZXMgc2hhcmUgYW4gb3V0cHV0IHBvcnQuIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxLRWUpLCIiKSwiTWVyZ2UgSGllcmFyY2h5LUNyb3NzaW5nIEVkZ2VzIiksIklmIGhpZXJhcmNoaWNhbCBsYXlvdXQgaXMgYWN0aXZlLCBoaWVyYXJjaHktY3Jvc3NpbmcgZWRnZXMgdXNlIGFzIGZldyBoaWVyYXJjaGljYWwgcG9ydHMgYXMgcG9zc2libGUuIFRoZXkgYXJlIGJyb2tlbiBieSB0aGUgYWxnb3JpdGhtLCB3aXRoIGhpZXJhcmNoaWNhbCBwb3J0cyBpbnNlcnRlZCBhcyByZXF1aXJlZC4gVXN1YWxseSwgb25lIHN1Y2ggcG9ydCBpcyBjcmVhdGVkIGZvciBlYWNoIGVkZ2UgYXQgZWFjaCBoaWVyYXJjaHkgY3Jvc3NpbmcgcG9pbnQuIFdpdGggdGhpcyBvcHRpb24gc2V0IHRvIHRydWUsIHdlIHRyeSB0byBjcmVhdGUgYXMgZmV3IGhpZXJhcmNoaWNhbCBwb3J0cyBhcyBwb3NzaWJsZSBpbiB0aGUgcHJvY2Vzcy4gSW4gcGFydGljdWxhciwgYWxsIGVkZ2VzIHRoYXQgZm9ybSBhIGh5cGVyZWRnZSBjYW4gc2hhcmUgYSBwb3J0LiIpLCEwKSx5YSksTnMpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChOdW4obm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFdFZSksIiIpLCJBbGxvdyBOb24tRmxvdyBQb3J0cyBUbyBTd2l0Y2ggU2lkZXMiKSwiU3BlY2lmaWVzIHdoZXRoZXIgbm9uLWZsb3cgcG9ydHMgbWF5IHN3aXRjaCBzaWRlcyBpZiB0aGVpciBub2RlJ3MgcG9ydCBjb25zdHJhaW50cyBhcmUgZWl0aGVyIEZJWEVEX1NJREUgb3IgRklYRURfT1JERVIuIEEgbm9uLWZsb3cgcG9ydCBpcyBhIHBvcnQgb24gYSBzaWRlIHRoYXQgaXMgbm90IHBhcnQgb2YgdGhlIGN1cnJlbnRseSBjb25maWd1cmVkIGxheW91dCBmbG93LiBGb3IgaW5zdGFuY2UsIGdpdmVuIGEgbGVmdC10by1yaWdodCBsYXlvdXQgZGlyZWN0aW9uLCBub3J0aCBhbmQgc291dGggcG9ydHMgd291bGQgYmUgY29uc2lkZXJlZCBub24tZmxvdyBwb3J0cy4gRnVydGhlciBub3RlIHRoYXQgdGhlIHVuZGVybHlpbmcgY3JpdGVyaXVtIHdoZXRoZXIgdG8gc3dpdGNoIHNpZGVzIG9yIG5vdCBzb2xlbHkgcmVsaWVzIG9uIHRoZSBtaW5pbWl6YXRpb24gb2YgZWRnZSBjcm9zc2luZ3MuIEhlbmNlLCBlZGdlIGxlbmd0aCBhbmQgb3RoZXIgYWVzdGhldGljcyBjcml0ZXJpYSBhcmUgbm90IGFkZHJlc3NlZC4iKSwhMSkseWEpLE5zKSx1bih5dikpLGhlKGxlKHp0LDEpLGR0LDIsNixbIm9yZy5lY2xpcHNlLmVsay5sYXllcmVkLm5vcnRoT3JTb3V0aFBvcnQiXSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFlFZSksIiIpLCJQb3J0IFNvcnRpbmcgU3RyYXRlZ3kiKSwiT25seSByZWxldmFudCBmb3Igbm9kZXMgd2l0aCBGSVhFRF9TSURFIHBvcnQgY29uc3RyYWludHMuIERldGVybWluZXMgdGhlIHdheSBhIG5vZGUncyBwb3J0cyBhcmUgZGlzdHJpYnV0ZWQgb24gdGhlIHNpZGVzIG9mIGEgbm9kZSBpZiB0aGVpciBvcmRlciBpcyBub3QgcHJlc2NyaWJlZC4gVGhlIG9wdGlvbiBpcyBzZXQgb24gcGFyZW50IG5vZGVzLiIpLHZNZSkscHMpLF9EZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxYRWUpLCIiKSwiVGhvcm91Z2huZXNzIiksIkhvdyBtdWNoIGVmZm9ydCBzaG91bGQgYmUgc3BlbnQgdG8gcHJvZHVjZSBhIG5pY2UgbGF5b3V0LiIpLHB0KDcpKSxUYykscm8pLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsUUVlKSwiIiksIkFkZCBVbm5lY2Vzc2FyeSBCZW5kcG9pbnRzIiksIkFkZHMgYmVuZCBwb2ludHMgZXZlbiBpZiBhbiBlZGdlIGRvZXMgbm90IGNoYW5nZSBkaXJlY3Rpb24uIElmIHRydWUsIGVhY2ggbG9uZyBlZGdlIGR1bW15IHdpbGwgY29udHJpYnV0ZSBhIGJlbmQgcG9pbnQgdG8gaXRzIGVkZ2VzIGFuZCBoaWVyYXJjaHktY3Jvc3NpbmcgZWRnZXMgd2lsbCBhbHdheXMgZ2V0IGEgYmVuZCBwb2ludCB3aGVyZSB0aGV5IGNyb3NzIGhpZXJhcmNoeSBib3VuZGFyaWVzLiBCeSBkZWZhdWx0LCBiZW5kIHBvaW50cyBhcmUgb25seSBhZGRlZCB3aGVyZSBhbiBlZGdlIGNoYW5nZXMgZGlyZWN0aW9uLiIpLCExKSx5YSksTnMpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsSkVlKSwiIiksIkdlbmVyYXRlIFBvc2l0aW9uIGFuZCBMYXllciBJRHMiKSwiSWYgZW5hYmxlZCBwb3NpdGlvbiBpZCBhbmQgbGF5ZXIgaWQgYXJlIGdlbmVyYXRlZCwgd2hpY2ggYXJlIHVzdWFsbHkgb25seSB1c2VkIGludGVybmFsbHkgd2hlbiBzZXR0aW5nIHRoZSBpbnRlcmFjdGl2ZUxheW91dCBvcHRpb24uIFRoaXMgb3B0aW9uIHNob3VsZCBiZSBzcGVjaWZpZWQgb24gdGhlIHJvb3Qgbm9kZS4iKSwhMSkseWEpLE5zKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHpoZSksImN5Y2xlQnJlYWtpbmciKSwiQ3ljbGUgQnJlYWtpbmcgU3RyYXRlZ3kiKSwiU3RyYXRlZ3kgZm9yIGN5Y2xlIGJyZWFraW5nLiBDeWNsZSBicmVha2luZyBsb29rcyBmb3IgY3ljbGVzIGluIHRoZSBncmFwaCBhbmQgZGV0ZXJtaW5lcyB3aGljaCBlZGdlcyB0byByZXZlcnNlIHRvIGJyZWFrIHRoZSBjeWNsZXMuIFJldmVyc2VkIGVkZ2VzIHdpbGwgZW5kIHVwIHBvaW50aW5nIHRvIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gb2YgcmVndWxhciBlZGdlcyAodGhhdCBpcywgcmV2ZXJzZWQgZWRnZXMgd2lsbCBwb2ludCBsZWZ0IGlmIGVkZ2VzIHVzdWFsbHkgcG9pbnQgcmlnaHQpLiIpLHJNZSkscHMpLG1MZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxxUCksaGZlKSwiTm9kZSBMYXllcmluZyBTdHJhdGVneSIpLCJTdHJhdGVneSBmb3Igbm9kZSBsYXllcmluZy4iKSxkTWUpLHBzKSxwRGUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsWkVlKSxoZmUpLCJMYXllciBDb25zdHJhaW50IiksIkRldGVybWluZXMgYSBjb25zdHJhaW50IG9uIHRoZSBwbGFjZW1lbnQgb2YgdGhlIG5vZGUgcmVnYXJkaW5nIHRoZSBsYXllcmluZy4iKSxoTWUpLHBzKSxXTGUpLHVuKGhhKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsZVRlKSxoZmUpLCJMYXllciBDaG9pY2UgQ29uc3RyYWludCIpLCJBbGxvd3MgdG8gc2V0IGEgY29uc3RyYWludCByZWdhcmRpbmcgdGhlIGxheWVyIHBsYWNlbWVudCBvZiBhIG5vZGUuIExldCBpIGJlIHRoZSB2YWx1ZSBvZiB0ZWggY29uc3RyYWludC4gQXNzdW1lZCB0aGUgZHJhd2luZyBoYXMgbiBsYXllcnMgYW5kIGkgPCBuLiBJZiBzZXQgdG8gaSwgaXQgZXhwcmVzc2VzIHRoYXQgdGhlIG5vZGUgc2hvdWxkIGJlIHBsYWNlZCBpbiBpLXRoIGxheWVyLiBTaG91bGQgaT49biBiZSB0cnVlIHRoZW4gdGhlIG5vZGUgaXMgcGxhY2VkIGluIHRoZSBsYXN0IGxheWVyIG9mIHRoZSBkcmF3aW5nLiBOb3RlIHRoYXQgdGhpcyBvcHRpb24gaXMgbm90IHBhcnQgb2YgYW55IG9mIEVMSyBMYXllcmVkJ3MgZGVmYXVsdCBjb25maWd1cmF0aW9ucyBidXQgaXMgb25seSBldmFsdWF0ZWQgYXMgcGFydCBvZiB0aGUgYEludGVyYWN0aXZlTGF5ZXJlZEdyYXBoVmlzaXRvcmAsIHdoaWNoIG11c3QgYmUgYXBwbGllZCBtYW51YWxseSBvciB1c2VkIHZpYSB0aGUgYERpYWdyYW1MYXlvdXRFbmdpbmUuIiksbnVsbCksVGMpLHJvKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHRUZSksaGZlKSwiTGF5ZXIgSUQiKSwiTGF5ZXIgaWRlbnRpZmllciB0aGF0IHdhcyBjYWxjdWxhdGVkIGJ5IEVMSyBMYXllcmVkIGZvciBhIG5vZGUuIFRoaXMgaXMgb25seSBnZW5lcmF0ZWQgaWYgaW50ZXJhY3RpdmVMYXlvdCBvciBnZW5lcmF0ZVBvc2l0aW9uQW5kTGF5ZXJJZHMgaXMgc2V0LiIpLHB0KC0xKSksVGMpLHJvKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHFoZSksSjN0KSwiVXBwZXIgQm91bmQgT24gV2lkdGggW01pbldpZHRoIExheWVyZXJdIiksIkRlZmluZXMgYSBsb29zZSB1cHBlciBib3VuZCBvbiB0aGUgd2lkdGggb2YgdGhlIE1pbldpZHRoIGxheWVyZXIuIElmIHNldCB0byAnLTEnIG11bHRpcGxlIHZhbHVlcyBhcmUgdGVzdGVkIGFuZCB0aGUgYmVzdCByZXN1bHQgaXMgc2VsZWN0ZWQuIikscHQoNCkpLFRjKSxybyksdW4oUG4pKSkpLFFzKHQscWhlLHFQLEw5dCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEhoZSksSjN0KSwiVXBwZXIgTGF5ZXIgRXN0aW1hdGlvbiBTY2FsaW5nIEZhY3RvciBbTWluV2lkdGggTGF5ZXJlcl0iKSwiTXVsdGlwbGllZCB3aXRoIFVwcGVyIEJvdW5kIE9uIFdpZHRoIGZvciBkZWZpbmluZyBhbiB1cHBlciBib3VuZCBvbiB0aGUgd2lkdGggb2YgbGF5ZXJzIHdoaWNoIGhhdmVuJ3QgYmVlbiBkZXRlcm1pbmVkIHlldCwgYnV0IHdob3NlIG1heGltdW0gd2lkdGggaGFkIGJlZW4gKHJvdWdobHkpIGVzdGltYXRlZCBieSB0aGUgTWluV2lkdGggYWxnb3JpdGhtLiBDb21wZW5zYXRlcyBmb3IgdG9vIGhpZ2ggZXN0aW1hdGlvbnMuIElmIHNldCB0byAnLTEnIG11bHRpcGxlIHZhbHVlcyBhcmUgdGVzdGVkIGFuZCB0aGUgYmVzdCByZXN1bHQgaXMgc2VsZWN0ZWQuIikscHQoMikpLFRjKSxybyksdW4oUG4pKSkpLFFzKHQsSGhlLHFQLEQ5dCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFZoZSksWjN0KSwiTm9kZSBQcm9tb3Rpb24gU3RyYXRlZ3kiKSwiUmVkdWNlcyBudW1iZXIgb2YgZHVtbXkgbm9kZXMgYWZ0ZXIgbGF5ZXJpbmcgcGhhc2UgKGlmIHBvc3NpYmxlKS4iKSxmTWUpLHBzKSxURGUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsVWhlKSxaM3QpLCJNYXggTm9kZSBQcm9tb3Rpb24gSXRlcmF0aW9ucyIpLCJMaW1pdHMgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIGZvciBub2RlIHByb21vdGlvbi4iKSxwdCgwKSksVGMpLHJvKSx1bihQbikpKSksUXModCxVaGUsVmhlLG51bGwpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxHaGUpLCJsYXllcmluZy5jb2ZmbWFuR3JhaGFtIiksIkxheWVyIEJvdW5kIiksIlRoZSBtYXhpbXVtIG51bWJlciBvZiBub2RlcyBhbGxvd2VkIHBlciBsYXllci4iKSxwdChJaSkpLFRjKSxybyksdW4oUG4pKSkpLFFzKHQsR2hlLHFQLFQ5dCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHBMKSxnVCksIkNyb3NzaW5nIE1pbmltaXphdGlvbiBTdHJhdGVneSIpLCJTdHJhdGVneSBmb3IgY3Jvc3NpbmcgbWluaW1pemF0aW9uLiIpLG5NZSkscHMpLGRMZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxuVGUpLGdUKSwiRm9yY2UgTm9kZSBNb2RlbCBPcmRlciIpLCJUaGUgbm9kZSBvcmRlciBnaXZlbiBieSB0aGUgbW9kZWwgZG9lcyBub3QgY2hhbmdlIHRvIHByb2R1Y2UgYSBiZXR0ZXIgbGF5b3V0LiBFLmcuIGlmIG5vZGUgQSBpcyBiZWZvcmUgbm9kZSBCIGluIHRoZSBtb2RlbCB0aGlzIGlzIG5vdCBjaGFuZ2VkIGR1cmluZyBjcm9zc2luZyBtaW5pbWl6YXRpb24uIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSBub2RlIG1vZGVsIG9yZGVyIGlzIGFscmVhZHkgcmVzcGVjdGVkIGJlZm9yZSBjcm9zc2luZyBtaW5pbWl6YXRpb24uIFRoaXMgY2FuIGJlIGFjaGlldmVkIGJ5IHNldHRpbmcgY29uc2lkZXJNb2RlbE9yZGVyLnN0cmF0ZWd5IHRvIE5PREVTX0FORF9FREdFUy4iKSwhMSkseWEpLE5zKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEtoZSksZ1QpLCJIaWVyYXJjaGljYWwgU3dlZXBpbmVzcyIpLCJIb3cgbGlrZWx5IGl0IGlzIHRvIHVzZSBjcm9zcy1oaWVyYXJjaHkgKDEpIHZzIGJvdHRvbS11cCAoLTEpLiIpLC4xKSxmbyksdGEpLHVuKFBuKSkpKSxRcyh0LEtoZSxDRyxXeHQpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxXaGUpLGdUKSwiU2VtaS1JbnRlcmFjdGl2ZSBDcm9zc2luZyBNaW5pbWl6YXRpb24iKSwiUHJlc2VydmVzIHRoZSBvcmRlciBvZiBub2RlcyB3aXRoaW4gYSBsYXllciBidXQgc3RpbGwgbWluaW1pemVzIGNyb3NzaW5ncyBiZXR3ZWVuIGVkZ2VzIGNvbm5lY3RpbmcgbG9uZyBlZGdlIGR1bW1pZXMuIERlcml2ZXMgdGhlIGRlc2lyZWQgb3JkZXIgZnJvbSBwb3NpdGlvbnMgc3BlY2lmaWVkIGJ5IHRoZSAnb3JnLmVjbGlwc2UuZWxrLnBvc2l0aW9uJyBsYXlvdXQgb3B0aW9uLiBSZXF1aXJlcyBhIGNyb3NzaW5nIG1pbmltaXphdGlvbiBzdHJhdGVneSB0aGF0IGlzIGFibGUgdG8gcHJvY2VzcyAnaW4tbGF5ZXInIGNvbnN0cmFpbnRzLiIpLCExKSx5YSksTnMpLHVuKFBuKSkpKSxRcyh0LFdoZSxwTCxlOXQpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxyVGUpLGdUKSwiSW4gTGF5ZXIgUHJlZGVjZXNzb3Igb2YiKSwiQWxsb3dzIHRvIHNldCBhIGNvbnN0cmFpbnQgd2hpY2ggc3BlY2lmaWVzIG9mIHdoaWNoIG5vZGUgdGhlIGN1cnJlbnQgbm9kZSBpcyB0aGUgcHJlZGVjZXNzb3IuIElmIHNldCB0byAncycgdGhlbiB0aGUgbm9kZSBpcyB0aGUgcHJlZGVjZXNzb3Igb2YgJ3MnIGFuZCBpcyBpbiB0aGUgc2FtZSBsYXllciIpLG51bGwpLEo2KSx6dCksdW4oaGEpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxpVGUpLGdUKSwiSW4gTGF5ZXIgU3VjY2Vzc29yIG9mIiksIkFsbG93cyB0byBzZXQgYSBjb25zdHJhaW50IHdoaWNoIHNwZWNpZmllcyBvZiB3aGljaCBub2RlIHRoZSBjdXJyZW50IG5vZGUgaXMgdGhlIHN1Y2Nlc3Nvci4gSWYgc2V0IHRvICdzJyB0aGVuIHRoZSBub2RlIGlzIHRoZSBzdWNjZXNzb3Igb2YgJ3MnIGFuZCBpcyBpbiB0aGUgc2FtZSBsYXllciIpLG51bGwpLEo2KSx6dCksdW4oaGEpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxzVGUpLGdUKSwiUG9zaXRpb24gQ2hvaWNlIENvbnN0cmFpbnQiKSwiQWxsb3dzIHRvIHNldCBhIGNvbnN0cmFpbnQgcmVnYXJkaW5nIHRoZSBwb3NpdGlvbiBwbGFjZW1lbnQgb2YgYSBub2RlIGluIGEgbGF5ZXIuIEFzc3VtZWQgdGhlIGxheWVyIGluIHdoaWNoIHRoZSBub2RlIHBsYWNlZCBpbmNsdWRlcyBuIG90aGVyIG5vZGVzIGFuZCBpIDwgbi4gSWYgc2V0IHRvIGksIGl0IGV4cHJlc3NlcyB0aGF0IHRoZSBub2RlIHNob3VsZCBiZSBwbGFjZWQgYXQgdGhlIGktdGggcG9zaXRpb24uIFNob3VsZCBpPj1uIGJlIHRydWUgdGhlbiB0aGUgbm9kZSBpcyBwbGFjZWQgYXQgdGhlIGxhc3QgcG9zaXRpb24gaW4gdGhlIGxheWVyLiBOb3RlIHRoYXQgdGhpcyBvcHRpb24gaXMgbm90IHBhcnQgb2YgYW55IG9mIEVMSyBMYXllcmVkJ3MgZGVmYXVsdCBjb25maWd1cmF0aW9ucyBidXQgaXMgb25seSBldmFsdWF0ZWQgYXMgcGFydCBvZiB0aGUgYEludGVyYWN0aXZlTGF5ZXJlZEdyYXBoVmlzaXRvcmAsIHdoaWNoIG11c3QgYmUgYXBwbGllZCBtYW51YWxseSBvciB1c2VkIHZpYSB0aGUgYERpYWdyYW1MYXlvdXRFbmdpbmUuIiksbnVsbCksVGMpLHJvKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGFUZSksZ1QpLCJQb3NpdGlvbiBJRCIpLCJQb3NpdGlvbiB3aXRoaW4gYSBsYXllciB0aGF0IHdhcyBkZXRlcm1pbmVkIGJ5IEVMSyBMYXllcmVkIGZvciBhIG5vZGUuIFRoaXMgaXMgb25seSBnZW5lcmF0ZWQgaWYgaW50ZXJhY3RpdmVMYXlvdCBvciBnZW5lcmF0ZVBvc2l0aW9uQW5kTGF5ZXJJZHMgaXMgc2V0LiIpLHB0KC0xKSksVGMpLHJvKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LG9UZSksZXl0KSwiR3JlZWR5IFN3aXRjaCBBY3RpdmF0aW9uIFRocmVzaG9sZCIpLCJCeSBkZWZhdWx0IGl0IGlzIGRlY2lkZWQgYXV0b21hdGljYWxseSBpZiB0aGUgZ3JlZWR5IHN3aXRjaCBpcyBhY3RpdmF0ZWQgb3Igbm90LiBUaGUgZGVjaXNpb24gaXMgYmFzZWQgb24gd2hldGhlciB0aGUgc2l6ZSBvZiB0aGUgaW5wdXQgZ3JhcGggKHdpdGhvdXQgZHVtbXkgbm9kZXMpIGlzIHNtYWxsZXIgdGhhbiB0aGUgdmFsdWUgb2YgdGhpcyBvcHRpb24uIEEgJzAnIGVuZm9yY2VzIHRoZSBhY3RpdmF0aW9uLiIpLHB0KDQwKSksVGMpLHJvKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFloZSksZXl0KSwiR3JlZWR5IFN3aXRjaCBDcm9zc2luZyBNaW5pbWl6YXRpb24iKSwiR3JlZWR5IFN3aXRjaCBzdHJhdGVneSBmb3IgY3Jvc3NpbmcgbWluaW1pemF0aW9uLiBUaGUgZ3JlZWR5IHN3aXRjaCBoZXVyaXN0aWMgaXMgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHJlZ3VsYXIgY3Jvc3NpbmcgbWluaW1pemF0aW9uIGFzIGEgcG9zdC1wcm9jZXNzb3IuIE5vdGUgdGhhdCBpZiAnaGllcmFyY2h5SGFuZGxpbmcnIGlzIHNldCB0byAnSU5DTFVERV9DSElMRFJFTicsIHRoZSAnZ3JlZWR5U3dpdGNoSGllcmFyY2hpY2FsLnR5cGUnIG9wdGlvbiBtdXN0IGJlIHVzZWQuIiksdE1lKSxwcyksJDFlKSx1bihQbikpKSksUXModCxZaGUscEwsR3h0KSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsZEcpLCJjcm9zc2luZ01pbmltaXphdGlvbi5ncmVlZHlTd2l0Y2hIaWVyYXJjaGljYWwiKSwiR3JlZWR5IFN3aXRjaCBDcm9zc2luZyBNaW5pbWl6YXRpb24gKGhpZXJhcmNoaWNhbCkiKSwiQWN0aXZhdGVzIHRoZSBncmVlZHkgc3dpdGNoIGhldXJpc3RpYyBpbiBjYXNlIGhpZXJhcmNoaWNhbCBsYXlvdXQgaXMgdXNlZC4gVGhlIGRpZmZlcmVuY2VzIHRvIHRoZSBub24taGllcmFyY2hpY2FsIGNhc2UgKHNlZSAnZ3JlZWR5U3dpdGNoLnR5cGUnKSBhcmU6IDEpIGdyZWVkeSBzd2l0Y2ggaXMgaW5hY3RpdmUgYnkgZGVmYXVsdCwgMykgb25seSB0aGUgb3B0aW9uIHZhbHVlIHNldCBvbiB0aGUgbm9kZSBhdCB3aGljaCBoaWVyYXJjaGljYWwgbGF5b3V0IHN0YXJ0cyBpcyByZWxldmFudCwgYW5kIDIpIGlmIGl0J3MgYWN0aXZhdGVkIGJ5IHRoZSB1c2VyLCBpdCBwcm9wZXJseSBhZGRyZXNzZXMgaGllcmFyY2h5LWNyb3NzaW5nIGVkZ2VzLiIpLGVNZSkscHMpLCQxZSksdW4oUG4pKSkpLFFzKHQsZEcscEwsSHh0KSxRcyh0LGRHLENHLFZ4dCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGs2KSx0eXQpLCJOb2RlIFBsYWNlbWVudCBTdHJhdGVneSIpLCJTdHJhdGVneSBmb3Igbm9kZSBwbGFjZW1lbnQuIiksbU1lKSxwcyksd0RlKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LGdHKSx0eXQpLCJGYXZvciBTdHJhaWdodCBFZGdlcyBPdmVyIEJhbGFuY2luZyIpLCJGYXZvciBzdHJhaWdodCBlZGdlcyBvdmVyIGEgYmFsYW5jZWQgbm9kZSBwbGFjZW1lbnQuIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIGRldGVybWluZWQgYXV0b21hdGljYWxseSBiYXNlZCBvbiB0aGUgdXNlZCAnZWRnZVJvdXRpbmcnLiBGb3IgYW4gb3J0aG9nb25hbCBzdHlsZSBpdCBpcyBzZXQgdG8gdHJ1ZSwgZm9yIGFsbCBvdGhlciBzdHlsZXMgdG8gZmFsc2UuIikseWEpLE5zKSx1bihQbikpKSksUXModCxnRyxrNixxOXQpLFFzKHQsZ0csazYsSDl0KSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsWGhlKSxueXQpLCJCSyBFZGdlIFN0cmFpZ2h0ZW5pbmciKSwiU3BlY2lmaWVzIHdoZXRoZXIgdGhlIEJyYW5kZXMgS29lcGYgbm9kZSBwbGFjZXIgdHJpZXMgdG8gaW5jcmVhc2UgdGhlIG51bWJlciBvZiBzdHJhaWdodCBlZGdlcyBhdCB0aGUgZXhwZW5zZSBvZiBkaWFncmFtIHNpemUuIFRoZXJlIGlzIGEgc3VidGxlIGRpZmZlcmVuY2UgdG8gdGhlICdmYXZvclN0cmFpZ2h0RWRnZXMnIG9wdGlvbiwgd2hpY2ggZGVjaWRlcyB3aGV0aGVyIGEgYmFsYW5jZWQgcGxhY2VtZW50IG9mIHRoZSBub2RlcyBpcyBkZXNpcmVkLCBvciBub3QuIEluIGJrIHRlcm1zIHRoaXMgbWVhbnMgY29tYmluaW5nIHRoZSBmb3VyIGFsaWdubWVudHMgaW50byBhIHNpbmdsZSBiYWxhbmNlZCBvbmUsIG9yIG5vdC4gVGhpcyBvcHRpb24gb24gdGhlIG90aGVyIGhhbmQgdHJpZXMgdG8gc3RyYWlnaHRlbiBhZGRpdGlvbmFsIGVkZ2VzIGR1cmluZyB0aGUgY3JlYXRpb24gb2YgZWFjaCBvZiB0aGUgZm91ciBhbGlnbm1lbnRzLiIpLGdNZSkscHMpLGtMZSksdW4oUG4pKSkpLFFzKHQsWGhlLGs2LFI5dCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFFoZSksbnl0KSwiQksgRml4ZWQgQWxpZ25tZW50IiksIlRlbGxzIHRoZSBCSyBub2RlIHBsYWNlciB0byB1c2UgYSBjZXJ0YWluIGFsaWdubWVudCAob3V0IG9mIGl0cyBmb3VyKSBpbnN0ZWFkIG9mIHRoZSBvbmUgcHJvZHVjaW5nIHRoZSBzbWFsbGVzdCBoZWlnaHQsIG9yIHRoZSBjb21iaW5hdGlvbiBvZiBhbGwgZm91ci4iKSxwTWUpLHBzKSxfTGUpLHVuKFBuKSkpKSxRcyh0LFFoZSxrNiwkOXQpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxKaGUpLCJub2RlUGxhY2VtZW50LmxpbmVhclNlZ21lbnRzIiksIkxpbmVhciBTZWdtZW50cyBEZWZsZWN0aW9uIERhbXBlbmluZyIpLCJEYW1wZW5zIHRoZSBtb3ZlbWVudCBvZiBub2RlcyB0byBrZWVwIHRoZSBkaWFncmFtIGZyb20gZ2V0dGluZyB0b28gbGFyZ2UuIiksLjMpLGZvKSx0YSksdW4oUG4pKSkpLFFzKHQsSmhlLGs2LFU5dCksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LFpoZSksIm5vZGVQbGFjZW1lbnQubmV0d29ya1NpbXBsZXgiKSwiTm9kZSBGbGV4aWJpbGl0eSIpLCJBaW1zIGF0IHNob3J0ZXIgYW5kIHN0cmFpZ2h0ZXIgZWRnZXMuIFR3byBjb25maWd1cmF0aW9ucyBhcmUgcG9zc2libGU6IChhKSBhbGxvdyBwb3J0cyB0byBtb3ZlIGZyZWVseSBvbiB0aGUgc2lkZSB0aGV5IGFyZSBhc3NpZ25lZCB0byAodGhlIG9yZGVyIGlzIGFsd2F5cyBkZWZpbmVkIGJlZm9yZWhhbmQpLCAoYikgYWRkaXRpb25hbGx5IGFsbG93IHRvIGVubGFyZ2UgYSBub2RlIHdoZXJldmVyIGl0IGhlbHBzLiBJZiB0aGlzIG9wdGlvbiBpcyBub3QgY29uZmlndXJlZCBmb3IgYSBub2RlLCB0aGUgJ25vZGVGbGV4aWJpbGl0eS5kZWZhdWx0JyB2YWx1ZSBpcyB1c2VkLCB3aGljaCBpcyBzcGVjaWZpZWQgZm9yIHRoZSBub2RlJ3MgcGFyZW50LiIpLHBzKSxtZGUpLHVuKGhhKSkpKSxRcyh0LFpoZSxrNixZOXQpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxlZmUpLCJub2RlUGxhY2VtZW50Lm5ldHdvcmtTaW1wbGV4Lm5vZGVGbGV4aWJpbGl0eSIpLCJOb2RlIEZsZXhpYmlsaXR5IERlZmF1bHQiKSwiRGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ25vZGVGbGV4aWJpbGl0eScgb3B0aW9uIGZvciB0aGUgY2hpbGRyZW4gb2YgYSBoaWVyYXJjaGljYWwgbm9kZS4iKSxiTWUpLHBzKSxtZGUpLHVuKFBuKSkpKSxRcyh0LGVmZSxrNixXOXQpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxjVGUpLHJ5dCksIlNlbGYtTG9vcCBEaXN0cmlidXRpb24iKSwiQWx0ZXIgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgbG9vcHMgYXJvdW5kIHRoZSBub2RlLiBJdCBvbmx5IHRha2VzIGVmZmVjdCBmb3IgUG9ydENvbnN0cmFpbnRzLkZSRUUuIiksb01lKSxwcyksTURlKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHVUZSkscnl0KSwiU2VsZi1Mb29wIE9yZGVyaW5nIiksIkFsdGVyIHRoZSBvcmRlcmluZyBvZiB0aGUgbG9vcHMgdGhleSBjYW4gZWl0aGVyIGJlIHN0YWNrZWQgb3Igc2VxdWVuY2VkLiBJdCBvbmx5IHRha2VzIGVmZmVjdCBmb3IgUG9ydENvbnN0cmFpbnRzLkZSRUUuIiksY01lKSxwcyksRERlKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHBHKSwiZWRnZVJvdXRpbmcuc3BsaW5lcyIpLCJTcGxpbmUgUm91dGluZyBNb2RlIiksIlNwZWNpZmllcyB0aGUgd2F5IGNvbnRyb2wgcG9pbnRzIGFyZSBhc3NlbWJsZWQgZm9yIGVhY2ggaW5kaXZpZHVhbCBlZGdlLiBDT05TRVJWQVRJVkUgZW5zdXJlcyB0aGF0IGVkZ2VzIGFyZSBwcm9wZXJseSByb3V0ZWQgYXJvdW5kIHRoZSBub2RlcyBidXQgZmVlbHMgcmF0aGVyIG9ydGhvZ29uYWwgYXQgdGltZXMuIFNMT1BQWSB1c2VzIGZld2VyIGNvbnRyb2wgcG9pbnRzIHRvIG9idGFpbiBjdXJ2aWVyIGVkZ2Ugcm91dGVzIGJ1dCBtYXkgcmVzdWx0IGluIGVkZ2VzIG92ZXJsYXBwaW5nIG5vZGVzLiIpLHVNZSkscHMpLE9EZSksdW4oUG4pKSkpLFFzKHQscEcsSFAsaDl0KSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsYkcpLCJlZGdlUm91dGluZy5zcGxpbmVzLnNsb3BweSIpLCJTbG9wcHkgU3BsaW5lIExheWVyIFNwYWNpbmcgRmFjdG9yIiksIlNwYWNpbmcgZmFjdG9yIGZvciByb3V0aW5nIGFyZWEgYmV0d2VlbiBsYXllcnMgd2hlbiB1c2luZyBzbG9wcHkgc3BsaW5lIHJvdXRpbmcuIiksLjIpLGZvKSx0YSksdW4oUG4pKSkpLFFzKHQsYkcsSFAsZDl0KSxRcyh0LGJHLHBHLGc5dCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHRmZSksImVkZ2VSb3V0aW5nLnBvbHlsaW5lIiksIlNsb3BlZCBFZGdlIFpvbmUgV2lkdGgiKSwiV2lkdGggb2YgdGhlIHN0cmlwIHRvIHRoZSBsZWZ0IGFuZCB0byB0aGUgcmlnaHQgb2YgZWFjaCBsYXllciB3aGVyZSB0aGUgcG9seWxpbmUgZWRnZSByb3V0ZXIgaXMgYWxsb3dlZCB0byByZWZyYWluIGZyb20gZW5zdXJpbmcgdGhhdCBlZGdlcyBhcmUgcm91dGVkIGhvcml6b250YWxseS4gVGhpcyBwcmV2ZW50cyBhd2t3YXJkIGJlbmQgcG9pbnRzIGZvciBub2RlcyB0aGF0IGV4dGVudCBhbG1vc3QgdG8gdGhlIGVkZ2Ugb2YgdGhlaXIgbGF5ZXIuIiksMiksZm8pLHRhKSx1bihQbikpKSksUXModCx0ZmUsSFAsbzl0KSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsbFRlKSxVMSksIlNwYWNpbmcgQmFzZSBWYWx1ZSIpLCJBbiBvcHRpb25hbCBiYXNlIHZhbHVlIGZvciBhbGwgb3RoZXIgbGF5b3V0IG9wdGlvbnMgb2YgdGhlICdzcGFjaW5nJyBncm91cC4gSXQgY2FuIGJlIHVzZWQgdG8gY29udmVuaWVudGx5IGFsdGVyIHRoZSBvdmVyYWxsICdzcGFjaW91c25lc3MnIG9mIHRoZSBkcmF3aW5nLiBXaGVuZXZlciBhbiBleHBsaWNpdCB2YWx1ZSBpcyBzZXQgZm9yIHRoZSBvdGhlciBsYXlvdXQgb3B0aW9ucywgdGhpcyBiYXNlIHZhbHVlIHdpbGwgaGF2ZSBubyBlZmZlY3QuIFRoZSBiYXNlIHZhbHVlIGlzIG5vdCBpbmhlcml0ZWQsIGkuZS4gaXQgbXVzdCBiZSBzZXQgZm9yIGVhY2ggaGllcmFyY2hpY2FsIG5vZGUuIiksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGhUZSksVTEpLCJFZGdlIE5vZGUgQmV0d2VlbiBMYXllcnMgU3BhY2luZyIpLCJUaGUgc3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBub2RlcyBhbmQgZWRnZXMgdGhhdCBhcmUgcm91dGVkIG5leHQgdG8gdGhlIG5vZGUncyBsYXllci4gRm9yIHRoZSBzcGFjaW5nIGJldHdlZW4gbm9kZXMgYW5kIGVkZ2VzIHRoYXQgY3Jvc3MgdGhlIG5vZGUncyBsYXllciAnc3BhY2luZy5lZGdlTm9kZScgaXMgdXNlZC4iKSwxMCksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGZUZSksVTEpLCJFZGdlIEVkZ2UgQmV0d2VlbiBMYXllciBTcGFjaW5nIiksIlNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gcGFpcnMgb2YgZWRnZXMgdGhhdCBhcmUgcm91dGVkIGJldHdlZW4gdGhlIHNhbWUgcGFpciBvZiBsYXllcnMuIE5vdGUgdGhhdCAnc3BhY2luZy5lZGdlRWRnZScgaXMgdXNlZCBmb3IgdGhlIHNwYWNpbmcgYmV0d2VlbiBwYWlycyBvZiBlZGdlcyBjcm9zc2luZyB0aGUgc2FtZSBsYXllci4iKSwxMCksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGRUZSksVTEpLCJOb2RlIE5vZGUgQmV0d2VlbiBMYXllcnMgU3BhY2luZyIpLCJUaGUgc3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBhbnkgcGFpciBvZiBub2RlcyBvZiB0d28gYWRqYWNlbnQgbGF5ZXJzLiBOb3RlIHRoYXQgJ3NwYWNpbmcubm9kZU5vZGUnIGlzIHVzZWQgZm9yIHRoZSBzcGFjaW5nIGJldHdlZW4gbm9kZXMgd2l0aGluIHRoZSBsYXllciBpdHNlbGYuIiksMjApLGZvKSx0YSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxnVGUpLFRUZSksIkRpcmVjdGlvbiBQcmlvcml0eSIpLCJEZWZpbmVzIGhvdyBpbXBvcnRhbnQgaXQgaXMgdG8gaGF2ZSBhIGNlcnRhaW4gZWRnZSBwb2ludCBpbnRvIHRoZSBkaXJlY3Rpb24gb2YgdGhlIG92ZXJhbGwgbGF5b3V0LiBUaGlzIG9wdGlvbiBpcyBldmFsdWF0ZWQgZHVyaW5nIHRoZSBjeWNsZSBicmVha2luZyBwaGFzZS4iKSxwdCgwKSksVGMpLHJvKSx1bih6ZCkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHBUZSksVFRlKSwiU2hvcnRuZXNzIFByaW9yaXR5IiksIkRlZmluZXMgaG93IGltcG9ydGFudCBpdCBpcyB0byBrZWVwIGFuIGVkZ2UgYXMgc2hvcnQgYXMgcG9zc2libGUuIFRoaXMgb3B0aW9uIGlzIGV2YWx1YXRlZCBkdXJpbmcgdGhlIGxheWVyaW5nIHBoYXNlLiIpLHB0KDApKSxUYykscm8pLHVuKHpkKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsYlRlKSxUVGUpLCJTdHJhaWdodG5lc3MgUHJpb3JpdHkiKSwiRGVmaW5lcyBob3cgaW1wb3J0YW50IGl0IGlzIHRvIGtlZXAgYW4gZWRnZSBzdHJhaWdodCwgaS5lLiBhbGlnbmVkIHdpdGggb25lIG9mIHRoZSB0d28gYXhlcy4gVGhpcyBvcHRpb24gaXMgZXZhbHVhdGVkIGR1cmluZyBub2RlIHBsYWNlbWVudC4iKSxwdCgwKSksVGMpLHJvKSx1bih6ZCkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LG5mZSksQ1RlKSx3M3QpLCJUcmllcyB0byBmdXJ0aGVyIGNvbXBhY3QgY29tcG9uZW50cyAoZGlzY29ubmVjdGVkIHN1Yi1ncmFwaHMpLiIpLCExKSx5YSksTnMpLHVuKFBuKSkpKSxRcyh0LG5mZSxsTCwhMCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LG1UZSksaXl0KSwiUG9zdCBDb21wYWN0aW9uIFN0cmF0ZWd5Iiksc3l0KSxYTGUpLHBzKSxPTGUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsdlRlKSxpeXQpLCJQb3N0IENvbXBhY3Rpb24gQ29uc3RyYWludCBDYWxjdWxhdGlvbiIpLHN5dCksWUxlKSxwcyksaExlKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LG1HKSxTVGUpLCJIaWdoIERlZ3JlZSBOb2RlIFRyZWF0bWVudCIpLCJNYWtlcyByb29tIGFyb3VuZCBoaWdoIGRlZ3JlZSBub2RlcyB0byBwbGFjZSBsZWFmcyBhbmQgdHJlZXMuIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxyZmUpLFNUZSksIkhpZ2ggRGVncmVlIE5vZGUgVGhyZXNob2xkIiksIldoZXRoZXIgYSBub2RlIGlzIGNvbnNpZGVyZWQgdG8gaGF2ZSBhIGhpZ2ggZGVncmVlLiIpLHB0KDE2KSksVGMpLHJvKSx1bihQbikpKSksUXModCxyZmUsbUcsITApLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxpZmUpLFNUZSksIkhpZ2ggRGVncmVlIE5vZGUgTWF4aW11bSBUcmVlIEhlaWdodCIpLCJNYXhpbXVtIGhlaWdodCBvZiBhIHN1YnRyZWUgY29ubmVjdGVkIHRvIGEgaGlnaCBkZWdyZWUgbm9kZSB0byBiZSBtb3ZlZCB0byBzZXBhcmF0ZSBsYXllcnMuIikscHQoNSkpLFRjKSxybyksdW4oUG4pKSkpLFFzKHQsaWZlLG1HLCEwKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsZnApLF9UZSksIkdyYXBoIFdyYXBwaW5nIFN0cmF0ZWd5IiksIkZvciBjZXJ0YWluIGdyYXBocyBhbmQgY2VydGFpbiBwcmVzY3JpYmVkIGRyYXdpbmcgYXJlYXMgaXQgbWF5IGJlIGRlc2lyYWJsZSB0byBzcGxpdCB0aGUgbGFpZCBvdXQgZ3JhcGggaW50byBjaHVua3MgdGhhdCBhcmUgcGxhY2VkIHNpZGUgYnkgc2lkZS4gVGhlIGVkZ2VzIHRoYXQgY29ubmVjdCBkaWZmZXJlbnQgY2h1bmtzIGFyZSAnd3JhcHBlZCcgYXJvdW5kIGZyb20gdGhlIGVuZCBvZiBvbmUgY2h1bmsgdG8gdGhlIHN0YXJ0IG9mIHRoZSBvdGhlciBjaHVuay4gVGhlIHBvaW50cyBiZXR3ZWVuIHRoZSBjaHVua3MgYXJlIHJlZmVycmVkIHRvIGFzICdjdXRzJy4iKSx4TWUpLHBzKSxGRGUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsdkcpLF9UZSksIkFkZGl0aW9uYWwgV3JhcHBlZCBFZGdlcyBTcGFjaW5nIiksIlRvIHZpc3VhbGx5IHNlcGFyYXRlIGVkZ2VzIHRoYXQgYXJlIHdyYXBwZWQgZnJvbSByZWd1bGFybHkgcm91dGVkIGVkZ2VzIGFuIGFkZGl0aW9uYWwgc3BhY2luZyB2YWx1ZSBjYW4gYmUgc3BlY2lmaWVkIGluIGZvcm0gb2YgdGhpcyBsYXlvdXQgb3B0aW9uLiBUaGUgc3BhY2luZyBpcyBhZGRlZCB0byB0aGUgcmVndWxhciBlZGdlTm9kZSBzcGFjaW5nLiIpLDEwKSxmbyksdGEpLHVuKFBuKSkpKSxRcyh0LHZHLGZwLGNrdCksUXModCx2RyxmcCx1a3QpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCx3RyksX1RlKSwiQ29ycmVjdGlvbiBGYWN0b3IgZm9yIFdyYXBwaW5nIiksIkF0IHRpbWVzIGFuZCBmb3IgY2VydGFpbiB0eXBlcyBvZiBncmFwaHMgdGhlIGV4ZWN1dGVkIHdyYXBwaW5nIG1heSBwcm9kdWNlIHJlc3VsdHMgdGhhdCBhcmUgY29uc2lzdGVudGx5IGJpYXNlZCBpbiB0aGUgc2FtZSBmYXNoaW9uOiBlaXRoZXIgd3JhcHBpbmcgdG8gb2Z0ZW4gb3IgdG8gcmFyZWx5LiBUaGlzIGZhY3RvciBjYW4gYmUgdXNlZCB0byBjb3JyZWN0IHRoZSBiaWFzLiBJbnRlcm5hbGx5LCBpdCBpcyBzaW1wbHkgbXVsdGlwbGllZCB3aXRoIHRoZSAnYXNwZWN0IHJhdGlvJyBsYXlvdXQgb3B0aW9uLiIpLDEpLGZvKSx0YSksdW4oUG4pKSkpLFFzKHQsd0csZnAsaGt0KSxRcyh0LHdHLGZwLGZrdCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGJMKSxheXQpLCJDdXR0aW5nIFN0cmF0ZWd5IiksIlRoZSBzdHJhdGVneSBieSB3aGljaCB0aGUgbGF5ZXIgaW5kZXhlcyBhcmUgZGV0ZXJtaW5lZCBhdCB3aGljaCB0aGUgbGF5ZXJpbmcgY3J1bWJsZXMgaW50byBjaHVua3MuIikseU1lKSxwcykscExlKSx1bihQbikpKSksUXModCxiTCxmcCx2a3QpLFFzKHQsYkwsZnAsd2t0KSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsc2ZlKSxheXQpLCJNYW51YWxseSBTcGVjaWZpZWQgQ3V0cyIpLCJBbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSBoZXIgb3duIGN1dHMgZm9yIGEgY2VydGFpbiBncmFwaC4iKSxYMSksbWYpLHVuKFBuKSkpKSxRcyh0LHNmZSxiTCxna3QpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxhZmUpLCJ3cmFwcGluZy5jdXR0aW5nLm1zZCIpLCJNU0QgRnJlZWRvbSIpLCJUaGUgTVNEIGN1dHRpbmcgc3RyYXRlZ3kgc3RhcnRzIHdpdGggYW4gaW5pdGlhbCBndWVzcyBvbiB0aGUgbnVtYmVyIG9mIGNodW5rcyB0aGUgZ3JhcGggc2hvdWxkIGJlIHNwbGl0IGludG8uIFRoZSBmcmVlZG9tIHNwZWNpZmllcyBob3cgbXVjaCB0aGUgc3RyYXRlZ3kgbWF5IGRldmlhdGUgZnJvbSB0aGlzIGd1ZXNzLiBFLmcuIGlmIGFuIGluaXRpYWwgbnVtYmVyIG9mIDMgaXMgY29tcHV0ZWQsIGEgZnJlZWRvbSBvZiAxIGFsbG93cyAyLCAzLCBhbmQgNCBjdXRzLiIpLHdNZSksVGMpLHJvKSx1bihQbikpKSksUXModCxhZmUsYkwsYmt0KSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQseUcpLG95dCksIlZhbGlkaWZpY2F0aW9uIFN0cmF0ZWd5IiksIldoZW4gd3JhcHBpbmcgZ3JhcGhzLCBvbmUgY2FuIHNwZWNpZnkgaW5kaWNlcyB0aGF0IGFyZSBub3QgYWxsb3dlZCBhcyBzcGxpdCBwb2ludHMuIFRoZSB2YWxpZGlmaWNhdGlvbiBzdHJhdGVneSBtYWtlcyBzdXJlIGV2ZXJ5IGNvbXB1dGVkIHNwbGl0IHBvaW50IGlzIGFsbG93ZWQuIiksa01lKSxwcyksQkRlKSx1bihQbikpKSksUXModCx5RyxmcCxEa3QpLFFzKHQseUcsZnAsSWt0KSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQseEcpLG95dCksIlZhbGlkIEluZGljZXMgZm9yIFdyYXBwaW5nIiksbnVsbCksWDEpLG1mKSx1bihQbikpKSksUXModCx4RyxmcCxBa3QpLFFzKHQseEcsZnAsTGt0KSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsa0cpLEFUZSksIkltcHJvdmUgQ3V0cyIpLCJGb3IgZ2VuZXJhbCBncmFwaHMgaXQgaXMgaW1wb3J0YW50IHRoYXQgbm90IHRvbyBtYW55IGVkZ2VzIHdyYXAgYmFja3dhcmRzLiBUaHVzIGEgY29tcHJvbWlzZSBiZXR3ZWVuIGV2ZW5seS1kaXN0cmlidXRlZCBjdXRzIGFuZCB0aGUgdG90YWwgbnVtYmVyIG9mIGN1dCBlZGdlcyBpcyBzb3VnaHQuIiksITApLHlhKSxOcyksdW4oUG4pKSkpLFFzKHQsa0csZnAsRWt0KSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsRUcpLEFUZSksIkRpc3RhbmNlIFBlbmFsdHkgV2hlbiBJbXByb3ZpbmcgQ3V0cyIpLG51bGwpLDIpLGZvKSx0YSksdW4oUG4pKSkpLFFzKHQsRUcsZnAseGt0KSxRcyh0LEVHLGtHLCEwKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsb2ZlKSxBVGUpLCJJbXByb3ZlIFdyYXBwZWQgRWRnZXMiKSwiVGhlIGluaXRpYWwgd3JhcHBpbmcgaXMgcGVyZm9ybWVkIGluIGEgdmVyeSBzaW1wbGUgd2F5LiBBcyBhIGNvbnNlcXVlbmNlLCBlZGdlcyB0aGF0IHdyYXAgZnJvbSBvbmUgY2h1bmsgdG8gYW5vdGhlciBtYXkgYmUgdW5uZWNlc3NhcmlseSBsb25nLiBBY3RpdmF0aW5nIHRoaXMgb3B0aW9uIHRyaWVzIHRvIHNob3J0ZW4gc3VjaCBlZGdlcy4iKSwhMCkseWEpLE5zKSx1bihQbikpKSksUXModCxvZmUsZnAsQ2t0KSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsd1RlKSxmZmUpLCJFZGdlIExhYmVsIFNpZGUgU2VsZWN0aW9uIiksIk1ldGhvZCB0byBkZWNpZGUgb24gZWRnZSBsYWJlbCBzaWRlcy4iKSxhTWUpLHBzKSx5TGUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQseVRlKSxmZmUpLCJFZGdlIENlbnRlciBMYWJlbCBQbGFjZW1lbnQgU3RyYXRlZ3kiKSwiRGV0ZXJtaW5lcyBpbiB3aGljaCBsYXllciBjZW50ZXIgbGFiZWxzIG9mIGxvbmcgZWRnZXMgc2hvdWxkIGJlIHBsYWNlZC4iKSxzTWUpLHBzKSxOVCkscnMoUG4saGUobGUoeGcsMSksaXQsMTcwLDAsW1MyXSkpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxURyksbUwpLCJDb25zaWRlciBNb2RlbCBPcmRlciIpLCJQcmVzZXJ2ZXMgdGhlIG9yZGVyIG9mIG5vZGVzIGFuZCBlZGdlcyBpbiB0aGUgbW9kZWwgZmlsZSBpZiB0aGlzIGRvZXMgbm90IGxlYWQgdG8gYWRkaXRpb25hbCBlZGdlIGNyb3NzaW5ncy4gRGVwZW5kaW5nIG9uIHRoZSBzdHJhdGVneSB0aGlzIGlzIG5vdCBhbHdheXMgcG9zc2libGUgc2luY2UgdGhlIG5vZGUgYW5kIGVkZ2Ugb3JkZXIgbWlnaHQgYmUgY29uZmxpY3RpbmcuIiksWkxlKSxwcyksU0RlKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHhUZSksbUwpLCJDb25zaWRlciBQb3J0IE9yZGVyIiksIklmIGRpc2FibGVkIHRoZSBwb3J0IG9yZGVyIG9mIG91dHB1dCBwb3J0cyBpcyBkZXJpdmVkIGZyb20gdGhlIGVkZ2Ugb3JkZXIgYW5kIGlucHV0IHBvcnRzIGFyZSBvcmRlcmVkIGJ5IHRoZWlyIGluY29taW5nIGNvbm5lY3Rpb25zLiBJZiBlbmFibGVkIGFsbCBwb3J0cyBhcmUgb3JkZXJlZCBieSB0aGUgcG9ydCBtb2RlbCBvcmRlci4iKSwhMSkseWEpLE5zKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGtUZSksbUwpLCJObyBNb2RlbCBPcmRlciIpLCJTZXQgb24gYSBub2RlIHRvIG5vdCBzZXQgYSBtb2RlbCBvcmRlciBmb3IgdGhpcyBub2RlIGV2ZW4gdGhvdWdoIGl0IGlzIGEgcmVhbCBub2RlLiIpLCExKSx5YSksTnMpLHVuKGhhKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsY2ZlKSxtTCksIkNvbnNpZGVyIE1vZGVsIE9yZGVyIGZvciBDb21wb25lbnRzIiksIklmIHNldCB0byBOT05FIHRoZSB1c3VhbCBvcmRlcmluZyBzdHJhdGVneSAoYnkgY3VtdWxhdGl2ZSBub2RlIHByaW9yaXR5IGFuZCBzaXplIG9mIG5vZGVzKSBpcyB1c2VkLiBJTlNJREVfUE9SVF9TSURFUyBvcmRlcnMgdGhlIGNvbXBvbmVudHMgd2l0aCBleHRlcm5hbCBwb3J0cyBvbmx5IGluc2lkZSB0aGUgZ3JvdXBzIHdpdGggdGhlIHNhbWUgcG9ydCBzaWRlLiBGT1JDRV9NT0RFTF9PUkRFUiBlbmZvcmNlcyB0aGUgbW9kZSBvcmRlciBvbiBjb21wb25lbnRzLiBUaGlzIG9wdGlvbiBtaWdodCBwcm9kdWNlIGJhZCBhbGlnbm1lbnRzIGFuZCBzdWIgb3B0aW1hbCBkcmF3aW5ncyBpbiB0ZXJtcyBvZiB1c2VkIGFyZWEgc2luY2UgdGhlIG9yZGVyaW5nIHNob3VsZCBiZSByZXNwZWN0ZWQuIiksUUxlKSxwcyksbUFlKSx1bihQbikpKSksUXModCxjZmUsbEwsbnVsbCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEVUZSksbUwpLCJMb25nIEVkZ2UgT3JkZXJpbmcgU3RyYXRlZ3kiKSwiSW5kaWNhdGVzIHdoZXRoZXIgbG9uZyBlZGdlcyBhcmUgc29ydGVkIHVuZGVyLCBvdmVyLCBvciBlcXVhbCB0byBub2RlcyB0aGF0IGhhdmUgbm8gY29ubmVjdGlvbiB0byBhIHByZXZpb3VzIGxheWVyIGluIGEgbGVmdC10by1yaWdodCBvciByaWdodC10by1sZWZ0IGxheW91dC4gVW5kZXIgYW5kIG92ZXIgY2hhbmdlcyB0byByaWdodCBhbmQgbGVmdCBpbiBhIHZlcnRpY2FsIGxheW91dC4iKSxKTGUpLHBzKSxtRGUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsdWZlKSxtTCksIkNyb3NzaW5nIENvdW50ZXIgTm9kZSBPcmRlciBJbmZsdWVuY2UiKSwiSW5kaWNhdGVzIHdpdGggd2hhdCBwZXJjZW50YWdlICgxIGZvciAxMDAlKSB2aW9sYXRpb25zIG9mIHRoZSBub2RlIG1vZGVsIG9yZGVyIGFyZSB3ZWlnaHRlZCBhZ2FpbnN0IHRoZSBjcm9zc2luZ3MgZS5nLiBhIHZhbHVlIG9mIDAuNSBtZWFucyB0d28gbW9kZWwgb3JkZXIgdmlvbGF0aW9ucyBhcmUgYXMgaW1wb3J0YW50IGFzIG9uIGVkZ2UgY3Jvc3NpbmcuIFRoaXMgYWxsb3dzIHNvbWUgZWRnZSBjcm9zc2luZ3MgaW4gZmF2b3Igb2YgcHJlc2VydmluZyB0aGUgbW9kZWwgb3JkZXIuIEl0IGlzIGFkdmlzZWQgdG8gc2V0IHRoaXMgdmFsdWUgdG8gYSB2ZXJ5IHNtYWxsIHBvc2l0aXZlIHZhbHVlIChlLmcuIDAuMDAxKSB0byBoYXZlIG1pbmltYWwgY3Jvc3NpbmcgYW5kIGEgb3B0aW1hbCBub2RlIG9yZGVyLiBEZWZhdWx0cyB0byBubyBpbmZsdWVuY2UgKDApLiIpLDApLGZvKSx0YSksdW4oUG4pKSkpLFFzKHQsdWZlLFRHLG51bGwpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxsZmUpLG1MKSwiQ3Jvc3NpbmcgQ291bnRlciBQb3J0IE9yZGVyIEluZmx1ZW5jZSIpLCJJbmRpY2F0ZXMgd2l0aCB3aGF0IHBlcmNlbnRhZ2UgKDEgZm9yIDEwMCUpIHZpb2xhdGlvbnMgb2YgdGhlIHBvcnQgbW9kZWwgb3JkZXIgYXJlIHdlaWdodGVkIGFnYWluc3QgdGhlIGNyb3NzaW5ncyBlLmcuIGEgdmFsdWUgb2YgMC41IG1lYW5zIHR3byBtb2RlbCBvcmRlciB2aW9sYXRpb25zIGFyZSBhcyBpbXBvcnRhbnQgYXMgb24gZWRnZSBjcm9zc2luZy4gVGhpcyBhbGxvd3Mgc29tZSBlZGdlIGNyb3NzaW5ncyBpbiBmYXZvciBvZiBwcmVzZXJ2aW5nIHRoZSBtb2RlbCBvcmRlci4gSXQgaXMgYWR2aXNlZCB0byBzZXQgdGhpcyB2YWx1ZSB0byBhIHZlcnkgc21hbGwgcG9zaXRpdmUgdmFsdWUgKGUuZy4gMC4wMDEpIHRvIGhhdmUgbWluaW1hbCBjcm9zc2luZyBhbmQgYSBvcHRpbWFsIHBvcnQgb3JkZXIuIERlZmF1bHRzIHRvIG5vIGluZmx1ZW5jZSAoMCkuIiksMCksZm8pLHRhKSx1bihQbikpKSksUXModCxsZmUsVEcsbnVsbCksVHd0KChuZXcgWHJlLHQpKX07dmFyIEx4dCxNeHQsRHh0LFlMZSxJeHQsWExlLE94dCxRTGUsTnh0LFB4dCxCeHQsSkxlLEZ4dCxSeHQsanh0LFpMZSwkeHQsenh0LHF4dCxlTWUsSHh0LFZ4dCxVeHQsdE1lLEd4dCxLeHQsV3h0LFl4dCxYeHQsUXh0LEp4dCxaeHQsZTl0LHQ5dCxuTWUsbjl0LHJNZSxyOXQsaU1lLGk5dCxzTWUsczl0LGFNZSxhOXQsbzl0LGM5dCxvTWUsdTl0LGNNZSxsOXQsdU1lLGg5dCxmOXQsZDl0LGc5dCxwOXQsYjl0LG05dCx2OXQsdzl0LHk5dCxsTWUseDl0LGs5dCxFOXQsVDl0LEM5dCxTOXQsaE1lLF85dCxBOXQsTDl0LE05dCxEOXQsSTl0LE85dCxmTWUsTjl0LGRNZSxQOXQsQjl0LEY5dCxnTWUsUjl0LGo5dCxwTWUsJDl0LHo5dCxxOXQsSDl0LFY5dCxVOXQsRzl0LEs5dCxiTWUsVzl0LFk5dCxYOXQsbU1lLFE5dCx2TWUsSjl0LFo5dCxla3QsdGt0LG5rdCxya3QsaWt0LHNrdCxha3Qsb2t0LGNrdCx1a3QsbGt0LGhrdCxma3QsZGt0LGdrdCxwa3Qsd01lLGJrdCxta3QseU1lLHZrdCx3a3QseWt0LHhrdCxra3QsRWt0LFRrdCxDa3QsU2t0LHhNZSxfa3QsQWt0LExrdCxNa3Qsa01lLERrdCxJa3Q7SShvdSwiTGF5ZXJlZE1ldGFEYXRhUHJvdmlkZXIiLDg1OSksRCg5OTgsMSxQZixYcmUpLGguaGY9ZnVuY3Rpb24odCl7VHd0KHQpfTt2YXIgUmQsWDFlLGNXLFFMLHVXLEVNZSxsVyxnNCxoVyxUTWUsQ01lLGZXLFExZSx5ZyxKMWUsZjMsU01lLFRCLFoxZSxfTWUsT2t0LE5rdCxQa3QsZFcsZWRlLEpMLGR2LEJrdCxSaCxBTWUsTE1lLGdXLHRkZSxqZCxwVyxicCxNTWUsRE1lLElNZSxuZGUscmRlLE9NZSx4MixpZGUsTk1lLHA0LFBNZSxCTWUsRk1lLGJXLGI0LGd2LFJNZSxqTWUsY2MsJE1lLEZrdCxRdSxtVyx6TWUscU1lLEhNZSx6Yixwdix2VyxWTWUsVU1lLHdXLGQzLEdNZSxzZGUsWkwsS01lLGczLGVNLHlXLGJ2LGFkZSxxVCx4VyxtdixXTWUsWU1lLFhNZSxIVCxRTWUsUmt0LGprdCwka3Qsemt0LHAzLG00LE1zLGsyLHFrdCx2NCxKTWUsVlQsWk1lLHc0LEhrdCxVVCxlRGUsSngsVmt0LFVrdCxDQixvZGUsdERlLFNCLHgwLHE2LEg2LGIzLHZ2LGtXLHk0LGNkZSxHVCxLVCxtMyxWNix1ZGUsX0IsdE0sbk0sR2t0LEtrdCxXa3QsbkRlLFlrdCxsZGUsckRlLGlEZSxzRGUsYURlLGhkZSxvRGUsY0RlLHVEZSxsRGUsZmRlLEVXO0kob3UsIkxheWVyZWRPcHRpb25zIiw5OTgpLEQoOTk5LDEse30sUmVlKSxoLnNmPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9bmV3IHFRZSx0fSxoLnRmPWZ1bmN0aW9uKHQpe30sSShvdSwiTGF5ZXJlZE9wdGlvbnMvTGF5ZXJlZEZhY3RvcnkiLDk5OSksRCgxMzkxLDEse30pLGguYT0wO3ZhciBYa3Q7SShVYywiRWxrU3BhY2luZ3MvQWJzdHJhY3RTcGFjaW5nc0J1aWxkZXIiLDEzOTEpLEQoNzkyLDEzOTEse30sRDhlKTt2YXIgVFcsUWt0O0kob3UsIkxheWVyZWRTcGFjaW5ncy9MYXllcmVkU3BhY2luZ3NCdWlsZGVyIiw3OTIpLEQoMjY1LDIyLHszOjEsMzQ6MSwyMjoxLDI2NToxLDE4ODoxLDE5NjoxfSxNNSksaC5kZz1mdW5jdGlvbigpe3JldHVybiBqYnQodGhpcyl9LGgucWc9ZnVuY3Rpb24oKXtyZXR1cm4gamJ0KHRoaXMpfTt2YXIgV1QsZGRlLFlULGhEZSxmRGUsZERlLENXLGdkZSxnRGUscERlPUZyKG91LCJMYXllcmluZ1N0cmF0ZWd5IiwyNjUsSHIsUnduLEgwbiksSmt0O0QoMzkwLDIyLHszOjEsMzQ6MSwyMjoxLDM5MDoxfSxUc2UpO3ZhciBwZGUsYkRlLFNXLG1EZT1GcihvdSwiTG9uZ0VkZ2VPcmRlcmluZ1N0cmF0ZWd5IiwzOTAsSHIsVjJuLFYwbiksWmt0O0QoMjAzLDIyLHszOjEsMzQ6MSwyMjoxLDIwMzoxfSxicSk7dmFyIFU2LEc2LF9XLGJkZSxtZGU9RnIob3UsIk5vZGVGbGV4aWJpbGl0eSIsMjAzLEhyLFpibixVMG4pLGVFdDtEKDMyMywyMix7MzoxLDM0OjEsMjI6MSwzMjM6MSwxODg6MSwxOTY6MX0saE8pLGguZGc9ZnVuY3Rpb24oKXtyZXR1cm4gTDJ0KHRoaXMpfSxoLnFnPWZ1bmN0aW9uKCl7cmV0dXJuIEwydCh0aGlzKX07dmFyIHJNLHZkZSx3ZGUsaU0sdkRlLHdEZT1GcihvdSwiTm9kZVBsYWNlbWVudFN0cmF0ZWd5IiwzMjMsSHIsVm1uLEcwbiksdEV0O0QoMjQzLDIyLHszOjEsMzQ6MSwyMjoxLDI0MzoxfSxseSk7dmFyIHlEZSx2Myx4NCxBQix4RGUsa0RlLExCLEVEZSxBVyxMVyxURGU9RnIob3UsIk5vZGVQcm9tb3Rpb25TdHJhdGVneSIsMjQzLEhyLHUzbixLMG4pLG5FdDtEKDI4NCwyMix7MzoxLDM0OjEsMjI6MSwyODQ6MX0sbXEpO3ZhciBDRGUsRTIseWRlLHhkZSxTRGU9RnIob3UsIk9yZGVyaW5nU3RyYXRlZ3kiLDI4NCxIcixlbW4sVzBuKSxyRXQ7RCg0MzAsMjIsezM6MSwzNDoxLDIyOjEsNDMwOjF9LFIzZSk7dmFyIGtkZSxFZGUsX0RlPUZyKG91LCJQb3J0U29ydGluZ1N0cmF0ZWd5Iiw0MzAsSHIsR3BuLFkwbiksaUV0O0QoNDYzLDIyLHszOjEsMzQ6MSwyMjoxLDQ2MzoxfSxDc2UpO3ZhciAkbCx6dSxzTSxzRXQ9RnIob3UsIlBvcnRUeXBlIiw0NjMsSHIsVTJuLFgwbiksYUV0O0QoMzg3LDIyLHszOjEsMzQ6MSwyMjoxLDM4NzoxfSxTc2UpO3ZhciBBRGUsVGRlLExEZSxNRGU9RnIob3UsIlNlbGZMb29wRGlzdHJpYnV0aW9uU3RyYXRlZ3kiLDM4NyxIcixHMm4sUTBuKSxvRXQ7RCgzNDksMjIsezM6MSwzNDoxLDIyOjEsMzQ5OjF9LF9zZSk7dmFyIENkZSxNQixTZGUsRERlPUZyKG91LCJTZWxmTG9vcE9yZGVyaW5nU3RyYXRlZ3kiLDM0OSxIcixLMm4sSjBuKSxjRXQ7RCgzMTIsMSx7MzEyOjF9LHh2dCksSShvdSwiU3BhY2luZ3MiLDMxMiksRCgzNTAsMjIsezM6MSwzNDoxLDIyOjEsMzUwOjF9LEFzZSk7dmFyIF9kZSxJRGUsYU0sT0RlPUZyKG91LCJTcGxpbmVSb3V0aW5nTW9kZSIsMzUwLEhyLFcybixaMG4pLHVFdDtEKDM1MiwyMix7MzoxLDM0OjEsMjI6MSwzNTI6MX0sTHNlKTt2YXIgQWRlLE5EZSxQRGUsQkRlPUZyKG91LCJWYWxpZGlmeVN0cmF0ZWd5IiwzNTIsSHIsWTJuLGUxbiksbEV0O0QoMzg4LDIyLHszOjEsMzQ6MSwyMjoxLDM4ODoxfSxNc2UpO3ZhciBrNCxMZGUsWFQsRkRlPUZyKG91LCJXcmFwcGluZ1N0cmF0ZWd5IiwzODgsSHIsWDJuLHQxbiksaEV0O0QoMTM5OCwxLFVvLFVyZSksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDM2KSxmRXR9LGguS2Y9ZnVuY3Rpb24odCxuKXtOTG4odGhpcyxsKHQsMzYpLG4pfTt2YXIgZkV0O0koTEcsIkRlcHRoRmlyc3RDeWNsZUJyZWFrZXIiLDEzOTgpLEQoNzkzLDEsVW8sUTRlKSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzYpLGRFdH0saC5LZj1mdW5jdGlvbih0LG4pe0ZJbih0aGlzLGwodCwzNiksbil9LGguc2c9ZnVuY3Rpb24odCl7cmV0dXJuIGwoanQodCxhVSh0aGlzLmQsdC5jLmxlbmd0aCkpLDEwKX07dmFyIGRFdDtJKExHLCJHcmVlZHlDeWNsZUJyZWFrZXIiLDc5MyksRCgxNDAxLDc5MyxVbywkdHQpLGguc2c9ZnVuY3Rpb24odCl7dmFyIG4scixhLG87Zm9yKG89bnVsbCxuPUlpLGE9bmV3IEcodCk7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDEwKSxucyhyLChmdCgpLEtpKSkmJmwoUShyLEtpKSwxNykuYTxuJiYobj1sKFEocixLaSksMTcpLmEsbz1yKTtyZXR1cm4gb3x8bChqdCh0LGFVKHRoaXMuZCx0LmMubGVuZ3RoKSksMTApfSxJKExHLCJHcmVlZHlNb2RlbE9yZGVyQ3ljbGVCcmVha2VyIiwxNDAxKSxEKDEzOTksMSxVbyxveiksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDM2KSxnRXR9LGguS2Y9ZnVuY3Rpb24odCxuKXtITG4odGhpcyxsKHQsMzYpLG4pfTt2YXIgZ0V0O0koTEcsIkludGVyYWN0aXZlQ3ljbGVCcmVha2VyIiwxMzk5KSxEKDE0MDAsMSxVbyxtOCksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDM2KSxwRXR9LGguS2Y9ZnVuY3Rpb24odCxuKXtaTG4odGhpcyxsKHQsMzYpLG4pfSxoLmE9MCxoLmI9MDt2YXIgcEV0O0koTEcsIk1vZGVsT3JkZXJDeWNsZUJyZWFrZXIiLDE0MDApLEQoMTQxMywxLFVvLGF6KSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzYpLGJFdH0saC5LZj1mdW5jdGlvbih0LG4pe3FEbih0aGlzLGwodCwzNiksbil9O3ZhciBiRXQ7SShkcCwiQnJlYWR0aEZpcnN0TW9kZWxPcmRlckxheWVyZXIiLDE0MTMpLEQoMTQxNCwxLGlpLGplZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBka24obCh0LDEwKSxsKG4sMTApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKGRwLCJCcmVhZHRoRmlyc3RNb2RlbE9yZGVyTGF5ZXJlci9sYW1iZGEkMCRUeXBlIiwxNDE0KSxEKDE0MDQsMSxVbyxmZXQpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwzNiksbUV0fSxoLktmPWZ1bmN0aW9uKHQsbil7cUluKHRoaXMsbCh0LDM2KSxuKX07dmFyIG1FdDtJKGRwLCJDb2ZmbWFuR3JhaGFtTGF5ZXJlciIsMTQwNCksRCgxNDA1LDEsaWksTFllKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFprbih0aGlzLmEsbCh0LDEwKSxsKG4sMTApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKGRwLCJDb2ZmbWFuR3JhaGFtTGF5ZXJlci8wbWV0aG9kcmVmJGNvbXBhcmVOb2Rlc0luVG9wbyRUeXBlIiwxNDA1KSxEKDE0MDYsMSxpaSxNWWUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gWmRuKHRoaXMuYSxsKHQsMTApLGwobiwxMCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoZHAsIkNvZmZtYW5HcmFoYW1MYXllcmVyL2xhbWJkYSQxJFR5cGUiLDE0MDYpLEQoMTQxNSwxLFVvLFJJKSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzYpLHZFdH0saC5LZj1mdW5jdGlvbih0LG4pe0xJbih0aGlzLGwodCwzNiksbil9LGguYz0wLGguZT0wO3ZhciB2RXQ7SShkcCwiRGVwdGhGaXJzdE1vZGVsT3JkZXJMYXllcmVyIiwxNDE1KSxEKDE0MTYsMSxpaSwkZWUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZ2tuKGwodCwxMCksbChuLDEwKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShkcCwiRGVwdGhGaXJzdE1vZGVsT3JkZXJMYXllcmVyL2xhbWJkYSQwJFR5cGUiLDE0MTYpLEQoMTQwNywxLFVvLHplZSksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDM2KSxmaShmaShmaShuZXcgWHMsKHVvKCkseTApLCh2bygpLGYxZSkpLHZnLGw0KSxidSx1NCl9LGguS2Y9ZnVuY3Rpb24odCxuKXt0SW4obCh0LDM2KSxuKX0sSShkcCwiSW50ZXJhY3RpdmVMYXllcmVyIiwxNDA3KSxEKDU3OCwxLHs1Nzg6MX0sR1FlKSxoLmE9MCxoLmM9MCxJKGRwLCJJbnRlcmFjdGl2ZUxheWVyZXIvTGF5ZXJTcGFuIiw1NzgpLEQoMTQwMywxLFVvLFhTKSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzYpLHdFdH0saC5LZj1mdW5jdGlvbih0LG4pe0xDbih0aGlzLGwodCwzNiksbil9O3ZhciB3RXQ7SShkcCwiTG9uZ2VzdFBhdGhMYXllcmVyIiwxNDAzKSxEKDE0MTIsMSxVbyxZUyksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDM2KSx5RXR9LGguS2Y9ZnVuY3Rpb24odCxuKXtaQ24odGhpcyxsKHQsMzYpLG4pfTt2YXIgeUV0O0koZHAsIkxvbmdlc3RQYXRoU291cmNlTGF5ZXJlciIsMTQxMiksRCgxNDEwLDEsVW8sakkpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwzNiksZmkoZmkoZmkobmV3IFhzLCh1bygpLHkwKSwodm8oKSxENikpLHZnLGw0KSxidSx1NCl9LGguS2Y9ZnVuY3Rpb24odCxuKXtsSW4odGhpcyxsKHQsMzYpLG4pfSxoLmE9MCxoLmI9MCxoLmQ9MDt2YXIgUkRlLGpEZTtJKGRwLCJNaW5XaWR0aExheWVyZXIiLDE0MTApLEQoMTQxMSwxLGlpLERZZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBEM24odGhpcyxsKHQsMTApLGwobiwxMCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoZHAsIk1pbldpZHRoTGF5ZXJlci9NaW5PdXRnb2luZ0VkZ2VzQ29tcGFyYXRvciIsMTQxMSksRCgxNDAyLDEsVW8sR3JlKSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzYpLHhFdH0saC5LZj1mdW5jdGlvbih0LG4pe1RNbih0aGlzLGwodCwzNiksbil9O3ZhciB4RXQ7SShkcCwiTmV0d29ya1NpbXBsZXhMYXllcmVyIiwxNDAyKSxEKDE0MDgsMSxVbyx6cnQpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwzNiksZmkoZmkoZmkobmV3IFhzLCh1bygpLHkwKSwodm8oKSxENikpLHZnLGw0KSxidSx1NCl9LGguS2Y9ZnVuY3Rpb24odCxuKXtjRG4odGhpcyxsKHQsMzYpLG4pfSxoLmQ9MCxoLmY9MCxoLmc9MCxoLmk9MCxoLnM9MCxoLnQ9MCxoLnU9MCxJKGRwLCJTdHJldGNoV2lkdGhMYXllcmVyIiwxNDA4KSxEKDE0MDksMSxpaSxxZWUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gY3ZuKGwodCwxMCksbChuLDEwKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShkcCwiU3RyZXRjaFdpZHRoTGF5ZXJlci8xIiwxNDA5KSxEKDQxMywxLHVDZSksaC5nZz1mdW5jdGlvbih0LG4scixhLG8sZil7fSxoLnVnPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gZm10KHRoaXMsdCxuLHIpfSxoLmZnPWZ1bmN0aW9uKCl7dGhpcy5nPVdlKEI0LHV5dCwyOCx0aGlzLmQsMTUsMSksdGhpcy5mPVdlKEI0LHV5dCwyOCx0aGlzLmQsMTUsMSl9LGguaGc9ZnVuY3Rpb24odCxuKXt0aGlzLmVbdF09V2UoVnIsZGksMjgsblt0XS5sZW5ndGgsMTUsMSl9LGguaWc9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO2E9clt0XVtuXSxhLnA9bix0aGlzLmVbdF1bbl09bn0saC5qZz1mdW5jdGlvbih0LG4scixhKXtsKGp0KGFbdF1bbl0uaixyKSwxMikucD10aGlzLmQrK30saC5iPTAsaC5jPTAsaC5kPTAsSShDbCwiQWJzdHJhY3RCYXJ5Y2VudGVyUG9ydERpc3RyaWJ1dG9yIiw0MTMpLEQoMTY5OCwxLGlpLElZZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBpNm4odGhpcy5hLGwodCwxMiksbChuLDEyKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShDbCwiQWJzdHJhY3RCYXJ5Y2VudGVyUG9ydERpc3RyaWJ1dG9yL2xhbWJkYSQwJFR5cGUiLDE2OTgpLEQoODMyLDEselAsbjZlKSxoLmdnPWZ1bmN0aW9uKHQsbixyLGEsbyxmKXt9LGguaWc9ZnVuY3Rpb24odCxuLHIpe30saC5qZz1mdW5jdGlvbih0LG4scixhKXt9LGguZWc9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5mZz1mdW5jdGlvbigpe3RoaXMuYz10aGlzLmUuYSx0aGlzLmc9dGhpcy5mLmd9LGguaGc9ZnVuY3Rpb24odCxuKXtuW3RdWzBdLmMucD10fSxoLmtnPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGgudmc9ZnVuY3Rpb24odCxuLHIsYSl7cj9wZ3QodGhpcyx0KTood2d0KHRoaXMsdCxhKSxOdnQodGhpcyx0LG4pKSx0LmMubGVuZ3RoPjEmJihSdChCdChRKGVvKChTbigwLHQuYy5sZW5ndGgpLGwodC5jWzBdLDEwKSkpLChOdCgpLGYzKSkpKT9xMnQodCx0aGlzLmQsbCh0aGlzLDY2OSkpOihDbigpLFZzKHQsdGhpcy5kKSksSGZ0KHRoaXMuZSx0KSl9LGgubGc9ZnVuY3Rpb24odCxuLHIsYSl7dmFyIG8sZixnLHcsRSxDLEw7Zm9yKG4hPWFzdChyLHQubGVuZ3RoKSYmKGY9dFtuLShyPzE6LTEpXSxTNmUodGhpcy5mLGYscj8ocW8oKSx6dSk6KHFvKCksJGwpKSksbz10W25dWzBdLEw9IWF8fG8uaz09KFpuKCksVXMpLEM9TzEodFtuXSksdGhpcy52ZyhDLEwsITEsciksZz0wLEU9bmV3IEcoQyk7RS5hPEUuYy5jLmxlbmd0aDspdz1sKHJlKEUpLDEwKSx0W25dW2crK109dztyZXR1cm4hMX0saC5tZz1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmLGc7Zm9yKGc9YXN0KG4sdC5sZW5ndGgpLGY9TzEodFtnXSksdGhpcy52ZyhmLCExLCEwLG4pLHI9MCxvPW5ldyBHKGYpO28uYTxvLmMuYy5sZW5ndGg7KWE9bChyZShvKSwxMCksdFtnXVtyKytdPWE7cmV0dXJuITF9LEkoQ2wsIkJhcnljZW50ZXJIZXVyaXN0aWMiLDgzMiksRCg2NjcsMSx7NjY3OjF9LFBZZSksaC5JYj1mdW5jdGlvbigpe3JldHVybiJCYXJ5Y2VudGVyU3RhdGUgW25vZGU9Iit0aGlzLmMrIiwgc3VtbWVkV2VpZ2h0PSIrdGhpcy5kKyIsIGRlZ3JlZT0iK3RoaXMuYisiLCBiYXJ5Y2VudGVyPSIrdGhpcy5hKyIsIHZpc2l0ZWQ9Iit0aGlzLmUrIl0ifSxoLmI9MCxoLmQ9MCxoLmU9ITE7dmFyIGtFdD1JKENsLCJCYXJ5Y2VudGVySGV1cmlzdGljL0JhcnljZW50ZXJTdGF0ZSIsNjY3KTtEKDE4NjUsMSxpaSxPWWUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gSjhuKHRoaXMuYSxsKHQsMTApLGwobiwxMCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoQ2wsIkJhcnljZW50ZXJIZXVyaXN0aWMvbGFtYmRhJDAkVHlwZSIsMTg2NSksRCg4MzEsMSx6UCxQeGUpLGguZmc9ZnVuY3Rpb24oKXt9LGguZ2c9ZnVuY3Rpb24odCxuLHIsYSxvLGYpe30saC5qZz1mdW5jdGlvbih0LG4scixhKXt9LGguaGc9ZnVuY3Rpb24odCxuKXt0aGlzLmFbdF09V2Uoa0V0LHszOjEsNDoxLDU6MSwyMTE3OjF9LDY2NyxuW3RdLmxlbmd0aCwwLDEpLHRoaXMuYlt0XT1XZShFRXQsezM6MSw0OjEsNToxLDIxMTg6MX0sMjM5LG5bdF0ubGVuZ3RoLDAsMSl9LGguaWc9ZnVuY3Rpb24odCxuLHIpe2VkdCh0aGlzLHJbdF1bbl0sITApfSxoLmM9ITEsSShDbCwiRm9yc3RlckNvbnN0cmFpbnRSZXNvbHZlciIsODMxKSxEKDIzOSwxLHsyMzk6MX0sS2F0LHl2dCksaC5JYj1mdW5jdGlvbigpe3ZhciB0LG47Zm9yKG49bmV3IHRiLG4uYSs9IlsiLHQ9MDt0PHRoaXMuZC5sZW5ndGg7dCsrKWhpKG4scGR0KHRoaXMuZFt0XSkpLEwxKHRoaXMuZyx0aGlzLmRbMF0pLmEhPW51bGwmJmhpKGhpKChuLmErPSI8IixuKSxUbG4oTDEodGhpcy5nLHRoaXMuZFswXSkuYSkpLCI+IiksdDx0aGlzLmQubGVuZ3RoLTEmJihuLmErPUNvKTtyZXR1cm4obi5hKz0iXSIsbikuYX0saC5hPTAsaC5jPTAsaC5mPTA7dmFyIEVFdD1JKENsLCJGb3JzdGVyQ29uc3RyYWludFJlc29sdmVyL0NvbnN0cmFpbnRHcm91cCIsMjM5KTtEKDE4NjAsMSxmcixOWWUpLGguQ2Q9ZnVuY3Rpb24odCl7ZWR0KHRoaXMuYSxsKHQsMTApLCExKX0sSShDbCwiRm9yc3RlckNvbnN0cmFpbnRSZXNvbHZlci9sYW1iZGEkMCRUeXBlIiwxODYwKSxEKDIxOSwxLHsyMTk6MSwyMzA6MX0sRXZ0KSxoLmdnPWZ1bmN0aW9uKHQsbixyLGEsbyxmKXt9LGguaGc9ZnVuY3Rpb24odCxuKXt9LGguZmc9ZnVuY3Rpb24oKXt0aGlzLnI9V2UoVnIsZGksMjgsdGhpcy5uLDE1LDEpfSxoLmlnPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvO289clt0XVtuXSxhPW8uZSxhJiZ2dCh0aGlzLmIsYSl9LGguamc9ZnVuY3Rpb24odCxuLHIsYSl7Kyt0aGlzLm59LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gUHZ0KHRoaXMuZSxuZXcgS3MpfSxoLmc9ITEsaC5pPSExLGgubj0wLGgucz0hMSxJKENsLCJHcmFwaEluZm9Ib2xkZXIiLDIxOSksRCgxOTA1LDEselAsSGVlKSxoLmdnPWZ1bmN0aW9uKHQsbixyLGEsbyxmKXt9LGguaGc9ZnVuY3Rpb24odCxuKXt9LGguamc9ZnVuY3Rpb24odCxuLHIsYSl7fSxoLnVnPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gciYmbj4wP2xvZSh0aGlzLmEsdFtuLTFdLHRbbl0pOiFyJiZuPHQubGVuZ3RoLTE/bG9lKHRoaXMuYSx0W25dLHRbbisxXSk6aWNlKHRoaXMuYSx0W25dLHI/KEN0KCksZXIpOihDdCgpLGFyKSksRFRuKHRoaXMsdCxuLHIpfSxoLmZnPWZ1bmN0aW9uKCl7dGhpcy5kPVdlKFZyLGRpLDI4LHRoaXMuYywxNSwxKSx0aGlzLmE9bmV3IElPKHRoaXMuZCl9LGguaWc9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO2E9clt0XVtuXSx0aGlzLmMrPWEuai5jLmxlbmd0aH0saC5jPTAsSShDbCwiR3JlZWR5UG9ydERpc3RyaWJ1dG9yIiwxOTA1KSxEKDE0MjEsMSxVbyxRcmUpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIFl5bihsKHQsMzYpKX0saC5LZj1mdW5jdGlvbih0LG4pe1ZNbihsKHQsMzYpLG4pfTt2YXIgVEV0O0koQ2wsIkludGVyYWN0aXZlQ3Jvc3NpbmdNaW5pbWl6ZXIiLDE0MjEpLEQoMTQyMiwxLGlpLEZZZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBPOG4odGhpcyxsKHQsMTApLGwobiwxMCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoQ2wsIkludGVyYWN0aXZlQ3Jvc3NpbmdNaW5pbWl6ZXIvMSIsMTQyMiksRCg1MTQsMSx7NTE0OjEsMTA2OjEsNDc6MX0sV2llKSxoLnJnPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBsKHQsMzYpLG49T3EoQ0V0KSxmaShuLCh1bygpLGJ1KSwodm8oKSxSSykpLG59LGguS2Y9ZnVuY3Rpb24odCxuKXtRX24odGhpcyxsKHQsMzYpLG4pfSxoLmU9MDt2YXIgQ0V0O0koQ2wsIkxheWVyU3dlZXBDcm9zc2luZ01pbmltaXplciIsNTE0KSxEKDE0MTgsMSxmcixSWWUpLGguQ2Q9ZnVuY3Rpb24odCl7ekFuKHRoaXMuYSxsKHQsMjE5KSl9LEkoQ2wsIkxheWVyU3dlZXBDcm9zc2luZ01pbmltaXplci8wbWV0aG9kcmVmJGNvbXBhcmVEaWZmZXJlbnRSYW5kb21pemVkTGF5b3V0cyRUeXBlIiwxNDE4KSxEKDE0MTksMSxmcixqWWUpLGguQ2Q9ZnVuY3Rpb24odCl7S3luKHRoaXMuYSxsKHQsMjE5KSl9LEkoQ2wsIkxheWVyU3dlZXBDcm9zc2luZ01pbmltaXplci8xbWV0aG9kcmVmJG1pbmltaXplQ3Jvc3NpbmdzTm9Db3VudGVyJFR5cGUiLDE0MTkpLEQoMTQyMCwxLGZyLCRZZSksaC5DZD1mdW5jdGlvbih0KXtKbXQodGhpcy5hLGwodCwyMTkpKX0sSShDbCwiTGF5ZXJTd2VlcENyb3NzaW5nTWluaW1pemVyLzJtZXRob2RyZWYkbWluaW1pemVDcm9zc2luZ3NXaXRoQ291bnRlciRUeXBlIiwxNDIwKSxEKDQ2NCwyMix7MzoxLDM0OjEsMjI6MSw0NjQ6MX0sRHNlKTt2YXIgREIsb00sTVcsU0V0PUZyKENsLCJMYXllclN3ZWVwQ3Jvc3NpbmdNaW5pbWl6ZXIvQ3Jvc3NNaW5UeXBlIiw0NjQsSHIsUTJuLG4xbiksX0V0O0QoMTQxNywxLHRpLFZlZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gRTdlKCksbCh0LDMwKS5hLmMubGVuZ3RoPT0wfSxJKENsLCJMYXllclN3ZWVwQ3Jvc3NpbmdNaW5pbWl6ZXIvbGFtYmRhJDAkVHlwZSIsMTQxNyksRCgxODYyLDEselAsQ290KSxoLmZnPWZ1bmN0aW9uKCl7fSxoLmdnPWZ1bmN0aW9uKHQsbixyLGEsbyxmKXt9LGguamc9ZnVuY3Rpb24odCxuLHIsYSl7fSxoLmhnPWZ1bmN0aW9uKHQsbil7blt0XVswXS5jLnA9dCx0aGlzLmJbdF09V2UoQUV0LHszOjEsNDoxLDU6MSwyMDQzOjF9LDY2OCxuW3RdLmxlbmd0aCwwLDEpfSxoLmlnPWZ1bmN0aW9uKHQsbixyKXt2YXIgYTthPXJbdF1bbl0sYS5wPW4sVHModGhpcy5iW3RdLG4sbmV3IGdJKX0sSShDbCwiTGF5ZXJTd2VlcFR5cGVEZWNpZGVyIiwxODYyKSxEKDY2OCwxLHs2Njg6MX0sZ0kpLGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4iTm9kZUluZm8gW2Nvbm5lY3RlZEVkZ2VzPSIrdGhpcy5hKyIsIGhpZXJhcmNoaWNhbEluZmx1ZW5jZT0iK3RoaXMuYisiLCByYW5kb21JbmZsdWVuY2U9Iit0aGlzLmMrIl0ifSxoLmE9MCxoLmI9MCxoLmM9MDt2YXIgQUV0PUkoQ2wsIkxheWVyU3dlZXBUeXBlRGVjaWRlci9Ob2RlSW5mbyIsNjY4KTtEKDE4NjMsMSxMZCxVZWUpLGguTGI9ZnVuY3Rpb24odCl7cmV0dXJuICRfKG5ldyBOMShsKHQsMTIpLmIpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuICRfKG5ldyBOMShsKHQsMTIpLmIpKX0sSShDbCwiTGF5ZXJTd2VlcFR5cGVEZWNpZGVyL2xhbWJkYSQwJFR5cGUiLDE4NjMpLEQoMTg2NCwxLExkLFg5KSxoLkxiPWZ1bmN0aW9uKHQpe3JldHVybiAkXyhuZXcgTjEobCh0LDEyKS5iKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiAkXyhuZXcgTjEobCh0LDEyKS5iKSl9LEkoQ2wsIkxheWVyU3dlZXBUeXBlRGVjaWRlci9sYW1iZGEkMSRUeXBlIiwxODY0KSxEKDE5MDYsNDEzLHVDZSxLSmUpLGgudGc9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZixnLHcsRSxDLEwsQjtzd2l0Y2goQz10aGlzLmcsci5nKXtjYXNlIDE6e2ZvcihhPTAsbz0wLEU9bmV3IEcodC5qKTtFLmE8RS5jLmMubGVuZ3RoOylnPWwocmUoRSksMTIpLGcuZS5jLmxlbmd0aCE9MCYmKCsrYSxnLmo9PShDdCgpLFFuKSYmKytvKTtmb3IoZj1uK28sQj1uK2Esdz1Sdyh0LChxbygpLCRsKSkuS2MoKTt3Lk9iKCk7KWc9bCh3LlBiKCksMTIpLGcuaj09KEN0KCksUW4pPyhDW2cucF09ZiwtLWYpOihDW2cucF09QiwtLUIpO3JldHVybiBhfWNhc2UgMjp7Zm9yKEw9MCx3PVJ3KHQsKHFvKCksenUpKS5LYygpO3cuT2IoKTspZz1sKHcuUGIoKSwxMiksKytMLENbZy5wXT1uK0w7cmV0dXJuIEx9ZGVmYXVsdDp0aHJvdyB1ZShuZXcgWUkpfX0sSShDbCwiTGF5ZXJUb3RhbFBvcnREaXN0cmlidXRvciIsMTkwNiksRCg2NjksODMyLHs2Njk6MSwyMzA6MX0sYmZ0KSxoLnZnPWZ1bmN0aW9uKHQsbixyLGEpe3I/cGd0KHRoaXMsdCk6KHdndCh0aGlzLHQsYSksTnZ0KHRoaXMsdCxuKSksdC5jLmxlbmd0aD4xJiYoUnQoQnQoUShlbygoU24oMCx0LmMubGVuZ3RoKSxsKHQuY1swXSwxMCkpKSwoTnQoKSxmMykpKSk/cTJ0KHQsdGhpcy5kLHRoaXMpOihDbigpLFZzKHQsdGhpcy5kKSksUnQoQnQoUShlbygoU24oMCx0LmMubGVuZ3RoKSxsKHQuY1swXSwxMCkpKSxmMykpKXx8SGZ0KHRoaXMuZSx0KSl9LEkoQ2wsIk1vZGVsT3JkZXJCYXJ5Y2VudGVySGV1cmlzdGljIiw2NjkpLEQoMTg2NiwxLGlpLHpZZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBPOW4odGhpcy5hLGwodCwxMCksbChuLDEwKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShDbCwiTW9kZWxPcmRlckJhcnljZW50ZXJIZXVyaXN0aWMvbGFtYmRhJDAkVHlwZSIsMTg2NiksRCgxNDIzLDEsVW8sSnJlKSxoLnJnPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBsKHQsMzYpLG49T3EoTEV0KSxmaShuLCh1bygpLGJ1KSwodm8oKSxSSykpLG59LGguS2Y9ZnVuY3Rpb24odCxuKXticG4oKGwodCwzNiksbikpfTt2YXIgTEV0O0koQ2wsIk5vQ3Jvc3NpbmdNaW5pbWl6ZXIiLDE0MjMpLEQoODA5LDQxMyx1Q2UsbzNlKSxoLnRnPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvLGYsZyx3LEUsQyxMLEIseixWO3N3aXRjaChCPXRoaXMuZyxyLmcpe2Nhc2UgMTp7Zm9yKG89MCxmPTAsTD1uZXcgRyh0LmopO0wuYTxMLmMuYy5sZW5ndGg7KUU9bChyZShMKSwxMiksRS5lLmMubGVuZ3RoIT0wJiYoKytvLEUuaj09KEN0KCksUW4pJiYrK2YpO2ZvcihhPTEvKG8rMSksZz1uK2YqYSxWPW4rMS1hLEM9UncodCwocW8oKSwkbCkpLktjKCk7Qy5PYigpOylFPWwoQy5QYigpLDEyKSxFLmo9PShDdCgpLFFuKT8oQltFLnBdPWcsZy09YSk6KEJbRS5wXT1WLFYtPWEpO2JyZWFrfWNhc2UgMjp7Zm9yKHc9MCxMPW5ldyBHKHQuaik7TC5hPEwuYy5jLmxlbmd0aDspRT1sKHJlKEwpLDEyKSxFLmcuYy5sZW5ndGg9PTB8fCsrdztmb3IoYT0xLyh3KzEpLHo9bithLEM9UncodCwocW8oKSx6dSkpLktjKCk7Qy5PYigpOylFPWwoQy5QYigpLDEyKSxCW0UucF09eix6Kz1hO2JyZWFrfWRlZmF1bHQ6dGhyb3cgdWUobmV3IFluKCJQb3J0IHR5cGUgaXMgdW5kZWZpbmVkIikpfXJldHVybiAxfSxJKENsLCJOb2RlUmVsYXRpdmVQb3J0RGlzdHJpYnV0b3IiLDgwOSksRCg4MjIsMSx7fSxGc3QsUWd0KSxJKENsLCJTd2VlcENvcHkiLDgyMiksRCgxODYxLDEselAsUDF0KSxoLmhnPWZ1bmN0aW9uKHQsbil7fSxoLmZnPWZ1bmN0aW9uKCl7dmFyIHQ7dD1XZShWcixkaSwyOCx0aGlzLmYsMTUsMSksdGhpcy5kPW5ldyBZWWUodCksdGhpcy5hPW5ldyBJTyh0KX0saC5nZz1mdW5jdGlvbih0LG4scixhLG8sZil7dmFyIGc7Zz1sKGp0KGZbdF1bbl0uaixyKSwxMiksby5jPT1nJiZvLmMuaS5jPT1vLmQuaS5jJiYrK3RoaXMuZVt0XX0saC5pZz1mdW5jdGlvbih0LG4scil7dmFyIGE7YT1yW3RdW25dLHRoaXMuY1t0XT10aGlzLmNbdF18YS5rPT0oWm4oKSxBdSl9LGguamc9ZnVuY3Rpb24odCxuLHIsYSl7dmFyIG87bz1sKGp0KGFbdF1bbl0uaixyKSwxMiksby5wPXRoaXMuZisrLG8uZy5jLmxlbmd0aCtvLmUuYy5sZW5ndGg+MSYmKG8uaj09KEN0KCksYXIpP3RoaXMuYlt0XT0hMDpvLmo9PWVyJiZ0PjAmJih0aGlzLmJbdC0xXT0hMCkpfSxoLmY9MCxJKGJnLCJBbGxDcm9zc2luZ3NDb3VudGVyIiwxODYxKSxEKDU5NSwxLHt9LFRWKSxoLmI9MCxoLmQ9MCxJKGJnLCJCaW5hcnlJbmRleGVkVHJlZSIsNTk1KSxEKDUzMiwxLHt9LElPKTt2YXIgJERlLERXO0koYmcsIkNyb3NzaW5nc0NvdW50ZXIiLDUzMiksRCgxOTUwLDEsaWkscVllKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHFkbih0aGlzLmEsbCh0LDEyKSxsKG4sMTIpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKGJnLCJDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQwJFR5cGUiLDE5NTApLEQoMTk1MSwxLGlpLEhZZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBIZG4odGhpcy5hLGwodCwxMiksbChuLDEyKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShiZywiQ3Jvc3NpbmdzQ291bnRlci9sYW1iZGEkMSRUeXBlIiwxOTUxKSxEKDE5NTIsMSxpaSxWWWUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gVmRuKHRoaXMuYSxsKHQsMTIpLGwobiwxMikpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoYmcsIkNyb3NzaW5nc0NvdW50ZXIvbGFtYmRhJDIkVHlwZSIsMTk1MiksRCgxOTUzLDEsaWksVVllKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFVkbih0aGlzLmEsbCh0LDEyKSxsKG4sMTIpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKGJnLCJDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQzJFR5cGUiLDE5NTMpLEQoMTk1NCwxLGZyLEdZZSksaC5DZD1mdW5jdGlvbih0KXtVdm4odGhpcy5hLGwodCwxMikpfSxJKGJnLCJDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQ0JFR5cGUiLDE5NTQpLEQoMTk1NSwxLHRpLEtZZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gYmxuKHRoaXMuYSxsKHQsMTIpKX0sSShiZywiQ3Jvc3NpbmdzQ291bnRlci9sYW1iZGEkNSRUeXBlIiwxOTU1KSxEKDE5NTYsMSxmcixXWWUpLGguQ2Q9ZnVuY3Rpb24odCl7RHR0KHRoaXMsdCl9LEkoYmcsIkNyb3NzaW5nc0NvdW50ZXIvbGFtYmRhJDYkVHlwZSIsMTk1NiksRCgxOTU3LDEsZnIscWV0KSxoLkNkPWZ1bmN0aW9uKHQpe3ZhciBuO2prKCksZ2IodGhpcy5iLChuPXRoaXMuYSxsKHQsMTIpLG4pKX0sSShiZywiQ3Jvc3NpbmdzQ291bnRlci9sYW1iZGEkNyRUeXBlIiwxOTU3KSxEKDgzOSwxLExkLFhqKSxoLkxiPWZ1bmN0aW9uKHQpe3JldHVybiBqaygpLG5zKGwodCwxMiksKGZ0KCksamwpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGprKCksbnMobCh0LDEyKSwoZnQoKSxqbCkpfSxJKGJnLCJDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQ4JFR5cGUiLDgzOSksRCgxOTQ5LDEse30sWVllKSxJKGJnLCJIeXBlcmVkZ2VDcm9zc2luZ3NDb3VudGVyIiwxOTQ5KSxEKDQ3OCwxLHszNDoxLDQ3ODoxfSxVcnQpLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFY1bih0aGlzLGwodCw0NzgpKX0saC5iPTAsaC5jPTAsaC5lPTAsaC5mPTA7dmFyIFRPbj1JKGJnLCJIeXBlcmVkZ2VDcm9zc2luZ3NDb3VudGVyL0h5cGVyZWRnZSIsNDc4KTtEKDM3NCwxLHszNDoxLDM3NDoxfSxDSCksaC5GZD1mdW5jdGlvbih0KXtyZXR1cm4gaVRuKHRoaXMsbCh0LDM3NCkpfSxoLmI9MCxoLmM9MDt2YXIgTUV0PUkoYmcsIkh5cGVyZWRnZUNyb3NzaW5nc0NvdW50ZXIvSHlwZXJlZGdlQ29ybmVyIiwzNzQpO0QoNTMxLDIyLHszOjEsMzQ6MSwyMjoxLDUzMToxfSxqM2UpO3ZhciBjTSx1TSxERXQ9RnIoYmcsIkh5cGVyZWRnZUNyb3NzaW5nc0NvdW50ZXIvSHlwZXJlZGdlQ29ybmVyL1R5cGUiLDUzMSxIcixLcG4scjFuKSxJRXQ7RCgxNDI1LDEsVW8sWnJlKSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKFEobCh0LDM2KSwoZnQoKSxMdSkpLDIxKS5IYygoSG8oKSx2ZikpP09FdDpudWxsfSxoLktmPWZ1bmN0aW9uKHQsbil7cDhuKHRoaXMsbCh0LDM2KSxuKX07dmFyIE9FdDtJKEdvLCJJbnRlcmFjdGl2ZU5vZGVQbGFjZXIiLDE0MjUpLEQoMTQyNiwxLFVvLGVpZSksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbChRKGwodCwzNiksKGZ0KCksTHUpKSwyMSkuSGMoKEhvKCksdmYpKT9ORXQ6bnVsbH0saC5LZj1mdW5jdGlvbih0LG4pe1o2bih0aGlzLGwodCwzNiksbil9O3ZhciBORXQsSVcsT1c7SShHbywiTGluZWFyU2VnbWVudHNOb2RlUGxhY2VyIiwxNDI2KSxEKDI2MSwxLHszNDoxLDI2MToxfSxQd2UpLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIEF1bih0aGlzLGwodCwyNjEpKX0saC5GYj1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gRGUodCwyNjEpPyhuPWwodCwyNjEpLHRoaXMuYj09bi5iKTohMX0saC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4ibHMiK1RiKHRoaXMuZSl9LGguYT0wLGguYj0wLGguYz0tMSxoLmQ9LTEsaC5nPTA7dmFyIFBFdD1JKEdvLCJMaW5lYXJTZWdtZW50c05vZGVQbGFjZXIvTGluZWFyU2VnbWVudCIsMjYxKTtEKDE0MjgsMSxVbyxic3QpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIGwoUShsKHQsMzYpLChmdCgpLEx1KSksMjEpLkhjKChIbygpLHZmKSk/QkV0Om51bGx9LGguS2Y9ZnVuY3Rpb24odCxuKXtBSW4odGhpcyxsKHQsMzYpLG4pfSxoLmI9MCxoLmc9MDt2YXIgQkV0O0koR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyIiwxNDI4KSxEKDE0NDcsMSxpaSxHZWUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gcnUobCh0LDE3KS5hLGwobiwxNykuYSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShHbywiTmV0d29ya1NpbXBsZXhQbGFjZXIvMG1ldGhvZHJlZiRjb21wYXJlJFR5cGUiLDE0NDcpLEQoMTQ0OSwxLGlpLEtlZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBydShsKHQsMTcpLmEsbChuLDE3KS5hKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci8xbWV0aG9kcmVmJGNvbXBhcmUkVHlwZSIsMTQ0OSksRCg2NTUsMSx7NjU1OjF9LEhldCk7dmFyIENPbj1JKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9FZGdlUmVwIiw2NTUpO0QoNDEyLDEsezQxMjoxfSxENWUpLGguYj0hMTt2YXIgU09uPUkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL05vZGVSZXAiLDQxMik7RCg1MTUsMTMsezM6MSw0OjEsMjA6MSwzMToxLDU2OjEsMTM6MSwxNjoxLDE1OjEsNTk6MSw1MTU6MX0sUVFlKSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9QYXRoIiw1MTUpLEQoMTQyOSwxLHt9LFdlZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDE4KS5kLmkua30sSShHbywiTmV0d29ya1NpbXBsZXhQbGFjZXIvUGF0aC9sYW1iZGEkMCRUeXBlIiwxNDI5KSxEKDE0MzAsMSx0aSxZZWUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwyNzMpPT0oWm4oKSxBYSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL1BhdGgvbGFtYmRhJDEkVHlwZSIsMTQzMCksRCgxNDMxLDEse30sWGVlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMTgpLmQuaX0sSShHbywiTmV0d29ya1NpbXBsZXhQbGFjZXIvUGF0aC9sYW1iZGEkMiRUeXBlIiwxNDMxKSxEKDE0MzIsMSx0aSxYWWUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIExydChJMXQobCh0LDEwKSkpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9QYXRoL2xhbWJkYSQzJFR5cGUiLDE0MzIpLEQoMTQzMywxLHRpLFFlZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gU2RuKGwodCwxMikpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMCRUeXBlIiwxNDMzKSxEKDE0MzQsMSxmcixWZXQpLGguQ2Q9ZnVuY3Rpb24odCl7b2huKHRoaXMuYSx0aGlzLmIsbCh0LDEyKSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQxJFR5cGUiLDE0MzQpLEQoMTQ0MywxLGZyLFFZZSksaC5DZD1mdW5jdGlvbih0KXtPa24odGhpcy5hLGwodCwxOCkpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTAkVHlwZSIsMTQ0MyksRCgxNDQ0LDEse30sSmVlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBTaCgpLG5ldyBibihudWxsLG5ldyBrbihsKHQsMzApLmEsMTYpKX0sSShHbywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDExJFR5cGUiLDE0NDQpLEQoMTQ0NSwxLGZyLEpZZSksaC5DZD1mdW5jdGlvbih0KXtfU24odGhpcy5hLGwodCwxMCkpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTIkVHlwZSIsMTQ0NSksRCgxNDQ2LDEse30sWmVlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBTaCgpLHB0KGwodCwxMjUpLmUpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTMkVHlwZSIsMTQ0NiksRCgxNDQ4LDEse30sZXRlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBTaCgpLHB0KGwodCwxMjUpLmUpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTUkVHlwZSIsMTQ0OCksRCgxNDUwLDEsdGksdHRlKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBTaCgpLGwodCw0MTIpLmMuaz09KFpuKCksUHMpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTckVHlwZSIsMTQ1MCksRCgxNDUxLDEsdGksbnRlKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBTaCgpLGwodCw0MTIpLmMuai5jLmxlbmd0aD4xfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTgkVHlwZSIsMTQ1MSksRCgxNDUyLDEsZnIsVGF0KSxoLkNkPWZ1bmN0aW9uKHQpe2Y1bih0aGlzLmMsdGhpcy5iLHRoaXMuZCx0aGlzLmEsbCh0LDQxMikpfSxoLmM9MCxoLmQ9MCxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTkkVHlwZSIsMTQ1MiksRCgxNDM1LDEse30scnRlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBTaCgpLG5ldyBibihudWxsLG5ldyBrbihsKHQsMzApLmEsMTYpKX0sSShHbywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDIkVHlwZSIsMTQzNSksRCgxNDUzLDEsZnIsWlllKSxoLkNkPWZ1bmN0aW9uKHQpe3Vobih0aGlzLmEsbCh0LDEyKSl9LGguYT0wLEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyMCRUeXBlIiwxNDUzKSxEKDE0NTQsMSx7fSxpdGUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIFNoKCksbmV3IGJuKG51bGwsbmV3IGtuKGwodCwzMCkuYSwxNikpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMjEkVHlwZSIsMTQ1NCksRCgxNDU1LDEsZnIsZVhlKSxoLkNkPWZ1bmN0aW9uKHQpe3hobih0aGlzLmEsbCh0LDEwKSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyMiRUeXBlIiwxNDU1KSxEKDE0NTYsMSx0aSxzdGUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIExydCh0KX0sSShHbywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDIzJFR5cGUiLDE0NTYpLEQoMTQ1NywxLHt9LGF0ZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gU2goKSxuZXcgYm4obnVsbCxuZXcga24obCh0LDMwKS5hLDE2KSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyNCRUeXBlIiwxNDU3KSxEKDE0NTgsMSx0aSx0WGUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIE1sbih0aGlzLmEsbCh0LDEwKSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyNSRUeXBlIiwxNDU4KSxEKDE0NTksMSxmcixVZXQpLGguQ2Q9ZnVuY3Rpb24odCl7RjluKHRoaXMuYSx0aGlzLmIsbCh0LDEwKSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyNiRUeXBlIiwxNDU5KSxEKDE0NjAsMSx0aSxzOCksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gU2goKSwhRG8obCh0LDE4KSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyNyRUeXBlIiwxNDYwKSxEKDE0NjEsMSx0aSxRaiksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gU2goKSwhRG8obCh0LDE4KSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyOCRUeXBlIiwxNDYxKSxEKDE0NjIsMSx7fSxuWGUpLGguVmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gY2huKHRoaXMuYSxsKHQsMzApLGwobiwzMCkpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMjkkVHlwZSIsMTQ2MiksRCgxNDM2LDEse30sb3RlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBTaCgpLG5ldyBibihudWxsLG5ldyB2dyhuZXcgaHIoZHIocXMobCh0LDEwKSkuYS5LYygpLG5ldyBqKSkpKX0sSShHbywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDMkVHlwZSIsMTQzNiksRCgxNDM3LDEsdGksY3RlKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBTaCgpLFJibihsKHQsMTgpKX0sSShHbywiTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDQkVHlwZSIsMTQzNyksRCgxNDM4LDEsZnIsclhlKSxoLkNkPWZ1bmN0aW9uKHQpe0JBbih0aGlzLmEsbCh0LDE4KSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQ1JFR5cGUiLDE0MzgpLEQoMTQzOSwxLHt9LHV0ZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gU2goKSxuZXcgYm4obnVsbCxuZXcga24obCh0LDMwKS5hLDE2KSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQ2JFR5cGUiLDE0MzkpLEQoMTQ0MCwxLHRpLEpqKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBTaCgpLGwodCwxMCkuaz09KFpuKCksUHMpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkNyRUeXBlIiwxNDQwKSxEKDE0NDEsMSx7fSxsdGUpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIFNoKCksbmV3IGJuKG51bGwsbmV3IHZ3KG5ldyBocihkcihzcChsKHQsMTApKS5hLktjKCksbmV3IGopKSkpfSxJKEdvLCJOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkOCRUeXBlIiwxNDQxKSxEKDE0NDIsMSx0aSxUUyksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gU2goKSxDZG4obCh0LDE4KSl9LEkoR28sIk5ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQ5JFR5cGUiLDE0NDIpLEQoMTQyNCwxLFVvLHRpZSksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbChRKGwodCwzNiksKGZ0KCksTHUpKSwyMSkuSGMoKEhvKCksdmYpKT9GRXQ6bnVsbH0saC5LZj1mdW5jdGlvbih0LG4pe2JMbihsKHQsMzYpLG4pfTt2YXIgRkV0O0koR28sIlNpbXBsZU5vZGVQbGFjZXIiLDE0MjQpLEQoMTg1LDEsezE4NToxfSxmNiksaC5JYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PSIiLHRoaXMuYz09KHhkKCksdzMpP3QrPUR4OnRoaXMuYz09VDImJih0Kz1NeCksdGhpcy5vPT0oRDEoKSx3dik/dCs9d2hlOnRoaXMubz09WTE/dCs9IlVQIjp0Kz0iQkFMQU5DRUQiLHR9LEkoSWIsIkJLQWxpZ25lZExheW91dCIsMTg1KSxEKDUyMywyMix7MzoxLDM0OjEsMjI6MSw1MjM6MX0sJDNlKTt2YXIgVDIsdzMsUkV0PUZyKEliLCJCS0FsaWduZWRMYXlvdXQvSERpcmVjdGlvbiIsNTIzLEhyLFlwbixpMW4pLGpFdDtEKDUyMiwyMix7MzoxLDM0OjEsMjI6MSw1MjI6MX0sejNlKTt2YXIgd3YsWTEsJEV0PUZyKEliLCJCS0FsaWduZWRMYXlvdXQvVkRpcmVjdGlvbiIsNTIyLEhyLFhwbixzMW4pLHpFdDtEKDE2OTksMSx7fSxHZXQpLEkoSWIsIkJLQWxpZ25lciIsMTY5OSksRCgxNzAyLDEse30scmd0KSxJKEliLCJCS0NvbXBhY3RvciIsMTcwMiksRCg2NjMsMSx7NjYzOjF9LGh0ZSksaC5hPTAsSShJYiwiQktDb21wYWN0b3IvQ2xhc3NFZGdlIiw2NjMpLEQoNDY3LDEsezQ2NzoxfSxXUWUpLGguYT1udWxsLGguYj0wLEkoSWIsIkJLQ29tcGFjdG9yL0NsYXNzTm9kZSIsNDY3KSxEKDE0MjcsMSxVbyxYZXQpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIGwoUShsKHQsMzYpLChmdCgpLEx1KSksMjEpLkhjKChIbygpLHZmKSk/cUV0Om51bGx9LGguS2Y9ZnVuY3Rpb24odCxuKXtHSW4odGhpcyxsKHQsMzYpLG4pfSxoLmQ9ITE7dmFyIHFFdDtJKEliLCJCS05vZGVQbGFjZXIiLDE0MjcpLEQoMTcwMCwxLHt9LGZ0ZSksaC5kPTAsSShJYiwiTmVpZ2hib3Job29kSW5mb3JtYXRpb24iLDE3MDApLEQoMTcwMSwxLGlpLGlYZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiB5d24odGhpcyxsKHQsNDIpLGwobiw0MikpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoSWIsIk5laWdoYm9yaG9vZEluZm9ybWF0aW9uL05laWdoYm9yQ29tcGFyYXRvciIsMTcwMSksRCg4MjMsMSx7fSksSShJYiwiVGhyZXNob2xkU3RyYXRlZ3kiLDgyMyksRCgxODI1LDgyMyx7fSxZUWUpLGgud2c9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0aGlzLmEubz09KEQxKCksWTEpP2dzOmlhfSxoLnhnPWZ1bmN0aW9uKCl7fSxJKEliLCJUaHJlc2hvbGRTdHJhdGVneS9OdWxsVGhyZXNob2xkU3RyYXRlZ3kiLDE4MjUpLEQoNTg3LDEsezU4NzoxfSxRZXQpLGguYz0hMSxoLmQ9ITEsSShJYiwiVGhyZXNob2xkU3RyYXRlZ3kvUG9zdHByb2Nlc3NhYmxlIiw1ODcpLEQoMTgyNiw4MjMse30sWFFlKSxoLndnPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvLGY7cmV0dXJuIG89bj09cixhPXRoaXMuYS5hW3IucF09PW4sb3x8YT8oZj10LHRoaXMuYS5jPT0oeGQoKSx3Myk/KG8mJihmPXZsZSh0aGlzLG4sITApKSwhaXNOYU4oZikmJiFpc0Zpbml0ZShmKSYmYSYmKGY9dmxlKHRoaXMsciwhMSkpKToobyYmKGY9dmxlKHRoaXMsbiwhMCkpLCFpc05hTihmKSYmIWlzRmluaXRlKGYpJiZhJiYoZj12bGUodGhpcyxyLCExKSkpLGYpOnR9LGgueGc9ZnVuY3Rpb24oKXtmb3IodmFyIHQsbixyLGEsbzt0aGlzLmQuYiE9MDspbz1sKGgybih0aGlzLmQpLDU4NyksYT1MbXQodGhpcyxvKSxhLmEmJih0PWEuYSxyPVJ0KHRoaXMuYS5mW3RoaXMuYS5nW28uYi5wXS5wXSksISghciYmIURvKHQpJiZ0LmMuaS5jPT10LmQuaS5jKSYmKG49TjJ0KHRoaXMsbyksbnx8T2xuKHRoaXMuZSxvKSkpO2Zvcig7dGhpcy5lLmEuYy5sZW5ndGghPTA7KU4ydCh0aGlzLGwoUDB0KHRoaXMuZSksNTg3KSl9LEkoSWIsIlRocmVzaG9sZFN0cmF0ZWd5L1NpbXBsZVRocmVzaG9sZFN0cmF0ZWd5IiwxODI2KSxEKDY0NSwxLHs2NDU6MSwxODg6MSwxOTY6MX0sZHRlKSxoLmRnPWZ1bmN0aW9uKCl7cmV0dXJuIFZmdCh0aGlzKX0saC5xZz1mdW5jdGlvbigpe3JldHVybiBWZnQodGhpcyl9O3ZhciBNZGU7SShtZmUsIkVkZ2VSb3V0ZXJGYWN0b3J5Iiw2NDUpLEQoMTQ4NSwxLFVvLG5pZSksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gclNuKGwodCwzNikpfSxoLktmPWZ1bmN0aW9uKHQsbil7RUxuKGwodCwzNiksbil9O3ZhciBIRXQsVkV0LFVFdCxHRXQsS0V0LHpEZSxXRXQsWUV0O0kobWZlLCJPcnRob2dvbmFsRWRnZVJvdXRlciIsMTQ4NSksRCgxNDc4LDEsVW8sWWV0KSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBDOG4obCh0LDM2KSl9LGguS2Y9ZnVuY3Rpb24odCxuKXtHRG4odGhpcyxsKHQsMzYpLG4pfTt2YXIgWEV0LFFFdCxKRXQsWkV0LElCLGVUdDtJKG1mZSwiUG9seWxpbmVFZGdlUm91dGVyIiwxNDc4KSxEKDE0NzksMSxMZCxwdGUpLGguTGI9ZnVuY3Rpb24odCl7cmV0dXJuIEE3ZShsKHQsMTApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIEE3ZShsKHQsMTApKX0sSShtZmUsIlBvbHlsaW5lRWRnZVJvdXRlci8xIiwxNDc5KSxEKDE4NzIsMSx0aSxidGUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMzIpLmM9PShKMCgpLHFiKX0sSShpMSwiSHlwZXJFZGdlQ3ljbGVEZXRlY3Rvci9sYW1iZGEkMCRUeXBlIiwxODcyKSxEKDE4NzMsMSx7fSxtdGUpLGguWmU9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMzIpLmR9LEkoaTEsIkh5cGVyRWRnZUN5Y2xlRGV0ZWN0b3IvbGFtYmRhJDEkVHlwZSIsMTg3MyksRCgxODc0LDEsdGksdnRlKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMTMyKS5jPT0oSjAoKSxxYil9LEkoaTEsIkh5cGVyRWRnZUN5Y2xlRGV0ZWN0b3IvbGFtYmRhJDIkVHlwZSIsMTg3NCksRCgxODc1LDEse30sd3RlKSxoLlplPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMTMyKS5kfSxJKGkxLCJIeXBlckVkZ2VDeWNsZURldGVjdG9yL2xhbWJkYSQzJFR5cGUiLDE4NzUpLEQoMTg3NiwxLHt9LHl0ZSksaC5aZT1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDEzMikuZH0sSShpMSwiSHlwZXJFZGdlQ3ljbGVEZXRlY3Rvci9sYW1iZGEkNCRUeXBlIiwxODc2KSxEKDE4NzcsMSx7fSxndGUpLGguWmU9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMzIpLmR9LEkoaTEsIkh5cGVyRWRnZUN5Y2xlRGV0ZWN0b3IvbGFtYmRhJDUkVHlwZSIsMTg3NyksRCgxMTgsMSx7MzQ6MSwxMTg6MX0seE4pLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIEx1bih0aGlzLGwodCwxMTgpKX0saC5GYj1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gRGUodCwxMTgpPyhuPWwodCwxMTgpLHRoaXMuZz09bi5nKTohMX0saC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmd9LGguSWI9ZnVuY3Rpb24oKXt2YXIgdCxuLHIsYTtmb3IodD1uZXcgVGgoInsiKSxhPW5ldyBHKHRoaXMubik7YS5hPGEuYy5jLmxlbmd0aDspcj1sKHJlKGEpLDEyKSxuPUhOKHIuaSksbj09bnVsbCYmKG49Im4iK25pdChyLmkpKSx0LmErPSIiK24sYS5hPGEuYy5jLmxlbmd0aCYmKHQuYSs9IiwiKTtyZXR1cm4gdC5hKz0ifSIsdC5hfSxoLmE9MCxoLmI9MCxoLmM9TmFOLGguZD0wLGguZz0wLGguaT0wLGgubz0wLGgucz1OYU4sSShpMSwiSHlwZXJFZGdlU2VnbWVudCIsMTE4KSxEKDEzMiwxLHsxMzI6MX0sUG0pLGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hKyItPiIrdGhpcy5iKyIgKCIrV2huKHRoaXMuYykrIikifSxoLmQ9MCxJKGkxLCJIeXBlckVkZ2VTZWdtZW50RGVwZW5kZW5jeSIsMTMyKSxEKDUyOCwyMix7MzoxLDM0OjEsMjI6MSw1Mjg6MX0scTNlKTt2YXIgcWIsRTQsdFR0PUZyKGkxLCJIeXBlckVkZ2VTZWdtZW50RGVwZW5kZW5jeS9EZXBlbmRlbmN5VHlwZSIsNTI4LEhyLFFwbixhMW4pLG5UdDtEKDE4NzgsMSx7fSxzWGUpLEkoaTEsIkh5cGVyRWRnZVNlZ21lbnRTcGxpdHRlciIsMTg3OCksRCgxODc5LDEse30sUUplKSxoLmE9MCxoLmI9MCxJKGkxLCJIeXBlckVkZ2VTZWdtZW50U3BsaXR0ZXIvQXJlYVJhdGluZyIsMTg3OSksRCgzMzksMSx7MzM5OjF9LHZhZSksaC5hPTAsaC5iPTAsaC5jPTAsSShpMSwiSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL0ZyZWVBcmVhIiwzMzkpLEQoMTg4MCwxLGlpLGE4KSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFdmbihsKHQsMTE4KSxsKG4sMTE4KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShpMSwiSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL2xhbWJkYSQwJFR5cGUiLDE4ODApLEQoMTg4MSwxLGZyLENhdCksaC5DZD1mdW5jdGlvbih0KXtrbW4odGhpcy5hLHRoaXMuZCx0aGlzLmMsdGhpcy5iLGwodCwxMTgpKX0saC5iPTAsSShpMSwiSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL2xhbWJkYSQxJFR5cGUiLDE4ODEpLEQoMTg4MiwxLHt9LHh0ZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGJuKG51bGwsbmV3IGtuKGwodCwxMTgpLmUsMTYpKX0sSShpMSwiSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL2xhbWJkYSQyJFR5cGUiLDE4ODIpLEQoMTg4MywxLHt9LGt0ZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGJuKG51bGwsbmV3IGtuKGwodCwxMTgpLmosMTYpKX0sSShpMSwiSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL2xhbWJkYSQzJFR5cGUiLDE4ODMpLEQoMTg4NCwxLHt9LEV0ZSksaC5ZZT1mdW5jdGlvbih0KXtyZXR1cm4gemUoR2UodCkpfSxJKGkxLCJIeXBlckVkZ2VTZWdtZW50U3BsaXR0ZXIvbGFtYmRhJDQkVHlwZSIsMTg4NCksRCg2NjQsMSx7fSxIYWUpLGguYT0wLGguYj0wLGguYz0wLEkoaTEsIk9ydGhvZ29uYWxSb3V0aW5nR2VuZXJhdG9yIiw2NjQpLEQoMTcwMywxLHt9LFR0ZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGJuKG51bGwsbmV3IGtuKGwodCwxMTgpLmUsMTYpKX0sSShpMSwiT3J0aG9nb25hbFJvdXRpbmdHZW5lcmF0b3IvbGFtYmRhJDAkVHlwZSIsMTcwMyksRCgxNzA0LDEse30sQ3RlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYm4obnVsbCxuZXcga24obCh0LDExOCkuaiwxNikpfSxJKGkxLCJPcnRob2dvbmFsUm91dGluZ0dlbmVyYXRvci9sYW1iZGEkMSRUeXBlIiwxNzA0KSxEKDY3MCwxLHt9KSxJKHZmZSwiQmFzZVJvdXRpbmdEaXJlY3Rpb25TdHJhdGVneSIsNjcwKSxEKDE4NzAsNjcwLHt9LGVKZSksaC55Zz1mdW5jdGlvbih0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2lmKCEodC5yJiYhdC5xKSlmb3IoTD1uK3QubypyLEM9bmV3IEcodC5uKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3IoRT1sKHJlKEMpLDEyKSxCPUljKGhlKGxlKEVhLDEpLGR0LDgsMCxbRS5pLm4sRS5uLEUuYV0pKS5hLHc9bmV3IEcoRS5nKTt3LmE8dy5jLmMubGVuZ3RoOylnPWwocmUodyksMTgpLERvKGcpfHwoSj1nLmQsdGU9SWMoaGUobGUoRWEsMSksZHQsOCwwLFtKLmkubixKLm4sSi5hXSkpLmEsYi5NYXRoLmFicyhCLXRlKT5EZCYmKGY9TCxvPXQsYT1uZXcgbHQoQixmKSx1aShnLmEsYSksVncodGhpcyxnLG8sYSwhMSksej10LnIseiYmKFY9emUoR2UoZmYoei5lLDApKSksYT1uZXcgbHQoVixmKSx1aShnLmEsYSksVncodGhpcyxnLG8sYSwhMSksZj1uK3oubypyLG89eixhPW5ldyBsdChWLGYpLHVpKGcuYSxhKSxWdyh0aGlzLGcsbyxhLCExKSksYT1uZXcgbHQodGUsZiksdWkoZy5hLGEpLFZ3KHRoaXMsZyxvLGEsITEpKSl9LGguemc9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaS5uLmErdC5uLmErdC5hLmF9LGguQWc9ZnVuY3Rpb24oKXtyZXR1cm4gQ3QoKSxEcn0saC5CZz1mdW5jdGlvbigpe3JldHVybiBDdCgpLFFufSxJKHZmZSwiTm9ydGhUb1NvdXRoUm91dGluZ1N0cmF0ZWd5IiwxODcwKSxEKDE4NzEsNjcwLHt9LHRKZSksaC55Zz1mdW5jdGlvbih0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2lmKCEodC5yJiYhdC5xKSlmb3IoTD1uLXQubypyLEM9bmV3IEcodC5uKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3IoRT1sKHJlKEMpLDEyKSxCPUljKGhlKGxlKEVhLDEpLGR0LDgsMCxbRS5pLm4sRS5uLEUuYV0pKS5hLHc9bmV3IEcoRS5nKTt3LmE8dy5jLmMubGVuZ3RoOylnPWwocmUodyksMTgpLERvKGcpfHwoSj1nLmQsdGU9SWMoaGUobGUoRWEsMSksZHQsOCwwLFtKLmkubixKLm4sSi5hXSkpLmEsYi5NYXRoLmFicyhCLXRlKT5EZCYmKGY9TCxvPXQsYT1uZXcgbHQoQixmKSx1aShnLmEsYSksVncodGhpcyxnLG8sYSwhMSksej10LnIseiYmKFY9emUoR2UoZmYoei5lLDApKSksYT1uZXcgbHQoVixmKSx1aShnLmEsYSksVncodGhpcyxnLG8sYSwhMSksZj1uLXoubypyLG89eixhPW5ldyBsdChWLGYpLHVpKGcuYSxhKSxWdyh0aGlzLGcsbyxhLCExKSksYT1uZXcgbHQodGUsZiksdWkoZy5hLGEpLFZ3KHRoaXMsZyxvLGEsITEpKSl9LGguemc9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaS5uLmErdC5uLmErdC5hLmF9LGguQWc9ZnVuY3Rpb24oKXtyZXR1cm4gQ3QoKSxRbn0saC5CZz1mdW5jdGlvbigpe3JldHVybiBDdCgpLERyfSxJKHZmZSwiU291dGhUb05vcnRoUm91dGluZ1N0cmF0ZWd5IiwxODcxKSxEKDE4NjksNjcwLHt9LG5KZSksaC55Zz1mdW5jdGlvbih0LG4scil7dmFyIGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlO2lmKCEodC5yJiYhdC5xKSlmb3IoTD1uK3QubypyLEM9bmV3IEcodC5uKTtDLmE8Qy5jLmMubGVuZ3RoOylmb3IoRT1sKHJlKEMpLDEyKSxCPUljKGhlKGxlKEVhLDEpLGR0LDgsMCxbRS5pLm4sRS5uLEUuYV0pKS5iLHc9bmV3IEcoRS5nKTt3LmE8dy5jLmMubGVuZ3RoOylnPWwocmUodyksMTgpLERvKGcpfHwoSj1nLmQsdGU9SWMoaGUobGUoRWEsMSksZHQsOCwwLFtKLmkubixKLm4sSi5hXSkpLmIsYi5NYXRoLmFicyhCLXRlKT5EZCYmKGY9TCxvPXQsYT1uZXcgbHQoZixCKSx1aShnLmEsYSksVncodGhpcyxnLG8sYSwhMCksej10LnIseiYmKFY9emUoR2UoZmYoei5lLDApKSksYT1uZXcgbHQoZixWKSx1aShnLmEsYSksVncodGhpcyxnLG8sYSwhMCksZj1uK3oubypyLG89eixhPW5ldyBsdChmLFYpLHVpKGcuYSxhKSxWdyh0aGlzLGcsbyxhLCEwKSksYT1uZXcgbHQoZix0ZSksdWkoZy5hLGEpLFZ3KHRoaXMsZyxvLGEsITApKSl9LGguemc9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaS5uLmIrdC5uLmIrdC5hLmJ9LGguQWc9ZnVuY3Rpb24oKXtyZXR1cm4gQ3QoKSxhcn0saC5CZz1mdW5jdGlvbigpe3JldHVybiBDdCgpLGVyfSxJKHZmZSwiV2VzdFRvRWFzdFJvdXRpbmdTdHJhdGVneSIsMTg2OSksRCg4MjgsMSx7fSxTa2UpLGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gVGIodGhpcy5hKX0saC5iPTAsaC5jPSExLGguZD0hMSxoLmY9MCxJKFp5LCJOdWJTcGxpbmUiLDgyOCksRCg0MTgsMSx7NDE4OjF9LGRidCxyb3QpLEkoWnksIk51YlNwbGluZS9Qb2xhckNQIiw0MTgpLEQoMTQ4MCwxLFVvLFlkdCksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gZ3huKGwodCwzNikpfSxoLktmPWZ1bmN0aW9uKHQsbil7aEluKHRoaXMsbCh0LDM2KSxuKX07dmFyIHJUdCxpVHQsc1R0LGFUdCxvVHQ7SShaeSwiU3BsaW5lRWRnZVJvdXRlciIsMTQ4MCksRCgyNzQsMSx7Mjc0OjF9LFdIKSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYSsiIC0+KCIrdGhpcy5jKyIpICIrdGhpcy5ifSxoLmM9MCxJKFp5LCJTcGxpbmVFZGdlUm91dGVyL0RlcGVuZGVuY3kiLDI3NCksRCg0NjUsMjIsezM6MSwzNDoxLDIyOjEsNDY1OjF9LEgzZSk7dmFyIEhiLEs2LGNUdD1GcihaeSwiU3BsaW5lRWRnZVJvdXRlci9TaWRlVG9Qcm9jZXNzIiw0NjUsSHIscjJuLG8xbiksdVR0O0QoMTQ4MSwxLHRpLFN0ZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gR0EoKSwhbCh0LDEzMSkub30sSShaeSwiU3BsaW5lRWRnZVJvdXRlci9sYW1iZGEkMCRUeXBlIiwxNDgxKSxEKDE0ODIsMSx7fSxfdGUpLGguWmU9ZnVuY3Rpb24odCl7cmV0dXJuIEdBKCksbCh0LDEzMSkudisxfSxJKFp5LCJTcGxpbmVFZGdlUm91dGVyL2xhbWJkYSQxJFR5cGUiLDE0ODIpLEQoMTQ4MywxLGZyLEpldCksaC5DZD1mdW5jdGlvbih0KXtMZG4odGhpcy5hLHRoaXMuYixsKHQsNDIpKX0sSShaeSwiU3BsaW5lRWRnZVJvdXRlci9sYW1iZGEkMiRUeXBlIiwxNDgzKSxEKDE0ODQsMSxmcixaZXQpLGguQ2Q9ZnVuY3Rpb24odCl7TWRuKHRoaXMuYSx0aGlzLmIsbCh0LDQyKSl9LEkoWnksIlNwbGluZUVkZ2VSb3V0ZXIvbGFtYmRhJDMkVHlwZSIsMTQ4NCksRCgxMzEsMSx7MzQ6MSwxMzE6MX0sX3B0LElrZSksaC5GZD1mdW5jdGlvbih0KXtyZXR1cm4gSXVuKHRoaXMsbCh0LDEzMSkpfSxoLmI9MCxoLmU9ITEsaC5mPTAsaC5nPTAsaC5qPSExLGguaz0hMSxoLm49MCxoLm89ITEsaC5wPSExLGgucT0hMSxoLnM9MCxoLnU9MCxoLnY9MCxoLkY9MCxJKFp5LCJTcGxpbmVTZWdtZW50IiwxMzEpLEQoNDY4LDEsezQ2ODoxfSxBdGUpLGguYT0wLGguYj0hMSxoLmM9ITEsaC5kPSExLGguZT0hMSxoLmY9MCxJKFp5LCJTcGxpbmVTZWdtZW50L0VkZ2VJbmZvcm1hdGlvbiIsNDY4KSxEKDExOTgsMSx7fSxDUyksSShncCxMRWUsMTE5OCksRCgxMTk5LDEsaWksTHRlKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFhrbihsKHQsMTIxKSxsKG4sMTIxKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShncCxFM3QsMTE5OSksRCgxMTk3LDEse30sZFplKSxJKGdwLCJNclRyZWUiLDExOTcpLEQoNDA1LDIyLHszOjEsMzQ6MSwyMjoxLDQwNToxLDE4ODoxLDE5NjoxfSx2cSksaC5kZz1mdW5jdGlvbigpe3JldHVybiBXcHQodGhpcyl9LGgucWc9ZnVuY3Rpb24oKXtyZXR1cm4gV3B0KHRoaXMpfTt2YXIgTlcsbE0saE0sZk0scURlPUZyKGdwLCJUcmVlTGF5b3V0UGhhc2VzIiw0MDUsSHIsc21uLGMxbiksbFR0O0QoMTExMiwyMDUsdHYsSHJ0KSxoLnJmPWZ1bmN0aW9uKHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQztmb3IoUnQoQnQoYXQodCwoSGMoKSxkSWUpKSkpfHxLTygocj1uZXcgWXYoKGF3KCksbmV3IEp2KHQpKSkscikpLGc9bi5laCh4ZmUpLGcuVWcoImJ1aWxkIHRHcmFwaCIsMSksdz0oRT1uZXcgbk4scGMoRSx0KSxydChFLChRaSgpLGdNKSx0KSxDPW5ldyBQcixIX24odCxFLEMpLGNBbih0LEUsQyksRSksZy5WZygpLGc9bi5laCh4ZmUpLGcuVWcoIlNwbGl0IGdyYXBoIiwxKSxmPVlfbih0aGlzLmEsdyksZy5WZygpLG89bmV3IEcoZik7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDEyMSksWjhuKHRoaXMuYixhLG4uZWgoLjU5OTk5OTk5NDAzOTUzNTUvZi5jLmxlbmd0aCkpO2c9bi5laCh4ZmUpLGcuVWcoIlBhY2sgY29tcG9uZW50cyIsMSksdz1LSW4oZiksZy5WZygpLGc9bi5laCh4ZmUpLGcuVWcoIkFwcGx5IGxheW91dCByZXN1bHRzIiwxKSxCTW4odyksZy5WZygpfSxJKGdwLCJUcmVlTGF5b3V0UHJvdmlkZXIiLDExMTIpLEQoMTg5NCwxLGhnLER0ZSksaC5KYz1mdW5jdGlvbih0KXt0byh0aGlzLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIENuKCksTWsoKSxBVH0sSShncCwiVHJlZVV0aWwvMSIsMTg5NCksRCgxODk1LDEsaGcsSXRlKSxoLkpjPWZ1bmN0aW9uKHQpe3RvKHRoaXMsdCl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gQ24oKSxNaygpLEFUfSxJKGdwLCJUcmVlVXRpbC8yIiwxODk1KSxEKDE4ODUsMSx0aSxPdGUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIFJ0KEJ0KFEobCh0LDQwKSwoUWkoKSxWYikpKSl9LEkoZ3AsIlRyZWVVdGlsL2xhbWJkYSQwJFR5cGUiLDE4ODUpLEQoMTg5MSwxLHRpLGFYZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLkhjKGwodCw0MCkpfSxJKGdwLCJUcmVlVXRpbC9sYW1iZGEkMTAkVHlwZSIsMTg5MSksRCgxODkyLDEse30sb1hlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBpbW4odGhpcy5hLGwodCw0MCkpfSxJKGdwLCJUcmVlVXRpbC9sYW1iZGEkMTEkVHlwZSIsMTg5MiksRCgxODkzLDEsdGksZXR0KSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBud24odGhpcy5hLHRoaXMuYixsKHQsNDApKX0sSShncCwiVHJlZVV0aWwvbGFtYmRhJDEyJFR5cGUiLDE4OTMpLEQoMTg4NiwxLHRpLGNYZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gcTRuKHRoaXMuYSxsKHQsNjUpKX0sSShncCwiVHJlZVV0aWwvbGFtYmRhJDMkVHlwZSIsMTg4NiksRCgxODg3LDEsaWksTXRlKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFlmbihsKHQsNjUpLGwobiw2NSkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoZ3AsIlRyZWVVdGlsL2xhbWJkYSQ0JFR5cGUiLDE4ODcpLEQoMTg4OCwxLHRpLHVYZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gSDRuKHRoaXMuYSxsKHQsNjUpKX0sSShncCwiVHJlZVV0aWwvbGFtYmRhJDckVHlwZSIsMTg4OCksRCgxODg5LDEsaWksTnRlKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFhmbihsKHQsNjUpLGwobiw2NSkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoZ3AsIlRyZWVVdGlsL2xhbWJkYSQ4JFR5cGUiLDE4ODkpLEQoMTg5MCwxLHt9LFB0ZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDY1KS5ifSxJKGdwLCJUcmVlVXRpbC9sYW1iZGEkOSRUeXBlIiwxODkwKSxEKDUwOCwxMzcsezM6MSw1MDg6MSw5NjoxLDEzNzoxfSksaC5nPTAsSSh2TCwiVEdyYXBoRWxlbWVudCIsNTA4KSxEKDY1LDUwOCx7MzoxLDY1OjEsNTA4OjEsOTY6MSwxMzc6MX0sTjVlKSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYiYmdGhpcy5jP0JtKHRoaXMuYikrIi0+IitCbSh0aGlzLmMpOiJlXyIrZXModGhpcyl9LEkodkwsIlRFZGdlIiw2NSksRCgxMjEsMTM3LHszOjEsMTIxOjEsOTY6MSwxMzc6MX0sbk4pLGguSWI9ZnVuY3Rpb24oKXt2YXIgdCxuLHIsYSxvO2ZvcihvPW51bGwsYT1Scih0aGlzLmIsMCk7YS5iIT1hLmQuYzspcj1sKEJyKGEpLDQwKSxvKz0oci5jPT1udWxsfHxyLmMubGVuZ3RoPT0wPyJuXyIrci5nOiJuXyIrci5jKStgCmA7Zm9yKG49UnIodGhpcy5hLDApO24uYiE9bi5kLmM7KXQ9bChCcihuKSw2NSksbys9KHQuYiYmdC5jP0JtKHQuYikrIi0+IitCbSh0LmMpOiJlXyIrZXModCkpK2AKYDtyZXR1cm4gb307dmFyIF9Pbj1JKHZMLCJUR3JhcGgiLDEyMSk7RCg2NDMsNTA4LHszOjEsNTA4OjEsNjQzOjEsOTY6MSwxMzc6MX0pLEkodkwsIlRTaGFwZSIsNjQzKSxEKDQwLDY0Myx7MzoxLDUwODoxLDQwOjEsNjQzOjEsOTY6MSwxMzc6MX0seGNlKSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIEJtKHRoaXMpfTt2YXIgUFc9SSh2TCwiVE5vZGUiLDQwKTtEKDIzNiwxLGhnLEhnKSxoLkpjPWZ1bmN0aW9uKHQpe3RvKHRoaXMsdCl9LGguS2M9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1Scih0aGlzLmEuZCwwKSxuZXcgQzUodCl9LEkodkwsIlROb2RlLzIiLDIzNiksRCgzMjksMSxPYSxDNSksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIGwoQnIodGhpcy5hKSw2NSkuY30saC5PYj1mdW5jdGlvbigpe3JldHVybiBRSSh0aGlzLmEpfSxoLlFiPWZ1bmN0aW9uKCl7WW9lKHRoaXMuYSl9LEkodkwsIlROb2RlLzIvMSIsMzI5KSxEKDE5MjMsMSx0cyxCdGUpLGguS2Y9ZnVuY3Rpb24odCxuKXt6SW4odGhpcyxsKHQsMTIxKSxuKX0sSShTdSwiQ29tcGFjdGlvblByb2Nlc3NvciIsMTkyMyksRCgxOTI0LDEsaWksbFhlKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEEzbih0aGlzLmEsbCh0LDQwKSxsKG4sNDApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKFN1LCJDb21wYWN0aW9uUHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE5MjQpLEQoMTkyNSwxLHRpLHR0dCksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gTnBuKHRoaXMuYix0aGlzLmEsbCh0LDQyKSl9LGguYT0wLGguYj0wLEkoU3UsIkNvbXBhY3Rpb25Qcm9jZXNzb3IvbGFtYmRhJDEkVHlwZSIsMTkyNSksRCgxOTM0LDEsaWksbzgpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gQ2duKGwodCw0MCksbChuLDQwKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShTdSwiQ29tcGFjdGlvblByb2Nlc3Nvci9sYW1iZGEkMTAkVHlwZSIsMTkzNCksRCgxOTM1LDEsaWksWmopLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gamhuKGwodCw0MCksbChuLDQwKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShTdSwiQ29tcGFjdGlvblByb2Nlc3Nvci9sYW1iZGEkMTEkVHlwZSIsMTkzNSksRCgxOTM2LDEsaWksRnRlKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFNnbihsKHQsNDApLGwobiw0MCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoU3UsIkNvbXBhY3Rpb25Qcm9jZXNzb3IvbGFtYmRhJDEyJFR5cGUiLDE5MzYpLEQoMTkyNiwxLHRpLGhYZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4ga2huKHRoaXMuYSxsKHQsNDIpKX0saC5hPTAsSShTdSwiQ29tcGFjdGlvblByb2Nlc3Nvci9sYW1iZGEkMiRUeXBlIiwxOTI2KSxEKDE5MjcsMSx0aSxmWGUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIEVobih0aGlzLmEsbCh0LDQyKSl9LGguYT0wLEkoU3UsIkNvbXBhY3Rpb25Qcm9jZXNzb3IvbGFtYmRhJDMkVHlwZSIsMTkyNyksRCgxOTI4LDEsdGkscEkpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCw0MCkuYy5pbmRleE9mKERHKT09LTF9LEkoU3UsIkNvbXBhY3Rpb25Qcm9jZXNzb3IvbGFtYmRhJDQkVHlwZSIsMTkyOCksRCgxOTI5LDEse30sZFhlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBCYm4odGhpcy5hLGwodCw0MCkpfSxoLmE9MCxJKFN1LCJDb21wYWN0aW9uUHJvY2Vzc29yL2xhbWJkYSQ1JFR5cGUiLDE5MjkpLEQoMTkzMCwxLHt9LGdYZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gVnZuKHRoaXMuYSxsKHQsNDApKX0saC5hPTAsSShTdSwiQ29tcGFjdGlvblByb2Nlc3Nvci9sYW1iZGEkNiRUeXBlIiwxOTMwKSxEKDE5MzEsMSxpaSxwWGUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdHZuKHRoaXMuYSxsKHQsMjQwKSxsKG4sMjQwKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShTdSwiQ29tcGFjdGlvblByb2Nlc3Nvci9sYW1iZGEkNyRUeXBlIiwxOTMxKSxEKDE5MzIsMSxpaSxiWGUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbnZuKHRoaXMuYSxsKHQsNDApLGwobiw0MCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoU3UsIkNvbXBhY3Rpb25Qcm9jZXNzb3IvbGFtYmRhJDgkVHlwZSIsMTkzMiksRCgxOTMzLDEsaWksUnRlKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuICRobihsKHQsNDApLGwobiw0MCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoU3UsIkNvbXBhY3Rpb25Qcm9jZXNzb3IvbGFtYmRhJDkkVHlwZSIsMTkzMyksRCgxOTIxLDEsdHMsanRlKSxoLktmPWZ1bmN0aW9uKHQsbil7RlNuKGwodCwxMjEpLG4pfSxJKFN1LCJEaXJlY3Rpb25Qcm9jZXNzb3IiLDE5MjEpLEQoMTkxMywxLHRzLHFydCksaC5LZj1mdW5jdGlvbih0LG4pe2FBbih0aGlzLGwodCwxMjEpLG4pfSxJKFN1LCJGYW5Qcm9jZXNzb3IiLDE5MTMpLEQoMTkzNywxLHRzLCR0ZSksaC5LZj1mdW5jdGlvbih0LG4pe0NTbihsKHQsMTIxKSxuKX0sSShTdSwiR3JhcGhCb3VuZHNQcm9jZXNzb3IiLDE5MzcpLEQoMTkzOCwxLHt9LHp0ZSksaC5ZZT1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDQwKS5lLmF9LEkoU3UsIkdyYXBoQm91bmRzUHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE5MzgpLEQoMTkzOSwxLHt9LHF0ZSksaC5ZZT1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDQwKS5lLmJ9LEkoU3UsIkdyYXBoQm91bmRzUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUiLDE5MzkpLEQoMTk0MCwxLHt9LEh0ZSksaC5ZZT1mdW5jdGlvbih0KXtyZXR1cm4gc2xuKGwodCw0MCkpfSxJKFN1LCJHcmFwaEJvdW5kc1Byb2Nlc3Nvci9sYW1iZGEkMiRUeXBlIiwxOTQwKSxEKDE5NDEsMSx7fSxWdGUpLGguWWU9ZnVuY3Rpb24odCl7cmV0dXJuIGlsbihsKHQsNDApKX0sSShTdSwiR3JhcGhCb3VuZHNQcm9jZXNzb3IvbGFtYmRhJDMkVHlwZSIsMTk0MSksRCgyNjIsMjIsezM6MSwzNDoxLDIyOjEsMjYyOjEsMTk2OjF9LG93KSxoLmRnPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZyl7Y2FzZSAwOnJldHVybiBuZXcgYkplO2Nhc2UgMTpyZXR1cm4gbmV3IHFydDtjYXNlIDI6cmV0dXJuIG5ldyBwSmU7Y2FzZSAzOnJldHVybiBuZXcgbiQ7Y2FzZSA0OnJldHVybiBuZXcgVXRlO2Nhc2UgODpyZXR1cm4gbmV3IGUkO2Nhc2UgNTpyZXR1cm4gbmV3IGp0ZTtjYXNlIDY6cmV0dXJuIG5ldyBpJDtjYXNlIDc6cmV0dXJuIG5ldyBCdGU7Y2FzZSA5OnJldHVybiBuZXcgJHRlO2Nhc2UgMTA6cmV0dXJuIG5ldyBLdGU7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgWW4oRmhlKyh0aGlzLmYhPW51bGw/dGhpcy5mOiIiK3RoaXMuZykpKX19O3ZhciBIRGUsVkRlLFVEZSxHRGUsS0RlLFdEZSxZRGUsWERlLFFEZSxKRGUsRGRlLEFPbj1GcihTdSxSaGUsMjYyLEhyLEJmdCx1MW4pLGhUdDtEKDE5MjAsMSx0cyxlJCksaC5LZj1mdW5jdGlvbih0LG4pe1JEbihsKHQsMTIxKSxuKX0sSShTdSwiTGV2ZWxDb29yZGluYXRlc1Byb2Nlc3NvciIsMTkyMCksRCgxOTE4LDEsdHMsVXRlKSxoLktmPWZ1bmN0aW9uKHQsbil7c0NuKHRoaXMsbCh0LDEyMSksbil9LGguYT0wLEkoU3UsIkxldmVsSGVpZ2h0UHJvY2Vzc29yIiwxOTE4KSxEKDE5MTksMSxoZyx0JCksaC5KYz1mdW5jdGlvbih0KXt0byh0aGlzLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIENuKCksTWsoKSxBVH0sSShTdSwiTGV2ZWxIZWlnaHRQcm9jZXNzb3IvMSIsMTkxOSksRCgxOTE0LDEsdHMscEplKSxoLktmPWZ1bmN0aW9uKHQsbil7d1NuKHRoaXMsbCh0LDEyMSksbil9LEkoU3UsIkxldmVsUHJvY2Vzc29yIiwxOTE0KSxEKDE5MTUsMSx0aSxHdGUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIFJ0KEJ0KFEobCh0LDQwKSwoUWkoKSxWYikpKSl9LEkoU3UsIkxldmVsUHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUiLDE5MTUpLEQoMTkxNiwxLHRzLG4kKSxoLktmPWZ1bmN0aW9uKHQsbil7bmtuKHRoaXMsbCh0LDEyMSksbil9LGguYT0wLEkoU3UsIk5laWdoYm9yc1Byb2Nlc3NvciIsMTkxNiksRCgxOTE3LDEsaGcsciQpLGguSmM9ZnVuY3Rpb24odCl7dG8odGhpcyx0KX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBDbigpLE1rKCksQVR9LEkoU3UsIk5laWdoYm9yc1Byb2Nlc3Nvci8xIiwxOTE3KSxEKDE5MjIsMSx0cyxpJCksaC5LZj1mdW5jdGlvbih0LG4pe3NBbih0aGlzLGwodCwxMjEpLG4pfSxoLmE9MCxJKFN1LCJOb2RlUG9zaXRpb25Qcm9jZXNzb3IiLDE5MjIpLEQoMTkxMiwxLHRzLGJKZSksaC5LZj1mdW5jdGlvbih0LG4peyRMbih0aGlzLGwodCwxMjEpLG4pfSxJKFN1LCJSb290UHJvY2Vzc29yIiwxOTEyKSxEKDE5NDIsMSx0cyxLdGUpLGguS2Y9ZnVuY3Rpb24odCxuKXtCNm4obCh0LDEyMSksbil9LEkoU3UsIlVudHJlZWlmeWVyIiwxOTQyKSxEKDM5MiwyMix7MzoxLDM0OjEsMjI6MSwzOTI6MX0sT3NlKTt2YXIgT0IsSWRlLFpEZSxlSWU9RnIoVVAsIkVkZ2VSb3V0aW5nTW9kZSIsMzkyLEhyLEoybixsMW4pLGZUdCxOQixRVCxPZGUsdEllLG5JZSxOZGUsUGRlLHJJZSxCZGUsaUllLEZkZSxkTSxSZGUsQlcsRlcsazAsYzEsSlQsZ00scE0sQzIsc0llLGRUdCxqZGUsVmIsUEIsQkI7RCg4NjIsMSxQZixyaWUpLGguaGY9ZnVuY3Rpb24odCl7c24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGZDZSksIiIpLHB5dCksIlR1cm5zIG9uIFRyZWUgY29tcGFjdGlvbiB3aGljaCBkZWNyZWFzZXMgdGhlIHNpemUgb2YgdGhlIHdob2xlIHRyZWUgYnkgcGxhY2luZyBub2RlcyBvZiBtdWx0aXBsZSBsZXZlbHMgaW4gb25lIGxhcmdlIGxldmVsIiksKEhuKCksITEpKSwoZzIoKSx5YSkpLE5zKSx1bigocjEoKSxQbikpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxkQ2UpLCIiKSwiRWRnZSBFbmQgVGV4dHVyZSBMZW5ndGgiKSwiU2hvdWxkIGJlIHNldCB0byB0aGUgbGVuZ3RoIG9mIHRoZSB0ZXh0dXJlIGF0IHRoZSBlbmQgb2YgYW4gZWRnZS4gVGhpcyB2YWx1ZSBjYW4gYmUgdXNlZCB0byBpbXByb3ZlIHRoZSBFZGdlIFJvdXRpbmcuIiksNyksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGdDZSksIiIpLCJUcmVlIExldmVsIiksIlRoZSBpbmRleCBmb3IgdGhlIHRyZWUgbGV2ZWwgdGhlIG5vZGUgaXMgaW4iKSxwdCgwKSksVGMpLHJvKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHBDZSksIiIpLHB5dCksIldoZW4gc2V0IHRvIGEgcG9zaXRpdmUgbnVtYmVyIHRoaXMgb3B0aW9uIHdpbGwgZm9yY2UgdGhlIGFsZ29yaXRobSB0byBwbGFjZSB0aGUgbm9kZSB0byB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uIHdpdGhpbiB0aGUgdHJlZXMgbGF5ZXIgaWYgd2VpZ2h0aW5nIGlzIHNldCB0byBjb25zdHJhaW50IikscHQoLTEpKSxUYykscm8pLHVuKGhhKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsYkNlKSwiIiksIldlaWdodGluZyBvZiBOb2RlcyIpLCJXaGljaCB3ZWlnaHRpbmcgdG8gdXNlIHdoZW4gY29tcHV0aW5nIGEgbm9kZSBvcmRlci4iKSxjSWUpLHBzKSx5SWUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsbUNlKSwiIiksIkVkZ2UgUm91dGluZyBNb2RlIiksIkNob29zZXMgYW4gRWRnZSBSb3V0aW5nIGFsZ29yaXRobS4iKSxhSWUpLHBzKSxlSWUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsdkNlKSwiIiksIlNlYXJjaCBPcmRlciIpLCJXaGljaCBzZWFyY2ggb3JkZXIgdG8gdXNlIHdoZW4gY29tcHV0aW5nIGEgc3Bhbm5pbmcgdHJlZS4iKSxvSWUpLHBzKSxrSWUpLHVuKFBuKSkpKSxpd3QoKG5ldyB2OCx0KSl9O3ZhciBnVHQscFR0LGJUdCxhSWUsbVR0LHZUdCxvSWUsd1R0LHlUdCxjSWU7SShVUCwiTXJUcmVlTWV0YURhdGFQcm92aWRlciIsODYyKSxEKDEwMDYsMSxQZix2OCksaC5oZj1mdW5jdGlvbih0KXtpd3QodCl9O3ZhciB4VHQsdUllLGxJZSx5MyxoSWUsZkllLCRkZSxrVHQsRVR0LFRUdCxDVHQsU1R0LF9UdCxBVHQsZEllLGdJZSxwSWUsTFR0LFc2LFJXLGJJZSxNVHQsbUllLHpkZSxEVHQsSVR0LE9UdCx2SWUsTlR0LCRkLHdJZTtJKFVQLCJNclRyZWVPcHRpb25zIiwxMDA2KSxEKDEwMDcsMSx7fSxXdGUpLGguc2Y9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1uZXcgSHJ0LHR9LGgudGY9ZnVuY3Rpb24odCl7fSxJKFVQLCJNclRyZWVPcHRpb25zL01ydHJlZUZhY3RvcnkiLDEwMDcpLEQoMzUzLDIyLHszOjEsMzQ6MSwyMjoxLDM1MzoxfSx3cSk7dmFyIHFkZSxqVyxIZGUsVmRlLHlJZT1GcihVUCwiT3JkZXJXZWlnaHRpbmciLDM1MyxIcixhbW4saDFuKSxQVHQ7RCg0MzMsMjIsezM6MSwzNDoxLDIyOjEsNDMzOjF9LFYzZSk7dmFyIHhJZSxVZGUsa0llPUZyKFVQLCJUcmVlaWZ5aW5nT3JkZXIiLDQzMyxIcix0Mm4sZjFuKSxCVHQ7RCgxNDg2LDEsVW8sYWllKSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMTIxKSxGVHR9LGguS2Y9ZnVuY3Rpb24odCxuKXtiM24odGhpcyxsKHQsMTIxKSxuKX07dmFyIEZUdDtJKCJvcmcuZWNsaXBzZS5lbGsuYWxnLm1ydHJlZS5wMXRyZWVpZnkiLCJERlNUcmVlaWZ5ZXIiLDE0ODYpLEQoMTQ4NywxLFVvLGRrKSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMTIxKSxSVHR9LGguS2Y9ZnVuY3Rpb24odCxuKXtFU24odGhpcyxsKHQsMTIxKSxuKX07dmFyIFJUdDtJKHBULCJOb2RlT3JkZXJlciIsMTQ4NyksRCgxNDk0LDEse30scHdlKSxoLnRkPWZ1bmN0aW9uKHQpe3JldHVybiBZaXQodCl9LEkocFQsIk5vZGVPcmRlcmVyLzBtZXRob2RyZWYkbGFtYmRhJDYkVHlwZSIsMTQ5NCksRCgxNDg4LDEsdGksYW5lKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiB1eCgpLFJ0KEJ0KFEobCh0LDQwKSwoUWkoKSxWYikpKSl9LEkocFQsIk5vZGVPcmRlcmVyL2xhbWJkYSQwJFR5cGUiLDE0ODgpLEQoMTQ4OSwxLHRpLG9uZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gdXgoKSxsKFEobCh0LDQwKSwoSGMoKSxXNikpLDE3KS5hPDB9LEkocFQsIk5vZGVPcmRlcmVyL2xhbWJkYSQxJFR5cGUiLDE0ODkpLEQoMTQ5MCwxLHRpLHZYZSksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4gVXduKHRoaXMuYSxsKHQsNDApKX0sSShwVCwiTm9kZU9yZGVyZXIvbGFtYmRhJDIkVHlwZSIsMTQ5MCksRCgxNDkxLDEsdGksbVhlKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBqYm4odGhpcy5hLGwodCw0MCkpfSxJKHBULCJOb2RlT3JkZXJlci9sYW1iZGEkMyRUeXBlIiwxNDkxKSxEKDE0OTIsMSxpaSxjbmUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZ3duKGwodCw0MCksbChuLDQwKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShwVCwiTm9kZU9yZGVyZXIvbGFtYmRhJDQkVHlwZSIsMTQ5MiksRCgxNDkzLDEsdGksdW5lKSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiB1eCgpLGwoUShsKHQsNDApLChRaSgpLFBkZSkpLDE3KS5hIT0wfSxJKHBULCJOb2RlT3JkZXJlci9sYW1iZGEkNSRUeXBlIiwxNDkzKSxEKDE0OTUsMSxVbyxzaWUpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMjEpLGpUdH0saC5LZj1mdW5jdGlvbih0LG4pe0lfbih0aGlzLGwodCwxMjEpLG4pfSxoLmI9MDt2YXIgalR0O0koIm9yZy5lY2xpcHNlLmVsay5hbGcubXJ0cmVlLnAzcGxhY2UiLCJOb2RlUGxhY2VyIiwxNDk1KSxEKDE0OTYsMSxVbyxpaWUpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwxMjEpLCRUdH0saC5LZj1mdW5jdGlvbih0LG4pe2RfbihsKHQsMTIxKSxuKX07dmFyICRUdCxMT249SSh2aCwiRWRnZVJvdXRlciIsMTQ5Nik7RCgxNDk4LDEsaWksc25lKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHJ1KGwodCwxNykuYSxsKG4sMTcpLmEpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkodmgsIkVkZ2VSb3V0ZXIvMG1ldGhvZHJlZiRjb21wYXJlJFR5cGUiLDE0OTgpLEQoMTUwMywxLHt9LFl0ZSksaC5ZZT1mdW5jdGlvbih0KXtyZXR1cm4gemUoR2UodCkpfSxJKHZoLCJFZGdlUm91dGVyLzFtZXRob2RyZWYkZG91YmxlVmFsdWUkVHlwZSIsMTUwMyksRCgxNTA1LDEsaWksYSQpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gWWkoemUoR2UodCkpLHplKEdlKG4pKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSSh2aCwiRWRnZVJvdXRlci8ybWV0aG9kcmVmJGNvbXBhcmUkVHlwZSIsMTUwNSksRCgxNTA3LDEsaWksWHRlKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFlpKHplKEdlKHQpKSx6ZShHZShuKSkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkodmgsIkVkZ2VSb3V0ZXIvM21ldGhvZHJlZiRjb21wYXJlJFR5cGUiLDE1MDcpLEQoMTUwOSwxLHt9LHMkKSxoLlllPWZ1bmN0aW9uKHQpe3JldHVybiB6ZShHZSh0KSl9LEkodmgsIkVkZ2VSb3V0ZXIvNG1ldGhvZHJlZiRkb3VibGVWYWx1ZSRUeXBlIiwxNTA5KSxEKDE1MTEsMSxpaSxRdGUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gWWkoemUoR2UodCkpLHplKEdlKG4pKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSSh2aCwiRWRnZVJvdXRlci81bWV0aG9kcmVmJGNvbXBhcmUkVHlwZSIsMTUxMSksRCgxNTEzLDEsaWksYkkpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gWWkoemUoR2UodCkpLHplKEdlKG4pKSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSSh2aCwiRWRnZVJvdXRlci82bWV0aG9kcmVmJGNvbXBhcmUkVHlwZSIsMTUxMyksRCgxNDk3LDEse30sSnRlKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiB0cCgpLGwoUShsKHQsNDApLChIYygpLCRkKSksMTcpfSxJKHZoLCJFZGdlUm91dGVyL2xhbWJkYSQwJFR5cGUiLDE0OTcpLEQoMTUwOCwxLHt9LFp0ZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gWmhuKGwodCw0MCkpfSxJKHZoLCJFZGdlUm91dGVyL2xhbWJkYSQxMSRUeXBlIiwxNTA4KSxEKDE1MTAsMSx7fSxudHQpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIF9kbih0aGlzLmIsdGhpcy5hLGwodCw0MCkpfSxoLmE9MCxoLmI9MCxJKHZoLCJFZGdlUm91dGVyL2xhbWJkYSQxMyRUeXBlIiwxNTEwKSxEKDE1MTIsMSx7fSxydHQpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIGVmbih0aGlzLmIsdGhpcy5hLGwodCw0MCkpfSxoLmE9MCxoLmI9MCxJKHZoLCJFZGdlUm91dGVyL2xhbWJkYSQxNSRUeXBlIiwxNTEyKSxEKDE1MTQsMSxpaSxlbmUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZjZuKGwodCw2NSksbChuLDY1KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSSh2aCwiRWRnZVJvdXRlci9sYW1iZGEkMTckVHlwZSIsMTUxNCksRCgxNTE1LDEsaWksdG5lKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGQ2bihsKHQsNjUpLGwobiw2NSkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkodmgsIkVkZ2VSb3V0ZXIvbGFtYmRhJDE4JFR5cGUiLDE1MTUpLEQoMTUxNiwxLGlpLG5uZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBwNm4obCh0LDY1KSxsKG4sNjUpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHZoLCJFZGdlUm91dGVyL2xhbWJkYSQxOSRUeXBlIiwxNTE2KSxEKDE0OTksMSx0aSx3WGUpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIGIybih0aGlzLmEsbCh0LDQwKSl9LGguYT0wLEkodmgsIkVkZ2VSb3V0ZXIvbGFtYmRhJDIkVHlwZSIsMTQ5OSksRCgxNTE3LDEsaWksbyQpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZzZuKGwodCw2NSksbChuLDY1KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSSh2aCwiRWRnZVJvdXRlci9sYW1iZGEkMjAkVHlwZSIsMTUxNyksRCgxNTAwLDEsaWkscm5lKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGRkbihsKHQsNDApLGwobiw0MCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkodmgsIkVkZ2VSb3V0ZXIvbGFtYmRhJDMkVHlwZSIsMTUwMCksRCgxNTAxLDEsaWksaW5lKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGdkbihsKHQsNDApLGwobiw0MCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkodmgsIkVkZ2VSb3V0ZXIvbGFtYmRhJDQkVHlwZSIsMTUwMSksRCgxNTAyLDEse30sbG5lKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiB0Zm4obCh0LDQwKSl9LEkodmgsIkVkZ2VSb3V0ZXIvbGFtYmRhJDUkVHlwZSIsMTUwMiksRCgxNTA0LDEse30saXR0KSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBBZG4odGhpcy5iLHRoaXMuYSxsKHQsNDApKX0saC5hPTAsaC5iPTAsSSh2aCwiRWRnZVJvdXRlci9sYW1iZGEkNyRUeXBlIiwxNTA0KSxEKDE1MDYsMSx7fSxzdHQpLGguS2I9ZnVuY3Rpb24odCl7cmV0dXJuIG5mbih0aGlzLmIsdGhpcy5hLGwodCw0MCkpfSxoLmE9MCxoLmI9MCxJKHZoLCJFZGdlUm91dGVyL2xhbWJkYSQ5JFR5cGUiLDE1MDYpLEQoNjc1LDEsezY3NToxfSxGZHQpLGguZT0wLGguZj0hMSxoLmc9ITEsSSh2aCwiTXVsdGlMZXZlbEVkZ2VOb2RlTm9kZUdhcCIsNjc1KSxEKDE5NDMsMSxpaSxobmUpLGguTmU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gUzJuKGwodCwyNDApLGwobiwyNDApKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKHZoLCJNdWx0aUxldmVsRWRnZU5vZGVOb2RlR2FwL2xhbWJkYSQwJFR5cGUiLDE5NDMpLEQoMTk0NCwxLGlpLGZuZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBfMm4obCh0LDI0MCksbChuLDI0MCkpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkodmgsIk11bHRpTGV2ZWxFZGdlTm9kZU5vZGVHYXAvbGFtYmRhJDEkVHlwZSIsMTk0NCk7dmFyIFk2O0QoNTAxLDIyLHszOjEsMzQ6MSwyMjoxLDUwMToxLDE4ODoxLDE5NjoxfSxVM2UpLGguZGc9ZnVuY3Rpb24oKXtyZXR1cm4gRTF0KHRoaXMpfSxoLnFnPWZ1bmN0aW9uKCl7cmV0dXJuIEUxdCh0aGlzKX07dmFyICRXLFg2LEVJZT1Gcih3Q2UsIlJhZGlhbExheW91dFBoYXNlcyIsNTAxLEhyLFdwbixkMW4pLHpUdDtEKDExMTMsMjA1LHR2LGZaZSksaC5yZj1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmLGcsdztpZihyPWNidCh0aGlzLHQpLG4uVWcoIlJhZGlhbCBsYXlvdXQiLHIuYy5sZW5ndGgpLFJ0KEJ0KGF0KHQsKFNiKCksTkllKSkpKXx8S08oKGE9bmV3IFl2KChhdygpLG5ldyBKdih0KSkpLGEpKSx3PW14bih0KSxIaSh0LChINSgpLFk2KSx3KSwhdyl0aHJvdyB1ZShuZXcgWW4oIlRoZSBnaXZlbiBncmFwaCBpcyBub3QgYSB0cmVlISIpKTtmb3Iobz16ZShHZShhdCh0LEhXKSkpLG89PTAmJihvPXFwdCh0KSksSGkodCxIVyxvKSxnPW5ldyBHKGNidCh0aGlzLHQpKTtnLmE8Zy5jLmMubGVuZ3RoOylmPWwocmUoZyksNDcpLGYuS2YodCxuLmVoKDEpKTtuLlZnKCl9LEkod0NlLCJSYWRpYWxMYXlvdXRQcm92aWRlciIsMTExMyksRCg1NTYsMSxpaSxXeiksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBaU24odGhpcy5hLHRoaXMuYixsKHQsMjcpLGwobiwyNykpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LGguYT0wLGguYj0wLEkod0NlLCJSYWRpYWxVdGlsL2xhbWJkYSQwJFR5cGUiLDU1NiksRCgxMzk1LDEsdHMsZG5lKSxoLktmPWZ1bmN0aW9uKHQsbil7VkRuKGwodCwyNyksbil9LEkoa0NlLCJDYWxjdWxhdGVHcmFwaFNpemUiLDEzOTUpLEQoMTM5NiwxLHRzLGduZSksaC5LZj1mdW5jdGlvbih0LG4pe2ZMbihsKHQsMjcpKX0sSShrQ2UsIkVkZ2VBbmdsZUNhbGN1bGF0b3IiLDEzOTYpLEQoMzY4LDIyLHszOjEsMzQ6MSwyMjoxLDM2ODoxLDE5NjoxfSxkTyksaC5kZz1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IHluZTtjYXNlIDE6cmV0dXJuIG5ldyBwbmU7Y2FzZSAyOnJldHVybiBuZXcgeG5lO2Nhc2UgMzpyZXR1cm4gbmV3IGRuZTtjYXNlIDQ6cmV0dXJuIG5ldyBnbmU7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgWW4oRmhlKyh0aGlzLmYhPW51bGw/dGhpcy5mOiIiK3RoaXMuZykpKX19O3ZhciBHZGUsS2RlLFdkZSxZZGUsWGRlLHFUdD1GcihrQ2UsUmhlLDM2OCxIcixHbW4sZzFuKSxIVHQ7RCg2NTMsMSx7fSksaC5lPTEsaC5nPTAsSShrZmUsIkFic3RyYWN0UmFkaXVzRXh0ZW5zaW9uQ29tcGFjdGlvbiIsNjUzKSxEKDE4MzQsNjUzLHt9LHVydCksaC5DZz1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7Zm9yKHRoaXMuYz1sKGF0KHQsKEg1KCksWTYpKSwyNyksTGUodGhpcyx0aGlzLmMpLHRoaXMuZD1zdWUobChhdCh0LChTYigpLEZCKSksMzAwKSksRT1sKGF0KHQsSmRlKSwxNyksRSYmbWUodGhpcyxFLmEpLHc9R2UoYXQodCwocGkoKSxFdikpKSxfZSh0aGlzLChucih3KSx3KSksQz1IeSh0aGlzLmMpLHRoaXMuZCYmdGhpcy5kLkdnKEMpLG1fbih0aGlzLEMpLGc9bmV3IElsKGhlKGxlKEFpLDEpLHd5dCwyNywwLFt0aGlzLmNdKSkscj0wO3I8MjtyKyspZm9yKG49MDtuPEMuYy5sZW5ndGg7bisrKW89bmV3IElsKGhlKGxlKEFpLDEpLHd5dCwyNywwLFsoU24obixDLmMubGVuZ3RoKSxsKEMuY1tuXSwyNykpXSkpLGY9bjxDLmMubGVuZ3RoLTE/KFNuKG4rMSxDLmMubGVuZ3RoKSxsKEMuY1tuKzFdLDI3KSk6KFNuKDAsQy5jLmxlbmd0aCksbChDLmNbMF0sMjcpKSxhPW49PTA/bChqdChDLEMuYy5sZW5ndGgtMSksMjcpOihTbihuLTEsQy5jLmxlbmd0aCksbChDLmNbbi0xXSwyNykpLGpndCh0aGlzLChTbihuLEMuYy5sZW5ndGgpLGwoQy5jW25dLDI3KSxnKSxhLGYsbyl9LEkoa2ZlLCJBbm51bHVzV2VkZ2VDb21wYWN0aW9uIiwxODM0KSxEKDEzOTMsMSx0cyxwbmUpLGguS2Y9ZnVuY3Rpb24odCxuKXtsM24obCh0LDI3KSxuKX0sSShrZmUsIkdlbmVyYWxDb21wYWN0b3IiLDEzOTMpLEQoMTgzMyw2NTMse30sYm5lKSxoLkNnPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvO3I9bChhdCh0LChINSgpLFk2KSksMjcpLHRoaXMuZj1yLHRoaXMuYj1zdWUobChhdCh0LChTYigpLEZCKSksMzAwKSksbz1sKGF0KHQsSmRlKSwxNyksbyYmbWUodGhpcyxvLmEpLGE9R2UoYXQodCwocGkoKSxFdikpKSxfZSh0aGlzLChucihhKSxhKSksbj1IeShyKSx0aGlzLmImJnRoaXMuYi5HZyhuKSxtcHQodGhpcyxuKX0saC5hPTAsSShrZmUsIlJhZGlhbENvbXBhY3Rpb24iLDE4MzMpLEQoMTg0MiwxLHt9LG1uZSksaC5EZz1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGc7Zm9yKHRoaXMuYT10LG49MCxnPUh5KHQpLGE9MCxmPW5ldyBHKGcpO2YuYTxmLmMuYy5sZW5ndGg7KWZvcihvPWwocmUoZiksMjcpLCsrYSxyPWE7cjxnLmMubGVuZ3RoO3IrKylPQW4odGhpcyxvLChTbihyLGcuYy5sZW5ndGgpLGwoZy5jW3JdLDI3KSkpJiYobis9MSk7cmV0dXJuIG59LEkoRUNlLCJDcm9zc2luZ01pbmltaXphdGlvblBvc2l0aW9uIiwxODQyKSxEKDE4NDAsMSx7fSx2bmUpLGguRGc9ZnVuY3Rpb24odCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFY7Zm9yKGE9MCxyPW5ldyBocihkcihjcCh0KS5hLktjKCksbmV3IGopKTtqcihyKTspbj1sKHhyKHIpLDc0KSx3PWJjKGwoT2UoKCFuLmMmJihuLmM9bmV3IExuKF9yLG4sNSw4KSksbi5jKSwwKSw4NCkpLEM9dy5pK3cuZy8yLEw9dy5qK3cuZi8yLG89dC5pK3QuZy8yLGY9dC5qK3QuZi8yLEI9bmV3IHFhLEIuYT1DLW8sQi5iPUwtZixnPW5ldyBsdChCLmEsQi5iKSxSRShnLHQuZyx0LmYpLEIuYS09Zy5hLEIuYi09Zy5iLG89Qy1CLmEsZj1MLUIuYixFPW5ldyBsdChCLmEsQi5iKSxSRShFLHcuZyx3LmYpLEIuYS09RS5hLEIuYi09RS5iLEM9bytCLmEsTD1mK0IuYix6PUMtbyxWPUwtZixhKz1iLk1hdGguc3FydCh6KnorVipWKTtyZXR1cm4gYX0sSShFQ2UsIkVkZ2VMZW5ndGhPcHRpbWl6YXRpb24iLDE4NDApLEQoMTg0MSwxLHt9LHduZSksaC5EZz1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCO2ZvcihhPTAscj1uZXcgaHIoZHIoY3AodCkuYS5LYygpLG5ldyBqKSk7anIocik7KW49bCh4cihyKSw3NCksdz1iYyhsKE9lKCghbi5jJiYobi5jPW5ldyBMbihfcixuLDUsOCkpLG4uYyksMCksODQpKSxFPXcuaSt3LmcvMixDPXcuait3LmYvMixvPWwoYXQodywocGkoKSxuOSkpLDgpLGY9dC5pK28uYSt0LmcvMixnPXQuaitvLmIrdC5mLEw9RS1mLEI9Qy1nLGErPWIuTWF0aC5zcXJ0KEwqTCtCKkIpO3JldHVybiBhfSxJKEVDZSwiRWRnZUxlbmd0aFBvc2l0aW9uT3B0aW1pemF0aW9uIiwxODQxKSxEKDEzOTIsNjUzLHRzLHluZSksaC5LZj1mdW5jdGlvbih0LG4pe2Jrbih0aGlzLGwodCwyNyksbil9LEkoIm9yZy5lY2xpcHNlLmVsay5hbGcucmFkaWFsLmludGVybWVkaWF0ZS5vdmVybGFwcyIsIlJhZGl1c0V4dGVuc2lvbk92ZXJsYXBSZW1vdmFsIiwxMzkyKSxEKDEzOTQsMSx0cyx4bmUpLGguS2Y9ZnVuY3Rpb24odCxuKXtsZ24obCh0LDI3KSxuKX0sSSgib3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwuaW50ZXJtZWRpYXRlLnJvdGF0aW9uIiwiR2VuZXJhbFJvdGF0b3IiLDEzOTQpLEQoNDM0LDIyLHszOjEsMzQ6MSwyMjoxLDQzNDoxfSxHM2UpO3ZhciBUSWUsUWRlLENJZT1Gcih3TCwiQW5udWx1c1dlZGdlQ3JpdGVyaWEiLDQzNCxIcixuMm4sYjFuKSxWVHQ7RCgzOTMsMjIsezM6MSwzNDoxLDIyOjEsMzkzOjF9LE5zZSk7dmFyIHpXLFNJZSxfSWUsQUllPUZyKHdMLFRFZSwzOTMsSHIsYWJuLHAxbiksVVR0O0QoODYzLDEsUGYsQ2YpLGguaGY9ZnVuY3Rpb24odCl7c24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFRDZSksIiIpLCJDZW50ZXIgT24gUm9vdCIpLCJDZW50ZXJzIHRoZSBsYXlvdXQgb24gdGhlIHJvb3Qgb2YgdGhlIHRyZWUgaS5lLiBzbyB0aGF0IHRoZSBjZW50cmFsIG5vZGUgaXMgYWxzbyB0aGUgY2VudGVyIG5vZGUgb2YgdGhlIGZpbmFsIGxheW91dC4gVGhpcyBpbnRyb2R1Y2VzIGFkZGl0aW9uYWwgd2hpdGVzcGFjZS4iKSwoSG4oKSwhMSkpLChnMigpLHlhKSksTnMpLHVuKChyMSgpLFBuKSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LENDZSksIiIpLCJPcmRlciBJRCIpLCJUaGUgaWQgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIGFuIG9yZGVyIGZvciBub2RlcyBvZiBvbmUgcmFkaXVzLiBUaGlzIGNhbiBiZSB1c2VkIHRvIHNvcnQgdGhlbSBpbiB0aGUgbGF5ZXIgYWNjb3JkaW5nbHkuIikscHQoMCkpLFRjKSxybyksdW4oaGEpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxTQ2UpLCIiKSwiUmFkaXVzIiksIlRoZSByYWRpdXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgaW5pdGlhbCByYWRpdXMgZm9yIHRoZSByYWRpYWwgbGF5b3V0ZXIuIiksMCksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LE5HKSwiIiksIlJvdGF0ZSIpLCJUaGUgcm90YXRlIG9wdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgYSByb3RhdGlvbiBvZiB0aGUgbGF5b3V0IHNob3VsZCBiZSBwZXJmb3JtZWQuIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxUZmUpLCIiKSx5eXQpLCJXaXRoIHRoZSBjb21wYWN0ZXIgb3B0aW9uIGl0IGNhbiBiZSBkZXRlcm1pbmVkIGhvdyBjb21wYWN0aW9uIG9uIHRoZSBncmFwaCBpcyBkb25lLiBJdCBjYW4gYmUgY2hvc2VuIGJldHdlZW4gbm9uZSwgdGhlIHJhZGlhbCBjb21wYWN0aW9uIG9yIHRoZSBjb21wYWN0aW9uIG9mIHdlZGdlcyBzZXBhcmF0ZWx5LiIpLExJZSkscHMpLEFJZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxDZmUpLCIiKSwiQ29tcGFjdGlvbiBTdGVwIFNpemUiKSwiRGV0ZXJtaW5lIHRoZSBzaXplIG9mIHN0ZXBzIHdpdGggd2hpY2ggdGhlIGNvbXBhY3Rpb24gaXMgZG9uZS4gU3RlcCBzaXplIDEgY29ycmVsYXRlcyB0byBhIGNvbXBhY3Rpb24gb2YgMSBwaXhlbCBwZXIgSXRlcmF0aW9uLiIpLHB0KDEpKSxUYykscm8pLHVuKFBuKSkpKSxRcyh0LENmZSxUZmUsbnVsbCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LF9DZSksIiIpLCJTb3J0ZXIiKSwiU29ydCB0aGUgbm9kZXMgcGVyIHJhZGl1cyBhY2NvcmRpbmcgdG8gdGhlIHNvcnRpbmcgYWxnb3JpdGhtLiBUaGUgc3RyYXRlZ2llcyBhcmUgbm9uZSwgYnkgdGhlIGdpdmVuIG9yZGVyIGlkLCBvciBzb3J0aW5nIHRoZW0gYnkgcG9sYXIgY29vcmRpbmF0ZXMuIiksREllKSxwcyksR0llKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEFDZSksIiIpLCJBbm51bHVzIFdlZGdlIENyaXRlcmlhIiksIkRldGVybWluZSBob3cgdGhlIHdlZGdlIGZvciB0aGUgbm9kZSBwbGFjZW1lbnQgaXMgY2FsY3VsYXRlZC4gSXQgY2FuIGJlIGNob3NlbiBiZXR3ZWVuIHdlZGdlIGRldGVybWluYXRpb24gYnkgdGhlIG51bWJlciBvZiBsZWF2ZXMgb3IgYnkgdGhlIG1heGltdW0gc3VtIG9mIGRpYWdvbmFscy4iKSxJSWUpLHBzKSxDSWUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsTENlKSwiIiksIlRyYW5zbGF0aW9uIE9wdGltaXphdGlvbiIpLCJGaW5kIHRoZSBvcHRpbWFsIHRyYW5zbGF0aW9uIG9mIHRoZSBub2RlcyBvZiB0aGUgZmlyc3QgcmFkaWkgYWNjb3JkaW5nIHRvIHRoaXMgY3JpdGVyaWEuIEZvciBleGFtcGxlIGVkZ2UgY3Jvc3NpbmdzIGNhbiBiZSBtaW5pbWl6ZWQuIiksTUllKSxwcyksSEllKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFNmZSksRENlKSwiVGFyZ2V0IEFuZ2xlIiksIlRoZSBhbmdsZSBpbiByYWRpYW5zIHRoYXQgdGhlIGxheW91dCBzaG91bGQgYmUgcm90YXRlZCB0byBhZnRlciBsYXlvdXQuIiksMCksZm8pLHRhKSx1bihQbikpKSksUXModCxTZmUsTkcsbnVsbCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LF9mZSksRENlKSwiQWRkaXRpb25hbCBXZWRnZSBTcGFjZSIpLCJJZiBzZXQgdG8gdHJ1ZSwgbW9kaWZpZXMgdGhlIHRhcmdldCBhbmdsZSBieSByb3RhdGluZyBmdXJ0aGVyIHN1Y2ggdGhhdCBzcGFjZSBpcyBsZWZ0IGZvciBhbiBlZGdlIHRvIHBhc3MgaW4gYmV0d2VlbiB0aGUgbm9kZXMuIFRoaXMgb3B0aW9uIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0b3AtZG93biBsYXlvdXQuIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLFFzKHQsX2ZlLE5HLG51bGwpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxNQ2UpLERDZSksIk91dGdvaW5nIEVkZ2UgQW5nbGVzIiksIkNhbGN1bGF0ZSB0aGUgcmVxdWlyZWQgYW5nbGUgb2YgY29ubmVjdGVkIG5vZGVzIHRvIGxlYXZlIHNwYWNlIGZvciBhbiBpbmNvbWluZyBlZGdlLiBUaGlzIG9wdGlvbiBzaG91bGQgb25seSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdG9wLWRvd24gbGF5b3V0LiIpLCExKSx5YSksTnMpLHVuKFBuKSkpKSxRdnQoKG5ldyBvaWUsdCkpfTt2YXIgR1R0LEtUdCxXVHQsTEllLFlUdCxNSWUsWFR0LFFUdCxKVHQsWlR0LGVDdCx0Q3QsbkN0LERJZSxyQ3QsSUllO0kod0wsIlJhZGlhbE1ldGFEYXRhUHJvdmlkZXIiLDg2MyksRCgxMDA4LDEsUGYsb2llKSxoLmhmPWZ1bmN0aW9uKHQpe1F2dCh0KX07dmFyIE9JZSxKZGUsWmRlLGlDdCxzQ3QsYUN0LG9DdCxOSWUsUEllLHFXLGNDdCx1Q3QsSFcsQkllLEZJZSxSSWUsZWdlLEZCLGxDdCxqSWU7SSh3TCwiUmFkaWFsT3B0aW9ucyIsMTAwOCksRCgxMDA5LDEse30sZnUpLGguc2Y9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1uZXcgZlplLHR9LGgudGY9ZnVuY3Rpb24odCl7fSxJKHdMLCJSYWRpYWxPcHRpb25zL1JhZGlhbEZhY3RvcnkiLDEwMDkpLEQoMzU0LDIyLHszOjEsMzQ6MSwyMjoxLDM1NDoxfSx5cSk7dmFyICRJZSx6SWUscUllLHRnZSxISWU9RnIod0wsIlJhZGlhbFRyYW5zbGF0aW9uU3RyYXRlZ3kiLDM1NCxIcixvbW4sbTFuKSxoQ3Q7RCgzMDAsMjIsezM6MSwzNDoxLDIyOjEsMzAwOjF9LFBzZSk7dmFyIFZJZSxuZ2UsVUllLEdJZT1Gcih3TCwiU29ydGluZ1N0cmF0ZWd5IiwzMDAsSHIsb2JuLHYxbiksZkN0O0QoMTQ3NiwxLFVvLGtuZSksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDI3KSxudWxsfSxoLktmPWZ1bmN0aW9uKHQsbil7amtuKHRoaXMsbCh0LDI3KSxuKX0saC5jPTAsSSgib3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwucDFwb3NpdGlvbiIsIkVhZGVzUmFkaWFsIiwxNDc2KSxEKDE4MzgsMSx7fSxTUyksaC5FZz1mdW5jdGlvbih0KXtyZXR1cm4gd2R0KHQpfSxJKHh5dCwiQW5udWx1c1dlZGdlQnlMZWFmcyIsMTgzOCksRCgxODM5LDEse30sUmMpLGguRWc9ZnVuY3Rpb24odCl7cmV0dXJuIERndCh0aGlzLHQpfSxJKHh5dCwiQW5udWx1c1dlZGdlQnlOb2RlU3BhY2UiLDE4MzkpLEQoMTQ3NywxLFVvLFB1KSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMjcpLG51bGx9LGguS2Y9ZnVuY3Rpb24odCxuKXtYNG4odGhpcyxsKHQsMjcpLG4pfSxJKCJvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5wMnJvdXRpbmciLCJTdHJhaWdodExpbmVFZGdlUm91dGVyIiwxNDc3KSxEKDgyNiwxLHt9LFZ3ZSksaC5GZz1mdW5jdGlvbih0KXt9LGguR2c9ZnVuY3Rpb24odCl7QVFlKHRoaXMsdCl9LEkoSUNlLCJJRFNvcnRlciIsODI2KSxEKDE4MzcsMSxpaSxocyksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBoM24obCh0LDI3KSxsKG4sMjcpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKElDZSwiSURTb3J0ZXIvbGFtYmRhJDAkVHlwZSIsMTgzNyksRCgxODM2LDEse30sVGZ0KSxoLkZnPWZ1bmN0aW9uKHQpe2JjdCh0aGlzLHQpfSxoLkdnPWZ1bmN0aW9uKHQpe3ZhciBuO3QuZGMoKXx8KHRoaXMuZXx8KG49dXN0KGwodC5YYigwKSwyNykpLGJjdCh0aGlzLG4pKSxBUWUodGhpcy5lLHQpKX0sSShJQ2UsIlBvbGFyQ29vcmRpbmF0ZVNvcnRlciIsMTgzNiksRCg0NDUsMjIsezM6MSwzNDoxLDIyOjEsNDQ1OjF9LEJzZSk7dmFyIFJCLFZXLHJnZSxLSWU9RnIoQ3l0LCJSZWN0UGFja2luZ0xheW91dFBoYXNlcyIsNDQ1LEhyLGlibix3MW4pLGRDdDtEKDExMTgsMjA1LHR2LGdaZSksaC5yZj1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuO2lmKG4uVWcoIlJlY3RhbmdsZSBQYWNraW5nIiwxKSxCPWwoYXQodCwoejEoKSx2TSkpLDEwNyksRT1SdChCdChhdCh0LFBDdCkpKSxMPXplKEdlKGF0KHQsd00pKSksYW49UnQoQnQoYXQodCxzT2UpKSksJGU9KCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpLFJ0KEJ0KGF0KHQsbGdlKSkpfHxLTygobz1uZXcgWXYoKGF3KCksbmV3IEp2KHQpKSksbykpLGNuPSExLGFuJiYkZS5pPj0zKWZvcihvdD1sKE9lKCRlLDApLDI3KSxTdD1sKE9lKCRlLDEpLDI3KSxmPTA7ZisyPCRlLmk7KWlmKFplPW90LG90PVN0LFN0PWwoT2UoJGUsZisyKSwyNyksWmUuZj49b3QuZitTdC5mK0x8fFN0LmY+PVplLmYrb3QuZitMKXtjbj0hMDticmVha31lbHNlKytmO2Vsc2UgY249ITA7aWYoIWNuKXtmb3Ioej0kZS5pLHc9bmV3IG9yKCRlKTt3LmUhPXcuaS5nYygpOylnPWwoZ3IodyksMjcpLEhpKGcsKHBpKCksWEIpLHB0KHopKSwtLXo7Um10KHQsbmV3IEw4KSxuLlZnKCk7cmV0dXJufWZvcihyPShxTyh0aGlzLmEpLFgwKHRoaXMuYSwoV1YoKSxSQiksbChhdCh0LHVPZSksMTg4KSksWDAodGhpcy5hLFZXLGwoYXQodCxyT2UpLDE4OCkpLFgwKHRoaXMuYSxyZ2UsbChhdCh0LGFPZSksMTg4KSksdXllKHRoaXMuYSwoQm49bmV3IFhzLGZpKEJuLFJCLChzVSgpLGFnZSkpLGZpKEJuLFZXLHNnZSksUnQoQnQoYXQodCx0T2UpKSkmJmZpKEJuLFJCLGlnZSksQm4pKSxiUCh0aGlzLmEsdCkpLEM9MS9yLmMubGVuZ3RoLEo9bmV3IEcocik7Si5hPEouYy5jLmxlbmd0aDspe2lmKFY9bChyZShKKSw0Nyksbi4kZygpKXJldHVybjtWLktmKHQsbi5laChDKSl9Zm9yKGZlPTAsdGU9MCxNZT1uZXcgb3IoJGUpO01lLmUhPU1lLmkuZ2MoKTspVGU9bChncihNZSksMjcpLGZlPWIuTWF0aC5tYXgoZmUsVGUuaStUZS5nKSx0ZT1iLk1hdGgubWF4KHRlLFRlLmorVGUuZik7YzllKHQsbmV3IGx0KHplKEdlKGF0KHQsKHVnKCksWngpKSkpLHplKEdlKGF0KHQsWlQpKSkpLG5ldyBsdChmZSx0ZSkpLE4zbigkZSxCKSxFfHxHdyh0LHplKEdlKGF0KHQsWngpKSkrKEIuYitCLmMpLHplKEdlKGF0KHQsWlQpKSkrKEIuZCtCLmEpLCExLCEwKSxSdChCdChhdCh0LGxnZSkpKXx8S08oKGE9bmV3IFl2KChhdygpLG5ldyBKdih0KSkpLGEpKSxuLlZnKCl9LEkoQ3l0LCJSZWN0UGFja2luZ0xheW91dFByb3ZpZGVyIiwxMTE4KSxEKDE1MTgsMSx0cyxtSSksaC5LZj1mdW5jdGlvbih0LG4pe2RMbihsKHQsMjcpLG4pfSxJKFBHLCJJbnRlcmFjdGl2ZU5vZGVSZW9yZGVyZXIiLDE1MTgpLEQoMTUxOSwxLGlpLEVuZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiB5eW4obCh0LDI3KSxsKG4sMjcpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGguT2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZ0KHRoaXMpfSxJKFBHLCJJbnRlcmFjdGl2ZU5vZGVSZW9yZGVyZXIvbGFtYmRhJDAkVHlwZSIsMTUxOSksRCg0NTYsMjIsezM6MSwzNDoxLDIyOjEsNDU2OjEsMTk2OjF9LEZzZSksaC5kZz1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IG1JO2Nhc2UgMTpyZXR1cm4gbmV3IENuZTtjYXNlIDI6cmV0dXJuIG5ldyBUbmV9cmV0dXJuIG51bGx9O3ZhciBpZ2Usc2dlLGFnZSxnQ3Q9RnIoUEcsUmhlLDQ1NixIcixzYm4seTFuKSxwQ3Q7RCgxNTIxLDEsdHMsVG5lKSxoLktmPWZ1bmN0aW9uKHQsbil7TjVuKGwodCwyNyksbil9LEkoUEcsIk1pblNpemVQb3N0UHJvY2Vzc29yIiwxNTIxKSxEKDE1MjAsMSx0cyxDbmUpLGguS2Y9ZnVuY3Rpb24odCxuKXtJeW4obCh0LDI3KSxuKX0sSShQRywiTWluU2l6ZVByZVByb2Nlc3NvciIsMTUyMCk7dmFyIGJNLFpULFp4LGJDdCxtQ3QsVVcsb2dlLGNnZSxtTSxHVyxUNDtEKDM5NCwyMix7MzoxLDM0OjEsMjI6MSwzOTQ6MX0sUnNlKTt2YXIgV0llLFlJZSx1Z2UsWEllPUZyKEFmZSwiT3B0aW1pemF0aW9uR29hbCIsMzk0LEhyLHJibix4MW4pLHZDdDtEKDg2NywxLFBmLGdrKSxoLmhmPWZ1bmN0aW9uKHQpe3NuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxPQ2UpLCIiKSwiVHJ5IGJveCBsYXlvdXQgZmlyc3QiKSwiV2hldGhlciBvbmUgc2hvdWxkIGNoZWNrIHdoZXRoZXIgdGhlIHJlZ2lvbnMgYXJlIHN0YWNrYWJsZSB0byBzZWUgd2hldGhlciBib3ggbGF5b3V0IHdvdWxkIGRvIHRoZSBqb2IuIEZvciBleGFtcGxlLCBub2RlcyB3aXRoIHRoZSBzYW1lIGhlaWdodCBhcmUgbm90IHN0YWNrYWJsZSBpbnNpZGUgYSByb3cuIFRoZXJlZm9yZSwgYm94IGxheW91dCB3aWxsIHBlcmZvcm0gYmV0dGVyIGFuZCBmYXN0ZXIuIiksKEhuKCksITEpKSwoZzIoKSx5YSkpLE5zKSx1bigocjEoKSxQbikpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxOQ2UpLCIiKSwiQ3VycmVudCBwb3NpdGlvbiBvZiBhIG5vZGUgaW4gdGhlIG9yZGVyIG9mIG5vZGVzIiksIlRoZSByZWN0YW5nbGVzIGFyZSBvcmRlcmVkLiBOb3JtYWxseSBhY2NvcmRpbmcgdG8gdGhlaXIgZGVmaW5pdGlvbiB0aGUgdGhlIG1vZGVsLiBUaGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgYSBub2RlLiIpLHB0KC0xKSksVGMpLHJvKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFBDZSksIiIpLCJEZXNpcmVkIGluZGV4IG9mIG5vZGUiKSwiVGhlIHJlY3RhbmdsZXMgYXJlIG9yZGVyZWQuIE5vcm1hbGx5IGFjY29yZGluZyB0byB0aGVpciBkZWZpbml0aW9uIHRoZSB0aGUgbW9kZWwuIFRoaXMgb3B0aW9uIGFsbG93cyB0byBzcGVjaWZ5IGEgZGVzaXJlZCBwb3NpdGlvbiB0aGF0IGhhcyBwcmVmZXJlbmNlIG92ZXIgdGhlIG9yaWdpbmFsIHBvc2l0aW9uLiIpLHB0KC0xKSksVGMpLHJvKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEJDZSksIiIpLCJJbiBuZXcgUm93IiksIklmIHNldCB0byB0cnVlIHRoaXMgbm9kZSBiZWdpbnMgaW4gYSBuZXcgcm93LiBDb25zZXF1ZW50bHkgdGhpcyBub2RlIGNhbm5vdCBiZSBtb3ZlZCBpbiBhIHByZXZpb3VzIGxheWVyIGR1cmluZyBjb21wYWN0aW9uLiBXaWR0aCBhcHByb3hpbWF0aW9uIGRvZXMgZG9lcyBub3QgdGFrZSB0aGlzIGludG8gYWNjb3VudC4iKSwhMSkseWEpLE5zKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEZDZSksTGZlKSwiV2lkdGggQXBwcm94aW1hdGlvbiBTdHJhdGVneSIpLCJTdHJhdGVneSBmb3IgZmluZGluZyBhbiBpbml0aWFsIHdpZHRoIG9mIHRoZSBkcmF3aW5nLiIpLFpJZSkscHMpLGZPZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxSQ2UpLExmZSksIlRhcmdldCBXaWR0aCIpLCJPcHRpb24gdG8gcGxhY2UgdGhlIHJlY3RhbmdsZXMgaW4gdGhlIGdpdmVuIHRhcmdldCB3aWR0aCBpbnN0ZWFkIG9mIGFwcHJveGltYXRpbmcgdGhlIHdpZHRoIHVzaW5nIHRoZSBkZXNpcmVkIGFzcGVjdCByYXRpby4gVGhlIHBhZGRpbmcgaXMgbm90IGluY2x1ZGVkIGluIHRoaXMuIE1lYW5pbmcgYSBkcmF3aW5nIHdpbGwgaGF2ZSB3aWR0aCBvZiB0YXJnZXR3aWR0aCArIGhvcml6b250YWwgcGFkZGluZy4iKSwtMSksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGpDZSksTGZlKSwiT3B0aW1pemF0aW9uIEdvYWwiKSwiT3B0aW1pemF0aW9uIGdvYWwgZm9yIGFwcHJveGltYXRpb24gb2YgdGhlIGJvdW5kaW5nIGJveCBnaXZlbiBieSB0aGUgZmlyc3QgaXRlcmF0aW9uLiBEZXRlcm1pbmVzIHdoZXRoZXIgbGF5b3V0IGlzIHNvcnRlZCBieSB0aGUgbWF4aW11bSBzY2FsaW5nLCBhc3BlY3QgcmF0aW8sIG9yIGFyZWEuIERlcGVuZGluZyBvbiB0aGUgc3RyYXRlZ3kgdGhlIGFzcGVjdCByYXRpbyBtaWdodCBiZSBuZWFybHkgaWdub3JlZC4iKSxKSWUpLHBzKSxYSWUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsJENlKSxMZmUpLCJTaGlmdCBMYXN0IFBsYWNlZC4iKSwiV2hlbiBwbGFjaW5nIGEgcmVjdGFuZ2xlIGJlaGluZCBvciBiZWxvdyB0aGUgbGFzdCBwbGFjZWQgcmVjdGFuZ2xlIGluIHRoZSBmaXJzdCBpdGVyYXRpb24sIGl0IGlzIHNvbWV0aW1lcyBwb3NzaWJsZSB0byBzaGlmdCB0aGUgcmVjdGFuZ2xlIGZ1cnRoZXIgdG8gdGhlIGxlZnQgb3IgcmlnaHQsIHJlc3VsdGluZyBpbiBsZXNzIHdoaXRlc3BhY2UuIFRydWUgKGRlZmF1bHQpIGVuYWJsZXMgdGhlIHNoaWZ0IGFuZCBmYWxzZSBkaXNhYmxlcyBpdC4gRGlzYWJsaW5nIHRoZSBzaGlmdCBwcm9kdWNlcyBhIGdyZWF0ZXIgYXBwcm94aW1hdGVkIGFyZWEgYnkgdGhlIGZpcnN0IGl0ZXJhdGlvbiBhbmQgYSBsYXlvdXQsIHdoZW4gdXNpbmcgT05MWSB0aGUgZmlyc3QgaXRlcmF0aW9uIChkZWZhdWx0IG5vdCB0aGUgY2FzZSksIHdoZXJlIGl0IGlzIHNvbWV0aW1lcyBpbXBvc3NpYmxlIHRvIGltcGxlbWVudCBhIHNpemUgdHJhbnNmb3JtYXRpb24gb2YgcmVjdGFuZ2xlcyB0aGF0IHdpbGwgZmlsbCB0aGUgYm91bmRpbmcgYm94IGFuZCBlbGltaW5hdGUgZW1wdHkgc3BhY2VzLiIpLCEwKSx5YSksTnMpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsekNlKSwicGFja2luZyIpLFN5dCksIlN0cmF0ZWd5IGZvciBmaW5kaW5nIGFuIGluaXRpYWwgcGxhY2VtZW50IG9uIG5vZGVzLiIpLFFJZSkscHMpLHBPZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxxQ2UpLF95dCksIlJvdyBIZWlnaHQgUmVldmFsdWF0aW9uIiksIkR1cmluZyB0aGUgY29tcGFjdGlvbiBzdGVwIHRoZSBoZWlnaHQgb2YgYSByb3cgaXMgbm9ybWFsbHkgbm90IGNoYW5nZWQuIElmIHRoaXMgb3B0aW9ucyBpcyBzZXQsIHRoZSBibG9ja3Mgb2Ygb3RoZXIgcm93cyBtaWdodCBiZSBhZGRlZCBpZiB0aGV5IGV4Y2VlZCB0aGUgcm93IGhlaWdodC4gSWYgdGhpcyBpcyB0aGUgY2FzZSB0aGUgd2hvbGUgcm93IGhhcyB0byBiZSBwYWNrZWQgYWdhaW4gdG8gYmUgb3B0aW1hbCByZWdhcmRpbmcgdGhlIG5ldyByb3cgaGVpZ2h0LiBUaGlzIG9wdGlvbiBzaG91bGQsIHRoZXJlZm9yZSwgYmUgdXNlZCB3aXRoIGNhcmUgc2luY2UgaXQgbWlnaHQgYmUgY29tcHV0YXRpb24gaGVhdnkuIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxIQ2UpLF95dCksIkNvbXBhY3Rpb24gaXRlcmF0aW9ucyIpLCJEZWZpbmVzIHRoZSBudW1iZXIgb2YgY29tcGFjdGlvbiBpdGVyYXRpb25zLiBFLmcuIGlmIHNldCB0byAyIHRoZSB3aWR0aCBpcyBpbml0aWFsbHkgYXBwcm94aW1hdGVkLCB0aGVuIHRoZSBkcmF3aW5nIGlzIGNvbXBhY3RlZCBhbmQgYmFzZWQgb24gdGhlIHJlc3VsdGluZyBkcmF3aW5nIHRoZSB0YXJnZXQgd2lkdGggaXMgZGVjcmVhc2VkIG9yIGluY3JlYXNlZCBhbmQgYSBzZWNvbmQgY29tcGFjdGlvbiBzdGVwIGlzIGV4ZWN1dGVkIGFuZCB0aGUgcmVzdWx0IGNvbXBhcmVkIHRvIHRoZSBmaXJzdCBvbmUuIFRoZSBiZXN0IHJ1biBpcyB1c2VkIGJhc2VkIG9uIHRoZSBzY2FsZSBtZWFzdXJlLiIpLHB0KDEpKSxUYykscm8pLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsVkNlKSwid2hpdGVTcGFjZUVsaW1pbmF0aW9uIiksIldoaXRlIFNwYWNlIEFwcHJveGltYXRpb24gU3RyYXRlZ3kiKSwiU3RyYXRlZ3kgZm9yIGV4cGFuZGluZyBub2RlcyBzdWNoIHRoYXQgd2hpdGVzcGFjZSBpbiB0aGUgcGFyZW50IGlzIGVsaW1pbmF0ZWQuIikscHMpLHZPZSksdW4oUG4pKSkpLGd3dCgobmV3IFFTLHQpKX07dmFyIHdDdCx5Q3QseEN0LGtDdCxFQ3QsVEN0LFFJZSxDQ3QsU0N0LF9DdCxBQ3QsSkllLExDdCxaSWUsTUN0O0koQWZlLCJSZWN0UGFja2luZ01ldGFEYXRhUHJvdmlkZXIiLDg2NyksRCgxMDE2LDEsUGYsUVMpLGguaGY9ZnVuY3Rpb24odCl7Z3d0KHQpfTt2YXIgS1csREN0LGVPZSxqQix0T2UsSUN0LCRCLE9DdCxOQ3QsUEN0LEJDdCxGQ3QsbGdlLG5PZSxoZ2Usck9lLHZNLGlPZSxSQ3Qsd00sc09lLGFPZSxvT2UsY09lLHVPZSxmZ2U7SShBZmUsIlJlY3RQYWNraW5nT3B0aW9ucyIsMTAxNiksRCgxMDE3LDEse30sYzgpLGguc2Y9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1uZXcgZ1plLHR9LGgudGY9ZnVuY3Rpb24odCl7fSxJKEFmZSwiUmVjdFBhY2tpbmdPcHRpb25zL1JlY3RwYWNraW5nRmFjdG9yeSIsMTAxNyksRCgxNzA1LDEse30sd2l0KSxoLmE9MCxoLmM9ITEsSShiVCwiQXJlYUFwcHJveGltYXRpb24iLDE3MDUpO3ZhciBsT2U9a3MoYlQsIkJlc3RDYW5kaWRhdGVGaWx0ZXIiKTtEKDY3MywxLHs1MzU6MX0seW0pLGguSGc9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZixnLHcsRTtmb3IoRT1uZXcgYnQsZj1ncyx3PW5ldyBHKHQpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwyMzgpLGY9Yi5NYXRoLm1pbihmLChnLmMrKHIuYityLmMpKSooZy5iKyhyLmQrci5hKSkpO2ZvcihvPW5ldyBHKHQpO28uYTxvLmMuYy5sZW5ndGg7KWE9bChyZShvKSwyMzgpLChhLmMrKHIuYityLmMpKSooYS5iKyhyLmQrci5hKSk9PWYmJiRuKEUuYyxhKTtyZXR1cm4gRX0sSShiVCwiQXJlYUZpbHRlciIsNjczKSxEKDY3NCwxLHs1MzU6MX0sUTkpLGguSGc9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZixnLHcsRTtmb3Iodz1uZXcgYnQsRT1ncyxnPW5ldyBHKHQpO2cuYTxnLmMuYy5sZW5ndGg7KWY9bChyZShnKSwyMzgpLEU9Yi5NYXRoLm1pbihFLGIuTWF0aC5hYnMoKGYuYysoci5iK3IuYykpLyhmLmIrKHIuZCtyLmEpKS1uKSk7Zm9yKG89bmV3IEcodCk7by5hPG8uYy5jLmxlbmd0aDspYT1sKHJlKG8pLDIzOCksYi5NYXRoLmFicygoYS5jKyhyLmIrci5jKSkvKGEuYisoci5kK3IuYSkpLW4pPT1FJiYkbih3LmMsYSk7cmV0dXJuIHd9LEkoYlQsIkFzcGVjdFJhdGlvRmlsdGVyIiw2NzQpLEQoMTQ2OSwxLFVvLFNuZSksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDI3KSxudWxsfSxoLktmPWZ1bmN0aW9uKHQsbil7ZVNuKGwodCwyNyksbil9LEkoYlQsIkdyZWVkeVdpZHRoQXBwcm94aW1hdG9yIiwxNDY5KSxEKDY3MiwxLHs1MzU6MX0sdkkpLGguSGc9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZixnLHcsRTtmb3IoRT1uZXcgYnQsZj1pYSx3PW5ldyBHKHQpO3cuYTx3LmMuYy5sZW5ndGg7KWc9bChyZSh3KSwyMzgpLGY9Yi5NYXRoLm1heChmLGFIKGcuYysoci5iK3IuYyksZy5iKyhyLmQrci5hKSxnLmEpKTtmb3Iobz1uZXcgRyh0KTtvLmE8by5jLmMubGVuZ3RoOylhPWwocmUobyksMjM4KSxhSChhLmMrKHIuYityLmMpLGEuYisoci5kK3IuYSksYS5hKT09ZiYmJG4oRS5jLGEpO3JldHVybiBFfSxJKGJULCJTY2FsZU1lYXN1cmVGaWx0ZXIiLDY3MiksRCgxNDcwLDEsVW8sX25lKSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMjcpLG51bGx9LGguS2Y9ZnVuY3Rpb24odCxuKXska24obCh0LDI3KSxuKX0sSShiVCwiVGFyZ2V0V2lkdGhXaWR0aEFwcHJveGltYXRvciIsMTQ3MCksRCg0OTEsMjIsezM6MSwzNDoxLDIyOjEsNDkxOjEsMTg4OjEsMTk2OjF9LEszZSksaC5kZz1mdW5jdGlvbigpe3JldHVybiAkZ3QodGhpcyl9LGgucWc9ZnVuY3Rpb24oKXtyZXR1cm4gJGd0KHRoaXMpfTt2YXIgZGdlLGhPZSxmT2U9RnIoYlQsIldpZHRoQXBwcm94aW1hdGlvblN0cmF0ZWd5Iiw0OTEsSHIsWnBuLGsxbiksakN0O0QoMTQ3MSwxLFVvLEFuZSksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDI3KSxudWxsfSxoLktmPWZ1bmN0aW9uKHQsbil7ZUluKHRoaXMsbCh0LDI3KSxuKX0sSShCRywiQ29tcGFjdG9yIiwxNDcxKSxEKDE0NzMsMSxVbyxMbmUpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwyNyksbnVsbH0saC5LZj1mdW5jdGlvbih0LG4pe0lDbihsKHQsMjcpLG4pfSxJKEJHLCJOb1BsYWNlbWVudCIsMTQ3MyksRCg0MzksMjIsezM6MSwzNDoxLDIyOjEsNDM5OjEsMTg4OjEsMTk2OjF9LGpzZSksaC5kZz1mdW5jdGlvbigpe3JldHVybiBlMXQodGhpcyl9LGgucWc9ZnVuY3Rpb24oKXtyZXR1cm4gZTF0KHRoaXMpfTt2YXIgZ2dlLGRPZSxnT2UscE9lPUZyKEJHLCJQYWNraW5nU3RyYXRlZ3kiLDQzOSxIcixuYm4sQzFuKSwkQ3Q7RCg4MTAsMSx7fSxRM2UpLGguYT0wLGguYj0wLGguYz0wLGguZD1ncyxoLmU9MCxoLmY9Z3MsSShCRywiUm93RmlsbGluZ0FuZENvbXBhY3Rpb24iLDgxMCksRCgxNDcyLDEsVW8sYyQpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwyNyksbnVsbH0saC5LZj1mdW5jdGlvbih0LG4pe2JNbihsKHQsMjcpLG4pfSxJKEJHLCJTaW1wbGVQbGFjZW1lbnQiLDE0NzIpLEQoMTQ3NCwxLFVvLE1uZSksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDI3KSxudWxsfSxoLktmPWZ1bmN0aW9uKHQsbil7dGhpcy5JZyhsKHQsMjcpLG4pfSxoLklnPWZ1bmN0aW9uKHQsbil7TzJ0KHQsbil9LEkoVUNlLCJFcXVhbFdoaXRlc3BhY2VFbGltaW5hdG9yIiwxNDc0KSxEKDE0NzUsMTQ3NCxVbyxEbmUpLGguSWc9ZnVuY3Rpb24odCxuKXt2YXIgcixhLG8sZixnO24uVWcoIlRvIEFzcGVjdCBSYXRpbyBXaGl0ZXNhcGNlIEVsaW1pbmF0b3IiLDEpLGc9emUoR2UoYXQodCwodWcoKSxaeCkpKSksZj16ZShHZShhdCh0LFpUKSkpLG89emUoR2UoYXQodCwoejEoKSxLVykpKSkscj16ZShHZShhdCh0LGJNKSkpLGE9Zy9mLGE8bz8oZz1mKm8sSGkodCxaeCxnKSk6KHIrPWcvby1mLEhpKHQsYk0sciksSGkodCxaVCxmK3IpKSxPMnQodCxuKSxuLlZnKCl9LEkoVUNlLCJUb0FzcGVjdHJhdGlvTm9kZUV4cGFuZGVyIiwxNDc1KSxEKDQ5MiwyMix7MzoxLDM0OjEsMjI6MSw0OTI6MSwxODg6MSwxOTY6MX0sVzNlKSxoLmRnPWZ1bmN0aW9uKCl7cmV0dXJuIEFmdCh0aGlzKX0saC5xZz1mdW5jdGlvbigpe3JldHVybiBBZnQodGhpcyl9O3ZhciBiT2UsbU9lLHZPZT1GcihVQ2UsIldoaXRlU3BhY2VFbGltaW5hdGlvblN0cmF0ZWd5Iiw0OTIsSHIsZTJuLFMxbiksekN0O0QoMTcyLDEsezE3MjoxfSxrY2UpLGguYT0wLGguYz0hMSxoLmQ9MCxoLmU9MCxoLmY9MCxoLmc9MCxoLmk9MCxoLms9ITEsaC5vPWdzLGgucD1ncyxoLnI9MCxoLnM9MCxoLnQ9MCxJKEdQLCJCbG9jayIsMTcyKSxEKDIwOSwxLHsyMDk6MX0sUEgpLGguYT0wLGguYj0wLGguZD0wLGguZT0wLGguZj0wLEkoR1AsIkJsb2NrUm93IiwyMDkpLEQoMzE1LDEsezMxNToxfSx6NWUpLGguYj0wLGguYz0wLGguZD0wLGguZT0wLGguZj0wLEkoR1AsIkJsb2NrU3RhY2siLDMxNSksRCgyMzgsMSx7MjM4OjF9LHo0ZSx6OGUpLGguYT0wLGguYj0wLGguYz0wLGguZD0wLGguZT0wLGguZz0wO3ZhciBNT249SShHUCwiRHJhd2luZ0RhdGEiLDIzOCk7RCgzNzMsMjIsezM6MSwzNDoxLDIyOjEsMzczOjF9LGdPKTt2YXIgZTksUTYseU0seE0sekIscUN0PUZyKEdQLCJEcmF3aW5nRGF0YURlc2NyaXB0b3IiLDM3MyxIcixLbW4sXzFuKSxIQ3Q7RCgxODYsMSx7MTg2OjF9LFE1ZSksaC5iPTAsaC5jPTAsaC5lPTAsaC5mPTAsSShHUCwiUmVjdFJvdyIsMTg2KSxEKDc2MywxLHt9LEo3ZSksaC5qPTAsSShlNCxSM3QsNzYzKSxEKDEyMDksMSx7fSx3SSksaC5hZj1mdW5jdGlvbih0KXtyZXR1cm4gcGIodC5hLHQuYil9LEkoZTQsTUVlLDEyMDkpLEQoMTIxMCwxLHt9LHlYZSksaC5hZj1mdW5jdGlvbih0KXtyZXR1cm4gcnZuKHRoaXMuYSx0KX0sSShlNCxqM3QsMTIxMCksRCgxMjExLDEse30seFhlKSxoLmFmPWZ1bmN0aW9uKHQpe3JldHVybiBFNm4odGhpcy5hLHQpfSxJKGU0LCQzdCwxMjExKSxEKDEyMTIsMSx7fSxrWGUpLGguYWY9ZnVuY3Rpb24odCl7cmV0dXJuIG95bih0aGlzLmEsdCl9LEkoZTQsIkVsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDMkVHlwZSIsMTIxMiksRCgxMjEzLDEse30sRVhlKSxoLmFmPWZ1bmN0aW9uKHQpe3JldHVybiB1RW4odGhpcy5hLHQpfSxJKGU0LHozdCwxMjEzKSxEKDExMTUsMjA1LHR2LHBaZSksaC5yZj1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVjtmb3IoUDEodCwoWU4oKSxKVykpJiYoVj1laShhdCh0LChsdWUoKSxqT2UpKSksZj1pbGUoaEUoKSxWKSxmJiYoZz1sKEdPKGYuZiksMjA1KSxnLnJmKHQsbi5laCgxKSkpKSxIaSh0LHhnZSwock4oKSxRVykpLEhpKHQsa2dlLChYTigpLHlnZSkpLEhpKHQsRWdlLChDTigpLFpXKSksdz1sKGF0KHQsKGx1ZSgpLEJPZSkpLDE3KS5hLG4uVWcoIk92ZXJsYXAgcmVtb3ZhbCIsMSksUnQoQnQoYXQodCx1U3QpKSksRT1uZXcgS3MsQz1uZXcgVFhlKEUpLGE9bmV3IEo3ZSxyPXB3dChhLHQpLEw9ITAsbz0wO288dyYmTDspe2lmKFJ0KEJ0KGF0KHQsRk9lKSkpKXtpZihFLmEuJGIoKSxla24obmV3IHhudChDKSxyLmkpLEUuYS5nYygpPT0wKWJyZWFrO3IuZT1FfWZvcihxTyh0aGlzLmIpLFgwKHRoaXMuYiwoUE4oKSxXVyksKGJfKCkscUIpKSxYMCh0aGlzLmIsWVcsci5nKSxYMCh0aGlzLmIsWFcsKHJxKCksbWdlKSksdGhpcy5hPWJQKHRoaXMuYixyKSx6PW5ldyBHKHRoaXMuYSk7ei5hPHouYy5jLmxlbmd0aDspQj1sKHJlKHopLDQ3KSxCLktmKHIsbi5laCgxKSk7bThuKGEsciksTD1SdChCdChRKHIsKHBFKCksVl9lKSkpKSwrK299QXZ0KGEsciksbi5WZygpfSxJKGU0LCJPdmVybGFwUmVtb3ZhbExheW91dFByb3ZpZGVyIiwxMTE1KSxEKDExMTYsMSx7fSxUWGUpLEkoZTQsIk92ZXJsYXBSZW1vdmFsTGF5b3V0UHJvdmlkZXIvbGFtYmRhJDAkVHlwZSIsMTExNiksRCg0NDQsMjIsezM6MSwzNDoxLDIyOjEsNDQ0OjF9LCRzZSk7dmFyIFdXLFlXLFhXLHBnZT1GcihlNCwiU1BPckVQaGFzZXMiLDQ0NCxIcix1Ym4sTDFuKSxWQ3Q7RCgxMjE5LDEse30sYlplKSxJKGU0LCJTaHJpbmtUcmVlIiwxMjE5KSxEKDExMTcsMjA1LHR2LHZKZSksaC5yZj1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmLGc7UDEodCwoWU4oKSxKVykpJiYoZz1laShhdCh0LEpXKSksbz1pbGUoaEUoKSxnKSxvJiYoZj1sKEdPKG8uZiksMjA1KSxmLnJmKHQsbi5laCgxKSkpKSxhPW5ldyBKN2Uscj1wd3QoYSx0KSxOVG4odGhpcy5hLHIsbi5laCgxKSksQXZ0KGEscil9LEkoZTQsIlNocmlua1RyZWVMYXlvdXRQcm92aWRlciIsMTExNyksRCgzMDYsMTM3LHszOjEsMzA2OjEsOTY6MSwxMzc6MX0sY290KSxoLmM9ITEsSSgib3JnLmVjbGlwc2UuZWxrLmFsZy5zcG9yZS5ncmFwaCIsIkdyYXBoIiwzMDYpLEQoNDkwLDIyLHszOjEsMzQ6MSwyMjoxLDQ5MDoxLDE4ODoxLDE5NjoxfSxkZXQpLGguZGc9ZnVuY3Rpb24oKXtyZXR1cm4gRTB0KHRoaXMpfSxoLnFnPWZ1bmN0aW9uKCl7cmV0dXJuIEUwdCh0aGlzKX07dmFyIGJnZSx3T2U9RnIodDQsVEVlLDQ5MCxIcixycG4sQTFuKSxVQ3Q7RCg1NTgsMjIsezM6MSwzNDoxLDIyOjEsNTU4OjEsMTg4OjEsMTk2OjF9LGRydCksaC5kZz1mdW5jdGlvbigpe3JldHVybiBuZXcgdSR9LGgucWc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHUkfTt2YXIgbWdlLEdDdD1Gcih0NCwiT3ZlcmxhcFJlbW92YWxTdHJhdGVneSIsNTU4LEhyLGlwbixNMW4pLEtDdDtEKDQzOCwyMix7MzoxLDM0OjEsMjI6MSw0Mzg6MX0sWTNlKTt2YXIgUVcsdmdlLHlPZT1Gcih0NCwiUm9vdFNlbGVjdGlvbiIsNDM4LEhyLGkybixEMW4pLFdDdDtEKDMyNCwyMix7MzoxLDM0OjEsMjI6MSwzMjQ6MX0scE8pO3ZhciB4T2Usd2dlLHlnZSxrT2UsRU9lLFRPZT1Gcih0NCwiU3Bhbm5pbmdUcmVlQ29zdEZ1bmN0aW9uIiwzMjQsSHIsV21uLEkxbiksWUN0O0QoMTAxNCwxLFBmLGNpZSksaC5oZj1mdW5jdGlvbih0KXtpdnQodCl9O3ZhciBDT2UsU09lLFhDdCxRQ3QsX09lLEFPZSx4Z2Usa2dlLEVnZSxKQ3QsWkN0LEpXO0kodDQsIlNwb3JlQ29tcGFjdGlvbk9wdGlvbnMiLDEwMTQpLEQoMTAxNSwxLHt9LEluZSksaC5zZj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PW5ldyB2SmUsdH0saC50Zj1mdW5jdGlvbih0KXt9LEkodDQsIlNwb3JlQ29tcGFjdGlvbk9wdGlvbnMvU3BvcmVDb21wYWN0aW9uRmFjdG9yeSIsMTAxNSksRCg4NjYsMSxQZix1aWUpLGguaGY9ZnVuY3Rpb24odCl7c24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LE1mZSksIiIpLCJVbmRlcmx5aW5nIExheW91dCBBbGdvcml0aG0iKSwiQSBsYXlvdXQgYWxnb3JpdGhtIHRoYXQgaXMgYXBwbGllZCB0byB0aGUgZ3JhcGggYmVmb3JlIGl0IGlzIGNvbXBhY3RlZC4gSWYgdGhpcyBpcyBudWxsLCBub3RoaW5nIGlzIGFwcGxpZWQgYmVmb3JlIGNvbXBhY3Rpb24uIiksKGcyKCksSjYpKSx6dCksdW4oKHIxKCksUG4pKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsT2ZlKSwic3RydWN0dXJlIiksIlN0cnVjdHVyZSBFeHRyYWN0aW9uIFN0cmF0ZWd5IiksIlRoaXMgb3B0aW9uIGRlZmluZXMgd2hhdCBraW5kIG9mIHRyaWFuZ3VsYXRpb24gb3Igb3RoZXIgcGFydGl0aW9uaW5nIG9mIHRoZSBwbGFuZSBpcyBhcHBsaWVkIHRvIHRoZSB2ZXJ0aWNlcy4iKSxOT2UpLHBzKSwkT2UpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsR0NlKSxOZmUpLCJUcmVlIENvbnN0cnVjdGlvbiBTdHJhdGVneSIpLCJXaGV0aGVyIGEgbWluaW11bSBzcGFubmluZyB0cmVlIG9yIGEgbWF4aW11bSBzcGFubmluZyB0cmVlIHNob3VsZCBiZSBjb25zdHJ1Y3RlZC4iKSxJT2UpLHBzKSxxT2UpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsS0NlKSxOZmUpLCJDb3N0IEZ1bmN0aW9uIGZvciBTcGFubmluZyBUcmVlIiksIlRoZSBjb3N0IGZ1bmN0aW9uIGlzIHVzZWQgaW4gdGhlIGNyZWF0aW9uIG9mIHRoZSBzcGFubmluZyB0cmVlLiIpLERPZSkscHMpLFRPZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxEZmUpLE5mZSksIlJvb3Qgbm9kZSBmb3Igc3Bhbm5pbmcgdHJlZSBjb25zdHJ1Y3Rpb24iKSwiVGhlIGlkZW50aWZpZXIgb2YgdGhlIG5vZGUgdGhhdCBpcyBwcmVmZXJyZWQgYXMgdGhlIHJvb3Qgb2YgdGhlIHNwYW5uaW5nIHRyZWUuIElmIHRoaXMgaXMgbnVsbCwgdGhlIGZpcnN0IG5vZGUgaXMgY2hvc2VuLiIpLG51bGwpLEo2KSx6dCksdW4oUG4pKSkpLFFzKHQsRGZlLElmZSxzU3QpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxJZmUpLE5mZSksIlJvb3Qgc2VsZWN0aW9uIGZvciBzcGFubmluZyB0cmVlIiksIlRoaXMgc2V0cyB0aGUgbWV0aG9kIHVzZWQgdG8gc2VsZWN0IGEgcm9vdCBub2RlIGZvciB0aGUgY29uc3RydWN0aW9uIG9mIGEgc3Bhbm5pbmcgdHJlZSIpLE1PZSkscHMpLHlPZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxXQ2UpLENUZSksU3l0KSwiVGhpcyBvcHRpb24gZGVmaW5lcyBob3cgdGhlIGNvbXBhY3Rpb24gaXMgYXBwbGllZC4iKSxMT2UpLHBzKSx3T2UpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsWUNlKSxDVGUpLCJPcnRob2dvbmFsIENvbXBhY3Rpb24iKSwiUmVzdHJpY3RzIHRoZSB0cmFuc2xhdGlvbiBvZiBub2RlcyB0byBvcnRob2dvbmFsIGRpcmVjdGlvbnMgaW4gdGhlIGNvbXBhY3Rpb24gcGhhc2UuIiksKEhuKCksITEpKSx5YSksTnMpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsWENlKSxMeXQpLCJVcHBlciBsaW1pdCBmb3IgaXRlcmF0aW9ucyBvZiBvdmVybGFwIHJlbW92YWwiKSxudWxsKSxwdCg2NCkpLFRjKSxybyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxRQ2UpLEx5dCksIldoZXRoZXIgdG8gcnVuIGEgc3VwcGxlbWVudGFyeSBzY2FubGluZSBvdmVybGFwIGNoZWNrLiIpLG51bGwpLCEwKSx5YSksTnMpLHVuKFBuKSkpKSxvbXQoKG5ldyBsaWUsdCkpLGl2dCgobmV3IGNpZSx0KSl9O3ZhciBlU3QsTE9lLHRTdCxuU3QsclN0LGlTdCxzU3QsYVN0LE1PZSxvU3QsRE9lLGNTdCxJT2UsT09lLE5PZSxQT2U7SSh0NCwiU3BvcmVNZXRhRGF0YVByb3ZpZGVyIiw4NjYpLEQoMTAxMiwxLFBmLGxpZSksaC5oZj1mdW5jdGlvbih0KXtvbXQodCl9O3ZhciB1U3QsQk9lLEZPZSxST2UsbFN0LGpPZTtJKHQ0LCJTcG9yZU92ZXJsYXBSZW1vdmFsT3B0aW9ucyIsMTAxMiksRCgxMDEzLDEse30sdWgpLGguc2Y9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1uZXcgcFplLHR9LGgudGY9ZnVuY3Rpb24odCl7fSxJKHQ0LCJTcG9yZU92ZXJsYXBSZW1vdmFsT3B0aW9ucy9TcG9yZU92ZXJsYXBGYWN0b3J5IiwxMDEzKSxEKDUzOSwyMix7MzoxLDM0OjEsMjI6MSw1Mzk6MSwxODg6MSwxOTY6MX0sZ2F0KSxoLmRnPWZ1bmN0aW9uKCl7cmV0dXJuIFQwdCh0aGlzKX0saC5xZz1mdW5jdGlvbigpe3JldHVybiBUMHQodGhpcyl9O3ZhciBxQiwkT2U9RnIodDQsIlN0cnVjdHVyZUV4dHJhY3Rpb25TdHJhdGVneSIsNTM5LEhyLHNwbixPMW4pLGhTdDtEKDQzNywyMix7MzoxLDM0OjEsMjI6MSw0Mzc6MSwxODg6MSwxOTY6MX0sWDNlKSxoLmRnPWZ1bmN0aW9uKCl7cmV0dXJuIFQxdCh0aGlzKX0saC5xZz1mdW5jdGlvbigpe3JldHVybiBUMXQodGhpcyl9O3ZhciB6T2UsWlcscU9lPUZyKHQ0LCJUcmVlQ29uc3RydWN0aW9uU3RyYXRlZ3kiLDQzNyxIcixzMm4sTjFuKSxmU3Q7RCgxNDYzLDEsVW8sZ2wpLGgucmc9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCwzMDYpLG5ldyBYc30saC5LZj1mdW5jdGlvbih0LG4pe3g4bihsKHQsMzA2KSxuKX0sSShNeXQsIkRlbGF1bmF5VHJpYW5ndWxhdGlvblBoYXNlIiwxNDYzKSxEKDE0NjQsMSxmcixDWGUpLGguQ2Q9ZnVuY3Rpb24odCl7dnQodGhpcy5hLGwodCw2OCkuYSl9LEkoTXl0LCJEZWxhdW5heVRyaWFuZ3VsYXRpb25QaGFzZS9sYW1iZGEkMCRUeXBlIiwxNDY0KSxEKDc5NCwxLFVvLEh3ZSksaC5yZz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LDMwNiksbmV3IFhzfSxoLktmPWZ1bmN0aW9uKHQsbil7dGhpcy5KZyhsKHQsMzA2KSxuKX0saC5KZz1mdW5jdGlvbih0LG4pe3ZhciByLGEsbztuLlVnKCJNaW5pbXVtIHNwYW5uaW5nIHRyZWUgY29uc3RydWN0aW9uIiwxKSx0LmQ/YT10LmQuYTphPWwoanQodC5pLDApLDY4KS5hLFJ0KEJ0KFEodCwocEUoKSxqTCkpKSk/bz1FbGUodC5lLGEsKHI9dC5iLHIpKTpvPUVsZSh0LmUsYSx0LmIpLGEwdCh0aGlzLG8sdCksbi5WZygpfSxJKFBmZSwiTWluU1RQaGFzZSIsNzk0KSxEKDE0NjYsNzk0LFVvLHJKZSksaC5KZz1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmO24uVWcoIk1heGltdW0gc3Bhbm5pbmcgdHJlZSBjb25zdHJ1Y3Rpb24iLDEpLHI9bmV3IFNYZSh0KSx0LmQ/bz10LmQuYzpvPWwoanQodC5pLDApLDY4KS5jLFJ0KEJ0KFEodCwocEUoKSxqTCkpKSk/Zj1FbGUodC5lLG8sKGE9cixhKSk6Zj1FbGUodC5lLG8sciksYTB0KHRoaXMsZix0KSxuLlZnKCl9LEkoUGZlLCJNYXhTVFBoYXNlIiwxNDY2KSxEKDE0NjcsMSx7fSxTWGUpLGguYWY9ZnVuY3Rpb24odCl7cmV0dXJuIHZsbih0aGlzLmEsdCl9LEkoUGZlLCJNYXhTVFBoYXNlL2xhbWJkYSQwJFR5cGUiLDE0NjcpLEQoMTQ2NSwxLGZyLF9YZSksaC5DZD1mdW5jdGlvbih0KXtsaG4odGhpcy5hLGwodCw2OCkpfSxJKFBmZSwiTWluU1RQaGFzZS9sYW1iZGEkMCRUeXBlIiwxNDY1KSxEKDc5NiwxLFVvLHUkKSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzA2KSxuZXcgWHN9LGguS2Y9ZnVuY3Rpb24odCxuKXtCeG4odGhpcyxsKHQsMzA2KSxuKX0saC5hPSExLEkoQmZlLCJHcm93VHJlZVBoYXNlIiw3OTYpLEQoNzk3LDEsZnIseDRlKSxoLkNkPWZ1bmN0aW9uKHQpe0ozbih0aGlzLmEsdGhpcy5iLHRoaXMuYyxsKHQsMjI1KSl9LEkoQmZlLCJHcm93VHJlZVBoYXNlL2xhbWJkYSQwJFR5cGUiLDc5NyksRCgxNDY4LDEsVW8sT25lKSxoLnJnPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsMzA2KSxuZXcgWHN9LGguS2Y9ZnVuY3Rpb24odCxuKXtWNm4odGhpcyxsKHQsMzA2KSxuKX0sSShCZmUsIlNocmlua1RyZWVDb21wYWN0aW9uUGhhc2UiLDE0NjgpLEQoNzk1LDEsZnIsazRlKSxoLkNkPWZ1bmN0aW9uKHQpe0RFbih0aGlzLmEsdGhpcy5iLHRoaXMuYyxsKHQsMjI1KSl9LEkoQmZlLCJTaHJpbmtUcmVlQ29tcGFjdGlvblBoYXNlL2xhbWJkYSQwJFR5cGUiLDc5NSk7dmFyIEhPZT1rcyhVYywiSUdyYXBoRWxlbWVudFZpc2l0b3IiKTtEKDg3MiwxLHs1MzY6MX0sS290KSxoLktnPWZ1bmN0aW9uKHQpe3ZhciBuO249UlNuKHRoaXMsdCkscGMobixsKGNyKHRoaXMuYix0KSw5NikpLE9Ubih0aGlzLHQsbil9O3ZhciBkU3QsZ1N0O0kodjYsIkxheW91dENvbmZpZ3VyYXRvciIsODcyKTt2YXIgRE9uPWtzKHY2LCJMYXlvdXRDb25maWd1cmF0b3IvSVByb3BlcnR5SG9sZGVyT3B0aW9uRmlsdGVyIik7RCg5NDQsMSx7MjAzMjoxfSxObmUpLGguTGc9ZnVuY3Rpb24odCxuKXtyZXR1cm4gaHgoKSwhdC5wZihuKX0sSSh2NiwiTGF5b3V0Q29uZmlndXJhdG9yL2xhbWJkYSQwJFR5cGUiLDk0NCksRCg5NDMsMSx7ODQ1OjF9LGV5KSxoLk1nPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGh4KCksIXQucGYobil9LEkodjYsIkxheW91dENvbmZpZ3VyYXRvci9sYW1iZGEkMSRUeXBlIiw5NDMpLEQoOTQ1LDEsezIwMzI6MX0scDUpLGguTGc9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbVplKHQsbil9LEkodjYsIkxheW91dENvbmZpZ3VyYXRvci9sYW1iZGEkMiRUeXBlIiw5NDUpLEQoOTQ2LDEsdGksYXR0KSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBLZ24odGhpcy5hLHRoaXMuYixsKHQsMjAzMikpfSxJKHY2LCJMYXlvdXRDb25maWd1cmF0b3IvbGFtYmRhJDMkVHlwZSIsOTQ2KSxEKDg2OSwxLHt9LHR5KSxJKHY2LCJSZWN1cnNpdmVHcmFwaExheW91dEVuZ2luZSIsODY5KSxEKDIyNCw2MyxscCxOUWUsVnApLEkodjYsIlVuc3VwcG9ydGVkQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiIsMjI0KSxEKDM3MCw2MyxscCxJOCksSSh2NiwiVW5zdXBwb3J0ZWRHcmFwaEV4Y2VwdGlvbiIsMzcwKSxEKDc2MSwxLHt9KSxJKFVjLCJBYnN0cmFjdFJhbmRvbUxpc3RBY2Nlc3NvciIsNzYxKSxEKDQ1MCw3NjEse30sVUEpLGguTmc9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0saC5kPSEwLGguZT0hMCxoLmY9MCxJKHZULCJBbGdvcml0aG1Bc3NlbWJsZXIiLDQ1MCksRCgxMjAwLDEsdGksUnApLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuISFsKHQsMTA2KX0sSSh2VCwiQWxnb3JpdGhtQXNzZW1ibGVyL2xhbWJkYSQwJFR5cGUiLDEyMDApLEQoMTIwMSwxLHt9LEFYZSksaC5LYj1mdW5jdGlvbih0KXtyZXR1cm4gT3VuKHRoaXMuYSxsKHQsMTA2KSl9LEkodlQsIkFsZ29yaXRobUFzc2VtYmxlci9sYW1iZGEkMSRUeXBlIiwxMjAxKSxEKDEyMDIsMSx0aSx1OCksaC5NYj1mdW5jdGlvbih0KXtyZXR1cm4hIWwodCw4MCl9LEkodlQsIkFsZ29yaXRobUFzc2VtYmxlci9sYW1iZGEkMiRUeXBlIiwxMjAyKSxEKDEyMDMsMSxmcixMWGUpLGguQ2Q9ZnVuY3Rpb24odCl7RGgodGhpcy5hLGwodCw4MCkpfSxJKHZULCJBbGdvcml0aG1Bc3NlbWJsZXIvbGFtYmRhJDMkVHlwZSIsMTIwMyksRCgxMjA0LDEsZnIsb3R0KSxoLkNkPWZ1bmN0aW9uKHQpe2lmbih0aGlzLmEsdGhpcy5iLGwodCwxOTYpKX0sSSh2VCwiQWxnb3JpdGhtQXNzZW1ibGVyL2xhbWJkYSQ0JFR5cGUiLDEyMDQpLEQoMTM0MywxLGlpLHlJKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIExwbihsKHQsMTk2KSxsKG4sMTk2KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSSh2VCwiRW51bUJhc2VkRmFjdG9yeUNvbXBhcmF0b3IiLDEzNDMpLEQoODAsNzYxLHs4MDoxfSxYcyksaC5OZz1mdW5jdGlvbigpe3JldHVybiBuZXcgS3N9LGguYT0wLEkodlQsIkxheW91dFByb2Nlc3NvckNvbmZpZ3VyYXRpb24iLDgwKSxEKDEwMjUsMSx7NTM2OjF9LGhpZSksaC5LZz1mdW5jdGlvbih0KXttQShiU3QsbmV3IE1YZSh0KSl9O3ZhciBwU3QsYlN0LG1TdDtJKE5jLCJEZXByZWNhdGVkTGF5b3V0T3B0aW9uUmVwbGFjZXIiLDEwMjUpLEQoMTAyNiwxLGZyLGwkKSxoLkNkPWZ1bmN0aW9uKHQpe2p2bihsKHQsMTY3KSl9LEkoTmMsIkRlcHJlY2F0ZWRMYXlvdXRPcHRpb25SZXBsYWNlci9sYW1iZGEkMCRUeXBlIiwxMDI2KSxEKDEwMjcsMSxmcixoJCksaC5DZD1mdW5jdGlvbih0KXtUNW4obCh0LDE2NykpfSxJKE5jLCJEZXByZWNhdGVkTGF5b3V0T3B0aW9uUmVwbGFjZXIvbGFtYmRhJDEkVHlwZSIsMTAyNyksRCgxMDI4LDEse30sTVhlKSxoLllkPWZ1bmN0aW9uKHQsbil7cmZuKHRoaXMuYSxsKHQsMTQ5KSxsKG4sNDEpKX0sSShOYywiRGVwcmVjYXRlZExheW91dE9wdGlvblJlcGxhY2VyL2xhbWJkYSQyJFR5cGUiLDEwMjgpLEQoMTQzLDEsezcwMToxLDE0MzoxfSxYbSksaC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gZzZlKHRoaXMsdCl9LGguT2c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLlBnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30saC54ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gczIodGhpcy5jKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiJMYXlvdXQgQWxnb3JpdGhtOiAiK3RoaXMuY307dmFyIElPbj1JKE5jLCJMYXlvdXRBbGdvcml0aG1EYXRhIiwxNDMpO0QoMjY5LDEse30seDEpLEkoTmMsIkxheW91dEFsZ29yaXRobURhdGEvQnVpbGRlciIsMjY5KSxEKDEwMjksMSx7NTM2OjF9LGYkKSxoLktnPWZ1bmN0aW9uKHQpe0RlKHQsMjA3KSYmIVJ0KEJ0KHQub2YoKHBpKCksclkpKSkpJiZfQW4obCh0LDI3KSl9LEkoTmMsIkxheW91dEFsZ29yaXRobVJlc29sdmVyIiwxMDI5KSxEKDIzMywxLHs3MDE6MSwyMzM6MX0sbngpLGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMjMzKT92bih0aGlzLmIsbCh0LDIzMykuYik6ITF9LGguT2c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLlBnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0saC54ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gczIodGhpcy5iKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiJMYXlvdXQgVHlwZTogIit0aGlzLmJ9LEkoTmMsIkxheW91dENhdGVnb3J5RGF0YSIsMjMzKSxEKDM1NywxLHt9LG55KSxJKE5jLCJMYXlvdXRDYXRlZ29yeURhdGEvQnVpbGRlciIsMzU3KSxEKDg3OSwxLHt9LFhidCk7dmFyIFRnZTtJKE5jLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UiLDg3OSksRCg4ODAsMSx7fSxKc3QpLEkoTmMsIkxheW91dE1ldGFEYXRhU2VydmljZS9SZWdpc3RyeSIsODgwKSxEKDQ4NywxLHs0ODc6MX0sSjkpLEkoTmMsIkxheW91dE1ldGFEYXRhU2VydmljZS9SZWdpc3RyeS9UcmlwbGUiLDQ4NyksRCg4ODEsMSxFNixQbmUpLGguUWc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHFhfSxJKE5jLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDAkVHlwZSIsODgxKSxEKDg4MiwxLG40LHhJKSxoLlJnPWZ1bmN0aW9uKHQpe3JldHVybiBKYShsKHQsOCkpfSxJKE5jLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDEkVHlwZSIsODgyKSxEKDg5MSwxLEU2LGw4KSxoLlFnPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBidH0sSShOYywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxMCRUeXBlIiw4OTEpLEQoODkyLDEsbjQsVzIpLGguUmc9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBPbChsKHQsMTMpKX0sSShOYywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxMSRUeXBlIiw4OTIpLEQoODkzLDEsRTYsZCQpLGguUWc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG9zfSxJKE5jLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDEyJFR5cGUiLDg5MyksRCg4OTQsMSxuNCxnJCksaC5SZz1mdW5jdGlvbih0KXtyZXR1cm4gUE8obCh0LDY3KSl9LEkoTmMsIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMTMkVHlwZSIsODk0KSxEKDg5NSwxLEU2LHAkKSxoLlFnPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBLc30sSShOYywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxNCRUeXBlIiw4OTUpLEQoODk2LDEsbjQsQm5lKSxoLlJnPWZ1bmN0aW9uKHQpe3JldHVybiBMSChsKHQsNDkpKX0sSShOYywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxNSRUeXBlIiw4OTYpLEQoODk3LDEsRTYsaDgpLGguUWc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJkfSxJKE5jLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDE2JFR5cGUiLDg5NyksRCg4OTgsMSxuNCxyeSksaC5SZz1mdW5jdGlvbih0KXtyZXR1cm4gSEgobCh0LDQ5KSl9LEkoTmMsIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMTckVHlwZSIsODk4KSxEKDg5OSwxLEU2LGpwKSxoLlFnPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBMd2V9LEkoTmMsIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMTgkVHlwZSIsODk5KSxEKDkwMCwxLG40LFkyKSxoLlJnPWZ1bmN0aW9uKHQpe3JldHVybiBfaXQobCh0LDE1NykpfSxJKE5jLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDE5JFR5cGUiLDkwMCksRCg4ODMsMSxFNixiNSksaC5RZz1mdW5jdGlvbigpe3JldHVybiBuZXcgYmx9LEkoTmMsIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMiRUeXBlIiw4ODMpLEQoODg0LDEsbjQsWjkpLGguUmc9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBHeihsKHQsNzUpKX0sSShOYywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQzJFR5cGUiLDg4NCksRCg4ODUsMSxFNixfUyksaC5RZz1mdW5jdGlvbigpe3JldHVybiBuZXcgc199LEkoTmMsIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkNCRUeXBlIiw4ODUpLEQoODg2LDEsbjQsa0kpLGguUmc9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB4YWUobCh0LDE0MCkpfSxJKE5jLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDUkVHlwZSIsODg2KSxEKDg4NywxLEU2LEZuZSksaC5RZz1mdW5jdGlvbigpe3JldHVybiBuZXcgQTh9LEkoTmMsIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkNiRUeXBlIiw4ODcpLEQoODg4LDEsbjQsUm5lKSxoLlJnPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUzRlKGwodCwxMDcpKX0sSShOYywiTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQ3JFR5cGUiLDg4OCksRCg4ODksMSxFNixiJCksaC5RZz1mdW5jdGlvbigpe3JldHVybiBuZXcgRUl9LEkoTmMsIkxheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkOCRUeXBlIiw4ODkpLEQoODkwLDEsbjQsbSQpLGguUmc9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBYbHQobCh0LDM4NSkpfSxJKE5jLCJMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDkkVHlwZSIsODkwKTt2YXIgQ2dlPWtzKElQLCJJUHJvcGVydHkiKTtEKDIzLDEsezM0OjEsNzAxOjEsMjM6MSwxNDk6MX0sWHQpLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFRobih0aGlzLGwodCwxNDkpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwyMyk/dm4odGhpcy5mLGwodCwyMykuZik6RGUodCwxNDkpJiZ2bih0aGlzLmYsbCh0LDE0OSkuUGcoKSl9LGguU2c9ZnVuY3Rpb24oKXt2YXIgdDtpZihEZSh0aGlzLmIsNCkpe2lmKHQ9SDhlKHRoaXMuYiksdD09bnVsbCl0aHJvdyB1ZShuZXcgbmMoTnl0K3RoaXMuZisiJy4gTWFrZSBzdXJlIGl0J3MgdHlwZSBpcyByZWdpc3RlcmVkIHdpdGggdGhlICIrKEdnKGhGKSxoRi5rKStKQ2UpKTtyZXR1cm4gdH1lbHNlIHJldHVybiB0aGlzLmJ9LGguT2c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxoLlBnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0saC54ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLml9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gczIodGhpcy5mKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiJMYXlvdXQgT3B0aW9uOiAiK3RoaXMuZn0sSShOYywiTGF5b3V0T3B0aW9uRGF0YSIsMjMpLEQoMjQsMSx7fSxVdCksSShOYywiTGF5b3V0T3B0aW9uRGF0YS9CdWlsZGVyIiwyNCksRCgxNzAsMjIsezM6MSwzNDoxLDIyOjEsMTcwOjF9LGJPKTt2YXIgemQsUzIsaGEsUG4seXYseGc9RnIoTmMsIkxheW91dE9wdGlvbkRhdGEvVGFyZ2V0IiwxNzAsSHIsWW1uLFAxbiksdlN0O0QoMjg1LDIyLHszOjEsMzQ6MSwyMjoxLDI4NToxfSxGOCk7dmFyIHlhLGZvLHBzLHQ5LFRjLFgxLEo2LFZPZSx3U3Q9RnIoTmMsIkxheW91dE9wdGlvbkRhdGEvVHlwZSIsMjg1LEhyLGJ3bixCMW4pLHlTdCxrTSxVT2U7RCgxMTYsMSx7MTE2OjF9LCQ4LGVmLE1IKSxoLkZiPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiB0PT1udWxsfHwhRGUodCwxMTYpPyExOihuPWwodCwxMTYpLEpjKHRoaXMuYyxuLmMpJiZKYyh0aGlzLmQsbi5kKSYmSmModGhpcy5iLG4uYikmJkpjKHRoaXMuYSxuLmEpKX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBNTihoZShsZSh3YSwxKSxSbiwxLDUsW3RoaXMuYyx0aGlzLmQsdGhpcy5iLHRoaXMuYV0pKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiJSZWN0W3g9Iit0aGlzLmMrIix5PSIrdGhpcy5kKyIsdz0iK3RoaXMuYisiLGg9Iit0aGlzLmErIl0ifSxoLmE9MCxoLmI9MCxoLmM9MCxoLmQ9MCxJKCRQLCJFbGtSZWN0YW5nbGUiLDExNiksRCg4LDEsezM6MSw0OjEsODoxLDQyMzoxfSxxYSxib2UsbHQsRW8pLGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHVmdCh0aGlzLHQpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIGo4KHRoaXMuYSkrazduKGo4KHRoaXMuYikpfSxoLmNnPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvO2ZvcihhPTA7YTx0Lmxlbmd0aCYmSzB0KChYbihhLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoYSkpLE8zdCk7KSsrYTtmb3Iobj10Lmxlbmd0aDtuPjAmJkswdCgoWG4obi0xLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQobi0xKSksTjN0KTspLS1uO2lmKGE+PW4pdGhyb3cgdWUobmV3IFluKCJUaGUgZ2l2ZW4gc3RyaW5nIGRvZXMgbm90IGNvbnRhaW4gYW55IG51bWJlcnMuIikpO2lmKG89R3koKEdhKGEsbix0Lmxlbmd0aCksdC5zdWJzdHIoYSxuLWEpKSxgLHw7fFxyfApgKSxvLmxlbmd0aCE9Mil0aHJvdyB1ZShuZXcgWW4oIkV4YWN0bHkgdHdvIG51bWJlcnMgYXJlIGV4cGVjdGVkLCAiK28ubGVuZ3RoKyIgd2VyZSBmb3VuZC4iKSk7dHJ5e3RoaXMuYT1qeSgkeShvWzBdKSksdGhpcy5iPWp5KCR5KG9bMV0pKX1jYXRjaChmKXt0aHJvdyBmPWJzKGYpLERlKGYsMTMwKT8ocj1mLHVlKG5ldyBZbihQM3QrcikpKTp1ZShmKX19LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4iKCIrdGhpcy5hKyIsIit0aGlzLmIrIikifSxoLmE9MCxoLmI9MDt2YXIgRWE9SSgkUCwiS1ZlY3RvciIsOCk7RCg3NSw2Nyx7MzoxLDQ6MSwyMDoxLDMxOjEsNTY6MSwxNjoxLDY3OjEsMTU6MSw3NToxLDQyMzoxfSxibCxHeixmcnQpLGguUGM9ZnVuY3Rpb24oKXtyZXR1cm4gT3luKHRoaXMpfSxoLmNnPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvLGYsZzthPUd5KHQsYCx8O3xcXCh8XFwpfFxcW3xcXF18XFx7fFxcfXwgfAl8CmApLENoKHRoaXMpO3RyeXtmb3Iocj0wLGY9MCxvPTAsZz0wO3I8YS5sZW5ndGg7KWFbcl0hPW51bGwmJiR5KGFbcl0pLmxlbmd0aD4wJiYoZiUyPT0wP289ankoYVtyXSk6Zz1qeShhW3JdKSxmPjAmJmYlMiE9MCYmdWkodGhpcyxuZXcgbHQobyxnKSksKytmKSwrK3J9Y2F0Y2godyl7dGhyb3cgdz1icyh3KSxEZSh3LDEzMCk/KG49dyx1ZShuZXcgWW4oIlRoZSBnaXZlbiBzdHJpbmcgZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIGZvcm1hdCBmb3IgdmVjdG9ycy4iK24pKSk6dWUodyl9fSxoLkliPWZ1bmN0aW9uKCl7dmFyIHQsbixyO2Zvcih0PW5ldyBUaCgiKCIpLG49UnIodGhpcywwKTtuLmIhPW4uZC5jOylyPWwoQnIobiksOCksaGkodCxyLmErIiwiK3IuYiksbi5iIT1uLmQuYyYmKHQuYSs9IjsgIik7cmV0dXJuKHQuYSs9IikiLHQpLmF9O3ZhciBHT2U9SSgkUCwiS1ZlY3RvckNoYWluIiw3NSk7RCgyNTUsMjIsezM6MSwzNDoxLDIyOjEsMjU1OjF9LF9fKTt2YXIgU2dlLGVZLHRZLEhCLFZCLG5ZLEtPZT1GcihuaCwiQWxpZ25tZW50IiwyNTUsSHIsTXZuLEYxbikseFN0O0QoOTkxLDEsUGYsZmllKSxoLmhmPWZ1bmN0aW9uKHQpe3htdCh0KX07dmFyIFdPZSxfZ2Usa1N0LFlPZSxYT2UsRVN0LFFPZSxUU3QsQ1N0LEpPZSxaT2UsU1N0O0kobmgsIkJveExheW91dGVyT3B0aW9ucyIsOTkxKSxEKDk5MiwxLHt9LGVrKSxoLnNmPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9bmV3IGpuZSx0fSxoLnRmPWZ1bmN0aW9uKHQpe30sSShuaCwiQm94TGF5b3V0ZXJPcHRpb25zL0JveEZhY3RvcnkiLDk5MiksRCgyOTgsMjIsezM6MSwzNDoxLDIyOjEsMjk4OjF9LEFfKTt2YXIgRU0sQWdlLFRNLENNLFNNLExnZSxNZ2U9RnIobmgsIkNvbnRlbnRBbGlnbm1lbnQiLDI5OCxIcixEdm4sUjFuKSxfU3Q7RCg2OTksMSxQZix1eiksaC5oZj1mdW5jdGlvbih0KXtzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsQnl0KSwiIiksIkxheW91dCBBbGdvcml0aG0iKSwiU2VsZWN0IGEgc3BlY2lmaWMgbGF5b3V0IGFsZ29yaXRobS4iKSwoZzIoKSxKNikpLHp0KSx1bigocjEoKSxQbikpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKFF0KGVuKEp0KFp0KG5ldyBVdCxGeXQpLCIiKSwiUmVzb2x2ZWQgTGF5b3V0IEFsZ29yaXRobSIpLCJNZXRhIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZWxlY3RlZCBhbGdvcml0aG0uIiksWDEpLElPbiksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxxVGUpLCIiKSwiQWxpZ25tZW50IiksIkFsaWdubWVudCBvZiB0aGUgc2VsZWN0ZWQgbm9kZSByZWxhdGl2ZSB0byBvdGhlciBub2RlczsgdGhlIGV4YWN0IG1lYW5pbmcgZGVwZW5kcyBvbiB0aGUgdXNlZCBhbGdvcml0aG0uIiksZU5lKSxwcyksS09lKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LE94KSwiIiksIkFzcGVjdCBSYXRpbyIpLCJUaGUgZGVzaXJlZCBhc3BlY3QgcmF0aW8gb2YgdGhlIGRyYXdpbmcsIHRoYXQgaXMgdGhlIHF1b3RpZW50IG9mIHdpZHRoIGJ5IGhlaWdodC4iKSxmbyksdGEpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsdFNlKSwiIiksIkJlbmQgUG9pbnRzIiksIkEgZml4ZWQgbGlzdCBvZiBiZW5kIHBvaW50cyBmb3IgdGhlIGVkZ2UuIFRoaXMgaXMgdXNlZCBieSB0aGUgJ0ZpeGVkIExheW91dCcgYWxnb3JpdGhtIHRvIHNwZWNpZnkgYSBwcmUtZGVmaW5lZCByb3V0aW5nIGZvciBhbiBlZGdlLiBUaGUgdmVjdG9yIGNoYWluIG11c3QgaW5jbHVkZSB0aGUgc291cmNlIHBvaW50LCBhbnkgYmVuZCBwb2ludHMsIGFuZCB0aGUgdGFyZ2V0IHBvaW50LCBzbyBpdCBtdXN0IGhhdmUgYXQgbGVhc3QgdHdvIHBvaW50cy4iKSxYMSksR09lKSx1bih6ZCkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFNHKSwiIiksIkNvbnRlbnQgQWxpZ25tZW50IiksIlNwZWNpZmllcyBob3cgdGhlIGNvbnRlbnQgb2YgYSBub2RlIGFyZSBhbGlnbmVkLiBFYWNoIG5vZGUgY2FuIGluZGl2aWR1YWxseSBjb250cm9sIHRoZSBhbGlnbm1lbnQgb2YgaXRzIGNvbnRlbnRzLiBJLmUuIGlmIGEgbm9kZSBzaG91bGQgYmUgYWxpZ25lZCB0b3AgbGVmdCBpbiBpdHMgcGFyZW50IG5vZGUsIHRoZSBwYXJlbnQgbm9kZSBzaG91bGQgc3BlY2lmeSB0aGF0IG9wdGlvbi4iKSxuTmUpLHQ5KSxNZ2UpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsVlApLCIiKSwiRGVidWcgTW9kZSIpLCJXaGV0aGVyIGFkZGl0aW9uYWwgZGVidWcgaW5mb3JtYXRpb24gc2hhbGwgYmUgZ2VuZXJhdGVkLiIpLChIbigpLCExKSkseWEpLE5zKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGdmZSksIiIpLGtFZSksIk92ZXJhbGwgZGlyZWN0aW9uIG9mIGVkZ2VzOiBob3Jpem9udGFsIChyaWdodCAvIGxlZnQpIG9yIHZlcnRpY2FsIChkb3duIC8gdXApLiIpLHJOZSkscHMpLExNKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEhQKSwiIiksIkVkZ2UgUm91dGluZyIpLCJXaGF0IGtpbmQgb2YgZWRnZSByb3V0aW5nIHN0eWxlIHNob3VsZCBiZSBhcHBsaWVkIGZvciB0aGUgY29udGVudCBvZiBhIHBhcmVudCBub2RlLiBBbGdvcml0aG1zIG1heSBhbHNvIHNldCB0aGlzIG9wdGlvbiB0byBzaW5nbGUgZWRnZXMgaW4gb3JkZXIgdG8gbWFyayB0aGVtIGFzIHNwbGluZXMuIFRoZSBiZW5kIHBvaW50IGxpc3Qgb2YgZWRnZXMgd2l0aCB0aGlzIG9wdGlvbiBzZXQgdG8gU1BMSU5FUyBtdXN0IGJlIGludGVycHJldGVkIGFzIGNvbnRyb2wgcG9pbnRzIGZvciBhIHBpZWNld2lzZSBjdWJpYyBzcGxpbmUuIiksYU5lKSxwcyksVmdlKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFpDZSksIiIpLCJFeHBhbmQgTm9kZXMiKSwiSWYgYWN0aXZlLCBub2RlcyBhcmUgZXhwYW5kZWQgdG8gZmlsbCB0aGUgYXJlYSBvZiB0aGVpciBwYXJlbnQuIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxDRyksIiIpLCJIaWVyYXJjaHkgSGFuZGxpbmciKSwiRGV0ZXJtaW5lcyB3aGV0aGVyIHNlcGFyYXRlIGxheW91dCBydW5zIGFyZSB0cmlnZ2VyZWQgZm9yIGRpZmZlcmVudCBjb21wb3VuZCBub2RlcyBpbiBhIGhpZXJhcmNoaWNhbCBncmFwaC4gU2V0dGluZyBhIG5vZGUncyBoaWVyYXJjaHkgaGFuZGxpbmcgdG8gYElOQ0xVREVfQ0hJTERSRU5gIHdpbGwgbGF5IG91dCB0aGF0IG5vZGUgYW5kIGFsbCBvZiBpdHMgZGVzY2VuZGFudHMgaW4gYSBzaW5nbGUgbGF5b3V0IHJ1biwgdW50aWwgYSBkZXNjZW5kYW50IGlzIGVuY291bnRlcmVkIHdoaWNoIGhhcyBpdHMgaGllcmFyY2h5IGhhbmRsaW5nIHNldCB0byBgU0VQQVJBVEVfQ0hJTERSRU5gLiBJbiBnZW5lcmFsLCBgU0VQQVJBVEVfQ0hJTERSRU5gIHdpbGwgZW5zdXJlIHRoYXQgYSBuZXcgbGF5b3V0IHJ1biBpcyB0cmlnZ2VyZWQgZm9yIGEgbm9kZSB3aXRoIHRoYXQgc2V0dGluZy4gSW5jbHVkaW5nIG11bHRpcGxlIGxldmVscyBvZiBoaWVyYXJjaHkgaW4gYSBzaW5nbGUgbGF5b3V0IHJ1biBtYXkgYWxsb3cgY3Jvc3MtaGllcmFyY2hpY2FsIGVkZ2VzIHRvIGJlIGxhaWQgb3V0IHByb3Blcmx5LiBJZiB0aGUgcm9vdCBub2RlIGlzIHNldCB0byBgSU5IRVJJVGAgKG9yIG5vdCBzZXQgYXQgYWxsKSwgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgYFNFUEFSQVRFX0NISUxEUkVOYC4iKSx1TmUpLHBzKSxZTmUpLHJzKFBuLGhlKGxlKHhnLDEpLGl0LDE3MCwwLFtoYV0pKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsWHcpLCIiKSwiUGFkZGluZyIpLCJUaGUgcGFkZGluZyB0byBiZSBsZWZ0IHRvIGEgcGFyZW50IGVsZW1lbnQncyBib3JkZXIgd2hlbiBwbGFjaW5nIGNoaWxkIGVsZW1lbnRzLiBUaGlzIGNhbiBhbHNvIHNlcnZlIGFzIGFuIG91dHB1dCBvcHRpb24gb2YgYSBsYXlvdXQgYWxnb3JpdGhtIGlmIG5vZGUgc2l6ZSBjYWxjdWxhdGlvbiBpcyBzZXR1cCBhcHByb3ByaWF0ZWx5LiIpLHZOZSksWDEpLHdBZSkscnMoUG4saGUobGUoeGcsMSksaXQsMTcwLDAsW2hhXSkpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxoTCksIiIpLCJJbnRlcmFjdGl2ZSIpLCJXaGV0aGVyIHRoZSBhbGdvcml0aG0gc2hvdWxkIGJlIHJ1biBpbiBpbnRlcmFjdGl2ZSBtb2RlIGZvciB0aGUgY29udGVudCBvZiBhIHBhcmVudCBub2RlLiBXaGF0IHRoaXMgbWVhbnMgZXhhY3RseSBkZXBlbmRzIG9uIGhvdyB0aGUgc3BlY2lmaWMgYWxnb3JpdGhtIGludGVycHJldHMgdGhpcyBvcHRpb24uIFVzdWFsbHkgaW4gdGhlIGludGVyYWN0aXZlIG1vZGUgYWxnb3JpdGhtcyB0cnkgdG8gbW9kaWZ5IHRoZSBjdXJyZW50IGxheW91dCBhcyBsaXR0bGUgYXMgcG9zc2libGUuIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxBRyksIiIpLCJpbnRlcmFjdGl2ZSBMYXlvdXQiKSwiV2hldGhlciB0aGUgZ3JhcGggc2hvdWxkIGJlIGNoYW5nZWFibGUgaW50ZXJhY3RpdmVseSBhbmQgYnkgc2V0dGluZyBjb25zdHJhaW50cyIpLCExKSx5YSksTnMpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsZkwpLCIiKSwiT21pdCBOb2RlIE1pY3JvIExheW91dCIpLCJOb2RlIG1pY3JvIGxheW91dCBjb21wcmlzZXMgdGhlIGNvbXB1dGF0aW9uIG9mIG5vZGUgZGltZW5zaW9ucyAoaWYgcmVxdWVzdGVkKSwgdGhlIHBsYWNlbWVudCBvZiBwb3J0cyBhbmQgdGhlaXIgbGFiZWxzLCBhbmQgdGhlIHBsYWNlbWVudCBvZiBub2RlIGxhYmVscy4gVGhlIGZ1bmN0aW9uYWxpdHkgaXMgaW1wbGVtZW50ZWQgaW5kZXBlbmRlbnQgb2YgYW55IHNwZWNpZmljIGxheW91dCBhbGdvcml0aG0gYW5kIHNob3VsZG4ndCBoYXZlIGFueSBuZWdhdGl2ZSBpbXBhY3Qgb24gdGhlIGxheW91dCBhbGdvcml0aG0ncyBwZXJmb3JtYW5jZSBpdHNlbGYuIFlldCwgaWYgYW55IHVuZm9yZXNlZW4gYmVoYXZpb3Igb2NjdXJzLCB0aGlzIG9wdGlvbiBhbGxvd3MgdG8gZGVhY3RpdmF0ZSB0aGUgbWljcm8gbGF5b3V0LiIpLCExKSx5YSksTnMpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsTmhlKSwiIiksIlBvcnQgQ29uc3RyYWludHMiKSwiRGVmaW5lcyBjb25zdHJhaW50cyBvZiB0aGUgcG9zaXRpb24gb2YgdGhlIHBvcnRzIG9mIGEgbm9kZS4iKSxFTmUpLHBzKSxKTmUpLHVuKGhhKSkpKSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsX0cpLCIiKSwiUG9zaXRpb24iKSwiVGhlIHBvc2l0aW9uIG9mIGEgbm9kZSwgcG9ydCwgb3IgbGFiZWwuIFRoaXMgaXMgdXNlZCBieSB0aGUgJ0ZpeGVkIExheW91dCcgYWxnb3JpdGhtIHRvIHNwZWNpZnkgYSBwcmUtZGVmaW5lZCBwb3NpdGlvbi4iKSxYMSksRWEpLHJzKGhhLGhlKGxlKHhnLDEpLGl0LDE3MCwwLFt5dixTMl0pKSkpKSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsTlApLCIiKSwiUHJpb3JpdHkiKSwiRGVmaW5lcyB0aGUgcHJpb3JpdHkgb2YgYW4gb2JqZWN0OyBpdHMgbWVhbmluZyBkZXBlbmRzIG9uIHRoZSBzcGVjaWZpYyBsYXlvdXQgYWxnb3JpdGhtIGFuZCB0aGUgY29udGV4dCB3aGVyZSBpdCBpcyB1c2VkLiIpLFRjKSxybykscnMoaGEsaGUobGUoeGcsMSksaXQsMTcwLDAsW3pkXSkpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKFF0KGVuKEp0KFp0KG5ldyBVdCxvRyksIiIpLCJSYW5kb21pemF0aW9uIFNlZWQiKSwiU2VlZCB1c2VkIGZvciBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3JzIHRvIGNvbnRyb2wgdGhlIGxheW91dCBhbGdvcml0aG0uIElmIHRoZSB2YWx1ZSBpcyAwLCB0aGUgc2VlZCBzaGFsbCBiZSBkZXRlcm1pbmVkIHBzZXVkby1yYW5kb21seSAoZS5nLiBmcm9tIHRoZSBzeXN0ZW0gdGltZSkuIiksVGMpLHJvKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LGxMKSwiIiksIlNlcGFyYXRlIENvbm5lY3RlZCBDb21wb25lbnRzIiksIldoZXRoZXIgZWFjaCBjb25uZWN0ZWQgY29tcG9uZW50IHNob3VsZCBiZSBwcm9jZXNzZWQgc2VwYXJhdGVseS4iKSx5YSksTnMpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsWlRlKSwiIiksIkp1bmN0aW9uIFBvaW50cyIpLCJUaGlzIG9wdGlvbiBpcyBub3QgdXNlZCBhcyBvcHRpb24sIGJ1dCBhcyBvdXRwdXQgb2YgdGhlIGxheW91dCBhbGdvcml0aG1zLiBJdCBpcyBhdHRhY2hlZCB0byBlZGdlcyBhbmQgZGV0ZXJtaW5lcyB0aGUgcG9pbnRzIHdoZXJlIGp1bmN0aW9uIHN5bWJvbHMgc2hvdWxkIGJlIGRyYXduIGluIG9yZGVyIHRvIHJlcHJlc2VudCBoeXBlcmVkZ2VzIHdpdGggb3J0aG9nb25hbCByb3V0aW5nLiBXaGV0aGVyIHN1Y2ggcG9pbnRzIGFyZSBjb21wdXRlZCBkZXBlbmRzIG9uIHRoZSBjaG9zZW4gbGF5b3V0IGFsZ29yaXRobSBhbmQgZWRnZSByb3V0aW5nIHN0eWxlLiBUaGUgcG9pbnRzIGFyZSBwdXQgaW50byB0aGUgdmVjdG9yIGNoYWluIHdpdGggbm8gc3BlY2lmaWMgb3JkZXIuIiksbE5lKSxYMSksR09lKSx1bih6ZCkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LG5DZSksIiIpLCJDb21tZW50IEJveCIpLCJXaGV0aGVyIHRoZSBub2RlIHNob3VsZCBiZSByZWdhcmRlZCBhcyBhIGNvbW1lbnQgYm94IGluc3RlYWQgb2YgYSByZWd1bGFyIG5vZGUuIEluIHRoYXQgY2FzZSBpdHMgcGxhY2VtZW50IHNob3VsZCBiZSBzaW1pbGFyIHRvIGhvdyBsYWJlbHMgYXJlIGhhbmRsZWQuIEFueSBlZGdlcyBpbmNpZGVudCB0byBhIGNvbW1lbnQgYm94IHNwZWNpZnkgdG8gd2hpY2ggZ3JhcGggZWxlbWVudHMgdGhlIGNvbW1lbnQgaXMgcmVsYXRlZC4iKSwhMSkseWEpLE5zKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHJDZSksIiIpLCJIeXBlcm5vZGUiKSwiV2hldGhlciB0aGUgbm9kZSBzaG91bGQgYmUgaGFuZGxlZCBhcyBhIGh5cGVybm9kZS4iKSwhMSkseWEpLE5zKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LHNPbiksIiIpLCJMYWJlbCBNYW5hZ2VyIiksIkxhYmVsIG1hbmFnZXJzIGNhbiBzaG9ydGVuIGxhYmVscyB1cG9uIGEgbGF5b3V0IGFsZ29yaXRobSdzIHJlcXVlc3QuIiksWDEpLEZPbikscnMoUG4saGUobGUoeGcsMSksaXQsMTcwLDAsW1MyXSkpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxzQ2UpLCIiKSwiTWFyZ2lucyIpLCJNYXJnaW5zIGRlZmluZSBhZGRpdGlvbmFsIHNwYWNlIGFyb3VuZCB0aGUgYWN0dWFsIGJvdW5kcyBvZiBhIGdyYXBoIGVsZW1lbnQuIEZvciBpbnN0YW5jZSwgcG9ydHMgb3IgbGFiZWxzIGJlaW5nIHBsYWNlZCBvbiB0aGUgb3V0c2lkZSBvZiBhIG5vZGUncyBib3JkZXIgbWlnaHQgaW50cm9kdWNlIHN1Y2ggYSBtYXJnaW4uIFRoZSBtYXJnaW4gaXMgdXNlZCB0byBndWFyYW50ZWUgbm9uLW92ZXJsYXAgb2Ygb3RoZXIgZ3JhcGggZWxlbWVudHMgd2l0aCB0aG9zZSBwb3J0cyBvciBsYWJlbHMuIiksaE5lKSxYMSksdkFlKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LCRUZSksIiIpLCJObyBMYXlvdXQiKSwiTm8gbGF5b3V0IGlzIGRvbmUgZm9yIHRoZSBhc3NvY2lhdGVkIGVsZW1lbnQuIFRoaXMgaXMgdXNlZCB0byBtYXJrIHBhcnRzIG9mIGEgZGlhZ3JhbSB0byBhdm9pZCB0aGVpciBpbmNsdXNpb24gaW4gdGhlIGxheW91dCBncmFwaCwgb3IgdG8gbWFyayBwYXJ0cyBvZiB0aGUgbGF5b3V0IGdyYXBoIHRvIHByZXZlbnQgbGF5b3V0IGVuZ2luZXMgZnJvbSBwcm9jZXNzaW5nIHRoZW0uIElmIHlvdSB3aXNoIHRvIGV4Y2x1ZGUgdGhlIGNvbnRlbnRzIG9mIGEgY29tcG91bmQgbm9kZSBmcm9tIGF1dG9tYXRpYyBsYXlvdXQsIHdoaWxlIHRoZSBub2RlIGl0c2VsZiBpcyBzdGlsbCBjb25zaWRlcmVkIG9uIGl0cyBvd24gbGF5ZXIsIHVzZSB0aGUgJ0ZpeGVkIExheW91dCcgYWxnb3JpdGhtIGZvciB0aGF0IG5vZGUuIiksITEpLHlhKSxOcykscnMoaGEsaGUobGUoeGcsMSksaXQsMTcwLDAsW3pkLHl2LFMyXSkpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxSeXQpLCIiKSwiU2NhbGUgRmFjdG9yIiksIlRoZSBzY2FsaW5nIGZhY3RvciB0byBiZSBhcHBsaWVkIHRvIHRoZSBjb3JyZXNwb25kaW5nIG5vZGUgaW4gcmVjdXJzaXZlIGxheW91dC4gSXQgY2F1c2VzIHRoZSBjb3JyZXNwb25kaW5nIG5vZGUncyBzaXplIHRvIGJlIGFkanVzdGVkLCBhbmQgaXRzIHBvcnRzIGFuZCBsYWJlbHMgdG8gYmUgc2l6ZWQgYW5kIHBsYWNlZCBhY2NvcmRpbmdseSBhZnRlciB0aGUgbGF5b3V0IG9mIHRoYXQgbm9kZSBoYXMgYmVlbiBkZXRlcm1pbmVkIChhbmQgYmVmb3JlIHRoZSBub2RlIGl0c2VsZiBhbmQgaXRzIHNpYmxpbmdzIGFyZSBhcnJhbmdlZCkuIFRoZSBzY2FsaW5nIGlzIG5vdCByZXZlcnRlZCBhZnRlcndhcmRzLCBzbyB0aGUgcmVzdWx0aW5nIGxheW91dCBncmFwaCBjb250YWlucyB0aGUgYWRqdXN0ZWQgc2l6ZSBhbmQgcG9zaXRpb24gZGF0YS4gVGhpcyBvcHRpb24gaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgaWYgJ0xheW91dCBIaWVyYXJjaHknIGlzIHNldC4iKSwxKSxmbyksdGEpLHVuKGhhKSkpKSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsanl0KSwiIiksIkNoaWxkIEFyZWEgV2lkdGgiKSwiVGhlIHdpZHRoIG9mIHRoZSBhcmVhIG9jY3VwaWVkIGJ5IHRoZSBsYWlkIG91dCBjaGlsZHJlbiBvZiBhIG5vZGUuIiksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LCR5dCksIiIpLCJDaGlsZCBBcmVhIEhlaWdodCIpLCJUaGUgaGVpZ2h0IG9mIHRoZSBhcmVhIG9jY3VwaWVkIGJ5IHRoZSBsYWlkIG91dCBjaGlsZHJlbiBvZiBhIG5vZGUuIiksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFBQKSwiIiksRHl0KSwiVHVybnMgdG9wZG93biBsYXlvdXQgb24gYW5kIG9mZi4gSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgaGllcmFyY2hpY2FsIGxheW91dCB3aWxsIGJlIGNvbXB1dGVkIGZpcnN0IGZvciB0aGUgcm9vdCBub2RlIGFuZCB0aGVuIGZvciBpdHMgY2hpbGRyZW4gcmVjdXJzaXZlbHkuIExheW91dHMgYXJlIHRoZW4gc2NhbGVkIGRvd24gdG8gZml0IHRoZSBhcmVhIHByb3ZpZGVkIGJ5IHRoZWlyIHBhcmVudHMuIEdyYXBocyBtdXN0IGZvbGxvdyBhIGNlcnRhaW4gc3RydWN0dXJlIGZvciB0b3Bkb3duIGxheW91dCB0byB3b3JrIHByb3Blcmx5LiB7QGxpbmsgVG9wZG93bk5vZGVUeXBlcy5QQVJBTExFTF9OT0RFfSBub2RlcyBtdXN0IGhhdmUgY2hpbGRyZW4gb2YgdHlwZSB7QGxpbmsgVG9wZG93bk5vZGVUeXBlcy5ISUVSQVJDSElDQUxfTk9ERX0gYW5kIG11c3QgZGVmaW5lIHtAbGluayB0b3Bkb3duLmhpZXJhcmNoaWNhbE5vZGVXaWR0aH0gYW5kIHtAbGluayB0b3Bkb3duLmhpZXJhcmNoaWNhbE5vZGVBc3BlY3RSYXRpb30gZm9yIHRoZWlyIGNoaWxkcmVuLiBGdXJ0aGVybW9yZSB0aGV5IG5lZWQgdG8gYmUgbGFpZCBvdXQgdXNpbmcgYW4gYWxnb3JpdGhtIHRoYXQgaXMgYSB7QGxpbmsgVG9wZG93bkxheW91dFByb3ZpZGVyfS4gSGllcmFyY2hpY2FsIG5vZGVzIGNhbiBhbHNvIGJlIHBhcmVudHMgb2Ygb3RoZXIgaGllcmFyY2hpY2FsIG5vZGVzIGFuZCBjYW4gb3B0aW9uYWxseSB1c2UgYSB7QGxpbmsgVG9wZG93blNpemVBcHByb3hpbWF0b3J9IHRvIGR5bmFtaWNhbGx5IHNldCBzaXplcyBkdXJpbmcgdG9wZG93biBsYXlvdXQuIEluIHRoaXMgY2FzZSB7QGxpbmsgdG9wZG93bi5oaWVyYXJjaGljYWxOb2RlV2lkdGh9IGFuZCB7QGxpbmsgdG9wZG93bi5oaWVyYXJjaGljYWxOb2RlQXNwZWN0UmF0aW99IHNob3VsZCBiZSBzZXQgb24gdGhlIG5vZGUgaXRzZWxmIHJhdGhlciB0aGFuIHRoZSBwYXJlbnQuIFRoZSB2YWx1ZXMgYXJlIHRoZW4gdXNlZCBieSB0aGUgc2l6ZSBhcHByb3hpbWF0b3IgYXMgYmFzZSB2YWx1ZXMuIEhpZXJhcmNoaWNhbCBub2RlcyByZXF1aXJlIHRoZSBsYXlvdXQgb3B0aW9uIHtAbGluayBub2RlU2l6ZS5maXhlZEdyYXBoU2l6ZX0gdG8gYmUgdHJ1ZSB0byBwcmV2ZW50IHRoZSBhbGdvcml0aG0gdXNlZCB0aGVyZSBmcm9tIHJlc2l6aW5nIHRoZSBoaWVyYXJjaGljYWwgbm9kZS4gVGhpcyBvcHRpb24gaXMgbm90IHN1cHBvcnRlZCBpZiAnSGllcmFyY2h5IEhhbmRsaW5nJyBpcyBzZXQgdG8gJ0lOQ0xVREVfQ0hJTERSRU4nIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLFFzKHQsUFAsUXcsbnVsbCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHp5dCksIiIpLCJBbmltYXRlIiksIldoZXRoZXIgdGhlIHNoaWZ0IGZyb20gdGhlIG9sZCBsYXlvdXQgdG8gdGhlIG5ldyBjb21wdXRlZCBsYXlvdXQgc2hhbGwgYmUgYW5pbWF0ZWQuIiksITApLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxxeXQpLCIiKSwiQW5pbWF0aW9uIFRpbWUgRmFjdG9yIiksIkZhY3RvciBmb3IgY29tcHV0YXRpb24gb2YgYW5pbWF0aW9uIHRpbWUuIFRoZSBoaWdoZXIgdGhlIHZhbHVlLCB0aGUgbG9uZ2VyIHRoZSBhbmltYXRpb24gdGltZS4gSWYgdGhlIHZhbHVlIGlzIDAsIHRoZSByZXN1bHRpbmcgdGltZSBpcyBhbHdheXMgZXF1YWwgdG8gdGhlIG1pbmltdW0gZGVmaW5lZCBieSAnTWluaW1hbCBBbmltYXRpb24gVGltZScuIikscHQoMTAwKSksVGMpLHJvKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEh5dCksIiIpLCJMYXlvdXQgQW5jZXN0b3JzIiksIldoZXRoZXIgdGhlIGhpZXJhcmNoeSBsZXZlbHMgb24gdGhlIHBhdGggZnJvbSB0aGUgc2VsZWN0ZWQgZWxlbWVudCB0byB0aGUgcm9vdCBvZiB0aGUgZGlhZ3JhbSBzaGFsbCBiZSBpbmNsdWRlZCBpbiB0aGUgbGF5b3V0IHByb2Nlc3MuIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxWeXQpLCIiKSwiTWF4aW1hbCBBbmltYXRpb24gVGltZSIpLCJUaGUgbWF4aW1hbCB0aW1lIGZvciBhbmltYXRpb25zLCBpbiBtaWxsaXNlY29uZHMuIikscHQoNGUzKSksVGMpLHJvKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFV5dCksIiIpLCJNaW5pbWFsIEFuaW1hdGlvbiBUaW1lIiksIlRoZSBtaW5pbWFsIHRpbWUgZm9yIGFuaW1hdGlvbnMsIGluIG1pbGxpc2Vjb25kcy4iKSxwdCg0MDApKSxUYykscm8pLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsR3l0KSwiIiksIlByb2dyZXNzIEJhciIpLCJXaGV0aGVyIGEgcHJvZ3Jlc3MgYmFyIHNoYWxsIGJlIGRpc3BsYXllZCBkdXJpbmcgbGF5b3V0IGNvbXB1dGF0aW9ucy4iKSwhMSkseWEpLE5zKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEt5dCksIiIpLCJWYWxpZGF0ZSBHcmFwaCIpLCJXaGV0aGVyIHRoZSBncmFwaCBzaGFsbCBiZSB2YWxpZGF0ZWQgYmVmb3JlIGFueSBsYXlvdXQgYWxnb3JpdGhtIGlzIGFwcGxpZWQuIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYW5kIGF0IGxlYXN0IG9uZSBlcnJvciBpcyBmb3VuZCwgdGhlIGxheW91dCBwcm9jZXNzIGlzIGFib3J0ZWQgYW5kIGEgbWVzc2FnZSBpcyBzaG93biB0byB0aGUgdXNlci4iKSwhMSkseWEpLE5zKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFd5dCksIiIpLCJWYWxpZGF0ZSBPcHRpb25zIiksIldoZXRoZXIgbGF5b3V0IG9wdGlvbnMgc2hhbGwgYmUgdmFsaWRhdGVkIGJlZm9yZSBhbnkgbGF5b3V0IGFsZ29yaXRobSBpcyBhcHBsaWVkLiBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIGFuZCBhdCBsZWFzdCBvbmUgZXJyb3IgaXMgZm91bmQsIHRoZSBsYXlvdXQgcHJvY2VzcyBpcyBhYm9ydGVkIGFuZCBhIG1lc3NhZ2UgaXMgc2hvd24gdG8gdGhlIHVzZXIuIiksITApLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxZeXQpLCIiKSwiWm9vbSB0byBGaXQiKSwiV2hldGhlciB0aGUgem9vbSBsZXZlbCBzaGFsbCBiZSBzZXQgdG8gdmlldyB0aGUgd2hvbGUgZGlhZ3JhbSBhZnRlciBsYXlvdXQuIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxlU2UpLCJib3giKSwiQm94IExheW91dCBNb2RlIiksIkNvbmZpZ3VyZXMgdGhlIHBhY2tpbmcgbW9kZSB1c2VkIGJ5IHRoZSB7QGxpbmsgQm94TGF5b3V0UHJvdmlkZXJ9LiBJZiBTSU1QTEUgaXMgbm90IHJlcXVpcmVkIChuZWl0aGVyIHByaW9yaXRpZXMgYXJlIHVzZWQgbm9yIHRoZSBpbnRlcmFjdGl2ZSBtb2RlKSwgR1JPVVBfREVDIGNhbiBpbXByb3ZlIHRoZSBwYWNraW5nIGFuZCBkZWNyZWFzZSB0aGUgYXJlYS4gR1JPVVBfTUlYRUQgYW5kIEdST1VQX0lOQyBtYXksIGluIHZlcnkgc3BlY2lmaWMgc2NlbmFyaW9zLCB3b3JrIGJldHRlci4iKSx0TmUpLHBzKSxjUGUpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsTFRlKSxVMSksIkNvbW1lbnQgQ29tbWVudCBTcGFjaW5nIiksIlNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gYSBjb21tZW50IGJveCBhbmQgb3RoZXIgY29tbWVudCBib3hlcyBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgbm9kZS4gVGhlIHNwYWNlIGxlZnQgYmV0d2VlbiBjb21tZW50IGJveGVzIG9mIGRpZmZlcmVudCBub2RlcyBpcyBjb250cm9sbGVkIGJ5IHRoZSBub2RlLW5vZGUgc3BhY2luZy4iKSwxMCksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LE1UZSksVTEpLCJDb21tZW50IE5vZGUgU3BhY2luZyIpLCJTcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIGEgbm9kZSBhbmQgaXRzIGNvbm5lY3RlZCBjb21tZW50IGJveGVzLiBUaGUgc3BhY2UgbGVmdCBiZXR3ZWVuIGEgbm9kZSBhbmQgdGhlIGNvbW1lbnRzIG9mIGFub3RoZXIgbm9kZSBpcyBjb250cm9sbGVkIGJ5IHRoZSBub2RlLW5vZGUgc3BhY2luZy4iKSwxMCksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LF9oZSksVTEpLCJDb21wb25lbnRzIFNwYWNpbmciKSwiU3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBwYWlycyBvZiBjb25uZWN0ZWQgY29tcG9uZW50cy4gVGhpcyBvcHRpb24gaXMgb25seSByZWxldmFudCBpZiAnc2VwYXJhdGVDb25uZWN0ZWRDb21wb25lbnRzJyBpcyBhY3RpdmF0ZWQuIiksMjApLGZvKSx0YSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxEVGUpLFUxKSwiRWRnZSBTcGFjaW5nIiksIlNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gYW55IHR3byBlZGdlcy4gTm90ZSB0aGF0IHdoaWxlIHRoaXMgY2FuIHNvbWV3aGF0IGVhc2lseSBiZSBzYXRpc2ZpZWQgZm9yIHRoZSBzZWdtZW50cyBvZiBvcnRob2dvbmFsbHkgZHJhd24gZWRnZXMsIGl0IGlzIGhhcmRlciBmb3IgZ2VuZXJhbCBwb2x5bGluZXMgb3Igc3BsaW5lcy4iKSwxMCksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LE9oZSksVTEpLCJFZGdlIExhYmVsIFNwYWNpbmciKSwiVGhlIG1pbmltYWwgZGlzdGFuY2UgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gYSBsYWJlbCBhbmQgdGhlIGVkZ2UgaXQgaXMgYXNzb2NpYXRlZCB3aXRoLiBOb3RlIHRoYXQgdGhlIHBsYWNlbWVudCBvZiBhIGxhYmVsIGlzIGluZmx1ZW5jZWQgYnkgdGhlICdlZGdlbGFiZWxzLnBsYWNlbWVudCcgb3B0aW9uLiIpLDIpLGZvKSx0YSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxkZmUpLFUxKSwiRWRnZSBOb2RlIFNwYWNpbmciKSwiU3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBub2RlcyBhbmQgZWRnZXMuIiksMTApLGZvKSx0YSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxJVGUpLFUxKSwiTGFiZWwgU3BhY2luZyIpLCJEZXRlcm1pbmVzIHRoZSBhbW91bnQgb2Ygc3BhY2UgdG8gYmUgbGVmdCBiZXR3ZWVuIHR3byBsYWJlbHMgb2YgdGhlIHNhbWUgZ3JhcGggZWxlbWVudC4iKSwwKSxmbyksdGEpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsUFRlKSxVMSksIkxhYmVsIE5vZGUgU3BhY2luZyIpLCJTcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIGxhYmVscyBhbmQgdGhlIGJvcmRlciBvZiBub2RlIHRoZXkgYXJlIGFzc29jaWF0ZWQgd2l0aC4gTm90ZSB0aGF0IHRoZSBwbGFjZW1lbnQgb2YgYSBsYWJlbCBpcyBpbmZsdWVuY2VkIGJ5IHRoZSAnbm9kZWxhYmVscy5wbGFjZW1lbnQnIG9wdGlvbi4iKSw1KSxmbyksdGEpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsT1RlKSxVMSksIkhvcml6b250YWwgc3BhY2luZyBiZXR3ZWVuIExhYmVsIGFuZCBQb3J0IiksIkhvcml6b250YWwgc3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBsYWJlbHMgYW5kIHRoZSBwb3J0cyB0aGV5IGFyZSBhc3NvY2lhdGVkIHdpdGguIE5vdGUgdGhhdCB0aGUgcGxhY2VtZW50IG9mIGEgbGFiZWwgaXMgaW5mbHVlbmNlZCBieSB0aGUgJ3BvcnRsYWJlbHMucGxhY2VtZW50JyBvcHRpb24uIiksMSksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LE5UZSksVTEpLCJWZXJ0aWNhbCBzcGFjaW5nIGJldHdlZW4gTGFiZWwgYW5kIFBvcnQiKSwiVmVydGljYWwgc3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBsYWJlbHMgYW5kIHRoZSBwb3J0cyB0aGV5IGFyZSBhc3NvY2lhdGVkIHdpdGguIE5vdGUgdGhhdCB0aGUgcGxhY2VtZW50IG9mIGEgbGFiZWwgaXMgaW5mbHVlbmNlZCBieSB0aGUgJ3BvcnRsYWJlbHMucGxhY2VtZW50JyBvcHRpb24uIiksMSksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEp5KSxVMSksIk5vZGUgU3BhY2luZyIpLCJUaGUgbWluaW1hbCBkaXN0YW5jZSB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBlYWNoIHR3byBub2Rlcy4iKSwyMCksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEJUZSksVTEpLCJOb2RlIFNlbGYgTG9vcCBTcGFjaW5nIiksIlNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gYSBub2RlIGFuZCBpdHMgc2VsZiBsb29wcy4iKSwxMCksZm8pLHRhKSx1bihQbikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEZUZSksVTEpLCJQb3J0IFNwYWNpbmciKSwiU3BhY2luZyBiZXR3ZWVuIHBhaXJzIG9mIHBvcnRzIG9mIHRoZSBzYW1lIG5vZGUuIiksMTApLGZvKSx0YSkscnMoUG4saGUobGUoeGcsMSksaXQsMTcwLDAsW2hhXSkpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKFF0KGVuKEp0KFp0KG5ldyBVdCxSVGUpLFUxKSwiSW5kaXZpZHVhbCBTcGFjaW5nIiksIkFsbG93cyB0byBzcGVjaWZ5IGluZGl2aWR1YWwgc3BhY2luZyB2YWx1ZXMgZm9yIGdyYXBoIGVsZW1lbnRzIHRoYXQgc2hhbGwgYmUgZGlmZmVyZW50IGZyb20gdGhlIHZhbHVlIHNwZWNpZmllZCBmb3IgdGhlIGVsZW1lbnQncyBwYXJlbnQuIiksWDEpLGdfdCkscnMoaGEsaGUobGUoeGcsMSksaXQsMTcwLDAsW3pkLHl2LFMyXSkpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxhQ2UpLFUxKSwiQWRkaXRpb25hbCBQb3J0IFNwYWNlIiksIkFkZGl0aW9uYWwgc3BhY2UgYXJvdW5kIHRoZSBzZXRzIG9mIHBvcnRzIG9uIGVhY2ggbm9kZSBzaWRlLiBGb3IgZWFjaCBzaWRlIG9mIGEgbm9kZSwgdGhpcyBvcHRpb24gY2FuIHJlc2VydmUgYWRkaXRpb25hbCBzcGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb3J0cyBvbiBlYWNoIHNpZGUuIEZvciBleGFtcGxlLCBhIHRvcCBzcGFjaW5nIG9mIDIwIG1ha2VzIHN1cmUgdGhhdCB0aGUgZmlyc3QgcG9ydCBvbiB0aGUgd2VzdGVybiBhbmQgZWFzdGVybiBzaWRlIGlzIDIwIHVuaXRzIGF3YXkgZnJvbSB0aGUgbm9ydGhlcm4gYm9yZGVyLiIpLE5OZSksWDEpLHZBZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKFF0KGVuKEp0KFp0KG5ldyBVdCxiZmUpLEp5dCksIkxheW91dCBQYXJ0aXRpb24iKSwiUGFydGl0aW9uIHRvIHdoaWNoIHRoZSBub2RlIGJlbG9uZ3MuIFRoaXMgcmVxdWlyZXMgTGF5b3V0IFBhcnRpdGlvbmluZyB0byBiZSBhY3RpdmUuIE5vZGVzIHdpdGggbG93ZXIgcGFydGl0aW9uIElEcyB3aWxsIGFwcGVhciB0byB0aGUgbGVmdCBvZiBub2RlcyB3aXRoIGhpZ2hlciBwYXJ0aXRpb24gSURzIChhc3N1bWluZyBhIGxlZnQtdG8tcmlnaHQgbGF5b3V0IGRpcmVjdGlvbikuIiksVGMpLHJvKSxycyhQbixoZShsZSh4ZywxKSxpdCwxNzAsMCxbaGFdKSkpKSksUXModCxiZmUscGZlLEJTdCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHBmZSksSnl0KSwiTGF5b3V0IFBhcnRpdGlvbmluZyIpLCJXaGV0aGVyIHRvIGFjdGl2YXRlIHBhcnRpdGlvbmVkIGxheW91dC4gVGhpcyB3aWxsIGFsbG93IHRvIGdyb3VwIG5vZGVzIHRocm91Z2ggdGhlIExheW91dCBQYXJ0aXRpb24gb3B0aW9uLiBhIHBhaXIgb2Ygbm9kZXMgd2l0aCBkaWZmZXJlbnQgcGFydGl0aW9uIGluZGljZXMgaXMgdGhlbiBwbGFjZWQgc3VjaCB0aGF0IHRoZSBub2RlIHdpdGggbG93ZXIgaW5kZXggaXMgcGxhY2VkIHRvIHRoZSBsZWZ0IG9mIHRoZSBvdGhlciBub2RlICh3aXRoIGxlZnQtdG8tcmlnaHQgbGF5b3V0IGRpcmVjdGlvbikuIERlcGVuZGluZyBvbiB0aGUgbGF5b3V0IGFsZ29yaXRobSwgdGhpcyBtYXkgb25seSBiZSBndWFyYW50ZWVkIHRvIHdvcmsgaWYgYWxsIG5vZGVzIGhhdmUgYSBsYXlvdXQgcGFydGl0aW9uIGNvbmZpZ3VyZWQsIG9yIGF0IGxlYXN0IGlmIGVkZ2VzIHRoYXQgY3Jvc3MgcGFydGl0aW9ucyBhcmUgbm90IHBhcnQgb2YgYSBwYXJ0aXRpb24tY3Jvc3NpbmcgY3ljbGUuIiksd05lKSx5YSksTnMpLHVuKFBuKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsVVRlKSxaeXQpLCJOb2RlIExhYmVsIFBhZGRpbmciKSwiRGVmaW5lIHBhZGRpbmcgZm9yIG5vZGUgbGFiZWxzIHRoYXQgYXJlIHBsYWNlZCBpbnNpZGUgb2YgYSBub2RlLiIpLGROZSksWDEpLHdBZSksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxmVCksWnl0KSwiTm9kZSBMYWJlbCBQbGFjZW1lbnQiKSwiSGludHMgZm9yIHdoZXJlIG5vZGUgbGFiZWxzIGFyZSB0byBiZSBwbGFjZWQ7IGlmIGVtcHR5LCB0aGUgbm9kZSBsYWJlbCdzIHBvc2l0aW9uIGlzIG5vdCBtb2RpZmllZC4iKSxnTmUpLHQ5KSxLbykscnMoaGEsaGUobGUoeGcsMSksaXQsMTcwLDAsW1MyXSkpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxXVGUpLFJHKSwiUG9ydCBBbGlnbm1lbnQiKSwiRGVmaW5lcyB0aGUgZGVmYXVsdCBwb3J0IGRpc3RyaWJ1dGlvbiBmb3IgYSBub2RlLiBNYXkgYmUgb3ZlcnJpZGRlbiBmb3IgZWFjaCBzaWRlIGluZGl2aWR1YWxseS4iKSx4TmUpLHBzKSxPTSksdW4oaGEpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKFF0KGVuKEp0KFp0KG5ldyBVdCxZVGUpLFJHKSwiUG9ydCBBbGlnbm1lbnQgKE5vcnRoKSIpLCJEZWZpbmVzIGhvdyBwb3J0cyBvbiB0aGUgbm9ydGhlcm4gc2lkZSBhcmUgcGxhY2VkLCBvdmVycmlkaW5nIHRoZSBub2RlJ3MgZ2VuZXJhbCBwb3J0IGFsaWdubWVudC4iKSxwcyksT00pLHVuKGhhKSkpKSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsWFRlKSxSRyksIlBvcnQgQWxpZ25tZW50IChTb3V0aCkiKSwiRGVmaW5lcyBob3cgcG9ydHMgb24gdGhlIHNvdXRoZXJuIHNpZGUgYXJlIHBsYWNlZCwgb3ZlcnJpZGluZyB0aGUgbm9kZSdzIGdlbmVyYWwgcG9ydCBhbGlnbm1lbnQuIikscHMpLE9NKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LFFUZSksUkcpLCJQb3J0IEFsaWdubWVudCAoV2VzdCkiKSwiRGVmaW5lcyBob3cgcG9ydHMgb24gdGhlIHdlc3Rlcm4gc2lkZSBhcmUgcGxhY2VkLCBvdmVycmlkaW5nIHRoZSBub2RlJ3MgZ2VuZXJhbCBwb3J0IGFsaWdubWVudC4iKSxwcyksT00pLHVuKGhhKSkpKSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsSlRlKSxSRyksIlBvcnQgQWxpZ25tZW50IChFYXN0KSIpLCJEZWZpbmVzIGhvdyBwb3J0cyBvbiB0aGUgZWFzdGVybiBzaWRlIGFyZSBwbGFjZWQsIG92ZXJyaWRpbmcgdGhlIG5vZGUncyBnZW5lcmFsIHBvcnQgYWxpZ25tZW50LiIpLHBzKSxPTSksdW4oaGEpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCx4NiksUmZlKSwiTm9kZSBTaXplIENvbnN0cmFpbnRzIiksIldoYXQgc2hvdWxkIGJlIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGNhbGN1bGF0aW5nIGEgbm9kZSdzIHNpemUuIEVtcHR5IHNpemUgY29uc3RyYWludHMgc3BlY2lmeSB0aGF0IGEgbm9kZSdzIHNpemUgaXMgYWxyZWFkeSBmaXhlZCBhbmQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLiIpLHBOZSksdDkpLEJNKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LE54KSxSZmUpLCJOb2RlIFNpemUgT3B0aW9ucyIpLCJPcHRpb25zIG1vZGlmeWluZyB0aGUgYmVoYXZpb3Igb2YgdGhlIHNpemUgY29uc3RyYWludHMgc2V0IG9uIGEgbm9kZS4gRWFjaCBtZW1iZXIgb2YgdGhlIHNldCBzcGVjaWZpZXMgc29tZXRoaW5nIHRoYXQgc2hvdWxkIGJlIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGNhbGN1bGF0aW5nIG5vZGUgc2l6ZXMuIFRoZSBlbXB0eSBzZXQgY29ycmVzcG9uZHMgdG8gbm8gZnVydGhlciBtb2RpZmljYXRpb25zLiIpLG1OZSksdDkpLGVQZSksdW4oaGEpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxQeCksUmZlKSwiTm9kZSBTaXplIE1pbmltdW0iKSwiVGhlIG1pbmltYWwgc2l6ZSB0byB3aGljaCBhIG5vZGUgY2FuIGJlIHJlZHVjZWQuIiksYk5lKSxYMSksRWEpLHVuKGhhKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsaFQpLFJmZSksIkZpeGVkIEdyYXBoIFNpemUiKSwiQnkgZGVmYXVsdCwgdGhlIGZpeGVkIGxheW91dCBwcm92aWRlciB3aWxsIGVubGFyZ2UgYSBncmFwaCB1bnRpbCBpdCBpcyBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiBpdHMgY2hpbGRyZW4uIElmIHRoaXMgb3B0aW9uIGlzIHNldCwgaXQgd29uJ3QgZG8gc28uIiksITEpLHlhKSxOcyksdW4oUG4pKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxlQ2UpLGZmZSksIkVkZ2UgTGFiZWwgUGxhY2VtZW50IiksIkdpdmVzIGEgaGludCBvbiB3aGVyZSB0byBwdXQgZWRnZSBsYWJlbHMuIiksaU5lKSxwcyksRk5lKSx1bihTMikpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LGNHKSxmZmUpLCJJbmxpbmUgRWRnZSBMYWJlbHMiKSwiSWYgdHJ1ZSwgYW4gZWRnZSBsYWJlbCBpcyBwbGFjZWQgZGlyZWN0bHkgb24gaXRzIGVkZ2UuIE1heSBvbmx5IGFwcGx5IHRvIGNlbnRlciBlZGdlIGxhYmVscy4gVGhpcyBraW5kIG9mIGxhYmVsIHBsYWNlbWVudCBpcyBvbmx5IGFkdmlzYWJsZSBpZiB0aGUgbGFiZWwncyByZW5kZXJpbmcgaXMgc3VjaCB0aGF0IGl0IGlzIG5vdCBjcm9zc2VkIGJ5IGl0cyBlZGdlIGFuZCB0aHVzIHN0YXlzIGxlZ2libGUuIiksITEpLHlhKSxOcyksdW4oUzIpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKFF0KGVuKEp0KFp0KG5ldyBVdCxhT24pLCJmb250IiksIkZvbnQgTmFtZSIpLCJGb250IG5hbWUgdXNlZCBmb3IgYSBsYWJlbC4iKSxKNiksenQpLHVuKFMyKSkpKSxzbih0LG5ldyBYdChubih0bihybihRdChlbihKdChadChuZXcgVXQsWHl0KSwiZm9udCIpLCJGb250IFNpemUiKSwiRm9udCBzaXplIHVzZWQgZm9yIGEgbGFiZWwuIiksVGMpLHJvKSx1bihTMikpKSksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LGlDZSksamZlKSwiUG9ydCBBbmNob3IgT2Zmc2V0IiksIlRoZSBvZmZzZXQgdG8gdGhlIHBvcnQgcG9zaXRpb24gd2hlcmUgY29ubmVjdGlvbnMgc2hhbGwgYmUgYXR0YWNoZWQuIiksWDEpLEVhKSx1bih5dikpKSksc24odCxuZXcgWHQobm4odG4ocm4oUXQoZW4oSnQoWnQobmV3IFV0LHRDZSksamZlKSwiUG9ydCBJbmRleCIpLCJUaGUgaW5kZXggb2YgYSBwb3J0IGluIHRoZSBmaXhlZCBvcmRlciBhcm91bmQgYSBub2RlLiBUaGUgb3JkZXIgaXMgYXNzdW1lZCBhcyBjbG9ja3dpc2UsIHN0YXJ0aW5nIHdpdGggdGhlIGxlZnRtb3N0IHBvcnQgb24gdGhlIHRvcCBzaWRlLiBUaGlzIG9wdGlvbiBtdXN0IGJlIHNldCBpZiAnUG9ydCBDb25zdHJhaW50cycgaXMgc2V0IHRvIEZJWEVEX09SREVSIGFuZCBubyBzcGVjaWZpYyBwb3NpdGlvbnMgYXJlIGdpdmVuIGZvciB0aGUgcG9ydHMuIEFkZGl0aW9uYWxseSwgdGhlIG9wdGlvbiAnUG9ydCBTaWRlJyBtdXN0IGJlIGRlZmluZWQgaW4gdGhpcyBjYXNlLiIpLFRjKSxybyksdW4oeXYpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCx6VGUpLGpmZSksIlBvcnQgU2lkZSIpLCJUaGUgc2lkZSBvZiBhIG5vZGUgb24gd2hpY2ggYSBwb3J0IGlzIHNpdHVhdGVkLiBUaGlzIG9wdGlvbiBtdXN0IGJlIHNldCBpZiAnUG9ydCBDb25zdHJhaW50cycgaXMgc2V0IHRvIEZJWEVEX1NJREUgb3IgRklYRURfT1JERVIgYW5kIG5vIHNwZWNpZmljIHBvc2l0aW9ucyBhcmUgZ2l2ZW4gZm9yIHRoZSBwb3J0cy4iKSxTTmUpLHBzKSxPbyksdW4oeXYpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKFF0KGVuKEp0KFp0KG5ldyBVdCxqVGUpLGpmZSksIlBvcnQgQm9yZGVyIE9mZnNldCIpLCJUaGUgb2Zmc2V0IG9mIHBvcnRzIG9uIHRoZSBub2RlIGJvcmRlci4gV2l0aCBhIHBvc2l0aXZlIG9mZnNldCB0aGUgcG9ydCBpcyBtb3ZlZCBvdXRzaWRlIG9mIHRoZSBub2RlLCB3aGlsZSB3aXRoIGEgbmVnYXRpdmUgb2Zmc2V0IHRoZSBwb3J0IGlzIG1vdmVkIHRvd2FyZHMgdGhlIGluc2lkZS4gQW4gb2Zmc2V0IG9mIDAgbWVhbnMgdGhhdCB0aGUgcG9ydCBpcyBwbGFjZWQgZGlyZWN0bHkgb24gdGhlIG5vZGUgYm9yZGVyLCBpLmUuIGlmIHRoZSBwb3J0IHNpZGUgaXMgbm9ydGgsIHRoZSBwb3J0J3Mgc291dGggYm9yZGVyIHRvdWNoZXMgdGhlIG5vZGVzJ3Mgbm9ydGggYm9yZGVyOyBpZiB0aGUgcG9ydCBzaWRlIGlzIGVhc3QsIHRoZSBwb3J0J3Mgd2VzdCBib3JkZXIgdG91Y2hlcyB0aGUgbm9kZXMncyBlYXN0IGJvcmRlcjsgaWYgdGhlIHBvcnQgc2lkZSBpcyBzb3V0aCwgdGhlIHBvcnQncyBub3J0aCBib3JkZXIgdG91Y2hlcyB0aGUgbm9kZSdzIHNvdXRoIGJvcmRlcjsgaWYgdGhlIHBvcnQgc2lkZSBpcyB3ZXN0LCB0aGUgcG9ydCdzIGVhc3QgYm9yZGVyIHRvdWNoZXMgdGhlIG5vZGUncyB3ZXN0IGJvcmRlci4iKSxmbyksdGEpLHVuKHl2KSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsZFQpLGlTZSksIlBvcnQgTGFiZWwgUGxhY2VtZW50IiksIkRlY2lkZXMgb24gYSBwbGFjZW1lbnQgbWV0aG9kIGZvciBwb3J0IGxhYmVsczsgaWYgZW1wdHksIHRoZSBub2RlIGxhYmVsJ3MgcG9zaXRpb24gaXMgbm90IG1vZGlmaWVkLiIpLFROZSksdDkpLGNZKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEdUZSksaVNlKSwiUG9ydCBMYWJlbHMgTmV4dCB0byBQb3J0IiksIlVzZSAncG9ydExhYmVscy5wbGFjZW1lbnQnOiBORVhUX1RPX1BPUlRfT0ZfUE9TU0lCTEUuIiksITEpLHlhKSxOcyksdW4oaGEpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxLVGUpLGlTZSksIlRyZWF0IFBvcnQgTGFiZWxzIGFzIEdyb3VwIiksIklmIHRoaXMgb3B0aW9uIGlzIHRydWUgKGRlZmF1bHQpLCB0aGUgbGFiZWxzIG9mIGEgcG9ydCB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBncm91cCB3aGVuIGl0IGNvbWVzIHRvIGNlbnRlcmluZyB0aGVtIG5leHQgdG8gdGhlaXIgcG9ydC4gSWYgdGhpcyBvcHRpb24gaXMgZmFsc2UsIG9ubHkgdGhlIGZpcnN0IGxhYmVsIHdpbGwgYmUgY2VudGVyZWQgbmV4dCB0byB0aGUgcG9ydCwgd2l0aCB0aGUgb3RoZXJzIGJlaW5nIHBsYWNlZCBiZWxvdy4gVGhpcyBvbmx5IGFwcGxpZXMgdG8gbGFiZWxzIG9mIGVhc3Rlcm4gYW5kIHdlc3Rlcm4gcG9ydHMgYW5kIHdpbGwgaGF2ZSBubyBlZmZlY3QgaWYgbGFiZWxzIGFyZSBub3QgcGxhY2VkIG5leHQgdG8gdGhlaXIgcG9ydC4iKSwhMCkseWEpLE5zKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEJQKSxLUCksIlRvcGRvd24gU2NhbGUgRmFjdG9yIiksIlRoZSBzY2FsaW5nIGZhY3RvciB0byBiZSBhcHBsaWVkIHRvIHRoZSBub2RlcyBsYWlkIG91dCB3aXRoaW4gdGhlIG5vZGUgaW4gcmVjdXJzaXZlIHRvcGRvd24gbGF5b3V0LiBUaGUgZGlmZmVyZW5jZSB0byAnU2NhbGUgRmFjdG9yJyBpcyB0aGF0IHRoZSBub2RlIGl0c2VsZiBpcyBub3Qgc2NhbGVkLiBUaGlzIHZhbHVlIGhhcyB0byBiZSBzZXQgb24gaGllcmFyY2hpY2FsIG5vZGVzLiIpLDEpLGZvKSx0YSksdW4oUG4pKSkpLFFzKHQsQlAsUXcsVlN0KSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsblNlKSxLUCksIlRvcGRvd24gU2l6ZSBBcHByb3hpbWF0b3IiKSwiVGhlIHNpemUgYXBwcm94aW1hdG9yIHRvIGJlIHVzZWQgdG8gc2V0IHNpemVzIG9mIGhpZXJhcmNoaWNhbCBub2RlcyBkdXJpbmcgdG9wZG93biBsYXlvdXQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIG51bGwsIHdoaWNoIHJlc3VsdHMgaW4gbm9kZXMga2VlcGluZyB3aGF0ZXZlciBzaXplIGlzIGRlZmluZWQgZm9yIHRoZW0gZS5nLiB0aHJvdWdoIHBhcmVudCBwYXJhbGxlbCBub2RlIG9yIGJ5IG1hbnVhbGx5IHNldHRpbmcgdGhlIHNpemUuIiksbnVsbCkscHMpLGdZKSx1bihoYSkpKSksUXModCxuU2UsUXcsVVN0KSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsRlApLEtQKSwiVG9wZG93biBIaWVyYXJjaGljYWwgTm9kZSBXaWR0aCIpLCJUaGUgZml4ZWQgc2l6ZSBvZiBhIGhpZXJhcmNoaWNhbCBub2RlIHdoZW4gdXNpbmcgdG9wZG93biBsYXlvdXQuIElmIHRoaXMgdmFsdWUgaXMgc2V0IG9uIGEgcGFyYWxsZWwgbm9kZSBpdCBhcHBsaWVzIHRvIGl0cyBjaGlsZHJlbiwgd2hlbiBzZXQgb24gYSBoaWVyYXJjaGljYWwgbm9kZSBpdCBhcHBsaWVzIHRvIHRoZSBub2RlIGl0c2VsZi4iKSwxNTApLGZvKSx0YSkscnMoUG4saGUobGUoeGcsMSksaXQsMTcwLDAsW2hhXSkpKSkpLFFzKHQsRlAsUXcsbnVsbCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFJQKSxLUCksIlRvcGRvd24gSGllcmFyY2hpY2FsIE5vZGUgQXNwZWN0IFJhdGlvIiksIlRoZSBmaXhlZCBhc3BlY3QgcmF0aW8gb2YgYSBoaWVyYXJjaGljYWwgbm9kZSB3aGVuIHVzaW5nIHRvcGRvd24gbGF5b3V0LiBEZWZhdWx0IGlzIDEvc3FydCgyKS4gSWYgdGhpcyB2YWx1ZSBpcyBzZXQgb24gYSBwYXJhbGxlbCBub2RlIGl0IGFwcGxpZXMgdG8gaXRzIGNoaWxkcmVuLCB3aGVuIHNldCBvbiBhIGhpZXJhcmNoaWNhbCBub2RlIGl0IGFwcGxpZXMgdG8gdGhlIG5vZGUgaXRzZWxmLiIpLDEuNDE0KSxmbyksdGEpLHJzKFBuLGhlKGxlKHhnLDEpLGl0LDE3MCwwLFtoYV0pKSkpKSxRcyh0LFJQLFF3LG51bGwpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxRdyksS1ApLCJUb3Bkb3duIE5vZGUgVHlwZSIpLCJUaGUgZGlmZmVyZW50IG5vZGUgdHlwZXMgdXNlZCBmb3IgdG9wZG93biBsYXlvdXQuIElmIHRoZSBub2RlIHR5cGUgaXMgc2V0IHRvIHtAbGluayBUb3Bkb3duTm9kZVR5cGVzLlBBUkFMTEVMX05PREV9IHRoZSBhbGdvcml0aG0gbXVzdCBiZSBzZXQgdG8gYSB7QGxpbmsgVG9wZG93bkxheW91dFByb3ZpZGVyfSBzdWNoIGFzIHtAbGluayBUb3Bkb3duUGFja2luZ30uIFRoZSB7QGxpbmsgbm9kZVNpemUuZml4ZWRHcmFwaFNpemV9IG9wdGlvbiBpcyB0ZWNobmljYWxseSBvbmx5IHJlcXVpcmVkIGZvciBoaWVyYXJjaGljYWwgbm9kZXMuIiksbnVsbCkscHMpLG5QZSksdW4oaGEpKSkpLFFzKHQsUXcsaFQsbnVsbCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LHJTZSksS1ApLCJUb3Bkb3duIFNjYWxlIENhcCIpLCJEZXRlcm1pbmVzIHRoZSB1cHBlciBsaW1pdCBmb3IgdGhlIHRvcGRvd24gc2NhbGUgZmFjdG9yLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxLjAgd2hpY2ggZW5zdXJlcyB0aGF0IG5lc3RlZCBjaGlsZHJlbiBuZXZlciBlbmQgdXAgYXBwZWFyaW5nIGxhcmdlciB0aGFuIHRoZWlyIHBhcmVudHMgaW4gdGVybXMgb2YgdW5pdCBzaXplcyBzdWNoIGFzIHRoZSBmb250IHNpemUuIElmIHRoZSBsaW1pdCBpcyBsYXJnZXIsIG5vZGVzIHdpbGwgZnVsbHkgdXRpbGl6ZSB0aGUgYXZhaWxhYmxlIHNwYWNlLCBidXQgaXQgaXMgY291bnRlcmluaXVpdGl2ZSBmb3IgaW5uZXIgbm9kZXMgdG8gaGF2ZSBhIGxhcmdlciBzY2FsZSB0aGFuIG91dGVyIG5vZGVzLiIpLDEpLGZvKSx0YSksdW4oUG4pKSkpLFFzKHQsclNlLFF3LEhTdCksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LEhUZSksZTR0KSwiQWN0aXZhdGUgSW5zaWRlIFNlbGYgTG9vcHMiKSwiV2hldGhlciB0aGlzIG5vZGUgYWxsb3dzIHRvIHJvdXRlIHNlbGYgbG9vcHMgaW5zaWRlIG9mIGl0IGluc3RlYWQgb2YgYXJvdW5kIGl0LiBJZiBzZXQgdG8gdHJ1ZSwgdGhpcyB3aWxsIG1ha2UgdGhlIG5vZGUgYSBjb21wb3VuZCBub2RlIGlmIGl0IGlzbid0IGFscmVhZHksIGFuZCB3aWxsIHJlcXVpcmUgdGhlIGxheW91dCBhbGdvcml0aG0gdG8gc3VwcG9ydCBjb21wb3VuZCBub2RlcyB3aXRoIGhpZXJhcmNoaWNhbCBwb3J0cy4iKSwhMSkseWEpLE5zKSx1bihoYSkpKSksc24odCxuZXcgWHQobm4odG4ocm4oeW4oUXQoZW4oSnQoWnQobmV3IFV0LFZUZSksZTR0KSwiSW5zaWRlIFNlbGYgTG9vcCIpLCJXaGV0aGVyIGEgc2VsZiBsb29wIHNob3VsZCBiZSByb3V0ZWQgaW5zaWRlIGEgbm9kZSBpbnN0ZWFkIG9mIGFyb3VuZCB0aGF0IG5vZGUuIiksITEpLHlhKSxOcyksdW4oemQpKSkpLHNuKHQsbmV3IFh0KG5uKHRuKHJuKHluKFF0KGVuKEp0KFp0KG5ldyBVdCxBaGUpLCJlZGdlIiksIkVkZ2UgVGhpY2tuZXNzIiksIlRoZSB0aGlja25lc3Mgb2YgYW4gZWRnZS4gVGhpcyBpcyBhIGhpbnQgb24gdGhlIGxpbmUgd2lkdGggdXNlZCB0byBkcmF3IGFuIGVkZ2UsIHBvc3NpYmx5IHJlcXVpcmluZyBtb3JlIHNwYWNlIHRvIGJlIHJlc2VydmVkIGZvciBpdC4iKSwxKSxmbyksdGEpLHVuKHpkKSkpKSxzbih0LG5ldyBYdChubih0bihybih5bihRdChlbihKdChadChuZXcgVXQsUXl0KSwiZWRnZSIpLCJFZGdlIFR5cGUiKSwiVGhlIHR5cGUgb2YgYW4gZWRnZS4gVGhpcyBpcyB1c3VhbGx5IHVzZWQgZm9yIFVNTCBjbGFzcyBkaWFncmFtcywgd2hlcmUgYXNzb2NpYXRpb25zIG11c3QgYmUgaGFuZGxlZCBkaWZmZXJlbnRseSBmcm9tIGdlbmVyYWxpemF0aW9ucy4iKSxjTmUpLHBzKSxITmUpLHVuKHpkKSkpKSxtXyh0LG5ldyBueChmXyhDayhUayhuZXcgbnksc3IpLCJMYXllcmVkIiksJ1RoZSBsYXllci1iYXNlZCBtZXRob2Qgd2FzIGludHJvZHVjZWQgYnkgU3VnaXlhbWEsIFRhZ2F3YSBhbmQgVG9kYSBpbiAxOTgxLiBJdCBlbXBoYXNpemVzIHRoZSBkaXJlY3Rpb24gb2YgZWRnZXMgYnkgcG9pbnRpbmcgYXMgbWFueSBlZGdlcyBhcyBwb3NzaWJsZSBpbnRvIHRoZSBzYW1lIGRpcmVjdGlvbi4gVGhlIG5vZGVzIGFyZSBhcnJhbmdlZCBpbiBsYXllcnMsIHdoaWNoIGFyZSBzb21ldGltZXMgY2FsbGVkICJoaWVyYXJjaGllcyIsIGFuZCB0aGVuIHJlb3JkZXJlZCBzdWNoIHRoYXQgdGhlIG51bWJlciBvZiBlZGdlIGNyb3NzaW5ncyBpcyBtaW5pbWl6ZWQuIEFmdGVyd2FyZHMsIGNvbmNyZXRlIGNvb3JkaW5hdGVzIGFyZSBjb21wdXRlZCBmb3IgdGhlIG5vZGVzIGFuZCBlZGdlIGJlbmQgcG9pbnRzLicpKSksbV8odCxuZXcgbngoZl8oQ2soVGsobmV3IG55LCJvcmcuZWNsaXBzZS5lbGsub3J0aG9nb25hbCIpLCJPcnRob2dvbmFsIiksYE9ydGhvZ29uYWwgbWV0aG9kcyB0aGF0IGZvbGxvdyB0aGUgInRvcG9sb2d5LXNoYXBlLW1ldHJpY3MiIGFwcHJvYWNoIGJ5IEJhdGluaSwgTmFyZGVsbGkgYW5kIFRhbWFzc2lhICc4Ni4gVGhlIGZpcnN0IHBoYXNlIGRldGVybWluZXMgdGhlIHRvcG9sb2d5IG9mIHRoZSBkcmF3aW5nIGJ5IGFwcGx5aW5nIGEgcGxhbmFyaXphdGlvbiB0ZWNobmlxdWUsIHdoaWNoIHJlc3VsdHMgaW4gYSBwbGFuYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdyYXBoLiBUaGUgb3J0aG9nb25hbCBzaGFwZSBpcyBjb21wdXRlZCBpbiB0aGUgc2Vjb25kIHBoYXNlLCB3aGljaCBhaW1zIGF0IG1pbmltaXppbmcgdGhlIG51bWJlciBvZiBlZGdlIGJlbmRzLCBhbmQgaXMgY2FsbGVkIG9ydGhvZ29uYWxpemF0aW9uLiBUaGUgdGhpcmQgcGhhc2UgbGVhZHMgdG8gY29uY3JldGUgY29vcmRpbmF0ZXMgZm9yIG5vZGVzIGFuZCBlZGdlIGJlbmQgcG9pbnRzIGJ5IGFwcGx5aW5nIGEgY29tcGFjdGlvbiBtZXRob2QsIHRodXMgZGVmaW5pbmcgdGhlIG1ldHJpY3MuYCkpKSxtXyh0LG5ldyBueChmXyhDayhUayhuZXcgbnksWXUpLCJGb3JjZSIpLCJMYXlvdXQgYWxnb3JpdGhtcyB0aGF0IGZvbGxvdyBwaHlzaWNhbCBhbmFsb2dpZXMgYnkgc2ltdWxhdGluZyBhIHN5c3RlbSBvZiBhdHRyYWN0aXZlIGFuZCByZXB1bHNpdmUgZm9yY2VzLiBUaGUgZmlyc3Qgc3VjY2Vzc2Z1bCBtZXRob2Qgb2YgdGhpcyBraW5kIHdhcyBwcm9wb3NlZCBieSBFYWRlcyBpbiAxOTg0LiIpKSksbV8odCxuZXcgbngoZl8oQ2soVGsobmV3IG55LCJvcmcuZWNsaXBzZS5lbGsuY2lyY2xlIiksIkNpcmNsZSIpLCJDaXJjdWxhciBsYXlvdXQgYWxnb3JpdGhtcyBlbXBoYXNpemUgY3ljbGVzIG9yIGJpY29ubmVjdGVkIGNvbXBvbmVudHMgb2YgYSBncmFwaCBieSBhcnJhbmdpbmcgdGhlbSBpbiBjaXJjbGVzLiBUaGlzIGlzIHVzZWZ1bCBpZiBhIGRyYXdpbmcgaXMgZGVzaXJlZCB3aGVyZSBzdWNoIGNvbXBvbmVudHMgYXJlIGNsZWFybHkgZ3JvdXBlZCwgb3Igd2hlcmUgY3ljbGVzIGFyZSBzaG93biBhcyBwcm9taW5lbnQgT1BUSU9OUyBvZiB0aGUgZ3JhcGguIikpKSxtXyh0LG5ldyBueChmXyhDayhUayhuZXcgbnksYnl0KSwiVHJlZSIpLCJTcGVjaWFsaXplZCBsYXlvdXQgbWV0aG9kcyBmb3IgdHJlZXMsIGkuZS4gYWN5Y2xpYyBncmFwaHMuIFRoZSByZWd1bGFyIHN0cnVjdHVyZSBvZiBncmFwaHMgdGhhdCBoYXZlIG5vIHVuZGlyZWN0ZWQgY3ljbGVzIGNhbiBiZSBlbXBoYXNpemVkIHVzaW5nIGFuIGFsZ29yaXRobSBvZiB0aGlzIHR5cGUuIikpKSxtXyh0LG5ldyBueChmXyhDayhUayhuZXcgbnksIm9yZy5lY2xpcHNlLmVsay5wbGFuYXIiKSwiUGxhbmFyIiksIkFsZ29yaXRobXMgdGhhdCByZXF1aXJlIGEgcGxhbmFyIG9yIHVwd2FyZCBwbGFuYXIgZ3JhcGguIE1vc3Qgb2YgdGhlc2UgYWxnb3JpdGhtcyBhcmUgdGhlb3JldGljYWxseSBpbnRlcmVzdGluZywgYnV0IG5vdCBwcmFjdGljYWxseSB1c2FibGUuIikpKSxtXyh0LG5ldyBueChmXyhDayhUayhuZXcgbnksZ2YpLCJSYWRpYWwiKSwiUmFkaWFsIGxheW91dCBhbGdvcml0aG1zIHVzdWFsbHkgcG9zaXRpb24gdGhlIG5vZGVzIG9mIHRoZSBncmFwaCBvbiBjb25jZW50cmljIGNpcmNsZXMuIikpKSxhbXQoKG5ldyBkaWUsdCkpLHhtdCgobmV3IGZpZSx0KSksTmJ0KChuZXcgbHosdCkpfTt2YXIgZUMsQVN0LGVOZSxaNixMU3QsTVN0LHROZSxlNyx0NyxEU3QsVUIsbk5lLEdCLHh2LHJOZSxEZ2UsSWdlLGlOZSxzTmUsYU5lLG9OZSxjTmUsSVN0LG43LHVOZSxPU3QsS0IsT2dlLFdCLE5nZSx4MyxsTmUsdEMsaE5lLGZOZSxkTmUscjcsZ05lLGt2LHBOZSxDNCxpNyxiTmUsVWIsbU5lLHJZLFlCLF8yLHZOZSxOU3Qsd05lLFBTdCxCU3QseU5lLHhOZSxQZ2UsQmdlLEZnZSxSZ2Usa05lLHJoLF9NLEVOZSxqZ2UsJGdlLFM0LFROZSxDTmUsczcsU05lLG45LFhCLHpnZSxhNyxGU3QscWdlLFJTdCxqU3QsX05lLCRTdCxBTmUsTE5lLHI5LE1OZSxpWSxETmUsSU5lLEV2LHpTdCxPTmUsTk5lLFBOZSxzWSxRQixBTSxpOSxxU3QsSFN0LGFZLFZTdCxCTmUsVVN0O0kobmgsIkNvcmVPcHRpb25zIiw2OTkpLEQoODgsMjIsezM6MSwzNDoxLDIyOjEsODg6MX0sbU8pO3ZhciBRMSx1Yyx2YyxKMSx3ZixMTT1GcihuaCxrRWUsODgsSHIsUG1uLGoxbiksR1N0O0QoMjc4LDIyLHszOjEsMzQ6MSwyMjoxLDI3ODoxfSx6c2UpO3ZhciBuQyxfNCxyQyxGTmU9RnIobmgsIkVkZ2VMYWJlbFBsYWNlbWVudCIsMjc4LEhyLGxibiwkMW4pLEtTdDtEKDIyMywyMix7MzoxLDM0OjEsMjI6MSwyMjM6MX0seHEpO3ZhciBpQyxKQixzOSxIZ2UsVmdlPUZyKG5oLCJFZGdlUm91dGluZyIsMjIzLEhyLGxtbix6MW4pLFdTdDtEKDMyMSwyMix7MzoxLDM0OjEsMjI6MSwzMjE6MX0sTF8pO3ZhciBSTmUsak5lLCROZSx6TmUsVWdlLHFOZSxITmU9RnIobmgsIkVkZ2VUeXBlIiwzMjEsSHIsTHZuLHExbiksWVN0O0QoOTg5LDEsUGYsZGllKSxoLmhmPWZ1bmN0aW9uKHQpe2FtdCh0KX07dmFyIFZOZSxVTmUsR05lLEtOZSxYU3QsV05lLE1NO0kobmgsIkZpeGVkTGF5b3V0ZXJPcHRpb25zIiw5ODkpLEQoOTkwLDEse30sdiQpLGguc2Y9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1uZXcgVW5lLHR9LGgudGY9ZnVuY3Rpb24odCl7fSxJKG5oLCJGaXhlZExheW91dGVyT3B0aW9ucy9GaXhlZEZhY3RvcnkiLDk5MCksRCgzNDYsMjIsezM6MSwzNDoxLDIyOjEsMzQ2OjF9LHFzZSk7dmFyIEEyLG9ZLERNLFlOZT1GcihuaCwiSGllcmFyY2h5SGFuZGxpbmciLDM0NixIcixjYm4sSDFuKSxRU3Q7RCgyOTEsMjIsezM6MSwzNDoxLDIyOjEsMjkxOjF9LGtxKTt2YXIga2csR2IsWkIsZUYsSlN0PUZyKG5oLCJMYWJlbFNpZGUiLDI5MSxIcix1bW4sVjFuKSxaU3Q7RCg5NSwyMix7MzoxLDM0OjEsMjI6MSw5NToxfSxENSk7dmFyIG1wLEUwLHpmLFQwLGpoLEMwLHFmLEVnLFMwLEtvPUZyKG5oLCJOb2RlTGFiZWxQbGFjZW1lbnQiLDk1LEhyLE13bixVMW4pLGVfdDtEKDI1NiwyMix7MzoxLDM0OjEsMjI6MSwyNTY6MX0sdk8pO3ZhciBYTmUsSU0sS2IsUU5lLHRGLE9NPUZyKG5oLCJQb3J0QWxpZ25tZW50IiwyNTYsSHIsWG1uLEcxbiksdF90O0QoMTAxLDIyLHszOjEsMzQ6MSwyMjoxLDEwMToxfSxNXyk7dmFyIFR2LE11LFRnLHNDLFoxLFdiLEpOZT1GcihuaCwiUG9ydENvbnN0cmFpbnRzIiwxMDEsSHIsQXZuLEsxbiksbl90O0QoMjc5LDIyLHszOjEsMzQ6MSwyMjoxLDI3OToxfSxEXyk7dmFyIE5NLFBNLHZwLG5GLFliLGE5LGNZPUZyKG5oLCJQb3J0TGFiZWxQbGFjZW1lbnQiLDI3OSxIcixfdm4sVzFuKSxyX3Q7RCg2NCwyMix7MzoxLDM0OjEsMjI6MSw2NDoxfSx3Tyk7dmFyIGFyLFFuLHlmLHhmLGxsLEp1LGVkLF8wLHpsLF9sLER1LHFsLGhsLGZsLEEwLCRoLHpoLEhmLERyLFBjLGVyLE9vPUZyKG5oLCJQb3J0U2lkZSIsNjQsSHIsQm1uLFkxbiksaV90O0QoOTkzLDEsUGYsbHopLGguaGY9ZnVuY3Rpb24odCl7TmJ0KHQpfTt2YXIgc190LGFfdCxaTmUsb190LGNfdDtJKG5oLCJSYW5kb21MYXlvdXRlck9wdGlvbnMiLDk5MyksRCg5OTQsMSx7fSx3JCksaC5zZj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PW5ldyBxbmUsdH0saC50Zj1mdW5jdGlvbih0KXt9LEkobmgsIlJhbmRvbUxheW91dGVyT3B0aW9ucy9SYW5kb21GYWN0b3J5Iiw5OTQpLEQoMzg2LDIyLHszOjEsMzQ6MSwyMjoxLDM4NjoxfSxFcSk7dmFyIEE0LHJGLGlGLEN2LEJNPUZyKG5oLCJTaXplQ29uc3RyYWludCIsMzg2LEhyLGNtbixYMW4pLHVfdDtEKDI2NCwyMix7MzoxLDM0OjEsMjI6MSwyNjQ6MX0sSTUpO3ZhciBzRix1WSxhQyxHZ2UsYUYsRk0sbFksaFksZlksZVBlPUZyKG5oLCJTaXplT3B0aW9ucyIsMjY0LEhyLHF3bixRMW4pLGxfdDtEKDI4MCwyMix7MzoxLDM0OjEsMjI6MSwyODA6MX0sSHNlKTt2YXIgTDQsdFBlLGRZLG5QZT1GcihuaCwiVG9wZG93bk5vZGVUeXBlcyIsMjgwLEhyLGhibixKMW4pLGhfdDtEKDM0NywyMixzU2UpO3ZhciByUGUsaVBlLGdZPUZyKG5oLCJUb3Bkb3duU2l6ZUFwcHJveGltYXRvciIsMzQ3LEhyLGEybixlZG4pO0QoOTg3LDM0NyxzU2UsV2l0KSxoLlRnPWZ1bmN0aW9uKHQpe3JldHVybiBUZHQodCl9LEZyKG5oLCJUb3Bkb3duU2l6ZUFwcHJveGltYXRvci8xIiw5ODcsZ1ksbnVsbCxudWxsKSxEKDk4OCwzNDcsc1NlLE9zdCksaC5UZz1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuLEJuO2ZvcihuPWwoYXQodCwocGkoKSxhNykpLDE0MyksU3Q9KHJiKCksVj1uZXcgYV8sViksYVAoU3QsdCksY249bmV3IFByLGY9bmV3IG9yKCghdC5hJiYodC5hPW5ldyBudChBaSx0LDEwLDExKSksdC5hKSk7Zi5lIT1mLmkuZ2MoKTspYT1sKGdyKGYpLDI3KSxNZT0oej1uZXcgYV8seiksTFUoTWUsU3QpLGFQKE1lLGEpLEJuPVRkdChhKSxGNShNZSxiLk1hdGgubWF4KGEuZyxCbi5hKSxiLk1hdGgubWF4KGEuZixCbi5iKSksanUoY24uZixhLE1lKTtmb3Iobz1uZXcgb3IoKCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpKTtvLmUhPW8uaS5nYygpOylmb3IoYT1sKGdyKG8pLDI3KSxMPW5ldyBvcigoIWEuZSYmKGEuZT1uZXcgTG4oanMsYSw3LDQpKSxhLmUpKTtMLmUhPUwuaS5nYygpOylDPWwoZ3IoTCksNzQpLFplPWwoaGMoem8oY24uZixhKSksMjcpLG90PWwoY3IoY24sT2UoKCFDLmMmJihDLmM9bmV3IExuKF9yLEMsNSw4KSksQy5jKSwwKSksMjcpLCRlPShCPW5ldyBUSSxCKSxxcigoISRlLmImJigkZS5iPW5ldyBMbihfciwkZSw0LDcpKSwkZS5iKSxaZSkscXIoKCEkZS5jJiYoJGUuYz1uZXcgTG4oX3IsJGUsNSw4KSksJGUuYyksb3QpLEFVKCRlLGRzKFplKSksYVAoJGUsQyk7dGU9bChHTyhuLmYpLDIwNSk7dHJ5e3RlLnJmKFN0LG5ldyB4JCksbGF0KG4uZix0ZSl9Y2F0Y2goam4pe3Rocm93IGpuPWJzKGpuKSxEZShqbiwxMDMpPyhKPWpuLHVlKEopKTp1ZShqbil9cmV0dXJuIFAxKFN0LHQ3KXx8UDEoU3QsZTcpfHxVa2UoU3QpLEU9emUoR2UoYXQoU3QsdDcpKSksdz16ZShHZShhdChTdCxlNykpKSxnPUUvdyxyPXplKEdlKGF0KFN0LFFCKSkpKmIuTWF0aC5zcXJ0KCghU3QuYSYmKFN0LmE9bmV3IG50KEFpLFN0LDEwLDExKSksU3QuYSkuaSksYW49bChhdChTdCxfMiksMTA3KSxUZT1hbi5iK2FuLmMrMSxmZT1hbi5kK2FuLmErMSxuZXcgbHQoYi5NYXRoLm1heChUZSxyKSxiLk1hdGgubWF4KGZlLHIvZykpfSxGcihuaCwiVG9wZG93blNpemVBcHByb3hpbWF0b3IvMiIsOTg4LGdZLG51bGwsbnVsbCk7dmFyIGZfdDtEKDM0NCwxLHs4NzE6MX0sTDgpLGguVWc9ZnVuY3Rpb24odCxuKXtyZXR1cm4gRmd0KHRoaXMsdCxuKX0saC5WZz1mdW5jdGlvbigpe2FwdCh0aGlzKX0saC5XZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnF9LGguWGc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mP2lvZSh0aGlzLmYpOm51bGx9LGguWWc9ZnVuY3Rpb24oKXtyZXR1cm4gaW9lKHRoaXMuYSl9LGguWmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wfSxoLiRnPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGguX2c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ufSxoLmFoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucCE9bnVsbCYmIXRoaXMuYn0saC5iaD1mdW5jdGlvbih0KXt2YXIgbjt0aGlzLm4mJihuPXQsdnQodGhpcy5mLG4pKX0saC5kaD1mdW5jdGlvbih0LG4pe3ZhciByLGE7dGhpcy5uJiZ0JiZTYm4odGhpcywocj1uZXcgVXN0LGE9Y2xlKHIsdCksb0RuKHIpLGEpLChOVigpLFdnZSkpfSxoLmVoPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiB0aGlzLmI/bnVsbDoobj1od24odGhpcyx0aGlzLmcpLHVpKHRoaXMuYSxuKSxuLmk9dGhpcyx0aGlzLmQ9dCxuKX0saC5maD1mdW5jdGlvbih0KXt0PjAmJiF0aGlzLmImJmM3ZSh0aGlzLHQpfSxoLmI9ITEsaC5jPTAsaC5kPS0xLGguZT1udWxsLGguZj1udWxsLGguZz0tMSxoLmo9ITEsaC5rPSExLGgubj0hMSxoLm89MCxoLnE9MCxoLnI9MCxJKFVjLCJCYXNpY1Byb2dyZXNzTW9uaXRvciIsMzQ0KSxEKDcxNywyMDUsdHYsam5lKSxoLnJmPWZ1bmN0aW9uKHQsbil7Um10KHQsbil9LEkoVWMsIkJveExheW91dFByb3ZpZGVyIiw3MTcpLEQoOTgzLDEsaWksRFhlKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG9Dbih0aGlzLGwodCwyNyksbChuLDI3KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0saC5hPSExLEkoVWMsIkJveExheW91dFByb3ZpZGVyLzEiLDk4MyksRCgxNjMsMSx7MTYzOjF9LGhWLHZydCksaC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmM/b2tlKHRoaXMuYyk6VGIodGhpcy5iKX0sSShVYywiQm94TGF5b3V0UHJvdmlkZXIvR3JvdXAiLDE2MyksRCgzMjAsMjIsezM6MSwzNDoxLDIyOjEsMzIwOjF9LFRxKTt2YXIgc1BlLGFQZSxvUGUsS2dlLGNQZT1GcihVYywiQm94TGF5b3V0UHJvdmlkZXIvUGFja2luZ01vZGUiLDMyMCxIcixobW4sdGRuKSxkX3Q7RCg5ODQsMSxpaSx0ayksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBTcG4obCh0LDE2MyksbChuLDE2MykpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoVWMsIkJveExheW91dFByb3ZpZGVyL2xhbWJkYSQwJFR5cGUiLDk4NCksRCg5ODUsMSxpaSxuayksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiB2cG4obCh0LDE2MyksbChuLDE2MykpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoVWMsIkJveExheW91dFByb3ZpZGVyL2xhbWJkYSQxJFR5cGUiLDk4NSksRCg5ODYsMSxpaSx5JCksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiB3cG4obCh0LDE2MyksbChuLDE2MykpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoVWMsIkJveExheW91dFByb3ZpZGVyL2xhbWJkYSQyJFR5cGUiLDk4NiksRCgxMzg0LDEsezg0NToxfSwkbmUpLGguTWc9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdHEoKSwhRGUobiwxNjcpfHxtWmUoKGh4KCksbCh0LDE2NykpLG4pfSxJKFVjLCJFbGtTcGFjaW5ncy9BYnN0cmFjdFNwYWNpbmdzQnVpbGRlci9sYW1iZGEkMCRUeXBlIiwxMzg0KSxEKDEzODUsMSxmcixJWGUpLGguQ2Q9ZnVuY3Rpb24odCl7QnluKHRoaXMuYSxsKHQsMTQ5KSl9LEkoVWMsIkVsa1NwYWNpbmdzL0Fic3RyYWN0U3BhY2luZ3NCdWlsZGVyL2xhbWJkYSQxJFR5cGUiLDEzODUpLEQoMTM4NiwxLGZyLEhuZSksaC5DZD1mdW5jdGlvbih0KXtsKHQsOTYpLHRxKCl9LEkoVWMsIkVsa1NwYWNpbmdzL0Fic3RyYWN0U3BhY2luZ3NCdWlsZGVyL2xhbWJkYSQyJFR5cGUiLDEzODYpLEQoMTM5MCwxLGZyLE9YZSksaC5DZD1mdW5jdGlvbih0KXtpM24odGhpcy5hLGwodCw5NikpfSxJKFVjLCJFbGtTcGFjaW5ncy9BYnN0cmFjdFNwYWNpbmdzQnVpbGRlci9sYW1iZGEkMyRUeXBlIiwxMzkwKSxEKDEzODgsMSx0aSx1dHQpLGguTWI9ZnVuY3Rpb24odCl7cmV0dXJuIG15bih0aGlzLmEsdGhpcy5iLGwodCwxNDkpKX0sSShVYywiRWxrU3BhY2luZ3MvQWJzdHJhY3RTcGFjaW5nc0J1aWxkZXIvbGFtYmRhJDQkVHlwZSIsMTM4OCksRCgxMzg3LDEsdGksbHR0KSxoLk1iPWZ1bmN0aW9uKHQpe3JldHVybiBKaG4odGhpcy5hLHRoaXMuYixsKHQsODQ1KSl9LEkoVWMsIkVsa1NwYWNpbmdzL0Fic3RyYWN0U3BhY2luZ3NCdWlsZGVyL2xhbWJkYSQ1JFR5cGUiLDEzODcpLEQoMTM4OSwxLGZyLGh0dCksaC5DZD1mdW5jdGlvbih0KXtoZ24odGhpcy5hLHRoaXMuYixsKHQsMTQ5KSl9LEkoVWMsIkVsa1NwYWNpbmdzL0Fic3RyYWN0U3BhY2luZ3NCdWlsZGVyL2xhbWJkYSQ2JFR5cGUiLDEzODkpLEQoOTQ3LDEse30sVm5lKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBhbnQodCl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxJKFVjLCJFbGtVdGlsL2xhbWJkYSQwJFR5cGUiLDk0NyksRCg5NDgsMSxmcixmdHQpLGguQ2Q9ZnVuY3Rpb24odCl7bEVuKHRoaXMuYSx0aGlzLmIsbCh0LDc0KSl9LGguYT0wLGguYj0wLEkoVWMsIkVsa1V0aWwvbGFtYmRhJDEkVHlwZSIsOTQ4KSxEKDk0OSwxLGZyLGR0dCksaC5DZD1mdW5jdGlvbih0KXt0dW4odGhpcy5hLHRoaXMuYixsKHQsMTY2KSl9LGguYT0wLGguYj0wLEkoVWMsIkVsa1V0aWwvbGFtYmRhJDIkVHlwZSIsOTQ5KSxEKDk1MCwxLGZyLGd0dCksaC5DZD1mdW5jdGlvbih0KXtYbG4odGhpcy5hLHRoaXMuYixsKHQsMTM1KSl9LGguYT0wLGguYj0wLEkoVWMsIkVsa1V0aWwvbGFtYmRhJDMkVHlwZSIsOTUwKSxEKDk1MSwxLGZyLE5YZSksaC5DZD1mdW5jdGlvbih0KXtJZG4odGhpcy5hLGwodCwzNzcpKX0sSShVYywiRWxrVXRpbC9sYW1iZGEkNCRUeXBlIiw5NTEpLEQoMzI1LDEsezM0OjEsMzI1OjF9LERjbiksaC5GZD1mdW5jdGlvbih0KXtyZXR1cm4gQ2huKHRoaXMsbCh0LDI0MikpfSxoLkZiPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBEZSh0LDMyNSk/KG49bCh0LDMyNSksdGhpcy5hPT1uLmEpOiExfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHVhKHRoaXMuYSl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hKyIgKGV4Y2x1c2l2ZSkifSxoLmE9MCxJKFVjLCJFeGNsdXNpdmVCb3VuZHMvRXhjbHVzaXZlTG93ZXJCb3VuZCIsMzI1KSxEKDExMTksMjA1LHR2LFVuZSksaC5yZj1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlLE1lLCRlLFplLG90LFN0LGNuLGFuO2ZvcihuLlVnKCJGaXhlZCBMYXlvdXQiLDEpLGY9bChhdCh0LChwaSgpLHNOZSkpLDIyMyksQj0wLHo9MCxNZT1uZXcgb3IoKCF0LmEmJih0LmE9bmV3IG50KEFpLHQsMTAsMTEpKSx0LmEpKTtNZS5lIT1NZS5pLmdjKCk7KXtmb3IoZmU9bChncihNZSksMjcpLGFuPWwoYXQoZmUsKFBWKCksTU0pKSw4KSxhbiYmKFFoKGZlLGFuLmEsYW4uYiksbChhdChmZSxVTmUpLDE4MSkuSGMoKG1oKCksQTQpKSYmKFY9bChhdChmZSxLTmUpLDgpLFYuYT4wJiZWLmI+MCYmR3coZmUsVi5hLFYuYiwhMCwhMCkpKSxCPWIuTWF0aC5tYXgoQixmZS5pK2ZlLmcpLHo9Yi5NYXRoLm1heCh6LGZlLmorZmUuZiksQz1uZXcgb3IoKCFmZS5uJiYoZmUubj1uZXcgbnQoZWMsZmUsMSw3KSksZmUubikpO0MuZSE9Qy5pLmdjKCk7KXc9bChncihDKSwxMzUpLGFuPWwoYXQodyxNTSksOCksYW4mJlFoKHcsYW4uYSxhbi5iKSxCPWIuTWF0aC5tYXgoQixmZS5pK3cuaSt3LmcpLHo9Yi5NYXRoLm1heCh6LGZlLmordy5qK3cuZik7Zm9yKG90PW5ldyBvcigoIWZlLmMmJihmZS5jPW5ldyBudChIbCxmZSw5LDkpKSxmZS5jKSk7b3QuZSE9b3QuaS5nYygpOylmb3IoWmU9bChncihvdCksMTIzKSxhbj1sKGF0KFplLE1NKSw4KSxhbiYmUWgoWmUsYW4uYSxhbi5iKSxTdD1mZS5pK1plLmksY249ZmUuaitaZS5qLEI9Yi5NYXRoLm1heChCLFN0K1plLmcpLHo9Yi5NYXRoLm1heCh6LGNuK1plLmYpLEU9bmV3IG9yKCghWmUubiYmKFplLm49bmV3IG50KGVjLFplLDEsNykpLFplLm4pKTtFLmUhPUUuaS5nYygpOyl3PWwoZ3IoRSksMTM1KSxhbj1sKGF0KHcsTU0pLDgpLGFuJiZRaCh3LGFuLmEsYW4uYiksQj1iLk1hdGgubWF4KEIsU3Qrdy5pK3cuZyksej1iLk1hdGgubWF4KHosY24rdy5qK3cuZik7Zm9yKG89bmV3IGhyKGRyKGNwKGZlKS5hLktjKCksbmV3IGopKTtqcihvKTspcj1sKHhyKG8pLDc0KSxMPUp2dChyKSxCPWIuTWF0aC5tYXgoQixMLmEpLHo9Yi5NYXRoLm1heCh6LEwuYik7Zm9yKGE9bmV3IGhyKGRyKHNQKGZlKS5hLktjKCksbmV3IGopKTtqcihhKTspcj1sKHhyKGEpLDc0KSxkcyhjZyhyKSkhPXQmJihMPUp2dChyKSxCPWIuTWF0aC5tYXgoQixMLmEpLHo9Yi5NYXRoLm1heCh6LEwuYikpfWlmKGY9PShpcCgpLGlDKSlmb3IoVGU9bmV3IG9yKCghdC5hJiYodC5hPW5ldyBudChBaSx0LDEwLDExKSksdC5hKSk7VGUuZSE9VGUuaS5nYygpOylmb3IoZmU9bChncihUZSksMjcpLGE9bmV3IGhyKGRyKGNwKGZlKS5hLktjKCksbmV3IGopKTtqcihhKTspcj1sKHhyKGEpLDc0KSxnPWZBbihyKSxnLmI9PTA/SGkocix4MyxudWxsKTpIaShyLHgzLGcpO1J0KEJ0KGF0KHQsKFBWKCksR05lKSkpKXx8KCRlPWwoYXQodCxYU3QpLDEwNyksdGU9QiskZS5iKyRlLmMsSj16KyRlLmQrJGUuYSxHdyh0LHRlLEosITAsITApKSxuLlZnKCl9LEkoVWMsIkZpeGVkTGF5b3V0UHJvdmlkZXIiLDExMTkpLEQoMzg1LDEzNyx7MzoxLDQyMzoxLDM4NToxLDk2OjEsMTM3OjF9LEVJLFhsdCksaC5jZz1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7aWYodCl0cnl7Zm9yKEU9R3kodCwiOyw7IiksZj1FLGc9MCx3PWYubGVuZ3RoO2c8dzsrK2cpe2lmKG89ZltnXSxyPUd5KG8sIlxcOiIpLGE9RmtlKGhFKCksclswXSksIWEpdGhyb3cgdWUobmV3IFluKCJJbnZhbGlkIG9wdGlvbiBpZDogIityWzBdKSk7aWYoQz1Qa2UoYSxyWzFdKSxDPT1udWxsKXRocm93IHVlKG5ldyBZbigiSW52YWxpZCBvcHRpb24gdmFsdWU6ICIrclsxXSkpO0M9PW51bGw/KCF0aGlzLnEmJih0aGlzLnE9bmV3IFByKSxheCh0aGlzLnEsYSkpOighdGhpcy5xJiYodGhpcy5xPW5ldyBQciksa2kodGhpcy5xLGEsQykpfX1jYXRjaChMKXt0aHJvdyBMPWJzKEwpLERlKEwsMTAzKT8obj1MLHVlKG5ldyBOMHQobikpKTp1ZShMKX19LGguSWI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1laSh5YyhmYygodGhpcy5xP3RoaXMucTooQ24oKSxDbigpLG1nKSkudmMoKS5PYygpLG5ldyBHbmUpLFN5KG5ldyBMaXQsbmV3IE1hLG5ldyBrdCxuZXcgT24saGUobGUob2MsMSksaXQsMTA4LDAsW10pKSkpLHR9O3ZhciBnX3Q9SShVYywiSW5kaXZpZHVhbFNwYWNpbmdzIiwzODUpO0QoOTgyLDEse30sR25lKSxoLktiPWZ1bmN0aW9uKHQpe3JldHVybiBfcG4obCh0LDQ0KSl9LEkoVWMsIkluZGl2aWR1YWxTcGFjaW5ncy9sYW1iZGEkMCRUeXBlIiw5ODIpLEQoNzE4LDEse30sbHN0KSxoLmM9MCxJKFVjLCJJbnN0YW5jZVBvb2wiLDcxOCksRCgxODM1LDEse30sS25lKSxJKFVjLCJMb2dnZWRHcmFwaCIsMTgzNSksRCg0MTUsMjIsezM6MSwzNDoxLDIyOjEsNDE1OjF9LENxKTt2YXIgdVBlLFdnZSxsUGUsaFBlLHBfdD1GcihVYywiTG9nZ2VkR3JhcGgvVHlwZSIsNDE1LEhyLGZtbixuZG4pLGJfdDtEKDEwNjMsMSx7ODcxOjF9LHgkKSxoLlVnPWZ1bmN0aW9uKHQsbil7cmV0dXJuITF9LGguVmc9ZnVuY3Rpb24oKXt9LGguV2c9ZnVuY3Rpb24oKXtyZXR1cm4gMH0saC5YZz1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLllnPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGguWmc9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0saC4kZz1mdW5jdGlvbigpe3JldHVybiExfSxoLl9nPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGguYWg9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5iaD1mdW5jdGlvbih0KXt9LGguZGg9ZnVuY3Rpb24odCxuKXt9LGguZWg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXN9LGguZmg9ZnVuY3Rpb24odCl7fSxJKFVjLCJOdWxsRWxrUHJvZ3Jlc3NNb25pdG9yIiwxMDYzKSxEKDQyLDEsezIwOjEsNDI6MX0sY2EpLGguSmM9ZnVuY3Rpb24odCl7dG8odGhpcyx0KX0saC5GYj1mdW5jdGlvbih0KXt2YXIgbixyLGE7cmV0dXJuIERlKHQsNDIpPyhyPWwodCw0Miksbj10aGlzLmE9PW51bGw/ci5hPT1udWxsOlBpKHRoaXMuYSxyLmEpLGE9dGhpcy5iPT1udWxsP3IuYj09bnVsbDpQaSh0aGlzLmIsci5iKSxuJiZhKTohMX0saC5IYj1mdW5jdGlvbigpe3ZhciB0LG4scixhLG8sZjtyZXR1cm4gcj10aGlzLmE9PW51bGw/MDplcyh0aGlzLmEpLHQ9ciZacyxuPXImLTY1NTM2LGY9dGhpcy5iPT1udWxsPzA6ZXModGhpcy5iKSxhPWYmWnMsbz1mJi02NTUzNix0Xm8+PjE2JlpzfG5eYTw8MTZ9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFBYZSh0aGlzKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE9PW51bGwmJnRoaXMuYj09bnVsbD8icGFpcihudWxsLG51bGwpIjp0aGlzLmE9PW51bGw/InBhaXIobnVsbCwiK3hjKHRoaXMuYikrIikiOnRoaXMuYj09bnVsbD8icGFpcigiK3hjKHRoaXMuYSkrIixudWxsKSI6InBhaXIoIit4Yyh0aGlzLmEpKyIsIit4Yyh0aGlzLmIpKyIpIn0sSShVYywiUGFpciIsNDIpLEQoOTk1LDEsT2EsUFhlKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5jJiYoIXRoaXMuYiYmdGhpcy5hLmEhPW51bGx8fHRoaXMuYS5iIT1udWxsKX0saC5QYj1mdW5jdGlvbigpe2lmKCF0aGlzLmMmJiF0aGlzLmImJnRoaXMuYS5hIT1udWxsKXJldHVybiB0aGlzLmI9ITAsdGhpcy5hLmE7aWYoIXRoaXMuYyYmdGhpcy5hLmIhPW51bGwpcmV0dXJuIHRoaXMuYz0hMCx0aGlzLmEuYjt0aHJvdyB1ZShuZXcgX2MpfSxoLlFiPWZ1bmN0aW9uKCl7dGhyb3cgdGhpcy5jJiZ0aGlzLmEuYiE9bnVsbD90aGlzLmEuYj1udWxsOnRoaXMuYiYmdGhpcy5hLmEhPW51bGwmJih0aGlzLmEuYT1udWxsKSx1ZShuZXcgcGwpfSxoLmI9ITEsaC5jPSExLEkoVWMsIlBhaXIvMSIsOTk1KSxEKDQ1NSwxLHs0NTU6MX0sU2F0KSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiBKYyh0aGlzLmEsbCh0LDQ1NSkuYSkmJkpjKHRoaXMuYyxsKHQsNDU1KS5jKSYmSmModGhpcy5kLGwodCw0NTUpLmQpJiZKYyh0aGlzLmIsbCh0LDQ1NSkuYil9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gTU4oaGUobGUod2EsMSksUm4sMSw1LFt0aGlzLmEsdGhpcy5jLHRoaXMuZCx0aGlzLmJdKSl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4iKCIrdGhpcy5hK0NvK3RoaXMuYytDbyt0aGlzLmQrQ28rdGhpcy5iKyIpIn0sSShVYywiUXVhZHJ1cGxlIiw0NTUpLEQoMTEwOCwyMDUsdHYscW5lKSxoLnJmPWZ1bmN0aW9uKHQsbil7dmFyIHIsYSxvLGYsZztpZihuLlVnKCJSYW5kb20gTGF5b3V0IiwxKSwoIXQuYSYmKHQuYT1uZXcgbnQoQWksdCwxMCwxMSkpLHQuYSkuaT09MCl7bi5WZygpO3JldHVybn1mPWwoYXQodCwoQjhlKCksb190KSksMTcpLGYmJmYuYSE9MD9vPW5ldyBWSChmLmEpOm89bmV3IFVjZSxyPVhJKEdlKGF0KHQsc190KSkpLGc9WEkoR2UoYXQodCxjX3QpKSksYT1sKGF0KHQsYV90KSwxMDcpLE1Ebih0LG8scixnLGEpLG4uVmcoKX0sSShVYywiUmFuZG9tTGF5b3V0UHJvdmlkZXIiLDExMDgpLEQoMjQwLDEsezI0MDoxfSx3YWUpLGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIEpjKHRoaXMuYSxsKHQsMjQwKS5hKSYmSmModGhpcy5iLGwodCwyNDApLmIpJiZKYyh0aGlzLmMsbCh0LDI0MCkuYyl9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gTU4oaGUobGUod2EsMSksUm4sMSw1LFt0aGlzLmEsdGhpcy5iLHRoaXMuY10pKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiIoIit0aGlzLmErQ28rdGhpcy5iK0NvK3RoaXMuYysiKSJ9LEkoVWMsIlRyaXBsZSIsMjQwKTt2YXIgbV90O0QoNTYyLDEse30pLGguTGY9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGx0KHRoaXMuZi5pLHRoaXMuZi5qKX0saC5vZj1mdW5jdGlvbih0KXtyZXR1cm4gZW90KHQsKHBpKCkscmgpKT9hdCh0aGlzLmYsdl90KTphdCh0aGlzLmYsdCl9LGguTWY9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGx0KHRoaXMuZi5nLHRoaXMuZi5mKX0saC5OZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmd9LGgucGY9ZnVuY3Rpb24odCl7cmV0dXJuIFAxKHRoaXMuZix0KX0saC5PZj1mdW5jdGlvbih0KXtVdSh0aGlzLmYsdC5hKSxHdSh0aGlzLmYsdC5iKX0saC5QZj1mdW5jdGlvbih0KXtEdyh0aGlzLmYsdC5hKSxNdyh0aGlzLmYsdC5iKX0saC5RZj1mdW5jdGlvbih0KXt0aGlzLmc9dH0saC5nPTA7dmFyIHZfdDtJKHhMLCJFbGtHcmFwaEFkYXB0ZXJzL0Fic3RyYWN0RWxrR3JhcGhFbGVtZW50QWRhcHRlciIsNTYyKSxEKDU2MywxLHs4NTM6MX0sT3opLGguUmY9ZnVuY3Rpb24oKXt2YXIgdCxuO2lmKCF0aGlzLmIpZm9yKHRoaXMuYj0kSChFSCh0aGlzLmEpLmkpLG49bmV3IG9yKEVIKHRoaXMuYSkpO24uZSE9bi5pLmdjKCk7KXQ9bChncihuKSwxMzUpLHZ0KHRoaXMuYixuZXcgWWllKHQpKTtyZXR1cm4gdGhpcy5ifSxoLmI9bnVsbCxJKHhMLCJFbGtHcmFwaEFkYXB0ZXJzL0Vsa0VkZ2VBZGFwdGVyIiw1NjMpLEQoMjg5LDU2Mix7fSxKdiksaC5TZj1mdW5jdGlvbigpe3JldHVybiBHZHQodGhpcyl9LGguYT1udWxsLEkoeEwsIkVsa0dyYXBoQWRhcHRlcnMvRWxrR3JhcGhBZGFwdGVyIiwyODkpLEQoNjQwLDU2Mix7MTg3OjF9LFlpZSksSSh4TCwiRWxrR3JhcGhBZGFwdGVycy9FbGtMYWJlbEFkYXB0ZXIiLDY0MCksRCg2MzksNTYyLHs2OTU6MX0scmFlKSxoLlJmPWZ1bmN0aW9uKCl7cmV0dXJuIG03bih0aGlzKX0saC5WZj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PWwoYXQodGhpcy5mLChwaSgpLHRDKSksMTQwKSwhdCYmKHQ9bmV3IHNfKSx0fSxoLlhmPWZ1bmN0aW9uKCl7cmV0dXJuIHY3bih0aGlzKX0saC5aZj1mdW5jdGlvbih0KXt2YXIgbjtuPW5ldyB4YWUodCksSGkodGhpcy5mLChwaSgpLHRDKSxuKX0saC4kZj1mdW5jdGlvbih0KXtIaSh0aGlzLmYsKHBpKCksXzIpLG5ldyBTNGUodCkpfSxoLlRmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0saC5VZj1mdW5jdGlvbigpe3ZhciB0LG47aWYoIXRoaXMuYSlmb3IodGhpcy5hPW5ldyBidCxuPW5ldyBocihkcihzUChsKHRoaXMuZiwyNykpLmEuS2MoKSxuZXcgaikpO2pyKG4pOyl0PWwoeHIobiksNzQpLHZ0KHRoaXMuYSxuZXcgT3oodCkpO3JldHVybiB0aGlzLmF9LGguV2Y9ZnVuY3Rpb24oKXt2YXIgdCxuO2lmKCF0aGlzLmMpZm9yKHRoaXMuYz1uZXcgYnQsbj1uZXcgaHIoZHIoY3AobCh0aGlzLmYsMjcpKS5hLktjKCksbmV3IGopKTtqcihuKTspdD1sKHhyKG4pLDc0KSx2dCh0aGlzLmMsbmV3IE96KHQpKTtyZXR1cm4gdGhpcy5jfSxoLllmPWZ1bmN0aW9uKCl7cmV0dXJuIEFIKGwodGhpcy5mLDI3KSkuaSE9MHx8UnQoQnQobCh0aGlzLmYsMjcpLm9mKChwaSgpLEtCKSkpKX0saC5fZj1mdW5jdGlvbigpe1h2bih0aGlzLChhdygpLG1fdCkpfSxoLmE9bnVsbCxoLmI9bnVsbCxoLmM9bnVsbCxoLmQ9bnVsbCxoLmU9bnVsbCxJKHhMLCJFbGtHcmFwaEFkYXB0ZXJzL0Vsa05vZGVBZGFwdGVyIiw2MzkpLEQoMTI4NCw1NjIsezg1MjoxfSxCWGUpLGguUmY9ZnVuY3Rpb24oKXtyZXR1cm4gUzduKHRoaXMpfSxoLlVmPWZ1bmN0aW9uKCl7dmFyIHQsbjtpZighdGhpcy5hKWZvcih0aGlzLmE9ZWcobCh0aGlzLmYsMTIzKS5oaCgpLmkpLG49bmV3IG9yKGwodGhpcy5mLDEyMykuaGgoKSk7bi5lIT1uLmkuZ2MoKTspdD1sKGdyKG4pLDc0KSx2dCh0aGlzLmEsbmV3IE96KHQpKTtyZXR1cm4gdGhpcy5hfSxoLldmPWZ1bmN0aW9uKCl7dmFyIHQsbjtpZighdGhpcy5jKWZvcih0aGlzLmM9ZWcobCh0aGlzLmYsMTIzKS5paCgpLmkpLG49bmV3IG9yKGwodGhpcy5mLDEyMykuaWgoKSk7bi5lIT1uLmkuZ2MoKTspdD1sKGdyKG4pLDc0KSx2dCh0aGlzLmMsbmV3IE96KHQpKTtyZXR1cm4gdGhpcy5jfSxoLmFnPWZ1bmN0aW9uKCl7cmV0dXJuIGwobCh0aGlzLmYsMTIzKS5vZigocGkoKSxzNykpLDY0KX0saC5iZz1mdW5jdGlvbigpe3ZhciB0LG4scixhLG8sZixnLHc7Zm9yKGE9TTEobCh0aGlzLmYsMTIzKSkscj1uZXcgb3IobCh0aGlzLmYsMTIzKS5paCgpKTtyLmUhPXIuaS5nYygpOylmb3IodD1sKGdyKHIpLDc0KSx3PW5ldyBvcigoIXQuYyYmKHQuYz1uZXcgTG4oX3IsdCw1LDgpKSx0LmMpKTt3LmUhPXcuaS5nYygpOyl7aWYoZz1sKGdyKHcpLDg0KSxMeShiYyhnKSxhKSlyZXR1cm4hMDtpZihiYyhnKT09YSYmUnQoQnQoYXQodCwocGkoKSxPZ2UpKSkpKXJldHVybiEwfWZvcihuPW5ldyBvcihsKHRoaXMuZiwxMjMpLmhoKCkpO24uZSE9bi5pLmdjKCk7KWZvcih0PWwoZ3IobiksNzQpLGY9bmV3IG9yKCghdC5iJiYodC5iPW5ldyBMbihfcix0LDQsNykpLHQuYikpO2YuZSE9Zi5pLmdjKCk7KWlmKG89bChncihmKSw4NCksTHkoYmMobyksYSkpcmV0dXJuITA7cmV0dXJuITF9LGguYT1udWxsLGguYj1udWxsLGguYz1udWxsLEkoeEwsIkVsa0dyYXBoQWRhcHRlcnMvRWxrUG9ydEFkYXB0ZXIiLDEyODQpLEQoMTI4NSwxLGlpLHpuZSksaC5OZT1mdW5jdGlvbih0LG4pe3JldHVybiBpX24obCh0LDEyMyksbChuLDEyMykpfSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dH0saC5PZT1mdW5jdGlvbigpe3JldHVybiBuZXcgVnQodGhpcyl9LEkoeEwsIkVsa0dyYXBoQWRhcHRlcnMvUG9ydENvbXBhcmF0b3IiLDEyODUpO3ZhciBYYj1rcyhwZiwiRU9iamVjdCIpLG9DPWtzKFQ2LHI0dCkscWg9a3MoVDYsaTR0KSxvRj1rcyhUNixzNHQpLGNGPWtzKFQ2LCJFbGtTaGFwZSIpLF9yPWtzKFQ2LGE0dCksanM9a3MoVDYsYVNlKSxjcz1rcyhUNixvNHQpLHVGPWtzKHBmLGM0dCksUk09a3MocGYsIkVGYWN0b3J5Iiksd190LFlnZT1rcyhwZix1NHQpLHUxPWtzKHBmLCJFUGFja2FnZSIpLExhLHlfdCx4X3QsZlBlLHBZLGtfdCxkUGUsZ1BlLHBQZSxDZyxFX3QsVF90LGVjPWtzKFQ2LG9TZSksQWk9a3MoVDYsY1NlKSxIbD1rcyhUNix1U2UpO0QoOTMsMSxsNHQpLGgudGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51aCgpLG51bGx9LGgudWg9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0saC52aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVoKCksITF9LGgud2g9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC54aD1mdW5jdGlvbih0KXtOaSh0aGlzLHQpfSxJKFJ4LCJCYXNpY05vdGlmaWVySW1wbCIsOTMpLEQoOTksOTMsZzR0KSxoLlloPWZ1bmN0aW9uKCl7cmV0dXJuIGhoKHRoaXMpfSxoLnloPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHR9LGguemg9ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgUXIpfSxoLkFoPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBuPVJvKGwoTW4odGhpcy5EaCgpLHRoaXMuRmgoKSksMTkpKSx0aGlzLlBoKCkuVGgodGhpcyxuLm4sbi5mLHQpfSxoLkJoPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IFFyKX0saC5DaD1mdW5jdGlvbih0LG4scil7cmV0dXJuIE5oKHRoaXMsdCxuLHIpfSxoLkRoPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHRoaXMuemgoKSYmKHQ9dGhpcy56aCgpLk5rKCksdCk/dDp0aGlzLmlpKCl9LGguRWg9ZnVuY3Rpb24oKXtyZXR1cm4gVXVlKHRoaXMpfSxoLkZoPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC5HaD1mdW5jdGlvbigpe3ZhciB0LG47cmV0dXJuIG49dGhpcy4kaCgpLk9rKCksIW4mJnRoaXMuemgoKS5UayhuPSh3XygpLHQ9ajVlKFNkKHRoaXMuRGgoKSkpLHQ9PW51bGw/cnBlOm5ldyBUTyh0aGlzLHQpKSksbn0saC5IaD1mdW5jdGlvbih0LG4pe3JldHVybiB0fSxoLkloPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBuPXQucGsoKSxuP3QuTGooKTptcyh0aGlzLkRoKCksdCl9LGguSmg9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLnpoKCksdD90LlFrKCk6bnVsbH0saC5LaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnpoKCk/dGhpcy56aCgpLk5rKCk6bnVsbH0saC5MaD1mdW5jdGlvbih0LG4scil7cmV0dXJuIHJVKHRoaXMsdCxuLHIpfSxoLk1oPWZ1bmN0aW9uKHQpe3JldHVybiB0RSh0aGlzLHQpfSxoLk5oPWZ1bmN0aW9uKHQsbil7cmV0dXJuIE1vZSh0aGlzLHQsbil9LGguT2g9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLnpoKCksISF0JiZ0LlJrKCl9LGguUGg9ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgUXIpfSxoLlFoPWZ1bmN0aW9uKCl7cmV0dXJuIFhWKHRoaXMpfSxoLlJoPWZ1bmN0aW9uKHQsbixyLGEpe3JldHVybiBteCh0aGlzLHQsbixhKX0saC5TaD1mdW5jdGlvbih0LG4scil7dmFyIGE7cmV0dXJuIGE9bChNbih0aGlzLkRoKCksbiksNjkpLGEud2soKS56ayh0aGlzLHRoaXMuaGkoKSxuLXRoaXMuamkoKSx0LHIpfSxoLlRoPWZ1bmN0aW9uKHQsbixyLGEpe3JldHVybiBJSCh0aGlzLHQsbixhKX0saC5VaD1mdW5jdGlvbih0LG4scil7dmFyIGE7cmV0dXJuIGE9bChNbih0aGlzLkRoKCksbiksNjkpLGEud2soKS5Bayh0aGlzLHRoaXMuaGkoKSxuLXRoaXMuamkoKSx0LHIpfSxoLlZoPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLnpoKCkmJiEhdGhpcy56aCgpLlBrKCl9LGguV2g9ZnVuY3Rpb24odCl7cmV0dXJuIG51ZSh0aGlzLHQpfSxoLlhoPWZ1bmN0aW9uKHQpe3JldHVybiBnb3QodGhpcyx0KX0saC5aaD1mdW5jdGlvbih0KXtyZXR1cm4gQnZ0KHRoaXMsdCl9LGguJGg9ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgUXIpfSxoLl9oPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuemgoKT90aGlzLnpoKCkuUGsoKTpudWxsfSxoLmFpPWZ1bmN0aW9uKCl7cmV0dXJuIFhWKHRoaXMpfSxoLmJpPWZ1bmN0aW9uKHQsbil7JHVlKHRoaXMsdCxuKX0saC5jaT1mdW5jdGlvbih0KXt0aGlzLiRoKCkuU2sodCl9LGguZGk9ZnVuY3Rpb24odCl7dGhpcy4kaCgpLlZrKHQpfSxoLmVpPWZ1bmN0aW9uKHQpe3RoaXMuJGgoKS5Vayh0KX0saC5maT1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmO3JldHVybiBmPXRoaXMuSmgoKSxmJiZ0JiYobj1UbyhmLkVsKCksdGhpcyxuKSxmLklsKHRoaXMpKSxhPXRoaXMuUGgoKSxhJiYoc2xlKHRoaXMsdGhpcy5QaCgpLHRoaXMuRmgoKSkuQmImSW8/KG89YS5RaCgpLG8mJih0PyFmJiZvLklsKHRoaXMpOm8uSGwodGhpcykpKToobj0ocj10aGlzLkZoKCkscj49MD90aGlzLkFoKG4pOnRoaXMuUGgoKS5UaCh0aGlzLC0xLXIsbnVsbCxuKSksbj10aGlzLkNoKG51bGwsLTEsbikpKSx0aGlzLmRpKHQpLG59LGguZ2k9ZnVuY3Rpb24odCl7dmFyIG4scixhLG8sZixnLHcsRTtpZihyPXRoaXMuRGgoKSxmPW1zKHIsdCksbj10aGlzLmppKCksZj49bilyZXR1cm4gbCh0LDY5KS53aygpLkRrKHRoaXMsdGhpcy5oaSgpLGYtbik7aWYoZjw9LTEpaWYoZz1nNigoRWwoKSxpbykscix0KSxnKXtpZihGbygpLGwoZyw2OSkueGsoKXx8KGc9cngoaWMoaW8sZykpKSxvPShhPXRoaXMuSWgoZyksbChhPj0wP3RoaXMuTGgoYSwhMCwhMCk6SHcodGhpcyxnLCEwKSwxNjApKSxFPWcuSWsoKSxFPjF8fEU9PS0xKXJldHVybiBsKGwobywyMjApLlNsKHQsITEpLDc5KX1lbHNlIHRocm93IHVlKG5ldyBZbihPYit0LnhlKCkrJGZlKSk7ZWxzZSBpZih0LkprKCkpcmV0dXJuIGE9dGhpcy5JaCh0KSxsKGE+PTA/dGhpcy5MaChhLCExLCEwKTpIdyh0aGlzLHQsITEpLDc5KTtyZXR1cm4gdz1uZXcgSXR0KHRoaXMsdCksd30saC5oaT1mdW5jdGlvbigpe3JldHVybiBWNmUodGhpcyl9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4obGIoKSxWbikuU30saC5qaT1mdW5jdGlvbigpe3JldHVybiB5cih0aGlzLmlpKCkpfSxoLmtpPWZ1bmN0aW9uKHQpe0Z1ZSh0aGlzLHQpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIGcwKHRoaXMpfSxJKEduLCJCYXNpY0VPYmplY3RJbXBsIiw5OSk7dmFyIENfdDtEKDExOSw5OSx7MTEwOjEsOTQ6MSw5MzoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDExOToxfSksaC5saT1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbj1INmUodGhpcyksblt0XX0saC5taT1mdW5jdGlvbih0LG4pe3ZhciByO3I9SDZlKHRoaXMpLFRzKHIsdCxuKX0saC5uaT1mdW5jdGlvbih0KXt2YXIgbjtuPUg2ZSh0aGlzKSxUcyhuLHQsbnVsbCl9LGgudGg9ZnVuY3Rpb24oKXtyZXR1cm4gbChLbih0aGlzLDQpLDEyOSl9LGgudWg9ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgUXIpfSxoLnZoPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuRGImNCkhPTB9LGguemg9ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgUXIpfSxoLm9pPWZ1bmN0aW9uKHQpe3B4KHRoaXMsMix0KX0saC5CaD1mdW5jdGlvbih0LG4pe3RoaXMuRGI9bjw8MTZ8dGhpcy5EYiYyNTUsdGhpcy5vaSh0KX0saC5EaD1mdW5jdGlvbigpe3JldHVybiBzbCh0aGlzKX0saC5GaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLkRiPj4xNn0saC5HaD1mdW5jdGlvbigpe3ZhciB0LG47cmV0dXJuIHdfKCksbj1qNWUoU2QoKHQ9bChLbih0aGlzLDE2KSwyOSksdHx8dGhpcy5paSgpKSkpLG49PW51bGw/cnBlOm5ldyBUTyh0aGlzLG4pfSxoLndoPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuRGImMSk9PTB9LGguSmg9ZnVuY3Rpb24oKXtyZXR1cm4gbChLbih0aGlzLDEyOCksMjAzNCl9LGguS2g9ZnVuY3Rpb24oKXtyZXR1cm4gbChLbih0aGlzLDE2KSwyOSl9LGguT2g9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5EYiYzMikhPTB9LGguUGg9ZnVuY3Rpb24oKXtyZXR1cm4gbChLbih0aGlzLDIpLDU0KX0saC5WaD1mdW5jdGlvbigpe3JldHVybih0aGlzLkRiJjY0KSE9MH0saC4kaD1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyBRcil9LGguX2g9ZnVuY3Rpb24oKXtyZXR1cm4gbChLbih0aGlzLDY0KSwyODgpfSxoLmNpPWZ1bmN0aW9uKHQpe3B4KHRoaXMsMTYsdCl9LGguZGk9ZnVuY3Rpb24odCl7cHgodGhpcywxMjgsdCl9LGguZWk9ZnVuY3Rpb24odCl7cHgodGhpcyw2NCx0KX0saC5oaT1mdW5jdGlvbigpe3JldHVybiBLdSh0aGlzKX0saC5EYj0wLEkoR24sIk1pbmltYWxFT2JqZWN0SW1wbCIsMTE5KSxEKDEyMCwxMTksezExMDoxLDk0OjEsOTM6MSw1ODoxLDExNDoxLDU0OjEsOTk6MSwxMTk6MSwxMjA6MX0pLGgub2k9ZnVuY3Rpb24odCl7dGhpcy5DYj10fSxoLlBoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQ2J9LEkoR24sIk1pbmltYWxFT2JqZWN0SW1wbC9Db250YWluZXIiLDEyMCksRCgyMDgzLDEyMCx7MTEwOjEsMzQyOjEsOTY6MSw5NDoxLDkzOjEsNTg6MSwxMTQ6MSw1NDoxLDk5OjEsMTE5OjEsMTIwOjF9KSxoLkxoPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gc3hlKHRoaXMsdCxuLHIpfSxoLlVoPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gV3hlKHRoaXMsdCxuLHIpfSxoLldoPWZ1bmN0aW9uKHQpe3JldHVybiBaNWUodGhpcyx0KX0saC5iaT1mdW5jdGlvbih0LG4pe1Y3ZSh0aGlzLHQsbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gc3UoKSxUX3R9LGgua2k9ZnVuY3Rpb24odCl7TzdlKHRoaXMsdCl9LGgubmY9ZnVuY3Rpb24oKXtyZXR1cm4gZmR0KHRoaXMpfSxoLmdoPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubyYmKHRoaXMubz1uZXcgeGwoKHN1KCksQ2cpLEwyLHRoaXMsMCkpLHRoaXMub30saC5vZj1mdW5jdGlvbih0KXtyZXR1cm4gYXQodGhpcyx0KX0saC5wZj1mdW5jdGlvbih0KXtyZXR1cm4gUDEodGhpcyx0KX0saC5xZj1mdW5jdGlvbih0LG4pe3JldHVybiBIaSh0aGlzLHQsbil9LEkoc3YsIkVNYXBQcm9wZXJ0eUhvbGRlckltcGwiLDIwODMpLEQoNTcyLDEyMCx7MTEwOjEsMzc3OjEsOTQ6MSw5MzoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDExOToxLDEyMDoxfSxBUyksaC5MaD1mdW5jdGlvbih0LG4scil7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy5hO2Nhc2UgMTpyZXR1cm4gdGhpcy5ifXJldHVybiByVSh0aGlzLHQsbixyKX0saC5XaD1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLmEhPTA7Y2FzZSAxOnJldHVybiB0aGlzLmIhPTB9cmV0dXJuIG51ZSh0aGlzLHQpfSxoLmJpPWZ1bmN0aW9uKHQsbil7c3dpdGNoKHQpe2Nhc2UgMDpkVih0aGlzLHplKEdlKG4pKSk7cmV0dXJuO2Nhc2UgMTpmVih0aGlzLHplKEdlKG4pKSk7cmV0dXJufSR1ZSh0aGlzLHQsbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gc3UoKSx5X3R9LGgua2k9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgMDpkVih0aGlzLDApO3JldHVybjtjYXNlIDE6ZlYodGhpcywwKTtyZXR1cm59RnVlKHRoaXMsdCl9LGguSWI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdGhpcy5EYiY2ND9nMCh0aGlzKToodD1uZXcgQWYoZzAodGhpcykpLHQuYSs9IiAoeDogIixfNSh0LHRoaXMuYSksdC5hKz0iLCB5OiAiLF81KHQsdGhpcy5iKSx0LmErPSIpIix0LmEpfSxoLmE9MCxoLmI9MCxJKHN2LCJFbGtCZW5kUG9pbnRJbXBsIiw1NzIpLEQoNzM5LDIwODMsezExMDoxLDM0MjoxLDE2NzoxLDk2OjEsOTQ6MSw5MzoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDExOToxLDEyMDoxfSksaC5MaD1mdW5jdGlvbih0LG4scil7cmV0dXJuIGQ4ZSh0aGlzLHQsbixyKX0saC5TaD1mdW5jdGlvbih0LG4scil7cmV0dXJuIE11ZSh0aGlzLHQsbixyKX0saC5VaD1mdW5jdGlvbih0LG4scil7cmV0dXJuIGRjZSh0aGlzLHQsbixyKX0saC5XaD1mdW5jdGlvbih0KXtyZXR1cm4gXzdlKHRoaXMsdCl9LGguYmk9ZnVuY3Rpb24odCxuKXtUeGUodGhpcyx0LG4pfSxoLmlpPWZ1bmN0aW9uKCl7cmV0dXJuIHN1KCksa190fSxoLmtpPWZ1bmN0aW9uKHQpe2k4ZSh0aGlzLHQpfSxoLmpoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua30saC5raD1mdW5jdGlvbigpe3JldHVybiBFSCh0aGlzKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBqY2UodGhpcyl9LGguaz1udWxsLEkoc3YsIkVsa0dyYXBoRWxlbWVudEltcGwiLDczOSksRCg3NDAsNzM5LHsxMTA6MSwzNDI6MSwxNjc6MSw0MjI6MSw5NjoxLDk0OjEsOTM6MSw1ODoxLDExNDoxLDU0OjEsOTk6MSwxMTk6MSwxMjA6MX0pLGguTGg9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB4OGUodGhpcyx0LG4scil9LGguV2g9ZnVuY3Rpb24odCl7cmV0dXJuIF84ZSh0aGlzLHQpfSxoLmJpPWZ1bmN0aW9uKHQsbil7Q3hlKHRoaXMsdCxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBzdSgpLEVfdH0saC5raT1mdW5jdGlvbih0KXtOOGUodGhpcyx0KX0saC5saD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZ9LGgubWg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nfSxoLm5oPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaX0saC5vaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmp9LGgucGg9ZnVuY3Rpb24odCxuKXtGNSh0aGlzLHQsbil9LGgucWg9ZnVuY3Rpb24odCxuKXtRaCh0aGlzLHQsbil9LGgucmg9ZnVuY3Rpb24odCl7VXUodGhpcyx0KX0saC5zaD1mdW5jdGlvbih0KXtHdSh0aGlzLHQpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFB1ZSh0aGlzKX0saC5mPTAsaC5nPTAsaC5pPTAsaC5qPTAsSShzdiwiRWxrU2hhcGVJbXBsIiw3NDApLEQoNzQxLDc0MCx7MTEwOjEsMzQyOjEsODQ6MSwxNjc6MSw0MjI6MSw5NjoxLDk0OjEsOTM6MSw1ODoxLDExNDoxLDU0OjEsOTk6MSwxMTk6MSwxMjA6MX0pLGguTGg9ZnVuY3Rpb24odCxuLHIpe3JldHVybiBKOGUodGhpcyx0LG4scil9LGguU2g9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB2eGUodGhpcyx0LG4scil9LGguVWg9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB3eGUodGhpcyx0LG4scil9LGguV2g9ZnVuY3Rpb24odCl7cmV0dXJuIEg3ZSh0aGlzLHQpfSxoLmJpPWZ1bmN0aW9uKHQsbil7STllKHRoaXMsdCxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBzdSgpLHhfdH0saC5raT1mdW5jdGlvbih0KXtLOGUodGhpcyx0KX0saC5oaD1mdW5jdGlvbigpe3JldHVybiF0aGlzLmQmJih0aGlzLmQ9bmV3IExuKGpzLHRoaXMsOCw1KSksdGhpcy5kfSxoLmloPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZSYmKHRoaXMuZT1uZXcgTG4oanMsdGhpcyw3LDQpKSx0aGlzLmV9LEkoc3YsIkVsa0Nvbm5lY3RhYmxlU2hhcGVJbXBsIiw3NDEpLEQoMzI2LDczOSx7MTEwOjEsMzQyOjEsNzQ6MSwxNjc6MSwzMjY6MSw5NjoxLDk0OjEsOTM6MSw1ODoxLDExNDoxLDU0OjEsOTk6MSwxMTk6MSwxMjA6MX0sVEkpLGguQWg9ZnVuY3Rpb24odCl7cmV0dXJuIGd4ZSh0aGlzLHQpfSxoLkxoPWZ1bmN0aW9uKHQsbixyKXtzd2l0Y2godCl7Y2FzZSAzOnJldHVybiBXTyh0aGlzKTtjYXNlIDQ6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgTG4oX3IsdGhpcyw0LDcpKSx0aGlzLmI7Y2FzZSA1OnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IExuKF9yLHRoaXMsNSw4KSksdGhpcy5jO2Nhc2UgNjpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBudChjcyx0aGlzLDYsNikpLHRoaXMuYTtjYXNlIDc6cmV0dXJuIEhuKCksIXRoaXMuYiYmKHRoaXMuYj1uZXcgTG4oX3IsdGhpcyw0LDcpKSwhKHRoaXMuYi5pPD0xJiYoIXRoaXMuYyYmKHRoaXMuYz1uZXcgTG4oX3IsdGhpcyw1LDgpKSx0aGlzLmMuaTw9MSkpO2Nhc2UgODpyZXR1cm4gSG4oKSwhIXFBKHRoaXMpO2Nhc2UgOTpyZXR1cm4gSG4oKSwhIXF3KHRoaXMpO2Nhc2UgMTA6cmV0dXJuIEhuKCksIXRoaXMuYiYmKHRoaXMuYj1uZXcgTG4oX3IsdGhpcyw0LDcpKSx0aGlzLmIuaSE9MCYmKCF0aGlzLmMmJih0aGlzLmM9bmV3IExuKF9yLHRoaXMsNSw4KSksdGhpcy5jLmkhPTApfXJldHVybiBkOGUodGhpcyx0LG4scil9LGguU2g9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3N3aXRjaChuKXtjYXNlIDM6cmV0dXJuIHRoaXMuQ2ImJihyPShhPXRoaXMuRGI+PjE2LGE+PTA/Z3hlKHRoaXMscik6dGhpcy5DYi5UaCh0aGlzLC0xLWEsbnVsbCxyKSkpLFl5ZSh0aGlzLGwodCwyNykscik7Y2FzZSA0OnJldHVybiF0aGlzLmImJih0aGlzLmI9bmV3IExuKF9yLHRoaXMsNCw3KSksUnUodGhpcy5iLHQscik7Y2FzZSA1OnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IExuKF9yLHRoaXMsNSw4KSksUnUodGhpcy5jLHQscik7Y2FzZSA2OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IG50KGNzLHRoaXMsNiw2KSksUnUodGhpcy5hLHQscil9cmV0dXJuIE11ZSh0aGlzLHQsbixyKX0saC5VaD1mdW5jdGlvbih0LG4scil7c3dpdGNoKG4pe2Nhc2UgMzpyZXR1cm4gWXllKHRoaXMsbnVsbCxyKTtjYXNlIDQ6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgTG4oX3IsdGhpcyw0LDcpKSxUbyh0aGlzLmIsdCxyKTtjYXNlIDU6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgTG4oX3IsdGhpcyw1LDgpKSxUbyh0aGlzLmMsdCxyKTtjYXNlIDY6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgbnQoY3MsdGhpcyw2LDYpKSxUbyh0aGlzLmEsdCxyKX1yZXR1cm4gZGNlKHRoaXMsdCxuLHIpfSxoLldoPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIDM6cmV0dXJuISFXTyh0aGlzKTtjYXNlIDQ6cmV0dXJuISF0aGlzLmImJnRoaXMuYi5pIT0wO2Nhc2UgNTpyZXR1cm4hIXRoaXMuYyYmdGhpcy5jLmkhPTA7Y2FzZSA2OnJldHVybiEhdGhpcy5hJiZ0aGlzLmEuaSE9MDtjYXNlIDc6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgTG4oX3IsdGhpcyw0LDcpKSwhKHRoaXMuYi5pPD0xJiYoIXRoaXMuYyYmKHRoaXMuYz1uZXcgTG4oX3IsdGhpcyw1LDgpKSx0aGlzLmMuaTw9MSkpO2Nhc2UgODpyZXR1cm4gcUEodGhpcyk7Y2FzZSA5OnJldHVybiBxdyh0aGlzKTtjYXNlIDEwOnJldHVybiF0aGlzLmImJih0aGlzLmI9bmV3IExuKF9yLHRoaXMsNCw3KSksdGhpcy5iLmkhPTAmJighdGhpcy5jJiYodGhpcy5jPW5ldyBMbihfcix0aGlzLDUsOCkpLHRoaXMuYy5pIT0wKX1yZXR1cm4gXzdlKHRoaXMsdCl9LGguYmk9ZnVuY3Rpb24odCxuKXtzd2l0Y2godCl7Y2FzZSAzOkFVKHRoaXMsbChuLDI3KSk7cmV0dXJuO2Nhc2UgNDohdGhpcy5iJiYodGhpcy5iPW5ldyBMbihfcix0aGlzLDQsNykpLCRyKHRoaXMuYiksIXRoaXMuYiYmKHRoaXMuYj1uZXcgTG4oX3IsdGhpcyw0LDcpKSxBcyh0aGlzLmIsbChuLDE2KSk7cmV0dXJuO2Nhc2UgNTohdGhpcy5jJiYodGhpcy5jPW5ldyBMbihfcix0aGlzLDUsOCkpLCRyKHRoaXMuYyksIXRoaXMuYyYmKHRoaXMuYz1uZXcgTG4oX3IsdGhpcyw1LDgpKSxBcyh0aGlzLmMsbChuLDE2KSk7cmV0dXJuO2Nhc2UgNjohdGhpcy5hJiYodGhpcy5hPW5ldyBudChjcyx0aGlzLDYsNikpLCRyKHRoaXMuYSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgbnQoY3MsdGhpcyw2LDYpKSxBcyh0aGlzLmEsbChuLDE2KSk7cmV0dXJufVR4ZSh0aGlzLHQsbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gc3UoKSxmUGV9LGgua2k9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgMzpBVSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDQ6IXRoaXMuYiYmKHRoaXMuYj1uZXcgTG4oX3IsdGhpcyw0LDcpKSwkcih0aGlzLmIpO3JldHVybjtjYXNlIDU6IXRoaXMuYyYmKHRoaXMuYz1uZXcgTG4oX3IsdGhpcyw1LDgpKSwkcih0aGlzLmMpO3JldHVybjtjYXNlIDY6IXRoaXMuYSYmKHRoaXMuYT1uZXcgbnQoY3MsdGhpcyw2LDYpKSwkcih0aGlzLmEpO3JldHVybn1pOGUodGhpcyx0KX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBldnQodGhpcyl9LEkoc3YsIkVsa0VkZ2VJbXBsIiwzMjYpLEQoNDUyLDIwODMsezExMDoxLDM0MjoxLDE2NjoxLDQ1MjoxLDk2OjEsOTQ6MSw5MzoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDExOToxLDEyMDoxfSxyayksaC5BaD1mdW5jdGlvbih0KXtyZXR1cm4gbHhlKHRoaXMsdCl9LGguTGg9ZnVuY3Rpb24odCxuLHIpe3N3aXRjaCh0KXtjYXNlIDE6cmV0dXJuIHRoaXMuajtjYXNlIDI6cmV0dXJuIHRoaXMuaztjYXNlIDM6cmV0dXJuIHRoaXMuYjtjYXNlIDQ6cmV0dXJuIHRoaXMuYztjYXNlIDU6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgWXMocWgsdGhpcyw1KSksdGhpcy5hO2Nhc2UgNjpyZXR1cm4gbG90KHRoaXMpO2Nhc2UgNzpyZXR1cm4gbj9vdWUodGhpcyk6dGhpcy5pO2Nhc2UgODpyZXR1cm4gbj9hdWUodGhpcyk6dGhpcy5mO2Nhc2UgOTpyZXR1cm4hdGhpcy5nJiYodGhpcy5nPW5ldyBMbihjcyx0aGlzLDksMTApKSx0aGlzLmc7Y2FzZSAxMDpyZXR1cm4hdGhpcy5lJiYodGhpcy5lPW5ldyBMbihjcyx0aGlzLDEwLDkpKSx0aGlzLmU7Y2FzZSAxMTpyZXR1cm4gdGhpcy5kfXJldHVybiBzeGUodGhpcyx0LG4scil9LGguU2g9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZjtzd2l0Y2gobil7Y2FzZSA2OnJldHVybiB0aGlzLkNiJiYocj0obz10aGlzLkRiPj4xNixvPj0wP2x4ZSh0aGlzLHIpOnRoaXMuQ2IuVGgodGhpcywtMS1vLG51bGwscikpKSxXeWUodGhpcyxsKHQsNzQpLHIpO2Nhc2UgOTpyZXR1cm4hdGhpcy5nJiYodGhpcy5nPW5ldyBMbihjcyx0aGlzLDksMTApKSxSdSh0aGlzLmcsdCxyKTtjYXNlIDEwOnJldHVybiF0aGlzLmUmJih0aGlzLmU9bmV3IExuKGNzLHRoaXMsMTAsOSkpLFJ1KHRoaXMuZSx0LHIpfXJldHVybiBmPWwoTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8KHN1KCkscFkpKSxuKSw2OSksZi53aygpLnprKHRoaXMsS3UodGhpcyksbi15cigoc3UoKSxwWSkpLHQscil9LGguVWg9ZnVuY3Rpb24odCxuLHIpe3N3aXRjaChuKXtjYXNlIDU6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgWXMocWgsdGhpcyw1KSksVG8odGhpcy5hLHQscik7Y2FzZSA2OnJldHVybiBXeWUodGhpcyxudWxsLHIpO2Nhc2UgOTpyZXR1cm4hdGhpcy5nJiYodGhpcy5nPW5ldyBMbihjcyx0aGlzLDksMTApKSxUbyh0aGlzLmcsdCxyKTtjYXNlIDEwOnJldHVybiF0aGlzLmUmJih0aGlzLmU9bmV3IExuKGNzLHRoaXMsMTAsOSkpLFRvKHRoaXMuZSx0LHIpfXJldHVybiBXeGUodGhpcyx0LG4scil9LGguV2g9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgMTpyZXR1cm4gdGhpcy5qIT0wO2Nhc2UgMjpyZXR1cm4gdGhpcy5rIT0wO2Nhc2UgMzpyZXR1cm4gdGhpcy5iIT0wO2Nhc2UgNDpyZXR1cm4gdGhpcy5jIT0wO2Nhc2UgNTpyZXR1cm4hIXRoaXMuYSYmdGhpcy5hLmkhPTA7Y2FzZSA2OnJldHVybiEhbG90KHRoaXMpO2Nhc2UgNzpyZXR1cm4hIXRoaXMuaTtjYXNlIDg6cmV0dXJuISF0aGlzLmY7Y2FzZSA5OnJldHVybiEhdGhpcy5nJiZ0aGlzLmcuaSE9MDtjYXNlIDEwOnJldHVybiEhdGhpcy5lJiZ0aGlzLmUuaSE9MDtjYXNlIDExOnJldHVybiB0aGlzLmQhPW51bGx9cmV0dXJuIFo1ZSh0aGlzLHQpfSxoLmJpPWZ1bmN0aW9uKHQsbil7c3dpdGNoKHQpe2Nhc2UgMTpvRSh0aGlzLHplKEdlKG4pKSk7cmV0dXJuO2Nhc2UgMjp1RSh0aGlzLHplKEdlKG4pKSk7cmV0dXJuO2Nhc2UgMzphRSh0aGlzLHplKEdlKG4pKSk7cmV0dXJuO2Nhc2UgNDpjRSh0aGlzLHplKEdlKG4pKSk7cmV0dXJuO2Nhc2UgNTohdGhpcy5hJiYodGhpcy5hPW5ldyBZcyhxaCx0aGlzLDUpKSwkcih0aGlzLmEpLCF0aGlzLmEmJih0aGlzLmE9bmV3IFlzKHFoLHRoaXMsNSkpLEFzKHRoaXMuYSxsKG4sMTYpKTtyZXR1cm47Y2FzZSA2OloydCh0aGlzLGwobiw3NCkpO3JldHVybjtjYXNlIDc6eVYodGhpcyxsKG4sODQpKTtyZXR1cm47Y2FzZSA4OndWKHRoaXMsbChuLDg0KSk7cmV0dXJuO2Nhc2UgOTohdGhpcy5nJiYodGhpcy5nPW5ldyBMbihjcyx0aGlzLDksMTApKSwkcih0aGlzLmcpLCF0aGlzLmcmJih0aGlzLmc9bmV3IExuKGNzLHRoaXMsOSwxMCkpLEFzKHRoaXMuZyxsKG4sMTYpKTtyZXR1cm47Y2FzZSAxMDohdGhpcy5lJiYodGhpcy5lPW5ldyBMbihjcyx0aGlzLDEwLDkpKSwkcih0aGlzLmUpLCF0aGlzLmUmJih0aGlzLmU9bmV3IExuKGNzLHRoaXMsMTAsOSkpLEFzKHRoaXMuZSxsKG4sMTYpKTtyZXR1cm47Y2FzZSAxMTpwN2UodGhpcyxlaShuKSk7cmV0dXJufVY3ZSh0aGlzLHQsbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gc3UoKSxwWX0saC5raT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSAxOm9FKHRoaXMsMCk7cmV0dXJuO2Nhc2UgMjp1RSh0aGlzLDApO3JldHVybjtjYXNlIDM6YUUodGhpcywwKTtyZXR1cm47Y2FzZSA0OmNFKHRoaXMsMCk7cmV0dXJuO2Nhc2UgNTohdGhpcy5hJiYodGhpcy5hPW5ldyBZcyhxaCx0aGlzLDUpKSwkcih0aGlzLmEpO3JldHVybjtjYXNlIDY6WjJ0KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNzp5Vih0aGlzLG51bGwpO3JldHVybjtjYXNlIDg6d1YodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA5OiF0aGlzLmcmJih0aGlzLmc9bmV3IExuKGNzLHRoaXMsOSwxMCkpLCRyKHRoaXMuZyk7cmV0dXJuO2Nhc2UgMTA6IXRoaXMuZSYmKHRoaXMuZT1uZXcgTG4oY3MsdGhpcywxMCw5KSksJHIodGhpcy5lKTtyZXR1cm47Y2FzZSAxMTpwN2UodGhpcyxudWxsKTtyZXR1cm59TzdlKHRoaXMsdCl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gZDJ0KHRoaXMpfSxoLmI9MCxoLmM9MCxoLmQ9bnVsbCxoLmo9MCxoLms9MCxJKHN2LCJFbGtFZGdlU2VjdGlvbkltcGwiLDQ1MiksRCgxNTgsMTIwLHsxMTA6MSw5NDoxLDkzOjEsMTU1OjEsNTg6MSwxMTQ6MSw1NDoxLDk5OjEsMTU4OjEsMTE5OjEsMTIwOjF9KSxoLkxoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYTtyZXR1cm4gdD09MD8oIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLHRoaXMuQWIpOnNmKHRoaXMsdC15cih0aGlzLmlpKCkpLE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fHRoaXMuaWkoKSksdCksbixyKX0saC5TaD1mdW5jdGlvbih0LG4scil7dmFyIGEsbztyZXR1cm4gbj09MD8oIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLFJ1KHRoaXMuQWIsdCxyKSk6KG89bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHx0aGlzLmlpKCkpLG4pLDY5KSxvLndrKCkuemsodGhpcyxLdSh0aGlzKSxuLXlyKHRoaXMuaWkoKSksdCxyKSl9LGguVWg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG87cmV0dXJuIG49PTA/KCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxUbyh0aGlzLkFiLHQscikpOihvPWwoTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8dGhpcy5paSgpKSxuKSw2OSksby53aygpLkFrKHRoaXMsS3UodGhpcyksbi15cih0aGlzLmlpKCkpLHQscikpfSxoLldoPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiB0PT0wPyEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wOm5mKHRoaXMsdC15cih0aGlzLmlpKCkpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fHRoaXMuaWkoKSksdCkpfSxoLlpoPWZ1bmN0aW9uKHQpe3JldHVybiBIa2UodGhpcyx0KX0saC5iaT1mdW5jdGlvbih0LG4pe3ZhciByO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxBcyh0aGlzLkFiLGwobiwxNikpO3JldHVybn11Zih0aGlzLHQteXIodGhpcy5paSgpKSxNbigocj1sKEtuKHRoaXMsMTYpLDI5KSxyfHx0aGlzLmlpKCkpLHQpLG4pfSxoLmRpPWZ1bmN0aW9uKHQpe3B4KHRoaXMsMTI4LHQpfSxoLmlpPWZ1bmN0aW9uKCl7cmV0dXJuIFRuKCksSF90fSxoLmtpPWZ1bmN0aW9uKHQpe3ZhciBuO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpO3JldHVybn1jZih0aGlzLHQteXIodGhpcy5paSgpKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHx0aGlzLmlpKCkpLHQpKX0saC5waT1mdW5jdGlvbigpe3RoaXMuQmJ8PTF9LGgucWk9ZnVuY3Rpb24odCl7cmV0dXJuIFlBKHRoaXMsdCl9LGguQmI9MCxJKEduLCJFTW9kZWxFbGVtZW50SW1wbCIsMTU4KSxEKDcyMCwxNTgsezExMDoxLDk0OjEsOTM6MSw0ODA6MSwxNTU6MSw1ODoxLDExNDoxLDU0OjEsOTk6MSwxNTg6MSwxMTk6MSwxMjA6MX0sZnopLGgucmk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gTHZ0KHRoaXMsdCxuKX0saC5zaT1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmO2lmKHRoaXMuYSE9QWgodCl8fHQuQmImMjU2KXRocm93IHVlKG5ldyBZbihxZmUrdC56Yit0MykpO2ZvcihhPWRjKHQpO2R1KGEuYSkuaSE9MDspe2lmKHI9bChtUChhLDAsKG49bChPZShkdShhLmEpLDApLDg5KSxmPW4uYyxEZShmLDkwKT9sKGYsMjkpOihUbigpLEtmKSkpLDI5KSx6dyhyKSlyZXR1cm4gbz1BaChyKS53aSgpLnNpKHIpLGwobyw1NCkuY2kodCksbzthPWRjKHIpfXJldHVybih0LkQhPW51bGw/dC5EOnQuQik9PSJqYXZhLnV0aWwuTWFwJEVudHJ5Ij9uZXcgR2l0KHQpOm5ldyBGNGUodCl9LGgudGk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gS3codGhpcyx0LG4pfSxoLkxoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYTtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy5hfXJldHVybiBzZih0aGlzLHQteXIoKFRuKCksZW0pKSxNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHxlbSksdCksbixyKX0saC5TaD1mdW5jdGlvbih0LG4scil7dmFyIGEsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxSdSh0aGlzLkFiLHQscik7Y2FzZSAxOnJldHVybiB0aGlzLmEmJihyPWwodGhpcy5hLDU0KS5UaCh0aGlzLDQsdTEscikpLHI4ZSh0aGlzLGwodCwyNDEpLHIpfXJldHVybiBvPWwoTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8KFRuKCksZW0pKSxuKSw2OSksby53aygpLnprKHRoaXMsS3UodGhpcyksbi15cigoVG4oKSxlbSkpLHQscil9LGguVWg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksVG8odGhpcy5BYix0LHIpO2Nhc2UgMTpyZXR1cm4gcjhlKHRoaXMsbnVsbCxyKX1yZXR1cm4gbz1sKE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fChUbigpLGVtKSksbiksNjkpLG8ud2soKS5Bayh0aGlzLEt1KHRoaXMpLG4teXIoKFRuKCksZW0pKSx0LHIpfSxoLldoPWZ1bmN0aW9uKHQpe3ZhciBuO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiEhdGhpcy5hfXJldHVybiBuZih0aGlzLHQteXIoKFRuKCksZW0pKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHxlbSksdCkpfSxoLmJpPWZ1bmN0aW9uKHQsbil7dmFyIHI7c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksJHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLEFzKHRoaXMuQWIsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMTpYZ3QodGhpcyxsKG4sMjQxKSk7cmV0dXJufXVmKHRoaXMsdC15cigoVG4oKSxlbSkpLE1uKChyPWwoS24odGhpcywxNiksMjkpLHJ8fGVtKSx0KSxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBUbigpLGVtfSxoLmtpPWZ1bmN0aW9uKHQpe3ZhciBuO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6WGd0KHRoaXMsbnVsbCk7cmV0dXJufWNmKHRoaXMsdC15cigoVG4oKSxlbSkpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fGVtKSx0KSl9O3ZhciBqTSxiUGUsU190O0koR24sIkVGYWN0b3J5SW1wbCIsNzIwKSxEKDEwMzcsNzIwLHsxMTA6MSwyMTEzOjEsOTQ6MSw5MzoxLDQ4MDoxLDE1NToxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDE1ODoxLDExOToxLDEyMDoxfSxpayksaC5yaT1mdW5jdGlvbih0LG4pe3N3aXRjaCh0LmhrKCkpe2Nhc2UgMTI6cmV0dXJuIGwobiwxNDkpLlBnKCk7Y2FzZSAxMzpyZXR1cm4geGMobik7ZGVmYXVsdDp0aHJvdyB1ZShuZXcgWW4oeVQrdC54ZSgpK3QzKSl9fSxoLnNpPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvLGYsZyx3LEU7c3dpdGNoKHQuRz09LTEmJih0Lkc9KG49QWgodCksbj9mMihuLnZpKCksdCk6LTEpKSx0Lkcpe2Nhc2UgNDpyZXR1cm4gZj1uZXcgc2ssZjtjYXNlIDY6cmV0dXJuIGc9bmV3IGFfLGc7Y2FzZSA3OnJldHVybiB3PW5ldyBqd2UsdztjYXNlIDg6cmV0dXJuIGE9bmV3IFRJLGE7Y2FzZSA5OnJldHVybiByPW5ldyBBUyxyO2Nhc2UgMTA6cmV0dXJuIG89bmV3IHJrLG87Y2FzZSAxMTpyZXR1cm4gRT1uZXcgayQsRTtkZWZhdWx0OnRocm93IHVlKG5ldyBZbihxZmUrdC56Yit0MykpfX0saC50aT1mdW5jdGlvbih0LG4pe3N3aXRjaCh0LmhrKCkpe2Nhc2UgMTM6Y2FzZSAxMjpyZXR1cm4gbnVsbDtkZWZhdWx0OnRocm93IHVlKG5ldyBZbih5VCt0LnhlKCkrdDMpKX19LEkoc3YsIkVsa0dyYXBoRmFjdG9yeUltcGwiLDEwMzcpLEQoNDQ4LDE1OCx7MTEwOjEsOTQ6MSw5MzoxLDE1NToxLDE5NzoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDE1ODoxLDExOToxLDEyMDoxfSksaC5HaD1mdW5jdGlvbigpe3ZhciB0LG47cmV0dXJuIG49KHQ9bChLbih0aGlzLDE2KSwyOSksajVlKFNkKHR8fHRoaXMuaWkoKSkpKSxuPT1udWxsPyh3XygpLHdfKCkscnBlKTpuZXcgcHJ0KHRoaXMsbil9LGguTGg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnhlKCl9cmV0dXJuIHNmKHRoaXMsdC15cih0aGlzLmlpKCkpLE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fHRoaXMuaWkoKSksdCksbixyKX0saC5XaD1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbH1yZXR1cm4gbmYodGhpcyx0LXlyKHRoaXMuaWkoKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8dGhpcy5paSgpKSx0KSl9LGguYmk9ZnVuY3Rpb24odCxuKXt2YXIgcjtzd2l0Y2godCl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSwkcih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksQXModGhpcy5BYixsKG4sMTYpKTtyZXR1cm47Y2FzZSAxOnRoaXMudWkoZWkobikpO3JldHVybn11Zih0aGlzLHQteXIodGhpcy5paSgpKSxNbigocj1sKEtuKHRoaXMsMTYpLDI5KSxyfHx0aGlzLmlpKCkpLHQpLG4pfSxoLmlpPWZ1bmN0aW9uKCl7cmV0dXJuIFRuKCksVl90fSxoLmtpPWZ1bmN0aW9uKHQpe3ZhciBuO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6dGhpcy51aShudWxsKTtyZXR1cm59Y2YodGhpcyx0LXlyKHRoaXMuaWkoKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8dGhpcy5paSgpKSx0KSl9LGgueGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy56Yn0saC51aT1mdW5jdGlvbih0KXtGdSh0aGlzLHQpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIENBKHRoaXMpfSxoLnpiPW51bGwsSShHbiwiRU5hbWVkRWxlbWVudEltcGwiLDQ0OCksRCgxODQsNDQ4LHsxMTA6MSw5NDoxLDkzOjEsMTU1OjEsMTk3OjEsNTg6MSwyNDE6MSwxMTQ6MSw1NDoxLDk5OjEsMTU4OjEsMTg0OjEsMTE5OjEsMTIwOjEsNjkwOjF9LHFhdCksaC5BaD1mdW5jdGlvbih0KXtyZXR1cm4gb2d0KHRoaXMsdCl9LGguTGg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4gdGhpcy55YjtjYXNlIDM6cmV0dXJuIHRoaXMueGI7Y2FzZSA0OnJldHVybiB0aGlzLnNiO2Nhc2UgNTpyZXR1cm4hdGhpcy5yYiYmKHRoaXMucmI9bmV3IHd5KHRoaXMsbDEsdGhpcykpLHRoaXMucmI7Y2FzZSA2OnJldHVybiF0aGlzLnZiJiYodGhpcy52Yj1uZXcgVjgodTEsdGhpcyw2LDcpKSx0aGlzLnZiO2Nhc2UgNzpyZXR1cm4gbj90aGlzLkRiPj4xNj09Nz9sKHRoaXMuQ2IsMjQxKTpudWxsOm1vdCh0aGlzKX1yZXR1cm4gc2YodGhpcyx0LXlyKChUbigpLE8yKSksTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8TzIpLHQpLG4scil9LGguU2g9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZjtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxSdSh0aGlzLkFiLHQscik7Y2FzZSA0OnJldHVybiB0aGlzLnNiJiYocj1sKHRoaXMuc2IsNTQpLlRoKHRoaXMsMSxSTSxyKSksYThlKHRoaXMsbCh0LDQ4MCkscik7Y2FzZSA1OnJldHVybiF0aGlzLnJiJiYodGhpcy5yYj1uZXcgd3kodGhpcyxsMSx0aGlzKSksUnUodGhpcy5yYix0LHIpO2Nhc2UgNjpyZXR1cm4hdGhpcy52YiYmKHRoaXMudmI9bmV3IFY4KHUxLHRoaXMsNiw3KSksUnUodGhpcy52Yix0LHIpO2Nhc2UgNzpyZXR1cm4gdGhpcy5DYiYmKHI9KG89dGhpcy5EYj4+MTYsbz49MD9vZ3QodGhpcyxyKTp0aGlzLkNiLlRoKHRoaXMsLTEtbyxudWxsLHIpKSksTmgodGhpcyx0LDcscil9cmV0dXJuIGY9bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHwoVG4oKSxPMikpLG4pLDY5KSxmLndrKCkuemsodGhpcyxLdSh0aGlzKSxuLXlyKChUbigpLE8yKSksdCxyKX0saC5VaD1mdW5jdGlvbih0LG4scil7dmFyIGEsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxUbyh0aGlzLkFiLHQscik7Y2FzZSA0OnJldHVybiBhOGUodGhpcyxudWxsLHIpO2Nhc2UgNTpyZXR1cm4hdGhpcy5yYiYmKHRoaXMucmI9bmV3IHd5KHRoaXMsbDEsdGhpcykpLFRvKHRoaXMucmIsdCxyKTtjYXNlIDY6cmV0dXJuIXRoaXMudmImJih0aGlzLnZiPW5ldyBWOCh1MSx0aGlzLDYsNykpLFRvKHRoaXMudmIsdCxyKTtjYXNlIDc6cmV0dXJuIE5oKHRoaXMsbnVsbCw3LHIpfXJldHVybiBvPWwoTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8KFRuKCksTzIpKSxuKSw2OSksby53aygpLkFrKHRoaXMsS3UodGhpcyksbi15cigoVG4oKSxPMikpLHQscil9LGguV2g9ZnVuY3Rpb24odCl7dmFyIG47c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybiB0aGlzLnliIT1udWxsO2Nhc2UgMzpyZXR1cm4gdGhpcy54YiE9bnVsbDtjYXNlIDQ6cmV0dXJuISF0aGlzLnNiO2Nhc2UgNTpyZXR1cm4hIXRoaXMucmImJnRoaXMucmIuaSE9MDtjYXNlIDY6cmV0dXJuISF0aGlzLnZiJiZ0aGlzLnZiLmkhPTA7Y2FzZSA3OnJldHVybiEhbW90KHRoaXMpfXJldHVybiBuZih0aGlzLHQteXIoKFRuKCksTzIpKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHxPMiksdCkpfSxoLlpoPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBuPXdDbih0aGlzLHQpLG58fEhrZSh0aGlzLHQpfSxoLmJpPWZ1bmN0aW9uKHQsbil7dmFyIHI7c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksJHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLEFzKHRoaXMuQWIsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMTpGdSh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSAyOlNWKHRoaXMsZWkobikpO3JldHVybjtjYXNlIDM6Q1YodGhpcyxlaShuKSk7cmV0dXJuO2Nhc2UgNDpOdWUodGhpcyxsKG4sNDgwKSk7cmV0dXJuO2Nhc2UgNTohdGhpcy5yYiYmKHRoaXMucmI9bmV3IHd5KHRoaXMsbDEsdGhpcykpLCRyKHRoaXMucmIpLCF0aGlzLnJiJiYodGhpcy5yYj1uZXcgd3kodGhpcyxsMSx0aGlzKSksQXModGhpcy5yYixsKG4sMTYpKTtyZXR1cm47Y2FzZSA2OiF0aGlzLnZiJiYodGhpcy52Yj1uZXcgVjgodTEsdGhpcyw2LDcpKSwkcih0aGlzLnZiKSwhdGhpcy52YiYmKHRoaXMudmI9bmV3IFY4KHUxLHRoaXMsNiw3KSksQXModGhpcy52YixsKG4sMTYpKTtyZXR1cm59dWYodGhpcyx0LXlyKChUbigpLE8yKSksTW4oKHI9bChLbih0aGlzLDE2KSwyOSkscnx8TzIpLHQpLG4pfSxoLmVpPWZ1bmN0aW9uKHQpe3ZhciBuLHI7aWYodCYmdGhpcy5yYilmb3Iocj1uZXcgb3IodGhpcy5yYik7ci5lIT1yLmkuZ2MoKTspbj1ncihyKSxEZShuLDM2NCkmJihsKG4sMzY0KS53PW51bGwpO3B4KHRoaXMsNjQsdCl9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gVG4oKSxPMn0saC5raT1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSwkcih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOkZ1KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjpTVih0aGlzLG51bGwpO3JldHVybjtjYXNlIDM6Q1YodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA0Ok51ZSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDU6IXRoaXMucmImJih0aGlzLnJiPW5ldyB3eSh0aGlzLGwxLHRoaXMpKSwkcih0aGlzLnJiKTtyZXR1cm47Y2FzZSA2OiF0aGlzLnZiJiYodGhpcy52Yj1uZXcgVjgodTEsdGhpcyw2LDcpKSwkcih0aGlzLnZiKTtyZXR1cm59Y2YodGhpcyx0LXlyKChUbigpLE8yKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8TzIpLHQpKX0saC5waT1mdW5jdGlvbigpe3l1ZSh0aGlzKX0saC52aT1mdW5jdGlvbigpe3JldHVybiF0aGlzLnJiJiYodGhpcy5yYj1uZXcgd3kodGhpcyxsMSx0aGlzKSksdGhpcy5yYn0saC53aT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNifSxoLnhpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudWJ9LGgueWk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54Yn0saC56aT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnlifSxoLkFpPWZ1bmN0aW9uKHQpe3RoaXMudWI9dH0saC5JYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLkRiJjY0P0NBKHRoaXMpOih0PW5ldyBBZihDQSh0aGlzKSksdC5hKz0iIChuc1VSSTogIixYbyh0LHRoaXMueWIpLHQuYSs9IiwgbnNQcmVmaXg6ICIsWG8odCx0aGlzLnhiKSx0LmErPSIpIix0LmEpfSxoLnhiPW51bGwsaC55Yj1udWxsLEkoR24sIkVQYWNrYWdlSW1wbCIsMTg0KSxEKDU2OSwxODQsezExMDoxLDIxMTU6MSw1Njk6MSw5NDoxLDkzOjEsMTU1OjEsMTk3OjEsNTg6MSwyNDE6MSwxMTQ6MSw1NDoxLDk5OjEsMTU4OjEsMTg0OjEsMTE5OjEsMTIwOjEsNjkwOjF9LGsydCksaC5xPSExLGgucj0hMTt2YXIgX190PSExO0koc3YsIkVsa0dyYXBoUGFja2FnZUltcGwiLDU2OSksRCgzNjYsNzQwLHsxMTA6MSwzNDI6MSwxNjc6MSwxMzU6MSw0MjI6MSwzNjY6MSw5NjoxLDk0OjEsOTM6MSw1ODoxLDExNDoxLDU0OjEsOTk6MSwxMTk6MSwxMjA6MX0sc2spLGguQWg9ZnVuY3Rpb24odCl7cmV0dXJuIGh4ZSh0aGlzLHQpfSxoLkxoPWZ1bmN0aW9uKHQsbixyKXtzd2l0Y2godCl7Y2FzZSA3OnJldHVybiB2b3QodGhpcyk7Y2FzZSA4OnJldHVybiB0aGlzLmF9cmV0dXJuIHg4ZSh0aGlzLHQsbixyKX0saC5TaD1mdW5jdGlvbih0LG4scil7dmFyIGE7c3dpdGNoKG4pe2Nhc2UgNzpyZXR1cm4gdGhpcy5DYiYmKHI9KGE9dGhpcy5EYj4+MTYsYT49MD9oeGUodGhpcyxyKTp0aGlzLkNiLlRoKHRoaXMsLTEtYSxudWxsLHIpKSksSjRlKHRoaXMsbCh0LDE2Nykscil9cmV0dXJuIE11ZSh0aGlzLHQsbixyKX0saC5VaD1mdW5jdGlvbih0LG4scil7cmV0dXJuIG49PTc/SjRlKHRoaXMsbnVsbCxyKTpkY2UodGhpcyx0LG4scil9LGguV2g9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgNzpyZXR1cm4hIXZvdCh0aGlzKTtjYXNlIDg6cmV0dXJuIXZuKCIiLHRoaXMuYSl9cmV0dXJuIF84ZSh0aGlzLHQpfSxoLmJpPWZ1bmN0aW9uKHQsbil7c3dpdGNoKHQpe2Nhc2UgNzpVOWUodGhpcyxsKG4sMTY3KSk7cmV0dXJuO2Nhc2UgODpsN2UodGhpcyxlaShuKSk7cmV0dXJufUN4ZSh0aGlzLHQsbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gc3UoKSxkUGV9LGgua2k9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgNzpVOWUodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA4Omw3ZSh0aGlzLCIiKTtyZXR1cm59TjhlKHRoaXMsdCl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gbHB0KHRoaXMpfSxoLmE9IiIsSShzdiwiRWxrTGFiZWxJbXBsIiwzNjYpLEQoMjA3LDc0MSx7MTEwOjEsMzQyOjEsODQ6MSwxNjc6MSwyNzoxLDQyMjoxLDIwNzoxLDk2OjEsOTQ6MSw5MzoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDExOToxLDEyMDoxfSxhXyksaC5BaD1mdW5jdGlvbih0KXtyZXR1cm4gcHhlKHRoaXMsdCl9LGguTGg9ZnVuY3Rpb24odCxuLHIpe3N3aXRjaCh0KXtjYXNlIDk6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgbnQoSGwsdGhpcyw5LDkpKSx0aGlzLmM7Y2FzZSAxMDpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBudChBaSx0aGlzLDEwLDExKSksdGhpcy5hO2Nhc2UgMTE6cmV0dXJuIGRzKHRoaXMpO2Nhc2UgMTI6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgbnQoanMsdGhpcywxMiwzKSksdGhpcy5iO2Nhc2UgMTM6cmV0dXJuIEhuKCksIXRoaXMuYSYmKHRoaXMuYT1uZXcgbnQoQWksdGhpcywxMCwxMSkpLHRoaXMuYS5pPjB9cmV0dXJuIEo4ZSh0aGlzLHQsbixyKX0saC5TaD1mdW5jdGlvbih0LG4scil7dmFyIGE7c3dpdGNoKG4pe2Nhc2UgOTpyZXR1cm4hdGhpcy5jJiYodGhpcy5jPW5ldyBudChIbCx0aGlzLDksOSkpLFJ1KHRoaXMuYyx0LHIpO2Nhc2UgMTA6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgbnQoQWksdGhpcywxMCwxMSkpLFJ1KHRoaXMuYSx0LHIpO2Nhc2UgMTE6cmV0dXJuIHRoaXMuQ2ImJihyPShhPXRoaXMuRGI+PjE2LGE+PTA/cHhlKHRoaXMscik6dGhpcy5DYi5UaCh0aGlzLC0xLWEsbnVsbCxyKSkpLHM0ZSh0aGlzLGwodCwyNykscik7Y2FzZSAxMjpyZXR1cm4hdGhpcy5iJiYodGhpcy5iPW5ldyBudChqcyx0aGlzLDEyLDMpKSxSdSh0aGlzLmIsdCxyKX1yZXR1cm4gdnhlKHRoaXMsdCxuLHIpfSxoLlVoPWZ1bmN0aW9uKHQsbixyKXtzd2l0Y2gobil7Y2FzZSA5OnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IG50KEhsLHRoaXMsOSw5KSksVG8odGhpcy5jLHQscik7Y2FzZSAxMDpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBudChBaSx0aGlzLDEwLDExKSksVG8odGhpcy5hLHQscik7Y2FzZSAxMTpyZXR1cm4gczRlKHRoaXMsbnVsbCxyKTtjYXNlIDEyOnJldHVybiF0aGlzLmImJih0aGlzLmI9bmV3IG50KGpzLHRoaXMsMTIsMykpLFRvKHRoaXMuYix0LHIpfXJldHVybiB3eGUodGhpcyx0LG4scil9LGguV2g9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgOTpyZXR1cm4hIXRoaXMuYyYmdGhpcy5jLmkhPTA7Y2FzZSAxMDpyZXR1cm4hIXRoaXMuYSYmdGhpcy5hLmkhPTA7Y2FzZSAxMTpyZXR1cm4hIWRzKHRoaXMpO2Nhc2UgMTI6cmV0dXJuISF0aGlzLmImJnRoaXMuYi5pIT0wO2Nhc2UgMTM6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgbnQoQWksdGhpcywxMCwxMSkpLHRoaXMuYS5pPjB9cmV0dXJuIEg3ZSh0aGlzLHQpfSxoLmJpPWZ1bmN0aW9uKHQsbil7c3dpdGNoKHQpe2Nhc2UgOTohdGhpcy5jJiYodGhpcy5jPW5ldyBudChIbCx0aGlzLDksOSkpLCRyKHRoaXMuYyksIXRoaXMuYyYmKHRoaXMuYz1uZXcgbnQoSGwsdGhpcyw5LDkpKSxBcyh0aGlzLmMsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMTA6IXRoaXMuYSYmKHRoaXMuYT1uZXcgbnQoQWksdGhpcywxMCwxMSkpLCRyKHRoaXMuYSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgbnQoQWksdGhpcywxMCwxMSkpLEFzKHRoaXMuYSxsKG4sMTYpKTtyZXR1cm47Y2FzZSAxMTpMVSh0aGlzLGwobiwyNykpO3JldHVybjtjYXNlIDEyOiF0aGlzLmImJih0aGlzLmI9bmV3IG50KGpzLHRoaXMsMTIsMykpLCRyKHRoaXMuYiksIXRoaXMuYiYmKHRoaXMuYj1uZXcgbnQoanMsdGhpcywxMiwzKSksQXModGhpcy5iLGwobiwxNikpO3JldHVybn1JOWUodGhpcyx0LG4pfSxoLmlpPWZ1bmN0aW9uKCl7cmV0dXJuIHN1KCksZ1BlfSxoLmtpPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIDk6IXRoaXMuYyYmKHRoaXMuYz1uZXcgbnQoSGwsdGhpcyw5LDkpKSwkcih0aGlzLmMpO3JldHVybjtjYXNlIDEwOiF0aGlzLmEmJih0aGlzLmE9bmV3IG50KEFpLHRoaXMsMTAsMTEpKSwkcih0aGlzLmEpO3JldHVybjtjYXNlIDExOkxVKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTI6IXRoaXMuYiYmKHRoaXMuYj1uZXcgbnQoanMsdGhpcywxMiwzKSksJHIodGhpcy5iKTtyZXR1cm59SzhlKHRoaXMsdCl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gb2tlKHRoaXMpfSxJKHN2LCJFbGtOb2RlSW1wbCIsMjA3KSxEKDE5Myw3NDEsezExMDoxLDM0MjoxLDg0OjEsMTY3OjEsMTIzOjEsNDIyOjEsMTkzOjEsOTY6MSw5NDoxLDkzOjEsNTg6MSwxMTQ6MSw1NDoxLDk5OjEsMTE5OjEsMTIwOjF9LGp3ZSksaC5BaD1mdW5jdGlvbih0KXtyZXR1cm4gZnhlKHRoaXMsdCl9LGguTGg9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0PT05P00xKHRoaXMpOko4ZSh0aGlzLHQsbixyKX0saC5TaD1mdW5jdGlvbih0LG4scil7dmFyIGE7c3dpdGNoKG4pe2Nhc2UgOTpyZXR1cm4gdGhpcy5DYiYmKHI9KGE9dGhpcy5EYj4+MTYsYT49MD9meGUodGhpcyxyKTp0aGlzLkNiLlRoKHRoaXMsLTEtYSxudWxsLHIpKSksWHllKHRoaXMsbCh0LDI3KSxyKX1yZXR1cm4gdnhlKHRoaXMsdCxuLHIpfSxoLlVoPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbj09OT9YeWUodGhpcyxudWxsLHIpOnd4ZSh0aGlzLHQsbixyKX0saC5XaD1mdW5jdGlvbih0KXtyZXR1cm4gdD09OT8hIU0xKHRoaXMpOkg3ZSh0aGlzLHQpfSxoLmJpPWZ1bmN0aW9uKHQsbil7c3dpdGNoKHQpe2Nhc2UgOTp6OWUodGhpcyxsKG4sMjcpKTtyZXR1cm59STllKHRoaXMsdCxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBzdSgpLHBQZX0saC5raT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSA5Ono5ZSh0aGlzLG51bGwpO3JldHVybn1LOGUodGhpcyx0KX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBKYnQodGhpcyl9LEkoc3YsIkVsa1BvcnRJbXBsIiwxOTMpO3ZhciBBX3Q9a3MoU28sIkJhc2ljRU1hcC9FbnRyeSIpO0QoMTEyMiwxMjAsezExMDoxLDQ0OjEsOTQ6MSw5MzoxLDEzNjoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDExOToxLDEyMDoxfSxrJCksaC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR9LGgubGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIGZ3KHRoaXMpfSxoLkRpPWZ1bmN0aW9uKHQpe2g3ZSh0aGlzLGwodCwxNDkpKX0saC5MaD1mdW5jdGlvbih0LG4scil7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy5iO2Nhc2UgMTpyZXR1cm4gdGhpcy5jfXJldHVybiByVSh0aGlzLHQsbixyKX0saC5XaD1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiEhdGhpcy5iO2Nhc2UgMTpyZXR1cm4gdGhpcy5jIT1udWxsfXJldHVybiBudWUodGhpcyx0KX0saC5iaT1mdW5jdGlvbih0LG4pe3N3aXRjaCh0KXtjYXNlIDA6aDdlKHRoaXMsbChuLDE0OSkpO3JldHVybjtjYXNlIDE6dTdlKHRoaXMsbik7cmV0dXJufSR1ZSh0aGlzLHQsbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gc3UoKSxDZ30saC5raT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSAwOmg3ZSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDE6dTdlKHRoaXMsbnVsbCk7cmV0dXJufUZ1ZSh0aGlzLHQpfSxoLkJpPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHRoaXMuYT09LTEmJih0PXRoaXMuYix0aGlzLmE9dD9lcyh0KTowKSx0aGlzLmF9LGgubWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxoLkNpPWZ1bmN0aW9uKHQpe3RoaXMuYT10fSxoLm5kPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBuPXRoaXMuYyx1N2UodGhpcyx0KSxufSxoLkliPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHRoaXMuRGImNjQ/ZzAodGhpcyk6KHQ9bmV3IHRiLGhpKGhpKGhpKHQsdGhpcy5iP3RoaXMuYi5QZygpOnVsKSxQaGUpLGpfKHRoaXMuYykpLHQuYSl9LGguYT0tMSxoLmM9bnVsbDt2YXIgTDI9SShzdiwiRWxrUHJvcGVydHlUb1ZhbHVlTWFwRW50cnlJbXBsIiwxMTIyKTtEKDk5NiwxLHt9LFQkKSxJKG5vLCJKc29uQWRhcHRlciIsOTk2KSxEKDIxNiw2MyxscCxkZCksSShubywiSnNvbkltcG9ydEV4Y2VwdGlvbiIsMjE2KSxEKDg2OCwxLHt9LGNndCksSShubywiSnNvbkltcG9ydGVyIiw4NjgpLEQoOTAzLDEse30scHR0KSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDAkVHlwZSIsOTAzKSxEKDkwNCwxLHt9LGJ0dCksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQxJFR5cGUiLDkwNCksRCg5MTIsMSx7fSxGWGUpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMTAkVHlwZSIsOTEyKSxEKDkxNCwxLHt9LG10dCksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQxMSRUeXBlIiw5MTQpLEQoOTE1LDEse30sdnR0KSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDEyJFR5cGUiLDkxNSksRCg5MjEsMSx7fSxNYXQpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMTMkVHlwZSIsOTIxKSxEKDkyMCwxLHt9LERhdCksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQxNCRUeXBlIiw5MjApLEQoOTE2LDEse30sd3R0KSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDE1JFR5cGUiLDkxNiksRCg5MTcsMSx7fSx5dHQpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMTYkVHlwZSIsOTE3KSxEKDkxOCwxLHt9LHh0dCksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQxNyRUeXBlIiw5MTgpLEQoOTE5LDEse30sa3R0KSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDE4JFR5cGUiLDkxOSksRCg5MjQsMSx7fSxSWGUpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMTkkVHlwZSIsOTI0KSxEKDkwNSwxLHt9LGpYZSksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQyJFR5cGUiLDkwNSksRCg5MjIsMSx7fSwkWGUpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMjAkVHlwZSIsOTIyKSxEKDkyMywxLHt9LHpYZSksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQyMSRUeXBlIiw5MjMpLEQoOTI3LDEse30scVhlKSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDIyJFR5cGUiLDkyNyksRCg5MjUsMSx7fSxIWGUpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMjMkVHlwZSIsOTI1KSxEKDkyNiwxLHt9LFZYZSksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQyNCRUeXBlIiw5MjYpLEQoOTI5LDEse30sVVhlKSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDI1JFR5cGUiLDkyOSksRCg5MjgsMSx7fSxHWGUpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMjYkVHlwZSIsOTI4KSxEKDkzMCwxLGZyLEV0dCksaC5DZD1mdW5jdGlvbih0KXtPdm4odGhpcy5iLHRoaXMuYSxlaSh0KSl9LEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMjckVHlwZSIsOTMwKSxEKDkzMSwxLGZyLFR0dCksaC5DZD1mdW5jdGlvbih0KXtOdm4odGhpcy5iLHRoaXMuYSxlaSh0KSl9LEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMjgkVHlwZSIsOTMxKSxEKDkzMiwxLHt9LEN0dCksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQyOSRUeXBlIiw5MzIpLEQoOTA4LDEse30sS1hlKSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDMkVHlwZSIsOTA4KSxEKDkzMywxLHt9LFN0dCksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQzMCRUeXBlIiw5MzMpLEQoOTM0LDEse30sV1hlKSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDMxJFR5cGUiLDkzNCksRCg5MzUsMSx7fSxZWGUpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMzIkVHlwZSIsOTM1KSxEKDkzNiwxLHt9LFhYZSksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQzMyRUeXBlIiw5MzYpLEQoOTM3LDEse30sUVhlKSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDM0JFR5cGUiLDkzNyksRCg4NzAsMSx7fSxKWGUpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkMzUkVHlwZSIsODcwKSxEKDk0MSwxLHt9LHlpdCksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQzNiRUeXBlIiw5NDEpLEQoOTM4LDEsZnIsWlhlKSxoLkNkPWZ1bmN0aW9uKHQpe2ptbih0aGlzLmEsbCh0LDM3NykpfSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDM3JFR5cGUiLDkzOCksRCg5MzksMSxmcixfdHQpLGguQ2Q9ZnVuY3Rpb24odCl7eWxuKHRoaXMuYSx0aGlzLmIsbCh0LDE2NikpfSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDM4JFR5cGUiLDkzOSksRCg5NDAsMSxmcixBdHQpLGguQ2Q9ZnVuY3Rpb24odCl7eGxuKHRoaXMuYSx0aGlzLmIsbCh0LDE2NikpfSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDM5JFR5cGUiLDk0MCksRCg5MDYsMSx7fSxlUWUpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkNCRUeXBlIiw5MDYpLEQoOTQyLDEsZnIsdFFlKSxoLkNkPWZ1bmN0aW9uKHQpeyRtbih0aGlzLmEsbCh0LDgpKX0sSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQ0MCRUeXBlIiw5NDIpLEQoOTA3LDEse30sblFlKSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDUkVHlwZSIsOTA3KSxEKDkxMSwxLHt9LHJRZSksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQ2JFR5cGUiLDkxMSksRCg5MDksMSx7fSxpUWUpLEkobm8sIkpzb25JbXBvcnRlci9sYW1iZGEkNyRUeXBlIiw5MDkpLEQoOTEwLDEse30sc1FlKSxJKG5vLCJKc29uSW1wb3J0ZXIvbGFtYmRhJDgkVHlwZSIsOTEwKSxEKDkxMywxLHt9LGFRZSksSShubywiSnNvbkltcG9ydGVyL2xhbWJkYSQ5JFR5cGUiLDkxMyksRCg5NjEsMSxmcixvUWUpLGguQ2Q9ZnVuY3Rpb24odCl7SjgodGhpcy5hLG5ldyB5eShlaSh0KSkpfSxJKG5vLCJKc29uTWV0YURhdGFDb252ZXJ0ZXIvbGFtYmRhJDAkVHlwZSIsOTYxKSxEKDk2MiwxLGZyLGNRZSksaC5DZD1mdW5jdGlvbih0KXtEZ24odGhpcy5hLGwodCwyNDUpKX0sSShubywiSnNvbk1ldGFEYXRhQ29udmVydGVyL2xhbWJkYSQxJFR5cGUiLDk2MiksRCg5NjMsMSxmcix1UWUpLGguQ2Q9ZnVuY3Rpb24odCl7TTJuKHRoaXMuYSxsKHQsMTQzKSl9LEkobm8sIkpzb25NZXRhRGF0YUNvbnZlcnRlci9sYW1iZGEkMiRUeXBlIiw5NjMpLEQoOTY0LDEsZnIsbFFlKSxoLkNkPWZ1bmN0aW9uKHQpe0lnbih0aGlzLmEsbCh0LDE3MCkpfSxJKG5vLCJKc29uTWV0YURhdGFDb252ZXJ0ZXIvbGFtYmRhJDMkVHlwZSIsOTY0KSxEKDI0NSwyMix7MzoxLDM0OjEsMjI6MSwyNDU6MX0sUjgpO3ZhciBiWSxtWSxYZ2Usdlksd1kseVksUWdlLEpnZSx4WT1GcihJUCwiR3JhcGhGZWF0dXJlIiwyNDUsSHIscHduLGlkbiksTF90O0QoMTEsMSx7MzQ6MSwxNDk6MX0sVWksdnMscG4sSGEpLGguRmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFNobih0aGlzLGwodCwxNDkpKX0saC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gZW90KHRoaXMsdCl9LGguU2c9ZnVuY3Rpb24oKXtyZXR1cm4gSXQodGhpcyl9LGguUGc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHMyKHRoaXMuYil9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxJKElQLCJQcm9wZXJ0eSIsMTEpLEQoNjcxLDEsaWksTmllKSxoLk5lPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEI0bih0aGlzLGwodCw5NiksbChuLDk2KSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLk9lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWdCh0aGlzKX0sSShJUCwiUHJvcGVydHlIb2xkZXJDb21wYXJhdG9yIiw2NzEpLEQoNzA5LDEsT2EseXdlKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gRnZuKHRoaXMpfSxoLlFiPWZ1bmN0aW9uKCl7YVplKCl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYX0sSShxRywiRWxrR3JhcGhVdGlsL0FuY2VzdG9ySXRlcmF0b3IiLDcwOSk7dmFyIG1QZT1rcyhTbywiRUxpc3QiKTtEKDcwLDU2LHsyMDoxLDMxOjEsNTY6MSwxNjoxLDE1OjEsNzA6MSw2MToxfSksaC5iZD1mdW5jdGlvbih0LG4pe19BKHRoaXMsdCxuKX0saC5GYz1mdW5jdGlvbih0KXtyZXR1cm4gcXIodGhpcyx0KX0saC5jZD1mdW5jdGlvbih0LG4pe3JldHVybiBON2UodGhpcyx0LG4pfSxoLkdjPWZ1bmN0aW9uKHQpe3JldHVybiBBcyh0aGlzLHQpfSxoLklpPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBIOCh0aGlzKX0saC5KaT1mdW5jdGlvbigpe3JldHVybiBuZXcgQ08odGhpcyl9LGguS2k9ZnVuY3Rpb24odCl7cmV0dXJuIG1OKHRoaXMsdCl9LGguTGk9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5NaT1mdW5jdGlvbih0LG4pe30saC5OaT1mdW5jdGlvbigpe30saC5PaT1mdW5jdGlvbih0LG4pe05vZSh0aGlzLHQsbil9LGguUGk9ZnVuY3Rpb24odCxuLHIpe30saC5RaT1mdW5jdGlvbih0LG4pe30saC5SaT1mdW5jdGlvbih0LG4scil7fSxoLkZiPWZ1bmN0aW9uKHQpe3JldHVybiBCYnQodGhpcyx0KX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBNN2UodGhpcyl9LGguU2k9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5LYz1mdW5jdGlvbigpe3JldHVybiBuZXcgb3IodGhpcyl9LGguZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHE4KHRoaXMpfSxoLmZkPWZ1bmN0aW9uKHQpe3ZhciBuO2lmKG49dGhpcy5nYygpLHQ8MHx8dD5uKXRocm93IHVlKG5ldyBteSh0LG4pKTtyZXR1cm4gbmV3IGphZSh0aGlzLHQpfSxoLlVpPWZ1bmN0aW9uKHQsbil7dGhpcy5UaSh0LHRoaXMuZGQobikpfSxoLk1jPWZ1bmN0aW9uKHQpe3JldHVybiBzVih0aGlzLHQpfSxoLldpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG59LGguaGQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbjYodGhpcyx0LG4pfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFQ4ZSh0aGlzKX0saC5ZaT1mdW5jdGlvbigpe3JldHVybiEwfSxoLlppPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEVFKHRoaXMsbil9LEkoU28sIkFic3RyYWN0RUxpc3QiLDcwKSxEKDY2LDcwLEJkLFgyLEx3LFQ3ZSksaC5FaT1mdW5jdGlvbih0LG4pe3JldHVybiBEdWUodGhpcyx0LG4pfSxoLkZpPWZ1bmN0aW9uKHQpe3JldHVybiBPZHQodGhpcyx0KX0saC5HaT1mdW5jdGlvbih0LG4pe0lOKHRoaXMsdCxuKX0saC5IaT1mdW5jdGlvbih0KXt0Tih0aGlzLHQpfSxoLiRpPWZ1bmN0aW9uKHQpe3JldHVybiBSNmUodGhpcyx0KX0saC4kYj1mdW5jdGlvbigpe3VBKHRoaXMpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBqRSh0aGlzLHQpfSxoLlhiPWZ1bmN0aW9uKHQpe3JldHVybiBPZSh0aGlzLHQpfSxoLl9pPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYTsrK3RoaXMuaixyPXRoaXMuZz09bnVsbD8wOnRoaXMuZy5sZW5ndGgsdD5yJiYoYT10aGlzLmcsbj1yKyhyLzJ8MCkrNCxuPHQmJihuPXQpLHRoaXMuZz10aGlzLmFqKG4pLGEhPW51bGwmJnB1KGEsMCx0aGlzLmcsMCx0aGlzLmkpKX0saC5kZD1mdW5jdGlvbih0KXtyZXR1cm4gdGd0KHRoaXMsdCl9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pPT0wfSxoLlRpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEh1ZSh0aGlzLHQsbil9LGguYWo9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHdhLFJuLDEsdCw1LDEpfSxoLlZpPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdbdF19LGguZ2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHZ4KHRoaXMsdCl9LGguWGk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gVW9lKHRoaXMsdCxuKX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLml9LGguUGM9ZnVuY3Rpb24oKXtyZXR1cm4gYTZlKHRoaXMpfSxoLlFjPWZ1bmN0aW9uKHQpe3JldHVybiBPOGUodGhpcyx0KX0saC5pPTA7dmFyIHZQZT1JKFNvLCJCYXNpY0VMaXN0Iiw2Niksd1BlPWtzKFNvLCJUcmVlSXRlcmF0b3IiKTtEKDcwOCw2NixaZmUpLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmc9PW51bGwmJiF0aGlzLmM/SDVlKHRoaXMpOnRoaXMuZz09bnVsbHx8dGhpcy5pIT0wJiZsKHRoaXMuZ1t0aGlzLmktMV0sNTEpLk9iKCl9LGguUGI9ZnVuY3Rpb24oKXtyZXR1cm4gQ1UodGhpcyl9LGguUWI9ZnVuY3Rpb24oKXtpZighdGhpcy5lKXRocm93IHVlKG5ldyBuYygiVGhlcmUgaXMgbm8gdmFsaWQgb2JqZWN0IHRvIHJlbW92ZS4iKSk7dGhpcy5lLlFiKCl9LGguYz0hMSxJKFNvLCJBYnN0cmFjdFRyZWVJdGVyYXRvciIsNzA4KSxEKDcwMCw3MDgsWmZlLGh5ZSksaC5iaj1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbj1sKHQsNTgpLkdoKCkuS2MoKSxEZShuLDI4NykmJmwobiwyODcpLndsKG5ldyBYbmUpLG59LEkocUcsIkVsa0dyYXBoVXRpbC9Qcm9wZXJ0aWVzU2tpcHBpbmdUcmVlSXRlcmF0b3IiLDcwMCksRCg5NjUsMSx7fSxYbmUpLEkocUcsIkVsa0dyYXBoVXRpbC9Qcm9wZXJ0aWVzU2tpcHBpbmdUcmVlSXRlcmF0b3IvMSIsOTY1KTt2YXIgbEYsWmdlLGhGPUkocUcsIkVsa1JlZmxlY3QiLG51bGwpO0QoOTAxLDEsbjQsTFMpLGguUmc9ZnVuY3Rpb24odCl7cmV0dXJuIEJIKCksSTJuKGwodCwxODEpKX0sSShxRywiRWxrUmVmbGVjdC9sYW1iZGEkMCRUeXBlIiw5MDEpO3ZhciBRYjtrcyhTbywiUmVzb3VyY2VMb2NhdG9yIiksRCgxMDY1LDEse30pLEkoU28sIkRlbGVnYXRpbmdSZXNvdXJjZUxvY2F0b3IiLDEwNjUpLEQoMTA2NiwxMDY1LHt9KSxJKCJvcmcuZWNsaXBzZS5lbWYuY29tbW9uIiwiRU1GUGx1Z2luIiwxMDY2KTt2YXIgZXBlPWtzKFE0dCwiQWRhcHRlciIpLE9Pbj1rcyhRNHQsIk5vdGlmaWNhdGlvbiIpO0QoMTE3NCwxLFNTZSksaC5jaj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGguZGo9ZnVuY3Rpb24odCl7fSxoLmVqPWZ1bmN0aW9uKHQpe3RoaXMuZD10fSxoLmZqPWZ1bmN0aW9uKHQpe3RoaXMuZD09dCYmKHRoaXMuZD1udWxsKX0saC5kPW51bGwsSShSeCwiQWRhcHRlckltcGwiLDExNzQpLEQoMjA5Myw3MCxKNHQpLGguRWk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gQThlKHRoaXMsdCxuKX0saC5GaT1mdW5jdGlvbih0KXt2YXIgbixyLGE7aWYoKyt0aGlzLmosdC5kYygpKXJldHVybiExO2ZvcihuPXRoaXMuRWooKSxhPXQuS2MoKTthLk9iKCk7KXI9YS5QYigpLHRoaXMucmoodGhpcy5aaShuLHIpKSwrK247cmV0dXJuITB9LGguR2k9ZnVuY3Rpb24odCxuKXtNcnQodGhpcyx0LG4pfSxoLkhpPWZ1bmN0aW9uKHQpe3RhdCh0aGlzLHQpfSxoLnBqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2ooKX0saC4kYj1mdW5jdGlvbigpe0FPKHRoaXMsdGhpcy5FaigpLHRoaXMuRmooKSl9LGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudWoodCl9LGguSWM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudmoodCl9LGgucWo9ZnVuY3Rpb24odCxuKXt0aGlzLkJqKCkuVW0oKX0saC5yaj1mdW5jdGlvbih0KXt0aGlzLkJqKCkuVW0oKX0saC5zaj1mdW5jdGlvbigpe3JldHVybiB0aGlzLkJqKCl9LGgudGo9ZnVuY3Rpb24oKXt0aGlzLkJqKCkuVW0oKX0saC51aj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5CaigpLlVtKCl9LGgudmo9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuQmooKS5VbSgpfSxoLndqPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLkJqKCkuVW0oKX0saC54aj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5CaigpLlVtKCl9LGgueWo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5CaigpLlVtKCl9LGguemo9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuQmooKS5VbSgpfSxoLkFqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQmooKS5VbSgpfSxoLkNqPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLkJqKCkuVW0oKX0saC5Eaj1mdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLkJqKCkuVW0oKX0saC5Faj1mdW5jdGlvbigpe3JldHVybiB0aGlzLkJqKCkuVW0oKX0saC5Gaj1mdW5jdGlvbigpe3JldHVybiB0aGlzLkJqKCkuVW0oKX0saC5Haj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5CaigpLlVtKCl9LGguSGo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5CaigpLlVtKCl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMud2oodCl9LGguWGI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuV2kodCx0aGlzLnhqKHQpKX0saC5IYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnlqKCl9LGguZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuemoodCl9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5BaigpfSxoLlRpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFV4ZSh0aGlzLHQsbil9LGguVmk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueGoodCl9LGguZ2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHJIKHRoaXMsdCl9LGguTWM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIG49dGhpcy5kZCh0KSxuPj0wPyh0aGlzLmdkKG4pLCEwKTohMX0saC5YaT1mdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLkRqKHQsdGhpcy5aaSh0LG4pKX0saC5nYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkVqKCl9LGguUGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5GaigpfSxoLlFjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLkdqKHQpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSGooKX0sSShTbywiRGVsZWdhdGluZ0VMaXN0IiwyMDkzKSxEKDIwOTQsMjA5MyxKNHQpLGguRWk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gd2tlKHRoaXMsdCxuKX0saC5GaT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5FaSh0aGlzLkVqKCksdCl9LGguR2k9ZnVuY3Rpb24odCxuKXtFMnQodGhpcyx0LG4pfSxoLkhpPWZ1bmN0aW9uKHQpe2gydCh0aGlzLHQpfSxoLkxpPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuTWooKX0saC4kYj1mdW5jdGlvbigpe3RMKHRoaXMpfSxoLklqPWZ1bmN0aW9uKHQsbixyLGEsbyl7cmV0dXJuIG5ldyBaYXQodGhpcyx0LG4scixhLG8pfSxoLkpqPWZ1bmN0aW9uKHQpe05pKHRoaXMuamooKSx0KX0saC5Laj1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLkxqPWZ1bmN0aW9uKCl7cmV0dXJuLTF9LGguamo9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0saC5Naj1mdW5jdGlvbigpe3JldHVybiExfSxoLk5qPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG59LGguT2o9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbn0saC5Qaj1mdW5jdGlvbigpe3JldHVybiExfSxoLlFqPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuQWooKX0saC5UaT1mdW5jdGlvbih0LG4pe3ZhciByLGE7cmV0dXJuIHRoaXMuUGooKT8oYT10aGlzLlFqKCkscj1VeGUodGhpcyx0LG4pLHRoaXMuSmoodGhpcy5Jaig3LHB0KG4pLHIsdCxhKSkscik6VXhlKHRoaXMsdCxuKX0saC5nZD1mdW5jdGlvbih0KXt2YXIgbixyLGEsbztyZXR1cm4gdGhpcy5QaigpPyhyPW51bGwsYT10aGlzLlFqKCksbj10aGlzLklqKDQsbz1ySCh0aGlzLHQpLG51bGwsdCxhKSx0aGlzLk1qKCkmJm8/KHI9dGhpcy5PaihvLHIpLHI/KHIubmoobiksci5vaigpKTp0aGlzLkpqKG4pKTpyPyhyLm5qKG4pLHIub2ooKSk6dGhpcy5KaihuKSxvKToobz1ySCh0aGlzLHQpLHRoaXMuTWooKSYmbyYmKHI9dGhpcy5PaihvLG51bGwpLHImJnIub2ooKSksbyl9LGguWGk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gTW10KHRoaXMsdCxuKX0sSShSeCwiRGVsZWdhdGluZ05vdGlmeWluZ0xpc3RJbXBsIiwyMDk0KSxEKDE1MiwxLFlQKSxoLm5qPWZ1bmN0aW9uKHQpe3JldHVybiBNeGUodGhpcyx0KX0saC5vaj1mdW5jdGlvbigpe3FvZSh0aGlzKX0saC5naj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGguS2o9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0saC5Saj1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLmhqPWZ1bmN0aW9uKHQpe3JldHVybi0xfSxoLmlqPWZ1bmN0aW9uKCl7cmV0dXJuIG1idCh0aGlzKX0saC5qaj1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLmtqPWZ1bmN0aW9uKCl7cmV0dXJuIFg5ZSh0aGlzKX0saC5saj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm88MD90aGlzLm88LTI/LTItdGhpcy5vLTE6LTE6dGhpcy5vfSxoLlNqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGgubWo9ZnVuY3Rpb24odCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQjtzd2l0Y2godGhpcy5kKXtjYXNlIDE6Y2FzZSAyOnN3aXRjaChvPXQuZ2ooKSxvKXtjYXNlIDE6Y2FzZSAyOmlmKGY9dC5qaigpLHFlKGYpPT09cWUodGhpcy5qaigpKSYmdGhpcy5oaihudWxsKT09dC5oaihudWxsKSlyZXR1cm4gdGhpcy5nPXQuaWooKSx0LmdqKCk9PTEmJih0aGlzLmQ9MSksITB9Y2FzZSA0Ontzd2l0Y2gobz10LmdqKCksbyl7Y2FzZSA0OntpZihmPXQuamooKSxxZShmKT09PXFlKHRoaXMuamooKSkmJnRoaXMuaGoobnVsbCk9PXQuaGoobnVsbCkpcmV0dXJuIEM9QmtlKHRoaXMpLEU9dGhpcy5vPDA/dGhpcy5vPC0yPy0yLXRoaXMuby0xOi0xOnRoaXMubyxnPXQubGooKSx0aGlzLmQ9NixCPW5ldyBMdygyKSxFPD1nPyhxcihCLHRoaXMubikscXIoQix0LmtqKCkpLHRoaXMuZz1oZShsZShWciwxKSxkaSwyOCwxNSxbdGhpcy5vPUUsZysxXSkpOihxcihCLHQua2ooKSkscXIoQix0aGlzLm4pLHRoaXMuZz1oZShsZShWciwxKSxkaSwyOCwxNSxbdGhpcy5vPWcsRV0pKSx0aGlzLm49QixDfHwodGhpcy5vPS0yLXRoaXMuby0xKSwhMDticmVha319YnJlYWt9Y2FzZSA2Ontzd2l0Y2gobz10LmdqKCksbyl7Y2FzZSA0OntpZihmPXQuamooKSxxZShmKT09PXFlKHRoaXMuamooKSkmJnRoaXMuaGoobnVsbCk9PXQuaGoobnVsbCkpe2ZvcihDPUJrZSh0aGlzKSxnPXQubGooKSxMPWwodGhpcy5nLDUzKSxhPVdlKFZyLGRpLDI4LEwubGVuZ3RoKzEsMTUsMSksbj0wO248TC5sZW5ndGgmJih3PUxbbl0sdzw9Zyk7KWFbbisrXT13LCsrZztmb3Iocj1sKHRoaXMubiwxNSksci5iZChuLHQua2ooKSksYVtuXT1nOysrbjxhLmxlbmd0aDspYVtuXT1MW24tMV07cmV0dXJuIHRoaXMuZz1hLEN8fCh0aGlzLm89LTItYVswXSksITB9YnJlYWt9fWJyZWFrfX1yZXR1cm4hMX0saC5JYj1mdW5jdGlvbigpe3ZhciB0LG4scixhO3N3aXRjaChhPW5ldyBBZihfbSh0aGlzLlJtKSsiQCIrKG49ZXModGhpcyk+Pj4wLG4udG9TdHJpbmcoMTYpKSksYS5hKz0iIChldmVudFR5cGU6ICIsdGhpcy5kKXtjYXNlIDE6e2EuYSs9IlNFVCI7YnJlYWt9Y2FzZSAyOnthLmErPSJVTlNFVCI7YnJlYWt9Y2FzZSAzOnthLmErPSJBREQiO2JyZWFrfWNhc2UgNTp7YS5hKz0iQUREX01BTlkiO2JyZWFrfWNhc2UgNDp7YS5hKz0iUkVNT1ZFIjticmVha31jYXNlIDY6e2EuYSs9IlJFTU9WRV9NQU5ZIjticmVha31jYXNlIDc6e2EuYSs9Ik1PVkUiO2JyZWFrfWNhc2UgODp7YS5hKz0iUkVNT1ZJTkdfQURBUFRFUiI7YnJlYWt9Y2FzZSA5OnthLmErPSJSRVNPTFZFIjticmVha31kZWZhdWx0Ontpc2UoYSx0aGlzLmQpO2JyZWFrfX1pZihpbXQodGhpcykmJihhLmErPSIsIHRvdWNoOiB0cnVlIiksYS5hKz0iLCBwb3NpdGlvbjogIixpc2UoYSx0aGlzLm88MD90aGlzLm88LTI/LTItdGhpcy5vLTE6LTE6dGhpcy5vKSxhLmErPSIsIG5vdGlmaWVyOiAiLE9fKGEsdGhpcy5qaigpKSxhLmErPSIsIGZlYXR1cmU6ICIsT18oYSx0aGlzLktqKCkpLGEuYSs9Iiwgb2xkVmFsdWU6ICIsT18oYSxYOWUodGhpcykpLGEuYSs9IiwgbmV3VmFsdWU6ICIsdGhpcy5kPT02JiZEZSh0aGlzLmcsNTMpKXtmb3Iocj1sKHRoaXMuZyw1MyksYS5hKz0iWyIsdD0wO3Q8ci5sZW5ndGg7KWEuYSs9clt0XSwrK3Q8ci5sZW5ndGgmJihhLmErPUNvKTthLmErPSJdIn1lbHNlIE9fKGEsbWJ0KHRoaXMpKTtyZXR1cm4gYS5hKz0iLCBpc1RvdWNoOiAiLEdwKGEsaW10KHRoaXMpKSxhLmErPSIsIHdhc1NldDogIixHcChhLEJrZSh0aGlzKSksYS5hKz0iKSIsYS5hfSxoLmQ9MCxoLmU9MCxoLmY9MCxoLmo9MCxoLms9MCxoLm89MCxoLnA9MCxJKFJ4LCJOb3RpZmljYXRpb25JbXBsIiwxNTIpLEQoMTE4OCwxNTIsWVAsWmF0KSxoLktqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5LaigpfSxoLmhqPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmEuTGooKX0saC5qaj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuamooKX0sSShSeCwiRGVsZWdhdGluZ05vdGlmeWluZ0xpc3RJbXBsLzEiLDExODgpLEQoMjUxLDY2LEJkLEMkLG5iKSxoLkZjPWZ1bmN0aW9uKHQpe3JldHVybiBTMXQodGhpcyxsKHQsMzc4KSl9LGgubmo9ZnVuY3Rpb24odCl7cmV0dXJuIFMxdCh0aGlzLHQpfSxoLm9qPWZ1bmN0aW9uKCl7dmFyIHQsbixyO2Zvcih0PTA7dDx0aGlzLmk7Kyt0KW49bCh0aGlzLmdbdF0sMzc4KSxyPW4uamooKSxyIT1udWxsJiZuLmdqKCkhPS0xJiZsKHIsOTQpLnhoKG4pfSxoLmFqPWZ1bmN0aW9uKHQpe3JldHVybiBXZShPT24sUm4sMzc4LHQsMCwxKX0sSShSeCwiTm90aWZpY2F0aW9uQ2hhaW5JbXBsIiwyNTEpLEQoMTUyNCw5MyxsNHQpLGgudWg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lfSxoLndoPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuZiYxKSE9MH0saC5mPTEsSShSeCwiTm90aWZpZXJJbXBsIiwxNTI0KSxEKDIwOTEsNjYsQmQpLGguRWk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbGxlKHRoaXMsdCxuKX0saC5GaT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5FaSh0aGlzLmksdCl9LGguR2k9ZnVuY3Rpb24odCxuKXtFOWUodGhpcyx0LG4pfSxoLkhpPWZ1bmN0aW9uKHQpe1Z1ZSh0aGlzLHQpfSxoLkxpPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuTWooKX0saC4kYj1mdW5jdGlvbigpeyRyKHRoaXMpfSxoLklqPWZ1bmN0aW9uKHQsbixyLGEsbyl7cmV0dXJuIG5ldyBKYXQodGhpcyx0LG4scixhLG8pfSxoLkpqPWZ1bmN0aW9uKHQpe05pKHRoaXMuamooKSx0KX0saC5Laj1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLkxqPWZ1bmN0aW9uKCl7cmV0dXJuLTF9LGguamo9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0saC5Naj1mdW5jdGlvbigpe3JldHVybiExfSxoLlRqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGguTmo9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbn0saC5Paj1mdW5jdGlvbih0LG4pe3JldHVybiBufSxoLlBqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGguUWo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pIT0wfSxoLlRpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEFBKHRoaXMsdCxuKX0saC5nZD1mdW5jdGlvbih0KXtyZXR1cm4gVnkodGhpcyx0KX0saC5YaT1mdW5jdGlvbih0LG4pe3JldHVybiBLbXQodGhpcyx0LG4pfSxoLlVqPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG59LGguVmo9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbn0saC5Xaj1mdW5jdGlvbih0LG4scil7cmV0dXJuIHJ9LEkoUngsIk5vdGlmeWluZ0xpc3RJbXBsIiwyMDkxKSxEKDExODcsMTUyLFlQLEphdCksaC5Laj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuS2ooKX0saC5oaj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLkxqKCl9LGguamo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmpqKCl9LEkoUngsIk5vdGlmeWluZ0xpc3RJbXBsLzEiLDExODcpLEQoOTY2LDY2LEJkLE9ydCksaC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pPjEwPygoIXRoaXMuYnx8dGhpcy5jLmohPXRoaXMuYSkmJih0aGlzLmI9bmV3IFVfKHRoaXMpLHRoaXMuYT10aGlzLmopLFcwKHRoaXMuYix0KSk6akUodGhpcyx0KX0saC5ZaT1mdW5jdGlvbigpe3JldHVybiEwfSxoLmE9MCxJKFNvLCJBYnN0cmFjdEVMaXN0LzEiLDk2NiksRCgzMDIsNzcsc2hlLG15KSxJKFNvLCJBYnN0cmFjdEVMaXN0L0Jhc2ljSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiIsMzAyKSxEKDM3LDEsT2Esb3IpLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5Yaj1mdW5jdGlvbigpe2lmKHRoaXMuaS5qIT10aGlzLmYpdGhyb3cgdWUobmV3IFhoKX0saC5Zaj1mdW5jdGlvbigpe3JldHVybiBncih0aGlzKX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmUhPXRoaXMuaS5nYygpfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuWWooKX0saC5RYj1mdW5jdGlvbigpe2pBKHRoaXMpfSxoLmU9MCxoLmY9MCxoLmc9LTEsSShTbywiQWJzdHJhY3RFTGlzdC9FSXRlcmF0b3IiLDM3KSxEKDI4NiwzNyxsZyxxOCxqYWUpLGguUWI9ZnVuY3Rpb24oKXtqQSh0aGlzKX0saC5SYj1mdW5jdGlvbih0KXtEMXQodGhpcyx0KX0saC5aaj1mdW5jdGlvbigpe3ZhciB0O3RyeXtyZXR1cm4gdD10aGlzLmQuWGIoLS10aGlzLmUpLHRoaXMuWGooKSx0aGlzLmc9dGhpcy5lLHR9Y2F0Y2gobil7dGhyb3cgbj1icyhuKSxEZShuLDc3KT8odGhpcy5YaigpLHVlKG5ldyBfYykpOnVlKG4pfX0saC4kaj1mdW5jdGlvbih0KXtCZHQodGhpcyx0KX0saC5TYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmUhPTB9LGguVGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lfSxoLlViPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuWmooKX0saC5WYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmUtMX0saC5XYj1mdW5jdGlvbih0KXt0aGlzLiRqKHQpfSxJKFNvLCJBYnN0cmFjdEVMaXN0L0VMaXN0SXRlcmF0b3IiLDI4NiksRCgzNTUsMzcsT2EsSDgpLGguWWo9ZnVuY3Rpb24oKXtyZXR1cm4gcnVlKHRoaXMpfSxoLlFiPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0sSShTbywiQWJzdHJhY3RFTGlzdC9Ob25SZXNvbHZpbmdFSXRlcmF0b3IiLDM1NSksRCgzOTgsMjg2LGxnLENPLGY0ZSksaC5SYj1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLllqPWZ1bmN0aW9uKCl7dmFyIHQ7dHJ5e3JldHVybiB0PXRoaXMuYy5WaSh0aGlzLmUpLHRoaXMuWGooKSx0aGlzLmc9dGhpcy5lKyssdH1jYXRjaChuKXt0aHJvdyBuPWJzKG4pLERlKG4sNzcpPyh0aGlzLlhqKCksdWUobmV3IF9jKSk6dWUobil9fSxoLlpqPWZ1bmN0aW9uKCl7dmFyIHQ7dHJ5e3JldHVybiB0PXRoaXMuYy5WaSgtLXRoaXMuZSksdGhpcy5YaigpLHRoaXMuZz10aGlzLmUsdH1jYXRjaChuKXt0aHJvdyBuPWJzKG4pLERlKG4sNzcpPyh0aGlzLlhqKCksdWUobmV3IF9jKSk6dWUobil9fSxoLlFiPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC5XYj1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxJKFNvLCJBYnN0cmFjdEVMaXN0L05vblJlc29sdmluZ0VMaXN0SXRlcmF0b3IiLDM5OCksRCgyMDgwLDcwLFo0dCksaC5FaT1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHo7aWYobz1uLmdjKCksbyE9MCl7Zm9yKEM9bChLbih0aGlzLmEsNCksMTI5KSxMPUM9PW51bGw/MDpDLmxlbmd0aCx6PUwrbyxhPVNjZSh0aGlzLHopLEI9TC10LEI+MCYmcHUoQyx0LGEsdCtvLEIpLEU9bi5LYygpLGc9MDtnPG87KytnKXc9RS5QYigpLHI9dCtnLFhzZShhLHIsRUUodGhpcyx3KSk7Zm9yKFBFKHRoaXMsYSksZj0wO2Y8bzsrK2Ypdz1hW3RdLHRoaXMuTWkodCx3KSwrK3Q7cmV0dXJuITB9ZWxzZSByZXR1cm4rK3RoaXMuaiwhMX0saC5GaT1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7aWYoYT10LmdjKCksYSE9MCl7Zm9yKEU9KHI9bChLbih0aGlzLmEsNCksMTI5KSxyPT1udWxsPzA6ci5sZW5ndGgpLEM9RSthLG49U2NlKHRoaXMsQyksdz10LktjKCksZj1FO2Y8QzsrK2YpZz13LlBiKCksWHNlKG4sZixFRSh0aGlzLGcpKTtmb3IoUEUodGhpcyxuKSxvPUU7bzxDOysrbylnPW5bb10sdGhpcy5NaShvLGcpO3JldHVybiEwfWVsc2UgcmV0dXJuKyt0aGlzLmosITF9LGguR2k9ZnVuY3Rpb24odCxuKXt2YXIgcixhLG8sZjthPWwoS24odGhpcy5hLDQpLDEyOSksbz1hPT1udWxsPzA6YS5sZW5ndGgscj1TY2UodGhpcyxvKzEpLGY9RUUodGhpcyxuKSx0IT1vJiZwdShhLHQscix0KzEsby10KSxUcyhyLHQsZiksUEUodGhpcyxyKSx0aGlzLk1pKHQsbil9LGguSGk9ZnVuY3Rpb24odCl7dmFyIG4scixhO2E9KHI9bChLbih0aGlzLmEsNCksMTI5KSxyPT1udWxsPzA6ci5sZW5ndGgpLG49U2NlKHRoaXMsYSsxKSxYc2UobixhLEVFKHRoaXMsdCkpLFBFKHRoaXMsbiksdGhpcy5NaShhLHQpfSxoLklpPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBFdXQodGhpcyl9LGguSmk9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFBzdCh0aGlzKX0saC5LaT1mdW5jdGlvbih0KXt2YXIgbixyO2lmKHI9KG49bChLbih0aGlzLmEsNCksMTI5KSxuPT1udWxsPzA6bi5sZW5ndGgpLHQ8MHx8dD5yKXRocm93IHVlKG5ldyBteSh0LHIpKTtyZXR1cm4gbmV3IHhhdCh0aGlzLHQpfSxoLiRiPWZ1bmN0aW9uKCl7dmFyIHQsbjsrK3RoaXMuaix0PWwoS24odGhpcy5hLDQpLDEyOSksbj10PT1udWxsPzA6dC5sZW5ndGgsUEUodGhpcyxudWxsKSxOb2UodGhpcyxuLHQpfSxoLkhjPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvLGY7aWYobj1sKEtuKHRoaXMuYSw0KSwxMjkpLG4hPW51bGwpe2lmKHQhPW51bGwpe2ZvcihhPW4sbz0wLGY9YS5sZW5ndGg7bzxmOysrbylpZihyPWFbb10sUGkodCxyKSlyZXR1cm4hMH1lbHNlIGZvcihhPW4sbz0wLGY9YS5sZW5ndGg7bzxmOysrbylpZihyPWFbb10scWUocik9PT1xZSh0KSlyZXR1cm4hMH1yZXR1cm4hMX0saC5YYj1mdW5jdGlvbih0KXt2YXIgbixyO2lmKG49bChLbih0aGlzLmEsNCksMTI5KSxyPW49PW51bGw/MDpuLmxlbmd0aCx0Pj1yKXRocm93IHVlKG5ldyBteSh0LHIpKTtyZXR1cm4gblt0XX0saC5kZD1mdW5jdGlvbih0KXt2YXIgbixyLGE7aWYobj1sKEtuKHRoaXMuYSw0KSwxMjkpLG4hPW51bGwpe2lmKHQhPW51bGwpe2ZvcihyPTAsYT1uLmxlbmd0aDtyPGE7KytyKWlmKFBpKHQsbltyXSkpcmV0dXJuIHJ9ZWxzZSBmb3Iocj0wLGE9bi5sZW5ndGg7cjxhOysrcilpZihxZShuW3JdKT09PXFlKHQpKXJldHVybiByfXJldHVybi0xfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIGwoS24odGhpcy5hLDQpLDEyOSk9PW51bGx9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGt1dCh0aGlzKX0saC5lZD1mdW5jdGlvbigpe3JldHVybiBuZXcgTnN0KHRoaXMpfSxoLmZkPWZ1bmN0aW9uKHQpe3ZhciBuLHI7aWYocj0obj1sKEtuKHRoaXMuYSw0KSwxMjkpLG49PW51bGw/MDpuLmxlbmd0aCksdDwwfHx0PnIpdGhyb3cgdWUobmV3IG15KHQscikpO3JldHVybiBuZXcgeWF0KHRoaXMsdCl9LGguVGk9ZnVuY3Rpb24odCxuKXt2YXIgcixhLG87aWYocj16MXQodGhpcyksbz1yPT1udWxsPzA6ci5sZW5ndGgsdD49byl0aHJvdyB1ZShuZXcgdGMoUWZlK3QrYXYrbykpO2lmKG4+PW8pdGhyb3cgdWUobmV3IHRjKEpmZStuK2F2K28pKTtyZXR1cm4gYT1yW25dLHQhPW4mJih0PG4/cHUocix0LHIsdCsxLG4tdCk6cHUocixuKzEscixuLHQtbiksVHMocix0LGEpLFBFKHRoaXMscikpLGF9LGguVmk9ZnVuY3Rpb24odCl7cmV0dXJuIGwoS24odGhpcy5hLDQpLDEyOSlbdF19LGguZ2Q9ZnVuY3Rpb24odCl7cmV0dXJuIGJFbih0aGlzLHQpfSxoLlhpPWZ1bmN0aW9uKHQsbil7dmFyIHIsYTtyZXR1cm4gcj16MXQodGhpcyksYT1yW3RdLFhzZShyLHQsRUUodGhpcyxuKSksUEUodGhpcyxyKSxhfSxoLmdjPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9bChLbih0aGlzLmEsNCksMTI5KSx0PT1udWxsPzA6dC5sZW5ndGh9LGguUGM9ZnVuY3Rpb24oKXt2YXIgdCxuLHI7cmV0dXJuIHQ9bChLbih0aGlzLmEsNCksMTI5KSxyPXQ9PW51bGw/MDp0Lmxlbmd0aCxuPVdlKGVwZSxyMGUsNDI0LHIsMCwxKSxyPjAmJnB1KHQsMCxuLDAsciksbn0saC5RYz1mdW5jdGlvbih0KXt2YXIgbixyLGE7cmV0dXJuIG49bChLbih0aGlzLmEsNCksMTI5KSxhPW49PW51bGw/MDpuLmxlbmd0aCxhPjAmJih0Lmxlbmd0aDxhJiYocj1iTihiaCh0KS5jLGEpLHQ9cikscHUobiwwLHQsMCxhKSksdC5sZW5ndGg+YSYmVHModCxhLG51bGwpLHR9O3ZhciBNX3Q7SShTbywiQXJyYXlEZWxlZ2F0aW5nRUxpc3QiLDIwODApLEQoMTA1MSwzNyxPYSxrdXQpLGguWGo9ZnVuY3Rpb24oKXtpZih0aGlzLmIuaiE9dGhpcy5mfHxxZShsKEtuKHRoaXMuYi5hLDQpLDEyOSkpIT09cWUodGhpcy5hKSl0aHJvdyB1ZShuZXcgWGgpfSxoLlFiPWZ1bmN0aW9uKCl7akEodGhpcyksdGhpcy5hPWwoS24odGhpcy5iLmEsNCksMTI5KX0sSShTbywiQXJyYXlEZWxlZ2F0aW5nRUxpc3QvRUl0ZXJhdG9yIiwxMDUxKSxEKDcyMiwyODYsbGcsTnN0LHlhdCksaC5Yaj1mdW5jdGlvbigpe2lmKHRoaXMuYi5qIT10aGlzLmZ8fHFlKGwoS24odGhpcy5iLmEsNCksMTI5KSkhPT1xZSh0aGlzLmEpKXRocm93IHVlKG5ldyBYaCl9LGguJGo9ZnVuY3Rpb24odCl7QmR0KHRoaXMsdCksdGhpcy5hPWwoS24odGhpcy5iLmEsNCksMTI5KX0saC5RYj1mdW5jdGlvbigpe2pBKHRoaXMpLHRoaXMuYT1sKEtuKHRoaXMuYi5hLDQpLDEyOSl9LEkoU28sIkFycmF5RGVsZWdhdGluZ0VMaXN0L0VMaXN0SXRlcmF0b3IiLDcyMiksRCgxMDUyLDM1NSxPYSxFdXQpLGguWGo9ZnVuY3Rpb24oKXtpZih0aGlzLmIuaiE9dGhpcy5mfHxxZShsKEtuKHRoaXMuYi5hLDQpLDEyOSkpIT09cWUodGhpcy5hKSl0aHJvdyB1ZShuZXcgWGgpfSxJKFNvLCJBcnJheURlbGVnYXRpbmdFTGlzdC9Ob25SZXNvbHZpbmdFSXRlcmF0b3IiLDEwNTIpLEQoNzIzLDM5OCxsZyxQc3QseGF0KSxoLlhqPWZ1bmN0aW9uKCl7aWYodGhpcy5iLmohPXRoaXMuZnx8cWUobChLbih0aGlzLmIuYSw0KSwxMjkpKSE9PXFlKHRoaXMuYSkpdGhyb3cgdWUobmV3IFhoKX0sSShTbywiQXJyYXlEZWxlZ2F0aW5nRUxpc3QvTm9uUmVzb2x2aW5nRUxpc3RJdGVyYXRvciIsNzIzKSxEKDYxNSwzMDIsc2hlLFZzZSksSShTbywiQmFzaWNFTGlzdC9CYXNpY0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24iLDYxNSksRCg3MTAsNjYsQmQsZXllKSxoLmJkPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IFFyKX0saC5GYz1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLmNkPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IFFyKX0saC5HYz1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLiRiPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC5faT1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSWkoKX0saC5lZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLkppKCl9LGguZmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuS2kodCl9LGguVGk9ZnVuY3Rpb24odCxuKXt0aHJvdyB1ZShuZXcgUXIpfSxoLlVpPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IFFyKX0saC5nZD1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLk1jPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGguaGQ9ZnVuY3Rpb24odCxuKXt0aHJvdyB1ZShuZXcgUXIpfSxJKFNvLCJCYXNpY0VMaXN0L1VubW9kaWZpYWJsZUVMaXN0Iiw3MTApLEQoNzIxLDEsezM6MSwyMDoxLDE2OjEsMTU6MSw2MToxLDU5NzoxfSksaC5iZD1mdW5jdGlvbih0LG4pe2dobih0aGlzLHQsbChuLDQ0KSl9LGguRmM9ZnVuY3Rpb24odCl7cmV0dXJuIG9mbih0aGlzLGwodCw0NCkpfSxoLkpjPWZ1bmN0aW9uKHQpe3RvKHRoaXMsdCl9LGguWGI9ZnVuY3Rpb24odCl7cmV0dXJuIGwoT2UodGhpcy5jLHQpLDEzNil9LGguVGk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbCh0aGlzLmMuVGkodCxuKSw0NCl9LGguVWk9ZnVuY3Rpb24odCxuKXtwaG4odGhpcyx0LGwobiw0NCkpfSxoLkxjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyBrbih0aGlzLDE2KSl9LGguZ2Q9ZnVuY3Rpb24odCl7cmV0dXJuIGwodGhpcy5jLmdkKHQpLDQ0KX0saC5oZD1mdW5jdGlvbih0LG4pe3JldHVybiBNZ24odGhpcyx0LGwobiw0NCkpfSxoLmpkPWZ1bmN0aW9uKHQpeyRtKHRoaXMsdCl9LGguTmM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGtuKHRoaXMsMTYpfSxoLk9jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBibihudWxsLG5ldyBrbih0aGlzLDE2KSl9LGguY2Q9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5jLmNkKHQsbil9LGguR2M9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYy5HYyh0KX0saC4kYj1mdW5jdGlvbigpe3RoaXMuYy4kYigpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmMuSGModCl9LGguSWM9ZnVuY3Rpb24odCl7cmV0dXJuIEVOKHRoaXMuYyx0KX0saC5faj1mdW5jdGlvbigpe3ZhciB0LG4scjtpZih0aGlzLmQ9PW51bGwpe2Zvcih0aGlzLmQ9V2UodlBlLF9TZSw2NiwyKnRoaXMuZisxLDAsMSkscj10aGlzLmUsdGhpcy5mPTAsbj10aGlzLmMuS2MoKTtuLmUhPW4uaS5nYygpOyl0PWwobi5ZaigpLDEzNiksb1UodGhpcyx0KTt0aGlzLmU9cn19LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIGNpdCh0aGlzLHQpfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIE03ZSh0aGlzLmMpfSxoLmRkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmMuZGQodCl9LGguYWs9ZnVuY3Rpb24oKXt0aGlzLmM9bmV3IGhRZSh0aGlzKX0saC5kYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmY9PTB9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLktjKCl9LGguZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmVkKCl9LGguZmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYy5mZCh0KX0saC5iaz1mdW5jdGlvbigpe3JldHVybiBpTih0aGlzKX0saC5jaz1mdW5jdGlvbih0LG4scil7cmV0dXJuIG5ldyB4aXQodCxuLHIpfSxoLmRrPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTJH0saC5NYz1mdW5jdGlvbih0KXtyZXR1cm4gV2h0KHRoaXMsdCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mfSxoLmtkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG5ldyBacCh0aGlzLmMsdCxuKX0saC5QYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuUGMoKX0saC5RYz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jLlFjKHQpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFQ4ZSh0aGlzLmMpfSxoLmU9MCxoLmY9MCxJKFNvLCJCYXNpY0VNYXAiLDcyMSksRCgxMDQ2LDY2LEJkLGhRZSksaC5NaT1mdW5jdGlvbih0LG4pe0djbih0aGlzLGwobiwxMzYpKX0saC5QaT1mdW5jdGlvbih0LG4scil7dmFyIGE7KysoYT10aGlzLGwobiwxMzYpLGEpLmEuZX0saC5RaT1mdW5jdGlvbih0LG4pe0tjbih0aGlzLGwobiwxMzYpKX0saC5SaT1mdW5jdGlvbih0LG4scil7R2huKHRoaXMsbChuLDEzNiksbChyLDEzNikpfSxoLk9pPWZ1bmN0aW9uKHQsbil7emZ0KHRoaXMuYSl9LEkoU28sIkJhc2ljRU1hcC8xIiwxMDQ2KSxEKDEwNDcsNjYsQmQsUyQpLGguYWo9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKE5PbixlNXQsNjIxLHQsMCwxKX0sSShTbywiQmFzaWNFTWFwLzIiLDEwNDcpLEQoMTA0OCxxMSxUbCxmUWUpLGguJGI9ZnVuY3Rpb24oKXt0aGlzLmEuYy4kYigpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBLY2UodGhpcy5hLHQpfSxoLktjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5mPT0wPyhGaygpLGZGLmEpOm5ldyBXSmUodGhpcy5hKX0saC5NYz1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbj10aGlzLmEuZixZVih0aGlzLmEsdCksdGhpcy5hLmYhPW59LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmZ9LEkoU28sIkJhc2ljRU1hcC8zIiwxMDQ4KSxEKDEwNDksMzEsV3ksZFFlKSxoLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLmMuJGIoKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gRmJ0KHRoaXMuYSx0KX0saC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZj09MD8oRmsoKSxmRi5hKTpuZXcgWUplKHRoaXMuYSl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmZ9LEkoU28sIkJhc2ljRU1hcC80IiwxMDQ5KSxEKDEwNTAscTEsVGwsZ1FlKSxoLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLmMuJGIoKX0saC5IYz1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7aWYodGhpcy5hLmY+MCYmRGUodCw0NCkmJih0aGlzLmEuX2ooKSxFPWwodCw0NCksdz1FLmxkKCksbz13PT1udWxsPzA6ZXModyksZj1ReWUodGhpcy5hLG8pLG49dGhpcy5hLmRbZl0sbikpe2ZvcihyPWwobi5nLDM3OSksQz1uLmksZz0wO2c8QzsrK2cpaWYoYT1yW2ddLGEuQmkoKT09byYmYS5GYihFKSlyZXR1cm4hMH1yZXR1cm4hMX0saC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZj09MD8oRmsoKSxmRi5hKTpuZXcgbm9lKHRoaXMuYSl9LGguTWM9ZnVuY3Rpb24odCl7cmV0dXJuIEEydCh0aGlzLHQpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5mfSxJKFNvLCJCYXNpY0VNYXAvNSIsMTA1MCksRCg2MjIsMSxPYSxub2UpLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5PYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIhPS0xfSxoLlBiPWZ1bmN0aW9uKCl7dmFyIHQ7aWYodGhpcy5mLmUhPXRoaXMuYyl0aHJvdyB1ZShuZXcgWGgpO2lmKHRoaXMuYj09LTEpdGhyb3cgdWUobmV3IF9jKTtyZXR1cm4gdGhpcy5kPXRoaXMuYSx0aGlzLmU9dGhpcy5iLGdndCh0aGlzKSx0PWwodGhpcy5mLmRbdGhpcy5kXS5nW3RoaXMuZV0sMTM2KSx0aGlzLmVrKHQpfSxoLlFiPWZ1bmN0aW9uKCl7aWYodGhpcy5mLmUhPXRoaXMuYyl0aHJvdyB1ZShuZXcgWGgpO2lmKHRoaXMuZT09LTEpdGhyb3cgdWUobmV3IHBsKTt0aGlzLmYuYy5NYyhPZSh0aGlzLmYuZFt0aGlzLmRdLHRoaXMuZSkpLHRoaXMuYz10aGlzLmYuZSx0aGlzLmU9LTEsdGhpcy5hPT10aGlzLmQmJnRoaXMuYiE9LTEmJi0tdGhpcy5ifSxoLmVrPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxoLmE9MCxoLmI9LTEsaC5jPTAsaC5kPTAsaC5lPTAsSShTbywiQmFzaWNFTWFwL0Jhc2ljRU1hcEl0ZXJhdG9yIiw2MjIpLEQoMTA0NCw2MjIsT2EsV0plKSxoLmVrPWZ1bmN0aW9uKHQpe3JldHVybiB0LmxkKCl9LEkoU28sIkJhc2ljRU1hcC9CYXNpY0VNYXBLZXlJdGVyYXRvciIsMTA0NCksRCgxMDQ1LDYyMixPYSxZSmUpLGguZWs9ZnVuY3Rpb24odCl7cmV0dXJuIHQubWQoKX0sSShTbywiQmFzaWNFTWFwL0Jhc2ljRU1hcFZhbHVlSXRlcmF0b3IiLDEwNDUpLEQoMTA0MywxLFd3LHBRZSksaC53Yz1mdW5jdGlvbih0KXttQSh0aGlzLHQpfSxoLnljPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gcWNlKHRoaXMsdCxuLHIpfSxoLiRiPWZ1bmN0aW9uKCl7dGhpcy5hLmMuJGIoKX0saC5fYj1mdW5jdGlvbih0KXtyZXR1cm4gTXR0KHRoaXMsdCl9LGgudWM9ZnVuY3Rpb24odCl7cmV0dXJuIEZidCh0aGlzLmEsdCl9LGgudmM9ZnVuY3Rpb24oKXtyZXR1cm4gcHZuKHRoaXMuYSl9LGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIGNpdCh0aGlzLmEsdCl9LGgueGM9ZnVuY3Rpb24odCl7cmV0dXJuIG4xKHRoaXMuYSx0KX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBNN2UodGhpcy5hLmMpfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5mPT0wfSxoLmVjPWZ1bmN0aW9uKCl7cmV0dXJuIGR2bih0aGlzLmEpfSxoLnpjPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEdOKHRoaXMuYSx0LG4pfSxoLkJjPWZ1bmN0aW9uKHQpe3JldHVybiBZVih0aGlzLmEsdCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmZ9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gVDhlKHRoaXMuYS5jKX0saC5DYz1mdW5jdGlvbigpe3JldHVybiBndm4odGhpcy5hKX0sSShTbywiQmFzaWNFTWFwL0RlbGVnYXRpbmdNYXAiLDEwNDMpLEQoNjIxLDEsezQ0OjEsMTM2OjEsNjIxOjF9LHhpdCksaC5GYj1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gRGUodCw0NCk/KG49bCh0LDQ0KSwodGhpcy5iIT1udWxsP1BpKHRoaXMuYixuLmxkKCkpOnFlKHRoaXMuYik9PT1xZShuLmxkKCkpKSYmKHRoaXMuYyE9bnVsbD9QaSh0aGlzLmMsbi5tZCgpKTpxZSh0aGlzLmMpPT09cWUobi5tZCgpKSkpOiExfSxoLkJpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5sZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LGgubWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYV4odGhpcy5jPT1udWxsPzA6ZXModGhpcy5jKSl9LGguQ2k9ZnVuY3Rpb24odCl7dGhpcy5hPXR9LGguRGk9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IENtKX0saC5uZD1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbj10aGlzLmMsdGhpcy5jPXQsbn0saC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmIrIi0+Iit0aGlzLmN9LGguYT0wO3ZhciBOT249SShTbywiQmFzaWNFTWFwL0VudHJ5SW1wbCIsNjIxKTtEKDU0NiwxLHt9LE1TKSxJKFNvLCJCYXNpY0VNYXAvVmlldyIsNTQ2KTt2YXIgZkY7RCg3ODMsMSx7fSksaC5GYj1mdW5jdGlvbih0KXtyZXR1cm4gTzllKChDbigpLF9vKSx0KX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBxN2UoKENuKCksX28pKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBUYigoQ24oKSxfbykpfSxJKFNvLCJFQ29sbGVjdGlvbnMvQmFzaWNFbXB0eVVubW9kaWZpYWJsZUVMaXN0Iiw3ODMpLEQoMTM0OCwxLGxnLFFuZSksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLlJiPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5TYj1mdW5jdGlvbigpe3JldHVybiExfSxoLlBiPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IF9jKX0saC5UYj1mdW5jdGlvbigpe3JldHVybiAwfSxoLlViPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IF9jKX0saC5WYj1mdW5jdGlvbigpe3JldHVybi0xfSxoLlFiPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC5XYj1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxJKFNvLCJFQ29sbGVjdGlvbnMvQmFzaWNFbXB0eVVubW9kaWZpYWJsZUVMaXN0LzEiLDEzNDgpLEQoMTM0Niw3ODMsezIwOjEsMTY6MSwxNToxLDYxOjF9LGlKZSksaC5iZD1mdW5jdGlvbih0LG4pe3daZSgpfSxoLkZjPWZ1bmN0aW9uKHQpe3JldHVybiB5WmUoKX0saC5jZD1mdW5jdGlvbih0LG4pe3JldHVybiB4WmUoKX0saC5HYz1mdW5jdGlvbih0KXtyZXR1cm4ga1plKCl9LGguJGI9ZnVuY3Rpb24oKXtFWmUoKX0saC5IYz1mdW5jdGlvbih0KXtyZXR1cm4hMX0saC5JYz1mdW5jdGlvbih0KXtyZXR1cm4hMX0saC5KYz1mdW5jdGlvbih0KXt0byh0aGlzLHQpfSxoLlhiPWZ1bmN0aW9uKHQpe3JldHVybiByeWUoKENuKCksdCkpLG51bGx9LGguZGQ9ZnVuY3Rpb24odCl7cmV0dXJuLTF9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5LYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLmZkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmF9LGguVGk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gVFplKCl9LGguVWk9ZnVuY3Rpb24odCxuKXtDWmUoKX0saC5MYz1mdW5jdGlvbigpe3JldHVybiBuZXcgYm4obnVsbCxuZXcga24odGhpcywxNikpfSxoLmdkPWZ1bmN0aW9uKHQpe3JldHVybiBTWmUoKX0saC5NYz1mdW5jdGlvbih0KXtyZXR1cm4gX1plKCl9LGguaGQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gQVplKCl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gMH0saC5qZD1mdW5jdGlvbih0KXskbSh0aGlzLHQpfSxoLk5jPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrbih0aGlzLDE2KX0saC5PYz1mdW5jdGlvbigpe3JldHVybiBuZXcgYm4obnVsbCxuZXcga24odGhpcywxNikpfSxoLmtkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIENuKCksbmV3IFpwKF9vLHQsbil9LGguUGM9ZnVuY3Rpb24oKXtyZXR1cm4gZTVlKChDbigpLF9vKSl9LGguUWM9ZnVuY3Rpb24odCl7cmV0dXJuIENuKCksUEEoX28sdCl9LEkoU28sIkVDb2xsZWN0aW9ucy9FbXB0eVVubW9kaWZpYWJsZUVMaXN0IiwxMzQ2KSxEKDEzNDcsNzgzLHsyMDoxLDE2OjEsMTU6MSw2MToxLDU5NzoxfSxzSmUpLGguYmQ9ZnVuY3Rpb24odCxuKXt3WmUoKX0saC5GYz1mdW5jdGlvbih0KXtyZXR1cm4geVplKCl9LGguY2Q9ZnVuY3Rpb24odCxuKXtyZXR1cm4geFplKCl9LGguR2M9ZnVuY3Rpb24odCl7cmV0dXJuIGtaZSgpfSxoLiRiPWZ1bmN0aW9uKCl7RVplKCl9LGguSGM9ZnVuY3Rpb24odCl7cmV0dXJuITF9LGguSWM9ZnVuY3Rpb24odCl7cmV0dXJuITF9LGguSmM9ZnVuY3Rpb24odCl7dG8odGhpcyx0KX0saC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gcnllKChDbigpLHQpKSxudWxsfSxoLmRkPWZ1bmN0aW9uKHQpe3JldHVybi0xfSxoLmRjPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5mZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hfSxoLlRpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFRaZSgpfSxoLlVpPWZ1bmN0aW9uKHQsbil7Q1plKCl9LGguTGM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJuKG51bGwsbmV3IGtuKHRoaXMsMTYpKX0saC5nZD1mdW5jdGlvbih0KXtyZXR1cm4gU1plKCl9LGguTWM9ZnVuY3Rpb24odCl7cmV0dXJuIF9aZSgpfSxoLmhkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEFaZSgpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGguamQ9ZnVuY3Rpb24odCl7JG0odGhpcyx0KX0saC5OYz1mdW5jdGlvbigpe3JldHVybiBuZXcga24odGhpcywxNil9LGguT2M9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJuKG51bGwsbmV3IGtuKHRoaXMsMTYpKX0saC5rZD1mdW5jdGlvbih0LG4pe3JldHVybiBDbigpLG5ldyBacChfbyx0LG4pfSxoLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIGU1ZSgoQ24oKSxfbykpfSxoLlFjPWZ1bmN0aW9uKHQpe3JldHVybiBDbigpLFBBKF9vLHQpfSxoLmJrPWZ1bmN0aW9uKCl7cmV0dXJuIENuKCksQ24oKSxtZ30sSShTbywiRUNvbGxlY3Rpb25zL0VtcHR5VW5tb2RpZmlhYmxlRU1hcCIsMTM0Nyk7dmFyIHlQZT1rcyhTbywiRW51bWVyYXRvciIpLGtZO0QoMjg4LDEsezI4ODoxfSxlbGUpLGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIHRoaXM9PT10PyEwOkRlKHQsMjg4KT8obj1sKHQsMjg4KSx0aGlzLmY9PW4uZiYmR2RuKHRoaXMuaSxuLmkpJiZfYWUodGhpcy5hLHRoaXMuZiYyNTY/bi5mJjI1Nj9uLmE6bnVsbDpuLmYmMjU2P251bGw6bi5hKSYmX2FlKHRoaXMuZCxuLmQpJiZfYWUodGhpcy5nLG4uZykmJl9hZSh0aGlzLmUsbi5lKSYmYjZuKHRoaXMsbikpOiExfSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0saC5JYj1mdW5jdGlvbigpe3JldHVybiBibXQodGhpcyl9LGguZj0wO3ZhciBEX3Q9MCxJX3Q9MCxPX3Q9MCxOX3Q9MCx4UGU9MCxrUGU9MCxFUGU9MCxUUGU9MCxDUGU9MCxQX3QsJE09MCx6TT0wLEJfdD0wLEZfdD0wLEVZLFNQZTtJKFNvLCJVUkkiLDI4OCksRCgxMTIxLDQ1LG02LGFKZSksaC56Yz1mdW5jdGlvbih0LG4pe3JldHVybiBsKHJjKHRoaXMsZWkodCksbChuLDI4OCkpLDI4OCl9LEkoU28sIlVSSS9VUklDYWNoZSIsMTEyMSksRCg1MDYsNjYsQmQsRSQsdUgpLGguU2k9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSShTbywiVW5pcXVlRUxpc3QiLDUwNiksRCg1OTAsNjMsbHAsblYpLEkoU28sIldyYXBwZWRFeGNlcHRpb24iLDU5MCk7dmFyIG1pPWtzKHBmLHI1dCksTTQ9a3MocGYsaTV0KSxkbD1rcyhwZixzNXQpLEQ0PWtzKHBmLGE1dCksbDE9a3MocGYsbzV0KSxWZj1rcyhwZiwiRUNsYXNzIiksdHBlPWtzKHBmLCJFRGF0YVR5cGUiKSxSX3Q7RCgxMjMzLDQ1LG02LG9KZSksaC54Yz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCk/eHUodGhpcyx0KTpoYyh6byh0aGlzLmYsdCkpfSxJKHBmLCJFRGF0YVR5cGUvSW50ZXJuYWwvQ29udmVyc2lvbkRlbGVnYXRlL0ZhY3RvcnkvUmVnaXN0cnkvSW1wbCIsMTIzMyk7dmFyIFRZPWtzKHBmLCJFRW51bSIpLHdwPWtzKHBmLGM1dCksV289a3MocGYsdTV0KSxVZj1rcyhwZixsNXQpLEdmLGszPWtzKHBmLGg1dCksSTQ9a3MocGYsZjV0KTtEKDEwNDIsMSx7fSxZbmUpLGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4iTklMIn0sSShwZiwiRVN0cnVjdHVyYWxGZWF0dXJlL0ludGVybmFsL0R5bmFtaWNWYWx1ZUhvbGRlci8xIiwxMDQyKTt2YXIgal90O0QoMTA0MSw0NSxtNixjSmUpLGgueGM9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpP3h1KHRoaXMsdCk6aGMoem8odGhpcy5mLHQpKX0sSShwZiwiRVN0cnVjdHVyYWxGZWF0dXJlL0ludGVybmFsL1NldHRpbmdEZWxlZ2F0ZS9GYWN0b3J5L1JlZ2lzdHJ5L0ltcGwiLDEwNDEpO3ZhciBadT1rcyhwZixkNXQpLG85PWtzKHBmLCJFVmFsaWRhdG9yL1BhdHRlcm5NYXRjaGVyIiksX1BlLEFQZSxWbixNMixPNCxKYiwkX3Qsel90LHFfdCxaYixEMixlbSxFMyx0ZCxIX3QsVl90LEtmLEkyLFVfdCxPMixONCxvNyxObyxHX3QsS190LFQzLENZPWtzKHVzLCJGZWF0dXJlTWFwL0VudHJ5Iik7RCg1NDUsMSx7NzY6MX0sU3EpLGguTGs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLm1kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0sSShHbiwiQmFzaWNFT2JqZWN0SW1wbC8xIiw1NDUpLEQoMTA0MCwxLGkwZSxJdHQpLGguRms9ZnVuY3Rpb24odCl7cmV0dXJuIE1vZSh0aGlzLmEsdGhpcy5iLHQpfSxoLlFqPWZ1bmN0aW9uKCl7cmV0dXJuIGdvdCh0aGlzLmEsdGhpcy5iKX0saC5XYj1mdW5jdGlvbih0KXtxNWUodGhpcy5hLHRoaXMuYix0KX0saC5Haz1mdW5jdGlvbigpe0hnbih0aGlzLmEsdGhpcy5iKX0sSShHbiwiQmFzaWNFT2JqZWN0SW1wbC80IiwxMDQwKSxEKDIwODEsMSx7MTE0OjF9KSxoLk1rPWZ1bmN0aW9uKHQpe3RoaXMuZT10PT0wP1dfdDpXZSh3YSxSbiwxLHQsNSwxKX0saC5saT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lW3RdfSxoLm1pPWZ1bmN0aW9uKHQsbil7dGhpcy5lW3RdPW59LGgubmk9ZnVuY3Rpb24odCl7dGhpcy5lW3RdPW51bGx9LGguTms9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jfSxoLk9rPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC5Qaz1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyBRcil9LGguUWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxoLlJrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZSE9bnVsbH0saC5Taz1mdW5jdGlvbih0KXt0aGlzLmM9dH0saC5Uaz1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLlVrPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGguVms9ZnVuY3Rpb24odCl7dGhpcy5kPXR9O3ZhciBXX3Q7SShHbiwiQmFzaWNFT2JqZWN0SW1wbC9FUHJvcGVydGllc0hvbGRlckJhc2VJbXBsIiwyMDgxKSxEKDE5MiwyMDgxLHsxMTQ6MX0sU2YpLGguT2s9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLlBrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0saC5Uaz1mdW5jdGlvbih0KXt0aGlzLmE9dH0saC5Vaz1mdW5jdGlvbih0KXt0aGlzLmI9dH0sSShHbiwiQmFzaWNFT2JqZWN0SW1wbC9FUHJvcGVydGllc0hvbGRlckltcGwiLDE5MiksRCg1MTYsOTksZzR0LG01KSxoLnVoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0saC56aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmt9LGguQmg9ZnVuY3Rpb24odCxuKXt0aGlzLmc9dCx0aGlzLmk9bn0saC5EaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmomMj90aGlzLiRoKCkuTmsoKTp0aGlzLmlpKCl9LGguRmg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pfSxoLndoPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuaiYxKSE9MH0saC5QaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmd9LGguVmg9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5qJjQpIT0wfSxoLiRoPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuayYmKHRoaXMuaz1uZXcgU2YpLHRoaXMua30saC5jaT1mdW5jdGlvbih0KXt0aGlzLiRoKCkuU2sodCksdD90aGlzLmp8PTI6dGhpcy5qJj0tM30saC5laT1mdW5jdGlvbih0KXt0aGlzLiRoKCkuVWsodCksdD90aGlzLmp8PTQ6dGhpcy5qJj0tNX0saC5paT1mdW5jdGlvbigpe3JldHVybihsYigpLFZuKS5TfSxoLmk9MCxoLmo9MSxJKEduLCJFT2JqZWN0SW1wbCIsNTE2KSxEKDc5OCw1MTYsezExMDoxLDk0OjEsOTM6MSw1ODoxLDExNDoxLDU0OjEsOTk6MX0sRjRlKSxoLmxpPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVbdF19LGgubWk9ZnVuY3Rpb24odCxuKXt0aGlzLmVbdF09bn0saC5uaT1mdW5jdGlvbih0KXt0aGlzLmVbdF09bnVsbH0saC5EaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGguSWg9ZnVuY3Rpb24odCl7cmV0dXJuIG1zKHRoaXMuZCx0KX0saC5LaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LGguT2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lIT1udWxsfSxoLiRoPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuayYmKHRoaXMuaz1uZXcgXyQpLHRoaXMua30saC5jaT1mdW5jdGlvbih0KXt0aGlzLmQ9dH0saC5oaT1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLmU9PW51bGwmJih0PXlyKHRoaXMuZCksdGhpcy5lPXQ9PTA/WV90OldlKHdhLFJuLDEsdCw1LDEpKSx0aGlzfSxoLmppPWZ1bmN0aW9uKCl7cmV0dXJuIDB9O3ZhciBZX3Q7SShHbiwiRHluYW1pY0VPYmplY3RJbXBsIiw3OTgpLEQoMTUyMiw3OTgsezExMDoxLDQ0OjEsOTQ6MSw5MzoxLDEzNjoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxfSxHaXQpLGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLkhiPWZ1bmN0aW9uKCl7cmV0dXJuIGZ3KHRoaXMpfSxoLmNpPWZ1bmN0aW9uKHQpe3RoaXMuZD10LHRoaXMuYj1vUCh0LCJrZXkiKSx0aGlzLmM9b1AodCxUTCl9LGguQmk9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdGhpcy5hPT0tMSYmKHQ9SG9lKHRoaXMsdGhpcy5iKSx0aGlzLmE9dD09bnVsbD8wOmVzKHQpKSx0aGlzLmF9LGgubGQ9ZnVuY3Rpb24oKXtyZXR1cm4gSG9lKHRoaXMsdGhpcy5iKX0saC5tZD1mdW5jdGlvbigpe3JldHVybiBIb2UodGhpcyx0aGlzLmMpfSxoLkNpPWZ1bmN0aW9uKHQpe3RoaXMuYT10fSxoLkRpPWZ1bmN0aW9uKHQpe3E1ZSh0aGlzLHRoaXMuYix0KX0saC5uZD1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbj1Ib2UodGhpcyx0aGlzLmMpLHE1ZSh0aGlzLHRoaXMuYyx0KSxufSxoLmE9MCxJKEduLCJEeW5hbWljRU9iamVjdEltcGwvQmFzaWNFTWFwRW50cnkiLDE1MjIpLEQoMTUyMywxLHsxMTQ6MX0sXyQpLGguTWs9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0saC5saT1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLm1pPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IFFyKX0saC5uaT1mdW5jdGlvbih0KXt0aHJvdyB1ZShuZXcgUXIpfSxoLk5rPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC5Paz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguUGs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLlFrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY30saC5Saz1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyBRcil9LGguU2s9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0saC5Uaz1mdW5jdGlvbih0KXt0aGlzLmE9dH0saC5Vaz1mdW5jdGlvbih0KXt0aGlzLmI9dH0saC5Waz1mdW5jdGlvbih0KXt0aGlzLmM9dH0sSShHbiwiRHluYW1pY0VPYmplY3RJbXBsL0R5bmFtaWNFUHJvcGVydGllc0hvbGRlckltcGwiLDE1MjMpLEQoNTE5LDE1OCx7MTEwOjEsOTQ6MSw5MzoxLDU5ODoxLDE1NToxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDUxOToxLDE1ODoxLDExOToxLDEyMDoxfSxDSSksaC5BaD1mdW5jdGlvbih0KXtyZXR1cm4gZHhlKHRoaXMsdCl9LGguTGg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLmQ7Y2FzZSAyOnJldHVybiByPyghdGhpcy5iJiYodGhpcy5iPW5ldyBkaCgoVG4oKSxObyksWWMsdGhpcykpLHRoaXMuYik6KCF0aGlzLmImJih0aGlzLmI9bmV3IGRoKChUbigpLE5vKSxZYyx0aGlzKSksaU4odGhpcy5iKSk7Y2FzZSAzOnJldHVybiB3b3QodGhpcyk7Y2FzZSA0OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IFlzKFhiLHRoaXMsNCkpLHRoaXMuYTtjYXNlIDU6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgJDUoWGIsdGhpcyw1KSksdGhpcy5jfXJldHVybiBzZih0aGlzLHQteXIoKFRuKCksTTIpKSxNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHxNMiksdCksbixyKX0saC5TaD1mdW5jdGlvbih0LG4scil7dmFyIGEsbyxmO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLFJ1KHRoaXMuQWIsdCxyKTtjYXNlIDM6cmV0dXJuIHRoaXMuQ2ImJihyPShvPXRoaXMuRGI+PjE2LG8+PTA/ZHhlKHRoaXMscik6dGhpcy5DYi5UaCh0aGlzLC0xLW8sbnVsbCxyKSkpLFo0ZSh0aGlzLGwodCwxNTUpLHIpfXJldHVybiBmPWwoTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8KFRuKCksTTIpKSxuKSw2OSksZi53aygpLnprKHRoaXMsS3UodGhpcyksbi15cigoVG4oKSxNMikpLHQscil9LGguVWg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksVG8odGhpcy5BYix0LHIpO2Nhc2UgMjpyZXR1cm4hdGhpcy5iJiYodGhpcy5iPW5ldyBkaCgoVG4oKSxObyksWWMsdGhpcykpLFVxKHRoaXMuYix0LHIpO2Nhc2UgMzpyZXR1cm4gWjRlKHRoaXMsbnVsbCxyKTtjYXNlIDQ6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgWXMoWGIsdGhpcyw0KSksVG8odGhpcy5hLHQscil9cmV0dXJuIG89bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHwoVG4oKSxNMikpLG4pLDY5KSxvLndrKCkuQWsodGhpcyxLdSh0aGlzKSxuLXlyKChUbigpLE0yKSksdCxyKX0saC5XaD1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy5kIT1udWxsO2Nhc2UgMjpyZXR1cm4hIXRoaXMuYiYmdGhpcy5iLmYhPTA7Y2FzZSAzOnJldHVybiEhd290KHRoaXMpO2Nhc2UgNDpyZXR1cm4hIXRoaXMuYSYmdGhpcy5hLmkhPTA7Y2FzZSA1OnJldHVybiEhdGhpcy5jJiZ0aGlzLmMuaSE9MH1yZXR1cm4gbmYodGhpcyx0LXlyKChUbigpLE0yKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8TTIpLHQpKX0saC5iaT1mdW5jdGlvbih0LG4pe3ZhciByO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxBcyh0aGlzLkFiLGwobiwxNikpO3JldHVybjtjYXNlIDE6T2RuKHRoaXMsZWkobikpO3JldHVybjtjYXNlIDI6IXRoaXMuYiYmKHRoaXMuYj1uZXcgZGgoKFRuKCksTm8pLFljLHRoaXMpKSxfVih0aGlzLmIsbik7cmV0dXJuO2Nhc2UgMzppYnQodGhpcyxsKG4sMTU1KSk7cmV0dXJuO2Nhc2UgNDohdGhpcy5hJiYodGhpcy5hPW5ldyBZcyhYYix0aGlzLDQpKSwkcih0aGlzLmEpLCF0aGlzLmEmJih0aGlzLmE9bmV3IFlzKFhiLHRoaXMsNCkpLEFzKHRoaXMuYSxsKG4sMTYpKTtyZXR1cm47Y2FzZSA1OiF0aGlzLmMmJih0aGlzLmM9bmV3ICQ1KFhiLHRoaXMsNSkpLCRyKHRoaXMuYyksIXRoaXMuYyYmKHRoaXMuYz1uZXcgJDUoWGIsdGhpcyw1KSksQXModGhpcy5jLGwobiwxNikpO3JldHVybn11Zih0aGlzLHQteXIoKFRuKCksTTIpKSxNbigocj1sKEtuKHRoaXMsMTYpLDI5KSxyfHxNMiksdCksbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gVG4oKSxNMn0saC5raT1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSwkcih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOmc3ZSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6IXRoaXMuYiYmKHRoaXMuYj1uZXcgZGgoKFRuKCksTm8pLFljLHRoaXMpKSx0aGlzLmIuYy4kYigpO3JldHVybjtjYXNlIDM6aWJ0KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNDohdGhpcy5hJiYodGhpcy5hPW5ldyBZcyhYYix0aGlzLDQpKSwkcih0aGlzLmEpO3JldHVybjtjYXNlIDU6IXRoaXMuYyYmKHRoaXMuYz1uZXcgJDUoWGIsdGhpcyw1KSksJHIodGhpcy5jKTtyZXR1cm59Y2YodGhpcyx0LXlyKChUbigpLE0yKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8TTIpLHQpKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiBjMXQodGhpcyl9LGguZD1udWxsLEkoR24sIkVBbm5vdGF0aW9uSW1wbCIsNTE5KSxEKDE0MSw3MjEsQVNlLHhsKSxoLkdpPWZ1bmN0aW9uKHQsbil7UWxuKHRoaXMsdCxsKG4sNDQpKX0saC5Xaz1mdW5jdGlvbih0LG4pe3JldHVybiBaZm4odGhpcyxsKHQsNDQpLG4pfSxoLiRpPWZ1bmN0aW9uKHQpe3JldHVybiBsKGwodGhpcy5jLDcxKS4kaSh0KSwxMzYpfSxoLklpPWZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcy5jLDcxKS5JaSgpfSxoLkppPWZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcy5jLDcxKS5KaSgpfSxoLktpPWZ1bmN0aW9uKHQpe3JldHVybiBsKHRoaXMuYyw3MSkuS2kodCl9LGguWGs9ZnVuY3Rpb24odCxuKXtyZXR1cm4gVXEodGhpcyx0LG4pfSxoLkZrPWZ1bmN0aW9uKHQpe3JldHVybiBsKHRoaXMuYyw3OSkuRmsodCl9LGguYWs9ZnVuY3Rpb24oKXt9LGguUWo9ZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzLmMsNzkpLlFqKCl9LGguY2s9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3JldHVybiBhPWwoQWgodGhpcy5iKS53aSgpLnNpKHRoaXMuYiksMTM2KSxhLkNpKHQpLGEuRGkobiksYS5uZChyKSxhfSxoLmRrPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrd2UodGhpcyl9LGguV2I9ZnVuY3Rpb24odCl7X1YodGhpcyx0KX0saC5Haz1mdW5jdGlvbigpe2wodGhpcy5jLDc5KS5HaygpfSxJKHVzLCJFY29yZUVNYXAiLDE0MSksRCgxNjUsMTQxLEFTZSxkaCksaC5faj1mdW5jdGlvbigpe3ZhciB0LG4scixhLG8sZjtpZih0aGlzLmQ9PW51bGwpe2ZvcihmPVdlKHZQZSxfU2UsNjYsMip0aGlzLmYrMSwwLDEpLHI9dGhpcy5jLktjKCk7ci5lIT1yLmkuZ2MoKTspbj1sKHIuWWooKSwxMzYpLGE9bi5CaSgpLG89KGEmSWkpJWYubGVuZ3RoLHQ9ZltvXSwhdCYmKHQ9ZltvXT1uZXcga3dlKHRoaXMpKSx0LkZjKG4pO3RoaXMuZD1mfX0sSShHbiwiRUFubm90YXRpb25JbXBsLzEiLDE2NSksRCgyOTIsNDQ4LHsxMTA6MSw5NDoxLDkzOjEsMTU1OjEsMTk3OjEsNTg6MSwxMTQ6MSw0ODE6MSw1NDoxLDk5OjEsMTU4OjEsMjkyOjEsMTE5OjEsMTIwOjF9KSxoLkxoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJjI1Nik7Y2FzZSAzOnJldHVybiBIbigpLCEhKHRoaXMuQmImNTEyKTtjYXNlIDQ6cmV0dXJuIHB0KHRoaXMucyk7Y2FzZSA1OnJldHVybiBwdCh0aGlzLnQpO2Nhc2UgNjpyZXR1cm4gSG4oKSwhIXRoaXMuSmsoKTtjYXNlIDc6cmV0dXJuIEhuKCksbz10aGlzLnMsbz49MTtjYXNlIDg6cmV0dXJuIG4/T2YodGhpcyk6dGhpcy5yO2Nhc2UgOTpyZXR1cm4gdGhpcy5xfXJldHVybiBzZih0aGlzLHQteXIodGhpcy5paSgpKSxNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHx0aGlzLmlpKCkpLHQpLG4scil9LGguVWg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksVG8odGhpcy5BYix0LHIpO2Nhc2UgOTpyZXR1cm4gcWFlKHRoaXMscil9cmV0dXJuIG89bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHx0aGlzLmlpKCkpLG4pLDY5KSxvLndrKCkuQWsodGhpcyxLdSh0aGlzKSxuLXlyKHRoaXMuaWkoKSksdCxyKX0saC5XaD1mdW5jdGlvbih0KXt2YXIgbixyO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4odGhpcy5CYiYyNTYpPT0wO2Nhc2UgMzpyZXR1cm4odGhpcy5CYiY1MTIpPT0wO2Nhc2UgNDpyZXR1cm4gdGhpcy5zIT0wO2Nhc2UgNTpyZXR1cm4gdGhpcy50IT0xO2Nhc2UgNjpyZXR1cm4gdGhpcy5KaygpO2Nhc2UgNzpyZXR1cm4gcj10aGlzLnMscj49MTtjYXNlIDg6cmV0dXJuISF0aGlzLnImJiF0aGlzLnEuZSYmeXcodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4hIXRoaXMucSYmISh0aGlzLnImJiF0aGlzLnEuZSYmeXcodGhpcy5xKS5pPT0wKX1yZXR1cm4gbmYodGhpcyx0LXlyKHRoaXMuaWkoKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8dGhpcy5paSgpKSx0KSl9LGguYmk9ZnVuY3Rpb24odCxuKXt2YXIgcixhO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxBcyh0aGlzLkFiLGwobiwxNikpO3JldHVybjtjYXNlIDE6dGhpcy51aShlaShuKSk7cmV0dXJuO2Nhc2UgMjpjMih0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgMzp1Mih0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgNDppMih0aGlzLGwobiwxNykuYSk7cmV0dXJuO2Nhc2UgNTp0aGlzLlprKGwobiwxNykuYSk7cmV0dXJuO2Nhc2UgODpHbSh0aGlzLGwobiwxNDIpKTtyZXR1cm47Y2FzZSA5OmE9JDEodGhpcyxsKG4sODkpLG51bGwpLGEmJmEub2ooKTtyZXR1cm59dWYodGhpcyx0LXlyKHRoaXMuaWkoKSksTW4oKHI9bChLbih0aGlzLDE2KSwyOSkscnx8dGhpcy5paSgpKSx0KSxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBUbigpLEtfdH0saC5raT1mdW5jdGlvbih0KXt2YXIgbixyO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6dGhpcy51aShudWxsKTtyZXR1cm47Y2FzZSAyOmMyKHRoaXMsITApO3JldHVybjtjYXNlIDM6dTIodGhpcywhMCk7cmV0dXJuO2Nhc2UgNDppMih0aGlzLDApO3JldHVybjtjYXNlIDU6dGhpcy5aaygxKTtyZXR1cm47Y2FzZSA4OkdtKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgOTpyPSQxKHRoaXMsbnVsbCxudWxsKSxyJiZyLm9qKCk7cmV0dXJufWNmKHRoaXMsdC15cih0aGlzLmlpKCkpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fHRoaXMuaWkoKSksdCkpfSxoLnBpPWZ1bmN0aW9uKCl7T2YodGhpcyksdGhpcy5CYnw9MX0saC5Iaz1mdW5jdGlvbigpe3JldHVybiBPZih0aGlzKX0saC5Jaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnR9LGguSms9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLnQsdD4xfHx0PT0tMX0saC5TaT1mdW5jdGlvbigpe3JldHVybih0aGlzLkJiJjUxMikhPTB9LGguWWs9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbzhlKHRoaXMsdCxuKX0saC5aaz1mdW5jdGlvbih0KXtNeSh0aGlzLHQpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIFQ5ZSh0aGlzKX0saC5zPTAsaC50PTEsSShHbiwiRVR5cGVkRWxlbWVudEltcGwiLDI5MiksRCg0NjIsMjkyLHsxMTA6MSw5NDoxLDkzOjEsMTU1OjEsMTk3OjEsNTg6MSwxNzk6MSw2OToxLDExNDoxLDQ4MToxLDU0OjEsOTk6MSwxNTg6MSw0NjI6MSwyOTI6MSwxMTk6MSwxMjA6MSw2OTI6MX0pLGguQWg9ZnVuY3Rpb24odCl7cmV0dXJuIFFkdCh0aGlzLHQpfSxoLkxoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJjI1Nik7Y2FzZSAzOnJldHVybiBIbigpLCEhKHRoaXMuQmImNTEyKTtjYXNlIDQ6cmV0dXJuIHB0KHRoaXMucyk7Y2FzZSA1OnJldHVybiBwdCh0aGlzLnQpO2Nhc2UgNjpyZXR1cm4gSG4oKSwhIXRoaXMuSmsoKTtjYXNlIDc6cmV0dXJuIEhuKCksbz10aGlzLnMsbz49MTtjYXNlIDg6cmV0dXJuIG4/T2YodGhpcyk6dGhpcy5yO2Nhc2UgOTpyZXR1cm4gdGhpcy5xO2Nhc2UgMTA6cmV0dXJuIEhuKCksISEodGhpcy5CYiZtMCk7Y2FzZSAxMTpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJnI0KTtjYXNlIDEyOnJldHVybiBIbigpLCEhKHRoaXMuQmImWHkpO2Nhc2UgMTM6cmV0dXJuIHRoaXMuajtjYXNlIDE0OnJldHVybiBVRSh0aGlzKTtjYXNlIDE1OnJldHVybiBIbigpLCEhKHRoaXMuQmImU2wpO2Nhc2UgMTY6cmV0dXJuIEhuKCksISEodGhpcy5CYiZfZCk7Y2FzZSAxNzpyZXR1cm4ga3kodGhpcyl9cmV0dXJuIHNmKHRoaXMsdC15cih0aGlzLmlpKCkpLE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fHRoaXMuaWkoKSksdCksbixyKX0saC5TaD1mdW5jdGlvbih0LG4scil7dmFyIGEsbyxmO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLFJ1KHRoaXMuQWIsdCxyKTtjYXNlIDE3OnJldHVybiB0aGlzLkNiJiYocj0obz10aGlzLkRiPj4xNixvPj0wP1FkdCh0aGlzLHIpOnRoaXMuQ2IuVGgodGhpcywtMS1vLG51bGwscikpKSxOaCh0aGlzLHQsMTcscil9cmV0dXJuIGY9bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHx0aGlzLmlpKCkpLG4pLDY5KSxmLndrKCkuemsodGhpcyxLdSh0aGlzKSxuLXlyKHRoaXMuaWkoKSksdCxyKX0saC5VaD1mdW5jdGlvbih0LG4scil7dmFyIGEsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxUbyh0aGlzLkFiLHQscik7Y2FzZSA5OnJldHVybiBxYWUodGhpcyxyKTtjYXNlIDE3OnJldHVybiBOaCh0aGlzLG51bGwsMTcscil9cmV0dXJuIG89bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHx0aGlzLmlpKCkpLG4pLDY5KSxvLndrKCkuQWsodGhpcyxLdSh0aGlzKSxuLXlyKHRoaXMuaWkoKSksdCxyKX0saC5XaD1mdW5jdGlvbih0KXt2YXIgbixyO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4odGhpcy5CYiYyNTYpPT0wO2Nhc2UgMzpyZXR1cm4odGhpcy5CYiY1MTIpPT0wO2Nhc2UgNDpyZXR1cm4gdGhpcy5zIT0wO2Nhc2UgNTpyZXR1cm4gdGhpcy50IT0xO2Nhc2UgNjpyZXR1cm4gdGhpcy5KaygpO2Nhc2UgNzpyZXR1cm4gcj10aGlzLnMscj49MTtjYXNlIDg6cmV0dXJuISF0aGlzLnImJiF0aGlzLnEuZSYmeXcodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4hIXRoaXMucSYmISh0aGlzLnImJiF0aGlzLnEuZSYmeXcodGhpcy5xKS5pPT0wKTtjYXNlIDEwOnJldHVybih0aGlzLkJiJm0wKT09MDtjYXNlIDExOnJldHVybih0aGlzLkJiJnI0KSE9MDtjYXNlIDEyOnJldHVybih0aGlzLkJiJlh5KSE9MDtjYXNlIDEzOnJldHVybiB0aGlzLmohPW51bGw7Y2FzZSAxNDpyZXR1cm4gVUUodGhpcykhPW51bGw7Y2FzZSAxNTpyZXR1cm4odGhpcy5CYiZTbCkhPTA7Y2FzZSAxNjpyZXR1cm4odGhpcy5CYiZfZCkhPTA7Y2FzZSAxNzpyZXR1cm4hIWt5KHRoaXMpfXJldHVybiBuZih0aGlzLHQteXIodGhpcy5paSgpKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHx0aGlzLmlpKCkpLHQpKX0saC5iaT1mdW5jdGlvbih0LG4pe3ZhciByLGE7c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksJHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLEFzKHRoaXMuQWIsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMTpwb2UodGhpcyxlaShuKSk7cmV0dXJuO2Nhc2UgMjpjMih0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgMzp1Mih0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgNDppMih0aGlzLGwobiwxNykuYSk7cmV0dXJuO2Nhc2UgNTp0aGlzLlprKGwobiwxNykuYSk7cmV0dXJuO2Nhc2UgODpHbSh0aGlzLGwobiwxNDIpKTtyZXR1cm47Y2FzZSA5OmE9JDEodGhpcyxsKG4sODkpLG51bGwpLGEmJmEub2ooKTtyZXR1cm47Y2FzZSAxMDpBRSh0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgMTE6REUodGhpcyxSdChCdChuKSkpO3JldHVybjtjYXNlIDEyOkxFKHRoaXMsUnQoQnQobikpKTtyZXR1cm47Y2FzZSAxMzpaM2UodGhpcyxlaShuKSk7cmV0dXJuO2Nhc2UgMTU6TUUodGhpcyxSdChCdChuKSkpO3JldHVybjtjYXNlIDE2OklFKHRoaXMsUnQoQnQobikpKTtyZXR1cm59dWYodGhpcyx0LXlyKHRoaXMuaWkoKSksTW4oKHI9bChLbih0aGlzLDE2KSwyOSkscnx8dGhpcy5paSgpKSx0KSxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBUbigpLEdfdH0saC5raT1mdW5jdGlvbih0KXt2YXIgbixyO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6RGUodGhpcy5DYiw5MCkmJnp5KFlsKGwodGhpcy5DYiw5MCkpLDQpLEZ1KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjpjMih0aGlzLCEwKTtyZXR1cm47Y2FzZSAzOnUyKHRoaXMsITApO3JldHVybjtjYXNlIDQ6aTIodGhpcywwKTtyZXR1cm47Y2FzZSA1OnRoaXMuWmsoMSk7cmV0dXJuO2Nhc2UgODpHbSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDk6cj0kMSh0aGlzLG51bGwsbnVsbCksciYmci5vaigpO3JldHVybjtjYXNlIDEwOkFFKHRoaXMsITApO3JldHVybjtjYXNlIDExOkRFKHRoaXMsITEpO3JldHVybjtjYXNlIDEyOkxFKHRoaXMsITEpO3JldHVybjtjYXNlIDEzOnRoaXMuaT1udWxsLHhWKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTU6TUUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTY6SUUodGhpcywhMSk7cmV0dXJufWNmKHRoaXMsdC15cih0aGlzLmlpKCkpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fHRoaXMuaWkoKSksdCkpfSxoLnBpPWZ1bmN0aW9uKCl7V2soaWMoKEVsKCksaW8pLHRoaXMpKSxPZih0aGlzKSx0aGlzLkJifD0xfSxoLnBrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZn0saC5paz1mdW5jdGlvbigpe3JldHVybiBVRSh0aGlzKX0saC5xaz1mdW5jdGlvbigpe3JldHVybiBreSh0aGlzKX0saC51az1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLiRrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua30saC5Maj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm59LGgudms9ZnVuY3Rpb24oKXtyZXR1cm4gcFUodGhpcyl9LGgud2s9ZnVuY3Rpb24oKXt2YXIgdCxuLHIsYSxvLGYsZyx3LEU7cmV0dXJuIHRoaXMucHx8KHI9a3kodGhpcyksKHIuaT09bnVsbCYmU2Qociksci5pKS5sZW5ndGgsYT10aGlzLnVrKCksYSYmeXIoa3koYSkpLG89T2YodGhpcyksZz1vLmtrKCksdD1nP2cuaSYxP2c9PWloP05zOmc9PVZyP3JvOmc9PUI0P19UOmc9PU5hP3RhOmc9PW5tP3IzOmc9PWg3P2kzOmc9PUFsP2p4OlBMOmc6bnVsbCxuPVVFKHRoaXMpLHc9by5paygpLEs0bih0aGlzKSx0aGlzLkJiJl9kJiYoKGY9eXhlKChFbCgpLGlvKSxyKSkmJmYhPXRoaXN8fChmPXJ4KGljKGlvLHRoaXMpKSkpP3RoaXMucD1uZXcgTnR0KHRoaXMsZik6dGhpcy5KaygpP3RoaXMuYWwoKT9hP3RoaXMuQmImU2w/dD90aGlzLmJsKCk/dGhpcy5wPW5ldyBPbSg0Nyx0LHRoaXMsYSk6dGhpcy5wPW5ldyBPbSg1LHQsdGhpcyxhKTp0aGlzLmJsKCk/dGhpcy5wPW5ldyBSbSg0Nix0aGlzLGEpOnRoaXMucD1uZXcgUm0oNCx0aGlzLGEpOnQ/dGhpcy5ibCgpP3RoaXMucD1uZXcgT20oNDksdCx0aGlzLGEpOnRoaXMucD1uZXcgT20oNyx0LHRoaXMsYSk6dGhpcy5ibCgpP3RoaXMucD1uZXcgUm0oNDgsdGhpcyxhKTp0aGlzLnA9bmV3IFJtKDYsdGhpcyxhKTp0aGlzLkJiJlNsP3Q/dD09dXY/dGhpcy5wPW5ldyBYcCg1MCxBX3QsdGhpcyk6dGhpcy5ibCgpP3RoaXMucD1uZXcgWHAoNDMsdCx0aGlzKTp0aGlzLnA9bmV3IFhwKDEsdCx0aGlzKTp0aGlzLmJsKCk/dGhpcy5wPW5ldyBKcCg0Mix0aGlzKTp0aGlzLnA9bmV3IEpwKDAsdGhpcyk6dD90PT11dj90aGlzLnA9bmV3IFhwKDQxLEFfdCx0aGlzKTp0aGlzLmJsKCk/dGhpcy5wPW5ldyBYcCg0NSx0LHRoaXMpOnRoaXMucD1uZXcgWHAoMyx0LHRoaXMpOnRoaXMuYmwoKT90aGlzLnA9bmV3IEpwKDQ0LHRoaXMpOnRoaXMucD1uZXcgSnAoMix0aGlzKTpEZShvLDE1Nik/dD09Q1k/dGhpcy5wPW5ldyBKcCg0MCx0aGlzKTp0aGlzLkJiJjUxMj90aGlzLkJiJlNsP3Q/dGhpcy5wPW5ldyBYcCg5LHQsdGhpcyk6dGhpcy5wPW5ldyBKcCg4LHRoaXMpOnQ/dGhpcy5wPW5ldyBYcCgxMSx0LHRoaXMpOnRoaXMucD1uZXcgSnAoMTAsdGhpcyk6dGhpcy5CYiZTbD90P3RoaXMucD1uZXcgWHAoMTMsdCx0aGlzKTp0aGlzLnA9bmV3IEpwKDEyLHRoaXMpOnQ/dGhpcy5wPW5ldyBYcCgxNSx0LHRoaXMpOnRoaXMucD1uZXcgSnAoMTQsdGhpcyk6YT8oRT1hLnQsRT4xfHxFPT0tMT90aGlzLmJsKCk/dGhpcy5CYiZTbD90P3RoaXMucD1uZXcgT20oMjUsdCx0aGlzLGEpOnRoaXMucD1uZXcgUm0oMjQsdGhpcyxhKTp0P3RoaXMucD1uZXcgT20oMjcsdCx0aGlzLGEpOnRoaXMucD1uZXcgUm0oMjYsdGhpcyxhKTp0aGlzLkJiJlNsP3Q/dGhpcy5wPW5ldyBPbSgyOSx0LHRoaXMsYSk6dGhpcy5wPW5ldyBSbSgyOCx0aGlzLGEpOnQ/dGhpcy5wPW5ldyBPbSgzMSx0LHRoaXMsYSk6dGhpcy5wPW5ldyBSbSgzMCx0aGlzLGEpOnRoaXMuYmwoKT90aGlzLkJiJlNsP3Q/dGhpcy5wPW5ldyBPbSgzMyx0LHRoaXMsYSk6dGhpcy5wPW5ldyBSbSgzMix0aGlzLGEpOnQ/dGhpcy5wPW5ldyBPbSgzNSx0LHRoaXMsYSk6dGhpcy5wPW5ldyBSbSgzNCx0aGlzLGEpOnRoaXMuQmImU2w/dD90aGlzLnA9bmV3IE9tKDM3LHQsdGhpcyxhKTp0aGlzLnA9bmV3IFJtKDM2LHRoaXMsYSk6dD90aGlzLnA9bmV3IE9tKDM5LHQsdGhpcyxhKTp0aGlzLnA9bmV3IFJtKDM4LHRoaXMsYSkpOnRoaXMuYmwoKT90aGlzLkJiJlNsP3Q/dGhpcy5wPW5ldyBYcCgxNyx0LHRoaXMpOnRoaXMucD1uZXcgSnAoMTYsdGhpcyk6dD90aGlzLnA9bmV3IFhwKDE5LHQsdGhpcyk6dGhpcy5wPW5ldyBKcCgxOCx0aGlzKTp0aGlzLkJiJlNsP3Q/dGhpcy5wPW5ldyBYcCgyMSx0LHRoaXMpOnRoaXMucD1uZXcgSnAoMjAsdGhpcyk6dD90aGlzLnA9bmV3IFhwKDIzLHQsdGhpcyk6dGhpcy5wPW5ldyBKcCgyMix0aGlzKTp0aGlzLl9rKCk/dGhpcy5ibCgpP3RoaXMucD1uZXcga2l0KGwobywyOSksdGhpcyxhKTp0aGlzLnA9bmV3ICQ1ZShsKG8sMjkpLHRoaXMsYSk6RGUobywxNTYpP3Q9PUNZP3RoaXMucD1uZXcgSnAoNDAsdGhpcyk6dGhpcy5CYiZTbD90P3RoaXMucD1uZXcgeHN0KG4sdyx0aGlzLChXY2UoKSxnPT1Wcj9QUGU6Zz09aWg/TVBlOmc9PW5tP0JQZTpnPT1CND9OUGU6Zz09TmE/T1BlOmc9PWg3P0ZQZTpnPT1BbD9EUGU6Zz09a2Y/SVBlOmlwZSkpOnRoaXMucD1uZXcgTmF0KGwobywxNTYpLG4sdyx0aGlzKTp0P3RoaXMucD1uZXcgeXN0KG4sdyx0aGlzLChXY2UoKSxnPT1Wcj9QUGU6Zz09aWg/TVBlOmc9PW5tP0JQZTpnPT1CND9OUGU6Zz09TmE/T1BlOmc9PWg3P0ZQZTpnPT1BbD9EUGU6Zz09a2Y/SVBlOmlwZSkpOnRoaXMucD1uZXcgT2F0KGwobywxNTYpLG4sdyx0aGlzKTp0aGlzLmFsKCk/YT90aGlzLkJiJlNsP3RoaXMuYmwoKT90aGlzLnA9bmV3IFRpdChsKG8sMjkpLHRoaXMsYSk6dGhpcy5wPW5ldyBDNGUobChvLDI5KSx0aGlzLGEpOnRoaXMuYmwoKT90aGlzLnA9bmV3IEVpdChsKG8sMjkpLHRoaXMsYSk6dGhpcy5wPW5ldyB5YWUobChvLDI5KSx0aGlzLGEpOnRoaXMuQmImU2w/dGhpcy5ibCgpP3RoaXMucD1uZXcgeXJ0KGwobywyOSksdGhpcyk6dGhpcy5wPW5ldyBqeWUobChvLDI5KSx0aGlzKTp0aGlzLmJsKCk/dGhpcy5wPW5ldyB3cnQobChvLDI5KSx0aGlzKTp0aGlzLnA9bmV3IG9hZShsKG8sMjkpLHRoaXMpOnRoaXMuYmwoKT9hP3RoaXMuQmImU2w/dGhpcy5wPW5ldyBDaXQobChvLDI5KSx0aGlzLGEpOnRoaXMucD1uZXcgRTRlKGwobywyOSksdGhpcyxhKTp0aGlzLkJiJlNsP3RoaXMucD1uZXcgeHJ0KGwobywyOSksdGhpcyk6dGhpcy5wPW5ldyAkeWUobChvLDI5KSx0aGlzKTphP3RoaXMuQmImU2w/dGhpcy5wPW5ldyBTaXQobChvLDI5KSx0aGlzLGEpOnRoaXMucD1uZXcgVDRlKGwobywyOSksdGhpcyxhKTp0aGlzLkJiJlNsP3RoaXMucD1uZXcga3J0KGwobywyOSksdGhpcyk6dGhpcy5wPW5ldyBjSChsKG8sMjkpLHRoaXMpKSx0aGlzLnB9LGgucms9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5CYiZtMCkhPTB9LGguX2s9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5hbD1mdW5jdGlvbigpe3JldHVybiExfSxoLnNrPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuQmImX2QpIT0wfSxoLnhrPWZ1bmN0aW9uKCl7cmV0dXJuIFZvZSh0aGlzKX0saC5ibD1mdW5jdGlvbigpe3JldHVybiExfSxoLnRrPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuQmImU2wpIT0wfSxoLmNsPWZ1bmN0aW9uKHQpe3RoaXMuaz10fSxoLnVpPWZ1bmN0aW9uKHQpe3BvZSh0aGlzLHQpfSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIEJVKHRoaXMpfSxoLmU9ITEsaC5uPTAsSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbCIsNDYyKSxEKDMzMSw0NjIsezExMDoxLDk0OjEsOTM6MSwzNToxLDE1NToxLDE5NzoxLDU4OjEsMTc5OjEsNjk6MSwxMTQ6MSw0ODE6MSw1NDoxLDk5OjEsMzMxOjEsMTU4OjEsNDYyOjEsMjkyOjEsMTE5OjEsMTIwOjEsNjkyOjF9LHppZSksaC5MaD1mdW5jdGlvbih0LG4scil7dmFyIGEsbztzd2l0Y2godCl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIEhuKCksISEodGhpcy5CYiYyNTYpO2Nhc2UgMzpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJjUxMik7Y2FzZSA0OnJldHVybiBwdCh0aGlzLnMpO2Nhc2UgNTpyZXR1cm4gcHQodGhpcy50KTtjYXNlIDY6cmV0dXJuIEhuKCksISF2OWUodGhpcyk7Y2FzZSA3OnJldHVybiBIbigpLG89dGhpcy5zLG8+PTE7Y2FzZSA4OnJldHVybiBuP09mKHRoaXMpOnRoaXMucjtjYXNlIDk6cmV0dXJuIHRoaXMucTtjYXNlIDEwOnJldHVybiBIbigpLCEhKHRoaXMuQmImbTApO2Nhc2UgMTE6cmV0dXJuIEhuKCksISEodGhpcy5CYiZyNCk7Y2FzZSAxMjpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJlh5KTtjYXNlIDEzOnJldHVybiB0aGlzLmo7Y2FzZSAxNDpyZXR1cm4gVUUodGhpcyk7Y2FzZSAxNTpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJlNsKTtjYXNlIDE2OnJldHVybiBIbigpLCEhKHRoaXMuQmImX2QpO2Nhc2UgMTc6cmV0dXJuIGt5KHRoaXMpO2Nhc2UgMTg6cmV0dXJuIEhuKCksISEodGhpcy5CYiZldSk7Y2FzZSAxOTpyZXR1cm4gbj9nY2UodGhpcyk6RnV0KHRoaXMpfXJldHVybiBzZih0aGlzLHQteXIoKFRuKCksTzQpKSxNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHxPNCksdCksbixyKX0saC5XaD1mdW5jdGlvbih0KXt2YXIgbixyO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4odGhpcy5CYiYyNTYpPT0wO2Nhc2UgMzpyZXR1cm4odGhpcy5CYiY1MTIpPT0wO2Nhc2UgNDpyZXR1cm4gdGhpcy5zIT0wO2Nhc2UgNTpyZXR1cm4gdGhpcy50IT0xO2Nhc2UgNjpyZXR1cm4gdjllKHRoaXMpO2Nhc2UgNzpyZXR1cm4gcj10aGlzLnMscj49MTtjYXNlIDg6cmV0dXJuISF0aGlzLnImJiF0aGlzLnEuZSYmeXcodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4hIXRoaXMucSYmISh0aGlzLnImJiF0aGlzLnEuZSYmeXcodGhpcy5xKS5pPT0wKTtjYXNlIDEwOnJldHVybih0aGlzLkJiJm0wKT09MDtjYXNlIDExOnJldHVybih0aGlzLkJiJnI0KSE9MDtjYXNlIDEyOnJldHVybih0aGlzLkJiJlh5KSE9MDtjYXNlIDEzOnJldHVybiB0aGlzLmohPW51bGw7Y2FzZSAxNDpyZXR1cm4gVUUodGhpcykhPW51bGw7Y2FzZSAxNTpyZXR1cm4odGhpcy5CYiZTbCkhPTA7Y2FzZSAxNjpyZXR1cm4odGhpcy5CYiZfZCkhPTA7Y2FzZSAxNzpyZXR1cm4hIWt5KHRoaXMpO2Nhc2UgMTg6cmV0dXJuKHRoaXMuQmImZXUpIT0wO2Nhc2UgMTk6cmV0dXJuISFGdXQodGhpcyl9cmV0dXJuIG5mKHRoaXMsdC15cigoVG4oKSxPNCkpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fE80KSx0KSl9LGguYmk9ZnVuY3Rpb24odCxuKXt2YXIgcixhO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxBcyh0aGlzLkFiLGwobiwxNikpO3JldHVybjtjYXNlIDE6cG9lKHRoaXMsZWkobikpO3JldHVybjtjYXNlIDI6YzIodGhpcyxSdChCdChuKSkpO3JldHVybjtjYXNlIDM6dTIodGhpcyxSdChCdChuKSkpO3JldHVybjtjYXNlIDQ6aTIodGhpcyxsKG4sMTcpLmEpO3JldHVybjtjYXNlIDU6SkplKHRoaXMsbChuLDE3KS5hKTtyZXR1cm47Y2FzZSA4OkdtKHRoaXMsbChuLDE0MikpO3JldHVybjtjYXNlIDk6YT0kMSh0aGlzLGwobiw4OSksbnVsbCksYSYmYS5vaigpO3JldHVybjtjYXNlIDEwOkFFKHRoaXMsUnQoQnQobikpKTtyZXR1cm47Y2FzZSAxMTpERSh0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgMTI6TEUodGhpcyxSdChCdChuKSkpO3JldHVybjtjYXNlIDEzOlozZSh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSAxNTpNRSh0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgMTY6SUUodGhpcyxSdChCdChuKSkpO3JldHVybjtjYXNlIDE4OiRjZSh0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJufXVmKHRoaXMsdC15cigoVG4oKSxPNCkpLE1uKChyPWwoS24odGhpcywxNiksMjkpLHJ8fE80KSx0KSxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBUbigpLE80fSxoLmtpPWZ1bmN0aW9uKHQpe3ZhciBuLHI7c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksJHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpEZSh0aGlzLkNiLDkwKSYmenkoWWwobCh0aGlzLkNiLDkwKSksNCksRnUodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOmMyKHRoaXMsITApO3JldHVybjtjYXNlIDM6dTIodGhpcywhMCk7cmV0dXJuO2Nhc2UgNDppMih0aGlzLDApO3JldHVybjtjYXNlIDU6dGhpcy5iPTAsTXkodGhpcywxKTtyZXR1cm47Y2FzZSA4OkdtKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgOTpyPSQxKHRoaXMsbnVsbCxudWxsKSxyJiZyLm9qKCk7cmV0dXJuO2Nhc2UgMTA6QUUodGhpcywhMCk7cmV0dXJuO2Nhc2UgMTE6REUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTI6TEUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTM6dGhpcy5pPW51bGwseFYodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAxNTpNRSh0aGlzLCExKTtyZXR1cm47Y2FzZSAxNjpJRSh0aGlzLCExKTtyZXR1cm47Y2FzZSAxODokY2UodGhpcywhMSk7cmV0dXJufWNmKHRoaXMsdC15cigoVG4oKSxPNCkpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fE80KSx0KSl9LGgucGk9ZnVuY3Rpb24oKXtnY2UodGhpcyksV2soaWMoKEVsKCksaW8pLHRoaXMpKSxPZih0aGlzKSx0aGlzLkJifD0xfSxoLkprPWZ1bmN0aW9uKCl7cmV0dXJuIHY5ZSh0aGlzKX0saC5Zaz1mdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLmI9MCx0aGlzLmE9bnVsbCxvOGUodGhpcyx0LG4pfSxoLlprPWZ1bmN0aW9uKHQpe0pKZSh0aGlzLHQpfSxoLkliPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHRoaXMuRGImNjQ/QlUodGhpcyk6KHQ9bmV3IEFmKEJVKHRoaXMpKSx0LmErPSIgKGlEOiAiLEdwKHQsKHRoaXMuQmImZXUpIT0wKSx0LmErPSIpIix0LmEpfSxoLmI9MCxJKEduLCJFQXR0cmlidXRlSW1wbCIsMzMxKSxEKDM2NCw0NDgsezExMDoxLDk0OjEsOTM6MSwxNDI6MSwxNTU6MSwxOTc6MSw1ODoxLDExNDoxLDU0OjEsOTk6MSwzNjQ6MSwxNTg6MSwxMTk6MSwxMjA6MSw2OTE6MX0pLGguZGw9ZnVuY3Rpb24odCl7cmV0dXJuIHQuRGgoKT09dGhpc30saC5BaD1mdW5jdGlvbih0KXtyZXR1cm4gd3VlKHRoaXMsdCl9LGguQmg9ZnVuY3Rpb24odCxuKXt0aGlzLnc9bnVsbCx0aGlzLkRiPW48PDE2fHRoaXMuRGImMjU1LHRoaXMuQ2I9dH0saC5MaD1mdW5jdGlvbih0LG4scil7dmFyIGE7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiB0aGlzLkQhPW51bGw/dGhpcy5EOnRoaXMuQjtjYXNlIDM6cmV0dXJuIHp3KHRoaXMpO2Nhc2UgNDpyZXR1cm4gdGhpcy5paygpO2Nhc2UgNTpyZXR1cm4gdGhpcy5GO2Nhc2UgNjpyZXR1cm4gbj9BaCh0aGlzKTpRayh0aGlzKTtjYXNlIDc6cmV0dXJuIXRoaXMuQSYmKHRoaXMuQT1uZXcgbWwoWnUsdGhpcyw3KSksdGhpcy5BfXJldHVybiBzZih0aGlzLHQteXIodGhpcy5paSgpKSxNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHx0aGlzLmlpKCkpLHQpLG4scil9LGguU2g9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZjtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxSdSh0aGlzLkFiLHQscik7Y2FzZSA2OnJldHVybiB0aGlzLkNiJiYocj0obz10aGlzLkRiPj4xNixvPj0wP3d1ZSh0aGlzLHIpOnRoaXMuQ2IuVGgodGhpcywtMS1vLG51bGwscikpKSxOaCh0aGlzLHQsNixyKX1yZXR1cm4gZj1sKE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fHRoaXMuaWkoKSksbiksNjkpLGYud2soKS56ayh0aGlzLEt1KHRoaXMpLG4teXIodGhpcy5paSgpKSx0LHIpfSxoLlVoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLFRvKHRoaXMuQWIsdCxyKTtjYXNlIDY6cmV0dXJuIE5oKHRoaXMsbnVsbCw2LHIpO2Nhc2UgNzpyZXR1cm4hdGhpcy5BJiYodGhpcy5BPW5ldyBtbChadSx0aGlzLDcpKSxUbyh0aGlzLkEsdCxyKX1yZXR1cm4gbz1sKE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fHRoaXMuaWkoKSksbiksNjkpLG8ud2soKS5Bayh0aGlzLEt1KHRoaXMpLG4teXIodGhpcy5paSgpKSx0LHIpfSxoLldoPWZ1bmN0aW9uKHQpe3ZhciBuO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4gdGhpcy5EIT1udWxsJiZ0aGlzLkQ9PXRoaXMuRjtjYXNlIDM6cmV0dXJuISF6dyh0aGlzKTtjYXNlIDQ6cmV0dXJuIHRoaXMuaWsoKSE9bnVsbDtjYXNlIDU6cmV0dXJuIHRoaXMuRiE9bnVsbCYmdGhpcy5GIT10aGlzLkQmJnRoaXMuRiE9dGhpcy5CO2Nhc2UgNjpyZXR1cm4hIVFrKHRoaXMpO2Nhc2UgNzpyZXR1cm4hIXRoaXMuQSYmdGhpcy5BLmkhPTB9cmV0dXJuIG5mKHRoaXMsdC15cih0aGlzLmlpKCkpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fHRoaXMuaWkoKSksdCkpfSxoLmJpPWZ1bmN0aW9uKHQsbil7dmFyIHI7c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksJHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLEFzKHRoaXMuQWIsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMTpGSCh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSAyOktzZSh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSA1OkpFKHRoaXMsZWkobikpO3JldHVybjtjYXNlIDc6IXRoaXMuQSYmKHRoaXMuQT1uZXcgbWwoWnUsdGhpcyw3KSksJHIodGhpcy5BKSwhdGhpcy5BJiYodGhpcy5BPW5ldyBtbChadSx0aGlzLDcpKSxBcyh0aGlzLkEsbChuLDE2KSk7cmV0dXJufXVmKHRoaXMsdC15cih0aGlzLmlpKCkpLE1uKChyPWwoS24odGhpcywxNiksMjkpLHJ8fHRoaXMuaWkoKSksdCksbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gVG4oKSwkX3R9LGgua2k9ZnVuY3Rpb24odCl7dmFyIG47c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksJHIodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpEZSh0aGlzLkNiLDE4NCkmJihsKHRoaXMuQ2IsMTg0KS50Yj1udWxsKSxGdSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6Q0UodGhpcyxudWxsKSxsRSh0aGlzLHRoaXMuRCk7cmV0dXJuO2Nhc2UgNTpKRSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDc6IXRoaXMuQSYmKHRoaXMuQT1uZXcgbWwoWnUsdGhpcyw3KSksJHIodGhpcy5BKTtyZXR1cm59Y2YodGhpcyx0LXlyKHRoaXMuaWkoKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8dGhpcy5paSgpKSx0KSl9LGguaGs9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdGhpcy5HPT0tMSYmKHRoaXMuRz0odD1BaCh0aGlzKSx0P2YyKHQudmkoKSx0aGlzKTotMSkpLHRoaXMuR30saC5paz1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLmprPWZ1bmN0aW9uKCl7cmV0dXJuIEFoKHRoaXMpfSxoLmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudn0saC5raz1mdW5jdGlvbigpe3JldHVybiB6dyh0aGlzKX0saC5saz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkQhPW51bGw/dGhpcy5EOnRoaXMuQn0saC5taz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkZ9LGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIHVsZSh0aGlzLHQpfSxoLmZsPWZ1bmN0aW9uKHQpe3RoaXMudj10fSxoLmdsPWZ1bmN0aW9uKHQpe3hmdCh0aGlzLHQpfSxoLmhsPWZ1bmN0aW9uKHQpe3RoaXMuQz10fSxoLnVpPWZ1bmN0aW9uKHQpe0ZIKHRoaXMsdCl9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gVVYodGhpcyl9LGguQz1udWxsLGguRD1udWxsLGguRz0tMSxJKEduLCJFQ2xhc3NpZmllckltcGwiLDM2NCksRCg5MCwzNjQsezExMDoxLDk0OjEsOTM6MSwyOToxLDE0MjoxLDE1NToxLDE5NzoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDkwOjEsMzY0OjEsMTU4OjEsNDgyOjEsMTE5OjEsMTIwOjEsNjkxOjF9LGh6KSxoLmRsPWZ1bmN0aW9uKHQpe3JldHVybiBCZm4odGhpcyx0LkRoKCkpfSxoLkxoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYTtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbD90aGlzLkQ6dGhpcy5CO2Nhc2UgMzpyZXR1cm4gencodGhpcyk7Y2FzZSA0OnJldHVybiBudWxsO2Nhc2UgNTpyZXR1cm4gdGhpcy5GO2Nhc2UgNjpyZXR1cm4gbj9BaCh0aGlzKTpRayh0aGlzKTtjYXNlIDc6cmV0dXJuIXRoaXMuQSYmKHRoaXMuQT1uZXcgbWwoWnUsdGhpcyw3KSksdGhpcy5BO2Nhc2UgODpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJjI1Nik7Y2FzZSA5OnJldHVybiBIbigpLCEhKHRoaXMuQmImNTEyKTtjYXNlIDEwOnJldHVybiBkYyh0aGlzKTtjYXNlIDExOnJldHVybiF0aGlzLnEmJih0aGlzLnE9bmV3IG50KFVmLHRoaXMsMTEsMTApKSx0aGlzLnE7Y2FzZSAxMjpyZXR1cm4gZDYodGhpcyk7Y2FzZSAxMzpyZXR1cm4gSkEodGhpcyk7Y2FzZSAxNDpyZXR1cm4gSkEodGhpcyksdGhpcy5yO2Nhc2UgMTU6cmV0dXJuIGQ2KHRoaXMpLHRoaXMuaztjYXNlIDE2OnJldHVybiBvOWUodGhpcyk7Y2FzZSAxNzpyZXR1cm4gZGxlKHRoaXMpO2Nhc2UgMTg6cmV0dXJuIFNkKHRoaXMpO2Nhc2UgMTk6cmV0dXJuIF9VKHRoaXMpO2Nhc2UgMjA6cmV0dXJuIGQ2KHRoaXMpLHRoaXMubztjYXNlIDIxOnJldHVybiF0aGlzLnMmJih0aGlzLnM9bmV3IG50KGRsLHRoaXMsMjEsMTcpKSx0aGlzLnM7Y2FzZSAyMjpyZXR1cm4gZHUodGhpcyk7Y2FzZSAyMzpyZXR1cm4gWnVlKHRoaXMpfXJldHVybiBzZih0aGlzLHQteXIoKFRuKCksSmIpKSxNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHxKYiksdCksbixyKX0saC5TaD1mdW5jdGlvbih0LG4scil7dmFyIGEsbyxmO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLFJ1KHRoaXMuQWIsdCxyKTtjYXNlIDY6cmV0dXJuIHRoaXMuQ2ImJihyPShvPXRoaXMuRGI+PjE2LG8+PTA/d3VlKHRoaXMscik6dGhpcy5DYi5UaCh0aGlzLC0xLW8sbnVsbCxyKSkpLE5oKHRoaXMsdCw2LHIpO2Nhc2UgMTE6cmV0dXJuIXRoaXMucSYmKHRoaXMucT1uZXcgbnQoVWYsdGhpcywxMSwxMCkpLFJ1KHRoaXMucSx0LHIpO2Nhc2UgMjE6cmV0dXJuIXRoaXMucyYmKHRoaXMucz1uZXcgbnQoZGwsdGhpcywyMSwxNykpLFJ1KHRoaXMucyx0LHIpfXJldHVybiBmPWwoTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8KFRuKCksSmIpKSxuKSw2OSksZi53aygpLnprKHRoaXMsS3UodGhpcyksbi15cigoVG4oKSxKYikpLHQscil9LGguVWg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksVG8odGhpcy5BYix0LHIpO2Nhc2UgNjpyZXR1cm4gTmgodGhpcyxudWxsLDYscik7Y2FzZSA3OnJldHVybiF0aGlzLkEmJih0aGlzLkE9bmV3IG1sKFp1LHRoaXMsNykpLFRvKHRoaXMuQSx0LHIpO2Nhc2UgMTE6cmV0dXJuIXRoaXMucSYmKHRoaXMucT1uZXcgbnQoVWYsdGhpcywxMSwxMCkpLFRvKHRoaXMucSx0LHIpO2Nhc2UgMjE6cmV0dXJuIXRoaXMucyYmKHRoaXMucz1uZXcgbnQoZGwsdGhpcywyMSwxNykpLFRvKHRoaXMucyx0LHIpO2Nhc2UgMjI6cmV0dXJuIFRvKGR1KHRoaXMpLHQscil9cmV0dXJuIG89bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHwoVG4oKSxKYikpLG4pLDY5KSxvLndrKCkuQWsodGhpcyxLdSh0aGlzKSxuLXlyKChUbigpLEpiKSksdCxyKX0saC5XaD1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbCYmdGhpcy5EPT10aGlzLkY7Y2FzZSAzOnJldHVybiEhencodGhpcyk7Y2FzZSA0OnJldHVybiExO2Nhc2UgNTpyZXR1cm4gdGhpcy5GIT1udWxsJiZ0aGlzLkYhPXRoaXMuRCYmdGhpcy5GIT10aGlzLkI7Y2FzZSA2OnJldHVybiEhUWsodGhpcyk7Y2FzZSA3OnJldHVybiEhdGhpcy5BJiZ0aGlzLkEuaSE9MDtjYXNlIDg6cmV0dXJuKHRoaXMuQmImMjU2KSE9MDtjYXNlIDk6cmV0dXJuKHRoaXMuQmImNTEyKSE9MDtjYXNlIDEwOnJldHVybiEhdGhpcy51JiZkdSh0aGlzLnUuYSkuaSE9MCYmISh0aGlzLm4mJmN1ZSh0aGlzLm4pKTtjYXNlIDExOnJldHVybiEhdGhpcy5xJiZ0aGlzLnEuaSE9MDtjYXNlIDEyOnJldHVybiBkNih0aGlzKS5pIT0wO2Nhc2UgMTM6cmV0dXJuIEpBKHRoaXMpLmkhPTA7Y2FzZSAxNDpyZXR1cm4gSkEodGhpcyksdGhpcy5yLmkhPTA7Y2FzZSAxNTpyZXR1cm4gZDYodGhpcyksdGhpcy5rLmkhPTA7Y2FzZSAxNjpyZXR1cm4gbzllKHRoaXMpLmkhPTA7Y2FzZSAxNzpyZXR1cm4gZGxlKHRoaXMpLmkhPTA7Y2FzZSAxODpyZXR1cm4gU2QodGhpcykuaSE9MDtjYXNlIDE5OnJldHVybiBfVSh0aGlzKS5pIT0wO2Nhc2UgMjA6cmV0dXJuIGQ2KHRoaXMpLCEhdGhpcy5vO2Nhc2UgMjE6cmV0dXJuISF0aGlzLnMmJnRoaXMucy5pIT0wO2Nhc2UgMjI6cmV0dXJuISF0aGlzLm4mJmN1ZSh0aGlzLm4pO2Nhc2UgMjM6cmV0dXJuIFp1ZSh0aGlzKS5pIT0wfXJldHVybiBuZih0aGlzLHQteXIoKFRuKCksSmIpKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHxKYiksdCkpfSxoLlpoPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiBuPXRoaXMuaT09bnVsbHx8dGhpcy5xJiZ0aGlzLnEuaSE9MD9udWxsOm9QKHRoaXMsdCksbnx8SGtlKHRoaXMsdCl9LGguYmk9ZnVuY3Rpb24odCxuKXt2YXIgcjtzd2l0Y2godCl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSwkcih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksQXModGhpcy5BYixsKG4sMTYpKTtyZXR1cm47Y2FzZSAxOkZIKHRoaXMsZWkobikpO3JldHVybjtjYXNlIDI6S3NlKHRoaXMsZWkobikpO3JldHVybjtjYXNlIDU6SkUodGhpcyxlaShuKSk7cmV0dXJuO2Nhc2UgNzohdGhpcy5BJiYodGhpcy5BPW5ldyBtbChadSx0aGlzLDcpKSwkcih0aGlzLkEpLCF0aGlzLkEmJih0aGlzLkE9bmV3IG1sKFp1LHRoaXMsNykpLEFzKHRoaXMuQSxsKG4sMTYpKTtyZXR1cm47Y2FzZSA4OmM4ZSh0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgOTp1OGUodGhpcyxSdChCdChuKSkpO3JldHVybjtjYXNlIDEwOnRMKGRjKHRoaXMpKSxBcyhkYyh0aGlzKSxsKG4sMTYpKTtyZXR1cm47Y2FzZSAxMTohdGhpcy5xJiYodGhpcy5xPW5ldyBudChVZix0aGlzLDExLDEwKSksJHIodGhpcy5xKSwhdGhpcy5xJiYodGhpcy5xPW5ldyBudChVZix0aGlzLDExLDEwKSksQXModGhpcy5xLGwobiwxNikpO3JldHVybjtjYXNlIDIxOiF0aGlzLnMmJih0aGlzLnM9bmV3IG50KGRsLHRoaXMsMjEsMTcpKSwkcih0aGlzLnMpLCF0aGlzLnMmJih0aGlzLnM9bmV3IG50KGRsLHRoaXMsMjEsMTcpKSxBcyh0aGlzLnMsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMjI6JHIoZHUodGhpcykpLEFzKGR1KHRoaXMpLGwobiwxNikpO3JldHVybn11Zih0aGlzLHQteXIoKFRuKCksSmIpKSxNbigocj1sKEtuKHRoaXMsMTYpLDI5KSxyfHxKYiksdCksbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gVG4oKSxKYn0saC5raT1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSwkcih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOkRlKHRoaXMuQ2IsMTg0KSYmKGwodGhpcy5DYiwxODQpLnRiPW51bGwpLEZ1KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjpDRSh0aGlzLG51bGwpLGxFKHRoaXMsdGhpcy5EKTtyZXR1cm47Y2FzZSA1OkpFKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNzohdGhpcy5BJiYodGhpcy5BPW5ldyBtbChadSx0aGlzLDcpKSwkcih0aGlzLkEpO3JldHVybjtjYXNlIDg6YzhlKHRoaXMsITEpO3JldHVybjtjYXNlIDk6dThlKHRoaXMsITEpO3JldHVybjtjYXNlIDEwOnRoaXMudSYmdEwodGhpcy51KTtyZXR1cm47Y2FzZSAxMTohdGhpcy5xJiYodGhpcy5xPW5ldyBudChVZix0aGlzLDExLDEwKSksJHIodGhpcy5xKTtyZXR1cm47Y2FzZSAyMTohdGhpcy5zJiYodGhpcy5zPW5ldyBudChkbCx0aGlzLDIxLDE3KSksJHIodGhpcy5zKTtyZXR1cm47Y2FzZSAyMjp0aGlzLm4mJiRyKHRoaXMubik7cmV0dXJufWNmKHRoaXMsdC15cigoVG4oKSxKYikpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fEpiKSx0KSl9LGgucGk9ZnVuY3Rpb24oKXt2YXIgdCxuO2lmKGQ2KHRoaXMpLEpBKHRoaXMpLG85ZSh0aGlzKSxkbGUodGhpcyksU2QodGhpcyksX1UodGhpcyksWnVlKHRoaXMpLHVBKGNkbihZbCh0aGlzKSkpLHRoaXMucylmb3IodD0wLG49dGhpcy5zLmk7dDxuOysrdClTTyhPZSh0aGlzLnMsdCkpO2lmKHRoaXMucSlmb3IodD0wLG49dGhpcy5xLmk7dDxuOysrdClTTyhPZSh0aGlzLnEsdCkpO28yKChFbCgpLGlvKSx0aGlzKS54ZSgpLHRoaXMuQmJ8PTF9LGguSWI9ZnVuY3Rpb24oKXtyZXR1cm4gX3hlKHRoaXMpfSxoLms9bnVsbCxoLnI9bnVsbDt2YXIgcU0sWF90LG5wZTtJKEduLCJFQ2xhc3NJbXBsIiw5MCksRCgyMDkyLDIwOTEsYjV0KSxoLkVpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGxsZSh0aGlzLHQsbil9LGguRmk9ZnVuY3Rpb24odCl7cmV0dXJuIGxsZSh0aGlzLHRoaXMuaSx0KX0saC5HaT1mdW5jdGlvbih0LG4pe0U5ZSh0aGlzLHQsbil9LGguSGk9ZnVuY3Rpb24odCl7VnVlKHRoaXMsdCl9LGguV2s9ZnVuY3Rpb24odCxuKXtyZXR1cm4gUnUodGhpcyx0LG4pfSxoLiRpPWZ1bmN0aW9uKHQpe3JldHVybiBSNmUodGhpcyx0KX0saC5Yaz1mdW5jdGlvbih0LG4pe3JldHVybiBUbyh0aGlzLHQsbil9LGguWGk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gS210KHRoaXMsdCxuKX0saC5JaT1mdW5jdGlvbigpe3JldHVybiBuZXcgSDgodGhpcyl9LGguSmk9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IENPKHRoaXMpfSxoLktpPWZ1bmN0aW9uKHQpe3JldHVybiBtTih0aGlzLHQpfSxJKHVzLCJOb3RpZnlpbmdJbnRlcm5hbEVMaXN0SW1wbCIsMjA5MiksRCg2MzIsMjA5MixrYyksaC5IYz1mdW5jdGlvbih0KXtyZXR1cm4gZ3Z0KHRoaXMsdCl9LGguSWo9ZnVuY3Rpb24odCxuLHIsYSxvKXtyZXR1cm4gckEodGhpcyx0LG4scixhLG8pfSxoLkpqPWZ1bmN0aW9uKHQpe3hrKHRoaXMsdCl9LGguRms9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXN9LGguTGs9ZnVuY3Rpb24oKXtyZXR1cm4gTW4odGhpcy5lLkRoKCksdGhpcy5MaigpKX0saC5Laj1mdW5jdGlvbigpe3JldHVybiB0aGlzLkxrKCl9LGguTGo9ZnVuY3Rpb24oKXtyZXR1cm4gbXModGhpcy5lLkRoKCksdGhpcy5MaygpKX0saC5pbD1mdW5jdGlvbigpe3JldHVybiBsKHRoaXMuTGsoKS5IaygpLDI5KS5raygpfSxoLmpsPWZ1bmN0aW9uKCl7cmV0dXJuIFJvKGwodGhpcy5MaygpLDE5KSkubn0saC5qaj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV9LGgua2w9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5sbD1mdW5jdGlvbigpe3JldHVybiExfSxoLm1sPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGgubmw9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5kZD1mdW5jdGlvbih0KXtyZXR1cm4gZjIodGhpcyx0KX0saC5Oaj1mdW5jdGlvbih0LG4pe3ZhciByO3JldHVybiByPWwodCw1NCksdGhpcy5tbCgpP3RoaXMua2woKT9yLlJoKHRoaXMuZSx0aGlzLmpsKCksdGhpcy5pbCgpLG4pOnIuUmgodGhpcy5lLG1zKHIuRGgoKSxSbyhsKHRoaXMuTGsoKSwxOSkpKSxudWxsLG4pOnIuUmgodGhpcy5lLC0xLXRoaXMuTGooKSxudWxsLG4pfSxoLk9qPWZ1bmN0aW9uKHQsbil7dmFyIHI7cmV0dXJuIHI9bCh0LDU0KSx0aGlzLm1sKCk/dGhpcy5rbCgpP3IuVGgodGhpcy5lLHRoaXMuamwoKSx0aGlzLmlsKCksbik6ci5UaCh0aGlzLmUsbXMoci5EaCgpLFJvKGwodGhpcy5MaygpLDE5KSkpLG51bGwsbik6ci5UaCh0aGlzLmUsLTEtdGhpcy5MaigpLG51bGwsbil9LGguYWw9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5vbD1mdW5jdGlvbigpe3JldHVybiEwfSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBSY3QodGhpcy5kLHQpfSxoLlBqPWZ1bmN0aW9uKCl7cmV0dXJuIGhoKHRoaXMuZSl9LGguUWo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pIT0wfSxoLmFqPWZ1bmN0aW9uKHQpe3JldHVybiBiTih0aGlzLmQsdCl9LGguV2k9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5vbCgpJiZ0aGlzLm5sKCk/RXgodGhpcyx0LGwobiw1OCkpOm59LGgucGw9ZnVuY3Rpb24odCl7cmV0dXJuIHQuVmgoKT95Yih0aGlzLmUsbCh0LDU0KSk6dH0saC5XYj1mdW5jdGlvbih0KXtEbnQodGhpcyx0KX0saC5QYz1mdW5jdGlvbigpe3JldHVybiBPbHQodGhpcyl9LGguUWM9ZnVuY3Rpb24odCl7dmFyIG47aWYodGhpcy5ubCgpKWZvcihuPXRoaXMuaS0xO24+PTA7LS1uKU9lKHRoaXMsbik7cmV0dXJuIE84ZSh0aGlzLHQpfSxoLkdrPWZ1bmN0aW9uKCl7JHIodGhpcyl9LGguWmk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gSGh0KHRoaXMsdCxuKX0sSSh1cywiRWNvcmVFTGlzdCIsNjMyKSxEKDUwNSw2MzIsa2MsRk8pLGguTGk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5Maj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGguTWo9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5vbD1mdW5jdGlvbigpe3JldHVybiEwfSxoLlNpPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguV2k9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbn0saC5ZaT1mdW5jdGlvbigpe3JldHVybiExfSxoLmM9MCxJKHVzLCJFT2JqZWN0RUxpc3QiLDUwNSksRCg4Myw1MDUsa2MsWXMpLGguTWo9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5tbD1mdW5jdGlvbigpe3JldHVybiExfSxoLmFsPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkodXMsIkVPYmplY3RDb250YWlubWVudEVMaXN0Iiw4MyksRCg1NTUsODMsa2MsQnEpLGguTmk9ZnVuY3Rpb24oKXt0aGlzLmI9ITB9LGguUWo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLkdrPWZ1bmN0aW9uKCl7dmFyIHQ7JHIodGhpcyksaGgodGhpcy5lKT8odD10aGlzLmIsdGhpcy5iPSExLE5pKHRoaXMuZSxuZXcgaDAodGhpcy5lLDIsdGhpcy5jLHQsITEpKSk6dGhpcy5iPSExfSxoLmI9ITEsSSh1cywiRU9iamVjdENvbnRhaW5tZW50RUxpc3QvVW5zZXR0YWJsZSIsNTU1KSxEKDExNjEsNTU1LGtjLHZzdCksaC5UaT1mdW5jdGlvbih0LG4pe3ZhciByLGE7cmV0dXJuIHI9bChBQSh0aGlzLHQsbiksODkpLGhoKHRoaXMuZSkmJnhrKHRoaXMsbmV3IHNOKHRoaXMuYSw3LChUbigpLHpfdCkscHQobiksKGE9ci5jLERlKGEsOTApP2woYSwyOSk6S2YpLHQpKSxyfSxoLlVqPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEw1bih0aGlzLGwodCw4OSksbil9LGguVmo9ZnVuY3Rpb24odCxuKXtyZXR1cm4gQTVuKHRoaXMsbCh0LDg5KSxuKX0saC5Xaj1mdW5jdGlvbih0LG4scil7cmV0dXJuIEk4bih0aGlzLGwodCw4OSksbChuLDg5KSxyKX0saC5Jaj1mdW5jdGlvbih0LG4scixhLG8pe3N3aXRjaCh0KXtjYXNlIDM6cmV0dXJuIHJBKHRoaXMsdCxuLHIsYSx0aGlzLmk+MSk7Y2FzZSA1OnJldHVybiByQSh0aGlzLHQsbixyLGEsdGhpcy5pLWwociwxNSkuZ2MoKT4wKTtkZWZhdWx0OnJldHVybiBuZXcgWmcodGhpcy5lLHQsdGhpcy5jLG4scixhLCEwKX19LGguVGo9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5Raj1mdW5jdGlvbigpe3JldHVybiBjdWUodGhpcyl9LGguR2s9ZnVuY3Rpb24oKXskcih0aGlzKX0sSShHbiwiRUNsYXNzSW1wbC8xIiwxMTYxKSxEKDExNzUsMTE3NCxTU2UpLGguZGo9ZnVuY3Rpb24odCl7dmFyIG4scixhLG8sZixnLHc7aWYocj10LmdqKCksciE9OCl7aWYoYT1sNm4odCksYT09MClzd2l0Y2gocil7Y2FzZSAxOmNhc2UgOTp7dz10LmtqKCksdyE9bnVsbCYmKG49WWwobCh3LDQ4MikpLCFuLmMmJihuLmM9bmV3IFhkKSxzVihuLmMsdC5qaigpKSksZz10LmlqKCksZyE9bnVsbCYmKG89bChnLDQ4Miksby5CYiYxfHwobj1ZbChvKSwhbi5jJiYobi5jPW5ldyBYZCkscXIobi5jLGwodC5qaigpLDI5KSkpKTticmVha31jYXNlIDM6e2c9dC5paigpLGchPW51bGwmJihvPWwoZyw0ODIpLG8uQmImMXx8KG49WWwobyksIW4uYyYmKG4uYz1uZXcgWGQpLHFyKG4uYyxsKHQuamooKSwyOSkpKSk7YnJlYWt9Y2FzZSA1OntpZihnPXQuaWooKSxnIT1udWxsKWZvcihmPWwoZywxNikuS2MoKTtmLk9iKCk7KW89bChmLlBiKCksNDgyKSxvLkJiJjF8fChuPVlsKG8pLCFuLmMmJihuLmM9bmV3IFhkKSxxcihuLmMsbCh0LmpqKCksMjkpKSk7YnJlYWt9Y2FzZSA0Ont3PXQua2ooKSx3IT1udWxsJiYobz1sKHcsNDgyKSxvLkJiJjF8fChuPVlsKG8pLCFuLmMmJihuLmM9bmV3IFhkKSxzVihuLmMsdC5qaigpKSkpO2JyZWFrfWNhc2UgNjp7aWYodz10LmtqKCksdyE9bnVsbClmb3IoZj1sKHcsMTYpLktjKCk7Zi5PYigpOylvPWwoZi5QYigpLDQ4Miksby5CYiYxfHwobj1ZbChvKSwhbi5jJiYobi5jPW5ldyBYZCksc1Yobi5jLHQuamooKSkpO2JyZWFrfX10aGlzLnFsKGEpfX0saC5xbD1mdW5jdGlvbih0KXtWYnQodGhpcyx0KX0saC5iPTYzLEkoR24sIkVTdXBlckFkYXB0ZXIiLDExNzUpLEQoMTE3NiwxMTc1LFNTZSxiUWUpLGgucWw9ZnVuY3Rpb24odCl7enkodGhpcyx0KX0sSShHbiwiRUNsYXNzSW1wbC8xMCIsMTE3NiksRCgxMTY1LDcxMCxrYyksaC5FaT1mdW5jdGlvbih0LG4pe3JldHVybiBEdWUodGhpcyx0LG4pfSxoLkZpPWZ1bmN0aW9uKHQpe3JldHVybiBPZHQodGhpcyx0KX0saC5HaT1mdW5jdGlvbih0LG4pe0lOKHRoaXMsdCxuKX0saC5IaT1mdW5jdGlvbih0KXt0Tih0aGlzLHQpfSxoLiRpPWZ1bmN0aW9uKHQpe3JldHVybiBSNmUodGhpcyx0KX0saC5YaT1mdW5jdGlvbih0LG4pe3JldHVybiBVb2UodGhpcyx0LG4pfSxoLldrPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IFFyKX0saC5JaT1mdW5jdGlvbigpe3JldHVybiBuZXcgSDgodGhpcyl9LGguSmk9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IENPKHRoaXMpfSxoLktpPWZ1bmN0aW9uKHQpe3JldHVybiBtTih0aGlzLHQpfSxoLlhrPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IFFyKX0saC5Gaz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpc30saC5Raj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmkhPTB9LGguV2I9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0saC5Haz1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyBRcil9LEkodXMsIkVjb3JlRUxpc3QvVW5tb2RpZmlhYmxlRUxpc3QiLDExNjUpLEQoMzI4LDExNjUsa2MsTjUpLGguWWk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sSSh1cywiRWNvcmVFTGlzdC9Vbm1vZGlmaWFibGVFTGlzdC9GYXN0Q29tcGFyZSIsMzI4KSxEKDExNjgsMzI4LGtjLGcwdCksaC5kZD1mdW5jdGlvbih0KXt2YXIgbixyLGE7aWYoRGUodCwxNzkpJiYobj1sKHQsMTc5KSxyPW4uTGooKSxyIT0tMSkpe2ZvcihhPXRoaXMuaTtyPGE7KytyKWlmKHFlKHRoaXMuZ1tyXSk9PT1xZSh0KSlyZXR1cm4gcn1yZXR1cm4tMX0sSShHbiwiRUNsYXNzSW1wbC8xRUFsbFN0cnVjdHVyYWxGZWF0dXJlc0xpc3QiLDExNjgpLEQoMTE2Miw1MDYsQmQsUWMpLGguYWo9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKFdvLG01dCw4OSx0LDAsMSl9LGguWWk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sSShHbiwiRUNsYXNzSW1wbC8xRUdlbmVyaWNTdXBlclR5cGVFTGlzdCIsMTE2MiksRCg2MzMsNTA2LEJkLFNJKSxoLmFqPWZ1bmN0aW9uKHQpe3JldHVybiBXZShkbCxTNiwxNzksdCwwLDEpfSxoLllpPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEkoR24sIkVDbGFzc0ltcGwvMUVTdHJ1Y3R1cmFsRmVhdHVyZVVuaXF1ZUVMaXN0Iiw2MzMpLEQoNzU1LDUwNixCZCxfSSksaC5haj1mdW5jdGlvbih0KXtyZXR1cm4gV2UoSTQsUzYsMTksdCwwLDEpfSxoLllpPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEkoR24sIkVDbGFzc0ltcGwvMVJlZmVyZW5jZUxpc3QiLDc1NSksRCgxMTYzLDUwNixCZCxtUWUpLGguTWk9ZnVuY3Rpb24odCxuKXt1Z24odGhpcyxsKG4sMzUpKX0saC5haj1mdW5jdGlvbih0KXtyZXR1cm4gV2UoRDQsUzYsMzUsdCwwLDEpfSxoLllpPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEkoR24sIkVDbGFzc0ltcGwvMiIsMTE2MyksRCgxMTY0LDUwNixCZCxEUyksaC5haj1mdW5jdGlvbih0KXtyZXR1cm4gV2UoRDQsUzYsMzUsdCwwLDEpfSxoLllpPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEkoR24sIkVDbGFzc0ltcGwvMyIsMTE2NCksRCgxMTY2LDMyOCxrYyxxaXQpLGguRmM9ZnVuY3Rpb24odCl7cmV0dXJuIF9tbih0aGlzLGwodCwzNSkpfSxoLkhpPWZ1bmN0aW9uKHQpe1h1bih0aGlzLGwodCwzNSkpfSxJKEduLCJFQ2xhc3NJbXBsLzQiLDExNjYpLEQoMTE2NywzMjgsa2Mseml0KSxoLkZjPWZ1bmN0aW9uKHQpe3JldHVybiBBbW4odGhpcyxsKHQsMTkpKX0saC5IaT1mdW5jdGlvbih0KXtRdW4odGhpcyxsKHQsMTkpKX0sSShHbiwiRUNsYXNzSW1wbC81IiwxMTY3KSxEKDExNjksNTA2LEJkLEpuZSksaC5haj1mdW5jdGlvbih0KXtyZXR1cm4gV2UoVWYsTFNlLDYyLHQsMCwxKX0saC5ZaT1mdW5jdGlvbigpe3JldHVybiExfSxJKEduLCJFQ2xhc3NJbXBsLzYiLDExNjkpLEQoMTE3MCw1MDYsQmQsWm5lKSxoLmFqPWZ1bmN0aW9uKHQpe3JldHVybiBXZShJNCxTNiwxOSx0LDAsMSl9LGguWWk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sSShHbiwiRUNsYXNzSW1wbC83IiwxMTcwKSxEKDIwOTUsMjA5NCx7MzoxLDQ6MSwyMDoxLDMxOjEsNTY6MSwxNjoxLDE1OjEsNzA6MSw2MToxLDcxOjF9KSxoLkVpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHdrZSh0aGlzLHQsbil9LGguRmk9ZnVuY3Rpb24odCl7cmV0dXJuIHdrZSh0aGlzLHRoaXMuRWooKSx0KX0saC5HaT1mdW5jdGlvbih0LG4pe0UydCh0aGlzLHQsbil9LGguSGk9ZnVuY3Rpb24odCl7aDJ0KHRoaXMsdCl9LGguV2s9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbjduKHRoaXMsdCxuKX0saC5Yaz1mdW5jdGlvbih0LG4pe3JldHVybiBMNm4odGhpcyx0LG4pfSxoLlhpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIE1tdCh0aGlzLHQsbil9LGguJGk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueGoodCl9LGguSWk9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEg4KHRoaXMpfSxoLnBqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2ooKX0saC5KaT1mdW5jdGlvbigpe3JldHVybiBuZXcgQ08odGhpcyl9LGguS2k9ZnVuY3Rpb24odCl7cmV0dXJuIG1OKHRoaXMsdCl9LEkodXMsIkRlbGVnYXRpbmdOb3RpZnlpbmdJbnRlcm5hbEVMaXN0SW1wbCIsMjA5NSksRCg3NTYsMjA5NSxNU2UpLGguTGk9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1NbihzbCh0aGlzLmIpLHRoaXMuTGooKSkuSGsoKSxEZSh0LDE1NikmJiFEZSh0LDQ2OSkmJih0LmtrKCkuaSYxKT09MH0saC5IYz1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGcsdyxFO2lmKHRoaXMub2woKSl7aWYoRT10aGlzLkVqKCksRT40KWlmKHRoaXMuZmsodCkpe2lmKHRoaXMuYWwoKSl7aWYoYT1sKHQsNTQpLHI9YS5FaCgpLHc9cj09dGhpcy5iJiYodGhpcy5tbCgpP2EueWgoYS5GaCgpLGwoTW4oc2wodGhpcy5iKSx0aGlzLkxqKCkpLkhrKCksMjkpLmtrKCkpPT1SbyhsKE1uKHNsKHRoaXMuYiksdGhpcy5MaigpKSwxOSkpLm46LTEtYS5GaCgpPT10aGlzLkxqKCkpLHRoaXMubmwoKSYmIXcmJiFyJiZhLkpoKCkpe2ZvcihvPTA7bzxFOysrbylpZihuPUZhZSh0aGlzLHRoaXMueGoobykpLHFlKG4pPT09cWUodCkpcmV0dXJuITB9cmV0dXJuIHd9ZWxzZSBpZih0aGlzLm1sKCkmJiF0aGlzLmxsKCkpe2lmKGY9bCh0LDU4KS5NaChSbyhsKE1uKHNsKHRoaXMuYiksdGhpcy5MaigpKSwxOSkpKSxxZShmKT09PXFlKHRoaXMuYikpcmV0dXJuITA7aWYoZj09bnVsbHx8IWwoZiw1OCkuVmgoKSlyZXR1cm4hMX19ZWxzZSByZXR1cm4hMTtpZihnPXRoaXMudWoodCksdGhpcy5ubCgpJiYhZyl7Zm9yKG89MDtvPEU7KytvKWlmKGE9RmFlKHRoaXMsdGhpcy54aihvKSkscWUoYSk9PT1xZSh0KSlyZXR1cm4hMH1yZXR1cm4gZ31lbHNlIHJldHVybiB0aGlzLnVqKHQpfSxoLklqPWZ1bmN0aW9uKHQsbixyLGEsbyl7cmV0dXJuIG5ldyBaZyh0aGlzLmIsdCx0aGlzLkxqKCksbixyLGEsbyl9LGguSmo9ZnVuY3Rpb24odCl7TmkodGhpcy5iLHQpfSxoLkZrPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzfSxoLktqPWZ1bmN0aW9uKCl7cmV0dXJuIE1uKHNsKHRoaXMuYiksdGhpcy5MaigpKX0saC5Maj1mdW5jdGlvbigpe3JldHVybiBtcyhzbCh0aGlzLmIpLE1uKHNsKHRoaXMuYiksdGhpcy5MaigpKSl9LGguamo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLmtsPWZ1bmN0aW9uKCl7cmV0dXJuISFNbihzbCh0aGlzLmIpLHRoaXMuTGooKSkuSGsoKS5raygpfSxoLk1qPWZ1bmN0aW9uKCl7dmFyIHQsbjtyZXR1cm4gbj1NbihzbCh0aGlzLmIpLHRoaXMuTGooKSksRGUobiwxMDIpPyh0PWwobiwxOSksKHQuQmImZXUpIT0wfHwhIVJvKGwobiwxOSkpKTohMX0saC5sbD1mdW5jdGlvbigpe3ZhciB0LG4scixhO3JldHVybiBuPU1uKHNsKHRoaXMuYiksdGhpcy5MaigpKSxEZShuLDEwMik/KHQ9bChuLDE5KSxyPVJvKHQpLCEhciYmKGE9ci50LGE+MXx8YT09LTEpKTohMX0saC5tbD1mdW5jdGlvbigpe3ZhciB0LG4scjtyZXR1cm4gbj1NbihzbCh0aGlzLmIpLHRoaXMuTGooKSksRGUobiwxMDIpPyh0PWwobiwxOSkscj1Sbyh0KSwhIXIpOiExfSxoLm5sPWZ1bmN0aW9uKCl7dmFyIHQsbjtyZXR1cm4gbj1NbihzbCh0aGlzLmIpLHRoaXMuTGooKSksRGUobiwxMDIpPyh0PWwobiwxOSksKHQuQmImSW8pIT0wKTohMX0saC5kZD1mdW5jdGlvbih0KXt2YXIgbixyLGEsbztpZihhPXRoaXMuemoodCksYT49MClyZXR1cm4gYTtpZih0aGlzLm9sKCkpe2ZvcihyPTAsbz10aGlzLkVqKCk7cjxvOysrcilpZihuPUZhZSh0aGlzLHRoaXMueGoocikpLHFlKG4pPT09cWUodCkpcmV0dXJuIHJ9cmV0dXJuLTF9LGguTmo9ZnVuY3Rpb24odCxuKXt2YXIgcjtyZXR1cm4gcj1sKHQsNTQpLHRoaXMubWwoKT90aGlzLmtsKCk/ci5SaCh0aGlzLmIsUm8obChNbihzbCh0aGlzLmIpLHRoaXMuTGooKSksMTkpKS5uLGwoTW4oc2wodGhpcy5iKSx0aGlzLkxqKCkpLkhrKCksMjkpLmtrKCksbik6ci5SaCh0aGlzLmIsbXMoci5EaCgpLFJvKGwoTW4oc2wodGhpcy5iKSx0aGlzLkxqKCkpLDE5KSkpLG51bGwsbik6ci5SaCh0aGlzLmIsLTEtdGhpcy5MaigpLG51bGwsbil9LGguT2o9ZnVuY3Rpb24odCxuKXt2YXIgcjtyZXR1cm4gcj1sKHQsNTQpLHRoaXMubWwoKT90aGlzLmtsKCk/ci5UaCh0aGlzLmIsUm8obChNbihzbCh0aGlzLmIpLHRoaXMuTGooKSksMTkpKS5uLGwoTW4oc2wodGhpcy5iKSx0aGlzLkxqKCkpLkhrKCksMjkpLmtrKCksbik6ci5UaCh0aGlzLmIsbXMoci5EaCgpLFJvKGwoTW4oc2wodGhpcy5iKSx0aGlzLkxqKCkpLDE5KSkpLG51bGwsbik6ci5UaCh0aGlzLmIsLTEtdGhpcy5MaigpLG51bGwsbil9LGguYWw9ZnVuY3Rpb24oKXt2YXIgdCxuO3JldHVybiBuPU1uKHNsKHRoaXMuYiksdGhpcy5MaigpKSxEZShuLDEwMik/KHQ9bChuLDE5KSwodC5CYiZldSkhPTApOiExfSxoLm9sPWZ1bmN0aW9uKCl7cmV0dXJuIERlKE1uKHNsKHRoaXMuYiksdGhpcy5MaigpKS5IaygpLDkwKX0saC5maz1mdW5jdGlvbih0KXtyZXR1cm4gTW4oc2wodGhpcy5iKSx0aGlzLkxqKCkpLkhrKCkuZmsodCl9LGguUGo9ZnVuY3Rpb24oKXtyZXR1cm4gaGgodGhpcy5iKX0saC5Raj1mdW5jdGlvbigpe3JldHVybiF0aGlzLkFqKCl9LGguU2k9ZnVuY3Rpb24oKXtyZXR1cm4gTW4oc2wodGhpcy5iKSx0aGlzLkxqKCkpLlNpKCl9LGguV2k9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbVAodGhpcyx0LG4pfSxoLldiPWZ1bmN0aW9uKHQpe3RMKHRoaXMpLEFzKHRoaXMsbCh0LDE1KSl9LGguUGM9ZnVuY3Rpb24oKXt2YXIgdDtpZih0aGlzLm5sKCkpZm9yKHQ9dGhpcy5FaigpLTE7dD49MDstLXQpbVAodGhpcyx0LHRoaXMueGoodCkpO3JldHVybiB0aGlzLkZqKCl9LGguUWM9ZnVuY3Rpb24odCl7dmFyIG47aWYodGhpcy5ubCgpKWZvcihuPXRoaXMuRWooKS0xO24+PTA7LS1uKW1QKHRoaXMsbix0aGlzLnhqKG4pKTtyZXR1cm4gdGhpcy5Haih0KX0saC5Haz1mdW5jdGlvbigpe3RMKHRoaXMpfSxoLlppPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHlsdCh0aGlzLHQsbil9LEkodXMsIkRlbGVnYXRpbmdFY29yZUVMaXN0Iiw3NTYpLEQoMTE3MSw3NTYsTVNlLE5ydCksaC5xaj1mdW5jdGlvbih0LG4pe2Fmbih0aGlzLHQsbChuLDI5KSl9LGgucmo9ZnVuY3Rpb24odCl7V2xuKHRoaXMsbCh0LDI5KSl9LGgueGo9ZnVuY3Rpb24odCl7dmFyIG4scjtyZXR1cm4gbj1sKE9lKGR1KHRoaXMuYSksdCksODkpLHI9bi5jLERlKHIsOTApP2wociwyOSk6KFRuKCksS2YpfSxoLkNqPWZ1bmN0aW9uKHQpe3ZhciBuLHI7cmV0dXJuIG49bChWeShkdSh0aGlzLmEpLHQpLDg5KSxyPW4uYyxEZShyLDkwKT9sKHIsMjkpOihUbigpLEtmKX0saC5Eaj1mdW5jdGlvbih0LG4pe3JldHVybiByN24odGhpcyx0LGwobiwyOSkpfSxoLkxpPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGguSWo9ZnVuY3Rpb24odCxuLHIsYSxvKXtyZXR1cm4gbnVsbH0saC5zaj1mdW5jdGlvbigpe3JldHVybiBuZXcgd1FlKHRoaXMpfSxoLnRqPWZ1bmN0aW9uKCl7JHIoZHUodGhpcy5hKSl9LGgudWo9ZnVuY3Rpb24odCl7cmV0dXJuIGwxdCh0aGlzLHQpfSxoLnZqPWZ1bmN0aW9uKHQpe3ZhciBuLHI7Zm9yKHI9dC5LYygpO3IuT2IoKTspaWYobj1yLlBiKCksIWwxdCh0aGlzLG4pKXJldHVybiExO3JldHVybiEwfSxoLndqPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYTtpZihEZSh0LDE1KSYmKGE9bCh0LDE1KSxhLmdjKCk9PWR1KHRoaXMuYSkuaSkpe2ZvcihuPWEuS2MoKSxyPW5ldyBvcih0aGlzKTtuLk9iKCk7KWlmKHFlKG4uUGIoKSkhPT1xZShncihyKSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuITF9LGgueWo9ZnVuY3Rpb24oKXt2YXIgdCxuLHIsYSxvO2ZvcihyPTEsbj1uZXcgb3IoZHUodGhpcy5hKSk7bi5lIT1uLmkuZ2MoKTspdD1sKGdyKG4pLDg5KSxhPShvPXQuYyxEZShvLDkwKT9sKG8sMjkpOihUbigpLEtmKSkscj0zMSpyKyhhP2Z3KGEpOjApO3JldHVybiByfSxoLnpqPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvO2ZvcihhPTAscj1uZXcgb3IoZHUodGhpcy5hKSk7ci5lIT1yLmkuZ2MoKTspe2lmKG49bChncihyKSw4OSkscWUodCk9PT1xZSgobz1uLmMsRGUobyw5MCk/bChvLDI5KTooVG4oKSxLZikpKSlyZXR1cm4gYTsrK2F9cmV0dXJuLTF9LGguQWo9ZnVuY3Rpb24oKXtyZXR1cm4gZHUodGhpcy5hKS5pPT0wfSxoLkJqPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGguRWo9ZnVuY3Rpb24oKXtyZXR1cm4gZHUodGhpcy5hKS5pfSxoLkZqPWZ1bmN0aW9uKCl7dmFyIHQsbixyLGEsbyxmO2ZvcihmPWR1KHRoaXMuYSkuaSxvPVdlKHdhLFJuLDEsZiw1LDEpLHI9MCxuPW5ldyBvcihkdSh0aGlzLmEpKTtuLmUhPW4uaS5nYygpOyl0PWwoZ3IobiksODkpLG9bcisrXT0oYT10LmMsRGUoYSw5MCk/bChhLDI5KTooVG4oKSxLZikpO3JldHVybiBvfSxoLkdqPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvLGYsZyx3O2Zvcih3PWR1KHRoaXMuYSkuaSx0Lmxlbmd0aDx3JiYobz1iTihiaCh0KS5jLHcpLHQ9byksdC5sZW5ndGg+dyYmVHModCx3LG51bGwpLGE9MCxyPW5ldyBvcihkdSh0aGlzLmEpKTtyLmUhPXIuaS5nYygpOyluPWwoZ3IociksODkpLGY9KGc9bi5jLERlKGcsOTApP2woZywyOSk6KFRuKCksS2YpKSxUcyh0LGErKyxmKTtyZXR1cm4gdH0saC5Iaj1mdW5jdGlvbigpe3ZhciB0LG4scixhLG87Zm9yKG89bmV3IFVwLG8uYSs9IlsiLHQ9ZHUodGhpcy5hKSxuPTAsYT1kdSh0aGlzLmEpLmk7bjxhOylYbyhvLGpfKChyPWwoT2UodCxuKSw4OSkuYyxEZShyLDkwKT9sKHIsMjkpOihUbigpLEtmKSkpKSwrK248YSYmKG8uYSs9Q28pO3JldHVybiBvLmErPSJdIixvLmF9LGguSmo9ZnVuY3Rpb24odCl7fSxoLkxqPWZ1bmN0aW9uKCl7cmV0dXJuIDEwfSxoLmtsPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguTWo9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5sbD1mdW5jdGlvbigpe3JldHVybiExfSxoLm1sPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGgubmw9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5hbD1mdW5jdGlvbigpe3JldHVybiExfSxoLm9sPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsOTApfSxoLlFqPWZ1bmN0aW9uKCl7cmV0dXJuIExibih0aGlzLmEpfSxoLlNpPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguWWk9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSShHbiwiRUNsYXNzSW1wbC84IiwxMTcxKSxEKDExNzIsMjA2MixpVCx3UWUpLGguZmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG1OKHRoaXMuYSx0KX0saC5nYz1mdW5jdGlvbigpe3JldHVybiBkdSh0aGlzLmEuYSkuaX0sSShHbiwiRUNsYXNzSW1wbC84LzEiLDExNzIpLEQoMTE3Myw1MDYsQmQsSVMpLGguYWo9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKGwxLFJuLDE0Mix0LDAsMSl9LGguWWk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sSShHbiwiRUNsYXNzSW1wbC85IiwxMTczKSxEKDExNjAsNDksb0VlLHVKZSksSShHbiwiRUNsYXNzSW1wbC9NeUhhc2hTZXQiLDExNjApLEQoNTc3LDM2NCx7MTEwOjEsOTQ6MSw5MzoxLDE0MjoxLDE1NjoxLDg0NzoxLDE1NToxLDE5NzoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDM2NDoxLDE1ODoxLDExOToxLDEyMDoxLDY5MToxfSxGeiksaC5MaD1mdW5jdGlvbih0LG4scil7dmFyIGE7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiB0aGlzLkQhPW51bGw/dGhpcy5EOnRoaXMuQjtjYXNlIDM6cmV0dXJuIHp3KHRoaXMpO2Nhc2UgNDpyZXR1cm4gdGhpcy5paygpO2Nhc2UgNTpyZXR1cm4gdGhpcy5GO2Nhc2UgNjpyZXR1cm4gbj9BaCh0aGlzKTpRayh0aGlzKTtjYXNlIDc6cmV0dXJuIXRoaXMuQSYmKHRoaXMuQT1uZXcgbWwoWnUsdGhpcyw3KSksdGhpcy5BO2Nhc2UgODpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJjI1Nil9cmV0dXJuIHNmKHRoaXMsdC15cih0aGlzLmlpKCkpLE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fHRoaXMuaWkoKSksdCksbixyKX0saC5XaD1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbCYmdGhpcy5EPT10aGlzLkY7Y2FzZSAzOnJldHVybiEhencodGhpcyk7Y2FzZSA0OnJldHVybiB0aGlzLmlrKCkhPW51bGw7Y2FzZSA1OnJldHVybiB0aGlzLkYhPW51bGwmJnRoaXMuRiE9dGhpcy5EJiZ0aGlzLkYhPXRoaXMuQjtjYXNlIDY6cmV0dXJuISFRayh0aGlzKTtjYXNlIDc6cmV0dXJuISF0aGlzLkEmJnRoaXMuQS5pIT0wO2Nhc2UgODpyZXR1cm4odGhpcy5CYiYyNTYpPT0wfXJldHVybiBuZih0aGlzLHQteXIodGhpcy5paSgpKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHx0aGlzLmlpKCkpLHQpKX0saC5iaT1mdW5jdGlvbih0LG4pe3ZhciByO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxBcyh0aGlzLkFiLGwobiwxNikpO3JldHVybjtjYXNlIDE6RkgodGhpcyxlaShuKSk7cmV0dXJuO2Nhc2UgMjpLc2UodGhpcyxlaShuKSk7cmV0dXJuO2Nhc2UgNTpKRSh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSA3OiF0aGlzLkEmJih0aGlzLkE9bmV3IG1sKFp1LHRoaXMsNykpLCRyKHRoaXMuQSksIXRoaXMuQSYmKHRoaXMuQT1uZXcgbWwoWnUsdGhpcyw3KSksQXModGhpcy5BLGwobiwxNikpO3JldHVybjtjYXNlIDg6alYodGhpcyxSdChCdChuKSkpO3JldHVybn11Zih0aGlzLHQteXIodGhpcy5paSgpKSxNbigocj1sKEtuKHRoaXMsMTYpLDI5KSxyfHx0aGlzLmlpKCkpLHQpLG4pfSxoLmlpPWZ1bmN0aW9uKCl7cmV0dXJuIFRuKCkscV90fSxoLmtpPWZ1bmN0aW9uKHQpe3ZhciBuO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6RGUodGhpcy5DYiwxODQpJiYobCh0aGlzLkNiLDE4NCkudGI9bnVsbCksRnUodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOkNFKHRoaXMsbnVsbCksbEUodGhpcyx0aGlzLkQpO3JldHVybjtjYXNlIDU6SkUodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA3OiF0aGlzLkEmJih0aGlzLkE9bmV3IG1sKFp1LHRoaXMsNykpLCRyKHRoaXMuQSk7cmV0dXJuO2Nhc2UgODpqVih0aGlzLCEwKTtyZXR1cm59Y2YodGhpcyx0LXlyKHRoaXMuaWkoKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8dGhpcy5paSgpKSx0KSl9LGgucGk9ZnVuY3Rpb24oKXtvMigoRWwoKSxpbyksdGhpcykueGUoKSx0aGlzLkJifD0xfSxoLm9rPWZ1bmN0aW9uKCl7dmFyIHQsbixyO2lmKCF0aGlzLmMmJih0PUIydChBaCh0aGlzKSksIXQuZGMoKSkpZm9yKHI9dC5LYygpO3IuT2IoKTspbj1laShyLlBiKCkpLFlBKHRoaXMsbikmJkE0bih0aGlzKTtyZXR1cm4gdGhpcy5ifSxoLmlrPWZ1bmN0aW9uKCl7dmFyIHQ7aWYoIXRoaXMuZSl7dD1udWxsO3RyeXt0PXp3KHRoaXMpfWNhdGNoKG4pe2lmKG49YnMobiksIURlKG4sMTAzKSl0aHJvdyB1ZShuKX10aGlzLmQ9bnVsbCx0JiZ0LmkmMSYmKHQ9PWloP3RoaXMuZD0oSG4oKSxQYik6dD09VnI/dGhpcy5kPXB0KDApOnQ9PUI0P3RoaXMuZD1uZXcgcGEoMCk6dD09TmE/dGhpcy5kPTA6dD09bm0/dGhpcy5kPWFwKDApOnQ9PWg3P3RoaXMuZD1fRSgwKTp0PT1BbD90aGlzLmQ9Zk4oMCk6dGhpcy5kPXdOKDApKSx0aGlzLmU9ITB9cmV0dXJuIHRoaXMuZH0saC5uaz1mdW5jdGlvbigpe3JldHVybih0aGlzLkJiJjI1NikhPTB9LGgucmw9ZnVuY3Rpb24odCl7dCYmKHRoaXMuRD0ib3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkFic3RyYWN0RW51bWVyYXRvciIpfSxoLmdsPWZ1bmN0aW9uKHQpe3hmdCh0aGlzLHQpLHRoaXMucmwodCl9LGguaGw9ZnVuY3Rpb24odCl7dGhpcy5DPXQsdGhpcy5lPSExfSxoLkliPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHRoaXMuRGImNjQ/VVYodGhpcyk6KHQ9bmV3IEFmKFVWKHRoaXMpKSx0LmErPSIgKHNlcmlhbGl6YWJsZTogIixHcCh0LCh0aGlzLkJiJjI1NikhPTApLHQuYSs9IikiLHQuYSl9LGguYz0hMSxoLmQ9bnVsbCxoLmU9ITEsSShHbiwiRURhdGFUeXBlSW1wbCIsNTc3KSxEKDQ2OSw1NzcsezExMDoxLDk0OjEsOTM6MSwxNDI6MSwxNTY6MSw4NDc6MSw2ODU6MSwxNTU6MSwxOTc6MSw1ODoxLDExNDoxLDU0OjEsOTk6MSwzNjQ6MSw0Njk6MSwxNTg6MSwxMTk6MSwxMjA6MSw2OTE6MX0sbEplKSxoLkxoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYTtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbD90aGlzLkQ6dGhpcy5CO2Nhc2UgMzpyZXR1cm4gencodGhpcyk7Y2FzZSA0OnJldHVybiBYN2UodGhpcyk7Y2FzZSA1OnJldHVybiB0aGlzLkY7Y2FzZSA2OnJldHVybiBuP0FoKHRoaXMpOlFrKHRoaXMpO2Nhc2UgNzpyZXR1cm4hdGhpcy5BJiYodGhpcy5BPW5ldyBtbChadSx0aGlzLDcpKSx0aGlzLkE7Y2FzZSA4OnJldHVybiBIbigpLCEhKHRoaXMuQmImMjU2KTtjYXNlIDk6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgbnQod3AsdGhpcyw5LDUpKSx0aGlzLmF9cmV0dXJuIHNmKHRoaXMsdC15cigoVG4oKSxaYikpLE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fFpiKSx0KSxuLHIpfSxoLlNoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvLGY7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksUnUodGhpcy5BYix0LHIpO2Nhc2UgNjpyZXR1cm4gdGhpcy5DYiYmKHI9KG89dGhpcy5EYj4+MTYsbz49MD93dWUodGhpcyxyKTp0aGlzLkNiLlRoKHRoaXMsLTEtbyxudWxsLHIpKSksTmgodGhpcyx0LDYscik7Y2FzZSA5OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IG50KHdwLHRoaXMsOSw1KSksUnUodGhpcy5hLHQscil9cmV0dXJuIGY9bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHwoVG4oKSxaYikpLG4pLDY5KSxmLndrKCkuemsodGhpcyxLdSh0aGlzKSxuLXlyKChUbigpLFpiKSksdCxyKX0saC5VaD1mdW5jdGlvbih0LG4scil7dmFyIGEsbztzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxUbyh0aGlzLkFiLHQscik7Y2FzZSA2OnJldHVybiBOaCh0aGlzLG51bGwsNixyKTtjYXNlIDc6cmV0dXJuIXRoaXMuQSYmKHRoaXMuQT1uZXcgbWwoWnUsdGhpcyw3KSksVG8odGhpcy5BLHQscik7Y2FzZSA5OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IG50KHdwLHRoaXMsOSw1KSksVG8odGhpcy5hLHQscil9cmV0dXJuIG89bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHwoVG4oKSxaYikpLG4pLDY5KSxvLndrKCkuQWsodGhpcyxLdSh0aGlzKSxuLXlyKChUbigpLFpiKSksdCxyKX0saC5XaD1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbCYmdGhpcy5EPT10aGlzLkY7Y2FzZSAzOnJldHVybiEhencodGhpcyk7Y2FzZSA0OnJldHVybiEhWDdlKHRoaXMpO2Nhc2UgNTpyZXR1cm4gdGhpcy5GIT1udWxsJiZ0aGlzLkYhPXRoaXMuRCYmdGhpcy5GIT10aGlzLkI7Y2FzZSA2OnJldHVybiEhUWsodGhpcyk7Y2FzZSA3OnJldHVybiEhdGhpcy5BJiZ0aGlzLkEuaSE9MDtjYXNlIDg6cmV0dXJuKHRoaXMuQmImMjU2KT09MDtjYXNlIDk6cmV0dXJuISF0aGlzLmEmJnRoaXMuYS5pIT0wfXJldHVybiBuZih0aGlzLHQteXIoKFRuKCksWmIpKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHxaYiksdCkpfSxoLmJpPWZ1bmN0aW9uKHQsbil7dmFyIHI7c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksJHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLEFzKHRoaXMuQWIsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMTpGSCh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSAyOktzZSh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSA1OkpFKHRoaXMsZWkobikpO3JldHVybjtjYXNlIDc6IXRoaXMuQSYmKHRoaXMuQT1uZXcgbWwoWnUsdGhpcyw3KSksJHIodGhpcy5BKSwhdGhpcy5BJiYodGhpcy5BPW5ldyBtbChadSx0aGlzLDcpKSxBcyh0aGlzLkEsbChuLDE2KSk7cmV0dXJuO2Nhc2UgODpqVih0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgOTohdGhpcy5hJiYodGhpcy5hPW5ldyBudCh3cCx0aGlzLDksNSkpLCRyKHRoaXMuYSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgbnQod3AsdGhpcyw5LDUpKSxBcyh0aGlzLmEsbChuLDE2KSk7cmV0dXJufXVmKHRoaXMsdC15cigoVG4oKSxaYikpLE1uKChyPWwoS24odGhpcywxNiksMjkpLHJ8fFpiKSx0KSxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBUbigpLFpifSxoLmtpPWZ1bmN0aW9uKHQpe3ZhciBuO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6RGUodGhpcy5DYiwxODQpJiYobCh0aGlzLkNiLDE4NCkudGI9bnVsbCksRnUodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOkNFKHRoaXMsbnVsbCksbEUodGhpcyx0aGlzLkQpO3JldHVybjtjYXNlIDU6SkUodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA3OiF0aGlzLkEmJih0aGlzLkE9bmV3IG1sKFp1LHRoaXMsNykpLCRyKHRoaXMuQSk7cmV0dXJuO2Nhc2UgODpqVih0aGlzLCEwKTtyZXR1cm47Y2FzZSA5OiF0aGlzLmEmJih0aGlzLmE9bmV3IG50KHdwLHRoaXMsOSw1KSksJHIodGhpcy5hKTtyZXR1cm59Y2YodGhpcyx0LXlyKChUbigpLFpiKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8WmIpLHQpKX0saC5waT1mdW5jdGlvbigpe3ZhciB0LG47aWYodGhpcy5hKWZvcih0PTAsbj10aGlzLmEuaTt0PG47Kyt0KVNPKE9lKHRoaXMuYSx0KSk7bzIoKEVsKCksaW8pLHRoaXMpLnhlKCksdGhpcy5CYnw9MX0saC5paz1mdW5jdGlvbigpe3JldHVybiBYN2UodGhpcyl9LGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIHQhPW51bGx9LGgucmw9ZnVuY3Rpb24odCl7fSxJKEduLCJFRW51bUltcGwiLDQ2OSksRCg1ODIsNDQ4LHsxMTA6MSw5NDoxLDkzOjEsMjAzOToxLDY5NDoxLDE1NToxLDE5NzoxLDU4OjEsMTE0OjEsNTQ6MSw5OToxLDU4MjoxLDE1ODoxLDExOToxLDEyMDoxfSxQUWUpLGgueGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy56Yn0saC5BaD1mdW5jdGlvbih0KXtyZXR1cm4gYWd0KHRoaXMsdCl9LGguTGg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG87c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiBwdCh0aGlzLmQpO2Nhc2UgMzpyZXR1cm4gdGhpcy5iP3RoaXMuYjp0aGlzLmE7Y2FzZSA0OnJldHVybiBvPXRoaXMuYyxvPz90aGlzLnpiO2Nhc2UgNTpyZXR1cm4gdGhpcy5EYj4+MTY9PTU/bCh0aGlzLkNiLDY4NSk6bnVsbH1yZXR1cm4gc2YodGhpcyx0LXlyKChUbigpLEQyKSksTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8RDIpLHQpLG4scil9LGguU2g9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZjtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxSdSh0aGlzLkFiLHQscik7Y2FzZSA1OnJldHVybiB0aGlzLkNiJiYocj0obz10aGlzLkRiPj4xNixvPj0wP2FndCh0aGlzLHIpOnRoaXMuQ2IuVGgodGhpcywtMS1vLG51bGwscikpKSxOaCh0aGlzLHQsNSxyKX1yZXR1cm4gZj1sKE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fChUbigpLEQyKSksbiksNjkpLGYud2soKS56ayh0aGlzLEt1KHRoaXMpLG4teXIoKFRuKCksRDIpKSx0LHIpfSxoLlVoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLFRvKHRoaXMuQWIsdCxyKTtjYXNlIDU6cmV0dXJuIE5oKHRoaXMsbnVsbCw1LHIpfXJldHVybiBvPWwoTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8KFRuKCksRDIpKSxuKSw2OSksby53aygpLkFrKHRoaXMsS3UodGhpcyksbi15cigoVG4oKSxEMikpLHQscil9LGguV2g9ZnVuY3Rpb24odCl7dmFyIG47c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybiB0aGlzLmQhPTA7Y2FzZSAzOnJldHVybiEhdGhpcy5iO2Nhc2UgNDpyZXR1cm4gdGhpcy5jIT1udWxsO2Nhc2UgNTpyZXR1cm4hISh0aGlzLkRiPj4xNj09NSYmbCh0aGlzLkNiLDY4NSkpfXJldHVybiBuZih0aGlzLHQteXIoKFRuKCksRDIpKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHxEMiksdCkpfSxoLmJpPWZ1bmN0aW9uKHQsbil7dmFyIHI7c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksJHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLEFzKHRoaXMuQWIsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMTpGdSh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSAyOlFvZSh0aGlzLGwobiwxNykuYSk7cmV0dXJuO2Nhc2UgMzpyMnQodGhpcyxsKG4sMjAzOSkpO3JldHVybjtjYXNlIDQ6Wm9lKHRoaXMsZWkobikpO3JldHVybn11Zih0aGlzLHQteXIoKFRuKCksRDIpKSxNbigocj1sKEtuKHRoaXMsMTYpLDI5KSxyfHxEMiksdCksbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gVG4oKSxEMn0saC5raT1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSwkcih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOkZ1KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjpRb2UodGhpcywwKTtyZXR1cm47Y2FzZSAzOnIydCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDQ6Wm9lKHRoaXMsbnVsbCk7cmV0dXJufWNmKHRoaXMsdC15cigoVG4oKSxEMikpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fEQyKSx0KSl9LGguSWI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLmMsdD8/dGhpcy56Yn0saC5iPW51bGwsaC5jPW51bGwsaC5kPTAsSShHbiwiRUVudW1MaXRlcmFsSW1wbCIsNTgyKTt2YXIgUE9uPWtzKEduLCJFRmFjdG9yeUltcGwvSW50ZXJuYWxFRGF0ZVRpbWVGb3JtYXQiKTtEKDQ5OSwxLHsyMTE0OjF9LEtJKSxJKEduLCJFRmFjdG9yeUltcGwvMUNsaWVudEludGVybmFsRURhdGVUaW1lRm9ybWF0Iiw0OTkpLEQoMjQ4LDEyMCx7MTEwOjEsOTQ6MSw5MzoxLDg5OjEsNTg6MSwxMTQ6MSw1NDoxLDk5OjEsMjQ4OjEsMTE5OjEsMTIwOjF9LFF2KSxoLkNoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYTtyZXR1cm4gcj1OaCh0aGlzLHQsbixyKSx0aGlzLmUmJkRlKHQsMTc5KSYmKGE9U1UodGhpcyx0aGlzLmUpLGEhPXRoaXMuYyYmKHI9WkUodGhpcyxhLHIpKSkscn0saC5MaD1mdW5jdGlvbih0LG4scil7dmFyIGE7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy5mO2Nhc2UgMTpyZXR1cm4hdGhpcy5kJiYodGhpcy5kPW5ldyBZcyhXbyx0aGlzLDEpKSx0aGlzLmQ7Y2FzZSAyOnJldHVybiBuP2pVKHRoaXMpOnRoaXMuYztjYXNlIDM6cmV0dXJuIHRoaXMuYjtjYXNlIDQ6cmV0dXJuIHRoaXMuZTtjYXNlIDU6cmV0dXJuIG4/aHVlKHRoaXMpOnRoaXMuYX1yZXR1cm4gc2YodGhpcyx0LXlyKChUbigpLEUzKSksTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8RTMpLHQpLG4scil9LGguVWg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gUTB0KHRoaXMsbnVsbCxyKTtjYXNlIDE6cmV0dXJuIXRoaXMuZCYmKHRoaXMuZD1uZXcgWXMoV28sdGhpcywxKSksVG8odGhpcy5kLHQscik7Y2FzZSAzOnJldHVybiBKMHQodGhpcyxudWxsLHIpfXJldHVybiBvPWwoTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8KFRuKCksRTMpKSxuKSw2OSksby53aygpLkFrKHRoaXMsS3UodGhpcyksbi15cigoVG4oKSxFMykpLHQscil9LGguV2g9ZnVuY3Rpb24odCl7dmFyIG47c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuZjtjYXNlIDE6cmV0dXJuISF0aGlzLmQmJnRoaXMuZC5pIT0wO2Nhc2UgMjpyZXR1cm4hIXRoaXMuYztjYXNlIDM6cmV0dXJuISF0aGlzLmI7Y2FzZSA0OnJldHVybiEhdGhpcy5lO2Nhc2UgNTpyZXR1cm4hIXRoaXMuYX1yZXR1cm4gbmYodGhpcyx0LXlyKChUbigpLEUzKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8RTMpLHQpKX0saC5iaT1mdW5jdGlvbih0LG4pe3ZhciByO3N3aXRjaCh0KXtjYXNlIDA6Q2d0KHRoaXMsbChuLDg5KSk7cmV0dXJuO2Nhc2UgMTohdGhpcy5kJiYodGhpcy5kPW5ldyBZcyhXbyx0aGlzLDEpKSwkcih0aGlzLmQpLCF0aGlzLmQmJih0aGlzLmQ9bmV3IFlzKFdvLHRoaXMsMSkpLEFzKHRoaXMuZCxsKG4sMTYpKTtyZXR1cm47Y2FzZSAzOkF4ZSh0aGlzLGwobiw4OSkpO3JldHVybjtjYXNlIDQ6S3hlKHRoaXMsbChuLDg1MCkpO3JldHVybjtjYXNlIDU6c0UodGhpcyxsKG4sMTQyKSk7cmV0dXJufXVmKHRoaXMsdC15cigoVG4oKSxFMykpLE1uKChyPWwoS24odGhpcywxNiksMjkpLHJ8fEUzKSx0KSxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBUbigpLEUzfSxoLmtpPWZ1bmN0aW9uKHQpe3ZhciBuO3N3aXRjaCh0KXtjYXNlIDA6Q2d0KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTohdGhpcy5kJiYodGhpcy5kPW5ldyBZcyhXbyx0aGlzLDEpKSwkcih0aGlzLmQpO3JldHVybjtjYXNlIDM6QXhlKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNDpLeGUodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA1OnNFKHRoaXMsbnVsbCk7cmV0dXJufWNmKHRoaXMsdC15cigoVG4oKSxFMykpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fEUzKSx0KSl9LGguSWI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1uZXcgVGgoZzAodGhpcykpLHQuYSs9IiAoZXhwcmVzc2lvbjogIix3bGUodGhpcyx0KSx0LmErPSIpIix0LmF9O3ZhciBMUGU7SShHbiwiRUdlbmVyaWNUeXBlSW1wbCIsMjQ4KSxEKDIwNjcsMjA2MixLRyksaC5HaT1mdW5jdGlvbih0LG4pe0RydCh0aGlzLHQsbil9LGguV2s9ZnVuY3Rpb24odCxuKXtyZXR1cm4gRHJ0KHRoaXMsdGhpcy5nYygpLHQpLG59LGguJGk9ZnVuY3Rpb24odCl7cmV0dXJuIGZmKHRoaXMucGooKSx0KX0saC5JaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLkppKCl9LGgucGo9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEVRZSh0aGlzKX0saC5KaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLktpKDApfSxoLktpPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnBqKCkuZmQodCl9LGguWGs9ZnVuY3Rpb24odCxuKXtyZXR1cm4gTnkodGhpcyx0LCEwKSxufSxoLlRpPWZ1bmN0aW9uKHQsbil7dmFyIHIsYTtyZXR1cm4gYT1rdWUodGhpcyxuKSxyPXRoaXMuZmQodCksci5SYihhKSxhfSxoLlVpPWZ1bmN0aW9uKHQsbil7dmFyIHI7TnkodGhpcyxuLCEwKSxyPXRoaXMuZmQodCksci5SYihuKX0sSSh1cywiQWJzdHJhY3RTZXF1ZW50aWFsSW50ZXJuYWxFTGlzdCIsMjA2NyksRCg0OTYsMjA2NyxLRyxUTyksaC4kaT1mdW5jdGlvbih0KXtyZXR1cm4gZmYodGhpcy5waigpLHQpfSxoLklpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYj09bnVsbD8oV3AoKSxXcCgpLGRGKTp0aGlzLnNsKCl9LGgucGo9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFh0dCh0aGlzLmEsdGhpcy5iKX0saC5KaT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmI9PW51bGw/KFdwKCksV3AoKSxkRik6dGhpcy5zbCgpfSxoLktpPWZ1bmN0aW9uKHQpe3ZhciBuLHI7aWYodGhpcy5iPT1udWxsKXtpZih0PDB8fHQ+MSl0aHJvdyB1ZShuZXcgdGMoQ0wrdCsiLCBzaXplPTAiKSk7cmV0dXJuIFdwKCksV3AoKSxkRn1mb3Iocj10aGlzLnNsKCksbj0wO248dDsrK24pTVYocik7cmV0dXJuIHJ9LGguZGM9ZnVuY3Rpb24oKXt2YXIgdCxuLHIsYSxvLGY7aWYodGhpcy5iIT1udWxsKXtmb3Iocj0wO3I8dGhpcy5iLmxlbmd0aDsrK3IpaWYodD10aGlzLmJbcl0sIXRoaXMudmwoKXx8dGhpcy5hLlhoKHQpKXtpZihmPXRoaXMuYS5OaCh0LCExKSxGbygpLGwodCw2OSkueGsoKSl7Zm9yKG49bChmLDE2MCksYT0wLG89bi5nYygpO2E8bzsrK2EpaWYoc2F0KG4uVGwoYSkpJiZuLlVsKGEpIT1udWxsKXJldHVybiExfWVsc2UgaWYodC5KaygpKXtpZighbChmLDE2KS5kYygpKXJldHVybiExfWVsc2UgaWYoZiE9bnVsbClyZXR1cm4hMX19cmV0dXJuITB9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gbTdlKHRoaXMpfSxoLmZkPWZ1bmN0aW9uKHQpe3ZhciBuLHI7aWYodGhpcy5iPT1udWxsKXtpZih0IT0wKXRocm93IHVlKG5ldyB0YyhDTCt0KyIsIHNpemU9MCIpKTtyZXR1cm4gV3AoKSxXcCgpLGRGfWZvcihyPXRoaXMudWwoKT90aGlzLnRsKCk6dGhpcy5zbCgpLG49MDtuPHQ7KytuKU1WKHIpO3JldHVybiByfSxoLlRpPWZ1bmN0aW9uKHQsbil7dGhyb3cgdWUobmV3IFFyKX0saC5VaT1mdW5jdGlvbih0LG4pe3Rocm93IHVlKG5ldyBRcil9LGguc2w9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHFxKHRoaXMuYSx0aGlzLmIpfSxoLnRsPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBSeWUodGhpcy5hLHRoaXMuYil9LGgudWw9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5nYz1mdW5jdGlvbigpe3ZhciB0LG4scixhLG8sZixnO2lmKG89MCx0aGlzLmIhPW51bGwpe2ZvcihyPTA7cjx0aGlzLmIubGVuZ3RoOysrcilpZih0PXRoaXMuYltyXSwhdGhpcy52bCgpfHx0aGlzLmEuWGgodCkpaWYoZz10aGlzLmEuTmgodCwhMSksRm8oKSxsKHQsNjkpLnhrKCkpZm9yKG49bChnLDE2MCksYT0wLGY9bi5nYygpO2E8ZjsrK2Epc2F0KG4uVGwoYSkpJiZuLlVsKGEpIT1udWxsJiYrK287ZWxzZSB0LkprKCk/bys9bChnLDE2KS5nYygpOmchPW51bGwmJisrb31yZXR1cm4gb30saC52bD1mdW5jdGlvbigpe3JldHVybiEwfTt2YXIgcnBlO0kodXMsIkVDb250ZW50c0VMaXN0Iiw0OTYpLEQoMTE3Nyw0OTYsS0cscHJ0KSxoLnNsPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBtcnQodGhpcy5hLHRoaXMuYil9LGgudGw9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJydCh0aGlzLmEsdGhpcy5iKX0saC52bD1mdW5jdGlvbigpe3JldHVybiExfSxJKEduLCJFTmFtZWRFbGVtZW50SW1wbC8xIiwxMTc3KSxEKDI4NywxLFdHLHFxKSxoLk5iPWZ1bmN0aW9uKHQpe1phKHRoaXMsdCl9LGguUmI9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IFFyKX0saC53bD1mdW5jdGlvbih0KXtpZih0aGlzLmchPTB8fHRoaXMuZSl0aHJvdyB1ZShuZXcgbmMoIkl0ZXJhdG9yIGFscmVhZHkgaW4gdXNlIG9yIGFscmVhZHkgZmlsdGVyZWQiKSk7dGhpcy5lPXR9LGguT2I9ZnVuY3Rpb24oKXt2YXIgdCxuLHIsYSxvLGY7c3dpdGNoKHRoaXMuZyl7Y2FzZSAzOmNhc2UgMjpyZXR1cm4hMDtjYXNlIDE6cmV0dXJuITE7Y2FzZS0zOnRoaXMucD90aGlzLnAuUGIoKTorK3RoaXMubjtkZWZhdWx0OmlmKCF0aGlzLmt8fCh0aGlzLnA/IXZwdCh0aGlzLHRoaXMucCk6IW8ydCh0aGlzKSkpe2Zvcig7dGhpcy5kPHRoaXMuYy5sZW5ndGg7KWlmKG49dGhpcy5jW3RoaXMuZCsrXSwoIXRoaXMuZXx8bi5waygpIT1vQ3x8bi5MaigpIT0wKSYmKCF0aGlzLnZsKCl8fHRoaXMuYi5YaChuKSkpe2lmKGY9dGhpcy5iLk5oKG4sdGhpcy51bCgpKSx0aGlzLmY9KEZvKCksbChuLDY5KS54aygpKSx0aGlzLmZ8fG4uSmsoKSl7aWYodGhpcy51bCgpPyhhPWwoZiwxNSksdGhpcy5rPWEpOihhPWwoZiw3MSksdGhpcy5rPXRoaXMuaj1hKSxEZSh0aGlzLmssNTkpPyh0aGlzLnA9bnVsbCx0aGlzLm89dGhpcy5rLmdjKCksdGhpcy5uPTApOnRoaXMucD10aGlzLmo/dGhpcy5qLkppKCk6dGhpcy5rLmVkKCksdGhpcy5wP3ZwdCh0aGlzLHRoaXMucCk6bzJ0KHRoaXMpKXJldHVybiBvPXRoaXMucD90aGlzLnAuUGIoKTp0aGlzLmo/dGhpcy5qLiRpKHRoaXMubisrKTp0aGlzLmsuWGIodGhpcy5uKyspLHRoaXMuZj8odD1sKG8sNzYpLHQuTGsoKSxyPXQubWQoKSx0aGlzLmk9cik6KHI9byx0aGlzLmk9ciksdGhpcy5nPTMsITB9ZWxzZSBpZihmIT1udWxsKXJldHVybiB0aGlzLms9bnVsbCx0aGlzLnA9bnVsbCxyPWYsdGhpcy5pPXIsdGhpcy5nPTIsITB9cmV0dXJuIHRoaXMuaz1udWxsLHRoaXMucD1udWxsLHRoaXMuZj0hMSx0aGlzLmc9MSwhMX1lbHNlIHJldHVybiBvPXRoaXMucD90aGlzLnAuUGIoKTp0aGlzLmo/dGhpcy5qLiRpKHRoaXMubisrKTp0aGlzLmsuWGIodGhpcy5uKyspLHRoaXMuZj8odD1sKG8sNzYpLHQuTGsoKSxyPXQubWQoKSx0aGlzLmk9cik6KHI9byx0aGlzLmk9ciksdGhpcy5nPTMsITB9fSxoLlNiPWZ1bmN0aW9uKCl7dmFyIHQsbixyLGEsbyxmO3N3aXRjaCh0aGlzLmcpe2Nhc2UtMzpjYXNlLTI6cmV0dXJuITA7Y2FzZS0xOnJldHVybiExO2Nhc2UgMzp0aGlzLnA/dGhpcy5wLlViKCk6LS10aGlzLm47ZGVmYXVsdDppZighdGhpcy5rfHwodGhpcy5wPyF3cHQodGhpcyx0aGlzLnApOiFNcHQodGhpcykpKXtmb3IoO3RoaXMuZD4wOylpZihuPXRoaXMuY1stLXRoaXMuZF0sKCF0aGlzLmV8fG4ucGsoKSE9b0N8fG4uTGooKSE9MCkmJighdGhpcy52bCgpfHx0aGlzLmIuWGgobikpKXtpZihmPXRoaXMuYi5OaChuLHRoaXMudWwoKSksdGhpcy5mPShGbygpLGwobiw2OSkueGsoKSksdGhpcy5mfHxuLkprKCkpe2lmKHRoaXMudWwoKT8oYT1sKGYsMTUpLHRoaXMuaz1hKTooYT1sKGYsNzEpLHRoaXMuaz10aGlzLmo9YSksRGUodGhpcy5rLDU5KT8odGhpcy5vPXRoaXMuay5nYygpLHRoaXMubj10aGlzLm8pOnRoaXMucD10aGlzLmo/dGhpcy5qLktpKHRoaXMuay5nYygpKTp0aGlzLmsuZmQodGhpcy5rLmdjKCkpLHRoaXMucD93cHQodGhpcyx0aGlzLnApOk1wdCh0aGlzKSlyZXR1cm4gbz10aGlzLnA/dGhpcy5wLlViKCk6dGhpcy5qP3RoaXMuai4kaSgtLXRoaXMubik6dGhpcy5rLlhiKC0tdGhpcy5uKSx0aGlzLmY/KHQ9bChvLDc2KSx0LkxrKCkscj10Lm1kKCksdGhpcy5pPXIpOihyPW8sdGhpcy5pPXIpLHRoaXMuZz0tMywhMH1lbHNlIGlmKGYhPW51bGwpcmV0dXJuIHRoaXMuaz1udWxsLHRoaXMucD1udWxsLHI9Zix0aGlzLmk9cix0aGlzLmc9LTIsITB9cmV0dXJuIHRoaXMuaz1udWxsLHRoaXMucD1udWxsLHRoaXMuZz0tMSwhMX1lbHNlIHJldHVybiBvPXRoaXMucD90aGlzLnAuVWIoKTp0aGlzLmo/dGhpcy5qLiRpKC0tdGhpcy5uKTp0aGlzLmsuWGIoLS10aGlzLm4pLHRoaXMuZj8odD1sKG8sNzYpLHQuTGsoKSxyPXQubWQoKSx0aGlzLmk9cik6KHI9byx0aGlzLmk9ciksdGhpcy5nPS0zLCEwfX0saC5QYj1mdW5jdGlvbigpe3JldHVybiBNVih0aGlzKX0saC5UYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguVWI9ZnVuY3Rpb24oKXt2YXIgdDtpZih0aGlzLmc8LTF8fHRoaXMuU2IoKSlyZXR1cm4tLXRoaXMuYSx0aGlzLmc9MCx0PXRoaXMuaSx0aGlzLlNiKCksdDt0aHJvdyB1ZShuZXcgX2MpfSxoLlZiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS0xfSxoLlFiPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IFFyKX0saC51bD1mdW5jdGlvbigpe3JldHVybiExfSxoLldiPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBRcil9LGgudmw9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5hPTAsaC5kPTAsaC5mPSExLGguZz0wLGgubj0wLGgubz0wO3ZhciBkRjtJKHVzLCJFQ29udGVudHNFTGlzdC9GZWF0dXJlSXRlcmF0b3JJbXBsIiwyODcpLEQoNzExLDI4NyxXRyxSeWUpLGgudWw9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSSh1cywiRUNvbnRlbnRzRUxpc3QvUmVzb2x2aW5nRmVhdHVyZUl0ZXJhdG9ySW1wbCIsNzExKSxEKDExNzgsNzExLFdHLGJydCksaC52bD1mdW5jdGlvbigpe3JldHVybiExfSxJKEduLCJFTmFtZWRFbGVtZW50SW1wbC8xLzEiLDExNzgpLEQoMTE3OSwyODcsV0csbXJ0KSxoLnZsPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEkoR24sIkVOYW1lZEVsZW1lbnRJbXBsLzEvMiIsMTE3OSksRCgzOSwxNTIsWVAsQ3ksa29lLF9hLEZvZSxaZyxoMCxRNmUsWG90LEo2ZSxRb3QscDZlLEpvdCx0N2UsWm90LGI2ZSxlY3QsWjZlLHRjdCxYXyxzTixyb2UsZTdlLG5jdCxtNmUscmN0KSxoLktqPWZ1bmN0aW9uKCl7cmV0dXJuIE42ZSh0aGlzKX0saC5Saj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PU42ZSh0aGlzKSx0P3QuaWsoKTpudWxsfSxoLmhqPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmI9PS0xJiZ0aGlzLmEmJih0aGlzLmI9dGhpcy5jLkhoKHRoaXMuYS5MaigpLHRoaXMuYS5waygpKSksdGhpcy5jLnloKHRoaXMuYix0KX0saC5qaj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGguU2o9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1ONmUodGhpcyksdD90LnRrKCk6ITF9LGguYj0tMSxJKEduLCJFTm90aWZpY2F0aW9uSW1wbCIsMzkpLEQoNDExLDI5Mix7MTEwOjEsOTQ6MSw5MzoxLDE1NToxLDE5NzoxLDU4OjEsNjI6MSwxMTQ6MSw0ODE6MSw1NDoxLDk5OjEsMTU4OjEsNDExOjEsMjkyOjEsMTE5OjEsMTIwOjF9LHFpZSksaC5BaD1mdW5jdGlvbih0KXtyZXR1cm4gdWd0KHRoaXMsdCl9LGguTGg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZjtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIEhuKCksISEodGhpcy5CYiYyNTYpO2Nhc2UgMzpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJjUxMik7Y2FzZSA0OnJldHVybiBwdCh0aGlzLnMpO2Nhc2UgNTpyZXR1cm4gcHQodGhpcy50KTtjYXNlIDY6cmV0dXJuIEhuKCksZj10aGlzLnQsZj4xfHxmPT0tMTtjYXNlIDc6cmV0dXJuIEhuKCksbz10aGlzLnMsbz49MTtjYXNlIDg6cmV0dXJuIG4/T2YodGhpcyk6dGhpcy5yO2Nhc2UgOTpyZXR1cm4gdGhpcy5xO2Nhc2UgMTA6cmV0dXJuIHRoaXMuRGI+PjE2PT0xMD9sKHRoaXMuQ2IsMjkpOm51bGw7Y2FzZSAxMTpyZXR1cm4hdGhpcy5kJiYodGhpcy5kPW5ldyBtbChadSx0aGlzLDExKSksdGhpcy5kO2Nhc2UgMTI6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgbnQoazMsdGhpcywxMiwxMCkpLHRoaXMuYztjYXNlIDEzOnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IExPKHRoaXMsdGhpcykpLHRoaXMuYTtjYXNlIDE0OnJldHVybiBYbCh0aGlzKX1yZXR1cm4gc2YodGhpcyx0LXlyKChUbigpLEkyKSksTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8STIpLHQpLG4scil9LGguU2g9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZjtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxSdSh0aGlzLkFiLHQscik7Y2FzZSAxMDpyZXR1cm4gdGhpcy5DYiYmKHI9KG89dGhpcy5EYj4+MTYsbz49MD91Z3QodGhpcyxyKTp0aGlzLkNiLlRoKHRoaXMsLTEtbyxudWxsLHIpKSksTmgodGhpcyx0LDEwLHIpO2Nhc2UgMTI6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgbnQoazMsdGhpcywxMiwxMCkpLFJ1KHRoaXMuYyx0LHIpfXJldHVybiBmPWwoTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8KFRuKCksSTIpKSxuKSw2OSksZi53aygpLnprKHRoaXMsS3UodGhpcyksbi15cigoVG4oKSxJMikpLHQscil9LGguVWg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG87c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksVG8odGhpcy5BYix0LHIpO2Nhc2UgOTpyZXR1cm4gcWFlKHRoaXMscik7Y2FzZSAxMDpyZXR1cm4gTmgodGhpcyxudWxsLDEwLHIpO2Nhc2UgMTE6cmV0dXJuIXRoaXMuZCYmKHRoaXMuZD1uZXcgbWwoWnUsdGhpcywxMSkpLFRvKHRoaXMuZCx0LHIpO2Nhc2UgMTI6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgbnQoazMsdGhpcywxMiwxMCkpLFRvKHRoaXMuYyx0LHIpO2Nhc2UgMTQ6cmV0dXJuIFRvKFhsKHRoaXMpLHQscil9cmV0dXJuIG89bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHwoVG4oKSxJMikpLG4pLDY5KSxvLndrKCkuQWsodGhpcyxLdSh0aGlzKSxuLXlyKChUbigpLEkyKSksdCxyKX0saC5XaD1mdW5jdGlvbih0KXt2YXIgbixyLGE7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybih0aGlzLkJiJjI1Nik9PTA7Y2FzZSAzOnJldHVybih0aGlzLkJiJjUxMik9PTA7Y2FzZSA0OnJldHVybiB0aGlzLnMhPTA7Y2FzZSA1OnJldHVybiB0aGlzLnQhPTE7Y2FzZSA2OnJldHVybiBhPXRoaXMudCxhPjF8fGE9PS0xO2Nhc2UgNzpyZXR1cm4gcj10aGlzLnMscj49MTtjYXNlIDg6cmV0dXJuISF0aGlzLnImJiF0aGlzLnEuZSYmeXcodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4hIXRoaXMucSYmISh0aGlzLnImJiF0aGlzLnEuZSYmeXcodGhpcy5xKS5pPT0wKTtjYXNlIDEwOnJldHVybiEhKHRoaXMuRGI+PjE2PT0xMCYmbCh0aGlzLkNiLDI5KSk7Y2FzZSAxMTpyZXR1cm4hIXRoaXMuZCYmdGhpcy5kLmkhPTA7Y2FzZSAxMjpyZXR1cm4hIXRoaXMuYyYmdGhpcy5jLmkhPTA7Y2FzZSAxMzpyZXR1cm4hIXRoaXMuYSYmWGwodGhpcy5hLmEpLmkhPTAmJiEodGhpcy5iJiZ1dWUodGhpcy5iKSk7Y2FzZSAxNDpyZXR1cm4hIXRoaXMuYiYmdXVlKHRoaXMuYil9cmV0dXJuIG5mKHRoaXMsdC15cigoVG4oKSxJMikpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fEkyKSx0KSl9LGguYmk9ZnVuY3Rpb24odCxuKXt2YXIgcixhO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpLCF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSxBcyh0aGlzLkFiLGwobiwxNikpO3JldHVybjtjYXNlIDE6RnUodGhpcyxlaShuKSk7cmV0dXJuO2Nhc2UgMjpjMih0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgMzp1Mih0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgNDppMih0aGlzLGwobiwxNykuYSk7cmV0dXJuO2Nhc2UgNTpNeSh0aGlzLGwobiwxNykuYSk7cmV0dXJuO2Nhc2UgODpHbSh0aGlzLGwobiwxNDIpKTtyZXR1cm47Y2FzZSA5OmE9JDEodGhpcyxsKG4sODkpLG51bGwpLGEmJmEub2ooKTtyZXR1cm47Y2FzZSAxMTohdGhpcy5kJiYodGhpcy5kPW5ldyBtbChadSx0aGlzLDExKSksJHIodGhpcy5kKSwhdGhpcy5kJiYodGhpcy5kPW5ldyBtbChadSx0aGlzLDExKSksQXModGhpcy5kLGwobiwxNikpO3JldHVybjtjYXNlIDEyOiF0aGlzLmMmJih0aGlzLmM9bmV3IG50KGszLHRoaXMsMTIsMTApKSwkcih0aGlzLmMpLCF0aGlzLmMmJih0aGlzLmM9bmV3IG50KGszLHRoaXMsMTIsMTApKSxBcyh0aGlzLmMsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMTM6IXRoaXMuYSYmKHRoaXMuYT1uZXcgTE8odGhpcyx0aGlzKSksdEwodGhpcy5hKSwhdGhpcy5hJiYodGhpcy5hPW5ldyBMTyh0aGlzLHRoaXMpKSxBcyh0aGlzLmEsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMTQ6JHIoWGwodGhpcykpLEFzKFhsKHRoaXMpLGwobiwxNikpO3JldHVybn11Zih0aGlzLHQteXIoKFRuKCksSTIpKSxNbigocj1sKEtuKHRoaXMsMTYpLDI5KSxyfHxJMiksdCksbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gVG4oKSxJMn0saC5raT1mdW5jdGlvbih0KXt2YXIgbixyO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6RnUodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOmMyKHRoaXMsITApO3JldHVybjtjYXNlIDM6dTIodGhpcywhMCk7cmV0dXJuO2Nhc2UgNDppMih0aGlzLDApO3JldHVybjtjYXNlIDU6TXkodGhpcywxKTtyZXR1cm47Y2FzZSA4OkdtKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgOTpyPSQxKHRoaXMsbnVsbCxudWxsKSxyJiZyLm9qKCk7cmV0dXJuO2Nhc2UgMTE6IXRoaXMuZCYmKHRoaXMuZD1uZXcgbWwoWnUsdGhpcywxMSkpLCRyKHRoaXMuZCk7cmV0dXJuO2Nhc2UgMTI6IXRoaXMuYyYmKHRoaXMuYz1uZXcgbnQoazMsdGhpcywxMiwxMCkpLCRyKHRoaXMuYyk7cmV0dXJuO2Nhc2UgMTM6dGhpcy5hJiZ0TCh0aGlzLmEpO3JldHVybjtjYXNlIDE0OnRoaXMuYiYmJHIodGhpcy5iKTtyZXR1cm59Y2YodGhpcyx0LXlyKChUbigpLEkyKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8STIpLHQpKX0saC5waT1mdW5jdGlvbigpe3ZhciB0LG47aWYodGhpcy5jKWZvcih0PTAsbj10aGlzLmMuaTt0PG47Kyt0KVNPKE9lKHRoaXMuYyx0KSk7T2YodGhpcyksdGhpcy5CYnw9MX0sSShHbiwiRU9wZXJhdGlvbkltcGwiLDQxMSksRCg1MTMsNzU2LE1TZSxMTyksaC5xaj1mdW5jdGlvbih0LG4pe2Nmbih0aGlzLHQsbChuLDE0MikpfSxoLnJqPWZ1bmN0aW9uKHQpe1lsbih0aGlzLGwodCwxNDIpKX0saC54aj1mdW5jdGlvbih0KXt2YXIgbixyO3JldHVybiBuPWwoT2UoWGwodGhpcy5hKSx0KSw4OSkscj1uLmMscnx8KFRuKCksdGQpfSxoLkNqPWZ1bmN0aW9uKHQpe3ZhciBuLHI7cmV0dXJuIG49bChWeShYbCh0aGlzLmEpLHQpLDg5KSxyPW4uYyxyfHwoVG4oKSx0ZCl9LGguRGo9ZnVuY3Rpb24odCxuKXtyZXR1cm4gWDVuKHRoaXMsdCxsKG4sMTQyKSl9LGguTGk9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5Jaj1mdW5jdGlvbih0LG4scixhLG8pe3JldHVybiBudWxsfSxoLnNqPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB5UWUodGhpcyl9LGgudGo9ZnVuY3Rpb24oKXskcihYbCh0aGlzLmEpKX0saC51aj1mdW5jdGlvbih0KXtyZXR1cm4gZzF0KHRoaXMsdCl9LGgudmo9ZnVuY3Rpb24odCl7dmFyIG4scjtmb3Iocj10LktjKCk7ci5PYigpOylpZihuPXIuUGIoKSwhZzF0KHRoaXMsbikpcmV0dXJuITE7cmV0dXJuITB9LGgud2o9ZnVuY3Rpb24odCl7dmFyIG4scixhO2lmKERlKHQsMTUpJiYoYT1sKHQsMTUpLGEuZ2MoKT09WGwodGhpcy5hKS5pKSl7Zm9yKG49YS5LYygpLHI9bmV3IG9yKHRoaXMpO24uT2IoKTspaWYocWUobi5QYigpKSE9PXFlKGdyKHIpKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4hMX0saC55aj1mdW5jdGlvbigpe3ZhciB0LG4scixhLG87Zm9yKHI9MSxuPW5ldyBvcihYbCh0aGlzLmEpKTtuLmUhPW4uaS5nYygpOyl0PWwoZ3IobiksODkpLGE9KG89dC5jLG98fChUbigpLHRkKSkscj0zMSpyKyhhP2VzKGEpOjApO3JldHVybiByfSxoLnpqPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvO2ZvcihhPTAscj1uZXcgb3IoWGwodGhpcy5hKSk7ci5lIT1yLmkuZ2MoKTspe2lmKG49bChncihyKSw4OSkscWUodCk9PT1xZSgobz1uLmMsb3x8KFRuKCksdGQpKSkpcmV0dXJuIGE7KythfXJldHVybi0xfSxoLkFqPWZ1bmN0aW9uKCl7cmV0dXJuIFhsKHRoaXMuYSkuaT09MH0saC5Caj1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLkVqPWZ1bmN0aW9uKCl7cmV0dXJuIFhsKHRoaXMuYSkuaX0saC5Gaj1mdW5jdGlvbigpe3ZhciB0LG4scixhLG8sZjtmb3IoZj1YbCh0aGlzLmEpLmksbz1XZSh3YSxSbiwxLGYsNSwxKSxyPTAsbj1uZXcgb3IoWGwodGhpcy5hKSk7bi5lIT1uLmkuZ2MoKTspdD1sKGdyKG4pLDg5KSxvW3IrK109KGE9dC5jLGF8fChUbigpLHRkKSk7cmV0dXJuIG99LGguR2o9ZnVuY3Rpb24odCl7dmFyIG4scixhLG8sZixnLHc7Zm9yKHc9WGwodGhpcy5hKS5pLHQubGVuZ3RoPHcmJihvPWJOKGJoKHQpLmMsdyksdD1vKSx0Lmxlbmd0aD53JiZUcyh0LHcsbnVsbCksYT0wLHI9bmV3IG9yKFhsKHRoaXMuYSkpO3IuZSE9ci5pLmdjKCk7KW49bChncihyKSw4OSksZj0oZz1uLmMsZ3x8KFRuKCksdGQpKSxUcyh0LGErKyxmKTtyZXR1cm4gdH0saC5Iaj1mdW5jdGlvbigpe3ZhciB0LG4scixhLG87Zm9yKG89bmV3IFVwLG8uYSs9IlsiLHQ9WGwodGhpcy5hKSxuPTAsYT1YbCh0aGlzLmEpLmk7bjxhOylYbyhvLGpfKChyPWwoT2UodCxuKSw4OSkuYyxyfHwoVG4oKSx0ZCkpKSksKytuPGEmJihvLmErPUNvKTtyZXR1cm4gby5hKz0iXSIsby5hfSxoLkpqPWZ1bmN0aW9uKHQpe30saC5Maj1mdW5jdGlvbigpe3JldHVybiAxM30saC5rbD1mdW5jdGlvbigpe3JldHVybiEwfSxoLk1qPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGgubGw9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5tbD1mdW5jdGlvbigpe3JldHVybiExfSxoLm5sPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguYWw9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5vbD1mdW5jdGlvbigpe3JldHVybiEwfSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE0Mil9LGguUWo9ZnVuY3Rpb24oKXtyZXR1cm4gTWJuKHRoaXMuYSl9LGguU2k9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5ZaT1mdW5jdGlvbigpe3JldHVybiEwfSxJKEduLCJFT3BlcmF0aW9uSW1wbC8xIiw1MTMpLEQoMTM3NiwyMDYyLGlULHlRZSksaC5mZD1mdW5jdGlvbih0KXtyZXR1cm4gbU4odGhpcy5hLHQpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIFhsKHRoaXMuYS5hKS5pfSxJKEduLCJFT3BlcmF0aW9uSW1wbC8xLzEiLDEzNzYpLEQoMTM3Nyw1NTUsa2Msd3N0KSxoLlRpPWZ1bmN0aW9uKHQsbil7dmFyIHIsYTtyZXR1cm4gcj1sKEFBKHRoaXMsdCxuKSw4OSksaGgodGhpcy5lKSYmeGsodGhpcyxuZXcgc04odGhpcy5hLDcsKFRuKCksVV90KSxwdChuKSwoYT1yLmMsYXx8dGQpLHQpKSxyfSxoLlVqPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGY0bih0aGlzLGwodCw4OSksbil9LGguVmo9ZnVuY3Rpb24odCxuKXtyZXR1cm4gaDRuKHRoaXMsbCh0LDg5KSxuKX0saC5Xaj1mdW5jdGlvbih0LG4scil7cmV0dXJuIHU2bih0aGlzLGwodCw4OSksbChuLDg5KSxyKX0saC5Jaj1mdW5jdGlvbih0LG4scixhLG8pe3N3aXRjaCh0KXtjYXNlIDM6cmV0dXJuIHJBKHRoaXMsdCxuLHIsYSx0aGlzLmk+MSk7Y2FzZSA1OnJldHVybiByQSh0aGlzLHQsbixyLGEsdGhpcy5pLWwociwxNSkuZ2MoKT4wKTtkZWZhdWx0OnJldHVybiBuZXcgWmcodGhpcy5lLHQsdGhpcy5jLG4scixhLCEwKX19LGguVGo9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5Raj1mdW5jdGlvbigpe3JldHVybiB1dWUodGhpcyl9LGguR2s9ZnVuY3Rpb24oKXskcih0aGlzKX0sSShHbiwiRU9wZXJhdGlvbkltcGwvMiIsMTM3NyksRCg1MDcsMSx7MjAzNzoxLDUwNzoxfSxPdHQpLEkoR24sIkVQYWNrYWdlSW1wbC8xIiw1MDcpLEQoMTQsODMsa2MsbnQpLGguaWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxoLmpsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0saC5tbD1mdW5jdGlvbigpe3JldHVybiEwfSxoLmI9MCxJKHVzLCJFT2JqZWN0Q29udGFpbm1lbnRXaXRoSW52ZXJzZUVMaXN0IiwxNCksRCgzNjUsMTQsa2MsVjgpLGgubmw9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5XaT1mdW5jdGlvbih0LG4pe3JldHVybiBFeCh0aGlzLHQsbChuLDU4KSl9LEkodXMsIkVPYmplY3RDb250YWlubWVudFdpdGhJbnZlcnNlRUxpc3QvUmVzb2x2aW5nIiwzNjUpLEQoMzA4LDM2NSxrYyx3eSksaC5OaT1mdW5jdGlvbigpe3RoaXMuYS50Yj1udWxsfSxJKEduLCJFUGFja2FnZUltcGwvMiIsMzA4KSxEKDEyNzgsMSx7fSxlcmUpLEkoR24sIkVQYWNrYWdlSW1wbC8zIiwxMjc4KSxEKDczMyw0NSxtNiwkd2UpLGguX2I9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpP3NvZSh0aGlzLHQpOiEhem8odGhpcy5mLHQpfSxJKEduLCJFUGFja2FnZVJlZ2lzdHJ5SW1wbCIsNzMzKSxEKDUxOCwyOTIsezExMDoxLDk0OjEsOTM6MSwxNTU6MSwxOTc6MSw1ODoxLDIxMTY6MSwxMTQ6MSw0ODE6MSw1NDoxLDk5OjEsMTU4OjEsNTE4OjEsMjkyOjEsMTE5OjEsMTIwOjF9LEhpZSksaC5BaD1mdW5jdGlvbih0KXtyZXR1cm4gbGd0KHRoaXMsdCl9LGguTGg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG8sZjtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIEhuKCksISEodGhpcy5CYiYyNTYpO2Nhc2UgMzpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJjUxMik7Y2FzZSA0OnJldHVybiBwdCh0aGlzLnMpO2Nhc2UgNTpyZXR1cm4gcHQodGhpcy50KTtjYXNlIDY6cmV0dXJuIEhuKCksZj10aGlzLnQsZj4xfHxmPT0tMTtjYXNlIDc6cmV0dXJuIEhuKCksbz10aGlzLnMsbz49MTtjYXNlIDg6cmV0dXJuIG4/T2YodGhpcyk6dGhpcy5yO2Nhc2UgOTpyZXR1cm4gdGhpcy5xO2Nhc2UgMTA6cmV0dXJuIHRoaXMuRGI+PjE2PT0xMD9sKHRoaXMuQ2IsNjIpOm51bGx9cmV0dXJuIHNmKHRoaXMsdC15cigoVG4oKSxONCkpLE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fE40KSx0KSxuLHIpfSxoLlNoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvLGY7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksUnUodGhpcy5BYix0LHIpO2Nhc2UgMTA6cmV0dXJuIHRoaXMuQ2ImJihyPShvPXRoaXMuRGI+PjE2LG8+PTA/bGd0KHRoaXMscik6dGhpcy5DYi5UaCh0aGlzLC0xLW8sbnVsbCxyKSkpLE5oKHRoaXMsdCwxMCxyKX1yZXR1cm4gZj1sKE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fChUbigpLE40KSksbiksNjkpLGYud2soKS56ayh0aGlzLEt1KHRoaXMpLG4teXIoKFRuKCksTjQpKSx0LHIpfSxoLlVoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLFRvKHRoaXMuQWIsdCxyKTtjYXNlIDk6cmV0dXJuIHFhZSh0aGlzLHIpO2Nhc2UgMTA6cmV0dXJuIE5oKHRoaXMsbnVsbCwxMCxyKX1yZXR1cm4gbz1sKE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fChUbigpLE40KSksbiksNjkpLG8ud2soKS5Bayh0aGlzLEt1KHRoaXMpLG4teXIoKFRuKCksTjQpKSx0LHIpfSxoLldoPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYTtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuKHRoaXMuQmImMjU2KT09MDtjYXNlIDM6cmV0dXJuKHRoaXMuQmImNTEyKT09MDtjYXNlIDQ6cmV0dXJuIHRoaXMucyE9MDtjYXNlIDU6cmV0dXJuIHRoaXMudCE9MTtjYXNlIDY6cmV0dXJuIGE9dGhpcy50LGE+MXx8YT09LTE7Y2FzZSA3OnJldHVybiByPXRoaXMucyxyPj0xO2Nhc2UgODpyZXR1cm4hIXRoaXMuciYmIXRoaXMucS5lJiZ5dyh0aGlzLnEpLmk9PTA7Y2FzZSA5OnJldHVybiEhdGhpcy5xJiYhKHRoaXMuciYmIXRoaXMucS5lJiZ5dyh0aGlzLnEpLmk9PTApO2Nhc2UgMTA6cmV0dXJuISEodGhpcy5EYj4+MTY9PTEwJiZsKHRoaXMuQ2IsNjIpKX1yZXR1cm4gbmYodGhpcyx0LXlyKChUbigpLE40KSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8TjQpLHQpKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBUbigpLE40fSxJKEduLCJFUGFyYW1ldGVySW1wbCIsNTE4KSxEKDEwMiw0NjIsezExMDoxLDk0OjEsOTM6MSwxNTU6MSwxOTc6MSw1ODoxLDE5OjEsMTc5OjEsNjk6MSwxMTQ6MSw0ODE6MSw1NDoxLDk5OjEsMTU4OjEsMTAyOjEsNDYyOjEsMjkyOjEsMTE5OjEsMTIwOjEsNjkyOjF9LEh5ZSksaC5MaD1mdW5jdGlvbih0LG4scil7dmFyIGEsbyxmLGc7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4hdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiBIbigpLCEhKHRoaXMuQmImMjU2KTtjYXNlIDM6cmV0dXJuIEhuKCksISEodGhpcy5CYiY1MTIpO2Nhc2UgNDpyZXR1cm4gcHQodGhpcy5zKTtjYXNlIDU6cmV0dXJuIHB0KHRoaXMudCk7Y2FzZSA2OnJldHVybiBIbigpLGc9dGhpcy50LGc+MXx8Zz09LTE7Y2FzZSA3OnJldHVybiBIbigpLG89dGhpcy5zLG8+PTE7Y2FzZSA4OnJldHVybiBuP09mKHRoaXMpOnRoaXMucjtjYXNlIDk6cmV0dXJuIHRoaXMucTtjYXNlIDEwOnJldHVybiBIbigpLCEhKHRoaXMuQmImbTApO2Nhc2UgMTE6cmV0dXJuIEhuKCksISEodGhpcy5CYiZyNCk7Y2FzZSAxMjpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJlh5KTtjYXNlIDEzOnJldHVybiB0aGlzLmo7Y2FzZSAxNDpyZXR1cm4gVUUodGhpcyk7Y2FzZSAxNTpyZXR1cm4gSG4oKSwhISh0aGlzLkJiJlNsKTtjYXNlIDE2OnJldHVybiBIbigpLCEhKHRoaXMuQmImX2QpO2Nhc2UgMTc6cmV0dXJuIGt5KHRoaXMpO2Nhc2UgMTg6cmV0dXJuIEhuKCksISEodGhpcy5CYiZldSk7Y2FzZSAxOTpyZXR1cm4gSG4oKSxmPVJvKHRoaXMpLCEhKGYmJmYuQmImZXUpO2Nhc2UgMjA6cmV0dXJuIEhuKCksISEodGhpcy5CYiZJbyk7Y2FzZSAyMTpyZXR1cm4gbj9Sbyh0aGlzKTp0aGlzLmI7Y2FzZSAyMjpyZXR1cm4gbj8kN2UodGhpcyk6X3V0KHRoaXMpO2Nhc2UgMjM6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgJDUoRDQsdGhpcywyMykpLHRoaXMuYX1yZXR1cm4gc2YodGhpcyx0LXlyKChUbigpLG83KSksTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8bzcpLHQpLG4scil9LGguV2g9ZnVuY3Rpb24odCl7dmFyIG4scixhLG87c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4hIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybih0aGlzLkJiJjI1Nik9PTA7Y2FzZSAzOnJldHVybih0aGlzLkJiJjUxMik9PTA7Y2FzZSA0OnJldHVybiB0aGlzLnMhPTA7Y2FzZSA1OnJldHVybiB0aGlzLnQhPTE7Y2FzZSA2OnJldHVybiBvPXRoaXMudCxvPjF8fG89PS0xO2Nhc2UgNzpyZXR1cm4gcj10aGlzLnMscj49MTtjYXNlIDg6cmV0dXJuISF0aGlzLnImJiF0aGlzLnEuZSYmeXcodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4hIXRoaXMucSYmISh0aGlzLnImJiF0aGlzLnEuZSYmeXcodGhpcy5xKS5pPT0wKTtjYXNlIDEwOnJldHVybih0aGlzLkJiJm0wKT09MDtjYXNlIDExOnJldHVybih0aGlzLkJiJnI0KSE9MDtjYXNlIDEyOnJldHVybih0aGlzLkJiJlh5KSE9MDtjYXNlIDEzOnJldHVybiB0aGlzLmohPW51bGw7Y2FzZSAxNDpyZXR1cm4gVUUodGhpcykhPW51bGw7Y2FzZSAxNTpyZXR1cm4odGhpcy5CYiZTbCkhPTA7Y2FzZSAxNjpyZXR1cm4odGhpcy5CYiZfZCkhPTA7Y2FzZSAxNzpyZXR1cm4hIWt5KHRoaXMpO2Nhc2UgMTg6cmV0dXJuKHRoaXMuQmImZXUpIT0wO2Nhc2UgMTk6cmV0dXJuIGE9Um8odGhpcyksISFhJiYoYS5CYiZldSkhPTA7Y2FzZSAyMDpyZXR1cm4odGhpcy5CYiZJbyk9PTA7Y2FzZSAyMTpyZXR1cm4hIXRoaXMuYjtjYXNlIDIyOnJldHVybiEhX3V0KHRoaXMpO2Nhc2UgMjM6cmV0dXJuISF0aGlzLmEmJnRoaXMuYS5pIT0wfXJldHVybiBuZih0aGlzLHQteXIoKFRuKCksbzcpKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHxvNyksdCkpfSxoLmJpPWZ1bmN0aW9uKHQsbil7dmFyIHIsYTtzd2l0Y2godCl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSwkcih0aGlzLkFiKSwhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksQXModGhpcy5BYixsKG4sMTYpKTtyZXR1cm47Y2FzZSAxOnBvZSh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSAyOmMyKHRoaXMsUnQoQnQobikpKTtyZXR1cm47Y2FzZSAzOnUyKHRoaXMsUnQoQnQobikpKTtyZXR1cm47Y2FzZSA0OmkyKHRoaXMsbChuLDE3KS5hKTtyZXR1cm47Y2FzZSA1Ok15KHRoaXMsbChuLDE3KS5hKTtyZXR1cm47Y2FzZSA4OkdtKHRoaXMsbChuLDE0MikpO3JldHVybjtjYXNlIDk6YT0kMSh0aGlzLGwobiw4OSksbnVsbCksYSYmYS5vaigpO3JldHVybjtjYXNlIDEwOkFFKHRoaXMsUnQoQnQobikpKTtyZXR1cm47Y2FzZSAxMTpERSh0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgMTI6TEUodGhpcyxSdChCdChuKSkpO3JldHVybjtjYXNlIDEzOlozZSh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSAxNTpNRSh0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgMTY6SUUodGhpcyxSdChCdChuKSkpO3JldHVybjtjYXNlIDE4Okwybih0aGlzLFJ0KEJ0KG4pKSk7cmV0dXJuO2Nhc2UgMjA6djhlKHRoaXMsUnQoQnQobikpKTtyZXR1cm47Y2FzZSAyMTpiN2UodGhpcyxsKG4sMTkpKTtyZXR1cm47Y2FzZSAyMzohdGhpcy5hJiYodGhpcy5hPW5ldyAkNShENCx0aGlzLDIzKSksJHIodGhpcy5hKSwhdGhpcy5hJiYodGhpcy5hPW5ldyAkNShENCx0aGlzLDIzKSksQXModGhpcy5hLGwobiwxNikpO3JldHVybn11Zih0aGlzLHQteXIoKFRuKCksbzcpKSxNbigocj1sKEtuKHRoaXMsMTYpLDI5KSxyfHxvNyksdCksbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gVG4oKSxvN30saC5raT1mdW5jdGlvbih0KXt2YXIgbixyO3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLCRyKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6RGUodGhpcy5DYiw5MCkmJnp5KFlsKGwodGhpcy5DYiw5MCkpLDQpLEZ1KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjpjMih0aGlzLCEwKTtyZXR1cm47Y2FzZSAzOnUyKHRoaXMsITApO3JldHVybjtjYXNlIDQ6aTIodGhpcywwKTtyZXR1cm47Y2FzZSA1Ok15KHRoaXMsMSk7cmV0dXJuO2Nhc2UgODpHbSh0aGlzLG51bGwpO3JldHVybjtjYXNlIDk6cj0kMSh0aGlzLG51bGwsbnVsbCksciYmci5vaigpO3JldHVybjtjYXNlIDEwOkFFKHRoaXMsITApO3JldHVybjtjYXNlIDExOkRFKHRoaXMsITEpO3JldHVybjtjYXNlIDEyOkxFKHRoaXMsITEpO3JldHVybjtjYXNlIDEzOnRoaXMuaT1udWxsLHhWKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTU6TUUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTY6SUUodGhpcywhMSk7cmV0dXJuO2Nhc2UgMTg6bThlKHRoaXMsITEpLERlKHRoaXMuQ2IsOTApJiZ6eShZbChsKHRoaXMuQ2IsOTApKSwyKTtyZXR1cm47Y2FzZSAyMDp2OGUodGhpcywhMCk7cmV0dXJuO2Nhc2UgMjE6YjdlKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjM6IXRoaXMuYSYmKHRoaXMuYT1uZXcgJDUoRDQsdGhpcywyMykpLCRyKHRoaXMuYSk7cmV0dXJufWNmKHRoaXMsdC15cigoVG4oKSxvNykpLE1uKChuPWwoS24odGhpcywxNiksMjkpLG58fG83KSx0KSl9LGgucGk9ZnVuY3Rpb24oKXskN2UodGhpcyksV2soaWMoKEVsKCksaW8pLHRoaXMpKSxPZih0aGlzKSx0aGlzLkJifD0xfSxoLnVrPWZ1bmN0aW9uKCl7cmV0dXJuIFJvKHRoaXMpfSxoLl9rPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHQ9Um8odGhpcyksISF0JiYodC5CYiZldSkhPTB9LGguYWw9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5CYiZldSkhPTB9LGguYmw9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5CYiZJbykhPTB9LGguWWs9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5jPW51bGwsbzhlKHRoaXMsdCxuKX0saC5JYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLkRiJjY0P0JVKHRoaXMpOih0PW5ldyBBZihCVSh0aGlzKSksdC5hKz0iIChjb250YWlubWVudDogIixHcCh0LCh0aGlzLkJiJmV1KSE9MCksdC5hKz0iLCByZXNvbHZlUHJveGllczogIixHcCh0LCh0aGlzLkJiJklvKSE9MCksdC5hKz0iKSIsdC5hKX0sSShHbiwiRVJlZmVyZW5jZUltcGwiLDEwMiksRCg1NjEsMTIwLHsxMTA6MSw0NDoxLDk0OjEsOTM6MSwxMzY6MSw1ODoxLDExNDoxLDU0OjEsOTk6MSw1NjE6MSwxMTk6MSwxMjA6MX0sT1MpLGguRmI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fSxoLmxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0saC5tZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGguSGI9ZnVuY3Rpb24oKXtyZXR1cm4gZncodGhpcyl9LGguRGk9ZnVuY3Rpb24odCl7TmRuKHRoaXMsZWkodCkpfSxoLm5kPWZ1bmN0aW9uKHQpe3JldHVybiB3ZG4odGhpcyxlaSh0KSl9LGguTGg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHRoaXMuYjtjYXNlIDE6cmV0dXJuIHRoaXMuY31yZXR1cm4gc2YodGhpcyx0LXlyKChUbigpLE5vKSksTW4oKGE9bChLbih0aGlzLDE2KSwyOSksYXx8Tm8pLHQpLG4scil9LGguV2g9ZnVuY3Rpb24odCl7dmFyIG47c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy5iIT1udWxsO2Nhc2UgMTpyZXR1cm4gdGhpcy5jIT1udWxsfXJldHVybiBuZih0aGlzLHQteXIoKFRuKCksTm8pKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHxObyksdCkpfSxoLmJpPWZ1bmN0aW9uKHQsbil7dmFyIHI7c3dpdGNoKHQpe2Nhc2UgMDpQZG4odGhpcyxlaShuKSk7cmV0dXJuO2Nhc2UgMTpkN2UodGhpcyxlaShuKSk7cmV0dXJufXVmKHRoaXMsdC15cigoVG4oKSxObykpLE1uKChyPWwoS24odGhpcywxNiksMjkpLHJ8fE5vKSx0KSxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBUbigpLE5vfSxoLmtpPWZ1bmN0aW9uKHQpe3ZhciBuO3N3aXRjaCh0KXtjYXNlIDA6ZjdlKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTpkN2UodGhpcyxudWxsKTtyZXR1cm59Y2YodGhpcyx0LXlyKChUbigpLE5vKSksTW4oKG49bChLbih0aGlzLDE2KSwyOSksbnx8Tm8pLHQpKX0saC5CaT1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLmE9PS0xJiYodD10aGlzLmIsdGhpcy5hPXQ9PW51bGw/MDpzMih0KSksdGhpcy5hfSxoLkNpPWZ1bmN0aW9uKHQpe3RoaXMuYT10fSxoLkliPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHRoaXMuRGImNjQ/ZzAodGhpcyk6KHQ9bmV3IEFmKGcwKHRoaXMpKSx0LmErPSIgKGtleTogIixYbyh0LHRoaXMuYiksdC5hKz0iLCB2YWx1ZTogIixYbyh0LHRoaXMuYyksdC5hKz0iKSIsdC5hKX0saC5hPS0xLGguYj1udWxsLGguYz1udWxsO3ZhciBZYz1JKEduLCJFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeUltcGwiLDU2MSksUV90PWtzKHVzLCJGZWF0dXJlTWFwL0VudHJ5L0ludGVybmFsIik7RCg1NzYsMSxZRyksaC54bD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy55bChsKHQsNTQpKX0saC55bD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54bCh0KX0saC5GYj1mdW5jdGlvbih0KXt2YXIgbixyO3JldHVybiB0aGlzPT09dD8hMDpEZSh0LDc2KT8obj1sKHQsNzYpLG4uTGsoKT09dGhpcy5jPyhyPXRoaXMubWQoKSxyPT1udWxsP24ubWQoKT09bnVsbDpQaShyLG4ubWQoKSkpOiExKTohMX0saC5Maz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGguSGI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD10aGlzLm1kKCksZXModGhpcy5jKV4odD09bnVsbD8wOmVzKHQpKX0saC5JYj1mdW5jdGlvbigpe3ZhciB0LG47cmV0dXJuIHQ9dGhpcy5jLG49QWgodC5xaygpKS55aSgpLHQueGUoKSwobiE9bnVsbCYmbi5sZW5ndGghPTA/bisiOiIrdC54ZSgpOnQueGUoKSkrIj0iK3RoaXMubWQoKX0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9CYXNpY0ZlYXR1cmVNYXBFbnRyeSIsNTc2KSxEKDc5MSw1NzYsWUcsSnllKSxoLnlsPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgSnllKHRoaXMuYyx0KX0saC5tZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguemw9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB2M24odGhpcyx0LHRoaXMuYSxuLHIpfSxoLkFsPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdzNuKHRoaXMsdCx0aGlzLmEsbixyKX0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9Db250YWlubWVudFVwZGF0aW5nRmVhdHVyZU1hcEVudHJ5Iiw3OTEpLEQoMTM1MCwxLHt9LE50dCksaC55az1mdW5jdGlvbih0LG4scixhLG8pe3ZhciBmO3JldHVybiBmPWwodEUodCx0aGlzLmIpLDIyMCksZi5ZbCh0aGlzLmEpLkZrKGEpfSxoLnprPWZ1bmN0aW9uKHQsbixyLGEsbyl7dmFyIGY7cmV0dXJuIGY9bCh0RSh0LHRoaXMuYiksMjIwKSxmLlBsKHRoaXMuYSxhLG8pfSxoLkFrPWZ1bmN0aW9uKHQsbixyLGEsbyl7dmFyIGY7cmV0dXJuIGY9bCh0RSh0LHRoaXMuYiksMjIwKSxmLlFsKHRoaXMuYSxhLG8pfSxoLkJrPWZ1bmN0aW9uKHQsbixyKXt2YXIgYTtyZXR1cm4gYT1sKHRFKHQsdGhpcy5iKSwyMjApLGEuWWwodGhpcy5hKS5RaigpfSxoLkNrPWZ1bmN0aW9uKHQsbixyLGEpe3ZhciBvO289bCh0RSh0LHRoaXMuYiksMjIwKSxvLllsKHRoaXMuYSkuV2IoYSl9LGguRGs9ZnVuY3Rpb24odCxuLHIpe3JldHVybiBsKHRFKHQsdGhpcy5iKSwyMjApLllsKHRoaXMuYSl9LGguRWs9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO2E9bCh0RSh0LHRoaXMuYiksMjIwKSxhLllsKHRoaXMuYSkuR2soKX0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZUZlYXR1cmVNYXBEZWxlZ2F0b3IiLDEzNTApLEQoOTEsMSx7fSxYcCxPbSxKcCxSbSksaC55az1mdW5jdGlvbih0LG4scixhLG8pe3ZhciBmO2lmKGY9bi5saShyKSxmPT1udWxsJiZuLm1pKHIsZj1XVSh0aGlzLHQpKSwhbylzd2l0Y2godGhpcy5lKXtjYXNlIDUwOmNhc2UgNDE6cmV0dXJuIGwoZiw1OTcpLmJrKCk7Y2FzZSA0MDpyZXR1cm4gbChmLDIyMCkuVmwoKX1yZXR1cm4gZn0saC56az1mdW5jdGlvbih0LG4scixhLG8pe3ZhciBmLGc7cmV0dXJuIGc9bi5saShyKSxnPT1udWxsJiZuLm1pKHIsZz1XVSh0aGlzLHQpKSxmPWwoZyw3MSkuV2soYSxvKSxmfSxoLkFrPWZ1bmN0aW9uKHQsbixyLGEsbyl7dmFyIGY7cmV0dXJuIGY9bi5saShyKSxmIT1udWxsJiYobz1sKGYsNzEpLlhrKGEsbykpLG99LGguQms9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3JldHVybiBhPW4ubGkociksYSE9bnVsbCYmbChhLDc5KS5RaigpfSxoLkNrPWZ1bmN0aW9uKHQsbixyLGEpe3ZhciBvO289bChuLmxpKHIpLDc5KSwhbyYmbi5taShyLG89V1UodGhpcyx0KSksby5XYihhKX0saC5Eaz1mdW5jdGlvbih0LG4scil7dmFyIGEsbztyZXR1cm4gbz1uLmxpKHIpLG89PW51bGwmJm4ubWkocixvPVdVKHRoaXMsdCkpLERlKG8sNzkpP2wobyw3OSk6KGE9bChuLmxpKHIpLDE1KSxuZXcgeFFlKGEpKX0saC5Faz1mdW5jdGlvbih0LG4scil7dmFyIGE7YT1sKG4ubGkociksNzkpLCFhJiZuLm1pKHIsYT1XVSh0aGlzLHQpKSxhLkdrKCl9LGguYj0wLGguZT0wLEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVNYW55Iiw5MSksRCg1MTIsMSx7fSksaC56az1mdW5jdGlvbih0LG4scixhLG8pe3Rocm93IHVlKG5ldyBRcil9LGguQWs9ZnVuY3Rpb24odCxuLHIsYSxvKXt0aHJvdyB1ZShuZXcgUXIpfSxoLkRrPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbmV3IElhdCh0aGlzLHQsbixyKX07dmFyIFNnO0koR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGUiLDUxMiksRCgxMzY3LDEsaTBlLElhdCksaC5Gaz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLnlrKHRoaXMuYyx0aGlzLmQsdGhpcy5iLHQsITApfSxoLlFqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5Cayh0aGlzLmMsdGhpcy5kLHRoaXMuYil9LGguV2I9ZnVuY3Rpb24odCl7dGhpcy5hLkNrKHRoaXMuYyx0aGlzLmQsdGhpcy5iLHQpfSxoLkdrPWZ1bmN0aW9uKCl7dGhpcy5hLkVrKHRoaXMuYyx0aGlzLmQsdGhpcy5iKX0saC5iPTAsSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZS8xIiwxMzY3KSxEKDc4NCw1MTIse30sJDVlKSxoLnlrPWZ1bmN0aW9uKHQsbixyLGEsbyl7cmV0dXJuIHNsZSh0LHQuUGgoKSx0LkZoKCkpPT10aGlzLmI/dGhpcy5ibCgpJiZhP1V1ZSh0KTp0LlBoKCk6bnVsbH0saC56az1mdW5jdGlvbih0LG4scixhLG8pe3ZhciBmLGc7cmV0dXJuIHQuUGgoKSYmKG89KGY9dC5GaCgpLGY+PTA/dC5BaChvKTp0LlBoKCkuVGgodCwtMS1mLG51bGwsbykpKSxnPW1zKHQuRGgoKSx0aGlzLmUpLHQuQ2goYSxnLG8pfSxoLkFrPWZ1bmN0aW9uKHQsbixyLGEsbyl7dmFyIGY7cmV0dXJuIGY9bXModC5EaCgpLHRoaXMuZSksdC5DaChudWxsLGYsbyl9LGguQms9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3JldHVybiBhPW1zKHQuRGgoKSx0aGlzLmUpLCEhdC5QaCgpJiZ0LkZoKCk9PWF9LGguQ2s9ZnVuY3Rpb24odCxuLHIsYSl7dmFyIG8sZixnLHcsRTtpZihhIT1udWxsJiYhdWxlKHRoaXMuYSxhKSl0aHJvdyB1ZShuZXcga2soWEcrKERlKGEsNTgpP194ZShsKGEsNTgpLkRoKCkpOks2ZShiaChhKSkpK1FHK3RoaXMuYSsiJyIpKTtpZihvPXQuUGgoKSxnPW1zKHQuRGgoKSx0aGlzLmUpLHFlKGEpIT09cWUobyl8fHQuRmgoKSE9ZyYmYSE9bnVsbCl7aWYoRkUodCxsKGEsNTgpKSl0aHJvdyB1ZShuZXcgWW4oRUwrdC5JYigpKSk7RT1udWxsLG8mJihFPShmPXQuRmgoKSxmPj0wP3QuQWgoRSk6dC5QaCgpLlRoKHQsLTEtZixudWxsLEUpKSksdz1sKGEsNTQpLHcmJihFPXcuUmgodCxtcyh3LkRoKCksdGhpcy5iKSxudWxsLEUpKSxFPXQuQ2godyxnLEUpLEUmJkUub2ooKX1lbHNlIHQudmgoKSYmdC53aCgpJiZOaSh0LG5ldyBfYSh0LDEsZyxhLGEpKX0saC5Faz1mdW5jdGlvbih0LG4scil7dmFyIGEsbyxmLGc7YT10LlBoKCksYT8oZz0obz10LkZoKCksbz49MD90LkFoKG51bGwpOnQuUGgoKS5UaCh0LC0xLW8sbnVsbCxudWxsKSksZj1tcyh0LkRoKCksdGhpcy5lKSxnPXQuQ2gobnVsbCxmLGcpLGcmJmcub2ooKSk6dC52aCgpJiZ0LndoKCkmJk5pKHQsbmV3IFhfKHQsMSx0aGlzLmUsbnVsbCxudWxsKSl9LGguYmw9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUNvbnRhaW5lciIsNzg0KSxEKDEzNTEsNzg0LHt9LGtpdCksaC5ibD1mdW5jdGlvbigpe3JldHVybiEwfSxJKEduLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlQ29udGFpbmVyUmVzb2x2aW5nIiwxMzUxKSxEKDU3NCw1MTIse30pLGgueWs9ZnVuY3Rpb24odCxuLHIsYSxvKXt2YXIgZjtyZXR1cm4gZj1uLmxpKHIpLGY9PW51bGw/dGhpcy5iOnFlKGYpPT09cWUoU2cpP251bGw6Zn0saC5Caz1mdW5jdGlvbih0LG4scil7dmFyIGE7cmV0dXJuIGE9bi5saShyKSxhIT1udWxsJiYocWUoYSk9PT1xZShTZyl8fCFQaShhLHRoaXMuYikpfSxoLkNrPWZ1bmN0aW9uKHQsbixyLGEpe3ZhciBvLGY7dC52aCgpJiZ0LndoKCk/KG89KGY9bi5saShyKSxmPT1udWxsP3RoaXMuYjpxZShmKT09PXFlKFNnKT9udWxsOmYpLGE9PW51bGw/dGhpcy5jIT1udWxsPyhuLm1pKHIsbnVsbCksYT10aGlzLmIpOnRoaXMuYiE9bnVsbD9uLm1pKHIsU2cpOm4ubWkocixudWxsKToodGhpcy5CbChhKSxuLm1pKHIsYSkpLE5pKHQsdGhpcy5kLkNsKHQsMSx0aGlzLmUsbyxhKSkpOmE9PW51bGw/dGhpcy5jIT1udWxsP24ubWkocixudWxsKTp0aGlzLmIhPW51bGw/bi5taShyLFNnKTpuLm1pKHIsbnVsbCk6KHRoaXMuQmwoYSksbi5taShyLGEpKX0saC5Faz1mdW5jdGlvbih0LG4scil7dmFyIGEsbzt0LnZoKCkmJnQud2goKT8oYT0obz1uLmxpKHIpLG89PW51bGw/dGhpcy5iOnFlKG8pPT09cWUoU2cpP251bGw6byksbi5uaShyKSxOaSh0LHRoaXMuZC5DbCh0LDEsdGhpcy5lLGEsdGhpcy5iKSkpOm4ubmkocil9LGguQmw9ZnVuY3Rpb24odCl7dGhyb3cgdWUobmV3IElRZSl9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhIiw1NzQpLEQoXzYsMSx7fSxOUyksaC5DbD1mdW5jdGlvbih0LG4scixhLG8pe3JldHVybiBuZXcgWF8odCxuLHIsYSxvKX0saC5EbD1mdW5jdGlvbih0LG4scixhLG8sZil7cmV0dXJuIG5ldyByb2UodCxuLHIsYSxvLGYpfTt2YXIgTVBlLERQZSxJUGUsT1BlLE5QZSxQUGUsQlBlLGlwZSxGUGU7SShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEvTm90aWZpY2F0aW9uQ3JlYXRvciIsXzYpLEQoMTM2OCxfNix7fSxIMCksaC5DbD1mdW5jdGlvbih0LG4scixhLG8pe3JldHVybiBuZXcgbTZlKHQsbixyLFJ0KEJ0KGEpKSxSdChCdChvKSkpfSxoLkRsPWZ1bmN0aW9uKHQsbixyLGEsbyxmKXtyZXR1cm4gbmV3IHJjdCh0LG4scixSdChCdChhKSksUnQoQnQobykpLGYpfSxJKEduLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YS9Ob3RpZmljYXRpb25DcmVhdG9yLzEiLDEzNjgpLEQoMTM2OSxfNix7fSxBSSksaC5DbD1mdW5jdGlvbih0LG4scixhLG8pe3JldHVybiBuZXcgUTZlKHQsbixyLGwoYSwyMjIpLmEsbChvLDIyMikuYSl9LGguRGw9ZnVuY3Rpb24odCxuLHIsYSxvLGYpe3JldHVybiBuZXcgWG90KHQsbixyLGwoYSwyMjIpLmEsbChvLDIyMikuYSxmKX0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEvTm90aWZpY2F0aW9uQ3JlYXRvci8yIiwxMzY5KSxEKDEzNzAsXzYse30sTEkpLGguQ2w9ZnVuY3Rpb24odCxuLHIsYSxvKXtyZXR1cm4gbmV3IEo2ZSh0LG4scixsKGEsMTgwKS5hLGwobywxODApLmEpfSxoLkRsPWZ1bmN0aW9uKHQsbixyLGEsbyxmKXtyZXR1cm4gbmV3IFFvdCh0LG4scixsKGEsMTgwKS5hLGwobywxODApLmEsZil9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhL05vdGlmaWNhdGlvbkNyZWF0b3IvMyIsMTM3MCksRCgxMzcxLF82LHt9LGY4KSxoLkNsPWZ1bmN0aW9uKHQsbixyLGEsbyl7cmV0dXJuIG5ldyBwNmUodCxuLHIsemUoR2UoYSkpLHplKEdlKG8pKSl9LGguRGw9ZnVuY3Rpb24odCxuLHIsYSxvLGYpe3JldHVybiBuZXcgSm90KHQsbixyLHplKEdlKGEpKSx6ZShHZShvKSksZil9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhL05vdGlmaWNhdGlvbkNyZWF0b3IvNCIsMTM3MSksRCgxMzcyLF82LHt9LHRyZSksaC5DbD1mdW5jdGlvbih0LG4scixhLG8pe3JldHVybiBuZXcgdDdlKHQsbixyLGwoYSwxNjEpLmEsbChvLDE2MSkuYSl9LGguRGw9ZnVuY3Rpb24odCxuLHIsYSxvLGYpe3JldHVybiBuZXcgWm90KHQsbixyLGwoYSwxNjEpLmEsbChvLDE2MSkuYSxmKX0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEvTm90aWZpY2F0aW9uQ3JlYXRvci81IiwxMzcyKSxEKDEzNzMsXzYse30sbnJlKSxoLkNsPWZ1bmN0aW9uKHQsbixyLGEsbyl7cmV0dXJuIG5ldyBiNmUodCxuLHIsbChhLDE3KS5hLGwobywxNykuYSl9LGguRGw9ZnVuY3Rpb24odCxuLHIsYSxvLGYpe3JldHVybiBuZXcgZWN0KHQsbixyLGwoYSwxNykuYSxsKG8sMTcpLmEsZil9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhL05vdGlmaWNhdGlvbkNyZWF0b3IvNiIsMTM3MyksRCgxMzc0LF82LHt9LHJyZSksaC5DbD1mdW5jdGlvbih0LG4scixhLG8pe3JldHVybiBuZXcgWjZlKHQsbixyLGwoYSwxNjgpLmEsbChvLDE2OCkuYSl9LGguRGw9ZnVuY3Rpb24odCxuLHIsYSxvLGYpe3JldHVybiBuZXcgdGN0KHQsbixyLGwoYSwxNjgpLmEsbChvLDE2OCkuYSxmKX0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEvTm90aWZpY2F0aW9uQ3JlYXRvci83IiwxMzc0KSxEKDEzNzUsXzYse30saXJlKSxoLkNsPWZ1bmN0aW9uKHQsbixyLGEsbyl7cmV0dXJuIG5ldyBlN2UodCxuLHIsbChhLDE5MSkuYSxsKG8sMTkxKS5hKX0saC5EbD1mdW5jdGlvbih0LG4scixhLG8sZil7cmV0dXJuIG5ldyBuY3QodCxuLHIsbChhLDE5MSkuYSxsKG8sMTkxKS5hLGYpfSxJKEduLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YS9Ob3RpZmljYXRpb25DcmVhdG9yLzgiLDEzNzUpLEQoMTM1Myw1NzQse30sT2F0KSxoLkJsPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmEuZmsodCkpdGhyb3cgdWUobmV3IGtrKFhHK2JoKHQpK1FHK3RoaXMuYSsiJyIpKX0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGFEeW5hbWljIiwxMzUzKSxEKDEzNTQsNTc0LHt9LHlzdCksaC5CbD1mdW5jdGlvbih0KXt9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhU3RhdGljIiwxMzU0KSxEKDc4NSw1NzQse30pLGguQms9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3JldHVybiBhPW4ubGkociksYSE9bnVsbH0saC5Daz1mdW5jdGlvbih0LG4scixhKXt2YXIgbyxmO3QudmgoKSYmdC53aCgpPyhvPSEwLGY9bi5saShyKSxmPT1udWxsPyhvPSExLGY9dGhpcy5iKTpxZShmKT09PXFlKFNnKSYmKGY9bnVsbCksYT09bnVsbD90aGlzLmMhPW51bGw/KG4ubWkocixudWxsKSxhPXRoaXMuYik6bi5taShyLFNnKToodGhpcy5CbChhKSxuLm1pKHIsYSkpLE5pKHQsdGhpcy5kLkRsKHQsMSx0aGlzLmUsZixhLCFvKSkpOmE9PW51bGw/dGhpcy5jIT1udWxsP24ubWkocixudWxsKTpuLm1pKHIsU2cpOih0aGlzLkJsKGEpLG4ubWkocixhKSl9LGguRWs9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLG87dC52aCgpJiZ0LndoKCk/KGE9ITAsbz1uLmxpKHIpLG89PW51bGw/KGE9ITEsbz10aGlzLmIpOnFlKG8pPT09cWUoU2cpJiYobz1udWxsKSxuLm5pKHIpLE5pKHQsdGhpcy5kLkRsKHQsMix0aGlzLmUsbyx0aGlzLmIsYSkpKTpuLm5pKHIpfSxJKEduLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YVVuc2V0dGFibGUiLDc4NSksRCgxMzU1LDc4NSx7fSxOYXQpLGguQmw9ZnVuY3Rpb24odCl7aWYoIXRoaXMuYS5mayh0KSl0aHJvdyB1ZShuZXcga2soWEcrYmgodCkrUUcrdGhpcy5hKyInIikpfSxJKEduLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YVVuc2V0dGFibGVEeW5hbWljIiwxMzU1KSxEKDEzNTYsNzg1LHt9LHhzdCksaC5CbD1mdW5jdGlvbih0KXt9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhVW5zZXR0YWJsZVN0YXRpYyIsMTM1NiksRCg0MTAsNTEyLHt9LGNIKSxoLnlrPWZ1bmN0aW9uKHQsbixyLGEsbyl7dmFyIGYsZyx3LEUsQztpZihDPW4ubGkociksdGhpcy50aygpJiZxZShDKT09PXFlKFNnKSlyZXR1cm4gbnVsbDtpZih0aGlzLmJsKCkmJmEmJkMhPW51bGwpe2lmKHc9bChDLDU0KSx3LlZoKCkmJihFPXliKHQsdyksdyE9RSkpe2lmKCF1bGUodGhpcy5hLEUpKXRocm93IHVlKG5ldyBrayhYRytiaChFKStRRyt0aGlzLmErIiciKSk7bi5taShyLEM9RSksdGhpcy5hbCgpJiYoZj1sKEUsNTQpLGc9dy5UaCh0LHRoaXMuYj9tcyh3LkRoKCksdGhpcy5iKTotMS1tcyh0LkRoKCksdGhpcy5lKSxudWxsLG51bGwpLCFmLlBoKCkmJihnPWYuUmgodCx0aGlzLmI/bXMoZi5EaCgpLHRoaXMuYik6LTEtbXModC5EaCgpLHRoaXMuZSksbnVsbCxnKSksZyYmZy5vaigpKSx0LnZoKCkmJnQud2goKSYmTmkodCxuZXcgWF8odCw5LHRoaXMuZSx3LEUpKX1yZXR1cm4gQ31lbHNlIHJldHVybiBDfSxoLnprPWZ1bmN0aW9uKHQsbixyLGEsbyl7dmFyIGYsZztyZXR1cm4gZz1uLmxpKHIpLHFlKGcpPT09cWUoU2cpJiYoZz1udWxsKSxuLm1pKHIsYSksdGhpcy5NaigpP3FlKGcpIT09cWUoYSkmJmchPW51bGwmJihmPWwoZyw1NCksbz1mLlRoKHQsbXMoZi5EaCgpLHRoaXMuYiksbnVsbCxvKSk6dGhpcy5hbCgpJiZnIT1udWxsJiYobz1sKGcsNTQpLlRoKHQsLTEtbXModC5EaCgpLHRoaXMuZSksbnVsbCxvKSksdC52aCgpJiZ0LndoKCkmJighbyYmKG89bmV3IG5iKDQpKSxvLm5qKG5ldyBYXyh0LDEsdGhpcy5lLGcsYSkpKSxvfSxoLkFrPWZ1bmN0aW9uKHQsbixyLGEsbyl7dmFyIGY7cmV0dXJuIGY9bi5saShyKSxxZShmKT09PXFlKFNnKSYmKGY9bnVsbCksbi5uaShyKSx0LnZoKCkmJnQud2goKSYmKCFvJiYobz1uZXcgbmIoNCkpLHRoaXMudGsoKT9vLm5qKG5ldyBYXyh0LDIsdGhpcy5lLGYsbnVsbCkpOm8ubmoobmV3IFhfKHQsMSx0aGlzLmUsZixudWxsKSkpLG99LGguQms9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3JldHVybiBhPW4ubGkociksYSE9bnVsbH0saC5Daz1mdW5jdGlvbih0LG4scixhKXt2YXIgbyxmLGcsdyxFO2lmKGEhPW51bGwmJiF1bGUodGhpcy5hLGEpKXRocm93IHVlKG5ldyBrayhYRysoRGUoYSw1OCk/X3hlKGwoYSw1OCkuRGgoKSk6SzZlKGJoKGEpKSkrUUcrdGhpcy5hKyInIikpO0U9bi5saShyKSx3PUUhPW51bGwsdGhpcy50aygpJiZxZShFKT09PXFlKFNnKSYmKEU9bnVsbCksZz1udWxsLHRoaXMuTWooKT9xZShFKSE9PXFlKGEpJiYoRSE9bnVsbCYmKG89bChFLDU0KSxnPW8uVGgodCxtcyhvLkRoKCksdGhpcy5iKSxudWxsLGcpKSxhIT1udWxsJiYobz1sKGEsNTQpLGc9by5SaCh0LG1zKG8uRGgoKSx0aGlzLmIpLG51bGwsZykpKTp0aGlzLmFsKCkmJnFlKEUpIT09cWUoYSkmJihFIT1udWxsJiYoZz1sKEUsNTQpLlRoKHQsLTEtbXModC5EaCgpLHRoaXMuZSksbnVsbCxnKSksYSE9bnVsbCYmKGc9bChhLDU0KS5SaCh0LC0xLW1zKHQuRGgoKSx0aGlzLmUpLG51bGwsZykpKSxhPT1udWxsJiZ0aGlzLnRrKCk/bi5taShyLFNnKTpuLm1pKHIsYSksdC52aCgpJiZ0LndoKCk/KGY9bmV3IHJvZSh0LDEsdGhpcy5lLEUsYSx0aGlzLnRrKCkmJiF3KSxnPyhnLm5qKGYpLGcub2ooKSk6TmkodCxmKSk6ZyYmZy5vaigpfSxoLkVrPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvLGYsZyx3O3c9bi5saShyKSxnPXchPW51bGwsdGhpcy50aygpJiZxZSh3KT09PXFlKFNnKSYmKHc9bnVsbCksZj1udWxsLHchPW51bGwmJih0aGlzLk1qKCk/KGE9bCh3LDU0KSxmPWEuVGgodCxtcyhhLkRoKCksdGhpcy5iKSxudWxsLGYpKTp0aGlzLmFsKCkmJihmPWwodyw1NCkuVGgodCwtMS1tcyh0LkRoKCksdGhpcy5lKSxudWxsLGYpKSksbi5uaShyKSx0LnZoKCkmJnQud2goKT8obz1uZXcgcm9lKHQsdGhpcy50aygpPzI6MSx0aGlzLmUsdyxudWxsLGcpLGY/KGYubmoobyksZi5vaigpKTpOaSh0LG8pKTpmJiZmLm9qKCl9LGguTWo9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5hbD1mdW5jdGlvbigpe3JldHVybiExfSxoLmJsPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGgudGs9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3QiLDQxMCksRCg1NzUsNDEwLHt9LG9hZSksaC5hbD1mdW5jdGlvbigpe3JldHVybiEwfSxJKEduLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdENvbnRhaW5tZW50Iiw1NzUpLEQoMTM1OSw1NzUse30sd3J0KSxoLmJsPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0Q29udGFpbm1lbnRSZXNvbHZpbmciLDEzNTkpLEQoNzg3LDU3NSx7fSxqeWUpLGgudGs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RDb250YWlubWVudFVuc2V0dGFibGUiLDc4NyksRCgxMzYxLDc4Nyx7fSx5cnQpLGguYmw9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RDb250YWlubWVudFVuc2V0dGFibGVSZXNvbHZpbmciLDEzNjEpLEQoNjUwLDU3NSx7fSx5YWUpLGguTWo9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RDb250YWlubWVudFdpdGhJbnZlcnNlIiw2NTApLEQoMTM2MCw2NTAse30sRWl0KSxoLmJsPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0Q29udGFpbm1lbnRXaXRoSW52ZXJzZVJlc29sdmluZyIsMTM2MCksRCg3ODgsNjUwLHt9LEM0ZSksaC50az1mdW5jdGlvbigpe3JldHVybiEwfSxJKEduLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdENvbnRhaW5tZW50V2l0aEludmVyc2VVbnNldHRhYmxlIiw3ODgpLEQoMTM2Miw3ODgse30sVGl0KSxoLmJsPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0Q29udGFpbm1lbnRXaXRoSW52ZXJzZVVuc2V0dGFibGVSZXNvbHZpbmciLDEzNjIpLEQoNjUxLDQxMCx7fSwkeWUpLGguYmw9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RSZXNvbHZpbmciLDY1MSksRCgxMzYzLDY1MSx7fSx4cnQpLGgudGs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RSZXNvbHZpbmdVbnNldHRhYmxlIiwxMzYzKSxEKDc4OSw2NTEse30sRTRlKSxoLk1qPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0UmVzb2x2aW5nV2l0aEludmVyc2UiLDc4OSksRCgxMzY0LDc4OSx7fSxDaXQpLGgudGs9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RSZXNvbHZpbmdXaXRoSW52ZXJzZVVuc2V0dGFibGUiLDEzNjQpLEQoMTM1Nyw0MTAse30sa3J0KSxoLnRrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0VW5zZXR0YWJsZSIsMTM1NyksRCg3ODYsNDEwLHt9LFQ0ZSksaC5Naj1mdW5jdGlvbigpe3JldHVybiEwfSxJKEduLCJFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdFdpdGhJbnZlcnNlIiw3ODYpLEQoMTM1OCw3ODYse30sU2l0KSxoLnRrPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0V2l0aEludmVyc2VVbnNldHRhYmxlIiwxMzU4KSxEKDc5MCw1NzYsWUcseDVlKSxoLnlsPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgeDVlKHRoaXMuYSx0aGlzLmMsdCl9LGgubWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLnpsPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gYnZuKHRoaXMsdCx0aGlzLmIscil9LGguQWw9ZnVuY3Rpb24odCxuLHIpe3JldHVybiBtdm4odGhpcyx0LHRoaXMuYixyKX0sSShHbiwiRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnZlcnNlVXBkYXRpbmdGZWF0dXJlTWFwRW50cnkiLDc5MCksRCgxMzY1LDEsaTBlLHhRZSksaC5Gaz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hfSxoLlFqPWZ1bmN0aW9uKCl7cmV0dXJuIERlKHRoaXMuYSw5Nyk/bCh0aGlzLmEsOTcpLlFqKCk6IXRoaXMuYS5kYygpfSxoLldiPWZ1bmN0aW9uKHQpe3RoaXMuYS4kYigpLHRoaXMuYS5HYyhsKHQsMTUpKX0saC5Haz1mdW5jdGlvbigpe0RlKHRoaXMuYSw5Nyk/bCh0aGlzLmEsOTcpLkdrKCk6dGhpcy5hLiRiKCl9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvU2V0dGluZ01hbnkiLDEzNjUpLEQoMTM2Niw1NzYsWUcsV2N0KSxoLnhsPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbGFlKChHaSgpLFVNKSx0aGlzLmIucmkodGhpcy5hLHQpKX0saC5tZD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLnpsPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gcn0saC5BbD1mdW5jdGlvbih0LG4scil7cmV0dXJuIHJ9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvU2ltcGxlQ29udGVudEZlYXR1cmVNYXBFbnRyeSIsMTM2NiksRCg2NTIsNTc2LFlHLGxhZSksaC54bD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGxhZSh0aGlzLmMsdCl9LGgubWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLnpsPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gcn0saC5BbD1mdW5jdGlvbih0LG4scil7cmV0dXJuIHJ9LEkoR24sIkVTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvU2ltcGxlRmVhdHVyZU1hcEVudHJ5Iiw2NTIpLEQoNDAzLDUwNixCZCxYZCksaC5haj1mdW5jdGlvbih0KXtyZXR1cm4gV2UoVmYsUm4sMjksdCwwLDEpfSxoLllpPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEkoR24sIkVTdXBlckFkYXB0ZXIvMSIsNDAzKSxEKDQ1Nyw0NDgsezExMDoxLDk0OjEsOTM6MSwxNTU6MSwxOTc6MSw1ODoxLDExNDoxLDg1MDoxLDU0OjEsOTk6MSwxNTg6MSw0NTc6MSwxMTk6MSwxMjA6MX0sUFMpLGguTGg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBHXyh0aGlzLFdvLHRoaXMpKSx0aGlzLmF9cmV0dXJuIHNmKHRoaXMsdC15cigoVG4oKSxUMykpLE1uKChhPWwoS24odGhpcywxNiksMjkpLGF8fFQzKSx0KSxuLHIpfSxoLlVoPWZ1bmN0aW9uKHQsbixyKXt2YXIgYSxvO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLFRvKHRoaXMuQWIsdCxyKTtjYXNlIDI6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgR18odGhpcyxXbyx0aGlzKSksVG8odGhpcy5hLHQscil9cmV0dXJuIG89bChNbigoYT1sKEtuKHRoaXMsMTYpLDI5KSxhfHwoVG4oKSxUMykpLG4pLDY5KSxvLndrKCkuQWsodGhpcyxLdSh0aGlzKSxuLXlyKChUbigpLFQzKSksdCxyKX0saC5XaD1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuISF0aGlzLmEmJnRoaXMuYS5pIT0wfXJldHVybiBuZih0aGlzLHQteXIoKFRuKCksVDMpKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHxUMyksdCkpfSxoLmJpPWZ1bmN0aW9uKHQsbil7dmFyIHI7c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IG50KG1pLHRoaXMsMCwzKSksJHIodGhpcy5BYiksIXRoaXMuQWImJih0aGlzLkFiPW5ldyBudChtaSx0aGlzLDAsMykpLEFzKHRoaXMuQWIsbChuLDE2KSk7cmV0dXJuO2Nhc2UgMTpGdSh0aGlzLGVpKG4pKTtyZXR1cm47Y2FzZSAyOiF0aGlzLmEmJih0aGlzLmE9bmV3IEdfKHRoaXMsV28sdGhpcykpLCRyKHRoaXMuYSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgR18odGhpcyxXbyx0aGlzKSksQXModGhpcy5hLGwobiwxNikpO3JldHVybn11Zih0aGlzLHQteXIoKFRuKCksVDMpKSxNbigocj1sKEtuKHRoaXMsMTYpLDI5KSxyfHxUMyksdCksbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gVG4oKSxUM30saC5raT1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2godCl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgbnQobWksdGhpcywwLDMpKSwkcih0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOkZ1KHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjohdGhpcy5hJiYodGhpcy5hPW5ldyBHXyh0aGlzLFdvLHRoaXMpKSwkcih0aGlzLmEpO3JldHVybn1jZih0aGlzLHQteXIoKFRuKCksVDMpKSxNbigobj1sKEtuKHRoaXMsMTYpLDI5KSxufHxUMyksdCkpfSxJKEduLCJFVHlwZVBhcmFtZXRlckltcGwiLDQ1NyksRCg0NTgsODMsa2MsR18pLGguTmo9ZnVuY3Rpb24odCxuKXtyZXR1cm4gRHhuKHRoaXMsbCh0LDg5KSxuKX0saC5Paj1mdW5jdGlvbih0LG4pe3JldHVybiBJeG4odGhpcyxsKHQsODkpLG4pfSxJKEduLCJFVHlwZVBhcmFtZXRlckltcGwvMSIsNDU4KSxEKDY0Nyw0NSxtNixWaWUpLGguZWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFB6KHRoaXMpfSxJKEduLCJFVHlwZVBhcmFtZXRlckltcGwvMiIsNjQ3KSxEKDU3MCxxMSxUbCxQeiksaC5GYz1mdW5jdGlvbih0KXtyZXR1cm4gV3J0KHRoaXMsbCh0LDg5KSl9LGguR2M9ZnVuY3Rpb24odCl7dmFyIG4scixhO2ZvcihhPSExLHI9dC5LYygpO3IuT2IoKTspbj1sKHIuUGIoKSw4OSksa2kodGhpcy5hLG4sIiIpPT1udWxsJiYoYT0hMCk7cmV0dXJuIGF9LGguJGI9ZnVuY3Rpb24oKXtObCh0aGlzLmEpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBIdSh0aGlzLmEsdCl9LGguS2M9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdD1uZXcgcW0obmV3IFNyKHRoaXMuYSkuYSksbmV3IEJ6KHQpfSxoLk1jPWZ1bmN0aW9uKHQpe3JldHVybiBSdXQodGhpcyx0KX0saC5nYz1mdW5jdGlvbigpe3JldHVybiBkXyh0aGlzLmEpfSxJKEduLCJFVHlwZVBhcmFtZXRlckltcGwvMi8xIiw1NzApLEQoNTcxLDEsT2EsQnopLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5QYj1mdW5jdGlvbigpe3JldHVybiBsKE53KHRoaXMuYSkubGQoKSw4OSl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmJ9LGguUWI9ZnVuY3Rpb24oKXtLbHQodGhpcy5hKX0sSShHbiwiRVR5cGVQYXJhbWV0ZXJJbXBsLzIvMS8xIiw1NzEpLEQoMTMyOSw0NSxtNixoSmUpLGguX2I9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpP3NvZSh0aGlzLHQpOiEhem8odGhpcy5mLHQpfSxoLnhjPWZ1bmN0aW9uKHQpe3ZhciBuLHI7cmV0dXJuIG49SWEodCk/eHUodGhpcyx0KTpoYyh6byh0aGlzLmYsdCkpLERlKG4sODUxKT8ocj1sKG4sODUxKSxuPXIuS2soKSxraSh0aGlzLGwodCwyNDEpLG4pLG4pOm4/Pyh0PT1udWxsPyh1c2UoKSxaX3QpOm51bGwpfSxJKEduLCJFVmFsaWRhdG9yUmVnaXN0cnlJbXBsIiwxMzI5KSxEKDEzNDksNzIwLHsxMTA6MSw5NDoxLDkzOjEsNDgwOjEsMTU1OjEsNTg6MSwxMTQ6MSwyMDQwOjEsNTQ6MSw5OToxLDE1ODoxLDExOToxLDEyMDoxfSxkOCksaC5yaT1mdW5jdGlvbih0LG4pe3N3aXRjaCh0LmhrKCkpe2Nhc2UgMjE6Y2FzZSAyMjpjYXNlIDIzOmNhc2UgMjQ6Y2FzZSAyNjpjYXNlIDMxOmNhc2UgMzI6Y2FzZSAzNzpjYXNlIDM4OmNhc2UgMzk6Y2FzZSA0MDpjYXNlIDQzOmNhc2UgNDQ6Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgMjA6cmV0dXJuIG49PW51bGw/bnVsbDp4YyhuKTtjYXNlIDI1OnJldHVybiBBd24obik7Y2FzZSAyNzpyZXR1cm4gcXZuKG4pO2Nhc2UgMjg6cmV0dXJuIEh2bihuKTtjYXNlIDI5OnJldHVybiBuPT1udWxsP251bGw6Q250KGpNWzBdLGwobiwyMDYpKTtjYXNlIDQxOnJldHVybiBuPT1udWxsPyIiOl9tKGwobiwyOTcpKTtjYXNlIDQyOnJldHVybiB4YyhuKTtjYXNlIDUwOnJldHVybiBlaShuKTtkZWZhdWx0OnRocm93IHVlKG5ldyBZbih5VCt0LnhlKCkrdDMpKX19LGguc2k9ZnVuY3Rpb24odCl7dmFyIG4scixhLG8sZixnLHcsRSxDLEwsQix6LFYsSix0ZSxmZTtzd2l0Y2godC5HPT0tMSYmKHQuRz0oej1BaCh0KSx6P2YyKHoudmkoKSx0KTotMSkpLHQuRyl7Y2FzZSAwOnJldHVybiByPW5ldyB6aWUscjtjYXNlIDE6cmV0dXJuIG49bmV3IENJLG47Y2FzZSAyOnJldHVybiBhPW5ldyBoeixhO2Nhc2UgNDpyZXR1cm4gbz1uZXcgRnosbztjYXNlIDU6cmV0dXJuIGY9bmV3IGxKZSxmO2Nhc2UgNjpyZXR1cm4gZz1uZXcgUFFlLGc7Y2FzZSA3OnJldHVybiB3PW5ldyBmeix3O2Nhc2UgMTA6cmV0dXJuIEM9bmV3IG01LEM7Y2FzZSAxMTpyZXR1cm4gTD1uZXcgcWllLEw7Y2FzZSAxMjpyZXR1cm4gQj1uZXcgcWF0LEI7Y2FzZSAxMzpyZXR1cm4gVj1uZXcgSGllLFY7Y2FzZSAxNDpyZXR1cm4gSj1uZXcgSHllLEo7Y2FzZSAxNzpyZXR1cm4gdGU9bmV3IE9TLHRlO2Nhc2UgMTg6cmV0dXJuIEU9bmV3IFF2LEU7Y2FzZSAxOTpyZXR1cm4gZmU9bmV3IFBTLGZlO2RlZmF1bHQ6dGhyb3cgdWUobmV3IFluKHFmZSt0LnpiK3QzKSl9fSxoLnRpPWZ1bmN0aW9uKHQsbil7c3dpdGNoKHQuaGsoKSl7Y2FzZSAyMDpyZXR1cm4gbj09bnVsbD9udWxsOm5ldyBoM2Uobik7Y2FzZSAyMTpyZXR1cm4gbj09bnVsbD9udWxsOm5ldyBvYihuKTtjYXNlIDIzOmNhc2UgMjI6cmV0dXJuIG49PW51bGw/bnVsbDp6NW4obik7Y2FzZSAyNjpjYXNlIDI0OnJldHVybiBuPT1udWxsP251bGw6Zk4oT2gobiwtMTI4LDEyNyk8PDI0Pj4yNCk7Y2FzZSAyNTpyZXR1cm4gYVRuKG4pO2Nhc2UgMjc6cmV0dXJuIEE3bihuKTtjYXNlIDI4OnJldHVybiBMN24obik7Y2FzZSAyOTpyZXR1cm4gSnhuKG4pO2Nhc2UgMzI6Y2FzZSAzMTpyZXR1cm4gbj09bnVsbD9udWxsOmp5KG4pO2Nhc2UgMzg6Y2FzZSAzNzpyZXR1cm4gbj09bnVsbD9udWxsOm5ldyBBd2Uobik7Y2FzZSA0MDpjYXNlIDM5OnJldHVybiBuPT1udWxsP251bGw6cHQoT2gobixsbyxJaSkpO2Nhc2UgNDE6cmV0dXJuIG51bGw7Y2FzZSA0MjpyZXR1cm4gbj09bnVsbCxudWxsO2Nhc2UgNDQ6Y2FzZSA0MzpyZXR1cm4gbj09bnVsbD9udWxsOmFwKEtVKG4pKTtjYXNlIDQ5OmNhc2UgNDg6cmV0dXJuIG49PW51bGw/bnVsbDpfRShPaChuLEpHLDMyNzY3KTw8MTY+PjE2KTtjYXNlIDUwOnJldHVybiBuO2RlZmF1bHQ6dGhyb3cgdWUobmV3IFluKHlUK3QueGUoKSt0MykpfX0sSShHbiwiRWNvcmVGYWN0b3J5SW1wbCIsMTM0OSksRCg1NjAsMTg0LHsxMTA6MSw5NDoxLDkzOjEsMTU1OjEsMTk3OjEsNTg6MSwyNDE6MSwxMTQ6MSwyMDM4OjEsNTQ6MSw5OToxLDE1ODoxLDE4NDoxLDU2MDoxLDExOToxLDEyMDoxLDY5MDoxfSxmYXQpLGguZ2I9ITEsaC5oYj0hMTt2YXIgUlBlLEpfdD0hMTtJKEduLCJFY29yZVBhY2thZ2VJbXBsIiw1NjApLEQoMTIzNCwxLHs4NTE6MX0sazEpLGguS2s9ZnVuY3Rpb24oKXtyZXR1cm4gUm50KCksZUF0fSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzEiLDEyMzQpLEQoMTI0MywxLHlpLEEkKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE1NSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHVGLFJuLDE1NSx0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvMTAiLDEyNDMpLEQoMTI0NCwxLHlpLEwkKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE5Nyl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKFlnZSxSbiwxOTcsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzExIiwxMjQ0KSxEKDEyNDUsMSx5aSxNJCksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCw1OCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKFhiLFJuLDU4LHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC8xMiIsMTI0NSksRCgxMjQ2LDEseWksRCQpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsNDExKX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoVWYsTFNlLDYyLHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC8xMyIsMTI0NiksRCgxMjQ3LDEseWksSSQpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMjQxKX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UodTEsUm4sMjQxLHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC8xNCIsMTI0NyksRCgxMjQ4LDEseWksTyQpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsNTE4KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoazMsUm4sMjExNix0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvMTUiLDEyNDgpLEQoMTI0OSwxLHlpLFYwKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDEwMil9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKEk0LFM2LDE5LHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC8xNiIsMTI0OSksRCgxMjUwLDEseWksbmwpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMTc5KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoZGwsUzYsMTc5LHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC8xNyIsMTI1MCksRCgxMjUxLDEseWksc3JlKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDQ4MSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKE00LFJuLDQ4MSx0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvMTgiLDEyNTEpLEQoMTI1MiwxLHlpLGFyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCw1NjEpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShZYyxlNXQsNTYxLHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC8xOSIsMTI1MiksRCgxMjM1LDEseWksb3JlKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDMzMSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKEQ0LFM2LDM1LHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC8yIiwxMjM1KSxEKDEyNTMsMSx5aSxybCksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwyNDgpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShXbyxtNXQsODksdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzIwIiwxMjUzKSxEKDEyNTQsMSx5aSxCUyksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCw0NTcpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShadSxSbiw4NTAsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzIxIiwxMjU0KSxEKDEyNTUsMSx5aSxOJCksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gaHkodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKE5zLGR0LDQ4NSx0LDgsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvMjIiLDEyNTUpLEQoMTI1NiwxLHlpLFAkKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE5NSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKEFsLGR0LDE5NSx0LDAsMil9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvMjMiLDEyNTYpLEQoMTI1NywxLHlpLGc4KSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDIyMil9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKGp4LGR0LDIyMix0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvMjQiLDEyNTcpLEQoMTI1OCwxLHlpLGNyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxODApfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShQTCxkdCwxODAsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzI1IiwxMjU4KSxEKDEyNTksMSx5aSxhayksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwyMDYpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShjSyxkdCwyMDYsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzI2IiwxMjU5KSxEKDEyNjAsMSx5aSx1cmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuITF9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKG5CZSxSbiwyMjE1LHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC8yNyIsMTI2MCksRCgxMjYxLDEseWksQiQpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIGZ5KHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh0YSxkdCwzNDUsdCw3LDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzI4IiwxMjYxKSxEKDEyNjIsMSx5aSxscmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsNjEpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShtUGUsUXksNjEsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzI5IiwxMjYyKSxEKDEyMzYsMSx5aSxocmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsNTE5KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UobWksezM6MSw0OjEsNToxLDIwMzM6MX0sNTk4LHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC8zIiwxMjM2KSxEKDEyNjMsMSx5aSxGUyksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCw1ODIpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh5UGUsUm4sMjAzOSx0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvMzAiLDEyNjMpLEQoMTI2NCwxLHlpLEYkKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE2MCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKEhQZSxReSwxNjAsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzMxIiwxMjY0KSxEKDEyNjUsMSx5aSxNSSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCw3Nil9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKENZLFM1dCw3Nix0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvMzIiLDEyNjUpLEQoMTI2NiwxLHlpLFJTKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE2MSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKF9ULGR0LDE2MSx0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvMzMiLDEyNjYpLEQoMTI2NywxLHlpLGZyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNyl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHJvLGR0LDE3LHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC8zNCIsMTI2NyksRCgxMjY4LDEseWksZHJlKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDI5Nyl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHFTZSxSbiwyOTcsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzM1IiwxMjY4KSxEKDEyNjksMSx5aSxESSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNjgpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShyMyxkdCwxNjgsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzM2IiwxMjY5KSxEKDEyNzAsMSx5aSxqUyksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCw4NSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKEhTZSxSbiw4NSx0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvMzciLDEyNzApLEQoMTI3MSwxLHlpLEUxKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDU5OSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKGpQZSxSbiw1OTksdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzM4IiwxMjcxKSxEKDEyNzIsMSx5aSxvayksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4hMX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UockJlLFJuLDIyMTYsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzM5IiwxMjcyKSxEKDEyMzcsMSx5aSxncmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsOTApfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShWZixSbiwyOSx0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvNCIsMTIzNyksRCgxMjczLDEseWksY2spLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMTkxKX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoaTMsZHQsMTkxLHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC80MCIsMTI3MyksRCgxMjc0LDEseWksSUkpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC80MSIsMTI3NCksRCgxMjc1LDEseWkseG0pLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsNTk2KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2Uod1BlLFJuLDU5Nix0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvNDIiLDEyNzUpLEQoMTI3NiwxLHlpLCRTKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiExfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShpQmUsZHQsMjIxNyx0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvNDMiLDEyNzYpLEQoMTI3NywxLHlpLE9JKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDQ0KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UodXYsWFUsNDQsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzQ0IiwxMjc3KSxEKDEyMzgsMSx5aSxVMCksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNDIpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShsMSxSbiwxNDIsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzUiLDEyMzgpLEQoMTIzOSwxLHlpLHpTKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE1Nil9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHRwZSxSbiwxNTYsdCwwLDEpfSxJKEduLCJFY29yZVBhY2thZ2VJbXBsLzYiLDEyMzkpLEQoMTI0MCwxLHlpLFQxKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDQ2OSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKFRZLFJuLDY4NSx0LDAsMSl9LEkoR24sIkVjb3JlUGFja2FnZUltcGwvNyIsMTI0MCksRCgxMjQxLDEseWksQzEpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsNTgyKX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2Uod3AsUm4sNjk0LHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC84IiwxMjQxKSxEKDEyNDIsMSx5aSxwcmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsNDgwKX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoUk0sUm4sNDgwLHQsMCwxKX0sSShHbiwiRWNvcmVQYWNrYWdlSW1wbC85IiwxMjQyKSxEKDEwMzgsMjA4MCxaNHQsSUplKSxoLk1pPWZ1bmN0aW9uKHQsbil7YjRuKHRoaXMsbChuLDQyNCkpfSxoLlFpPWZ1bmN0aW9uKHQsbil7QXB0KHRoaXMsdCxsKG4sNDI0KSl9LEkoR24sIk1pbmltYWxFT2JqZWN0SW1wbC8xQXJyYXlEZWxlZ2F0aW5nQWRhcHRlckxpc3QiLDEwMzgpLEQoMTAzOSwxNTIsWVAsbmF0KSxoLmpqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5hfSxJKEduLCJNaW5pbWFsRU9iamVjdEltcGwvMUFycmF5RGVsZWdhdGluZ0FkYXB0ZXJMaXN0LzEiLDEwMzkpLEQoMTA2NywxMDY2LHt9LGJudCksSSgib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbiIsIkVjb3JlUGx1Z2luIiwxMDY3KTt2YXIgalBlPWtzKF81dCwiUmVzb3VyY2UiKTtEKDc5OSwxNTI0LEE1dCksaC5IbD1mdW5jdGlvbih0KXt9LGguSWw9ZnVuY3Rpb24odCl7fSxoLkVsPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgUGllKHRoaXMpKSx0aGlzLmF9LGguRmw9ZnVuY3Rpb24odCl7dmFyIG4scixhLG8sZjtpZihhPXQubGVuZ3RoLGE+MClpZihYbigwLHQubGVuZ3RoKSx0LmNoYXJDb2RlQXQoMCk9PTQ3KXtmb3IoZj1uZXcgQnUoNCksbz0xLG49MTtuPGE7KytuKVhuKG4sdC5sZW5ndGgpLHQuY2hhckNvZGVBdChuKT09NDcmJih2dChmLG89PW4/IiI6KEdhKG8sbix0Lmxlbmd0aCksdC5zdWJzdHIobyxuLW8pKSksbz1uKzEpO3JldHVybiB2dChmLChYbihvLHQubGVuZ3RoKzEpLHQuc3Vic3RyKG8pKSksdzhuKHRoaXMsZil9ZWxzZSBYbihhLTEsdC5sZW5ndGgpLHQuY2hhckNvZGVBdChhLTEpPT02MyYmKHI9aDRlKHQsY2woNjMpLGEtMikscj4wJiYodD0oR2EoMCxyLHQubGVuZ3RoKSx0LnN1YnN0cigwLHIpKSkpO3JldHVybiBVa24odGhpcyx0KX0saC5HbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGguSWI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gX20odGhpcy5SbSkrIkAiKyh0PWVzKHRoaXMpPj4+MCx0LnRvU3RyaW5nKDE2KSkrIiB1cmk9JyIrdGhpcy5kKyInIn0saC5iPSExLEkoczBlLCJSZXNvdXJjZUltcGwiLDc5OSksRCgxNTI1LDc5OSxBNXQsa1FlKSxJKHMwZSwiQmluYXJ5UmVzb3VyY2VJbXBsIiwxNTI1KSxEKDExOTAsNzA4LFpmZSksaC5iaj1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCw1OCk/QnBuKHRoaXMsbCh0LDU4KSk6RGUodCw1OTkpP25ldyBvcihsKHQsNTk5KS5FbCgpKTpxZSh0KT09PXFlKHRoaXMuZik/bCh0LDE2KS5LYygpOihGaygpLGZGLmEpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIHg5ZSh0aGlzKX0saC5hPSExLEkodXMsIkVjb3JlVXRpbC9Db250ZW50VHJlZUl0ZXJhdG9yIiwxMTkwKSxEKDE1MjYsMTE5MCxaZmUsSXN0KSxoLmJqPWZ1bmN0aW9uKHQpe3JldHVybiBxZSh0KT09PXFlKHRoaXMuZik/bCh0LDE1KS5LYygpOm5ldyBMY3QobCh0LDU4KSl9LEkoczBlLCJSZXNvdXJjZUltcGwvNSIsMTUyNiksRCg2NTgsMjA5MixiNXQsUGllKSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmk8PTQ/akUodGhpcyx0KTpEZSh0LDU0KSYmbCh0LDU0KS5KaCgpPT10aGlzLmF9LGguTWk9ZnVuY3Rpb24odCxuKXt0PT10aGlzLmktMSYmKHRoaXMuYS5ifHwodGhpcy5hLmI9ITApKX0saC5PaT1mdW5jdGlvbih0LG4pe3Q9PTA/dGhpcy5hLmJ8fCh0aGlzLmEuYj0hMCk6Tm9lKHRoaXMsdCxuKX0saC5RaT1mdW5jdGlvbih0LG4pe30saC5SaT1mdW5jdGlvbih0LG4scil7fSxoLkxqPWZ1bmN0aW9uKCl7cmV0dXJuIDJ9LGguamo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxoLk1qPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguTmo9ZnVuY3Rpb24odCxuKXt2YXIgcjtyZXR1cm4gcj1sKHQsNTQpLG49ci5maSh0aGlzLmEsbiksbn0saC5Paj1mdW5jdGlvbih0LG4pe3ZhciByO3JldHVybiByPWwodCw1NCksci5maShudWxsLG4pfSxoLlBqPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGguU2k9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5haj1mdW5jdGlvbih0KXtyZXR1cm4gV2UoWGIsUm4sNTgsdCwwLDEpfSxoLllpPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEkoczBlLCJSZXNvdXJjZUltcGwvQ29udGVudHNFTGlzdCIsNjU4KSxEKDk3MCwyMDYyLGlULEVRZSksaC5mZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hLktpKHQpfSxoLmdjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5nYygpfSxJKHVzLCJBYnN0cmFjdFNlcXVlbnRpYWxJbnRlcm5hbEVMaXN0LzEiLDk3MCk7dmFyICRQZSx6UGUsaW8scVBlO0QoNjM0LDEse30sTml0KTt2YXIgU1ksX1k7SSh1cywiQmFzaWNFeHRlbmRlZE1ldGFEYXRhIiw2MzQpLEQoMTE4MSwxLHt9LEJ0dCksaC5KbD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLktsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYT09LTImJlllKHRoaXMsVXhuKHRoaXMuZCx0aGlzLmIpKSx0aGlzLmF9LGguTGw9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0saC5NbD1mdW5jdGlvbigpe3JldHVybiBDbigpLENuKCksX299LGgueGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jPT1FVCYmbXQodGhpcyxKMXQodGhpcy5kLHRoaXMuYikpLHRoaXMuY30saC5ObD1mdW5jdGlvbigpe3JldHVybiAwfSxoLmE9LTIsaC5jPUVULEkodXMsIkJhc2ljRXh0ZW5kZWRNZXRhRGF0YS9FQ2xhc3NFeHRlbmRlZE1ldGFEYXRhSW1wbCIsMTE4MSksRCgxMTgyLDEse30sc2N0KSxoLkpsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYT09KGVFKCksU1kpJiZNdCh0aGlzLFZTbih0aGlzLmYsdGhpcy5iKSksdGhpcy5hfSxoLktsPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGguTGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jPT0oZUUoKSxTWSkmJkplKHRoaXMsVVNuKHRoaXMuZix0aGlzLmIpKSx0aGlzLmN9LGguTWw9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5kJiZXdCh0aGlzLExBbih0aGlzLmYsdGhpcy5iKSksdGhpcy5kfSxoLnhlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZT09RVQmJl9uKHRoaXMsSjF0KHRoaXMuZix0aGlzLmIpKSx0aGlzLmV9LGguTmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nPT0tMiYmWXQodGhpcyxseG4odGhpcy5mLHRoaXMuYikpLHRoaXMuZ30saC5lPUVULGguZz0tMixJKHVzLCJCYXNpY0V4dGVuZGVkTWV0YURhdGEvRURhdGFUeXBlRXh0ZW5kZWRNZXRhRGF0YUltcGwiLDExODIpLEQoMTE4MCwxLHt9LEZ0dCksaC5iPSExLGguYz0hMSxJKHVzLCJCYXNpY0V4dGVuZGVkTWV0YURhdGEvRVBhY2thZ2VFeHRlbmRlZE1ldGFEYXRhSW1wbCIsMTE4MCksRCgxMTgzLDEse30sYWN0KSxoLmM9LTIsaC5lPUVULGguZj1FVCxJKHVzLCJCYXNpY0V4dGVuZGVkTWV0YURhdGEvRVN0cnVjdHVyYWxGZWF0dXJlRXh0ZW5kZWRNZXRhRGF0YUltcGwiLDExODMpLEQoNTkzLDYzMixrYyxKcSksaC5Maj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN9LGgub2w9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5XaT1mdW5jdGlvbih0LG4pe3JldHVybiBufSxoLmM9MCxJKHVzLCJFRGF0YVR5cGVFTGlzdCIsNTkzKTt2YXIgSFBlPWtzKHVzLCJGZWF0dXJlTWFwIik7RCg3OCw1OTMsezM6MSw0OjEsMjA6MSwzMToxLDU2OjEsMTY6MSwxNToxLDU5OjEsNzA6MSw2NjoxLDYxOjEsNzk6MSwxNjA6MSwyMjA6MSwyMDM2OjEsNzE6MSw5NzoxfSxMcyksaC5iZD1mdW5jdGlvbih0LG4pe3VDbih0aGlzLHQsbChuLDc2KSl9LGguRmM9ZnVuY3Rpb24odCl7cmV0dXJuIF9Ubih0aGlzLGwodCw3NikpfSxoLkhpPWZ1bmN0aW9uKHQpe09nbih0aGlzLGwodCw3NikpfSxoLk5qPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUwbih0aGlzLGwodCw3Niksbil9LGguT2o9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZDRlKHRoaXMsbCh0LDc2KSxuKX0saC5UaT1mdW5jdGlvbih0LG4pe3JldHVybiBQX24odGhpcyx0LG4pfSxoLldpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHhNbih0aGlzLHQsbChuLDc2KSl9LGguaGQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gWENuKHRoaXMsdCxsKG4sNzYpKX0saC5Vaj1mdW5jdGlvbih0LG4pe3JldHVybiB0MG4odGhpcyxsKHQsNzYpLG4pfSxoLlZqPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHVpdCh0aGlzLGwodCw3Niksbil9LGguV2o9ZnVuY3Rpb24odCxuLHIpe3JldHVybiBROG4odGhpcyxsKHQsNzYpLGwobiw3Nikscil9LGguWmk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gQXVlKHRoaXMsdCxsKG4sNzYpKX0saC5PbD1mdW5jdGlvbih0LG4pe3JldHVybiBma2UodGhpcyx0LG4pfSxoLmNkPWZ1bmN0aW9uKHQsbil7dmFyIHIsYSxvLGYsZyx3LEUsQyxMO2ZvcihDPW5ldyBMdyhuLmdjKCkpLG89bi5LYygpO28uT2IoKTspaWYoYT1sKG8uUGIoKSw3NiksZj1hLkxrKCksdXAodGhpcy5lLGYpKSghZi5TaSgpfHwhcUgodGhpcyxmLGEubWQoKSkmJiFqRShDLGEpKSYmcXIoQyxhKTtlbHNle2ZvcihMPVd1KHRoaXMuZS5EaCgpLGYpLHI9bCh0aGlzLmcsMTI0KSxnPSEwLHc9MDt3PHRoaXMuaTsrK3cpaWYoRT1yW3ddLEwuYW0oRS5MaygpKSl7bChuNih0aGlzLHcsYSksNzYpLGc9ITE7YnJlYWt9ZyYmcXIoQyxhKX1yZXR1cm4gTjdlKHRoaXMsdCxDKX0saC5HYz1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmLGcsdyxFLEM7Zm9yKEU9bmV3IEx3KHQuZ2MoKSksYT10LktjKCk7YS5PYigpOylpZihyPWwoYS5QYigpLDc2KSxvPXIuTGsoKSx1cCh0aGlzLmUsbykpKCFvLlNpKCl8fCFxSCh0aGlzLG8sci5tZCgpKSYmIWpFKEUscikpJiZxcihFLHIpO2Vsc2V7Zm9yKEM9V3UodGhpcy5lLkRoKCksbyksbj1sKHRoaXMuZywxMjQpLGY9ITAsZz0wO2c8dGhpcy5pOysrZylpZih3PW5bZ10sQy5hbSh3LkxrKCkpKXtsKG42KHRoaXMsZyxyKSw3NiksZj0hMTticmVha31mJiZxcihFLHIpfXJldHVybiBBcyh0aGlzLEUpfSxoLkZpPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmo9LTEsbGxlKHRoaXMsdGhpcy5pLHQpfSxoLlBsPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gaWtlKHRoaXMsdCxuLHIpfSxoLlhrPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGhQKHRoaXMsdCxuKX0saC5RbD1mdW5jdGlvbih0LG4scil7cmV0dXJuIE1rZSh0aGlzLHQsbixyKX0saC5SbD1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxoLlNsPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHBQKHRoaXMsdCxuKX0saC5UbD1mdW5jdGlvbih0KXtyZXR1cm4gbChPZSh0aGlzLHQpLDc2KS5MaygpfSxoLlVsPWZ1bmN0aW9uKHQpe3JldHVybiBsKE9lKHRoaXMsdCksNzYpLm1kKCl9LGguVmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLk1qPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguVGo9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5XbD1mdW5jdGlvbih0KXtyZXR1cm4hRk4odGhpcyx0KX0saC5haj1mdW5jdGlvbih0KXtyZXR1cm4gV2UoUV90LFM1dCwzNDMsdCwwLDEpfSxoLnBsPWZ1bmN0aW9uKHQpe3JldHVybiBjYWUodGhpcyx0KX0saC5XYj1mdW5jdGlvbih0KXskTyh0aGlzLHQpfSxoLlhsPWZ1bmN0aW9uKHQsbil7SFUodGhpcyx0LG4pfSxoLllsPWZ1bmN0aW9uKHQpe3JldHVybiBvZnQodGhpcyx0KX0saC5abD1mdW5jdGlvbih0KXtqZHQodGhpcyx0KX0sSSh1cywiQmFzaWNGZWF0dXJlTWFwIiw3OCksRCgxOTYwLDEsbGcpLGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5SYj1mdW5jdGlvbih0KXtpZih0aGlzLmc9PS0xKXRocm93IHVlKG5ldyBwbCk7ZEgodGhpcyk7dHJ5e3ZidCh0aGlzLmUsdGhpcy5iLHRoaXMuYSx0KSx0aGlzLmQ9dGhpcy5lLmosaVUodGhpcyl9Y2F0Y2gobil7dGhyb3cgbj1icyhuKSxEZShuLDc3KT91ZShuZXcgWGgpOnVlKG4pfX0saC5PYj1mdW5jdGlvbigpe3JldHVybiBfY2UodGhpcyl9LGguU2I9ZnVuY3Rpb24oKXtyZXR1cm4gTzB0KHRoaXMpfSxoLlBiPWZ1bmN0aW9uKCl7cmV0dXJuIGlVKHRoaXMpfSxoLlRiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5VYj1mdW5jdGlvbigpe3ZhciB0O2lmKE8wdCh0aGlzKSlyZXR1cm4gZEgodGhpcyksdGhpcy5nPS0tdGhpcy5hLHRoaXMudWwoKSYmKHQ9ekEodGhpcy5lLHRoaXMuYix0aGlzLmMsdGhpcy5hLHRoaXMuaiksdGhpcy5qPXQpLHRoaXMuaT0wLHRoaXMuajt0aHJvdyB1ZShuZXcgX2MpfSxoLlZiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS0xfSxoLlFiPWZ1bmN0aW9uKCl7aWYodGhpcy5nPT0tMSl0aHJvdyB1ZShuZXcgcGwpO2RIKHRoaXMpO3RyeXtocHQodGhpcy5lLHRoaXMuYix0aGlzLmcpLHRoaXMuZD10aGlzLmUuaix0aGlzLmc8dGhpcy5hJiYoLS10aGlzLmEsLS10aGlzLmMpLC0tdGhpcy5nfWNhdGNoKHQpe3Rocm93IHQ9YnModCksRGUodCw3Nyk/dWUobmV3IFhoKTp1ZSh0KX19LGgudWw9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5XYj1mdW5jdGlvbih0KXtpZih0aGlzLmc9PS0xKXRocm93IHVlKG5ldyBwbCk7ZEgodGhpcyk7dHJ5e3FtdCh0aGlzLmUsdGhpcy5iLHRoaXMuZyx0KSx0aGlzLmQ9dGhpcy5lLmp9Y2F0Y2gobil7dGhyb3cgbj1icyhuKSxEZShuLDc3KT91ZShuZXcgWGgpOnVlKG4pfX0saC5hPTAsaC5jPTAsaC5kPTAsaC5mPSExLGguZz0wLGguaT0wLEkodXMsIkZlYXR1cmVNYXBVdGlsL0Jhc2ljRmVhdHVyZUVJdGVyYXRvciIsMTk2MCksRCg0MjAsMTk2MCxsZyxtRSksaC4kbD1mdW5jdGlvbigpe3ZhciB0LG4scjtmb3Iocj10aGlzLmUuaSx0PWwodGhpcy5lLmcsMTI0KTt0aGlzLmM8cjspe2lmKG49dFt0aGlzLmNdLHRoaXMuay5hbShuLkxrKCkpKXJldHVybiB0aGlzLmo9dGhpcy5mP246bi5tZCgpLHRoaXMuaT0yLCEwOysrdGhpcy5jfXJldHVybiB0aGlzLmk9MSx0aGlzLmc9LTEsITF9LGguX2w9ZnVuY3Rpb24oKXt2YXIgdCxuO2Zvcih0PWwodGhpcy5lLmcsMTI0KTstLXRoaXMuYz49MDspaWYobj10W3RoaXMuY10sdGhpcy5rLmFtKG4uTGsoKSkpcmV0dXJuIHRoaXMuaj10aGlzLmY/bjpuLm1kKCksdGhpcy5pPS0yLCEwO3JldHVybiB0aGlzLmk9LTEsdGhpcy5nPS0xLCExfSxJKHVzLCJCYXNpY0ZlYXR1cmVNYXAvRmVhdHVyZUVJdGVyYXRvciIsNDIwKSxEKDY3Niw0MjAsbGcsVXNlKSxoLnVsPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkodXMsIkJhc2ljRmVhdHVyZU1hcC9SZXNvbHZpbmdGZWF0dXJlRUl0ZXJhdG9yIiw2NzYpLEQoOTY4LDQ5NixLRyxTbnQpLGgucGo9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sSSh1cywiRUNvbnRlbnRzRUxpc3QvMSIsOTY4KSxEKDk2OSw0OTYsS0csWHR0KSxoLnVsPWZ1bmN0aW9uKCl7cmV0dXJuITF9LEkodXMsIkVDb250ZW50c0VMaXN0LzIiLDk2OSksRCg5NjcsMjg3LFdHLF9udCksaC53bD1mdW5jdGlvbih0KXt9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5TYj1mdW5jdGlvbigpe3JldHVybiExfSxJKHVzLCJFQ29udGVudHNFTGlzdC9GZWF0dXJlSXRlcmF0b3JJbXBsLzEiLDk2NyksRCg4NDAsNTkzLGtjLHl5ZSksaC5OaT1mdW5jdGlvbigpe3RoaXMuYT0hMH0saC5Raj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguR2s9ZnVuY3Rpb24oKXt2YXIgdDskcih0aGlzKSxoaCh0aGlzLmUpPyh0PXRoaXMuYSx0aGlzLmE9ITEsTmkodGhpcy5lLG5ldyBoMCh0aGlzLmUsMix0aGlzLmMsdCwhMSkpKTp0aGlzLmE9ITF9LGguYT0hMSxJKHVzLCJFRGF0YVR5cGVFTGlzdC9VbnNldHRhYmxlIiw4NDApLEQoMTk1OCw1OTMsa2MsTm50KSxoLlNpPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkodXMsIkVEYXRhVHlwZVVuaXF1ZUVMaXN0IiwxOTU4KSxEKDE5NTksODQwLGtjLFBudCksaC5TaT1mdW5jdGlvbigpe3JldHVybiEwfSxJKHVzLCJFRGF0YVR5cGVVbmlxdWVFTGlzdC9VbnNldHRhYmxlIiwxOTU5KSxEKDE0Nyw4MyxrYyxtbCksaC5ubD1mdW5jdGlvbigpe3JldHVybiEwfSxoLldpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEV4KHRoaXMsdCxsKG4sNTgpKX0sSSh1cywiRU9iamVjdENvbnRhaW5tZW50RUxpc3QvUmVzb2x2aW5nIiwxNDcpLEQoMTE4NCw1NTUsa2MsQm50KSxoLm5sPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguV2k9ZnVuY3Rpb24odCxuKXtyZXR1cm4gRXgodGhpcyx0LGwobiw1OCkpfSxJKHVzLCJFT2JqZWN0Q29udGFpbm1lbnRFTGlzdC9VbnNldHRhYmxlL1Jlc29sdmluZyIsMTE4NCksRCg3NjYsMTQsa2MsYTRlKSxoLk5pPWZ1bmN0aW9uKCl7dGhpcy5hPSEwfSxoLlFqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5Haz1mdW5jdGlvbigpe3ZhciB0OyRyKHRoaXMpLGhoKHRoaXMuZSk/KHQ9dGhpcy5hLHRoaXMuYT0hMSxOaSh0aGlzLmUsbmV3IGgwKHRoaXMuZSwyLHRoaXMuYyx0LCExKSkpOnRoaXMuYT0hMX0saC5hPSExLEkodXMsIkVPYmplY3RDb250YWlubWVudFdpdGhJbnZlcnNlRUxpc3QvVW5zZXR0YWJsZSIsNzY2KSxEKDEyMjIsNzY2LGtjLFlydCksaC5ubD1mdW5jdGlvbigpe3JldHVybiEwfSxoLldpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEV4KHRoaXMsdCxsKG4sNTgpKX0sSSh1cywiRU9iamVjdENvbnRhaW5tZW50V2l0aEludmVyc2VFTGlzdC9VbnNldHRhYmxlL1Jlc29sdmluZyIsMTIyMiksRCg3NTcsNTA1LGtjLHh5ZSksaC5OaT1mdW5jdGlvbigpe3RoaXMuYT0hMH0saC5Raj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF9LGguR2s9ZnVuY3Rpb24oKXt2YXIgdDskcih0aGlzKSxoaCh0aGlzLmUpPyh0PXRoaXMuYSx0aGlzLmE9ITEsTmkodGhpcy5lLG5ldyBoMCh0aGlzLmUsMix0aGlzLmMsdCwhMSkpKTp0aGlzLmE9ITF9LGguYT0hMSxJKHVzLCJFT2JqZWN0RUxpc3QvVW5zZXR0YWJsZSIsNzU3KSxEKDMzOCw1MDUsa2MsJDUpLGgubmw9ZnVuY3Rpb24oKXtyZXR1cm4hMH0saC5XaT1mdW5jdGlvbih0LG4pe3JldHVybiBFeCh0aGlzLHQsbChuLDU4KSl9LEkodXMsIkVPYmplY3RSZXNvbHZpbmdFTGlzdCIsMzM4KSxEKDE4NDQsNzU3LGtjLEZudCksaC5ubD1mdW5jdGlvbigpe3JldHVybiEwfSxoLldpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEV4KHRoaXMsdCxsKG4sNTgpKX0sSSh1cywiRU9iamVjdFJlc29sdmluZ0VMaXN0L1Vuc2V0dGFibGUiLDE4NDQpLEQoMTUyNywxLHt9LGJyZSk7dmFyIFpfdDtJKHVzLCJFT2JqZWN0VmFsaWRhdG9yIiwxNTI3KSxEKDU1OSw1MDUsa2MscEgpLGguaWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSxoLmpsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn0saC5Naj1mdW5jdGlvbigpe3JldHVybiEwfSxoLm1sPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguYj0wLEkodXMsIkVPYmplY3RXaXRoSW52ZXJzZUVMaXN0Iiw1NTkpLEQoMTIyNSw1NTksa2MsWHJ0KSxoLmxsPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkodXMsIkVPYmplY3RXaXRoSW52ZXJzZUVMaXN0L01hbnlJbnZlcnNlIiwxMjI1KSxEKDYzNSw1NTksa2MsZmFlKSxoLk5pPWZ1bmN0aW9uKCl7dGhpcy5hPSEwfSxoLlFqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5Haz1mdW5jdGlvbigpe3ZhciB0OyRyKHRoaXMpLGhoKHRoaXMuZSk/KHQ9dGhpcy5hLHRoaXMuYT0hMSxOaSh0aGlzLmUsbmV3IGgwKHRoaXMuZSwyLHRoaXMuYyx0LCExKSkpOnRoaXMuYT0hMX0saC5hPSExLEkodXMsIkVPYmplY3RXaXRoSW52ZXJzZUVMaXN0L1Vuc2V0dGFibGUiLDYzNSksRCgxMjI0LDYzNSxrYyxRcnQpLGgubGw9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSSh1cywiRU9iamVjdFdpdGhJbnZlcnNlRUxpc3QvVW5zZXR0YWJsZS9NYW55SW52ZXJzZSIsMTIyNCksRCg3NjcsNTU5LGtjLG80ZSksaC5ubD1mdW5jdGlvbigpe3JldHVybiEwfSxoLldpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIEV4KHRoaXMsdCxsKG4sNTgpKX0sSSh1cywiRU9iamVjdFdpdGhJbnZlcnNlUmVzb2x2aW5nRUxpc3QiLDc2NyksRCgzMiw3Njcsa2MsTG4pLGgubGw9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sSSh1cywiRU9iamVjdFdpdGhJbnZlcnNlUmVzb2x2aW5nRUxpc3QvTWFueUludmVyc2UiLDMyKSxEKDc2OCw2MzUsa2MsYzRlKSxoLm5sPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGguV2k9ZnVuY3Rpb24odCxuKXtyZXR1cm4gRXgodGhpcyx0LGwobiw1OCkpfSxJKHVzLCJFT2JqZWN0V2l0aEludmVyc2VSZXNvbHZpbmdFTGlzdC9VbnNldHRhYmxlIiw3NjgpLEQoMTIyMyw3Njgsa2MsSnJ0KSxoLmxsPWZ1bmN0aW9uKCl7cmV0dXJuITB9LEkodXMsIkVPYmplY3RXaXRoSW52ZXJzZVJlc29sdmluZ0VMaXN0L1Vuc2V0dGFibGUvTWFueUludmVyc2UiLDEyMjMpLEQoMTE4NSw2MzIsa2MpLGguTGk9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5iJjE3OTIpPT0wfSxoLk5pPWZ1bmN0aW9uKCl7dGhpcy5ifD0xfSxoLmtsPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuYiY0KSE9MH0saC5Naj1mdW5jdGlvbigpe3JldHVybih0aGlzLmImNDApIT0wfSxoLmxsPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuYiYxNikhPTB9LGgubWw9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5iJjgpIT0wfSxoLm5sPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuYiZyNCkhPTB9LGguYWw9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5iJjMyKSE9MH0saC5vbD1mdW5jdGlvbigpe3JldHVybih0aGlzLmImbTApIT0wfSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmQ/UmN0KHRoaXMuZCx0KTp0aGlzLkxrKCkuSGsoKS5mayh0KX0saC5Raj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmImMj8odGhpcy5iJjEpIT0wOnRoaXMuaSE9MH0saC5TaT1mdW5jdGlvbigpe3JldHVybih0aGlzLmImMTI4KSE9MH0saC5Haz1mdW5jdGlvbigpe3ZhciB0OyRyKHRoaXMpLHRoaXMuYiYyJiYoaGgodGhpcy5lKT8odD0odGhpcy5iJjEpIT0wLHRoaXMuYiY9LTIseGsodGhpcyxuZXcgaDAodGhpcy5lLDIsbXModGhpcy5lLkRoKCksdGhpcy5MaygpKSx0LCExKSkpOnRoaXMuYiY9LTIpfSxoLllpPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuYiYxNTM2KT09MH0saC5iPTAsSSh1cywiRWNvcmVFTGlzdC9HZW5lcmljIiwxMTg1KSxEKDExODYsMTE4NSxrYyxWYXQpLGguTGs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfSxJKHVzLCJFY29yZUVMaXN0L0R5bmFtaWMiLDExODYpLEQoNzY1LDY2LEJkLGt3ZSksaC5haj1mdW5jdGlvbih0KXtyZXR1cm4gYk4odGhpcy5hLmEsdCl9LEkodXMsIkVjb3JlRU1hcC8xIiw3NjUpLEQoNzY0LDgzLGtjLGE1ZSksaC5NaT1mdW5jdGlvbih0LG4pe29VKHRoaXMuYixsKG4sMTM2KSl9LGguT2k9ZnVuY3Rpb24odCxuKXt6ZnQodGhpcy5iKX0saC5QaT1mdW5jdGlvbih0LG4scil7dmFyIGE7KysoYT10aGlzLmIsbChuLDEzNiksYSkuZX0saC5RaT1mdW5jdGlvbih0LG4pe0ZjZSh0aGlzLmIsbChuLDEzNikpfSxoLlJpPWZ1bmN0aW9uKHQsbixyKXtGY2UodGhpcy5iLGwociwxMzYpKSxxZShyKT09PXFlKG4pJiZsKHIsMTM2KS5DaShKbG4obChuLDEzNikubGQoKSkpLG9VKHRoaXMuYixsKG4sMTM2KSl9LEkodXMsIkVjb3JlRU1hcC9EZWxlZ2F0ZUVPYmplY3RDb250YWlubWVudEVMaXN0Iiw3NjQpLEQoMTIyMCwxNDEsQVNlLGlmdCksSSh1cywiRWNvcmVFTWFwL1Vuc2V0dGFibGUiLDEyMjApLEQoMTIyMSw3NjQsa2MsWnJ0KSxoLk5pPWZ1bmN0aW9uKCl7dGhpcy5hPSEwfSxoLlFqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5Haz1mdW5jdGlvbigpe3ZhciB0OyRyKHRoaXMpLGhoKHRoaXMuZSk/KHQ9dGhpcy5hLHRoaXMuYT0hMSxOaSh0aGlzLmUsbmV3IGgwKHRoaXMuZSwyLHRoaXMuYyx0LCExKSkpOnRoaXMuYT0hMX0saC5hPSExLEkodXMsIkVjb3JlRU1hcC9VbnNldHRhYmxlL1Vuc2V0dGFibGVEZWxlZ2F0ZUVPYmplY3RDb250YWlubWVudEVMaXN0IiwxMjIxKSxEKDExODksMjE1LG02LFVzdCksaC5hPSExLGguYj0hMSxJKHVzLCJFY29yZVV0aWwvQ29waWVyIiwxMTg5KSxEKDc1OSwxLE9hLExjdCksaC5OYj1mdW5jdGlvbih0KXtaYSh0aGlzLHQpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuIEYxdCh0aGlzKX0saC5QYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiBGMXQodGhpcyksdD10aGlzLmIsdGhpcy5iPW51bGwsdH0saC5RYj1mdW5jdGlvbigpe3RoaXMuYS5RYigpfSxJKHVzLCJFY29yZVV0aWwvUHJvcGVyQ29udGVudEl0ZXJhdG9yIiw3NTkpLEQoMTUyOCwxNTI3LHt9LGR6KTt2YXIgZUF0O0kodXMsIkVjb3JlVmFsaWRhdG9yIiwxNTI4KTt2YXIgdEF0O2tzKHVzLCJGZWF0dXJlTWFwVXRpbC9WYWxpZGF0b3IiKSxEKDEyOTUsMSx7MjA0MToxfSx2NSksaC5hbT1mdW5jdGlvbih0KXtyZXR1cm4hMH0sSSh1cywiRmVhdHVyZU1hcFV0aWwvMSIsMTI5NSksRCg3NzMsMSx7MjA0MToxfSxxa2UpLGguYW09ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIHRoaXMuYz09dD8hMDoobj1CdChjcih0aGlzLmEsdCkpLG49PW51bGw/UVNuKHRoaXMsdCk/KEx1dCh0aGlzLmEsdCwoSG4oKSxTVCkpLCEwKTooTHV0KHRoaXMuYSx0LChIbigpLFBiKSksITEpOm49PShIbigpLFNUKSl9LGguZT0hMTt2YXIgc3BlO0kodXMsIkZlYXR1cmVNYXBVdGlsL0Jhc2ljVmFsaWRhdG9yIiw3NzMpLEQoNzc0LDQ1LG02LHZ5ZSksSSh1cywiRmVhdHVyZU1hcFV0aWwvQmFzaWNWYWxpZGF0b3IvQ2FjaGUiLDc3NCksRCg1MDksNTYsezIwOjEsMzE6MSw1NjoxLDE2OjEsMTU6MSw2MToxLDc5OjEsNzE6MSw5NzoxfSx5TyksaC5iZD1mdW5jdGlvbih0LG4pe3ZidCh0aGlzLmMsdGhpcy5iLHQsbil9LGguRmM9ZnVuY3Rpb24odCl7cmV0dXJuIGZrZSh0aGlzLmMsdGhpcy5iLHQpfSxoLmNkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHZMbih0aGlzLmMsdGhpcy5iLHQsbil9LGguR2M9ZnVuY3Rpb24odCl7cmV0dXJuIEZfKHRoaXMsdCl9LGguR2k9ZnVuY3Rpb24odCxuKXtkd24odGhpcy5jLHRoaXMuYix0LG4pfSxoLldrPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGlrZSh0aGlzLmMsdGhpcy5iLHQsbil9LGguJGk9ZnVuY3Rpb24odCl7cmV0dXJuIHFVKHRoaXMuYyx0aGlzLmIsdCwhMSl9LGguSWk9ZnVuY3Rpb24oKXtyZXR1cm4gY250KHRoaXMuYyx0aGlzLmIpfSxoLkppPWZ1bmN0aW9uKCl7cmV0dXJuIGpsbih0aGlzLmMsdGhpcy5iKX0saC5LaT1mdW5jdGlvbih0KXtyZXR1cm4gdnZuKHRoaXMuYyx0aGlzLmIsdCl9LGguWGs9ZnVuY3Rpb24odCxuKXtyZXR1cm4gSXJ0KHRoaXMsdCxuKX0saC4kYj1mdW5jdGlvbigpe184KHRoaXMpfSxoLkhjPWZ1bmN0aW9uKHQpe3JldHVybiBxSCh0aGlzLmMsdGhpcy5iLHQpfSxoLkljPWZ1bmN0aW9uKHQpe3JldHVybiBtM24odGhpcy5jLHRoaXMuYix0KX0saC5YYj1mdW5jdGlvbih0KXtyZXR1cm4gcVUodGhpcy5jLHRoaXMuYix0LCEwKX0saC5Gaz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpc30saC5kZD1mdW5jdGlvbih0KXtyZXR1cm4gQ21uKHRoaXMuYyx0aGlzLmIsdCl9LGguZGM9ZnVuY3Rpb24oKXtyZXR1cm4gX3EodGhpcyl9LGguUWo9ZnVuY3Rpb24oKXtyZXR1cm4hRk4odGhpcy5jLHRoaXMuYil9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4gcnduKHRoaXMuYyx0aGlzLmIpfSxoLmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGl3bih0aGlzLmMsdGhpcy5iKX0saC5mZD1mdW5jdGlvbih0KXtyZXR1cm4gUDRuKHRoaXMuYyx0aGlzLmIsdCl9LGguVGk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gT210KHRoaXMuYyx0aGlzLmIsdCxuKX0saC5VaT1mdW5jdGlvbih0LG4pe3h2bih0aGlzLmMsdGhpcy5iLHQsbil9LGguZ2Q9ZnVuY3Rpb24odCl7cmV0dXJuIGhwdCh0aGlzLmMsdGhpcy5iLHQpfSxoLk1jPWZ1bmN0aW9uKHQpe3JldHVybiB5X24odGhpcy5jLHRoaXMuYix0KX0saC5oZD1mdW5jdGlvbih0LG4pe3JldHVybiBxbXQodGhpcy5jLHRoaXMuYix0LG4pfSxoLldiPWZ1bmN0aW9uKHQpe0VVKHRoaXMuYyx0aGlzLmIpLEZfKHRoaXMsbCh0LDE1KSl9LGguZ2M9ZnVuY3Rpb24oKXtyZXR1cm4gTjRuKHRoaXMuYyx0aGlzLmIpfSxoLlBjPWZ1bmN0aW9uKCl7cmV0dXJuIF9ibih0aGlzLmMsdGhpcy5iKX0saC5RYz1mdW5jdGlvbih0KXtyZXR1cm4gU21uKHRoaXMuYyx0aGlzLmIsdCl9LGguSWI9ZnVuY3Rpb24oKXt2YXIgdCxuO2ZvcihuPW5ldyBVcCxuLmErPSJbIix0PWNudCh0aGlzLmMsdGhpcy5iKTtfY2UodCk7KVhvKG4sal8oaVUodCkpKSxfY2UodCkmJihuLmErPUNvKTtyZXR1cm4gbi5hKz0iXSIsbi5hfSxoLkdrPWZ1bmN0aW9uKCl7RVUodGhpcy5jLHRoaXMuYil9LEkodXMsIkZlYXR1cmVNYXBVdGlsL0ZlYXR1cmVFTGlzdCIsNTA5KSxEKDY0NCwzOSxZUCxFb2UpLGguaGo9ZnVuY3Rpb24odCl7cmV0dXJuIFNBKHRoaXMsdCl9LGgubWo9ZnVuY3Rpb24odCl7dmFyIG4scixhLG8sZixnLHc7c3dpdGNoKHRoaXMuZCl7Y2FzZSAxOmNhc2UgMjp7aWYoZj10LmpqKCkscWUoZik9PT1xZSh0aGlzLmMpJiZTQSh0aGlzLG51bGwpPT10LmhqKG51bGwpKXJldHVybiB0aGlzLmc9dC5paigpLHQuZ2ooKT09MSYmKHRoaXMuZD0xKSwhMDticmVha31jYXNlIDM6e3N3aXRjaChvPXQuZ2ooKSxvKXtjYXNlIDM6e2lmKGY9dC5qaigpLHFlKGYpPT09cWUodGhpcy5jKSYmU0EodGhpcyxudWxsKT09dC5oaihudWxsKSlyZXR1cm4gdGhpcy5kPTUsbj1uZXcgTHcoMikscXIobix0aGlzLmcpLHFyKG4sdC5paigpKSx0aGlzLmc9biwhMDticmVha319YnJlYWt9Y2FzZSA1Ontzd2l0Y2gobz10LmdqKCksbyl7Y2FzZSAzOntpZihmPXQuamooKSxxZShmKT09PXFlKHRoaXMuYykmJlNBKHRoaXMsbnVsbCk9PXQuaGoobnVsbCkpcmV0dXJuIHI9bCh0aGlzLmcsMTYpLHIuRmModC5paigpKSwhMDticmVha319YnJlYWt9Y2FzZSA0Ontzd2l0Y2gobz10LmdqKCksbyl7Y2FzZSAzOntpZihmPXQuamooKSxxZShmKT09PXFlKHRoaXMuYykmJlNBKHRoaXMsbnVsbCk9PXQuaGoobnVsbCkpcmV0dXJuIHRoaXMuZD0xLHRoaXMuZz10LmlqKCksITA7YnJlYWt9Y2FzZSA0OntpZihmPXQuamooKSxxZShmKT09PXFlKHRoaXMuYykmJlNBKHRoaXMsbnVsbCk9PXQuaGoobnVsbCkpcmV0dXJuIHRoaXMuZD02LHc9bmV3IEx3KDIpLHFyKHcsdGhpcy5uKSxxcih3LHQua2ooKSksdGhpcy5uPXcsZz1oZShsZShWciwxKSxkaSwyOCwxNSxbdGhpcy5vLHQubGooKV0pLHRoaXMuZz1nLCEwO2JyZWFrfX1icmVha31jYXNlIDY6e3N3aXRjaChvPXQuZ2ooKSxvKXtjYXNlIDQ6e2lmKGY9dC5qaigpLHFlKGYpPT09cWUodGhpcy5jKSYmU0EodGhpcyxudWxsKT09dC5oaihudWxsKSlyZXR1cm4gcj1sKHRoaXMubiwxNiksci5GYyh0LmtqKCkpLGc9bCh0aGlzLmcsNTMpLGE9V2UoVnIsZGksMjgsZy5sZW5ndGgrMSwxNSwxKSxwdShnLDAsYSwwLGcubGVuZ3RoKSxhW2cubGVuZ3RoXT10LmxqKCksdGhpcy5nPWEsITA7YnJlYWt9fWJyZWFrfX1yZXR1cm4hMX0sSSh1cywiRmVhdHVyZU1hcFV0aWwvRmVhdHVyZUVOb3RpZmljYXRpb25JbXBsIiw2NDQpLEQoNTY0LDUwOSx7MjA6MSwzMToxLDU2OjEsMTY6MSwxNToxLDYxOjEsNzk6MSwxNjA6MSwyMjA6MSwyMDM2OjEsNzE6MSw5NzoxfSxuSCksaC5PbD1mdW5jdGlvbih0LG4pe3JldHVybiBma2UodGhpcy5jLHQsbil9LGguUGw9ZnVuY3Rpb24odCxuLHIpe3JldHVybiBpa2UodGhpcy5jLHQsbixyKX0saC5RbD1mdW5jdGlvbih0LG4scil7cmV0dXJuIE1rZSh0aGlzLmMsdCxuLHIpfSxoLlJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGguU2w9ZnVuY3Rpb24odCxuKXtyZXR1cm4gcFAodGhpcy5jLHQsbil9LGguVGw9ZnVuY3Rpb24odCl7cmV0dXJuIGwocVUodGhpcy5jLHRoaXMuYix0LCExKSw3NikuTGsoKX0saC5VbD1mdW5jdGlvbih0KXtyZXR1cm4gbChxVSh0aGlzLmMsdGhpcy5iLHQsITEpLDc2KS5tZCgpfSxoLlZsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5XbD1mdW5jdGlvbih0KXtyZXR1cm4hRk4odGhpcy5jLHQpfSxoLlhsPWZ1bmN0aW9uKHQsbil7SFUodGhpcy5jLHQsbil9LGguWWw9ZnVuY3Rpb24odCl7cmV0dXJuIG9mdCh0aGlzLmMsdCl9LGguWmw9ZnVuY3Rpb24odCl7amR0KHRoaXMuYyx0KX0sSSh1cywiRmVhdHVyZU1hcFV0aWwvRmVhdHVyZUZlYXR1cmVNYXAiLDU2NCksRCgxMjk0LDEsaTBlLFB0dCksaC5Gaz1mdW5jdGlvbih0KXtyZXR1cm4gcVUodGhpcy5iLHRoaXMuYSwtMSx0KX0saC5Raj1mdW5jdGlvbigpe3JldHVybiFGTih0aGlzLmIsdGhpcy5hKX0saC5XYj1mdW5jdGlvbih0KXtIVSh0aGlzLmIsdGhpcy5hLHQpfSxoLkdrPWZ1bmN0aW9uKCl7RVUodGhpcy5iLHRoaXMuYSl9LEkodXMsIkZlYXR1cmVNYXBVdGlsL0ZlYXR1cmVWYWx1ZSIsMTI5NCk7dmFyIGM5LGFwZSxvcGUsdTksbkF0LGdGPWtzKG5LLCJBbnlUeXBlIik7RCg2ODAsNjMsbHAsSmllKSxJKG5LLCJJbnZhbGlkRGF0YXR5cGVWYWx1ZUV4Y2VwdGlvbiIsNjgwKTt2YXIgQVk9a3MobkssTTV0KSxwRj1rcyhuSyxENXQpLFZQZT1rcyhuSyxJNXQpLHJBdCx0dSxVUGUsU3YsaUF0LHNBdCxhQXQsb0F0LGNBdCx1QXQsbEF0LGhBdCxmQXQsZEF0LGdBdCxjNyxwQXQsdTcsSE0sYkF0LEMzLGJGLG1GLG1BdCxWTSxVTTtEKDg0NCw1MTYsezExMDoxLDk0OjEsOTM6MSw1ODoxLDU0OjEsOTk6MSw4NTc6MX0sendlKSxoLkxoPWZ1bmN0aW9uKHQsbixyKXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiByPyghdGhpcy5jJiYodGhpcy5jPW5ldyBMcyh0aGlzLDApKSx0aGlzLmMpOighdGhpcy5jJiYodGhpcy5jPW5ldyBMcyh0aGlzLDApKSx0aGlzLmMuYik7Y2FzZSAxOnJldHVybiByPyghdGhpcy5jJiYodGhpcy5jPW5ldyBMcyh0aGlzLDApKSxsKGt1KHRoaXMuYywoR2koKSxTdikpLDE2MCkpOighdGhpcy5jJiYodGhpcy5jPW5ldyBMcyh0aGlzLDApKSxsKGwoa3UodGhpcy5jLChHaSgpLFN2KSksMTYwKSwyMjApKS5WbCgpO2Nhc2UgMjpyZXR1cm4gcj8oIXRoaXMuYiYmKHRoaXMuYj1uZXcgTHModGhpcywyKSksdGhpcy5iKTooIXRoaXMuYiYmKHRoaXMuYj1uZXcgTHModGhpcywyKSksdGhpcy5iLmIpfXJldHVybiBzZih0aGlzLHQteXIodGhpcy5paSgpKSxNbih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgU2YpLHRoaXMuaykuTmsoKTp0aGlzLmlpKCksdCksbixyKX0saC5VaD1mdW5jdGlvbih0LG4scil7dmFyIGE7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4hdGhpcy5jJiYodGhpcy5jPW5ldyBMcyh0aGlzLDApKSxoUCh0aGlzLmMsdCxyKTtjYXNlIDE6cmV0dXJuKCF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLGwobChrdSh0aGlzLmMsKEdpKCksU3YpKSwxNjApLDcxKSkuWGsodCxyKTtjYXNlIDI6cmV0dXJuIXRoaXMuYiYmKHRoaXMuYj1uZXcgTHModGhpcywyKSksaFAodGhpcy5iLHQscil9cmV0dXJuIGE9bChNbih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgU2YpLHRoaXMuaykuTmsoKTp0aGlzLmlpKCksbiksNjkpLGEud2soKS5Bayh0aGlzLFY2ZSh0aGlzKSxuLXlyKHRoaXMuaWkoKSksdCxyKX0saC5XaD1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiEhdGhpcy5jJiZ0aGlzLmMuaSE9MDtjYXNlIDE6cmV0dXJuISghdGhpcy5jJiYodGhpcy5jPW5ldyBMcyh0aGlzLDApKSxsKGt1KHRoaXMuYywoR2koKSxTdikpLDE2MCkpLmRjKCk7Y2FzZSAyOnJldHVybiEhdGhpcy5iJiZ0aGlzLmIuaSE9MH1yZXR1cm4gbmYodGhpcyx0LXlyKHRoaXMuaWkoKSksTW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IFNmKSx0aGlzLmspLk5rKCk6dGhpcy5paSgpLHQpKX0saC5iaT1mdW5jdGlvbih0LG4pe3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuYyYmKHRoaXMuYz1uZXcgTHModGhpcywwKSksJE8odGhpcy5jLG4pO3JldHVybjtjYXNlIDE6KCF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLGwobChrdSh0aGlzLmMsKEdpKCksU3YpKSwxNjApLDIyMCkpLldiKG4pO3JldHVybjtjYXNlIDI6IXRoaXMuYiYmKHRoaXMuYj1uZXcgTHModGhpcywyKSksJE8odGhpcy5iLG4pO3JldHVybn11Zih0aGlzLHQteXIodGhpcy5paSgpKSxNbih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgU2YpLHRoaXMuaykuTmsoKTp0aGlzLmlpKCksdCksbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gR2koKSxVUGV9LGgua2k9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5jJiYodGhpcy5jPW5ldyBMcyh0aGlzLDApKSwkcih0aGlzLmMpO3JldHVybjtjYXNlIDE6KCF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLGwoa3UodGhpcy5jLChHaSgpLFN2KSksMTYwKSkuJGIoKTtyZXR1cm47Y2FzZSAyOiF0aGlzLmImJih0aGlzLmI9bmV3IExzKHRoaXMsMikpLCRyKHRoaXMuYik7cmV0dXJufWNmKHRoaXMsdC15cih0aGlzLmlpKCkpLE1uKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBTZiksdGhpcy5rKS5OaygpOnRoaXMuaWkoKSx0KSl9LGguSWI9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdGhpcy5qJjQ/ZzAodGhpcyk6KHQ9bmV3IEFmKGcwKHRoaXMpKSx0LmErPSIgKG1peGVkOiAiLE9fKHQsdGhpcy5jKSx0LmErPSIsIGFueUF0dHJpYnV0ZTogIixPXyh0LHRoaXMuYiksdC5hKz0iKSIsdC5hKX0sSShlYSwiQW55VHlwZUltcGwiLDg0NCksRCg2ODEsNTE2LHsxMTA6MSw5NDoxLDkzOjEsNTg6MSw1NDoxLDk5OjEsMjExOToxLDY4MToxfSx5cmUpLGguTGg9ZnVuY3Rpb24odCxuLHIpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHRoaXMuYTtjYXNlIDE6cmV0dXJuIHRoaXMuYn1yZXR1cm4gc2YodGhpcyx0LXlyKChHaSgpLGM3KSksTW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IFNmKSx0aGlzLmspLk5rKCk6YzcsdCksbixyKX0saC5XaD1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLmEhPW51bGw7Y2FzZSAxOnJldHVybiB0aGlzLmIhPW51bGx9cmV0dXJuIG5mKHRoaXMsdC15cigoR2koKSxjNykpLE1uKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBTZiksdGhpcy5rKS5OaygpOmM3LHQpKX0saC5iaT1mdW5jdGlvbih0LG4pe3N3aXRjaCh0KXtjYXNlIDA6dnIodGhpcyxlaShuKSk7cmV0dXJuO2Nhc2UgMTpwcih0aGlzLGVpKG4pKTtyZXR1cm59dWYodGhpcyx0LXlyKChHaSgpLGM3KSksTW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IFNmKSx0aGlzLmspLk5rKCk6YzcsdCksbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gR2koKSxjN30saC5raT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMuYT1udWxsO3JldHVybjtjYXNlIDE6dGhpcy5iPW51bGw7cmV0dXJufWNmKHRoaXMsdC15cigoR2koKSxjNykpLE1uKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBTZiksdGhpcy5rKS5OaygpOmM3LHQpKX0saC5JYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLmomND9nMCh0aGlzKToodD1uZXcgQWYoZzAodGhpcykpLHQuYSs9IiAoZGF0YTogIixYbyh0LHRoaXMuYSksdC5hKz0iLCB0YXJnZXQ6ICIsWG8odCx0aGlzLmIpLHQuYSs9IikiLHQuYSl9LGguYT1udWxsLGguYj1udWxsLEkoZWEsIlByb2Nlc3NpbmdJbnN0cnVjdGlvbkltcGwiLDY4MSksRCg2ODIsODQ0LHsxMTA6MSw5NDoxLDkzOjEsNTg6MSw1NDoxLDk5OjEsODU3OjEsMjEyMDoxLDY4MjoxfSxmSmUpLGguTGg9ZnVuY3Rpb24odCxuLHIpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHI/KCF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLHRoaXMuYyk6KCF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLHRoaXMuYy5iKTtjYXNlIDE6cmV0dXJuIHI/KCF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLGwoa3UodGhpcy5jLChHaSgpLFN2KSksMTYwKSk6KCF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLGwobChrdSh0aGlzLmMsKEdpKCksU3YpKSwxNjApLDIyMCkpLlZsKCk7Y2FzZSAyOnJldHVybiByPyghdGhpcy5iJiYodGhpcy5iPW5ldyBMcyh0aGlzLDIpKSx0aGlzLmIpOighdGhpcy5iJiYodGhpcy5iPW5ldyBMcyh0aGlzLDIpKSx0aGlzLmIuYik7Y2FzZSAzOnJldHVybiF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLGVpKHBQKHRoaXMuYywoR2koKSxITSksITApKTtjYXNlIDQ6cmV0dXJuIGw0ZSh0aGlzLmEsKCF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLGVpKHBQKHRoaXMuYywoR2koKSxITSksITApKSkpO2Nhc2UgNTpyZXR1cm4gdGhpcy5hfXJldHVybiBzZih0aGlzLHQteXIoKEdpKCksdTcpKSxNbih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgU2YpLHRoaXMuaykuTmsoKTp1Nyx0KSxuLHIpfSxoLldoPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuISF0aGlzLmMmJnRoaXMuYy5pIT0wO2Nhc2UgMTpyZXR1cm4hKCF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLGwoa3UodGhpcy5jLChHaSgpLFN2KSksMTYwKSkuZGMoKTtjYXNlIDI6cmV0dXJuISF0aGlzLmImJnRoaXMuYi5pIT0wO2Nhc2UgMzpyZXR1cm4hdGhpcy5jJiYodGhpcy5jPW5ldyBMcyh0aGlzLDApKSxlaShwUCh0aGlzLmMsKEdpKCksSE0pLCEwKSkhPW51bGw7Y2FzZSA0OnJldHVybiBsNGUodGhpcy5hLCghdGhpcy5jJiYodGhpcy5jPW5ldyBMcyh0aGlzLDApKSxlaShwUCh0aGlzLmMsKEdpKCksSE0pLCEwKSkpKSE9bnVsbDtjYXNlIDU6cmV0dXJuISF0aGlzLmF9cmV0dXJuIG5mKHRoaXMsdC15cigoR2koKSx1NykpLE1uKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBTZiksdGhpcy5rKS5OaygpOnU3LHQpKX0saC5iaT1mdW5jdGlvbih0LG4pe3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuYyYmKHRoaXMuYz1uZXcgTHModGhpcywwKSksJE8odGhpcy5jLG4pO3JldHVybjtjYXNlIDE6KCF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLGwobChrdSh0aGlzLmMsKEdpKCksU3YpKSwxNjApLDIyMCkpLldiKG4pO3JldHVybjtjYXNlIDI6IXRoaXMuYiYmKHRoaXMuYj1uZXcgTHModGhpcywyKSksJE8odGhpcy5iLG4pO3JldHVybjtjYXNlIDM6SjVlKHRoaXMsZWkobikpO3JldHVybjtjYXNlIDQ6SjVlKHRoaXMsdTRlKHRoaXMuYSxuKSk7cmV0dXJuO2Nhc2UgNTpObih0aGlzLGwobiwxNTYpKTtyZXR1cm59dWYodGhpcyx0LXlyKChHaSgpLHU3KSksTW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IFNmKSx0aGlzLmspLk5rKCk6dTcsdCksbil9LGguaWk9ZnVuY3Rpb24oKXtyZXR1cm4gR2koKSx1N30saC5raT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSAwOiF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLCRyKHRoaXMuYyk7cmV0dXJuO2Nhc2UgMTooIXRoaXMuYyYmKHRoaXMuYz1uZXcgTHModGhpcywwKSksbChrdSh0aGlzLmMsKEdpKCksU3YpKSwxNjApKS4kYigpO3JldHVybjtjYXNlIDI6IXRoaXMuYiYmKHRoaXMuYj1uZXcgTHModGhpcywyKSksJHIodGhpcy5iKTtyZXR1cm47Y2FzZSAzOiF0aGlzLmMmJih0aGlzLmM9bmV3IExzKHRoaXMsMCkpLEhVKHRoaXMuYywoR2koKSxITSksbnVsbCk7cmV0dXJuO2Nhc2UgNDpKNWUodGhpcyx1NGUodGhpcy5hLG51bGwpKTtyZXR1cm47Y2FzZSA1OnRoaXMuYT1udWxsO3JldHVybn1jZih0aGlzLHQteXIoKEdpKCksdTcpKSxNbih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgU2YpLHRoaXMuaykuTmsoKTp1Nyx0KSl9LEkoZWEsIlNpbXBsZUFueVR5cGVJbXBsIiw2ODIpLEQoNjgzLDUxNix7MTEwOjEsOTQ6MSw5MzoxLDU4OjEsNTQ6MSw5OToxLDIxMjE6MSw2ODM6MX0sZEplKSxoLkxoPWZ1bmN0aW9uKHQsbixyKXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiByPyghdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSx0aGlzLmEpOighdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSx0aGlzLmEuYik7Y2FzZSAxOnJldHVybiByPyghdGhpcy5iJiYodGhpcy5iPW5ldyB4bCgoVG4oKSxObyksWWMsdGhpcywxKSksdGhpcy5iKTooIXRoaXMuYiYmKHRoaXMuYj1uZXcgeGwoKFRuKCksTm8pLFljLHRoaXMsMSkpLGlOKHRoaXMuYikpO2Nhc2UgMjpyZXR1cm4gcj8oIXRoaXMuYyYmKHRoaXMuYz1uZXcgeGwoKFRuKCksTm8pLFljLHRoaXMsMikpLHRoaXMuYyk6KCF0aGlzLmMmJih0aGlzLmM9bmV3IHhsKChUbigpLE5vKSxZYyx0aGlzLDIpKSxpTih0aGlzLmMpKTtjYXNlIDM6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgTHModGhpcywwKSksa3UodGhpcy5hLChHaSgpLGJGKSk7Y2FzZSA0OnJldHVybiF0aGlzLmEmJih0aGlzLmE9bmV3IExzKHRoaXMsMCkpLGt1KHRoaXMuYSwoR2koKSxtRikpO2Nhc2UgNTpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSxrdSh0aGlzLmEsKEdpKCksVk0pKTtjYXNlIDY6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgTHModGhpcywwKSksa3UodGhpcy5hLChHaSgpLFVNKSl9cmV0dXJuIHNmKHRoaXMsdC15cigoR2koKSxDMykpLE1uKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBTZiksdGhpcy5rKS5OaygpOkMzLHQpLG4scil9LGguVWg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgTHModGhpcywwKSksaFAodGhpcy5hLHQscik7Y2FzZSAxOnJldHVybiF0aGlzLmImJih0aGlzLmI9bmV3IHhsKChUbigpLE5vKSxZYyx0aGlzLDEpKSxVcSh0aGlzLmIsdCxyKTtjYXNlIDI6cmV0dXJuIXRoaXMuYyYmKHRoaXMuYz1uZXcgeGwoKFRuKCksTm8pLFljLHRoaXMsMikpLFVxKHRoaXMuYyx0LHIpO2Nhc2UgNTpyZXR1cm4hdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSxJcnQoa3UodGhpcy5hLChHaSgpLFZNKSksdCxyKX1yZXR1cm4gYT1sKE1uKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBTZiksdGhpcy5rKS5OaygpOihHaSgpLEMzKSxuKSw2OSksYS53aygpLkFrKHRoaXMsVjZlKHRoaXMpLG4teXIoKEdpKCksQzMpKSx0LHIpfSxoLldoPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuISF0aGlzLmEmJnRoaXMuYS5pIT0wO2Nhc2UgMTpyZXR1cm4hIXRoaXMuYiYmdGhpcy5iLmYhPTA7Y2FzZSAyOnJldHVybiEhdGhpcy5jJiZ0aGlzLmMuZiE9MDtjYXNlIDM6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgTHModGhpcywwKSksIV9xKGt1KHRoaXMuYSwoR2koKSxiRikpKTtjYXNlIDQ6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgTHModGhpcywwKSksIV9xKGt1KHRoaXMuYSwoR2koKSxtRikpKTtjYXNlIDU6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgTHModGhpcywwKSksIV9xKGt1KHRoaXMuYSwoR2koKSxWTSkpKTtjYXNlIDY6cmV0dXJuIXRoaXMuYSYmKHRoaXMuYT1uZXcgTHModGhpcywwKSksIV9xKGt1KHRoaXMuYSwoR2koKSxVTSkpKX1yZXR1cm4gbmYodGhpcyx0LXlyKChHaSgpLEMzKSksTW4odGhpcy5qJjI/KCF0aGlzLmsmJih0aGlzLms9bmV3IFNmKSx0aGlzLmspLk5rKCk6QzMsdCkpfSxoLmJpPWZ1bmN0aW9uKHQsbil7c3dpdGNoKHQpe2Nhc2UgMDohdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSwkTyh0aGlzLmEsbik7cmV0dXJuO2Nhc2UgMTohdGhpcy5iJiYodGhpcy5iPW5ldyB4bCgoVG4oKSxObyksWWMsdGhpcywxKSksX1YodGhpcy5iLG4pO3JldHVybjtjYXNlIDI6IXRoaXMuYyYmKHRoaXMuYz1uZXcgeGwoKFRuKCksTm8pLFljLHRoaXMsMikpLF9WKHRoaXMuYyxuKTtyZXR1cm47Y2FzZSAzOiF0aGlzLmEmJih0aGlzLmE9bmV3IExzKHRoaXMsMCkpLF84KGt1KHRoaXMuYSwoR2koKSxiRikpKSwhdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSxGXyhrdSh0aGlzLmEsYkYpLGwobiwxNikpO3JldHVybjtjYXNlIDQ6IXRoaXMuYSYmKHRoaXMuYT1uZXcgTHModGhpcywwKSksXzgoa3UodGhpcy5hLChHaSgpLG1GKSkpLCF0aGlzLmEmJih0aGlzLmE9bmV3IExzKHRoaXMsMCkpLEZfKGt1KHRoaXMuYSxtRiksbChuLDE2KSk7cmV0dXJuO2Nhc2UgNTohdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSxfOChrdSh0aGlzLmEsKEdpKCksVk0pKSksIXRoaXMuYSYmKHRoaXMuYT1uZXcgTHModGhpcywwKSksRl8oa3UodGhpcy5hLFZNKSxsKG4sMTYpKTtyZXR1cm47Y2FzZSA2OiF0aGlzLmEmJih0aGlzLmE9bmV3IExzKHRoaXMsMCkpLF84KGt1KHRoaXMuYSwoR2koKSxVTSkpKSwhdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSxGXyhrdSh0aGlzLmEsVU0pLGwobiwxNikpO3JldHVybn11Zih0aGlzLHQteXIoKEdpKCksQzMpKSxNbih0aGlzLmomMj8oIXRoaXMuayYmKHRoaXMuaz1uZXcgU2YpLHRoaXMuaykuTmsoKTpDMyx0KSxuKX0saC5paT1mdW5jdGlvbigpe3JldHVybiBHaSgpLEMzfSxoLmtpPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIDA6IXRoaXMuYSYmKHRoaXMuYT1uZXcgTHModGhpcywwKSksJHIodGhpcy5hKTtyZXR1cm47Y2FzZSAxOiF0aGlzLmImJih0aGlzLmI9bmV3IHhsKChUbigpLE5vKSxZYyx0aGlzLDEpKSx0aGlzLmIuYy4kYigpO3JldHVybjtjYXNlIDI6IXRoaXMuYyYmKHRoaXMuYz1uZXcgeGwoKFRuKCksTm8pLFljLHRoaXMsMikpLHRoaXMuYy5jLiRiKCk7cmV0dXJuO2Nhc2UgMzohdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSxfOChrdSh0aGlzLmEsKEdpKCksYkYpKSk7cmV0dXJuO2Nhc2UgNDohdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSxfOChrdSh0aGlzLmEsKEdpKCksbUYpKSk7cmV0dXJuO2Nhc2UgNTohdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSxfOChrdSh0aGlzLmEsKEdpKCksVk0pKSk7cmV0dXJuO2Nhc2UgNjohdGhpcy5hJiYodGhpcy5hPW5ldyBMcyh0aGlzLDApKSxfOChrdSh0aGlzLmEsKEdpKCksVU0pKSk7cmV0dXJufWNmKHRoaXMsdC15cigoR2koKSxDMykpLE1uKHRoaXMuaiYyPyghdGhpcy5rJiYodGhpcy5rPW5ldyBTZiksdGhpcy5rKS5OaygpOkMzLHQpKX0saC5JYj1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLmomND9nMCh0aGlzKToodD1uZXcgQWYoZzAodGhpcykpLHQuYSs9IiAobWl4ZWQ6ICIsT18odCx0aGlzLmEpLHQuYSs9IikiLHQuYSl9LEkoZWEsIlhNTFR5cGVEb2N1bWVudFJvb3RJbXBsIiw2ODMpLEQoMjAyOCw3MjAsezExMDoxLDk0OjEsOTM6MSw0ODA6MSwxNTU6MSw1ODoxLDExNDoxLDU0OjEsOTk6MSwxNTg6MSwxMTk6MSwxMjA6MSwyMTIyOjF9LHVrKSxoLnJpPWZ1bmN0aW9uKHQsbil7c3dpdGNoKHQuaGsoKSl7Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNlIDE2OmNhc2UgMjI6Y2FzZSAyMzpjYXNlIDI0OmNhc2UgMjU6Y2FzZSAyNjpjYXNlIDMyOmNhc2UgMzM6Y2FzZSAzNDpjYXNlIDM2OmNhc2UgMzc6Y2FzZSA0NDpjYXNlIDQ1OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUzOmNhc2UgNTU6Y2FzZSA1NjpjYXNlIDU3OmNhc2UgNTg6Y2FzZSA2MDpjYXNlIDYxOmNhc2UgNDpyZXR1cm4gbj09bnVsbD9udWxsOnhjKG4pO2Nhc2UgMTk6Y2FzZSAyODpjYXNlIDI5OmNhc2UgMzU6Y2FzZSAzODpjYXNlIDM5OmNhc2UgNDE6Y2FzZSA0NjpjYXNlIDUyOmNhc2UgNTQ6Y2FzZSA1OnJldHVybiBlaShuKTtjYXNlIDY6cmV0dXJuIGhmbihsKG4sMTk1KSk7Y2FzZSAxMjpjYXNlIDQ3OmNhc2UgNDk6Y2FzZSAxMTpyZXR1cm4gTHZ0KHRoaXMsdCxuKTtjYXNlIDEzOnJldHVybiBuPT1udWxsP251bGw6a0xuKGwobiwyNDcpKTtjYXNlIDE1OmNhc2UgMTQ6cmV0dXJuIG49PW51bGw/bnVsbDpfZ24oemUoR2UobikpKTtjYXNlIDE3OnJldHVybiBTZ3QoKEdpKCksbikpO2Nhc2UgMTg6cmV0dXJuIFNndChuKTtjYXNlIDIxOmNhc2UgMjA6cmV0dXJuIG49PW51bGw/bnVsbDpBZ24obChuLDE2MSkuYSk7Y2FzZSAyNzpyZXR1cm4gZmZuKGwobiwxOTUpKTtjYXNlIDMwOnJldHVybiAkZHQoKEdpKCksbChuLDE1KSkpO2Nhc2UgMzE6cmV0dXJuICRkdChsKG4sMTUpKTtjYXNlIDQwOnJldHVybiBnZm4oKEdpKCksbikpO2Nhc2UgNDI6cmV0dXJuIF9ndCgoR2koKSxuKSk7Y2FzZSA0MzpyZXR1cm4gX2d0KG4pO2Nhc2UgNTk6Y2FzZSA0ODpyZXR1cm4gZGZuKChHaSgpLG4pKTtkZWZhdWx0OnRocm93IHVlKG5ldyBZbih5VCt0LnhlKCkrdDMpKX19LGguc2k9ZnVuY3Rpb24odCl7dmFyIG4scixhLG8sZjtzd2l0Y2godC5HPT0tMSYmKHQuRz0ocj1BaCh0KSxyP2YyKHIudmkoKSx0KTotMSkpLHQuRyl7Y2FzZSAwOnJldHVybiBuPW5ldyB6d2UsbjtjYXNlIDE6cmV0dXJuIGE9bmV3IHlyZSxhO2Nhc2UgMjpyZXR1cm4gbz1uZXcgZkplLG87Y2FzZSAzOnJldHVybiBmPW5ldyBkSmUsZjtkZWZhdWx0OnRocm93IHVlKG5ldyBZbihxZmUrdC56Yit0MykpfX0saC50aT1mdW5jdGlvbih0LG4pe3ZhciByLGEsbyxmLGcsdyxFLEMsTCxCLHosVixKLHRlLGZlLFRlO3N3aXRjaCh0LmhrKCkpe2Nhc2UgNTpjYXNlIDUyOmNhc2UgNDpyZXR1cm4gbjtjYXNlIDY6cmV0dXJuIHk2bihuKTtjYXNlIDg6Y2FzZSA3OnJldHVybiBuPT1udWxsP251bGw6YXhuKG4pO2Nhc2UgOTpyZXR1cm4gbj09bnVsbD9udWxsOmZOKE9oKChhPVR1KG4sITApLGEubGVuZ3RoPjAmJihYbigwLGEubGVuZ3RoKSxhLmNoYXJDb2RlQXQoMCk9PTQzKT8oWG4oMSxhLmxlbmd0aCsxKSxhLnN1YnN0cigxKSk6YSksLTEyOCwxMjcpPDwyND4+MjQpO2Nhc2UgMTA6cmV0dXJuIG49PW51bGw/bnVsbDpmTihPaCgobz1UdShuLCEwKSxvLmxlbmd0aD4wJiYoWG4oMCxvLmxlbmd0aCksby5jaGFyQ29kZUF0KDApPT00Myk/KFhuKDEsby5sZW5ndGgrMSksby5zdWJzdHIoMSkpOm8pLC0xMjgsMTI3KTw8MjQ+PjI0KTtjYXNlIDExOnJldHVybiBlaShLdyh0aGlzLChHaSgpLGFBdCksbikpO2Nhc2UgMTI6cmV0dXJuIGVpKEt3KHRoaXMsKEdpKCksb0F0KSxuKSk7Y2FzZSAxMzpyZXR1cm4gbj09bnVsbD9udWxsOm5ldyBoM2UoVHUobiwhMCkpO2Nhc2UgMTU6Y2FzZSAxNDpyZXR1cm4gTFRuKG4pO2Nhc2UgMTY6cmV0dXJuIGVpKEt3KHRoaXMsKEdpKCksY0F0KSxuKSk7Y2FzZSAxNzpyZXR1cm4gcTF0KChHaSgpLG4pKTtjYXNlIDE4OnJldHVybiBxMXQobik7Y2FzZSAyODpjYXNlIDI5OmNhc2UgMzU6Y2FzZSAzODpjYXNlIDM5OmNhc2UgNDE6Y2FzZSA1NDpjYXNlIDE5OnJldHVybiBUdShuLCEwKTtjYXNlIDIxOmNhc2UgMjA6cmV0dXJuIGpUbihuKTtjYXNlIDIyOnJldHVybiBlaShLdyh0aGlzLChHaSgpLHVBdCksbikpO2Nhc2UgMjM6cmV0dXJuIGVpKEt3KHRoaXMsKEdpKCksbEF0KSxuKSk7Y2FzZSAyNDpyZXR1cm4gZWkoS3codGhpcywoR2koKSxoQXQpLG4pKTtjYXNlIDI1OnJldHVybiBlaShLdyh0aGlzLChHaSgpLGZBdCksbikpO2Nhc2UgMjY6cmV0dXJuIGVpKEt3KHRoaXMsKEdpKCksZEF0KSxuKSk7Y2FzZSAyNzpyZXR1cm4gYzZuKG4pO2Nhc2UgMzA6cmV0dXJuIEgxdCgoR2koKSxuKSk7Y2FzZSAzMTpyZXR1cm4gSDF0KG4pO2Nhc2UgMzI6cmV0dXJuIG49PW51bGw/bnVsbDpwdChPaCgoTD1UdShuLCEwKSxMLmxlbmd0aD4wJiYoWG4oMCxMLmxlbmd0aCksTC5jaGFyQ29kZUF0KDApPT00Myk/KFhuKDEsTC5sZW5ndGgrMSksTC5zdWJzdHIoMSkpOkwpLGxvLElpKSk7Y2FzZSAzMzpyZXR1cm4gbj09bnVsbD9udWxsOm5ldyBvYigoQj1UdShuLCEwKSxCLmxlbmd0aD4wJiYoWG4oMCxCLmxlbmd0aCksQi5jaGFyQ29kZUF0KDApPT00Myk/KFhuKDEsQi5sZW5ndGgrMSksQi5zdWJzdHIoMSkpOkIpKTtjYXNlIDM0OnJldHVybiBuPT1udWxsP251bGw6cHQoT2goKHo9VHUobiwhMCksei5sZW5ndGg+MCYmKFhuKDAsei5sZW5ndGgpLHouY2hhckNvZGVBdCgwKT09NDMpPyhYbigxLHoubGVuZ3RoKzEpLHouc3Vic3RyKDEpKTp6KSxsbyxJaSkpO2Nhc2UgMzY6cmV0dXJuIG49PW51bGw/bnVsbDphcChLVSgoVj1UdShuLCEwKSxWLmxlbmd0aD4wJiYoWG4oMCxWLmxlbmd0aCksVi5jaGFyQ29kZUF0KDApPT00Myk/KFhuKDEsVi5sZW5ndGgrMSksVi5zdWJzdHIoMSkpOlYpKSk7Y2FzZSAzNzpyZXR1cm4gbj09bnVsbD9udWxsOmFwKEtVKChKPVR1KG4sITApLEoubGVuZ3RoPjAmJihYbigwLEoubGVuZ3RoKSxKLmNoYXJDb2RlQXQoMCk9PTQzKT8oWG4oMSxKLmxlbmd0aCsxKSxKLnN1YnN0cigxKSk6SikpKTtjYXNlIDQwOnJldHVybiBzN24oKEdpKCksbikpO2Nhc2UgNDI6cmV0dXJuIFYxdCgoR2koKSxuKSk7Y2FzZSA0MzpyZXR1cm4gVjF0KG4pO2Nhc2UgNDQ6cmV0dXJuIG49PW51bGw/bnVsbDpuZXcgb2IoKHRlPVR1KG4sITApLHRlLmxlbmd0aD4wJiYoWG4oMCx0ZS5sZW5ndGgpLHRlLmNoYXJDb2RlQXQoMCk9PTQzKT8oWG4oMSx0ZS5sZW5ndGgrMSksdGUuc3Vic3RyKDEpKTp0ZSkpO2Nhc2UgNDU6cmV0dXJuIG49PW51bGw/bnVsbDpuZXcgb2IoKGZlPVR1KG4sITApLGZlLmxlbmd0aD4wJiYoWG4oMCxmZS5sZW5ndGgpLGZlLmNoYXJDb2RlQXQoMCk9PTQzKT8oWG4oMSxmZS5sZW5ndGgrMSksZmUuc3Vic3RyKDEpKTpmZSkpO2Nhc2UgNDY6cmV0dXJuIFR1KG4sITEpO2Nhc2UgNDc6cmV0dXJuIGVpKEt3KHRoaXMsKEdpKCksZ0F0KSxuKSk7Y2FzZSA1OTpjYXNlIDQ4OnJldHVybiBpN24oKEdpKCksbikpO2Nhc2UgNDk6cmV0dXJuIGVpKEt3KHRoaXMsKEdpKCkscEF0KSxuKSk7Y2FzZSA1MDpyZXR1cm4gbj09bnVsbD9udWxsOl9FKE9oKChUZT1UdShuLCEwKSxUZS5sZW5ndGg+MCYmKFhuKDAsVGUubGVuZ3RoKSxUZS5jaGFyQ29kZUF0KDApPT00Myk/KFhuKDEsVGUubGVuZ3RoKzEpLFRlLnN1YnN0cigxKSk6VGUpLEpHLDMyNzY3KTw8MTY+PjE2KTtjYXNlIDUxOnJldHVybiBuPT1udWxsP251bGw6X0UoT2goKGY9VHUobiwhMCksZi5sZW5ndGg+MCYmKFhuKDAsZi5sZW5ndGgpLGYuY2hhckNvZGVBdCgwKT09NDMpPyhYbigxLGYubGVuZ3RoKzEpLGYuc3Vic3RyKDEpKTpmKSxKRywzMjc2Nyk8PDE2Pj4xNik7Y2FzZSA1MzpyZXR1cm4gZWkoS3codGhpcywoR2koKSxiQXQpLG4pKTtjYXNlIDU1OnJldHVybiBuPT1udWxsP251bGw6X0UoT2goKGc9VHUobiwhMCksZy5sZW5ndGg+MCYmKFhuKDAsZy5sZW5ndGgpLGcuY2hhckNvZGVBdCgwKT09NDMpPyhYbigxLGcubGVuZ3RoKzEpLGcuc3Vic3RyKDEpKTpnKSxKRywzMjc2Nyk8PDE2Pj4xNik7Y2FzZSA1NjpyZXR1cm4gbj09bnVsbD9udWxsOl9FKE9oKCh3PVR1KG4sITApLHcubGVuZ3RoPjAmJihYbigwLHcubGVuZ3RoKSx3LmNoYXJDb2RlQXQoMCk9PTQzKT8oWG4oMSx3Lmxlbmd0aCsxKSx3LnN1YnN0cigxKSk6dyksSkcsMzI3NjcpPDwxNj4+MTYpO2Nhc2UgNTc6cmV0dXJuIG49PW51bGw/bnVsbDphcChLVSgoRT1UdShuLCEwKSxFLmxlbmd0aD4wJiYoWG4oMCxFLmxlbmd0aCksRS5jaGFyQ29kZUF0KDApPT00Myk/KFhuKDEsRS5sZW5ndGgrMSksRS5zdWJzdHIoMSkpOkUpKSk7Y2FzZSA1ODpyZXR1cm4gbj09bnVsbD9udWxsOmFwKEtVKChDPVR1KG4sITApLEMubGVuZ3RoPjAmJihYbigwLEMubGVuZ3RoKSxDLmNoYXJDb2RlQXQoMCk9PTQzKT8oWG4oMSxDLmxlbmd0aCsxKSxDLnN1YnN0cigxKSk6QykpKTtjYXNlIDYwOnJldHVybiBuPT1udWxsP251bGw6cHQoT2goKHI9VHUobiwhMCksci5sZW5ndGg+MCYmKFhuKDAsci5sZW5ndGgpLHIuY2hhckNvZGVBdCgwKT09NDMpPyhYbigxLHIubGVuZ3RoKzEpLHIuc3Vic3RyKDEpKTpyKSxsbyxJaSkpO2Nhc2UgNjE6cmV0dXJuIG49PW51bGw/bnVsbDpwdChPaChUdShuLCEwKSxsbyxJaSkpO2RlZmF1bHQ6dGhyb3cgdWUobmV3IFluKHlUK3QueGUoKSt0MykpfX07dmFyIHZBdCxHUGUsd0F0LEtQZTtJKGVhLCJYTUxUeXBlRmFjdG9yeUltcGwiLDIwMjgpLEQoNTk0LDE4NCx7MTEwOjEsOTQ6MSw5MzoxLDE1NToxLDE5NzoxLDU4OjEsMjQxOjEsMTE0OjEsNTQ6MSw5OToxLDE1ODoxLDE4NDoxLDExOToxLDEyMDoxLDY5MDoxLDIwNDQ6MSw1OTQ6MX0sZGF0KSxoLk49ITEsaC5PPSExO3ZhciB5QXQ9ITE7SShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsIiw1OTQpLEQoMTk2MSwxLHs4NTE6MX0sbGspLGguS2s9ZnVuY3Rpb24oKXtyZXR1cm4geGtlKCksTEF0fSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMSIsMTk2MSksRCgxOTcwLDEseWkscVMpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzEwIiwxOTcwKSxEKDE5NzEsMSx5aSxtcmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzExIiwxOTcxKSxEKDE5NzIsMSx5aSx2cmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzEyIiwxOTcyKSxEKDE5NzMsMSx5aSxwOCksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gZnkodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHRhLGR0LDM0NSx0LDcsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC8xMyIsMTk3MyksRCgxOTc0LDEseWksUiQpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzE0IiwxOTc0KSxEKDE5NzUsMSx5aSxqJCksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKG1mLFF5LDE1LHQsMCwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzE1IiwxOTc1KSxEKDE5NzYsMSx5aSx3cmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMTUpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShtZixReSwxNSx0LDAsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC8xNiIsMTk3NiksRCgxOTc3LDEseWksJCQpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzE3IiwxOTc3KSxEKDE5NzgsMSx5aSx6JCksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNjEpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShfVCxkdCwxNjEsdCwwLDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMTgiLDE5NzgpLEQoMTk3OSwxLHlpLE5JKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBJYSh0KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoenQsZHQsMix0LDYsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC8xOSIsMTk3OSksRCgxOTYyLDEseWkseHJlKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDg1Nyl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKGdGLFJuLDg1Nyx0LDAsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC8yIiwxOTYyKSxEKDE5ODAsMSx5aSxIUyksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMjAiLDE5ODApLEQoMTk4MSwxLHlpLGtyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMjEiLDE5ODEpLEQoMTk4MiwxLHlpLEVyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMjIiLDE5ODIpLEQoMTk4MywxLHlpLFRyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMjMiLDE5ODMpLEQoMTk4NCwxLHlpLENyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxOTUpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShBbCxkdCwxOTUsdCwwLDIpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMjQiLDE5ODQpLEQoMTk4NSwxLHlpLFNyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMjUiLDE5ODUpLEQoMTk4NiwxLHlpLHEkKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBJYSh0KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoenQsZHQsMix0LDYsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC8yNiIsMTk4NiksRCgxOTg3LDEseWksX3JlKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE1KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UobWYsUXksMTUsdCwwLDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMjciLDE5ODcpLEQoMTk4OCwxLHlpLEFyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKG1mLFF5LDE1LHQsMCwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzI4IiwxOTg4KSxEKDE5ODksMSx5aSxMcmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzI5IiwxOTg5KSxEKDE5NjMsMSx5aSxIJCksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCw2ODEpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShBWSxSbiwyMTE5LHQsMCwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzMiLDE5NjMpLEQoMTk5MCwxLHlpLE1yZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNyl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHJvLGR0LDE3LHQsMCwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzMwIiwxOTkwKSxEKDE5OTEsMSx5aSxEcmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzMxIiwxOTkxKSxEKDE5OTIsMSx5aSxWUyksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNjgpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShyMyxkdCwxNjgsdCwwLDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMzIiLDE5OTIpLEQoMTk5MywxLHlpLElyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMzMiLDE5OTMpLEQoMTk5NCwxLHlpLE9yZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMzQiLDE5OTQpLEQoMTk5NSwxLHlpLE5yZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMzUiLDE5OTUpLEQoMTk5NiwxLHlpLFByZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvMzYiLDE5OTYpLEQoMTk5NywxLHlpLEJyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxNSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKG1mLFF5LDE1LHQsMCwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzM3IiwxOTk3KSxEKDE5OTgsMSx5aSxGcmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMTUpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShtZixReSwxNSx0LDAsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC8zOCIsMTk5OCksRCgxOTk5LDEseWksViQpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzM5IiwxOTk5KSxEKDE5NjQsMSx5aSxScmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsNjgyKX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UocEYsUm4sMjEyMCx0LDAsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC80IiwxOTY0KSxEKDJlMywxLHlpLFUkKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBJYSh0KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoenQsZHQsMix0LDYsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC80MCIsMmUzKSxEKDIwMDEsMSx5aSxqcmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzQxIiwyMDAxKSxEKDIwMDIsMSx5aSxQSSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvNDIiLDIwMDIpLEQoMjAwMywxLHlpLCRyZSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvNDMiLDIwMDMpLEQoMjAwNCwxLHlpLEckKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBJYSh0KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoenQsZHQsMix0LDYsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC80NCIsMjAwNCksRCgyMDA1LDEseWksenJlKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE5MSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKGkzLGR0LDE5MSx0LDAsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC80NSIsMjAwNSksRCgyMDA2LDEseWksSyQpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzQ2IiwyMDA2KSxEKDIwMDcsMSx5aSxxcmUpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIElhKHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZSh6dCxkdCwyLHQsNiwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzQ3IiwyMDA3KSxEKDIwMDgsMSx5aSxXJCksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvNDgiLDIwMDgpLEQoMjAwOSwxLHlpLFkkKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE5MSl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKGkzLGR0LDE5MSx0LDAsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC80OSIsMjAwOSksRCgxOTY1LDEseWksWCQpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsNjgzKX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoVlBlLFJuLDIxMjEsdCwwLDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvNSIsMTk2NSksRCgyMDEwLDEseWksQkkpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMTY4KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UocjMsZHQsMTY4LHQsMCwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzUwIiwyMDEwKSxEKDIwMTEsMSx5aSx3NSksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gSWEodCl9LGguZ2s9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHp0LGR0LDIsdCw2LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvNTEiLDIwMTEpLEQoMjAxMiwxLHlpLFVTKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBEZSh0LDE3KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2Uocm8sZHQsMTcsdCwwLDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvNTIiLDIwMTIpLEQoMTk2NiwxLHlpLFMxKSxoLmZrPWZ1bmN0aW9uKHQpe3JldHVybiBJYSh0KX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoenQsZHQsMix0LDYsMSl9LEkoZWEsIlhNTFR5cGVQYWNrYWdlSW1wbC82IiwxOTY2KSxEKDE5NjcsMSx5aSxRJCksaC5maz1mdW5jdGlvbih0KXtyZXR1cm4gRGUodCwxOTUpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShBbCxkdCwxOTUsdCwwLDIpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvNyIsMTk2NyksRCgxOTY4LDEseWksaGspLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIGh5KHQpfSxoLmdrPWZ1bmN0aW9uKHQpe3JldHVybiBXZShOcyxkdCw0ODUsdCw4LDEpfSxJKGVhLCJYTUxUeXBlUGFja2FnZUltcGwvOCIsMTk2OCksRCgxOTY5LDEseWksRkkpLGguZms9ZnVuY3Rpb24odCl7cmV0dXJuIERlKHQsMjIyKX0saC5naz1mdW5jdGlvbih0KXtyZXR1cm4gV2UoangsZHQsMjIyLHQsMCwxKX0sSShlYSwiWE1MVHlwZVBhY2thZ2VJbXBsLzkiLDE5NjkpO3ZhciBuZCxOMixHTSxMWSx5ZTtEKDU1LDYzLGxwLHJpKSxJKHkyLCJSZWdFeC9QYXJzZUV4Y2VwdGlvbiIsNTUpLEQoODM2LDEse30sSiQpLGguYm09ZnVuY3Rpb24odCl7cmV0dXJuIHQ8dGhpcy5qJiZjbyh0aGlzLmksdCk9PTYzfSxoLmNtPWZ1bmN0aW9uKCl7dmFyIHQsbixyLGEsbztpZih0aGlzLmMhPTEwKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxWRykpKSk7c3dpdGNoKHQ9dGhpcy5hLHQpe2Nhc2UgMTAxOnQ9Mjc7YnJlYWs7Y2FzZSAxMDI6dD0xMjticmVhaztjYXNlIDExMDp0PTEwO2JyZWFrO2Nhc2UgMTE0OnQ9MTM7YnJlYWs7Y2FzZSAxMTY6dD05O2JyZWFrO2Nhc2UgMTIwOmlmKExpKHRoaXMpLHRoaXMuYyE9MCl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksdzIpKSkpO2lmKHRoaXMuYT09MTIzKXtvPTAscj0wO2Rve2lmKExpKHRoaXMpLHRoaXMuYyE9MCl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksdzIpKSkpO2lmKChvPVdtKHRoaXMuYSkpPDApYnJlYWs7aWYocj5yKjE2KXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxINHQpKSkpO3I9cioxNitvfXdoaWxlKCEwKTtpZih0aGlzLmEhPTEyNSl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksVjR0KSkpKTtpZihyPlRUKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxVNHQpKSkpO3Q9cn1lbHNle2lmKG89MCx0aGlzLmMhPTB8fChvPVdtKHRoaXMuYSkpPDApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLHcyKSkpKTtpZihyPW8sTGkodGhpcyksdGhpcy5jIT0wfHwobz1XbSh0aGlzLmEpKTwwKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSx3MikpKSk7cj1yKjE2K28sdD1yfWJyZWFrO2Nhc2UgMTE3OmlmKGE9MCxMaSh0aGlzKSx0aGlzLmMhPTB8fChhPVdtKHRoaXMuYSkpPDApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLHcyKSkpKTtpZihuPWEsTGkodGhpcyksdGhpcy5jIT0wfHwoYT1XbSh0aGlzLmEpKTwwKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSx3MikpKSk7aWYobj1uKjE2K2EsTGkodGhpcyksdGhpcy5jIT0wfHwoYT1XbSh0aGlzLmEpKTwwKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSx3MikpKSk7aWYobj1uKjE2K2EsTGkodGhpcyksdGhpcy5jIT0wfHwoYT1XbSh0aGlzLmEpKTwwKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSx3MikpKSk7bj1uKjE2K2EsdD1uO2JyZWFrO2Nhc2UgMTE4OmlmKExpKHRoaXMpLHRoaXMuYyE9MHx8KGE9V20odGhpcy5hKSk8MCl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksdzIpKSkpO2lmKG49YSxMaSh0aGlzKSx0aGlzLmMhPTB8fChhPVdtKHRoaXMuYSkpPDApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLHcyKSkpKTtpZihuPW4qMTYrYSxMaSh0aGlzKSx0aGlzLmMhPTB8fChhPVdtKHRoaXMuYSkpPDApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLHcyKSkpKTtpZihuPW4qMTYrYSxMaSh0aGlzKSx0aGlzLmMhPTB8fChhPVdtKHRoaXMuYSkpPDApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLHcyKSkpKTtpZihuPW4qMTYrYSxMaSh0aGlzKSx0aGlzLmMhPTB8fChhPVdtKHRoaXMuYSkpPDApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLHcyKSkpKTtpZihuPW4qMTYrYSxMaSh0aGlzKSx0aGlzLmMhPTB8fChhPVdtKHRoaXMuYSkpPDApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLHcyKSkpKTtpZihuPW4qMTYrYSxuPlRUKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSwicGFyc2VyLmRlc2NhcHBlLjQiKSkpKTt0PW47YnJlYWs7Y2FzZSA2NTpjYXNlIDkwOmNhc2UgMTIyOnRocm93IHVlKG5ldyByaShhaSgoSnIoKSxHNHQpKSkpfXJldHVybiB0fSxoLmRtPWZ1bmN0aW9uKHQpe3ZhciBuLHI7c3dpdGNoKHQpe2Nhc2UgMTAwOnI9KHRoaXMuZSYzMik9PTMyP19iKCJOZCIsITApOihEaSgpLE1ZKTticmVhaztjYXNlIDY4OnI9KHRoaXMuZSYzMik9PTMyP19iKCJOZCIsITEpOihEaSgpLFpQZSk7YnJlYWs7Y2FzZSAxMTk6cj0odGhpcy5lJjMyKT09MzI/X2IoIklzV29yZCIsITApOihEaSgpLGxDKTticmVhaztjYXNlIDg3OnI9KHRoaXMuZSYzMik9PTMyP19iKCJJc1dvcmQiLCExKTooRGkoKSx0QmUpO2JyZWFrO2Nhc2UgMTE1OnI9KHRoaXMuZSYzMik9PTMyP19iKCJJc1NwYWNlIiwhMCk6KERpKCksbDkpO2JyZWFrO2Nhc2UgODM6cj0odGhpcy5lJjMyKT09MzI/X2IoIklzU3BhY2UiLCExKTooRGkoKSxlQmUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgdWUobmV3IEFjKChuPXQsRzV0K24udG9TdHJpbmcoMTYpKSkpfXJldHVybiByfSxoLmVtPWZ1bmN0aW9uKHQpe3ZhciBuLHIsYSxvLGYsZyx3LEUsQyxMLEIsejtmb3IodGhpcy5iPTEsTGkodGhpcyksbj1udWxsLHRoaXMuYz09MCYmdGhpcy5hPT05ND8oTGkodGhpcyksdD9MPShEaSgpLERpKCksbmV3IF9oKDUpKToobj0oRGkoKSxEaSgpLG5ldyBfaCg0KSksRXUobiwwLFRUKSxMPW5ldyBfaCg0KSkpOkw9KERpKCksRGkoKSxuZXcgX2goNCkpLG89ITA7KHo9dGhpcy5jKSE9MSYmISh6PT0wJiZ0aGlzLmE9PTkzJiYhbyk7KXtpZihvPSExLHI9dGhpcy5hLGE9ITEsej09MTApc3dpdGNoKHIpe2Nhc2UgMTAwOmNhc2UgNjg6Y2FzZSAxMTk6Y2FzZSA4NzpjYXNlIDExNTpjYXNlIDgzOkt5KEwsdGhpcy5kbShyKSksYT0hMDticmVhaztjYXNlIDEwNTpjYXNlIDczOmNhc2UgOTk6Y2FzZSA2NzpyPXRoaXMudW0oTCxyKSxyPDAmJihhPSEwKTticmVhaztjYXNlIDExMjpjYXNlIDgwOmlmKEI9dzllKHRoaXMsciksIUIpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLHQwZSkpKSk7S3koTCxCKSxhPSEwO2JyZWFrO2RlZmF1bHQ6cj10aGlzLmNtKCl9ZWxzZSBpZih6PT0yMCl7aWYoZz1Oayh0aGlzLmksNTgsdGhpcy5kKSxnPDApdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGtTZSkpKSk7aWYodz0hMCxjbyh0aGlzLmksdGhpcy5kKT09OTQmJigrK3RoaXMuZCx3PSExKSxmPXRmKHRoaXMuaSx0aGlzLmQsZyksRT12bHQoZix3LCh0aGlzLmUmNTEyKT09NTEyKSwhRSl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksUjR0KSkpKTtpZihLeShMLEUpLGE9ITAsZysxPj10aGlzLmp8fGNvKHRoaXMuaSxnKzEpIT05Myl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksa1NlKSkpKTt0aGlzLmQ9ZysyfWlmKExpKHRoaXMpLCFhKWlmKHRoaXMuYyE9MHx8dGhpcy5hIT00NSlFdShMLHIscik7ZWxzZXtpZihMaSh0aGlzKSwoej10aGlzLmMpPT0xKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxVRykpKSk7ej09MCYmdGhpcy5hPT05Mz8oRXUoTCxyLHIpLEV1KEwsNDUsNDUpKTooQz10aGlzLmEsej09MTAmJihDPXRoaXMuY20oKSksTGkodGhpcyksRXUoTCxyLEMpKX0odGhpcy5lJm0wKT09bTAmJnRoaXMuYz09MCYmdGhpcy5hPT00NCYmTGkodGhpcyl9aWYodGhpcy5jPT0xKXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxVRykpKSk7cmV0dXJuIG4mJihuTChuLEwpLEw9biksYzYoTCksZUwoTCksdGhpcy5iPTAsTGkodGhpcyksTH0saC5mbT1mdW5jdGlvbigpe3ZhciB0LG4scixhO2ZvcihyPXRoaXMuZW0oITEpOyhhPXRoaXMuYykhPTc7KWlmKHQ9dGhpcy5hLGE9PTAmJih0PT00NXx8dD09MzgpfHxhPT00KXtpZihMaSh0aGlzKSx0aGlzLmMhPTkpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLCQ0dCkpKSk7aWYobj10aGlzLmVtKCExKSxhPT00KUt5KHIsbik7ZWxzZSBpZih0PT00NSluTChyLG4pO2Vsc2UgaWYodD09MzgpQ3Z0KHIsbik7ZWxzZSB0aHJvdyB1ZShuZXcgQWMoIkFTU0VSVCIpKX1lbHNlIHRocm93IHVlKG5ldyByaShhaSgoSnIoKSx6NHQpKSkpO3JldHVybiBMaSh0aGlzKSxyfSxoLmdtPWZ1bmN0aW9uKCl7dmFyIHQsbjtyZXR1cm4gdD10aGlzLmEtNDgsbj0oRGkoKSxEaSgpLG5ldyBjb2UoMTIsbnVsbCx0KSksIXRoaXMuZyYmKHRoaXMuZz1uZXcganopLFJ6KHRoaXMuZyxuZXcgRXdlKHQpKSxMaSh0aGlzKSxufSxoLmhtPWZ1bmN0aW9uKCl7cmV0dXJuIExpKHRoaXMpLERpKCksRUF0fSxoLmltPWZ1bmN0aW9uKCl7cmV0dXJuIExpKHRoaXMpLERpKCksa0F0fSxoLmptPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGJmKSkpKX0saC5rbT1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyByaShhaSgoSnIoKSxiZikpKSl9LGgubG09ZnVuY3Rpb24oKXtyZXR1cm4gTGkodGhpcyksRXluKCl9LGgubW09ZnVuY3Rpb24oKXtyZXR1cm4gTGkodGhpcyksRGkoKSxDQXR9LGgubm09ZnVuY3Rpb24oKXtyZXR1cm4gTGkodGhpcyksRGkoKSxfQXR9LGgub209ZnVuY3Rpb24oKXt2YXIgdDtpZih0aGlzLmQ+PXRoaXMuanx8KCh0PWNvKHRoaXMuaSx0aGlzLmQrKykpJjY1NTA0KSE9NjQpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLFA0dCkpKSk7cmV0dXJuIExpKHRoaXMpLERpKCksRGkoKSxuZXcgbmcoMCx0LTY0KX0saC5wbT1mdW5jdGlvbigpe3JldHVybiBMaSh0aGlzKSxTQW4oKX0saC5xbT1mdW5jdGlvbigpe3JldHVybiBMaSh0aGlzKSxEaSgpLEFBdH0saC5ybT1mdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PShEaSgpLERpKCksbmV3IG5nKDAsMTA1KSksTGkodGhpcyksdH0saC5zbT1mdW5jdGlvbigpe3JldHVybiBMaSh0aGlzKSxEaSgpLFNBdH0saC50bT1mdW5jdGlvbigpe3JldHVybiBMaSh0aGlzKSxEaSgpLFRBdH0saC51bT1mdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLmNtKCl9LGgudm09ZnVuY3Rpb24oKXtyZXR1cm4gTGkodGhpcyksRGkoKSxRUGV9LGgud209ZnVuY3Rpb24oKXt2YXIgdCxuLHIsYSxvO2lmKHRoaXMuZCsxPj10aGlzLmopdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLEk0dCkpKSk7aWYoYT0tMSxuPW51bGwsdD1jbyh0aGlzLmksdGhpcy5kKSw0OTw9dCYmdDw9NTcpe2lmKGE9dC00OCwhdGhpcy5nJiYodGhpcy5nPW5ldyBqeiksUnoodGhpcy5nLG5ldyBFd2UoYSkpLCsrdGhpcy5kLGNvKHRoaXMuaSx0aGlzLmQpIT00MSl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksb3YpKSkpOysrdGhpcy5kfWVsc2Ugc3dpdGNoKHQ9PTYzJiYtLXRoaXMuZCxMaSh0aGlzKSxuPUdrZSh0aGlzKSxuLmUpe2Nhc2UgMjA6Y2FzZSAyMTpjYXNlIDIyOmNhc2UgMjM6YnJlYWs7Y2FzZSA4OmlmKHRoaXMuYyE9Nyl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksb3YpKSkpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgdWUobmV3IHJpKGFpKChKcigpLE80dCkpKSl9aWYoTGkodGhpcyksbz1qdyh0aGlzKSxyPW51bGwsby5lPT0yKXtpZihvLlBtKCkhPTIpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLE40dCkpKSk7cj1vLkxtKDEpLG89by5MbSgwKX1pZih0aGlzLmMhPTcpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLG92KSkpKTtyZXR1cm4gTGkodGhpcyksRGkoKSxEaSgpLG5ldyBabHQoYSxuLG8scil9LGgueG09ZnVuY3Rpb24oKXtyZXR1cm4gTGkodGhpcyksRGkoKSxKUGV9LGgueW09ZnVuY3Rpb24oKXt2YXIgdDtpZihMaSh0aGlzKSx0PWJIKDI0LGp3KHRoaXMpKSx0aGlzLmMhPTcpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLG92KSkpKTtyZXR1cm4gTGkodGhpcyksdH0saC56bT1mdW5jdGlvbigpe3ZhciB0O2lmKExpKHRoaXMpLHQ9YkgoMjAsancodGhpcykpLHRoaXMuYyE9Nyl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksb3YpKSkpO3JldHVybiBMaSh0aGlzKSx0fSxoLkFtPWZ1bmN0aW9uKCl7dmFyIHQ7aWYoTGkodGhpcyksdD1iSCgyMixqdyh0aGlzKSksdGhpcy5jIT03KXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxvdikpKSk7cmV0dXJuIExpKHRoaXMpLHR9LGguQm09ZnVuY3Rpb24oKXt2YXIgdCxuLHIsYSxvO2Zvcih0PTAscj0wLG49LTE7dGhpcy5kPHRoaXMuaiYmKG49Y28odGhpcy5pLHRoaXMuZCksbz1DOWUobiksbyE9MCk7KXR8PW8sKyt0aGlzLmQ7aWYodGhpcy5kPj10aGlzLmopdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLHlTZSkpKSk7aWYobj09NDUpe2ZvcigrK3RoaXMuZDt0aGlzLmQ8dGhpcy5qJiYobj1jbyh0aGlzLmksdGhpcy5kKSxvPUM5ZShuKSxvIT0wKTspcnw9bywrK3RoaXMuZDtpZih0aGlzLmQ+PXRoaXMuail0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCkseVNlKSkpKX1pZihuPT01OCl7aWYoKyt0aGlzLmQsTGkodGhpcyksYT1Xc3QoancodGhpcyksdCxyKSx0aGlzLmMhPTcpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLG92KSkpKTtMaSh0aGlzKX1lbHNlIGlmKG49PTQxKSsrdGhpcy5kLExpKHRoaXMpLGE9V3N0KGp3KHRoaXMpLHQscik7ZWxzZSB0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksRDR0KSkpKTtyZXR1cm4gYX0saC5DbT1mdW5jdGlvbigpe3ZhciB0O2lmKExpKHRoaXMpLHQ9YkgoMjEsancodGhpcykpLHRoaXMuYyE9Nyl0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksb3YpKSkpO3JldHVybiBMaSh0aGlzKSx0fSxoLkRtPWZ1bmN0aW9uKCl7dmFyIHQ7aWYoTGkodGhpcyksdD1iSCgyMyxqdyh0aGlzKSksdGhpcy5jIT03KXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxvdikpKSk7cmV0dXJuIExpKHRoaXMpLHR9LGguRW09ZnVuY3Rpb24oKXt2YXIgdCxuO2lmKExpKHRoaXMpLHQ9dGhpcy5mKyssbj1CYWUoancodGhpcyksdCksdGhpcy5jIT03KXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxvdikpKSk7cmV0dXJuIExpKHRoaXMpLG59LGguRm09ZnVuY3Rpb24oKXt2YXIgdDtpZihMaSh0aGlzKSx0PUJhZShqdyh0aGlzKSwwKSx0aGlzLmMhPTcpdGhyb3cgdWUobmV3IHJpKGFpKChKcigpLG92KSkpKTtyZXR1cm4gTGkodGhpcyksdH0saC5HbT1mdW5jdGlvbih0KXtyZXR1cm4gTGkodGhpcyksdGhpcy5jPT01PyhMaSh0aGlzKSxvSCh0LChEaSgpLERpKCksbmV3IFR5KDksdCkpKSk6b0godCwoRGkoKSxEaSgpLG5ldyBUeSgzLHQpKSl9LGguSG09ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIExpKHRoaXMpLG49KERpKCksRGkoKSxuZXcgQl8oMikpLHRoaXMuYz09NT8oTGkodGhpcyksUW0obixXTSksUW0obix0KSk6KFFtKG4sdCksUW0obixXTSkpLG59LGguSW09ZnVuY3Rpb24odCl7cmV0dXJuIExpKHRoaXMpLHRoaXMuYz09NT8oTGkodGhpcyksRGkoKSxEaSgpLG5ldyBUeSg5LHQpKTooRGkoKSxEaSgpLG5ldyBUeSgzLHQpKX0saC5hPTAsaC5iPTAsaC5jPTAsaC5kPTAsaC5lPTAsaC5mPTEsaC5nPW51bGwsaC5qPTAsSSh5MiwiUmVnRXgvUmVnZXhQYXJzZXIiLDgzNiksRCgxOTQ3LDgzNix7fSxnSmUpLGguYm09ZnVuY3Rpb24odCl7cmV0dXJuITF9LGguY209ZnVuY3Rpb24oKXtyZXR1cm4gZWtlKHRoaXMpfSxoLmRtPWZ1bmN0aW9uKHQpe3JldHVybiBZRSh0KX0saC5lbT1mdW5jdGlvbih0KXtyZXR1cm4geXd0KHRoaXMpfSxoLmZtPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGJmKSkpKX0saC5nbT1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyByaShhaSgoSnIoKSxiZikpKSl9LGguaG09ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksYmYpKSkpfSxoLmltPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGJmKSkpKX0saC5qbT1mdW5jdGlvbigpe3JldHVybiBMaSh0aGlzKSxZRSg2Nyl9LGgua209ZnVuY3Rpb24oKXtyZXR1cm4gTGkodGhpcyksWUUoNzMpfSxoLmxtPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGJmKSkpKX0saC5tbT1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyByaShhaSgoSnIoKSxiZikpKSl9LGgubm09ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksYmYpKSkpfSxoLm9tPWZ1bmN0aW9uKCl7cmV0dXJuIExpKHRoaXMpLFlFKDk5KX0saC5wbT1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyByaShhaSgoSnIoKSxiZikpKSl9LGgucW09ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksYmYpKSkpfSxoLnJtPWZ1bmN0aW9uKCl7cmV0dXJuIExpKHRoaXMpLFlFKDEwNSl9LGguc209ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksYmYpKSkpfSxoLnRtPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGJmKSkpKX0saC51bT1mdW5jdGlvbih0LG4pe3JldHVybiBLeSh0LFlFKG4pKSwtMX0saC52bT1mdW5jdGlvbigpe3JldHVybiBMaSh0aGlzKSxEaSgpLERpKCksbmV3IG5nKDAsOTQpfSxoLndtPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGJmKSkpKX0saC54bT1mdW5jdGlvbigpe3JldHVybiBMaSh0aGlzKSxEaSgpLERpKCksbmV3IG5nKDAsMzYpfSxoLnltPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGJmKSkpKX0saC56bT1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyByaShhaSgoSnIoKSxiZikpKSl9LGguQW09ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksYmYpKSkpfSxoLkJtPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IHJpKGFpKChKcigpLGJmKSkpKX0saC5DbT1mdW5jdGlvbigpe3Rocm93IHVlKG5ldyByaShhaSgoSnIoKSxiZikpKSl9LGguRG09ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksYmYpKSkpfSxoLkVtPWZ1bmN0aW9uKCl7dmFyIHQ7aWYoTGkodGhpcyksdD1CYWUoancodGhpcyksMCksdGhpcy5jIT03KXRocm93IHVlKG5ldyByaShhaSgoSnIoKSxvdikpKSk7cmV0dXJuIExpKHRoaXMpLHR9LGguRm09ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgcmkoYWkoKEpyKCksYmYpKSkpfSxoLkdtPWZ1bmN0aW9uKHQpe3JldHVybiBMaSh0aGlzKSxvSCh0LChEaSgpLERpKCksbmV3IFR5KDMsdCkpKX0saC5IbT1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gTGkodGhpcyksbj0oRGkoKSxEaSgpLG5ldyBCXygyKSksUW0obix0KSxRbShuLFdNKSxufSxoLkltPWZ1bmN0aW9uKHQpe3JldHVybiBMaSh0aGlzKSxEaSgpLERpKCksbmV3IFR5KDMsdCl9O3ZhciBsNz1udWxsLGNDPW51bGw7SSh5MiwiUmVnRXgvUGFyc2VyRm9yWE1MU2NoZW1hIiwxOTQ3KSxEKDEyMiwxLENULFh2KSxoLkptPWZ1bmN0aW9uKHQpe3Rocm93IHVlKG5ldyBBYygiTm90IHN1cHBvcnRlZC4iKSl9LGguS209ZnVuY3Rpb24oKXtyZXR1cm4tMX0saC5MbT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbH0saC5NbT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxoLk5tPWZ1bmN0aW9uKHQpe30saC5PbT1mdW5jdGlvbih0KXt9LGguUG09ZnVuY3Rpb24oKXtyZXR1cm4gMH0saC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLlFtKDApfSxoLlFtPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmU9PTExPyIuIjoiIn0saC5lPTA7dmFyIFdQZSx1QyxLTSx4QXQsWVBlLFA0PW51bGwsTVksY3BlPW51bGwsWFBlLFdNLHVwZT1udWxsLFFQZSxKUGUsWlBlLGVCZSx0QmUsa0F0LGw5LEVBdCxUQXQsQ0F0LFNBdCxsQyxfQXQsQUF0LEJPbj1JKHkyLCJSZWdFeC9Ub2tlbiIsMTIyKTtEKDEzOCwxMjIsezM6MSwxMzg6MSwxMjI6MX0sX2gpLGguUW09ZnVuY3Rpb24odCl7dmFyIG4scixhO2lmKHRoaXMuZT09NClpZih0aGlzPT1YUGUpcj0iLiI7ZWxzZSBpZih0aGlzPT1NWSlyPSJcXGQiO2Vsc2UgaWYodGhpcz09bEMpcj0iXFx3IjtlbHNlIGlmKHRoaXM9PWw5KXI9IlxccyI7ZWxzZXtmb3IoYT1uZXcgVXAsYS5hKz0iWyIsbj0wO248dGhpcy5iLmxlbmd0aDtuKz0yKXQmbTAmJm4+MCYmKGEuYSs9IiwiKSx0aGlzLmJbbl09PT10aGlzLmJbbisxXT9YbyhhLGdQKHRoaXMuYltuXSkpOihYbyhhLGdQKHRoaXMuYltuXSkpLGEuYSs9Ii0iLFhvKGEsZ1AodGhpcy5iW24rMV0pKSk7YS5hKz0iXSIscj1hLmF9ZWxzZSBpZih0aGlzPT1aUGUpcj0iXFxEIjtlbHNlIGlmKHRoaXM9PXRCZSlyPSJcXFciO2Vsc2UgaWYodGhpcz09ZUJlKXI9IlxcUyI7ZWxzZXtmb3IoYT1uZXcgVXAsYS5hKz0iW14iLG49MDtuPHRoaXMuYi5sZW5ndGg7bis9Mil0Jm0wJiZuPjAmJihhLmErPSIsIiksdGhpcy5iW25dPT09dGhpcy5iW24rMV0/WG8oYSxnUCh0aGlzLmJbbl0pKTooWG8oYSxnUCh0aGlzLmJbbl0pKSxhLmErPSItIixYbyhhLGdQKHRoaXMuYltuKzFdKSkpO2EuYSs9Il0iLHI9YS5hfXJldHVybiByfSxoLmE9ITEsaC5jPSExLEkoeTIsIlJlZ0V4L1JhbmdlVG9rZW4iLDEzOCksRCg1OTIsMSx7NTkyOjF9LEV3ZSksaC5hPTAsSSh5MiwiUmVnRXgvUmVnZXhQYXJzZXIvUmVmZXJlbmNlUG9zaXRpb24iLDU5MiksRCg1OTEsMSx7MzoxLDU5MToxfSxMWmUpLGguRmI9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIHQ9PW51bGx8fCFEZSh0LDU5MSk/ITE6KG49bCh0LDU5MSksdm4odGhpcy5iLG4uYikmJnRoaXMuYT09bi5hKX0saC5IYj1mdW5jdGlvbigpe3JldHVybiBzMih0aGlzLmIrIi8iK0s5ZSh0aGlzLmEpKX0saC5JYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmMuUW0odGhpcy5hKX0saC5hPTAsSSh5MiwiUmVnRXgvUmVndWxhckV4cHJlc3Npb24iLDU5MSksRCgyMjgsMTIyLENULG5nKSxoLkttPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0saC5RbT1mdW5jdGlvbih0KXt2YXIgbixyLGE7c3dpdGNoKHRoaXMuZSl7Y2FzZSAwOnN3aXRjaCh0aGlzLmEpe2Nhc2UgMTI0OmNhc2UgNDI6Y2FzZSA0MzpjYXNlIDYzOmNhc2UgNDA6Y2FzZSA0MTpjYXNlIDQ2OmNhc2UgOTE6Y2FzZSAxMjM6Y2FzZSA5MjphPSJcXCIraGFlKHRoaXMuYSZacyk7YnJlYWs7Y2FzZSAxMjphPSJcXGYiO2JyZWFrO2Nhc2UgMTA6YT0iXFxuIjticmVhaztjYXNlIDEzOmE9IlxcciI7YnJlYWs7Y2FzZSA5OmE9IlxcdCI7YnJlYWs7Y2FzZSAyNzphPSJcXGUiO2JyZWFrO2RlZmF1bHQ6dGhpcy5hPj1Jbz8ocj0obj10aGlzLmE+Pj4wLCIwIituLnRvU3RyaW5nKDE2KSksYT0iXFx2Iit0ZihyLHIubGVuZ3RoLTYsci5sZW5ndGgpKTphPSIiK2hhZSh0aGlzLmEmWnMpfWJyZWFrO2Nhc2UgODp0aGlzPT1RUGV8fHRoaXM9PUpQZT9hPSIiK2hhZSh0aGlzLmEmWnMpOmE9IlxcIitoYWUodGhpcy5hJlpzKTticmVhaztkZWZhdWx0OmE9bnVsbH1yZXR1cm4gYX0saC5hPTAsSSh5MiwiUmVnRXgvVG9rZW4vQ2hhclRva2VuIiwyMjgpLEQoMzE4LDEyMixDVCxUeSksaC5MbT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hfSxoLk5tPWZ1bmN0aW9uKHQpe3RoaXMuYj10fSxoLk9tPWZ1bmN0aW9uKHQpe3RoaXMuYz10fSxoLlBtPWZ1bmN0aW9uKCl7cmV0dXJuIDF9LGguUW09ZnVuY3Rpb24odCl7dmFyIG47aWYodGhpcy5lPT0zKWlmKHRoaXMuYzwwJiZ0aGlzLmI8MCluPXRoaXMuYS5RbSh0KSsiKiI7ZWxzZSBpZih0aGlzLmM9PXRoaXMuYiluPXRoaXMuYS5RbSh0KSsieyIrdGhpcy5jKyJ9IjtlbHNlIGlmKHRoaXMuYz49MCYmdGhpcy5iPj0wKW49dGhpcy5hLlFtKHQpKyJ7Iit0aGlzLmMrIiwiK3RoaXMuYisifSI7ZWxzZSBpZih0aGlzLmM+PTAmJnRoaXMuYjwwKW49dGhpcy5hLlFtKHQpKyJ7Iit0aGlzLmMrIix9IjtlbHNlIHRocm93IHVlKG5ldyBBYygiVG9rZW4jdG9TdHJpbmcoKTogQ0xPU1VSRSAiK3RoaXMuYytDbyt0aGlzLmIpKTtlbHNlIGlmKHRoaXMuYzwwJiZ0aGlzLmI8MCluPXRoaXMuYS5RbSh0KSsiKj8iO2Vsc2UgaWYodGhpcy5jPT10aGlzLmIpbj10aGlzLmEuUW0odCkrInsiK3RoaXMuYysifT8iO2Vsc2UgaWYodGhpcy5jPj0wJiZ0aGlzLmI+PTApbj10aGlzLmEuUW0odCkrInsiK3RoaXMuYysiLCIrdGhpcy5iKyJ9PyI7ZWxzZSBpZih0aGlzLmM+PTAmJnRoaXMuYjwwKW49dGhpcy5hLlFtKHQpKyJ7Iit0aGlzLmMrIix9PyI7ZWxzZSB0aHJvdyB1ZShuZXcgQWMoIlRva2VuI3RvU3RyaW5nKCk6IE5PTkdSRUVEWUNMT1NVUkUgIit0aGlzLmMrQ28rdGhpcy5iKSk7cmV0dXJuIG59LGguYj0wLGguYz0wLEkoeTIsIlJlZ0V4L1Rva2VuL0Nsb3N1cmVUb2tlbiIsMzE4KSxEKDgzNywxMjIsQ1QsZjVlKSxoLkxtPWZ1bmN0aW9uKHQpe3JldHVybiB0PT0wP3RoaXMuYTp0aGlzLmJ9LGguUG09ZnVuY3Rpb24oKXtyZXR1cm4gMn0saC5RbT1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gdGhpcy5iLmU9PTMmJnRoaXMuYi5MbSgwKT09dGhpcy5hP249dGhpcy5hLlFtKHQpKyIrIjp0aGlzLmIuZT09OSYmdGhpcy5iLkxtKDApPT10aGlzLmE/bj10aGlzLmEuUW0odCkrIis/IjpuPXRoaXMuYS5RbSh0KSsoIiIrdGhpcy5iLlFtKHQpKSxufSxJKHkyLCJSZWdFeC9Ub2tlbi9Db25jYXRUb2tlbiIsODM3KSxEKDE5NDUsMTIyLENULFpsdCksaC5MbT1mdW5jdGlvbih0KXtpZih0PT0wKXJldHVybiB0aGlzLmQ7aWYodD09MSlyZXR1cm4gdGhpcy5iO3Rocm93IHVlKG5ldyBBYygiSW50ZXJuYWwgRXJyb3I6ICIrdCkpfSxoLlBtPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYj8yOjF9LGguUW09ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIHRoaXMuYz4wP249Iig/KCIrdGhpcy5jKyIpIjp0aGlzLmEuZT09OD9uPSIoPygiK3RoaXMuYSsiKSI6bj0iKD8iK3RoaXMuYSx0aGlzLmI/bis9dGhpcy5kKyJ8Iit0aGlzLmIrIikiOm4rPXRoaXMuZCsiKSIsbn0saC5jPTAsSSh5MiwiUmVnRXgvVG9rZW4vQ29uZGl0aW9uVG9rZW4iLDE5NDUpLEQoMTk0NiwxMjIsQ1QsSG90KSxoLkxtPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmJ9LGguUG09ZnVuY3Rpb24oKXtyZXR1cm4gMX0saC5RbT1mdW5jdGlvbih0KXtyZXR1cm4iKD8iKyh0aGlzLmE9PTA/IiI6SzllKHRoaXMuYSkpKyh0aGlzLmM9PTA/IiI6SzllKHRoaXMuYykpKyI6Iit0aGlzLmIuUW0odCkrIikifSxoLmE9MCxoLmM9MCxJKHkyLCJSZWdFeC9Ub2tlbi9Nb2RpZmllclRva2VuIiwxOTQ2KSxEKDgzOCwxMjIsQ1QsazVlKSxoLkxtPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmF9LGguUG09ZnVuY3Rpb24oKXtyZXR1cm4gMX0saC5RbT1mdW5jdGlvbih0KXt2YXIgbjtzd2l0Y2gobj1udWxsLHRoaXMuZSl7Y2FzZSA2OnRoaXMuYj09MD9uPSIoPzoiK3RoaXMuYS5RbSh0KSsiKSI6bj0iKCIrdGhpcy5hLlFtKHQpKyIpIjticmVhaztjYXNlIDIwOm49Iig/PSIrdGhpcy5hLlFtKHQpKyIpIjticmVhaztjYXNlIDIxOm49Iig/ISIrdGhpcy5hLlFtKHQpKyIpIjticmVhaztjYXNlIDIyOm49Iig/PD0iK3RoaXMuYS5RbSh0KSsiKSI7YnJlYWs7Y2FzZSAyMzpuPSIoPzwhIit0aGlzLmEuUW0odCkrIikiO2JyZWFrO2Nhc2UgMjQ6bj0iKD8+Iit0aGlzLmEuUW0odCkrIikifXJldHVybiBufSxoLmI9MCxJKHkyLCJSZWdFeC9Ub2tlbi9QYXJlblRva2VuIiw4MzgpLEQoNTMwLDEyMix7MzoxLDEyMjoxLDUzMDoxfSxjb2UpLGguTW09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLlFtPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmU9PTEyPyJcXCIrdGhpcy5hOnZUbih0aGlzLmIpfSxoLmE9MCxJKHkyLCJSZWdFeC9Ub2tlbi9TdHJpbmdUb2tlbiIsNTMwKSxEKDQ3NywxMjIsQ1QsQl8pLGguSm09ZnVuY3Rpb24odCl7UW0odGhpcyx0KX0saC5MbT1mdW5jdGlvbih0KXtyZXR1cm4gbCh4dyh0aGlzLmEsdCksMTIyKX0saC5QbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmE/dGhpcy5hLmEuYy5sZW5ndGg6MH0saC5RbT1mdW5jdGlvbih0KXt2YXIgbixyLGEsbyxmO2lmKHRoaXMuZT09MSl7aWYodGhpcy5hLmEuYy5sZW5ndGg9PTIpbj1sKHh3KHRoaXMuYSwwKSwxMjIpLHI9bCh4dyh0aGlzLmEsMSksMTIyKSxyLmU9PTMmJnIuTG0oMCk9PW4/bz1uLlFtKHQpKyIrIjpyLmU9PTkmJnIuTG0oMCk9PW4/bz1uLlFtKHQpKyIrPyI6bz1uLlFtKHQpKygiIityLlFtKHQpKTtlbHNle2ZvcihmPW5ldyBVcCxhPTA7YTx0aGlzLmEuYS5jLmxlbmd0aDthKyspWG8oZixsKHh3KHRoaXMuYSxhKSwxMjIpLlFtKHQpKTtvPWYuYX1yZXR1cm4gb31pZih0aGlzLmEuYS5jLmxlbmd0aD09MiYmbCh4dyh0aGlzLmEsMSksMTIyKS5lPT03KW89bCh4dyh0aGlzLmEsMCksMTIyKS5RbSh0KSsiPyI7ZWxzZSBpZih0aGlzLmEuYS5jLmxlbmd0aD09MiYmbCh4dyh0aGlzLmEsMCksMTIyKS5lPT03KW89bCh4dyh0aGlzLmEsMSksMTIyKS5RbSh0KSsiPz8iO2Vsc2V7Zm9yKGY9bmV3IFVwLFhvKGYsbCh4dyh0aGlzLmEsMCksMTIyKS5RbSh0KSksYT0xO2E8dGhpcy5hLmEuYy5sZW5ndGg7YSsrKWYuYSs9InwiLFhvKGYsbCh4dyh0aGlzLmEsYSksMTIyKS5RbSh0KSk7bz1mLmF9cmV0dXJuIG99LEkoeTIsIlJlZ0V4L1Rva2VuL1VuaW9uVG9rZW4iLDQ3NyksRCg1MjcsMSx7NjAwOjF9LEpJKSxoLkliPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5ifSxJKFg1dCwiWE1MVHlwZVV0aWwvUGF0dGVybk1hdGNoZXJJbXBsIiw1MjcpLEQoMTcwNywxNTI3LHt9LGttKTt2YXIgTEF0O0koWDV0LCJYTUxUeXBlVmFsaWRhdG9yIiwxNzA3KSxEKDI3MCwxLGhnLERtKSxoLkpjPWZ1bmN0aW9uKHQpe3RvKHRoaXMsdCl9LGguS2M9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5iLXRoaXMuYSkqdGhpcy5jPDA/dG06bmV3IGNiKHRoaXMpfSxoLmE9MCxoLmI9MCxoLmM9MDt2YXIgdG07SSh6U2UsIkV4Y2x1c2l2ZVJhbmdlIiwyNzApLEQoMTA4NCwxLGxnLFokKSxoLlJiPWZ1bmN0aW9uKHQpe2wodCwxNyksWmxuKCl9LGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5QYj1mdW5jdGlvbigpe3JldHVybiB6dW4oKX0saC5VYj1mdW5jdGlvbigpe3JldHVybiBxdW4oKX0saC5XYj1mdW5jdGlvbih0KXtsKHQsMTcpLHRobigpfSxoLk9iPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGguU2I9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saC5UYj1mdW5jdGlvbigpe3JldHVybi0xfSxoLlZiPWZ1bmN0aW9uKCl7cmV0dXJuLTF9LGguUWI9ZnVuY3Rpb24oKXt0aHJvdyB1ZShuZXcgSHAoWjV0KSl9LEkoelNlLCJFeGNsdXNpdmVSYW5nZS8xIiwxMDg0KSxEKDI1OCwxLGxnLGNiKSxoLlJiPWZ1bmN0aW9uKHQpe2wodCwxNyksZWhuKCl9LGguTmI9ZnVuY3Rpb24odCl7WmEodGhpcyx0KX0saC5QYj1mdW5jdGlvbigpe3JldHVybiBXeW4odGhpcyl9LGguVWI9ZnVuY3Rpb24oKXtyZXR1cm4gQnZuKHRoaXMpfSxoLldiPWZ1bmN0aW9uKHQpe2wodCwxNyksbmhuKCl9LGguT2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLmM8MD90aGlzLmE+PXRoaXMuYy5iOnRoaXMuYTw9dGhpcy5jLmJ9LGguU2I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iPjB9LGguVGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifSxoLlZiPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYi0xfSxoLlFiPWZ1bmN0aW9uKCl7dGhyb3cgdWUobmV3IEhwKFo1dCkpfSxoLmE9MCxoLmI9MCxJKHpTZSwiRXhjbHVzaXZlUmFuZ2UvUmFuZ2VJdGVyYXRvciIsMjU4KTt2YXIga2Y9R2soR0csIkMiKSxWcj1HayhMTCwiSSIpLGloPUdrKEN4LCJaIiksbm09R2soTUwsIkoiKSxBbD1HayhTTCwiQiIpLE5hPUdrKF9MLCJEIiksQjQ9R2soQUwsIkYiKSxoNz1HayhETCwiUyIpLEZPbj1rcygib3JnLmVjbGlwc2UuZWxrLmNvcmUubGFiZWxzIiwiSUxhYmVsTWFuYWdlciIpLG5CZT1rcyhTbywiRGlhZ25vc3RpY0NoYWluIiksckJlPWtzKF81dCwiUmVzb3VyY2VTZXQiKSxpQmU9SShTbywiSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiIsbnVsbCksTUF0PShIeigpLFFtbiksREF0PURBdD1xOG47VnduKCRjbiksJHduKCJwZXJtUHJvcHMiLFtbWyJsb2NhbGUiLCJkZWZhdWx0Il0sW2U2dCwiZ2Vja28xXzgiXV0sW1sibG9jYWxlIiwiZGVmYXVsdCJdLFtlNnQsInNhZmFyaSJdXV0pLERBdChudWxsLCJlbGsiLG51bGwpfSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx0eXBlb2YgQWc8InUiP0FnOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSwzOltmdW5jdGlvbih1LGQscCl7ZnVuY3Rpb24gdihBLFApe2lmKCEoQSBpbnN0YW5jZW9mIFApKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGIoQSxQKXtpZighQSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBQJiYodHlwZW9mIFA9PSJvYmplY3QifHx0eXBlb2YgUD09ImZ1bmN0aW9uIik/UDpBfWZ1bmN0aW9uIHkoQSxQKXtpZih0eXBlb2YgUCE9ImZ1bmN0aW9uIiYmUCE9PW51bGwpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiBQKTtBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFAmJlAucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6QSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxQJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihBLFApOkEuX19wcm90b19fPVApfXZhciBUPXUoIi4vZWxrLWFwaS5qcyIpLmRlZmF1bHQsXz1mdW5jdGlvbihBKXt5KFAsQSk7ZnVuY3Rpb24gUCgpe3ZhciBSPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTp7fTt2KHRoaXMsUCk7dmFyIEY9T2JqZWN0LmFzc2lnbih7fSxSKSxqPSExO3RyeXt1LnJlc29sdmUoIndlYi13b3JrZXIiKSxqPSEwfWNhdGNoe31pZihSLndvcmtlclVybClpZihqKXt2YXIgSz11KCJ3ZWItd29ya2VyIik7Ri53b3JrZXJGYWN0b3J5PWZ1bmN0aW9uKG9lKXtyZXR1cm4gbmV3IEsob2UpfX1lbHNlIGNvbnNvbGUud2FybihgV2ViIHdvcmtlciByZXF1ZXN0ZWQgYnV0ICd3ZWItd29ya2VyJyBwYWNrYWdlIG5vdCBpbnN0YWxsZWQuIApDb25zaWRlciBpbnN0YWxsaW5nIHRoZSBwYWNrYWdlIG9yIHBhc3MgeW91ciBvd24gJ3dvcmtlckZhY3RvcnknIHRvIEVMSydzIGNvbnN0cnVjdG9yLgouLi4gRmFsbGluZyBiYWNrIHRvIG5vbi13ZWIgd29ya2VyIHZlcnNpb24uYCk7aWYoIUYud29ya2VyRmFjdG9yeSl7dmFyIGVlPXUoIi4vZWxrLXdvcmtlci5taW4uanMiKSxpZT1lZS5Xb3JrZXI7Ri53b3JrZXJGYWN0b3J5PWZ1bmN0aW9uKG9lKXtyZXR1cm4gbmV3IGllKG9lKX19cmV0dXJuIGIodGhpcywoUC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihQKSkuY2FsbCh0aGlzLEYpKX1yZXR1cm4gUH0oVCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGQuZXhwb3J0cywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZC5leHBvcnRzPV8sXy5kZWZhdWx0PV99LHsiLi9lbGstYXBpLmpzIjoxLCIuL2Vsay13b3JrZXIubWluLmpzIjoyLCJ3ZWItd29ya2VyIjo0fV0sNDpbZnVuY3Rpb24odSxkLHApe2QuZXhwb3J0cz1Xb3JrZXJ9LHt9XX0se30sWzNdKSgzKX0pfSkoSEtlKTt2YXIgQ2FuPUhLZS5leHBvcnRzO2NvbnN0IFNhbj1oQyhDYW4pLFZLZT1uZXcgU2FuO2xldCBIdj17fTtjb25zdCBfYW49e307bGV0IFc3PXt9O2NvbnN0IEFhbj1hc3luYyBmdW5jdGlvbihpLHMsdSxkLHAsdixiKXtjb25zdCBUPXUuc2VsZWN0KGBbaWQ9IiR7c30iXWApLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZXMiKSxfPU9iamVjdC5rZXlzKGkpO3JldHVybiBhd2FpdCBQcm9taXNlLmFsbChfLm1hcChhc3luYyBmdW5jdGlvbihBKXtjb25zdCBQPWlbQV07bGV0IFI9ImRlZmF1bHQiO1AuY2xhc3Nlcy5sZW5ndGg+MCYmKFI9UC5jbGFzc2VzLmpvaW4oIiAiKSksUj1SKyIgZmxvd2NoYXJ0LWxhYmVsIjtjb25zdCBGPW9tKFAuc3R5bGVzKTtsZXQgaj1QLnRleHQhPT12b2lkIDA/UC50ZXh0OlAuaWQ7Y29uc3QgSz17d2lkdGg6MCxoZWlnaHQ6MH0sZWU9W3tpZDpQLmlkKyItd2VzdCIsbGF5b3V0T3B0aW9uczp7InBvcnQuc2lkZSI6IldFU1QifX0se2lkOlAuaWQrIi1lYXN0IixsYXlvdXRPcHRpb25zOnsicG9ydC5zaWRlIjoiRUFTVCJ9fSx7aWQ6UC5pZCsiLXNvdXRoIixsYXlvdXRPcHRpb25zOnsicG9ydC5zaWRlIjoiU09VVEgifX0se2lkOlAuaWQrIi1ub3J0aCIsbGF5b3V0T3B0aW9uczp7InBvcnQuc2lkZSI6Ik5PUlRIIn19XTtsZXQgaWU9MCxvZT0iIixwZT17fTtzd2l0Y2goUC50eXBlKXtjYXNlInJvdW5kIjppZT01LG9lPSJyZWN0IjticmVhaztjYXNlInNxdWFyZSI6b2U9InJlY3QiO2JyZWFrO2Nhc2UiZGlhbW9uZCI6b2U9InF1ZXN0aW9uIixwZT17cG9ydENvbnN0cmFpbnRzOiJGSVhFRF9TSURFIn07YnJlYWs7Y2FzZSJoZXhhZ29uIjpvZT0iaGV4YWdvbiI7YnJlYWs7Y2FzZSJvZGQiOm9lPSJyZWN0X2xlZnRfaW52X2Fycm93IjticmVhaztjYXNlImxlYW5fcmlnaHQiOm9lPSJsZWFuX3JpZ2h0IjticmVhaztjYXNlImxlYW5fbGVmdCI6b2U9ImxlYW5fbGVmdCI7YnJlYWs7Y2FzZSJ0cmFwZXpvaWQiOm9lPSJ0cmFwZXpvaWQiO2JyZWFrO2Nhc2UiaW52X3RyYXBlem9pZCI6b2U9Imludl90cmFwZXpvaWQiO2JyZWFrO2Nhc2Uib2RkX3JpZ2h0IjpvZT0icmVjdF9sZWZ0X2ludl9hcnJvdyI7YnJlYWs7Y2FzZSJjaXJjbGUiOm9lPSJjaXJjbGUiO2JyZWFrO2Nhc2UiZWxsaXBzZSI6b2U9ImVsbGlwc2UiO2JyZWFrO2Nhc2Uic3RhZGl1bSI6b2U9InN0YWRpdW0iO2JyZWFrO2Nhc2Uic3Vicm91dGluZSI6b2U9InN1YnJvdXRpbmUiO2JyZWFrO2Nhc2UiY3lsaW5kZXIiOm9lPSJjeWxpbmRlciI7YnJlYWs7Y2FzZSJncm91cCI6b2U9InJlY3QiO2JyZWFrO2Nhc2UiZG91YmxlY2lyY2xlIjpvZT0iZG91YmxlY2lyY2xlIjticmVhaztkZWZhdWx0Om9lPSJyZWN0In1jb25zdCBiZT17bGFiZWxTdHlsZTpGLmxhYmVsU3R5bGUsc2hhcGU6b2UsbGFiZWxUZXh0OmosbGFiZWxUeXBlOlAubGFiZWxUeXBlLHJ4OmllLHJ5OmllLGNsYXNzOlIsc3R5bGU6Ri5zdHlsZSxpZDpQLmlkLGxpbms6UC5saW5rLGxpbmtUYXJnZXQ6UC5saW5rVGFyZ2V0LHRvb2x0aXA6cC5kYi5nZXRUb29sdGlwKFAuaWQpfHwiIixkb21JZDpwLmRiLmxvb2tVcERvbUlkKFAuaWQpLGhhdmVDYWxsYmFjazpQLmhhdmVDYWxsYmFjayx3aWR0aDpQLnR5cGU9PT0iZ3JvdXAiPzUwMDp2b2lkIDAsZGlyOlAuZGlyLHR5cGU6UC50eXBlLHByb3BzOlAucHJvcHMscGFkZGluZzpWaCgpLmZsb3djaGFydC5wYWRkaW5nfTtsZXQgYWUsbmU7aWYoYmUudHlwZSE9PSJncm91cCIpbmU9YXdhaXQgdEooVCxiZSxQLmRpciksYWU9bmUubm9kZSgpLmdldEJCb3goKTtlbHNle2QuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTtjb25zdHtzaGFwZVN2ZzpkZSxiYm94Olh9PWF3YWl0IGcxKFQsYmUsdm9pZCAwLCEwKTtLLndpZHRoPVgud2lkdGgsSy53cmFwcGluZ1dpZHRoPVZoKCkuZmxvd2NoYXJ0LndyYXBwaW5nV2lkdGgsSy5oZWlnaHQ9WC5oZWlnaHQsSy5sYWJlbE5vZGU9ZGUubm9kZSgpLGJlLmxhYmVsRGF0YT1LfWNvbnN0IHNlPXtpZDpQLmlkLHBvcnRzOlAudHlwZT09PSJkaWFtb25kIj9lZTpbXSxsYXlvdXRPcHRpb25zOnBlLGxhYmVsVGV4dDpqLGxhYmVsRGF0YTpLLGRvbUlkOnAuZGIubG9va1VwRG9tSWQoUC5pZCksd2lkdGg6YWU9PW51bGw/dm9pZCAwOmFlLndpZHRoLGhlaWdodDphZT09bnVsbD92b2lkIDA6YWUuaGVpZ2h0LHR5cGU6UC50eXBlLGVsOm5lLHBhcmVudDp2LnBhcmVudEJ5SWRbUC5pZF19O1c3W2JlLmlkXT1zZX0pKSxifSxVS2U9KGkscyx1KT0+e2NvbnN0IGQ9e1RCOntpbjp7bm9ydGg6Im5vcnRoIn0sb3V0Ontzb3V0aDoid2VzdCIsd2VzdDoiZWFzdCIsZWFzdDoic291dGgifX0sTFI6e2luOnt3ZXN0OiJ3ZXN0In0sb3V0OntlYXN0OiJzb3V0aCIsc291dGg6Im5vcnRoIixub3J0aDoiZWFzdCJ9fSxSTDp7aW46e2Vhc3Q6ImVhc3QifSxvdXQ6e3dlc3Q6Im5vcnRoIixub3J0aDoic291dGgiLHNvdXRoOiJ3ZXN0In19LEJUOntpbjp7c291dGg6InNvdXRoIn0sb3V0Ontub3J0aDoiZWFzdCIsZWFzdDoid2VzdCIsd2VzdDoibm9ydGgifX19O3JldHVybiBkLlREPWQuVEIsZFt1XVtzXVtpXX0sR0tlPShpLHMsdSk9PntpZihYZS5pbmZvKCJnZXROZXh0UG9ydCIse25vZGU6aSxlZGdlRGlyZWN0aW9uOnMsZ3JhcGhEaXJlY3Rpb246dX0pLCFIdltpXSlzd2l0Y2godSl7Y2FzZSJUQiI6Y2FzZSJURCI6SHZbaV09e2luUG9zaXRpb246Im5vcnRoIixvdXRQb3NpdGlvbjoic291dGgifTticmVhaztjYXNlIkJUIjpIdltpXT17aW5Qb3NpdGlvbjoic291dGgiLG91dFBvc2l0aW9uOiJub3J0aCJ9O2JyZWFrO2Nhc2UiUkwiOkh2W2ldPXtpblBvc2l0aW9uOiJlYXN0IixvdXRQb3NpdGlvbjoid2VzdCJ9O2JyZWFrO2Nhc2UiTFIiOkh2W2ldPXtpblBvc2l0aW9uOiJ3ZXN0IixvdXRQb3NpdGlvbjoiZWFzdCJ9O2JyZWFrfWNvbnN0IGQ9cz09PSJpbiI/SHZbaV0uaW5Qb3NpdGlvbjpIdltpXS5vdXRQb3NpdGlvbjtyZXR1cm4gcz09PSJpbiI/SHZbaV0uaW5Qb3NpdGlvbj1VS2UoSHZbaV0uaW5Qb3NpdGlvbixzLHUpOkh2W2ldLm91dFBvc2l0aW9uPVVLZShIdltpXS5vdXRQb3NpdGlvbixzLHUpLGR9LExhbj0oaSxzKT0+e2xldCB1PWkuc3RhcnQsZD1pLmVuZDtjb25zdCBwPXUsdj1kLGI9VzdbdV0seT1XN1tkXTtyZXR1cm4hYnx8IXk/e3NvdXJjZTp1LHRhcmdldDpkfTooYi50eXBlPT09ImRpYW1vbmQiJiYodT1gJHt1fS0ke0dLZSh1LCJvdXQiLHMpfWApLHkudHlwZT09PSJkaWFtb25kIiYmKGQ9YCR7ZH0tJHtHS2UoZCwiaW4iLHMpfWApLHtzb3VyY2U6dSx0YXJnZXQ6ZCxzb3VyY2VJZDpwLHRhcmdldElkOnZ9KX0sTWFuPWZ1bmN0aW9uKGkscyx1LGQpe1hlLmluZm8oImFiYzc4IGVkZ2VzID0gIixpKTtjb25zdCBwPWQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlTGFiZWxzIik7bGV0IHY9e30sYj1zLmRiLmdldERpcmVjdGlvbigpLHksVDtpZihpLmRlZmF1bHRTdHlsZSE9PXZvaWQgMCl7Y29uc3QgXz1vbShpLmRlZmF1bHRTdHlsZSk7eT1fLnN0eWxlLFQ9Xy5sYWJlbFN0eWxlfXJldHVybiBpLmZvckVhY2goZnVuY3Rpb24oXyl7Y29uc3QgQT0iTC0iK18uc3RhcnQrIi0iK18uZW5kO3ZbQV09PT12b2lkIDA/KHZbQV09MCxYZS5pbmZvKCJhYmM3OCBuZXcgZW50cnkiLEEsdltBXSkpOih2W0FdKyssWGUuaW5mbygiYWJjNzggbmV3IGVudHJ5IixBLHZbQV0pKTtsZXQgUD1BKyItIit2W0FdO1hlLmluZm8oImFiYzc4IG5ldyBsaW5rIGlkIHRvIGJlIHVzZWQgaXMiLEEsUCx2W0FdKTtjb25zdCBSPSJMUy0iK18uc3RhcnQsRj0iTEUtIitfLmVuZCxqPXtzdHlsZToiIixsYWJlbFN0eWxlOiIifTtzd2l0Y2goai5taW5sZW49Xy5sZW5ndGh8fDEsXy50eXBlPT09ImFycm93X29wZW4iP2ouYXJyb3doZWFkPSJub25lIjpqLmFycm93aGVhZD0ibm9ybWFsIixqLmFycm93VHlwZVN0YXJ0PSJhcnJvd19vcGVuIixqLmFycm93VHlwZUVuZD0iYXJyb3dfb3BlbiIsXy50eXBlKXtjYXNlImRvdWJsZV9hcnJvd19jcm9zcyI6ai5hcnJvd1R5cGVTdGFydD0iYXJyb3dfY3Jvc3MiO2Nhc2UiYXJyb3dfY3Jvc3MiOmouYXJyb3dUeXBlRW5kPSJhcnJvd19jcm9zcyI7YnJlYWs7Y2FzZSJkb3VibGVfYXJyb3dfcG9pbnQiOmouYXJyb3dUeXBlU3RhcnQ9ImFycm93X3BvaW50IjtjYXNlImFycm93X3BvaW50IjpqLmFycm93VHlwZUVuZD0iYXJyb3dfcG9pbnQiO2JyZWFrO2Nhc2UiZG91YmxlX2Fycm93X2NpcmNsZSI6ai5hcnJvd1R5cGVTdGFydD0iYXJyb3dfY2lyY2xlIjtjYXNlImFycm93X2NpcmNsZSI6ai5hcnJvd1R5cGVFbmQ9ImFycm93X2NpcmNsZSI7YnJlYWt9bGV0IEs9IiIsZWU9IiI7c3dpdGNoKF8uc3Ryb2tlKXtjYXNlIm5vcm1hbCI6Sz0iZmlsbDpub25lOyIseSE9PXZvaWQgMCYmKEs9eSksVCE9PXZvaWQgMCYmKGVlPVQpLGoudGhpY2tuZXNzPSJub3JtYWwiLGoucGF0dGVybj0ic29saWQiO2JyZWFrO2Nhc2UiZG90dGVkIjpqLnRoaWNrbmVzcz0ibm9ybWFsIixqLnBhdHRlcm49ImRvdHRlZCIsai5zdHlsZT0iZmlsbDpub25lO3N0cm9rZS13aWR0aDoycHg7c3Ryb2tlLWRhc2hhcnJheTozOyI7YnJlYWs7Y2FzZSJ0aGljayI6ai50aGlja25lc3M9InRoaWNrIixqLnBhdHRlcm49InNvbGlkIixqLnN0eWxlPSJzdHJva2Utd2lkdGg6IDMuNXB4O2ZpbGw6bm9uZTsiO2JyZWFrfWlmKF8uc3R5bGUhPT12b2lkIDApe2NvbnN0IG5lPW9tKF8uc3R5bGUpO0s9bmUuc3R5bGUsZWU9bmUubGFiZWxTdHlsZX1qLnN0eWxlPWouc3R5bGUrPUssai5sYWJlbFN0eWxlPWoubGFiZWxTdHlsZSs9ZWUsXy5pbnRlcnBvbGF0ZSE9PXZvaWQgMD9qLmN1cnZlPU92KF8uaW50ZXJwb2xhdGUsa3ApOmkuZGVmYXVsdEludGVycG9sYXRlIT09dm9pZCAwP2ouY3VydmU9T3YoaS5kZWZhdWx0SW50ZXJwb2xhdGUsa3ApOmouY3VydmU9T3YoX2FuLmN1cnZlLGtwKSxfLnRleHQ9PT12b2lkIDA/Xy5zdHlsZSE9PXZvaWQgMCYmKGouYXJyb3doZWFkU3R5bGU9ImZpbGw6ICMzMzMiKTooai5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIsai5sYWJlbHBvcz0iYyIpLGoubGFiZWxUeXBlPV8ubGFiZWxUeXBlLGoubGFiZWw9Xy50ZXh0LnJlcGxhY2UoY2kubGluZUJyZWFrUmVnZXgsYApgKSxfLnN0eWxlPT09dm9pZCAwJiYoai5zdHlsZT1qLnN0eWxlfHwic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZTsiKSxqLmxhYmVsU3R5bGU9ai5sYWJlbFN0eWxlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6Iiksai5pZD1QLGouY2xhc3Nlcz0iZmxvd2NoYXJ0LWxpbmsgIitSKyIgIitGO2NvbnN0IGllPXptZShwLGopLHtzb3VyY2U6b2UsdGFyZ2V0OnBlLHNvdXJjZUlkOmJlLHRhcmdldElkOmFlfT1MYW4oXyxiKTtYZS5kZWJ1ZygiYWJjNzggc291cmNlIGFuZCB0YXJnZXQiLG9lLHBlKSx1LmVkZ2VzLnB1c2goe2lkOiJlIitfLnN0YXJ0K18uZW5kLHNvdXJjZXM6W29lXSx0YXJnZXRzOltwZV0sc291cmNlSWQ6YmUsdGFyZ2V0SWQ6YWUsbGFiZWxFbDppZSxsYWJlbHM6W3t3aWR0aDpqLndpZHRoLGhlaWdodDpqLmhlaWdodCxvcmdXaWR0aDpqLndpZHRoLG9yZ0hlaWdodDpqLmhlaWdodCx0ZXh0OmoubGFiZWwsbGF5b3V0T3B0aW9uczp7ImVkZ2VMYWJlbHMuaW5saW5lIjoidHJ1ZSIsImVkZ2VMYWJlbHMucGxhY2VtZW50IjoiQ0VOVEVSIn19XSxlZGdlRGF0YTpqfSl9KSx1fSxEYW49ZnVuY3Rpb24oaSxzLHUsZCxwKXtsZXQgdj0iIjtkJiYodj13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCx2PXYucmVwbGFjZSgvXCgvZywiXFwoIiksdj12LnJlcGxhY2UoL1wpL2csIlxcKSIpKSxBVWUoaSxzLHYscCx1KX0sSWFuPWZ1bmN0aW9uKGkscyl7cmV0dXJuIFhlLmluZm8oIkV4dHJhY3RpbmcgY2xhc3NlcyIpLHMuZGIuZ2V0Q2xhc3NlcygpfSxPYW49ZnVuY3Rpb24oaSl7Y29uc3Qgcz17cGFyZW50QnlJZDp7fSxjaGlsZHJlbkJ5SWQ6e319LHU9aS5nZXRTdWJHcmFwaHMoKTtyZXR1cm4gWGUuaW5mbygiU3ViZ3JhcGhzIC0gIix1KSx1LmZvckVhY2goZnVuY3Rpb24oZCl7ZC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHApe3MucGFyZW50QnlJZFtwXT1kLmlkLHMuY2hpbGRyZW5CeUlkW2QuaWRdPT09dm9pZCAwJiYocy5jaGlsZHJlbkJ5SWRbZC5pZF09W10pLHMuY2hpbGRyZW5CeUlkW2QuaWRdLnB1c2gocCl9KX0pLHUuZm9yRWFjaChmdW5jdGlvbihkKXtkLmlkLHMucGFyZW50QnlJZFtkLmlkXSE9PXZvaWQgMCYmcy5wYXJlbnRCeUlkW2QuaWRdfSksc30sTmFuPWZ1bmN0aW9uKGkscyx1KXtjb25zdCBkPVRhbihpLHMsdSk7aWYoZD09PXZvaWQgMHx8ZD09PSJyb290IilyZXR1cm57eDowLHk6MH07Y29uc3QgcD1XN1tkXS5vZmZzZXQ7cmV0dXJue3g6cC5wb3NYLHk6cC5wb3NZfX0sUGFuPWZ1bmN0aW9uKGkscyx1LGQscCx2KXtjb25zdCBiPU5hbihzLnNvdXJjZUlkLHMudGFyZ2V0SWQscCkseT1zLnNlY3Rpb25zWzBdLnN0YXJ0UG9pbnQsVD1zLnNlY3Rpb25zWzBdLmVuZFBvaW50LEE9KHMuc2VjdGlvbnNbMF0uYmVuZFBvaW50cz9zLnNlY3Rpb25zWzBdLmJlbmRQb2ludHM6W10pLm1hcChwZT0+W3BlLngrYi54LHBlLnkrYi55XSksUD1bW3kueCtiLngseS55K2IueV0sLi4uQSxbVC54K2IueCxULnkrYi55XV0se3g6Uix5OkZ9PV9VZShzLmVkZ2VEYXRhKSxqPWs3KCkueChSKS55KEYpLmN1cnZlKGtwKSxLPWkuaW5zZXJ0KCJwYXRoIikuYXR0cigiZCIsaihQKSkuYXR0cigiY2xhc3MiLCJwYXRoICIrdS5jbGFzc2VzKS5hdHRyKCJmaWxsIiwibm9uZSIpLGVlPWkuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlTGFiZWwiKSxpZT1JcihlZS5ub2RlKCkuYXBwZW5kQ2hpbGQocy5sYWJlbEVsKSksb2U9aWUubm9kZSgpLmZpcnN0Q2hpbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWUuYXR0cigid2lkdGgiLG9lLndpZHRoKSxpZS5hdHRyKCJoZWlnaHQiLG9lLmhlaWdodCksZWUuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7cy5sYWJlbHNbMF0ueCtiLnh9LCAke3MubGFiZWxzWzBdLnkrYi55fSlgKSxEYW4oSyx1LGQudHlwZSxkLmFycm93TWFya2VyQWJzb2x1dGUsdil9LEtLZT0oaSxzKT0+e2kuZm9yRWFjaCh1PT57dS5jaGlsZHJlbnx8KHUuY2hpbGRyZW49W10pO2NvbnN0IGQ9cy5jaGlsZHJlbkJ5SWRbdS5pZF07ZCYmZC5mb3JFYWNoKHA9Pnt1LmNoaWxkcmVuLnB1c2goVzdbcF0pfSksS0tlKHUuY2hpbGRyZW4scyl9KX0sQmFuPWFzeW5jIGZ1bmN0aW9uKGkscyx1LGQpe3ZhciBzZTtkLmRiLmNsZWFyKCksVzc9e30sSHY9e30sZC5kYi5zZXRHZW4oImdlbi0yIiksZC5wYXJzZXIucGFyc2UoaSk7Y29uc3QgcD1JcigiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigic3R5bGUiLCJoZWlnaHQ6NDAwcHgiKS5hdHRyKCJpZCIsImN5Iik7bGV0IHY9e2lkOiJyb290IixsYXlvdXRPcHRpb25zOnsiZWxrLmhpZXJhcmNoeUhhbmRsaW5nIjoiSU5DTFVERV9DSElMRFJFTiIsIm9yZy5lY2xpcHNlLmVsay5wYWRkaW5nIjoiW3RvcD0xMDAsIGxlZnQ9MTAwLCBib3R0b209MTEwLCByaWdodD0xMTBdIiwiZWxrLmxheWVyZWQuc3BhY2luZy5lZGdlTm9kZUJldHdlZW5MYXllcnMiOiIzMCIsImVsay5kaXJlY3Rpb24iOiJET1dOIn0sY2hpbGRyZW46W10sZWRnZXM6W119O3N3aXRjaChYZS5pbmZvKCJEcmF3aW5nIGZsb3djaGFydCB1c2luZyB2MyByZW5kZXJlciIsVktlKSxkLmRiLmdldERpcmVjdGlvbigpKXtjYXNlIkJUIjp2LmxheW91dE9wdGlvbnNbImVsay5kaXJlY3Rpb24iXT0iVVAiO2JyZWFrO2Nhc2UiVEIiOnYubGF5b3V0T3B0aW9uc1siZWxrLmRpcmVjdGlvbiJdPSJET1dOIjticmVhaztjYXNlIkxSIjp2LmxheW91dE9wdGlvbnNbImVsay5kaXJlY3Rpb24iXT0iUklHSFQiO2JyZWFrO2Nhc2UiUkwiOnYubGF5b3V0T3B0aW9uc1siZWxrLmRpcmVjdGlvbiJdPSJMRUZUIjticmVha31jb25zdHtzZWN1cml0eUxldmVsOnksZmxvd2NoYXJ0OlR9PVZoKCk7bGV0IF87eT09PSJzYW5kYm94IiYmKF89SXIoIiNpIitzKSk7Y29uc3QgQT1Jcih5PT09InNhbmRib3giP18ubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLFA9eT09PSJzYW5kYm94Ij9fLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50OmRvY3VtZW50LFI9QS5zZWxlY3QoYFtpZD0iJHtzfSJdYCk7U21lKFIsWyJwb2ludCIsImNpcmNsZSIsImNyb3NzIl0sZC50eXBlLHMpO2NvbnN0IGo9ZC5kYi5nZXRWZXJ0aWNlcygpO2xldCBLO2NvbnN0IGVlPWQuZGIuZ2V0U3ViR3JhcGhzKCk7WGUuaW5mbygiU3ViZ3JhcGhzIC0gIixlZSk7Zm9yKGxldCBkZT1lZS5sZW5ndGgtMTtkZT49MDtkZS0tKUs9ZWVbZGVdLGQuZGIuYWRkVmVydGV4KEsuaWQse3RleHQ6Sy50aXRsZSx0eXBlOksubGFiZWxUeXBlfSwiZ3JvdXAiLHZvaWQgMCxLLmNsYXNzZXMsSy5kaXIpO2NvbnN0IGllPVIuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJzdWJncmFwaHMiKSxvZT1PYW4oZC5kYik7dj1hd2FpdCBBYW4oaixzLEEsUCxkLG9lLHYpO2NvbnN0IHBlPVIuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlcyBlZGdlUGF0aCIpLGJlPWQuZGIuZ2V0RWRnZXMoKTt2PU1hbihiZSxkLHYsUiksT2JqZWN0LmtleXMoVzcpLmZvckVhY2goZGU9Pntjb25zdCBYPVc3W2RlXTtYLnBhcmVudHx8di5jaGlsZHJlbi5wdXNoKFgpLG9lLmNoaWxkcmVuQnlJZFtkZV0hPT12b2lkIDAmJihYLmxhYmVscz1be3RleHQ6WC5sYWJlbFRleHQsbGF5b3V0T3B0aW9uczp7Im5vZGVMYWJlbHMucGxhY2VtZW50IjoiW0hfQ0VOVEVSLCBWX1RPUCwgSU5TSURFXSJ9LHdpZHRoOlgubGFiZWxEYXRhLndpZHRoLGhlaWdodDpYLmxhYmVsRGF0YS5oZWlnaHR9XSxkZWxldGUgWC54LGRlbGV0ZSBYLnksZGVsZXRlIFgud2lkdGgsZGVsZXRlIFguaGVpZ2h0KX0pLEtLZSh2LmNoaWxkcmVuLG9lKSxYZS5pbmZvKCJhZnRlciBsYXlvdXQiLEpTT04uc3RyaW5naWZ5KHYsbnVsbCwyKSk7Y29uc3QgbmU9YXdhaXQgVktlLmxheW91dCh2KTtXS2UoMCwwLG5lLmNoaWxkcmVuLFIsaWUsZCwwKSxYZS5pbmZvKCJhZnRlciBsYXlvdXQiLG5lKSwoc2U9bmUuZWRnZXMpPT1udWxsfHxzZS5tYXAoZGU9PntQYW4ocGUsZGUsZGUuZWRnZURhdGEsZCxvZSxzKX0pLHk5KHt9LFIsVC5kaWFncmFtUGFkZGluZyxULnVzZU1heFdpZHRoKSxwLnJlbW92ZSgpfSxXS2U9KGkscyx1LGQscCx2LGIpPT57dS5mb3JFYWNoKGZ1bmN0aW9uKHkpe2lmKHkpaWYoVzdbeS5pZF0ub2Zmc2V0PXtwb3NYOnkueCtpLHBvc1k6eS55K3MseDppLHk6cyxkZXB0aDpiLHdpZHRoOnkud2lkdGgsaGVpZ2h0OnkuaGVpZ2h0fSx5LnR5cGU9PT0iZ3JvdXAiKXtjb25zdCBUPXAuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJzdWJncmFwaCIpO1QuaW5zZXJ0KCJyZWN0IikuYXR0cigiY2xhc3MiLCJzdWJncmFwaCBzdWJncmFwaC1sdmwtIitiJTUrIiBub2RlIikuYXR0cigieCIseS54K2kpLmF0dHIoInkiLHkueStzKS5hdHRyKCJ3aWR0aCIseS53aWR0aCkuYXR0cigiaGVpZ2h0Iix5LmhlaWdodCk7Y29uc3QgXz1ULmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxBPVZoKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHM/eS5sYWJlbERhdGEud2lkdGgvMjowO18uYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7eS5sYWJlbHNbMF0ueCtpK3kueCtBfSwgJHt5LmxhYmVsc1swXS55K3MreS55KzN9KWApLF8ubm9kZSgpLmFwcGVuZENoaWxkKHkubGFiZWxEYXRhLmxhYmVsTm9kZSksWGUuaW5mbygiSWQgKFVHSCk9ICIseS50eXBlLHkubGFiZWxzKX1lbHNlIFhlLmluZm8oIklkIChVR0gpPSAiLHkuaWQpLHkuZWwuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7eS54K2kreS53aWR0aC8yfSwgJHt5Lnkrcyt5LmhlaWdodC8yfSlgKX0pLHUuZm9yRWFjaChmdW5jdGlvbih5KXt5JiZ5LnR5cGU9PT0iZ3JvdXAiJiZXS2UoaSt5Lngscyt5LnkseS5jaGlsZHJlbixkLHAsdixiKzEpfSl9LEZhbj17Z2V0Q2xhc3NlczpJYW4sZHJhdzpCYW59LFJhbj1pPT57bGV0IHM9IiI7Zm9yKGxldCB1PTA7dTw1O3UrKylzKz1gCiAgICAgIC5zdWJncmFwaC1sdmwtJHt1fSB7CiAgICAgICAgZmlsbDogJHtpW2BzdXJmYWNlJHt1fWBdfTsKICAgICAgICBzdHJva2U6ICR7aVtgc3VyZmFjZVBlZXIke3V9YF19OwogICAgICB9CiAgICBgO3JldHVybiBzfSxqYW49T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGRpYWdyYW06e2RiOl9VdCxyZW5kZXJlcjpGYW4scGFyc2VyOkdiZSxzdHlsZXM6aT0+YC5sYWJlbCB7CiAgICBmb250LWZhbWlseTogJHtpLmZvbnRGYW1pbHl9OwogICAgY29sb3I6ICR7aS5ub2RlVGV4dENvbG9yfHxpLnRleHRDb2xvcn07CiAgfQogIC5jbHVzdGVyLWxhYmVsIHRleHQgewogICAgZmlsbDogJHtpLnRpdGxlQ29sb3J9OwogIH0KICAuY2x1c3Rlci1sYWJlbCBzcGFuIHsKICAgIGNvbG9yOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAubGFiZWwgdGV4dCxzcGFuIHsKICAgIGZpbGw6ICR7aS5ub2RlVGV4dENvbG9yfHxpLnRleHRDb2xvcn07CiAgICBjb2xvcjogJHtpLm5vZGVUZXh0Q29sb3J8fGkudGV4dENvbG9yfTsKICB9CgogIC5ub2RlIHJlY3QsCiAgLm5vZGUgY2lyY2xlLAogIC5ub2RlIGVsbGlwc2UsCiAgLm5vZGUgcG9seWdvbiwKICAubm9kZSBwYXRoIHsKICAgIGZpbGw6ICR7aS5tYWluQmtnfTsKICAgIHN0cm9rZTogJHtpLm5vZGVCb3JkZXJ9OwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKICAubm9kZSAubGFiZWwgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KICAubm9kZS5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogIH0KCiAgLmFycm93aGVhZFBhdGggewogICAgZmlsbDogJHtpLmFycm93aGVhZENvbG9yfTsKICB9CgogIC5lZGdlUGF0aCAucGF0aCB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyLjBweDsKICB9CgogIC5mbG93Y2hhcnQtbGluayB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgZmlsbDogbm9uZTsKICB9CgogIC5lZGdlTGFiZWwgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgcmVjdCB7CiAgICAgIG9wYWNpdHk6IDAuODU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7aS5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgICAgZmlsbDogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgfQogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KCiAgLmNsdXN0ZXIgcmVjdCB7CiAgICBmaWxsOiAke2kuY2x1c3RlckJrZ307CiAgICBzdHJva2U6ICR7aS5jbHVzdGVyQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCiAgLmNsdXN0ZXIgdGV4dCB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAuY2x1c3RlciBzcGFuIHsKICAgIGNvbG9yOiAke2kudGl0bGVDb2xvcn07CiAgfQogIC8qIC5jbHVzdGVyIGRpdiB7CiAgICBjb2xvcjogJHtpLnRpdGxlQ29sb3J9OwogIH0gKi8KCiAgZGl2Lm1lcm1haWRUb29sdGlwIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG1heC13aWR0aDogMjAwcHg7CiAgICBwYWRkaW5nOiAycHg7CiAgICBmb250LWZhbWlseTogJHtpLmZvbnRGYW1pbHl9OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgYmFja2dyb3VuZDogJHtpLnRlcnRpYXJ5Q29sb3J9OwogICAgYm9yZGVyOiAxcHggc29saWQgJHtpLmJvcmRlcjJ9OwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB6LWluZGV4OiAxMDA7CiAgfQoKICAuZmxvd2NoYXJ0VGl0bGVUZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBmb250LXNpemU6IDE4cHg7CiAgICBmaWxsOiAke2kudGV4dENvbG9yfTsKICB9CiAgLnN1YmdyYXBoIHsKICAgIHN0cm9rZS13aWR0aDoyOwogICAgcng6MzsKICB9CiAgLy8gLnN1YmdyYXBoLWx2bC0xIHsKICAvLyAgIGZpbGw6I2NjYzsKICAvLyAgIC8vIHN0cm9rZTpibGFjazsKICAvLyB9CgogIC5mbG93Y2hhcnQtbGFiZWwgdGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogIH0KCiAgJHtSYW4oaSl9CmB9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBRdmU9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihSLEYsaixLKXtmb3Ioaj1qfHx7fSxLPVIubGVuZ3RoO0stLTtqW1JbS11dPUYpO3JldHVybiBqfSxzPVs2LDgsMTAsMTEsMTIsMTQsMTYsMTcsMjAsMjFdLHU9WzEsOV0sZD1bMSwxMF0scD1bMSwxMV0sdj1bMSwxMl0sYj1bMSwxM10seT1bMSwxNl0sVD1bMSwxN10sXz17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsdGltZWxpbmU6NCxkb2N1bWVudDo1LEVPRjo2LGxpbmU6NyxTUEFDRTo4LHN0YXRlbWVudDo5LE5FV0xJTkU6MTAsdGl0bGU6MTEsYWNjX3RpdGxlOjEyLGFjY190aXRsZV92YWx1ZToxMyxhY2NfZGVzY3I6MTQsYWNjX2Rlc2NyX3ZhbHVlOjE1LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MTYsc2VjdGlvbjoxNyxwZXJpb2Rfc3RhdGVtZW50OjE4LGV2ZW50X3N0YXRlbWVudDoxOSxwZXJpb2Q6MjAsZXZlbnQ6MjEsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6InRpbWVsaW5lIiw2OiJFT0YiLDg6IlNQQUNFIiwxMDoiTkVXTElORSIsMTE6InRpdGxlIiwxMjoiYWNjX3RpdGxlIiwxMzoiYWNjX3RpdGxlX3ZhbHVlIiwxNDoiYWNjX2Rlc2NyIiwxNToiYWNjX2Rlc2NyX3ZhbHVlIiwxNjoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMTc6InNlY3Rpb24iLDIwOiJwZXJpb2QiLDIxOiJldmVudCJ9LHByb2R1Y3Rpb25zXzpbMCxbMywzXSxbNSwwXSxbNSwyXSxbNywyXSxbNywxXSxbNywxXSxbNywxXSxbOSwxXSxbOSwyXSxbOSwyXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbMTgsMV0sWzE5LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKEYsaixLLGVlLGllLG9lLHBlKXt2YXIgYmU9b2UubGVuZ3RoLTE7c3dpdGNoKGllKXtjYXNlIDE6cmV0dXJuIG9lW2JlLTFdO2Nhc2UgMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzOm9lW2JlLTFdLnB1c2gob2VbYmVdKSx0aGlzLiQ9b2VbYmUtMV07YnJlYWs7Y2FzZSA0OmNhc2UgNTp0aGlzLiQ9b2VbYmVdO2JyZWFrO2Nhc2UgNjpjYXNlIDc6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgODplZS5nZXRDb21tb25EYigpLnNldERpYWdyYW1UaXRsZShvZVtiZV0uc3Vic3RyKDYpKSx0aGlzLiQ9b2VbYmVdLnN1YnN0cig2KTticmVhaztjYXNlIDk6dGhpcy4kPW9lW2JlXS50cmltKCksZWUuZ2V0Q29tbW9uRGIoKS5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMTA6Y2FzZSAxMTp0aGlzLiQ9b2VbYmVdLnRyaW0oKSxlZS5nZXRDb21tb25EYigpLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMjplZS5hZGRTZWN0aW9uKG9lW2JlXS5zdWJzdHIoOCkpLHRoaXMuJD1vZVtiZV0uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgMTU6ZWUuYWRkVGFzayhvZVtiZV0sMCwiIiksdGhpcy4kPW9lW2JlXTticmVhaztjYXNlIDE2OmVlLmFkZEV2ZW50KG9lW2JlXS5zdWJzdHIoMikpLHRoaXMuJD1vZVtiZV07YnJlYWt9fSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LGkocyxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6WzEsNl0sOTo3LDEwOlsxLDhdLDExOnUsMTI6ZCwxNDpwLDE2OnYsMTc6YiwxODoxNCwxOToxNSwyMDp5LDIxOlR9LGkocyxbMiw3XSx7MTpbMiwxXX0pLGkocyxbMiwzXSksezk6MTgsMTE6dSwxMjpkLDE0OnAsMTY6diwxNzpiLDE4OjE0LDE5OjE1LDIwOnksMjE6VH0saShzLFsyLDVdKSxpKHMsWzIsNl0pLGkocyxbMiw4XSksezEzOlsxLDE5XX0sezE1OlsxLDIwXX0saShzLFsyLDExXSksaShzLFsyLDEyXSksaShzLFsyLDEzXSksaShzLFsyLDE0XSksaShzLFsyLDE1XSksaShzLFsyLDE2XSksaShzLFsyLDRdKSxpKHMsWzIsOV0pLGkocyxbMiwxMF0pXSxkZWZhdWx0QWN0aW9uczp7fSxwYXJzZUVycm9yOmZ1bmN0aW9uKEYsail7aWYoai5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKEYpO2Vsc2V7dmFyIEs9bmV3IEVycm9yKEYpO3Rocm93IEsuaGFzaD1qLEt9fSxwYXJzZTpmdW5jdGlvbihGKXt2YXIgaj10aGlzLEs9WzBdLGVlPVtdLGllPVtudWxsXSxvZT1bXSxwZT10aGlzLnRhYmxlLGJlPSIiLGFlPTAsbmU9MCxzZT0yLGRlPTEsWD1vZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxnZT1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLFc9e3l5Ont9fTtmb3IodmFyIHhlIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXkseGUpJiYoVy55eVt4ZV09dGhpcy55eVt4ZV0pO2dlLnNldElucHV0KEYsVy55eSksVy55eS5sZXhlcj1nZSxXLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBnZS55eWxsb2M+InUiJiYoZ2UueXlsbG9jPXt9KTt2YXIgVT1nZS55eWxsb2M7b2UucHVzaChVKTt2YXIgRmU9Z2Uub3B0aW9ucyYmZ2Uub3B0aW9ucy5yYW5nZXM7dHlwZW9mIFcueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9Vy55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBQZSgpe3ZhciBFdDtyZXR1cm4gRXQ9ZWUucG9wKCl8fGdlLmxleCgpfHxkZSx0eXBlb2YgRXQhPSJudW1iZXIiJiYoRXQgaW5zdGFuY2VvZiBBcnJheSYmKGVlPUV0LEV0PWVlLnBvcCgpKSxFdD1qLnN5bWJvbHNfW0V0XXx8RXQpLEV0fWZvcih2YXIgamUsSWUsU2UsQ2Usa2U9e30sS2UsRnQsTmUsZ247Oyl7aWYoSWU9S1tLLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW0llXT9TZT10aGlzLmRlZmF1bHRBY3Rpb25zW0llXTooKGplPT09bnVsbHx8dHlwZW9mIGplPiJ1IikmJihqZT1QZSgpKSxTZT1wZVtJZV0mJnBlW0llXVtqZV0pLHR5cGVvZiBTZT4idSJ8fCFTZS5sZW5ndGh8fCFTZVswXSl7dmFyIF90PSIiO2duPVtdO2ZvcihLZSBpbiBwZVtJZV0pdGhpcy50ZXJtaW5hbHNfW0tlXSYmS2U+c2UmJmduLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tLZV0rIiciKTtnZS5zaG93UG9zaXRpb24/X3Q9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYWUrMSkrYDoKYCtnZS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK2duLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bamVdfHxqZSkrIiciOl90PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGFlKzEpKyI6IFVuZXhwZWN0ZWQgIisoamU9PWRlPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW2plXXx8amUpKyInIiksdGhpcy5wYXJzZUVycm9yKF90LHt0ZXh0OmdlLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tqZV18fGplLGxpbmU6Z2UueXlsaW5lbm8sbG9jOlUsZXhwZWN0ZWQ6Z259KX1pZihTZVswXWluc3RhbmNlb2YgQXJyYXkmJlNlLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrSWUrIiwgdG9rZW46ICIramUpO3N3aXRjaChTZVswXSl7Y2FzZSAxOksucHVzaChqZSksaWUucHVzaChnZS55eXRleHQpLG9lLnB1c2goZ2UueXlsbG9jKSxLLnB1c2goU2VbMV0pLGplPW51bGwsbmU9Z2UueXlsZW5nLGJlPWdlLnl5dGV4dCxhZT1nZS55eWxpbmVubyxVPWdlLnl5bGxvYzticmVhaztjYXNlIDI6aWYoRnQ9dGhpcy5wcm9kdWN0aW9uc19bU2VbMV1dWzFdLGtlLiQ9aWVbaWUubGVuZ3RoLUZ0XSxrZS5fJD17Zmlyc3RfbGluZTpvZVtvZS5sZW5ndGgtKEZ0fHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6b2Vbb2UubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46b2Vbb2UubGVuZ3RoLShGdHx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpvZVtvZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LEZlJiYoa2UuXyQucmFuZ2U9W29lW29lLmxlbmd0aC0oRnR8fDEpXS5yYW5nZVswXSxvZVtvZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxDZT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoa2UsW2JlLG5lLGFlLFcueXksU2VbMV0saWUsb2VdLmNvbmNhdChYKSksdHlwZW9mIENlPCJ1IilyZXR1cm4gQ2U7RnQmJihLPUsuc2xpY2UoMCwtMSpGdCoyKSxpZT1pZS5zbGljZSgwLC0xKkZ0KSxvZT1vZS5zbGljZSgwLC0xKkZ0KSksSy5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW1NlWzFdXVswXSksaWUucHVzaChrZS4kKSxvZS5wdXNoKGtlLl8kKSxOZT1wZVtLW0subGVuZ3RoLTJdXVtLW0subGVuZ3RoLTFdXSxLLnB1c2goTmUpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxBPWZ1bmN0aW9uKCl7dmFyIFI9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24oaixLKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKGosSyk7ZWxzZSB0aHJvdyBuZXcgRXJyb3Ioail9LHNldElucHV0OmZ1bmN0aW9uKEYsail7cmV0dXJuIHRoaXMueXk9anx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9Rix0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgRj10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9Rix0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9Rix0aGlzLm1hdGNoZWQrPUY7dmFyIGo9Ri5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIGo/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLEZ9LHVucHV0OmZ1bmN0aW9uKEYpe3ZhciBqPUYubGVuZ3RoLEs9Ri5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PUYrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWopLHRoaXMub2Zmc2V0LT1qO3ZhciBlZT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxLLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09Sy5sZW5ndGgtMSk7dmFyIGllPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpLPyhLLmxlbmd0aD09PWVlLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrZWVbZWUubGVuZ3RoLUsubGVuZ3RoXS5sZW5ndGgtS1swXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWp9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baWVbMF0saWVbMF0rdGhpcy55eWxlbmctal0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSxsZXNzOmZ1bmN0aW9uKEYpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShGKSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciBGPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oRi5sZW5ndGg+MjA/Ii4uLiI6IiIpK0Yuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgRj10aGlzLm1hdGNoO3JldHVybiBGLmxlbmd0aDwyMCYmKEYrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLUYubGVuZ3RoKSksKEYuc3Vic3RyKDAsMjApKyhGLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgRj10aGlzLnBhc3RJbnB1dCgpLGo9bmV3IEFycmF5KEYubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gRit0aGlzLnVwY29taW5nSW5wdXQoKStgCmAraisiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oRixqKXt2YXIgSyxlZSxpZTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaWU9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaWUueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksZWU9RlswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksZWUmJih0aGlzLnl5bGluZW5vKz1lZS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjplZT9lZVtlZS5sZW5ndGgtMV0ubGVuZ3RoLWVlW2VlLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK0ZbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9RlswXSx0aGlzLm1hdGNoKz1GWzBdLHRoaXMubWF0Y2hlcz1GLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKEZbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPUZbMF0sSz10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxqLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLEspcmV0dXJuIEs7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIG9lIGluIGllKXRoaXNbb2VdPWllW29lXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBGLGosSyxlZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpZT10aGlzLl9jdXJyZW50UnVsZXMoKSxvZT0wO29lPGllLmxlbmd0aDtvZSsrKWlmKEs9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpZVtvZV1dKSxLJiYoIWp8fEtbMF0ubGVuZ3RoPmpbMF0ubGVuZ3RoKSl7aWYoaj1LLGVlPW9lLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKEY9dGhpcy50ZXN0X21hdGNoKEssaWVbb2VdKSxGIT09ITEpcmV0dXJuIEY7aWYodGhpcy5fYmFja3RyYWNrKXtqPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGo/KEY9dGhpcy50ZXN0X21hdGNoKGosaWVbZWVdKSxGIT09ITE/RjohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIGo9dGhpcy5uZXh0KCk7cmV0dXJuIGp8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKGope3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChqKX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgaj10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBqPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oail7cmV0dXJuIGo9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhqfHwwKSxqPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbal06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oail7dGhpcy5iZWdpbihqKX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihqLEssZWUsaWUpe3N3aXRjaChlZSl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpicmVhaztjYXNlIDI6cmV0dXJuIDEwO2Nhc2UgMzpicmVhaztjYXNlIDQ6YnJlYWs7Y2FzZSA1OnJldHVybiA0O2Nhc2UgNjpyZXR1cm4gMTE7Y2FzZSA3OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwxMjtjYXNlIDg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjtjYXNlIDk6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDE0O2Nhc2UgMTA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDExOnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDEyOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEzOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDE0OnJldHVybiAxNztjYXNlIDE1OnJldHVybiAyMTtjYXNlIDE2OnJldHVybiAyMDtjYXNlIDE3OnJldHVybiA2O2Nhc2UgMTg6cmV0dXJuIklOVkFMSUQifX0scnVsZXM6Wy9eKD86JSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzp0aW1lbGluZVxiKS9pLC9eKD86dGl0bGVcc1teI1xuO10rKS9pLC9eKD86YWNjVGl0bGVccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccypce1xzKikvaSwvXig/OltcfV0pL2ksL14oPzpbXlx9XSopL2ksL14oPzpzZWN0aW9uXHNbXiM6XG47XSspL2ksL14oPzo6XHNbXiM6XG47XSspL2ksL14oPzpbXiM6XG47XSspL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzEyLDEzXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzEwXSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzhdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDYsNyw5LDExLDE0LDE1LDE2LDE3LDE4XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIFJ9KCk7Xy5sZXhlcj1BO2Z1bmN0aW9uIFAoKXt0aGlzLnl5PXt9fXJldHVybiBQLnByb3RvdHlwZT1fLF8uUGFyc2VyPVAsbmV3IFB9KCk7UXZlLnBhcnNlcj1RdmU7Y29uc3QgJGFuPVF2ZTtsZXQgWkQ9IiIsWUtlPTA7Y29uc3QgSnZlPVtdLElKPVtdLGVJPVtdLFhLZT0oKT0+SmplLFFLZT1mdW5jdGlvbigpe0p2ZS5sZW5ndGg9MCxJSi5sZW5ndGg9MCxaRD0iIixlSS5sZW5ndGg9MCxQZygpfSxKS2U9ZnVuY3Rpb24oaSl7WkQ9aSxKdmUucHVzaChpKX0sWktlPWZ1bmN0aW9uKCl7cmV0dXJuIEp2ZX0sZVdlPWZ1bmN0aW9uKCl7bGV0IGk9aVdlKCk7Y29uc3Qgcz0xMDA7bGV0IHU9MDtmb3IoOyFpJiZ1PHM7KWk9aVdlKCksdSsrO3JldHVybiBJSi5wdXNoKC4uLmVJKSxJSn0sdFdlPWZ1bmN0aW9uKGkscyx1KXtjb25zdCBkPXtpZDpZS2UrKyxzZWN0aW9uOlpELHR5cGU6WkQsdGFzazppLHNjb3JlOnN8fDAsZXZlbnRzOnU/W3VdOltdfTtlSS5wdXNoKGQpfSxuV2U9ZnVuY3Rpb24oaSl7ZUkuZmluZCh1PT51LmlkPT09WUtlLTEpLmV2ZW50cy5wdXNoKGkpfSxyV2U9ZnVuY3Rpb24oaSl7Y29uc3Qgcz17c2VjdGlvbjpaRCx0eXBlOlpELGRlc2NyaXB0aW9uOmksdGFzazppLGNsYXNzZXM6W119O0lKLnB1c2gocyl9LGlXZT1mdW5jdGlvbigpe2NvbnN0IGk9ZnVuY3Rpb24odSl7cmV0dXJuIGVJW3VdLnByb2Nlc3NlZH07bGV0IHM9ITA7Zm9yKGNvbnN0W3UsZF1vZiBlSS5lbnRyaWVzKCkpaSh1KSxzPXMmJmQucHJvY2Vzc2VkO3JldHVybiBzfSx6YW49T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGFkZEV2ZW50Om5XZSxhZGRTZWN0aW9uOkpLZSxhZGRUYXNrOnRXZSxhZGRUYXNrT3JnOnJXZSxjbGVhcjpRS2UsZGVmYXVsdDp7Y2xlYXI6UUtlLGdldENvbW1vbkRiOlhLZSxhZGRTZWN0aW9uOkpLZSxnZXRTZWN0aW9uczpaS2UsZ2V0VGFza3M6ZVdlLGFkZFRhc2s6dFdlLGFkZFRhc2tPcmc6cldlLGFkZEV2ZW50Om5XZX0sZ2V0Q29tbW9uRGI6WEtlLGdldFNlY3Rpb25zOlpLZSxnZXRUYXNrczplV2V9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSkscWFuPTEyLE9KPWZ1bmN0aW9uKGkscyl7Y29uc3QgdT1pLmFwcGVuZCgicmVjdCIpO3JldHVybiB1LmF0dHIoIngiLHMueCksdS5hdHRyKCJ5IixzLnkpLHUuYXR0cigiZmlsbCIscy5maWxsKSx1LmF0dHIoInN0cm9rZSIscy5zdHJva2UpLHUuYXR0cigid2lkdGgiLHMud2lkdGgpLHUuYXR0cigiaGVpZ2h0IixzLmhlaWdodCksdS5hdHRyKCJyeCIscy5yeCksdS5hdHRyKCJyeSIscy5yeSkscy5jbGFzcyE9PXZvaWQgMCYmdS5hdHRyKCJjbGFzcyIscy5jbGFzcyksdX0sSGFuPWZ1bmN0aW9uKGkscyl7Y29uc3QgZD1pLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLHMuY3gpLmF0dHIoImN5IixzLmN5KS5hdHRyKCJjbGFzcyIsImZhY2UiKS5hdHRyKCJyIiwxNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJvdmVyZmxvdyIsInZpc2libGUiKSxwPWkuYXBwZW5kKCJnIik7cC5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixzLmN4LTE1LzMpLmF0dHIoImN5IixzLmN5LTE1LzMpLmF0dHIoInIiLDEuNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJmaWxsIiwiIzY2NiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSxwLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLHMuY3grMTUvMykuYXR0cigiY3kiLHMuY3ktMTUvMykuYXR0cigiciIsMS41KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoImZpbGwiLCIjNjY2IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpO2Z1bmN0aW9uIHYoVCl7Y29uc3QgXz1sRCgpLnN0YXJ0QW5nbGUoTWF0aC5QSS8yKS5lbmRBbmdsZSgzKihNYXRoLlBJLzIpKS5pbm5lclJhZGl1cyg3LjUpLm91dGVyUmFkaXVzKDYuODE4MTgxODE4MTgxODE3NSk7VC5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigiZCIsXykuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrcy5jeCsiLCIrKHMuY3krMikrIikiKX1mdW5jdGlvbiBiKFQpe2NvbnN0IF89bEQoKS5zdGFydEFuZ2xlKDMqTWF0aC5QSS8yKS5lbmRBbmdsZSg1KihNYXRoLlBJLzIpKS5pbm5lclJhZGl1cyg3LjUpLm91dGVyUmFkaXVzKDYuODE4MTgxODE4MTgxODE3NSk7VC5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigiZCIsXykuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrcy5jeCsiLCIrKHMuY3krNykrIikiKX1mdW5jdGlvbiB5KFQpe1QuYXBwZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoInN0cm9rZSIsMikuYXR0cigieDEiLHMuY3gtNSkuYXR0cigieTEiLHMuY3krNykuYXR0cigieDIiLHMuY3grNSkuYXR0cigieTIiLHMuY3krNykuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKX1yZXR1cm4gcy5zY29yZT4zP3YocCk6cy5zY29yZTwzP2IocCk6eShwKSxkfSxWYW49ZnVuY3Rpb24oaSxzKXtjb25zdCB1PWkuYXBwZW5kKCJjaXJjbGUiKTtyZXR1cm4gdS5hdHRyKCJjeCIscy5jeCksdS5hdHRyKCJjeSIscy5jeSksdS5hdHRyKCJjbGFzcyIsImFjdG9yLSIrcy5wb3MpLHUuYXR0cigiZmlsbCIscy5maWxsKSx1LmF0dHIoInN0cm9rZSIscy5zdHJva2UpLHUuYXR0cigiciIscy5yKSx1LmNsYXNzIT09dm9pZCAwJiZ1LmF0dHIoImNsYXNzIix1LmNsYXNzKSxzLnRpdGxlIT09dm9pZCAwJiZ1LmFwcGVuZCgidGl0bGUiKS50ZXh0KHMudGl0bGUpLHV9LHNXZT1mdW5jdGlvbihpLHMpe2NvbnN0IHU9cy50ZXh0LnJlcGxhY2UoLzxiclxzKlwvPz4vZ2ksIiAiKSxkPWkuYXBwZW5kKCJ0ZXh0Iik7ZC5hdHRyKCJ4IixzLngpLGQuYXR0cigieSIscy55KSxkLmF0dHIoImNsYXNzIiwibGVnZW5kIiksZC5zdHlsZSgidGV4dC1hbmNob3IiLHMuYW5jaG9yKSxzLmNsYXNzIT09dm9pZCAwJiZkLmF0dHIoImNsYXNzIixzLmNsYXNzKTtjb25zdCBwPWQuYXBwZW5kKCJ0c3BhbiIpO3JldHVybiBwLmF0dHIoIngiLHMueCtzLnRleHRNYXJnaW4qMikscC50ZXh0KHUpLGR9LFVhbj1mdW5jdGlvbihpLHMpe2Z1bmN0aW9uIHUocCx2LGIseSxUKXtyZXR1cm4gcCsiLCIrdisiICIrKHArYikrIiwiK3YrIiAiKyhwK2IpKyIsIisodit5LVQpKyIgIisocCtiLVQqMS4yKSsiLCIrKHYreSkrIiAiK3ArIiwiKyh2K3kpfWNvbnN0IGQ9aS5hcHBlbmQoInBvbHlnb24iKTtkLmF0dHIoInBvaW50cyIsdShzLngscy55LDUwLDIwLDcpKSxkLmF0dHIoImNsYXNzIiwibGFiZWxCb3giKSxzLnk9cy55K3MubGFiZWxNYXJnaW4scy54PXMueCsuNSpzLmxhYmVsTWFyZ2luLHNXZShpLHMpfSxHYW49ZnVuY3Rpb24oaSxzLHUpe2NvbnN0IGQ9aS5hcHBlbmQoImciKSxwPVp2ZSgpO3AueD1zLngscC55PXMueSxwLmZpbGw9cy5maWxsLHAud2lkdGg9dS53aWR0aCxwLmhlaWdodD11LmhlaWdodCxwLmNsYXNzPSJqb3VybmV5LXNlY3Rpb24gc2VjdGlvbi10eXBlLSIrcy5udW0scC5yeD0zLHAucnk9MyxPSihkLHApLG9XZSh1KShzLnRleHQsZCxwLngscC55LHAud2lkdGgscC5oZWlnaHQse2NsYXNzOiJqb3VybmV5LXNlY3Rpb24gc2VjdGlvbi10eXBlLSIrcy5udW19LHUscy5jb2xvdXIpfTtsZXQgYVdlPS0xO2NvbnN0IEthbj1mdW5jdGlvbihpLHMsdSl7Y29uc3QgZD1zLngrdS53aWR0aC8yLHA9aS5hcHBlbmQoImciKTthV2UrKztjb25zdCB2PTMwMCs1KjMwO3AuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJ0YXNrIithV2UpLmF0dHIoIngxIixkKS5hdHRyKCJ5MSIscy55KS5hdHRyKCJ4MiIsZCkuYXR0cigieTIiLHYpLmF0dHIoImNsYXNzIiwidGFzay1saW5lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjQgMiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSxIYW4ocCx7Y3g6ZCxjeTozMDArKDUtcy5zY29yZSkqMzAsc2NvcmU6cy5zY29yZX0pO2NvbnN0IGI9WnZlKCk7Yi54PXMueCxiLnk9cy55LGIuZmlsbD1zLmZpbGwsYi53aWR0aD11LndpZHRoLGIuaGVpZ2h0PXUuaGVpZ2h0LGIuY2xhc3M9InRhc2sgdGFzay10eXBlLSIrcy5udW0sYi5yeD0zLGIucnk9MyxPSihwLGIpLHMueCsxNCxvV2UodSkocy50YXNrLHAsYi54LGIueSxiLndpZHRoLGIuaGVpZ2h0LHtjbGFzczoidGFzayJ9LHUscy5jb2xvdXIpfSxXYW49ZnVuY3Rpb24oaSxzKXtPSihpLHt4OnMuc3RhcnR4LHk6cy5zdGFydHksd2lkdGg6cy5zdG9weC1zLnN0YXJ0eCxoZWlnaHQ6cy5zdG9weS1zLnN0YXJ0eSxmaWxsOnMuZmlsbCxjbGFzczoicmVjdCJ9KS5sb3dlcigpfSxZYW49ZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCxmaWxsOnZvaWQgMCwidGV4dC1hbmNob3IiOiJzdGFydCIsd2lkdGg6MTAwLGhlaWdodDoxMDAsdGV4dE1hcmdpbjowLHJ4OjAscnk6MH19LFp2ZT1mdW5jdGlvbigpe3JldHVybnt4OjAseTowLHdpZHRoOjEwMCxhbmNob3I6InN0YXJ0IixoZWlnaHQ6MTAwLHJ4OjAscnk6MH19LG9XZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGkocCx2LGIseSxULF8sQSxQKXtjb25zdCBSPXYuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsYitULzIpLmF0dHIoInkiLHkrXy8yKzUpLnN0eWxlKCJmb250LWNvbG9yIixQKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KHApO2QoUixBKX1mdW5jdGlvbiBzKHAsdixiLHksVCxfLEEsUCxSKXtjb25zdHt0YXNrRm9udFNpemU6Rix0YXNrRm9udEZhbWlseTpqfT1QLEs9cC5zcGxpdCgvPGJyXHMqXC8/Pi9naSk7Zm9yKGxldCBlZT0wO2VlPEsubGVuZ3RoO2VlKyspe2NvbnN0IGllPWVlKkYtRiooSy5sZW5ndGgtMSkvMixvZT12LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLGIrVC8yKS5hdHRyKCJ5Iix5KS5hdHRyKCJmaWxsIixSKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgiZm9udC1zaXplIixGKS5zdHlsZSgiZm9udC1mYW1pbHkiLGopO29lLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixiK1QvMikuYXR0cigiZHkiLGllKS50ZXh0KEtbZWVdKSxvZS5hdHRyKCJ5Iix5K18vMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLGQob2UsQSl9fWZ1bmN0aW9uIHUocCx2LGIseSxULF8sQSxQKXtjb25zdCBSPXYuYXBwZW5kKCJzd2l0Y2giKSxqPVIuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsYikuYXR0cigieSIseSkuYXR0cigid2lkdGgiLFQpLmF0dHIoImhlaWdodCIsXykuYXR0cigicG9zaXRpb24iLCJmaXhlZCIpLmFwcGVuZCgieGh0bWw6ZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO2ouYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHApLHMocCxSLGIseSxULF8sQSxQKSxkKGosQSl9ZnVuY3Rpb24gZChwLHYpe2Zvcihjb25zdCBiIGluIHYpYiBpbiB2JiZwLmF0dHIoYix2W2JdKX1yZXR1cm4gZnVuY3Rpb24ocCl7cmV0dXJuIHAudGV4dFBsYWNlbWVudD09PSJmbyI/dTpwLnRleHRQbGFjZW1lbnQ9PT0ib2xkIj9pOnN9fSgpLFhhbj1mdW5jdGlvbihpKXtpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw1KS5hdHRyKCJyZWZZIiwyKS5hdHRyKCJtYXJrZXJXaWR0aCIsNikuYXR0cigibWFya2VySGVpZ2h0Iiw0KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCwwIFYgNCBMNiwyIFoiKX07ZnVuY3Rpb24gY1dlKGkscyl7aS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHU9SXIodGhpcyksZD11LnRleHQoKS5zcGxpdCgvKFxzK3w8YnI+KS8pLnJldmVyc2UoKSxwLHY9W10sYj0xLjEseT11LmF0dHIoInkiKSxUPXBhcnNlRmxvYXQodS5hdHRyKCJkeSIpKSxfPXUudGV4dChudWxsKS5hcHBlbmQoInRzcGFuIikuYXR0cigieCIsMCkuYXR0cigieSIseSkuYXR0cigiZHkiLFQrImVtIik7Zm9yKGxldCBBPTA7QTxkLmxlbmd0aDtBKyspcD1kW2QubGVuZ3RoLTEtQV0sdi5wdXNoKHApLF8udGV4dCh2LmpvaW4oIiAiKS50cmltKCkpLChfLm5vZGUoKS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKT5zfHxwPT09Ijxicj4iKSYmKHYucG9wKCksXy50ZXh0KHYuam9pbigiICIpLnRyaW0oKSkscD09PSI8YnI+Ij92PVsiIl06dj1bcF0sXz11LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5Iix5KS5hdHRyKCJkeSIsYisiZW0iKS50ZXh0KHApKX0pfWNvbnN0IFFhbj1mdW5jdGlvbihpLHMsdSxkKXtjb25zdCBwPXUlcWFuLTEsdj1pLmFwcGVuZCgiZyIpO3Muc2VjdGlvbj1wLHYuYXR0cigiY2xhc3MiLChzLmNsYXNzP3MuY2xhc3MrIiAiOiIiKSsidGltZWxpbmUtbm9kZSAiKygic2VjdGlvbi0iK3ApKTtjb25zdCBiPXYuYXBwZW5kKCJnIikseT12LmFwcGVuZCgiZyIpLF89eS5hcHBlbmQoInRleHQiKS50ZXh0KHMuZGVzY3IpLmF0dHIoImR5IiwiMWVtIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmNhbGwoY1dlLHMud2lkdGgpLm5vZGUoKS5nZXRCQm94KCksQT1kLmZvbnRTaXplJiZkLmZvbnRTaXplLnJlcGxhY2U/ZC5mb250U2l6ZS5yZXBsYWNlKCJweCIsIiIpOmQuZm9udFNpemU7cmV0dXJuIHMuaGVpZ2h0PV8uaGVpZ2h0K0EqMS4xKi41K3MucGFkZGluZyxzLmhlaWdodD1NYXRoLm1heChzLmhlaWdodCxzLm1heEhlaWdodCkscy53aWR0aD1zLndpZHRoKzIqcy5wYWRkaW5nLHkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrcy53aWR0aC8yKyIsICIrcy5wYWRkaW5nLzIrIikiKSxaYW4oYixzLHApLHN9LEphbj1mdW5jdGlvbihpLHMsdSl7Y29uc3QgZD1pLmFwcGVuZCgiZyIpLHY9ZC5hcHBlbmQoInRleHQiKS50ZXh0KHMuZGVzY3IpLmF0dHIoImR5IiwiMWVtIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmNhbGwoY1dlLHMud2lkdGgpLm5vZGUoKS5nZXRCQm94KCksYj11LmZvbnRTaXplJiZ1LmZvbnRTaXplLnJlcGxhY2U/dS5mb250U2l6ZS5yZXBsYWNlKCJweCIsIiIpOnUuZm9udFNpemU7cmV0dXJuIGQucmVtb3ZlKCksdi5oZWlnaHQrYioxLjEqLjUrcy5wYWRkaW5nfSxaYW49ZnVuY3Rpb24oaSxzLHUpe2kuYXBwZW5kKCJwYXRoIikuYXR0cigiaWQiLCJub2RlLSIrcy5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrcy50eXBlKS5hdHRyKCJkIixgTTAgJHtzLmhlaWdodC01fSB2JHstcy5oZWlnaHQrMio1fSBxMCwtNSA1LC01IGgke3Mud2lkdGgtMio1fSBxNSwwIDUsNSB2JHtzLmhlaWdodC01fSBIMCBaYCksaS5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsIm5vZGUtbGluZS0iK3UpLmF0dHIoIngxIiwwKS5hdHRyKCJ5MSIscy5oZWlnaHQpLmF0dHIoIngyIixzLndpZHRoKS5hdHRyKCJ5MiIscy5oZWlnaHQpfSxzUz17ZHJhd1JlY3Q6T0osZHJhd0NpcmNsZTpWYW4sZHJhd1NlY3Rpb246R2FuLGRyYXdUZXh0OnNXZSxkcmF3TGFiZWw6VWFuLGRyYXdUYXNrOkthbixkcmF3QmFja2dyb3VuZFJlY3Q6V2FuLGdldFRleHRPYmo6WWFuLGdldE5vdGVSZWN0Olp2ZSxpbml0R3JhcGhpY3M6WGFuLGRyYXdOb2RlOlFhbixnZXRWaXJ0dWFsTm9kZUhlaWdodDpKYW59LGVvbj1mdW5jdGlvbihpLHMsdSxkKXt2YXIgWCxnZTtjb25zdCBwPXF0KCksdj1wLmxlZnRNYXJnaW4/PzUwO1hlLmRlYnVnKCJ0aW1lbGluZSIsZC5kYik7Y29uc3QgYj1wLnNlY3VyaXR5TGV2ZWw7bGV0IHk7Yj09PSJzYW5kYm94IiYmKHk9SXIoIiNpIitzKSk7Y29uc3QgXz1JcihiPT09InNhbmRib3giP3kubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLnNlbGVjdCgiIyIrcyk7Xy5hcHBlbmQoImciKTtjb25zdCBBPWQuZGIuZ2V0VGFza3MoKSxQPWQuZGIuZ2V0Q29tbW9uRGIoKS5nZXREaWFncmFtVGl0bGUoKTtYZS5kZWJ1ZygidGFzayIsQSksc1MuaW5pdEdyYXBoaWNzKF8pO2NvbnN0IFI9ZC5kYi5nZXRTZWN0aW9ucygpO1hlLmRlYnVnKCJzZWN0aW9ucyIsUik7bGV0IEY9MCxqPTAsSz0wLGVlPTAsaWU9NTArdixvZT01MDtlZT01MDtsZXQgcGU9MCxiZT0hMDtSLmZvckVhY2goZnVuY3Rpb24oVyl7Y29uc3QgeGU9e251bWJlcjpwZSxkZXNjcjpXLHNlY3Rpb246cGUsd2lkdGg6MTUwLHBhZGRpbmc6MjAsbWF4SGVpZ2h0OkZ9LFU9c1MuZ2V0VmlydHVhbE5vZGVIZWlnaHQoXyx4ZSxwKTtYZS5kZWJ1Zygic2VjdGlvbkhlaWdodCBiZWZvcmUgZHJhdyIsVSksRj1NYXRoLm1heChGLFUrMjApfSk7bGV0IGFlPTAsbmU9MDtYZS5kZWJ1ZygidGFza3MubGVuZ3RoIixBLmxlbmd0aCk7Zm9yKGNvbnN0W1cseGVdb2YgQS5lbnRyaWVzKCkpe2NvbnN0IFU9e251bWJlcjpXLGRlc2NyOnhlLHNlY3Rpb246eGUuc2VjdGlvbix3aWR0aDoxNTAscGFkZGluZzoyMCxtYXhIZWlnaHQ6an0sRmU9c1MuZ2V0VmlydHVhbE5vZGVIZWlnaHQoXyxVLHApO1hlLmRlYnVnKCJ0YXNrSGVpZ2h0IGJlZm9yZSBkcmF3IixGZSksaj1NYXRoLm1heChqLEZlKzIwKSxhZT1NYXRoLm1heChhZSx4ZS5ldmVudHMubGVuZ3RoKTtsZXQgUGU9MDtmb3IobGV0IGplPTA7amU8eGUuZXZlbnRzLmxlbmd0aDtqZSsrKXtjb25zdCBTZT17ZGVzY3I6eGUuZXZlbnRzW2plXSxzZWN0aW9uOnhlLnNlY3Rpb24sbnVtYmVyOnhlLnNlY3Rpb24sd2lkdGg6MTUwLHBhZGRpbmc6MjAsbWF4SGVpZ2h0OjUwfTtQZSs9c1MuZ2V0VmlydHVhbE5vZGVIZWlnaHQoXyxTZSxwKX1uZT1NYXRoLm1heChuZSxQZSl9WGUuZGVidWcoIm1heFNlY3Rpb25IZWlnaHQgYmVmb3JlIGRyYXciLEYpLFhlLmRlYnVnKCJtYXhUYXNrSGVpZ2h0IGJlZm9yZSBkcmF3IixqKSxSJiZSLmxlbmd0aD4wP1IuZm9yRWFjaChXPT57Y29uc3QgeGU9QS5maWx0ZXIoamU9PmplLnNlY3Rpb249PT1XKSxVPXtudW1iZXI6cGUsZGVzY3I6VyxzZWN0aW9uOnBlLHdpZHRoOjIwMCpNYXRoLm1heCh4ZS5sZW5ndGgsMSktNTAscGFkZGluZzoyMCxtYXhIZWlnaHQ6Rn07WGUuZGVidWcoInNlY3Rpb25Ob2RlIixVKTtjb25zdCBGZT1fLmFwcGVuZCgiZyIpLFBlPXNTLmRyYXdOb2RlKEZlLFUscGUscCk7WGUuZGVidWcoInNlY3Rpb25Ob2RlIG91dHB1dCIsUGUpLEZlLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2llfSwgJHtlZX0pYCksb2UrPUYrNTAseGUubGVuZ3RoPjAmJnVXZShfLHhlLHBlLGllLG9lLGoscCxhZSxuZSxGLCExKSxpZSs9MjAwKk1hdGgubWF4KHhlLmxlbmd0aCwxKSxvZT1lZSxwZSsrfSk6KGJlPSExLHVXZShfLEEscGUsaWUsb2UsaixwLGFlLG5lLEYsITApKTtjb25zdCBzZT1fLm5vZGUoKS5nZXRCQm94KCk7WGUuZGVidWcoImJvdW5kcyIsc2UpLFAmJl8uYXBwZW5kKCJ0ZXh0IikudGV4dChQKS5hdHRyKCJ4IixzZS53aWR0aC8yLXYpLmF0dHIoImZvbnQtc2l6ZSIsIjRleCIpLmF0dHIoImZvbnQtd2VpZ2h0IiwiYm9sZCIpLmF0dHIoInkiLDIwKSxLPWJlP0YraisxNTA6aisxMDAsXy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxpbmVXcmFwcGVyIikuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLHYpLmF0dHIoInkxIixLKS5hdHRyKCJ4MiIsc2Uud2lkdGgrMyp2KS5hdHRyKCJ5MiIsSykuYXR0cigic3Ryb2tlLXdpZHRoIiw0KS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoI2Fycm93aGVhZCkiKSx5OSh2b2lkIDAsXywoKFg9cC50aW1lbGluZSk9PW51bGw/dm9pZCAwOlgucGFkZGluZyk/PzUwLCgoZ2U9cC50aW1lbGluZSk9PW51bGw/dm9pZCAwOmdlLnVzZU1heFdpZHRoKT8/ITEpfSx1V2U9ZnVuY3Rpb24oaSxzLHUsZCxwLHYsYix5LFQsXyxBKXt2YXIgUDtmb3IoY29uc3QgUiBvZiBzKXtjb25zdCBGPXtkZXNjcjpSLnRhc2ssc2VjdGlvbjp1LG51bWJlcjp1LHdpZHRoOjE1MCxwYWRkaW5nOjIwLG1heEhlaWdodDp2fTtYZS5kZWJ1ZygidGFza05vZGUiLEYpO2NvbnN0IGo9aS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRhc2tXcmFwcGVyIiksZWU9c1MuZHJhd05vZGUoaixGLHUsYikuaGVpZ2h0O2lmKFhlLmRlYnVnKCJ0YXNrSGVpZ2h0IGFmdGVyIGRyYXciLGVlKSxqLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2R9LCAke3B9KWApLHY9TWF0aC5tYXgodixlZSksUi5ldmVudHMpe2NvbnN0IGllPWkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsaW5lV3JhcHBlciIpO2xldCBvZT12O3ArPTEwMCxvZT1vZSt0b24oaSxSLmV2ZW50cyx1LGQscCxiKSxwLT0xMDAsaWUuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLGQrMTkwLzIpLmF0dHIoInkxIixwK3YpLmF0dHIoIngyIixkKzE5MC8yKS5hdHRyKCJ5MiIscCt2KyhBP3Y6XykrVCsxMjApLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCNhcnJvd2hlYWQpIikuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjUsNSIpfWQ9ZCsyMDAsQSYmISgoUD1iLnRpbWVsaW5lKSE9bnVsbCYmUC5kaXNhYmxlTXVsdGljb2xvcikmJnUrK31wPXAtMTB9LHRvbj1mdW5jdGlvbihpLHMsdSxkLHAsdil7bGV0IGI9MDtjb25zdCB5PXA7cD1wKzEwMDtmb3IoY29uc3QgVCBvZiBzKXtjb25zdCBfPXtkZXNjcjpULHNlY3Rpb246dSxudW1iZXI6dSx3aWR0aDoxNTAscGFkZGluZzoyMCxtYXhIZWlnaHQ6NTB9O1hlLmRlYnVnKCJldmVudE5vZGUiLF8pO2NvbnN0IEE9aS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImV2ZW50V3JhcHBlciIpLFI9c1MuZHJhd05vZGUoQSxfLHUsdikuaGVpZ2h0O2I9YitSLEEuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7ZH0sICR7cH0pYCkscD1wKzEwK1J9cmV0dXJuIHA9eSxifSxub249e3NldENvbmY6KCk9Pnt9LGRyYXc6ZW9ufSxyb249aT0+e2xldCBzPSIiO2ZvcihsZXQgdT0wO3U8aS5USEVNRV9DT0xPUl9MSU1JVDt1KyspaVsibGluZUNvbG9yIit1XT1pWyJsaW5lQ29sb3IiK3VdfHxpWyJjU2NhbGVJbnYiK3VdLF9DKGlbImxpbmVDb2xvciIrdV0pP2lbImxpbmVDb2xvciIrdV09R3MoaVsibGluZUNvbG9yIit1XSwyMCk6aVsibGluZUNvbG9yIit1XT1mYShpWyJsaW5lQ29sb3IiK3VdLDIwKTtmb3IobGV0IHU9MDt1PGkuVEhFTUVfQ09MT1JfTElNSVQ7dSsrKXtjb25zdCBkPSIiKygxNy0zKnUpO3MrPWAKICAgIC5zZWN0aW9uLSR7dS0xfSByZWN0LCAuc2VjdGlvbi0ke3UtMX0gcGF0aCwgLnNlY3Rpb24tJHt1LTF9IGNpcmNsZSwgLnNlY3Rpb24tJHt1LTF9IHBhdGggIHsKICAgICAgZmlsbDogJHtpWyJjU2NhbGUiK3VdfTsKICAgIH0KICAgIC5zZWN0aW9uLSR7dS0xfSB0ZXh0IHsKICAgICBmaWxsOiAke2lbImNTY2FsZUxhYmVsIit1XX07CiAgICB9CiAgICAubm9kZS1pY29uLSR7dS0xfSB7CiAgICAgIGZvbnQtc2l6ZTogNDBweDsKICAgICAgY29sb3I6ICR7aVsiY1NjYWxlTGFiZWwiK3VdfTsKICAgIH0KICAgIC5zZWN0aW9uLWVkZ2UtJHt1LTF9ewogICAgICBzdHJva2U6ICR7aVsiY1NjYWxlIit1XX07CiAgICB9CiAgICAuZWRnZS1kZXB0aC0ke3UtMX17CiAgICAgIHN0cm9rZS13aWR0aDogJHtkfTsKICAgIH0KICAgIC5zZWN0aW9uLSR7dS0xfSBsaW5lIHsKICAgICAgc3Ryb2tlOiAke2lbImNTY2FsZUludiIrdV19IDsKICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgfQoKICAgIC5saW5lV3JhcHBlciBsaW5lewogICAgICBzdHJva2U6ICR7aVsiY1NjYWxlTGFiZWwiK3VdfSA7CiAgICB9CgogICAgLmRpc2FibGVkLCAuZGlzYWJsZWQgY2lyY2xlLCAuZGlzYWJsZWQgdGV4dCB7CiAgICAgIGZpbGw6IGxpZ2h0Z3JheTsKICAgIH0KICAgIC5kaXNhYmxlZCB0ZXh0IHsKICAgICAgZmlsbDogI2VmZWZlZjsKICAgIH0KICAgIGB9cmV0dXJuIHN9LGlvbj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7ZGI6emFuLHJlbmRlcmVyOm5vbixwYXJzZXI6JGFuLHN0eWxlczppPT5gCiAgLmVkZ2UgewogICAgc3Ryb2tlLXdpZHRoOiAzOwogIH0KICAke3JvbihpKX0KICAuc2VjdGlvbi1yb290IHJlY3QsIC5zZWN0aW9uLXJvb3QgcGF0aCwgLnNlY3Rpb24tcm9vdCBjaXJjbGUgIHsKICAgIGZpbGw6ICR7aS5naXQwfTsKICB9CiAgLnNlY3Rpb24tcm9vdCB0ZXh0IHsKICAgIGZpbGw6ICR7aS5naXRCcmFuY2hMYWJlbDB9OwogIH0KICAuaWNvbi1jb250YWluZXIgewogICAgaGVpZ2h0OjEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogIH0KICAuZWRnZSB7CiAgICBmaWxsOiBub25lOwogIH0KICAuZXZlbnRXcmFwcGVyICB7CiAgIGZpbHRlcjogYnJpZ2h0bmVzcygxMjAlKTsKICB9CmB9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBld2U9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihiZSxhZSxuZSxzZSl7Zm9yKG5lPW5lfHx7fSxzZT1iZS5sZW5ndGg7c2UtLTtuZVtiZVtzZV1dPWFlKTtyZXR1cm4gbmV9LHM9WzEsNF0sdT1bMSwxM10sZD1bMSwxMl0scD1bMSwxNV0sdj1bMSwxNl0sYj1bMSwyMF0seT1bMSwxOV0sVD1bNiw3LDhdLF89WzEsMjZdLEE9WzEsMjRdLFA9WzEsMjVdLFI9WzYsNywxMV0sRj1bMSw2LDEzLDE1LDE2LDE5LDIyXSxqPVsxLDMzXSxLPVsxLDM0XSxlZT1bMSw2LDcsMTEsMTMsMTUsMTYsMTksMjJdLGllPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxtaW5kTWFwOjQsc3BhY2VMaW5lczo1LFNQQUNFTElORTo2LE5MOjcsTUlORE1BUDo4LGRvY3VtZW50Ojksc3RvcDoxMCxFT0Y6MTEsc3RhdGVtZW50OjEyLFNQQUNFTElTVDoxMyxub2RlOjE0LElDT046MTUsQ0xBU1M6MTYsbm9kZVdpdGhJZDoxNyxub2RlV2l0aG91dElkOjE4LE5PREVfRFNUQVJUOjE5LE5PREVfREVTQ1I6MjAsTk9ERV9ERU5EOjIxLE5PREVfSUQ6MjIsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDY6IlNQQUNFTElORSIsNzoiTkwiLDg6Ik1JTkRNQVAiLDExOiJFT0YiLDEzOiJTUEFDRUxJU1QiLDE1OiJJQ09OIiwxNjoiQ0xBU1MiLDE5OiJOT0RFX0RTVEFSVCIsMjA6Ik5PREVfREVTQ1IiLDIxOiJOT0RFX0RFTkQiLDIyOiJOT0RFX0lEIn0scHJvZHVjdGlvbnNfOlswLFszLDFdLFszLDJdLFs1LDFdLFs1LDJdLFs1LDJdLFs0LDJdLFs0LDNdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwyXSxbMTAsMl0sWzksM10sWzksMl0sWzEyLDJdLFsxMiwyXSxbMTIsMl0sWzEyLDFdLFsxMiwxXSxbMTIsMV0sWzEyLDFdLFsxMiwxXSxbMTQsMV0sWzE0LDFdLFsxOCwzXSxbMTcsMV0sWzE3LDRdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKGFlLG5lLHNlLGRlLFgsZ2UsVyl7dmFyIHhlPWdlLmxlbmd0aC0xO3N3aXRjaChYKXtjYXNlIDY6Y2FzZSA3OnJldHVybiBkZTtjYXNlIDg6ZGUuZ2V0TG9nZ2VyKCkudHJhY2UoIlN0b3AgTkwgIik7YnJlYWs7Y2FzZSA5OmRlLmdldExvZ2dlcigpLnRyYWNlKCJTdG9wIEVPRiAiKTticmVhaztjYXNlIDExOmRlLmdldExvZ2dlcigpLnRyYWNlKCJTdG9wIE5MMiAiKTticmVhaztjYXNlIDEyOmRlLmdldExvZ2dlcigpLnRyYWNlKCJTdG9wIEVPRjIgIik7YnJlYWs7Y2FzZSAxNTpkZS5nZXRMb2dnZXIoKS5pbmZvKCJOb2RlOiAiLGdlW3hlXS5pZCksZGUuYWRkTm9kZShnZVt4ZS0xXS5sZW5ndGgsZ2VbeGVdLmlkLGdlW3hlXS5kZXNjcixnZVt4ZV0udHlwZSk7YnJlYWs7Y2FzZSAxNjpkZS5nZXRMb2dnZXIoKS50cmFjZSgiSWNvbjogIixnZVt4ZV0pLGRlLmRlY29yYXRlTm9kZSh7aWNvbjpnZVt4ZV19KTticmVhaztjYXNlIDE3OmNhc2UgMjE6ZGUuZGVjb3JhdGVOb2RlKHtjbGFzczpnZVt4ZV19KTticmVhaztjYXNlIDE4OmRlLmdldExvZ2dlcigpLnRyYWNlKCJTUEFDRUxJU1QiKTticmVhaztjYXNlIDE5OmRlLmdldExvZ2dlcigpLnRyYWNlKCJOb2RlOiAiLGdlW3hlXS5pZCksZGUuYWRkTm9kZSgwLGdlW3hlXS5pZCxnZVt4ZV0uZGVzY3IsZ2VbeGVdLnR5cGUpO2JyZWFrO2Nhc2UgMjA6ZGUuZGVjb3JhdGVOb2RlKHtpY29uOmdlW3hlXX0pO2JyZWFrO2Nhc2UgMjU6ZGUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZm91bmQgLi4iLGdlW3hlLTJdKSx0aGlzLiQ9e2lkOmdlW3hlLTFdLGRlc2NyOmdlW3hlLTFdLHR5cGU6ZGUuZ2V0VHlwZShnZVt4ZS0yXSxnZVt4ZV0pfTticmVhaztjYXNlIDI2OnRoaXMuJD17aWQ6Z2VbeGVdLGRlc2NyOmdlW3hlXSx0eXBlOmRlLm5vZGVUeXBlLkRFRkFVTFR9O2JyZWFrO2Nhc2UgMjc6ZGUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZm91bmQgLi4iLGdlW3hlLTNdKSx0aGlzLiQ9e2lkOmdlW3hlLTNdLGRlc2NyOmdlW3hlLTFdLHR5cGU6ZGUuZ2V0VHlwZShnZVt4ZS0yXSxnZVt4ZV0pfTticmVha319LHRhYmxlOlt7MzoxLDQ6Miw1OjMsNjpbMSw1XSw4OnN9LHsxOlszXX0sezE6WzIsMV19LHs0OjYsNjpbMSw3XSw3OlsxLDhdLDg6c30sezY6dSw3OlsxLDEwXSw5OjksMTI6MTEsMTM6ZCwxNDoxNCwxNTpwLDE2OnYsMTc6MTcsMTg6MTgsMTk6YiwyMjp5fSxpKFQsWzIsM10pLHsxOlsyLDJdfSxpKFQsWzIsNF0pLGkoVCxbMiw1XSksezE6WzIsNl0sNjp1LDEyOjIxLDEzOmQsMTQ6MTQsMTU6cCwxNjp2LDE3OjE3LDE4OjE4LDE5OmIsMjI6eX0sezY6dSw5OjIyLDEyOjExLDEzOmQsMTQ6MTQsMTU6cCwxNjp2LDE3OjE3LDE4OjE4LDE5OmIsMjI6eX0sezY6Xyw3OkEsMTA6MjMsMTE6UH0saShSLFsyLDIyXSx7MTc6MTcsMTg6MTgsMTQ6MjcsMTU6WzEsMjhdLDE2OlsxLDI5XSwxOTpiLDIyOnl9KSxpKFIsWzIsMThdKSxpKFIsWzIsMTldKSxpKFIsWzIsMjBdKSxpKFIsWzIsMjFdKSxpKFIsWzIsMjNdKSxpKFIsWzIsMjRdKSxpKFIsWzIsMjZdLHsxOTpbMSwzMF19KSx7MjA6WzEsMzFdfSx7NjpfLDc6QSwxMDozMiwxMTpQfSx7MTpbMiw3XSw2OnUsMTI6MjEsMTM6ZCwxNDoxNCwxNTpwLDE2OnYsMTc6MTcsMTg6MTgsMTk6YiwyMjp5fSxpKEYsWzIsMTRdLHs3OmosMTE6S30pLGkoZWUsWzIsOF0pLGkoZWUsWzIsOV0pLGkoZWUsWzIsMTBdKSxpKFIsWzIsMTVdKSxpKFIsWzIsMTZdKSxpKFIsWzIsMTddKSx7MjA6WzEsMzVdfSx7MjE6WzEsMzZdfSxpKEYsWzIsMTNdLHs3OmosMTE6S30pLGkoZWUsWzIsMTFdKSxpKGVlLFsyLDEyXSksezIxOlsxLDM3XX0saShSLFsyLDI1XSksaShSLFsyLDI3XSldLGRlZmF1bHRBY3Rpb25zOnsyOlsyLDFdLDY6WzIsMl19LHBhcnNlRXJyb3I6ZnVuY3Rpb24oYWUsbmUpe2lmKG5lLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoYWUpO2Vsc2V7dmFyIHNlPW5ldyBFcnJvcihhZSk7dGhyb3cgc2UuaGFzaD1uZSxzZX19LHBhcnNlOmZ1bmN0aW9uKGFlKXt2YXIgbmU9dGhpcyxzZT1bMF0sZGU9W10sWD1bbnVsbF0sZ2U9W10sVz10aGlzLnRhYmxlLHhlPSIiLFU9MCxGZT0wLFBlPTIsamU9MSxJZT1nZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxTZT1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLENlPXt5eTp7fX07Zm9yKHZhciBrZSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGtlKSYmKENlLnl5W2tlXT10aGlzLnl5W2tlXSk7U2Uuc2V0SW5wdXQoYWUsQ2UueXkpLENlLnl5LmxleGVyPVNlLENlLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBTZS55eWxsb2M+InUiJiYoU2UueXlsbG9jPXt9KTt2YXIgS2U9U2UueXlsbG9jO2dlLnB1c2goS2UpO3ZhciBGdD1TZS5vcHRpb25zJiZTZS5vcHRpb25zLnJhbmdlczt0eXBlb2YgQ2UueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9Q2UueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gTmUoKXt2YXIgT247cmV0dXJuIE9uPWRlLnBvcCgpfHxTZS5sZXgoKXx8amUsdHlwZW9mIE9uIT0ibnVtYmVyIiYmKE9uIGluc3RhbmNlb2YgQXJyYXkmJihkZT1PbixPbj1kZS5wb3AoKSksT249bmUuc3ltYm9sc19bT25dfHxPbiksT259Zm9yKHZhciBnbixfdCxFdCxHdCxsbj17fSx4dCxQdCxRZSxEdDs7KXtpZihfdD1zZVtzZS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tfdF0/RXQ9dGhpcy5kZWZhdWx0QWN0aW9uc1tfdF06KChnbj09PW51bGx8fHR5cGVvZiBnbj4idSIpJiYoZ249TmUoKSksRXQ9V1tfdF0mJldbX3RdW2duXSksdHlwZW9mIEV0PiJ1Inx8IUV0Lmxlbmd0aHx8IUV0WzBdKXt2YXIga3Q9IiI7RHQ9W107Zm9yKHh0IGluIFdbX3RdKXRoaXMudGVybWluYWxzX1t4dF0mJnh0PlBlJiZEdC5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19beHRdKyInIik7U2Uuc2hvd1Bvc2l0aW9uP2t0PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKFUrMSkrYDoKYCtTZS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK0R0LmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bZ25dfHxnbikrIiciOmt0PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKFUrMSkrIjogVW5leHBlY3RlZCAiKyhnbj09amU/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bZ25dfHxnbikrIiciKSx0aGlzLnBhcnNlRXJyb3Ioa3Qse3RleHQ6U2UubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW2duXXx8Z24sbGluZTpTZS55eWxpbmVubyxsb2M6S2UsZXhwZWN0ZWQ6RHR9KX1pZihFdFswXWluc3RhbmNlb2YgQXJyYXkmJkV0Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrX3QrIiwgdG9rZW46ICIrZ24pO3N3aXRjaChFdFswXSl7Y2FzZSAxOnNlLnB1c2goZ24pLFgucHVzaChTZS55eXRleHQpLGdlLnB1c2goU2UueXlsbG9jKSxzZS5wdXNoKEV0WzFdKSxnbj1udWxsLEZlPVNlLnl5bGVuZyx4ZT1TZS55eXRleHQsVT1TZS55eWxpbmVubyxLZT1TZS55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKFB0PXRoaXMucHJvZHVjdGlvbnNfW0V0WzFdXVsxXSxsbi4kPVhbWC5sZW5ndGgtUHRdLGxuLl8kPXtmaXJzdF9saW5lOmdlW2dlLmxlbmd0aC0oUHR8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpnZVtnZS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpnZVtnZS5sZW5ndGgtKFB0fHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmdlW2dlLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sRnQmJihsbi5fJC5yYW5nZT1bZ2VbZ2UubGVuZ3RoLShQdHx8MSldLnJhbmdlWzBdLGdlW2dlLmxlbmd0aC0xXS5yYW5nZVsxXV0pLEd0PXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShsbixbeGUsRmUsVSxDZS55eSxFdFsxXSxYLGdlXS5jb25jYXQoSWUpKSx0eXBlb2YgR3Q8InUiKXJldHVybiBHdDtQdCYmKHNlPXNlLnNsaWNlKDAsLTEqUHQqMiksWD1YLnNsaWNlKDAsLTEqUHQpLGdlPWdlLnNsaWNlKDAsLTEqUHQpKSxzZS5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW0V0WzFdXVswXSksWC5wdXNoKGxuLiQpLGdlLnB1c2gobG4uXyQpLFFlPVdbc2Vbc2UubGVuZ3RoLTJdXVtzZVtzZS5sZW5ndGgtMV1dLHNlLnB1c2goUWUpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxvZT1mdW5jdGlvbigpe3ZhciBiZT17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihuZSxzZSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihuZSxzZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IobmUpfSxzZXRJbnB1dDpmdW5jdGlvbihhZSxuZSl7cmV0dXJuIHRoaXMueXk9bmV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PWFlLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBhZT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9YWUsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPWFlLHRoaXMubWF0Y2hlZCs9YWU7dmFyIG5lPWFlLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gbmU/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLGFlfSx1bnB1dDpmdW5jdGlvbihhZSl7dmFyIG5lPWFlLmxlbmd0aCxzZT1hZS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PWFlK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1uZSksdGhpcy5vZmZzZXQtPW5lO3ZhciBkZT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxzZS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPXNlLmxlbmd0aC0xKTt2YXIgWD10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46c2U/KHNlLmxlbmd0aD09PWRlLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrZGVbZGUubGVuZ3RoLXNlLmxlbmd0aF0ubGVuZ3RoLXNlWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bWFswXSxYWzBdK3RoaXMueXlsZW5nLW5lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oYWUpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShhZSkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgYWU9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihhZS5sZW5ndGg+MjA/Ii4uLiI6IiIpK2FlLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIGFlPXRoaXMubWF0Y2g7cmV0dXJuIGFlLmxlbmd0aDwyMCYmKGFlKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1hZS5sZW5ndGgpKSwoYWUuc3Vic3RyKDAsMjApKyhhZS5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGFlPXRoaXMucGFzdElucHV0KCksbmU9bmV3IEFycmF5KGFlLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIGFlK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtuZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oYWUsbmUpe3ZhciBzZSxkZSxYO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihYPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKFgueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksZGU9YWVbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLGRlJiYodGhpcy55eWxpbmVubys9ZGUubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46ZGU/ZGVbZGUubGVuZ3RoLTFdLmxlbmd0aC1kZVtkZS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbithZVswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1hZVswXSx0aGlzLm1hdGNoKz1hZVswXSx0aGlzLm1hdGNoZXM9YWUsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoYWVbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPWFlWzBdLHNlPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLG5lLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLHNlKXJldHVybiBzZTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgZ2UgaW4gWCl0aGlzW2dlXT1YW2dlXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBhZSxuZSxzZSxkZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBYPXRoaXMuX2N1cnJlbnRSdWxlcygpLGdlPTA7Z2U8WC5sZW5ndGg7Z2UrKylpZihzZT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW1hbZ2VdXSksc2UmJighbmV8fHNlWzBdLmxlbmd0aD5uZVswXS5sZW5ndGgpKXtpZihuZT1zZSxkZT1nZSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihhZT10aGlzLnRlc3RfbWF0Y2goc2UsWFtnZV0pLGFlIT09ITEpcmV0dXJuIGFlO2lmKHRoaXMuX2JhY2t0cmFjayl7bmU9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gbmU/KGFlPXRoaXMudGVzdF9tYXRjaChuZSxYW2RlXSksYWUhPT0hMT9hZTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIG5lPXRoaXMubmV4dCgpO3JldHVybiBuZXx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24obmUpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChuZSl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7dmFyIG5lPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIG5lPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24obmUpe3JldHVybiBuZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKG5lfHwwKSxuZT49MD90aGlzLmNvbmRpdGlvblN0YWNrW25lXToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbihuZSl7dGhpcy5iZWdpbihuZSl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24obmUsc2UsZGUsWCl7c3dpdGNoKGRlKXtjYXNlIDA6cmV0dXJuIG5lLmdldExvZ2dlcigpLnRyYWNlKCJGb3VuZCBjb21tZW50IixzZS55eXRleHQpLDY7Y2FzZSAxOnJldHVybiA4O2Nhc2UgMjp0aGlzLmJlZ2luKCJDTEFTUyIpO2JyZWFrO2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE2O2Nhc2UgNDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA1Om5lLmdldExvZ2dlcigpLnRyYWNlKCJCZWdpbiBpY29uIiksdGhpcy5iZWdpbigiSUNPTiIpO2JyZWFrO2Nhc2UgNjpyZXR1cm4gbmUuZ2V0TG9nZ2VyKCkudHJhY2UoIlNQQUNFTElORSIpLDY7Y2FzZSA3OnJldHVybiA3O2Nhc2UgODpyZXR1cm4gMTU7Y2FzZSA5Om5lLmdldExvZ2dlcigpLnRyYWNlKCJlbmQgaWNvbiIpLHRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEwOnJldHVybiBuZS5nZXRMb2dnZXIoKS50cmFjZSgiRXhwbG9kaW5nIG5vZGUiKSx0aGlzLmJlZ2luKCJOT0RFIiksMTk7Y2FzZSAxMTpyZXR1cm4gbmUuZ2V0TG9nZ2VyKCkudHJhY2UoIkNsb3VkIiksdGhpcy5iZWdpbigiTk9ERSIpLDE5O2Nhc2UgMTI6cmV0dXJuIG5lLmdldExvZ2dlcigpLnRyYWNlKCJFeHBsb3Npb24gQmFuZyIpLHRoaXMuYmVnaW4oIk5PREUiKSwxOTtjYXNlIDEzOnJldHVybiBuZS5nZXRMb2dnZXIoKS50cmFjZSgiQ2xvdWQgQmFuZyIpLHRoaXMuYmVnaW4oIk5PREUiKSwxOTtjYXNlIDE0OnJldHVybiB0aGlzLmJlZ2luKCJOT0RFIiksMTk7Y2FzZSAxNTpyZXR1cm4gdGhpcy5iZWdpbigiTk9ERSIpLDE5O2Nhc2UgMTY6cmV0dXJuIHRoaXMuYmVnaW4oIk5PREUiKSwxOTtjYXNlIDE3OnJldHVybiB0aGlzLmJlZ2luKCJOT0RFIiksMTk7Y2FzZSAxODpyZXR1cm4gMTM7Y2FzZSAxOTpyZXR1cm4gMjI7Y2FzZSAyMDpyZXR1cm4gMTE7Y2FzZSAyMTp0aGlzLmJlZ2luKCJOU1RSMiIpO2JyZWFrO2Nhc2UgMjI6cmV0dXJuIk5PREVfREVTQ1IiO2Nhc2UgMjM6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjQ6bmUuZ2V0TG9nZ2VyKCkudHJhY2UoIlN0YXJ0aW5nIE5TVFIiKSx0aGlzLmJlZ2luKCJOU1RSIik7YnJlYWs7Y2FzZSAyNTpyZXR1cm4gbmUuZ2V0TG9nZ2VyKCkudHJhY2UoImRlc2NyaXB0aW9uOiIsc2UueXl0ZXh0KSwiTk9ERV9ERVNDUiI7Y2FzZSAyNjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLG5lLmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCApKSIpLCJOT0RFX0RFTkQiO2Nhc2UgMjg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxuZS5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKSIpLCJOT0RFX0RFTkQiO2Nhc2UgMjk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxuZS5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgLi4uIixzZS55eXRleHQpLCJOT0RFX0RFTkQiO2Nhc2UgMzA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxuZS5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKCgiKSwiTk9ERV9ERU5EIjtjYXNlIDMxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksbmUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgtIiksIk5PREVfREVORCI7Y2FzZSAzMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLG5lLmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCAoLSIpLCJOT0RFX0RFTkQiO2Nhc2UgMzM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxuZS5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKCgiKSwiTk9ERV9ERU5EIjtjYXNlIDM0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksbmUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgoIiksIk5PREVfREVORCI7Y2FzZSAzNTpyZXR1cm4gbmUuZ2V0TG9nZ2VyKCkudHJhY2UoIkxvbmcgZGVzY3JpcHRpb246IixzZS55eXRleHQpLDIwO2Nhc2UgMzY6cmV0dXJuIG5lLmdldExvZ2dlcigpLnRyYWNlKCJMb25nIGRlc2NyaXB0aW9uOiIsc2UueXl0ZXh0KSwyMH19LHJ1bGVzOlsvXig/OlxzKiUlLiopL2ksL14oPzptaW5kbWFwXGIpL2ksL14oPzo6OjopL2ksL14oPzouKykvaSwvXig/OlxuKS9pLC9eKD86OjppY29uXCgpL2ksL14oPzpbXHNdK1tcbl0pL2ksL14oPzpbXG5dKykvaSwvXig/OlteXCldKykvaSwvXig/OlwpKS9pLC9eKD86LVwpKS9pLC9eKD86XCgtKS9pLC9eKD86XClcKSkvaSwvXig/OlwpKS9pLC9eKD86XChcKCkvaSwvXig/Olx7XHspL2ksL14oPzpcKCkvaSwvXig/OlxbKS9pLC9eKD86W1xzXSspL2ksL14oPzpbXlwoXFtcblwpXHtcfV0rKS9pLC9eKD86JCkvaSwvXig/OlsiXVtgXSkvaSwvXig/OlteYCJdKykvaSwvXig/OltgXVsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0rKS9pLC9eKD86WyJdKS9pLC9eKD86W1wpXVwpKS9pLC9eKD86W1wpXSkvaSwvXig/OltcXV0pL2ksL14oPzpcfVx9KS9pLC9eKD86XCgtKS9pLC9eKD86LVwpKS9pLC9eKD86XChcKCkvaSwvXig/OlwoKS9pLC9eKD86W15cKVxdXChcfV0rKS9pLC9eKD86LisoPyFcKFwoKSkvaV0sY29uZGl0aW9uczp7Q0xBU1M6e3J1bGVzOlszLDRdLGluY2x1c2l2ZTohMX0sSUNPTjp7cnVsZXM6WzgsOV0saW5jbHVzaXZlOiExfSxOU1RSMjp7cnVsZXM6WzIyLDIzXSxpbmNsdXNpdmU6ITF9LE5TVFI6e3J1bGVzOlsyNSwyNl0saW5jbHVzaXZlOiExfSxOT0RFOntydWxlczpbMjEsMjQsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzZdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDUsNiw3LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIGJlfSgpO2llLmxleGVyPW9lO2Z1bmN0aW9uIHBlKCl7dGhpcy55eT17fX1yZXR1cm4gcGUucHJvdG90eXBlPWllLGllLlBhcnNlcj1wZSxuZXcgcGV9KCk7ZXdlLnBhcnNlcj1ld2U7Y29uc3Qgc29uPWV3ZTtsZXQgSzM9W10sbFdlPTAsdHdlPXt9O2NvbnN0IGFvbj0oKT0+e0szPVtdLGxXZT0wLHR3ZT17fX0sb29uPWZ1bmN0aW9uKGkpe2ZvcihsZXQgcz1LMy5sZW5ndGgtMTtzPj0wO3MtLSlpZihLM1tzXS5sZXZlbDxpKXJldHVybiBLM1tzXTtyZXR1cm4gbnVsbH0sY29uPSgpPT5LMy5sZW5ndGg+MD9LM1swXTpudWxsLHVvbj0oaSxzLHUsZCk9Pnt2YXIgVCxfO1hlLmluZm8oImFkZE5vZGUiLGkscyx1LGQpO2NvbnN0IHA9cXQoKTtsZXQgdj0oKFQ9cC5taW5kbWFwKT09bnVsbD92b2lkIDA6VC5wYWRkaW5nKT8/c2gubWluZG1hcC5wYWRkaW5nO3N3aXRjaChkKXtjYXNlIHYxLlJPVU5ERURfUkVDVDpjYXNlIHYxLlJFQ1Q6Y2FzZSB2MS5IRVhBR09OOnYqPTJ9Y29uc3QgYj17aWQ6bFdlKyssbm9kZUlkOllmKHMscCksbGV2ZWw6aSxkZXNjcjpZZih1LHApLHR5cGU6ZCxjaGlsZHJlbjpbXSx3aWR0aDooKF89cC5taW5kbWFwKT09bnVsbD92b2lkIDA6Xy5tYXhOb2RlV2lkdGgpPz9zaC5taW5kbWFwLm1heE5vZGVXaWR0aCxwYWRkaW5nOnZ9LHk9b29uKGkpO2lmKHkpeS5jaGlsZHJlbi5wdXNoKGIpLEszLnB1c2goYik7ZWxzZSBpZihLMy5sZW5ndGg9PT0wKUszLnB1c2goYik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGNhbiBiZSBvbmx5IG9uZSByb290LiBObyBwYXJlbnQgY291bGQgYmUgZm91bmQgZm9yICgiJytiLmRlc2NyKyciKScpfSx2MT17REVGQVVMVDowLE5PX0JPUkRFUjowLFJPVU5ERURfUkVDVDoxLFJFQ1Q6MixDSVJDTEU6MyxDTE9VRDo0LEJBTkc6NSxIRVhBR09OOjZ9LGxvbj17Y2xlYXI6YW9uLGFkZE5vZGU6dW9uLGdldE1pbmRtYXA6Y29uLG5vZGVUeXBlOnYxLGdldFR5cGU6KGkscyk9Pntzd2l0Y2goWGUuZGVidWcoIkluIGdldCB0eXBlIixpLHMpLGkpe2Nhc2UiWyI6cmV0dXJuIHYxLlJFQ1Q7Y2FzZSIoIjpyZXR1cm4gcz09PSIpIj92MS5ST1VOREVEX1JFQ1Q6djEuQ0xPVUQ7Y2FzZSIoKCI6cmV0dXJuIHYxLkNJUkNMRTtjYXNlIikiOnJldHVybiB2MS5DTE9VRDtjYXNlIikpIjpyZXR1cm4gdjEuQkFORztjYXNlInt7IjpyZXR1cm4gdjEuSEVYQUdPTjtkZWZhdWx0OnJldHVybiB2MS5ERUZBVUxUfX0sc2V0RWxlbWVudEZvcklkOihpLHMpPT57dHdlW2ldPXN9LGRlY29yYXRlTm9kZTppPT57aWYoIWkpcmV0dXJuO2NvbnN0IHM9cXQoKSx1PUszW0szLmxlbmd0aC0xXTtpLmljb24mJih1Lmljb249WWYoaS5pY29uLHMpKSxpLmNsYXNzJiYodS5jbGFzcz1ZZihpLmNsYXNzLHMpKX0sdHlwZTJTdHI6aT0+e3N3aXRjaChpKXtjYXNlIHYxLkRFRkFVTFQ6cmV0dXJuIm5vLWJvcmRlciI7Y2FzZSB2MS5SRUNUOnJldHVybiJyZWN0IjtjYXNlIHYxLlJPVU5ERURfUkVDVDpyZXR1cm4icm91bmRlZC1yZWN0IjtjYXNlIHYxLkNJUkNMRTpyZXR1cm4iY2lyY2xlIjtjYXNlIHYxLkNMT1VEOnJldHVybiJjbG91ZCI7Y2FzZSB2MS5CQU5HOnJldHVybiJiYW5nIjtjYXNlIHYxLkhFWEFHT046cmV0dXJuImhleGdvbiI7ZGVmYXVsdDpyZXR1cm4ibm8tYm9yZGVyIn19LGdldExvZ2dlcjooKT0+WGUsZ2V0RWxlbWVudEJ5SWQ6aT0+dHdlW2ldfTt2YXIgaFdlPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24oaSxzKXsoZnVuY3Rpb24odSxkKXtpLmV4cG9ydHM9ZCgpfSkoQWcsZnVuY3Rpb24oKXtmdW5jdGlvbiB1KHgpeyJAYmFiZWwvaGVscGVycyAtIHR5cGVvZiI7cmV0dXJuIHU9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmdHlwZW9mIFN5bWJvbC5pdGVyYXRvcj09InN5bWJvbCI/ZnVuY3Rpb24obSl7cmV0dXJuIHR5cGVvZiBtfTpmdW5jdGlvbihtKXtyZXR1cm4gbSYmdHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmbS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmbSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIG19LHUoeCl9ZnVuY3Rpb24gZCh4LG0pe2lmKCEoeCBpbnN0YW5jZW9mIG0pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHAoeCxtKXtmb3IodmFyIGs9MDtrPG0ubGVuZ3RoO2srKyl7dmFyIFM9bVtrXTtTLmVudW1lcmFibGU9Uy5lbnVtZXJhYmxlfHwhMSxTLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gUyYmKFMud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4LFMua2V5LFMpfX1mdW5jdGlvbiB2KHgsbSxrKXtyZXR1cm4gbSYmcCh4LnByb3RvdHlwZSxtKSxrJiZwKHgsayksT2JqZWN0LmRlZmluZVByb3BlcnR5KHgsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSkseH1mdW5jdGlvbiBiKHgsbSxrKXtyZXR1cm4gbSBpbiB4P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh4LG0se3ZhbHVlOmssZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp4W21dPWsseH1mdW5jdGlvbiB5KHgsbSl7cmV0dXJuIFQoeCl8fF8oeCxtKXx8QSh4LG0pfHxSKCl9ZnVuY3Rpb24gVCh4KXtpZihBcnJheS5pc0FycmF5KHgpKXJldHVybiB4fWZ1bmN0aW9uIF8oeCxtKXt2YXIgaz14PT1udWxsP251bGw6dHlwZW9mIFN5bWJvbDwidSImJnhbU3ltYm9sLml0ZXJhdG9yXXx8eFsiQEBpdGVyYXRvciJdO2lmKGshPW51bGwpe3ZhciBTPVtdLE09ITAsTz0hMSxOLCQ7dHJ5e2ZvcihrPWsuY2FsbCh4KTshKE09KE49ay5uZXh0KCkpLmRvbmUpJiYoUy5wdXNoKE4udmFsdWUpLCEobSYmUy5sZW5ndGg9PT1tKSk7TT0hMCk7fWNhdGNoKEgpe089ITAsJD1IfWZpbmFsbHl7dHJ5eyFNJiZrLnJldHVybiE9bnVsbCYmay5yZXR1cm4oKX1maW5hbGx5e2lmKE8pdGhyb3cgJH19cmV0dXJuIFN9fWZ1bmN0aW9uIEEoeCxtKXtpZih4KXtpZih0eXBlb2YgeD09InN0cmluZyIpcmV0dXJuIFAoeCxtKTt2YXIgaz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeCkuc2xpY2UoOCwtMSk7aWYoaz09PSJPYmplY3QiJiZ4LmNvbnN0cnVjdG9yJiYoaz14LmNvbnN0cnVjdG9yLm5hbWUpLGs9PT0iTWFwInx8az09PSJTZXQiKXJldHVybiBBcnJheS5mcm9tKHgpO2lmKGs9PT0iQXJndW1lbnRzInx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoaykpcmV0dXJuIFAoeCxtKX19ZnVuY3Rpb24gUCh4LG0peyhtPT1udWxsfHxtPngubGVuZ3RoKSYmKG09eC5sZW5ndGgpO2Zvcih2YXIgaz0wLFM9bmV3IEFycmF5KG0pO2s8bTtrKyspU1trXT14W2tdO3JldHVybiBTfWZ1bmN0aW9uIFIoKXt0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLgpJbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCl9dmFyIEY9dHlwZW9mIHdpbmRvdz4idSI/bnVsbDp3aW5kb3csaj1GP0YubmF2aWdhdG9yOm51bGw7RiYmRi5kb2N1bWVudDt2YXIgSz11KCIiKSxlZT11KHt9KSxpZT11KGZ1bmN0aW9uKCl7fSksb2U9dHlwZW9mIEhUTUxFbGVtZW50PiJ1Ij8idW5kZWZpbmVkIjp1KEhUTUxFbGVtZW50KSxwZT1mdW5jdGlvbihtKXtyZXR1cm4gbSYmbS5pbnN0YW5jZVN0cmluZyYmYWUobS5pbnN0YW5jZVN0cmluZyk/bS5pbnN0YW5jZVN0cmluZygpOm51bGx9LGJlPWZ1bmN0aW9uKG0pe3JldHVybiBtIT1udWxsJiZ1KG0pPT1LfSxhZT1mdW5jdGlvbihtKXtyZXR1cm4gbSE9bnVsbCYmdShtKT09PWllfSxuZT1mdW5jdGlvbihtKXtyZXR1cm4heGUobSkmJihBcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXkobSk6bSE9bnVsbCYmbSBpbnN0YW5jZW9mIEFycmF5KX0sc2U9ZnVuY3Rpb24obSl7cmV0dXJuIG0hPW51bGwmJnUobSk9PT1lZSYmIW5lKG0pJiZtLmNvbnN0cnVjdG9yPT09T2JqZWN0fSxkZT1mdW5jdGlvbihtKXtyZXR1cm4gbSE9bnVsbCYmdShtKT09PWVlfSxYPWZ1bmN0aW9uKG0pe3JldHVybiBtIT1udWxsJiZ1KG0pPT09dSgxKSYmIWlzTmFOKG0pfSxnZT1mdW5jdGlvbihtKXtyZXR1cm4gWChtKSYmTWF0aC5mbG9vcihtKT09PW19LFc9ZnVuY3Rpb24obSl7aWYob2UhPT0idW5kZWZpbmVkIilyZXR1cm4gbSE9bnVsbCYmbSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fSx4ZT1mdW5jdGlvbihtKXtyZXR1cm4gVShtKXx8RmUobSl9LFU9ZnVuY3Rpb24obSl7cmV0dXJuIHBlKG0pPT09ImNvbGxlY3Rpb24iJiZtLl9wcml2YXRlLnNpbmdsZX0sRmU9ZnVuY3Rpb24obSl7cmV0dXJuIHBlKG0pPT09ImNvbGxlY3Rpb24iJiYhbS5fcHJpdmF0ZS5zaW5nbGV9LFBlPWZ1bmN0aW9uKG0pe3JldHVybiBwZShtKT09PSJjb3JlIn0samU9ZnVuY3Rpb24obSl7cmV0dXJuIHBlKG0pPT09InN0eWxlc2hlZXQifSxJZT1mdW5jdGlvbihtKXtyZXR1cm4gcGUobSk9PT0iZXZlbnQifSxTZT1mdW5jdGlvbihtKXtyZXR1cm4gbT09bnVsbD8hMDohIShtPT09IiJ8fG0ubWF0Y2goL15ccyskLykpfSxDZT1mdW5jdGlvbihtKXtyZXR1cm4gdHlwZW9mIEhUTUxFbGVtZW50PiJ1Ij8hMTptIGluc3RhbmNlb2YgSFRNTEVsZW1lbnR9LGtlPWZ1bmN0aW9uKG0pe3JldHVybiBzZShtKSYmWChtLngxKSYmWChtLngyKSYmWChtLnkxKSYmWChtLnkyKX0sS2U9ZnVuY3Rpb24obSl7cmV0dXJuIGRlKG0pJiZhZShtLnRoZW4pfSxGdD1mdW5jdGlvbigpe3JldHVybiBqJiZqLnVzZXJBZ2VudC5tYXRjaCgvbXNpZXx0cmlkZW50fGVkZ2UvaSl9LE5lPWZ1bmN0aW9uKG0sayl7a3x8KGs9ZnVuY3Rpb24oKXtpZihhcmd1bWVudHMubGVuZ3RoPT09MSlyZXR1cm4gYXJndW1lbnRzWzBdO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0wKXJldHVybiJ1bmRlZmluZWQiO2Zvcih2YXIgTz1bXSxOPTA7Tjxhcmd1bWVudHMubGVuZ3RoO04rKylPLnB1c2goYXJndW1lbnRzW05dKTtyZXR1cm4gTy5qb2luKCIkIil9KTt2YXIgUz1mdW5jdGlvbiBNKCl7dmFyIE89dGhpcyxOPWFyZ3VtZW50cywkLEg9ay5hcHBseShPLE4pLHE9TS5jYWNoZTtyZXR1cm4oJD1xW0hdKXx8KCQ9cVtIXT1tLmFwcGx5KE8sTikpLCR9O3JldHVybiBTLmNhY2hlPXt9LFN9LGduPU5lKGZ1bmN0aW9uKHgpe3JldHVybiB4LnJlcGxhY2UoLyhbQS1aXSkvZyxmdW5jdGlvbihtKXtyZXR1cm4iLSIrbS50b0xvd2VyQ2FzZSgpfSl9KSxfdD1OZShmdW5jdGlvbih4KXtyZXR1cm4geC5yZXBsYWNlKC8oLVx3KS9nLGZ1bmN0aW9uKG0pe3JldHVybiBtWzFdLnRvVXBwZXJDYXNlKCl9KX0pLEV0PU5lKGZ1bmN0aW9uKHgsbSl7cmV0dXJuIHgrbVswXS50b1VwcGVyQ2FzZSgpK20uc3Vic3RyaW5nKDEpfSxmdW5jdGlvbih4LG0pe3JldHVybiB4KyIkIittfSksR3Q9ZnVuY3Rpb24obSl7cmV0dXJuIFNlKG0pP206bS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSttLnN1YnN0cmluZygxKX0sbG49Iig/OlstK10/KD86KD86XFxkK3xcXGQqXFwuXFxkKykoPzpbRWVdWystXT9cXGQrKT8pKSIseHQ9InJnYlthXT9cXCgoIitsbisiWyVdPylcXHMqLFxccyooIitsbisiWyVdPylcXHMqLFxccyooIitsbisiWyVdPykoPzpcXHMqLFxccyooIitsbisiKSk/XFwpIixQdD0icmdiW2FdP1xcKCg/OiIrbG4rIlslXT8pXFxzKixcXHMqKD86IitsbisiWyVdPylcXHMqLFxccyooPzoiK2xuKyJbJV0/KSg/OlxccyosXFxzKig/OiIrbG4rIikpP1xcKSIsUWU9ImhzbFthXT9cXCgoIitsbisiKVxccyosXFxzKigiK2xuKyJbJV0pXFxzKixcXHMqKCIrbG4rIlslXSkoPzpcXHMqLFxccyooIitsbisiKSk/XFwpIixEdD0iaHNsW2FdP1xcKCg/OiIrbG4rIilcXHMqLFxccyooPzoiK2xuKyJbJV0pXFxzKixcXHMqKD86IitsbisiWyVdKSg/OlxccyosXFxzKig/OiIrbG4rIikpP1xcKSIsa3Q9IlxcI1swLTlhLWZBLUZdezN9IixPbj0iXFwjWzAtOWEtZkEtRl17Nn0iLGh0PWZ1bmN0aW9uKG0sayl7cmV0dXJuIG08az8tMTptPms/MTowfSx6cj1mdW5jdGlvbihtLGspe3JldHVybi0xKmh0KG0sayl9LHl0PU9iamVjdC5hc3NpZ24hPW51bGw/T2JqZWN0LmFzc2lnbi5iaW5kKE9iamVjdCk6ZnVuY3Rpb24oeCl7Zm9yKHZhciBtPWFyZ3VtZW50cyxrPTE7azxtLmxlbmd0aDtrKyspe3ZhciBTPW1ba107aWYoUyE9bnVsbClmb3IodmFyIE09T2JqZWN0LmtleXMoUyksTz0wO088TS5sZW5ndGg7TysrKXt2YXIgTj1NW09dO3hbTl09U1tOXX19cmV0dXJuIHh9LGppPWZ1bmN0aW9uKG0pe2lmKCEoIShtLmxlbmd0aD09PTR8fG0ubGVuZ3RoPT09Nyl8fG1bMF0hPT0iIyIpKXt2YXIgaz1tLmxlbmd0aD09PTQsUyxNLE8sTj0xNjtyZXR1cm4gaz8oUz1wYXJzZUludChtWzFdK21bMV0sTiksTT1wYXJzZUludChtWzJdK21bMl0sTiksTz1wYXJzZUludChtWzNdK21bM10sTikpOihTPXBhcnNlSW50KG1bMV0rbVsyXSxOKSxNPXBhcnNlSW50KG1bM10rbVs0XSxOKSxPPXBhcnNlSW50KG1bNV0rbVs2XSxOKSksW1MsTSxPXX19LHhpPWZ1bmN0aW9uKG0pe3ZhciBrLFMsTSxPLE4sJCxILHE7ZnVuY3Rpb24gWShtZSxMZSxfZSl7cmV0dXJuIF9lPDAmJihfZSs9MSksX2U+MSYmKF9lLT0xKSxfZTwxLzY/bWUrKExlLW1lKSo2Kl9lOl9lPDEvMj9MZTpfZTwyLzM/bWUrKExlLW1lKSooMi8zLV9lKSo2Om1lfXZhciBaPW5ldyBSZWdFeHAoIl4iK1FlKyIkIikuZXhlYyhtKTtpZihaKXtpZihTPXBhcnNlSW50KFpbMV0pLFM8MD9TPSgzNjAtIC0xKlMlMzYwKSUzNjA6Uz4zNjAmJihTPVMlMzYwKSxTLz0zNjAsTT1wYXJzZUZsb2F0KFpbMl0pLE08MHx8TT4xMDB8fChNPU0vMTAwLE89cGFyc2VGbG9hdChaWzNdKSxPPDB8fE8+MTAwKXx8KE89Ty8xMDAsTj1aWzRdLE4hPT12b2lkIDAmJihOPXBhcnNlRmxvYXQoTiksTjwwfHxOPjEpKSlyZXR1cm47aWYoTT09PTApJD1IPXE9TWF0aC5yb3VuZChPKjI1NSk7ZWxzZXt2YXIgY2U9TzwuNT9PKigxK00pOk8rTS1PKk0sdmU9MipPLWNlOyQ9TWF0aC5yb3VuZCgyNTUqWSh2ZSxjZSxTKzEvMykpLEg9TWF0aC5yb3VuZCgyNTUqWSh2ZSxjZSxTKSkscT1NYXRoLnJvdW5kKDI1NSpZKHZlLGNlLFMtMS8zKSl9az1bJCxILHEsTl19cmV0dXJuIGt9LE1hPWZ1bmN0aW9uKG0pe3ZhciBrLFM9bmV3IFJlZ0V4cCgiXiIreHQrIiQiKS5leGVjKG0pO2lmKFMpe2s9W107Zm9yKHZhciBNPVtdLE89MTtPPD0zO08rKyl7dmFyIE49U1tPXTtpZihOW04ubGVuZ3RoLTFdPT09IiUiJiYoTVtPXT0hMCksTj1wYXJzZUZsb2F0KE4pLE1bT10mJihOPU4vMTAwKjI1NSksTjwwfHxOPjI1NSlyZXR1cm47ay5wdXNoKE1hdGguZmxvb3IoTikpfXZhciAkPU1bMV18fE1bMl18fE1bM10sSD1NWzFdJiZNWzJdJiZNWzNdO2lmKCQmJiFIKXJldHVybjt2YXIgcT1TWzRdO2lmKHEhPT12b2lkIDApe2lmKHE9cGFyc2VGbG9hdChxKSxxPDB8fHE+MSlyZXR1cm47ay5wdXNoKHEpfX1yZXR1cm4ga30senM9ZnVuY3Rpb24obSl7cmV0dXJuIFRyW20udG9Mb3dlckNhc2UoKV19LGFvPWZ1bmN0aW9uKG0pe3JldHVybihuZShtKT9tOm51bGwpfHx6cyhtKXx8amkobSl8fE1hKG0pfHx4aShtKX0sVHI9e3RyYW5zcGFyZW50OlswLDAsMCwwXSxhbGljZWJsdWU6WzI0MCwyNDgsMjU1XSxhbnRpcXVld2hpdGU6WzI1MCwyMzUsMjE1XSxhcXVhOlswLDI1NSwyNTVdLGFxdWFtYXJpbmU6WzEyNywyNTUsMjEyXSxhenVyZTpbMjQwLDI1NSwyNTVdLGJlaWdlOlsyNDUsMjQ1LDIyMF0sYmlzcXVlOlsyNTUsMjI4LDE5Nl0sYmxhY2s6WzAsMCwwXSxibGFuY2hlZGFsbW9uZDpbMjU1LDIzNSwyMDVdLGJsdWU6WzAsMCwyNTVdLGJsdWV2aW9sZXQ6WzEzOCw0MywyMjZdLGJyb3duOlsxNjUsNDIsNDJdLGJ1cmx5d29vZDpbMjIyLDE4NCwxMzVdLGNhZGV0Ymx1ZTpbOTUsMTU4LDE2MF0sY2hhcnRyZXVzZTpbMTI3LDI1NSwwXSxjaG9jb2xhdGU6WzIxMCwxMDUsMzBdLGNvcmFsOlsyNTUsMTI3LDgwXSxjb3JuZmxvd2VyYmx1ZTpbMTAwLDE0OSwyMzddLGNvcm5zaWxrOlsyNTUsMjQ4LDIyMF0sY3JpbXNvbjpbMjIwLDIwLDYwXSxjeWFuOlswLDI1NSwyNTVdLGRhcmtibHVlOlswLDAsMTM5XSxkYXJrY3lhbjpbMCwxMzksMTM5XSxkYXJrZ29sZGVucm9kOlsxODQsMTM0LDExXSxkYXJrZ3JheTpbMTY5LDE2OSwxNjldLGRhcmtncmVlbjpbMCwxMDAsMF0sZGFya2dyZXk6WzE2OSwxNjksMTY5XSxkYXJra2hha2k6WzE4OSwxODMsMTA3XSxkYXJrbWFnZW50YTpbMTM5LDAsMTM5XSxkYXJrb2xpdmVncmVlbjpbODUsMTA3LDQ3XSxkYXJrb3JhbmdlOlsyNTUsMTQwLDBdLGRhcmtvcmNoaWQ6WzE1Myw1MCwyMDRdLGRhcmtyZWQ6WzEzOSwwLDBdLGRhcmtzYWxtb246WzIzMywxNTAsMTIyXSxkYXJrc2VhZ3JlZW46WzE0MywxODgsMTQzXSxkYXJrc2xhdGVibHVlOls3Miw2MSwxMzldLGRhcmtzbGF0ZWdyYXk6WzQ3LDc5LDc5XSxkYXJrc2xhdGVncmV5Ols0Nyw3OSw3OV0sZGFya3R1cnF1b2lzZTpbMCwyMDYsMjA5XSxkYXJrdmlvbGV0OlsxNDgsMCwyMTFdLGRlZXBwaW5rOlsyNTUsMjAsMTQ3XSxkZWVwc2t5Ymx1ZTpbMCwxOTEsMjU1XSxkaW1ncmF5OlsxMDUsMTA1LDEwNV0sZGltZ3JleTpbMTA1LDEwNSwxMDVdLGRvZGdlcmJsdWU6WzMwLDE0NCwyNTVdLGZpcmVicmljazpbMTc4LDM0LDM0XSxmbG9yYWx3aGl0ZTpbMjU1LDI1MCwyNDBdLGZvcmVzdGdyZWVuOlszNCwxMzksMzRdLGZ1Y2hzaWE6WzI1NSwwLDI1NV0sZ2FpbnNib3JvOlsyMjAsMjIwLDIyMF0sZ2hvc3R3aGl0ZTpbMjQ4LDI0OCwyNTVdLGdvbGQ6WzI1NSwyMTUsMF0sZ29sZGVucm9kOlsyMTgsMTY1LDMyXSxncmF5OlsxMjgsMTI4LDEyOF0sZ3JleTpbMTI4LDEyOCwxMjhdLGdyZWVuOlswLDEyOCwwXSxncmVlbnllbGxvdzpbMTczLDI1NSw0N10saG9uZXlkZXc6WzI0MCwyNTUsMjQwXSxob3RwaW5rOlsyNTUsMTA1LDE4MF0saW5kaWFucmVkOlsyMDUsOTIsOTJdLGluZGlnbzpbNzUsMCwxMzBdLGl2b3J5OlsyNTUsMjU1LDI0MF0sa2hha2k6WzI0MCwyMzAsMTQwXSxsYXZlbmRlcjpbMjMwLDIzMCwyNTBdLGxhdmVuZGVyYmx1c2g6WzI1NSwyNDAsMjQ1XSxsYXduZ3JlZW46WzEyNCwyNTIsMF0sbGVtb25jaGlmZm9uOlsyNTUsMjUwLDIwNV0sbGlnaHRibHVlOlsxNzMsMjE2LDIzMF0sbGlnaHRjb3JhbDpbMjQwLDEyOCwxMjhdLGxpZ2h0Y3lhbjpbMjI0LDI1NSwyNTVdLGxpZ2h0Z29sZGVucm9keWVsbG93OlsyNTAsMjUwLDIxMF0sbGlnaHRncmF5OlsyMTEsMjExLDIxMV0sbGlnaHRncmVlbjpbMTQ0LDIzOCwxNDRdLGxpZ2h0Z3JleTpbMjExLDIxMSwyMTFdLGxpZ2h0cGluazpbMjU1LDE4MiwxOTNdLGxpZ2h0c2FsbW9uOlsyNTUsMTYwLDEyMl0sbGlnaHRzZWFncmVlbjpbMzIsMTc4LDE3MF0sbGlnaHRza3libHVlOlsxMzUsMjA2LDI1MF0sbGlnaHRzbGF0ZWdyYXk6WzExOSwxMzYsMTUzXSxsaWdodHNsYXRlZ3JleTpbMTE5LDEzNiwxNTNdLGxpZ2h0c3RlZWxibHVlOlsxNzYsMTk2LDIyMl0sbGlnaHR5ZWxsb3c6WzI1NSwyNTUsMjI0XSxsaW1lOlswLDI1NSwwXSxsaW1lZ3JlZW46WzUwLDIwNSw1MF0sbGluZW46WzI1MCwyNDAsMjMwXSxtYWdlbnRhOlsyNTUsMCwyNTVdLG1hcm9vbjpbMTI4LDAsMF0sbWVkaXVtYXF1YW1hcmluZTpbMTAyLDIwNSwxNzBdLG1lZGl1bWJsdWU6WzAsMCwyMDVdLG1lZGl1bW9yY2hpZDpbMTg2LDg1LDIxMV0sbWVkaXVtcHVycGxlOlsxNDcsMTEyLDIxOV0sbWVkaXVtc2VhZ3JlZW46WzYwLDE3OSwxMTNdLG1lZGl1bXNsYXRlYmx1ZTpbMTIzLDEwNCwyMzhdLG1lZGl1bXNwcmluZ2dyZWVuOlswLDI1MCwxNTRdLG1lZGl1bXR1cnF1b2lzZTpbNzIsMjA5LDIwNF0sbWVkaXVtdmlvbGV0cmVkOlsxOTksMjEsMTMzXSxtaWRuaWdodGJsdWU6WzI1LDI1LDExMl0sbWludGNyZWFtOlsyNDUsMjU1LDI1MF0sbWlzdHlyb3NlOlsyNTUsMjI4LDIyNV0sbW9jY2FzaW46WzI1NSwyMjgsMTgxXSxuYXZham93aGl0ZTpbMjU1LDIyMiwxNzNdLG5hdnk6WzAsMCwxMjhdLG9sZGxhY2U6WzI1MywyNDUsMjMwXSxvbGl2ZTpbMTI4LDEyOCwwXSxvbGl2ZWRyYWI6WzEwNywxNDIsMzVdLG9yYW5nZTpbMjU1LDE2NSwwXSxvcmFuZ2VyZWQ6WzI1NSw2OSwwXSxvcmNoaWQ6WzIxOCwxMTIsMjE0XSxwYWxlZ29sZGVucm9kOlsyMzgsMjMyLDE3MF0scGFsZWdyZWVuOlsxNTIsMjUxLDE1Ml0scGFsZXR1cnF1b2lzZTpbMTc1LDIzOCwyMzhdLHBhbGV2aW9sZXRyZWQ6WzIxOSwxMTIsMTQ3XSxwYXBheWF3aGlwOlsyNTUsMjM5LDIxM10scGVhY2hwdWZmOlsyNTUsMjE4LDE4NV0scGVydTpbMjA1LDEzMyw2M10scGluazpbMjU1LDE5MiwyMDNdLHBsdW06WzIyMSwxNjAsMjIxXSxwb3dkZXJibHVlOlsxNzYsMjI0LDIzMF0scHVycGxlOlsxMjgsMCwxMjhdLHJlZDpbMjU1LDAsMF0scm9zeWJyb3duOlsxODgsMTQzLDE0M10scm95YWxibHVlOls2NSwxMDUsMjI1XSxzYWRkbGVicm93bjpbMTM5LDY5LDE5XSxzYWxtb246WzI1MCwxMjgsMTE0XSxzYW5keWJyb3duOlsyNDQsMTY0LDk2XSxzZWFncmVlbjpbNDYsMTM5LDg3XSxzZWFzaGVsbDpbMjU1LDI0NSwyMzhdLHNpZW5uYTpbMTYwLDgyLDQ1XSxzaWx2ZXI6WzE5MiwxOTIsMTkyXSxza3libHVlOlsxMzUsMjA2LDIzNV0sc2xhdGVibHVlOlsxMDYsOTAsMjA1XSxzbGF0ZWdyYXk6WzExMiwxMjgsMTQ0XSxzbGF0ZWdyZXk6WzExMiwxMjgsMTQ0XSxzbm93OlsyNTUsMjUwLDI1MF0sc3ByaW5nZ3JlZW46WzAsMjU1LDEyN10sc3RlZWxibHVlOls3MCwxMzAsMTgwXSx0YW46WzIxMCwxODAsMTQwXSx0ZWFsOlswLDEyOCwxMjhdLHRoaXN0bGU6WzIxNiwxOTEsMjE2XSx0b21hdG86WzI1NSw5OSw3MV0sdHVycXVvaXNlOls2NCwyMjQsMjA4XSx2aW9sZXQ6WzIzOCwxMzAsMjM4XSx3aGVhdDpbMjQ1LDIyMiwxNzldLHdoaXRlOlsyNTUsMjU1LDI1NV0sd2hpdGVzbW9rZTpbMjQ1LDI0NSwyNDVdLHllbGxvdzpbMjU1LDI1NSwwXSx5ZWxsb3dncmVlbjpbMTU0LDIwNSw1MF19LEZuPWZ1bmN0aW9uKG0pe2Zvcih2YXIgaz1tLm1hcCxTPW0ua2V5cyxNPVMubGVuZ3RoLE89MDtPPE07TysrKXt2YXIgTj1TW09dO2lmKHNlKE4pKXRocm93IEVycm9yKCJUcmllZCB0byBzZXQgbWFwIHdpdGggb2JqZWN0IGtleSIpO088Uy5sZW5ndGgtMT8oa1tOXT09bnVsbCYmKGtbTl09e30pLGs9a1tOXSk6a1tOXT1tLnZhbHVlfX0scW49ZnVuY3Rpb24obSl7Zm9yKHZhciBrPW0ubWFwLFM9bS5rZXlzLE09Uy5sZW5ndGgsTz0wO088TTtPKyspe3ZhciBOPVNbT107aWYoc2UoTikpdGhyb3cgRXJyb3IoIlRyaWVkIHRvIGdldCBtYXAgd2l0aCBvYmplY3Qga2V5Iik7aWYoaz1rW05dLGs9PW51bGwpcmV0dXJuIGt9cmV0dXJuIGt9O2Z1bmN0aW9uIFVuKHgpe3ZhciBtPXR5cGVvZiB4O3JldHVybiB4IT1udWxsJiYobT09Im9iamVjdCJ8fG09PSJmdW5jdGlvbiIpfXZhciBBdD1Vbix3dD10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIEFnPCJ1Ij9BZzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fTtmdW5jdGlvbiBvbih4LG0pe3JldHVybiBtPXtleHBvcnRzOnt9fSx4KG0sbS5leHBvcnRzKSxtLmV4cG9ydHN9dmFyIGZuPXR5cGVvZiB3dD09Im9iamVjdCImJnd0JiZ3dC5PYmplY3Q9PT1PYmplY3QmJnd0LEFuPWZuLG9vPXR5cGVvZiBzZWxmPT0ib2JqZWN0IiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsam89QW58fG9vfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLCRvPWpvLFBhPWZ1bmN0aW9uKCl7cmV0dXJuICRvLkRhdGUubm93KCl9LHdvPVBhLF9zPS9ccy87ZnVuY3Rpb24gdGwoeCl7Zm9yKHZhciBtPXgubGVuZ3RoO20tLSYmX3MudGVzdCh4LmNoYXJBdChtKSk7KTtyZXR1cm4gbX12YXIgZGE9dGwsajA9L15ccysvO2Z1bmN0aW9uIHBtKHgpe3JldHVybiB4JiZ4LnNsaWNlKDAsZGEoeCkrMSkucmVwbGFjZShqMCwiIil9dmFyIE1sPXBtLFhjPSRvLlN5bWJvbCxCYz1YYyxqYT1PYmplY3QucHJvdG90eXBlLE91PWphLmhhc093blByb3BlcnR5LFNhPWphLnRvU3RyaW5nLFBvPUJjP0JjLnRvU3RyaW5nVGFnOnZvaWQgMDtmdW5jdGlvbiBGYyh4KXt2YXIgbT1PdS5jYWxsKHgsUG8pLGs9eFtQb107dHJ5e3hbUG9dPXZvaWQgMDt2YXIgUz0hMH1jYXRjaHt9dmFyIE09U2EuY2FsbCh4KTtyZXR1cm4gUyYmKG0/eFtQb109azpkZWxldGUgeFtQb10pLE19dmFyIHhhPUZjLEJhPU9iamVjdC5wcm90b3R5cGUsZ2E9QmEudG9TdHJpbmc7ZnVuY3Rpb24ga2goeCl7cmV0dXJuIGdhLmNhbGwoeCl9dmFyIGx1PWtoLG81PSJbb2JqZWN0IE51bGxdIixXaD0iW29iamVjdCBVbmRlZmluZWRdIixvZD1CYz9CYy50b1N0cmluZ1RhZzp2b2lkIDA7ZnVuY3Rpb24gR2QoeCl7cmV0dXJuIHg9PW51bGw/eD09PXZvaWQgMD9XaDpvNTpvZCYmb2QgaW4gT2JqZWN0KHgpP3hhKHgpOmx1KHgpfXZhciBjZD1HZDtmdW5jdGlvbiBLZCh4KXtyZXR1cm4geCE9bnVsbCYmdHlwZW9mIHg9PSJvYmplY3QifXZhciAkZz1LZCxhcz0iW29iamVjdCBTeW1ib2xdIjtmdW5jdGlvbiB3bih4KXtyZXR1cm4gdHlwZW9mIHg9PSJzeW1ib2wifHwkZyh4KSYmY2QoeCk9PWFzfXZhciBacj13bixaaT0wLzAsbnU9L15bLStdMHhbMC05YS1mXSskL2ksdnU9L14wYlswMV0rJC9pLERsPS9eMG9bMC03XSskL2ksWWg9cGFyc2VJbnQ7ZnVuY3Rpb24gdzEoeCl7aWYodHlwZW9mIHg9PSJudW1iZXIiKXJldHVybiB4O2lmKFpyKHgpKXJldHVybiBaaTtpZihBdCh4KSl7dmFyIG09dHlwZW9mIHgudmFsdWVPZj09ImZ1bmN0aW9uIj94LnZhbHVlT2YoKTp4O3g9QXQobSk/bSsiIjptfWlmKHR5cGVvZiB4IT0ic3RyaW5nIilyZXR1cm4geD09PTA/eDoreDt4PU1sKHgpO3ZhciBrPXZ1LnRlc3QoeCk7cmV0dXJuIGt8fERsLnRlc3QoeCk/WWgoeC5zbGljZSgyKSxrPzI6OCk6bnUudGVzdCh4KT9aaToreH12YXIgJDA9dzEsV2k9IkV4cGVjdGVkIGEgZnVuY3Rpb24iLEJzPU1hdGgubWF4LFFhPU1hdGgubWluO2Z1bmN0aW9uIEJpKHgsbSxrKXt2YXIgUyxNLE8sTiwkLEgscT0wLFk9ITEsWj0hMSxjZT0hMDtpZih0eXBlb2YgeCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKFdpKTttPSQwKG0pfHwwLEF0KGspJiYoWT0hIWsubGVhZGluZyxaPSJtYXhXYWl0ImluIGssTz1aP0JzKCQwKGsubWF4V2FpdCl8fDAsbSk6TyxjZT0idHJhaWxpbmciaW4gaz8hIWsudHJhaWxpbmc6Y2UpO2Z1bmN0aW9uIHZlKHN0KXt2YXIgWWU9UyxtdD1NO3JldHVybiBTPU09dm9pZCAwLHE9c3QsTj14LmFwcGx5KG10LFllKSxOfWZ1bmN0aW9uIG1lKHN0KXtyZXR1cm4gcT1zdCwkPXNldFRpbWVvdXQoRWUsbSksWT92ZShzdCk6Tn1mdW5jdGlvbiBMZShzdCl7dmFyIFllPXN0LUgsbXQ9c3QtcSxKZT1tLVllO3JldHVybiBaP1FhKEplLE8tbXQpOkplfWZ1bmN0aW9uIF9lKHN0KXt2YXIgWWU9c3QtSCxtdD1zdC1xO3JldHVybiBIPT09dm9pZCAwfHxZZT49bXx8WWU8MHx8WiYmbXQ+PU99ZnVuY3Rpb24gRWUoKXt2YXIgc3Q9d28oKTtpZihfZShzdCkpcmV0dXJuIEJlKHN0KTskPXNldFRpbWVvdXQoRWUsTGUoc3QpKX1mdW5jdGlvbiBCZShzdCl7cmV0dXJuICQ9dm9pZCAwLGNlJiZTP3ZlKHN0KTooUz1NPXZvaWQgMCxOKX1mdW5jdGlvbiBSZSgpeyQhPT12b2lkIDAmJmNsZWFyVGltZW91dCgkKSxxPTAsUz1IPU09JD12b2lkIDB9ZnVuY3Rpb24gVmUoKXtyZXR1cm4gJD09PXZvaWQgMD9OOkJlKHdvKCkpfWZ1bmN0aW9uIGN0KCl7dmFyIHN0PXdvKCksWWU9X2Uoc3QpO2lmKFM9YXJndW1lbnRzLE09dGhpcyxIPXN0LFllKXtpZigkPT09dm9pZCAwKXJldHVybiBtZShIKTtpZihaKXJldHVybiBjbGVhclRpbWVvdXQoJCksJD1zZXRUaW1lb3V0KEVlLG0pLHZlKEgpfXJldHVybiAkPT09dm9pZCAwJiYoJD1zZXRUaW1lb3V0KEVlLG0pKSxOfXJldHVybiBjdC5jYW5jZWw9UmUsY3QuZmx1c2g9VmUsY3R9dmFyIE51PUJpLE90PUY/Ri5wZXJmb3JtYW5jZTpudWxsLFczPU90JiZPdC5ub3c/ZnVuY3Rpb24oKXtyZXR1cm4gT3Qubm93KCl9OmZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCl9LEt0PWZ1bmN0aW9uKCl7aWYoRil7aWYoRi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpcmV0dXJuIGZ1bmN0aW9uKHgpe0YucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHgpfTtpZihGLm1velJlcXVlc3RBbmltYXRpb25GcmFtZSlyZXR1cm4gZnVuY3Rpb24oeCl7Ri5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoeCl9O2lmKEYud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKXJldHVybiBmdW5jdGlvbih4KXtGLndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSh4KX07aWYoRi5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSlyZXR1cm4gZnVuY3Rpb24oeCl7Ri5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSh4KX19cmV0dXJuIGZ1bmN0aW9uKHgpe3gmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXt4KFczKCkpfSwxZTMvNjApfX0oKSx6MD1mdW5jdGlvbihtKXtyZXR1cm4gS3QobSl9LEJwPVczLFkzPTkyNjEsJDk9NjU1OTksYzU9NTM4MSxFaD1mdW5jdGlvbihtKXtmb3IodmFyIGs9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOlkzLFM9ayxNO009bS5uZXh0KCksIU0uZG9uZTspUz1TKiQ5K00udmFsdWV8MDtyZXR1cm4gU30semc9ZnVuY3Rpb24obSl7dmFyIGs9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOlkzO3JldHVybiBrKiQ5K218MH0sYm09ZnVuY3Rpb24obSl7dmFyIGs9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOmM1O3JldHVybihrPDw1KStrK218MH0sejk9ZnVuY3Rpb24obSxrKXtyZXR1cm4gbSoyMDk3MTUyK2t9LG1tPWZ1bmN0aW9uKG0pe3JldHVybiBtWzBdKjIwOTcxNTIrbVsxXX0sdTU9ZnVuY3Rpb24obSxrKXtyZXR1cm5bemcobVswXSxrWzBdKSxibShtWzFdLGtbMV0pXX0seTE9ZnVuY3Rpb24obSxrKXt2YXIgUz17dmFsdWU6MCxkb25lOiExfSxNPTAsTz1tLmxlbmd0aCxOPXtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIE08Tz9TLnZhbHVlPW1bTSsrXTpTLmRvbmU9ITAsU319O3JldHVybiBFaChOLGspfSx1ZD1mdW5jdGlvbihtLGspe3ZhciBTPXt2YWx1ZTowLGRvbmU6ITF9LE09MCxPPW0ubGVuZ3RoLE49e25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gTTxPP1MudmFsdWU9bS5jaGFyQ29kZUF0KE0rKyk6Uy5kb25lPSEwLFN9fTtyZXR1cm4gRWgoTixrKX0sbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gcTkoYXJndW1lbnRzKX0scTk9ZnVuY3Rpb24obSl7Zm9yKHZhciBrLFM9MDtTPG0ubGVuZ3RoO1MrKyl7dmFyIE09bVtTXTtTPT09MD9rPXVkKE0pOms9dWQoTSxrKX1yZXR1cm4ga30sVnY9ITAsWTc9Y29uc29sZS53YXJuIT1udWxsLEcyPWNvbnNvbGUudHJhY2UhPW51bGwsWDc9TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ8fDkwMDcxOTkyNTQ3NDA5OTEsbDU9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sWDM9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sRnA9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sbkk9ZnVuY3Rpb24oKXt9LGNoPWZ1bmN0aW9uKG0pe3Rocm93IG5ldyBFcnJvcihtKX0sb1M9ZnVuY3Rpb24obSl7aWYobSE9PXZvaWQgMClWdj0hIW07ZWxzZSByZXR1cm4gVnZ9LGh1PWZ1bmN0aW9uKG0pe29TKCkmJihZNz9jb25zb2xlLndhcm4obSk6KGNvbnNvbGUubG9nKG0pLEcyJiZjb25zb2xlLnRyYWNlKCkpKX0sJEo9ZnVuY3Rpb24obSl7cmV0dXJuIHl0KHt9LG0pfSx2bT1mdW5jdGlvbihtKXtyZXR1cm4gbT09bnVsbD9tOm5lKG0pP20uc2xpY2UoKTpzZShtKT8kSihtKTptfSx6Sj1mdW5jdGlvbihtKXtyZXR1cm4gbS5zbGljZSgpfSxvaj1mdW5jdGlvbihtLGspe2ZvcihrPW09IiI7bSsrPDM2O2srPW0qNTEmNTI/KG1eMTU/OF5NYXRoLnJhbmRvbSgpKihtXjIwPzE2OjQpOjQpLnRvU3RyaW5nKDE2KToiLSIpO3JldHVybiBrfSxxSj17fSxjaj1mdW5jdGlvbigpe3JldHVybiBxSn0scTA9ZnVuY3Rpb24obSl7dmFyIGs9T2JqZWN0LmtleXMobSk7cmV0dXJuIGZ1bmN0aW9uKFMpe2Zvcih2YXIgTT17fSxPPTA7TzxrLmxlbmd0aDtPKyspe3ZhciBOPWtbT10sJD1TPT1udWxsP3ZvaWQgMDpTW05dO01bTl09JD09PXZvaWQgMD9tW05dOiR9cmV0dXJuIE19fSxRMz1mdW5jdGlvbihtLGssUyl7Zm9yKHZhciBNPW0ubGVuZ3RoLTE7TT49MCYmIShtW01dPT09ayYmKG0uc3BsaWNlKE0sMSksUykpO00tLSk7fSxjUz1mdW5jdGlvbihtKXttLnNwbGljZSgwLG0ubGVuZ3RoKX0sdWo9ZnVuY3Rpb24obSxrKXtmb3IodmFyIFM9MDtTPGsubGVuZ3RoO1MrKyl7dmFyIE09a1tTXTttLnB1c2goTSl9fSxLMj1mdW5jdGlvbihtLGssUyl7cmV0dXJuIFMmJihrPUV0KFMsaykpLG1ba119LEozPWZ1bmN0aW9uKG0sayxTLE0pe1MmJihrPUV0KFMsaykpLG1ba109TX0sSEo9ZnVuY3Rpb24oKXtmdW5jdGlvbiB4KCl7ZCh0aGlzLHgpLHRoaXMuX29iaj17fX1yZXR1cm4gdih4LFt7a2V5OiJzZXQiLHZhbHVlOmZ1bmN0aW9uKGssUyl7cmV0dXJuIHRoaXMuX29ialtrXT1TLHRoaXN9fSx7a2V5OiJkZWxldGUiLHZhbHVlOmZ1bmN0aW9uKGspe3JldHVybiB0aGlzLl9vYmpba109dm9pZCAwLHRoaXN9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9vYmo9e319fSx7a2V5OiJoYXMiLHZhbHVlOmZ1bmN0aW9uKGspe3JldHVybiB0aGlzLl9vYmpba10hPT12b2lkIDB9fSx7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKGspe3JldHVybiB0aGlzLl9vYmpba119fV0pLHh9KCksd209dHlwZW9mIE1hcDwidSI/TWFwOkhKLFZKPSJ1bmRlZmluZWQiLFVKPWZ1bmN0aW9uKCl7ZnVuY3Rpb24geChtKXtpZihkKHRoaXMseCksdGhpcy5fb2JqPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5zaXplPTAsbSE9bnVsbCl7dmFyIGs7bS5pbnN0YW5jZVN0cmluZyE9bnVsbCYmbS5pbnN0YW5jZVN0cmluZygpPT09dGhpcy5pbnN0YW5jZVN0cmluZygpP2s9bS50b0FycmF5KCk6az1tO2Zvcih2YXIgUz0wO1M8ay5sZW5ndGg7UysrKXRoaXMuYWRkKGtbU10pfX1yZXR1cm4gdih4LFt7a2V5OiJpbnN0YW5jZVN0cmluZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4ic2V0In19LHtrZXk6ImFkZCIsdmFsdWU6ZnVuY3Rpb24oayl7dmFyIFM9dGhpcy5fb2JqO1Nba10hPT0xJiYoU1trXT0xLHRoaXMuc2l6ZSsrKX19LHtrZXk6ImRlbGV0ZSIsdmFsdWU6ZnVuY3Rpb24oayl7dmFyIFM9dGhpcy5fb2JqO1Nba109PT0xJiYoU1trXT0wLHRoaXMuc2l6ZS0tKX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX29iaj1PYmplY3QuY3JlYXRlKG51bGwpfX0se2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbihrKXtyZXR1cm4gdGhpcy5fb2JqW2tdPT09MX19LHtrZXk6InRvQXJyYXkiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGs9dGhpcztyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fb2JqKS5maWx0ZXIoZnVuY3Rpb24oUyl7cmV0dXJuIGsuaGFzKFMpfSl9fSx7a2V5OiJmb3JFYWNoIix2YWx1ZTpmdW5jdGlvbihrLFMpe3JldHVybiB0aGlzLnRvQXJyYXkoKS5mb3JFYWNoKGssUyl9fV0pLHh9KCksUTc9KHR5cGVvZiBTZXQ+InUiPyJ1bmRlZmluZWQiOnUoU2V0KSkhPT1WSj9TZXQ6VUosdVM9ZnVuY3Rpb24obSxrKXt2YXIgUz1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITA7aWYobT09PXZvaWQgMHx8az09PXZvaWQgMHx8IVBlKG0pKXtjaCgiQW4gZWxlbWVudCBtdXN0IGhhdmUgYSBjb3JlIHJlZmVyZW5jZSBhbmQgcGFyYW1ldGVycyBzZXQiKTtyZXR1cm59dmFyIE09ay5ncm91cDtpZihNPT1udWxsJiYoay5kYXRhJiZrLmRhdGEuc291cmNlIT1udWxsJiZrLmRhdGEudGFyZ2V0IT1udWxsP009ImVkZ2VzIjpNPSJub2RlcyIpLE0hPT0ibm9kZXMiJiZNIT09ImVkZ2VzIil7Y2goIkFuIGVsZW1lbnQgbXVzdCBiZSBvZiB0eXBlIGBub2Rlc2Agb3IgYGVkZ2VzYDsgeW91IHNwZWNpZmllZCBgIitNKyJgIik7cmV0dXJufXRoaXMubGVuZ3RoPTEsdGhpc1swXT10aGlzO3ZhciBPPXRoaXMuX3ByaXZhdGU9e2N5Om0sc2luZ2xlOiEwLGRhdGE6ay5kYXRhfHx7fSxwb3NpdGlvbjprLnBvc2l0aW9ufHx7eDowLHk6MH0sYXV0b1dpZHRoOnZvaWQgMCxhdXRvSGVpZ2h0OnZvaWQgMCxhdXRvUGFkZGluZzp2b2lkIDAsY29tcG91bmRCb3VuZHNDbGVhbjohMSxsaXN0ZW5lcnM6W10sZ3JvdXA6TSxzdHlsZTp7fSxyc3R5bGU6e30sc3R5bGVDeHRzOltdLHN0eWxlS2V5czp7fSxyZW1vdmVkOiEwLHNlbGVjdGVkOiEhay5zZWxlY3RlZCxzZWxlY3RhYmxlOmsuc2VsZWN0YWJsZT09PXZvaWQgMD8hMDohIWsuc2VsZWN0YWJsZSxsb2NrZWQ6ISFrLmxvY2tlZCxncmFiYmVkOiExLGdyYWJiYWJsZTprLmdyYWJiYWJsZT09PXZvaWQgMD8hMDohIWsuZ3JhYmJhYmxlLHBhbm5hYmxlOmsucGFubmFibGU9PT12b2lkIDA/TT09PSJlZGdlcyI6ISFrLnBhbm5hYmxlLGFjdGl2ZTohMSxjbGFzc2VzOm5ldyBRNyxhbmltYXRpb246e2N1cnJlbnQ6W10scXVldWU6W119LHJzY3JhdGNoOnt9LHNjcmF0Y2g6ay5zY3JhdGNofHx7fSxlZGdlczpbXSxjaGlsZHJlbjpbXSxwYXJlbnQ6ay5wYXJlbnQmJmsucGFyZW50LmlzTm9kZSgpP2sucGFyZW50Om51bGwsdHJhdmVyc2FsQ2FjaGU6e30sYmFja2dyb3VuZGluZzohMSxiYkNhY2hlOm51bGwsYmJDYWNoZVNoaWZ0Ont4OjAseTowfSxib2R5Qm91bmRzOm51bGwsb3ZlcmxheUJvdW5kczpudWxsLGxhYmVsQm91bmRzOnthbGw6bnVsbCxzb3VyY2U6bnVsbCx0YXJnZXQ6bnVsbCxtYWluOm51bGx9LGFycm93Qm91bmRzOntzb3VyY2U6bnVsbCx0YXJnZXQ6bnVsbCwibWlkLXNvdXJjZSI6bnVsbCwibWlkLXRhcmdldCI6bnVsbH19O2lmKE8ucG9zaXRpb24ueD09bnVsbCYmKE8ucG9zaXRpb24ueD0wKSxPLnBvc2l0aW9uLnk9PW51bGwmJihPLnBvc2l0aW9uLnk9MCksay5yZW5kZXJlZFBvc2l0aW9uKXt2YXIgTj1rLnJlbmRlcmVkUG9zaXRpb24sJD1tLnBhbigpLEg9bS56b29tKCk7Ty5wb3NpdGlvbj17eDooTi54LSQueCkvSCx5OihOLnktJC55KS9IfX12YXIgcT1bXTtuZShrLmNsYXNzZXMpP3E9ay5jbGFzc2VzOmJlKGsuY2xhc3NlcykmJihxPWsuY2xhc3Nlcy5zcGxpdCgvXHMrLykpO2Zvcih2YXIgWT0wLFo9cS5sZW5ndGg7WTxaO1krKyl7dmFyIGNlPXFbWV07IWNlfHxjZT09PSIifHxPLmNsYXNzZXMuYWRkKGNlKX10aGlzLmNyZWF0ZUVtaXR0ZXIoKTt2YXIgdmU9ay5zdHlsZXx8ay5jc3M7dmUmJihodSgiU2V0dGluZyBhIGBzdHlsZWAgYnlwYXNzIGF0IGVsZW1lbnQgY3JlYXRpb24gc2hvdWxkIGJlIGRvbmUgb25seSB3aGVuIGFic29sdXRlbHkgbmVjZXNzYXJ5LiAgVHJ5IHRvIHVzZSB0aGUgc3R5bGVzaGVldCBpbnN0ZWFkLiIpLHRoaXMuc3R5bGUodmUpKSwoUz09PXZvaWQgMHx8UykmJnRoaXMucmVzdG9yZSgpfSxsaj1mdW5jdGlvbihtKXtyZXR1cm4gbT17YmZzOm0uYmZzfHwhbS5kZnMsZGZzOm0uZGZzfHwhbS5iZnN9LGZ1bmN0aW9uKFMsTSxPKXt2YXIgTjtzZShTKSYmIXhlKFMpJiYoTj1TLFM9Ti5yb290c3x8Ti5yb290LE09Ti52aXNpdCxPPU4uZGlyZWN0ZWQpLE89YXJndW1lbnRzLmxlbmd0aD09PTImJiFhZShNKT9NOk8sTT1hZShNKT9NOmZ1bmN0aW9uKCl7fTtmb3IodmFyICQ9dGhpcy5fcHJpdmF0ZS5jeSxIPVM9YmUoUyk/dGhpcy5maWx0ZXIoUyk6UyxxPVtdLFk9W10sWj17fSxjZT17fSx2ZT17fSxtZT0wLExlLF9lPXRoaXMuYnlHcm91cCgpLEVlPV9lLm5vZGVzLEJlPV9lLmVkZ2VzLFJlPTA7UmU8SC5sZW5ndGg7UmUrKyl7dmFyIFZlPUhbUmVdLGN0PVZlLmlkKCk7VmUuaXNOb2RlKCkmJihxLnVuc2hpZnQoVmUpLG0uYmZzJiYodmVbY3RdPSEwLFkucHVzaChWZSkpLGNlW2N0XT0wKX1mb3IodmFyIHN0PWZ1bmN0aW9uKCl7dmFyIFd0PW0uYmZzP3Euc2hpZnQoKTpxLnBvcCgpLFR0PVd0LmlkKCk7aWYobS5kZnMpe2lmKHZlW1R0XSlyZXR1cm4iY29udGludWUiO3ZlW1R0XT0hMCxZLnB1c2goV3QpfXZhciBfbj1jZVtUdF0saG49WltUdF0sWXQ9aG4hPW51bGw/aG4uc291cmNlKCk6bnVsbCxEbj1obiE9bnVsbD9obi50YXJnZXQoKTpudWxsLGlyPWhuPT1udWxsP3ZvaWQgMDpXdC5zYW1lKFl0KT9EblswXTpZdFswXSx2cj12b2lkIDA7aWYodnI9TShXdCxobixpcixtZSsrLF9uKSx2cj09PSEwKXJldHVybiBMZT1XdCwiYnJlYWsiO2lmKHZyPT09ITEpcmV0dXJuImJyZWFrIjtmb3IodmFyIE5uPVd0LmNvbm5lY3RlZEVkZ2VzKCkuZmlsdGVyKGZ1bmN0aW9uKE9yKXtyZXR1cm4oIU98fE9yLnNvdXJjZSgpLnNhbWUoV3QpKSYmQmUuaGFzKE9yKX0pLHByPTA7cHI8Tm4ubGVuZ3RoO3ByKyspe3ZhciBFcj1Obltwcl0sTXI9RXIuY29ubmVjdGVkTm9kZXMoKS5maWx0ZXIoZnVuY3Rpb24oT3Ipe3JldHVybiFPci5zYW1lKFd0KSYmRWUuaGFzKE9yKX0pLENyPU1yLmlkKCk7TXIubGVuZ3RoIT09MCYmIXZlW0NyXSYmKE1yPU1yWzBdLHEucHVzaChNciksbS5iZnMmJih2ZVtDcl09ITAsWS5wdXNoKE1yKSksWltDcl09RXIsY2VbQ3JdPWNlW1R0XSsxKX19O3EubGVuZ3RoIT09MDspe3ZhciBZZT1zdCgpO2lmKFllIT09ImNvbnRpbnVlIiYmWWU9PT0iYnJlYWsiKWJyZWFrfWZvcih2YXIgbXQ9JC5jb2xsZWN0aW9uKCksSmU9MDtKZTxZLmxlbmd0aDtKZSsrKXt2YXIgTHQ9WVtKZV0sTXQ9WltMdC5pZCgpXTtNdCE9bnVsbCYmbXQucHVzaChNdCksbXQucHVzaChMdCl9cmV0dXJue3BhdGg6JC5jb2xsZWN0aW9uKG10KSxmb3VuZDokLmNvbGxlY3Rpb24oTGUpfX19LEg5PXticmVhZHRoRmlyc3RTZWFyY2g6bGooe2JmczohMH0pLGRlcHRoRmlyc3RTZWFyY2g6bGooe2RmczohMH0pfTtIOS5iZnM9SDkuYnJlYWR0aEZpcnN0U2VhcmNoLEg5LmRmcz1IOS5kZXB0aEZpcnN0U2VhcmNoO3ZhciBHSj1vbihmdW5jdGlvbih4LG0peyhmdW5jdGlvbigpe3ZhciBrLFMsTSxPLE4sJCxILHEsWSxaLGNlLHZlLG1lLExlLF9lO009TWF0aC5mbG9vcixaPU1hdGgubWluLFM9ZnVuY3Rpb24oRWUsQmUpe3JldHVybiBFZTxCZT8tMTpFZT5CZT8xOjB9LFk9ZnVuY3Rpb24oRWUsQmUsUmUsVmUsY3Qpe3ZhciBzdDtpZihSZT09bnVsbCYmKFJlPTApLGN0PT1udWxsJiYoY3Q9UyksUmU8MCl0aHJvdyBuZXcgRXJyb3IoImxvIG11c3QgYmUgbm9uLW5lZ2F0aXZlIik7Zm9yKFZlPT1udWxsJiYoVmU9RWUubGVuZ3RoKTtSZTxWZTspc3Q9TSgoUmUrVmUpLzIpLGN0KEJlLEVlW3N0XSk8MD9WZT1zdDpSZT1zdCsxO3JldHVybltdLnNwbGljZS5hcHBseShFZSxbUmUsUmUtUmVdLmNvbmNhdChCZSkpLEJlfSwkPWZ1bmN0aW9uKEVlLEJlLFJlKXtyZXR1cm4gUmU9PW51bGwmJihSZT1TKSxFZS5wdXNoKEJlKSxMZShFZSwwLEVlLmxlbmd0aC0xLFJlKX0sTj1mdW5jdGlvbihFZSxCZSl7dmFyIFJlLFZlO3JldHVybiBCZT09bnVsbCYmKEJlPVMpLFJlPUVlLnBvcCgpLEVlLmxlbmd0aD8oVmU9RWVbMF0sRWVbMF09UmUsX2UoRWUsMCxCZSkpOlZlPVJlLFZlfSxxPWZ1bmN0aW9uKEVlLEJlLFJlKXt2YXIgVmU7cmV0dXJuIFJlPT1udWxsJiYoUmU9UyksVmU9RWVbMF0sRWVbMF09QmUsX2UoRWUsMCxSZSksVmV9LEg9ZnVuY3Rpb24oRWUsQmUsUmUpe3ZhciBWZTtyZXR1cm4gUmU9PW51bGwmJihSZT1TKSxFZS5sZW5ndGgmJlJlKEVlWzBdLEJlKTwwJiYoVmU9W0VlWzBdLEJlXSxCZT1WZVswXSxFZVswXT1WZVsxXSxfZShFZSwwLFJlKSksQmV9LE89ZnVuY3Rpb24oRWUsQmUpe3ZhciBSZSxWZSxjdCxzdCxZZSxtdDtmb3IoQmU9PW51bGwmJihCZT1TKSxzdD0oZnVuY3Rpb24oKXttdD1bXTtmb3IodmFyIEplPTAsTHQ9TShFZS5sZW5ndGgvMik7MDw9THQ/SmU8THQ6SmU+THQ7MDw9THQ/SmUrKzpKZS0tKW10LnB1c2goSmUpO3JldHVybiBtdH0pLmFwcGx5KHRoaXMpLnJldmVyc2UoKSxZZT1bXSxWZT0wLGN0PXN0Lmxlbmd0aDtWZTxjdDtWZSsrKVJlPXN0W1ZlXSxZZS5wdXNoKF9lKEVlLFJlLEJlKSk7cmV0dXJuIFllfSxtZT1mdW5jdGlvbihFZSxCZSxSZSl7dmFyIFZlO2lmKFJlPT1udWxsJiYoUmU9UyksVmU9RWUuaW5kZXhPZihCZSksVmUhPT0tMSlyZXR1cm4gTGUoRWUsMCxWZSxSZSksX2UoRWUsVmUsUmUpfSxjZT1mdW5jdGlvbihFZSxCZSxSZSl7dmFyIFZlLGN0LHN0LFllLG10O2lmKFJlPT1udWxsJiYoUmU9UyksY3Q9RWUuc2xpY2UoMCxCZSksIWN0Lmxlbmd0aClyZXR1cm4gY3Q7Zm9yKE8oY3QsUmUpLG10PUVlLnNsaWNlKEJlKSxzdD0wLFllPW10Lmxlbmd0aDtzdDxZZTtzdCsrKVZlPW10W3N0XSxIKGN0LFZlLFJlKTtyZXR1cm4gY3Quc29ydChSZSkucmV2ZXJzZSgpfSx2ZT1mdW5jdGlvbihFZSxCZSxSZSl7dmFyIFZlLGN0LHN0LFllLG10LEplLEx0LE10LHV0O2lmKFJlPT1udWxsJiYoUmU9UyksQmUqMTA8PUVlLmxlbmd0aCl7aWYoc3Q9RWUuc2xpY2UoMCxCZSkuc29ydChSZSksIXN0Lmxlbmd0aClyZXR1cm4gc3Q7Zm9yKGN0PXN0W3N0Lmxlbmd0aC0xXSxMdD1FZS5zbGljZShCZSksWWU9MCxKZT1MdC5sZW5ndGg7WWU8SmU7WWUrKylWZT1MdFtZZV0sUmUoVmUsY3QpPDAmJihZKHN0LFZlLDAsbnVsbCxSZSksc3QucG9wKCksY3Q9c3Rbc3QubGVuZ3RoLTFdKTtyZXR1cm4gc3R9Zm9yKE8oRWUsUmUpLHV0PVtdLG10PTAsTXQ9WihCZSxFZS5sZW5ndGgpOzA8PU10P210PE10Om10Pk10OzA8PU10PysrbXQ6LS1tdCl1dC5wdXNoKE4oRWUsUmUpKTtyZXR1cm4gdXR9LExlPWZ1bmN0aW9uKEVlLEJlLFJlLFZlKXt2YXIgY3Qsc3QsWWU7Zm9yKFZlPT1udWxsJiYoVmU9UyksY3Q9RWVbUmVdO1JlPkJlOyl7aWYoWWU9UmUtMT4+MSxzdD1FZVtZZV0sVmUoY3Qsc3QpPDApe0VlW1JlXT1zdCxSZT1ZZTtjb250aW51ZX1icmVha31yZXR1cm4gRWVbUmVdPWN0fSxfZT1mdW5jdGlvbihFZSxCZSxSZSl7dmFyIFZlLGN0LHN0LFllLG10O2ZvcihSZT09bnVsbCYmKFJlPVMpLGN0PUVlLmxlbmd0aCxtdD1CZSxzdD1FZVtCZV0sVmU9MipCZSsxO1ZlPGN0OylZZT1WZSsxLFllPGN0JiYhKFJlKEVlW1ZlXSxFZVtZZV0pPDApJiYoVmU9WWUpLEVlW0JlXT1FZVtWZV0sQmU9VmUsVmU9MipCZSsxO3JldHVybiBFZVtCZV09c3QsTGUoRWUsbXQsQmUsUmUpfSxrPWZ1bmN0aW9uKCl7RWUucHVzaD0kLEVlLnBvcD1OLEVlLnJlcGxhY2U9cSxFZS5wdXNocG9wPUgsRWUuaGVhcGlmeT1PLEVlLnVwZGF0ZUl0ZW09bWUsRWUubmxhcmdlc3Q9Y2UsRWUubnNtYWxsZXN0PXZlO2Z1bmN0aW9uIEVlKEJlKXt0aGlzLmNtcD1CZT8/Uyx0aGlzLm5vZGVzPVtdfXJldHVybiBFZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihCZSl7cmV0dXJuICQodGhpcy5ub2RlcyxCZSx0aGlzLmNtcCl9LEVlLnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oKXtyZXR1cm4gTih0aGlzLm5vZGVzLHRoaXMuY21wKX0sRWUucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2Rlc1swXX0sRWUucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKEJlKXtyZXR1cm4gdGhpcy5ub2Rlcy5pbmRleE9mKEJlKSE9PS0xfSxFZS5wcm90b3R5cGUucmVwbGFjZT1mdW5jdGlvbihCZSl7cmV0dXJuIHEodGhpcy5ub2RlcyxCZSx0aGlzLmNtcCl9LEVlLnByb3RvdHlwZS5wdXNocG9wPWZ1bmN0aW9uKEJlKXtyZXR1cm4gSCh0aGlzLm5vZGVzLEJlLHRoaXMuY21wKX0sRWUucHJvdG90eXBlLmhlYXBpZnk9ZnVuY3Rpb24oKXtyZXR1cm4gTyh0aGlzLm5vZGVzLHRoaXMuY21wKX0sRWUucHJvdG90eXBlLnVwZGF0ZUl0ZW09ZnVuY3Rpb24oQmUpe3JldHVybiBtZSh0aGlzLm5vZGVzLEJlLHRoaXMuY21wKX0sRWUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXM9W119LEVlLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzLmxlbmd0aD09PTB9LEVlLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXMubGVuZ3RofSxFZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgQmU7cmV0dXJuIEJlPW5ldyBFZSxCZS5ub2Rlcz10aGlzLm5vZGVzLnNsaWNlKDApLEJlfSxFZS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzLnNsaWNlKDApfSxFZS5wcm90b3R5cGUuaW5zZXJ0PUVlLnByb3RvdHlwZS5wdXNoLEVlLnByb3RvdHlwZS50b3A9RWUucHJvdG90eXBlLnBlZWssRWUucHJvdG90eXBlLmZyb250PUVlLnByb3RvdHlwZS5wZWVrLEVlLnByb3RvdHlwZS5oYXM9RWUucHJvdG90eXBlLmNvbnRhaW5zLEVlLnByb3RvdHlwZS5jb3B5PUVlLnByb3RvdHlwZS5jbG9uZSxFZX0oKSxmdW5jdGlvbihFZSxCZSl7cmV0dXJuIHguZXhwb3J0cz1CZSgpfSh0aGlzLGZ1bmN0aW9uKCl7cmV0dXJuIGt9KX0pLmNhbGwod3QpfSksVjk9R0osS0o9cTAoe3Jvb3Q6bnVsbCx3ZWlnaHQ6ZnVuY3Rpb24obSl7cmV0dXJuIDF9LGRpcmVjdGVkOiExfSksV0o9e2RpamtzdHJhOmZ1bmN0aW9uKG0pe2lmKCFzZShtKSl7dmFyIGs9YXJndW1lbnRzO209e3Jvb3Q6a1swXSx3ZWlnaHQ6a1sxXSxkaXJlY3RlZDprWzJdfX12YXIgUz1LSihtKSxNPVMucm9vdCxPPVMud2VpZ2h0LE49Uy5kaXJlY3RlZCwkPXRoaXMsSD1PLHE9YmUoTSk/dGhpcy5maWx0ZXIoTSlbMF06TVswXSxZPXt9LFo9e30sY2U9e30sdmU9dGhpcy5ieUdyb3VwKCksbWU9dmUubm9kZXMsTGU9dmUuZWRnZXM7TGUudW5tZXJnZUJ5KGZ1bmN0aW9uKF9uKXtyZXR1cm4gX24uaXNMb29wKCl9KTtmb3IodmFyIF9lPWZ1bmN0aW9uKGhuKXtyZXR1cm4gWVtobi5pZCgpXX0sRWU9ZnVuY3Rpb24oaG4sWXQpe1lbaG4uaWQoKV09WXQsQmUudXBkYXRlSXRlbShobil9LEJlPW5ldyBWOShmdW5jdGlvbihfbixobil7cmV0dXJuIF9lKF9uKS1fZShobil9KSxSZT0wO1JlPG1lLmxlbmd0aDtSZSsrKXt2YXIgVmU9bWVbUmVdO1lbVmUuaWQoKV09VmUuc2FtZShxKT8wOjEvMCxCZS5wdXNoKFZlKX1mb3IodmFyIGN0PWZ1bmN0aW9uKGhuLFl0KXtmb3IodmFyIERuPShOP2huLmVkZ2VzVG8oWXQpOmhuLmVkZ2VzV2l0aChZdCkpLmludGVyc2VjdChMZSksaXI9MS8wLHZyLE5uPTA7Tm48RG4ubGVuZ3RoO05uKyspe3ZhciBwcj1EbltObl0sRXI9SChwcik7KEVyPGlyfHwhdnIpJiYoaXI9RXIsdnI9cHIpfXJldHVybntlZGdlOnZyLGRpc3Q6aXJ9fTtCZS5zaXplKCk+MDspe3ZhciBzdD1CZS5wb3AoKSxZZT1fZShzdCksbXQ9c3QuaWQoKTtpZihjZVttdF09WWUsWWUhPT0xLzApZm9yKHZhciBKZT1zdC5uZWlnaGJvcmhvb2QoKS5pbnRlcnNlY3QobWUpLEx0PTA7THQ8SmUubGVuZ3RoO0x0Kyspe3ZhciBNdD1KZVtMdF0sdXQ9TXQuaWQoKSxXdD1jdChzdCxNdCksVHQ9WWUrV3QuZGlzdDtUdDxfZShNdCkmJihFZShNdCxUdCksWlt1dF09e25vZGU6c3QsZWRnZTpXdC5lZGdlfSl9fXJldHVybntkaXN0YW5jZVRvOmZ1bmN0aW9uKGhuKXt2YXIgWXQ9YmUoaG4pP21lLmZpbHRlcihobilbMF06aG5bMF07cmV0dXJuIGNlW1l0LmlkKCldfSxwYXRoVG86ZnVuY3Rpb24oaG4pe3ZhciBZdD1iZShobik/bWUuZmlsdGVyKGhuKVswXTpoblswXSxEbj1bXSxpcj1ZdCx2cj1pci5pZCgpO2lmKFl0Lmxlbmd0aD4wKWZvcihEbi51bnNoaWZ0KFl0KTtaW3ZyXTspe3ZhciBObj1aW3ZyXTtEbi51bnNoaWZ0KE5uLmVkZ2UpLERuLnVuc2hpZnQoTm4ubm9kZSksaXI9Tm4ubm9kZSx2cj1pci5pZCgpfXJldHVybiAkLnNwYXduKERuKX19fX0sWUo9e2tydXNrYWw6ZnVuY3Rpb24obSl7bT1tfHxmdW5jdGlvbihSZSl7cmV0dXJuIDF9O2Zvcih2YXIgaz10aGlzLmJ5R3JvdXAoKSxTPWsubm9kZXMsTT1rLmVkZ2VzLE89Uy5sZW5ndGgsTj1uZXcgQXJyYXkoTyksJD1TLEg9ZnVuY3Rpb24oVmUpe2Zvcih2YXIgY3Q9MDtjdDxOLmxlbmd0aDtjdCsrKXt2YXIgc3Q9TltjdF07aWYoc3QuaGFzKFZlKSlyZXR1cm4gY3R9fSxxPTA7cTxPO3ErKylOW3FdPXRoaXMuc3Bhd24oU1txXSk7Zm9yKHZhciBZPU0uc29ydChmdW5jdGlvbihSZSxWZSl7cmV0dXJuIG0oUmUpLW0oVmUpfSksWj0wO1o8WS5sZW5ndGg7WisrKXt2YXIgY2U9WVtaXSx2ZT1jZS5zb3VyY2UoKVswXSxtZT1jZS50YXJnZXQoKVswXSxMZT1IKHZlKSxfZT1IKG1lKSxFZT1OW0xlXSxCZT1OW19lXTtMZSE9PV9lJiYoJC5tZXJnZShjZSksRWUubWVyZ2UoQmUpLE4uc3BsaWNlKF9lLDEpKX1yZXR1cm4gJH19LFhKPXEwKHtyb290Om51bGwsZ29hbDpudWxsLHdlaWdodDpmdW5jdGlvbihtKXtyZXR1cm4gMX0saGV1cmlzdGljOmZ1bmN0aW9uKG0pe3JldHVybiAwfSxkaXJlY3RlZDohMX0pLFFKPXthU3RhcjpmdW5jdGlvbihtKXt2YXIgaz10aGlzLmN5KCksUz1YSihtKSxNPVMucm9vdCxPPVMuZ29hbCxOPVMuaGV1cmlzdGljLCQ9Uy5kaXJlY3RlZCxIPVMud2VpZ2h0O009ay5jb2xsZWN0aW9uKE0pWzBdLE89ay5jb2xsZWN0aW9uKE8pWzBdO3ZhciBxPU0uaWQoKSxZPU8uaWQoKSxaPXt9LGNlPXt9LHZlPXt9LG1lPW5ldyBWOShmdW5jdGlvbih2cixObil7cmV0dXJuIGNlW3ZyLmlkKCldLWNlW05uLmlkKCldfSksTGU9bmV3IFE3LF9lPXt9LEVlPXt9LEJlPWZ1bmN0aW9uKE5uLHByKXttZS5wdXNoKE5uKSxMZS5hZGQocHIpfSxSZSxWZSxjdD1mdW5jdGlvbigpe1JlPW1lLnBvcCgpLFZlPVJlLmlkKCksTGUuZGVsZXRlKFZlKX0sc3Q9ZnVuY3Rpb24oTm4pe3JldHVybiBMZS5oYXMoTm4pfTtCZShNLHEpLFpbcV09MCxjZVtxXT1OKE0pO2Zvcih2YXIgWWU9MDttZS5zaXplKCk+MDspe2lmKGN0KCksWWUrKyxWZT09PVkpe2Zvcih2YXIgbXQ9W10sSmU9TyxMdD1ZLE10PUVlW0x0XTttdC51bnNoaWZ0KEplKSxNdCE9bnVsbCYmbXQudW5zaGlmdChNdCksSmU9X2VbTHRdLEplIT1udWxsOylMdD1KZS5pZCgpLE10PUVlW0x0XTtyZXR1cm57Zm91bmQ6ITAsZGlzdGFuY2U6WltWZV0scGF0aDp0aGlzLnNwYXduKG10KSxzdGVwczpZZX19dmVbVmVdPSEwO2Zvcih2YXIgdXQ9UmUuX3ByaXZhdGUuZWRnZXMsV3Q9MDtXdDx1dC5sZW5ndGg7V3QrKyl7dmFyIFR0PXV0W1d0XTtpZih0aGlzLmhhc0VsZW1lbnRXaXRoSWQoVHQuaWQoKSkmJiEoJCYmVHQuZGF0YSgic291cmNlIikhPT1WZSkpe3ZhciBfbj1UdC5zb3VyY2UoKSxobj1UdC50YXJnZXQoKSxZdD1fbi5pZCgpIT09VmU/X246aG4sRG49WXQuaWQoKTtpZih0aGlzLmhhc0VsZW1lbnRXaXRoSWQoRG4pJiYhdmVbRG5dKXt2YXIgaXI9WltWZV0rSChUdCk7aWYoIXN0KERuKSl7WltEbl09aXIsY2VbRG5dPWlyK04oWXQpLEJlKFl0LERuKSxfZVtEbl09UmUsRWVbRG5dPVR0O2NvbnRpbnVlfWlyPFpbRG5dJiYoWltEbl09aXIsY2VbRG5dPWlyK04oWXQpLF9lW0RuXT1SZSxFZVtEbl09VHQpfX19fXJldHVybntmb3VuZDohMSxkaXN0YW5jZTp2b2lkIDAscGF0aDp2b2lkIDAsc3RlcHM6WWV9fX0sSko9cTAoe3dlaWdodDpmdW5jdGlvbihtKXtyZXR1cm4gMX0sZGlyZWN0ZWQ6ITF9KSxaSj17ZmxveWRXYXJzaGFsbDpmdW5jdGlvbihtKXtmb3IodmFyIGs9dGhpcy5jeSgpLFM9SkoobSksTT1TLndlaWdodCxPPVMuZGlyZWN0ZWQsTj1NLCQ9dGhpcy5ieUdyb3VwKCksSD0kLm5vZGVzLHE9JC5lZGdlcyxZPUgubGVuZ3RoLFo9WSpZLGNlPWZ1bmN0aW9uKEVyKXtyZXR1cm4gSC5pbmRleE9mKEVyKX0sdmU9ZnVuY3Rpb24oRXIpe3JldHVybiBIW0VyXX0sbWU9bmV3IEFycmF5KFopLExlPTA7TGU8WjtMZSsrKXt2YXIgX2U9TGUlWSxFZT0oTGUtX2UpL1k7RWU9PT1fZT9tZVtMZV09MDptZVtMZV09MS8wfWZvcih2YXIgQmU9bmV3IEFycmF5KFopLFJlPW5ldyBBcnJheShaKSxWZT0wO1ZlPHEubGVuZ3RoO1ZlKyspe3ZhciBjdD1xW1ZlXSxzdD1jdC5zb3VyY2UoKVswXSxZZT1jdC50YXJnZXQoKVswXTtpZihzdCE9PVllKXt2YXIgbXQ9Y2Uoc3QpLEplPWNlKFllKSxMdD1tdCpZK0plLE10PU4oY3QpO2lmKG1lW0x0XT5NdCYmKG1lW0x0XT1NdCxCZVtMdF09SmUsUmVbTHRdPWN0KSwhTyl7dmFyIHV0PUplKlkrbXQ7IU8mJm1lW3V0XT5NdCYmKG1lW3V0XT1NdCxCZVt1dF09bXQsUmVbdXRdPWN0KX19fWZvcih2YXIgV3Q9MDtXdDxZO1d0KyspZm9yKHZhciBUdD0wO1R0PFk7VHQrKylmb3IodmFyIF9uPVR0KlkrV3QsaG49MDtobjxZO2huKyspe3ZhciBZdD1UdCpZK2huLERuPVd0KlkraG47bWVbX25dK21lW0RuXTxtZVtZdF0mJihtZVtZdF09bWVbX25dK21lW0RuXSxCZVtZdF09QmVbX25dKX12YXIgaXI9ZnVuY3Rpb24oRXIpe3JldHVybihiZShFcik/ay5maWx0ZXIoRXIpOkVyKVswXX0sdnI9ZnVuY3Rpb24oRXIpe3JldHVybiBjZShpcihFcikpfSxObj17ZGlzdGFuY2U6ZnVuY3Rpb24oRXIsTXIpe3ZhciBDcj12cihFciksT3I9dnIoTXIpO3JldHVybiBtZVtDcipZK09yXX0scGF0aDpmdW5jdGlvbihFcixNcil7dmFyIENyPXZyKEVyKSxPcj12cihNciksV249dmUoQ3IpO2lmKENyPT09T3IpcmV0dXJuIFduLmNvbGxlY3Rpb24oKTtpZihCZVtDcipZK09yXT09bnVsbClyZXR1cm4gay5jb2xsZWN0aW9uKCk7dmFyIGJyPWsuY29sbGVjdGlvbigpLFNyPUNyLE5yO2Zvcihici5tZXJnZShXbik7Q3IhPT1PcjspU3I9Q3IsQ3I9QmVbQ3IqWStPcl0sTnI9UmVbU3IqWStDcl0sYnIubWVyZ2UoTnIpLGJyLm1lcmdlKHZlKENyKSk7cmV0dXJuIGJyfX07cmV0dXJuIE5ufX0sZVo9cTAoe3dlaWdodDpmdW5jdGlvbihtKXtyZXR1cm4gMX0sZGlyZWN0ZWQ6ITEscm9vdDpudWxsfSksdFo9e2JlbGxtYW5Gb3JkOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMsUz1lWihtKSxNPVMud2VpZ2h0LE89Uy5kaXJlY3RlZCxOPVMucm9vdCwkPU0sSD10aGlzLHE9dGhpcy5jeSgpLFk9dGhpcy5ieUdyb3VwKCksWj1ZLmVkZ2VzLGNlPVkubm9kZXMsdmU9Y2UubGVuZ3RoLG1lPW5ldyB3bSxMZT0hMSxfZT1bXTtOPXEuY29sbGVjdGlvbihOKVswXSxaLnVubWVyZ2VCeShmdW5jdGlvbihGcyl7cmV0dXJuIEZzLmlzTG9vcCgpfSk7Zm9yKHZhciBFZT1aLmxlbmd0aCxCZT1mdW5jdGlvbih4cyl7dmFyIFJzPW1lLmdldCh4cy5pZCgpKTtyZXR1cm4gUnN8fChScz17fSxtZS5zZXQoeHMuaWQoKSxScykpLFJzfSxSZT1mdW5jdGlvbih4cyl7cmV0dXJuKGJlKHhzKT9xLiQoeHMpOnhzKVswXX0sVmU9ZnVuY3Rpb24oeHMpe3JldHVybiBCZShSZSh4cykpLmRpc3R9LGN0PWZ1bmN0aW9uKHhzKXtmb3IodmFyIFJzPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpOLHlvPVJlKHhzKSwkYT1bXSxEYT15bzs7KXtpZihEYT09bnVsbClyZXR1cm4gay5zcGF3bigpO3ZhciBCbz1CZShEYSksdHI9Qm8uZWRnZSxHPUJvLnByZWQ7aWYoJGEudW5zaGlmdChEYVswXSksRGEuc2FtZShScykmJiRhLmxlbmd0aD4wKWJyZWFrO3RyIT1udWxsJiYkYS51bnNoaWZ0KHRyKSxEYT1HfXJldHVybiBILnNwYXduKCRhKX0sc3Q9MDtzdDx2ZTtzdCsrKXt2YXIgWWU9Y2Vbc3RdLG10PUJlKFllKTtZZS5zYW1lKE4pP210LmRpc3Q9MDptdC5kaXN0PTEvMCxtdC5wcmVkPW51bGwsbXQuZWRnZT1udWxsfWZvcih2YXIgSmU9ITEsTHQ9ZnVuY3Rpb24oeHMsUnMseW8sJGEsRGEsQm8pe3ZhciB0cj0kYS5kaXN0K0JvO3RyPERhLmRpc3QmJiF5by5zYW1lKCRhLmVkZ2UpJiYoRGEuZGlzdD10cixEYS5wcmVkPXhzLERhLmVkZ2U9eW8sSmU9ITApfSxNdD0xO010PHZlO010Kyspe0plPSExO2Zvcih2YXIgdXQ9MDt1dDxFZTt1dCsrKXt2YXIgV3Q9Wlt1dF0sVHQ9V3Quc291cmNlKCksX249V3QudGFyZ2V0KCksaG49JChXdCksWXQ9QmUoVHQpLERuPUJlKF9uKTtMdChUdCxfbixXdCxZdCxEbixobiksT3x8THQoX24sVHQsV3QsRG4sWXQsaG4pfWlmKCFKZSlicmVha31pZihKZSlmb3IodmFyIGlyPVtdLHZyPTA7dnI8RWU7dnIrKyl7dmFyIE5uPVpbdnJdLHByPU5uLnNvdXJjZSgpLEVyPU5uLnRhcmdldCgpLE1yPSQoTm4pLENyPUJlKHByKS5kaXN0LE9yPUJlKEVyKS5kaXN0O2lmKENyK01yPE9yfHwhTyYmT3IrTXI8Q3IpaWYoTGV8fChodSgiR3JhcGggY29udGFpbnMgYSBuZWdhdGl2ZSB3ZWlnaHQgY3ljbGUgZm9yIEJlbGxtYW4tRm9yZCIpLExlPSEwKSxtLmZpbmROZWdhdGl2ZVdlaWdodEN5Y2xlcyE9PSExKXt2YXIgV249W107Q3IrTXI8T3ImJlduLnB1c2gocHIpLCFPJiZPcitNcjxDciYmV24ucHVzaChFcik7Zm9yKHZhciBicj1Xbi5sZW5ndGgsU3I9MDtTcjxicjtTcisrKXt2YXIgTnI9V25bU3JdLFNpPVtOcl07U2kucHVzaChCZShOcikuZWRnZSk7Zm9yKHZhciB5cz1CZShOcikucHJlZDtTaS5pbmRleE9mKHlzKT09PS0xOylTaS5wdXNoKHlzKSxTaS5wdXNoKEJlKHlzKS5lZGdlKSx5cz1CZSh5cykucHJlZDtTaT1TaS5zbGljZShTaS5pbmRleE9mKHlzKSk7Zm9yKHZhciBwYT1TaVswXS5pZCgpLE1pPTAsZ2k9MjtnaTxTaS5sZW5ndGg7Z2krPTIpU2lbZ2ldLmlkKCk8cGEmJihwYT1TaVtnaV0uaWQoKSxNaT1naSk7U2k9U2kuc2xpY2UoTWkpLmNvbmNhdChTaS5zbGljZSgwLE1pKSksU2kucHVzaChTaVswXSk7dmFyIGZzPVNpLm1hcChmdW5jdGlvbihGcyl7cmV0dXJuIEZzLmlkKCl9KS5qb2luKCIsIik7aXIuaW5kZXhPZihmcyk9PT0tMSYmKF9lLnB1c2goSC5zcGF3bihTaSkpLGlyLnB1c2goZnMpKX19ZWxzZSBicmVha31yZXR1cm57ZGlzdGFuY2VUbzpWZSxwYXRoVG86Y3QsaGFzTmVnYXRpdmVXZWlnaHRDeWNsZTpMZSxuZWdhdGl2ZVdlaWdodEN5Y2xlczpfZX19fSxuWj1NYXRoLnNxcnQoMiksclo9ZnVuY3Rpb24obSxrLFMpe1MubGVuZ3RoPT09MCYmY2goIkthcmdlci1TdGVpbiBtdXN0IGJlIHJ1biBvbiBhIGNvbm5lY3RlZCAoc3ViKWdyYXBoIik7Zm9yKHZhciBNPVNbbV0sTz1NWzFdLE49TVsyXSwkPWtbT10sSD1rW05dLHE9UyxZPXEubGVuZ3RoLTE7WT49MDtZLS0pe3ZhciBaPXFbWV0sY2U9WlsxXSx2ZT1aWzJdOyhrW2NlXT09PSQmJmtbdmVdPT09SHx8a1tjZV09PT1IJiZrW3ZlXT09PSQpJiZxLnNwbGljZShZLDEpfWZvcih2YXIgbWU9MDttZTxxLmxlbmd0aDttZSsrKXt2YXIgTGU9cVttZV07TGVbMV09PT1IPyhxW21lXT1MZS5zbGljZSgpLHFbbWVdWzFdPSQpOkxlWzJdPT09SCYmKHFbbWVdPUxlLnNsaWNlKCkscVttZV1bMl09JCl9Zm9yKHZhciBfZT0wO19lPGsubGVuZ3RoO19lKyspa1tfZV09PT1IJiYoa1tfZV09JCk7cmV0dXJuIHF9LHJJPWZ1bmN0aW9uKG0sayxTLE0pe2Zvcig7Uz5NOyl7dmFyIE89TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmsubGVuZ3RoKTtrPXJaKE8sbSxrKSxTLS19cmV0dXJuIGt9LGlaPXtrYXJnZXJTdGVpbjpmdW5jdGlvbigpe3ZhciBtPXRoaXMsaz10aGlzLmJ5R3JvdXAoKSxTPWsubm9kZXMsTT1rLmVkZ2VzO00udW5tZXJnZUJ5KGZ1bmN0aW9uKERuKXtyZXR1cm4gRG4uaXNMb29wKCl9KTt2YXIgTz1TLmxlbmd0aCxOPU0ubGVuZ3RoLCQ9TWF0aC5jZWlsKE1hdGgucG93KE1hdGgubG9nKE8pL01hdGguTE4yLDIpKSxIPU1hdGguZmxvb3IoTy9uWik7aWYoTzwyKXtjaCgiQXQgbGVhc3QgMiBub2RlcyBhcmUgcmVxdWlyZWQgZm9yIEthcmdlci1TdGVpbiBhbGdvcml0aG0iKTtyZXR1cm59Zm9yKHZhciBxPVtdLFk9MDtZPE47WSsrKXt2YXIgWj1NW1ldO3EucHVzaChbWSxTLmluZGV4T2YoWi5zb3VyY2UoKSksUy5pbmRleE9mKFoudGFyZ2V0KCkpXSl9Zm9yKHZhciBjZT0xLzAsdmU9W10sbWU9bmV3IEFycmF5KE8pLExlPW5ldyBBcnJheShPKSxfZT1uZXcgQXJyYXkoTyksRWU9ZnVuY3Rpb24oaXIsdnIpe2Zvcih2YXIgTm49MDtObjxPO05uKyspdnJbTm5dPWlyW05uXX0sQmU9MDtCZTw9JDtCZSsrKXtmb3IodmFyIFJlPTA7UmU8TztSZSsrKUxlW1JlXT1SZTt2YXIgVmU9ckkoTGUscS5zbGljZSgpLE8sSCksY3Q9VmUuc2xpY2UoKTtFZShMZSxfZSk7dmFyIHN0PXJJKExlLFZlLEgsMiksWWU9ckkoX2UsY3QsSCwyKTtzdC5sZW5ndGg8PVllLmxlbmd0aCYmc3QubGVuZ3RoPGNlPyhjZT1zdC5sZW5ndGgsdmU9c3QsRWUoTGUsbWUpKTpZZS5sZW5ndGg8PXN0Lmxlbmd0aCYmWWUubGVuZ3RoPGNlJiYoY2U9WWUubGVuZ3RoLHZlPVllLEVlKF9lLG1lKSl9Zm9yKHZhciBtdD10aGlzLnNwYXduKHZlLm1hcChmdW5jdGlvbihEbil7cmV0dXJuIE1bRG5bMF1dfSkpLEplPXRoaXMuc3Bhd24oKSxMdD10aGlzLnNwYXduKCksTXQ9bWVbMF0sdXQ9MDt1dDxtZS5sZW5ndGg7dXQrKyl7dmFyIFd0PW1lW3V0XSxUdD1TW3V0XTtXdD09PU10P0plLm1lcmdlKFR0KTpMdC5tZXJnZShUdCl9dmFyIF9uPWZ1bmN0aW9uKGlyKXt2YXIgdnI9bS5zcGF3bigpO3JldHVybiBpci5mb3JFYWNoKGZ1bmN0aW9uKE5uKXt2ci5tZXJnZShObiksTm4uY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHByKXttLmNvbnRhaW5zKHByKSYmIW10LmNvbnRhaW5zKHByKSYmdnIubWVyZ2UocHIpfSl9KSx2cn0saG49W19uKEplKSxfbihMdCldLFl0PXtjdXQ6bXQsY29tcG9uZW50czpobixwYXJ0aXRpb24xOkplLHBhcnRpdGlvbjI6THR9O3JldHVybiBZdH19LHNaPWZ1bmN0aW9uKG0pe3JldHVybnt4Om0ueCx5Om0ueX19LGxTPWZ1bmN0aW9uKG0sayxTKXtyZXR1cm57eDptLngqaytTLngseTptLnkqaytTLnl9fSxoaj1mdW5jdGlvbihtLGssUyl7cmV0dXJue3g6KG0ueC1TLngpL2sseToobS55LVMueSkva319LEo3PWZ1bmN0aW9uKG0pe3JldHVybnt4Om1bMF0seTptWzFdfX0sYVo9ZnVuY3Rpb24obSl7Zm9yKHZhciBrPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowLFM9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOm0ubGVuZ3RoLE09MS8wLE89aztPPFM7TysrKXt2YXIgTj1tW09dO2lzRmluaXRlKE4pJiYoTT1NYXRoLm1pbihOLE0pKX1yZXR1cm4gTX0sb1o9ZnVuY3Rpb24obSl7Zm9yKHZhciBrPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowLFM9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOm0ubGVuZ3RoLE09LTEvMCxPPWs7TzxTO08rKyl7dmFyIE49bVtPXTtpc0Zpbml0ZShOKSYmKE09TWF0aC5tYXgoTixNKSl9cmV0dXJuIE19LGNaPWZ1bmN0aW9uKG0pe2Zvcih2YXIgaz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06MCxTPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTptLmxlbmd0aCxNPTAsTz0wLE49aztOPFM7TisrKXt2YXIgJD1tW05dO2lzRmluaXRlKCQpJiYoTSs9JCxPKyspfXJldHVybiBNL099LHVaPWZ1bmN0aW9uKG0pe3ZhciBrPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowLFM9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOm0ubGVuZ3RoLE09YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiEwLE89YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiEwLE49YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiEwO00/bT1tLnNsaWNlKGssUyk6KFM8bS5sZW5ndGgmJm0uc3BsaWNlKFMsbS5sZW5ndGgtUyksaz4wJiZtLnNwbGljZSgwLGspKTtmb3IodmFyICQ9MCxIPW0ubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBxPW1bSF07Tj9pc0Zpbml0ZShxKXx8KG1bSF09LTEvMCwkKyspOm0uc3BsaWNlKEgsMSl9TyYmbS5zb3J0KGZ1bmN0aW9uKGNlLHZlKXtyZXR1cm4gY2UtdmV9KTt2YXIgWT1tLmxlbmd0aCxaPU1hdGguZmxvb3IoWS8yKTtyZXR1cm4gWSUyIT09MD9tW1orMSskXToobVtaLTErJF0rbVtaKyRdKS8yfSxsWj1mdW5jdGlvbihtKXtyZXR1cm4gTWF0aC5QSSptLzE4MH0saFM9ZnVuY3Rpb24obSxrKXtyZXR1cm4gTWF0aC5hdGFuMihrLG0pLU1hdGguUEkvMn0saUk9TWF0aC5sb2cyfHxmdW5jdGlvbih4KXtyZXR1cm4gTWF0aC5sb2coeCkvTWF0aC5sb2coMil9LGZqPWZ1bmN0aW9uKG0pe3JldHVybiBtPjA/MTptPDA/LTE6MH0saDU9ZnVuY3Rpb24obSxrKXtyZXR1cm4gTWF0aC5zcXJ0KGY1KG0saykpfSxmNT1mdW5jdGlvbihtLGspe3ZhciBTPWsueC1tLngsTT1rLnktbS55O3JldHVybiBTKlMrTSpNfSxoWj1mdW5jdGlvbihtKXtmb3IodmFyIGs9bS5sZW5ndGgsUz0wLE09MDtNPGs7TSsrKVMrPW1bTV07Zm9yKHZhciBPPTA7TzxrO08rKyltW09dPW1bT10vUztyZXR1cm4gbX0sdDA9ZnVuY3Rpb24obSxrLFMsTSl7cmV0dXJuKDEtTSkqKDEtTSkqbSsyKigxLU0pKk0qaytNKk0qU30sWjc9ZnVuY3Rpb24obSxrLFMsTSl7cmV0dXJue3g6dDAobS54LGsueCxTLngsTSkseTp0MChtLnksay55LFMueSxNKX19LGZaPWZ1bmN0aW9uKG0sayxTLE0pe3ZhciBPPXt4OmsueC1tLngseTprLnktbS55fSxOPWg1KG0sayksJD17eDpPLngvTix5Ok8ueS9OfTtyZXR1cm4gUz1TPz8wLE09TT8/UypOLHt4Om0ueCskLngqTSx5Om0ueSskLnkqTX19LFU5PWZ1bmN0aW9uKG0sayxTKXtyZXR1cm4gTWF0aC5tYXgobSxNYXRoLm1pbihTLGspKX0sV2Q9ZnVuY3Rpb24obSl7aWYobT09bnVsbClyZXR1cm57eDE6MS8wLHkxOjEvMCx4MjotMS8wLHkyOi0xLzAsdzowLGg6MH07aWYobS54MSE9bnVsbCYmbS55MSE9bnVsbCl7aWYobS54MiE9bnVsbCYmbS55MiE9bnVsbCYmbS54Mj49bS54MSYmbS55Mj49bS55MSlyZXR1cm57eDE6bS54MSx5MTptLnkxLHgyOm0ueDIseTI6bS55Mix3Om0ueDItbS54MSxoOm0ueTItbS55MX07aWYobS53IT1udWxsJiZtLmghPW51bGwmJm0udz49MCYmbS5oPj0wKXJldHVybnt4MTptLngxLHkxOm0ueTEseDI6bS54MSttLncseTI6bS55MSttLmgsdzptLncsaDptLmh9fX0sZFo9ZnVuY3Rpb24obSl7cmV0dXJue3gxOm0ueDEseDI6bS54Mix3Om0udyx5MTptLnkxLHkyOm0ueTIsaDptLmh9fSxnWj1mdW5jdGlvbihtKXttLngxPTEvMCxtLnkxPTEvMCxtLngyPS0xLzAsbS55Mj0tMS8wLG0udz0wLG0uaD0wfSxwWj1mdW5jdGlvbihtLGssUyl7cmV0dXJue3gxOm0ueDErayx4MjptLngyK2sseTE6bS55MStTLHkyOm0ueTIrUyx3Om0udyxoOm0uaH19LGRqPWZ1bmN0aW9uKG0sayl7bS54MT1NYXRoLm1pbihtLngxLGsueDEpLG0ueDI9TWF0aC5tYXgobS54MixrLngyKSxtLnc9bS54Mi1tLngxLG0ueTE9TWF0aC5taW4obS55MSxrLnkxKSxtLnkyPU1hdGgubWF4KG0ueTIsay55MiksbS5oPW0ueTItbS55MX0sYlo9ZnVuY3Rpb24obSxrLFMpe20ueDE9TWF0aC5taW4obS54MSxrKSxtLngyPU1hdGgubWF4KG0ueDIsayksbS53PW0ueDItbS54MSxtLnkxPU1hdGgubWluKG0ueTEsUyksbS55Mj1NYXRoLm1heChtLnkyLFMpLG0uaD1tLnkyLW0ueTF9LGZTPWZ1bmN0aW9uKG0pe3ZhciBrPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowO3JldHVybiBtLngxLT1rLG0ueDIrPWssbS55MS09ayxtLnkyKz1rLG0udz1tLngyLW0ueDEsbS5oPW0ueTItbS55MSxtfSxkUz1mdW5jdGlvbihtKXt2YXIgaz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06WzBdLFMsTSxPLE47aWYoay5sZW5ndGg9PT0xKVM9TT1PPU49a1swXTtlbHNlIGlmKGsubGVuZ3RoPT09MilTPU89a1swXSxOPU09a1sxXTtlbHNlIGlmKGsubGVuZ3RoPT09NCl7dmFyICQ9eShrLDQpO1M9JFswXSxNPSRbMV0sTz0kWzJdLE49JFszXX1yZXR1cm4gbS54MS09TixtLngyKz1NLG0ueTEtPVMsbS55Mis9TyxtLnc9bS54Mi1tLngxLG0uaD1tLnkyLW0ueTEsbX0sZ2o9ZnVuY3Rpb24obSxrKXttLngxPWsueDEsbS55MT1rLnkxLG0ueDI9ay54MixtLnkyPWsueTIsbS53PW0ueDItbS54MSxtLmg9bS55Mi1tLnkxfSxzST1mdW5jdGlvbihtLGspe3JldHVybiEobS54MT5rLngyfHxrLngxPm0ueDJ8fG0ueDI8ay54MXx8ay54MjxtLngxfHxtLnkyPGsueTF8fGsueTI8bS55MXx8bS55MT5rLnkyfHxrLnkxPm0ueTIpfSxlOD1mdW5jdGlvbihtLGssUyl7cmV0dXJuIG0ueDE8PWsmJms8PW0ueDImJm0ueTE8PVMmJlM8PW0ueTJ9LG1aPWZ1bmN0aW9uKG0sayl7cmV0dXJuIGU4KG0say54LGsueSl9LHBqPWZ1bmN0aW9uKG0sayl7cmV0dXJuIGU4KG0say54MSxrLnkxKSYmZTgobSxrLngyLGsueTIpfSxiaj1mdW5jdGlvbihtLGssUyxNLE8sTiwkKXt2YXIgSD1XOShPLE4pLHE9Ty8yLFk9Ti8yLFo7e3ZhciBjZT1TLXErSC0kLHZlPU0tWS0kLG1lPVMrcS1IKyQsTGU9dmU7aWYoWj1aMyhtLGssUyxNLGNlLHZlLG1lLExlLCExKSxaLmxlbmd0aD4wKXJldHVybiBafXt2YXIgX2U9UytxKyQsRWU9TS1ZK0gtJCxCZT1fZSxSZT1NK1ktSCskO2lmKFo9WjMobSxrLFMsTSxfZSxFZSxCZSxSZSwhMSksWi5sZW5ndGg+MClyZXR1cm4gWn17dmFyIFZlPVMtcStILSQsY3Q9TStZKyQsc3Q9UytxLUgrJCxZZT1jdDtpZihaPVozKG0sayxTLE0sVmUsY3Qsc3QsWWUsITEpLFoubGVuZ3RoPjApcmV0dXJuIFp9e3ZhciBtdD1TLXEtJCxKZT1NLVkrSC0kLEx0PW10LE10PU0rWS1IKyQ7aWYoWj1aMyhtLGssUyxNLG10LEplLEx0LE10LCExKSxaLmxlbmd0aD4wKXJldHVybiBafXZhciB1dDt7dmFyIFd0PVMtcStILFR0PU0tWStIO2lmKHV0PUc5KG0sayxTLE0sV3QsVHQsSCskKSx1dC5sZW5ndGg+MCYmdXRbMF08PVd0JiZ1dFsxXTw9VHQpcmV0dXJuW3V0WzBdLHV0WzFdXX17dmFyIF9uPVMrcS1ILGhuPU0tWStIO2lmKHV0PUc5KG0sayxTLE0sX24saG4sSCskKSx1dC5sZW5ndGg+MCYmdXRbMF0+PV9uJiZ1dFsxXTw9aG4pcmV0dXJuW3V0WzBdLHV0WzFdXX17dmFyIFl0PVMrcS1ILERuPU0rWS1IO2lmKHV0PUc5KG0sayxTLE0sWXQsRG4sSCskKSx1dC5sZW5ndGg+MCYmdXRbMF0+PVl0JiZ1dFsxXT49RG4pcmV0dXJuW3V0WzBdLHV0WzFdXX17dmFyIGlyPVMtcStILHZyPU0rWS1IO2lmKHV0PUc5KG0sayxTLE0saXIsdnIsSCskKSx1dC5sZW5ndGg+MCYmdXRbMF08PWlyJiZ1dFsxXT49dnIpcmV0dXJuW3V0WzBdLHV0WzFdXX1yZXR1cm5bXX0sdlo9ZnVuY3Rpb24obSxrLFMsTSxPLE4sJCl7dmFyIEg9JCxxPU1hdGgubWluKFMsTyksWT1NYXRoLm1heChTLE8pLFo9TWF0aC5taW4oTSxOKSxjZT1NYXRoLm1heChNLE4pO3JldHVybiBxLUg8PW0mJm08PVkrSCYmWi1IPD1rJiZrPD1jZStIfSx3Wj1mdW5jdGlvbihtLGssUyxNLE8sTiwkLEgscSl7dmFyIFk9e3gxOk1hdGgubWluKFMsJCxPKS1xLHgyOk1hdGgubWF4KFMsJCxPKStxLHkxOk1hdGgubWluKE0sSCxOKS1xLHkyOk1hdGgubWF4KE0sSCxOKStxfTtyZXR1cm4hKG08WS54MXx8bT5ZLngyfHxrPFkueTF8fGs+WS55Mil9LHlaPWZ1bmN0aW9uKG0sayxTLE0pe1MtPU07dmFyIE89ayprLTQqbSpTO2lmKE88MClyZXR1cm5bXTt2YXIgTj1NYXRoLnNxcnQoTyksJD0yKm0sSD0oLWsrTikvJCxxPSgtay1OKS8kO3JldHVybltILHFdfSx4Wj1mdW5jdGlvbihtLGssUyxNLE8pe3ZhciBOPTFlLTU7bT09PTAmJihtPU4pLGsvPW0sUy89bSxNLz1tO3ZhciAkLEgscSxZLFosY2UsdmUsbWU7aWYoSD0oMypTLWsqaykvOSxxPS0oMjcqTSkrayooOSpTLTIqKGsqaykpLHEvPTU0LCQ9SCpIKkgrcSpxLE9bMV09MCx2ZT1rLzMsJD4wKXtaPXErTWF0aC5zcXJ0KCQpLFo9WjwwPy1NYXRoLnBvdygtWiwxLzMpOk1hdGgucG93KFosMS8zKSxjZT1xLU1hdGguc3FydCgkKSxjZT1jZTwwPy1NYXRoLnBvdygtY2UsMS8zKTpNYXRoLnBvdyhjZSwxLzMpLE9bMF09LXZlK1orY2UsdmUrPShaK2NlKS8yLE9bNF09T1syXT0tdmUsdmU9TWF0aC5zcXJ0KDMpKigtY2UrWikvMixPWzNdPXZlLE9bNV09LXZlO3JldHVybn1pZihPWzVdPU9bM109MCwkPT09MCl7bWU9cTwwPy1NYXRoLnBvdygtcSwxLzMpOk1hdGgucG93KHEsMS8zKSxPWzBdPS12ZSsyKm1lLE9bNF09T1syXT0tKG1lK3ZlKTtyZXR1cm59SD0tSCxZPUgqSCpILFk9TWF0aC5hY29zKHEvTWF0aC5zcXJ0KFkpKSxtZT0yKk1hdGguc3FydChIKSxPWzBdPS12ZSttZSpNYXRoLmNvcyhZLzMpLE9bMl09LXZlK21lKk1hdGguY29zKChZKzIqTWF0aC5QSSkvMyksT1s0XT0tdmUrbWUqTWF0aC5jb3MoKFkrNCpNYXRoLlBJKS8zKX0sa1o9ZnVuY3Rpb24obSxrLFMsTSxPLE4sJCxIKXt2YXIgcT0xKlMqUy00KlMqTysyKlMqJCs0Kk8qTy00Kk8qJCskKiQrTSpNLTQqTSpOKzIqTSpIKzQqTipOLTQqTipIK0gqSCxZPTEqOSpTKk8tMypTKlMtMypTKiQtNipPKk8rMypPKiQrOSpNKk4tMypNKk0tMypNKkgtNipOKk4rMypOKkgsWj0xKjMqUypTLTYqUypPK1MqJC1TKm0rMipPKk8rMipPKm0tJCptKzMqTSpNLTYqTSpOK00qSC1NKmsrMipOKk4rMipOKmstSCprLGNlPTEqUypPLVMqUytTKm0tTyptK00qTi1NKk0rTSprLU4qayx2ZT1bXTt4WihxLFksWixjZSx2ZSk7Zm9yKHZhciBtZT0xZS03LExlPVtdLF9lPTA7X2U8NjtfZSs9MilNYXRoLmFicyh2ZVtfZSsxXSk8bWUmJnZlW19lXT49MCYmdmVbX2VdPD0xJiZMZS5wdXNoKHZlW19lXSk7TGUucHVzaCgxKSxMZS5wdXNoKDApO2Zvcih2YXIgRWU9LTEsQmUsUmUsVmUsY3Q9MDtjdDxMZS5sZW5ndGg7Y3QrKylCZT1NYXRoLnBvdygxLUxlW2N0XSwyKSpTKzIqKDEtTGVbY3RdKSpMZVtjdF0qTytMZVtjdF0qTGVbY3RdKiQsUmU9TWF0aC5wb3coMS1MZVtjdF0sMikqTSsyKigxLUxlW2N0XSkqTGVbY3RdKk4rTGVbY3RdKkxlW2N0XSpILFZlPU1hdGgucG93KEJlLW0sMikrTWF0aC5wb3coUmUtaywyKSxFZT49MD9WZTxFZSYmKEVlPVZlKTpFZT1WZTtyZXR1cm4gRWV9LEVaPWZ1bmN0aW9uKG0sayxTLE0sTyxOKXt2YXIgJD1bbS1TLGstTV0sSD1bTy1TLE4tTV0scT1IWzBdKkhbMF0rSFsxXSpIWzFdLFk9JFswXSokWzBdKyRbMV0qJFsxXSxaPSRbMF0qSFswXSskWzFdKkhbMV0sY2U9WipaL3E7cmV0dXJuIFo8MD9ZOmNlPnE/KG0tTykqKG0tTykrKGstTikqKGstTik6WS1jZX0sWWQ9ZnVuY3Rpb24obSxrLFMpe2Zvcih2YXIgTSxPLE4sJCxILHE9MCxZPTA7WTxTLmxlbmd0aC8yO1krKylpZihNPVNbWSoyXSxPPVNbWSoyKzFdLFkrMTxTLmxlbmd0aC8yPyhOPVNbKFkrMSkqMl0sJD1TWyhZKzEpKjIrMV0pOihOPVNbKFkrMS1TLmxlbmd0aC8yKSoyXSwkPVNbKFkrMS1TLmxlbmd0aC8yKSoyKzFdKSwhKE09PW0mJk49PW0pKWlmKE0+PW0mJm0+PU58fE08PW0mJm08PU4pSD0obS1NKS8oTi1NKSooJC1PKStPLEg+ayYmcSsrO2Vsc2UgY29udGludWU7cmV0dXJuIHElMiE9PTB9LFV2PWZ1bmN0aW9uKG0sayxTLE0sTyxOLCQsSCxxKXt2YXIgWT1uZXcgQXJyYXkoUy5sZW5ndGgpLFo7SFswXSE9bnVsbD8oWj1NYXRoLmF0YW4oSFsxXS9IWzBdKSxIWzBdPDA/Wj1aK01hdGguUEkvMjpaPS1aLU1hdGguUEkvMik6Wj1IO2Zvcih2YXIgY2U9TWF0aC5jb3MoLVopLHZlPU1hdGguc2luKC1aKSxtZT0wO21lPFkubGVuZ3RoLzI7bWUrKylZW21lKjJdPU4vMiooU1ttZSoyXSpjZS1TW21lKjIrMV0qdmUpLFlbbWUqMisxXT0kLzIqKFNbbWUqMisxXSpjZStTW21lKjJdKnZlKSxZW21lKjJdKz1NLFlbbWUqMisxXSs9Tzt2YXIgTGU7aWYocT4wKXt2YXIgX2U9cFMoWSwtcSk7TGU9Z1MoX2UpfWVsc2UgTGU9WTtyZXR1cm4gWWQobSxrLExlKX0sVFo9ZnVuY3Rpb24obSxrLFMsTSxPLE4sJCl7Zm9yKHZhciBIPW5ldyBBcnJheShTLmxlbmd0aCkscT1OLzIsWT0kLzIsWj1jSShOLCQpLGNlPVoqWix2ZT0wO3ZlPFMubGVuZ3RoLzQ7dmUrKyl7dmFyIG1lPXZvaWQgMCxMZT12b2lkIDA7dmU9PT0wP21lPVMubGVuZ3RoLTI6bWU9dmUqNC0yLExlPXZlKjQrMjt2YXIgX2U9TStxKlNbdmUqNF0sRWU9TytZKlNbdmUqNCsxXSxCZT0tU1ttZV0qU1tMZV0tU1ttZSsxXSpTW0xlKzFdLFJlPVovTWF0aC50YW4oTWF0aC5hY29zKEJlKS8yKSxWZT1fZS1SZSpTW21lXSxjdD1FZS1SZSpTW21lKzFdLHN0PV9lK1JlKlNbTGVdLFllPUVlK1JlKlNbTGUrMV07SFt2ZSo0XT1WZSxIW3ZlKjQrMV09Y3QsSFt2ZSo0KzJdPXN0LEhbdmUqNCszXT1ZZTt2YXIgbXQ9U1ttZSsxXSxKZT0tU1ttZV0sTHQ9bXQqU1tMZV0rSmUqU1tMZSsxXTtMdDwwJiYobXQqPS0xLEplKj0tMSk7dmFyIE10PVZlK210KlosdXQ9Y3QrSmUqWixXdD1NYXRoLnBvdyhNdC1tLDIpK01hdGgucG93KHV0LWssMik7aWYoV3Q8PWNlKXJldHVybiEwfXJldHVybiBZZChtLGssSCl9LGdTPWZ1bmN0aW9uKG0pe2Zvcih2YXIgaz1uZXcgQXJyYXkobS5sZW5ndGgvMiksUyxNLE8sTiwkLEgscSxZLFo9MDtaPG0ubGVuZ3RoLzQ7WisrKXtTPW1bWio0XSxNPW1bWio0KzFdLE89bVtaKjQrMl0sTj1tW1oqNCszXSxaPG0ubGVuZ3RoLzQtMT8oJD1tWyhaKzEpKjRdLEg9bVsoWisxKSo0KzFdLHE9bVsoWisxKSo0KzJdLFk9bVsoWisxKSo0KzNdKTooJD1tWzBdLEg9bVsxXSxxPW1bMl0sWT1tWzNdKTt2YXIgY2U9WjMoUyxNLE8sTiwkLEgscSxZLCEwKTtrW1oqMl09Y2VbMF0sa1taKjIrMV09Y2VbMV19cmV0dXJuIGt9LHBTPWZ1bmN0aW9uKG0sayl7Zm9yKHZhciBTPW5ldyBBcnJheShtLmxlbmd0aCoyKSxNLE8sTiwkLEg9MDtIPG0ubGVuZ3RoLzI7SCsrKXtNPW1bSCoyXSxPPW1bSCoyKzFdLEg8bS5sZW5ndGgvMi0xPyhOPW1bKEgrMSkqMl0sJD1tWyhIKzEpKjIrMV0pOihOPW1bMF0sJD1tWzFdKTt2YXIgcT0kLU8sWT0tKE4tTSksWj1NYXRoLnNxcnQocSpxK1kqWSksY2U9cS9aLHZlPVkvWjtTW0gqNF09TStjZSprLFNbSCo0KzFdPU8rdmUqayxTW0gqNCsyXT1OK2NlKmssU1tIKjQrM109JCt2ZSprfXJldHVybiBTfSxDWj1mdW5jdGlvbihtLGssUyxNLE8sTil7dmFyICQ9Uy1tLEg9TS1rOyQvPU8sSC89Tjt2YXIgcT1NYXRoLnNxcnQoJCokK0gqSCksWT1xLTE7aWYoWTwwKXJldHVybltdO3ZhciBaPVkvcTtyZXR1cm5bKFMtbSkqWittLChNLWspKlora119LGQ1PWZ1bmN0aW9uKG0sayxTLE0sTyxOLCQpe3JldHVybiBtLT1PLGstPU4sbS89Uy8yKyQsay89TS8yKyQsbSptK2sqazw9MX0sRzk9ZnVuY3Rpb24obSxrLFMsTSxPLE4sJCl7dmFyIEg9W1MtbSxNLWtdLHE9W20tTyxrLU5dLFk9SFswXSpIWzBdK0hbMV0qSFsxXSxaPTIqKHFbMF0qSFswXStxWzFdKkhbMV0pLGNlPXFbMF0qcVswXStxWzFdKnFbMV0tJCokLHZlPVoqWi00KlkqY2U7aWYodmU8MClyZXR1cm5bXTt2YXIgbWU9KC1aK01hdGguc3FydCh2ZSkpLygyKlkpLExlPSgtWi1NYXRoLnNxcnQodmUpKS8oMipZKSxfZT1NYXRoLm1pbihtZSxMZSksRWU9TWF0aC5tYXgobWUsTGUpLEJlPVtdO2lmKF9lPj0wJiZfZTw9MSYmQmUucHVzaChfZSksRWU+PTAmJkVlPD0xJiZCZS5wdXNoKEVlKSxCZS5sZW5ndGg9PT0wKXJldHVybltdO3ZhciBSZT1CZVswXSpIWzBdK20sVmU9QmVbMF0qSFsxXStrO2lmKEJlLmxlbmd0aD4xKXtpZihCZVswXT09QmVbMV0pcmV0dXJuW1JlLFZlXTt2YXIgY3Q9QmVbMV0qSFswXSttLHN0PUJlWzFdKkhbMV0raztyZXR1cm5bUmUsVmUsY3Qsc3RdfWVsc2UgcmV0dXJuW1JlLFZlXX0sYUk9ZnVuY3Rpb24obSxrLFMpe3JldHVybiBrPD1tJiZtPD1TfHxTPD1tJiZtPD1rP206bTw9ayYmazw9U3x8Uzw9ayYmazw9bT9rOlN9LFozPWZ1bmN0aW9uKG0sayxTLE0sTyxOLCQsSCxxKXt2YXIgWT1tLU8sWj1TLW0sY2U9JC1PLHZlPWstTixtZT1NLWssTGU9SC1OLF9lPWNlKnZlLUxlKlksRWU9Wip2ZS1tZSpZLEJlPUxlKlotY2UqbWU7aWYoQmUhPT0wKXt2YXIgUmU9X2UvQmUsVmU9RWUvQmUsY3Q9LjAwMSxzdD0wLWN0LFllPTErY3Q7cmV0dXJuIHN0PD1SZSYmUmU8PVllJiZzdDw9VmUmJlZlPD1ZZT9bbStSZSpaLGsrUmUqbWVdOnE/W20rUmUqWixrK1JlKm1lXTpbXX1lbHNlIHJldHVybiBfZT09PTB8fEVlPT09MD9hSShtLFMsJCk9PT0kP1skLEhdOmFJKG0sUyxPKT09PU8/W08sTl06YUkoTywkLFMpPT09Uz9bUyxNXTpbXTpbXX0sSzk9ZnVuY3Rpb24obSxrLFMsTSxPLE4sJCxIKXt2YXIgcT1bXSxZLFo9bmV3IEFycmF5KFMubGVuZ3RoKSxjZT0hMDtOPT1udWxsJiYoY2U9ITEpO3ZhciB2ZTtpZihjZSl7Zm9yKHZhciBtZT0wO21lPFoubGVuZ3RoLzI7bWUrKylaW21lKjJdPVNbbWUqMl0qTitNLFpbbWUqMisxXT1TW21lKjIrMV0qJCtPO2lmKEg+MCl7dmFyIExlPXBTKFosLUgpO3ZlPWdTKExlKX1lbHNlIHZlPVp9ZWxzZSB2ZT1TO2Zvcih2YXIgX2UsRWUsQmUsUmUsVmU9MDtWZTx2ZS5sZW5ndGgvMjtWZSsrKV9lPXZlW1ZlKjJdLEVlPXZlW1ZlKjIrMV0sVmU8dmUubGVuZ3RoLzItMT8oQmU9dmVbKFZlKzEpKjJdLFJlPXZlWyhWZSsxKSoyKzFdKTooQmU9dmVbMF0sUmU9dmVbMV0pLFk9WjMobSxrLE0sTyxfZSxFZSxCZSxSZSksWS5sZW5ndGghPT0wJiZxLnB1c2goWVswXSxZWzFdKTtyZXR1cm4gcX0sU1o9ZnVuY3Rpb24obSxrLFMsTSxPLE4sJCxIKXtmb3IodmFyIHE9W10sWSxaPW5ldyBBcnJheShTLmxlbmd0aCksY2U9Ti8yLHZlPSQvMixtZT1jSShOLCQpLExlPTA7TGU8Uy5sZW5ndGgvNDtMZSsrKXt2YXIgX2U9dm9pZCAwLEVlPXZvaWQgMDtMZT09PTA/X2U9Uy5sZW5ndGgtMjpfZT1MZSo0LTIsRWU9TGUqNCsyO3ZhciBCZT1NK2NlKlNbTGUqNF0sUmU9Tyt2ZSpTW0xlKjQrMV0sVmU9LVNbX2VdKlNbRWVdLVNbX2UrMV0qU1tFZSsxXSxjdD1tZS9NYXRoLnRhbihNYXRoLmFjb3MoVmUpLzIpLHN0PUJlLWN0KlNbX2VdLFllPVJlLWN0KlNbX2UrMV0sbXQ9QmUrY3QqU1tFZV0sSmU9UmUrY3QqU1tFZSsxXTtMZT09PTA/KFpbUy5sZW5ndGgtMl09c3QsWltTLmxlbmd0aC0xXT1ZZSk6KFpbTGUqNC0yXT1zdCxaW0xlKjQtMV09WWUpLFpbTGUqNF09bXQsWltMZSo0KzFdPUplO3ZhciBMdD1TW19lKzFdLE10PS1TW19lXSx1dD1MdCpTW0VlXStNdCpTW0VlKzFdO3V0PDAmJihMdCo9LTEsTXQqPS0xKTt2YXIgV3Q9c3QrTHQqbWUsVHQ9WWUrTXQqbWU7WT1HOShtLGssTSxPLFd0LFR0LG1lKSxZLmxlbmd0aCE9PTAmJnEucHVzaChZWzBdLFlbMV0pfWZvcih2YXIgX249MDtfbjxaLmxlbmd0aC80O19uKyspWT1aMyhtLGssTSxPLFpbX24qNF0sWltfbio0KzFdLFpbX24qNCsyXSxaW19uKjQrM10sITEpLFkubGVuZ3RoIT09MCYmcS5wdXNoKFlbMF0sWVsxXSk7aWYocS5sZW5ndGg+Mil7Zm9yKHZhciBobj1bcVswXSxxWzFdXSxZdD1NYXRoLnBvdyhoblswXS1tLDIpK01hdGgucG93KGhuWzFdLWssMiksRG49MTtEbjxxLmxlbmd0aC8yO0RuKyspe3ZhciBpcj1NYXRoLnBvdyhxW0RuKjJdLW0sMikrTWF0aC5wb3cocVtEbioyKzFdLWssMik7aXI8PVl0JiYoaG5bMF09cVtEbioyXSxoblsxXT1xW0RuKjIrMV0sWXQ9aXIpfXJldHVybiBobn1yZXR1cm4gcX0sYlM9ZnVuY3Rpb24obSxrLFMpe3ZhciBNPVttWzBdLWtbMF0sbVsxXS1rWzFdXSxPPU1hdGguc3FydChNWzBdKk1bMF0rTVsxXSpNWzFdKSxOPShPLVMpL087cmV0dXJuIE48MCYmKE49MWUtNSksW2tbMF0rTipNWzBdLGtbMV0rTipNWzFdXX0saGQ9ZnVuY3Rpb24obSxrKXt2YXIgUz1vSShtLGspO3JldHVybiBTPW1qKFMpLFN9LG1qPWZ1bmN0aW9uKG0pe2Zvcih2YXIgayxTLE09bS5sZW5ndGgvMixPPTEvMCxOPTEvMCwkPS0xLzAsSD0tMS8wLHE9MDtxPE07cSsrKWs9bVsyKnFdLFM9bVsyKnErMV0sTz1NYXRoLm1pbihPLGspLCQ9TWF0aC5tYXgoJCxrKSxOPU1hdGgubWluKE4sUyksSD1NYXRoLm1heChILFMpO2Zvcih2YXIgWT0yLygkLU8pLFo9Mi8oSC1OKSxjZT0wO2NlPE07Y2UrKylrPW1bMipjZV09bVsyKmNlXSpZLFM9bVsyKmNlKzFdPW1bMipjZSsxXSpaLE89TWF0aC5taW4oTyxrKSwkPU1hdGgubWF4KCQsayksTj1NYXRoLm1pbihOLFMpLEg9TWF0aC5tYXgoSCxTKTtpZihOPC0xKWZvcih2YXIgdmU9MDt2ZTxNO3ZlKyspUz1tWzIqdmUrMV09bVsyKnZlKzFdKygtMS1OKTtyZXR1cm4gbX0sb0k9ZnVuY3Rpb24obSxrKXt2YXIgUz0xL20qMipNYXRoLlBJLE09bSUyPT09MD9NYXRoLlBJLzIrUy8yOk1hdGguUEkvMjtNKz1rO2Zvcih2YXIgTz1uZXcgQXJyYXkobSoyKSxOLCQ9MDskPG07JCsrKU49JCpTK00sT1syKiRdPU1hdGguY29zKE4pLE9bMiokKzFdPU1hdGguc2luKC1OKTtyZXR1cm4gT30sVzk9ZnVuY3Rpb24obSxrKXtyZXR1cm4gTWF0aC5taW4obS80LGsvNCw4KX0sY0k9ZnVuY3Rpb24obSxrKXtyZXR1cm4gTWF0aC5taW4obS8xMCxrLzEwLDgpfSx2aj1mdW5jdGlvbigpe3JldHVybiA4fSxfWj1mdW5jdGlvbihtLGssUyl7cmV0dXJuW20tMiprK1MsMiooay1tKSxtXX0sdUk9ZnVuY3Rpb24obSxrKXtyZXR1cm57aGVpZ2h0T2Zmc2V0Ok1hdGgubWluKDE1LC4wNSprKSx3aWR0aE9mZnNldDpNYXRoLm1pbigxMDAsLjI1Km0pLGN0cmxQdE9mZnNldFBjdDouMDV9fSxBWj1xMCh7ZGFtcGluZ0ZhY3RvcjouOCxwcmVjaXNpb246MWUtNixpdGVyYXRpb25zOjIwMCx3ZWlnaHQ6ZnVuY3Rpb24obSl7cmV0dXJuIDF9fSksTFo9e3BhZ2VSYW5rOmZ1bmN0aW9uKG0pe2Zvcih2YXIgaz1BWihtKSxTPWsuZGFtcGluZ0ZhY3RvcixNPWsucHJlY2lzaW9uLE89ay5pdGVyYXRpb25zLE49ay53ZWlnaHQsJD10aGlzLl9wcml2YXRlLmN5LEg9dGhpcy5ieUdyb3VwKCkscT1ILm5vZGVzLFk9SC5lZGdlcyxaPXEubGVuZ3RoLGNlPVoqWix2ZT1ZLmxlbmd0aCxtZT1uZXcgQXJyYXkoY2UpLExlPW5ldyBBcnJheShaKSxfZT0oMS1TKS9aLEVlPTA7RWU8WjtFZSsrKXtmb3IodmFyIEJlPTA7QmU8WjtCZSsrKXt2YXIgUmU9RWUqWitCZTttZVtSZV09MH1MZVtFZV09MH1mb3IodmFyIFZlPTA7VmU8dmU7VmUrKyl7dmFyIGN0PVlbVmVdLHN0PWN0LmRhdGEoInNvdXJjZSIpLFllPWN0LmRhdGEoInRhcmdldCIpO2lmKHN0IT09WWUpe3ZhciBtdD1xLmluZGV4T2ZJZChzdCksSmU9cS5pbmRleE9mSWQoWWUpLEx0PU4oY3QpLE10PUplKlorbXQ7bWVbTXRdKz1MdCxMZVttdF0rPUx0fX1mb3IodmFyIHV0PTEvWitfZSxXdD0wO1d0PFo7V3QrKylpZihMZVtXdF09PT0wKWZvcih2YXIgVHQ9MDtUdDxaO1R0Kyspe3ZhciBfbj1UdCpaK1d0O21lW19uXT11dH1lbHNlIGZvcih2YXIgaG49MDtobjxaO2huKyspe3ZhciBZdD1obipaK1d0O21lW1l0XT1tZVtZdF0vTGVbV3RdK19lfWZvcih2YXIgRG49bmV3IEFycmF5KFopLGlyPW5ldyBBcnJheShaKSx2cixObj0wO05uPFo7Tm4rKylEbltObl09MTtmb3IodmFyIHByPTA7cHI8TztwcisrKXtmb3IodmFyIEVyPTA7RXI8WjtFcisrKWlyW0VyXT0wO2Zvcih2YXIgTXI9MDtNcjxaO01yKyspZm9yKHZhciBDcj0wO0NyPFo7Q3IrKyl7dmFyIE9yPU1yKlorQ3I7aXJbTXJdKz1tZVtPcl0qRG5bQ3JdfWhaKGlyKSx2cj1EbixEbj1pcixpcj12cjtmb3IodmFyIFduPTAsYnI9MDticjxaO2JyKyspe3ZhciBTcj12clticl0tRG5bYnJdO1duKz1TcipTcn1pZihXbjxNKWJyZWFrfXZhciBOcj17cmFuazpmdW5jdGlvbih5cyl7cmV0dXJuIHlzPSQuY29sbGVjdGlvbih5cylbMF0sRG5bcS5pbmRleE9mKHlzKV19fTtyZXR1cm4gTnJ9fSx3aj1xMCh7cm9vdDpudWxsLHdlaWdodDpmdW5jdGlvbihtKXtyZXR1cm4gMX0sZGlyZWN0ZWQ6ITEsYWxwaGE6MH0pLHQ4PXtkZWdyZWVDZW50cmFsaXR5Tm9ybWFsaXplZDpmdW5jdGlvbihtKXttPXdqKG0pO3ZhciBrPXRoaXMuY3koKSxTPXRoaXMubm9kZXMoKSxNPVMubGVuZ3RoO2lmKG0uZGlyZWN0ZWQpe2Zvcih2YXIgWT17fSxaPXt9LGNlPTAsdmU9MCxtZT0wO21lPE07bWUrKyl7dmFyIExlPVNbbWVdLF9lPUxlLmlkKCk7bS5yb290PUxlO3ZhciBFZT10aGlzLmRlZ3JlZUNlbnRyYWxpdHkobSk7Y2U8RWUuaW5kZWdyZWUmJihjZT1FZS5pbmRlZ3JlZSksdmU8RWUub3V0ZGVncmVlJiYodmU9RWUub3V0ZGVncmVlKSxZW19lXT1FZS5pbmRlZ3JlZSxaW19lXT1FZS5vdXRkZWdyZWV9cmV0dXJue2luZGVncmVlOmZ1bmN0aW9uKFJlKXtyZXR1cm4gY2U9PTA/MDooYmUoUmUpJiYoUmU9ay5maWx0ZXIoUmUpKSxZW1JlLmlkKCldL2NlKX0sb3V0ZGVncmVlOmZ1bmN0aW9uKFJlKXtyZXR1cm4gdmU9PT0wPzA6KGJlKFJlKSYmKFJlPWsuZmlsdGVyKFJlKSksWltSZS5pZCgpXS92ZSl9fX1lbHNle2Zvcih2YXIgTz17fSxOPTAsJD0wOyQ8TTskKyspe3ZhciBIPVNbJF07bS5yb290PUg7dmFyIHE9dGhpcy5kZWdyZWVDZW50cmFsaXR5KG0pO048cS5kZWdyZWUmJihOPXEuZGVncmVlKSxPW0guaWQoKV09cS5kZWdyZWV9cmV0dXJue2RlZ3JlZTpmdW5jdGlvbihSZSl7cmV0dXJuIE49PT0wPzA6KGJlKFJlKSYmKFJlPWsuZmlsdGVyKFJlKSksT1tSZS5pZCgpXS9OKX19fX0sZGVncmVlQ2VudHJhbGl0eTpmdW5jdGlvbihtKXttPXdqKG0pO3ZhciBrPXRoaXMuY3koKSxTPXRoaXMsTT1tLE89TS5yb290LE49TS53ZWlnaHQsJD1NLmRpcmVjdGVkLEg9TS5hbHBoYTtpZihPPWsuY29sbGVjdGlvbihPKVswXSwkKXtmb3IodmFyIHZlPU8uY29ubmVjdGVkRWRnZXMoKSxtZT12ZS5maWx0ZXIoZnVuY3Rpb24oc3Qpe3JldHVybiBzdC50YXJnZXQoKS5zYW1lKE8pJiZTLmhhcyhzdCl9KSxMZT12ZS5maWx0ZXIoZnVuY3Rpb24oc3Qpe3JldHVybiBzdC5zb3VyY2UoKS5zYW1lKE8pJiZTLmhhcyhzdCl9KSxfZT1tZS5sZW5ndGgsRWU9TGUubGVuZ3RoLEJlPTAsUmU9MCxWZT0wO1ZlPG1lLmxlbmd0aDtWZSsrKUJlKz1OKG1lW1ZlXSk7Zm9yKHZhciBjdD0wO2N0PExlLmxlbmd0aDtjdCsrKVJlKz1OKExlW2N0XSk7cmV0dXJue2luZGVncmVlOk1hdGgucG93KF9lLDEtSCkqTWF0aC5wb3coQmUsSCksb3V0ZGVncmVlOk1hdGgucG93KEVlLDEtSCkqTWF0aC5wb3coUmUsSCl9fWVsc2V7Zm9yKHZhciBxPU8uY29ubmVjdGVkRWRnZXMoKS5pbnRlcnNlY3Rpb24oUyksWT1xLmxlbmd0aCxaPTAsY2U9MDtjZTxxLmxlbmd0aDtjZSsrKVorPU4ocVtjZV0pO3JldHVybntkZWdyZWU6TWF0aC5wb3coWSwxLUgpKk1hdGgucG93KFosSCl9fX19O3Q4LmRjPXQ4LmRlZ3JlZUNlbnRyYWxpdHksdDguZGNuPXQ4LmRlZ3JlZUNlbnRyYWxpdHlOb3JtYWxpc2VkPXQ4LmRlZ3JlZUNlbnRyYWxpdHlOb3JtYWxpemVkO3ZhciB5aj1xMCh7aGFybW9uaWM6ITAsd2VpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIDF9LGRpcmVjdGVkOiExLHJvb3Q6bnVsbH0pLG44PXtjbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXplZDpmdW5jdGlvbihtKXtmb3IodmFyIGs9eWoobSksUz1rLmhhcm1vbmljLE09ay53ZWlnaHQsTz1rLmRpcmVjdGVkLE49dGhpcy5jeSgpLCQ9e30sSD0wLHE9dGhpcy5ub2RlcygpLFk9dGhpcy5mbG95ZFdhcnNoYWxsKHt3ZWlnaHQ6TSxkaXJlY3RlZDpPfSksWj0wO1o8cS5sZW5ndGg7WisrKXtmb3IodmFyIGNlPTAsdmU9cVtaXSxtZT0wO21lPHEubGVuZ3RoO21lKyspaWYoWiE9PW1lKXt2YXIgTGU9WS5kaXN0YW5jZSh2ZSxxW21lXSk7Uz9jZSs9MS9MZTpjZSs9TGV9U3x8KGNlPTEvY2UpLEg8Y2UmJihIPWNlKSwkW3ZlLmlkKCldPWNlfXJldHVybntjbG9zZW5lc3M6ZnVuY3Rpb24oRWUpe3JldHVybiBIPT0wPzA6KGJlKEVlKT9FZT1OLmZpbHRlcihFZSlbMF0uaWQoKTpFZT1FZS5pZCgpLCRbRWVdL0gpfX19LGNsb3NlbmVzc0NlbnRyYWxpdHk6ZnVuY3Rpb24obSl7dmFyIGs9eWoobSksUz1rLnJvb3QsTT1rLndlaWdodCxPPWsuZGlyZWN0ZWQsTj1rLmhhcm1vbmljO1M9dGhpcy5maWx0ZXIoUylbMF07Zm9yKHZhciAkPXRoaXMuZGlqa3N0cmEoe3Jvb3Q6Uyx3ZWlnaHQ6TSxkaXJlY3RlZDpPfSksSD0wLHE9dGhpcy5ub2RlcygpLFk9MDtZPHEubGVuZ3RoO1krKyl7dmFyIFo9cVtZXTtpZighWi5zYW1lKFMpKXt2YXIgY2U9JC5kaXN0YW5jZVRvKFopO04/SCs9MS9jZTpIKz1jZX19cmV0dXJuIE4/SDoxL0h9fTtuOC5jYz1uOC5jbG9zZW5lc3NDZW50cmFsaXR5LG44LmNjbj1uOC5jbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXNlZD1uOC5jbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXplZDt2YXIgTVo9cTAoe3dlaWdodDpudWxsLGRpcmVjdGVkOiExfSksbEk9e2JldHdlZW5uZXNzQ2VudHJhbGl0eTpmdW5jdGlvbihtKXtmb3IodmFyIGs9TVoobSksUz1rLmRpcmVjdGVkLE09ay53ZWlnaHQsTz1NIT1udWxsLE49dGhpcy5jeSgpLCQ9dGhpcy5ub2RlcygpLEg9e30scT17fSxZPTAsWj17c2V0OmZ1bmN0aW9uKFJlLFZlKXtxW1JlXT1WZSxWZT5ZJiYoWT1WZSl9LGdldDpmdW5jdGlvbihSZSl7cmV0dXJuIHFbUmVdfX0sY2U9MDtjZTwkLmxlbmd0aDtjZSsrKXt2YXIgdmU9JFtjZV0sbWU9dmUuaWQoKTtTP0hbbWVdPXZlLm91dGdvZXJzKCkubm9kZXMoKTpIW21lXT12ZS5vcGVuTmVpZ2hib3Job29kKCkubm9kZXMoKSxaLnNldChtZSwwKX1mb3IodmFyIExlPWZ1bmN0aW9uKFJlKXtmb3IodmFyIFZlPSRbUmVdLmlkKCksY3Q9W10sc3Q9e30sWWU9e30sbXQ9e30sSmU9bmV3IFY5KGZ1bmN0aW9uKENyLE9yKXtyZXR1cm4gbXRbQ3JdLW10W09yXX0pLEx0PTA7THQ8JC5sZW5ndGg7THQrKyl7dmFyIE10PSRbTHRdLmlkKCk7c3RbTXRdPVtdLFllW010XT0wLG10W010XT0xLzB9Zm9yKFllW1ZlXT0xLG10W1ZlXT0wLEplLnB1c2goVmUpOyFKZS5lbXB0eSgpOyl7dmFyIHV0PUplLnBvcCgpO2lmKGN0LnB1c2godXQpLE8pZm9yKHZhciBXdD0wO1d0PEhbdXRdLmxlbmd0aDtXdCsrKXt2YXIgVHQ9SFt1dF1bV3RdLF9uPU4uZ2V0RWxlbWVudEJ5SWQodXQpLGhuPXZvaWQgMDtfbi5lZGdlc1RvKFR0KS5sZW5ndGg+MD9obj1fbi5lZGdlc1RvKFR0KVswXTpobj1UdC5lZGdlc1RvKF9uKVswXTt2YXIgWXQ9TShobik7VHQ9VHQuaWQoKSxtdFtUdF0+bXRbdXRdK1l0JiYobXRbVHRdPW10W3V0XStZdCxKZS5ub2Rlcy5pbmRleE9mKFR0KTwwP0plLnB1c2goVHQpOkplLnVwZGF0ZUl0ZW0oVHQpLFllW1R0XT0wLHN0W1R0XT1bXSksbXRbVHRdPT1tdFt1dF0rWXQmJihZZVtUdF09WWVbVHRdK1llW3V0XSxzdFtUdF0ucHVzaCh1dCkpfWVsc2UgZm9yKHZhciBEbj0wO0RuPEhbdXRdLmxlbmd0aDtEbisrKXt2YXIgaXI9SFt1dF1bRG5dLmlkKCk7bXRbaXJdPT0xLzAmJihKZS5wdXNoKGlyKSxtdFtpcl09bXRbdXRdKzEpLG10W2lyXT09bXRbdXRdKzEmJihZZVtpcl09WWVbaXJdK1llW3V0XSxzdFtpcl0ucHVzaCh1dCkpfX1mb3IodmFyIHZyPXt9LE5uPTA7Tm48JC5sZW5ndGg7Tm4rKyl2clskW05uXS5pZCgpXT0wO2Zvcig7Y3QubGVuZ3RoPjA7KXtmb3IodmFyIHByPWN0LnBvcCgpLEVyPTA7RXI8c3RbcHJdLmxlbmd0aDtFcisrKXt2YXIgTXI9c3RbcHJdW0VyXTt2cltNcl09dnJbTXJdK1llW01yXS9ZZVtwcl0qKDErdnJbcHJdKX1wciE9JFtSZV0uaWQoKSYmWi5zZXQocHIsWi5nZXQocHIpK3ZyW3ByXSl9fSxfZT0wO19lPCQubGVuZ3RoO19lKyspTGUoX2UpO3ZhciBFZT17YmV0d2Vlbm5lc3M6ZnVuY3Rpb24oUmUpe3ZhciBWZT1OLmNvbGxlY3Rpb24oUmUpLmlkKCk7cmV0dXJuIFouZ2V0KFZlKX0sYmV0d2Vlbm5lc3NOb3JtYWxpemVkOmZ1bmN0aW9uKFJlKXtpZihZPT0wKXJldHVybiAwO3ZhciBWZT1OLmNvbGxlY3Rpb24oUmUpLmlkKCk7cmV0dXJuIFouZ2V0KFZlKS9ZfX07cmV0dXJuIEVlLmJldHdlZW5uZXNzTm9ybWFsaXNlZD1FZS5iZXR3ZWVubmVzc05vcm1hbGl6ZWQsRWV9fTtsSS5iYz1sSS5iZXR3ZWVubmVzc0NlbnRyYWxpdHk7dmFyIERaPXEwKHtleHBhbmRGYWN0b3I6MixpbmZsYXRlRmFjdG9yOjIsbXVsdEZhY3RvcjoxLG1heEl0ZXJhdGlvbnM6MjAsYXR0cmlidXRlczpbZnVuY3Rpb24oeCl7cmV0dXJuIDF9XX0pLElaPWZ1bmN0aW9uKG0pe3JldHVybiBEWihtKX0sT1o9ZnVuY3Rpb24obSxrKXtmb3IodmFyIFM9MCxNPTA7TTxrLmxlbmd0aDtNKyspUys9a1tNXShtKTtyZXR1cm4gU30sTlo9ZnVuY3Rpb24obSxrLFMpe2Zvcih2YXIgTT0wO008aztNKyspbVtNKmsrTV09U30seGo9ZnVuY3Rpb24obSxrKXtmb3IodmFyIFMsTT0wO008aztNKyspe1M9MDtmb3IodmFyIE89MDtPPGs7TysrKVMrPW1bTyprK01dO2Zvcih2YXIgTj0wO048aztOKyspbVtOKmsrTV09bVtOKmsrTV0vU319LFBaPWZ1bmN0aW9uKG0sayxTKXtmb3IodmFyIE09bmV3IEFycmF5KFMqUyksTz0wO088UztPKyspe2Zvcih2YXIgTj0wO048UztOKyspTVtPKlMrTl09MDtmb3IodmFyICQ9MDskPFM7JCsrKWZvcih2YXIgSD0wO0g8UztIKyspTVtPKlMrSF0rPW1bTypTKyRdKmtbJCpTK0hdfXJldHVybiBNfSxCWj1mdW5jdGlvbihtLGssUyl7Zm9yKHZhciBNPW0uc2xpY2UoMCksTz0xO088UztPKyspbT1QWihtLE0sayk7cmV0dXJuIG19LGtqPWZ1bmN0aW9uKG0sayxTKXtmb3IodmFyIE09bmV3IEFycmF5KGsqayksTz0wO088ayprO08rKylNW09dPU1hdGgucG93KG1bT10sUyk7cmV0dXJuIHhqKE0sayksTX0sRlo9ZnVuY3Rpb24obSxrLFMsTSl7Zm9yKHZhciBPPTA7TzxTO08rKyl7dmFyIE49TWF0aC5yb3VuZChtW09dKk1hdGgucG93KDEwLE0pKS9NYXRoLnBvdygxMCxNKSwkPU1hdGgucm91bmQoa1tPXSpNYXRoLnBvdygxMCxNKSkvTWF0aC5wb3coMTAsTSk7aWYoTiE9PSQpcmV0dXJuITF9cmV0dXJuITB9LFJaPWZ1bmN0aW9uKG0sayxTLE0pe2Zvcih2YXIgTz1bXSxOPTA7TjxrO04rKyl7Zm9yKHZhciAkPVtdLEg9MDtIPGs7SCsrKU1hdGgucm91bmQobVtOKmsrSF0qMWUzKS8xZTM+MCYmJC5wdXNoKFNbSF0pOyQubGVuZ3RoIT09MCYmTy5wdXNoKE0uY29sbGVjdGlvbigkKSl9cmV0dXJuIE99LGpaPWZ1bmN0aW9uKG0sayl7Zm9yKHZhciBTPTA7UzxtLmxlbmd0aDtTKyspaWYoIWtbU118fG1bU10uaWQoKSE9PWtbU10uaWQoKSlyZXR1cm4hMTtyZXR1cm4hMH0sJFo9ZnVuY3Rpb24obSl7Zm9yKHZhciBrPTA7azxtLmxlbmd0aDtrKyspZm9yKHZhciBTPTA7UzxtLmxlbmd0aDtTKyspayE9UyYmaloobVtrXSxtW1NdKSYmbS5zcGxpY2UoUywxKTtyZXR1cm4gbX0sRWo9ZnVuY3Rpb24obSl7Zm9yKHZhciBrPXRoaXMubm9kZXMoKSxTPXRoaXMuZWRnZXMoKSxNPXRoaXMuY3koKSxPPUlaKG0pLE49e30sJD0wOyQ8ay5sZW5ndGg7JCsrKU5ba1skXS5pZCgpXT0kO2Zvcih2YXIgSD1rLmxlbmd0aCxxPUgqSCxZPW5ldyBBcnJheShxKSxaLGNlPTA7Y2U8cTtjZSsrKVlbY2VdPTA7Zm9yKHZhciB2ZT0wO3ZlPFMubGVuZ3RoO3ZlKyspe3ZhciBtZT1TW3ZlXSxMZT1OW21lLnNvdXJjZSgpLmlkKCldLF9lPU5bbWUudGFyZ2V0KCkuaWQoKV0sRWU9T1oobWUsTy5hdHRyaWJ1dGVzKTtZW0xlKkgrX2VdKz1FZSxZW19lKkgrTGVdKz1FZX1OWihZLEgsTy5tdWx0RmFjdG9yKSx4aihZLEgpO2Zvcih2YXIgQmU9ITAsUmU9MDtCZSYmUmU8Ty5tYXhJdGVyYXRpb25zOylCZT0hMSxaPUJaKFksSCxPLmV4cGFuZEZhY3RvciksWT1raihaLEgsTy5pbmZsYXRlRmFjdG9yKSxGWihZLFoscSw0KXx8KEJlPSEwKSxSZSsrO3ZhciBWZT1SWihZLEgsayxNKTtyZXR1cm4gVmU9JFooVmUpLFZlfSx6Wj17bWFya292Q2x1c3RlcmluZzpFaixtY2w6RWp9LHFaPWZ1bmN0aW9uKG0pe3JldHVybiBtfSxUaj1mdW5jdGlvbihtLGspe3JldHVybiBNYXRoLmFicyhrLW0pfSxDaj1mdW5jdGlvbihtLGssUyl7cmV0dXJuIG0rVGooayxTKX0sU2o9ZnVuY3Rpb24obSxrLFMpe3JldHVybiBtK01hdGgucG93KFMtaywyKX0sSFo9ZnVuY3Rpb24obSl7cmV0dXJuIE1hdGguc3FydChtKX0sVlo9ZnVuY3Rpb24obSxrLFMpe3JldHVybiBNYXRoLm1heChtLFRqKGssUykpfSxZOT1mdW5jdGlvbihtLGssUyxNLE8pe2Zvcih2YXIgTj1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06cVosJD1NLEgscSxZPTA7WTxtO1krKylIPWsoWSkscT1TKFkpLCQ9TygkLEgscSk7cmV0dXJuIE4oJCl9LHI4PXtldWNsaWRlYW46ZnVuY3Rpb24obSxrLFMpe3JldHVybiBtPj0yP1k5KG0sayxTLDAsU2osSFopOlk5KG0sayxTLDAsQ2opfSxzcXVhcmVkRXVjbGlkZWFuOmZ1bmN0aW9uKG0sayxTKXtyZXR1cm4gWTkobSxrLFMsMCxTail9LG1hbmhhdHRhbjpmdW5jdGlvbihtLGssUyl7cmV0dXJuIFk5KG0sayxTLDAsQ2opfSxtYXg6ZnVuY3Rpb24obSxrLFMpe3JldHVybiBZOShtLGssUywtMS8wLFZaKX19O3I4WyJzcXVhcmVkLWV1Y2xpZGVhbiJdPXI4LnNxdWFyZWRFdWNsaWRlYW4scjguc3F1YXJlZGV1Y2xpZGVhbj1yOC5zcXVhcmVkRXVjbGlkZWFuO2Z1bmN0aW9uIG1TKHgsbSxrLFMsTSxPKXt2YXIgTjtyZXR1cm4gYWUoeCk/Tj14Ok49cjhbeF18fHI4LmV1Y2xpZGVhbixtPT09MCYmYWUoeCk/TihNLE8pOk4obSxrLFMsTSxPKX12YXIgVVo9cTAoe2s6MixtOjIsc2Vuc2l0aXZpdHlUaHJlc2hvbGQ6MWUtNCxkaXN0YW5jZToiZXVjbGlkZWFuIixtYXhJdGVyYXRpb25zOjEwLGF0dHJpYnV0ZXM6W10sdGVzdE1vZGU6ITEsdGVzdENlbnRyb2lkczpudWxsfSksaEk9ZnVuY3Rpb24obSl7cmV0dXJuIFVaKG0pfSx2Uz1mdW5jdGlvbihtLGssUyxNLE8pe3ZhciBOPU8hPT0ia01lZG9pZHMiLCQ9Tj9mdW5jdGlvbihaKXtyZXR1cm4gU1taXX06ZnVuY3Rpb24oWil7cmV0dXJuIE1bWl0oUyl9LEg9ZnVuY3Rpb24oY2Upe3JldHVybiBNW2NlXShrKX0scT1TLFk9aztyZXR1cm4gbVMobSxNLmxlbmd0aCwkLEgscSxZKX0sZkk9ZnVuY3Rpb24obSxrLFMpe2Zvcih2YXIgTT1TLmxlbmd0aCxPPW5ldyBBcnJheShNKSxOPW5ldyBBcnJheShNKSwkPW5ldyBBcnJheShrKSxIPW51bGwscT0wO3E8TTtxKyspT1txXT1tLm1pbihTW3FdKS52YWx1ZSxOW3FdPW0ubWF4KFNbcV0pLnZhbHVlO2Zvcih2YXIgWT0wO1k8aztZKyspe0g9W107Zm9yKHZhciBaPTA7WjxNO1orKylIW1pdPU1hdGgucmFuZG9tKCkqKE5bWl0tT1taXSkrT1taXTskW1ldPUh9cmV0dXJuICR9LF9qPWZ1bmN0aW9uKG0sayxTLE0sTyl7Zm9yKHZhciBOPTEvMCwkPTAsSD0wO0g8ay5sZW5ndGg7SCsrKXt2YXIgcT12UyhTLG0sa1tIXSxNLE8pO3E8TiYmKE49cSwkPUgpfXJldHVybiAkfSxBaj1mdW5jdGlvbihtLGssUyl7Zm9yKHZhciBNPVtdLE89bnVsbCxOPTA7TjxrLmxlbmd0aDtOKyspTz1rW05dLFNbTy5pZCgpXT09PW0mJk0ucHVzaChPKTtyZXR1cm4gTX0sR1o9ZnVuY3Rpb24obSxrLFMpe3JldHVybiBNYXRoLmFicyhrLW0pPD1TfSxLWj1mdW5jdGlvbihtLGssUyl7Zm9yKHZhciBNPTA7TTxtLmxlbmd0aDtNKyspZm9yKHZhciBPPTA7TzxtW01dLmxlbmd0aDtPKyspe3ZhciBOPU1hdGguYWJzKG1bTV1bT10ta1tNXVtPXSk7aWYoTj5TKXJldHVybiExfXJldHVybiEwfSxXWj1mdW5jdGlvbihtLGssUyl7Zm9yKHZhciBNPTA7TTxTO00rKylpZihtPT09a1tNXSlyZXR1cm4hMDtyZXR1cm4hMX0sTGo9ZnVuY3Rpb24obSxrKXt2YXIgUz1uZXcgQXJyYXkoayk7aWYobS5sZW5ndGg8NTApZm9yKHZhciBNPTA7TTxrO00rKyl7Zm9yKHZhciBPPW1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm0ubGVuZ3RoKV07V1ooTyxTLE0pOylPPW1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm0ubGVuZ3RoKV07U1tNXT1PfWVsc2UgZm9yKHZhciBOPTA7TjxrO04rKylTW05dPW1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm0ubGVuZ3RoKV07cmV0dXJuIFN9LE1qPWZ1bmN0aW9uKG0sayxTKXtmb3IodmFyIE09MCxPPTA7TzxrLmxlbmd0aDtPKyspTSs9dlMoIm1hbmhhdHRhbiIsa1tPXSxtLFMsImtNZWRvaWRzIik7cmV0dXJuIE19LFlaPWZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuY3koKSxTPXRoaXMubm9kZXMoKSxNPW51bGwsTz1oSShtKSxOPW5ldyBBcnJheShPLmspLCQ9e30sSDtPLnRlc3RNb2RlP3R5cGVvZiBPLnRlc3RDZW50cm9pZHM9PSJudW1iZXIiPyhPLnRlc3RDZW50cm9pZHMsSD1mSShTLE8uayxPLmF0dHJpYnV0ZXMpKTp1KE8udGVzdENlbnRyb2lkcyk9PT0ib2JqZWN0Ij9IPU8udGVzdENlbnRyb2lkczpIPWZJKFMsTy5rLE8uYXR0cmlidXRlcyk6SD1mSShTLE8uayxPLmF0dHJpYnV0ZXMpO2Zvcih2YXIgcT0hMCxZPTA7cSYmWTxPLm1heEl0ZXJhdGlvbnM7KXtmb3IodmFyIFo9MDtaPFMubGVuZ3RoO1orKylNPVNbWl0sJFtNLmlkKCldPV9qKE0sSCxPLmRpc3RhbmNlLE8uYXR0cmlidXRlcywia01lYW5zIik7cT0hMTtmb3IodmFyIGNlPTA7Y2U8Ty5rO2NlKyspe3ZhciB2ZT1BaihjZSxTLCQpO2lmKHZlLmxlbmd0aCE9PTApe2Zvcih2YXIgbWU9Ty5hdHRyaWJ1dGVzLmxlbmd0aCxMZT1IW2NlXSxfZT1uZXcgQXJyYXkobWUpLEVlPW5ldyBBcnJheShtZSksQmU9MDtCZTxtZTtCZSsrKXtFZVtCZV09MDtmb3IodmFyIFJlPTA7UmU8dmUubGVuZ3RoO1JlKyspTT12ZVtSZV0sRWVbQmVdKz1PLmF0dHJpYnV0ZXNbQmVdKE0pO19lW0JlXT1FZVtCZV0vdmUubGVuZ3RoLEdaKF9lW0JlXSxMZVtCZV0sTy5zZW5zaXRpdml0eVRocmVzaG9sZCl8fChxPSEwKX1IW2NlXT1fZSxOW2NlXT1rLmNvbGxlY3Rpb24odmUpfX1ZKyt9cmV0dXJuIE59LFhaPWZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuY3koKSxTPXRoaXMubm9kZXMoKSxNPW51bGwsTz1oSShtKSxOPW5ldyBBcnJheShPLmspLCQsSD17fSxxLFk9bmV3IEFycmF5KE8uayk7Ty50ZXN0TW9kZT90eXBlb2YgTy50ZXN0Q2VudHJvaWRzPT0ibnVtYmVyInx8KHUoTy50ZXN0Q2VudHJvaWRzKT09PSJvYmplY3QiPyQ9Ty50ZXN0Q2VudHJvaWRzOiQ9TGooUyxPLmspKTokPUxqKFMsTy5rKTtmb3IodmFyIFo9ITAsY2U9MDtaJiZjZTxPLm1heEl0ZXJhdGlvbnM7KXtmb3IodmFyIHZlPTA7dmU8Uy5sZW5ndGg7dmUrKylNPVNbdmVdLEhbTS5pZCgpXT1faihNLCQsTy5kaXN0YW5jZSxPLmF0dHJpYnV0ZXMsImtNZWRvaWRzIik7Wj0hMTtmb3IodmFyIG1lPTA7bWU8JC5sZW5ndGg7bWUrKyl7dmFyIExlPUFqKG1lLFMsSCk7aWYoTGUubGVuZ3RoIT09MCl7WVttZV09TWooJFttZV0sTGUsTy5hdHRyaWJ1dGVzKTtmb3IodmFyIF9lPTA7X2U8TGUubGVuZ3RoO19lKyspcT1NaihMZVtfZV0sTGUsTy5hdHRyaWJ1dGVzKSxxPFlbbWVdJiYoWVttZV09cSwkW21lXT1MZVtfZV0sWj0hMCk7TlttZV09ay5jb2xsZWN0aW9uKExlKX19Y2UrK31yZXR1cm4gTn0sUVo9ZnVuY3Rpb24obSxrLFMsTSxPKXtmb3IodmFyIE4sJCxIPTA7SDxrLmxlbmd0aDtIKyspZm9yKHZhciBxPTA7cTxtLmxlbmd0aDtxKyspTVtIXVtxXT1NYXRoLnBvdyhTW0hdW3FdLE8ubSk7Zm9yKHZhciBZPTA7WTxtLmxlbmd0aDtZKyspZm9yKHZhciBaPTA7WjxPLmF0dHJpYnV0ZXMubGVuZ3RoO1orKyl7Tj0wLCQ9MDtmb3IodmFyIGNlPTA7Y2U8ay5sZW5ndGg7Y2UrKylOKz1NW2NlXVtZXSpPLmF0dHJpYnV0ZXNbWl0oa1tjZV0pLCQrPU1bY2VdW1ldO21bWV1bWl09Ti8kfX0sSlo9ZnVuY3Rpb24obSxrLFMsTSxPKXtmb3IodmFyIE49MDtOPG0ubGVuZ3RoO04rKylrW05dPW1bTl0uc2xpY2UoKTtmb3IodmFyICQsSCxxLFk9Mi8oTy5tLTEpLFo9MDtaPFMubGVuZ3RoO1orKylmb3IodmFyIGNlPTA7Y2U8TS5sZW5ndGg7Y2UrKyl7JD0wO2Zvcih2YXIgdmU9MDt2ZTxTLmxlbmd0aDt2ZSsrKUg9dlMoTy5kaXN0YW5jZSxNW2NlXSxTW1pdLE8uYXR0cmlidXRlcywiY21lYW5zIikscT12UyhPLmRpc3RhbmNlLE1bY2VdLFNbdmVdLE8uYXR0cmlidXRlcywiY21lYW5zIiksJCs9TWF0aC5wb3coSC9xLFkpO21bY2VdW1pdPTEvJH19LFpaPWZ1bmN0aW9uKG0sayxTLE0pe2Zvcih2YXIgTz1uZXcgQXJyYXkoUy5rKSxOPTA7TjxPLmxlbmd0aDtOKyspT1tOXT1bXTtmb3IodmFyICQsSCxxPTA7cTxrLmxlbmd0aDtxKyspeyQ9LTEvMCxIPS0xO2Zvcih2YXIgWT0wO1k8a1swXS5sZW5ndGg7WSsrKWtbcV1bWV0+JCYmKCQ9a1txXVtZXSxIPVkpO09bSF0ucHVzaChtW3FdKX1mb3IodmFyIFo9MDtaPE8ubGVuZ3RoO1orKylPW1pdPU0uY29sbGVjdGlvbihPW1pdKTtyZXR1cm4gT30sRGo9ZnVuY3Rpb24obSl7dmFyIGs9dGhpcy5jeSgpLFM9dGhpcy5ub2RlcygpLE09aEkobSksTyxOLCQsSCxxO0g9bmV3IEFycmF5KFMubGVuZ3RoKTtmb3IodmFyIFk9MDtZPFMubGVuZ3RoO1krKylIW1ldPW5ldyBBcnJheShNLmspOyQ9bmV3IEFycmF5KFMubGVuZ3RoKTtmb3IodmFyIFo9MDtaPFMubGVuZ3RoO1orKykkW1pdPW5ldyBBcnJheShNLmspO2Zvcih2YXIgY2U9MDtjZTxTLmxlbmd0aDtjZSsrKXtmb3IodmFyIHZlPTAsbWU9MDttZTxNLms7bWUrKykkW2NlXVttZV09TWF0aC5yYW5kb20oKSx2ZSs9JFtjZV1bbWVdO2Zvcih2YXIgTGU9MDtMZTxNLms7TGUrKykkW2NlXVtMZV09JFtjZV1bTGVdL3ZlfU49bmV3IEFycmF5KE0uayk7Zm9yKHZhciBfZT0wO19lPE0uaztfZSsrKU5bX2VdPW5ldyBBcnJheShNLmF0dHJpYnV0ZXMubGVuZ3RoKTtxPW5ldyBBcnJheShTLmxlbmd0aCk7Zm9yKHZhciBFZT0wO0VlPFMubGVuZ3RoO0VlKyspcVtFZV09bmV3IEFycmF5KE0uayk7Zm9yKHZhciBCZT0hMCxSZT0wO0JlJiZSZTxNLm1heEl0ZXJhdGlvbnM7KUJlPSExLFFaKE4sUywkLHEsTSksSlooJCxILE4sUyxNKSxLWigkLEgsTS5zZW5zaXRpdml0eVRocmVzaG9sZCl8fChCZT0hMCksUmUrKztyZXR1cm4gTz1aWihTLCQsTSxrKSx7Y2x1c3RlcnM6TyxkZWdyZWVPZk1lbWJlcnNoaXA6JH19LGVlZT17a01lYW5zOllaLGtNZWRvaWRzOlhaLGZ1enp5Q01lYW5zOkRqLGZjbTpEan0sdGVlPXEwKHtkaXN0YW5jZToiZXVjbGlkZWFuIixsaW5rYWdlOiJtaW4iLG1vZGU6InRocmVzaG9sZCIsdGhyZXNob2xkOjEvMCxhZGREZW5kcm9ncmFtOiExLGRlbmRyb2dyYW1EZXB0aDowLGF0dHJpYnV0ZXM6W119KSxuZWU9e3NpbmdsZToibWluIixjb21wbGV0ZToibWF4In0scmVlPWZ1bmN0aW9uKG0pe3ZhciBrPXRlZShtKSxTPW5lZVtrLmxpbmthZ2VdO3JldHVybiBTIT1udWxsJiYoay5saW5rYWdlPVMpLGt9LElqPWZ1bmN0aW9uKG0sayxTLE0sTyl7Zm9yKHZhciBOPTAsJD0xLzAsSCxxPU8uYXR0cmlidXRlcyxZPWZ1bmN0aW9uKEplLEx0KXtyZXR1cm4gbVMoTy5kaXN0YW5jZSxxLmxlbmd0aCxmdW5jdGlvbihNdCl7cmV0dXJuIHFbTXRdKEplKX0sZnVuY3Rpb24oTXQpe3JldHVybiBxW010XShMdCl9LEplLEx0KX0sWj0wO1o8bS5sZW5ndGg7WisrKXt2YXIgY2U9bVtaXS5rZXksdmU9U1tjZV1bTVtjZV1dO3ZlPCQmJihOPWNlLCQ9dmUpfWlmKE8ubW9kZT09PSJ0aHJlc2hvbGQiJiYkPj1PLnRocmVzaG9sZHx8Ty5tb2RlPT09ImRlbmRyb2dyYW0iJiZtLmxlbmd0aD09PTEpcmV0dXJuITE7dmFyIG1lPWtbTl0sTGU9a1tNW05dXSxfZTtPLm1vZGU9PT0iZGVuZHJvZ3JhbSI/X2U9e2xlZnQ6bWUscmlnaHQ6TGUsa2V5Om1lLmtleX06X2U9e3ZhbHVlOm1lLnZhbHVlLmNvbmNhdChMZS52YWx1ZSksa2V5Om1lLmtleX0sbVttZS5pbmRleF09X2UsbS5zcGxpY2UoTGUuaW5kZXgsMSksa1ttZS5rZXldPV9lO2Zvcih2YXIgRWU9MDtFZTxtLmxlbmd0aDtFZSsrKXt2YXIgQmU9bVtFZV07bWUua2V5PT09QmUua2V5P0g9MS8wOk8ubGlua2FnZT09PSJtaW4iPyhIPVNbbWUua2V5XVtCZS5rZXldLFNbbWUua2V5XVtCZS5rZXldPlNbTGUua2V5XVtCZS5rZXldJiYoSD1TW0xlLmtleV1bQmUua2V5XSkpOk8ubGlua2FnZT09PSJtYXgiPyhIPVNbbWUua2V5XVtCZS5rZXldLFNbbWUua2V5XVtCZS5rZXldPFNbTGUua2V5XVtCZS5rZXldJiYoSD1TW0xlLmtleV1bQmUua2V5XSkpOk8ubGlua2FnZT09PSJtZWFuIj9IPShTW21lLmtleV1bQmUua2V5XSptZS5zaXplK1NbTGUua2V5XVtCZS5rZXldKkxlLnNpemUpLyhtZS5zaXplK0xlLnNpemUpOk8ubW9kZT09PSJkZW5kcm9ncmFtIj9IPVkoQmUudmFsdWUsbWUudmFsdWUpOkg9WShCZS52YWx1ZVswXSxtZS52YWx1ZVswXSksU1ttZS5rZXldW0JlLmtleV09U1tCZS5rZXldW21lLmtleV09SH1mb3IodmFyIFJlPTA7UmU8bS5sZW5ndGg7UmUrKyl7dmFyIFZlPW1bUmVdLmtleTtpZihNW1ZlXT09PW1lLmtleXx8TVtWZV09PT1MZS5rZXkpe2Zvcih2YXIgY3Q9VmUsc3Q9MDtzdDxtLmxlbmd0aDtzdCsrKXt2YXIgWWU9bVtzdF0ua2V5O1NbVmVdW1llXTxTW1ZlXVtjdF0mJihjdD1ZZSl9TVtWZV09Y3R9bVtSZV0uaW5kZXg9UmV9cmV0dXJuIG1lLmtleT1MZS5rZXk9bWUuaW5kZXg9TGUuaW5kZXg9bnVsbCwhMH0sd1M9ZnVuY3Rpb24geChtLGssUyl7bSYmKG0udmFsdWU/ay5wdXNoKG0udmFsdWUpOihtLmxlZnQmJngobS5sZWZ0LGspLG0ucmlnaHQmJngobS5yaWdodCxrKSkpfSxpZWU9ZnVuY3Rpb24geChtLGspe2lmKCFtKXJldHVybiIiO2lmKG0ubGVmdCYmbS5yaWdodCl7dmFyIFM9eChtLmxlZnQsayksTT14KG0ucmlnaHQsayksTz1rLmFkZCh7Z3JvdXA6Im5vZGVzIixkYXRhOntpZDpTKyIsIitNfX0pO3JldHVybiBrLmFkZCh7Z3JvdXA6ImVkZ2VzIixkYXRhOntzb3VyY2U6Uyx0YXJnZXQ6Ty5pZCgpfX0pLGsuYWRkKHtncm91cDoiZWRnZXMiLGRhdGE6e3NvdXJjZTpNLHRhcmdldDpPLmlkKCl9fSksTy5pZCgpfWVsc2UgaWYobS52YWx1ZSlyZXR1cm4gbS52YWx1ZS5pZCgpfSxzZWU9ZnVuY3Rpb24geChtLGssUyl7aWYoIW0pcmV0dXJuW107dmFyIE09W10sTz1bXSxOPVtdO3JldHVybiBrPT09MD8obS5sZWZ0JiZ3UyhtLmxlZnQsTSksbS5yaWdodCYmd1MobS5yaWdodCxPKSxOPU0uY29uY2F0KE8pLFtTLmNvbGxlY3Rpb24oTildKTprPT09MT9tLnZhbHVlP1tTLmNvbGxlY3Rpb24obS52YWx1ZSldOihtLmxlZnQmJndTKG0ubGVmdCxNKSxtLnJpZ2h0JiZ3UyhtLnJpZ2h0LE8pLFtTLmNvbGxlY3Rpb24oTSksUy5jb2xsZWN0aW9uKE8pXSk6bS52YWx1ZT9bUy5jb2xsZWN0aW9uKG0udmFsdWUpXToobS5sZWZ0JiYoTT14KG0ubGVmdCxrLTEsUykpLG0ucmlnaHQmJihPPXgobS5yaWdodCxrLTEsUykpLE0uY29uY2F0KE8pKX0sT2o9ZnVuY3Rpb24obSl7Zm9yKHZhciBrPXRoaXMuY3koKSxTPXRoaXMubm9kZXMoKSxNPXJlZShtKSxPPU0uYXR0cmlidXRlcyxOPWZ1bmN0aW9uKFJlLFZlKXtyZXR1cm4gbVMoTS5kaXN0YW5jZSxPLmxlbmd0aCxmdW5jdGlvbihjdCl7cmV0dXJuIE9bY3RdKFJlKX0sZnVuY3Rpb24oY3Qpe3JldHVybiBPW2N0XShWZSl9LFJlLFZlKX0sJD1bXSxIPVtdLHE9W10sWT1bXSxaPTA7WjxTLmxlbmd0aDtaKyspe3ZhciBjZT17dmFsdWU6TS5tb2RlPT09ImRlbmRyb2dyYW0iP1NbWl06W1NbWl1dLGtleTpaLGluZGV4Olp9OyRbWl09Y2UsWVtaXT1jZSxIW1pdPVtdLHFbWl09MH1mb3IodmFyIHZlPTA7dmU8JC5sZW5ndGg7dmUrKylmb3IodmFyIG1lPTA7bWU8PXZlO21lKyspe3ZhciBMZT12b2lkIDA7TS5tb2RlPT09ImRlbmRyb2dyYW0iP0xlPXZlPT09bWU/MS8wOk4oJFt2ZV0udmFsdWUsJFttZV0udmFsdWUpOkxlPXZlPT09bWU/MS8wOk4oJFt2ZV0udmFsdWVbMF0sJFttZV0udmFsdWVbMF0pLEhbdmVdW21lXT1MZSxIW21lXVt2ZV09TGUsTGU8SFt2ZV1bcVt2ZV1dJiYocVt2ZV09bWUpfWZvcih2YXIgX2U9SWooJCxZLEgscSxNKTtfZTspX2U9SWooJCxZLEgscSxNKTt2YXIgRWU7cmV0dXJuIE0ubW9kZT09PSJkZW5kcm9ncmFtIj8oRWU9c2VlKCRbMF0sTS5kZW5kcm9ncmFtRGVwdGgsayksTS5hZGREZW5kcm9ncmFtJiZpZWUoJFswXSxrKSk6KEVlPW5ldyBBcnJheSgkLmxlbmd0aCksJC5mb3JFYWNoKGZ1bmN0aW9uKEJlLFJlKXtCZS5rZXk9QmUuaW5kZXg9bnVsbCxFZVtSZV09ay5jb2xsZWN0aW9uKEJlLnZhbHVlKX0pKSxFZX0sYWVlPXtoaWVyYXJjaGljYWxDbHVzdGVyaW5nOk9qLGhjYTpPan0sb2VlPXEwKHtkaXN0YW5jZToiZXVjbGlkZWFuIixwcmVmZXJlbmNlOiJtZWRpYW4iLGRhbXBpbmc6LjgsbWF4SXRlcmF0aW9uczoxZTMsbWluSXRlcmF0aW9uczoxMDAsYXR0cmlidXRlczpbXX0pLGNlZT1mdW5jdGlvbihtKXt2YXIgaz1tLmRhbXBpbmcsUz1tLnByZWZlcmVuY2U7LjU8PWsmJms8MXx8Y2goIkRhbXBpbmcgbXVzdCByYW5nZSBvbiBbMC41LCAxKS4gIEdvdDogIi5jb25jYXQoaykpO3ZhciBNPVsibWVkaWFuIiwibWVhbiIsIm1pbiIsIm1heCJdO3JldHVybiBNLnNvbWUoZnVuY3Rpb24oTyl7cmV0dXJuIE89PT1TfSl8fFgoUyl8fGNoKCJQcmVmZXJlbmNlIG11c3QgYmUgb25lIG9mIFsiLmNvbmNhdChNLm1hcChmdW5jdGlvbihPKXtyZXR1cm4iJyIuY29uY2F0KE8sIiciKX0pLmpvaW4oIiwgIiksIl0gb3IgYSBudW1iZXIuICBHb3Q6ICIpLmNvbmNhdChTKSksb2VlKG0pfSx1ZWU9ZnVuY3Rpb24obSxrLFMsTSl7dmFyIE89ZnVuY3Rpb24oJCxIKXtyZXR1cm4gTVtIXSgkKX07cmV0dXJuLW1TKG0sTS5sZW5ndGgsZnVuY3Rpb24oTil7cmV0dXJuIE8oayxOKX0sZnVuY3Rpb24oTil7cmV0dXJuIE8oUyxOKX0sayxTKX0sbGVlPWZ1bmN0aW9uKG0sayl7dmFyIFM9bnVsbDtyZXR1cm4gaz09PSJtZWRpYW4iP1M9dVoobSk6az09PSJtZWFuIj9TPWNaKG0pOms9PT0ibWluIj9TPWFaKG0pOms9PT0ibWF4Ij9TPW9aKG0pOlM9ayxTfSxoZWU9ZnVuY3Rpb24obSxrLFMpe2Zvcih2YXIgTT1bXSxPPTA7TzxtO08rKylrW08qbStPXStTW08qbStPXT4wJiZNLnB1c2goTyk7cmV0dXJuIE19LE5qPWZ1bmN0aW9uKG0sayxTKXtmb3IodmFyIE09W10sTz0wO088bTtPKyspe2Zvcih2YXIgTj0tMSwkPS0xLzAsSD0wO0g8Uy5sZW5ndGg7SCsrKXt2YXIgcT1TW0hdO2tbTyptK3FdPiQmJihOPXEsJD1rW08qbStxXSl9Tj4wJiZNLnB1c2goTil9Zm9yKHZhciBZPTA7WTxTLmxlbmd0aDtZKyspTVtTW1ldXT1TW1ldO3JldHVybiBNfSxmZWU9ZnVuY3Rpb24obSxrLFMpe2Zvcih2YXIgTT1OaihtLGssUyksTz0wO088Uy5sZW5ndGg7TysrKXtmb3IodmFyIE49W10sJD0wOyQ8TS5sZW5ndGg7JCsrKU1bJF09PT1TW09dJiZOLnB1c2goJCk7Zm9yKHZhciBIPS0xLHE9LTEvMCxZPTA7WTxOLmxlbmd0aDtZKyspe2Zvcih2YXIgWj0wLGNlPTA7Y2U8Ti5sZW5ndGg7Y2UrKylaKz1rW05bY2VdKm0rTltZXV07Wj5xJiYoSD1ZLHE9Wil9U1tPXT1OW0hdfXJldHVybiBNPU5qKG0sayxTKSxNfSxQaj1mdW5jdGlvbihtKXtmb3IodmFyIGs9dGhpcy5jeSgpLFM9dGhpcy5ub2RlcygpLE09Y2VlKG0pLE89e30sTj0wO048Uy5sZW5ndGg7TisrKU9bU1tOXS5pZCgpXT1OO3ZhciAkLEgscSxZLFosY2U7JD1TLmxlbmd0aCxIPSQqJCxxPW5ldyBBcnJheShIKTtmb3IodmFyIHZlPTA7dmU8SDt2ZSsrKXFbdmVdPS0xLzA7Zm9yKHZhciBtZT0wO21lPCQ7bWUrKylmb3IodmFyIExlPTA7TGU8JDtMZSsrKW1lIT09TGUmJihxW21lKiQrTGVdPXVlZShNLmRpc3RhbmNlLFNbbWVdLFNbTGVdLE0uYXR0cmlidXRlcykpO1k9bGVlKHEsTS5wcmVmZXJlbmNlKTtmb3IodmFyIF9lPTA7X2U8JDtfZSsrKXFbX2UqJCtfZV09WTtaPW5ldyBBcnJheShIKTtmb3IodmFyIEVlPTA7RWU8SDtFZSsrKVpbRWVdPTA7Y2U9bmV3IEFycmF5KEgpO2Zvcih2YXIgQmU9MDtCZTxIO0JlKyspY2VbQmVdPTA7Zm9yKHZhciBSZT1uZXcgQXJyYXkoJCksVmU9bmV3IEFycmF5KCQpLGN0PW5ldyBBcnJheSgkKSxzdD0wO3N0PCQ7c3QrKylSZVtzdF09MCxWZVtzdF09MCxjdFtzdF09MDtmb3IodmFyIFllPW5ldyBBcnJheSgkKk0ubWluSXRlcmF0aW9ucyksbXQ9MDttdDxZZS5sZW5ndGg7bXQrKylZZVttdF09MDt2YXIgSmU7Zm9yKEplPTA7SmU8TS5tYXhJdGVyYXRpb25zO0plKyspe2Zvcih2YXIgTHQ9MDtMdDwkO0x0Kyspe2Zvcih2YXIgTXQ9LTEvMCx1dD0tMS8wLFd0PS0xLFR0PTAsX249MDtfbjwkO19uKyspUmVbX25dPVpbTHQqJCtfbl0sVHQ9Y2VbTHQqJCtfbl0rcVtMdCokK19uXSxUdD49TXQ/KHV0PU10LE10PVR0LFd0PV9uKTpUdD51dCYmKHV0PVR0KTtmb3IodmFyIGhuPTA7aG48JDtobisrKVpbTHQqJCtobl09KDEtTS5kYW1waW5nKSoocVtMdCokK2huXS1NdCkrTS5kYW1waW5nKlJlW2huXTtaW0x0KiQrV3RdPSgxLU0uZGFtcGluZykqKHFbTHQqJCtXdF0tdXQpK00uZGFtcGluZypSZVtXdF19Zm9yKHZhciBZdD0wO1l0PCQ7WXQrKyl7Zm9yKHZhciBEbj0wLGlyPTA7aXI8JDtpcisrKVJlW2lyXT1jZVtpciokK1l0XSxWZVtpcl09TWF0aC5tYXgoMCxaW2lyKiQrWXRdKSxEbis9VmVbaXJdO0RuLT1WZVtZdF0sVmVbWXRdPVpbWXQqJCtZdF0sRG4rPVZlW1l0XTtmb3IodmFyIHZyPTA7dnI8JDt2cisrKWNlW3ZyKiQrWXRdPSgxLU0uZGFtcGluZykqTWF0aC5taW4oMCxEbi1WZVt2cl0pK00uZGFtcGluZypSZVt2cl07Y2VbWXQqJCtZdF09KDEtTS5kYW1waW5nKSooRG4tVmVbWXRdKStNLmRhbXBpbmcqUmVbWXRdfWZvcih2YXIgTm49MCxwcj0wO3ByPCQ7cHIrKyl7dmFyIEVyPWNlW3ByKiQrcHJdK1pbcHIqJCtwcl0+MD8xOjA7WWVbSmUlTS5taW5JdGVyYXRpb25zKiQrcHJdPUVyLE5uKz1Fcn1pZihObj4wJiYoSmU+PU0ubWluSXRlcmF0aW9ucy0xfHxKZT09TS5tYXhJdGVyYXRpb25zLTEpKXtmb3IodmFyIE1yPTAsQ3I9MDtDcjwkO0NyKyspe2N0W0NyXT0wO2Zvcih2YXIgT3I9MDtPcjxNLm1pbkl0ZXJhdGlvbnM7T3IrKyljdFtDcl0rPVllW09yKiQrQ3JdOyhjdFtDcl09PT0wfHxjdFtDcl09PT1NLm1pbkl0ZXJhdGlvbnMpJiZNcisrfWlmKE1yPT09JClicmVha319Zm9yKHZhciBXbj1oZWUoJCxaLGNlKSxicj1mZWUoJCxxLFduKSxTcj17fSxOcj0wO05yPFduLmxlbmd0aDtOcisrKVNyW1duW05yXV09W107Zm9yKHZhciBTaT0wO1NpPFMubGVuZ3RoO1NpKyspe3ZhciB5cz1PW1NbU2ldLmlkKCldLHBhPWJyW3lzXTtwYSE9bnVsbCYmU3JbcGFdLnB1c2goU1tTaV0pfWZvcih2YXIgTWk9bmV3IEFycmF5KFduLmxlbmd0aCksZ2k9MDtnaTxXbi5sZW5ndGg7Z2krKylNaVtnaV09ay5jb2xsZWN0aW9uKFNyW1duW2dpXV0pO3JldHVybiBNaX0sZGVlPXthZmZpbml0eVByb3BhZ2F0aW9uOlBqLGFwOlBqfSxnZWU9cTAoe3Jvb3Q6dm9pZCAwLGRpcmVjdGVkOiExfSkscGVlPXtoaWVyaG9semVyOmZ1bmN0aW9uKG0pe2lmKCFzZShtKSl7dmFyIGs9YXJndW1lbnRzO209e3Jvb3Q6a1swXSxkaXJlY3RlZDprWzFdfX12YXIgUz1nZWUobSksTT1TLnJvb3QsTz1TLmRpcmVjdGVkLE49dGhpcywkPSExLEgscSxZO00mJihZPWJlKE0pP3RoaXMuZmlsdGVyKE0pWzBdLmlkKCk6TVswXS5pZCgpKTt2YXIgWj17fSxjZT17fTtPP04uZm9yRWFjaChmdW5jdGlvbihCZSl7dmFyIFJlPUJlLmlkKCk7aWYoQmUuaXNOb2RlKCkpe3ZhciBWZT1CZS5pbmRlZ3JlZSghMCksY3Q9QmUub3V0ZGVncmVlKCEwKSxzdD1WZS1jdCxZZT1jdC1WZTtzdD09MT9IPyQ9ITA6SD1SZTpZZT09MT9xPyQ9ITA6cT1SZTooWWU+MXx8c3Q+MSkmJigkPSEwKSxaW1JlXT1bXSxCZS5vdXRnb2VycygpLmZvckVhY2goZnVuY3Rpb24obXQpe210LmlzRWRnZSgpJiZaW1JlXS5wdXNoKG10LmlkKCkpfSl9ZWxzZSBjZVtSZV09W3ZvaWQgMCxCZS50YXJnZXQoKS5pZCgpXX0pOk4uZm9yRWFjaChmdW5jdGlvbihCZSl7dmFyIFJlPUJlLmlkKCk7aWYoQmUuaXNOb2RlKCkpe3ZhciBWZT1CZS5kZWdyZWUoITApO1ZlJTImJihIP3E/JD0hMDpxPVJlOkg9UmUpLFpbUmVdPVtdLEJlLmNvbm5lY3RlZEVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihjdCl7cmV0dXJuIFpbUmVdLnB1c2goY3QuaWQoKSl9KX1lbHNlIGNlW1JlXT1bQmUuc291cmNlKCkuaWQoKSxCZS50YXJnZXQoKS5pZCgpXX0pO3ZhciB2ZT17Zm91bmQ6ITEsdHJhaWw6dm9pZCAwfTtpZigkKXJldHVybiB2ZTtpZihxJiZIKWlmKE8pe2lmKFkmJnEhPVkpcmV0dXJuIHZlO1k9cX1lbHNle2lmKFkmJnEhPVkmJkghPVkpcmV0dXJuIHZlO1l8fChZPXEpfWVsc2UgWXx8KFk9TlswXS5pZCgpKTt2YXIgbWU9ZnVuY3Rpb24oUmUpe2Zvcih2YXIgVmU9UmUsY3Q9W1JlXSxzdCxZZSxtdDtaW1ZlXS5sZW5ndGg7KXN0PVpbVmVdLnNoaWZ0KCksWWU9Y2Vbc3RdWzBdLG10PWNlW3N0XVsxXSxWZSE9bXQ/KFpbbXRdPVpbbXRdLmZpbHRlcihmdW5jdGlvbihKZSl7cmV0dXJuIEplIT1zdH0pLFZlPW10KTohTyYmVmUhPVllJiYoWltZZV09WltZZV0uZmlsdGVyKGZ1bmN0aW9uKEplKXtyZXR1cm4gSmUhPXN0fSksVmU9WWUpLGN0LnVuc2hpZnQoc3QpLGN0LnVuc2hpZnQoVmUpO3JldHVybiBjdH0sTGU9W10sX2U9W107Zm9yKF9lPW1lKFkpO19lLmxlbmd0aCE9MTspWltfZVswXV0ubGVuZ3RoPT0wPyhMZS51bnNoaWZ0KE4uZ2V0RWxlbWVudEJ5SWQoX2Uuc2hpZnQoKSkpLExlLnVuc2hpZnQoTi5nZXRFbGVtZW50QnlJZChfZS5zaGlmdCgpKSkpOl9lPW1lKF9lLnNoaWZ0KCkpLmNvbmNhdChfZSk7TGUudW5zaGlmdChOLmdldEVsZW1lbnRCeUlkKF9lLnNoaWZ0KCkpKTtmb3IodmFyIEVlIGluIFopaWYoWltFZV0ubGVuZ3RoKXJldHVybiB2ZTtyZXR1cm4gdmUuZm91bmQ9ITAsdmUudHJhaWw9dGhpcy5zcGF3bihMZSwhMCksdmV9fSx5Uz1mdW5jdGlvbigpe3ZhciBtPXRoaXMsaz17fSxTPTAsTT0wLE89W10sTj1bXSwkPXt9LEg9ZnVuY3Rpb24oY2UsdmUpe2Zvcih2YXIgbWU9Ti5sZW5ndGgtMSxMZT1bXSxfZT1tLnNwYXduKCk7TlttZV0ueCE9Y2V8fE5bbWVdLnkhPXZlOylMZS5wdXNoKE4ucG9wKCkuZWRnZSksbWUtLTtMZS5wdXNoKE4ucG9wKCkuZWRnZSksTGUuZm9yRWFjaChmdW5jdGlvbihFZSl7dmFyIEJlPUVlLmNvbm5lY3RlZE5vZGVzKCkuaW50ZXJzZWN0aW9uKG0pO19lLm1lcmdlKEVlKSxCZS5mb3JFYWNoKGZ1bmN0aW9uKFJlKXt2YXIgVmU9UmUuaWQoKSxjdD1SZS5jb25uZWN0ZWRFZGdlcygpLmludGVyc2VjdGlvbihtKTtfZS5tZXJnZShSZSksa1tWZV0uY3V0VmVydGV4P19lLm1lcmdlKGN0LmZpbHRlcihmdW5jdGlvbihzdCl7cmV0dXJuIHN0LmlzTG9vcCgpfSkpOl9lLm1lcmdlKGN0KX0pfSksTy5wdXNoKF9lKX0scT1mdW5jdGlvbiBaKGNlLHZlLG1lKXtjZT09PW1lJiYoTSs9MSksa1t2ZV09e2lkOlMsbG93OlMrKyxjdXRWZXJ0ZXg6ITF9O3ZhciBMZT1tLmdldEVsZW1lbnRCeUlkKHZlKS5jb25uZWN0ZWRFZGdlcygpLmludGVyc2VjdGlvbihtKTtpZihMZS5zaXplKCk9PT0wKU8ucHVzaChtLnNwYXduKG0uZ2V0RWxlbWVudEJ5SWQodmUpKSk7ZWxzZXt2YXIgX2UsRWUsQmUsUmU7TGUuZm9yRWFjaChmdW5jdGlvbihWZSl7X2U9VmUuc291cmNlKCkuaWQoKSxFZT1WZS50YXJnZXQoKS5pZCgpLEJlPV9lPT09dmU/RWU6X2UsQmUhPT1tZSYmKFJlPVZlLmlkKCksJFtSZV18fCgkW1JlXT0hMCxOLnB1c2goe3g6dmUseTpCZSxlZGdlOlZlfSkpLEJlIGluIGs/a1t2ZV0ubG93PU1hdGgubWluKGtbdmVdLmxvdyxrW0JlXS5pZCk6KFooY2UsQmUsdmUpLGtbdmVdLmxvdz1NYXRoLm1pbihrW3ZlXS5sb3csa1tCZV0ubG93KSxrW3ZlXS5pZDw9a1tCZV0ubG93JiYoa1t2ZV0uY3V0VmVydGV4PSEwLEgodmUsQmUpKSkpfSl9fTttLmZvckVhY2goZnVuY3Rpb24oWil7aWYoWi5pc05vZGUoKSl7dmFyIGNlPVouaWQoKTtjZSBpbiBrfHwoTT0wLHEoY2UsY2UpLGtbY2VdLmN1dFZlcnRleD1NPjEpfX0pO3ZhciBZPU9iamVjdC5rZXlzKGspLmZpbHRlcihmdW5jdGlvbihaKXtyZXR1cm4ga1taXS5jdXRWZXJ0ZXh9KS5tYXAoZnVuY3Rpb24oWil7cmV0dXJuIG0uZ2V0RWxlbWVudEJ5SWQoWil9KTtyZXR1cm57Y3V0Om0uc3Bhd24oWSksY29tcG9uZW50czpPfX0sYmVlPXtob3Bjcm9mdFRhcmphbkJpY29ubmVjdGVkOnlTLGh0YmM6eVMsaHRiOnlTLGhvcGNyb2Z0VGFyamFuQmljb25uZWN0ZWRDb21wb25lbnRzOnlTfSx4Uz1mdW5jdGlvbigpe3ZhciBtPXRoaXMsaz17fSxTPTAsTT1bXSxPPVtdLE49bS5zcGF3bihtKSwkPWZ1bmN0aW9uIEgocSl7Ty5wdXNoKHEpLGtbcV09e2luZGV4OlMsbG93OlMrKyxleHBsb3JlZDohMX07dmFyIFk9bS5nZXRFbGVtZW50QnlJZChxKS5jb25uZWN0ZWRFZGdlcygpLmludGVyc2VjdGlvbihtKTtpZihZLmZvckVhY2goZnVuY3Rpb24oTGUpe3ZhciBfZT1MZS50YXJnZXQoKS5pZCgpO19lIT09cSYmKF9lIGluIGt8fEgoX2UpLGtbX2VdLmV4cGxvcmVkfHwoa1txXS5sb3c9TWF0aC5taW4oa1txXS5sb3csa1tfZV0ubG93KSkpfSksa1txXS5pbmRleD09PWtbcV0ubG93KXtmb3IodmFyIFo9bS5zcGF3bigpOzspe3ZhciBjZT1PLnBvcCgpO2lmKFoubWVyZ2UobS5nZXRFbGVtZW50QnlJZChjZSkpLGtbY2VdLmxvdz1rW3FdLmluZGV4LGtbY2VdLmV4cGxvcmVkPSEwLGNlPT09cSlicmVha312YXIgdmU9Wi5lZGdlc1dpdGgoWiksbWU9Wi5tZXJnZSh2ZSk7TS5wdXNoKG1lKSxOPU4uZGlmZmVyZW5jZShtZSl9fTtyZXR1cm4gbS5mb3JFYWNoKGZ1bmN0aW9uKEgpe2lmKEguaXNOb2RlKCkpe3ZhciBxPUguaWQoKTtxIGluIGt8fCQocSl9fSkse2N1dDpOLGNvbXBvbmVudHM6TX19LG1lZT17dGFyamFuU3Ryb25nbHlDb25uZWN0ZWQ6eFMsdHNjOnhTLHRzY2M6eFMsdGFyamFuU3Ryb25nbHlDb25uZWN0ZWRDb21wb25lbnRzOnhTfSxCaj17fTtbSDksV0osWUosUUosWkosdFosaVosTFosdDgsbjgsbEkselosZWVlLGFlZSxkZWUscGVlLGJlZSxtZWVdLmZvckVhY2goZnVuY3Rpb24oeCl7eXQoQmoseCl9KTsvKiEKRW1iZWRkYWJsZSBNaW5pbXVtIFN0cmljdGx5LUNvbXBsaWFudCBQcm9taXNlcy9BKyAxLjEuMSBUaGVuYWJsZQpDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBSYWxmIFMuIEVuZ2Vsc2NoYWxsIChodHRwOi8vZW5nZWxzY2hhbGwuY29tKQpMaWNlbnNlZCB1bmRlciBUaGUgTUlUIExpY2Vuc2UgKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQpCiovdmFyIEZqPTAsUmo9MSxqaj0yLEd2PWZ1bmN0aW9uIHgobSl7aWYoISh0aGlzIGluc3RhbmNlb2YgeCkpcmV0dXJuIG5ldyB4KG0pO3RoaXMuaWQ9IlRoZW5hYmxlLzEuMC43Iix0aGlzLnN0YXRlPUZqLHRoaXMuZnVsZmlsbFZhbHVlPXZvaWQgMCx0aGlzLnJlamVjdFJlYXNvbj12b2lkIDAsdGhpcy5vbkZ1bGZpbGxlZD1bXSx0aGlzLm9uUmVqZWN0ZWQ9W10sdGhpcy5wcm94eT17dGhlbjp0aGlzLnRoZW4uYmluZCh0aGlzKX0sdHlwZW9mIG09PSJmdW5jdGlvbiImJm0uY2FsbCh0aGlzLHRoaXMuZnVsZmlsbC5iaW5kKHRoaXMpLHRoaXMucmVqZWN0LmJpbmQodGhpcykpfTtHdi5wcm90b3R5cGU9e2Z1bGZpbGw6ZnVuY3Rpb24obSl7cmV0dXJuICRqKHRoaXMsUmosImZ1bGZpbGxWYWx1ZSIsbSl9LHJlamVjdDpmdW5jdGlvbihtKXtyZXR1cm4gJGoodGhpcyxqaiwicmVqZWN0UmVhc29uIixtKX0sdGhlbjpmdW5jdGlvbihtLGspe3ZhciBTPXRoaXMsTT1uZXcgR3Y7cmV0dXJuIFMub25GdWxmaWxsZWQucHVzaChIaihtLE0sImZ1bGZpbGwiKSksUy5vblJlamVjdGVkLnB1c2goSGooayxNLCJyZWplY3QiKSksemooUyksTS5wcm94eX19O3ZhciAkaj1mdW5jdGlvbihtLGssUyxNKXtyZXR1cm4gbS5zdGF0ZT09PUZqJiYobS5zdGF0ZT1rLG1bU109TSx6aihtKSksbX0semo9ZnVuY3Rpb24obSl7bS5zdGF0ZT09PVJqP3FqKG0sIm9uRnVsZmlsbGVkIixtLmZ1bGZpbGxWYWx1ZSk6bS5zdGF0ZT09PWpqJiZxaihtLCJvblJlamVjdGVkIixtLnJlamVjdFJlYXNvbil9LHFqPWZ1bmN0aW9uKG0sayxTKXtpZihtW2tdLmxlbmd0aCE9PTApe3ZhciBNPW1ba107bVtrXT1bXTt2YXIgTz1mdW5jdGlvbigpe2Zvcih2YXIgJD0wOyQ8TS5sZW5ndGg7JCsrKU1bJF0oUyl9O3R5cGVvZiBzZXRJbW1lZGlhdGU9PSJmdW5jdGlvbiI/c2V0SW1tZWRpYXRlKE8pOnNldFRpbWVvdXQoTywwKX19LEhqPWZ1bmN0aW9uKG0sayxTKXtyZXR1cm4gZnVuY3Rpb24oTSl7aWYodHlwZW9mIG0hPSJmdW5jdGlvbiIpa1tTXS5jYWxsKGssTSk7ZWxzZXt2YXIgTzt0cnl7Tz1tKE0pfWNhdGNoKE4pe2sucmVqZWN0KE4pO3JldHVybn12ZWUoayxPKX19fSx2ZWU9ZnVuY3Rpb24geChtLGspe2lmKG09PT1rfHxtLnByb3h5PT09ayl7bS5yZWplY3QobmV3IFR5cGVFcnJvcigiY2Fubm90IHJlc29sdmUgcHJvbWlzZSB3aXRoIGl0c2VsZiIpKTtyZXR1cm59dmFyIFM7aWYodShrKT09PSJvYmplY3QiJiZrIT09bnVsbHx8dHlwZW9mIGs9PSJmdW5jdGlvbiIpdHJ5e1M9ay50aGVufWNhdGNoKE8pe20ucmVqZWN0KE8pO3JldHVybn1pZih0eXBlb2YgUz09ImZ1bmN0aW9uIil7dmFyIE09ITE7dHJ5e1MuY2FsbChrLGZ1bmN0aW9uKE8pe018fChNPSEwLE89PT1rP20ucmVqZWN0KG5ldyBUeXBlRXJyb3IoImNpcmN1bGFyIHRoZW5hYmxlIGNoYWluIikpOngobSxPKSl9LGZ1bmN0aW9uKE8pe018fChNPSEwLG0ucmVqZWN0KE8pKX0pfWNhdGNoKE8pe018fG0ucmVqZWN0KE8pfXJldHVybn1tLmZ1bGZpbGwoayl9O0d2LmFsbD1mdW5jdGlvbih4KXtyZXR1cm4gbmV3IEd2KGZ1bmN0aW9uKG0sayl7Zm9yKHZhciBTPW5ldyBBcnJheSh4Lmxlbmd0aCksTT0wLE89ZnVuY3Rpb24oSCxxKXtTW0hdPXEsTSsrLE09PT14Lmxlbmd0aCYmbShTKX0sTj0wO048eC5sZW5ndGg7TisrKShmdW5jdGlvbigkKXt2YXIgSD14WyRdLHE9SCE9bnVsbCYmSC50aGVuIT1udWxsO2lmKHEpSC50aGVuKGZ1bmN0aW9uKFope08oJCxaKX0sZnVuY3Rpb24oWil7ayhaKX0pO2Vsc2V7dmFyIFk9SDtPKCQsWSl9fSkoTil9KX0sR3YucmVzb2x2ZT1mdW5jdGlvbih4KXtyZXR1cm4gbmV3IEd2KGZ1bmN0aW9uKG0sayl7bSh4KX0pfSxHdi5yZWplY3Q9ZnVuY3Rpb24oeCl7cmV0dXJuIG5ldyBHdihmdW5jdGlvbihtLGspe2soeCl9KX07dmFyIGk4PXR5cGVvZiBQcm9taXNlPCJ1Ij9Qcm9taXNlOkd2LGRJPWZ1bmN0aW9uKG0sayxTKXt2YXIgTT1QZShtKSxPPSFNLE49dGhpcy5fcHJpdmF0ZT15dCh7ZHVyYXRpb246MWUzfSxrLFMpO2lmKE4udGFyZ2V0PW0sTi5zdHlsZT1OLnN0eWxlfHxOLmNzcyxOLnN0YXJ0ZWQ9ITEsTi5wbGF5aW5nPSExLE4uaG9va2VkPSExLE4uYXBwbHlpbmc9ITEsTi5wcm9ncmVzcz0wLE4uY29tcGxldGVzPVtdLE4uZnJhbWVzPVtdLE4uY29tcGxldGUmJmFlKE4uY29tcGxldGUpJiZOLmNvbXBsZXRlcy5wdXNoKE4uY29tcGxldGUpLE8pe3ZhciAkPW0ucG9zaXRpb24oKTtOLnN0YXJ0UG9zaXRpb249Ti5zdGFydFBvc2l0aW9ufHx7eDokLngseTokLnl9LE4uc3RhcnRTdHlsZT1OLnN0YXJ0U3R5bGV8fG0uY3koKS5zdHlsZSgpLmdldEFuaW1hdGlvblN0YXJ0U3R5bGUobSxOLnN0eWxlKX1pZihNKXt2YXIgSD1tLnBhbigpO04uc3RhcnRQYW49e3g6SC54LHk6SC55fSxOLnN0YXJ0Wm9vbT1tLnpvb20oKX10aGlzLmxlbmd0aD0xLHRoaXNbMF09dGhpc30sZzU9ZEkucHJvdG90eXBlO3l0KGc1LHtpbnN0YW5jZVN0cmluZzpmdW5jdGlvbigpe3JldHVybiJhbmltYXRpb24ifSxob29rOmZ1bmN0aW9uKCl7dmFyIG09dGhpcy5fcHJpdmF0ZTtpZighbS5ob29rZWQpe3ZhciBrLFM9bS50YXJnZXQuX3ByaXZhdGUuYW5pbWF0aW9uO20ucXVldWU/az1TLnF1ZXVlOms9Uy5jdXJyZW50LGsucHVzaCh0aGlzKSx4ZShtLnRhcmdldCkmJm0udGFyZ2V0LmN5KCkuYWRkVG9BbmltYXRpb25Qb29sKG0udGFyZ2V0KSxtLmhvb2tlZD0hMH1yZXR1cm4gdGhpc30scGxheTpmdW5jdGlvbigpe3ZhciBtPXRoaXMuX3ByaXZhdGU7cmV0dXJuIG0ucHJvZ3Jlc3M9PT0xJiYobS5wcm9ncmVzcz0wKSxtLnBsYXlpbmc9ITAsbS5zdGFydGVkPSExLG0uc3RvcHBlZD0hMSx0aGlzLmhvb2soKSx0aGlzfSxwbGF5aW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUucGxheWluZ30sYXBwbHk6ZnVuY3Rpb24oKXt2YXIgbT10aGlzLl9wcml2YXRlO3JldHVybiBtLmFwcGx5aW5nPSEwLG0uc3RhcnRlZD0hMSxtLnN0b3BwZWQ9ITEsdGhpcy5ob29rKCksdGhpc30sYXBwbHlpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5hcHBseWluZ30scGF1c2U6ZnVuY3Rpb24oKXt2YXIgbT10aGlzLl9wcml2YXRlO3JldHVybiBtLnBsYXlpbmc9ITEsbS5zdGFydGVkPSExLHRoaXN9LHN0b3A6ZnVuY3Rpb24oKXt2YXIgbT10aGlzLl9wcml2YXRlO3JldHVybiBtLnBsYXlpbmc9ITEsbS5zdGFydGVkPSExLG0uc3RvcHBlZD0hMCx0aGlzfSxyZXdpbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9ncmVzcygwKX0sZmFzdGZvcndhcmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9ncmVzcygxKX0sdGltZTpmdW5jdGlvbihtKXt2YXIgaz10aGlzLl9wcml2YXRlO3JldHVybiBtPT09dm9pZCAwP2sucHJvZ3Jlc3Mqay5kdXJhdGlvbjp0aGlzLnByb2dyZXNzKG0vay5kdXJhdGlvbil9LHByb2dyZXNzOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuX3ByaXZhdGUsUz1rLnBsYXlpbmc7cmV0dXJuIG09PT12b2lkIDA/ay5wcm9ncmVzczooUyYmdGhpcy5wYXVzZSgpLGsucHJvZ3Jlc3M9bSxrLnN0YXJ0ZWQ9ITEsUyYmdGhpcy5wbGF5KCksdGhpcyl9LGNvbXBsZXRlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLnByb2dyZXNzPT09MX0scmV2ZXJzZTpmdW5jdGlvbigpe3ZhciBtPXRoaXMuX3ByaXZhdGUsaz1tLnBsYXlpbmc7ayYmdGhpcy5wYXVzZSgpLG0ucHJvZ3Jlc3M9MS1tLnByb2dyZXNzLG0uc3RhcnRlZD0hMTt2YXIgUz1mdW5jdGlvbihxLFkpe3ZhciBaPW1bcV07WiE9bnVsbCYmKG1bcV09bVtZXSxtW1ldPVopfTtpZihTKCJ6b29tIiwic3RhcnRab29tIiksUygicGFuIiwic3RhcnRQYW4iKSxTKCJwb3NpdGlvbiIsInN0YXJ0UG9zaXRpb24iKSxtLnN0eWxlKWZvcih2YXIgTT0wO008bS5zdHlsZS5sZW5ndGg7TSsrKXt2YXIgTz1tLnN0eWxlW01dLE49Ty5uYW1lLCQ9bS5zdGFydFN0eWxlW05dO20uc3RhcnRTdHlsZVtOXT1PLG0uc3R5bGVbTV09JH1yZXR1cm4gayYmdGhpcy5wbGF5KCksdGhpc30scHJvbWlzZTpmdW5jdGlvbihtKXt2YXIgaz10aGlzLl9wcml2YXRlLFM7c3dpdGNoKG0pe2Nhc2UiZnJhbWUiOlM9ay5mcmFtZXM7YnJlYWs7ZGVmYXVsdDpjYXNlImNvbXBsZXRlIjpjYXNlImNvbXBsZXRlZCI6Uz1rLmNvbXBsZXRlc31yZXR1cm4gbmV3IGk4KGZ1bmN0aW9uKE0sTyl7Uy5wdXNoKGZ1bmN0aW9uKCl7TSgpfSl9KX19KSxnNS5jb21wbGV0ZT1nNS5jb21wbGV0ZWQsZzUucnVuPWc1LnBsYXksZzUucnVubmluZz1nNS5wbGF5aW5nO3ZhciB3ZWU9e2FuaW1hdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGs9dGhpcyxTPWsubGVuZ3RoIT09dm9pZCAwLE09Uz9rOltrXSxPPXRoaXMuX3ByaXZhdGUuY3l8fHRoaXM7aWYoIU8uc3R5bGVFbmFibGVkKCkpcmV0dXJuITE7dmFyIE49TVswXTtpZihOKXJldHVybiBOLl9wcml2YXRlLmFuaW1hdGlvbi5jdXJyZW50Lmxlbmd0aD4wfX0sY2xlYXJRdWV1ZTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3ZhciBrPXRoaXMsUz1rLmxlbmd0aCE9PXZvaWQgMCxNPVM/azpba10sTz10aGlzLl9wcml2YXRlLmN5fHx0aGlzO2lmKCFPLnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO2Zvcih2YXIgTj0wO048TS5sZW5ndGg7TisrKXt2YXIgJD1NW05dOyQuX3ByaXZhdGUuYW5pbWF0aW9uLnF1ZXVlPVtdfXJldHVybiB0aGlzfX0sZGVsYXk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oayxTKXt2YXIgTT10aGlzLl9wcml2YXRlLmN5fHx0aGlzO3JldHVybiBNLnN0eWxlRW5hYmxlZCgpP3RoaXMuYW5pbWF0ZSh7ZGVsYXk6ayxkdXJhdGlvbjprLGNvbXBsZXRlOlN9KTp0aGlzfX0sZGVsYXlBbmltYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oayxTKXt2YXIgTT10aGlzLl9wcml2YXRlLmN5fHx0aGlzO3JldHVybiBNLnN0eWxlRW5hYmxlZCgpP3RoaXMuYW5pbWF0aW9uKHtkZWxheTprLGR1cmF0aW9uOmssY29tcGxldGU6U30pOnRoaXN9fSxhbmltYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oayxTKXt2YXIgTT10aGlzLE89TS5sZW5ndGghPT12b2lkIDAsTj1PP006W01dLCQ9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcyxIPSFPLHE9IUg7aWYoISQuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7dmFyIFk9JC5zdHlsZSgpO2s9eXQoe30sayxTKTt2YXIgWj1PYmplY3Qua2V5cyhrKS5sZW5ndGg9PT0wO2lmKFopcmV0dXJuIG5ldyBkSShOWzBdLGspO3N3aXRjaChrLmR1cmF0aW9uPT09dm9pZCAwJiYoay5kdXJhdGlvbj00MDApLGsuZHVyYXRpb24pe2Nhc2Uic2xvdyI6ay5kdXJhdGlvbj02MDA7YnJlYWs7Y2FzZSJmYXN0IjprLmR1cmF0aW9uPTIwMDticmVha31pZihxJiYoay5zdHlsZT1ZLmdldFByb3BzTGlzdChrLnN0eWxlfHxrLmNzcyksay5jc3M9dm9pZCAwKSxxJiZrLnJlbmRlcmVkUG9zaXRpb24hPW51bGwpe3ZhciBjZT1rLnJlbmRlcmVkUG9zaXRpb24sdmU9JC5wYW4oKSxtZT0kLnpvb20oKTtrLnBvc2l0aW9uPWhqKGNlLG1lLHZlKX1pZihIJiZrLnBhbkJ5IT1udWxsKXt2YXIgTGU9ay5wYW5CeSxfZT0kLnBhbigpO2sucGFuPXt4Ol9lLngrTGUueCx5Ol9lLnkrTGUueX19dmFyIEVlPWsuY2VudGVyfHxrLmNlbnRyZTtpZihIJiZFZSE9bnVsbCl7dmFyIEJlPSQuZ2V0Q2VudGVyUGFuKEVlLmVsZXMsay56b29tKTtCZSE9bnVsbCYmKGsucGFuPUJlKX1pZihIJiZrLmZpdCE9bnVsbCl7dmFyIFJlPWsuZml0LFZlPSQuZ2V0Rml0Vmlld3BvcnQoUmUuZWxlc3x8UmUuYm91bmRpbmdCb3gsUmUucGFkZGluZyk7VmUhPW51bGwmJihrLnBhbj1WZS5wYW4say56b29tPVZlLnpvb20pfWlmKEgmJnNlKGsuem9vbSkpe3ZhciBjdD0kLmdldFpvb21lZFZpZXdwb3J0KGsuem9vbSk7Y3QhPW51bGw/KGN0Lnpvb21lZCYmKGsuem9vbT1jdC56b29tKSxjdC5wYW5uZWQmJihrLnBhbj1jdC5wYW4pKTprLnpvb209bnVsbH1yZXR1cm4gbmV3IGRJKE5bMF0sayl9fSxhbmltYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGssUyl7dmFyIE09dGhpcyxPPU0ubGVuZ3RoIT09dm9pZCAwLE49Tz9NOltNXSwkPXRoaXMuX3ByaXZhdGUuY3l8fHRoaXM7aWYoISQuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7UyYmKGs9eXQoe30sayxTKSk7Zm9yKHZhciBIPTA7SDxOLmxlbmd0aDtIKyspe3ZhciBxPU5bSF0sWT1xLmFuaW1hdGVkKCkmJihrLnF1ZXVlPT09dm9pZCAwfHxrLnF1ZXVlKSxaPXEuYW5pbWF0aW9uKGssWT97cXVldWU6ITB9OnZvaWQgMCk7Wi5wbGF5KCl9cmV0dXJuIHRoaXN9fSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGssUyl7dmFyIE09dGhpcyxPPU0ubGVuZ3RoIT09dm9pZCAwLE49Tz9NOltNXSwkPXRoaXMuX3ByaXZhdGUuY3l8fHRoaXM7aWYoISQuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7Zm9yKHZhciBIPTA7SDxOLmxlbmd0aDtIKyspe2Zvcih2YXIgcT1OW0hdLFk9cS5fcHJpdmF0ZSxaPVkuYW5pbWF0aW9uLmN1cnJlbnQsY2U9MDtjZTxaLmxlbmd0aDtjZSsrKXt2YXIgdmU9WltjZV0sbWU9dmUuX3ByaXZhdGU7UyYmKG1lLmR1cmF0aW9uPTApfWsmJihZLmFuaW1hdGlvbi5xdWV1ZT1bXSksU3x8KFkuYW5pbWF0aW9uLmN1cnJlbnQ9W10pfXJldHVybiAkLm5vdGlmeSgiZHJhdyIpLHRoaXN9fX0seWVlPUFycmF5LmlzQXJyYXksa1M9eWVlLFZqPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLHhlZT0vXlx3KiQvO2Z1bmN0aW9uIGtlZSh4LG0pe2lmKGtTKHgpKXJldHVybiExO3ZhciBrPXR5cGVvZiB4O3JldHVybiBrPT0ibnVtYmVyInx8az09InN5bWJvbCJ8fGs9PSJib29sZWFuInx8eD09bnVsbHx8WnIoeCk/ITA6eGVlLnRlc3QoeCl8fCFWai50ZXN0KHgpfHxtIT1udWxsJiZ4IGluIE9iamVjdChtKX12YXIgRWVlPWtlZSxUZWU9IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iLENlZT0iW29iamVjdCBGdW5jdGlvbl0iLFNlZT0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLF9lZT0iW29iamVjdCBQcm94eV0iO2Z1bmN0aW9uIEFlZSh4KXtpZighQXQoeCkpcmV0dXJuITE7dmFyIG09Y2QoeCk7cmV0dXJuIG09PUNlZXx8bT09U2VlfHxtPT1UZWV8fG09PV9lZX12YXIgTGVlPUFlZSxNZWU9JG9bIl9fY29yZS1qc19zaGFyZWRfXyJdLEVTPU1lZSxVaj1mdW5jdGlvbigpe3ZhciB4PS9bXi5dKyQvLmV4ZWMoRVMmJkVTLmtleXMmJkVTLmtleXMuSUVfUFJPVE98fCIiKTtyZXR1cm4geD8iU3ltYm9sKHNyYylfMS4iK3g6IiJ9KCk7ZnVuY3Rpb24gRGVlKHgpe3JldHVybiEhVWomJlVqIGluIHh9dmFyIEllZT1EZWUsT2VlPUZ1bmN0aW9uLnByb3RvdHlwZSxOZWU9T2VlLnRvU3RyaW5nO2Z1bmN0aW9uIFBlZSh4KXtpZih4IT1udWxsKXt0cnl7cmV0dXJuIE5lZS5jYWxsKHgpfWNhdGNoe310cnl7cmV0dXJuIHgrIiJ9Y2F0Y2h7fX1yZXR1cm4iIn12YXIgR2o9UGVlLEtqPS9bXFxeJC4qKz8oKVtcXXt9fF0vZyxCZWU9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sV2o9RnVuY3Rpb24ucHJvdG90eXBlLFlqPU9iamVjdC5wcm90b3R5cGUsRmVlPVdqLnRvU3RyaW5nLFJlZT1Zai5oYXNPd25Qcm9wZXJ0eSxqZWU9UmVnRXhwKCJeIitGZWUuY2FsbChSZWUpLnJlcGxhY2UoS2osIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIik7ZnVuY3Rpb24gJGVlKHgpe2lmKCFBdCh4KXx8SWVlKHgpKXJldHVybiExO3ZhciBtPUxlZSh4KT9qZWU6QmVlO3JldHVybiBtLnRlc3QoR2ooeCkpfXZhciB6ZWU9JGVlO2Z1bmN0aW9uIHFlZSh4LG0pe3JldHVybiB4PT1udWxsP3ZvaWQgMDp4W21dfXZhciBIZWU9cWVlO2Z1bmN0aW9uIFZlZSh4LG0pe3ZhciBrPUhlZSh4LG0pO3JldHVybiB6ZWUoayk/azp2b2lkIDB9dmFyIGdJPVZlZSxVZWU9Z0koT2JqZWN0LCJjcmVhdGUiKSxYOT1VZWU7ZnVuY3Rpb24gWGooKXt0aGlzLl9fZGF0YV9fPVg5P1g5KG51bGwpOnt9LHRoaXMuc2l6ZT0wfXZhciBHZWU9WGo7ZnVuY3Rpb24gS2VlKHgpe3ZhciBtPXRoaXMuaGFzKHgpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1t4XTtyZXR1cm4gdGhpcy5zaXplLT1tPzE6MCxtfXZhciBXZWU9S2VlLFllZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyIsWGVlPU9iamVjdC5wcm90b3R5cGUsUWVlPVhlZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBKZWUoeCl7dmFyIG09dGhpcy5fX2RhdGFfXztpZihYOSl7dmFyIGs9bVt4XTtyZXR1cm4gaz09PVllZT92b2lkIDA6a31yZXR1cm4gUWVlLmNhbGwobSx4KT9tW3hdOnZvaWQgMH12YXIgWmVlPUplZSxldGU9T2JqZWN0LnByb3RvdHlwZSx0dGU9ZXRlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIG50ZSh4KXt2YXIgbT10aGlzLl9fZGF0YV9fO3JldHVybiBYOT9tW3hdIT09dm9pZCAwOnR0ZS5jYWxsKG0seCl9dmFyIHJ0ZT1udGUsaXRlPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjtmdW5jdGlvbiBzdGUoeCxtKXt2YXIgaz10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKHgpPzA6MSxrW3hdPVg5JiZtPT09dm9pZCAwP2l0ZTptLHRoaXN9dmFyIGF0ZT1zdGU7ZnVuY3Rpb24gczgoeCl7dmFyIG09LTEsaz14PT1udWxsPzA6eC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK208azspe3ZhciBTPXhbbV07dGhpcy5zZXQoU1swXSxTWzFdKX19czgucHJvdG90eXBlLmNsZWFyPUdlZSxzOC5wcm90b3R5cGUuZGVsZXRlPVdlZSxzOC5wcm90b3R5cGUuZ2V0PVplZSxzOC5wcm90b3R5cGUuaGFzPXJ0ZSxzOC5wcm90b3R5cGUuc2V0PWF0ZTt2YXIgUWo9czg7ZnVuY3Rpb24gb3RlKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH12YXIgY3RlPW90ZTtmdW5jdGlvbiB1dGUoeCxtKXtyZXR1cm4geD09PW18fHghPT14JiZtIT09bX12YXIgSmo9dXRlO2Z1bmN0aW9uIGx0ZSh4LG0pe2Zvcih2YXIgaz14Lmxlbmd0aDtrLS07KWlmKEpqKHhba11bMF0sbSkpcmV0dXJuIGs7cmV0dXJuLTF9dmFyIFRTPWx0ZSxodGU9QXJyYXkucHJvdG90eXBlLGZ0ZT1odGUuc3BsaWNlO2Z1bmN0aW9uIGR0ZSh4KXt2YXIgbT10aGlzLl9fZGF0YV9fLGs9VFMobSx4KTtpZihrPDApcmV0dXJuITE7dmFyIFM9bS5sZW5ndGgtMTtyZXR1cm4gaz09Uz9tLnBvcCgpOmZ0ZS5jYWxsKG0saywxKSwtLXRoaXMuc2l6ZSwhMH12YXIgZ3RlPWR0ZTtmdW5jdGlvbiBwdGUoeCl7dmFyIG09dGhpcy5fX2RhdGFfXyxrPVRTKG0seCk7cmV0dXJuIGs8MD92b2lkIDA6bVtrXVsxXX12YXIgYnRlPXB0ZTtmdW5jdGlvbiBtdGUoeCl7cmV0dXJuIFRTKHRoaXMuX19kYXRhX18seCk+LTF9dmFyIHZ0ZT1tdGU7ZnVuY3Rpb24gd3RlKHgsbSl7dmFyIGs9dGhpcy5fX2RhdGFfXyxTPVRTKGsseCk7cmV0dXJuIFM8MD8oKyt0aGlzLnNpemUsay5wdXNoKFt4LG1dKSk6a1tTXVsxXT1tLHRoaXN9dmFyIHl0ZT13dGU7ZnVuY3Rpb24gYTgoeCl7dmFyIG09LTEsaz14PT1udWxsPzA6eC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK208azspe3ZhciBTPXhbbV07dGhpcy5zZXQoU1swXSxTWzFdKX19YTgucHJvdG90eXBlLmNsZWFyPWN0ZSxhOC5wcm90b3R5cGUuZGVsZXRlPWd0ZSxhOC5wcm90b3R5cGUuZ2V0PWJ0ZSxhOC5wcm90b3R5cGUuaGFzPXZ0ZSxhOC5wcm90b3R5cGUuc2V0PXl0ZTt2YXIgeHRlPWE4LGt0ZT1nSSgkbywiTWFwIiksRXRlPWt0ZTtmdW5jdGlvbiBUdGUoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBRaixtYXA6bmV3KEV0ZXx8eHRlKSxzdHJpbmc6bmV3IFFqfX12YXIgQ3RlPVR0ZTtmdW5jdGlvbiBTdGUoeCl7dmFyIG09dHlwZW9mIHg7cmV0dXJuIG09PSJzdHJpbmcifHxtPT0ibnVtYmVyInx8bT09InN5bWJvbCJ8fG09PSJib29sZWFuIj94IT09Il9fcHJvdG9fXyI6eD09PW51bGx9dmFyIF90ZT1TdGU7ZnVuY3Rpb24gQXRlKHgsbSl7dmFyIGs9eC5fX2RhdGFfXztyZXR1cm4gX3RlKG0pP2tbdHlwZW9mIG09PSJzdHJpbmciPyJzdHJpbmciOiJoYXNoIl06ay5tYXB9dmFyIENTPUF0ZTtmdW5jdGlvbiBMdGUoeCl7dmFyIG09Q1ModGhpcyx4KS5kZWxldGUoeCk7cmV0dXJuIHRoaXMuc2l6ZS09bT8xOjAsbX12YXIgTXRlPUx0ZTtmdW5jdGlvbiBEdGUoeCl7cmV0dXJuIENTKHRoaXMseCkuZ2V0KHgpfXZhciBJdGU9RHRlO2Z1bmN0aW9uIE90ZSh4KXtyZXR1cm4gQ1ModGhpcyx4KS5oYXMoeCl9dmFyIE50ZT1PdGU7ZnVuY3Rpb24gUHRlKHgsbSl7dmFyIGs9Q1ModGhpcyx4KSxTPWsuc2l6ZTtyZXR1cm4gay5zZXQoeCxtKSx0aGlzLnNpemUrPWsuc2l6ZT09Uz8wOjEsdGhpc312YXIgQnRlPVB0ZTtmdW5jdGlvbiBvOCh4KXt2YXIgbT0tMSxrPXg9PW51bGw/MDp4Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrbTxrOyl7dmFyIFM9eFttXTt0aGlzLnNldChTWzBdLFNbMV0pfX1vOC5wcm90b3R5cGUuY2xlYXI9Q3RlLG84LnByb3RvdHlwZS5kZWxldGU9TXRlLG84LnByb3RvdHlwZS5nZXQ9SXRlLG84LnByb3RvdHlwZS5oYXM9TnRlLG84LnByb3RvdHlwZS5zZXQ9QnRlO3ZhciBaaj1vOCxGdGU9IkV4cGVjdGVkIGEgZnVuY3Rpb24iO2Z1bmN0aW9uIHBJKHgsbSl7aWYodHlwZW9mIHghPSJmdW5jdGlvbiJ8fG0hPW51bGwmJnR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoRnRlKTt2YXIgaz1mdW5jdGlvbigpe3ZhciBTPWFyZ3VtZW50cyxNPW0/bS5hcHBseSh0aGlzLFMpOlNbMF0sTz1rLmNhY2hlO2lmKE8uaGFzKE0pKXJldHVybiBPLmdldChNKTt2YXIgTj14LmFwcGx5KHRoaXMsUyk7cmV0dXJuIGsuY2FjaGU9Ty5zZXQoTSxOKXx8TyxOfTtyZXR1cm4gay5jYWNoZT1uZXcocEkuQ2FjaGV8fFpqKSxrfXBJLkNhY2hlPVpqO3ZhciBSdGU9cEksanRlPTUwMDtmdW5jdGlvbiAkdGUoeCl7dmFyIG09UnRlKHgsZnVuY3Rpb24oUyl7cmV0dXJuIGsuc2l6ZT09PWp0ZSYmay5jbGVhcigpLFN9KSxrPW0uY2FjaGU7cmV0dXJuIG19dmFyIHp0ZT0kdGUscXRlPS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLEh0ZT0vXFwoXFwpPy9nLFZ0ZT16dGUoZnVuY3Rpb24oeCl7dmFyIG09W107cmV0dXJuIHguY2hhckNvZGVBdCgwKT09PTQ2JiZtLnB1c2goIiIpLHgucmVwbGFjZShxdGUsZnVuY3Rpb24oayxTLE0sTyl7bS5wdXNoKE0/Ty5yZXBsYWNlKEh0ZSwiJDEiKTpTfHxrKX0pLG19KSxlJD1WdGU7ZnVuY3Rpb24gVXRlKHgsbSl7Zm9yKHZhciBrPS0xLFM9eD09bnVsbD8wOngubGVuZ3RoLE09QXJyYXkoUyk7KytrPFM7KU1ba109bSh4W2tdLGsseCk7cmV0dXJuIE19dmFyIHQkPVV0ZSxHdGU9MS8wLG4kPUJjP0JjLnByb3RvdHlwZTp2b2lkIDAsciQ9biQ/biQudG9TdHJpbmc6dm9pZCAwO2Z1bmN0aW9uIGkkKHgpe2lmKHR5cGVvZiB4PT0ic3RyaW5nIilyZXR1cm4geDtpZihrUyh4KSlyZXR1cm4gdCQoeCxpJCkrIiI7aWYoWnIoeCkpcmV0dXJuIHIkP3IkLmNhbGwoeCk6IiI7dmFyIG09eCsiIjtyZXR1cm4gbT09IjAiJiYxL3g9PS1HdGU/Ii0wIjptfXZhciBLdGU9aSQ7ZnVuY3Rpb24gV3RlKHgpe3JldHVybiB4PT1udWxsPyIiOkt0ZSh4KX12YXIgcyQ9V3RlO2Z1bmN0aW9uIFl0ZSh4LG0pe3JldHVybiBrUyh4KT94OkVlZSh4LG0pP1t4XTplJChzJCh4KSl9dmFyIGEkPVl0ZSxYdGU9MS8wO2Z1bmN0aW9uIFF0ZSh4KXtpZih0eXBlb2YgeD09InN0cmluZyJ8fFpyKHgpKXJldHVybiB4O3ZhciBtPXgrIiI7cmV0dXJuIG09PSIwIiYmMS94PT0tWHRlPyItMCI6bX12YXIgYkk9UXRlO2Z1bmN0aW9uIEp0ZSh4LG0pe209YSQobSx4KTtmb3IodmFyIGs9MCxTPW0ubGVuZ3RoO3ghPW51bGwmJms8UzspeD14W2JJKG1baysrXSldO3JldHVybiBrJiZrPT1TP3g6dm9pZCAwfXZhciBadGU9SnRlO2Z1bmN0aW9uIGVuZSh4LG0sayl7dmFyIFM9eD09bnVsbD92b2lkIDA6WnRlKHgsbSk7cmV0dXJuIFM9PT12b2lkIDA/azpTfXZhciB0bmU9ZW5lLG5uZT1mdW5jdGlvbigpe3RyeXt2YXIgeD1nSShPYmplY3QsImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIHgoe30sIiIse30pLHh9Y2F0Y2h7fX0oKSxvJD1ubmU7ZnVuY3Rpb24gcm5lKHgsbSxrKXttPT0iX19wcm90b19fIiYmbyQ/byQoeCxtLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTprLHdyaXRhYmxlOiEwfSk6eFttXT1rfXZhciBpbmU9cm5lLHNuZT1PYmplY3QucHJvdG90eXBlLHB3ZT1zbmUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gYW5lKHgsbSxrKXt2YXIgUz14W21dOyghKHB3ZS5jYWxsKHgsbSkmJkpqKFMsaykpfHxrPT09dm9pZCAwJiYhKG0gaW4geCkpJiZpbmUoeCxtLGspfXZhciBvbmU9YW5lLGNuZT05MDA3MTk5MjU0NzQwOTkxLHVuZT0vXig/OjB8WzEtOV1cZCopJC87ZnVuY3Rpb24gbG5lKHgsbSl7dmFyIGs9dHlwZW9mIHg7cmV0dXJuIG09bT8/Y25lLCEhbSYmKGs9PSJudW1iZXIifHxrIT0ic3ltYm9sIiYmdW5lLnRlc3QoeCkpJiZ4Pi0xJiZ4JTE9PTAmJng8bX12YXIgaG5lPWxuZTtmdW5jdGlvbiBmbmUoeCxtLGssUyl7aWYoIUF0KHgpKXJldHVybiB4O209YSQobSx4KTtmb3IodmFyIE09LTEsTz1tLmxlbmd0aCxOPU8tMSwkPXg7JCE9bnVsbCYmKytNPE87KXt2YXIgSD1iSShtW01dKSxxPWs7aWYoSD09PSJfX3Byb3RvX18ifHxIPT09ImNvbnN0cnVjdG9yInx8SD09PSJwcm90b3R5cGUiKXJldHVybiB4O2lmKE0hPU4pe3ZhciBZPSRbSF07cT1TP1MoWSxILCQpOnZvaWQgMCxxPT09dm9pZCAwJiYocT1BdChZKT9ZOmhuZShtW00rMV0pP1tdOnt9KX1vbmUoJCxILHEpLCQ9JFtIXX1yZXR1cm4geH12YXIgZG5lPWZuZTtmdW5jdGlvbiBnbmUoeCxtLGspe3JldHVybiB4PT1udWxsP3g6ZG5lKHgsbSxrKX12YXIgcG5lPWduZTtmdW5jdGlvbiBibmUoeCxtKXt2YXIgaz0tMSxTPXgubGVuZ3RoO2ZvcihtfHwobT1BcnJheShTKSk7KytrPFM7KW1ba109eFtrXTtyZXR1cm4gbX12YXIgbW5lPWJuZTtmdW5jdGlvbiB2bmUoeCl7cmV0dXJuIGtTKHgpP3QkKHgsYkkpOlpyKHgpP1t4XTptbmUoZSQocyQoeCkpKX12YXIgd25lPXZuZSx5bmU9e2RhdGE6ZnVuY3Rpb24obSl7dmFyIGs9e2ZpZWxkOiJkYXRhIixiaW5kaW5nRXZlbnQ6ImRhdGEiLGFsbG93QmluZGluZzohMSxhbGxvd1NldHRpbmc6ITEsYWxsb3dHZXR0aW5nOiExLHNldHRpbmdFdmVudDoiZGF0YSIsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITEsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsaW1tdXRhYmxlS2V5czp7fSx1cGRhdGVTdHlsZTohMSxiZWZvcmVHZXQ6ZnVuY3Rpb24oTSl7fSxiZWZvcmVTZXQ6ZnVuY3Rpb24oTSxPKXt9LG9uU2V0OmZ1bmN0aW9uKE0pe30sY2FuU2V0OmZ1bmN0aW9uKE0pe3JldHVybiEwfX07cmV0dXJuIG09eXQoe30sayxtKSxmdW5jdGlvbihNLE8pe3ZhciBOPW0sJD10aGlzLEg9JC5sZW5ndGghPT12b2lkIDAscT1IPyQ6WyRdLFk9SD8kWzBdOiQ7aWYoYmUoTSkpe3ZhciBaPU0uaW5kZXhPZigiLiIpIT09LTEsY2U9WiYmd25lKE0pO2lmKE4uYWxsb3dHZXR0aW5nJiZPPT09dm9pZCAwKXt2YXIgdmU7cmV0dXJuIFkmJihOLmJlZm9yZUdldChZKSxjZSYmWS5fcHJpdmF0ZVtOLmZpZWxkXVtNXT09PXZvaWQgMD92ZT10bmUoWS5fcHJpdmF0ZVtOLmZpZWxkXSxjZSk6dmU9WS5fcHJpdmF0ZVtOLmZpZWxkXVtNXSksdmV9ZWxzZSBpZihOLmFsbG93U2V0dGluZyYmTyE9PXZvaWQgMCl7dmFyIG1lPSFOLmltbXV0YWJsZUtleXNbTV07aWYobWUpe3ZhciBMZT1iKHt9LE0sTyk7Ti5iZWZvcmVTZXQoJCxMZSk7Zm9yKHZhciBfZT0wLEVlPXEubGVuZ3RoO19lPEVlO19lKyspe3ZhciBCZT1xW19lXTtOLmNhblNldChCZSkmJihjZSYmWS5fcHJpdmF0ZVtOLmZpZWxkXVtNXT09PXZvaWQgMD9wbmUoQmUuX3ByaXZhdGVbTi5maWVsZF0sY2UsTyk6QmUuX3ByaXZhdGVbTi5maWVsZF1bTV09Tyl9Ti51cGRhdGVTdHlsZSYmJC51cGRhdGVTdHlsZSgpLE4ub25TZXQoJCksTi5zZXR0aW5nVHJpZ2dlcnNFdmVudCYmJFtOLnRyaWdnZXJGbk5hbWVdKE4uc2V0dGluZ0V2ZW50KX19fWVsc2UgaWYoTi5hbGxvd1NldHRpbmcmJnNlKE0pKXt2YXIgUmU9TSxWZSxjdCxzdD1PYmplY3Qua2V5cyhSZSk7Ti5iZWZvcmVTZXQoJCxSZSk7Zm9yKHZhciBZZT0wO1llPHN0Lmxlbmd0aDtZZSsrKXtWZT1zdFtZZV0sY3Q9UmVbVmVdO3ZhciBtdD0hTi5pbW11dGFibGVLZXlzW1ZlXTtpZihtdClmb3IodmFyIEplPTA7SmU8cS5sZW5ndGg7SmUrKyl7dmFyIEx0PXFbSmVdO04uY2FuU2V0KEx0KSYmKEx0Ll9wcml2YXRlW04uZmllbGRdW1ZlXT1jdCl9fU4udXBkYXRlU3R5bGUmJiQudXBkYXRlU3R5bGUoKSxOLm9uU2V0KCQpLE4uc2V0dGluZ1RyaWdnZXJzRXZlbnQmJiRbTi50cmlnZ2VyRm5OYW1lXShOLnNldHRpbmdFdmVudCl9ZWxzZSBpZihOLmFsbG93QmluZGluZyYmYWUoTSkpe3ZhciBNdD1NOyQub24oTi5iaW5kaW5nRXZlbnQsTXQpfWVsc2UgaWYoTi5hbGxvd0dldHRpbmcmJk09PT12b2lkIDApe3ZhciB1dDtyZXR1cm4gWSYmKE4uYmVmb3JlR2V0KFkpLHV0PVkuX3ByaXZhdGVbTi5maWVsZF0pLHV0fXJldHVybiAkfX0scmVtb3ZlRGF0YTpmdW5jdGlvbihtKXt2YXIgaz17ZmllbGQ6ImRhdGEiLGV2ZW50OiJkYXRhIix0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIix0cmlnZ2VyRXZlbnQ6ITEsaW1tdXRhYmxlS2V5czp7fX07cmV0dXJuIG09eXQoe30sayxtKSxmdW5jdGlvbihNKXt2YXIgTz1tLE49dGhpcywkPU4ubGVuZ3RoIT09dm9pZCAwLEg9JD9OOltOXTtpZihiZShNKSl7Zm9yKHZhciBxPU0uc3BsaXQoL1xzKy8pLFk9cS5sZW5ndGgsWj0wO1o8WTtaKyspe3ZhciBjZT1xW1pdO2lmKCFTZShjZSkpe3ZhciB2ZT0hTy5pbW11dGFibGVLZXlzW2NlXTtpZih2ZSlmb3IodmFyIG1lPTAsTGU9SC5sZW5ndGg7bWU8TGU7bWUrKylIW21lXS5fcHJpdmF0ZVtPLmZpZWxkXVtjZV09dm9pZCAwfX1PLnRyaWdnZXJFdmVudCYmTltPLnRyaWdnZXJGbk5hbWVdKE8uZXZlbnQpfWVsc2UgaWYoTT09PXZvaWQgMCl7Zm9yKHZhciBfZT0wLEVlPUgubGVuZ3RoO19lPEVlO19lKyspZm9yKHZhciBCZT1IW19lXS5fcHJpdmF0ZVtPLmZpZWxkXSxSZT1PYmplY3Qua2V5cyhCZSksVmU9MDtWZTxSZS5sZW5ndGg7VmUrKyl7dmFyIGN0PVJlW1ZlXSxzdD0hTy5pbW11dGFibGVLZXlzW2N0XTtzdCYmKEJlW2N0XT12b2lkIDApfU8udHJpZ2dlckV2ZW50JiZOW08udHJpZ2dlckZuTmFtZV0oTy5ldmVudCl9cmV0dXJuIE59fX0seG5lPXtldmVudEFsaWFzZXNPbjpmdW5jdGlvbihtKXt2YXIgaz1tO2suYWRkTGlzdGVuZXI9ay5saXN0ZW49ay5iaW5kPWsub24say51bmxpc3Rlbj1rLnVuYmluZD1rLm9mZj1rLnJlbW92ZUxpc3RlbmVyLGsudHJpZ2dlcj1rLmVtaXQsay5wb249ay5wcm9taXNlT249ZnVuY3Rpb24oUyxNKXt2YXIgTz10aGlzLE49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiBuZXcgaTgoZnVuY3Rpb24oJCxIKXt2YXIgcT1mdW5jdGlvbih2ZSl7Ty5vZmYuYXBwbHkoTyxaKSwkKHZlKX0sWT1OLmNvbmNhdChbcV0pLFo9WS5jb25jYXQoW10pO08ub24uYXBwbHkoTyxZKX0pfX19LGZ1PXt9O1t3ZWUseW5lLHhuZV0uZm9yRWFjaChmdW5jdGlvbih4KXt5dChmdSx4KX0pO3ZhciBrbmU9e2FuaW1hdGU6ZnUuYW5pbWF0ZSgpLGFuaW1hdGlvbjpmdS5hbmltYXRpb24oKSxhbmltYXRlZDpmdS5hbmltYXRlZCgpLGNsZWFyUXVldWU6ZnUuY2xlYXJRdWV1ZSgpLGRlbGF5OmZ1LmRlbGF5KCksZGVsYXlBbmltYXRpb246ZnUuZGVsYXlBbmltYXRpb24oKSxzdG9wOmZ1LnN0b3AoKX0sU1M9e2NsYXNzZXM6ZnVuY3Rpb24obSl7dmFyIGs9dGhpcztpZihtPT09dm9pZCAwKXt2YXIgUz1bXTtyZXR1cm4ga1swXS5fcHJpdmF0ZS5jbGFzc2VzLmZvckVhY2goZnVuY3Rpb24obWUpe3JldHVybiBTLnB1c2gobWUpfSksU31lbHNlIG5lKG0pfHwobT0obXx8IiIpLm1hdGNoKC9cUysvZyl8fFtdKTtmb3IodmFyIE09W10sTz1uZXcgUTcobSksTj0wO048ay5sZW5ndGg7TisrKXtmb3IodmFyICQ9a1tOXSxIPSQuX3ByaXZhdGUscT1ILmNsYXNzZXMsWT0hMSxaPTA7WjxtLmxlbmd0aDtaKyspe3ZhciBjZT1tW1pdLHZlPXEuaGFzKGNlKTtpZighdmUpe1k9ITA7YnJlYWt9fVl8fChZPXEuc2l6ZSE9PW0ubGVuZ3RoKSxZJiYoSC5jbGFzc2VzPU8sTS5wdXNoKCQpKX1yZXR1cm4gTS5sZW5ndGg+MCYmdGhpcy5zcGF3bihNKS51cGRhdGVTdHlsZSgpLmVtaXQoImNsYXNzIiksa30sYWRkQ2xhc3M6ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMudG9nZ2xlQ2xhc3MobSwhMCl9LGhhc0NsYXNzOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXNbMF07cmV0dXJuIGshPW51bGwmJmsuX3ByaXZhdGUuY2xhc3Nlcy5oYXMobSl9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKG0sayl7bmUobSl8fChtPW0ubWF0Y2goL1xTKy9nKXx8W10pO2Zvcih2YXIgUz10aGlzLE09az09PXZvaWQgMCxPPVtdLE49MCwkPVMubGVuZ3RoO048JDtOKyspZm9yKHZhciBIPVNbTl0scT1ILl9wcml2YXRlLmNsYXNzZXMsWT0hMSxaPTA7WjxtLmxlbmd0aDtaKyspe3ZhciBjZT1tW1pdLHZlPXEuaGFzKGNlKSxtZT0hMTtrfHxNJiYhdmU/KHEuYWRkKGNlKSxtZT0hMCk6KCFrfHxNJiZ2ZSkmJihxLmRlbGV0ZShjZSksbWU9ITApLCFZJiZtZSYmKE8ucHVzaChIKSxZPSEwKX1yZXR1cm4gTy5sZW5ndGg+MCYmdGhpcy5zcGF3bihPKS51cGRhdGVTdHlsZSgpLmVtaXQoImNsYXNzIiksU30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMudG9nZ2xlQ2xhc3MobSwhMSl9LGZsYXNoQ2xhc3M6ZnVuY3Rpb24obSxrKXt2YXIgUz10aGlzO2lmKGs9PW51bGwpaz0yNTA7ZWxzZSBpZihrPT09MClyZXR1cm4gUztyZXR1cm4gUy5hZGRDbGFzcyhtKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Uy5yZW1vdmVDbGFzcyhtKX0sayksU319O1NTLmNsYXNzTmFtZT1TUy5jbGFzc05hbWVzPVNTLmNsYXNzZXM7dmFyIFJjPXttZXRhQ2hhcjoiW1xcIVxcXCJcXCNcXCRcXCVcXCZcXCdcXChcXClcXCpcXCtcXCxcXC5cXC9cXDpcXDtcXDxcXD1cXD5cXD9cXEBcXFtcXF1cXF5cXGBcXHtcXHxcXH1cXH5dIixjb21wYXJhdG9yT3A6Ij18XFwhPXw+fD49fDx8PD18XFwkPXxcXF49fFxcKj0iLGJvb2xPcDoiXFw/fFxcIXxcXF4iLHN0cmluZzpgIig/OlxcXFwifFteIl0pKiJ8Jyg/OlxcXFwnfFteJ10pKidgLG51bWJlcjpsbixtZXRhOiJkZWdyZWV8aW5kZWdyZWV8b3V0ZGVncmVlIixzZXBhcmF0b3I6IlxccyosXFxzKiIsZGVzY2VuZGFudDoiXFxzKyIsY2hpbGQ6Ilxccys+XFxzKyIsc3ViamVjdDoiXFwkIixncm91cDoibm9kZXxlZGdlfFxcKiIsZGlyZWN0ZWRFZGdlOiJcXHMrLT5cXHMrIix1bmRpcmVjdGVkRWRnZToiXFxzKzwtPlxccysifTtSYy52YXJpYWJsZT0iKD86W1xcdy0uXXwoPzpcXFxcIitSYy5tZXRhQ2hhcisiKSkrIixSYy5jbGFzc05hbWU9Iig/OltcXHctXXwoPzpcXFxcIitSYy5tZXRhQ2hhcisiKSkrIixSYy52YWx1ZT1SYy5zdHJpbmcrInwiK1JjLm51bWJlcixSYy5pZD1SYy52YXJpYWJsZSxmdW5jdGlvbigpe3ZhciB4LG0saztmb3IoeD1SYy5jb21wYXJhdG9yT3Auc3BsaXQoInwiKSxrPTA7azx4Lmxlbmd0aDtrKyspbT14W2tdLFJjLmNvbXBhcmF0b3JPcCs9InxAIittO2Zvcih4PVJjLmNvbXBhcmF0b3JPcC5zcGxpdCgifCIpLGs9MDtrPHgubGVuZ3RoO2srKyltPXhba10sIShtLmluZGV4T2YoIiEiKT49MCkmJm0hPT0iPSImJihSYy5jb21wYXJhdG9yT3ArPSJ8XFwhIittKX0oKTt2YXIgUHU9ZnVuY3Rpb24oKXtyZXR1cm57Y2hlY2tzOltdfX0saHM9e0dST1VQOjAsQ09MTEVDVElPTjoxLEZJTFRFUjoyLERBVEFfQ09NUEFSRTozLERBVEFfRVhJU1Q6NCxEQVRBX0JPT0w6NSxNRVRBX0NPTVBBUkU6NixTVEFURTo3LElEOjgsQ0xBU1M6OSxVTkRJUkVDVEVEX0VER0U6MTAsRElSRUNURURfRURHRToxMSxOT0RFX1NPVVJDRToxMixOT0RFX1RBUkdFVDoxMyxOT0RFX05FSUdIQk9SOjE0LENISUxEOjE1LERFU0NFTkRBTlQ6MTYsUEFSRU5UOjE3LEFOQ0VTVE9SOjE4LENPTVBPVU5EX1NQTElUOjE5LFRSVUU6MjB9LG1JPVt7c2VsZWN0b3I6IjpzZWxlY3RlZCIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4gbS5zZWxlY3RlZCgpfX0se3NlbGVjdG9yOiI6dW5zZWxlY3RlZCIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4hbS5zZWxlY3RlZCgpfX0se3NlbGVjdG9yOiI6c2VsZWN0YWJsZSIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4gbS5zZWxlY3RhYmxlKCl9fSx7c2VsZWN0b3I6Ijp1bnNlbGVjdGFibGUiLG1hdGNoZXM6ZnVuY3Rpb24obSl7cmV0dXJuIW0uc2VsZWN0YWJsZSgpfX0se3NlbGVjdG9yOiI6bG9ja2VkIixtYXRjaGVzOmZ1bmN0aW9uKG0pe3JldHVybiBtLmxvY2tlZCgpfX0se3NlbGVjdG9yOiI6dW5sb2NrZWQiLG1hdGNoZXM6ZnVuY3Rpb24obSl7cmV0dXJuIW0ubG9ja2VkKCl9fSx7c2VsZWN0b3I6Ijp2aXNpYmxlIixtYXRjaGVzOmZ1bmN0aW9uKG0pe3JldHVybiBtLnZpc2libGUoKX19LHtzZWxlY3RvcjoiOmhpZGRlbiIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4hbS52aXNpYmxlKCl9fSx7c2VsZWN0b3I6Ijp0cmFuc3BhcmVudCIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4gbS50cmFuc3BhcmVudCgpfX0se3NlbGVjdG9yOiI6Z3JhYmJlZCIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4gbS5ncmFiYmVkKCl9fSx7c2VsZWN0b3I6IjpmcmVlIixtYXRjaGVzOmZ1bmN0aW9uKG0pe3JldHVybiFtLmdyYWJiZWQoKX19LHtzZWxlY3RvcjoiOnJlbW92ZWQiLG1hdGNoZXM6ZnVuY3Rpb24obSl7cmV0dXJuIG0ucmVtb3ZlZCgpfX0se3NlbGVjdG9yOiI6aW5zaWRlIixtYXRjaGVzOmZ1bmN0aW9uKG0pe3JldHVybiFtLnJlbW92ZWQoKX19LHtzZWxlY3RvcjoiOmdyYWJiYWJsZSIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4gbS5ncmFiYmFibGUoKX19LHtzZWxlY3RvcjoiOnVuZ3JhYmJhYmxlIixtYXRjaGVzOmZ1bmN0aW9uKG0pe3JldHVybiFtLmdyYWJiYWJsZSgpfX0se3NlbGVjdG9yOiI6YW5pbWF0ZWQiLG1hdGNoZXM6ZnVuY3Rpb24obSl7cmV0dXJuIG0uYW5pbWF0ZWQoKX19LHtzZWxlY3RvcjoiOnVuYW5pbWF0ZWQiLG1hdGNoZXM6ZnVuY3Rpb24obSl7cmV0dXJuIW0uYW5pbWF0ZWQoKX19LHtzZWxlY3RvcjoiOnBhcmVudCIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4gbS5pc1BhcmVudCgpfX0se3NlbGVjdG9yOiI6Y2hpbGRsZXNzIixtYXRjaGVzOmZ1bmN0aW9uKG0pe3JldHVybiBtLmlzQ2hpbGRsZXNzKCl9fSx7c2VsZWN0b3I6IjpjaGlsZCIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4gbS5pc0NoaWxkKCl9fSx7c2VsZWN0b3I6IjpvcnBoYW4iLG1hdGNoZXM6ZnVuY3Rpb24obSl7cmV0dXJuIG0uaXNPcnBoYW4oKX19LHtzZWxlY3RvcjoiOm5vbm9ycGhhbiIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4gbS5pc0NoaWxkKCl9fSx7c2VsZWN0b3I6Ijpjb21wb3VuZCIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4gbS5pc05vZGUoKT9tLmlzUGFyZW50KCk6bS5zb3VyY2UoKS5pc1BhcmVudCgpfHxtLnRhcmdldCgpLmlzUGFyZW50KCl9fSx7c2VsZWN0b3I6Ijpsb29wIixtYXRjaGVzOmZ1bmN0aW9uKG0pe3JldHVybiBtLmlzTG9vcCgpfX0se3NlbGVjdG9yOiI6c2ltcGxlIixtYXRjaGVzOmZ1bmN0aW9uKG0pe3JldHVybiBtLmlzU2ltcGxlKCl9fSx7c2VsZWN0b3I6IjphY3RpdmUiLG1hdGNoZXM6ZnVuY3Rpb24obSl7cmV0dXJuIG0uYWN0aXZlKCl9fSx7c2VsZWN0b3I6IjppbmFjdGl2ZSIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4hbS5hY3RpdmUoKX19LHtzZWxlY3RvcjoiOmJhY2tncm91bmRpbmciLG1hdGNoZXM6ZnVuY3Rpb24obSl7cmV0dXJuIG0uYmFja2dyb3VuZGluZygpfX0se3NlbGVjdG9yOiI6bm9uYmFja2dyb3VuZGluZyIsbWF0Y2hlczpmdW5jdGlvbihtKXtyZXR1cm4hbS5iYWNrZ3JvdW5kaW5nKCl9fV0uc29ydChmdW5jdGlvbih4LG0pe3JldHVybiB6cih4LnNlbGVjdG9yLG0uc2VsZWN0b3IpfSksRW5lPWZ1bmN0aW9uKCl7Zm9yKHZhciB4PXt9LG0saz0wO2s8bUkubGVuZ3RoO2srKyltPW1JW2tdLHhbbS5zZWxlY3Rvcl09bS5tYXRjaGVzO3JldHVybiB4fSgpLFRuZT1mdW5jdGlvbihtLGspe3JldHVybiBFbmVbbV0oayl9LENuZT0iKCIrbUkubWFwKGZ1bmN0aW9uKHgpe3JldHVybiB4LnNlbGVjdG9yfSkuam9pbigifCIpKyIpIixjOD1mdW5jdGlvbihtKXtyZXR1cm4gbS5yZXBsYWNlKG5ldyBSZWdFeHAoIlxcXFwoIitSYy5tZXRhQ2hhcisiKSIsImciKSxmdW5jdGlvbihrLFMpe3JldHVybiBTfSl9LHltPWZ1bmN0aW9uKG0sayxTKXttW20ubGVuZ3RoLTFdPVN9LFE5PVt7bmFtZToiZ3JvdXAiLHF1ZXJ5OiEwLHJlZ2V4OiIoIitSYy5ncm91cCsiKSIscG9wdWxhdGU6ZnVuY3Rpb24obSxrLFMpe3ZhciBNPXkoUywxKSxPPU1bMF07ay5jaGVja3MucHVzaCh7dHlwZTpocy5HUk9VUCx2YWx1ZTpPPT09IioiP086TysicyJ9KX19LHtuYW1lOiJzdGF0ZSIscXVlcnk6ITAscmVnZXg6Q25lLHBvcHVsYXRlOmZ1bmN0aW9uKG0sayxTKXt2YXIgTT15KFMsMSksTz1NWzBdO2suY2hlY2tzLnB1c2goe3R5cGU6aHMuU1RBVEUsdmFsdWU6T30pfX0se25hbWU6ImlkIixxdWVyeTohMCxyZWdleDoiXFwjKCIrUmMuaWQrIikiLHBvcHVsYXRlOmZ1bmN0aW9uKG0sayxTKXt2YXIgTT15KFMsMSksTz1NWzBdO2suY2hlY2tzLnB1c2goe3R5cGU6aHMuSUQsdmFsdWU6YzgoTyl9KX19LHtuYW1lOiJjbGFzc05hbWUiLHF1ZXJ5OiEwLHJlZ2V4OiJcXC4oIitSYy5jbGFzc05hbWUrIikiLHBvcHVsYXRlOmZ1bmN0aW9uKG0sayxTKXt2YXIgTT15KFMsMSksTz1NWzBdO2suY2hlY2tzLnB1c2goe3R5cGU6aHMuQ0xBU1MsdmFsdWU6YzgoTyl9KX19LHtuYW1lOiJkYXRhRXhpc3RzIixxdWVyeTohMCxyZWdleDoiXFxbXFxzKigiK1JjLnZhcmlhYmxlKyIpXFxzKlxcXSIscG9wdWxhdGU6ZnVuY3Rpb24obSxrLFMpe3ZhciBNPXkoUywxKSxPPU1bMF07ay5jaGVja3MucHVzaCh7dHlwZTpocy5EQVRBX0VYSVNULGZpZWxkOmM4KE8pfSl9fSx7bmFtZToiZGF0YUNvbXBhcmUiLHF1ZXJ5OiEwLHJlZ2V4OiJcXFtcXHMqKCIrUmMudmFyaWFibGUrIilcXHMqKCIrUmMuY29tcGFyYXRvck9wKyIpXFxzKigiK1JjLnZhbHVlKyIpXFxzKlxcXSIscG9wdWxhdGU6ZnVuY3Rpb24obSxrLFMpe3ZhciBNPXkoUywzKSxPPU1bMF0sTj1NWzFdLCQ9TVsyXSxIPW5ldyBSZWdFeHAoIl4iK1JjLnN0cmluZysiJCIpLmV4ZWMoJCkhPW51bGw7SD8kPSQuc3Vic3RyaW5nKDEsJC5sZW5ndGgtMSk6JD1wYXJzZUZsb2F0KCQpLGsuY2hlY2tzLnB1c2goe3R5cGU6aHMuREFUQV9DT01QQVJFLGZpZWxkOmM4KE8pLG9wZXJhdG9yOk4sdmFsdWU6JH0pfX0se25hbWU6ImRhdGFCb29sIixxdWVyeTohMCxyZWdleDoiXFxbXFxzKigiK1JjLmJvb2xPcCsiKVxccyooIitSYy52YXJpYWJsZSsiKVxccypcXF0iLHBvcHVsYXRlOmZ1bmN0aW9uKG0sayxTKXt2YXIgTT15KFMsMiksTz1NWzBdLE49TVsxXTtrLmNoZWNrcy5wdXNoKHt0eXBlOmhzLkRBVEFfQk9PTCxmaWVsZDpjOChOKSxvcGVyYXRvcjpPfSl9fSx7bmFtZToibWV0YUNvbXBhcmUiLHF1ZXJ5OiEwLHJlZ2V4OiJcXFtcXFtcXHMqKCIrUmMubWV0YSsiKVxccyooIitSYy5jb21wYXJhdG9yT3ArIilcXHMqKCIrUmMubnVtYmVyKyIpXFxzKlxcXVxcXSIscG9wdWxhdGU6ZnVuY3Rpb24obSxrLFMpe3ZhciBNPXkoUywzKSxPPU1bMF0sTj1NWzFdLCQ9TVsyXTtrLmNoZWNrcy5wdXNoKHt0eXBlOmhzLk1FVEFfQ09NUEFSRSxmaWVsZDpjOChPKSxvcGVyYXRvcjpOLHZhbHVlOnBhcnNlRmxvYXQoJCl9KX19LHtuYW1lOiJuZXh0UXVlcnkiLHNlcGFyYXRvcjohMCxyZWdleDpSYy5zZXBhcmF0b3IscG9wdWxhdGU6ZnVuY3Rpb24obSxrKXt2YXIgUz1tLmN1cnJlbnRTdWJqZWN0LE09bS5lZGdlQ291bnQsTz1tLmNvbXBvdW5kQ291bnQsTj1tW20ubGVuZ3RoLTFdO1MhPW51bGwmJihOLnN1YmplY3Q9UyxtLmN1cnJlbnRTdWJqZWN0PW51bGwpLE4uZWRnZUNvdW50PU0sTi5jb21wb3VuZENvdW50PU8sbS5lZGdlQ291bnQ9MCxtLmNvbXBvdW5kQ291bnQ9MDt2YXIgJD1tW20ubGVuZ3RoKytdPVB1KCk7cmV0dXJuICR9fSx7bmFtZToiZGlyZWN0ZWRFZGdlIixzZXBhcmF0b3I6ITAscmVnZXg6UmMuZGlyZWN0ZWRFZGdlLHBvcHVsYXRlOmZ1bmN0aW9uKG0sayl7aWYobS5jdXJyZW50U3ViamVjdD09bnVsbCl7dmFyIFM9UHUoKSxNPWssTz1QdSgpO3JldHVybiBTLmNoZWNrcy5wdXNoKHt0eXBlOmhzLkRJUkVDVEVEX0VER0Usc291cmNlOk0sdGFyZ2V0Ok99KSx5bShtLGssUyksbS5lZGdlQ291bnQrKyxPfWVsc2V7dmFyIE49UHUoKSwkPWssSD1QdSgpO3JldHVybiBOLmNoZWNrcy5wdXNoKHt0eXBlOmhzLk5PREVfU09VUkNFLHNvdXJjZTokLHRhcmdldDpIfSkseW0obSxrLE4pLG0uZWRnZUNvdW50KyssSH19fSx7bmFtZToidW5kaXJlY3RlZEVkZ2UiLHNlcGFyYXRvcjohMCxyZWdleDpSYy51bmRpcmVjdGVkRWRnZSxwb3B1bGF0ZTpmdW5jdGlvbihtLGspe2lmKG0uY3VycmVudFN1YmplY3Q9PW51bGwpe3ZhciBTPVB1KCksTT1rLE89UHUoKTtyZXR1cm4gUy5jaGVja3MucHVzaCh7dHlwZTpocy5VTkRJUkVDVEVEX0VER0Usbm9kZXM6W00sT119KSx5bShtLGssUyksbS5lZGdlQ291bnQrKyxPfWVsc2V7dmFyIE49UHUoKSwkPWssSD1QdSgpO3JldHVybiBOLmNoZWNrcy5wdXNoKHt0eXBlOmhzLk5PREVfTkVJR0hCT1Isbm9kZTokLG5laWdoYm9yOkh9KSx5bShtLGssTiksSH19fSx7bmFtZToiY2hpbGQiLHNlcGFyYXRvcjohMCxyZWdleDpSYy5jaGlsZCxwb3B1bGF0ZTpmdW5jdGlvbihtLGspe2lmKG0uY3VycmVudFN1YmplY3Q9PW51bGwpe3ZhciBTPVB1KCksTT1QdSgpLE89bVttLmxlbmd0aC0xXTtyZXR1cm4gUy5jaGVja3MucHVzaCh7dHlwZTpocy5DSElMRCxwYXJlbnQ6TyxjaGlsZDpNfSkseW0obSxrLFMpLG0uY29tcG91bmRDb3VudCsrLE19ZWxzZSBpZihtLmN1cnJlbnRTdWJqZWN0PT09ayl7dmFyIE49UHUoKSwkPW1bbS5sZW5ndGgtMV0sSD1QdSgpLHE9UHUoKSxZPVB1KCksWj1QdSgpO3JldHVybiBOLmNoZWNrcy5wdXNoKHt0eXBlOmhzLkNPTVBPVU5EX1NQTElULGxlZnQ6JCxyaWdodDpILHN1YmplY3Q6cX0pLHEuY2hlY2tzPWsuY2hlY2tzLGsuY2hlY2tzPVt7dHlwZTpocy5UUlVFfV0sWi5jaGVja3MucHVzaCh7dHlwZTpocy5UUlVFfSksSC5jaGVja3MucHVzaCh7dHlwZTpocy5QQVJFTlQscGFyZW50OlosY2hpbGQ6WX0pLHltKG0sJCxOKSxtLmN1cnJlbnRTdWJqZWN0PXEsbS5jb21wb3VuZENvdW50KyssWX1lbHNle3ZhciBjZT1QdSgpLHZlPVB1KCksbWU9W3t0eXBlOmhzLlBBUkVOVCxwYXJlbnQ6Y2UsY2hpbGQ6dmV9XTtyZXR1cm4gY2UuY2hlY2tzPWsuY2hlY2tzLGsuY2hlY2tzPW1lLG0uY29tcG91bmRDb3VudCsrLHZlfX19LHtuYW1lOiJkZXNjZW5kYW50IixzZXBhcmF0b3I6ITAscmVnZXg6UmMuZGVzY2VuZGFudCxwb3B1bGF0ZTpmdW5jdGlvbihtLGspe2lmKG0uY3VycmVudFN1YmplY3Q9PW51bGwpe3ZhciBTPVB1KCksTT1QdSgpLE89bVttLmxlbmd0aC0xXTtyZXR1cm4gUy5jaGVja3MucHVzaCh7dHlwZTpocy5ERVNDRU5EQU5ULGFuY2VzdG9yOk8sZGVzY2VuZGFudDpNfSkseW0obSxrLFMpLG0uY29tcG91bmRDb3VudCsrLE19ZWxzZSBpZihtLmN1cnJlbnRTdWJqZWN0PT09ayl7dmFyIE49UHUoKSwkPW1bbS5sZW5ndGgtMV0sSD1QdSgpLHE9UHUoKSxZPVB1KCksWj1QdSgpO3JldHVybiBOLmNoZWNrcy5wdXNoKHt0eXBlOmhzLkNPTVBPVU5EX1NQTElULGxlZnQ6JCxyaWdodDpILHN1YmplY3Q6cX0pLHEuY2hlY2tzPWsuY2hlY2tzLGsuY2hlY2tzPVt7dHlwZTpocy5UUlVFfV0sWi5jaGVja3MucHVzaCh7dHlwZTpocy5UUlVFfSksSC5jaGVja3MucHVzaCh7dHlwZTpocy5BTkNFU1RPUixhbmNlc3RvcjpaLGRlc2NlbmRhbnQ6WX0pLHltKG0sJCxOKSxtLmN1cnJlbnRTdWJqZWN0PXEsbS5jb21wb3VuZENvdW50KyssWX1lbHNle3ZhciBjZT1QdSgpLHZlPVB1KCksbWU9W3t0eXBlOmhzLkFOQ0VTVE9SLGFuY2VzdG9yOmNlLGRlc2NlbmRhbnQ6dmV9XTtyZXR1cm4gY2UuY2hlY2tzPWsuY2hlY2tzLGsuY2hlY2tzPW1lLG0uY29tcG91bmRDb3VudCsrLHZlfX19LHtuYW1lOiJzdWJqZWN0Iixtb2RpZmllcjohMCxyZWdleDpSYy5zdWJqZWN0LHBvcHVsYXRlOmZ1bmN0aW9uKG0sayl7aWYobS5jdXJyZW50U3ViamVjdCE9bnVsbCYmbS5jdXJyZW50U3ViamVjdCE9PWspcmV0dXJuIGh1KCJSZWRlZmluaXRpb24gb2Ygc3ViamVjdCBpbiBzZWxlY3RvciBgIittLnRvU3RyaW5nKCkrImAiKSwhMTttLmN1cnJlbnRTdWJqZWN0PWs7dmFyIFM9bVttLmxlbmd0aC0xXSxNPVMuY2hlY2tzWzBdLE89TT09bnVsbD9udWxsOk0udHlwZTtPPT09aHMuRElSRUNURURfRURHRT9NLnR5cGU9aHMuTk9ERV9UQVJHRVQ6Tz09PWhzLlVORElSRUNURURfRURHRSYmKE0udHlwZT1ocy5OT0RFX05FSUdIQk9SLE0ubm9kZT1NLm5vZGVzWzFdLE0ubmVpZ2hib3I9TS5ub2Rlc1swXSxNLm5vZGVzPW51bGwpfX1dO1E5LmZvckVhY2goZnVuY3Rpb24oeCl7cmV0dXJuIHgucmVnZXhPYmo9bmV3IFJlZ0V4cCgiXiIreC5yZWdleCl9KTt2YXIgU25lPWZ1bmN0aW9uKG0pe2Zvcih2YXIgayxTLE0sTz0wO088UTkubGVuZ3RoO08rKyl7dmFyIE49UTlbT10sJD1OLm5hbWUsSD1tLm1hdGNoKE4ucmVnZXhPYmopO2lmKEghPW51bGwpe1M9SCxrPU4sTT0kO3ZhciBxPUhbMF07bT1tLnN1YnN0cmluZyhxLmxlbmd0aCk7YnJlYWt9fXJldHVybntleHByOmssbWF0Y2g6UyxuYW1lOk0scmVtYWluaW5nOm19fSx2ST1mdW5jdGlvbihtKXt2YXIgaz1tLm1hdGNoKC9eXHMrLyk7aWYoayl7dmFyIFM9a1swXTttPW0uc3Vic3RyaW5nKFMubGVuZ3RoKX1yZXR1cm4gbX0sX25lPWZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMsUz1rLmlucHV0VGV4dD1tLE09a1swXT1QdSgpO2ZvcihrLmxlbmd0aD0xLFM9dkkoUyk7Oyl7dmFyIE89U25lKFMpO2lmKE8uZXhwcj09bnVsbClyZXR1cm4gaHUoIlRoZSBzZWxlY3RvciBgIittKyJgaXMgaW52YWxpZCIpLCExO3ZhciBOPU8ubWF0Y2guc2xpY2UoMSksJD1PLmV4cHIucG9wdWxhdGUoayxNLE4pO2lmKCQ9PT0hMSlyZXR1cm4hMTtpZigkIT1udWxsJiYoTT0kKSxTPU8ucmVtYWluaW5nLFMubWF0Y2goL15ccyokLykpYnJlYWt9dmFyIEg9a1trLmxlbmd0aC0xXTtrLmN1cnJlbnRTdWJqZWN0IT1udWxsJiYoSC5zdWJqZWN0PWsuY3VycmVudFN1YmplY3QpLEguZWRnZUNvdW50PWsuZWRnZUNvdW50LEguY29tcG91bmRDb3VudD1rLmNvbXBvdW5kQ291bnQ7Zm9yKHZhciBxPTA7cTxrLmxlbmd0aDtxKyspe3ZhciBZPWtbcV07aWYoWS5jb21wb3VuZENvdW50PjAmJlkuZWRnZUNvdW50PjApcmV0dXJuIGh1KCJUaGUgc2VsZWN0b3IgYCIrbSsiYCBpcyBpbnZhbGlkIGJlY2F1c2UgaXQgdXNlcyBib3RoIGEgY29tcG91bmQgc2VsZWN0b3IgYW5kIGFuIGVkZ2Ugc2VsZWN0b3IiKSwhMTtpZihZLmVkZ2VDb3VudD4xKXJldHVybiBodSgiVGhlIHNlbGVjdG9yIGAiK20rImAgaXMgaW52YWxpZCBiZWNhdXNlIGl0IHVzZXMgbXVsdGlwbGUgZWRnZSBzZWxlY3RvcnMiKSwhMTtZLmVkZ2VDb3VudD09PTEmJmh1KCJUaGUgc2VsZWN0b3IgYCIrbSsiYCBpcyBkZXByZWNhdGVkLiAgRWRnZSBzZWxlY3RvcnMgZG8gbm90IHRha2UgZWZmZWN0IG9uIGNoYW5nZXMgdG8gc291cmNlIGFuZCB0YXJnZXQgbm9kZXMgYWZ0ZXIgYW4gZWRnZSBpcyBhZGRlZCwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuICBVc2UgYSBjbGFzcyBvciBkYXRhIHNlbGVjdG9yIG9uIGVkZ2VzIGluc3RlYWQsIHVwZGF0aW5nIHRoZSBjbGFzcyBvciBkYXRhIG9mIGFuIGVkZ2Ugd2hlbiB5b3VyIGFwcCBkZXRlY3RzIGEgY2hhbmdlIGluIHNvdXJjZSBvciB0YXJnZXQgbm9kZXMuIil9cmV0dXJuITB9LEFuZT1mdW5jdGlvbigpe2lmKHRoaXMudG9TdHJpbmdDYWNoZSE9bnVsbClyZXR1cm4gdGhpcy50b1N0cmluZ0NhY2hlO2Zvcih2YXIgbT1mdW5jdGlvbihZKXtyZXR1cm4gWT8/IiJ9LGs9ZnVuY3Rpb24oWSl7cmV0dXJuIGJlKFkpPyciJytZKyciJzptKFkpfSxTPWZ1bmN0aW9uKFkpe3JldHVybiIgIitZKyIgIn0sTT1mdW5jdGlvbihZLFope3ZhciBjZT1ZLnR5cGUsdmU9WS52YWx1ZTtzd2l0Y2goY2Upe2Nhc2UgaHMuR1JPVVA6e3ZhciBtZT1tKHZlKTtyZXR1cm4gbWUuc3Vic3RyaW5nKDAsbWUubGVuZ3RoLTEpfWNhc2UgaHMuREFUQV9DT01QQVJFOnt2YXIgTGU9WS5maWVsZCxfZT1ZLm9wZXJhdG9yO3JldHVybiJbIitMZStTKG0oX2UpKStrKHZlKSsiXSJ9Y2FzZSBocy5EQVRBX0JPT0w6e3ZhciBFZT1ZLm9wZXJhdG9yLEJlPVkuZmllbGQ7cmV0dXJuIlsiK20oRWUpK0JlKyJdIn1jYXNlIGhzLkRBVEFfRVhJU1Q6e3ZhciBSZT1ZLmZpZWxkO3JldHVybiJbIitSZSsiXSJ9Y2FzZSBocy5NRVRBX0NPTVBBUkU6e3ZhciBWZT1ZLm9wZXJhdG9yLGN0PVkuZmllbGQ7cmV0dXJuIltbIitjdCtTKG0oVmUpKStrKHZlKSsiXV0ifWNhc2UgaHMuU1RBVEU6cmV0dXJuIHZlO2Nhc2UgaHMuSUQ6cmV0dXJuIiMiK3ZlO2Nhc2UgaHMuQ0xBU1M6cmV0dXJuIi4iK3ZlO2Nhc2UgaHMuUEFSRU5UOmNhc2UgaHMuQ0hJTEQ6cmV0dXJuIE8oWS5wYXJlbnQsWikrUygiPiIpK08oWS5jaGlsZCxaKTtjYXNlIGhzLkFOQ0VTVE9SOmNhc2UgaHMuREVTQ0VOREFOVDpyZXR1cm4gTyhZLmFuY2VzdG9yLFopKyIgIitPKFkuZGVzY2VuZGFudCxaKTtjYXNlIGhzLkNPTVBPVU5EX1NQTElUOnt2YXIgc3Q9TyhZLmxlZnQsWiksWWU9TyhZLnN1YmplY3QsWiksbXQ9TyhZLnJpZ2h0LFopO3JldHVybiBzdCsoc3QubGVuZ3RoPjA/IiAiOiIiKStZZSttdH1jYXNlIGhzLlRSVUU6cmV0dXJuIiJ9fSxPPWZ1bmN0aW9uKFksWil7cmV0dXJuIFkuY2hlY2tzLnJlZHVjZShmdW5jdGlvbihjZSx2ZSxtZSl7cmV0dXJuIGNlKyhaPT09WSYmbWU9PT0wPyIkIjoiIikrTSh2ZSxaKX0sIiIpfSxOPSIiLCQ9MDskPHRoaXMubGVuZ3RoOyQrKyl7dmFyIEg9dGhpc1skXTtOKz1PKEgsSC5zdWJqZWN0KSx0aGlzLmxlbmd0aD4xJiYkPHRoaXMubGVuZ3RoLTEmJihOKz0iLCAiKX1yZXR1cm4gdGhpcy50b1N0cmluZ0NhY2hlPU4sTn0sTG5lPXtwYXJzZTpfbmUsdG9TdHJpbmc6QW5lfSxjJD1mdW5jdGlvbihtLGssUyl7dmFyIE0sTz1iZShtKSxOPVgobSksJD1iZShTKSxILHEsWT0hMSxaPSExLGNlPSExO3N3aXRjaChrLmluZGV4T2YoIiEiKT49MCYmKGs9ay5yZXBsYWNlKCIhIiwiIiksWj0hMCksay5pbmRleE9mKCJAIik+PTAmJihrPWsucmVwbGFjZSgiQCIsIiIpLFk9ITApLChPfHwkfHxZKSYmKEg9IU8mJiFOPyIiOiIiK20scT0iIitTKSxZJiYobT1IPUgudG9Mb3dlckNhc2UoKSxTPXE9cS50b0xvd2VyQ2FzZSgpKSxrKXtjYXNlIio9IjpNPUguaW5kZXhPZihxKT49MDticmVhaztjYXNlIiQ9IjpNPUguaW5kZXhPZihxLEgubGVuZ3RoLXEubGVuZ3RoKT49MDticmVhaztjYXNlIl49IjpNPUguaW5kZXhPZihxKT09PTA7YnJlYWs7Y2FzZSI9IjpNPW09PT1TO2JyZWFrO2Nhc2UiPiI6Y2U9ITAsTT1tPlM7YnJlYWs7Y2FzZSI+PSI6Y2U9ITAsTT1tPj1TO2JyZWFrO2Nhc2UiPCI6Y2U9ITAsTT1tPFM7YnJlYWs7Y2FzZSI8PSI6Y2U9ITAsTT1tPD1TO2JyZWFrO2RlZmF1bHQ6TT0hMTticmVha31yZXR1cm4gWiYmKG0hPW51bGx8fCFjZSkmJihNPSFNKSxNfSxNbmU9ZnVuY3Rpb24obSxrKXtzd2l0Y2goayl7Y2FzZSI/IjpyZXR1cm4hIW07Y2FzZSIhIjpyZXR1cm4hbTtjYXNlIl4iOnJldHVybiBtPT09dm9pZCAwfX0sRG5lPWZ1bmN0aW9uKG0pe3JldHVybiBtIT09dm9pZCAwfSx3ST1mdW5jdGlvbihtLGspe3JldHVybiBtLmRhdGEoayl9LEluZT1mdW5jdGlvbihtLGspe3JldHVybiBtW2tdKCl9LHVoPVtdLGdsPWZ1bmN0aW9uKG0sayl7cmV0dXJuIG0uY2hlY2tzLmV2ZXJ5KGZ1bmN0aW9uKFMpe3JldHVybiB1aFtTLnR5cGVdKFMsayl9KX07dWhbaHMuR1JPVVBdPWZ1bmN0aW9uKHgsbSl7dmFyIGs9eC52YWx1ZTtyZXR1cm4gaz09PSIqInx8az09PW0uZ3JvdXAoKX0sdWhbaHMuU1RBVEVdPWZ1bmN0aW9uKHgsbSl7dmFyIGs9eC52YWx1ZTtyZXR1cm4gVG5lKGssbSl9LHVoW2hzLklEXT1mdW5jdGlvbih4LG0pe3ZhciBrPXgudmFsdWU7cmV0dXJuIG0uaWQoKT09PWt9LHVoW2hzLkNMQVNTXT1mdW5jdGlvbih4LG0pe3ZhciBrPXgudmFsdWU7cmV0dXJuIG0uaGFzQ2xhc3Moayl9LHVoW2hzLk1FVEFfQ09NUEFSRV09ZnVuY3Rpb24oeCxtKXt2YXIgaz14LmZpZWxkLFM9eC5vcGVyYXRvcixNPXgudmFsdWU7cmV0dXJuIGMkKEluZShtLGspLFMsTSl9LHVoW2hzLkRBVEFfQ09NUEFSRV09ZnVuY3Rpb24oeCxtKXt2YXIgaz14LmZpZWxkLFM9eC5vcGVyYXRvcixNPXgudmFsdWU7cmV0dXJuIGMkKHdJKG0sayksUyxNKX0sdWhbaHMuREFUQV9CT09MXT1mdW5jdGlvbih4LG0pe3ZhciBrPXguZmllbGQsUz14Lm9wZXJhdG9yO3JldHVybiBNbmUod0kobSxrKSxTKX0sdWhbaHMuREFUQV9FWElTVF09ZnVuY3Rpb24oeCxtKXt2YXIgaz14LmZpZWxkO3JldHVybiB4Lm9wZXJhdG9yLERuZSh3SShtLGspKX0sdWhbaHMuVU5ESVJFQ1RFRF9FREdFXT1mdW5jdGlvbih4LG0pe3ZhciBrPXgubm9kZXNbMF0sUz14Lm5vZGVzWzFdLE09bS5zb3VyY2UoKSxPPW0udGFyZ2V0KCk7cmV0dXJuIGdsKGssTSkmJmdsKFMsTyl8fGdsKFMsTSkmJmdsKGssTyl9LHVoW2hzLk5PREVfTkVJR0hCT1JdPWZ1bmN0aW9uKHgsbSl7cmV0dXJuIGdsKHgubm9kZSxtKSYmbS5uZWlnaGJvcmhvb2QoKS5zb21lKGZ1bmN0aW9uKGspe3JldHVybiBrLmlzTm9kZSgpJiZnbCh4Lm5laWdoYm9yLGspfSl9LHVoW2hzLkRJUkVDVEVEX0VER0VdPWZ1bmN0aW9uKHgsbSl7cmV0dXJuIGdsKHguc291cmNlLG0uc291cmNlKCkpJiZnbCh4LnRhcmdldCxtLnRhcmdldCgpKX0sdWhbaHMuTk9ERV9TT1VSQ0VdPWZ1bmN0aW9uKHgsbSl7cmV0dXJuIGdsKHguc291cmNlLG0pJiZtLm91dGdvZXJzKCkuc29tZShmdW5jdGlvbihrKXtyZXR1cm4gay5pc05vZGUoKSYmZ2woeC50YXJnZXQsayl9KX0sdWhbaHMuTk9ERV9UQVJHRVRdPWZ1bmN0aW9uKHgsbSl7cmV0dXJuIGdsKHgudGFyZ2V0LG0pJiZtLmluY29tZXJzKCkuc29tZShmdW5jdGlvbihrKXtyZXR1cm4gay5pc05vZGUoKSYmZ2woeC5zb3VyY2Usayl9KX0sdWhbaHMuQ0hJTERdPWZ1bmN0aW9uKHgsbSl7cmV0dXJuIGdsKHguY2hpbGQsbSkmJmdsKHgucGFyZW50LG0ucGFyZW50KCkpfSx1aFtocy5QQVJFTlRdPWZ1bmN0aW9uKHgsbSl7cmV0dXJuIGdsKHgucGFyZW50LG0pJiZtLmNoaWxkcmVuKCkuc29tZShmdW5jdGlvbihrKXtyZXR1cm4gZ2woeC5jaGlsZCxrKX0pfSx1aFtocy5ERVNDRU5EQU5UXT1mdW5jdGlvbih4LG0pe3JldHVybiBnbCh4LmRlc2NlbmRhbnQsbSkmJm0uYW5jZXN0b3JzKCkuc29tZShmdW5jdGlvbihrKXtyZXR1cm4gZ2woeC5hbmNlc3RvcixrKX0pfSx1aFtocy5BTkNFU1RPUl09ZnVuY3Rpb24oeCxtKXtyZXR1cm4gZ2woeC5hbmNlc3RvcixtKSYmbS5kZXNjZW5kYW50cygpLnNvbWUoZnVuY3Rpb24oayl7cmV0dXJuIGdsKHguZGVzY2VuZGFudCxrKX0pfSx1aFtocy5DT01QT1VORF9TUExJVF09ZnVuY3Rpb24oeCxtKXtyZXR1cm4gZ2woeC5zdWJqZWN0LG0pJiZnbCh4LmxlZnQsbSkmJmdsKHgucmlnaHQsbSl9LHVoW2hzLlRSVUVdPWZ1bmN0aW9uKCl7cmV0dXJuITB9LHVoW2hzLkNPTExFQ1RJT05dPWZ1bmN0aW9uKHgsbSl7dmFyIGs9eC52YWx1ZTtyZXR1cm4gay5oYXMobSl9LHVoW2hzLkZJTFRFUl09ZnVuY3Rpb24oeCxtKXt2YXIgaz14LnZhbHVlO3JldHVybiBrKG0pfTt2YXIgdSQ9ZnVuY3Rpb24obSl7dmFyIGs9dGhpcztpZihrLmxlbmd0aD09PTEmJmtbMF0uY2hlY2tzLmxlbmd0aD09PTEmJmtbMF0uY2hlY2tzWzBdLnR5cGU9PT1ocy5JRClyZXR1cm4gbS5nZXRFbGVtZW50QnlJZChrWzBdLmNoZWNrc1swXS52YWx1ZSkuY29sbGVjdGlvbigpO3ZhciBTPWZ1bmN0aW9uKE8pe2Zvcih2YXIgTj0wO048ay5sZW5ndGg7TisrKXt2YXIgJD1rW05dO2lmKGdsKCQsTykpcmV0dXJuITB9cmV0dXJuITF9O3JldHVybiBrLnRleHQoKT09bnVsbCYmKFM9ZnVuY3Rpb24oKXtyZXR1cm4hMH0pLG0uZmlsdGVyKFMpfSxPbmU9ZnVuY3Rpb24obSl7Zm9yKHZhciBrPXRoaXMsUz0wO1M8ay5sZW5ndGg7UysrKXt2YXIgTT1rW1NdO2lmKGdsKE0sbSkpcmV0dXJuITB9cmV0dXJuITF9LE5uZT17bWF0Y2hlczpPbmUsZmlsdGVyOnUkfSxleT1mdW5jdGlvbihtKXt0aGlzLmlucHV0VGV4dD1tLHRoaXMuY3VycmVudFN1YmplY3Q9bnVsbCx0aGlzLmNvbXBvdW5kQ291bnQ9MCx0aGlzLmVkZ2VDb3VudD0wLHRoaXMubGVuZ3RoPTAsbT09bnVsbHx8YmUobSkmJm0ubWF0Y2goL15ccyokLyl8fCh4ZShtKT90aGlzLmFkZFF1ZXJ5KHtjaGVja3M6W3t0eXBlOmhzLkNPTExFQ1RJT04sdmFsdWU6bS5jb2xsZWN0aW9uKCl9XX0pOmFlKG0pP3RoaXMuYWRkUXVlcnkoe2NoZWNrczpbe3R5cGU6aHMuRklMVEVSLHZhbHVlOm19XX0pOmJlKG0pP3RoaXMucGFyc2UobSl8fCh0aGlzLmludmFsaWQ9ITApOmNoKCJBIHNlbGVjdG9yIG11c3QgYmUgY3JlYXRlZCBmcm9tIGEgc3RyaW5nOyBmb3VuZCAiKSl9LHA1PWV5LnByb3RvdHlwZTtbTG5lLE5uZV0uZm9yRWFjaChmdW5jdGlvbih4KXtyZXR1cm4geXQocDUseCl9KSxwNS50ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5wdXRUZXh0fSxwNS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxwNS5lcT1mdW5jdGlvbih4KXtyZXR1cm4gdGhpc1t4XX0scDUuc2FtZVRleHQ9ZnVuY3Rpb24oeCl7cmV0dXJuIXRoaXMuaW52YWxpZCYmIXguaW52YWxpZCYmdGhpcy50ZXh0KCk9PT14LnRleHQoKX0scDUuYWRkUXVlcnk9ZnVuY3Rpb24oeCl7dGhpc1t0aGlzLmxlbmd0aCsrXT14fSxwNS5zZWxlY3Rvcj1wNS50b1N0cmluZzt2YXIgdHk9e2FsbEFyZTpmdW5jdGlvbihtKXt2YXIgaz1uZXcgZXkobSk7cmV0dXJuIHRoaXMuZXZlcnkoZnVuY3Rpb24oUyl7cmV0dXJuIGsubWF0Y2hlcyhTKX0pfSxpczpmdW5jdGlvbihtKXt2YXIgaz1uZXcgZXkobSk7cmV0dXJuIHRoaXMuc29tZShmdW5jdGlvbihTKXtyZXR1cm4gay5tYXRjaGVzKFMpfSl9LHNvbWU6ZnVuY3Rpb24obSxrKXtmb3IodmFyIFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIE09az9tLmFwcGx5KGssW3RoaXNbU10sUyx0aGlzXSk6bSh0aGlzW1NdLFMsdGhpcyk7aWYoTSlyZXR1cm4hMH1yZXR1cm4hMX0sZXZlcnk6ZnVuY3Rpb24obSxrKXtmb3IodmFyIFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIE09az9tLmFwcGx5KGssW3RoaXNbU10sUyx0aGlzXSk6bSh0aGlzW1NdLFMsdGhpcyk7aWYoIU0pcmV0dXJuITF9cmV0dXJuITB9LHNhbWU6ZnVuY3Rpb24obSl7aWYodGhpcz09PW0pcmV0dXJuITA7bT10aGlzLmN5KCkuY29sbGVjdGlvbihtKTt2YXIgaz10aGlzLmxlbmd0aCxTPW0ubGVuZ3RoO3JldHVybiBrIT09Uz8hMTprPT09MT90aGlzWzBdPT09bVswXTp0aGlzLmV2ZXJ5KGZ1bmN0aW9uKE0pe3JldHVybiBtLmhhc0VsZW1lbnRXaXRoSWQoTS5pZCgpKX0pfSxhbnlTYW1lOmZ1bmN0aW9uKG0pe3JldHVybiBtPXRoaXMuY3koKS5jb2xsZWN0aW9uKG0pLHRoaXMuc29tZShmdW5jdGlvbihrKXtyZXR1cm4gbS5oYXNFbGVtZW50V2l0aElkKGsuaWQoKSl9KX0sYWxsQXJlTmVpZ2hib3JzOmZ1bmN0aW9uKG0pe209dGhpcy5jeSgpLmNvbGxlY3Rpb24obSk7dmFyIGs9dGhpcy5uZWlnaGJvcmhvb2QoKTtyZXR1cm4gbS5ldmVyeShmdW5jdGlvbihTKXtyZXR1cm4gay5oYXNFbGVtZW50V2l0aElkKFMuaWQoKSl9KX0sY29udGFpbnM6ZnVuY3Rpb24obSl7bT10aGlzLmN5KCkuY29sbGVjdGlvbihtKTt2YXIgaz10aGlzO3JldHVybiBtLmV2ZXJ5KGZ1bmN0aW9uKFMpe3JldHVybiBrLmhhc0VsZW1lbnRXaXRoSWQoUy5pZCgpKX0pfX07dHkuYWxsQXJlTmVpZ2hib3Vycz10eS5hbGxBcmVOZWlnaGJvcnMsdHkuaGFzPXR5LmNvbnRhaW5zLHR5LmVxdWFsPXR5LmVxdWFscz10eS5zYW1lO3ZhciBScD1mdW5jdGlvbihtLGspe3JldHVybiBmdW5jdGlvbihNLE8sTiwkKXt2YXIgSD1NLHE9dGhpcyxZO2lmKEg9PW51bGw/WT0iIjp4ZShIKSYmSC5sZW5ndGg9PT0xJiYoWT1ILmlkKCkpLHEubGVuZ3RoPT09MSYmWSl7dmFyIFo9cVswXS5fcHJpdmF0ZSxjZT1aLnRyYXZlcnNhbENhY2hlPVoudHJhdmVyc2FsQ2FjaGV8fHt9LHZlPWNlW2tdPWNlW2tdfHxbXSxtZT11ZChZKSxMZT12ZVttZV07cmV0dXJuIExlfHwodmVbbWVdPW0uY2FsbChxLE0sTyxOLCQpKX1lbHNlIHJldHVybiBtLmNhbGwocSxNLE8sTiwkKX19LHU4PXtwYXJlbnQ6ZnVuY3Rpb24obSl7dmFyIGs9W107aWYodGhpcy5sZW5ndGg9PT0xKXt2YXIgUz10aGlzWzBdLl9wcml2YXRlLnBhcmVudDtpZihTKXJldHVybiBTfWZvcih2YXIgTT0wO008dGhpcy5sZW5ndGg7TSsrKXt2YXIgTz10aGlzW01dLE49Ty5fcHJpdmF0ZS5wYXJlbnQ7TiYmay5wdXNoKE4pfXJldHVybiB0aGlzLnNwYXduKGssITApLmZpbHRlcihtKX0scGFyZW50czpmdW5jdGlvbihtKXtmb3IodmFyIGs9W10sUz10aGlzLnBhcmVudCgpO1Mubm9uZW1wdHkoKTspe2Zvcih2YXIgTT0wO008Uy5sZW5ndGg7TSsrKXt2YXIgTz1TW01dO2sucHVzaChPKX1TPVMucGFyZW50KCl9cmV0dXJuIHRoaXMuc3Bhd24oaywhMCkuZmlsdGVyKG0pfSxjb21tb25BbmNlc3RvcnM6ZnVuY3Rpb24obSl7Zm9yKHZhciBrLFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIE09dGhpc1tTXSxPPU0ucGFyZW50cygpO2s9a3x8TyxrPWsuaW50ZXJzZWN0KE8pfXJldHVybiBrLmZpbHRlcihtKX0sb3JwaGFuczpmdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5zdGRGaWx0ZXIoZnVuY3Rpb24oayl7cmV0dXJuIGsuaXNPcnBoYW4oKX0pLmZpbHRlcihtKX0sbm9ub3JwaGFuczpmdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5zdGRGaWx0ZXIoZnVuY3Rpb24oayl7cmV0dXJuIGsuaXNDaGlsZCgpfSkuZmlsdGVyKG0pfSxjaGlsZHJlbjpScChmdW5jdGlvbih4KXtmb3IodmFyIG09W10saz0wO2s8dGhpcy5sZW5ndGg7aysrKWZvcih2YXIgUz10aGlzW2tdLE09Uy5fcHJpdmF0ZS5jaGlsZHJlbixPPTA7TzxNLmxlbmd0aDtPKyspbS5wdXNoKE1bT10pO3JldHVybiB0aGlzLnNwYXduKG0sITApLmZpbHRlcih4KX0sImNoaWxkcmVuIiksc2libGluZ3M6ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMucGFyZW50KCkuY2hpbGRyZW4oKS5ub3QodGhpcykuZmlsdGVyKG0pfSxpc1BhcmVudDpmdW5jdGlvbigpe3ZhciBtPXRoaXNbMF07aWYobSlyZXR1cm4gbS5pc05vZGUoKSYmbS5fcHJpdmF0ZS5jaGlsZHJlbi5sZW5ndGghPT0wfSxpc0NoaWxkbGVzczpmdW5jdGlvbigpe3ZhciBtPXRoaXNbMF07aWYobSlyZXR1cm4gbS5pc05vZGUoKSYmbS5fcHJpdmF0ZS5jaGlsZHJlbi5sZW5ndGg9PT0wfSxpc0NoaWxkOmZ1bmN0aW9uKCl7dmFyIG09dGhpc1swXTtpZihtKXJldHVybiBtLmlzTm9kZSgpJiZtLl9wcml2YXRlLnBhcmVudCE9bnVsbH0saXNPcnBoYW46ZnVuY3Rpb24oKXt2YXIgbT10aGlzWzBdO2lmKG0pcmV0dXJuIG0uaXNOb2RlKCkmJm0uX3ByaXZhdGUucGFyZW50PT1udWxsfSxkZXNjZW5kYW50czpmdW5jdGlvbihtKXt2YXIgaz1bXTtmdW5jdGlvbiBTKE0pe2Zvcih2YXIgTz0wO088TS5sZW5ndGg7TysrKXt2YXIgTj1NW09dO2sucHVzaChOKSxOLmNoaWxkcmVuKCkubm9uZW1wdHkoKSYmUyhOLmNoaWxkcmVuKCkpfX1yZXR1cm4gUyh0aGlzLmNoaWxkcmVuKCkpLHRoaXMuc3Bhd24oaywhMCkuZmlsdGVyKG0pfX07ZnVuY3Rpb24geUkoeCxtLGssUyl7Zm9yKHZhciBNPVtdLE89bmV3IFE3LE49eC5jeSgpLCQ9Ti5oYXNDb21wb3VuZE5vZGVzKCksSD0wO0g8eC5sZW5ndGg7SCsrKXt2YXIgcT14W0hdO2s/TS5wdXNoKHEpOiQmJlMoTSxPLHEpfWZvcig7TS5sZW5ndGg+MDspe3ZhciBZPU0uc2hpZnQoKTttKFkpLE8uYWRkKFkuaWQoKSksJCYmUyhNLE8sWSl9cmV0dXJuIHh9ZnVuY3Rpb24gbCQoeCxtLGspe2lmKGsuaXNQYXJlbnQoKSlmb3IodmFyIFM9ay5fcHJpdmF0ZS5jaGlsZHJlbixNPTA7TTxTLmxlbmd0aDtNKyspe3ZhciBPPVNbTV07bS5oYXMoTy5pZCgpKXx8eC5wdXNoKE8pfX11OC5mb3JFYWNoRG93bj1mdW5jdGlvbih4KXt2YXIgbT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7cmV0dXJuIHlJKHRoaXMseCxtLGwkKX07ZnVuY3Rpb24gaCQoeCxtLGspe2lmKGsuaXNDaGlsZCgpKXt2YXIgUz1rLl9wcml2YXRlLnBhcmVudDttLmhhcyhTLmlkKCkpfHx4LnB1c2goUyl9fXU4LmZvckVhY2hVcD1mdW5jdGlvbih4KXt2YXIgbT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7cmV0dXJuIHlJKHRoaXMseCxtLGgkKX07ZnVuY3Rpb24gUG5lKHgsbSxrKXtoJCh4LG0sayksbCQoeCxtLGspfXU4LmZvckVhY2hVcEFuZERvd249ZnVuY3Rpb24oeCl7dmFyIG09YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwO3JldHVybiB5SSh0aGlzLHgsbSxQbmUpfSx1OC5hbmNlc3RvcnM9dTgucGFyZW50czt2YXIgeDEsZiQ7eDE9ZiQ9e2RhdGE6ZnUuZGF0YSh7ZmllbGQ6ImRhdGEiLGJpbmRpbmdFdmVudDoiZGF0YSIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6ImRhdGEiLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLGFsbG93R2V0dGluZzohMCxpbW11dGFibGVLZXlzOntpZDohMCxzb3VyY2U6ITAsdGFyZ2V0OiEwLHBhcmVudDohMH0sdXBkYXRlU3R5bGU6ITB9KSxyZW1vdmVEYXRhOmZ1LnJlbW92ZURhdGEoe2ZpZWxkOiJkYXRhIixldmVudDoiZGF0YSIsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsdHJpZ2dlckV2ZW50OiEwLGltbXV0YWJsZUtleXM6e2lkOiEwLHNvdXJjZTohMCx0YXJnZXQ6ITAscGFyZW50OiEwfSx1cGRhdGVTdHlsZTohMH0pLHNjcmF0Y2g6ZnUuZGF0YSh7ZmllbGQ6InNjcmF0Y2giLGJpbmRpbmdFdmVudDoic2NyYXRjaCIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6InNjcmF0Y2giLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLGFsbG93R2V0dGluZzohMCx1cGRhdGVTdHlsZTohMH0pLHJlbW92ZVNjcmF0Y2g6ZnUucmVtb3ZlRGF0YSh7ZmllbGQ6InNjcmF0Y2giLGV2ZW50OiJzY3JhdGNoIix0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIix0cmlnZ2VyRXZlbnQ6ITAsdXBkYXRlU3R5bGU6ITB9KSxyc2NyYXRjaDpmdS5kYXRhKHtmaWVsZDoicnNjcmF0Y2giLGFsbG93QmluZGluZzohMSxhbGxvd1NldHRpbmc6ITAsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITEsYWxsb3dHZXR0aW5nOiEwfSkscmVtb3ZlUnNjcmF0Y2g6ZnUucmVtb3ZlRGF0YSh7ZmllbGQ6InJzY3JhdGNoIix0cmlnZ2VyRXZlbnQ6ITF9KSxpZDpmdW5jdGlvbigpe3ZhciBtPXRoaXNbMF07aWYobSlyZXR1cm4gbS5fcHJpdmF0ZS5kYXRhLmlkfX0seDEuYXR0cj14MS5kYXRhLHgxLnJlbW92ZUF0dHI9eDEucmVtb3ZlRGF0YTt2YXIgbnk9ZiQsSjk9e307ZnVuY3Rpb24geEkoeCl7cmV0dXJuIGZ1bmN0aW9uKG0pe3ZhciBrPXRoaXM7aWYobT09PXZvaWQgMCYmKG09ITApLGsubGVuZ3RoIT09MClpZihrLmlzTm9kZSgpJiYhay5yZW1vdmVkKCkpe2Zvcih2YXIgUz0wLE09a1swXSxPPU0uX3ByaXZhdGUuZWRnZXMsTj0wO048Ty5sZW5ndGg7TisrKXt2YXIgJD1PW05dOyFtJiYkLmlzTG9vcCgpfHwoUys9eChNLCQpKX1yZXR1cm4gU31lbHNlIHJldHVybn19eXQoSjkse2RlZ3JlZTp4SShmdW5jdGlvbih4LG0pe3JldHVybiBtLnNvdXJjZSgpLnNhbWUobS50YXJnZXQoKSk/MjoxfSksaW5kZWdyZWU6eEkoZnVuY3Rpb24oeCxtKXtyZXR1cm4gbS50YXJnZXQoKS5zYW1lKHgpPzE6MH0pLG91dGRlZ3JlZTp4SShmdW5jdGlvbih4LG0pe3JldHVybiBtLnNvdXJjZSgpLnNhbWUoeCk/MTowfSl9KTtmdW5jdGlvbiBsOCh4LG0pe3JldHVybiBmdW5jdGlvbihrKXtmb3IodmFyIFMsTT10aGlzLm5vZGVzKCksTz0wO088TS5sZW5ndGg7TysrKXt2YXIgTj1NW09dLCQ9Tlt4XShrKTskIT09dm9pZCAwJiYoUz09PXZvaWQgMHx8bSgkLFMpKSYmKFM9JCl9cmV0dXJuIFN9fXl0KEo5LHttaW5EZWdyZWU6bDgoImRlZ3JlZSIsZnVuY3Rpb24oeCxtKXtyZXR1cm4geDxtfSksbWF4RGVncmVlOmw4KCJkZWdyZWUiLGZ1bmN0aW9uKHgsbSl7cmV0dXJuIHg+bX0pLG1pbkluZGVncmVlOmw4KCJpbmRlZ3JlZSIsZnVuY3Rpb24oeCxtKXtyZXR1cm4geDxtfSksbWF4SW5kZWdyZWU6bDgoImluZGVncmVlIixmdW5jdGlvbih4LG0pe3JldHVybiB4Pm19KSxtaW5PdXRkZWdyZWU6bDgoIm91dGRlZ3JlZSIsZnVuY3Rpb24oeCxtKXtyZXR1cm4geDxtfSksbWF4T3V0ZGVncmVlOmw4KCJvdXRkZWdyZWUiLGZ1bmN0aW9uKHgsbSl7cmV0dXJuIHg+bX0pfSkseXQoSjkse3RvdGFsRGVncmVlOmZ1bmN0aW9uKG0pe2Zvcih2YXIgaz0wLFM9dGhpcy5ub2RlcygpLE09MDtNPFMubGVuZ3RoO00rKylrKz1TW01dLmRlZ3JlZShtKTtyZXR1cm4ga319KTt2YXIgVzIsZCQsZyQ9ZnVuY3Rpb24obSxrLFMpe2Zvcih2YXIgTT0wO008bS5sZW5ndGg7TSsrKXt2YXIgTz1tW01dO2lmKCFPLmxvY2tlZCgpKXt2YXIgTj1PLl9wcml2YXRlLnBvc2l0aW9uLCQ9e3g6ay54IT1udWxsP2sueC1OLng6MCx5OmsueSE9bnVsbD9rLnktTi55OjB9O08uaXNQYXJlbnQoKSYmISgkLng9PT0wJiYkLnk9PT0wKSYmTy5jaGlsZHJlbigpLnNoaWZ0KCQsUyksTy5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKX19fSxwJD17ZmllbGQ6InBvc2l0aW9uIixiaW5kaW5nRXZlbnQ6InBvc2l0aW9uIixhbGxvd0JpbmRpbmc6ITAsYWxsb3dTZXR0aW5nOiEwLHNldHRpbmdFdmVudDoicG9zaXRpb24iLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6ImVtaXRBbmROb3RpZnkiLGFsbG93R2V0dGluZzohMCx2YWxpZEtleXM6WyJ4IiwieSJdLGJlZm9yZUdldDpmdW5jdGlvbihtKXttLnVwZGF0ZUNvbXBvdW5kQm91bmRzKCl9LGJlZm9yZVNldDpmdW5jdGlvbihtLGspe2ckKG0saywhMSl9LG9uU2V0OmZ1bmN0aW9uKG0pe20uZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCl9LGNhblNldDpmdW5jdGlvbihtKXtyZXR1cm4hbS5sb2NrZWQoKX19O1cyPWQkPXtwb3NpdGlvbjpmdS5kYXRhKHAkKSxzaWxlbnRQb3NpdGlvbjpmdS5kYXRhKHl0KHt9LHAkLHthbGxvd0JpbmRpbmc6ITEsYWxsb3dTZXR0aW5nOiEwLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiExLGFsbG93R2V0dGluZzohMSxiZWZvcmVTZXQ6ZnVuY3Rpb24obSxrKXtnJChtLGssITApfSxvblNldDpmdW5jdGlvbihtKXttLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpfX0pKSxwb3NpdGlvbnM6ZnVuY3Rpb24obSxrKXtpZihzZShtKSlrP3RoaXMuc2lsZW50UG9zaXRpb24obSk6dGhpcy5wb3NpdGlvbihtKTtlbHNlIGlmKGFlKG0pKXt2YXIgUz1tLE09dGhpcy5jeSgpO00uc3RhcnRCYXRjaCgpO2Zvcih2YXIgTz0wO088dGhpcy5sZW5ndGg7TysrKXt2YXIgTj10aGlzW09dLCQ9dm9pZCAwOygkPVMoTixPKSkmJihrP04uc2lsZW50UG9zaXRpb24oJCk6Ti5wb3NpdGlvbigkKSl9TS5lbmRCYXRjaCgpfXJldHVybiB0aGlzfSxzaWxlbnRQb3NpdGlvbnM6ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMucG9zaXRpb25zKG0sITApfSxzaGlmdDpmdW5jdGlvbihtLGssUyl7dmFyIE07aWYoc2UobSk/KE09e3g6WChtLngpP20ueDowLHk6WChtLnkpP20ueTowfSxTPWspOmJlKG0pJiZYKGspJiYoTT17eDowLHk6MH0sTVttXT1rKSxNIT1udWxsKXt2YXIgTz10aGlzLmN5KCk7Ty5zdGFydEJhdGNoKCk7Zm9yKHZhciBOPTA7Tjx0aGlzLmxlbmd0aDtOKyspe3ZhciAkPXRoaXNbTl07aWYoIShPLmhhc0NvbXBvdW5kTm9kZXMoKSYmJC5pc0NoaWxkKCkmJiQuYW5jZXN0b3JzKCkuYW55U2FtZSh0aGlzKSkpe3ZhciBIPSQucG9zaXRpb24oKSxxPXt4OkgueCtNLngseTpILnkrTS55fTtTPyQuc2lsZW50UG9zaXRpb24ocSk6JC5wb3NpdGlvbihxKX19Ty5lbmRCYXRjaCgpfXJldHVybiB0aGlzfSxzaWxlbnRTaGlmdDpmdW5jdGlvbihtLGspe3JldHVybiBzZShtKT90aGlzLnNoaWZ0KG0sITApOmJlKG0pJiZYKGspJiZ0aGlzLnNoaWZ0KG0saywhMCksdGhpc30scmVuZGVyZWRQb3NpdGlvbjpmdW5jdGlvbihtLGspe3ZhciBTPXRoaXNbMF0sTT10aGlzLmN5KCksTz1NLnpvb20oKSxOPU0ucGFuKCksJD1zZShtKT9tOnZvaWQgMCxIPSQhPT12b2lkIDB8fGshPT12b2lkIDAmJmJlKG0pO2lmKFMmJlMuaXNOb2RlKCkpaWYoSClmb3IodmFyIHE9MDtxPHRoaXMubGVuZ3RoO3ErKyl7dmFyIFk9dGhpc1txXTtrIT09dm9pZCAwP1kucG9zaXRpb24obSwoay1OW21dKS9PKTokIT09dm9pZCAwJiZZLnBvc2l0aW9uKGhqKCQsTyxOKSl9ZWxzZXt2YXIgWj1TLnBvc2l0aW9uKCk7cmV0dXJuICQ9bFMoWixPLE4pLG09PT12b2lkIDA/JDokW21dfWVsc2UgaWYoIUgpcmV0dXJuO3JldHVybiB0aGlzfSxyZWxhdGl2ZVBvc2l0aW9uOmZ1bmN0aW9uKG0sayl7dmFyIFM9dGhpc1swXSxNPXRoaXMuY3koKSxPPXNlKG0pP206dm9pZCAwLE49TyE9PXZvaWQgMHx8ayE9PXZvaWQgMCYmYmUobSksJD1NLmhhc0NvbXBvdW5kTm9kZXMoKTtpZihTJiZTLmlzTm9kZSgpKWlmKE4pZm9yKHZhciBIPTA7SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBxPXRoaXNbSF0sWT0kP3EucGFyZW50KCk6bnVsbCxaPVkmJlkubGVuZ3RoPjAsY2U9WjtaJiYoWT1ZWzBdKTt2YXIgdmU9Y2U/WS5wb3NpdGlvbigpOnt4OjAseTowfTtrIT09dm9pZCAwP3EucG9zaXRpb24obSxrK3ZlW21dKTpPIT09dm9pZCAwJiZxLnBvc2l0aW9uKHt4Ok8ueCt2ZS54LHk6Ty55K3ZlLnl9KX1lbHNle3ZhciBtZT1TLnBvc2l0aW9uKCksTGU9JD9TLnBhcmVudCgpOm51bGwsX2U9TGUmJkxlLmxlbmd0aD4wLEVlPV9lO19lJiYoTGU9TGVbMF0pO3ZhciBCZT1FZT9MZS5wb3NpdGlvbigpOnt4OjAseTowfTtyZXR1cm4gTz17eDptZS54LUJlLngseTptZS55LUJlLnl9LG09PT12b2lkIDA/TzpPW21dfWVsc2UgaWYoIU4pcmV0dXJuO3JldHVybiB0aGlzfX0sVzIubW9kZWxQb3NpdGlvbj1XMi5wb2ludD1XMi5wb3NpdGlvbixXMi5tb2RlbFBvc2l0aW9ucz1XMi5wb2ludHM9VzIucG9zaXRpb25zLFcyLnJlbmRlcmVkUG9pbnQ9VzIucmVuZGVyZWRQb3NpdGlvbixXMi5yZWxhdGl2ZVBvaW50PVcyLnJlbGF0aXZlUG9zaXRpb247dmFyIEJuZT1kJCxoOCxyeTtoOD1yeT17fSxyeS5yZW5kZXJlZEJvdW5kaW5nQm94PWZ1bmN0aW9uKHgpe3ZhciBtPXRoaXMuYm91bmRpbmdCb3goeCksaz10aGlzLmN5KCksUz1rLnpvb20oKSxNPWsucGFuKCksTz1tLngxKlMrTS54LE49bS54MipTK00ueCwkPW0ueTEqUytNLnksSD1tLnkyKlMrTS55O3JldHVybnt4MTpPLHgyOk4seTE6JCx5MjpILHc6Ti1PLGg6SC0kfX0scnkuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlPWZ1bmN0aW9uKCl7dmFyIHg9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiExLG09dGhpcy5jeSgpO3JldHVybiFtLnN0eWxlRW5hYmxlZCgpfHwhbS5oYXNDb21wb3VuZE5vZGVzKCk/dGhpczoodGhpcy5mb3JFYWNoVXAoZnVuY3Rpb24oayl7aWYoay5pc1BhcmVudCgpKXt2YXIgUz1rLl9wcml2YXRlO1MuY29tcG91bmRCb3VuZHNDbGVhbj0hMSxTLmJiQ2FjaGU9bnVsbCx4fHxrLmVtaXRBbmROb3RpZnkoImJvdW5kcyIpfX0pLHRoaXMpfSxyeS51cGRhdGVDb21wb3VuZEJvdW5kcz1mdW5jdGlvbigpe3ZhciB4PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMSxtPXRoaXMuY3koKTtpZighbS5zdHlsZUVuYWJsZWQoKXx8IW0uaGFzQ29tcG91bmROb2RlcygpKXJldHVybiB0aGlzO2lmKCF4JiZtLmJhdGNoaW5nKCkpcmV0dXJuIHRoaXM7ZnVuY3Rpb24gayhOKXtpZighTi5pc1BhcmVudCgpKXJldHVybjt2YXIgJD1OLl9wcml2YXRlLEg9Ti5jaGlsZHJlbigpLHE9Ti5wc3R5bGUoImNvbXBvdW5kLXNpemluZy13cnQtbGFiZWxzIikudmFsdWU9PT0iaW5jbHVkZSIsWT17d2lkdGg6e3ZhbDpOLnBzdHlsZSgibWluLXdpZHRoIikucGZWYWx1ZSxsZWZ0Ok4ucHN0eWxlKCJtaW4td2lkdGgtYmlhcy1sZWZ0IikscmlnaHQ6Ti5wc3R5bGUoIm1pbi13aWR0aC1iaWFzLXJpZ2h0Iil9LGhlaWdodDp7dmFsOk4ucHN0eWxlKCJtaW4taGVpZ2h0IikucGZWYWx1ZSx0b3A6Ti5wc3R5bGUoIm1pbi1oZWlnaHQtYmlhcy10b3AiKSxib3R0b206Ti5wc3R5bGUoIm1pbi1oZWlnaHQtYmlhcy1ib3R0b20iKX19LFo9SC5ib3VuZGluZ0JveCh7aW5jbHVkZUxhYmVsczpxLGluY2x1ZGVPdmVybGF5czohMSx1c2VDYWNoZTohMX0pLGNlPSQucG9zaXRpb247KFoudz09PTB8fFouaD09PTApJiYoWj17dzpOLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLGg6Ti5wc3R5bGUoImhlaWdodCIpLnBmVmFsdWV9LFoueDE9Y2UueC1aLncvMixaLngyPWNlLngrWi53LzIsWi55MT1jZS55LVouaC8yLFoueTI9Y2UueStaLmgvMik7ZnVuY3Rpb24gdmUoSmUsTHQsTXQpe3ZhciB1dD0wLFd0PTAsVHQ9THQrTXQ7cmV0dXJuIEplPjAmJlR0PjAmJih1dD1MdC9UdCpKZSxXdD1NdC9UdCpKZSkse2JpYXNEaWZmOnV0LGJpYXNDb21wbGVtZW50RGlmZjpXdH19ZnVuY3Rpb24gbWUoSmUsTHQsTXQsdXQpe2lmKE10LnVuaXRzPT09IiUiKXN3aXRjaCh1dCl7Y2FzZSJ3aWR0aCI6cmV0dXJuIEplPjA/TXQucGZWYWx1ZSpKZTowO2Nhc2UiaGVpZ2h0IjpyZXR1cm4gTHQ+MD9NdC5wZlZhbHVlKkx0OjA7Y2FzZSJhdmVyYWdlIjpyZXR1cm4gSmU+MCYmTHQ+MD9NdC5wZlZhbHVlKihKZStMdCkvMjowO2Nhc2UibWluIjpyZXR1cm4gSmU+MCYmTHQ+MD9KZT5MdD9NdC5wZlZhbHVlKkx0Ok10LnBmVmFsdWUqSmU6MDtjYXNlIm1heCI6cmV0dXJuIEplPjAmJkx0PjA/SmU+THQ/TXQucGZWYWx1ZSpKZTpNdC5wZlZhbHVlKkx0OjA7ZGVmYXVsdDpyZXR1cm4gMH1lbHNlIHJldHVybiBNdC51bml0cz09PSJweCI/TXQucGZWYWx1ZTowfXZhciBMZT1ZLndpZHRoLmxlZnQudmFsdWU7WS53aWR0aC5sZWZ0LnVuaXRzPT09InB4IiYmWS53aWR0aC52YWw+MCYmKExlPUxlKjEwMC9ZLndpZHRoLnZhbCk7dmFyIF9lPVkud2lkdGgucmlnaHQudmFsdWU7WS53aWR0aC5yaWdodC51bml0cz09PSJweCImJlkud2lkdGgudmFsPjAmJihfZT1fZSoxMDAvWS53aWR0aC52YWwpO3ZhciBFZT1ZLmhlaWdodC50b3AudmFsdWU7WS5oZWlnaHQudG9wLnVuaXRzPT09InB4IiYmWS5oZWlnaHQudmFsPjAmJihFZT1FZSoxMDAvWS5oZWlnaHQudmFsKTt2YXIgQmU9WS5oZWlnaHQuYm90dG9tLnZhbHVlO1kuaGVpZ2h0LmJvdHRvbS51bml0cz09PSJweCImJlkuaGVpZ2h0LnZhbD4wJiYoQmU9QmUqMTAwL1kuaGVpZ2h0LnZhbCk7dmFyIFJlPXZlKFkud2lkdGgudmFsLVoudyxMZSxfZSksVmU9UmUuYmlhc0RpZmYsY3Q9UmUuYmlhc0NvbXBsZW1lbnREaWZmLHN0PXZlKFkuaGVpZ2h0LnZhbC1aLmgsRWUsQmUpLFllPXN0LmJpYXNEaWZmLG10PXN0LmJpYXNDb21wbGVtZW50RGlmZjskLmF1dG9QYWRkaW5nPW1lKFoudyxaLmgsTi5wc3R5bGUoInBhZGRpbmciKSxOLnBzdHlsZSgicGFkZGluZy1yZWxhdGl2ZS10byIpLnZhbHVlKSwkLmF1dG9XaWR0aD1NYXRoLm1heChaLncsWS53aWR0aC52YWwpLGNlLng9KC1WZStaLngxK1oueDIrY3QpLzIsJC5hdXRvSGVpZ2h0PU1hdGgubWF4KFouaCxZLmhlaWdodC52YWwpLGNlLnk9KC1ZZStaLnkxK1oueTIrbXQpLzJ9Zm9yKHZhciBTPTA7Uzx0aGlzLmxlbmd0aDtTKyspe3ZhciBNPXRoaXNbU10sTz1NLl9wcml2YXRlOyghTy5jb21wb3VuZEJvdW5kc0NsZWFufHx4KSYmKGsoTSksbS5iYXRjaGluZygpfHwoTy5jb21wb3VuZEJvdW5kc0NsZWFuPSEwKSl9cmV0dXJuIHRoaXN9O3ZhciBqcD1mdW5jdGlvbihtKXtyZXR1cm4gbT09PTEvMHx8bT09PS0xLzA/MDptfSxZMj1mdW5jdGlvbihtLGssUyxNLE8pe00taz09PTB8fE8tUz09PTB8fGs9PW51bGx8fFM9PW51bGx8fE09PW51bGx8fE89PW51bGx8fChtLngxPWs8bS54MT9rOm0ueDEsbS54Mj1NPm0ueDI/TTptLngyLG0ueTE9UzxtLnkxP1M6bS55MSxtLnkyPU8+bS55Mj9POm0ueTIsbS53PW0ueDItbS54MSxtLmg9bS55Mi1tLnkxKX0sYjU9ZnVuY3Rpb24obSxrKXtyZXR1cm4gaz09bnVsbD9tOlkyKG0say54MSxrLnkxLGsueDIsay55Mil9LFo5PWZ1bmN0aW9uKG0sayxTKXtyZXR1cm4gSzIobSxrLFMpfSxfUz1mdW5jdGlvbihtLGssUyl7aWYoIWsuY3koKS5oZWFkbGVzcygpKXt2YXIgTT1rLl9wcml2YXRlLE89TS5yc3R5bGUsTj1PLmFycm93V2lkdGgvMiwkPWsucHN0eWxlKFMrIi1hcnJvdy1zaGFwZSIpLnZhbHVlLEgscTtpZigkIT09Im5vbmUiKXtTPT09InNvdXJjZSI/KEg9Ty5zcmNYLHE9Ty5zcmNZKTpTPT09InRhcmdldCI/KEg9Ty50Z3RYLHE9Ty50Z3RZKTooSD1PLm1pZFgscT1PLm1pZFkpO3ZhciBZPU0uYXJyb3dCb3VuZHM9TS5hcnJvd0JvdW5kc3x8e30sWj1ZW1NdPVlbU118fHt9O1oueDE9SC1OLFoueTE9cS1OLFoueDI9SCtOLFoueTI9cStOLFoudz1aLngyLVoueDEsWi5oPVoueTItWi55MSxmUyhaLDEpLFkyKG0sWi54MSxaLnkxLFoueDIsWi55Mil9fX0sa0k9ZnVuY3Rpb24obSxrLFMpe2lmKCFrLmN5KCkuaGVhZGxlc3MoKSl7dmFyIE07Uz9NPVMrIi0iOk09IiI7dmFyIE89ay5fcHJpdmF0ZSxOPU8ucnN0eWxlLCQ9ay5wc3R5bGUoTSsibGFiZWwiKS5zdHJWYWx1ZTtpZigkKXt2YXIgSD1rLnBzdHlsZSgidGV4dC1oYWxpZ24iKSxxPWsucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLFk9WjkoTiwibGFiZWxXaWR0aCIsUyksWj1aOShOLCJsYWJlbEhlaWdodCIsUyksY2U9WjkoTiwibGFiZWxYIixTKSx2ZT1aOShOLCJsYWJlbFkiLFMpLG1lPWsucHN0eWxlKE0rInRleHQtbWFyZ2luLXgiKS5wZlZhbHVlLExlPWsucHN0eWxlKE0rInRleHQtbWFyZ2luLXkiKS5wZlZhbHVlLF9lPWsuaXNFZGdlKCksRWU9ay5wc3R5bGUoTSsidGV4dC1yb3RhdGlvbiIpLEJlPWsucHN0eWxlKCJ0ZXh0LW91dGxpbmUtd2lkdGgiKS5wZlZhbHVlLFJlPWsucHN0eWxlKCJ0ZXh0LWJvcmRlci13aWR0aCIpLnBmVmFsdWUsVmU9UmUvMixjdD1rLnBzdHlsZSgidGV4dC1iYWNrZ3JvdW5kLXBhZGRpbmciKS5wZlZhbHVlLHN0PTIsWWU9WixtdD1ZLEplPW10LzIsTHQ9WWUvMixNdCx1dCxXdCxUdDtpZihfZSlNdD1jZS1KZSx1dD1jZStKZSxXdD12ZS1MdCxUdD12ZStMdDtlbHNle3N3aXRjaChILnZhbHVlKXtjYXNlImxlZnQiOk10PWNlLW10LHV0PWNlO2JyZWFrO2Nhc2UiY2VudGVyIjpNdD1jZS1KZSx1dD1jZStKZTticmVhaztjYXNlInJpZ2h0IjpNdD1jZSx1dD1jZSttdDticmVha31zd2l0Y2gocS52YWx1ZSl7Y2FzZSJ0b3AiOld0PXZlLVllLFR0PXZlO2JyZWFrO2Nhc2UiY2VudGVyIjpXdD12ZS1MdCxUdD12ZStMdDticmVhaztjYXNlImJvdHRvbSI6V3Q9dmUsVHQ9dmUrWWU7YnJlYWt9fU10Kz1tZS1NYXRoLm1heChCZSxWZSktY3Qtc3QsdXQrPW1lK01hdGgubWF4KEJlLFZlKStjdCtzdCxXdCs9TGUtTWF0aC5tYXgoQmUsVmUpLWN0LXN0LFR0Kz1MZStNYXRoLm1heChCZSxWZSkrY3Qrc3Q7dmFyIF9uPVN8fCJtYWluIixobj1PLmxhYmVsQm91bmRzLFl0PWhuW19uXT1obltfbl18fHt9O1l0LngxPU10LFl0LnkxPVd0LFl0LngyPXV0LFl0LnkyPVR0LFl0Lnc9dXQtTXQsWXQuaD1UdC1XdDt2YXIgRG49X2UmJkVlLnN0clZhbHVlPT09ImF1dG9yb3RhdGUiLGlyPUVlLnBmVmFsdWUhPW51bGwmJkVlLnBmVmFsdWUhPT0wO2lmKERufHxpcil7dmFyIHZyPURuP1o5KE8ucnN0eWxlLCJsYWJlbEFuZ2xlIixTKTpFZS5wZlZhbHVlLE5uPU1hdGguY29zKHZyKSxwcj1NYXRoLnNpbih2ciksRXI9KE10K3V0KS8yLE1yPShXdCtUdCkvMjtpZighX2Upe3N3aXRjaChILnZhbHVlKXtjYXNlImxlZnQiOkVyPXV0O2JyZWFrO2Nhc2UicmlnaHQiOkVyPU10O2JyZWFrfXN3aXRjaChxLnZhbHVlKXtjYXNlInRvcCI6TXI9VHQ7YnJlYWs7Y2FzZSJib3R0b20iOk1yPVd0O2JyZWFrfX12YXIgQ3I9ZnVuY3Rpb24ocGEsTWkpe3JldHVybiBwYT1wYS1FcixNaT1NaS1Ncix7eDpwYSpObi1NaSpwcitFcix5OnBhKnByK01pKk5uK01yfX0sT3I9Q3IoTXQsV3QpLFduPUNyKE10LFR0KSxicj1Dcih1dCxXdCksU3I9Q3IodXQsVHQpO010PU1hdGgubWluKE9yLngsV24ueCxici54LFNyLngpLHV0PU1hdGgubWF4KE9yLngsV24ueCxici54LFNyLngpLFd0PU1hdGgubWluKE9yLnksV24ueSxici55LFNyLnkpLFR0PU1hdGgubWF4KE9yLnksV24ueSxici55LFNyLnkpfXZhciBOcj1fbisiUm90IixTaT1obltOcl09aG5bTnJdfHx7fTtTaS54MT1NdCxTaS55MT1XdCxTaS54Mj11dCxTaS55Mj1UdCxTaS53PXV0LU10LFNpLmg9VHQtV3QsWTIobSxNdCxXdCx1dCxUdCksWTIoTy5sYWJlbEJvdW5kcy5hbGwsTXQsV3QsdXQsVHQpfXJldHVybiBtfX0sRm5lPWZ1bmN0aW9uKG0sayl7aWYoIWsuY3koKS5oZWFkbGVzcygpKXt2YXIgUz1rLnBzdHlsZSgib3V0bGluZS1vcGFjaXR5IikudmFsdWUsTT1rLnBzdHlsZSgib3V0bGluZS13aWR0aCIpLnZhbHVlO2lmKFM+MCYmTT4wKXt2YXIgTz1rLnBzdHlsZSgib3V0bGluZS1vZmZzZXQiKS52YWx1ZSxOPWsucHN0eWxlKCJzaGFwZSIpLnZhbHVlLCQ9TStPLEg9KG0udyskKjIpL20udyxxPShtLmgrJCoyKS9tLmgsWT0wLFo9MDtbImRpYW1vbmQiLCJwZW50YWdvbiIsInJvdW5kLXRyaWFuZ2xlIl0uaW5jbHVkZXMoTik/KEg9KG0udyskKjIuNCkvbS53LFo9LSQvMy42KTpbImNvbmNhdmUtaGV4YWdvbiIsInJob21ib2lkIiwicmlnaHQtcmhvbWJvaWQiXS5pbmNsdWRlcyhOKT9IPShtLncrJCoyLjQpL20udzpOPT09InN0YXIiPyhIPShtLncrJCoyLjgpL20udyxxPShtLmgrJCoyLjYpL20uaCxaPS0kLzMuOCk6Tj09PSJ0cmlhbmdsZSI/KEg9KG0udyskKjIuOCkvbS53LHE9KG0uaCskKjIuNCkvbS5oLFo9LSQvMS40KTpOPT09InZlZSImJihIPShtLncrJCo0LjQpL20udyxxPShtLmgrJCozLjgpL20uaCxaPS0kKi41KTt2YXIgY2U9bS5oKnEtbS5oLHZlPW0udypILW0udztpZihkUyhtLFtNYXRoLmNlaWwoY2UvMiksTWF0aC5jZWlsKHZlLzIpXSksWSE9MHx8WiE9PTApe3ZhciBtZT1wWihtLFksWik7ZGoobSxtZSl9fX19LFJuZT1mdW5jdGlvbihtLGspe3ZhciBTPW0uX3ByaXZhdGUuY3ksTT1TLnN0eWxlRW5hYmxlZCgpLE89Uy5oZWFkbGVzcygpLE49V2QoKSwkPW0uX3ByaXZhdGUsSD1tLmlzTm9kZSgpLHE9bS5pc0VkZ2UoKSxZLFosY2UsdmUsbWUsTGUsX2U9JC5yc3R5bGUsRWU9SCYmTT9tLnBzdHlsZSgiYm91bmRzLWV4cGFuc2lvbiIpLnBmVmFsdWU6WzBdLEJlPWZ1bmN0aW9uKGZzKXtyZXR1cm4gZnMucHN0eWxlKCJkaXNwbGF5IikudmFsdWUhPT0ibm9uZSJ9LFJlPSFNfHxCZShtKSYmKCFxfHxCZShtLnNvdXJjZSgpKSYmQmUobS50YXJnZXQoKSkpO2lmKFJlKXt2YXIgVmU9MCxjdD0wO00mJmsuaW5jbHVkZU92ZXJsYXlzJiYoVmU9bS5wc3R5bGUoIm92ZXJsYXktb3BhY2l0eSIpLnZhbHVlLFZlIT09MCYmKGN0PW0ucHN0eWxlKCJvdmVybGF5LXBhZGRpbmciKS52YWx1ZSkpO3ZhciBzdD0wLFllPTA7TSYmay5pbmNsdWRlVW5kZXJsYXlzJiYoc3Q9bS5wc3R5bGUoInVuZGVybGF5LW9wYWNpdHkiKS52YWx1ZSxzdCE9PTAmJihZZT1tLnBzdHlsZSgidW5kZXJsYXktcGFkZGluZyIpLnZhbHVlKSk7dmFyIG10PU1hdGgubWF4KGN0LFllKSxKZT0wLEx0PTA7aWYoTSYmKEplPW0ucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsTHQ9SmUvMiksSCYmay5pbmNsdWRlTm9kZXMpe3ZhciBNdD1tLnBvc2l0aW9uKCk7bWU9TXQueCxMZT1NdC55O3ZhciB1dD1tLm91dGVyV2lkdGgoKSxXdD11dC8yLFR0PW0ub3V0ZXJIZWlnaHQoKSxfbj1UdC8yO1k9bWUtV3QsWj1tZStXdCxjZT1MZS1fbix2ZT1MZStfbixZMihOLFksY2UsWix2ZSksTSYmay5pbmNsdWRlT3V0bGluZXMmJkZuZShOLG0pfWVsc2UgaWYocSYmay5pbmNsdWRlRWRnZXMpaWYoTSYmIU8pe3ZhciBobj1tLnBzdHlsZSgiY3VydmUtc3R5bGUiKS5zdHJWYWx1ZTtpZihZPU1hdGgubWluKF9lLnNyY1gsX2UubWlkWCxfZS50Z3RYKSxaPU1hdGgubWF4KF9lLnNyY1gsX2UubWlkWCxfZS50Z3RYKSxjZT1NYXRoLm1pbihfZS5zcmNZLF9lLm1pZFksX2UudGd0WSksdmU9TWF0aC5tYXgoX2Uuc3JjWSxfZS5taWRZLF9lLnRndFkpLFktPUx0LForPUx0LGNlLT1MdCx2ZSs9THQsWTIoTixZLGNlLFosdmUpLGhuPT09ImhheXN0YWNrIil7dmFyIFl0PV9lLmhheXN0YWNrUHRzO2lmKFl0JiZZdC5sZW5ndGg9PT0yKXtpZihZPVl0WzBdLngsY2U9WXRbMF0ueSxaPVl0WzFdLngsdmU9WXRbMV0ueSxZPlope3ZhciBEbj1ZO1k9WixaPURufWlmKGNlPnZlKXt2YXIgaXI9Y2U7Y2U9dmUsdmU9aXJ9WTIoTixZLUx0LGNlLUx0LForTHQsdmUrTHQpfX1lbHNlIGlmKGhuPT09ImJlemllciJ8fGhuPT09InVuYnVuZGxlZC1iZXppZXIifHxobj09PSJzZWdtZW50cyJ8fGhuPT09InRheGkiKXt2YXIgdnI7c3dpdGNoKGhuKXtjYXNlImJlemllciI6Y2FzZSJ1bmJ1bmRsZWQtYmV6aWVyIjp2cj1fZS5iZXppZXJQdHM7YnJlYWs7Y2FzZSJzZWdtZW50cyI6Y2FzZSJ0YXhpIjp2cj1fZS5saW5lUHRzO2JyZWFrfWlmKHZyIT1udWxsKWZvcih2YXIgTm49MDtObjx2ci5sZW5ndGg7Tm4rKyl7dmFyIHByPXZyW05uXTtZPXByLngtTHQsWj1wci54K0x0LGNlPXByLnktTHQsdmU9cHIueStMdCxZMihOLFksY2UsWix2ZSl9fX1lbHNle3ZhciBFcj1tLnNvdXJjZSgpLE1yPUVyLnBvc2l0aW9uKCksQ3I9bS50YXJnZXQoKSxPcj1Dci5wb3NpdGlvbigpO2lmKFk9TXIueCxaPU9yLngsY2U9TXIueSx2ZT1Pci55LFk+Wil7dmFyIFduPVk7WT1aLFo9V259aWYoY2U+dmUpe3ZhciBicj1jZTtjZT12ZSx2ZT1icn1ZLT1MdCxaKz1MdCxjZS09THQsdmUrPUx0LFkyKE4sWSxjZSxaLHZlKX1pZihNJiZrLmluY2x1ZGVFZGdlcyYmcSYmKF9TKE4sbSwibWlkLXNvdXJjZSIpLF9TKE4sbSwibWlkLXRhcmdldCIpLF9TKE4sbSwic291cmNlIiksX1MoTixtLCJ0YXJnZXQiKSksTSl7dmFyIFNyPW0ucHN0eWxlKCJnaG9zdCIpLnZhbHVlPT09InllcyI7aWYoU3Ipe3ZhciBOcj1tLnBzdHlsZSgiZ2hvc3Qtb2Zmc2V0LXgiKS5wZlZhbHVlLFNpPW0ucHN0eWxlKCJnaG9zdC1vZmZzZXQteSIpLnBmVmFsdWU7WTIoTixOLngxK05yLE4ueTErU2ksTi54MitOcixOLnkyK1NpKX19dmFyIHlzPSQuYm9keUJvdW5kcz0kLmJvZHlCb3VuZHN8fHt9O2dqKHlzLE4pLGRTKHlzLEVlKSxmUyh5cywxKSxNJiYoWT1OLngxLFo9Ti54MixjZT1OLnkxLHZlPU4ueTIsWTIoTixZLW10LGNlLW10LForbXQsdmUrbXQpKTt2YXIgcGE9JC5vdmVybGF5Qm91bmRzPSQub3ZlcmxheUJvdW5kc3x8e307Z2oocGEsTiksZFMocGEsRWUpLGZTKHBhLDEpO3ZhciBNaT0kLmxhYmVsQm91bmRzPSQubGFiZWxCb3VuZHN8fHt9O01pLmFsbCE9bnVsbD9nWihNaS5hbGwpOk1pLmFsbD1XZCgpLE0mJmsuaW5jbHVkZUxhYmVscyYmKGsuaW5jbHVkZU1haW5MYWJlbHMmJmtJKE4sbSxudWxsKSxxJiYoay5pbmNsdWRlU291cmNlTGFiZWxzJiZrSShOLG0sInNvdXJjZSIpLGsuaW5jbHVkZVRhcmdldExhYmVscyYma0koTixtLCJ0YXJnZXQiKSkpfXJldHVybiBOLngxPWpwKE4ueDEpLE4ueTE9anAoTi55MSksTi54Mj1qcChOLngyKSxOLnkyPWpwKE4ueTIpLE4udz1qcChOLngyLU4ueDEpLE4uaD1qcChOLnkyLU4ueTEpLE4udz4wJiZOLmg+MCYmUmUmJihkUyhOLEVlKSxmUyhOLDEpKSxOfSxiJD1mdW5jdGlvbihtKXt2YXIgaz0wLFM9ZnVuY3Rpb24oTil7cmV0dXJuKE4/MTowKTw8aysrfSxNPTA7cmV0dXJuIE0rPVMobS5pbmN1ZGVOb2RlcyksTSs9UyhtLmluY2x1ZGVFZGdlcyksTSs9UyhtLmluY2x1ZGVMYWJlbHMpLE0rPVMobS5pbmNsdWRlTWFpbkxhYmVscyksTSs9UyhtLmluY2x1ZGVTb3VyY2VMYWJlbHMpLE0rPVMobS5pbmNsdWRlVGFyZ2V0TGFiZWxzKSxNKz1TKG0uaW5jbHVkZU92ZXJsYXlzKSxNKz1TKG0uaW5jbHVkZU91dGxpbmVzKSxNfSxtJD1mdW5jdGlvbihtKXtpZihtLmlzRWRnZSgpKXt2YXIgaz1tLnNvdXJjZSgpLnBvc2l0aW9uKCksUz1tLnRhcmdldCgpLnBvc2l0aW9uKCksTT1mdW5jdGlvbihOKXtyZXR1cm4gTWF0aC5yb3VuZChOKX07cmV0dXJuIHkxKFtNKGsueCksTShrLnkpLE0oUy54KSxNKFMueSldKX1lbHNlIHJldHVybiAwfSxVdD1mdW5jdGlvbihtLGspe3ZhciBTPW0uX3ByaXZhdGUsTSxPPW0uaXNFZGdlKCksTj1rPT1udWxsP3YkOmIkKGspLCQ9Tj09PXYkLEg9bSQobSkscT1TLmJiQ2FjaGVQb3NLZXk9PT1ILFk9ay51c2VDYWNoZSYmcSxaPWZ1bmN0aW9uKExlKXtyZXR1cm4gTGUuX3ByaXZhdGUuYmJDYWNoZT09bnVsbHx8TGUuX3ByaXZhdGUuc3R5bGVEaXJ0eX0sY2U9IVl8fFoobSl8fE8mJloobS5zb3VyY2UoKSl8fFoobS50YXJnZXQoKSk7aWYoY2U/KHF8fG0ucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKFkpLE09Um5lKG0sZWspLFMuYmJDYWNoZT1NLFMuYmJDYWNoZVBvc0tleT1IKTpNPVMuYmJDYWNoZSwhJCl7dmFyIHZlPW0uaXNOb2RlKCk7TT1XZCgpLChrLmluY2x1ZGVOb2RlcyYmdmV8fGsuaW5jbHVkZUVkZ2VzJiYhdmUpJiYoay5pbmNsdWRlT3ZlcmxheXM/YjUoTSxTLm92ZXJsYXlCb3VuZHMpOmI1KE0sUy5ib2R5Qm91bmRzKSksay5pbmNsdWRlTGFiZWxzJiYoay5pbmNsdWRlTWFpbkxhYmVscyYmKCFPfHxrLmluY2x1ZGVTb3VyY2VMYWJlbHMmJmsuaW5jbHVkZVRhcmdldExhYmVscyk/YjUoTSxTLmxhYmVsQm91bmRzLmFsbCk6KGsuaW5jbHVkZU1haW5MYWJlbHMmJmI1KE0sUy5sYWJlbEJvdW5kcy5tYWluUm90KSxrLmluY2x1ZGVTb3VyY2VMYWJlbHMmJmI1KE0sUy5sYWJlbEJvdW5kcy5zb3VyY2VSb3QpLGsuaW5jbHVkZVRhcmdldExhYmVscyYmYjUoTSxTLmxhYmVsQm91bmRzLnRhcmdldFJvdCkpKSxNLnc9TS54Mi1NLngxLE0uaD1NLnkyLU0ueTF9cmV0dXJuIE19LGVrPXtpbmNsdWRlTm9kZXM6ITAsaW5jbHVkZUVkZ2VzOiEwLGluY2x1ZGVMYWJlbHM6ITAsaW5jbHVkZU1haW5MYWJlbHM6ITAsaW5jbHVkZVNvdXJjZUxhYmVsczohMCxpbmNsdWRlVGFyZ2V0TGFiZWxzOiEwLGluY2x1ZGVPdmVybGF5czohMCxpbmNsdWRlVW5kZXJsYXlzOiEwLGluY2x1ZGVPdXRsaW5lczohMCx1c2VDYWNoZTohMH0sdiQ9YiQoZWspLHckPXEwKGVrKTtyeS5ib3VuZGluZ0JveD1mdW5jdGlvbih4KXt2YXIgbTtpZih0aGlzLmxlbmd0aD09PTEmJnRoaXNbMF0uX3ByaXZhdGUuYmJDYWNoZSE9bnVsbCYmIXRoaXNbMF0uX3ByaXZhdGUuc3R5bGVEaXJ0eSYmKHg9PT12b2lkIDB8fHgudXNlQ2FjaGU9PT12b2lkIDB8fHgudXNlQ2FjaGU9PT0hMCkpeD09PXZvaWQgMD94PWVrOng9dyQoeCksbT1VdCh0aGlzWzBdLHgpO2Vsc2V7bT1XZCgpLHg9eHx8ZWs7dmFyIGs9dyQoeCksUz10aGlzLE09Uy5jeSgpLE89TS5zdHlsZUVuYWJsZWQoKTtpZihPKWZvcih2YXIgTj0wO048Uy5sZW5ndGg7TisrKXt2YXIgJD1TW05dLEg9JC5fcHJpdmF0ZSxxPW0kKCQpLFk9SC5iYkNhY2hlUG9zS2V5PT09cSxaPWsudXNlQ2FjaGUmJlkmJiFILnN0eWxlRGlydHk7JC5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoWil9dGhpcy51cGRhdGVDb21wb3VuZEJvdW5kcygheC51c2VDYWNoZSk7Zm9yKHZhciBjZT0wO2NlPFMubGVuZ3RoO2NlKyspe3ZhciB2ZT1TW2NlXTtiNShtLFV0KHZlLGspKX19cmV0dXJuIG0ueDE9anAobS54MSksbS55MT1qcChtLnkxKSxtLngyPWpwKG0ueDIpLG0ueTI9anAobS55MiksbS53PWpwKG0ueDItbS54MSksbS5oPWpwKG0ueTItbS55MSksbX0scnkuZGlydHlCb3VuZGluZ0JveENhY2hlPWZ1bmN0aW9uKCl7Zm9yKHZhciB4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBtPXRoaXNbeF0uX3ByaXZhdGU7bS5iYkNhY2hlPW51bGwsbS5iYkNhY2hlUG9zS2V5PW51bGwsbS5ib2R5Qm91bmRzPW51bGwsbS5vdmVybGF5Qm91bmRzPW51bGwsbS5sYWJlbEJvdW5kcy5hbGw9bnVsbCxtLmxhYmVsQm91bmRzLnNvdXJjZT1udWxsLG0ubGFiZWxCb3VuZHMudGFyZ2V0PW51bGwsbS5sYWJlbEJvdW5kcy5tYWluPW51bGwsbS5sYWJlbEJvdW5kcy5zb3VyY2VSb3Q9bnVsbCxtLmxhYmVsQm91bmRzLnRhcmdldFJvdD1udWxsLG0ubGFiZWxCb3VuZHMubWFpblJvdD1udWxsLG0uYXJyb3dCb3VuZHMuc291cmNlPW51bGwsbS5hcnJvd0JvdW5kcy50YXJnZXQ9bnVsbCxtLmFycm93Qm91bmRzWyJtaWQtc291cmNlIl09bnVsbCxtLmFycm93Qm91bmRzWyJtaWQtdGFyZ2V0Il09bnVsbH1yZXR1cm4gdGhpcy5lbWl0QW5kTm90aWZ5KCJib3VuZHMiKSx0aGlzfSxyeS5ib3VuZGluZ0JveEF0PWZ1bmN0aW9uKHgpe3ZhciBtPXRoaXMubm9kZXMoKSxrPXRoaXMuY3koKSxTPWsuaGFzQ29tcG91bmROb2RlcygpLE09ay5jb2xsZWN0aW9uKCk7aWYoUyYmKE09bS5maWx0ZXIoZnVuY3Rpb24ocSl7cmV0dXJuIHEuaXNQYXJlbnQoKX0pLG09bS5ub3QoTSkpLHNlKHgpKXt2YXIgTz14O3g9ZnVuY3Rpb24oKXtyZXR1cm4gT319dmFyIE49ZnVuY3Rpb24oWSxaKXtyZXR1cm4gWS5fcHJpdmF0ZS5iYkF0T2xkUG9zPXgoWSxaKX0sJD1mdW5jdGlvbihZKXtyZXR1cm4gWS5fcHJpdmF0ZS5iYkF0T2xkUG9zfTtrLnN0YXJ0QmF0Y2goKSxtLmZvckVhY2goTikuc2lsZW50UG9zaXRpb25zKHgpLFMmJihNLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpLE0uZGlydHlCb3VuZGluZ0JveENhY2hlKCksTS51cGRhdGVDb21wb3VuZEJvdW5kcyghMCkpO3ZhciBIPWRaKHRoaXMuYm91bmRpbmdCb3goe3VzZUNhY2hlOiExfSkpO3JldHVybiBtLnNpbGVudFBvc2l0aW9ucygkKSxTJiYoTS5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKSxNLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLE0udXBkYXRlQ29tcG91bmRCb3VuZHMoITApKSxrLmVuZEJhdGNoKCksSH0saDguYm91bmRpbmdib3g9aDguYmI9aDguYm91bmRpbmdCb3gsaDgucmVuZGVyZWRCb3VuZGluZ2JveD1oOC5yZW5kZXJlZEJvdW5kaW5nQm94O3ZhciBqbmU9cnksdGssbms7dGs9bms9e307dmFyIHkkPWZ1bmN0aW9uKG0pe20udXBwZXJjYXNlTmFtZT1HdChtLm5hbWUpLG0uYXV0b05hbWU9ImF1dG8iK20udXBwZXJjYXNlTmFtZSxtLmxhYmVsTmFtZT0ibGFiZWwiK20udXBwZXJjYXNlTmFtZSxtLm91dGVyTmFtZT0ib3V0ZXIiK20udXBwZXJjYXNlTmFtZSxtLnVwcGVyY2FzZU91dGVyTmFtZT1HdChtLm91dGVyTmFtZSksdGtbbS5uYW1lXT1mdW5jdGlvbigpe3ZhciBTPXRoaXNbMF0sTT1TLl9wcml2YXRlLE89TS5jeSxOPU8uX3ByaXZhdGUuc3R5bGVFbmFibGVkO2lmKFMpaWYoTil7aWYoUy5pc1BhcmVudCgpKXJldHVybiBTLnVwZGF0ZUNvbXBvdW5kQm91bmRzKCksTVttLmF1dG9OYW1lXXx8MDt2YXIgJD1TLnBzdHlsZShtLm5hbWUpO3N3aXRjaCgkLnN0clZhbHVlKXtjYXNlImxhYmVsIjpyZXR1cm4gUy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoKSxNLnJzdHlsZVttLmxhYmVsTmFtZV18fDA7ZGVmYXVsdDpyZXR1cm4gJC5wZlZhbHVlfX1lbHNlIHJldHVybiAxfSx0a1sib3V0ZXIiK20udXBwZXJjYXNlTmFtZV09ZnVuY3Rpb24oKXt2YXIgUz10aGlzWzBdLE09Uy5fcHJpdmF0ZSxPPU0uY3ksTj1PLl9wcml2YXRlLnN0eWxlRW5hYmxlZDtpZihTKWlmKE4pe3ZhciAkPVNbbS5uYW1lXSgpLEg9Uy5wc3R5bGUoImJvcmRlci13aWR0aCIpLnBmVmFsdWUscT0yKlMucGFkZGluZygpO3JldHVybiAkK0grcX1lbHNlIHJldHVybiAxfSx0a1sicmVuZGVyZWQiK20udXBwZXJjYXNlTmFtZV09ZnVuY3Rpb24oKXt2YXIgUz10aGlzWzBdO2lmKFMpe3ZhciBNPVNbbS5uYW1lXSgpO3JldHVybiBNKnRoaXMuY3koKS56b29tKCl9fSx0a1sicmVuZGVyZWQiK20udXBwZXJjYXNlT3V0ZXJOYW1lXT1mdW5jdGlvbigpe3ZhciBTPXRoaXNbMF07aWYoUyl7dmFyIE09U1ttLm91dGVyTmFtZV0oKTtyZXR1cm4gTSp0aGlzLmN5KCkuem9vbSgpfX19O3kkKHtuYW1lOiJ3aWR0aCJ9KSx5JCh7bmFtZToiaGVpZ2h0In0pLG5rLnBhZGRpbmc9ZnVuY3Rpb24oKXt2YXIgeD10aGlzWzBdLG09eC5fcHJpdmF0ZTtyZXR1cm4geC5pc1BhcmVudCgpPyh4LnVwZGF0ZUNvbXBvdW5kQm91bmRzKCksbS5hdXRvUGFkZGluZyE9PXZvaWQgMD9tLmF1dG9QYWRkaW5nOngucHN0eWxlKCJwYWRkaW5nIikucGZWYWx1ZSk6eC5wc3R5bGUoInBhZGRpbmciKS5wZlZhbHVlfSxuay5wYWRkZWRIZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgeD10aGlzWzBdO3JldHVybiB4LmhlaWdodCgpKzIqeC5wYWRkaW5nKCl9LG5rLnBhZGRlZFdpZHRoPWZ1bmN0aW9uKCl7dmFyIHg9dGhpc1swXTtyZXR1cm4geC53aWR0aCgpKzIqeC5wYWRkaW5nKCl9O3ZhciAkbmU9bmssem5lPWZ1bmN0aW9uKG0sayl7aWYobS5pc0VkZ2UoKSlyZXR1cm4gayhtKX0scW5lPWZ1bmN0aW9uKG0sayl7aWYobS5pc0VkZ2UoKSl7dmFyIFM9bS5jeSgpO3JldHVybiBsUyhrKG0pLFMuem9vbSgpLFMucGFuKCkpfX0sSG5lPWZ1bmN0aW9uKG0sayl7aWYobS5pc0VkZ2UoKSl7dmFyIFM9bS5jeSgpLE09Uy5wYW4oKSxPPVMuem9vbSgpO3JldHVybiBrKG0pLm1hcChmdW5jdGlvbihOKXtyZXR1cm4gbFMoTixPLE0pfSl9fSxWbmU9ZnVuY3Rpb24obSl7cmV0dXJuIG0ucmVuZGVyZXIoKS5nZXRDb250cm9sUG9pbnRzKG0pfSxVbmU9ZnVuY3Rpb24obSl7cmV0dXJuIG0ucmVuZGVyZXIoKS5nZXRTZWdtZW50UG9pbnRzKG0pfSxFST1mdW5jdGlvbihtKXtyZXR1cm4gbS5yZW5kZXJlcigpLmdldFNvdXJjZUVuZHBvaW50KG0pfSxHbmU9ZnVuY3Rpb24obSl7cmV0dXJuIG0ucmVuZGVyZXIoKS5nZXRUYXJnZXRFbmRwb2ludChtKX0sS25lPWZ1bmN0aW9uKG0pe3JldHVybiBtLnJlbmRlcmVyKCkuZ2V0RWRnZU1pZHBvaW50KG0pfSx4JD17Y29udHJvbFBvaW50czp7Z2V0OlZuZSxtdWx0OiEwfSxzZWdtZW50UG9pbnRzOntnZXQ6VW5lLG11bHQ6ITB9LHNvdXJjZUVuZHBvaW50OntnZXQ6RUl9LHRhcmdldEVuZHBvaW50OntnZXQ6R25lfSxtaWRwb2ludDp7Z2V0OktuZX19LEFTPWZ1bmN0aW9uKG0pe3JldHVybiJyZW5kZXJlZCIrbVswXS50b1VwcGVyQ2FzZSgpK20uc3Vic3RyKDEpfSxXbmU9T2JqZWN0LmtleXMoeCQpLnJlZHVjZShmdW5jdGlvbih4LG0pe3ZhciBrPXgkW21dLFM9QVMobSk7cmV0dXJuIHhbbV09ZnVuY3Rpb24oKXtyZXR1cm4gem5lKHRoaXMsay5nZXQpfSxrLm11bHQ/eFtTXT1mdW5jdGlvbigpe3JldHVybiBIbmUodGhpcyxrLmdldCl9OnhbU109ZnVuY3Rpb24oKXtyZXR1cm4gcW5lKHRoaXMsay5nZXQpfSx4fSx7fSksVEk9eXQoe30sQm5lLGpuZSwkbmUsV25lKTsvKiEKICAgIAkgIEV2ZW50IG9iamVjdCBiYXNlZCBvbiBqUXVlcnkgZXZlbnRzLCBNSVQgbGljZW5zZQoKICAgIAkgIGh0dHBzOi8vanF1ZXJ5Lm9yZy9saWNlbnNlLwogICAgCSAgaHR0cHM6Ly90bGRybGVnYWwuY29tL2xpY2Vuc2UvbWl0LWxpY2Vuc2UKICAgIAkgIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L2Jsb2IvbWFzdGVyL3NyYy9ldmVudC5qcwogICAgCSAgKi92YXIgcms9ZnVuY3Rpb24obSxrKXt0aGlzLnJlY3ljbGUobSxrKX07ZnVuY3Rpb24gaWsoKXtyZXR1cm4hMX1mdW5jdGlvbiBzaygpe3JldHVybiEwfXJrLnByb3RvdHlwZT17aW5zdGFuY2VTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iZXZlbnQifSxyZWN5Y2xlOmZ1bmN0aW9uKG0sayl7aWYodGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD10aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPXRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWlrLG0hPW51bGwmJm0ucHJldmVudERlZmF1bHQ/KHRoaXMudHlwZT1tLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9bS5kZWZhdWx0UHJldmVudGVkP3NrOmlrKTptIT1udWxsJiZtLnR5cGU/az1tOnRoaXMudHlwZT1tLGshPW51bGwmJih0aGlzLm9yaWdpbmFsRXZlbnQ9ay5vcmlnaW5hbEV2ZW50LHRoaXMudHlwZT1rLnR5cGUhPW51bGw/ay50eXBlOnRoaXMudHlwZSx0aGlzLmN5PWsuY3ksdGhpcy50YXJnZXQ9ay50YXJnZXQsdGhpcy5wb3NpdGlvbj1rLnBvc2l0aW9uLHRoaXMucmVuZGVyZWRQb3NpdGlvbj1rLnJlbmRlcmVkUG9zaXRpb24sdGhpcy5uYW1lc3BhY2U9ay5uYW1lc3BhY2UsdGhpcy5sYXlvdXQ9ay5sYXlvdXQpLHRoaXMuY3khPW51bGwmJnRoaXMucG9zaXRpb24hPW51bGwmJnRoaXMucmVuZGVyZWRQb3NpdGlvbj09bnVsbCl7dmFyIFM9dGhpcy5wb3NpdGlvbixNPXRoaXMuY3kuem9vbSgpLE89dGhpcy5jeS5wYW4oKTt0aGlzLnJlbmRlcmVkUG9zaXRpb249e3g6Uy54Kk0rTy54LHk6Uy55Kk0rTy55fX10aGlzLnRpbWVTdGFtcD1tJiZtLnRpbWVTdGFtcHx8RGF0ZS5ub3coKX0scHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1zazt2YXIgbT10aGlzLm9yaWdpbmFsRXZlbnQ7bSYmbS5wcmV2ZW50RGVmYXVsdCYmbS5wcmV2ZW50RGVmYXVsdCgpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPXNrO3ZhciBtPXRoaXMub3JpZ2luYWxFdmVudDttJiZtLnN0b3BQcm9wYWdhdGlvbiYmbS5zdG9wUHJvcGFnYXRpb24oKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1zayx0aGlzLnN0b3BQcm9wYWdhdGlvbigpfSxpc0RlZmF1bHRQcmV2ZW50ZWQ6aWssaXNQcm9wYWdhdGlvblN0b3BwZWQ6aWssaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6aWt9O3ZhciBrJD0vXihbXi5dKykoXC4oPzpbXi5dKykpPyQvLFluZT0iLioiLEUkPXtxdWFsaWZpZXJDb21wYXJlOmZ1bmN0aW9uKG0sayl7cmV0dXJuIG09PT1rfSxldmVudE1hdGNoZXM6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sYWRkRXZlbnRGaWVsZHM6ZnVuY3Rpb24oKXt9LGNhbGxiYWNrQ29udGV4dDpmdW5jdGlvbihtKXtyZXR1cm4gbX0sYmVmb3JlRW1pdDpmdW5jdGlvbigpe30sYWZ0ZXJFbWl0OmZ1bmN0aW9uKCl7fSxidWJibGU6ZnVuY3Rpb24oKXtyZXR1cm4hMX0scGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGNvbnRleHQ6bnVsbH0sVCQ9T2JqZWN0LmtleXMoRSQpLFhuZT17fTtmdW5jdGlvbiBMUygpe2Zvcih2YXIgeD1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06WG5lLG09YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsaz0wO2s8VCQubGVuZ3RoO2srKyl7dmFyIFM9VCRba107dGhpc1tTXT14W1NdfHxFJFtTXX10aGlzLmNvbnRleHQ9bXx8dGhpcy5jb250ZXh0LHRoaXMubGlzdGVuZXJzPVtdLHRoaXMuZW1pdHRpbmc9MH12YXIgWDI9TFMucHJvdG90eXBlLEMkPWZ1bmN0aW9uKG0sayxTLE0sTyxOLCQpe2FlKE0pJiYoTz1NLE09bnVsbCksJCYmKE49PW51bGw/Tj0kOk49eXQoe30sTiwkKSk7Zm9yKHZhciBIPW5lKFMpP1M6Uy5zcGxpdCgvXHMrLykscT0wO3E8SC5sZW5ndGg7cSsrKXt2YXIgWT1IW3FdO2lmKCFTZShZKSl7dmFyIFo9WS5tYXRjaChrJCk7aWYoWil7dmFyIGNlPVpbMV0sdmU9WlsyXT9aWzJdOm51bGwsbWU9ayhtLFksY2UsdmUsTSxPLE4pO2lmKG1lPT09ITEpYnJlYWt9fX19LFMkPWZ1bmN0aW9uKG0sayl7cmV0dXJuIG0uYWRkRXZlbnRGaWVsZHMobS5jb250ZXh0LGspLG5ldyByayhrLnR5cGUsayl9LE1TPWZ1bmN0aW9uKG0sayxTKXtpZihJZShTKSl7ayhtLFMpO3JldHVybn1lbHNlIGlmKHNlKFMpKXtrKG0sUyQobSxTKSk7cmV0dXJufWZvcih2YXIgTT1uZShTKT9TOlMuc3BsaXQoL1xzKy8pLE89MDtPPE0ubGVuZ3RoO08rKyl7dmFyIE49TVtPXTtpZighU2UoTikpe3ZhciAkPU4ubWF0Y2goayQpO2lmKCQpe3ZhciBIPSRbMV0scT0kWzJdPyRbMl06bnVsbCxZPVMkKG0se3R5cGU6SCxuYW1lc3BhY2U6cSx0YXJnZXQ6bS5jb250ZXh0fSk7ayhtLFkpfX19fTtYMi5vbj1YMi5hZGRMaXN0ZW5lcj1mdW5jdGlvbih4LG0sayxTLE0pe3JldHVybiBDJCh0aGlzLGZ1bmN0aW9uKE8sTiwkLEgscSxZLFope2FlKFkpJiZPLmxpc3RlbmVycy5wdXNoKHtldmVudDpOLGNhbGxiYWNrOlksdHlwZTokLG5hbWVzcGFjZTpILHF1YWxpZmllcjpxLGNvbmY6Wn0pfSx4LG0sayxTLE0pLHRoaXN9LFgyLm9uZT1mdW5jdGlvbih4LG0sayxTKXtyZXR1cm4gdGhpcy5vbih4LG0sayxTLHtvbmU6ITB9KX0sWDIucmVtb3ZlTGlzdGVuZXI9WDIub2ZmPWZ1bmN0aW9uKHgsbSxrLFMpe3ZhciBNPXRoaXM7dGhpcy5lbWl0dGluZyE9PTAmJih0aGlzLmxpc3RlbmVycz16Sih0aGlzLmxpc3RlbmVycykpO2Zvcih2YXIgTz10aGlzLmxpc3RlbmVycyxOPWZ1bmN0aW9uKHEpe3ZhciBZPU9bcV07QyQoTSxmdW5jdGlvbihaLGNlLHZlLG1lLExlLF9lKXtpZigoWS50eXBlPT09dmV8fHg9PT0iKiIpJiYoIW1lJiZZLm5hbWVzcGFjZSE9PSIuKiJ8fFkubmFtZXNwYWNlPT09bWUpJiYoIUxlfHxaLnF1YWxpZmllckNvbXBhcmUoWS5xdWFsaWZpZXIsTGUpKSYmKCFfZXx8WS5jYWxsYmFjaz09PV9lKSlyZXR1cm4gTy5zcGxpY2UocSwxKSwhMX0seCxtLGssUyl9LCQ9Ty5sZW5ndGgtMTskPj0wOyQtLSlOKCQpO3JldHVybiB0aGlzfSxYMi5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW1vdmVMaXN0ZW5lcigiKiIpfSxYMi5lbWl0PVgyLnRyaWdnZXI9ZnVuY3Rpb24oeCxtLGspe3ZhciBTPXRoaXMubGlzdGVuZXJzLE09Uy5sZW5ndGg7cmV0dXJuIHRoaXMuZW1pdHRpbmcrKyxuZShtKXx8KG09W21dKSxNUyh0aGlzLGZ1bmN0aW9uKE8sTil7ayE9bnVsbCYmKFM9W3tldmVudDpOLmV2ZW50LHR5cGU6Ti50eXBlLG5hbWVzcGFjZTpOLm5hbWVzcGFjZSxjYWxsYmFjazprfV0sTT1TLmxlbmd0aCk7Zm9yKHZhciAkPWZ1bmN0aW9uKFkpe3ZhciBaPVNbWV07aWYoWi50eXBlPT09Ti50eXBlJiYoIVoubmFtZXNwYWNlfHxaLm5hbWVzcGFjZT09PU4ubmFtZXNwYWNlfHxaLm5hbWVzcGFjZT09PVluZSkmJk8uZXZlbnRNYXRjaGVzKE8uY29udGV4dCxaLE4pKXt2YXIgY2U9W05dO20hPW51bGwmJnVqKGNlLG0pLE8uYmVmb3JlRW1pdChPLmNvbnRleHQsWixOKSxaLmNvbmYmJlouY29uZi5vbmUmJihPLmxpc3RlbmVycz1PLmxpc3RlbmVycy5maWx0ZXIoZnVuY3Rpb24oTGUpe3JldHVybiBMZSE9PVp9KSk7dmFyIHZlPU8uY2FsbGJhY2tDb250ZXh0KE8uY29udGV4dCxaLE4pLG1lPVouY2FsbGJhY2suYXBwbHkodmUsY2UpO08uYWZ0ZXJFbWl0KE8uY29udGV4dCxaLE4pLG1lPT09ITEmJihOLnN0b3BQcm9wYWdhdGlvbigpLE4ucHJldmVudERlZmF1bHQoKSl9fSxIPTA7SDxNO0grKykkKEgpO08uYnViYmxlKE8uY29udGV4dCkmJiFOLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJk8ucGFyZW50KE8uY29udGV4dCkuZW1pdChOLG0pfSx4KSx0aGlzLmVtaXR0aW5nLS0sdGhpc307dmFyIFFuZT17cXVhbGlmaWVyQ29tcGFyZTpmdW5jdGlvbihtLGspe3JldHVybiBtPT1udWxsfHxrPT1udWxsP209PW51bGwmJms9PW51bGw6bS5zYW1lVGV4dChrKX0sZXZlbnRNYXRjaGVzOmZ1bmN0aW9uKG0sayxTKXt2YXIgTT1rLnF1YWxpZmllcjtyZXR1cm4gTSE9bnVsbD9tIT09Uy50YXJnZXQmJlUoUy50YXJnZXQpJiZNLm1hdGNoZXMoUy50YXJnZXQpOiEwfSxhZGRFdmVudEZpZWxkczpmdW5jdGlvbihtLGspe2suY3k9bS5jeSgpLGsudGFyZ2V0PW19LGNhbGxiYWNrQ29udGV4dDpmdW5jdGlvbihtLGssUyl7cmV0dXJuIGsucXVhbGlmaWVyIT1udWxsP1MudGFyZ2V0Om19LGJlZm9yZUVtaXQ6ZnVuY3Rpb24obSxrKXtrLmNvbmYmJmsuY29uZi5vbmNlJiZrLmNvbmYub25jZUNvbGxlY3Rpb24ucmVtb3ZlTGlzdGVuZXIoay5ldmVudCxrLnF1YWxpZmllcixrLmNhbGxiYWNrKX0sYnViYmxlOmZ1bmN0aW9uKCl7cmV0dXJuITB9LHBhcmVudDpmdW5jdGlvbihtKXtyZXR1cm4gbS5pc0NoaWxkKCk/bS5wYXJlbnQoKTptLmN5KCl9fSxtNT1mdW5jdGlvbihtKXtyZXR1cm4gYmUobSk/bmV3IGV5KG0pOm19LF8kPXtjcmVhdGVFbWl0dGVyOmZ1bmN0aW9uKCl7Zm9yKHZhciBtPTA7bTx0aGlzLmxlbmd0aDttKyspe3ZhciBrPXRoaXNbbV0sUz1rLl9wcml2YXRlO1MuZW1pdHRlcnx8KFMuZW1pdHRlcj1uZXcgTFMoUW5lLGspKX1yZXR1cm4gdGhpc30sZW1pdHRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmVtaXR0ZXJ9LG9uOmZ1bmN0aW9uKG0sayxTKXtmb3IodmFyIE09bTUoayksTz0wO088dGhpcy5sZW5ndGg7TysrKXt2YXIgTj10aGlzW09dO04uZW1pdHRlcigpLm9uKG0sTSxTKX1yZXR1cm4gdGhpc30scmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24obSxrLFMpe2Zvcih2YXIgTT1tNShrKSxPPTA7Tzx0aGlzLmxlbmd0aDtPKyspe3ZhciBOPXRoaXNbT107Ti5lbWl0dGVyKCkucmVtb3ZlTGlzdGVuZXIobSxNLFMpfXJldHVybiB0aGlzfSxyZW1vdmVBbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXtmb3IodmFyIG09MDttPHRoaXMubGVuZ3RoO20rKyl7dmFyIGs9dGhpc1ttXTtrLmVtaXR0ZXIoKS5yZW1vdmVBbGxMaXN0ZW5lcnMoKX1yZXR1cm4gdGhpc30sb25lOmZ1bmN0aW9uKG0sayxTKXtmb3IodmFyIE09bTUoayksTz0wO088dGhpcy5sZW5ndGg7TysrKXt2YXIgTj10aGlzW09dO04uZW1pdHRlcigpLm9uZShtLE0sUyl9cmV0dXJuIHRoaXN9LG9uY2U6ZnVuY3Rpb24obSxrLFMpe2Zvcih2YXIgTT1tNShrKSxPPTA7Tzx0aGlzLmxlbmd0aDtPKyspe3ZhciBOPXRoaXNbT107Ti5lbWl0dGVyKCkub24obSxNLFMse29uY2U6ITAsb25jZUNvbGxlY3Rpb246dGhpc30pfX0sZW1pdDpmdW5jdGlvbihtLGspe2Zvcih2YXIgUz0wO1M8dGhpcy5sZW5ndGg7UysrKXt2YXIgTT10aGlzW1NdO00uZW1pdHRlcigpLmVtaXQobSxrKX1yZXR1cm4gdGhpc30sZW1pdEFuZE5vdGlmeTpmdW5jdGlvbihtLGspe2lmKHRoaXMubGVuZ3RoIT09MClyZXR1cm4gdGhpcy5jeSgpLm5vdGlmeShtLHRoaXMpLHRoaXMuZW1pdChtLGspLHRoaXN9fTtmdS5ldmVudEFsaWFzZXNPbihfJCk7dmFyIENJPXtub2RlczpmdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oayl7cmV0dXJuIGsuaXNOb2RlKCl9KS5maWx0ZXIobSl9LGVkZ2VzOmZ1bmN0aW9uKG0pe3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihrKXtyZXR1cm4gay5pc0VkZ2UoKX0pLmZpbHRlcihtKX0sYnlHcm91cDpmdW5jdGlvbigpe2Zvcih2YXIgbT10aGlzLnNwYXduKCksaz10aGlzLnNwYXduKCksUz0wO1M8dGhpcy5sZW5ndGg7UysrKXt2YXIgTT10aGlzW1NdO00uaXNOb2RlKCk/bS5wdXNoKE0pOmsucHVzaChNKX1yZXR1cm57bm9kZXM6bSxlZGdlczprfX0sZmlsdGVyOmZ1bmN0aW9uKG0sayl7aWYobT09PXZvaWQgMClyZXR1cm4gdGhpcztpZihiZShtKXx8eGUobSkpcmV0dXJuIG5ldyBleShtKS5maWx0ZXIodGhpcyk7aWYoYWUobSkpe2Zvcih2YXIgUz10aGlzLnNwYXduKCksTT10aGlzLE89MDtPPE0ubGVuZ3RoO08rKyl7dmFyIE49TVtPXSwkPWs/bS5hcHBseShrLFtOLE8sTV0pOm0oTixPLE0pOyQmJlMucHVzaChOKX1yZXR1cm4gU31yZXR1cm4gdGhpcy5zcGF3bigpfSxub3Q6ZnVuY3Rpb24obSl7aWYobSl7YmUobSkmJihtPXRoaXMuZmlsdGVyKG0pKTtmb3IodmFyIGs9dGhpcy5zcGF3bigpLFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIE09dGhpc1tTXSxPPW0uaGFzKE0pO098fGsucHVzaChNKX1yZXR1cm4ga31lbHNlIHJldHVybiB0aGlzfSxhYnNvbHV0ZUNvbXBsZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgbT10aGlzLmN5KCk7cmV0dXJuIG0ubXV0YWJsZUVsZW1lbnRzKCkubm90KHRoaXMpfSxpbnRlcnNlY3Q6ZnVuY3Rpb24obSl7aWYoYmUobSkpe3ZhciBrPW07cmV0dXJuIHRoaXMuZmlsdGVyKGspfWZvcih2YXIgUz10aGlzLnNwYXduKCksTT10aGlzLE89bSxOPXRoaXMubGVuZ3RoPG0ubGVuZ3RoLCQ9Tj9NOk8sSD1OP086TSxxPTA7cTwkLmxlbmd0aDtxKyspe3ZhciBZPSRbcV07SC5oYXMoWSkmJlMucHVzaChZKX1yZXR1cm4gU30seG9yOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuX3ByaXZhdGUuY3k7YmUobSkmJihtPWsuJChtKSk7dmFyIFM9dGhpcy5zcGF3bigpLE09dGhpcyxPPW0sTj1mdW5jdGlvbihILHEpe2Zvcih2YXIgWT0wO1k8SC5sZW5ndGg7WSsrKXt2YXIgWj1IW1ldLGNlPVouX3ByaXZhdGUuZGF0YS5pZCx2ZT1xLmhhc0VsZW1lbnRXaXRoSWQoY2UpO3ZlfHxTLnB1c2goWil9fTtyZXR1cm4gTihNLE8pLE4oTyxNKSxTfSxkaWZmOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuX3ByaXZhdGUuY3k7YmUobSkmJihtPWsuJChtKSk7dmFyIFM9dGhpcy5zcGF3bigpLE09dGhpcy5zcGF3bigpLE89dGhpcy5zcGF3bigpLE49dGhpcywkPW0sSD1mdW5jdGlvbihZLFosY2Upe2Zvcih2YXIgdmU9MDt2ZTxZLmxlbmd0aDt2ZSsrKXt2YXIgbWU9WVt2ZV0sTGU9bWUuX3ByaXZhdGUuZGF0YS5pZCxfZT1aLmhhc0VsZW1lbnRXaXRoSWQoTGUpO19lP08ubWVyZ2UobWUpOmNlLnB1c2gobWUpfX07cmV0dXJuIEgoTiwkLFMpLEgoJCxOLE0pLHtsZWZ0OlMscmlnaHQ6TSxib3RoOk99fSxhZGQ6ZnVuY3Rpb24obSl7dmFyIGs9dGhpcy5fcHJpdmF0ZS5jeTtpZighbSlyZXR1cm4gdGhpcztpZihiZShtKSl7dmFyIFM9bTttPWsubXV0YWJsZUVsZW1lbnRzKCkuZmlsdGVyKFMpfWZvcih2YXIgTT10aGlzLnNwYXduU2VsZigpLE89MDtPPG0ubGVuZ3RoO08rKyl7dmFyIE49bVtPXSwkPSF0aGlzLmhhcyhOKTskJiZNLnB1c2goTil9cmV0dXJuIE19LG1lcmdlOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuX3ByaXZhdGUsUz1rLmN5O2lmKCFtKXJldHVybiB0aGlzO2lmKG0mJmJlKG0pKXt2YXIgTT1tO209Uy5tdXRhYmxlRWxlbWVudHMoKS5maWx0ZXIoTSl9Zm9yKHZhciBPPWsubWFwLE49MDtOPG0ubGVuZ3RoO04rKyl7dmFyICQ9bVtOXSxIPSQuX3ByaXZhdGUuZGF0YS5pZCxxPSFPLmhhcyhIKTtpZihxKXt2YXIgWT10aGlzLmxlbmd0aCsrO3RoaXNbWV09JCxPLnNldChILHtlbGU6JCxpbmRleDpZfSl9fXJldHVybiB0aGlzfSx1bm1lcmdlQXQ6ZnVuY3Rpb24obSl7dmFyIGs9dGhpc1ttXSxTPWsuaWQoKSxNPXRoaXMuX3ByaXZhdGUsTz1NLm1hcDt0aGlzW21dPXZvaWQgMCxPLmRlbGV0ZShTKTt2YXIgTj1tPT09dGhpcy5sZW5ndGgtMTtpZih0aGlzLmxlbmd0aD4xJiYhTil7dmFyICQ9dGhpcy5sZW5ndGgtMSxIPXRoaXNbJF0scT1ILl9wcml2YXRlLmRhdGEuaWQ7dGhpc1skXT12b2lkIDAsdGhpc1ttXT1ILE8uc2V0KHEse2VsZTpILGluZGV4Om19KX1yZXR1cm4gdGhpcy5sZW5ndGgtLSx0aGlzfSx1bm1lcmdlT25lOmZ1bmN0aW9uKG0pe209bVswXTt2YXIgaz10aGlzLl9wcml2YXRlLFM9bS5fcHJpdmF0ZS5kYXRhLmlkLE09ay5tYXAsTz1NLmdldChTKTtpZighTylyZXR1cm4gdGhpczt2YXIgTj1PLmluZGV4O3JldHVybiB0aGlzLnVubWVyZ2VBdChOKSx0aGlzfSx1bm1lcmdlOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuX3ByaXZhdGUuY3k7aWYoIW0pcmV0dXJuIHRoaXM7aWYobSYmYmUobSkpe3ZhciBTPW07bT1rLm11dGFibGVFbGVtZW50cygpLmZpbHRlcihTKX1mb3IodmFyIE09MDtNPG0ubGVuZ3RoO00rKyl0aGlzLnVubWVyZ2VPbmUobVtNXSk7cmV0dXJuIHRoaXN9LHVubWVyZ2VCeTpmdW5jdGlvbihtKXtmb3IodmFyIGs9dGhpcy5sZW5ndGgtMTtrPj0wO2stLSl7dmFyIFM9dGhpc1trXTttKFMpJiZ0aGlzLnVubWVyZ2VBdChrKX1yZXR1cm4gdGhpc30sbWFwOmZ1bmN0aW9uKG0sayl7Zm9yKHZhciBTPVtdLE09dGhpcyxPPTA7TzxNLmxlbmd0aDtPKyspe3ZhciBOPU1bT10sJD1rP20uYXBwbHkoayxbTixPLE1dKTptKE4sTyxNKTtTLnB1c2goJCl9cmV0dXJuIFN9LHJlZHVjZTpmdW5jdGlvbihtLGspe2Zvcih2YXIgUz1rLE09dGhpcyxPPTA7TzxNLmxlbmd0aDtPKyspUz1tKFMsTVtPXSxPLE0pO3JldHVybiBTfSxtYXg6ZnVuY3Rpb24obSxrKXtmb3IodmFyIFM9LTEvMCxNLE89dGhpcyxOPTA7TjxPLmxlbmd0aDtOKyspe3ZhciAkPU9bTl0sSD1rP20uYXBwbHkoayxbJCxOLE9dKTptKCQsTixPKTtIPlMmJihTPUgsTT0kKX1yZXR1cm57dmFsdWU6UyxlbGU6TX19LG1pbjpmdW5jdGlvbihtLGspe2Zvcih2YXIgUz0xLzAsTSxPPXRoaXMsTj0wO048Ty5sZW5ndGg7TisrKXt2YXIgJD1PW05dLEg9az9tLmFwcGx5KGssWyQsTixPXSk6bSgkLE4sTyk7SDxTJiYoUz1ILE09JCl9cmV0dXJue3ZhbHVlOlMsZWxlOk19fX0sUWM9Q0k7UWMudT1RY1sifCJdPVFjWyIrIl09UWMudW5pb249UWMub3I9UWMuYWRkLFFjWyJcXCJdPVFjWyIhIl09UWNbIi0iXT1RYy5kaWZmZXJlbmNlPVFjLnJlbGF0aXZlQ29tcGxlbWVudD1RYy5zdWJ0cmFjdD1RYy5ub3QsUWMubj1RY1siJiJdPVFjWyIuIl09UWMuYW5kPVFjLmludGVyc2VjdGlvbj1RYy5pbnRlcnNlY3QsUWNbIl4iXT1RY1siKCspIl09UWNbIigtKSJdPVFjLnN5bW1ldHJpY0RpZmZlcmVuY2U9UWMuc3ltZGlmZj1RYy54b3IsUWMuZm5GaWx0ZXI9UWMuZmlsdGVyRm49UWMuc3RkRmlsdGVyPVFjLmZpbHRlcixRYy5jb21wbGVtZW50PVFjLmFic2NvbXA9UWMuYWJzb2x1dGVDb21wbGVtZW50O3ZhciBTST17aXNOb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JvdXAoKT09PSJub2RlcyJ9LGlzRWRnZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdyb3VwKCk9PT0iZWRnZXMifSxpc0xvb3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0VkZ2UoKSYmdGhpcy5zb3VyY2UoKVswXT09PXRoaXMudGFyZ2V0KClbMF19LGlzU2ltcGxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNFZGdlKCkmJnRoaXMuc291cmNlKClbMF0hPT10aGlzLnRhcmdldCgpWzBdfSxncm91cDpmdW5jdGlvbigpe3ZhciBtPXRoaXNbMF07aWYobSlyZXR1cm4gbS5fcHJpdmF0ZS5ncm91cH19LF9JPWZ1bmN0aW9uKG0sayl7dmFyIFM9bS5jeSgpLE09Uy5oYXNDb21wb3VuZE5vZGVzKCk7ZnVuY3Rpb24gTyhZKXt2YXIgWj1ZLnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpO3JldHVybiBaLnZhbHVlPT09ImF1dG8iP00/WS56RGVwdGgoKTowOloudmFsdWU9PT0iYm90dG9tIj8tMTpaLnZhbHVlPT09InRvcCI/WDc6MH12YXIgTj1PKG0pLU8oayk7aWYoTiE9PTApcmV0dXJuIE47ZnVuY3Rpb24gJChZKXt2YXIgWj1ZLnBzdHlsZSgiei1pbmRleC1jb21wYXJlIik7cmV0dXJuIFoudmFsdWU9PT0iYXV0byImJlkuaXNOb2RlKCk/MTowfXZhciBIPSQobSktJChrKTtpZihIIT09MClyZXR1cm4gSDt2YXIgcT1tLnBzdHlsZSgiei1pbmRleCIpLnZhbHVlLWsucHN0eWxlKCJ6LWluZGV4IikudmFsdWU7cmV0dXJuIHEhPT0wP3E6bS5wb29sSW5kZXgoKS1rLnBvb2xJbmRleCgpfSxEUz17Zm9yRWFjaDpmdW5jdGlvbihtLGspe2lmKGFlKG0pKWZvcih2YXIgUz10aGlzLmxlbmd0aCxNPTA7TTxTO00rKyl7dmFyIE89dGhpc1tNXSxOPWs/bS5hcHBseShrLFtPLE0sdGhpc10pOm0oTyxNLHRoaXMpO2lmKE49PT0hMSlicmVha31yZXR1cm4gdGhpc30sdG9BcnJheTpmdW5jdGlvbigpe2Zvcih2YXIgbT1bXSxrPTA7azx0aGlzLmxlbmd0aDtrKyspbS5wdXNoKHRoaXNba10pO3JldHVybiBtfSxzbGljZTpmdW5jdGlvbihtLGspe3ZhciBTPVtdLE09dGhpcy5sZW5ndGg7az09bnVsbCYmKGs9TSksbT09bnVsbCYmKG09MCksbTwwJiYobT1NK20pLGs8MCYmKGs9TStrKTtmb3IodmFyIE89bTtPPj0wJiZPPGsmJk88TTtPKyspUy5wdXNoKHRoaXNbT10pO3JldHVybiB0aGlzLnNwYXduKFMpfSxzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxlcTpmdW5jdGlvbihtKXtyZXR1cm4gdGhpc1ttXXx8dGhpcy5zcGF3bigpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzWzBdfHx0aGlzLnNwYXduKCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1t0aGlzLmxlbmd0aC0xXXx8dGhpcy5zcGF3bigpfSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aD09PTB9LG5vbmVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZW1wdHkoKX0sc29ydDpmdW5jdGlvbihtKXtpZighYWUobSkpcmV0dXJuIHRoaXM7dmFyIGs9dGhpcy50b0FycmF5KCkuc29ydChtKTtyZXR1cm4gdGhpcy5zcGF3bihrKX0sc29ydEJ5WkluZGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc29ydChfSSl9LHpEZXB0aDpmdW5jdGlvbigpe3ZhciBtPXRoaXNbMF07aWYobSl7dmFyIGs9bS5fcHJpdmF0ZSxTPWsuZ3JvdXA7aWYoUz09PSJub2RlcyIpe3ZhciBNPWsuZGF0YS5wYXJlbnQ/bS5wYXJlbnRzKCkuc2l6ZSgpOjA7cmV0dXJuIG0uaXNQYXJlbnQoKT9NOlg3LTF9ZWxzZXt2YXIgTz1rLnNvdXJjZSxOPWsudGFyZ2V0LCQ9Ty56RGVwdGgoKSxIPU4uekRlcHRoKCk7cmV0dXJuIE1hdGgubWF4KCQsSCwwKX19fX07RFMuZWFjaD1EUy5mb3JFYWNoO3ZhciBKbmU9ZnVuY3Rpb24oKXt2YXIgbT0idW5kZWZpbmVkIixrPSh0eXBlb2YgU3ltYm9sPiJ1Ij8idW5kZWZpbmVkIjp1KFN5bWJvbCkpIT1tJiZ1KFN5bWJvbC5pdGVyYXRvcikhPW07ayYmKERTW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXt2YXIgUz10aGlzLE09e3ZhbHVlOnZvaWQgMCxkb25lOiExfSxPPTAsTj10aGlzLmxlbmd0aDtyZXR1cm4gYih7bmV4dDpmdW5jdGlvbigpe3JldHVybiBPPE4/TS52YWx1ZT1TW08rK106KE0udmFsdWU9dm9pZCAwLE0uZG9uZT0hMCksTX19LFN5bWJvbC5pdGVyYXRvcixmdW5jdGlvbigpe3JldHVybiB0aGlzfSl9KX07Sm5lKCk7dmFyIFpuZT1xMCh7bm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExfSksSVM9e2xheW91dERpbWVuc2lvbnM6ZnVuY3Rpb24obSl7bT1abmUobSk7dmFyIGs7aWYoIXRoaXMudGFrZXNVcFNwYWNlKCkpaz17dzowLGg6MH07ZWxzZSBpZihtLm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVscyl7dmFyIFM9dGhpcy5ib3VuZGluZ0JveCgpO2s9e3c6Uy53LGg6Uy5ofX1lbHNlIGs9e3c6dGhpcy5vdXRlcldpZHRoKCksaDp0aGlzLm91dGVySGVpZ2h0KCl9O3JldHVybihrLnc9PT0wfHxrLmg9PT0wKSYmKGsudz1rLmg9MSksa30sbGF5b3V0UG9zaXRpb25zOmZ1bmN0aW9uKG0sayxTKXt2YXIgTT10aGlzLm5vZGVzKCkuZmlsdGVyKGZ1bmN0aW9uKGN0KXtyZXR1cm4hY3QuaXNQYXJlbnQoKX0pLE89dGhpcy5jeSgpLE49ay5lbGVzLCQ9ZnVuY3Rpb24oc3Qpe3JldHVybiBzdC5pZCgpfSxIPU5lKFMsJCk7bS5lbWl0KHt0eXBlOiJsYXlvdXRzdGFydCIsbGF5b3V0Om19KSxtLmFuaW1hdGlvbnM9W107dmFyIHE9ZnVuY3Rpb24oc3QsWWUsbXQpe3ZhciBKZT17eDpZZS54MStZZS53LzIseTpZZS55MStZZS5oLzJ9LEx0PXt4OihtdC54LUplLngpKnN0LHk6KG10LnktSmUueSkqc3R9O3JldHVybnt4OkplLngrTHQueCx5OkplLnkrTHQueX19LFk9ay5zcGFjaW5nRmFjdG9yJiZrLnNwYWNpbmdGYWN0b3IhPT0xLFo9ZnVuY3Rpb24oKXtpZighWSlyZXR1cm4gbnVsbDtmb3IodmFyIHN0PVdkKCksWWU9MDtZZTxNLmxlbmd0aDtZZSsrKXt2YXIgbXQ9TVtZZV0sSmU9SChtdCxZZSk7Ylooc3QsSmUueCxKZS55KX1yZXR1cm4gc3R9LGNlPVooKSx2ZT1OZShmdW5jdGlvbihjdCxzdCl7dmFyIFllPUgoY3Qsc3QpO2lmKFkpe3ZhciBtdD1NYXRoLmFicyhrLnNwYWNpbmdGYWN0b3IpO1llPXEobXQsY2UsWWUpfXJldHVybiBrLnRyYW5zZm9ybSE9bnVsbCYmKFllPWsudHJhbnNmb3JtKGN0LFllKSksWWV9LCQpO2lmKGsuYW5pbWF0ZSl7Zm9yKHZhciBtZT0wO21lPE0ubGVuZ3RoO21lKyspe3ZhciBMZT1NW21lXSxfZT12ZShMZSxtZSksRWU9ay5hbmltYXRlRmlsdGVyPT1udWxsfHxrLmFuaW1hdGVGaWx0ZXIoTGUsbWUpO2lmKEVlKXt2YXIgQmU9TGUuYW5pbWF0aW9uKHtwb3NpdGlvbjpfZSxkdXJhdGlvbjprLmFuaW1hdGlvbkR1cmF0aW9uLGVhc2luZzprLmFuaW1hdGlvbkVhc2luZ30pO20uYW5pbWF0aW9ucy5wdXNoKEJlKX1lbHNlIExlLnBvc2l0aW9uKF9lKX1pZihrLmZpdCl7dmFyIFJlPU8uYW5pbWF0aW9uKHtmaXQ6e2JvdW5kaW5nQm94Ok4uYm91bmRpbmdCb3hBdCh2ZSkscGFkZGluZzprLnBhZGRpbmd9LGR1cmF0aW9uOmsuYW5pbWF0aW9uRHVyYXRpb24sZWFzaW5nOmsuYW5pbWF0aW9uRWFzaW5nfSk7bS5hbmltYXRpb25zLnB1c2goUmUpfWVsc2UgaWYoay56b29tIT09dm9pZCAwJiZrLnBhbiE9PXZvaWQgMCl7dmFyIFZlPU8uYW5pbWF0aW9uKHt6b29tOmsuem9vbSxwYW46ay5wYW4sZHVyYXRpb246ay5hbmltYXRpb25EdXJhdGlvbixlYXNpbmc6ay5hbmltYXRpb25FYXNpbmd9KTttLmFuaW1hdGlvbnMucHVzaChWZSl9bS5hbmltYXRpb25zLmZvckVhY2goZnVuY3Rpb24oY3Qpe3JldHVybiBjdC5wbGF5KCl9KSxtLm9uZSgibGF5b3V0cmVhZHkiLGsucmVhZHkpLG0uZW1pdCh7dHlwZToibGF5b3V0cmVhZHkiLGxheW91dDptfSksaTguYWxsKG0uYW5pbWF0aW9ucy5tYXAoZnVuY3Rpb24oY3Qpe3JldHVybiBjdC5wcm9taXNlKCl9KSkudGhlbihmdW5jdGlvbigpe20ub25lKCJsYXlvdXRzdG9wIixrLnN0b3ApLG0uZW1pdCh7dHlwZToibGF5b3V0c3RvcCIsbGF5b3V0Om19KX0pfWVsc2UgTS5wb3NpdGlvbnModmUpLGsuZml0JiZPLmZpdChrLmVsZXMsay5wYWRkaW5nKSxrLnpvb20hPW51bGwmJk8uem9vbShrLnpvb20pLGsucGFuJiZPLnBhbihrLnBhbiksbS5vbmUoImxheW91dHJlYWR5IixrLnJlYWR5KSxtLmVtaXQoe3R5cGU6ImxheW91dHJlYWR5IixsYXlvdXQ6bX0pLG0ub25lKCJsYXlvdXRzdG9wIixrLnN0b3ApLG0uZW1pdCh7dHlwZToibGF5b3V0c3RvcCIsbGF5b3V0Om19KTtyZXR1cm4gdGhpc30sbGF5b3V0OmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuY3koKTtyZXR1cm4gay5tYWtlTGF5b3V0KHl0KHt9LG0se2VsZXM6dGhpc30pKX19O0lTLmNyZWF0ZUxheW91dD1JUy5tYWtlTGF5b3V0PUlTLmxheW91dDtmdW5jdGlvbiBlcmUoeCxtLGspe3ZhciBTPWsuX3ByaXZhdGUsTT1TLnN0eWxlQ2FjaGU9Uy5zdHlsZUNhY2hlfHxbXSxPO3JldHVybihPPU1beF0pIT1udWxsfHwoTz1NW3hdPW0oaykpLE99ZnVuY3Rpb24gT1MoeCxtKXtyZXR1cm4geD11ZCh4KSxmdW5jdGlvbihTKXtyZXR1cm4gZXJlKHgsbSxTKX19ZnVuY3Rpb24gTlMoeCxtKXt4PXVkKHgpO3ZhciBrPWZ1bmN0aW9uKE0pe3JldHVybiBtLmNhbGwoTSl9O3JldHVybiBmdW5jdGlvbigpe3ZhciBNPXRoaXNbMF07aWYoTSlyZXR1cm4gZXJlKHgsayxNKX19dmFyIEgwPXtyZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGU6ZnVuY3Rpb24obSl7dmFyIGs9dGhpcy5jeSgpLFM9ay5yZW5kZXJlcigpLE09ay5zdHlsZUVuYWJsZWQoKTtyZXR1cm4gUyYmTSYmUy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUodGhpcyxtKSx0aGlzfSxkaXJ0eVN0eWxlQ2FjaGU6ZnVuY3Rpb24oKXt2YXIgbT10aGlzLmN5KCksaz1mdW5jdGlvbihPKXtyZXR1cm4gTy5fcHJpdmF0ZS5zdHlsZUNhY2hlPW51bGx9O2lmKG0uaGFzQ29tcG91bmROb2RlcygpKXt2YXIgUztTPXRoaXMuc3Bhd25TZWxmKCkubWVyZ2UodGhpcy5kZXNjZW5kYW50cygpKS5tZXJnZSh0aGlzLnBhcmVudHMoKSksUy5tZXJnZShTLmNvbm5lY3RlZEVkZ2VzKCkpLFMuZm9yRWFjaChrKX1lbHNlIHRoaXMuZm9yRWFjaChmdW5jdGlvbihNKXtrKE0pLE0uY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGspfSk7cmV0dXJuIHRoaXN9LHVwZGF0ZVN0eWxlOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuX3ByaXZhdGUuY3k7aWYoIWsuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7aWYoay5iYXRjaGluZygpKXt2YXIgUz1rLl9wcml2YXRlLmJhdGNoU3R5bGVFbGVzO3JldHVybiBTLm1lcmdlKHRoaXMpLHRoaXN9dmFyIE09ay5oYXNDb21wb3VuZE5vZGVzKCksTz10aGlzO209ISEobXx8bT09PXZvaWQgMCksTSYmKE89dGhpcy5zcGF3blNlbGYoKS5tZXJnZSh0aGlzLmRlc2NlbmRhbnRzKCkpLm1lcmdlKHRoaXMucGFyZW50cygpKSk7dmFyIE49TztyZXR1cm4gbT9OLmVtaXRBbmROb3RpZnkoInN0eWxlIik6Ti5lbWl0KCJzdHlsZSIpLE8uZm9yRWFjaChmdW5jdGlvbigkKXtyZXR1cm4gJC5fcHJpdmF0ZS5zdHlsZURpcnR5PSEwfSksdGhpc30sY2xlYW5TdHlsZTpmdW5jdGlvbigpe3ZhciBtPXRoaXMuY3koKTtpZihtLnN0eWxlRW5hYmxlZCgpKWZvcih2YXIgaz0wO2s8dGhpcy5sZW5ndGg7aysrKXt2YXIgUz10aGlzW2tdO1MuX3ByaXZhdGUuc3R5bGVEaXJ0eSYmKFMuX3ByaXZhdGUuc3R5bGVEaXJ0eT0hMSxtLnN0eWxlKCkuYXBwbHkoUykpfX0scGFyc2VkU3R5bGU6ZnVuY3Rpb24obSl7dmFyIGs9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwLFM9dGhpc1swXSxNPVMuY3koKTtpZihNLnN0eWxlRW5hYmxlZCgpJiZTKXt0aGlzLmNsZWFuU3R5bGUoKTt2YXIgTz1TLl9wcml2YXRlLnN0eWxlW21dO3JldHVybiBPPz8oaz9NLnN0eWxlKCkuZ2V0RGVmYXVsdFByb3BlcnR5KG0pOm51bGwpfX0sbnVtZXJpY1N0eWxlOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXNbMF07aWYoay5jeSgpLnN0eWxlRW5hYmxlZCgpJiZrKXt2YXIgUz1rLnBzdHlsZShtKTtyZXR1cm4gUy5wZlZhbHVlIT09dm9pZCAwP1MucGZWYWx1ZTpTLnZhbHVlfX0sbnVtZXJpY1N0eWxlVW5pdHM6ZnVuY3Rpb24obSl7dmFyIGs9dGhpc1swXTtpZihrLmN5KCkuc3R5bGVFbmFibGVkKCkmJmspcmV0dXJuIGsucHN0eWxlKG0pLnVuaXRzfSxyZW5kZXJlZFN0eWxlOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuY3koKTtpZighay5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpczt2YXIgUz10aGlzWzBdO2lmKFMpcmV0dXJuIGsuc3R5bGUoKS5nZXRSZW5kZXJlZFN0eWxlKFMsbSl9LHN0eWxlOmZ1bmN0aW9uKG0sayl7dmFyIFM9dGhpcy5jeSgpO2lmKCFTLnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO3ZhciBNPSExLE89Uy5zdHlsZSgpO2lmKHNlKG0pKXt2YXIgTj1tO08uYXBwbHlCeXBhc3ModGhpcyxOLE0pLHRoaXMuZW1pdEFuZE5vdGlmeSgic3R5bGUiKX1lbHNlIGlmKGJlKG0pKWlmKGs9PT12b2lkIDApe3ZhciAkPXRoaXNbMF07cmV0dXJuICQ/Ty5nZXRTdHlsZVByb3BlcnR5VmFsdWUoJCxtKTp2b2lkIDB9ZWxzZSBPLmFwcGx5QnlwYXNzKHRoaXMsbSxrLE0pLHRoaXMuZW1pdEFuZE5vdGlmeSgic3R5bGUiKTtlbHNlIGlmKG09PT12b2lkIDApe3ZhciBIPXRoaXNbMF07cmV0dXJuIEg/Ty5nZXRSYXdTdHlsZShIKTp2b2lkIDB9cmV0dXJuIHRoaXN9LHJlbW92ZVN0eWxlOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuY3koKTtpZighay5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpczt2YXIgUz0hMSxNPWsuc3R5bGUoKSxPPXRoaXM7aWYobT09PXZvaWQgMClmb3IodmFyIE49MDtOPE8ubGVuZ3RoO04rKyl7dmFyICQ9T1tOXTtNLnJlbW92ZUFsbEJ5cGFzc2VzKCQsUyl9ZWxzZXttPW0uc3BsaXQoL1xzKy8pO2Zvcih2YXIgSD0wO0g8Ty5sZW5ndGg7SCsrKXt2YXIgcT1PW0hdO00ucmVtb3ZlQnlwYXNzZXMocSxtLFMpfX1yZXR1cm4gdGhpcy5lbWl0QW5kTm90aWZ5KCJzdHlsZSIpLHRoaXN9LHNob3c6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jc3MoImRpc3BsYXkiLCJlbGVtZW50IiksdGhpc30saGlkZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNzcygiZGlzcGxheSIsIm5vbmUiKSx0aGlzfSxlZmZlY3RpdmVPcGFjaXR5OmZ1bmN0aW9uKCl7dmFyIG09dGhpcy5jeSgpO2lmKCFtLnN0eWxlRW5hYmxlZCgpKXJldHVybiAxO3ZhciBrPW0uaGFzQ29tcG91bmROb2RlcygpLFM9dGhpc1swXTtpZihTKXt2YXIgTT1TLl9wcml2YXRlLE89Uy5wc3R5bGUoIm9wYWNpdHkiKS52YWx1ZTtpZighaylyZXR1cm4gTzt2YXIgTj1NLmRhdGEucGFyZW50P1MucGFyZW50cygpOm51bGw7aWYoTilmb3IodmFyICQ9MDskPE4ubGVuZ3RoOyQrKyl7dmFyIEg9TlskXSxxPUgucHN0eWxlKCJvcGFjaXR5IikudmFsdWU7Tz1xKk99cmV0dXJuIE99fSx0cmFuc3BhcmVudDpmdW5jdGlvbigpe3ZhciBtPXRoaXMuY3koKTtpZighbS5zdHlsZUVuYWJsZWQoKSlyZXR1cm4hMTt2YXIgaz10aGlzWzBdLFM9ay5jeSgpLmhhc0NvbXBvdW5kTm9kZXMoKTtpZihrKXJldHVybiBTP2suZWZmZWN0aXZlT3BhY2l0eSgpPT09MDprLnBzdHlsZSgib3BhY2l0eSIpLnZhbHVlPT09MH0sYmFja2dyb3VuZGluZzpmdW5jdGlvbigpe3ZhciBtPXRoaXMuY3koKTtpZighbS5zdHlsZUVuYWJsZWQoKSlyZXR1cm4hMTt2YXIgaz10aGlzWzBdO3JldHVybiEhay5fcHJpdmF0ZS5iYWNrZ3JvdW5kaW5nfX07ZnVuY3Rpb24gQUkoeCxtKXt2YXIgaz14Ll9wcml2YXRlLFM9ay5kYXRhLnBhcmVudD94LnBhcmVudHMoKTpudWxsO2lmKFMpZm9yKHZhciBNPTA7TTxTLmxlbmd0aDtNKyspe3ZhciBPPVNbTV07aWYoIW0oTykpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gTEkoeCl7dmFyIG09eC5vayxrPXguZWRnZU9rVmlhTm9kZXx8eC5vayxTPXgucGFyZW50T2t8fHgub2s7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIE09dGhpcy5jeSgpO2lmKCFNLnN0eWxlRW5hYmxlZCgpKXJldHVybiEwO3ZhciBPPXRoaXNbMF0sTj1NLmhhc0NvbXBvdW5kTm9kZXMoKTtpZihPKXt2YXIgJD1PLl9wcml2YXRlO2lmKCFtKE8pKXJldHVybiExO2lmKE8uaXNOb2RlKCkpcmV0dXJuIU58fEFJKE8sUyk7dmFyIEg9JC5zb3VyY2UscT0kLnRhcmdldDtyZXR1cm4gayhIKSYmKCFOfHxBSShILGspKSYmKEg9PT1xfHxrKHEpJiYoIU58fEFJKHEsaykpKX19fXZhciBmOD1PUygiZWxlVGFrZXNVcFNwYWNlIixmdW5jdGlvbih4KXtyZXR1cm4geC5wc3R5bGUoImRpc3BsYXkiKS52YWx1ZT09PSJlbGVtZW50IiYmeC53aWR0aCgpIT09MCYmKHguaXNOb2RlKCk/eC5oZWlnaHQoKSE9PTA6ITApfSk7SDAudGFrZXNVcFNwYWNlPU5TKCJ0YWtlc1VwU3BhY2UiLExJKHtvazpmOH0pKTt2YXIgdHJlPU9TKCJlbGVJbnRlcmFjdGl2ZSIsZnVuY3Rpb24oeCl7cmV0dXJuIHgucHN0eWxlKCJldmVudHMiKS52YWx1ZT09PSJ5ZXMiJiZ4LnBzdHlsZSgidmlzaWJpbGl0eSIpLnZhbHVlPT09InZpc2libGUiJiZmOCh4KX0pLG5yZT1PUygicGFyZW50SW50ZXJhY3RpdmUiLGZ1bmN0aW9uKHgpe3JldHVybiB4LnBzdHlsZSgidmlzaWJpbGl0eSIpLnZhbHVlPT09InZpc2libGUiJiZmOCh4KX0pO0gwLmludGVyYWN0aXZlPU5TKCJpbnRlcmFjdGl2ZSIsTEkoe29rOnRyZSxwYXJlbnRPazpucmUsZWRnZU9rVmlhTm9kZTpmOH0pKSxIMC5ub25pbnRlcmFjdGl2ZT1mdW5jdGlvbigpe3ZhciB4PXRoaXNbMF07aWYoeClyZXR1cm4heC5pbnRlcmFjdGl2ZSgpfTt2YXIgcnJlPU9TKCJlbGVWaXNpYmxlIixmdW5jdGlvbih4KXtyZXR1cm4geC5wc3R5bGUoInZpc2liaWxpdHkiKS52YWx1ZT09PSJ2aXNpYmxlIiYmeC5wc3R5bGUoIm9wYWNpdHkiKS5wZlZhbHVlIT09MCYmZjgoeCl9KSxpcmU9Zjg7SDAudmlzaWJsZT1OUygidmlzaWJsZSIsTEkoe29rOnJyZSxlZGdlT2tWaWFOb2RlOmlyZX0pKSxIMC5oaWRkZW49ZnVuY3Rpb24oKXt2YXIgeD10aGlzWzBdO2lmKHgpcmV0dXJuIXgudmlzaWJsZSgpfSxIMC5pc0J1bmRsZWRCZXppZXI9TlMoImlzQnVuZGxlZEJlemllciIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jeSgpLnN0eWxlRW5hYmxlZCgpPyF0aGlzLnJlbW92ZWQoKSYmdGhpcy5wc3R5bGUoImN1cnZlLXN0eWxlIikudmFsdWU9PT0iYmV6aWVyIiYmdGhpcy50YWtlc1VwU3BhY2UoKTohMX0pLEgwLmJ5cGFzcz1IMC5jc3M9SDAuc3R5bGUsSDAucmVuZGVyZWRDc3M9SDAucmVuZGVyZWRTdHlsZSxIMC5yZW1vdmVCeXBhc3M9SDAucmVtb3ZlQ3NzPUgwLnJlbW92ZVN0eWxlLEgwLnBzdHlsZT1IMC5wYXJzZWRTdHlsZTt2YXIgWGQ9e307ZnVuY3Rpb24gUFMoeCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG09YXJndW1lbnRzLGs9W107aWYobS5sZW5ndGg9PT0yKXt2YXIgUz1tWzBdLE09bVsxXTt0aGlzLm9uKHguZXZlbnQsUyxNKX1lbHNlIGlmKG0ubGVuZ3RoPT09MSYmYWUobVswXSkpe3ZhciBPPW1bMF07dGhpcy5vbih4LmV2ZW50LE8pfWVsc2UgaWYobS5sZW5ndGg9PT0wfHxtLmxlbmd0aD09PTEmJm5lKG1bMF0pKXtmb3IodmFyIE49bS5sZW5ndGg9PT0xP21bMF06bnVsbCwkPTA7JDx0aGlzLmxlbmd0aDskKyspe3ZhciBIPXRoaXNbJF0scT0heC5hYmxlRmllbGR8fEguX3ByaXZhdGVbeC5hYmxlRmllbGRdLFk9SC5fcHJpdmF0ZVt4LmZpZWxkXSE9eC52YWx1ZTtpZih4Lm92ZXJyaWRlQWJsZSl7dmFyIFo9eC5vdmVycmlkZUFibGUoSCk7aWYoWiE9PXZvaWQgMCYmKHE9WiwhWikpcmV0dXJuIHRoaXN9cSYmKEguX3ByaXZhdGVbeC5maWVsZF09eC52YWx1ZSxZJiZrLnB1c2goSCkpfXZhciBjZT10aGlzLnNwYXduKGspO2NlLnVwZGF0ZVN0eWxlKCksY2UuZW1pdCh4LmV2ZW50KSxOJiZjZS5lbWl0KE4pfXJldHVybiB0aGlzfX1mdW5jdGlvbiBkOCh4KXtYZFt4LmZpZWxkXT1mdW5jdGlvbigpe3ZhciBtPXRoaXNbMF07aWYobSl7aWYoeC5vdmVycmlkZUZpZWxkKXt2YXIgaz14Lm92ZXJyaWRlRmllbGQobSk7aWYoayE9PXZvaWQgMClyZXR1cm4ga31yZXR1cm4gbS5fcHJpdmF0ZVt4LmZpZWxkXX19LFhkW3gub25dPVBTKHtldmVudDp4Lm9uLGZpZWxkOnguZmllbGQsYWJsZUZpZWxkOnguYWJsZUZpZWxkLG92ZXJyaWRlQWJsZTp4Lm92ZXJyaWRlQWJsZSx2YWx1ZTohMH0pLFhkW3gub2ZmXT1QUyh7ZXZlbnQ6eC5vZmYsZmllbGQ6eC5maWVsZCxhYmxlRmllbGQ6eC5hYmxlRmllbGQsb3ZlcnJpZGVBYmxlOngub3ZlcnJpZGVBYmxlLHZhbHVlOiExfSl9ZDgoe2ZpZWxkOiJsb2NrZWQiLG92ZXJyaWRlRmllbGQ6ZnVuY3Rpb24obSl7cmV0dXJuIG0uY3koKS5hdXRvbG9jaygpPyEwOnZvaWQgMH0sb246ImxvY2siLG9mZjoidW5sb2NrIn0pLGQ4KHtmaWVsZDoiZ3JhYmJhYmxlIixvdmVycmlkZUZpZWxkOmZ1bmN0aW9uKG0pe3JldHVybiBtLmN5KCkuYXV0b3VuZ3JhYmlmeSgpfHxtLnBhbm5hYmxlKCk/ITE6dm9pZCAwfSxvbjoiZ3JhYmlmeSIsb2ZmOiJ1bmdyYWJpZnkifSksZDgoe2ZpZWxkOiJzZWxlY3RlZCIsYWJsZUZpZWxkOiJzZWxlY3RhYmxlIixvdmVycmlkZUFibGU6ZnVuY3Rpb24obSl7cmV0dXJuIG0uY3koKS5hdXRvdW5zZWxlY3RpZnkoKT8hMTp2b2lkIDB9LG9uOiJzZWxlY3QiLG9mZjoidW5zZWxlY3QifSksZDgoe2ZpZWxkOiJzZWxlY3RhYmxlIixvdmVycmlkZUZpZWxkOmZ1bmN0aW9uKG0pe3JldHVybiBtLmN5KCkuYXV0b3Vuc2VsZWN0aWZ5KCk/ITE6dm9pZCAwfSxvbjoic2VsZWN0aWZ5IixvZmY6InVuc2VsZWN0aWZ5In0pLFhkLmRlc2VsZWN0PVhkLnVuc2VsZWN0LFhkLmdyYWJiZWQ9ZnVuY3Rpb24oKXt2YXIgeD10aGlzWzBdO2lmKHgpcmV0dXJuIHguX3ByaXZhdGUuZ3JhYmJlZH0sZDgoe2ZpZWxkOiJhY3RpdmUiLG9uOiJhY3RpdmF0ZSIsb2ZmOiJ1bmFjdGl2YXRlIn0pLGQ4KHtmaWVsZDoicGFubmFibGUiLG9uOiJwYW5pZnkiLG9mZjoidW5wYW5pZnkifSksWGQuaW5hY3RpdmU9ZnVuY3Rpb24oKXt2YXIgeD10aGlzWzBdO2lmKHgpcmV0dXJuIXguX3ByaXZhdGUuYWN0aXZlfTt2YXIgazE9e30sQSQ9ZnVuY3Rpb24obSl7cmV0dXJuIGZ1bmN0aW9uKFMpe2Zvcih2YXIgTT10aGlzLE89W10sTj0wO048TS5sZW5ndGg7TisrKXt2YXIgJD1NW05dO2lmKCQuaXNOb2RlKCkpe2Zvcih2YXIgSD0hMSxxPSQuY29ubmVjdGVkRWRnZXMoKSxZPTA7WTxxLmxlbmd0aDtZKyspe3ZhciBaPXFbWV0sY2U9Wi5zb3VyY2UoKSx2ZT1aLnRhcmdldCgpO2lmKG0ubm9JbmNvbWluZ0VkZ2VzJiZ2ZT09PSQmJmNlIT09JHx8bS5ub091dGdvaW5nRWRnZXMmJmNlPT09JCYmdmUhPT0kKXtIPSEwO2JyZWFrfX1IfHxPLnB1c2goJCl9fXJldHVybiB0aGlzLnNwYXduKE8sITApLmZpbHRlcihTKX19LEwkPWZ1bmN0aW9uKG0pe3JldHVybiBmdW5jdGlvbihrKXtmb3IodmFyIFM9dGhpcyxNPVtdLE89MDtPPFMubGVuZ3RoO08rKyl7dmFyIE49U1tPXTtpZihOLmlzTm9kZSgpKWZvcih2YXIgJD1OLmNvbm5lY3RlZEVkZ2VzKCksSD0wO0g8JC5sZW5ndGg7SCsrKXt2YXIgcT0kW0hdLFk9cS5zb3VyY2UoKSxaPXEudGFyZ2V0KCk7bS5vdXRnb2luZyYmWT09PU4/KE0ucHVzaChxKSxNLnB1c2goWikpOm0uaW5jb21pbmcmJlo9PT1OJiYoTS5wdXNoKHEpLE0ucHVzaChZKSl9fXJldHVybiB0aGlzLnNwYXduKE0sITApLmZpbHRlcihrKX19LE0kPWZ1bmN0aW9uKG0pe3JldHVybiBmdW5jdGlvbihrKXtmb3IodmFyIFM9dGhpcyxNPVtdLE89e307Oyl7dmFyIE49bS5vdXRnb2luZz9TLm91dGdvZXJzKCk6Uy5pbmNvbWVycygpO2lmKE4ubGVuZ3RoPT09MClicmVhaztmb3IodmFyICQ9ITEsSD0wO0g8Ti5sZW5ndGg7SCsrKXt2YXIgcT1OW0hdLFk9cS5pZCgpO09bWV18fChPW1ldPSEwLE0ucHVzaChxKSwkPSEwKX1pZighJClicmVhaztTPU59cmV0dXJuIHRoaXMuc3Bhd24oTSwhMCkuZmlsdGVyKGspfX07azEuY2xlYXJUcmF2ZXJzYWxDYWNoZT1mdW5jdGlvbigpe2Zvcih2YXIgeD0wO3g8dGhpcy5sZW5ndGg7eCsrKXRoaXNbeF0uX3ByaXZhdGUudHJhdmVyc2FsQ2FjaGU9bnVsbH0seXQoazEse3Jvb3RzOkEkKHtub0luY29taW5nRWRnZXM6ITB9KSxsZWF2ZXM6QSQoe25vT3V0Z29pbmdFZGdlczohMH0pLG91dGdvZXJzOlJwKEwkKHtvdXRnb2luZzohMH0pLCJvdXRnb2VycyIpLHN1Y2Nlc3NvcnM6TSQoe291dGdvaW5nOiEwfSksaW5jb21lcnM6UnAoTCQoe2luY29taW5nOiEwfSksImluY29tZXJzIikscHJlZGVjZXNzb3JzOk0kKHtpbmNvbWluZzohMH0pfSkseXQoazEse25laWdoYm9yaG9vZDpScChmdW5jdGlvbih4KXtmb3IodmFyIG09W10saz10aGlzLm5vZGVzKCksUz0wO1M8ay5sZW5ndGg7UysrKWZvcih2YXIgTT1rW1NdLE89TS5jb25uZWN0ZWRFZGdlcygpLE49MDtOPE8ubGVuZ3RoO04rKyl7dmFyICQ9T1tOXSxIPSQuc291cmNlKCkscT0kLnRhcmdldCgpLFk9TT09PUg/cTpIO1kubGVuZ3RoPjAmJm0ucHVzaChZWzBdKSxtLnB1c2goJFswXSl9cmV0dXJuIHRoaXMuc3Bhd24obSwhMCkuZmlsdGVyKHgpfSwibmVpZ2hib3Job29kIiksY2xvc2VkTmVpZ2hib3Job29kOmZ1bmN0aW9uKG0pe3JldHVybiB0aGlzLm5laWdoYm9yaG9vZCgpLmFkZCh0aGlzKS5maWx0ZXIobSl9LG9wZW5OZWlnaGJvcmhvb2Q6ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMubmVpZ2hib3Job29kKG0pfX0pLGsxLm5laWdoYm91cmhvb2Q9azEubmVpZ2hib3Job29kLGsxLmNsb3NlZE5laWdoYm91cmhvb2Q9azEuY2xvc2VkTmVpZ2hib3Job29kLGsxLm9wZW5OZWlnaGJvdXJob29kPWsxLm9wZW5OZWlnaGJvcmhvb2QseXQoazEse3NvdXJjZTpScChmdW5jdGlvbihtKXt2YXIgaz10aGlzWzBdLFM7cmV0dXJuIGsmJihTPWsuX3ByaXZhdGUuc291cmNlfHxrLmN5KCkuY29sbGVjdGlvbigpKSxTJiZtP1MuZmlsdGVyKG0pOlN9LCJzb3VyY2UiKSx0YXJnZXQ6UnAoZnVuY3Rpb24obSl7dmFyIGs9dGhpc1swXSxTO3JldHVybiBrJiYoUz1rLl9wcml2YXRlLnRhcmdldHx8ay5jeSgpLmNvbGxlY3Rpb24oKSksUyYmbT9TLmZpbHRlcihtKTpTfSwidGFyZ2V0Iiksc291cmNlczpEJCh7YXR0cjoic291cmNlIn0pLHRhcmdldHM6RCQoe2F0dHI6InRhcmdldCJ9KX0pO2Z1bmN0aW9uIEQkKHgpe3JldHVybiBmdW5jdGlvbihrKXtmb3IodmFyIFM9W10sTT0wO008dGhpcy5sZW5ndGg7TSsrKXt2YXIgTz10aGlzW01dLE49Ty5fcHJpdmF0ZVt4LmF0dHJdO04mJlMucHVzaChOKX1yZXR1cm4gdGhpcy5zcGF3bihTLCEwKS5maWx0ZXIoayl9fXl0KGsxLHtlZGdlc1dpdGg6UnAoSSQoKSwiZWRnZXNXaXRoIiksZWRnZXNUbzpScChJJCh7dGhpc0lzU3JjOiEwfSksImVkZ2VzVG8iKX0pO2Z1bmN0aW9uIEkkKHgpe3JldHVybiBmdW5jdGlvbihrKXt2YXIgUz1bXSxNPXRoaXMuX3ByaXZhdGUuY3ksTz14fHx7fTtiZShrKSYmKGs9TS4kKGspKTtmb3IodmFyIE49MDtOPGsubGVuZ3RoO04rKylmb3IodmFyICQ9a1tOXS5fcHJpdmF0ZS5lZGdlcyxIPTA7SDwkLmxlbmd0aDtIKyspe3ZhciBxPSRbSF0sWT1xLl9wcml2YXRlLmRhdGEsWj10aGlzLmhhc0VsZW1lbnRXaXRoSWQoWS5zb3VyY2UpJiZrLmhhc0VsZW1lbnRXaXRoSWQoWS50YXJnZXQpLGNlPWsuaGFzRWxlbWVudFdpdGhJZChZLnNvdXJjZSkmJnRoaXMuaGFzRWxlbWVudFdpdGhJZChZLnRhcmdldCksdmU9Wnx8Y2U7dmUmJigoTy50aGlzSXNTcmN8fE8udGhpc0lzVGd0KSYmKE8udGhpc0lzU3JjJiYhWnx8Ty50aGlzSXNUZ3QmJiFjZSl8fFMucHVzaChxKSl9cmV0dXJuIHRoaXMuc3Bhd24oUywhMCl9fXl0KGsxLHtjb25uZWN0ZWRFZGdlczpScChmdW5jdGlvbih4KXtmb3IodmFyIG09W10saz10aGlzLFM9MDtTPGsubGVuZ3RoO1MrKyl7dmFyIE09a1tTXTtpZihNLmlzTm9kZSgpKWZvcih2YXIgTz1NLl9wcml2YXRlLmVkZ2VzLE49MDtOPE8ubGVuZ3RoO04rKyl7dmFyICQ9T1tOXTttLnB1c2goJCl9fXJldHVybiB0aGlzLnNwYXduKG0sITApLmZpbHRlcih4KX0sImNvbm5lY3RlZEVkZ2VzIiksY29ubmVjdGVkTm9kZXM6UnAoZnVuY3Rpb24oeCl7Zm9yKHZhciBtPVtdLGs9dGhpcyxTPTA7UzxrLmxlbmd0aDtTKyspe3ZhciBNPWtbU107TS5pc0VkZ2UoKSYmKG0ucHVzaChNLnNvdXJjZSgpWzBdKSxtLnB1c2goTS50YXJnZXQoKVswXSkpfXJldHVybiB0aGlzLnNwYXduKG0sITApLmZpbHRlcih4KX0sImNvbm5lY3RlZE5vZGVzIikscGFyYWxsZWxFZGdlczpScChPJCgpLCJwYXJhbGxlbEVkZ2VzIiksY29kaXJlY3RlZEVkZ2VzOlJwKE8kKHtjb2RpcmVjdGVkOiEwfSksImNvZGlyZWN0ZWRFZGdlcyIpfSk7ZnVuY3Rpb24gTyQoeCl7dmFyIG09e2NvZGlyZWN0ZWQ6ITF9O3JldHVybiB4PXl0KHt9LG0seCksZnVuY3Rpb24oUyl7Zm9yKHZhciBNPVtdLE89dGhpcy5lZGdlcygpLE49eCwkPTA7JDxPLmxlbmd0aDskKyspZm9yKHZhciBIPU9bJF0scT1ILl9wcml2YXRlLFk9cS5zb3VyY2UsWj1ZLl9wcml2YXRlLmRhdGEuaWQsY2U9cS5kYXRhLnRhcmdldCx2ZT1ZLl9wcml2YXRlLmVkZ2VzLG1lPTA7bWU8dmUubGVuZ3RoO21lKyspe3ZhciBMZT12ZVttZV0sX2U9TGUuX3ByaXZhdGUuZGF0YSxFZT1fZS50YXJnZXQsQmU9X2Uuc291cmNlLFJlPUVlPT09Y2UmJkJlPT09WixWZT1aPT09RWUmJmNlPT09QmU7KE4uY29kaXJlY3RlZCYmUmV8fCFOLmNvZGlyZWN0ZWQmJihSZXx8VmUpKSYmTS5wdXNoKExlKX1yZXR1cm4gdGhpcy5zcGF3bihNLCEwKS5maWx0ZXIoUyl9fXl0KGsxLHtjb21wb25lbnRzOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMsUz1rLmN5KCksTT1TLmNvbGxlY3Rpb24oKSxPPW09PW51bGw/ay5ub2RlcygpOm0ubm9kZXMoKSxOPVtdO20hPW51bGwmJk8uZW1wdHkoKSYmKE89bS5zb3VyY2VzKCkpO3ZhciAkPWZ1bmN0aW9uKFksWil7TS5tZXJnZShZKSxPLnVubWVyZ2UoWSksWi5tZXJnZShZKX07aWYoTy5lbXB0eSgpKXJldHVybiBrLnNwYXduKCk7dmFyIEg9ZnVuY3Rpb24oKXt2YXIgWT1TLmNvbGxlY3Rpb24oKTtOLnB1c2goWSk7dmFyIFo9T1swXTskKFosWSksay5iZnMoe2RpcmVjdGVkOiExLHJvb3RzOlosdmlzaXQ6ZnVuY3Rpb24odmUpe3JldHVybiAkKHZlLFkpfX0pLFkuZm9yRWFjaChmdW5jdGlvbihjZSl7Y2UuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHZlKXtrLmhhcyh2ZSkmJlkuaGFzKHZlLnNvdXJjZSgpKSYmWS5oYXModmUudGFyZ2V0KCkpJiZZLm1lcmdlKHZlKX0pfSl9O2RvIEgoKTt3aGlsZShPLmxlbmd0aD4wKTtyZXR1cm4gTn0sY29tcG9uZW50OmZ1bmN0aW9uKCl7dmFyIG09dGhpc1swXTtyZXR1cm4gbS5jeSgpLm11dGFibGVFbGVtZW50cygpLmNvbXBvbmVudHMobSlbMF19fSksazEuY29tcG9uZW50c09mPWsxLmNvbXBvbmVudHM7dmFyIFYwPWZ1bmN0aW9uKG0sayl7dmFyIFM9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiExLE09YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiExO2lmKG09PT12b2lkIDApe2NoKCJBIGNvbGxlY3Rpb24gbXVzdCBoYXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBjb3JlIik7cmV0dXJufXZhciBPPW5ldyB3bSxOPSExO2lmKCFrKWs9W107ZWxzZSBpZihrLmxlbmd0aD4wJiZzZShrWzBdKSYmIVUoa1swXSkpe049ITA7Zm9yKHZhciAkPVtdLEg9bmV3IFE3LHE9MCxZPWsubGVuZ3RoO3E8WTtxKyspe3ZhciBaPWtbcV07Wi5kYXRhPT1udWxsJiYoWi5kYXRhPXt9KTt2YXIgY2U9Wi5kYXRhO2lmKGNlLmlkPT1udWxsKWNlLmlkPW9qKCk7ZWxzZSBpZihtLmhhc0VsZW1lbnRXaXRoSWQoY2UuaWQpfHxILmhhcyhjZS5pZCkpY29udGludWU7dmFyIHZlPW5ldyB1UyhtLFosITEpOyQucHVzaCh2ZSksSC5hZGQoY2UuaWQpfWs9JH10aGlzLmxlbmd0aD0wO2Zvcih2YXIgbWU9MCxMZT1rLmxlbmd0aDttZTxMZTttZSsrKXt2YXIgX2U9a1ttZV1bMF07aWYoX2UhPW51bGwpe3ZhciBFZT1fZS5fcHJpdmF0ZS5kYXRhLmlkOyghU3x8IU8uaGFzKEVlKSkmJihTJiZPLnNldChFZSx7aW5kZXg6dGhpcy5sZW5ndGgsZWxlOl9lfSksdGhpc1t0aGlzLmxlbmd0aF09X2UsdGhpcy5sZW5ndGgrKyl9fXRoaXMuX3ByaXZhdGU9e2VsZXM6dGhpcyxjeTptLGdldCBtYXAoKXtyZXR1cm4gdGhpcy5sYXp5TWFwPT1udWxsJiZ0aGlzLnJlYnVpbGRNYXAoKSx0aGlzLmxhenlNYXB9LHNldCBtYXAoQmUpe3RoaXMubGF6eU1hcD1CZX0scmVidWlsZE1hcDpmdW5jdGlvbigpe2Zvcih2YXIgUmU9dGhpcy5sYXp5TWFwPW5ldyB3bSxWZT10aGlzLmVsZXMsY3Q9MDtjdDxWZS5sZW5ndGg7Y3QrKyl7dmFyIHN0PVZlW2N0XTtSZS5zZXQoc3QuaWQoKSx7aW5kZXg6Y3QsZWxlOnN0fSl9fX0sUyYmKHRoaXMuX3ByaXZhdGUubWFwPU8pLE4mJiFNJiZ0aGlzLnJlc3RvcmUoKX0sbmw9dVMucHJvdG90eXBlPVYwLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEFycmF5LnByb3RvdHlwZSk7bmwuaW5zdGFuY2VTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iY29sbGVjdGlvbiJ9LG5sLnNwYXduPWZ1bmN0aW9uKHgsbSl7cmV0dXJuIG5ldyBWMCh0aGlzLmN5KCkseCxtKX0sbmwuc3Bhd25TZWxmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3Bhd24odGhpcyl9LG5sLmN5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuY3l9LG5sLnJlbmRlcmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuY3kucmVuZGVyZXIoKX0sbmwuZWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzWzBdfSxubC5jb2xsZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIEZlKHRoaXMpP3RoaXM6bmV3IFYwKHRoaXMuX3ByaXZhdGUuY3ksW3RoaXNdKX0sbmwudW5pcXVlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWMCh0aGlzLl9wcml2YXRlLmN5LHRoaXMsITApfSxubC5oYXNFbGVtZW50V2l0aElkPWZ1bmN0aW9uKHgpe3JldHVybiB4PSIiK3gsdGhpcy5fcHJpdmF0ZS5tYXAuaGFzKHgpfSxubC5nZXRFbGVtZW50QnlJZD1mdW5jdGlvbih4KXt4PSIiK3g7dmFyIG09dGhpcy5fcHJpdmF0ZS5jeSxrPXRoaXMuX3ByaXZhdGUubWFwLmdldCh4KTtyZXR1cm4gaz9rLmVsZTpuZXcgVjAobSl9LG5sLiRpZD1ubC5nZXRFbGVtZW50QnlJZCxubC5wb29sSW5kZXg9ZnVuY3Rpb24oKXt2YXIgeD10aGlzLl9wcml2YXRlLmN5LG09eC5fcHJpdmF0ZS5lbGVtZW50cyxrPXRoaXNbMF0uX3ByaXZhdGUuZGF0YS5pZDtyZXR1cm4gbS5fcHJpdmF0ZS5tYXAuZ2V0KGspLmluZGV4fSxubC5pbmRleE9mPWZ1bmN0aW9uKHgpe3ZhciBtPXhbMF0uX3ByaXZhdGUuZGF0YS5pZDtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5tYXAuZ2V0KG0pLmluZGV4fSxubC5pbmRleE9mSWQ9ZnVuY3Rpb24oeCl7cmV0dXJuIHg9IiIreCx0aGlzLl9wcml2YXRlLm1hcC5nZXQoeCkuaW5kZXh9LG5sLmpzb249ZnVuY3Rpb24oeCl7dmFyIG09dGhpcy5lbGVtZW50KCksaz10aGlzLmN5KCk7aWYobT09bnVsbCYmeClyZXR1cm4gdGhpcztpZihtIT1udWxsKXt2YXIgUz1tLl9wcml2YXRlO2lmKHNlKHgpKXtpZihrLnN0YXJ0QmF0Y2goKSx4LmRhdGEpe20uZGF0YSh4LmRhdGEpO3ZhciBNPVMuZGF0YTtpZihtLmlzRWRnZSgpKXt2YXIgTz0hMSxOPXt9LCQ9eC5kYXRhLnNvdXJjZSxIPXguZGF0YS50YXJnZXQ7JCE9bnVsbCYmJCE9TS5zb3VyY2UmJihOLnNvdXJjZT0iIiskLE89ITApLEghPW51bGwmJkghPU0udGFyZ2V0JiYoTi50YXJnZXQ9IiIrSCxPPSEwKSxPJiYobT1tLm1vdmUoTikpfWVsc2V7dmFyIHE9InBhcmVudCJpbiB4LmRhdGEsWT14LmRhdGEucGFyZW50O3EmJihZIT1udWxsfHxNLnBhcmVudCE9bnVsbCkmJlkhPU0ucGFyZW50JiYoWT09PXZvaWQgMCYmKFk9bnVsbCksWSE9bnVsbCYmKFk9IiIrWSksbT1tLm1vdmUoe3BhcmVudDpZfSkpfX14LnBvc2l0aW9uJiZtLnBvc2l0aW9uKHgucG9zaXRpb24pO3ZhciBaPWZ1bmN0aW9uKExlLF9lLEVlKXt2YXIgQmU9eFtMZV07QmUhPW51bGwmJkJlIT09U1tMZV0mJihCZT9tW19lXSgpOm1bRWVdKCkpfTtyZXR1cm4gWigicmVtb3ZlZCIsInJlbW92ZSIsInJlc3RvcmUiKSxaKCJzZWxlY3RlZCIsInNlbGVjdCIsInVuc2VsZWN0IiksWigic2VsZWN0YWJsZSIsInNlbGVjdGlmeSIsInVuc2VsZWN0aWZ5IiksWigibG9ja2VkIiwibG9jayIsInVubG9jayIpLFooImdyYWJiYWJsZSIsImdyYWJpZnkiLCJ1bmdyYWJpZnkiKSxaKCJwYW5uYWJsZSIsInBhbmlmeSIsInVucGFuaWZ5IikseC5jbGFzc2VzIT1udWxsJiZtLmNsYXNzZXMoeC5jbGFzc2VzKSxrLmVuZEJhdGNoKCksdGhpc31lbHNlIGlmKHg9PT12b2lkIDApe3ZhciBjZT17ZGF0YTp2bShTLmRhdGEpLHBvc2l0aW9uOnZtKFMucG9zaXRpb24pLGdyb3VwOlMuZ3JvdXAscmVtb3ZlZDpTLnJlbW92ZWQsc2VsZWN0ZWQ6Uy5zZWxlY3RlZCxzZWxlY3RhYmxlOlMuc2VsZWN0YWJsZSxsb2NrZWQ6Uy5sb2NrZWQsZ3JhYmJhYmxlOlMuZ3JhYmJhYmxlLHBhbm5hYmxlOlMucGFubmFibGUsY2xhc3NlczpudWxsfTtjZS5jbGFzc2VzPSIiO3ZhciB2ZT0wO3JldHVybiBTLmNsYXNzZXMuZm9yRWFjaChmdW5jdGlvbihtZSl7cmV0dXJuIGNlLmNsYXNzZXMrPXZlKys9PT0wP21lOiIgIittZX0pLGNlfX19LG5sLmpzb25zPWZ1bmN0aW9uKCl7Zm9yKHZhciB4PVtdLG09MDttPHRoaXMubGVuZ3RoO20rKyl7dmFyIGs9dGhpc1ttXSxTPWsuanNvbigpO3gucHVzaChTKX1yZXR1cm4geH0sbmwuY2xvbmU9ZnVuY3Rpb24oKXtmb3IodmFyIHg9dGhpcy5jeSgpLG09W10saz0wO2s8dGhpcy5sZW5ndGg7aysrKXt2YXIgUz10aGlzW2tdLE09Uy5qc29uKCksTz1uZXcgdVMoeCxNLCExKTttLnB1c2goTyl9cmV0dXJuIG5ldyBWMCh4LG0pfSxubC5jb3B5PW5sLmNsb25lLG5sLnJlc3RvcmU9ZnVuY3Rpb24oKXtmb3IodmFyIHg9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiEwLG09YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwLGs9dGhpcyxTPWsuY3koKSxNPVMuX3ByaXZhdGUsTz1bXSxOPVtdLCQsSD0wLHE9ay5sZW5ndGg7SDxxO0grKyl7dmFyIFk9a1tIXTttJiYhWS5yZW1vdmVkKCl8fChZLmlzTm9kZSgpP08ucHVzaChZKTpOLnB1c2goWSkpfSQ9Ty5jb25jYXQoTik7dmFyIFosY2U9ZnVuY3Rpb24oKXskLnNwbGljZShaLDEpLFotLX07Zm9yKFo9MDtaPCQubGVuZ3RoO1orKyl7dmFyIHZlPSRbWl0sbWU9dmUuX3ByaXZhdGUsTGU9bWUuZGF0YTtpZih2ZS5jbGVhclRyYXZlcnNhbENhY2hlKCksISghbSYmIW1lLnJlbW92ZWQpKXtpZihMZS5pZD09PXZvaWQgMClMZS5pZD1vaigpO2Vsc2UgaWYoWChMZS5pZCkpTGUuaWQ9IiIrTGUuaWQ7ZWxzZSBpZihTZShMZS5pZCl8fCFiZShMZS5pZCkpe2NoKCJDYW4gbm90IGNyZWF0ZSBlbGVtZW50IHdpdGggaW52YWxpZCBzdHJpbmcgSUQgYCIrTGUuaWQrImAiKSxjZSgpO2NvbnRpbnVlfWVsc2UgaWYoUy5oYXNFbGVtZW50V2l0aElkKExlLmlkKSl7Y2goIkNhbiBub3QgY3JlYXRlIHNlY29uZCBlbGVtZW50IHdpdGggSUQgYCIrTGUuaWQrImAiKSxjZSgpO2NvbnRpbnVlfX12YXIgX2U9TGUuaWQ7aWYodmUuaXNOb2RlKCkpe3ZhciBFZT1tZS5wb3NpdGlvbjtFZS54PT1udWxsJiYoRWUueD0wKSxFZS55PT1udWxsJiYoRWUueT0wKX1pZih2ZS5pc0VkZ2UoKSl7Zm9yKHZhciBCZT12ZSxSZT1bInNvdXJjZSIsInRhcmdldCJdLFZlPVJlLmxlbmd0aCxjdD0hMSxzdD0wO3N0PFZlO3N0Kyspe3ZhciBZZT1SZVtzdF0sbXQ9TGVbWWVdO1gobXQpJiYobXQ9TGVbWWVdPSIiK0xlW1llXSksbXQ9PW51bGx8fG10PT09IiI/KGNoKCJDYW4gbm90IGNyZWF0ZSBlZGdlIGAiK19lKyJgIHdpdGggdW5zcGVjaWZpZWQgIitZZSksY3Q9ITApOlMuaGFzRWxlbWVudFdpdGhJZChtdCl8fChjaCgiQ2FuIG5vdCBjcmVhdGUgZWRnZSBgIitfZSsiYCB3aXRoIG5vbmV4aXN0YW50ICIrWWUrIiBgIittdCsiYCIpLGN0PSEwKX1pZihjdCl7Y2UoKTtjb250aW51ZX12YXIgSmU9Uy5nZXRFbGVtZW50QnlJZChMZS5zb3VyY2UpLEx0PVMuZ2V0RWxlbWVudEJ5SWQoTGUudGFyZ2V0KTtKZS5zYW1lKEx0KT9KZS5fcHJpdmF0ZS5lZGdlcy5wdXNoKEJlKTooSmUuX3ByaXZhdGUuZWRnZXMucHVzaChCZSksTHQuX3ByaXZhdGUuZWRnZXMucHVzaChCZSkpLEJlLl9wcml2YXRlLnNvdXJjZT1KZSxCZS5fcHJpdmF0ZS50YXJnZXQ9THR9bWUubWFwPW5ldyB3bSxtZS5tYXAuc2V0KF9lLHtlbGU6dmUsaW5kZXg6MH0pLG1lLnJlbW92ZWQ9ITEsbSYmUy5hZGRUb1Bvb2wodmUpfWZvcih2YXIgTXQ9MDtNdDxPLmxlbmd0aDtNdCsrKXt2YXIgdXQ9T1tNdF0sV3Q9dXQuX3ByaXZhdGUuZGF0YTtYKFd0LnBhcmVudCkmJihXdC5wYXJlbnQ9IiIrV3QucGFyZW50KTt2YXIgVHQ9V3QucGFyZW50LF9uPVR0IT1udWxsO2lmKF9ufHx1dC5fcHJpdmF0ZS5wYXJlbnQpe3ZhciBobj11dC5fcHJpdmF0ZS5wYXJlbnQ/Uy5jb2xsZWN0aW9uKCkubWVyZ2UodXQuX3ByaXZhdGUucGFyZW50KTpTLmdldEVsZW1lbnRCeUlkKFR0KTtpZihobi5lbXB0eSgpKVd0LnBhcmVudD12b2lkIDA7ZWxzZSBpZihoblswXS5yZW1vdmVkKCkpaHUoIk5vZGUgYWRkZWQgd2l0aCBtaXNzaW5nIHBhcmVudCwgcmVmZXJlbmNlIHRvIHBhcmVudCByZW1vdmVkIiksV3QucGFyZW50PXZvaWQgMCx1dC5fcHJpdmF0ZS5wYXJlbnQ9bnVsbDtlbHNle2Zvcih2YXIgWXQ9ITEsRG49aG47IURuLmVtcHR5KCk7KXtpZih1dC5zYW1lKERuKSl7WXQ9ITAsV3QucGFyZW50PXZvaWQgMDticmVha31Ebj1Ebi5wYXJlbnQoKX1ZdHx8KGhuWzBdLl9wcml2YXRlLmNoaWxkcmVuLnB1c2godXQpLHV0Ll9wcml2YXRlLnBhcmVudD1oblswXSxNLmhhc0NvbXBvdW5kTm9kZXM9ITApfX19aWYoJC5sZW5ndGg+MCl7Zm9yKHZhciBpcj0kLmxlbmd0aD09PWsubGVuZ3RoP2s6bmV3IFYwKFMsJCksdnI9MDt2cjxpci5sZW5ndGg7dnIrKyl7dmFyIE5uPWlyW3ZyXTtObi5pc05vZGUoKXx8KE5uLnBhcmFsbGVsRWRnZXMoKS5jbGVhclRyYXZlcnNhbENhY2hlKCksTm4uc291cmNlKCkuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpLE5uLnRhcmdldCgpLmNsZWFyVHJhdmVyc2FsQ2FjaGUoKSl9dmFyIHByO00uaGFzQ29tcG91bmROb2Rlcz9wcj1TLmNvbGxlY3Rpb24oKS5tZXJnZShpcikubWVyZ2UoaXIuY29ubmVjdGVkTm9kZXMoKSkubWVyZ2UoaXIucGFyZW50KCkpOnByPWlyLHByLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLnVwZGF0ZVN0eWxlKHgpLHg/aXIuZW1pdEFuZE5vdGlmeSgiYWRkIik6bSYmaXIuZW1pdCgiYWRkIil9cmV0dXJuIGt9LG5sLnJlbW92ZWQ9ZnVuY3Rpb24oKXt2YXIgeD10aGlzWzBdO3JldHVybiB4JiZ4Ll9wcml2YXRlLnJlbW92ZWR9LG5sLmluc2lkZT1mdW5jdGlvbigpe3ZhciB4PXRoaXNbMF07cmV0dXJuIHgmJiF4Ll9wcml2YXRlLnJlbW92ZWR9LG5sLnJlbW92ZT1mdW5jdGlvbigpe3ZhciB4PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMCxtPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMCxrPXRoaXMsUz1bXSxNPXt9LE89ay5fcHJpdmF0ZS5jeTtmdW5jdGlvbiBOKFR0KXtmb3IodmFyIF9uPVR0Ll9wcml2YXRlLmVkZ2VzLGhuPTA7aG48X24ubGVuZ3RoO2huKyspSChfbltobl0pfWZ1bmN0aW9uICQoVHQpe2Zvcih2YXIgX249VHQuX3ByaXZhdGUuY2hpbGRyZW4saG49MDtobjxfbi5sZW5ndGg7aG4rKylIKF9uW2huXSl9ZnVuY3Rpb24gSChUdCl7dmFyIF9uPU1bVHQuaWQoKV07bSYmVHQucmVtb3ZlZCgpfHxfbnx8KE1bVHQuaWQoKV09ITAsVHQuaXNOb2RlKCk/KFMucHVzaChUdCksTihUdCksJChUdCkpOlMudW5zaGlmdChUdCkpfWZvcih2YXIgcT0wLFk9ay5sZW5ndGg7cTxZO3ErKyl7dmFyIFo9a1txXTtIKFopfWZ1bmN0aW9uIGNlKFR0LF9uKXt2YXIgaG49VHQuX3ByaXZhdGUuZWRnZXM7UTMoaG4sX24pLFR0LmNsZWFyVHJhdmVyc2FsQ2FjaGUoKX1mdW5jdGlvbiB2ZShUdCl7VHQuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpfXZhciBtZT1bXTttZS5pZHM9e307ZnVuY3Rpb24gTGUoVHQsX24pe19uPV9uWzBdLFR0PVR0WzBdO3ZhciBobj1UdC5fcHJpdmF0ZS5jaGlsZHJlbixZdD1UdC5pZCgpO1EzKGhuLF9uKSxfbi5fcHJpdmF0ZS5wYXJlbnQ9bnVsbCxtZS5pZHNbWXRdfHwobWUuaWRzW1l0XT0hMCxtZS5wdXNoKFR0KSl9ay5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKSxtJiZPLnJlbW92ZUZyb21Qb29sKFMpO2Zvcih2YXIgX2U9MDtfZTxTLmxlbmd0aDtfZSsrKXt2YXIgRWU9U1tfZV07aWYoRWUuaXNFZGdlKCkpe3ZhciBCZT1FZS5zb3VyY2UoKVswXSxSZT1FZS50YXJnZXQoKVswXTtjZShCZSxFZSksY2UoUmUsRWUpO2Zvcih2YXIgVmU9RWUucGFyYWxsZWxFZGdlcygpLGN0PTA7Y3Q8VmUubGVuZ3RoO2N0Kyspe3ZhciBzdD1WZVtjdF07dmUoc3QpLHN0LmlzQnVuZGxlZEJlemllcigpJiZzdC5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKX19ZWxzZXt2YXIgWWU9RWUucGFyZW50KCk7WWUubGVuZ3RoIT09MCYmTGUoWWUsRWUpfW0mJihFZS5fcHJpdmF0ZS5yZW1vdmVkPSEwKX12YXIgbXQ9Ty5fcHJpdmF0ZS5lbGVtZW50cztPLl9wcml2YXRlLmhhc0NvbXBvdW5kTm9kZXM9ITE7Zm9yKHZhciBKZT0wO0plPG10Lmxlbmd0aDtKZSsrKXt2YXIgTHQ9bXRbSmVdO2lmKEx0LmlzUGFyZW50KCkpe08uX3ByaXZhdGUuaGFzQ29tcG91bmROb2Rlcz0hMDticmVha319dmFyIE10PW5ldyBWMCh0aGlzLmN5KCksUyk7TXQuc2l6ZSgpPjAmJih4P010LmVtaXRBbmROb3RpZnkoInJlbW92ZSIpOm0mJk10LmVtaXQoInJlbW92ZSIpKTtmb3IodmFyIHV0PTA7dXQ8bWUubGVuZ3RoO3V0Kyspe3ZhciBXdD1tZVt1dF07KCFtfHwhV3QucmVtb3ZlZCgpKSYmV3QudXBkYXRlU3R5bGUoKX1yZXR1cm4gTXR9LG5sLm1vdmU9ZnVuY3Rpb24oeCl7dmFyIG09dGhpcy5fcHJpdmF0ZS5jeSxrPXRoaXMsUz0hMSxNPSExLE89ZnVuY3Rpb24obWUpe3JldHVybiBtZT09bnVsbD9tZToiIittZX07aWYoeC5zb3VyY2UhPT12b2lkIDB8fHgudGFyZ2V0IT09dm9pZCAwKXt2YXIgTj1PKHguc291cmNlKSwkPU8oeC50YXJnZXQpLEg9TiE9bnVsbCYmbS5oYXNFbGVtZW50V2l0aElkKE4pLHE9JCE9bnVsbCYmbS5oYXNFbGVtZW50V2l0aElkKCQpOyhIfHxxKSYmKG0uYmF0Y2goZnVuY3Rpb24oKXtrLnJlbW92ZShTLE0pLGsuZW1pdEFuZE5vdGlmeSgibW92ZW91dCIpO2Zvcih2YXIgdmU9MDt2ZTxrLmxlbmd0aDt2ZSsrKXt2YXIgbWU9a1t2ZV0sTGU9bWUuX3ByaXZhdGUuZGF0YTttZS5pc0VkZ2UoKSYmKEgmJihMZS5zb3VyY2U9TikscSYmKExlLnRhcmdldD0kKSl9ay5yZXN0b3JlKFMsTSl9KSxrLmVtaXRBbmROb3RpZnkoIm1vdmUiKSl9ZWxzZSBpZih4LnBhcmVudCE9PXZvaWQgMCl7dmFyIFk9Tyh4LnBhcmVudCksWj1ZPT09bnVsbHx8bS5oYXNFbGVtZW50V2l0aElkKFkpO2lmKFope3ZhciBjZT1ZPT09bnVsbD92b2lkIDA6WTttLmJhdGNoKGZ1bmN0aW9uKCl7dmFyIHZlPWsucmVtb3ZlKFMsTSk7dmUuZW1pdEFuZE5vdGlmeSgibW92ZW91dCIpO2Zvcih2YXIgbWU9MDttZTxrLmxlbmd0aDttZSsrKXt2YXIgTGU9a1ttZV0sX2U9TGUuX3ByaXZhdGUuZGF0YTtMZS5pc05vZGUoKSYmKF9lLnBhcmVudD1jZSl9dmUucmVzdG9yZShTLE0pfSksay5lbWl0QW5kTm90aWZ5KCJtb3ZlIil9fXJldHVybiB0aGlzfSxbQmosa25lLFNTLHR5LHU4LG55LEo5LFRJLF8kLENJLFNJLERTLElTLEgwLFhkLGsxXS5mb3JFYWNoKGZ1bmN0aW9uKHgpe3l0KG5sLHgpfSk7dmFyIHNyZT17YWRkOmZ1bmN0aW9uKG0pe3ZhciBrLFM9dGhpcztpZih4ZShtKSl7dmFyIE09bTtpZihNLl9wcml2YXRlLmN5PT09UylrPU0ucmVzdG9yZSgpO2Vsc2V7Zm9yKHZhciBPPVtdLE49MDtOPE0ubGVuZ3RoO04rKyl7dmFyICQ9TVtOXTtPLnB1c2goJC5qc29uKCkpfWs9bmV3IFYwKFMsTyl9fWVsc2UgaWYobmUobSkpe3ZhciBIPW07az1uZXcgVjAoUyxIKX1lbHNlIGlmKHNlKG0pJiYobmUobS5ub2Rlcyl8fG5lKG0uZWRnZXMpKSl7Zm9yKHZhciBxPW0sWT1bXSxaPVsibm9kZXMiLCJlZGdlcyJdLGNlPTAsdmU9Wi5sZW5ndGg7Y2U8dmU7Y2UrKyl7dmFyIG1lPVpbY2VdLExlPXFbbWVdO2lmKG5lKExlKSlmb3IodmFyIF9lPTAsRWU9TGUubGVuZ3RoO19lPEVlO19lKyspe3ZhciBCZT15dCh7Z3JvdXA6bWV9LExlW19lXSk7WS5wdXNoKEJlKX19az1uZXcgVjAoUyxZKX1lbHNle3ZhciBSZT1tO2s9bmV3IHVTKFMsUmUpLmNvbGxlY3Rpb24oKX1yZXR1cm4ga30scmVtb3ZlOmZ1bmN0aW9uKG0pe2lmKCF4ZShtKSl7aWYoYmUobSkpe3ZhciBrPW07bT10aGlzLiQoayl9fXJldHVybiBtLnJlbW92ZSgpfX07LyohIEJlemllciBjdXJ2ZSBmdW5jdGlvbiBnZW5lcmF0b3IuIENvcHlyaWdodCBHYWV0YW4gUmVuYXVkZWF1LiBNSVQgTGljZW5zZTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NSVRfTGljZW5zZSAqL2Z1bmN0aW9uIGFyZSh4LG0sayxTKXt2YXIgTT00LE89LjAwMSxOPTFlLTcsJD0xMCxIPTExLHE9MS8oSC0xKSxZPXR5cGVvZiBGbG9hdDMyQXJyYXk8InUiO2lmKGFyZ3VtZW50cy5sZW5ndGghPT00KXJldHVybiExO2Zvcih2YXIgWj0wO1o8NDsrK1opaWYodHlwZW9mIGFyZ3VtZW50c1taXSE9Im51bWJlciJ8fGlzTmFOKGFyZ3VtZW50c1taXSl8fCFpc0Zpbml0ZShhcmd1bWVudHNbWl0pKXJldHVybiExO3g9TWF0aC5taW4oeCwxKSxrPU1hdGgubWluKGssMSkseD1NYXRoLm1heCh4LDApLGs9TWF0aC5tYXgoaywwKTt2YXIgY2U9WT9uZXcgRmxvYXQzMkFycmF5KEgpOm5ldyBBcnJheShIKTtmdW5jdGlvbiB2ZShMdCxNdCl7cmV0dXJuIDEtMypNdCszKkx0fWZ1bmN0aW9uIG1lKEx0LE10KXtyZXR1cm4gMypNdC02Kkx0fWZ1bmN0aW9uIExlKEx0KXtyZXR1cm4gMypMdH1mdW5jdGlvbiBfZShMdCxNdCx1dCl7cmV0dXJuKCh2ZShNdCx1dCkqTHQrbWUoTXQsdXQpKSpMdCtMZShNdCkpKkx0fWZ1bmN0aW9uIEVlKEx0LE10LHV0KXtyZXR1cm4gMyp2ZShNdCx1dCkqTHQqTHQrMiptZShNdCx1dCkqTHQrTGUoTXQpfWZ1bmN0aW9uIEJlKEx0LE10KXtmb3IodmFyIHV0PTA7dXQ8TTsrK3V0KXt2YXIgV3Q9RWUoTXQseCxrKTtpZihXdD09PTApcmV0dXJuIE10O3ZhciBUdD1fZShNdCx4LGspLUx0O010LT1UdC9XdH1yZXR1cm4gTXR9ZnVuY3Rpb24gUmUoKXtmb3IodmFyIEx0PTA7THQ8SDsrK0x0KWNlW0x0XT1fZShMdCpxLHgsayl9ZnVuY3Rpb24gVmUoTHQsTXQsdXQpe3ZhciBXdCxUdCxfbj0wO2RvIFR0PU10Kyh1dC1NdCkvMixXdD1fZShUdCx4LGspLUx0LFd0PjA/dXQ9VHQ6TXQ9VHQ7d2hpbGUoTWF0aC5hYnMoV3QpPk4mJisrX248JCk7cmV0dXJuIFR0fWZ1bmN0aW9uIGN0KEx0KXtmb3IodmFyIE10PTAsdXQ9MSxXdD1ILTE7dXQhPT1XdCYmY2VbdXRdPD1MdDsrK3V0KU10Kz1xOy0tdXQ7dmFyIFR0PShMdC1jZVt1dF0pLyhjZVt1dCsxXS1jZVt1dF0pLF9uPU10K1R0KnEsaG49RWUoX24seCxrKTtyZXR1cm4gaG4+PU8/QmUoTHQsX24pOmhuPT09MD9fbjpWZShMdCxNdCxNdCtxKX12YXIgc3Q9ITE7ZnVuY3Rpb24gWWUoKXtzdD0hMCwoeCE9PW18fGshPT1TKSYmUmUoKX12YXIgbXQ9ZnVuY3Rpb24oTXQpe3JldHVybiBzdHx8WWUoKSx4PT09bSYmaz09PVM/TXQ6TXQ9PT0wPzA6TXQ9PT0xPzE6X2UoY3QoTXQpLG0sUyl9O210LmdldENvbnRyb2xQb2ludHM9ZnVuY3Rpb24oKXtyZXR1cm5be3gseTptfSx7eDprLHk6U31dfTt2YXIgSmU9ImdlbmVyYXRlQmV6aWVyKCIrW3gsbSxrLFNdKyIpIjtyZXR1cm4gbXQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gSmV9LG10fS8qISBSdW5nZS1LdXR0YSBzcHJpbmcgcGh5c2ljcyBmdW5jdGlvbiBnZW5lcmF0b3IuIEFkYXB0ZWQgZnJvbSBGcmFtZXIuanMsIGNvcHlyaWdodCBLb2VuIEJvay4gTUlUIExpY2Vuc2U6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlUX0xpY2Vuc2UgKi92YXIgb3JlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24geChTKXtyZXR1cm4tUy50ZW5zaW9uKlMueC1TLmZyaWN0aW9uKlMudn1mdW5jdGlvbiBtKFMsTSxPKXt2YXIgTj17eDpTLngrTy5keCpNLHY6Uy52K08uZHYqTSx0ZW5zaW9uOlMudGVuc2lvbixmcmljdGlvbjpTLmZyaWN0aW9ufTtyZXR1cm57ZHg6Ti52LGR2OngoTil9fWZ1bmN0aW9uIGsoUyxNKXt2YXIgTz17ZHg6Uy52LGR2OngoUyl9LE49bShTLE0qLjUsTyksJD1tKFMsTSouNSxOKSxIPW0oUyxNLCQpLHE9MS82KihPLmR4KzIqKE4uZHgrJC5keCkrSC5keCksWT0xLzYqKE8uZHYrMiooTi5kdiskLmR2KStILmR2KTtyZXR1cm4gUy54PVMueCtxKk0sUy52PVMuditZKk0sU31yZXR1cm4gZnVuY3Rpb24gUyhNLE8sTil7dmFyICQ9e3g6LTEsdjowLHRlbnNpb246bnVsbCxmcmljdGlvbjpudWxsfSxIPVswXSxxPTAsWT0xLzFlNCxaPTE2LzFlMyxjZSx2ZSxtZTtmb3IoTT1wYXJzZUZsb2F0KE0pfHw1MDAsTz1wYXJzZUZsb2F0KE8pfHwyMCxOPU58fG51bGwsJC50ZW5zaW9uPU0sJC5mcmljdGlvbj1PLGNlPU4hPT1udWxsLGNlPyhxPVMoTSxPKSx2ZT1xL04qWik6dmU9WjttZT1rKG1lfHwkLHZlKSxILnB1c2goMSttZS54KSxxKz0xNixNYXRoLmFicyhtZS54KT5ZJiZNYXRoLmFicyhtZS52KT5ZOyk7cmV0dXJuIGNlP2Z1bmN0aW9uKExlKXtyZXR1cm4gSFtMZSooSC5sZW5ndGgtMSl8MF19OnF9fSgpLHJsPWZ1bmN0aW9uKG0sayxTLE0pe3ZhciBPPWFyZShtLGssUyxNKTtyZXR1cm4gZnVuY3Rpb24oTiwkLEgpe3JldHVybiBOKygkLU4pKk8oSCl9fSxCUz17bGluZWFyOmZ1bmN0aW9uKG0sayxTKXtyZXR1cm4gbSsoay1tKSpTfSxlYXNlOnJsKC4yNSwuMSwuMjUsMSksImVhc2UtaW4iOnJsKC40MiwwLDEsMSksImVhc2Utb3V0IjpybCgwLDAsLjU4LDEpLCJlYXNlLWluLW91dCI6cmwoLjQyLDAsLjU4LDEpLCJlYXNlLWluLXNpbmUiOnJsKC40NywwLC43NDUsLjcxNSksImVhc2Utb3V0LXNpbmUiOnJsKC4zOSwuNTc1LC41NjUsMSksImVhc2UtaW4tb3V0LXNpbmUiOnJsKC40NDUsLjA1LC41NSwuOTUpLCJlYXNlLWluLXF1YWQiOnJsKC41NSwuMDg1LC42OCwuNTMpLCJlYXNlLW91dC1xdWFkIjpybCguMjUsLjQ2LC40NSwuOTQpLCJlYXNlLWluLW91dC1xdWFkIjpybCguNDU1LC4wMywuNTE1LC45NTUpLCJlYXNlLWluLWN1YmljIjpybCguNTUsLjA1NSwuNjc1LC4xOSksImVhc2Utb3V0LWN1YmljIjpybCguMjE1LC42MSwuMzU1LDEpLCJlYXNlLWluLW91dC1jdWJpYyI6cmwoLjY0NSwuMDQ1LC4zNTUsMSksImVhc2UtaW4tcXVhcnQiOnJsKC44OTUsLjAzLC42ODUsLjIyKSwiZWFzZS1vdXQtcXVhcnQiOnJsKC4xNjUsLjg0LC40NCwxKSwiZWFzZS1pbi1vdXQtcXVhcnQiOnJsKC43NywwLC4xNzUsMSksImVhc2UtaW4tcXVpbnQiOnJsKC43NTUsLjA1LC44NTUsLjA2KSwiZWFzZS1vdXQtcXVpbnQiOnJsKC4yMywxLC4zMiwxKSwiZWFzZS1pbi1vdXQtcXVpbnQiOnJsKC44NiwwLC4wNywxKSwiZWFzZS1pbi1leHBvIjpybCguOTUsLjA1LC43OTUsLjAzNSksImVhc2Utb3V0LWV4cG8iOnJsKC4xOSwxLC4yMiwxKSwiZWFzZS1pbi1vdXQtZXhwbyI6cmwoMSwwLDAsMSksImVhc2UtaW4tY2lyYyI6cmwoLjYsLjA0LC45OCwuMzM1KSwiZWFzZS1vdXQtY2lyYyI6cmwoLjA3NSwuODIsLjE2NSwxKSwiZWFzZS1pbi1vdXQtY2lyYyI6cmwoLjc4NSwuMTM1LC4xNSwuODYpLHNwcmluZzpmdW5jdGlvbihtLGssUyl7aWYoUz09PTApcmV0dXJuIEJTLmxpbmVhcjt2YXIgTT1vcmUobSxrLFMpO3JldHVybiBmdW5jdGlvbihPLE4sJCl7cmV0dXJuIE8rKE4tTykqTSgkKX19LCJjdWJpYy1iZXppZXIiOnJsfTtmdW5jdGlvbiBOJCh4LG0sayxTLE0pe2lmKFM9PT0xfHxtPT09aylyZXR1cm4gazt2YXIgTz1NKG0sayxTKTtyZXR1cm4geD09bnVsbHx8KCh4LnJvdW5kVmFsdWV8fHguY29sb3IpJiYoTz1NYXRoLnJvdW5kKE8pKSx4Lm1pbiE9PXZvaWQgMCYmKE89TWF0aC5tYXgoTyx4Lm1pbikpLHgubWF4IT09dm9pZCAwJiYoTz1NYXRoLm1pbihPLHgubWF4KSkpLE99ZnVuY3Rpb24gUCQoeCxtKXtyZXR1cm4geC5wZlZhbHVlIT1udWxsfHx4LnZhbHVlIT1udWxsP3gucGZWYWx1ZSE9bnVsbCYmKG09PW51bGx8fG0udHlwZS51bml0cyE9PSIlIik/eC5wZlZhbHVlOngudmFsdWU6eH1mdW5jdGlvbiBnOCh4LG0sayxTLE0pe3ZhciBPPU0hPW51bGw/TS50eXBlOm51bGw7azwwP2s9MDprPjEmJihrPTEpO3ZhciBOPVAkKHgsTSksJD1QJChtLE0pO2lmKFgoTikmJlgoJCkpcmV0dXJuIE4kKE8sTiwkLGssUyk7aWYobmUoTikmJm5lKCQpKXtmb3IodmFyIEg9W10scT0wO3E8JC5sZW5ndGg7cSsrKXt2YXIgWT1OW3FdLFo9JFtxXTtpZihZIT1udWxsJiZaIT1udWxsKXt2YXIgY2U9TiQoTyxZLFosayxTKTtILnB1c2goY2UpfWVsc2UgSC5wdXNoKFopfXJldHVybiBIfX1mdW5jdGlvbiBjcmUoeCxtLGssUyl7dmFyIE09IVMsTz14Ll9wcml2YXRlLE49bS5fcHJpdmF0ZSwkPU4uZWFzaW5nLEg9Ti5zdGFydFRpbWUscT1TP3g6eC5jeSgpLFk9cS5zdHlsZSgpO2lmKCFOLmVhc2luZ0ltcGwpaWYoJD09bnVsbClOLmVhc2luZ0ltcGw9QlMubGluZWFyO2Vsc2V7dmFyIFo7aWYoYmUoJCkpe3ZhciBjZT1ZLnBhcnNlKCJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiIsJCk7Wj1jZS52YWx1ZX1lbHNlIFo9JDt2YXIgdmUsbWU7YmUoWik/KHZlPVosbWU9W10pOih2ZT1aWzFdLG1lPVouc2xpY2UoMikubWFwKGZ1bmN0aW9uKGlyKXtyZXR1cm4raXJ9KSksbWUubGVuZ3RoPjA/KHZlPT09InNwcmluZyImJm1lLnB1c2goTi5kdXJhdGlvbiksTi5lYXNpbmdJbXBsPUJTW3ZlXS5hcHBseShudWxsLG1lKSk6Ti5lYXNpbmdJbXBsPUJTW3ZlXX12YXIgTGU9Ti5lYXNpbmdJbXBsLF9lO2lmKE4uZHVyYXRpb249PT0wP19lPTE6X2U9KGstSCkvTi5kdXJhdGlvbixOLmFwcGx5aW5nJiYoX2U9Ti5wcm9ncmVzcyksX2U8MD9fZT0wOl9lPjEmJihfZT0xKSxOLmRlbGF5PT1udWxsKXt2YXIgRWU9Ti5zdGFydFBvc2l0aW9uLEJlPU4ucG9zaXRpb247aWYoQmUmJk0mJiF4LmxvY2tlZCgpKXt2YXIgUmU9e307YWsoRWUueCxCZS54KSYmKFJlLng9ZzgoRWUueCxCZS54LF9lLExlKSksYWsoRWUueSxCZS55KSYmKFJlLnk9ZzgoRWUueSxCZS55LF9lLExlKSkseC5wb3NpdGlvbihSZSl9dmFyIFZlPU4uc3RhcnRQYW4sY3Q9Ti5wYW4sc3Q9Ty5wYW4sWWU9Y3QhPW51bGwmJlM7WWUmJihhayhWZS54LGN0LngpJiYoc3QueD1nOChWZS54LGN0LngsX2UsTGUpKSxhayhWZS55LGN0LnkpJiYoc3QueT1nOChWZS55LGN0LnksX2UsTGUpKSx4LmVtaXQoInBhbiIpKTt2YXIgbXQ9Ti5zdGFydFpvb20sSmU9Ti56b29tLEx0PUplIT1udWxsJiZTO0x0JiYoYWsobXQsSmUpJiYoTy56b29tPVU5KE8ubWluWm9vbSxnOChtdCxKZSxfZSxMZSksTy5tYXhab29tKSkseC5lbWl0KCJ6b29tIikpLChZZXx8THQpJiZ4LmVtaXQoInZpZXdwb3J0Iik7dmFyIE10PU4uc3R5bGU7aWYoTXQmJk10Lmxlbmd0aD4wJiZNKXtmb3IodmFyIHV0PTA7dXQ8TXQubGVuZ3RoO3V0Kyspe3ZhciBXdD1NdFt1dF0sVHQ9V3QubmFtZSxfbj1XdCxobj1OLnN0YXJ0U3R5bGVbVHRdLFl0PVkucHJvcGVydGllc1tobi5uYW1lXSxEbj1nOChobixfbixfZSxMZSxZdCk7WS5vdmVycmlkZUJ5cGFzcyh4LFR0LERuKX14LmVtaXQoInN0eWxlIil9fXJldHVybiBOLnByb2dyZXNzPV9lLF9lfWZ1bmN0aW9uIGFrKHgsbSl7cmV0dXJuIHg9PW51bGx8fG09PW51bGw/ITE6WCh4KSYmWChtKT8hMDohISh4JiZtKX1mdW5jdGlvbiB1cmUoeCxtLGssUyl7dmFyIE09bS5fcHJpdmF0ZTtNLnN0YXJ0ZWQ9ITAsTS5zdGFydFRpbWU9ay1NLnByb2dyZXNzKk0uZHVyYXRpb259ZnVuY3Rpb24gQiQoeCxtKXt2YXIgaz1tLl9wcml2YXRlLmFuaUVsZXMsUz1bXTtmdW5jdGlvbiBNKFksWil7dmFyIGNlPVkuX3ByaXZhdGUsdmU9Y2UuYW5pbWF0aW9uLmN1cnJlbnQsbWU9Y2UuYW5pbWF0aW9uLnF1ZXVlLExlPSExO2lmKHZlLmxlbmd0aD09PTApe3ZhciBfZT1tZS5zaGlmdCgpO19lJiZ2ZS5wdXNoKF9lKX1mb3IodmFyIEVlPWZ1bmN0aW9uKHN0KXtmb3IodmFyIFllPXN0Lmxlbmd0aC0xO1llPj0wO1llLS0pe3ZhciBtdD1zdFtZZV07bXQoKX1zdC5zcGxpY2UoMCxzdC5sZW5ndGgpfSxCZT12ZS5sZW5ndGgtMTtCZT49MDtCZS0tKXt2YXIgUmU9dmVbQmVdLFZlPVJlLl9wcml2YXRlO2lmKFZlLnN0b3BwZWQpe3ZlLnNwbGljZShCZSwxKSxWZS5ob29rZWQ9ITEsVmUucGxheWluZz0hMSxWZS5zdGFydGVkPSExLEVlKFZlLmZyYW1lcyk7Y29udGludWV9IVZlLnBsYXlpbmcmJiFWZS5hcHBseWluZ3x8KFZlLnBsYXlpbmcmJlZlLmFwcGx5aW5nJiYoVmUuYXBwbHlpbmc9ITEpLFZlLnN0YXJ0ZWR8fHVyZShZLFJlLHgpLGNyZShZLFJlLHgsWiksVmUuYXBwbHlpbmcmJihWZS5hcHBseWluZz0hMSksRWUoVmUuZnJhbWVzKSxWZS5zdGVwIT1udWxsJiZWZS5zdGVwKHgpLFJlLmNvbXBsZXRlZCgpJiYodmUuc3BsaWNlKEJlLDEpLFZlLmhvb2tlZD0hMSxWZS5wbGF5aW5nPSExLFZlLnN0YXJ0ZWQ9ITEsRWUoVmUuY29tcGxldGVzKSksTGU9ITApfXJldHVybiFaJiZ2ZS5sZW5ndGg9PT0wJiZtZS5sZW5ndGg9PT0wJiZTLnB1c2goWSksTGV9Zm9yKHZhciBPPSExLE49MDtOPGsubGVuZ3RoO04rKyl7dmFyICQ9a1tOXSxIPU0oJCk7Tz1PfHxIfXZhciBxPU0obSwhMCk7KE98fHEpJiYoay5sZW5ndGg+MD9tLm5vdGlmeSgiZHJhdyIsayk6bS5ub3RpZnkoImRyYXciKSksay51bm1lcmdlKFMpLG0uZW1pdCgic3RlcCIpfXZhciBscmU9e2FuaW1hdGU6ZnUuYW5pbWF0ZSgpLGFuaW1hdGlvbjpmdS5hbmltYXRpb24oKSxhbmltYXRlZDpmdS5hbmltYXRlZCgpLGNsZWFyUXVldWU6ZnUuY2xlYXJRdWV1ZSgpLGRlbGF5OmZ1LmRlbGF5KCksZGVsYXlBbmltYXRpb246ZnUuZGVsYXlBbmltYXRpb24oKSxzdG9wOmZ1LnN0b3AoKSxhZGRUb0FuaW1hdGlvblBvb2w6ZnVuY3Rpb24obSl7dmFyIGs9dGhpcztrLnN0eWxlRW5hYmxlZCgpJiZrLl9wcml2YXRlLmFuaUVsZXMubWVyZ2UobSl9LHN0b3BBbmltYXRpb25Mb29wOmZ1bmN0aW9uKCl7dGhpcy5fcHJpdmF0ZS5hbmltYXRpb25zUnVubmluZz0hMX0sc3RhcnRBbmltYXRpb25Mb29wOmZ1bmN0aW9uKCl7dmFyIG09dGhpcztpZihtLl9wcml2YXRlLmFuaW1hdGlvbnNSdW5uaW5nPSEwLCFtLnN0eWxlRW5hYmxlZCgpKXJldHVybjtmdW5jdGlvbiBrKCl7bS5fcHJpdmF0ZS5hbmltYXRpb25zUnVubmluZyYmejAoZnVuY3Rpb24oTyl7QiQoTyxtKSxrKCl9KX12YXIgUz1tLnJlbmRlcmVyKCk7UyYmUy5iZWZvcmVSZW5kZXI/Uy5iZWZvcmVSZW5kZXIoZnVuY3Rpb24oTyxOKXtCJChOLG0pfSxTLmJlZm9yZVJlbmRlclByaW9yaXRpZXMuYW5pbWF0aW9ucyk6aygpfX0saHJlPXtxdWFsaWZpZXJDb21wYXJlOmZ1bmN0aW9uKG0sayl7cmV0dXJuIG09PW51bGx8fGs9PW51bGw/bT09bnVsbCYmaz09bnVsbDptLnNhbWVUZXh0KGspfSxldmVudE1hdGNoZXM6ZnVuY3Rpb24obSxrLFMpe3ZhciBNPWsucXVhbGlmaWVyO3JldHVybiBNIT1udWxsP20hPT1TLnRhcmdldCYmVShTLnRhcmdldCkmJk0ubWF0Y2hlcyhTLnRhcmdldCk6ITB9LGFkZEV2ZW50RmllbGRzOmZ1bmN0aW9uKG0sayl7ay5jeT1tLGsudGFyZ2V0PW19LGNhbGxiYWNrQ29udGV4dDpmdW5jdGlvbihtLGssUyl7cmV0dXJuIGsucXVhbGlmaWVyIT1udWxsP1MudGFyZ2V0Om19fSxGUz1mdW5jdGlvbihtKXtyZXR1cm4gYmUobSk/bmV3IGV5KG0pOm19LEYkPXtjcmVhdGVFbWl0dGVyOmZ1bmN0aW9uKCl7dmFyIG09dGhpcy5fcHJpdmF0ZTtyZXR1cm4gbS5lbWl0dGVyfHwobS5lbWl0dGVyPW5ldyBMUyhocmUsdGhpcykpLHRoaXN9LGVtaXR0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbWl0dGVyfSxvbjpmdW5jdGlvbihtLGssUyl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLm9uKG0sRlMoayksUyksdGhpc30scmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24obSxrLFMpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVMaXN0ZW5lcihtLEZTKGspLFMpLHRoaXN9LHJlbW92ZUFsbExpc3RlbmVyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVBbGxMaXN0ZW5lcnMoKSx0aGlzfSxvbmU6ZnVuY3Rpb24obSxrLFMpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbmUobSxGUyhrKSxTKSx0aGlzfSxvbmNlOmZ1bmN0aW9uKG0sayxTKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkub25lKG0sRlMoayksUyksdGhpc30sZW1pdDpmdW5jdGlvbihtLGspe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5lbWl0KG0sayksdGhpc30sZW1pdEFuZE5vdGlmeTpmdW5jdGlvbihtLGspe3JldHVybiB0aGlzLmVtaXQobSksdGhpcy5ub3RpZnkobSxrKSx0aGlzfX07ZnUuZXZlbnRBbGlhc2VzT24oRiQpO3ZhciBNST17cG5nOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuX3ByaXZhdGUucmVuZGVyZXI7cmV0dXJuIG09bXx8e30say5wbmcobSl9LGpwZzpmdW5jdGlvbihtKXt2YXIgaz10aGlzLl9wcml2YXRlLnJlbmRlcmVyO3JldHVybiBtPW18fHt9LG0uYmc9bS5iZ3x8IiNmZmYiLGsuanBnKG0pfX07TUkuanBlZz1NSS5qcGc7dmFyIFJTPXtsYXlvdXQ6ZnVuY3Rpb24obSl7dmFyIGs9dGhpcztpZihtPT1udWxsKXtjaCgiTGF5b3V0IG9wdGlvbnMgbXVzdCBiZSBzcGVjaWZpZWQgdG8gbWFrZSBhIGxheW91dCIpO3JldHVybn1pZihtLm5hbWU9PW51bGwpe2NoKCJBIGBuYW1lYCBtdXN0IGJlIHNwZWNpZmllZCB0byBtYWtlIGEgbGF5b3V0Iik7cmV0dXJufXZhciBTPW0ubmFtZSxNPWsuZXh0ZW5zaW9uKCJsYXlvdXQiLFMpO2lmKE09PW51bGwpe2NoKCJObyBzdWNoIGxheW91dCBgIitTKyJgIGZvdW5kLiAgRGlkIHlvdSBmb3JnZXQgdG8gaW1wb3J0IGl0IGFuZCBgY3l0b3NjYXBlLnVzZSgpYCBpdD8iKTtyZXR1cm59dmFyIE87YmUobS5lbGVzKT9PPWsuJChtLmVsZXMpOk89bS5lbGVzIT1udWxsP20uZWxlczprLiQoKTt2YXIgTj1uZXcgTSh5dCh7fSxtLHtjeTprLGVsZXM6T30pKTtyZXR1cm4gTn19O1JTLmNyZWF0ZUxheW91dD1SUy5tYWtlTGF5b3V0PVJTLmxheW91dDt2YXIgZnJlPXtub3RpZnk6ZnVuY3Rpb24obSxrKXt2YXIgUz10aGlzLl9wcml2YXRlO2lmKHRoaXMuYmF0Y2hpbmcoKSl7Uy5iYXRjaE5vdGlmaWNhdGlvbnM9Uy5iYXRjaE5vdGlmaWNhdGlvbnN8fHt9O3ZhciBNPVMuYmF0Y2hOb3RpZmljYXRpb25zW21dPVMuYmF0Y2hOb3RpZmljYXRpb25zW21dfHx0aGlzLmNvbGxlY3Rpb24oKTtrIT1udWxsJiZNLm1lcmdlKGspO3JldHVybn1pZihTLm5vdGlmaWNhdGlvbnNFbmFibGVkKXt2YXIgTz10aGlzLnJlbmRlcmVyKCk7dGhpcy5kZXN0cm95ZWQoKXx8IU98fE8ubm90aWZ5KG0sayl9fSxub3RpZmljYXRpb25zOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuX3ByaXZhdGU7cmV0dXJuIG09PT12b2lkIDA/ay5ub3RpZmljYXRpb25zRW5hYmxlZDooay5ub3RpZmljYXRpb25zRW5hYmxlZD0hIW0sdGhpcyl9LG5vTm90aWZpY2F0aW9uczpmdW5jdGlvbihtKXt0aGlzLm5vdGlmaWNhdGlvbnMoITEpLG0oKSx0aGlzLm5vdGlmaWNhdGlvbnMoITApfSxiYXRjaGluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmJhdGNoQ291bnQ+MH0sc3RhcnRCYXRjaDpmdW5jdGlvbigpe3ZhciBtPXRoaXMuX3ByaXZhdGU7cmV0dXJuIG0uYmF0Y2hDb3VudD09bnVsbCYmKG0uYmF0Y2hDb3VudD0wKSxtLmJhdGNoQ291bnQ9PT0wJiYobS5iYXRjaFN0eWxlRWxlcz10aGlzLmNvbGxlY3Rpb24oKSxtLmJhdGNoTm90aWZpY2F0aW9ucz17fSksbS5iYXRjaENvdW50KyssdGhpc30sZW5kQmF0Y2g6ZnVuY3Rpb24oKXt2YXIgbT10aGlzLl9wcml2YXRlO2lmKG0uYmF0Y2hDb3VudD09PTApcmV0dXJuIHRoaXM7aWYobS5iYXRjaENvdW50LS0sbS5iYXRjaENvdW50PT09MCl7bS5iYXRjaFN0eWxlRWxlcy51cGRhdGVTdHlsZSgpO3ZhciBrPXRoaXMucmVuZGVyZXIoKTtPYmplY3Qua2V5cyhtLmJhdGNoTm90aWZpY2F0aW9ucykuZm9yRWFjaChmdW5jdGlvbihTKXt2YXIgTT1tLmJhdGNoTm90aWZpY2F0aW9uc1tTXTtNLmVtcHR5KCk/ay5ub3RpZnkoUyk6ay5ub3RpZnkoUyxNKX0pfXJldHVybiB0aGlzfSxiYXRjaDpmdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5zdGFydEJhdGNoKCksbSgpLHRoaXMuZW5kQmF0Y2goKSx0aGlzfSxiYXRjaERhdGE6ZnVuY3Rpb24obSl7dmFyIGs9dGhpcztyZXR1cm4gdGhpcy5iYXRjaChmdW5jdGlvbigpe2Zvcih2YXIgUz1PYmplY3Qua2V5cyhtKSxNPTA7TTxTLmxlbmd0aDtNKyspe3ZhciBPPVNbTV0sTj1tW09dLCQ9ay5nZXRFbGVtZW50QnlJZChPKTskLmRhdGEoTil9fSl9fSxkcmU9cTAoe2hpZGVFZGdlc09uVmlld3BvcnQ6ITEsdGV4dHVyZU9uVmlld3BvcnQ6ITEsbW90aW9uQmx1cjohMSxtb3Rpb25CbHVyT3BhY2l0eTouMDUscGl4ZWxSYXRpbzp2b2lkIDAsZGVza3RvcFRhcFRocmVzaG9sZDo0LHRvdWNoVGFwVGhyZXNob2xkOjgsd2hlZWxTZW5zaXRpdml0eToxLGRlYnVnOiExLHNob3dGcHM6ITF9KSxEST17cmVuZGVyVG86ZnVuY3Rpb24obSxrLFMsTSl7dmFyIE89dGhpcy5fcHJpdmF0ZS5yZW5kZXJlcjtyZXR1cm4gTy5yZW5kZXJUbyhtLGssUyxNKSx0aGlzfSxyZW5kZXJlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLnJlbmRlcmVyfSxmb3JjZVJlbmRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vdGlmeSgiZHJhdyIpLHRoaXN9LHJlc2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmludmFsaWRhdGVTaXplKCksdGhpcy5lbWl0QW5kTm90aWZ5KCJyZXNpemUiKSx0aGlzfSxpbml0UmVuZGVyZXI6ZnVuY3Rpb24obSl7dmFyIGs9dGhpcyxTPWsuZXh0ZW5zaW9uKCJyZW5kZXJlciIsbS5uYW1lKTtpZihTPT1udWxsKXtjaCgiQ2FuIG5vdCBpbml0aWFsaXNlOiBObyBzdWNoIHJlbmRlcmVyIGAiLmNvbmNhdChtLm5hbWUsImAgZm91bmQuIERpZCB5b3UgZm9yZ2V0IHRvIGltcG9ydCBpdCBhbmQgYGN5dG9zY2FwZS51c2UoKWAgaXQ/IikpO3JldHVybn1tLndoZWVsU2Vuc2l0aXZpdHkhPT12b2lkIDAmJmh1KCJZb3UgaGF2ZSBzZXQgYSBjdXN0b20gd2hlZWwgc2Vuc2l0aXZpdHkuICBUaGlzIHdpbGwgbWFrZSB5b3VyIGFwcCB6b29tIHVubmF0dXJhbGx5IHdoZW4gdXNpbmcgbWFpbnN0cmVhbSBtaWNlLiAgWW91IHNob3VsZCBjaGFuZ2UgdGhpcyB2YWx1ZSBmcm9tIHRoZSBkZWZhdWx0IG9ubHkgaWYgeW91IGNhbiBndWFyYW50ZWUgdGhhdCBhbGwgeW91ciB1c2VycyB3aWxsIHVzZSB0aGUgc2FtZSBoYXJkd2FyZSBhbmQgT1MgY29uZmlndXJhdGlvbiBhcyB5b3VyIGN1cnJlbnQgbWFjaGluZS4iKTt2YXIgTT1kcmUobSk7TS5jeT1rLGsuX3ByaXZhdGUucmVuZGVyZXI9bmV3IFMoTSksdGhpcy5ub3RpZnkoImluaXQiKX0sZGVzdHJveVJlbmRlcmVyOmZ1bmN0aW9uKCl7dmFyIG09dGhpczttLm5vdGlmeSgiZGVzdHJveSIpO3ZhciBrPW0uY29udGFpbmVyKCk7aWYoaylmb3Ioay5fY3lyZWc9bnVsbDtrLmNoaWxkTm9kZXMubGVuZ3RoPjA7KWsucmVtb3ZlQ2hpbGQoay5jaGlsZE5vZGVzWzBdKTttLl9wcml2YXRlLnJlbmRlcmVyPW51bGwsbS5tdXRhYmxlRWxlbWVudHMoKS5mb3JFYWNoKGZ1bmN0aW9uKFMpe3ZhciBNPVMuX3ByaXZhdGU7TS5yc2NyYXRjaD17fSxNLnJzdHlsZT17fSxNLmFuaW1hdGlvbi5jdXJyZW50PVtdLE0uYW5pbWF0aW9uLnF1ZXVlPVtdfSl9LG9uUmVuZGVyOmZ1bmN0aW9uKG0pe3JldHVybiB0aGlzLm9uKCJyZW5kZXIiLG0pfSxvZmZSZW5kZXI6ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMub2ZmKCJyZW5kZXIiLG0pfX07REkuaW52YWxpZGF0ZURpbWVuc2lvbnM9REkucmVzaXplO3ZhciBqUz17Y29sbGVjdGlvbjpmdW5jdGlvbihtLGspe3JldHVybiBiZShtKT90aGlzLiQobSk6eGUobSk/bS5jb2xsZWN0aW9uKCk6bmUobSk/KGt8fChrPXt9KSxuZXcgVjAodGhpcyxtLGsudW5pcXVlLGsucmVtb3ZlZCkpOm5ldyBWMCh0aGlzKX0sbm9kZXM6ZnVuY3Rpb24obSl7dmFyIGs9dGhpcy4kKGZ1bmN0aW9uKFMpe3JldHVybiBTLmlzTm9kZSgpfSk7cmV0dXJuIG0/ay5maWx0ZXIobSk6a30sZWRnZXM6ZnVuY3Rpb24obSl7dmFyIGs9dGhpcy4kKGZ1bmN0aW9uKFMpe3JldHVybiBTLmlzRWRnZSgpfSk7cmV0dXJuIG0/ay5maWx0ZXIobSk6a30sJDpmdW5jdGlvbihtKXt2YXIgaz10aGlzLl9wcml2YXRlLmVsZW1lbnRzO3JldHVybiBtP2suZmlsdGVyKG0pOmsuc3Bhd25TZWxmKCl9LG11dGFibGVFbGVtZW50czpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzfX07alMuZWxlbWVudHM9alMuZmlsdGVyPWpTLiQ7dmFyIEUxPXt9LG9rPSJ0IixncmU9ImYiO0UxLmFwcGx5PWZ1bmN0aW9uKHgpe2Zvcih2YXIgbT10aGlzLGs9bS5fcHJpdmF0ZSxTPWsuY3ksTT1TLmNvbGxlY3Rpb24oKSxPPTA7Tzx4Lmxlbmd0aDtPKyspe3ZhciBOPXhbT10sJD1tLmdldENvbnRleHRNZXRhKE4pO2lmKCEkLmVtcHR5KXt2YXIgSD1tLmdldENvbnRleHRTdHlsZSgkKSxxPW0uYXBwbHlDb250ZXh0U3R5bGUoJCxILE4pO04uX3ByaXZhdGUuYXBwbGllZEluaXRTdHlsZT9tLnVwZGF0ZVRyYW5zaXRpb25zKE4scS5kaWZmUHJvcHMpOk4uX3ByaXZhdGUuYXBwbGllZEluaXRTdHlsZT0hMDt2YXIgWT1tLnVwZGF0ZVN0eWxlSGludHMoTik7WSYmTS5wdXNoKE4pfX1yZXR1cm4gTX0sRTEuZ2V0UHJvcGVydGllc0RpZmY9ZnVuY3Rpb24oeCxtKXt2YXIgaz10aGlzLFM9ay5fcHJpdmF0ZS5wcm9wRGlmZnM9ay5fcHJpdmF0ZS5wcm9wRGlmZnN8fHt9LE09eCsiLSIrbSxPPVNbTV07aWYoTylyZXR1cm4gTztmb3IodmFyIE49W10sJD17fSxIPTA7SDxrLmxlbmd0aDtIKyspe3ZhciBxPWtbSF0sWT14W0hdPT09b2ssWj1tW0hdPT09b2ssY2U9WSE9PVosdmU9cS5tYXBwZWRQcm9wZXJ0aWVzLmxlbmd0aD4wO2lmKGNlfHxaJiZ2ZSl7dmFyIG1lPXZvaWQgMDtjZSYmdmV8fGNlP21lPXEucHJvcGVydGllczp2ZSYmKG1lPXEubWFwcGVkUHJvcGVydGllcyk7Zm9yKHZhciBMZT0wO0xlPG1lLmxlbmd0aDtMZSsrKXtmb3IodmFyIF9lPW1lW0xlXSxFZT1fZS5uYW1lLEJlPSExLFJlPUgrMTtSZTxrLmxlbmd0aDtSZSsrKXt2YXIgVmU9a1tSZV0sY3Q9bVtSZV09PT1vaztpZihjdCYmKEJlPVZlLnByb3BlcnRpZXNbX2UubmFtZV0hPW51bGwsQmUpKWJyZWFrfSEkW0VlXSYmIUJlJiYoJFtFZV09ITAsTi5wdXNoKEVlKSl9fX1yZXR1cm4gU1tNXT1OLE59LEUxLmdldENvbnRleHRNZXRhPWZ1bmN0aW9uKHgpe2Zvcih2YXIgbT10aGlzLGs9IiIsUyxNPXguX3ByaXZhdGUuc3R5bGVDeHRLZXl8fCIiLE89MDtPPG0ubGVuZ3RoO08rKyl7dmFyIE49bVtPXSwkPU4uc2VsZWN0b3ImJk4uc2VsZWN0b3IubWF0Y2hlcyh4KTskP2srPW9rOmsrPWdyZX1yZXR1cm4gUz1tLmdldFByb3BlcnRpZXNEaWZmKE0saykseC5fcHJpdmF0ZS5zdHlsZUN4dEtleT1rLHtrZXk6ayxkaWZmUHJvcE5hbWVzOlMsZW1wdHk6Uy5sZW5ndGg9PT0wfX0sRTEuZ2V0Q29udGV4dFN0eWxlPWZ1bmN0aW9uKHgpe3ZhciBtPXgua2V5LGs9dGhpcyxTPXRoaXMuX3ByaXZhdGUuY29udGV4dFN0eWxlcz10aGlzLl9wcml2YXRlLmNvbnRleHRTdHlsZXN8fHt9O2lmKFNbbV0pcmV0dXJuIFNbbV07Zm9yKHZhciBNPXtfcHJpdmF0ZTp7a2V5Om19fSxPPTA7TzxrLmxlbmd0aDtPKyspe3ZhciBOPWtbT10sJD1tW09dPT09b2s7aWYoJClmb3IodmFyIEg9MDtIPE4ucHJvcGVydGllcy5sZW5ndGg7SCsrKXt2YXIgcT1OLnByb3BlcnRpZXNbSF07TVtxLm5hbWVdPXF9fXJldHVybiBTW21dPU0sTX0sRTEuYXBwbHlDb250ZXh0U3R5bGU9ZnVuY3Rpb24oeCxtLGspe2Zvcih2YXIgUz10aGlzLE09eC5kaWZmUHJvcE5hbWVzLE89e30sTj1TLnR5cGVzLCQ9MDskPE0ubGVuZ3RoOyQrKyl7dmFyIEg9TVskXSxxPW1bSF0sWT1rLnBzdHlsZShIKTtpZighcSlpZihZKVkuYnlwYXNzP3E9e25hbWU6SCxkZWxldGVCeXBhc3NlZDohMH06cT17bmFtZTpILGRlbGV0ZTohMH07ZWxzZSBjb250aW51ZTtpZihZIT09cSl7aWYocS5tYXBwZWQ9PT1OLmZuJiZZIT1udWxsJiZZLm1hcHBpbmchPW51bGwmJlkubWFwcGluZy52YWx1ZT09PXEudmFsdWUpe3ZhciBaPVkubWFwcGluZyxjZT1aLmZuVmFsdWU9cS52YWx1ZShrKTtpZihjZT09PVoucHJldkZuVmFsdWUpY29udGludWV9dmFyIHZlPU9bSF09e3ByZXY6WX07Uy5hcHBseVBhcnNlZFByb3BlcnR5KGsscSksdmUubmV4dD1rLnBzdHlsZShIKSx2ZS5uZXh0JiZ2ZS5uZXh0LmJ5cGFzcyYmKHZlLm5leHQ9dmUubmV4dC5ieXBhc3NlZCl9fXJldHVybntkaWZmUHJvcHM6T319LEUxLnVwZGF0ZVN0eWxlSGludHM9ZnVuY3Rpb24oeCl7dmFyIG09eC5fcHJpdmF0ZSxrPXRoaXMsUz1rLnByb3BlcnR5R3JvdXBOYW1lcyxNPWsucHJvcGVydHlHcm91cEtleXMsTz1mdW5jdGlvbihTaSx5cyxwYSl7cmV0dXJuIGsuZ2V0UHJvcGVydGllc0hhc2goU2kseXMscGEpfSxOPW0uc3R5bGVLZXk7aWYoeC5yZW1vdmVkKCkpcmV0dXJuITE7dmFyICQ9bS5ncm91cD09PSJub2RlcyIsSD14Ll9wcml2YXRlLnN0eWxlO1M9T2JqZWN0LmtleXMoSCk7Zm9yKHZhciBxPTA7cTxNLmxlbmd0aDtxKyspe3ZhciBZPU1bcV07bS5zdHlsZUtleXNbWV09W1kzLGM1XX1mb3IodmFyIFo9ZnVuY3Rpb24oU2kseXMpe3JldHVybiBtLnN0eWxlS2V5c1t5c11bMF09emcoU2ksbS5zdHlsZUtleXNbeXNdWzBdKX0sY2U9ZnVuY3Rpb24oU2kseXMpe3JldHVybiBtLnN0eWxlS2V5c1t5c11bMV09Ym0oU2ksbS5zdHlsZUtleXNbeXNdWzFdKX0sdmU9ZnVuY3Rpb24oU2kseXMpe1ooU2kseXMpLGNlKFNpLHlzKX0sbWU9ZnVuY3Rpb24oU2kseXMpe2Zvcih2YXIgcGE9MDtwYTxTaS5sZW5ndGg7cGErKyl7dmFyIE1pPVNpLmNoYXJDb2RlQXQocGEpO1ooTWkseXMpLGNlKE1pLHlzKX19LExlPTJlOSxfZT1mdW5jdGlvbihTaSl7cmV0dXJuLTEyODxTaSYmU2k8MTI4JiZNYXRoLmZsb29yKFNpKSE9PVNpP0xlLShTaSoxMDI0fDApOlNpfSxFZT0wO0VlPFMubGVuZ3RoO0VlKyspe3ZhciBCZT1TW0VlXSxSZT1IW0JlXTtpZihSZSE9bnVsbCl7dmFyIFZlPXRoaXMucHJvcGVydGllc1tCZV0sY3Q9VmUudHlwZSxzdD1WZS5ncm91cEtleSxZZT12b2lkIDA7VmUuaGFzaE92ZXJyaWRlIT1udWxsP1llPVZlLmhhc2hPdmVycmlkZSh4LFJlKTpSZS5wZlZhbHVlIT1udWxsJiYoWWU9UmUucGZWYWx1ZSk7dmFyIG10PVZlLmVudW1zPT1udWxsP1JlLnZhbHVlOm51bGwsSmU9WWUhPW51bGwsTHQ9bXQhPW51bGwsTXQ9SmV8fEx0LHV0PVJlLnVuaXRzO2lmKGN0Lm51bWJlciYmTXQmJiFjdC5tdWx0aXBsZSl7dmFyIFd0PUplP1llOm10O3ZlKF9lKFd0KSxzdCksIUplJiZ1dCE9bnVsbCYmbWUodXQsc3QpfWVsc2UgbWUoUmUuc3RyVmFsdWUsc3QpfX1mb3IodmFyIFR0PVtZMyxjNV0sX249MDtfbjxNLmxlbmd0aDtfbisrKXt2YXIgaG49TVtfbl0sWXQ9bS5zdHlsZUtleXNbaG5dO1R0WzBdPXpnKFl0WzBdLFR0WzBdKSxUdFsxXT1ibShZdFsxXSxUdFsxXSl9bS5zdHlsZUtleT16OShUdFswXSxUdFsxXSk7dmFyIERuPW0uc3R5bGVLZXlzO20ubGFiZWxEaW1zS2V5PW1tKERuLmxhYmVsRGltZW5zaW9ucyk7dmFyIGlyPU8oeCxbImxhYmVsIl0sRG4ubGFiZWxEaW1lbnNpb25zKTtpZihtLmxhYmVsS2V5PW1tKGlyKSxtLmxhYmVsU3R5bGVLZXk9bW0odTUoRG4uY29tbW9uTGFiZWwsaXIpKSwhJCl7dmFyIHZyPU8oeCxbInNvdXJjZS1sYWJlbCJdLERuLmxhYmVsRGltZW5zaW9ucyk7bS5zb3VyY2VMYWJlbEtleT1tbSh2ciksbS5zb3VyY2VMYWJlbFN0eWxlS2V5PW1tKHU1KERuLmNvbW1vbkxhYmVsLHZyKSk7dmFyIE5uPU8oeCxbInRhcmdldC1sYWJlbCJdLERuLmxhYmVsRGltZW5zaW9ucyk7bS50YXJnZXRMYWJlbEtleT1tbShObiksbS50YXJnZXRMYWJlbFN0eWxlS2V5PW1tKHU1KERuLmNvbW1vbkxhYmVsLE5uKSl9aWYoJCl7dmFyIHByPW0uc3R5bGVLZXlzLEVyPXByLm5vZGVCb2R5LE1yPXByLm5vZGVCb3JkZXIsQ3I9cHIubm9kZU91dGxpbmUsT3I9cHIuYmFja2dyb3VuZEltYWdlLFduPXByLmNvbXBvdW5kLGJyPXByLnBpZSxTcj1bRXIsTXIsQ3IsT3IsV24sYnJdLmZpbHRlcihmdW5jdGlvbihOcil7cmV0dXJuIE5yIT1udWxsfSkucmVkdWNlKHU1LFtZMyxjNV0pO20ubm9kZUtleT1tbShTciksbS5oYXNQaWU9YnIhPW51bGwmJmJyWzBdIT09WTMmJmJyWzFdIT09YzV9cmV0dXJuIE4hPT1tLnN0eWxlS2V5fSxFMS5jbGVhclN0eWxlSGludHM9ZnVuY3Rpb24oeCl7dmFyIG09eC5fcHJpdmF0ZTttLnN0eWxlQ3h0S2V5PSIiLG0uc3R5bGVLZXlzPXt9LG0uc3R5bGVLZXk9bnVsbCxtLmxhYmVsS2V5PW51bGwsbS5sYWJlbFN0eWxlS2V5PW51bGwsbS5zb3VyY2VMYWJlbEtleT1udWxsLG0uc291cmNlTGFiZWxTdHlsZUtleT1udWxsLG0udGFyZ2V0TGFiZWxLZXk9bnVsbCxtLnRhcmdldExhYmVsU3R5bGVLZXk9bnVsbCxtLm5vZGVLZXk9bnVsbCxtLmhhc1BpZT1udWxsfSxFMS5hcHBseVBhcnNlZFByb3BlcnR5PWZ1bmN0aW9uKHgsbSl7dmFyIGs9dGhpcyxTPW0sTT14Ll9wcml2YXRlLnN0eWxlLE8sTj1rLnR5cGVzLCQ9ay5wcm9wZXJ0aWVzW1MubmFtZV0udHlwZSxIPVMuYnlwYXNzLHE9TVtTLm5hbWVdLFk9cSYmcS5ieXBhc3MsWj14Ll9wcml2YXRlLGNlPSJtYXBwaW5nIix2ZT1mdW5jdGlvbihFcil7cmV0dXJuIEVyPT1udWxsP251bGw6RXIucGZWYWx1ZSE9bnVsbD9Fci5wZlZhbHVlOkVyLnZhbHVlfSxtZT1mdW5jdGlvbigpe3ZhciBFcj12ZShxKSxNcj12ZShTKTtrLmNoZWNrVHJpZ2dlcnMoeCxTLm5hbWUsRXIsTXIpfTtpZihtLm5hbWU9PT0iY3VydmUtc3R5bGUiJiZ4LmlzRWRnZSgpJiYobS52YWx1ZSE9PSJiZXppZXIiJiZ4LmlzTG9vcCgpfHxtLnZhbHVlPT09ImhheXN0YWNrIiYmKHguc291cmNlKCkuaXNQYXJlbnQoKXx8eC50YXJnZXQoKS5pc1BhcmVudCgpKSkmJihTPW09dGhpcy5wYXJzZShtLm5hbWUsImJlemllciIsSCkpLFMuZGVsZXRlKXJldHVybiBNW1MubmFtZV09dm9pZCAwLG1lKCksITA7aWYoUy5kZWxldGVCeXBhc3NlZClyZXR1cm4gcT9xLmJ5cGFzcz8ocS5ieXBhc3NlZD12b2lkIDAsbWUoKSwhMCk6ITE6KG1lKCksITApO2lmKFMuZGVsZXRlQnlwYXNzKXJldHVybiBxP3EuYnlwYXNzPyhNW1MubmFtZV09cS5ieXBhc3NlZCxtZSgpLCEwKTohMToobWUoKSwhMCk7dmFyIExlPWZ1bmN0aW9uKCl7aHUoIkRvIG5vdCBhc3NpZ24gbWFwcGluZ3MgdG8gZWxlbWVudHMgd2l0aG91dCBjb3JyZXNwb25kaW5nIGRhdGEgKGkuZS4gZWxlIGAiK3guaWQoKSsiYCBoYXMgbm8gbWFwcGluZyBmb3IgcHJvcGVydHkgYCIrUy5uYW1lKyJgIHdpdGggZGF0YSBmaWVsZCBgIitTLmZpZWxkKyJgKTsgdHJ5IGEgYFsiK1MuZmllbGQrIl1gIHNlbGVjdG9yIHRvIGxpbWl0IHNjb3BlIHRvIGVsZW1lbnRzIHdpdGggYCIrUy5maWVsZCsiYCBkZWZpbmVkIil9O3N3aXRjaChTLm1hcHBlZCl7Y2FzZSBOLm1hcERhdGE6e2Zvcih2YXIgX2U9Uy5maWVsZC5zcGxpdCgiLiIpLEVlPVouZGF0YSxCZT0wO0JlPF9lLmxlbmd0aCYmRWU7QmUrKyl7dmFyIFJlPV9lW0JlXTtFZT1FZVtSZV19aWYoRWU9PW51bGwpcmV0dXJuIExlKCksITE7dmFyIFZlO2lmKFgoRWUpKXt2YXIgY3Q9Uy5maWVsZE1heC1TLmZpZWxkTWluO2N0PT09MD9WZT0wOlZlPShFZS1TLmZpZWxkTWluKS9jdH1lbHNlIHJldHVybiBodSgiRG8gbm90IHVzZSBjb250aW51b3VzIG1hcHBlcnMgd2l0aG91dCBzcGVjaWZ5aW5nIG51bWVyaWMgZGF0YSAoaS5lLiBgIitTLmZpZWxkKyI6ICIrRWUrImAgZm9yIGAiK3guaWQoKSsiYCBpcyBub24tbnVtZXJpYykiKSwhMTtpZihWZTwwP1ZlPTA6VmU+MSYmKFZlPTEpLCQuY29sb3Ipe3ZhciBzdD1TLnZhbHVlTWluWzBdLFllPVMudmFsdWVNYXhbMF0sbXQ9Uy52YWx1ZU1pblsxXSxKZT1TLnZhbHVlTWF4WzFdLEx0PVMudmFsdWVNaW5bMl0sTXQ9Uy52YWx1ZU1heFsyXSx1dD1TLnZhbHVlTWluWzNdPT1udWxsPzE6Uy52YWx1ZU1pblszXSxXdD1TLnZhbHVlTWF4WzNdPT1udWxsPzE6Uy52YWx1ZU1heFszXSxUdD1bTWF0aC5yb3VuZChzdCsoWWUtc3QpKlZlKSxNYXRoLnJvdW5kKG10KyhKZS1tdCkqVmUpLE1hdGgucm91bmQoTHQrKE10LUx0KSpWZSksTWF0aC5yb3VuZCh1dCsoV3QtdXQpKlZlKV07Tz17YnlwYXNzOlMuYnlwYXNzLG5hbWU6Uy5uYW1lLHZhbHVlOlR0LHN0clZhbHVlOiJyZ2IoIitUdFswXSsiLCAiK1R0WzFdKyIsICIrVHRbMl0rIikifX1lbHNlIGlmKCQubnVtYmVyKXt2YXIgX249Uy52YWx1ZU1pbisoUy52YWx1ZU1heC1TLnZhbHVlTWluKSpWZTtPPXRoaXMucGFyc2UoUy5uYW1lLF9uLFMuYnlwYXNzLGNlKX1lbHNlIHJldHVybiExO2lmKCFPKXJldHVybiBMZSgpLCExO08ubWFwcGluZz1TLFM9TzticmVha31jYXNlIE4uZGF0YTp7Zm9yKHZhciBobj1TLmZpZWxkLnNwbGl0KCIuIiksWXQ9Wi5kYXRhLERuPTA7RG48aG4ubGVuZ3RoJiZZdDtEbisrKXt2YXIgaXI9aG5bRG5dO1l0PVl0W2lyXX1pZihZdCE9bnVsbCYmKE89dGhpcy5wYXJzZShTLm5hbWUsWXQsUy5ieXBhc3MsY2UpKSwhTylyZXR1cm4gTGUoKSwhMTtPLm1hcHBpbmc9UyxTPU87YnJlYWt9Y2FzZSBOLmZuOnt2YXIgdnI9Uy52YWx1ZSxObj1TLmZuVmFsdWUhPW51bGw/Uy5mblZhbHVlOnZyKHgpO2lmKFMucHJldkZuVmFsdWU9Tm4sTm49PW51bGwpcmV0dXJuIGh1KCJDdXN0b20gZnVuY3Rpb24gbWFwcGVycyBtYXkgbm90IHJldHVybiBudWxsIChpLmUuIGAiK1MubmFtZSsiYCBmb3IgZWxlIGAiK3guaWQoKSsiYCBpcyBudWxsKSIpLCExO2lmKE89dGhpcy5wYXJzZShTLm5hbWUsTm4sUy5ieXBhc3MsY2UpLCFPKXJldHVybiBodSgiQ3VzdG9tIGZ1bmN0aW9uIG1hcHBlcnMgbWF5IG5vdCByZXR1cm4gaW52YWxpZCB2YWx1ZXMgZm9yIHRoZSBwcm9wZXJ0eSB0eXBlIChpLmUuIGAiK1MubmFtZSsiYCBmb3IgZWxlIGAiK3guaWQoKSsiYCBpcyBpbnZhbGlkKSIpLCExO08ubWFwcGluZz12bShTKSxTPU87YnJlYWt9Y2FzZSB2b2lkIDA6YnJlYWs7ZGVmYXVsdDpyZXR1cm4hMX1yZXR1cm4gSD8oWT9TLmJ5cGFzc2VkPXEuYnlwYXNzZWQ6Uy5ieXBhc3NlZD1xLE1bUy5uYW1lXT1TKTpZP3EuYnlwYXNzZWQ9UzpNW1MubmFtZV09UyxtZSgpLCEwfSxFMS5jbGVhbkVsZW1lbnRzPWZ1bmN0aW9uKHgsbSl7Zm9yKHZhciBrPTA7azx4Lmxlbmd0aDtrKyspe3ZhciBTPXhba107aWYodGhpcy5jbGVhclN0eWxlSGludHMoUyksUy5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKSxTLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLCFtKVMuX3ByaXZhdGUuc3R5bGU9e307ZWxzZSBmb3IodmFyIE09Uy5fcHJpdmF0ZS5zdHlsZSxPPU9iamVjdC5rZXlzKE0pLE49MDtOPE8ubGVuZ3RoO04rKyl7dmFyICQ9T1tOXSxIPU1bJF07SCE9bnVsbCYmKEguYnlwYXNzP0guYnlwYXNzZWQ9bnVsbDpNWyRdPW51bGwpfX19LEUxLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciB4PXRoaXMuX3ByaXZhdGUuY3ksbT14Lm11dGFibGVFbGVtZW50cygpO20udXBkYXRlU3R5bGUoKX0sRTEudXBkYXRlVHJhbnNpdGlvbnM9ZnVuY3Rpb24oeCxtKXt2YXIgaz10aGlzLFM9eC5fcHJpdmF0ZSxNPXgucHN0eWxlKCJ0cmFuc2l0aW9uLXByb3BlcnR5IikudmFsdWUsTz14LnBzdHlsZSgidHJhbnNpdGlvbi1kdXJhdGlvbiIpLnBmVmFsdWUsTj14LnBzdHlsZSgidHJhbnNpdGlvbi1kZWxheSIpLnBmVmFsdWU7aWYoTS5sZW5ndGg+MCYmTz4wKXtmb3IodmFyICQ9e30sSD0hMSxxPTA7cTxNLmxlbmd0aDtxKyspe3ZhciBZPU1bcV0sWj14LnBzdHlsZShZKSxjZT1tW1ldO2lmKGNlKXt2YXIgdmU9Y2UucHJldixtZT12ZSxMZT1jZS5uZXh0IT1udWxsP2NlLm5leHQ6WixfZT0hMSxFZT12b2lkIDAsQmU9MWUtNjttZSYmKFgobWUucGZWYWx1ZSkmJlgoTGUucGZWYWx1ZSk/KF9lPUxlLnBmVmFsdWUtbWUucGZWYWx1ZSxFZT1tZS5wZlZhbHVlK0JlKl9lKTpYKG1lLnZhbHVlKSYmWChMZS52YWx1ZSk/KF9lPUxlLnZhbHVlLW1lLnZhbHVlLEVlPW1lLnZhbHVlK0JlKl9lKTpuZShtZS52YWx1ZSkmJm5lKExlLnZhbHVlKSYmKF9lPW1lLnZhbHVlWzBdIT09TGUudmFsdWVbMF18fG1lLnZhbHVlWzFdIT09TGUudmFsdWVbMV18fG1lLnZhbHVlWzJdIT09TGUudmFsdWVbMl0sRWU9bWUuc3RyVmFsdWUpLF9lJiYoJFtZXT1MZS5zdHJWYWx1ZSx0aGlzLmFwcGx5QnlwYXNzKHgsWSxFZSksSD0hMCkpfX1pZighSClyZXR1cm47Uy50cmFuc2l0aW9uaW5nPSEwLG5ldyBpOChmdW5jdGlvbihSZSl7Tj4wP3guZGVsYXlBbmltYXRpb24oTikucGxheSgpLnByb21pc2UoKS50aGVuKFJlKTpSZSgpfSkudGhlbihmdW5jdGlvbigpe3JldHVybiB4LmFuaW1hdGlvbih7c3R5bGU6JCxkdXJhdGlvbjpPLGVhc2luZzp4LnBzdHlsZSgidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iKS52YWx1ZSxxdWV1ZTohMX0pLnBsYXkoKS5wcm9taXNlKCl9KS50aGVuKGZ1bmN0aW9uKCl7ay5yZW1vdmVCeXBhc3Nlcyh4LE0pLHguZW1pdEFuZE5vdGlmeSgic3R5bGUiKSxTLnRyYW5zaXRpb25pbmc9ITF9KX1lbHNlIFMudHJhbnNpdGlvbmluZyYmKHRoaXMucmVtb3ZlQnlwYXNzZXMoeCxNKSx4LmVtaXRBbmROb3RpZnkoInN0eWxlIiksUy50cmFuc2l0aW9uaW5nPSExKX0sRTEuY2hlY2tUcmlnZ2VyPWZ1bmN0aW9uKHgsbSxrLFMsTSxPKXt2YXIgTj10aGlzLnByb3BlcnRpZXNbbV0sJD1NKE4pOyQhPW51bGwmJiQoayxTKSYmTyhOKX0sRTEuY2hlY2taT3JkZXJUcmlnZ2VyPWZ1bmN0aW9uKHgsbSxrLFMpe3ZhciBNPXRoaXM7dGhpcy5jaGVja1RyaWdnZXIoeCxtLGssUyxmdW5jdGlvbihPKXtyZXR1cm4gTy50cmlnZ2Vyc1pPcmRlcn0sZnVuY3Rpb24oKXtNLl9wcml2YXRlLmN5Lm5vdGlmeSgiem9yZGVyIix4KX0pfSxFMS5jaGVja0JvdW5kc1RyaWdnZXI9ZnVuY3Rpb24oeCxtLGssUyl7dGhpcy5jaGVja1RyaWdnZXIoeCxtLGssUyxmdW5jdGlvbihNKXtyZXR1cm4gTS50cmlnZ2Vyc0JvdW5kc30sZnVuY3Rpb24oTSl7eC5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKSx4LmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLE0udHJpZ2dlcnNCb3VuZHNPZlBhcmFsbGVsQmV6aWVycyYmbT09PSJjdXJ2ZS1zdHlsZSImJihrPT09ImJlemllciJ8fFM9PT0iYmV6aWVyIikmJngucGFyYWxsZWxFZGdlcygpLmZvckVhY2goZnVuY3Rpb24oTyl7Ty5pc0J1bmRsZWRCZXppZXIoKSYmTy5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKX0pLE0udHJpZ2dlcnNCb3VuZHNPZkNvbm5lY3RlZEVkZ2VzJiZtPT09ImRpc3BsYXkiJiYoaz09PSJub25lInx8Uz09PSJub25lIikmJnguY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKE8pe08uZGlydHlCb3VuZGluZ0JveENhY2hlKCl9KX0pfSxFMS5jaGVja1RyaWdnZXJzPWZ1bmN0aW9uKHgsbSxrLFMpe3guZGlydHlTdHlsZUNhY2hlKCksdGhpcy5jaGVja1pPcmRlclRyaWdnZXIoeCxtLGssUyksdGhpcy5jaGVja0JvdW5kc1RyaWdnZXIoeCxtLGssUyl9O3ZhciBjaz17fTtjay5hcHBseUJ5cGFzcz1mdW5jdGlvbih4LG0sayxTKXt2YXIgTT10aGlzLE89W10sTj0hMDtpZihtPT09IioifHxtPT09IioqIil7aWYoayE9PXZvaWQgMClmb3IodmFyICQ9MDskPE0ucHJvcGVydGllcy5sZW5ndGg7JCsrKXt2YXIgSD1NLnByb3BlcnRpZXNbJF0scT1ILm5hbWUsWT10aGlzLnBhcnNlKHEsaywhMCk7WSYmTy5wdXNoKFkpfX1lbHNlIGlmKGJlKG0pKXt2YXIgWj10aGlzLnBhcnNlKG0saywhMCk7WiYmTy5wdXNoKFopfWVsc2UgaWYoc2UobSkpe3ZhciBjZT1tO1M9aztmb3IodmFyIHZlPU9iamVjdC5rZXlzKGNlKSxtZT0wO21lPHZlLmxlbmd0aDttZSsrKXt2YXIgTGU9dmVbbWVdLF9lPWNlW0xlXTtpZihfZT09PXZvaWQgMCYmKF9lPWNlW190KExlKV0pLF9lIT09dm9pZCAwKXt2YXIgRWU9dGhpcy5wYXJzZShMZSxfZSwhMCk7RWUmJk8ucHVzaChFZSl9fX1lbHNlIHJldHVybiExO2lmKE8ubGVuZ3RoPT09MClyZXR1cm4hMTtmb3IodmFyIEJlPSExLFJlPTA7UmU8eC5sZW5ndGg7UmUrKyl7Zm9yKHZhciBWZT14W1JlXSxjdD17fSxzdD12b2lkIDAsWWU9MDtZZTxPLmxlbmd0aDtZZSsrKXt2YXIgbXQ9T1tZZV07aWYoUyl7dmFyIEplPVZlLnBzdHlsZShtdC5uYW1lKTtzdD1jdFttdC5uYW1lXT17cHJldjpKZX19QmU9dGhpcy5hcHBseVBhcnNlZFByb3BlcnR5KFZlLHZtKG10KSl8fEJlLFMmJihzdC5uZXh0PVZlLnBzdHlsZShtdC5uYW1lKSl9QmUmJnRoaXMudXBkYXRlU3R5bGVIaW50cyhWZSksUyYmdGhpcy51cGRhdGVUcmFuc2l0aW9ucyhWZSxjdCxOKX1yZXR1cm4gQmV9LGNrLm92ZXJyaWRlQnlwYXNzPWZ1bmN0aW9uKHgsbSxrKXttPWduKG0pO2Zvcih2YXIgUz0wO1M8eC5sZW5ndGg7UysrKXt2YXIgTT14W1NdLE89TS5fcHJpdmF0ZS5zdHlsZVttXSxOPXRoaXMucHJvcGVydGllc1ttXS50eXBlLCQ9Ti5jb2xvcixIPU4ubXV0aXBsZSxxPU8/Ty5wZlZhbHVlIT1udWxsP08ucGZWYWx1ZTpPLnZhbHVlOm51bGw7IU98fCFPLmJ5cGFzcz90aGlzLmFwcGx5QnlwYXNzKE0sbSxrKTooTy52YWx1ZT1rLE8ucGZWYWx1ZSE9bnVsbCYmKE8ucGZWYWx1ZT1rKSwkP08uc3RyVmFsdWU9InJnYigiK2suam9pbigiLCIpKyIpIjpIP08uc3RyVmFsdWU9ay5qb2luKCIgIik6Ty5zdHJWYWx1ZT0iIitrLHRoaXMudXBkYXRlU3R5bGVIaW50cyhNKSksdGhpcy5jaGVja1RyaWdnZXJzKE0sbSxxLGspfX0sY2sucmVtb3ZlQWxsQnlwYXNzZXM9ZnVuY3Rpb24oeCxtKXtyZXR1cm4gdGhpcy5yZW1vdmVCeXBhc3Nlcyh4LHRoaXMucHJvcGVydHlOYW1lcyxtKX0sY2sucmVtb3ZlQnlwYXNzZXM9ZnVuY3Rpb24oeCxtLGspe2Zvcih2YXIgUz0hMCxNPTA7TTx4Lmxlbmd0aDtNKyspe2Zvcih2YXIgTz14W01dLE49e30sJD0wOyQ8bS5sZW5ndGg7JCsrKXt2YXIgSD1tWyRdLHE9dGhpcy5wcm9wZXJ0aWVzW0hdLFk9Ty5wc3R5bGUocS5uYW1lKTtpZighKCFZfHwhWS5ieXBhc3MpKXt2YXIgWj0iIixjZT10aGlzLnBhcnNlKEgsWiwhMCksdmU9TltxLm5hbWVdPXtwcmV2Oll9O3RoaXMuYXBwbHlQYXJzZWRQcm9wZXJ0eShPLGNlKSx2ZS5uZXh0PU8ucHN0eWxlKHEubmFtZSl9fXRoaXMudXBkYXRlU3R5bGVIaW50cyhPKSxrJiZ0aGlzLnVwZGF0ZVRyYW5zaXRpb25zKE8sTixTKX19O3ZhciBJST17fTtJSS5nZXRFbVNpemVJblBpeGVscz1mdW5jdGlvbigpe3ZhciB4PXRoaXMuY29udGFpbmVyQ3NzKCJmb250LXNpemUiKTtyZXR1cm4geCE9bnVsbD9wYXJzZUZsb2F0KHgpOjF9LElJLmNvbnRhaW5lckNzcz1mdW5jdGlvbih4KXt2YXIgbT10aGlzLl9wcml2YXRlLmN5LGs9bS5jb250YWluZXIoKSxTPW0ud2luZG93KCk7aWYoUyYmayYmUy5nZXRDb21wdXRlZFN0eWxlKXJldHVybiBTLmdldENvbXB1dGVkU3R5bGUoaykuZ2V0UHJvcGVydHlWYWx1ZSh4KX07dmFyIHhtPXt9O3htLmdldFJlbmRlcmVkU3R5bGU9ZnVuY3Rpb24oeCxtKXtyZXR1cm4gbT90aGlzLmdldFN0eWxlUHJvcGVydHlWYWx1ZSh4LG0sITApOnRoaXMuZ2V0UmF3U3R5bGUoeCwhMCl9LHhtLmdldFJhd1N0eWxlPWZ1bmN0aW9uKHgsbSl7dmFyIGs9dGhpcztpZih4PXhbMF0seCl7Zm9yKHZhciBTPXt9LE09MDtNPGsucHJvcGVydGllcy5sZW5ndGg7TSsrKXt2YXIgTz1rLnByb3BlcnRpZXNbTV0sTj1rLmdldFN0eWxlUHJvcGVydHlWYWx1ZSh4LE8ubmFtZSxtKTtOIT1udWxsJiYoU1tPLm5hbWVdPU4sU1tfdChPLm5hbWUpXT1OKX1yZXR1cm4gU319LHhtLmdldEluZGV4ZWRTdHlsZT1mdW5jdGlvbih4LG0sayxTKXt2YXIgTT14LnBzdHlsZShtKVtrXVtTXTtyZXR1cm4gTT8/eC5jeSgpLnN0eWxlKCkuZ2V0RGVmYXVsdFByb3BlcnR5KG0pW2tdWzBdfSx4bS5nZXRTdHlsZVByb3BlcnR5VmFsdWU9ZnVuY3Rpb24oeCxtLGspe3ZhciBTPXRoaXM7aWYoeD14WzBdLHgpe3ZhciBNPVMucHJvcGVydGllc1ttXTtNLmFsaWFzJiYoTT1NLnBvaW50c1RvKTt2YXIgTz1NLnR5cGUsTj14LnBzdHlsZShNLm5hbWUpO2lmKE4pe3ZhciAkPU4udmFsdWUsSD1OLnVuaXRzLHE9Ti5zdHJWYWx1ZTtpZihrJiZPLm51bWJlciYmJCE9bnVsbCYmWCgkKSl7dmFyIFk9eC5jeSgpLnpvb20oKSxaPWZ1bmN0aW9uKF9lKXtyZXR1cm4gX2UqWX0sY2U9ZnVuY3Rpb24oX2UsRWUpe3JldHVybiBaKF9lKStFZX0sdmU9bmUoJCksbWU9dmU/SC5ldmVyeShmdW5jdGlvbihMZSl7cmV0dXJuIExlIT1udWxsfSk6SCE9bnVsbDtyZXR1cm4gbWU/dmU/JC5tYXAoZnVuY3Rpb24oTGUsX2Upe3JldHVybiBjZShMZSxIW19lXSl9KS5qb2luKCIgIik6Y2UoJCxIKTp2ZT8kLm1hcChmdW5jdGlvbihMZSl7cmV0dXJuIGJlKExlKT9MZToiIitaKExlKX0pLmpvaW4oIiAiKToiIitaKCQpfWVsc2UgaWYocSE9bnVsbClyZXR1cm4gcX1yZXR1cm4gbnVsbH19LHhtLmdldEFuaW1hdGlvblN0YXJ0U3R5bGU9ZnVuY3Rpb24oeCxtKXtmb3IodmFyIGs9e30sUz0wO1M8bS5sZW5ndGg7UysrKXt2YXIgTT1tW1NdLE89TS5uYW1lLE49eC5wc3R5bGUoTyk7TiE9PXZvaWQgMCYmKHNlKE4pP049dGhpcy5wYXJzZShPLE4uc3RyVmFsdWUpOk49dGhpcy5wYXJzZShPLE4pKSxOJiYoa1tPXT1OKX1yZXR1cm4ga30seG0uZ2V0UHJvcHNMaXN0PWZ1bmN0aW9uKHgpe3ZhciBtPXRoaXMsaz1bXSxTPXgsTT1tLnByb3BlcnRpZXM7aWYoUylmb3IodmFyIE89T2JqZWN0LmtleXMoUyksTj0wO048Ty5sZW5ndGg7TisrKXt2YXIgJD1PW05dLEg9U1skXSxxPU1bJF18fE1bZ24oJCldLFk9dGhpcy5wYXJzZShxLm5hbWUsSCk7WSYmay5wdXNoKFkpfXJldHVybiBrfSx4bS5nZXROb25EZWZhdWx0UHJvcGVydGllc0hhc2g9ZnVuY3Rpb24oeCxtLGspe3ZhciBTPWsuc2xpY2UoKSxNLE8sTiwkLEgscTtmb3IoSD0wO0g8bS5sZW5ndGg7SCsrKWlmKE09bVtIXSxPPXgucHN0eWxlKE0sITEpLE8hPW51bGwpaWYoTy5wZlZhbHVlIT1udWxsKVNbMF09emcoJCxTWzBdKSxTWzFdPWJtKCQsU1sxXSk7ZWxzZSBmb3IoTj1PLnN0clZhbHVlLHE9MDtxPE4ubGVuZ3RoO3ErKykkPU4uY2hhckNvZGVBdChxKSxTWzBdPXpnKCQsU1swXSksU1sxXT1ibSgkLFNbMV0pO3JldHVybiBTfSx4bS5nZXRQcm9wZXJ0aWVzSGFzaD14bS5nZXROb25EZWZhdWx0UHJvcGVydGllc0hhc2g7dmFyICRTPXt9OyRTLmFwcGVuZEZyb21Kc29uPWZ1bmN0aW9uKHgpe2Zvcih2YXIgbT10aGlzLGs9MDtrPHgubGVuZ3RoO2srKyl7dmFyIFM9eFtrXSxNPVMuc2VsZWN0b3IsTz1TLnN0eWxlfHxTLmNzcyxOPU9iamVjdC5rZXlzKE8pO20uc2VsZWN0b3IoTSk7Zm9yKHZhciAkPTA7JDxOLmxlbmd0aDskKyspe3ZhciBIPU5bJF0scT1PW0hdO20uY3NzKEgscSl9fXJldHVybiBtfSwkUy5mcm9tSnNvbj1mdW5jdGlvbih4KXt2YXIgbT10aGlzO3JldHVybiBtLnJlc2V0VG9EZWZhdWx0KCksbS5hcHBlbmRGcm9tSnNvbih4KSxtfSwkUy5qc29uPWZ1bmN0aW9uKCl7Zm9yKHZhciB4PVtdLG09dGhpcy5kZWZhdWx0TGVuZ3RoO208dGhpcy5sZW5ndGg7bSsrKXtmb3IodmFyIGs9dGhpc1ttXSxTPWsuc2VsZWN0b3IsTT1rLnByb3BlcnRpZXMsTz17fSxOPTA7TjxNLmxlbmd0aDtOKyspe3ZhciAkPU1bTl07T1skLm5hbWVdPSQuc3RyVmFsdWV9eC5wdXNoKHtzZWxlY3RvcjpTP1MudG9TdHJpbmcoKToiY29yZSIsc3R5bGU6T30pfXJldHVybiB4fTt2YXIgT0k9e307T0kuYXBwZW5kRnJvbVN0cmluZz1mdW5jdGlvbih4KXt2YXIgbT10aGlzLGs9dGhpcyxTPSIiK3gsTSxPLE47Uz1TLnJlcGxhY2UoL1svXVsqXShcc3wuKSs/WypdWy9dL2csIiIpO2Z1bmN0aW9uICQoKXtTLmxlbmd0aD5NLmxlbmd0aD9TPVMuc3Vic3RyKE0ubGVuZ3RoKTpTPSIifWZ1bmN0aW9uIEgoKXtPLmxlbmd0aD5OLmxlbmd0aD9PPU8uc3Vic3RyKE4ubGVuZ3RoKTpPPSIifWZvcig7Oyl7dmFyIHE9Uy5tYXRjaCgvXlxzKiQvKTtpZihxKWJyZWFrO3ZhciBZPVMubWF0Y2goL15ccyooKD86LnxccykrPylccypceygoPzoufFxzKSs/KVx9Lyk7aWYoIVkpe2h1KCJIYWx0aW5nIHN0eWxlc2hlZXQgcGFyc2luZzogU3RyaW5nIHN0eWxlc2hlZXQgY29udGFpbnMgbW9yZSB0byBwYXJzZSBidXQgbm8gc2VsZWN0b3IgYW5kIGJsb2NrIGZvdW5kIGluOiAiK1MpO2JyZWFrfU09WVswXTt2YXIgWj1ZWzFdO2lmKFohPT0iY29yZSIpe3ZhciBjZT1uZXcgZXkoWik7aWYoY2UuaW52YWxpZCl7aHUoIlNraXBwaW5nIHBhcnNpbmcgb2YgYmxvY2s6IEludmFsaWQgc2VsZWN0b3IgZm91bmQgaW4gc3RyaW5nIHN0eWxlc2hlZXQ6ICIrWiksJCgpO2NvbnRpbnVlfX12YXIgdmU9WVsyXSxtZT0hMTtPPXZlO2Zvcih2YXIgTGU9W107Oyl7dmFyIF9lPU8ubWF0Y2goL15ccyokLyk7aWYoX2UpYnJlYWs7dmFyIEVlPU8ubWF0Y2goL15ccyooLis/KVxzKjpccyooLis/KSg/OlxzKjt8XHMqJCkvKTtpZighRWUpe2h1KCJTa2lwcGluZyBwYXJzaW5nIG9mIGJsb2NrOiBJbnZhbGlkIGZvcm1hdHRpbmcgb2Ygc3R5bGUgcHJvcGVydHkgYW5kIHZhbHVlIGRlZmluaXRpb25zIGZvdW5kIGluOiIrdmUpLG1lPSEwO2JyZWFrfU49RWVbMF07dmFyIEJlPUVlWzFdLFJlPUVlWzJdLFZlPW0ucHJvcGVydGllc1tCZV07aWYoIVZlKXtodSgiU2tpcHBpbmcgcHJvcGVydHk6IEludmFsaWQgcHJvcGVydHkgbmFtZSBpbjogIitOKSxIKCk7Y29udGludWV9dmFyIGN0PWsucGFyc2UoQmUsUmUpO2lmKCFjdCl7aHUoIlNraXBwaW5nIHByb3BlcnR5OiBJbnZhbGlkIHByb3BlcnR5IGRlZmluaXRpb24gaW46ICIrTiksSCgpO2NvbnRpbnVlfUxlLnB1c2goe25hbWU6QmUsdmFsOlJlfSksSCgpfWlmKG1lKXskKCk7YnJlYWt9ay5zZWxlY3RvcihaKTtmb3IodmFyIHN0PTA7c3Q8TGUubGVuZ3RoO3N0Kyspe3ZhciBZZT1MZVtzdF07ay5jc3MoWWUubmFtZSxZZS52YWwpfSQoKX1yZXR1cm4ga30sT0kuZnJvbVN0cmluZz1mdW5jdGlvbih4KXt2YXIgbT10aGlzO3JldHVybiBtLnJlc2V0VG9EZWZhdWx0KCksbS5hcHBlbmRGcm9tU3RyaW5nKHgpLG19O3ZhciBVMD17fTsoZnVuY3Rpb24oKXt2YXIgeD1sbixtPVB0LGs9RHQsUz1rdCxNPU9uLE89ZnVuY3Rpb24oU3Ipe3JldHVybiJeIitTcisiXFxzKlxcKFxccyooW1xcd1xcLl0rKVxccypcXCkkIn0sTj1mdW5jdGlvbihTcil7dmFyIE5yPXgrInxcXHcrfCIrbSsifCIraysifCIrUysifCIrTTtyZXR1cm4iXiIrU3IrIlxccypcXCgoW1xcd1xcLl0rKVxccypcXCxcXHMqKCIreCsiKVxccypcXCxcXHMqKCIreCsiKVxccyosXFxzKigiK05yKyIpXFxzKlxcLFxccyooIitOcisiKVxcKSQifSwkPVtgXnVybFxccypcXChcXHMqWyciXT8oLis/KVsnIl0/XFxzKlxcKSRgLCJeKG5vbmUpJCIsIl4oLispJCJdO1UwLnR5cGVzPXt0aW1lOntudW1iZXI6ITAsbWluOjAsdW5pdHM6InN8bXMiLGltcGxpY2l0VW5pdHM6Im1zIn0scGVyY2VudDp7bnVtYmVyOiEwLG1pbjowLG1heDoxMDAsdW5pdHM6IiUiLGltcGxpY2l0VW5pdHM6IiUifSxwZXJjZW50YWdlczp7bnVtYmVyOiEwLG1pbjowLG1heDoxMDAsdW5pdHM6IiUiLGltcGxpY2l0VW5pdHM6IiUiLG11bHRpcGxlOiEwfSx6ZXJvT25lTnVtYmVyOntudW1iZXI6ITAsbWluOjAsbWF4OjEsdW5pdGxlc3M6ITB9LHplcm9PbmVOdW1iZXJzOntudW1iZXI6ITAsbWluOjAsbWF4OjEsdW5pdGxlc3M6ITAsbXVsdGlwbGU6ITB9LG5PbmVPbmVOdW1iZXI6e251bWJlcjohMCxtaW46LTEsbWF4OjEsdW5pdGxlc3M6ITB9LG5vbk5lZ2F0aXZlSW50OntudW1iZXI6ITAsbWluOjAsaW50ZWdlcjohMCx1bml0bGVzczohMH0sbm9uTmVnYXRpdmVOdW1iZXI6e251bWJlcjohMCxtaW46MCx1bml0bGVzczohMH0scG9zaXRpb246e2VudW1zOlsicGFyZW50Iiwib3JpZ2luIl19LG5vZGVTaXplOntudW1iZXI6ITAsbWluOjAsZW51bXM6WyJsYWJlbCJdfSxudW1iZXI6e251bWJlcjohMCx1bml0bGVzczohMH0sbnVtYmVyczp7bnVtYmVyOiEwLHVuaXRsZXNzOiEwLG11bHRpcGxlOiEwfSxwb3NpdGl2ZU51bWJlcjp7bnVtYmVyOiEwLHVuaXRsZXNzOiEwLG1pbjowLHN0cmljdE1pbjohMH0sc2l6ZTp7bnVtYmVyOiEwLG1pbjowfSxiaWRpcmVjdGlvbmFsU2l6ZTp7bnVtYmVyOiEwfSxiaWRpcmVjdGlvbmFsU2l6ZU1heWJlUGVyY2VudDp7bnVtYmVyOiEwLGFsbG93UGVyY2VudDohMH0sYmlkaXJlY3Rpb25hbFNpemVzOntudW1iZXI6ITAsbXVsdGlwbGU6ITB9LHNpemVNYXliZVBlcmNlbnQ6e251bWJlcjohMCxtaW46MCxhbGxvd1BlcmNlbnQ6ITB9LGF4aXNEaXJlY3Rpb246e2VudW1zOlsiaG9yaXpvbnRhbCIsImxlZnR3YXJkIiwicmlnaHR3YXJkIiwidmVydGljYWwiLCJ1cHdhcmQiLCJkb3dud2FyZCIsImF1dG8iXX0scGFkZGluZ1JlbGF0aXZlVG86e2VudW1zOlsid2lkdGgiLCJoZWlnaHQiLCJhdmVyYWdlIiwibWluIiwibWF4Il19LGJnV0g6e251bWJlcjohMCxtaW46MCxhbGxvd1BlcmNlbnQ6ITAsZW51bXM6WyJhdXRvIl0sbXVsdGlwbGU6ITB9LGJnUG9zOntudW1iZXI6ITAsYWxsb3dQZXJjZW50OiEwLG11bHRpcGxlOiEwfSxiZ1JlbGF0aXZlVG86e2VudW1zOlsiaW5uZXIiLCJpbmNsdWRlLXBhZGRpbmciXSxtdWx0aXBsZTohMH0sYmdSZXBlYXQ6e2VudW1zOlsicmVwZWF0IiwicmVwZWF0LXgiLCJyZXBlYXQteSIsIm5vLXJlcGVhdCJdLG11bHRpcGxlOiEwfSxiZ0ZpdDp7ZW51bXM6WyJub25lIiwiY29udGFpbiIsImNvdmVyIl0sbXVsdGlwbGU6ITB9LGJnQ3Jvc3NPcmlnaW46e2VudW1zOlsiYW5vbnltb3VzIiwidXNlLWNyZWRlbnRpYWxzIiwibnVsbCJdLG11bHRpcGxlOiEwfSxiZ0NsaXA6e2VudW1zOlsibm9uZSIsIm5vZGUiXSxtdWx0aXBsZTohMH0sYmdDb250YWlubWVudDp7ZW51bXM6WyJpbnNpZGUiLCJvdmVyIl0sbXVsdGlwbGU6ITB9LGNvbG9yOntjb2xvcjohMH0sY29sb3JzOntjb2xvcjohMCxtdWx0aXBsZTohMH0sZmlsbDp7ZW51bXM6WyJzb2xpZCIsImxpbmVhci1ncmFkaWVudCIsInJhZGlhbC1ncmFkaWVudCJdfSxib29sOntlbnVtczpbInllcyIsIm5vIl19LGJvb2xzOntlbnVtczpbInllcyIsIm5vIl0sbXVsdGlwbGU6ITB9LGxpbmVTdHlsZTp7ZW51bXM6WyJzb2xpZCIsImRvdHRlZCIsImRhc2hlZCJdfSxsaW5lQ2FwOntlbnVtczpbImJ1dHQiLCJyb3VuZCIsInNxdWFyZSJdfSxib3JkZXJTdHlsZTp7ZW51bXM6WyJzb2xpZCIsImRvdHRlZCIsImRhc2hlZCIsImRvdWJsZSJdfSxjdXJ2ZVN0eWxlOntlbnVtczpbImJlemllciIsInVuYnVuZGxlZC1iZXppZXIiLCJoYXlzdGFjayIsInNlZ21lbnRzIiwic3RyYWlnaHQiLCJzdHJhaWdodC10cmlhbmdsZSIsInRheGkiXX0sZm9udEZhbWlseTp7cmVnZXg6J14oW1xcdy0gXFwiXSsoPzpcXHMqLFxccypbXFx3LSBcXCJdKykqKSQnfSxmb250U3R5bGU6e2VudW1zOlsiaXRhbGljIiwibm9ybWFsIiwib2JsaXF1ZSJdfSxmb250V2VpZ2h0OntlbnVtczpbIm5vcm1hbCIsImJvbGQiLCJib2xkZXIiLCJsaWdodGVyIiwiMTAwIiwiMjAwIiwiMzAwIiwiNDAwIiwiNTAwIiwiNjAwIiwiODAwIiwiOTAwIiwxMDAsMjAwLDMwMCw0MDAsNTAwLDYwMCw3MDAsODAwLDkwMF19LHRleHREZWNvcmF0aW9uOntlbnVtczpbIm5vbmUiLCJ1bmRlcmxpbmUiLCJvdmVybGluZSIsImxpbmUtdGhyb3VnaCJdfSx0ZXh0VHJhbnNmb3JtOntlbnVtczpbIm5vbmUiLCJ1cHBlcmNhc2UiLCJsb3dlcmNhc2UiXX0sdGV4dFdyYXA6e2VudW1zOlsibm9uZSIsIndyYXAiLCJlbGxpcHNpcyJdfSx0ZXh0T3ZlcmZsb3dXcmFwOntlbnVtczpbIndoaXRlc3BhY2UiLCJhbnl3aGVyZSJdfSx0ZXh0QmFja2dyb3VuZFNoYXBlOntlbnVtczpbInJlY3RhbmdsZSIsInJvdW5kcmVjdGFuZ2xlIiwicm91bmQtcmVjdGFuZ2xlIl19LG5vZGVTaGFwZTp7ZW51bXM6WyJyZWN0YW5nbGUiLCJyb3VuZHJlY3RhbmdsZSIsInJvdW5kLXJlY3RhbmdsZSIsImN1dHJlY3RhbmdsZSIsImN1dC1yZWN0YW5nbGUiLCJib3R0b21yb3VuZHJlY3RhbmdsZSIsImJvdHRvbS1yb3VuZC1yZWN0YW5nbGUiLCJiYXJyZWwiLCJlbGxpcHNlIiwidHJpYW5nbGUiLCJyb3VuZC10cmlhbmdsZSIsInNxdWFyZSIsInBlbnRhZ29uIiwicm91bmQtcGVudGFnb24iLCJoZXhhZ29uIiwicm91bmQtaGV4YWdvbiIsImNvbmNhdmVoZXhhZ29uIiwiY29uY2F2ZS1oZXhhZ29uIiwiaGVwdGFnb24iLCJyb3VuZC1oZXB0YWdvbiIsIm9jdGFnb24iLCJyb3VuZC1vY3RhZ29uIiwidGFnIiwicm91bmQtdGFnIiwic3RhciIsImRpYW1vbmQiLCJyb3VuZC1kaWFtb25kIiwidmVlIiwicmhvbWJvaWQiLCJyaWdodC1yaG9tYm9pZCIsInBvbHlnb24iXX0sb3ZlcmxheVNoYXBlOntlbnVtczpbInJvdW5kcmVjdGFuZ2xlIiwicm91bmQtcmVjdGFuZ2xlIiwiZWxsaXBzZSJdfSxjb21wb3VuZEluY2x1ZGVMYWJlbHM6e2VudW1zOlsiaW5jbHVkZSIsImV4Y2x1ZGUiXX0sYXJyb3dTaGFwZTp7ZW51bXM6WyJ0ZWUiLCJ0cmlhbmdsZSIsInRyaWFuZ2xlLXRlZSIsImNpcmNsZS10cmlhbmdsZSIsInRyaWFuZ2xlLWNyb3NzIiwidHJpYW5nbGUtYmFja2N1cnZlIiwidmVlIiwic3F1YXJlIiwiY2lyY2xlIiwiZGlhbW9uZCIsImNoZXZyb24iLCJub25lIl19LGFycm93RmlsbDp7ZW51bXM6WyJmaWxsZWQiLCJob2xsb3ciXX0sYXJyb3dXaWR0aDp7bnVtYmVyOiEwLHVuaXRzOiIlfHB4fGVtIixpbXBsaWNpdFVuaXRzOiJweCIsZW51bXM6WyJtYXRjaC1saW5lIl19LGRpc3BsYXk6e2VudW1zOlsiZWxlbWVudCIsIm5vbmUiXX0sdmlzaWJpbGl0eTp7ZW51bXM6WyJoaWRkZW4iLCJ2aXNpYmxlIl19LHpDb21wb3VuZERlcHRoOntlbnVtczpbImJvdHRvbSIsIm9ycGhhbiIsImF1dG8iLCJ0b3AiXX0sekluZGV4Q29tcGFyZTp7ZW51bXM6WyJhdXRvIiwibWFudWFsIl19LHZhbGlnbjp7ZW51bXM6WyJ0b3AiLCJjZW50ZXIiLCJib3R0b20iXX0saGFsaWduOntlbnVtczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdfSxqdXN0aWZpY2F0aW9uOntlbnVtczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCIsImF1dG8iXX0sdGV4dDp7c3RyaW5nOiEwfSxkYXRhOnttYXBwaW5nOiEwLHJlZ2V4Ok8oImRhdGEiKX0sbGF5b3V0RGF0YTp7bWFwcGluZzohMCxyZWdleDpPKCJsYXlvdXREYXRhIil9LHNjcmF0Y2g6e21hcHBpbmc6ITAscmVnZXg6Tygic2NyYXRjaCIpfSxtYXBEYXRhOnttYXBwaW5nOiEwLHJlZ2V4Ok4oIm1hcERhdGEiKX0sbWFwTGF5b3V0RGF0YTp7bWFwcGluZzohMCxyZWdleDpOKCJtYXBMYXlvdXREYXRhIil9LG1hcFNjcmF0Y2g6e21hcHBpbmc6ITAscmVnZXg6TigibWFwU2NyYXRjaCIpfSxmbjp7bWFwcGluZzohMCxmbjohMH0sdXJsOntyZWdleGVzOiQsc2luZ2xlUmVnZXhNYXRjaFZhbHVlOiEwfSx1cmxzOntyZWdleGVzOiQsc2luZ2xlUmVnZXhNYXRjaFZhbHVlOiEwLG11bHRpcGxlOiEwfSxwcm9wTGlzdDp7cHJvcExpc3Q6ITB9LGFuZ2xlOntudW1iZXI6ITAsdW5pdHM6ImRlZ3xyYWQiLGltcGxpY2l0VW5pdHM6InJhZCJ9LHRleHRSb3RhdGlvbjp7bnVtYmVyOiEwLHVuaXRzOiJkZWd8cmFkIixpbXBsaWNpdFVuaXRzOiJyYWQiLGVudW1zOlsibm9uZSIsImF1dG9yb3RhdGUiXX0scG9seWdvblBvaW50TGlzdDp7bnVtYmVyOiEwLG11bHRpcGxlOiEwLGV2ZW5NdWx0aXBsZTohMCxtaW46LTEsbWF4OjEsdW5pdGxlc3M6ITB9LGVkZ2VEaXN0YW5jZXM6e2VudW1zOlsiaW50ZXJzZWN0aW9uIiwibm9kZS1wb3NpdGlvbiIsImVuZHBvaW50cyJdfSxlZGdlRW5kcG9pbnQ6e251bWJlcjohMCxtdWx0aXBsZTohMCx1bml0czoiJXxweHxlbXxkZWd8cmFkIixpbXBsaWNpdFVuaXRzOiJweCIsZW51bXM6WyJpbnNpZGUtdG8tbm9kZSIsIm91dHNpZGUtdG8tbm9kZSIsIm91dHNpZGUtdG8tbm9kZS1vci1sYWJlbCIsIm91dHNpZGUtdG8tbGluZSIsIm91dHNpZGUtdG8tbGluZS1vci1sYWJlbCJdLHNpbmdsZUVudW06ITAsdmFsaWRhdGU6ZnVuY3Rpb24oU3IsTnIpe3N3aXRjaChTci5sZW5ndGgpe2Nhc2UgMjpyZXR1cm4gTnJbMF0hPT0iZGVnIiYmTnJbMF0hPT0icmFkIiYmTnJbMV0hPT0iZGVnIiYmTnJbMV0hPT0icmFkIjtjYXNlIDE6cmV0dXJuIGJlKFNyWzBdKXx8TnJbMF09PT0iZGVnInx8TnJbMF09PT0icmFkIjtkZWZhdWx0OnJldHVybiExfX19LGVhc2luZzp7cmVnZXhlczpbIl4oc3ByaW5nKVxccypcXChcXHMqKCIreCsiKVxccyosXFxzKigiK3grIilcXHMqXFwpJCIsIl4oY3ViaWMtYmV6aWVyKVxccypcXChcXHMqKCIreCsiKVxccyosXFxzKigiK3grIilcXHMqLFxccyooIit4KyIpXFxzKixcXHMqKCIreCsiKVxccypcXCkkIl0sZW51bXM6WyJsaW5lYXIiLCJlYXNlIiwiZWFzZS1pbiIsImVhc2Utb3V0IiwiZWFzZS1pbi1vdXQiLCJlYXNlLWluLXNpbmUiLCJlYXNlLW91dC1zaW5lIiwiZWFzZS1pbi1vdXQtc2luZSIsImVhc2UtaW4tcXVhZCIsImVhc2Utb3V0LXF1YWQiLCJlYXNlLWluLW91dC1xdWFkIiwiZWFzZS1pbi1jdWJpYyIsImVhc2Utb3V0LWN1YmljIiwiZWFzZS1pbi1vdXQtY3ViaWMiLCJlYXNlLWluLXF1YXJ0IiwiZWFzZS1vdXQtcXVhcnQiLCJlYXNlLWluLW91dC1xdWFydCIsImVhc2UtaW4tcXVpbnQiLCJlYXNlLW91dC1xdWludCIsImVhc2UtaW4tb3V0LXF1aW50IiwiZWFzZS1pbi1leHBvIiwiZWFzZS1vdXQtZXhwbyIsImVhc2UtaW4tb3V0LWV4cG8iLCJlYXNlLWluLWNpcmMiLCJlYXNlLW91dC1jaXJjIiwiZWFzZS1pbi1vdXQtY2lyYyJdfSxncmFkaWVudERpcmVjdGlvbjp7ZW51bXM6WyJ0by1ib3R0b20iLCJ0by10b3AiLCJ0by1sZWZ0IiwidG8tcmlnaHQiLCJ0by1ib3R0b20tcmlnaHQiLCJ0by1ib3R0b20tbGVmdCIsInRvLXRvcC1yaWdodCIsInRvLXRvcC1sZWZ0IiwidG8tcmlnaHQtYm90dG9tIiwidG8tbGVmdC1ib3R0b20iLCJ0by1yaWdodC10b3AiLCJ0by1sZWZ0LXRvcCJdfSxib3VuZHNFeHBhbnNpb246e251bWJlcjohMCxtdWx0aXBsZTohMCxtaW46MCx2YWxpZGF0ZTpmdW5jdGlvbihTcil7dmFyIE5yPVNyLmxlbmd0aDtyZXR1cm4gTnI9PT0xfHxOcj09PTJ8fE5yPT09NH19fTt2YXIgSD17emVyb05vblplcm86ZnVuY3Rpb24oU3IsTnIpe3JldHVybihTcj09bnVsbHx8TnI9PW51bGwpJiZTciE9PU5yfHxTcj09MCYmTnIhPTA/ITA6U3IhPTAmJk5yPT0wfSxhbnk6ZnVuY3Rpb24oU3IsTnIpe3JldHVybiBTciE9TnJ9LGVtcHR5Tm9uRW1wdHk6ZnVuY3Rpb24oU3IsTnIpe3ZhciBTaT1TZShTcikseXM9U2UoTnIpO3JldHVybiBTaSYmIXlzfHwhU2kmJnlzfX0scT1VMC50eXBlcyxZPVt7bmFtZToibGFiZWwiLHR5cGU6cS50ZXh0LHRyaWdnZXJzQm91bmRzOkguYW55LHRyaWdnZXJzWk9yZGVyOkguZW1wdHlOb25FbXB0eX0se25hbWU6InRleHQtcm90YXRpb24iLHR5cGU6cS50ZXh0Um90YXRpb24sdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJ0ZXh0LW1hcmdpbi14Iix0eXBlOnEuYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJ0ZXh0LW1hcmdpbi15Iix0eXBlOnEuYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9XSxaPVt7bmFtZToic291cmNlLWxhYmVsIix0eXBlOnEudGV4dCx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6InNvdXJjZS10ZXh0LXJvdGF0aW9uIix0eXBlOnEudGV4dFJvdGF0aW9uLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToic291cmNlLXRleHQtbWFyZ2luLXgiLHR5cGU6cS5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6InNvdXJjZS10ZXh0LW1hcmdpbi15Iix0eXBlOnEuYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJzb3VyY2UtdGV4dC1vZmZzZXQiLHR5cGU6cS5zaXplLHRyaWdnZXJzQm91bmRzOkguYW55fV0sY2U9W3tuYW1lOiJ0YXJnZXQtbGFiZWwiLHR5cGU6cS50ZXh0LHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToidGFyZ2V0LXRleHQtcm90YXRpb24iLHR5cGU6cS50ZXh0Um90YXRpb24sdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJ0YXJnZXQtdGV4dC1tYXJnaW4teCIsdHlwZTpxLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToidGFyZ2V0LXRleHQtbWFyZ2luLXkiLHR5cGU6cS5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6InRhcmdldC10ZXh0LW9mZnNldCIsdHlwZTpxLnNpemUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9XSx2ZT1be25hbWU6ImZvbnQtZmFtaWx5Iix0eXBlOnEuZm9udEZhbWlseSx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6ImZvbnQtc3R5bGUiLHR5cGU6cS5mb250U3R5bGUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJmb250LXdlaWdodCIsdHlwZTpxLmZvbnRXZWlnaHQsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJmb250LXNpemUiLHR5cGU6cS5zaXplLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToidGV4dC10cmFuc2Zvcm0iLHR5cGU6cS50ZXh0VHJhbnNmb3JtLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToidGV4dC13cmFwIix0eXBlOnEudGV4dFdyYXAsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJ0ZXh0LW92ZXJmbG93LXdyYXAiLHR5cGU6cS50ZXh0T3ZlcmZsb3dXcmFwLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToidGV4dC1tYXgtd2lkdGgiLHR5cGU6cS5zaXplLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToidGV4dC1vdXRsaW5lLXdpZHRoIix0eXBlOnEuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6ImxpbmUtaGVpZ2h0Iix0eXBlOnEucG9zaXRpdmVOdW1iZXIsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9XSxtZT1be25hbWU6InRleHQtdmFsaWduIix0eXBlOnEudmFsaWduLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToidGV4dC1oYWxpZ24iLHR5cGU6cS5oYWxpZ24sdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJjb2xvciIsdHlwZTpxLmNvbG9yfSx7bmFtZToidGV4dC1vdXRsaW5lLWNvbG9yIix0eXBlOnEuY29sb3J9LHtuYW1lOiJ0ZXh0LW91dGxpbmUtb3BhY2l0eSIsdHlwZTpxLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJ0ZXh0LWJhY2tncm91bmQtY29sb3IiLHR5cGU6cS5jb2xvcn0se25hbWU6InRleHQtYmFja2dyb3VuZC1vcGFjaXR5Iix0eXBlOnEuemVyb09uZU51bWJlcn0se25hbWU6InRleHQtYmFja2dyb3VuZC1wYWRkaW5nIix0eXBlOnEuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6InRleHQtYm9yZGVyLW9wYWNpdHkiLHR5cGU6cS56ZXJvT25lTnVtYmVyfSx7bmFtZToidGV4dC1ib3JkZXItY29sb3IiLHR5cGU6cS5jb2xvcn0se25hbWU6InRleHQtYm9yZGVyLXdpZHRoIix0eXBlOnEuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6InRleHQtYm9yZGVyLXN0eWxlIix0eXBlOnEuYm9yZGVyU3R5bGUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJ0ZXh0LWJhY2tncm91bmQtc2hhcGUiLHR5cGU6cS50ZXh0QmFja2dyb3VuZFNoYXBlLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToidGV4dC1qdXN0aWZpY2F0aW9uIix0eXBlOnEuanVzdGlmaWNhdGlvbn1dLExlPVt7bmFtZToiZXZlbnRzIix0eXBlOnEuYm9vbCx0cmlnZ2Vyc1pPcmRlcjpILmFueX0se25hbWU6InRleHQtZXZlbnRzIix0eXBlOnEuYm9vbCx0cmlnZ2Vyc1pPcmRlcjpILmFueX1dLF9lPVt7bmFtZToiZGlzcGxheSIsdHlwZTpxLmRpc3BsYXksdHJpZ2dlcnNaT3JkZXI6SC5hbnksdHJpZ2dlcnNCb3VuZHM6SC5hbnksdHJpZ2dlcnNCb3VuZHNPZkNvbm5lY3RlZEVkZ2VzOiEwfSx7bmFtZToidmlzaWJpbGl0eSIsdHlwZTpxLnZpc2liaWxpdHksdHJpZ2dlcnNaT3JkZXI6SC5hbnl9LHtuYW1lOiJvcGFjaXR5Iix0eXBlOnEuemVyb09uZU51bWJlcix0cmlnZ2Vyc1pPcmRlcjpILnplcm9Ob25aZXJvfSx7bmFtZToidGV4dC1vcGFjaXR5Iix0eXBlOnEuemVyb09uZU51bWJlcn0se25hbWU6Im1pbi16b29tZWQtZm9udC1zaXplIix0eXBlOnEuc2l6ZX0se25hbWU6InotY29tcG91bmQtZGVwdGgiLHR5cGU6cS56Q29tcG91bmREZXB0aCx0cmlnZ2Vyc1pPcmRlcjpILmFueX0se25hbWU6InotaW5kZXgtY29tcGFyZSIsdHlwZTpxLnpJbmRleENvbXBhcmUsdHJpZ2dlcnNaT3JkZXI6SC5hbnl9LHtuYW1lOiJ6LWluZGV4Iix0eXBlOnEubnVtYmVyLHRyaWdnZXJzWk9yZGVyOkguYW55fV0sRWU9W3tuYW1lOiJvdmVybGF5LXBhZGRpbmciLHR5cGU6cS5zaXplLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToib3ZlcmxheS1jb2xvciIsdHlwZTpxLmNvbG9yfSx7bmFtZToib3ZlcmxheS1vcGFjaXR5Iix0eXBlOnEuemVyb09uZU51bWJlcix0cmlnZ2Vyc0JvdW5kczpILnplcm9Ob25aZXJvfSx7bmFtZToib3ZlcmxheS1zaGFwZSIsdHlwZTpxLm92ZXJsYXlTaGFwZSx0cmlnZ2Vyc0JvdW5kczpILmFueX1dLEJlPVt7bmFtZToidW5kZXJsYXktcGFkZGluZyIsdHlwZTpxLnNpemUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJ1bmRlcmxheS1jb2xvciIsdHlwZTpxLmNvbG9yfSx7bmFtZToidW5kZXJsYXktb3BhY2l0eSIsdHlwZTpxLnplcm9PbmVOdW1iZXIsdHJpZ2dlcnNCb3VuZHM6SC56ZXJvTm9uWmVyb30se25hbWU6InVuZGVybGF5LXNoYXBlIix0eXBlOnEub3ZlcmxheVNoYXBlLHRyaWdnZXJzQm91bmRzOkguYW55fV0sUmU9W3tuYW1lOiJ0cmFuc2l0aW9uLXByb3BlcnR5Iix0eXBlOnEucHJvcExpc3R9LHtuYW1lOiJ0cmFuc2l0aW9uLWR1cmF0aW9uIix0eXBlOnEudGltZX0se25hbWU6InRyYW5zaXRpb24tZGVsYXkiLHR5cGU6cS50aW1lfSx7bmFtZToidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iLHR5cGU6cS5lYXNpbmd9XSxWZT1mdW5jdGlvbihTcixOcil7cmV0dXJuIE5yLnZhbHVlPT09ImxhYmVsIj8tU3IucG9vbEluZGV4KCk6TnIucGZWYWx1ZX0sY3Q9W3tuYW1lOiJoZWlnaHQiLHR5cGU6cS5ub2RlU2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueSxoYXNoT3ZlcnJpZGU6VmV9LHtuYW1lOiJ3aWR0aCIsdHlwZTpxLm5vZGVTaXplLHRyaWdnZXJzQm91bmRzOkguYW55LGhhc2hPdmVycmlkZTpWZX0se25hbWU6InNoYXBlIix0eXBlOnEubm9kZVNoYXBlLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToic2hhcGUtcG9seWdvbi1wb2ludHMiLHR5cGU6cS5wb2x5Z29uUG9pbnRMaXN0LHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToiYmFja2dyb3VuZC1jb2xvciIsdHlwZTpxLmNvbG9yfSx7bmFtZToiYmFja2dyb3VuZC1maWxsIix0eXBlOnEuZmlsbH0se25hbWU6ImJhY2tncm91bmQtb3BhY2l0eSIsdHlwZTpxLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJiYWNrZ3JvdW5kLWJsYWNrZW4iLHR5cGU6cS5uT25lT25lTnVtYmVyfSx7bmFtZToiYmFja2dyb3VuZC1ncmFkaWVudC1zdG9wLWNvbG9ycyIsdHlwZTpxLmNvbG9yc30se25hbWU6ImJhY2tncm91bmQtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiLHR5cGU6cS5wZXJjZW50YWdlc30se25hbWU6ImJhY2tncm91bmQtZ3JhZGllbnQtZGlyZWN0aW9uIix0eXBlOnEuZ3JhZGllbnREaXJlY3Rpb259LHtuYW1lOiJwYWRkaW5nIix0eXBlOnEuc2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6InBhZGRpbmctcmVsYXRpdmUtdG8iLHR5cGU6cS5wYWRkaW5nUmVsYXRpdmVUbyx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6ImJvdW5kcy1leHBhbnNpb24iLHR5cGU6cS5ib3VuZHNFeHBhbnNpb24sdHJpZ2dlcnNCb3VuZHM6SC5hbnl9XSxzdD1be25hbWU6ImJvcmRlci1jb2xvciIsdHlwZTpxLmNvbG9yfSx7bmFtZToiYm9yZGVyLW9wYWNpdHkiLHR5cGU6cS56ZXJvT25lTnVtYmVyfSx7bmFtZToiYm9yZGVyLXdpZHRoIix0eXBlOnEuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6ImJvcmRlci1zdHlsZSIsdHlwZTpxLmJvcmRlclN0eWxlfV0sWWU9W3tuYW1lOiJvdXRsaW5lLWNvbG9yIix0eXBlOnEuY29sb3J9LHtuYW1lOiJvdXRsaW5lLW9wYWNpdHkiLHR5cGU6cS56ZXJvT25lTnVtYmVyfSx7bmFtZToib3V0bGluZS13aWR0aCIsdHlwZTpxLnNpemUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJvdXRsaW5lLXN0eWxlIix0eXBlOnEuYm9yZGVyU3R5bGV9LHtuYW1lOiJvdXRsaW5lLW9mZnNldCIsdHlwZTpxLnNpemUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9XSxtdD1be25hbWU6ImJhY2tncm91bmQtaW1hZ2UiLHR5cGU6cS51cmxzfSx7bmFtZToiYmFja2dyb3VuZC1pbWFnZS1jcm9zc29yaWdpbiIsdHlwZTpxLmJnQ3Jvc3NPcmlnaW59LHtuYW1lOiJiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHkiLHR5cGU6cS56ZXJvT25lTnVtYmVyc30se25hbWU6ImJhY2tncm91bmQtaW1hZ2UtY29udGFpbm1lbnQiLHR5cGU6cS5iZ0NvbnRhaW5tZW50fSx7bmFtZToiYmFja2dyb3VuZC1pbWFnZS1zbW9vdGhpbmciLHR5cGU6cS5ib29sc30se25hbWU6ImJhY2tncm91bmQtcG9zaXRpb24teCIsdHlwZTpxLmJnUG9zfSx7bmFtZToiYmFja2dyb3VuZC1wb3NpdGlvbi15Iix0eXBlOnEuYmdQb3N9LHtuYW1lOiJiYWNrZ3JvdW5kLXdpZHRoLXJlbGF0aXZlLXRvIix0eXBlOnEuYmdSZWxhdGl2ZVRvfSx7bmFtZToiYmFja2dyb3VuZC1oZWlnaHQtcmVsYXRpdmUtdG8iLHR5cGU6cS5iZ1JlbGF0aXZlVG99LHtuYW1lOiJiYWNrZ3JvdW5kLXJlcGVhdCIsdHlwZTpxLmJnUmVwZWF0fSx7bmFtZToiYmFja2dyb3VuZC1maXQiLHR5cGU6cS5iZ0ZpdH0se25hbWU6ImJhY2tncm91bmQtY2xpcCIsdHlwZTpxLmJnQ2xpcH0se25hbWU6ImJhY2tncm91bmQtd2lkdGgiLHR5cGU6cS5iZ1dIfSx7bmFtZToiYmFja2dyb3VuZC1oZWlnaHQiLHR5cGU6cS5iZ1dIfSx7bmFtZToiYmFja2dyb3VuZC1vZmZzZXQteCIsdHlwZTpxLmJnUG9zfSx7bmFtZToiYmFja2dyb3VuZC1vZmZzZXQteSIsdHlwZTpxLmJnUG9zfV0sSmU9W3tuYW1lOiJwb3NpdGlvbiIsdHlwZTpxLnBvc2l0aW9uLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToiY29tcG91bmQtc2l6aW5nLXdydC1sYWJlbHMiLHR5cGU6cS5jb21wb3VuZEluY2x1ZGVMYWJlbHMsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJtaW4td2lkdGgiLHR5cGU6cS5zaXplLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToibWluLXdpZHRoLWJpYXMtbGVmdCIsdHlwZTpxLnNpemVNYXliZVBlcmNlbnQsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJtaW4td2lkdGgtYmlhcy1yaWdodCIsdHlwZTpxLnNpemVNYXliZVBlcmNlbnQsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJtaW4taGVpZ2h0Iix0eXBlOnEuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6Im1pbi1oZWlnaHQtYmlhcy10b3AiLHR5cGU6cS5zaXplTWF5YmVQZXJjZW50LHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToibWluLWhlaWdodC1iaWFzLWJvdHRvbSIsdHlwZTpxLnNpemVNYXliZVBlcmNlbnQsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9XSxMdD1be25hbWU6ImxpbmUtc3R5bGUiLHR5cGU6cS5saW5lU3R5bGV9LHtuYW1lOiJsaW5lLWNvbG9yIix0eXBlOnEuY29sb3J9LHtuYW1lOiJsaW5lLWZpbGwiLHR5cGU6cS5maWxsfSx7bmFtZToibGluZS1jYXAiLHR5cGU6cS5saW5lQ2FwfSx7bmFtZToibGluZS1vcGFjaXR5Iix0eXBlOnEuemVyb09uZU51bWJlcn0se25hbWU6ImxpbmUtZGFzaC1wYXR0ZXJuIix0eXBlOnEubnVtYmVyc30se25hbWU6ImxpbmUtZGFzaC1vZmZzZXQiLHR5cGU6cS5udW1iZXJ9LHtuYW1lOiJsaW5lLWdyYWRpZW50LXN0b3AtY29sb3JzIix0eXBlOnEuY29sb3JzfSx7bmFtZToibGluZS1ncmFkaWVudC1zdG9wLXBvc2l0aW9ucyIsdHlwZTpxLnBlcmNlbnRhZ2VzfSx7bmFtZToiY3VydmUtc3R5bGUiLHR5cGU6cS5jdXJ2ZVN0eWxlLHRyaWdnZXJzQm91bmRzOkguYW55LHRyaWdnZXJzQm91bmRzT2ZQYXJhbGxlbEJlemllcnM6ITB9LHtuYW1lOiJoYXlzdGFjay1yYWRpdXMiLHR5cGU6cS56ZXJvT25lTnVtYmVyLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToic291cmNlLWVuZHBvaW50Iix0eXBlOnEuZWRnZUVuZHBvaW50LHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToidGFyZ2V0LWVuZHBvaW50Iix0eXBlOnEuZWRnZUVuZHBvaW50LHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToiY29udHJvbC1wb2ludC1zdGVwLXNpemUiLHR5cGU6cS5zaXplLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToiY29udHJvbC1wb2ludC1kaXN0YW5jZXMiLHR5cGU6cS5iaWRpcmVjdGlvbmFsU2l6ZXMsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJjb250cm9sLXBvaW50LXdlaWdodHMiLHR5cGU6cS5udW1iZXJzLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToic2VnbWVudC1kaXN0YW5jZXMiLHR5cGU6cS5iaWRpcmVjdGlvbmFsU2l6ZXMsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJzZWdtZW50LXdlaWdodHMiLHR5cGU6cS5udW1iZXJzLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToidGF4aS10dXJuIix0eXBlOnEuYmlkaXJlY3Rpb25hbFNpemVNYXliZVBlcmNlbnQsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJ0YXhpLXR1cm4tbWluLWRpc3RhbmNlIix0eXBlOnEuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6InRheGktZGlyZWN0aW9uIix0eXBlOnEuYXhpc0RpcmVjdGlvbix0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6ImVkZ2UtZGlzdGFuY2VzIix0eXBlOnEuZWRnZURpc3RhbmNlcyx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6ImFycm93LXNjYWxlIix0eXBlOnEucG9zaXRpdmVOdW1iZXIsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJsb29wLWRpcmVjdGlvbiIsdHlwZTpxLmFuZ2xlLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToibG9vcC1zd2VlcCIsdHlwZTpxLmFuZ2xlLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToic291cmNlLWRpc3RhbmNlLWZyb20tbm9kZSIsdHlwZTpxLnNpemUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJ0YXJnZXQtZGlzdGFuY2UtZnJvbS1ub2RlIix0eXBlOnEuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueX1dLE10PVt7bmFtZToiZ2hvc3QiLHR5cGU6cS5ib29sLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToiZ2hvc3Qtb2Zmc2V0LXgiLHR5cGU6cS5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczpILmFueX0se25hbWU6Imdob3N0LW9mZnNldC15Iix0eXBlOnEuYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6SC5hbnl9LHtuYW1lOiJnaG9zdC1vcGFjaXR5Iix0eXBlOnEuemVyb09uZU51bWJlcn1dLHV0PVt7bmFtZToic2VsZWN0aW9uLWJveC1jb2xvciIsdHlwZTpxLmNvbG9yfSx7bmFtZToic2VsZWN0aW9uLWJveC1vcGFjaXR5Iix0eXBlOnEuemVyb09uZU51bWJlcn0se25hbWU6InNlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yIix0eXBlOnEuY29sb3J9LHtuYW1lOiJzZWxlY3Rpb24tYm94LWJvcmRlci13aWR0aCIsdHlwZTpxLnNpemV9LHtuYW1lOiJhY3RpdmUtYmctY29sb3IiLHR5cGU6cS5jb2xvcn0se25hbWU6ImFjdGl2ZS1iZy1vcGFjaXR5Iix0eXBlOnEuemVyb09uZU51bWJlcn0se25hbWU6ImFjdGl2ZS1iZy1zaXplIix0eXBlOnEuc2l6ZX0se25hbWU6Im91dHNpZGUtdGV4dHVyZS1iZy1jb2xvciIsdHlwZTpxLmNvbG9yfSx7bmFtZToib3V0c2lkZS10ZXh0dXJlLWJnLW9wYWNpdHkiLHR5cGU6cS56ZXJvT25lTnVtYmVyfV0sV3Q9W107VTAucGllQmFja2dyb3VuZE49MTYsV3QucHVzaCh7bmFtZToicGllLXNpemUiLHR5cGU6cS5zaXplTWF5YmVQZXJjZW50fSk7Zm9yKHZhciBUdD0xO1R0PD1VMC5waWVCYWNrZ3JvdW5kTjtUdCsrKVd0LnB1c2goe25hbWU6InBpZS0iK1R0KyItYmFja2dyb3VuZC1jb2xvciIsdHlwZTpxLmNvbG9yfSksV3QucHVzaCh7bmFtZToicGllLSIrVHQrIi1iYWNrZ3JvdW5kLXNpemUiLHR5cGU6cS5wZXJjZW50fSksV3QucHVzaCh7bmFtZToicGllLSIrVHQrIi1iYWNrZ3JvdW5kLW9wYWNpdHkiLHR5cGU6cS56ZXJvT25lTnVtYmVyfSk7dmFyIF9uPVtdLGhuPVUwLmFycm93UHJlZml4ZXM9WyJzb3VyY2UiLCJtaWQtc291cmNlIiwidGFyZ2V0IiwibWlkLXRhcmdldCJdO1t7bmFtZToiYXJyb3ctc2hhcGUiLHR5cGU6cS5hcnJvd1NoYXBlLHRyaWdnZXJzQm91bmRzOkguYW55fSx7bmFtZToiYXJyb3ctY29sb3IiLHR5cGU6cS5jb2xvcn0se25hbWU6ImFycm93LWZpbGwiLHR5cGU6cS5hcnJvd0ZpbGx9LHtuYW1lOiJhcnJvdy13aWR0aCIsdHlwZTpxLmFycm93V2lkdGh9XS5mb3JFYWNoKGZ1bmN0aW9uKGJyKXtobi5mb3JFYWNoKGZ1bmN0aW9uKFNyKXt2YXIgTnI9U3IrIi0iK2JyLm5hbWUsU2k9YnIudHlwZSx5cz1ici50cmlnZ2Vyc0JvdW5kcztfbi5wdXNoKHtuYW1lOk5yLHR5cGU6U2ksdHJpZ2dlcnNCb3VuZHM6eXN9KX0pfSx7fSk7dmFyIFl0PVUwLnByb3BlcnRpZXM9W10uY29uY2F0KExlLFJlLF9lLEVlLEJlLE10LG1lLHZlLFksWixjZSxjdCxzdCxZZSxtdCxXdCxKZSxMdCxfbix1dCksRG49VTAucHJvcGVydHlHcm91cHM9e2JlaGF2aW9yOkxlLHRyYW5zaXRpb246UmUsdmlzaWJpbGl0eTpfZSxvdmVybGF5OkVlLHVuZGVybGF5OkJlLGdob3N0Ok10LGNvbW1vbkxhYmVsOm1lLGxhYmVsRGltZW5zaW9uczp2ZSxtYWluTGFiZWw6WSxzb3VyY2VMYWJlbDpaLHRhcmdldExhYmVsOmNlLG5vZGVCb2R5OmN0LG5vZGVCb3JkZXI6c3Qsbm9kZU91dGxpbmU6WWUsYmFja2dyb3VuZEltYWdlOm10LHBpZTpXdCxjb21wb3VuZDpKZSxlZGdlTGluZTpMdCxlZGdlQXJyb3c6X24sY29yZTp1dH0saXI9VTAucHJvcGVydHlHcm91cE5hbWVzPXt9LHZyPVUwLnByb3BlcnR5R3JvdXBLZXlzPU9iamVjdC5rZXlzKERuKTt2ci5mb3JFYWNoKGZ1bmN0aW9uKGJyKXtpclticl09RG5bYnJdLm1hcChmdW5jdGlvbihTcil7cmV0dXJuIFNyLm5hbWV9KSxEblticl0uZm9yRWFjaChmdW5jdGlvbihTcil7cmV0dXJuIFNyLmdyb3VwS2V5PWJyfSl9KTt2YXIgTm49VTAuYWxpYXNlcz1be25hbWU6ImNvbnRlbnQiLHBvaW50c1RvOiJsYWJlbCJ9LHtuYW1lOiJjb250cm9sLXBvaW50LWRpc3RhbmNlIixwb2ludHNUbzoiY29udHJvbC1wb2ludC1kaXN0YW5jZXMifSx7bmFtZToiY29udHJvbC1wb2ludC13ZWlnaHQiLHBvaW50c1RvOiJjb250cm9sLXBvaW50LXdlaWdodHMifSx7bmFtZToiZWRnZS10ZXh0LXJvdGF0aW9uIixwb2ludHNUbzoidGV4dC1yb3RhdGlvbiJ9LHtuYW1lOiJwYWRkaW5nLWxlZnQiLHBvaW50c1RvOiJwYWRkaW5nIn0se25hbWU6InBhZGRpbmctcmlnaHQiLHBvaW50c1RvOiJwYWRkaW5nIn0se25hbWU6InBhZGRpbmctdG9wIixwb2ludHNUbzoicGFkZGluZyJ9LHtuYW1lOiJwYWRkaW5nLWJvdHRvbSIscG9pbnRzVG86InBhZGRpbmcifV07VTAucHJvcGVydHlOYW1lcz1ZdC5tYXAoZnVuY3Rpb24oYnIpe3JldHVybiBici5uYW1lfSk7Zm9yKHZhciBwcj0wO3ByPFl0Lmxlbmd0aDtwcisrKXt2YXIgRXI9WXRbcHJdO1l0W0VyLm5hbWVdPUVyfWZvcih2YXIgTXI9MDtNcjxObi5sZW5ndGg7TXIrKyl7dmFyIENyPU5uW01yXSxPcj1ZdFtDci5wb2ludHNUb10sV249e25hbWU6Q3IubmFtZSxhbGlhczohMCxwb2ludHNUbzpPcn07WXQucHVzaChXbiksWXRbQ3IubmFtZV09V259fSkoKSxVMC5nZXREZWZhdWx0UHJvcGVydHk9ZnVuY3Rpb24oeCl7cmV0dXJuIHRoaXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoKVt4XX0sVTAuZ2V0RGVmYXVsdFByb3BlcnRpZXM9ZnVuY3Rpb24oKXt2YXIgeD10aGlzLl9wcml2YXRlO2lmKHguZGVmYXVsdFByb3BlcnRpZXMhPW51bGwpcmV0dXJuIHguZGVmYXVsdFByb3BlcnRpZXM7Zm9yKHZhciBtPXl0KHsic2VsZWN0aW9uLWJveC1jb2xvciI6IiNkZGQiLCJzZWxlY3Rpb24tYm94LW9wYWNpdHkiOi42NSwic2VsZWN0aW9uLWJveC1ib3JkZXItY29sb3IiOiIjYWFhIiwic2VsZWN0aW9uLWJveC1ib3JkZXItd2lkdGgiOjEsImFjdGl2ZS1iZy1jb2xvciI6ImJsYWNrIiwiYWN0aXZlLWJnLW9wYWNpdHkiOi4xNSwiYWN0aXZlLWJnLXNpemUiOjMwLCJvdXRzaWRlLXRleHR1cmUtYmctY29sb3IiOiIjMDAwIiwib3V0c2lkZS10ZXh0dXJlLWJnLW9wYWNpdHkiOi4xMjUsZXZlbnRzOiJ5ZXMiLCJ0ZXh0LWV2ZW50cyI6Im5vIiwidGV4dC12YWxpZ24iOiJ0b3AiLCJ0ZXh0LWhhbGlnbiI6ImNlbnRlciIsInRleHQtanVzdGlmaWNhdGlvbiI6ImF1dG8iLCJsaW5lLWhlaWdodCI6MSxjb2xvcjoiIzAwMCIsInRleHQtb3V0bGluZS1jb2xvciI6IiMwMDAiLCJ0ZXh0LW91dGxpbmUtd2lkdGgiOjAsInRleHQtb3V0bGluZS1vcGFjaXR5IjoxLCJ0ZXh0LW9wYWNpdHkiOjEsInRleHQtZGVjb3JhdGlvbiI6Im5vbmUiLCJ0ZXh0LXRyYW5zZm9ybSI6Im5vbmUiLCJ0ZXh0LXdyYXAiOiJub25lIiwidGV4dC1vdmVyZmxvdy13cmFwIjoid2hpdGVzcGFjZSIsInRleHQtbWF4LXdpZHRoIjo5OTk5LCJ0ZXh0LWJhY2tncm91bmQtY29sb3IiOiIjMDAwIiwidGV4dC1iYWNrZ3JvdW5kLW9wYWNpdHkiOjAsInRleHQtYmFja2dyb3VuZC1zaGFwZSI6InJlY3RhbmdsZSIsInRleHQtYmFja2dyb3VuZC1wYWRkaW5nIjowLCJ0ZXh0LWJvcmRlci1vcGFjaXR5IjowLCJ0ZXh0LWJvcmRlci13aWR0aCI6MCwidGV4dC1ib3JkZXItc3R5bGUiOiJzb2xpZCIsInRleHQtYm9yZGVyLWNvbG9yIjoiIzAwMCIsImZvbnQtZmFtaWx5IjoiSGVsdmV0aWNhIE5ldWUsIEhlbHZldGljYSwgc2Fucy1zZXJpZiIsImZvbnQtc3R5bGUiOiJub3JtYWwiLCJmb250LXdlaWdodCI6Im5vcm1hbCIsImZvbnQtc2l6ZSI6MTYsIm1pbi16b29tZWQtZm9udC1zaXplIjowLCJ0ZXh0LXJvdGF0aW9uIjoibm9uZSIsInNvdXJjZS10ZXh0LXJvdGF0aW9uIjoibm9uZSIsInRhcmdldC10ZXh0LXJvdGF0aW9uIjoibm9uZSIsdmlzaWJpbGl0eToidmlzaWJsZSIsZGlzcGxheToiZWxlbWVudCIsb3BhY2l0eToxLCJ6LWNvbXBvdW5kLWRlcHRoIjoiYXV0byIsInotaW5kZXgtY29tcGFyZSI6ImF1dG8iLCJ6LWluZGV4IjowLGxhYmVsOiIiLCJ0ZXh0LW1hcmdpbi14IjowLCJ0ZXh0LW1hcmdpbi15IjowLCJzb3VyY2UtbGFiZWwiOiIiLCJzb3VyY2UtdGV4dC1vZmZzZXQiOjAsInNvdXJjZS10ZXh0LW1hcmdpbi14IjowLCJzb3VyY2UtdGV4dC1tYXJnaW4teSI6MCwidGFyZ2V0LWxhYmVsIjoiIiwidGFyZ2V0LXRleHQtb2Zmc2V0IjowLCJ0YXJnZXQtdGV4dC1tYXJnaW4teCI6MCwidGFyZ2V0LXRleHQtbWFyZ2luLXkiOjAsIm92ZXJsYXktb3BhY2l0eSI6MCwib3ZlcmxheS1jb2xvciI6IiMwMDAiLCJvdmVybGF5LXBhZGRpbmciOjEwLCJvdmVybGF5LXNoYXBlIjoicm91bmQtcmVjdGFuZ2xlIiwidW5kZXJsYXktb3BhY2l0eSI6MCwidW5kZXJsYXktY29sb3IiOiIjMDAwIiwidW5kZXJsYXktcGFkZGluZyI6MTAsInVuZGVybGF5LXNoYXBlIjoicm91bmQtcmVjdGFuZ2xlIiwidHJhbnNpdGlvbi1wcm9wZXJ0eSI6Im5vbmUiLCJ0cmFuc2l0aW9uLWR1cmF0aW9uIjowLCJ0cmFuc2l0aW9uLWRlbGF5IjowLCJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiI6ImxpbmVhciIsImJhY2tncm91bmQtYmxhY2tlbiI6MCwiYmFja2dyb3VuZC1jb2xvciI6IiM5OTkiLCJiYWNrZ3JvdW5kLWZpbGwiOiJzb2xpZCIsImJhY2tncm91bmQtb3BhY2l0eSI6MSwiYmFja2dyb3VuZC1pbWFnZSI6Im5vbmUiLCJiYWNrZ3JvdW5kLWltYWdlLWNyb3Nzb3JpZ2luIjoiYW5vbnltb3VzIiwiYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5IjoxLCJiYWNrZ3JvdW5kLWltYWdlLWNvbnRhaW5tZW50IjoiaW5zaWRlIiwiYmFja2dyb3VuZC1pbWFnZS1zbW9vdGhpbmciOiJ5ZXMiLCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXgiOiI1MCUiLCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXkiOiI1MCUiLCJiYWNrZ3JvdW5kLW9mZnNldC14IjowLCJiYWNrZ3JvdW5kLW9mZnNldC15IjowLCJiYWNrZ3JvdW5kLXdpZHRoLXJlbGF0aXZlLXRvIjoiaW5jbHVkZS1wYWRkaW5nIiwiYmFja2dyb3VuZC1oZWlnaHQtcmVsYXRpdmUtdG8iOiJpbmNsdWRlLXBhZGRpbmciLCJiYWNrZ3JvdW5kLXJlcGVhdCI6Im5vLXJlcGVhdCIsImJhY2tncm91bmQtZml0Ijoibm9uZSIsImJhY2tncm91bmQtY2xpcCI6Im5vZGUiLCJiYWNrZ3JvdW5kLXdpZHRoIjoiYXV0byIsImJhY2tncm91bmQtaGVpZ2h0IjoiYXV0byIsImJvcmRlci1jb2xvciI6IiMwMDAiLCJib3JkZXItb3BhY2l0eSI6MSwiYm9yZGVyLXdpZHRoIjowLCJib3JkZXItc3R5bGUiOiJzb2xpZCIsIm91dGxpbmUtY29sb3IiOiIjOTk5Iiwib3V0bGluZS1vcGFjaXR5IjoxLCJvdXRsaW5lLXdpZHRoIjowLCJvdXRsaW5lLW9mZnNldCI6MCwib3V0bGluZS1zdHlsZSI6InNvbGlkIixoZWlnaHQ6MzAsd2lkdGg6MzAsc2hhcGU6ImVsbGlwc2UiLCJzaGFwZS1wb2x5Z29uLXBvaW50cyI6Ii0xLCAtMSwgICAxLCAtMSwgICAxLCAxLCAgIC0xLCAxIiwiYm91bmRzLWV4cGFuc2lvbiI6MCwiYmFja2dyb3VuZC1ncmFkaWVudC1kaXJlY3Rpb24iOiJ0by1ib3R0b20iLCJiYWNrZ3JvdW5kLWdyYWRpZW50LXN0b3AtY29sb3JzIjoiIzk5OSIsImJhY2tncm91bmQtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiOiIwJSIsZ2hvc3Q6Im5vIiwiZ2hvc3Qtb2Zmc2V0LXkiOjAsImdob3N0LW9mZnNldC14IjowLCJnaG9zdC1vcGFjaXR5IjowLHBhZGRpbmc6MCwicGFkZGluZy1yZWxhdGl2ZS10byI6IndpZHRoIixwb3NpdGlvbjoib3JpZ2luIiwiY29tcG91bmQtc2l6aW5nLXdydC1sYWJlbHMiOiJpbmNsdWRlIiwibWluLXdpZHRoIjowLCJtaW4td2lkdGgtYmlhcy1sZWZ0IjowLCJtaW4td2lkdGgtYmlhcy1yaWdodCI6MCwibWluLWhlaWdodCI6MCwibWluLWhlaWdodC1iaWFzLXRvcCI6MCwibWluLWhlaWdodC1iaWFzLWJvdHRvbSI6MH0seyJwaWUtc2l6ZSI6IjEwMCUifSxbe25hbWU6InBpZS17e2l9fS1iYWNrZ3JvdW5kLWNvbG9yIix2YWx1ZToiYmxhY2sifSx7bmFtZToicGllLXt7aX19LWJhY2tncm91bmQtc2l6ZSIsdmFsdWU6IjAlIn0se25hbWU6InBpZS17e2l9fS1iYWNrZ3JvdW5kLW9wYWNpdHkiLHZhbHVlOjF9XS5yZWR1Y2UoZnVuY3Rpb24oSCxxKXtmb3IodmFyIFk9MTtZPD1VMC5waWVCYWNrZ3JvdW5kTjtZKyspe3ZhciBaPXEubmFtZS5yZXBsYWNlKCJ7e2l9fSIsWSksY2U9cS52YWx1ZTtIW1pdPWNlfXJldHVybiBIfSx7fSkseyJsaW5lLXN0eWxlIjoic29saWQiLCJsaW5lLWNvbG9yIjoiIzk5OSIsImxpbmUtZmlsbCI6InNvbGlkIiwibGluZS1jYXAiOiJidXR0IiwibGluZS1vcGFjaXR5IjoxLCJsaW5lLWdyYWRpZW50LXN0b3AtY29sb3JzIjoiIzk5OSIsImxpbmUtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiOiIwJSIsImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIjo0MCwiY29udHJvbC1wb2ludC13ZWlnaHRzIjouNSwic2VnbWVudC13ZWlnaHRzIjouNSwic2VnbWVudC1kaXN0YW5jZXMiOjIwLCJ0YXhpLXR1cm4iOiI1MCUiLCJ0YXhpLXR1cm4tbWluLWRpc3RhbmNlIjoxMCwidGF4aS1kaXJlY3Rpb24iOiJhdXRvIiwiZWRnZS1kaXN0YW5jZXMiOiJpbnRlcnNlY3Rpb24iLCJjdXJ2ZS1zdHlsZSI6ImhheXN0YWNrIiwiaGF5c3RhY2stcmFkaXVzIjowLCJhcnJvdy1zY2FsZSI6MSwibG9vcC1kaXJlY3Rpb24iOiItNDVkZWciLCJsb29wLXN3ZWVwIjoiLTkwZGVnIiwic291cmNlLWRpc3RhbmNlLWZyb20tbm9kZSI6MCwidGFyZ2V0LWRpc3RhbmNlLWZyb20tbm9kZSI6MCwic291cmNlLWVuZHBvaW50Ijoib3V0c2lkZS10by1ub2RlIiwidGFyZ2V0LWVuZHBvaW50Ijoib3V0c2lkZS10by1ub2RlIiwibGluZS1kYXNoLXBhdHRlcm4iOls2LDNdLCJsaW5lLWRhc2gtb2Zmc2V0IjowfSxbe25hbWU6ImFycm93LXNoYXBlIix2YWx1ZToibm9uZSJ9LHtuYW1lOiJhcnJvdy1jb2xvciIsdmFsdWU6IiM5OTkifSx7bmFtZToiYXJyb3ctZmlsbCIsdmFsdWU6ImZpbGxlZCJ9LHtuYW1lOiJhcnJvdy13aWR0aCIsdmFsdWU6MX1dLnJlZHVjZShmdW5jdGlvbihILHEpe3JldHVybiBVMC5hcnJvd1ByZWZpeGVzLmZvckVhY2goZnVuY3Rpb24oWSl7dmFyIFo9WSsiLSIrcS5uYW1lLGNlPXEudmFsdWU7SFtaXT1jZX0pLEh9LHt9KSksaz17fSxTPTA7Uzx0aGlzLnByb3BlcnRpZXMubGVuZ3RoO1MrKyl7dmFyIE09dGhpcy5wcm9wZXJ0aWVzW1NdO2lmKCFNLnBvaW50c1RvKXt2YXIgTz1NLm5hbWUsTj1tW09dLCQ9dGhpcy5wYXJzZShPLE4pO2tbT109JH19cmV0dXJuIHguZGVmYXVsdFByb3BlcnRpZXM9ayx4LmRlZmF1bHRQcm9wZXJ0aWVzfSxVMC5hZGREZWZhdWx0U3R5bGVzaGVldD1mdW5jdGlvbigpe3RoaXMuc2VsZWN0b3IoIjpwYXJlbnQiKS5jc3Moe3NoYXBlOiJyZWN0YW5nbGUiLHBhZGRpbmc6MTAsImJhY2tncm91bmQtY29sb3IiOiIjZWVlIiwiYm9yZGVyLWNvbG9yIjoiI2NjYyIsImJvcmRlci13aWR0aCI6MX0pLnNlbGVjdG9yKCJlZGdlIikuY3NzKHt3aWR0aDozfSkuc2VsZWN0b3IoIjpsb29wIikuY3NzKHsiY3VydmUtc3R5bGUiOiJiZXppZXIifSkuc2VsZWN0b3IoImVkZ2U6Y29tcG91bmQiKS5jc3MoeyJjdXJ2ZS1zdHlsZSI6ImJlemllciIsInNvdXJjZS1lbmRwb2ludCI6Im91dHNpZGUtdG8tbGluZSIsInRhcmdldC1lbmRwb2ludCI6Im91dHNpZGUtdG8tbGluZSJ9KS5zZWxlY3RvcigiOnNlbGVjdGVkIikuY3NzKHsiYmFja2dyb3VuZC1jb2xvciI6IiMwMTY5RDkiLCJsaW5lLWNvbG9yIjoiIzAxNjlEOSIsInNvdXJjZS1hcnJvdy1jb2xvciI6IiMwMTY5RDkiLCJ0YXJnZXQtYXJyb3ctY29sb3IiOiIjMDE2OUQ5IiwibWlkLXNvdXJjZS1hcnJvdy1jb2xvciI6IiMwMTY5RDkiLCJtaWQtdGFyZ2V0LWFycm93LWNvbG9yIjoiIzAxNjlEOSJ9KS5zZWxlY3RvcigiOnBhcmVudDpzZWxlY3RlZCIpLmNzcyh7ImJhY2tncm91bmQtY29sb3IiOiIjQ0NFMUY5IiwiYm9yZGVyLWNvbG9yIjoiI2FlYzhlNSJ9KS5zZWxlY3RvcigiOmFjdGl2ZSIpLmNzcyh7Im92ZXJsYXktY29sb3IiOiJibGFjayIsIm92ZXJsYXktcGFkZGluZyI6MTAsIm92ZXJsYXktb3BhY2l0eSI6LjI1fSksdGhpcy5kZWZhdWx0TGVuZ3RoPXRoaXMubGVuZ3RofTt2YXIgelM9e307elMucGFyc2U9ZnVuY3Rpb24oeCxtLGssUyl7dmFyIE09dGhpcztpZihhZShtKSlyZXR1cm4gTS5wYXJzZUltcGxXYXJuKHgsbSxrLFMpO3ZhciBPPVM9PT0ibWFwcGluZyJ8fFM9PT0hMHx8Uz09PSExfHxTPT1udWxsPyJkb250Y2FyZSI6UyxOPWs/InQiOiJmIiwkPSIiK20sSD1sZCh4LCQsTixPKSxxPU0ucHJvcENhY2hlPU0ucHJvcENhY2hlfHxbXSxZO3JldHVybihZPXFbSF0pfHwoWT1xW0hdPU0ucGFyc2VJbXBsV2Fybih4LG0sayxTKSksKGt8fFM9PT0ibWFwcGluZyIpJiYoWT12bShZKSxZJiYoWS52YWx1ZT12bShZLnZhbHVlKSkpLFl9LHpTLnBhcnNlSW1wbFdhcm49ZnVuY3Rpb24oeCxtLGssUyl7dmFyIE09dGhpcy5wYXJzZUltcGwoeCxtLGssUyk7cmV0dXJuIU0mJm0hPW51bGwmJmh1KCJUaGUgc3R5bGUgcHJvcGVydHkgYCIuY29uY2F0KHgsIjogIikuY29uY2F0KG0sImAgaXMgaW52YWxpZCIpKSxNJiYoTS5uYW1lPT09IndpZHRoInx8TS5uYW1lPT09ImhlaWdodCIpJiZtPT09ImxhYmVsIiYmaHUoIlRoZSBzdHlsZSB2YWx1ZSBvZiBgbGFiZWxgIGlzIGRlcHJlY2F0ZWQgZm9yIGAiK00ubmFtZSsiYCIpLE19LHpTLnBhcnNlSW1wbD1mdW5jdGlvbih4LG0sayxTKXt2YXIgTT10aGlzO3g9Z24oeCk7dmFyIE89TS5wcm9wZXJ0aWVzW3hdLE49bSwkPU0udHlwZXM7aWYoIU98fG09PT12b2lkIDApcmV0dXJuIG51bGw7Ty5hbGlhcyYmKE89Ty5wb2ludHNUbyx4PU8ubmFtZSk7dmFyIEg9YmUobSk7SCYmKG09bS50cmltKCkpO3ZhciBxPU8udHlwZTtpZighcSlyZXR1cm4gbnVsbDtpZihrJiYobT09PSIifHxtPT09bnVsbCkpcmV0dXJue25hbWU6eCx2YWx1ZTptLGJ5cGFzczohMCxkZWxldGVCeXBhc3M6ITB9O2lmKGFlKG0pKXJldHVybntuYW1lOngsdmFsdWU6bSxzdHJWYWx1ZToiZm4iLG1hcHBlZDokLmZuLGJ5cGFzczprfTt2YXIgWSxaO2lmKCEoIUh8fFN8fG0ubGVuZ3RoPDd8fG1bMV0hPT0iYSIpKXtpZihtLmxlbmd0aD49NyYmbVswXT09PSJkIiYmKFk9bmV3IFJlZ0V4cCgkLmRhdGEucmVnZXgpLmV4ZWMobSkpKXtpZihrKXJldHVybiExO3ZhciBjZT0kLmRhdGE7cmV0dXJue25hbWU6eCx2YWx1ZTpZLHN0clZhbHVlOiIiK20sbWFwcGVkOmNlLGZpZWxkOllbMV0sYnlwYXNzOmt9fWVsc2UgaWYobS5sZW5ndGg+PTEwJiZtWzBdPT09Im0iJiYoWj1uZXcgUmVnRXhwKCQubWFwRGF0YS5yZWdleCkuZXhlYyhtKSkpe2lmKGt8fHEubXVsdGlwbGUpcmV0dXJuITE7dmFyIHZlPSQubWFwRGF0YTtpZighKHEuY29sb3J8fHEubnVtYmVyKSlyZXR1cm4hMTt2YXIgbWU9dGhpcy5wYXJzZSh4LFpbNF0pO2lmKCFtZXx8bWUubWFwcGVkKXJldHVybiExO3ZhciBMZT10aGlzLnBhcnNlKHgsWls1XSk7aWYoIUxlfHxMZS5tYXBwZWQpcmV0dXJuITE7aWYobWUucGZWYWx1ZT09PUxlLnBmVmFsdWV8fG1lLnN0clZhbHVlPT09TGUuc3RyVmFsdWUpcmV0dXJuIGh1KCJgIit4KyI6ICIrbSsiYCBpcyBub3QgYSB2YWxpZCBtYXBwZXIgYmVjYXVzZSB0aGUgb3V0cHV0IHJhbmdlIGlzIHplcm87IGNvbnZlcnRpbmcgdG8gYCIreCsiOiAiK21lLnN0clZhbHVlKyJgIiksdGhpcy5wYXJzZSh4LG1lLnN0clZhbHVlKTtpZihxLmNvbG9yKXt2YXIgX2U9bWUudmFsdWUsRWU9TGUudmFsdWUsQmU9X2VbMF09PT1FZVswXSYmX2VbMV09PT1FZVsxXSYmX2VbMl09PT1FZVsyXSYmKF9lWzNdPT09RWVbM118fChfZVszXT09bnVsbHx8X2VbM109PT0xKSYmKEVlWzNdPT1udWxsfHxFZVszXT09PTEpKTtpZihCZSlyZXR1cm4hMX1yZXR1cm57bmFtZTp4LHZhbHVlOlosc3RyVmFsdWU6IiIrbSxtYXBwZWQ6dmUsZmllbGQ6WlsxXSxmaWVsZE1pbjpwYXJzZUZsb2F0KFpbMl0pLGZpZWxkTWF4OnBhcnNlRmxvYXQoWlszXSksdmFsdWVNaW46bWUudmFsdWUsdmFsdWVNYXg6TGUudmFsdWUsYnlwYXNzOmt9fX1pZihxLm11bHRpcGxlJiZTIT09Im11bHRpcGxlIil7dmFyIFJlO2lmKEg/UmU9bS5zcGxpdCgvXHMrLyk6bmUobSk/UmU9bTpSZT1bbV0scS5ldmVuTXVsdGlwbGUmJlJlLmxlbmd0aCUyIT09MClyZXR1cm4gbnVsbDtmb3IodmFyIFZlPVtdLGN0PVtdLHN0PVtdLFllPSIiLG10PSExLEplPTA7SmU8UmUubGVuZ3RoO0plKyspe3ZhciBMdD1NLnBhcnNlKHgsUmVbSmVdLGssIm11bHRpcGxlIik7bXQ9bXR8fGJlKEx0LnZhbHVlKSxWZS5wdXNoKEx0LnZhbHVlKSxzdC5wdXNoKEx0LnBmVmFsdWUhPW51bGw/THQucGZWYWx1ZTpMdC52YWx1ZSksY3QucHVzaChMdC51bml0cyksWWUrPShKZT4wPyIgIjoiIikrTHQuc3RyVmFsdWV9cmV0dXJuIHEudmFsaWRhdGUmJiFxLnZhbGlkYXRlKFZlLGN0KT9udWxsOnEuc2luZ2xlRW51bSYmbXQ/VmUubGVuZ3RoPT09MSYmYmUoVmVbMF0pP3tuYW1lOngsdmFsdWU6VmVbMF0sc3RyVmFsdWU6VmVbMF0sYnlwYXNzOmt9Om51bGw6e25hbWU6eCx2YWx1ZTpWZSxwZlZhbHVlOnN0LHN0clZhbHVlOlllLGJ5cGFzczprLHVuaXRzOmN0fX12YXIgTXQ9ZnVuY3Rpb24oKXtmb3IodmFyIFNyPTA7U3I8cS5lbnVtcy5sZW5ndGg7U3IrKyl7dmFyIE5yPXEuZW51bXNbU3JdO2lmKE5yPT09bSlyZXR1cm57bmFtZTp4LHZhbHVlOm0sc3RyVmFsdWU6IiIrbSxieXBhc3M6a319cmV0dXJuIG51bGx9O2lmKHEubnVtYmVyKXt2YXIgdXQsV3Q9InB4IjtpZihxLnVuaXRzJiYodXQ9cS51bml0cykscS5pbXBsaWNpdFVuaXRzJiYoV3Q9cS5pbXBsaWNpdFVuaXRzKSwhcS51bml0bGVzcylpZihIKXt2YXIgVHQ9InB4fGVtIisocS5hbGxvd1BlcmNlbnQ/InxcXCUiOiIiKTt1dCYmKFR0PXV0KTt2YXIgX249bS5tYXRjaCgiXigiK2xuKyIpKCIrVHQrIik/JCIpO19uJiYobT1fblsxXSx1dD1fblsyXXx8V3QpfWVsc2UoIXV0fHxxLmltcGxpY2l0VW5pdHMpJiYodXQ9V3QpO2lmKG09cGFyc2VGbG9hdChtKSxpc05hTihtKSYmcS5lbnVtcz09PXZvaWQgMClyZXR1cm4gbnVsbDtpZihpc05hTihtKSYmcS5lbnVtcyE9PXZvaWQgMClyZXR1cm4gbT1OLE10KCk7aWYocS5pbnRlZ2VyJiYhZ2UobSl8fHEubWluIT09dm9pZCAwJiYobTxxLm1pbnx8cS5zdHJpY3RNaW4mJm09PT1xLm1pbil8fHEubWF4IT09dm9pZCAwJiYobT5xLm1heHx8cS5zdHJpY3RNYXgmJm09PT1xLm1heCkpcmV0dXJuIG51bGw7dmFyIGhuPXtuYW1lOngsdmFsdWU6bSxzdHJWYWx1ZToiIittKyh1dHx8IiIpLHVuaXRzOnV0LGJ5cGFzczprfTtyZXR1cm4gcS51bml0bGVzc3x8dXQhPT0icHgiJiZ1dCE9PSJlbSI/aG4ucGZWYWx1ZT1tOmhuLnBmVmFsdWU9dXQ9PT0icHgifHwhdXQ/bTp0aGlzLmdldEVtU2l6ZUluUGl4ZWxzKCkqbSwodXQ9PT0ibXMifHx1dD09PSJzIikmJihobi5wZlZhbHVlPXV0PT09Im1zIj9tOjFlMyptKSwodXQ9PT0iZGVnInx8dXQ9PT0icmFkIikmJihobi5wZlZhbHVlPXV0PT09InJhZCI/bTpsWihtKSksdXQ9PT0iJSImJihobi5wZlZhbHVlPW0vMTAwKSxobn1lbHNlIGlmKHEucHJvcExpc3Qpe3ZhciBZdD1bXSxEbj0iIittO2lmKERuIT09Im5vbmUiKXtmb3IodmFyIGlyPURuLnNwbGl0KC9ccyosXHMqfFxzKy8pLHZyPTA7dnI8aXIubGVuZ3RoO3ZyKyspe3ZhciBObj1pclt2cl0udHJpbSgpO00ucHJvcGVydGllc1tObl0/WXQucHVzaChObik6aHUoImAiK05uKyJgIGlzIG5vdCBhIHZhbGlkIHByb3BlcnR5IG5hbWUiKX1pZihZdC5sZW5ndGg9PT0wKXJldHVybiBudWxsfXJldHVybntuYW1lOngsdmFsdWU6WXQsc3RyVmFsdWU6WXQubGVuZ3RoPT09MD8ibm9uZSI6WXQuam9pbigiICIpLGJ5cGFzczprfX1lbHNlIGlmKHEuY29sb3Ipe3ZhciBwcj1hbyhtKTtyZXR1cm4gcHI/e25hbWU6eCx2YWx1ZTpwcixwZlZhbHVlOnByLHN0clZhbHVlOiJyZ2IoIitwclswXSsiLCIrcHJbMV0rIiwiK3ByWzJdKyIpIixieXBhc3M6a306bnVsbH1lbHNlIGlmKHEucmVnZXh8fHEucmVnZXhlcyl7aWYocS5lbnVtcyl7dmFyIEVyPU10KCk7aWYoRXIpcmV0dXJuIEVyfWZvcih2YXIgTXI9cS5yZWdleGVzP3EucmVnZXhlczpbcS5yZWdleF0sQ3I9MDtDcjxNci5sZW5ndGg7Q3IrKyl7dmFyIE9yPW5ldyBSZWdFeHAoTXJbQ3JdKSxXbj1Pci5leGVjKG0pO2lmKFduKXJldHVybntuYW1lOngsdmFsdWU6cS5zaW5nbGVSZWdleE1hdGNoVmFsdWU/V25bMV06V24sc3RyVmFsdWU6IiIrbSxieXBhc3M6a319cmV0dXJuIG51bGx9ZWxzZSByZXR1cm4gcS5zdHJpbmc/e25hbWU6eCx2YWx1ZToiIittLHN0clZhbHVlOiIiK20sYnlwYXNzOmt9OnEuZW51bXM/TXQoKTpudWxsfTt2YXIgVDE9ZnVuY3Rpb24geChtKXtpZighKHRoaXMgaW5zdGFuY2VvZiB4KSlyZXR1cm4gbmV3IHgobSk7aWYoIVBlKG0pKXtjaCgiQSBzdHlsZSBtdXN0IGhhdmUgYSBjb3JlIHJlZmVyZW5jZSIpO3JldHVybn10aGlzLl9wcml2YXRlPXtjeTptLGNvcmVTdHlsZTp7fX0sdGhpcy5sZW5ndGg9MCx0aGlzLnJlc2V0VG9EZWZhdWx0KCl9LEMxPVQxLnByb3RvdHlwZTtDMS5pbnN0YW5jZVN0cmluZz1mdW5jdGlvbigpe3JldHVybiJzdHlsZSJ9LEMxLmNsZWFyPWZ1bmN0aW9uKCl7Zm9yKHZhciB4PXRoaXMuX3ByaXZhdGUsbT14LmN5LGs9bS5lbGVtZW50cygpLFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl0aGlzW1NdPXZvaWQgMDtyZXR1cm4gdGhpcy5sZW5ndGg9MCx4LmNvbnRleHRTdHlsZXM9e30seC5wcm9wRGlmZnM9e30sdGhpcy5jbGVhbkVsZW1lbnRzKGssITApLGsuZm9yRWFjaChmdW5jdGlvbihNKXt2YXIgTz1NWzBdLl9wcml2YXRlO08uc3R5bGVEaXJ0eT0hMCxPLmFwcGxpZWRJbml0U3R5bGU9ITF9KSx0aGlzfSxDMS5yZXNldFRvRGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsZWFyKCksdGhpcy5hZGREZWZhdWx0U3R5bGVzaGVldCgpLHRoaXN9LEMxLmNvcmU9ZnVuY3Rpb24oeCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuY29yZVN0eWxlW3hdfHx0aGlzLmdldERlZmF1bHRQcm9wZXJ0eSh4KX0sQzEuc2VsZWN0b3I9ZnVuY3Rpb24oeCl7dmFyIG09eD09PSJjb3JlIj9udWxsOm5ldyBleSh4KSxrPXRoaXMubGVuZ3RoKys7cmV0dXJuIHRoaXNba109e3NlbGVjdG9yOm0scHJvcGVydGllczpbXSxtYXBwZWRQcm9wZXJ0aWVzOltdLGluZGV4Omt9LHRoaXN9LEMxLmNzcz1mdW5jdGlvbigpe3ZhciB4PXRoaXMsbT1hcmd1bWVudHM7aWYobS5sZW5ndGg9PT0xKWZvcih2YXIgaz1tWzBdLFM9MDtTPHgucHJvcGVydGllcy5sZW5ndGg7UysrKXt2YXIgTT14LnByb3BlcnRpZXNbU10sTz1rW00ubmFtZV07Tz09PXZvaWQgMCYmKE89a1tfdChNLm5hbWUpXSksTyE9PXZvaWQgMCYmdGhpcy5jc3NSdWxlKE0ubmFtZSxPKX1lbHNlIG0ubGVuZ3RoPT09MiYmdGhpcy5jc3NSdWxlKG1bMF0sbVsxXSk7cmV0dXJuIHRoaXN9LEMxLnN0eWxlPUMxLmNzcyxDMS5jc3NSdWxlPWZ1bmN0aW9uKHgsbSl7dmFyIGs9dGhpcy5wYXJzZSh4LG0pO2lmKGspe3ZhciBTPXRoaXMubGVuZ3RoLTE7dGhpc1tTXS5wcm9wZXJ0aWVzLnB1c2goayksdGhpc1tTXS5wcm9wZXJ0aWVzW2submFtZV09ayxrLm5hbWUubWF0Y2goL3BpZS0oXGQrKS1iYWNrZ3JvdW5kLXNpemUvKSYmay52YWx1ZSYmKHRoaXMuX3ByaXZhdGUuaGFzUGllPSEwKSxrLm1hcHBlZCYmdGhpc1tTXS5tYXBwZWRQcm9wZXJ0aWVzLnB1c2goayk7dmFyIE09IXRoaXNbU10uc2VsZWN0b3I7TSYmKHRoaXMuX3ByaXZhdGUuY29yZVN0eWxlW2submFtZV09ayl9cmV0dXJuIHRoaXN9LEMxLmFwcGVuZD1mdW5jdGlvbih4KXtyZXR1cm4gamUoeCk/eC5hcHBlbmRUb1N0eWxlKHRoaXMpOm5lKHgpP3RoaXMuYXBwZW5kRnJvbUpzb24oeCk6YmUoeCkmJnRoaXMuYXBwZW5kRnJvbVN0cmluZyh4KSx0aGlzfSxUMS5mcm9tSnNvbj1mdW5jdGlvbih4LG0pe3ZhciBrPW5ldyBUMSh4KTtyZXR1cm4gay5mcm9tSnNvbihtKSxrfSxUMS5mcm9tU3RyaW5nPWZ1bmN0aW9uKHgsbSl7cmV0dXJuIG5ldyBUMSh4KS5mcm9tU3RyaW5nKG0pfSxbRTEsY2ssSUkseG0sJFMsT0ksVTAselNdLmZvckVhY2goZnVuY3Rpb24oeCl7eXQoQzEseCl9KSxUMS50eXBlcz1DMS50eXBlcyxUMS5wcm9wZXJ0aWVzPUMxLnByb3BlcnRpZXMsVDEucHJvcGVydHlHcm91cHM9QzEucHJvcGVydHlHcm91cHMsVDEucHJvcGVydHlHcm91cE5hbWVzPUMxLnByb3BlcnR5R3JvdXBOYW1lcyxUMS5wcm9wZXJ0eUdyb3VwS2V5cz1DMS5wcm9wZXJ0eUdyb3VwS2V5czt2YXIgcHJlPXtzdHlsZTpmdW5jdGlvbihtKXtpZihtKXt2YXIgaz10aGlzLnNldFN0eWxlKG0pO2sudXBkYXRlKCl9cmV0dXJuIHRoaXMuX3ByaXZhdGUuc3R5bGV9LHNldFN0eWxlOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuX3ByaXZhdGU7cmV0dXJuIGplKG0pP2suc3R5bGU9bS5nZW5lcmF0ZVN0eWxlKHRoaXMpOm5lKG0pP2suc3R5bGU9VDEuZnJvbUpzb24odGhpcyxtKTpiZShtKT9rLnN0eWxlPVQxLmZyb21TdHJpbmcodGhpcyxtKTprLnN0eWxlPVQxKHRoaXMpLGsuc3R5bGV9LHVwZGF0ZVN0eWxlOmZ1bmN0aW9uKCl7dGhpcy5tdXRhYmxlRWxlbWVudHMoKS51cGRhdGVTdHlsZSgpfX0sYnJlPSJzaW5nbGUiLHY1PXthdXRvbG9jazpmdW5jdGlvbihtKXtpZihtIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUuYXV0b2xvY2s9ISFtO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUuYXV0b2xvY2s7cmV0dXJuIHRoaXN9LGF1dG91bmdyYWJpZnk6ZnVuY3Rpb24obSl7aWYobSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLmF1dG91bmdyYWJpZnk9ISFtO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUuYXV0b3VuZ3JhYmlmeTtyZXR1cm4gdGhpc30sYXV0b3Vuc2VsZWN0aWZ5OmZ1bmN0aW9uKG0pe2lmKG0hPT12b2lkIDApdGhpcy5fcHJpdmF0ZS5hdXRvdW5zZWxlY3RpZnk9ISFtO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUuYXV0b3Vuc2VsZWN0aWZ5O3JldHVybiB0aGlzfSxzZWxlY3Rpb25UeXBlOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuX3ByaXZhdGU7aWYoay5zZWxlY3Rpb25UeXBlPT1udWxsJiYoay5zZWxlY3Rpb25UeXBlPWJyZSksbSE9PXZvaWQgMCkobT09PSJhZGRpdGl2ZSJ8fG09PT0ic2luZ2xlIikmJihrLnNlbGVjdGlvblR5cGU9bSk7ZWxzZSByZXR1cm4gay5zZWxlY3Rpb25UeXBlO3JldHVybiB0aGlzfSxwYW5uaW5nRW5hYmxlZDpmdW5jdGlvbihtKXtpZihtIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQ9ISFtO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQ7cmV0dXJuIHRoaXN9LHVzZXJQYW5uaW5nRW5hYmxlZDpmdW5jdGlvbihtKXtpZihtIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUudXNlclBhbm5pbmdFbmFibGVkPSEhbTtlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLnVzZXJQYW5uaW5nRW5hYmxlZDtyZXR1cm4gdGhpc30sem9vbWluZ0VuYWJsZWQ6ZnVuY3Rpb24obSl7aWYobSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkPSEhbTtlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkO3JldHVybiB0aGlzfSx1c2VyWm9vbWluZ0VuYWJsZWQ6ZnVuY3Rpb24obSl7aWYobSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLnVzZXJab29taW5nRW5hYmxlZD0hIW07ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS51c2VyWm9vbWluZ0VuYWJsZWQ7cmV0dXJuIHRoaXN9LGJveFNlbGVjdGlvbkVuYWJsZWQ6ZnVuY3Rpb24obSl7aWYobSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLmJveFNlbGVjdGlvbkVuYWJsZWQ9ISFtO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUuYm94U2VsZWN0aW9uRW5hYmxlZDtyZXR1cm4gdGhpc30scGFuOmZ1bmN0aW9uKCl7dmFyIG09YXJndW1lbnRzLGs9dGhpcy5fcHJpdmF0ZS5wYW4sUyxNLE8sTiwkO3N3aXRjaChtLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBrO2Nhc2UgMTppZihiZShtWzBdKSlyZXR1cm4gUz1tWzBdLGtbU107aWYoc2UobVswXSkpe2lmKCF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKXJldHVybiB0aGlzO089bVswXSxOPU8ueCwkPU8ueSxYKE4pJiYoay54PU4pLFgoJCkmJihrLnk9JCksdGhpcy5lbWl0KCJwYW4gdmlld3BvcnQiKX1icmVhaztjYXNlIDI6aWYoIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQpcmV0dXJuIHRoaXM7Uz1tWzBdLE09bVsxXSwoUz09PSJ4Inx8Uz09PSJ5IikmJlgoTSkmJihrW1NdPU0pLHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0Iik7YnJlYWt9cmV0dXJuIHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpLHRoaXN9LHBhbkJ5OmZ1bmN0aW9uKG0sayl7dmFyIFM9YXJndW1lbnRzLE09dGhpcy5fcHJpdmF0ZS5wYW4sTyxOLCQsSCxxO2lmKCF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKXJldHVybiB0aGlzO3N3aXRjaChTLmxlbmd0aCl7Y2FzZSAxOnNlKG0pJiYoJD1TWzBdLEg9JC54LHE9JC55LFgoSCkmJihNLngrPUgpLFgocSkmJihNLnkrPXEpLHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0IikpO2JyZWFrO2Nhc2UgMjpPPW0sTj1rLChPPT09IngifHxPPT09InkiKSYmWChOKSYmKE1bT10rPU4pLHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0Iik7YnJlYWt9cmV0dXJuIHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpLHRoaXN9LGZpdDpmdW5jdGlvbihtLGspe3ZhciBTPXRoaXMuZ2V0Rml0Vmlld3BvcnQobSxrKTtpZihTKXt2YXIgTT10aGlzLl9wcml2YXRlO00uem9vbT1TLnpvb20sTS5wYW49Uy5wYW4sdGhpcy5lbWl0KCJwYW4gem9vbSB2aWV3cG9ydCIpLHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpfXJldHVybiB0aGlzfSxnZXRGaXRWaWV3cG9ydDpmdW5jdGlvbihtLGspe2lmKFgobSkmJms9PT12b2lkIDAmJihrPW0sbT12b2lkIDApLCEoIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWR8fCF0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkKSl7dmFyIFM7aWYoYmUobSkpe3ZhciBNPW07bT10aGlzLiQoTSl9ZWxzZSBpZihrZShtKSl7dmFyIE89bTtTPXt4MTpPLngxLHkxOk8ueTEseDI6Ty54Mix5MjpPLnkyfSxTLnc9Uy54Mi1TLngxLFMuaD1TLnkyLVMueTF9ZWxzZSB4ZShtKXx8KG09dGhpcy5tdXRhYmxlRWxlbWVudHMoKSk7aWYoISh4ZShtKSYmbS5lbXB0eSgpKSl7Uz1TfHxtLmJvdW5kaW5nQm94KCk7dmFyIE49dGhpcy53aWR0aCgpLCQ9dGhpcy5oZWlnaHQoKSxIO2lmKGs9WChrKT9rOjAsIWlzTmFOKE4pJiYhaXNOYU4oJCkmJk4+MCYmJD4wJiYhaXNOYU4oUy53KSYmIWlzTmFOKFMuaCkmJlMudz4wJiZTLmg+MCl7SD1NYXRoLm1pbigoTi0yKmspL1MudywoJC0yKmspL1MuaCksSD1IPnRoaXMuX3ByaXZhdGUubWF4Wm9vbT90aGlzLl9wcml2YXRlLm1heFpvb206SCxIPUg8dGhpcy5fcHJpdmF0ZS5taW5ab29tP3RoaXMuX3ByaXZhdGUubWluWm9vbTpIO3ZhciBxPXt4OihOLUgqKFMueDErUy54MikpLzIseTooJC1IKihTLnkxK1MueTIpKS8yfTtyZXR1cm57em9vbTpILHBhbjpxfX19fX0sem9vbVJhbmdlOmZ1bmN0aW9uKG0sayl7dmFyIFM9dGhpcy5fcHJpdmF0ZTtpZihrPT1udWxsKXt2YXIgTT1tO209TS5taW4saz1NLm1heH1yZXR1cm4gWChtKSYmWChrKSYmbTw9az8oUy5taW5ab29tPW0sUy5tYXhab29tPWspOlgobSkmJms9PT12b2lkIDAmJm08PVMubWF4Wm9vbT9TLm1pblpvb209bTpYKGspJiZtPT09dm9pZCAwJiZrPj1TLm1pblpvb20mJihTLm1heFpvb209ayksdGhpc30sbWluWm9vbTpmdW5jdGlvbihtKXtyZXR1cm4gbT09PXZvaWQgMD90aGlzLl9wcml2YXRlLm1pblpvb206dGhpcy56b29tUmFuZ2Uoe21pbjptfSl9LG1heFpvb206ZnVuY3Rpb24obSl7cmV0dXJuIG09PT12b2lkIDA/dGhpcy5fcHJpdmF0ZS5tYXhab29tOnRoaXMuem9vbVJhbmdlKHttYXg6bX0pfSxnZXRab29tZWRWaWV3cG9ydDpmdW5jdGlvbihtKXt2YXIgaz10aGlzLl9wcml2YXRlLFM9ay5wYW4sTT1rLnpvb20sTyxOLCQ9ITE7aWYoay56b29taW5nRW5hYmxlZHx8KCQ9ITApLFgobSk/Tj1tOnNlKG0pJiYoTj1tLmxldmVsLG0ucG9zaXRpb24hPW51bGw/Tz1sUyhtLnBvc2l0aW9uLE0sUyk6bS5yZW5kZXJlZFBvc2l0aW9uIT1udWxsJiYoTz1tLnJlbmRlcmVkUG9zaXRpb24pLE8hPW51bGwmJiFrLnBhbm5pbmdFbmFibGVkJiYoJD0hMCkpLE49Tj5rLm1heFpvb20/ay5tYXhab29tOk4sTj1OPGsubWluWm9vbT9rLm1pblpvb206TiwkfHwhWChOKXx8Tj09PU18fE8hPW51bGwmJighWChPLngpfHwhWChPLnkpKSlyZXR1cm4gbnVsbDtpZihPIT1udWxsKXt2YXIgSD1TLHE9TSxZPU4sWj17eDotWS9xKihPLngtSC54KStPLngseTotWS9xKihPLnktSC55KStPLnl9O3JldHVybnt6b29tZWQ6ITAscGFubmVkOiEwLHpvb206WSxwYW46Wn19ZWxzZSByZXR1cm57em9vbWVkOiEwLHBhbm5lZDohMSx6b29tOk4scGFuOlN9fSx6b29tOmZ1bmN0aW9uKG0pe2lmKG09PT12b2lkIDApcmV0dXJuIHRoaXMuX3ByaXZhdGUuem9vbTt2YXIgaz10aGlzLmdldFpvb21lZFZpZXdwb3J0KG0pLFM9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gaz09bnVsbHx8IWsuem9vbWVkP3RoaXM6KFMuem9vbT1rLnpvb20say5wYW5uZWQmJihTLnBhbi54PWsucGFuLngsUy5wYW4ueT1rLnBhbi55KSx0aGlzLmVtaXQoInpvb20iKyhrLnBhbm5lZD8iIHBhbiI6IiIpKyIgdmlld3BvcnQiKSx0aGlzLm5vdGlmeSgidmlld3BvcnQiKSx0aGlzKX0sdmlld3BvcnQ6ZnVuY3Rpb24obSl7dmFyIGs9dGhpcy5fcHJpdmF0ZSxTPSEwLE09ITAsTz1bXSxOPSExLCQ9ITE7aWYoIW0pcmV0dXJuIHRoaXM7aWYoWChtLnpvb20pfHwoUz0hMSksc2UobS5wYW4pfHwoTT0hMSksIVMmJiFNKXJldHVybiB0aGlzO2lmKFMpe3ZhciBIPW0uem9vbTtIPGsubWluWm9vbXx8SD5rLm1heFpvb218fCFrLnpvb21pbmdFbmFibGVkP049ITA6KGsuem9vbT1ILE8ucHVzaCgiem9vbSIpKX1pZihNJiYoIU58fCFtLmNhbmNlbE9uRmFpbGVkWm9vbSkmJmsucGFubmluZ0VuYWJsZWQpe3ZhciBxPW0ucGFuO1gocS54KSYmKGsucGFuLng9cS54LCQ9ITEpLFgocS55KSYmKGsucGFuLnk9cS55LCQ9ITEpLCR8fE8ucHVzaCgicGFuIil9cmV0dXJuIE8ubGVuZ3RoPjAmJihPLnB1c2goInZpZXdwb3J0IiksdGhpcy5lbWl0KE8uam9pbigiICIpKSx0aGlzLm5vdGlmeSgidmlld3BvcnQiKSksdGhpc30sY2VudGVyOmZ1bmN0aW9uKG0pe3ZhciBrPXRoaXMuZ2V0Q2VudGVyUGFuKG0pO3JldHVybiBrJiYodGhpcy5fcHJpdmF0ZS5wYW49ayx0aGlzLmVtaXQoInBhbiB2aWV3cG9ydCIpLHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpKSx0aGlzfSxnZXRDZW50ZXJQYW46ZnVuY3Rpb24obSxrKXtpZih0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKXtpZihiZShtKSl7dmFyIFM9bTttPXRoaXMubXV0YWJsZUVsZW1lbnRzKCkuZmlsdGVyKFMpfWVsc2UgeGUobSl8fChtPXRoaXMubXV0YWJsZUVsZW1lbnRzKCkpO2lmKG0ubGVuZ3RoIT09MCl7dmFyIE09bS5ib3VuZGluZ0JveCgpLE89dGhpcy53aWR0aCgpLE49dGhpcy5oZWlnaHQoKTtrPWs9PT12b2lkIDA/dGhpcy5fcHJpdmF0ZS56b29tOms7dmFyICQ9e3g6KE8tayooTS54MStNLngyKSkvMix5OihOLWsqKE0ueTErTS55MikpLzJ9O3JldHVybiAkfX19LHJlc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWR8fCF0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkP3RoaXM6KHRoaXMudmlld3BvcnQoe3Bhbjp7eDowLHk6MH0sem9vbToxfSksdGhpcyl9LGludmFsaWRhdGVTaXplOmZ1bmN0aW9uKCl7dGhpcy5fcHJpdmF0ZS5zaXplQ2FjaGU9bnVsbH0sc2l6ZTpmdW5jdGlvbigpe3ZhciBtPXRoaXMuX3ByaXZhdGUsaz1tLmNvbnRhaW5lcixTPXRoaXM7cmV0dXJuIG0uc2l6ZUNhY2hlPW0uc2l6ZUNhY2hlfHwoaz9mdW5jdGlvbigpe3ZhciBNPVMud2luZG93KCkuZ2V0Q29tcHV0ZWRTdHlsZShrKSxPPWZ1bmN0aW9uKCQpe3JldHVybiBwYXJzZUZsb2F0KE0uZ2V0UHJvcGVydHlWYWx1ZSgkKSl9O3JldHVybnt3aWR0aDprLmNsaWVudFdpZHRoLU8oInBhZGRpbmctbGVmdCIpLU8oInBhZGRpbmctcmlnaHQiKSxoZWlnaHQ6ay5jbGllbnRIZWlnaHQtTygicGFkZGluZy10b3AiKS1PKCJwYWRkaW5nLWJvdHRvbSIpfX0oKTp7d2lkdGg6MSxoZWlnaHQ6MX0pfSx3aWR0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemUoKS53aWR0aH0saGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZSgpLmhlaWdodH0sZXh0ZW50OmZ1bmN0aW9uKCl7dmFyIG09dGhpcy5fcHJpdmF0ZS5wYW4saz10aGlzLl9wcml2YXRlLnpvb20sUz10aGlzLnJlbmRlcmVkRXh0ZW50KCksTT17eDE6KFMueDEtbS54KS9rLHgyOihTLngyLW0ueCkvayx5MTooUy55MS1tLnkpL2sseTI6KFMueTItbS55KS9rfTtyZXR1cm4gTS53PU0ueDItTS54MSxNLmg9TS55Mi1NLnkxLE19LHJlbmRlcmVkRXh0ZW50OmZ1bmN0aW9uKCl7dmFyIG09dGhpcy53aWR0aCgpLGs9dGhpcy5oZWlnaHQoKTtyZXR1cm57eDE6MCx5MTowLHgyOm0seTI6ayx3Om0saDprfX0sbXVsdGlDbGlja0RlYm91bmNlVGltZTpmdW5jdGlvbihtKXtpZihtKXRoaXMuX3ByaXZhdGUubXVsdGlDbGlja0RlYm91bmNlVGltZT1tO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUubXVsdGlDbGlja0RlYm91bmNlVGltZTtyZXR1cm4gdGhpc319O3Y1LmNlbnRyZT12NS5jZW50ZXIsdjUuYXV0b2xvY2tOb2Rlcz12NS5hdXRvbG9jayx2NS5hdXRvdW5ncmFiaWZ5Tm9kZXM9djUuYXV0b3VuZ3JhYmlmeTt2YXIgdWs9e2RhdGE6ZnUuZGF0YSh7ZmllbGQ6ImRhdGEiLGJpbmRpbmdFdmVudDoiZGF0YSIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6ImRhdGEiLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLGFsbG93R2V0dGluZzohMCx1cGRhdGVTdHlsZTohMH0pLHJlbW92ZURhdGE6ZnUucmVtb3ZlRGF0YSh7ZmllbGQ6ImRhdGEiLGV2ZW50OiJkYXRhIix0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIix0cmlnZ2VyRXZlbnQ6ITAsdXBkYXRlU3R5bGU6ITB9KSxzY3JhdGNoOmZ1LmRhdGEoe2ZpZWxkOiJzY3JhdGNoIixiaW5kaW5nRXZlbnQ6InNjcmF0Y2giLGFsbG93QmluZGluZzohMCxhbGxvd1NldHRpbmc6ITAsc2V0dGluZ0V2ZW50OiJzY3JhdGNoIixzZXR0aW5nVHJpZ2dlcnNFdmVudDohMCx0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIixhbGxvd0dldHRpbmc6ITAsdXBkYXRlU3R5bGU6ITB9KSxyZW1vdmVTY3JhdGNoOmZ1LnJlbW92ZURhdGEoe2ZpZWxkOiJzY3JhdGNoIixldmVudDoic2NyYXRjaCIsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsdHJpZ2dlckV2ZW50OiEwLHVwZGF0ZVN0eWxlOiEwfSl9O3VrLmF0dHI9dWsuZGF0YSx1ay5yZW1vdmVBdHRyPXVrLnJlbW92ZURhdGE7dmFyIGxrPWZ1bmN0aW9uKG0pe3ZhciBrPXRoaXM7bT15dCh7fSxtKTt2YXIgUz1tLmNvbnRhaW5lcjtTJiYhVyhTKSYmVyhTWzBdKSYmKFM9U1swXSk7dmFyIE09Uz9TLl9jeXJlZzpudWxsO009TXx8e30sTSYmTS5jeSYmKE0uY3kuZGVzdHJveSgpLE09e30pO3ZhciBPPU0ucmVhZGllcz1NLnJlYWRpZXN8fFtdO1MmJihTLl9jeXJlZz1NKSxNLmN5PWs7dmFyIE49RiE9PXZvaWQgMCYmUyE9PXZvaWQgMCYmIW0uaGVhZGxlc3MsJD1tOyQubGF5b3V0PXl0KHtuYW1lOk4/ImdyaWQiOiJudWxsIn0sJC5sYXlvdXQpLCQucmVuZGVyZXI9eXQoe25hbWU6Tj8iY2FudmFzIjoibnVsbCJ9LCQucmVuZGVyZXIpO3ZhciBIPWZ1bmN0aW9uKG1lLExlLF9lKXtyZXR1cm4gTGUhPT12b2lkIDA/TGU6X2UhPT12b2lkIDA/X2U6bWV9LHE9dGhpcy5fcHJpdmF0ZT17Y29udGFpbmVyOlMscmVhZHk6ITEsb3B0aW9uczokLGVsZW1lbnRzOm5ldyBWMCh0aGlzKSxsaXN0ZW5lcnM6W10sYW5pRWxlczpuZXcgVjAodGhpcyksZGF0YTokLmRhdGF8fHt9LHNjcmF0Y2g6e30sbGF5b3V0Om51bGwscmVuZGVyZXI6bnVsbCxkZXN0cm95ZWQ6ITEsbm90aWZpY2F0aW9uc0VuYWJsZWQ6ITAsbWluWm9vbToxZS01MCxtYXhab29tOjFlNTAsem9vbWluZ0VuYWJsZWQ6SCghMCwkLnpvb21pbmdFbmFibGVkKSx1c2VyWm9vbWluZ0VuYWJsZWQ6SCghMCwkLnVzZXJab29taW5nRW5hYmxlZCkscGFubmluZ0VuYWJsZWQ6SCghMCwkLnBhbm5pbmdFbmFibGVkKSx1c2VyUGFubmluZ0VuYWJsZWQ6SCghMCwkLnVzZXJQYW5uaW5nRW5hYmxlZCksYm94U2VsZWN0aW9uRW5hYmxlZDpIKCEwLCQuYm94U2VsZWN0aW9uRW5hYmxlZCksYXV0b2xvY2s6SCghMSwkLmF1dG9sb2NrLCQuYXV0b2xvY2tOb2RlcyksYXV0b3VuZ3JhYmlmeTpIKCExLCQuYXV0b3VuZ3JhYmlmeSwkLmF1dG91bmdyYWJpZnlOb2RlcyksYXV0b3Vuc2VsZWN0aWZ5OkgoITEsJC5hdXRvdW5zZWxlY3RpZnkpLHN0eWxlRW5hYmxlZDokLnN0eWxlRW5hYmxlZD09PXZvaWQgMD9OOiQuc3R5bGVFbmFibGVkLHpvb206WCgkLnpvb20pPyQuem9vbToxLHBhbjp7eDpzZSgkLnBhbikmJlgoJC5wYW4ueCk/JC5wYW4ueDowLHk6c2UoJC5wYW4pJiZYKCQucGFuLnkpPyQucGFuLnk6MH0sYW5pbWF0aW9uOntjdXJyZW50OltdLHF1ZXVlOltdfSxoYXNDb21wb3VuZE5vZGVzOiExLG11bHRpQ2xpY2tEZWJvdW5jZVRpbWU6SCgyNTAsJC5tdWx0aUNsaWNrRGVib3VuY2VUaW1lKX07dGhpcy5jcmVhdGVFbWl0dGVyKCksdGhpcy5zZWxlY3Rpb25UeXBlKCQuc2VsZWN0aW9uVHlwZSksdGhpcy56b29tUmFuZ2Uoe21pbjokLm1pblpvb20sbWF4OiQubWF4Wm9vbX0pO3ZhciBZPWZ1bmN0aW9uKG1lLExlKXt2YXIgX2U9bWUuc29tZShLZSk7aWYoX2UpcmV0dXJuIGk4LmFsbChtZSkudGhlbihMZSk7TGUobWUpfTtxLnN0eWxlRW5hYmxlZCYmay5zZXRTdHlsZShbXSk7dmFyIFo9eXQoe30sJCwkLnJlbmRlcmVyKTtrLmluaXRSZW5kZXJlcihaKTt2YXIgY2U9ZnVuY3Rpb24obWUsTGUsX2Upe2subm90aWZpY2F0aW9ucyghMSk7dmFyIEVlPWsubXV0YWJsZUVsZW1lbnRzKCk7RWUubGVuZ3RoPjAmJkVlLnJlbW92ZSgpLG1lIT1udWxsJiYoc2UobWUpfHxuZShtZSkpJiZrLmFkZChtZSksay5vbmUoImxheW91dHJlYWR5IixmdW5jdGlvbihSZSl7ay5ub3RpZmljYXRpb25zKCEwKSxrLmVtaXQoUmUpLGsub25lKCJsb2FkIixMZSksay5lbWl0QW5kTm90aWZ5KCJsb2FkIil9KS5vbmUoImxheW91dHN0b3AiLGZ1bmN0aW9uKCl7ay5vbmUoImRvbmUiLF9lKSxrLmVtaXQoImRvbmUiKX0pO3ZhciBCZT15dCh7fSxrLl9wcml2YXRlLm9wdGlvbnMubGF5b3V0KTtCZS5lbGVzPWsuZWxlbWVudHMoKSxrLmxheW91dChCZSkucnVuKCl9O1koWyQuc3R5bGUsJC5lbGVtZW50c10sZnVuY3Rpb24odmUpe3ZhciBtZT12ZVswXSxMZT12ZVsxXTtxLnN0eWxlRW5hYmxlZCYmay5zdHlsZSgpLmFwcGVuZChtZSksY2UoTGUsZnVuY3Rpb24oKXtrLnN0YXJ0QW5pbWF0aW9uTG9vcCgpLHEucmVhZHk9ITAsYWUoJC5yZWFkeSkmJmsub24oInJlYWR5IiwkLnJlYWR5KTtmb3IodmFyIF9lPTA7X2U8Ty5sZW5ndGg7X2UrKyl7dmFyIEVlPU9bX2VdO2sub24oInJlYWR5IixFZSl9TSYmKE0ucmVhZGllcz1bXSksay5lbWl0KCJyZWFkeSIpfSwkLmRvbmUpfSl9LHFTPWxrLnByb3RvdHlwZTt5dChxUyx7aW5zdGFuY2VTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iY29yZSJ9LGlzUmVhZHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5yZWFkeX0sZGVzdHJveWVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZGVzdHJveWVkfSxyZWFkeTpmdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5pc1JlYWR5KCk/dGhpcy5lbWl0dGVyKCkuZW1pdCgicmVhZHkiLFtdLG0pOnRoaXMub24oInJlYWR5IixtKSx0aGlzfSxkZXN0cm95OmZ1bmN0aW9uKCl7dmFyIG09dGhpcztpZighbS5kZXN0cm95ZWQoKSlyZXR1cm4gbS5zdG9wQW5pbWF0aW9uTG9vcCgpLG0uZGVzdHJveVJlbmRlcmVyKCksdGhpcy5lbWl0KCJkZXN0cm95IiksbS5fcHJpdmF0ZS5kZXN0cm95ZWQ9ITAsbX0saGFzRWxlbWVudFdpdGhJZDpmdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbGVtZW50cy5oYXNFbGVtZW50V2l0aElkKG0pfSxnZXRFbGVtZW50QnlJZDpmdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbGVtZW50cy5nZXRFbGVtZW50QnlJZChtKX0saGFzQ29tcG91bmROb2RlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmhhc0NvbXBvdW5kTm9kZXN9LGhlYWRsZXNzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUucmVuZGVyZXIuaXNIZWFkbGVzcygpfSxzdHlsZUVuYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5zdHlsZUVuYWJsZWR9LGFkZFRvUG9vbDpmdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbGVtZW50cy5tZXJnZShtKSx0aGlzfSxyZW1vdmVGcm9tUG9vbDpmdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbGVtZW50cy51bm1lcmdlKG0pLHRoaXN9LGNvbnRhaW5lcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmNvbnRhaW5lcnx8bnVsbH0sd2luZG93OmZ1bmN0aW9uKCl7dmFyIG09dGhpcy5fcHJpdmF0ZS5jb250YWluZXI7aWYobT09bnVsbClyZXR1cm4gRjt2YXIgaz10aGlzLl9wcml2YXRlLmNvbnRhaW5lci5vd25lckRvY3VtZW50O3JldHVybiBrPT09dm9pZCAwfHxrPT1udWxsP0Y6ay5kZWZhdWx0Vmlld3x8Rn0sbW91bnQ6ZnVuY3Rpb24obSl7aWYobSE9bnVsbCl7dmFyIGs9dGhpcyxTPWsuX3ByaXZhdGUsTT1TLm9wdGlvbnM7cmV0dXJuIVcobSkmJlcobVswXSkmJihtPW1bMF0pLGsuc3RvcEFuaW1hdGlvbkxvb3AoKSxrLmRlc3Ryb3lSZW5kZXJlcigpLFMuY29udGFpbmVyPW0sUy5zdHlsZUVuYWJsZWQ9ITAsay5pbnZhbGlkYXRlU2l6ZSgpLGsuaW5pdFJlbmRlcmVyKHl0KHt9LE0sTS5yZW5kZXJlcix7bmFtZTpNLnJlbmRlcmVyLm5hbWU9PT0ibnVsbCI/ImNhbnZhcyI6TS5yZW5kZXJlci5uYW1lfSkpLGsuc3RhcnRBbmltYXRpb25Mb29wKCksay5zdHlsZShNLnN0eWxlKSxrLmVtaXQoIm1vdW50Iiksa319LHVubW91bnQ6ZnVuY3Rpb24oKXt2YXIgbT10aGlzO3JldHVybiBtLnN0b3BBbmltYXRpb25Mb29wKCksbS5kZXN0cm95UmVuZGVyZXIoKSxtLmluaXRSZW5kZXJlcih7bmFtZToibnVsbCJ9KSxtLmVtaXQoInVubW91bnQiKSxtfSxvcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIHZtKHRoaXMuX3ByaXZhdGUub3B0aW9ucyl9LGpzb246ZnVuY3Rpb24obSl7dmFyIGs9dGhpcyxTPWsuX3ByaXZhdGUsTT1rLm11dGFibGVFbGVtZW50cygpLE89ZnVuY3Rpb24oVmUpe3JldHVybiBrLmdldEVsZW1lbnRCeUlkKFZlLmlkKCkpfTtpZihzZShtKSl7aWYoay5zdGFydEJhdGNoKCksbS5lbGVtZW50cyl7dmFyIE49e30sJD1mdW5jdGlvbihWZSxjdCl7Zm9yKHZhciBzdD1bXSxZZT1bXSxtdD0wO210PFZlLmxlbmd0aDttdCsrKXt2YXIgSmU9VmVbbXRdO2lmKCFKZS5kYXRhLmlkKXtodSgiY3kuanNvbigpIGNhbm5vdCBoYW5kbGUgZWxlbWVudHMgd2l0aG91dCBhbiBJRCBhdHRyaWJ1dGUiKTtjb250aW51ZX12YXIgTHQ9IiIrSmUuZGF0YS5pZCxNdD1rLmdldEVsZW1lbnRCeUlkKEx0KTtOW0x0XT0hMCxNdC5sZW5ndGghPT0wP1llLnB1c2goe2VsZTpNdCxqc29uOkplfSk6KGN0JiYoSmUuZ3JvdXA9Y3QpLHN0LnB1c2goSmUpKX1rLmFkZChzdCk7Zm9yKHZhciB1dD0wO3V0PFllLmxlbmd0aDt1dCsrKXt2YXIgV3Q9WWVbdXRdLFR0PVd0LmVsZSxfbj1XdC5qc29uO1R0Lmpzb24oX24pfX07aWYobmUobS5lbGVtZW50cykpJChtLmVsZW1lbnRzKTtlbHNlIGZvcih2YXIgSD1bIm5vZGVzIiwiZWRnZXMiXSxxPTA7cTxILmxlbmd0aDtxKyspe3ZhciBZPUhbcV0sWj1tLmVsZW1lbnRzW1ldO25lKFopJiYkKFosWSl9dmFyIGNlPWsuY29sbGVjdGlvbigpO00uZmlsdGVyKGZ1bmN0aW9uKFJlKXtyZXR1cm4hTltSZS5pZCgpXX0pLmZvckVhY2goZnVuY3Rpb24oUmUpe1JlLmlzUGFyZW50KCk/Y2UubWVyZ2UoUmUpOlJlLnJlbW92ZSgpfSksY2UuZm9yRWFjaChmdW5jdGlvbihSZSl7cmV0dXJuIFJlLmNoaWxkcmVuKCkubW92ZSh7cGFyZW50Om51bGx9KX0pLGNlLmZvckVhY2goZnVuY3Rpb24oUmUpe3JldHVybiBPKFJlKS5yZW1vdmUoKX0pfW0uc3R5bGUmJmsuc3R5bGUobS5zdHlsZSksbS56b29tIT1udWxsJiZtLnpvb20hPT1TLnpvb20mJmsuem9vbShtLnpvb20pLG0ucGFuJiYobS5wYW4ueCE9PVMucGFuLnh8fG0ucGFuLnkhPT1TLnBhbi55KSYmay5wYW4obS5wYW4pLG0uZGF0YSYmay5kYXRhKG0uZGF0YSk7Zm9yKHZhciB2ZT1bIm1pblpvb20iLCJtYXhab29tIiwiem9vbWluZ0VuYWJsZWQiLCJ1c2VyWm9vbWluZ0VuYWJsZWQiLCJwYW5uaW5nRW5hYmxlZCIsInVzZXJQYW5uaW5nRW5hYmxlZCIsImJveFNlbGVjdGlvbkVuYWJsZWQiLCJhdXRvbG9jayIsImF1dG91bmdyYWJpZnkiLCJhdXRvdW5zZWxlY3RpZnkiLCJtdWx0aUNsaWNrRGVib3VuY2VUaW1lIl0sbWU9MDttZTx2ZS5sZW5ndGg7bWUrKyl7dmFyIExlPXZlW21lXTttW0xlXSE9bnVsbCYma1tMZV0obVtMZV0pfXJldHVybiBrLmVuZEJhdGNoKCksdGhpc31lbHNle3ZhciBfZT0hIW0sRWU9e307X2U/RWUuZWxlbWVudHM9dGhpcy5lbGVtZW50cygpLm1hcChmdW5jdGlvbihSZSl7cmV0dXJuIFJlLmpzb24oKX0pOihFZS5lbGVtZW50cz17fSxNLmZvckVhY2goZnVuY3Rpb24oUmUpe3ZhciBWZT1SZS5ncm91cCgpO0VlLmVsZW1lbnRzW1ZlXXx8KEVlLmVsZW1lbnRzW1ZlXT1bXSksRWUuZWxlbWVudHNbVmVdLnB1c2goUmUuanNvbigpKX0pKSx0aGlzLl9wcml2YXRlLnN0eWxlRW5hYmxlZCYmKEVlLnN0eWxlPWsuc3R5bGUoKS5qc29uKCkpLEVlLmRhdGE9dm0oay5kYXRhKCkpO3ZhciBCZT1TLm9wdGlvbnM7cmV0dXJuIEVlLnpvb21pbmdFbmFibGVkPVMuem9vbWluZ0VuYWJsZWQsRWUudXNlclpvb21pbmdFbmFibGVkPVMudXNlclpvb21pbmdFbmFibGVkLEVlLnpvb209Uy56b29tLEVlLm1pblpvb209Uy5taW5ab29tLEVlLm1heFpvb209Uy5tYXhab29tLEVlLnBhbm5pbmdFbmFibGVkPVMucGFubmluZ0VuYWJsZWQsRWUudXNlclBhbm5pbmdFbmFibGVkPVMudXNlclBhbm5pbmdFbmFibGVkLEVlLnBhbj12bShTLnBhbiksRWUuYm94U2VsZWN0aW9uRW5hYmxlZD1TLmJveFNlbGVjdGlvbkVuYWJsZWQsRWUucmVuZGVyZXI9dm0oQmUucmVuZGVyZXIpLEVlLmhpZGVFZGdlc09uVmlld3BvcnQ9QmUuaGlkZUVkZ2VzT25WaWV3cG9ydCxFZS50ZXh0dXJlT25WaWV3cG9ydD1CZS50ZXh0dXJlT25WaWV3cG9ydCxFZS53aGVlbFNlbnNpdGl2aXR5PUJlLndoZWVsU2Vuc2l0aXZpdHksRWUubW90aW9uQmx1cj1CZS5tb3Rpb25CbHVyLEVlLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWU9QmUubXVsdGlDbGlja0RlYm91bmNlVGltZSxFZX19fSkscVMuJGlkPXFTLmdldEVsZW1lbnRCeUlkLFtzcmUsbHJlLEYkLE1JLFJTLGZyZSxESSxqUyxwcmUsdjUsdWtdLmZvckVhY2goZnVuY3Rpb24oeCl7eXQocVMseCl9KTt2YXIgbXJlPXtmaXQ6ITAsZGlyZWN0ZWQ6ITEscGFkZGluZzozMCxjaXJjbGU6ITEsZ3JpZDohMSxzcGFjaW5nRmFjdG9yOjEuNzUsYm91bmRpbmdCb3g6dm9pZCAwLGF2b2lkT3ZlcmxhcDohMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEscm9vdHM6dm9pZCAwLGRlcHRoU29ydDp2b2lkIDAsYW5pbWF0ZTohMSxhbmltYXRpb25EdXJhdGlvbjo1MDAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRlRmlsdGVyOmZ1bmN0aW9uKG0sayl7cmV0dXJuITB9LHJlYWR5OnZvaWQgMCxzdG9wOnZvaWQgMCx0cmFuc2Zvcm06ZnVuY3Rpb24obSxrKXtyZXR1cm4ga319LHZyZT17bWF4aW1hbDohMSxhY3ljbGljOiExfSxwOD1mdW5jdGlvbihtKXtyZXR1cm4gbS5zY3JhdGNoKCJicmVhZHRoZmlyc3QiKX0sUiQ9ZnVuY3Rpb24obSxrKXtyZXR1cm4gbS5zY3JhdGNoKCJicmVhZHRoZmlyc3QiLGspfTtmdW5jdGlvbiBqJCh4KXt0aGlzLm9wdGlvbnM9eXQoe30sbXJlLHZyZSx4KX1qJC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIHg9dGhpcy5vcHRpb25zLG09eCxrPXguY3ksUz1tLmVsZXMsTT1TLm5vZGVzKCkuZmlsdGVyKGZ1bmN0aW9uKE1pKXtyZXR1cm4hTWkuaXNQYXJlbnQoKX0pLE89UyxOPW0uZGlyZWN0ZWQsJD1tLmFjeWNsaWN8fG0ubWF4aW1hbHx8bS5tYXhpbWFsQWRqdXN0bWVudHM+MCxIPVdkKG0uYm91bmRpbmdCb3g/bS5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6ay53aWR0aCgpLGg6ay5oZWlnaHQoKX0pLHE7aWYoeGUobS5yb290cykpcT1tLnJvb3RzO2Vsc2UgaWYobmUobS5yb290cykpe2Zvcih2YXIgWT1bXSxaPTA7WjxtLnJvb3RzLmxlbmd0aDtaKyspe3ZhciBjZT1tLnJvb3RzW1pdLHZlPWsuZ2V0RWxlbWVudEJ5SWQoY2UpO1kucHVzaCh2ZSl9cT1rLmNvbGxlY3Rpb24oWSl9ZWxzZSBpZihiZShtLnJvb3RzKSlxPWsuJChtLnJvb3RzKTtlbHNlIGlmKE4pcT1NLnJvb3RzKCk7ZWxzZXt2YXIgbWU9Uy5jb21wb25lbnRzKCk7cT1rLmNvbGxlY3Rpb24oKTtmb3IodmFyIExlPWZ1bmN0aW9uKGdpKXt2YXIgZnM9bWVbZ2ldLEZzPWZzLm1heERlZ3JlZSghMSkseHM9ZnMuZmlsdGVyKGZ1bmN0aW9uKFJzKXtyZXR1cm4gUnMuZGVncmVlKCExKT09PUZzfSk7cT1xLmFkZCh4cyl9LF9lPTA7X2U8bWUubGVuZ3RoO19lKyspTGUoX2UpfXZhciBFZT1bXSxCZT17fSxSZT1mdW5jdGlvbihnaSxmcyl7RWVbZnNdPT1udWxsJiYoRWVbZnNdPVtdKTt2YXIgRnM9RWVbZnNdLmxlbmd0aDtFZVtmc10ucHVzaChnaSksUiQoZ2kse2luZGV4OkZzLGRlcHRoOmZzfSl9LFZlPWZ1bmN0aW9uKGdpLGZzKXt2YXIgRnM9cDgoZ2kpLHhzPUZzLmRlcHRoLFJzPUZzLmluZGV4O0VlW3hzXVtSc109bnVsbCxSZShnaSxmcyl9O08uYmZzKHtyb290czpxLGRpcmVjdGVkOm0uZGlyZWN0ZWQsdmlzaXQ6ZnVuY3Rpb24oZ2ksZnMsRnMseHMsUnMpe3ZhciB5bz1naVswXSwkYT15by5pZCgpO1JlKHlvLFJzKSxCZVskYV09ITB9fSk7Zm9yKHZhciBjdD1bXSxzdD0wO3N0PE0ubGVuZ3RoO3N0Kyspe3ZhciBZZT1NW3N0XTtCZVtZZS5pZCgpXXx8Y3QucHVzaChZZSl9dmFyIG10PWZ1bmN0aW9uKGdpKXtmb3IodmFyIGZzPUVlW2dpXSxGcz0wO0ZzPGZzLmxlbmd0aDtGcysrKXt2YXIgeHM9ZnNbRnNdO2lmKHhzPT1udWxsKXtmcy5zcGxpY2UoRnMsMSksRnMtLTtjb250aW51ZX1SJCh4cyx7ZGVwdGg6Z2ksaW5kZXg6RnN9KX19LEplPWZ1bmN0aW9uKCl7Zm9yKHZhciBnaT0wO2dpPEVlLmxlbmd0aDtnaSsrKW10KGdpKX0sTHQ9ZnVuY3Rpb24oZ2ksZnMpe2Zvcih2YXIgRnM9cDgoZ2kpLHhzPWdpLmluY29tZXJzKCkuZmlsdGVyKGZ1bmN0aW9uKEcpe3JldHVybiBHLmlzTm9kZSgpJiZTLmhhcyhHKX0pLFJzPS0xLHlvPWdpLmlkKCksJGE9MDskYTx4cy5sZW5ndGg7JGErKyl7dmFyIERhPXhzWyRhXSxCbz1wOChEYSk7UnM9TWF0aC5tYXgoUnMsQm8uZGVwdGgpfWlmKEZzLmRlcHRoPD1Scyl7aWYoIW0uYWN5Y2xpYyYmZnNbeW9dKXJldHVybiBudWxsO3ZhciB0cj1ScysxO3JldHVybiBWZShnaSx0ciksZnNbeW9dPXRyLCEwfXJldHVybiExfTtpZihOJiYkKXt2YXIgTXQ9W10sdXQ9e30sV3Q9ZnVuY3Rpb24oZ2kpe3JldHVybiBNdC5wdXNoKGdpKX0sVHQ9ZnVuY3Rpb24oKXtyZXR1cm4gTXQuc2hpZnQoKX07Zm9yKE0uZm9yRWFjaChmdW5jdGlvbihNaSl7cmV0dXJuIE10LnB1c2goTWkpfSk7TXQubGVuZ3RoPjA7KXt2YXIgX249VHQoKSxobj1MdChfbix1dCk7aWYoaG4pX24ub3V0Z29lcnMoKS5maWx0ZXIoZnVuY3Rpb24oTWkpe3JldHVybiBNaS5pc05vZGUoKSYmUy5oYXMoTWkpfSkuZm9yRWFjaChXdCk7ZWxzZSBpZihobj09PW51bGwpe2h1KCJEZXRlY3RlZCBkb3VibGUgbWF4aW1hbCBzaGlmdCBmb3Igbm9kZSBgIitfbi5pZCgpKyJgLiAgQmFpbGluZyBtYXhpbWFsIGFkanVzdG1lbnQgZHVlIHRvIGN5Y2xlLiAgVXNlIGBvcHRpb25zLm1heGltYWw6IHRydWVgIG9ubHkgb24gREFHcy4iKTticmVha319fUplKCk7dmFyIFl0PTA7aWYobS5hdm9pZE92ZXJsYXApZm9yKHZhciBEbj0wO0RuPE0ubGVuZ3RoO0RuKyspe3ZhciBpcj1NW0RuXSx2cj1pci5sYXlvdXREaW1lbnNpb25zKG0pLE5uPXZyLncscHI9dnIuaDtZdD1NYXRoLm1heChZdCxObixwcil9dmFyIEVyPXt9LE1yPWZ1bmN0aW9uKGdpKXtpZihFcltnaS5pZCgpXSlyZXR1cm4gRXJbZ2kuaWQoKV07Zm9yKHZhciBmcz1wOChnaSkuZGVwdGgsRnM9Z2kubmVpZ2hib3Job29kKCkseHM9MCxScz0wLHlvPTA7eW88RnMubGVuZ3RoO3lvKyspe3ZhciAkYT1Gc1t5b107aWYoISgkYS5pc0VkZ2UoKXx8JGEuaXNQYXJlbnQoKXx8IU0uaGFzKCRhKSkpe3ZhciBEYT1wOCgkYSk7aWYoRGEhPW51bGwpe3ZhciBCbz1EYS5pbmRleCx0cj1EYS5kZXB0aDtpZighKEJvPT1udWxsfHx0cj09bnVsbCkpe3ZhciBHPUVlW3RyXS5sZW5ndGg7dHI8ZnMmJih4cys9Qm8vRyxScysrKX19fX1yZXR1cm4gUnM9TWF0aC5tYXgoMSxScykseHM9eHMvUnMsUnM9PT0wJiYoeHM9MCksRXJbZ2kuaWQoKV09eHMseHN9LENyPWZ1bmN0aW9uKGdpLGZzKXt2YXIgRnM9TXIoZ2kpLHhzPU1yKGZzKSxScz1Gcy14cztyZXR1cm4gUnM9PT0wP2h0KGdpLmlkKCksZnMuaWQoKSk6UnN9O20uZGVwdGhTb3J0IT09dm9pZCAwJiYoQ3I9bS5kZXB0aFNvcnQpO2Zvcih2YXIgT3I9MDtPcjxFZS5sZW5ndGg7T3IrKylFZVtPcl0uc29ydChDciksbXQoT3IpO2Zvcih2YXIgV249W10sYnI9MDticjxjdC5sZW5ndGg7YnIrKylXbi5wdXNoKGN0W2JyXSk7RWUudW5zaGlmdChXbiksSmUoKTtmb3IodmFyIFNyPTAsTnI9MDtOcjxFZS5sZW5ndGg7TnIrKylTcj1NYXRoLm1heChFZVtOcl0ubGVuZ3RoLFNyKTt2YXIgU2k9e3g6SC54MStILncvMix5OkgueDErSC5oLzJ9LHlzPUVlLnJlZHVjZShmdW5jdGlvbihNaSxnaSl7cmV0dXJuIE1hdGgubWF4KE1pLGdpLmxlbmd0aCl9LDApLHBhPWZ1bmN0aW9uKGdpKXt2YXIgZnM9cDgoZ2kpLEZzPWZzLmRlcHRoLHhzPWZzLmluZGV4LFJzPUVlW0ZzXS5sZW5ndGgseW89TWF0aC5tYXgoSC53LygobS5ncmlkP3lzOlJzKSsxKSxZdCksJGE9TWF0aC5tYXgoSC5oLyhFZS5sZW5ndGgrMSksWXQpLERhPU1hdGgubWluKEgudy8yL0VlLmxlbmd0aCxILmgvMi9FZS5sZW5ndGgpO2lmKERhPU1hdGgubWF4KERhLFl0KSxtLmNpcmNsZSl7dmFyIHRyPURhKkZzK0RhLShFZS5sZW5ndGg+MCYmRWVbMF0ubGVuZ3RoPD0zP0RhLzI6MCksRz0yKk1hdGguUEkvRWVbRnNdLmxlbmd0aCp4cztyZXR1cm4gRnM9PT0wJiZFZVswXS5sZW5ndGg9PT0xJiYodHI9MSkse3g6U2kueCt0cipNYXRoLmNvcyhHKSx5OlNpLnkrdHIqTWF0aC5zaW4oRyl9fWVsc2V7dmFyIEJvPXt4OlNpLngrKHhzKzEtKFJzKzEpLzIpKnlvLHk6KEZzKzEpKiRhfTtyZXR1cm4gQm99fTtyZXR1cm4gUy5ub2RlcygpLmxheW91dFBvc2l0aW9ucyh0aGlzLG0scGEpLHRoaXN9O3ZhciB3cmU9e2ZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxhdm9pZE92ZXJsYXA6ITAsbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExLHNwYWNpbmdGYWN0b3I6dm9pZCAwLHJhZGl1czp2b2lkIDAsc3RhcnRBbmdsZTozLzIqTWF0aC5QSSxzd2VlcDp2b2lkIDAsY2xvY2t3aXNlOiEwLHNvcnQ6dm9pZCAwLGFuaW1hdGU6ITEsYW5pbWF0aW9uRHVyYXRpb246NTAwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpmdW5jdGlvbihtLGspe3JldHVybiEwfSxyZWFkeTp2b2lkIDAsc3RvcDp2b2lkIDAsdHJhbnNmb3JtOmZ1bmN0aW9uKG0sayl7cmV0dXJuIGt9fTtmdW5jdGlvbiAkJCh4KXt0aGlzLm9wdGlvbnM9eXQoe30sd3JlLHgpfSQkLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgeD10aGlzLm9wdGlvbnMsbT14LGs9eC5jeSxTPW0uZWxlcyxNPW0uY291bnRlcmNsb2Nrd2lzZSE9PXZvaWQgMD8hbS5jb3VudGVyY2xvY2t3aXNlOm0uY2xvY2t3aXNlLE89Uy5ub2RlcygpLm5vdCgiOnBhcmVudCIpO20uc29ydCYmKE89Ty5zb3J0KG0uc29ydCkpO2Zvcih2YXIgTj1XZChtLmJvdW5kaW5nQm94P20uYm91bmRpbmdCb3g6e3gxOjAseTE6MCx3Omsud2lkdGgoKSxoOmsuaGVpZ2h0KCl9KSwkPXt4Ok4ueDErTi53LzIseTpOLnkxK04uaC8yfSxIPW0uc3dlZXA9PT12b2lkIDA/MipNYXRoLlBJLTIqTWF0aC5QSS9PLmxlbmd0aDptLnN3ZWVwLHE9SC9NYXRoLm1heCgxLE8ubGVuZ3RoLTEpLFksWj0wLGNlPTA7Y2U8Ty5sZW5ndGg7Y2UrKyl7dmFyIHZlPU9bY2VdLG1lPXZlLmxheW91dERpbWVuc2lvbnMobSksTGU9bWUudyxfZT1tZS5oO1o9TWF0aC5tYXgoWixMZSxfZSl9aWYoWChtLnJhZGl1cyk/WT1tLnJhZGl1czpPLmxlbmd0aDw9MT9ZPTA6WT1NYXRoLm1pbihOLmgsTi53KS8yLVosTy5sZW5ndGg+MSYmbS5hdm9pZE92ZXJsYXApe1oqPTEuNzU7dmFyIEVlPU1hdGguY29zKHEpLU1hdGguY29zKDApLEJlPU1hdGguc2luKHEpLU1hdGguc2luKDApLFJlPU1hdGguc3FydChaKlovKEVlKkVlK0JlKkJlKSk7WT1NYXRoLm1heChSZSxZKX12YXIgVmU9ZnVuY3Rpb24oc3QsWWUpe3ZhciBtdD1tLnN0YXJ0QW5nbGUrWWUqcSooTT8xOi0xKSxKZT1ZKk1hdGguY29zKG10KSxMdD1ZKk1hdGguc2luKG10KSxNdD17eDokLngrSmUseTokLnkrTHR9O3JldHVybiBNdH07cmV0dXJuIFMubm9kZXMoKS5sYXlvdXRQb3NpdGlvbnModGhpcyxtLFZlKSx0aGlzfTt2YXIgeXJlPXtmaXQ6ITAscGFkZGluZzozMCxzdGFydEFuZ2xlOjMvMipNYXRoLlBJLHN3ZWVwOnZvaWQgMCxjbG9ja3dpc2U6ITAsZXF1aWRpc3RhbnQ6ITEsbWluTm9kZVNwYWNpbmc6MTAsYm91bmRpbmdCb3g6dm9pZCAwLGF2b2lkT3ZlcmxhcDohMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEsaGVpZ2h0OnZvaWQgMCx3aWR0aDp2b2lkIDAsc3BhY2luZ0ZhY3Rvcjp2b2lkIDAsY29uY2VudHJpYzpmdW5jdGlvbihtKXtyZXR1cm4gbS5kZWdyZWUoKX0sbGV2ZWxXaWR0aDpmdW5jdGlvbihtKXtyZXR1cm4gbS5tYXhEZWdyZWUoKS80fSxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6ZnVuY3Rpb24obSxrKXtyZXR1cm4hMH0scmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpmdW5jdGlvbihtLGspe3JldHVybiBrfX07ZnVuY3Rpb24geiQoeCl7dGhpcy5vcHRpb25zPXl0KHt9LHlyZSx4KX16JC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7Zm9yKHZhciB4PXRoaXMub3B0aW9ucyxtPXgsaz1tLmNvdW50ZXJjbG9ja3dpc2UhPT12b2lkIDA/IW0uY291bnRlcmNsb2Nrd2lzZTptLmNsb2Nrd2lzZSxTPXguY3ksTT1tLmVsZXMsTz1NLm5vZGVzKCkubm90KCI6cGFyZW50IiksTj1XZChtLmJvdW5kaW5nQm94P20uYm91bmRpbmdCb3g6e3gxOjAseTE6MCx3OlMud2lkdGgoKSxoOlMuaGVpZ2h0KCl9KSwkPXt4Ok4ueDErTi53LzIseTpOLnkxK04uaC8yfSxIPVtdLHE9MCxZPTA7WTxPLmxlbmd0aDtZKyspe3ZhciBaPU9bWV0sY2U9dm9pZCAwO2NlPW0uY29uY2VudHJpYyhaKSxILnB1c2goe3ZhbHVlOmNlLG5vZGU6Wn0pLFouX3ByaXZhdGUuc2NyYXRjaC5jb25jZW50cmljPWNlfU8udXBkYXRlU3R5bGUoKTtmb3IodmFyIHZlPTA7dmU8Ty5sZW5ndGg7dmUrKyl7dmFyIG1lPU9bdmVdLExlPW1lLmxheW91dERpbWVuc2lvbnMobSk7cT1NYXRoLm1heChxLExlLncsTGUuaCl9SC5zb3J0KGZ1bmN0aW9uKE1pLGdpKXtyZXR1cm4gZ2kudmFsdWUtTWkudmFsdWV9KTtmb3IodmFyIF9lPW0ubGV2ZWxXaWR0aChPKSxFZT1bW11dLEJlPUVlWzBdLFJlPTA7UmU8SC5sZW5ndGg7UmUrKyl7dmFyIFZlPUhbUmVdO2lmKEJlLmxlbmd0aD4wKXt2YXIgY3Q9TWF0aC5hYnMoQmVbMF0udmFsdWUtVmUudmFsdWUpO2N0Pj1fZSYmKEJlPVtdLEVlLnB1c2goQmUpKX1CZS5wdXNoKFZlKX12YXIgc3Q9cSttLm1pbk5vZGVTcGFjaW5nO2lmKCFtLmF2b2lkT3ZlcmxhcCl7dmFyIFllPUVlLmxlbmd0aD4wJiZFZVswXS5sZW5ndGg+MSxtdD1NYXRoLm1pbihOLncsTi5oKS8yLXN0LEplPW10LyhFZS5sZW5ndGgrWWU/MTowKTtzdD1NYXRoLm1pbihzdCxKZSl9Zm9yKHZhciBMdD0wLE10PTA7TXQ8RWUubGVuZ3RoO010Kyspe3ZhciB1dD1FZVtNdF0sV3Q9bS5zd2VlcD09PXZvaWQgMD8yKk1hdGguUEktMipNYXRoLlBJL3V0Lmxlbmd0aDptLnN3ZWVwLFR0PXV0LmRUaGV0YT1XdC9NYXRoLm1heCgxLHV0Lmxlbmd0aC0xKTtpZih1dC5sZW5ndGg+MSYmbS5hdm9pZE92ZXJsYXApe3ZhciBfbj1NYXRoLmNvcyhUdCktTWF0aC5jb3MoMCksaG49TWF0aC5zaW4oVHQpLU1hdGguc2luKDApLFl0PU1hdGguc3FydChzdCpzdC8oX24qX24raG4qaG4pKTtMdD1NYXRoLm1heChZdCxMdCl9dXQucj1MdCxMdCs9c3R9aWYobS5lcXVpZGlzdGFudCl7Zm9yKHZhciBEbj0wLGlyPTAsdnI9MDt2cjxFZS5sZW5ndGg7dnIrKyl7dmFyIE5uPUVlW3ZyXSxwcj1Obi5yLWlyO0RuPU1hdGgubWF4KERuLHByKX1pcj0wO2Zvcih2YXIgRXI9MDtFcjxFZS5sZW5ndGg7RXIrKyl7dmFyIE1yPUVlW0VyXTtFcj09PTAmJihpcj1Nci5yKSxNci5yPWlyLGlyKz1Ebn19Zm9yKHZhciBDcj17fSxPcj0wO09yPEVlLmxlbmd0aDtPcisrKWZvcih2YXIgV249RWVbT3JdLGJyPVduLmRUaGV0YSxTcj1Xbi5yLE5yPTA7TnI8V24ubGVuZ3RoO05yKyspe3ZhciBTaT1XbltOcl0seXM9bS5zdGFydEFuZ2xlKyhrPzE6LTEpKmJyKk5yLHBhPXt4OiQueCtTcipNYXRoLmNvcyh5cykseTokLnkrU3IqTWF0aC5zaW4oeXMpfTtDcltTaS5ub2RlLmlkKCldPXBhfXJldHVybiBNLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsbSxmdW5jdGlvbihNaSl7dmFyIGdpPU1pLmlkKCk7cmV0dXJuIENyW2dpXX0pLHRoaXN9O3ZhciBOSSx4cmU9e3JlYWR5OmZ1bmN0aW9uKCl7fSxzdG9wOmZ1bmN0aW9uKCl7fSxhbmltYXRlOiEwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0aW9uRHVyYXRpb246dm9pZCAwLGFuaW1hdGVGaWx0ZXI6ZnVuY3Rpb24obSxrKXtyZXR1cm4hMH0sYW5pbWF0aW9uVGhyZXNob2xkOjI1MCxyZWZyZXNoOjIwLGZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEscmFuZG9taXplOiExLGNvbXBvbmVudFNwYWNpbmc6NDAsbm9kZVJlcHVsc2lvbjpmdW5jdGlvbihtKXtyZXR1cm4gMjA0OH0sbm9kZU92ZXJsYXA6NCxpZGVhbEVkZ2VMZW5ndGg6ZnVuY3Rpb24obSl7cmV0dXJuIDMyfSxlZGdlRWxhc3RpY2l0eTpmdW5jdGlvbihtKXtyZXR1cm4gMzJ9LG5lc3RpbmdGYWN0b3I6MS4yLGdyYXZpdHk6MSxudW1JdGVyOjFlMyxpbml0aWFsVGVtcDoxZTMsY29vbGluZ0ZhY3RvcjouOTksbWluVGVtcDoxfTtmdW5jdGlvbiBIUyh4KXt0aGlzLm9wdGlvbnM9eXQoe30seHJlLHgpLHRoaXMub3B0aW9ucy5sYXlvdXQ9dGhpczt2YXIgbT10aGlzLm9wdGlvbnMuZWxlcy5ub2RlcygpLGs9dGhpcy5vcHRpb25zLmVsZXMuZWRnZXMoKSxTPWsuZmlsdGVyKGZ1bmN0aW9uKE0pe3ZhciBPPU0uc291cmNlKCkuZGF0YSgiaWQiKSxOPU0udGFyZ2V0KCkuZGF0YSgiaWQiKSwkPW0uc29tZShmdW5jdGlvbihxKXtyZXR1cm4gcS5kYXRhKCJpZCIpPT09T30pLEg9bS5zb21lKGZ1bmN0aW9uKHEpe3JldHVybiBxLmRhdGEoImlkIik9PT1OfSk7cmV0dXJuISR8fCFIfSk7dGhpcy5vcHRpb25zLmVsZXM9dGhpcy5vcHRpb25zLmVsZXMubm90KFMpfUhTLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgeD10aGlzLm9wdGlvbnMsbT14LmN5LGs9dGhpcztrLnN0b3BwZWQ9ITEsKHguYW5pbWF0ZT09PSEwfHx4LmFuaW1hdGU9PT0hMSkmJmsuZW1pdCh7dHlwZToibGF5b3V0c3RhcnQiLGxheW91dDprfSkseC5kZWJ1Zz09PSEwP05JPSEwOk5JPSExO3ZhciBTPWtyZShtLGsseCk7TkkmJkNyZShTKSx4LnJhbmRvbWl6ZSYmU3JlKFMpO3ZhciBNPUJwKCksTz1mdW5jdGlvbigpe19yZShTLG0seCkseC5maXQ9PT0hMCYmbS5maXQoeC5wYWRkaW5nKX0sTj1mdW5jdGlvbihjZSl7cmV0dXJuIShrLnN0b3BwZWR8fGNlPj14Lm51bUl0ZXJ8fChBcmUoUyx4KSxTLnRlbXBlcmF0dXJlPVMudGVtcGVyYXR1cmUqeC5jb29saW5nRmFjdG9yLFMudGVtcGVyYXR1cmU8eC5taW5UZW1wKSl9LCQ9ZnVuY3Rpb24oKXtpZih4LmFuaW1hdGU9PT0hMHx8eC5hbmltYXRlPT09ITEpTygpLGsub25lKCJsYXlvdXRzdG9wIix4LnN0b3ApLGsuZW1pdCh7dHlwZToibGF5b3V0c3RvcCIsbGF5b3V0Omt9KTtlbHNle3ZhciBjZT14LmVsZXMubm9kZXMoKSx2ZT1xJChTLHgsY2UpO2NlLmxheW91dFBvc2l0aW9ucyhrLHgsdmUpfX0sSD0wLHE9ITA7aWYoeC5hbmltYXRlPT09ITApe3ZhciBZPWZ1bmN0aW9uIFooKXtmb3IodmFyIGNlPTA7cSYmY2U8eC5yZWZyZXNoOylxPU4oSCksSCsrLGNlKys7aWYoIXEpViQoUyx4KSwkKCk7ZWxzZXt2YXIgdmU9QnAoKTt2ZS1NPj14LmFuaW1hdGlvblRocmVzaG9sZCYmTygpLHowKFopfX07WSgpfWVsc2V7Zm9yKDtxOylxPU4oSCksSCsrO1YkKFMseCksJCgpfXJldHVybiB0aGlzfSxIUy5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0b3BwZWQ9ITAsdGhpcy50aHJlYWQmJnRoaXMudGhyZWFkLnN0b3AoKSx0aGlzLmVtaXQoImxheW91dHN0b3AiKSx0aGlzfSxIUy5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRocmVhZCYmdGhpcy50aHJlYWQuc3RvcCgpLHRoaXN9O3ZhciBrcmU9ZnVuY3Rpb24obSxrLFMpe2Zvcih2YXIgTT1TLmVsZXMuZWRnZXMoKSxPPVMuZWxlcy5ub2RlcygpLE49V2QoUy5ib3VuZGluZ0JveD9TLmJvdW5kaW5nQm94Ont4MTowLHkxOjAsdzptLndpZHRoKCksaDptLmhlaWdodCgpfSksJD17aXNDb21wb3VuZDptLmhhc0NvbXBvdW5kTm9kZXMoKSxsYXlvdXROb2RlczpbXSxpZFRvSW5kZXg6e30sbm9kZVNpemU6Ty5zaXplKCksZ3JhcGhTZXQ6W10saW5kZXhUb0dyYXBoOltdLGxheW91dEVkZ2VzOltdLGVkZ2VTaXplOk0uc2l6ZSgpLHRlbXBlcmF0dXJlOlMuaW5pdGlhbFRlbXAsY2xpZW50V2lkdGg6Ti53LGNsaWVudEhlaWdodDpOLmgsYm91bmRpbmdCb3g6Tn0sSD1TLmVsZXMuY29tcG9uZW50cygpLHE9e30sWT0wO1k8SC5sZW5ndGg7WSsrKWZvcih2YXIgWj1IW1ldLGNlPTA7Y2U8Wi5sZW5ndGg7Y2UrKyl7dmFyIHZlPVpbY2VdO3FbdmUuaWQoKV09WX1mb3IodmFyIFk9MDtZPCQubm9kZVNpemU7WSsrKXt2YXIgbWU9T1tZXSxMZT1tZS5sYXlvdXREaW1lbnNpb25zKFMpLF9lPXt9O19lLmlzTG9ja2VkPW1lLmxvY2tlZCgpLF9lLmlkPW1lLmRhdGEoImlkIiksX2UucGFyZW50SWQ9bWUuZGF0YSgicGFyZW50IiksX2UuY21wdElkPXFbbWUuaWQoKV0sX2UuY2hpbGRyZW49W10sX2UucG9zaXRpb25YPW1lLnBvc2l0aW9uKCJ4IiksX2UucG9zaXRpb25ZPW1lLnBvc2l0aW9uKCJ5IiksX2Uub2Zmc2V0WD0wLF9lLm9mZnNldFk9MCxfZS5oZWlnaHQ9TGUudyxfZS53aWR0aD1MZS5oLF9lLm1heFg9X2UucG9zaXRpb25YK19lLndpZHRoLzIsX2UubWluWD1fZS5wb3NpdGlvblgtX2Uud2lkdGgvMixfZS5tYXhZPV9lLnBvc2l0aW9uWStfZS5oZWlnaHQvMixfZS5taW5ZPV9lLnBvc2l0aW9uWS1fZS5oZWlnaHQvMixfZS5wYWRMZWZ0PXBhcnNlRmxvYXQobWUuc3R5bGUoInBhZGRpbmciKSksX2UucGFkUmlnaHQ9cGFyc2VGbG9hdChtZS5zdHlsZSgicGFkZGluZyIpKSxfZS5wYWRUb3A9cGFyc2VGbG9hdChtZS5zdHlsZSgicGFkZGluZyIpKSxfZS5wYWRCb3R0b209cGFyc2VGbG9hdChtZS5zdHlsZSgicGFkZGluZyIpKSxfZS5ub2RlUmVwdWxzaW9uPWFlKFMubm9kZVJlcHVsc2lvbik/Uy5ub2RlUmVwdWxzaW9uKG1lKTpTLm5vZGVSZXB1bHNpb24sJC5sYXlvdXROb2Rlcy5wdXNoKF9lKSwkLmlkVG9JbmRleFtfZS5pZF09WX1mb3IodmFyIEVlPVtdLEJlPTAsUmU9LTEsVmU9W10sWT0wO1k8JC5ub2RlU2l6ZTtZKyspe3ZhciBtZT0kLmxheW91dE5vZGVzW1ldLGN0PW1lLnBhcmVudElkO2N0IT1udWxsPyQubGF5b3V0Tm9kZXNbJC5pZFRvSW5kZXhbY3RdXS5jaGlsZHJlbi5wdXNoKG1lLmlkKTooRWVbKytSZV09bWUuaWQsVmUucHVzaChtZS5pZCkpfWZvcigkLmdyYXBoU2V0LnB1c2goVmUpO0JlPD1SZTspe3ZhciBzdD1FZVtCZSsrXSxZZT0kLmlkVG9JbmRleFtzdF0sdmU9JC5sYXlvdXROb2Rlc1tZZV0sbXQ9dmUuY2hpbGRyZW47aWYobXQubGVuZ3RoPjApeyQuZ3JhcGhTZXQucHVzaChtdCk7Zm9yKHZhciBZPTA7WTxtdC5sZW5ndGg7WSsrKUVlWysrUmVdPW10W1ldfX1mb3IodmFyIFk9MDtZPCQuZ3JhcGhTZXQubGVuZ3RoO1krKylmb3IodmFyIEplPSQuZ3JhcGhTZXRbWV0sY2U9MDtjZTxKZS5sZW5ndGg7Y2UrKyl7dmFyIEx0PSQuaWRUb0luZGV4W0plW2NlXV07JC5pbmRleFRvR3JhcGhbTHRdPVl9Zm9yKHZhciBZPTA7WTwkLmVkZ2VTaXplO1krKyl7dmFyIE10PU1bWV0sdXQ9e307dXQuaWQ9TXQuZGF0YSgiaWQiKSx1dC5zb3VyY2VJZD1NdC5kYXRhKCJzb3VyY2UiKSx1dC50YXJnZXRJZD1NdC5kYXRhKCJ0YXJnZXQiKTt2YXIgV3Q9YWUoUy5pZGVhbEVkZ2VMZW5ndGgpP1MuaWRlYWxFZGdlTGVuZ3RoKE10KTpTLmlkZWFsRWRnZUxlbmd0aCxUdD1hZShTLmVkZ2VFbGFzdGljaXR5KT9TLmVkZ2VFbGFzdGljaXR5KE10KTpTLmVkZ2VFbGFzdGljaXR5LF9uPSQuaWRUb0luZGV4W3V0LnNvdXJjZUlkXSxobj0kLmlkVG9JbmRleFt1dC50YXJnZXRJZF0sWXQ9JC5pbmRleFRvR3JhcGhbX25dLERuPSQuaW5kZXhUb0dyYXBoW2huXTtpZihZdCE9RG4pe2Zvcih2YXIgaXI9RXJlKHV0LnNvdXJjZUlkLHV0LnRhcmdldElkLCQpLHZyPSQuZ3JhcGhTZXRbaXJdLE5uPTAsX2U9JC5sYXlvdXROb2Rlc1tfbl07dnIuaW5kZXhPZihfZS5pZCk9PT0tMTspX2U9JC5sYXlvdXROb2Rlc1skLmlkVG9JbmRleFtfZS5wYXJlbnRJZF1dLE5uKys7Zm9yKF9lPSQubGF5b3V0Tm9kZXNbaG5dO3ZyLmluZGV4T2YoX2UuaWQpPT09LTE7KV9lPSQubGF5b3V0Tm9kZXNbJC5pZFRvSW5kZXhbX2UucGFyZW50SWRdXSxObisrO1d0Kj1ObipTLm5lc3RpbmdGYWN0b3J9dXQuaWRlYWxMZW5ndGg9V3QsdXQuZWxhc3RpY2l0eT1UdCwkLmxheW91dEVkZ2VzLnB1c2godXQpfXJldHVybiAkfSxFcmU9ZnVuY3Rpb24obSxrLFMpe3ZhciBNPVRyZShtLGssMCxTKTtyZXR1cm4gMj5NLmNvdW50PzA6TS5ncmFwaH0sVHJlPWZ1bmN0aW9uIHgobSxrLFMsTSl7dmFyIE89TS5ncmFwaFNldFtTXTtpZigtMTxPLmluZGV4T2YobSkmJi0xPE8uaW5kZXhPZihrKSlyZXR1cm57Y291bnQ6MixncmFwaDpTfTtmb3IodmFyIE49MCwkPTA7JDxPLmxlbmd0aDskKyspe3ZhciBIPU9bJF0scT1NLmlkVG9JbmRleFtIXSxZPU0ubGF5b3V0Tm9kZXNbcV0uY2hpbGRyZW47aWYoWS5sZW5ndGghPT0wKXt2YXIgWj1NLmluZGV4VG9HcmFwaFtNLmlkVG9JbmRleFtZWzBdXV0sY2U9eChtLGssWixNKTtpZihjZS5jb3VudCE9PTApaWYoY2UuY291bnQ9PT0xKXtpZihOKyssTj09PTIpYnJlYWt9ZWxzZSByZXR1cm4gY2V9fXJldHVybntjb3VudDpOLGdyYXBoOlN9fSxDcmUsU3JlPWZ1bmN0aW9uKG0sayl7Zm9yKHZhciBTPW0uY2xpZW50V2lkdGgsTT1tLmNsaWVudEhlaWdodCxPPTA7TzxtLm5vZGVTaXplO08rKyl7dmFyIE49bS5sYXlvdXROb2Rlc1tPXTtOLmNoaWxkcmVuLmxlbmd0aD09PTAmJiFOLmlzTG9ja2VkJiYoTi5wb3NpdGlvblg9TWF0aC5yYW5kb20oKSpTLE4ucG9zaXRpb25ZPU1hdGgucmFuZG9tKCkqTSl9fSxxJD1mdW5jdGlvbihtLGssUyl7dmFyIE09bS5ib3VuZGluZ0JveCxPPXt4MToxLzAseDI6LTEvMCx5MToxLzAseTI6LTEvMH07cmV0dXJuIGsuYm91bmRpbmdCb3gmJihTLmZvckVhY2goZnVuY3Rpb24oTil7dmFyICQ9bS5sYXlvdXROb2Rlc1ttLmlkVG9JbmRleFtOLmRhdGEoImlkIildXTtPLngxPU1hdGgubWluKE8ueDEsJC5wb3NpdGlvblgpLE8ueDI9TWF0aC5tYXgoTy54MiwkLnBvc2l0aW9uWCksTy55MT1NYXRoLm1pbihPLnkxLCQucG9zaXRpb25ZKSxPLnkyPU1hdGgubWF4KE8ueTIsJC5wb3NpdGlvblkpfSksTy53PU8ueDItTy54MSxPLmg9Ty55Mi1PLnkxKSxmdW5jdGlvbihOLCQpe3ZhciBIPW0ubGF5b3V0Tm9kZXNbbS5pZFRvSW5kZXhbTi5kYXRhKCJpZCIpXV07aWYoay5ib3VuZGluZ0JveCl7dmFyIHE9KEgucG9zaXRpb25YLU8ueDEpL08udyxZPShILnBvc2l0aW9uWS1PLnkxKS9PLmg7cmV0dXJue3g6TS54MStxKk0udyx5Ok0ueTErWSpNLmh9fWVsc2UgcmV0dXJue3g6SC5wb3NpdGlvblgseTpILnBvc2l0aW9uWX19fSxfcmU9ZnVuY3Rpb24obSxrLFMpe3ZhciBNPVMubGF5b3V0LE89Uy5lbGVzLm5vZGVzKCksTj1xJChtLFMsTyk7Ty5wb3NpdGlvbnMoTiksbS5yZWFkeSE9PSEwJiYobS5yZWFkeT0hMCxNLm9uZSgibGF5b3V0cmVhZHkiLFMucmVhZHkpLE0uZW1pdCh7dHlwZToibGF5b3V0cmVhZHkiLGxheW91dDp0aGlzfSkpfSxBcmU9ZnVuY3Rpb24obSxrLFMpe0xyZShtLGspLElyZShtKSxPcmUobSxrKSxOcmUobSksUHJlKG0pfSxMcmU9ZnVuY3Rpb24obSxrKXtmb3IodmFyIFM9MDtTPG0uZ3JhcGhTZXQubGVuZ3RoO1MrKylmb3IodmFyIE09bS5ncmFwaFNldFtTXSxPPU0ubGVuZ3RoLE49MDtOPE87TisrKWZvcih2YXIgJD1tLmxheW91dE5vZGVzW20uaWRUb0luZGV4W01bTl1dXSxIPU4rMTtIPE87SCsrKXt2YXIgcT1tLmxheW91dE5vZGVzW20uaWRUb0luZGV4W01bSF1dXTtNcmUoJCxxLG0sayl9fSxIJD1mdW5jdGlvbihtKXtyZXR1cm4tbSsyKm0qTWF0aC5yYW5kb20oKX0sTXJlPWZ1bmN0aW9uKG0sayxTLE0pe3ZhciBPPW0uY21wdElkLE49ay5jbXB0SWQ7aWYoIShPIT09TiYmIVMuaXNDb21wb3VuZCkpe3ZhciAkPWsucG9zaXRpb25YLW0ucG9zaXRpb25YLEg9ay5wb3NpdGlvblktbS5wb3NpdGlvblkscT0xOyQ9PT0wJiZIPT09MCYmKCQ9SCQocSksSD1IJChxKSk7dmFyIFk9RHJlKG0saywkLEgpO2lmKFk+MCl2YXIgWj1NLm5vZGVPdmVybGFwKlksY2U9TWF0aC5zcXJ0KCQqJCtIKkgpLHZlPVoqJC9jZSxtZT1aKkgvY2U7ZWxzZSB2YXIgTGU9VlMobSwkLEgpLF9lPVZTKGssLTEqJCwtMSpIKSxFZT1fZS54LUxlLngsQmU9X2UueS1MZS55LFJlPUVlKkVlK0JlKkJlLGNlPU1hdGguc3FydChSZSksWj0obS5ub2RlUmVwdWxzaW9uK2subm9kZVJlcHVsc2lvbikvUmUsdmU9WipFZS9jZSxtZT1aKkJlL2NlO20uaXNMb2NrZWR8fChtLm9mZnNldFgtPXZlLG0ub2Zmc2V0WS09bWUpLGsuaXNMb2NrZWR8fChrLm9mZnNldFgrPXZlLGsub2Zmc2V0WSs9bWUpfX0sRHJlPWZ1bmN0aW9uKG0sayxTLE0pe2lmKFM+MCl2YXIgTz1tLm1heFgtay5taW5YO2Vsc2UgdmFyIE89ay5tYXhYLW0ubWluWDtpZihNPjApdmFyIE49bS5tYXhZLWsubWluWTtlbHNlIHZhciBOPWsubWF4WS1tLm1pblk7cmV0dXJuIE8+PTAmJk4+PTA/TWF0aC5zcXJ0KE8qTytOKk4pOjB9LFZTPWZ1bmN0aW9uKG0sayxTKXt2YXIgTT1tLnBvc2l0aW9uWCxPPW0ucG9zaXRpb25ZLE49bS5oZWlnaHR8fDEsJD1tLndpZHRofHwxLEg9Uy9rLHE9Ti8kLFk9e307cmV0dXJuIGs9PT0wJiYwPFN8fGs9PT0wJiYwPlM/KFkueD1NLFkueT1PK04vMixZKTowPGsmJi0xKnE8PUgmJkg8PXE/KFkueD1NKyQvMixZLnk9TyskKlMvMi9rLFkpOjA+ayYmLTEqcTw9SCYmSDw9cT8oWS54PU0tJC8yLFkueT1PLSQqUy8yL2ssWSk6MDxTJiYoSDw9LTEqcXx8SD49cSk/KFkueD1NK04qay8yL1MsWS55PU8rTi8yLFkpOigwPlMmJihIPD0tMSpxfHxIPj1xKSYmKFkueD1NLU4qay8yL1MsWS55PU8tTi8yKSxZKX0sSXJlPWZ1bmN0aW9uKG0sayl7Zm9yKHZhciBTPTA7UzxtLmVkZ2VTaXplO1MrKyl7dmFyIE09bS5sYXlvdXRFZGdlc1tTXSxPPW0uaWRUb0luZGV4W00uc291cmNlSWRdLE49bS5sYXlvdXROb2Rlc1tPXSwkPW0uaWRUb0luZGV4W00udGFyZ2V0SWRdLEg9bS5sYXlvdXROb2Rlc1skXSxxPUgucG9zaXRpb25YLU4ucG9zaXRpb25YLFk9SC5wb3NpdGlvblktTi5wb3NpdGlvblk7aWYoIShxPT09MCYmWT09PTApKXt2YXIgWj1WUyhOLHEsWSksY2U9VlMoSCwtMSpxLC0xKlkpLHZlPWNlLngtWi54LG1lPWNlLnktWi55LExlPU1hdGguc3FydCh2ZSp2ZSttZSptZSksX2U9TWF0aC5wb3coTS5pZGVhbExlbmd0aC1MZSwyKS9NLmVsYXN0aWNpdHk7aWYoTGUhPT0wKXZhciBFZT1fZSp2ZS9MZSxCZT1fZSptZS9MZTtlbHNlIHZhciBFZT0wLEJlPTA7Ti5pc0xvY2tlZHx8KE4ub2Zmc2V0WCs9RWUsTi5vZmZzZXRZKz1CZSksSC5pc0xvY2tlZHx8KEgub2Zmc2V0WC09RWUsSC5vZmZzZXRZLT1CZSl9fX0sT3JlPWZ1bmN0aW9uKG0sayl7aWYoay5ncmF2aXR5IT09MClmb3IodmFyIFM9MSxNPTA7TTxtLmdyYXBoU2V0Lmxlbmd0aDtNKyspe3ZhciBPPW0uZ3JhcGhTZXRbTV0sTj1PLmxlbmd0aDtpZihNPT09MCl2YXIgJD1tLmNsaWVudEhlaWdodC8yLEg9bS5jbGllbnRXaWR0aC8yO2Vsc2UgdmFyIHE9bS5sYXlvdXROb2Rlc1ttLmlkVG9JbmRleFtPWzBdXV0sWT1tLmxheW91dE5vZGVzW20uaWRUb0luZGV4W3EucGFyZW50SWRdXSwkPVkucG9zaXRpb25YLEg9WS5wb3NpdGlvblk7Zm9yKHZhciBaPTA7WjxOO1orKyl7dmFyIGNlPW0ubGF5b3V0Tm9kZXNbbS5pZFRvSW5kZXhbT1taXV1dO2lmKCFjZS5pc0xvY2tlZCl7dmFyIHZlPSQtY2UucG9zaXRpb25YLG1lPUgtY2UucG9zaXRpb25ZLExlPU1hdGguc3FydCh2ZSp2ZSttZSptZSk7aWYoTGU+Uyl7dmFyIF9lPWsuZ3Jhdml0eSp2ZS9MZSxFZT1rLmdyYXZpdHkqbWUvTGU7Y2Uub2Zmc2V0WCs9X2UsY2Uub2Zmc2V0WSs9RWV9fX19fSxOcmU9ZnVuY3Rpb24obSxrKXt2YXIgUz1bXSxNPTAsTz0tMTtmb3IoUy5wdXNoLmFwcGx5KFMsbS5ncmFwaFNldFswXSksTys9bS5ncmFwaFNldFswXS5sZW5ndGg7TTw9Tzspe3ZhciBOPVNbTSsrXSwkPW0uaWRUb0luZGV4W05dLEg9bS5sYXlvdXROb2Rlc1skXSxxPUguY2hpbGRyZW47aWYoMDxxLmxlbmd0aCYmIUguaXNMb2NrZWQpe2Zvcih2YXIgWT1ILm9mZnNldFgsWj1ILm9mZnNldFksY2U9MDtjZTxxLmxlbmd0aDtjZSsrKXt2YXIgdmU9bS5sYXlvdXROb2Rlc1ttLmlkVG9JbmRleFtxW2NlXV1dO3ZlLm9mZnNldFgrPVksdmUub2Zmc2V0WSs9WixTWysrT109cVtjZV19SC5vZmZzZXRYPTAsSC5vZmZzZXRZPTB9fX0sUHJlPWZ1bmN0aW9uKG0sayl7Zm9yKHZhciBTPTA7UzxtLm5vZGVTaXplO1MrKyl7dmFyIE09bS5sYXlvdXROb2Rlc1tTXTswPE0uY2hpbGRyZW4ubGVuZ3RoJiYoTS5tYXhYPXZvaWQgMCxNLm1pblg9dm9pZCAwLE0ubWF4WT12b2lkIDAsTS5taW5ZPXZvaWQgMCl9Zm9yKHZhciBTPTA7UzxtLm5vZGVTaXplO1MrKyl7dmFyIE09bS5sYXlvdXROb2Rlc1tTXTtpZighKDA8TS5jaGlsZHJlbi5sZW5ndGh8fE0uaXNMb2NrZWQpKXt2YXIgTz1CcmUoTS5vZmZzZXRYLE0ub2Zmc2V0WSxtLnRlbXBlcmF0dXJlKTtNLnBvc2l0aW9uWCs9Ty54LE0ucG9zaXRpb25ZKz1PLnksTS5vZmZzZXRYPTAsTS5vZmZzZXRZPTAsTS5taW5YPU0ucG9zaXRpb25YLU0ud2lkdGgsTS5tYXhYPU0ucG9zaXRpb25YK00ud2lkdGgsTS5taW5ZPU0ucG9zaXRpb25ZLU0uaGVpZ2h0LE0ubWF4WT1NLnBvc2l0aW9uWStNLmhlaWdodCxGcmUoTSxtKX19Zm9yKHZhciBTPTA7UzxtLm5vZGVTaXplO1MrKyl7dmFyIE09bS5sYXlvdXROb2Rlc1tTXTswPE0uY2hpbGRyZW4ubGVuZ3RoJiYhTS5pc0xvY2tlZCYmKE0ucG9zaXRpb25YPShNLm1heFgrTS5taW5YKS8yLE0ucG9zaXRpb25ZPShNLm1heFkrTS5taW5ZKS8yLE0ud2lkdGg9TS5tYXhYLU0ubWluWCxNLmhlaWdodD1NLm1heFktTS5taW5ZKX19LEJyZT1mdW5jdGlvbihtLGssUyl7dmFyIE09TWF0aC5zcXJ0KG0qbStrKmspO2lmKE0+Uyl2YXIgTz17eDpTKm0vTSx5OlMqay9NfTtlbHNlIHZhciBPPXt4Om0seTprfTtyZXR1cm4gT30sRnJlPWZ1bmN0aW9uIHgobSxrKXt2YXIgUz1tLnBhcmVudElkO2lmKFMhPW51bGwpe3ZhciBNPWsubGF5b3V0Tm9kZXNbay5pZFRvSW5kZXhbU11dLE89ITE7aWYoKE0ubWF4WD09bnVsbHx8bS5tYXhYK00ucGFkUmlnaHQ+TS5tYXhYKSYmKE0ubWF4WD1tLm1heFgrTS5wYWRSaWdodCxPPSEwKSwoTS5taW5YPT1udWxsfHxtLm1pblgtTS5wYWRMZWZ0PE0ubWluWCkmJihNLm1pblg9bS5taW5YLU0ucGFkTGVmdCxPPSEwKSwoTS5tYXhZPT1udWxsfHxtLm1heFkrTS5wYWRCb3R0b20+TS5tYXhZKSYmKE0ubWF4WT1tLm1heFkrTS5wYWRCb3R0b20sTz0hMCksKE0ubWluWT09bnVsbHx8bS5taW5ZLU0ucGFkVG9wPE0ubWluWSkmJihNLm1pblk9bS5taW5ZLU0ucGFkVG9wLE89ITApLE8pcmV0dXJuIHgoTSxrKX19LFYkPWZ1bmN0aW9uKG0sayl7Zm9yKHZhciBTPW0ubGF5b3V0Tm9kZXMsTT1bXSxPPTA7TzxTLmxlbmd0aDtPKyspe3ZhciBOPVNbT10sJD1OLmNtcHRJZCxIPU1bJF09TVskXXx8W107SC5wdXNoKE4pfWZvcih2YXIgcT0wLE89MDtPPE0ubGVuZ3RoO08rKyl7dmFyIFk9TVtPXTtpZihZKXtZLngxPTEvMCxZLngyPS0xLzAsWS55MT0xLzAsWS55Mj0tMS8wO2Zvcih2YXIgWj0wO1o8WS5sZW5ndGg7WisrKXt2YXIgY2U9WVtaXTtZLngxPU1hdGgubWluKFkueDEsY2UucG9zaXRpb25YLWNlLndpZHRoLzIpLFkueDI9TWF0aC5tYXgoWS54MixjZS5wb3NpdGlvblgrY2Uud2lkdGgvMiksWS55MT1NYXRoLm1pbihZLnkxLGNlLnBvc2l0aW9uWS1jZS5oZWlnaHQvMiksWS55Mj1NYXRoLm1heChZLnkyLGNlLnBvc2l0aW9uWStjZS5oZWlnaHQvMil9WS53PVkueDItWS54MSxZLmg9WS55Mi1ZLnkxLHErPVkudypZLmh9fU0uc29ydChmdW5jdGlvbihCZSxSZSl7cmV0dXJuIFJlLncqUmUuaC1CZS53KkJlLmh9KTtmb3IodmFyIHZlPTAsbWU9MCxMZT0wLF9lPTAsRWU9TWF0aC5zcXJ0KHEpKm0uY2xpZW50V2lkdGgvbS5jbGllbnRIZWlnaHQsTz0wO088TS5sZW5ndGg7TysrKXt2YXIgWT1NW09dO2lmKFkpe2Zvcih2YXIgWj0wO1o8WS5sZW5ndGg7WisrKXt2YXIgY2U9WVtaXTtjZS5pc0xvY2tlZHx8KGNlLnBvc2l0aW9uWCs9dmUtWS54MSxjZS5wb3NpdGlvblkrPW1lLVkueTEpfXZlKz1ZLncray5jb21wb25lbnRTcGFjaW5nLExlKz1ZLncray5jb21wb25lbnRTcGFjaW5nLF9lPU1hdGgubWF4KF9lLFkuaCksTGU+RWUmJihtZSs9X2Uray5jb21wb25lbnRTcGFjaW5nLHZlPTAsTGU9MCxfZT0wKX19fSxScmU9e2ZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxhdm9pZE92ZXJsYXA6ITAsYXZvaWRPdmVybGFwUGFkZGluZzoxMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEsc3BhY2luZ0ZhY3Rvcjp2b2lkIDAsY29uZGVuc2U6ITEscm93czp2b2lkIDAsY29sczp2b2lkIDAscG9zaXRpb246ZnVuY3Rpb24obSl7fSxzb3J0OnZvaWQgMCxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6ZnVuY3Rpb24obSxrKXtyZXR1cm4hMH0scmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpmdW5jdGlvbihtLGspe3JldHVybiBrfX07ZnVuY3Rpb24gVSQoeCl7dGhpcy5vcHRpb25zPXl0KHt9LFJyZSx4KX1VJC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIHg9dGhpcy5vcHRpb25zLG09eCxrPXguY3ksUz1tLmVsZXMsTT1TLm5vZGVzKCkubm90KCI6cGFyZW50Iik7bS5zb3J0JiYoTT1NLnNvcnQobS5zb3J0KSk7dmFyIE89V2QobS5ib3VuZGluZ0JveD9tLmJvdW5kaW5nQm94Ont4MTowLHkxOjAsdzprLndpZHRoKCksaDprLmhlaWdodCgpfSk7aWYoTy5oPT09MHx8Ty53PT09MClTLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsbSxmdW5jdGlvbihFcil7cmV0dXJue3g6Ty54MSx5Ok8ueTF9fSk7ZWxzZXt2YXIgTj1NLnNpemUoKSwkPU1hdGguc3FydChOKk8uaC9PLncpLEg9TWF0aC5yb3VuZCgkKSxxPU1hdGgucm91bmQoTy53L08uaCokKSxZPWZ1bmN0aW9uKE1yKXtpZihNcj09bnVsbClyZXR1cm4gTWF0aC5taW4oSCxxKTt2YXIgQ3I9TWF0aC5taW4oSCxxKTtDcj09SD9IPU1yOnE9TXJ9LFo9ZnVuY3Rpb24oTXIpe2lmKE1yPT1udWxsKXJldHVybiBNYXRoLm1heChILHEpO3ZhciBDcj1NYXRoLm1heChILHEpO0NyPT1IP0g9TXI6cT1Ncn0sY2U9bS5yb3dzLHZlPW0uY29scyE9bnVsbD9tLmNvbHM6bS5jb2x1bW5zO2lmKGNlIT1udWxsJiZ2ZSE9bnVsbClIPWNlLHE9dmU7ZWxzZSBpZihjZSE9bnVsbCYmdmU9PW51bGwpSD1jZSxxPU1hdGguY2VpbChOL0gpO2Vsc2UgaWYoY2U9PW51bGwmJnZlIT1udWxsKXE9dmUsSD1NYXRoLmNlaWwoTi9xKTtlbHNlIGlmKHEqSD5OKXt2YXIgbWU9WSgpLExlPVooKTsobWUtMSkqTGU+PU4/WShtZS0xKTooTGUtMSkqbWU+PU4mJlooTGUtMSl9ZWxzZSBmb3IoO3EqSDxOOyl7dmFyIF9lPVkoKSxFZT1aKCk7KEVlKzEpKl9lPj1OP1ooRWUrMSk6WShfZSsxKX12YXIgQmU9Ty53L3EsUmU9Ty5oL0g7aWYobS5jb25kZW5zZSYmKEJlPTAsUmU9MCksbS5hdm9pZE92ZXJsYXApZm9yKHZhciBWZT0wO1ZlPE0ubGVuZ3RoO1ZlKyspe3ZhciBjdD1NW1ZlXSxzdD1jdC5fcHJpdmF0ZS5wb3NpdGlvbjsoc3QueD09bnVsbHx8c3QueT09bnVsbCkmJihzdC54PTAsc3QueT0wKTt2YXIgWWU9Y3QubGF5b3V0RGltZW5zaW9ucyhtKSxtdD1tLmF2b2lkT3ZlcmxhcFBhZGRpbmcsSmU9WWUudyttdCxMdD1ZZS5oK210O0JlPU1hdGgubWF4KEJlLEplKSxSZT1NYXRoLm1heChSZSxMdCl9Zm9yKHZhciBNdD17fSx1dD1mdW5jdGlvbihNcixDcil7cmV0dXJuISFNdFsiYy0iK01yKyItIitDcl19LFd0PWZ1bmN0aW9uKE1yLENyKXtNdFsiYy0iK01yKyItIitDcl09ITB9LFR0PTAsX249MCxobj1mdW5jdGlvbigpe19uKyssX24+PXEmJihfbj0wLFR0KyspfSxZdD17fSxEbj0wO0RuPE0ubGVuZ3RoO0RuKyspe3ZhciBpcj1NW0RuXSx2cj1tLnBvc2l0aW9uKGlyKTtpZih2ciYmKHZyLnJvdyE9PXZvaWQgMHx8dnIuY29sIT09dm9pZCAwKSl7dmFyIE5uPXtyb3c6dnIucm93LGNvbDp2ci5jb2x9O2lmKE5uLmNvbD09PXZvaWQgMClmb3IoTm4uY29sPTA7dXQoTm4ucm93LE5uLmNvbCk7KU5uLmNvbCsrO2Vsc2UgaWYoTm4ucm93PT09dm9pZCAwKWZvcihObi5yb3c9MDt1dChObi5yb3csTm4uY29sKTspTm4ucm93Kys7WXRbaXIuaWQoKV09Tm4sV3QoTm4ucm93LE5uLmNvbCl9fXZhciBwcj1mdW5jdGlvbihNcixDcil7dmFyIE9yLFduO2lmKE1yLmxvY2tlZCgpfHxNci5pc1BhcmVudCgpKXJldHVybiExO3ZhciBicj1ZdFtNci5pZCgpXTtpZihicilPcj1ici5jb2wqQmUrQmUvMitPLngxLFduPWJyLnJvdypSZStSZS8yK08ueTE7ZWxzZXtmb3IoO3V0KFR0LF9uKTspaG4oKTtPcj1fbipCZStCZS8yK08ueDEsV249VHQqUmUrUmUvMitPLnkxLFd0KFR0LF9uKSxobigpfXJldHVybnt4Ok9yLHk6V259fTtNLmxheW91dFBvc2l0aW9ucyh0aGlzLG0scHIpfXJldHVybiB0aGlzfTt2YXIganJlPXtyZWFkeTpmdW5jdGlvbigpe30sc3RvcDpmdW5jdGlvbigpe319O2Z1bmN0aW9uIFBJKHgpe3RoaXMub3B0aW9ucz15dCh7fSxqcmUseCl9UEkucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB4PXRoaXMub3B0aW9ucyxtPXguZWxlcyxrPXRoaXM7cmV0dXJuIHguY3ksay5lbWl0KCJsYXlvdXRzdGFydCIpLG0ubm9kZXMoKS5wb3NpdGlvbnMoZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MH19KSxrLm9uZSgibGF5b3V0cmVhZHkiLHgucmVhZHkpLGsuZW1pdCgibGF5b3V0cmVhZHkiKSxrLm9uZSgibGF5b3V0c3RvcCIseC5zdG9wKSxrLmVtaXQoImxheW91dHN0b3AiKSx0aGlzfSxQSS5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzfTt2YXIgJHJlPXtwb3NpdGlvbnM6dm9pZCAwLHpvb206dm9pZCAwLHBhbjp2b2lkIDAsZml0OiEwLHBhZGRpbmc6MzAsc3BhY2luZ0ZhY3Rvcjp2b2lkIDAsYW5pbWF0ZTohMSxhbmltYXRpb25EdXJhdGlvbjo1MDAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRlRmlsdGVyOmZ1bmN0aW9uKG0sayl7cmV0dXJuITB9LHJlYWR5OnZvaWQgMCxzdG9wOnZvaWQgMCx0cmFuc2Zvcm06ZnVuY3Rpb24obSxrKXtyZXR1cm4ga319O2Z1bmN0aW9uIEckKHgpe3RoaXMub3B0aW9ucz15dCh7fSwkcmUseCl9RyQucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB4PXRoaXMub3B0aW9ucyxtPXguZWxlcyxrPW0ubm9kZXMoKSxTPWFlKHgucG9zaXRpb25zKTtmdW5jdGlvbiBNKE8pe2lmKHgucG9zaXRpb25zPT1udWxsKXJldHVybiBzWihPLnBvc2l0aW9uKCkpO2lmKFMpcmV0dXJuIHgucG9zaXRpb25zKE8pO3ZhciBOPXgucG9zaXRpb25zW08uX3ByaXZhdGUuZGF0YS5pZF07cmV0dXJuIE4/P251bGx9cmV0dXJuIGsubGF5b3V0UG9zaXRpb25zKHRoaXMseCxmdW5jdGlvbihPLE4pe3ZhciAkPU0oTyk7cmV0dXJuIE8ubG9ja2VkKCl8fCQ9PW51bGw/ITE6JH0pLHRoaXN9O3ZhciB6cmU9e2ZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6ZnVuY3Rpb24obSxrKXtyZXR1cm4hMH0scmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpmdW5jdGlvbihtLGspe3JldHVybiBrfX07ZnVuY3Rpb24gSyQoeCl7dGhpcy5vcHRpb25zPXl0KHt9LHpyZSx4KX1LJC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIHg9dGhpcy5vcHRpb25zLG09eC5jeSxrPXguZWxlcyxTPVdkKHguYm91bmRpbmdCb3g/eC5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6bS53aWR0aCgpLGg6bS5oZWlnaHQoKX0pLE09ZnVuY3Rpb24oTiwkKXtyZXR1cm57eDpTLngxK01hdGgucm91bmQoTWF0aC5yYW5kb20oKSpTLncpLHk6Uy55MStNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqUy5oKX19O3JldHVybiBrLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMseCxNKSx0aGlzfTt2YXIgcXJlPVt7bmFtZToiYnJlYWR0aGZpcnN0IixpbXBsOmokfSx7bmFtZToiY2lyY2xlIixpbXBsOiQkfSx7bmFtZToiY29uY2VudHJpYyIsaW1wbDp6JH0se25hbWU6ImNvc2UiLGltcGw6SFN9LHtuYW1lOiJncmlkIixpbXBsOlUkfSx7bmFtZToibnVsbCIsaW1wbDpQSX0se25hbWU6InByZXNldCIsaW1wbDpHJH0se25hbWU6InJhbmRvbSIsaW1wbDpLJH1dO2Z1bmN0aW9uIFckKHgpe3RoaXMub3B0aW9ucz14LHRoaXMubm90aWZpY2F0aW9ucz0wfXZhciBZJD1mdW5jdGlvbigpe30sWCQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIkEgaGVhZGxlc3MgaW5zdGFuY2UgY2FuIG5vdCByZW5kZXIgaW1hZ2VzIil9O1ckLnByb3RvdHlwZT17cmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlOlkkLG5vdGlmeTpmdW5jdGlvbigpe3RoaXMubm90aWZpY2F0aW9ucysrfSxpbml0OlkkLGlzSGVhZGxlc3M6ZnVuY3Rpb24oKXtyZXR1cm4hMH0scG5nOlgkLGpwZzpYJH07dmFyIEJJPXt9O0JJLmFycm93U2hhcGVXaWR0aD0uMyxCSS5yZWdpc3RlckFycm93U2hhcGVzPWZ1bmN0aW9uKCl7dmFyIHg9dGhpcy5hcnJvd1NoYXBlcz17fSxtPXRoaXMsaz1mdW5jdGlvbihxLFksWixjZSx2ZSxtZSxMZSl7dmFyIF9lPXZlLngtWi8yLUxlLEVlPXZlLngrWi8yK0xlLEJlPXZlLnktWi8yLUxlLFJlPXZlLnkrWi8yK0xlLFZlPV9lPD1xJiZxPD1FZSYmQmU8PVkmJlk8PVJlO3JldHVybiBWZX0sUz1mdW5jdGlvbihxLFksWixjZSx2ZSl7dmFyIG1lPXEqTWF0aC5jb3MoY2UpLVkqTWF0aC5zaW4oY2UpLExlPXEqTWF0aC5zaW4oY2UpK1kqTWF0aC5jb3MoY2UpLF9lPW1lKlosRWU9TGUqWixCZT1fZSt2ZS54LFJlPUVlK3ZlLnk7cmV0dXJue3g6QmUseTpSZX19LE09ZnVuY3Rpb24ocSxZLFosY2Upe2Zvcih2YXIgdmU9W10sbWU9MDttZTxxLmxlbmd0aDttZSs9Mil7dmFyIExlPXFbbWVdLF9lPXFbbWUrMV07dmUucHVzaChTKExlLF9lLFksWixjZSkpfXJldHVybiB2ZX0sTz1mdW5jdGlvbihxKXtmb3IodmFyIFk9W10sWj0wO1o8cS5sZW5ndGg7WisrKXt2YXIgY2U9cVtaXTtZLnB1c2goY2UueCxjZS55KX1yZXR1cm4gWX0sTj1mdW5jdGlvbihxKXtyZXR1cm4gcS5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSpxLnBzdHlsZSgiYXJyb3ctc2NhbGUiKS5wZlZhbHVlKjJ9LCQ9ZnVuY3Rpb24ocSxZKXtiZShZKSYmKFk9eFtZXSkseFtxXT15dCh7bmFtZTpxLHBvaW50czpbLS4xNSwtLjMsLjE1LC0uMywuMTUsLjMsLS4xNSwuM10sY29sbGlkZTpmdW5jdGlvbihjZSx2ZSxtZSxMZSxfZSxFZSl7dmFyIEJlPU8oTSh0aGlzLnBvaW50cyxtZSsyKkVlLExlLF9lKSksUmU9WWQoY2UsdmUsQmUpO3JldHVybiBSZX0scm91Z2hDb2xsaWRlOmssZHJhdzpmdW5jdGlvbihjZSx2ZSxtZSxMZSl7dmFyIF9lPU0odGhpcy5wb2ludHMsdmUsbWUsTGUpO20uYXJyb3dTaGFwZUltcGwoInBvbHlnb24iKShjZSxfZSl9LHNwYWNpbmc6ZnVuY3Rpb24oY2Upe3JldHVybiAwfSxnYXA6Tn0sWSl9OyQoIm5vbmUiLHtjb2xsaWRlOlgzLHJvdWdoQ29sbGlkZTpYMyxkcmF3Om5JLHNwYWNpbmc6RnAsZ2FwOkZwfSksJCgidHJpYW5nbGUiLHtwb2ludHM6Wy0uMTUsLS4zLDAsMCwuMTUsLS4zXX0pLCQoImFycm93IiwidHJpYW5nbGUiKSwkKCJ0cmlhbmdsZS1iYWNrY3VydmUiLHtwb2ludHM6eC50cmlhbmdsZS5wb2ludHMsY29udHJvbFBvaW50OlswLC0uMTVdLHJvdWdoQ29sbGlkZTprLGRyYXc6ZnVuY3Rpb24ocSxZLFosY2UsdmUpe3ZhciBtZT1NKHRoaXMucG9pbnRzLFksWixjZSksTGU9dGhpcy5jb250cm9sUG9pbnQsX2U9UyhMZVswXSxMZVsxXSxZLFosY2UpO20uYXJyb3dTaGFwZUltcGwodGhpcy5uYW1lKShxLG1lLF9lKX0sZ2FwOmZ1bmN0aW9uKHEpe3JldHVybiBOKHEpKi44fX0pLCQoInRyaWFuZ2xlLXRlZSIse3BvaW50czpbMCwwLC4xNSwtLjMsLS4xNSwtLjMsMCwwXSxwb2ludHNUZWU6Wy0uMTUsLS40LC0uMTUsLS41LC4xNSwtLjUsLjE1LC0uNF0sY29sbGlkZTpmdW5jdGlvbihxLFksWixjZSx2ZSxtZSxMZSl7dmFyIF9lPU8oTSh0aGlzLnBvaW50cyxaKzIqTGUsY2UsdmUpKSxFZT1PKE0odGhpcy5wb2ludHNUZWUsWisyKkxlLGNlLHZlKSksQmU9WWQocSxZLF9lKXx8WWQocSxZLEVlKTtyZXR1cm4gQmV9LGRyYXc6ZnVuY3Rpb24ocSxZLFosY2UsdmUpe3ZhciBtZT1NKHRoaXMucG9pbnRzLFksWixjZSksTGU9TSh0aGlzLnBvaW50c1RlZSxZLFosY2UpO20uYXJyb3dTaGFwZUltcGwodGhpcy5uYW1lKShxLG1lLExlKX19KSwkKCJjaXJjbGUtdHJpYW5nbGUiLHtyYWRpdXM6LjE1LHBvaW50c1RyOlswLC0uMTUsLjE1LC0uNDUsLS4xNSwtLjQ1LDAsLS4xNV0sY29sbGlkZTpmdW5jdGlvbihxLFksWixjZSx2ZSxtZSxMZSl7dmFyIF9lPXZlLEVlPU1hdGgucG93KF9lLngtcSwyKStNYXRoLnBvdyhfZS55LVksMik8PU1hdGgucG93KChaKzIqTGUpKnRoaXMucmFkaXVzLDIpLEJlPU8oTSh0aGlzLnBvaW50cyxaKzIqTGUsY2UsdmUpKTtyZXR1cm4gWWQocSxZLEJlKXx8RWV9LGRyYXc6ZnVuY3Rpb24ocSxZLFosY2UsdmUpe3ZhciBtZT1NKHRoaXMucG9pbnRzVHIsWSxaLGNlKTttLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkocSxtZSxjZS54LGNlLnksdGhpcy5yYWRpdXMqWSl9LHNwYWNpbmc6ZnVuY3Rpb24ocSl7cmV0dXJuIG0uZ2V0QXJyb3dXaWR0aChxLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLHEucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlKSp0aGlzLnJhZGl1c319KSwkKCJ0cmlhbmdsZS1jcm9zcyIse3BvaW50czpbMCwwLC4xNSwtLjMsLS4xNSwtLjMsMCwwXSxiYXNlQ3Jvc3NMaW5lUHRzOlstLjE1LC0uNCwtLjE1LC0uNCwuMTUsLS40LC4xNSwtLjRdLGNyb3NzTGluZVB0czpmdW5jdGlvbihxLFkpe3ZhciBaPXRoaXMuYmFzZUNyb3NzTGluZVB0cy5zbGljZSgpLGNlPVkvcSx2ZT0zLG1lPTU7cmV0dXJuIFpbdmVdPVpbdmVdLWNlLFpbbWVdPVpbbWVdLWNlLFp9LGNvbGxpZGU6ZnVuY3Rpb24ocSxZLFosY2UsdmUsbWUsTGUpe3ZhciBfZT1PKE0odGhpcy5wb2ludHMsWisyKkxlLGNlLHZlKSksRWU9TyhNKHRoaXMuY3Jvc3NMaW5lUHRzKFosbWUpLForMipMZSxjZSx2ZSkpLEJlPVlkKHEsWSxfZSl8fFlkKHEsWSxFZSk7cmV0dXJuIEJlfSxkcmF3OmZ1bmN0aW9uKHEsWSxaLGNlLHZlKXt2YXIgbWU9TSh0aGlzLnBvaW50cyxZLFosY2UpLExlPU0odGhpcy5jcm9zc0xpbmVQdHMoWSx2ZSksWSxaLGNlKTttLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkocSxtZSxMZSl9fSksJCgidmVlIix7cG9pbnRzOlstLjE1LC0uMywwLDAsLjE1LC0uMywwLC0uMTVdLGdhcDpmdW5jdGlvbihxKXtyZXR1cm4gTihxKSouNTI1fX0pLCQoImNpcmNsZSIse3JhZGl1czouMTUsY29sbGlkZTpmdW5jdGlvbihxLFksWixjZSx2ZSxtZSxMZSl7dmFyIF9lPXZlLEVlPU1hdGgucG93KF9lLngtcSwyKStNYXRoLnBvdyhfZS55LVksMik8PU1hdGgucG93KChaKzIqTGUpKnRoaXMucmFkaXVzLDIpO3JldHVybiBFZX0sZHJhdzpmdW5jdGlvbihxLFksWixjZSx2ZSl7bS5hcnJvd1NoYXBlSW1wbCh0aGlzLm5hbWUpKHEsY2UueCxjZS55LHRoaXMucmFkaXVzKlkpfSxzcGFjaW5nOmZ1bmN0aW9uKHEpe3JldHVybiBtLmdldEFycm93V2lkdGgocS5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSxxLnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZSkqdGhpcy5yYWRpdXN9fSksJCgidGVlIix7cG9pbnRzOlstLjE1LDAsLS4xNSwtLjEsLjE1LC0uMSwuMTUsMF0sc3BhY2luZzpmdW5jdGlvbihxKXtyZXR1cm4gMX0sZ2FwOmZ1bmN0aW9uKHEpe3JldHVybiAxfX0pLCQoInNxdWFyZSIse3BvaW50czpbLS4xNSwwLC4xNSwwLC4xNSwtLjMsLS4xNSwtLjNdfSksJCgiZGlhbW9uZCIse3BvaW50czpbLS4xNSwtLjE1LDAsLS4zLC4xNSwtLjE1LDAsMF0sZ2FwOmZ1bmN0aW9uKHEpe3JldHVybiBxLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlKnEucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlfX0pLCQoImNoZXZyb24iLHtwb2ludHM6WzAsMCwtLjE1LC0uMTUsLS4xLC0uMiwwLC0uMSwuMSwtLjIsLjE1LC0uMTVdLGdhcDpmdW5jdGlvbihxKXtyZXR1cm4gLjk1KnEucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUqcS5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWV9fSl9O3ZhciB3NT17fTt3NS5wcm9qZWN0SW50b1ZpZXdwb3J0PWZ1bmN0aW9uKHgsbSl7dmFyIGs9dGhpcy5jeSxTPXRoaXMuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLE09U1swXSxPPVNbMV0sTj1TWzRdLCQ9ay5wYW4oKSxIPWsuem9vbSgpLHE9KCh4LU0pL04tJC54KS9ILFk9KChtLU8pL04tJC55KS9IO3JldHVybltxLFldfSx3NS5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzPWZ1bmN0aW9uKCl7aWYodGhpcy5jb250YWluZXJCQilyZXR1cm4gdGhpcy5jb250YWluZXJCQjt2YXIgeD10aGlzLmNvbnRhaW5lcixtPXguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaz10aGlzLmN5LndpbmRvdygpLmdldENvbXB1dGVkU3R5bGUoeCksUz1mdW5jdGlvbihFZSl7cmV0dXJuIHBhcnNlRmxvYXQoay5nZXRQcm9wZXJ0eVZhbHVlKEVlKSl9LE09e2xlZnQ6UygicGFkZGluZy1sZWZ0IikscmlnaHQ6UygicGFkZGluZy1yaWdodCIpLHRvcDpTKCJwYWRkaW5nLXRvcCIpLGJvdHRvbTpTKCJwYWRkaW5nLWJvdHRvbSIpfSxPPXtsZWZ0OlMoImJvcmRlci1sZWZ0LXdpZHRoIikscmlnaHQ6UygiYm9yZGVyLXJpZ2h0LXdpZHRoIiksdG9wOlMoImJvcmRlci10b3Atd2lkdGgiKSxib3R0b206UygiYm9yZGVyLWJvdHRvbS13aWR0aCIpfSxOPXguY2xpZW50V2lkdGgsJD14LmNsaWVudEhlaWdodCxIPU0ubGVmdCtNLnJpZ2h0LHE9TS50b3ArTS5ib3R0b20sWT1PLmxlZnQrTy5yaWdodCxaPW0ud2lkdGgvKE4rWSksY2U9Ti1ILHZlPSQtcSxtZT1tLmxlZnQrTS5sZWZ0K08ubGVmdCxMZT1tLnRvcCtNLnRvcCtPLnRvcDtyZXR1cm4gdGhpcy5jb250YWluZXJCQj1bbWUsTGUsY2UsdmUsWl19LHc1LmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZT1mdW5jdGlvbigpe3RoaXMuY29udGFpbmVyQkI9bnVsbH0sdzUuZmluZE5lYXJlc3RFbGVtZW50PWZ1bmN0aW9uKHgsbSxrLFMpe3JldHVybiB0aGlzLmZpbmROZWFyZXN0RWxlbWVudHMoeCxtLGssUylbMF19LHc1LmZpbmROZWFyZXN0RWxlbWVudHM9ZnVuY3Rpb24oeCxtLGssUyl7dmFyIE09dGhpcyxPPXRoaXMsTj1PLmdldENhY2hlZFpTb3J0ZWRFbGVzKCksJD1bXSxIPU8uY3kuem9vbSgpLHE9Ty5jeS5oYXNDb21wb3VuZE5vZGVzKCksWT0oUz8yNDo4KS9ILFo9KFM/ODoyKS9ILGNlPShTPzg6MikvSCx2ZT0xLzAsbWUsTGU7ayYmKE49Ti5pbnRlcmFjdGl2ZSk7ZnVuY3Rpb24gX2UoWWUsbXQpe2lmKFllLmlzTm9kZSgpKXtpZihMZSlyZXR1cm47TGU9WWUsJC5wdXNoKFllKX1pZihZZS5pc0VkZ2UoKSYmKG10PT1udWxsfHxtdDx2ZSkpaWYobWUpe2lmKG1lLnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpLnZhbHVlPT09WWUucHN0eWxlKCJ6LWNvbXBvdW5kLWRlcHRoIikudmFsdWUmJm1lLnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpLnZhbHVlPT09WWUucHN0eWxlKCJ6LWNvbXBvdW5kLWRlcHRoIikudmFsdWUpe2Zvcih2YXIgSmU9MDtKZTwkLmxlbmd0aDtKZSsrKWlmKCRbSmVdLmlzRWRnZSgpKXskW0plXT1ZZSxtZT1ZZSx2ZT1tdD8/dmU7YnJlYWt9fX1lbHNlICQucHVzaChZZSksbWU9WWUsdmU9bXQ/P3ZlfWZ1bmN0aW9uIEVlKFllKXt2YXIgbXQ9WWUub3V0ZXJXaWR0aCgpKzIqWixKZT1ZZS5vdXRlckhlaWdodCgpKzIqWixMdD1tdC8yLE10PUplLzIsdXQ9WWUucG9zaXRpb24oKTtpZih1dC54LUx0PD14JiZ4PD11dC54K0x0JiZ1dC55LU10PD1tJiZtPD11dC55K010KXt2YXIgV3Q9Ty5ub2RlU2hhcGVzW00uZ2V0Tm9kZVNoYXBlKFllKV07aWYoV3QuY2hlY2tQb2ludCh4LG0sMCxtdCxKZSx1dC54LHV0LnkpKXJldHVybiBfZShZZSwwKSwhMH19ZnVuY3Rpb24gQmUoWWUpe3ZhciBtdD1ZZS5fcHJpdmF0ZSxKZT1tdC5yc2NyYXRjaCxMdD1ZZS5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSxNdD1ZZS5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUsdXQ9THQvMitZLFd0PXV0KnV0LFR0PXV0KjIsRG49bXQuc291cmNlLGlyPW10LnRhcmdldCxfbjtpZihKZS5lZGdlVHlwZT09PSJzZWdtZW50cyJ8fEplLmVkZ2VUeXBlPT09InN0cmFpZ2h0Inx8SmUuZWRnZVR5cGU9PT0iaGF5c3RhY2siKXtmb3IodmFyIGhuPUplLmFsbHB0cyxZdD0wO1l0KzM8aG4ubGVuZ3RoO1l0Kz0yKWlmKHZaKHgsbSxobltZdF0saG5bWXQrMV0saG5bWXQrMl0saG5bWXQrM10sVHQpJiZXdD4oX249RVooeCxtLGhuW1l0XSxobltZdCsxXSxobltZdCsyXSxobltZdCszXSkpKXJldHVybiBfZShZZSxfbiksITB9ZWxzZSBpZihKZS5lZGdlVHlwZT09PSJiZXppZXIifHxKZS5lZGdlVHlwZT09PSJtdWx0aWJlemllciJ8fEplLmVkZ2VUeXBlPT09InNlbGYifHxKZS5lZGdlVHlwZT09PSJjb21wb3VuZCIpe2Zvcih2YXIgaG49SmUuYWxscHRzLFl0PTA7WXQrNTxKZS5hbGxwdHMubGVuZ3RoO1l0Kz00KWlmKHdaKHgsbSxobltZdF0saG5bWXQrMV0saG5bWXQrMl0saG5bWXQrM10saG5bWXQrNF0saG5bWXQrNV0sVHQpJiZXdD4oX249a1ooeCxtLGhuW1l0XSxobltZdCsxXSxobltZdCsyXSxobltZdCszXSxobltZdCs0XSxobltZdCs1XSkpKXJldHVybiBfZShZZSxfbiksITB9Zm9yKHZhciBEbj1Ebnx8bXQuc291cmNlLGlyPWlyfHxtdC50YXJnZXQsdnI9TS5nZXRBcnJvd1dpZHRoKEx0LE10KSxObj1be25hbWU6InNvdXJjZSIseDpKZS5hcnJvd1N0YXJ0WCx5OkplLmFycm93U3RhcnRZLGFuZ2xlOkplLnNyY0Fycm93QW5nbGV9LHtuYW1lOiJ0YXJnZXQiLHg6SmUuYXJyb3dFbmRYLHk6SmUuYXJyb3dFbmRZLGFuZ2xlOkplLnRndEFycm93QW5nbGV9LHtuYW1lOiJtaWQtc291cmNlIix4OkplLm1pZFgseTpKZS5taWRZLGFuZ2xlOkplLm1pZHNyY0Fycm93QW5nbGV9LHtuYW1lOiJtaWQtdGFyZ2V0Iix4OkplLm1pZFgseTpKZS5taWRZLGFuZ2xlOkplLm1pZHRndEFycm93QW5nbGV9XSxZdD0wO1l0PE5uLmxlbmd0aDtZdCsrKXt2YXIgcHI9Tm5bWXRdLEVyPU8uYXJyb3dTaGFwZXNbWWUucHN0eWxlKHByLm5hbWUrIi1hcnJvdy1zaGFwZSIpLnZhbHVlXSxNcj1ZZS5wc3R5bGUoIndpZHRoIikucGZWYWx1ZTtpZihFci5yb3VnaENvbGxpZGUoeCxtLHZyLHByLmFuZ2xlLHt4OnByLngseTpwci55fSxNcixZKSYmRXIuY29sbGlkZSh4LG0sdnIscHIuYW5nbGUse3g6cHIueCx5OnByLnl9LE1yLFkpKXJldHVybiBfZShZZSksITB9cSYmJC5sZW5ndGg+MCYmKEVlKERuKSxFZShpcikpfWZ1bmN0aW9uIFJlKFllLG10LEplKXtyZXR1cm4gSzIoWWUsbXQsSmUpfWZ1bmN0aW9uIFZlKFllLG10KXt2YXIgSmU9WWUuX3ByaXZhdGUsTHQ9Y2UsTXQ7bXQ/TXQ9bXQrIi0iOk10PSIiLFllLmJvdW5kaW5nQm94KCk7dmFyIHV0PUplLmxhYmVsQm91bmRzW210fHwibWFpbiJdLFd0PVllLnBzdHlsZShNdCsibGFiZWwiKS52YWx1ZSxUdD1ZZS5wc3R5bGUoInRleHQtZXZlbnRzIikuc3RyVmFsdWU9PT0ieWVzIjtpZighKCFUdHx8IVd0KSl7dmFyIF9uPVJlKEplLnJzY3JhdGNoLCJsYWJlbFgiLG10KSxobj1SZShKZS5yc2NyYXRjaCwibGFiZWxZIixtdCksWXQ9UmUoSmUucnNjcmF0Y2gsImxhYmVsQW5nbGUiLG10KSxEbj1ZZS5wc3R5bGUoTXQrInRleHQtbWFyZ2luLXgiKS5wZlZhbHVlLGlyPVllLnBzdHlsZShNdCsidGV4dC1tYXJnaW4teSIpLnBmVmFsdWUsdnI9dXQueDEtTHQtRG4sTm49dXQueDIrTHQtRG4scHI9dXQueTEtTHQtaXIsRXI9dXQueTIrTHQtaXI7aWYoWXQpe3ZhciBNcj1NYXRoLmNvcyhZdCksQ3I9TWF0aC5zaW4oWXQpLE9yPWZ1bmN0aW9uKHBhLE1pKXtyZXR1cm4gcGE9cGEtX24sTWk9TWktaG4se3g6cGEqTXItTWkqQ3IrX24seTpwYSpDcitNaSpNcitobn19LFduPU9yKHZyLHByKSxicj1Pcih2cixFciksU3I9T3IoTm4scHIpLE5yPU9yKE5uLEVyKSxTaT1bV24ueCtEbixXbi55K2lyLFNyLngrRG4sU3IueStpcixOci54K0RuLE5yLnkraXIsYnIueCtEbixici55K2lyXTtpZihZZCh4LG0sU2kpKXJldHVybiBfZShZZSksITB9ZWxzZSBpZihlOCh1dCx4LG0pKXJldHVybiBfZShZZSksITB9fWZvcih2YXIgY3Q9Ti5sZW5ndGgtMTtjdD49MDtjdC0tKXt2YXIgc3Q9TltjdF07c3QuaXNOb2RlKCk/RWUoc3QpfHxWZShzdCk6QmUoc3QpfHxWZShzdCl8fFZlKHN0LCJzb3VyY2UiKXx8VmUoc3QsInRhcmdldCIpfXJldHVybiAkfSx3NS5nZXRBbGxJbkJveD1mdW5jdGlvbih4LG0sayxTKXt2YXIgTT10aGlzLmdldENhY2hlZFpTb3J0ZWRFbGVzKCkuaW50ZXJhY3RpdmUsTz1bXSxOPU1hdGgubWluKHgsayksJD1NYXRoLm1heCh4LGspLEg9TWF0aC5taW4obSxTKSxxPU1hdGgubWF4KG0sUyk7eD1OLGs9JCxtPUgsUz1xO2Zvcih2YXIgWT1XZCh7eDE6eCx5MTptLHgyOmsseTI6U30pLFo9MDtaPE0ubGVuZ3RoO1orKyl7dmFyIGNlPU1bWl07aWYoY2UuaXNOb2RlKCkpe3ZhciB2ZT1jZSxtZT12ZS5ib3VuZGluZ0JveCh7aW5jbHVkZU5vZGVzOiEwLGluY2x1ZGVFZGdlczohMSxpbmNsdWRlTGFiZWxzOiExfSk7c0koWSxtZSkmJiFwaihtZSxZKSYmTy5wdXNoKHZlKX1lbHNle3ZhciBMZT1jZSxfZT1MZS5fcHJpdmF0ZSxFZT1fZS5yc2NyYXRjaDtpZihFZS5zdGFydFghPW51bGwmJkVlLnN0YXJ0WSE9bnVsbCYmIWU4KFksRWUuc3RhcnRYLEVlLnN0YXJ0WSl8fEVlLmVuZFghPW51bGwmJkVlLmVuZFkhPW51bGwmJiFlOChZLEVlLmVuZFgsRWUuZW5kWSkpY29udGludWU7aWYoRWUuZWRnZVR5cGU9PT0iYmV6aWVyInx8RWUuZWRnZVR5cGU9PT0ibXVsdGliZXppZXIifHxFZS5lZGdlVHlwZT09PSJzZWxmInx8RWUuZWRnZVR5cGU9PT0iY29tcG91bmQifHxFZS5lZGdlVHlwZT09PSJzZWdtZW50cyJ8fEVlLmVkZ2VUeXBlPT09ImhheXN0YWNrIil7Zm9yKHZhciBCZT1fZS5yc3R5bGUuYmV6aWVyUHRzfHxfZS5yc3R5bGUubGluZVB0c3x8X2UucnN0eWxlLmhheXN0YWNrUHRzLFJlPSEwLFZlPTA7VmU8QmUubGVuZ3RoO1ZlKyspaWYoIW1aKFksQmVbVmVdKSl7UmU9ITE7YnJlYWt9UmUmJk8ucHVzaChMZSl9ZWxzZShFZS5lZGdlVHlwZT09PSJoYXlzdGFjayJ8fEVlLmVkZ2VUeXBlPT09InN0cmFpZ2h0IikmJk8ucHVzaChMZSl9fXJldHVybiBPfTt2YXIgVVM9e307VVMuY2FsY3VsYXRlQXJyb3dBbmdsZXM9ZnVuY3Rpb24oeCl7dmFyIG09eC5fcHJpdmF0ZS5yc2NyYXRjaCxrPW0uZWRnZVR5cGU9PT0iaGF5c3RhY2siLFM9bS5lZGdlVHlwZT09PSJiZXppZXIiLE09bS5lZGdlVHlwZT09PSJtdWx0aWJlemllciIsTz1tLmVkZ2VUeXBlPT09InNlZ21lbnRzIixOPW0uZWRnZVR5cGU9PT0iY29tcG91bmQiLCQ9bS5lZGdlVHlwZT09PSJzZWxmIixILHEsWSxaLGNlLHZlLEVlLEJlO2lmKGs/KFk9bS5oYXlzdGFja1B0c1swXSxaPW0uaGF5c3RhY2tQdHNbMV0sY2U9bS5oYXlzdGFja1B0c1syXSx2ZT1tLmhheXN0YWNrUHRzWzNdKTooWT1tLmFycm93U3RhcnRYLFo9bS5hcnJvd1N0YXJ0WSxjZT1tLmFycm93RW5kWCx2ZT1tLmFycm93RW5kWSksRWU9bS5taWRYLEJlPW0ubWlkWSxPKUg9WS1tLnNlZ3B0c1swXSxxPVotbS5zZWdwdHNbMV07ZWxzZSBpZihNfHxOfHwkfHxTKXt2YXIgbWU9bS5hbGxwdHMsTGU9dDAobWVbMF0sbWVbMl0sbWVbNF0sLjEpLF9lPXQwKG1lWzFdLG1lWzNdLG1lWzVdLC4xKTtIPVktTGUscT1aLV9lfWVsc2UgSD1ZLUVlLHE9Wi1CZTttLnNyY0Fycm93QW5nbGU9aFMoSCxxKTt2YXIgRWU9bS5taWRYLEJlPW0ubWlkWTtpZihrJiYoRWU9KFkrY2UpLzIsQmU9KFordmUpLzIpLEg9Y2UtWSxxPXZlLVosTyl7dmFyIG1lPW0uYWxscHRzO2lmKG1lLmxlbmd0aC8yJTI9PT0wKXt2YXIgUmU9bWUubGVuZ3RoLzIsVmU9UmUtMjtIPW1lW1JlXS1tZVtWZV0scT1tZVtSZSsxXS1tZVtWZSsxXX1lbHNle3ZhciBSZT1tZS5sZW5ndGgvMi0xLFZlPVJlLTIsY3Q9UmUrMjtIPW1lW1JlXS1tZVtWZV0scT1tZVtSZSsxXS1tZVtWZSsxXX19ZWxzZSBpZihNfHxOfHwkKXt2YXIgbWU9bS5hbGxwdHMsc3Q9bS5jdHJscHRzLFllLG10LEplLEx0O2lmKHN0Lmxlbmd0aC8yJTI9PT0wKXt2YXIgTXQ9bWUubGVuZ3RoLzItMSx1dD1NdCsyLFd0PXV0KzI7WWU9dDAobWVbTXRdLG1lW3V0XSxtZVtXdF0sMCksbXQ9dDAobWVbTXQrMV0sbWVbdXQrMV0sbWVbV3QrMV0sMCksSmU9dDAobWVbTXRdLG1lW3V0XSxtZVtXdF0sMWUtNCksTHQ9dDAobWVbTXQrMV0sbWVbdXQrMV0sbWVbV3QrMV0sMWUtNCl9ZWxzZXt2YXIgdXQ9bWUubGVuZ3RoLzItMSxNdD11dC0yLFd0PXV0KzI7WWU9dDAobWVbTXRdLG1lW3V0XSxtZVtXdF0sLjQ5OTkpLG10PXQwKG1lW010KzFdLG1lW3V0KzFdLG1lW1d0KzFdLC40OTk5KSxKZT10MChtZVtNdF0sbWVbdXRdLG1lW1d0XSwuNSksTHQ9dDAobWVbTXQrMV0sbWVbdXQrMV0sbWVbV3QrMV0sLjUpfUg9SmUtWWUscT1MdC1tdH1pZihtLm1pZHRndEFycm93QW5nbGU9aFMoSCxxKSxtLm1pZERpc3BYPUgsbS5taWREaXNwWT1xLEgqPS0xLHEqPS0xLE8pe3ZhciBtZT1tLmFsbHB0cztpZihtZS5sZW5ndGgvMiUyIT09MCl7dmFyIFJlPW1lLmxlbmd0aC8yLTEsY3Q9UmUrMjtIPS0obWVbY3RdLW1lW1JlXSkscT0tKG1lW2N0KzFdLW1lW1JlKzFdKX19aWYobS5taWRzcmNBcnJvd0FuZ2xlPWhTKEgscSksTylIPWNlLW0uc2VncHRzW20uc2VncHRzLmxlbmd0aC0yXSxxPXZlLW0uc2VncHRzW20uc2VncHRzLmxlbmd0aC0xXTtlbHNlIGlmKE18fE58fCR8fFMpe3ZhciBtZT1tLmFsbHB0cyxUdD1tZS5sZW5ndGgsTGU9dDAobWVbVHQtNl0sbWVbVHQtNF0sbWVbVHQtMl0sLjkpLF9lPXQwKG1lW1R0LTVdLG1lW1R0LTNdLG1lW1R0LTFdLC45KTtIPWNlLUxlLHE9dmUtX2V9ZWxzZSBIPWNlLUVlLHE9dmUtQmU7bS50Z3RBcnJvd0FuZ2xlPWhTKEgscSl9LFVTLmdldEFycm93V2lkdGg9VVMuZ2V0QXJyb3dIZWlnaHQ9ZnVuY3Rpb24oeCxtKXt2YXIgaz10aGlzLmFycm93V2lkdGhDYWNoZT10aGlzLmFycm93V2lkdGhDYWNoZXx8e30sUz1rW3grIiwgIittXTtyZXR1cm4gU3x8KFM9TWF0aC5tYXgoTWF0aC5wb3coeCoxMy4zNywuOSksMjkpKm0sa1t4KyIsICIrbV09UyxTKX07dmFyIFMxPXt9O1MxLmZpbmRNaWRwdFB0c0V0Yz1mdW5jdGlvbih4LG0pe3ZhciBrPW0ucG9zUHRzLFM9bS5pbnRlcnNlY3Rpb25QdHMsTT1tLnZlY3Rvck5vcm1JbnZlcnNlLE8sTj14LnBzdHlsZSgic291cmNlLWVuZHBvaW50IiksJD14LnBzdHlsZSgidGFyZ2V0LWVuZHBvaW50IiksSD1OLnVuaXRzIT1udWxsJiYkLnVuaXRzIT1udWxsLHE9ZnVuY3Rpb24oY3Qsc3QsWWUsbXQpe3ZhciBKZT1tdC1zdCxMdD1ZZS1jdCxNdD1NYXRoLnNxcnQoTHQqTHQrSmUqSmUpO3JldHVybnt4Oi1KZS9NdCx5Okx0L010fX0sWT14LnBzdHlsZSgiZWRnZS1kaXN0YW5jZXMiKS52YWx1ZTtzd2l0Y2goWSl7Y2FzZSJub2RlLXBvc2l0aW9uIjpPPWs7YnJlYWs7Y2FzZSJpbnRlcnNlY3Rpb24iOk89UzticmVhaztjYXNlImVuZHBvaW50cyI6e2lmKEgpe3ZhciBaPXRoaXMubWFudWFsRW5kcHRUb1B4KHguc291cmNlKClbMF0sTiksY2U9eShaLDIpLHZlPWNlWzBdLG1lPWNlWzFdLExlPXRoaXMubWFudWFsRW5kcHRUb1B4KHgudGFyZ2V0KClbMF0sJCksX2U9eShMZSwyKSxFZT1fZVswXSxCZT1fZVsxXSxSZT17eDE6dmUseTE6bWUseDI6RWUseTI6QmV9O009cSh2ZSxtZSxFZSxCZSksTz1SZX1lbHNlIGh1KCJFZGdlICIuY29uY2F0KHguaWQoKSwiIGhhcyBlZGdlLWRpc3RhbmNlczplbmRwb2ludHMgc3BlY2lmaWVkIHdpdGhvdXQgbWFudWFsIGVuZHBvaW50cyBzcGVjaWZpZWQgdmlhIHNvdXJjZS1lbmRwb2ludCBhbmQgdGFyZ2V0LWVuZHBvaW50LiAgRmFsbGluZyBiYWNrIG9uIGVkZ2UtZGlzdGFuY2VzOmludGVyc2VjdGlvbiAoZGVmYXVsdCkuIikpLE89UzticmVha319cmV0dXJue21pZHB0UHRzOk8sdmVjdG9yTm9ybUludmVyc2U6TX19LFMxLmZpbmRIYXlzdGFja1BvaW50cz1mdW5jdGlvbih4KXtmb3IodmFyIG09MDttPHgubGVuZ3RoO20rKyl7dmFyIGs9eFttXSxTPWsuX3ByaXZhdGUsTT1TLnJzY3JhdGNoO2lmKCFNLmhheXN0YWNrKXt2YXIgTz1NYXRoLnJhbmRvbSgpKjIqTWF0aC5QSTtNLnNvdXJjZT17eDpNYXRoLmNvcyhPKSx5Ok1hdGguc2luKE8pfSxPPU1hdGgucmFuZG9tKCkqMipNYXRoLlBJLE0udGFyZ2V0PXt4Ok1hdGguY29zKE8pLHk6TWF0aC5zaW4oTyl9fXZhciBOPVMuc291cmNlLCQ9Uy50YXJnZXQsSD1OLnBvc2l0aW9uKCkscT0kLnBvc2l0aW9uKCksWT1OLndpZHRoKCksWj0kLndpZHRoKCksY2U9Ti5oZWlnaHQoKSx2ZT0kLmhlaWdodCgpLG1lPWsucHN0eWxlKCJoYXlzdGFjay1yYWRpdXMiKS52YWx1ZSxMZT1tZS8yO00uaGF5c3RhY2tQdHM9TS5hbGxwdHM9W00uc291cmNlLngqWSpMZStILngsTS5zb3VyY2UueSpjZSpMZStILnksTS50YXJnZXQueCpaKkxlK3EueCxNLnRhcmdldC55KnZlKkxlK3EueV0sTS5taWRYPShNLmFsbHB0c1swXStNLmFsbHB0c1syXSkvMixNLm1pZFk9KE0uYWxscHRzWzFdK00uYWxscHRzWzNdKS8yLE0uZWRnZVR5cGU9ImhheXN0YWNrIixNLmhheXN0YWNrPSEwLHRoaXMuc3RvcmVFZGdlUHJvamVjdGlvbnMoayksdGhpcy5jYWxjdWxhdGVBcnJvd0FuZ2xlcyhrKSx0aGlzLnJlY2FsY3VsYXRlRWRnZUxhYmVsUHJvamVjdGlvbnMoayksdGhpcy5jYWxjdWxhdGVMYWJlbEFuZ2xlcyhrKX19LFMxLmZpbmRTZWdtZW50c1BvaW50cz1mdW5jdGlvbih4LG0pe3ZhciBrPXguX3ByaXZhdGUucnNjcmF0Y2gsUz14LnBzdHlsZSgic2VnbWVudC13ZWlnaHRzIiksTT14LnBzdHlsZSgic2VnbWVudC1kaXN0YW5jZXMiKSxPPU1hdGgubWluKFMucGZWYWx1ZS5sZW5ndGgsTS5wZlZhbHVlLmxlbmd0aCk7ay5lZGdlVHlwZT0ic2VnbWVudHMiLGsuc2VncHRzPVtdO2Zvcih2YXIgTj0wO048TztOKyspe3ZhciAkPVMucGZWYWx1ZVtOXSxIPU0ucGZWYWx1ZVtOXSxxPTEtJCxZPSQsWj10aGlzLmZpbmRNaWRwdFB0c0V0Yyh4LG0pLGNlPVoubWlkcHRQdHMsdmU9Wi52ZWN0b3JOb3JtSW52ZXJzZSxtZT17eDpjZS54MSpxK2NlLngyKlkseTpjZS55MSpxK2NlLnkyKll9O2suc2VncHRzLnB1c2gobWUueCt2ZS54KkgsbWUueSt2ZS55KkgpfX0sUzEuZmluZExvb3BQb2ludHM9ZnVuY3Rpb24oeCxtLGssUyl7dmFyIE09eC5fcHJpdmF0ZS5yc2NyYXRjaCxPPW0uZGlyQ291bnRzLE49bS5zcmNQb3MsJD14LnBzdHlsZSgiY29udHJvbC1wb2ludC1kaXN0YW5jZXMiKSxIPSQ/JC5wZlZhbHVlWzBdOnZvaWQgMCxxPXgucHN0eWxlKCJsb29wLWRpcmVjdGlvbiIpLnBmVmFsdWUsWT14LnBzdHlsZSgibG9vcC1zd2VlcCIpLnBmVmFsdWUsWj14LnBzdHlsZSgiY29udHJvbC1wb2ludC1zdGVwLXNpemUiKS5wZlZhbHVlO00uZWRnZVR5cGU9InNlbGYiO3ZhciBjZT1rLHZlPVo7UyYmKGNlPTAsdmU9SCk7dmFyIG1lPXEtTWF0aC5QSS8yLExlPW1lLVkvMixfZT1tZStZLzIsRWU9cSsiXyIrWTtjZT1PW0VlXT09PXZvaWQgMD9PW0VlXT0wOisrT1tFZV0sTS5jdHJscHRzPVtOLngrTWF0aC5jb3MoTGUpKjEuNCp2ZSooY2UvMysxKSxOLnkrTWF0aC5zaW4oTGUpKjEuNCp2ZSooY2UvMysxKSxOLngrTWF0aC5jb3MoX2UpKjEuNCp2ZSooY2UvMysxKSxOLnkrTWF0aC5zaW4oX2UpKjEuNCp2ZSooY2UvMysxKV19LFMxLmZpbmRDb21wb3VuZExvb3BQb2ludHM9ZnVuY3Rpb24oeCxtLGssUyl7dmFyIE09eC5fcHJpdmF0ZS5yc2NyYXRjaDtNLmVkZ2VUeXBlPSJjb21wb3VuZCI7dmFyIE89bS5zcmNQb3MsTj1tLnRndFBvcywkPW0uc3JjVyxIPW0uc3JjSCxxPW0udGd0VyxZPW0udGd0SCxaPXgucHN0eWxlKCJjb250cm9sLXBvaW50LXN0ZXAtc2l6ZSIpLnBmVmFsdWUsY2U9eC5wc3R5bGUoImNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzIiksdmU9Y2U/Y2UucGZWYWx1ZVswXTp2b2lkIDAsbWU9ayxMZT1aO1MmJihtZT0wLExlPXZlKTt2YXIgX2U9NTAsRWU9e3g6Ty54LSQvMix5Ok8ueS1ILzJ9LEJlPXt4Ok4ueC1xLzIseTpOLnktWS8yfSxSZT17eDpNYXRoLm1pbihFZS54LEJlLngpLHk6TWF0aC5taW4oRWUueSxCZS55KX0sVmU9LjUsY3Q9TWF0aC5tYXgoVmUsTWF0aC5sb2coJCouMDEpKSxzdD1NYXRoLm1heChWZSxNYXRoLmxvZyhxKi4wMSkpO00uY3RybHB0cz1bUmUueCxSZS55LSgxK01hdGgucG93KF9lLDEuMTIpLzEwMCkqTGUqKG1lLzMrMSkqY3QsUmUueC0oMStNYXRoLnBvdyhfZSwxLjEyKS8xMDApKkxlKihtZS8zKzEpKnN0LFJlLnldfSxTMS5maW5kU3RyYWlnaHRFZGdlUG9pbnRzPWZ1bmN0aW9uKHgpe3guX3ByaXZhdGUucnNjcmF0Y2guZWRnZVR5cGU9InN0cmFpZ2h0In0sUzEuZmluZEJlemllclBvaW50cz1mdW5jdGlvbih4LG0sayxTLE0pe3ZhciBPPXguX3ByaXZhdGUucnNjcmF0Y2gsTj14LnBzdHlsZSgiY29udHJvbC1wb2ludC1zdGVwLXNpemUiKS5wZlZhbHVlLCQ9eC5wc3R5bGUoImNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzIiksSD14LnBzdHlsZSgiY29udHJvbC1wb2ludC13ZWlnaHRzIikscT0kJiZIP01hdGgubWluKCQudmFsdWUubGVuZ3RoLEgudmFsdWUubGVuZ3RoKToxLFk9JD8kLnBmVmFsdWVbMF06dm9pZCAwLFo9SC52YWx1ZVswXSxjZT1TO08uZWRnZVR5cGU9Y2U/Im11bHRpYmV6aWVyIjoiYmV6aWVyIixPLmN0cmxwdHM9W107Zm9yKHZhciB2ZT0wO3ZlPHE7dmUrKyl7dmFyIG1lPSguNS1tLmVsZXMubGVuZ3RoLzIraykqTiooTT8tMToxKSxMZT12b2lkIDAsX2U9ZmoobWUpO2NlJiYoWT0kPyQucGZWYWx1ZVt2ZV06TixaPUgudmFsdWVbdmVdKSxTP0xlPVk6TGU9WSE9PXZvaWQgMD9fZSpZOnZvaWQgMDt2YXIgRWU9TGUhPT12b2lkIDA/TGU6bWUsQmU9MS1aLFJlPVosVmU9dGhpcy5maW5kTWlkcHRQdHNFdGMoeCxtKSxjdD1WZS5taWRwdFB0cyxzdD1WZS52ZWN0b3JOb3JtSW52ZXJzZSxZZT17eDpjdC54MSpCZStjdC54MipSZSx5OmN0LnkxKkJlK2N0LnkyKlJlfTtPLmN0cmxwdHMucHVzaChZZS54K3N0LngqRWUsWWUueStzdC55KkVlKX19LFMxLmZpbmRUYXhpUG9pbnRzPWZ1bmN0aW9uKHgsbSl7dmFyIGs9eC5fcHJpdmF0ZS5yc2NyYXRjaDtrLmVkZ2VUeXBlPSJzZWdtZW50cyI7dmFyIFM9InZlcnRpY2FsIixNPSJob3Jpem9udGFsIixPPSJsZWZ0d2FyZCIsTj0icmlnaHR3YXJkIiwkPSJkb3dud2FyZCIsSD0idXB3YXJkIixxPSJhdXRvIixZPW0ucG9zUHRzLFo9bS5zcmNXLGNlPW0uc3JjSCx2ZT1tLnRndFcsbWU9bS50Z3RILExlPXgucHN0eWxlKCJlZGdlLWRpc3RhbmNlcyIpLnZhbHVlLF9lPUxlIT09Im5vZGUtcG9zaXRpb24iLEVlPXgucHN0eWxlKCJ0YXhpLWRpcmVjdGlvbiIpLnZhbHVlLEJlPUVlLFJlPXgucHN0eWxlKCJ0YXhpLXR1cm4iKSxWZT1SZS51bml0cz09PSIlIixjdD1SZS5wZlZhbHVlLHN0PWN0PDAsWWU9eC5wc3R5bGUoInRheGktdHVybi1taW4tZGlzdGFuY2UiKS5wZlZhbHVlLG10PV9lPyhaK3ZlKS8yOjAsSmU9X2U/KGNlK21lKS8yOjAsTHQ9WS54Mi1ZLngxLE10PVkueTItWS55MSx1dD1mdW5jdGlvbih3cixFcyl7cmV0dXJuIHdyPjA/TWF0aC5tYXgod3ItRXMsMCk6TWF0aC5taW4od3IrRXMsMCl9LFd0PXV0KEx0LG10KSxUdD11dChNdCxKZSksX249ITE7QmU9PT1xP0VlPU1hdGguYWJzKFd0KT5NYXRoLmFicyhUdCk/TTpTOkJlPT09SHx8QmU9PT0kPyhFZT1TLF9uPSEwKTooQmU9PT1PfHxCZT09PU4pJiYoRWU9TSxfbj0hMCk7dmFyIGhuPUVlPT09UyxZdD1obj9UdDpXdCxEbj1obj9NdDpMdCxpcj1maihEbiksdnI9ITE7IShfbiYmKFZlfHxzdCkpJiYoQmU9PT0kJiZEbjwwfHxCZT09PUgmJkRuPjB8fEJlPT09TyYmRG4+MHx8QmU9PT1OJiZEbjwwKSYmKGlyKj0tMSxZdD1pcipNYXRoLmFicyhZdCksdnI9ITApO3ZhciBObjtpZihWZSl7dmFyIHByPWN0PDA/MStjdDpjdDtObj1wcipZdH1lbHNle3ZhciBFcj1jdDwwP1l0OjA7Tm49RXIrY3QqaXJ9dmFyIE1yPWZ1bmN0aW9uKHdyKXtyZXR1cm4gTWF0aC5hYnMod3IpPFllfHxNYXRoLmFicyh3cik+PU1hdGguYWJzKFl0KX0sQ3I9TXIoTm4pLE9yPU1yKE1hdGguYWJzKFl0KS1NYXRoLmFicyhObikpLFduPUNyfHxPcjtpZihXbiYmIXZyKWlmKGhuKXt2YXIgYnI9TWF0aC5hYnMoRG4pPD1jZS8yLFNyPU1hdGguYWJzKEx0KTw9dmUvMjtpZihicil7dmFyIE5yPShZLngxK1kueDIpLzIsU2k9WS55MSx5cz1ZLnkyO2suc2VncHRzPVtOcixTaSxOcix5c119ZWxzZSBpZihTcil7dmFyIHBhPShZLnkxK1kueTIpLzIsTWk9WS54MSxnaT1ZLngyO2suc2VncHRzPVtNaSxwYSxnaSxwYV19ZWxzZSBrLnNlZ3B0cz1bWS54MSxZLnkyXX1lbHNle3ZhciBmcz1NYXRoLmFicyhEbik8PVovMixGcz1NYXRoLmFicyhNdCk8PW1lLzI7aWYoZnMpe3ZhciB4cz0oWS55MStZLnkyKS8yLFJzPVkueDEseW89WS54MjtrLnNlZ3B0cz1bUnMseHMseW8seHNdfWVsc2UgaWYoRnMpe3ZhciAkYT0oWS54MStZLngyKS8yLERhPVkueTEsQm89WS55MjtrLnNlZ3B0cz1bJGEsRGEsJGEsQm9dfWVsc2Ugay5zZWdwdHM9W1kueDIsWS55MV19ZWxzZSBpZihobil7dmFyIHRyPVkueTErTm4rKF9lP2NlLzIqaXI6MCksRz1ZLngxLEpuPVkueDI7ay5zZWdwdHM9W0csdHIsSm4sdHJdfWVsc2V7dmFyIGtyPVkueDErTm4rKF9lP1ovMippcjowKSxscj1ZLnkxLFZ0PVkueTI7ay5zZWdwdHM9W2tyLGxyLGtyLFZ0XX19LFMxLnRyeVRvQ29ycmVjdEludmFsaWRQb2ludHM9ZnVuY3Rpb24oeCxtKXt2YXIgaz14Ll9wcml2YXRlLnJzY3JhdGNoO2lmKGsuZWRnZVR5cGU9PT0iYmV6aWVyIil7dmFyIFM9bS5zcmNQb3MsTT1tLnRndFBvcyxPPW0uc3JjVyxOPW0uc3JjSCwkPW0udGd0VyxIPW0udGd0SCxxPW0uc3JjU2hhcGUsWT1tLnRndFNoYXBlLFo9IVgoay5zdGFydFgpfHwhWChrLnN0YXJ0WSksY2U9IVgoay5hcnJvd1N0YXJ0WCl8fCFYKGsuYXJyb3dTdGFydFkpLHZlPSFYKGsuZW5kWCl8fCFYKGsuZW5kWSksbWU9IVgoay5hcnJvd0VuZFgpfHwhWChrLmFycm93RW5kWSksTGU9MyxfZT10aGlzLmdldEFycm93V2lkdGgoeC5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSx4LnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZSkqdGhpcy5hcnJvd1NoYXBlV2lkdGgsRWU9TGUqX2UsQmU9aDUoe3g6ay5jdHJscHRzWzBdLHk6ay5jdHJscHRzWzFdfSx7eDprLnN0YXJ0WCx5Omsuc3RhcnRZfSksUmU9QmU8RWUsVmU9aDUoe3g6ay5jdHJscHRzWzBdLHk6ay5jdHJscHRzWzFdfSx7eDprLmVuZFgseTprLmVuZFl9KSxjdD1WZTxFZSxzdD0hMTtpZihafHxjZXx8UmUpe3N0PSEwO3ZhciBZZT17eDprLmN0cmxwdHNbMF0tUy54LHk6ay5jdHJscHRzWzFdLVMueX0sbXQ9TWF0aC5zcXJ0KFllLngqWWUueCtZZS55KlllLnkpLEplPXt4OlllLngvbXQseTpZZS55L210fSxMdD1NYXRoLm1heChPLE4pLE10PXt4OmsuY3RybHB0c1swXStKZS54KjIqTHQseTprLmN0cmxwdHNbMV0rSmUueSoyKkx0fSx1dD1xLmludGVyc2VjdExpbmUoUy54LFMueSxPLE4sTXQueCxNdC55LDApO1JlPyhrLmN0cmxwdHNbMF09ay5jdHJscHRzWzBdK0plLngqKEVlLUJlKSxrLmN0cmxwdHNbMV09ay5jdHJscHRzWzFdK0plLnkqKEVlLUJlKSk6KGsuY3RybHB0c1swXT11dFswXStKZS54KkVlLGsuY3RybHB0c1sxXT11dFsxXStKZS55KkVlKX1pZih2ZXx8bWV8fGN0KXtzdD0hMDt2YXIgV3Q9e3g6ay5jdHJscHRzWzBdLU0ueCx5OmsuY3RybHB0c1sxXS1NLnl9LFR0PU1hdGguc3FydChXdC54Kld0LngrV3QueSpXdC55KSxfbj17eDpXdC54L1R0LHk6V3QueS9UdH0saG49TWF0aC5tYXgoTyxOKSxZdD17eDprLmN0cmxwdHNbMF0rX24ueCoyKmhuLHk6ay5jdHJscHRzWzFdK19uLnkqMipobn0sRG49WS5pbnRlcnNlY3RMaW5lKE0ueCxNLnksJCxILFl0LngsWXQueSwwKTtjdD8oay5jdHJscHRzWzBdPWsuY3RybHB0c1swXStfbi54KihFZS1WZSksay5jdHJscHRzWzFdPWsuY3RybHB0c1sxXStfbi55KihFZS1WZSkpOihrLmN0cmxwdHNbMF09RG5bMF0rX24ueCpFZSxrLmN0cmxwdHNbMV09RG5bMV0rX24ueSpFZSl9c3QmJnRoaXMuZmluZEVuZHBvaW50cyh4KX19LFMxLnN0b3JlQWxscHRzPWZ1bmN0aW9uKHgpe3ZhciBtPXguX3ByaXZhdGUucnNjcmF0Y2g7aWYobS5lZGdlVHlwZT09PSJtdWx0aWJlemllciJ8fG0uZWRnZVR5cGU9PT0iYmV6aWVyInx8bS5lZGdlVHlwZT09PSJzZWxmInx8bS5lZGdlVHlwZT09PSJjb21wb3VuZCIpe20uYWxscHRzPVtdLG0uYWxscHRzLnB1c2gobS5zdGFydFgsbS5zdGFydFkpO2Zvcih2YXIgaz0wO2srMTxtLmN0cmxwdHMubGVuZ3RoO2srPTIpbS5hbGxwdHMucHVzaChtLmN0cmxwdHNba10sbS5jdHJscHRzW2srMV0pLGsrMzxtLmN0cmxwdHMubGVuZ3RoJiZtLmFsbHB0cy5wdXNoKChtLmN0cmxwdHNba10rbS5jdHJscHRzW2srMl0pLzIsKG0uY3RybHB0c1trKzFdK20uY3RybHB0c1trKzNdKS8yKTttLmFsbHB0cy5wdXNoKG0uZW5kWCxtLmVuZFkpO3ZhciBTLE07bS5jdHJscHRzLmxlbmd0aC8yJTI9PT0wPyhTPW0uYWxscHRzLmxlbmd0aC8yLTEsbS5taWRYPW0uYWxscHRzW1NdLG0ubWlkWT1tLmFsbHB0c1tTKzFdKTooUz1tLmFsbHB0cy5sZW5ndGgvMi0zLE09LjUsbS5taWRYPXQwKG0uYWxscHRzW1NdLG0uYWxscHRzW1MrMl0sbS5hbGxwdHNbUys0XSxNKSxtLm1pZFk9dDAobS5hbGxwdHNbUysxXSxtLmFsbHB0c1tTKzNdLG0uYWxscHRzW1MrNV0sTSkpfWVsc2UgaWYobS5lZGdlVHlwZT09PSJzdHJhaWdodCIpbS5hbGxwdHM9W20uc3RhcnRYLG0uc3RhcnRZLG0uZW5kWCxtLmVuZFldLG0ubWlkWD0obS5zdGFydFgrbS5lbmRYK20uYXJyb3dTdGFydFgrbS5hcnJvd0VuZFgpLzQsbS5taWRZPShtLnN0YXJ0WSttLmVuZFkrbS5hcnJvd1N0YXJ0WSttLmFycm93RW5kWSkvNDtlbHNlIGlmKG0uZWRnZVR5cGU9PT0ic2VnbWVudHMiKWlmKG0uYWxscHRzPVtdLG0uYWxscHRzLnB1c2gobS5zdGFydFgsbS5zdGFydFkpLG0uYWxscHRzLnB1c2guYXBwbHkobS5hbGxwdHMsbS5zZWdwdHMpLG0uYWxscHRzLnB1c2gobS5lbmRYLG0uZW5kWSksbS5zZWdwdHMubGVuZ3RoJTQ9PT0wKXt2YXIgTz1tLnNlZ3B0cy5sZW5ndGgvMixOPU8tMjttLm1pZFg9KG0uc2VncHRzW05dK20uc2VncHRzW09dKS8yLG0ubWlkWT0obS5zZWdwdHNbTisxXSttLnNlZ3B0c1tPKzFdKS8yfWVsc2V7dmFyICQ9bS5zZWdwdHMubGVuZ3RoLzItMTttLm1pZFg9bS5zZWdwdHNbJF0sbS5taWRZPW0uc2VncHRzWyQrMV19fSxTMS5jaGVja0ZvckludmFsaWRFZGdlV2FybmluZz1mdW5jdGlvbih4KXt2YXIgbT14WzBdLl9wcml2YXRlLnJzY3JhdGNoO20ubm9kZXNPdmVybGFwfHxYKG0uc3RhcnRYKSYmWChtLnN0YXJ0WSkmJlgobS5lbmRYKSYmWChtLmVuZFkpP20ubG9nZ2VkRXJyPSExOm0ubG9nZ2VkRXJyfHwobS5sb2dnZWRFcnI9ITAsaHUoIkVkZ2UgYCIreC5pZCgpKyJgIGhhcyBpbnZhbGlkIGVuZHBvaW50cyBhbmQgc28gaXQgaXMgaW1wb3NzaWJsZSB0byBkcmF3LiAgQWRqdXN0IHlvdXIgZWRnZSBzdHlsZSAoZS5nLiBjb250cm9sIHBvaW50cykgYWNjb3JkaW5nbHkgb3IgdXNlIGFuIGFsdGVybmF0aXZlIGVkZ2UgdHlwZS4gIFRoaXMgaXMgZXhwZWN0ZWQgYmVoYXZpb3VyIHdoZW4gdGhlIHNvdXJjZSBub2RlIGFuZCB0aGUgdGFyZ2V0IG5vZGUgb3ZlcmxhcC4iKSl9LFMxLmZpbmRFZGdlQ29udHJvbFBvaW50cz1mdW5jdGlvbih4KXt2YXIgbT10aGlzO2lmKCEoIXh8fHgubGVuZ3RoPT09MCkpe2Zvcih2YXIgaz10aGlzLFM9ay5jeSxNPVMuaGFzQ29tcG91bmROb2RlcygpLE89e21hcDpuZXcgd20sZ2V0OmZ1bmN0aW9uKFllKXt2YXIgbXQ9dGhpcy5tYXAuZ2V0KFllWzBdKTtyZXR1cm4gbXQhPW51bGw/bXQuZ2V0KFllWzFdKTpudWxsfSxzZXQ6ZnVuY3Rpb24oWWUsbXQpe3ZhciBKZT10aGlzLm1hcC5nZXQoWWVbMF0pO0plPT1udWxsJiYoSmU9bmV3IHdtLHRoaXMubWFwLnNldChZZVswXSxKZSkpLEplLnNldChZZVsxXSxtdCl9fSxOPVtdLCQ9W10sSD0wO0g8eC5sZW5ndGg7SCsrKXt2YXIgcT14W0hdLFk9cS5fcHJpdmF0ZSxaPXEucHN0eWxlKCJjdXJ2ZS1zdHlsZSIpLnZhbHVlO2lmKCEocS5yZW1vdmVkKCl8fCFxLnRha2VzVXBTcGFjZSgpKSl7aWYoWj09PSJoYXlzdGFjayIpeyQucHVzaChxKTtjb250aW51ZX12YXIgY2U9Wj09PSJ1bmJ1bmRsZWQtYmV6aWVyInx8Wj09PSJzZWdtZW50cyJ8fFo9PT0ic3RyYWlnaHQifHxaPT09InN0cmFpZ2h0LXRyaWFuZ2xlInx8Wj09PSJ0YXhpIix2ZT1aPT09InVuYnVuZGxlZC1iZXppZXIifHxaPT09ImJlemllciIsbWU9WS5zb3VyY2UsTGU9WS50YXJnZXQsX2U9bWUucG9vbEluZGV4KCksRWU9TGUucG9vbEluZGV4KCksQmU9W19lLEVlXS5zb3J0KCksUmU9Ty5nZXQoQmUpO1JlPT1udWxsJiYoUmU9e2VsZXM6W119LE8uc2V0KEJlLFJlKSxOLnB1c2goQmUpKSxSZS5lbGVzLnB1c2gocSksY2UmJihSZS5oYXNVbmJ1bmRsZWQ9ITApLHZlJiYoUmUuaGFzQmV6aWVyPSEwKX19Zm9yKHZhciBWZT1mdW5jdGlvbihZZSl7dmFyIG10PU5bWWVdLEplPU8uZ2V0KG10KSxMdD12b2lkIDA7aWYoIUplLmhhc1VuYnVuZGxlZCl7dmFyIE10PUplLmVsZXNbMF0ucGFyYWxsZWxFZGdlcygpLmZpbHRlcihmdW5jdGlvbihCbyl7cmV0dXJuIEJvLmlzQnVuZGxlZEJlemllcigpfSk7Y1MoSmUuZWxlcyksTXQuZm9yRWFjaChmdW5jdGlvbihCbyl7cmV0dXJuIEplLmVsZXMucHVzaChCbyl9KSxKZS5lbGVzLnNvcnQoZnVuY3Rpb24oQm8sdHIpe3JldHVybiBCby5wb29sSW5kZXgoKS10ci5wb29sSW5kZXgoKX0pfXZhciB1dD1KZS5lbGVzWzBdLFd0PXV0LnNvdXJjZSgpLFR0PXV0LnRhcmdldCgpO2lmKFd0LnBvb2xJbmRleCgpPlR0LnBvb2xJbmRleCgpKXt2YXIgX249V3Q7V3Q9VHQsVHQ9X259dmFyIGhuPUplLnNyY1Bvcz1XdC5wb3NpdGlvbigpLFl0PUplLnRndFBvcz1UdC5wb3NpdGlvbigpLERuPUplLnNyY1c9V3Qub3V0ZXJXaWR0aCgpLGlyPUplLnNyY0g9V3Qub3V0ZXJIZWlnaHQoKSx2cj1KZS50Z3RXPVR0Lm91dGVyV2lkdGgoKSxObj1KZS50Z3RIPVR0Lm91dGVySGVpZ2h0KCkscHI9SmUuc3JjU2hhcGU9ay5ub2RlU2hhcGVzW20uZ2V0Tm9kZVNoYXBlKFd0KV0sRXI9SmUudGd0U2hhcGU9ay5ub2RlU2hhcGVzW20uZ2V0Tm9kZVNoYXBlKFR0KV07SmUuZGlyQ291bnRzPXtub3J0aDowLHdlc3Q6MCxzb3V0aDowLGVhc3Q6MCxub3J0aHdlc3Q6MCxzb3V0aHdlc3Q6MCxub3J0aGVhc3Q6MCxzb3V0aGVhc3Q6MH07Zm9yKHZhciBNcj0wO01yPEplLmVsZXMubGVuZ3RoO01yKyspe3ZhciBDcj1KZS5lbGVzW01yXSxPcj1DclswXS5fcHJpdmF0ZS5yc2NyYXRjaCxXbj1Dci5wc3R5bGUoImN1cnZlLXN0eWxlIikudmFsdWUsYnI9V249PT0idW5idW5kbGVkLWJlemllciJ8fFduPT09InNlZ21lbnRzInx8V249PT0idGF4aSIsU3I9IVd0LnNhbWUoQ3Iuc291cmNlKCkpO2lmKCFKZS5jYWxjdWxhdGVkSW50ZXJzZWN0aW9uJiZXdCE9PVR0JiYoSmUuaGFzQmV6aWVyfHxKZS5oYXNVbmJ1bmRsZWQpKXtKZS5jYWxjdWxhdGVkSW50ZXJzZWN0aW9uPSEwO3ZhciBOcj1wci5pbnRlcnNlY3RMaW5lKGhuLngsaG4ueSxEbixpcixZdC54LFl0LnksMCksU2k9SmUuc3JjSW50bj1Ocix5cz1Fci5pbnRlcnNlY3RMaW5lKFl0LngsWXQueSx2cixObixobi54LGhuLnksMCkscGE9SmUudGd0SW50bj15cyxNaT1KZS5pbnRlcnNlY3Rpb25QdHM9e3gxOk5yWzBdLHgyOnlzWzBdLHkxOk5yWzFdLHkyOnlzWzFdfSxnaT1KZS5wb3NQdHM9e3gxOmhuLngseDI6WXQueCx5MTpobi55LHkyOll0Lnl9LGZzPXlzWzFdLU5yWzFdLEZzPXlzWzBdLU5yWzBdLHhzPU1hdGguc3FydChGcypGcytmcypmcyksUnM9SmUudmVjdG9yPXt4OkZzLHk6ZnN9LHlvPUplLnZlY3Rvck5vcm09e3g6UnMueC94cyx5OlJzLnkveHN9LCRhPXt4Oi15by55LHk6eW8ueH07SmUubm9kZXNPdmVybGFwPSFYKHhzKXx8RXIuY2hlY2tQb2ludChOclswXSxOclsxXSwwLHZyLE5uLFl0LngsWXQueSl8fHByLmNoZWNrUG9pbnQoeXNbMF0seXNbMV0sMCxEbixpcixobi54LGhuLnkpLEplLnZlY3Rvck5vcm1JbnZlcnNlPSRhLEx0PXtub2Rlc092ZXJsYXA6SmUubm9kZXNPdmVybGFwLGRpckNvdW50czpKZS5kaXJDb3VudHMsY2FsY3VsYXRlZEludGVyc2VjdGlvbjohMCxoYXNCZXppZXI6SmUuaGFzQmV6aWVyLGhhc1VuYnVuZGxlZDpKZS5oYXNVbmJ1bmRsZWQsZWxlczpKZS5lbGVzLHNyY1BvczpZdCx0Z3RQb3M6aG4sc3JjVzp2cixzcmNIOk5uLHRndFc6RG4sdGd0SDppcixzcmNJbnRuOnBhLHRndEludG46U2ksc3JjU2hhcGU6RXIsdGd0U2hhcGU6cHIscG9zUHRzOnt4MTpnaS54Mix5MTpnaS55Mix4MjpnaS54MSx5MjpnaS55MX0saW50ZXJzZWN0aW9uUHRzOnt4MTpNaS54Mix5MTpNaS55Mix4MjpNaS54MSx5MjpNaS55MX0sdmVjdG9yOnt4Oi1Scy54LHk6LVJzLnl9LHZlY3Rvck5vcm06e3g6LXlvLngseToteW8ueX0sdmVjdG9yTm9ybUludmVyc2U6e3g6LSRhLngseTotJGEueX19fXZhciBEYT1Tcj9MdDpKZTtPci5ub2Rlc092ZXJsYXA9RGEubm9kZXNPdmVybGFwLE9yLnNyY0ludG49RGEuc3JjSW50bixPci50Z3RJbnRuPURhLnRndEludG4sTSYmKFd0LmlzUGFyZW50KCl8fFd0LmlzQ2hpbGQoKXx8VHQuaXNQYXJlbnQoKXx8VHQuaXNDaGlsZCgpKSYmKFd0LnBhcmVudHMoKS5hbnlTYW1lKFR0KXx8VHQucGFyZW50cygpLmFueVNhbWUoV3QpfHxXdC5zYW1lKFR0KSYmV3QuaXNQYXJlbnQoKSk/bS5maW5kQ29tcG91bmRMb29wUG9pbnRzKENyLERhLE1yLGJyKTpXdD09PVR0P20uZmluZExvb3BQb2ludHMoQ3IsRGEsTXIsYnIpOlduPT09InNlZ21lbnRzIj9tLmZpbmRTZWdtZW50c1BvaW50cyhDcixEYSk6V249PT0idGF4aSI/bS5maW5kVGF4aVBvaW50cyhDcixEYSk6V249PT0ic3RyYWlnaHQifHwhYnImJkplLmVsZXMubGVuZ3RoJTI9PT0xJiZNcj09PU1hdGguZmxvb3IoSmUuZWxlcy5sZW5ndGgvMik/bS5maW5kU3RyYWlnaHRFZGdlUG9pbnRzKENyKTptLmZpbmRCZXppZXJQb2ludHMoQ3IsRGEsTXIsYnIsU3IpLG0uZmluZEVuZHBvaW50cyhDciksbS50cnlUb0NvcnJlY3RJbnZhbGlkUG9pbnRzKENyLERhKSxtLmNoZWNrRm9ySW52YWxpZEVkZ2VXYXJuaW5nKENyKSxtLnN0b3JlQWxscHRzKENyKSxtLnN0b3JlRWRnZVByb2plY3Rpb25zKENyKSxtLmNhbGN1bGF0ZUFycm93QW5nbGVzKENyKSxtLnJlY2FsY3VsYXRlRWRnZUxhYmVsUHJvamVjdGlvbnMoQ3IpLG0uY2FsY3VsYXRlTGFiZWxBbmdsZXMoQ3IpfX0sY3Q9MDtjdDxOLmxlbmd0aDtjdCsrKVZlKGN0KTt0aGlzLmZpbmRIYXlzdGFja1BvaW50cygkKX19O2Z1bmN0aW9uIFEkKHgpe3ZhciBtPVtdO2lmKHghPW51bGwpe2Zvcih2YXIgaz0wO2s8eC5sZW5ndGg7ays9Mil7dmFyIFM9eFtrXSxNPXhbaysxXTttLnB1c2goe3g6Uyx5Ok19KX1yZXR1cm4gbX19UzEuZ2V0U2VnbWVudFBvaW50cz1mdW5jdGlvbih4KXt2YXIgbT14WzBdLl9wcml2YXRlLnJzY3JhdGNoLGs9bS5lZGdlVHlwZTtpZihrPT09InNlZ21lbnRzIilyZXR1cm4gdGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoeCksUSQobS5zZWdwdHMpfSxTMS5nZXRDb250cm9sUG9pbnRzPWZ1bmN0aW9uKHgpe3ZhciBtPXhbMF0uX3ByaXZhdGUucnNjcmF0Y2gsaz1tLmVkZ2VUeXBlO2lmKGs9PT0iYmV6aWVyInx8az09PSJtdWx0aWJlemllciJ8fGs9PT0ic2VsZiJ8fGs9PT0iY29tcG91bmQiKXJldHVybiB0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh4KSxRJChtLmN0cmxwdHMpfSxTMS5nZXRFZGdlTWlkcG9pbnQ9ZnVuY3Rpb24oeCl7dmFyIG09eFswXS5fcHJpdmF0ZS5yc2NyYXRjaDtyZXR1cm4gdGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoeCkse3g6bS5taWRYLHk6bS5taWRZfX07dmFyIGhrPXt9O2hrLm1hbnVhbEVuZHB0VG9QeD1mdW5jdGlvbih4LG0pe3ZhciBrPXRoaXMsUz14LnBvc2l0aW9uKCksTT14Lm91dGVyV2lkdGgoKSxPPXgub3V0ZXJIZWlnaHQoKTtpZihtLnZhbHVlLmxlbmd0aD09PTIpe3ZhciBOPVttLnBmVmFsdWVbMF0sbS5wZlZhbHVlWzFdXTtyZXR1cm4gbS51bml0c1swXT09PSIlIiYmKE5bMF09TlswXSpNKSxtLnVuaXRzWzFdPT09IiUiJiYoTlsxXT1OWzFdKk8pLE5bMF0rPVMueCxOWzFdKz1TLnksTn1lbHNle3ZhciAkPW0ucGZWYWx1ZVswXTskPS1NYXRoLlBJLzIrJDt2YXIgSD0yKk1hdGgubWF4KE0sTykscT1bUy54K01hdGguY29zKCQpKkgsUy55K01hdGguc2luKCQpKkhdO3JldHVybiBrLm5vZGVTaGFwZXNbdGhpcy5nZXROb2RlU2hhcGUoeCldLmludGVyc2VjdExpbmUoUy54LFMueSxNLE8scVswXSxxWzFdLDApfX0saGsuZmluZEVuZHBvaW50cz1mdW5jdGlvbih4KXt2YXIgbT10aGlzLGssUz14LnNvdXJjZSgpWzBdLE09eC50YXJnZXQoKVswXSxPPVMucG9zaXRpb24oKSxOPU0ucG9zaXRpb24oKSwkPXgucHN0eWxlKCJ0YXJnZXQtYXJyb3ctc2hhcGUiKS52YWx1ZSxIPXgucHN0eWxlKCJzb3VyY2UtYXJyb3ctc2hhcGUiKS52YWx1ZSxxPXgucHN0eWxlKCJ0YXJnZXQtZGlzdGFuY2UtZnJvbS1ub2RlIikucGZWYWx1ZSxZPXgucHN0eWxlKCJzb3VyY2UtZGlzdGFuY2UtZnJvbS1ub2RlIikucGZWYWx1ZSxaPXgucHN0eWxlKCJjdXJ2ZS1zdHlsZSIpLnZhbHVlLGNlPXguX3ByaXZhdGUucnNjcmF0Y2gsdmU9Y2UuZWRnZVR5cGUsbWU9Wj09PSJ0YXhpIixMZT12ZT09PSJzZWxmInx8dmU9PT0iY29tcG91bmQiLF9lPXZlPT09ImJlemllciJ8fHZlPT09Im11bHRpYmV6aWVyInx8TGUsRWU9dmUhPT0iYmV6aWVyIixCZT12ZT09PSJzdHJhaWdodCJ8fHZlPT09InNlZ21lbnRzIixSZT12ZT09PSJzZWdtZW50cyIsVmU9X2V8fEVlfHxCZSxjdD1MZXx8bWUsc3Q9eC5wc3R5bGUoInNvdXJjZS1lbmRwb2ludCIpLFllPWN0PyJvdXRzaWRlLXRvLW5vZGUiOnN0LnZhbHVlLG10PXgucHN0eWxlKCJ0YXJnZXQtZW5kcG9pbnQiKSxKZT1jdD8ib3V0c2lkZS10by1ub2RlIjptdC52YWx1ZTtjZS5zcmNNYW5FbmRwdD1zdCxjZS50Z3RNYW5FbmRwdD1tdDt2YXIgTHQsTXQsdXQsV3Q7aWYoX2Upe3ZhciBUdD1bY2UuY3RybHB0c1swXSxjZS5jdHJscHRzWzFdXSxfbj1FZT9bY2UuY3RybHB0c1tjZS5jdHJscHRzLmxlbmd0aC0yXSxjZS5jdHJscHRzW2NlLmN0cmxwdHMubGVuZ3RoLTFdXTpUdDtMdD1fbixNdD1UdH1lbHNlIGlmKEJlKXt2YXIgaG49UmU/Y2Uuc2VncHRzLnNsaWNlKDAsMik6W04ueCxOLnldLFl0PVJlP2NlLnNlZ3B0cy5zbGljZShjZS5zZWdwdHMubGVuZ3RoLTIpOltPLngsTy55XTtMdD1ZdCxNdD1obn1pZihKZT09PSJpbnNpZGUtdG8tbm9kZSIpaz1bTi54LE4ueV07ZWxzZSBpZihtdC51bml0cylrPXRoaXMubWFudWFsRW5kcHRUb1B4KE0sbXQpO2Vsc2UgaWYoSmU9PT0ib3V0c2lkZS10by1saW5lIilrPWNlLnRndEludG47ZWxzZSBpZihKZT09PSJvdXRzaWRlLXRvLW5vZGUifHxKZT09PSJvdXRzaWRlLXRvLW5vZGUtb3ItbGFiZWwiP3V0PUx0OihKZT09PSJvdXRzaWRlLXRvLWxpbmUifHxKZT09PSJvdXRzaWRlLXRvLWxpbmUtb3ItbGFiZWwiKSYmKHV0PVtPLngsTy55XSksaz1tLm5vZGVTaGFwZXNbdGhpcy5nZXROb2RlU2hhcGUoTSldLmludGVyc2VjdExpbmUoTi54LE4ueSxNLm91dGVyV2lkdGgoKSxNLm91dGVySGVpZ2h0KCksdXRbMF0sdXRbMV0sMCksSmU9PT0ib3V0c2lkZS10by1ub2RlLW9yLWxhYmVsInx8SmU9PT0ib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIil7dmFyIERuPU0uX3ByaXZhdGUucnNjcmF0Y2gsaXI9RG4ubGFiZWxXaWR0aCx2cj1Ebi5sYWJlbEhlaWdodCxObj1Ebi5sYWJlbFgscHI9RG4ubGFiZWxZLEVyPWlyLzIsTXI9dnIvMixDcj1NLnBzdHlsZSgidGV4dC12YWxpZ24iKS52YWx1ZTtDcj09PSJ0b3AiP3ByLT1NcjpDcj09PSJib3R0b20iJiYocHIrPU1yKTt2YXIgT3I9TS5wc3R5bGUoInRleHQtaGFsaWduIikudmFsdWU7T3I9PT0ibGVmdCI/Tm4tPUVyOk9yPT09InJpZ2h0IiYmKE5uKz1Fcik7dmFyIFduPUs5KHV0WzBdLHV0WzFdLFtObi1Fcixwci1NcixObitFcixwci1NcixObitFcixwcitNcixObi1FcixwcitNcl0sTi54LE4ueSk7aWYoV24ubGVuZ3RoPjApe3ZhciBicj1PLFNyPWY1KGJyLEo3KGspKSxOcj1mNShicixKNyhXbikpLFNpPVNyO2lmKE5yPFNyJiYoaz1XbixTaT1OciksV24ubGVuZ3RoPjIpe3ZhciB5cz1mNShicix7eDpXblsyXSx5OlduWzNdfSk7eXM8U2kmJihrPVtXblsyXSxXblszXV0pfX19dmFyIHBhPWJTKGssTHQsbS5hcnJvd1NoYXBlc1skXS5zcGFjaW5nKHgpK3EpLE1pPWJTKGssTHQsbS5hcnJvd1NoYXBlc1skXS5nYXAoeCkrcSk7aWYoY2UuZW5kWD1NaVswXSxjZS5lbmRZPU1pWzFdLGNlLmFycm93RW5kWD1wYVswXSxjZS5hcnJvd0VuZFk9cGFbMV0sWWU9PT0iaW5zaWRlLXRvLW5vZGUiKWs9W08ueCxPLnldO2Vsc2UgaWYoc3QudW5pdHMpaz10aGlzLm1hbnVhbEVuZHB0VG9QeChTLHN0KTtlbHNlIGlmKFllPT09Im91dHNpZGUtdG8tbGluZSIpaz1jZS5zcmNJbnRuO2Vsc2UgaWYoWWU9PT0ib3V0c2lkZS10by1ub2RlInx8WWU9PT0ib3V0c2lkZS10by1ub2RlLW9yLWxhYmVsIj9XdD1NdDooWWU9PT0ib3V0c2lkZS10by1saW5lInx8WWU9PT0ib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIikmJihXdD1bTi54LE4ueV0pLGs9bS5ub2RlU2hhcGVzW3RoaXMuZ2V0Tm9kZVNoYXBlKFMpXS5pbnRlcnNlY3RMaW5lKE8ueCxPLnksUy5vdXRlcldpZHRoKCksUy5vdXRlckhlaWdodCgpLFd0WzBdLFd0WzFdLDApLFllPT09Im91dHNpZGUtdG8tbm9kZS1vci1sYWJlbCJ8fFllPT09Im91dHNpZGUtdG8tbGluZS1vci1sYWJlbCIpe3ZhciBnaT1TLl9wcml2YXRlLnJzY3JhdGNoLGZzPWdpLmxhYmVsV2lkdGgsRnM9Z2kubGFiZWxIZWlnaHQseHM9Z2kubGFiZWxYLFJzPWdpLmxhYmVsWSx5bz1mcy8yLCRhPUZzLzIsRGE9Uy5wc3R5bGUoInRleHQtdmFsaWduIikudmFsdWU7RGE9PT0idG9wIj9Scy09JGE6RGE9PT0iYm90dG9tIiYmKFJzKz0kYSk7dmFyIEJvPVMucHN0eWxlKCJ0ZXh0LWhhbGlnbiIpLnZhbHVlO0JvPT09ImxlZnQiP3hzLT15bzpCbz09PSJyaWdodCImJih4cys9eW8pO3ZhciB0cj1LOShXdFswXSxXdFsxXSxbeHMteW8sUnMtJGEseHMreW8sUnMtJGEseHMreW8sUnMrJGEseHMteW8sUnMrJGFdLE8ueCxPLnkpO2lmKHRyLmxlbmd0aD4wKXt2YXIgRz1OLEpuPWY1KEcsSjcoaykpLGtyPWY1KEcsSjcodHIpKSxscj1KbjtpZihrcjxKbiYmKGs9W3RyWzBdLHRyWzFdXSxscj1rciksdHIubGVuZ3RoPjIpe3ZhciBWdD1mNShHLHt4OnRyWzJdLHk6dHJbM119KTtWdDxsciYmKGs9W3RyWzJdLHRyWzNdXSl9fX12YXIgSHM9YlMoayxNdCxtLmFycm93U2hhcGVzW0hdLnNwYWNpbmcoeCkrWSksd3I9YlMoayxNdCxtLmFycm93U2hhcGVzW0hdLmdhcCh4KStZKTtjZS5zdGFydFg9d3JbMF0sY2Uuc3RhcnRZPXdyWzFdLGNlLmFycm93U3RhcnRYPUhzWzBdLGNlLmFycm93U3RhcnRZPUhzWzFdLFZlJiYoIVgoY2Uuc3RhcnRYKXx8IVgoY2Uuc3RhcnRZKXx8IVgoY2UuZW5kWCl8fCFYKGNlLmVuZFkpP2NlLmJhZExpbmU9ITA6Y2UuYmFkTGluZT0hMSl9LGhrLmdldFNvdXJjZUVuZHBvaW50PWZ1bmN0aW9uKHgpe3ZhciBtPXhbMF0uX3ByaXZhdGUucnNjcmF0Y2g7c3dpdGNoKHRoaXMucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKHgpLG0uZWRnZVR5cGUpe2Nhc2UiaGF5c3RhY2siOnJldHVybnt4Om0uaGF5c3RhY2tQdHNbMF0seTptLmhheXN0YWNrUHRzWzFdfTtkZWZhdWx0OnJldHVybnt4Om0uYXJyb3dTdGFydFgseTptLmFycm93U3RhcnRZfX19LGhrLmdldFRhcmdldEVuZHBvaW50PWZ1bmN0aW9uKHgpe3ZhciBtPXhbMF0uX3ByaXZhdGUucnNjcmF0Y2g7c3dpdGNoKHRoaXMucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKHgpLG0uZWRnZVR5cGUpe2Nhc2UiaGF5c3RhY2siOnJldHVybnt4Om0uaGF5c3RhY2tQdHNbMl0seTptLmhheXN0YWNrUHRzWzNdfTtkZWZhdWx0OnJldHVybnt4Om0uYXJyb3dFbmRYLHk6bS5hcnJvd0VuZFl9fX07dmFyIEZJPXt9O2Z1bmN0aW9uIEokKHgsbSxrKXtmb3IodmFyIFM9ZnVuY3Rpb24ocSxZLFosY2Upe3JldHVybiB0MChxLFksWixjZSl9LE09bS5fcHJpdmF0ZSxPPU0ucnN0eWxlLmJlemllclB0cyxOPTA7Tjx4LmJlemllclByb2pQY3RzLmxlbmd0aDtOKyspe3ZhciAkPXguYmV6aWVyUHJvalBjdHNbTl07Ty5wdXNoKHt4OlMoa1swXSxrWzJdLGtbNF0sJCkseTpTKGtbMV0sa1szXSxrWzVdLCQpfSl9fUZJLnN0b3JlRWRnZVByb2plY3Rpb25zPWZ1bmN0aW9uKHgpe3ZhciBtPXguX3ByaXZhdGUsaz1tLnJzY3JhdGNoLFM9ay5lZGdlVHlwZTtpZihtLnJzdHlsZS5iZXppZXJQdHM9bnVsbCxtLnJzdHlsZS5saW5lUHRzPW51bGwsbS5yc3R5bGUuaGF5c3RhY2tQdHM9bnVsbCxTPT09Im11bHRpYmV6aWVyInx8Uz09PSJiZXppZXIifHxTPT09InNlbGYifHxTPT09ImNvbXBvdW5kIil7bS5yc3R5bGUuYmV6aWVyUHRzPVtdO2Zvcih2YXIgTT0wO00rNTxrLmFsbHB0cy5sZW5ndGg7TSs9NClKJCh0aGlzLHgsay5hbGxwdHMuc2xpY2UoTSxNKzYpKX1lbHNlIGlmKFM9PT0ic2VnbWVudHMiKWZvcih2YXIgTz1tLnJzdHlsZS5saW5lUHRzPVtdLE09MDtNKzE8ay5hbGxwdHMubGVuZ3RoO00rPTIpTy5wdXNoKHt4OmsuYWxscHRzW01dLHk6ay5hbGxwdHNbTSsxXX0pO2Vsc2UgaWYoUz09PSJoYXlzdGFjayIpe3ZhciBOPWsuaGF5c3RhY2tQdHM7bS5yc3R5bGUuaGF5c3RhY2tQdHM9W3t4Ok5bMF0seTpOWzFdfSx7eDpOWzJdLHk6TlszXX1dfW0ucnN0eWxlLmFycm93V2lkdGg9dGhpcy5nZXRBcnJvd1dpZHRoKHgucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUseC5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUpKnRoaXMuYXJyb3dTaGFwZVdpZHRofSxGSS5yZWNhbGN1bGF0ZUVkZ2VQcm9qZWN0aW9ucz1mdW5jdGlvbih4KXt0aGlzLmZpbmRFZGdlQ29udHJvbFBvaW50cyh4KX07dmFyIGttPXt9O2ttLnJlY2FsY3VsYXRlTm9kZUxhYmVsUHJvamVjdGlvbj1mdW5jdGlvbih4KXt2YXIgbT14LnBzdHlsZSgibGFiZWwiKS5zdHJWYWx1ZTtpZighU2UobSkpe3ZhciBrLFMsTT14Ll9wcml2YXRlLE89eC53aWR0aCgpLE49eC5oZWlnaHQoKSwkPXgucGFkZGluZygpLEg9eC5wb3NpdGlvbigpLHE9eC5wc3R5bGUoInRleHQtaGFsaWduIikuc3RyVmFsdWUsWT14LnBzdHlsZSgidGV4dC12YWxpZ24iKS5zdHJWYWx1ZSxaPU0ucnNjcmF0Y2gsY2U9TS5yc3R5bGU7c3dpdGNoKHEpe2Nhc2UibGVmdCI6az1ILngtTy8yLSQ7YnJlYWs7Y2FzZSJyaWdodCI6az1ILngrTy8yKyQ7YnJlYWs7ZGVmYXVsdDprPUgueH1zd2l0Y2goWSl7Y2FzZSJ0b3AiOlM9SC55LU4vMi0kO2JyZWFrO2Nhc2UiYm90dG9tIjpTPUgueStOLzIrJDticmVhaztkZWZhdWx0OlM9SC55fVoubGFiZWxYPWssWi5sYWJlbFk9UyxjZS5sYWJlbFg9ayxjZS5sYWJlbFk9Uyx0aGlzLmNhbGN1bGF0ZUxhYmVsQW5nbGVzKHgpLHRoaXMuYXBwbHlMYWJlbERpbWVuc2lvbnMoeCl9fTt2YXIgWiQ9ZnVuY3Rpb24obSxrKXt2YXIgUz1NYXRoLmF0YW4oay9tKTtyZXR1cm4gbT09PTAmJlM8MCYmKFM9UyotMSksU30sR1M9ZnVuY3Rpb24obSxrKXt2YXIgUz1rLngtbS54LE09ay55LW0ueTtyZXR1cm4gWiQoUyxNKX0sSHJlPWZ1bmN0aW9uKG0sayxTLE0pe3ZhciBPPVU5KDAsTS0uMDAxLDEpLE49VTkoMCxNKy4wMDEsMSksJD1aNyhtLGssUyxPKSxIPVo3KG0sayxTLE4pO3JldHVybiBHUygkLEgpfTtrbS5yZWNhbGN1bGF0ZUVkZ2VMYWJlbFByb2plY3Rpb25zPWZ1bmN0aW9uKHgpe3ZhciBtLGs9eC5fcHJpdmF0ZSxTPWsucnNjcmF0Y2gsTT10aGlzLE89e21pZDp4LnBzdHlsZSgibGFiZWwiKS5zdHJWYWx1ZSxzb3VyY2U6eC5wc3R5bGUoInNvdXJjZS1sYWJlbCIpLnN0clZhbHVlLHRhcmdldDp4LnBzdHlsZSgidGFyZ2V0LWxhYmVsIikuc3RyVmFsdWV9O2lmKE8ubWlkfHxPLnNvdXJjZXx8Ty50YXJnZXQpe209e3g6Uy5taWRYLHk6Uy5taWRZfTt2YXIgTj1mdW5jdGlvbihaLGNlLHZlKXtKMyhrLnJzY3JhdGNoLFosY2UsdmUpLEozKGsucnN0eWxlLFosY2UsdmUpfTtOKCJsYWJlbFgiLG51bGwsbS54KSxOKCJsYWJlbFkiLG51bGwsbS55KTt2YXIgJD1aJChTLm1pZERpc3BYLFMubWlkRGlzcFkpO04oImxhYmVsQXV0b0FuZ2xlIixudWxsLCQpO3ZhciBIPWZ1bmN0aW9uIFkoKXtpZihZLmNhY2hlKXJldHVybiBZLmNhY2hlO2Zvcih2YXIgWj1bXSxjZT0wO2NlKzU8Uy5hbGxwdHMubGVuZ3RoO2NlKz00KXt2YXIgdmU9e3g6Uy5hbGxwdHNbY2VdLHk6Uy5hbGxwdHNbY2UrMV19LG1lPXt4OlMuYWxscHRzW2NlKzJdLHk6Uy5hbGxwdHNbY2UrM119LExlPXt4OlMuYWxscHRzW2NlKzRdLHk6Uy5hbGxwdHNbY2UrNV19O1oucHVzaCh7cDA6dmUscDE6bWUscDI6TGUsc3RhcnREaXN0OjAsbGVuZ3RoOjAsc2VnbWVudHM6W119KX12YXIgX2U9ay5yc3R5bGUuYmV6aWVyUHRzLEVlPU0uYmV6aWVyUHJvalBjdHMubGVuZ3RoO2Z1bmN0aW9uIEJlKFllLG10LEplLEx0LE10KXt2YXIgdXQ9aDUobXQsSmUpLFd0PVllLnNlZ21lbnRzW1llLnNlZ21lbnRzLmxlbmd0aC0xXSxUdD17cDA6bXQscDE6SmUsdDA6THQsdDE6TXQsc3RhcnREaXN0Old0P1d0LnN0YXJ0RGlzdCtXdC5sZW5ndGg6MCxsZW5ndGg6dXR9O1llLnNlZ21lbnRzLnB1c2goVHQpLFllLmxlbmd0aCs9dXR9Zm9yKHZhciBSZT0wO1JlPFoubGVuZ3RoO1JlKyspe3ZhciBWZT1aW1JlXSxjdD1aW1JlLTFdO2N0JiYoVmUuc3RhcnREaXN0PWN0LnN0YXJ0RGlzdCtjdC5sZW5ndGgpLEJlKFZlLFZlLnAwLF9lW1JlKkVlXSwwLE0uYmV6aWVyUHJvalBjdHNbMF0pO2Zvcih2YXIgc3Q9MDtzdDxFZS0xO3N0KyspQmUoVmUsX2VbUmUqRWUrc3RdLF9lW1JlKkVlK3N0KzFdLE0uYmV6aWVyUHJvalBjdHNbc3RdLE0uYmV6aWVyUHJvalBjdHNbc3QrMV0pO0JlKFZlLF9lW1JlKkVlK0VlLTFdLFZlLnAyLE0uYmV6aWVyUHJvalBjdHNbRWUtMV0sMSl9cmV0dXJuIFkuY2FjaGU9Wn0scT1mdW5jdGlvbihaKXt2YXIgY2UsdmU9Wj09PSJzb3VyY2UiO2lmKE9bWl0pe3ZhciBtZT14LnBzdHlsZShaKyItdGV4dC1vZmZzZXQiKS5wZlZhbHVlO3N3aXRjaChTLmVkZ2VUeXBlKXtjYXNlInNlbGYiOmNhc2UiY29tcG91bmQiOmNhc2UiYmV6aWVyIjpjYXNlIm11bHRpYmV6aWVyIjp7Zm9yKHZhciBMZT1IKCksX2UsRWU9MCxCZT0wLFJlPTA7UmU8TGUubGVuZ3RoO1JlKyspe2Zvcih2YXIgVmU9TGVbdmU/UmU6TGUubGVuZ3RoLTEtUmVdLGN0PTA7Y3Q8VmUuc2VnbWVudHMubGVuZ3RoO2N0Kyspe3ZhciBzdD1WZS5zZWdtZW50c1t2ZT9jdDpWZS5zZWdtZW50cy5sZW5ndGgtMS1jdF0sWWU9UmU9PT1MZS5sZW5ndGgtMSYmY3Q9PT1WZS5zZWdtZW50cy5sZW5ndGgtMTtpZihFZT1CZSxCZSs9c3QubGVuZ3RoLEJlPj1tZXx8WWUpe19lPXtjcDpWZSxzZWdtZW50OnN0fTticmVha319aWYoX2UpYnJlYWt9dmFyIG10PV9lLmNwLEplPV9lLnNlZ21lbnQsTHQ9KG1lLUVlKS9KZS5sZW5ndGgsTXQ9SmUudDEtSmUudDAsdXQ9dmU/SmUudDArTXQqTHQ6SmUudDEtTXQqTHQ7dXQ9VTkoMCx1dCwxKSxtPVo3KG10LnAwLG10LnAxLG10LnAyLHV0KSxjZT1IcmUobXQucDAsbXQucDEsbXQucDIsdXQpO2JyZWFrfWNhc2Uic3RyYWlnaHQiOmNhc2Uic2VnbWVudHMiOmNhc2UiaGF5c3RhY2siOntmb3IodmFyIFd0PTAsVHQsX24saG4sWXQsRG49Uy5hbGxwdHMubGVuZ3RoLGlyPTA7aXIrMzxEbiYmKHZlPyhobj17eDpTLmFsbHB0c1tpcl0seTpTLmFsbHB0c1tpcisxXX0sWXQ9e3g6Uy5hbGxwdHNbaXIrMl0seTpTLmFsbHB0c1tpciszXX0pOihobj17eDpTLmFsbHB0c1tEbi0yLWlyXSx5OlMuYWxscHRzW0RuLTEtaXJdfSxZdD17eDpTLmFsbHB0c1tEbi00LWlyXSx5OlMuYWxscHRzW0RuLTMtaXJdfSksVHQ9aDUoaG4sWXQpLF9uPVd0LFd0Kz1UdCwhKFd0Pj1tZSkpO2lyKz0yKTt2YXIgdnI9bWUtX24sTm49dnIvVHQ7Tm49VTkoMCxObiwxKSxtPWZaKGhuLFl0LE5uKSxjZT1HUyhobixZdCk7YnJlYWt9fU4oImxhYmVsWCIsWixtLngpLE4oImxhYmVsWSIsWixtLnkpLE4oImxhYmVsQXV0b0FuZ2xlIixaLGNlKX19O3EoInNvdXJjZSIpLHEoInRhcmdldCIpLHRoaXMuYXBwbHlMYWJlbERpbWVuc2lvbnMoeCl9fSxrbS5hcHBseUxhYmVsRGltZW5zaW9ucz1mdW5jdGlvbih4KXt0aGlzLmFwcGx5UHJlZml4ZWRMYWJlbERpbWVuc2lvbnMoeCkseC5pc0VkZ2UoKSYmKHRoaXMuYXBwbHlQcmVmaXhlZExhYmVsRGltZW5zaW9ucyh4LCJzb3VyY2UiKSx0aGlzLmFwcGx5UHJlZml4ZWRMYWJlbERpbWVuc2lvbnMoeCwidGFyZ2V0IikpfSxrbS5hcHBseVByZWZpeGVkTGFiZWxEaW1lbnNpb25zPWZ1bmN0aW9uKHgsbSl7dmFyIGs9eC5fcHJpdmF0ZSxTPXRoaXMuZ2V0TGFiZWxUZXh0KHgsbSksTT10aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyh4LFMpLE89eC5wc3R5bGUoImxpbmUtaGVpZ2h0IikucGZWYWx1ZSxOPXgucHN0eWxlKCJ0ZXh0LXdyYXAiKS5zdHJWYWx1ZSwkPUsyKGsucnNjcmF0Y2gsImxhYmVsV3JhcENhY2hlZExpbmVzIixtKXx8W10sSD1OIT09IndyYXAiPzE6TWF0aC5tYXgoJC5sZW5ndGgsMSkscT1NLmhlaWdodC9ILFk9cSpPLFo9TS53aWR0aCxjZT1NLmhlaWdodCsoSC0xKSooTy0xKSpxO0ozKGsucnN0eWxlLCJsYWJlbFdpZHRoIixtLFopLEozKGsucnNjcmF0Y2gsImxhYmVsV2lkdGgiLG0sWiksSjMoay5yc3R5bGUsImxhYmVsSGVpZ2h0IixtLGNlKSxKMyhrLnJzY3JhdGNoLCJsYWJlbEhlaWdodCIsbSxjZSksSjMoay5yc2NyYXRjaCwibGFiZWxMaW5lSGVpZ2h0IixtLFkpfSxrbS5nZXRMYWJlbFRleHQ9ZnVuY3Rpb24oeCxtKXt2YXIgaz14Ll9wcml2YXRlLFM9bT9tKyItIjoiIixNPXgucHN0eWxlKFMrImxhYmVsIikuc3RyVmFsdWUsTz14LnBzdHlsZSgidGV4dC10cmFuc2Zvcm0iKS52YWx1ZSxOPWZ1bmN0aW9uKHZyLE5uKXtyZXR1cm4gTm4/KEozKGsucnNjcmF0Y2gsdnIsbSxObiksTm4pOksyKGsucnNjcmF0Y2gsdnIsbSl9O2lmKCFNKXJldHVybiIiO089PSJub25lInx8KE89PSJ1cHBlcmNhc2UiP009TS50b1VwcGVyQ2FzZSgpOk89PSJsb3dlcmNhc2UiJiYoTT1NLnRvTG93ZXJDYXNlKCkpKTt2YXIgJD14LnBzdHlsZSgidGV4dC13cmFwIikudmFsdWU7aWYoJD09PSJ3cmFwIil7dmFyIEg9TigibGFiZWxLZXkiKTtpZihIIT1udWxsJiZOKCJsYWJlbFdyYXBLZXkiKT09PUgpcmV0dXJuIE4oImxhYmVsV3JhcENhY2hlZFRleHQiKTtmb3IodmFyIHE9IuKAiyIsWT1NLnNwbGl0KGAKYCksWj14LnBzdHlsZSgidGV4dC1tYXgtd2lkdGgiKS5wZlZhbHVlLGNlPXgucHN0eWxlKCJ0ZXh0LW92ZXJmbG93LXdyYXAiKS52YWx1ZSx2ZT1jZT09PSJhbnl3aGVyZSIsbWU9W10sTGU9L1tcc1x1MjAwYl0rLyxfZT12ZT8iIjoiICIsRWU9MDtFZTxZLmxlbmd0aDtFZSsrKXt2YXIgQmU9WVtFZV0sUmU9dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnMoeCxCZSksVmU9UmUud2lkdGg7aWYodmUpe3ZhciBjdD1CZS5zcGxpdCgiIikuam9pbihxKTtCZT1jdH1pZihWZT5aKXtmb3IodmFyIHN0PUJlLnNwbGl0KExlKSxZZT0iIixtdD0wO210PHN0Lmxlbmd0aDttdCsrKXt2YXIgSmU9c3RbbXRdLEx0PVllLmxlbmd0aD09PTA/SmU6WWUrX2UrSmUsTXQ9dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnMoeCxMdCksdXQ9TXQud2lkdGg7dXQ8PVo/WWUrPUplK19lOihZZSYmbWUucHVzaChZZSksWWU9SmUrX2UpfVllLm1hdGNoKC9eW1xzXHUyMDBiXSskLyl8fG1lLnB1c2goWWUpfWVsc2UgbWUucHVzaChCZSl9TigibGFiZWxXcmFwQ2FjaGVkTGluZXMiLG1lKSxNPU4oImxhYmVsV3JhcENhY2hlZFRleHQiLG1lLmpvaW4oYApgKSksTigibGFiZWxXcmFwS2V5IixIKX1lbHNlIGlmKCQ9PT0iZWxsaXBzaXMiKXt2YXIgV3Q9eC5wc3R5bGUoInRleHQtbWF4LXdpZHRoIikucGZWYWx1ZSxUdD0iIixfbj0i4oCmIixobj0hMTtpZih0aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyh4LE0pLndpZHRoPFd0KXJldHVybiBNO2Zvcih2YXIgWXQ9MDtZdDxNLmxlbmd0aDtZdCsrKXt2YXIgRG49dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnMoeCxUdCtNW1l0XStfbikud2lkdGg7aWYoRG4+V3QpYnJlYWs7VHQrPU1bWXRdLFl0PT09TS5sZW5ndGgtMSYmKGhuPSEwKX1yZXR1cm4gaG58fChUdCs9X24pLFR0fXJldHVybiBNfSxrbS5nZXRMYWJlbEp1c3RpZmljYXRpb249ZnVuY3Rpb24oeCl7dmFyIG09eC5wc3R5bGUoInRleHQtanVzdGlmaWNhdGlvbiIpLnN0clZhbHVlLGs9eC5wc3R5bGUoInRleHQtaGFsaWduIikuc3RyVmFsdWU7aWYobT09PSJhdXRvIilpZih4LmlzTm9kZSgpKXN3aXRjaChrKXtjYXNlImxlZnQiOnJldHVybiJyaWdodCI7Y2FzZSJyaWdodCI6cmV0dXJuImxlZnQiO2RlZmF1bHQ6cmV0dXJuImNlbnRlciJ9ZWxzZSByZXR1cm4iY2VudGVyIjtlbHNlIHJldHVybiBtfSxrbS5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnM9ZnVuY3Rpb24oeCxtKXt2YXIgaz10aGlzLFM9dWQobSx4Ll9wcml2YXRlLmxhYmVsRGltc0tleSksTT1rLmxhYmVsRGltQ2FjaGV8fChrLmxhYmVsRGltQ2FjaGU9W10pLE89TVtTXTtpZihPIT1udWxsKXJldHVybiBPO3ZhciBOPTAsJD14LnBzdHlsZSgiZm9udC1zdHlsZSIpLnN0clZhbHVlLEg9eC5wc3R5bGUoImZvbnQtc2l6ZSIpLnBmVmFsdWUscT14LnBzdHlsZSgiZm9udC1mYW1pbHkiKS5zdHJWYWx1ZSxZPXgucHN0eWxlKCJmb250LXdlaWdodCIpLnN0clZhbHVlLFo9dGhpcy5sYWJlbENhbGNDYW52YXMsY2U9dGhpcy5sYWJlbENhbGNDYW52YXNDb250ZXh0O2lmKCFaKXtaPXRoaXMubGFiZWxDYWxjQ2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGNlPXRoaXMubGFiZWxDYWxjQ2FudmFzQ29udGV4dD1aLmdldENvbnRleHQoIjJkIik7dmFyIHZlPVouc3R5bGU7dmUucG9zaXRpb249ImFic29sdXRlIix2ZS5sZWZ0PSItOTk5OXB4Iix2ZS50b3A9Ii05OTk5cHgiLHZlLnpJbmRleD0iLTEiLHZlLnZpc2liaWxpdHk9ImhpZGRlbiIsdmUucG9pbnRlckV2ZW50cz0ibm9uZSJ9Y2UuZm9udD0iIi5jb25jYXQoJCwiICIpLmNvbmNhdChZLCIgIikuY29uY2F0KEgsInB4ICIpLmNvbmNhdChxKTtmb3IodmFyIG1lPTAsTGU9MCxfZT1tLnNwbGl0KGAKYCksRWU9MDtFZTxfZS5sZW5ndGg7RWUrKyl7dmFyIEJlPV9lW0VlXSxSZT1jZS5tZWFzdXJlVGV4dChCZSksVmU9TWF0aC5jZWlsKFJlLndpZHRoKSxjdD1IO21lPU1hdGgubWF4KFZlLG1lKSxMZSs9Y3R9cmV0dXJuIG1lKz1OLExlKz1OLE1bU109e3dpZHRoOm1lLGhlaWdodDpMZX19LGttLmNhbGN1bGF0ZUxhYmVsQW5nbGU9ZnVuY3Rpb24oeCxtKXt2YXIgaz14Ll9wcml2YXRlLFM9ay5yc2NyYXRjaCxNPXguaXNFZGdlKCksTz1tP20rIi0iOiIiLE49eC5wc3R5bGUoTysidGV4dC1yb3RhdGlvbiIpLCQ9Ti5zdHJWYWx1ZTtyZXR1cm4gJD09PSJub25lIj8wOk0mJiQ9PT0iYXV0b3JvdGF0ZSI/Uy5sYWJlbEF1dG9BbmdsZTokPT09ImF1dG9yb3RhdGUiPzA6Ti5wZlZhbHVlfSxrbS5jYWxjdWxhdGVMYWJlbEFuZ2xlcz1mdW5jdGlvbih4KXt2YXIgbT10aGlzLGs9eC5pc0VkZ2UoKSxTPXguX3ByaXZhdGUsTT1TLnJzY3JhdGNoO00ubGFiZWxBbmdsZT1tLmNhbGN1bGF0ZUxhYmVsQW5nbGUoeCksayYmKE0uc291cmNlTGFiZWxBbmdsZT1tLmNhbGN1bGF0ZUxhYmVsQW5nbGUoeCwic291cmNlIiksTS50YXJnZXRMYWJlbEFuZ2xlPW0uY2FsY3VsYXRlTGFiZWxBbmdsZSh4LCJ0YXJnZXQiKSl9O3ZhciBlej17fSx0ej0yOCxuej0hMTtlei5nZXROb2RlU2hhcGU9ZnVuY3Rpb24oeCl7dmFyIG09dGhpcyxrPXgucHN0eWxlKCJzaGFwZSIpLnZhbHVlO2lmKGs9PT0iY3V0cmVjdGFuZ2xlIiYmKHgud2lkdGgoKTx0enx8eC5oZWlnaHQoKTx0eikpcmV0dXJuIG56fHwoaHUoIlRoZSBgY3V0cmVjdGFuZ2xlYCBub2RlIHNoYXBlIGNhbiBub3QgYmUgdXNlZCBhdCBzbWFsbCBzaXplcyBzbyBgcmVjdGFuZ2xlYCBpcyB1c2VkIGluc3RlYWQiKSxuej0hMCksInJlY3RhbmdsZSI7aWYoeC5pc1BhcmVudCgpKXJldHVybiBrPT09InJlY3RhbmdsZSJ8fGs9PT0icm91bmRyZWN0YW5nbGUifHxrPT09InJvdW5kLXJlY3RhbmdsZSJ8fGs9PT0iY3V0cmVjdGFuZ2xlInx8az09PSJjdXQtcmVjdGFuZ2xlInx8az09PSJiYXJyZWwiP2s6InJlY3RhbmdsZSI7aWYoaz09PSJwb2x5Z29uIil7dmFyIFM9eC5wc3R5bGUoInNoYXBlLXBvbHlnb24tcG9pbnRzIikudmFsdWU7cmV0dXJuIG0ubm9kZVNoYXBlcy5tYWtlUG9seWdvbihTKS5uYW1lfXJldHVybiBrfTt2YXIgS1M9e307S1MucmVnaXN0ZXJDYWxjdWxhdGlvbkxpc3RlbmVycz1mdW5jdGlvbigpe3ZhciB4PXRoaXMuY3ksbT14LmNvbGxlY3Rpb24oKSxrPXRoaXMsUz1mdW5jdGlvbihOKXt2YXIgJD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7aWYobS5tZXJnZShOKSwkKWZvcih2YXIgSD0wO0g8Ti5sZW5ndGg7SCsrKXt2YXIgcT1OW0hdLFk9cS5fcHJpdmF0ZSxaPVkucnN0eWxlO1ouY2xlYW49ITEsWi5jbGVhbkNvbm5lY3RlZD0hMX19O2suYmluZGVyKHgpLm9uKCJib3VuZHMuKiBkaXJ0eS4qIixmdW5jdGlvbihOKXt2YXIgJD1OLnRhcmdldDtTKCQpfSkub24oInN0eWxlLiogYmFja2dyb3VuZC4qIixmdW5jdGlvbihOKXt2YXIgJD1OLnRhcmdldDtTKCQsITEpfSk7dmFyIE09ZnVuY3Rpb24oTil7aWYoTil7dmFyICQ9ay5vblVwZGF0ZUVsZUNhbGNzRm5zO20uY2xlYW5TdHlsZSgpO2Zvcih2YXIgSD0wO0g8bS5sZW5ndGg7SCsrKXt2YXIgcT1tW0hdLFk9cS5fcHJpdmF0ZS5yc3R5bGU7cS5pc05vZGUoKSYmIVkuY2xlYW5Db25uZWN0ZWQmJihTKHEuY29ubmVjdGVkRWRnZXMoKSksWS5jbGVhbkNvbm5lY3RlZD0hMCl9aWYoJClmb3IodmFyIFo9MDtaPCQubGVuZ3RoO1orKyl7dmFyIGNlPSRbWl07Y2UoTixtKX1rLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZShtKSxtPXguY29sbGVjdGlvbigpfX07ay5mbHVzaFJlbmRlcmVkU3R5bGVRdWV1ZT1mdW5jdGlvbigpe00oITApfSxrLmJlZm9yZVJlbmRlcihNLGsuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5lbGVDYWxjcyl9LEtTLm9uVXBkYXRlRWxlQ2FsY3M9ZnVuY3Rpb24oeCl7dmFyIG09dGhpcy5vblVwZGF0ZUVsZUNhbGNzRm5zPXRoaXMub25VcGRhdGVFbGVDYWxjc0Zuc3x8W107bS5wdXNoKHgpfSxLUy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGU9ZnVuY3Rpb24oeCxtKXt2YXIgaz1mdW5jdGlvbihWZSl7cmV0dXJuIFZlLl9wcml2YXRlLnJzdHlsZS5jbGVhbkNvbm5lY3RlZH0sUz1bXSxNPVtdO2lmKCF0aGlzLmRlc3Ryb3llZCl7bT09PXZvaWQgMCYmKG09ITApO2Zvcih2YXIgTz0wO088eC5sZW5ndGg7TysrKXt2YXIgTj14W09dLCQ9Ti5fcHJpdmF0ZSxIPSQucnN0eWxlO04uaXNFZGdlKCkmJighayhOLnNvdXJjZSgpKXx8IWsoTi50YXJnZXQoKSkpJiYoSC5jbGVhbj0hMSksIShtJiZILmNsZWFufHxOLnJlbW92ZWQoKSkmJk4ucHN0eWxlKCJkaXNwbGF5IikudmFsdWUhPT0ibm9uZSImJigkLmdyb3VwPT09Im5vZGVzIj9NLnB1c2goTik6Uy5wdXNoKE4pLEguY2xlYW49ITApfWZvcih2YXIgcT0wO3E8TS5sZW5ndGg7cSsrKXt2YXIgWT1NW3FdLFo9WS5fcHJpdmF0ZSxjZT1aLnJzdHlsZSx2ZT1ZLnBvc2l0aW9uKCk7dGhpcy5yZWNhbGN1bGF0ZU5vZGVMYWJlbFByb2plY3Rpb24oWSksY2Uubm9kZVg9dmUueCxjZS5ub2RlWT12ZS55LGNlLm5vZGVXPVkucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsY2Uubm9kZUg9WS5wc3R5bGUoImhlaWdodCIpLnBmVmFsdWV9dGhpcy5yZWNhbGN1bGF0ZUVkZ2VQcm9qZWN0aW9ucyhTKTtmb3IodmFyIG1lPTA7bWU8Uy5sZW5ndGg7bWUrKyl7dmFyIExlPVNbbWVdLF9lPUxlLl9wcml2YXRlLEVlPV9lLnJzdHlsZSxCZT1fZS5yc2NyYXRjaDtFZS5zcmNYPUJlLmFycm93U3RhcnRYLEVlLnNyY1k9QmUuYXJyb3dTdGFydFksRWUudGd0WD1CZS5hcnJvd0VuZFgsRWUudGd0WT1CZS5hcnJvd0VuZFksRWUubWlkWD1CZS5taWRYLEVlLm1pZFk9QmUubWlkWSxFZS5sYWJlbEFuZ2xlPUJlLmxhYmVsQW5nbGUsRWUuc291cmNlTGFiZWxBbmdsZT1CZS5zb3VyY2VMYWJlbEFuZ2xlLEVlLnRhcmdldExhYmVsQW5nbGU9QmUudGFyZ2V0TGFiZWxBbmdsZX19fTt2YXIgV1M9e307V1MudXBkYXRlQ2FjaGVkR3JhYmJlZEVsZXM9ZnVuY3Rpb24oKXt2YXIgeD10aGlzLmNhY2hlZFpTb3J0ZWRFbGVzO2lmKHgpe3guZHJhZz1bXSx4Lm5vbmRyYWc9W107Zm9yKHZhciBtPVtdLGs9MDtrPHgubGVuZ3RoO2srKyl7dmFyIFM9eFtrXSxNPVMuX3ByaXZhdGUucnNjcmF0Y2g7Uy5ncmFiYmVkKCkmJiFTLmlzUGFyZW50KCk/bS5wdXNoKFMpOk0uaW5EcmFnTGF5ZXI/eC5kcmFnLnB1c2goUyk6eC5ub25kcmFnLnB1c2goUyl9Zm9yKHZhciBrPTA7azxtLmxlbmd0aDtrKyspe3ZhciBTPW1ba107eC5kcmFnLnB1c2goUyl9fX0sV1MuaW52YWxpZGF0ZUNhY2hlZFpTb3J0ZWRFbGVzPWZ1bmN0aW9uKCl7dGhpcy5jYWNoZWRaU29ydGVkRWxlcz1udWxsfSxXUy5nZXRDYWNoZWRaU29ydGVkRWxlcz1mdW5jdGlvbih4KXtpZih4fHwhdGhpcy5jYWNoZWRaU29ydGVkRWxlcyl7dmFyIG09dGhpcy5jeS5tdXRhYmxlRWxlbWVudHMoKS50b0FycmF5KCk7bS5zb3J0KF9JKSxtLmludGVyYWN0aXZlPW0uZmlsdGVyKGZ1bmN0aW9uKGspe3JldHVybiBrLmludGVyYWN0aXZlKCl9KSx0aGlzLmNhY2hlZFpTb3J0ZWRFbGVzPW0sdGhpcy51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcygpfWVsc2UgbT10aGlzLmNhY2hlZFpTb3J0ZWRFbGVzO3JldHVybiBtfTt2YXIgcno9e307W3c1LFVTLFMxLGhrLEZJLGttLGV6LEtTLFdTXS5mb3JFYWNoKGZ1bmN0aW9uKHgpe3l0KHJ6LHgpfSk7dmFyIGl6PXt9O2l6LmdldENhY2hlZEltYWdlPWZ1bmN0aW9uKHgsbSxrKXt2YXIgUz10aGlzLE09Uy5pbWFnZUNhY2hlPVMuaW1hZ2VDYWNoZXx8e30sTz1NW3hdO2lmKE8pcmV0dXJuIE8uaW1hZ2UuY29tcGxldGV8fE8uaW1hZ2UuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsayksTy5pbWFnZTtPPU1beF09TVt4XXx8e307dmFyIE49Ty5pbWFnZT1uZXcgSW1hZ2U7Ti5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixrKSxOLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbigpe04uZXJyb3I9ITB9KTt2YXIgJD0iZGF0YToiLEg9eC5zdWJzdHJpbmcoMCwkLmxlbmd0aCkudG9Mb3dlckNhc2UoKT09PSQ7cmV0dXJuIEh8fChtPW09PT0ibnVsbCI/bnVsbDptLE4uY3Jvc3NPcmlnaW49bSksTi5zcmM9eCxOfTt2YXIgYjg9e307YjgucmVnaXN0ZXJCaW5kaW5nPWZ1bmN0aW9uKHgsbSxrLFMpe3ZhciBNPUFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMsWzFdKSxPPXRoaXMuYmluZGVyKHgpO3JldHVybiBPLm9uLmFwcGx5KE8sTSl9LGI4LmJpbmRlcj1mdW5jdGlvbih4KXt2YXIgbT10aGlzLGs9bS5jeS53aW5kb3coKSxTPXg9PT1rfHx4PT09ay5kb2N1bWVudHx8eD09PWsuZG9jdW1lbnQuYm9keXx8Q2UoeCk7aWYobS5zdXBwb3J0c1Bhc3NpdmVFdmVudHM9PW51bGwpe3ZhciBNPSExO3RyeXt2YXIgTz1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTT0hMCwhMH19KTtrLmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsTyl9Y2F0Y2h7fW0uc3VwcG9ydHNQYXNzaXZlRXZlbnRzPU19dmFyIE49ZnVuY3Rpb24oSCxxLFkpe3ZhciBaPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIFMmJm0uc3VwcG9ydHNQYXNzaXZlRXZlbnRzJiYoWlsyXT17Y2FwdHVyZTpZPz8hMSxwYXNzaXZlOiExLG9uY2U6ITF9KSxtLmJpbmRpbmdzLnB1c2goe3RhcmdldDp4LGFyZ3M6Wn0pLCh4LmFkZEV2ZW50TGlzdGVuZXJ8fHgub24pLmFwcGx5KHgsWiksdGhpc307cmV0dXJue29uOk4sYWRkRXZlbnRMaXN0ZW5lcjpOLGFkZExpc3RlbmVyOk4sYmluZDpOfX0sYjgubm9kZUlzRHJhZ2dhYmxlPWZ1bmN0aW9uKHgpe3JldHVybiB4JiZ4LmlzTm9kZSgpJiYheC5sb2NrZWQoKSYmeC5ncmFiYmFibGUoKX0sYjgubm9kZUlzR3JhYmJhYmxlPWZ1bmN0aW9uKHgpe3JldHVybiB0aGlzLm5vZGVJc0RyYWdnYWJsZSh4KSYmeC5pbnRlcmFjdGl2ZSgpfSxiOC5sb2FkPWZ1bmN0aW9uKCl7dmFyIHg9dGhpcyxtPXguY3kud2luZG93KCksaz1mdW5jdGlvbihHKXtyZXR1cm4gRy5zZWxlY3RlZCgpfSxTPWZ1bmN0aW9uKEcsSm4sa3IsbHIpe0c9PW51bGwmJihHPXguY3kpO2Zvcih2YXIgVnQ9MDtWdDxKbi5sZW5ndGg7VnQrKyl7dmFyIEhzPUpuW1Z0XTtHLmVtaXQoe29yaWdpbmFsRXZlbnQ6a3IsdHlwZTpIcyxwb3NpdGlvbjpscn0pfX0sTT1mdW5jdGlvbihHKXtyZXR1cm4gRy5zaGlmdEtleXx8Ry5tZXRhS2V5fHxHLmN0cmxLZXl9LE89ZnVuY3Rpb24oRyxKbil7dmFyIGtyPSEwO2lmKHguY3kuaGFzQ29tcG91bmROb2RlcygpJiZHJiZHLnBhbm5hYmxlKCkpZm9yKHZhciBscj0wO0puJiZscjxKbi5sZW5ndGg7bHIrKyl7dmFyIEc9Sm5bbHJdO2lmKEcuaXNOb2RlKCkmJkcuaXNQYXJlbnQoKSYmIUcucGFubmFibGUoKSl7a3I9ITE7YnJlYWt9fWVsc2Uga3I9ITA7cmV0dXJuIGtyfSxOPWZ1bmN0aW9uKEcpe0dbMF0uX3ByaXZhdGUuZ3JhYmJlZD0hMH0sJD1mdW5jdGlvbihHKXtHWzBdLl9wcml2YXRlLmdyYWJiZWQ9ITF9LEg9ZnVuY3Rpb24oRyl7R1swXS5fcHJpdmF0ZS5yc2NyYXRjaC5pbkRyYWdMYXllcj0hMH0scT1mdW5jdGlvbihHKXtHWzBdLl9wcml2YXRlLnJzY3JhdGNoLmluRHJhZ0xheWVyPSExfSxZPWZ1bmN0aW9uKEcpe0dbMF0uX3ByaXZhdGUucnNjcmF0Y2guaXNHcmFiVGFyZ2V0PSEwfSxaPWZ1bmN0aW9uKEcpe0dbMF0uX3ByaXZhdGUucnNjcmF0Y2guaXNHcmFiVGFyZ2V0PSExfSxjZT1mdW5jdGlvbihHLEpuKXt2YXIga3I9Sm4uYWRkVG9MaXN0LGxyPWtyLmhhcyhHKTshbHImJkcuZ3JhYmJhYmxlKCkmJiFHLmxvY2tlZCgpJiYoa3IubWVyZ2UoRyksTihHKSl9LHZlPWZ1bmN0aW9uKEcsSm4pe2lmKEcuY3koKS5oYXNDb21wb3VuZE5vZGVzKCkmJiEoSm4uaW5EcmFnTGF5ZXI9PW51bGwmJkpuLmFkZFRvTGlzdD09bnVsbCkpe3ZhciBrcj1HLmRlc2NlbmRhbnRzKCk7Sm4uaW5EcmFnTGF5ZXImJihrci5mb3JFYWNoKEgpLGtyLmNvbm5lY3RlZEVkZ2VzKCkuZm9yRWFjaChIKSksSm4uYWRkVG9MaXN0JiZjZShrcixKbil9fSxtZT1mdW5jdGlvbihHLEpuKXtKbj1Kbnx8e307dmFyIGtyPUcuY3koKS5oYXNDb21wb3VuZE5vZGVzKCk7Sm4uaW5EcmFnTGF5ZXImJihHLmZvckVhY2goSCksRy5uZWlnaGJvcmhvb2QoKS5zdGRGaWx0ZXIoZnVuY3Rpb24obHIpe3JldHVybiFrcnx8bHIuaXNFZGdlKCl9KS5mb3JFYWNoKEgpKSxKbi5hZGRUb0xpc3QmJkcuZm9yRWFjaChmdW5jdGlvbihscil7Y2UobHIsSm4pfSksdmUoRyxKbiksRWUoRyx7aW5EcmFnTGF5ZXI6Sm4uaW5EcmFnTGF5ZXJ9KSx4LnVwZGF0ZUNhY2hlZEdyYWJiZWRFbGVzKCl9LExlPW1lLF9lPWZ1bmN0aW9uKEcpe0cmJih4LmdldENhY2hlZFpTb3J0ZWRFbGVzKCkuZm9yRWFjaChmdW5jdGlvbihKbil7JChKbikscShKbiksWihKbil9KSx4LnVwZGF0ZUNhY2hlZEdyYWJiZWRFbGVzKCkpfSxFZT1mdW5jdGlvbihHLEpuKXtpZighKEpuLmluRHJhZ0xheWVyPT1udWxsJiZKbi5hZGRUb0xpc3Q9PW51bGwpJiZHLmN5KCkuaGFzQ29tcG91bmROb2RlcygpKXt2YXIga3I9Ry5hbmNlc3RvcnMoKS5vcnBoYW5zKCk7aWYoIWtyLnNhbWUoRykpe3ZhciBscj1rci5kZXNjZW5kYW50cygpLnNwYXduU2VsZigpLm1lcmdlKGtyKS51bm1lcmdlKEcpLnVubWVyZ2UoRy5kZXNjZW5kYW50cygpKSxWdD1sci5jb25uZWN0ZWRFZGdlcygpO0puLmluRHJhZ0xheWVyJiYoVnQuZm9yRWFjaChIKSxsci5mb3JFYWNoKEgpKSxKbi5hZGRUb0xpc3QmJmxyLmZvckVhY2goZnVuY3Rpb24oSHMpe2NlKEhzLEpuKX0pfX19LEJlPWZ1bmN0aW9uKCl7ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9bnVsbCYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyIT1udWxsJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKX0sUmU9dHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXI8InUiLFZlPXR5cGVvZiBSZXNpemVPYnNlcnZlcjwidSI7UmU/KHgucmVtb3ZlT2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24odHIpe2Zvcih2YXIgRz0wO0c8dHIubGVuZ3RoO0crKyl7dmFyIEpuPXRyW0ddLGtyPUpuLnJlbW92ZWROb2RlcztpZihrcilmb3IodmFyIGxyPTA7bHI8a3IubGVuZ3RoO2xyKyspe3ZhciBWdD1rcltscl07aWYoVnQ9PT14LmNvbnRhaW5lcil7eC5kZXN0cm95KCk7YnJlYWt9fX19KSx4LmNvbnRhaW5lci5wYXJlbnROb2RlJiZ4LnJlbW92ZU9ic2VydmVyLm9ic2VydmUoeC5jb250YWluZXIucGFyZW50Tm9kZSx7Y2hpbGRMaXN0OiEwfSkpOngucmVnaXN0ZXJCaW5kaW5nKHguY29udGFpbmVyLCJET01Ob2RlUmVtb3ZlZCIsZnVuY3Rpb24odHIpe3guZGVzdHJveSgpfSk7dmFyIGN0PU51KGZ1bmN0aW9uKCl7eC5jeS5yZXNpemUoKX0sMTAwKTtSZSYmKHguc3R5bGVPYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcihjdCkseC5zdHlsZU9ic2VydmVyLm9ic2VydmUoeC5jb250YWluZXIse2F0dHJpYnV0ZXM6ITB9KSkseC5yZWdpc3RlckJpbmRpbmcobSwicmVzaXplIixjdCksVmUmJih4LnJlc2l6ZU9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcihjdCkseC5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHguY29udGFpbmVyKSk7dmFyIHN0PWZ1bmN0aW9uKEcsSm4pe2Zvcig7RyE9bnVsbDspSm4oRyksRz1HLnBhcmVudE5vZGV9LFllPWZ1bmN0aW9uKCl7eC5pbnZhbGlkYXRlQ29udGFpbmVyQ2xpZW50Q29vcmRzQ2FjaGUoKX07c3QoeC5jb250YWluZXIsZnVuY3Rpb24odHIpe3gucmVnaXN0ZXJCaW5kaW5nKHRyLCJ0cmFuc2l0aW9uZW5kIixZZSkseC5yZWdpc3RlckJpbmRpbmcodHIsImFuaW1hdGlvbmVuZCIsWWUpLHgucmVnaXN0ZXJCaW5kaW5nKHRyLCJzY3JvbGwiLFllKX0pLHgucmVnaXN0ZXJCaW5kaW5nKHguY29udGFpbmVyLCJjb250ZXh0bWVudSIsZnVuY3Rpb24odHIpe3RyLnByZXZlbnREZWZhdWx0KCl9KTt2YXIgbXQ9ZnVuY3Rpb24oKXtyZXR1cm4geC5zZWxlY3Rpb25bNF0hPT0wfSxKZT1mdW5jdGlvbihHKXtmb3IodmFyIEpuPXguZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLGtyPUpuWzBdLGxyPUpuWzFdLFZ0PUpuWzJdLEhzPUpuWzNdLHdyPUcudG91Y2hlcz9HLnRvdWNoZXM6W0ddLEVzPSExLGdvPTA7Z288d3IubGVuZ3RoO2dvKyspe3ZhciAkYz13cltnb107aWYoa3I8PSRjLmNsaWVudFgmJiRjLmNsaWVudFg8PWtyK1Z0JiZscjw9JGMuY2xpZW50WSYmJGMuY2xpZW50WTw9bHIrSHMpe0VzPSEwO2JyZWFrfX1pZighRXMpcmV0dXJuITE7Zm9yKHZhciB6YT14LmNvbnRhaW5lcixTYz1HLnRhcmdldCxiYT1TYy5wYXJlbnROb2RlLHhvPSExO2JhOyl7aWYoYmE9PT16YSl7eG89ITA7YnJlYWt9YmE9YmEucGFyZW50Tm9kZX1yZXR1cm4hIXhvfTt4LnJlZ2lzdGVyQmluZGluZyh4LmNvbnRhaW5lciwibW91c2Vkb3duIixmdW5jdGlvbihHKXtpZihKZShHKSl7Ry5wcmV2ZW50RGVmYXVsdCgpLEJlKCkseC5ob3ZlckRhdGEuY2FwdHVyZT0hMCx4LmhvdmVyRGF0YS53aGljaD1HLndoaWNoO3ZhciBKbj14LmN5LGtyPVtHLmNsaWVudFgsRy5jbGllbnRZXSxscj14LnByb2plY3RJbnRvVmlld3BvcnQoa3JbMF0sa3JbMV0pLFZ0PXguc2VsZWN0aW9uLEhzPXguZmluZE5lYXJlc3RFbGVtZW50cyhsclswXSxsclsxXSwhMCwhMSksd3I9SHNbMF0sRXM9eC5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50czt4LmhvdmVyRGF0YS5tZG93blBvcz1scix4LmhvdmVyRGF0YS5tZG93bkdQb3M9a3I7dmFyIGdvPWZ1bmN0aW9uKCl7eC5ob3ZlckRhdGEudGFwaG9sZENhbmNlbGxlZD0hMSxjbGVhclRpbWVvdXQoeC5ob3ZlckRhdGEudGFwaG9sZFRpbWVvdXQpLHguaG92ZXJEYXRhLnRhcGhvbGRUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZigheC5ob3ZlckRhdGEudGFwaG9sZENhbmNlbGxlZCl7dmFyIGxoPXguaG92ZXJEYXRhLmRvd247bGg/bGguZW1pdCh7b3JpZ2luYWxFdmVudDpHLHR5cGU6InRhcGhvbGQiLHBvc2l0aW9uOnt4OmxyWzBdLHk6bHJbMV19fSk6Sm4uZW1pdCh7b3JpZ2luYWxFdmVudDpHLHR5cGU6InRhcGhvbGQiLHBvc2l0aW9uOnt4OmxyWzBdLHk6bHJbMV19fSl9fSx4LnRhcGhvbGREdXJhdGlvbil9O2lmKEcud2hpY2g9PTMpe3guaG92ZXJEYXRhLmN4dFN0YXJ0ZWQ9ITA7dmFyICRjPXtvcmlnaW5hbEV2ZW50OkcsdHlwZToiY3h0dGFwc3RhcnQiLHBvc2l0aW9uOnt4OmxyWzBdLHk6bHJbMV19fTt3cj8od3IuYWN0aXZhdGUoKSx3ci5lbWl0KCRjKSx4LmhvdmVyRGF0YS5kb3duPXdyKTpKbi5lbWl0KCRjKSx4LmhvdmVyRGF0YS5kb3duVGltZT1uZXcgRGF0ZSgpLmdldFRpbWUoKSx4LmhvdmVyRGF0YS5jeHREcmFnZ2VkPSExfWVsc2UgaWYoRy53aGljaD09MSl7d3ImJndyLmFjdGl2YXRlKCk7e2lmKHdyIT1udWxsJiZ4Lm5vZGVJc0dyYWJiYWJsZSh3cikpe3ZhciB6YT1mdW5jdGlvbihsaCl7cmV0dXJue29yaWdpbmFsRXZlbnQ6Ryx0eXBlOmxoLHBvc2l0aW9uOnt4OmxyWzBdLHk6bHJbMV19fX0sU2M9ZnVuY3Rpb24obGgpe2xoLmVtaXQoemEoImdyYWIiKSl9O2lmKFkod3IpLCF3ci5zZWxlY3RlZCgpKUVzPXguZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHM9Sm4uY29sbGVjdGlvbigpLExlKHdyLHthZGRUb0xpc3Q6RXN9KSx3ci5lbWl0KHphKCJncmFib24iKSkuZW1pdCh6YSgiZ3JhYiIpKTtlbHNle0VzPXguZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHM9Sm4uY29sbGVjdGlvbigpO3ZhciBiYT1Kbi4kKGZ1bmN0aW9uKHhvKXtyZXR1cm4geG8uaXNOb2RlKCkmJnhvLnNlbGVjdGVkKCkmJngubm9kZUlzR3JhYmJhYmxlKHhvKX0pO21lKGJhLHthZGRUb0xpc3Q6RXN9KSx3ci5lbWl0KHphKCJncmFib24iKSksYmEuZm9yRWFjaChTYyl9eC5yZWRyYXdIaW50KCJlbGVzIiwhMCkseC5yZWRyYXdIaW50KCJkcmFnIiwhMCl9eC5ob3ZlckRhdGEuZG93bj13cix4LmhvdmVyRGF0YS5kb3ducz1Icyx4LmhvdmVyRGF0YS5kb3duVGltZT1uZXcgRGF0ZSgpLmdldFRpbWUoKX1TKHdyLFsibW91c2Vkb3duIiwidGFwc3RhcnQiLCJ2bW91c2Vkb3duIl0sRyx7eDpsclswXSx5OmxyWzFdfSksd3I9PW51bGw/KFZ0WzRdPTEseC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXt4OmxyWzBdLHk6bHJbMV19LHgucmVkcmF3SGludCgic2VsZWN0IiwhMCkseC5yZWRyYXcoKSk6d3IucGFubmFibGUoKSYmKFZ0WzRdPTEpLGdvKCl9VnRbMF09VnRbMl09bHJbMF0sVnRbMV09VnRbM109bHJbMV19fSwhMSkseC5yZWdpc3RlckJpbmRpbmcobSwibW91c2Vtb3ZlIixmdW5jdGlvbihHKXt2YXIgSm49eC5ob3ZlckRhdGEuY2FwdHVyZTtpZighKCFKbiYmIUplKEcpKSl7dmFyIGtyPSExLGxyPXguY3ksVnQ9bHIuem9vbSgpLEhzPVtHLmNsaWVudFgsRy5jbGllbnRZXSx3cj14LnByb2plY3RJbnRvVmlld3BvcnQoSHNbMF0sSHNbMV0pLEVzPXguaG92ZXJEYXRhLm1kb3duUG9zLGdvPXguaG92ZXJEYXRhLm1kb3duR1BvcywkYz14LnNlbGVjdGlvbix6YT1udWxsOyF4LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMmJiF4LmhvdmVyRGF0YS5kcmFnZ2luZyYmIXguaG92ZXJEYXRhLnNlbGVjdGluZyYmKHphPXguZmluZE5lYXJlc3RFbGVtZW50KHdyWzBdLHdyWzFdLCEwLCExKSk7dmFyIFNjPXguaG92ZXJEYXRhLmxhc3QsYmE9eC5ob3ZlckRhdGEuZG93bix4bz1bd3JbMF0tJGNbMl0sd3JbMV0tJGNbM11dLGxoPXguZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHMsV2w7aWYoZ28pe3ZhciBaMj1Ic1swXS1nb1swXSxlYj1aMipaMixHMD1Ic1sxXS1nb1sxXSx6cD1HMCpHMCxmZD1lYit6cDt4LmhvdmVyRGF0YS5pc092ZXJUaHJlc2hvbGREcmFnPVdsPWZkPj14LmRlc2t0b3BUYXBUaHJlc2hvbGQyfXZhciBXdj1NKEcpO1dsJiYoeC5ob3ZlckRhdGEudGFwaG9sZENhbmNlbGxlZD0hMCk7dmFyIHN5PWZ1bmN0aW9uKCl7dmFyIEVtPXguaG92ZXJEYXRhLmRyYWdEZWx0YT14LmhvdmVyRGF0YS5kcmFnRGVsdGF8fFtdO0VtLmxlbmd0aD09PTA/KEVtLnB1c2goeG9bMF0pLEVtLnB1c2goeG9bMV0pKTooRW1bMF0rPXhvWzBdLEVtWzFdKz14b1sxXSl9O2tyPSEwLFMoemEsWyJtb3VzZW1vdmUiLCJ2bW91c2Vtb3ZlIiwidGFwZHJhZyJdLEcse3g6d3JbMF0seTp3clsxXX0pO3ZhciBFOD1mdW5jdGlvbigpe3guZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAseC5ob3ZlckRhdGEuc2VsZWN0aW5nfHxsci5lbWl0KHtvcmlnaW5hbEV2ZW50OkcsdHlwZToiYm94c3RhcnQiLHBvc2l0aW9uOnt4OndyWzBdLHk6d3JbMV19fSksJGNbNF09MSx4LmhvdmVyRGF0YS5zZWxlY3Rpbmc9ITAseC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx4LnJlZHJhdygpfTtpZih4LmhvdmVyRGF0YS53aGljaD09PTMpe2lmKFdsKXt2YXIgeDU9e29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJjeHRkcmFnIixwb3NpdGlvbjp7eDp3clswXSx5OndyWzFdfX07YmE/YmEuZW1pdCh4NSk6bHIuZW1pdCh4NSkseC5ob3ZlckRhdGEuY3h0RHJhZ2dlZD0hMCwoIXguaG92ZXJEYXRhLmN4dE92ZXJ8fHphIT09eC5ob3ZlckRhdGEuY3h0T3ZlcikmJih4LmhvdmVyRGF0YS5jeHRPdmVyJiZ4LmhvdmVyRGF0YS5jeHRPdmVyLmVtaXQoe29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJjeHRkcmFnb3V0Iixwb3NpdGlvbjp7eDp3clswXSx5OndyWzFdfX0pLHguaG92ZXJEYXRhLmN4dE92ZXI9emEsemEmJnphLmVtaXQoe29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJjeHRkcmFnb3ZlciIscG9zaXRpb246e3g6d3JbMF0seTp3clsxXX19KSl9fWVsc2UgaWYoeC5ob3ZlckRhdGEuZHJhZ2dpbmcpe2lmKGtyPSEwLGxyLnBhbm5pbmdFbmFibGVkKCkmJmxyLnVzZXJQYW5uaW5nRW5hYmxlZCgpKXt2YXIgVDg7aWYoeC5ob3ZlckRhdGEuanVzdFN0YXJ0ZWRQYW4pe3ZhciBaUz14LmhvdmVyRGF0YS5tZG93blBvcztUOD17eDood3JbMF0tWlNbMF0pKlZ0LHk6KHdyWzFdLVpTWzFdKSpWdH0seC5ob3ZlckRhdGEuanVzdFN0YXJ0ZWRQYW49ITF9ZWxzZSBUOD17eDp4b1swXSpWdCx5OnhvWzFdKlZ0fTtsci5wYW5CeShUOCksbHIuZW1pdCgiZHJhZ3BhbiIpLHguaG92ZXJEYXRhLmRyYWdnZWQ9ITB9d3I9eC5wcm9qZWN0SW50b1ZpZXdwb3J0KEcuY2xpZW50WCxHLmNsaWVudFkpfWVsc2UgaWYoJGNbNF09PTEmJihiYT09bnVsbHx8YmEucGFubmFibGUoKSkpe2lmKFdsKXtpZigheC5ob3ZlckRhdGEuZHJhZ2dpbmcmJmxyLmJveFNlbGVjdGlvbkVuYWJsZWQoKSYmKFd2fHwhbHIucGFubmluZ0VuYWJsZWQoKXx8IWxyLnVzZXJQYW5uaW5nRW5hYmxlZCgpKSlFOCgpO2Vsc2UgaWYoIXguaG92ZXJEYXRhLnNlbGVjdGluZyYmbHIucGFubmluZ0VuYWJsZWQoKSYmbHIudXNlclBhbm5pbmdFbmFibGVkKCkpe3ZhciBrNT1PKGJhLHguaG92ZXJEYXRhLmRvd25zKTtrNSYmKHguaG92ZXJEYXRhLmRyYWdnaW5nPSEwLHguaG92ZXJEYXRhLmp1c3RTdGFydGVkUGFuPSEwLCRjWzRdPTAseC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPUo3KEVzKSx4LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHgucmVkcmF3KCkpfWJhJiZiYS5wYW5uYWJsZSgpJiZiYS5hY3RpdmUoKSYmYmEudW5hY3RpdmF0ZSgpfX1lbHNle2lmKGJhJiZiYS5wYW5uYWJsZSgpJiZiYS5hY3RpdmUoKSYmYmEudW5hY3RpdmF0ZSgpLCghYmF8fCFiYS5ncmFiYmVkKCkpJiZ6YSE9U2MmJihTYyYmUyhTYyxbIm1vdXNlb3V0IiwidGFwZHJhZ291dCJdLEcse3g6d3JbMF0seTp3clsxXX0pLHphJiZTKHphLFsibW91c2VvdmVyIiwidGFwZHJhZ292ZXIiXSxHLHt4OndyWzBdLHk6d3JbMV19KSx4LmhvdmVyRGF0YS5sYXN0PXphKSxiYSlpZihXbCl7aWYobHIuYm94U2VsZWN0aW9uRW5hYmxlZCgpJiZXdiliYSYmYmEuZ3JhYmJlZCgpJiYoX2UobGgpLGJhLmVtaXQoImZyZWVvbiIpLGxoLmVtaXQoImZyZWUiKSx4LmRyYWdEYXRhLmRpZERyYWcmJihiYS5lbWl0KCJkcmFnZnJlZW9uIiksbGguZW1pdCgiZHJhZ2ZyZWUiKSkpLEU4KCk7ZWxzZSBpZihiYSYmYmEuZ3JhYmJlZCgpJiZ4Lm5vZGVJc0RyYWdnYWJsZShiYSkpe3ZhciBRZD0heC5kcmFnRGF0YS5kaWREcmFnO1FkJiZ4LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx4LmRyYWdEYXRhLmRpZERyYWc9ITAseC5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzfHxtZShsaCx7aW5EcmFnTGF5ZXI6ITB9KTt2YXIgXzE9e3g6MCx5OjB9O2lmKFgoeG9bMF0pJiZYKHhvWzFdKSYmKF8xLngrPXhvWzBdLF8xLnkrPXhvWzFdLFFkKSl7dmFyIEpkPXguaG92ZXJEYXRhLmRyYWdEZWx0YTtKZCYmWChKZFswXSkmJlgoSmRbMV0pJiYoXzEueCs9SmRbMF0sXzEueSs9SmRbMV0pfXguaG92ZXJEYXRhLmRyYWdnaW5nRWxlcz0hMCxsaC5zaWxlbnRTaGlmdChfMSkuZW1pdCgicG9zaXRpb24gZHJhZyIpLHgucmVkcmF3SGludCgiZHJhZyIsITApLHgucmVkcmF3KCl9fWVsc2Ugc3koKTtrcj0hMH1pZigkY1syXT13clswXSwkY1szXT13clsxXSxrcilyZXR1cm4gRy5zdG9wUHJvcGFnYXRpb24mJkcuc3RvcFByb3BhZ2F0aW9uKCksRy5wcmV2ZW50RGVmYXVsdCYmRy5wcmV2ZW50RGVmYXVsdCgpLCExfX0sITEpO3ZhciBMdCxNdCx1dDt4LnJlZ2lzdGVyQmluZGluZyhtLCJtb3VzZXVwIixmdW5jdGlvbihHKXt2YXIgSm49eC5ob3ZlckRhdGEuY2FwdHVyZTtpZihKbil7eC5ob3ZlckRhdGEuY2FwdHVyZT0hMTt2YXIga3I9eC5jeSxscj14LnByb2plY3RJbnRvVmlld3BvcnQoRy5jbGllbnRYLEcuY2xpZW50WSksVnQ9eC5zZWxlY3Rpb24sSHM9eC5maW5kTmVhcmVzdEVsZW1lbnQobHJbMF0sbHJbMV0sITAsITEpLHdyPXguZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHMsRXM9eC5ob3ZlckRhdGEuZG93bixnbz1NKEcpO2lmKHguZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbiYmKHgucmVkcmF3SGludCgic2VsZWN0IiwhMCkseC5yZWRyYXcoKSkseC5ob3ZlckRhdGEudGFwaG9sZENhbmNlbGxlZD0hMCx4LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLEVzJiZFcy51bmFjdGl2YXRlKCkseC5ob3ZlckRhdGEud2hpY2g9PT0zKXt2YXIgJGM9e29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJjeHR0YXBlbmQiLHBvc2l0aW9uOnt4OmxyWzBdLHk6bHJbMV19fTtpZihFcz9Fcy5lbWl0KCRjKTprci5lbWl0KCRjKSwheC5ob3ZlckRhdGEuY3h0RHJhZ2dlZCl7dmFyIHphPXtvcmlnaW5hbEV2ZW50OkcsdHlwZToiY3h0dGFwIixwb3NpdGlvbjp7eDpsclswXSx5OmxyWzFdfX07RXM/RXMuZW1pdCh6YSk6a3IuZW1pdCh6YSl9eC5ob3ZlckRhdGEuY3h0RHJhZ2dlZD0hMSx4LmhvdmVyRGF0YS53aGljaD1udWxsfWVsc2UgaWYoeC5ob3ZlckRhdGEud2hpY2g9PT0xKXtpZihTKEhzLFsibW91c2V1cCIsInRhcGVuZCIsInZtb3VzZXVwIl0sRyx7eDpsclswXSx5OmxyWzFdfSksIXguZHJhZ0RhdGEuZGlkRHJhZyYmIXguaG92ZXJEYXRhLmRyYWdnZWQmJiF4LmhvdmVyRGF0YS5zZWxlY3RpbmcmJiF4LmhvdmVyRGF0YS5pc092ZXJUaHJlc2hvbGREcmFnJiYoUyhFcyxbImNsaWNrIiwidGFwIiwidmNsaWNrIl0sRyx7eDpsclswXSx5OmxyWzFdfSksTXQ9ITEsRy50aW1lU3RhbXAtdXQ8PWtyLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKT8oTHQmJmNsZWFyVGltZW91dChMdCksTXQ9ITAsdXQ9bnVsbCxTKEVzLFsiZGJsY2xpY2siLCJkYmx0YXAiLCJ2ZGJsY2xpY2siXSxHLHt4OmxyWzBdLHk6bHJbMV19KSk6KEx0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtNdHx8UyhFcyxbIm9uZWNsaWNrIiwib25ldGFwIiwidm9uZWNsaWNrIl0sRyx7eDpsclswXSx5OmxyWzFdfSl9LGtyLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKSksdXQ9Ry50aW1lU3RhbXApKSxFcz09bnVsbCYmIXguZHJhZ0RhdGEuZGlkRHJhZyYmIXguaG92ZXJEYXRhLnNlbGVjdGluZyYmIXguaG92ZXJEYXRhLmRyYWdnZWQmJiFNKEcpJiYoa3IuJChrKS51bnNlbGVjdChbInRhcHVuc2VsZWN0Il0pLHdyLmxlbmd0aD4wJiZ4LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx4LmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzPXdyPWtyLmNvbGxlY3Rpb24oKSksSHM9PUVzJiYheC5kcmFnRGF0YS5kaWREcmFnJiYheC5ob3ZlckRhdGEuc2VsZWN0aW5nJiZIcyE9bnVsbCYmSHMuX3ByaXZhdGUuc2VsZWN0YWJsZSYmKHguaG92ZXJEYXRhLmRyYWdnaW5nfHwoa3Iuc2VsZWN0aW9uVHlwZSgpPT09ImFkZGl0aXZlInx8Z28/SHMuc2VsZWN0ZWQoKT9Icy51bnNlbGVjdChbInRhcHVuc2VsZWN0Il0pOkhzLnNlbGVjdChbInRhcHNlbGVjdCJdKTpnb3x8KGtyLiQoaykudW5tZXJnZShIcykudW5zZWxlY3QoWyJ0YXB1bnNlbGVjdCJdKSxIcy5zZWxlY3QoWyJ0YXBzZWxlY3QiXSkpKSx4LnJlZHJhd0hpbnQoImVsZXMiLCEwKSkseC5ob3ZlckRhdGEuc2VsZWN0aW5nKXt2YXIgU2M9a3IuY29sbGVjdGlvbih4LmdldEFsbEluQm94KFZ0WzBdLFZ0WzFdLFZ0WzJdLFZ0WzNdKSk7eC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSxTYy5sZW5ndGg+MCYmeC5yZWRyYXdIaW50KCJlbGVzIiwhMCksa3IuZW1pdCh7dHlwZToiYm94ZW5kIixvcmlnaW5hbEV2ZW50OkcscG9zaXRpb246e3g6bHJbMF0seTpsclsxXX19KTt2YXIgYmE9ZnVuY3Rpb24oV2wpe3JldHVybiBXbC5zZWxlY3RhYmxlKCkmJiFXbC5zZWxlY3RlZCgpfTtrci5zZWxlY3Rpb25UeXBlKCk9PT0iYWRkaXRpdmUifHxnb3x8a3IuJChrKS51bm1lcmdlKFNjKS51bnNlbGVjdCgpLFNjLmVtaXQoImJveCIpLnN0ZEZpbHRlcihiYSkuc2VsZWN0KCkuZW1pdCgiYm94c2VsZWN0IikseC5yZWRyYXcoKX1pZih4LmhvdmVyRGF0YS5kcmFnZ2luZyYmKHguaG92ZXJEYXRhLmRyYWdnaW5nPSExLHgucmVkcmF3SGludCgic2VsZWN0IiwhMCkseC5yZWRyYXdIaW50KCJlbGVzIiwhMCkseC5yZWRyYXcoKSksIVZ0WzRdKXt4LnJlZHJhd0hpbnQoImRyYWciLCEwKSx4LnJlZHJhd0hpbnQoImVsZXMiLCEwKTt2YXIgeG89RXMmJkVzLmdyYWJiZWQoKTtfZSh3cikseG8mJihFcy5lbWl0KCJmcmVlb24iKSx3ci5lbWl0KCJmcmVlIikseC5kcmFnRGF0YS5kaWREcmFnJiYoRXMuZW1pdCgiZHJhZ2ZyZWVvbiIpLHdyLmVtaXQoImRyYWdmcmVlIikpKX19VnRbNF09MCx4LmhvdmVyRGF0YS5kb3duPW51bGwseC5ob3ZlckRhdGEuY3h0U3RhcnRlZD0hMSx4LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXM9ITEseC5ob3ZlckRhdGEuc2VsZWN0aW5nPSExLHguaG92ZXJEYXRhLmlzT3ZlclRocmVzaG9sZERyYWc9ITEseC5kcmFnRGF0YS5kaWREcmFnPSExLHguaG92ZXJEYXRhLmRyYWdnZWQ9ITEseC5ob3ZlckRhdGEuZHJhZ0RlbHRhPVtdLHguaG92ZXJEYXRhLm1kb3duUG9zPW51bGwseC5ob3ZlckRhdGEubWRvd25HUG9zPW51bGx9fSwhMSk7dmFyIFd0PWZ1bmN0aW9uKEcpe2lmKCF4LnNjcm9sbGluZ1BhZ2Upe3ZhciBKbj14LmN5LGtyPUpuLnpvb20oKSxscj1Kbi5wYW4oKSxWdD14LnByb2plY3RJbnRvVmlld3BvcnQoRy5jbGllbnRYLEcuY2xpZW50WSksSHM9W1Z0WzBdKmtyK2xyLngsVnRbMV0qa3IrbHIueV07aWYoeC5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzfHx4LmhvdmVyRGF0YS5kcmFnZ2luZ3x8eC5ob3ZlckRhdGEuY3h0U3RhcnRlZHx8bXQoKSl7Ry5wcmV2ZW50RGVmYXVsdCgpO3JldHVybn1pZihKbi5wYW5uaW5nRW5hYmxlZCgpJiZKbi51c2VyUGFubmluZ0VuYWJsZWQoKSYmSm4uem9vbWluZ0VuYWJsZWQoKSYmSm4udXNlclpvb21pbmdFbmFibGVkKCkpe0cucHJldmVudERlZmF1bHQoKSx4LmRhdGEud2hlZWxab29taW5nPSEwLGNsZWFyVGltZW91dCh4LmRhdGEud2hlZWxUaW1lb3V0KSx4LmRhdGEud2hlZWxUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt4LmRhdGEud2hlZWxab29taW5nPSExLHgucmVkcmF3SGludCgiZWxlcyIsITApLHgucmVkcmF3KCl9LDE1MCk7dmFyIHdyO0cuZGVsdGFZIT1udWxsP3dyPUcuZGVsdGFZLy0yNTA6Ry53aGVlbERlbHRhWSE9bnVsbD93cj1HLndoZWVsRGVsdGFZLzFlMzp3cj1HLndoZWVsRGVsdGEvMWUzLHdyPXdyKngud2hlZWxTZW5zaXRpdml0eTt2YXIgRXM9Ry5kZWx0YU1vZGU9PT0xO0VzJiYod3IqPTMzKTt2YXIgZ289Sm4uem9vbSgpKk1hdGgucG93KDEwLHdyKTtHLnR5cGU9PT0iZ2VzdHVyZWNoYW5nZSImJihnbz14Lmdlc3R1cmVTdGFydFpvb20qRy5zY2FsZSksSm4uem9vbSh7bGV2ZWw6Z28scmVuZGVyZWRQb3NpdGlvbjp7eDpIc1swXSx5OkhzWzFdfX0pLEpuLmVtaXQoRy50eXBlPT09Imdlc3R1cmVjaGFuZ2UiPyJwaW5jaHpvb20iOiJzY3JvbGx6b29tIil9fX07eC5yZWdpc3RlckJpbmRpbmcoeC5jb250YWluZXIsIndoZWVsIixXdCwhMCkseC5yZWdpc3RlckJpbmRpbmcobSwic2Nyb2xsIixmdW5jdGlvbihHKXt4LnNjcm9sbGluZ1BhZ2U9ITAsY2xlYXJUaW1lb3V0KHguc2Nyb2xsaW5nUGFnZVRpbWVvdXQpLHguc2Nyb2xsaW5nUGFnZVRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe3guc2Nyb2xsaW5nUGFnZT0hMX0sMjUwKX0sITApLHgucmVnaXN0ZXJCaW5kaW5nKHguY29udGFpbmVyLCJnZXN0dXJlc3RhcnQiLGZ1bmN0aW9uKEcpe3guZ2VzdHVyZVN0YXJ0Wm9vbT14LmN5Lnpvb20oKSx4Lmhhc1RvdWNoU3RhcnRlZHx8Ry5wcmV2ZW50RGVmYXVsdCgpfSwhMCkseC5yZWdpc3RlckJpbmRpbmcoeC5jb250YWluZXIsImdlc3R1cmVjaGFuZ2UiLGZ1bmN0aW9uKHRyKXt4Lmhhc1RvdWNoU3RhcnRlZHx8V3QodHIpfSwhMCkseC5yZWdpc3RlckJpbmRpbmcoeC5jb250YWluZXIsIm1vdXNlb3V0IixmdW5jdGlvbihHKXt2YXIgSm49eC5wcm9qZWN0SW50b1ZpZXdwb3J0KEcuY2xpZW50WCxHLmNsaWVudFkpO3guY3kuZW1pdCh7b3JpZ2luYWxFdmVudDpHLHR5cGU6Im1vdXNlb3V0Iixwb3NpdGlvbjp7eDpKblswXSx5OkpuWzFdfX0pfSwhMSkseC5yZWdpc3RlckJpbmRpbmcoeC5jb250YWluZXIsIm1vdXNlb3ZlciIsZnVuY3Rpb24oRyl7dmFyIEpuPXgucHJvamVjdEludG9WaWV3cG9ydChHLmNsaWVudFgsRy5jbGllbnRZKTt4LmN5LmVtaXQoe29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJtb3VzZW92ZXIiLHBvc2l0aW9uOnt4OkpuWzBdLHk6Sm5bMV19fSl9LCExKTt2YXIgVHQsX24saG4sWXQsRG4saXIsdnIsTm4scHIsRXIsTXIsQ3IsT3IsV249ZnVuY3Rpb24oRyxKbixrcixscil7cmV0dXJuIE1hdGguc3FydCgoa3ItRykqKGtyLUcpKyhsci1KbikqKGxyLUpuKSl9LGJyPWZ1bmN0aW9uKEcsSm4sa3IsbHIpe3JldHVybihrci1HKSooa3ItRykrKGxyLUpuKSoobHItSm4pfSxTcjt4LnJlZ2lzdGVyQmluZGluZyh4LmNvbnRhaW5lciwidG91Y2hzdGFydCIsU3I9ZnVuY3Rpb24oRyl7aWYoeC5oYXNUb3VjaFN0YXJ0ZWQ9ITAsISFKZShHKSl7QmUoKSx4LnRvdWNoRGF0YS5jYXB0dXJlPSEwLHguZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDA7dmFyIEpuPXguY3ksa3I9eC50b3VjaERhdGEubm93LGxyPXgudG91Y2hEYXRhLmVhcmxpZXI7aWYoRy50b3VjaGVzWzBdKXt2YXIgVnQ9eC5wcm9qZWN0SW50b1ZpZXdwb3J0KEcudG91Y2hlc1swXS5jbGllbnRYLEcudG91Y2hlc1swXS5jbGllbnRZKTtrclswXT1WdFswXSxrclsxXT1WdFsxXX1pZihHLnRvdWNoZXNbMV0pe3ZhciBWdD14LnByb2plY3RJbnRvVmlld3BvcnQoRy50b3VjaGVzWzFdLmNsaWVudFgsRy50b3VjaGVzWzFdLmNsaWVudFkpO2tyWzJdPVZ0WzBdLGtyWzNdPVZ0WzFdfWlmKEcudG91Y2hlc1syXSl7dmFyIFZ0PXgucHJvamVjdEludG9WaWV3cG9ydChHLnRvdWNoZXNbMl0uY2xpZW50WCxHLnRvdWNoZXNbMl0uY2xpZW50WSk7a3JbNF09VnRbMF0sa3JbNV09VnRbMV19aWYoRy50b3VjaGVzWzFdKXt4LnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkPSEwLF9lKHguZHJhZ0RhdGEudG91Y2hEcmFnRWxlcyk7dmFyIEhzPXguZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpO3ByPUhzWzBdLEVyPUhzWzFdLE1yPUhzWzJdLENyPUhzWzNdLFR0PUcudG91Y2hlc1swXS5jbGllbnRYLXByLF9uPUcudG91Y2hlc1swXS5jbGllbnRZLUVyLGhuPUcudG91Y2hlc1sxXS5jbGllbnRYLXByLFl0PUcudG91Y2hlc1sxXS5jbGllbnRZLUVyLE9yPTA8PVR0JiZUdDw9TXImJjA8PWhuJiZobjw9TXImJjA8PV9uJiZfbjw9Q3ImJjA8PVl0JiZZdDw9Q3I7dmFyIHdyPUpuLnBhbigpLEVzPUpuLnpvb20oKTtEbj1XbihUdCxfbixobixZdCksaXI9YnIoVHQsX24saG4sWXQpLHZyPVsoVHQraG4pLzIsKF9uK1l0KS8yXSxObj1bKHZyWzBdLXdyLngpL0VzLCh2clsxXS13ci55KS9Fc107dmFyIGdvPTIwMCwkYz1nbypnbztpZihpcjwkYyYmIUcudG91Y2hlc1syXSl7dmFyIHphPXguZmluZE5lYXJlc3RFbGVtZW50KGtyWzBdLGtyWzFdLCEwLCEwKSxTYz14LmZpbmROZWFyZXN0RWxlbWVudChrclsyXSxrclszXSwhMCwhMCk7emEmJnphLmlzTm9kZSgpPyh6YS5hY3RpdmF0ZSgpLmVtaXQoe29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJjeHR0YXBzdGFydCIscG9zaXRpb246e3g6a3JbMF0seTprclsxXX19KSx4LnRvdWNoRGF0YS5zdGFydD16YSk6U2MmJlNjLmlzTm9kZSgpPyhTYy5hY3RpdmF0ZSgpLmVtaXQoe29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJjeHR0YXBzdGFydCIscG9zaXRpb246e3g6a3JbMF0seTprclsxXX19KSx4LnRvdWNoRGF0YS5zdGFydD1TYyk6Sm4uZW1pdCh7b3JpZ2luYWxFdmVudDpHLHR5cGU6ImN4dHRhcHN0YXJ0Iixwb3NpdGlvbjp7eDprclswXSx5OmtyWzFdfX0pLHgudG91Y2hEYXRhLnN0YXJ0JiYoeC50b3VjaERhdGEuc3RhcnQuX3ByaXZhdGUuZ3JhYmJlZD0hMSkseC50b3VjaERhdGEuY3h0PSEwLHgudG91Y2hEYXRhLmN4dERyYWdnZWQ9ITEseC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx4LnJlZHJhdygpO3JldHVybn19aWYoRy50b3VjaGVzWzJdKUpuLmJveFNlbGVjdGlvbkVuYWJsZWQoKSYmRy5wcmV2ZW50RGVmYXVsdCgpO2Vsc2UgaWYoIUcudG91Y2hlc1sxXSl7aWYoRy50b3VjaGVzWzBdKXt2YXIgYmE9eC5maW5kTmVhcmVzdEVsZW1lbnRzKGtyWzBdLGtyWzFdLCEwLCEwKSx4bz1iYVswXTtpZih4byE9bnVsbCYmKHhvLmFjdGl2YXRlKCkseC50b3VjaERhdGEuc3RhcnQ9eG8seC50b3VjaERhdGEuc3RhcnRzPWJhLHgubm9kZUlzR3JhYmJhYmxlKHhvKSkpe3ZhciBsaD14LmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXM9Sm4uY29sbGVjdGlvbigpLFdsPW51bGw7eC5yZWRyYXdIaW50KCJlbGVzIiwhMCkseC5yZWRyYXdIaW50KCJkcmFnIiwhMCkseG8uc2VsZWN0ZWQoKT8oV2w9Sm4uJChmdW5jdGlvbihmZCl7cmV0dXJuIGZkLnNlbGVjdGVkKCkmJngubm9kZUlzR3JhYmJhYmxlKGZkKX0pLG1lKFdsLHthZGRUb0xpc3Q6bGh9KSk6TGUoeG8se2FkZFRvTGlzdDpsaH0pLFkoeG8pO3ZhciBaMj1mdW5jdGlvbihXdil7cmV0dXJue29yaWdpbmFsRXZlbnQ6Ryx0eXBlOld2LHBvc2l0aW9uOnt4OmtyWzBdLHk6a3JbMV19fX07eG8uZW1pdChaMigiZ3JhYm9uIikpLFdsP1dsLmZvckVhY2goZnVuY3Rpb24oZmQpe2ZkLmVtaXQoWjIoImdyYWIiKSl9KTp4by5lbWl0KFoyKCJncmFiIikpfVMoeG8sWyJ0b3VjaHN0YXJ0IiwidGFwc3RhcnQiLCJ2bW91c2Vkb3duIl0sRyx7eDprclswXSx5OmtyWzFdfSkseG89PW51bGwmJih4LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249e3g6VnRbMF0seTpWdFsxXX0seC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx4LnJlZHJhdygpKSx4LnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkPSExLHgudG91Y2hEYXRhLnNpbmdsZVRvdWNoU3RhcnRUaW1lPStuZXcgRGF0ZSxjbGVhclRpbWVvdXQoeC50b3VjaERhdGEudGFwaG9sZFRpbWVvdXQpLHgudG91Y2hEYXRhLnRhcGhvbGRUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt4LnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkPT09ITEmJiF4LnBpbmNoaW5nJiYheC50b3VjaERhdGEuc2VsZWN0aW5nJiZTKHgudG91Y2hEYXRhLnN0YXJ0LFsidGFwaG9sZCJdLEcse3g6a3JbMF0seTprclsxXX0pfSx4LnRhcGhvbGREdXJhdGlvbil9fWlmKEcudG91Y2hlcy5sZW5ndGg+PTEpe2Zvcih2YXIgZWI9eC50b3VjaERhdGEuc3RhcnRQb3NpdGlvbj1bbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLEcwPTA7RzA8a3IubGVuZ3RoO0cwKyspZWJbRzBdPWxyW0cwXT1rcltHMF07dmFyIHpwPUcudG91Y2hlc1swXTt4LnRvdWNoRGF0YS5zdGFydEdQb3NpdGlvbj1benAuY2xpZW50WCx6cC5jbGllbnRZXX19fSwhMSk7dmFyIE5yO3gucmVnaXN0ZXJCaW5kaW5nKHdpbmRvdywidG91Y2htb3ZlIixOcj1mdW5jdGlvbihHKXt2YXIgSm49eC50b3VjaERhdGEuY2FwdHVyZTtpZighKCFKbiYmIUplKEcpKSl7dmFyIGtyPXguc2VsZWN0aW9uLGxyPXguY3ksVnQ9eC50b3VjaERhdGEubm93LEhzPXgudG91Y2hEYXRhLmVhcmxpZXIsd3I9bHIuem9vbSgpO2lmKEcudG91Y2hlc1swXSl7dmFyIEVzPXgucHJvamVjdEludG9WaWV3cG9ydChHLnRvdWNoZXNbMF0uY2xpZW50WCxHLnRvdWNoZXNbMF0uY2xpZW50WSk7VnRbMF09RXNbMF0sVnRbMV09RXNbMV19aWYoRy50b3VjaGVzWzFdKXt2YXIgRXM9eC5wcm9qZWN0SW50b1ZpZXdwb3J0KEcudG91Y2hlc1sxXS5jbGllbnRYLEcudG91Y2hlc1sxXS5jbGllbnRZKTtWdFsyXT1Fc1swXSxWdFszXT1Fc1sxXX1pZihHLnRvdWNoZXNbMl0pe3ZhciBFcz14LnByb2plY3RJbnRvVmlld3BvcnQoRy50b3VjaGVzWzJdLmNsaWVudFgsRy50b3VjaGVzWzJdLmNsaWVudFkpO1Z0WzRdPUVzWzBdLFZ0WzVdPUVzWzFdfXZhciBnbz14LnRvdWNoRGF0YS5zdGFydEdQb3NpdGlvbiwkYztpZihKbiYmRy50b3VjaGVzWzBdJiZnbyl7Zm9yKHZhciB6YT1bXSxTYz0wO1NjPFZ0Lmxlbmd0aDtTYysrKXphW1NjXT1WdFtTY10tSHNbU2NdO3ZhciBiYT1HLnRvdWNoZXNbMF0uY2xpZW50WC1nb1swXSx4bz1iYSpiYSxsaD1HLnRvdWNoZXNbMF0uY2xpZW50WS1nb1sxXSxXbD1saCpsaCxaMj14bytXbDskYz1aMj49eC50b3VjaFRhcFRocmVzaG9sZDJ9aWYoSm4mJngudG91Y2hEYXRhLmN4dCl7Ry5wcmV2ZW50RGVmYXVsdCgpO3ZhciBlYj1HLnRvdWNoZXNbMF0uY2xpZW50WC1wcixHMD1HLnRvdWNoZXNbMF0uY2xpZW50WS1Fcix6cD1HLnRvdWNoZXNbMV0uY2xpZW50WC1wcixmZD1HLnRvdWNoZXNbMV0uY2xpZW50WS1FcixXdj1icihlYixHMCx6cCxmZCksc3k9V3YvaXIsRTg9MTUwLHg1PUU4KkU4LFQ4PTEuNSxaUz1UOCpUODtpZihzeT49WlN8fFd2Pj14NSl7eC50b3VjaERhdGEuY3h0PSExLHguZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAseC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTt2YXIgazU9e29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJjeHR0YXBlbmQiLHBvc2l0aW9uOnt4OlZ0WzBdLHk6VnRbMV19fTt4LnRvdWNoRGF0YS5zdGFydD8oeC50b3VjaERhdGEuc3RhcnQudW5hY3RpdmF0ZSgpLmVtaXQoazUpLHgudG91Y2hEYXRhLnN0YXJ0PW51bGwpOmxyLmVtaXQoazUpfX1pZihKbiYmeC50b3VjaERhdGEuY3h0KXt2YXIgazU9e29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJjeHRkcmFnIixwb3NpdGlvbjp7eDpWdFswXSx5OlZ0WzFdfX07eC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx4LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHgudG91Y2hEYXRhLnN0YXJ0P3gudG91Y2hEYXRhLnN0YXJ0LmVtaXQoazUpOmxyLmVtaXQoazUpLHgudG91Y2hEYXRhLnN0YXJ0JiYoeC50b3VjaERhdGEuc3RhcnQuX3ByaXZhdGUuZ3JhYmJlZD0hMSkseC50b3VjaERhdGEuY3h0RHJhZ2dlZD0hMDt2YXIgUWQ9eC5maW5kTmVhcmVzdEVsZW1lbnQoVnRbMF0sVnRbMV0sITAsITApOygheC50b3VjaERhdGEuY3h0T3Zlcnx8UWQhPT14LnRvdWNoRGF0YS5jeHRPdmVyKSYmKHgudG91Y2hEYXRhLmN4dE92ZXImJngudG91Y2hEYXRhLmN4dE92ZXIuZW1pdCh7b3JpZ2luYWxFdmVudDpHLHR5cGU6ImN4dGRyYWdvdXQiLHBvc2l0aW9uOnt4OlZ0WzBdLHk6VnRbMV19fSkseC50b3VjaERhdGEuY3h0T3Zlcj1RZCxRZCYmUWQuZW1pdCh7b3JpZ2luYWxFdmVudDpHLHR5cGU6ImN4dGRyYWdvdmVyIixwb3NpdGlvbjp7eDpWdFswXSx5OlZ0WzFdfX0pKX1lbHNlIGlmKEpuJiZHLnRvdWNoZXNbMl0mJmxyLmJveFNlbGVjdGlvbkVuYWJsZWQoKSlHLnByZXZlbnREZWZhdWx0KCkseC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx0aGlzLmxhc3RUaHJlZVRvdWNoPStuZXcgRGF0ZSx4LnRvdWNoRGF0YS5zZWxlY3Rpbmd8fGxyLmVtaXQoe29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJib3hzdGFydCIscG9zaXRpb246e3g6VnRbMF0seTpWdFsxXX19KSx4LnRvdWNoRGF0YS5zZWxlY3Rpbmc9ITAseC50b3VjaERhdGEuZGlkU2VsZWN0PSEwLGtyWzRdPTEsIWtyfHxrci5sZW5ndGg9PT0wfHxrclswXT09PXZvaWQgMD8oa3JbMF09KFZ0WzBdK1Z0WzJdK1Z0WzRdKS8zLGtyWzFdPShWdFsxXStWdFszXStWdFs1XSkvMyxrclsyXT0oVnRbMF0rVnRbMl0rVnRbNF0pLzMrMSxrclszXT0oVnRbMV0rVnRbM10rVnRbNV0pLzMrMSk6KGtyWzJdPShWdFswXStWdFsyXStWdFs0XSkvMyxrclszXT0oVnRbMV0rVnRbM10rVnRbNV0pLzMpLHgucmVkcmF3SGludCgic2VsZWN0IiwhMCkseC5yZWRyYXcoKTtlbHNlIGlmKEpuJiZHLnRvdWNoZXNbMV0mJiF4LnRvdWNoRGF0YS5kaWRTZWxlY3QmJmxyLnpvb21pbmdFbmFibGVkKCkmJmxyLnBhbm5pbmdFbmFibGVkKCkmJmxyLnVzZXJab29taW5nRW5hYmxlZCgpJiZsci51c2VyUGFubmluZ0VuYWJsZWQoKSl7Ry5wcmV2ZW50RGVmYXVsdCgpLHguZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAseC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTt2YXIgXzE9eC5kcmFnRGF0YS50b3VjaERyYWdFbGVzO2lmKF8xKXt4LnJlZHJhd0hpbnQoImRyYWciLCEwKTtmb3IodmFyIEpkPTA7SmQ8XzEubGVuZ3RoO0pkKyspe3ZhciBZdj1fMVtKZF0uX3ByaXZhdGU7WXYuZ3JhYmJlZD0hMSxZdi5yc2NyYXRjaC5pbkRyYWdMYXllcj0hMX19dmFyIEVtPXgudG91Y2hEYXRhLnN0YXJ0LGViPUcudG91Y2hlc1swXS5jbGllbnRYLXByLEcwPUcudG91Y2hlc1swXS5jbGllbnRZLUVyLHpwPUcudG91Y2hlc1sxXS5jbGllbnRYLXByLGZkPUcudG91Y2hlc1sxXS5jbGllbnRZLUVyLEx6PVduKGViLEcwLHpwLGZkKSxMaWU9THovRG47aWYoT3Ipe3ZhciBNaWU9ZWItVHQsZV89RzAtX24sRGllPXpwLWhuLElpZT1mZC1ZdCxFNT0oTWllK0RpZSkvMixNej0oZV8rSWllKS8yLHlrPWxyLnpvb20oKSxVST15aypMaWUsdF89bHIucGFuKCksRHo9Tm5bMF0qeWsrdF8ueCxJej1OblsxXSp5ayt0Xy55LE9pZT17eDotVUkveWsqKER6LXRfLngtRTUpK0R6LHk6LVVJL3lrKihJei10Xy55LU16KStJen07aWYoRW0mJkVtLmFjdGl2ZSgpKXt2YXIgXzE9eC5kcmFnRGF0YS50b3VjaERyYWdFbGVzO19lKF8xKSx4LnJlZHJhd0hpbnQoImRyYWciLCEwKSx4LnJlZHJhd0hpbnQoImVsZXMiLCEwKSxFbS51bmFjdGl2YXRlKCkuZW1pdCgiZnJlZW9uIiksXzEuZW1pdCgiZnJlZSIpLHguZHJhZ0RhdGEuZGlkRHJhZyYmKEVtLmVtaXQoImRyYWdmcmVlb24iKSxfMS5lbWl0KCJkcmFnZnJlZSIpKX1sci52aWV3cG9ydCh7em9vbTpVSSxwYW46T2llLGNhbmNlbE9uRmFpbGVkWm9vbTohMH0pLGxyLmVtaXQoInBpbmNoem9vbSIpLERuPUx6LFR0PWViLF9uPUcwLGhuPXpwLFl0PWZkLHgucGluY2hpbmc9ITB9aWYoRy50b3VjaGVzWzBdKXt2YXIgRXM9eC5wcm9qZWN0SW50b1ZpZXdwb3J0KEcudG91Y2hlc1swXS5jbGllbnRYLEcudG91Y2hlc1swXS5jbGllbnRZKTtWdFswXT1Fc1swXSxWdFsxXT1Fc1sxXX1pZihHLnRvdWNoZXNbMV0pe3ZhciBFcz14LnByb2plY3RJbnRvVmlld3BvcnQoRy50b3VjaGVzWzFdLmNsaWVudFgsRy50b3VjaGVzWzFdLmNsaWVudFkpO1Z0WzJdPUVzWzBdLFZ0WzNdPUVzWzFdfWlmKEcudG91Y2hlc1syXSl7dmFyIEVzPXgucHJvamVjdEludG9WaWV3cG9ydChHLnRvdWNoZXNbMl0uY2xpZW50WCxHLnRvdWNoZXNbMl0uY2xpZW50WSk7VnRbNF09RXNbMF0sVnRbNV09RXNbMV19fWVsc2UgaWYoRy50b3VjaGVzWzBdJiYheC50b3VjaERhdGEuZGlkU2VsZWN0KXt2YXIgcXA9eC50b3VjaERhdGEuc3RhcnQsbl89eC50b3VjaERhdGEubGFzdCxRZDtpZigheC5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzJiYheC5zd2lwZVBhbm5pbmcmJihRZD14LmZpbmROZWFyZXN0RWxlbWVudChWdFswXSxWdFsxXSwhMCwhMCkpLEpuJiZxcCE9bnVsbCYmRy5wcmV2ZW50RGVmYXVsdCgpLEpuJiZxcCE9bnVsbCYmeC5ub2RlSXNEcmFnZ2FibGUocXApKWlmKCRjKXt2YXIgXzE9eC5kcmFnRGF0YS50b3VjaERyYWdFbGVzLEdJPSF4LmRyYWdEYXRhLmRpZERyYWc7R0kmJm1lKF8xLHtpbkRyYWdMYXllcjohMH0pLHguZHJhZ0RhdGEuZGlkRHJhZz0hMDt2YXIgVG09e3g6MCx5OjB9O2lmKFgoemFbMF0pJiZYKHphWzFdKSYmKFRtLngrPXphWzBdLFRtLnkrPXphWzFdLEdJKSl7eC5yZWRyYXdIaW50KCJlbGVzIiwhMCk7dmFyIFpkPXgudG91Y2hEYXRhLmRyYWdEZWx0YTtaZCYmWChaZFswXSkmJlgoWmRbMV0pJiYoVG0ueCs9WmRbMF0sVG0ueSs9WmRbMV0pfXguaG92ZXJEYXRhLmRyYWdnaW5nRWxlcz0hMCxfMS5zaWxlbnRTaGlmdChUbSkuZW1pdCgicG9zaXRpb24gZHJhZyIpLHgucmVkcmF3SGludCgiZHJhZyIsITApLHgudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb25bMF09PUhzWzBdJiZ4LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uWzFdPT1Ic1sxXSYmeC5yZWRyYXdIaW50KCJlbGVzIiwhMCkseC5yZWRyYXcoKX1lbHNle3ZhciBaZD14LnRvdWNoRGF0YS5kcmFnRGVsdGE9eC50b3VjaERhdGEuZHJhZ0RlbHRhfHxbXTtaZC5sZW5ndGg9PT0wPyhaZC5wdXNoKHphWzBdKSxaZC5wdXNoKHphWzFdKSk6KFpkWzBdKz16YVswXSxaZFsxXSs9emFbMV0pfWlmKFMocXB8fFFkLFsidG91Y2htb3ZlIiwidGFwZHJhZyIsInZtb3VzZW1vdmUiXSxHLHt4OlZ0WzBdLHk6VnRbMV19KSwoIXFwfHwhcXAuZ3JhYmJlZCgpKSYmUWQhPW5fJiYobl8mJm5fLmVtaXQoe29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJ0YXBkcmFnb3V0Iixwb3NpdGlvbjp7eDpWdFswXSx5OlZ0WzFdfX0pLFFkJiZRZC5lbWl0KHtvcmlnaW5hbEV2ZW50OkcsdHlwZToidGFwZHJhZ292ZXIiLHBvc2l0aW9uOnt4OlZ0WzBdLHk6VnRbMV19fSkpLHgudG91Y2hEYXRhLmxhc3Q9UWQsSm4pZm9yKHZhciBKZD0wO0pkPFZ0Lmxlbmd0aDtKZCsrKVZ0W0pkXSYmeC50b3VjaERhdGEuc3RhcnRQb3NpdGlvbltKZF0mJiRjJiYoeC50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZD0hMCk7aWYoSm4mJihxcD09bnVsbHx8cXAucGFubmFibGUoKSkmJmxyLnBhbm5pbmdFbmFibGVkKCkmJmxyLnVzZXJQYW5uaW5nRW5hYmxlZCgpKXt2YXIgVDU9TyhxcCx4LnRvdWNoRGF0YS5zdGFydHMpO1Q1JiYoRy5wcmV2ZW50RGVmYXVsdCgpLHguZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbnx8KHguZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj1KNyh4LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uKSkseC5zd2lwZVBhbm5pbmc/KGxyLnBhbkJ5KHt4OnphWzBdKndyLHk6emFbMV0qd3J9KSxsci5lbWl0KCJkcmFncGFuIikpOiRjJiYoeC5zd2lwZVBhbm5pbmc9ITAsbHIucGFuQnkoe3g6YmEqd3IseTpsaCp3cn0pLGxyLmVtaXQoImRyYWdwYW4iKSxxcCYmKHFwLnVuYWN0aXZhdGUoKSx4LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHgudG91Y2hEYXRhLnN0YXJ0PW51bGwpKSk7dmFyIEVzPXgucHJvamVjdEludG9WaWV3cG9ydChHLnRvdWNoZXNbMF0uY2xpZW50WCxHLnRvdWNoZXNbMF0uY2xpZW50WSk7VnRbMF09RXNbMF0sVnRbMV09RXNbMV19fWZvcih2YXIgU2M9MDtTYzxWdC5sZW5ndGg7U2MrKylIc1tTY109VnRbU2NdO0puJiZHLnRvdWNoZXMubGVuZ3RoPjAmJiF4LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMmJiF4LnN3aXBlUGFubmluZyYmeC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uIT1udWxsJiYoeC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx4LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHgucmVkcmF3KCkpfX0sITEpO3ZhciBTaTt4LnJlZ2lzdGVyQmluZGluZyhtLCJ0b3VjaGNhbmNlbCIsU2k9ZnVuY3Rpb24oRyl7dmFyIEpuPXgudG91Y2hEYXRhLnN0YXJ0O3gudG91Y2hEYXRhLmNhcHR1cmU9ITEsSm4mJkpuLnVuYWN0aXZhdGUoKX0pO3ZhciB5cyxwYSxNaSxnaTtpZih4LnJlZ2lzdGVyQmluZGluZyhtLCJ0b3VjaGVuZCIseXM9ZnVuY3Rpb24oRyl7dmFyIEpuPXgudG91Y2hEYXRhLnN0YXJ0LGtyPXgudG91Y2hEYXRhLmNhcHR1cmU7aWYoa3IpRy50b3VjaGVzLmxlbmd0aD09PTAmJih4LnRvdWNoRGF0YS5jYXB0dXJlPSExKSxHLnByZXZlbnREZWZhdWx0KCk7ZWxzZSByZXR1cm47dmFyIGxyPXguc2VsZWN0aW9uO3guc3dpcGVQYW5uaW5nPSExLHguaG92ZXJEYXRhLmRyYWdnaW5nRWxlcz0hMTt2YXIgVnQ9eC5jeSxIcz1WdC56b29tKCksd3I9eC50b3VjaERhdGEubm93LEVzPXgudG91Y2hEYXRhLmVhcmxpZXI7aWYoRy50b3VjaGVzWzBdKXt2YXIgZ289eC5wcm9qZWN0SW50b1ZpZXdwb3J0KEcudG91Y2hlc1swXS5jbGllbnRYLEcudG91Y2hlc1swXS5jbGllbnRZKTt3clswXT1nb1swXSx3clsxXT1nb1sxXX1pZihHLnRvdWNoZXNbMV0pe3ZhciBnbz14LnByb2plY3RJbnRvVmlld3BvcnQoRy50b3VjaGVzWzFdLmNsaWVudFgsRy50b3VjaGVzWzFdLmNsaWVudFkpO3dyWzJdPWdvWzBdLHdyWzNdPWdvWzFdfWlmKEcudG91Y2hlc1syXSl7dmFyIGdvPXgucHJvamVjdEludG9WaWV3cG9ydChHLnRvdWNoZXNbMl0uY2xpZW50WCxHLnRvdWNoZXNbMl0uY2xpZW50WSk7d3JbNF09Z29bMF0sd3JbNV09Z29bMV19Sm4mJkpuLnVuYWN0aXZhdGUoKTt2YXIgJGM7aWYoeC50b3VjaERhdGEuY3h0KXtpZigkYz17b3JpZ2luYWxFdmVudDpHLHR5cGU6ImN4dHRhcGVuZCIscG9zaXRpb246e3g6d3JbMF0seTp3clsxXX19LEpuP0puLmVtaXQoJGMpOlZ0LmVtaXQoJGMpLCF4LnRvdWNoRGF0YS5jeHREcmFnZ2VkKXt2YXIgemE9e29yaWdpbmFsRXZlbnQ6Ryx0eXBlOiJjeHR0YXAiLHBvc2l0aW9uOnt4OndyWzBdLHk6d3JbMV19fTtKbj9Kbi5lbWl0KHphKTpWdC5lbWl0KHphKX14LnRvdWNoRGF0YS5zdGFydCYmKHgudG91Y2hEYXRhLnN0YXJ0Ll9wcml2YXRlLmdyYWJiZWQ9ITEpLHgudG91Y2hEYXRhLmN4dD0hMSx4LnRvdWNoRGF0YS5zdGFydD1udWxsLHgucmVkcmF3KCk7cmV0dXJufWlmKCFHLnRvdWNoZXNbMl0mJlZ0LmJveFNlbGVjdGlvbkVuYWJsZWQoKSYmeC50b3VjaERhdGEuc2VsZWN0aW5nKXt4LnRvdWNoRGF0YS5zZWxlY3Rpbmc9ITE7dmFyIFNjPVZ0LmNvbGxlY3Rpb24oeC5nZXRBbGxJbkJveChsclswXSxsclsxXSxsclsyXSxsclszXSkpO2xyWzBdPXZvaWQgMCxsclsxXT12b2lkIDAsbHJbMl09dm9pZCAwLGxyWzNdPXZvaWQgMCxscls0XT0wLHgucmVkcmF3SGludCgic2VsZWN0IiwhMCksVnQuZW1pdCh7dHlwZToiYm94ZW5kIixvcmlnaW5hbEV2ZW50OkcscG9zaXRpb246e3g6d3JbMF0seTp3clsxXX19KTt2YXIgYmE9ZnVuY3Rpb24oeDUpe3JldHVybiB4NS5zZWxlY3RhYmxlKCkmJiF4NS5zZWxlY3RlZCgpfTtTYy5lbWl0KCJib3giKS5zdGRGaWx0ZXIoYmEpLnNlbGVjdCgpLmVtaXQoImJveHNlbGVjdCIpLFNjLm5vbmVtcHR5KCkmJngucmVkcmF3SGludCgiZWxlcyIsITApLHgucmVkcmF3KCl9aWYoSm4hPW51bGwmJkpuLnVuYWN0aXZhdGUoKSxHLnRvdWNoZXNbMl0peC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx4LnJlZHJhd0hpbnQoInNlbGVjdCIsITApO2Vsc2UgaWYoIUcudG91Y2hlc1sxXSl7aWYoIUcudG91Y2hlc1swXSl7aWYoIUcudG91Y2hlc1swXSl7eC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx4LnJlZHJhd0hpbnQoInNlbGVjdCIsITApO3ZhciB4bz14LmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXM7aWYoSm4hPW51bGwpe3ZhciBsaD1Kbi5fcHJpdmF0ZS5ncmFiYmVkO19lKHhvKSx4LnJlZHJhd0hpbnQoImRyYWciLCEwKSx4LnJlZHJhd0hpbnQoImVsZXMiLCEwKSxsaCYmKEpuLmVtaXQoImZyZWVvbiIpLHhvLmVtaXQoImZyZWUiKSx4LmRyYWdEYXRhLmRpZERyYWcmJihKbi5lbWl0KCJkcmFnZnJlZW9uIikseG8uZW1pdCgiZHJhZ2ZyZWUiKSkpLFMoSm4sWyJ0b3VjaGVuZCIsInRhcGVuZCIsInZtb3VzZXVwIiwidGFwZHJhZ291dCJdLEcse3g6d3JbMF0seTp3clsxXX0pLEpuLnVuYWN0aXZhdGUoKSx4LnRvdWNoRGF0YS5zdGFydD1udWxsfWVsc2V7dmFyIFdsPXguZmluZE5lYXJlc3RFbGVtZW50KHdyWzBdLHdyWzFdLCEwLCEwKTtTKFdsLFsidG91Y2hlbmQiLCJ0YXBlbmQiLCJ2bW91c2V1cCIsInRhcGRyYWdvdXQiXSxHLHt4OndyWzBdLHk6d3JbMV19KX12YXIgWjI9eC50b3VjaERhdGEuc3RhcnRQb3NpdGlvblswXS13clswXSxlYj1aMipaMixHMD14LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uWzFdLXdyWzFdLHpwPUcwKkcwLGZkPWViK3pwLFd2PWZkKkhzKkhzO3gudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWR8fChKbnx8VnQuJCgiOnNlbGVjdGVkIikudW5zZWxlY3QoWyJ0YXB1bnNlbGVjdCJdKSxTKEpuLFsidGFwIiwidmNsaWNrIl0sRyx7eDp3clswXSx5OndyWzFdfSkscGE9ITEsRy50aW1lU3RhbXAtZ2k8PVZ0Lm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKT8oTWkmJmNsZWFyVGltZW91dChNaSkscGE9ITAsZ2k9bnVsbCxTKEpuLFsiZGJsdGFwIiwidmRibGNsaWNrIl0sRyx7eDp3clswXSx5OndyWzFdfSkpOihNaT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cGF8fFMoSm4sWyJvbmV0YXAiLCJ2b25lY2xpY2siXSxHLHt4OndyWzBdLHk6d3JbMV19KX0sVnQubXVsdGlDbGlja0RlYm91bmNlVGltZSgpKSxnaT1HLnRpbWVTdGFtcCkpLEpuIT1udWxsJiYheC5kcmFnRGF0YS5kaWREcmFnJiZKbi5fcHJpdmF0ZS5zZWxlY3RhYmxlJiZXdjx4LnRvdWNoVGFwVGhyZXNob2xkMiYmIXgucGluY2hpbmcmJihWdC5zZWxlY3Rpb25UeXBlKCk9PT0ic2luZ2xlIj8oVnQuJChrKS51bm1lcmdlKEpuKS51bnNlbGVjdChbInRhcHVuc2VsZWN0Il0pLEpuLnNlbGVjdChbInRhcHNlbGVjdCJdKSk6Sm4uc2VsZWN0ZWQoKT9Kbi51bnNlbGVjdChbInRhcHVuc2VsZWN0Il0pOkpuLnNlbGVjdChbInRhcHNlbGVjdCJdKSx4LnJlZHJhd0hpbnQoImVsZXMiLCEwKSkseC50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZD0hMH19fWZvcih2YXIgc3k9MDtzeTx3ci5sZW5ndGg7c3krKylFc1tzeV09d3Jbc3ldO3guZHJhZ0RhdGEuZGlkRHJhZz0hMSxHLnRvdWNoZXMubGVuZ3RoPT09MCYmKHgudG91Y2hEYXRhLmRyYWdEZWx0YT1bXSx4LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uPVtudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0seC50b3VjaERhdGEuc3RhcnRHUG9zaXRpb249bnVsbCx4LnRvdWNoRGF0YS5kaWRTZWxlY3Q9ITEpLEcudG91Y2hlcy5sZW5ndGg8MiYmKEcudG91Y2hlcy5sZW5ndGg9PT0xJiYoeC50b3VjaERhdGEuc3RhcnRHUG9zaXRpb249W0cudG91Y2hlc1swXS5jbGllbnRYLEcudG91Y2hlc1swXS5jbGllbnRZXSkseC5waW5jaGluZz0hMSx4LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx4LnJlZHJhdygpKX0sITEpLHR5cGVvZiBUb3VjaEV2ZW50PiJ1Iil7dmFyIGZzPVtdLEZzPWZ1bmN0aW9uKEcpe3JldHVybntjbGllbnRYOkcuY2xpZW50WCxjbGllbnRZOkcuY2xpZW50WSxmb3JjZToxLGlkZW50aWZpZXI6Ry5wb2ludGVySWQscGFnZVg6Ry5wYWdlWCxwYWdlWTpHLnBhZ2VZLHJhZGl1c1g6Ry53aWR0aC8yLHJhZGl1c1k6Ry5oZWlnaHQvMixzY3JlZW5YOkcuc2NyZWVuWCxzY3JlZW5ZOkcuc2NyZWVuWSx0YXJnZXQ6Ry50YXJnZXR9fSx4cz1mdW5jdGlvbihHKXtyZXR1cm57ZXZlbnQ6Ryx0b3VjaDpGcyhHKX19LFJzPWZ1bmN0aW9uKEcpe2ZzLnB1c2goeHMoRykpfSx5bz1mdW5jdGlvbihHKXtmb3IodmFyIEpuPTA7Sm48ZnMubGVuZ3RoO0puKyspe3ZhciBrcj1mc1tKbl07aWYoa3IuZXZlbnQucG9pbnRlcklkPT09Ry5wb2ludGVySWQpe2ZzLnNwbGljZShKbiwxKTtyZXR1cm59fX0sJGE9ZnVuY3Rpb24oRyl7dmFyIEpuPWZzLmZpbHRlcihmdW5jdGlvbihrcil7cmV0dXJuIGtyLmV2ZW50LnBvaW50ZXJJZD09PUcucG9pbnRlcklkfSlbMF07Sm4uZXZlbnQ9RyxKbi50b3VjaD1GcyhHKX0sRGE9ZnVuY3Rpb24oRyl7Ry50b3VjaGVzPWZzLm1hcChmdW5jdGlvbihKbil7cmV0dXJuIEpuLnRvdWNofSl9LEJvPWZ1bmN0aW9uKEcpe3JldHVybiBHLnBvaW50ZXJUeXBlPT09Im1vdXNlInx8Ry5wb2ludGVyVHlwZT09PTR9O3gucmVnaXN0ZXJCaW5kaW5nKHguY29udGFpbmVyLCJwb2ludGVyZG93biIsZnVuY3Rpb24odHIpe0JvKHRyKXx8KHRyLnByZXZlbnREZWZhdWx0KCksUnModHIpLERhKHRyKSxTcih0cikpfSkseC5yZWdpc3RlckJpbmRpbmcoeC5jb250YWluZXIsInBvaW50ZXJ1cCIsZnVuY3Rpb24odHIpe0JvKHRyKXx8KHlvKHRyKSxEYSh0cikseXModHIpKX0pLHgucmVnaXN0ZXJCaW5kaW5nKHguY29udGFpbmVyLCJwb2ludGVyY2FuY2VsIixmdW5jdGlvbih0cil7Qm8odHIpfHwoeW8odHIpLERhKHRyKSxTaSh0cikpfSkseC5yZWdpc3RlckJpbmRpbmcoeC5jb250YWluZXIsInBvaW50ZXJtb3ZlIixmdW5jdGlvbih0cil7Qm8odHIpfHwodHIucHJldmVudERlZmF1bHQoKSwkYSh0ciksRGEodHIpLE5yKHRyKSl9KX19O3ZhciBLdj17fTtLdi5nZW5lcmF0ZVBvbHlnb249ZnVuY3Rpb24oeCxtKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzW3hdPXtyZW5kZXJlcjp0aGlzLG5hbWU6eCxwb2ludHM6bSxkcmF3OmZ1bmN0aW9uKFMsTSxPLE4sJCl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKCJwb2x5Z29uIixTLE0sTyxOLCQsdGhpcy5wb2ludHMpfSxpbnRlcnNlY3RMaW5lOmZ1bmN0aW9uKFMsTSxPLE4sJCxILHEpe3JldHVybiBLOSgkLEgsdGhpcy5wb2ludHMsUyxNLE8vMixOLzIscSl9LGNoZWNrUG9pbnQ6ZnVuY3Rpb24oUyxNLE8sTiwkLEgscSl7cmV0dXJuIFV2KFMsTSx0aGlzLnBvaW50cyxILHEsTiwkLFswLC0xXSxPKX19fSxLdi5nZW5lcmF0ZUVsbGlwc2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzLmVsbGlwc2U9e3JlbmRlcmVyOnRoaXMsbmFtZToiZWxsaXBzZSIsZHJhdzpmdW5jdGlvbihtLGssUyxNLE8pe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCh0aGlzLm5hbWUsbSxrLFMsTSxPKX0saW50ZXJzZWN0TGluZTpmdW5jdGlvbihtLGssUyxNLE8sTiwkKXtyZXR1cm4gQ1ooTyxOLG0sayxTLzIrJCxNLzIrJCl9LGNoZWNrUG9pbnQ6ZnVuY3Rpb24obSxrLFMsTSxPLE4sJCl7cmV0dXJuIGQ1KG0sayxNLE8sTiwkLFMpfX19LEt2LmdlbmVyYXRlUm91bmRQb2x5Z29uPWZ1bmN0aW9uKHgsbSl7Zm9yKHZhciBrPW5ldyBBcnJheShtLmxlbmd0aCoyKSxTPTA7UzxtLmxlbmd0aC8yO1MrKyl7dmFyIE09UyoyLE89dm9pZCAwO1M8bS5sZW5ndGgvMi0xP089KFMrMSkqMjpPPTAsa1tTKjRdPW1bTV0sa1tTKjQrMV09bVtNKzFdO3ZhciBOPW1bT10tbVtNXSwkPW1bTysxXS1tW00rMV0sSD1NYXRoLnNxcnQoTipOKyQqJCk7a1tTKjQrMl09Ti9ILGtbUyo0KzNdPSQvSH1yZXR1cm4gdGhpcy5ub2RlU2hhcGVzW3hdPXtyZW5kZXJlcjp0aGlzLG5hbWU6eCxwb2ludHM6ayxkcmF3OmZ1bmN0aW9uKFksWixjZSx2ZSxtZSl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKCJyb3VuZC1wb2x5Z29uIixZLFosY2UsdmUsbWUsdGhpcy5wb2ludHMpfSxpbnRlcnNlY3RMaW5lOmZ1bmN0aW9uKFksWixjZSx2ZSxtZSxMZSxfZSl7cmV0dXJuIFNaKG1lLExlLHRoaXMucG9pbnRzLFksWixjZSx2ZSl9LGNoZWNrUG9pbnQ6ZnVuY3Rpb24oWSxaLGNlLHZlLG1lLExlLF9lKXtyZXR1cm4gVFooWSxaLHRoaXMucG9pbnRzLExlLF9lLHZlLG1lKX19fSxLdi5nZW5lcmF0ZVJvdW5kUmVjdGFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVNoYXBlc1sicm91bmQtcmVjdGFuZ2xlIl09dGhpcy5ub2RlU2hhcGVzLnJvdW5kcmVjdGFuZ2xlPXtyZW5kZXJlcjp0aGlzLG5hbWU6InJvdW5kLXJlY3RhbmdsZSIscG9pbnRzOmhkKDQsMCksZHJhdzpmdW5jdGlvbihtLGssUyxNLE8pe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCh0aGlzLm5hbWUsbSxrLFMsTSxPKX0saW50ZXJzZWN0TGluZTpmdW5jdGlvbihtLGssUyxNLE8sTiwkKXtyZXR1cm4gYmooTyxOLG0sayxTLE0sJCl9LGNoZWNrUG9pbnQ6ZnVuY3Rpb24obSxrLFMsTSxPLE4sJCl7dmFyIEg9VzkoTSxPKSxxPUgqMjtyZXR1cm4hIShVdihtLGssdGhpcy5wb2ludHMsTiwkLE0sTy1xLFswLC0xXSxTKXx8VXYobSxrLHRoaXMucG9pbnRzLE4sJCxNLXEsTyxbMCwtMV0sUyl8fGQ1KG0sayxxLHEsTi1NLzIrSCwkLU8vMitILFMpfHxkNShtLGsscSxxLE4rTS8yLUgsJC1PLzIrSCxTKXx8ZDUobSxrLHEscSxOK00vMi1ILCQrTy8yLUgsUyl8fGQ1KG0sayxxLHEsTi1NLzIrSCwkK08vMi1ILFMpKX19fSxLdi5nZW5lcmF0ZUN1dFJlY3RhbmdsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVTaGFwZXNbImN1dC1yZWN0YW5nbGUiXT10aGlzLm5vZGVTaGFwZXMuY3V0cmVjdGFuZ2xlPXtyZW5kZXJlcjp0aGlzLG5hbWU6ImN1dC1yZWN0YW5nbGUiLGNvcm5lckxlbmd0aDp2aigpLHBvaW50czpoZCg0LDApLGRyYXc6ZnVuY3Rpb24obSxrLFMsTSxPKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLG0sayxTLE0sTyl9LGdlbmVyYXRlQ3V0VHJpYW5nbGVQdHM6ZnVuY3Rpb24obSxrLFMsTSl7dmFyIE89dGhpcy5jb3JuZXJMZW5ndGgsTj1rLzIsJD1tLzIsSD1TLSQscT1TKyQsWT1NLU4sWj1NK047cmV0dXJue3RvcExlZnQ6W0gsWStPLEgrTyxZLEgrTyxZK09dLHRvcFJpZ2h0OltxLU8sWSxxLFkrTyxxLU8sWStPXSxib3R0b21SaWdodDpbcSxaLU8scS1PLFoscS1PLFotT10sYm90dG9tTGVmdDpbSCtPLFosSCxaLU8sSCtPLFotT119fSxpbnRlcnNlY3RMaW5lOmZ1bmN0aW9uKG0sayxTLE0sTyxOLCQpe3ZhciBIPXRoaXMuZ2VuZXJhdGVDdXRUcmlhbmdsZVB0cyhTKzIqJCxNKzIqJCxtLGspLHE9W10uY29uY2F0LmFwcGx5KFtdLFtILnRvcExlZnQuc3BsaWNlKDAsNCksSC50b3BSaWdodC5zcGxpY2UoMCw0KSxILmJvdHRvbVJpZ2h0LnNwbGljZSgwLDQpLEguYm90dG9tTGVmdC5zcGxpY2UoMCw0KV0pO3JldHVybiBLOShPLE4scSxtLGspfSxjaGVja1BvaW50OmZ1bmN0aW9uKG0sayxTLE0sTyxOLCQpe2lmKFV2KG0sayx0aGlzLnBvaW50cyxOLCQsTSxPLTIqdGhpcy5jb3JuZXJMZW5ndGgsWzAsLTFdLFMpfHxVdihtLGssdGhpcy5wb2ludHMsTiwkLE0tMip0aGlzLmNvcm5lckxlbmd0aCxPLFswLC0xXSxTKSlyZXR1cm4hMDt2YXIgSD10aGlzLmdlbmVyYXRlQ3V0VHJpYW5nbGVQdHMoTSxPLE4sJCk7cmV0dXJuIFlkKG0sayxILnRvcExlZnQpfHxZZChtLGssSC50b3BSaWdodCl8fFlkKG0sayxILmJvdHRvbVJpZ2h0KXx8WWQobSxrLEguYm90dG9tTGVmdCl9fX0sS3YuZ2VuZXJhdGVCYXJyZWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzLmJhcnJlbD17cmVuZGVyZXI6dGhpcyxuYW1lOiJiYXJyZWwiLHBvaW50czpoZCg0LDApLGRyYXc6ZnVuY3Rpb24obSxrLFMsTSxPKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLG0sayxTLE0sTyl9LGludGVyc2VjdExpbmU6ZnVuY3Rpb24obSxrLFMsTSxPLE4sJCl7dmFyIEg9LjE1LHE9LjUsWT0uODUsWj10aGlzLmdlbmVyYXRlQmFycmVsQmV6aWVyUHRzKFMrMiokLE0rMiokLG0sayksY2U9ZnVuY3Rpb24oTGUpe3ZhciBfZT1aNyh7eDpMZVswXSx5OkxlWzFdfSx7eDpMZVsyXSx5OkxlWzNdfSx7eDpMZVs0XSx5OkxlWzVdfSxIKSxFZT1aNyh7eDpMZVswXSx5OkxlWzFdfSx7eDpMZVsyXSx5OkxlWzNdfSx7eDpMZVs0XSx5OkxlWzVdfSxxKSxCZT1aNyh7eDpMZVswXSx5OkxlWzFdfSx7eDpMZVsyXSx5OkxlWzNdfSx7eDpMZVs0XSx5OkxlWzVdfSxZKTtyZXR1cm5bTGVbMF0sTGVbMV0sX2UueCxfZS55LEVlLngsRWUueSxCZS54LEJlLnksTGVbNF0sTGVbNV1dfSx2ZT1bXS5jb25jYXQoY2UoWi50b3BMZWZ0KSxjZShaLnRvcFJpZ2h0KSxjZShaLmJvdHRvbVJpZ2h0KSxjZShaLmJvdHRvbUxlZnQpKTtyZXR1cm4gSzkoTyxOLHZlLG0sayl9LGdlbmVyYXRlQmFycmVsQmV6aWVyUHRzOmZ1bmN0aW9uKG0sayxTLE0pe3ZhciBPPWsvMixOPW0vMiwkPVMtTixIPVMrTixxPU0tTyxZPU0rTyxaPXVJKG0sayksY2U9Wi5oZWlnaHRPZmZzZXQsdmU9Wi53aWR0aE9mZnNldCxtZT1aLmN0cmxQdE9mZnNldFBjdCptLExlPXt0b3BMZWZ0OlskLHErY2UsJCttZSxxLCQrdmUscV0sdG9wUmlnaHQ6W0gtdmUscSxILW1lLHEsSCxxK2NlXSxib3R0b21SaWdodDpbSCxZLWNlLEgtbWUsWSxILXZlLFldLGJvdHRvbUxlZnQ6WyQrdmUsWSwkK21lLFksJCxZLWNlXX07cmV0dXJuIExlLnRvcExlZnQuaXNUb3A9ITAsTGUudG9wUmlnaHQuaXNUb3A9ITAsTGUuYm90dG9tTGVmdC5pc0JvdHRvbT0hMCxMZS5ib3R0b21SaWdodC5pc0JvdHRvbT0hMCxMZX0sY2hlY2tQb2ludDpmdW5jdGlvbihtLGssUyxNLE8sTiwkKXt2YXIgSD11SShNLE8pLHE9SC5oZWlnaHRPZmZzZXQsWT1ILndpZHRoT2Zmc2V0O2lmKFV2KG0sayx0aGlzLnBvaW50cyxOLCQsTSxPLTIqcSxbMCwtMV0sUyl8fFV2KG0sayx0aGlzLnBvaW50cyxOLCQsTS0yKlksTyxbMCwtMV0sUykpcmV0dXJuITA7Zm9yKHZhciBaPXRoaXMuZ2VuZXJhdGVCYXJyZWxCZXppZXJQdHMoTSxPLE4sJCksY2U9ZnVuY3Rpb24oWWUsbXQsSmUpe3ZhciBMdD1KZVs0XSxNdD1KZVsyXSx1dD1KZVswXSxXdD1KZVs1XSxUdD1KZVsxXSxfbj1NYXRoLm1pbihMdCx1dCksaG49TWF0aC5tYXgoTHQsdXQpLFl0PU1hdGgubWluKFd0LFR0KSxEbj1NYXRoLm1heChXdCxUdCk7aWYoX248PVllJiZZZTw9aG4mJll0PD1tdCYmbXQ8PURuKXt2YXIgaXI9X1ooTHQsTXQsdXQpLHZyPXlaKGlyWzBdLGlyWzFdLGlyWzJdLFllKSxObj12ci5maWx0ZXIoZnVuY3Rpb24ocHIpe3JldHVybiAwPD1wciYmcHI8PTF9KTtpZihObi5sZW5ndGg+MClyZXR1cm4gTm5bMF19cmV0dXJuIG51bGx9LHZlPU9iamVjdC5rZXlzKFopLG1lPTA7bWU8dmUubGVuZ3RoO21lKyspe3ZhciBMZT12ZVttZV0sX2U9WltMZV0sRWU9Y2UobSxrLF9lKTtpZihFZSE9bnVsbCl7dmFyIEJlPV9lWzVdLFJlPV9lWzNdLFZlPV9lWzFdLGN0PXQwKEJlLFJlLFZlLEVlKTtpZihfZS5pc1RvcCYmY3Q8PWt8fF9lLmlzQm90dG9tJiZrPD1jdClyZXR1cm4hMH19cmV0dXJuITF9fX0sS3YuZ2VuZXJhdGVCb3R0b21Sb3VuZHJlY3RhbmdsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVTaGFwZXNbImJvdHRvbS1yb3VuZC1yZWN0YW5nbGUiXT10aGlzLm5vZGVTaGFwZXMuYm90dG9tcm91bmRyZWN0YW5nbGU9e3JlbmRlcmVyOnRoaXMsbmFtZToiYm90dG9tLXJvdW5kLXJlY3RhbmdsZSIscG9pbnRzOmhkKDQsMCksZHJhdzpmdW5jdGlvbihtLGssUyxNLE8pe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCh0aGlzLm5hbWUsbSxrLFMsTSxPKX0saW50ZXJzZWN0TGluZTpmdW5jdGlvbihtLGssUyxNLE8sTiwkKXt2YXIgSD1tLShTLzIrJCkscT1rLShNLzIrJCksWT1xLFo9bSsoUy8yKyQpLGNlPVozKE8sTixtLGssSCxxLFosWSwhMSk7cmV0dXJuIGNlLmxlbmd0aD4wP2NlOmJqKE8sTixtLGssUyxNLCQpfSxjaGVja1BvaW50OmZ1bmN0aW9uKG0sayxTLE0sTyxOLCQpe3ZhciBIPVc5KE0sTykscT0yKkg7aWYoVXYobSxrLHRoaXMucG9pbnRzLE4sJCxNLE8tcSxbMCwtMV0sUyl8fFV2KG0sayx0aGlzLnBvaW50cyxOLCQsTS1xLE8sWzAsLTFdLFMpKXJldHVybiEwO3ZhciBZPU0vMisyKlMsWj1PLzIrMipTLGNlPVtOLVksJC1aLE4tWSwkLE4rWSwkLE4rWSwkLVpdO3JldHVybiEhKFlkKG0sayxjZSl8fGQ1KG0sayxxLHEsTitNLzItSCwkK08vMi1ILFMpfHxkNShtLGsscSxxLE4tTS8yK0gsJCtPLzItSCxTKSl9fX0sS3YucmVnaXN0ZXJOb2RlU2hhcGVzPWZ1bmN0aW9uKCl7dmFyIHg9dGhpcy5ub2RlU2hhcGVzPXt9LG09dGhpczt0aGlzLmdlbmVyYXRlRWxsaXBzZSgpLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJ0cmlhbmdsZSIsaGQoMywwKSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtdHJpYW5nbGUiLGhkKDMsMCkpLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJyZWN0YW5nbGUiLGhkKDQsMCkpLHguc3F1YXJlPXgucmVjdGFuZ2xlLHRoaXMuZ2VuZXJhdGVSb3VuZFJlY3RhbmdsZSgpLHRoaXMuZ2VuZXJhdGVDdXRSZWN0YW5nbGUoKSx0aGlzLmdlbmVyYXRlQmFycmVsKCksdGhpcy5nZW5lcmF0ZUJvdHRvbVJvdW5kcmVjdGFuZ2xlKCk7e3ZhciBrPVswLDEsMSwwLDAsLTEsLTEsMF07dGhpcy5nZW5lcmF0ZVBvbHlnb24oImRpYW1vbmQiLGspLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLWRpYW1vbmQiLGspfXRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJwZW50YWdvbiIsaGQoNSwwKSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtcGVudGFnb24iLGhkKDUsMCkpLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJoZXhhZ29uIixoZCg2LDApKSx0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCJyb3VuZC1oZXhhZ29uIixoZCg2LDApKSx0aGlzLmdlbmVyYXRlUG9seWdvbigiaGVwdGFnb24iLGhkKDcsMCkpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLWhlcHRhZ29uIixoZCg3LDApKSx0aGlzLmdlbmVyYXRlUG9seWdvbigib2N0YWdvbiIsaGQoOCwwKSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtb2N0YWdvbiIsaGQoOCwwKSk7dmFyIFM9bmV3IEFycmF5KDIwKTt7dmFyIE09b0koNSwwKSxPPW9JKDUsTWF0aC5QSS81KSxOPS41KigzLU1hdGguc3FydCg1KSk7Tio9MS41Nztmb3IodmFyICQ9MDskPE8ubGVuZ3RoLzI7JCsrKU9bJCoyXSo9TixPWyQqMisxXSo9Tjtmb3IodmFyICQ9MDskPDIwLzQ7JCsrKVNbJCo0XT1NWyQqMl0sU1skKjQrMV09TVskKjIrMV0sU1skKjQrMl09T1skKjJdLFNbJCo0KzNdPU9bJCoyKzFdfVM9bWooUyksdGhpcy5nZW5lcmF0ZVBvbHlnb24oInN0YXIiLFMpLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJ2ZWUiLFstMSwtMSwwLC0uMzMzLDEsLTEsMCwxXSksdGhpcy5nZW5lcmF0ZVBvbHlnb24oInJob21ib2lkIixbLTEsLTEsLjMzMywtMSwxLDEsLS4zMzMsMV0pLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJyaWdodC1yaG9tYm9pZCIsWy0uMzMzLC0xLDEsLTEsLjMzMywxLC0xLDFdKSx0aGlzLm5vZGVTaGFwZXMuY29uY2F2ZWhleGFnb249dGhpcy5nZW5lcmF0ZVBvbHlnb24oImNvbmNhdmUtaGV4YWdvbiIsWy0xLC0uOTUsLS43NSwwLC0xLC45NSwxLC45NSwuNzUsMCwxLC0uOTVdKTt7dmFyIEg9Wy0xLC0xLC4yNSwtMSwxLDAsLjI1LDEsLTEsMV07dGhpcy5nZW5lcmF0ZVBvbHlnb24oInRhZyIsSCksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtdGFnIixIKX14Lm1ha2VQb2x5Z29uPWZ1bmN0aW9uKHEpe3ZhciBZPXEuam9pbigiJCIpLFo9InBvbHlnb24tIitZLGNlO3JldHVybihjZT10aGlzW1pdKT9jZTptLmdlbmVyYXRlUG9seWdvbihaLHEpfX07dmFyIGZrPXt9O2ZrLnRpbWVUb1JlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlZHJhd1RvdGFsVGltZS90aGlzLnJlZHJhd0NvdW50fSxmay5yZWRyYXc9ZnVuY3Rpb24oeCl7eD14fHxjaigpO3ZhciBtPXRoaXM7bS5hdmVyYWdlUmVkcmF3VGltZT09PXZvaWQgMCYmKG0uYXZlcmFnZVJlZHJhd1RpbWU9MCksbS5sYXN0UmVkcmF3VGltZT09PXZvaWQgMCYmKG0ubGFzdFJlZHJhd1RpbWU9MCksbS5sYXN0RHJhd1RpbWU9PT12b2lkIDAmJihtLmxhc3REcmF3VGltZT0wKSxtLnJlcXVlc3RlZEZyYW1lPSEwLG0ucmVuZGVyT3B0aW9ucz14fSxmay5iZWZvcmVSZW5kZXI9ZnVuY3Rpb24oeCxtKXtpZighdGhpcy5kZXN0cm95ZWQpe209PW51bGwmJmNoKCJQcmlvcml0eSBpcyBub3Qgb3B0aW9uYWwgZm9yIGJlZm9yZVJlbmRlciIpO3ZhciBrPXRoaXMuYmVmb3JlUmVuZGVyQ2FsbGJhY2tzO2sucHVzaCh7Zm46eCxwcmlvcml0eTptfSksay5zb3J0KGZ1bmN0aW9uKFMsTSl7cmV0dXJuIE0ucHJpb3JpdHktUy5wcmlvcml0eX0pfX07dmFyIHN6PWZ1bmN0aW9uKG0sayxTKXtmb3IodmFyIE09bS5iZWZvcmVSZW5kZXJDYWxsYmFja3MsTz0wO088TS5sZW5ndGg7TysrKU1bT10uZm4oayxTKX07Zmsuc3RhcnRSZW5kZXJMb29wPWZ1bmN0aW9uKCl7dmFyIHg9dGhpcyxtPXguY3k7aWYoIXgucmVuZGVyTG9vcFN0YXJ0ZWQpe3gucmVuZGVyTG9vcFN0YXJ0ZWQ9ITA7dmFyIGs9ZnVuY3Rpb24gUyhNKXtpZigheC5kZXN0cm95ZWQpe2lmKCFtLmJhdGNoaW5nKCkpaWYoeC5yZXF1ZXN0ZWRGcmFtZSYmIXguc2tpcEZyYW1lKXtzeih4LCEwLE0pO3ZhciBPPUJwKCk7eC5yZW5kZXIoeC5yZW5kZXJPcHRpb25zKTt2YXIgTj14Lmxhc3REcmF3VGltZT1CcCgpO3guYXZlcmFnZVJlZHJhd1RpbWU9PT12b2lkIDAmJih4LmF2ZXJhZ2VSZWRyYXdUaW1lPU4tTykseC5yZWRyYXdDb3VudD09PXZvaWQgMCYmKHgucmVkcmF3Q291bnQ9MCkseC5yZWRyYXdDb3VudCsrLHgucmVkcmF3VG90YWxUaW1lPT09dm9pZCAwJiYoeC5yZWRyYXdUb3RhbFRpbWU9MCk7dmFyICQ9Ti1PO3gucmVkcmF3VG90YWxUaW1lKz0kLHgubGFzdFJlZHJhd1RpbWU9JCx4LmF2ZXJhZ2VSZWRyYXdUaW1lPXguYXZlcmFnZVJlZHJhd1RpbWUvMiskLzIseC5yZXF1ZXN0ZWRGcmFtZT0hMX1lbHNlIHN6KHgsITEsTSk7eC5za2lwRnJhbWU9ITEsejAoUyl9fTt6MChrKX19O3ZhciBWcmU9ZnVuY3Rpb24obSl7dGhpcy5pbml0KG0pfSxhej1WcmUsbTg9YXoucHJvdG90eXBlO204LmNsaWVudEZ1bmN0aW9ucz1bInJlZHJhd0hpbnQiLCJyZW5kZXIiLCJyZW5kZXJUbyIsIm1hdGNoQ2FudmFzU2l6ZSIsIm5vZGVTaGFwZUltcGwiLCJhcnJvd1NoYXBlSW1wbCJdLG04LmluaXQ9ZnVuY3Rpb24oeCl7dmFyIG09dGhpczttLm9wdGlvbnM9eCxtLmN5PXguY3k7dmFyIGs9bS5jb250YWluZXI9eC5jeS5jb250YWluZXIoKSxTPW0uY3kud2luZG93KCk7aWYoUyl7dmFyIE09Uy5kb2N1bWVudCxPPU0uaGVhZCxOPSJfX19fX19fX19fY3l0b3NjYXBlX3N0eWxlc2hlZXQiLCQ9Il9fX19fX19fX19jeXRvc2NhcGVfY29udGFpbmVyIixIPU0uZ2V0RWxlbWVudEJ5SWQoTikhPW51bGw7aWYoay5jbGFzc05hbWUuaW5kZXhPZigkKTwwJiYoay5jbGFzc05hbWU9KGsuY2xhc3NOYW1lfHwiIikrIiAiKyQpLCFIKXt2YXIgcT1NLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7cS5pZD1OLHEudGV4dENvbnRlbnQ9Ii4iKyQrIiB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgfSIsTy5pbnNlcnRCZWZvcmUocSxPLmNoaWxkcmVuWzBdKX12YXIgWT1TLmdldENvbXB1dGVkU3R5bGUoayksWj1ZLmdldFByb3BlcnR5VmFsdWUoInBvc2l0aW9uIik7Wj09PSJzdGF0aWMiJiZodSgiQSBDeXRvc2NhcGUgY29udGFpbmVyIGhhcyBzdHlsZSBwb3NpdGlvbjpzdGF0aWMgYW5kIHNvIGNhbiBub3QgdXNlIFVJIGV4dGVuc2lvbnMgcHJvcGVybHkiKX1tLnNlbGVjdGlvbj1bdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLDBdLG0uYmV6aWVyUHJvalBjdHM9Wy4wNSwuMjI1LC40LC41LC42LC43NzUsLjk1XSxtLmhvdmVyRGF0YT17ZG93bjpudWxsLGxhc3Q6bnVsbCxkb3duVGltZTpudWxsLHRyaWdnZXJNb2RlOm51bGwsZHJhZ2dpbmc6ITEsaW5pdGlhbFBhbjpbbnVsbCxudWxsXSxjYXB0dXJlOiExfSxtLmRyYWdEYXRhPXtwb3NzaWJsZURyYWdFbGVtZW50czpbXX0sbS50b3VjaERhdGE9e3N0YXJ0Om51bGwsY2FwdHVyZTohMSxzdGFydFBvc2l0aW9uOltudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sc2luZ2xlVG91Y2hTdGFydFRpbWU6bnVsbCxzaW5nbGVUb3VjaE1vdmVkOiEwLG5vdzpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLGVhcmxpZXI6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXX0sbS5yZWRyYXdzPTAsbS5zaG93RnBzPXguc2hvd0ZwcyxtLmRlYnVnPXguZGVidWcsbS5oaWRlRWRnZXNPblZpZXdwb3J0PXguaGlkZUVkZ2VzT25WaWV3cG9ydCxtLnRleHR1cmVPblZpZXdwb3J0PXgudGV4dHVyZU9uVmlld3BvcnQsbS53aGVlbFNlbnNpdGl2aXR5PXgud2hlZWxTZW5zaXRpdml0eSxtLm1vdGlvbkJsdXJFbmFibGVkPXgubW90aW9uQmx1cixtLmZvcmNlZFBpeGVsUmF0aW89WCh4LnBpeGVsUmF0aW8pP3gucGl4ZWxSYXRpbzpudWxsLG0ubW90aW9uQmx1cj14Lm1vdGlvbkJsdXIsbS5tb3Rpb25CbHVyT3BhY2l0eT14Lm1vdGlvbkJsdXJPcGFjaXR5LG0ubW90aW9uQmx1clRyYW5zcGFyZW5jeT0xLW0ubW90aW9uQmx1ck9wYWNpdHksbS5tb3Rpb25CbHVyUHhSYXRpbz0xLG0ubWJQeFJCbHVycnk9MSxtLm1pbk1iTG93UXVhbEZyYW1lcz00LG0uZnVsbFF1YWxpdHlNYj0hMSxtLmNsZWFyZWRGb3JNb3Rpb25CbHVyPVtdLG0uZGVza3RvcFRhcFRocmVzaG9sZD14LmRlc2t0b3BUYXBUaHJlc2hvbGQsbS5kZXNrdG9wVGFwVGhyZXNob2xkMj14LmRlc2t0b3BUYXBUaHJlc2hvbGQqeC5kZXNrdG9wVGFwVGhyZXNob2xkLG0udG91Y2hUYXBUaHJlc2hvbGQ9eC50b3VjaFRhcFRocmVzaG9sZCxtLnRvdWNoVGFwVGhyZXNob2xkMj14LnRvdWNoVGFwVGhyZXNob2xkKngudG91Y2hUYXBUaHJlc2hvbGQsbS50YXBob2xkRHVyYXRpb249NTAwLG0uYmluZGluZ3M9W10sbS5iZWZvcmVSZW5kZXJDYWxsYmFja3M9W10sbS5iZWZvcmVSZW5kZXJQcmlvcml0aWVzPXthbmltYXRpb25zOjQwMCxlbGVDYWxjczozMDAsZWxlVHhyRGVxOjIwMCxseXJUeHJEZXE6MTUwLGx5clR4clNraXA6MTAwfSxtLnJlZ2lzdGVyTm9kZVNoYXBlcygpLG0ucmVnaXN0ZXJBcnJvd1NoYXBlcygpLG0ucmVnaXN0ZXJDYWxjdWxhdGlvbkxpc3RlbmVycygpfSxtOC5ub3RpZnk9ZnVuY3Rpb24oeCxtKXt2YXIgaz10aGlzLFM9ay5jeTtpZighdGhpcy5kZXN0cm95ZWQpe2lmKHg9PT0iaW5pdCIpe2subG9hZCgpO3JldHVybn1pZih4PT09ImRlc3Ryb3kiKXtrLmRlc3Ryb3koKTtyZXR1cm59KHg9PT0iYWRkInx8eD09PSJyZW1vdmUifHx4PT09Im1vdmUiJiZTLmhhc0NvbXBvdW5kTm9kZXMoKXx8eD09PSJsb2FkInx8eD09PSJ6b3JkZXIifHx4PT09Im1vdW50IikmJmsuaW52YWxpZGF0ZUNhY2hlZFpTb3J0ZWRFbGVzKCkseD09PSJ2aWV3cG9ydCImJmsucmVkcmF3SGludCgic2VsZWN0IiwhMCksKHg9PT0ibG9hZCJ8fHg9PT0icmVzaXplInx8eD09PSJtb3VudCIpJiYoay5pbnZhbGlkYXRlQ29udGFpbmVyQ2xpZW50Q29vcmRzQ2FjaGUoKSxrLm1hdGNoQ2FudmFzU2l6ZShrLmNvbnRhaW5lcikpLGsucmVkcmF3SGludCgiZWxlcyIsITApLGsucmVkcmF3SGludCgiZHJhZyIsITApLHRoaXMuc3RhcnRSZW5kZXJMb29wKCksdGhpcy5yZWRyYXcoKX19LG04LmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgeD10aGlzO3guZGVzdHJveWVkPSEwLHguY3kuc3RvcEFuaW1hdGlvbkxvb3AoKTtmb3IodmFyIG09MDttPHguYmluZGluZ3MubGVuZ3RoO20rKyl7dmFyIGs9eC5iaW5kaW5nc1ttXSxTPWssTT1TLnRhcmdldDsoTS5vZmZ8fE0ucmVtb3ZlRXZlbnRMaXN0ZW5lcikuYXBwbHkoTSxTLmFyZ3MpfWlmKHguYmluZGluZ3M9W10seC5iZWZvcmVSZW5kZXJDYWxsYmFja3M9W10seC5vblVwZGF0ZUVsZUNhbGNzRm5zPVtdLHgucmVtb3ZlT2JzZXJ2ZXImJngucmVtb3ZlT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHguc3R5bGVPYnNlcnZlciYmeC5zdHlsZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx4LnJlc2l6ZU9ic2VydmVyJiZ4LnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx4LmxhYmVsQ2FsY0Rpdil0cnl7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh4LmxhYmVsQ2FsY0Rpdil9Y2F0Y2h7fX0sbTguaXNIZWFkbGVzcz1mdW5jdGlvbigpe3JldHVybiExfSxbQkkscnosaXosYjgsS3YsZmtdLmZvckVhY2goZnVuY3Rpb24oeCl7eXQobTgseCl9KTt2YXIgUkk9MWUzLzYwLG96PXtzZXR1cERlcXVldWVpbmc6ZnVuY3Rpb24obSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIFM9dGhpcyxNPXRoaXMucmVuZGVyZXI7aWYoIVMuZGVxdWV1ZWluZ1NldHVwKXtTLmRlcXVldWVpbmdTZXR1cD0hMDt2YXIgTz1OdShmdW5jdGlvbigpe00ucmVkcmF3SGludCgiZWxlcyIsITApLE0ucmVkcmF3SGludCgiZHJhZyIsITApLE0ucmVkcmF3KCl9LG0uZGVxUmVkcmF3VGhyZXNob2xkKSxOPWZ1bmN0aW9uKHEsWSl7dmFyIFo9QnAoKSxjZT1NLmF2ZXJhZ2VSZWRyYXdUaW1lLHZlPU0ubGFzdFJlZHJhd1RpbWUsbWU9W10sTGU9TS5jeS5leHRlbnQoKSxfZT1NLmdldFBpeGVsUmF0aW8oKTtmb3IocXx8TS5mbHVzaFJlbmRlcmVkU3R5bGVRdWV1ZSgpOzspe3ZhciBFZT1CcCgpLEJlPUVlLVosUmU9RWUtWTtpZih2ZTxSSSl7dmFyIFZlPVJJLShxP2NlOjApO2lmKFJlPj1tLmRlcUZhc3RDb3N0KlZlKWJyZWFrfWVsc2UgaWYocSl7aWYoQmU+PW0uZGVxQ29zdCp2ZXx8QmU+PW0uZGVxQXZnQ29zdCpjZSlicmVha31lbHNlIGlmKFJlPj1tLmRlcU5vRHJhd0Nvc3QqUkkpYnJlYWs7dmFyIGN0PW0uZGVxKFMsX2UsTGUpO2lmKGN0Lmxlbmd0aD4wKWZvcih2YXIgc3Q9MDtzdDxjdC5sZW5ndGg7c3QrKyltZS5wdXNoKGN0W3N0XSk7ZWxzZSBicmVha31tZS5sZW5ndGg+MCYmKG0ub25EZXFkKFMsbWUpLCFxJiZtLnNob3VsZFJlZHJhdyhTLG1lLF9lLExlKSYmTygpKX0sJD1tLnByaW9yaXR5fHxuSTtNLmJlZm9yZVJlbmRlcihOLCQoUykpfX19fSxVcmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB4KG0pe3ZhciBrPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpYMztkKHRoaXMseCksdGhpcy5pZHNCeUtleT1uZXcgd20sdGhpcy5rZXlGb3JJZD1uZXcgd20sdGhpcy5jYWNoZXNCeUx2bD1uZXcgd20sdGhpcy5sdmxzPVtdLHRoaXMuZ2V0S2V5PW0sdGhpcy5kb2VzRWxlSW52YWxpZGF0ZUtleT1rfXJldHVybiB2KHgsW3trZXk6ImdldElkc0ZvciIsdmFsdWU6ZnVuY3Rpb24oayl7az09bnVsbCYmY2goIkNhbiBub3QgZ2V0IGlkIGxpc3QgZm9yIG51bGwga2V5Iik7dmFyIFM9dGhpcy5pZHNCeUtleSxNPXRoaXMuaWRzQnlLZXkuZ2V0KGspO3JldHVybiBNfHwoTT1uZXcgUTcsUy5zZXQoayxNKSksTX19LHtrZXk6ImFkZElkRm9yS2V5Iix2YWx1ZTpmdW5jdGlvbihrLFMpe2shPW51bGwmJnRoaXMuZ2V0SWRzRm9yKGspLmFkZChTKX19LHtrZXk6ImRlbGV0ZUlkRm9yS2V5Iix2YWx1ZTpmdW5jdGlvbihrLFMpe2shPW51bGwmJnRoaXMuZ2V0SWRzRm9yKGspLmRlbGV0ZShTKX19LHtrZXk6ImdldE51bWJlck9mSWRzRm9yS2V5Iix2YWx1ZTpmdW5jdGlvbihrKXtyZXR1cm4gaz09bnVsbD8wOnRoaXMuZ2V0SWRzRm9yKGspLnNpemV9fSx7a2V5OiJ1cGRhdGVLZXlNYXBwaW5nRm9yIix2YWx1ZTpmdW5jdGlvbihrKXt2YXIgUz1rLmlkKCksTT10aGlzLmtleUZvcklkLmdldChTKSxPPXRoaXMuZ2V0S2V5KGspO3RoaXMuZGVsZXRlSWRGb3JLZXkoTSxTKSx0aGlzLmFkZElkRm9yS2V5KE8sUyksdGhpcy5rZXlGb3JJZC5zZXQoUyxPKX19LHtrZXk6ImRlbGV0ZUtleU1hcHBpbmdGb3IiLHZhbHVlOmZ1bmN0aW9uKGspe3ZhciBTPWsuaWQoKSxNPXRoaXMua2V5Rm9ySWQuZ2V0KFMpO3RoaXMuZGVsZXRlSWRGb3JLZXkoTSxTKSx0aGlzLmtleUZvcklkLmRlbGV0ZShTKX19LHtrZXk6ImtleUhhc0NoYW5nZWRGb3IiLHZhbHVlOmZ1bmN0aW9uKGspe3ZhciBTPWsuaWQoKSxNPXRoaXMua2V5Rm9ySWQuZ2V0KFMpLE89dGhpcy5nZXRLZXkoayk7cmV0dXJuIE0hPT1PfX0se2tleToiaXNJbnZhbGlkIix2YWx1ZTpmdW5jdGlvbihrKXtyZXR1cm4gdGhpcy5rZXlIYXNDaGFuZ2VkRm9yKGspfHx0aGlzLmRvZXNFbGVJbnZhbGlkYXRlS2V5KGspfX0se2tleToiZ2V0Q2FjaGVzQXQiLHZhbHVlOmZ1bmN0aW9uKGspe3ZhciBTPXRoaXMuY2FjaGVzQnlMdmwsTT10aGlzLmx2bHMsTz1TLmdldChrKTtyZXR1cm4gT3x8KE89bmV3IHdtLFMuc2V0KGssTyksTS5wdXNoKGspKSxPfX0se2tleToiZ2V0Q2FjaGUiLHZhbHVlOmZ1bmN0aW9uKGssUyl7cmV0dXJuIHRoaXMuZ2V0Q2FjaGVzQXQoUykuZ2V0KGspfX0se2tleToiZ2V0Iix2YWx1ZTpmdW5jdGlvbihrLFMpe3ZhciBNPXRoaXMuZ2V0S2V5KGspLE89dGhpcy5nZXRDYWNoZShNLFMpO3JldHVybiBPIT1udWxsJiZ0aGlzLnVwZGF0ZUtleU1hcHBpbmdGb3IoayksT319LHtrZXk6ImdldEZvckNhY2hlZEtleSIsdmFsdWU6ZnVuY3Rpb24oayxTKXt2YXIgTT10aGlzLmtleUZvcklkLmdldChrLmlkKCkpLE89dGhpcy5nZXRDYWNoZShNLFMpO3JldHVybiBPfX0se2tleToiaGFzQ2FjaGUiLHZhbHVlOmZ1bmN0aW9uKGssUyl7cmV0dXJuIHRoaXMuZ2V0Q2FjaGVzQXQoUykuaGFzKGspfX0se2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbihrLFMpe3ZhciBNPXRoaXMuZ2V0S2V5KGspO3JldHVybiB0aGlzLmhhc0NhY2hlKE0sUyl9fSx7a2V5OiJzZXRDYWNoZSIsdmFsdWU6ZnVuY3Rpb24oayxTLE0pe00ua2V5PWssdGhpcy5nZXRDYWNoZXNBdChTKS5zZXQoayxNKX19LHtrZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oayxTLE0pe3ZhciBPPXRoaXMuZ2V0S2V5KGspO3RoaXMuc2V0Q2FjaGUoTyxTLE0pLHRoaXMudXBkYXRlS2V5TWFwcGluZ0ZvcihrKX19LHtrZXk6ImRlbGV0ZUNhY2hlIix2YWx1ZTpmdW5jdGlvbihrLFMpe3RoaXMuZ2V0Q2FjaGVzQXQoUykuZGVsZXRlKGspfX0se2tleToiZGVsZXRlIix2YWx1ZTpmdW5jdGlvbihrLFMpe3ZhciBNPXRoaXMuZ2V0S2V5KGspO3RoaXMuZGVsZXRlQ2FjaGUoTSxTKX19LHtrZXk6ImludmFsaWRhdGVLZXkiLHZhbHVlOmZ1bmN0aW9uKGspe3ZhciBTPXRoaXM7dGhpcy5sdmxzLmZvckVhY2goZnVuY3Rpb24oTSl7cmV0dXJuIFMuZGVsZXRlQ2FjaGUoayxNKX0pfX0se2tleToiaW52YWxpZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oayl7dmFyIFM9ay5pZCgpLE09dGhpcy5rZXlGb3JJZC5nZXQoUyk7dGhpcy5kZWxldGVLZXlNYXBwaW5nRm9yKGspO3ZhciBPPXRoaXMuZG9lc0VsZUludmFsaWRhdGVLZXkoayk7cmV0dXJuIE8mJnRoaXMuaW52YWxpZGF0ZUtleShNKSxPfHx0aGlzLmdldE51bWJlck9mSWRzRm9yS2V5KE0pPT09MH19XSkseH0oKSxjej0yNSxZUz01MCxYUz0tNCxqST0zLEdyZT03Ljk5LEtyZT04LFdyZT0xMDI0LFlyZT0xMDI0LFhyZT0xMDI0LFFyZT0uMixKcmU9LjgsWnJlPTEwLGVpZT0uMTUsdGllPS4xLG5pZT0uOSxyaWU9LjksaWllPTEwMCxzaWU9MSx2OD17ZGVxdWV1ZToiZGVxdWV1ZSIsZG93bnNjYWxlOiJkb3duc2NhbGUiLGhpZ2hRdWFsaXR5OiJoaWdoUXVhbGl0eSJ9LGFpZT1xMCh7Z2V0S2V5Om51bGwsZG9lc0VsZUludmFsaWRhdGVLZXk6WDMsZHJhd0VsZW1lbnQ6bnVsbCxnZXRCb3VuZGluZ0JveDpudWxsLGdldFJvdGF0aW9uUG9pbnQ6bnVsbCxnZXRSb3RhdGlvbk9mZnNldDpudWxsLGlzVmlzaWJsZTpsNSxhbGxvd0VkZ2VUeHJDYWNoaW5nOiEwLGFsbG93UGFyZW50VHhyQ2FjaGluZzohMH0pLGRrPWZ1bmN0aW9uKG0sayl7dmFyIFM9dGhpcztTLnJlbmRlcmVyPW0sUy5vbkRlcXVldWVzPVtdO3ZhciBNPWFpZShrKTt5dChTLE0pLFMubG9va3VwPW5ldyBVcmUoTS5nZXRLZXksTS5kb2VzRWxlSW52YWxpZGF0ZUtleSksUy5zZXR1cERlcXVldWVpbmcoKX0sQ2Y9ZGsucHJvdG90eXBlO0NmLnJlYXNvbnM9djgsQ2YuZ2V0VGV4dHVyZVF1ZXVlPWZ1bmN0aW9uKHgpe3ZhciBtPXRoaXM7cmV0dXJuIG0uZWxlSW1nQ2FjaGVzPW0uZWxlSW1nQ2FjaGVzfHx7fSxtLmVsZUltZ0NhY2hlc1t4XT1tLmVsZUltZ0NhY2hlc1t4XXx8W119LENmLmdldFJldGlyZWRUZXh0dXJlUXVldWU9ZnVuY3Rpb24oeCl7dmFyIG09dGhpcyxrPW0uZWxlSW1nQ2FjaGVzLnJldGlyZWQ9bS5lbGVJbWdDYWNoZXMucmV0aXJlZHx8e30sUz1rW3hdPWtbeF18fFtdO3JldHVybiBTfSxDZi5nZXRFbGVtZW50UXVldWU9ZnVuY3Rpb24oKXt2YXIgeD10aGlzLG09eC5lbGVDYWNoZVF1ZXVlPXguZWxlQ2FjaGVRdWV1ZXx8bmV3IFY5KGZ1bmN0aW9uKGssUyl7cmV0dXJuIFMucmVxcy1rLnJlcXN9KTtyZXR1cm4gbX0sQ2YuZ2V0RWxlbWVudEtleVRvUXVldWU9ZnVuY3Rpb24oKXt2YXIgeD10aGlzLG09eC5lbGVLZXlUb0NhY2hlUXVldWU9eC5lbGVLZXlUb0NhY2hlUXVldWV8fHt9O3JldHVybiBtfSxDZi5nZXRFbGVtZW50PWZ1bmN0aW9uKHgsbSxrLFMsTSl7dmFyIE89dGhpcyxOPXRoaXMucmVuZGVyZXIsJD1OLmN5Lnpvb20oKSxIPXRoaXMubG9va3VwO2lmKCFtfHxtLnc9PT0wfHxtLmg9PT0wfHxpc05hTihtLncpfHxpc05hTihtLmgpfHwheC52aXNpYmxlKCl8fHgucmVtb3ZlZCgpfHwhTy5hbGxvd0VkZ2VUeHJDYWNoaW5nJiZ4LmlzRWRnZSgpfHwhTy5hbGxvd1BhcmVudFR4ckNhY2hpbmcmJnguaXNQYXJlbnQoKSlyZXR1cm4gbnVsbDtpZihTPT1udWxsJiYoUz1NYXRoLmNlaWwoaUkoJCprKSkpLFM8WFMpUz1YUztlbHNlIGlmKCQ+PUdyZXx8Uz5qSSlyZXR1cm4gbnVsbDt2YXIgcT1NYXRoLnBvdygyLFMpLFk9bS5oKnEsWj1tLncqcSxjZT1OLmVsZVRleHRCaWdnZXJUaGFuTWluKHgscSk7aWYoIXRoaXMuaXNWaXNpYmxlKHgsY2UpKXJldHVybiBudWxsO3ZhciB2ZT1ILmdldCh4LFMpO2lmKHZlJiZ2ZS5pbnZhbGlkYXRlZCYmKHZlLmludmFsaWRhdGVkPSExLHZlLnRleHR1cmUuaW52YWxpZGF0ZWRXaWR0aC09dmUud2lkdGgpLHZlKXJldHVybiB2ZTt2YXIgbWU7aWYoWTw9Y3o/bWU9Y3o6WTw9WVM/bWU9WVM6bWU9TWF0aC5jZWlsKFkvWVMpKllTLFk+WHJlfHxaPllyZSlyZXR1cm4gbnVsbDt2YXIgTGU9Ty5nZXRUZXh0dXJlUXVldWUobWUpLF9lPUxlW0xlLmxlbmd0aC0yXSxFZT1mdW5jdGlvbigpe3JldHVybiBPLnJlY3ljbGVUZXh0dXJlKG1lLFopfHxPLmFkZFRleHR1cmUobWUsWil9O19lfHwoX2U9TGVbTGUubGVuZ3RoLTFdKSxfZXx8KF9lPUVlKCkpLF9lLndpZHRoLV9lLnVzZWRXaWR0aDxaJiYoX2U9RWUoKSk7Zm9yKHZhciBCZT1mdW5jdGlvbihobil7cmV0dXJuIGhuJiZobi5zY2FsZWRMYWJlbFNob3duPT09Y2V9LFJlPU0mJk09PT12OC5kZXF1ZXVlLFZlPU0mJk09PT12OC5oaWdoUXVhbGl0eSxjdD1NJiZNPT09djguZG93bnNjYWxlLHN0LFllPVMrMTtZZTw9akk7WWUrKyl7dmFyIG10PUguZ2V0KHgsWWUpO2lmKG10KXtzdD1tdDticmVha319dmFyIEplPXN0JiZzdC5sZXZlbD09PVMrMT9zdDpudWxsLEx0PWZ1bmN0aW9uKCl7X2UuY29udGV4dC5kcmF3SW1hZ2UoSmUudGV4dHVyZS5jYW52YXMsSmUueCwwLEplLndpZHRoLEplLmhlaWdodCxfZS51c2VkV2lkdGgsMCxaLFkpfTtpZihfZS5jb250ZXh0LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksX2UuY29udGV4dC5jbGVhclJlY3QoX2UudXNlZFdpZHRoLDAsWixtZSksQmUoSmUpKUx0KCk7ZWxzZSBpZihCZShzdCkpaWYoVmUpe2Zvcih2YXIgTXQ9c3QubGV2ZWw7TXQ+UztNdC0tKUplPU8uZ2V0RWxlbWVudCh4LG0sayxNdCx2OC5kb3duc2NhbGUpO0x0KCl9ZWxzZSByZXR1cm4gTy5xdWV1ZUVsZW1lbnQoeCxzdC5sZXZlbC0xKSxzdDtlbHNle3ZhciB1dDtpZighUmUmJiFWZSYmIWN0KWZvcih2YXIgV3Q9Uy0xO1d0Pj1YUztXdC0tKXt2YXIgVHQ9SC5nZXQoeCxXdCk7aWYoVHQpe3V0PVR0O2JyZWFrfX1pZihCZSh1dCkpcmV0dXJuIE8ucXVldWVFbGVtZW50KHgsUyksdXQ7X2UuY29udGV4dC50cmFuc2xhdGUoX2UudXNlZFdpZHRoLDApLF9lLmNvbnRleHQuc2NhbGUocSxxKSx0aGlzLmRyYXdFbGVtZW50KF9lLmNvbnRleHQseCxtLGNlLCExKSxfZS5jb250ZXh0LnNjYWxlKDEvcSwxL3EpLF9lLmNvbnRleHQudHJhbnNsYXRlKC1fZS51c2VkV2lkdGgsMCl9cmV0dXJuIHZlPXt4Ol9lLnVzZWRXaWR0aCx0ZXh0dXJlOl9lLGxldmVsOlMsc2NhbGU6cSx3aWR0aDpaLGhlaWdodDpZLHNjYWxlZExhYmVsU2hvd246Y2V9LF9lLnVzZWRXaWR0aCs9TWF0aC5jZWlsKForS3JlKSxfZS5lbGVDYWNoZXMucHVzaCh2ZSksSC5zZXQoeCxTLHZlKSxPLmNoZWNrVGV4dHVyZUZ1bGxuZXNzKF9lKSx2ZX0sQ2YuaW52YWxpZGF0ZUVsZW1lbnRzPWZ1bmN0aW9uKHgpe2Zvcih2YXIgbT0wO208eC5sZW5ndGg7bSsrKXRoaXMuaW52YWxpZGF0ZUVsZW1lbnQoeFttXSl9LENmLmludmFsaWRhdGVFbGVtZW50PWZ1bmN0aW9uKHgpe3ZhciBtPXRoaXMsaz1tLmxvb2t1cCxTPVtdLE09ay5pc0ludmFsaWQoeCk7aWYoTSl7Zm9yKHZhciBPPVhTO088PWpJO08rKyl7dmFyIE49ay5nZXRGb3JDYWNoZWRLZXkoeCxPKTtOJiZTLnB1c2goTil9dmFyICQ9ay5pbnZhbGlkYXRlKHgpO2lmKCQpZm9yKHZhciBIPTA7SDxTLmxlbmd0aDtIKyspe3ZhciBxPVNbSF0sWT1xLnRleHR1cmU7WS5pbnZhbGlkYXRlZFdpZHRoKz1xLndpZHRoLHEuaW52YWxpZGF0ZWQ9ITAsbS5jaGVja1RleHR1cmVVdGlsaXR5KFkpfW0ucmVtb3ZlRnJvbVF1ZXVlKHgpfX0sQ2YuY2hlY2tUZXh0dXJlVXRpbGl0eT1mdW5jdGlvbih4KXt4LmludmFsaWRhdGVkV2lkdGg+PVFyZSp4LndpZHRoJiZ0aGlzLnJldGlyZVRleHR1cmUoeCl9LENmLmNoZWNrVGV4dHVyZUZ1bGxuZXNzPWZ1bmN0aW9uKHgpe3ZhciBtPXRoaXMsaz1tLmdldFRleHR1cmVRdWV1ZSh4LmhlaWdodCk7eC51c2VkV2lkdGgveC53aWR0aD5KcmUmJnguZnVsbG5lc3NDaGVja3M+PVpyZT9RMyhrLHgpOnguZnVsbG5lc3NDaGVja3MrK30sQ2YucmV0aXJlVGV4dHVyZT1mdW5jdGlvbih4KXt2YXIgbT10aGlzLGs9eC5oZWlnaHQsUz1tLmdldFRleHR1cmVRdWV1ZShrKSxNPXRoaXMubG9va3VwO1EzKFMseCkseC5yZXRpcmVkPSEwO2Zvcih2YXIgTz14LmVsZUNhY2hlcyxOPTA7TjxPLmxlbmd0aDtOKyspe3ZhciAkPU9bTl07TS5kZWxldGVDYWNoZSgkLmtleSwkLmxldmVsKX1jUyhPKTt2YXIgSD1tLmdldFJldGlyZWRUZXh0dXJlUXVldWUoayk7SC5wdXNoKHgpfSxDZi5hZGRUZXh0dXJlPWZ1bmN0aW9uKHgsbSl7dmFyIGs9dGhpcyxTPWsuZ2V0VGV4dHVyZVF1ZXVlKHgpLE09e307cmV0dXJuIFMucHVzaChNKSxNLmVsZUNhY2hlcz1bXSxNLmhlaWdodD14LE0ud2lkdGg9TWF0aC5tYXgoV3JlLG0pLE0udXNlZFdpZHRoPTAsTS5pbnZhbGlkYXRlZFdpZHRoPTAsTS5mdWxsbmVzc0NoZWNrcz0wLE0uY2FudmFzPWsucmVuZGVyZXIubWFrZU9mZnNjcmVlbkNhbnZhcyhNLndpZHRoLE0uaGVpZ2h0KSxNLmNvbnRleHQ9TS5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKSxNfSxDZi5yZWN5Y2xlVGV4dHVyZT1mdW5jdGlvbih4LG0pe2Zvcih2YXIgaz10aGlzLFM9ay5nZXRUZXh0dXJlUXVldWUoeCksTT1rLmdldFJldGlyZWRUZXh0dXJlUXVldWUoeCksTz0wO088TS5sZW5ndGg7TysrKXt2YXIgTj1NW09dO2lmKE4ud2lkdGg+PW0pcmV0dXJuIE4ucmV0aXJlZD0hMSxOLnVzZWRXaWR0aD0wLE4uaW52YWxpZGF0ZWRXaWR0aD0wLE4uZnVsbG5lc3NDaGVja3M9MCxjUyhOLmVsZUNhY2hlcyksTi5jb250ZXh0LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksTi5jb250ZXh0LmNsZWFyUmVjdCgwLDAsTi53aWR0aCxOLmhlaWdodCksUTMoTSxOKSxTLnB1c2goTiksTn19LENmLnF1ZXVlRWxlbWVudD1mdW5jdGlvbih4LG0pe3ZhciBrPXRoaXMsUz1rLmdldEVsZW1lbnRRdWV1ZSgpLE09ay5nZXRFbGVtZW50S2V5VG9RdWV1ZSgpLE89dGhpcy5nZXRLZXkoeCksTj1NW09dO2lmKE4pTi5sZXZlbD1NYXRoLm1heChOLmxldmVsLG0pLE4uZWxlcy5tZXJnZSh4KSxOLnJlcXMrKyxTLnVwZGF0ZUl0ZW0oTik7ZWxzZXt2YXIgJD17ZWxlczp4LnNwYXduKCkubWVyZ2UoeCksbGV2ZWw6bSxyZXFzOjEsa2V5Ok99O1MucHVzaCgkKSxNW09dPSR9fSxDZi5kZXF1ZXVlPWZ1bmN0aW9uKHgpe2Zvcih2YXIgbT10aGlzLGs9bS5nZXRFbGVtZW50UXVldWUoKSxTPW0uZ2V0RWxlbWVudEtleVRvUXVldWUoKSxNPVtdLE89bS5sb29rdXAsTj0wO048c2llJiZrLnNpemUoKT4wO04rKyl7dmFyICQ9ay5wb3AoKSxIPSQua2V5LHE9JC5lbGVzWzBdLFk9Ty5oYXNDYWNoZShxLCQubGV2ZWwpO2lmKFNbSF09bnVsbCxZKWNvbnRpbnVlO00ucHVzaCgkKTt2YXIgWj1tLmdldEJvdW5kaW5nQm94KHEpO20uZ2V0RWxlbWVudChxLFoseCwkLmxldmVsLHY4LmRlcXVldWUpfXJldHVybiBNfSxDZi5yZW1vdmVGcm9tUXVldWU9ZnVuY3Rpb24oeCl7dmFyIG09dGhpcyxrPW0uZ2V0RWxlbWVudFF1ZXVlKCksUz1tLmdldEVsZW1lbnRLZXlUb1F1ZXVlKCksTT10aGlzLmdldEtleSh4KSxPPVNbTV07TyE9bnVsbCYmKE8uZWxlcy5sZW5ndGg9PT0xPyhPLnJlcXM9WDcsay51cGRhdGVJdGVtKE8pLGsucG9wKCksU1tNXT1udWxsKTpPLmVsZXMudW5tZXJnZSh4KSl9LENmLm9uRGVxdWV1ZT1mdW5jdGlvbih4KXt0aGlzLm9uRGVxdWV1ZXMucHVzaCh4KX0sQ2Yub2ZmRGVxdWV1ZT1mdW5jdGlvbih4KXtRMyh0aGlzLm9uRGVxdWV1ZXMseCl9LENmLnNldHVwRGVxdWV1ZWluZz1vei5zZXR1cERlcXVldWVpbmcoe2RlcVJlZHJhd1RocmVzaG9sZDppaWUsZGVxQ29zdDplaWUsZGVxQXZnQ29zdDp0aWUsZGVxTm9EcmF3Q29zdDpuaWUsZGVxRmFzdENvc3Q6cmllLGRlcTpmdW5jdGlvbihtLGssUyl7cmV0dXJuIG0uZGVxdWV1ZShrLFMpfSxvbkRlcWQ6ZnVuY3Rpb24obSxrKXtmb3IodmFyIFM9MDtTPG0ub25EZXF1ZXVlcy5sZW5ndGg7UysrKXt2YXIgTT1tLm9uRGVxdWV1ZXNbU107TShrKX19LHNob3VsZFJlZHJhdzpmdW5jdGlvbihtLGssUyxNKXtmb3IodmFyIE89MDtPPGsubGVuZ3RoO08rKylmb3IodmFyIE49a1tPXS5lbGVzLCQ9MDskPE4ubGVuZ3RoOyQrKyl7dmFyIEg9TlskXS5ib3VuZGluZ0JveCgpO2lmKHNJKEgsTSkpcmV0dXJuITB9cmV0dXJuITF9LHByaW9yaXR5OmZ1bmN0aW9uKG0pe3JldHVybiBtLnJlbmRlcmVyLmJlZm9yZVJlbmRlclByaW9yaXRpZXMuZWxlVHhyRGVxfX0pO3ZhciBvaWU9MSxnaz0tNCxRUz0yLGNpZT0zLjk5LHVpZT01MCxsaWU9NTAsU2Y9LjE1LGhpZT0uMSxmaWU9LjksdXo9LjksZGllPTEsbHo9MjUwLGh6PTRlMyo0ZTMsZno9ITAsZHo9ZnVuY3Rpb24obSl7dmFyIGs9dGhpcyxTPWsucmVuZGVyZXI9bSxNPVMuY3k7ay5sYXllcnNCeUxldmVsPXt9LGsuZmlyc3RHZXQ9ITAsay5sYXN0SW52YWxpZGF0aW9uVGltZT1CcCgpLTIqbHosay5za2lwcGluZz0hMSxrLmVsZVR4ckRlcXM9TS5jb2xsZWN0aW9uKCksay5zY2hlZHVsZUVsZW1lbnRSZWZpbmVtZW50PU51KGZ1bmN0aW9uKCl7ay5yZWZpbmVFbGVtZW50VGV4dHVyZXMoay5lbGVUeHJEZXFzKSxrLmVsZVR4ckRlcXMudW5tZXJnZShrLmVsZVR4ckRlcXMpfSxsaWUpLFMuYmVmb3JlUmVuZGVyKGZ1bmN0aW9uKE4sJCl7JC1rLmxhc3RJbnZhbGlkYXRpb25UaW1lPD1sej9rLnNraXBwaW5nPSEwOmsuc2tpcHBpbmc9ITF9LFMuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5seXJUeHJTa2lwKTt2YXIgTz1mdW5jdGlvbigkLEgpe3JldHVybiBILnJlcXMtJC5yZXFzfTtrLmxheWVyc1F1ZXVlPW5ldyBWOShPKSxrLnNldHVwRGVxdWV1ZWluZygpfSxuMD1kei5wcm90b3R5cGUsZ3o9MCxKUz1NYXRoLnBvdygyLDUzKS0xO24wLm1ha2VMYXllcj1mdW5jdGlvbih4LG0pe3ZhciBrPU1hdGgucG93KDIsbSksUz1NYXRoLmNlaWwoeC53KmspLE09TWF0aC5jZWlsKHguaCprKSxPPXRoaXMucmVuZGVyZXIubWFrZU9mZnNjcmVlbkNhbnZhcyhTLE0pLE49e2lkOmd6PSsrZ3olSlMsYmI6eCxsZXZlbDptLHdpZHRoOlMsaGVpZ2h0Ok0sY2FudmFzOk8sY29udGV4dDpPLmdldENvbnRleHQoIjJkIiksZWxlczpbXSxlbGVzUXVldWU6W10scmVxczowfSwkPU4uY29udGV4dCxIPS1OLmJiLngxLHE9LU4uYmIueTE7cmV0dXJuICQuc2NhbGUoayxrKSwkLnRyYW5zbGF0ZShILHEpLE59LG4wLmdldExheWVycz1mdW5jdGlvbih4LG0sayl7dmFyIFM9dGhpcyxNPVMucmVuZGVyZXIsTz1NLmN5LE49Ty56b29tKCksJD1TLmZpcnN0R2V0O2lmKFMuZmlyc3RHZXQ9ITEsaz09bnVsbCl7aWYoaz1NYXRoLmNlaWwoaUkoTiptKSksazxnaylrPWdrO2Vsc2UgaWYoTj49Y2llfHxrPlFTKXJldHVybiBudWxsfVMudmFsaWRhdGVMYXllcnNFbGVzT3JkZXJpbmcoayx4KTt2YXIgSD1TLmxheWVyc0J5TGV2ZWwscT1NYXRoLnBvdygyLGspLFk9SFtrXT1IW2tdfHxbXSxaLGNlPVMubGV2ZWxJc0NvbXBsZXRlKGsseCksdmUsbWU9ZnVuY3Rpb24oKXt2YXIgTHQ9ZnVuY3Rpb24oX24pe2lmKFMudmFsaWRhdGVMYXllcnNFbGVzT3JkZXJpbmcoX24seCksUy5sZXZlbElzQ29tcGxldGUoX24seCkpcmV0dXJuIHZlPUhbX25dLCEwfSxNdD1mdW5jdGlvbihfbil7aWYoIXZlKWZvcih2YXIgaG49aytfbjtnazw9aG4mJmhuPD1RUyYmIUx0KGhuKTtobis9X24pO307TXQoMSksTXQoLTEpO2Zvcih2YXIgdXQ9WS5sZW5ndGgtMTt1dD49MDt1dC0tKXt2YXIgV3Q9WVt1dF07V3QuaW52YWxpZCYmUTMoWSxXdCl9fTtpZighY2UpbWUoKTtlbHNlIHJldHVybiBZO3ZhciBMZT1mdW5jdGlvbigpe2lmKCFaKXtaPVdkKCk7Zm9yKHZhciBMdD0wO0x0PHgubGVuZ3RoO0x0KyspZGooWix4W0x0XS5ib3VuZGluZ0JveCgpKX1yZXR1cm4gWn0sX2U9ZnVuY3Rpb24oTHQpe0x0PUx0fHx7fTt2YXIgTXQ9THQuYWZ0ZXI7TGUoKTt2YXIgdXQ9Wi53KnEqKFouaCpxKTtpZih1dD5oeilyZXR1cm4gbnVsbDt2YXIgV3Q9Uy5tYWtlTGF5ZXIoWixrKTtpZihNdCE9bnVsbCl7dmFyIFR0PVkuaW5kZXhPZihNdCkrMTtZLnNwbGljZShUdCwwLFd0KX1lbHNlKEx0Lmluc2VydD09PXZvaWQgMHx8THQuaW5zZXJ0KSYmWS51bnNoaWZ0KFd0KTtyZXR1cm4gV3R9O2lmKFMuc2tpcHBpbmcmJiEkKXJldHVybiBudWxsO2Zvcih2YXIgRWU9bnVsbCxCZT14Lmxlbmd0aC9vaWUsUmU9ISQsVmU9MDtWZTx4Lmxlbmd0aDtWZSsrKXt2YXIgY3Q9eFtWZV0sc3Q9Y3QuX3ByaXZhdGUucnNjcmF0Y2gsWWU9c3QuaW1nTGF5ZXJDYWNoZXM9c3QuaW1nTGF5ZXJDYWNoZXN8fHt9LG10PVllW2tdO2lmKG10KXtFZT1tdDtjb250aW51ZX1pZigoIUVlfHxFZS5lbGVzLmxlbmd0aD49QmV8fCFwaihFZS5iYixjdC5ib3VuZGluZ0JveCgpKSkmJihFZT1fZSh7aW5zZXJ0OiEwLGFmdGVyOkVlfSksIUVlKSlyZXR1cm4gbnVsbDt2ZXx8UmU/Uy5xdWV1ZUxheWVyKEVlLGN0KTpTLmRyYXdFbGVJbkxheWVyKEVlLGN0LGssbSksRWUuZWxlcy5wdXNoKGN0KSxZZVtrXT1FZX1yZXR1cm4gdmV8fChSZT9udWxsOlkpfSxuMC5nZXRFbGVMZXZlbEZvckxheWVyTGV2ZWw9ZnVuY3Rpb24oeCxtKXtyZXR1cm4geH0sbjAuZHJhd0VsZUluTGF5ZXI9ZnVuY3Rpb24oeCxtLGssUyl7dmFyIE09dGhpcyxPPXRoaXMucmVuZGVyZXIsTj14LmNvbnRleHQsJD1tLmJvdW5kaW5nQm94KCk7JC53PT09MHx8JC5oPT09MHx8IW0udmlzaWJsZSgpfHwoaz1NLmdldEVsZUxldmVsRm9yTGF5ZXJMZXZlbChrLFMpLE8uc2V0SW1nU21vb3RoaW5nKE4sITEpLE8uZHJhd0NhY2hlZEVsZW1lbnQoTixtLG51bGwsbnVsbCxrLGZ6KSxPLnNldEltZ1Ntb290aGluZyhOLCEwKSl9LG4wLmxldmVsSXNDb21wbGV0ZT1mdW5jdGlvbih4LG0pe3ZhciBrPXRoaXMsUz1rLmxheWVyc0J5TGV2ZWxbeF07aWYoIVN8fFMubGVuZ3RoPT09MClyZXR1cm4hMTtmb3IodmFyIE09MCxPPTA7TzxTLmxlbmd0aDtPKyspe3ZhciBOPVNbT107aWYoTi5yZXFzPjB8fE4uaW52YWxpZClyZXR1cm4hMTtNKz1OLmVsZXMubGVuZ3RofXJldHVybiBNPT09bS5sZW5ndGh9LG4wLnZhbGlkYXRlTGF5ZXJzRWxlc09yZGVyaW5nPWZ1bmN0aW9uKHgsbSl7dmFyIGs9dGhpcy5sYXllcnNCeUxldmVsW3hdO2lmKGspZm9yKHZhciBTPTA7UzxrLmxlbmd0aDtTKyspe2Zvcih2YXIgTT1rW1NdLE89LTEsTj0wO048bS5sZW5ndGg7TisrKWlmKE0uZWxlc1swXT09PW1bTl0pe089TjticmVha31pZihPPDApe3RoaXMuaW52YWxpZGF0ZUxheWVyKE0pO2NvbnRpbnVlfWZvcih2YXIgJD1PLE49MDtOPE0uZWxlcy5sZW5ndGg7TisrKWlmKE0uZWxlc1tOXSE9PW1bJCtOXSl7dGhpcy5pbnZhbGlkYXRlTGF5ZXIoTSk7YnJlYWt9fX0sbjAudXBkYXRlRWxlbWVudHNJbkxheWVycz1mdW5jdGlvbih4LG0pe2Zvcih2YXIgaz10aGlzLFM9VSh4WzBdKSxNPTA7TTx4Lmxlbmd0aDtNKyspZm9yKHZhciBPPVM/bnVsbDp4W01dLE49Uz94W01dOnhbTV0uZWxlLCQ9Ti5fcHJpdmF0ZS5yc2NyYXRjaCxIPSQuaW1nTGF5ZXJDYWNoZXM9JC5pbWdMYXllckNhY2hlc3x8e30scT1naztxPD1RUztxKyspe3ZhciBZPUhbcV07WSYmKE8mJmsuZ2V0RWxlTGV2ZWxGb3JMYXllckxldmVsKFkubGV2ZWwpIT09Ty5sZXZlbHx8bShZLE4sTykpfX0sbjAuaGF2ZUxheWVycz1mdW5jdGlvbigpe2Zvcih2YXIgeD10aGlzLG09ITEsaz1naztrPD1RUztrKyspe3ZhciBTPXgubGF5ZXJzQnlMZXZlbFtrXTtpZihTJiZTLmxlbmd0aD4wKXttPSEwO2JyZWFrfX1yZXR1cm4gbX0sbjAuaW52YWxpZGF0ZUVsZW1lbnRzPWZ1bmN0aW9uKHgpe3ZhciBtPXRoaXM7eC5sZW5ndGghPT0wJiYobS5sYXN0SW52YWxpZGF0aW9uVGltZT1CcCgpLCEoeC5sZW5ndGg9PT0wfHwhbS5oYXZlTGF5ZXJzKCkpJiZtLnVwZGF0ZUVsZW1lbnRzSW5MYXllcnMoeCxmdW5jdGlvbihTLE0sTyl7bS5pbnZhbGlkYXRlTGF5ZXIoUyl9KSl9LG4wLmludmFsaWRhdGVMYXllcj1mdW5jdGlvbih4KXtpZih0aGlzLmxhc3RJbnZhbGlkYXRpb25UaW1lPUJwKCksIXguaW52YWxpZCl7dmFyIG09eC5sZXZlbCxrPXguZWxlcyxTPXRoaXMubGF5ZXJzQnlMZXZlbFttXTtRMyhTLHgpLHguZWxlc1F1ZXVlPVtdLHguaW52YWxpZD0hMCx4LnJlcGxhY2VtZW50JiYoeC5yZXBsYWNlbWVudC5pbnZhbGlkPSEwKTtmb3IodmFyIE09MDtNPGsubGVuZ3RoO00rKyl7dmFyIE89a1tNXS5fcHJpdmF0ZS5yc2NyYXRjaC5pbWdMYXllckNhY2hlcztPJiYoT1ttXT1udWxsKX19fSxuMC5yZWZpbmVFbGVtZW50VGV4dHVyZXM9ZnVuY3Rpb24oeCl7dmFyIG09dGhpczttLnVwZGF0ZUVsZW1lbnRzSW5MYXllcnMoeCxmdW5jdGlvbihTLE0sTyl7dmFyIE49Uy5yZXBsYWNlbWVudDtpZihOfHwoTj1TLnJlcGxhY2VtZW50PW0ubWFrZUxheWVyKFMuYmIsUy5sZXZlbCksTi5yZXBsYWNlcz1TLE4uZWxlcz1TLmVsZXMpLCFOLnJlcXMpZm9yKHZhciAkPTA7JDxOLmVsZXMubGVuZ3RoOyQrKyltLnF1ZXVlTGF5ZXIoTixOLmVsZXNbJF0pfSl9LG4wLmVucXVldWVFbGVtZW50UmVmaW5lbWVudD1mdW5jdGlvbih4KXt0aGlzLmVsZVR4ckRlcXMubWVyZ2UoeCksdGhpcy5zY2hlZHVsZUVsZW1lbnRSZWZpbmVtZW50KCl9LG4wLnF1ZXVlTGF5ZXI9ZnVuY3Rpb24oeCxtKXt2YXIgaz10aGlzLFM9ay5sYXllcnNRdWV1ZSxNPXguZWxlc1F1ZXVlLE89TS5oYXNJZD1NLmhhc0lkfHx7fTtpZigheC5yZXBsYWNlbWVudCl7aWYobSl7aWYoT1ttLmlkKCldKXJldHVybjtNLnB1c2gobSksT1ttLmlkKCldPSEwfXgucmVxcz8oeC5yZXFzKyssUy51cGRhdGVJdGVtKHgpKTooeC5yZXFzPTEsUy5wdXNoKHgpKX19LG4wLmRlcXVldWU9ZnVuY3Rpb24oeCl7Zm9yKHZhciBtPXRoaXMsaz1tLmxheWVyc1F1ZXVlLFM9W10sTT0wO008ZGllJiZrLnNpemUoKSE9PTA7KXt2YXIgTz1rLnBlZWsoKTtpZihPLnJlcGxhY2VtZW50KXtrLnBvcCgpO2NvbnRpbnVlfWlmKE8ucmVwbGFjZXMmJk8hPT1PLnJlcGxhY2VzLnJlcGxhY2VtZW50KXtrLnBvcCgpO2NvbnRpbnVlfWlmKE8uaW52YWxpZCl7ay5wb3AoKTtjb250aW51ZX12YXIgTj1PLmVsZXNRdWV1ZS5zaGlmdCgpO04mJihtLmRyYXdFbGVJbkxheWVyKE8sTixPLmxldmVsLHgpLE0rKyksUy5sZW5ndGg9PT0wJiZTLnB1c2goITApLE8uZWxlc1F1ZXVlLmxlbmd0aD09PTAmJihrLnBvcCgpLE8ucmVxcz0wLE8ucmVwbGFjZXMmJm0uYXBwbHlMYXllclJlcGxhY2VtZW50KE8pLG0ucmVxdWVzdFJlZHJhdygpKX1yZXR1cm4gU30sbjAuYXBwbHlMYXllclJlcGxhY2VtZW50PWZ1bmN0aW9uKHgpe3ZhciBtPXRoaXMsaz1tLmxheWVyc0J5TGV2ZWxbeC5sZXZlbF0sUz14LnJlcGxhY2VzLE09ay5pbmRleE9mKFMpO2lmKCEoTTwwfHxTLmludmFsaWQpKXtrW01dPXg7Zm9yKHZhciBPPTA7Tzx4LmVsZXMubGVuZ3RoO08rKyl7dmFyIE49eC5lbGVzW09dLl9wcml2YXRlLCQ9Ti5pbWdMYXllckNhY2hlcz1OLmltZ0xheWVyQ2FjaGVzfHx7fTskJiYoJFt4LmxldmVsXT14KX1tLnJlcXVlc3RSZWRyYXcoKX19LG4wLnJlcXVlc3RSZWRyYXc9TnUoZnVuY3Rpb24oKXt2YXIgeD10aGlzLnJlbmRlcmVyO3gucmVkcmF3SGludCgiZWxlcyIsITApLHgucmVkcmF3SGludCgiZHJhZyIsITApLHgucmVkcmF3KCl9LDEwMCksbjAuc2V0dXBEZXF1ZXVlaW5nPW96LnNldHVwRGVxdWV1ZWluZyh7ZGVxUmVkcmF3VGhyZXNob2xkOnVpZSxkZXFDb3N0OlNmLGRlcUF2Z0Nvc3Q6aGllLGRlcU5vRHJhd0Nvc3Q6ZmllLGRlcUZhc3RDb3N0OnV6LGRlcTpmdW5jdGlvbihtLGspe3JldHVybiBtLmRlcXVldWUoayl9LG9uRGVxZDpuSSxzaG91bGRSZWRyYXc6bDUscHJpb3JpdHk6ZnVuY3Rpb24obSl7cmV0dXJuIG0ucmVuZGVyZXIuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5seXJUeHJEZXF9fSk7dmFyIHB6PXt9LGJ6O2Z1bmN0aW9uIGdpZSh4LG0pe2Zvcih2YXIgaz0wO2s8bS5sZW5ndGg7aysrKXt2YXIgUz1tW2tdO3gubGluZVRvKFMueCxTLnkpfX1mdW5jdGlvbiBwaWUoeCxtLGspe2Zvcih2YXIgUyxNPTA7TTxtLmxlbmd0aDtNKyspe3ZhciBPPW1bTV07TT09PTAmJihTPU8pLHgubGluZVRvKE8ueCxPLnkpfXgucXVhZHJhdGljQ3VydmVUbyhrLngsay55LFMueCxTLnkpfWZ1bmN0aW9uIG16KHgsbSxrKXt4LmJlZ2luUGF0aCYmeC5iZWdpblBhdGgoKTtmb3IodmFyIFM9bSxNPTA7TTxTLmxlbmd0aDtNKyspe3ZhciBPPVNbTV07eC5saW5lVG8oTy54LE8ueSl9dmFyIE49aywkPWtbMF07eC5tb3ZlVG8oJC54LCQueSk7Zm9yKHZhciBNPTE7TTxOLmxlbmd0aDtNKyspe3ZhciBPPU5bTV07eC5saW5lVG8oTy54LE8ueSl9eC5jbG9zZVBhdGgmJnguY2xvc2VQYXRoKCl9ZnVuY3Rpb24gYmllKHgsbSxrLFMsTSl7eC5iZWdpblBhdGgmJnguYmVnaW5QYXRoKCkseC5hcmMoayxTLE0sMCxNYXRoLlBJKjIsITEpO3ZhciBPPW0sTj1PWzBdO3gubW92ZVRvKE4ueCxOLnkpO2Zvcih2YXIgJD0wOyQ8Ty5sZW5ndGg7JCsrKXt2YXIgSD1PWyRdO3gubGluZVRvKEgueCxILnkpfXguY2xvc2VQYXRoJiZ4LmNsb3NlUGF0aCgpfWZ1bmN0aW9uIHZ6KHgsbSxrLFMpe3guYXJjKG0sayxTLDAsTWF0aC5QSSoyLCExKX1wei5hcnJvd1NoYXBlSW1wbD1mdW5jdGlvbih4KXtyZXR1cm4oYnp8fChiej17cG9seWdvbjpnaWUsInRyaWFuZ2xlLWJhY2tjdXJ2ZSI6cGllLCJ0cmlhbmdsZS10ZWUiOm16LCJjaXJjbGUtdHJpYW5nbGUiOmJpZSwidHJpYW5nbGUtY3Jvc3MiOm16LGNpcmNsZTp2en0pKVt4XX07dmFyIFEyPXt9O1EyLmRyYXdFbGVtZW50PWZ1bmN0aW9uKHgsbSxrLFMsTSxPKXt2YXIgTj10aGlzO20uaXNOb2RlKCk/Ti5kcmF3Tm9kZSh4LG0sayxTLE0sTyk6Ti5kcmF3RWRnZSh4LG0sayxTLE0sTyl9LFEyLmRyYXdFbGVtZW50T3ZlcmxheT1mdW5jdGlvbih4LG0pe3ZhciBrPXRoaXM7bS5pc05vZGUoKT9rLmRyYXdOb2RlT3ZlcmxheSh4LG0pOmsuZHJhd0VkZ2VPdmVybGF5KHgsbSl9LFEyLmRyYXdFbGVtZW50VW5kZXJsYXk9ZnVuY3Rpb24oeCxtKXt2YXIgaz10aGlzO20uaXNOb2RlKCk/ay5kcmF3Tm9kZVVuZGVybGF5KHgsbSk6ay5kcmF3RWRnZVVuZGVybGF5KHgsbSl9LFEyLmRyYXdDYWNoZWRFbGVtZW50UG9ydGlvbj1mdW5jdGlvbih4LG0sayxTLE0sTyxOLCQpe3ZhciBIPXRoaXMscT1rLmdldEJvdW5kaW5nQm94KG0pO2lmKCEocS53PT09MHx8cS5oPT09MCkpe3ZhciBZPWsuZ2V0RWxlbWVudChtLHEsUyxNLE8pO2lmKFkhPW51bGwpe3ZhciBaPSQoSCxtKTtpZihaPT09MClyZXR1cm47dmFyIGNlPU4oSCxtKSx2ZT1xLngxLG1lPXEueTEsTGU9cS53LF9lPXEuaCxFZSxCZSxSZSxWZSxjdDtpZihjZSE9PTApe3ZhciBzdD1rLmdldFJvdGF0aW9uUG9pbnQobSk7UmU9c3QueCxWZT1zdC55LHgudHJhbnNsYXRlKFJlLFZlKSx4LnJvdGF0ZShjZSksY3Q9SC5nZXRJbWdTbW9vdGhpbmcoeCksY3R8fEguc2V0SW1nU21vb3RoaW5nKHgsITApO3ZhciBZZT1rLmdldFJvdGF0aW9uT2Zmc2V0KG0pO0VlPVllLngsQmU9WWUueX1lbHNlIEVlPXZlLEJlPW1lO3ZhciBtdDtaIT09MSYmKG10PXguZ2xvYmFsQWxwaGEseC5nbG9iYWxBbHBoYT1tdCpaKSx4LmRyYXdJbWFnZShZLnRleHR1cmUuY2FudmFzLFkueCwwLFkud2lkdGgsWS5oZWlnaHQsRWUsQmUsTGUsX2UpLFohPT0xJiYoeC5nbG9iYWxBbHBoYT1tdCksY2UhPT0wJiYoeC5yb3RhdGUoLWNlKSx4LnRyYW5zbGF0ZSgtUmUsLVZlKSxjdHx8SC5zZXRJbWdTbW9vdGhpbmcoeCwhMSkpfWVsc2Ugay5kcmF3RWxlbWVudCh4LG0pfX07dmFyIG1pZT1mdW5jdGlvbigpe3JldHVybiAwfSx2aWU9ZnVuY3Rpb24obSxrKXtyZXR1cm4gbS5nZXRUZXh0QW5nbGUoayxudWxsKX0sJEk9ZnVuY3Rpb24obSxrKXtyZXR1cm4gbS5nZXRUZXh0QW5nbGUoaywic291cmNlIil9LHdpZT1mdW5jdGlvbihtLGspe3JldHVybiBtLmdldFRleHRBbmdsZShrLCJ0YXJnZXQiKX0seWllPWZ1bmN0aW9uKG0sayl7cmV0dXJuIGsuZWZmZWN0aXZlT3BhY2l0eSgpfSxwaz1mdW5jdGlvbihtLGspe3JldHVybiBrLnBzdHlsZSgidGV4dC1vcGFjaXR5IikucGZWYWx1ZSprLmVmZmVjdGl2ZU9wYWNpdHkoKX07UTIuZHJhd0NhY2hlZEVsZW1lbnQ9ZnVuY3Rpb24oeCxtLGssUyxNLE8pe3ZhciBOPXRoaXMsJD1OLmRhdGEsSD0kLmVsZVR4ckNhY2hlLHE9JC5sYmxUeHJDYWNoZSxZPSQuc2xiVHhyQ2FjaGUsWj0kLnRsYlR4ckNhY2hlLGNlPW0uYm91bmRpbmdCb3goKSx2ZT1PPT09ITA/SC5yZWFzb25zLmhpZ2hRdWFsaXR5Om51bGw7aWYoIShjZS53PT09MHx8Y2UuaD09PTB8fCFtLnZpc2libGUoKSkmJighU3x8c0koY2UsUykpKXt2YXIgbWU9bS5pc0VkZ2UoKSxMZT1tLmVsZW1lbnQoKS5fcHJpdmF0ZS5yc2NyYXRjaC5iYWRMaW5lO04uZHJhd0VsZW1lbnRVbmRlcmxheSh4LG0pLE4uZHJhd0NhY2hlZEVsZW1lbnRQb3J0aW9uKHgsbSxILGssTSx2ZSxtaWUseWllKSwoIW1lfHwhTGUpJiZOLmRyYXdDYWNoZWRFbGVtZW50UG9ydGlvbih4LG0scSxrLE0sdmUsdmllLHBrKSxtZSYmIUxlJiYoTi5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24oeCxtLFksayxNLHZlLCRJLHBrKSxOLmRyYXdDYWNoZWRFbGVtZW50UG9ydGlvbih4LG0sWixrLE0sdmUsd2llLHBrKSksTi5kcmF3RWxlbWVudE92ZXJsYXkoeCxtKX19LFEyLmRyYXdFbGVtZW50cz1mdW5jdGlvbih4LG0pe2Zvcih2YXIgaz10aGlzLFM9MDtTPG0ubGVuZ3RoO1MrKyl7dmFyIE09bVtTXTtrLmRyYXdFbGVtZW50KHgsTSl9fSxRMi5kcmF3Q2FjaGVkRWxlbWVudHM9ZnVuY3Rpb24oeCxtLGssUyl7Zm9yKHZhciBNPXRoaXMsTz0wO088bS5sZW5ndGg7TysrKXt2YXIgTj1tW09dO00uZHJhd0NhY2hlZEVsZW1lbnQoeCxOLGssUyl9fSxRMi5kcmF3Q2FjaGVkTm9kZXM9ZnVuY3Rpb24oeCxtLGssUyl7Zm9yKHZhciBNPXRoaXMsTz0wO088bS5sZW5ndGg7TysrKXt2YXIgTj1tW09dO04uaXNOb2RlKCkmJk0uZHJhd0NhY2hlZEVsZW1lbnQoeCxOLGssUyl9fSxRMi5kcmF3TGF5ZXJlZEVsZW1lbnRzPWZ1bmN0aW9uKHgsbSxrLFMpe3ZhciBNPXRoaXMsTz1NLmRhdGEubHlyVHhyQ2FjaGUuZ2V0TGF5ZXJzKG0sayk7aWYoTylmb3IodmFyIE49MDtOPE8ubGVuZ3RoO04rKyl7dmFyICQ9T1tOXSxIPSQuYmI7SC53PT09MHx8SC5oPT09MHx8eC5kcmF3SW1hZ2UoJC5jYW52YXMsSC54MSxILnkxLEgudyxILmgpfWVsc2UgTS5kcmF3Q2FjaGVkRWxlbWVudHMoeCxtLGssUyl9O3ZhciBKMj17fTtKMi5kcmF3RWRnZT1mdW5jdGlvbih4LG0sayl7dmFyIFM9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiEwLE09YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiEwLE89YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiEwLE49dGhpcywkPW0uX3ByaXZhdGUucnNjcmF0Y2g7aWYoIShPJiYhbS52aXNpYmxlKCkpJiYhKCQuYmFkTGluZXx8JC5hbGxwdHM9PW51bGx8fGlzTmFOKCQuYWxscHRzWzBdKSkpe3ZhciBIO2smJihIPWsseC50cmFuc2xhdGUoLUgueDEsLUgueTEpKTt2YXIgcT1PP20ucHN0eWxlKCJvcGFjaXR5IikudmFsdWU6MSxZPU8/bS5wc3R5bGUoImxpbmUtb3BhY2l0eSIpLnZhbHVlOjEsWj1tLnBzdHlsZSgiY3VydmUtc3R5bGUiKS52YWx1ZSxjZT1tLnBzdHlsZSgibGluZS1zdHlsZSIpLnZhbHVlLHZlPW0ucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsbWU9bS5wc3R5bGUoImxpbmUtY2FwIikudmFsdWUsTGU9cSpZLF9lPXEqWSxFZT1mdW5jdGlvbigpe3ZhciB1dD1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06TGU7Wj09PSJzdHJhaWdodC10cmlhbmdsZSI/KE4uZWxlU3Ryb2tlU3R5bGUoeCxtLHV0KSxOLmRyYXdFZGdlVHJpYW5nbGVQYXRoKG0seCwkLmFsbHB0cykpOih4LmxpbmVXaWR0aD12ZSx4LmxpbmVDYXA9bWUsTi5lbGVTdHJva2VTdHlsZSh4LG0sdXQpLE4uZHJhd0VkZ2VQYXRoKG0seCwkLmFsbHB0cyxjZSkseC5saW5lQ2FwPSJidXR0Iil9LEJlPWZ1bmN0aW9uKCl7TSYmTi5kcmF3RWRnZU92ZXJsYXkoeCxtKX0sUmU9ZnVuY3Rpb24oKXtNJiZOLmRyYXdFZGdlVW5kZXJsYXkoeCxtKX0sVmU9ZnVuY3Rpb24oKXt2YXIgdXQ9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOl9lO04uZHJhd0Fycm93aGVhZHMoeCxtLHV0KX0sY3Q9ZnVuY3Rpb24oKXtOLmRyYXdFbGVtZW50VGV4dCh4LG0sbnVsbCxTKX07eC5saW5lSm9pbj0icm91bmQiO3ZhciBzdD1tLnBzdHlsZSgiZ2hvc3QiKS52YWx1ZT09PSJ5ZXMiO2lmKHN0KXt2YXIgWWU9bS5wc3R5bGUoImdob3N0LW9mZnNldC14IikucGZWYWx1ZSxtdD1tLnBzdHlsZSgiZ2hvc3Qtb2Zmc2V0LXkiKS5wZlZhbHVlLEplPW0ucHN0eWxlKCJnaG9zdC1vcGFjaXR5IikudmFsdWUsTHQ9TGUqSmU7eC50cmFuc2xhdGUoWWUsbXQpLEVlKEx0KSxWZShMdCkseC50cmFuc2xhdGUoLVllLC1tdCl9UmUoKSxFZSgpLFZlKCksQmUoKSxjdCgpLGsmJngudHJhbnNsYXRlKEgueDEsSC55MSl9fTt2YXIgd3o9ZnVuY3Rpb24obSl7aWYoIVsib3ZlcmxheSIsInVuZGVybGF5Il0uaW5jbHVkZXMobSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0YXRlIik7cmV0dXJuIGZ1bmN0aW9uKGssUyl7aWYoUy52aXNpYmxlKCkpe3ZhciBNPVMucHN0eWxlKCIiLmNvbmNhdChtLCItb3BhY2l0eSIpKS52YWx1ZTtpZihNIT09MCl7dmFyIE89dGhpcyxOPU8udXNlUGF0aHMoKSwkPVMuX3ByaXZhdGUucnNjcmF0Y2gsSD1TLnBzdHlsZSgiIi5jb25jYXQobSwiLXBhZGRpbmciKSkucGZWYWx1ZSxxPTIqSCxZPVMucHN0eWxlKCIiLmNvbmNhdChtLCItY29sb3IiKSkudmFsdWU7ay5saW5lV2lkdGg9cSwkLmVkZ2VUeXBlPT09InNlbGYiJiYhTj9rLmxpbmVDYXA9ImJ1dHQiOmsubGluZUNhcD0icm91bmQiLE8uY29sb3JTdHJva2VTdHlsZShrLFlbMF0sWVsxXSxZWzJdLE0pLE8uZHJhd0VkZ2VQYXRoKFMsaywkLmFsbHB0cywic29saWQiKX19fX07SjIuZHJhd0VkZ2VPdmVybGF5PXd6KCJvdmVybGF5IiksSjIuZHJhd0VkZ2VVbmRlcmxheT13eigidW5kZXJsYXkiKSxKMi5kcmF3RWRnZVBhdGg9ZnVuY3Rpb24oeCxtLGssUyl7dmFyIE09eC5fcHJpdmF0ZS5yc2NyYXRjaCxPPW0sTiwkPSExLEg9dGhpcy51c2VQYXRocygpLHE9eC5wc3R5bGUoImxpbmUtZGFzaC1wYXR0ZXJuIikucGZWYWx1ZSxZPXgucHN0eWxlKCJsaW5lLWRhc2gtb2Zmc2V0IikucGZWYWx1ZTtpZihIKXt2YXIgWj1rLmpvaW4oIiQiKSxjZT1NLnBhdGhDYWNoZUtleSYmTS5wYXRoQ2FjaGVLZXk9PT1aO2NlPyhOPW09TS5wYXRoQ2FjaGUsJD0hMCk6KE49bT1uZXcgUGF0aDJELE0ucGF0aENhY2hlS2V5PVosTS5wYXRoQ2FjaGU9Til9aWYoTy5zZXRMaW5lRGFzaClzd2l0Y2goUyl7Y2FzZSJkb3R0ZWQiOk8uc2V0TGluZURhc2goWzEsMV0pO2JyZWFrO2Nhc2UiZGFzaGVkIjpPLnNldExpbmVEYXNoKHEpLE8ubGluZURhc2hPZmZzZXQ9WTticmVhaztjYXNlInNvbGlkIjpPLnNldExpbmVEYXNoKFtdKTticmVha31pZighJCYmIU0uYmFkTGluZSlzd2l0Y2gobS5iZWdpblBhdGgmJm0uYmVnaW5QYXRoKCksbS5tb3ZlVG8oa1swXSxrWzFdKSxNLmVkZ2VUeXBlKXtjYXNlImJlemllciI6Y2FzZSJzZWxmIjpjYXNlImNvbXBvdW5kIjpjYXNlIm11bHRpYmV6aWVyIjpmb3IodmFyIHZlPTI7dmUrMzxrLmxlbmd0aDt2ZSs9NCltLnF1YWRyYXRpY0N1cnZlVG8oa1t2ZV0sa1t2ZSsxXSxrW3ZlKzJdLGtbdmUrM10pO2JyZWFrO2Nhc2Uic3RyYWlnaHQiOmNhc2Uic2VnbWVudHMiOmNhc2UiaGF5c3RhY2siOmZvcih2YXIgbWU9MjttZSsxPGsubGVuZ3RoO21lKz0yKW0ubGluZVRvKGtbbWVdLGtbbWUrMV0pO2JyZWFrfW09TyxIP20uc3Ryb2tlKE4pOm0uc3Ryb2tlKCksbS5zZXRMaW5lRGFzaCYmbS5zZXRMaW5lRGFzaChbXSl9LEoyLmRyYXdFZGdlVHJpYW5nbGVQYXRoPWZ1bmN0aW9uKHgsbSxrKXttLmZpbGxTdHlsZT1tLnN0cm9rZVN0eWxlO2Zvcih2YXIgUz14LnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLE09MDtNKzE8ay5sZW5ndGg7TSs9Mil7dmFyIE89W2tbTSsyXS1rW01dLGtbTSszXS1rW00rMV1dLE49TWF0aC5zcXJ0KE9bMF0qT1swXStPWzFdKk9bMV0pLCQ9W09bMV0vTiwtT1swXS9OXSxIPVskWzBdKlMvMiwkWzFdKlMvMl07bS5iZWdpblBhdGgoKSxtLm1vdmVUbyhrW01dLUhbMF0sa1tNKzFdLUhbMV0pLG0ubGluZVRvKGtbTV0rSFswXSxrW00rMV0rSFsxXSksbS5saW5lVG8oa1tNKzJdLGtbTSszXSksbS5jbG9zZVBhdGgoKSxtLmZpbGwoKX19LEoyLmRyYXdBcnJvd2hlYWRzPWZ1bmN0aW9uKHgsbSxrKXt2YXIgUz1tLl9wcml2YXRlLnJzY3JhdGNoLE09Uy5lZGdlVHlwZT09PSJoYXlzdGFjayI7TXx8dGhpcy5kcmF3QXJyb3doZWFkKHgsbSwic291cmNlIixTLmFycm93U3RhcnRYLFMuYXJyb3dTdGFydFksUy5zcmNBcnJvd0FuZ2xlLGspLHRoaXMuZHJhd0Fycm93aGVhZCh4LG0sIm1pZC10YXJnZXQiLFMubWlkWCxTLm1pZFksUy5taWR0Z3RBcnJvd0FuZ2xlLGspLHRoaXMuZHJhd0Fycm93aGVhZCh4LG0sIm1pZC1zb3VyY2UiLFMubWlkWCxTLm1pZFksUy5taWRzcmNBcnJvd0FuZ2xlLGspLE18fHRoaXMuZHJhd0Fycm93aGVhZCh4LG0sInRhcmdldCIsUy5hcnJvd0VuZFgsUy5hcnJvd0VuZFksUy50Z3RBcnJvd0FuZ2xlLGspfSxKMi5kcmF3QXJyb3doZWFkPWZ1bmN0aW9uKHgsbSxrLFMsTSxPLE4pe2lmKCEoaXNOYU4oUyl8fFM9PW51bGx8fGlzTmFOKE0pfHxNPT1udWxsfHxpc05hTihPKXx8Tz09bnVsbCkpe3ZhciAkPXRoaXMsSD1tLnBzdHlsZShrKyItYXJyb3ctc2hhcGUiKS52YWx1ZTtpZihIIT09Im5vbmUiKXt2YXIgcT1tLnBzdHlsZShrKyItYXJyb3ctZmlsbCIpLnZhbHVlPT09ImhvbGxvdyI/ImJvdGgiOiJmaWxsZWQiLFk9bS5wc3R5bGUoaysiLWFycm93LWZpbGwiKS52YWx1ZSxaPW0ucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsY2U9bS5wc3R5bGUoaysiLWFycm93LXdpZHRoIiksdmU9Y2UudmFsdWU9PT0ibWF0Y2gtbGluZSI/WjpjZS5wZlZhbHVlO2NlLnVuaXRzPT09IiUiJiYodmUqPVopO3ZhciBtZT1tLnBzdHlsZSgib3BhY2l0eSIpLnZhbHVlO049PT12b2lkIDAmJihOPW1lKTt2YXIgTGU9eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247KE4hPT0xfHxZPT09ImhvbGxvdyIpJiYoeC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW91dCIsJC5jb2xvckZpbGxTdHlsZSh4LDI1NSwyNTUsMjU1LDEpLCQuY29sb3JTdHJva2VTdHlsZSh4LDI1NSwyNTUsMjU1LDEpLCQuZHJhd0Fycm93U2hhcGUobSx4LHEsWixILHZlLFMsTSxPKSx4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1MZSk7dmFyIF9lPW0ucHN0eWxlKGsrIi1hcnJvdy1jb2xvciIpLnZhbHVlOyQuY29sb3JGaWxsU3R5bGUoeCxfZVswXSxfZVsxXSxfZVsyXSxOKSwkLmNvbG9yU3Ryb2tlU3R5bGUoeCxfZVswXSxfZVsxXSxfZVsyXSxOKSwkLmRyYXdBcnJvd1NoYXBlKG0seCxZLFosSCx2ZSxTLE0sTyl9fX0sSjIuZHJhd0Fycm93U2hhcGU9ZnVuY3Rpb24oeCxtLGssUyxNLE8sTiwkLEgpe3ZhciBxPXRoaXMsWT10aGlzLnVzZVBhdGhzKCkmJk0hPT0idHJpYW5nbGUtY3Jvc3MiLFo9ITEsY2UsdmU9bSxtZT17eDpOLHk6JH0sTGU9eC5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUsX2U9dGhpcy5nZXRBcnJvd1dpZHRoKFMsTGUpLEVlPXEuYXJyb3dTaGFwZXNbTV07aWYoWSl7dmFyIEJlPXEuYXJyb3dQYXRoQ2FjaGU9cS5hcnJvd1BhdGhDYWNoZXx8W10sUmU9dWQoTSksVmU9QmVbUmVdO1ZlIT1udWxsPyhjZT1tPVZlLFo9ITApOihjZT1tPW5ldyBQYXRoMkQsQmVbUmVdPWNlKX1afHwobS5iZWdpblBhdGgmJm0uYmVnaW5QYXRoKCksWT9FZS5kcmF3KG0sMSwwLHt4OjAseTowfSwxKTpFZS5kcmF3KG0sX2UsSCxtZSxTKSxtLmNsb3NlUGF0aCYmbS5jbG9zZVBhdGgoKSksbT12ZSxZJiYobS50cmFuc2xhdGUoTiwkKSxtLnJvdGF0ZShIKSxtLnNjYWxlKF9lLF9lKSksKGs9PT0iZmlsbGVkInx8az09PSJib3RoIikmJihZP20uZmlsbChjZSk6bS5maWxsKCkpLChrPT09ImhvbGxvdyJ8fGs9PT0iYm90aCIpJiYobS5saW5lV2lkdGg9Ty8oWT9fZToxKSxtLmxpbmVKb2luPSJtaXRlciIsWT9tLnN0cm9rZShjZSk6bS5zdHJva2UoKSksWSYmKG0uc2NhbGUoMS9fZSwxL19lKSxtLnJvdGF0ZSgtSCksbS50cmFuc2xhdGUoLU4sLSQpKX07dmFyIGJrPXt9O2JrLnNhZmVEcmF3SW1hZ2U9ZnVuY3Rpb24oeCxtLGssUyxNLE8sTiwkLEgscSl7aWYoIShNPD0wfHxPPD0wfHxIPD0wfHxxPD0wKSl0cnl7eC5kcmF3SW1hZ2UobSxrLFMsTSxPLE4sJCxILHEpfWNhdGNoKFkpe2h1KFkpfX0sYmsuZHJhd0luc2NyaWJlZEltYWdlPWZ1bmN0aW9uKHgsbSxrLFMsTSl7dmFyIE89dGhpcyxOPWsucG9zaXRpb24oKSwkPU4ueCxIPU4ueSxxPWsuY3koKS5zdHlsZSgpLFk9cS5nZXRJbmRleGVkU3R5bGUuYmluZChxKSxaPVkoaywiYmFja2dyb3VuZC1maXQiLCJ2YWx1ZSIsUyksY2U9WShrLCJiYWNrZ3JvdW5kLXJlcGVhdCIsInZhbHVlIixTKSx2ZT1rLndpZHRoKCksbWU9ay5oZWlnaHQoKSxMZT1rLnBhZGRpbmcoKSoyLF9lPXZlKyhZKGssImJhY2tncm91bmQtd2lkdGgtcmVsYXRpdmUtdG8iLCJ2YWx1ZSIsUyk9PT0iaW5uZXIiPzA6TGUpLEVlPW1lKyhZKGssImJhY2tncm91bmQtaGVpZ2h0LXJlbGF0aXZlLXRvIiwidmFsdWUiLFMpPT09ImlubmVyIj8wOkxlKSxCZT1rLl9wcml2YXRlLnJzY3JhdGNoLFJlPVkoaywiYmFja2dyb3VuZC1jbGlwIiwidmFsdWUiLFMpLFZlPVJlPT09Im5vZGUiLGN0PVkoaywiYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5IiwidmFsdWUiLFMpKk0sc3Q9WShrLCJiYWNrZ3JvdW5kLWltYWdlLXNtb290aGluZyIsInZhbHVlIixTKSxZZT1tLndpZHRofHxtLmNhY2hlZFcsbXQ9bS5oZWlnaHR8fG0uY2FjaGVkSDsoWWU9PW51bGx8fG10PT1udWxsKSYmKGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobSksWWU9bS5jYWNoZWRXPW0ud2lkdGh8fG0ub2Zmc2V0V2lkdGgsbXQ9bS5jYWNoZWRIPW0uaGVpZ2h0fHxtLm9mZnNldEhlaWdodCxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG0pKTt2YXIgSmU9WWUsTHQ9bXQ7aWYoWShrLCJiYWNrZ3JvdW5kLXdpZHRoIiwidmFsdWUiLFMpIT09ImF1dG8iJiYoWShrLCJiYWNrZ3JvdW5kLXdpZHRoIiwidW5pdHMiLFMpPT09IiUiP0plPVkoaywiYmFja2dyb3VuZC13aWR0aCIsInBmVmFsdWUiLFMpKl9lOkplPVkoaywiYmFja2dyb3VuZC13aWR0aCIsInBmVmFsdWUiLFMpKSxZKGssImJhY2tncm91bmQtaGVpZ2h0IiwidmFsdWUiLFMpIT09ImF1dG8iJiYoWShrLCJiYWNrZ3JvdW5kLWhlaWdodCIsInVuaXRzIixTKT09PSIlIj9MdD1ZKGssImJhY2tncm91bmQtaGVpZ2h0IiwicGZWYWx1ZSIsUykqRWU6THQ9WShrLCJiYWNrZ3JvdW5kLWhlaWdodCIsInBmVmFsdWUiLFMpKSwhKEplPT09MHx8THQ9PT0wKSl7aWYoWj09PSJjb250YWluIil7dmFyIE10PU1hdGgubWluKF9lL0plLEVlL0x0KTtKZSo9TXQsTHQqPU10fWVsc2UgaWYoWj09PSJjb3ZlciIpe3ZhciBNdD1NYXRoLm1heChfZS9KZSxFZS9MdCk7SmUqPU10LEx0Kj1NdH12YXIgdXQ9JC1fZS8yLFd0PVkoaywiYmFja2dyb3VuZC1wb3NpdGlvbi14IiwidW5pdHMiLFMpLFR0PVkoaywiYmFja2dyb3VuZC1wb3NpdGlvbi14IiwicGZWYWx1ZSIsUyk7V3Q9PT0iJSI/dXQrPShfZS1KZSkqVHQ6dXQrPVR0O3ZhciBfbj1ZKGssImJhY2tncm91bmQtb2Zmc2V0LXgiLCJ1bml0cyIsUyksaG49WShrLCJiYWNrZ3JvdW5kLW9mZnNldC14IiwicGZWYWx1ZSIsUyk7X249PT0iJSI/dXQrPShfZS1KZSkqaG46dXQrPWhuO3ZhciBZdD1ILUVlLzIsRG49WShrLCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXkiLCJ1bml0cyIsUyksaXI9WShrLCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXkiLCJwZlZhbHVlIixTKTtEbj09PSIlIj9ZdCs9KEVlLUx0KSppcjpZdCs9aXI7dmFyIHZyPVkoaywiYmFja2dyb3VuZC1vZmZzZXQteSIsInVuaXRzIixTKSxObj1ZKGssImJhY2tncm91bmQtb2Zmc2V0LXkiLCJwZlZhbHVlIixTKTt2cj09PSIlIj9ZdCs9KEVlLUx0KSpObjpZdCs9Tm4sQmUucGF0aENhY2hlJiYodXQtPSQsWXQtPUgsJD0wLEg9MCk7dmFyIHByPXguZ2xvYmFsQWxwaGE7eC5nbG9iYWxBbHBoYT1jdDt2YXIgRXI9Ty5nZXRJbWdTbW9vdGhpbmcoeCksTXI9ITE7aWYoc3Q9PT0ibm8iJiZFcj8oTy5zZXRJbWdTbW9vdGhpbmcoeCwhMSksTXI9ITApOnN0PT09InllcyImJiFFciYmKE8uc2V0SW1nU21vb3RoaW5nKHgsITApLE1yPSEwKSxjZT09PSJuby1yZXBlYXQiKVZlJiYoeC5zYXZlKCksQmUucGF0aENhY2hlP3guY2xpcChCZS5wYXRoQ2FjaGUpOihPLm5vZGVTaGFwZXNbTy5nZXROb2RlU2hhcGUoayldLmRyYXcoeCwkLEgsX2UsRWUpLHguY2xpcCgpKSksTy5zYWZlRHJhd0ltYWdlKHgsbSwwLDAsWWUsbXQsdXQsWXQsSmUsTHQpLFZlJiZ4LnJlc3RvcmUoKTtlbHNle3ZhciBDcj14LmNyZWF0ZVBhdHRlcm4obSxjZSk7eC5maWxsU3R5bGU9Q3IsTy5ub2RlU2hhcGVzW08uZ2V0Tm9kZVNoYXBlKGspXS5kcmF3KHgsJCxILF9lLEVlKSx4LnRyYW5zbGF0ZSh1dCxZdCkseC5maWxsKCkseC50cmFuc2xhdGUoLXV0LC1ZdCl9eC5nbG9iYWxBbHBoYT1wcixNciYmTy5zZXRJbWdTbW9vdGhpbmcoeCxFcil9fTt2YXIgeTU9e307eTUuZWxlVGV4dEJpZ2dlclRoYW5NaW49ZnVuY3Rpb24oeCxtKXtpZighbSl7dmFyIGs9eC5jeSgpLnpvb20oKSxTPXRoaXMuZ2V0UGl4ZWxSYXRpbygpLE09TWF0aC5jZWlsKGlJKGsqUykpO209TWF0aC5wb3coMixNKX12YXIgTz14LnBzdHlsZSgiZm9udC1zaXplIikucGZWYWx1ZSptLE49eC5wc3R5bGUoIm1pbi16b29tZWQtZm9udC1zaXplIikucGZWYWx1ZTtyZXR1cm4hKE88Til9LHk1LmRyYXdFbGVtZW50VGV4dD1mdW5jdGlvbih4LG0sayxTLE0pe3ZhciBPPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTohMCxOPXRoaXM7aWYoUz09bnVsbCl7aWYoTyYmIU4uZWxlVGV4dEJpZ2dlclRoYW5NaW4obSkpcmV0dXJufWVsc2UgaWYoUz09PSExKXJldHVybjtpZihtLmlzTm9kZSgpKXt2YXIgJD1tLnBzdHlsZSgibGFiZWwiKTtpZighJHx8ISQudmFsdWUpcmV0dXJuO3ZhciBIPU4uZ2V0TGFiZWxKdXN0aWZpY2F0aW9uKG0pO3gudGV4dEFsaWduPUgseC50ZXh0QmFzZWxpbmU9ImJvdHRvbSJ9ZWxzZXt2YXIgcT1tLmVsZW1lbnQoKS5fcHJpdmF0ZS5yc2NyYXRjaC5iYWRMaW5lLFk9bS5wc3R5bGUoImxhYmVsIiksWj1tLnBzdHlsZSgic291cmNlLWxhYmVsIiksY2U9bS5wc3R5bGUoInRhcmdldC1sYWJlbCIpO2lmKHF8fCghWXx8IVkudmFsdWUpJiYoIVp8fCFaLnZhbHVlKSYmKCFjZXx8IWNlLnZhbHVlKSlyZXR1cm47eC50ZXh0QWxpZ249ImNlbnRlciIseC50ZXh0QmFzZWxpbmU9ImJvdHRvbSJ9dmFyIHZlPSFrLG1lO2smJihtZT1rLHgudHJhbnNsYXRlKC1tZS54MSwtbWUueTEpKSxNPT1udWxsPyhOLmRyYXdUZXh0KHgsbSxudWxsLHZlLE8pLG0uaXNFZGdlKCkmJihOLmRyYXdUZXh0KHgsbSwic291cmNlIix2ZSxPKSxOLmRyYXdUZXh0KHgsbSwidGFyZ2V0Iix2ZSxPKSkpOk4uZHJhd1RleHQoeCxtLE0sdmUsTyksayYmeC50cmFuc2xhdGUobWUueDEsbWUueTEpfSx5NS5nZXRGb250Q2FjaGU9ZnVuY3Rpb24oeCl7dmFyIG07dGhpcy5mb250Q2FjaGVzPXRoaXMuZm9udENhY2hlc3x8W107Zm9yKHZhciBrPTA7azx0aGlzLmZvbnRDYWNoZXMubGVuZ3RoO2srKylpZihtPXRoaXMuZm9udENhY2hlc1trXSxtLmNvbnRleHQ9PT14KXJldHVybiBtO3JldHVybiBtPXtjb250ZXh0Onh9LHRoaXMuZm9udENhY2hlcy5wdXNoKG0pLG19LHk1LnNldHVwVGV4dFN0eWxlPWZ1bmN0aW9uKHgsbSl7dmFyIGs9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiEwLFM9bS5wc3R5bGUoImZvbnQtc3R5bGUiKS5zdHJWYWx1ZSxNPW0ucHN0eWxlKCJmb250LXNpemUiKS5wZlZhbHVlKyJweCIsTz1tLnBzdHlsZSgiZm9udC1mYW1pbHkiKS5zdHJWYWx1ZSxOPW0ucHN0eWxlKCJmb250LXdlaWdodCIpLnN0clZhbHVlLCQ9az9tLmVmZmVjdGl2ZU9wYWNpdHkoKSptLnBzdHlsZSgidGV4dC1vcGFjaXR5IikudmFsdWU6MSxIPW0ucHN0eWxlKCJ0ZXh0LW91dGxpbmUtb3BhY2l0eSIpLnZhbHVlKiQscT1tLnBzdHlsZSgiY29sb3IiKS52YWx1ZSxZPW0ucHN0eWxlKCJ0ZXh0LW91dGxpbmUtY29sb3IiKS52YWx1ZTt4LmZvbnQ9UysiICIrTisiICIrTSsiICIrTyx4LmxpbmVKb2luPSJyb3VuZCIsdGhpcy5jb2xvckZpbGxTdHlsZSh4LHFbMF0scVsxXSxxWzJdLCQpLHRoaXMuY29sb3JTdHJva2VTdHlsZSh4LFlbMF0sWVsxXSxZWzJdLEgpfTtmdW5jdGlvbiB6SSh4LG0sayxTLE0pe3ZhciBPPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTo1LE49YXJndW1lbnRzLmxlbmd0aD42P2FyZ3VtZW50c1s2XTp2b2lkIDA7eC5iZWdpblBhdGgoKSx4Lm1vdmVUbyhtK08saykseC5saW5lVG8obStTLU8saykseC5xdWFkcmF0aWNDdXJ2ZVRvKG0rUyxrLG0rUyxrK08pLHgubGluZVRvKG0rUyxrK00tTykseC5xdWFkcmF0aWNDdXJ2ZVRvKG0rUyxrK00sbStTLU8saytNKSx4LmxpbmVUbyhtK08saytNKSx4LnF1YWRyYXRpY0N1cnZlVG8obSxrK00sbSxrK00tTykseC5saW5lVG8obSxrK08pLHgucXVhZHJhdGljQ3VydmVUbyhtLGssbStPLGspLHguY2xvc2VQYXRoKCksTj94LnN0cm9rZSgpOnguZmlsbCgpfXk1LmdldFRleHRBbmdsZT1mdW5jdGlvbih4LG0pe3ZhciBrLFM9eC5fcHJpdmF0ZSxNPVMucnNjcmF0Y2gsTz1tP20rIi0iOiIiLE49eC5wc3R5bGUoTysidGV4dC1yb3RhdGlvbiIpLCQ9SzIoTSwibGFiZWxBbmdsZSIsbSk7cmV0dXJuIE4uc3RyVmFsdWU9PT0iYXV0b3JvdGF0ZSI/az14LmlzRWRnZSgpPyQ6MDpOLnN0clZhbHVlPT09Im5vbmUiP2s9MDprPU4ucGZWYWx1ZSxrfSx5NS5kcmF3VGV4dD1mdW5jdGlvbih4LG0sayl7dmFyIFM9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiEwLE09YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiEwLE89bS5fcHJpdmF0ZSxOPU8ucnNjcmF0Y2gsJD1NP20uZWZmZWN0aXZlT3BhY2l0eSgpOjE7aWYoIShNJiYoJD09PTB8fG0ucHN0eWxlKCJ0ZXh0LW9wYWNpdHkiKS52YWx1ZT09PTApKSl7az09PSJtYWluIiYmKGs9bnVsbCk7dmFyIEg9SzIoTiwibGFiZWxYIixrKSxxPUsyKE4sImxhYmVsWSIsayksWSxaLGNlPXRoaXMuZ2V0TGFiZWxUZXh0KG0sayk7aWYoY2UhPW51bGwmJmNlIT09IiImJiFpc05hTihIKSYmIWlzTmFOKHEpKXt0aGlzLnNldHVwVGV4dFN0eWxlKHgsbSxNKTt2YXIgdmU9az9rKyItIjoiIixtZT1LMihOLCJsYWJlbFdpZHRoIixrKSxMZT1LMihOLCJsYWJlbEhlaWdodCIsayksX2U9bS5wc3R5bGUodmUrInRleHQtbWFyZ2luLXgiKS5wZlZhbHVlLEVlPW0ucHN0eWxlKHZlKyJ0ZXh0LW1hcmdpbi15IikucGZWYWx1ZSxCZT1tLmlzRWRnZSgpLFJlPW0ucHN0eWxlKCJ0ZXh0LWhhbGlnbiIpLnZhbHVlLFZlPW0ucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLnZhbHVlO0JlJiYoUmU9ImNlbnRlciIsVmU9ImNlbnRlciIpLEgrPV9lLHErPUVlO3ZhciBjdDtzd2l0Y2goUz9jdD10aGlzLmdldFRleHRBbmdsZShtLGspOmN0PTAsY3QhPT0wJiYoWT1ILFo9cSx4LnRyYW5zbGF0ZShZLFopLHgucm90YXRlKGN0KSxIPTAscT0wKSxWZSl7Y2FzZSJ0b3AiOmJyZWFrO2Nhc2UiY2VudGVyIjpxKz1MZS8yO2JyZWFrO2Nhc2UiYm90dG9tIjpxKz1MZTticmVha312YXIgc3Q9bS5wc3R5bGUoInRleHQtYmFja2dyb3VuZC1vcGFjaXR5IikudmFsdWUsWWU9bS5wc3R5bGUoInRleHQtYm9yZGVyLW9wYWNpdHkiKS52YWx1ZSxtdD1tLnBzdHlsZSgidGV4dC1ib3JkZXItd2lkdGgiKS5wZlZhbHVlLEplPW0ucHN0eWxlKCJ0ZXh0LWJhY2tncm91bmQtcGFkZGluZyIpLnBmVmFsdWUsTHQ9bS5wc3R5bGUoInRleHQtYmFja2dyb3VuZC1zaGFwZSIpLnN0clZhbHVlLE10PUx0LmluZGV4T2YoInJvdW5kIik9PT0wLHV0PTI7aWYoc3Q+MHx8bXQ+MCYmWWU+MCl7dmFyIFd0PUgtSmU7c3dpdGNoKFJlKXtjYXNlImxlZnQiOld0LT1tZTticmVhaztjYXNlImNlbnRlciI6V3QtPW1lLzI7YnJlYWt9dmFyIFR0PXEtTGUtSmUsX249bWUrMipKZSxobj1MZSsyKkplO2lmKHN0PjApe3ZhciBZdD14LmZpbGxTdHlsZSxEbj1tLnBzdHlsZSgidGV4dC1iYWNrZ3JvdW5kLWNvbG9yIikudmFsdWU7eC5maWxsU3R5bGU9InJnYmEoIitEblswXSsiLCIrRG5bMV0rIiwiK0RuWzJdKyIsIitzdCokKyIpIixNdD96SSh4LFd0LFR0LF9uLGhuLHV0KTp4LmZpbGxSZWN0KFd0LFR0LF9uLGhuKSx4LmZpbGxTdHlsZT1ZdH1pZihtdD4wJiZZZT4wKXt2YXIgaXI9eC5zdHJva2VTdHlsZSx2cj14LmxpbmVXaWR0aCxObj1tLnBzdHlsZSgidGV4dC1ib3JkZXItY29sb3IiKS52YWx1ZSxwcj1tLnBzdHlsZSgidGV4dC1ib3JkZXItc3R5bGUiKS52YWx1ZTtpZih4LnN0cm9rZVN0eWxlPSJyZ2JhKCIrTm5bMF0rIiwiK05uWzFdKyIsIitOblsyXSsiLCIrWWUqJCsiKSIseC5saW5lV2lkdGg9bXQseC5zZXRMaW5lRGFzaClzd2l0Y2gocHIpe2Nhc2UiZG90dGVkIjp4LnNldExpbmVEYXNoKFsxLDFdKTticmVhaztjYXNlImRhc2hlZCI6eC5zZXRMaW5lRGFzaChbNCwyXSk7YnJlYWs7Y2FzZSJkb3VibGUiOngubGluZVdpZHRoPW10LzQseC5zZXRMaW5lRGFzaChbXSk7YnJlYWs7Y2FzZSJzb2xpZCI6eC5zZXRMaW5lRGFzaChbXSk7YnJlYWt9aWYoTXQ/ekkoeCxXdCxUdCxfbixobix1dCwic3Ryb2tlIik6eC5zdHJva2VSZWN0KFd0LFR0LF9uLGhuKSxwcj09PSJkb3VibGUiKXt2YXIgRXI9bXQvMjtNdD96SSh4LFd0K0VyLFR0K0VyLF9uLUVyKjIsaG4tRXIqMix1dCwic3Ryb2tlIik6eC5zdHJva2VSZWN0KFd0K0VyLFR0K0VyLF9uLUVyKjIsaG4tRXIqMil9eC5zZXRMaW5lRGFzaCYmeC5zZXRMaW5lRGFzaChbXSkseC5saW5lV2lkdGg9dnIseC5zdHJva2VTdHlsZT1pcn19dmFyIE1yPTIqbS5wc3R5bGUoInRleHQtb3V0bGluZS13aWR0aCIpLnBmVmFsdWU7aWYoTXI+MCYmKHgubGluZVdpZHRoPU1yKSxtLnBzdHlsZSgidGV4dC13cmFwIikudmFsdWU9PT0id3JhcCIpe3ZhciBDcj1LMihOLCJsYWJlbFdyYXBDYWNoZWRMaW5lcyIsayksT3I9SzIoTiwibGFiZWxMaW5lSGVpZ2h0IixrKSxXbj1tZS8yLGJyPXRoaXMuZ2V0TGFiZWxKdXN0aWZpY2F0aW9uKG0pO3N3aXRjaChicj09PSJhdXRvInx8KFJlPT09ImxlZnQiP2JyPT09ImxlZnQiP0grPS1tZTpicj09PSJjZW50ZXIiJiYoSCs9LVduKTpSZT09PSJjZW50ZXIiP2JyPT09ImxlZnQiP0grPS1Xbjpicj09PSJyaWdodCImJihIKz1Xbik6UmU9PT0icmlnaHQiJiYoYnI9PT0iY2VudGVyIj9IKz1Xbjpicj09PSJyaWdodCImJihIKz1tZSkpKSxWZSl7Y2FzZSJ0b3AiOnEtPShDci5sZW5ndGgtMSkqT3I7YnJlYWs7Y2FzZSJjZW50ZXIiOmNhc2UiYm90dG9tIjpxLT0oQ3IubGVuZ3RoLTEpKk9yO2JyZWFrfWZvcih2YXIgU3I9MDtTcjxDci5sZW5ndGg7U3IrKylNcj4wJiZ4LnN0cm9rZVRleHQoQ3JbU3JdLEgscSkseC5maWxsVGV4dChDcltTcl0sSCxxKSxxKz1Pcn1lbHNlIE1yPjAmJnguc3Ryb2tlVGV4dChjZSxILHEpLHguZmlsbFRleHQoY2UsSCxxKTtjdCE9PTAmJih4LnJvdGF0ZSgtY3QpLHgudHJhbnNsYXRlKC1ZLC1aKSl9fX07dmFyIHc4PXt9O3c4LmRyYXdOb2RlPWZ1bmN0aW9uKHgsbSxrKXt2YXIgUz1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITAsTT1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06ITAsTz1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06ITAsTj10aGlzLCQsSCxxPW0uX3ByaXZhdGUsWT1xLnJzY3JhdGNoLFo9bS5wb3NpdGlvbigpO2lmKCEoIVgoWi54KXx8IVgoWi55KSkmJiEoTyYmIW0udmlzaWJsZSgpKSl7dmFyIGNlPU8/bS5lZmZlY3RpdmVPcGFjaXR5KCk6MSx2ZT1OLnVzZVBhdGhzKCksbWUsTGU9ITEsX2U9bS5wYWRkaW5nKCk7JD1tLndpZHRoKCkrMipfZSxIPW0uaGVpZ2h0KCkrMipfZTt2YXIgRWU7ayYmKEVlPWsseC50cmFuc2xhdGUoLUVlLngxLC1FZS55MSkpO2Zvcih2YXIgQmU9bS5wc3R5bGUoImJhY2tncm91bmQtaW1hZ2UiKSxSZT1CZS52YWx1ZSxWZT1uZXcgQXJyYXkoUmUubGVuZ3RoKSxjdD1uZXcgQXJyYXkoUmUubGVuZ3RoKSxzdD0wLFllPTA7WWU8UmUubGVuZ3RoO1llKyspe3ZhciBtdD1SZVtZZV0sSmU9VmVbWWVdPW10IT1udWxsJiZtdCE9PSJub25lIjtpZihKZSl7dmFyIEx0PW0uY3koKS5zdHlsZSgpLmdldEluZGV4ZWRTdHlsZShtLCJiYWNrZ3JvdW5kLWltYWdlLWNyb3Nzb3JpZ2luIiwidmFsdWUiLFllKTtzdCsrLGN0W1llXT1OLmdldENhY2hlZEltYWdlKG10LEx0LGZ1bmN0aW9uKCl7cS5iYWNrZ3JvdW5kVGltZXN0YW1wPURhdGUubm93KCksbS5lbWl0QW5kTm90aWZ5KCJiYWNrZ3JvdW5kIil9KX19dmFyIE10PW0ucHN0eWxlKCJiYWNrZ3JvdW5kLWJsYWNrZW4iKS52YWx1ZSx1dD1tLnBzdHlsZSgiYm9yZGVyLXdpZHRoIikucGZWYWx1ZSxXdD1tLnBzdHlsZSgiYmFja2dyb3VuZC1vcGFjaXR5IikudmFsdWUqY2UsVHQ9bS5wc3R5bGUoImJvcmRlci1jb2xvciIpLnZhbHVlLF9uPW0ucHN0eWxlKCJib3JkZXItc3R5bGUiKS52YWx1ZSxobj1tLnBzdHlsZSgiYm9yZGVyLW9wYWNpdHkiKS52YWx1ZSpjZSxZdD1tLnBzdHlsZSgib3V0bGluZS13aWR0aCIpLnBmVmFsdWUsRG49bS5wc3R5bGUoIm91dGxpbmUtY29sb3IiKS52YWx1ZSxpcj1tLnBzdHlsZSgib3V0bGluZS1zdHlsZSIpLnZhbHVlLHZyPW0ucHN0eWxlKCJvdXRsaW5lLW9wYWNpdHkiKS52YWx1ZSpjZSxObj1tLnBzdHlsZSgib3V0bGluZS1vZmZzZXQiKS52YWx1ZTt4LmxpbmVKb2luPSJtaXRlciI7dmFyIHByPWZ1bmN0aW9uKCl7dmFyIHRyPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpXdDtOLmVsZUZpbGxTdHlsZSh4LG0sdHIpfSxFcj1mdW5jdGlvbigpe3ZhciB0cj1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06aG47Ti5jb2xvclN0cm9rZVN0eWxlKHgsVHRbMF0sVHRbMV0sVHRbMl0sdHIpfSxNcj1mdW5jdGlvbigpe3ZhciB0cj1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06dnI7Ti5jb2xvclN0cm9rZVN0eWxlKHgsRG5bMF0sRG5bMV0sRG5bMl0sdHIpfSxDcj1mdW5jdGlvbih0cixHLEpuLGtyKXt2YXIgbHI9Ti5ub2RlUGF0aENhY2hlPU4ubm9kZVBhdGhDYWNoZXx8W10sVnQ9bGQoSm49PT0icG9seWdvbiI/Sm4rIiwiK2tyLmpvaW4oIiwiKTpKbiwiIitHLCIiK3RyKSxIcz1scltWdF0sd3IsRXM9ITE7cmV0dXJuIEhzIT1udWxsPyh3cj1IcyxFcz0hMCxZLnBhdGhDYWNoZT13cik6KHdyPW5ldyBQYXRoMkQsbHJbVnRdPVkucGF0aENhY2hlPXdyKSx7cGF0aDp3cixjYWNoZUhpdDpFc319LE9yPW0ucHN0eWxlKCJzaGFwZSIpLnN0clZhbHVlLFduPW0ucHN0eWxlKCJzaGFwZS1wb2x5Z29uLXBvaW50cyIpLnBmVmFsdWU7aWYodmUpe3gudHJhbnNsYXRlKFoueCxaLnkpO3ZhciBicj1DcigkLEgsT3IsV24pO21lPWJyLnBhdGgsTGU9YnIuY2FjaGVIaXR9dmFyIFNyPWZ1bmN0aW9uKCl7aWYoIUxlKXt2YXIgdHI9Wjt2ZSYmKHRyPXt4OjAseTowfSksTi5ub2RlU2hhcGVzW04uZ2V0Tm9kZVNoYXBlKG0pXS5kcmF3KG1lfHx4LHRyLngsdHIueSwkLEgpfXZlP3guZmlsbChtZSk6eC5maWxsKCl9LE5yPWZ1bmN0aW9uKCl7Zm9yKHZhciB0cj1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06Y2UsRz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITAsSm49cS5iYWNrZ3JvdW5kaW5nLGtyPTAsbHI9MDtscjxjdC5sZW5ndGg7bHIrKyl7dmFyIFZ0PW0uY3koKS5zdHlsZSgpLmdldEluZGV4ZWRTdHlsZShtLCJiYWNrZ3JvdW5kLWltYWdlLWNvbnRhaW5tZW50IiwidmFsdWUiLGxyKTtpZihHJiZWdD09PSJvdmVyInx8IUcmJlZ0PT09Imluc2lkZSIpe2tyKys7Y29udGludWV9VmVbbHJdJiZjdFtscl0uY29tcGxldGUmJiFjdFtscl0uZXJyb3ImJihrcisrLE4uZHJhd0luc2NyaWJlZEltYWdlKHgsY3RbbHJdLG0sbHIsdHIpKX1xLmJhY2tncm91bmRpbmc9a3IhPT1zdCxKbiE9PXEuYmFja2dyb3VuZGluZyYmbS51cGRhdGVTdHlsZSghMSl9LFNpPWZ1bmN0aW9uKCl7dmFyIHRyPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMSxHPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpjZTtOLmhhc1BpZShtKSYmKE4uZHJhd1BpZSh4LG0sRyksdHImJih2ZXx8Ti5ub2RlU2hhcGVzW04uZ2V0Tm9kZVNoYXBlKG0pXS5kcmF3KHgsWi54LFoueSwkLEgpKSl9LHlzPWZ1bmN0aW9uKCl7dmFyIHRyPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpjZSxHPShNdD4wP010Oi1NdCkqdHIsSm49TXQ+MD8wOjI1NTtNdCE9PTAmJihOLmNvbG9yRmlsbFN0eWxlKHgsSm4sSm4sSm4sRyksdmU/eC5maWxsKG1lKTp4LmZpbGwoKSl9LHBhPWZ1bmN0aW9uKCl7aWYodXQ+MCl7aWYoeC5saW5lV2lkdGg9dXQseC5saW5lQ2FwPSJidXR0Iix4LnNldExpbmVEYXNoKXN3aXRjaChfbil7Y2FzZSJkb3R0ZWQiOnguc2V0TGluZURhc2goWzEsMV0pO2JyZWFrO2Nhc2UiZGFzaGVkIjp4LnNldExpbmVEYXNoKFs0LDJdKTticmVhaztjYXNlInNvbGlkIjpjYXNlImRvdWJsZSI6eC5zZXRMaW5lRGFzaChbXSk7YnJlYWt9aWYodmU/eC5zdHJva2UobWUpOnguc3Ryb2tlKCksX249PT0iZG91YmxlIil7eC5saW5lV2lkdGg9dXQvMzt2YXIgdHI9eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW91dCIsdmU/eC5zdHJva2UobWUpOnguc3Ryb2tlKCkseC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249dHJ9eC5zZXRMaW5lRGFzaCYmeC5zZXRMaW5lRGFzaChbXSl9fSxNaT1mdW5jdGlvbigpe2lmKFl0PjApe2lmKHgubGluZVdpZHRoPVl0LHgubGluZUNhcD0iYnV0dCIseC5zZXRMaW5lRGFzaClzd2l0Y2goaXIpe2Nhc2UiZG90dGVkIjp4LnNldExpbmVEYXNoKFsxLDFdKTticmVhaztjYXNlImRhc2hlZCI6eC5zZXRMaW5lRGFzaChbNCwyXSk7YnJlYWs7Y2FzZSJzb2xpZCI6Y2FzZSJkb3VibGUiOnguc2V0TGluZURhc2goW10pO2JyZWFrfXZhciB0cj1aO3ZlJiYodHI9e3g6MCx5OjB9KTt2YXIgRz1OLmdldE5vZGVTaGFwZShtKSxKbj0oJCt1dCsoWXQrTm4pKS8kLGtyPShIK3V0KyhZdCtObikpL0gsbHI9JCpKbixWdD1IKmtyLEhzPU4ubm9kZVNoYXBlc1tHXS5wb2ludHMsd3I7aWYodmUpe3ZhciBFcz1DcihscixWdCxHLEhzKTt3cj1Fcy5wYXRofWlmKEc9PT0iZWxsaXBzZSIpTi5kcmF3RWxsaXBzZVBhdGgod3J8fHgsdHIueCx0ci55LGxyLFZ0KTtlbHNlIGlmKFsicm91bmQtZGlhbW9uZCIsInJvdW5kLWhlcHRhZ29uIiwicm91bmQtaGV4YWdvbiIsInJvdW5kLW9jdGFnb24iLCJyb3VuZC1wZW50YWdvbiIsInJvdW5kLXBvbHlnb24iLCJyb3VuZC10cmlhbmdsZSIsInJvdW5kLXRhZyJdLmluY2x1ZGVzKEcpKXt2YXIgZ289MCwkYz0wLHphPTA7Rz09PSJyb3VuZC1kaWFtb25kIj9nbz0odXQrTm4rWXQpKjEuNDpHPT09InJvdW5kLWhlcHRhZ29uIj8oZ289KHV0K05uK1l0KSoxLjA3NSx6YT0tKHV0LzIrTm4rWXQpLzM1KTpHPT09InJvdW5kLWhleGFnb24iP2dvPSh1dCtObitZdCkqMS4xMjpHPT09InJvdW5kLXBlbnRhZ29uIj8oZ289KHV0K05uK1l0KSoxLjEzLHphPS0odXQvMitObitZdCkvMTUpOkc9PT0icm91bmQtdGFnIj8oZ289KHV0K05uK1l0KSoxLjEyLCRjPSh1dC8yK1l0K05uKSouMDcpOkc9PT0icm91bmQtdHJpYW5nbGUiJiYoZ289KHV0K05uK1l0KSooTWF0aC5QSS8yKSx6YT0tKHV0K05uLzIrWXQpL01hdGguUEkpLGdvIT09MCYmKEpuPSgkK2dvKS8kLGtyPShIK2dvKS9IKSxOLmRyYXdSb3VuZFBvbHlnb25QYXRoKHdyfHx4LHRyLngrJGMsdHIueSt6YSwkKkpuLEgqa3IsSHMpfWVsc2UgaWYoWyJyb3VuZHJlY3RhbmdsZSIsInJvdW5kLXJlY3RhbmdsZSJdLmluY2x1ZGVzKEcpKU4uZHJhd1JvdW5kUmVjdGFuZ2xlUGF0aCh3cnx8eCx0ci54LHRyLnksbHIsVnQpO2Vsc2UgaWYoWyJjdXRyZWN0YW5nbGUiLCJjdXQtcmVjdGFuZ2xlIl0uaW5jbHVkZXMoRykpTi5kcmF3Q3V0UmVjdGFuZ2xlUGF0aCh3cnx8eCx0ci54LHRyLnksbHIsVnQpO2Vsc2UgaWYoWyJib3R0b21yb3VuZHJlY3RhbmdsZSIsImJvdHRvbS1yb3VuZC1yZWN0YW5nbGUiXS5pbmNsdWRlcyhHKSlOLmRyYXdCb3R0b21Sb3VuZFJlY3RhbmdsZVBhdGgod3J8fHgsdHIueCx0ci55LGxyLFZ0KTtlbHNlIGlmKEc9PT0iYmFycmVsIilOLmRyYXdCYXJyZWxQYXRoKHdyfHx4LHRyLngsdHIueSxscixWdCk7ZWxzZSBpZihHLnN0YXJ0c1dpdGgoInBvbHlnb24iKXx8WyJyaG9tYm9pZCIsInJpZ2h0LXJob21ib2lkIiwicm91bmQtdGFnIiwidGFnIiwidmVlIl0uaW5jbHVkZXMoRykpe3ZhciBTYz0odXQrWXQrTm4pLyQ7SHM9Z1MocFMoSHMsU2MpKSxOLmRyYXdQb2x5Z29uUGF0aCh3cnx8eCx0ci54LHRyLnksJCxILEhzKX1lbHNle3ZhciBiYT0odXQrWXQrTm4pLyQ7SHM9Z1MocFMoSHMsLWJhKSksTi5kcmF3UG9seWdvblBhdGgod3J8fHgsdHIueCx0ci55LCQsSCxIcyl9aWYodmU/eC5zdHJva2Uod3IpOnguc3Ryb2tlKCksaXI9PT0iZG91YmxlIil7eC5saW5lV2lkdGg9dXQvMzt2YXIgeG89eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW91dCIsdmU/eC5zdHJva2Uod3IpOnguc3Ryb2tlKCkseC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249eG99eC5zZXRMaW5lRGFzaCYmeC5zZXRMaW5lRGFzaChbXSl9fSxnaT1mdW5jdGlvbigpe00mJk4uZHJhd05vZGVPdmVybGF5KHgsbSxaLCQsSCl9LGZzPWZ1bmN0aW9uKCl7TSYmTi5kcmF3Tm9kZVVuZGVybGF5KHgsbSxaLCQsSCl9LEZzPWZ1bmN0aW9uKCl7Ti5kcmF3RWxlbWVudFRleHQoeCxtLG51bGwsUyl9LHhzPW0ucHN0eWxlKCJnaG9zdCIpLnZhbHVlPT09InllcyI7aWYoeHMpe3ZhciBScz1tLnBzdHlsZSgiZ2hvc3Qtb2Zmc2V0LXgiKS5wZlZhbHVlLHlvPW0ucHN0eWxlKCJnaG9zdC1vZmZzZXQteSIpLnBmVmFsdWUsJGE9bS5wc3R5bGUoImdob3N0LW9wYWNpdHkiKS52YWx1ZSxEYT0kYSpjZTt4LnRyYW5zbGF0ZShScyx5byksTXIoKSxNaSgpLHByKCRhKld0KSxTcigpLE5yKERhLCEwKSxFcigkYSpobikscGEoKSxTaShNdCE9PTB8fHV0IT09MCksTnIoRGEsITEpLHlzKERhKSx4LnRyYW5zbGF0ZSgtUnMsLXlvKX12ZSYmeC50cmFuc2xhdGUoLVoueCwtWi55KSxmcygpLHZlJiZ4LnRyYW5zbGF0ZShaLngsWi55KSxNcigpLE1pKCkscHIoKSxTcigpLE5yKGNlLCEwKSxFcigpLHBhKCksU2koTXQhPT0wfHx1dCE9PTApLE5yKGNlLCExKSx5cygpLHZlJiZ4LnRyYW5zbGF0ZSgtWi54LC1aLnkpLEZzKCksZ2koKSxrJiZ4LnRyYW5zbGF0ZShFZS54MSxFZS55MSl9fTt2YXIgcUk9ZnVuY3Rpb24obSl7aWYoIVsib3ZlcmxheSIsInVuZGVybGF5Il0uaW5jbHVkZXMobSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0YXRlIik7cmV0dXJuIGZ1bmN0aW9uKGssUyxNLE8sTil7dmFyICQ9dGhpcztpZihTLnZpc2libGUoKSl7dmFyIEg9Uy5wc3R5bGUoIiIuY29uY2F0KG0sIi1wYWRkaW5nIikpLnBmVmFsdWUscT1TLnBzdHlsZSgiIi5jb25jYXQobSwiLW9wYWNpdHkiKSkudmFsdWUsWT1TLnBzdHlsZSgiIi5jb25jYXQobSwiLWNvbG9yIikpLnZhbHVlLFo9Uy5wc3R5bGUoIiIuY29uY2F0KG0sIi1zaGFwZSIpKS52YWx1ZTtpZihxPjApe2lmKE09TXx8Uy5wb3NpdGlvbigpLE89PW51bGx8fE49PW51bGwpe3ZhciBjZT1TLnBhZGRpbmcoKTtPPVMud2lkdGgoKSsyKmNlLE49Uy5oZWlnaHQoKSsyKmNlfSQuY29sb3JGaWxsU3R5bGUoayxZWzBdLFlbMV0sWVsyXSxxKSwkLm5vZGVTaGFwZXNbWl0uZHJhdyhrLE0ueCxNLnksTytIKjIsTitIKjIpLGsuZmlsbCgpfX19fTt3OC5kcmF3Tm9kZU92ZXJsYXk9cUkoIm92ZXJsYXkiKSx3OC5kcmF3Tm9kZVVuZGVybGF5PXFJKCJ1bmRlcmxheSIpLHc4Lmhhc1BpZT1mdW5jdGlvbih4KXtyZXR1cm4geD14WzBdLHguX3ByaXZhdGUuaGFzUGllfSx3OC5kcmF3UGllPWZ1bmN0aW9uKHgsbSxrLFMpe209bVswXSxTPVN8fG0ucG9zaXRpb24oKTt2YXIgTT1tLmN5KCkuc3R5bGUoKSxPPW0ucHN0eWxlKCJwaWUtc2l6ZSIpLE49Uy54LCQ9Uy55LEg9bS53aWR0aCgpLHE9bS5oZWlnaHQoKSxZPU1hdGgubWluKEgscSkvMixaPTAsY2U9dGhpcy51c2VQYXRocygpO2NlJiYoTj0wLCQ9MCksTy51bml0cz09PSIlIj9ZPVkqTy5wZlZhbHVlOk8ucGZWYWx1ZSE9PXZvaWQgMCYmKFk9Ty5wZlZhbHVlLzIpO2Zvcih2YXIgdmU9MTt2ZTw9TS5waWVCYWNrZ3JvdW5kTjt2ZSsrKXt2YXIgbWU9bS5wc3R5bGUoInBpZS0iK3ZlKyItYmFja2dyb3VuZC1zaXplIikudmFsdWUsTGU9bS5wc3R5bGUoInBpZS0iK3ZlKyItYmFja2dyb3VuZC1jb2xvciIpLnZhbHVlLF9lPW0ucHN0eWxlKCJwaWUtIit2ZSsiLWJhY2tncm91bmQtb3BhY2l0eSIpLnZhbHVlKmssRWU9bWUvMTAwO0VlK1o+MSYmKEVlPTEtWik7dmFyIEJlPTEuNSpNYXRoLlBJKzIqTWF0aC5QSSpaLFJlPTIqTWF0aC5QSSpFZSxWZT1CZStSZTttZT09PTB8fFo+PTF8fForRWU+MXx8KHguYmVnaW5QYXRoKCkseC5tb3ZlVG8oTiwkKSx4LmFyYyhOLCQsWSxCZSxWZSkseC5jbG9zZVBhdGgoKSx0aGlzLmNvbG9yRmlsbFN0eWxlKHgsTGVbMF0sTGVbMV0sTGVbMl0sX2UpLHguZmlsbCgpLForPUVlKX19O3ZhciBxZz17fSx4aWU9MTAwO3FnLmdldFBpeGVsUmF0aW89ZnVuY3Rpb24oKXt2YXIgeD10aGlzLmRhdGEuY29udGV4dHNbMF07aWYodGhpcy5mb3JjZWRQaXhlbFJhdGlvIT1udWxsKXJldHVybiB0aGlzLmZvcmNlZFBpeGVsUmF0aW87dmFyIG09eC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx4LndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHgubW96QmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8eC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHgub0JhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHguYmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8MTtyZXR1cm4od2luZG93LmRldmljZVBpeGVsUmF0aW98fDEpL219LHFnLnBhaW50Q2FjaGU9ZnVuY3Rpb24oeCl7Zm9yKHZhciBtPXRoaXMucGFpbnRDYWNoZXM9dGhpcy5wYWludENhY2hlc3x8W10saz0hMCxTLE09MDtNPG0ubGVuZ3RoO00rKylpZihTPW1bTV0sUy5jb250ZXh0PT09eCl7az0hMTticmVha31yZXR1cm4gayYmKFM9e2NvbnRleHQ6eH0sbS5wdXNoKFMpKSxTfSxxZy5jcmVhdGVHcmFkaWVudFN0eWxlRm9yPWZ1bmN0aW9uKHgsbSxrLFMsTSl7dmFyIE8sTj10aGlzLnVzZVBhdGhzKCksJD1rLnBzdHlsZShtKyItZ3JhZGllbnQtc3RvcC1jb2xvcnMiKS52YWx1ZSxIPWsucHN0eWxlKG0rIi1ncmFkaWVudC1zdG9wLXBvc2l0aW9ucyIpLnBmVmFsdWU7aWYoUz09PSJyYWRpYWwtZ3JhZGllbnQiKWlmKGsuaXNFZGdlKCkpe3ZhciBxPWsuc291cmNlRW5kcG9pbnQoKSxZPWsudGFyZ2V0RW5kcG9pbnQoKSxaPWsubWlkcG9pbnQoKSxjZT1oNShxLFopLHZlPWg1KFksWik7Tz14LmNyZWF0ZVJhZGlhbEdyYWRpZW50KFoueCxaLnksMCxaLngsWi55LE1hdGgubWF4KGNlLHZlKSl9ZWxzZXt2YXIgbWU9Tj97eDowLHk6MH06ay5wb3NpdGlvbigpLExlPWsucGFkZGVkV2lkdGgoKSxfZT1rLnBhZGRlZEhlaWdodCgpO089eC5jcmVhdGVSYWRpYWxHcmFkaWVudChtZS54LG1lLnksMCxtZS54LG1lLnksTWF0aC5tYXgoTGUsX2UpKX1lbHNlIGlmKGsuaXNFZGdlKCkpe3ZhciBFZT1rLnNvdXJjZUVuZHBvaW50KCksQmU9ay50YXJnZXRFbmRwb2ludCgpO089eC5jcmVhdGVMaW5lYXJHcmFkaWVudChFZS54LEVlLnksQmUueCxCZS55KX1lbHNle3ZhciBSZT1OP3t4OjAseTowfTprLnBvc2l0aW9uKCksVmU9ay5wYWRkZWRXaWR0aCgpLGN0PWsucGFkZGVkSGVpZ2h0KCksc3Q9VmUvMixZZT1jdC8yLG10PWsucHN0eWxlKCJiYWNrZ3JvdW5kLWdyYWRpZW50LWRpcmVjdGlvbiIpLnZhbHVlO3N3aXRjaChtdCl7Y2FzZSJ0by1ib3R0b20iOk89eC5jcmVhdGVMaW5lYXJHcmFkaWVudChSZS54LFJlLnktWWUsUmUueCxSZS55K1llKTticmVhaztjYXNlInRvLXRvcCI6Tz14LmNyZWF0ZUxpbmVhckdyYWRpZW50KFJlLngsUmUueStZZSxSZS54LFJlLnktWWUpO2JyZWFrO2Nhc2UidG8tbGVmdCI6Tz14LmNyZWF0ZUxpbmVhckdyYWRpZW50KFJlLngrc3QsUmUueSxSZS54LXN0LFJlLnkpO2JyZWFrO2Nhc2UidG8tcmlnaHQiOk89eC5jcmVhdGVMaW5lYXJHcmFkaWVudChSZS54LXN0LFJlLnksUmUueCtzdCxSZS55KTticmVhaztjYXNlInRvLWJvdHRvbS1yaWdodCI6Y2FzZSJ0by1yaWdodC1ib3R0b20iOk89eC5jcmVhdGVMaW5lYXJHcmFkaWVudChSZS54LXN0LFJlLnktWWUsUmUueCtzdCxSZS55K1llKTticmVhaztjYXNlInRvLXRvcC1yaWdodCI6Y2FzZSJ0by1yaWdodC10b3AiOk89eC5jcmVhdGVMaW5lYXJHcmFkaWVudChSZS54LXN0LFJlLnkrWWUsUmUueCtzdCxSZS55LVllKTticmVhaztjYXNlInRvLWJvdHRvbS1sZWZ0IjpjYXNlInRvLWxlZnQtYm90dG9tIjpPPXguY3JlYXRlTGluZWFyR3JhZGllbnQoUmUueCtzdCxSZS55LVllLFJlLngtc3QsUmUueStZZSk7YnJlYWs7Y2FzZSJ0by10b3AtbGVmdCI6Y2FzZSJ0by1sZWZ0LXRvcCI6Tz14LmNyZWF0ZUxpbmVhckdyYWRpZW50KFJlLngrc3QsUmUueStZZSxSZS54LXN0LFJlLnktWWUpO2JyZWFrfX1pZighTylyZXR1cm4gbnVsbDtmb3IodmFyIEplPUgubGVuZ3RoPT09JC5sZW5ndGgsTHQ9JC5sZW5ndGgsTXQ9MDtNdDxMdDtNdCsrKU8uYWRkQ29sb3JTdG9wKEplP0hbTXRdOk10LyhMdC0xKSwicmdiYSgiKyRbTXRdWzBdKyIsIiskW010XVsxXSsiLCIrJFtNdF1bMl0rIiwiK00rIikiKTtyZXR1cm4gT30scWcuZ3JhZGllbnRGaWxsU3R5bGU9ZnVuY3Rpb24oeCxtLGssUyl7dmFyIE09dGhpcy5jcmVhdGVHcmFkaWVudFN0eWxlRm9yKHgsImJhY2tncm91bmQiLG0sayxTKTtpZighTSlyZXR1cm4gbnVsbDt4LmZpbGxTdHlsZT1NfSxxZy5jb2xvckZpbGxTdHlsZT1mdW5jdGlvbih4LG0sayxTLE0pe3guZmlsbFN0eWxlPSJyZ2JhKCIrbSsiLCIraysiLCIrUysiLCIrTSsiKSJ9LHFnLmVsZUZpbGxTdHlsZT1mdW5jdGlvbih4LG0sayl7dmFyIFM9bS5wc3R5bGUoImJhY2tncm91bmQtZmlsbCIpLnZhbHVlO2lmKFM9PT0ibGluZWFyLWdyYWRpZW50Inx8Uz09PSJyYWRpYWwtZ3JhZGllbnQiKXRoaXMuZ3JhZGllbnRGaWxsU3R5bGUoeCxtLFMsayk7ZWxzZXt2YXIgTT1tLnBzdHlsZSgiYmFja2dyb3VuZC1jb2xvciIpLnZhbHVlO3RoaXMuY29sb3JGaWxsU3R5bGUoeCxNWzBdLE1bMV0sTVsyXSxrKX19LHFnLmdyYWRpZW50U3Ryb2tlU3R5bGU9ZnVuY3Rpb24oeCxtLGssUyl7dmFyIE09dGhpcy5jcmVhdGVHcmFkaWVudFN0eWxlRm9yKHgsImxpbmUiLG0sayxTKTtpZighTSlyZXR1cm4gbnVsbDt4LnN0cm9rZVN0eWxlPU19LHFnLmNvbG9yU3Ryb2tlU3R5bGU9ZnVuY3Rpb24oeCxtLGssUyxNKXt4LnN0cm9rZVN0eWxlPSJyZ2JhKCIrbSsiLCIraysiLCIrUysiLCIrTSsiKSJ9LHFnLmVsZVN0cm9rZVN0eWxlPWZ1bmN0aW9uKHgsbSxrKXt2YXIgUz1tLnBzdHlsZSgibGluZS1maWxsIikudmFsdWU7aWYoUz09PSJsaW5lYXItZ3JhZGllbnQifHxTPT09InJhZGlhbC1ncmFkaWVudCIpdGhpcy5ncmFkaWVudFN0cm9rZVN0eWxlKHgsbSxTLGspO2Vsc2V7dmFyIE09bS5wc3R5bGUoImxpbmUtY29sb3IiKS52YWx1ZTt0aGlzLmNvbG9yU3Ryb2tlU3R5bGUoeCxNWzBdLE1bMV0sTVsyXSxrKX19LHFnLm1hdGNoQ2FudmFzU2l6ZT1mdW5jdGlvbih4KXt2YXIgbT10aGlzLGs9bS5kYXRhLFM9bS5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzKCksTT1TWzJdLE89U1szXSxOPW0uZ2V0UGl4ZWxSYXRpbygpLCQ9bS5tb3Rpb25CbHVyUHhSYXRpbzsoeD09PW0uZGF0YS5idWZmZXJDYW52YXNlc1ttLk1PVElPTkJMVVJfQlVGRkVSX05PREVdfHx4PT09bS5kYXRhLmJ1ZmZlckNhbnZhc2VzW20uTU9USU9OQkxVUl9CVUZGRVJfRFJBR10pJiYoTj0kKTt2YXIgSD1NKk4scT1PKk4sWTtpZighKEg9PT1tLmNhbnZhc1dpZHRoJiZxPT09bS5jYW52YXNIZWlnaHQpKXttLmZvbnRDYWNoZXM9bnVsbDt2YXIgWj1rLmNhbnZhc0NvbnRhaW5lcjtaLnN0eWxlLndpZHRoPU0rInB4IixaLnN0eWxlLmhlaWdodD1PKyJweCI7Zm9yKHZhciBjZT0wO2NlPG0uQ0FOVkFTX0xBWUVSUztjZSsrKVk9ay5jYW52YXNlc1tjZV0sWS53aWR0aD1ILFkuaGVpZ2h0PXEsWS5zdHlsZS53aWR0aD1NKyJweCIsWS5zdHlsZS5oZWlnaHQ9TysicHgiO2Zvcih2YXIgY2U9MDtjZTxtLkJVRkZFUl9DT1VOVDtjZSsrKVk9ay5idWZmZXJDYW52YXNlc1tjZV0sWS53aWR0aD1ILFkuaGVpZ2h0PXEsWS5zdHlsZS53aWR0aD1NKyJweCIsWS5zdHlsZS5oZWlnaHQ9TysicHgiO20udGV4dHVyZU11bHQ9MSxOPD0xJiYoWT1rLmJ1ZmZlckNhbnZhc2VzW20uVEVYVFVSRV9CVUZGRVJdLG0udGV4dHVyZU11bHQ9MixZLndpZHRoPUgqbS50ZXh0dXJlTXVsdCxZLmhlaWdodD1xKm0udGV4dHVyZU11bHQpLG0uY2FudmFzV2lkdGg9SCxtLmNhbnZhc0hlaWdodD1xfX0scWcucmVuZGVyVG89ZnVuY3Rpb24oeCxtLGssUyl7dGhpcy5yZW5kZXIoe2ZvcmNlZENvbnRleHQ6eCxmb3JjZWRab29tOm0sZm9yY2VkUGFuOmssZHJhd0FsbExheWVyczohMCxmb3JjZWRQeFJhdGlvOlN9KX0scWcucmVuZGVyPWZ1bmN0aW9uKHgpe3g9eHx8Y2ooKTt2YXIgbT14LmZvcmNlZENvbnRleHQsaz14LmRyYXdBbGxMYXllcnMsUz14LmRyYXdPbmx5Tm9kZUxheWVyLE09eC5mb3JjZWRab29tLE89eC5mb3JjZWRQYW4sTj10aGlzLCQ9eC5mb3JjZWRQeFJhdGlvPT09dm9pZCAwP3RoaXMuZ2V0UGl4ZWxSYXRpbygpOnguZm9yY2VkUHhSYXRpbyxIPU4uY3kscT1OLmRhdGEsWT1xLmNhbnZhc05lZWRzUmVkcmF3LFo9Ti50ZXh0dXJlT25WaWV3cG9ydCYmIW0mJihOLnBpbmNoaW5nfHxOLmhvdmVyRGF0YS5kcmFnZ2luZ3x8Ti5zd2lwZVBhbm5pbmd8fE4uZGF0YS53aGVlbFpvb21pbmcpLGNlPXgubW90aW9uQmx1ciE9PXZvaWQgMD94Lm1vdGlvbkJsdXI6Ti5tb3Rpb25CbHVyLHZlPU4ubW90aW9uQmx1clB4UmF0aW8sbWU9SC5oYXNDb21wb3VuZE5vZGVzKCksTGU9Ti5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzLF9lPSEhKE4uaG92ZXJEYXRhLnNlbGVjdGluZ3x8Ti50b3VjaERhdGEuc2VsZWN0aW5nKTtjZT1jZSYmIW0mJk4ubW90aW9uQmx1ckVuYWJsZWQmJiFfZTt2YXIgRWU9Y2U7bXx8KE4ucHJldlB4UmF0aW8hPT0kJiYoTi5pbnZhbGlkYXRlQ29udGFpbmVyQ2xpZW50Q29vcmRzQ2FjaGUoKSxOLm1hdGNoQ2FudmFzU2l6ZShOLmNvbnRhaW5lciksTi5yZWRyYXdIaW50KCJlbGVzIiwhMCksTi5yZWRyYXdIaW50KCJkcmFnIiwhMCkpLE4ucHJldlB4UmF0aW89JCksIW0mJk4ubW90aW9uQmx1clRpbWVvdXQmJmNsZWFyVGltZW91dChOLm1vdGlvbkJsdXJUaW1lb3V0KSxjZSYmKE4ubWJGcmFtZXM9PW51bGwmJihOLm1iRnJhbWVzPTApLE4ubWJGcmFtZXMrKyxOLm1iRnJhbWVzPDMmJihFZT0hMSksTi5tYkZyYW1lcz5OLm1pbk1iTG93UXVhbEZyYW1lcyYmKE4ubW90aW9uQmx1clB4UmF0aW89Ti5tYlB4UkJsdXJyeSkpLE4uY2xlYXJpbmdNb3Rpb25CbHVyJiYoTi5tb3Rpb25CbHVyUHhSYXRpbz0xKSxOLnRleHR1cmVEcmF3TGFzdEZyYW1lJiYhWiYmKFlbTi5OT0RFXT0hMCxZW04uU0VMRUNUX0JPWF09ITApO3ZhciBCZT1ILnN0eWxlKCksUmU9SC56b29tKCksVmU9TSE9PXZvaWQgMD9NOlJlLGN0PUgucGFuKCksc3Q9e3g6Y3QueCx5OmN0Lnl9LFllPXt6b29tOlJlLHBhbjp7eDpjdC54LHk6Y3QueX19LG10PU4ucHJldlZpZXdwb3J0LEplPW10PT09dm9pZCAwfHxZZS56b29tIT09bXQuem9vbXx8WWUucGFuLnghPT1tdC5wYW4ueHx8WWUucGFuLnkhPT1tdC5wYW4ueTshSmUmJiEoTGUmJiFtZSkmJihOLm1vdGlvbkJsdXJQeFJhdGlvPTEpLE8mJihzdD1PKSxWZSo9JCxzdC54Kj0kLHN0LnkqPSQ7dmFyIEx0PU4uZ2V0Q2FjaGVkWlNvcnRlZEVsZXMoKTtmdW5jdGlvbiBNdChNaSxnaSxmcyxGcyx4cyl7dmFyIFJzPU1pLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbjtNaS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW91dCIsTi5jb2xvckZpbGxTdHlsZShNaSwyNTUsMjU1LDI1NSxOLm1vdGlvbkJsdXJUcmFuc3BhcmVuY3kpLE1pLmZpbGxSZWN0KGdpLGZzLEZzLHhzKSxNaS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249UnN9ZnVuY3Rpb24gdXQoTWksZ2kpe3ZhciBmcyxGcyx4cyxSczshTi5jbGVhcmluZ01vdGlvbkJsdXImJihNaT09PXEuYnVmZmVyQ29udGV4dHNbTi5NT1RJT05CTFVSX0JVRkZFUl9OT0RFXXx8TWk9PT1xLmJ1ZmZlckNvbnRleHRzW04uTU9USU9OQkxVUl9CVUZGRVJfRFJBR10pPyhmcz17eDpjdC54KnZlLHk6Y3QueSp2ZX0sRnM9UmUqdmUseHM9Ti5jYW52YXNXaWR0aCp2ZSxScz1OLmNhbnZhc0hlaWdodCp2ZSk6KGZzPXN0LEZzPVZlLHhzPU4uY2FudmFzV2lkdGgsUnM9Ti5jYW52YXNIZWlnaHQpLE1pLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksZ2k9PT0ibW90aW9uQmx1ciI/TXQoTWksMCwwLHhzLFJzKTohbSYmKGdpPT09dm9pZCAwfHxnaSkmJk1pLmNsZWFyUmVjdCgwLDAseHMsUnMpLGt8fChNaS50cmFuc2xhdGUoZnMueCxmcy55KSxNaS5zY2FsZShGcyxGcykpLE8mJk1pLnRyYW5zbGF0ZShPLngsTy55KSxNJiZNaS5zY2FsZShNLE0pfWlmKFp8fChOLnRleHR1cmVEcmF3TGFzdEZyYW1lPSExKSxaKXtpZihOLnRleHR1cmVEcmF3TGFzdEZyYW1lPSEwLCFOLnRleHR1cmVDYWNoZSl7Ti50ZXh0dXJlQ2FjaGU9e30sTi50ZXh0dXJlQ2FjaGUuYmI9SC5tdXRhYmxlRWxlbWVudHMoKS5ib3VuZGluZ0JveCgpLE4udGV4dHVyZUNhY2hlLnRleHR1cmU9Ti5kYXRhLmJ1ZmZlckNhbnZhc2VzW04uVEVYVFVSRV9CVUZGRVJdO3ZhciBXdD1OLmRhdGEuYnVmZmVyQ29udGV4dHNbTi5URVhUVVJFX0JVRkZFUl07V3Quc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxXdC5jbGVhclJlY3QoMCwwLE4uY2FudmFzV2lkdGgqTi50ZXh0dXJlTXVsdCxOLmNhbnZhc0hlaWdodCpOLnRleHR1cmVNdWx0KSxOLnJlbmRlcih7Zm9yY2VkQ29udGV4dDpXdCxkcmF3T25seU5vZGVMYXllcjohMCxmb3JjZWRQeFJhdGlvOiQqTi50ZXh0dXJlTXVsdH0pO3ZhciBZZT1OLnRleHR1cmVDYWNoZS52aWV3cG9ydD17em9vbTpILnpvb20oKSxwYW46SC5wYW4oKSx3aWR0aDpOLmNhbnZhc1dpZHRoLGhlaWdodDpOLmNhbnZhc0hlaWdodH07WWUubXBhbj17eDooMC1ZZS5wYW4ueCkvWWUuem9vbSx5OigwLVllLnBhbi55KS9ZZS56b29tfX1ZW04uRFJBR109ITEsWVtOLk5PREVdPSExO3ZhciBUdD1xLmNvbnRleHRzW04uTk9ERV0sX249Ti50ZXh0dXJlQ2FjaGUudGV4dHVyZSxZZT1OLnRleHR1cmVDYWNoZS52aWV3cG9ydDtUdC5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLGNlP010KFR0LDAsMCxZZS53aWR0aCxZZS5oZWlnaHQpOlR0LmNsZWFyUmVjdCgwLDAsWWUud2lkdGgsWWUuaGVpZ2h0KTt2YXIgaG49QmUuY29yZSgib3V0c2lkZS10ZXh0dXJlLWJnLWNvbG9yIikudmFsdWUsWXQ9QmUuY29yZSgib3V0c2lkZS10ZXh0dXJlLWJnLW9wYWNpdHkiKS52YWx1ZTtOLmNvbG9yRmlsbFN0eWxlKFR0LGhuWzBdLGhuWzFdLGhuWzJdLFl0KSxUdC5maWxsUmVjdCgwLDAsWWUud2lkdGgsWWUuaGVpZ2h0KTt2YXIgUmU9SC56b29tKCk7dXQoVHQsITEpLFR0LmNsZWFyUmVjdChZZS5tcGFuLngsWWUubXBhbi55LFllLndpZHRoL1llLnpvb20vJCxZZS5oZWlnaHQvWWUuem9vbS8kKSxUdC5kcmF3SW1hZ2UoX24sWWUubXBhbi54LFllLm1wYW4ueSxZZS53aWR0aC9ZZS56b29tLyQsWWUuaGVpZ2h0L1llLnpvb20vJCl9ZWxzZSBOLnRleHR1cmVPblZpZXdwb3J0JiYhbSYmKE4udGV4dHVyZUNhY2hlPW51bGwpO3ZhciBEbj1ILmV4dGVudCgpLGlyPU4ucGluY2hpbmd8fE4uaG92ZXJEYXRhLmRyYWdnaW5nfHxOLnN3aXBlUGFubmluZ3x8Ti5kYXRhLndoZWVsWm9vbWluZ3x8Ti5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzfHxOLmN5LmFuaW1hdGVkKCksdnI9Ti5oaWRlRWRnZXNPblZpZXdwb3J0JiZpcixObj1bXTtpZihObltOLk5PREVdPSFZW04uTk9ERV0mJmNlJiYhTi5jbGVhcmVkRm9yTW90aW9uQmx1cltOLk5PREVdfHxOLmNsZWFyaW5nTW90aW9uQmx1cixObltOLk5PREVdJiYoTi5jbGVhcmVkRm9yTW90aW9uQmx1cltOLk5PREVdPSEwKSxObltOLkRSQUddPSFZW04uRFJBR10mJmNlJiYhTi5jbGVhcmVkRm9yTW90aW9uQmx1cltOLkRSQUddfHxOLmNsZWFyaW5nTW90aW9uQmx1cixObltOLkRSQUddJiYoTi5jbGVhcmVkRm9yTW90aW9uQmx1cltOLkRSQUddPSEwKSxZW04uTk9ERV18fGt8fFN8fE5uW04uTk9ERV0pe3ZhciBwcj1jZSYmIU5uW04uTk9ERV0mJnZlIT09MSxUdD1tfHwocHI/Ti5kYXRhLmJ1ZmZlckNvbnRleHRzW04uTU9USU9OQkxVUl9CVUZGRVJfTk9ERV06cS5jb250ZXh0c1tOLk5PREVdKSxFcj1jZSYmIXByPyJtb3Rpb25CbHVyIjp2b2lkIDA7dXQoVHQsRXIpLHZyP04uZHJhd0NhY2hlZE5vZGVzKFR0LEx0Lm5vbmRyYWcsJCxEbik6Ti5kcmF3TGF5ZXJlZEVsZW1lbnRzKFR0LEx0Lm5vbmRyYWcsJCxEbiksTi5kZWJ1ZyYmTi5kcmF3RGVidWdQb2ludHMoVHQsTHQubm9uZHJhZyksIWsmJiFjZSYmKFlbTi5OT0RFXT0hMSl9aWYoIVMmJihZW04uRFJBR118fGt8fE5uW04uRFJBR10pKXt2YXIgcHI9Y2UmJiFObltOLkRSQUddJiZ2ZSE9PTEsVHQ9bXx8KHByP04uZGF0YS5idWZmZXJDb250ZXh0c1tOLk1PVElPTkJMVVJfQlVGRkVSX0RSQUddOnEuY29udGV4dHNbTi5EUkFHXSk7dXQoVHQsY2UmJiFwcj8ibW90aW9uQmx1ciI6dm9pZCAwKSx2cj9OLmRyYXdDYWNoZWROb2RlcyhUdCxMdC5kcmFnLCQsRG4pOk4uZHJhd0NhY2hlZEVsZW1lbnRzKFR0LEx0LmRyYWcsJCxEbiksTi5kZWJ1ZyYmTi5kcmF3RGVidWdQb2ludHMoVHQsTHQuZHJhZyksIWsmJiFjZSYmKFlbTi5EUkFHXT0hMSl9aWYoTi5zaG93RnBzfHwhUyYmWVtOLlNFTEVDVF9CT1hdJiYhayl7dmFyIFR0PW18fHEuY29udGV4dHNbTi5TRUxFQ1RfQk9YXTtpZih1dChUdCksTi5zZWxlY3Rpb25bNF09PTEmJihOLmhvdmVyRGF0YS5zZWxlY3Rpbmd8fE4udG91Y2hEYXRhLnNlbGVjdGluZykpe3ZhciBSZT1OLmN5Lnpvb20oKSxNcj1CZS5jb3JlKCJzZWxlY3Rpb24tYm94LWJvcmRlci13aWR0aCIpLnZhbHVlL1JlO1R0LmxpbmVXaWR0aD1NcixUdC5maWxsU3R5bGU9InJnYmEoIitCZS5jb3JlKCJzZWxlY3Rpb24tYm94LWNvbG9yIikudmFsdWVbMF0rIiwiK0JlLmNvcmUoInNlbGVjdGlvbi1ib3gtY29sb3IiKS52YWx1ZVsxXSsiLCIrQmUuY29yZSgic2VsZWN0aW9uLWJveC1jb2xvciIpLnZhbHVlWzJdKyIsIitCZS5jb3JlKCJzZWxlY3Rpb24tYm94LW9wYWNpdHkiKS52YWx1ZSsiKSIsVHQuZmlsbFJlY3QoTi5zZWxlY3Rpb25bMF0sTi5zZWxlY3Rpb25bMV0sTi5zZWxlY3Rpb25bMl0tTi5zZWxlY3Rpb25bMF0sTi5zZWxlY3Rpb25bM10tTi5zZWxlY3Rpb25bMV0pLE1yPjAmJihUdC5zdHJva2VTdHlsZT0icmdiYSgiK0JlLmNvcmUoInNlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yIikudmFsdWVbMF0rIiwiK0JlLmNvcmUoInNlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yIikudmFsdWVbMV0rIiwiK0JlLmNvcmUoInNlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yIikudmFsdWVbMl0rIiwiK0JlLmNvcmUoInNlbGVjdGlvbi1ib3gtb3BhY2l0eSIpLnZhbHVlKyIpIixUdC5zdHJva2VSZWN0KE4uc2VsZWN0aW9uWzBdLE4uc2VsZWN0aW9uWzFdLE4uc2VsZWN0aW9uWzJdLU4uc2VsZWN0aW9uWzBdLE4uc2VsZWN0aW9uWzNdLU4uc2VsZWN0aW9uWzFdKSl9aWYocS5iZ0FjdGl2ZVBvc2lzdGlvbiYmIU4uaG92ZXJEYXRhLnNlbGVjdGluZyl7dmFyIFJlPU4uY3kuem9vbSgpLENyPXEuYmdBY3RpdmVQb3Npc3Rpb247VHQuZmlsbFN0eWxlPSJyZ2JhKCIrQmUuY29yZSgiYWN0aXZlLWJnLWNvbG9yIikudmFsdWVbMF0rIiwiK0JlLmNvcmUoImFjdGl2ZS1iZy1jb2xvciIpLnZhbHVlWzFdKyIsIitCZS5jb3JlKCJhY3RpdmUtYmctY29sb3IiKS52YWx1ZVsyXSsiLCIrQmUuY29yZSgiYWN0aXZlLWJnLW9wYWNpdHkiKS52YWx1ZSsiKSIsVHQuYmVnaW5QYXRoKCksVHQuYXJjKENyLngsQ3IueSxCZS5jb3JlKCJhY3RpdmUtYmctc2l6ZSIpLnBmVmFsdWUvUmUsMCwyKk1hdGguUEkpLFR0LmZpbGwoKX12YXIgT3I9Ti5sYXN0UmVkcmF3VGltZTtpZihOLnNob3dGcHMmJk9yKXtPcj1NYXRoLnJvdW5kKE9yKTt2YXIgV249TWF0aC5yb3VuZCgxZTMvT3IpO1R0LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksVHQuZmlsbFN0eWxlPSJyZ2JhKDI1NSwgMCwgMCwgMC43NSkiLFR0LnN0cm9rZVN0eWxlPSJyZ2JhKDI1NSwgMCwgMCwgMC43NSkiLFR0LmxpbmVXaWR0aD0xLFR0LmZpbGxUZXh0KCIxIGZyYW1lID0gIitPcisiIG1zID0gIitXbisiIGZwcyIsMCwyMCk7dmFyIGJyPTYwO1R0LnN0cm9rZVJlY3QoMCwzMCwyNTAsMjApLFR0LmZpbGxSZWN0KDAsMzAsMjUwKk1hdGgubWluKFduL2JyLDEpLDIwKX1rfHwoWVtOLlNFTEVDVF9CT1hdPSExKX1pZihjZSYmdmUhPT0xKXt2YXIgU3I9cS5jb250ZXh0c1tOLk5PREVdLE5yPU4uZGF0YS5idWZmZXJDYW52YXNlc1tOLk1PVElPTkJMVVJfQlVGRkVSX05PREVdLFNpPXEuY29udGV4dHNbTi5EUkFHXSx5cz1OLmRhdGEuYnVmZmVyQ2FudmFzZXNbTi5NT1RJT05CTFVSX0JVRkZFUl9EUkFHXSxwYT1mdW5jdGlvbihnaSxmcyxGcyl7Z2kuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxGc3x8IUVlP2dpLmNsZWFyUmVjdCgwLDAsTi5jYW52YXNXaWR0aCxOLmNhbnZhc0hlaWdodCk6TXQoZ2ksMCwwLE4uY2FudmFzV2lkdGgsTi5jYW52YXNIZWlnaHQpO3ZhciB4cz12ZTtnaS5kcmF3SW1hZ2UoZnMsMCwwLE4uY2FudmFzV2lkdGgqeHMsTi5jYW52YXNIZWlnaHQqeHMsMCwwLE4uY2FudmFzV2lkdGgsTi5jYW52YXNIZWlnaHQpfTsoWVtOLk5PREVdfHxObltOLk5PREVdKSYmKHBhKFNyLE5yLE5uW04uTk9ERV0pLFlbTi5OT0RFXT0hMSksKFlbTi5EUkFHXXx8Tm5bTi5EUkFHXSkmJihwYShTaSx5cyxObltOLkRSQUddKSxZW04uRFJBR109ITEpfU4ucHJldlZpZXdwb3J0PVllLE4uY2xlYXJpbmdNb3Rpb25CbHVyJiYoTi5jbGVhcmluZ01vdGlvbkJsdXI9ITEsTi5tb3Rpb25CbHVyQ2xlYXJlZD0hMCxOLm1vdGlvbkJsdXI9ITApLGNlJiYoTi5tb3Rpb25CbHVyVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Ti5tb3Rpb25CbHVyVGltZW91dD1udWxsLE4uY2xlYXJlZEZvck1vdGlvbkJsdXJbTi5OT0RFXT0hMSxOLmNsZWFyZWRGb3JNb3Rpb25CbHVyW04uRFJBR109ITEsTi5tb3Rpb25CbHVyPSExLE4uY2xlYXJpbmdNb3Rpb25CbHVyPSFaLE4ubWJGcmFtZXM9MCxZW04uTk9ERV09ITAsWVtOLkRSQUddPSEwLE4ucmVkcmF3KCl9LHhpZSkpLG18fEguZW1pdCgicmVuZGVyIil9O3ZhciBpeT17fTtpeS5kcmF3UG9seWdvblBhdGg9ZnVuY3Rpb24oeCxtLGssUyxNLE8pe3ZhciBOPVMvMiwkPU0vMjt4LmJlZ2luUGF0aCYmeC5iZWdpblBhdGgoKSx4Lm1vdmVUbyhtK04qT1swXSxrKyQqT1sxXSk7Zm9yKHZhciBIPTE7SDxPLmxlbmd0aC8yO0grKyl4LmxpbmVUbyhtK04qT1tIKjJdLGsrJCpPW0gqMisxXSk7eC5jbG9zZVBhdGgoKX0saXkuZHJhd1JvdW5kUG9seWdvblBhdGg9ZnVuY3Rpb24oeCxtLGssUyxNLE8pe3ZhciBOPVMvMiwkPU0vMixIPWNJKFMsTSk7eC5iZWdpblBhdGgmJnguYmVnaW5QYXRoKCk7Zm9yKHZhciBxPTA7cTxPLmxlbmd0aC80O3ErKyl7dmFyIFk9dm9pZCAwLFo9dm9pZCAwO3E9PT0wP1k9Ty5sZW5ndGgtMjpZPXEqNC0yLFo9cSo0KzI7dmFyIGNlPW0rTipPW3EqNF0sdmU9ayskKk9bcSo0KzFdLG1lPS1PW1ldKk9bWl0tT1tZKzFdKk9bWisxXSxMZT1IL01hdGgudGFuKE1hdGguYWNvcyhtZSkvMiksX2U9Y2UtTGUqT1tZXSxFZT12ZS1MZSpPW1krMV0sQmU9Y2UrTGUqT1taXSxSZT12ZStMZSpPW1orMV07cT09PTA/eC5tb3ZlVG8oX2UsRWUpOngubGluZVRvKF9lLEVlKSx4LmFyY1RvKGNlLHZlLEJlLFJlLEgpfXguY2xvc2VQYXRoKCl9LGl5LmRyYXdSb3VuZFJlY3RhbmdsZVBhdGg9ZnVuY3Rpb24oeCxtLGssUyxNKXt2YXIgTz1TLzIsTj1NLzIsJD1XOShTLE0pO3guYmVnaW5QYXRoJiZ4LmJlZ2luUGF0aCgpLHgubW92ZVRvKG0say1OKSx4LmFyY1RvKG0rTyxrLU4sbStPLGssJCkseC5hcmNUbyhtK08saytOLG0saytOLCQpLHguYXJjVG8obS1PLGsrTixtLU8saywkKSx4LmFyY1RvKG0tTyxrLU4sbSxrLU4sJCkseC5saW5lVG8obSxrLU4pLHguY2xvc2VQYXRoKCl9LGl5LmRyYXdCb3R0b21Sb3VuZFJlY3RhbmdsZVBhdGg9ZnVuY3Rpb24oeCxtLGssUyxNKXt2YXIgTz1TLzIsTj1NLzIsJD1XOShTLE0pO3guYmVnaW5QYXRoJiZ4LmJlZ2luUGF0aCgpLHgubW92ZVRvKG0say1OKSx4LmxpbmVUbyhtK08say1OKSx4LmxpbmVUbyhtK08saykseC5hcmNUbyhtK08saytOLG0saytOLCQpLHguYXJjVG8obS1PLGsrTixtLU8saywkKSx4LmxpbmVUbyhtLU8say1OKSx4LmxpbmVUbyhtLGstTikseC5jbG9zZVBhdGgoKX0saXkuZHJhd0N1dFJlY3RhbmdsZVBhdGg9ZnVuY3Rpb24oeCxtLGssUyxNKXt2YXIgTz1TLzIsTj1NLzIsJD12aigpO3guYmVnaW5QYXRoJiZ4LmJlZ2luUGF0aCgpLHgubW92ZVRvKG0tTyskLGstTikseC5saW5lVG8obStPLSQsay1OKSx4LmxpbmVUbyhtK08say1OKyQpLHgubGluZVRvKG0rTyxrK04tJCkseC5saW5lVG8obStPLSQsaytOKSx4LmxpbmVUbyhtLU8rJCxrK04pLHgubGluZVRvKG0tTyxrK04tJCkseC5saW5lVG8obS1PLGstTiskKSx4LmNsb3NlUGF0aCgpfSxpeS5kcmF3QmFycmVsUGF0aD1mdW5jdGlvbih4LG0sayxTLE0pe3ZhciBPPVMvMixOPU0vMiwkPW0tTyxIPW0rTyxxPWstTixZPWsrTixaPXVJKFMsTSksY2U9Wi53aWR0aE9mZnNldCx2ZT1aLmhlaWdodE9mZnNldCxtZT1aLmN0cmxQdE9mZnNldFBjdCpjZTt4LmJlZ2luUGF0aCYmeC5iZWdpblBhdGgoKSx4Lm1vdmVUbygkLHErdmUpLHgubGluZVRvKCQsWS12ZSkseC5xdWFkcmF0aWNDdXJ2ZVRvKCQrbWUsWSwkK2NlLFkpLHgubGluZVRvKEgtY2UsWSkseC5xdWFkcmF0aWNDdXJ2ZVRvKEgtbWUsWSxILFktdmUpLHgubGluZVRvKEgscSt2ZSkseC5xdWFkcmF0aWNDdXJ2ZVRvKEgtbWUscSxILWNlLHEpLHgubGluZVRvKCQrY2UscSkseC5xdWFkcmF0aWNDdXJ2ZVRvKCQrbWUscSwkLHErdmUpLHguY2xvc2VQYXRoKCl9O2Zvcih2YXIgeXo9TWF0aC5zaW4oMCkseHo9TWF0aC5jb3MoMCksSEk9e30sVkk9e30sa3o9TWF0aC5QSS80MCx5OD0wKk1hdGguUEk7eTg8MipNYXRoLlBJO3k4Kz1reilISVt5OF09TWF0aC5zaW4oeTgpLFZJW3k4XT1NYXRoLmNvcyh5OCk7aXkuZHJhd0VsbGlwc2VQYXRoPWZ1bmN0aW9uKHgsbSxrLFMsTSl7aWYoeC5iZWdpblBhdGgmJnguYmVnaW5QYXRoKCkseC5lbGxpcHNlKXguZWxsaXBzZShtLGssUy8yLE0vMiwwLDAsMipNYXRoLlBJKTtlbHNlIGZvcih2YXIgTyxOLCQ9Uy8yLEg9TS8yLHE9MCpNYXRoLlBJO3E8MipNYXRoLlBJO3ErPWt6KU89bS0kKkhJW3FdKnl6KyQqVklbcV0qeHosTj1rK0gqVklbcV0qeXorSCpISVtxXSp4eixxPT09MD94Lm1vdmVUbyhPLE4pOngubGluZVRvKE8sTik7eC5jbG9zZVBhdGgoKX07dmFyIG1rPXt9O21rLmNyZWF0ZUJ1ZmZlcj1mdW5jdGlvbih4LG0pe3ZhciBrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybiBrLndpZHRoPXgsay5oZWlnaHQ9bSxbayxrLmdldENvbnRleHQoIjJkIildfSxtay5idWZmZXJDYW52YXNJbWFnZT1mdW5jdGlvbih4KXt2YXIgbT10aGlzLmN5LGs9bS5tdXRhYmxlRWxlbWVudHMoKSxTPWsuYm91bmRpbmdCb3goKSxNPXRoaXMuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLE89eC5mdWxsP01hdGguY2VpbChTLncpOk1bMl0sTj14LmZ1bGw/TWF0aC5jZWlsKFMuaCk6TVszXSwkPVgoeC5tYXhXaWR0aCl8fFgoeC5tYXhIZWlnaHQpLEg9dGhpcy5nZXRQaXhlbFJhdGlvKCkscT0xO2lmKHguc2NhbGUhPT12b2lkIDApTyo9eC5zY2FsZSxOKj14LnNjYWxlLHE9eC5zY2FsZTtlbHNlIGlmKCQpe3ZhciBZPTEvMCxaPTEvMDtYKHgubWF4V2lkdGgpJiYoWT1xKngubWF4V2lkdGgvTyksWCh4Lm1heEhlaWdodCkmJihaPXEqeC5tYXhIZWlnaHQvTikscT1NYXRoLm1pbihZLFopLE8qPXEsTio9cX0kfHwoTyo9SCxOKj1ILHEqPUgpO3ZhciBjZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtjZS53aWR0aD1PLGNlLmhlaWdodD1OLGNlLnN0eWxlLndpZHRoPU8rInB4IixjZS5zdHlsZS5oZWlnaHQ9TisicHgiO3ZhciB2ZT1jZS5nZXRDb250ZXh0KCIyZCIpO2lmKE8+MCYmTj4wKXt2ZS5jbGVhclJlY3QoMCwwLE8sTiksdmUuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJzb3VyY2Utb3ZlciI7dmFyIG1lPXRoaXMuZ2V0Q2FjaGVkWlNvcnRlZEVsZXMoKTtpZih4LmZ1bGwpdmUudHJhbnNsYXRlKC1TLngxKnEsLVMueTEqcSksdmUuc2NhbGUocSxxKSx0aGlzLmRyYXdFbGVtZW50cyh2ZSxtZSksdmUuc2NhbGUoMS9xLDEvcSksdmUudHJhbnNsYXRlKFMueDEqcSxTLnkxKnEpO2Vsc2V7dmFyIExlPW0ucGFuKCksX2U9e3g6TGUueCpxLHk6TGUueSpxfTtxKj1tLnpvb20oKSx2ZS50cmFuc2xhdGUoX2UueCxfZS55KSx2ZS5zY2FsZShxLHEpLHRoaXMuZHJhd0VsZW1lbnRzKHZlLG1lKSx2ZS5zY2FsZSgxL3EsMS9xKSx2ZS50cmFuc2xhdGUoLV9lLngsLV9lLnkpfXguYmcmJih2ZS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW92ZXIiLHZlLmZpbGxTdHlsZT14LmJnLHZlLnJlY3QoMCwwLE8sTiksdmUuZmlsbCgpKX1yZXR1cm4gY2V9O2Z1bmN0aW9uIGtpZSh4LG0pe2Zvcih2YXIgaz1hdG9iKHgpLFM9bmV3IEFycmF5QnVmZmVyKGsubGVuZ3RoKSxNPW5ldyBVaW50OEFycmF5KFMpLE89MDtPPGsubGVuZ3RoO08rKylNW09dPWsuY2hhckNvZGVBdChPKTtyZXR1cm4gbmV3IEJsb2IoW1NdLHt0eXBlOm19KX1mdW5jdGlvbiBFeih4KXt2YXIgbT14LmluZGV4T2YoIiwiKTtyZXR1cm4geC5zdWJzdHIobSsxKX1mdW5jdGlvbiBUeih4LG0sayl7dmFyIFM9ZnVuY3Rpb24oKXtyZXR1cm4gbS50b0RhdGFVUkwoayx4LnF1YWxpdHkpfTtzd2l0Y2goeC5vdXRwdXQpe2Nhc2UiYmxvYi1wcm9taXNlIjpyZXR1cm4gbmV3IGk4KGZ1bmN0aW9uKE0sTyl7dHJ5e20udG9CbG9iKGZ1bmN0aW9uKE4pe04hPW51bGw/TShOKTpPKG5ldyBFcnJvcigiYGNhbnZhcy50b0Jsb2IoKWAgc2VudCBhIG51bGwgdmFsdWUgaW4gaXRzIGNhbGxiYWNrIikpfSxrLHgucXVhbGl0eSl9Y2F0Y2goTil7TyhOKX19KTtjYXNlImJsb2IiOnJldHVybiBraWUoRXooUygpKSxrKTtjYXNlImJhc2U2NCI6cmV0dXJuIEV6KFMoKSk7Y2FzZSJiYXNlNjR1cmkiOmRlZmF1bHQ6cmV0dXJuIFMoKX19bWsucG5nPWZ1bmN0aW9uKHgpe3JldHVybiBUeih4LHRoaXMuYnVmZmVyQ2FudmFzSW1hZ2UoeCksImltYWdlL3BuZyIpfSxtay5qcGc9ZnVuY3Rpb24oeCl7cmV0dXJuIFR6KHgsdGhpcy5idWZmZXJDYW52YXNJbWFnZSh4KSwiaW1hZ2UvanBlZyIpfTt2YXIgQ3o9e307Q3oubm9kZVNoYXBlSW1wbD1mdW5jdGlvbih4LG0sayxTLE0sTyxOKXtzd2l0Y2goeCl7Y2FzZSJlbGxpcHNlIjpyZXR1cm4gdGhpcy5kcmF3RWxsaXBzZVBhdGgobSxrLFMsTSxPKTtjYXNlInBvbHlnb24iOnJldHVybiB0aGlzLmRyYXdQb2x5Z29uUGF0aChtLGssUyxNLE8sTik7Y2FzZSJyb3VuZC1wb2x5Z29uIjpyZXR1cm4gdGhpcy5kcmF3Um91bmRQb2x5Z29uUGF0aChtLGssUyxNLE8sTik7Y2FzZSJyb3VuZHJlY3RhbmdsZSI6Y2FzZSJyb3VuZC1yZWN0YW5nbGUiOnJldHVybiB0aGlzLmRyYXdSb3VuZFJlY3RhbmdsZVBhdGgobSxrLFMsTSxPKTtjYXNlImN1dHJlY3RhbmdsZSI6Y2FzZSJjdXQtcmVjdGFuZ2xlIjpyZXR1cm4gdGhpcy5kcmF3Q3V0UmVjdGFuZ2xlUGF0aChtLGssUyxNLE8pO2Nhc2UiYm90dG9tcm91bmRyZWN0YW5nbGUiOmNhc2UiYm90dG9tLXJvdW5kLXJlY3RhbmdsZSI6cmV0dXJuIHRoaXMuZHJhd0JvdHRvbVJvdW5kUmVjdGFuZ2xlUGF0aChtLGssUyxNLE8pO2Nhc2UiYmFycmVsIjpyZXR1cm4gdGhpcy5kcmF3QmFycmVsUGF0aChtLGssUyxNLE8pfX07dmFyIFN6PXZrLGpjPXZrLnByb3RvdHlwZTtqYy5DQU5WQVNfTEFZRVJTPTMsamMuU0VMRUNUX0JPWD0wLGpjLkRSQUc9MSxqYy5OT0RFPTIsamMuQlVGRkVSX0NPVU5UPTMsamMuVEVYVFVSRV9CVUZGRVI9MCxqYy5NT1RJT05CTFVSX0JVRkZFUl9OT0RFPTEsamMuTU9USU9OQkxVUl9CVUZGRVJfRFJBRz0yO2Z1bmN0aW9uIHZrKHgpe3ZhciBtPXRoaXM7bS5kYXRhPXtjYW52YXNlczpuZXcgQXJyYXkoamMuQ0FOVkFTX0xBWUVSUyksY29udGV4dHM6bmV3IEFycmF5KGpjLkNBTlZBU19MQVlFUlMpLGNhbnZhc05lZWRzUmVkcmF3Om5ldyBBcnJheShqYy5DQU5WQVNfTEFZRVJTKSxidWZmZXJDYW52YXNlczpuZXcgQXJyYXkoamMuQlVGRkVSX0NPVU5UKSxidWZmZXJDb250ZXh0czpuZXcgQXJyYXkoamMuQ0FOVkFTX0xBWUVSUyl9O3ZhciBrPSItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLFM9InJnYmEoMCwwLDAsMCkiO20uZGF0YS5jYW52YXNDb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dmFyIE09bS5kYXRhLmNhbnZhc0NvbnRhaW5lci5zdHlsZTttLmRhdGEuY2FudmFzQ29udGFpbmVyLnN0eWxlW2tdPVMsTS5wb3NpdGlvbj0icmVsYXRpdmUiLE0uekluZGV4PSIwIixNLm92ZXJmbG93PSJoaWRkZW4iO3ZhciBPPXguY3kuY29udGFpbmVyKCk7Ty5hcHBlbmRDaGlsZChtLmRhdGEuY2FudmFzQ29udGFpbmVyKSxPLnN0eWxlW2tdPVM7dmFyIE49eyItd2Via2l0LXVzZXItc2VsZWN0Ijoibm9uZSIsIi1tb3otdXNlci1zZWxlY3QiOiItbW96LW5vbmUiLCJ1c2VyLXNlbGVjdCI6Im5vbmUiLCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiOiJyZ2JhKDAsMCwwLDApIiwib3V0bGluZS1zdHlsZSI6Im5vbmUifTtGdCgpJiYoTlsiLW1zLXRvdWNoLWFjdGlvbiJdPSJub25lIixOWyJ0b3VjaC1hY3Rpb24iXT0ibm9uZSIpO2Zvcih2YXIgJD0wOyQ8amMuQ0FOVkFTX0xBWUVSUzskKyspe3ZhciBIPW0uZGF0YS5jYW52YXNlc1skXT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTttLmRhdGEuY29udGV4dHNbJF09SC5nZXRDb250ZXh0KCIyZCIpLE9iamVjdC5rZXlzKE4pLmZvckVhY2goZnVuY3Rpb24oT3Ipe0guc3R5bGVbT3JdPU5bT3JdfSksSC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLEguc2V0QXR0cmlidXRlKCJkYXRhLWlkIiwibGF5ZXIiKyQpLEguc3R5bGUuekluZGV4PVN0cmluZyhqYy5DQU5WQVNfTEFZRVJTLSQpLG0uZGF0YS5jYW52YXNDb250YWluZXIuYXBwZW5kQ2hpbGQoSCksbS5kYXRhLmNhbnZhc05lZWRzUmVkcmF3WyRdPSExfW0uZGF0YS50b3BDYW52YXM9bS5kYXRhLmNhbnZhc2VzWzBdLG0uZGF0YS5jYW52YXNlc1tqYy5OT0RFXS5zZXRBdHRyaWJ1dGUoImRhdGEtaWQiLCJsYXllciIramMuTk9ERSsiLW5vZGUiKSxtLmRhdGEuY2FudmFzZXNbamMuU0VMRUNUX0JPWF0uc2V0QXR0cmlidXRlKCJkYXRhLWlkIiwibGF5ZXIiK2pjLlNFTEVDVF9CT1grIi1zZWxlY3Rib3giKSxtLmRhdGEuY2FudmFzZXNbamMuRFJBR10uc2V0QXR0cmlidXRlKCJkYXRhLWlkIiwibGF5ZXIiK2pjLkRSQUcrIi1kcmFnIik7Zm9yKHZhciAkPTA7JDxqYy5CVUZGRVJfQ09VTlQ7JCsrKW0uZGF0YS5idWZmZXJDYW52YXNlc1skXT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxtLmRhdGEuYnVmZmVyQ29udGV4dHNbJF09bS5kYXRhLmJ1ZmZlckNhbnZhc2VzWyRdLmdldENvbnRleHQoIjJkIiksbS5kYXRhLmJ1ZmZlckNhbnZhc2VzWyRdLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsbS5kYXRhLmJ1ZmZlckNhbnZhc2VzWyRdLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsImJ1ZmZlciIrJCksbS5kYXRhLmJ1ZmZlckNhbnZhc2VzWyRdLnN0eWxlLnpJbmRleD1TdHJpbmcoLSQtMSksbS5kYXRhLmJ1ZmZlckNhbnZhc2VzWyRdLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiI7bS5wYXRoc0VuYWJsZWQ9ITA7dmFyIHE9V2QoKSxZPWZ1bmN0aW9uKFduKXtyZXR1cm57eDooV24ueDErV24ueDIpLzIseTooV24ueTErV24ueTIpLzJ9fSxaPWZ1bmN0aW9uKFduKXtyZXR1cm57eDotV24udy8yLHk6LVduLmgvMn19LGNlPWZ1bmN0aW9uKFduKXt2YXIgYnI9V25bMF0uX3ByaXZhdGUsU3I9YnIub2xkQmFja2dyb3VuZFRpbWVzdGFtcD09PWJyLmJhY2tncm91bmRUaW1lc3RhbXA7cmV0dXJuIVNyfSx2ZT1mdW5jdGlvbihXbil7cmV0dXJuIFduWzBdLl9wcml2YXRlLm5vZGVLZXl9LG1lPWZ1bmN0aW9uKFduKXtyZXR1cm4gV25bMF0uX3ByaXZhdGUubGFiZWxTdHlsZUtleX0sTGU9ZnVuY3Rpb24oV24pe3JldHVybiBXblswXS5fcHJpdmF0ZS5zb3VyY2VMYWJlbFN0eWxlS2V5fSxfZT1mdW5jdGlvbihXbil7cmV0dXJuIFduWzBdLl9wcml2YXRlLnRhcmdldExhYmVsU3R5bGVLZXl9LEVlPWZ1bmN0aW9uKFduLGJyLFNyLE5yLFNpKXtyZXR1cm4gbS5kcmF3RWxlbWVudChXbixicixTciwhMSwhMSxTaSl9LEJlPWZ1bmN0aW9uKFduLGJyLFNyLE5yLFNpKXtyZXR1cm4gbS5kcmF3RWxlbWVudFRleHQoV24sYnIsU3IsTnIsIm1haW4iLFNpKX0sUmU9ZnVuY3Rpb24oV24sYnIsU3IsTnIsU2kpe3JldHVybiBtLmRyYXdFbGVtZW50VGV4dChXbixicixTcixOciwic291cmNlIixTaSl9LFZlPWZ1bmN0aW9uKFduLGJyLFNyLE5yLFNpKXtyZXR1cm4gbS5kcmF3RWxlbWVudFRleHQoV24sYnIsU3IsTnIsInRhcmdldCIsU2kpfSxjdD1mdW5jdGlvbihXbil7cmV0dXJuIFduLmJvdW5kaW5nQm94KCksV25bMF0uX3ByaXZhdGUuYm9keUJvdW5kc30sc3Q9ZnVuY3Rpb24oV24pe3JldHVybiBXbi5ib3VuZGluZ0JveCgpLFduWzBdLl9wcml2YXRlLmxhYmVsQm91bmRzLm1haW58fHF9LFllPWZ1bmN0aW9uKFduKXtyZXR1cm4gV24uYm91bmRpbmdCb3goKSxXblswXS5fcHJpdmF0ZS5sYWJlbEJvdW5kcy5zb3VyY2V8fHF9LG10PWZ1bmN0aW9uKFduKXtyZXR1cm4gV24uYm91bmRpbmdCb3goKSxXblswXS5fcHJpdmF0ZS5sYWJlbEJvdW5kcy50YXJnZXR8fHF9LEplPWZ1bmN0aW9uKFduLGJyKXtyZXR1cm4gYnJ9LEx0PWZ1bmN0aW9uKFduKXtyZXR1cm4gWShjdChXbikpfSxNdD1mdW5jdGlvbihXbixicixTcil7dmFyIE5yPVduP1duKyItIjoiIjtyZXR1cm57eDpici54K1NyLnBzdHlsZShOcisidGV4dC1tYXJnaW4teCIpLnBmVmFsdWUseTpici55K1NyLnBzdHlsZShOcisidGV4dC1tYXJnaW4teSIpLnBmVmFsdWV9fSx1dD1mdW5jdGlvbihXbixicixTcil7dmFyIE5yPVduWzBdLl9wcml2YXRlLnJzY3JhdGNoO3JldHVybnt4Ok5yW2JyXSx5Ok5yW1NyXX19LFd0PWZ1bmN0aW9uKFduKXtyZXR1cm4gTXQoIiIsdXQoV24sImxhYmVsWCIsImxhYmVsWSIpLFduKX0sVHQ9ZnVuY3Rpb24oV24pe3JldHVybiBNdCgic291cmNlIix1dChXbiwic291cmNlTGFiZWxYIiwic291cmNlTGFiZWxZIiksV24pfSxfbj1mdW5jdGlvbihXbil7cmV0dXJuIE10KCJ0YXJnZXQiLHV0KFduLCJ0YXJnZXRMYWJlbFgiLCJ0YXJnZXRMYWJlbFkiKSxXbil9LGhuPWZ1bmN0aW9uKFduKXtyZXR1cm4gWihjdChXbikpfSxZdD1mdW5jdGlvbihXbil7cmV0dXJuIFooWWUoV24pKX0sRG49ZnVuY3Rpb24oV24pe3JldHVybiBaKG10KFduKSl9LGlyPWZ1bmN0aW9uKFduKXt2YXIgYnI9c3QoV24pLFNyPVooc3QoV24pKTtpZihXbi5pc05vZGUoKSl7c3dpdGNoKFduLnBzdHlsZSgidGV4dC1oYWxpZ24iKS52YWx1ZSl7Y2FzZSJsZWZ0IjpTci54PS1ici53O2JyZWFrO2Nhc2UicmlnaHQiOlNyLng9MDticmVha31zd2l0Y2goV24ucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLnZhbHVlKXtjYXNlInRvcCI6U3IueT0tYnIuaDticmVhaztjYXNlImJvdHRvbSI6U3IueT0wO2JyZWFrfX1yZXR1cm4gU3J9LHZyPW0uZGF0YS5lbGVUeHJDYWNoZT1uZXcgZGsobSx7Z2V0S2V5OnZlLGRvZXNFbGVJbnZhbGlkYXRlS2V5OmNlLGRyYXdFbGVtZW50OkVlLGdldEJvdW5kaW5nQm94OmN0LGdldFJvdGF0aW9uUG9pbnQ6THQsZ2V0Um90YXRpb25PZmZzZXQ6aG4sYWxsb3dFZGdlVHhyQ2FjaGluZzohMSxhbGxvd1BhcmVudFR4ckNhY2hpbmc6ITF9KSxObj1tLmRhdGEubGJsVHhyQ2FjaGU9bmV3IGRrKG0se2dldEtleTptZSxkcmF3RWxlbWVudDpCZSxnZXRCb3VuZGluZ0JveDpzdCxnZXRSb3RhdGlvblBvaW50Old0LGdldFJvdGF0aW9uT2Zmc2V0OmlyLGlzVmlzaWJsZTpKZX0pLHByPW0uZGF0YS5zbGJUeHJDYWNoZT1uZXcgZGsobSx7Z2V0S2V5OkxlLGRyYXdFbGVtZW50OlJlLGdldEJvdW5kaW5nQm94OlllLGdldFJvdGF0aW9uUG9pbnQ6VHQsZ2V0Um90YXRpb25PZmZzZXQ6WXQsaXNWaXNpYmxlOkplfSksRXI9bS5kYXRhLnRsYlR4ckNhY2hlPW5ldyBkayhtLHtnZXRLZXk6X2UsZHJhd0VsZW1lbnQ6VmUsZ2V0Qm91bmRpbmdCb3g6bXQsZ2V0Um90YXRpb25Qb2ludDpfbixnZXRSb3RhdGlvbk9mZnNldDpEbixpc1Zpc2libGU6SmV9KSxNcj1tLmRhdGEubHlyVHhyQ2FjaGU9bmV3IGR6KG0pO20ub25VcGRhdGVFbGVDYWxjcyhmdW5jdGlvbihXbixicil7dnIuaW52YWxpZGF0ZUVsZW1lbnRzKGJyKSxObi5pbnZhbGlkYXRlRWxlbWVudHMoYnIpLHByLmludmFsaWRhdGVFbGVtZW50cyhiciksRXIuaW52YWxpZGF0ZUVsZW1lbnRzKGJyKSxNci5pbnZhbGlkYXRlRWxlbWVudHMoYnIpO2Zvcih2YXIgU3I9MDtTcjxici5sZW5ndGg7U3IrKyl7dmFyIE5yPWJyW1NyXS5fcHJpdmF0ZTtOci5vbGRCYWNrZ3JvdW5kVGltZXN0YW1wPU5yLmJhY2tncm91bmRUaW1lc3RhbXB9fSk7dmFyIENyPWZ1bmN0aW9uKFduKXtmb3IodmFyIGJyPTA7YnI8V24ubGVuZ3RoO2JyKyspTXIuZW5xdWV1ZUVsZW1lbnRSZWZpbmVtZW50KFduW2JyXS5lbGUpfTt2ci5vbkRlcXVldWUoQ3IpLE5uLm9uRGVxdWV1ZShDcikscHIub25EZXF1ZXVlKENyKSxFci5vbkRlcXVldWUoQ3IpfWpjLnJlZHJhd0hpbnQ9ZnVuY3Rpb24oeCxtKXt2YXIgaz10aGlzO3N3aXRjaCh4KXtjYXNlImVsZXMiOmsuZGF0YS5jYW52YXNOZWVkc1JlZHJhd1tqYy5OT0RFXT1tO2JyZWFrO2Nhc2UiZHJhZyI6ay5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W2pjLkRSQUddPW07YnJlYWs7Y2FzZSJzZWxlY3QiOmsuZGF0YS5jYW52YXNOZWVkc1JlZHJhd1tqYy5TRUxFQ1RfQk9YXT1tO2JyZWFrfX07dmFyIHdrPXR5cGVvZiBQYXRoMkQ8InUiO2pjLnBhdGgyZEVuYWJsZWQ9ZnVuY3Rpb24oeCl7aWYoeD09PXZvaWQgMClyZXR1cm4gdGhpcy5wYXRoc0VuYWJsZWQ7dGhpcy5wYXRoc0VuYWJsZWQ9ISF4fSxqYy51c2VQYXRocz1mdW5jdGlvbigpe3JldHVybiB3ayYmdGhpcy5wYXRoc0VuYWJsZWR9LGpjLnNldEltZ1Ntb290aGluZz1mdW5jdGlvbih4LG0pe3guaW1hZ2VTbW9vdGhpbmdFbmFibGVkIT1udWxsP3guaW1hZ2VTbW9vdGhpbmdFbmFibGVkPW06KHgud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkPW0seC5tb3pJbWFnZVNtb290aGluZ0VuYWJsZWQ9bSx4Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkPW0pfSxqYy5nZXRJbWdTbW9vdGhpbmc9ZnVuY3Rpb24oeCl7cmV0dXJuIHguaW1hZ2VTbW9vdGhpbmdFbmFibGVkIT1udWxsP3guaW1hZ2VTbW9vdGhpbmdFbmFibGVkOngud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkfHx4Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZHx8eC5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZH0samMubWFrZU9mZnNjcmVlbkNhbnZhcz1mdW5jdGlvbih4LG0pe3ZhciBrO3JldHVybih0eXBlb2YgT2Zmc2NyZWVuQ2FudmFzPiJ1Ij8idW5kZWZpbmVkIjp1KE9mZnNjcmVlbkNhbnZhcykpIT09InVuZGVmaW5lZCI/az1uZXcgT2Zmc2NyZWVuQ2FudmFzKHgsbSk6KGs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksay53aWR0aD14LGsuaGVpZ2h0PW0pLGt9LFtweixRMixKMixiayx5NSx3OCxxZyxpeSxtayxDel0uZm9yRWFjaChmdW5jdGlvbih4KXt5dChqYyx4KX0pO3ZhciAkcD1be25hbWU6Im51bGwiLGltcGw6VyR9LHtuYW1lOiJiYXNlIixpbXBsOmF6fSx7bmFtZToiY2FudmFzIixpbXBsOlN6fV0sRWllPVt7dHlwZToibGF5b3V0IixleHRlbnNpb25zOnFyZX0se3R5cGU6InJlbmRlcmVyIixleHRlbnNpb25zOiRwfV0sVGllPXt9LENpZT17fTtmdW5jdGlvbiBTaWUoeCxtLGspe3ZhciBTPWssTT1mdW5jdGlvbihtdCl7aHUoIkNhbiBub3QgcmVnaXN0ZXIgYCIrbSsiYCBmb3IgYCIreCsiYCBzaW5jZSBgIittdCsiYCBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcHJvdG90eXBlIGFuZCBjYW4gbm90IGJlIG92ZXJyaWRkZW4iKX07aWYoeD09PSJjb3JlIil7aWYobGsucHJvdG90eXBlW21dKXJldHVybiBNKG0pO2xrLnByb3RvdHlwZVttXT1rfWVsc2UgaWYoeD09PSJjb2xsZWN0aW9uIil7aWYoVjAucHJvdG90eXBlW21dKXJldHVybiBNKG0pO1YwLnByb3RvdHlwZVttXT1rfWVsc2UgaWYoeD09PSJsYXlvdXQiKXtmb3IodmFyIE89ZnVuY3Rpb24obXQpe3RoaXMub3B0aW9ucz1tdCxrLmNhbGwodGhpcyxtdCksc2UodGhpcy5fcHJpdmF0ZSl8fCh0aGlzLl9wcml2YXRlPXt9KSx0aGlzLl9wcml2YXRlLmN5PW10LmN5LHRoaXMuX3ByaXZhdGUubGlzdGVuZXJzPVtdLHRoaXMuY3JlYXRlRW1pdHRlcigpfSxOPU8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoay5wcm90b3R5cGUpLCQ9W10sSD0wO0g8JC5sZW5ndGg7SCsrKXt2YXIgcT0kW0hdO05bcV09TltxXXx8ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319Ti5zdGFydCYmIU4ucnVuP04ucnVuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhcnQoKSx0aGlzfTohTi5zdGFydCYmTi5ydW4mJihOLnN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucnVuKCksdGhpc30pO3ZhciBZPWsucHJvdG90eXBlLnN0b3A7Ti5zdG9wPWZ1bmN0aW9uKCl7dmFyIFllPXRoaXMub3B0aW9ucztpZihZZSYmWWUuYW5pbWF0ZSl7dmFyIG10PXRoaXMuYW5pbWF0aW9ucztpZihtdClmb3IodmFyIEplPTA7SmU8bXQubGVuZ3RoO0plKyspbXRbSmVdLnN0b3AoKX1yZXR1cm4gWT9ZLmNhbGwodGhpcyk6dGhpcy5lbWl0KCJsYXlvdXRzdG9wIiksdGhpc30sTi5kZXN0cm95fHwoTi5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxOLmN5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuY3l9O3ZhciBaPWZ1bmN0aW9uKG10KXtyZXR1cm4gbXQuX3ByaXZhdGUuY3l9LGNlPXthZGRFdmVudEZpZWxkczpmdW5jdGlvbihtdCxKZSl7SmUubGF5b3V0PW10LEplLmN5PVoobXQpLEplLnRhcmdldD1tdH0sYnViYmxlOmZ1bmN0aW9uKCl7cmV0dXJuITB9LHBhcmVudDpmdW5jdGlvbihtdCl7cmV0dXJuIFoobXQpfX07eXQoTix7Y3JlYXRlRW1pdHRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmVtaXR0ZXI9bmV3IExTKGNlLHRoaXMpLHRoaXN9LGVtaXR0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbWl0dGVyfSxvbjpmdW5jdGlvbihtdCxKZSl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLm9uKG10LEplKSx0aGlzfSxvbmU6ZnVuY3Rpb24obXQsSmUpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbmUobXQsSmUpLHRoaXN9LG9uY2U6ZnVuY3Rpb24obXQsSmUpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbmUobXQsSmUpLHRoaXN9LHJlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKG10LEplKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkucmVtb3ZlTGlzdGVuZXIobXQsSmUpLHRoaXN9LHJlbW92ZUFsbExpc3RlbmVyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVBbGxMaXN0ZW5lcnMoKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKG10LEplKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkuZW1pdChtdCxKZSksdGhpc319KSxmdS5ldmVudEFsaWFzZXNPbihOKSxTPU99ZWxzZSBpZih4PT09InJlbmRlcmVyIiYmbSE9PSJudWxsIiYmbSE9PSJiYXNlIil7dmFyIHZlPV9pZSgicmVuZGVyZXIiLCJiYXNlIiksbWU9dmUucHJvdG90eXBlLExlPWssX2U9ay5wcm90b3R5cGUsRWU9ZnVuY3Rpb24oKXt2ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksTGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxCZT1FZS5wcm90b3R5cGU7Zm9yKHZhciBSZSBpbiBtZSl7dmFyIFZlPW1lW1JlXSxjdD1fZVtSZV0hPW51bGw7aWYoY3QpcmV0dXJuIE0oUmUpO0JlW1JlXT1WZX1mb3IodmFyIHN0IGluIF9lKUJlW3N0XT1fZVtzdF07bWUuY2xpZW50RnVuY3Rpb25zLmZvckVhY2goZnVuY3Rpb24oWWUpe0JlW1llXT1CZVtZZV18fGZ1bmN0aW9uKCl7Y2goIlJlbmRlcmVyIGRvZXMgbm90IGltcGxlbWVudCBgcmVuZGVyZXIuIitZZSsiKClgIG9uIGl0cyBwcm90b3R5cGUiKX19KSxTPUVlfWVsc2UgaWYoeD09PSJfX3Byb3RvX18ifHx4PT09ImNvbnN0cnVjdG9yInx8eD09PSJwcm90b3R5cGUiKXJldHVybiBjaCh4KyIgaXMgYW4gaWxsZWdhbCB0eXBlIHRvIGJlIHJlZ2lzdGVyZWQsIHBvc3NpYmx5IGxlYWQgdG8gcHJvdG90eXBlIHBvbGx1dGlvbnMiKTtyZXR1cm4gRm4oe21hcDpUaWUsa2V5czpbeCxtXSx2YWx1ZTpTfSl9ZnVuY3Rpb24gX2llKHgsbSl7cmV0dXJuIHFuKHttYXA6VGllLGtleXM6W3gsbV19KX1mdW5jdGlvbiBfeih4LG0sayxTLE0pe3JldHVybiBGbih7bWFwOkNpZSxrZXlzOlt4LG0sayxTXSx2YWx1ZTpNfSl9ZnVuY3Rpb24gYndlKHgsbSxrLFMpe3JldHVybiBxbih7bWFwOkNpZSxrZXlzOlt4LG0sayxTXX0pfXZhciBBej1mdW5jdGlvbigpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0yKXJldHVybiBfaWUuYXBwbHkobnVsbCxhcmd1bWVudHMpO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0zKXJldHVybiBTaWUuYXBwbHkobnVsbCxhcmd1bWVudHMpO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT00KXJldHVybiBid2UuYXBwbHkobnVsbCxhcmd1bWVudHMpO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT01KXJldHVybiBfei5hcHBseShudWxsLGFyZ3VtZW50cyk7Y2goIkludmFsaWQgZXh0ZW5zaW9uIGFjY2VzcyBzeW50YXgiKX07bGsucHJvdG90eXBlLmV4dGVuc2lvbj1BeixFaWUuZm9yRWFjaChmdW5jdGlvbih4KXt4LmV4dGVuc2lvbnMuZm9yRWFjaChmdW5jdGlvbihtKXtTaWUoeC50eXBlLG0ubmFtZSxtLmltcGwpfSl9KTt2YXIgQWllPWZ1bmN0aW9uIHgoKXtpZighKHRoaXMgaW5zdGFuY2VvZiB4KSlyZXR1cm4gbmV3IHg7dGhpcy5sZW5ndGg9MH0seDg9QWllLnByb3RvdHlwZTt4OC5pbnN0YW5jZVN0cmluZz1mdW5jdGlvbigpe3JldHVybiJzdHlsZXNoZWV0In0seDguc2VsZWN0b3I9ZnVuY3Rpb24oeCl7dmFyIG09dGhpcy5sZW5ndGgrKztyZXR1cm4gdGhpc1ttXT17c2VsZWN0b3I6eCxwcm9wZXJ0aWVzOltdfSx0aGlzfSx4OC5jc3M9ZnVuY3Rpb24oeCxtKXt2YXIgaz10aGlzLmxlbmd0aC0xO2lmKGJlKHgpKXRoaXNba10ucHJvcGVydGllcy5wdXNoKHtuYW1lOngsdmFsdWU6bX0pO2Vsc2UgaWYoc2UoeCkpZm9yKHZhciBTPXgsTT1PYmplY3Qua2V5cyhTKSxPPTA7TzxNLmxlbmd0aDtPKyspe3ZhciBOPU1bT10sJD1TW05dO2lmKCQhPW51bGwpe3ZhciBIPVQxLnByb3BlcnRpZXNbTl18fFQxLnByb3BlcnRpZXNbX3QoTildO2lmKEghPW51bGwpe3ZhciBxPUgubmFtZSxZPSQ7dGhpc1trXS5wcm9wZXJ0aWVzLnB1c2goe25hbWU6cSx2YWx1ZTpZfSl9fX1yZXR1cm4gdGhpc30seDguc3R5bGU9eDguY3NzLHg4LmdlbmVyYXRlU3R5bGU9ZnVuY3Rpb24oeCl7dmFyIG09bmV3IFQxKHgpO3JldHVybiB0aGlzLmFwcGVuZFRvU3R5bGUobSl9LHg4LmFwcGVuZFRvU3R5bGU9ZnVuY3Rpb24oeCl7Zm9yKHZhciBtPTA7bTx0aGlzLmxlbmd0aDttKyspe3ZhciBrPXRoaXNbbV0sUz1rLnNlbGVjdG9yLE09ay5wcm9wZXJ0aWVzO3guc2VsZWN0b3IoUyk7Zm9yKHZhciBPPTA7TzxNLmxlbmd0aDtPKyspe3ZhciBOPU1bT107eC5jc3MoTi5uYW1lLE4udmFsdWUpfX1yZXR1cm4geH07dmFyIG13ZT0iMy4yOC4xIixrOD1mdW5jdGlvbihtKXtpZihtPT09dm9pZCAwJiYobT17fSksc2UobSkpcmV0dXJuIG5ldyBsayhtKTtpZihiZShtKSlyZXR1cm4gQXouYXBwbHkoQXosYXJndW1lbnRzKX07cmV0dXJuIGs4LnVzZT1mdW5jdGlvbih4KXt2YXIgbT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIG0udW5zaGlmdChrOCkseC5hcHBseShudWxsLG0pLHRoaXN9LGs4Lndhcm5pbmdzPWZ1bmN0aW9uKHgpe3JldHVybiBvUyh4KX0sazgudmVyc2lvbj1td2Usazguc3R5bGVzaGVldD1rOC5TdHlsZXNoZWV0PUFpZSxrOH0pfSkoaFdlKTt2YXIgaG9uPWhXZS5leHBvcnRzO2NvbnN0IGZXZT1oQyhob24pO3ZhciBkV2U9e2V4cG9ydHM6e319LG53ZT17ZXhwb3J0czp7fX0scndlPXtleHBvcnRzOnt9fSxnV2U7ZnVuY3Rpb24gZm9uKCl7cmV0dXJuIGdXZXx8KGdXZT0xLGZ1bmN0aW9uKGkscyl7KGZ1bmN0aW9uKGQscCl7aS5leHBvcnRzPXAoKX0pKEFnLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHUpe3ZhciBkPXt9O2Z1bmN0aW9uIHAodil7aWYoZFt2XSlyZXR1cm4gZFt2XS5leHBvcnRzO3ZhciBiPWRbdl09e2k6dixsOiExLGV4cG9ydHM6e319O3JldHVybiB1W3ZdLmNhbGwoYi5leHBvcnRzLGIsYi5leHBvcnRzLHApLGIubD0hMCxiLmV4cG9ydHN9cmV0dXJuIHAubT11LHAuYz1kLHAuaT1mdW5jdGlvbih2KXtyZXR1cm4gdn0scC5kPWZ1bmN0aW9uKHYsYix5KXtwLm8odixiKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHYsYix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0Onl9KX0scC5uPWZ1bmN0aW9uKHYpe3ZhciBiPXYmJnYuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiB2LmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIHZ9O3JldHVybiBwLmQoYiwiYSIsYiksYn0scC5vPWZ1bmN0aW9uKHYsYil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2LGIpfSxwLnA9IiIscChwLnM9MjYpfShbZnVuY3Rpb24odSxkLHApe2Z1bmN0aW9uIHYoKXt9di5RVUFMSVRZPTEsdi5ERUZBVUxUX0NSRUFURV9CRU5EU19BU19ORUVERUQ9ITEsdi5ERUZBVUxUX0lOQ1JFTUVOVEFMPSExLHYuREVGQVVMVF9BTklNQVRJT05fT05fTEFZT1VUPSEwLHYuREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVD0hMSx2LkRFRkFVTFRfQU5JTUFUSU9OX1BFUklPRD01MCx2LkRFRkFVTFRfVU5JRk9STV9MRUFGX05PREVfU0laRVM9ITEsdi5ERUZBVUxUX0dSQVBIX01BUkdJTj0xNSx2Lk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz0hMSx2LlNJTVBMRV9OT0RFX1NJWkU9NDAsdi5TSU1QTEVfTk9ERV9IQUxGX1NJWkU9di5TSU1QTEVfTk9ERV9TSVpFLzIsdi5FTVBUWV9DT01QT1VORF9OT0RFX1NJWkU9NDAsdi5NSU5fRURHRV9MRU5HVEg9MSx2LldPUkxEX0JPVU5EQVJZPTFlNix2LklOSVRJQUxfV09STERfQk9VTkRBUlk9di5XT1JMRF9CT1VOREFSWS8xZTMsdi5XT1JMRF9DRU5URVJfWD0xMjAwLHYuV09STERfQ0VOVEVSX1k9OTAwLHUuZXhwb3J0cz12fSxmdW5jdGlvbih1LGQscCl7dmFyIHY9cCgyKSxiPXAoOCkseT1wKDkpO2Z1bmN0aW9uIFQoQSxQLFIpe3YuY2FsbCh0aGlzLFIpLHRoaXMuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0PSExLHRoaXMudkdyYXBoT2JqZWN0PVIsdGhpcy5iZW5kcG9pbnRzPVtdLHRoaXMuc291cmNlPUEsdGhpcy50YXJnZXQ9UH1ULnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHYucHJvdG90eXBlKTtmb3IodmFyIF8gaW4gdilUW19dPXZbX107VC5wcm90b3R5cGUuZ2V0U291cmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc291cmNlfSxULnByb3RvdHlwZS5nZXRUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YXJnZXR9LFQucHJvdG90eXBlLmlzSW50ZXJHcmFwaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW50ZXJHcmFwaH0sVC5wcm90b3R5cGUuZ2V0TGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxULnByb3RvdHlwZS5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXR9LFQucHJvdG90eXBlLmdldEJlbmRwb2ludHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iZW5kcG9pbnRzfSxULnByb3RvdHlwZS5nZXRMY2E9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sY2F9LFQucHJvdG90eXBlLmdldFNvdXJjZUluTGNhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc291cmNlSW5MY2F9LFQucHJvdG90eXBlLmdldFRhcmdldEluTGNhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFyZ2V0SW5MY2F9LFQucHJvdG90eXBlLmdldE90aGVyRW5kPWZ1bmN0aW9uKEEpe2lmKHRoaXMuc291cmNlPT09QSlyZXR1cm4gdGhpcy50YXJnZXQ7aWYodGhpcy50YXJnZXQ9PT1BKXJldHVybiB0aGlzLnNvdXJjZTt0aHJvdyJOb2RlIGlzIG5vdCBpbmNpZGVudCB3aXRoIHRoaXMgZWRnZSJ9LFQucHJvdG90eXBlLmdldE90aGVyRW5kSW5HcmFwaD1mdW5jdGlvbihBLFApe2Zvcih2YXIgUj10aGlzLmdldE90aGVyRW5kKEEpLEY9UC5nZXRHcmFwaE1hbmFnZXIoKS5nZXRSb290KCk7Oyl7aWYoUi5nZXRPd25lcigpPT1QKXJldHVybiBSO2lmKFIuZ2V0T3duZXIoKT09RilicmVhaztSPVIuZ2V0T3duZXIoKS5nZXRQYXJlbnQoKX1yZXR1cm4gbnVsbH0sVC5wcm90b3R5cGUudXBkYXRlTGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIEE9bmV3IEFycmF5KDQpO3RoaXMuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0PWIuZ2V0SW50ZXJzZWN0aW9uKHRoaXMudGFyZ2V0LmdldFJlY3QoKSx0aGlzLnNvdXJjZS5nZXRSZWN0KCksQSksdGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXR8fCh0aGlzLmxlbmd0aFg9QVswXS1BWzJdLHRoaXMubGVuZ3RoWT1BWzFdLUFbM10sTWF0aC5hYnModGhpcy5sZW5ndGhYKTwxJiYodGhpcy5sZW5ndGhYPXkuc2lnbih0aGlzLmxlbmd0aFgpKSxNYXRoLmFicyh0aGlzLmxlbmd0aFkpPDEmJih0aGlzLmxlbmd0aFk9eS5zaWduKHRoaXMubGVuZ3RoWSkpLHRoaXMubGVuZ3RoPU1hdGguc3FydCh0aGlzLmxlbmd0aFgqdGhpcy5sZW5ndGhYK3RoaXMubGVuZ3RoWSp0aGlzLmxlbmd0aFkpKX0sVC5wcm90b3R5cGUudXBkYXRlTGVuZ3RoU2ltcGxlPWZ1bmN0aW9uKCl7dGhpcy5sZW5ndGhYPXRoaXMudGFyZ2V0LmdldENlbnRlclgoKS10aGlzLnNvdXJjZS5nZXRDZW50ZXJYKCksdGhpcy5sZW5ndGhZPXRoaXMudGFyZ2V0LmdldENlbnRlclkoKS10aGlzLnNvdXJjZS5nZXRDZW50ZXJZKCksTWF0aC5hYnModGhpcy5sZW5ndGhYKTwxJiYodGhpcy5sZW5ndGhYPXkuc2lnbih0aGlzLmxlbmd0aFgpKSxNYXRoLmFicyh0aGlzLmxlbmd0aFkpPDEmJih0aGlzLmxlbmd0aFk9eS5zaWduKHRoaXMubGVuZ3RoWSkpLHRoaXMubGVuZ3RoPU1hdGguc3FydCh0aGlzLmxlbmd0aFgqdGhpcy5sZW5ndGhYK3RoaXMubGVuZ3RoWSp0aGlzLmxlbmd0aFkpfSx1LmV4cG9ydHM9VH0sZnVuY3Rpb24odSxkLHApe2Z1bmN0aW9uIHYoYil7dGhpcy52R3JhcGhPYmplY3Q9Yn11LmV4cG9ydHM9dn0sZnVuY3Rpb24odSxkLHApe3ZhciB2PXAoMiksYj1wKDEwKSx5PXAoMTMpLFQ9cCgwKSxfPXAoMTYpLEE9cCg0KTtmdW5jdGlvbiBQKEYsaixLLGVlKXtLPT1udWxsJiZlZT09bnVsbCYmKGVlPWopLHYuY2FsbCh0aGlzLGVlKSxGLmdyYXBoTWFuYWdlciE9bnVsbCYmKEY9Ri5ncmFwaE1hbmFnZXIpLHRoaXMuZXN0aW1hdGVkU2l6ZT1iLk1JTl9WQUxVRSx0aGlzLmluY2x1c2lvblRyZWVEZXB0aD1iLk1BWF9WQUxVRSx0aGlzLnZHcmFwaE9iamVjdD1lZSx0aGlzLmVkZ2VzPVtdLHRoaXMuZ3JhcGhNYW5hZ2VyPUYsSyE9bnVsbCYmaiE9bnVsbD90aGlzLnJlY3Q9bmV3IHkoai54LGoueSxLLndpZHRoLEsuaGVpZ2h0KTp0aGlzLnJlY3Q9bmV3IHl9UC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh2LnByb3RvdHlwZSk7Zm9yKHZhciBSIGluIHYpUFtSXT12W1JdO1AucHJvdG90eXBlLmdldEVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXN9LFAucHJvdG90eXBlLmdldENoaWxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGR9LFAucHJvdG90eXBlLmdldE93bmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJ9LFAucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC53aWR0aH0sUC5wcm90b3R5cGUuc2V0V2lkdGg9ZnVuY3Rpb24oRil7dGhpcy5yZWN0LndpZHRoPUZ9LFAucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QuaGVpZ2h0fSxQLnByb3RvdHlwZS5zZXRIZWlnaHQ9ZnVuY3Rpb24oRil7dGhpcy5yZWN0LmhlaWdodD1GfSxQLnByb3RvdHlwZS5nZXRDZW50ZXJYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC54K3RoaXMucmVjdC53aWR0aC8yfSxQLnByb3RvdHlwZS5nZXRDZW50ZXJZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC55K3RoaXMucmVjdC5oZWlnaHQvMn0sUC5wcm90b3R5cGUuZ2V0Q2VudGVyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBKHRoaXMucmVjdC54K3RoaXMucmVjdC53aWR0aC8yLHRoaXMucmVjdC55K3RoaXMucmVjdC5oZWlnaHQvMil9LFAucHJvdG90eXBlLmdldExvY2F0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBKHRoaXMucmVjdC54LHRoaXMucmVjdC55KX0sUC5wcm90b3R5cGUuZ2V0UmVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3R9LFAucHJvdG90eXBlLmdldERpYWdvbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLnJlY3Qud2lkdGgqdGhpcy5yZWN0LndpZHRoK3RoaXMucmVjdC5oZWlnaHQqdGhpcy5yZWN0LmhlaWdodCl9LFAucHJvdG90eXBlLmdldEhhbGZUaGVEaWFnb25hbD1mdW5jdGlvbigpe3JldHVybiBNYXRoLnNxcnQodGhpcy5yZWN0LmhlaWdodCp0aGlzLnJlY3QuaGVpZ2h0K3RoaXMucmVjdC53aWR0aCp0aGlzLnJlY3Qud2lkdGgpLzJ9LFAucHJvdG90eXBlLnNldFJlY3Q9ZnVuY3Rpb24oRixqKXt0aGlzLnJlY3QueD1GLngsdGhpcy5yZWN0Lnk9Ri55LHRoaXMucmVjdC53aWR0aD1qLndpZHRoLHRoaXMucmVjdC5oZWlnaHQ9ai5oZWlnaHR9LFAucHJvdG90eXBlLnNldENlbnRlcj1mdW5jdGlvbihGLGope3RoaXMucmVjdC54PUYtdGhpcy5yZWN0LndpZHRoLzIsdGhpcy5yZWN0Lnk9ai10aGlzLnJlY3QuaGVpZ2h0LzJ9LFAucHJvdG90eXBlLnNldExvY2F0aW9uPWZ1bmN0aW9uKEYsail7dGhpcy5yZWN0Lng9Rix0aGlzLnJlY3QueT1qfSxQLnByb3RvdHlwZS5tb3ZlQnk9ZnVuY3Rpb24oRixqKXt0aGlzLnJlY3QueCs9Rix0aGlzLnJlY3QueSs9an0sUC5wcm90b3R5cGUuZ2V0RWRnZUxpc3RUb05vZGU9ZnVuY3Rpb24oRil7dmFyIGo9W10sSz10aGlzO3JldHVybiBLLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oZWUpe2lmKGVlLnRhcmdldD09Ril7aWYoZWUuc291cmNlIT1LKXRocm93IkluY29ycmVjdCBlZGdlIHNvdXJjZSEiO2oucHVzaChlZSl9fSksan0sUC5wcm90b3R5cGUuZ2V0RWRnZXNCZXR3ZWVuPWZ1bmN0aW9uKEYpe3ZhciBqPVtdLEs9dGhpcztyZXR1cm4gSy5lZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKGVlKXtpZighKGVlLnNvdXJjZT09S3x8ZWUudGFyZ2V0PT1LKSl0aHJvdyJJbmNvcnJlY3QgZWRnZSBzb3VyY2UgYW5kL29yIHRhcmdldCI7KGVlLnRhcmdldD09Rnx8ZWUuc291cmNlPT1GKSYmai5wdXNoKGVlKX0pLGp9LFAucHJvdG90eXBlLmdldE5laWdoYm9yc0xpc3Q9ZnVuY3Rpb24oKXt2YXIgRj1uZXcgU2V0LGo9dGhpcztyZXR1cm4gai5lZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKEspe2lmKEsuc291cmNlPT1qKUYuYWRkKEsudGFyZ2V0KTtlbHNle2lmKEsudGFyZ2V0IT1qKXRocm93IkluY29ycmVjdCBpbmNpZGVuY3khIjtGLmFkZChLLnNvdXJjZSl9fSksRn0sUC5wcm90b3R5cGUud2l0aENoaWxkcmVuPWZ1bmN0aW9uKCl7dmFyIEY9bmV3IFNldCxqLEs7aWYoRi5hZGQodGhpcyksdGhpcy5jaGlsZCE9bnVsbClmb3IodmFyIGVlPXRoaXMuY2hpbGQuZ2V0Tm9kZXMoKSxpZT0wO2llPGVlLmxlbmd0aDtpZSsrKWo9ZWVbaWVdLEs9ai53aXRoQ2hpbGRyZW4oKSxLLmZvckVhY2goZnVuY3Rpb24ob2Upe0YuYWRkKG9lKX0pO3JldHVybiBGfSxQLnByb3RvdHlwZS5nZXROb09mQ2hpbGRyZW49ZnVuY3Rpb24oKXt2YXIgRj0wLGo7aWYodGhpcy5jaGlsZD09bnVsbClGPTE7ZWxzZSBmb3IodmFyIEs9dGhpcy5jaGlsZC5nZXROb2RlcygpLGVlPTA7ZWU8Sy5sZW5ndGg7ZWUrKylqPUtbZWVdLEYrPWouZ2V0Tm9PZkNoaWxkcmVuKCk7cmV0dXJuIEY9PTAmJihGPTEpLEZ9LFAucHJvdG90eXBlLmdldEVzdGltYXRlZFNpemU9ZnVuY3Rpb24oKXtpZih0aGlzLmVzdGltYXRlZFNpemU9PWIuTUlOX1ZBTFVFKXRocm93ImFzc2VydCBmYWlsZWQiO3JldHVybiB0aGlzLmVzdGltYXRlZFNpemV9LFAucHJvdG90eXBlLmNhbGNFc3RpbWF0ZWRTaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGQ9PW51bGw/dGhpcy5lc3RpbWF0ZWRTaXplPSh0aGlzLnJlY3Qud2lkdGgrdGhpcy5yZWN0LmhlaWdodCkvMjoodGhpcy5lc3RpbWF0ZWRTaXplPXRoaXMuY2hpbGQuY2FsY0VzdGltYXRlZFNpemUoKSx0aGlzLnJlY3Qud2lkdGg9dGhpcy5lc3RpbWF0ZWRTaXplLHRoaXMucmVjdC5oZWlnaHQ9dGhpcy5lc3RpbWF0ZWRTaXplLHRoaXMuZXN0aW1hdGVkU2l6ZSl9LFAucHJvdG90eXBlLnNjYXR0ZXI9ZnVuY3Rpb24oKXt2YXIgRixqLEs9LVQuSU5JVElBTF9XT1JMRF9CT1VOREFSWSxlZT1ULklOSVRJQUxfV09STERfQk9VTkRBUlk7Rj1ULldPUkxEX0NFTlRFUl9YK18ubmV4dERvdWJsZSgpKihlZS1LKStLO3ZhciBpZT0tVC5JTklUSUFMX1dPUkxEX0JPVU5EQVJZLG9lPVQuSU5JVElBTF9XT1JMRF9CT1VOREFSWTtqPVQuV09STERfQ0VOVEVSX1krXy5uZXh0RG91YmxlKCkqKG9lLWllKStpZSx0aGlzLnJlY3QueD1GLHRoaXMucmVjdC55PWp9LFAucHJvdG90eXBlLnVwZGF0ZUJvdW5kcz1mdW5jdGlvbigpe2lmKHRoaXMuZ2V0Q2hpbGQoKT09bnVsbCl0aHJvdyJhc3NlcnQgZmFpbGVkIjtpZih0aGlzLmdldENoaWxkKCkuZ2V0Tm9kZXMoKS5sZW5ndGghPTApe3ZhciBGPXRoaXMuZ2V0Q2hpbGQoKTtpZihGLnVwZGF0ZUJvdW5kcyghMCksdGhpcy5yZWN0Lng9Ri5nZXRMZWZ0KCksdGhpcy5yZWN0Lnk9Ri5nZXRUb3AoKSx0aGlzLnNldFdpZHRoKEYuZ2V0UmlnaHQoKS1GLmdldExlZnQoKSksdGhpcy5zZXRIZWlnaHQoRi5nZXRCb3R0b20oKS1GLmdldFRvcCgpKSxULk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUyl7dmFyIGo9Ri5nZXRSaWdodCgpLUYuZ2V0TGVmdCgpLEs9Ri5nZXRCb3R0b20oKS1GLmdldFRvcCgpO3RoaXMubGFiZWxXaWR0aD5qJiYodGhpcy5yZWN0LngtPSh0aGlzLmxhYmVsV2lkdGgtaikvMix0aGlzLnNldFdpZHRoKHRoaXMubGFiZWxXaWR0aCkpLHRoaXMubGFiZWxIZWlnaHQ+SyYmKHRoaXMubGFiZWxQb3M9PSJjZW50ZXIiP3RoaXMucmVjdC55LT0odGhpcy5sYWJlbEhlaWdodC1LKS8yOnRoaXMubGFiZWxQb3M9PSJ0b3AiJiYodGhpcy5yZWN0LnktPXRoaXMubGFiZWxIZWlnaHQtSyksdGhpcy5zZXRIZWlnaHQodGhpcy5sYWJlbEhlaWdodCkpfX19LFAucHJvdG90eXBlLmdldEluY2x1c2lvblRyZWVEZXB0aD1mdW5jdGlvbigpe2lmKHRoaXMuaW5jbHVzaW9uVHJlZURlcHRoPT1iLk1BWF9WQUxVRSl0aHJvdyJhc3NlcnQgZmFpbGVkIjtyZXR1cm4gdGhpcy5pbmNsdXNpb25UcmVlRGVwdGh9LFAucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihGKXt2YXIgaj10aGlzLnJlY3QueDtqPlQuV09STERfQk9VTkRBUlk/aj1ULldPUkxEX0JPVU5EQVJZOmo8LVQuV09STERfQk9VTkRBUlkmJihqPS1ULldPUkxEX0JPVU5EQVJZKTt2YXIgSz10aGlzLnJlY3QueTtLPlQuV09STERfQk9VTkRBUlk/Sz1ULldPUkxEX0JPVU5EQVJZOks8LVQuV09STERfQk9VTkRBUlkmJihLPS1ULldPUkxEX0JPVU5EQVJZKTt2YXIgZWU9bmV3IEEoaixLKSxpZT1GLmludmVyc2VUcmFuc2Zvcm1Qb2ludChlZSk7dGhpcy5zZXRMb2NhdGlvbihpZS54LGllLnkpfSxQLnByb3RvdHlwZS5nZXRMZWZ0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC54fSxQLnByb3RvdHlwZS5nZXRSaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueCt0aGlzLnJlY3Qud2lkdGh9LFAucHJvdG90eXBlLmdldFRvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueX0sUC5wcm90b3R5cGUuZ2V0Qm90dG9tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC55K3RoaXMucmVjdC5oZWlnaHR9LFAucHJvdG90eXBlLmdldFBhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyPT1udWxsP251bGw6dGhpcy5vd25lci5nZXRQYXJlbnQoKX0sdS5leHBvcnRzPVB9LGZ1bmN0aW9uKHUsZCxwKXtmdW5jdGlvbiB2KGIseSl7Yj09bnVsbCYmeT09bnVsbD8odGhpcy54PTAsdGhpcy55PTApOih0aGlzLng9Yix0aGlzLnk9eSl9di5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnh9LHYucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55fSx2LnByb3RvdHlwZS5zZXRYPWZ1bmN0aW9uKGIpe3RoaXMueD1ifSx2LnByb3RvdHlwZS5zZXRZPWZ1bmN0aW9uKGIpe3RoaXMueT1ifSx2LnByb3RvdHlwZS5nZXREaWZmZXJlbmNlPWZ1bmN0aW9uKGIpe3JldHVybiBuZXcgRGltZW5zaW9uRCh0aGlzLngtYi54LHRoaXMueS1iLnkpfSx2LnByb3RvdHlwZS5nZXRDb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB2KHRoaXMueCx0aGlzLnkpfSx2LnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMueCs9Yi53aWR0aCx0aGlzLnkrPWIuaGVpZ2h0LHRoaXN9LHUuZXhwb3J0cz12fSxmdW5jdGlvbih1LGQscCl7dmFyIHY9cCgyKSxiPXAoMTApLHk9cCgwKSxUPXAoNiksXz1wKDMpLEE9cCgxKSxQPXAoMTMpLFI9cCgxMiksRj1wKDExKTtmdW5jdGlvbiBqKGVlLGllLG9lKXt2LmNhbGwodGhpcyxvZSksdGhpcy5lc3RpbWF0ZWRTaXplPWIuTUlOX1ZBTFVFLHRoaXMubWFyZ2luPXkuREVGQVVMVF9HUkFQSF9NQVJHSU4sdGhpcy5lZGdlcz1bXSx0aGlzLm5vZGVzPVtdLHRoaXMuaXNDb25uZWN0ZWQ9ITEsdGhpcy5wYXJlbnQ9ZWUsaWUhPW51bGwmJmllIGluc3RhbmNlb2YgVD90aGlzLmdyYXBoTWFuYWdlcj1pZTppZSE9bnVsbCYmaWUgaW5zdGFuY2VvZiBMYXlvdXQmJih0aGlzLmdyYXBoTWFuYWdlcj1pZS5ncmFwaE1hbmFnZXIpfWoucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodi5wcm90b3R5cGUpO2Zvcih2YXIgSyBpbiB2KWpbS109dltLXTtqLnByb3RvdHlwZS5nZXROb2Rlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzfSxqLnByb3RvdHlwZS5nZXRFZGdlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzfSxqLnByb3RvdHlwZS5nZXRHcmFwaE1hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXJ9LGoucHJvdG90eXBlLmdldFBhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudH0sai5wcm90b3R5cGUuZ2V0TGVmdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlZnR9LGoucHJvdG90eXBlLmdldFJpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmlnaHR9LGoucHJvdG90eXBlLmdldFRvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvcH0sai5wcm90b3R5cGUuZ2V0Qm90dG9tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYm90dG9tfSxqLnByb3RvdHlwZS5pc0Nvbm5lY3RlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzQ29ubmVjdGVkfSxqLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZWUsaWUsb2Upe2lmKGllPT1udWxsJiZvZT09bnVsbCl7dmFyIHBlPWVlO2lmKHRoaXMuZ3JhcGhNYW5hZ2VyPT1udWxsKXRocm93IkdyYXBoIGhhcyBubyBncmFwaCBtZ3IhIjtpZih0aGlzLmdldE5vZGVzKCkuaW5kZXhPZihwZSk+LTEpdGhyb3ciTm9kZSBhbHJlYWR5IGluIGdyYXBoISI7cmV0dXJuIHBlLm93bmVyPXRoaXMsdGhpcy5nZXROb2RlcygpLnB1c2gocGUpLHBlfWVsc2V7dmFyIGJlPWVlO2lmKCEodGhpcy5nZXROb2RlcygpLmluZGV4T2YoaWUpPi0xJiZ0aGlzLmdldE5vZGVzKCkuaW5kZXhPZihvZSk+LTEpKXRocm93IlNvdXJjZSBvciB0YXJnZXQgbm90IGluIGdyYXBoISI7aWYoIShpZS5vd25lcj09b2Uub3duZXImJmllLm93bmVyPT10aGlzKSl0aHJvdyJCb3RoIG93bmVycyBtdXN0IGJlIHRoaXMgZ3JhcGghIjtyZXR1cm4gaWUub3duZXIhPW9lLm93bmVyP251bGw6KGJlLnNvdXJjZT1pZSxiZS50YXJnZXQ9b2UsYmUuaXNJbnRlckdyYXBoPSExLHRoaXMuZ2V0RWRnZXMoKS5wdXNoKGJlKSxpZS5lZGdlcy5wdXNoKGJlKSxvZSE9aWUmJm9lLmVkZ2VzLnB1c2goYmUpLGJlKX19LGoucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihlZSl7dmFyIGllPWVlO2lmKGVlIGluc3RhbmNlb2YgXyl7aWYoaWU9PW51bGwpdGhyb3ciTm9kZSBpcyBudWxsISI7aWYoIShpZS5vd25lciE9bnVsbCYmaWUub3duZXI9PXRoaXMpKXRocm93Ik93bmVyIGdyYXBoIGlzIGludmFsaWQhIjtpZih0aGlzLmdyYXBoTWFuYWdlcj09bnVsbCl0aHJvdyJPd25lciBncmFwaCBtYW5hZ2VyIGlzIGludmFsaWQhIjtmb3IodmFyIG9lPWllLmVkZ2VzLnNsaWNlKCkscGUsYmU9b2UubGVuZ3RoLGFlPTA7YWU8YmU7YWUrKylwZT1vZVthZV0scGUuaXNJbnRlckdyYXBoP3RoaXMuZ3JhcGhNYW5hZ2VyLnJlbW92ZShwZSk6cGUuc291cmNlLm93bmVyLnJlbW92ZShwZSk7dmFyIG5lPXRoaXMubm9kZXMuaW5kZXhPZihpZSk7aWYobmU9PS0xKXRocm93Ik5vZGUgbm90IGluIG93bmVyIG5vZGUgbGlzdCEiO3RoaXMubm9kZXMuc3BsaWNlKG5lLDEpfWVsc2UgaWYoZWUgaW5zdGFuY2VvZiBBKXt2YXIgcGU9ZWU7aWYocGU9PW51bGwpdGhyb3ciRWRnZSBpcyBudWxsISI7aWYoIShwZS5zb3VyY2UhPW51bGwmJnBlLnRhcmdldCE9bnVsbCkpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgaXMgbnVsbCEiO2lmKCEocGUuc291cmNlLm93bmVyIT1udWxsJiZwZS50YXJnZXQub3duZXIhPW51bGwmJnBlLnNvdXJjZS5vd25lcj09dGhpcyYmcGUudGFyZ2V0Lm93bmVyPT10aGlzKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBvd25lciBpcyBpbnZhbGlkISI7dmFyIHNlPXBlLnNvdXJjZS5lZGdlcy5pbmRleE9mKHBlKSxkZT1wZS50YXJnZXQuZWRnZXMuaW5kZXhPZihwZSk7aWYoIShzZT4tMSYmZGU+LTEpKXRocm93IlNvdXJjZSBhbmQvb3IgdGFyZ2V0IGRvZXNuJ3Qga25vdyB0aGlzIGVkZ2UhIjtwZS5zb3VyY2UuZWRnZXMuc3BsaWNlKHNlLDEpLHBlLnRhcmdldCE9cGUuc291cmNlJiZwZS50YXJnZXQuZWRnZXMuc3BsaWNlKGRlLDEpO3ZhciBuZT1wZS5zb3VyY2Uub3duZXIuZ2V0RWRnZXMoKS5pbmRleE9mKHBlKTtpZihuZT09LTEpdGhyb3ciTm90IGluIG93bmVyJ3MgZWRnZSBsaXN0ISI7cGUuc291cmNlLm93bmVyLmdldEVkZ2VzKCkuc3BsaWNlKG5lLDEpfX0sai5wcm90b3R5cGUudXBkYXRlTGVmdFRvcD1mdW5jdGlvbigpe2Zvcih2YXIgZWU9Yi5NQVhfVkFMVUUsaWU9Yi5NQVhfVkFMVUUsb2UscGUsYmUsYWU9dGhpcy5nZXROb2RlcygpLG5lPWFlLmxlbmd0aCxzZT0wO3NlPG5lO3NlKyspe3ZhciBkZT1hZVtzZV07b2U9ZGUuZ2V0VG9wKCkscGU9ZGUuZ2V0TGVmdCgpLGVlPm9lJiYoZWU9b2UpLGllPnBlJiYoaWU9cGUpfXJldHVybiBlZT09Yi5NQVhfVkFMVUU/bnVsbDooYWVbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQhPW51bGw/YmU9YWVbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQ6YmU9dGhpcy5tYXJnaW4sdGhpcy5sZWZ0PWllLWJlLHRoaXMudG9wPWVlLWJlLG5ldyBSKHRoaXMubGVmdCx0aGlzLnRvcCkpfSxqLnByb3RvdHlwZS51cGRhdGVCb3VuZHM9ZnVuY3Rpb24oZWUpe2Zvcih2YXIgaWU9Yi5NQVhfVkFMVUUsb2U9LWIuTUFYX1ZBTFVFLHBlPWIuTUFYX1ZBTFVFLGJlPS1iLk1BWF9WQUxVRSxhZSxuZSxzZSxkZSxYLGdlPXRoaXMubm9kZXMsVz1nZS5sZW5ndGgseGU9MDt4ZTxXO3hlKyspe3ZhciBVPWdlW3hlXTtlZSYmVS5jaGlsZCE9bnVsbCYmVS51cGRhdGVCb3VuZHMoKSxhZT1VLmdldExlZnQoKSxuZT1VLmdldFJpZ2h0KCksc2U9VS5nZXRUb3AoKSxkZT1VLmdldEJvdHRvbSgpLGllPmFlJiYoaWU9YWUpLG9lPG5lJiYob2U9bmUpLHBlPnNlJiYocGU9c2UpLGJlPGRlJiYoYmU9ZGUpfXZhciBGZT1uZXcgUChpZSxwZSxvZS1pZSxiZS1wZSk7aWU9PWIuTUFYX1ZBTFVFJiYodGhpcy5sZWZ0PXRoaXMucGFyZW50LmdldExlZnQoKSx0aGlzLnJpZ2h0PXRoaXMucGFyZW50LmdldFJpZ2h0KCksdGhpcy50b3A9dGhpcy5wYXJlbnQuZ2V0VG9wKCksdGhpcy5ib3R0b209dGhpcy5wYXJlbnQuZ2V0Qm90dG9tKCkpLGdlWzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0IT1udWxsP1g9Z2VbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQ6WD10aGlzLm1hcmdpbix0aGlzLmxlZnQ9RmUueC1YLHRoaXMucmlnaHQ9RmUueCtGZS53aWR0aCtYLHRoaXMudG9wPUZlLnktWCx0aGlzLmJvdHRvbT1GZS55K0ZlLmhlaWdodCtYfSxqLmNhbGN1bGF0ZUJvdW5kcz1mdW5jdGlvbihlZSl7Zm9yKHZhciBpZT1iLk1BWF9WQUxVRSxvZT0tYi5NQVhfVkFMVUUscGU9Yi5NQVhfVkFMVUUsYmU9LWIuTUFYX1ZBTFVFLGFlLG5lLHNlLGRlLFg9ZWUubGVuZ3RoLGdlPTA7Z2U8WDtnZSsrKXt2YXIgVz1lZVtnZV07YWU9Vy5nZXRMZWZ0KCksbmU9Vy5nZXRSaWdodCgpLHNlPVcuZ2V0VG9wKCksZGU9Vy5nZXRCb3R0b20oKSxpZT5hZSYmKGllPWFlKSxvZTxuZSYmKG9lPW5lKSxwZT5zZSYmKHBlPXNlKSxiZTxkZSYmKGJlPWRlKX12YXIgeGU9bmV3IFAoaWUscGUsb2UtaWUsYmUtcGUpO3JldHVybiB4ZX0sai5wcm90b3R5cGUuZ2V0SW5jbHVzaW9uVHJlZURlcHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKT8xOnRoaXMucGFyZW50LmdldEluY2x1c2lvblRyZWVEZXB0aCgpfSxqLnByb3RvdHlwZS5nZXRFc3RpbWF0ZWRTaXplPWZ1bmN0aW9uKCl7aWYodGhpcy5lc3RpbWF0ZWRTaXplPT1iLk1JTl9WQUxVRSl0aHJvdyJhc3NlcnQgZmFpbGVkIjtyZXR1cm4gdGhpcy5lc3RpbWF0ZWRTaXplfSxqLnByb3RvdHlwZS5jYWxjRXN0aW1hdGVkU2l6ZT1mdW5jdGlvbigpe2Zvcih2YXIgZWU9MCxpZT10aGlzLm5vZGVzLG9lPWllLmxlbmd0aCxwZT0wO3BlPG9lO3BlKyspe3ZhciBiZT1pZVtwZV07ZWUrPWJlLmNhbGNFc3RpbWF0ZWRTaXplKCl9cmV0dXJuIGVlPT0wP3RoaXMuZXN0aW1hdGVkU2l6ZT15LkVNUFRZX0NPTVBPVU5EX05PREVfU0laRTp0aGlzLmVzdGltYXRlZFNpemU9ZWUvTWF0aC5zcXJ0KHRoaXMubm9kZXMubGVuZ3RoKSx0aGlzLmVzdGltYXRlZFNpemV9LGoucHJvdG90eXBlLnVwZGF0ZUNvbm5lY3RlZD1mdW5jdGlvbigpe3ZhciBlZT10aGlzO2lmKHRoaXMubm9kZXMubGVuZ3RoPT0wKXt0aGlzLmlzQ29ubmVjdGVkPSEwO3JldHVybn12YXIgaWU9bmV3IEYsb2U9bmV3IFNldCxwZT10aGlzLm5vZGVzWzBdLGJlLGFlLG5lPXBlLndpdGhDaGlsZHJlbigpO2ZvcihuZS5mb3JFYWNoKGZ1bmN0aW9uKHhlKXtpZS5wdXNoKHhlKSxvZS5hZGQoeGUpfSk7aWUubGVuZ3RoIT09MDspe3BlPWllLnNoaWZ0KCksYmU9cGUuZ2V0RWRnZXMoKTtmb3IodmFyIHNlPWJlLmxlbmd0aCxkZT0wO2RlPHNlO2RlKyspe3ZhciBYPWJlW2RlXTtpZihhZT1YLmdldE90aGVyRW5kSW5HcmFwaChwZSx0aGlzKSxhZSE9bnVsbCYmIW9lLmhhcyhhZSkpe3ZhciBnZT1hZS53aXRoQ2hpbGRyZW4oKTtnZS5mb3JFYWNoKGZ1bmN0aW9uKHhlKXtpZS5wdXNoKHhlKSxvZS5hZGQoeGUpfSl9fX1pZih0aGlzLmlzQ29ubmVjdGVkPSExLG9lLnNpemU+PXRoaXMubm9kZXMubGVuZ3RoKXt2YXIgVz0wO29lLmZvckVhY2goZnVuY3Rpb24oeGUpe3hlLm93bmVyPT1lZSYmVysrfSksVz09dGhpcy5ub2Rlcy5sZW5ndGgmJih0aGlzLmlzQ29ubmVjdGVkPSEwKX19LHUuZXhwb3J0cz1qfSxmdW5jdGlvbih1LGQscCl7dmFyIHYsYj1wKDEpO2Z1bmN0aW9uIHkoVCl7dj1wKDUpLHRoaXMubGF5b3V0PVQsdGhpcy5ncmFwaHM9W10sdGhpcy5lZGdlcz1bXX15LnByb3RvdHlwZS5hZGRSb290PWZ1bmN0aW9uKCl7dmFyIFQ9dGhpcy5sYXlvdXQubmV3R3JhcGgoKSxfPXRoaXMubGF5b3V0Lm5ld05vZGUobnVsbCksQT10aGlzLmFkZChULF8pO3JldHVybiB0aGlzLnNldFJvb3RHcmFwaChBKSx0aGlzLnJvb3RHcmFwaH0seS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKFQsXyxBLFAsUil7aWYoQT09bnVsbCYmUD09bnVsbCYmUj09bnVsbCl7aWYoVD09bnVsbCl0aHJvdyJHcmFwaCBpcyBudWxsISI7aWYoXz09bnVsbCl0aHJvdyJQYXJlbnQgbm9kZSBpcyBudWxsISI7aWYodGhpcy5ncmFwaHMuaW5kZXhPZihUKT4tMSl0aHJvdyJHcmFwaCBhbHJlYWR5IGluIHRoaXMgZ3JhcGggbWdyISI7aWYodGhpcy5ncmFwaHMucHVzaChUKSxULnBhcmVudCE9bnVsbCl0aHJvdyJBbHJlYWR5IGhhcyBhIHBhcmVudCEiO2lmKF8uY2hpbGQhPW51bGwpdGhyb3ciQWxyZWFkeSBoYXMgYSBjaGlsZCEiO3JldHVybiBULnBhcmVudD1fLF8uY2hpbGQ9VCxUfWVsc2V7Uj1BLFA9XyxBPVQ7dmFyIEY9UC5nZXRPd25lcigpLGo9Ui5nZXRPd25lcigpO2lmKCEoRiE9bnVsbCYmRi5nZXRHcmFwaE1hbmFnZXIoKT09dGhpcykpdGhyb3ciU291cmNlIG5vdCBpbiB0aGlzIGdyYXBoIG1nciEiO2lmKCEoaiE9bnVsbCYmai5nZXRHcmFwaE1hbmFnZXIoKT09dGhpcykpdGhyb3ciVGFyZ2V0IG5vdCBpbiB0aGlzIGdyYXBoIG1nciEiO2lmKEY9PWopcmV0dXJuIEEuaXNJbnRlckdyYXBoPSExLEYuYWRkKEEsUCxSKTtpZihBLmlzSW50ZXJHcmFwaD0hMCxBLnNvdXJjZT1QLEEudGFyZ2V0PVIsdGhpcy5lZGdlcy5pbmRleE9mKEEpPi0xKXRocm93IkVkZ2UgYWxyZWFkeSBpbiBpbnRlci1ncmFwaCBlZGdlIGxpc3QhIjtpZih0aGlzLmVkZ2VzLnB1c2goQSksIShBLnNvdXJjZSE9bnVsbCYmQS50YXJnZXQhPW51bGwpKXRocm93IkVkZ2Ugc291cmNlIGFuZC9vciB0YXJnZXQgaXMgbnVsbCEiO2lmKCEoQS5zb3VyY2UuZWRnZXMuaW5kZXhPZihBKT09LTEmJkEudGFyZ2V0LmVkZ2VzLmluZGV4T2YoQSk9PS0xKSl0aHJvdyJFZGdlIGFscmVhZHkgaW4gc291cmNlIGFuZC9vciB0YXJnZXQgaW5jaWRlbmN5IGxpc3QhIjtyZXR1cm4gQS5zb3VyY2UuZWRnZXMucHVzaChBKSxBLnRhcmdldC5lZGdlcy5wdXNoKEEpLEF9fSx5LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oVCl7aWYoVCBpbnN0YW5jZW9mIHYpe3ZhciBfPVQ7aWYoXy5nZXRHcmFwaE1hbmFnZXIoKSE9dGhpcyl0aHJvdyJHcmFwaCBub3QgaW4gdGhpcyBncmFwaCBtZ3IiO2lmKCEoXz09dGhpcy5yb290R3JhcGh8fF8ucGFyZW50IT1udWxsJiZfLnBhcmVudC5ncmFwaE1hbmFnZXI9PXRoaXMpKXRocm93IkludmFsaWQgcGFyZW50IG5vZGUhIjt2YXIgQT1bXTtBPUEuY29uY2F0KF8uZ2V0RWRnZXMoKSk7Zm9yKHZhciBQLFI9QS5sZW5ndGgsRj0wO0Y8UjtGKyspUD1BW0ZdLF8ucmVtb3ZlKFApO3ZhciBqPVtdO2o9ai5jb25jYXQoXy5nZXROb2RlcygpKTt2YXIgSztSPWoubGVuZ3RoO2Zvcih2YXIgRj0wO0Y8UjtGKyspSz1qW0ZdLF8ucmVtb3ZlKEspO189PXRoaXMucm9vdEdyYXBoJiZ0aGlzLnNldFJvb3RHcmFwaChudWxsKTt2YXIgZWU9dGhpcy5ncmFwaHMuaW5kZXhPZihfKTt0aGlzLmdyYXBocy5zcGxpY2UoZWUsMSksXy5wYXJlbnQ9bnVsbH1lbHNlIGlmKFQgaW5zdGFuY2VvZiBiKXtpZihQPVQsUD09bnVsbCl0aHJvdyJFZGdlIGlzIG51bGwhIjtpZighUC5pc0ludGVyR3JhcGgpdGhyb3ciTm90IGFuIGludGVyLWdyYXBoIGVkZ2UhIjtpZighKFAuc291cmNlIT1udWxsJiZQLnRhcmdldCE9bnVsbCkpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgaXMgbnVsbCEiO2lmKCEoUC5zb3VyY2UuZWRnZXMuaW5kZXhPZihQKSE9LTEmJlAudGFyZ2V0LmVkZ2VzLmluZGV4T2YoUCkhPS0xKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBkb2Vzbid0IGtub3cgdGhpcyBlZGdlISI7dmFyIGVlPVAuc291cmNlLmVkZ2VzLmluZGV4T2YoUCk7aWYoUC5zb3VyY2UuZWRnZXMuc3BsaWNlKGVlLDEpLGVlPVAudGFyZ2V0LmVkZ2VzLmluZGV4T2YoUCksUC50YXJnZXQuZWRnZXMuc3BsaWNlKGVlLDEpLCEoUC5zb3VyY2Uub3duZXIhPW51bGwmJlAuc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpIT1udWxsKSl0aHJvdyJFZGdlIG93bmVyIGdyYXBoIG9yIG93bmVyIGdyYXBoIG1hbmFnZXIgaXMgbnVsbCEiO2lmKFAuc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpLmVkZ2VzLmluZGV4T2YoUCk9PS0xKXRocm93Ik5vdCBpbiBvd25lciBncmFwaCBtYW5hZ2VyJ3MgZWRnZSBsaXN0ISI7dmFyIGVlPVAuc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpLmVkZ2VzLmluZGV4T2YoUCk7UC5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkuZWRnZXMuc3BsaWNlKGVlLDEpfX0seS5wcm90b3R5cGUudXBkYXRlQm91bmRzPWZ1bmN0aW9uKCl7dGhpcy5yb290R3JhcGgudXBkYXRlQm91bmRzKCEwKX0seS5wcm90b3R5cGUuZ2V0R3JhcGhzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhzfSx5LnByb3RvdHlwZS5nZXRBbGxOb2Rlcz1mdW5jdGlvbigpe2lmKHRoaXMuYWxsTm9kZXM9PW51bGwpe2Zvcih2YXIgVD1bXSxfPXRoaXMuZ2V0R3JhcGhzKCksQT1fLmxlbmd0aCxQPTA7UDxBO1ArKylUPVQuY29uY2F0KF9bUF0uZ2V0Tm9kZXMoKSk7dGhpcy5hbGxOb2Rlcz1UfXJldHVybiB0aGlzLmFsbE5vZGVzfSx5LnByb3RvdHlwZS5yZXNldEFsbE5vZGVzPWZ1bmN0aW9uKCl7dGhpcy5hbGxOb2Rlcz1udWxsfSx5LnByb3RvdHlwZS5yZXNldEFsbEVkZ2VzPWZ1bmN0aW9uKCl7dGhpcy5hbGxFZGdlcz1udWxsfSx5LnByb3RvdHlwZS5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKCl7dGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbj1udWxsfSx5LnByb3RvdHlwZS5nZXRBbGxFZGdlcz1mdW5jdGlvbigpe2lmKHRoaXMuYWxsRWRnZXM9PW51bGwpe3ZhciBUPVtdLF89dGhpcy5nZXRHcmFwaHMoKTtfLmxlbmd0aDtmb3IodmFyIEE9MDtBPF8ubGVuZ3RoO0ErKylUPVQuY29uY2F0KF9bQV0uZ2V0RWRnZXMoKSk7VD1ULmNvbmNhdCh0aGlzLmVkZ2VzKSx0aGlzLmFsbEVkZ2VzPVR9cmV0dXJuIHRoaXMuYWxsRWRnZXN9LHkucHJvdG90eXBlLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb259LHkucHJvdG90eXBlLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKFQpe2lmKHRoaXMuYWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24hPW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7dGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbj1UfSx5LnByb3RvdHlwZS5nZXRSb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdEdyYXBofSx5LnByb3RvdHlwZS5zZXRSb290R3JhcGg9ZnVuY3Rpb24oVCl7aWYoVC5nZXRHcmFwaE1hbmFnZXIoKSE9dGhpcyl0aHJvdyJSb290IG5vdCBpbiB0aGlzIGdyYXBoIG1nciEiO3RoaXMucm9vdEdyYXBoPVQsVC5wYXJlbnQ9PW51bGwmJihULnBhcmVudD10aGlzLmxheW91dC5uZXdOb2RlKCJSb290IG5vZGUiKSl9LHkucHJvdG90eXBlLmdldExheW91dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxheW91dH0seS5wcm90b3R5cGUuaXNPbmVBbmNlc3Rvck9mT3RoZXI9ZnVuY3Rpb24oVCxfKXtpZighKFQhPW51bGwmJl8hPW51bGwpKXRocm93ImFzc2VydCBmYWlsZWQiO2lmKFQ9PV8pcmV0dXJuITA7dmFyIEE9VC5nZXRPd25lcigpLFA7ZG97aWYoUD1BLmdldFBhcmVudCgpLFA9PW51bGwpYnJlYWs7aWYoUD09XylyZXR1cm4hMDtpZihBPVAuZ2V0T3duZXIoKSxBPT1udWxsKWJyZWFrfXdoaWxlKCEwKTtBPV8uZ2V0T3duZXIoKTtkb3tpZihQPUEuZ2V0UGFyZW50KCksUD09bnVsbClicmVhaztpZihQPT1UKXJldHVybiEwO2lmKEE9UC5nZXRPd25lcigpLEE9PW51bGwpYnJlYWt9d2hpbGUoITApO3JldHVybiExfSx5LnByb3RvdHlwZS5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3JzPWZ1bmN0aW9uKCl7Zm9yKHZhciBULF8sQSxQLFIsRj10aGlzLmdldEFsbEVkZ2VzKCksaj1GLmxlbmd0aCxLPTA7SzxqO0srKyl7aWYoVD1GW0tdLF89VC5zb3VyY2UsQT1ULnRhcmdldCxULmxjYT1udWxsLFQuc291cmNlSW5MY2E9XyxULnRhcmdldEluTGNhPUEsXz09QSl7VC5sY2E9Xy5nZXRPd25lcigpO2NvbnRpbnVlfWZvcihQPV8uZ2V0T3duZXIoKTtULmxjYT09bnVsbDspe2ZvcihULnRhcmdldEluTGNhPUEsUj1BLmdldE93bmVyKCk7VC5sY2E9PW51bGw7KXtpZihSPT1QKXtULmxjYT1SO2JyZWFrfWlmKFI9PXRoaXMucm9vdEdyYXBoKWJyZWFrO2lmKFQubGNhIT1udWxsKXRocm93ImFzc2VydCBmYWlsZWQiO1QudGFyZ2V0SW5MY2E9Ui5nZXRQYXJlbnQoKSxSPVQudGFyZ2V0SW5MY2EuZ2V0T3duZXIoKX1pZihQPT10aGlzLnJvb3RHcmFwaClicmVhaztULmxjYT09bnVsbCYmKFQuc291cmNlSW5MY2E9UC5nZXRQYXJlbnQoKSxQPVQuc291cmNlSW5MY2EuZ2V0T3duZXIoKSl9aWYoVC5sY2E9PW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCJ9fSx5LnByb3RvdHlwZS5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3I9ZnVuY3Rpb24oVCxfKXtpZihUPT1fKXJldHVybiBULmdldE93bmVyKCk7dmFyIEE9VC5nZXRPd25lcigpO2Rve2lmKEE9PW51bGwpYnJlYWs7dmFyIFA9Xy5nZXRPd25lcigpO2Rve2lmKFA9PW51bGwpYnJlYWs7aWYoUD09QSlyZXR1cm4gUDtQPVAuZ2V0UGFyZW50KCkuZ2V0T3duZXIoKX13aGlsZSghMCk7QT1BLmdldFBhcmVudCgpLmdldE93bmVyKCl9d2hpbGUoITApO3JldHVybiBBfSx5LnByb3RvdHlwZS5jYWxjSW5jbHVzaW9uVHJlZURlcHRocz1mdW5jdGlvbihULF8pe1Q9PW51bGwmJl89PW51bGwmJihUPXRoaXMucm9vdEdyYXBoLF89MSk7Zm9yKHZhciBBLFA9VC5nZXROb2RlcygpLFI9UC5sZW5ndGgsRj0wO0Y8UjtGKyspQT1QW0ZdLEEuaW5jbHVzaW9uVHJlZURlcHRoPV8sQS5jaGlsZCE9bnVsbCYmdGhpcy5jYWxjSW5jbHVzaW9uVHJlZURlcHRocyhBLmNoaWxkLF8rMSl9LHkucHJvdG90eXBlLmluY2x1ZGVzSW52YWxpZEVkZ2U9ZnVuY3Rpb24oKXtmb3IodmFyIFQsXz10aGlzLmVkZ2VzLmxlbmd0aCxBPTA7QTxfO0ErKylpZihUPXRoaXMuZWRnZXNbQV0sdGhpcy5pc09uZUFuY2VzdG9yT2ZPdGhlcihULnNvdXJjZSxULnRhcmdldCkpcmV0dXJuITA7cmV0dXJuITF9LHUuZXhwb3J0cz15fSxmdW5jdGlvbih1LGQscCl7dmFyIHY9cCgwKTtmdW5jdGlvbiBiKCl7fWZvcih2YXIgeSBpbiB2KWJbeV09dlt5XTtiLk1BWF9JVEVSQVRJT05TPTI1MDAsYi5ERUZBVUxUX0VER0VfTEVOR1RIPTUwLGIuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEg9LjQ1LGIuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEg9NDUwMCxiLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSD0uNCxiLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSD0xLGIuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj0zLjgsYi5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SPTEuNSxiLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OPSEwLGIuREVGQVVMVF9VU0VfU01BUlRfUkVQVUxTSU9OX1JBTkdFX0NBTENVTEFUSU9OPSEwLGIuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTD0uMyxiLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1I9LjMzLGIuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUPTFlMyxiLkFEQVBUQVRJT05fVVBQRVJfTk9ERV9MSU1JVD01ZTMsYi5NQVhfTk9ERV9ESVNQTEFDRU1FTlRfSU5DUkVNRU5UQUw9MTAwLGIuTUFYX05PREVfRElTUExBQ0VNRU5UPWIuTUFYX05PREVfRElTUExBQ0VNRU5UX0lOQ1JFTUVOVEFMKjMsYi5NSU5fUkVQVUxTSU9OX0RJU1Q9Yi5ERUZBVUxUX0VER0VfTEVOR1RILzEwLGIuQ09OVkVSR0VOQ0VfQ0hFQ0tfUEVSSU9EPTEwMCxiLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1I9LjEsYi5NSU5fRURHRV9MRU5HVEg9MSxiLkdSSURfQ0FMQ1VMQVRJT05fQ0hFQ0tfUEVSSU9EPTEwLHUuZXhwb3J0cz1ifSxmdW5jdGlvbih1LGQscCl7dmFyIHY9cCgxMik7ZnVuY3Rpb24gYigpe31iLmNhbGNTZXBhcmF0aW9uQW1vdW50PWZ1bmN0aW9uKHksVCxfLEEpe2lmKCF5LmludGVyc2VjdHMoVCkpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7dmFyIFA9bmV3IEFycmF5KDIpO3RoaXMuZGVjaWRlRGlyZWN0aW9uc0Zvck92ZXJsYXBwaW5nTm9kZXMoeSxULFApLF9bMF09TWF0aC5taW4oeS5nZXRSaWdodCgpLFQuZ2V0UmlnaHQoKSktTWF0aC5tYXgoeS54LFQueCksX1sxXT1NYXRoLm1pbih5LmdldEJvdHRvbSgpLFQuZ2V0Qm90dG9tKCkpLU1hdGgubWF4KHkueSxULnkpLHkuZ2V0WCgpPD1ULmdldFgoKSYmeS5nZXRSaWdodCgpPj1ULmdldFJpZ2h0KCk/X1swXSs9TWF0aC5taW4oVC5nZXRYKCkteS5nZXRYKCkseS5nZXRSaWdodCgpLVQuZ2V0UmlnaHQoKSk6VC5nZXRYKCk8PXkuZ2V0WCgpJiZULmdldFJpZ2h0KCk+PXkuZ2V0UmlnaHQoKSYmKF9bMF0rPU1hdGgubWluKHkuZ2V0WCgpLVQuZ2V0WCgpLFQuZ2V0UmlnaHQoKS15LmdldFJpZ2h0KCkpKSx5LmdldFkoKTw9VC5nZXRZKCkmJnkuZ2V0Qm90dG9tKCk+PVQuZ2V0Qm90dG9tKCk/X1sxXSs9TWF0aC5taW4oVC5nZXRZKCkteS5nZXRZKCkseS5nZXRCb3R0b20oKS1ULmdldEJvdHRvbSgpKTpULmdldFkoKTw9eS5nZXRZKCkmJlQuZ2V0Qm90dG9tKCk+PXkuZ2V0Qm90dG9tKCkmJihfWzFdKz1NYXRoLm1pbih5LmdldFkoKS1ULmdldFkoKSxULmdldEJvdHRvbSgpLXkuZ2V0Qm90dG9tKCkpKTt2YXIgUj1NYXRoLmFicygoVC5nZXRDZW50ZXJZKCkteS5nZXRDZW50ZXJZKCkpLyhULmdldENlbnRlclgoKS15LmdldENlbnRlclgoKSkpO1QuZ2V0Q2VudGVyWSgpPT09eS5nZXRDZW50ZXJZKCkmJlQuZ2V0Q2VudGVyWCgpPT09eS5nZXRDZW50ZXJYKCkmJihSPTEpO3ZhciBGPVIqX1swXSxqPV9bMV0vUjtfWzBdPGo/aj1fWzBdOkY9X1sxXSxfWzBdPS0xKlBbMF0qKGovMitBKSxfWzFdPS0xKlBbMV0qKEYvMitBKX0sYi5kZWNpZGVEaXJlY3Rpb25zRm9yT3ZlcmxhcHBpbmdOb2Rlcz1mdW5jdGlvbih5LFQsXyl7eS5nZXRDZW50ZXJYKCk8VC5nZXRDZW50ZXJYKCk/X1swXT0tMTpfWzBdPTEseS5nZXRDZW50ZXJZKCk8VC5nZXRDZW50ZXJZKCk/X1sxXT0tMTpfWzFdPTF9LGIuZ2V0SW50ZXJzZWN0aW9uMj1mdW5jdGlvbih5LFQsXyl7dmFyIEE9eS5nZXRDZW50ZXJYKCksUD15LmdldENlbnRlclkoKSxSPVQuZ2V0Q2VudGVyWCgpLEY9VC5nZXRDZW50ZXJZKCk7aWYoeS5pbnRlcnNlY3RzKFQpKXJldHVybiBfWzBdPUEsX1sxXT1QLF9bMl09UixfWzNdPUYsITA7dmFyIGo9eS5nZXRYKCksSz15LmdldFkoKSxlZT15LmdldFJpZ2h0KCksaWU9eS5nZXRYKCksb2U9eS5nZXRCb3R0b20oKSxwZT15LmdldFJpZ2h0KCksYmU9eS5nZXRXaWR0aEhhbGYoKSxhZT15LmdldEhlaWdodEhhbGYoKSxuZT1ULmdldFgoKSxzZT1ULmdldFkoKSxkZT1ULmdldFJpZ2h0KCksWD1ULmdldFgoKSxnZT1ULmdldEJvdHRvbSgpLFc9VC5nZXRSaWdodCgpLHhlPVQuZ2V0V2lkdGhIYWxmKCksVT1ULmdldEhlaWdodEhhbGYoKSxGZT0hMSxQZT0hMTtpZihBPT09Uil7aWYoUD5GKXJldHVybiBfWzBdPUEsX1sxXT1LLF9bMl09UixfWzNdPWdlLCExO2lmKFA8RilyZXR1cm4gX1swXT1BLF9bMV09b2UsX1syXT1SLF9bM109c2UsITF9ZWxzZSBpZihQPT09Ril7aWYoQT5SKXJldHVybiBfWzBdPWosX1sxXT1QLF9bMl09ZGUsX1szXT1GLCExO2lmKEE8UilyZXR1cm4gX1swXT1lZSxfWzFdPVAsX1syXT1uZSxfWzNdPUYsITF9ZWxzZXt2YXIgamU9eS5oZWlnaHQveS53aWR0aCxJZT1ULmhlaWdodC9ULndpZHRoLFNlPShGLVApLyhSLUEpLENlPXZvaWQgMCxrZT12b2lkIDAsS2U9dm9pZCAwLEZ0PXZvaWQgMCxOZT12b2lkIDAsZ249dm9pZCAwO2lmKC1qZT09PVNlP0E+Uj8oX1swXT1pZSxfWzFdPW9lLEZlPSEwKTooX1swXT1lZSxfWzFdPUssRmU9ITApOmplPT09U2UmJihBPlI/KF9bMF09aixfWzFdPUssRmU9ITApOihfWzBdPXBlLF9bMV09b2UsRmU9ITApKSwtSWU9PT1TZT9SPkE/KF9bMl09WCxfWzNdPWdlLFBlPSEwKTooX1syXT1kZSxfWzNdPXNlLFBlPSEwKTpJZT09PVNlJiYoUj5BPyhfWzJdPW5lLF9bM109c2UsUGU9ITApOihfWzJdPVcsX1szXT1nZSxQZT0hMCkpLEZlJiZQZSlyZXR1cm4hMTtpZihBPlI/UD5GPyhDZT10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKGplLFNlLDQpLGtlPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oSWUsU2UsMikpOihDZT10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1qZSxTZSwzKSxrZT10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1JZSxTZSwxKSk6UD5GPyhDZT10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1qZSxTZSwxKSxrZT10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1JZSxTZSwzKSk6KENlPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oamUsU2UsMiksa2U9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihJZSxTZSw0KSksIUZlKXN3aXRjaChDZSl7Y2FzZSAxOkZ0PUssS2U9QSstYWUvU2UsX1swXT1LZSxfWzFdPUZ0O2JyZWFrO2Nhc2UgMjpLZT1wZSxGdD1QK2JlKlNlLF9bMF09S2UsX1sxXT1GdDticmVhaztjYXNlIDM6RnQ9b2UsS2U9QSthZS9TZSxfWzBdPUtlLF9bMV09RnQ7YnJlYWs7Y2FzZSA0OktlPWllLEZ0PVArLWJlKlNlLF9bMF09S2UsX1sxXT1GdDticmVha31pZighUGUpc3dpdGNoKGtlKXtjYXNlIDE6Z249c2UsTmU9UistVS9TZSxfWzJdPU5lLF9bM109Z247YnJlYWs7Y2FzZSAyOk5lPVcsZ249Rit4ZSpTZSxfWzJdPU5lLF9bM109Z247YnJlYWs7Y2FzZSAzOmduPWdlLE5lPVIrVS9TZSxfWzJdPU5lLF9bM109Z247YnJlYWs7Y2FzZSA0Ok5lPVgsZ249RisteGUqU2UsX1syXT1OZSxfWzNdPWduO2JyZWFrfX1yZXR1cm4hMX0sYi5nZXRDYXJkaW5hbERpcmVjdGlvbj1mdW5jdGlvbih5LFQsXyl7cmV0dXJuIHk+VD9fOjErXyU0fSxiLmdldEludGVyc2VjdGlvbj1mdW5jdGlvbih5LFQsXyxBKXtpZihBPT1udWxsKXJldHVybiB0aGlzLmdldEludGVyc2VjdGlvbjIoeSxULF8pO3ZhciBQPXkueCxSPXkueSxGPVQueCxqPVQueSxLPV8ueCxlZT1fLnksaWU9QS54LG9lPUEueSxwZT12b2lkIDAsYmU9dm9pZCAwLGFlPXZvaWQgMCxuZT12b2lkIDAsc2U9dm9pZCAwLGRlPXZvaWQgMCxYPXZvaWQgMCxnZT12b2lkIDAsVz12b2lkIDA7cmV0dXJuIGFlPWotUixzZT1QLUYsWD1GKlItUCpqLG5lPW9lLWVlLGRlPUstaWUsZ2U9aWUqZWUtSypvZSxXPWFlKmRlLW5lKnNlLFc9PT0wP251bGw6KHBlPShzZSpnZS1kZSpYKS9XLGJlPShuZSpYLWFlKmdlKS9XLG5ldyB2KHBlLGJlKSl9LGIuYW5nbGVPZlZlY3Rvcj1mdW5jdGlvbih5LFQsXyxBKXt2YXIgUD12b2lkIDA7cmV0dXJuIHkhPT1fPyhQPU1hdGguYXRhbigoQS1UKS8oXy15KSksXzx5P1ArPU1hdGguUEk6QTxUJiYoUCs9dGhpcy5UV09fUEkpKTpBPFQ/UD10aGlzLk9ORV9BTkRfSEFMRl9QSTpQPXRoaXMuSEFMRl9QSSxQfSxiLmRvSW50ZXJzZWN0PWZ1bmN0aW9uKHksVCxfLEEpe3ZhciBQPXkueCxSPXkueSxGPVQueCxqPVQueSxLPV8ueCxlZT1fLnksaWU9QS54LG9lPUEueSxwZT0oRi1QKSoob2UtZWUpLShpZS1LKSooai1SKTtpZihwZT09PTApcmV0dXJuITE7dmFyIGJlPSgob2UtZWUpKihpZS1QKSsoSy1pZSkqKG9lLVIpKS9wZSxhZT0oKFItaikqKGllLVApKyhGLVApKihvZS1SKSkvcGU7cmV0dXJuIDA8YmUmJmJlPDEmJjA8YWUmJmFlPDF9LGIuSEFMRl9QST0uNSpNYXRoLlBJLGIuT05FX0FORF9IQUxGX1BJPTEuNSpNYXRoLlBJLGIuVFdPX1BJPTIqTWF0aC5QSSxiLlRIUkVFX1BJPTMqTWF0aC5QSSx1LmV4cG9ydHM9Yn0sZnVuY3Rpb24odSxkLHApe2Z1bmN0aW9uIHYoKXt9di5zaWduPWZ1bmN0aW9uKGIpe3JldHVybiBiPjA/MTpiPDA/LTE6MH0sdi5mbG9vcj1mdW5jdGlvbihiKXtyZXR1cm4gYjwwP01hdGguY2VpbChiKTpNYXRoLmZsb29yKGIpfSx2LmNlaWw9ZnVuY3Rpb24oYil7cmV0dXJuIGI8MD9NYXRoLmZsb29yKGIpOk1hdGguY2VpbChiKX0sdS5leHBvcnRzPXZ9LGZ1bmN0aW9uKHUsZCxwKXtmdW5jdGlvbiB2KCl7fXYuTUFYX1ZBTFVFPTIxNDc0ODM2NDcsdi5NSU5fVkFMVUU9LTIxNDc0ODM2NDgsdS5leHBvcnRzPXZ9LGZ1bmN0aW9uKHUsZCxwKXt2YXIgdj1mdW5jdGlvbigpe2Z1bmN0aW9uIFAoUixGKXtmb3IodmFyIGo9MDtqPEYubGVuZ3RoO2orKyl7dmFyIEs9RltqXTtLLmVudW1lcmFibGU9Sy5lbnVtZXJhYmxlfHwhMSxLLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gSyYmKEsud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLEsua2V5LEspfX1yZXR1cm4gZnVuY3Rpb24oUixGLGope3JldHVybiBGJiZQKFIucHJvdG90eXBlLEYpLGomJlAoUixqKSxSfX0oKTtmdW5jdGlvbiBiKFAsUil7aWYoIShQIGluc3RhbmNlb2YgUikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9dmFyIHk9ZnVuY3Rpb24oUil7cmV0dXJue3ZhbHVlOlIsbmV4dDpudWxsLHByZXY6bnVsbH19LFQ9ZnVuY3Rpb24oUixGLGosSyl7cmV0dXJuIFIhPT1udWxsP1IubmV4dD1GOksuaGVhZD1GLGohPT1udWxsP2oucHJldj1GOksudGFpbD1GLEYucHJldj1SLEYubmV4dD1qLEsubGVuZ3RoKyssRn0sXz1mdW5jdGlvbihSLEYpe3ZhciBqPVIucHJldixLPVIubmV4dDtyZXR1cm4gaiE9PW51bGw/ai5uZXh0PUs6Ri5oZWFkPUssSyE9PW51bGw/Sy5wcmV2PWo6Ri50YWlsPWosUi5wcmV2PVIubmV4dD1udWxsLEYubGVuZ3RoLS0sUn0sQT1mdW5jdGlvbigpe2Z1bmN0aW9uIFAoUil7dmFyIEY9dGhpcztiKHRoaXMsUCksdGhpcy5sZW5ndGg9MCx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCxSIT1udWxsJiZSLmZvckVhY2goZnVuY3Rpb24oail7cmV0dXJuIEYucHVzaChqKX0pfXJldHVybiB2KFAsW3trZXk6InNpemUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofX0se2tleToiaW5zZXJ0QmVmb3JlIix2YWx1ZTpmdW5jdGlvbihGLGope3JldHVybiBUKGoucHJldix5KEYpLGosdGhpcyl9fSx7a2V5OiJpbnNlcnRBZnRlciIsdmFsdWU6ZnVuY3Rpb24oRixqKXtyZXR1cm4gVChqLHkoRiksai5uZXh0LHRoaXMpfX0se2tleToiaW5zZXJ0Tm9kZUJlZm9yZSIsdmFsdWU6ZnVuY3Rpb24oRixqKXtyZXR1cm4gVChqLnByZXYsRixqLHRoaXMpfX0se2tleToiaW5zZXJ0Tm9kZUFmdGVyIix2YWx1ZTpmdW5jdGlvbihGLGope3JldHVybiBUKGosRixqLm5leHQsdGhpcyl9fSx7a2V5OiJwdXNoIix2YWx1ZTpmdW5jdGlvbihGKXtyZXR1cm4gVCh0aGlzLnRhaWwseShGKSxudWxsLHRoaXMpfX0se2tleToidW5zaGlmdCIsdmFsdWU6ZnVuY3Rpb24oRil7cmV0dXJuIFQobnVsbCx5KEYpLHRoaXMuaGVhZCx0aGlzKX19LHtrZXk6InJlbW92ZSIsdmFsdWU6ZnVuY3Rpb24oRil7cmV0dXJuIF8oRix0aGlzKX19LHtrZXk6InBvcCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gXyh0aGlzLnRhaWwsdGhpcykudmFsdWV9fSx7a2V5OiJwb3BOb2RlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBfKHRoaXMudGFpbCx0aGlzKX19LHtrZXk6InNoaWZ0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBfKHRoaXMuaGVhZCx0aGlzKS52YWx1ZX19LHtrZXk6InNoaWZ0Tm9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gXyh0aGlzLmhlYWQsdGhpcyl9fSx7a2V5OiJnZXRfb2JqZWN0X2F0Iix2YWx1ZTpmdW5jdGlvbihGKXtpZihGPD10aGlzLmxlbmd0aCgpKXtmb3IodmFyIGo9MSxLPXRoaXMuaGVhZDtqPEY7KUs9Sy5uZXh0LGorKztyZXR1cm4gSy52YWx1ZX19fSx7a2V5OiJzZXRfb2JqZWN0X2F0Iix2YWx1ZTpmdW5jdGlvbihGLGope2lmKEY8PXRoaXMubGVuZ3RoKCkpe2Zvcih2YXIgSz0xLGVlPXRoaXMuaGVhZDtLPEY7KWVlPWVlLm5leHQsSysrO2VlLnZhbHVlPWp9fX1dKSxQfSgpO3UuZXhwb3J0cz1BfSxmdW5jdGlvbih1LGQscCl7ZnVuY3Rpb24gdihiLHksVCl7dGhpcy54PW51bGwsdGhpcy55PW51bGwsYj09bnVsbCYmeT09bnVsbCYmVD09bnVsbD8odGhpcy54PTAsdGhpcy55PTApOnR5cGVvZiBiPT0ibnVtYmVyIiYmdHlwZW9mIHk9PSJudW1iZXIiJiZUPT1udWxsPyh0aGlzLng9Yix0aGlzLnk9eSk6Yi5jb25zdHJ1Y3Rvci5uYW1lPT0iUG9pbnQiJiZ5PT1udWxsJiZUPT1udWxsJiYoVD1iLHRoaXMueD1ULngsdGhpcy55PVQueSl9di5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnh9LHYucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55fSx2LnByb3RvdHlwZS5nZXRMb2NhdGlvbj1mdW5jdGlvbigpe3JldHVybiBuZXcgdih0aGlzLngsdGhpcy55KX0sdi5wcm90b3R5cGUuc2V0TG9jYXRpb249ZnVuY3Rpb24oYix5LFQpe2IuY29uc3RydWN0b3IubmFtZT09IlBvaW50IiYmeT09bnVsbCYmVD09bnVsbD8oVD1iLHRoaXMuc2V0TG9jYXRpb24oVC54LFQueSkpOnR5cGVvZiBiPT0ibnVtYmVyIiYmdHlwZW9mIHk9PSJudW1iZXIiJiZUPT1udWxsJiYocGFyc2VJbnQoYik9PWImJnBhcnNlSW50KHkpPT15P3RoaXMubW92ZShiLHkpOih0aGlzLng9TWF0aC5mbG9vcihiKy41KSx0aGlzLnk9TWF0aC5mbG9vcih5Ky41KSkpfSx2LnByb3RvdHlwZS5tb3ZlPWZ1bmN0aW9uKGIseSl7dGhpcy54PWIsdGhpcy55PXl9LHYucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihiLHkpe3RoaXMueCs9Yix0aGlzLnkrPXl9LHYucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihiKXtpZihiLmNvbnN0cnVjdG9yLm5hbWU9PSJQb2ludCIpe3ZhciB5PWI7cmV0dXJuIHRoaXMueD09eS54JiZ0aGlzLnk9PXkueX1yZXR1cm4gdGhpcz09Yn0sdi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHYoKS5jb25zdHJ1Y3Rvci5uYW1lKyJbeD0iK3RoaXMueCsiLHk9Iit0aGlzLnkrIl0ifSx1LmV4cG9ydHM9dn0sZnVuY3Rpb24odSxkLHApe2Z1bmN0aW9uIHYoYix5LFQsXyl7dGhpcy54PTAsdGhpcy55PTAsdGhpcy53aWR0aD0wLHRoaXMuaGVpZ2h0PTAsYiE9bnVsbCYmeSE9bnVsbCYmVCE9bnVsbCYmXyE9bnVsbCYmKHRoaXMueD1iLHRoaXMueT15LHRoaXMud2lkdGg9VCx0aGlzLmhlaWdodD1fKX12LnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueH0sdi5wcm90b3R5cGUuc2V0WD1mdW5jdGlvbihiKXt0aGlzLng9Yn0sdi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnl9LHYucHJvdG90eXBlLnNldFk9ZnVuY3Rpb24oYil7dGhpcy55PWJ9LHYucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2lkdGh9LHYucHJvdG90eXBlLnNldFdpZHRoPWZ1bmN0aW9uKGIpe3RoaXMud2lkdGg9Yn0sdi5wcm90b3R5cGUuZ2V0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVpZ2h0fSx2LnByb3RvdHlwZS5zZXRIZWlnaHQ9ZnVuY3Rpb24oYil7dGhpcy5oZWlnaHQ9Yn0sdi5wcm90b3R5cGUuZ2V0UmlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54K3RoaXMud2lkdGh9LHYucHJvdG90eXBlLmdldEJvdHRvbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkrdGhpcy5oZWlnaHR9LHYucHJvdG90eXBlLmludGVyc2VjdHM9ZnVuY3Rpb24oYil7cmV0dXJuISh0aGlzLmdldFJpZ2h0KCk8Yi54fHx0aGlzLmdldEJvdHRvbSgpPGIueXx8Yi5nZXRSaWdodCgpPHRoaXMueHx8Yi5nZXRCb3R0b20oKTx0aGlzLnkpfSx2LnByb3RvdHlwZS5nZXRDZW50ZXJYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueCt0aGlzLndpZHRoLzJ9LHYucHJvdG90eXBlLmdldE1pblg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYKCl9LHYucHJvdG90eXBlLmdldE1heFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYKCkrdGhpcy53aWR0aH0sdi5wcm90b3R5cGUuZ2V0Q2VudGVyWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkrdGhpcy5oZWlnaHQvMn0sdi5wcm90b3R5cGUuZ2V0TWluWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFkoKX0sdi5wcm90b3R5cGUuZ2V0TWF4WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFkoKSt0aGlzLmhlaWdodH0sdi5wcm90b3R5cGUuZ2V0V2lkdGhIYWxmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2lkdGgvMn0sdi5wcm90b3R5cGUuZ2V0SGVpZ2h0SGFsZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhlaWdodC8yfSx1LmV4cG9ydHM9dn0sZnVuY3Rpb24odSxkLHApe3ZhciB2PXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJnR5cGVvZiBTeW1ib2wuaXRlcmF0b3I9PSJzeW1ib2wiP2Z1bmN0aW9uKHkpe3JldHVybiB0eXBlb2YgeX06ZnVuY3Rpb24oeSl7cmV0dXJuIHkmJnR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJnkuY29uc3RydWN0b3I9PT1TeW1ib2wmJnkhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB5fTtmdW5jdGlvbiBiKCl7fWIubGFzdElEPTAsYi5jcmVhdGVJRD1mdW5jdGlvbih5KXtyZXR1cm4gYi5pc1ByaW1pdGl2ZSh5KT95Oih5LnVuaXF1ZUlEIT1udWxsfHwoeS51bmlxdWVJRD1iLmdldFN0cmluZygpLGIubGFzdElEKyspLHkudW5pcXVlSUQpfSxiLmdldFN0cmluZz1mdW5jdGlvbih5KXtyZXR1cm4geT09bnVsbCYmKHk9Yi5sYXN0SUQpLCJPYmplY3QjIit5fSxiLmlzUHJpbWl0aXZlPWZ1bmN0aW9uKHkpe3ZhciBUPXR5cGVvZiB5PiJ1Ij8idW5kZWZpbmVkIjp2KHkpO3JldHVybiB5PT1udWxsfHxUIT0ib2JqZWN0IiYmVCE9ImZ1bmN0aW9uIn0sdS5leHBvcnRzPWJ9LGZ1bmN0aW9uKHUsZCxwKXtmdW5jdGlvbiB2KEspe2lmKEFycmF5LmlzQXJyYXkoSykpe2Zvcih2YXIgZWU9MCxpZT1BcnJheShLLmxlbmd0aCk7ZWU8Sy5sZW5ndGg7ZWUrKylpZVtlZV09S1tlZV07cmV0dXJuIGllfWVsc2UgcmV0dXJuIEFycmF5LmZyb20oSyl9dmFyIGI9cCgwKSx5PXAoNiksVD1wKDMpLF89cCgxKSxBPXAoNSksUD1wKDQpLFI9cCgxNyksRj1wKDI3KTtmdW5jdGlvbiBqKEspe0YuY2FsbCh0aGlzKSx0aGlzLmxheW91dFF1YWxpdHk9Yi5RVUFMSVRZLHRoaXMuY3JlYXRlQmVuZHNBc05lZWRlZD1iLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRCx0aGlzLmluY3JlbWVudGFsPWIuREVGQVVMVF9JTkNSRU1FTlRBTCx0aGlzLmFuaW1hdGlvbk9uTGF5b3V0PWIuREVGQVVMVF9BTklNQVRJT05fT05fTEFZT1VULHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0PWIuREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVCx0aGlzLmFuaW1hdGlvblBlcmlvZD1iLkRFRkFVTFRfQU5JTUFUSU9OX1BFUklPRCx0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzPWIuREVGQVVMVF9VTklGT1JNX0xFQUZfTk9ERV9TSVpFUyx0aGlzLmVkZ2VUb0R1bW15Tm9kZXM9bmV3IE1hcCx0aGlzLmdyYXBoTWFuYWdlcj1uZXcgeSh0aGlzKSx0aGlzLmlzTGF5b3V0RmluaXNoZWQ9ITEsdGhpcy5pc1N1YkxheW91dD0hMSx0aGlzLmlzUmVtb3RlVXNlPSExLEshPW51bGwmJih0aGlzLmlzUmVtb3RlVXNlPUspfWouUkFORE9NX1NFRUQ9MSxqLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEYucHJvdG90eXBlKSxqLnByb3RvdHlwZS5nZXRHcmFwaE1hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXJ9LGoucHJvdG90eXBlLmdldEFsbE5vZGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCl9LGoucHJvdG90eXBlLmdldEFsbEVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCl9LGoucHJvdG90eXBlLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCl9LGoucHJvdG90eXBlLm5ld0dyYXBoTWFuYWdlcj1mdW5jdGlvbigpe3ZhciBLPW5ldyB5KHRoaXMpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcj1LLEt9LGoucHJvdG90eXBlLm5ld0dyYXBoPWZ1bmN0aW9uKEspe3JldHVybiBuZXcgQShudWxsLHRoaXMuZ3JhcGhNYW5hZ2VyLEspfSxqLnByb3RvdHlwZS5uZXdOb2RlPWZ1bmN0aW9uKEspe3JldHVybiBuZXcgVCh0aGlzLmdyYXBoTWFuYWdlcixLKX0sai5wcm90b3R5cGUubmV3RWRnZT1mdW5jdGlvbihLKXtyZXR1cm4gbmV3IF8obnVsbCxudWxsLEspfSxqLnByb3RvdHlwZS5jaGVja0xheW91dFN1Y2Nlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpPT1udWxsfHx0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKS5sZW5ndGg9PTB8fHRoaXMuZ3JhcGhNYW5hZ2VyLmluY2x1ZGVzSW52YWxpZEVkZ2UoKX0sai5wcm90b3R5cGUucnVuTGF5b3V0PWZ1bmN0aW9uKCl7dGhpcy5pc0xheW91dEZpbmlzaGVkPSExLHRoaXMudGlsaW5nUHJlTGF5b3V0JiZ0aGlzLnRpbGluZ1ByZUxheW91dCgpLHRoaXMuaW5pdFBhcmFtZXRlcnMoKTt2YXIgSztyZXR1cm4gdGhpcy5jaGVja0xheW91dFN1Y2Nlc3MoKT9LPSExOks9dGhpcy5sYXlvdXQoKSxiLkFOSU1BVEU9PT0iZHVyaW5nIj8hMTooSyYmKHRoaXMuaXNTdWJMYXlvdXR8fHRoaXMuZG9Qb3N0TGF5b3V0KCkpLHRoaXMudGlsaW5nUG9zdExheW91dCYmdGhpcy50aWxpbmdQb3N0TGF5b3V0KCksdGhpcy5pc0xheW91dEZpbmlzaGVkPSEwLEspfSxqLnByb3RvdHlwZS5kb1Bvc3RMYXlvdXQ9ZnVuY3Rpb24oKXt0aGlzLmluY3JlbWVudGFsfHx0aGlzLnRyYW5zZm9ybSgpLHRoaXMudXBkYXRlKCl9LGoucHJvdG90eXBlLnVwZGF0ZTI9ZnVuY3Rpb24oKXtpZih0aGlzLmNyZWF0ZUJlbmRzQXNOZWVkZWQmJih0aGlzLmNyZWF0ZUJlbmRwb2ludHNGcm9tRHVtbXlOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKSksIXRoaXMuaXNSZW1vdGVVc2Upe2Zvcih2YXIgSz10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxFZGdlcygpLGVlPTA7ZWU8Sy5sZW5ndGg7ZWUrKylLW2VlXTtmb3IodmFyIGllPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXROb2RlcygpLGVlPTA7ZWU8aWUubGVuZ3RoO2VlKyspaWVbZWVdO3RoaXMudXBkYXRlKHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKSl9fSxqLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oSyl7aWYoSz09bnVsbCl0aGlzLnVwZGF0ZTIoKTtlbHNlIGlmKEsgaW5zdGFuY2VvZiBUKXt2YXIgZWU9SztpZihlZS5nZXRDaGlsZCgpIT1udWxsKWZvcih2YXIgaWU9ZWUuZ2V0Q2hpbGQoKS5nZXROb2RlcygpLG9lPTA7b2U8aWUubGVuZ3RoO29lKyspdXBkYXRlKGllW29lXSk7aWYoZWUudkdyYXBoT2JqZWN0IT1udWxsKXt2YXIgcGU9ZWUudkdyYXBoT2JqZWN0O3BlLnVwZGF0ZShlZSl9fWVsc2UgaWYoSyBpbnN0YW5jZW9mIF8pe3ZhciBiZT1LO2lmKGJlLnZHcmFwaE9iamVjdCE9bnVsbCl7dmFyIGFlPWJlLnZHcmFwaE9iamVjdDthZS51cGRhdGUoYmUpfX1lbHNlIGlmKEsgaW5zdGFuY2VvZiBBKXt2YXIgbmU9SztpZihuZS52R3JhcGhPYmplY3QhPW51bGwpe3ZhciBzZT1uZS52R3JhcGhPYmplY3Q7c2UudXBkYXRlKG5lKX19fSxqLnByb3RvdHlwZS5pbml0UGFyYW1ldGVycz1mdW5jdGlvbigpe3RoaXMuaXNTdWJMYXlvdXR8fCh0aGlzLmxheW91dFF1YWxpdHk9Yi5RVUFMSVRZLHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0PWIuREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVCx0aGlzLmFuaW1hdGlvblBlcmlvZD1iLkRFRkFVTFRfQU5JTUFUSU9OX1BFUklPRCx0aGlzLmFuaW1hdGlvbk9uTGF5b3V0PWIuREVGQVVMVF9BTklNQVRJT05fT05fTEFZT1VULHRoaXMuaW5jcmVtZW50YWw9Yi5ERUZBVUxUX0lOQ1JFTUVOVEFMLHRoaXMuY3JlYXRlQmVuZHNBc05lZWRlZD1iLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRCx0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzPWIuREVGQVVMVF9VTklGT1JNX0xFQUZfTk9ERV9TSVpFUyksdGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQmJih0aGlzLmFuaW1hdGlvbk9uTGF5b3V0PSExKX0sai5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKEspe2lmKEs9PW51bGwpdGhpcy50cmFuc2Zvcm0obmV3IFAoMCwwKSk7ZWxzZXt2YXIgZWU9bmV3IFIsaWU9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLnVwZGF0ZUxlZnRUb3AoKTtpZihpZSE9bnVsbCl7ZWUuc2V0V29ybGRPcmdYKEsueCksZWUuc2V0V29ybGRPcmdZKEsueSksZWUuc2V0RGV2aWNlT3JnWChpZS54KSxlZS5zZXREZXZpY2VPcmdZKGllLnkpO2Zvcih2YXIgb2U9dGhpcy5nZXRBbGxOb2RlcygpLHBlLGJlPTA7YmU8b2UubGVuZ3RoO2JlKyspcGU9b2VbYmVdLHBlLnRyYW5zZm9ybShlZSl9fX0sai5wcm90b3R5cGUucG9zaXRpb25Ob2Rlc1JhbmRvbWx5PWZ1bmN0aW9uKEspe2lmKEs9PW51bGwpdGhpcy5wb3NpdGlvbk5vZGVzUmFuZG9tbHkodGhpcy5nZXRHcmFwaE1hbmFnZXIoKS5nZXRSb290KCkpLHRoaXMuZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0Um9vdCgpLnVwZGF0ZUJvdW5kcyghMCk7ZWxzZSBmb3IodmFyIGVlLGllLG9lPUsuZ2V0Tm9kZXMoKSxwZT0wO3BlPG9lLmxlbmd0aDtwZSsrKWVlPW9lW3BlXSxpZT1lZS5nZXRDaGlsZCgpLGllPT1udWxsfHxpZS5nZXROb2RlcygpLmxlbmd0aD09MD9lZS5zY2F0dGVyKCk6KHRoaXMucG9zaXRpb25Ob2Rlc1JhbmRvbWx5KGllKSxlZS51cGRhdGVCb3VuZHMoKSl9LGoucHJvdG90eXBlLmdldEZsYXRGb3Jlc3Q9ZnVuY3Rpb24oKXtmb3IodmFyIEs9W10sZWU9ITAsaWU9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldE5vZGVzKCksb2U9ITAscGU9MDtwZTxpZS5sZW5ndGg7cGUrKylpZVtwZV0uZ2V0Q2hpbGQoKSE9bnVsbCYmKG9lPSExKTtpZighb2UpcmV0dXJuIEs7dmFyIGJlPW5ldyBTZXQsYWU9W10sbmU9bmV3IE1hcCxzZT1bXTtmb3Ioc2U9c2UuY29uY2F0KGllKTtzZS5sZW5ndGg+MCYmZWU7KXtmb3IoYWUucHVzaChzZVswXSk7YWUubGVuZ3RoPjAmJmVlOyl7dmFyIGRlPWFlWzBdO2FlLnNwbGljZSgwLDEpLGJlLmFkZChkZSk7Zm9yKHZhciBYPWRlLmdldEVkZ2VzKCkscGU9MDtwZTxYLmxlbmd0aDtwZSsrKXt2YXIgZ2U9WFtwZV0uZ2V0T3RoZXJFbmQoZGUpO2lmKG5lLmdldChkZSkhPWdlKWlmKCFiZS5oYXMoZ2UpKWFlLnB1c2goZ2UpLG5lLnNldChnZSxkZSk7ZWxzZXtlZT0hMTticmVha319fWlmKCFlZSlLPVtdO2Vsc2V7dmFyIFc9W10uY29uY2F0KHYoYmUpKTtLLnB1c2goVyk7Zm9yKHZhciBwZT0wO3BlPFcubGVuZ3RoO3BlKyspe3ZhciB4ZT1XW3BlXSxVPXNlLmluZGV4T2YoeGUpO1U+LTEmJnNlLnNwbGljZShVLDEpfWJlPW5ldyBTZXQsbmU9bmV3IE1hcH19cmV0dXJuIEt9LGoucHJvdG90eXBlLmNyZWF0ZUR1bW15Tm9kZXNGb3JCZW5kcG9pbnRzPWZ1bmN0aW9uKEspe2Zvcih2YXIgZWU9W10saWU9Sy5zb3VyY2Usb2U9dGhpcy5ncmFwaE1hbmFnZXIuY2FsY0xvd2VzdENvbW1vbkFuY2VzdG9yKEsuc291cmNlLEsudGFyZ2V0KSxwZT0wO3BlPEsuYmVuZHBvaW50cy5sZW5ndGg7cGUrKyl7dmFyIGJlPXRoaXMubmV3Tm9kZShudWxsKTtiZS5zZXRSZWN0KG5ldyBQb2ludCgwLDApLG5ldyBEaW1lbnNpb24oMSwxKSksb2UuYWRkKGJlKTt2YXIgYWU9dGhpcy5uZXdFZGdlKG51bGwpO3RoaXMuZ3JhcGhNYW5hZ2VyLmFkZChhZSxpZSxiZSksZWUuYWRkKGJlKSxpZT1iZX12YXIgYWU9dGhpcy5uZXdFZGdlKG51bGwpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlci5hZGQoYWUsaWUsSy50YXJnZXQpLHRoaXMuZWRnZVRvRHVtbXlOb2Rlcy5zZXQoSyxlZSksSy5pc0ludGVyR3JhcGgoKT90aGlzLmdyYXBoTWFuYWdlci5yZW1vdmUoSyk6b2UucmVtb3ZlKEspLGVlfSxqLnByb3RvdHlwZS5jcmVhdGVCZW5kcG9pbnRzRnJvbUR1bW15Tm9kZXM9ZnVuY3Rpb24oKXt2YXIgSz1bXTtLPUsuY29uY2F0KHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCkpLEs9W10uY29uY2F0KHYodGhpcy5lZGdlVG9EdW1teU5vZGVzLmtleXMoKSkpLmNvbmNhdChLKTtmb3IodmFyIGVlPTA7ZWU8Sy5sZW5ndGg7ZWUrKyl7dmFyIGllPUtbZWVdO2lmKGllLmJlbmRwb2ludHMubGVuZ3RoPjApe2Zvcih2YXIgb2U9dGhpcy5lZGdlVG9EdW1teU5vZGVzLmdldChpZSkscGU9MDtwZTxvZS5sZW5ndGg7cGUrKyl7dmFyIGJlPW9lW3BlXSxhZT1uZXcgUChiZS5nZXRDZW50ZXJYKCksYmUuZ2V0Q2VudGVyWSgpKSxuZT1pZS5iZW5kcG9pbnRzLmdldChwZSk7bmUueD1hZS54LG5lLnk9YWUueSxiZS5nZXRPd25lcigpLnJlbW92ZShiZSl9dGhpcy5ncmFwaE1hbmFnZXIuYWRkKGllLGllLnNvdXJjZSxpZS50YXJnZXQpfX19LGoudHJhbnNmb3JtPWZ1bmN0aW9uKEssZWUsaWUsb2Upe2lmKGllIT1udWxsJiZvZSE9bnVsbCl7dmFyIHBlPWVlO2lmKEs8PTUwKXt2YXIgYmU9ZWUvaWU7cGUtPShlZS1iZSkvNTAqKDUwLUspfWVsc2V7dmFyIGFlPWVlKm9lO3BlKz0oYWUtZWUpLzUwKihLLTUwKX1yZXR1cm4gcGV9ZWxzZXt2YXIgbmUsc2U7cmV0dXJuIEs8PTUwPyhuZT05KmVlLzUwMCxzZT1lZS8xMCk6KG5lPTkqZWUvNTAsc2U9LTgqZWUpLG5lKksrc2V9fSxqLmZpbmRDZW50ZXJPZlRyZWU9ZnVuY3Rpb24oSyl7dmFyIGVlPVtdO2VlPWVlLmNvbmNhdChLKTt2YXIgaWU9W10sb2U9bmV3IE1hcCxwZT0hMSxiZT1udWxsOyhlZS5sZW5ndGg9PTF8fGVlLmxlbmd0aD09MikmJihwZT0hMCxiZT1lZVswXSk7Zm9yKHZhciBhZT0wO2FlPGVlLmxlbmd0aDthZSsrKXt2YXIgbmU9ZWVbYWVdLHNlPW5lLmdldE5laWdoYm9yc0xpc3QoKS5zaXplO29lLnNldChuZSxuZS5nZXROZWlnaGJvcnNMaXN0KCkuc2l6ZSksc2U9PTEmJmllLnB1c2gobmUpfXZhciBkZT1bXTtmb3IoZGU9ZGUuY29uY2F0KGllKTshcGU7KXt2YXIgWD1bXTtYPVguY29uY2F0KGRlKSxkZT1bXTtmb3IodmFyIGFlPTA7YWU8ZWUubGVuZ3RoO2FlKyspe3ZhciBuZT1lZVthZV0sZ2U9ZWUuaW5kZXhPZihuZSk7Z2U+PTAmJmVlLnNwbGljZShnZSwxKTt2YXIgVz1uZS5nZXROZWlnaGJvcnNMaXN0KCk7Vy5mb3JFYWNoKGZ1bmN0aW9uKEZlKXtpZihpZS5pbmRleE9mKEZlKTwwKXt2YXIgUGU9b2UuZ2V0KEZlKSxqZT1QZS0xO2plPT0xJiZkZS5wdXNoKEZlKSxvZS5zZXQoRmUsamUpfX0pfWllPWllLmNvbmNhdChkZSksKGVlLmxlbmd0aD09MXx8ZWUubGVuZ3RoPT0yKSYmKHBlPSEwLGJlPWVlWzBdKX1yZXR1cm4gYmV9LGoucHJvdG90eXBlLnNldEdyYXBoTWFuYWdlcj1mdW5jdGlvbihLKXt0aGlzLmdyYXBoTWFuYWdlcj1LfSx1LmV4cG9ydHM9an0sZnVuY3Rpb24odSxkLHApe2Z1bmN0aW9uIHYoKXt9di5zZWVkPTEsdi54PTAsdi5uZXh0RG91YmxlPWZ1bmN0aW9uKCl7cmV0dXJuIHYueD1NYXRoLnNpbih2LnNlZWQrKykqMWU0LHYueC1NYXRoLmZsb29yKHYueCl9LHUuZXhwb3J0cz12fSxmdW5jdGlvbih1LGQscCl7dmFyIHY9cCg0KTtmdW5jdGlvbiBiKHksVCl7dGhpcy5sd29ybGRPcmdYPTAsdGhpcy5sd29ybGRPcmdZPTAsdGhpcy5sZGV2aWNlT3JnWD0wLHRoaXMubGRldmljZU9yZ1k9MCx0aGlzLmx3b3JsZEV4dFg9MSx0aGlzLmx3b3JsZEV4dFk9MSx0aGlzLmxkZXZpY2VFeHRYPTEsdGhpcy5sZGV2aWNlRXh0WT0xfWIucHJvdG90eXBlLmdldFdvcmxkT3JnWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmx3b3JsZE9yZ1h9LGIucHJvdG90eXBlLnNldFdvcmxkT3JnWD1mdW5jdGlvbih5KXt0aGlzLmx3b3JsZE9yZ1g9eX0sYi5wcm90b3R5cGUuZ2V0V29ybGRPcmdZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubHdvcmxkT3JnWX0sYi5wcm90b3R5cGUuc2V0V29ybGRPcmdZPWZ1bmN0aW9uKHkpe3RoaXMubHdvcmxkT3JnWT15fSxiLnByb3RvdHlwZS5nZXRXb3JsZEV4dFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sd29ybGRFeHRYfSxiLnByb3RvdHlwZS5zZXRXb3JsZEV4dFg9ZnVuY3Rpb24oeSl7dGhpcy5sd29ybGRFeHRYPXl9LGIucHJvdG90eXBlLmdldFdvcmxkRXh0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmx3b3JsZEV4dFl9LGIucHJvdG90eXBlLnNldFdvcmxkRXh0WT1mdW5jdGlvbih5KXt0aGlzLmx3b3JsZEV4dFk9eX0sYi5wcm90b3R5cGUuZ2V0RGV2aWNlT3JnWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VPcmdYfSxiLnByb3RvdHlwZS5zZXREZXZpY2VPcmdYPWZ1bmN0aW9uKHkpe3RoaXMubGRldmljZU9yZ1g9eX0sYi5wcm90b3R5cGUuZ2V0RGV2aWNlT3JnWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VPcmdZfSxiLnByb3RvdHlwZS5zZXREZXZpY2VPcmdZPWZ1bmN0aW9uKHkpe3RoaXMubGRldmljZU9yZ1k9eX0sYi5wcm90b3R5cGUuZ2V0RGV2aWNlRXh0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VFeHRYfSxiLnByb3RvdHlwZS5zZXREZXZpY2VFeHRYPWZ1bmN0aW9uKHkpe3RoaXMubGRldmljZUV4dFg9eX0sYi5wcm90b3R5cGUuZ2V0RGV2aWNlRXh0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VFeHRZfSxiLnByb3RvdHlwZS5zZXREZXZpY2VFeHRZPWZ1bmN0aW9uKHkpe3RoaXMubGRldmljZUV4dFk9eX0sYi5wcm90b3R5cGUudHJhbnNmb3JtWD1mdW5jdGlvbih5KXt2YXIgVD0wLF89dGhpcy5sd29ybGRFeHRYO3JldHVybiBfIT0wJiYoVD10aGlzLmxkZXZpY2VPcmdYKyh5LXRoaXMubHdvcmxkT3JnWCkqdGhpcy5sZGV2aWNlRXh0WC9fKSxUfSxiLnByb3RvdHlwZS50cmFuc2Zvcm1ZPWZ1bmN0aW9uKHkpe3ZhciBUPTAsXz10aGlzLmx3b3JsZEV4dFk7cmV0dXJuIF8hPTAmJihUPXRoaXMubGRldmljZU9yZ1krKHktdGhpcy5sd29ybGRPcmdZKSp0aGlzLmxkZXZpY2VFeHRZL18pLFR9LGIucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1YPWZ1bmN0aW9uKHkpe3ZhciBUPTAsXz10aGlzLmxkZXZpY2VFeHRYO3JldHVybiBfIT0wJiYoVD10aGlzLmx3b3JsZE9yZ1grKHktdGhpcy5sZGV2aWNlT3JnWCkqdGhpcy5sd29ybGRFeHRYL18pLFR9LGIucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1ZPWZ1bmN0aW9uKHkpe3ZhciBUPTAsXz10aGlzLmxkZXZpY2VFeHRZO3JldHVybiBfIT0wJiYoVD10aGlzLmx3b3JsZE9yZ1krKHktdGhpcy5sZGV2aWNlT3JnWSkqdGhpcy5sd29ybGRFeHRZL18pLFR9LGIucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1Qb2ludD1mdW5jdGlvbih5KXt2YXIgVD1uZXcgdih0aGlzLmludmVyc2VUcmFuc2Zvcm1YKHkueCksdGhpcy5pbnZlcnNlVHJhbnNmb3JtWSh5LnkpKTtyZXR1cm4gVH0sdS5leHBvcnRzPWJ9LGZ1bmN0aW9uKHUsZCxwKXtmdW5jdGlvbiB2KEYpe2lmKEFycmF5LmlzQXJyYXkoRikpe2Zvcih2YXIgaj0wLEs9QXJyYXkoRi5sZW5ndGgpO2o8Ri5sZW5ndGg7aisrKUtbal09RltqXTtyZXR1cm4gS31lbHNlIHJldHVybiBBcnJheS5mcm9tKEYpfXZhciBiPXAoMTUpLHk9cCg3KSxUPXAoMCksXz1wKDgpLEE9cCg5KTtmdW5jdGlvbiBQKCl7Yi5jYWxsKHRoaXMpLHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbj15LkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OLHRoaXMuaWRlYWxFZGdlTGVuZ3RoPXkuREVGQVVMVF9FREdFX0xFTkdUSCx0aGlzLnNwcmluZ0NvbnN0YW50PXkuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEgsdGhpcy5yZXB1bHNpb25Db25zdGFudD15LkRFRkFVTFRfUkVQVUxTSU9OX1NUUkVOR1RILHRoaXMuZ3Jhdml0eUNvbnN0YW50PXkuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RILHRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQ9eS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEgsdGhpcy5ncmF2aXR5UmFuZ2VGYWN0b3I9eS5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMuY29tcG91bmRHcmF2aXR5UmFuZ2VGYWN0b3I9eS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMuZGlzcGxhY2VtZW50VGhyZXNob2xkUGVyTm9kZT0zKnkuREVGQVVMVF9FREdFX0xFTkdUSC8xMDAsdGhpcy5jb29saW5nRmFjdG9yPXkuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCx0aGlzLmluaXRpYWxDb29saW5nRmFjdG9yPXkuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCx0aGlzLnRvdGFsRGlzcGxhY2VtZW50PTAsdGhpcy5vbGRUb3RhbERpc3BsYWNlbWVudD0wLHRoaXMubWF4SXRlcmF0aW9ucz15Lk1BWF9JVEVSQVRJT05TfVAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYi5wcm90b3R5cGUpO2Zvcih2YXIgUiBpbiBiKVBbUl09YltSXTtQLnByb3RvdHlwZS5pbml0UGFyYW1ldGVycz1mdW5jdGlvbigpe2IucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzLmNhbGwodGhpcyxhcmd1bWVudHMpLHRoaXMudG90YWxJdGVyYXRpb25zPTAsdGhpcy5ub3RBbmltYXRlZEl0ZXJhdGlvbnM9MCx0aGlzLnVzZUZSR3JpZFZhcmlhbnQ9eS5ERUZBVUxUX1VTRV9TTUFSVF9SRVBVTFNJT05fUkFOR0VfQ0FMQ1VMQVRJT04sdGhpcy5ncmlkPVtdfSxQLnByb3RvdHlwZS5jYWxjSWRlYWxFZGdlTGVuZ3Rocz1mdW5jdGlvbigpe2Zvcih2YXIgRixqLEssZWUsaWUsb2UscGU9dGhpcy5nZXRHcmFwaE1hbmFnZXIoKS5nZXRBbGxFZGdlcygpLGJlPTA7YmU8cGUubGVuZ3RoO2JlKyspRj1wZVtiZV0sRi5pZGVhbExlbmd0aD10aGlzLmlkZWFsRWRnZUxlbmd0aCxGLmlzSW50ZXJHcmFwaCYmKEs9Ri5nZXRTb3VyY2UoKSxlZT1GLmdldFRhcmdldCgpLGllPUYuZ2V0U291cmNlSW5MY2EoKS5nZXRFc3RpbWF0ZWRTaXplKCksb2U9Ri5nZXRUYXJnZXRJbkxjYSgpLmdldEVzdGltYXRlZFNpemUoKSx0aGlzLnVzZVNtYXJ0SWRlYWxFZGdlTGVuZ3RoQ2FsY3VsYXRpb24mJihGLmlkZWFsTGVuZ3RoKz1pZStvZS0yKlQuU0lNUExFX05PREVfU0laRSksaj1GLmdldExjYSgpLmdldEluY2x1c2lvblRyZWVEZXB0aCgpLEYuaWRlYWxMZW5ndGgrPXkuREVGQVVMVF9FREdFX0xFTkdUSCp5LlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1IqKEsuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCkrZWUuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCktMipqKSl9LFAucHJvdG90eXBlLmluaXRTcHJpbmdFbWJlZGRlcj1mdW5jdGlvbigpe3ZhciBGPXRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGg7dGhpcy5pbmNyZW1lbnRhbD8oRj55LkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCYmKHRoaXMuY29vbGluZ0ZhY3Rvcj1NYXRoLm1heCh0aGlzLmNvb2xpbmdGYWN0b3IqeS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SLHRoaXMuY29vbGluZ0ZhY3Rvci0oRi15LkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCkvKHkuQURBUFRBVElPTl9VUFBFUl9OT0RFX0xJTUlULXkuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKSp0aGlzLmNvb2xpbmdGYWN0b3IqKDEteS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SKSkpLHRoaXMubWF4Tm9kZURpc3BsYWNlbWVudD15Lk1BWF9OT0RFX0RJU1BMQUNFTUVOVF9JTkNSRU1FTlRBTCk6KEY+eS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQ/dGhpcy5jb29saW5nRmFjdG9yPU1hdGgubWF4KHkuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUiwxLShGLXkuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKS8oeS5BREFQVEFUSU9OX1VQUEVSX05PREVfTElNSVQteS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpKigxLXkuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUikpOnRoaXMuY29vbGluZ0ZhY3Rvcj0xLHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3I9dGhpcy5jb29saW5nRmFjdG9yLHRoaXMubWF4Tm9kZURpc3BsYWNlbWVudD15Lk1BWF9OT0RFX0RJU1BMQUNFTUVOVCksdGhpcy5tYXhJdGVyYXRpb25zPU1hdGgubWF4KHRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGgqNSx0aGlzLm1heEl0ZXJhdGlvbnMpLHRoaXMudG90YWxEaXNwbGFjZW1lbnRUaHJlc2hvbGQ9dGhpcy5kaXNwbGFjZW1lbnRUaHJlc2hvbGRQZXJOb2RlKnRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGgsdGhpcy5yZXB1bHNpb25SYW5nZT10aGlzLmNhbGNSZXB1bHNpb25SYW5nZSgpfSxQLnByb3RvdHlwZS5jYWxjU3ByaW5nRm9yY2VzPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPXRoaXMuZ2V0QWxsRWRnZXMoKSxqLEs9MDtLPEYubGVuZ3RoO0srKylqPUZbS10sdGhpcy5jYWxjU3ByaW5nRm9yY2UoaixqLmlkZWFsTGVuZ3RoKX0sUC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvbkZvcmNlcz1mdW5jdGlvbigpe3ZhciBGPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMCxqPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMSxLLGVlLGllLG9lLHBlPXRoaXMuZ2V0QWxsTm9kZXMoKSxiZTtpZih0aGlzLnVzZUZSR3JpZFZhcmlhbnQpZm9yKHRoaXMudG90YWxJdGVyYXRpb25zJXkuR1JJRF9DQUxDVUxBVElPTl9DSEVDS19QRVJJT0Q9PTEmJkYmJnRoaXMudXBkYXRlR3JpZCgpLGJlPW5ldyBTZXQsSz0wO0s8cGUubGVuZ3RoO0srKylpZT1wZVtLXSx0aGlzLmNhbGN1bGF0ZVJlcHVsc2lvbkZvcmNlT2ZBTm9kZShpZSxiZSxGLGopLGJlLmFkZChpZSk7ZWxzZSBmb3IoSz0wO0s8cGUubGVuZ3RoO0srKylmb3IoaWU9cGVbS10sZWU9SysxO2VlPHBlLmxlbmd0aDtlZSsrKW9lPXBlW2VlXSxpZS5nZXRPd25lcigpPT1vZS5nZXRPd25lcigpJiZ0aGlzLmNhbGNSZXB1bHNpb25Gb3JjZShpZSxvZSl9LFAucHJvdG90eXBlLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2VzPWZ1bmN0aW9uKCl7Zm9yKHZhciBGLGo9dGhpcy5nZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpLEs9MDtLPGoubGVuZ3RoO0srKylGPWpbS10sdGhpcy5jYWxjR3Jhdml0YXRpb25hbEZvcmNlKEYpfSxQLnByb3RvdHlwZS5tb3ZlTm9kZXM9ZnVuY3Rpb24oKXtmb3IodmFyIEY9dGhpcy5nZXRBbGxOb2RlcygpLGosSz0wO0s8Ri5sZW5ndGg7SysrKWo9RltLXSxqLm1vdmUoKX0sUC5wcm90b3R5cGUuY2FsY1NwcmluZ0ZvcmNlPWZ1bmN0aW9uKEYsail7dmFyIEs9Ri5nZXRTb3VyY2UoKSxlZT1GLmdldFRhcmdldCgpLGllLG9lLHBlLGJlO2lmKHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXMmJksuZ2V0Q2hpbGQoKT09bnVsbCYmZWUuZ2V0Q2hpbGQoKT09bnVsbClGLnVwZGF0ZUxlbmd0aFNpbXBsZSgpO2Vsc2UgaWYoRi51cGRhdGVMZW5ndGgoKSxGLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldClyZXR1cm47aWU9Ri5nZXRMZW5ndGgoKSxpZSE9MCYmKG9lPXRoaXMuc3ByaW5nQ29uc3RhbnQqKGllLWopLHBlPW9lKihGLmxlbmd0aFgvaWUpLGJlPW9lKihGLmxlbmd0aFkvaWUpLEsuc3ByaW5nRm9yY2VYKz1wZSxLLnNwcmluZ0ZvcmNlWSs9YmUsZWUuc3ByaW5nRm9yY2VYLT1wZSxlZS5zcHJpbmdGb3JjZVktPWJlKX0sUC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvbkZvcmNlPWZ1bmN0aW9uKEYsail7dmFyIEs9Ri5nZXRSZWN0KCksZWU9ai5nZXRSZWN0KCksaWU9bmV3IEFycmF5KDIpLG9lPW5ldyBBcnJheSg0KSxwZSxiZSxhZSxuZSxzZSxkZSxYO2lmKEsuaW50ZXJzZWN0cyhlZSkpe18uY2FsY1NlcGFyYXRpb25BbW91bnQoSyxlZSxpZSx5LkRFRkFVTFRfRURHRV9MRU5HVEgvMiksZGU9MippZVswXSxYPTIqaWVbMV07dmFyIGdlPUYubm9PZkNoaWxkcmVuKmoubm9PZkNoaWxkcmVuLyhGLm5vT2ZDaGlsZHJlbitqLm5vT2ZDaGlsZHJlbik7Ri5yZXB1bHNpb25Gb3JjZVgtPWdlKmRlLEYucmVwdWxzaW9uRm9yY2VZLT1nZSpYLGoucmVwdWxzaW9uRm9yY2VYKz1nZSpkZSxqLnJlcHVsc2lvbkZvcmNlWSs9Z2UqWH1lbHNlIHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXMmJkYuZ2V0Q2hpbGQoKT09bnVsbCYmai5nZXRDaGlsZCgpPT1udWxsPyhwZT1lZS5nZXRDZW50ZXJYKCktSy5nZXRDZW50ZXJYKCksYmU9ZWUuZ2V0Q2VudGVyWSgpLUsuZ2V0Q2VudGVyWSgpKTooXy5nZXRJbnRlcnNlY3Rpb24oSyxlZSxvZSkscGU9b2VbMl0tb2VbMF0sYmU9b2VbM10tb2VbMV0pLE1hdGguYWJzKHBlKTx5Lk1JTl9SRVBVTFNJT05fRElTVCYmKHBlPUEuc2lnbihwZSkqeS5NSU5fUkVQVUxTSU9OX0RJU1QpLE1hdGguYWJzKGJlKTx5Lk1JTl9SRVBVTFNJT05fRElTVCYmKGJlPUEuc2lnbihiZSkqeS5NSU5fUkVQVUxTSU9OX0RJU1QpLGFlPXBlKnBlK2JlKmJlLG5lPU1hdGguc3FydChhZSksc2U9dGhpcy5yZXB1bHNpb25Db25zdGFudCpGLm5vT2ZDaGlsZHJlbipqLm5vT2ZDaGlsZHJlbi9hZSxkZT1zZSpwZS9uZSxYPXNlKmJlL25lLEYucmVwdWxzaW9uRm9yY2VYLT1kZSxGLnJlcHVsc2lvbkZvcmNlWS09WCxqLnJlcHVsc2lvbkZvcmNlWCs9ZGUsai5yZXB1bHNpb25Gb3JjZVkrPVh9LFAucHJvdG90eXBlLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2U9ZnVuY3Rpb24oRil7dmFyIGosSyxlZSxpZSxvZSxwZSxiZSxhZTtqPUYuZ2V0T3duZXIoKSxLPShqLmdldFJpZ2h0KCkrai5nZXRMZWZ0KCkpLzIsZWU9KGouZ2V0VG9wKCkrai5nZXRCb3R0b20oKSkvMixpZT1GLmdldENlbnRlclgoKS1LLG9lPUYuZ2V0Q2VudGVyWSgpLWVlLHBlPU1hdGguYWJzKGllKStGLmdldFdpZHRoKCkvMixiZT1NYXRoLmFicyhvZSkrRi5nZXRIZWlnaHQoKS8yLEYuZ2V0T3duZXIoKT09dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpPyhhZT1qLmdldEVzdGltYXRlZFNpemUoKSp0aGlzLmdyYXZpdHlSYW5nZUZhY3RvciwocGU+YWV8fGJlPmFlKSYmKEYuZ3Jhdml0YXRpb25Gb3JjZVg9LXRoaXMuZ3Jhdml0eUNvbnN0YW50KmllLEYuZ3Jhdml0YXRpb25Gb3JjZVk9LXRoaXMuZ3Jhdml0eUNvbnN0YW50Km9lKSk6KGFlPWouZ2V0RXN0aW1hdGVkU2l6ZSgpKnRoaXMuY29tcG91bmRHcmF2aXR5UmFuZ2VGYWN0b3IsKHBlPmFlfHxiZT5hZSkmJihGLmdyYXZpdGF0aW9uRm9yY2VYPS10aGlzLmdyYXZpdHlDb25zdGFudCppZSp0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50LEYuZ3Jhdml0YXRpb25Gb3JjZVk9LXRoaXMuZ3Jhdml0eUNvbnN0YW50Km9lKnRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQpKX0sUC5wcm90b3R5cGUuaXNDb252ZXJnZWQ9ZnVuY3Rpb24oKXt2YXIgRixqPSExO3JldHVybiB0aGlzLnRvdGFsSXRlcmF0aW9ucz50aGlzLm1heEl0ZXJhdGlvbnMvMyYmKGo9TWF0aC5hYnModGhpcy50b3RhbERpc3BsYWNlbWVudC10aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50KTwyKSxGPXRoaXMudG90YWxEaXNwbGFjZW1lbnQ8dGhpcy50b3RhbERpc3BsYWNlbWVudFRocmVzaG9sZCx0aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50PXRoaXMudG90YWxEaXNwbGFjZW1lbnQsRnx8an0sUC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbigpe3RoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0JiYhdGhpcy5pc1N1YkxheW91dCYmKHRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zPT10aGlzLmFuaW1hdGlvblBlcmlvZD8odGhpcy51cGRhdGUoKSx0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucz0wKTp0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucysrKX0sUC5wcm90b3R5cGUuY2FsY05vT2ZDaGlsZHJlbkZvckFsbE5vZGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciBGLGo9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKSxLPTA7SzxqLmxlbmd0aDtLKyspRj1qW0tdLEYubm9PZkNoaWxkcmVuPUYuZ2V0Tm9PZkNoaWxkcmVuKCl9LFAucHJvdG90eXBlLmNhbGNHcmlkPWZ1bmN0aW9uKEYpe3ZhciBqPTAsSz0wO2o9cGFyc2VJbnQoTWF0aC5jZWlsKChGLmdldFJpZ2h0KCktRi5nZXRMZWZ0KCkpL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSxLPXBhcnNlSW50KE1hdGguY2VpbCgoRi5nZXRCb3R0b20oKS1GLmdldFRvcCgpKS90aGlzLnJlcHVsc2lvblJhbmdlKSk7Zm9yKHZhciBlZT1uZXcgQXJyYXkoaiksaWU9MDtpZTxqO2llKyspZWVbaWVdPW5ldyBBcnJheShLKTtmb3IodmFyIGllPTA7aWU8ajtpZSsrKWZvcih2YXIgb2U9MDtvZTxLO29lKyspZWVbaWVdW29lXT1uZXcgQXJyYXk7cmV0dXJuIGVlfSxQLnByb3RvdHlwZS5hZGROb2RlVG9HcmlkPWZ1bmN0aW9uKEYsaixLKXt2YXIgZWU9MCxpZT0wLG9lPTAscGU9MDtlZT1wYXJzZUludChNYXRoLmZsb29yKChGLmdldFJlY3QoKS54LWopL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSxpZT1wYXJzZUludChNYXRoLmZsb29yKChGLmdldFJlY3QoKS53aWR0aCtGLmdldFJlY3QoKS54LWopL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSxvZT1wYXJzZUludChNYXRoLmZsb29yKChGLmdldFJlY3QoKS55LUspL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSxwZT1wYXJzZUludChNYXRoLmZsb29yKChGLmdldFJlY3QoKS5oZWlnaHQrRi5nZXRSZWN0KCkueS1LKS90aGlzLnJlcHVsc2lvblJhbmdlKSk7Zm9yKHZhciBiZT1lZTtiZTw9aWU7YmUrKylmb3IodmFyIGFlPW9lO2FlPD1wZTthZSsrKXRoaXMuZ3JpZFtiZV1bYWVdLnB1c2goRiksRi5zZXRHcmlkQ29vcmRpbmF0ZXMoZWUsaWUsb2UscGUpfSxQLnByb3RvdHlwZS51cGRhdGVHcmlkPWZ1bmN0aW9uKCl7dmFyIEYsaixLPXRoaXMuZ2V0QWxsTm9kZXMoKTtmb3IodGhpcy5ncmlkPXRoaXMuY2FsY0dyaWQodGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpKSxGPTA7RjxLLmxlbmd0aDtGKyspaj1LW0ZdLHRoaXMuYWRkTm9kZVRvR3JpZChqLHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXRMZWZ0KCksdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldFRvcCgpKX0sUC5wcm90b3R5cGUuY2FsY3VsYXRlUmVwdWxzaW9uRm9yY2VPZkFOb2RlPWZ1bmN0aW9uKEYsaixLLGVlKXtpZih0aGlzLnRvdGFsSXRlcmF0aW9ucyV5LkdSSURfQ0FMQ1VMQVRJT05fQ0hFQ0tfUEVSSU9EPT0xJiZLfHxlZSl7dmFyIGllPW5ldyBTZXQ7Ri5zdXJyb3VuZGluZz1uZXcgQXJyYXk7Zm9yKHZhciBvZSxwZT10aGlzLmdyaWQsYmU9Ri5zdGFydFgtMTtiZTxGLmZpbmlzaFgrMjtiZSsrKWZvcih2YXIgYWU9Ri5zdGFydFktMTthZTxGLmZpbmlzaFkrMjthZSsrKWlmKCEoYmU8MHx8YWU8MHx8YmU+PXBlLmxlbmd0aHx8YWU+PXBlWzBdLmxlbmd0aCkpe2Zvcih2YXIgbmU9MDtuZTxwZVtiZV1bYWVdLmxlbmd0aDtuZSsrKWlmKG9lPXBlW2JlXVthZV1bbmVdLCEoRi5nZXRPd25lcigpIT1vZS5nZXRPd25lcigpfHxGPT1vZSkmJiFqLmhhcyhvZSkmJiFpZS5oYXMob2UpKXt2YXIgc2U9TWF0aC5hYnMoRi5nZXRDZW50ZXJYKCktb2UuZ2V0Q2VudGVyWCgpKS0oRi5nZXRXaWR0aCgpLzIrb2UuZ2V0V2lkdGgoKS8yKSxkZT1NYXRoLmFicyhGLmdldENlbnRlclkoKS1vZS5nZXRDZW50ZXJZKCkpLShGLmdldEhlaWdodCgpLzIrb2UuZ2V0SGVpZ2h0KCkvMik7c2U8PXRoaXMucmVwdWxzaW9uUmFuZ2UmJmRlPD10aGlzLnJlcHVsc2lvblJhbmdlJiZpZS5hZGQob2UpfX1GLnN1cnJvdW5kaW5nPVtdLmNvbmNhdCh2KGllKSl9Zm9yKGJlPTA7YmU8Ri5zdXJyb3VuZGluZy5sZW5ndGg7YmUrKyl0aGlzLmNhbGNSZXB1bHNpb25Gb3JjZShGLEYuc3Vycm91bmRpbmdbYmVdKX0sUC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvblJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LHUuZXhwb3J0cz1QfSxmdW5jdGlvbih1LGQscCl7dmFyIHY9cCgxKSxiPXAoNyk7ZnVuY3Rpb24geShfLEEsUCl7di5jYWxsKHRoaXMsXyxBLFApLHRoaXMuaWRlYWxMZW5ndGg9Yi5ERUZBVUxUX0VER0VfTEVOR1RIfXkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodi5wcm90b3R5cGUpO2Zvcih2YXIgVCBpbiB2KXlbVF09dltUXTt1LmV4cG9ydHM9eX0sZnVuY3Rpb24odSxkLHApe3ZhciB2PXAoMyk7ZnVuY3Rpb24gYihULF8sQSxQKXt2LmNhbGwodGhpcyxULF8sQSxQKSx0aGlzLnNwcmluZ0ZvcmNlWD0wLHRoaXMuc3ByaW5nRm9yY2VZPTAsdGhpcy5yZXB1bHNpb25Gb3JjZVg9MCx0aGlzLnJlcHVsc2lvbkZvcmNlWT0wLHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVg9MCx0aGlzLmdyYXZpdGF0aW9uRm9yY2VZPTAsdGhpcy5kaXNwbGFjZW1lbnRYPTAsdGhpcy5kaXNwbGFjZW1lbnRZPTAsdGhpcy5zdGFydFg9MCx0aGlzLmZpbmlzaFg9MCx0aGlzLnN0YXJ0WT0wLHRoaXMuZmluaXNoWT0wLHRoaXMuc3Vycm91bmRpbmc9W119Yi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh2LnByb3RvdHlwZSk7Zm9yKHZhciB5IGluIHYpYlt5XT12W3ldO2IucHJvdG90eXBlLnNldEdyaWRDb29yZGluYXRlcz1mdW5jdGlvbihULF8sQSxQKXt0aGlzLnN0YXJ0WD1ULHRoaXMuZmluaXNoWD1fLHRoaXMuc3RhcnRZPUEsdGhpcy5maW5pc2hZPVB9LHUuZXhwb3J0cz1ifSxmdW5jdGlvbih1LGQscCl7ZnVuY3Rpb24gdihiLHkpe3RoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLGIhPT1udWxsJiZ5IT09bnVsbCYmKHRoaXMuaGVpZ2h0PXksdGhpcy53aWR0aD1iKX12LnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLndpZHRofSx2LnByb3RvdHlwZS5zZXRXaWR0aD1mdW5jdGlvbihiKXt0aGlzLndpZHRoPWJ9LHYucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhlaWdodH0sdi5wcm90b3R5cGUuc2V0SGVpZ2h0PWZ1bmN0aW9uKGIpe3RoaXMuaGVpZ2h0PWJ9LHUuZXhwb3J0cz12fSxmdW5jdGlvbih1LGQscCl7dmFyIHY9cCgxNCk7ZnVuY3Rpb24gYigpe3RoaXMubWFwPXt9LHRoaXMua2V5cz1bXX1iLnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24oeSxUKXt2YXIgXz12LmNyZWF0ZUlEKHkpO3RoaXMuY29udGFpbnMoXyl8fCh0aGlzLm1hcFtfXT1ULHRoaXMua2V5cy5wdXNoKHkpKX0sYi5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oeSl7cmV0dXJuIHYuY3JlYXRlSUQoeSksdGhpcy5tYXBbeV0hPW51bGx9LGIucHJvdG90eXBlLmdldD1mdW5jdGlvbih5KXt2YXIgVD12LmNyZWF0ZUlEKHkpO3JldHVybiB0aGlzLm1hcFtUXX0sYi5wcm90b3R5cGUua2V5U2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua2V5c30sdS5leHBvcnRzPWJ9LGZ1bmN0aW9uKHUsZCxwKXt2YXIgdj1wKDE0KTtmdW5jdGlvbiBiKCl7dGhpcy5zZXQ9e319Yi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHkpe3ZhciBUPXYuY3JlYXRlSUQoeSk7dGhpcy5jb250YWlucyhUKXx8KHRoaXMuc2V0W1RdPXkpfSxiLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oeSl7ZGVsZXRlIHRoaXMuc2V0W3YuY3JlYXRlSUQoeSldfSxiLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2V0PXt9fSxiLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5zZXRbdi5jcmVhdGVJRCh5KV09PXl9LGIucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplKCk9PT0wfSxiLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2V0KS5sZW5ndGh9LGIucHJvdG90eXBlLmFkZEFsbFRvPWZ1bmN0aW9uKHkpe2Zvcih2YXIgVD1PYmplY3Qua2V5cyh0aGlzLnNldCksXz1ULmxlbmd0aCxBPTA7QTxfO0ErKyl5LnB1c2godGhpcy5zZXRbVFtBXV0pfSxiLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2V0KS5sZW5ndGh9LGIucHJvdG90eXBlLmFkZEFsbD1mdW5jdGlvbih5KXtmb3IodmFyIFQ9eS5sZW5ndGgsXz0wO188VDtfKyspe3ZhciBBPXlbX107dGhpcy5hZGQoQSl9fSx1LmV4cG9ydHM9Yn0sZnVuY3Rpb24odSxkLHApe3ZhciB2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gXyhBLFApe2Zvcih2YXIgUj0wO1I8UC5sZW5ndGg7UisrKXt2YXIgRj1QW1JdO0YuZW51bWVyYWJsZT1GLmVudW1lcmFibGV8fCExLEYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBGJiYoRi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsRi5rZXksRil9fXJldHVybiBmdW5jdGlvbihBLFAsUil7cmV0dXJuIFAmJl8oQS5wcm90b3R5cGUsUCksUiYmXyhBLFIpLEF9fSgpO2Z1bmN0aW9uIGIoXyxBKXtpZighKF8gaW5zdGFuY2VvZiBBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgeT1wKDExKSxUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gXyhBLFApe2IodGhpcyxfKSwoUCE9PW51bGx8fFAhPT12b2lkIDApJiYodGhpcy5jb21wYXJlRnVuY3Rpb249dGhpcy5fZGVmYXVsdENvbXBhcmVGdW5jdGlvbik7dmFyIFI9dm9pZCAwO0EgaW5zdGFuY2VvZiB5P1I9QS5zaXplKCk6Uj1BLmxlbmd0aCx0aGlzLl9xdWlja3NvcnQoQSwwLFItMSl9cmV0dXJuIHYoXyxbe2tleToiX3F1aWNrc29ydCIsdmFsdWU6ZnVuY3Rpb24oUCxSLEYpe2lmKFI8Ril7dmFyIGo9dGhpcy5fcGFydGl0aW9uKFAsUixGKTt0aGlzLl9xdWlja3NvcnQoUCxSLGopLHRoaXMuX3F1aWNrc29ydChQLGorMSxGKX19fSx7a2V5OiJfcGFydGl0aW9uIix2YWx1ZTpmdW5jdGlvbihQLFIsRil7Zm9yKHZhciBqPXRoaXMuX2dldChQLFIpLEs9UixlZT1GOzspe2Zvcig7dGhpcy5jb21wYXJlRnVuY3Rpb24oaix0aGlzLl9nZXQoUCxlZSkpOyllZS0tO2Zvcig7dGhpcy5jb21wYXJlRnVuY3Rpb24odGhpcy5fZ2V0KFAsSyksaik7KUsrKztpZihLPGVlKXRoaXMuX3N3YXAoUCxLLGVlKSxLKyssZWUtLTtlbHNlIHJldHVybiBlZX19fSx7a2V5OiJfZ2V0Iix2YWx1ZTpmdW5jdGlvbihQLFIpe3JldHVybiBQIGluc3RhbmNlb2YgeT9QLmdldF9vYmplY3RfYXQoUik6UFtSXX19LHtrZXk6Il9zZXQiLHZhbHVlOmZ1bmN0aW9uKFAsUixGKXtQIGluc3RhbmNlb2YgeT9QLnNldF9vYmplY3RfYXQoUixGKTpQW1JdPUZ9fSx7a2V5OiJfc3dhcCIsdmFsdWU6ZnVuY3Rpb24oUCxSLEYpe3ZhciBqPXRoaXMuX2dldChQLFIpO3RoaXMuX3NldChQLFIsdGhpcy5fZ2V0KFAsRikpLHRoaXMuX3NldChQLEYsail9fSx7a2V5OiJfZGVmYXVsdENvbXBhcmVGdW5jdGlvbiIsdmFsdWU6ZnVuY3Rpb24oUCxSKXtyZXR1cm4gUj5QfX1dKSxffSgpO3UuZXhwb3J0cz1UfSxmdW5jdGlvbih1LGQscCl7dmFyIHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBUKF8sQSl7Zm9yKHZhciBQPTA7UDxBLmxlbmd0aDtQKyspe3ZhciBSPUFbUF07Ui5lbnVtZXJhYmxlPVIuZW51bWVyYWJsZXx8ITEsUi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIFImJihSLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXyxSLmtleSxSKX19cmV0dXJuIGZ1bmN0aW9uKF8sQSxQKXtyZXR1cm4gQSYmVChfLnByb3RvdHlwZSxBKSxQJiZUKF8sUCksX319KCk7ZnVuY3Rpb24gYihULF8pe2lmKCEoVCBpbnN0YW5jZW9mIF8pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfXZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gVChfLEEpe3ZhciBQPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXToxLFI9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOi0xLEY9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOi0xO2IodGhpcyxUKSx0aGlzLnNlcXVlbmNlMT1fLHRoaXMuc2VxdWVuY2UyPUEsdGhpcy5tYXRjaF9zY29yZT1QLHRoaXMubWlzbWF0Y2hfcGVuYWx0eT1SLHRoaXMuZ2FwX3BlbmFsdHk9Rix0aGlzLmlNYXg9Xy5sZW5ndGgrMSx0aGlzLmpNYXg9QS5sZW5ndGgrMSx0aGlzLmdyaWQ9bmV3IEFycmF5KHRoaXMuaU1heCk7Zm9yKHZhciBqPTA7ajx0aGlzLmlNYXg7aisrKXt0aGlzLmdyaWRbal09bmV3IEFycmF5KHRoaXMuak1heCk7Zm9yKHZhciBLPTA7Szx0aGlzLmpNYXg7SysrKXRoaXMuZ3JpZFtqXVtLXT0wfXRoaXMudHJhY2ViYWNrR3JpZD1uZXcgQXJyYXkodGhpcy5pTWF4KTtmb3IodmFyIGVlPTA7ZWU8dGhpcy5pTWF4O2VlKyspe3RoaXMudHJhY2ViYWNrR3JpZFtlZV09bmV3IEFycmF5KHRoaXMuak1heCk7Zm9yKHZhciBpZT0wO2llPHRoaXMuak1heDtpZSsrKXRoaXMudHJhY2ViYWNrR3JpZFtlZV1baWVdPVtudWxsLG51bGwsbnVsbF19dGhpcy5hbGlnbm1lbnRzPVtdLHRoaXMuc2NvcmU9LTEsdGhpcy5jb21wdXRlR3JpZHMoKX1yZXR1cm4gdihULFt7a2V5OiJnZXRTY29yZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zY29yZX19LHtrZXk6ImdldEFsaWdubWVudHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWxpZ25tZW50c319LHtrZXk6ImNvbXB1dGVHcmlkcyIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIEE9MTtBPHRoaXMuak1heDtBKyspdGhpcy5ncmlkWzBdW0FdPXRoaXMuZ3JpZFswXVtBLTFdK3RoaXMuZ2FwX3BlbmFsdHksdGhpcy50cmFjZWJhY2tHcmlkWzBdW0FdPVshMSwhMSwhMF07Zm9yKHZhciBQPTE7UDx0aGlzLmlNYXg7UCsrKXRoaXMuZ3JpZFtQXVswXT10aGlzLmdyaWRbUC0xXVswXSt0aGlzLmdhcF9wZW5hbHR5LHRoaXMudHJhY2ViYWNrR3JpZFtQXVswXT1bITEsITAsITFdO2Zvcih2YXIgUj0xO1I8dGhpcy5pTWF4O1IrKylmb3IodmFyIEY9MTtGPHRoaXMuak1heDtGKyspe3ZhciBqPXZvaWQgMDt0aGlzLnNlcXVlbmNlMVtSLTFdPT09dGhpcy5zZXF1ZW5jZTJbRi0xXT9qPXRoaXMuZ3JpZFtSLTFdW0YtMV0rdGhpcy5tYXRjaF9zY29yZTpqPXRoaXMuZ3JpZFtSLTFdW0YtMV0rdGhpcy5taXNtYXRjaF9wZW5hbHR5O3ZhciBLPXRoaXMuZ3JpZFtSLTFdW0ZdK3RoaXMuZ2FwX3BlbmFsdHksZWU9dGhpcy5ncmlkW1JdW0YtMV0rdGhpcy5nYXBfcGVuYWx0eSxpZT1baixLLGVlXSxvZT10aGlzLmFycmF5QWxsTWF4SW5kZXhlcyhpZSk7dGhpcy5ncmlkW1JdW0ZdPWllW29lWzBdXSx0aGlzLnRyYWNlYmFja0dyaWRbUl1bRl09W29lLmluY2x1ZGVzKDApLG9lLmluY2x1ZGVzKDEpLG9lLmluY2x1ZGVzKDIpXX10aGlzLnNjb3JlPXRoaXMuZ3JpZFt0aGlzLmlNYXgtMV1bdGhpcy5qTWF4LTFdfX0se2tleToiYWxpZ25tZW50VHJhY2ViYWNrIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBBPVtdO2ZvcihBLnB1c2goe3BvczpbdGhpcy5zZXF1ZW5jZTEubGVuZ3RoLHRoaXMuc2VxdWVuY2UyLmxlbmd0aF0sc2VxMToiIixzZXEyOiIifSk7QVswXTspe3ZhciBQPUFbMF0sUj10aGlzLnRyYWNlYmFja0dyaWRbUC5wb3NbMF1dW1AucG9zWzFdXTtSWzBdJiZBLnB1c2goe3BvczpbUC5wb3NbMF0tMSxQLnBvc1sxXS0xXSxzZXExOnRoaXMuc2VxdWVuY2UxW1AucG9zWzBdLTFdK1Auc2VxMSxzZXEyOnRoaXMuc2VxdWVuY2UyW1AucG9zWzFdLTFdK1Auc2VxMn0pLFJbMV0mJkEucHVzaCh7cG9zOltQLnBvc1swXS0xLFAucG9zWzFdXSxzZXExOnRoaXMuc2VxdWVuY2UxW1AucG9zWzBdLTFdK1Auc2VxMSxzZXEyOiItIitQLnNlcTJ9KSxSWzJdJiZBLnB1c2goe3BvczpbUC5wb3NbMF0sUC5wb3NbMV0tMV0sc2VxMToiLSIrUC5zZXExLHNlcTI6dGhpcy5zZXF1ZW5jZTJbUC5wb3NbMV0tMV0rUC5zZXEyfSksUC5wb3NbMF09PT0wJiZQLnBvc1sxXT09PTAmJnRoaXMuYWxpZ25tZW50cy5wdXNoKHtzZXF1ZW5jZTE6UC5zZXExLHNlcXVlbmNlMjpQLnNlcTJ9KSxBLnNoaWZ0KCl9cmV0dXJuIHRoaXMuYWxpZ25tZW50c319LHtrZXk6ImdldEFsbEluZGV4ZXMiLHZhbHVlOmZ1bmN0aW9uKEEsUCl7Zm9yKHZhciBSPVtdLEY9LTE7KEY9QS5pbmRleE9mKFAsRisxKSkhPT0tMTspUi5wdXNoKEYpO3JldHVybiBSfX0se2tleToiYXJyYXlBbGxNYXhJbmRleGVzIix2YWx1ZTpmdW5jdGlvbihBKXtyZXR1cm4gdGhpcy5nZXRBbGxJbmRleGVzKEEsTWF0aC5tYXguYXBwbHkobnVsbCxBKSl9fV0pLFR9KCk7dS5leHBvcnRzPXl9LGZ1bmN0aW9uKHUsZCxwKXt2YXIgdj1mdW5jdGlvbigpe307di5GRExheW91dD1wKDE4KSx2LkZETGF5b3V0Q29uc3RhbnRzPXAoNyksdi5GRExheW91dEVkZ2U9cCgxOSksdi5GRExheW91dE5vZGU9cCgyMCksdi5EaW1lbnNpb25EPXAoMjEpLHYuSGFzaE1hcD1wKDIyKSx2Lkhhc2hTZXQ9cCgyMyksdi5JR2VvbWV0cnk9cCg4KSx2LklNYXRoPXAoOSksdi5JbnRlZ2VyPXAoMTApLHYuUG9pbnQ9cCgxMiksdi5Qb2ludEQ9cCg0KSx2LlJhbmRvbVNlZWQ9cCgxNiksdi5SZWN0YW5nbGVEPXAoMTMpLHYuVHJhbnNmb3JtPXAoMTcpLHYuVW5pcXVlSURHZW5lcmV0b3I9cCgxNCksdi5RdWlja3NvcnQ9cCgyNCksdi5MaW5rZWRMaXN0PXAoMTEpLHYuTEdyYXBoT2JqZWN0PXAoMiksdi5MR3JhcGg9cCg1KSx2LkxFZGdlPXAoMSksdi5MR3JhcGhNYW5hZ2VyPXAoNiksdi5MTm9kZT1wKDMpLHYuTGF5b3V0PXAoMTUpLHYuTGF5b3V0Q29uc3RhbnRzPXAoMCksdi5OZWVkbGVtYW5XdW5zY2g9cCgyNSksdS5leHBvcnRzPXZ9LGZ1bmN0aW9uKHUsZCxwKXtmdW5jdGlvbiB2KCl7dGhpcy5saXN0ZW5lcnM9W119dmFyIGI9di5wcm90b3R5cGU7Yi5hZGRMaXN0ZW5lcj1mdW5jdGlvbih5LFQpe3RoaXMubGlzdGVuZXJzLnB1c2goe2V2ZW50OnksY2FsbGJhY2s6VH0pfSxiLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKHksVCl7Zm9yKHZhciBfPXRoaXMubGlzdGVuZXJzLmxlbmd0aDtfPj0wO18tLSl7dmFyIEE9dGhpcy5saXN0ZW5lcnNbX107QS5ldmVudD09PXkmJkEuY2FsbGJhY2s9PT1UJiZ0aGlzLmxpc3RlbmVycy5zcGxpY2UoXywxKX19LGIuZW1pdD1mdW5jdGlvbih5LFQpe2Zvcih2YXIgXz0wO188dGhpcy5saXN0ZW5lcnMubGVuZ3RoO18rKyl7dmFyIEE9dGhpcy5saXN0ZW5lcnNbX107eT09PUEuZXZlbnQmJkEuY2FsbGJhY2soVCl9fSx1LmV4cG9ydHM9dn1dKX0pfShyd2UpKSxyd2UuZXhwb3J0c312YXIgcFdlO2Z1bmN0aW9uIGRvbigpe3JldHVybiBwV2V8fChwV2U9MSxmdW5jdGlvbihpLHMpeyhmdW5jdGlvbihkLHApe2kuZXhwb3J0cz1wKGZvbigpKX0pKEFnLGZ1bmN0aW9uKHUpe3JldHVybiBmdW5jdGlvbihkKXt2YXIgcD17fTtmdW5jdGlvbiB2KGIpe2lmKHBbYl0pcmV0dXJuIHBbYl0uZXhwb3J0czt2YXIgeT1wW2JdPXtpOmIsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZFtiXS5jYWxsKHkuZXhwb3J0cyx5LHkuZXhwb3J0cyx2KSx5Lmw9ITAseS5leHBvcnRzfXJldHVybiB2Lm09ZCx2LmM9cCx2Lmk9ZnVuY3Rpb24oYil7cmV0dXJuIGJ9LHYuZD1mdW5jdGlvbihiLHksVCl7di5vKGIseSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLHkse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDpUfSl9LHYubj1mdW5jdGlvbihiKXt2YXIgeT1iJiZiLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gYi5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBifTtyZXR1cm4gdi5kKHksImEiLHkpLHl9LHYubz1mdW5jdGlvbihiLHkpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYix5KX0sdi5wPSIiLHYodi5zPTcpfShbZnVuY3Rpb24oZCxwKXtkLmV4cG9ydHM9dX0sZnVuY3Rpb24oZCxwLHYpe3ZhciBiPXYoMCkuRkRMYXlvdXRDb25zdGFudHM7ZnVuY3Rpb24geSgpe31mb3IodmFyIFQgaW4gYil5W1RdPWJbVF07eS5ERUZBVUxUX1VTRV9NVUxUSV9MRVZFTF9TQ0FMSU5HPSExLHkuREVGQVVMVF9SQURJQUxfU0VQQVJBVElPTj1iLkRFRkFVTFRfRURHRV9MRU5HVEgseS5ERUZBVUxUX0NPTVBPTkVOVF9TRVBFUkFUSU9OPTYwLHkuVElMRT0hMCx5LlRJTElOR19QQURESU5HX1ZFUlRJQ0FMPTEwLHkuVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTD0xMCx5LlRSRUVfUkVEVUNUSU9OX09OX0lOQ1JFTUVOVEFMPSExLGQuZXhwb3J0cz15fSxmdW5jdGlvbihkLHAsdil7dmFyIGI9digwKS5GRExheW91dEVkZ2U7ZnVuY3Rpb24geShfLEEsUCl7Yi5jYWxsKHRoaXMsXyxBLFApfXkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYi5wcm90b3R5cGUpO2Zvcih2YXIgVCBpbiBiKXlbVF09YltUXTtkLmV4cG9ydHM9eX0sZnVuY3Rpb24oZCxwLHYpe3ZhciBiPXYoMCkuTEdyYXBoO2Z1bmN0aW9uIHkoXyxBLFApe2IuY2FsbCh0aGlzLF8sQSxQKX15LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGIucHJvdG90eXBlKTtmb3IodmFyIFQgaW4gYil5W1RdPWJbVF07ZC5leHBvcnRzPXl9LGZ1bmN0aW9uKGQscCx2KXt2YXIgYj12KDApLkxHcmFwaE1hbmFnZXI7ZnVuY3Rpb24geShfKXtiLmNhbGwodGhpcyxfKX15LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGIucHJvdG90eXBlKTtmb3IodmFyIFQgaW4gYil5W1RdPWJbVF07ZC5leHBvcnRzPXl9LGZ1bmN0aW9uKGQscCx2KXt2YXIgYj12KDApLkZETGF5b3V0Tm9kZSx5PXYoMCkuSU1hdGg7ZnVuY3Rpb24gVChBLFAsUixGKXtiLmNhbGwodGhpcyxBLFAsUixGKX1ULnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGIucHJvdG90eXBlKTtmb3IodmFyIF8gaW4gYilUW19dPWJbX107VC5wcm90b3R5cGUubW92ZT1mdW5jdGlvbigpe3ZhciBBPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldExheW91dCgpO3RoaXMuZGlzcGxhY2VtZW50WD1BLmNvb2xpbmdGYWN0b3IqKHRoaXMuc3ByaW5nRm9yY2VYK3RoaXMucmVwdWxzaW9uRm9yY2VYK3RoaXMuZ3Jhdml0YXRpb25Gb3JjZVgpL3RoaXMubm9PZkNoaWxkcmVuLHRoaXMuZGlzcGxhY2VtZW50WT1BLmNvb2xpbmdGYWN0b3IqKHRoaXMuc3ByaW5nRm9yY2VZK3RoaXMucmVwdWxzaW9uRm9yY2VZK3RoaXMuZ3Jhdml0YXRpb25Gb3JjZVkpL3RoaXMubm9PZkNoaWxkcmVuLE1hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WCk+QS5jb29saW5nRmFjdG9yKkEubWF4Tm9kZURpc3BsYWNlbWVudCYmKHRoaXMuZGlzcGxhY2VtZW50WD1BLmNvb2xpbmdGYWN0b3IqQS5tYXhOb2RlRGlzcGxhY2VtZW50Knkuc2lnbih0aGlzLmRpc3BsYWNlbWVudFgpKSxNYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFkpPkEuY29vbGluZ0ZhY3RvcipBLm1heE5vZGVEaXNwbGFjZW1lbnQmJih0aGlzLmRpc3BsYWNlbWVudFk9QS5jb29saW5nRmFjdG9yKkEubWF4Tm9kZURpc3BsYWNlbWVudCp5LnNpZ24odGhpcy5kaXNwbGFjZW1lbnRZKSksdGhpcy5jaGlsZD09bnVsbD90aGlzLm1vdmVCeSh0aGlzLmRpc3BsYWNlbWVudFgsdGhpcy5kaXNwbGFjZW1lbnRZKTp0aGlzLmNoaWxkLmdldE5vZGVzKCkubGVuZ3RoPT0wP3RoaXMubW92ZUJ5KHRoaXMuZGlzcGxhY2VtZW50WCx0aGlzLmRpc3BsYWNlbWVudFkpOnRoaXMucHJvcG9nYXRlRGlzcGxhY2VtZW50VG9DaGlsZHJlbih0aGlzLmRpc3BsYWNlbWVudFgsdGhpcy5kaXNwbGFjZW1lbnRZKSxBLnRvdGFsRGlzcGxhY2VtZW50Kz1NYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFgpK01hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WSksdGhpcy5zcHJpbmdGb3JjZVg9MCx0aGlzLnNwcmluZ0ZvcmNlWT0wLHRoaXMucmVwdWxzaW9uRm9yY2VYPTAsdGhpcy5yZXB1bHNpb25Gb3JjZVk9MCx0aGlzLmdyYXZpdGF0aW9uRm9yY2VYPTAsdGhpcy5ncmF2aXRhdGlvbkZvcmNlWT0wLHRoaXMuZGlzcGxhY2VtZW50WD0wLHRoaXMuZGlzcGxhY2VtZW50WT0wfSxULnByb3RvdHlwZS5wcm9wb2dhdGVEaXNwbGFjZW1lbnRUb0NoaWxkcmVuPWZ1bmN0aW9uKEEsUCl7Zm9yKHZhciBSPXRoaXMuZ2V0Q2hpbGQoKS5nZXROb2RlcygpLEYsaj0wO2o8Ui5sZW5ndGg7aisrKUY9UltqXSxGLmdldENoaWxkKCk9PW51bGw/KEYubW92ZUJ5KEEsUCksRi5kaXNwbGFjZW1lbnRYKz1BLEYuZGlzcGxhY2VtZW50WSs9UCk6Ri5wcm9wb2dhdGVEaXNwbGFjZW1lbnRUb0NoaWxkcmVuKEEsUCl9LFQucHJvdG90eXBlLnNldFByZWQxPWZ1bmN0aW9uKEEpe3RoaXMucHJlZDE9QX0sVC5wcm90b3R5cGUuZ2V0UHJlZDE9ZnVuY3Rpb24oKXtyZXR1cm4gcHJlZDF9LFQucHJvdG90eXBlLmdldFByZWQyPWZ1bmN0aW9uKCl7cmV0dXJuIHByZWQyfSxULnByb3RvdHlwZS5zZXROZXh0PWZ1bmN0aW9uKEEpe3RoaXMubmV4dD1BfSxULnByb3RvdHlwZS5nZXROZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIG5leHR9LFQucHJvdG90eXBlLnNldFByb2Nlc3NlZD1mdW5jdGlvbihBKXt0aGlzLnByb2Nlc3NlZD1BfSxULnByb3RvdHlwZS5pc1Byb2Nlc3NlZD1mdW5jdGlvbigpe3JldHVybiBwcm9jZXNzZWR9LGQuZXhwb3J0cz1UfSxmdW5jdGlvbihkLHAsdil7dmFyIGI9digwKS5GRExheW91dCx5PXYoNCksVD12KDMpLF89dig1KSxBPXYoMiksUD12KDEpLFI9digwKS5GRExheW91dENvbnN0YW50cyxGPXYoMCkuTGF5b3V0Q29uc3RhbnRzLGo9digwKS5Qb2ludCxLPXYoMCkuUG9pbnRELGVlPXYoMCkuTGF5b3V0LGllPXYoMCkuSW50ZWdlcixvZT12KDApLklHZW9tZXRyeSxwZT12KDApLkxHcmFwaCxiZT12KDApLlRyYW5zZm9ybTtmdW5jdGlvbiBhZSgpe2IuY2FsbCh0aGlzKSx0aGlzLnRvQmVUaWxlZD17fX1hZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShiLnByb3RvdHlwZSk7Zm9yKHZhciBuZSBpbiBiKWFlW25lXT1iW25lXTthZS5wcm90b3R5cGUubmV3R3JhcGhNYW5hZ2VyPWZ1bmN0aW9uKCl7dmFyIHNlPW5ldyB5KHRoaXMpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcj1zZSxzZX0sYWUucHJvdG90eXBlLm5ld0dyYXBoPWZ1bmN0aW9uKHNlKXtyZXR1cm4gbmV3IFQobnVsbCx0aGlzLmdyYXBoTWFuYWdlcixzZSl9LGFlLnByb3RvdHlwZS5uZXdOb2RlPWZ1bmN0aW9uKHNlKXtyZXR1cm4gbmV3IF8odGhpcy5ncmFwaE1hbmFnZXIsc2UpfSxhZS5wcm90b3R5cGUubmV3RWRnZT1mdW5jdGlvbihzZSl7cmV0dXJuIG5ldyBBKG51bGwsbnVsbCxzZSl9LGFlLnByb3RvdHlwZS5pbml0UGFyYW1ldGVycz1mdW5jdGlvbigpe2IucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzLmNhbGwodGhpcyxhcmd1bWVudHMpLHRoaXMuaXNTdWJMYXlvdXR8fChQLkRFRkFVTFRfRURHRV9MRU5HVEg8MTA/dGhpcy5pZGVhbEVkZ2VMZW5ndGg9MTA6dGhpcy5pZGVhbEVkZ2VMZW5ndGg9UC5ERUZBVUxUX0VER0VfTEVOR1RILHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbj1QLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OLHRoaXMuc3ByaW5nQ29uc3RhbnQ9Ui5ERUZBVUxUX1NQUklOR19TVFJFTkdUSCx0aGlzLnJlcHVsc2lvbkNvbnN0YW50PVIuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEgsdGhpcy5ncmF2aXR5Q29uc3RhbnQ9Ui5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEgsdGhpcy5jb21wb3VuZEdyYXZpdHlDb25zdGFudD1SLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSCx0aGlzLmdyYXZpdHlSYW5nZUZhY3Rvcj1SLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1IsdGhpcy5jb21wb3VuZEdyYXZpdHlSYW5nZUZhY3Rvcj1SLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1IsdGhpcy5wcnVuZWROb2Rlc0FsbD1bXSx0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucz0wLHRoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zPTAsdGhpcy5pc1RyZWVHcm93aW5nPSExLHRoaXMuaXNHcm93dGhGaW5pc2hlZD0hMSx0aGlzLmNvb2xpbmdDeWNsZT0wLHRoaXMubWF4Q29vbGluZ0N5Y2xlPXRoaXMubWF4SXRlcmF0aW9ucy9SLkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRCx0aGlzLmZpbmFsVGVtcGVyYXR1cmU9Ui5DT05WRVJHRU5DRV9DSEVDS19QRVJJT0QvdGhpcy5tYXhJdGVyYXRpb25zLHRoaXMuY29vbGluZ0FkanVzdGVyPTEpfSxhZS5wcm90b3R5cGUubGF5b3V0PWZ1bmN0aW9uKCl7dmFyIHNlPUYuREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVEO3JldHVybiBzZSYmKHRoaXMuY3JlYXRlQmVuZHBvaW50cygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKSksdGhpcy5sZXZlbD0wLHRoaXMuY2xhc3NpY0xheW91dCgpfSxhZS5wcm90b3R5cGUuY2xhc3NpY0xheW91dD1mdW5jdGlvbigpe2lmKHRoaXMubm9kZXNXaXRoR3Jhdml0eT10aGlzLmNhbGN1bGF0ZU5vZGVzVG9BcHBseUdyYXZpdGF0aW9uVG8oKSx0aGlzLmdyYXBoTWFuYWdlci5zZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbih0aGlzLm5vZGVzV2l0aEdyYXZpdHkpLHRoaXMuY2FsY05vT2ZDaGlsZHJlbkZvckFsbE5vZGVzKCksdGhpcy5ncmFwaE1hbmFnZXIuY2FsY0xvd2VzdENvbW1vbkFuY2VzdG9ycygpLHRoaXMuZ3JhcGhNYW5hZ2VyLmNhbGNJbmNsdXNpb25UcmVlRGVwdGhzKCksdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmNhbGNFc3RpbWF0ZWRTaXplKCksdGhpcy5jYWxjSWRlYWxFZGdlTGVuZ3RocygpLHRoaXMuaW5jcmVtZW50YWwpe2lmKFAuVFJFRV9SRURVQ1RJT05fT05fSU5DUkVNRU5UQUwpe3RoaXMucmVkdWNlVHJlZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCk7dmFyIGRlPW5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKSxYPXRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24oeGUpe3JldHVybiBkZS5oYXMoeGUpfSk7dGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oWCl9fWVsc2V7dmFyIHNlPXRoaXMuZ2V0RmxhdEZvcmVzdCgpO2lmKHNlLmxlbmd0aD4wKXRoaXMucG9zaXRpb25Ob2Rlc1JhZGlhbGx5KHNlKTtlbHNle3RoaXMucmVkdWNlVHJlZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCk7dmFyIGRlPW5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKSxYPXRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24oZ2Upe3JldHVybiBkZS5oYXMoZ2UpfSk7dGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oWCksdGhpcy5wb3NpdGlvbk5vZGVzUmFuZG9tbHkoKX19cmV0dXJuIHRoaXMuaW5pdFNwcmluZ0VtYmVkZGVyKCksdGhpcy5ydW5TcHJpbmdFbWJlZGRlcigpLCEwfSxhZS5wcm90b3R5cGUudGljaz1mdW5jdGlvbigpe2lmKHRoaXMudG90YWxJdGVyYXRpb25zKyssdGhpcy50b3RhbEl0ZXJhdGlvbnM9PT10aGlzLm1heEl0ZXJhdGlvbnMmJiF0aGlzLmlzVHJlZUdyb3dpbmcmJiF0aGlzLmlzR3Jvd3RoRmluaXNoZWQpaWYodGhpcy5wcnVuZWROb2Rlc0FsbC5sZW5ndGg+MCl0aGlzLmlzVHJlZUdyb3dpbmc9ITA7ZWxzZSByZXR1cm4hMDtpZih0aGlzLnRvdGFsSXRlcmF0aW9ucyVSLkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRD09MCYmIXRoaXMuaXNUcmVlR3Jvd2luZyYmIXRoaXMuaXNHcm93dGhGaW5pc2hlZCl7aWYodGhpcy5pc0NvbnZlcmdlZCgpKWlmKHRoaXMucHJ1bmVkTm9kZXNBbGwubGVuZ3RoPjApdGhpcy5pc1RyZWVHcm93aW5nPSEwO2Vsc2UgcmV0dXJuITA7dGhpcy5jb29saW5nQ3ljbGUrKyx0aGlzLmxheW91dFF1YWxpdHk9PTA/dGhpcy5jb29saW5nQWRqdXN0ZXI9dGhpcy5jb29saW5nQ3ljbGU6dGhpcy5sYXlvdXRRdWFsaXR5PT0xJiYodGhpcy5jb29saW5nQWRqdXN0ZXI9dGhpcy5jb29saW5nQ3ljbGUvMyksdGhpcy5jb29saW5nRmFjdG9yPU1hdGgubWF4KHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3ItTWF0aC5wb3codGhpcy5jb29saW5nQ3ljbGUsTWF0aC5sb2coMTAwKih0aGlzLmluaXRpYWxDb29saW5nRmFjdG9yLXRoaXMuZmluYWxUZW1wZXJhdHVyZSkpL01hdGgubG9nKHRoaXMubWF4Q29vbGluZ0N5Y2xlKSkvMTAwKnRoaXMuY29vbGluZ0FkanVzdGVyLHRoaXMuZmluYWxUZW1wZXJhdHVyZSksdGhpcy5hbmltYXRpb25QZXJpb2Q9TWF0aC5jZWlsKHRoaXMuaW5pdGlhbEFuaW1hdGlvblBlcmlvZCpNYXRoLnNxcnQodGhpcy5jb29saW5nRmFjdG9yKSl9aWYodGhpcy5pc1RyZWVHcm93aW5nKXtpZih0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucyUxMD09MClpZih0aGlzLnBydW5lZE5vZGVzQWxsLmxlbmd0aD4wKXt0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKSx0aGlzLnVwZGF0ZUdyaWQoKSx0aGlzLmdyb3dUcmVlKHRoaXMucHJ1bmVkTm9kZXNBbGwpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKTt2YXIgc2U9bmV3IFNldCh0aGlzLmdldEFsbE5vZGVzKCkpLGRlPXRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24oVyl7cmV0dXJuIHNlLmhhcyhXKX0pO3RoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKGRlKSx0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKSx0aGlzLnVwZGF0ZUdyaWQoKSx0aGlzLmNvb2xpbmdGYWN0b3I9Ui5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMfWVsc2UgdGhpcy5pc1RyZWVHcm93aW5nPSExLHRoaXMuaXNHcm93dGhGaW5pc2hlZD0hMDt0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucysrfWlmKHRoaXMuaXNHcm93dGhGaW5pc2hlZCl7aWYodGhpcy5pc0NvbnZlcmdlZCgpKXJldHVybiEwO3RoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zJTEwPT0wJiYodGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCksdGhpcy51cGRhdGVHcmlkKCkpLHRoaXMuY29vbGluZ0ZhY3Rvcj1SLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUwqKCgxMDAtdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMpLzEwMCksdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMrK312YXIgWD0hdGhpcy5pc1RyZWVHcm93aW5nJiYhdGhpcy5pc0dyb3d0aEZpbmlzaGVkLGdlPXRoaXMuZ3Jvd1RyZWVJdGVyYXRpb25zJTEwPT0xJiZ0aGlzLmlzVHJlZUdyb3dpbmd8fHRoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zJTEwPT0xJiZ0aGlzLmlzR3Jvd3RoRmluaXNoZWQ7cmV0dXJuIHRoaXMudG90YWxEaXNwbGFjZW1lbnQ9MCx0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKSx0aGlzLmNhbGNTcHJpbmdGb3JjZXMoKSx0aGlzLmNhbGNSZXB1bHNpb25Gb3JjZXMoWCxnZSksdGhpcy5jYWxjR3Jhdml0YXRpb25hbEZvcmNlcygpLHRoaXMubW92ZU5vZGVzKCksdGhpcy5hbmltYXRlKCksITF9LGFlLnByb3RvdHlwZS5nZXRQb3NpdGlvbnNEYXRhPWZ1bmN0aW9uKCl7Zm9yKHZhciBzZT10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLGRlPXt9LFg9MDtYPHNlLmxlbmd0aDtYKyspe3ZhciBnZT1zZVtYXS5yZWN0LFc9c2VbWF0uaWQ7ZGVbV109e2lkOlcseDpnZS5nZXRDZW50ZXJYKCkseTpnZS5nZXRDZW50ZXJZKCksdzpnZS53aWR0aCxoOmdlLmhlaWdodH19cmV0dXJuIGRlfSxhZS5wcm90b3R5cGUucnVuU3ByaW5nRW1iZWRkZXI9ZnVuY3Rpb24oKXt0aGlzLmluaXRpYWxBbmltYXRpb25QZXJpb2Q9MjUsdGhpcy5hbmltYXRpb25QZXJpb2Q9dGhpcy5pbml0aWFsQW5pbWF0aW9uUGVyaW9kO3ZhciBzZT0hMTtpZihSLkFOSU1BVEU9PT0iZHVyaW5nIil0aGlzLmVtaXQoImxheW91dHN0YXJ0ZWQiKTtlbHNle2Zvcig7IXNlOylzZT10aGlzLnRpY2soKTt0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKX19LGFlLnByb3RvdHlwZS5jYWxjdWxhdGVOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvblRvPWZ1bmN0aW9uKCl7dmFyIHNlPVtdLGRlLFg9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0R3JhcGhzKCksZ2U9WC5sZW5ndGgsVztmb3IoVz0wO1c8Z2U7VysrKWRlPVhbV10sZGUudXBkYXRlQ29ubmVjdGVkKCksZGUuaXNDb25uZWN0ZWR8fChzZT1zZS5jb25jYXQoZGUuZ2V0Tm9kZXMoKSkpO3JldHVybiBzZX0sYWUucHJvdG90eXBlLmNyZWF0ZUJlbmRwb2ludHM9ZnVuY3Rpb24oKXt2YXIgc2U9W107c2U9c2UuY29uY2F0KHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCkpO3ZhciBkZT1uZXcgU2V0LFg7Zm9yKFg9MDtYPHNlLmxlbmd0aDtYKyspe3ZhciBnZT1zZVtYXTtpZighZGUuaGFzKGdlKSl7dmFyIFc9Z2UuZ2V0U291cmNlKCkseGU9Z2UuZ2V0VGFyZ2V0KCk7aWYoVz09eGUpZ2UuZ2V0QmVuZHBvaW50cygpLnB1c2gobmV3IEspLGdlLmdldEJlbmRwb2ludHMoKS5wdXNoKG5ldyBLKSx0aGlzLmNyZWF0ZUR1bW15Tm9kZXNGb3JCZW5kcG9pbnRzKGdlKSxkZS5hZGQoZ2UpO2Vsc2V7dmFyIFU9W107aWYoVT1VLmNvbmNhdChXLmdldEVkZ2VMaXN0VG9Ob2RlKHhlKSksVT1VLmNvbmNhdCh4ZS5nZXRFZGdlTGlzdFRvTm9kZShXKSksIWRlLmhhcyhVWzBdKSl7aWYoVS5sZW5ndGg+MSl7dmFyIEZlO2ZvcihGZT0wO0ZlPFUubGVuZ3RoO0ZlKyspe3ZhciBQZT1VW0ZlXTtQZS5nZXRCZW5kcG9pbnRzKCkucHVzaChuZXcgSyksdGhpcy5jcmVhdGVEdW1teU5vZGVzRm9yQmVuZHBvaW50cyhQZSl9fVUuZm9yRWFjaChmdW5jdGlvbihqZSl7ZGUuYWRkKGplKX0pfX19aWYoZGUuc2l6ZT09c2UubGVuZ3RoKWJyZWFrfX0sYWUucHJvdG90eXBlLnBvc2l0aW9uTm9kZXNSYWRpYWxseT1mdW5jdGlvbihzZSl7Zm9yKHZhciBkZT1uZXcgaigwLDApLFg9TWF0aC5jZWlsKE1hdGguc3FydChzZS5sZW5ndGgpKSxnZT0wLFc9MCx4ZT0wLFU9bmV3IEsoMCwwKSxGZT0wO0ZlPHNlLmxlbmd0aDtGZSsrKXtGZSVYPT0wJiYoeGU9MCxXPWdlLEZlIT0wJiYoVys9UC5ERUZBVUxUX0NPTVBPTkVOVF9TRVBFUkFUSU9OKSxnZT0wKTt2YXIgUGU9c2VbRmVdLGplPWVlLmZpbmRDZW50ZXJPZlRyZWUoUGUpO2RlLng9eGUsZGUueT1XLFU9YWUucmFkaWFsTGF5b3V0KFBlLGplLGRlKSxVLnk+Z2UmJihnZT1NYXRoLmZsb29yKFUueSkpLHhlPU1hdGguZmxvb3IoVS54K1AuREVGQVVMVF9DT01QT05FTlRfU0VQRVJBVElPTil9dGhpcy50cmFuc2Zvcm0obmV3IEsoRi5XT1JMRF9DRU5URVJfWC1VLngvMixGLldPUkxEX0NFTlRFUl9ZLVUueS8yKSl9LGFlLnJhZGlhbExheW91dD1mdW5jdGlvbihzZSxkZSxYKXt2YXIgZ2U9TWF0aC5tYXgodGhpcy5tYXhEaWFnb25hbEluVHJlZShzZSksUC5ERUZBVUxUX1JBRElBTF9TRVBBUkFUSU9OKTthZS5icmFuY2hSYWRpYWxMYXlvdXQoZGUsbnVsbCwwLDM1OSwwLGdlKTt2YXIgVz1wZS5jYWxjdWxhdGVCb3VuZHMoc2UpLHhlPW5ldyBiZTt4ZS5zZXREZXZpY2VPcmdYKFcuZ2V0TWluWCgpKSx4ZS5zZXREZXZpY2VPcmdZKFcuZ2V0TWluWSgpKSx4ZS5zZXRXb3JsZE9yZ1goWC54KSx4ZS5zZXRXb3JsZE9yZ1koWC55KTtmb3IodmFyIFU9MDtVPHNlLmxlbmd0aDtVKyspe3ZhciBGZT1zZVtVXTtGZS50cmFuc2Zvcm0oeGUpfXZhciBQZT1uZXcgSyhXLmdldE1heFgoKSxXLmdldE1heFkoKSk7cmV0dXJuIHhlLmludmVyc2VUcmFuc2Zvcm1Qb2ludChQZSl9LGFlLmJyYW5jaFJhZGlhbExheW91dD1mdW5jdGlvbihzZSxkZSxYLGdlLFcseGUpe3ZhciBVPShnZS1YKzEpLzI7VTwwJiYoVSs9MTgwKTt2YXIgRmU9KFUrWCklMzYwLFBlPUZlKm9lLlRXT19QSS8zNjAsamU9VypNYXRoLmNvcyhQZSksSWU9VypNYXRoLnNpbihQZSk7c2Uuc2V0Q2VudGVyKGplLEllKTt2YXIgU2U9W107U2U9U2UuY29uY2F0KHNlLmdldEVkZ2VzKCkpO3ZhciBDZT1TZS5sZW5ndGg7ZGUhPW51bGwmJkNlLS07Zm9yKHZhciBrZT0wLEtlPVNlLmxlbmd0aCxGdCxOZT1zZS5nZXRFZGdlc0JldHdlZW4oZGUpO05lLmxlbmd0aD4xOyl7dmFyIGduPU5lWzBdO05lLnNwbGljZSgwLDEpO3ZhciBfdD1TZS5pbmRleE9mKGduKTtfdD49MCYmU2Uuc3BsaWNlKF90LDEpLEtlLS0sQ2UtLX1kZSE9bnVsbD9GdD0oU2UuaW5kZXhPZihOZVswXSkrMSklS2U6RnQ9MDtmb3IodmFyIEV0PU1hdGguYWJzKGdlLVgpL0NlLEd0PUZ0O2tlIT1DZTtHdD0rK0d0JUtlKXt2YXIgbG49U2VbR3RdLmdldE90aGVyRW5kKHNlKTtpZihsbiE9ZGUpe3ZhciB4dD0oWCtrZSpFdCklMzYwLFB0PSh4dCtFdCklMzYwO2FlLmJyYW5jaFJhZGlhbExheW91dChsbixzZSx4dCxQdCxXK3hlLHhlKSxrZSsrfX19LGFlLm1heERpYWdvbmFsSW5UcmVlPWZ1bmN0aW9uKHNlKXtmb3IodmFyIGRlPWllLk1JTl9WQUxVRSxYPTA7WDxzZS5sZW5ndGg7WCsrKXt2YXIgZ2U9c2VbWF0sVz1nZS5nZXREaWFnb25hbCgpO1c+ZGUmJihkZT1XKX1yZXR1cm4gZGV9LGFlLnByb3RvdHlwZS5jYWxjUmVwdWxzaW9uUmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gMioodGhpcy5sZXZlbCsxKSp0aGlzLmlkZWFsRWRnZUxlbmd0aH0sYWUucHJvdG90eXBlLmdyb3VwWmVyb0RlZ3JlZU1lbWJlcnM9ZnVuY3Rpb24oKXt2YXIgc2U9dGhpcyxkZT17fTt0aGlzLm1lbWJlckdyb3Vwcz17fSx0aGlzLmlkVG9EdW1teU5vZGU9e307Zm9yKHZhciBYPVtdLGdlPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCksVz0wO1c8Z2UubGVuZ3RoO1crKyl7dmFyIHhlPWdlW1ddLFU9eGUuZ2V0UGFyZW50KCk7dGhpcy5nZXROb2RlRGVncmVlV2l0aENoaWxkcmVuKHhlKT09PTAmJihVLmlkPT1udWxsfHwhdGhpcy5nZXRUb0JlVGlsZWQoVSkpJiZYLnB1c2goeGUpfWZvcih2YXIgVz0wO1c8WC5sZW5ndGg7VysrKXt2YXIgeGU9WFtXXSxGZT14ZS5nZXRQYXJlbnQoKS5pZDt0eXBlb2YgZGVbRmVdPiJ1IiYmKGRlW0ZlXT1bXSksZGVbRmVdPWRlW0ZlXS5jb25jYXQoeGUpfU9iamVjdC5rZXlzKGRlKS5mb3JFYWNoKGZ1bmN0aW9uKFBlKXtpZihkZVtQZV0ubGVuZ3RoPjEpe3ZhciBqZT0iRHVtbXlDb21wb3VuZF8iK1BlO3NlLm1lbWJlckdyb3Vwc1tqZV09ZGVbUGVdO3ZhciBJZT1kZVtQZV1bMF0uZ2V0UGFyZW50KCksU2U9bmV3IF8oc2UuZ3JhcGhNYW5hZ2VyKTtTZS5pZD1qZSxTZS5wYWRkaW5nTGVmdD1JZS5wYWRkaW5nTGVmdHx8MCxTZS5wYWRkaW5nUmlnaHQ9SWUucGFkZGluZ1JpZ2h0fHwwLFNlLnBhZGRpbmdCb3R0b209SWUucGFkZGluZ0JvdHRvbXx8MCxTZS5wYWRkaW5nVG9wPUllLnBhZGRpbmdUb3B8fDAsc2UuaWRUb0R1bW15Tm9kZVtqZV09U2U7dmFyIENlPXNlLmdldEdyYXBoTWFuYWdlcigpLmFkZChzZS5uZXdHcmFwaCgpLFNlKSxrZT1JZS5nZXRDaGlsZCgpO2tlLmFkZChTZSk7Zm9yKHZhciBLZT0wO0tlPGRlW1BlXS5sZW5ndGg7S2UrKyl7dmFyIEZ0PWRlW1BlXVtLZV07a2UucmVtb3ZlKEZ0KSxDZS5hZGQoRnQpfX19KX0sYWUucHJvdG90eXBlLmNsZWFyQ29tcG91bmRzPWZ1bmN0aW9uKCl7dmFyIHNlPXt9LGRlPXt9O3RoaXMucGVyZm9ybURGU09uQ29tcG91bmRzKCk7Zm9yKHZhciBYPTA7WDx0aGlzLmNvbXBvdW5kT3JkZXIubGVuZ3RoO1grKylkZVt0aGlzLmNvbXBvdW5kT3JkZXJbWF0uaWRdPXRoaXMuY29tcG91bmRPcmRlcltYXSxzZVt0aGlzLmNvbXBvdW5kT3JkZXJbWF0uaWRdPVtdLmNvbmNhdCh0aGlzLmNvbXBvdW5kT3JkZXJbWF0uZ2V0Q2hpbGQoKS5nZXROb2RlcygpKSx0aGlzLmdyYXBoTWFuYWdlci5yZW1vdmUodGhpcy5jb21wb3VuZE9yZGVyW1hdLmdldENoaWxkKCkpLHRoaXMuY29tcG91bmRPcmRlcltYXS5jaGlsZD1udWxsO3RoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXMoKSx0aGlzLnRpbGVDb21wb3VuZE1lbWJlcnMoc2UsZGUpfSxhZS5wcm90b3R5cGUuY2xlYXJaZXJvRGVncmVlTWVtYmVycz1mdW5jdGlvbigpe3ZhciBzZT10aGlzLGRlPXRoaXMudGlsZWRaZXJvRGVncmVlUGFjaz1bXTtPYmplY3Qua2V5cyh0aGlzLm1lbWJlckdyb3VwcykuZm9yRWFjaChmdW5jdGlvbihYKXt2YXIgZ2U9c2UuaWRUb0R1bW15Tm9kZVtYXTtkZVtYXT1zZS50aWxlTm9kZXMoc2UubWVtYmVyR3JvdXBzW1hdLGdlLnBhZGRpbmdMZWZ0K2dlLnBhZGRpbmdSaWdodCksZ2UucmVjdC53aWR0aD1kZVtYXS53aWR0aCxnZS5yZWN0LmhlaWdodD1kZVtYXS5oZWlnaHR9KX0sYWUucHJvdG90eXBlLnJlcG9wdWxhdGVDb21wb3VuZHM9ZnVuY3Rpb24oKXtmb3IodmFyIHNlPXRoaXMuY29tcG91bmRPcmRlci5sZW5ndGgtMTtzZT49MDtzZS0tKXt2YXIgZGU9dGhpcy5jb21wb3VuZE9yZGVyW3NlXSxYPWRlLmlkLGdlPWRlLnBhZGRpbmdMZWZ0LFc9ZGUucGFkZGluZ1RvcDt0aGlzLmFkanVzdExvY2F0aW9ucyh0aGlzLnRpbGVkTWVtYmVyUGFja1tYXSxkZS5yZWN0LngsZGUucmVjdC55LGdlLFcpfX0sYWUucHJvdG90eXBlLnJlcG9wdWxhdGVaZXJvRGVncmVlTWVtYmVycz1mdW5jdGlvbigpe3ZhciBzZT10aGlzLGRlPXRoaXMudGlsZWRaZXJvRGVncmVlUGFjaztPYmplY3Qua2V5cyhkZSkuZm9yRWFjaChmdW5jdGlvbihYKXt2YXIgZ2U9c2UuaWRUb0R1bW15Tm9kZVtYXSxXPWdlLnBhZGRpbmdMZWZ0LHhlPWdlLnBhZGRpbmdUb3A7c2UuYWRqdXN0TG9jYXRpb25zKGRlW1hdLGdlLnJlY3QueCxnZS5yZWN0LnksVyx4ZSl9KX0sYWUucHJvdG90eXBlLmdldFRvQmVUaWxlZD1mdW5jdGlvbihzZSl7dmFyIGRlPXNlLmlkO2lmKHRoaXMudG9CZVRpbGVkW2RlXSE9bnVsbClyZXR1cm4gdGhpcy50b0JlVGlsZWRbZGVdO3ZhciBYPXNlLmdldENoaWxkKCk7aWYoWD09bnVsbClyZXR1cm4gdGhpcy50b0JlVGlsZWRbZGVdPSExLCExO2Zvcih2YXIgZ2U9WC5nZXROb2RlcygpLFc9MDtXPGdlLmxlbmd0aDtXKyspe3ZhciB4ZT1nZVtXXTtpZih0aGlzLmdldE5vZGVEZWdyZWUoeGUpPjApcmV0dXJuIHRoaXMudG9CZVRpbGVkW2RlXT0hMSwhMTtpZih4ZS5nZXRDaGlsZCgpPT1udWxsKXt0aGlzLnRvQmVUaWxlZFt4ZS5pZF09ITE7Y29udGludWV9aWYoIXRoaXMuZ2V0VG9CZVRpbGVkKHhlKSlyZXR1cm4gdGhpcy50b0JlVGlsZWRbZGVdPSExLCExfXJldHVybiB0aGlzLnRvQmVUaWxlZFtkZV09ITAsITB9LGFlLnByb3RvdHlwZS5nZXROb2RlRGVncmVlPWZ1bmN0aW9uKHNlKXtzZS5pZDtmb3IodmFyIGRlPXNlLmdldEVkZ2VzKCksWD0wLGdlPTA7Z2U8ZGUubGVuZ3RoO2dlKyspe3ZhciBXPWRlW2dlXTtXLmdldFNvdXJjZSgpLmlkIT09Vy5nZXRUYXJnZXQoKS5pZCYmKFg9WCsxKX1yZXR1cm4gWH0sYWUucHJvdG90eXBlLmdldE5vZGVEZWdyZWVXaXRoQ2hpbGRyZW49ZnVuY3Rpb24oc2Upe3ZhciBkZT10aGlzLmdldE5vZGVEZWdyZWUoc2UpO2lmKHNlLmdldENoaWxkKCk9PW51bGwpcmV0dXJuIGRlO2Zvcih2YXIgWD1zZS5nZXRDaGlsZCgpLmdldE5vZGVzKCksZ2U9MDtnZTxYLmxlbmd0aDtnZSsrKXt2YXIgVz1YW2dlXTtkZSs9dGhpcy5nZXROb2RlRGVncmVlV2l0aENoaWxkcmVuKFcpfXJldHVybiBkZX0sYWUucHJvdG90eXBlLnBlcmZvcm1ERlNPbkNvbXBvdW5kcz1mdW5jdGlvbigpe3RoaXMuY29tcG91bmRPcmRlcj1bXSx0aGlzLmZpbGxDb21wZXhPcmRlckJ5REZTKHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXROb2RlcygpKX0sYWUucHJvdG90eXBlLmZpbGxDb21wZXhPcmRlckJ5REZTPWZ1bmN0aW9uKHNlKXtmb3IodmFyIGRlPTA7ZGU8c2UubGVuZ3RoO2RlKyspe3ZhciBYPXNlW2RlXTtYLmdldENoaWxkKCkhPW51bGwmJnRoaXMuZmlsbENvbXBleE9yZGVyQnlERlMoWC5nZXRDaGlsZCgpLmdldE5vZGVzKCkpLHRoaXMuZ2V0VG9CZVRpbGVkKFgpJiZ0aGlzLmNvbXBvdW5kT3JkZXIucHVzaChYKX19LGFlLnByb3RvdHlwZS5hZGp1c3RMb2NhdGlvbnM9ZnVuY3Rpb24oc2UsZGUsWCxnZSxXKXtkZSs9Z2UsWCs9Vztmb3IodmFyIHhlPWRlLFU9MDtVPHNlLnJvd3MubGVuZ3RoO1UrKyl7dmFyIEZlPXNlLnJvd3NbVV07ZGU9eGU7Zm9yKHZhciBQZT0wLGplPTA7amU8RmUubGVuZ3RoO2plKyspe3ZhciBJZT1GZVtqZV07SWUucmVjdC54PWRlLEllLnJlY3QueT1YLGRlKz1JZS5yZWN0LndpZHRoK3NlLmhvcml6b250YWxQYWRkaW5nLEllLnJlY3QuaGVpZ2h0PlBlJiYoUGU9SWUucmVjdC5oZWlnaHQpfVgrPVBlK3NlLnZlcnRpY2FsUGFkZGluZ319LGFlLnByb3RvdHlwZS50aWxlQ29tcG91bmRNZW1iZXJzPWZ1bmN0aW9uKHNlLGRlKXt2YXIgWD10aGlzO3RoaXMudGlsZWRNZW1iZXJQYWNrPVtdLE9iamVjdC5rZXlzKHNlKS5mb3JFYWNoKGZ1bmN0aW9uKGdlKXt2YXIgVz1kZVtnZV07WC50aWxlZE1lbWJlclBhY2tbZ2VdPVgudGlsZU5vZGVzKHNlW2dlXSxXLnBhZGRpbmdMZWZ0K1cucGFkZGluZ1JpZ2h0KSxXLnJlY3Qud2lkdGg9WC50aWxlZE1lbWJlclBhY2tbZ2VdLndpZHRoLFcucmVjdC5oZWlnaHQ9WC50aWxlZE1lbWJlclBhY2tbZ2VdLmhlaWdodH0pfSxhZS5wcm90b3R5cGUudGlsZU5vZGVzPWZ1bmN0aW9uKHNlLGRlKXt2YXIgWD1QLlRJTElOR19QQURESU5HX1ZFUlRJQ0FMLGdlPVAuVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTCxXPXtyb3dzOltdLHJvd1dpZHRoOltdLHJvd0hlaWdodDpbXSx3aWR0aDowLGhlaWdodDpkZSx2ZXJ0aWNhbFBhZGRpbmc6WCxob3Jpem9udGFsUGFkZGluZzpnZX07c2Uuc29ydChmdW5jdGlvbihGZSxQZSl7cmV0dXJuIEZlLnJlY3Qud2lkdGgqRmUucmVjdC5oZWlnaHQ+UGUucmVjdC53aWR0aCpQZS5yZWN0LmhlaWdodD8tMTpGZS5yZWN0LndpZHRoKkZlLnJlY3QuaGVpZ2h0PFBlLnJlY3Qud2lkdGgqUGUucmVjdC5oZWlnaHQ/MTowfSk7Zm9yKHZhciB4ZT0wO3hlPHNlLmxlbmd0aDt4ZSsrKXt2YXIgVT1zZVt4ZV07Vy5yb3dzLmxlbmd0aD09MD90aGlzLmluc2VydE5vZGVUb1JvdyhXLFUsMCxkZSk6dGhpcy5jYW5BZGRIb3Jpem9udGFsKFcsVS5yZWN0LndpZHRoLFUucmVjdC5oZWlnaHQpP3RoaXMuaW5zZXJ0Tm9kZVRvUm93KFcsVSx0aGlzLmdldFNob3J0ZXN0Um93SW5kZXgoVyksZGUpOnRoaXMuaW5zZXJ0Tm9kZVRvUm93KFcsVSxXLnJvd3MubGVuZ3RoLGRlKSx0aGlzLnNoaWZ0VG9MYXN0Um93KFcpfXJldHVybiBXfSxhZS5wcm90b3R5cGUuaW5zZXJ0Tm9kZVRvUm93PWZ1bmN0aW9uKHNlLGRlLFgsZ2Upe3ZhciBXPWdlO2lmKFg9PXNlLnJvd3MubGVuZ3RoKXt2YXIgeGU9W107c2Uucm93cy5wdXNoKHhlKSxzZS5yb3dXaWR0aC5wdXNoKFcpLHNlLnJvd0hlaWdodC5wdXNoKDApfXZhciBVPXNlLnJvd1dpZHRoW1hdK2RlLnJlY3Qud2lkdGg7c2Uucm93c1tYXS5sZW5ndGg+MCYmKFUrPXNlLmhvcml6b250YWxQYWRkaW5nKSxzZS5yb3dXaWR0aFtYXT1VLHNlLndpZHRoPFUmJihzZS53aWR0aD1VKTt2YXIgRmU9ZGUucmVjdC5oZWlnaHQ7WD4wJiYoRmUrPXNlLnZlcnRpY2FsUGFkZGluZyk7dmFyIFBlPTA7RmU+c2Uucm93SGVpZ2h0W1hdJiYoUGU9c2Uucm93SGVpZ2h0W1hdLHNlLnJvd0hlaWdodFtYXT1GZSxQZT1zZS5yb3dIZWlnaHRbWF0tUGUpLHNlLmhlaWdodCs9UGUsc2Uucm93c1tYXS5wdXNoKGRlKX0sYWUucHJvdG90eXBlLmdldFNob3J0ZXN0Um93SW5kZXg9ZnVuY3Rpb24oc2Upe2Zvcih2YXIgZGU9LTEsWD1OdW1iZXIuTUFYX1ZBTFVFLGdlPTA7Z2U8c2Uucm93cy5sZW5ndGg7Z2UrKylzZS5yb3dXaWR0aFtnZV08WCYmKGRlPWdlLFg9c2Uucm93V2lkdGhbZ2VdKTtyZXR1cm4gZGV9LGFlLnByb3RvdHlwZS5nZXRMb25nZXN0Um93SW5kZXg9ZnVuY3Rpb24oc2Upe2Zvcih2YXIgZGU9LTEsWD1OdW1iZXIuTUlOX1ZBTFVFLGdlPTA7Z2U8c2Uucm93cy5sZW5ndGg7Z2UrKylzZS5yb3dXaWR0aFtnZV0+WCYmKGRlPWdlLFg9c2Uucm93V2lkdGhbZ2VdKTtyZXR1cm4gZGV9LGFlLnByb3RvdHlwZS5jYW5BZGRIb3Jpem9udGFsPWZ1bmN0aW9uKHNlLGRlLFgpe3ZhciBnZT10aGlzLmdldFNob3J0ZXN0Um93SW5kZXgoc2UpO2lmKGdlPDApcmV0dXJuITA7dmFyIFc9c2Uucm93V2lkdGhbZ2VdO2lmKFcrc2UuaG9yaXpvbnRhbFBhZGRpbmcrZGU8PXNlLndpZHRoKXJldHVybiEwO3ZhciB4ZT0wO3NlLnJvd0hlaWdodFtnZV08WCYmZ2U+MCYmKHhlPVgrc2UudmVydGljYWxQYWRkaW5nLXNlLnJvd0hlaWdodFtnZV0pO3ZhciBVO3NlLndpZHRoLVc+PWRlK3NlLmhvcml6b250YWxQYWRkaW5nP1U9KHNlLmhlaWdodCt4ZSkvKFcrZGUrc2UuaG9yaXpvbnRhbFBhZGRpbmcpOlU9KHNlLmhlaWdodCt4ZSkvc2Uud2lkdGgseGU9WCtzZS52ZXJ0aWNhbFBhZGRpbmc7dmFyIEZlO3JldHVybiBzZS53aWR0aDxkZT9GZT0oc2UuaGVpZ2h0K3hlKS9kZTpGZT0oc2UuaGVpZ2h0K3hlKS9zZS53aWR0aCxGZTwxJiYoRmU9MS9GZSksVTwxJiYoVT0xL1UpLFU8RmV9LGFlLnByb3RvdHlwZS5zaGlmdFRvTGFzdFJvdz1mdW5jdGlvbihzZSl7dmFyIGRlPXRoaXMuZ2V0TG9uZ2VzdFJvd0luZGV4KHNlKSxYPXNlLnJvd1dpZHRoLmxlbmd0aC0xLGdlPXNlLnJvd3NbZGVdLFc9Z2VbZ2UubGVuZ3RoLTFdLHhlPVcud2lkdGgrc2UuaG9yaXpvbnRhbFBhZGRpbmc7aWYoc2Uud2lkdGgtc2Uucm93V2lkdGhbWF0+eGUmJmRlIT1YKXtnZS5zcGxpY2UoLTEsMSksc2Uucm93c1tYXS5wdXNoKFcpLHNlLnJvd1dpZHRoW2RlXT1zZS5yb3dXaWR0aFtkZV0teGUsc2Uucm93V2lkdGhbWF09c2Uucm93V2lkdGhbWF0reGUsc2Uud2lkdGg9c2Uucm93V2lkdGhbaW5zdGFuY2UuZ2V0TG9uZ2VzdFJvd0luZGV4KHNlKV07Zm9yKHZhciBVPU51bWJlci5NSU5fVkFMVUUsRmU9MDtGZTxnZS5sZW5ndGg7RmUrKylnZVtGZV0uaGVpZ2h0PlUmJihVPWdlW0ZlXS5oZWlnaHQpO2RlPjAmJihVKz1zZS52ZXJ0aWNhbFBhZGRpbmcpO3ZhciBQZT1zZS5yb3dIZWlnaHRbZGVdK3NlLnJvd0hlaWdodFtYXTtzZS5yb3dIZWlnaHRbZGVdPVUsc2Uucm93SGVpZ2h0W1hdPFcuaGVpZ2h0K3NlLnZlcnRpY2FsUGFkZGluZyYmKHNlLnJvd0hlaWdodFtYXT1XLmhlaWdodCtzZS52ZXJ0aWNhbFBhZGRpbmcpO3ZhciBqZT1zZS5yb3dIZWlnaHRbZGVdK3NlLnJvd0hlaWdodFtYXTtzZS5oZWlnaHQrPWplLVBlLHRoaXMuc2hpZnRUb0xhc3RSb3coc2UpfX0sYWUucHJvdG90eXBlLnRpbGluZ1ByZUxheW91dD1mdW5jdGlvbigpe1AuVElMRSYmKHRoaXMuZ3JvdXBaZXJvRGVncmVlTWVtYmVycygpLHRoaXMuY2xlYXJDb21wb3VuZHMoKSx0aGlzLmNsZWFyWmVyb0RlZ3JlZU1lbWJlcnMoKSl9LGFlLnByb3RvdHlwZS50aWxpbmdQb3N0TGF5b3V0PWZ1bmN0aW9uKCl7UC5USUxFJiYodGhpcy5yZXBvcHVsYXRlWmVyb0RlZ3JlZU1lbWJlcnMoKSx0aGlzLnJlcG9wdWxhdGVDb21wb3VuZHMoKSl9LGFlLnByb3RvdHlwZS5yZWR1Y2VUcmVlcz1mdW5jdGlvbigpe2Zvcih2YXIgc2U9W10sZGU9ITAsWDtkZTspe3ZhciBnZT10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLFc9W107ZGU9ITE7Zm9yKHZhciB4ZT0wO3hlPGdlLmxlbmd0aDt4ZSsrKVg9Z2VbeGVdLFguZ2V0RWRnZXMoKS5sZW5ndGg9PTEmJiFYLmdldEVkZ2VzKClbMF0uaXNJbnRlckdyYXBoJiZYLmdldENoaWxkKCk9PW51bGwmJihXLnB1c2goW1gsWC5nZXRFZGdlcygpWzBdLFguZ2V0T3duZXIoKV0pLGRlPSEwKTtpZihkZT09ITApe2Zvcih2YXIgVT1bXSxGZT0wO0ZlPFcubGVuZ3RoO0ZlKyspV1tGZV1bMF0uZ2V0RWRnZXMoKS5sZW5ndGg9PTEmJihVLnB1c2goV1tGZV0pLFdbRmVdWzBdLmdldE93bmVyKCkucmVtb3ZlKFdbRmVdWzBdKSk7c2UucHVzaChVKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxFZGdlcygpfX10aGlzLnBydW5lZE5vZGVzQWxsPXNlfSxhZS5wcm90b3R5cGUuZ3Jvd1RyZWU9ZnVuY3Rpb24oc2Upe2Zvcih2YXIgZGU9c2UubGVuZ3RoLFg9c2VbZGUtMV0sZ2UsVz0wO1c8WC5sZW5ndGg7VysrKWdlPVhbV10sdGhpcy5maW5kUGxhY2Vmb3JQcnVuZWROb2RlKGdlKSxnZVsyXS5hZGQoZ2VbMF0pLGdlWzJdLmFkZChnZVsxXSxnZVsxXS5zb3VyY2UsZ2VbMV0udGFyZ2V0KTtzZS5zcGxpY2Uoc2UubGVuZ3RoLTEsMSksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKX0sYWUucHJvdG90eXBlLmZpbmRQbGFjZWZvclBydW5lZE5vZGU9ZnVuY3Rpb24oc2Upe3ZhciBkZSxYLGdlPXNlWzBdO2dlPT1zZVsxXS5zb3VyY2U/WD1zZVsxXS50YXJnZXQ6WD1zZVsxXS5zb3VyY2U7dmFyIFc9WC5zdGFydFgseGU9WC5maW5pc2hYLFU9WC5zdGFydFksRmU9WC5maW5pc2hZLFBlPTAsamU9MCxJZT0wLFNlPTAsQ2U9W1BlLEllLGplLFNlXTtpZihVPjApZm9yKHZhciBrZT1XO2tlPD14ZTtrZSsrKUNlWzBdKz10aGlzLmdyaWRba2VdW1UtMV0ubGVuZ3RoK3RoaXMuZ3JpZFtrZV1bVV0ubGVuZ3RoLTE7aWYoeGU8dGhpcy5ncmlkLmxlbmd0aC0xKWZvcih2YXIga2U9VTtrZTw9RmU7a2UrKylDZVsxXSs9dGhpcy5ncmlkW3hlKzFdW2tlXS5sZW5ndGgrdGhpcy5ncmlkW3hlXVtrZV0ubGVuZ3RoLTE7aWYoRmU8dGhpcy5ncmlkWzBdLmxlbmd0aC0xKWZvcih2YXIga2U9VztrZTw9eGU7a2UrKylDZVsyXSs9dGhpcy5ncmlkW2tlXVtGZSsxXS5sZW5ndGgrdGhpcy5ncmlkW2tlXVtGZV0ubGVuZ3RoLTE7aWYoVz4wKWZvcih2YXIga2U9VTtrZTw9RmU7a2UrKylDZVszXSs9dGhpcy5ncmlkW1ctMV1ba2VdLmxlbmd0aCt0aGlzLmdyaWRbV11ba2VdLmxlbmd0aC0xO2Zvcih2YXIgS2U9aWUuTUFYX1ZBTFVFLEZ0LE5lLGduPTA7Z248Q2UubGVuZ3RoO2duKyspQ2VbZ25dPEtlPyhLZT1DZVtnbl0sRnQ9MSxOZT1nbik6Q2VbZ25dPT1LZSYmRnQrKztpZihGdD09MyYmS2U9PTApQ2VbMF09PTAmJkNlWzFdPT0wJiZDZVsyXT09MD9kZT0xOkNlWzBdPT0wJiZDZVsxXT09MCYmQ2VbM109PTA/ZGU9MDpDZVswXT09MCYmQ2VbMl09PTAmJkNlWzNdPT0wP2RlPTM6Q2VbMV09PTAmJkNlWzJdPT0wJiZDZVszXT09MCYmKGRlPTIpO2Vsc2UgaWYoRnQ9PTImJktlPT0wKXt2YXIgX3Q9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjIpO0NlWzBdPT0wJiZDZVsxXT09MD9fdD09MD9kZT0wOmRlPTE6Q2VbMF09PTAmJkNlWzJdPT0wP190PT0wP2RlPTA6ZGU9MjpDZVswXT09MCYmQ2VbM109PTA/X3Q9PTA/ZGU9MDpkZT0zOkNlWzFdPT0wJiZDZVsyXT09MD9fdD09MD9kZT0xOmRlPTI6Q2VbMV09PTAmJkNlWzNdPT0wP190PT0wP2RlPTE6ZGU9MzpfdD09MD9kZT0yOmRlPTN9ZWxzZSBpZihGdD09NCYmS2U9PTApe3ZhciBfdD1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqNCk7ZGU9X3R9ZWxzZSBkZT1OZTtkZT09MD9nZS5zZXRDZW50ZXIoWC5nZXRDZW50ZXJYKCksWC5nZXRDZW50ZXJZKCktWC5nZXRIZWlnaHQoKS8yLVIuREVGQVVMVF9FREdFX0xFTkdUSC1nZS5nZXRIZWlnaHQoKS8yKTpkZT09MT9nZS5zZXRDZW50ZXIoWC5nZXRDZW50ZXJYKCkrWC5nZXRXaWR0aCgpLzIrUi5ERUZBVUxUX0VER0VfTEVOR1RIK2dlLmdldFdpZHRoKCkvMixYLmdldENlbnRlclkoKSk6ZGU9PTI/Z2Uuc2V0Q2VudGVyKFguZ2V0Q2VudGVyWCgpLFguZ2V0Q2VudGVyWSgpK1guZ2V0SGVpZ2h0KCkvMitSLkRFRkFVTFRfRURHRV9MRU5HVEgrZ2UuZ2V0SGVpZ2h0KCkvMik6Z2Uuc2V0Q2VudGVyKFguZ2V0Q2VudGVyWCgpLVguZ2V0V2lkdGgoKS8yLVIuREVGQVVMVF9FREdFX0xFTkdUSC1nZS5nZXRXaWR0aCgpLzIsWC5nZXRDZW50ZXJZKCkpfSxkLmV4cG9ydHM9YWV9LGZ1bmN0aW9uKGQscCx2KXt2YXIgYj17fTtiLmxheW91dEJhc2U9digwKSxiLkNvU0VDb25zdGFudHM9digxKSxiLkNvU0VFZGdlPXYoMiksYi5Db1NFR3JhcGg9digzKSxiLkNvU0VHcmFwaE1hbmFnZXI9dig0KSxiLkNvU0VMYXlvdXQ9dig2KSxiLkNvU0VOb2RlPXYoNSksZC5leHBvcnRzPWJ9XSl9KX0obndlKSksbndlLmV4cG9ydHN9KGZ1bmN0aW9uKGkscyl7KGZ1bmN0aW9uKGQscCl7aS5leHBvcnRzPXAoZG9uKCkpfSkoQWcsZnVuY3Rpb24odSl7cmV0dXJuIGZ1bmN0aW9uKGQpe3ZhciBwPXt9O2Z1bmN0aW9uIHYoYil7aWYocFtiXSlyZXR1cm4gcFtiXS5leHBvcnRzO3ZhciB5PXBbYl09e2k6YixsOiExLGV4cG9ydHM6e319O3JldHVybiBkW2JdLmNhbGwoeS5leHBvcnRzLHkseS5leHBvcnRzLHYpLHkubD0hMCx5LmV4cG9ydHN9cmV0dXJuIHYubT1kLHYuYz1wLHYuaT1mdW5jdGlvbihiKXtyZXR1cm4gYn0sdi5kPWZ1bmN0aW9uKGIseSxUKXt2Lm8oYix5KXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGIseSx7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0OlR9KX0sdi5uPWZ1bmN0aW9uKGIpe3ZhciB5PWImJmIuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBiLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGJ9O3JldHVybiB2LmQoeSwiYSIseSkseX0sdi5vPWZ1bmN0aW9uKGIseSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLHkpfSx2LnA9IiIsdih2LnM9MSl9KFtmdW5jdGlvbihkLHApe2QuZXhwb3J0cz11fSxmdW5jdGlvbihkLHAsdil7dmFyIGI9digwKS5sYXlvdXRCYXNlLkxheW91dENvbnN0YW50cyx5PXYoMCkubGF5b3V0QmFzZS5GRExheW91dENvbnN0YW50cyxUPXYoMCkuQ29TRUNvbnN0YW50cyxfPXYoMCkuQ29TRUxheW91dCxBPXYoMCkuQ29TRU5vZGUsUD12KDApLmxheW91dEJhc2UuUG9pbnRELFI9digwKS5sYXlvdXRCYXNlLkRpbWVuc2lvbkQsRj17cmVhZHk6ZnVuY3Rpb24oKXt9LHN0b3A6ZnVuY3Rpb24oKXt9LHF1YWxpdHk6ImRlZmF1bHQiLG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMSxyZWZyZXNoOjMwLGZpdDohMCxwYWRkaW5nOjEwLHJhbmRvbWl6ZTohMCxub2RlUmVwdWxzaW9uOjQ1MDAsaWRlYWxFZGdlTGVuZ3RoOjUwLGVkZ2VFbGFzdGljaXR5Oi40NSxuZXN0aW5nRmFjdG9yOi4xLGdyYXZpdHk6LjI1LG51bUl0ZXI6MjUwMCx0aWxlOiEwLGFuaW1hdGU6ImVuZCIsYW5pbWF0aW9uRHVyYXRpb246NTAwLHRpbGluZ1BhZGRpbmdWZXJ0aWNhbDoxMCx0aWxpbmdQYWRkaW5nSG9yaXpvbnRhbDoxMCxncmF2aXR5UmFuZ2VDb21wb3VuZDoxLjUsZ3Jhdml0eUNvbXBvdW5kOjEsZ3Jhdml0eVJhbmdlOjMuOCxpbml0aWFsRW5lcmd5T25JbmNyZW1lbnRhbDouNX07ZnVuY3Rpb24gaihvZSxwZSl7dmFyIGJlPXt9O2Zvcih2YXIgYWUgaW4gb2UpYmVbYWVdPW9lW2FlXTtmb3IodmFyIGFlIGluIHBlKWJlW2FlXT1wZVthZV07cmV0dXJuIGJlfWZ1bmN0aW9uIEsob2Upe3RoaXMub3B0aW9ucz1qKEYsb2UpLGVlKHRoaXMub3B0aW9ucyl9dmFyIGVlPWZ1bmN0aW9uKHBlKXtwZS5ub2RlUmVwdWxzaW9uIT1udWxsJiYoVC5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSD15LkRFRkFVTFRfUkVQVUxTSU9OX1NUUkVOR1RIPXBlLm5vZGVSZXB1bHNpb24pLHBlLmlkZWFsRWRnZUxlbmd0aCE9bnVsbCYmKFQuREVGQVVMVF9FREdFX0xFTkdUSD15LkRFRkFVTFRfRURHRV9MRU5HVEg9cGUuaWRlYWxFZGdlTGVuZ3RoKSxwZS5lZGdlRWxhc3RpY2l0eSE9bnVsbCYmKFQuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEg9eS5ERUZBVUxUX1NQUklOR19TVFJFTkdUSD1wZS5lZGdlRWxhc3RpY2l0eSkscGUubmVzdGluZ0ZhY3RvciE9bnVsbCYmKFQuUEVSX0xFVkVMX0lERUFMX0VER0VfTEVOR1RIX0ZBQ1RPUj15LlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1I9cGUubmVzdGluZ0ZhY3RvcikscGUuZ3Jhdml0eSE9bnVsbCYmKFQuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RIPXkuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RIPXBlLmdyYXZpdHkpLHBlLm51bUl0ZXIhPW51bGwmJihULk1BWF9JVEVSQVRJT05TPXkuTUFYX0lURVJBVElPTlM9cGUubnVtSXRlcikscGUuZ3Jhdml0eVJhbmdlIT1udWxsJiYoVC5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SPXkuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj1wZS5ncmF2aXR5UmFuZ2UpLHBlLmdyYXZpdHlDb21wb3VuZCE9bnVsbCYmKFQuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIPXkuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIPXBlLmdyYXZpdHlDb21wb3VuZCkscGUuZ3Jhdml0eVJhbmdlQ29tcG91bmQhPW51bGwmJihULkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1I9eS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SPXBlLmdyYXZpdHlSYW5nZUNvbXBvdW5kKSxwZS5pbml0aWFsRW5lcmd5T25JbmNyZW1lbnRhbCE9bnVsbCYmKFQuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTD15LkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUw9cGUuaW5pdGlhbEVuZXJneU9uSW5jcmVtZW50YWwpLHBlLnF1YWxpdHk9PSJkcmFmdCI/Yi5RVUFMSVRZPTA6cGUucXVhbGl0eT09InByb29mIj9iLlFVQUxJVFk9MjpiLlFVQUxJVFk9MSxULk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz15Lk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz1iLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz1wZS5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHMsVC5ERUZBVUxUX0lOQ1JFTUVOVEFMPXkuREVGQVVMVF9JTkNSRU1FTlRBTD1iLkRFRkFVTFRfSU5DUkVNRU5UQUw9IXBlLnJhbmRvbWl6ZSxULkFOSU1BVEU9eS5BTklNQVRFPWIuQU5JTUFURT1wZS5hbmltYXRlLFQuVElMRT1wZS50aWxlLFQuVElMSU5HX1BBRERJTkdfVkVSVElDQUw9dHlwZW9mIHBlLnRpbGluZ1BhZGRpbmdWZXJ0aWNhbD09ImZ1bmN0aW9uIj9wZS50aWxpbmdQYWRkaW5nVmVydGljYWwuY2FsbCgpOnBlLnRpbGluZ1BhZGRpbmdWZXJ0aWNhbCxULlRJTElOR19QQURESU5HX0hPUklaT05UQUw9dHlwZW9mIHBlLnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsPT0iZnVuY3Rpb24iP3BlLnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsLmNhbGwoKTpwZS50aWxpbmdQYWRkaW5nSG9yaXpvbnRhbH07Sy5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIG9lLHBlLGJlPXRoaXMub3B0aW9uczt0aGlzLmlkVG9MTm9kZT17fTt2YXIgYWU9dGhpcy5sYXlvdXQ9bmV3IF8sbmU9dGhpcztuZS5zdG9wcGVkPSExLHRoaXMuY3k9dGhpcy5vcHRpb25zLmN5LHRoaXMuY3kudHJpZ2dlcih7dHlwZToibGF5b3V0c3RhcnQiLGxheW91dDp0aGlzfSk7dmFyIHNlPWFlLm5ld0dyYXBoTWFuYWdlcigpO3RoaXMuZ209c2U7dmFyIGRlPXRoaXMub3B0aW9ucy5lbGVzLm5vZGVzKCksWD10aGlzLm9wdGlvbnMuZWxlcy5lZGdlcygpO3RoaXMucm9vdD1zZS5hZGRSb290KCksdGhpcy5wcm9jZXNzQ2hpbGRyZW5MaXN0KHRoaXMucm9vdCx0aGlzLmdldFRvcE1vc3ROb2RlcyhkZSksYWUpO2Zvcih2YXIgZ2U9MDtnZTxYLmxlbmd0aDtnZSsrKXt2YXIgVz1YW2dlXSx4ZT10aGlzLmlkVG9MTm9kZVtXLmRhdGEoInNvdXJjZSIpXSxVPXRoaXMuaWRUb0xOb2RlW1cuZGF0YSgidGFyZ2V0IildO2lmKHhlIT09VSYmeGUuZ2V0RWRnZXNCZXR3ZWVuKFUpLmxlbmd0aD09MCl7dmFyIEZlPXNlLmFkZChhZS5uZXdFZGdlKCkseGUsVSk7RmUuaWQ9Vy5pZCgpfX12YXIgUGU9ZnVuY3Rpb24oU2UsQ2Upe3R5cGVvZiBTZT09Im51bWJlciImJihTZT1DZSk7dmFyIGtlPVNlLmRhdGEoImlkIiksS2U9bmUuaWRUb0xOb2RlW2tlXTtyZXR1cm57eDpLZS5nZXRSZWN0KCkuZ2V0Q2VudGVyWCgpLHk6S2UuZ2V0UmVjdCgpLmdldENlbnRlclkoKX19LGplPWZ1bmN0aW9uIEllKCl7Zm9yKHZhciBTZT1mdW5jdGlvbigpe2JlLmZpdCYmYmUuY3kuZml0KGJlLmVsZXMsYmUucGFkZGluZyksb2V8fChvZT0hMCxuZS5jeS5vbmUoImxheW91dHJlYWR5IixiZS5yZWFkeSksbmUuY3kudHJpZ2dlcih7dHlwZToibGF5b3V0cmVhZHkiLGxheW91dDpuZX0pKX0sQ2U9bmUub3B0aW9ucy5yZWZyZXNoLGtlLEtlPTA7S2U8Q2UmJiFrZTtLZSsrKWtlPW5lLnN0b3BwZWR8fG5lLmxheW91dC50aWNrKCk7aWYoa2Upe2FlLmNoZWNrTGF5b3V0U3VjY2VzcygpJiYhYWUuaXNTdWJMYXlvdXQmJmFlLmRvUG9zdExheW91dCgpLGFlLnRpbGluZ1Bvc3RMYXlvdXQmJmFlLnRpbGluZ1Bvc3RMYXlvdXQoKSxhZS5pc0xheW91dEZpbmlzaGVkPSEwLG5lLm9wdGlvbnMuZWxlcy5ub2RlcygpLnBvc2l0aW9ucyhQZSksU2UoKSxuZS5jeS5vbmUoImxheW91dHN0b3AiLG5lLm9wdGlvbnMuc3RvcCksbmUuY3kudHJpZ2dlcih7dHlwZToibGF5b3V0c3RvcCIsbGF5b3V0Om5lfSkscGUmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKHBlKSxvZT0hMTtyZXR1cm59dmFyIEZ0PW5lLmxheW91dC5nZXRQb3NpdGlvbnNEYXRhKCk7YmUuZWxlcy5ub2RlcygpLnBvc2l0aW9ucyhmdW5jdGlvbihOZSxnbil7aWYodHlwZW9mIE5lPT0ibnVtYmVyIiYmKE5lPWduKSwhTmUuaXNQYXJlbnQoKSl7Zm9yKHZhciBfdD1OZS5pZCgpLEV0PUZ0W190XSxHdD1OZTtFdD09bnVsbCYmKEV0PUZ0W0d0LmRhdGEoInBhcmVudCIpXXx8RnRbIkR1bW15Q29tcG91bmRfIitHdC5kYXRhKCJwYXJlbnQiKV0sRnRbX3RdPUV0LEd0PUd0LnBhcmVudCgpWzBdLEd0IT1udWxsKTspO3JldHVybiBFdCE9bnVsbD97eDpFdC54LHk6RXQueX06e3g6TmUucG9zaXRpb24oIngiKSx5Ok5lLnBvc2l0aW9uKCJ5Iil9fX0pLFNlKCkscGU9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKEllKX07cmV0dXJuIGFlLmFkZExpc3RlbmVyKCJsYXlvdXRzdGFydGVkIixmdW5jdGlvbigpe25lLm9wdGlvbnMuYW5pbWF0ZT09PSJkdXJpbmciJiYocGU9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGplKSl9KSxhZS5ydW5MYXlvdXQoKSx0aGlzLm9wdGlvbnMuYW5pbWF0ZSE9PSJkdXJpbmciJiYobmUub3B0aW9ucy5lbGVzLm5vZGVzKCkubm90KCI6cGFyZW50IikubGF5b3V0UG9zaXRpb25zKG5lLG5lLm9wdGlvbnMsUGUpLG9lPSExKSx0aGlzfSxLLnByb3RvdHlwZS5nZXRUb3BNb3N0Tm9kZXM9ZnVuY3Rpb24ob2Upe2Zvcih2YXIgcGU9e30sYmU9MDtiZTxvZS5sZW5ndGg7YmUrKylwZVtvZVtiZV0uaWQoKV09ITA7dmFyIGFlPW9lLmZpbHRlcihmdW5jdGlvbihuZSxzZSl7dHlwZW9mIG5lPT0ibnVtYmVyIiYmKG5lPXNlKTtmb3IodmFyIGRlPW5lLnBhcmVudCgpWzBdO2RlIT1udWxsOyl7aWYocGVbZGUuaWQoKV0pcmV0dXJuITE7ZGU9ZGUucGFyZW50KClbMF19cmV0dXJuITB9KTtyZXR1cm4gYWV9LEsucHJvdG90eXBlLnByb2Nlc3NDaGlsZHJlbkxpc3Q9ZnVuY3Rpb24ob2UscGUsYmUpe2Zvcih2YXIgYWU9cGUubGVuZ3RoLG5lPTA7bmU8YWU7bmUrKyl7dmFyIHNlPXBlW25lXSxkZT1zZS5jaGlsZHJlbigpLFgsZ2U9c2UubGF5b3V0RGltZW5zaW9ucyh7bm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOnRoaXMub3B0aW9ucy5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHN9KTtpZihzZS5vdXRlcldpZHRoKCkhPW51bGwmJnNlLm91dGVySGVpZ2h0KCkhPW51bGw/WD1vZS5hZGQobmV3IEEoYmUuZ3JhcGhNYW5hZ2VyLG5ldyBQKHNlLnBvc2l0aW9uKCJ4IiktZ2Uudy8yLHNlLnBvc2l0aW9uKCJ5IiktZ2UuaC8yKSxuZXcgUihwYXJzZUZsb2F0KGdlLncpLHBhcnNlRmxvYXQoZ2UuaCkpKSk6WD1vZS5hZGQobmV3IEEodGhpcy5ncmFwaE1hbmFnZXIpKSxYLmlkPXNlLmRhdGEoImlkIiksWC5wYWRkaW5nTGVmdD1wYXJzZUludChzZS5jc3MoInBhZGRpbmciKSksWC5wYWRkaW5nVG9wPXBhcnNlSW50KHNlLmNzcygicGFkZGluZyIpKSxYLnBhZGRpbmdSaWdodD1wYXJzZUludChzZS5jc3MoInBhZGRpbmciKSksWC5wYWRkaW5nQm90dG9tPXBhcnNlSW50KHNlLmNzcygicGFkZGluZyIpKSx0aGlzLm9wdGlvbnMubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzJiZzZS5pc1BhcmVudCgpKXt2YXIgVz1zZS5ib3VuZGluZ0JveCh7aW5jbHVkZUxhYmVsczohMCxpbmNsdWRlTm9kZXM6ITF9KS53LHhlPXNlLmJvdW5kaW5nQm94KHtpbmNsdWRlTGFiZWxzOiEwLGluY2x1ZGVOb2RlczohMX0pLmgsVT1zZS5jc3MoInRleHQtaGFsaWduIik7WC5sYWJlbFdpZHRoPVcsWC5sYWJlbEhlaWdodD14ZSxYLmxhYmVsUG9zPVV9aWYodGhpcy5pZFRvTE5vZGVbc2UuZGF0YSgiaWQiKV09WCxpc05hTihYLnJlY3QueCkmJihYLnJlY3QueD0wKSxpc05hTihYLnJlY3QueSkmJihYLnJlY3QueT0wKSxkZSE9bnVsbCYmZGUubGVuZ3RoPjApe3ZhciBGZTtGZT1iZS5nZXRHcmFwaE1hbmFnZXIoKS5hZGQoYmUubmV3R3JhcGgoKSxYKSx0aGlzLnByb2Nlc3NDaGlsZHJlbkxpc3QoRmUsZGUsYmUpfX19LEsucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdG9wcGVkPSEwLHRoaXN9O3ZhciBpZT1mdW5jdGlvbihwZSl7cGUoImxheW91dCIsImNvc2UtYmlsa2VudCIsSyl9O3R5cGVvZiBjeXRvc2NhcGU8InUiJiZpZShjeXRvc2NhcGUpLGQuZXhwb3J0cz1pZX1dKX0pfSkoZFdlKTt2YXIgZ29uPWRXZS5leHBvcnRzO2NvbnN0IHBvbj1oQyhnb24pLGJvbj0xMixtb249ZnVuY3Rpb24oaSxzLHUsZCl7cy5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsIm5vZGUtIit1LmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIitpLnR5cGUyU3RyKHUudHlwZSkpLmF0dHIoImQiLGBNMCAke3UuaGVpZ2h0LTV9IHYkey11LmhlaWdodCsyKjV9IHEwLC01IDUsLTUgaCR7dS53aWR0aC0yKjV9IHE1LDAgNSw1IHYke3UuaGVpZ2h0LTV9IEgwIFpgKSxzLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwibm9kZS1saW5lLSIrZCkuYXR0cigieDEiLDApLmF0dHIoInkxIix1LmhlaWdodCkuYXR0cigieDIiLHUud2lkdGgpLmF0dHIoInkyIix1LmhlaWdodCl9LHZvbj1mdW5jdGlvbihpLHMsdSl7cy5hcHBlbmQoInJlY3QiKS5hdHRyKCJpZCIsIm5vZGUtIit1LmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIitpLnR5cGUyU3RyKHUudHlwZSkpLmF0dHIoImhlaWdodCIsdS5oZWlnaHQpLmF0dHIoIndpZHRoIix1LndpZHRoKX0sd29uPWZ1bmN0aW9uKGkscyx1KXtjb25zdCBkPXUud2lkdGgscD11LmhlaWdodCx2PS4xNSpkLGI9LjI1KmQseT0uMzUqZCxUPS4yKmQ7cy5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsIm5vZGUtIit1LmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIitpLnR5cGUyU3RyKHUudHlwZSkpLmF0dHIoImQiLGBNMCAwIGEke3Z9LCR7dn0gMCAwLDEgJHtkKi4yNX0sJHstMSpkKi4xfQogICAgICBhJHt5fSwke3l9IDEgMCwxICR7ZCouNH0sJHstMSpkKi4xfQogICAgICBhJHtifSwke2J9IDEgMCwxICR7ZCouMzV9LCR7MSpkKi4yfQoKICAgICAgYSR7dn0sJHt2fSAxIDAsMSAke2QqLjE1fSwkezEqcCouMzV9CiAgICAgIGEke1R9LCR7VH0gMSAwLDEgJHstMSpkKi4xNX0sJHsxKnAqLjY1fQoKICAgICAgYSR7Yn0sJHt2fSAxIDAsMSAkey0xKmQqLjI1fSwke2QqLjE1fQogICAgICBhJHt5fSwke3l9IDEgMCwxICR7LTEqZCouNX0sMAogICAgICBhJHt2fSwke3Z9IDEgMCwxICR7LTEqZCouMjV9LCR7LTEqZCouMTV9CgogICAgICBhJHt2fSwke3Z9IDEgMCwxICR7LTEqZCouMX0sJHstMSpwKi4zNX0KICAgICAgYSR7VH0sJHtUfSAxIDAsMSAke2QqLjF9LCR7LTEqcCouNjV9CgogICAgSDAgVjAgWmApfSx5b249ZnVuY3Rpb24oaSxzLHUpe2NvbnN0IGQ9dS53aWR0aCxwPXUuaGVpZ2h0LHY9LjE1KmQ7cy5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsIm5vZGUtIit1LmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIitpLnR5cGUyU3RyKHUudHlwZSkpLmF0dHIoImQiLGBNMCAwIGEke3Z9LCR7dn0gMSAwLDAgJHtkKi4yNX0sJHstMSpwKi4xfQogICAgICBhJHt2fSwke3Z9IDEgMCwwICR7ZCouMjV9LDAKICAgICAgYSR7dn0sJHt2fSAxIDAsMCAke2QqLjI1fSwwCiAgICAgIGEke3Z9LCR7dn0gMSAwLDAgJHtkKi4yNX0sJHsxKnAqLjF9CgogICAgICBhJHt2fSwke3Z9IDEgMCwwICR7ZCouMTV9LCR7MSpwKi4zM30KICAgICAgYSR7diouOH0sJHt2Ki44fSAxIDAsMCAwLCR7MSpwKi4zNH0KICAgICAgYSR7dn0sJHt2fSAxIDAsMCAkey0xKmQqLjE1fSwkezEqcCouMzN9CgogICAgICBhJHt2fSwke3Z9IDEgMCwwICR7LTEqZCouMjV9LCR7cCouMTV9CiAgICAgIGEke3Z9LCR7dn0gMSAwLDAgJHstMSpkKi4yNX0sMAogICAgICBhJHt2fSwke3Z9IDEgMCwwICR7LTEqZCouMjV9LDAKICAgICAgYSR7dn0sJHt2fSAxIDAsMCAkey0xKmQqLjI1fSwkey0xKnAqLjE1fQoKICAgICAgYSR7dn0sJHt2fSAxIDAsMCAkey0xKmQqLjF9LCR7LTEqcCouMzN9CiAgICAgIGEke3YqLjh9LCR7diouOH0gMSAwLDAgMCwkey0xKnAqLjM0fQogICAgICBhJHt2fSwke3Z9IDEgMCwwICR7ZCouMX0sJHstMSpwKi4zM30KCiAgICBIMCBWMCBaYCl9LHhvbj1mdW5jdGlvbihpLHMsdSl7cy5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImlkIiwibm9kZS0iK3UuaWQpLmF0dHIoImNsYXNzIiwibm9kZS1ia2cgbm9kZS0iK2kudHlwZTJTdHIodS50eXBlKSkuYXR0cigiciIsdS53aWR0aC8yKX07ZnVuY3Rpb24ga29uKGkscyx1LGQscCl7cmV0dXJuIGkuaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIixkLm1hcChmdW5jdGlvbih2KXtyZXR1cm4gdi54KyIsIit2Lnl9KS5qb2luKCIgIikpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhwLndpZHRoLXMpLzIrIiwgIit1KyIpIil9Y29uc3QgRW9uPWZ1bmN0aW9uKGkscyx1KXtjb25zdCBkPXUuaGVpZ2h0LHY9ZC80LGI9dS53aWR0aC11LnBhZGRpbmcrMip2LHk9W3t4OnYseTowfSx7eDpiLXYseTowfSx7eDpiLHk6LWQvMn0se3g6Yi12LHk6LWR9LHt4OnYseTotZH0se3g6MCx5Oi1kLzJ9XTtrb24ocyxiLGQseSx1KX0sVG9uPWZ1bmN0aW9uKGkscyx1KXtzLmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIiwibm9kZS0iK3UuaWQpLmF0dHIoImNsYXNzIiwibm9kZS1ia2cgbm9kZS0iK2kudHlwZTJTdHIodS50eXBlKSkuYXR0cigiaGVpZ2h0Iix1LmhlaWdodCkuYXR0cigicngiLHUucGFkZGluZykuYXR0cigicnkiLHUucGFkZGluZykuYXR0cigid2lkdGgiLHUud2lkdGgpfSxDb249ZnVuY3Rpb24oaSxzLHUsZCxwKXtjb25zdCB2PXAuaHRtbExhYmVscyxiPWQlKGJvbi0xKSx5PXMuYXBwZW5kKCJnIik7dS5zZWN0aW9uPWI7bGV0IFQ9InNlY3Rpb24tIitiO2I8MCYmKFQrPSIgc2VjdGlvbi1yb290IikseS5hdHRyKCJjbGFzcyIsKHUuY2xhc3M/dS5jbGFzcysiICI6IiIpKyJtaW5kbWFwLW5vZGUgIitUKTtjb25zdCBfPXkuYXBwZW5kKCJnIiksQT15LmFwcGVuZCgiZyIpLFA9dS5kZXNjci5yZXBsYWNlKC8oPGJyXC8qPikvZyxgCmApO0pRKEEsUCx7dXNlSHRtbExhYmVsczp2LHdpZHRoOnUud2lkdGgsY2xhc3NlczoibWluZG1hcC1ub2RlLWxhYmVsIn0pLHZ8fEEuYXR0cigiZHkiLCIxZW0iKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIik7Y29uc3QgUj1BLm5vZGUoKS5nZXRCQm94KCksW0ZdPU5DKHAuZm9udFNpemUpO2lmKHUuaGVpZ2h0PVIuaGVpZ2h0K0YqMS4xKi41K3UucGFkZGluZyx1LndpZHRoPVIud2lkdGgrMip1LnBhZGRpbmcsdS5pY29uKWlmKHUudHlwZT09PWkubm9kZVR5cGUuQ0lSQ0xFKXUuaGVpZ2h0Kz01MCx1LndpZHRoKz01MCx5LmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoImhlaWdodCIsIjUwcHgiKS5hdHRyKCJ3aWR0aCIsdS53aWR0aCkuYXR0cigic3R5bGUiLCJ0ZXh0LWFsaWduOiBjZW50ZXI7IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImljb24tY29udGFpbmVyIikuYXBwZW5kKCJpIikuYXR0cigiY2xhc3MiLCJub2RlLWljb24tIitiKyIgIit1Lmljb24pLEEuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdS53aWR0aC8yKyIsICIrKHUuaGVpZ2h0LzItMS41KnUucGFkZGluZykrIikiKTtlbHNle3Uud2lkdGgrPTUwO2NvbnN0IGo9dS5oZWlnaHQ7dS5oZWlnaHQ9TWF0aC5tYXgoaiw2MCk7Y29uc3QgSz1NYXRoLmFicyh1LmhlaWdodC1qKTt5LmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoIndpZHRoIiwiNjBweCIpLmF0dHIoImhlaWdodCIsdS5oZWlnaHQpLmF0dHIoInN0eWxlIiwidGV4dC1hbGlnbjogY2VudGVyO21hcmdpbi10b3A6IitLLzIrInB4OyIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJpY29uLWNvbnRhaW5lciIpLmFwcGVuZCgiaSIpLmF0dHIoImNsYXNzIiwibm9kZS1pY29uLSIrYisiICIrdS5pY29uKSxBLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKygyNSt1LndpZHRoLzIpKyIsICIrKEsvMit1LnBhZGRpbmcvMikrIikiKX1lbHNlIGlmKHYpe2NvbnN0IGo9KHUud2lkdGgtUi53aWR0aCkvMixLPSh1LmhlaWdodC1SLmhlaWdodCkvMjtBLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2orIiwgIitLKyIpIil9ZWxzZXtjb25zdCBqPXUud2lkdGgvMixLPXUucGFkZGluZy8yO0EuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIraisiLCAiK0srIikiKX1zd2l0Y2godS50eXBlKXtjYXNlIGkubm9kZVR5cGUuREVGQVVMVDptb24oaSxfLHUsYik7YnJlYWs7Y2FzZSBpLm5vZGVUeXBlLlJPVU5ERURfUkVDVDpUb24oaSxfLHUpO2JyZWFrO2Nhc2UgaS5ub2RlVHlwZS5SRUNUOnZvbihpLF8sdSk7YnJlYWs7Y2FzZSBpLm5vZGVUeXBlLkNJUkNMRTpfLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3Uud2lkdGgvMisiLCAiKyArdS5oZWlnaHQvMisiKSIpLHhvbihpLF8sdSk7YnJlYWs7Y2FzZSBpLm5vZGVUeXBlLkNMT1VEOndvbihpLF8sdSk7YnJlYWs7Y2FzZSBpLm5vZGVUeXBlLkJBTkc6eW9uKGksXyx1KTticmVhaztjYXNlIGkubm9kZVR5cGUuSEVYQUdPTjpFb24oaSxfLHUpO2JyZWFrfXJldHVybiBpLnNldEVsZW1lbnRGb3JJZCh1LmlkLHkpLHUuaGVpZ2h0fSxTb249ZnVuY3Rpb24oaSxzKXtjb25zdCB1PWkuZ2V0RWxlbWVudEJ5SWQocy5pZCksZD1zLnh8fDAscD1zLnl8fDA7dS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitkKyIsIitwKyIpIil9O2ZXZS51c2UocG9uKTtmdW5jdGlvbiBiV2UoaSxzLHUsZCxwKXtDb24oaSxzLHUsZCxwKSx1LmNoaWxkcmVuJiZ1LmNoaWxkcmVuLmZvckVhY2goKHYsYik9PntiV2UoaSxzLHYsZDwwP2I6ZCxwKX0pfWZ1bmN0aW9uIF9vbihpLHMpe3MuZWRnZXMoKS5tYXAoKHUsZCk9Pntjb25zdCBwPXUuZGF0YSgpO2lmKHVbMF0uX3ByaXZhdGUuYm9keUJvdW5kcyl7Y29uc3Qgdj11WzBdLl9wcml2YXRlLnJzY3JhdGNoO1hlLnRyYWNlKCJFZGdlOiAiLGQscCksaS5pbnNlcnQoInBhdGgiKS5hdHRyKCJkIixgTSAke3Yuc3RhcnRYfSwke3Yuc3RhcnRZfSBMICR7di5taWRYfSwke3YubWlkWX0gTCR7di5lbmRYfSwke3YuZW5kWX0gYCkuYXR0cigiY2xhc3MiLCJlZGdlIHNlY3Rpb24tZWRnZS0iK3Auc2VjdGlvbisiIGVkZ2UtZGVwdGgtIitwLmRlcHRoKX19KX1mdW5jdGlvbiBtV2UoaSxzLHUsZCl7cy5hZGQoe2dyb3VwOiJub2RlcyIsZGF0YTp7aWQ6aS5pZC50b1N0cmluZygpLGxhYmVsVGV4dDppLmRlc2NyLGhlaWdodDppLmhlaWdodCx3aWR0aDppLndpZHRoLGxldmVsOmQsbm9kZUlkOmkuaWQscGFkZGluZzppLnBhZGRpbmcsdHlwZTppLnR5cGV9LHBvc2l0aW9uOnt4OmkueCx5OmkueX19KSxpLmNoaWxkcmVuJiZpLmNoaWxkcmVuLmZvckVhY2gocD0+e21XZShwLHMsdSxkKzEpLHMuYWRkKHtncm91cDoiZWRnZXMiLGRhdGE6e2lkOmAke2kuaWR9XyR7cC5pZH1gLHNvdXJjZTppLmlkLHRhcmdldDpwLmlkLGRlcHRoOmQsc2VjdGlvbjpwLnNlY3Rpb259fSl9KX1mdW5jdGlvbiBBb24oaSxzKXtyZXR1cm4gbmV3IFByb21pc2UodT0+e2NvbnN0IGQ9SXIoImJvZHkiKS5hcHBlbmQoImRpdiIpLmF0dHIoImlkIiwiY3kiKS5hdHRyKCJzdHlsZSIsImRpc3BsYXk6bm9uZSIpLHA9ZldlKHtjb250YWluZXI6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImN5Iiksc3R5bGU6W3tzZWxlY3RvcjoiZWRnZSIsc3R5bGU6eyJjdXJ2ZS1zdHlsZSI6ImJlemllciJ9fV19KTtkLnJlbW92ZSgpLG1XZShpLHAscywwKSxwLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbih2KXt2LmxheW91dERpbWVuc2lvbnM9KCk9Pntjb25zdCBiPXYuZGF0YSgpO3JldHVybnt3OmIud2lkdGgsaDpiLmhlaWdodH19fSkscC5sYXlvdXQoe25hbWU6ImNvc2UtYmlsa2VudCIscXVhbGl0eToicHJvb2YiLHN0eWxlRW5hYmxlZDohMSxhbmltYXRlOiExfSkucnVuKCkscC5yZWFkeSh2PT57WGUuaW5mbygiUmVhZHkiLHYpLHUocCl9KX0pfWZ1bmN0aW9uIExvbihpLHMpe3Mubm9kZXMoKS5tYXAoKHUsZCk9Pntjb25zdCBwPXUuZGF0YSgpO3AueD11LnBvc2l0aW9uKCkueCxwLnk9dS5wb3NpdGlvbigpLnksU29uKGkscCk7Y29uc3Qgdj1pLmdldEVsZW1lbnRCeUlkKHAubm9kZUlkKTtYZS5pbmZvKCJJZDoiLGQsIlBvc2l0aW9uOiAoIix1LnBvc2l0aW9uKCkueCwiLCAiLHUucG9zaXRpb24oKS55LCIpIixwKSx2LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3UucG9zaXRpb24oKS54LXAud2lkdGgvMn0sICR7dS5wb3NpdGlvbigpLnktcC5oZWlnaHQvMn0pYCksdi5hdHRyKCJhdHRyIixgYXBhLSR7ZH0pYCl9KX1jb25zdCBNb249e2RyYXc6YXN5bmMoaSxzLHUsZCk9Pnt2YXIgUCxSO1hlLmRlYnVnKGBSZW5kZXJpbmcgbWluZG1hcCBkaWFncmFtCmAraSk7Y29uc3QgcD1kLmRiLHY9cC5nZXRNaW5kbWFwKCk7aWYoIXYpcmV0dXJuO2NvbnN0IGI9cXQoKTtiLmh0bWxMYWJlbHM9ITE7Y29uc3QgeT1yUihzKSxUPXkuYXBwZW5kKCJnIik7VC5hdHRyKCJjbGFzcyIsIm1pbmRtYXAtZWRnZXMiKTtjb25zdCBfPXkuYXBwZW5kKCJnIik7Xy5hdHRyKCJjbGFzcyIsIm1pbmRtYXAtbm9kZXMiKSxiV2UocCxfLHYsLTEsYik7Y29uc3QgQT1hd2FpdCBBb24odixiKTtfb24oVCxBKSxMb24ocCxBKSx5OSh2b2lkIDAseSwoKFA9Yi5taW5kbWFwKT09bnVsbD92b2lkIDA6UC5wYWRkaW5nKT8/c2gubWluZG1hcC5wYWRkaW5nLCgoUj1iLm1pbmRtYXApPT1udWxsP3ZvaWQgMDpSLnVzZU1heFdpZHRoKT8/c2gubWluZG1hcC51c2VNYXhXaWR0aCl9fSxEb249aT0+e2xldCBzPSIiO2ZvcihsZXQgdT0wO3U8aS5USEVNRV9DT0xPUl9MSU1JVDt1KyspaVsibGluZUNvbG9yIit1XT1pWyJsaW5lQ29sb3IiK3VdfHxpWyJjU2NhbGVJbnYiK3VdLF9DKGlbImxpbmVDb2xvciIrdV0pP2lbImxpbmVDb2xvciIrdV09R3MoaVsibGluZUNvbG9yIit1XSwyMCk6aVsibGluZUNvbG9yIit1XT1mYShpWyJsaW5lQ29sb3IiK3VdLDIwKTtmb3IobGV0IHU9MDt1PGkuVEhFTUVfQ09MT1JfTElNSVQ7dSsrKXtjb25zdCBkPSIiKygxNy0zKnUpO3MrPWAKICAgIC5zZWN0aW9uLSR7dS0xfSByZWN0LCAuc2VjdGlvbi0ke3UtMX0gcGF0aCwgLnNlY3Rpb24tJHt1LTF9IGNpcmNsZSwgLnNlY3Rpb24tJHt1LTF9IHBvbHlnb24sIC5zZWN0aW9uLSR7dS0xfSBwYXRoICB7CiAgICAgIGZpbGw6ICR7aVsiY1NjYWxlIit1XX07CiAgICB9CiAgICAuc2VjdGlvbi0ke3UtMX0gdGV4dCB7CiAgICAgZmlsbDogJHtpWyJjU2NhbGVMYWJlbCIrdV19OwogICAgfQogICAgLm5vZGUtaWNvbi0ke3UtMX0gewogICAgICBmb250LXNpemU6IDQwcHg7CiAgICAgIGNvbG9yOiAke2lbImNTY2FsZUxhYmVsIit1XX07CiAgICB9CiAgICAuc2VjdGlvbi1lZGdlLSR7dS0xfXsKICAgICAgc3Ryb2tlOiAke2lbImNTY2FsZSIrdV19OwogICAgfQogICAgLmVkZ2UtZGVwdGgtJHt1LTF9ewogICAgICBzdHJva2Utd2lkdGg6ICR7ZH07CiAgICB9CiAgICAuc2VjdGlvbi0ke3UtMX0gbGluZSB7CiAgICAgIHN0cm9rZTogJHtpWyJjU2NhbGVJbnYiK3VdfSA7CiAgICAgIHN0cm9rZS13aWR0aDogMzsKICAgIH0KCiAgICAuZGlzYWJsZWQsIC5kaXNhYmxlZCBjaXJjbGUsIC5kaXNhYmxlZCB0ZXh0IHsKICAgICAgZmlsbDogbGlnaHRncmF5OwogICAgfQogICAgLmRpc2FibGVkIHRleHQgewogICAgICBmaWxsOiAjZWZlZmVmOwogICAgfQogICAgYH1yZXR1cm4gc30sSW9uPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntkYjpsb24scmVuZGVyZXI6TW9uLHBhcnNlcjpzb24sc3R5bGVzOmk9PmAKICAuZWRnZSB7CiAgICBzdHJva2Utd2lkdGg6IDM7CiAgfQogICR7RG9uKGkpfQogIC5zZWN0aW9uLXJvb3QgcmVjdCwgLnNlY3Rpb24tcm9vdCBwYXRoLCAuc2VjdGlvbi1yb290IGNpcmNsZSwgLnNlY3Rpb24tcm9vdCBwb2x5Z29uICB7CiAgICBmaWxsOiAke2kuZ2l0MH07CiAgfQogIC5zZWN0aW9uLXJvb3QgdGV4dCB7CiAgICBmaWxsOiAke2kuZ2l0QnJhbmNoTGFiZWwwfTsKICB9CiAgLmljb24tY29udGFpbmVyIHsKICAgIGhlaWdodDoxMDAlOwogICAgZGlzcGxheTogZmxleDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICB9CiAgLmVkZ2UgewogICAgZmlsbDogbm9uZTsKICB9CiAgLm1pbmRtYXAtbm9kZS1sYWJlbCB7CiAgICBkeTogMWVtOwogICAgYWxpZ25tZW50LWJhc2VsaW5lOiBtaWRkbGU7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZG9taW5hbnQtYmFzZWxpbmU6IG1pZGRsZTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICB9CmB9fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBpd2U9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbih5LFQsXyxBKXtmb3IoXz1ffHx7fSxBPXkubGVuZ3RoO0EtLTtfW3lbQV1dPVQpO3JldHVybiBffSxzPVsxLDldLHU9WzEsMTBdLGQ9WzEsNSwxMCwxMl0scD17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsU0FOS0VZOjQsTkVXTElORTo1LGNzdjo2LG9wdF9lb2Y6NyxyZWNvcmQ6OCxjc3ZfdGFpbDo5LEVPRjoxMCwiZmllbGRbc291cmNlXSI6MTEsQ09NTUE6MTIsImZpZWxkW3RhcmdldF0iOjEzLCJmaWVsZFt2YWx1ZV0iOjE0LGZpZWxkOjE1LGVzY2FwZWQ6MTYsbm9uX2VzY2FwZWQ6MTcsRFFVT1RFOjE4LEVTQ0FQRURfVEVYVDoxOSxOT05fRVNDQVBFRF9URVhUOjIwLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJTQU5LRVkiLDU6Ik5FV0xJTkUiLDEwOiJFT0YiLDExOiJmaWVsZFtzb3VyY2VdIiwxMjoiQ09NTUEiLDEzOiJmaWVsZFt0YXJnZXRdIiwxNDoiZmllbGRbdmFsdWVdIiwxODoiRFFVT1RFIiwxOToiRVNDQVBFRF9URVhUIiwyMDoiTk9OX0VTQ0FQRURfVEVYVCJ9LHByb2R1Y3Rpb25zXzpbMCxbMyw0XSxbNiwyXSxbOSwyXSxbOSwwXSxbNywxXSxbNywwXSxbOCw1XSxbMTUsMV0sWzE1LDFdLFsxNiwzXSxbMTcsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oVCxfLEEsUCxSLEYsail7dmFyIEs9Ri5sZW5ndGgtMTtzd2l0Y2goUil7Y2FzZSA3OmNvbnN0IGVlPVAuZmluZE9yQ3JlYXRlTm9kZShGW0stNF0udHJpbSgpLnJlcGxhY2VBbGwoJyIiJywnIicpKSxpZT1QLmZpbmRPckNyZWF0ZU5vZGUoRltLLTJdLnRyaW0oKS5yZXBsYWNlQWxsKCciIicsJyInKSksb2U9cGFyc2VGbG9hdChGW0tdLnRyaW0oKSk7UC5hZGRMaW5rKGVlLGllLG9lKTticmVhaztjYXNlIDg6Y2FzZSA5OmNhc2UgMTE6dGhpcy4kPUZbS107YnJlYWs7Y2FzZSAxMDp0aGlzLiQ9RltLLTFdO2JyZWFrfX0sdGFibGU6W3szOjEsNDpbMSwyXX0sezE6WzNdfSx7NTpbMSwzXX0sezY6NCw4OjUsMTU6NiwxNjo3LDE3OjgsMTg6cywyMDp1fSx7MTpbMiw2XSw3OjExLDEwOlsxLDEyXX0saSh1LFsyLDRdLHs5OjEzLDU6WzEsMTRdfSksezEyOlsxLDE1XX0saShkLFsyLDhdKSxpKGQsWzIsOV0pLHsxOTpbMSwxNl19LGkoZCxbMiwxMV0pLHsxOlsyLDFdfSx7MTpbMiw1XX0saSh1LFsyLDJdKSx7NjoxNyw4OjUsMTU6NiwxNjo3LDE3OjgsMTg6cywyMDp1fSx7MTU6MTgsMTY6NywxNzo4LDE4OnMsMjA6dX0sezE4OlsxLDE5XX0saSh1LFsyLDNdKSx7MTI6WzEsMjBdfSxpKGQsWzIsMTBdKSx7MTU6MjEsMTY6NywxNzo4LDE4OnMsMjA6dX0saShbMSw1LDEwXSxbMiw3XSldLGRlZmF1bHRBY3Rpb25zOnsxMTpbMiwxXSwxMjpbMiw1XX0scGFyc2VFcnJvcjpmdW5jdGlvbihULF8pe2lmKF8ucmVjb3ZlcmFibGUpdGhpcy50cmFjZShUKTtlbHNle3ZhciBBPW5ldyBFcnJvcihUKTt0aHJvdyBBLmhhc2g9XyxBfX0scGFyc2U6ZnVuY3Rpb24oVCl7dmFyIF89dGhpcyxBPVswXSxQPVtdLFI9W251bGxdLEY9W10saj10aGlzLnRhYmxlLEs9IiIsZWU9MCxpZT0wLG9lPTIscGU9MSxiZT1GLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLGFlPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksbmU9e3l5Ont9fTtmb3IodmFyIHNlIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksc2UpJiYobmUueXlbc2VdPXRoaXMueXlbc2VdKTthZS5zZXRJbnB1dChULG5lLnl5KSxuZS55eS5sZXhlcj1hZSxuZS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgYWUueXlsbG9jPiJ1IiYmKGFlLnl5bGxvYz17fSk7dmFyIGRlPWFlLnl5bGxvYztGLnB1c2goZGUpO3ZhciBYPWFlLm9wdGlvbnMmJmFlLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBuZS55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1uZS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBnZSgpe3ZhciBLZTtyZXR1cm4gS2U9UC5wb3AoKXx8YWUubGV4KCl8fHBlLHR5cGVvZiBLZSE9Im51bWJlciImJihLZSBpbnN0YW5jZW9mIEFycmF5JiYoUD1LZSxLZT1QLnBvcCgpKSxLZT1fLnN5bWJvbHNfW0tlXXx8S2UpLEtlfWZvcih2YXIgVyx4ZSxVLEZlLFBlPXt9LGplLEllLFNlLENlOzspe2lmKHhlPUFbQS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t4ZV0/VT10aGlzLmRlZmF1bHRBY3Rpb25zW3hlXTooKFc9PT1udWxsfHx0eXBlb2YgVz4idSIpJiYoVz1nZSgpKSxVPWpbeGVdJiZqW3hlXVtXXSksdHlwZW9mIFU+InUifHwhVS5sZW5ndGh8fCFVWzBdKXt2YXIga2U9IiI7Q2U9W107Zm9yKGplIGluIGpbeGVdKXRoaXMudGVybWluYWxzX1tqZV0mJmplPm9lJiZDZS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bamVdKyInIik7YWUuc2hvd1Bvc2l0aW9uP2tlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGVlKzEpK2A6CmArYWUuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtDZS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW1ddfHxXKSsiJyI6a2U9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoZWUrMSkrIjogVW5leHBlY3RlZCAiKyhXPT1wZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tXXXx8VykrIiciKSx0aGlzLnBhcnNlRXJyb3Ioa2Use3RleHQ6YWUubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW1ddfHxXLGxpbmU6YWUueXlsaW5lbm8sbG9jOmRlLGV4cGVjdGVkOkNlfSl9aWYoVVswXWluc3RhbmNlb2YgQXJyYXkmJlUubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit4ZSsiLCB0b2tlbjogIitXKTtzd2l0Y2goVVswXSl7Y2FzZSAxOkEucHVzaChXKSxSLnB1c2goYWUueXl0ZXh0KSxGLnB1c2goYWUueXlsbG9jKSxBLnB1c2goVVsxXSksVz1udWxsLGllPWFlLnl5bGVuZyxLPWFlLnl5dGV4dCxlZT1hZS55eWxpbmVubyxkZT1hZS55eWxsb2M7YnJlYWs7Y2FzZSAyOmlmKEllPXRoaXMucHJvZHVjdGlvbnNfW1VbMV1dWzFdLFBlLiQ9UltSLmxlbmd0aC1JZV0sUGUuXyQ9e2ZpcnN0X2xpbmU6RltGLmxlbmd0aC0oSWV8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpGW0YubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46RltGLmxlbmd0aC0oSWV8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46RltGLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sWCYmKFBlLl8kLnJhbmdlPVtGW0YubGVuZ3RoLShJZXx8MSldLnJhbmdlWzBdLEZbRi5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxGZT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoUGUsW0ssaWUsZWUsbmUueXksVVsxXSxSLEZdLmNvbmNhdChiZSkpLHR5cGVvZiBGZTwidSIpcmV0dXJuIEZlO0llJiYoQT1BLnNsaWNlKDAsLTEqSWUqMiksUj1SLnNsaWNlKDAsLTEqSWUpLEY9Ri5zbGljZSgwLC0xKkllKSksQS5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW1VbMV1dWzBdKSxSLnB1c2goUGUuJCksRi5wdXNoKFBlLl8kKSxTZT1qW0FbQS5sZW5ndGgtMl1dW0FbQS5sZW5ndGgtMV1dLEEucHVzaChTZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LHY9ZnVuY3Rpb24oKXt2YXIgeT17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihfLEEpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoXyxBKTtlbHNlIHRocm93IG5ldyBFcnJvcihfKX0sc2V0SW5wdXQ6ZnVuY3Rpb24oVCxfKXtyZXR1cm4gdGhpcy55eT1ffHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1ULHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBUPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1ULHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1ULHRoaXMubWF0Y2hlZCs9VDt2YXIgXz1ULm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gXz8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksVH0sdW5wdXQ6ZnVuY3Rpb24oVCl7dmFyIF89VC5sZW5ndGgsQT1ULnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9VCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtXyksdGhpcy5vZmZzZXQtPV87dmFyIFA9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksQS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPUEubGVuZ3RoLTEpO3ZhciBSPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpBPyhBLmxlbmd0aD09PVAubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStQW1AubGVuZ3RoLUEubGVuZ3RoXS5sZW5ndGgtQVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLV99LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bUlswXSxSWzBdK3RoaXMueXlsZW5nLV9dKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sbGVzczpmdW5jdGlvbihUKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoVCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgVD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKFQubGVuZ3RoPjIwPyIuLi4iOiIiKStULnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIFQ9dGhpcy5tYXRjaDtyZXR1cm4gVC5sZW5ndGg8MjAmJihUKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1ULmxlbmd0aCkpLChULnN1YnN0cigwLDIwKSsoVC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIFQ9dGhpcy5wYXN0SW5wdXQoKSxfPW5ldyBBcnJheShULmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIFQrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK18rIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKFQsXyl7dmFyIEEsUCxSO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihSPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKFIueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksUD1UWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxQJiYodGhpcy55eWxpbmVubys9UC5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpQP1BbUC5sZW5ndGgtMV0ubGVuZ3RoLVBbUC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitUWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPVRbMF0sdGhpcy5tYXRjaCs9VFswXSx0aGlzLm1hdGNoZXM9VCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShUWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1UWzBdLEE9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsXyx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxBKXJldHVybiBBO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBGIGluIFIpdGhpc1tGXT1SW0ZdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIFQsXyxBLFA7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgUj10aGlzLl9jdXJyZW50UnVsZXMoKSxGPTA7RjxSLmxlbmd0aDtGKyspaWYoQT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW1JbRl1dKSxBJiYoIV98fEFbMF0ubGVuZ3RoPl9bMF0ubGVuZ3RoKSl7aWYoXz1BLFA9Rix0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihUPXRoaXMudGVzdF9tYXRjaChBLFJbRl0pLFQhPT0hMSlyZXR1cm4gVDtpZih0aGlzLl9iYWNrdHJhY2spe189ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gXz8oVD10aGlzLnRlc3RfbWF0Y2goXyxSW1BdKSxUIT09ITE/VDohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIF89dGhpcy5uZXh0KCk7cmV0dXJuIF98fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKF8pe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChfKX0scG9wU3RhdGU6ZnVuY3Rpb24oKXt2YXIgXz10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBfPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24oXyl7cmV0dXJuIF89dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhffHwwKSxfPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbX106IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oXyl7dGhpcy5iZWdpbihfKX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbihfLEEsUCxSKXtzd2l0Y2goUCl7Y2FzZSAwOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiY3N2IiksNDtjYXNlIDE6cmV0dXJuIDEwO2Nhc2UgMjpyZXR1cm4gNTtjYXNlIDM6cmV0dXJuIDEyO2Nhc2UgNDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImVzY2FwZWRfdGV4dCIpLDE4O2Nhc2UgNTpyZXR1cm4gMjA7Y2FzZSA2OnJldHVybiB0aGlzLnBvcFN0YXRlKCJlc2NhcGVkX3RleHQiKSwxODtjYXNlIDc6cmV0dXJuIDE5fX0scnVsZXM6Wy9eKD86c2Fua2V5LWJldGFcYikvaSwvXig/OiQpL2ksL14oPzooKFx1MDAwRFx1MDAwQSl8KFx1MDAwQSkpKS9pLC9eKD86KFx1MDAyQykpL2ksL14oPzooXHUwMDIyKSkvaSwvXig/OihbXHUwMDIwLVx1MDAyMVx1MDAyMy1cdTAwMkJcdTAwMkQtXHUwMDdFXSkqKS9pLC9eKD86KFx1MDAyMikoPyEoXHUwMDIyKSkpL2ksL14oPzooKFtcdTAwMjAtXHUwMDIxXHUwMDIzLVx1MDAyQlx1MDAyRC1cdTAwN0VdKXwoXHUwMDJDKXwoXHUwMDBEKXwoXHUwMDBBKXwoXHUwMDIyKShcdTAwMjIpKSopL2ldLGNvbmRpdGlvbnM6e2Nzdjp7cnVsZXM6WzEsMiwzLDQsNSw2LDddLGluY2x1c2l2ZTohMX0sZXNjYXBlZF90ZXh0OntydWxlczpbNiw3XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNSw2LDddLGluY2x1c2l2ZTohMH19fTtyZXR1cm4geX0oKTtwLmxleGVyPXY7ZnVuY3Rpb24gYigpe3RoaXMueXk9e319cmV0dXJuIGIucHJvdG90eXBlPXAscC5QYXJzZXI9YixuZXcgYn0oKTtpd2UucGFyc2VyPWl3ZTtjb25zdCBOSj1pd2U7bGV0IFBKPVtdLEJKPVtdLHRJPXt9O2NvbnN0IE9vbj0oKT0+e1BKPVtdLEJKPVtdLHRJPXt9LFBnKCl9O2NsYXNzIE5vbntjb25zdHJ1Y3RvcihzLHUsZD0wKXt0aGlzLnNvdXJjZT1zLHRoaXMudGFyZ2V0PXUsdGhpcy52YWx1ZT1kfX1jb25zdCBQb249KGkscyx1KT0+e1BKLnB1c2gobmV3IE5vbihpLHMsdSkpfTtjbGFzcyBCb257Y29uc3RydWN0b3Iocyl7dGhpcy5JRD1zfX1jb25zdCBGb249e25vZGVzTWFwOnRJLGdldENvbmZpZzooKT0+cXQoKS5zYW5rZXksZ2V0Tm9kZXM6KCk9PkJKLGdldExpbmtzOigpPT5QSixnZXRHcmFwaDooKT0+KHtub2RlczpCSi5tYXAoaT0+KHtpZDppLklEfSkpLGxpbmtzOlBKLm1hcChpPT4oe3NvdXJjZTppLnNvdXJjZS5JRCx0YXJnZXQ6aS50YXJnZXQuSUQsdmFsdWU6aS52YWx1ZX0pKX0pLGFkZExpbms6UG9uLGZpbmRPckNyZWF0ZU5vZGU6aT0+KGk9Y2kuc2FuaXRpemVUZXh0KGkscXQoKSksdElbaV18fCh0SVtpXT1uZXcgQm9uKGkpLEJKLnB1c2godElbaV0pKSx0SVtpXSksZ2V0QWNjVGl0bGU6Q3Asc2V0QWNjVGl0bGU6QmcsZ2V0QWNjRGVzY3JpcHRpb246X3Asc2V0QWNjRGVzY3JpcHRpb246U3AsZ2V0RGlhZ3JhbVRpdGxlOkFwLHNldERpYWdyYW1UaXRsZTpjbSxjbGVhcjpPb259O2Z1bmN0aW9uIHZXZShpLHMpe2xldCB1O2lmKHM9PT12b2lkIDApZm9yKGNvbnN0IGQgb2YgaSlkIT1udWxsJiYodTxkfHx1PT09dm9pZCAwJiZkPj1kKSYmKHU9ZCk7ZWxzZXtsZXQgZD0tMTtmb3IobGV0IHAgb2YgaSkocD1zKHAsKytkLGkpKSE9bnVsbCYmKHU8cHx8dT09PXZvaWQgMCYmcD49cCkmJih1PXApfXJldHVybiB1fWZ1bmN0aW9uIHdXZShpLHMpe2xldCB1O2lmKHM9PT12b2lkIDApZm9yKGNvbnN0IGQgb2YgaSlkIT1udWxsJiYodT5kfHx1PT09dm9pZCAwJiZkPj1kKSYmKHU9ZCk7ZWxzZXtsZXQgZD0tMTtmb3IobGV0IHAgb2YgaSkocD1zKHAsKytkLGkpKSE9bnVsbCYmKHU+cHx8dT09PXZvaWQgMCYmcD49cCkmJih1PXApfXJldHVybiB1fWZ1bmN0aW9uIHN3ZShpLHMpe2xldCB1PTA7aWYocz09PXZvaWQgMClmb3IobGV0IGQgb2YgaSkoZD0rZCkmJih1Kz1kKTtlbHNle2xldCBkPS0xO2ZvcihsZXQgcCBvZiBpKShwPStzKHAsKytkLGkpKSYmKHUrPXApfXJldHVybiB1fWZ1bmN0aW9uIFJvbihpKXtyZXR1cm4gaS50YXJnZXQuZGVwdGh9ZnVuY3Rpb24gam9uKGkpe3JldHVybiBpLmRlcHRofWZ1bmN0aW9uICRvbihpLHMpe3JldHVybiBzLTEtaS5oZWlnaHR9ZnVuY3Rpb24geVdlKGkscyl7cmV0dXJuIGkuc291cmNlTGlua3MubGVuZ3RoP2kuZGVwdGg6cy0xfWZ1bmN0aW9uIHpvbihpKXtyZXR1cm4gaS50YXJnZXRMaW5rcy5sZW5ndGg/aS5kZXB0aDppLnNvdXJjZUxpbmtzLmxlbmd0aD93V2UoaS5zb3VyY2VMaW5rcyxSb24pLTE6MH1mdW5jdGlvbiBGSihpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaX19ZnVuY3Rpb24geFdlKGkscyl7cmV0dXJuIFJKKGkuc291cmNlLHMuc291cmNlKXx8aS5pbmRleC1zLmluZGV4fWZ1bmN0aW9uIGtXZShpLHMpe3JldHVybiBSSihpLnRhcmdldCxzLnRhcmdldCl8fGkuaW5kZXgtcy5pbmRleH1mdW5jdGlvbiBSSihpLHMpe3JldHVybiBpLnkwLXMueTB9ZnVuY3Rpb24gYXdlKGkpe3JldHVybiBpLnZhbHVlfWZ1bmN0aW9uIHFvbihpKXtyZXR1cm4gaS5pbmRleH1mdW5jdGlvbiBIb24oaSl7cmV0dXJuIGkubm9kZXN9ZnVuY3Rpb24gVm9uKGkpe3JldHVybiBpLmxpbmtzfWZ1bmN0aW9uIEVXZShpLHMpe2NvbnN0IHU9aS5nZXQocyk7aWYoIXUpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK3MpO3JldHVybiB1fWZ1bmN0aW9uIFRXZSh7bm9kZXM6aX0pe2Zvcihjb25zdCBzIG9mIGkpe2xldCB1PXMueTAsZD11O2Zvcihjb25zdCBwIG9mIHMuc291cmNlTGlua3MpcC55MD11K3Aud2lkdGgvMix1Kz1wLndpZHRoO2Zvcihjb25zdCBwIG9mIHMudGFyZ2V0TGlua3MpcC55MT1kK3Aud2lkdGgvMixkKz1wLndpZHRofX1mdW5jdGlvbiBVb24oKXtsZXQgaT0wLHM9MCx1PTEsZD0xLHA9MjQsdj04LGIseT1xb24sVD15V2UsXyxBLFA9SG9uLFI9Vm9uLEY9NjtmdW5jdGlvbiBqKCl7Y29uc3QgUGU9e25vZGVzOlAuYXBwbHkobnVsbCxhcmd1bWVudHMpLGxpbmtzOlIuYXBwbHkobnVsbCxhcmd1bWVudHMpfTtyZXR1cm4gSyhQZSksZWUoUGUpLGllKFBlKSxvZShQZSksYWUoUGUpLFRXZShQZSksUGV9ai51cGRhdGU9ZnVuY3Rpb24oUGUpe3JldHVybiBUV2UoUGUpLFBlfSxqLm5vZGVJZD1mdW5jdGlvbihQZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9dHlwZW9mIFBlPT0iZnVuY3Rpb24iP1BlOkZKKFBlKSxqKTp5fSxqLm5vZGVBbGlnbj1mdW5jdGlvbihQZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFQ9dHlwZW9mIFBlPT0iZnVuY3Rpb24iP1BlOkZKKFBlKSxqKTpUfSxqLm5vZGVTb3J0PWZ1bmN0aW9uKFBlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz1QZSxqKTpffSxqLm5vZGVXaWR0aD1mdW5jdGlvbihQZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9K1BlLGopOnB9LGoubm9kZVBhZGRpbmc9ZnVuY3Rpb24oUGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PWI9K1BlLGopOnZ9LGoubm9kZXM9ZnVuY3Rpb24oUGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhQPXR5cGVvZiBQZT09ImZ1bmN0aW9uIj9QZTpGSihQZSksaik6UH0sai5saW5rcz1mdW5jdGlvbihQZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFI9dHlwZW9mIFBlPT0iZnVuY3Rpb24iP1BlOkZKKFBlKSxqKTpSfSxqLmxpbmtTb3J0PWZ1bmN0aW9uKFBlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQT1QZSxqKTpBfSxqLnNpemU9ZnVuY3Rpb24oUGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXM9MCx1PStQZVswXSxkPStQZVsxXSxqKTpbdS1pLGQtc119LGouZXh0ZW50PWZ1bmN0aW9uKFBlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rUGVbMF1bMF0sdT0rUGVbMV1bMF0scz0rUGVbMF1bMV0sZD0rUGVbMV1bMV0saik6W1tpLHNdLFt1LGRdXX0sai5pdGVyYXRpb25zPWZ1bmN0aW9uKFBlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRj0rUGUsaik6Rn07ZnVuY3Rpb24gSyh7bm9kZXM6UGUsbGlua3M6amV9KXtmb3IoY29uc3RbU2UsQ2Vdb2YgUGUuZW50cmllcygpKUNlLmluZGV4PVNlLENlLnNvdXJjZUxpbmtzPVtdLENlLnRhcmdldExpbmtzPVtdO2NvbnN0IEllPW5ldyBNYXAoUGUubWFwKChTZSxDZSk9Plt5KFNlLENlLFBlKSxTZV0pKTtmb3IoY29uc3RbU2UsQ2Vdb2YgamUuZW50cmllcygpKXtDZS5pbmRleD1TZTtsZXR7c291cmNlOmtlLHRhcmdldDpLZX09Q2U7dHlwZW9mIGtlIT0ib2JqZWN0IiYmKGtlPUNlLnNvdXJjZT1FV2UoSWUsa2UpKSx0eXBlb2YgS2UhPSJvYmplY3QiJiYoS2U9Q2UudGFyZ2V0PUVXZShJZSxLZSkpLGtlLnNvdXJjZUxpbmtzLnB1c2goQ2UpLEtlLnRhcmdldExpbmtzLnB1c2goQ2UpfWlmKEEhPW51bGwpZm9yKGNvbnN0e3NvdXJjZUxpbmtzOlNlLHRhcmdldExpbmtzOkNlfW9mIFBlKVNlLnNvcnQoQSksQ2Uuc29ydChBKX1mdW5jdGlvbiBlZSh7bm9kZXM6UGV9KXtmb3IoY29uc3QgamUgb2YgUGUpamUudmFsdWU9amUuZml4ZWRWYWx1ZT09PXZvaWQgMD9NYXRoLm1heChzd2UoamUuc291cmNlTGlua3MsYXdlKSxzd2UoamUudGFyZ2V0TGlua3MsYXdlKSk6amUuZml4ZWRWYWx1ZX1mdW5jdGlvbiBpZSh7bm9kZXM6UGV9KXtjb25zdCBqZT1QZS5sZW5ndGg7bGV0IEllPW5ldyBTZXQoUGUpLFNlPW5ldyBTZXQsQ2U9MDtmb3IoO0llLnNpemU7KXtmb3IoY29uc3Qga2Ugb2YgSWUpe2tlLmRlcHRoPUNlO2Zvcihjb25zdHt0YXJnZXQ6S2V9b2Yga2Uuc291cmNlTGlua3MpU2UuYWRkKEtlKX1pZigrK0NlPmplKXRocm93IG5ldyBFcnJvcigiY2lyY3VsYXIgbGluayIpO0llPVNlLFNlPW5ldyBTZXR9fWZ1bmN0aW9uIG9lKHtub2RlczpQZX0pe2NvbnN0IGplPVBlLmxlbmd0aDtsZXQgSWU9bmV3IFNldChQZSksU2U9bmV3IFNldCxDZT0wO2Zvcig7SWUuc2l6ZTspe2Zvcihjb25zdCBrZSBvZiBJZSl7a2UuaGVpZ2h0PUNlO2Zvcihjb25zdHtzb3VyY2U6S2V9b2Yga2UudGFyZ2V0TGlua3MpU2UuYWRkKEtlKX1pZigrK0NlPmplKXRocm93IG5ldyBFcnJvcigiY2lyY3VsYXIgbGluayIpO0llPVNlLFNlPW5ldyBTZXR9fWZ1bmN0aW9uIHBlKHtub2RlczpQZX0pe2NvbnN0IGplPXZXZShQZSxDZT0+Q2UuZGVwdGgpKzEsSWU9KHUtaS1wKS8oamUtMSksU2U9bmV3IEFycmF5KGplKTtmb3IoY29uc3QgQ2Ugb2YgUGUpe2NvbnN0IGtlPU1hdGgubWF4KDAsTWF0aC5taW4oamUtMSxNYXRoLmZsb29yKFQuY2FsbChudWxsLENlLGplKSkpKTtDZS5sYXllcj1rZSxDZS54MD1pK2tlKkllLENlLngxPUNlLngwK3AsU2Vba2VdP1NlW2tlXS5wdXNoKENlKTpTZVtrZV09W0NlXX1pZihfKWZvcihjb25zdCBDZSBvZiBTZSlDZS5zb3J0KF8pO3JldHVybiBTZX1mdW5jdGlvbiBiZShQZSl7Y29uc3QgamU9d1dlKFBlLEllPT4oZC1zLShJZS5sZW5ndGgtMSkqYikvc3dlKEllLGF3ZSkpO2Zvcihjb25zdCBJZSBvZiBQZSl7bGV0IFNlPXM7Zm9yKGNvbnN0IENlIG9mIEllKXtDZS55MD1TZSxDZS55MT1TZStDZS52YWx1ZSpqZSxTZT1DZS55MStiO2Zvcihjb25zdCBrZSBvZiBDZS5zb3VyY2VMaW5rcylrZS53aWR0aD1rZS52YWx1ZSpqZX1TZT0oZC1TZStiKS8oSWUubGVuZ3RoKzEpO2ZvcihsZXQgQ2U9MDtDZTxJZS5sZW5ndGg7KytDZSl7Y29uc3Qga2U9SWVbQ2VdO2tlLnkwKz1TZSooQ2UrMSksa2UueTErPVNlKihDZSsxKX14ZShJZSl9fWZ1bmN0aW9uIGFlKFBlKXtjb25zdCBqZT1wZShQZSk7Yj1NYXRoLm1pbih2LChkLXMpLyh2V2UoamUsSWU9PkllLmxlbmd0aCktMSkpLGJlKGplKTtmb3IobGV0IEllPTA7SWU8RjsrK0llKXtjb25zdCBTZT1NYXRoLnBvdyguOTksSWUpLENlPU1hdGgubWF4KDEtU2UsKEllKzEpL0YpO3NlKGplLFNlLENlKSxuZShqZSxTZSxDZSl9fWZ1bmN0aW9uIG5lKFBlLGplLEllKXtmb3IobGV0IFNlPTEsQ2U9UGUubGVuZ3RoO1NlPENlOysrU2Upe2NvbnN0IGtlPVBlW1NlXTtmb3IoY29uc3QgS2Ugb2Yga2Upe2xldCBGdD0wLE5lPTA7Zm9yKGNvbnN0e3NvdXJjZTpfdCx2YWx1ZTpFdH1vZiBLZS50YXJnZXRMaW5rcyl7bGV0IEd0PUV0KihLZS5sYXllci1fdC5sYXllcik7RnQrPVUoX3QsS2UpKkd0LE5lKz1HdH1pZighKE5lPjApKWNvbnRpbnVlO2xldCBnbj0oRnQvTmUtS2UueTApKmplO0tlLnkwKz1nbixLZS55MSs9Z24sVyhLZSl9Xz09PXZvaWQgMCYma2Uuc29ydChSSiksZGUoa2UsSWUpfX1mdW5jdGlvbiBzZShQZSxqZSxJZSl7Zm9yKGxldCBTZT1QZS5sZW5ndGgsQ2U9U2UtMjtDZT49MDstLUNlKXtjb25zdCBrZT1QZVtDZV07Zm9yKGNvbnN0IEtlIG9mIGtlKXtsZXQgRnQ9MCxOZT0wO2Zvcihjb25zdHt0YXJnZXQ6X3QsdmFsdWU6RXR9b2YgS2Uuc291cmNlTGlua3Mpe2xldCBHdD1FdCooX3QubGF5ZXItS2UubGF5ZXIpO0Z0Kz1GZShLZSxfdCkqR3QsTmUrPUd0fWlmKCEoTmU+MCkpY29udGludWU7bGV0IGduPShGdC9OZS1LZS55MCkqamU7S2UueTArPWduLEtlLnkxKz1nbixXKEtlKX1fPT09dm9pZCAwJiZrZS5zb3J0KFJKKSxkZShrZSxJZSl9fWZ1bmN0aW9uIGRlKFBlLGplKXtjb25zdCBJZT1QZS5sZW5ndGg+PjEsU2U9UGVbSWVdO2dlKFBlLFNlLnkwLWIsSWUtMSxqZSksWChQZSxTZS55MStiLEllKzEsamUpLGdlKFBlLGQsUGUubGVuZ3RoLTEsamUpLFgoUGUscywwLGplKX1mdW5jdGlvbiBYKFBlLGplLEllLFNlKXtmb3IoO0llPFBlLmxlbmd0aDsrK0llKXtjb25zdCBDZT1QZVtJZV0sa2U9KGplLUNlLnkwKSpTZTtrZT4xZS02JiYoQ2UueTArPWtlLENlLnkxKz1rZSksamU9Q2UueTErYn19ZnVuY3Rpb24gZ2UoUGUsamUsSWUsU2Upe2Zvcig7SWU+PTA7LS1JZSl7Y29uc3QgQ2U9UGVbSWVdLGtlPShDZS55MS1qZSkqU2U7a2U+MWUtNiYmKENlLnkwLT1rZSxDZS55MS09a2UpLGplPUNlLnkwLWJ9fWZ1bmN0aW9uIFcoe3NvdXJjZUxpbmtzOlBlLHRhcmdldExpbmtzOmplfSl7aWYoQT09PXZvaWQgMCl7Zm9yKGNvbnN0e3NvdXJjZTp7c291cmNlTGlua3M6SWV9fW9mIGplKUllLnNvcnQoa1dlKTtmb3IoY29uc3R7dGFyZ2V0Ont0YXJnZXRMaW5rczpJZX19b2YgUGUpSWUuc29ydCh4V2UpfX1mdW5jdGlvbiB4ZShQZSl7aWYoQT09PXZvaWQgMClmb3IoY29uc3R7c291cmNlTGlua3M6amUsdGFyZ2V0TGlua3M6SWV9b2YgUGUpamUuc29ydChrV2UpLEllLnNvcnQoeFdlKX1mdW5jdGlvbiBVKFBlLGplKXtsZXQgSWU9UGUueTAtKFBlLnNvdXJjZUxpbmtzLmxlbmd0aC0xKSpiLzI7Zm9yKGNvbnN0e3RhcmdldDpTZSx3aWR0aDpDZX1vZiBQZS5zb3VyY2VMaW5rcyl7aWYoU2U9PT1qZSlicmVhaztJZSs9Q2UrYn1mb3IoY29uc3R7c291cmNlOlNlLHdpZHRoOkNlfW9mIGplLnRhcmdldExpbmtzKXtpZihTZT09PVBlKWJyZWFrO0llLT1DZX1yZXR1cm4gSWV9ZnVuY3Rpb24gRmUoUGUsamUpe2xldCBJZT1qZS55MC0oamUudGFyZ2V0TGlua3MubGVuZ3RoLTEpKmIvMjtmb3IoY29uc3R7c291cmNlOlNlLHdpZHRoOkNlfW9mIGplLnRhcmdldExpbmtzKXtpZihTZT09PVBlKWJyZWFrO0llKz1DZStifWZvcihjb25zdHt0YXJnZXQ6U2Usd2lkdGg6Q2V9b2YgUGUuc291cmNlTGlua3Mpe2lmKFNlPT09amUpYnJlYWs7SWUtPUNlfXJldHVybiBJZX1yZXR1cm4gan12YXIgb3dlPU1hdGguUEksY3dlPTIqb3dlLGFTPTFlLTYsR29uPWN3ZS1hUztmdW5jdGlvbiB1d2UoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBDV2UoKXtyZXR1cm4gbmV3IHV3ZX11d2UucHJvdG90eXBlPUNXZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnV3ZSxtb3ZlVG86ZnVuY3Rpb24oaSxzKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2kpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3MpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl94MSE9PW51bGwmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbihpLHMpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rcyl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24oaSxzLHUsZCl7dGhpcy5fKz0iUSIrICtpKyIsIisgK3MrIiwiKyh0aGlzLl94MT0rdSkrIiwiKyh0aGlzLl95MT0rZCl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oaSxzLHUsZCxwLHYpe3RoaXMuXys9IkMiKyAraSsiLCIrICtzKyIsIisgK3UrIiwiKyArZCsiLCIrKHRoaXMuX3gxPStwKSsiLCIrKHRoaXMuX3kxPSt2KX0sYXJjVG86ZnVuY3Rpb24oaSxzLHUsZCxwKXtpPStpLHM9K3MsdT0rdSxkPStkLHA9K3A7dmFyIHY9dGhpcy5feDEsYj10aGlzLl95MSx5PXUtaSxUPWQtcyxfPXYtaSxBPWItcyxQPV8qXytBKkE7aWYocDwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK3ApO2lmKHRoaXMuX3gxPT09bnVsbCl0aGlzLl8rPSJNIisodGhpcy5feDE9aSkrIiwiKyh0aGlzLl95MT1zKTtlbHNlIGlmKFA+YVMpaWYoIShNYXRoLmFicyhBKnktVCpfKT5hUyl8fCFwKXRoaXMuXys9IkwiKyh0aGlzLl94MT1pKSsiLCIrKHRoaXMuX3kxPXMpO2Vsc2V7dmFyIFI9dS12LEY9ZC1iLGo9eSp5K1QqVCxLPVIqUitGKkYsZWU9TWF0aC5zcXJ0KGopLGllPU1hdGguc3FydChQKSxvZT1wKk1hdGgudGFuKChvd2UtTWF0aC5hY29zKChqK1AtSykvKDIqZWUqaWUpKSkvMikscGU9b2UvaWUsYmU9b2UvZWU7TWF0aC5hYnMocGUtMSk+YVMmJih0aGlzLl8rPSJMIisoaStwZSpfKSsiLCIrKHMrcGUqQSkpLHRoaXMuXys9IkEiK3ArIiwiK3ArIiwwLDAsIisgKyhBKlI+XypGKSsiLCIrKHRoaXMuX3gxPWkrYmUqeSkrIiwiKyh0aGlzLl95MT1zK2JlKlQpfX0sYXJjOmZ1bmN0aW9uKGkscyx1LGQscCx2KXtpPStpLHM9K3MsdT0rdSx2PSEhdjt2YXIgYj11Kk1hdGguY29zKGQpLHk9dSpNYXRoLnNpbihkKSxUPWkrYixfPXMreSxBPTFedixQPXY/ZC1wOnAtZDtpZih1PDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrdSk7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK1QrIiwiK186KE1hdGguYWJzKHRoaXMuX3gxLVQpPmFTfHxNYXRoLmFicyh0aGlzLl95MS1fKT5hUykmJih0aGlzLl8rPSJMIitUKyIsIitfKSx1JiYoUDwwJiYoUD1QJWN3ZStjd2UpLFA+R29uP3RoaXMuXys9IkEiK3UrIiwiK3UrIiwwLDEsIitBKyIsIisoaS1iKSsiLCIrKHMteSkrIkEiK3UrIiwiK3UrIiwwLDEsIitBKyIsIisodGhpcy5feDE9VCkrIiwiKyh0aGlzLl95MT1fKTpQPmFTJiYodGhpcy5fKz0iQSIrdSsiLCIrdSsiLDAsIisgKyhQPj1vd2UpKyIsIitBKyIsIisodGhpcy5feDE9aSt1Kk1hdGguY29zKHApKSsiLCIrKHRoaXMuX3kxPXMrdSpNYXRoLnNpbihwKSkpKX0scmVjdDpmdW5jdGlvbihpLHMsdSxkKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2kpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3MpKyJoIisgK3UrInYiKyArZCsiaCIrLXUrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtmdW5jdGlvbiBTV2UoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGl9fWZ1bmN0aW9uIEtvbihpKXtyZXR1cm4gaVswXX1mdW5jdGlvbiBXb24oaSl7cmV0dXJuIGlbMV19dmFyIFlvbj1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gWG9uKGkpe3JldHVybiBpLnNvdXJjZX1mdW5jdGlvbiBRb24oaSl7cmV0dXJuIGkudGFyZ2V0fWZ1bmN0aW9uIEpvbihpKXt2YXIgcz1Yb24sdT1Rb24sZD1Lb24scD1Xb24sdj1udWxsO2Z1bmN0aW9uIGIoKXt2YXIgeSxUPVlvbi5jYWxsKGFyZ3VtZW50cyksXz1zLmFwcGx5KHRoaXMsVCksQT11LmFwcGx5KHRoaXMsVCk7aWYodnx8KHY9eT1DV2UoKSksaSh2LCtkLmFwcGx5KHRoaXMsKFRbMF09XyxUKSksK3AuYXBwbHkodGhpcyxUKSwrZC5hcHBseSh0aGlzLChUWzBdPUEsVCkpLCtwLmFwcGx5KHRoaXMsVCkpLHkpcmV0dXJuIHY9bnVsbCx5KyIifHxudWxsfXJldHVybiBiLnNvdXJjZT1mdW5jdGlvbih5KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz15LGIpOnN9LGIudGFyZ2V0PWZ1bmN0aW9uKHkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXksYik6dX0sYi54PWZ1bmN0aW9uKHkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPXR5cGVvZiB5PT0iZnVuY3Rpb24iP3k6U1dlKCt5KSxiKTpkfSxiLnk9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9dHlwZW9mIHk9PSJmdW5jdGlvbiI/eTpTV2UoK3kpLGIpOnB9LGIuY29udGV4dD1mdW5jdGlvbih5KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj15Pz9udWxsLGIpOnZ9LGJ9ZnVuY3Rpb24gWm9uKGkscyx1LGQscCl7aS5tb3ZlVG8ocyx1KSxpLmJlemllckN1cnZlVG8ocz0ocytkKS8yLHUscyxwLGQscCl9ZnVuY3Rpb24gZWNuKCl7cmV0dXJuIEpvbihab24pfWZ1bmN0aW9uIHRjbihpKXtyZXR1cm5baS5zb3VyY2UueDEsaS55MF19ZnVuY3Rpb24gbmNuKGkpe3JldHVybltpLnRhcmdldC54MCxpLnkxXX1mdW5jdGlvbiByY24oKXtyZXR1cm4gZWNuKCkuc291cmNlKHRjbikudGFyZ2V0KG5jbil9Y29uc3QgX1dlPWNsYXNzIGFCZXtzdGF0aWMgbmV4dChzKXtyZXR1cm4gbmV3IGFCZShzKyArK2FCZS5jb3VudCl9Y29uc3RydWN0b3Iocyl7dGhpcy5pZD1zLHRoaXMuaHJlZj1gIyR7c31gfXRvU3RyaW5nKCl7cmV0dXJuInVybCgiK3RoaXMuaHJlZisiKSJ9fTtfV2UuY291bnQ9MDtsZXQgQVdlPV9XZTtjb25zdCBpY249e2xlZnQ6am9uLHJpZ2h0OiRvbixjZW50ZXI6em9uLGp1c3RpZnk6eVdlfSxzY249e2RyYXc6ZnVuY3Rpb24oaSxzLHUsZCl7Y29uc3R7c2VjdXJpdHlMZXZlbDpwLHNhbmtleTp2fT1xdCgpLGI9WmplLnNhbmtleTtsZXQgeTtwPT09InNhbmRib3giJiYoeT1JcigiI2kiK3MpKTtjb25zdCBUPUlyKHA9PT0ic2FuZGJveCI/eS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5OiJib2R5IiksXz1wPT09InNhbmRib3giP1Quc2VsZWN0KGBbaWQ9IiR7c30iXWApOklyKGBbaWQ9IiR7c30iXWApLEE9KHY9PW51bGw/dm9pZCAwOnYud2lkdGgpPz9iLndpZHRoLFA9KHY9PW51bGw/dm9pZCAwOnYuaGVpZ2h0KT8/Yi53aWR0aCxSPSh2PT1udWxsP3ZvaWQgMDp2LnVzZU1heFdpZHRoKT8/Yi51c2VNYXhXaWR0aCxGPSh2PT1udWxsP3ZvaWQgMDp2Lm5vZGVBbGlnbm1lbnQpPz9iLm5vZGVBbGlnbm1lbnQsaj0odj09bnVsbD92b2lkIDA6di5wcmVmaXgpPz9iLnByZWZpeCxLPSh2PT1udWxsP3ZvaWQgMDp2LnN1ZmZpeCk/P2Iuc3VmZml4LGVlPSh2PT1udWxsP3ZvaWQgMDp2LnNob3dWYWx1ZXMpPz9iLnNob3dWYWx1ZXMsaWU9ZC5kYi5nZXRHcmFwaCgpLG9lPWljbltGXSxwZT0xMDtVb24oKS5ub2RlSWQoZ2U9PmdlLmlkKS5ub2RlV2lkdGgocGUpLm5vZGVQYWRkaW5nKDEwKyhlZT8xNTowKSkubm9kZUFsaWduKG9lKS5leHRlbnQoW1swLDBdLFtBLFBdXSkoaWUpO2NvbnN0IGFlPV9GKHpGZSk7Xy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGVzIikuc2VsZWN0QWxsKCIubm9kZSIpLmRhdGEoaWUubm9kZXMpLmpvaW4oImciKS5hdHRyKCJjbGFzcyIsIm5vZGUiKS5hdHRyKCJpZCIsZ2U9PihnZS51aWQ9QVdlLm5leHQoIm5vZGUtIikpLmlkKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGdlKXtyZXR1cm4idHJhbnNsYXRlKCIrZ2UueDArIiwiK2dlLnkwKyIpIn0pLmF0dHIoIngiLGdlPT5nZS54MCkuYXR0cigieSIsZ2U9PmdlLnkwKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJoZWlnaHQiLGdlPT5nZS55MS1nZS55MCkuYXR0cigid2lkdGgiLGdlPT5nZS54MS1nZS54MCkuYXR0cigiZmlsbCIsZ2U9PmFlKGdlLmlkKSk7Y29uc3QgbmU9KHtpZDpnZSx2YWx1ZTpXfSk9PmVlP2Ake2dlfQoke2p9JHtNYXRoLnJvdW5kKFcqMTAwKS8xMDB9JHtLfWA6Z2U7Xy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUtbGFiZWxzIikuYXR0cigiZm9udC1mYW1pbHkiLCJzYW5zLXNlcmlmIikuYXR0cigiZm9udC1zaXplIiwxNCkuc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YShpZS5ub2Rlcykuam9pbigidGV4dCIpLmF0dHIoIngiLGdlPT5nZS54MDxBLzI/Z2UueDErNjpnZS54MC02KS5hdHRyKCJ5IixnZT0+KGdlLnkxK2dlLnkwKS8yKS5hdHRyKCJkeSIsYCR7ZWU/IjAiOiIwLjM1In1lbWApLmF0dHIoInRleHQtYW5jaG9yIixnZT0+Z2UueDA8QS8yPyJzdGFydCI6ImVuZCIpLnRleHQobmUpO2NvbnN0IHNlPV8uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsaW5rcyIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLC41KS5zZWxlY3RBbGwoIi5saW5rIikuZGF0YShpZS5saW5rcykuam9pbigiZyIpLmF0dHIoImNsYXNzIiwibGluayIpLnN0eWxlKCJtaXgtYmxlbmQtbW9kZSIsIm11bHRpcGx5IiksZGU9KHY9PW51bGw/dm9pZCAwOnYubGlua0NvbG9yKXx8ImdyYWRpZW50IjtpZihkZT09PSJncmFkaWVudCIpe2NvbnN0IGdlPXNlLmFwcGVuZCgibGluZWFyR3JhZGllbnQiKS5hdHRyKCJpZCIsVz0+KFcudWlkPUFXZS5uZXh0KCJsaW5lYXJHcmFkaWVudC0iKSkuaWQpLmF0dHIoImdyYWRpZW50VW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIngxIixXPT5XLnNvdXJjZS54MSkuYXR0cigieDIiLFc9PlcudGFyZ2V0LngwKTtnZS5hcHBlbmQoInN0b3AiKS5hdHRyKCJvZmZzZXQiLCIwJSIpLmF0dHIoInN0b3AtY29sb3IiLFc9PmFlKFcuc291cmNlLmlkKSksZ2UuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IiwiMTAwJSIpLmF0dHIoInN0b3AtY29sb3IiLFc9PmFlKFcudGFyZ2V0LmlkKSl9bGV0IFg7c3dpdGNoKGRlKXtjYXNlImdyYWRpZW50IjpYPWdlPT5nZS51aWQ7YnJlYWs7Y2FzZSJzb3VyY2UiOlg9Z2U9PmFlKGdlLnNvdXJjZS5pZCk7YnJlYWs7Y2FzZSJ0YXJnZXQiOlg9Z2U9PmFlKGdlLnRhcmdldC5pZCk7YnJlYWs7ZGVmYXVsdDpYPWRlfXNlLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHJjbigpKS5hdHRyKCJzdHJva2UiLFgpLmF0dHIoInN0cm9rZS13aWR0aCIsZ2U9Pk1hdGgubWF4KDEsZ2Uud2lkdGgpKSx5OSh2b2lkIDAsXywwLFIpfX0sYWNuPWk9PmkucmVwbGFjZUFsbCgvXlteXFNcblxyXSt8W15cU1xuXHJdKyQvZywiIikucmVwbGFjZUFsbCgvKFtcblxyXSkrL2csYApgKS50cmltKCksb2NuPU5KLnBhcnNlLmJpbmQoTkopO05KLnBhcnNlPWk9Pm9jbihhY24oaSkpO2NvbnN0IGNjbj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZGlhZ3JhbTp7cGFyc2VyOk5KLGRiOkZvbixyZW5kZXJlcjpzY259fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBsd2U9ZnVuY3Rpb24oKXt2YXIgaT1mdW5jdGlvbihwZSxiZSxhZSxuZSl7Zm9yKGFlPWFlfHx7fSxuZT1wZS5sZW5ndGg7bmUtLTthZVtwZVtuZV1dPWJlKTtyZXR1cm4gYWV9LHM9WzEsN10sdT1bMSwxM10sZD1bMSwxNF0scD1bMSwxNV0sdj1bMSwxOV0sYj1bMSwxNl0seT1bMSwxN10sVD1bMSwxOF0sXz1bOCwzMF0sQT1bOCwyMSwyOCwyOSwzMCwzMSwzMiw0MCw0NCw0N10sUD1bMSwyM10sUj1bMSwyNF0sRj1bOCwxNSwxNiwyMSwyOCwyOSwzMCwzMSwzMiw0MCw0NCw0N10saj1bOCwxNSwxNiwyMSwyNywyOCwyOSwzMCwzMSwzMiw0MCw0NCw0N10sSz1bMSw0OV0sZWU9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzcGFjZUxpbmVzOjMsU1BBQ0VMSU5FOjQsTkw6NSxzZXBhcmF0b3I6NixTUEFDRTo3LEVPRjo4LHN0YXJ0OjksQkxPQ0tfRElBR1JBTV9LRVk6MTAsZG9jdW1lbnQ6MTEsc3RvcDoxMixzdGF0ZW1lbnQ6MTMsbGluazoxNCxMSU5LOjE1LFNUQVJUX0xJTks6MTYsTElOS19MQUJFTDoxNyxTVFI6MTgsbm9kZVN0YXRlbWVudDoxOSxjb2x1bW5zU3RhdGVtZW50OjIwLFNQQUNFX0JMT0NLOjIxLGJsb2NrU3RhdGVtZW50OjIyLGNsYXNzRGVmU3RhdGVtZW50OjIzLGNzc0NsYXNzU3RhdGVtZW50OjI0LHN0eWxlU3RhdGVtZW50OjI1LG5vZGU6MjYsU0laRToyNyxDT0xVTU5TOjI4LCJpZC1ibG9jayI6MjksZW5kOjMwLGJsb2NrOjMxLE5PREVfSUQ6MzIsbm9kZVNoYXBlTkxhYmVsOjMzLGRpckxpc3Q6MzQsRElSOjM1LE5PREVfRFNUQVJUOjM2LE5PREVfREVORDozNyxCTE9DS19BUlJPV19TVEFSVDozOCxCTE9DS19BUlJPV19FTkQ6MzksY2xhc3NEZWY6NDAsQ0xBU1NERUZfSUQ6NDEsQ0xBU1NERUZfU1RZTEVPUFRTOjQyLERFRkFVTFQ6NDMsY2xhc3M6NDQsQ0xBU1NFTlRJVFlfSURTOjQ1LFNUWUxFQ0xBU1M6NDYsc3R5bGU6NDcsU1RZTEVfRU5USVRZX0lEUzo0OCxTVFlMRV9ERUZJTklUSU9OX0RBVEE6NDksJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IlNQQUNFTElORSIsNToiTkwiLDc6IlNQQUNFIiw4OiJFT0YiLDEwOiJCTE9DS19ESUFHUkFNX0tFWSIsMTU6IkxJTksiLDE2OiJTVEFSVF9MSU5LIiwxNzoiTElOS19MQUJFTCIsMTg6IlNUUiIsMjE6IlNQQUNFX0JMT0NLIiwyNzoiU0laRSIsMjg6IkNPTFVNTlMiLDI5OiJpZC1ibG9jayIsMzA6ImVuZCIsMzE6ImJsb2NrIiwzMjoiTk9ERV9JRCIsMzU6IkRJUiIsMzY6Ik5PREVfRFNUQVJUIiwzNzoiTk9ERV9ERU5EIiwzODoiQkxPQ0tfQVJST1dfU1RBUlQiLDM5OiJCTE9DS19BUlJPV19FTkQiLDQwOiJjbGFzc0RlZiIsNDE6IkNMQVNTREVGX0lEIiw0MjoiQ0xBU1NERUZfU1RZTEVPUFRTIiw0MzoiREVGQVVMVCIsNDQ6ImNsYXNzIiw0NToiQ0xBU1NFTlRJVFlfSURTIiw0NjoiU1RZTEVDTEFTUyIsNDc6InN0eWxlIiw0ODoiU1RZTEVfRU5USVRZX0lEUyIsNDk6IlNUWUxFX0RFRklOSVRJT05fREFUQSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywxXSxbMywyXSxbMywyXSxbNiwxXSxbNiwxXSxbNiwxXSxbOSwzXSxbMTIsMV0sWzEyLDFdLFsxMiwyXSxbMTIsMl0sWzExLDFdLFsxMSwyXSxbMTQsMV0sWzE0LDRdLFsxMywxXSxbMTMsMV0sWzEzLDFdLFsxMywxXSxbMTMsMV0sWzEzLDFdLFsxMywxXSxbMTksM10sWzE5LDJdLFsxOSwxXSxbMjAsMV0sWzIyLDRdLFsyMiwzXSxbMjYsMV0sWzI2LDJdLFszNCwxXSxbMzQsMl0sWzMzLDNdLFszMyw0XSxbMjMsM10sWzIzLDNdLFsyNCwzXSxbMjUsM11dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oYmUsYWUsbmUsc2UsZGUsWCxnZSl7dmFyIFc9WC5sZW5ndGgtMTtzd2l0Y2goZGUpe2Nhc2UgNDpzZS5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogc2VwYXJhdG9yIChOTCkgIik7YnJlYWs7Y2FzZSA1OnNlLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBzZXBhcmF0b3IgKFNwYWNlKSAiKTticmVhaztjYXNlIDY6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IHNlcGFyYXRvciAoRU9GKSAiKTticmVhaztjYXNlIDc6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IGhpZXJhcmNoeTogIixYW1ctMV0pLHNlLnNldEhpZXJhcmNoeShYW1ctMV0pO2JyZWFrO2Nhc2UgODpzZS5nZXRMb2dnZXIoKS5kZWJ1ZygiU3RvcCBOTCAiKTticmVhaztjYXNlIDk6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlN0b3AgRU9GICIpO2JyZWFrO2Nhc2UgMTA6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlN0b3AgTkwyICIpO2JyZWFrO2Nhc2UgMTE6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlN0b3AgRU9GMiAiKTticmVhaztjYXNlIDEyOnNlLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBzdGF0ZW1lbnQ6ICIsWFtXXSksdHlwZW9mIFhbV10ubGVuZ3RoPT0ibnVtYmVyIj90aGlzLiQ9WFtXXTp0aGlzLiQ9W1hbV11dO2JyZWFrO2Nhc2UgMTM6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IHN0YXRlbWVudCAjMjogIixYW1ctMV0pLHRoaXMuJD1bWFtXLTFdXS5jb25jYXQoWFtXXSk7YnJlYWs7Y2FzZSAxNDpzZS5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogbGluazogIixYW1ddLGJlKSx0aGlzLiQ9e2VkZ2VUeXBlU3RyOlhbV10sbGFiZWw6IiJ9O2JyZWFrO2Nhc2UgMTU6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IExBQkVMIGxpbms6ICIsWFtXLTNdLFhbVy0xXSxYW1ddKSx0aGlzLiQ9e2VkZ2VUeXBlU3RyOlhbV10sbGFiZWw6WFtXLTFdfTticmVhaztjYXNlIDE4OmNvbnN0IHhlPXBhcnNlSW50KFhbV10pLFU9c2UuZ2VuZXJhdGVJZCgpO3RoaXMuJD17aWQ6VSx0eXBlOiJzcGFjZSIsbGFiZWw6IiIsd2lkdGg6eGUsY2hpbGRyZW46W119O2JyZWFrO2Nhc2UgMjM6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IChub2RlU3RhdGVtZW50IGxpbmsgbm9kZSkgIixYW1ctMl0sWFtXLTFdLFhbV10sIiB0eXBlc3RyOiAiLFhbVy0xXS5lZGdlVHlwZVN0cik7Y29uc3QgRmU9c2UuZWRnZVN0clRvRWRnZURhdGEoWFtXLTFdLmVkZ2VUeXBlU3RyKTt0aGlzLiQ9W3tpZDpYW1ctMl0uaWQsbGFiZWw6WFtXLTJdLmxhYmVsLHR5cGU6WFtXLTJdLnR5cGUsZGlyZWN0aW9uczpYW1ctMl0uZGlyZWN0aW9uc30se2lkOlhbVy0yXS5pZCsiLSIrWFtXXS5pZCxzdGFydDpYW1ctMl0uaWQsZW5kOlhbV10uaWQsbGFiZWw6WFtXLTFdLmxhYmVsLHR5cGU6ImVkZ2UiLGRpcmVjdGlvbnM6WFtXXS5kaXJlY3Rpb25zLGFycm93VHlwZUVuZDpGZSxhcnJvd1R5cGVTdGFydDoiYXJyb3dfb3BlbiJ9LHtpZDpYW1ddLmlkLGxhYmVsOlhbV10ubGFiZWwsdHlwZTpzZS50eXBlU3RyMlR5cGUoWFtXXS50eXBlU3RyKSxkaXJlY3Rpb25zOlhbV10uZGlyZWN0aW9uc31dO2JyZWFrO2Nhc2UgMjQ6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IG5vZGVTdGF0ZW1lbnQgKGFiYzg4IG5vZGUgc2l6ZSkgIixYW1ctMV0sWFtXXSksdGhpcy4kPXtpZDpYW1ctMV0uaWQsbGFiZWw6WFtXLTFdLmxhYmVsLHR5cGU6c2UudHlwZVN0cjJUeXBlKFhbVy0xXS50eXBlU3RyKSxkaXJlY3Rpb25zOlhbVy0xXS5kaXJlY3Rpb25zLHdpZHRoSW5Db2x1bW5zOnBhcnNlSW50KFhbV10sMTApfTticmVhaztjYXNlIDI1OnNlLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBub2RlU3RhdGVtZW50IChub2RlKSAiLFhbV10pLHRoaXMuJD17aWQ6WFtXXS5pZCxsYWJlbDpYW1ddLmxhYmVsLHR5cGU6c2UudHlwZVN0cjJUeXBlKFhbV10udHlwZVN0ciksZGlyZWN0aW9uczpYW1ddLmRpcmVjdGlvbnMsd2lkdGhJbkNvbHVtbnM6MX07YnJlYWs7Y2FzZSAyNjpzZS5nZXRMb2dnZXIoKS5kZWJ1ZygiQVBBMTIzIix0aGlzP3RoaXM6Im5hIiksc2UuZ2V0TG9nZ2VyKCkuZGVidWcoIkNPTFVNTlM6ICIsWFtXXSksdGhpcy4kPXt0eXBlOiJjb2x1bW4tc2V0dGluZyIsY29sdW1uczpYW1ddPT09ImF1dG8iPy0xOnBhcnNlSW50KFhbV10pfTticmVhaztjYXNlIDI3OnNlLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBpZC1ibG9jayBzdGF0ZW1lbnQgOiAiLFhbVy0yXSxYW1ctMV0pLHNlLmdlbmVyYXRlSWQoKSx0aGlzLiQ9ey4uLlhbVy0yXSx0eXBlOiJjb21wb3NpdGUiLGNoaWxkcmVuOlhbVy0xXX07YnJlYWs7Y2FzZSAyODpzZS5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogYmxvY2tTdGF0ZW1lbnQgOiAiLFhbVy0yXSxYW1ctMV0sWFtXXSk7Y29uc3QgUGU9c2UuZ2VuZXJhdGVJZCgpO3RoaXMuJD17aWQ6UGUsdHlwZToiY29tcG9zaXRlIixsYWJlbDoiIixjaGlsZHJlbjpYW1ctMV19O2JyZWFrO2Nhc2UgMjk6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IG5vZGUgKE5PREVfSUQgc2VwYXJhdG9yKTogIixYW1ddKSx0aGlzLiQ9e2lkOlhbV119O2JyZWFrO2Nhc2UgMzA6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IG5vZGUgKE5PREVfSUQgbm9kZVNoYXBlTkxhYmVsIHNlcGFyYXRvcik6ICIsWFtXLTFdLFhbV10pLHRoaXMuJD17aWQ6WFtXLTFdLGxhYmVsOlhbV10ubGFiZWwsdHlwZVN0cjpYW1ddLnR5cGVTdHIsZGlyZWN0aW9uczpYW1ddLmRpcmVjdGlvbnN9O2JyZWFrO2Nhc2UgMzE6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IGRpckxpc3Q6ICIsWFtXXSksdGhpcy4kPVtYW1ddXTticmVhaztjYXNlIDMyOnNlLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBkaXJMaXN0OiAiLFhbVy0xXSxYW1ddKSx0aGlzLiQ9W1hbVy0xXV0uY29uY2F0KFhbV10pO2JyZWFrO2Nhc2UgMzM6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IG5vZGVTaGFwZU5MYWJlbDogIixYW1ctMl0sWFtXLTFdLFhbV10pLHRoaXMuJD17dHlwZVN0cjpYW1ctMl0rWFtXXSxsYWJlbDpYW1ctMV19O2JyZWFrO2Nhc2UgMzQ6c2UuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IEJMT0NLX0FSUk9XIG5vZGVTaGFwZU5MYWJlbDogIixYW1ctM10sWFtXLTJdLCIgIzM6IixYW1ctMV0sWFtXXSksdGhpcy4kPXt0eXBlU3RyOlhbVy0zXStYW1ddLGxhYmVsOlhbVy0yXSxkaXJlY3Rpb25zOlhbVy0xXX07YnJlYWs7Y2FzZSAzNTpjYXNlIDM2OnRoaXMuJD17dHlwZToiY2xhc3NEZWYiLGlkOlhbVy0xXS50cmltKCksY3NzOlhbV10udHJpbSgpfTticmVhaztjYXNlIDM3OnRoaXMuJD17dHlwZToiYXBwbHlDbGFzcyIsaWQ6WFtXLTFdLnRyaW0oKSxzdHlsZUNsYXNzOlhbV10udHJpbSgpfTticmVhaztjYXNlIDM4OnRoaXMuJD17dHlwZToiYXBwbHlTdHlsZXMiLGlkOlhbVy0xXS50cmltKCksc3R5bGVzU3RyOlhbV10udHJpbSgpfTticmVha319LHRhYmxlOlt7OToxLDEwOlsxLDJdfSx7MTpbM119LHsxMTozLDEzOjQsMTk6NSwyMDo2LDIxOnMsMjI6OCwyMzo5LDI0OjEwLDI1OjExLDI2OjEyLDI4OnUsMjk6ZCwzMTpwLDMyOnYsNDA6Yiw0NDp5LDQ3OlR9LHs4OlsxLDIwXX0saShfLFsyLDEyXSx7MTM6NCwxOTo1LDIwOjYsMjI6OCwyMzo5LDI0OjEwLDI1OjExLDI2OjEyLDExOjIxLDIxOnMsMjg6dSwyOTpkLDMxOnAsMzI6diw0MDpiLDQ0OnksNDc6VH0pLGkoQSxbMiwxNl0sezE0OjIyLDE1OlAsMTY6Un0pLGkoQSxbMiwxN10pLGkoQSxbMiwxOF0pLGkoQSxbMiwxOV0pLGkoQSxbMiwyMF0pLGkoQSxbMiwyMV0pLGkoQSxbMiwyMl0pLGkoRixbMiwyNV0sezI3OlsxLDI1XX0pLGkoQSxbMiwyNl0pLHsxOToyNiwyNjoxMiwzMjp2fSx7MTE6MjcsMTM6NCwxOTo1LDIwOjYsMjE6cywyMjo4LDIzOjksMjQ6MTAsMjU6MTEsMjY6MTIsMjg6dSwyOTpkLDMxOnAsMzI6diw0MDpiLDQ0OnksNDc6VH0sezQxOlsxLDI4XSw0MzpbMSwyOV19LHs0NTpbMSwzMF19LHs0ODpbMSwzMV19LGkoaixbMiwyOV0sezMzOjMyLDM2OlsxLDMzXSwzODpbMSwzNF19KSx7MTpbMiw3XX0saShfLFsyLDEzXSksezI2OjM1LDMyOnZ9LHszMjpbMiwxNF19LHsxNzpbMSwzNl19LGkoRixbMiwyNF0pLHsxMTozNywxMzo0LDE0OjIyLDE1OlAsMTY6UiwxOTo1LDIwOjYsMjE6cywyMjo4LDIzOjksMjQ6MTAsMjU6MTEsMjY6MTIsMjg6dSwyOTpkLDMxOnAsMzI6diw0MDpiLDQ0OnksNDc6VH0sezMwOlsxLDM4XX0sezQyOlsxLDM5XX0sezQyOlsxLDQwXX0sezQ2OlsxLDQxXX0sezQ5OlsxLDQyXX0saShqLFsyLDMwXSksezE4OlsxLDQzXX0sezE4OlsxLDQ0XX0saShGLFsyLDIzXSksezE4OlsxLDQ1XX0sezMwOlsxLDQ2XX0saShBLFsyLDI4XSksaShBLFsyLDM1XSksaShBLFsyLDM2XSksaShBLFsyLDM3XSksaShBLFsyLDM4XSksezM3OlsxLDQ3XX0sezM0OjQ4LDM1Okt9LHsxNTpbMSw1MF19LGkoQSxbMiwyN10pLGkoaixbMiwzM10pLHszOTpbMSw1MV19LHszNDo1MiwzNTpLLDM5OlsyLDMxXX0sezMyOlsyLDE1XX0saShqLFsyLDM0XSksezM5OlsyLDMyXX1dLGRlZmF1bHRBY3Rpb25zOnsyMDpbMiw3XSwyMzpbMiwxNF0sNTA6WzIsMTVdLDUyOlsyLDMyXX0scGFyc2VFcnJvcjpmdW5jdGlvbihiZSxhZSl7aWYoYWUucmVjb3ZlcmFibGUpdGhpcy50cmFjZShiZSk7ZWxzZXt2YXIgbmU9bmV3IEVycm9yKGJlKTt0aHJvdyBuZS5oYXNoPWFlLG5lfX0scGFyc2U6ZnVuY3Rpb24oYmUpe3ZhciBhZT10aGlzLG5lPVswXSxzZT1bXSxkZT1bbnVsbF0sWD1bXSxnZT10aGlzLnRhYmxlLFc9IiIseGU9MCxVPTAsRmU9MixQZT0xLGplPVguc2xpY2UuY2FsbChhcmd1bWVudHMsMSksSWU9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxTZT17eXk6e319O2Zvcih2YXIgQ2UgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxDZSkmJihTZS55eVtDZV09dGhpcy55eVtDZV0pO0llLnNldElucHV0KGJlLFNlLnl5KSxTZS55eS5sZXhlcj1JZSxTZS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgSWUueXlsbG9jPiJ1IiYmKEllLnl5bGxvYz17fSk7dmFyIGtlPUllLnl5bGxvYztYLnB1c2goa2UpO3ZhciBLZT1JZS5vcHRpb25zJiZJZS5vcHRpb25zLnJhbmdlczt0eXBlb2YgU2UueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9U2UueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gRnQoKXt2YXIga3Q7cmV0dXJuIGt0PXNlLnBvcCgpfHxJZS5sZXgoKXx8UGUsdHlwZW9mIGt0IT0ibnVtYmVyIiYmKGt0IGluc3RhbmNlb2YgQXJyYXkmJihzZT1rdCxrdD1zZS5wb3AoKSksa3Q9YWUuc3ltYm9sc19ba3RdfHxrdCksa3R9Zm9yKHZhciBOZSxnbixfdCxFdCxHdD17fSxsbix4dCxQdCxRZTs7KXtpZihnbj1uZVtuZS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tnbl0/X3Q9dGhpcy5kZWZhdWx0QWN0aW9uc1tnbl06KChOZT09PW51bGx8fHR5cGVvZiBOZT4idSIpJiYoTmU9RnQoKSksX3Q9Z2VbZ25dJiZnZVtnbl1bTmVdKSx0eXBlb2YgX3Q+InUifHwhX3QubGVuZ3RofHwhX3RbMF0pe3ZhciBEdD0iIjtRZT1bXTtmb3IobG4gaW4gZ2VbZ25dKXRoaXMudGVybWluYWxzX1tsbl0mJmxuPkZlJiZRZS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bbG5dKyInIik7SWUuc2hvd1Bvc2l0aW9uP0R0PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHhlKzEpK2A6CmArSWUuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtRZS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW05lXXx8TmUpKyInIjpEdD0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh4ZSsxKSsiOiBVbmV4cGVjdGVkICIrKE5lPT1QZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tOZV18fE5lKSsiJyIpLHRoaXMucGFyc2VFcnJvcihEdCx7dGV4dDpJZS5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bTmVdfHxOZSxsaW5lOkllLnl5bGluZW5vLGxvYzprZSxleHBlY3RlZDpRZX0pfWlmKF90WzBdaW5zdGFuY2VvZiBBcnJheSYmX3QubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitnbisiLCB0b2tlbjogIitOZSk7c3dpdGNoKF90WzBdKXtjYXNlIDE6bmUucHVzaChOZSksZGUucHVzaChJZS55eXRleHQpLFgucHVzaChJZS55eWxsb2MpLG5lLnB1c2goX3RbMV0pLE5lPW51bGwsVT1JZS55eWxlbmcsVz1JZS55eXRleHQseGU9SWUueXlsaW5lbm8sa2U9SWUueXlsbG9jO2JyZWFrO2Nhc2UgMjppZih4dD10aGlzLnByb2R1Y3Rpb25zX1tfdFsxXV1bMV0sR3QuJD1kZVtkZS5sZW5ndGgteHRdLEd0Ll8kPXtmaXJzdF9saW5lOlhbWC5sZW5ndGgtKHh0fHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6WFtYLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOlhbWC5sZW5ndGgtKHh0fHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOlhbWC5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LEtlJiYoR3QuXyQucmFuZ2U9W1hbWC5sZW5ndGgtKHh0fHwxKV0ucmFuZ2VbMF0sWFtYLmxlbmd0aC0xXS5yYW5nZVsxXV0pLEV0PXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShHdCxbVyxVLHhlLFNlLnl5LF90WzFdLGRlLFhdLmNvbmNhdChqZSkpLHR5cGVvZiBFdDwidSIpcmV0dXJuIEV0O3h0JiYobmU9bmUuc2xpY2UoMCwtMSp4dCoyKSxkZT1kZS5zbGljZSgwLC0xKnh0KSxYPVguc2xpY2UoMCwtMSp4dCkpLG5lLnB1c2godGhpcy5wcm9kdWN0aW9uc19bX3RbMV1dWzBdKSxkZS5wdXNoKEd0LiQpLFgucHVzaChHdC5fJCksUHQ9Z2VbbmVbbmUubGVuZ3RoLTJdXVtuZVtuZS5sZW5ndGgtMV1dLG5lLnB1c2goUHQpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxpZT1mdW5jdGlvbigpe3ZhciBwZT17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihhZSxuZSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihhZSxuZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYWUpfSxzZXRJbnB1dDpmdW5jdGlvbihiZSxhZSl7cmV0dXJuIHRoaXMueXk9YWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PWJlLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciBiZT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9YmUsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPWJlLHRoaXMubWF0Y2hlZCs9YmU7dmFyIGFlPWJlLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gYWU/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLGJlfSx1bnB1dDpmdW5jdGlvbihiZSl7dmFyIGFlPWJlLmxlbmd0aCxuZT1iZS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PWJlK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1hZSksdGhpcy5vZmZzZXQtPWFlO3ZhciBzZT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuZS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW5lLmxlbmd0aC0xKTt2YXIgZGU9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm5lPyhuZS5sZW5ndGg9PT1zZS5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3NlW3NlLmxlbmd0aC1uZS5sZW5ndGhdLmxlbmd0aC1uZVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWFlfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2RlWzBdLGRlWzBdK3RoaXMueXlsZW5nLWFlXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LGxlc3M6ZnVuY3Rpb24oYmUpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShiZSkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgYmU9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihiZS5sZW5ndGg+MjA/Ii4uLiI6IiIpK2JlLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIGJlPXRoaXMubWF0Y2g7cmV0dXJuIGJlLmxlbmd0aDwyMCYmKGJlKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1iZS5sZW5ndGgpKSwoYmUuc3Vic3RyKDAsMjApKyhiZS5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGJlPXRoaXMucGFzdElucHV0KCksYWU9bmV3IEFycmF5KGJlLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIGJlK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCthZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24oYmUsYWUpe3ZhciBuZSxzZSxkZTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoZGU9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoZGUueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksc2U9YmVbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLHNlJiYodGhpcy55eWxpbmVubys9c2UubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46c2U/c2Vbc2UubGVuZ3RoLTFdLmxlbmd0aC1zZVtzZS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitiZVswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1iZVswXSx0aGlzLm1hdGNoKz1iZVswXSx0aGlzLm1hdGNoZXM9YmUsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoYmVbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPWJlWzBdLG5lPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGFlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG5lKXJldHVybiBuZTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgWCBpbiBkZSl0aGlzW1hdPWRlW1hdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIGJlLGFlLG5lLHNlO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGRlPXRoaXMuX2N1cnJlbnRSdWxlcygpLFg9MDtYPGRlLmxlbmd0aDtYKyspaWYobmU9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tkZVtYXV0pLG5lJiYoIWFlfHxuZVswXS5sZW5ndGg+YWVbMF0ubGVuZ3RoKSl7aWYoYWU9bmUsc2U9WCx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihiZT10aGlzLnRlc3RfbWF0Y2gobmUsZGVbWF0pLGJlIT09ITEpcmV0dXJuIGJlO2lmKHRoaXMuX2JhY2t0cmFjayl7YWU9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gYWU/KGJlPXRoaXMudGVzdF9tYXRjaChhZSxkZVtzZV0pLGJlIT09ITE/YmU6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBhZT10aGlzLm5leHQoKTtyZXR1cm4gYWV8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKGFlKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goYWUpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3ZhciBhZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBhZT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKGFlKXtyZXR1cm4gYWU9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhhZXx8MCksYWU+PTA/dGhpcy5jb25kaXRpb25TdGFja1thZV06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24oYWUpe3RoaXMuYmVnaW4oYWUpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7fSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKGFlLG5lLHNlLGRlKXtzd2l0Y2goc2Upe2Nhc2UgMDpyZXR1cm4gMTA7Y2FzZSAxOnJldHVybiBhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiRm91bmQgc3BhY2UtYmxvY2siKSwzMTtjYXNlIDI6cmV0dXJuIGFlLmdldExvZ2dlcigpLmRlYnVnKCJGb3VuZCBubC1ibG9jayIpLDMxO2Nhc2UgMzpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkZvdW5kIHNwYWNlLWJsb2NrIiksMjk7Y2FzZSA0OmFlLmdldExvZ2dlcigpLmRlYnVnKCIuIixuZS55eXRleHQpO2JyZWFrO2Nhc2UgNTphZS5nZXRMb2dnZXIoKS5kZWJ1ZygiXyIsbmUueXl0ZXh0KTticmVhaztjYXNlIDY6cmV0dXJuIDU7Y2FzZSA3OnJldHVybiBuZS55eXRleHQ9LTEsMjg7Y2FzZSA4OnJldHVybiBuZS55eXRleHQ9bmUueXl0ZXh0LnJlcGxhY2UoL2NvbHVtbnNccysvLCIiKSxhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiQ09MVU1OUyAoTEVYKSIsbmUueXl0ZXh0KSwyODtjYXNlIDk6dGhpcy5wdXNoU3RhdGUoIm1kX3N0cmluZyIpO2JyZWFrO2Nhc2UgMTA6cmV0dXJuIk1EX1NUUiI7Y2FzZSAxMTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMjp0aGlzLnB1c2hTdGF0ZSgic3RyaW5nIik7YnJlYWs7Y2FzZSAxMzphZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTEVYOiBQT1BQSU5HIFNUUjoiLG5lLnl5dGV4dCksdGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTQ6cmV0dXJuIGFlLmdldExvZ2dlcigpLmRlYnVnKCJMRVg6IFNUUiBlbmQ6IixuZS55eXRleHQpLCJTVFIiO2Nhc2UgMTU6cmV0dXJuIG5lLnl5dGV4dD1uZS55eXRleHQucmVwbGFjZSgvc3BhY2VcOi8sIiIpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJTUEFDRSBOVU0gKExFWCkiLG5lLnl5dGV4dCksMjE7Y2FzZSAxNjpyZXR1cm4gbmUueXl0ZXh0PSIxIixhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiQ09MVU1OUyAoTEVYKSIsbmUueXl0ZXh0KSwyMTtjYXNlIDE3OnJldHVybiA0MztjYXNlIDE4OnJldHVybiJMSU5LU1RZTEUiO2Nhc2UgMTk6cmV0dXJuIklOVEVSUE9MQVRFIjtjYXNlIDIwOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiQ0xBU1NERUYiKSw0MDtjYXNlIDIxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkNMQVNTREVGSUQiKSwiREVGQVVMVF9DTEFTU0RFRl9JRCI7Y2FzZSAyMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJDTEFTU0RFRklEIiksNDE7Y2FzZSAyMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQyO2Nhc2UgMjQ6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJDTEFTUyIpLDQ0O2Nhc2UgMjU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiQ0xBU1NfU1RZTEUiKSw0NTtjYXNlIDI2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNDY7Y2FzZSAyNzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIlNUWUxFX1NUTU5UIiksNDc7Y2FzZSAyODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJTVFlMRV9ERUZJTklUSU9OIiksNDg7Y2FzZSAyOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQ5O2Nhc2UgMzA6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJhY2NfdGl0bGUiKSwiYWNjX3RpdGxlIjtjYXNlIDMxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7Y2FzZSAzMjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImFjY19kZXNjciIpLCJhY2NfZGVzY3IiO2Nhc2UgMzM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjtjYXNlIDM0OnRoaXMucHVzaFN0YXRlKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAzNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAzNjpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAzNzpyZXR1cm4gMzA7Y2FzZSAzODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoIiksIk5PREVfREVORCI7Y2FzZSAzOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoIiksIk5PREVfREVORCI7Y2FzZSA0MDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICkpIiksIk5PREVfREVORCI7Y2FzZSA0MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoIiksIk5PREVfREVORCI7Y2FzZSA0MjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoIiksIk5PREVfREVORCI7Y2FzZSA0MzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgtIiksIk5PREVfREVORCI7Y2FzZSA0NDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IC0pIiksIk5PREVfREVORCI7Y2FzZSA0NTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoIiksIk5PREVfREVORCI7Y2FzZSA0NjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IF1dIiksIk5PREVfREVORCI7Y2FzZSA0NzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgiKSwiTk9ERV9ERU5EIjtjYXNlIDQ4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogXSkiKSwiTk9ERV9ERU5EIjtjYXNlIDQ5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogL10iKSwiTk9ERV9ERU5EIjtjYXNlIDUwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogL10iKSwiTk9ERV9ERU5EIjtjYXNlIDUxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogKV0iKSwiTk9ERV9ERU5EIjtjYXNlIDUyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogKSIpLCJOT0RFX0RFTkQiO2Nhc2UgNTM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBdPiIpLCJOT0RFX0RFTkQiO2Nhc2UgNTQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBdIiksIk5PREVfREVORCI7Y2FzZSA1NTpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6IC0pIiksdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjtjYXNlIDU2OnJldHVybiBhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YTogKC0iKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2Nhc2UgNTc6cmV0dXJuIGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXhhOiApKSIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7Y2FzZSA1ODpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6ICkiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2Nhc2UgNTk6cmV0dXJuIGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoKCIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7Y2FzZSA2MDpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6ICkiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2Nhc2UgNjE6cmV0dXJuIGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXhhOiApIiksdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjtjYXNlIDYyOnJldHVybiBhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YTogKSIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7Y2FzZSA2MzpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGM6ID4iKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2Nhc2UgNjQ6cmV0dXJuIGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXhhOiAoWyIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7Y2FzZSA2NTpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6ICkiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2Nhc2UgNjY6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7Y2FzZSA2NzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjtjYXNlIDY4OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2Nhc2UgNjk6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7Y2FzZSA3MDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjtjYXNlIDcxOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2Nhc2UgNzI6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7Y2FzZSA3MzpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6IFsiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2Nhc2UgNzQ6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJCTE9DS19BUlJPVyIpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMRVggQVJSIFNUQVJUIiksMzg7Y2FzZSA3NTpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogTk9ERV9JRCIsbmUueXl0ZXh0KSwzMjtjYXNlIDc2OnJldHVybiBhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBFT0YiLG5lLnl5dGV4dCksODtjYXNlIDc3OnRoaXMucHVzaFN0YXRlKCJtZF9zdHJpbmciKTticmVhaztjYXNlIDc4OnRoaXMucHVzaFN0YXRlKCJtZF9zdHJpbmciKTticmVhaztjYXNlIDc5OnJldHVybiJOT0RFX0RFU0NSIjtjYXNlIDgwOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDgxOmFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IFN0YXJ0aW5nIHN0cmluZyIpLHRoaXMucHVzaFN0YXRlKCJzdHJpbmciKTticmVhaztjYXNlIDgyOmFlLmdldExvZ2dlcigpLmRlYnVnKCJMRVggQVJSOiBTdGFydGluZyBzdHJpbmciKSx0aGlzLnB1c2hTdGF0ZSgic3RyaW5nIik7YnJlYWs7Y2FzZSA4MzpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxFWDogTk9ERV9ERVNDUjoiLG5lLnl5dGV4dCksIk5PREVfREVTQ1IiO2Nhc2UgODQ6YWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxFWCBQT1BQSU5HIiksdGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgODU6YWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogPT5CQUUiKSx0aGlzLnB1c2hTdGF0ZSgiQVJST1dfRElSIik7YnJlYWs7Y2FzZSA4NjpyZXR1cm4gbmUueXl0ZXh0PW5lLnl5dGV4dC5yZXBsYWNlKC9eLFxzKi8sIiIpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXggKHJpZ2h0KTogZGlyOiIsbmUueXl0ZXh0KSwiRElSIjtjYXNlIDg3OnJldHVybiBuZS55eXRleHQ9bmUueXl0ZXh0LnJlcGxhY2UoL14sXHMqLywiIiksYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleCAobGVmdCk6IixuZS55eXRleHQpLCJESVIiO2Nhc2UgODg6cmV0dXJuIG5lLnl5dGV4dD1uZS55eXRleHQucmVwbGFjZSgvXixccyovLCIiKSxhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4ICh4KToiLG5lLnl5dGV4dCksIkRJUiI7Y2FzZSA4OTpyZXR1cm4gbmUueXl0ZXh0PW5lLnl5dGV4dC5yZXBsYWNlKC9eLFxzKi8sIiIpLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXggKHkpOiIsbmUueXl0ZXh0KSwiRElSIjtjYXNlIDkwOnJldHVybiBuZS55eXRleHQ9bmUueXl0ZXh0LnJlcGxhY2UoL14sXHMqLywiIiksYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleCAodXApOiIsbmUueXl0ZXh0KSwiRElSIjtjYXNlIDkxOnJldHVybiBuZS55eXRleHQ9bmUueXl0ZXh0LnJlcGxhY2UoL14sXHMqLywiIiksYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleCAoZG93bik6IixuZS55eXRleHQpLCJESVIiO2Nhc2UgOTI6cmV0dXJuIG5lLnl5dGV4dD0iXT4iLGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXggKEFSUk9XX0RJUiBlbmQpOiIsbmUueXl0ZXh0KSx0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLCJCTE9DS19BUlJPV19FTkQiO2Nhc2UgOTM6cmV0dXJuIGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IExJTksiLCIjIituZS55eXRleHQrIiMiKSwxNTtjYXNlIDk0OnJldHVybiBhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBMSU5LIixuZS55eXRleHQpLDE1O2Nhc2UgOTU6cmV0dXJuIGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IExJTksiLG5lLnl5dGV4dCksMTU7Y2FzZSA5NjpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogTElOSyIsbmUueXl0ZXh0KSwxNTtjYXNlIDk3OnJldHVybiBhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBTVEFSVF9MSU5LIixuZS55eXRleHQpLHRoaXMucHVzaFN0YXRlKCJMTEFCRUwiKSwxNjtjYXNlIDk4OnJldHVybiBhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBTVEFSVF9MSU5LIixuZS55eXRleHQpLHRoaXMucHVzaFN0YXRlKCJMTEFCRUwiKSwxNjtjYXNlIDk5OnJldHVybiBhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBTVEFSVF9MSU5LIixuZS55eXRleHQpLHRoaXMucHVzaFN0YXRlKCJMTEFCRUwiKSwxNjtjYXNlIDEwMDp0aGlzLnB1c2hTdGF0ZSgibWRfc3RyaW5nIik7YnJlYWs7Y2FzZSAxMDE6cmV0dXJuIGFlLmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IFN0YXJ0aW5nIHN0cmluZyIpLHRoaXMucHVzaFN0YXRlKCJzdHJpbmciKSwiTElOS19MQUJFTCI7Y2FzZSAxMDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBMSU5LIiwiIyIrbmUueXl0ZXh0KyIjIiksMTU7Y2FzZSAxMDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxhZS5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBMSU5LIixuZS55eXRleHQpLDE1O2Nhc2UgMTA0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogTElOSyIsbmUueXl0ZXh0KSwxNTtjYXNlIDEwNTpyZXR1cm4gYWUuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogQ09MT04iLG5lLnl5dGV4dCksbmUueXl0ZXh0PW5lLnl5dGV4dC5zbGljZSgxKSwyN319LHJ1bGVzOlsvXig/OmJsb2NrLWJldGFcYikvLC9eKD86YmxvY2tccyspLywvXig/OmJsb2NrXG4rKS8sL14oPzpibG9jazopLywvXig/Oltcc10rKS8sL14oPzpbXG5dKykvLC9eKD86KChcdTAwMERcdTAwMEEpfChcdTAwMEEpKSkvLC9eKD86Y29sdW1uc1xzK2F1dG9cYikvLC9eKD86Y29sdW1uc1xzK1tcZF0rKS8sL14oPzpbIl1bYF0pLywvXig/OlteYCJdKykvLC9eKD86W2BdWyJdKS8sL14oPzpbIl0pLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OnNwYWNlWzpdXGQrKS8sL14oPzpzcGFjZVxiKS8sL14oPzpkZWZhdWx0XGIpLywvXig/OmxpbmtTdHlsZVxiKS8sL14oPzppbnRlcnBvbGF0ZVxiKS8sL14oPzpjbGFzc0RlZlxzKykvLC9eKD86REVGQVVMVFxzKykvLC9eKD86XHcrXHMrKS8sL14oPzpbXlxuXSopLywvXig/OmNsYXNzXHMrKS8sL14oPzooXHcrKSsoKCxccypcdyspKikpLywvXig/OlteXG5dKikvLC9eKD86c3R5bGVccyspLywvXig/OihcdyspKygoLFxzKlx3KykqKSkvLC9eKD86W15cbl0qKS8sL14oPzphY2NUaXRsZVxzKjpccyopLywvXig/Oig/IVxufHwpKlteXG5dKikvLC9eKD86YWNjRGVzY3Jccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqXHtccyopLywvXig/OltcfV0pLywvXig/OlteXH1dKikvLC9eKD86ZW5kXGJccyopLywvXig/OlwoXChcKCkvLC9eKD86XClcKVwpKS8sL14oPzpbXCldXCkpLywvXig/Olx9XH0pLywvXig/Olx9KS8sL14oPzpcKC0pLywvXig/Oi1cKSkvLC9eKD86XChcKCkvLC9eKD86XF1cXSkvLC9eKD86XCgpLywvXig/OlxdXCkpLywvXig/OlxcXF0pLywvXig/OlwvXF0pLywvXig/OlwpXF0pLywvXig/OltcKV0pLywvXig/OlxdPikvLC9eKD86W1xdXSkvLC9eKD86LVwpKS8sL14oPzpcKC0pLywvXig/OlwpXCkpLywvXig/OlwpKS8sL14oPzpcKFwoXCgpLywvXig/OlwoXCgpLywvXig/Olx7XHspLywvXig/Olx7KS8sL14oPzo+KS8sL14oPzpcKFxbKS8sL14oPzpcKCkvLC9eKD86XFtcWykvLC9eKD86XFtcfCkvLC9eKD86XFtcKCkvLC9eKD86XClcKVwpKS8sL14oPzpcW1xcKS8sL14oPzpcW1wvKS8sL14oPzpcW1xcKS8sL14oPzpcWykvLC9eKD86PFxbKS8sL14oPzpbXlwoXFtcblwtXClce1x9XHNcPFw+Ol0rKS8sL14oPzokKS8sL14oPzpbIl1bYF0pLywvXig/OlsiXVtgXSkvLC9eKD86W15gIl0rKS8sL14oPzpbYF1bIl0pLywvXig/OlsiXSkvLC9eKD86WyJdKS8sL14oPzpbXiJdKykvLC9eKD86WyJdKS8sL14oPzpcXT5ccypcKCkvLC9eKD86LD9ccypyaWdodFxzKikvLC9eKD86LD9ccypsZWZ0XHMqKS8sL14oPzosP1xzKnhccyopLywvXig/Oiw/XHMqeVxzKikvLC9eKD86LD9ccyp1cFxzKikvLC9eKD86LD9ccypkb3duXHMqKS8sL14oPzpcKVxzKikvLC9eKD86XHMqW3hvPF0/LS0rWy14bz5dXHMqKS8sL14oPzpccypbeG88XT89PStbPXhvPl1ccyopLywvXig/OlxzKlt4bzxdPy0/XC4rLVt4bz5dP1xzKikvLC9eKD86XHMqfn5bXH5dK1xzKikvLC9eKD86XHMqW3hvPF0/LS1ccyopLywvXig/OlxzKlt4bzxdPz09XHMqKS8sL14oPzpccypbeG88XT8tXC5ccyopLywvXig/OlsiXVtgXSkvLC9eKD86WyJdKS8sL14oPzpccypbeG88XT8tLStbLXhvPl1ccyopLywvXig/OlxzKlt4bzxdPz09K1s9eG8+XVxzKikvLC9eKD86XHMqW3hvPF0/LT9cListW3hvPl0/XHMqKS8sL14oPzo6XGQrKS9dLGNvbmRpdGlvbnM6e1NUWUxFX0RFRklOSVRJT046e3J1bGVzOlsyOV0saW5jbHVzaXZlOiExfSxTVFlMRV9TVE1OVDp7cnVsZXM6WzI4XSxpbmNsdXNpdmU6ITF9LENMQVNTREVGSUQ6e3J1bGVzOlsyM10saW5jbHVzaXZlOiExfSxDTEFTU0RFRjp7cnVsZXM6WzIxLDIyXSxpbmNsdXNpdmU6ITF9LENMQVNTX1NUWUxFOntydWxlczpbMjZdLGluY2x1c2l2ZTohMX0sQ0xBU1M6e3J1bGVzOlsyNV0saW5jbHVzaXZlOiExfSxMTEFCRUw6e3J1bGVzOlsxMDAsMTAxLDEwMiwxMDMsMTA0XSxpbmNsdXNpdmU6ITF9LEFSUk9XX0RJUjp7cnVsZXM6Wzg2LDg3LDg4LDg5LDkwLDkxLDkyXSxpbmNsdXNpdmU6ITF9LEJMT0NLX0FSUk9XOntydWxlczpbNzcsODIsODVdLGluY2x1c2l2ZTohMX0sTk9ERTp7cnVsZXM6WzM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDc4LDgxXSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6WzEwLDExLDc5LDgwXSxpbmNsdXNpdmU6ITF9LHNwYWNlOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzEzLDE0LDgzLDg0XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlszNSwzNl0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOlszM10saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOlszMV0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMiwxNSwxNiwxNywxOCwxOSwyMCwyNCwyNywzMCwzMiwzNCwzNyw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDVdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gcGV9KCk7ZWUubGV4ZXI9aWU7ZnVuY3Rpb24gb2UoKXt0aGlzLnl5PXt9fXJldHVybiBvZS5wcm90b3R5cGU9ZWUsZWUuUGFyc2VyPW9lLG5ldyBvZX0oKTtsd2UucGFyc2VyPWx3ZTtjb25zdCB1Y249bHdlO2xldCBVMj17fSxod2U9W10saWo9e307Y29uc3QgTFdlPSJjb2xvciIsTVdlPSJmaWxsIixsY249ImJnRmlsbCIsRFdlPSIsIixoY249cXQoKTtsZXQgc2o9e307Y29uc3QgZmNuPWk9PmNpLnNhbml0aXplVGV4dChpLGhjbiksZGNuPWZ1bmN0aW9uKGkscz0iIil7c2pbaV09PT12b2lkIDAmJihzaltpXT17aWQ6aSxzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0pO2NvbnN0IHU9c2pbaV07cyE9bnVsbCYmcy5zcGxpdChEV2UpLmZvckVhY2goZD0+e2NvbnN0IHA9ZC5yZXBsYWNlKC8oW147XSopOy8sIiQxIikudHJpbSgpO2lmKGQubWF0Y2goTFdlKSl7Y29uc3QgYj1wLnJlcGxhY2UoTVdlLGxjbikucmVwbGFjZShMV2UsTVdlKTt1LnRleHRTdHlsZXMucHVzaChiKX11LnN0eWxlcy5wdXNoKHApfSl9LGdjbj1mdW5jdGlvbihpLHM9IiIpe2NvbnN0IHU9VTJbaV07cyE9bnVsbCYmKHUuc3R5bGVzPXMuc3BsaXQoRFdlKSl9LHBjbj1mdW5jdGlvbihpLHMpe2kuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe2xldCBkPVUyW3VdO2lmKGQ9PT12b2lkIDApe2NvbnN0IHA9dS50cmltKCk7VTJbcF09e2lkOnAsdHlwZToibmEiLGNoaWxkcmVuOltdfSxkPVUyW3BdfWQuY2xhc3Nlc3x8KGQuY2xhc3Nlcz1bXSksZC5jbGFzc2VzLnB1c2gocyl9KX0sSVdlPShpLHMpPT57Y29uc3QgdT1pLmZsYXQoKSxkPVtdO2Zvcihjb25zdCBwIG9mIHUpe2lmKHAubGFiZWwmJihwLmxhYmVsPWZjbihwLmxhYmVsKSkscC50eXBlPT09ImNsYXNzRGVmIil7ZGNuKHAuaWQscC5jc3MpO2NvbnRpbnVlfWlmKHAudHlwZT09PSJhcHBseUNsYXNzIil7cGNuKHAuaWQsKHA9PW51bGw/dm9pZCAwOnAuc3R5bGVDbGFzcyl8fCIiKTtjb250aW51ZX1pZihwLnR5cGU9PT0iYXBwbHlTdHlsZXMiKXtwIT1udWxsJiZwLnN0eWxlc1N0ciYmZ2NuKHAuaWQscD09bnVsbD92b2lkIDA6cC5zdHlsZXNTdHIpO2NvbnRpbnVlfWlmKHAudHlwZT09PSJjb2x1bW4tc2V0dGluZyIpcy5jb2x1bW5zPXAuY29sdW1uc3x8LTE7ZWxzZSBpZihwLnR5cGU9PT0iZWRnZSIpaWpbcC5pZF0/aWpbcC5pZF0rKzppaltwLmlkXT0xLHAuaWQ9aWpbcC5pZF0rIi0iK3AuaWQsaHdlLnB1c2gocCk7ZWxzZXtwLmxhYmVsfHwocC50eXBlPT09ImNvbXBvc2l0ZSI/cC5sYWJlbD0iIjpwLmxhYmVsPXAuaWQpO2NvbnN0IHY9IVUyW3AuaWRdO2lmKHY/VTJbcC5pZF09cDoocC50eXBlIT09Im5hIiYmKFUyW3AuaWRdLnR5cGU9cC50eXBlKSxwLmxhYmVsIT09cC5pZCYmKFUyW3AuaWRdLmxhYmVsPXAubGFiZWwpKSxwLmNoaWxkcmVuJiZJV2UocC5jaGlsZHJlbixwKSxwLnR5cGU9PT0ic3BhY2UiKXtjb25zdCBiPXAud2lkdGh8fDE7Zm9yKGxldCB5PTA7eTxiO3krKyl7Y29uc3QgVD1ESGUocCk7VC5pZD1ULmlkKyItIit5LFUyW1QuaWRdPVQsZC5wdXNoKFQpfX1lbHNlIHYmJmQucHVzaChwKX19cy5jaGlsZHJlbj1kfTtsZXQgZndlPVtdLGFqPXtpZDoicm9vdCIsdHlwZToiY29tcG9zaXRlIixjaGlsZHJlbjpbXSxjb2x1bW5zOi0xfTtjb25zdCBiY249KCk9PntYZS5kZWJ1ZygiQ2xlYXIgY2FsbGVkIiksUGcoKSxhaj17aWQ6InJvb3QiLHR5cGU6ImNvbXBvc2l0ZSIsY2hpbGRyZW46W10sY29sdW1uczotMX0sVTI9e3Jvb3Q6YWp9LGZ3ZT1bXSxzaj17fSxod2U9W10saWo9e319O2Z1bmN0aW9uIG1jbihpKXtzd2l0Y2goWGUuZGVidWcoInR5cGVTdHIyVHlwZSIsaSksaSl7Y2FzZSJbXSI6cmV0dXJuInNxdWFyZSI7Y2FzZSIoKSI6cmV0dXJuIFhlLmRlYnVnKCJ3ZSBoYXZlIGEgcm91bmQiKSwicm91bmQiO2Nhc2UiKCgpKSI6cmV0dXJuImNpcmNsZSI7Y2FzZSI+XSI6cmV0dXJuInJlY3RfbGVmdF9pbnZfYXJyb3ciO2Nhc2Uie30iOnJldHVybiJkaWFtb25kIjtjYXNlInt7fX0iOnJldHVybiJoZXhhZ29uIjtjYXNlIihbXSkiOnJldHVybiJzdGFkaXVtIjtjYXNlIltbXV0iOnJldHVybiJzdWJyb3V0aW5lIjtjYXNlIlsoKV0iOnJldHVybiJjeWxpbmRlciI7Y2FzZSIoKCgpKSkiOnJldHVybiJkb3VibGVjaXJjbGUiO2Nhc2UiWy8vXSI6cmV0dXJuImxlYW5fcmlnaHQiO2Nhc2UiW1xcXFxdIjpyZXR1cm4ibGVhbl9sZWZ0IjtjYXNlIlsvXFxdIjpyZXR1cm4idHJhcGV6b2lkIjtjYXNlIltcXC9dIjpyZXR1cm4iaW52X3RyYXBlem9pZCI7Y2FzZSI8W10+IjpyZXR1cm4iYmxvY2tfYXJyb3ciO2RlZmF1bHQ6cmV0dXJuIm5hIn19ZnVuY3Rpb24gdmNuKGkpe3N3aXRjaChYZS5kZWJ1ZygidHlwZVN0cjJUeXBlIixpKSxpKXtjYXNlIj09IjpyZXR1cm4idGhpY2siO2RlZmF1bHQ6cmV0dXJuIm5vcm1hbCJ9fWZ1bmN0aW9uIHdjbihpKXtzd2l0Y2goaS50cmltKCkpe2Nhc2UiLS14IjpyZXR1cm4iYXJyb3dfY3Jvc3MiO2Nhc2UiLS1vIjpyZXR1cm4iYXJyb3dfY2lyY2xlIjtkZWZhdWx0OnJldHVybiJhcnJvd19wb2ludCJ9fWxldCBPV2U9MDtjb25zdCB5Y249e2dldENvbmZpZzooKT0+VmgoKS5ibG9jayx0eXBlU3RyMlR5cGU6bWNuLGVkZ2VUeXBlU3RyMlR5cGU6dmNuLGVkZ2VTdHJUb0VkZ2VEYXRhOndjbixnZXRMb2dnZXI6KCk9PmNvbnNvbGUsZ2V0QmxvY2tzRmxhdDooKT0+Wy4uLk9iamVjdC52YWx1ZXMoVTIpXSxnZXRCbG9ja3M6KCk9PmZ3ZXx8W10sZ2V0RWRnZXM6KCk9Pmh3ZSxzZXRIaWVyYXJjaHk6aT0+e2FqLmNoaWxkcmVuPWksSVdlKGksYWopLGZ3ZT1hai5jaGlsZHJlbn0sZ2V0QmxvY2s6aT0+VTJbaV0sc2V0QmxvY2s6aT0+e1UyW2kuaWRdPWl9LGdldENvbHVtbnM6aT0+e2NvbnN0IHM9VTJbaV07cmV0dXJuIHM/cy5jb2x1bW5zP3MuY29sdW1uczpzLmNoaWxkcmVuP3MuY2hpbGRyZW4ubGVuZ3RoOi0xOi0xfSxnZXRDbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuIHNqfSxjbGVhcjpiY24sZ2VuZXJhdGVJZDooKT0+KE9XZSsrLCJpZC0iK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDEyKSsiLSIrT1dlKX0sako9KGkscyk9Pntjb25zdCB1PUFSZSxkPXUoaSwiciIpLHA9dShpLCJnIiksdj11KGksImIiKTtyZXR1cm4gU0MoZCxwLHYscyl9LHhjbj1pPT5gLmxhYmVsIHsKICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgICBjb2xvcjogJHtpLm5vZGVUZXh0Q29sb3J8fGkudGV4dENvbG9yfTsKICB9CiAgLmNsdXN0ZXItbGFiZWwgdGV4dCB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQogIC5jbHVzdGVyLWxhYmVsIHNwYW4scCB7CiAgICBjb2xvcjogJHtpLnRpdGxlQ29sb3J9OwogIH0KCgoKICAubGFiZWwgdGV4dCxzcGFuLHAgewogICAgZmlsbDogJHtpLm5vZGVUZXh0Q29sb3J8fGkudGV4dENvbG9yfTsKICAgIGNvbG9yOiAke2kubm9kZVRleHRDb2xvcnx8aS50ZXh0Q29sb3J9OwogIH0KCiAgLm5vZGUgcmVjdCwKICAubm9kZSBjaXJjbGUsCiAgLm5vZGUgZWxsaXBzZSwKICAubm9kZSBwb2x5Z29uLAogIC5ub2RlIHBhdGggewogICAgZmlsbDogJHtpLm1haW5Ca2d9OwogICAgc3Ryb2tlOiAke2kubm9kZUJvcmRlcn07CiAgICBzdHJva2Utd2lkdGg6IDFweDsKICB9CiAgLmZsb3djaGFydC1sYWJlbCB0ZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgfQogIC8vIC5mbG93Y2hhcnQtbGFiZWwgLnRleHQtb3V0ZXItdHNwYW4gewogIC8vICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAvLyB9CiAgLy8gLmZsb3djaGFydC1sYWJlbCAudGV4dC1pbm5lci10c3BhbiB7CiAgLy8gICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgLy8gfQoKICAubm9kZSAubGFiZWwgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KICAubm9kZS5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogIH0KCiAgLmFycm93aGVhZFBhdGggewogICAgZmlsbDogJHtpLmFycm93aGVhZENvbG9yfTsKICB9CgogIC5lZGdlUGF0aCAucGF0aCB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyLjBweDsKICB9CgogIC5mbG93Y2hhcnQtbGluayB7CiAgICBzdHJva2U6ICR7aS5saW5lQ29sb3J9OwogICAgZmlsbDogbm9uZTsKICB9CgogIC5lZGdlTGFiZWwgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgcmVjdCB7CiAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtpLmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgICBmaWxsOiAke2kuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICB9CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQoKICAvKiBGb3IgaHRtbCBsYWJlbHMgb25seSAqLwogIC5sYWJlbEJrZyB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2pKKGkuZWRnZUxhYmVsQmFja2dyb3VuZCwuNSl9OwogICAgLy8gYmFja2dyb3VuZC1jb2xvcjoKICB9CgogIC5ub2RlIC5jbHVzdGVyIHsKICAgIC8vIGZpbGw6ICR7akooaS5tYWluQmtnLC41KX07CiAgICBmaWxsOiAke2pKKGkuY2x1c3RlckJrZywuNSl9OwogICAgc3Ryb2tlOiAke2pKKGkuY2x1c3RlckJvcmRlciwuMil9OwogICAgYm94LXNoYWRvdzogcmdiYSg1MCwgNTAsIDkzLCAwLjI1KSAwcHggMTNweCAyN3B4IC01cHgsIHJnYmEoMCwgMCwgMCwgMC4zKSAwcHggOHB4IDE2cHggLThweDsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCiAgLmNsdXN0ZXIgdGV4dCB7CiAgICBmaWxsOiAke2kudGl0bGVDb2xvcn07CiAgfQoKICAuY2x1c3RlciBzcGFuLHAgewogICAgY29sb3I6ICR7aS50aXRsZUNvbG9yfTsKICB9CiAgLyogLmNsdXN0ZXIgZGl2IHsKICAgIGNvbG9yOiAke2kudGl0bGVDb2xvcn07CiAgfSAqLwoKICBkaXYubWVybWFpZFRvb2x0aXAgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgbWF4LXdpZHRoOiAyMDBweDsKICAgIHBhZGRpbmc6IDJweDsKICAgIGZvbnQtZmFtaWx5OiAke2kuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6IDEycHg7CiAgICBiYWNrZ3JvdW5kOiAke2kudGVydGlhcnlDb2xvcn07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2kuYm9yZGVyMn07CiAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDEwMDsKICB9CgogIC5mbG93Y2hhcnRUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7aS50ZXh0Q29sb3J9OwogIH0KYDtmdW5jdGlvbiBOV2UoaSxzLHU9ITEpe3ZhciBSLEYsajtjb25zdCBkPWk7bGV0IHA9ImRlZmF1bHQiOygoKFI9ZD09bnVsbD92b2lkIDA6ZC5jbGFzc2VzKT09bnVsbD92b2lkIDA6Ui5sZW5ndGgpfHwwKT4wJiYocD0oKGQ9PW51bGw/dm9pZCAwOmQuY2xhc3Nlcyl8fFtdKS5qb2luKCIgIikpLHA9cCsiIGZsb3djaGFydC1sYWJlbCI7bGV0IHY9MCxiPSIiLHk7c3dpdGNoKGQudHlwZSl7Y2FzZSJyb3VuZCI6dj01LGI9InJlY3QiO2JyZWFrO2Nhc2UiY29tcG9zaXRlIjp2PTAsYj0iY29tcG9zaXRlIix5PTA7YnJlYWs7Y2FzZSJzcXVhcmUiOmI9InJlY3QiO2JyZWFrO2Nhc2UiZGlhbW9uZCI6Yj0icXVlc3Rpb24iO2JyZWFrO2Nhc2UiaGV4YWdvbiI6Yj0iaGV4YWdvbiI7YnJlYWs7Y2FzZSJibG9ja19hcnJvdyI6Yj0iYmxvY2tfYXJyb3ciO2JyZWFrO2Nhc2Uib2RkIjpiPSJyZWN0X2xlZnRfaW52X2Fycm93IjticmVhaztjYXNlImxlYW5fcmlnaHQiOmI9ImxlYW5fcmlnaHQiO2JyZWFrO2Nhc2UibGVhbl9sZWZ0IjpiPSJsZWFuX2xlZnQiO2JyZWFrO2Nhc2UidHJhcGV6b2lkIjpiPSJ0cmFwZXpvaWQiO2JyZWFrO2Nhc2UiaW52X3RyYXBlem9pZCI6Yj0iaW52X3RyYXBlem9pZCI7YnJlYWs7Y2FzZSJyZWN0X2xlZnRfaW52X2Fycm93IjpiPSJyZWN0X2xlZnRfaW52X2Fycm93IjticmVhaztjYXNlImNpcmNsZSI6Yj0iY2lyY2xlIjticmVhaztjYXNlImVsbGlwc2UiOmI9ImVsbGlwc2UiO2JyZWFrO2Nhc2Uic3RhZGl1bSI6Yj0ic3RhZGl1bSI7YnJlYWs7Y2FzZSJzdWJyb3V0aW5lIjpiPSJzdWJyb3V0aW5lIjticmVhaztjYXNlImN5bGluZGVyIjpiPSJjeWxpbmRlciI7YnJlYWs7Y2FzZSJncm91cCI6Yj0icmVjdCI7YnJlYWs7Y2FzZSJkb3VibGVjaXJjbGUiOmI9ImRvdWJsZWNpcmNsZSI7YnJlYWs7ZGVmYXVsdDpiPSJyZWN0In1jb25zdCBUPW9tKChkPT1udWxsP3ZvaWQgMDpkLnN0eWxlcyl8fFtdKSxfPWQubGFiZWwsQT1kLnNpemV8fHt3aWR0aDowLGhlaWdodDowLHg6MCx5OjB9O3JldHVybntsYWJlbFN0eWxlOlQubGFiZWxTdHlsZSxzaGFwZTpiLGxhYmVsVGV4dDpfLHJ4OnYscnk6dixjbGFzczpwLHN0eWxlOlQuc3R5bGUsaWQ6ZC5pZCxkaXJlY3Rpb25zOmQuZGlyZWN0aW9ucyx3aWR0aDpBLndpZHRoLGhlaWdodDpBLmhlaWdodCx4OkEueCx5OkEueSxwb3NpdGlvbmVkOnUsaW50ZXJzZWN0OnZvaWQgMCx0eXBlOmQudHlwZSxwYWRkaW5nOnk/PygoKGo9KEY9VmgoKSk9PW51bGw/dm9pZCAwOkYuYmxvY2spPT1udWxsP3ZvaWQgMDpqLnBhZGRpbmcpfHwwKX19YXN5bmMgZnVuY3Rpb24ga2NuKGkscyx1KXtjb25zdCBkPU5XZShzLHUsITEpO2lmKGQudHlwZT09PSJncm91cCIpcmV0dXJuO2NvbnN0IHA9YXdhaXQgdEooaSxkKSx2PXAubm9kZSgpLmdldEJCb3goKSxiPXUuZ2V0QmxvY2soZC5pZCk7Yi5zaXplPXt3aWR0aDp2LndpZHRoLGhlaWdodDp2LmhlaWdodCx4OjAseTowLG5vZGU6cH0sdS5zZXRCbG9jayhiKSxwLnJlbW92ZSgpfWFzeW5jIGZ1bmN0aW9uIEVjbihpLHMsdSl7Y29uc3QgZD1OV2Uocyx1LCEwKTt1LmdldEJsb2NrKGQuaWQpLnR5cGUhPT0ic3BhY2UiJiYoYXdhaXQgdEooaSxkKSxzLmludGVyc2VjdD1kPT1udWxsP3ZvaWQgMDpkLmludGVyc2VjdCwkbWUoZCkpfWFzeW5jIGZ1bmN0aW9uIGR3ZShpLHMsdSxkKXtmb3IoY29uc3QgcCBvZiBzKWF3YWl0IGQoaSxwLHUpLHAuY2hpbGRyZW4mJmF3YWl0IGR3ZShpLHAuY2hpbGRyZW4sdSxkKX1hc3luYyBmdW5jdGlvbiBUY24oaSxzLHUpe2F3YWl0IGR3ZShpLHMsdSxrY24pfWFzeW5jIGZ1bmN0aW9uIENjbihpLHMsdSl7YXdhaXQgZHdlKGkscyx1LEVjbil9YXN5bmMgZnVuY3Rpb24gU2NuKGkscyx1LGQscCl7Y29uc3Qgdj1uZXcgQjAoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KTt2LnNldEdyYXBoKHtyYW5rZGlyOiJUQiIsbm9kZXNlcDoxMCxyYW5rc2VwOjEwLG1hcmdpbng6OCxtYXJnaW55Ojh9KTtmb3IoY29uc3QgYiBvZiB1KWIuc2l6ZSYmdi5zZXROb2RlKGIuaWQse3dpZHRoOmIuc2l6ZS53aWR0aCxoZWlnaHQ6Yi5zaXplLmhlaWdodCxpbnRlcnNlY3Q6Yi5pbnRlcnNlY3R9KTtmb3IoY29uc3QgYiBvZiBzKWlmKGIuc3RhcnQmJmIuZW5kKXtjb25zdCB5PWQuZ2V0QmxvY2soYi5zdGFydCksVD1kLmdldEJsb2NrKGIuZW5kKTtpZih5IT1udWxsJiZ5LnNpemUmJihUIT1udWxsJiZULnNpemUpKXtjb25zdCBfPXkuc2l6ZSxBPVQuc2l6ZSxQPVt7eDpfLngseTpfLnl9LHt4Ol8ueCsoQS54LV8ueCkvMix5Ol8ueSsoQS55LV8ueSkvMn0se3g6QS54LHk6QS55fV07YXdhaXQgSVVlKGkse3Y6Yi5zdGFydCx3OmIuZW5kLG5hbWU6Yi5pZH0sey4uLmIsYXJyb3dUeXBlRW5kOmIuYXJyb3dUeXBlRW5kLGFycm93VHlwZVN0YXJ0OmIuYXJyb3dUeXBlU3RhcnQscG9pbnRzOlAsY2xhc3NlczoiZWRnZS10aGlja25lc3Mtbm9ybWFsIGVkZ2UtcGF0dGVybi1zb2xpZCBmbG93Y2hhcnQtbGluayBMUy1hMSBMRS1iMSJ9LHZvaWQgMCwiYmxvY2siLHYscCksYi5sYWJlbCYmKGF3YWl0IHptZShpLHsuLi5iLGxhYmVsOmIubGFiZWwsbGFiZWxTdHlsZToic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZTsiLGFycm93VHlwZUVuZDpiLmFycm93VHlwZUVuZCxhcnJvd1R5cGVTdGFydDpiLmFycm93VHlwZVN0YXJ0LHBvaW50czpQLGNsYXNzZXM6ImVkZ2UtdGhpY2tuZXNzLW5vcm1hbCBlZGdlLXBhdHRlcm4tc29saWQgZmxvd2NoYXJ0LWxpbmsgTFMtYTEgTEUtYjEifSksYXdhaXQgTVVlKHsuLi5iLHg6UFsxXS54LHk6UFsxXS55fSx7b3JpZ2luYWxQYXRoOlB9KSl9fX1jb25zdCBlMD0oKFJXZT0oRldlPXF0KCkpPT1udWxsP3ZvaWQgMDpGV2UuYmxvY2spPT1udWxsP3ZvaWQgMDpSV2UucGFkZGluZyl8fDg7ZnVuY3Rpb24gX2NuKGkscyl7aWYoaT09PTB8fCFOdW1iZXIuaXNJbnRlZ2VyKGkpKXRocm93IG5ldyBFcnJvcigiQ29sdW1ucyBtdXN0IGJlIGFuIGludGVnZXIgIT09IDAuIik7aWYoczwwfHwhTnVtYmVyLmlzSW50ZWdlcihzKSl0aHJvdyBuZXcgRXJyb3IoIlBvc2l0aW9uIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlci4iK3MpO2lmKGk8MClyZXR1cm57cHg6cyxweTowfTtpZihpPT09MSlyZXR1cm57cHg6MCxweTpzfTtjb25zdCB1PXMlaSxkPU1hdGguZmxvb3Iocy9pKTtyZXR1cm57cHg6dSxweTpkfX1jb25zdCBBY249aT0+e2xldCBzPTAsdT0wO2Zvcihjb25zdCBkIG9mIGkuY2hpbGRyZW4pe2NvbnN0e3dpZHRoOnAsaGVpZ2h0OnYseDpiLHl9PWQuc2l6ZXx8e3dpZHRoOjAsaGVpZ2h0OjAseDowLHk6MH07WGUuZGVidWcoImdldE1heENoaWxkU2l6ZSBhYmM5NSBjaGlsZDoiLGQuaWQsIndpZHRoOiIscCwiaGVpZ2h0OiIsdiwieDoiLGIsInk6Iix5LGQudHlwZSksZC50eXBlIT09InNwYWNlIiYmKHA+cyYmKHM9cC8oaS53aWR0aEluQ29sdW1uc3x8MSkpLHY+dSYmKHU9dikpfXJldHVybnt3aWR0aDpzLGhlaWdodDp1fX07ZnVuY3Rpb24gZ3dlKGkscyx1PTAsZD0wKXt2YXIgYix5LFQsXyxBLFAsUixGLGosSyxlZTtYZS5kZWJ1Zygic2V0QmxvY2tTaXplcyBhYmM5NSAoc3RhcnQpIixpLmlkLChiPWk9PW51bGw/dm9pZCAwOmkuc2l6ZSk9PW51bGw/dm9pZCAwOmIueCwiYmxvY2sgd2lkdGggPSIsaT09bnVsbD92b2lkIDA6aS5zaXplLCJzaWVibGluZ1dpZHRoIix1KSwoeT1pPT1udWxsP3ZvaWQgMDppLnNpemUpIT1udWxsJiZ5LndpZHRofHwoaS5zaXplPXt3aWR0aDp1LGhlaWdodDpkLHg6MCx5OjB9KTtsZXQgcD0wLHY9MDtpZigoKFQ9aS5jaGlsZHJlbik9PW51bGw/dm9pZCAwOlQubGVuZ3RoKT4wKXtmb3IoY29uc3QgZGUgb2YgaS5jaGlsZHJlbilnd2UoZGUscyk7Y29uc3QgaWU9QWNuKGkpO3A9aWUud2lkdGgsdj1pZS5oZWlnaHQsWGUuZGVidWcoInNldEJsb2NrU2l6ZXMgYWJjOTUgbWF4V2lkdGggb2YiLGkuaWQsIjpzIGNoaWxkcmVuIGlzICIscCx2KTtmb3IoY29uc3QgZGUgb2YgaS5jaGlsZHJlbilkZS5zaXplJiYoWGUuZGVidWcoYGFiYzk1IFNldHRpbmcgc2l6ZSBvZiBjaGlsZHJlbiBvZiAke2kuaWR9IGlkPSR7ZGUuaWR9ICR7cH0gJHt2fSAke2RlLnNpemV9YCksZGUuc2l6ZS53aWR0aD1wKihkZS53aWR0aEluQ29sdW1uc3x8MSkrZTAqKChkZS53aWR0aEluQ29sdW1uc3x8MSktMSksZGUuc2l6ZS5oZWlnaHQ9dixkZS5zaXplLng9MCxkZS5zaXplLnk9MCxYZS5kZWJ1ZyhgYWJjOTUgdXBkYXRpbmcgc2l6ZSBvZiAke2kuaWR9IGNoaWxkcmVuIGNoaWxkOiR7ZGUuaWR9IG1heFdpZHRoOiR7cH0gbWF4SGVpZ2h0OiR7dn1gKSk7Zm9yKGNvbnN0IGRlIG9mIGkuY2hpbGRyZW4pZ3dlKGRlLHMscCx2KTtjb25zdCBvZT1pLmNvbHVtbnN8fC0xO2xldCBwZT0wO2Zvcihjb25zdCBkZSBvZiBpLmNoaWxkcmVuKXBlKz1kZS53aWR0aEluQ29sdW1uc3x8MTtsZXQgYmU9aS5jaGlsZHJlbi5sZW5ndGg7b2U+MCYmb2U8cGUmJihiZT1vZSksaS53aWR0aEluQ29sdW1ucztjb25zdCBhZT1NYXRoLmNlaWwocGUvYmUpO2xldCBuZT1iZSoocCtlMCkrZTAsc2U9YWUqKHYrZTApK2UwO2lmKG5lPHUpe1hlLmRlYnVnKGBEZXRlY3RlZCB0byBzbWFsbCBzaWVibGluZzogYWJjOTUgJHtpLmlkfSBzaWVibGluZ1dpZHRoICR7dX0gc2llYmxpbmdIZWlnaHQgJHtkfSB3aWR0aCAke25lfWApLG5lPXUsc2U9ZDtjb25zdCBkZT0odS1iZSplMC1lMCkvYmUsWD0oZC1hZSplMC1lMCkvYWU7WGUuZGVidWcoIlNpemUgaW5kYXRhIGFiYzg4IixpLmlkLCJjaGlsZFdpZHRoIixkZSwibWF4V2lkdGgiLHApLFhlLmRlYnVnKCJTaXplIGluZGF0YSBhYmM4OCIsaS5pZCwiY2hpbGRIZWlnaHQiLFgsIm1heEhlaWdodCIsdiksWGUuZGVidWcoIlNpemUgaW5kYXRhIGFiYzg4IHhTaXplIixiZSwicGFkZGluZyIsZTApO2Zvcihjb25zdCBnZSBvZiBpLmNoaWxkcmVuKWdlLnNpemUmJihnZS5zaXplLndpZHRoPWRlLGdlLnNpemUuaGVpZ2h0PVgsZ2Uuc2l6ZS54PTAsZ2Uuc2l6ZS55PTApfWlmKFhlLmRlYnVnKGBhYmM5NSAoZmluYWxlIGNhbGMpICR7aS5pZH0geFNpemUgJHtiZX0geVNpemUgJHthZX0gY29sdW1ucyAke29lfSR7aS5jaGlsZHJlbi5sZW5ndGh9IHdpZHRoPSR7TWF0aC5tYXgobmUsKChfPWkuc2l6ZSk9PW51bGw/dm9pZCAwOl8ud2lkdGgpfHwwKX1gKSxuZTwoKChBPWk9PW51bGw/dm9pZCAwOmkuc2l6ZSk9PW51bGw/dm9pZCAwOkEud2lkdGgpfHwwKSl7bmU9KChQPWk9PW51bGw/dm9pZCAwOmkuc2l6ZSk9PW51bGw/dm9pZCAwOlAud2lkdGgpfHwwO2NvbnN0IGRlPW9lPjA/TWF0aC5taW4oaS5jaGlsZHJlbi5sZW5ndGgsb2UpOmkuY2hpbGRyZW4ubGVuZ3RoO2lmKGRlPjApe2NvbnN0IFg9KG5lLWRlKmUwLWUwKS9kZTtYZS5kZWJ1ZygiYWJjOTUgKGdyb3dpbmcgdG8gZml0KSB3aWR0aCIsaS5pZCxuZSwoUj1pLnNpemUpPT1udWxsP3ZvaWQgMDpSLndpZHRoLFgpO2Zvcihjb25zdCBnZSBvZiBpLmNoaWxkcmVuKWdlLnNpemUmJihnZS5zaXplLndpZHRoPVgpfX1pLnNpemU9e3dpZHRoOm5lLGhlaWdodDpzZSx4OjAseTowfX1YZS5kZWJ1Zygic2V0QmxvY2tTaXplcyBhYmM5NCAoZG9uZSkiLGkuaWQsKEY9aT09bnVsbD92b2lkIDA6aS5zaXplKT09bnVsbD92b2lkIDA6Ri54LChqPWk9PW51bGw/dm9pZCAwOmkuc2l6ZSk9PW51bGw/dm9pZCAwOmoud2lkdGgsKEs9aT09bnVsbD92b2lkIDA6aS5zaXplKT09bnVsbD92b2lkIDA6Sy55LChlZT1pPT1udWxsP3ZvaWQgMDppLnNpemUpPT1udWxsP3ZvaWQgMDplZS5oZWlnaHQpfWZ1bmN0aW9uIFBXZShpLHMpe3ZhciBkLHAsdixiLHksVCxfLEEsUCxSLEYsaixLLGVlLGllLG9lLHBlO1hlLmRlYnVnKGBhYmM4NSBsYXlvdXQgYmxvY2tzICg9PmxheW91dEJsb2NrcykgJHtpLmlkfSB4OiAkeyhkPWk9PW51bGw/dm9pZCAwOmkuc2l6ZSk9PW51bGw/dm9pZCAwOmQueH0geTogJHsocD1pPT1udWxsP3ZvaWQgMDppLnNpemUpPT1udWxsP3ZvaWQgMDpwLnl9IHdpZHRoOiAkeyh2PWk9PW51bGw/dm9pZCAwOmkuc2l6ZSk9PW51bGw/dm9pZCAwOnYud2lkdGh9YCk7Y29uc3QgdT1pLmNvbHVtbnN8fC0xO2lmKFhlLmRlYnVnKCJsYXlvdXRCbG9ja3MgY29sdW1ucyBhYmM5NSIsaS5pZCwiPT4iLHUsaSksaS5jaGlsZHJlbiYmaS5jaGlsZHJlbi5sZW5ndGg+MCl7Y29uc3QgYmU9KCh5PShiPWk9PW51bGw/dm9pZCAwOmkuY2hpbGRyZW5bMF0pPT1udWxsP3ZvaWQgMDpiLnNpemUpPT1udWxsP3ZvaWQgMDp5LndpZHRoKXx8MCxhZT1pLmNoaWxkcmVuLmxlbmd0aCpiZSsoaS5jaGlsZHJlbi5sZW5ndGgtMSkqZTA7WGUuZGVidWcoIndpZHRoT2ZDaGlsZHJlbiA4OCIsYWUsInBvc1giKTtsZXQgbmU9MDtYZS5kZWJ1ZygiYWJjOTEgYmxvY2s/LnNpemU/LngiLGkuaWQsKFQ9aT09bnVsbD92b2lkIDA6aS5zaXplKT09bnVsbD92b2lkIDA6VC54KTtsZXQgc2U9KF89aT09bnVsbD92b2lkIDA6aS5zaXplKSE9bnVsbCYmXy54PygoQT1pPT1udWxsP3ZvaWQgMDppLnNpemUpPT1udWxsP3ZvaWQgMDpBLngpKygtKChQPWk9PW51bGw/dm9pZCAwOmkuc2l6ZSk9PW51bGw/dm9pZCAwOlAud2lkdGgpLzJ8fDApOi1lMCxkZT0wO2Zvcihjb25zdCBYIG9mIGkuY2hpbGRyZW4pe2NvbnN0IGdlPWk7aWYoIVguc2l6ZSljb250aW51ZTtjb25zdHt3aWR0aDpXLGhlaWdodDp4ZX09WC5zaXplLHtweDpVLHB5OkZlfT1fY24odSxuZSk7aWYoRmUhPWRlJiYoZGU9RmUsc2U9KFI9aT09bnVsbD92b2lkIDA6aS5zaXplKSE9bnVsbCYmUi54PygoRj1pPT1udWxsP3ZvaWQgMDppLnNpemUpPT1udWxsP3ZvaWQgMDpGLngpKygtKChqPWk9PW51bGw/dm9pZCAwOmkuc2l6ZSk9PW51bGw/dm9pZCAwOmoud2lkdGgpLzJ8fDApOi1lMCxYZS5kZWJ1ZygiTmV3IHJvdyBpbiBsYXlvdXQgZm9yIGJsb2NrIixpLmlkLCIgYW5kIGNoaWxkICIsWC5pZCxkZSkpLFhlLmRlYnVnKGBhYmM4OSBsYXlvdXQgYmxvY2tzIChjaGlsZCkgaWQ6ICR7WC5pZH0gUG9zOiAke25lfSAocHgsIHB5KSAke1V9LCR7RmV9ICgkeyhLPWdlPT1udWxsP3ZvaWQgMDpnZS5zaXplKT09bnVsbD92b2lkIDA6Sy54fSwkeyhlZT1nZT09bnVsbD92b2lkIDA6Z2Uuc2l6ZSk9PW51bGw/dm9pZCAwOmVlLnl9KSBwYXJlbnQ6ICR7Z2UuaWR9IHdpZHRoOiAke1d9JHtlMH1gKSxnZS5zaXplKXtjb25zdCBQZT1XLzI7WC5zaXplLng9c2UrZTArUGUsWGUuZGVidWcoYGFiYzkxIGxheW91dCBibG9ja3MgKGNhbGMpIHB4LCBweWlkOiR7WC5pZH0gc3RhcnRpbmdQb3M9WCR7c2V9IG5ldyBzdGFydGluZ1Bvc1gke1guc2l6ZS54fSAke1BlfSBwYWRkaW5nPSR7ZTB9IHdpZHRoPSR7V30gaGFsZldpZHRoPSR7UGV9ID0+IHg6JHtYLnNpemUueH0geToke1guc2l6ZS55fSAke1gud2lkdGhJbkNvbHVtbnN9ICh3aWR0aCAqIChjaGlsZD8udyB8fCAxKSkgLyAyICR7VyooKFg9PW51bGw/dm9pZCAwOlgud2lkdGhJbkNvbHVtbnMpfHwxKS8yfWApLHNlPVguc2l6ZS54K1BlLFguc2l6ZS55PWdlLnNpemUueS1nZS5zaXplLmhlaWdodC8yK0ZlKih4ZStlMCkreGUvMitlMCxYZS5kZWJ1ZyhgYWJjODggbGF5b3V0IGJsb2NrcyAoY2FsYykgcHgsIHB5aWQ6JHtYLmlkfXN0YXJ0aW5nUG9zWCR7c2V9JHtlMH0ke1BlfT0+eDoke1guc2l6ZS54fXk6JHtYLnNpemUueX0ke1gud2lkdGhJbkNvbHVtbnN9KHdpZHRoICogKGNoaWxkPy53IHx8IDEpKSAvIDIke1cqKChYPT1udWxsP3ZvaWQgMDpYLndpZHRoSW5Db2x1bW5zKXx8MSkvMn1gKX1YLmNoaWxkcmVuJiZQV2UoWCksbmUrPShYPT1udWxsP3ZvaWQgMDpYLndpZHRoSW5Db2x1bW5zKXx8MSxYZS5kZWJ1ZygiYWJjODggY29sdW1uc1BvcyIsWCxuZSl9fVhlLmRlYnVnKGBsYXlvdXQgYmxvY2tzICg8PT1sYXlvdXRCbG9ja3MpICR7aS5pZH0geDogJHsoaWU9aT09bnVsbD92b2lkIDA6aS5zaXplKT09bnVsbD92b2lkIDA6aWUueH0geTogJHsob2U9aT09bnVsbD92b2lkIDA6aS5zaXplKT09bnVsbD92b2lkIDA6b2UueX0gd2lkdGg6ICR7KHBlPWk9PW51bGw/dm9pZCAwOmkuc2l6ZSk9PW51bGw/dm9pZCAwOnBlLndpZHRofWApfWZ1bmN0aW9uIEJXZShpLHttaW5YOnMsbWluWTp1LG1heFg6ZCxtYXhZOnB9PXttaW5YOjAsbWluWTowLG1heFg6MCxtYXhZOjB9KXtpZihpLnNpemUmJmkuaWQhPT0icm9vdCIpe2NvbnN0e3g6dix5OmIsd2lkdGg6eSxoZWlnaHQ6VH09aS5zaXplO3YteS8yPHMmJihzPXYteS8yKSxiLVQvMjx1JiYodT1iLVQvMiksdit5LzI+ZCYmKGQ9dit5LzIpLGIrVC8yPnAmJihwPWIrVC8yKX1pZihpLmNoaWxkcmVuKWZvcihjb25zdCB2IG9mIGkuY2hpbGRyZW4pKHttaW5YOnMsbWluWTp1LG1heFg6ZCxtYXhZOnB9PUJXZSh2LHttaW5YOnMsbWluWTp1LG1heFg6ZCxtYXhZOnB9KSk7cmV0dXJue21pblg6cyxtaW5ZOnUsbWF4WDpkLG1heFk6cH19ZnVuY3Rpb24gTGNuKGkpe2NvbnN0IHM9aS5nZXRCbG9jaygicm9vdCIpO2lmKCFzKXJldHVybjtnd2UocyxpLDAsMCksUFdlKHMpLFhlLmRlYnVnKCJnZXRCbG9ja3MiLEpTT04uc3RyaW5naWZ5KHMsbnVsbCwyKSk7Y29uc3R7bWluWDp1LG1pblk6ZCxtYXhYOnAsbWF4WTp2fT1CV2UocyksYj12LWQseT1wLXU7cmV0dXJue3g6dSx5OmQsd2lkdGg6eSxoZWlnaHQ6Yn19Y29uc3QgTWNuPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxkaWFncmFtOntwYXJzZXI6dWNuLGRiOnljbixyZW5kZXJlcjp7ZHJhdzphc3luYyBmdW5jdGlvbihpLHMsdSxkKXtjb25zdHtzZWN1cml0eUxldmVsOnAsYmxvY2s6dn09VmgoKSxiPWQuZGI7bGV0IHk7cD09PSJzYW5kYm94IiYmKHk9SXIoIiNpIitzKSk7Y29uc3QgVD1JcihwPT09InNhbmRib3giP3kubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keToiYm9keSIpLF89cD09PSJzYW5kYm94Ij9ULnNlbGVjdChgW2lkPSIke3N9Il1gKTpJcihgW2lkPSIke3N9Il1gKTtTbWUoXyxbInBvaW50IiwiY2lyY2xlIiwiY3Jvc3MiXSxkLnR5cGUscyk7Y29uc3QgUD1iLmdldEJsb2NrcygpLFI9Yi5nZXRCbG9ja3NGbGF0KCksRj1iLmdldEVkZ2VzKCksaj1fLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiYmxvY2siKTthd2FpdCBUY24oaixQLGIpO2NvbnN0IEs9TGNuKGIpO2lmKGF3YWl0IENjbihqLFAsYiksYXdhaXQgU2NuKGosRixSLGIscyksSyl7Y29uc3QgZWU9SyxpZT1NYXRoLm1heCgxLE1hdGgucm91bmQoLjEyNSooZWUud2lkdGgvZWUuaGVpZ2h0KSkpLG9lPWVlLmhlaWdodCtpZSsxMCxwZT1lZS53aWR0aCsxMCx7dXNlTWF4V2lkdGg6YmV9PXY7TmcoXyxvZSxwZSwhIWJlKSxYZS5kZWJ1ZygiSGVyZSBCb3VuZHMiLEssZWUpLF8uYXR0cigidmlld0JveCIsYCR7ZWUueC01fSAke2VlLnktNX0gJHtlZS53aWR0aCsxMH0gJHtlZS5oZWlnaHQrMTB9YCl9X0YoekZlKX0sZ2V0Q2xhc3NlczpmdW5jdGlvbihpLHMpe3JldHVybiBzLmRiLmdldENsYXNzZXMoKX19LHN0eWxlczp4Y259fSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3JldHVybiB1bX0pOwo=`; \ No newline at end of file +module.exports = `InVzZSBzdHJpY3QiO3ZhciBfX2VzYnVpbGRfZXNtX21lcm1haWQ9KCgpPT57dmFyIGl4ZT1PYmplY3QuY3JlYXRlO3ZhciBaMT1PYmplY3QuZGVmaW5lUHJvcGVydHk7dmFyIGF4ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO3ZhciBzeGU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7dmFyIG94ZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsbHhlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIG89KHQsZSk9PloxKHQsIm5hbWUiLHt2YWx1ZTplLGNvbmZpZ3VyYWJsZTohMH0pO3ZhciBNPSh0LGUpPT4oKT0+KHQmJihlPXQodD0wKSksZSk7dmFyIEVpPSh0LGUpPT4oKT0+KGV8fHQoKGU9e2V4cG9ydHM6e319KS5leHBvcnRzLGUpLGUuZXhwb3J0cyksdnI9KHQsZSk9Pntmb3IodmFyIHIgaW4gZSlaMSh0LHIse2dldDplW3JdLGVudW1lcmFibGU6ITB9KX0sJGI9KHQsZSxyLG4pPT57aWYoZSYmdHlwZW9mIGU9PSJvYmplY3QifHx0eXBlb2YgZT09ImZ1bmN0aW9uIilmb3IobGV0IGkgb2Ygc3hlKGUpKSFseGUuY2FsbCh0LGkpJiZpIT09ciYmWjEodCxpLHtnZXQ6KCk9PmVbaV0sZW51bWVyYWJsZTohKG49YXhlKGUsaSkpfHxuLmVudW1lcmFibGV9KTtyZXR1cm4gdH0sU3I9KHQsZSxyKT0+KCRiKHQsZSwiZGVmYXVsdCIpLHImJiRiKHIsZSwiZGVmYXVsdCIpKSxKaT0odCxlLHIpPT4ocj10IT1udWxsP2l4ZShveGUodCkpOnt9LCRiKGV8fCF0fHwhdC5fX2VzTW9kdWxlP1oxKHIsImRlZmF1bHQiLHt2YWx1ZTp0LGVudW1lcmFibGU6ITB9KTpyLHQpKSxjeGU9dD0+JGIoWjEoe30sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQpO3ZhciBWYj1FaSgoX1MsTFMpPT57InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0LGUpe3R5cGVvZiBfUz09Im9iamVjdCImJnR5cGVvZiBMUzwidSI/TFMuZXhwb3J0cz1lKCk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoZSk6KHQ9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHx8c2VsZikuZGF5anM9ZSgpfSkoX1MsZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQ9MWUzLGU9NmU0LHI9MzZlNSxuPSJtaWxsaXNlY29uZCIsaT0ic2Vjb25kIixhPSJtaW51dGUiLHM9ImhvdXIiLGw9ImRheSIsdT0id2VlayIsaD0ibW9udGgiLGY9InF1YXJ0ZXIiLGQ9InllYXIiLHA9ImRhdGUiLG09IkludmFsaWQgRGF0ZSIsZz0vXihcZHs0fSlbLS9dPyhcZHsxLDJ9KT9bLS9dPyhcZHswLDJ9KVtUdFxzXSooXGR7MSwyfSk/Oj8oXGR7MSwyfSk/Oj8oXGR7MSwyfSk/Wy46XT8oXGQrKT8kLyx5PS9cWyhbXlxdXSspXXxZezEsNH18TXsxLDR9fER7MSwyfXxkezEsNH18SHsxLDJ9fGh7MSwyfXxhfEF8bXsxLDJ9fHN7MSwyfXxaezEsMn18U1NTL2csdj17bmFtZToiZW4iLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSxtb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksb3JkaW5hbDpvKGZ1bmN0aW9uKGspe3ZhciBSPVsidGgiLCJzdCIsIm5kIiwicmQiXSxDPWslMTAwO3JldHVybiJbIitrKyhSWyhDLTIwKSUxMF18fFJbQ118fFJbMF0pKyJdIn0sIm9yZGluYWwiKX0seD1vKGZ1bmN0aW9uKGssUixDKXt2YXIgTz1TdHJpbmcoayk7cmV0dXJuIU98fE8ubGVuZ3RoPj1SP2s6IiIrQXJyYXkoUisxLU8ubGVuZ3RoKS5qb2luKEMpK2t9LCJtIiksYj17czp4LHo6byhmdW5jdGlvbihrKXt2YXIgUj0tay51dGNPZmZzZXQoKSxDPU1hdGguYWJzKFIpLE89TWF0aC5mbG9vcihDLzYwKSxOPUMlNjA7cmV0dXJuKFI8PTA/IisiOiItIikreChPLDIsIjAiKSsiOiIreChOLDIsIjAiKX0sInoiKSxtOm8oZnVuY3Rpb24gayhSLEMpe2lmKFIuZGF0ZSgpPEMuZGF0ZSgpKXJldHVybi1rKEMsUik7dmFyIE89MTIqKEMueWVhcigpLVIueWVhcigpKSsoQy5tb250aCgpLVIubW9udGgoKSksTj1SLmNsb25lKCkuYWRkKE8saCksUD1DLU48MCxGPVIuY2xvbmUoKS5hZGQoTysoUD8tMToxKSxoKTtyZXR1cm4rKC0oTysoQy1OKS8oUD9OLUY6Ri1OKSl8fDApfSwidCIpLGE6byhmdW5jdGlvbihrKXtyZXR1cm4gazwwP01hdGguY2VpbChrKXx8MDpNYXRoLmZsb29yKGspfSwiYSIpLHA6byhmdW5jdGlvbihrKXtyZXR1cm57TTpoLHk6ZCx3OnUsZDpsLEQ6cCxoOnMsbTphLHM6aSxtczpuLFE6Zn1ba118fFN0cmluZyhrfHwiIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9zJC8sIiIpfSwicCIpLHU6byhmdW5jdGlvbihrKXtyZXR1cm4gaz09PXZvaWQgMH0sInUiKX0sdz0iZW4iLF89e307X1t3XT12O3ZhciBUPSIkaXNEYXlqc09iamVjdCIsRT1vKGZ1bmN0aW9uKGspe3JldHVybiBrIGluc3RhbmNlb2YgSXx8ISgha3x8IWtbVF0pfSwiUyIpLEw9byhmdW5jdGlvbiBrKFIsQyxPKXt2YXIgTjtpZighUilyZXR1cm4gdztpZih0eXBlb2YgUj09InN0cmluZyIpe3ZhciBQPVIudG9Mb3dlckNhc2UoKTtfW1BdJiYoTj1QKSxDJiYoX1tQXT1DLE49UCk7dmFyIEY9Ui5zcGxpdCgiLSIpO2lmKCFOJiZGLmxlbmd0aD4xKXJldHVybiBrKEZbMF0pfWVsc2V7dmFyIEI9Ui5uYW1lO19bQl09UixOPUJ9cmV0dXJuIU8mJk4mJih3PU4pLE58fCFPJiZ3fSwidCIpLFM9byhmdW5jdGlvbihrLFIpe2lmKEUoaykpcmV0dXJuIGsuY2xvbmUoKTt2YXIgQz10eXBlb2YgUj09Im9iamVjdCI/Ujp7fTtyZXR1cm4gQy5kYXRlPWssQy5hcmdzPWFyZ3VtZW50cyxuZXcgSShDKX0sIk8iKSxBPWI7QS5sPUwsQS5pPUUsQS53PWZ1bmN0aW9uKGssUil7cmV0dXJuIFMoayx7bG9jYWxlOlIuJEwsdXRjOlIuJHUseDpSLiR4LCRvZmZzZXQ6Ui4kb2Zmc2V0fSl9O3ZhciBJPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gayhDKXt0aGlzLiRMPUwoQy5sb2NhbGUsbnVsbCwhMCksdGhpcy5wYXJzZShDKSx0aGlzLiR4PXRoaXMuJHh8fEMueHx8e30sdGhpc1tUXT0hMH1vKGssIk0iKTt2YXIgUj1rLnByb3RvdHlwZTtyZXR1cm4gUi5wYXJzZT1mdW5jdGlvbihDKXt0aGlzLiRkPWZ1bmN0aW9uKE8pe3ZhciBOPU8uZGF0ZSxQPU8udXRjO2lmKE49PT1udWxsKXJldHVybiBuZXcgRGF0ZShOYU4pO2lmKEEudShOKSlyZXR1cm4gbmV3IERhdGU7aWYoTiBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBEYXRlKE4pO2lmKHR5cGVvZiBOPT0ic3RyaW5nIiYmIS9aJC9pLnRlc3QoTikpe3ZhciBGPU4ubWF0Y2goZyk7aWYoRil7dmFyIEI9RlsyXS0xfHwwLEc9KEZbN118fCIwIikuc3Vic3RyaW5nKDAsMyk7cmV0dXJuIFA/bmV3IERhdGUoRGF0ZS5VVEMoRlsxXSxCLEZbM118fDEsRls0XXx8MCxGWzVdfHwwLEZbNl18fDAsRykpOm5ldyBEYXRlKEZbMV0sQixGWzNdfHwxLEZbNF18fDAsRls1XXx8MCxGWzZdfHwwLEcpfX1yZXR1cm4gbmV3IERhdGUoTil9KEMpLHRoaXMuaW5pdCgpfSxSLmluaXQ9ZnVuY3Rpb24oKXt2YXIgQz10aGlzLiRkO3RoaXMuJHk9Qy5nZXRGdWxsWWVhcigpLHRoaXMuJE09Qy5nZXRNb250aCgpLHRoaXMuJEQ9Qy5nZXREYXRlKCksdGhpcy4kVz1DLmdldERheSgpLHRoaXMuJEg9Qy5nZXRIb3VycygpLHRoaXMuJG09Qy5nZXRNaW51dGVzKCksdGhpcy4kcz1DLmdldFNlY29uZHMoKSx0aGlzLiRtcz1DLmdldE1pbGxpc2Vjb25kcygpfSxSLiR1dGlscz1mdW5jdGlvbigpe3JldHVybiBBfSxSLmlzVmFsaWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b1N0cmluZygpIT09bX0sUi5pc1NhbWU9ZnVuY3Rpb24oQyxPKXt2YXIgTj1TKEMpO3JldHVybiB0aGlzLnN0YXJ0T2YoTyk8PU4mJk48PXRoaXMuZW5kT2YoTyl9LFIuaXNBZnRlcj1mdW5jdGlvbihDLE8pe3JldHVybiBTKEMpPHRoaXMuc3RhcnRPZihPKX0sUi5pc0JlZm9yZT1mdW5jdGlvbihDLE8pe3JldHVybiB0aGlzLmVuZE9mKE8pPFMoQyl9LFIuJGc9ZnVuY3Rpb24oQyxPLE4pe3JldHVybiBBLnUoQyk/dGhpc1tPXTp0aGlzLnNldChOLEMpfSxSLnVuaXg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKS8xZTMpfSxSLnZhbHVlT2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC5nZXRUaW1lKCl9LFIuc3RhcnRPZj1mdW5jdGlvbihDLE8pe3ZhciBOPXRoaXMsUD0hIUEudShPKXx8TyxGPUEucChDKSxCPW8oZnVuY3Rpb24oZWUsSil7dmFyIEg9QS53KE4uJHU/RGF0ZS5VVEMoTi4keSxKLGVlKTpuZXcgRGF0ZShOLiR5LEosZWUpLE4pO3JldHVybiBQP0g6SC5lbmRPZihsKX0sImwiKSxHPW8oZnVuY3Rpb24oZWUsSil7cmV0dXJuIEEudyhOLnRvRGF0ZSgpW2VlXS5hcHBseShOLnRvRGF0ZSgicyIpLChQP1swLDAsMCwwXTpbMjMsNTksNTksOTk5XSkuc2xpY2UoSikpLE4pfSwiJCIpLHo9dGhpcy4kVyxXPXRoaXMuJE0sWj10aGlzLiRELGo9InNldCIrKHRoaXMuJHU/IlVUQyI6IiIpO3N3aXRjaChGKXtjYXNlIGQ6cmV0dXJuIFA/QigxLDApOkIoMzEsMTEpO2Nhc2UgaDpyZXR1cm4gUD9CKDEsVyk6QigwLFcrMSk7Y2FzZSB1OnZhciBvZT10aGlzLiRsb2NhbGUoKS53ZWVrU3RhcnR8fDAsSz0oejxvZT96Kzc6eiktb2U7cmV0dXJuIEIoUD9aLUs6WisoNi1LKSxXKTtjYXNlIGw6Y2FzZSBwOnJldHVybiBHKGorIkhvdXJzIiwwKTtjYXNlIHM6cmV0dXJuIEcoaisiTWludXRlcyIsMSk7Y2FzZSBhOnJldHVybiBHKGorIlNlY29uZHMiLDIpO2Nhc2UgaTpyZXR1cm4gRyhqKyJNaWxsaXNlY29uZHMiLDMpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuY2xvbmUoKX19LFIuZW5kT2Y9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuc3RhcnRPZihDLCExKX0sUi4kc2V0PWZ1bmN0aW9uKEMsTyl7dmFyIE4sUD1BLnAoQyksRj0ic2V0IisodGhpcy4kdT8iVVRDIjoiIiksQj0oTj17fSxOW2xdPUYrIkRhdGUiLE5bcF09RisiRGF0ZSIsTltoXT1GKyJNb250aCIsTltkXT1GKyJGdWxsWWVhciIsTltzXT1GKyJIb3VycyIsTlthXT1GKyJNaW51dGVzIixOW2ldPUYrIlNlY29uZHMiLE5bbl09RisiTWlsbGlzZWNvbmRzIixOKVtQXSxHPVA9PT1sP3RoaXMuJEQrKE8tdGhpcy4kVyk6TztpZihQPT09aHx8UD09PWQpe3ZhciB6PXRoaXMuY2xvbmUoKS5zZXQocCwxKTt6LiRkW0JdKEcpLHouaW5pdCgpLHRoaXMuJGQ9ei5zZXQocCxNYXRoLm1pbih0aGlzLiRELHouZGF5c0luTW9udGgoKSkpLiRkfWVsc2UgQiYmdGhpcy4kZFtCXShHKTtyZXR1cm4gdGhpcy5pbml0KCksdGhpc30sUi5zZXQ9ZnVuY3Rpb24oQyxPKXtyZXR1cm4gdGhpcy5jbG9uZSgpLiRzZXQoQyxPKX0sUi5nZXQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXNbQS5wKEMpXSgpfSxSLmFkZD1mdW5jdGlvbihDLE8pe3ZhciBOLFA9dGhpcztDPU51bWJlcihDKTt2YXIgRj1BLnAoTyksQj1vKGZ1bmN0aW9uKFcpe3ZhciBaPVMoUCk7cmV0dXJuIEEudyhaLmRhdGUoWi5kYXRlKCkrTWF0aC5yb3VuZChXKkMpKSxQKX0sInkiKTtpZihGPT09aClyZXR1cm4gdGhpcy5zZXQoaCx0aGlzLiRNK0MpO2lmKEY9PT1kKXJldHVybiB0aGlzLnNldChkLHRoaXMuJHkrQyk7aWYoRj09PWwpcmV0dXJuIEIoMSk7aWYoRj09PXUpcmV0dXJuIEIoNyk7dmFyIEc9KE49e30sTlthXT1lLE5bc109cixOW2ldPXQsTilbRl18fDEsej10aGlzLiRkLmdldFRpbWUoKStDKkc7cmV0dXJuIEEudyh6LHRoaXMpfSxSLnN1YnRyYWN0PWZ1bmN0aW9uKEMsTyl7cmV0dXJuIHRoaXMuYWRkKC0xKkMsTyl9LFIuZm9ybWF0PWZ1bmN0aW9uKEMpe3ZhciBPPXRoaXMsTj10aGlzLiRsb2NhbGUoKTtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIE4uaW52YWxpZERhdGV8fG07dmFyIFA9Q3x8IllZWVktTU0tRERUSEg6bW06c3NaIixGPUEueih0aGlzKSxCPXRoaXMuJEgsRz10aGlzLiRtLHo9dGhpcy4kTSxXPU4ud2Vla2RheXMsWj1OLm1vbnRocyxqPU4ubWVyaWRpZW0sb2U9byhmdW5jdGlvbihKLEgscSxRKXtyZXR1cm4gSiYmKEpbSF18fEooTyxQKSl8fHFbSF0uc2xpY2UoMCxRKX0sImgiKSxLPW8oZnVuY3Rpb24oSil7cmV0dXJuIEEucyhCJTEyfHwxMixKLCIwIil9LCJkIiksZWU9anx8ZnVuY3Rpb24oSixILHEpe3ZhciBRPUo8MTI/IkFNIjoiUE0iO3JldHVybiBxP1EudG9Mb3dlckNhc2UoKTpRfTtyZXR1cm4gUC5yZXBsYWNlKHksZnVuY3Rpb24oSixIKXtyZXR1cm4gSHx8ZnVuY3Rpb24ocSl7c3dpdGNoKHEpe2Nhc2UiWVkiOnJldHVybiBTdHJpbmcoTy4keSkuc2xpY2UoLTIpO2Nhc2UiWVlZWSI6cmV0dXJuIEEucyhPLiR5LDQsIjAiKTtjYXNlIk0iOnJldHVybiB6KzE7Y2FzZSJNTSI6cmV0dXJuIEEucyh6KzEsMiwiMCIpO2Nhc2UiTU1NIjpyZXR1cm4gb2UoTi5tb250aHNTaG9ydCx6LFosMyk7Y2FzZSJNTU1NIjpyZXR1cm4gb2UoWix6KTtjYXNlIkQiOnJldHVybiBPLiREO2Nhc2UiREQiOnJldHVybiBBLnMoTy4kRCwyLCIwIik7Y2FzZSJkIjpyZXR1cm4gU3RyaW5nKE8uJFcpO2Nhc2UiZGQiOnJldHVybiBvZShOLndlZWtkYXlzTWluLE8uJFcsVywyKTtjYXNlImRkZCI6cmV0dXJuIG9lKE4ud2Vla2RheXNTaG9ydCxPLiRXLFcsMyk7Y2FzZSJkZGRkIjpyZXR1cm4gV1tPLiRXXTtjYXNlIkgiOnJldHVybiBTdHJpbmcoQik7Y2FzZSJISCI6cmV0dXJuIEEucyhCLDIsIjAiKTtjYXNlImgiOnJldHVybiBLKDEpO2Nhc2UiaGgiOnJldHVybiBLKDIpO2Nhc2UiYSI6cmV0dXJuIGVlKEIsRywhMCk7Y2FzZSJBIjpyZXR1cm4gZWUoQixHLCExKTtjYXNlIm0iOnJldHVybiBTdHJpbmcoRyk7Y2FzZSJtbSI6cmV0dXJuIEEucyhHLDIsIjAiKTtjYXNlInMiOnJldHVybiBTdHJpbmcoTy4kcyk7Y2FzZSJzcyI6cmV0dXJuIEEucyhPLiRzLDIsIjAiKTtjYXNlIlNTUyI6cmV0dXJuIEEucyhPLiRtcywzLCIwIik7Y2FzZSJaIjpyZXR1cm4gRn1yZXR1cm4gbnVsbH0oSil8fEYucmVwbGFjZSgiOiIsIiIpfSl9LFIudXRjT2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIDE1Ki1NYXRoLnJvdW5kKHRoaXMuJGQuZ2V0VGltZXpvbmVPZmZzZXQoKS8xNSl9LFIuZGlmZj1mdW5jdGlvbihDLE8sTil7dmFyIFAsRj10aGlzLEI9QS5wKE8pLEc9UyhDKSx6PShHLnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpKmUsVz10aGlzLUcsWj1vKGZ1bmN0aW9uKCl7cmV0dXJuIEEubShGLEcpfSwiRCIpO3N3aXRjaChCKXtjYXNlIGQ6UD1aKCkvMTI7YnJlYWs7Y2FzZSBoOlA9WigpO2JyZWFrO2Nhc2UgZjpQPVooKS8zO2JyZWFrO2Nhc2UgdTpQPShXLXopLzYwNDhlNTticmVhaztjYXNlIGw6UD0oVy16KS84NjRlNTticmVhaztjYXNlIHM6UD1XL3I7YnJlYWs7Y2FzZSBhOlA9Vy9lO2JyZWFrO2Nhc2UgaTpQPVcvdDticmVhaztkZWZhdWx0OlA9V31yZXR1cm4gTj9QOkEuYShQKX0sUi5kYXlzSW5Nb250aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuZE9mKGgpLiREfSxSLiRsb2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gX1t0aGlzLiRMXX0sUi5sb2NhbGU9ZnVuY3Rpb24oQyxPKXtpZighQylyZXR1cm4gdGhpcy4kTDt2YXIgTj10aGlzLmNsb25lKCksUD1MKEMsTywhMCk7cmV0dXJuIFAmJihOLiRMPVApLE59LFIuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gQS53KHRoaXMuJGQsdGhpcyl9LFIudG9EYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpKX0sUi50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy50b0lTT1N0cmluZygpOm51bGx9LFIudG9JU09TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b0lTT1N0cmluZygpfSxSLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQudG9VVENTdHJpbmcoKX0sa30oKSxEPUkucHJvdG90eXBlO3JldHVybiBTLnByb3RvdHlwZT1ELFtbIiRtcyIsbl0sWyIkcyIsaV0sWyIkbSIsYV0sWyIkSCIsc10sWyIkVyIsbF0sWyIkTSIsaF0sWyIkeSIsZF0sWyIkRCIscF1dLmZvckVhY2goZnVuY3Rpb24oayl7RFtrWzFdXT1mdW5jdGlvbihSKXtyZXR1cm4gdGhpcy4kZyhSLGtbMF0sa1sxXSl9fSksUy5leHRlbmQ9ZnVuY3Rpb24oayxSKXtyZXR1cm4gay4kaXx8KGsoUixJLFMpLGsuJGk9ITApLFN9LFMubG9jYWxlPUwsUy5pc0RheWpzPUUsUy51bml4PWZ1bmN0aW9uKGspe3JldHVybiBTKDFlMyprKX0sUy5lbj1fW3ddLFMuTHM9XyxTLnA9e30sU30pfSk7dmFyIElGLGF1LFksSjEsQW8sdXQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtJRj1KaShWYigpLDEpLGF1PXt0cmFjZTowLGRlYnVnOjEsaW5mbzoyLHdhcm46MyxlcnJvcjo0LGZhdGFsOjV9LFk9e3RyYWNlOm8oKC4uLnQpPT57fSwidHJhY2UiKSxkZWJ1ZzpvKCguLi50KT0+e30sImRlYnVnIiksaW5mbzpvKCguLi50KT0+e30sImluZm8iKSx3YXJuOm8oKC4uLnQpPT57fSwid2FybiIpLGVycm9yOm8oKC4uLnQpPT57fSwiZXJyb3IiKSxmYXRhbDpvKCguLi50KT0+e30sImZhdGFsIil9LEoxPW8oZnVuY3Rpb24odD0iZmF0YWwiKXtsZXQgZT1hdS5mYXRhbDt0eXBlb2YgdD09InN0cmluZyI/dC50b0xvd2VyQ2FzZSgpaW4gYXUmJihlPWF1W3RdKTp0eXBlb2YgdD09Im51bWJlciImJihlPXQpLFkudHJhY2U9KCk9Pnt9LFkuZGVidWc9KCk9Pnt9LFkuaW5mbz0oKT0+e30sWS53YXJuPSgpPT57fSxZLmVycm9yPSgpPT57fSxZLmZhdGFsPSgpPT57fSxlPD1hdS5mYXRhbCYmKFkuZmF0YWw9Y29uc29sZS5lcnJvcj9jb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSxBbygiRkFUQUwiKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiXHgxQlszNW0iLEFvKCJGQVRBTCIpKSksZTw9YXUuZXJyb3ImJihZLmVycm9yPWNvbnNvbGUuZXJyb3I/Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUsQW8oIkVSUk9SIiksImNvbG9yOiBvcmFuZ2UiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzFtIixBbygiRVJST1IiKSkpLGU8PWF1Lndhcm4mJihZLndhcm49Y29uc29sZS53YXJuP2NvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUsQW8oIldBUk4iKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiXHgxQlszM20iLEFvKCJXQVJOIikpKSxlPD1hdS5pbmZvJiYoWS5pbmZvPWNvbnNvbGUuaW5mbz9jb25zb2xlLmluZm8uYmluZChjb25zb2xlLEFvKCJJTkZPIiksImNvbG9yOiBsaWdodGJsdWUiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzRtIixBbygiSU5GTyIpKSksZTw9YXUuZGVidWcmJihZLmRlYnVnPWNvbnNvbGUuZGVidWc/Y29uc29sZS5kZWJ1Zy5iaW5kKGNvbnNvbGUsQW8oIkRFQlVHIiksImNvbG9yOiBsaWdodGdyZWVuIik6Y29uc29sZS5sb2cuYmluZChjb25zb2xlLCJceDFCWzMybSIsQW8oIkRFQlVHIikpKSxlPD1hdS50cmFjZSYmKFkudHJhY2U9Y29uc29sZS5kZWJ1Zz9jb25zb2xlLmRlYnVnLmJpbmQoY29uc29sZSxBbygiVFJBQ0UiKSwiY29sb3I6IGxpZ2h0Z3JlZW4iKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzJtIixBbygiVFJBQ0UiKSkpfSwic2V0TG9nTGV2ZWwiKSxBbz1vKHQ9PmAlYyR7KDAsSUYuZGVmYXVsdCkoKS5mb3JtYXQoInNzLlNTUyIpfSA6ICR7dH0gOiBgLCJmb3JtYXQiKX0pO3ZhciB1eGUsdXAsRFMsT0YsVWI9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt1eGU9T2JqZWN0LmZyZWV6ZSh7bGVmdDowLHRvcDowLHdpZHRoOjE2LGhlaWdodDoxNn0pLHVwPU9iamVjdC5mcmVlemUoe3JvdGF0ZTowLHZGbGlwOiExLGhGbGlwOiExfSksRFM9T2JqZWN0LmZyZWV6ZSh7Li4udXhlLC4uLnVwfSksT0Y9T2JqZWN0LmZyZWV6ZSh7Li4uRFMsYm9keToiIixoaWRkZW46ITF9KX0pO3ZhciBoeGUsUEYsQkY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtVYigpO2h4ZT1PYmplY3QuZnJlZXplKHt3aWR0aDpudWxsLGhlaWdodDpudWxsfSksUEY9T2JqZWN0LmZyZWV6ZSh7Li4uaHhlLC4uLnVwfSl9KTt2YXIgSGIsTlMsV2IsRkY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIYj0vXlthLXowLTldKygtW2EtejAtOV0rKSokLyxOUz1vKCh0LGUscixuPSIiKT0+e2xldCBpPXQuc3BsaXQoIjoiKTtpZih0LnNsaWNlKDAsMSk9PT0iQCIpe2lmKGkubGVuZ3RoPDJ8fGkubGVuZ3RoPjMpcmV0dXJuIG51bGw7bj1pLnNoaWZ0KCkuc2xpY2UoMSl9aWYoaS5sZW5ndGg+M3x8IWkubGVuZ3RoKXJldHVybiBudWxsO2lmKGkubGVuZ3RoPjEpe2xldCBsPWkucG9wKCksdT1pLnBvcCgpLGg9e3Byb3ZpZGVyOmkubGVuZ3RoPjA/aVswXTpuLHByZWZpeDp1LG5hbWU6bH07cmV0dXJuIGUmJiFXYihoKT9udWxsOmh9bGV0IGE9aVswXSxzPWEuc3BsaXQoIi0iKTtpZihzLmxlbmd0aD4xKXtsZXQgbD17cHJvdmlkZXI6bixwcmVmaXg6cy5zaGlmdCgpLG5hbWU6cy5qb2luKCItIil9O3JldHVybiBlJiYhV2IobCk/bnVsbDpsfWlmKHImJm49PT0iIil7bGV0IGw9e3Byb3ZpZGVyOm4scHJlZml4OiIiLG5hbWU6YX07cmV0dXJuIGUmJiFXYihsLHIpP251bGw6bH1yZXR1cm4gbnVsbH0sInN0cmluZ1RvSWNvbiIpLFdiPW8oKHQsZSk9PnQ/ISEoKHQucHJvdmlkZXI9PT0iInx8dC5wcm92aWRlci5tYXRjaChIYikpJiYoZSYmdC5wcmVmaXg9PT0iInx8dC5wcmVmaXgubWF0Y2goSGIpKSYmdC5uYW1lLm1hdGNoKEhiKSk6ITEsInZhbGlkYXRlSWNvbk5hbWUiKX0pO2Z1bmN0aW9uIHpGKHQsZSl7bGV0IHI9e307IXQuaEZsaXAhPSFlLmhGbGlwJiYoci5oRmxpcD0hMCksIXQudkZsaXAhPSFlLnZGbGlwJiYoci52RmxpcD0hMCk7bGV0IG49KCh0LnJvdGF0ZXx8MCkrKGUucm90YXRlfHwwKSklNDtyZXR1cm4gbiYmKHIucm90YXRlPW4pLHJ9dmFyIEdGPU0oKCk9PnsidXNlIHN0cmljdCI7byh6RiwibWVyZ2VJY29uVHJhbnNmb3JtYXRpb25zIil9KTtmdW5jdGlvbiBSUyh0LGUpe2xldCByPXpGKHQsZSk7Zm9yKGxldCBuIGluIE9GKW4gaW4gdXA/biBpbiB0JiYhKG4gaW4gcikmJihyW25dPXVwW25dKTpuIGluIGU/cltuXT1lW25dOm4gaW4gdCYmKHJbbl09dFtuXSk7cmV0dXJuIHJ9dmFyICRGPU0oKCk9PnsidXNlIHN0cmljdCI7VWIoKTtHRigpO28oUlMsIm1lcmdlSWNvbkRhdGEiKX0pO2Z1bmN0aW9uIFZGKHQsZSl7bGV0IHI9dC5pY29ucyxuPXQuYWxpYXNlc3x8T2JqZWN0LmNyZWF0ZShudWxsKSxpPU9iamVjdC5jcmVhdGUobnVsbCk7ZnVuY3Rpb24gYShzKXtpZihyW3NdKXJldHVybiBpW3NdPVtdO2lmKCEocyBpbiBpKSl7aVtzXT1udWxsO2xldCBsPW5bc10mJm5bc10ucGFyZW50LHU9bCYmYShsKTt1JiYoaVtzXT1bbF0uY29uY2F0KHUpKX1yZXR1cm4gaVtzXX1yZXR1cm4gbyhhLCJyZXNvbHZlIiksKGV8fE9iamVjdC5rZXlzKHIpLmNvbmNhdChPYmplY3Qua2V5cyhuKSkpLmZvckVhY2goYSksaX12YXIgVUY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKFZGLCJnZXRJY29uc1RyZWUiKX0pO2Z1bmN0aW9uIEhGKHQsZSxyKXtsZXQgbj10Lmljb25zLGk9dC5hbGlhc2VzfHxPYmplY3QuY3JlYXRlKG51bGwpLGE9e307ZnVuY3Rpb24gcyhsKXthPVJTKG5bbF18fGlbbF0sYSl9cmV0dXJuIG8ocywicGFyc2UiKSxzKGUpLHIuZm9yRWFjaChzKSxSUyh0LGEpfWZ1bmN0aW9uIE1TKHQsZSl7aWYodC5pY29uc1tlXSlyZXR1cm4gSEYodCxlLFtdKTtsZXQgcj1WRih0LFtlXSlbZV07cmV0dXJuIHI/SEYodCxlLHIpOm51bGx9dmFyIFdGPU0oKCk9PnsidXNlIHN0cmljdCI7JEYoKTtVRigpO28oSEYsImludGVybmFsR2V0SWNvbkRhdGEiKTtvKE1TLCJnZXRJY29uRGF0YSIpfSk7ZnVuY3Rpb24gSVModCxlLHIpe2lmKGU9PT0xKXJldHVybiB0O2lmKHI9cnx8MTAwLHR5cGVvZiB0PT0ibnVtYmVyIilyZXR1cm4gTWF0aC5jZWlsKHQqZSpyKS9yO2lmKHR5cGVvZiB0IT0ic3RyaW5nIilyZXR1cm4gdDtsZXQgbj10LnNwbGl0KGZ4ZSk7aWYobj09PW51bGx8fCFuLmxlbmd0aClyZXR1cm4gdDtsZXQgaT1bXSxhPW4uc2hpZnQoKSxzPWR4ZS50ZXN0KGEpO2Zvcig7Oyl7aWYocyl7bGV0IGw9cGFyc2VGbG9hdChhKTtpc05hTihsKT9pLnB1c2goYSk6aS5wdXNoKE1hdGguY2VpbChsKmUqcikvcil9ZWxzZSBpLnB1c2goYSk7aWYoYT1uLnNoaWZ0KCksYT09PXZvaWQgMClyZXR1cm4gaS5qb2luKCIiKTtzPSFzfX12YXIgZnhlLGR4ZSxZRj1NKCgpPT57InVzZSBzdHJpY3QiO2Z4ZT0vKC0/WzAtOS5dKlswLTldK1swLTkuXSopL2csZHhlPS9eLT9bMC05Ll0qWzAtOV0rWzAtOS5dKiQvZztvKElTLCJjYWxjdWxhdGVTaXplIil9KTtmdW5jdGlvbiBweGUodCxlPSJkZWZzIil7bGV0IHI9IiIsbj10LmluZGV4T2YoIjwiK2UpO2Zvcig7bj49MDspe2xldCBpPXQuaW5kZXhPZigiPiIsbiksYT10LmluZGV4T2YoIjwvIitlKTtpZihpPT09LTF8fGE9PT0tMSlicmVhaztsZXQgcz10LmluZGV4T2YoIj4iLGEpO2lmKHM9PT0tMSlicmVhaztyKz10LnNsaWNlKGkrMSxhKS50cmltKCksdD10LnNsaWNlKDAsbikudHJpbSgpK3Quc2xpY2UocysxKX1yZXR1cm57ZGVmczpyLGNvbnRlbnQ6dH19ZnVuY3Rpb24gbXhlKHQsZSl7cmV0dXJuIHQ/IjxkZWZzPiIrdCsiPC9kZWZzPiIrZTplfWZ1bmN0aW9uIHFGKHQsZSxyKXtsZXQgbj1weGUodCk7cmV0dXJuIG14ZShuLmRlZnMsZStuLmNvbnRlbnQrcil9dmFyIFhGPU0oKCk9PnsidXNlIHN0cmljdCI7byhweGUsInNwbGl0U1ZHRGVmcyIpO28obXhlLCJtZXJnZURlZnNBbmRDb250ZW50Iik7byhxRiwid3JhcFNWR0NvbnRlbnQiKX0pO2Z1bmN0aW9uIE9TKHQsZSl7bGV0IHI9ey4uLkRTLC4uLnR9LG49ey4uLlBGLC4uLmV9LGk9e2xlZnQ6ci5sZWZ0LHRvcDpyLnRvcCx3aWR0aDpyLndpZHRoLGhlaWdodDpyLmhlaWdodH0sYT1yLmJvZHk7W3Isbl0uZm9yRWFjaCh5PT57bGV0IHY9W10seD15LmhGbGlwLGI9eS52RmxpcCx3PXkucm90YXRlO3g/Yj93Kz0yOih2LnB1c2goInRyYW5zbGF0ZSgiKyhpLndpZHRoK2kubGVmdCkudG9TdHJpbmcoKSsiICIrKDAtaS50b3ApLnRvU3RyaW5nKCkrIikiKSx2LnB1c2goInNjYWxlKC0xIDEpIiksaS50b3A9aS5sZWZ0PTApOmImJih2LnB1c2goInRyYW5zbGF0ZSgiKygwLWkubGVmdCkudG9TdHJpbmcoKSsiICIrKGkuaGVpZ2h0K2kudG9wKS50b1N0cmluZygpKyIpIiksdi5wdXNoKCJzY2FsZSgxIC0xKSIpLGkudG9wPWkubGVmdD0wKTtsZXQgXztzd2l0Y2godzwwJiYody09TWF0aC5mbG9vcih3LzQpKjQpLHc9dyU0LHcpe2Nhc2UgMTpfPWkuaGVpZ2h0LzIraS50b3Asdi51bnNoaWZ0KCJyb3RhdGUoOTAgIitfLnRvU3RyaW5nKCkrIiAiK18udG9TdHJpbmcoKSsiKSIpO2JyZWFrO2Nhc2UgMjp2LnVuc2hpZnQoInJvdGF0ZSgxODAgIisoaS53aWR0aC8yK2kubGVmdCkudG9TdHJpbmcoKSsiICIrKGkuaGVpZ2h0LzIraS50b3ApLnRvU3RyaW5nKCkrIikiKTticmVhaztjYXNlIDM6Xz1pLndpZHRoLzIraS5sZWZ0LHYudW5zaGlmdCgicm90YXRlKC05MCAiK18udG9TdHJpbmcoKSsiICIrXy50b1N0cmluZygpKyIpIik7YnJlYWt9dyUyPT09MSYmKGkubGVmdCE9PWkudG9wJiYoXz1pLmxlZnQsaS5sZWZ0PWkudG9wLGkudG9wPV8pLGkud2lkdGghPT1pLmhlaWdodCYmKF89aS53aWR0aCxpLndpZHRoPWkuaGVpZ2h0LGkuaGVpZ2h0PV8pKSx2Lmxlbmd0aCYmKGE9cUYoYSwnPGcgdHJhbnNmb3JtPSInK3Yuam9pbigiICIpKyciPicsIjwvZz4iKSl9KTtsZXQgcz1uLndpZHRoLGw9bi5oZWlnaHQsdT1pLndpZHRoLGg9aS5oZWlnaHQsZixkO3M9PT1udWxsPyhkPWw9PT1udWxsPyIxZW0iOmw9PT0iYXV0byI/aDpsLGY9SVMoZCx1L2gpKTooZj1zPT09ImF1dG8iP3U6cyxkPWw9PT1udWxsP0lTKGYsaC91KTpsPT09ImF1dG8iP2g6bCk7bGV0IHA9e30sbT1vKCh5LHYpPT57Z3hlKHYpfHwocFt5XT12LnRvU3RyaW5nKCkpfSwic2V0QXR0ciIpO20oIndpZHRoIixmKSxtKCJoZWlnaHQiLGQpO2xldCBnPVtpLmxlZnQsaS50b3AsdSxoXTtyZXR1cm4gcC52aWV3Qm94PWcuam9pbigiICIpLHthdHRyaWJ1dGVzOnAsdmlld0JveDpnLGJvZHk6YX19dmFyIGd4ZSxqRj1NKCgpPT57InVzZSBzdHJpY3QiO1ViKCk7QkYoKTtZRigpO1hGKCk7Z3hlPW8odD0+dD09PSJ1bnNldCJ8fHQ9PT0idW5kZWZpbmVkInx8dD09PSJub25lIiwiaXNVbnNldEtleXdvcmQiKTtvKE9TLCJpY29uVG9TVkciKX0pO2Z1bmN0aW9uIFBTKHQsZT12eGUpe2xldCByPVtdLG47Zm9yKDtuPXl4ZS5leGVjKHQpOylyLnB1c2goblsxXSk7aWYoIXIubGVuZ3RoKXJldHVybiB0O2xldCBpPSJzdWZmaXgiKyhNYXRoLnJhbmRvbSgpKjE2Nzc3MjE2fERhdGUubm93KCkpLnRvU3RyaW5nKDE2KTtyZXR1cm4gci5mb3JFYWNoKGE9PntsZXQgcz10eXBlb2YgZT09ImZ1bmN0aW9uIj9lKGEpOmUrKHh4ZSsrKS50b1N0cmluZygpLGw9YS5yZXBsYWNlKC9bLiorP14ke30oKXxbXF1cXF0vZywiXFwkJiIpO3Q9dC5yZXBsYWNlKG5ldyBSZWdFeHAoJyhbIzsiXSkoJytsKycpKFsiKV18XFwuW2Etel0pJywiZyIpLCIkMSIrcytpKyIkMyIpfSksdD10LnJlcGxhY2UobmV3IFJlZ0V4cChpLCJnIiksIiIpLHR9dmFyIHl4ZSx2eGUseHhlLEtGPU0oKCk9PnsidXNlIHN0cmljdCI7eXhlPS9cc2lkPSIoXFMrKSIvZyx2eGU9Ikljb25pZnlJZCIrRGF0ZS5ub3coKS50b1N0cmluZygxNikrKE1hdGgucmFuZG9tKCkqMTY3NzcyMTZ8MCkudG9TdHJpbmcoMTYpLHh4ZT0wO28oUFMsInJlcGxhY2VJRHMiKX0pO2Z1bmN0aW9uIEJTKHQsZSl7bGV0IHI9dC5pbmRleE9mKCJ4bGluazoiKT09PS0xPyIiOicgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiJztmb3IobGV0IG4gaW4gZSlyKz0iICIrbisnPSInK2Vbbl0rJyInO3JldHVybic8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyInK3IrIj4iK3QrIjwvc3ZnPiJ9dmFyIFFGPU0oKCk9PnsidXNlIHN0cmljdCI7byhCUywiaWNvblRvSFRNTCIpfSk7dmFyIEpGPUVpKChQYXQsWkYpPT57InVzZSBzdHJpY3QiO3ZhciBocD0xZTMsZnA9aHAqNjAsZHA9ZnAqNjAsamY9ZHAqMjQsYnhlPWpmKjcsd3hlPWpmKjM2NS4yNTtaRi5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZT1lfHx7fTt2YXIgcj10eXBlb2YgdDtpZihyPT09InN0cmluZyImJnQubGVuZ3RoPjApcmV0dXJuIFR4ZSh0KTtpZihyPT09Im51bWJlciImJmlzRmluaXRlKHQpKXJldHVybiBlLmxvbmc/RXhlKHQpOmt4ZSh0KTt0aHJvdyBuZXcgRXJyb3IoInZhbCBpcyBub3QgYSBub24tZW1wdHkgc3RyaW5nIG9yIGEgdmFsaWQgbnVtYmVyLiB2YWw9IitKU09OLnN0cmluZ2lmeSh0KSl9O2Z1bmN0aW9uIFR4ZSh0KXtpZih0PVN0cmluZyh0KSwhKHQubGVuZ3RoPjEwMCkpe3ZhciBlPS9eKC0/KD86XGQrKT9cLj9cZCspICoobWlsbGlzZWNvbmRzP3xtc2Vjcz98bXN8c2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx3ZWVrcz98d3x5ZWFycz98eXJzP3x5KT8kL2kuZXhlYyh0KTtpZihlKXt2YXIgcj1wYXJzZUZsb2F0KGVbMV0pLG49KGVbMl18fCJtcyIpLnRvTG93ZXJDYXNlKCk7c3dpdGNoKG4pe2Nhc2UieWVhcnMiOmNhc2UieWVhciI6Y2FzZSJ5cnMiOmNhc2UieXIiOmNhc2UieSI6cmV0dXJuIHIqd3hlO2Nhc2Uid2Vla3MiOmNhc2Uid2VlayI6Y2FzZSJ3IjpyZXR1cm4gcipieGU7Y2FzZSJkYXlzIjpjYXNlImRheSI6Y2FzZSJkIjpyZXR1cm4gcipqZjtjYXNlImhvdXJzIjpjYXNlImhvdXIiOmNhc2UiaHJzIjpjYXNlImhyIjpjYXNlImgiOnJldHVybiByKmRwO2Nhc2UibWludXRlcyI6Y2FzZSJtaW51dGUiOmNhc2UibWlucyI6Y2FzZSJtaW4iOmNhc2UibSI6cmV0dXJuIHIqZnA7Y2FzZSJzZWNvbmRzIjpjYXNlInNlY29uZCI6Y2FzZSJzZWNzIjpjYXNlInNlYyI6Y2FzZSJzIjpyZXR1cm4gcipocDtjYXNlIm1pbGxpc2Vjb25kcyI6Y2FzZSJtaWxsaXNlY29uZCI6Y2FzZSJtc2VjcyI6Y2FzZSJtc2VjIjpjYXNlIm1zIjpyZXR1cm4gcjtkZWZhdWx0OnJldHVybn19fX1vKFR4ZSwicGFyc2UiKTtmdW5jdGlvbiBreGUodCl7dmFyIGU9TWF0aC5hYnModCk7cmV0dXJuIGU+PWpmP01hdGgucm91bmQodC9qZikrImQiOmU+PWRwP01hdGgucm91bmQodC9kcCkrImgiOmU+PWZwP01hdGgucm91bmQodC9mcCkrIm0iOmU+PWhwP01hdGgucm91bmQodC9ocCkrInMiOnQrIm1zIn1vKGt4ZSwiZm10U2hvcnQiKTtmdW5jdGlvbiBFeGUodCl7dmFyIGU9TWF0aC5hYnModCk7cmV0dXJuIGU+PWpmP1liKHQsZSxqZiwiZGF5Iik6ZT49ZHA/WWIodCxlLGRwLCJob3VyIik6ZT49ZnA/WWIodCxlLGZwLCJtaW51dGUiKTplPj1ocD9ZYih0LGUsaHAsInNlY29uZCIpOnQrIiBtcyJ9byhFeGUsImZtdExvbmciKTtmdW5jdGlvbiBZYih0LGUscixuKXt2YXIgaT1lPj1yKjEuNTtyZXR1cm4gTWF0aC5yb3VuZCh0L3IpKyIgIituKyhpPyJzIjoiIil9byhZYiwicGx1cmFsIil9KTt2YXIgdHo9RWkoKEZhdCxleik9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gU3hlKHQpe3IuZGVidWc9cixyLmRlZmF1bHQ9cixyLmNvZXJjZT11LHIuZGlzYWJsZT1hLHIuZW5hYmxlPWksci5lbmFibGVkPXMsci5odW1hbml6ZT1KRigpLHIuZGVzdHJveT1oLE9iamVjdC5rZXlzKHQpLmZvckVhY2goZj0+e3JbZl09dFtmXX0pLHIubmFtZXM9W10sci5za2lwcz1bXSxyLmZvcm1hdHRlcnM9e307ZnVuY3Rpb24gZShmKXtsZXQgZD0wO2ZvcihsZXQgcD0wO3A8Zi5sZW5ndGg7cCsrKWQ9KGQ8PDUpLWQrZi5jaGFyQ29kZUF0KHApLGR8PTA7cmV0dXJuIHIuY29sb3JzW01hdGguYWJzKGQpJXIuY29sb3JzLmxlbmd0aF19byhlLCJzZWxlY3RDb2xvciIpLHIuc2VsZWN0Q29sb3I9ZTtmdW5jdGlvbiByKGYpe2xldCBkLHA9bnVsbCxtLGc7ZnVuY3Rpb24geSguLi52KXtpZigheS5lbmFibGVkKXJldHVybjtsZXQgeD15LGI9TnVtYmVyKG5ldyBEYXRlKSx3PWItKGR8fGIpO3guZGlmZj13LHgucHJldj1kLHguY3Vycj1iLGQ9Yix2WzBdPXIuY29lcmNlKHZbMF0pLHR5cGVvZiB2WzBdIT0ic3RyaW5nIiYmdi51bnNoaWZ0KCIlTyIpO2xldCBfPTA7dlswXT12WzBdLnJlcGxhY2UoLyUoW2EtekEtWiVdKS9nLChFLEwpPT57aWYoRT09PSIlJSIpcmV0dXJuIiUiO18rKztsZXQgUz1yLmZvcm1hdHRlcnNbTF07aWYodHlwZW9mIFM9PSJmdW5jdGlvbiIpe2xldCBBPXZbX107RT1TLmNhbGwoeCxBKSx2LnNwbGljZShfLDEpLF8tLX1yZXR1cm4gRX0pLHIuZm9ybWF0QXJncy5jYWxsKHgsdiksKHgubG9nfHxyLmxvZykuYXBwbHkoeCx2KX1yZXR1cm4gbyh5LCJkZWJ1ZyIpLHkubmFtZXNwYWNlPWYseS51c2VDb2xvcnM9ci51c2VDb2xvcnMoKSx5LmNvbG9yPXIuc2VsZWN0Q29sb3IoZikseS5leHRlbmQ9bix5LmRlc3Ryb3k9ci5kZXN0cm95LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LCJlbmFibGVkIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITEsZ2V0Om8oKCk9PnAhPT1udWxsP3A6KG0hPT1yLm5hbWVzcGFjZXMmJihtPXIubmFtZXNwYWNlcyxnPXIuZW5hYmxlZChmKSksZyksImdldCIpLHNldDpvKHY9PntwPXZ9LCJzZXQiKX0pLHR5cGVvZiByLmluaXQ9PSJmdW5jdGlvbiImJnIuaW5pdCh5KSx5fW8ociwiY3JlYXRlRGVidWciKTtmdW5jdGlvbiBuKGYsZCl7bGV0IHA9cih0aGlzLm5hbWVzcGFjZSsodHlwZW9mIGQ+InUiPyI6IjpkKStmKTtyZXR1cm4gcC5sb2c9dGhpcy5sb2cscH1vKG4sImV4dGVuZCIpO2Z1bmN0aW9uIGkoZil7ci5zYXZlKGYpLHIubmFtZXNwYWNlcz1mLHIubmFtZXM9W10sci5za2lwcz1bXTtsZXQgZCxwPSh0eXBlb2YgZj09InN0cmluZyI/ZjoiIikuc3BsaXQoL1tccyxdKy8pLG09cC5sZW5ndGg7Zm9yKGQ9MDtkPG07ZCsrKXBbZF0mJihmPXBbZF0ucmVwbGFjZSgvXCovZywiLio/IiksZlswXT09PSItIj9yLnNraXBzLnB1c2gobmV3IFJlZ0V4cCgiXiIrZi5zbGljZSgxKSsiJCIpKTpyLm5hbWVzLnB1c2gobmV3IFJlZ0V4cCgiXiIrZisiJCIpKSl9byhpLCJlbmFibGUiKTtmdW5jdGlvbiBhKCl7bGV0IGY9Wy4uLnIubmFtZXMubWFwKGwpLC4uLnIuc2tpcHMubWFwKGwpLm1hcChkPT4iLSIrZCldLmpvaW4oIiwiKTtyZXR1cm4gci5lbmFibGUoIiIpLGZ9byhhLCJkaXNhYmxlIik7ZnVuY3Rpb24gcyhmKXtpZihmW2YubGVuZ3RoLTFdPT09IioiKXJldHVybiEwO2xldCBkLHA7Zm9yKGQ9MCxwPXIuc2tpcHMubGVuZ3RoO2Q8cDtkKyspaWYoci5za2lwc1tkXS50ZXN0KGYpKXJldHVybiExO2ZvcihkPTAscD1yLm5hbWVzLmxlbmd0aDtkPHA7ZCsrKWlmKHIubmFtZXNbZF0udGVzdChmKSlyZXR1cm4hMDtyZXR1cm4hMX1vKHMsImVuYWJsZWQiKTtmdW5jdGlvbiBsKGYpe3JldHVybiBmLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIsZi50b1N0cmluZygpLmxlbmd0aC0yKS5yZXBsYWNlKC9cLlwqXD8kLywiKiIpfW8obCwidG9OYW1lc3BhY2UiKTtmdW5jdGlvbiB1KGYpe3JldHVybiBmIGluc3RhbmNlb2YgRXJyb3I/Zi5zdGFja3x8Zi5tZXNzYWdlOmZ9byh1LCJjb2VyY2UiKTtmdW5jdGlvbiBoKCl7Y29uc29sZS53YXJuKCJJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuIil9cmV0dXJuIG8oaCwiZGVzdHJveSIpLHIuZW5hYmxlKHIubG9hZCgpKSxyfW8oU3hlLCJzZXR1cCIpO2V6LmV4cG9ydHM9U3hlfSk7dmFyIHJ6PUVpKChRcyxxYik9PnsidXNlIHN0cmljdCI7UXMuZm9ybWF0QXJncz1BeGU7UXMuc2F2ZT1feGU7UXMubG9hZD1MeGU7UXMudXNlQ29sb3JzPUN4ZTtRcy5zdG9yYWdlPUR4ZSgpO1FzLmRlc3Ryb3k9KCgpPT57bGV0IHQ9ITE7cmV0dXJuKCk9Pnt0fHwodD0hMCxjb25zb2xlLndhcm4oIkluc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC4iKSl9fSkoKTtRcy5jb2xvcnM9WyIjMDAwMENDIiwiIzAwMDBGRiIsIiMwMDMzQ0MiLCIjMDAzM0ZGIiwiIzAwNjZDQyIsIiMwMDY2RkYiLCIjMDA5OUNDIiwiIzAwOTlGRiIsIiMwMENDMDAiLCIjMDBDQzMzIiwiIzAwQ0M2NiIsIiMwMENDOTkiLCIjMDBDQ0NDIiwiIzAwQ0NGRiIsIiMzMzAwQ0MiLCIjMzMwMEZGIiwiIzMzMzNDQyIsIiMzMzMzRkYiLCIjMzM2NkNDIiwiIzMzNjZGRiIsIiMzMzk5Q0MiLCIjMzM5OUZGIiwiIzMzQ0MwMCIsIiMzM0NDMzMiLCIjMzNDQzY2IiwiIzMzQ0M5OSIsIiMzM0NDQ0MiLCIjMzNDQ0ZGIiwiIzY2MDBDQyIsIiM2NjAwRkYiLCIjNjYzM0NDIiwiIzY2MzNGRiIsIiM2NkNDMDAiLCIjNjZDQzMzIiwiIzk5MDBDQyIsIiM5OTAwRkYiLCIjOTkzM0NDIiwiIzk5MzNGRiIsIiM5OUNDMDAiLCIjOTlDQzMzIiwiI0NDMDAwMCIsIiNDQzAwMzMiLCIjQ0MwMDY2IiwiI0NDMDA5OSIsIiNDQzAwQ0MiLCIjQ0MwMEZGIiwiI0NDMzMwMCIsIiNDQzMzMzMiLCIjQ0MzMzY2IiwiI0NDMzM5OSIsIiNDQzMzQ0MiLCIjQ0MzM0ZGIiwiI0NDNjYwMCIsIiNDQzY2MzMiLCIjQ0M5OTAwIiwiI0NDOTkzMyIsIiNDQ0NDMDAiLCIjQ0NDQzMzIiwiI0ZGMDAwMCIsIiNGRjAwMzMiLCIjRkYwMDY2IiwiI0ZGMDA5OSIsIiNGRjAwQ0MiLCIjRkYwMEZGIiwiI0ZGMzMwMCIsIiNGRjMzMzMiLCIjRkYzMzY2IiwiI0ZGMzM5OSIsIiNGRjMzQ0MiLCIjRkYzM0ZGIiwiI0ZGNjYwMCIsIiNGRjY2MzMiLCIjRkY5OTAwIiwiI0ZGOTkzMyIsIiNGRkNDMDAiLCIjRkZDQzMzIl07ZnVuY3Rpb24gQ3hlKCl7aWYodHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5wcm9jZXNzJiYod2luZG93LnByb2Nlc3MudHlwZT09PSJyZW5kZXJlciJ8fHdpbmRvdy5wcm9jZXNzLl9fbndqcykpcmV0dXJuITA7aWYodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci51c2VyQWdlbnQmJm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvKGVkZ2V8dHJpZGVudClcLyhcZCspLykpcmV0dXJuITE7bGV0IHQ7cmV0dXJuIHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlJiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuV2Via2l0QXBwZWFyYW5jZXx8dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5jb25zb2xlJiYod2luZG93LmNvbnNvbGUuZmlyZWJ1Z3x8d2luZG93LmNvbnNvbGUuZXhjZXB0aW9uJiZ3aW5kb3cuY29uc29sZS50YWJsZSl8fHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IudXNlckFnZW50JiYodD1uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2ZpcmVmb3hcLyhcZCspLykpJiZwYXJzZUludCh0WzFdLDEwKT49MzF8fHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IudXNlckFnZW50JiZuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2FwcGxld2Via2l0XC8oXGQrKS8pfW8oQ3hlLCJ1c2VDb2xvcnMiKTtmdW5jdGlvbiBBeGUodCl7aWYodFswXT0odGhpcy51c2VDb2xvcnM/IiVjIjoiIikrdGhpcy5uYW1lc3BhY2UrKHRoaXMudXNlQ29sb3JzPyIgJWMiOiIgIikrdFswXSsodGhpcy51c2VDb2xvcnM/IiVjICI6IiAiKSsiKyIrcWIuZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpLCF0aGlzLnVzZUNvbG9ycylyZXR1cm47bGV0IGU9ImNvbG9yOiAiK3RoaXMuY29sb3I7dC5zcGxpY2UoMSwwLGUsImNvbG9yOiBpbmhlcml0Iik7bGV0IHI9MCxuPTA7dFswXS5yZXBsYWNlKC8lW2EtekEtWiVdL2csaT0+e2khPT0iJSUiJiYocisrLGk9PT0iJWMiJiYobj1yKSl9KSx0LnNwbGljZShuLDAsZSl9byhBeGUsImZvcm1hdEFyZ3MiKTtRcy5sb2c9Y29uc29sZS5kZWJ1Z3x8Y29uc29sZS5sb2d8fCgoKT0+e30pO2Z1bmN0aW9uIF94ZSh0KXt0cnl7dD9Rcy5zdG9yYWdlLnNldEl0ZW0oImRlYnVnIix0KTpRcy5zdG9yYWdlLnJlbW92ZUl0ZW0oImRlYnVnIil9Y2F0Y2h7fX1vKF94ZSwic2F2ZSIpO2Z1bmN0aW9uIEx4ZSgpe2xldCB0O3RyeXt0PVFzLnN0b3JhZ2UuZ2V0SXRlbSgiZGVidWciKX1jYXRjaHt9cmV0dXJuIXQmJnR5cGVvZiBwcm9jZXNzPCJ1IiYmImVudiJpbiBwcm9jZXNzJiYodD1wcm9jZXNzLmVudi5ERUJVRyksdH1vKEx4ZSwibG9hZCIpO2Z1bmN0aW9uIER4ZSgpe3RyeXtyZXR1cm4gbG9jYWxTdG9yYWdlfWNhdGNoe319byhEeGUsImxvY2Fsc3RvcmFnZSIpO3FiLmV4cG9ydHM9dHooKShRcyk7dmFye2Zvcm1hdHRlcnM6TnhlfT1xYi5leHBvcnRzO054ZS5qPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCl9Y2F0Y2goZSl7cmV0dXJuIltVbmV4cGVjdGVkSlNPTlBhcnNlRXJyb3JdOiAiK2UubWVzc2FnZX19fSk7dmFyICRhdCxuej1NKCgpPT57InVzZSBzdHJpY3QiO0ZGKCk7V0YoKTtqRigpO0tGKCk7UUYoKTskYXQ9SmkocnooKSwxKX0pO3ZhciB6UyxGUyxpeixYYixSeGUsX28sc3U9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt1dCgpO256KCk7elM9e2JvZHk6JzxnPjxyZWN0IHdpZHRoPSI4MCIgaGVpZ2h0PSI4MCIgc3R5bGU9ImZpbGw6ICMwODdlYmY7IHN0cm9rZS13aWR0aDogMHB4OyIvPjx0ZXh0IHRyYW5zZm9ybT0idHJhbnNsYXRlKDIxLjE2IDY0LjY3KSIgc3R5bGU9ImZpbGw6ICNmZmY7IGZvbnQtZmFtaWx5OiBBcmlhbE1ULCBBcmlhbDsgZm9udC1zaXplOiA2Ny43NXB4OyI+PHRzcGFuIHg9IjAiIHk9IjAiPj88L3RzcGFuPjwvdGV4dD48L2c+JyxoZWlnaHQ6ODAsd2lkdGg6ODB9LEZTPW5ldyBNYXAsaXo9bmV3IE1hcCxYYj1vKHQ9Pntmb3IobGV0IGUgb2YgdCl7aWYoIWUubmFtZSl0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaWNvbiBsb2FkZXIuIE11c3QgaGF2ZSBhICJuYW1lIiBwcm9wZXJ0eSB3aXRoIG5vbi1lbXB0eSBzdHJpbmcgdmFsdWUuJyk7aWYoWS5kZWJ1ZygiUmVnaXN0ZXJpbmcgaWNvbiBwYWNrOiIsZS5uYW1lKSwibG9hZGVyImluIGUpaXouc2V0KGUubmFtZSxlLmxvYWRlcik7ZWxzZSBpZigiaWNvbnMiaW4gZSlGUy5zZXQoZS5uYW1lLGUuaWNvbnMpO2Vsc2UgdGhyb3cgWS5lcnJvcigiSW52YWxpZCBpY29uIGxvYWRlcjoiLGUpLG5ldyBFcnJvcignSW52YWxpZCBpY29uIGxvYWRlci4gTXVzdCBoYXZlIGVpdGhlciAiaWNvbnMiIG9yICJsb2FkZXIiIHByb3BlcnR5LicpfX0sInJlZ2lzdGVySWNvblBhY2tzIiksUnhlPW8oYXN5bmModCxlKT0+e2xldCByPU5TKHQsITAsZSE9PXZvaWQgMCk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGljb24gbmFtZTogJHt0fWApO2xldCBuPXIucHJlZml4fHxlO2lmKCFuKXRocm93IG5ldyBFcnJvcihgSWNvbiBuYW1lIG11c3QgY29udGFpbiBhIHByZWZpeDogJHt0fWApO2xldCBpPUZTLmdldChuKTtpZighaSl7bGV0IHM9aXouZ2V0KG4pO2lmKCFzKXRocm93IG5ldyBFcnJvcihgSWNvbiBzZXQgbm90IGZvdW5kOiAke3IucHJlZml4fWApO3RyeXtpPXsuLi5hd2FpdCBzKCkscHJlZml4Om59LEZTLnNldChuLGkpfWNhdGNoKGwpe3Rocm93IFkuZXJyb3IobCksbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBpY29uIHNldDogJHtyLnByZWZpeH1gKX19bGV0IGE9TVMoaSxyLm5hbWUpO2lmKCFhKXRocm93IG5ldyBFcnJvcihgSWNvbiBub3QgZm91bmQ6ICR7dH1gKTtyZXR1cm4gYX0sImdldFJlZ2lzdGVyZWRJY29uRGF0YSIpLF9vPW8oYXN5bmModCxlKT0+e2xldCByO3RyeXtyPWF3YWl0IFJ4ZSh0LGU/LmZhbGxiYWNrUHJlZml4KX1jYXRjaChhKXtZLmVycm9yKGEpLHI9elN9bGV0IG49T1MocixlKTtyZXR1cm4gQlMoUFMobi5ib2R5KSxuLmF0dHJpYnV0ZXMpfSwiZ2V0SWNvblNWRyIpfSk7ZnVuY3Rpb24gamIodCl7Zm9yKHZhciBlPVtdLHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWVbci0xXT1hcmd1bWVudHNbcl07dmFyIG49QXJyYXkuZnJvbSh0eXBlb2YgdD09InN0cmluZyI/W3RdOnQpO25bbi5sZW5ndGgtMV09bltuLmxlbmd0aC0xXS5yZXBsYWNlKC9ccj9cbihbXHQgXSopJC8sIiIpO3ZhciBpPW4ucmVkdWNlKGZ1bmN0aW9uKGwsdSl7dmFyIGg9dS5tYXRjaCgvXG4oW1x0IF0rfCg/IVxzKS4pL2cpO3JldHVybiBoP2wuY29uY2F0KGgubWFwKGZ1bmN0aW9uKGYpe3ZhciBkLHA7cmV0dXJuKHA9KGQ9Zi5tYXRjaCgvW1x0IF0vZykpPT09bnVsbHx8ZD09PXZvaWQgMD92b2lkIDA6ZC5sZW5ndGgpIT09bnVsbCYmcCE9PXZvaWQgMD9wOjB9KSk6bH0sW10pO2lmKGkubGVuZ3RoKXt2YXIgYT1uZXcgUmVnRXhwKGAKWwkgXXtgK01hdGgubWluLmFwcGx5KE1hdGgsaSkrIn0iLCJnIik7bj1uLm1hcChmdW5jdGlvbihsKXtyZXR1cm4gbC5yZXBsYWNlKGEsYApgKX0pfW5bMF09blswXS5yZXBsYWNlKC9eXHI/XG4vLCIiKTt2YXIgcz1uWzBdO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24obCx1KXt2YXIgaD1zLm1hdGNoKC8oPzpefFxuKSggKikkLyksZj1oP2hbMV06IiIsZD1sO3R5cGVvZiBsPT0ic3RyaW5nIiYmbC5pbmNsdWRlcyhgCmApJiYoZD1TdHJpbmcobCkuc3BsaXQoYApgKS5tYXAoZnVuY3Rpb24ocCxtKXtyZXR1cm4gbT09PTA/cDoiIitmK3B9KS5qb2luKGAKYCkpLHMrPWQrblt1KzFdfSksc312YXIgR1M9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKGpiLCJkZWRlbnQiKX0pO3ZhciBLYixLZixheixRYj1NKCgpPT57InVzZSBzdHJpY3QiO0tiPS9eLXszfVxzKltcblxyXSguKj8pW1xuXHJdLXszfVxzKltcblxyXSsvcyxLZj0vJXsyfXtccyooPzooXHcrKVxzKjp8KFx3KykpXHMqKD86KFx3Kyl8KCg/Oig/IX0lezJ9KS58XHI/XG4pKikpP1xzKig/On0lezJ9KT8vZ2ksYXo9L1xzKiUlLipcbi9nbX0pO3ZhciBwcCwkUz1NKCgpPT57InVzZSBzdHJpY3QiO3BwPWNsYXNzIGV4dGVuZHMgRXJyb3J7c3RhdGlje28odGhpcywiVW5rbm93bkRpYWdyYW1FcnJvciIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMubmFtZT0iVW5rbm93bkRpYWdyYW1FcnJvciJ9fX0pO3ZhciBRZixtcCxaYixWUyxzeixaZj1NKCgpPT57InVzZSBzdHJpY3QiO3V0KCk7UWIoKTskUygpO1FmPXt9LG1wPW8oZnVuY3Rpb24odCxlKXt0PXQucmVwbGFjZShLYiwiIikucmVwbGFjZShLZiwiIikucmVwbGFjZShheixgCmApO2ZvcihsZXRbcix7ZGV0ZWN0b3I6bn1db2YgT2JqZWN0LmVudHJpZXMoUWYpKWlmKG4odCxlKSlyZXR1cm4gcjt0aHJvdyBuZXcgcHAoYE5vIGRpYWdyYW0gdHlwZSBkZXRlY3RlZCBtYXRjaGluZyBnaXZlbiBjb25maWd1cmF0aW9uIGZvciB0ZXh0OiAke3R9YCl9LCJkZXRlY3RUeXBlIiksWmI9bygoLi4udCk9Pntmb3IobGV0e2lkOmUsZGV0ZWN0b3I6cixsb2FkZXI6bn1vZiB0KVZTKGUscixuKX0sInJlZ2lzdGVyTGF6eUxvYWRlZERpYWdyYW1zIiksVlM9bygodCxlLHIpPT57UWZbdF0mJlkud2FybihgRGV0ZWN0b3Igd2l0aCBrZXkgJHt0fSBhbHJlYWR5IGV4aXN0cy4gT3ZlcndyaXRpbmcuYCksUWZbdF09e2RldGVjdG9yOmUsbG9hZGVyOnJ9LFkuZGVidWcoYERldGVjdG9yIHdpdGgga2V5ICR7dH0gYWRkZWQke3I/IiB3aXRoIGxvYWRlciI6IiJ9YCl9LCJhZGREZXRlY3RvciIpLHN6PW8odD0+UWZbdF0ubG9hZGVyLCJnZXREaWFncmFtTG9hZGVyIil9KTt2YXIgZXksb3osVVM9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtleT1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oJGUseWUsWCxmZSl7Zm9yKFg9WHx8e30sZmU9JGUubGVuZ3RoO2ZlLS07WFskZVtmZV1dPXllKTtyZXR1cm4gWH0sIm8iKSxlPVsxLDI0XSxyPVsxLDI1XSxuPVsxLDI2XSxpPVsxLDI3XSxhPVsxLDI4XSxzPVsxLDYzXSxsPVsxLDY0XSx1PVsxLDY1XSxoPVsxLDY2XSxmPVsxLDY3XSxkPVsxLDY4XSxwPVsxLDY5XSxtPVsxLDI5XSxnPVsxLDMwXSx5PVsxLDMxXSx2PVsxLDMyXSx4PVsxLDMzXSxiPVsxLDM0XSx3PVsxLDM1XSxfPVsxLDM2XSxUPVsxLDM3XSxFPVsxLDM4XSxMPVsxLDM5XSxTPVsxLDQwXSxBPVsxLDQxXSxJPVsxLDQyXSxEPVsxLDQzXSxrPVsxLDQ0XSxSPVsxLDQ1XSxDPVsxLDQ2XSxPPVsxLDQ3XSxOPVsxLDQ4XSxQPVsxLDUwXSxGPVsxLDUxXSxCPVsxLDUyXSxHPVsxLDUzXSx6PVsxLDU0XSxXPVsxLDU1XSxaPVsxLDU2XSxqPVsxLDU3XSxvZT1bMSw1OF0sSz1bMSw1OV0sZWU9WzEsNjBdLEo9WzE0LDQyXSxIPVsxNCwzNCwzNiwzNywzOCwzOSw0MCw0MSw0Miw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NF0scT1bMTIsMTQsMzQsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzRdLFE9WzEsODJdLGFlPVsxLDgzXSx1ZT1bMSw4NF0sY2U9WzEsODVdLHRlPVsxMiwxNCw0Ml0sTmU9WzEyLDE0LDMzLDQyXSxzZT1bMTIsMTQsMzMsNDIsNzYsNzcsNzksODBdLGtlPVsxMiwzM10sUmU9WzM0LDM2LDM3LDM4LDM5LDQwLDQxLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0XSxDZT17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxtZXJtYWlkRG9jOjQsZGlyZWN0aW9uOjUsZGlyZWN0aW9uX3RiOjYsZGlyZWN0aW9uX2J0OjcsZGlyZWN0aW9uX3JsOjgsZGlyZWN0aW9uX2xyOjksZ3JhcGhDb25maWc6MTAsQzRfQ09OVEVYVDoxMSxORVdMSU5FOjEyLHN0YXRlbWVudHM6MTMsRU9GOjE0LEM0X0NPTlRBSU5FUjoxNSxDNF9DT01QT05FTlQ6MTYsQzRfRFlOQU1JQzoxNyxDNF9ERVBMT1lNRU5UOjE4LG90aGVyU3RhdGVtZW50czoxOSxkaWFncmFtU3RhdGVtZW50czoyMCxvdGhlclN0YXRlbWVudDoyMSx0aXRsZToyMixhY2NEZXNjcmlwdGlvbjoyMyxhY2NfdGl0bGU6MjQsYWNjX3RpdGxlX3ZhbHVlOjI1LGFjY19kZXNjcjoyNixhY2NfZGVzY3JfdmFsdWU6MjcsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToyOCxib3VuZGFyeVN0YXRlbWVudDoyOSxib3VuZGFyeVN0YXJ0U3RhdGVtZW50OjMwLGJvdW5kYXJ5U3RvcFN0YXRlbWVudDozMSxib3VuZGFyeVN0YXJ0OjMyLExCUkFDRTozMyxFTlRFUlBSSVNFX0JPVU5EQVJZOjM0LGF0dHJpYnV0ZXM6MzUsU1lTVEVNX0JPVU5EQVJZOjM2LEJPVU5EQVJZOjM3LENPTlRBSU5FUl9CT1VOREFSWTozOCxOT0RFOjM5LE5PREVfTDo0MCxOT0RFX1I6NDEsUkJSQUNFOjQyLGRpYWdyYW1TdGF0ZW1lbnQ6NDMsUEVSU09OOjQ0LFBFUlNPTl9FWFQ6NDUsU1lTVEVNOjQ2LFNZU1RFTV9EQjo0NyxTWVNURU1fUVVFVUU6NDgsU1lTVEVNX0VYVDo0OSxTWVNURU1fRVhUX0RCOjUwLFNZU1RFTV9FWFRfUVVFVUU6NTEsQ09OVEFJTkVSOjUyLENPTlRBSU5FUl9EQjo1MyxDT05UQUlORVJfUVVFVUU6NTQsQ09OVEFJTkVSX0VYVDo1NSxDT05UQUlORVJfRVhUX0RCOjU2LENPTlRBSU5FUl9FWFRfUVVFVUU6NTcsQ09NUE9ORU5UOjU4LENPTVBPTkVOVF9EQjo1OSxDT01QT05FTlRfUVVFVUU6NjAsQ09NUE9ORU5UX0VYVDo2MSxDT01QT05FTlRfRVhUX0RCOjYyLENPTVBPTkVOVF9FWFRfUVVFVUU6NjMsUkVMOjY0LEJJUkVMOjY1LFJFTF9VOjY2LFJFTF9EOjY3LFJFTF9MOjY4LFJFTF9SOjY5LFJFTF9COjcwLFJFTF9JTkRFWDo3MSxVUERBVEVfRUxfU1RZTEU6NzIsVVBEQVRFX1JFTF9TVFlMRTo3MyxVUERBVEVfTEFZT1VUX0NPTkZJRzo3NCxhdHRyaWJ1dGU6NzUsU1RSOjc2LFNUUl9LRVk6NzcsU1RSX1ZBTFVFOjc4LEFUVFJJQlVURTo3OSxBVFRSSUJVVEVfRU1QVFk6ODAsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDY6ImRpcmVjdGlvbl90YiIsNzoiZGlyZWN0aW9uX2J0Iiw4OiJkaXJlY3Rpb25fcmwiLDk6ImRpcmVjdGlvbl9sciIsMTE6IkM0X0NPTlRFWFQiLDEyOiJORVdMSU5FIiwxNDoiRU9GIiwxNToiQzRfQ09OVEFJTkVSIiwxNjoiQzRfQ09NUE9ORU5UIiwxNzoiQzRfRFlOQU1JQyIsMTg6IkM0X0RFUExPWU1FTlQiLDIyOiJ0aXRsZSIsMjM6ImFjY0Rlc2NyaXB0aW9uIiwyNDoiYWNjX3RpdGxlIiwyNToiYWNjX3RpdGxlX3ZhbHVlIiwyNjoiYWNjX2Rlc2NyIiwyNzoiYWNjX2Rlc2NyX3ZhbHVlIiwyODoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMzM6IkxCUkFDRSIsMzQ6IkVOVEVSUFJJU0VfQk9VTkRBUlkiLDM2OiJTWVNURU1fQk9VTkRBUlkiLDM3OiJCT1VOREFSWSIsMzg6IkNPTlRBSU5FUl9CT1VOREFSWSIsMzk6Ik5PREUiLDQwOiJOT0RFX0wiLDQxOiJOT0RFX1IiLDQyOiJSQlJBQ0UiLDQ0OiJQRVJTT04iLDQ1OiJQRVJTT05fRVhUIiw0NjoiU1lTVEVNIiw0NzoiU1lTVEVNX0RCIiw0ODoiU1lTVEVNX1FVRVVFIiw0OToiU1lTVEVNX0VYVCIsNTA6IlNZU1RFTV9FWFRfREIiLDUxOiJTWVNURU1fRVhUX1FVRVVFIiw1MjoiQ09OVEFJTkVSIiw1MzoiQ09OVEFJTkVSX0RCIiw1NDoiQ09OVEFJTkVSX1FVRVVFIiw1NToiQ09OVEFJTkVSX0VYVCIsNTY6IkNPTlRBSU5FUl9FWFRfREIiLDU3OiJDT05UQUlORVJfRVhUX1FVRVVFIiw1ODoiQ09NUE9ORU5UIiw1OToiQ09NUE9ORU5UX0RCIiw2MDoiQ09NUE9ORU5UX1FVRVVFIiw2MToiQ09NUE9ORU5UX0VYVCIsNjI6IkNPTVBPTkVOVF9FWFRfREIiLDYzOiJDT01QT05FTlRfRVhUX1FVRVVFIiw2NDoiUkVMIiw2NToiQklSRUwiLDY2OiJSRUxfVSIsNjc6IlJFTF9EIiw2ODoiUkVMX0wiLDY5OiJSRUxfUiIsNzA6IlJFTF9CIiw3MToiUkVMX0lOREVYIiw3MjoiVVBEQVRFX0VMX1NUWUxFIiw3MzoiVVBEQVRFX1JFTF9TVFlMRSIsNzQ6IlVQREFURV9MQVlPVVRfQ09ORklHIiw3NjoiU1RSIiw3NzoiU1RSX0tFWSIsNzg6IlNUUl9WQUxVRSIsNzk6IkFUVFJJQlVURSIsODA6IkFUVFJJQlVURV9FTVBUWSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywxXSxbMywxXSxbNSwxXSxbNSwxXSxbNSwxXSxbNSwxXSxbNCwxXSxbMTAsNF0sWzEwLDRdLFsxMCw0XSxbMTAsNF0sWzEwLDRdLFsxMywxXSxbMTMsMV0sWzEzLDJdLFsxOSwxXSxbMTksMl0sWzE5LDNdLFsyMSwxXSxbMjEsMV0sWzIxLDJdLFsyMSwyXSxbMjEsMV0sWzI5LDNdLFszMCwzXSxbMzAsM10sWzMwLDRdLFszMiwyXSxbMzIsMl0sWzMyLDJdLFszMiwyXSxbMzIsMl0sWzMyLDJdLFszMiwyXSxbMzEsMV0sWzIwLDFdLFsyMCwyXSxbMjAsM10sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMV0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbMzUsMV0sWzM1LDJdLFs3NSwxXSxbNzUsMl0sWzc1LDFdLFs3NSwxXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKHllLFgsZmUsaGUsZ2UsbmUsdmUpe3ZhciBVPW5lLmxlbmd0aC0xO3N3aXRjaChnZSl7Y2FzZSAzOmhlLnNldERpcmVjdGlvbigiVEIiKTticmVhaztjYXNlIDQ6aGUuc2V0RGlyZWN0aW9uKCJCVCIpO2JyZWFrO2Nhc2UgNTpoZS5zZXREaXJlY3Rpb24oIlJMIik7YnJlYWs7Y2FzZSA2OmhlLnNldERpcmVjdGlvbigiTFIiKTticmVhaztjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpjYXNlIDEyOmhlLnNldEM0VHlwZShuZVtVLTNdKTticmVhaztjYXNlIDE5OmhlLnNldFRpdGxlKG5lW1VdLnN1YnN0cmluZyg2KSksdGhpcy4kPW5lW1VdLnN1YnN0cmluZyg2KTticmVhaztjYXNlIDIwOmhlLnNldEFjY0Rlc2NyaXB0aW9uKG5lW1VdLnN1YnN0cmluZygxNSkpLHRoaXMuJD1uZVtVXS5zdWJzdHJpbmcoMTUpO2JyZWFrO2Nhc2UgMjE6dGhpcy4kPW5lW1VdLnRyaW0oKSxoZS5zZXRUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMjI6Y2FzZSAyMzp0aGlzLiQ9bmVbVV0udHJpbSgpLGhlLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAyODpuZVtVXS5zcGxpY2UoMiwwLCJFTlRFUlBSSVNFIiksaGUuYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeSguLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgMjk6bmVbVV0uc3BsaWNlKDIsMCwiU1lTVEVNIiksaGUuYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeSguLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgMzA6aGUuYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeSguLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgMzE6bmVbVV0uc3BsaWNlKDIsMCwiQ09OVEFJTkVSIiksaGUuYWRkQ29udGFpbmVyQm91bmRhcnkoLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDMyOmhlLmFkZERlcGxveW1lbnROb2RlKCJub2RlIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgMzM6aGUuYWRkRGVwbG95bWVudE5vZGUoIm5vZGVMIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgMzQ6aGUuYWRkRGVwbG95bWVudE5vZGUoIm5vZGVSIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgMzU6aGUucG9wQm91bmRhcnlQYXJzZVN0YWNrKCk7YnJlYWs7Y2FzZSAzOTpoZS5hZGRQZXJzb25PclN5c3RlbSgicGVyc29uIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNDA6aGUuYWRkUGVyc29uT3JTeXN0ZW0oImV4dGVybmFsX3BlcnNvbiIsLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDQxOmhlLmFkZFBlcnNvbk9yU3lzdGVtKCJzeXN0ZW0iLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA0MjpoZS5hZGRQZXJzb25PclN5c3RlbSgic3lzdGVtX2RiIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNDM6aGUuYWRkUGVyc29uT3JTeXN0ZW0oInN5c3RlbV9xdWV1ZSIsLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDQ0OmhlLmFkZFBlcnNvbk9yU3lzdGVtKCJleHRlcm5hbF9zeXN0ZW0iLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA0NTpoZS5hZGRQZXJzb25PclN5c3RlbSgiZXh0ZXJuYWxfc3lzdGVtX2RiIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNDY6aGUuYWRkUGVyc29uT3JTeXN0ZW0oImV4dGVybmFsX3N5c3RlbV9xdWV1ZSIsLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDQ3OmhlLmFkZENvbnRhaW5lcigiY29udGFpbmVyIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNDg6aGUuYWRkQ29udGFpbmVyKCJjb250YWluZXJfZGIiLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA0OTpoZS5hZGRDb250YWluZXIoImNvbnRhaW5lcl9xdWV1ZSIsLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDUwOmhlLmFkZENvbnRhaW5lcigiZXh0ZXJuYWxfY29udGFpbmVyIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNTE6aGUuYWRkQ29udGFpbmVyKCJleHRlcm5hbF9jb250YWluZXJfZGIiLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA1MjpoZS5hZGRDb250YWluZXIoImV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZSIsLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDUzOmhlLmFkZENvbXBvbmVudCgiY29tcG9uZW50IiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNTQ6aGUuYWRkQ29tcG9uZW50KCJjb21wb25lbnRfZGIiLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA1NTpoZS5hZGRDb21wb25lbnQoImNvbXBvbmVudF9xdWV1ZSIsLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDU2OmhlLmFkZENvbXBvbmVudCgiZXh0ZXJuYWxfY29tcG9uZW50IiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNTc6aGUuYWRkQ29tcG9uZW50KCJleHRlcm5hbF9jb21wb25lbnRfZGIiLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA1ODpoZS5hZGRDb21wb25lbnQoImV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZSIsLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDYwOmhlLmFkZFJlbCgicmVsIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNjE6aGUuYWRkUmVsKCJiaXJlbCIsLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDYyOmhlLmFkZFJlbCgicmVsX3UiLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA2MzpoZS5hZGRSZWwoInJlbF9kIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNjQ6aGUuYWRkUmVsKCJyZWxfbCIsLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDY1OmhlLmFkZFJlbCgicmVsX3IiLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA2NjpoZS5hZGRSZWwoInJlbF9iIiwuLi5uZVtVXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNjc6bmVbVV0uc3BsaWNlKDAsMSksaGUuYWRkUmVsKCJyZWwiLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA2ODpoZS51cGRhdGVFbFN0eWxlKCJ1cGRhdGVfZWxfc3R5bGUiLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA2OTpoZS51cGRhdGVSZWxTdHlsZSgidXBkYXRlX3JlbF9zdHlsZSIsLi4ubmVbVV0pLHRoaXMuJD1uZVtVXTticmVhaztjYXNlIDcwOmhlLnVwZGF0ZUxheW91dENvbmZpZygidXBkYXRlX2xheW91dF9jb25maWciLC4uLm5lW1VdKSx0aGlzLiQ9bmVbVV07YnJlYWs7Y2FzZSA3MTp0aGlzLiQ9W25lW1VdXTticmVhaztjYXNlIDcyOm5lW1VdLnVuc2hpZnQobmVbVS0xXSksdGhpcy4kPW5lW1VdO2JyZWFrO2Nhc2UgNzM6Y2FzZSA3NTp0aGlzLiQ9bmVbVV0udHJpbSgpO2JyZWFrO2Nhc2UgNzQ6bGV0IFRlPXt9O1RlW25lW1UtMV0udHJpbSgpXT1uZVtVXS50cmltKCksdGhpcy4kPVRlO2JyZWFrO2Nhc2UgNzY6dGhpcy4kPSIiO2JyZWFrfX0sImFub255bW91cyIpLHRhYmxlOlt7MzoxLDQ6Miw1OjMsNjpbMSw1XSw3OlsxLDZdLDg6WzEsN10sOTpbMSw4XSwxMDo0LDExOlsxLDldLDE1OlsxLDEwXSwxNjpbMSwxMV0sMTc6WzEsMTJdLDE4OlsxLDEzXX0sezE6WzNdfSx7MTpbMiwxXX0sezE6WzIsMl19LHsxOlsyLDddfSx7MTpbMiwzXX0sezE6WzIsNF19LHsxOlsyLDVdfSx7MTpbMiw2XX0sezEyOlsxLDE0XX0sezEyOlsxLDE1XX0sezEyOlsxLDE2XX0sezEyOlsxLDE3XX0sezEyOlsxLDE4XX0sezEzOjE5LDE5OjIwLDIwOjIxLDIxOjIyLDIyOmUsMjM6ciwyNDpuLDI2OmksMjg6YSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpzLDM2OmwsMzc6dSwzODpoLDM5OmYsNDA6ZCw0MTpwLDQzOjIzLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOncsNTE6Xyw1MjpULDUzOkUsNTQ6TCw1NTpTLDU2OkEsNTc6SSw1ODpELDU5OmssNjA6Uiw2MTpDLDYyOk8sNjM6Tiw2NDpQLDY1OkYsNjY6Qiw2NzpHLDY4OnosNjk6Vyw3MDpaLDcxOmosNzI6b2UsNzM6Syw3NDplZX0sezEzOjcwLDE5OjIwLDIwOjIxLDIxOjIyLDIyOmUsMjM6ciwyNDpuLDI2OmksMjg6YSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpzLDM2OmwsMzc6dSwzODpoLDM5OmYsNDA6ZCw0MTpwLDQzOjIzLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOncsNTE6Xyw1MjpULDUzOkUsNTQ6TCw1NTpTLDU2OkEsNTc6SSw1ODpELDU5OmssNjA6Uiw2MTpDLDYyOk8sNjM6Tiw2NDpQLDY1OkYsNjY6Qiw2NzpHLDY4OnosNjk6Vyw3MDpaLDcxOmosNzI6b2UsNzM6Syw3NDplZX0sezEzOjcxLDE5OjIwLDIwOjIxLDIxOjIyLDIyOmUsMjM6ciwyNDpuLDI2OmksMjg6YSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpzLDM2OmwsMzc6dSwzODpoLDM5OmYsNDA6ZCw0MTpwLDQzOjIzLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOncsNTE6Xyw1MjpULDUzOkUsNTQ6TCw1NTpTLDU2OkEsNTc6SSw1ODpELDU5OmssNjA6Uiw2MTpDLDYyOk8sNjM6Tiw2NDpQLDY1OkYsNjY6Qiw2NzpHLDY4OnosNjk6Vyw3MDpaLDcxOmosNzI6b2UsNzM6Syw3NDplZX0sezEzOjcyLDE5OjIwLDIwOjIxLDIxOjIyLDIyOmUsMjM6ciwyNDpuLDI2OmksMjg6YSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpzLDM2OmwsMzc6dSwzODpoLDM5OmYsNDA6ZCw0MTpwLDQzOjIzLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOncsNTE6Xyw1MjpULDUzOkUsNTQ6TCw1NTpTLDU2OkEsNTc6SSw1ODpELDU5OmssNjA6Uiw2MTpDLDYyOk8sNjM6Tiw2NDpQLDY1OkYsNjY6Qiw2NzpHLDY4OnosNjk6Vyw3MDpaLDcxOmosNzI6b2UsNzM6Syw3NDplZX0sezEzOjczLDE5OjIwLDIwOjIxLDIxOjIyLDIyOmUsMjM6ciwyNDpuLDI2OmksMjg6YSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpzLDM2OmwsMzc6dSwzODpoLDM5OmYsNDA6ZCw0MTpwLDQzOjIzLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOncsNTE6Xyw1MjpULDUzOkUsNTQ6TCw1NTpTLDU2OkEsNTc6SSw1ODpELDU5OmssNjA6Uiw2MTpDLDYyOk8sNjM6Tiw2NDpQLDY1OkYsNjY6Qiw2NzpHLDY4OnosNjk6Vyw3MDpaLDcxOmosNzI6b2UsNzM6Syw3NDplZX0sezE0OlsxLDc0XX0sdChKLFsyLDEzXSx7NDM6MjMsMjk6NDksMzA6NjEsMzI6NjIsMjA6NzUsMzQ6cywzNjpsLDM3OnUsMzg6aCwzOTpmLDQwOmQsNDE6cCw0NDptLDQ1OmcsNDY6eSw0Nzp2LDQ4OngsNDk6Yiw1MDp3LDUxOl8sNTI6VCw1MzpFLDU0OkwsNTU6Uyw1NjpBLDU3OkksNTg6RCw1OTprLDYwOlIsNjE6Qyw2MjpPLDYzOk4sNjQ6UCw2NTpGLDY2OkIsNjc6Ryw2ODp6LDY5OlcsNzA6Wiw3MTpqLDcyOm9lLDczOkssNzQ6ZWV9KSx0KEosWzIsMTRdKSx0KEgsWzIsMTZdLHsxMjpbMSw3Nl19KSx0KEosWzIsMzZdLHsxMjpbMSw3N119KSx0KHEsWzIsMTldKSx0KHEsWzIsMjBdKSx7MjU6WzEsNzhdfSx7Mjc6WzEsNzldfSx0KHEsWzIsMjNdKSx7MzU6ODAsNzU6ODEsNzY6USw3NzphZSw3OTp1ZSw4MDpjZX0sezM1Ojg2LDc1OjgxLDc2OlEsNzc6YWUsNzk6dWUsODA6Y2V9LHszNTo4Nyw3NTo4MSw3NjpRLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6ODgsNzU6ODEsNzY6USw3NzphZSw3OTp1ZSw4MDpjZX0sezM1Ojg5LDc1OjgxLDc2OlEsNzc6YWUsNzk6dWUsODA6Y2V9LHszNTo5MCw3NTo4MSw3NjpRLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6OTEsNzU6ODEsNzY6USw3NzphZSw3OTp1ZSw4MDpjZX0sezM1OjkyLDc1OjgxLDc2OlEsNzc6YWUsNzk6dWUsODA6Y2V9LHszNTo5Myw3NTo4MSw3NjpRLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6OTQsNzU6ODEsNzY6USw3NzphZSw3OTp1ZSw4MDpjZX0sezM1Ojk1LDc1OjgxLDc2OlEsNzc6YWUsNzk6dWUsODA6Y2V9LHszNTo5Niw3NTo4MSw3NjpRLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6OTcsNzU6ODEsNzY6USw3NzphZSw3OTp1ZSw4MDpjZX0sezM1Ojk4LDc1OjgxLDc2OlEsNzc6YWUsNzk6dWUsODA6Y2V9LHszNTo5OSw3NTo4MSw3NjpRLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6MTAwLDc1OjgxLDc2OlEsNzc6YWUsNzk6dWUsODA6Y2V9LHszNToxMDEsNzU6ODEsNzY6USw3NzphZSw3OTp1ZSw4MDpjZX0sezM1OjEwMiw3NTo4MSw3NjpRLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6MTAzLDc1OjgxLDc2OlEsNzc6YWUsNzk6dWUsODA6Y2V9LHszNToxMDQsNzU6ODEsNzY6USw3NzphZSw3OTp1ZSw4MDpjZX0sdCh0ZSxbMiw1OV0pLHszNToxMDUsNzU6ODEsNzY6USw3NzphZSw3OTp1ZSw4MDpjZX0sezM1OjEwNiw3NTo4MSw3NjpRLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6MTA3LDc1OjgxLDc2OlEsNzc6YWUsNzk6dWUsODA6Y2V9LHszNToxMDgsNzU6ODEsNzY6USw3NzphZSw3OTp1ZSw4MDpjZX0sezM1OjEwOSw3NTo4MSw3NjpRLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6MTEwLDc1OjgxLDc2OlEsNzc6YWUsNzk6dWUsODA6Y2V9LHszNToxMTEsNzU6ODEsNzY6USw3NzphZSw3OTp1ZSw4MDpjZX0sezM1OjExMiw3NTo4MSw3NjpRLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6MTEzLDc1OjgxLDc2OlEsNzc6YWUsNzk6dWUsODA6Y2V9LHszNToxMTQsNzU6ODEsNzY6USw3NzphZSw3OTp1ZSw4MDpjZX0sezM1OjExNSw3NTo4MSw3NjpRLDc3OmFlLDc5OnVlLDgwOmNlfSx7MjA6MTE2LDI5OjQ5LDMwOjYxLDMyOjYyLDM0OnMsMzY6bCwzNzp1LDM4OmgsMzk6Ziw0MDpkLDQxOnAsNDM6MjMsNDQ6bSw0NTpnLDQ2OnksNDc6diw0ODp4LDQ5OmIsNTA6dyw1MTpfLDUyOlQsNTM6RSw1NDpMLDU1OlMsNTY6QSw1NzpJLDU4OkQsNTk6ayw2MDpSLDYxOkMsNjI6Tyw2MzpOLDY0OlAsNjU6Riw2NjpCLDY3OkcsNjg6eiw2OTpXLDcwOlosNzE6aiw3MjpvZSw3MzpLLDc0OmVlfSx7MTI6WzEsMTE4XSwzMzpbMSwxMTddfSx7MzU6MTE5LDc1OjgxLDc2OlEsNzc6YWUsNzk6dWUsODA6Y2V9LHszNToxMjAsNzU6ODEsNzY6USw3NzphZSw3OTp1ZSw4MDpjZX0sezM1OjEyMSw3NTo4MSw3NjpRLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6MTIyLDc1OjgxLDc2OlEsNzc6YWUsNzk6dWUsODA6Y2V9LHszNToxMjMsNzU6ODEsNzY6USw3NzphZSw3OTp1ZSw4MDpjZX0sezM1OjEyNCw3NTo4MSw3NjpRLDc3OmFlLDc5OnVlLDgwOmNlfSx7MzU6MTI1LDc1OjgxLDc2OlEsNzc6YWUsNzk6dWUsODA6Y2V9LHsxNDpbMSwxMjZdfSx7MTQ6WzEsMTI3XX0sezE0OlsxLDEyOF19LHsxNDpbMSwxMjldfSx7MTpbMiw4XX0sdChKLFsyLDE1XSksdChILFsyLDE3XSx7MjE6MjIsMTk6MTMwLDIyOmUsMjM6ciwyNDpuLDI2OmksMjg6YX0pLHQoSixbMiwzN10sezE5OjIwLDIwOjIxLDIxOjIyLDQzOjIzLDI5OjQ5LDMwOjYxLDMyOjYyLDEzOjEzMSwyMjplLDIzOnIsMjQ6biwyNjppLDI4OmEsMzQ6cywzNjpsLDM3OnUsMzg6aCwzOTpmLDQwOmQsNDE6cCw0NDptLDQ1OmcsNDY6eSw0Nzp2LDQ4OngsNDk6Yiw1MDp3LDUxOl8sNTI6VCw1MzpFLDU0OkwsNTU6Uyw1NjpBLDU3OkksNTg6RCw1OTprLDYwOlIsNjE6Qyw2MjpPLDYzOk4sNjQ6UCw2NTpGLDY2OkIsNjc6Ryw2ODp6LDY5OlcsNzA6Wiw3MTpqLDcyOm9lLDczOkssNzQ6ZWV9KSx0KHEsWzIsMjFdKSx0KHEsWzIsMjJdKSx0KHRlLFsyLDM5XSksdChOZSxbMiw3MV0sezc1OjgxLDM1OjEzMiw3NjpRLDc3OmFlLDc5OnVlLDgwOmNlfSksdChzZSxbMiw3M10pLHs3ODpbMSwxMzNdfSx0KHNlLFsyLDc1XSksdChzZSxbMiw3Nl0pLHQodGUsWzIsNDBdKSx0KHRlLFsyLDQxXSksdCh0ZSxbMiw0Ml0pLHQodGUsWzIsNDNdKSx0KHRlLFsyLDQ0XSksdCh0ZSxbMiw0NV0pLHQodGUsWzIsNDZdKSx0KHRlLFsyLDQ3XSksdCh0ZSxbMiw0OF0pLHQodGUsWzIsNDldKSx0KHRlLFsyLDUwXSksdCh0ZSxbMiw1MV0pLHQodGUsWzIsNTJdKSx0KHRlLFsyLDUzXSksdCh0ZSxbMiw1NF0pLHQodGUsWzIsNTVdKSx0KHRlLFsyLDU2XSksdCh0ZSxbMiw1N10pLHQodGUsWzIsNThdKSx0KHRlLFsyLDYwXSksdCh0ZSxbMiw2MV0pLHQodGUsWzIsNjJdKSx0KHRlLFsyLDYzXSksdCh0ZSxbMiw2NF0pLHQodGUsWzIsNjVdKSx0KHRlLFsyLDY2XSksdCh0ZSxbMiw2N10pLHQodGUsWzIsNjhdKSx0KHRlLFsyLDY5XSksdCh0ZSxbMiw3MF0pLHszMToxMzQsNDI6WzEsMTM1XX0sezEyOlsxLDEzNl19LHszMzpbMSwxMzddfSx0KGtlLFsyLDI4XSksdChrZSxbMiwyOV0pLHQoa2UsWzIsMzBdKSx0KGtlLFsyLDMxXSksdChrZSxbMiwzMl0pLHQoa2UsWzIsMzNdKSx0KGtlLFsyLDM0XSksezE6WzIsOV19LHsxOlsyLDEwXX0sezE6WzIsMTFdfSx7MTpbMiwxMl19LHQoSCxbMiwxOF0pLHQoSixbMiwzOF0pLHQoTmUsWzIsNzJdKSx0KHNlLFsyLDc0XSksdCh0ZSxbMiwyNF0pLHQodGUsWzIsMzVdKSx0KFJlLFsyLDI1XSksdChSZSxbMiwyNl0sezEyOlsxLDEzOF19KSx0KFJlLFsyLDI3XSldLGRlZmF1bHRBY3Rpb25zOnsyOlsyLDFdLDM6WzIsMl0sNDpbMiw3XSw1OlsyLDNdLDY6WzIsNF0sNzpbMiw1XSw4OlsyLDZdLDc0OlsyLDhdLDEyNjpbMiw5XSwxMjc6WzIsMTBdLDEyODpbMiwxMV0sMTI5OlsyLDEyXX0scGFyc2VFcnJvcjpvKGZ1bmN0aW9uKHllLFgpe2lmKFgucmVjb3ZlcmFibGUpdGhpcy50cmFjZSh5ZSk7ZWxzZXt2YXIgZmU9bmV3IEVycm9yKHllKTt0aHJvdyBmZS5oYXNoPVgsZmV9fSwicGFyc2VFcnJvciIpLHBhcnNlOm8oZnVuY3Rpb24oeWUpe3ZhciBYPXRoaXMsZmU9WzBdLGhlPVtdLGdlPVtudWxsXSxuZT1bXSx2ZT10aGlzLnRhYmxlLFU9IiIsVGU9MCxpZT0wLEVlPTAsQWU9MixHZT0xLEJlPW5lLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLG1lPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksSGU9e3l5Ont9fTtmb3IodmFyIE9lIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksT2UpJiYoSGUueXlbT2VdPXRoaXMueXlbT2VdKTttZS5zZXRJbnB1dCh5ZSxIZS55eSksSGUueXkubGV4ZXI9bWUsSGUueXkucGFyc2VyPXRoaXMsdHlwZW9mIG1lLnl5bGxvYz4idSImJihtZS55eWxsb2M9e30pO3ZhciBldD1tZS55eWxsb2M7bmUucHVzaChldCk7dmFyIGJ0PW1lLm9wdGlvbnMmJm1lLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBIZS55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1IZS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBrdChCdCl7ZmUubGVuZ3RoPWZlLmxlbmd0aC0yKkJ0LGdlLmxlbmd0aD1nZS5sZW5ndGgtQnQsbmUubGVuZ3RoPW5lLmxlbmd0aC1CdH1vKGt0LCJwb3BTdGFjayIpO2Z1bmN0aW9uIHZ0KCl7dmFyIEJ0O3JldHVybiBCdD1oZS5wb3AoKXx8bWUubGV4KCl8fEdlLHR5cGVvZiBCdCE9Im51bWJlciImJihCdCBpbnN0YW5jZW9mIEFycmF5JiYoaGU9QnQsQnQ9aGUucG9wKCkpLEJ0PVguc3ltYm9sc19bQnRdfHxCdCksQnR9byh2dCwibGV4Iik7Zm9yKHZhciBydCx5dCxVZSx0dCxodCxFdCxlcj17fSxkdCxKZSxjdCxDdDs7KXtpZihVZT1mZVtmZS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tVZV0/dHQ9dGhpcy5kZWZhdWx0QWN0aW9uc1tVZV06KChydD09PW51bGx8fHR5cGVvZiBydD4idSIpJiYocnQ9dnQoKSksdHQ9dmVbVWVdJiZ2ZVtVZV1bcnRdKSx0eXBlb2YgdHQ+InUifHwhdHQubGVuZ3RofHwhdHRbMF0pe3ZhciBwdD0iIjtDdD1bXTtmb3IoZHQgaW4gdmVbVWVdKXRoaXMudGVybWluYWxzX1tkdF0mJmR0PkFlJiZDdC5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bZHRdKyInIik7bWUuc2hvd1Bvc2l0aW9uP3B0PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKFRlKzEpK2A6CmArbWUuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtDdC5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW3J0XXx8cnQpKyInIjpwdD0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhUZSsxKSsiOiBVbmV4cGVjdGVkICIrKHJ0PT1HZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tydF18fHJ0KSsiJyIpLHRoaXMucGFyc2VFcnJvcihwdCx7dGV4dDptZS5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bcnRdfHxydCxsaW5lOm1lLnl5bGluZW5vLGxvYzpldCxleHBlY3RlZDpDdH0pfWlmKHR0WzBdaW5zdGFuY2VvZiBBcnJheSYmdHQubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitVZSsiLCB0b2tlbjogIitydCk7c3dpdGNoKHR0WzBdKXtjYXNlIDE6ZmUucHVzaChydCksZ2UucHVzaChtZS55eXRleHQpLG5lLnB1c2gobWUueXlsbG9jKSxmZS5wdXNoKHR0WzFdKSxydD1udWxsLHl0PyhydD15dCx5dD1udWxsKTooaWU9bWUueXlsZW5nLFU9bWUueXl0ZXh0LFRlPW1lLnl5bGluZW5vLGV0PW1lLnl5bGxvYyxFZT4wJiZFZS0tKTticmVhaztjYXNlIDI6aWYoSmU9dGhpcy5wcm9kdWN0aW9uc19bdHRbMV1dWzFdLGVyLiQ9Z2VbZ2UubGVuZ3RoLUplXSxlci5fJD17Zmlyc3RfbGluZTpuZVtuZS5sZW5ndGgtKEplfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6bmVbbmUubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46bmVbbmUubGVuZ3RoLShKZXx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuZVtuZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGJ0JiYoZXIuXyQucmFuZ2U9W25lW25lLmxlbmd0aC0oSmV8fDEpXS5yYW5nZVswXSxuZVtuZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxFdD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoZXIsW1UsaWUsVGUsSGUueXksdHRbMV0sZ2UsbmVdLmNvbmNhdChCZSkpLHR5cGVvZiBFdDwidSIpcmV0dXJuIEV0O0plJiYoZmU9ZmUuc2xpY2UoMCwtMSpKZSoyKSxnZT1nZS5zbGljZSgwLC0xKkplKSxuZT1uZS5zbGljZSgwLC0xKkplKSksZmUucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t0dFsxXV1bMF0pLGdlLnB1c2goZXIuJCksbmUucHVzaChlci5fJCksY3Q9dmVbZmVbZmUubGVuZ3RoLTJdXVtmZVtmZS5sZW5ndGgtMV1dLGZlLnB1c2goY3QpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9LCJwYXJzZSIpfSxQZT1mdW5jdGlvbigpe3ZhciAkZT17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKFgsZmUpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoWCxmZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoWCl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbih5ZSxYKXtyZXR1cm4gdGhpcy55eT1YfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD15ZSx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30sInNldElucHV0IiksaW5wdXQ6byhmdW5jdGlvbigpe3ZhciB5ZT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9eWUsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXllLHRoaXMubWF0Y2hlZCs9eWU7dmFyIFg9eWUubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBYPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx5ZX0sImlucHV0IiksdW5wdXQ6byhmdW5jdGlvbih5ZSl7dmFyIFg9eWUubGVuZ3RoLGZlPXllLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9eWUrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLVgpLHRoaXMub2Zmc2V0LT1YO3ZhciBoZT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxmZS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPWZlLmxlbmd0aC0xKTt2YXIgZ2U9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmZlPyhmZS5sZW5ndGg9PT1oZS5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK2hlW2hlLmxlbmd0aC1mZS5sZW5ndGhdLmxlbmd0aC1mZVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLVh9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bZ2VbMF0sZ2VbMF0rdGhpcy55eWxlbmctWF0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSwidW5wdXQiKSxtb3JlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSwibW9yZSIpLHJlamVjdDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSwicmVqZWN0IiksbGVzczpvKGZ1bmN0aW9uKHllKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoeWUpKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciB5ZT10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHllLmxlbmd0aD4yMD8iLi4uIjoiIikreWUuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgeWU9dGhpcy5tYXRjaDtyZXR1cm4geWUubGVuZ3RoPDIwJiYoeWUrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXllLmxlbmd0aCkpLCh5ZS5zdWJzdHIoMCwyMCkrKHllLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIHllPXRoaXMucGFzdElucHV0KCksWD1uZXcgQXJyYXkoeWUubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4geWUrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK1grIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKHllLFgpe3ZhciBmZSxoZSxnZTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoZ2U9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoZ2UueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksaGU9eWVbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLGhlJiYodGhpcy55eWxpbmVubys9aGUubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46aGU/aGVbaGUubGVuZ3RoLTFdLmxlbmd0aC1oZVtoZS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit5ZVswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz15ZVswXSx0aGlzLm1hdGNoKz15ZVswXSx0aGlzLm1hdGNoZXM9eWUsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoeWVbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXllWzBdLGZlPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLFgsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksZmUpcmV0dXJuIGZlO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBuZSBpbiBnZSl0aGlzW25lXT1nZVtuZV07cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIHllLFgsZmUsaGU7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgZ2U9dGhpcy5fY3VycmVudFJ1bGVzKCksbmU9MDtuZTxnZS5sZW5ndGg7bmUrKylpZihmZT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2dlW25lXV0pLGZlJiYoIVh8fGZlWzBdLmxlbmd0aD5YWzBdLmxlbmd0aCkpe2lmKFg9ZmUsaGU9bmUsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoeWU9dGhpcy50ZXN0X21hdGNoKGZlLGdlW25lXSkseWUhPT0hMSlyZXR1cm4geWU7aWYodGhpcy5fYmFja3RyYWNrKXtYPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIFg/KHllPXRoaXMudGVzdF9tYXRjaChYLGdlW2hlXSkseWUhPT0hMT95ZTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBYPXRoaXMubmV4dCgpO3JldHVybiBYfHx0aGlzLmxleCgpfSwibGV4IiksYmVnaW46byhmdW5jdGlvbihYKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goWCl9LCJiZWdpbiIpLHBvcFN0YXRlOm8oZnVuY3Rpb24oKXt2YXIgWD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBYPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24oWCl7cmV0dXJuIFg9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhYfHwwKSxYPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbWF06IklOSVRJQUwifSwidG9wU3RhdGUiKSxwdXNoU3RhdGU6byhmdW5jdGlvbihYKXt0aGlzLmJlZ2luKFgpfSwicHVzaFN0YXRlIiksc3RhdGVTdGFja1NpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sInN0YXRlU3RhY2tTaXplIiksb3B0aW9uczp7fSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oWCxmZSxoZSxnZSl7dmFyIG5lPWdlO3N3aXRjaChoZSl7Y2FzZSAwOnJldHVybiA2O2Nhc2UgMTpyZXR1cm4gNztjYXNlIDI6cmV0dXJuIDg7Y2FzZSAzOnJldHVybiA5O2Nhc2UgNDpyZXR1cm4gMjI7Y2FzZSA1OnJldHVybiAyMztjYXNlIDY6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDI0O2JyZWFrO2Nhc2UgNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2JyZWFrO2Nhc2UgODpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMjY7YnJlYWs7Y2FzZSA5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7YnJlYWs7Y2FzZSAxMDp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAxMTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMjpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAxMzpicmVhaztjYXNlIDE0OmM7YnJlYWs7Y2FzZSAxNTpyZXR1cm4gMTI7Y2FzZSAxNjpicmVhaztjYXNlIDE3OnJldHVybiAxMTtjYXNlIDE4OnJldHVybiAxNTtjYXNlIDE5OnJldHVybiAxNjtjYXNlIDIwOnJldHVybiAxNztjYXNlIDIxOnJldHVybiAxODtjYXNlIDIyOnJldHVybiB0aGlzLmJlZ2luKCJwZXJzb25fZXh0IiksNDU7YnJlYWs7Y2FzZSAyMzpyZXR1cm4gdGhpcy5iZWdpbigicGVyc29uIiksNDQ7YnJlYWs7Y2FzZSAyNDpyZXR1cm4gdGhpcy5iZWdpbigic3lzdGVtX2V4dF9xdWV1ZSIpLDUxO2JyZWFrO2Nhc2UgMjU6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9leHRfZGIiKSw1MDticmVhaztjYXNlIDI2OnJldHVybiB0aGlzLmJlZ2luKCJzeXN0ZW1fZXh0IiksNDk7YnJlYWs7Y2FzZSAyNzpyZXR1cm4gdGhpcy5iZWdpbigic3lzdGVtX3F1ZXVlIiksNDg7YnJlYWs7Y2FzZSAyODpyZXR1cm4gdGhpcy5iZWdpbigic3lzdGVtX2RiIiksNDc7YnJlYWs7Y2FzZSAyOTpyZXR1cm4gdGhpcy5iZWdpbigic3lzdGVtIiksNDY7YnJlYWs7Y2FzZSAzMDpyZXR1cm4gdGhpcy5iZWdpbigiYm91bmRhcnkiKSwzNzticmVhaztjYXNlIDMxOnJldHVybiB0aGlzLmJlZ2luKCJlbnRlcnByaXNlX2JvdW5kYXJ5IiksMzQ7YnJlYWs7Y2FzZSAzMjpyZXR1cm4gdGhpcy5iZWdpbigic3lzdGVtX2JvdW5kYXJ5IiksMzY7YnJlYWs7Y2FzZSAzMzpyZXR1cm4gdGhpcy5iZWdpbigiY29udGFpbmVyX2V4dF9xdWV1ZSIpLDU3O2JyZWFrO2Nhc2UgMzQ6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9leHRfZGIiKSw1NjticmVhaztjYXNlIDM1OnJldHVybiB0aGlzLmJlZ2luKCJjb250YWluZXJfZXh0IiksNTU7YnJlYWs7Y2FzZSAzNjpyZXR1cm4gdGhpcy5iZWdpbigiY29udGFpbmVyX3F1ZXVlIiksNTQ7YnJlYWs7Y2FzZSAzNzpyZXR1cm4gdGhpcy5iZWdpbigiY29udGFpbmVyX2RiIiksNTM7YnJlYWs7Y2FzZSAzODpyZXR1cm4gdGhpcy5iZWdpbigiY29udGFpbmVyIiksNTI7YnJlYWs7Y2FzZSAzOTpyZXR1cm4gdGhpcy5iZWdpbigiY29udGFpbmVyX2JvdW5kYXJ5IiksMzg7YnJlYWs7Y2FzZSA0MDpyZXR1cm4gdGhpcy5iZWdpbigiY29tcG9uZW50X2V4dF9xdWV1ZSIpLDYzO2JyZWFrO2Nhc2UgNDE6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudF9leHRfZGIiKSw2MjticmVhaztjYXNlIDQyOnJldHVybiB0aGlzLmJlZ2luKCJjb21wb25lbnRfZXh0IiksNjE7YnJlYWs7Y2FzZSA0MzpyZXR1cm4gdGhpcy5iZWdpbigiY29tcG9uZW50X3F1ZXVlIiksNjA7YnJlYWs7Y2FzZSA0NDpyZXR1cm4gdGhpcy5iZWdpbigiY29tcG9uZW50X2RiIiksNTk7YnJlYWs7Y2FzZSA0NTpyZXR1cm4gdGhpcy5iZWdpbigiY29tcG9uZW50IiksNTg7YnJlYWs7Y2FzZSA0NjpyZXR1cm4gdGhpcy5iZWdpbigibm9kZSIpLDM5O2JyZWFrO2Nhc2UgNDc6cmV0dXJuIHRoaXMuYmVnaW4oIm5vZGUiKSwzOTticmVhaztjYXNlIDQ4OnJldHVybiB0aGlzLmJlZ2luKCJub2RlX2wiKSw0MDticmVhaztjYXNlIDQ5OnJldHVybiB0aGlzLmJlZ2luKCJub2RlX3IiKSw0MTticmVhaztjYXNlIDUwOnJldHVybiB0aGlzLmJlZ2luKCJyZWwiKSw2NDticmVhaztjYXNlIDUxOnJldHVybiB0aGlzLmJlZ2luKCJiaXJlbCIpLDY1O2JyZWFrO2Nhc2UgNTI6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF91IiksNjY7YnJlYWs7Y2FzZSA1MzpyZXR1cm4gdGhpcy5iZWdpbigicmVsX3UiKSw2NjticmVhaztjYXNlIDU0OnJldHVybiB0aGlzLmJlZ2luKCJyZWxfZCIpLDY3O2JyZWFrO2Nhc2UgNTU6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9kIiksNjc7YnJlYWs7Y2FzZSA1NjpyZXR1cm4gdGhpcy5iZWdpbigicmVsX2wiKSw2ODticmVhaztjYXNlIDU3OnJldHVybiB0aGlzLmJlZ2luKCJyZWxfbCIpLDY4O2JyZWFrO2Nhc2UgNTg6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9yIiksNjk7YnJlYWs7Y2FzZSA1OTpyZXR1cm4gdGhpcy5iZWdpbigicmVsX3IiKSw2OTticmVhaztjYXNlIDYwOnJldHVybiB0aGlzLmJlZ2luKCJyZWxfYiIpLDcwO2JyZWFrO2Nhc2UgNjE6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9pbmRleCIpLDcxO2JyZWFrO2Nhc2UgNjI6cmV0dXJuIHRoaXMuYmVnaW4oInVwZGF0ZV9lbF9zdHlsZSIpLDcyO2JyZWFrO2Nhc2UgNjM6cmV0dXJuIHRoaXMuYmVnaW4oInVwZGF0ZV9yZWxfc3R5bGUiKSw3MzticmVhaztjYXNlIDY0OnJldHVybiB0aGlzLmJlZ2luKCJ1cGRhdGVfbGF5b3V0X2NvbmZpZyIpLDc0O2JyZWFrO2Nhc2UgNjU6cmV0dXJuIkVPRl9JTl9TVFJVQ1QiO2Nhc2UgNjY6cmV0dXJuIHRoaXMuYmVnaW4oImF0dHJpYnV0ZSIpLCJBVFRSSUJVVEVfRU1QVFkiO2JyZWFrO2Nhc2UgNjc6dGhpcy5iZWdpbigiYXR0cmlidXRlIik7YnJlYWs7Y2FzZSA2ODp0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNjk6cmV0dXJuIDgwO2Nhc2UgNzA6YnJlYWs7Y2FzZSA3MTpyZXR1cm4gODA7Y2FzZSA3Mjp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDczOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDc0OnJldHVybiJTVFIiO2Nhc2UgNzU6dGhpcy5iZWdpbigic3RyaW5nX2t2Iik7YnJlYWs7Y2FzZSA3NjpyZXR1cm4gdGhpcy5iZWdpbigic3RyaW5nX2t2X2tleSIpLCJTVFJfS0VZIjticmVhaztjYXNlIDc3OnRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJzdHJpbmdfa3ZfdmFsdWUiKTticmVhaztjYXNlIDc4OnJldHVybiJTVFJfVkFMVUUiO2Nhc2UgNzk6dGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDgwOnJldHVybiJTVFIiO2Nhc2UgODE6cmV0dXJuIkxCUkFDRSI7Y2FzZSA4MjpyZXR1cm4iUkJSQUNFIjtjYXNlIDgzOnJldHVybiJTUEFDRSI7Y2FzZSA4NDpyZXR1cm4iRU9MIjtjYXNlIDg1OnJldHVybiAxNH19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK1JMW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS8sL14oPzp0aXRsZVxzW14jXG47XSspLywvXig/OmFjY0Rlc2NyaXB0aW9uXHNbXiNcbjtdKykvLC9eKD86YWNjVGl0bGVccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKlx7XHMqKS8sL14oPzpbXH1dKS8sL14oPzpbXlx9XSopLywvXig/OiUlKD8hXHspKlteXG5dKihccj9cbj8pKykvLC9eKD86JSVbXlxuXSooXHI/XG4pKikvLC9eKD86XHMqKFxyP1xuKSspLywvXig/OlxzKykvLC9eKD86QzRDb250ZXh0XGIpLywvXig/OkM0Q29udGFpbmVyXGIpLywvXig/OkM0Q29tcG9uZW50XGIpLywvXig/OkM0RHluYW1pY1xiKS8sL14oPzpDNERlcGxveW1lbnRcYikvLC9eKD86UGVyc29uX0V4dFxiKS8sL14oPzpQZXJzb25cYikvLC9eKD86U3lzdGVtUXVldWVfRXh0XGIpLywvXig/OlN5c3RlbURiX0V4dFxiKS8sL14oPzpTeXN0ZW1fRXh0XGIpLywvXig/OlN5c3RlbVF1ZXVlXGIpLywvXig/OlN5c3RlbURiXGIpLywvXig/OlN5c3RlbVxiKS8sL14oPzpCb3VuZGFyeVxiKS8sL14oPzpFbnRlcnByaXNlX0JvdW5kYXJ5XGIpLywvXig/OlN5c3RlbV9Cb3VuZGFyeVxiKS8sL14oPzpDb250YWluZXJRdWV1ZV9FeHRcYikvLC9eKD86Q29udGFpbmVyRGJfRXh0XGIpLywvXig/OkNvbnRhaW5lcl9FeHRcYikvLC9eKD86Q29udGFpbmVyUXVldWVcYikvLC9eKD86Q29udGFpbmVyRGJcYikvLC9eKD86Q29udGFpbmVyXGIpLywvXig/OkNvbnRhaW5lcl9Cb3VuZGFyeVxiKS8sL14oPzpDb21wb25lbnRRdWV1ZV9FeHRcYikvLC9eKD86Q29tcG9uZW50RGJfRXh0XGIpLywvXig/OkNvbXBvbmVudF9FeHRcYikvLC9eKD86Q29tcG9uZW50UXVldWVcYikvLC9eKD86Q29tcG9uZW50RGJcYikvLC9eKD86Q29tcG9uZW50XGIpLywvXig/OkRlcGxveW1lbnRfTm9kZVxiKS8sL14oPzpOb2RlXGIpLywvXig/Ok5vZGVfTFxiKS8sL14oPzpOb2RlX1JcYikvLC9eKD86UmVsXGIpLywvXig/OkJpUmVsXGIpLywvXig/OlJlbF9VcFxiKS8sL14oPzpSZWxfVVxiKS8sL14oPzpSZWxfRG93blxiKS8sL14oPzpSZWxfRFxiKS8sL14oPzpSZWxfTGVmdFxiKS8sL14oPzpSZWxfTFxiKS8sL14oPzpSZWxfUmlnaHRcYikvLC9eKD86UmVsX1JcYikvLC9eKD86UmVsX0JhY2tcYikvLC9eKD86UmVsSW5kZXhcYikvLC9eKD86VXBkYXRlRWxlbWVudFN0eWxlXGIpLywvXig/OlVwZGF0ZVJlbFN0eWxlXGIpLywvXig/OlVwZGF0ZUxheW91dENvbmZpZ1xiKS8sL14oPzokKS8sL14oPzpbKF1bIF0qWyxdKS8sL14oPzpbKF0pLywvXig/OlspXSkvLC9eKD86LCwpLywvXig/OiwpLywvXig/OlsgXSpbIl1bIl0pLywvXig/OlsgXSpbIl0pLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OlsgXSpbXCRdKS8sL14oPzpbXj1dKikvLC9eKD86Wz1dWyBdKlsiXSkvLC9eKD86W14iXSspLywvXig/OlsiXSkvLC9eKD86W14sXSspLywvXig/Olx7KS8sL14oPzpcfSkvLC9eKD86W1xzXSspLywvXig/OltcblxyXSspLywvXig/OiQpL10sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzExLDEyXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzldLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbN10saW5jbHVzaXZlOiExfSxzdHJpbmdfa3ZfdmFsdWU6e3J1bGVzOls3OCw3OV0saW5jbHVzaXZlOiExfSxzdHJpbmdfa3Zfa2V5OntydWxlczpbNzddLGluY2x1c2l2ZTohMX0sc3RyaW5nX2t2OntydWxlczpbNzZdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbNzMsNzRdLGluY2x1c2l2ZTohMX0sYXR0cmlidXRlOntydWxlczpbNjgsNjksNzAsNzEsNzIsNzUsODBdLGluY2x1c2l2ZTohMX0sdXBkYXRlX2xheW91dF9jb25maWc6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSx1cGRhdGVfcmVsX3N0eWxlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sdXBkYXRlX2VsX3N0eWxlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scmVsX2I6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxyZWxfcjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHJlbF9sOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scmVsX2Q6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxyZWxfdTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHJlbF9iaTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxyZWw6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxub2RlX3I6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxub2RlX2w6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxub2RlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0saW5kZXg6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0scmVsX2luZGV4OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sY29tcG9uZW50X2V4dF9xdWV1ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxjb21wb25lbnRfZXh0X2RiOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sY29tcG9uZW50X2V4dDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudF9xdWV1ZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudF9kYjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9ib3VuZGFyeTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9leHRfcXVldWU6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb250YWluZXJfZXh0X2RiOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sY29udGFpbmVyX2V4dDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9xdWV1ZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9kYjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGJpcmVsOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2JvdW5kYXJ5OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sZW50ZXJwcmlzZV9ib3VuZGFyeTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGJvdW5kYXJ5OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2V4dF9xdWV1ZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHN5c3RlbV9leHRfZGI6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxzeXN0ZW1fZXh0OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX3F1ZXVlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2RiOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scGVyc29uX2V4dDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHBlcnNvbjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNSw2LDgsMTAsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsODEsODIsODMsODQsODVdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gJGV9KCk7Q2UubGV4ZXI9UGU7ZnVuY3Rpb24gSWUoKXt0aGlzLnl5PXt9fXJldHVybiBvKEllLCJQYXJzZXIiKSxJZS5wcm90b3R5cGU9Q2UsQ2UuUGFyc2VyPUllLG5ldyBJZX0oKTtleS5wYXJzZXI9ZXk7b3o9ZXl9KTt2YXIgSFMsVm4sZ3A9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIUz1vKCh0LGUse2RlcHRoOnI9MixjbG9iYmVyOm49ITF9PXt9KT0+e2xldCBpPXtkZXB0aDpyLGNsb2JiZXI6bn07cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJiFBcnJheS5pc0FycmF5KHQpPyhlLmZvckVhY2goYT0+SFModCxhLGkpKSx0KTpBcnJheS5pc0FycmF5KGUpJiZBcnJheS5pc0FycmF5KHQpPyhlLmZvckVhY2goYT0+e3QuaW5jbHVkZXMoYSl8fHQucHVzaChhKX0pLHQpOnQ9PT12b2lkIDB8fHI8PTA/dCE9bnVsbCYmdHlwZW9mIHQ9PSJvYmplY3QiJiZ0eXBlb2YgZT09Im9iamVjdCI/T2JqZWN0LmFzc2lnbih0LGUpOmU6KGUhPT12b2lkIDAmJnR5cGVvZiB0PT0ib2JqZWN0IiYmdHlwZW9mIGU9PSJvYmplY3QiJiZPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGE9Pnt0eXBlb2YgZVthXT09Im9iamVjdCImJih0W2FdPT09dm9pZCAwfHx0eXBlb2YgdFthXT09Im9iamVjdCIpPyh0W2FdPT09dm9pZCAwJiYodFthXT1BcnJheS5pc0FycmF5KGVbYV0pP1tdOnt9KSx0W2FdPUhTKHRbYV0sZVthXSx7ZGVwdGg6ci0xLGNsb2JiZXI6bn0pKToobnx8dHlwZW9mIHRbYV0hPSJvYmplY3QiJiZ0eXBlb2YgZVthXSE9Im9iamVjdCIpJiYodFthXT1lW2FdKX0pLHQpfSwiYXNzaWduV2l0aERlcHRoIiksVm49SFN9KTt2YXIgSmIsbHosY3o9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtKYj17bWluOntyOjAsZzowLGI6MCxzOjAsbDowLGE6MH0sbWF4OntyOjI1NSxnOjI1NSxiOjI1NSxoOjM2MCxzOjEwMCxsOjEwMCxhOjF9LGNsYW1wOntyOm8odD0+dD49MjU1PzI1NTp0PDA/MDp0LCJyIiksZzpvKHQ9PnQ+PTI1NT8yNTU6dDwwPzA6dCwiZyIpLGI6byh0PT50Pj0yNTU/MjU1OnQ8MD8wOnQsImIiKSxoOm8odD0+dCUzNjAsImgiKSxzOm8odD0+dD49MTAwPzEwMDp0PDA/MDp0LCJzIiksbDpvKHQ9PnQ+PTEwMD8xMDA6dDwwPzA6dCwibCIpLGE6byh0PT50Pj0xPzE6dDwwPzA6dCwiYSIpfSx0b0xpbmVhcjpvKHQ9PntsZXQgZT10LzI1NTtyZXR1cm4gdD4uMDM5Mjg/TWF0aC5wb3coKGUrLjA1NSkvMS4wNTUsMi40KTplLzEyLjkyfSwidG9MaW5lYXIiKSxodWUycmdiOm8oKHQsZSxyKT0+KHI8MCYmKHIrPTEpLHI+MSYmKHItPTEpLHI8LjE2NjY2NjY2NjY2NjY2NjY2P3QrKGUtdCkqNipyOnI8LjU/ZTpyPC42NjY2NjY2NjY2NjY2NjY2P3QrKGUtdCkqKC42NjY2NjY2NjY2NjY2NjY2LXIpKjY6dCksImh1ZTJyZ2IiKSxoc2wycmdiOm8oKHtoOnQsczplLGw6cn0sbik9PntpZighZSlyZXR1cm4gcioyLjU1O3QvPTM2MCxlLz0xMDAsci89MTAwO2xldCBpPXI8LjU/ciooMStlKTpyK2UtciplLGE9MipyLWk7c3dpdGNoKG4pe2Nhc2UiciI6cmV0dXJuIEpiLmh1ZTJyZ2IoYSxpLHQrLjMzMzMzMzMzMzMzMzMzMzMpKjI1NTtjYXNlImciOnJldHVybiBKYi5odWUycmdiKGEsaSx0KSoyNTU7Y2FzZSJiIjpyZXR1cm4gSmIuaHVlMnJnYihhLGksdC0uMzMzMzMzMzMzMzMzMzMzMykqMjU1fX0sImhzbDJyZ2IiKSxyZ2IyaHNsOm8oKHtyOnQsZzplLGI6cn0sbik9Pnt0Lz0yNTUsZS89MjU1LHIvPTI1NTtsZXQgaT1NYXRoLm1heCh0LGUsciksYT1NYXRoLm1pbih0LGUscikscz0oaSthKS8yO2lmKG49PT0ibCIpcmV0dXJuIHMqMTAwO2lmKGk9PT1hKXJldHVybiAwO2xldCBsPWktYSx1PXM+LjU/bC8oMi1pLWEpOmwvKGkrYSk7aWYobj09PSJzIilyZXR1cm4gdSoxMDA7c3dpdGNoKGkpe2Nhc2UgdDpyZXR1cm4oKGUtcikvbCsoZTxyPzY6MCkpKjYwO2Nhc2UgZTpyZXR1cm4oKHItdCkvbCsyKSo2MDtjYXNlIHI6cmV0dXJuKCh0LWUpL2wrNCkqNjA7ZGVmYXVsdDpyZXR1cm4tMX19LCJyZ2IyaHNsIil9LGx6PUpifSk7dmFyIE14ZSx1eixoej1NKCgpPT57InVzZSBzdHJpY3QiO014ZT17Y2xhbXA6bygodCxlLHIpPT5lPnI/TWF0aC5taW4oZSxNYXRoLm1heChyLHQpKTpNYXRoLm1pbihyLE1hdGgubWF4KGUsdCkpLCJjbGFtcCIpLHJvdW5kOm8odD0+TWF0aC5yb3VuZCh0KjFlMTApLzFlMTAsInJvdW5kIil9LHV6PU14ZX0pO3ZhciBJeGUsZnosZHo9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtJeGU9e2RlYzJoZXg6byh0PT57bGV0IGU9TWF0aC5yb3VuZCh0KS50b1N0cmluZygxNik7cmV0dXJuIGUubGVuZ3RoPjE/ZTpgMCR7ZX1gfSwiZGVjMmhleCIpfSxmej1JeGV9KTt2YXIgT3hlLFl0LGFjPU0oKCk9PnsidXNlIHN0cmljdCI7Y3ooKTtoeigpO2R6KCk7T3hlPXtjaGFubmVsOmx6LGxhbmc6dXosdW5pdDpmen0sWXQ9T3hlfSk7dmFyIG91LFBpLHR5PU0oKCk9PnsidXNlIHN0cmljdCI7YWMoKTtvdT17fTtmb3IobGV0IHQ9MDt0PD0yNTU7dCsrKW91W3RdPVl0LnVuaXQuZGVjMmhleCh0KTtQaT17QUxMOjAsUkdCOjEsSFNMOjJ9fSk7dmFyIFdTLHB6LG16PU0oKCk9PnsidXNlIHN0cmljdCI7dHkoKTtXUz1jbGFzc3tzdGF0aWN7byh0aGlzLCJUeXBlIil9Y29uc3RydWN0b3IoKXt0aGlzLnR5cGU9UGkuQUxMfWdldCgpe3JldHVybiB0aGlzLnR5cGV9c2V0KGUpe2lmKHRoaXMudHlwZSYmdGhpcy50eXBlIT09ZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjaGFuZ2UgYm90aCBSR0IgYW5kIEhTTCBjaGFubmVscyBhdCB0aGUgc2FtZSB0aW1lIik7dGhpcy50eXBlPWV9cmVzZXQoKXt0aGlzLnR5cGU9UGkuQUxMfWlzKGUpe3JldHVybiB0aGlzLnR5cGU9PT1lfX0scHo9V1N9KTt2YXIgWVMsZ3oseXo9TSgoKT0+eyJ1c2Ugc3RyaWN0IjthYygpO216KCk7dHkoKTtZUz1jbGFzc3tzdGF0aWN7byh0aGlzLCJDaGFubmVscyIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy5jb2xvcj1yLHRoaXMuY2hhbmdlZD0hMSx0aGlzLmRhdGE9ZSx0aGlzLnR5cGU9bmV3IHB6fXNldChlLHIpe3JldHVybiB0aGlzLmNvbG9yPXIsdGhpcy5jaGFuZ2VkPSExLHRoaXMuZGF0YT1lLHRoaXMudHlwZS50eXBlPVBpLkFMTCx0aGlzfV9lbnN1cmVIU0woKXtsZXQgZT10aGlzLmRhdGEse2g6cixzOm4sbDppfT1lO3I9PT12b2lkIDAmJihlLmg9WXQuY2hhbm5lbC5yZ2IyaHNsKGUsImgiKSksbj09PXZvaWQgMCYmKGUucz1ZdC5jaGFubmVsLnJnYjJoc2woZSwicyIpKSxpPT09dm9pZCAwJiYoZS5sPVl0LmNoYW5uZWwucmdiMmhzbChlLCJsIikpfV9lbnN1cmVSR0IoKXtsZXQgZT10aGlzLmRhdGEse3IsZzpuLGI6aX09ZTtyPT09dm9pZCAwJiYoZS5yPVl0LmNoYW5uZWwuaHNsMnJnYihlLCJyIikpLG49PT12b2lkIDAmJihlLmc9WXQuY2hhbm5lbC5oc2wycmdiKGUsImciKSksaT09PXZvaWQgMCYmKGUuYj1ZdC5jaGFubmVsLmhzbDJyZ2IoZSwiYiIpKX1nZXQgcigpe2xldCBlPXRoaXMuZGF0YSxyPWUucjtyZXR1cm4hdGhpcy50eXBlLmlzKFBpLkhTTCkmJnIhPT12b2lkIDA/cjoodGhpcy5fZW5zdXJlSFNMKCksWXQuY2hhbm5lbC5oc2wycmdiKGUsInIiKSl9Z2V0IGcoKXtsZXQgZT10aGlzLmRhdGEscj1lLmc7cmV0dXJuIXRoaXMudHlwZS5pcyhQaS5IU0wpJiZyIT09dm9pZCAwP3I6KHRoaXMuX2Vuc3VyZUhTTCgpLFl0LmNoYW5uZWwuaHNsMnJnYihlLCJnIikpfWdldCBiKCl7bGV0IGU9dGhpcy5kYXRhLHI9ZS5iO3JldHVybiF0aGlzLnR5cGUuaXMoUGkuSFNMKSYmciE9PXZvaWQgMD9yOih0aGlzLl9lbnN1cmVIU0woKSxZdC5jaGFubmVsLmhzbDJyZ2IoZSwiYiIpKX1nZXQgaCgpe2xldCBlPXRoaXMuZGF0YSxyPWUuaDtyZXR1cm4hdGhpcy50eXBlLmlzKFBpLlJHQikmJnIhPT12b2lkIDA/cjoodGhpcy5fZW5zdXJlUkdCKCksWXQuY2hhbm5lbC5yZ2IyaHNsKGUsImgiKSl9Z2V0IHMoKXtsZXQgZT10aGlzLmRhdGEscj1lLnM7cmV0dXJuIXRoaXMudHlwZS5pcyhQaS5SR0IpJiZyIT09dm9pZCAwP3I6KHRoaXMuX2Vuc3VyZVJHQigpLFl0LmNoYW5uZWwucmdiMmhzbChlLCJzIikpfWdldCBsKCl7bGV0IGU9dGhpcy5kYXRhLHI9ZS5sO3JldHVybiF0aGlzLnR5cGUuaXMoUGkuUkdCKSYmciE9PXZvaWQgMD9yOih0aGlzLl9lbnN1cmVSR0IoKSxZdC5jaGFubmVsLnJnYjJoc2woZSwibCIpKX1nZXQgYSgpe3JldHVybiB0aGlzLmRhdGEuYX1zZXQgcihlKXt0aGlzLnR5cGUuc2V0KFBpLlJHQiksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5yPWV9c2V0IGcoZSl7dGhpcy50eXBlLnNldChQaS5SR0IpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEuZz1lfXNldCBiKGUpe3RoaXMudHlwZS5zZXQoUGkuUkdCKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmI9ZX1zZXQgaChlKXt0aGlzLnR5cGUuc2V0KFBpLkhTTCksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5oPWV9c2V0IHMoZSl7dGhpcy50eXBlLnNldChQaS5IU0wpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEucz1lfXNldCBsKGUpe3RoaXMudHlwZS5zZXQoUGkuSFNMKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmw9ZX1zZXQgYShlKXt0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmE9ZX19LGd6PVlTfSk7dmFyIFB4ZSxoaCxyeT1NKCgpPT57InVzZSBzdHJpY3QiO3l6KCk7UHhlPW5ldyBneih7cjowLGc6MCxiOjAsYTowfSwidHJhbnNwYXJlbnQiKSxoaD1QeGV9KTt2YXIgdnosSmYscVM9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtyeSgpO3R5KCk7dno9e3JlOi9eIygoPzpbYS1mMC05XXsyfSl7Miw0fXxbYS1mMC05XXszfSkkL2kscGFyc2U6byh0PT57aWYodC5jaGFyQ29kZUF0KDApIT09MzUpcmV0dXJuO2xldCBlPXQubWF0Y2godnoucmUpO2lmKCFlKXJldHVybjtsZXQgcj1lWzFdLG49cGFyc2VJbnQociwxNiksaT1yLmxlbmd0aCxhPWklND09PTAscz1pPjQsbD1zPzE6MTcsdT1zPzg6NCxoPWE/MDotMSxmPXM/MjU1OjE1O3JldHVybiBoaC5zZXQoe3I6KG4+PnUqKGgrMykmZikqbCxnOihuPj51KihoKzIpJmYpKmwsYjoobj4+dSooaCsxKSZmKSpsLGE6YT8obiZmKSpsLzI1NToxfSx0KX0sInBhcnNlIiksc3RyaW5naWZ5Om8odD0+e2xldHtyOmUsZzpyLGI6bixhOml9PXQ7cmV0dXJuIGk8MT9gIyR7b3VbTWF0aC5yb3VuZChlKV19JHtvdVtNYXRoLnJvdW5kKHIpXX0ke291W01hdGgucm91bmQobildfSR7b3VbTWF0aC5yb3VuZChpKjI1NSldfWA6YCMke291W01hdGgucm91bmQoZSldfSR7b3VbTWF0aC5yb3VuZChyKV19JHtvdVtNYXRoLnJvdW5kKG4pXX1gfSwic3RyaW5naWZ5Iil9LEpmPXZ6fSk7dmFyIGU0LG55LHh6PU0oKCk9PnsidXNlIHN0cmljdCI7YWMoKTtyeSgpO2U0PXtyZTovXmhzbGE/XChccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZS0/XGQrKT8oPzpkZWd8Z3JhZHxyYWR8dHVybik/KVxzKj8oPzosfFxzKVxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyUpXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmUtP1xkKyk/JSkoPzpccyo/KD86LHxcLylccyo/XCs/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZS0/XGQrKT8oJSk/KSk/XHMqP1wpJC9pLGh1ZVJlOi9eKC4rPykoZGVnfGdyYWR8cmFkfHR1cm4pJC9pLF9odWUyZGVnOm8odD0+e2xldCBlPXQubWF0Y2goZTQuaHVlUmUpO2lmKGUpe2xldFsscixuXT1lO3N3aXRjaChuKXtjYXNlImdyYWQiOnJldHVybiBZdC5jaGFubmVsLmNsYW1wLmgocGFyc2VGbG9hdChyKSouOSk7Y2FzZSJyYWQiOnJldHVybiBZdC5jaGFubmVsLmNsYW1wLmgocGFyc2VGbG9hdChyKSoxODAvTWF0aC5QSSk7Y2FzZSJ0dXJuIjpyZXR1cm4gWXQuY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQocikqMzYwKX19cmV0dXJuIFl0LmNoYW5uZWwuY2xhbXAuaChwYXJzZUZsb2F0KHQpKX0sIl9odWUyZGVnIikscGFyc2U6byh0PT57bGV0IGU9dC5jaGFyQ29kZUF0KDApO2lmKGUhPT0xMDQmJmUhPT03MilyZXR1cm47bGV0IHI9dC5tYXRjaChlNC5yZSk7aWYoIXIpcmV0dXJuO2xldFssbixpLGEscyxsXT1yO3JldHVybiBoaC5zZXQoe2g6ZTQuX2h1ZTJkZWcobiksczpZdC5jaGFubmVsLmNsYW1wLnMocGFyc2VGbG9hdChpKSksbDpZdC5jaGFubmVsLmNsYW1wLmwocGFyc2VGbG9hdChhKSksYTpzP1l0LmNoYW5uZWwuY2xhbXAuYShsP3BhcnNlRmxvYXQocykvMTAwOnBhcnNlRmxvYXQocykpOjF9LHQpfSwicGFyc2UiKSxzdHJpbmdpZnk6byh0PT57bGV0e2g6ZSxzOnIsbDpuLGE6aX09dDtyZXR1cm4gaTwxP2Boc2xhKCR7WXQubGFuZy5yb3VuZChlKX0sICR7WXQubGFuZy5yb3VuZChyKX0lLCAke1l0Lmxhbmcucm91bmQobil9JSwgJHtpfSlgOmBoc2woJHtZdC5sYW5nLnJvdW5kKGUpfSwgJHtZdC5sYW5nLnJvdW5kKHIpfSUsICR7WXQubGFuZy5yb3VuZChuKX0lKWB9LCJzdHJpbmdpZnkiKX0sbnk9ZTR9KTt2YXIgdDQsWFMsYno9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtxUygpO3Q0PXtjb2xvcnM6e2FsaWNlYmx1ZToiI2YwZjhmZiIsYW50aXF1ZXdoaXRlOiIjZmFlYmQ3IixhcXVhOiIjMDBmZmZmIixhcXVhbWFyaW5lOiIjN2ZmZmQ0IixhenVyZToiI2YwZmZmZiIsYmVpZ2U6IiNmNWY1ZGMiLGJpc3F1ZToiI2ZmZTRjNCIsYmxhY2s6IiMwMDAwMDAiLGJsYW5jaGVkYWxtb25kOiIjZmZlYmNkIixibHVlOiIjMDAwMGZmIixibHVldmlvbGV0OiIjOGEyYmUyIixicm93bjoiI2E1MmEyYSIsYnVybHl3b29kOiIjZGViODg3IixjYWRldGJsdWU6IiM1ZjllYTAiLGNoYXJ0cmV1c2U6IiM3ZmZmMDAiLGNob2NvbGF0ZToiI2QyNjkxZSIsY29yYWw6IiNmZjdmNTAiLGNvcm5mbG93ZXJibHVlOiIjNjQ5NWVkIixjb3Juc2lsazoiI2ZmZjhkYyIsY3JpbXNvbjoiI2RjMTQzYyIsY3lhbmFxdWE6IiMwMGZmZmYiLGRhcmtibHVlOiIjMDAwMDhiIixkYXJrY3lhbjoiIzAwOGI4YiIsZGFya2dvbGRlbnJvZDoiI2I4ODYwYiIsZGFya2dyYXk6IiNhOWE5YTkiLGRhcmtncmVlbjoiIzAwNjQwMCIsZGFya2dyZXk6IiNhOWE5YTkiLGRhcmtraGFraToiI2JkYjc2YiIsZGFya21hZ2VudGE6IiM4YjAwOGIiLGRhcmtvbGl2ZWdyZWVuOiIjNTU2YjJmIixkYXJrb3JhbmdlOiIjZmY4YzAwIixkYXJrb3JjaGlkOiIjOTkzMmNjIixkYXJrcmVkOiIjOGIwMDAwIixkYXJrc2FsbW9uOiIjZTk5NjdhIixkYXJrc2VhZ3JlZW46IiM4ZmJjOGYiLGRhcmtzbGF0ZWJsdWU6IiM0ODNkOGIiLGRhcmtzbGF0ZWdyYXk6IiMyZjRmNGYiLGRhcmtzbGF0ZWdyZXk6IiMyZjRmNGYiLGRhcmt0dXJxdW9pc2U6IiMwMGNlZDEiLGRhcmt2aW9sZXQ6IiM5NDAwZDMiLGRlZXBwaW5rOiIjZmYxNDkzIixkZWVwc2t5Ymx1ZToiIzAwYmZmZiIsZGltZ3JheToiIzY5Njk2OSIsZGltZ3JleToiIzY5Njk2OSIsZG9kZ2VyYmx1ZToiIzFlOTBmZiIsZmlyZWJyaWNrOiIjYjIyMjIyIixmbG9yYWx3aGl0ZToiI2ZmZmFmMCIsZm9yZXN0Z3JlZW46IiMyMjhiMjIiLGZ1Y2hzaWE6IiNmZjAwZmYiLGdhaW5zYm9ybzoiI2RjZGNkYyIsZ2hvc3R3aGl0ZToiI2Y4ZjhmZiIsZ29sZDoiI2ZmZDcwMCIsZ29sZGVucm9kOiIjZGFhNTIwIixncmF5OiIjODA4MDgwIixncmVlbjoiIzAwODAwMCIsZ3JlZW55ZWxsb3c6IiNhZGZmMmYiLGdyZXk6IiM4MDgwODAiLGhvbmV5ZGV3OiIjZjBmZmYwIixob3RwaW5rOiIjZmY2OWI0IixpbmRpYW5yZWQ6IiNjZDVjNWMiLGluZGlnbzoiIzRiMDA4MiIsaXZvcnk6IiNmZmZmZjAiLGtoYWtpOiIjZjBlNjhjIixsYXZlbmRlcjoiI2U2ZTZmYSIsbGF2ZW5kZXJibHVzaDoiI2ZmZjBmNSIsbGF3bmdyZWVuOiIjN2NmYzAwIixsZW1vbmNoaWZmb246IiNmZmZhY2QiLGxpZ2h0Ymx1ZToiI2FkZDhlNiIsbGlnaHRjb3JhbDoiI2YwODA4MCIsbGlnaHRjeWFuOiIjZTBmZmZmIixsaWdodGdvbGRlbnJvZHllbGxvdzoiI2ZhZmFkMiIsbGlnaHRncmF5OiIjZDNkM2QzIixsaWdodGdyZWVuOiIjOTBlZTkwIixsaWdodGdyZXk6IiNkM2QzZDMiLGxpZ2h0cGluazoiI2ZmYjZjMSIsbGlnaHRzYWxtb246IiNmZmEwN2EiLGxpZ2h0c2VhZ3JlZW46IiMyMGIyYWEiLGxpZ2h0c2t5Ymx1ZToiIzg3Y2VmYSIsbGlnaHRzbGF0ZWdyYXk6IiM3Nzg4OTkiLGxpZ2h0c2xhdGVncmV5OiIjNzc4ODk5IixsaWdodHN0ZWVsYmx1ZToiI2IwYzRkZSIsbGlnaHR5ZWxsb3c6IiNmZmZmZTAiLGxpbWU6IiMwMGZmMDAiLGxpbWVncmVlbjoiIzMyY2QzMiIsbGluZW46IiNmYWYwZTYiLG1hZ2VudGE6IiNmZjAwZmYiLG1hcm9vbjoiIzgwMDAwMCIsbWVkaXVtYXF1YW1hcmluZToiIzY2Y2RhYSIsbWVkaXVtYmx1ZToiIzAwMDBjZCIsbWVkaXVtb3JjaGlkOiIjYmE1NWQzIixtZWRpdW1wdXJwbGU6IiM5MzcwZGIiLG1lZGl1bXNlYWdyZWVuOiIjM2NiMzcxIixtZWRpdW1zbGF0ZWJsdWU6IiM3YjY4ZWUiLG1lZGl1bXNwcmluZ2dyZWVuOiIjMDBmYTlhIixtZWRpdW10dXJxdW9pc2U6IiM0OGQxY2MiLG1lZGl1bXZpb2xldHJlZDoiI2M3MTU4NSIsbWlkbmlnaHRibHVlOiIjMTkxOTcwIixtaW50Y3JlYW06IiNmNWZmZmEiLG1pc3R5cm9zZToiI2ZmZTRlMSIsbW9jY2FzaW46IiNmZmU0YjUiLG5hdmFqb3doaXRlOiIjZmZkZWFkIixuYXZ5OiIjMDAwMDgwIixvbGRsYWNlOiIjZmRmNWU2IixvbGl2ZToiIzgwODAwMCIsb2xpdmVkcmFiOiIjNmI4ZTIzIixvcmFuZ2U6IiNmZmE1MDAiLG9yYW5nZXJlZDoiI2ZmNDUwMCIsb3JjaGlkOiIjZGE3MGQ2IixwYWxlZ29sZGVucm9kOiIjZWVlOGFhIixwYWxlZ3JlZW46IiM5OGZiOTgiLHBhbGV0dXJxdW9pc2U6IiNhZmVlZWUiLHBhbGV2aW9sZXRyZWQ6IiNkYjcwOTMiLHBhcGF5YXdoaXA6IiNmZmVmZDUiLHBlYWNocHVmZjoiI2ZmZGFiOSIscGVydToiI2NkODUzZiIscGluazoiI2ZmYzBjYiIscGx1bToiI2RkYTBkZCIscG93ZGVyYmx1ZToiI2IwZTBlNiIscHVycGxlOiIjODAwMDgwIixyZWJlY2NhcHVycGxlOiIjNjYzMzk5IixyZWQ6IiNmZjAwMDAiLHJvc3licm93bjoiI2JjOGY4ZiIscm95YWxibHVlOiIjNDE2OWUxIixzYWRkbGVicm93bjoiIzhiNDUxMyIsc2FsbW9uOiIjZmE4MDcyIixzYW5keWJyb3duOiIjZjRhNDYwIixzZWFncmVlbjoiIzJlOGI1NyIsc2Vhc2hlbGw6IiNmZmY1ZWUiLHNpZW5uYToiI2EwNTIyZCIsc2lsdmVyOiIjYzBjMGMwIixza3libHVlOiIjODdjZWViIixzbGF0ZWJsdWU6IiM2YTVhY2QiLHNsYXRlZ3JheToiIzcwODA5MCIsc2xhdGVncmV5OiIjNzA4MDkwIixzbm93OiIjZmZmYWZhIixzcHJpbmdncmVlbjoiIzAwZmY3ZiIsdGFuOiIjZDJiNDhjIix0ZWFsOiIjMDA4MDgwIix0aGlzdGxlOiIjZDhiZmQ4Iix0cmFuc3BhcmVudDoiIzAwMDAwMDAwIix0dXJxdW9pc2U6IiM0MGUwZDAiLHZpb2xldDoiI2VlODJlZSIsd2hlYXQ6IiNmNWRlYjMiLHdoaXRlOiIjZmZmZmZmIix3aGl0ZXNtb2tlOiIjZjVmNWY1Iix5ZWxsb3c6IiNmZmZmMDAiLHllbGxvd2dyZWVuOiIjOWFjZDMyIn0scGFyc2U6byh0PT57dD10LnRvTG93ZXJDYXNlKCk7bGV0IGU9dDQuY29sb3JzW3RdO2lmKGUpcmV0dXJuIEpmLnBhcnNlKGUpfSwicGFyc2UiKSxzdHJpbmdpZnk6byh0PT57bGV0IGU9SmYuc3RyaW5naWZ5KHQpO2ZvcihsZXQgciBpbiB0NC5jb2xvcnMpaWYodDQuY29sb3JzW3JdPT09ZSlyZXR1cm4gcn0sInN0cmluZ2lmeSIpfSxYUz10NH0pO3ZhciB3eixpeSxUej1NKCgpPT57InVzZSBzdHJpY3QiO2FjKCk7cnkoKTt3ej17cmU6L15yZ2JhP1woXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpKD86XHMqPyg/Oix8XC8pXHMqP1wrPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpKT9ccyo/XCkkL2kscGFyc2U6byh0PT57bGV0IGU9dC5jaGFyQ29kZUF0KDApO2lmKGUhPT0xMTQmJmUhPT04MilyZXR1cm47bGV0IHI9dC5tYXRjaCh3ei5yZSk7aWYoIXIpcmV0dXJuO2xldFssbixpLGEscyxsLHUsaCxmXT1yO3JldHVybiBoaC5zZXQoe3I6WXQuY2hhbm5lbC5jbGFtcC5yKGk/cGFyc2VGbG9hdChuKSoyLjU1OnBhcnNlRmxvYXQobikpLGc6WXQuY2hhbm5lbC5jbGFtcC5nKHM/cGFyc2VGbG9hdChhKSoyLjU1OnBhcnNlRmxvYXQoYSkpLGI6WXQuY2hhbm5lbC5jbGFtcC5iKHU/cGFyc2VGbG9hdChsKSoyLjU1OnBhcnNlRmxvYXQobCkpLGE6aD9ZdC5jaGFubmVsLmNsYW1wLmEoZj9wYXJzZUZsb2F0KGgpLzEwMDpwYXJzZUZsb2F0KGgpKToxfSx0KX0sInBhcnNlIiksc3RyaW5naWZ5Om8odD0+e2xldHtyOmUsZzpyLGI6bixhOml9PXQ7cmV0dXJuIGk8MT9gcmdiYSgke1l0Lmxhbmcucm91bmQoZSl9LCAke1l0Lmxhbmcucm91bmQocil9LCAke1l0Lmxhbmcucm91bmQobil9LCAke1l0Lmxhbmcucm91bmQoaSl9KWA6YHJnYigke1l0Lmxhbmcucm91bmQoZSl9LCAke1l0Lmxhbmcucm91bmQocil9LCAke1l0Lmxhbmcucm91bmQobil9KWB9LCJzdHJpbmdpZnkiKX0saXk9d3p9KTt2YXIgQnhlLEJpLGx1PU0oKCk9PnsidXNlIHN0cmljdCI7cVMoKTt4eigpO2J6KCk7VHooKTt0eSgpO0J4ZT17Zm9ybWF0OntrZXl3b3JkOlhTLGhleDpKZixyZ2I6aXkscmdiYTppeSxoc2w6bnksaHNsYTpueX0scGFyc2U6byh0PT57aWYodHlwZW9mIHQhPSJzdHJpbmciKXJldHVybiB0O2xldCBlPUpmLnBhcnNlKHQpfHxpeS5wYXJzZSh0KXx8bnkucGFyc2UodCl8fFhTLnBhcnNlKHQpO2lmKGUpcmV0dXJuIGU7dGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBjb2xvciBmb3JtYXQ6ICIke3R9ImApfSwicGFyc2UiKSxzdHJpbmdpZnk6byh0PT4hdC5jaGFuZ2VkJiZ0LmNvbG9yP3QuY29sb3I6dC50eXBlLmlzKFBpLkhTTCl8fHQuZGF0YS5yPT09dm9pZCAwP255LnN0cmluZ2lmeSh0KTp0LmE8MXx8IU51bWJlci5pc0ludGVnZXIodC5yKXx8IU51bWJlci5pc0ludGVnZXIodC5nKXx8IU51bWJlci5pc0ludGVnZXIodC5iKT9peS5zdHJpbmdpZnkodCk6SmYuc3RyaW5naWZ5KHQpLCJzdHJpbmdpZnkiKX0sQmk9QnhlfSk7dmFyIEZ4ZSxyNCxqUz1NKCgpPT57InVzZSBzdHJpY3QiO2FjKCk7bHUoKTtGeGU9bygodCxlKT0+e2xldCByPUJpLnBhcnNlKHQpO2ZvcihsZXQgbiBpbiBlKXJbbl09WXQuY2hhbm5lbC5jbGFtcFtuXShlW25dKTtyZXR1cm4gQmkuc3RyaW5naWZ5KHIpfSwiY2hhbmdlIikscjQ9RnhlfSk7dmFyIHp4ZSxacyxLUz1NKCgpPT57InVzZSBzdHJpY3QiO2FjKCk7cnkoKTtsdSgpO2pTKCk7enhlPW8oKHQsZSxyPTAsbj0xKT0+e2lmKHR5cGVvZiB0IT0ibnVtYmVyIilyZXR1cm4gcjQodCx7YTplfSk7bGV0IGk9aGguc2V0KHtyOll0LmNoYW5uZWwuY2xhbXAucih0KSxnOll0LmNoYW5uZWwuY2xhbXAuZyhlKSxiOll0LmNoYW5uZWwuY2xhbXAuYihyKSxhOll0LmNoYW5uZWwuY2xhbXAuYShuKX0pO3JldHVybiBCaS5zdHJpbmdpZnkoaSl9LCJyZ2JhIiksWnM9enhlfSk7dmFyIEd4ZSxheSxrej1NKCgpPT57InVzZSBzdHJpY3QiO2FjKCk7bHUoKTtHeGU9bygodCxlKT0+WXQubGFuZy5yb3VuZChCaS5wYXJzZSh0KVtlXSksImNoYW5uZWwiKSxheT1HeGV9KTt2YXIgJHhlLEV6LFN6PU0oKCk9PnsidXNlIHN0cmljdCI7YWMoKTtsdSgpOyR4ZT1vKHQ9PntsZXR7cjplLGc6cixiOm59PUJpLnBhcnNlKHQpLGk9LjIxMjYqWXQuY2hhbm5lbC50b0xpbmVhcihlKSsuNzE1MipZdC5jaGFubmVsLnRvTGluZWFyKHIpKy4wNzIyKll0LmNoYW5uZWwudG9MaW5lYXIobik7cmV0dXJuIFl0Lmxhbmcucm91bmQoaSl9LCJsdW1pbmFuY2UiKSxFej0keGV9KTt2YXIgVnhlLEN6LEF6PU0oKCk9PnsidXNlIHN0cmljdCI7U3ooKTtWeGU9byh0PT5Feih0KT49LjUsImlzTGlnaHQiKSxDej1WeGV9KTt2YXIgVXhlLGZhLF96PU0oKCk9PnsidXNlIHN0cmljdCI7QXooKTtVeGU9byh0PT4hQ3oodCksImlzRGFyayIpLGZhPVV4ZX0pO3ZhciBIeGUsbjQsUVM9TSgoKT0+eyJ1c2Ugc3RyaWN0IjthYygpO2x1KCk7SHhlPW8oKHQsZSxyKT0+e2xldCBuPUJpLnBhcnNlKHQpLGk9bltlXSxhPVl0LmNoYW5uZWwuY2xhbXBbZV0oaStyKTtyZXR1cm4gaSE9PWEmJihuW2VdPWEpLEJpLnN0cmluZ2lmeShuKX0sImFkanVzdENoYW5uZWwiKSxuND1IeGV9KTt2YXIgV3hlLF90LEx6PU0oKCk9PnsidXNlIHN0cmljdCI7UVMoKTtXeGU9bygodCxlKT0+bjQodCwibCIsZSksImxpZ2h0ZW4iKSxfdD1XeGV9KTt2YXIgWXhlLEl0LER6PU0oKCk9PnsidXNlIHN0cmljdCI7UVMoKTtZeGU9bygodCxlKT0+bjQodCwibCIsLWUpLCJkYXJrZW4iKSxJdD1ZeGV9KTt2YXIgcXhlLE1lLE56PU0oKCk9PnsidXNlIHN0cmljdCI7bHUoKTtqUygpO3F4ZT1vKCh0LGUpPT57bGV0IHI9QmkucGFyc2UodCksbj17fTtmb3IobGV0IGkgaW4gZSllW2ldJiYobltpXT1yW2ldK2VbaV0pO3JldHVybiByNCh0LG4pfSwiYWRqdXN0IiksTWU9cXhlfSk7dmFyIFh4ZSxSeixNej1NKCgpPT57InVzZSBzdHJpY3QiO2x1KCk7S1MoKTtYeGU9bygodCxlLHI9NTApPT57bGV0e3I6bixnOmksYjphLGE6c309QmkucGFyc2UodCkse3I6bCxnOnUsYjpoLGE6Zn09QmkucGFyc2UoZSksZD1yLzEwMCxwPWQqMi0xLG09cy1mLHk9KChwKm09PT0tMT9wOihwK20pLygxK3AqbSkpKzEpLzIsdj0xLXkseD1uKnkrbCp2LGI9aSp5K3Uqdix3PWEqeStoKnYsXz1zKmQrZiooMS1kKTtyZXR1cm4gWnMoeCxiLHcsXyl9LCJtaXgiKSxSej1YeGV9KTt2YXIganhlLG10LEl6PU0oKCk9PnsidXNlIHN0cmljdCI7bHUoKTtNeigpO2p4ZT1vKCh0LGU9MTAwKT0+e2xldCByPUJpLnBhcnNlKHQpO3JldHVybiByLnI9MjU1LXIucixyLmc9MjU1LXIuZyxyLmI9MjU1LXIuYixSeihyLHQsZSl9LCJpbnZlcnQiKSxtdD1qeGV9KTt2YXIgT3o9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtLUygpO2t6KCk7X3ooKTtMeigpO0R6KCk7TnooKTtJeigpfSk7dmFyIExvPU0oKCk9PnsidXNlIHN0cmljdCI7T3ooKX0pO3ZhciBmaCxkaCxzeT1NKCgpPT57InVzZSBzdHJpY3QiO2ZoPSIjZmZmZmZmIixkaD0iI2YyZjJmMiJ9KTt2YXIgU2kseXA9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMbygpO1NpPW8oKHQsZSk9PmU/TWUodCx7czotNDAsbDoxMH0pOk1lKHQse3M6LTQwLGw6LTEwfSksIm1rQm9yZGVyIil9KTt2YXIgWlMsQnosRno9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMbygpO3N5KCk7eXAoKTtaUz1jbGFzc3tzdGF0aWN7byh0aGlzLCJUaGVtZSIpfWNvbnN0cnVjdG9yKCl7dGhpcy5iYWNrZ3JvdW5kPSIjZjRmNGY0Iix0aGlzLnByaW1hcnlDb2xvcj0iI2ZmZjRkZCIsdGhpcy5ub3RlQmtnQ29sb3I9IiNmZmY1YWQiLHRoaXMubm90ZVRleHRDb2xvcj0iIzMzMyIsdGhpcy5USEVNRV9DT0xPUl9MSU1JVD0xMix0aGlzLmZvbnRGYW1pbHk9JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsdGhpcy5mb250U2l6ZT0iMTZweCJ9dXBkYXRlQ29sb3JzKCl7aWYodGhpcy5wcmltYXJ5VGV4dENvbG9yPXRoaXMucHJpbWFyeVRleHRDb2xvcnx8KHRoaXMuZGFya01vZGU/IiNlZWUiOiIjMzMzIiksdGhpcy5zZWNvbmRhcnlDb2xvcj10aGlzLnNlY29uZGFyeUNvbG9yfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotMTIwfSksdGhpcy50ZXJ0aWFyeUNvbG9yPXRoaXMudGVydGlhcnlDb2xvcnx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTgwLGw6NX0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yfHxTaSh0aGlzLnByaW1hcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPXRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3J8fFNpKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPXRoaXMudGVydGlhcnlCb3JkZXJDb2xvcnx8U2kodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMubm90ZUJvcmRlckNvbG9yPXRoaXMubm90ZUJvcmRlckNvbG9yfHxTaSh0aGlzLm5vdGVCa2dDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLm5vdGVCa2dDb2xvcj10aGlzLm5vdGVCa2dDb2xvcnx8IiNmZmY1YWQiLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLm5vdGVUZXh0Q29sb3J8fCIjMzMzIix0aGlzLnNlY29uZGFyeVRleHRDb2xvcj10aGlzLnNlY29uZGFyeVRleHRDb2xvcnx8bXQodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj10aGlzLnRlcnRpYXJ5VGV4dENvbG9yfHxtdCh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPXRoaXMubGluZUNvbG9yfHxtdCh0aGlzLmJhY2tncm91bmQpLHRoaXMuYXJyb3doZWFkQ29sb3I9dGhpcy5hcnJvd2hlYWRDb2xvcnx8bXQodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj10aGlzLnRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuYm9yZGVyMj10aGlzLmJvcmRlcjJ8fHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcix0aGlzLm5vZGVCa2c9dGhpcy5ub2RlQmtnfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLm1haW5Ca2c9dGhpcy5tYWluQmtnfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLm5vZGVCb3JkZXI9dGhpcy5ub2RlQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLmNsdXN0ZXJCa2c9dGhpcy5jbHVzdGVyQmtnfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuY2x1c3RlckJvcmRlcnx8dGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmRlZmF1bHRMaW5rQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudGl0bGVDb2xvcj10aGlzLnRpdGxlQ29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPXRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZHx8KHRoaXMuZGFya01vZGU/SXQodGhpcy5zZWNvbmRhcnlDb2xvciwzMCk6dGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy5ub2RlVGV4dENvbG9yPXRoaXMubm9kZVRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuYWN0b3JCb3JkZXI9dGhpcy5hY3RvckJvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5hY3RvckJrZz10aGlzLmFjdG9yQmtnfHx0aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLmFjdG9yTGluZUNvbG9yfHx0aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmxhYmVsQm94QmtnQ29sb3J8fHRoaXMuYWN0b3JCa2csdGhpcy5zaWduYWxDb2xvcj10aGlzLnNpZ25hbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLnNpZ25hbFRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPXRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcnx8dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMubGFiZWxUZXh0Q29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMubG9vcFRleHRDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj10aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcnx8SXQodGhpcy5zZWNvbmRhcnlDb2xvciwxMCksdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9dGhpcy5hY3RpdmF0aW9uQmtnQ29sb3J8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPXRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcnx8bXQodGhpcy5saW5lQ29sb3IpLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPXRoaXMuc2VjdGlvbkJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9dGhpcy5hbHRTZWN0aW9uQmtnQ29sb3J8fCJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9dGhpcy5zZWN0aW9uQmtnQ29sb3J8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPXRoaXMuc2VjdGlvbkJrZ0NvbG9yMnx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5leGNsdWRlQmtnQ29sb3I9dGhpcy5leGNsdWRlQmtnQ29sb3J8fCIjZWVlZWVlIix0aGlzLnRhc2tCb3JkZXJDb2xvcj10aGlzLnRhc2tCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YXNrQmtnQ29sb3I9dGhpcy50YXNrQmtnQ29sb3J8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPXRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj10aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcnx8X3QodGhpcy5wcmltYXJ5Q29sb3IsMjMpLHRoaXMuZ3JpZENvbG9yPXRoaXMuZ3JpZENvbG9yfHwibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9dGhpcy5kb25lVGFza0JrZ0NvbG9yfHwibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9dGhpcy5kb25lVGFza0JvcmRlckNvbG9yfHwiZ3JleSIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9dGhpcy5jcml0Qm9yZGVyQ29sb3J8fCIjZmY4ODg4Iix0aGlzLmNyaXRCa2dDb2xvcj10aGlzLmNyaXRCa2dDb2xvcnx8InJlZCIsdGhpcy50b2RheUxpbmVDb2xvcj10aGlzLnRvZGF5TGluZUNvbG9yfHwicmVkIix0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHRPdXRzaWRlQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRMaWdodENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9dGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yfHwiIzAwMzE2MyIsdGhpcy5wZXJzb25Cb3JkZXI9dGhpcy5wZXJzb25Cb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucGVyc29uQmtnPXRoaXMucGVyc29uQmtnfHx0aGlzLm1haW5Ca2csdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5jb21wb3NpdGVCb3JkZXI9dGhpcy5jb21wb3NpdGVCb3JkZXJ8fHRoaXMubm9kZUJvcmRlcix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLm5vZGVCb3JkZXIsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5zcGVjaWFsU3RhdGVDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmNTY2FsZTA9dGhpcy5jU2NhbGUwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmNTY2FsZTE9dGhpcy5jU2NhbGUxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY1NjYWxlMj10aGlzLmNTY2FsZTJ8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmNTY2FsZTM9dGhpcy5jU2NhbGUzfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDozMH0pLHRoaXMuY1NjYWxlND10aGlzLmNTY2FsZTR8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5jU2NhbGU1PXRoaXMuY1NjYWxlNXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6OTB9KSx0aGlzLmNTY2FsZTY9dGhpcy5jU2NhbGU2fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmNTY2FsZTc9dGhpcy5jU2NhbGU3fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxNTB9KSx0aGlzLmNTY2FsZTg9dGhpcy5jU2NhbGU4fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoyMTAsbDoxNTB9KSx0aGlzLmNTY2FsZTk9dGhpcy5jU2NhbGU5fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoyNzB9KSx0aGlzLmNTY2FsZTEwPXRoaXMuY1NjYWxlMTB8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwMH0pLHRoaXMuY1NjYWxlMTE9dGhpcy5jU2NhbGUxMXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MzMwfSksdGhpcy5kYXJrTW9kZSlmb3IobGV0IHI9MDtyPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7cisrKXRoaXNbImNTY2FsZSIrcl09SXQodGhpc1siY1NjYWxlIityXSw3NSk7ZWxzZSBmb3IobGV0IHI9MDtyPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7cisrKXRoaXNbImNTY2FsZSIrcl09SXQodGhpc1siY1NjYWxlIityXSwyNSk7Zm9yKGxldCByPTA7cjx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO3IrKyl0aGlzWyJjU2NhbGVJbnYiK3JdPXRoaXNbImNTY2FsZUludiIrcl18fG10KHRoaXNbImNTY2FsZSIrcl0pO2ZvcihsZXQgcj0wO3I8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtyKyspdGhpcy5kYXJrTW9kZT90aGlzWyJjU2NhbGVQZWVyIityXT10aGlzWyJjU2NhbGVQZWVyIityXXx8X3QodGhpc1siY1NjYWxlIityXSwxMCk6dGhpc1siY1NjYWxlUGVlciIrcl09dGhpc1siY1NjYWxlUGVlciIrcl18fEl0KHRoaXNbImNTY2FsZSIrcl0sMTApO3RoaXMuc2NhbGVMYWJlbENvbG9yPXRoaXMuc2NhbGVMYWJlbENvbG9yfHx0aGlzLmxhYmVsVGV4dENvbG9yO2ZvcihsZXQgcj0wO3I8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtyKyspdGhpc1siY1NjYWxlTGFiZWwiK3JdPXRoaXNbImNTY2FsZUxhYmVsIityXXx8dGhpcy5zY2FsZUxhYmVsQ29sb3I7bGV0IGU9dGhpcy5kYXJrTW9kZT8tNDotMTtmb3IobGV0IHI9MDtyPDU7cisrKXRoaXNbInN1cmZhY2UiK3JdPXRoaXNbInN1cmZhY2UiK3JdfHxNZSh0aGlzLm1haW5Ca2cse2g6MTgwLHM6LTE1LGw6ZSooNStyKjMpfSksdGhpc1sic3VyZmFjZVBlZXIiK3JdPXRoaXNbInN1cmZhY2VQZWVyIityXXx8TWUodGhpcy5tYWluQmtnLHtoOjE4MCxzOi0xNSxsOmUqKDgrciozKX0pO3RoaXMuY2xhc3NUZXh0PXRoaXMuY2xhc3NUZXh0fHx0aGlzLnRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLmZpbGxUeXBlMHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5maWxsVHlwZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9dGhpcy5maWxsVHlwZTJ8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9dGhpcy5maWxsVHlwZTN8fE1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND10aGlzLmZpbGxUeXBlNHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9dGhpcy5maWxsVHlwZTV8fE1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9dGhpcy5maWxsVHlwZTZ8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PXRoaXMuZmlsbFR5cGU3fHxNZSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMucGllMT10aGlzLnBpZTF8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucGllMj10aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5waWUzPXRoaXMucGllM3x8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMucGllND10aGlzLnBpZTR8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtsOi0xMH0pLHRoaXMucGllNT10aGlzLnBpZTV8fE1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU2PXRoaXMucGllNnx8TWUodGhpcy50ZXJ0aWFyeUNvbG9yLHtsOi0xMH0pLHRoaXMucGllNz10aGlzLnBpZTd8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTEwfSksdGhpcy5waWU4PXRoaXMucGllOHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTEwfSksdGhpcy5waWU5PXRoaXMucGllOXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6MH0pLHRoaXMucGllMTA9dGhpcy5waWUxMHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMjB9KSx0aGlzLnBpZTExPXRoaXMucGllMTF8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MCxsOi0yMH0pLHRoaXMucGllMTI9dGhpcy5waWUxMnx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6LTEwfSksdGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VXaWR0aD10aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VDb2xvcj10aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5hcmNoRWRnZUNvbG9yPXRoaXMuYXJjaEVkZ2VDb2xvcnx8IiM3NzciLHRoaXMuYXJjaEVkZ2VBcnJvd0NvbG9yPXRoaXMuYXJjaEVkZ2VBcnJvd0NvbG9yfHwiIzc3NyIsdGhpcy5hcmNoRWRnZVdpZHRoPXRoaXMuYXJjaEVkZ2VXaWR0aHx8IjMiLHRoaXMuYXJjaEdyb3VwQm9yZGVyQ29sb3I9dGhpcy5hcmNoR3JvdXBCb3JkZXJDb2xvcnx8IiMwMDAiLHRoaXMuYXJjaEdyb3VwQm9yZGVyV2lkdGg9dGhpcy5hcmNoR3JvdXBCb3JkZXJXaWR0aHx8IjJweCIsdGhpcy5xdWFkcmFudDFGaWxsPXRoaXMucXVhZHJhbnQxRmlsbHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5xdWFkcmFudDJGaWxsPXRoaXMucXVhZHJhbnQyRmlsbHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise3I6NSxnOjUsYjo1fSksdGhpcy5xdWFkcmFudDNGaWxsPXRoaXMucXVhZHJhbnQzRmlsbHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise3I6MTAsZzoxMCxiOjEwfSksdGhpcy5xdWFkcmFudDRGaWxsPXRoaXMucXVhZHJhbnQ0RmlsbHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise3I6MTUsZzoxNSxiOjE1fSksdGhpcy5xdWFkcmFudDFUZXh0RmlsbD10aGlzLnF1YWRyYW50MVRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudDJUZXh0RmlsbD10aGlzLnF1YWRyYW50MlRleHRGaWxsfHxNZSh0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTUsZzotNSxiOi01fSksdGhpcy5xdWFkcmFudDNUZXh0RmlsbD10aGlzLnF1YWRyYW50M1RleHRGaWxsfHxNZSh0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTEwLGc6LTEwLGI6LTEwfSksdGhpcy5xdWFkcmFudDRUZXh0RmlsbD10aGlzLnF1YWRyYW50NFRleHRGaWxsfHxNZSh0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTE1LGc6LTE1LGI6LTE1fSksdGhpcy5xdWFkcmFudFBvaW50RmlsbD10aGlzLnF1YWRyYW50UG9pbnRGaWxsfHxmYSh0aGlzLnF1YWRyYW50MUZpbGwpP190KHRoaXMucXVhZHJhbnQxRmlsbCk6SXQodGhpcy5xdWFkcmFudDFGaWxsKSx0aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbD10aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudFRpdGxlRmlsbD10aGlzLnF1YWRyYW50VGl0bGVGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy54eUNoYXJ0PXtiYWNrZ3JvdW5kQ29sb3I6dGhpcy54eUNoYXJ0Py5iYWNrZ3JvdW5kQ29sb3J8fHRoaXMuYmFja2dyb3VuZCx0aXRsZUNvbG9yOnRoaXMueHlDaGFydD8udGl0bGVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGl0bGVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzVGl0bGVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGFiZWxDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGlja0NvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNUaWNrQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xpbmVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzTGluZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaXRsZUNvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNUaXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMYWJlbENvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaWNrQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc1RpY2tDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGluZUNvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNMaW5lQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcixwbG90Q29sb3JQYWxldHRlOnRoaXMueHlDaGFydD8ucGxvdENvbG9yUGFsZXR0ZXx8IiNGRkY0REQsI0ZGRDhCMSwjRkZBMDdBLCNFQ0VGRjEsI0Q2REJERiwjQzNFMEE4LCNGRkI2QTQsI0ZGRDc0RCwjNzM4RkE3LCNGRkZGRjAifSx0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZD10aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemU9dGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemV8fCIxIix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fCh0aGlzLmRhcmtNb2RlP0l0KHRoaXMuc2Vjb25kYXJ5Q29sb3IsMzApOnRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuZ2l0MD10aGlzLmdpdDB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZ2l0MT10aGlzLmdpdDF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5naXQyPXRoaXMuZ2l0Mnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZ2l0Mz10aGlzLmdpdDN8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0zMH0pLHRoaXMuZ2l0ND10aGlzLmdpdDR8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MH0pLHRoaXMuZ2l0NT10aGlzLmdpdDV8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi05MH0pLHRoaXMuZ2l0Nj10aGlzLmdpdDZ8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5naXQ3PXRoaXMuZ2l0N3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5kYXJrTW9kZT8odGhpcy5naXQwPV90KHRoaXMuZ2l0MCwyNSksdGhpcy5naXQxPV90KHRoaXMuZ2l0MSwyNSksdGhpcy5naXQyPV90KHRoaXMuZ2l0MiwyNSksdGhpcy5naXQzPV90KHRoaXMuZ2l0MywyNSksdGhpcy5naXQ0PV90KHRoaXMuZ2l0NCwyNSksdGhpcy5naXQ1PV90KHRoaXMuZ2l0NSwyNSksdGhpcy5naXQ2PV90KHRoaXMuZ2l0NiwyNSksdGhpcy5naXQ3PV90KHRoaXMuZ2l0NywyNSkpOih0aGlzLmdpdDA9SXQodGhpcy5naXQwLDI1KSx0aGlzLmdpdDE9SXQodGhpcy5naXQxLDI1KSx0aGlzLmdpdDI9SXQodGhpcy5naXQyLDI1KSx0aGlzLmdpdDM9SXQodGhpcy5naXQzLDI1KSx0aGlzLmdpdDQ9SXQodGhpcy5naXQ0LDI1KSx0aGlzLmdpdDU9SXQodGhpcy5naXQ1LDI1KSx0aGlzLmdpdDY9SXQodGhpcy5naXQ2LDI1KSx0aGlzLmdpdDc9SXQodGhpcy5naXQ3LDI1KSksdGhpcy5naXRJbnYwPXRoaXMuZ2l0SW52MHx8bXQodGhpcy5naXQwKSx0aGlzLmdpdEludjE9dGhpcy5naXRJbnYxfHxtdCh0aGlzLmdpdDEpLHRoaXMuZ2l0SW52Mj10aGlzLmdpdEludjJ8fG10KHRoaXMuZ2l0MiksdGhpcy5naXRJbnYzPXRoaXMuZ2l0SW52M3x8bXQodGhpcy5naXQzKSx0aGlzLmdpdEludjQ9dGhpcy5naXRJbnY0fHxtdCh0aGlzLmdpdDQpLHRoaXMuZ2l0SW52NT10aGlzLmdpdEludjV8fG10KHRoaXMuZ2l0NSksdGhpcy5naXRJbnY2PXRoaXMuZ2l0SW52Nnx8bXQodGhpcy5naXQ2KSx0aGlzLmdpdEludjc9dGhpcy5naXRJbnY3fHxtdCh0aGlzLmdpdDcpLHRoaXMuYnJhbmNoTGFiZWxDb2xvcj10aGlzLmJyYW5jaExhYmVsQ29sb3J8fCh0aGlzLmRhcmtNb2RlPyJibGFjayI6dGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDA9dGhpcy5naXRCcmFuY2hMYWJlbDB8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMT10aGlzLmdpdEJyYW5jaExhYmVsMXx8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwyPXRoaXMuZ2l0QnJhbmNoTGFiZWwyfHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDM9dGhpcy5naXRCcmFuY2hMYWJlbDN8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsND10aGlzLmdpdEJyYW5jaExhYmVsNHx8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw1PXRoaXMuZ2l0QnJhbmNoTGFiZWw1fHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDY9dGhpcy5naXRCcmFuY2hMYWJlbDZ8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNz10aGlzLmdpdEJyYW5jaExhYmVsN3x8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMudGFnTGFiZWxDb2xvcj10aGlzLnRhZ0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZD10aGlzLnRhZ0xhYmVsQmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy50YWdMYWJlbEJvcmRlcj10aGlzLnRhZ0JvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YWdMYWJlbEZvbnRTaXplPXRoaXMudGFnTGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuY29tbWl0TGFiZWxDb2xvcj10aGlzLmNvbW1pdExhYmVsQ29sb3J8fHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yLHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kPXRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZT10aGlzLmNvbW1pdExhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZD10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZHx8ZmgsdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVuPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbnx8ZGh9Y2FsY3VsYXRlKGUpe2lmKHR5cGVvZiBlIT0ib2JqZWN0Iil7dGhpcy51cGRhdGVDb2xvcnMoKTtyZXR1cm59bGV0IHI9T2JqZWN0LmtleXMoZSk7ci5mb3JFYWNoKG49Pnt0aGlzW25dPWVbbl19KSx0aGlzLnVwZGF0ZUNvbG9ycygpLHIuZm9yRWFjaChuPT57dGhpc1tuXT1lW25dfSl9fSxCej1vKHQ9PntsZXQgZT1uZXcgWlM7cmV0dXJuIGUuY2FsY3VsYXRlKHQpLGV9LCJnZXRUaGVtZVZhcmlhYmxlcyIpfSk7dmFyIEpTLHp6LEd6PU0oKCk9PnsidXNlIHN0cmljdCI7TG8oKTt5cCgpO0pTPWNsYXNze3N0YXRpY3tvKHRoaXMsIlRoZW1lIil9Y29uc3RydWN0b3IoKXt0aGlzLmJhY2tncm91bmQ9IiMzMzMiLHRoaXMucHJpbWFyeUNvbG9yPSIjMWYyMDIwIix0aGlzLnNlY29uZGFyeUNvbG9yPV90KHRoaXMucHJpbWFyeUNvbG9yLDE2KSx0aGlzLnRlcnRpYXJ5Q29sb3I9TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTE2MH0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPW10KHRoaXMuYmFja2dyb3VuZCksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1TaSh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj1TaSh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPW10KHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj1tdCh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPW10KHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9bXQodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj1tdCh0aGlzLmJhY2tncm91bmQpLHRoaXMubWFpbkJrZz0iIzFmMjAyMCIsdGhpcy5zZWNvbmRCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubWFpbkNvbnRyYXN0Q29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kYXJrVGV4dENvbG9yPV90KG10KCIjMzIzRDQ3IiksMTApLHRoaXMubGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmJvcmRlcjE9IiNjY2MiLHRoaXMuYm9yZGVyMj1acygyNTUsMjU1LDI1NSwuMjUpLHRoaXMuYXJyb3doZWFkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLmxhYmVsQmFja2dyb3VuZD0iIzE4MTgxOCIsdGhpcy50ZXh0Q29sb3I9IiNjY2MiLHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ9MTIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iI0Y5RkZGRSIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yTGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJibGFjayIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9SXQoIiNFQUU4RDkiLDMwKSx0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSIjRUFFOEQ5Iix0aGlzLmV4Y2x1ZGVCa2dDb2xvcj1JdCh0aGlzLnNlY3Rpb25Ca2dDb2xvciwxMCksdGhpcy50YXNrQm9yZGVyQ29sb3I9WnMoMjU1LDI1NSwyNTUsNzApLHRoaXMudGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9IiMwMDMxNjMiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPVpzKDI1NSwyNTUsMjU1LDUwKSx0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iIzgxQjFEQiIsdGhpcy5ncmlkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iI0U4MzczNyIsdGhpcy5jcml0QmtnQ29sb3I9IiNFODM3MzciLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9IiNEQjU3NTciLHRoaXMucGVyc29uQm9yZGVyPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucGVyc29uQmtnPXRoaXMubWFpbkJrZyx0aGlzLmFyY2hFZGdlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYXJjaEVkZ2VBcnJvd0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFyY2hFZGdlV2lkdGg9IjMiLHRoaXMuYXJjaEdyb3VwQm9yZGVyQ29sb3I9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5hcmNoR3JvdXBCb3JkZXJXaWR0aD0iMnB4Iix0aGlzLmxhYmVsQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZXJyb3JCa2dDb2xvcj0iI2E0NDE0MSIsdGhpcy5lcnJvclRleHRDb2xvcj0iI2RkZCJ9dXBkYXRlQ29sb3JzKCl7dGhpcy5zZWNvbmRCa2c9X3QodGhpcy5tYWluQmtnLDE2KSx0aGlzLmxpbmVDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuYXJyb3doZWFkQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLm5vZGVCa2c9dGhpcy5tYWluQmtnLHRoaXMubm9kZUJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5jbHVzdGVyQmtnPXRoaXMuc2Vjb25kQmtnLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmJvcmRlcjIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD1fdCh0aGlzLmxhYmVsQmFja2dyb3VuZCwyNSksdGhpcy5hY3RvckJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuYWN0b3JMaW5lQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLnNpZ25hbENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5zaWduYWxUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcix0aGlzLm5vdGVCa2dDb2xvcj10aGlzLnNlY29uZEJrZyx0aGlzLm5vdGVUZXh0Q29sb3I9dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIxLHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yPXRoaXMuc2Vjb25kQmtnLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPXRoaXMuYmFja2dyb3VuZCx0aGlzLnRhc2tCa2dDb2xvcj1fdCh0aGlzLm1haW5Ca2csMjMpLHRoaXMudGFza1RleHRDb2xvcj10aGlzLmRhcmtUZXh0Q29sb3IsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMuZ3JpZENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5kb25lVGFza0JrZ0NvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj10aGlzLmRhcmtUZXh0Q29sb3IsdGhpcy5hcmNoRWRnZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuYXJjaEVkZ2VBcnJvd0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yPXRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMuc3RhdGVMYWJlbENvbG9yPXRoaXMuc3RhdGVMYWJlbENvbG9yfHx0aGlzLnN0YXRlQmtnfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5zdGF0ZUJrZz10aGlzLnN0YXRlQmtnfHx0aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcj10aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yfHx0aGlzLnN0YXRlQmtnLHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZUJhY2tncm91bmR8fHRoaXMuYmFja2dyb3VuZHx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuYWx0QmFja2dyb3VuZD10aGlzLmFsdEJhY2tncm91bmR8fCIjNTU1Iix0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZHx8dGhpcy5tYWluQmtnLHRoaXMuY29tcG9zaXRlQm9yZGVyPXRoaXMuY29tcG9zaXRlQm9yZGVyfHx0aGlzLm5vZGVCb3JkZXIsdGhpcy5pbm5lckVuZEJhY2tncm91bmQ9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5zcGVjaWFsU3RhdGVDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPU1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9TWUodGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PU1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PU1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9TWUodGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KSx0aGlzLmNTY2FsZTE9dGhpcy5jU2NhbGUxfHwiIzBiMDAwMCIsdGhpcy5jU2NhbGUyPXRoaXMuY1NjYWxlMnx8IiM0ZDEwMzciLHRoaXMuY1NjYWxlMz10aGlzLmNTY2FsZTN8fCIjM2Y1MjU4Iix0aGlzLmNTY2FsZTQ9dGhpcy5jU2NhbGU0fHwiIzRmMmYxYiIsdGhpcy5jU2NhbGU1PXRoaXMuY1NjYWxlNXx8IiM2ZTBhMGEiLHRoaXMuY1NjYWxlNj10aGlzLmNTY2FsZTZ8fCIjM2IwMDQ4Iix0aGlzLmNTY2FsZTc9dGhpcy5jU2NhbGU3fHwiIzk5NWEwMSIsdGhpcy5jU2NhbGU4PXRoaXMuY1NjYWxlOHx8IiMxNTQ3MDYiLHRoaXMuY1NjYWxlOT10aGlzLmNTY2FsZTl8fCIjMTYxNzIyIix0aGlzLmNTY2FsZTEwPXRoaXMuY1NjYWxlMTB8fCIjMDAyOTZmIix0aGlzLmNTY2FsZTExPXRoaXMuY1NjYWxlMTF8fCIjMDE2MjljIix0aGlzLmNTY2FsZTEyPXRoaXMuY1NjYWxlMTJ8fCIjMDEwMDI5Iix0aGlzLmNTY2FsZTA9dGhpcy5jU2NhbGUwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmNTY2FsZTE9dGhpcy5jU2NhbGUxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY1NjYWxlMj10aGlzLmNTY2FsZTJ8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmNTY2FsZTM9dGhpcy5jU2NhbGUzfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDozMH0pLHRoaXMuY1NjYWxlND10aGlzLmNTY2FsZTR8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5jU2NhbGU1PXRoaXMuY1NjYWxlNXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6OTB9KSx0aGlzLmNTY2FsZTY9dGhpcy5jU2NhbGU2fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmNTY2FsZTc9dGhpcy5jU2NhbGU3fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxNTB9KSx0aGlzLmNTY2FsZTg9dGhpcy5jU2NhbGU4fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoyMTB9KSx0aGlzLmNTY2FsZTk9dGhpcy5jU2NhbGU5fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoyNzB9KSx0aGlzLmNTY2FsZTEwPXRoaXMuY1NjYWxlMTB8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwMH0pLHRoaXMuY1NjYWxlMTE9dGhpcy5jU2NhbGUxMXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MzMwfSk7Zm9yKGxldCBlPTA7ZTx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2UrKyl0aGlzWyJjU2NhbGVJbnYiK2VdPXRoaXNbImNTY2FsZUludiIrZV18fG10KHRoaXNbImNTY2FsZSIrZV0pO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpc1siY1NjYWxlUGVlciIrZV09dGhpc1siY1NjYWxlUGVlciIrZV18fF90KHRoaXNbImNTY2FsZSIrZV0sMTApO2ZvcihsZXQgZT0wO2U8NTtlKyspdGhpc1sic3VyZmFjZSIrZV09dGhpc1sic3VyZmFjZSIrZV18fE1lKHRoaXMubWFpbkJrZyx7aDozMCxzOi0zMCxsOi0oLTEwK2UqNCl9KSx0aGlzWyJzdXJmYWNlUGVlciIrZV09dGhpc1sic3VyZmFjZVBlZXIiK2VdfHxNZSh0aGlzLm1haW5Ca2cse2g6MzAsczotMzAsbDotKC03K2UqNCl9KTt0aGlzLnNjYWxlTGFiZWxDb2xvcj10aGlzLnNjYWxlTGFiZWxDb2xvcnx8KHRoaXMuZGFya01vZGU/ImJsYWNrIjp0aGlzLmxhYmVsVGV4dENvbG9yKTtmb3IobGV0IGU9MDtlPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7ZSsrKXRoaXNbImNTY2FsZUxhYmVsIitlXT10aGlzWyJjU2NhbGVMYWJlbCIrZV18fHRoaXMuc2NhbGVMYWJlbENvbG9yO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpc1sicGllIitlXT10aGlzWyJjU2NhbGUiK2VdO3RoaXMucGllVGl0bGVUZXh0U2l6ZT10aGlzLnBpZVRpdGxlVGV4dFNpemV8fCIyNXB4Iix0aGlzLnBpZVRpdGxlVGV4dENvbG9yPXRoaXMucGllVGl0bGVUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTZWN0aW9uVGV4dFNpemU9dGhpcy5waWVTZWN0aW9uVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3I9dGhpcy5waWVTZWN0aW9uVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnBpZUxlZ2VuZFRleHRTaXplPXRoaXMucGllTGVnZW5kVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZUxlZ2VuZFRleHRDb2xvcj10aGlzLnBpZUxlZ2VuZFRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVN0cm9rZUNvbG9yPXRoaXMucGllU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVTdHJva2VXaWR0aD10aGlzLnBpZVN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGg9dGhpcy5waWVPdXRlclN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3I9dGhpcy5waWVPdXRlclN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMucXVhZHJhbnQxRmlsbD10aGlzLnF1YWRyYW50MUZpbGx8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucXVhZHJhbnQyRmlsbD10aGlzLnF1YWRyYW50MkZpbGx8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtyOjUsZzo1LGI6NX0pLHRoaXMucXVhZHJhbnQzRmlsbD10aGlzLnF1YWRyYW50M0ZpbGx8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtyOjEwLGc6MTAsYjoxMH0pLHRoaXMucXVhZHJhbnQ0RmlsbD10aGlzLnF1YWRyYW50NEZpbGx8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtyOjE1LGc6MTUsYjoxNX0pLHRoaXMucXVhZHJhbnQxVGV4dEZpbGw9dGhpcy5xdWFkcmFudDFUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnQyVGV4dEZpbGw9dGhpcy5xdWFkcmFudDJUZXh0RmlsbHx8TWUodGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi01LGc6LTUsYjotNX0pLHRoaXMucXVhZHJhbnQzVGV4dEZpbGw9dGhpcy5xdWFkcmFudDNUZXh0RmlsbHx8TWUodGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xMCxnOi0xMCxiOi0xMH0pLHRoaXMucXVhZHJhbnQ0VGV4dEZpbGw9dGhpcy5xdWFkcmFudDRUZXh0RmlsbHx8TWUodGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xNSxnOi0xNSxiOi0xNX0pLHRoaXMucXVhZHJhbnRQb2ludEZpbGw9dGhpcy5xdWFkcmFudFBvaW50RmlsbHx8ZmEodGhpcy5xdWFkcmFudDFGaWxsKT9fdCh0aGlzLnF1YWRyYW50MUZpbGwpOkl0KHRoaXMucXVhZHJhbnQxRmlsbCksdGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGw9dGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRUaXRsZUZpbGw9dGhpcy5xdWFkcmFudFRpdGxlRmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMueHlDaGFydD17YmFja2dyb3VuZENvbG9yOnRoaXMueHlDaGFydD8uYmFja2dyb3VuZENvbG9yfHx0aGlzLmJhY2tncm91bmQsdGl0bGVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnRpdGxlQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc1RpdGxlQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xhYmVsQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpY2tDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzVGlja0NvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMaW5lQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc0xpbmVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzVGl0bGVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzVGl0bGVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGFiZWxDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzVGlja0NvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNUaWNrQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xpbmVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzTGluZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IscGxvdENvbG9yUGFsZXR0ZTp0aGlzLnh5Q2hhcnQ/LnBsb3RDb2xvclBhbGV0dGV8fCIjMzQ5OGRiLCMyZWNjNzEsI2U3NGMzYywjZjFjNDBmLCNiZGMzYzcsI2ZmZmZmZiwjMzQ0OTVlLCM5YjU5YjYsIzFhYmM5YywjZTY3ZTIyIn0sdGhpcy5wYWNrZXQ9e3N0YXJ0Qnl0ZUNvbG9yOnRoaXMucHJpbWFyeVRleHRDb2xvcixlbmRCeXRlQ29sb3I6dGhpcy5wcmltYXJ5VGV4dENvbG9yLGxhYmVsQ29sb3I6dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRpdGxlQ29sb3I6dGhpcy5wcmltYXJ5VGV4dENvbG9yLGJsb2NrU3Ryb2tlQ29sb3I6dGhpcy5wcmltYXJ5VGV4dENvbG9yLGJsb2NrRmlsbENvbG9yOnRoaXMuYmFja2dyb3VuZH0sdGhpcy5jbGFzc1RleHQ9dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8IjEiLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8KHRoaXMuZGFya01vZGU/SXQodGhpcy5zZWNvbmRhcnlDb2xvciwzMCk6dGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3I9dGhpcy5yZWxhdGlvbkxhYmVsQ29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5naXQwPV90KHRoaXMuc2Vjb25kYXJ5Q29sb3IsMjApLHRoaXMuZ2l0MT1fdCh0aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsMjApLHRoaXMuZ2l0Mj1fdCh0aGlzLnBpZTN8fHRoaXMudGVydGlhcnlDb2xvciwyMCksdGhpcy5naXQzPV90KHRoaXMucGllNHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTMwfSksMjApLHRoaXMuZ2l0ND1fdCh0aGlzLnBpZTV8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MH0pLDIwKSx0aGlzLmdpdDU9X3QodGhpcy5waWU2fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotOTB9KSwxMCksdGhpcy5naXQ2PV90KHRoaXMucGllN3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSwxMCksdGhpcy5naXQ3PV90KHRoaXMucGllOHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksMjApLHRoaXMuZ2l0SW52MD10aGlzLmdpdEludjB8fG10KHRoaXMuZ2l0MCksdGhpcy5naXRJbnYxPXRoaXMuZ2l0SW52MXx8bXQodGhpcy5naXQxKSx0aGlzLmdpdEludjI9dGhpcy5naXRJbnYyfHxtdCh0aGlzLmdpdDIpLHRoaXMuZ2l0SW52Mz10aGlzLmdpdEludjN8fG10KHRoaXMuZ2l0MyksdGhpcy5naXRJbnY0PXRoaXMuZ2l0SW52NHx8bXQodGhpcy5naXQ0KSx0aGlzLmdpdEludjU9dGhpcy5naXRJbnY1fHxtdCh0aGlzLmdpdDUpLHRoaXMuZ2l0SW52Nj10aGlzLmdpdEludjZ8fG10KHRoaXMuZ2l0NiksdGhpcy5naXRJbnY3PXRoaXMuZ2l0SW52N3x8bXQodGhpcy5naXQ3KSx0aGlzLmdpdEJyYW5jaExhYmVsMD10aGlzLmdpdEJyYW5jaExhYmVsMHx8bXQodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDE9dGhpcy5naXRCcmFuY2hMYWJlbDF8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDI9dGhpcy5naXRCcmFuY2hMYWJlbDJ8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDM9dGhpcy5naXRCcmFuY2hMYWJlbDN8fG10KHRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuZ2l0QnJhbmNoTGFiZWw0PXRoaXMuZ2l0QnJhbmNoTGFiZWw0fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw1PXRoaXMuZ2l0QnJhbmNoTGFiZWw1fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw2PXRoaXMuZ2l0QnJhbmNoTGFiZWw2fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw3PXRoaXMuZ2l0QnJhbmNoTGFiZWw3fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMudGFnTGFiZWxDb2xvcj10aGlzLnRhZ0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZD10aGlzLnRhZ0xhYmVsQmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy50YWdMYWJlbEJvcmRlcj10aGlzLnRhZ0JvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YWdMYWJlbEZvbnRTaXplPXRoaXMudGFnTGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuY29tbWl0TGFiZWxDb2xvcj10aGlzLmNvbW1pdExhYmVsQ29sb3J8fHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yLHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kPXRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZT10aGlzLmNvbW1pdExhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZD10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZHx8X3QodGhpcy5iYWNrZ3JvdW5kLDEyKSx0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW49dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVufHxfdCh0aGlzLmJhY2tncm91bmQsMiksdGhpcy5ub2RlQm9yZGVyPXRoaXMubm9kZUJvcmRlcnx8IiM5OTkifWNhbGN1bGF0ZShlKXtpZih0eXBlb2YgZSE9Im9iamVjdCIpe3RoaXMudXBkYXRlQ29sb3JzKCk7cmV0dXJufWxldCByPU9iamVjdC5rZXlzKGUpO3IuZm9yRWFjaChuPT57dGhpc1tuXT1lW25dfSksdGhpcy51cGRhdGVDb2xvcnMoKSxyLmZvckVhY2gobj0+e3RoaXNbbl09ZVtuXX0pfX0seno9byh0PT57bGV0IGU9bmV3IEpTO3JldHVybiBlLmNhbGN1bGF0ZSh0KSxlfSwiZ2V0VGhlbWVWYXJpYWJsZXMiKX0pO3ZhciBlQyx2cCxpND1NKCgpPT57InVzZSBzdHJpY3QiO0xvKCk7eXAoKTtzeSgpO2VDPWNsYXNze3N0YXRpY3tvKHRoaXMsIlRoZW1lIil9Y29uc3RydWN0b3IoKXt0aGlzLmJhY2tncm91bmQ9IiNmNGY0ZjQiLHRoaXMucHJpbWFyeUNvbG9yPSIjRUNFQ0ZGIix0aGlzLnNlY29uZGFyeUNvbG9yPU1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuc2Vjb25kYXJ5Q29sb3I9IiNmZmZmZGUiLHRoaXMudGVydGlhcnlDb2xvcj1NZSh0aGlzLnByaW1hcnlDb2xvcix7aDotMTYwfSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9U2kodGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1TaSh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj1TaSh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPW10KHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj1tdCh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPW10KHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9bXQodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj1tdCh0aGlzLmJhY2tncm91bmQpLHRoaXMuYmFja2dyb3VuZD0id2hpdGUiLHRoaXMubWFpbkJrZz0iI0VDRUNGRiIsdGhpcy5zZWNvbmRCa2c9IiNmZmZmZGUiLHRoaXMubGluZUNvbG9yPSIjMzMzMzMzIix0aGlzLmJvcmRlcjE9IiM5MzcwREIiLHRoaXMuYm9yZGVyMj0iI2FhYWEzMyIsdGhpcy5hcnJvd2hlYWRDb2xvcj0iIzMzMzMzMyIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMubGFiZWxCYWNrZ3JvdW5kPSJyZ2JhKDIzMiwyMzIsMjMyLCAwLjgpIix0aGlzLnRleHRDb2xvcj0iIzMzMyIsdGhpcy5USEVNRV9DT0xPUl9MSU1JVD0xMix0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImJsYWNrIix0aGlzLmFjdG9yTGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSIjNjY2Iix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9ImNhbGN1bGF0ZWQiLHRoaXMuZXhjbHVkZUJrZ0NvbG9yPSIjZWVlZWVlIix0aGlzLnRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmdyaWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmNyaXRCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9WnMoMTAyLDEwMiwyNTUsLjQ5KSx0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iI2ZmZjQwMCIsdGhpcy50YXNrQm9yZGVyQ29sb3I9IiM1MzRmYmMiLHRoaXMudGFza0JrZ0NvbG9yPSIjOGE5MGRkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0id2hpdGUiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iYmxhY2siLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iIzAwMzE2MyIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9IiM1MzRmYmMiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSIjYmZjN2ZmIix0aGlzLmdyaWRDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iI2ZmODg4OCIsdGhpcy5jcml0QmtnQ29sb3I9InJlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0icmVkIix0aGlzLnBlcnNvbkJvcmRlcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnBlcnNvbkJrZz10aGlzLm1haW5Ca2csdGhpcy5hcmNoRWRnZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFyY2hFZGdlQXJyb3dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hcmNoRWRnZVdpZHRoPSIzIix0aGlzLmFyY2hHcm91cEJvcmRlckNvbG9yPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuYXJjaEdyb3VwQm9yZGVyV2lkdGg9IjJweCIsdGhpcy5sYWJlbENvbG9yPSJibGFjayIsdGhpcy5lcnJvckJrZ0NvbG9yPSIjNTUyMjIyIix0aGlzLmVycm9yVGV4dENvbG9yPSIjNTUyMjIyIix0aGlzLnVwZGF0ZUNvbG9ycygpfXVwZGF0ZUNvbG9ycygpe3RoaXMuY1NjYWxlMD10aGlzLmNTY2FsZTB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuY1NjYWxlMT10aGlzLmNTY2FsZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jU2NhbGUyPXRoaXMuY1NjYWxlMnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY1NjYWxlMz10aGlzLmNTY2FsZTN8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwfSksdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmNTY2FsZTU9dGhpcy5jU2NhbGU1fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDo5MH0pLHRoaXMuY1NjYWxlNj10aGlzLmNTY2FsZTZ8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuY1NjYWxlNz10aGlzLmNTY2FsZTd8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjE1MH0pLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjIxMH0pLHRoaXMuY1NjYWxlOT10aGlzLmNTY2FsZTl8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjI3MH0pLHRoaXMuY1NjYWxlMTA9dGhpcy5jU2NhbGUxMHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MzAwfSksdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDozMzB9KSx0aGlzLmNTY2FsZVBlZXIxPXRoaXMuY1NjYWxlUGVlcjF8fEl0KHRoaXMuc2Vjb25kYXJ5Q29sb3IsNDUpLHRoaXMuY1NjYWxlUGVlcjI9dGhpcy5jU2NhbGVQZWVyMnx8SXQodGhpcy50ZXJ0aWFyeUNvbG9yLDQwKTtmb3IobGV0IGU9MDtlPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7ZSsrKXRoaXNbImNTY2FsZSIrZV09SXQodGhpc1siY1NjYWxlIitlXSwxMCksdGhpc1siY1NjYWxlUGVlciIrZV09dGhpc1siY1NjYWxlUGVlciIrZV18fEl0KHRoaXNbImNTY2FsZSIrZV0sMjUpO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpc1siY1NjYWxlSW52IitlXT10aGlzWyJjU2NhbGVJbnYiK2VdfHxNZSh0aGlzWyJjU2NhbGUiK2VdLHtoOjE4MH0pO2ZvcihsZXQgZT0wO2U8NTtlKyspdGhpc1sic3VyZmFjZSIrZV09dGhpc1sic3VyZmFjZSIrZV18fE1lKHRoaXMubWFpbkJrZyx7aDozMCxsOi0oNStlKjUpfSksdGhpc1sic3VyZmFjZVBlZXIiK2VdPXRoaXNbInN1cmZhY2VQZWVyIitlXXx8TWUodGhpcy5tYWluQmtnLHtoOjMwLGw6LSg3K2UqNSl9KTtpZih0aGlzLnNjYWxlTGFiZWxDb2xvcj10aGlzLnNjYWxlTGFiZWxDb2xvciE9PSJjYWxjdWxhdGVkIiYmdGhpcy5zY2FsZUxhYmVsQ29sb3I/dGhpcy5zY2FsZUxhYmVsQ29sb3I6dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmxhYmVsVGV4dENvbG9yIT09ImNhbGN1bGF0ZWQiKXt0aGlzLmNTY2FsZUxhYmVsMD10aGlzLmNTY2FsZUxhYmVsMHx8bXQodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5jU2NhbGVMYWJlbDM9dGhpcy5jU2NhbGVMYWJlbDN8fG10KHRoaXMubGFiZWxUZXh0Q29sb3IpO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpc1siY1NjYWxlTGFiZWwiK2VdPXRoaXNbImNTY2FsZUxhYmVsIitlXXx8dGhpcy5sYWJlbFRleHRDb2xvcn10aGlzLm5vZGVCa2c9dGhpcy5tYWluQmtnLHRoaXMubm9kZUJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5jbHVzdGVyQmtnPXRoaXMuc2Vjb25kQmtnLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmJvcmRlcjIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMudGl0bGVDb2xvcj10aGlzLnRleHRDb2xvcix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9dGhpcy5sYWJlbEJhY2tncm91bmQsdGhpcy5hY3RvckJvcmRlcj1fdCh0aGlzLmJvcmRlcjEsMjMpLHRoaXMuYWN0b3JCa2c9dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmFjdG9yQmtnLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy50ZXh0Q29sb3IsdGhpcy5zaWduYWxUZXh0Q29sb3I9dGhpcy50ZXh0Q29sb3IsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPXRoaXMuYWN0b3JCb3JkZXIsdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubG9vcFRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubm90ZUJvcmRlckNvbG9yPXRoaXMuYm9yZGVyMix0aGlzLm5vdGVUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmFjdG9yTGluZUNvbG9yPXRoaXMuYWN0b3JCb3JkZXIsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLmFyY2hFZGdlQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5hcmNoRWRnZUFycm93Q29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8IiNmMGYwZjAiLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5jb21wb3NpdGVCb3JkZXI9dGhpcy5jb21wb3NpdGVCb3JkZXJ8fHRoaXMubm9kZUJvcmRlcix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLm5vZGVCb3JkZXIsdGhpcy5zcGVjaWFsU3RhdGVDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj1NZSh0aGlzLnByaW1hcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGUzPU1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND1NZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT1NZSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU2PU1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PU1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5waWUxPXRoaXMucGllMXx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5waWUyPXRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnBpZTM9dGhpcy5waWUzfHxNZSh0aGlzLnRlcnRpYXJ5Q29sb3Ise2w6LTQwfSksdGhpcy5waWU0PXRoaXMucGllNHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU1PXRoaXMucGllNXx8TWUodGhpcy5zZWNvbmRhcnlDb2xvcix7bDotMzB9KSx0aGlzLnBpZTY9dGhpcy5waWU2fHxNZSh0aGlzLnRlcnRpYXJ5Q29sb3Ise2w6LTIwfSksdGhpcy5waWU3PXRoaXMucGllN3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMjB9KSx0aGlzLnBpZTg9dGhpcy5waWU4fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotNDB9KSx0aGlzLnBpZTk9dGhpcy5waWU5fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotNDB9KSx0aGlzLnBpZTEwPXRoaXMucGllMTB8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTQwfSksdGhpcy5waWUxMT10aGlzLnBpZTExfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotOTAsbDotNDB9KSx0aGlzLnBpZTEyPXRoaXMucGllMTJ8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMCxsOi0zMH0pLHRoaXMucGllVGl0bGVUZXh0U2l6ZT10aGlzLnBpZVRpdGxlVGV4dFNpemV8fCIyNXB4Iix0aGlzLnBpZVRpdGxlVGV4dENvbG9yPXRoaXMucGllVGl0bGVUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTZWN0aW9uVGV4dFNpemU9dGhpcy5waWVTZWN0aW9uVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3I9dGhpcy5waWVTZWN0aW9uVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnBpZUxlZ2VuZFRleHRTaXplPXRoaXMucGllTGVnZW5kVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZUxlZ2VuZFRleHRDb2xvcj10aGlzLnBpZUxlZ2VuZFRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVN0cm9rZUNvbG9yPXRoaXMucGllU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVTdHJva2VXaWR0aD10aGlzLnBpZVN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGg9dGhpcy5waWVPdXRlclN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3I9dGhpcy5waWVPdXRlclN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMucXVhZHJhbnQxRmlsbD10aGlzLnF1YWRyYW50MUZpbGx8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucXVhZHJhbnQyRmlsbD10aGlzLnF1YWRyYW50MkZpbGx8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtyOjUsZzo1LGI6NX0pLHRoaXMucXVhZHJhbnQzRmlsbD10aGlzLnF1YWRyYW50M0ZpbGx8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtyOjEwLGc6MTAsYjoxMH0pLHRoaXMucXVhZHJhbnQ0RmlsbD10aGlzLnF1YWRyYW50NEZpbGx8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtyOjE1LGc6MTUsYjoxNX0pLHRoaXMucXVhZHJhbnQxVGV4dEZpbGw9dGhpcy5xdWFkcmFudDFUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnQyVGV4dEZpbGw9dGhpcy5xdWFkcmFudDJUZXh0RmlsbHx8TWUodGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi01LGc6LTUsYjotNX0pLHRoaXMucXVhZHJhbnQzVGV4dEZpbGw9dGhpcy5xdWFkcmFudDNUZXh0RmlsbHx8TWUodGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xMCxnOi0xMCxiOi0xMH0pLHRoaXMucXVhZHJhbnQ0VGV4dEZpbGw9dGhpcy5xdWFkcmFudDRUZXh0RmlsbHx8TWUodGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xNSxnOi0xNSxiOi0xNX0pLHRoaXMucXVhZHJhbnRQb2ludEZpbGw9dGhpcy5xdWFkcmFudFBvaW50RmlsbHx8ZmEodGhpcy5xdWFkcmFudDFGaWxsKT9fdCh0aGlzLnF1YWRyYW50MUZpbGwpOkl0KHRoaXMucXVhZHJhbnQxRmlsbCksdGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGw9dGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRUaXRsZUZpbGw9dGhpcy5xdWFkcmFudFRpdGxlRmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMueHlDaGFydD17YmFja2dyb3VuZENvbG9yOnRoaXMueHlDaGFydD8uYmFja2dyb3VuZENvbG9yfHx0aGlzLmJhY2tncm91bmQsdGl0bGVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnRpdGxlQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc1RpdGxlQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xhYmVsQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpY2tDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzVGlja0NvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMaW5lQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc0xpbmVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzVGl0bGVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzVGl0bGVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGFiZWxDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzVGlja0NvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNUaWNrQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xpbmVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzTGluZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IscGxvdENvbG9yUGFsZXR0ZTp0aGlzLnh5Q2hhcnQ/LnBsb3RDb2xvclBhbGV0dGV8fCIjRUNFQ0ZGLCM4NDkzQTYsI0ZGQzNBMCwjRENEREUxLCNCOEU5OTQsI0QxQTM2RiwjQzNDREU2LCNGRkI2QzEsIzQ5NjA3OCwjRjhGM0UzIn0sdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHwiMSIsdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcj10aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZWxhdGlvbkNvbG9yPXRoaXMucmVsYXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZD10aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLmxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmdpdDA9dGhpcy5naXQwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmdpdDE9dGhpcy5naXQxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZ2l0Mj10aGlzLmdpdDJ8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmdpdDM9dGhpcy5naXQzfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotMzB9KSx0aGlzLmdpdDQ9dGhpcy5naXQ0fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjB9KSx0aGlzLmdpdDU9dGhpcy5naXQ1fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotOTB9KSx0aGlzLmdpdDY9dGhpcy5naXQ2fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuZ2l0Nz10aGlzLmdpdDd8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuZGFya01vZGU/KHRoaXMuZ2l0MD1fdCh0aGlzLmdpdDAsMjUpLHRoaXMuZ2l0MT1fdCh0aGlzLmdpdDEsMjUpLHRoaXMuZ2l0Mj1fdCh0aGlzLmdpdDIsMjUpLHRoaXMuZ2l0Mz1fdCh0aGlzLmdpdDMsMjUpLHRoaXMuZ2l0ND1fdCh0aGlzLmdpdDQsMjUpLHRoaXMuZ2l0NT1fdCh0aGlzLmdpdDUsMjUpLHRoaXMuZ2l0Nj1fdCh0aGlzLmdpdDYsMjUpLHRoaXMuZ2l0Nz1fdCh0aGlzLmdpdDcsMjUpKToodGhpcy5naXQwPUl0KHRoaXMuZ2l0MCwyNSksdGhpcy5naXQxPUl0KHRoaXMuZ2l0MSwyNSksdGhpcy5naXQyPUl0KHRoaXMuZ2l0MiwyNSksdGhpcy5naXQzPUl0KHRoaXMuZ2l0MywyNSksdGhpcy5naXQ0PUl0KHRoaXMuZ2l0NCwyNSksdGhpcy5naXQ1PUl0KHRoaXMuZ2l0NSwyNSksdGhpcy5naXQ2PUl0KHRoaXMuZ2l0NiwyNSksdGhpcy5naXQ3PUl0KHRoaXMuZ2l0NywyNSkpLHRoaXMuZ2l0SW52MD10aGlzLmdpdEludjB8fEl0KG10KHRoaXMuZ2l0MCksMjUpLHRoaXMuZ2l0SW52MT10aGlzLmdpdEludjF8fG10KHRoaXMuZ2l0MSksdGhpcy5naXRJbnYyPXRoaXMuZ2l0SW52Mnx8bXQodGhpcy5naXQyKSx0aGlzLmdpdEludjM9dGhpcy5naXRJbnYzfHxtdCh0aGlzLmdpdDMpLHRoaXMuZ2l0SW52ND10aGlzLmdpdEludjR8fG10KHRoaXMuZ2l0NCksdGhpcy5naXRJbnY1PXRoaXMuZ2l0SW52NXx8bXQodGhpcy5naXQ1KSx0aGlzLmdpdEludjY9dGhpcy5naXRJbnY2fHxtdCh0aGlzLmdpdDYpLHRoaXMuZ2l0SW52Nz10aGlzLmdpdEludjd8fG10KHRoaXMuZ2l0NyksdGhpcy5naXRCcmFuY2hMYWJlbDA9dGhpcy5naXRCcmFuY2hMYWJlbDB8fG10KHRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuZ2l0QnJhbmNoTGFiZWwxPXRoaXMuZ2l0QnJhbmNoTGFiZWwxfHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwyPXRoaXMuZ2l0QnJhbmNoTGFiZWwyfHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwzPXRoaXMuZ2l0QnJhbmNoTGFiZWwzfHxtdCh0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmdpdEJyYW5jaExhYmVsND10aGlzLmdpdEJyYW5jaExhYmVsNHx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNT10aGlzLmdpdEJyYW5jaExhYmVsNXx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNj10aGlzLmdpdEJyYW5jaExhYmVsNnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNz10aGlzLmdpdEJyYW5jaExhYmVsN3x8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQ29sb3I9dGhpcy50YWdMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy50YWdMYWJlbEJhY2tncm91bmQ9dGhpcy50YWdMYWJlbEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMudGFnTGFiZWxCb3JkZXI9dGhpcy50YWdCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMudGFnTGFiZWxGb250U2l6ZT10aGlzLnRhZ0xhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmNvbW1pdExhYmVsQ29sb3I9dGhpcy5jb21taXRMYWJlbENvbG9yfHx0aGlzLnNlY29uZGFyeVRleHRDb2xvcix0aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZD10aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZHx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNvbW1pdExhYmVsRm9udFNpemU9dGhpcy5jb21taXRMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGQ9dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGR8fGZoLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbj10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW58fGRofWNhbGN1bGF0ZShlKXtpZih0eXBlb2YgZSE9Im9iamVjdCIpe3RoaXMudXBkYXRlQ29sb3JzKCk7cmV0dXJufWxldCByPU9iamVjdC5rZXlzKGUpO3IuZm9yRWFjaChuPT57dGhpc1tuXT1lW25dfSksdGhpcy51cGRhdGVDb2xvcnMoKSxyLmZvckVhY2gobj0+e3RoaXNbbl09ZVtuXX0pfX0sdnA9byh0PT57bGV0IGU9bmV3IGVDO3JldHVybiBlLmNhbGN1bGF0ZSh0KSxlfSwiZ2V0VGhlbWVWYXJpYWJsZXMiKX0pO3ZhciB0QywkeixWej1NKCgpPT57InVzZSBzdHJpY3QiO0xvKCk7c3koKTt5cCgpO3RDPWNsYXNze3N0YXRpY3tvKHRoaXMsIlRoZW1lIil9Y29uc3RydWN0b3IoKXt0aGlzLmJhY2tncm91bmQ9IiNmNGY0ZjQiLHRoaXMucHJpbWFyeUNvbG9yPSIjY2RlNDk4Iix0aGlzLnNlY29uZGFyeUNvbG9yPSIjY2RmZmIyIix0aGlzLmJhY2tncm91bmQ9IndoaXRlIix0aGlzLm1haW5Ca2c9IiNjZGU0OTgiLHRoaXMuc2Vjb25kQmtnPSIjY2RmZmIyIix0aGlzLmxpbmVDb2xvcj0iZ3JlZW4iLHRoaXMuYm9yZGVyMT0iIzEzNTQwYyIsdGhpcy5ib3JkZXIyPSIjNmVhYTQ5Iix0aGlzLmFycm93aGVhZENvbG9yPSJncmVlbiIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMudGVydGlhcnlDb2xvcj1fdCgiI2NkZTQ5OCIsMTApLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPVNpKHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9U2kodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9U2kodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj1tdCh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9bXQodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj1tdCh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5saW5lQ29sb3I9bXQodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj1tdCh0aGlzLmJhY2tncm91bmQpLHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ9MTIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iIzMzMyIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSIjZThlOGU4Iix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJibGFjayIsdGhpcy5hY3RvckxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxDb2xvcj0iIzMzMyIsdGhpcy5zaWduYWxUZXh0Q29sb3I9IiMzMzMiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSIjMzI2OTMyIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iIzY2NiIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9IiNmNGY0ZjQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSIjNmVhYTQ5Iix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iIzZlYWE0OSIsdGhpcy5leGNsdWRlQmtnQ29sb3I9IiNlZWVlZWUiLHRoaXMudGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tCa2dDb2xvcj0iIzQ4N2UzYSIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9IndoaXRlIix0aGlzLnRhc2tUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImJsYWNrIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9IiMwMDMxNjMiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ncmlkQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iZ3JleSIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9IiNmZjg4ODgiLHRoaXMuY3JpdEJrZ0NvbG9yPSJyZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9InJlZCIsdGhpcy5wZXJzb25Cb3JkZXI9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5wZXJzb25Ca2c9dGhpcy5tYWluQmtnLHRoaXMuYXJjaEVkZ2VDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hcmNoRWRnZUFycm93Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYXJjaEVkZ2VXaWR0aD0iMyIsdGhpcy5hcmNoR3JvdXBCb3JkZXJDb2xvcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLmFyY2hHcm91cEJvcmRlcldpZHRoPSIycHgiLHRoaXMubGFiZWxDb2xvcj0iYmxhY2siLHRoaXMuZXJyb3JCa2dDb2xvcj0iIzU1MjIyMiIsdGhpcy5lcnJvclRleHRDb2xvcj0iIzU1MjIyMiJ9dXBkYXRlQ29sb3JzKCl7dGhpcy5hY3RvckJvcmRlcj1JdCh0aGlzLm1haW5Ca2csMjApLHRoaXMuYWN0b3JCa2c9dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmFjdG9yQmtnLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLmJvcmRlcjIsdGhpcy5ub3RlVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMuY1NjYWxlMD10aGlzLmNTY2FsZTB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuY1NjYWxlMT10aGlzLmNTY2FsZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jU2NhbGUyPXRoaXMuY1NjYWxlMnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY1NjYWxlMz10aGlzLmNTY2FsZTN8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwfSksdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmNTY2FsZTU9dGhpcy5jU2NhbGU1fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDo5MH0pLHRoaXMuY1NjYWxlNj10aGlzLmNTY2FsZTZ8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuY1NjYWxlNz10aGlzLmNTY2FsZTd8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjE1MH0pLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjIxMH0pLHRoaXMuY1NjYWxlOT10aGlzLmNTY2FsZTl8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjI3MH0pLHRoaXMuY1NjYWxlMTA9dGhpcy5jU2NhbGUxMHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MzAwfSksdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDozMzB9KSx0aGlzLmNTY2FsZVBlZXIxPXRoaXMuY1NjYWxlUGVlcjF8fEl0KHRoaXMuc2Vjb25kYXJ5Q29sb3IsNDUpLHRoaXMuY1NjYWxlUGVlcjI9dGhpcy5jU2NhbGVQZWVyMnx8SXQodGhpcy50ZXJ0aWFyeUNvbG9yLDQwKTtmb3IobGV0IGU9MDtlPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7ZSsrKXRoaXNbImNTY2FsZSIrZV09SXQodGhpc1siY1NjYWxlIitlXSwxMCksdGhpc1siY1NjYWxlUGVlciIrZV09dGhpc1siY1NjYWxlUGVlciIrZV18fEl0KHRoaXNbImNTY2FsZSIrZV0sMjUpO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpc1siY1NjYWxlSW52IitlXT10aGlzWyJjU2NhbGVJbnYiK2VdfHxNZSh0aGlzWyJjU2NhbGUiK2VdLHtoOjE4MH0pO3RoaXMuc2NhbGVMYWJlbENvbG9yPXRoaXMuc2NhbGVMYWJlbENvbG9yIT09ImNhbGN1bGF0ZWQiJiZ0aGlzLnNjYWxlTGFiZWxDb2xvcj90aGlzLnNjYWxlTGFiZWxDb2xvcjp0aGlzLmxhYmVsVGV4dENvbG9yO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpc1siY1NjYWxlTGFiZWwiK2VdPXRoaXNbImNTY2FsZUxhYmVsIitlXXx8dGhpcy5zY2FsZUxhYmVsQ29sb3I7Zm9yKGxldCBlPTA7ZTw1O2UrKyl0aGlzWyJzdXJmYWNlIitlXT10aGlzWyJzdXJmYWNlIitlXXx8TWUodGhpcy5tYWluQmtnLHtoOjMwLHM6LTMwLGw6LSg1K2UqNSl9KSx0aGlzWyJzdXJmYWNlUGVlciIrZV09dGhpc1sic3VyZmFjZVBlZXIiK2VdfHxNZSh0aGlzLm1haW5Ca2cse2g6MzAsczotMzAsbDotKDgrZSo1KX0pO3RoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy50YXNrQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIxLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9dGhpcy50YXNrQm9yZGVyQ29sb3IsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9dGhpcy5tYWluQmtnLHRoaXMuYXJjaEVkZ2VDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmFyY2hFZGdlQXJyb3dDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2YwZjBmMCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5jbGFzc1RleHQ9dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuZmlsbFR5cGUwPXRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZmlsbFR5cGUxPXRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz1NZSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9TWUodGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj1NZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz1NZSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMucGllMT10aGlzLnBpZTF8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucGllMj10aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5waWUzPXRoaXMucGllM3x8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMucGllND10aGlzLnBpZTR8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtsOi0zMH0pLHRoaXMucGllNT10aGlzLnBpZTV8fE1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2w6LTMwfSksdGhpcy5waWU2PXRoaXMucGllNnx8TWUodGhpcy50ZXJ0aWFyeUNvbG9yLHtoOjQwLGw6LTQwfSksdGhpcy5waWU3PXRoaXMucGllN3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMTB9KSx0aGlzLnBpZTg9dGhpcy5waWU4fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotMTB9KSx0aGlzLnBpZTk9dGhpcy5waWU5fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDowfSksdGhpcy5waWUxMD10aGlzLnBpZTEwfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi01MH0pLHRoaXMucGllMTE9dGhpcy5waWUxMXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTUwfSksdGhpcy5waWUxMj10aGlzLnBpZTEyfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotNTB9KSx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fGZhKHRoaXMucXVhZHJhbnQxRmlsbCk/X3QodGhpcy5xdWFkcmFudDFGaWxsKTpJdCh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnBhY2tldD17c3RhcnRCeXRlQ29sb3I6dGhpcy5wcmltYXJ5VGV4dENvbG9yLGVuZEJ5dGVDb2xvcjp0aGlzLnByaW1hcnlUZXh0Q29sb3IsbGFiZWxDb2xvcjp0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGl0bGVDb2xvcjp0aGlzLnByaW1hcnlUZXh0Q29sb3IsYmxvY2tTdHJva2VDb2xvcjp0aGlzLnByaW1hcnlUZXh0Q29sb3IsYmxvY2tGaWxsQ29sb3I6dGhpcy5tYWluQmtnfSx0aGlzLnh5Q2hhcnQ9e2JhY2tncm91bmRDb2xvcjp0aGlzLnh5Q2hhcnQ/LmJhY2tncm91bmRDb2xvcnx8dGhpcy5iYWNrZ3JvdW5kLHRpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py50aXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaXRsZUNvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNUaXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMYWJlbENvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaWNrQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc1RpY2tDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGluZUNvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNMaW5lQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc1RpdGxlQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xhYmVsQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpY2tDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzVGlja0NvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMaW5lQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc0xpbmVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHBsb3RDb2xvclBhbGV0dGU6dGhpcy54eUNoYXJ0Py5wbG90Q29sb3JQYWxldHRlfHwiI0NERTQ5OCwjRkY2QjZCLCNBMEQyREIsI0Q3QkRFMiwjRjBGMEYwLCNGRkMzQTAsIzdGRDhCRSwjRkY5QThCLCNGQUYzRTAsI0ZGRjE3NiJ9LHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8IjEiLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8dGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuZ2l0MD10aGlzLmdpdDB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZ2l0MT10aGlzLmdpdDF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5naXQyPXRoaXMuZ2l0Mnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZ2l0Mz10aGlzLmdpdDN8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0zMH0pLHRoaXMuZ2l0ND10aGlzLmdpdDR8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MH0pLHRoaXMuZ2l0NT10aGlzLmdpdDV8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi05MH0pLHRoaXMuZ2l0Nj10aGlzLmdpdDZ8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5naXQ3PXRoaXMuZ2l0N3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5kYXJrTW9kZT8odGhpcy5naXQwPV90KHRoaXMuZ2l0MCwyNSksdGhpcy5naXQxPV90KHRoaXMuZ2l0MSwyNSksdGhpcy5naXQyPV90KHRoaXMuZ2l0MiwyNSksdGhpcy5naXQzPV90KHRoaXMuZ2l0MywyNSksdGhpcy5naXQ0PV90KHRoaXMuZ2l0NCwyNSksdGhpcy5naXQ1PV90KHRoaXMuZ2l0NSwyNSksdGhpcy5naXQ2PV90KHRoaXMuZ2l0NiwyNSksdGhpcy5naXQ3PV90KHRoaXMuZ2l0NywyNSkpOih0aGlzLmdpdDA9SXQodGhpcy5naXQwLDI1KSx0aGlzLmdpdDE9SXQodGhpcy5naXQxLDI1KSx0aGlzLmdpdDI9SXQodGhpcy5naXQyLDI1KSx0aGlzLmdpdDM9SXQodGhpcy5naXQzLDI1KSx0aGlzLmdpdDQ9SXQodGhpcy5naXQ0LDI1KSx0aGlzLmdpdDU9SXQodGhpcy5naXQ1LDI1KSx0aGlzLmdpdDY9SXQodGhpcy5naXQ2LDI1KSx0aGlzLmdpdDc9SXQodGhpcy5naXQ3LDI1KSksdGhpcy5naXRJbnYwPXRoaXMuZ2l0SW52MHx8bXQodGhpcy5naXQwKSx0aGlzLmdpdEludjE9dGhpcy5naXRJbnYxfHxtdCh0aGlzLmdpdDEpLHRoaXMuZ2l0SW52Mj10aGlzLmdpdEludjJ8fG10KHRoaXMuZ2l0MiksdGhpcy5naXRJbnYzPXRoaXMuZ2l0SW52M3x8bXQodGhpcy5naXQzKSx0aGlzLmdpdEludjQ9dGhpcy5naXRJbnY0fHxtdCh0aGlzLmdpdDQpLHRoaXMuZ2l0SW52NT10aGlzLmdpdEludjV8fG10KHRoaXMuZ2l0NSksdGhpcy5naXRJbnY2PXRoaXMuZ2l0SW52Nnx8bXQodGhpcy5naXQ2KSx0aGlzLmdpdEludjc9dGhpcy5naXRJbnY3fHxtdCh0aGlzLmdpdDcpLHRoaXMuZ2l0QnJhbmNoTGFiZWwwPXRoaXMuZ2l0QnJhbmNoTGFiZWwwfHxtdCh0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmdpdEJyYW5jaExhYmVsMT10aGlzLmdpdEJyYW5jaExhYmVsMXx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMj10aGlzLmdpdEJyYW5jaExhYmVsMnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMz10aGlzLmdpdEJyYW5jaExhYmVsM3x8bXQodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDQ9dGhpcy5naXRCcmFuY2hMYWJlbDR8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDU9dGhpcy5naXRCcmFuY2hMYWJlbDV8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDY9dGhpcy5naXRCcmFuY2hMYWJlbDZ8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDc9dGhpcy5naXRCcmFuY2hMYWJlbDd8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy50YWdMYWJlbENvbG9yPXRoaXMudGFnTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kPXRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhZ0xhYmVsQm9yZGVyPXRoaXMudGFnQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhZ0xhYmVsRm9udFNpemU9dGhpcy50YWdMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5jb21taXRMYWJlbENvbG9yPXRoaXMuY29tbWl0TGFiZWxDb2xvcnx8dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQ9dGhpcy5jb21taXRMYWJlbEJhY2tncm91bmR8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jb21taXRMYWJlbEZvbnRTaXplPXRoaXMuY29tbWl0TGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkfHxmaCx0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW49dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVufHxkaH1jYWxjdWxhdGUoZSl7aWYodHlwZW9mIGUhPSJvYmplY3QiKXt0aGlzLnVwZGF0ZUNvbG9ycygpO3JldHVybn1sZXQgcj1PYmplY3Qua2V5cyhlKTtyLmZvckVhY2gobj0+e3RoaXNbbl09ZVtuXX0pLHRoaXMudXBkYXRlQ29sb3JzKCksci5mb3JFYWNoKG49Pnt0aGlzW25dPWVbbl19KX19LCR6PW8odD0+e2xldCBlPW5ldyB0QztyZXR1cm4gZS5jYWxjdWxhdGUodCksZX0sImdldFRoZW1lVmFyaWFibGVzIil9KTt2YXIgckMsVXosSHo9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMbygpO3lwKCk7c3koKTtyQz1jbGFzc3tzdGF0aWN7byh0aGlzLCJUaGVtZSIpfWNvbnN0cnVjdG9yKCl7dGhpcy5wcmltYXJ5Q29sb3I9IiNlZWUiLHRoaXMuY29udHJhc3Q9IiM3MDcwNzAiLHRoaXMuc2Vjb25kYXJ5Q29sb3I9X3QodGhpcy5jb250cmFzdCw1NSksdGhpcy5iYWNrZ3JvdW5kPSIjZmZmZmZmIix0aGlzLnRlcnRpYXJ5Q29sb3I9TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTE2MH0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPVNpKHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9U2kodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9U2kodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj1tdCh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9bXQodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj1tdCh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPW10KHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9bXQodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLm1haW5Ca2c9IiNlZWUiLHRoaXMuc2Vjb25kQmtnPSJjYWxjdWxhdGVkIix0aGlzLmxpbmVDb2xvcj0iIzY2NiIsdGhpcy5ib3JkZXIxPSIjOTk5Iix0aGlzLmJvcmRlcjI9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZT0iI2ZmYSIsdGhpcy50ZXh0PSIjMzMzIix0aGlzLmNyaXRpY2FsPSIjZDQyIix0aGlzLmRvbmU9IiNiYmIiLHRoaXMuYXJyb3doZWFkQ29sb3I9IiMzMzMzMzMiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLlRIRU1FX0NPTE9SX0xJTUlUPTEyLHRoaXMubm9kZUJrZz0iY2FsY3VsYXRlZCIsdGhpcy5ub2RlQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRpdGxlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD0id2hpdGUiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JMaW5lQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSIjNjY2Iix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSJjYWxjdWxhdGVkIix0aGlzLmV4Y2x1ZGVCa2dDb2xvcj0iI2VlZWVlZSIsdGhpcy50YXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0id2hpdGUiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZ3JpZENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5jcml0QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnBlcnNvbkJvcmRlcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnBlcnNvbkJrZz10aGlzLm1haW5Ca2csdGhpcy5hcmNoRWRnZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFyY2hFZGdlQXJyb3dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hcmNoRWRnZVdpZHRoPSIzIix0aGlzLmFyY2hHcm91cEJvcmRlckNvbG9yPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuYXJjaEdyb3VwQm9yZGVyV2lkdGg9IjJweCIsdGhpcy5sYWJlbENvbG9yPSJibGFjayIsdGhpcy5lcnJvckJrZ0NvbG9yPSIjNTUyMjIyIix0aGlzLmVycm9yVGV4dENvbG9yPSIjNTUyMjIyIn11cGRhdGVDb2xvcnMoKXt0aGlzLnNlY29uZEJrZz1fdCh0aGlzLmNvbnRyYXN0LDU1KSx0aGlzLmJvcmRlcjI9dGhpcy5jb250cmFzdCx0aGlzLmFjdG9yQm9yZGVyPV90KHRoaXMuYm9yZGVyMSwyMyksdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy50ZXh0LHRoaXMuc2lnbmFsVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy50ZXh0LHRoaXMubm90ZUJvcmRlckNvbG9yPSIjOTk5Iix0aGlzLm5vdGVCa2dDb2xvcj0iIzY2NiIsdGhpcy5ub3RlVGV4dENvbG9yPSIjZmZmIix0aGlzLmNTY2FsZTA9dGhpcy5jU2NhbGUwfHwiIzU1NSIsdGhpcy5jU2NhbGUxPXRoaXMuY1NjYWxlMXx8IiNGNEY0RjQiLHRoaXMuY1NjYWxlMj10aGlzLmNTY2FsZTJ8fCIjNTU1Iix0aGlzLmNTY2FsZTM9dGhpcy5jU2NhbGUzfHwiI0JCQiIsdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8IiM3NzciLHRoaXMuY1NjYWxlNT10aGlzLmNTY2FsZTV8fCIjOTk5Iix0aGlzLmNTY2FsZTY9dGhpcy5jU2NhbGU2fHwiI0RERCIsdGhpcy5jU2NhbGU3PXRoaXMuY1NjYWxlN3x8IiNGRkYiLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fCIjREREIix0aGlzLmNTY2FsZTk9dGhpcy5jU2NhbGU5fHwiI0JCQiIsdGhpcy5jU2NhbGUxMD10aGlzLmNTY2FsZTEwfHwiIzk5OSIsdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHwiIzc3NyI7Zm9yKGxldCBlPTA7ZTx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2UrKyl0aGlzWyJjU2NhbGVJbnYiK2VdPXRoaXNbImNTY2FsZUludiIrZV18fG10KHRoaXNbImNTY2FsZSIrZV0pO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpcy5kYXJrTW9kZT90aGlzWyJjU2NhbGVQZWVyIitlXT10aGlzWyJjU2NhbGVQZWVyIitlXXx8X3QodGhpc1siY1NjYWxlIitlXSwxMCk6dGhpc1siY1NjYWxlUGVlciIrZV09dGhpc1siY1NjYWxlUGVlciIrZV18fEl0KHRoaXNbImNTY2FsZSIrZV0sMTApO3RoaXMuc2NhbGVMYWJlbENvbG9yPXRoaXMuc2NhbGVMYWJlbENvbG9yfHwodGhpcy5kYXJrTW9kZT8iYmxhY2siOnRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuY1NjYWxlTGFiZWwwPXRoaXMuY1NjYWxlTGFiZWwwfHx0aGlzLmNTY2FsZTEsdGhpcy5jU2NhbGVMYWJlbDI9dGhpcy5jU2NhbGVMYWJlbDJ8fHRoaXMuY1NjYWxlMTtmb3IobGV0IGU9MDtlPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7ZSsrKXRoaXNbImNTY2FsZUxhYmVsIitlXT10aGlzWyJjU2NhbGVMYWJlbCIrZV18fHRoaXMuc2NhbGVMYWJlbENvbG9yO2ZvcihsZXQgZT0wO2U8NTtlKyspdGhpc1sic3VyZmFjZSIrZV09dGhpc1sic3VyZmFjZSIrZV18fE1lKHRoaXMubWFpbkJrZyx7bDotKDUrZSo1KX0pLHRoaXNbInN1cmZhY2VQZWVyIitlXT10aGlzWyJzdXJmYWNlUGVlciIrZV18fE1lKHRoaXMubWFpbkJrZyx7bDotKDgrZSo1KX0pO3RoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy50aXRsZUNvbG9yPXRoaXMudGV4dCx0aGlzLnNlY3Rpb25Ca2dDb2xvcj1fdCh0aGlzLmNvbnRyYXN0LDMwKSx0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9X3QodGhpcy5jb250cmFzdCwzMCksdGhpcy50YXNrQm9yZGVyQ29sb3I9SXQodGhpcy5jb250cmFzdCwxMCksdGhpcy50YXNrQmtnQ29sb3I9dGhpcy5jb250cmFzdCx0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj10aGlzLnRleHQsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPXRoaXMudGFza0JvcmRlckNvbG9yLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPXRoaXMubWFpbkJrZyx0aGlzLmdyaWRDb2xvcj1fdCh0aGlzLmJvcmRlcjEsMzApLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj10aGlzLmRvbmUsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuY3JpdEJrZ0NvbG9yPXRoaXMuY3JpdGljYWwsdGhpcy5jcml0Qm9yZGVyQ29sb3I9SXQodGhpcy5jcml0QmtnQ29sb3IsMTApLHRoaXMudG9kYXlMaW5lQ29sb3I9dGhpcy5jcml0QmtnQ29sb3IsdGhpcy5hcmNoRWRnZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuYXJjaEVkZ2VBcnJvd0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHwiIzAwMCIsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2Y0ZjRmNCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLnN0YXRlQm9yZGVyPXRoaXMuc3RhdGVCb3JkZXJ8fCIjMDAwIix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPSIjMjIyIix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPU1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9TWUodGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PU1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PU1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9TWUodGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KTtmb3IobGV0IGU9MDtlPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7ZSsrKXRoaXNbInBpZSIrZV09dGhpc1siY1NjYWxlIitlXTt0aGlzLnBpZTEyPXRoaXMucGllMCx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fGZhKHRoaXMucXVhZHJhbnQxRmlsbCk/X3QodGhpcy5xdWFkcmFudDFGaWxsKTpJdCh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnh5Q2hhcnQ9e2JhY2tncm91bmRDb2xvcjp0aGlzLnh5Q2hhcnQ/LmJhY2tncm91bmRDb2xvcnx8dGhpcy5iYWNrZ3JvdW5kLHRpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py50aXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaXRsZUNvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNUaXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMYWJlbENvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaWNrQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc1RpY2tDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGluZUNvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNMaW5lQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc1RpdGxlQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xhYmVsQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpY2tDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzVGlja0NvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMaW5lQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc0xpbmVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHBsb3RDb2xvclBhbGV0dGU6dGhpcy54eUNoYXJ0Py5wbG90Q29sb3JQYWxldHRlfHwiI0VFRSwjNkJCOEU0LCM4QUNCODgsI0M3QUNENiwjRThEQ0MyLCNGRkIyQTgsI0ZGRjM4MCwjN0U4RDkxLCNGRkQ4QjEsI0ZBRjNFMCJ9LHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8IjEiLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8dGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuZ2l0MD1JdCh0aGlzLnBpZTEsMjUpfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmdpdDE9dGhpcy5waWUyfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZ2l0Mj10aGlzLnBpZTN8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmdpdDM9dGhpcy5waWU0fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotMzB9KSx0aGlzLmdpdDQ9dGhpcy5waWU1fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjB9KSx0aGlzLmdpdDU9dGhpcy5waWU2fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotOTB9KSx0aGlzLmdpdDY9dGhpcy5waWU3fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuZ2l0Nz10aGlzLnBpZTh8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuZ2l0SW52MD10aGlzLmdpdEludjB8fG10KHRoaXMuZ2l0MCksdGhpcy5naXRJbnYxPXRoaXMuZ2l0SW52MXx8bXQodGhpcy5naXQxKSx0aGlzLmdpdEludjI9dGhpcy5naXRJbnYyfHxtdCh0aGlzLmdpdDIpLHRoaXMuZ2l0SW52Mz10aGlzLmdpdEludjN8fG10KHRoaXMuZ2l0MyksdGhpcy5naXRJbnY0PXRoaXMuZ2l0SW52NHx8bXQodGhpcy5naXQ0KSx0aGlzLmdpdEludjU9dGhpcy5naXRJbnY1fHxtdCh0aGlzLmdpdDUpLHRoaXMuZ2l0SW52Nj10aGlzLmdpdEludjZ8fG10KHRoaXMuZ2l0NiksdGhpcy5naXRJbnY3PXRoaXMuZ2l0SW52N3x8bXQodGhpcy5naXQ3KSx0aGlzLmJyYW5jaExhYmVsQ29sb3I9dGhpcy5icmFuY2hMYWJlbENvbG9yfHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwwPXRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMT0id2hpdGUiLHRoaXMuZ2l0QnJhbmNoTGFiZWwyPXRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMz0id2hpdGUiLHRoaXMuZ2l0QnJhbmNoTGFiZWw0PXRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNT10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDY9dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw3PXRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLnRhZ0xhYmVsQ29sb3I9dGhpcy50YWdMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy50YWdMYWJlbEJhY2tncm91bmQ9dGhpcy50YWdMYWJlbEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMudGFnTGFiZWxCb3JkZXI9dGhpcy50YWdCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMudGFnTGFiZWxGb250U2l6ZT10aGlzLnRhZ0xhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmNvbW1pdExhYmVsQ29sb3I9dGhpcy5jb21taXRMYWJlbENvbG9yfHx0aGlzLnNlY29uZGFyeVRleHRDb2xvcix0aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZD10aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZHx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNvbW1pdExhYmVsRm9udFNpemU9dGhpcy5jb21taXRMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGQ9dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGR8fGZoLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbj10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW58fGRofWNhbGN1bGF0ZShlKXtpZih0eXBlb2YgZSE9Im9iamVjdCIpe3RoaXMudXBkYXRlQ29sb3JzKCk7cmV0dXJufWxldCByPU9iamVjdC5rZXlzKGUpO3IuZm9yRWFjaChuPT57dGhpc1tuXT1lW25dfSksdGhpcy51cGRhdGVDb2xvcnMoKSxyLmZvckVhY2gobj0+e3RoaXNbbl09ZVtuXX0pfX0sVXo9byh0PT57bGV0IGU9bmV3IHJDO3JldHVybiBlLmNhbGN1bGF0ZSh0KSxlfSwiZ2V0VGhlbWVWYXJpYWJsZXMiKX0pO3ZhciBEbyxhND1NKCgpPT57InVzZSBzdHJpY3QiO0Z6KCk7R3ooKTtpNCgpO1Z6KCk7SHooKTtEbz17YmFzZTp7Z2V0VGhlbWVWYXJpYWJsZXM6Qnp9LGRhcms6e2dldFRoZW1lVmFyaWFibGVzOnp6fSxkZWZhdWx0OntnZXRUaGVtZVZhcmlhYmxlczp2cH0sZm9yZXN0OntnZXRUaGVtZVZhcmlhYmxlczoken0sbmV1dHJhbDp7Z2V0VGhlbWVWYXJpYWJsZXM6VXp9fX0pO3ZhciBjdSxXej1NKCgpPT57InVzZSBzdHJpY3QiO2N1PXtmbG93Y2hhcnQ6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LHN1YkdyYXBoVGl0bGVNYXJnaW46e3RvcDowLGJvdHRvbTowfSxkaWFncmFtUGFkZGluZzo4LGh0bWxMYWJlbHM6ITAsbm9kZVNwYWNpbmc6NTAscmFua1NwYWNpbmc6NTAsY3VydmU6ImJhc2lzIixwYWRkaW5nOjE1LGRlZmF1bHRSZW5kZXJlcjoiZGFncmUtd3JhcHBlciIsd3JhcHBpbmdXaWR0aDoyMDB9LHNlcXVlbmNlOnt1c2VNYXhXaWR0aDohMCxoaWRlVW51c2VkUGFydGljaXBhbnRzOiExLGFjdGl2YXRpb25XaWR0aDoxMCxkaWFncmFtTWFyZ2luWDo1MCxkaWFncmFtTWFyZ2luWToxMCxhY3Rvck1hcmdpbjo1MCx3aWR0aDoxNTAsaGVpZ2h0OjY1LGJveE1hcmdpbjoxMCxib3hUZXh0TWFyZ2luOjUsbm90ZU1hcmdpbjoxMCxtZXNzYWdlTWFyZ2luOjM1LG1lc3NhZ2VBbGlnbjoiY2VudGVyIixtaXJyb3JBY3RvcnM6ITAsZm9yY2VNZW51czohMSxib3R0b21NYXJnaW5BZGo6MSxyaWdodEFuZ2xlczohMSxzaG93U2VxdWVuY2VOdW1iZXJzOiExLGFjdG9yRm9udFNpemU6MTQsYWN0b3JGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsYWN0b3JGb250V2VpZ2h0OjQwMCxub3RlRm9udFNpemU6MTQsbm90ZUZvbnRGYW1pbHk6JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsbm90ZUZvbnRXZWlnaHQ6NDAwLG5vdGVBbGlnbjoiY2VudGVyIixtZXNzYWdlRm9udFNpemU6MTYsbWVzc2FnZUZvbnRGYW1pbHk6JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsbWVzc2FnZUZvbnRXZWlnaHQ6NDAwLHdyYXA6ITEsd3JhcFBhZGRpbmc6MTAsbGFiZWxCb3hXaWR0aDo1MCxsYWJlbEJveEhlaWdodDoyMH0sZ2FudHQ6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGJhckhlaWdodDoyMCxiYXJHYXA6NCx0b3BQYWRkaW5nOjUwLHJpZ2h0UGFkZGluZzo3NSxsZWZ0UGFkZGluZzo3NSxncmlkTGluZVN0YXJ0UGFkZGluZzozNSxmb250U2l6ZToxMSxzZWN0aW9uRm9udFNpemU6MTEsbnVtYmVyU2VjdGlvblN0eWxlczo0LGF4aXNGb3JtYXQ6IiVZLSVtLSVkIix0b3BBeGlzOiExLGRpc3BsYXlNb2RlOiIiLHdlZWtkYXk6InN1bmRheSJ9LGpvdXJuZXk6e3VzZU1heFdpZHRoOiEwLGRpYWdyYW1NYXJnaW5YOjUwLGRpYWdyYW1NYXJnaW5ZOjEwLGxlZnRNYXJnaW46MTUwLHdpZHRoOjE1MCxoZWlnaHQ6NTAsYm94TWFyZ2luOjEwLGJveFRleHRNYXJnaW46NSxub3RlTWFyZ2luOjEwLG1lc3NhZ2VNYXJnaW46MzUsbWVzc2FnZUFsaWduOiJjZW50ZXIiLGJvdHRvbU1hcmdpbkFkajoxLHJpZ2h0QW5nbGVzOiExLHRhc2tGb250U2l6ZToxNCx0YXNrRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLHRhc2tNYXJnaW46NTAsYWN0aXZhdGlvbldpZHRoOjEwLHRleHRQbGFjZW1lbnQ6ImZvIixhY3RvckNvbG91cnM6WyIjOEZCQzhGIiwiIzdDRkMwMCIsIiMwMEZGRkYiLCIjMjBCMkFBIiwiI0IwRTBFNiIsIiNGRkZGRTAiXSxzZWN0aW9uRmlsbHM6WyIjMTkxOTcwIiwiIzhCMDA4QiIsIiM0QjAwODIiLCIjMkY0RjRGIiwiIzgwMDAwMCIsIiM4QjQ1MTMiLCIjMDAwMDhCIl0sc2VjdGlvbkNvbG91cnM6WyIjZmZmIl19LGNsYXNzOnt1c2VNYXhXaWR0aDohMCx0aXRsZVRvcE1hcmdpbjoyNSxhcnJvd01hcmtlckFic29sdXRlOiExLGRpdmlkZXJNYXJnaW46MTAscGFkZGluZzo1LHRleHRIZWlnaHQ6MTAsZGVmYXVsdFJlbmRlcmVyOiJkYWdyZS13cmFwcGVyIixodG1sTGFiZWxzOiExLGhpZGVFbXB0eU1lbWJlcnNCb3g6ITF9LHN0YXRlOnt1c2VNYXhXaWR0aDohMCx0aXRsZVRvcE1hcmdpbjoyNSxkaXZpZGVyTWFyZ2luOjEwLHNpemVVbml0OjUscGFkZGluZzo4LHRleHRIZWlnaHQ6MTAsdGl0bGVTaGlmdDotMTUsbm90ZU1hcmdpbjoxMCxmb3JrV2lkdGg6NzAsZm9ya0hlaWdodDo3LG1pbmlQYWRkaW5nOjIsZm9udFNpemVGYWN0b3I6NS4wMixmb250U2l6ZToyNCxsYWJlbEhlaWdodDoxNixlZGdlTGVuZ3RoRmFjdG9yOiIyMCIsY29tcG9zaXRUaXRsZVNpemU6MzUscmFkaXVzOjUsZGVmYXVsdFJlbmRlcmVyOiJkYWdyZS13cmFwcGVyIn0sZXI6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGRpYWdyYW1QYWRkaW5nOjIwLGxheW91dERpcmVjdGlvbjoiVEIiLG1pbkVudGl0eVdpZHRoOjEwMCxtaW5FbnRpdHlIZWlnaHQ6NzUsZW50aXR5UGFkZGluZzoxNSxzdHJva2U6ImdyYXkiLGZpbGw6ImhvbmV5ZGV3Iixmb250U2l6ZToxMn0scGllOnt1c2VNYXhXaWR0aDohMCx0ZXh0UG9zaXRpb246Ljc1fSxxdWFkcmFudENoYXJ0Ont1c2VNYXhXaWR0aDohMCxjaGFydFdpZHRoOjUwMCxjaGFydEhlaWdodDo1MDAsdGl0bGVGb250U2l6ZToyMCx0aXRsZVBhZGRpbmc6MTAscXVhZHJhbnRQYWRkaW5nOjUseEF4aXNMYWJlbFBhZGRpbmc6NSx5QXhpc0xhYmVsUGFkZGluZzo1LHhBeGlzTGFiZWxGb250U2l6ZToxNix5QXhpc0xhYmVsRm9udFNpemU6MTYscXVhZHJhbnRMYWJlbEZvbnRTaXplOjE2LHF1YWRyYW50VGV4dFRvcFBhZGRpbmc6NSxwb2ludFRleHRQYWRkaW5nOjUscG9pbnRMYWJlbEZvbnRTaXplOjEyLHBvaW50UmFkaXVzOjUseEF4aXNQb3NpdGlvbjoidG9wIix5QXhpc1Bvc2l0aW9uOiJsZWZ0IixxdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlV2lkdGg6MSxxdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGg6Mn0seHlDaGFydDp7dXNlTWF4V2lkdGg6ITAsd2lkdGg6NzAwLGhlaWdodDo1MDAsdGl0bGVGb250U2l6ZToyMCx0aXRsZVBhZGRpbmc6MTAsc2hvd1RpdGxlOiEwLHhBeGlzOnskcmVmOiIjLyRkZWZzL1hZQ2hhcnRBeGlzQ29uZmlnIixzaG93TGFiZWw6ITAsbGFiZWxGb250U2l6ZToxNCxsYWJlbFBhZGRpbmc6NSxzaG93VGl0bGU6ITAsdGl0bGVGb250U2l6ZToxNix0aXRsZVBhZGRpbmc6NSxzaG93VGljazohMCx0aWNrTGVuZ3RoOjUsdGlja1dpZHRoOjIsc2hvd0F4aXNMaW5lOiEwLGF4aXNMaW5lV2lkdGg6Mn0seUF4aXM6eyRyZWY6IiMvJGRlZnMvWFlDaGFydEF4aXNDb25maWciLHNob3dMYWJlbDohMCxsYWJlbEZvbnRTaXplOjE0LGxhYmVsUGFkZGluZzo1LHNob3dUaXRsZTohMCx0aXRsZUZvbnRTaXplOjE2LHRpdGxlUGFkZGluZzo1LHNob3dUaWNrOiEwLHRpY2tMZW5ndGg6NSx0aWNrV2lkdGg6MixzaG93QXhpc0xpbmU6ITAsYXhpc0xpbmVXaWR0aDoyfSxjaGFydE9yaWVudGF0aW9uOiJ2ZXJ0aWNhbCIscGxvdFJlc2VydmVkU3BhY2VQZXJjZW50OjUwfSxyZXF1aXJlbWVudDp7dXNlTWF4V2lkdGg6ITAscmVjdF9maWxsOiIjZjlmOWY5Iix0ZXh0X2NvbG9yOiIjMzMzIixyZWN0X2JvcmRlcl9zaXplOiIwLjVweCIscmVjdF9ib3JkZXJfY29sb3I6IiNiYmIiLHJlY3RfbWluX3dpZHRoOjIwMCxyZWN0X21pbl9oZWlnaHQ6MjAwLGZvbnRTaXplOjE0LHJlY3RfcGFkZGluZzoxMCxsaW5lX2hlaWdodDoyMH0sbWluZG1hcDp7dXNlTWF4V2lkdGg6ITAscGFkZGluZzoxMCxtYXhOb2RlV2lkdGg6MjAwfSxrYW5iYW46e3VzZU1heFdpZHRoOiEwLHBhZGRpbmc6OCxzZWN0aW9uV2lkdGg6MjAwLHRpY2tldEJhc2VVcmw6IiJ9LHRpbWVsaW5lOnt1c2VNYXhXaWR0aDohMCxkaWFncmFtTWFyZ2luWDo1MCxkaWFncmFtTWFyZ2luWToxMCxsZWZ0TWFyZ2luOjE1MCx3aWR0aDoxNTAsaGVpZ2h0OjUwLGJveE1hcmdpbjoxMCxib3hUZXh0TWFyZ2luOjUsbm90ZU1hcmdpbjoxMCxtZXNzYWdlTWFyZ2luOjM1LG1lc3NhZ2VBbGlnbjoiY2VudGVyIixib3R0b21NYXJnaW5BZGo6MSxyaWdodEFuZ2xlczohMSx0YXNrRm9udFNpemU6MTQsdGFza0ZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyx0YXNrTWFyZ2luOjUwLGFjdGl2YXRpb25XaWR0aDoxMCx0ZXh0UGxhY2VtZW50OiJmbyIsYWN0b3JDb2xvdXJzOlsiIzhGQkM4RiIsIiM3Q0ZDMDAiLCIjMDBGRkZGIiwiIzIwQjJBQSIsIiNCMEUwRTYiLCIjRkZGRkUwIl0sc2VjdGlvbkZpbGxzOlsiIzE5MTk3MCIsIiM4QjAwOEIiLCIjNEIwMDgyIiwiIzJGNEY0RiIsIiM4MDAwMDAiLCIjOEI0NTEzIiwiIzAwMDA4QiJdLHNlY3Rpb25Db2xvdXJzOlsiI2ZmZiJdLGRpc2FibGVNdWx0aWNvbG9yOiExfSxnaXRHcmFwaDp7dXNlTWF4V2lkdGg6ITAsdGl0bGVUb3BNYXJnaW46MjUsZGlhZ3JhbVBhZGRpbmc6OCxub2RlTGFiZWw6e3dpZHRoOjc1LGhlaWdodDoxMDAseDotMjUseTowfSxtYWluQnJhbmNoTmFtZToibWFpbiIsbWFpbkJyYW5jaE9yZGVyOjAsc2hvd0NvbW1pdExhYmVsOiEwLHNob3dCcmFuY2hlczohMCxyb3RhdGVDb21taXRMYWJlbDohMCxwYXJhbGxlbENvbW1pdHM6ITEsYXJyb3dNYXJrZXJBYnNvbHV0ZTohMX0sYzQ6e3VzZU1heFdpZHRoOiEwLGRpYWdyYW1NYXJnaW5YOjUwLGRpYWdyYW1NYXJnaW5ZOjEwLGM0U2hhcGVNYXJnaW46NTAsYzRTaGFwZVBhZGRpbmc6MjAsd2lkdGg6MjE2LGhlaWdodDo2MCxib3hNYXJnaW46MTAsYzRTaGFwZUluUm93OjQsbmV4dExpbmVQYWRkaW5nWDowLGM0Qm91bmRhcnlJblJvdzoyLHBlcnNvbkZvbnRTaXplOjE0LHBlcnNvbkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxwZXJzb25Gb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX3BlcnNvbkZvbnRTaXplOjE0LGV4dGVybmFsX3BlcnNvbkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9wZXJzb25Gb250V2VpZ2h0OiJub3JtYWwiLHN5c3RlbUZvbnRTaXplOjE0LHN5c3RlbUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxzeXN0ZW1Gb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX3N5c3RlbUZvbnRTaXplOjE0LGV4dGVybmFsX3N5c3RlbUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9zeXN0ZW1Gb250V2VpZ2h0OiJub3JtYWwiLHN5c3RlbV9kYkZvbnRTaXplOjE0LHN5c3RlbV9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxzeXN0ZW1fZGJGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX3N5c3RlbV9kYkZvbnRTaXplOjE0LGV4dGVybmFsX3N5c3RlbV9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9zeXN0ZW1fZGJGb250V2VpZ2h0OiJub3JtYWwiLHN5c3RlbV9xdWV1ZUZvbnRTaXplOjE0LHN5c3RlbV9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxzeXN0ZW1fcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRTaXplOjE0LGV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9zeXN0ZW1fcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGJvdW5kYXJ5Rm9udFNpemU6MTQsYm91bmRhcnlGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsYm91bmRhcnlGb250V2VpZ2h0OiJub3JtYWwiLG1lc3NhZ2VGb250U2l6ZToxMixtZXNzYWdlRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLG1lc3NhZ2VGb250V2VpZ2h0OiJub3JtYWwiLGNvbnRhaW5lckZvbnRTaXplOjE0LGNvbnRhaW5lckZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb250YWluZXJGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbnRhaW5lckZvbnRTaXplOjE0LGV4dGVybmFsX2NvbnRhaW5lckZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb250YWluZXJGb250V2VpZ2h0OiJub3JtYWwiLGNvbnRhaW5lcl9kYkZvbnRTaXplOjE0LGNvbnRhaW5lcl9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb250YWluZXJfZGJGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRTaXplOjE0LGV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb250YWluZXJfZGJGb250V2VpZ2h0OiJub3JtYWwiLGNvbnRhaW5lcl9xdWV1ZUZvbnRTaXplOjE0LGNvbnRhaW5lcl9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb250YWluZXJfcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRTaXplOjE0LGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb250YWluZXJfcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGNvbXBvbmVudEZvbnRTaXplOjE0LGNvbXBvbmVudEZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb21wb25lbnRGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbXBvbmVudEZvbnRTaXplOjE0LGV4dGVybmFsX2NvbXBvbmVudEZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb21wb25lbnRGb250V2VpZ2h0OiJub3JtYWwiLGNvbXBvbmVudF9kYkZvbnRTaXplOjE0LGNvbXBvbmVudF9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb21wb25lbnRfZGJGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRTaXplOjE0LGV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb21wb25lbnRfZGJGb250V2VpZ2h0OiJub3JtYWwiLGNvbXBvbmVudF9xdWV1ZUZvbnRTaXplOjE0LGNvbXBvbmVudF9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxjb21wb25lbnRfcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRTaXplOjE0LGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxleHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250V2VpZ2h0OiJub3JtYWwiLHdyYXA6ITAsd3JhcFBhZGRpbmc6MTAscGVyc29uX2JnX2NvbG9yOiIjMDg0MjdCIixwZXJzb25fYm9yZGVyX2NvbG9yOiIjMDczQjZGIixleHRlcm5hbF9wZXJzb25fYmdfY29sb3I6IiM2ODY4NjgiLGV4dGVybmFsX3BlcnNvbl9ib3JkZXJfY29sb3I6IiM4QThBOEEiLHN5c3RlbV9iZ19jb2xvcjoiIzExNjhCRCIsc3lzdGVtX2JvcmRlcl9jb2xvcjoiIzNDN0ZDMCIsc3lzdGVtX2RiX2JnX2NvbG9yOiIjMTE2OEJEIixzeXN0ZW1fZGJfYm9yZGVyX2NvbG9yOiIjM0M3RkMwIixzeXN0ZW1fcXVldWVfYmdfY29sb3I6IiMxMTY4QkQiLHN5c3RlbV9xdWV1ZV9ib3JkZXJfY29sb3I6IiMzQzdGQzAiLGV4dGVybmFsX3N5c3RlbV9iZ19jb2xvcjoiIzk5OTk5OSIsZXh0ZXJuYWxfc3lzdGVtX2JvcmRlcl9jb2xvcjoiIzhBOEE4QSIsZXh0ZXJuYWxfc3lzdGVtX2RiX2JnX2NvbG9yOiIjOTk5OTk5IixleHRlcm5hbF9zeXN0ZW1fZGJfYm9yZGVyX2NvbG9yOiIjOEE4QThBIixleHRlcm5hbF9zeXN0ZW1fcXVldWVfYmdfY29sb3I6IiM5OTk5OTkiLGV4dGVybmFsX3N5c3RlbV9xdWV1ZV9ib3JkZXJfY29sb3I6IiM4QThBOEEiLGNvbnRhaW5lcl9iZ19jb2xvcjoiIzQzOERENSIsY29udGFpbmVyX2JvcmRlcl9jb2xvcjoiIzNDN0ZDMCIsY29udGFpbmVyX2RiX2JnX2NvbG9yOiIjNDM4REQ1Iixjb250YWluZXJfZGJfYm9yZGVyX2NvbG9yOiIjM0M3RkMwIixjb250YWluZXJfcXVldWVfYmdfY29sb3I6IiM0MzhERDUiLGNvbnRhaW5lcl9xdWV1ZV9ib3JkZXJfY29sb3I6IiMzQzdGQzAiLGV4dGVybmFsX2NvbnRhaW5lcl9iZ19jb2xvcjoiI0IzQjNCMyIsZXh0ZXJuYWxfY29udGFpbmVyX2JvcmRlcl9jb2xvcjoiI0E2QTZBNiIsZXh0ZXJuYWxfY29udGFpbmVyX2RiX2JnX2NvbG9yOiIjQjNCM0IzIixleHRlcm5hbF9jb250YWluZXJfZGJfYm9yZGVyX2NvbG9yOiIjQTZBNkE2IixleHRlcm5hbF9jb250YWluZXJfcXVldWVfYmdfY29sb3I6IiNCM0IzQjMiLGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZV9ib3JkZXJfY29sb3I6IiNBNkE2QTYiLGNvbXBvbmVudF9iZ19jb2xvcjoiIzg1QkJGMCIsY29tcG9uZW50X2JvcmRlcl9jb2xvcjoiIzc4QThEOCIsY29tcG9uZW50X2RiX2JnX2NvbG9yOiIjODVCQkYwIixjb21wb25lbnRfZGJfYm9yZGVyX2NvbG9yOiIjNzhBOEQ4Iixjb21wb25lbnRfcXVldWVfYmdfY29sb3I6IiM4NUJCRjAiLGNvbXBvbmVudF9xdWV1ZV9ib3JkZXJfY29sb3I6IiM3OEE4RDgiLGV4dGVybmFsX2NvbXBvbmVudF9iZ19jb2xvcjoiI0NDQ0NDQyIsZXh0ZXJuYWxfY29tcG9uZW50X2JvcmRlcl9jb2xvcjoiI0JGQkZCRiIsZXh0ZXJuYWxfY29tcG9uZW50X2RiX2JnX2NvbG9yOiIjQ0NDQ0NDIixleHRlcm5hbF9jb21wb25lbnRfZGJfYm9yZGVyX2NvbG9yOiIjQkZCRkJGIixleHRlcm5hbF9jb21wb25lbnRfcXVldWVfYmdfY29sb3I6IiNDQ0NDQ0MiLGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZV9ib3JkZXJfY29sb3I6IiNCRkJGQkYifSxzYW5rZXk6e3VzZU1heFdpZHRoOiEwLHdpZHRoOjYwMCxoZWlnaHQ6NDAwLGxpbmtDb2xvcjoiZ3JhZGllbnQiLG5vZGVBbGlnbm1lbnQ6Imp1c3RpZnkiLHNob3dWYWx1ZXM6ITAscHJlZml4OiIiLHN1ZmZpeDoiIn0sYmxvY2s6e3VzZU1heFdpZHRoOiEwLHBhZGRpbmc6OH0scGFja2V0Ont1c2VNYXhXaWR0aDohMCxyb3dIZWlnaHQ6MzIsYml0V2lkdGg6MzIsYml0c1BlclJvdzozMixzaG93Qml0czohMCxwYWRkaW5nWDo1LHBhZGRpbmdZOjV9LGFyY2hpdGVjdHVyZTp7dXNlTWF4V2lkdGg6ITAscGFkZGluZzo0MCxpY29uU2l6ZTo4MCxmb250U2l6ZToxNn0sdGhlbWU6ImRlZmF1bHQiLGxvb2s6ImNsYXNzaWMiLGhhbmREcmF3blNlZWQ6MCxsYXlvdXQ6ImRhZ3JlIixtYXhUZXh0U2l6ZTo1ZTQsbWF4RWRnZXM6NTAwLGRhcmtNb2RlOiExLGZvbnRGYW1pbHk6JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsnLGxvZ0xldmVsOjUsc2VjdXJpdHlMZXZlbDoic3RyaWN0IixzdGFydE9uTG9hZDohMCxhcnJvd01hcmtlckFic29sdXRlOiExLHNlY3VyZTpbInNlY3VyZSIsInNlY3VyaXR5TGV2ZWwiLCJzdGFydE9uTG9hZCIsIm1heFRleHRTaXplIiwic3VwcHJlc3NFcnJvclJlbmRlcmluZyIsIm1heEVkZ2VzIl0sbGVnYWN5TWF0aE1MOiExLGZvcmNlTGVnYWN5TWF0aE1MOiExLGRldGVybWluaXN0aWNJZHM6ITEsZm9udFNpemU6MTYsbWFya2Rvd25BdXRvV3JhcDohMCxzdXBwcmVzc0Vycm9yUmVuZGVyaW5nOiExfX0pO3ZhciBZeixxeixYeix1cixicz1NKCgpPT57InVzZSBzdHJpY3QiO2E0KCk7V3ooKTtZej17Li4uY3UsZGV0ZXJtaW5pc3RpY0lEU2VlZDp2b2lkIDAsZWxrOnttZXJnZUVkZ2VzOiExLG5vZGVQbGFjZW1lbnRTdHJhdGVneToiQlJBTkRFU19LT0VQRiJ9LHRoZW1lQ1NTOnZvaWQgMCx0aGVtZVZhcmlhYmxlczpEby5kZWZhdWx0LmdldFRoZW1lVmFyaWFibGVzKCksc2VxdWVuY2U6ey4uLmN1LnNlcXVlbmNlLG1lc3NhZ2VGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOnRoaXMubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5tZXNzYWdlRm9udFdlaWdodH19LCJtZXNzYWdlRm9udCIpLG5vdGVGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLm5vdGVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMubm90ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5ub3RlRm9udFdlaWdodH19LCJub3RlRm9udCIpLGFjdG9yRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5hY3RvckZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5hY3RvckZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5hY3RvckZvbnRXZWlnaHR9fSwiYWN0b3JGb250Iil9LGNsYXNzOntoaWRlRW1wdHlNZW1iZXJzQm94OiExfSxnYW50dDp7Li4uY3UuZ2FudHQsdGlja0ludGVydmFsOnZvaWQgMCx1c2VXaWR0aDp2b2lkIDB9LGM0OnsuLi5jdS5jNCx1c2VXaWR0aDp2b2lkIDAscGVyc29uRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5wZXJzb25Gb250RmFtaWx5LGZvbnRTaXplOnRoaXMucGVyc29uRm9udFNpemUsZm9udFdlaWdodDp0aGlzLnBlcnNvbkZvbnRXZWlnaHR9fSwicGVyc29uRm9udCIpLGV4dGVybmFsX3BlcnNvbkZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfcGVyc29uRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX3BlcnNvbkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9wZXJzb25Gb250V2VpZ2h0fX0sImV4dGVybmFsX3BlcnNvbkZvbnQiKSxzeXN0ZW1Gb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLnN5c3RlbUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5zeXN0ZW1Gb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuc3lzdGVtRm9udFdlaWdodH19LCJzeXN0ZW1Gb250IiksZXh0ZXJuYWxfc3lzdGVtRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9zeXN0ZW1Gb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfc3lzdGVtRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX3N5c3RlbUZvbnRXZWlnaHR9fSwiZXh0ZXJuYWxfc3lzdGVtRm9udCIpLHN5c3RlbV9kYkZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuc3lzdGVtX2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLnN5c3RlbV9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5zeXN0ZW1fZGJGb250V2VpZ2h0fX0sInN5c3RlbV9kYkZvbnQiKSxleHRlcm5hbF9zeXN0ZW1fZGJGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX3N5c3RlbV9kYkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9zeXN0ZW1fZGJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfc3lzdGVtX2RiRm9udFdlaWdodH19LCJleHRlcm5hbF9zeXN0ZW1fZGJGb250Iiksc3lzdGVtX3F1ZXVlRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5zeXN0ZW1fcXVldWVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuc3lzdGVtX3F1ZXVlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLnN5c3RlbV9xdWV1ZUZvbnRXZWlnaHR9fSwic3lzdGVtX3F1ZXVlRm9udCIpLGV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9zeXN0ZW1fcXVldWVGb250V2VpZ2h0fX0sImV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnQiKSxjb250YWluZXJGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmNvbnRhaW5lckZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5jb250YWluZXJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuY29udGFpbmVyRm9udFdlaWdodH19LCJjb250YWluZXJGb250IiksZXh0ZXJuYWxfY29udGFpbmVyRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9jb250YWluZXJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX2NvbnRhaW5lckZvbnRXZWlnaHR9fSwiZXh0ZXJuYWxfY29udGFpbmVyRm9udCIpLGNvbnRhaW5lcl9kYkZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29udGFpbmVyX2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbnRhaW5lcl9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb250YWluZXJfZGJGb250V2VpZ2h0fX0sImNvbnRhaW5lcl9kYkZvbnQiKSxleHRlcm5hbF9jb250YWluZXJfZGJGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9jb250YWluZXJfZGJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udFdlaWdodH19LCJleHRlcm5hbF9jb250YWluZXJfZGJGb250IiksY29udGFpbmVyX3F1ZXVlRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5jb250YWluZXJfcXVldWVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuY29udGFpbmVyX3F1ZXVlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmNvbnRhaW5lcl9xdWV1ZUZvbnRXZWlnaHR9fSwiY29udGFpbmVyX3F1ZXVlRm9udCIpLGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb250YWluZXJfcXVldWVGb250V2VpZ2h0fX0sImV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnQiKSxjb21wb25lbnRGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmNvbXBvbmVudEZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5jb21wb25lbnRGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuY29tcG9uZW50Rm9udFdlaWdodH19LCJjb21wb25lbnRGb250IiksZXh0ZXJuYWxfY29tcG9uZW50Rm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9jb21wb25lbnRGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50Rm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX2NvbXBvbmVudEZvbnRXZWlnaHR9fSwiZXh0ZXJuYWxfY29tcG9uZW50Rm9udCIpLGNvbXBvbmVudF9kYkZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29tcG9uZW50X2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbXBvbmVudF9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb21wb25lbnRfZGJGb250V2VpZ2h0fX0sImNvbXBvbmVudF9kYkZvbnQiKSxleHRlcm5hbF9jb21wb25lbnRfZGJGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9jb21wb25lbnRfZGJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udFdlaWdodH19LCJleHRlcm5hbF9jb21wb25lbnRfZGJGb250IiksY29tcG9uZW50X3F1ZXVlRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5jb21wb25lbnRfcXVldWVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuY29tcG9uZW50X3F1ZXVlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmNvbXBvbmVudF9xdWV1ZUZvbnRXZWlnaHR9fSwiY29tcG9uZW50X3F1ZXVlRm9udCIpLGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250V2VpZ2h0fX0sImV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnQiKSxib3VuZGFyeUZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuYm91bmRhcnlGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuYm91bmRhcnlGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuYm91bmRhcnlGb250V2VpZ2h0fX0sImJvdW5kYXJ5Rm9udCIpLG1lc3NhZ2VGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOnRoaXMubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5tZXNzYWdlRm9udFdlaWdodH19LCJtZXNzYWdlRm9udCIpfSxwaWU6ey4uLmN1LnBpZSx1c2VXaWR0aDo5ODR9LHh5Q2hhcnQ6ey4uLmN1Lnh5Q2hhcnQsdXNlV2lkdGg6dm9pZCAwfSxyZXF1aXJlbWVudDp7Li4uY3UucmVxdWlyZW1lbnQsdXNlV2lkdGg6dm9pZCAwfSxwYWNrZXQ6ey4uLmN1LnBhY2tldH19LHF6PW8oKHQsZT0iIik9Pk9iamVjdC5rZXlzKHQpLnJlZHVjZSgocixuKT0+QXJyYXkuaXNBcnJheSh0W25dKT9yOnR5cGVvZiB0W25dPT0ib2JqZWN0IiYmdFtuXSE9PW51bGw/Wy4uLnIsZStuLC4uLnF6KHRbbl0sIiIpXTpbLi4ucixlK25dLFtdKSwia2V5aWZ5IiksWHo9bmV3IFNldChxeihZeiwiIikpLHVyPVl6fSk7dmFyIHhwLEt4ZSxuQz1NKCgpPT57InVzZSBzdHJpY3QiO2JzKCk7dXQoKTt4cD1vKHQ9PntpZihZLmRlYnVnKCJzYW5pdGl6ZURpcmVjdGl2ZSBjYWxsZWQgd2l0aCIsdCksISh0eXBlb2YgdCE9Im9iamVjdCJ8fHQ9PW51bGwpKXtpZihBcnJheS5pc0FycmF5KHQpKXt0LmZvckVhY2goZT0+eHAoZSkpO3JldHVybn1mb3IobGV0IGUgb2YgT2JqZWN0LmtleXModCkpe2lmKFkuZGVidWcoIkNoZWNraW5nIGtleSIsZSksZS5zdGFydHNXaXRoKCJfXyIpfHxlLmluY2x1ZGVzKCJwcm90byIpfHxlLmluY2x1ZGVzKCJjb25zdHIiKXx8IVh6LmhhcyhlKXx8dFtlXT09bnVsbCl7WS5kZWJ1Zygic2FuaXRpemUgZGVsZXRpbmcga2V5OiAiLGUpLGRlbGV0ZSB0W2VdO2NvbnRpbnVlfWlmKHR5cGVvZiB0W2VdPT0ib2JqZWN0Iil7WS5kZWJ1Zygic2FuaXRpemluZyBvYmplY3QiLGUpLHhwKHRbZV0pO2NvbnRpbnVlfWxldCByPVsidGhlbWVDU1MiLCJmb250RmFtaWx5IiwiYWx0Rm9udEZhbWlseSJdO2ZvcihsZXQgbiBvZiByKWUuaW5jbHVkZXMobikmJihZLmRlYnVnKCJzYW5pdGl6aW5nIGNzcyBvcHRpb24iLGUpLHRbZV09S3hlKHRbZV0pKX1pZih0LnRoZW1lVmFyaWFibGVzKWZvcihsZXQgZSBvZiBPYmplY3Qua2V5cyh0LnRoZW1lVmFyaWFibGVzKSl7bGV0IHI9dC50aGVtZVZhcmlhYmxlc1tlXTtyPy5tYXRjaCYmIXIubWF0Y2goL15bXGQgIiMlKCksLjtBLVphLXpdKyQvKSYmKHQudGhlbWVWYXJpYWJsZXNbZV09IiIpfVkuZGVidWcoIkFmdGVyIHNhbml0aXphdGlvbiIsdCl9fSwic2FuaXRpemVEaXJlY3RpdmUiKSxLeGU9byh0PT57bGV0IGU9MCxyPTA7Zm9yKGxldCBuIG9mIHQpe2lmKGU8cilyZXR1cm4ieyAvKiBFUlJPUjogVW5iYWxhbmNlZCBDU1MgKi8gfSI7bj09PSJ7Ij9lKys6bj09PSJ9IiYmcisrfXJldHVybiBlIT09cj8ieyAvKiBFUlJPUjogVW5iYWxhbmNlZCBDU1MgKi8gfSI6dH0sInNhbml0aXplQ3NzIil9KTt2YXIgcGgsd3MsS3osYnAsb3ksczQsaUMsUXosWnosYUMsbzQsQ3IsSnosZUcsbHksUXhlLGp6LFp4ZSx0RyxaYT1NKCgpPT57InVzZSBzdHJpY3QiO2dwKCk7dXQoKTthNCgpO2JzKCk7bkMoKTtwaD1PYmplY3QuZnJlZXplKHVyKSx3cz1Wbih7fSxwaCksYnA9W10sb3k9Vm4oe30scGgpLHM0PW8oKHQsZSk9PntsZXQgcj1Wbih7fSx0KSxuPXt9O2ZvcihsZXQgaSBvZiBlKUp6KGkpLG49Vm4obixpKTtpZihyPVZuKHIsbiksbi50aGVtZSYmbi50aGVtZSBpbiBEbyl7bGV0IGk9Vm4oe30sS3opLGE9Vm4oaS50aGVtZVZhcmlhYmxlc3x8e30sbi50aGVtZVZhcmlhYmxlcyk7ci50aGVtZSYmci50aGVtZSBpbiBEbyYmKHIudGhlbWVWYXJpYWJsZXM9RG9bci50aGVtZV0uZ2V0VGhlbWVWYXJpYWJsZXMoYSkpfXJldHVybiBveT1yLHRHKG95KSxveX0sInVwZGF0ZUN1cnJlbnRDb25maWciKSxpQz1vKHQ9Pih3cz1Wbih7fSxwaCksd3M9Vm4od3MsdCksdC50aGVtZSYmRG9bdC50aGVtZV0mJih3cy50aGVtZVZhcmlhYmxlcz1Eb1t0LnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyh0LnRoZW1lVmFyaWFibGVzKSksczQod3MsYnApLHdzKSwic2V0U2l0ZUNvbmZpZyIpLFF6PW8odD0+e0t6PVZuKHt9LHQpfSwic2F2ZUNvbmZpZ0Zyb21Jbml0aWFsaXplIiksWno9byh0PT4od3M9Vm4od3MsdCksczQod3MsYnApLHdzKSwidXBkYXRlU2l0ZUNvbmZpZyIpLGFDPW8oKCk9PlZuKHt9LHdzKSwiZ2V0U2l0ZUNvbmZpZyIpLG80PW8odD0+KHRHKHQpLFZuKG95LHQpLENyKCkpLCJzZXRDb25maWciKSxDcj1vKCgpPT5Wbih7fSxveSksImdldENvbmZpZyIpLEp6PW8odD0+e3QmJihbInNlY3VyZSIsLi4ud3Muc2VjdXJlPz9bXV0uZm9yRWFjaChlPT57T2JqZWN0Lmhhc093bih0LGUpJiYoWS5kZWJ1ZyhgRGVuaWVkIGF0dGVtcHQgdG8gbW9kaWZ5IGEgc2VjdXJlIGtleSAke2V9YCx0W2VdKSxkZWxldGUgdFtlXSl9KSxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGU9PntlLnN0YXJ0c1dpdGgoIl9fIikmJmRlbGV0ZSB0W2VdfSksT2JqZWN0LmtleXModCkuZm9yRWFjaChlPT57dHlwZW9mIHRbZV09PSJzdHJpbmciJiYodFtlXS5pbmNsdWRlcygiPCIpfHx0W2VdLmluY2x1ZGVzKCI+Iil8fHRbZV0uaW5jbHVkZXMoInVybChkYXRhOiIpKSYmZGVsZXRlIHRbZV0sdHlwZW9mIHRbZV09PSJvYmplY3QiJiZKeih0W2VdKX0pKX0sInNhbml0aXplIiksZUc9byh0PT57eHAodCksdC5mb250RmFtaWx5JiYhdC50aGVtZVZhcmlhYmxlcz8uZm9udEZhbWlseSYmKHQudGhlbWVWYXJpYWJsZXM9ey4uLnQudGhlbWVWYXJpYWJsZXMsZm9udEZhbWlseTp0LmZvbnRGYW1pbHl9KSxicC5wdXNoKHQpLHM0KHdzLGJwKX0sImFkZERpcmVjdGl2ZSIpLGx5PW8oKHQ9d3MpPT57YnA9W10sczQodCxicCl9LCJyZXNldCIpLFF4ZT17TEFaWV9MT0FEX0RFUFJFQ0FURUQ6IlRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgbGF6eUxvYWRlZERpYWdyYW1zIGFuZCBsb2FkRXh0ZXJuYWxEaWFncmFtc0F0U3RhcnR1cCBhcmUgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSByZWdpc3RlckV4dGVybmFsRGlhZ3JhbXMgaW5zdGVhZC4ifSxqej17fSxaeGU9byh0PT57anpbdF18fChZLndhcm4oUXhlW3RdKSxqelt0XT0hMCl9LCJpc3N1ZVdhcm5pbmciKSx0Rz1vKHQ9Pnt0JiYodC5sYXp5TG9hZGVkRGlhZ3JhbXN8fHQubG9hZEV4dGVybmFsRGlhZ3JhbXNBdFN0YXJ0dXApJiZaeGUoIkxBWllfTE9BRF9ERVBSRUNBVEVEIil9LCJjaGVja0NvbmZpZyIpfSk7dmFyIGxDPUVpKChzQyxvQyk9PnsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKHQsZSl7dHlwZW9mIHNDPT0ib2JqZWN0IiYmdHlwZW9mIG9DPCJ1Ij9vQy5leHBvcnRzPWUoKTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShlKToodD10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0fHxzZWxmLHQuRE9NUHVyaWZ5PWUoKSl9KShzQyxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtsZXR7ZW50cmllczp0LHNldFByb3RvdHlwZU9mOmUsaXNGcm96ZW46cixnZXRQcm90b3R5cGVPZjpuLGdldE93blByb3BlcnR5RGVzY3JpcHRvcjppfT1PYmplY3Qse2ZyZWV6ZTphLHNlYWw6cyxjcmVhdGU6bH09T2JqZWN0LHthcHBseTp1LGNvbnN0cnVjdDpofT10eXBlb2YgUmVmbGVjdDwidSImJlJlZmxlY3Q7YXx8KGE9byhmdW5jdGlvbihDZSl7cmV0dXJuIENlfSwiZnJlZXplIikpLHN8fChzPW8oZnVuY3Rpb24oQ2Upe3JldHVybiBDZX0sInNlYWwiKSksdXx8KHU9byhmdW5jdGlvbihDZSxQZSxJZSl7cmV0dXJuIENlLmFwcGx5KFBlLEllKX0sImFwcGx5IikpLGh8fChoPW8oZnVuY3Rpb24oQ2UsUGUpe3JldHVybiBuZXcgQ2UoLi4uUGUpfSwiY29uc3RydWN0IikpO2xldCBmPUUoQXJyYXkucHJvdG90eXBlLmZvckVhY2gpLGQ9RShBcnJheS5wcm90b3R5cGUucG9wKSxwPUUoQXJyYXkucHJvdG90eXBlLnB1c2gpLG09RShTdHJpbmcucHJvdG90eXBlLnRvTG93ZXJDYXNlKSxnPUUoU3RyaW5nLnByb3RvdHlwZS50b1N0cmluZykseT1FKFN0cmluZy5wcm90b3R5cGUubWF0Y2gpLHY9RShTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpLHg9RShTdHJpbmcucHJvdG90eXBlLmluZGV4T2YpLGI9RShTdHJpbmcucHJvdG90eXBlLnRyaW0pLHc9RShPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KSxfPUUoUmVnRXhwLnByb3RvdHlwZS50ZXN0KSxUPUwoVHlwZUVycm9yKTtmdW5jdGlvbiBFKFJlKXtyZXR1cm4gZnVuY3Rpb24oQ2Upe2Zvcih2YXIgUGU9YXJndW1lbnRzLmxlbmd0aCxJZT1uZXcgQXJyYXkoUGU+MT9QZS0xOjApLCRlPTE7JGU8UGU7JGUrKylJZVskZS0xXT1hcmd1bWVudHNbJGVdO3JldHVybiB1KFJlLENlLEllKX19byhFLCJ1bmFwcGx5Iik7ZnVuY3Rpb24gTChSZSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBDZT1hcmd1bWVudHMubGVuZ3RoLFBlPW5ldyBBcnJheShDZSksSWU9MDtJZTxDZTtJZSsrKVBlW0llXT1hcmd1bWVudHNbSWVdO3JldHVybiBoKFJlLFBlKX19byhMLCJ1bmNvbnN0cnVjdCIpO2Z1bmN0aW9uIFMoUmUsQ2Upe2xldCBQZT1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06bTtlJiZlKFJlLG51bGwpO2xldCBJZT1DZS5sZW5ndGg7Zm9yKDtJZS0tOyl7bGV0ICRlPUNlW0llXTtpZih0eXBlb2YgJGU9PSJzdHJpbmciKXtsZXQgeWU9UGUoJGUpO3llIT09JGUmJihyKENlKXx8KENlW0llXT15ZSksJGU9eWUpfVJlWyRlXT0hMH1yZXR1cm4gUmV9byhTLCJhZGRUb1NldCIpO2Z1bmN0aW9uIEEoUmUpe2ZvcihsZXQgQ2U9MDtDZTxSZS5sZW5ndGg7Q2UrKyl3KFJlLENlKXx8KFJlW0NlXT1udWxsKTtyZXR1cm4gUmV9byhBLCJjbGVhbkFycmF5Iik7ZnVuY3Rpb24gSShSZSl7bGV0IENlPWwobnVsbCk7Zm9yKGxldFtQZSxJZV1vZiB0KFJlKSl3KFJlLFBlKSYmKEFycmF5LmlzQXJyYXkoSWUpP0NlW1BlXT1BKEllKTpJZSYmdHlwZW9mIEllPT0ib2JqZWN0IiYmSWUuY29uc3RydWN0b3I9PT1PYmplY3Q/Q2VbUGVdPUkoSWUpOkNlW1BlXT1JZSk7cmV0dXJuIENlfW8oSSwiY2xvbmUiKTtmdW5jdGlvbiBEKFJlLENlKXtmb3IoO1JlIT09bnVsbDspe2xldCBJZT1pKFJlLENlKTtpZihJZSl7aWYoSWUuZ2V0KXJldHVybiBFKEllLmdldCk7aWYodHlwZW9mIEllLnZhbHVlPT0iZnVuY3Rpb24iKXJldHVybiBFKEllLnZhbHVlKX1SZT1uKFJlKX1mdW5jdGlvbiBQZSgpe3JldHVybiBudWxsfXJldHVybiBvKFBlLCJmYWxsYmFja1ZhbHVlIiksUGV9byhELCJsb29rdXBHZXR0ZXIiKTtsZXQgaz1hKFsiYSIsImFiYnIiLCJhY3JvbnltIiwiYWRkcmVzcyIsImFyZWEiLCJhcnRpY2xlIiwiYXNpZGUiLCJhdWRpbyIsImIiLCJiZGkiLCJiZG8iLCJiaWciLCJibGluayIsImJsb2NrcXVvdGUiLCJib2R5IiwiYnIiLCJidXR0b24iLCJjYW52YXMiLCJjYXB0aW9uIiwiY2VudGVyIiwiY2l0ZSIsImNvZGUiLCJjb2wiLCJjb2xncm91cCIsImNvbnRlbnQiLCJkYXRhIiwiZGF0YWxpc3QiLCJkZCIsImRlY29yYXRvciIsImRlbCIsImRldGFpbHMiLCJkZm4iLCJkaWFsb2ciLCJkaXIiLCJkaXYiLCJkbCIsImR0IiwiZWxlbWVudCIsImVtIiwiZmllbGRzZXQiLCJmaWdjYXB0aW9uIiwiZmlndXJlIiwiZm9udCIsImZvb3RlciIsImZvcm0iLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJoZWFkIiwiaGVhZGVyIiwiaGdyb3VwIiwiaHIiLCJodG1sIiwiaSIsImltZyIsImlucHV0IiwiaW5zIiwia2JkIiwibGFiZWwiLCJsZWdlbmQiLCJsaSIsIm1haW4iLCJtYXAiLCJtYXJrIiwibWFycXVlZSIsIm1lbnUiLCJtZW51aXRlbSIsIm1ldGVyIiwibmF2Iiwibm9iciIsIm9sIiwib3B0Z3JvdXAiLCJvcHRpb24iLCJvdXRwdXQiLCJwIiwicGljdHVyZSIsInByZSIsInByb2dyZXNzIiwicSIsInJwIiwicnQiLCJydWJ5IiwicyIsInNhbXAiLCJzZWN0aW9uIiwic2VsZWN0Iiwic2hhZG93Iiwic21hbGwiLCJzb3VyY2UiLCJzcGFjZXIiLCJzcGFuIiwic3RyaWtlIiwic3Ryb25nIiwic3R5bGUiLCJzdWIiLCJzdW1tYXJ5Iiwic3VwIiwidGFibGUiLCJ0Ym9keSIsInRkIiwidGVtcGxhdGUiLCJ0ZXh0YXJlYSIsInRmb290IiwidGgiLCJ0aGVhZCIsInRpbWUiLCJ0ciIsInRyYWNrIiwidHQiLCJ1IiwidWwiLCJ2YXIiLCJ2aWRlbyIsIndiciJdKSxSPWEoWyJzdmciLCJhIiwiYWx0Z2x5cGgiLCJhbHRnbHlwaGRlZiIsImFsdGdseXBoaXRlbSIsImFuaW1hdGVjb2xvciIsImFuaW1hdGVtb3Rpb24iLCJhbmltYXRldHJhbnNmb3JtIiwiY2lyY2xlIiwiY2xpcHBhdGgiLCJkZWZzIiwiZGVzYyIsImVsbGlwc2UiLCJmaWx0ZXIiLCJmb250IiwiZyIsImdseXBoIiwiZ2x5cGhyZWYiLCJoa2VybiIsImltYWdlIiwibGluZSIsImxpbmVhcmdyYWRpZW50IiwibWFya2VyIiwibWFzayIsIm1ldGFkYXRhIiwibXBhdGgiLCJwYXRoIiwicGF0dGVybiIsInBvbHlnb24iLCJwb2x5bGluZSIsInJhZGlhbGdyYWRpZW50IiwicmVjdCIsInN0b3AiLCJzdHlsZSIsInN3aXRjaCIsInN5bWJvbCIsInRleHQiLCJ0ZXh0cGF0aCIsInRpdGxlIiwidHJlZiIsInRzcGFuIiwidmlldyIsInZrZXJuIl0pLEM9YShbImZlQmxlbmQiLCJmZUNvbG9yTWF0cml4IiwiZmVDb21wb25lbnRUcmFuc2ZlciIsImZlQ29tcG9zaXRlIiwiZmVDb252b2x2ZU1hdHJpeCIsImZlRGlmZnVzZUxpZ2h0aW5nIiwiZmVEaXNwbGFjZW1lbnRNYXAiLCJmZURpc3RhbnRMaWdodCIsImZlRHJvcFNoYWRvdyIsImZlRmxvb2QiLCJmZUZ1bmNBIiwiZmVGdW5jQiIsImZlRnVuY0ciLCJmZUZ1bmNSIiwiZmVHYXVzc2lhbkJsdXIiLCJmZUltYWdlIiwiZmVNZXJnZSIsImZlTWVyZ2VOb2RlIiwiZmVNb3JwaG9sb2d5IiwiZmVPZmZzZXQiLCJmZVBvaW50TGlnaHQiLCJmZVNwZWN1bGFyTGlnaHRpbmciLCJmZVNwb3RMaWdodCIsImZlVGlsZSIsImZlVHVyYnVsZW5jZSJdKSxPPWEoWyJhbmltYXRlIiwiY29sb3ItcHJvZmlsZSIsImN1cnNvciIsImRpc2NhcmQiLCJmb250LWZhY2UiLCJmb250LWZhY2UtZm9ybWF0IiwiZm9udC1mYWNlLW5hbWUiLCJmb250LWZhY2Utc3JjIiwiZm9udC1mYWNlLXVyaSIsImZvcmVpZ25vYmplY3QiLCJoYXRjaCIsImhhdGNocGF0aCIsIm1lc2giLCJtZXNoZ3JhZGllbnQiLCJtZXNocGF0Y2giLCJtZXNocm93IiwibWlzc2luZy1nbHlwaCIsInNjcmlwdCIsInNldCIsInNvbGlkY29sb3IiLCJ1bmtub3duIiwidXNlIl0pLE49YShbIm1hdGgiLCJtZW5jbG9zZSIsIm1lcnJvciIsIm1mZW5jZWQiLCJtZnJhYyIsIm1nbHlwaCIsIm1pIiwibWxhYmVsZWR0ciIsIm1tdWx0aXNjcmlwdHMiLCJtbiIsIm1vIiwibW92ZXIiLCJtcGFkZGVkIiwibXBoYW50b20iLCJtcm9vdCIsIm1yb3ciLCJtcyIsIm1zcGFjZSIsIm1zcXJ0IiwibXN0eWxlIiwibXN1YiIsIm1zdXAiLCJtc3Vic3VwIiwibXRhYmxlIiwibXRkIiwibXRleHQiLCJtdHIiLCJtdW5kZXIiLCJtdW5kZXJvdmVyIiwibXByZXNjcmlwdHMiXSksUD1hKFsibWFjdGlvbiIsIm1hbGlnbmdyb3VwIiwibWFsaWdubWFyayIsIm1sb25nZGl2IiwibXNjYXJyaWVzIiwibXNjYXJyeSIsIm1zZ3JvdXAiLCJtc3RhY2siLCJtc2xpbmUiLCJtc3JvdyIsInNlbWFudGljcyIsImFubm90YXRpb24iLCJhbm5vdGF0aW9uLXhtbCIsIm1wcmVzY3JpcHRzIiwibm9uZSJdKSxGPWEoWyIjdGV4dCJdKSxCPWEoWyJhY2NlcHQiLCJhY3Rpb24iLCJhbGlnbiIsImFsdCIsImF1dG9jYXBpdGFsaXplIiwiYXV0b2NvbXBsZXRlIiwiYXV0b3BpY3R1cmVpbnBpY3R1cmUiLCJhdXRvcGxheSIsImJhY2tncm91bmQiLCJiZ2NvbG9yIiwiYm9yZGVyIiwiY2FwdHVyZSIsImNlbGxwYWRkaW5nIiwiY2VsbHNwYWNpbmciLCJjaGVja2VkIiwiY2l0ZSIsImNsYXNzIiwiY2xlYXIiLCJjb2xvciIsImNvbHMiLCJjb2xzcGFuIiwiY29udHJvbHMiLCJjb250cm9sc2xpc3QiLCJjb29yZHMiLCJjcm9zc29yaWdpbiIsImRhdGV0aW1lIiwiZGVjb2RpbmciLCJkZWZhdWx0IiwiZGlyIiwiZGlzYWJsZWQiLCJkaXNhYmxlcGljdHVyZWlucGljdHVyZSIsImRpc2FibGVyZW1vdGVwbGF5YmFjayIsImRvd25sb2FkIiwiZHJhZ2dhYmxlIiwiZW5jdHlwZSIsImVudGVya2V5aGludCIsImZhY2UiLCJmb3IiLCJoZWFkZXJzIiwiaGVpZ2h0IiwiaGlkZGVuIiwiaGlnaCIsImhyZWYiLCJocmVmbGFuZyIsImlkIiwiaW5wdXRtb2RlIiwiaW50ZWdyaXR5IiwiaXNtYXAiLCJraW5kIiwibGFiZWwiLCJsYW5nIiwibGlzdCIsImxvYWRpbmciLCJsb29wIiwibG93IiwibWF4IiwibWF4bGVuZ3RoIiwibWVkaWEiLCJtZXRob2QiLCJtaW4iLCJtaW5sZW5ndGgiLCJtdWx0aXBsZSIsIm11dGVkIiwibmFtZSIsIm5vbmNlIiwibm9zaGFkZSIsIm5vdmFsaWRhdGUiLCJub3dyYXAiLCJvcGVuIiwib3B0aW11bSIsInBhdHRlcm4iLCJwbGFjZWhvbGRlciIsInBsYXlzaW5saW5lIiwicG9wb3ZlciIsInBvcG92ZXJ0YXJnZXQiLCJwb3BvdmVydGFyZ2V0YWN0aW9uIiwicG9zdGVyIiwicHJlbG9hZCIsInB1YmRhdGUiLCJyYWRpb2dyb3VwIiwicmVhZG9ubHkiLCJyZWwiLCJyZXF1aXJlZCIsInJldiIsInJldmVyc2VkIiwicm9sZSIsInJvd3MiLCJyb3dzcGFuIiwic3BlbGxjaGVjayIsInNjb3BlIiwic2VsZWN0ZWQiLCJzaGFwZSIsInNpemUiLCJzaXplcyIsInNwYW4iLCJzcmNsYW5nIiwic3RhcnQiLCJzcmMiLCJzcmNzZXQiLCJzdGVwIiwic3R5bGUiLCJzdW1tYXJ5IiwidGFiaW5kZXgiLCJ0aXRsZSIsInRyYW5zbGF0ZSIsInR5cGUiLCJ1c2VtYXAiLCJ2YWxpZ24iLCJ2YWx1ZSIsIndpZHRoIiwid3JhcCIsInhtbG5zIiwic2xvdCJdKSxHPWEoWyJhY2NlbnQtaGVpZ2h0IiwiYWNjdW11bGF0ZSIsImFkZGl0aXZlIiwiYWxpZ25tZW50LWJhc2VsaW5lIiwiYXNjZW50IiwiYXR0cmlidXRlbmFtZSIsImF0dHJpYnV0ZXR5cGUiLCJhemltdXRoIiwiYmFzZWZyZXF1ZW5jeSIsImJhc2VsaW5lLXNoaWZ0IiwiYmVnaW4iLCJiaWFzIiwiYnkiLCJjbGFzcyIsImNsaXAiLCJjbGlwcGF0aHVuaXRzIiwiY2xpcC1wYXRoIiwiY2xpcC1ydWxlIiwiY29sb3IiLCJjb2xvci1pbnRlcnBvbGF0aW9uIiwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIiwiY29sb3ItcHJvZmlsZSIsImNvbG9yLXJlbmRlcmluZyIsImN4IiwiY3kiLCJkIiwiZHgiLCJkeSIsImRpZmZ1c2Vjb25zdGFudCIsImRpcmVjdGlvbiIsImRpc3BsYXkiLCJkaXZpc29yIiwiZHVyIiwiZWRnZW1vZGUiLCJlbGV2YXRpb24iLCJlbmQiLCJmaWxsIiwiZmlsbC1vcGFjaXR5IiwiZmlsbC1ydWxlIiwiZmlsdGVyIiwiZmlsdGVydW5pdHMiLCJmbG9vZC1jb2xvciIsImZsb29kLW9wYWNpdHkiLCJmb250LWZhbWlseSIsImZvbnQtc2l6ZSIsImZvbnQtc2l6ZS1hZGp1c3QiLCJmb250LXN0cmV0Y2giLCJmb250LXN0eWxlIiwiZm9udC12YXJpYW50IiwiZm9udC13ZWlnaHQiLCJmeCIsImZ5IiwiZzEiLCJnMiIsImdseXBoLW5hbWUiLCJnbHlwaHJlZiIsImdyYWRpZW50dW5pdHMiLCJncmFkaWVudHRyYW5zZm9ybSIsImhlaWdodCIsImhyZWYiLCJpZCIsImltYWdlLXJlbmRlcmluZyIsImluIiwiaW4yIiwiayIsImsxIiwiazIiLCJrMyIsIms0Iiwia2VybmluZyIsImtleXBvaW50cyIsImtleXNwbGluZXMiLCJrZXl0aW1lcyIsImxhbmciLCJsZW5ndGhhZGp1c3QiLCJsZXR0ZXItc3BhY2luZyIsImtlcm5lbG1hdHJpeCIsImtlcm5lbHVuaXRsZW5ndGgiLCJsaWdodGluZy1jb2xvciIsImxvY2FsIiwibWFya2VyLWVuZCIsIm1hcmtlci1taWQiLCJtYXJrZXItc3RhcnQiLCJtYXJrZXJoZWlnaHQiLCJtYXJrZXJ1bml0cyIsIm1hcmtlcndpZHRoIiwibWFza2NvbnRlbnR1bml0cyIsIm1hc2t1bml0cyIsIm1heCIsIm1hc2siLCJtZWRpYSIsIm1ldGhvZCIsIm1vZGUiLCJtaW4iLCJuYW1lIiwibnVtb2N0YXZlcyIsIm9mZnNldCIsIm9wZXJhdG9yIiwib3BhY2l0eSIsIm9yZGVyIiwib3JpZW50Iiwib3JpZW50YXRpb24iLCJvcmlnaW4iLCJvdmVyZmxvdyIsInBhaW50LW9yZGVyIiwicGF0aCIsInBhdGhsZW5ndGgiLCJwYXR0ZXJuY29udGVudHVuaXRzIiwicGF0dGVybnRyYW5zZm9ybSIsInBhdHRlcm51bml0cyIsInBvaW50cyIsInByZXNlcnZlYWxwaGEiLCJwcmVzZXJ2ZWFzcGVjdHJhdGlvIiwicHJpbWl0aXZldW5pdHMiLCJyIiwicngiLCJyeSIsInJhZGl1cyIsInJlZngiLCJyZWZ5IiwicmVwZWF0Y291bnQiLCJyZXBlYXRkdXIiLCJyZXN0YXJ0IiwicmVzdWx0Iiwicm90YXRlIiwic2NhbGUiLCJzZWVkIiwic2hhcGUtcmVuZGVyaW5nIiwic3BlY3VsYXJjb25zdGFudCIsInNwZWN1bGFyZXhwb25lbnQiLCJzcHJlYWRtZXRob2QiLCJzdGFydG9mZnNldCIsInN0ZGRldmlhdGlvbiIsInN0aXRjaHRpbGVzIiwic3RvcC1jb2xvciIsInN0b3Atb3BhY2l0eSIsInN0cm9rZS1kYXNoYXJyYXkiLCJzdHJva2UtZGFzaG9mZnNldCIsInN0cm9rZS1saW5lY2FwIiwic3Ryb2tlLWxpbmVqb2luIiwic3Ryb2tlLW1pdGVybGltaXQiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZSIsInN0cm9rZS13aWR0aCIsInN0eWxlIiwic3VyZmFjZXNjYWxlIiwic3lzdGVtbGFuZ3VhZ2UiLCJ0YWJpbmRleCIsInRhcmdldHgiLCJ0YXJnZXR5IiwidHJhbnNmb3JtIiwidHJhbnNmb3JtLW9yaWdpbiIsInRleHQtYW5jaG9yIiwidGV4dC1kZWNvcmF0aW9uIiwidGV4dC1yZW5kZXJpbmciLCJ0ZXh0bGVuZ3RoIiwidHlwZSIsInUxIiwidTIiLCJ1bmljb2RlIiwidmFsdWVzIiwidmlld2JveCIsInZpc2liaWxpdHkiLCJ2ZXJzaW9uIiwidmVydC1hZHYteSIsInZlcnQtb3JpZ2luLXgiLCJ2ZXJ0LW9yaWdpbi15Iiwid2lkdGgiLCJ3b3JkLXNwYWNpbmciLCJ3cmFwIiwid3JpdGluZy1tb2RlIiwieGNoYW5uZWxzZWxlY3RvciIsInljaGFubmVsc2VsZWN0b3IiLCJ4IiwieDEiLCJ4MiIsInhtbG5zIiwieSIsInkxIiwieTIiLCJ6Iiwiem9vbWFuZHBhbiJdKSx6PWEoWyJhY2NlbnQiLCJhY2NlbnR1bmRlciIsImFsaWduIiwiYmV2ZWxsZWQiLCJjbG9zZSIsImNvbHVtbnNhbGlnbiIsImNvbHVtbmxpbmVzIiwiY29sdW1uc3BhbiIsImRlbm9tYWxpZ24iLCJkZXB0aCIsImRpciIsImRpc3BsYXkiLCJkaXNwbGF5c3R5bGUiLCJlbmNvZGluZyIsImZlbmNlIiwiZnJhbWUiLCJoZWlnaHQiLCJocmVmIiwiaWQiLCJsYXJnZW9wIiwibGVuZ3RoIiwibGluZXRoaWNrbmVzcyIsImxzcGFjZSIsImxxdW90ZSIsIm1hdGhiYWNrZ3JvdW5kIiwibWF0aGNvbG9yIiwibWF0aHNpemUiLCJtYXRodmFyaWFudCIsIm1heHNpemUiLCJtaW5zaXplIiwibW92YWJsZWxpbWl0cyIsIm5vdGF0aW9uIiwibnVtYWxpZ24iLCJvcGVuIiwicm93YWxpZ24iLCJyb3dsaW5lcyIsInJvd3NwYWNpbmciLCJyb3dzcGFuIiwicnNwYWNlIiwicnF1b3RlIiwic2NyaXB0bGV2ZWwiLCJzY3JpcHRtaW5zaXplIiwic2NyaXB0c2l6ZW11bHRpcGxpZXIiLCJzZWxlY3Rpb24iLCJzZXBhcmF0b3IiLCJzZXBhcmF0b3JzIiwic3RyZXRjaHkiLCJzdWJzY3JpcHRzaGlmdCIsInN1cHNjcmlwdHNoaWZ0Iiwic3ltbWV0cmljIiwidm9mZnNldCIsIndpZHRoIiwieG1sbnMiXSksVz1hKFsieGxpbms6aHJlZiIsInhtbDppZCIsInhsaW5rOnRpdGxlIiwieG1sOnNwYWNlIiwieG1sbnM6eGxpbmsiXSksWj1zKC9ce1x7W1x3XFddKnxbXHdcV10qXH1cfS9nbSksaj1zKC88JVtcd1xXXSp8W1x3XFddKiU+L2dtKSxvZT1zKC9cJHtbXHdcV10qfS9nbSksSz1zKC9eZGF0YS1bXC1cdy5cdTAwQjctXHVGRkZGXS8pLGVlPXMoL15hcmlhLVtcLVx3XSskLyksSj1zKC9eKD86KD86KD86ZnxodCl0cHM/fG1haWx0b3x0ZWx8Y2FsbHRvfHNtc3xjaWR8eG1wcCk6fFteYS16XXxbYS16Ky5cLV0rKD86W15hLXorLlwtOl18JCkpL2kpLEg9cygvXig/Olx3K3NjcmlwdHxkYXRhKTovaSkscT1zKC9bXHUwMDAwLVx1MDAyMFx1MDBBMFx1MTY4MFx1MTgwRVx1MjAwMC1cdTIwMjlcdTIwNUZcdTMwMDBdL2cpLFE9cygvXmh0bWwkL2kpLGFlPXMoL15bYS16XVsuXHddKigtWy5cd10rKSskL2kpO3ZhciB1ZT1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxNVVNUQUNIRV9FWFBSOlosRVJCX0VYUFI6aixUTVBMSVRfRVhQUjpvZSxEQVRBX0FUVFI6SyxBUklBX0FUVFI6ZWUsSVNfQUxMT1dFRF9VUkk6SixJU19TQ1JJUFRfT1JfREFUQTpILEFUVFJfV0hJVEVTUEFDRTpxLERPQ1RZUEVfTkFNRTpRLENVU1RPTV9FTEVNRU5UOmFlfSk7bGV0IGNlPXtlbGVtZW50OjEsYXR0cmlidXRlOjIsdGV4dDozLGNkYXRhU2VjdGlvbjo0LGVudGl0eVJlZmVyZW5jZTo1LGVudGl0eU5vZGU6Nixwcm9ncmVzc2luZ0luc3RydWN0aW9uOjcsY29tbWVudDo4LGRvY3VtZW50OjksZG9jdW1lbnRUeXBlOjEwLGRvY3VtZW50RnJhZ21lbnQ6MTEsbm90YXRpb246MTJ9LHRlPW8oZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIHdpbmRvdz4idSI/bnVsbDp3aW5kb3d9LCJnZXRHbG9iYWwiKSxOZT1vKGZ1bmN0aW9uKENlLFBlKXtpZih0eXBlb2YgQ2UhPSJvYmplY3QifHx0eXBlb2YgQ2UuY3JlYXRlUG9saWN5IT0iZnVuY3Rpb24iKXJldHVybiBudWxsO2xldCBJZT1udWxsLCRlPSJkYXRhLXR0LXBvbGljeS1zdWZmaXgiO1BlJiZQZS5oYXNBdHRyaWJ1dGUoJGUpJiYoSWU9UGUuZ2V0QXR0cmlidXRlKCRlKSk7bGV0IHllPSJkb21wdXJpZnkiKyhJZT8iIyIrSWU6IiIpO3RyeXtyZXR1cm4gQ2UuY3JlYXRlUG9saWN5KHllLHtjcmVhdGVIVE1MKFgpe3JldHVybiBYfSxjcmVhdGVTY3JpcHRVUkwoWCl7cmV0dXJuIFh9fSl9Y2F0Y2h7cmV0dXJuIGNvbnNvbGUud2FybigiVHJ1c3RlZFR5cGVzIHBvbGljeSAiK3llKyIgY291bGQgbm90IGJlIGNyZWF0ZWQuIiksbnVsbH19LCJfY3JlYXRlVHJ1c3RlZFR5cGVzUG9saWN5Iik7ZnVuY3Rpb24gc2UoKXtsZXQgUmU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnRlKCksQ2U9byhLdD0+c2UoS3QpLCJET01QdXJpZnkiKTtpZihDZS52ZXJzaW9uPSIzLjEuNiIsQ2UucmVtb3ZlZD1bXSwhUmV8fCFSZS5kb2N1bWVudHx8UmUuZG9jdW1lbnQubm9kZVR5cGUhPT1jZS5kb2N1bWVudClyZXR1cm4gQ2UuaXNTdXBwb3J0ZWQ9ITEsQ2U7bGV0e2RvY3VtZW50OlBlfT1SZSxJZT1QZSwkZT1JZS5jdXJyZW50U2NyaXB0LHtEb2N1bWVudEZyYWdtZW50OnllLEhUTUxUZW1wbGF0ZUVsZW1lbnQ6WCxOb2RlOmZlLEVsZW1lbnQ6aGUsTm9kZUZpbHRlcjpnZSxOYW1lZE5vZGVNYXA6bmU9UmUuTmFtZWROb2RlTWFwfHxSZS5Nb3pOYW1lZEF0dHJNYXAsSFRNTEZvcm1FbGVtZW50OnZlLERPTVBhcnNlcjpVLHRydXN0ZWRUeXBlczpUZX09UmUsaWU9aGUucHJvdG90eXBlLEVlPUQoaWUsImNsb25lTm9kZSIpLEFlPUQoaWUsInJlbW92ZSIpLEdlPUQoaWUsIm5leHRTaWJsaW5nIiksQmU9RChpZSwiY2hpbGROb2RlcyIpLG1lPUQoaWUsInBhcmVudE5vZGUiKTtpZih0eXBlb2YgWD09ImZ1bmN0aW9uIil7bGV0IEt0PVBlLmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7S3QuY29udGVudCYmS3QuY29udGVudC5vd25lckRvY3VtZW50JiYoUGU9S3QuY29udGVudC5vd25lckRvY3VtZW50KX1sZXQgSGUsT2U9IiIse2ltcGxlbWVudGF0aW9uOmV0LGNyZWF0ZU5vZGVJdGVyYXRvcjpidCxjcmVhdGVEb2N1bWVudEZyYWdtZW50Omt0LGdldEVsZW1lbnRzQnlUYWdOYW1lOnZ0fT1QZSx7aW1wb3J0Tm9kZTpydH09SWUseXQ9e307Q2UuaXNTdXBwb3J0ZWQ9dHlwZW9mIHQ9PSJmdW5jdGlvbiImJnR5cGVvZiBtZT09ImZ1bmN0aW9uIiYmZXQmJmV0LmNyZWF0ZUhUTUxEb2N1bWVudCE9PXZvaWQgMDtsZXR7TVVTVEFDSEVfRVhQUjpVZSxFUkJfRVhQUjp0dCxUTVBMSVRfRVhQUjpodCxEQVRBX0FUVFI6RXQsQVJJQV9BVFRSOmVyLElTX1NDUklQVF9PUl9EQVRBOmR0LEFUVFJfV0hJVEVTUEFDRTpKZSxDVVNUT01fRUxFTUVOVDpjdH09dWUse0lTX0FMTE9XRURfVVJJOkN0fT11ZSxwdD1udWxsLEJ0PVMoe30sWy4uLmssLi4uUiwuLi5DLC4uLk4sLi4uRl0pLFRyPW51bGwseXI9Uyh7fSxbLi4uQiwuLi5HLC4uLnosLi4uV10pLG9yPU9iamVjdC5zZWFsKGwobnVsbCx7dGFnTmFtZUNoZWNrOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTpudWxsfSxhdHRyaWJ1dGVOYW1lQ2hlY2s6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOm51bGx9LGFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50czp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6ITF9fSkpLGxuPW51bGwsT3I9bnVsbCxpaT0hMCxtbj0hMCxPbj0hMSxfcj0hMCxtaT0hMSx2cz0hMCxQbj0hMSxTbz0hMSxnbD0hMSxCbj0hMSxraT0hMSxBdD0hMSxQdD0hMCx3dD0hMSxXZT0idXNlci1jb250ZW50LSIsRnQ9ITAsZGU9ITEsZ249e30seGU9bnVsbCxqYT1TKHt9LFsiYW5ub3RhdGlvbi14bWwiLCJhdWRpbyIsImNvbGdyb3VwIiwiZGVzYyIsImZvcmVpZ25vYmplY3QiLCJoZWFkIiwiaWZyYW1lIiwibWF0aCIsIm1pIiwibW4iLCJtbyIsIm1zIiwibXRleHQiLCJub2VtYmVkIiwibm9mcmFtZXMiLCJub3NjcmlwdCIsInBsYWludGV4dCIsInNjcmlwdCIsInN0eWxlIiwic3ZnIiwidGVtcGxhdGUiLCJ0aGVhZCIsInRpdGxlIiwidmlkZW8iLCJ4bXAiXSksVzE9bnVsbCxZMT1TKHt9LFsiYXVkaW8iLCJ2aWRlbyIsImltZyIsInNvdXJjZSIsImltYWdlIiwidHJhY2siXSkscTE9bnVsbCxYMT1TKHt9LFsiYWx0IiwiY2xhc3MiLCJmb3IiLCJpZCIsImxhYmVsIiwibmFtZSIsInBhdHRlcm4iLCJwbGFjZWhvbGRlciIsInJvbGUiLCJzdW1tYXJ5IiwidGl0bGUiLCJ2YWx1ZSIsInN0eWxlIiwieG1sbnMiXSksb3A9Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLEtuPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2E9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLHRjPWNhLFdmPSExLGoxPW51bGwsVEY9Uyh7fSxbb3AsS24sY2FdLGcpLFlmPW51bGwsdWE9WyJhcHBsaWNhdGlvbi94aHRtbCt4bWwiLCJ0ZXh0L2h0bWwiXSxLMT0idGV4dC9odG1sIixFbj1udWxsLE9pPW51bGwsa0Y9UGUuY3JlYXRlRWxlbWVudCgiZm9ybSIpLGxwPW8oZnVuY3Rpb24oTGUpe3JldHVybiBMZSBpbnN0YW5jZW9mIFJlZ0V4cHx8TGUgaW5zdGFuY2VvZiBGdW5jdGlvbn0sImlzUmVnZXhPckZ1bmN0aW9uIikscmM9byhmdW5jdGlvbigpe2xldCBMZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06e307aWYoIShPaSYmT2k9PT1MZSkpe2lmKCghTGV8fHR5cGVvZiBMZSE9Im9iamVjdCIpJiYoTGU9e30pLExlPUkoTGUpLFlmPXVhLmluZGV4T2YoTGUuUEFSU0VSX01FRElBX1RZUEUpPT09LTE/SzE6TGUuUEFSU0VSX01FRElBX1RZUEUsRW49WWY9PT0iYXBwbGljYXRpb24veGh0bWwreG1sIj9nOm0scHQ9dyhMZSwiQUxMT1dFRF9UQUdTIik/Uyh7fSxMZS5BTExPV0VEX1RBR1MsRW4pOkJ0LFRyPXcoTGUsIkFMTE9XRURfQVRUUiIpP1Moe30sTGUuQUxMT1dFRF9BVFRSLEVuKTp5cixqMT13KExlLCJBTExPV0VEX05BTUVTUEFDRVMiKT9TKHt9LExlLkFMTE9XRURfTkFNRVNQQUNFUyxnKTpURixxMT13KExlLCJBRERfVVJJX1NBRkVfQVRUUiIpP1MoSShYMSksTGUuQUREX1VSSV9TQUZFX0FUVFIsRW4pOlgxLFcxPXcoTGUsIkFERF9EQVRBX1VSSV9UQUdTIik/UyhJKFkxKSxMZS5BRERfREFUQV9VUklfVEFHUyxFbik6WTEseGU9dyhMZSwiRk9SQklEX0NPTlRFTlRTIik/Uyh7fSxMZS5GT1JCSURfQ09OVEVOVFMsRW4pOmphLGxuPXcoTGUsIkZPUkJJRF9UQUdTIik/Uyh7fSxMZS5GT1JCSURfVEFHUyxFbik6e30sT3I9dyhMZSwiRk9SQklEX0FUVFIiKT9TKHt9LExlLkZPUkJJRF9BVFRSLEVuKTp7fSxnbj13KExlLCJVU0VfUFJPRklMRVMiKT9MZS5VU0VfUFJPRklMRVM6ITEsaWk9TGUuQUxMT1dfQVJJQV9BVFRSIT09ITEsbW49TGUuQUxMT1dfREFUQV9BVFRSIT09ITEsT249TGUuQUxMT1dfVU5LTk9XTl9QUk9UT0NPTFN8fCExLF9yPUxlLkFMTE9XX1NFTEZfQ0xPU0VfSU5fQVRUUiE9PSExLG1pPUxlLlNBRkVfRk9SX1RFTVBMQVRFU3x8ITEsdnM9TGUuU0FGRV9GT1JfWE1MIT09ITEsUG49TGUuV0hPTEVfRE9DVU1FTlR8fCExLEJuPUxlLlJFVFVSTl9ET018fCExLGtpPUxlLlJFVFVSTl9ET01fRlJBR01FTlR8fCExLEF0PUxlLlJFVFVSTl9UUlVTVEVEX1RZUEV8fCExLGdsPUxlLkZPUkNFX0JPRFl8fCExLFB0PUxlLlNBTklUSVpFX0RPTSE9PSExLHd0PUxlLlNBTklUSVpFX05BTUVEX1BST1BTfHwhMSxGdD1MZS5LRUVQX0NPTlRFTlQhPT0hMSxkZT1MZS5JTl9QTEFDRXx8ITEsQ3Q9TGUuQUxMT1dFRF9VUklfUkVHRVhQfHxKLHRjPUxlLk5BTUVTUEFDRXx8Y2Esb3I9TGUuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkd8fHt9LExlLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiZscChMZS5DVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2spJiYob3IudGFnTmFtZUNoZWNrPUxlLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayksTGUuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJmxwKExlLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjaykmJihvci5hdHRyaWJ1dGVOYW1lQ2hlY2s9TGUuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrKSxMZS5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmdHlwZW9mIExlLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cz09ImJvb2xlYW4iJiYob3IuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzPUxlLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyksbWkmJihtbj0hMSksa2kmJihCbj0hMCksZ24mJihwdD1TKHt9LEYpLFRyPVtdLGduLmh0bWw9PT0hMCYmKFMocHQsayksUyhUcixCKSksZ24uc3ZnPT09ITAmJihTKHB0LFIpLFMoVHIsRyksUyhUcixXKSksZ24uc3ZnRmlsdGVycz09PSEwJiYoUyhwdCxDKSxTKFRyLEcpLFMoVHIsVykpLGduLm1hdGhNbD09PSEwJiYoUyhwdCxOKSxTKFRyLHopLFMoVHIsVykpKSxMZS5BRERfVEFHUyYmKHB0PT09QnQmJihwdD1JKHB0KSksUyhwdCxMZS5BRERfVEFHUyxFbikpLExlLkFERF9BVFRSJiYoVHI9PT15ciYmKFRyPUkoVHIpKSxTKFRyLExlLkFERF9BVFRSLEVuKSksTGUuQUREX1VSSV9TQUZFX0FUVFImJlMocTEsTGUuQUREX1VSSV9TQUZFX0FUVFIsRW4pLExlLkZPUkJJRF9DT05URU5UUyYmKHhlPT09amEmJih4ZT1JKHhlKSksUyh4ZSxMZS5GT1JCSURfQ09OVEVOVFMsRW4pKSxGdCYmKHB0WyIjdGV4dCJdPSEwKSxQbiYmUyhwdCxbImh0bWwiLCJoZWFkIiwiYm9keSJdKSxwdC50YWJsZSYmKFMocHQsWyJ0Ym9keSJdKSxkZWxldGUgbG4udGJvZHkpLExlLlRSVVNURURfVFlQRVNfUE9MSUNZKXtpZih0eXBlb2YgTGUuVFJVU1RFRF9UWVBFU19QT0xJQ1kuY3JlYXRlSFRNTCE9ImZ1bmN0aW9uIil0aHJvdyBUKCdUUlVTVEVEX1RZUEVTX1BPTElDWSBjb25maWd1cmF0aW9uIG9wdGlvbiBtdXN0IHByb3ZpZGUgYSAiY3JlYXRlSFRNTCIgaG9vay4nKTtpZih0eXBlb2YgTGUuVFJVU1RFRF9UWVBFU19QT0xJQ1kuY3JlYXRlU2NyaXB0VVJMIT0iZnVuY3Rpb24iKXRocm93IFQoJ1RSVVNURURfVFlQRVNfUE9MSUNZIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG11c3QgcHJvdmlkZSBhICJjcmVhdGVTY3JpcHRVUkwiIGhvb2suJyk7SGU9TGUuVFJVU1RFRF9UWVBFU19QT0xJQ1ksT2U9SGUuY3JlYXRlSFRNTCgiIil9ZWxzZSBIZT09PXZvaWQgMCYmKEhlPU5lKFRlLCRlKSksSGUhPT1udWxsJiZ0eXBlb2YgT2U9PSJzdHJpbmciJiYoT2U9SGUuY3JlYXRlSFRNTCgiIikpO2EmJmEoTGUpLE9pPUxlfX0sIl9wYXJzZUNvbmZpZyIpLHFmPVMoe30sWyJtaSIsIm1vIiwibW4iLCJtcyIsIm10ZXh0Il0pLENvPVMoe30sWyJmb3JlaWdub2JqZWN0IiwiYW5ub3RhdGlvbi14bWwiXSksemI9Uyh7fSxbInRpdGxlIiwic3R5bGUiLCJmb250IiwiYSIsInNjcmlwdCJdKSxYZj1TKHt9LFsuLi5SLC4uLkMsLi4uT10pLGNwPVMoe30sWy4uLk4sLi4uUF0pLEthPW8oZnVuY3Rpb24oTGUpe2xldCBmdD1tZShMZSk7KCFmdHx8IWZ0LnRhZ05hbWUpJiYoZnQ9e25hbWVzcGFjZVVSSTp0Yyx0YWdOYW1lOiJ0ZW1wbGF0ZSJ9KTtsZXQgenQ9bShMZS50YWdOYW1lKSxTbj1tKGZ0LnRhZ05hbWUpO3JldHVybiBqMVtMZS5uYW1lc3BhY2VVUkldP0xlLm5hbWVzcGFjZVVSST09PUtuP2Z0Lm5hbWVzcGFjZVVSST09PWNhP3p0PT09InN2ZyI6ZnQubmFtZXNwYWNlVVJJPT09b3A/enQ9PT0ic3ZnIiYmKFNuPT09ImFubm90YXRpb24teG1sInx8cWZbU25dKTohIVhmW3p0XTpMZS5uYW1lc3BhY2VVUkk9PT1vcD9mdC5uYW1lc3BhY2VVUkk9PT1jYT96dD09PSJtYXRoIjpmdC5uYW1lc3BhY2VVUkk9PT1Lbj96dD09PSJtYXRoIiYmQ29bU25dOiEhY3BbenRdOkxlLm5hbWVzcGFjZVVSST09PWNhP2Z0Lm5hbWVzcGFjZVVSST09PUtuJiYhQ29bU25dfHxmdC5uYW1lc3BhY2VVUkk9PT1vcCYmIXFmW1NuXT8hMTohY3BbenRdJiYoemJbenRdfHwhWGZbenRdKTohIShZZj09PSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiJiZqMVtMZS5uYW1lc3BhY2VVUkldKTohMX0sIl9jaGVja1ZhbGlkTmFtZXNwYWNlIiksbmM9byhmdW5jdGlvbihMZSl7cChDZS5yZW1vdmVkLHtlbGVtZW50OkxlfSk7dHJ5e21lKExlKS5yZW1vdmVDaGlsZChMZSl9Y2F0Y2h7QWUoTGUpfX0sIl9mb3JjZVJlbW92ZSIpLEdiPW8oZnVuY3Rpb24oTGUsZnQpe3RyeXtwKENlLnJlbW92ZWQse2F0dHJpYnV0ZTpmdC5nZXRBdHRyaWJ1dGVOb2RlKExlKSxmcm9tOmZ0fSl9Y2F0Y2h7cChDZS5yZW1vdmVkLHthdHRyaWJ1dGU6bnVsbCxmcm9tOmZ0fSl9aWYoZnQucmVtb3ZlQXR0cmlidXRlKExlKSxMZT09PSJpcyImJiFUcltMZV0paWYoQm58fGtpKXRyeXtuYyhmdCl9Y2F0Y2h7fWVsc2UgdHJ5e2Z0LnNldEF0dHJpYnV0ZShMZSwiIil9Y2F0Y2h7fX0sIl9yZW1vdmVBdHRyaWJ1dGUiKSxFRj1vKGZ1bmN0aW9uKExlKXtsZXQgZnQ9bnVsbCx6dD1udWxsO2lmKGdsKUxlPSI8cmVtb3ZlPjwvcmVtb3ZlPiIrTGU7ZWxzZXtsZXQgaGE9eShMZSwvXltcclxuXHQgXSsvKTt6dD1oYSYmaGFbMF19WWY9PT0iYXBwbGljYXRpb24veGh0bWwreG1sIiYmdGM9PT1jYSYmKExlPSc8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+PGhlYWQ+PC9oZWFkPjxib2R5PicrTGUrIjwvYm9keT48L2h0bWw+Iik7bGV0IFNuPUhlP0hlLmNyZWF0ZUhUTUwoTGUpOkxlO2lmKHRjPT09Y2EpdHJ5e2Z0PW5ldyBVKCkucGFyc2VGcm9tU3RyaW5nKFNuLFlmKX1jYXRjaHt9aWYoIWZ0fHwhZnQuZG9jdW1lbnRFbGVtZW50KXtmdD1ldC5jcmVhdGVEb2N1bWVudCh0YywidGVtcGxhdGUiLG51bGwpO3RyeXtmdC5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MPVdmP09lOlNufWNhdGNoe319bGV0IERhPWZ0LmJvZHl8fGZ0LmRvY3VtZW50RWxlbWVudDtyZXR1cm4gTGUmJnp0JiZEYS5pbnNlcnRCZWZvcmUoUGUuY3JlYXRlVGV4dE5vZGUoenQpLERhLmNoaWxkTm9kZXNbMF18fG51bGwpLHRjPT09Y2E/dnQuY2FsbChmdCxQbj8iaHRtbCI6ImJvZHkiKVswXTpQbj9mdC5kb2N1bWVudEVsZW1lbnQ6RGF9LCJfaW5pdERvY3VtZW50IiksU0Y9byhmdW5jdGlvbihMZSl7cmV0dXJuIGJ0LmNhbGwoTGUub3duZXJEb2N1bWVudHx8TGUsTGUsZ2UuU0hPV19FTEVNRU5UfGdlLlNIT1dfQ09NTUVOVHxnZS5TSE9XX1RFWFR8Z2UuU0hPV19QUk9DRVNTSU5HX0lOU1RSVUNUSU9OfGdlLlNIT1dfQ0RBVEFfU0VDVElPTixudWxsKX0sIl9jcmVhdGVOb2RlSXRlcmF0b3IiKSxDRj1vKGZ1bmN0aW9uKExlKXtyZXR1cm4gTGUgaW5zdGFuY2VvZiB2ZSYmKHR5cGVvZiBMZS5ub2RlTmFtZSE9InN0cmluZyJ8fHR5cGVvZiBMZS50ZXh0Q29udGVudCE9InN0cmluZyJ8fHR5cGVvZiBMZS5yZW1vdmVDaGlsZCE9ImZ1bmN0aW9uInx8IShMZS5hdHRyaWJ1dGVzIGluc3RhbmNlb2YgbmUpfHx0eXBlb2YgTGUucmVtb3ZlQXR0cmlidXRlIT0iZnVuY3Rpb24ifHx0eXBlb2YgTGUuc2V0QXR0cmlidXRlIT0iZnVuY3Rpb24ifHx0eXBlb2YgTGUubmFtZXNwYWNlVVJJIT0ic3RyaW5nInx8dHlwZW9mIExlLmluc2VydEJlZm9yZSE9ImZ1bmN0aW9uInx8dHlwZW9mIExlLmhhc0NoaWxkTm9kZXMhPSJmdW5jdGlvbiIpfSwiX2lzQ2xvYmJlcmVkIiksQUY9byhmdW5jdGlvbihMZSl7cmV0dXJuIHR5cGVvZiBmZT09ImZ1bmN0aW9uIiYmTGUgaW5zdGFuY2VvZiBmZX0sIl9pc05vZGUiKSxpdT1vKGZ1bmN0aW9uKExlLGZ0LHp0KXt5dFtMZV0mJmYoeXRbTGVdLFNuPT57U24uY2FsbChDZSxmdCx6dCxPaSl9KX0sIl9leGVjdXRlSG9vayIpLF9GPW8oZnVuY3Rpb24oTGUpe2xldCBmdD1udWxsO2lmKGl1KCJiZWZvcmVTYW5pdGl6ZUVsZW1lbnRzIixMZSxudWxsKSxDRihMZSkpcmV0dXJuIG5jKExlKSwhMDtsZXQgenQ9RW4oTGUubm9kZU5hbWUpO2lmKGl1KCJ1cG9uU2FuaXRpemVFbGVtZW50IixMZSx7dGFnTmFtZTp6dCxhbGxvd2VkVGFnczpwdH0pLExlLmhhc0NoaWxkTm9kZXMoKSYmIUFGKExlLmZpcnN0RWxlbWVudENoaWxkKSYmXygvPFsvXHddL2csTGUuaW5uZXJIVE1MKSYmXygvPFsvXHddL2csTGUudGV4dENvbnRlbnQpfHxMZS5ub2RlVHlwZT09PWNlLnByb2dyZXNzaW5nSW5zdHJ1Y3Rpb258fHZzJiZMZS5ub2RlVHlwZT09PWNlLmNvbW1lbnQmJl8oLzxbL1x3XS9nLExlLmRhdGEpKXJldHVybiBuYyhMZSksITA7aWYoIXB0W3p0XXx8bG5benRdKXtpZighbG5benRdJiZERih6dCkmJihvci50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJl8ob3IudGFnTmFtZUNoZWNrLHp0KXx8b3IudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJm9yLnRhZ05hbWVDaGVjayh6dCkpKXJldHVybiExO2lmKEZ0JiYheGVbenRdKXtsZXQgU249bWUoTGUpfHxMZS5wYXJlbnROb2RlLERhPUJlKExlKXx8TGUuY2hpbGROb2RlcztpZihEYSYmU24pe2xldCBoYT1EYS5sZW5ndGg7Zm9yKGxldCB4cz1oYS0xO3hzPj0wOy0teHMpe2xldCBpYz1FZShEYVt4c10sITApO2ljLl9fcmVtb3ZhbENvdW50PShMZS5fX3JlbW92YWxDb3VudHx8MCkrMSxTbi5pbnNlcnRCZWZvcmUoaWMsR2UoTGUpKX19fXJldHVybiBuYyhMZSksITB9cmV0dXJuIExlIGluc3RhbmNlb2YgaGUmJiFLYShMZSl8fCh6dD09PSJub3NjcmlwdCJ8fHp0PT09Im5vZW1iZWQifHx6dD09PSJub2ZyYW1lcyIpJiZfKC88XC9ubyhzY3JpcHR8ZW1iZWR8ZnJhbWVzKS9pLExlLmlubmVySFRNTCk/KG5jKExlKSwhMCk6KG1pJiZMZS5ub2RlVHlwZT09PWNlLnRleHQmJihmdD1MZS50ZXh0Q29udGVudCxmKFtVZSx0dCxodF0sU249PntmdD12KGZ0LFNuLCIgIil9KSxMZS50ZXh0Q29udGVudCE9PWZ0JiYocChDZS5yZW1vdmVkLHtlbGVtZW50OkxlLmNsb25lTm9kZSgpfSksTGUudGV4dENvbnRlbnQ9ZnQpKSxpdSgiYWZ0ZXJTYW5pdGl6ZUVsZW1lbnRzIixMZSxudWxsKSwhMSl9LCJfc2FuaXRpemVFbGVtZW50cyIpLExGPW8oZnVuY3Rpb24oTGUsZnQsenQpe2lmKFB0JiYoZnQ9PT0iaWQifHxmdD09PSJuYW1lIikmJih6dCBpbiBQZXx8enQgaW4ga0YpKXJldHVybiExO2lmKCEobW4mJiFPcltmdF0mJl8oRXQsZnQpKSl7aWYoIShpaSYmXyhlcixmdCkpKXtpZighVHJbZnRdfHxPcltmdF0pe2lmKCEoREYoTGUpJiYob3IudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZfKG9yLnRhZ05hbWVDaGVjayxMZSl8fG9yLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZvci50YWdOYW1lQ2hlY2soTGUpKSYmKG9yLmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmXyhvci5hdHRyaWJ1dGVOYW1lQ2hlY2ssZnQpfHxvci5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmb3IuYXR0cmlidXRlTmFtZUNoZWNrKGZ0KSl8fGZ0PT09ImlzIiYmb3IuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzJiYob3IudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZfKG9yLnRhZ05hbWVDaGVjayx6dCl8fG9yLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZvci50YWdOYW1lQ2hlY2soenQpKSkpcmV0dXJuITF9ZWxzZSBpZighcTFbZnRdKXtpZighXyhDdCx2KHp0LEplLCIiKSkpe2lmKCEoKGZ0PT09InNyYyJ8fGZ0PT09InhsaW5rOmhyZWYifHxmdD09PSJocmVmIikmJkxlIT09InNjcmlwdCImJngoenQsImRhdGE6Iik9PT0wJiZXMVtMZV0pKXtpZighKE9uJiYhXyhkdCx2KHp0LEplLCIiKSkpKXtpZih6dClyZXR1cm4hMX19fX19fXJldHVybiEwfSwiX2lzVmFsaWRBdHRyaWJ1dGUiKSxERj1vKGZ1bmN0aW9uKExlKXtyZXR1cm4gTGUhPT0iYW5ub3RhdGlvbi14bWwiJiZ5KExlLGN0KX0sIl9pc0Jhc2ljQ3VzdG9tRWxlbWVudCIpLE5GPW8oZnVuY3Rpb24oTGUpe2l1KCJiZWZvcmVTYW5pdGl6ZUF0dHJpYnV0ZXMiLExlLG51bGwpO2xldHthdHRyaWJ1dGVzOmZ0fT1MZTtpZighZnQpcmV0dXJuO2xldCB6dD17YXR0ck5hbWU6IiIsYXR0clZhbHVlOiIiLGtlZXBBdHRyOiEwLGFsbG93ZWRBdHRyaWJ1dGVzOlRyfSxTbj1mdC5sZW5ndGg7Zm9yKDtTbi0tOyl7bGV0IERhPWZ0W1NuXSx7bmFtZTpoYSxuYW1lc3BhY2VVUkk6eHMsdmFsdWU6aWN9PURhLFExPUVuKGhhKSxRYT1oYT09PSJ2YWx1ZSI/aWM6YihpYyk7aWYoenQuYXR0ck5hbWU9UTEsenQuYXR0clZhbHVlPVFhLHp0LmtlZXBBdHRyPSEwLHp0LmZvcmNlS2VlcEF0dHI9dm9pZCAwLGl1KCJ1cG9uU2FuaXRpemVBdHRyaWJ1dGUiLExlLHp0KSxRYT16dC5hdHRyVmFsdWUsdnMmJl8oLygoLS0hP3xdKT4pfDxcLyhzdHlsZXx0aXRsZSkvaSxRYSkpe0diKGhhLExlKTtjb250aW51ZX1pZih6dC5mb3JjZUtlZXBBdHRyfHwoR2IoaGEsTGUpLCF6dC5rZWVwQXR0cikpY29udGludWU7aWYoIV9yJiZfKC9cLz4vaSxRYSkpe0diKGhhLExlKTtjb250aW51ZX1taSYmZihbVWUsdHQsaHRdLE1GPT57UWE9dihRYSxNRiwiICIpfSk7bGV0IFJGPUVuKExlLm5vZGVOYW1lKTtpZihMRihSRixRMSxRYSkpe2lmKHd0JiYoUTE9PT0iaWQifHxRMT09PSJuYW1lIikmJihHYihoYSxMZSksUWE9V2UrUWEpLEhlJiZ0eXBlb2YgVGU9PSJvYmplY3QiJiZ0eXBlb2YgVGUuZ2V0QXR0cmlidXRlVHlwZT09ImZ1bmN0aW9uIiYmIXhzKXN3aXRjaChUZS5nZXRBdHRyaWJ1dGVUeXBlKFJGLFExKSl7Y2FzZSJUcnVzdGVkSFRNTCI6e1FhPUhlLmNyZWF0ZUhUTUwoUWEpO2JyZWFrfWNhc2UiVHJ1c3RlZFNjcmlwdFVSTCI6e1FhPUhlLmNyZWF0ZVNjcmlwdFVSTChRYSk7YnJlYWt9fXRyeXt4cz9MZS5zZXRBdHRyaWJ1dGVOUyh4cyxoYSxRYSk6TGUuc2V0QXR0cmlidXRlKGhhLFFhKSxDRihMZSk/bmMoTGUpOmQoQ2UucmVtb3ZlZCl9Y2F0Y2h7fX19aXUoImFmdGVyU2FuaXRpemVBdHRyaWJ1dGVzIixMZSxudWxsKX0sIl9zYW5pdGl6ZUF0dHJpYnV0ZXMiKSxueGU9byhmdW5jdGlvbiBLdChMZSl7bGV0IGZ0PW51bGwsenQ9U0YoTGUpO2ZvcihpdSgiYmVmb3JlU2FuaXRpemVTaGFkb3dET00iLExlLG51bGwpO2Z0PXp0Lm5leHROb2RlKCk7KWl1KCJ1cG9uU2FuaXRpemVTaGFkb3dOb2RlIixmdCxudWxsKSwhX0YoZnQpJiYoZnQuY29udGVudCBpbnN0YW5jZW9mIHllJiZLdChmdC5jb250ZW50KSxORihmdCkpO2l1KCJhZnRlclNhbml0aXplU2hhZG93RE9NIixMZSxudWxsKX0sIl9zYW5pdGl6ZVNoYWRvd0RPTSIpO3JldHVybiBDZS5zYW5pdGl6ZT1mdW5jdGlvbihLdCl7bGV0IExlPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxmdD1udWxsLHp0PW51bGwsU249bnVsbCxEYT1udWxsO2lmKFdmPSFLdCxXZiYmKEt0PSI8IS0tPiIpLHR5cGVvZiBLdCE9InN0cmluZyImJiFBRihLdCkpaWYodHlwZW9mIEt0LnRvU3RyaW5nPT0iZnVuY3Rpb24iKXtpZihLdD1LdC50b1N0cmluZygpLHR5cGVvZiBLdCE9InN0cmluZyIpdGhyb3cgVCgiZGlydHkgaXMgbm90IGEgc3RyaW5nLCBhYm9ydGluZyIpfWVsc2UgdGhyb3cgVCgidG9TdHJpbmcgaXMgbm90IGEgZnVuY3Rpb24iKTtpZighQ2UuaXNTdXBwb3J0ZWQpcmV0dXJuIEt0O2lmKFNvfHxyYyhMZSksQ2UucmVtb3ZlZD1bXSx0eXBlb2YgS3Q9PSJzdHJpbmciJiYoZGU9ITEpLGRlKXtpZihLdC5ub2RlTmFtZSl7bGV0IGljPUVuKEt0Lm5vZGVOYW1lKTtpZighcHRbaWNdfHxsbltpY10pdGhyb3cgVCgicm9vdCBub2RlIGlzIGZvcmJpZGRlbiBhbmQgY2Fubm90IGJlIHNhbml0aXplZCBpbi1wbGFjZSIpfX1lbHNlIGlmKEt0IGluc3RhbmNlb2YgZmUpZnQ9RUYoIjwhLS0tLT4iKSx6dD1mdC5vd25lckRvY3VtZW50LmltcG9ydE5vZGUoS3QsITApLHp0Lm5vZGVUeXBlPT09Y2UuZWxlbWVudCYmenQubm9kZU5hbWU9PT0iQk9EWSJ8fHp0Lm5vZGVOYW1lPT09IkhUTUwiP2Z0PXp0OmZ0LmFwcGVuZENoaWxkKHp0KTtlbHNle2lmKCFCbiYmIW1pJiYhUG4mJkt0LmluZGV4T2YoIjwiKT09PS0xKXJldHVybiBIZSYmQXQ/SGUuY3JlYXRlSFRNTChLdCk6S3Q7aWYoZnQ9RUYoS3QpLCFmdClyZXR1cm4gQm4/bnVsbDpBdD9PZToiIn1mdCYmZ2wmJm5jKGZ0LmZpcnN0Q2hpbGQpO2xldCBoYT1TRihkZT9LdDpmdCk7Zm9yKDtTbj1oYS5uZXh0Tm9kZSgpOylfRihTbil8fChTbi5jb250ZW50IGluc3RhbmNlb2YgeWUmJm54ZShTbi5jb250ZW50KSxORihTbikpO2lmKGRlKXJldHVybiBLdDtpZihCbil7aWYoa2kpZm9yKERhPWt0LmNhbGwoZnQub3duZXJEb2N1bWVudCk7ZnQuZmlyc3RDaGlsZDspRGEuYXBwZW5kQ2hpbGQoZnQuZmlyc3RDaGlsZCk7ZWxzZSBEYT1mdDtyZXR1cm4oVHIuc2hhZG93cm9vdHx8VHIuc2hhZG93cm9vdG1vZGUpJiYoRGE9cnQuY2FsbChJZSxEYSwhMCkpLERhfWxldCB4cz1Qbj9mdC5vdXRlckhUTUw6ZnQuaW5uZXJIVE1MO3JldHVybiBQbiYmcHRbIiFkb2N0eXBlIl0mJmZ0Lm93bmVyRG9jdW1lbnQmJmZ0Lm93bmVyRG9jdW1lbnQuZG9jdHlwZSYmZnQub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUmJl8oUSxmdC5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSkmJih4cz0iPCFET0NUWVBFICIrZnQub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUrYD4KYCt4cyksbWkmJmYoW1VlLHR0LGh0XSxpYz0+e3hzPXYoeHMsaWMsIiAiKX0pLEhlJiZBdD9IZS5jcmVhdGVIVE1MKHhzKTp4c30sQ2Uuc2V0Q29uZmlnPWZ1bmN0aW9uKCl7bGV0IEt0PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTp7fTtyYyhLdCksU289ITB9LENlLmNsZWFyQ29uZmlnPWZ1bmN0aW9uKCl7T2k9bnVsbCxTbz0hMX0sQ2UuaXNWYWxpZEF0dHJpYnV0ZT1mdW5jdGlvbihLdCxMZSxmdCl7T2l8fHJjKHt9KTtsZXQgenQ9RW4oS3QpLFNuPUVuKExlKTtyZXR1cm4gTEYoenQsU24sZnQpfSxDZS5hZGRIb29rPWZ1bmN0aW9uKEt0LExlKXt0eXBlb2YgTGU9PSJmdW5jdGlvbiImJih5dFtLdF09eXRbS3RdfHxbXSxwKHl0W0t0XSxMZSkpfSxDZS5yZW1vdmVIb29rPWZ1bmN0aW9uKEt0KXtpZih5dFtLdF0pcmV0dXJuIGQoeXRbS3RdKX0sQ2UucmVtb3ZlSG9va3M9ZnVuY3Rpb24oS3Qpe3l0W0t0XSYmKHl0W0t0XT1bXSl9LENlLnJlbW92ZUFsbEhvb2tzPWZ1bmN0aW9uKCl7eXQ9e319LENlfW8oc2UsImNyZWF0ZURPTVB1cmlmeSIpO3ZhciBrZT1zZSgpO3JldHVybiBrZX0pfSk7dmFyIF8kPXt9O3ZyKF8kLHtkZWZhdWx0OigpPT5ZNGV9KTtmdW5jdGlvbiBhYmUodCl7cmV0dXJuIFN0cmluZyh0KS5yZXBsYWNlKGliZSxlPT5uYmVbZV0pfWZ1bmN0aW9uIGNiZSh0KXtpZih0LmRlZmF1bHQpcmV0dXJuIHQuZGVmYXVsdDt2YXIgZT10LnR5cGUscj1BcnJheS5pc0FycmF5KGUpP2VbMF06ZTtpZih0eXBlb2YgciE9InN0cmluZyIpcmV0dXJuIHIuZW51bVswXTtzd2l0Y2gocil7Y2FzZSJib29sZWFuIjpyZXR1cm4hMTtjYXNlInN0cmluZyI6cmV0dXJuIiI7Y2FzZSJudW1iZXIiOnJldHVybiAwO2Nhc2Uib2JqZWN0IjpyZXR1cm57fX19ZnVuY3Rpb24gZ2JlKHQpe2Zvcih2YXIgZT0wO2U8d0MubGVuZ3RoO2UrKylmb3IodmFyIHI9d0NbZV0sbj0wO248ci5ibG9ja3MubGVuZ3RoO24rKyl7dmFyIGk9ci5ibG9ja3Nbbl07aWYodD49aVswXSYmdDw9aVsxXSlyZXR1cm4gci5uYW1lfXJldHVybiBudWxsfWZ1bmN0aW9uIElHKHQpe2Zvcih2YXIgZT0wO2U8YjQubGVuZ3RoO2UrPTIpaWYodD49YjRbZV0mJnQ8PWI0W2UrMV0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gQWJlKHQsZSl7bGNbdF09ZX1mdW5jdGlvbiBJQyh0LGUscil7aWYoIWxjW2VdKXRocm93IG5ldyBFcnJvcigiRm9udCBtZXRyaWNzIG5vdCBmb3VuZCBmb3IgZm9udDogIitlKyIuIik7dmFyIG49dC5jaGFyQ29kZUF0KDApLGk9bGNbZV1bbl07aWYoIWkmJnRbMF1pbiBuRyYmKG49bkdbdFswXV0uY2hhckNvZGVBdCgwKSxpPWxjW2VdW25dKSwhaSYmcj09PSJ0ZXh0IiYmSUcobikmJihpPWxjW2VdWzc3XSksaSlyZXR1cm57ZGVwdGg6aVswXSxoZWlnaHQ6aVsxXSxpdGFsaWM6aVsyXSxza2V3OmlbM10sd2lkdGg6aVs0XX19ZnVuY3Rpb24gX2JlKHQpe3ZhciBlO2lmKHQ+PTU/ZT0wOnQ+PTM/ZT0xOmU9MiwhY0NbZV0pe3ZhciByPWNDW2VdPXtjc3NFbVBlck11Omw0LnF1YWRbZV0vMTh9O2Zvcih2YXIgbiBpbiBsNClsNC5oYXNPd25Qcm9wZXJ0eShuKSYmKHJbbl09bDRbbl1bZV0pfXJldHVybiBjQ1tlXX1mdW5jdGlvbiBzRyh0KXtpZih0IGluc3RhbmNlb2YgRXMpcmV0dXJuIHQ7dGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBzeW1ib2xOb2RlIGJ1dCBnb3QgIitTdHJpbmcodCkrIi4iKX1mdW5jdGlvbiBSYmUodCl7aWYodCBpbnN0YW5jZW9mIG5kKXJldHVybiB0O3Rocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgc3BhbjxIdG1sRG9tTm9kZT4gYnV0IGdvdCAiK1N0cmluZyh0KSsiLiIpfWZ1bmN0aW9uICQodCxlLHIsbixpLGEpe0NuW3RdW2ldPXtmb250OmUsZ3JvdXA6cixyZXBsYWNlOm59LGEmJm4mJihDblt0XVtuXT1Dblt0XVtpXSl9ZnVuY3Rpb24gU3QodCl7Zm9yKHZhcnt0eXBlOmUsbmFtZXM6cixwcm9wczpuLGhhbmRsZXI6aSxodG1sQnVpbGRlcjphLG1hdGhtbEJ1aWxkZXI6c309dCxsPXt0eXBlOmUsbnVtQXJnczpuLm51bUFyZ3MsYXJnVHlwZXM6bi5hcmdUeXBlcyxhbGxvd2VkSW5Bcmd1bWVudDohIW4uYWxsb3dlZEluQXJndW1lbnQsYWxsb3dlZEluVGV4dDohIW4uYWxsb3dlZEluVGV4dCxhbGxvd2VkSW5NYXRoOm4uYWxsb3dlZEluTWF0aD09PXZvaWQgMD8hMDpuLmFsbG93ZWRJbk1hdGgsbnVtT3B0aW9uYWxBcmdzOm4ubnVtT3B0aW9uYWxBcmdzfHwwLGluZml4OiEhbi5pbmZpeCxwcmltaXRpdmU6ISFuLnByaW1pdGl2ZSxoYW5kbGVyOml9LHU9MDt1PHIubGVuZ3RoOysrdSlIR1tyW3VdXT1sO2UmJihhJiYoRTRbZV09YSkscyYmKFM0W2VdPXMpKX1mdW5jdGlvbiBpZCh0KXt2YXJ7dHlwZTplLGh0bWxCdWlsZGVyOnIsbWF0aG1sQnVpbGRlcjpufT10O1N0KHt0eXBlOmUsbmFtZXM6W10scHJvcHM6e251bUFyZ3M6MH0saGFuZGxlcigpe3Rocm93IG5ldyBFcnJvcigiU2hvdWxkIG5ldmVyIGJlIGNhbGxlZC4iKX0saHRtbEJ1aWxkZXI6cixtYXRobWxCdWlsZGVyOm59KX1mdW5jdGlvbiBtNCh0LGUpe3ZhciByPXB1KFsiYmFzZSJdLHQsZSksbj1wdShbInN0cnV0Il0pO3JldHVybiBuLnN0eWxlLmhlaWdodD1ndChyLmhlaWdodCtyLmRlcHRoKSxyLmRlcHRoJiYobi5zdHlsZS52ZXJ0aWNhbEFsaWduPWd0KC1yLmRlcHRoKSksci5jaGlsZHJlbi51bnNoaWZ0KG4pLHJ9ZnVuY3Rpb24gQ0ModCxlKXt2YXIgcj1udWxsO3QubGVuZ3RoPT09MSYmdFswXS50eXBlPT09InRhZyImJihyPXRbMF0udGFnLHQ9dFswXS5ib2R5KTt2YXIgbj1GaSh0LGUsInJvb3QiKSxpO24ubGVuZ3RoPT09MiYmblsxXS5oYXNDbGFzcygidGFnIikmJihpPW4ucG9wKCkpO2Zvcih2YXIgYT1bXSxzPVtdLGw9MDtsPG4ubGVuZ3RoO2wrKylpZihzLnB1c2gobltsXSksbltsXS5oYXNDbGFzcygibWJpbiIpfHxuW2xdLmhhc0NsYXNzKCJtcmVsIil8fG5bbF0uaGFzQ2xhc3MoImFsbG93YnJlYWsiKSl7Zm9yKHZhciB1PSExO2w8bi5sZW5ndGgtMSYmbltsKzFdLmhhc0NsYXNzKCJtc3BhY2UiKSYmIW5bbCsxXS5oYXNDbGFzcygibmV3bGluZSIpOylsKysscy5wdXNoKG5bbF0pLG5bbF0uaGFzQ2xhc3MoIm5vYnJlYWsiKSYmKHU9ITApO3V8fChhLnB1c2gobTQocyxlKSkscz1bXSl9ZWxzZSBuW2xdLmhhc0NsYXNzKCJuZXdsaW5lIikmJihzLnBvcCgpLHMubGVuZ3RoPjAmJihhLnB1c2gobTQocyxlKSkscz1bXSksYS5wdXNoKG5bbF0pKTtzLmxlbmd0aD4wJiZhLnB1c2gobTQocyxlKSk7dmFyIGg7cj8oaD1tNChGaShyLGUsITApKSxoLmNsYXNzZXM9WyJ0YWciXSxhLnB1c2goaCkpOmkmJmEucHVzaChpKTt2YXIgZj1wdShbImthdGV4LWh0bWwiXSxhKTtpZihmLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIiksaCl7dmFyIGQ9aC5jaGlsZHJlblswXTtkLnN0eWxlLmhlaWdodD1ndChmLmhlaWdodCtmLmRlcHRoKSxmLmRlcHRoJiYoZC5zdHlsZS52ZXJ0aWNhbEFsaWduPWd0KC1mLmRlcHRoKSl9cmV0dXJuIGZ9ZnVuY3Rpb24gWUcodCl7cmV0dXJuIG5ldyByZCh0KX1mdW5jdGlvbiBoRyh0LGUscixuLGkpe3ZhciBhPVNzKHQsciksczthLmxlbmd0aD09PTEmJmFbMF1pbnN0YW5jZW9mIGtzJiZKdC5jb250YWlucyhbIm1yb3ciLCJtdGFibGUiXSxhWzBdLnR5cGUpP3M9YVswXTpzPW5ldyBhdC5NYXRoTm9kZSgibXJvdyIsYSk7dmFyIGw9bmV3IGF0Lk1hdGhOb2RlKCJhbm5vdGF0aW9uIixbbmV3IGF0LlRleHROb2RlKGUpXSk7bC5zZXRBdHRyaWJ1dGUoImVuY29kaW5nIiwiYXBwbGljYXRpb24veC10ZXgiKTt2YXIgdT1uZXcgYXQuTWF0aE5vZGUoInNlbWFudGljcyIsW3MsbF0pLGg9bmV3IGF0Lk1hdGhOb2RlKCJtYXRoIixbdV0pO2guc2V0QXR0cmlidXRlKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiKSxuJiZoLnNldEF0dHJpYnV0ZSgiZGlzcGxheSIsImJsb2NrIik7dmFyIGY9aT8ia2F0ZXgiOiJrYXRleC1tYXRobWwiO3JldHVybiBGZS5tYWtlU3BhbihbZl0sW2hdKX1mdW5jdGlvbiBncih0LGUpe2lmKCF0fHx0LnR5cGUhPT1lKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgbm9kZSBvZiB0eXBlICIrZSsiLCBidXQgZ290ICIrKHQ/Im5vZGUgb2YgdHlwZSAiK3QudHlwZTpTdHJpbmcodCkpKTtyZXR1cm4gdH1mdW5jdGlvbiBGQyh0KXt2YXIgZT1ONCh0KTtpZighZSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIG5vZGUgb2Ygc3ltYm9sIGdyb3VwIHR5cGUsIGJ1dCBnb3QgIisodD8ibm9kZSBvZiB0eXBlICIrdC50eXBlOlN0cmluZyh0KSkpO3JldHVybiBlfWZ1bmN0aW9uIE40KHQpe3JldHVybiB0JiYodC50eXBlPT09ImF0b20ifHxJYmUuaGFzT3duUHJvcGVydHkodC50eXBlKSk/dDpudWxsfWZ1bmN0aW9uIEtHKHQsZSl7dmFyIHI9RmkodC5ib2R5LGUsITApO3JldHVybiB1NGUoW3QubWNsYXNzXSxyLGUpfWZ1bmN0aW9uIFFHKHQsZSl7dmFyIHIsbj1Tcyh0LmJvZHksZSk7cmV0dXJuIHQubWNsYXNzPT09Im1pbm5lciI/cj1uZXcgYXQuTWF0aE5vZGUoIm1wYWRkZWQiLG4pOnQubWNsYXNzPT09Im1vcmQiP3QuaXNDaGFyYWN0ZXJCb3g/KHI9blswXSxyLnR5cGU9Im1pIik6cj1uZXcgYXQuTWF0aE5vZGUoIm1pIixuKToodC5pc0NoYXJhY3RlckJveD8ocj1uWzBdLHIudHlwZT0ibW8iKTpyPW5ldyBhdC5NYXRoTm9kZSgibW8iLG4pLHQubWNsYXNzPT09Im1iaW4iPyhyLmF0dHJpYnV0ZXMubHNwYWNlPSIwLjIyZW0iLHIuYXR0cmlidXRlcy5yc3BhY2U9IjAuMjJlbSIpOnQubWNsYXNzPT09Im1wdW5jdCI/KHIuYXR0cmlidXRlcy5sc3BhY2U9IjBlbSIsci5hdHRyaWJ1dGVzLnJzcGFjZT0iMC4xN2VtIik6dC5tY2xhc3M9PT0ibW9wZW4ifHx0Lm1jbGFzcz09PSJtY2xvc2UiPyhyLmF0dHJpYnV0ZXMubHNwYWNlPSIwZW0iLHIuYXR0cmlidXRlcy5yc3BhY2U9IjBlbSIpOnQubWNsYXNzPT09Im1pbm5lciImJihyLmF0dHJpYnV0ZXMubHNwYWNlPSIwLjA1NTZlbSIsci5hdHRyaWJ1dGVzLndpZHRoPSIrMC4xMTExZW0iKSkscn1mdW5jdGlvbiBkNGUodCxlLHIpe3ZhciBuPWg0ZVt0XTtzd2l0Y2gobil7Y2FzZSJcXFxcY2RyaWdodGFycm93IjpjYXNlIlxcXFxjZGxlZnRhcnJvdyI6cmV0dXJuIHIuY2FsbEZ1bmN0aW9uKG4sW2VbMF1dLFtlWzFdXSk7Y2FzZSJcXHVwYXJyb3ciOmNhc2UiXFxkb3duYXJyb3ciOnt2YXIgaT1yLmNhbGxGdW5jdGlvbigiXFxcXGNkbGVmdCIsW2VbMF1dLFtdKSxhPXt0eXBlOiJhdG9tIix0ZXh0Om4sbW9kZToibWF0aCIsZmFtaWx5OiJyZWwifSxzPXIuY2FsbEZ1bmN0aW9uKCJcXEJpZyIsW2FdLFtdKSxsPXIuY2FsbEZ1bmN0aW9uKCJcXFxcY2RyaWdodCIsW2VbMV1dLFtdKSx1PXt0eXBlOiJvcmRncm91cCIsbW9kZToibWF0aCIsYm9keTpbaSxzLGxdfTtyZXR1cm4gci5jYWxsRnVuY3Rpb24oIlxcXFxjZHBhcmVudCIsW3VdLFtdKX1jYXNlIlxcXFxjZGxvbmdlcXVhbCI6cmV0dXJuIHIuY2FsbEZ1bmN0aW9uKCJcXFxcY2Rsb25nZXF1YWwiLFtdLFtdKTtjYXNlIlxcVmVydCI6e3ZhciBoPXt0eXBlOiJ0ZXh0b3JkIix0ZXh0OiJcXFZlcnQiLG1vZGU6Im1hdGgifTtyZXR1cm4gci5jYWxsRnVuY3Rpb24oIlxcQmlnIixbaF0sW10pfWRlZmF1bHQ6cmV0dXJue3R5cGU6InRleHRvcmQiLHRleHQ6IiAiLG1vZGU6Im1hdGgifX19ZnVuY3Rpb24gcDRlKHQpe3ZhciBlPVtdO2Zvcih0Lmd1bGxldC5iZWdpbkdyb3VwKCksdC5ndWxsZXQubWFjcm9zLnNldCgiXFxjciIsIlxcXFxcXHJlbGF4IiksdC5ndWxsZXQuYmVnaW5Hcm91cCgpOzspe2UucHVzaCh0LnBhcnNlRXhwcmVzc2lvbighMSwiXFxcXCIpKSx0Lmd1bGxldC5lbmRHcm91cCgpLHQuZ3VsbGV0LmJlZ2luR3JvdXAoKTt2YXIgcj10LmZldGNoKCkudGV4dDtpZihyPT09IiYifHxyPT09IlxcXFwiKXQuY29uc3VtZSgpO2Vsc2UgaWYocj09PSJcXGVuZCIpe2VbZS5sZW5ndGgtMV0ubGVuZ3RoPT09MCYmZS5wb3AoKTticmVha31lbHNlIHRocm93IG5ldyBsdCgiRXhwZWN0ZWQgXFxcXCBvciBcXGNyIG9yIFxcZW5kIix0Lm5leHRUb2tlbil9Zm9yKHZhciBuPVtdLGk9W25dLGE9MDthPGUubGVuZ3RoO2ErKyl7Zm9yKHZhciBzPWVbYV0sbD1mRygpLHU9MDt1PHMubGVuZ3RoO3UrKylpZighZEcoc1t1XSkpbC5ib2R5LnB1c2goc1t1XSk7ZWxzZXtuLnB1c2gobCksdSs9MTt2YXIgaD1GQyhzW3VdKS50ZXh0LGY9bmV3IEFycmF5KDIpO2lmKGZbMF09e3R5cGU6Im9yZGdyb3VwIixtb2RlOiJtYXRoIixib2R5OltdfSxmWzFdPXt0eXBlOiJvcmRncm91cCIsbW9kZToibWF0aCIsYm9keTpbXX0sISgiPXwuIi5pbmRleE9mKGgpPi0xKSlpZigiPD5BViIuaW5kZXhPZihoKT4tMSlmb3IodmFyIGQ9MDtkPDI7ZCsrKXtmb3IodmFyIHA9ITAsbT11KzE7bTxzLmxlbmd0aDttKyspe2lmKGY0ZShzW21dLGgpKXtwPSExLHU9bTticmVha31pZihkRyhzW21dKSl0aHJvdyBuZXcgbHQoIk1pc3NpbmcgYSAiK2grIiBjaGFyYWN0ZXIgdG8gY29tcGxldGUgYSBDRCBhcnJvdy4iLHNbbV0pO2ZbZF0uYm9keS5wdXNoKHNbbV0pfWlmKHApdGhyb3cgbmV3IGx0KCJNaXNzaW5nIGEgIitoKyIgY2hhcmFjdGVyIHRvIGNvbXBsZXRlIGEgQ0QgYXJyb3cuIixzW3VdKX1lbHNlIHRocm93IG5ldyBsdCgnRXhwZWN0ZWQgb25lIG9mICI8PkFWPXwuIiBhZnRlciBAJyxzW3VdKTt2YXIgZz1kNGUoaCxmLHQpLHk9e3R5cGU6InN0eWxpbmciLGJvZHk6W2ddLG1vZGU6Im1hdGgiLHN0eWxlOiJkaXNwbGF5In07bi5wdXNoKHkpLGw9ZkcoKX1hJTI9PT0wP24ucHVzaChsKTpuLnNoaWZ0KCksbj1bXSxpLnB1c2gobil9dC5ndWxsZXQuZW5kR3JvdXAoKSx0Lmd1bGxldC5lbmRHcm91cCgpO3ZhciB2PW5ldyBBcnJheShpWzBdLmxlbmd0aCkuZmlsbCh7dHlwZToiYWxpZ24iLGFsaWduOiJjIixwcmVnYXA6LjI1LHBvc3RnYXA6LjI1fSk7cmV0dXJue3R5cGU6ImFycmF5Iixtb2RlOiJtYXRoIixib2R5OmksYXJyYXlzdHJldGNoOjEsYWRkSm90OiEwLHJvd0dhcHM6W251bGxdLGNvbHM6dixjb2xTZXBhcmF0aW9uVHlwZToiQ0QiLGhMaW5lc0JlZm9yZVJvdzpuZXcgQXJyYXkoaS5sZW5ndGgrMSkuZmlsbChbXSl9fWZ1bmN0aW9uIE00KHQsZSl7dmFyIHI9TjQodCk7aWYociYmSnQuY29udGFpbnMoQTRlLHIudGV4dCkpcmV0dXJuIHI7dGhyb3cgcj9uZXcgbHQoIkludmFsaWQgZGVsaW1pdGVyICciK3IudGV4dCsiJyBhZnRlciAnIitlLmZ1bmNOYW1lKyInIix0KTpuZXcgbHQoIkludmFsaWQgZGVsaW1pdGVyIHR5cGUgJyIrdC50eXBlKyInIix0KX1mdW5jdGlvbiBtRyh0KXtpZighdC5ib2R5KXRocm93IG5ldyBFcnJvcigiQnVnOiBUaGUgbGVmdHJpZ2h0IFBhcnNlTm9kZSB3YXNuJ3QgZnVsbHkgcGFyc2VkLiIpfWZ1bmN0aW9uIHVjKHQpe2Zvcih2YXJ7dHlwZTplLG5hbWVzOnIscHJvcHM6bixoYW5kbGVyOmksaHRtbEJ1aWxkZXI6YSxtYXRobWxCdWlsZGVyOnN9PXQsbD17dHlwZTplLG51bUFyZ3M6bi5udW1BcmdzfHwwLGFsbG93ZWRJblRleHQ6ITEsbnVtT3B0aW9uYWxBcmdzOjAsaGFuZGxlcjppfSx1PTA7dTxyLmxlbmd0aDsrK3UpdSRbclt1XV09bDthJiYoRTRbZV09YSkscyYmKFM0W2VdPXMpfWZ1bmN0aW9uIGxlKHQsZSl7aCRbdF09ZX1mdW5jdGlvbiBnRyh0KXt2YXIgZT1bXTt0LmNvbnN1bWVTcGFjZXMoKTt2YXIgcj10LmZldGNoKCkudGV4dDtmb3Iocj09PSJcXHJlbGF4IiYmKHQuY29uc3VtZSgpLHQuY29uc3VtZVNwYWNlcygpLHI9dC5mZXRjaCgpLnRleHQpO3I9PT0iXFxobGluZSJ8fHI9PT0iXFxoZGFzaGxpbmUiOyl0LmNvbnN1bWUoKSxlLnB1c2gocj09PSJcXGhkYXNobGluZSIpLHQuY29uc3VtZVNwYWNlcygpLHI9dC5mZXRjaCgpLnRleHQ7cmV0dXJuIGV9ZnVuY3Rpb24gVUModCl7aWYodC5pbmRleE9mKCJlZCIpPT09LTEpcmV0dXJuIHQuaW5kZXhPZigiKiIpPT09LTF9ZnVuY3Rpb24geGgodCxlLHIpe3Zhcntoc2tpcEJlZm9yZUFuZEFmdGVyOm4sYWRkSm90OmksY29sczphLGFycmF5c3RyZXRjaDpzLGNvbFNlcGFyYXRpb25UeXBlOmwsYXV0b1RhZzp1LHNpbmdsZVJvdzpoLGVtcHR5U2luZ2xlUm93OmYsbWF4TnVtQ29sczpkLGxlcW5vOnB9PWU7aWYodC5ndWxsZXQuYmVnaW5Hcm91cCgpLGh8fHQuZ3VsbGV0Lm1hY3Jvcy5zZXQoIlxcY3IiLCJcXFxcXFxyZWxheCIpLCFzKXt2YXIgbT10Lmd1bGxldC5leHBhbmRNYWNyb0FzVGV4dCgiXFxhcnJheXN0cmV0Y2giKTtpZihtPT1udWxsKXM9MTtlbHNlIGlmKHM9cGFyc2VGbG9hdChtKSwhc3x8czwwKXRocm93IG5ldyBsdCgiSW52YWxpZCBcXGFycmF5c3RyZXRjaDogIittKX10Lmd1bGxldC5iZWdpbkdyb3VwKCk7dmFyIGc9W10seT1bZ10sdj1bXSx4PVtdLGI9dSE9bnVsbD9bXTp2b2lkIDA7ZnVuY3Rpb24gdygpe3UmJnQuZ3VsbGV0Lm1hY3Jvcy5zZXQoIlxcQGVxbnN3IiwiMSIsITApfW8odywiYmVnaW5Sb3ciKTtmdW5jdGlvbiBfKCl7YiYmKHQuZ3VsbGV0Lm1hY3Jvcy5nZXQoIlxcZGZAdGFnIik/KGIucHVzaCh0LnN1YnBhcnNlKFtuZXcgUm8oIlxcZGZAdGFnIildKSksdC5ndWxsZXQubWFjcm9zLnNldCgiXFxkZkB0YWciLHZvaWQgMCwhMCkpOmIucHVzaCghIXUmJnQuZ3VsbGV0Lm1hY3Jvcy5nZXQoIlxcQGVxbnN3Iik9PT0iMSIpKX1mb3IobyhfLCJlbmRSb3ciKSx3KCkseC5wdXNoKGdHKHQpKTs7KXt2YXIgVD10LnBhcnNlRXhwcmVzc2lvbighMSxoPyJcXGVuZCI6IlxcXFwiKTt0Lmd1bGxldC5lbmRHcm91cCgpLHQuZ3VsbGV0LmJlZ2luR3JvdXAoKSxUPXt0eXBlOiJvcmRncm91cCIsbW9kZTp0Lm1vZGUsYm9keTpUfSxyJiYoVD17dHlwZToic3R5bGluZyIsbW9kZTp0Lm1vZGUsc3R5bGU6cixib2R5OltUXX0pLGcucHVzaChUKTt2YXIgRT10LmZldGNoKCkudGV4dDtpZihFPT09IiYiKXtpZihkJiZnLmxlbmd0aD09PWQpe2lmKGh8fGwpdGhyb3cgbmV3IGx0KCJUb28gbWFueSB0YWIgY2hhcmFjdGVyczogJiIsdC5uZXh0VG9rZW4pO3Quc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KCJ0ZXh0RW52IiwiVG9vIGZldyBjb2x1bW5zIHNwZWNpZmllZCBpbiB0aGUge2FycmF5fSBjb2x1bW4gYXJndW1lbnQuIil9dC5jb25zdW1lKCl9ZWxzZSBpZihFPT09IlxcZW5kIil7XygpLGcubGVuZ3RoPT09MSYmVC50eXBlPT09InN0eWxpbmciJiZULmJvZHlbMF0uYm9keS5sZW5ndGg9PT0wJiYoeS5sZW5ndGg+MXx8IWYpJiZ5LnBvcCgpLHgubGVuZ3RoPHkubGVuZ3RoKzEmJngucHVzaChbXSk7YnJlYWt9ZWxzZSBpZihFPT09IlxcXFwiKXt0LmNvbnN1bWUoKTt2YXIgTD12b2lkIDA7dC5ndWxsZXQuZnV0dXJlKCkudGV4dCE9PSIgIiYmKEw9dC5wYXJzZVNpemVHcm91cCghMCkpLHYucHVzaChMP0wudmFsdWU6bnVsbCksXygpLHgucHVzaChnRyh0KSksZz1bXSx5LnB1c2goZyksdygpfWVsc2UgdGhyb3cgbmV3IGx0KCJFeHBlY3RlZCAmIG9yIFxcXFwgb3IgXFxjciBvciBcXGVuZCIsdC5uZXh0VG9rZW4pfXJldHVybiB0Lmd1bGxldC5lbmRHcm91cCgpLHQuZ3VsbGV0LmVuZEdyb3VwKCkse3R5cGU6ImFycmF5Iixtb2RlOnQubW9kZSxhZGRKb3Q6aSxhcnJheXN0cmV0Y2g6cyxib2R5OnksY29sczphLHJvd0dhcHM6dixoc2tpcEJlZm9yZUFuZEFmdGVyOm4saExpbmVzQmVmb3JlUm93OngsY29sU2VwYXJhdGlvblR5cGU6bCx0YWdzOmIsbGVxbm86cH19ZnVuY3Rpb24gSEModCl7cmV0dXJuIHQuc2xpY2UoMCwxKT09PSJkIj8iZGlzcGxheSI6InRleHQifWZ1bmN0aW9uIGIkKHQsZSxyKXtmb3IodmFyIG49RmkodCxlLCExKSxpPWUuc2l6ZU11bHRpcGxpZXIvci5zaXplTXVsdGlwbGllcixhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBzPW5bYV0uY2xhc3Nlcy5pbmRleE9mKCJzaXppbmciKTtzPDA/QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoblthXS5jbGFzc2VzLGUuc2l6aW5nQ2xhc3NlcyhyKSk6blthXS5jbGFzc2VzW3MrMV09PT0icmVzZXQtc2l6ZSIrZS5zaXplJiYoblthXS5jbGFzc2VzW3MrMV09InJlc2V0LXNpemUiK3Iuc2l6ZSksblthXS5oZWlnaHQqPWksblthXS5kZXB0aCo9aX1yZXR1cm4gRmUubWFrZUZyYWdtZW50KG4pfXZhciBKcyxSbyxsdCxKeGUsZWJlLHRiZSxyYmUsbmJlLGliZSxNRyxzYmUsb2JlLGxiZSxKdCx4NCxkeSxzYyxNQyx3NCxrcCxmdSxweSxObyxFcCxKYSxvYyx1YmUsaGJlLGZiZSxkYmUscGJlLG1iZSxycix3QyxiNCxUcCx5YmUsdmJlLHhiZSxiYmUsd2JlLFRiZSxrYmUsRWJlLFNiZSxyRyxDYmUscmQsbGMsbDQsbkcsY0MsTGJlLGlHLGFHLFQ0LFRDLERiZSxPRyxKbixndCx5aCxQRyxCRyxGRyxuZCxteSxrQyxOYmUsRXMsdmwsY2MsZ3ksTWJlLEliZSxDbixWLGl0LHJlLGJlLFVuLEx0LGVzLFNwLHRyLENpLGVvLEw0LHdlLGd1LF9lLHpHLG9HLHVDLGM0LGxHLGhDLHU0LGs0LGN5LGg0LHNyLFFuLE5hLHV1LG1oLEVDLHV5LGY0LGQ0LGNHLE9iZSxENCx5bCxQYmUsQmJlLEZiZSx6YmUsR2JlLE9DLFRzLEdHLCRiZSxWYmUsJEcsVWJlLEhiZSxXYmUsWWJlLHA0LFZHLFVHLHFiZSxGZSxabixlZCxodSxYYmUsamJlLEhHLEU0LFM0LEM0LGdpLHB1LEtiZSxRYmUsWmJlLEpiZSxGaSx1RyxXRyxlNGUsU0MseXksUHIsa3MsdGQsQUMsYXQsTW8sUEMsQkMsU3MsdmgseW4scUcsWEcsdDRlLHI0ZSxuNGUsaTRlLGE0ZSxzNGUsbzRlLGw0ZSxtdSx6QyxqRyxjNGUsZzQsdTRlLFI0LGg0ZSxmRyxkRyxmNGUsWkcsSkcsX0MsZSQsbTRlLHQkLGh5LEdDLHIkLGc0ZSx5NGUsbiQsZkMsZEMsTEMseTQsdjRlLHg0ZSxpJCxwQyxtQyxnQyxiNGUsYSQsdzRlLHMkLGZ5LFQ0ZSxrNGUsRTRlLG8kLFM0ZSxsJCxjJCxDNGUsZHUscEcsQTRlLCRDLFZDLHUkLGgkLEk0LGhjLF80ZSxmYyxmJCx5RyxkJCxwJCx2RyxtJCxXQyxZQyx4RyxiRyxnJCxMNGUseUMsd0cseSQsdiQsQ3AsdnksRDRlLE40ZSx4JCxSNGUsVEcsTTRlLGtHLEk0ZSx3JCx2Qyx4QyxFRyxTRyxDRyxPNGUsQUcsX0csZ2gsVCQsUDRlLEI0ZSxGNGUsejRlLERDLEc0ZSwkNGUsQTQsTkMsVjRlLExHLHFDLERHLFhDLGskLEUkLFMkLFJDLE5HLHY0LGJDLFJHLF80LGpDLEMkLFU0ZSxINGUsQSQsS0MsVzRlLFk0ZSxMJD1NKCgpPT57InVzZSBzdHJpY3QiO0pzPWNsYXNzIHR7c3RhdGlje28odGhpcywiU291cmNlTG9jYXRpb24iKX1jb25zdHJ1Y3RvcihlLHIsbil7dGhpcy5sZXhlcj12b2lkIDAsdGhpcy5zdGFydD12b2lkIDAsdGhpcy5lbmQ9dm9pZCAwLHRoaXMubGV4ZXI9ZSx0aGlzLnN0YXJ0PXIsdGhpcy5lbmQ9bn1zdGF0aWMgcmFuZ2UoZSxyKXtyZXR1cm4gcj8hZXx8IWUubG9jfHwhci5sb2N8fGUubG9jLmxleGVyIT09ci5sb2MubGV4ZXI/bnVsbDpuZXcgdChlLmxvYy5sZXhlcixlLmxvYy5zdGFydCxyLmxvYy5lbmQpOmUmJmUubG9jfX0sUm89Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJUb2tlbiIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy50ZXh0PXZvaWQgMCx0aGlzLmxvYz12b2lkIDAsdGhpcy5ub2V4cGFuZD12b2lkIDAsdGhpcy50cmVhdEFzUmVsYXg9dm9pZCAwLHRoaXMudGV4dD1lLHRoaXMubG9jPXJ9cmFuZ2UoZSxyKXtyZXR1cm4gbmV3IHQocixKcy5yYW5nZSh0aGlzLGUpKX19LGx0PWNsYXNzIHR7c3RhdGlje28odGhpcywiUGFyc2VFcnJvciIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy5uYW1lPXZvaWQgMCx0aGlzLnBvc2l0aW9uPXZvaWQgMCx0aGlzLmxlbmd0aD12b2lkIDAsdGhpcy5yYXdNZXNzYWdlPXZvaWQgMDt2YXIgbj0iS2FUZVggcGFyc2UgZXJyb3I6ICIrZSxpLGEscz1yJiZyLmxvYztpZihzJiZzLnN0YXJ0PD1zLmVuZCl7dmFyIGw9cy5sZXhlci5pbnB1dDtpPXMuc3RhcnQsYT1zLmVuZCxpPT09bC5sZW5ndGg/bis9IiBhdCBlbmQgb2YgaW5wdXQ6ICI6bis9IiBhdCBwb3NpdGlvbiAiKyhpKzEpKyI6ICI7dmFyIHU9bC5zbGljZShpLGEpLnJlcGxhY2UoL1teXS9nLCIkJlx1MDMzMiIpLGg7aT4xNT9oPSJcdTIwMjYiK2wuc2xpY2UoaS0xNSxpKTpoPWwuc2xpY2UoMCxpKTt2YXIgZjthKzE1PGwubGVuZ3RoP2Y9bC5zbGljZShhLGErMTUpKyJcdTIwMjYiOmY9bC5zbGljZShhKSxuKz1oK3UrZn12YXIgZD1uZXcgRXJyb3Iobik7cmV0dXJuIGQubmFtZT0iUGFyc2VFcnJvciIsZC5fX3Byb3RvX189dC5wcm90b3R5cGUsZC5wb3NpdGlvbj1pLGkhPW51bGwmJmEhPW51bGwmJihkLmxlbmd0aD1hLWkpLGQucmF3TWVzc2FnZT1lLGR9fTtsdC5wcm90b3R5cGUuX19wcm90b19fPUVycm9yLnByb3RvdHlwZTtKeGU9byhmdW5jdGlvbihlLHIpe3JldHVybiBlLmluZGV4T2YocikhPT0tMX0sImNvbnRhaW5zIiksZWJlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZT09PXZvaWQgMD9yOmV9LCJkZWZsdCIpLHRiZT0vKFtBLVpdKS9nLHJiZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UodGJlLCItJDEiKS50b0xvd2VyQ2FzZSgpfSwiaHlwaGVuYXRlIiksbmJlPXsiJiI6IiZhbXA7IiwiPiI6IiZndDsiLCI8IjoiJmx0OyIsJyInOiImcXVvdDsiLCInIjoiJiN4Mjc7In0saWJlPS9bJj48IiddL2c7byhhYmUsImVzY2FwZSIpO01HPW8oZnVuY3Rpb24gdChlKXtyZXR1cm4gZS50eXBlPT09Im9yZGdyb3VwInx8ZS50eXBlPT09ImNvbG9yIj9lLmJvZHkubGVuZ3RoPT09MT90KGUuYm9keVswXSk6ZTplLnR5cGU9PT0iZm9udCI/dChlLmJvZHkpOmV9LCJnZXRCYXNlRWxlbSIpLHNiZT1vKGZ1bmN0aW9uKGUpe3ZhciByPU1HKGUpO3JldHVybiByLnR5cGU9PT0ibWF0aG9yZCJ8fHIudHlwZT09PSJ0ZXh0b3JkInx8ci50eXBlPT09ImF0b20ifSwiaXNDaGFyYWN0ZXJCb3giKSxvYmU9byhmdW5jdGlvbihlKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIG5vbi1udWxsLCBidXQgZ290ICIrU3RyaW5nKGUpKTtyZXR1cm4gZX0sImFzc2VydCIpLGxiZT1vKGZ1bmN0aW9uKGUpe3ZhciByPS9eW1x4MDAtXHgyMF0qKFteXFwvIz9dKj8pKDp8JiMwKjU4fCYjeDAqM2F8JmNvbG9uKS9pLmV4ZWMoZSk7cmV0dXJuIHI/clsyXSE9PSI6Inx8IS9eW2EtekEtWl1bYS16QS1aMC05K1wtLl0qJC8udGVzdChyWzFdKT9udWxsOnJbMV0udG9Mb3dlckNhc2UoKToiX3JlbGF0aXZlIn0sInByb3RvY29sRnJvbVVybCIpLEp0PXtjb250YWluczpKeGUsZGVmbHQ6ZWJlLGVzY2FwZTphYmUsaHlwaGVuYXRlOnJiZSxnZXRCYXNlRWxlbTpNRyxpc0NoYXJhY3RlckJveDpzYmUscHJvdG9jb2xGcm9tVXJsOmxiZX0seDQ9e2Rpc3BsYXlNb2RlOnt0eXBlOiJib29sZWFuIixkZXNjcmlwdGlvbjoiUmVuZGVyIG1hdGggaW4gZGlzcGxheSBtb2RlLCB3aGljaCBwdXRzIHRoZSBtYXRoIGluIGRpc3BsYXkgc3R5bGUgKHNvIFxcaW50IGFuZCBcXHN1bSBhcmUgbGFyZ2UsIGZvciBleGFtcGxlKSwgYW5kIGNlbnRlcnMgdGhlIG1hdGggb24gdGhlIHBhZ2Ugb24gaXRzIG93biBsaW5lLiIsY2xpOiItZCwgLS1kaXNwbGF5LW1vZGUifSxvdXRwdXQ6e3R5cGU6e2VudW06WyJodG1sQW5kTWF0aG1sIiwiaHRtbCIsIm1hdGhtbCJdfSxkZXNjcmlwdGlvbjoiRGV0ZXJtaW5lcyB0aGUgbWFya3VwIGxhbmd1YWdlIG9mIHRoZSBvdXRwdXQuIixjbGk6Ii1GLCAtLWZvcm1hdCA8dHlwZT4ifSxsZXFubzp7dHlwZToiYm9vbGVhbiIsZGVzY3JpcHRpb246IlJlbmRlciBkaXNwbGF5IG1hdGggaW4gbGVxbm8gc3R5bGUgKGxlZnQtanVzdGlmaWVkIHRhZ3MpLiJ9LGZsZXFuOnt0eXBlOiJib29sZWFuIixkZXNjcmlwdGlvbjoiUmVuZGVyIGRpc3BsYXkgbWF0aCBmbHVzaCBsZWZ0LiJ9LHRocm93T25FcnJvcjp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMCxjbGk6Ii10LCAtLW5vLXRocm93LW9uLWVycm9yIixjbGlEZXNjcmlwdGlvbjoiUmVuZGVyIGVycm9ycyAoaW4gdGhlIGNvbG9yIGdpdmVuIGJ5IC0tZXJyb3ItY29sb3IpIGluc3RlYWQgb2YgdGhyb3dpbmcgYSBQYXJzZUVycm9yIGV4Y2VwdGlvbiB3aGVuIGVuY291bnRlcmluZyBhbiBlcnJvci4ifSxlcnJvckNvbG9yOnt0eXBlOiJzdHJpbmciLGRlZmF1bHQ6IiNjYzAwMDAiLGNsaToiLWMsIC0tZXJyb3ItY29sb3IgPGNvbG9yPiIsY2xpRGVzY3JpcHRpb246IkEgY29sb3Igc3RyaW5nIGdpdmVuIGluIHRoZSBmb3JtYXQgJ3JnYicgb3IgJ3JyZ2diYicgKG5vICMpLiBUaGlzIG9wdGlvbiBkZXRlcm1pbmVzIHRoZSBjb2xvciBvZiBlcnJvcnMgcmVuZGVyZWQgYnkgdGhlIC10IG9wdGlvbi4iLGNsaVByb2Nlc3NvcjpvKHQ9PiIjIit0LCJjbGlQcm9jZXNzb3IiKX0sbWFjcm9zOnt0eXBlOiJvYmplY3QiLGNsaToiLW0sIC0tbWFjcm8gPGRlZj4iLGNsaURlc2NyaXB0aW9uOiJEZWZpbmUgY3VzdG9tIG1hY3JvIG9mIHRoZSBmb3JtICdcXGZvbzpleHBhbnNpb24nICh1c2UgbXVsdGlwbGUgLW0gYXJndW1lbnRzIGZvciBtdWx0aXBsZSBtYWNyb3MpLiIsY2xpRGVmYXVsdDpbXSxjbGlQcm9jZXNzb3I6bygodCxlKT0+KGUucHVzaCh0KSxlKSwiY2xpUHJvY2Vzc29yIil9LG1pblJ1bGVUaGlja25lc3M6e3R5cGU6Im51bWJlciIsZGVzY3JpcHRpb246IlNwZWNpZmllcyBhIG1pbmltdW0gdGhpY2tuZXNzLCBpbiBlbXMsIGZvciBmcmFjdGlvbiBsaW5lcywgYFxcc3FydGAgdG9wIGxpbmVzLCBge2FycmF5fWAgdmVydGljYWwgbGluZXMsIGBcXGhsaW5lYCwgYFxcaGRhc2hsaW5lYCwgYFxcdW5kZXJsaW5lYCwgYFxcb3ZlcmxpbmVgLCBhbmQgdGhlIGJvcmRlcnMgb2YgYFxcZmJveGAsIGBcXGJveGVkYCwgYW5kIGBcXGZjb2xvcmJveGAuIixwcm9jZXNzb3I6byh0PT5NYXRoLm1heCgwLHQpLCJwcm9jZXNzb3IiKSxjbGk6Ii0tbWluLXJ1bGUtdGhpY2tuZXNzIDxzaXplPiIsY2xpUHJvY2Vzc29yOnBhcnNlRmxvYXR9LGNvbG9ySXNUZXh0Q29sb3I6e3R5cGU6ImJvb2xlYW4iLGRlc2NyaXB0aW9uOiJNYWtlcyBcXGNvbG9yIGJlaGF2ZSBsaWtlIExhVGVYJ3MgMi1hcmd1bWVudCBcXHRleHRjb2xvciwgaW5zdGVhZCBvZiBMYVRlWCdzIG9uZS1hcmd1bWVudCBcXGNvbG9yIG1vZGUgY2hhbmdlLiIsY2xpOiItYiwgLS1jb2xvci1pcy10ZXh0LWNvbG9yIn0sc3RyaWN0Ont0eXBlOlt7ZW51bTpbIndhcm4iLCJpZ25vcmUiLCJlcnJvciJdfSwiYm9vbGVhbiIsImZ1bmN0aW9uIl0sZGVzY3JpcHRpb246IlR1cm4gb24gc3RyaWN0IC8gTGFUZVggZmFpdGhmdWxuZXNzIG1vZGUsIHdoaWNoIHRocm93cyBhbiBlcnJvciBpZiB0aGUgaW5wdXQgdXNlcyBmZWF0dXJlcyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IExhVGVYLiIsY2xpOiItUywgLS1zdHJpY3QiLGNsaURlZmF1bHQ6ITF9LHRydXN0Ont0eXBlOlsiYm9vbGVhbiIsImZ1bmN0aW9uIl0sZGVzY3JpcHRpb246IlRydXN0IHRoZSBpbnB1dCwgZW5hYmxpbmcgYWxsIEhUTUwgZmVhdHVyZXMgc3VjaCBhcyBcXHVybC4iLGNsaToiLVQsIC0tdHJ1c3QifSxtYXhTaXplOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MS8wLGRlc2NyaXB0aW9uOiJJZiBub24temVybywgYWxsIHVzZXItc3BlY2lmaWVkIHNpemVzLCBlLmcuIGluIFxccnVsZXs1MDBlbX17NTAwZW19LCB3aWxsIGJlIGNhcHBlZCB0byBtYXhTaXplIGVtcy4gT3RoZXJ3aXNlLCBlbGVtZW50cyBhbmQgc3BhY2VzIGNhbiBiZSBhcmJpdHJhcmlseSBsYXJnZSIscHJvY2Vzc29yOm8odD0+TWF0aC5tYXgoMCx0KSwicHJvY2Vzc29yIiksY2xpOiItcywgLS1tYXgtc2l6ZSA8bj4iLGNsaVByb2Nlc3NvcjpwYXJzZUludH0sbWF4RXhwYW5kOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MWUzLGRlc2NyaXB0aW9uOiJMaW1pdCB0aGUgbnVtYmVyIG9mIG1hY3JvIGV4cGFuc2lvbnMgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIsIHRvIHByZXZlbnQgZS5nLiBpbmZpbml0ZSBtYWNybyBsb29wcy4gSWYgc2V0IHRvIEluZmluaXR5LCB0aGUgbWFjcm8gZXhwYW5kZXIgd2lsbCB0cnkgdG8gZnVsbHkgZXhwYW5kIGFzIGluIExhVGVYLiIscHJvY2Vzc29yOm8odD0+TWF0aC5tYXgoMCx0KSwicHJvY2Vzc29yIiksY2xpOiItZSwgLS1tYXgtZXhwYW5kIDxuPiIsY2xpUHJvY2Vzc29yOm8odD0+dD09PSJJbmZpbml0eSI/MS8wOnBhcnNlSW50KHQpLCJjbGlQcm9jZXNzb3IiKX0sZ2xvYmFsR3JvdXA6e3R5cGU6ImJvb2xlYW4iLGNsaTohMX19O28oY2JlLCJnZXREZWZhdWx0VmFsdWUiKTtkeT1jbGFzc3tzdGF0aWN7byh0aGlzLCJTZXR0aW5ncyIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuZGlzcGxheU1vZGU9dm9pZCAwLHRoaXMub3V0cHV0PXZvaWQgMCx0aGlzLmxlcW5vPXZvaWQgMCx0aGlzLmZsZXFuPXZvaWQgMCx0aGlzLnRocm93T25FcnJvcj12b2lkIDAsdGhpcy5lcnJvckNvbG9yPXZvaWQgMCx0aGlzLm1hY3Jvcz12b2lkIDAsdGhpcy5taW5SdWxlVGhpY2tuZXNzPXZvaWQgMCx0aGlzLmNvbG9ySXNUZXh0Q29sb3I9dm9pZCAwLHRoaXMuc3RyaWN0PXZvaWQgMCx0aGlzLnRydXN0PXZvaWQgMCx0aGlzLm1heFNpemU9dm9pZCAwLHRoaXMubWF4RXhwYW5kPXZvaWQgMCx0aGlzLmdsb2JhbEdyb3VwPXZvaWQgMCxlPWV8fHt9O2Zvcih2YXIgciBpbiB4NClpZih4NC5oYXNPd25Qcm9wZXJ0eShyKSl7dmFyIG49eDRbcl07dGhpc1tyXT1lW3JdIT09dm9pZCAwP24ucHJvY2Vzc29yP24ucHJvY2Vzc29yKGVbcl0pOmVbcl06Y2JlKG4pfX1yZXBvcnROb25zdHJpY3QoZSxyLG4pe3ZhciBpPXRoaXMuc3RyaWN0O2lmKHR5cGVvZiBpPT0iZnVuY3Rpb24iJiYoaT1pKGUscixuKSksISghaXx8aT09PSJpZ25vcmUiKSl7aWYoaT09PSEwfHxpPT09ImVycm9yIil0aHJvdyBuZXcgbHQoIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvICdlcnJvcic6ICIrKHIrIiBbIitlKyJdIiksbik7aT09PSJ3YXJuIj90eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybigiTGFUZVgtaW5jb21wYXRpYmxlIGlucHV0IGFuZCBzdHJpY3QgbW9kZSBpcyBzZXQgdG8gJ3dhcm4nOiAiKyhyKyIgWyIrZSsiXSIpKTp0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybigiTGFUZVgtaW5jb21wYXRpYmxlIGlucHV0IGFuZCBzdHJpY3QgbW9kZSBpcyBzZXQgdG8gIisoInVucmVjb2duaXplZCAnIitpKyInOiAiK3IrIiBbIitlKyJdIikpfX11c2VTdHJpY3RCZWhhdmlvcihlLHIsbil7dmFyIGk9dGhpcy5zdHJpY3Q7aWYodHlwZW9mIGk9PSJmdW5jdGlvbiIpdHJ5e2k9aShlLHIsbil9Y2F0Y2h7aT0iZXJyb3IifXJldHVybiFpfHxpPT09Imlnbm9yZSI/ITE6aT09PSEwfHxpPT09ImVycm9yIj8hMDppPT09Indhcm4iPyh0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybigiTGFUZVgtaW5jb21wYXRpYmxlIGlucHV0IGFuZCBzdHJpY3QgbW9kZSBpcyBzZXQgdG8gJ3dhcm4nOiAiKyhyKyIgWyIrZSsiXSIpKSwhMSk6KHR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuKCJMYVRlWC1pbmNvbXBhdGlibGUgaW5wdXQgYW5kIHN0cmljdCBtb2RlIGlzIHNldCB0byAiKygidW5yZWNvZ25pemVkICciK2krIic6ICIrcisiIFsiK2UrIl0iKSksITEpfWlzVHJ1c3RlZChlKXtpZihlLnVybCYmIWUucHJvdG9jb2wpe3ZhciByPUp0LnByb3RvY29sRnJvbVVybChlLnVybCk7aWYocj09bnVsbClyZXR1cm4hMTtlLnByb3RvY29sPXJ9dmFyIG49dHlwZW9mIHRoaXMudHJ1c3Q9PSJmdW5jdGlvbiI/dGhpcy50cnVzdChlKTp0aGlzLnRydXN0O3JldHVybiEhbn19LHNjPWNsYXNze3N0YXRpY3tvKHRoaXMsIlN0eWxlIil9Y29uc3RydWN0b3IoZSxyLG4pe3RoaXMuaWQ9dm9pZCAwLHRoaXMuc2l6ZT12b2lkIDAsdGhpcy5jcmFtcGVkPXZvaWQgMCx0aGlzLmlkPWUsdGhpcy5zaXplPXIsdGhpcy5jcmFtcGVkPW59c3VwKCl7cmV0dXJuIG9jW3ViZVt0aGlzLmlkXV19c3ViKCl7cmV0dXJuIG9jW2hiZVt0aGlzLmlkXV19ZnJhY051bSgpe3JldHVybiBvY1tmYmVbdGhpcy5pZF1dfWZyYWNEZW4oKXtyZXR1cm4gb2NbZGJlW3RoaXMuaWRdXX1jcmFtcCgpe3JldHVybiBvY1twYmVbdGhpcy5pZF1dfXRleHQoKXtyZXR1cm4gb2NbbWJlW3RoaXMuaWRdXX1pc1RpZ2h0KCl7cmV0dXJuIHRoaXMuc2l6ZT49Mn19LE1DPTAsdzQ9MSxrcD0yLGZ1PTMscHk9NCxObz01LEVwPTYsSmE9NyxvYz1bbmV3IHNjKE1DLDAsITEpLG5ldyBzYyh3NCwwLCEwKSxuZXcgc2Moa3AsMSwhMSksbmV3IHNjKGZ1LDEsITApLG5ldyBzYyhweSwyLCExKSxuZXcgc2MoTm8sMiwhMCksbmV3IHNjKEVwLDMsITEpLG5ldyBzYyhKYSwzLCEwKV0sdWJlPVtweSxObyxweSxObyxFcCxKYSxFcCxKYV0saGJlPVtObyxObyxObyxObyxKYSxKYSxKYSxKYV0sZmJlPVtrcCxmdSxweSxObyxFcCxKYSxFcCxKYV0sZGJlPVtmdSxmdSxObyxObyxKYSxKYSxKYSxKYV0scGJlPVt3NCx3NCxmdSxmdSxObyxObyxKYSxKYV0sbWJlPVtNQyx3NCxrcCxmdSxrcCxmdSxrcCxmdV0scnI9e0RJU1BMQVk6b2NbTUNdLFRFWFQ6b2Nba3BdLFNDUklQVDpvY1tweV0sU0NSSVBUU0NSSVBUOm9jW0VwXX0sd0M9W3tuYW1lOiJsYXRpbiIsYmxvY2tzOltbMjU2LDU5MV0sWzc2OCw4NzldXX0se25hbWU6ImN5cmlsbGljIixibG9ja3M6W1sxMDI0LDEyNzldXX0se25hbWU6ImFybWVuaWFuIixibG9ja3M6W1sxMzI4LDE0MjNdXX0se25hbWU6ImJyYWhtaWMiLGJsb2NrczpbWzIzMDQsNDI1NV1dfSx7bmFtZToiZ2VvcmdpYW4iLGJsb2NrczpbWzQyNTYsNDM1MV1dfSx7bmFtZToiY2prIixibG9ja3M6W1sxMjI4OCwxMjU0M10sWzE5OTY4LDQwODc5XSxbNjUyODAsNjUzNzZdXX0se25hbWU6Imhhbmd1bCIsYmxvY2tzOltbNDQwMzIsNTUyMTVdXX1dO28oZ2JlLCJzY3JpcHRGcm9tQ29kZXBvaW50Iik7YjQ9W107d0MuZm9yRWFjaCh0PT50LmJsb2Nrcy5mb3JFYWNoKGU9PmI0LnB1c2goLi4uZSkpKTtvKElHLCJzdXBwb3J0ZWRDb2RlcG9pbnQiKTtUcD04MCx5YmU9byhmdW5jdGlvbihlLHIpe3JldHVybiJNOTUsIisoNjIyK2UrcikrYApjLTIuNywwLC03LjE3LC0yLjcsLTEzLjUsLThjLTUuOCwtNS4zLC05LjUsLTEwLC05LjUsLTE0CmMwLC0yLDAuMywtMy4zLDEsLTRjMS4zLC0yLjcsMjMuODMsLTIwLjcsNjcuNSwtNTQKYzQ0LjIsLTMzLjMsNjUuOCwtNTAuMyw2Ni41LC01MWMxLjMsLTEuMywzLC0yLDUsLTJjNC43LDAsOC43LDMuMywxMiwxMApzMTczLDM3OCwxNzMsMzc4YzAuNywwLDM1LjMsLTcxLDEwNCwtMjEzYzY4LjcsLTE0MiwxMzcuNSwtMjg1LDIwNi41LC00MjkKYzY5LC0xNDQsMTA0LjUsLTIxNy43LDEwNi41LC0yMjEKbGArZS8yLjA3NSsiIC0iK2UrYApjNS4zLC05LjMsMTIsLTE0LDIwLC0xNApINDAwMDAwdmArKDQwK2UpK2BIODQ1LjI3MjQKcy0yMjUuMjcyLDQ2NywtMjI1LjI3Miw0NjdzLTIzNSw0ODYsLTIzNSw0ODZjLTIuNyw0LjcsLTksNywtMTksNwpjLTYsMCwtMTAsLTEsLTEyLC0zcy0xOTQsLTQyMiwtMTk0LC00MjJzLTY1LDQ3LC02NSw0N3oKTWArKDgzNCtlKSsiICIrcisiaDQwMDAwMHYiKyg0MCtlKSsiaC00MDAwMDB6In0sInNxcnRNYWluIiksdmJlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4iTTI2MywiKyg2MDErZStyKStgYzAuNywwLDE4LDM5LjcsNTIsMTE5CmMzNCw3OS4zLDY4LjE2NywxNTguNywxMDIuNSwyMzhjMzQuMyw3OS4zLDUxLjgsMTE5LjMsNTIuNSwxMjAKYzM0MCwtNzA0LjcsNTEwLjcsLTEwNjAuMyw1MTIsLTEwNjcKbGArZS8yLjA4NCsiIC0iK2UrYApjNC43LC03LjMsMTEsLTExLDE5LC0xMQpINDAwMDB2YCsoNDArZSkrYEgxMDEyLjMKcy0yNzEuMyw1NjcsLTI3MS4zLDU2N2MtMzguNyw4MC43LC04NCwxNzUsLTEzNiwyODNjLTUyLDEwOCwtODkuMTY3LDE4NS4zLC0xMTEuNSwyMzIKYy0yMi4zLDQ2LjcsLTMzLjgsNzAuMywtMzQuNSw3MWMtNC43LDQuNywtMTIuMyw3LC0yMyw3cy0xMiwtMSwtMTIsLTEKcy0xMDksLTI1MywtMTA5LC0yNTNjLTcyLjcsLTE2OCwtMTA5LjMsLTI1MiwtMTEwLC0yNTJjLTEwLjcsOCwtMjIsMTYuNywtMzQsMjYKYy0yMiwxNy4zLC0zMy4zLDI2LC0zNCwyNnMtMjYsLTI2LC0yNiwtMjZzNzYsLTU5LDc2LC01OXM3NiwtNjAsNzYsLTYwegpNYCsoMTAwMStlKSsiICIrcisiaDQwMDAwMHYiKyg0MCtlKSsiaC00MDAwMDB6In0sInNxcnRTaXplMSIpLHhiZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIk05ODMgIisoMTArZStyKStgCmxgK2UvMy4xMysiIC0iK2UrYApjNCwtNi43LDEwLC0xMCwxOCwtMTAgSDQwMDAwMHZgKyg0MCtlKStgCkgxMDEzLjFzLTgzLjQsMjY4LC0yNjQuMSw4NDBjLTE4MC43LDU3MiwtMjc3LDg3Ni4zLC0yODksOTEzYy00LjcsNC43LC0xMi43LDcsLTI0LDcKcy0xMiwwLC0xMiwwYy0xLjMsLTMuMywtMy43LC0xMS43LC03LC0yNWMtMzUuMywtMTI1LjMsLTEwNi43LC0zNzMuMywtMjE0LC03NDQKYy0xMCwxMiwtMjEsMjUsLTMzLDM5cy0zMiwzOSwtMzIsMzljLTYsLTUuMywtMTUsLTE0LC0yNywtMjZzMjUsLTMwLDI1LC0zMApjMjYuNywtMzIuNyw1MiwtNjMsNzYsLTkxczUyLC02MCw1MiwtNjBzMjA4LDcyMiwyMDgsNzIyCmM1NiwtMTc1LjMsMTI2LjMsLTM5Ny4zLDIxMSwtNjY2Yzg0LjcsLTI2OC43LDE1My44LC00ODguMiwyMDcuNSwtNjU4LjUKYzUzLjcsLTE3MC4zLDg0LjUsLTI2Ni44LDkyLjUsLTI4OS41egpNYCsoMTAwMStlKSsiICIrcisiaDQwMDAwMHYiKyg0MCtlKSsiaC00MDAwMDB6In0sInNxcnRTaXplMiIpLGJiZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIk00MjQsIisoMjM5OCtlK3IpK2AKYy0xLjMsLTAuNywtMzguNSwtMTcyLC0xMTEuNSwtNTE0Yy03MywtMzQyLC0xMDkuOCwtNTEzLjMsLTExMC41LC01MTQKYzAsLTIsLTEwLjcsMTQuMywtMzIsNDljLTQuNyw3LjMsLTkuOCwxNS43LC0xNS41LDI1Yy01LjcsOS4zLC05LjgsMTYsLTEyLjUsMjAKcy01LDcsLTUsN2MtNCwtMy4zLC04LjMsLTcuNywtMTMsLTEzcy0xMywtMTMsLTEzLC0xM3M3NiwtMTIyLDc2LC0xMjJzNzcsLTEyMSw3NywtMTIxCnMyMDksOTY4LDIwOSw5NjhjMCwtMiw4NC43LC0zNjEuNywyNTQsLTEwNzljMTY5LjMsLTcxNy4zLDI1NC43LC0xMDc3LjcsMjU2LC0xMDgxCmxgK2UvNC4yMjMrIiAtIitlK2BjNCwtNi43LDEwLC0xMCwxOCwtMTAgSDQwMDAwMAp2YCsoNDArZSkrYEgxMDE0LjYKcy04Ny4zLDM3OC43LC0yNzIuNiwxMTY2Yy0xODUuMyw3ODcuMywtMjc5LjMsMTE4Mi4zLC0yODIsMTE4NQpjLTIsNiwtMTAsOSwtMjQsOQpjLTgsMCwtMTIsLTAuNywtMTIsLTJ6IE1gKygxMDAxK2UpKyIgIityK2AKaDQwMDAwMHZgKyg0MCtlKSsiaC00MDAwMDB6In0sInNxcnRTaXplMyIpLHdiZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIk00NzMsIisoMjcxMytlK3IpK2AKYzMzOS4zLC0xNzk5LjMsNTA5LjMsLTI3MDAsNTEwLC0yNzAyIGxgK2UvNS4yOTgrIiAtIitlK2AKYzMuMywtNy4zLDkuMywtMTEsMTgsLTExIEg0MDAwMDB2YCsoNDArZSkrYEgxMDE3LjcKcy05MC41LDQ3OCwtMjc2LjIsMTQ2NmMtMTg1LjcsOTg4LC0yNzkuNSwxNDgzLC0yODEuNSwxNDg1Yy0yLDYsLTEwLDksLTI0LDkKYy04LDAsLTEyLC0wLjcsLTEyLC0yYzAsLTEuMywtNS4zLC0zMiwtMTYsLTkyYy01MC43LC0yOTMuMywtMTE5LjcsLTY5My4zLC0yMDcsLTEyMDAKYzAsLTEuMywtNS4zLDguNywtMTYsMzBjLTEwLjcsMjEuMywtMjEuMyw0Mi43LC0zMiw2NHMtMTYsMzMsLTE2LDMzcy0yNiwtMjYsLTI2LC0yNgpzNzYsLTE1Myw3NiwtMTUzczc3LC0xNTEsNzcsLTE1MWMwLjcsMC43LDM1LjcsMjAyLDEwNSw2MDRjNjcuMyw0MDAuNywxMDIsNjAyLjcsMTA0LAo2MDZ6TWArKDEwMDErZSkrIiAiK3IrImg0MDAwMDB2IisoNDArZSkrIkgxMDE3Ljd6In0sInNxcnRTaXplNCIpLFRiZT1vKGZ1bmN0aW9uKGUpe3ZhciByPWUvMjtyZXR1cm4iTTQwMDAwMCAiK2UrIiBIMCBMIityKyIgMCBsNjUgNDUgTDE0NSAiKyhlLTgwKSsiIEg0MDAwMDB6In0sInBoYXNlUGF0aCIpLGtiZT1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1uLTU0LXItZTtyZXR1cm4iTTcwMiAiKyhlK3IpKyJINDAwMDAwIisoNDArZSkrYApINzQydmAraStgbC00IDQtNCA0Yy0uNjY3LjcgLTIgMS41LTQgMi41cy00LjE2NyAxLjgzMy02LjUgMi41LTUuNSAxLTkuNSAxCmgtMTJsLTI4LTg0Yy0xNi42NjctNTItOTYuNjY3IC0yOTQuMzMzLTI0MC03MjdsLTIxMiAtNjQzIC04NSAxNzAKYy00LTMuMzMzLTguMzMzLTcuNjY3LTEzIC0xM2wtMTMtMTNsNzctMTU1IDc3LTE1NmM2NiAxOTkuMzMzIDEzOSA0MTkuNjY3CjIxOSA2NjEgbDIxOCA2NjF6TTcwMiBgK3IrIkg0MDAwMDB2IisoNDArZSkrIkg3NDJ6In0sInNxcnRUYWxsIiksRWJlPW8oZnVuY3Rpb24oZSxyLG4pe3I9MWUzKnI7dmFyIGk9IiI7c3dpdGNoKGUpe2Nhc2Uic3FydE1haW4iOmk9eWJlKHIsVHApO2JyZWFrO2Nhc2Uic3FydFNpemUxIjppPXZiZShyLFRwKTticmVhaztjYXNlInNxcnRTaXplMiI6aT14YmUocixUcCk7YnJlYWs7Y2FzZSJzcXJ0U2l6ZTMiOmk9YmJlKHIsVHApO2JyZWFrO2Nhc2Uic3FydFNpemU0IjppPXdiZShyLFRwKTticmVhaztjYXNlInNxcnRUYWxsIjppPWtiZShyLFRwLG4pfXJldHVybiBpfSwic3FydFBhdGgiKSxTYmU9byhmdW5jdGlvbihlLHIpe3N3aXRjaChlKXtjYXNlIlx1MjM5QyI6cmV0dXJuIk0yOTEgMCBINDE3IFYiK3IrIiBIMjkxeiBNMjkxIDAgSDQxNyBWIityKyIgSDI5MXoiO2Nhc2UiXHUyMjIzIjpyZXR1cm4iTTE0NSAwIEgxODggViIrcisiIEgxNDV6IE0xNDUgMCBIMTg4IFYiK3IrIiBIMTQ1eiI7Y2FzZSJcdTIyMjUiOnJldHVybiJNMTQ1IDAgSDE4OCBWIityKyIgSDE0NXogTTE0NSAwIEgxODggViIrcisiIEgxNDV6IisoIk0zNjcgMCBINDEwIFYiK3IrIiBIMzY3eiBNMzY3IDAgSDQxMCBWIityKyIgSDM2N3oiKTtjYXNlIlx1MjM5RiI6cmV0dXJuIk00NTcgMCBINTgzIFYiK3IrIiBINDU3eiBNNDU3IDAgSDU4MyBWIityKyIgSDQ1N3oiO2Nhc2UiXHUyM0EyIjpyZXR1cm4iTTMxOSAwIEg0MDMgViIrcisiIEgzMTl6IE0zMTkgMCBINDAzIFYiK3IrIiBIMzE5eiI7Y2FzZSJcdTIzQTUiOnJldHVybiJNMjYzIDAgSDM0NyBWIityKyIgSDI2M3ogTTI2MyAwIEgzNDcgViIrcisiIEgyNjN6IjtjYXNlIlx1MjNBQSI6cmV0dXJuIk0zODQgMCBINTA0IFYiK3IrIiBIMzg0eiBNMzg0IDAgSDUwNCBWIityKyIgSDM4NHoiO2Nhc2UiXHUyM0QwIjpyZXR1cm4iTTMxMiAwIEgzNTUgViIrcisiIEgzMTJ6IE0zMTIgMCBIMzU1IFYiK3IrIiBIMzEyeiI7Y2FzZSJcdTIwMTYiOnJldHVybiJNMjU3IDAgSDMwMCBWIityKyIgSDI1N3ogTTI1NyAwIEgzMDAgViIrcisiIEgyNTd6IisoIk00NzggMCBINTIxIFYiK3IrIiBINDc4eiBNNDc4IDAgSDUyMSBWIityKyIgSDQ3OHoiKTtkZWZhdWx0OnJldHVybiIifX0sImlubmVyUGF0aCIpLHJHPXtkb3VibGVsZWZ0YXJyb3c6YE0yNjIgMTU3CmwxMC0xMGMzNC0zNiA2Mi43LTc3IDg2LTEyMyAzLjMtOCA1LTEzLjMgNS0xNiAwLTUuMy02LjctOC0yMC04LTcuMwogMC0xMi4yLjUtMTQuNSAxLjUtMi4zIDEtNC44IDQuNS03LjUgMTAuNS00OS4zIDk3LjMtMTIxLjcgMTY5LjMtMjE3IDIxNi0yOAogMTQtNTcuMyAyNS04OCAzMy02LjcgMi0xMSAzLjgtMTMgNS41LTIgMS43LTMgNC4yLTMgNy41czEgNS44IDMgNy41CmMyIDEuNyA2LjMgMy41IDEzIDUuNSA2OCAxNy4zIDEyOC4yIDQ3LjggMTgwLjUgOTEuNSA1Mi4zIDQzLjcgOTMuOCA5Ni4yIDEyNC41CiAxNTcuNSA5LjMgOCAxNS4zIDEyLjMgMTggMTNoNmMxMi0uNyAxOC00IDE4LTEwIDAtMi0xLjctNy01LTE1LTIzLjMtNDYtNTItODcKLTg2LTEyM2wtMTAtMTBoMzk5NzM4di00MEgyMThjMzI4IDAgMCAwIDAgMGwtMTAtOGMtMjYuNy0yMC02NS43LTQzLTExNy02OSAyLjcKLTIgNi0zLjcgMTAtNSAzNi43LTE2IDcyLjMtMzcuMyAxMDctNjRsMTAtOGgzOTk3ODJ2LTQwegptOCAwdjQwaDM5OTczMHYtNDB6bTAgMTk0djQwaDM5OTczMHYtNDB6YCxkb3VibGVyaWdodGFycm93OmBNMzk5NzM4IDM5MmwKLTEwIDEwYy0zNCAzNi02Mi43IDc3LTg2IDEyMy0zLjMgOC01IDEzLjMtNSAxNiAwIDUuMyA2LjcgOCAyMCA4IDcuMyAwIDEyLjItLjUKIDE0LjUtMS41IDIuMy0xIDQuOC00LjUgNy41LTEwLjUgNDkuMy05Ny4zIDEyMS43LTE2OS4zIDIxNy0yMTYgMjgtMTQgNTcuMy0yNSA4OAotMzMgNi43LTIgMTEtMy44IDEzLTUuNSAyLTEuNyAzLTQuMiAzLTcuNXMtMS01LjgtMy03LjVjLTItMS43LTYuMy0zLjUtMTMtNS41LTY4Ci0xNy4zLTEyOC4yLTQ3LjgtMTgwLjUtOTEuNS01Mi4zLTQzLjctOTMuOC05Ni4yLTEyNC41LTE1Ny41LTkuMy04LTE1LjMtMTIuMy0xOAotMTNoLTZjLTEyIC43LTE4IDQtMTggMTAgMCAyIDEuNyA3IDUgMTUgMjMuMyA0NiA1MiA4NyA4NiAxMjNsMTAgMTBIMHY0MGgzOTk3ODIKYy0zMjggMCAwIDAgMCAwbDEwIDhjMjYuNyAyMCA2NS43IDQzIDExNyA2OS0yLjcgMi02IDMuNy0xMCA1LTM2LjcgMTYtNzIuMyAzNy4zCi0xMDcgNjRsLTEwIDhIMHY0MHpNMCAxNTd2NDBoMzk5NzMwdi00MHptMCAxOTR2NDBoMzk5NzMwdi00MHpgLGxlZnRhcnJvdzpgTTQwMDAwMCAyNDFIMTEwbDMtM2M2OC43LTUyLjcgMTEzLjctMTIwCiAxMzUtMjAyIDQtMTQuNyA2LTIzIDYtMjUgMC03LjMtNy0xMS0yMS0xMS04IDAtMTMuMi44LTE1LjUgMi41LTIuMyAxLjctNC4yIDUuOAotNS41IDEyLjUtMS4zIDQuNy0yLjcgMTAuMy00IDE3LTEyIDQ4LjctMzQuOCA5Mi02OC41IDEzMFM2NS4zIDIyOC4zIDE4IDI0NwpjLTEwIDQtMTYgNy43LTE4IDExIDAgOC43IDYgMTQuMyAxOCAxNyA0Ny4zIDE4LjcgODcuOCA0NyAxMjEuNSA4NVMxOTYgNDQxLjMgMjA4CiA0OTBjLjcgMiAxLjMgNSAyIDlzMS4yIDYuNyAxLjUgOGMuMyAxLjMgMSAzLjMgMiA2czIuMiA0LjUgMy41IDUuNWMxLjMgMSAzLjMKIDEuOCA2IDIuNXM2IDEgMTAgMWMxNCAwIDIxLTMuNyAyMS0xMSAwLTItMi0xMC4zLTYtMjUtMjAtNzkuMy02NS0xNDYuNy0xMzUtMjAyCiBsLTMtM2gzOTk4OTB6TTEwMCAyNDF2NDBoMzk5OTAwdi00MHpgLGxlZnRicmFjZTpgTTYgNTQ4bC02LTZ2LTM1bDYtMTFjNTYtMTA0IDEzNS4zLTE4MS4zIDIzOC0yMzIgNTcuMy0yOC43IDExNwotNDUgMTc5LTUwaDM5OTU3N3YxMjBINDAzYy00My4zIDctODEgMTUtMTEzIDI2LTEwMC43IDMzLTE3OS43IDkxLTIzNyAxNzQtMi43CiA1LTYgOS0xMCAxMy0uNyAxLTcuMyAxLTIwIDFINnpgLGxlZnRicmFjZXVuZGVyOmBNMCA2bDYtNmgxN2MxMi42ODggMCAxOS4zMTMuMyAyMCAxIDQgNCA3LjMxMyA4LjMgMTAgMTMKIDM1LjMxMyA1MS4zIDgwLjgxMyA5My44IDEzNi41IDEyNy41IDU1LjY4OCAzMy43IDExNy4xODggNTUuOCAxODQuNSA2Ni41LjY4OAogMCAyIC4zIDQgMSAxOC42ODggMi43IDc2IDQuMyAxNzIgNWgzOTk0NTB2MTIwSDQyOWwtNi0xYy0xMjQuNjg4LTgtMjM1LTYxLjcKLTMzMS0xNjFDNjAuNjg3IDEzOC43IDMyLjMxMiA5OS4zIDcgNTRMMCA0MVY2emAsbGVmdGdyb3VwOmBNNDAwMDAwIDgwCkg0MzVDNjQgODAgMTY4LjMgMjI5LjQgMjEgMjYwYy01LjkgMS4yLTE4IDAtMTggMC0yIDAtMy0xLTMtM3YtMzhDNzYgNjEgMjU3IDAKIDQzNSAwaDM5OTU2NXpgLGxlZnRncm91cHVuZGVyOmBNNDAwMDAwIDI2MgpINDM1QzY0IDI2MiAxNjguMyAxMTIuNiAyMSA4MmMtNS45LTEuMi0xOCAwLTE4IDAtMiAwLTMgMS0zIDN2MzhjNzYgMTU4IDI1NyAyMTkKIDQzNSAyMTloMzk5NTY1emAsbGVmdGhhcnBvb246YE0wIDI2N2MuNyA1LjMgMyAxMCA3IDE0aDM5OTk5M3YtNDBIOTNjMy4zCi0zLjMgMTAuMi05LjUgMjAuNS0xOC41czE3LjgtMTUuOCAyMi41LTIwLjVjNTAuNy01MiA4OC0xMTAuMyAxMTItMTc1IDQtMTEuMyA1Ci0xOC4zIDMtMjEtMS4zLTQtNy4zLTYtMTgtNi04IDAtMTMgLjctMTUgMnMtNC43IDYuNy04IDE2Yy00MiA5OC43LTEwNy4zIDE3NC43Ci0xOTYgMjI4LTYuNyA0LjctMTAuNyA4LTEyIDEwLTEuMyAyLTIgNS43LTIgMTF6bTEwMC0yNnY0MGgzOTk5MDB2LTQwemAsbGVmdGhhcnBvb25wbHVzOmBNMCAyNjdjLjcgNS4zIDMgMTAgNyAxNGgzOTk5OTN2LTQwSDkzYzMuMy0zLjMgMTAuMi05LjUKIDIwLjUtMTguNXMxNy44LTE1LjggMjIuNS0yMC41YzUwLjctNTIgODgtMTEwLjMgMTEyLTE3NSA0LTExLjMgNS0xOC4zIDMtMjEtMS4zCi00LTcuMy02LTE4LTYtOCAwLTEzIC43LTE1IDJzLTQuNyA2LjctOCAxNmMtNDIgOTguNy0xMDcuMyAxNzQuNy0xOTYgMjI4LTYuNyA0LjcKLTEwLjcgOC0xMiAxMC0xLjMgMi0yIDUuNy0yIDExem0xMDAtMjZ2NDBoMzk5OTAwdi00MHpNMCA0MzV2NDBoNDAwMDAwdi00MHoKbTAgMHY0MGg0MDAwMDB2LTQwemAsbGVmdGhhcnBvb25kb3duOmBNNyAyNDFjLTQgNC02LjMzMyA4LjY2Ny03IDE0IDAgNS4zMzMuNjY3IDkgMiAxMXM1LjMzMwogNS4zMzMgMTIgMTBjOTAuNjY3IDU0IDE1NiAxMzAgMTk2IDIyOCAzLjMzMyAxMC42NjcgNi4zMzMgMTYuMzMzIDkgMTcgMiAuNjY3IDUKIDEgOSAxaDVjMTAuNjY3IDAgMTYuNjY3LTIgMTgtNiAyLTIuNjY3IDEtOS42NjctMy0yMS0zMi04Ny4zMzMtODIuNjY3LTE1Ny42NjcKLTE1Mi0yMTFsLTMtM2gzOTk5MDd2LTQwek05MyAyODEgSDQwMDAwMCB2LTQwTDcgMjQxemAsbGVmdGhhcnBvb25kb3ducGx1czpgTTcgNDM1Yy00IDQtNi4zIDguNy03IDE0IDAgNS4zLjcgOSAyIDExczUuMyA1LjMgMTIKIDEwYzkwLjcgNTQgMTU2IDEzMCAxOTYgMjI4IDMuMyAxMC43IDYuMyAxNi4zIDkgMTcgMiAuNyA1IDEgOSAxaDVjMTAuNyAwIDE2LjcKLTIgMTgtNiAyLTIuNyAxLTkuNy0zLTIxLTMyLTg3LjMtODIuNy0xNTcuNy0xNTItMjExbC0zLTNoMzk5OTA3di00MEg3em05MyAwCnY0MGgzOTk5MDB2LTQwek0wIDI0MXY0MGgzOTk5MDB2LTQwem0wIDB2NDBoMzk5OTAwdi00MHpgLGxlZnRob29rOmBNNDAwMDAwIDI4MSBIMTAzcy0zMy0xMS4yLTYxLTMzLjVTMCAxOTcuMyAwIDE2NHMxNC4yLTYxLjIgNDIuNQotODMuNUM3MC44IDU4LjIgMTA0IDQ3IDE0MiA0NyBjMTYuNyAwIDI1IDYuNyAyNSAyMCAwIDEyLTguNyAxOC43LTI2IDIwLTQwIDMuMwotNjguNyAxNS43LTg2IDM3LTEwIDEyLTE1IDI1LjMtMTUgNDAgMCAyMi43IDkuOCA0MC43IDI5LjUgNTQgMTkuNyAxMy4zIDQzLjUgMjEKIDcxLjUgMjNoMzk5ODU5ek0xMDMgMjgxdi00MGgzOTk4OTd2NDB6YCxsZWZ0bGluZXNlZ21lbnQ6YE00MCAyODEgVjQyOCBIMCBWOTQgSDQwIFYyNDEgSDQwMDAwMCB2NDB6Ck00MCAyODEgVjQyOCBIMCBWOTQgSDQwIFYyNDEgSDQwMDAwMCB2NDB6YCxsZWZ0bWFwc3RvOmBNNDAgMjgxIFY0NDhIMFY3NEg0MFYyNDFINDAwMDAwdjQwegpNNDAgMjgxIFY0NDhIMFY3NEg0MFYyNDFINDAwMDAwdjQwemAsbGVmdFRvRnJvbTpgTTAgMTQ3aDQwMDAwMHY0MEgwem0wIDIxNGM2OCA0MCAxMTUuNyA5NS43IDE0MyAxNjdoMjJjMTUuMyAwIDIzCi0uMyAyMy0xIDAtMS4zLTUuMy0xMy43LTE2LTM3LTE4LTM1LjMtNDEuMy02OS03MC0xMDFsLTctOGgzOTk5MDV2LTQwSDk1bDctOApjMjguNy0zMiA1Mi02NS43IDcwLTEwMSAxMC43LTIzLjMgMTYtMzUuNyAxNi0zNyAwLS43LTcuNy0xLTIzLTFoLTIyQzExNS43IDI2NS4zCiA2OCAzMjEgMCAzNjF6bTAtMTc0di00MGgzOTk5MDB2NDB6bTEwMCAxNTR2NDBoMzk5OTAwdi00MHpgLGxvbmdlcXVhbDpgTTAgNTAgaDQwMDAwMCB2NDBIMHogbTAgMTk0aDQwMDAwdjQwSDB6Ck0wIDUwIGg0MDAwMDAgdjQwSDB6IG0wIDE5NGg0MDAwMHY0MEgwemAsbWlkYnJhY2U6YE0yMDA0MjggMzM0CmMtMTAwLjctOC4zLTE5NS4zLTQ0LTI4MC0xMDgtNTUuMy00Mi0xMDEuNy05My0xMzktMTUzbC05LTE0Yy0yLjcgNC01LjcgOC43LTkgMTQKLTUzLjMgODYuNy0xMjMuNyAxNTMtMjExIDE5OS02Ni43IDM2LTEzNy4zIDU2LjMtMjEyIDYySDBWMjE0aDE5OTU2OGMxNzguMy0xMS43CiAzMTEuNy03OC4zIDQwMy0yMDEgNi04IDkuNy0xMiAxMS0xMiAuNy0uNyA2LjctMSAxOC0xczE3LjMuMyAxOCAxYzEuMyAwIDUgNCAxMQogMTIgNDQuNyA1OS4zIDEwMS4zIDEwNi4zIDE3MCAxNDFzMTQ1LjMgNTQuMyAyMjkgNjBoMTk5NTcydjEyMHpgLG1pZGJyYWNldW5kZXI6YE0xOTk1NzIgMjE0CmMxMDAuNyA4LjMgMTk1LjMgNDQgMjgwIDEwOCA1NS4zIDQyIDEwMS43IDkzIDEzOSAxNTNsOSAxNGMyLjctNCA1LjctOC43IDktMTQKIDUzLjMtODYuNyAxMjMuNy0xNTMgMjExLTE5OSA2Ni43LTM2IDEzNy4zLTU2LjMgMjEyLTYyaDE5OTU2OHYxMjBIMjAwNDMyYy0xNzguMwogMTEuNy0zMTEuNyA3OC4zLTQwMyAyMDEtNiA4LTkuNyAxMi0xMSAxMi0uNy43LTYuNyAxLTE4IDFzLTE3LjMtLjMtMTgtMWMtMS4zIDAKLTUtNC0xMS0xMi00NC43LTU5LjMtMTAxLjMtMTA2LjMtMTcwLTE0MXMtMTQ1LjMtNTQuMy0yMjktNjBIMFYyMTR6YCxvaWludFNpemUxOmBNNTEyLjYgNzEuNmMyNzIuNiAwIDMyMC4zIDEwNi44IDMyMC4zIDE3OC4yIDAgNzAuOC00Ny43IDE3Ny42Ci0zMjAuMyAxNzcuNlMxOTMuMSAzMjAuNiAxOTMuMSAyNDkuOGMwLTcxLjQgNDYuOS0xNzguMiAzMTkuNS0xNzguMnoKbTM2OC4xIDE3OC4yYzAtODYuNC02MC45LTIxNS40LTM2OC4xLTIxNS40LTMwNi40IDAtMzY3LjMgMTI5LTM2Ny4zIDIxNS40IDAgODUuOAo2MC45IDIxNC44IDM2Ny4zIDIxNC44IDMwNy4yIDAgMzY4LjEtMTI5IDM2OC4xLTIxNC44emAsb2lpbnRTaXplMjpgTTc1Ny44IDEwMC4xYzM4NC43IDAgNDUxLjEgMTM3LjYgNDUxLjEgMjMwIDAgOTEuMy02Ni40IDIyOC44Ci00NTEuMSAyMjguOC0zODYuMyAwLTQ1Mi43LTEzNy41LTQ1Mi43LTIyOC44IDAtOTIuNCA2Ni40LTIzMCA0NTIuNy0yMzB6Cm01MDIuNCAyMzBjMC0xMTEuMi04Mi40LTI3Ny4yLTUwMi40LTI3Ny4ycy01MDQgMTY2LTUwNCAyNzcuMgpjMCAxMTAgODQgMjc2IDUwNCAyNzZzNTAyLjQtMTY2IDUwMi40LTI3NnpgLG9paWludFNpemUxOmBNNjgxLjQgNzEuNmM0MDguOSAwIDQ4MC41IDEwNi44IDQ4MC41IDE3OC4yIDAgNzAuOC03MS42IDE3Ny42Ci00ODAuNSAxNzcuNlMyMDIuMSAzMjAuNiAyMDIuMSAyNDkuOGMwLTcxLjQgNzAuNS0xNzguMiA0NzkuMy0xNzguMnoKbTUyNS44IDE3OC4yYzAtODYuNC04Ni44LTIxNS40LTUyNS43LTIxNS40LTQzNy45IDAtNTI0LjcgMTI5LTUyNC43IDIxNS40IDAKODUuOCA4Ni44IDIxNC44IDUyNC43IDIxNC44IDQzOC45IDAgNTI1LjctMTI5IDUyNS43LTIxNC44emAsb2lpaW50U2l6ZTI6YE0xMDIxLjIgNTNjNjAzLjYgMCA3MDcuOCAxNjUuOCA3MDcuOCAyNzcuMiAwIDExMC0xMDQuMiAyNzUuOAotNzA3LjggMjc1LjgtNjA2IDAtNzEwLjItMTY1LjgtNzEwLjItMjc1LjhDMzExIDIxOC44IDQxNS4yIDUzIDEwMjEuMiA1M3oKbTc3MC40IDI3Ny4xYzAtMTMxLjItMTI2LjQtMzI3LjYtNzcwLjUtMzI3LjZTMjQ4LjQgMTk4LjkgMjQ4LjQgMzMwLjEKYzAgMTMwIDEyOC44IDMyNi40IDc3Mi43IDMyNi40czc3MC41LTE5Ni40IDc3MC41LTMyNi40emAscmlnaHRhcnJvdzpgTTAgMjQxdjQwaDM5OTg5MWMtNDcuMyAzNS4zLTg0IDc4LTExMCAxMjgKLTE2LjcgMzItMjcuNyA2My43LTMzIDk1IDAgMS4zLS4yIDIuNy0uNSA0LS4zIDEuMy0uNSAyLjMtLjUgMyAwIDcuMyA2LjcgMTEgMjAKIDExIDggMCAxMy4yLS44IDE1LjUtMi41IDIuMy0xLjcgNC4yLTUuNSA1LjUtMTEuNSAyLTEzLjMgNS43LTI3IDExLTQxIDE0LjctNDQuNwogMzktODQuNSA3My0xMTkuNXM3My43LTYwLjIgMTE5LTc1LjVjNi0yIDktNS43IDktMTFzLTMtOS05LTExYy00NS4zLTE1LjMtODUKLTQwLjUtMTE5LTc1LjVzLTU4LjMtNzQuOC03My0xMTkuNWMtNC43LTE0LTguMy0yNy4zLTExLTQwLTEuMy02LjctMy4yLTEwLjgtNS41Ci0xMi41LTIuMy0xLjctNy41LTIuNS0xNS41LTIuNS0xNCAwLTIxIDMuNy0yMSAxMSAwIDIgMiAxMC4zIDYgMjUgMjAuNyA4My4zIDY3CiAxNTEuNyAxMzkgMjA1em0wIDB2NDBoMzk5OTAwdi00MHpgLHJpZ2h0YnJhY2U6YE00MDAwMDAgNTQybAotNiA2aC0xN2MtMTIuNyAwLTE5LjMtLjMtMjAtMS00LTQtNy4zLTguMy0xMC0xMy0zNS4zLTUxLjMtODAuOC05My44LTEzNi41LTEyNy41CnMtMTE3LjItNTUuOC0xODQuNS02Ni41Yy0uNyAwLTItLjMtNC0xLTE4LjctMi43LTc2LTQuMy0xNzItNUgwVjIxNGgzOTk1NzFsNiAxCmMxMjQuNyA4IDIzNSA2MS43IDMzMSAxNjEgMzEuMyAzMy4zIDU5LjcgNzIuNyA4NSAxMThsNyAxM3YzNXpgLHJpZ2h0YnJhY2V1bmRlcjpgTTM5OTk5NCAwbDYgNnYzNWwtNiAxMWMtNTYgMTA0LTEzNS4zIDE4MS4zLTIzOCAyMzItNTcuMwogMjguNy0xMTcgNDUtMTc5IDUwSC0zMDBWMjE0aDM5OTg5N2M0My4zLTcgODEtMTUgMTEzLTI2IDEwMC43LTMzIDE3OS43LTkxIDIzNwotMTc0IDIuNy01IDYtOSAxMC0xMyAuNy0xIDcuMy0xIDIwLTFoMTd6YCxyaWdodGdyb3VwOmBNMCA4MGgzOTk1NjVjMzcxIDAgMjY2LjcgMTQ5LjQgNDE0IDE4MCA1LjkgMS4yIDE4IDAgMTggMCAyIDAKIDMtMSAzLTN2LTM4Yy03Ni0xNTgtMjU3LTIxOS00MzUtMjE5SDB6YCxyaWdodGdyb3VwdW5kZXI6YE0wIDI2MmgzOTk1NjVjMzcxIDAgMjY2LjctMTQ5LjQgNDE0LTE4MCA1LjktMS4yIDE4IDAgMTgKIDAgMiAwIDMgMSAzIDN2MzhjLTc2IDE1OC0yNTcgMjE5LTQzNSAyMTlIMHpgLHJpZ2h0aGFycG9vbjpgTTAgMjQxdjQwaDM5OTk5M2M0LjctNC43IDctOS4zIDctMTQgMC05LjMKLTMuNy0xNS4zLTExLTE4LTkyLjctNTYuNy0xNTktMTMzLjctMTk5LTIzMS0zLjMtOS4zLTYtMTQuNy04LTE2LTItMS4zLTctMi0xNS0yCi0xMC43IDAtMTYuNyAyLTE4IDYtMiAyLjctMSA5LjcgMyAyMSAxNS4zIDQyIDM2LjcgODEuOCA2NCAxMTkuNSAyNy4zIDM3LjcgNTgKIDY5LjIgOTIgOTQuNXptMCAwdjQwaDM5OTkwMHYtNDB6YCxyaWdodGhhcnBvb25wbHVzOmBNMCAyNDF2NDBoMzk5OTkzYzQuNy00LjcgNy05LjMgNy0xNCAwLTkuMy0zLjctMTUuMy0xMQotMTgtOTIuNy01Ni43LTE1OS0xMzMuNy0xOTktMjMxLTMuMy05LjMtNi0xNC43LTgtMTYtMi0xLjMtNy0yLTE1LTItMTAuNyAwLTE2LjcKIDItMTggNi0yIDIuNy0xIDkuNyAzIDIxIDE1LjMgNDIgMzYuNyA4MS44IDY0IDExOS41IDI3LjMgMzcuNyA1OCA2OS4yIDkyIDk0LjV6Cm0wIDB2NDBoMzk5OTAwdi00MHogbTEwMCAxOTR2NDBoMzk5OTAwdi00MHptMCAwdjQwaDM5OTkwMHYtNDB6YCxyaWdodGhhcnBvb25kb3duOmBNMzk5NzQ3IDUxMWMwIDcuMyA2LjcgMTEgMjAgMTEgOCAwIDEzLS44IDE1LTIuNXM0LjctNi44CiA4LTE1LjVjNDAtOTQgOTkuMy0xNjYuMyAxNzgtMjE3IDEzLjMtOCAyMC4zLTEyLjMgMjEtMTMgNS4zLTMuMyA4LjUtNS44IDkuNQotNy41IDEtMS43IDEuNS01LjIgMS41LTEwLjVzLTIuMy0xMC4zLTctMTVIMHY0MGgzOTk5MDhjLTM0IDI1LjMtNjQuNyA1Ny05MiA5NQotMjcuMyAzOC00OC43IDc3LjctNjQgMTE5LTMuMyA4LjctNSAxNC01IDE2ek0wIDI0MXY0MGgzOTk5MDB2LTQwemAscmlnaHRoYXJwb29uZG93bnBsdXM6YE0zOTk3NDcgNzA1YzAgNy4zIDYuNyAxMSAyMCAxMSA4IDAgMTMtLjgKIDE1LTIuNXM0LjctNi44IDgtMTUuNWM0MC05NCA5OS4zLTE2Ni4zIDE3OC0yMTcgMTMuMy04IDIwLjMtMTIuMyAyMS0xMyA1LjMtMy4zCiA4LjUtNS44IDkuNS03LjUgMS0xLjcgMS41LTUuMiAxLjUtMTAuNXMtMi4zLTEwLjMtNy0xNUgwdjQwaDM5OTkwOGMtMzQgMjUuMwotNjQuNyA1Ny05MiA5NS0yNy4zIDM4LTQ4LjcgNzcuNy02NCAxMTktMy4zIDguNy01IDE0LTUgMTZ6TTAgNDM1djQwaDM5OTkwMHYtNDB6Cm0wLTE5NHY0MGg0MDAwMDB2LTQwem0wIDB2NDBoNDAwMDAwdi00MHpgLHJpZ2h0aG9vazpgTTM5OTg1OSAyNDFjLTc2NCAwIDAgMCAwIDAgNDAtMy4zIDY4LjctMTUuNyA4Ni0zNyAxMC0xMiAxNS0yNS4zCiAxNS00MCAwLTIyLjctOS44LTQwLjctMjkuNS01NC0xOS43LTEzLjMtNDMuNS0yMS03MS41LTIzLTE3LjMtMS4zLTI2LTgtMjYtMjAgMAotMTMuMyA4LjctMjAgMjYtMjAgMzggMCA3MSAxMS4yIDk5IDMzLjUgMCAwIDcgNS42IDIxIDE2LjcgMTQgMTEuMiAyMSAzMy41IDIxCiA2Ni44cy0xNCA2MS4yLTQyIDgzLjVjLTI4IDIyLjMtNjEgMzMuNS05OSAzMy41TDAgMjQxeiBNMCAyODF2LTQwaDM5OTg1OXY0MHpgLHJpZ2h0bGluZXNlZ21lbnQ6YE0zOTk5NjAgMjQxIFY5NCBoNDAgVjQyOCBoLTQwIFYyODEgSDAgdi00MHoKTTM5OTk2MCAyNDEgVjk0IGg0MCBWNDI4IGgtNDAgVjI4MSBIMCB2LTQwemAscmlnaHRUb0Zyb206YE00MDAwMDAgMTY3Yy03MC43LTQyLTExOC05Ny43LTE0Mi0xNjdoLTIzYy0xNS4zIDAtMjMgLjMtMjMKIDEgMCAxLjMgNS4zIDEzLjcgMTYgMzcgMTggMzUuMyA0MS4zIDY5IDcwIDEwMWw3IDhIMHY0MGgzOTk5MDVsLTcgOGMtMjguNyAzMgotNTIgNjUuNy03MCAxMDEtMTAuNyAyMy4zLTE2IDM1LjctMTYgMzcgMCAuNyA3LjcgMSAyMyAxaDIzYzI0LTY5LjMgNzEuMy0xMjUgMTQyCi0xNjd6IE0xMDAgMTQ3djQwaDM5OTkwMHYtNDB6TTAgMzQxdjQwaDM5OTkwMHYtNDB6YCx0d29oZWFkbGVmdGFycm93OmBNMCAxNjdjNjggNDAKIDExNS43IDk1LjcgMTQzIDE2N2gyMmMxNS4zIDAgMjMtLjMgMjMtMSAwLTEuMy01LjMtMTMuNy0xNi0zNy0xOC0zNS4zLTQxLjMtNjkKLTcwLTEwMWwtNy04aDEyNWw5IDdjNTAuNyAzOS4zIDg1IDg2IDEwMyAxNDBoNDZjMC00LjctNi4zLTE4LjctMTktNDItMTgtMzUuMwotNDAtNjcuMy02Ni05NmwtOS05aDM5OTcxNnYtNDBIMjg0bDktOWMyNi0yOC43IDQ4LTYwLjcgNjYtOTYgMTIuNy0yMy4zMzMgMTkKLTM3LjMzMyAxOS00MmgtNDZjLTE4IDU0LTUyLjMgMTAwLjctMTAzIDE0MGwtOSA3SDk1bDctOGMyOC43LTMyIDUyLTY1LjcgNzAtMTAxCiAxMC43LTIzLjMzMyAxNi0zNS43IDE2LTM3IDAtLjctNy43LTEtMjMtMWgtMjJDMTE1LjcgNzEuMyA2OCAxMjcgMCAxNjd6YCx0d29oZWFkcmlnaHRhcnJvdzpgTTQwMDAwMCAxNjcKYy02OC00MC0xMTUuNy05NS43LTE0My0xNjdoLTIyYy0xNS4zIDAtMjMgLjMtMjMgMSAwIDEuMyA1LjMgMTMuNyAxNiAzNyAxOCAzNS4zCiA0MS4zIDY5IDcwIDEwMWw3IDhoLTEyNWwtOS03Yy01MC43LTM5LjMtODUtODYtMTAzLTE0MGgtNDZjMCA0LjcgNi4zIDE4LjcgMTkgNDIKIDE4IDM1LjMgNDAgNjcuMyA2NiA5Nmw5IDlIMHY0MGgzOTk3MTZsLTkgOWMtMjYgMjguNy00OCA2MC43LTY2IDk2LTEyLjcgMjMuMzMzCi0xOSAzNy4zMzMtMTkgNDJoNDZjMTgtNTQgNTIuMy0xMDAuNyAxMDMtMTQwbDktN2gxMjVsLTcgOGMtMjguNyAzMi01MiA2NS43LTcwCiAxMDEtMTAuNyAyMy4zMzMtMTYgMzUuNy0xNiAzNyAwIC43IDcuNyAxIDIzIDFoMjJjMjcuMy03MS4zIDc1LTEyNyAxNDMtMTY3emAsdGlsZGUxOmBNMjAwIDU1LjUzOGMtNzcgMC0xNjggNzMuOTUzLTE3NyA3My45NTMtMyAwLTcKLTIuMTc1LTktNS40MzdMMiA5N2MtMS0yLTItNC0yLTYgMC00IDItNyA1LTlsMjAtMTJDMTE2IDEyIDE3MSAwIDIwNyAwYzg2IDAKIDExNCA2OCAxOTEgNjggNzggMCAxNjgtNjggMTc3LTY4IDQgMCA3IDIgOSA1bDEyIDE5YzEgMi4xNzUgMiA0LjM1IDIgNi41MjUgMAogNC4zNS0yIDcuNjEzLTUgOS43ODhsLTE5IDEzLjA1Yy05MiA2My4wNzctMTE2LjkzNyA3NS4zMDgtMTgzIDc2LjEyOAotNjguMjY3Ljg0Ny0xMTMtNzMuOTUyLTE5MS03My45NTJ6YCx0aWxkZTI6YE0zNDQgNTUuMjY2Yy0xNDIgMC0zMDAuNjM4IDgxLjMxNi0zMTEuNSA4Ni40MTgKLTguMDEgMy43NjItMjIuNSAxMC45MS0yMy41IDUuNTYyTDEgMTIwYy0xLTItMS0zLTEtNCAwLTUgMy05IDgtMTBsMTguNC05QzE2MC45CiAzMS45IDI4MyAwIDM1OCAwYzE0OCAwIDE4OCAxMjIgMzMxIDEyMnMzMTQtOTcgMzI2LTk3YzQgMCA4IDIgMTAgN2w3IDIxLjExNApjMSAyLjE0IDEgMy4yMSAxIDQuMjggMCA1LjM0Ny0zIDkuNjI2LTcgMTAuNjk2bC0yMi4zIDEyLjYyMkM4NTIuNiAxNTguMzcyIDc1MQogMTgxLjQ3NiA2NzYgMTgxLjQ3NmMtMTQ5IDAtMTg5LTEyNi4yMS0zMzItMTI2LjIxemAsdGlsZGUzOmBNNzg2IDU5QzQ1NyA1OSAzMiAxNzUuMjQyIDEzIDE3NS4yNDJjLTYgMC0xMC0zLjQ1NwotMTEtMTAuMzdMLjE1IDEzOGMtMS03IDMtMTIgMTAtMTNsMTkuMi02LjRDMzc4LjQgNDAuNyA2MzQuMyAwIDgwNC4zIDBjMzM3IDAKIDQxMS44IDE1NyA3NDYuOCAxNTcgMzI4IDAgNzU0LTExMiA3NzMtMTEyIDUgMCAxMCAzIDExIDlsMSAxNC4wNzVjMSA4LjA2Ni0uNjk3CiAxNi41OTUtNi42OTcgMTcuNDkybC0yMS4wNTIgNy4zMWMtMzY3LjkgOTguMTQ2LTYwOS4xNSAxMjIuNjk2LTc3OC4xNSAxMjIuNjk2CiAtMzM4IDAtNDA5LTE1Ni41NzMtNzQ0LTE1Ni41NzN6YCx0aWxkZTQ6YE03ODYgNThDNDU3IDU4IDMyIDE3Ny40ODcgMTMgMTc3LjQ4N2MtNiAwLTEwLTMuMzQ1Ci0xMS0xMC4wMzVMLjE1IDE0M2MtMS03IDMtMTIgMTAtMTNsMjItNi43QzM4MS4yIDM1IDYzNy4xNSAwIDgwNy4xNSAwYzMzNyAwIDQwOQogMTc3IDc0NCAxNzcgMzI4IDAgNzU0LTEyNyA3NzMtMTI3IDUgMCAxMCAzIDExIDlsMSAxNC43OTRjMSA3LjgwNS0zIDEzLjM4LTkKIDE0LjQ5NWwtMjAuNyA1LjU3NGMtMzY2Ljg1IDk5Ljc5LTYwNy4zIDEzOS4zNzItNzc2LjMgMTM5LjM3Mi0zMzggMC00MDkKIC0xNzUuMjM2LTc0NC0xNzUuMjM2emAsdmVjOmBNMzc3IDIwYzAtNS4zMzMgMS44MzMtMTAgNS41LTE0UzM5MSAwIDM5NyAwYzQuNjY3IDAgOC42NjcgMS42NjcgMTIgNQozLjMzMyAyLjY2NyA2LjY2NyA5IDEwIDE5IDYuNjY3IDI0LjY2NyAyMC4zMzMgNDMuNjY3IDQxIDU3IDcuMzMzIDQuNjY3IDExCjEwLjY2NyAxMSAxOCAwIDYtMSAxMC0zIDEycy02LjY2NyA1LTE0IDljLTI4LjY2NyAxNC42NjctNTMuNjY3IDM1LjY2Ny03NSA2MwotMS4zMzMgMS4zMzMtMy4xNjcgMy41LTUuNSA2LjVzLTQgNC44MzMtNSA1LjVjLTEgLjY2Ny0yLjUgMS4zMzMtNC41IDJzLTQuMzMzIDEKLTcgMWMtNC42NjcgMC05LjE2Ny0xLjgzMy0xMy41LTUuNVMzMzcgMTg0IDMzNyAxNzhjMC0xMi42NjcgMTUuNjY3LTMyLjMzMyA0Ny01OQpIMjEzbC0xNzEtMWMtOC42NjctNi0xMy0xMi4zMzMtMTMtMTkgMC00LjY2NyA0LjMzMy0xMS4zMzMgMTMtMjBoMzU5CmMtMTYtMjUuMzMzLTI0LTQ1LTI0LTU5emAsd2lkZWhhdDE6YE01MjkgMGg1bDUxOSAxMTVjNSAxIDkgNSA5IDEwIDAgMS0xIDItMSAzbC00IDIyCmMtMSA1LTUgOS0xMSA5aC0yTDUzMiA2NyAxOSAxNTloLTJjLTUgMC05LTQtMTEtOWwtNS0yMmMtMS02IDItMTIgOC0xM3pgLHdpZGVoYXQyOmBNMTE4MSAwaDJsMTE3MSAxNzZjNiAwIDEwIDUgMTAgMTFsLTIgMjNjLTEgNi01IDEwCi0xMSAxMGgtMUwxMTgyIDY3IDE1IDIyMGgtMWMtNiAwLTEwLTQtMTEtMTBsLTItMjNjLTEtNiA0LTExIDEwLTExemAsd2lkZWhhdDM6YE0xMTgxIDBoMmwxMTcxIDIzNmM2IDAgMTAgNSAxMCAxMWwtMiAyM2MtMSA2LTUgMTAKLTExIDEwaC0xTDExODIgNjcgMTUgMjgwaC0xYy02IDAtMTAtNC0xMS0xMGwtMi0yM2MtMS02IDQtMTEgMTAtMTF6YCx3aWRlaGF0NDpgTTExODEgMGgybDExNzEgMjk2YzYgMCAxMCA1IDEwIDExbC0yIDIzYy0xIDYtNSAxMAotMTEgMTBoLTFMMTE4MiA2NyAxNSAzNDBoLTFjLTYgMC0xMC00LTExLTEwbC0yLTIzYy0xLTYgNC0xMSAxMC0xMXpgLHdpZGVjaGVjazE6YE01MjksMTU5aDVsNTE5LC0xMTVjNSwtMSw5LC01LDksLTEwYzAsLTEsLTEsLTIsLTEsLTNsLTQsLTIyYy0xLAotNSwtNSwtOSwtMTEsLTloLTJsLTUxMiw5MmwtNTEzLC05MmgtMmMtNSwwLC05LDQsLTExLDlsLTUsMjJjLTEsNiwyLDEyLDgsMTN6YCx3aWRlY2hlY2syOmBNMTE4MSwyMjBoMmwxMTcxLC0xNzZjNiwwLDEwLC01LDEwLC0xMWwtMiwtMjNjLTEsLTYsLTUsLTEwLAotMTEsLTEwaC0xbC0xMTY4LDE1M2wtMTE2NywtMTUzaC0xYy02LDAsLTEwLDQsLTExLDEwbC0yLDIzYy0xLDYsNCwxMSwxMCwxMXpgLHdpZGVjaGVjazM6YE0xMTgxLDI4MGgybDExNzEsLTIzNmM2LDAsMTAsLTUsMTAsLTExbC0yLC0yM2MtMSwtNiwtNSwtMTAsCi0xMSwtMTBoLTFsLTExNjgsMjEzbC0xMTY3LC0yMTNoLTFjLTYsMCwtMTAsNCwtMTEsMTBsLTIsMjNjLTEsNiw0LDExLDEwLDExemAsd2lkZWNoZWNrNDpgTTExODEsMzQwaDJsMTE3MSwtMjk2YzYsMCwxMCwtNSwxMCwtMTFsLTIsLTIzYy0xLC02LC01LC0xMCwKLTExLC0xMGgtMWwtMTE2OCwyNzNsLTExNjcsLTI3M2gtMWMtNiwwLC0xMCw0LC0xMSwxMGwtMiwyM2MtMSw2LDQsMTEsMTAsMTF6YCxiYXJhYm92ZWxlZnRhcnJvdzpgTTQwMDAwMCA2MjBoLTM5OTg5MGwzIC0zYzY4LjcgLTUyLjcgMTEzLjcgLTEyMCAxMzUgLTIwMgpjNCAtMTQuNyA2IC0yMyA2IC0yNWMwIC03LjMgLTcgLTExIC0yMSAtMTFjLTggMCAtMTMuMiAwLjggLTE1LjUgMi41CmMtMi4zIDEuNyAtNC4yIDUuOCAtNS41IDEyLjVjLTEuMyA0LjcgLTIuNyAxMC4zIC00IDE3Yy0xMiA0OC43IC0zNC44IDkyIC02OC41IDEzMApzLTc0LjIgNjYuMyAtMTIxLjUgODVjLTEwIDQgLTE2IDcuNyAtMTggMTFjMCA4LjcgNiAxNC4zIDE4IDE3YzQ3LjMgMTguNyA4Ny44IDQ3CjEyMS41IDg1czU2LjUgODEuMyA2OC41IDEzMGMwLjcgMiAxLjMgNSAyIDlzMS4yIDYuNyAxLjUgOGMwLjMgMS4zIDEgMy4zIDIgNgpzMi4yIDQuNSAzLjUgNS41YzEuMyAxIDMuMyAxLjggNiAyLjVzNiAxIDEwIDFjMTQgMCAyMSAtMy43IDIxIC0xMQpjMCAtMiAtMiAtMTAuMyAtNiAtMjVjLTIwIC03OS4zIC02NSAtMTQ2LjcgLTEzNSAtMjAybC0zIC0zaDM5OTg5MHoKTTEwMCA2MjB2NDBoMzk5OTAwdi00MHogTTAgMjQxdjQwaDM5OTkwMHYtNDB6TTAgMjQxdjQwaDM5OTkwMHYtNDB6YCxyaWdodGFycm93YWJvdmViYXI6YE0wIDI0MXY0MGgzOTk4OTFjLTQ3LjMgMzUuMy04NCA3OC0xMTAgMTI4LTE2LjcgMzIKLTI3LjcgNjMuNy0zMyA5NSAwIDEuMy0uMiAyLjctLjUgNC0uMyAxLjMtLjUgMi4zLS41IDMgMCA3LjMgNi43IDExIDIwIDExIDggMAoxMy4yLS44IDE1LjUtMi41IDIuMy0xLjcgNC4yLTUuNSA1LjUtMTEuNSAyLTEzLjMgNS43LTI3IDExLTQxIDE0LjctNDQuNyAzOQotODQuNSA3My0xMTkuNXM3My43LTYwLjIgMTE5LTc1LjVjNi0yIDktNS43IDktMTFzLTMtOS05LTExYy00NS4zLTE1LjMtODUtNDAuNQotMTE5LTc1LjVzLTU4LjMtNzQuOC03My0xMTkuNWMtNC43LTE0LTguMy0yNy4zLTExLTQwLTEuMy02LjctMy4yLTEwLjgtNS41Ci0xMi41LTIuMy0xLjctNy41LTIuNS0xNS41LTIuNS0xNCAwLTIxIDMuNy0yMSAxMSAwIDIgMiAxMC4zIDYgMjUgMjAuNyA4My4zIDY3CjE1MS43IDEzOSAyMDV6bTk2IDM3OWgzOTk4OTR2NDBIMHptMCAwaDM5OTkwNHY0MEgwemAsYmFyYWJvdmVzaG9ydGxlZnRoYXJwb29uOmBNNTA3LDQzNWMtNCw0LC02LjMsOC43LC03LDE0YzAsNS4zLDAuNyw5LDIsMTEKYzEuMywyLDUuMyw1LjMsMTIsMTBjOTAuNyw1NCwxNTYsMTMwLDE5NiwyMjhjMy4zLDEwLjcsNi4zLDE2LjMsOSwxNwpjMiwwLjcsNSwxLDksMWMwLDAsNSwwLDUsMGMxMC43LDAsMTYuNywtMiwxOCwtNmMyLC0yLjcsMSwtOS43LC0zLC0yMQpjLTMyLC04Ny4zLC04Mi43LC0xNTcuNywtMTUyLC0yMTFjMCwwLC0zLC0zLC0zLC0zbDM5OTM1MSwwbDAsLTQwCmMtMzk4NTcwLDAsLTM5OTQzNywwLC0zOTk0MzcsMHogTTU5MyA0MzUgdjQwIEgzOTk1MDAgdi00MHoKTTAgMjgxIHYtNDAgSDM5OTkwOCB2NDB6IE0wIDI4MSB2LTQwIEgzOTk5MDggdjQwemAscmlnaHRoYXJwb29uYWJvdmVzaG9ydGJhcjpgTTAsMjQxIGwwLDQwYzM5OTEyNiwwLDM5OTk5MywwLDM5OTk5MywwCmM0LjcsLTQuNyw3LC05LjMsNywtMTRjMCwtOS4zLC0zLjcsLTE1LjMsLTExLC0xOGMtOTIuNywtNTYuNywtMTU5LC0xMzMuNywtMTk5LAotMjMxYy0zLjMsLTkuMywtNiwtMTQuNywtOCwtMTZjLTIsLTEuMywtNywtMiwtMTUsLTJjLTEwLjcsMCwtMTYuNywyLC0xOCw2CmMtMiwyLjcsLTEsOS43LDMsMjFjMTUuMyw0MiwzNi43LDgxLjgsNjQsMTE5LjVjMjcuMywzNy43LDU4LDY5LjIsOTIsOTQuNXoKTTAgMjQxIHY0MCBIMzk5OTA4IHYtNDB6IE0wIDQ3NSB2LTQwIEgzOTk1MDAgdjQweiBNMCA0NzUgdi00MCBIMzk5NTAwIHY0MHpgLHNob3J0YmFyYWJvdmVsZWZ0aGFycG9vbjpgTTcsNDM1Yy00LDQsLTYuMyw4LjcsLTcsMTRjMCw1LjMsMC43LDksMiwxMQpjMS4zLDIsNS4zLDUuMywxMiwxMGM5MC43LDU0LDE1NiwxMzAsMTk2LDIyOGMzLjMsMTAuNyw2LjMsMTYuMyw5LDE3YzIsMC43LDUsMSw5LAoxYzAsMCw1LDAsNSwwYzEwLjcsMCwxNi43LC0yLDE4LC02YzIsLTIuNywxLC05LjcsLTMsLTIxYy0zMiwtODcuMywtODIuNywtMTU3LjcsCi0xNTIsLTIxMWMwLDAsLTMsLTMsLTMsLTNsMzk5OTA3LDBsMCwtNDBjLTM5OTEyNiwwLC0zOTk5OTMsMCwtMzk5OTkzLDB6Ck05MyA0MzUgdjQwIEg0MDAwMDAgdi00MHogTTUwMCAyNDEgdjQwIEg0MDAwMDAgdi00MHogTTUwMCAyNDEgdjQwIEg0MDAwMDAgdi00MHpgLHNob3J0cmlnaHRoYXJwb29uYWJvdmViYXI6YE01MywyNDFsMCw0MGMzOTg1NzAsMCwzOTk0MzcsMCwzOTk0MzcsMApjNC43LC00LjcsNywtOS4zLDcsLTE0YzAsLTkuMywtMy43LC0xNS4zLC0xMSwtMThjLTkyLjcsLTU2LjcsLTE1OSwtMTMzLjcsLTE5OSwKLTIzMWMtMy4zLC05LjMsLTYsLTE0LjcsLTgsLTE2Yy0yLC0xLjMsLTcsLTIsLTE1LC0yYy0xMC43LDAsLTE2LjcsMiwtMTgsNgpjLTIsMi43LC0xLDkuNywzLDIxYzE1LjMsNDIsMzYuNyw4MS44LDY0LDExOS41YzI3LjMsMzcuNyw1OCw2OS4yLDkyLDk0LjV6Ck01MDAgMjQxIHY0MCBIMzk5NDA4IHYtNDB6IE01MDAgNDM1IHY0MCBINDAwMDAwIHYtNDB6YH0sQ2JlPW8oZnVuY3Rpb24oZSxyKXtzd2l0Y2goZSl7Y2FzZSJsYnJhY2siOnJldHVybiJNNDAzIDE3NTkgVjg0IEg2NjYgVjAgSDMxOSBWMTc1OSB2IityK2AgdjE3NTkgaDM0NyB2LTg0Ckg0MDN6IE00MDMgMTc1OSBWMCBIMzE5IFYxNzU5IHZgK3IrIiB2MTc1OSBoODR6IjtjYXNlInJicmFjayI6cmV0dXJuIk0zNDcgMTc1OSBWMCBIMCBWODQgSDI2MyBWMTc1OSB2IityK2AgdjE3NTkgSDAgdjg0IEgzNDd6Ck0zNDcgMTc1OSBWMCBIMjYzIFYxNzU5IHZgK3IrIiB2MTc1OSBoODR6IjtjYXNlInZlcnQiOnJldHVybiJNMTQ1IDE1IHY1ODUgdiIrcitgIHY1ODUgYzIuNjY3LDEwLDkuNjY3LDE1LDIxLDE1CmMxMCwwLDE2LjY2NywtNSwyMCwtMTUgdi01ODUgdmArLXIrYCB2LTU4NSBjLTIuNjY3LC0xMCwtOS42NjcsLTE1LC0yMSwtMTUKYy0xMCwwLC0xNi42NjcsNSwtMjAsMTV6IE0xODggMTUgSDE0NSB2NTg1IHZgK3IrIiB2NTg1IGg0M3oiO2Nhc2UiZG91YmxldmVydCI6cmV0dXJuIk0xNDUgMTUgdjU4NSB2IityK2AgdjU4NSBjMi42NjcsMTAsOS42NjcsMTUsMjEsMTUKYzEwLDAsMTYuNjY3LC01LDIwLC0xNSB2LTU4NSB2YCstcitgIHYtNTg1IGMtMi42NjcsLTEwLC05LjY2NywtMTUsLTIxLC0xNQpjLTEwLDAsLTE2LjY2Nyw1LC0yMCwxNXogTTE4OCAxNSBIMTQ1IHY1ODUgdmArcitgIHY1ODUgaDQzegpNMzY3IDE1IHY1ODUgdmArcitgIHY1ODUgYzIuNjY3LDEwLDkuNjY3LDE1LDIxLDE1CmMxMCwwLDE2LjY2NywtNSwyMCwtMTUgdi01ODUgdmArLXIrYCB2LTU4NSBjLTIuNjY3LC0xMCwtOS42NjcsLTE1LC0yMSwtMTUKYy0xMCwwLC0xNi42NjcsNSwtMjAsMTV6IE00MTAgMTUgSDM2NyB2NTg1IHZgK3IrIiB2NTg1IGg0M3oiO2Nhc2UibGZsb29yIjpyZXR1cm4iTTMxOSA2MDIgVjAgSDQwMyBWNjAyIHYiK3IrYCB2MTcxNSBoMjYzIHY4NCBIMzE5egpNTTMxOSA2MDIgVjAgSDQwMyBWNjAyIHZgK3IrIiB2MTcxNSBIMzE5eiI7Y2FzZSJyZmxvb3IiOnJldHVybiJNMzE5IDYwMiBWMCBINDAzIFY2MDIgdiIrcitgIHYxNzk5IEgwIHYtODQgSDMxOXoKTU0zMTkgNjAyIFYwIEg0MDMgVjYwMiB2YCtyKyIgdjE3MTUgSDMxOXoiO2Nhc2UibGNlaWwiOnJldHVybiJNNDAzIDE3NTkgVjg0IEg2NjYgVjAgSDMxOSBWMTc1OSB2IityK2AgdjYwMiBoODR6Ck00MDMgMTc1OSBWMCBIMzE5IFYxNzU5IHZgK3IrIiB2NjAyIGg4NHoiO2Nhc2UicmNlaWwiOnJldHVybiJNMzQ3IDE3NTkgVjAgSDAgVjg0IEgyNjMgVjE3NTkgdiIrcitgIHY2MDIgaDg0egpNMzQ3IDE3NTkgVjAgaC04NCBWMTc1OSB2YCtyKyIgdjYwMiBoODR6IjtjYXNlImxwYXJlbiI6cmV0dXJuYE04NjMsOWMwLC0yLC0yLC01LC02LC05YzAsMCwtMTcsMCwtMTcsMGMtMTIuNywwLC0xOS4zLDAuMywtMjAsMQpjLTUuMyw1LjMsLTEwLjMsMTEsLTE1LDE3Yy0yNDIuNywyOTQuNywtMzk1LjMsNjgyLC00NTgsMTE2MmMtMjEuMywxNjMuMywtMzMuMywzNDksCi0zNiw1NTcgbDAsYCsocis4NCkrYGMwLjIsNiwwLDI2LDAsNjBjMiwxNTkuMywxMCwzMTAuNywyNCw0NTRjNTMuMyw1MjgsMjEwLAo5NDkuNyw0NzAsMTI2NWM0LjcsNiw5LjcsMTEuNywxNSwxN2MwLjcsMC43LDcsMSwxOSwxYzAsMCwxOCwwLDE4LDBjNCwtNCw2LC03LDYsLTkKYzAsLTIuNywtMy4zLC04LjcsLTEwLC0xOGMtMTM1LjMsLTE5Mi43LC0yMzUuNSwtNDE0LjMsLTMwMC41LC02NjVjLTY1LC0yNTAuNywtMTAyLjUsCi01NDQuNywtMTEyLjUsLTg4MmMtMiwtMTA0LC0zLC0xNjcsLTMsLTE4OQpsMCwtYCsocis5MikrYGMwLC0xNjIuNyw1LjcsLTMxNCwxNywtNDU0YzIwLjcsLTI3Miw2My43LC01MTMsMTI5LC03MjNjNjUuMywKLTIxMCwxNTUuMywtMzk2LjMsMjcwLC01NTljNi43LC05LjMsMTAsLTE1LjMsMTAsLTE4emA7Y2FzZSJycGFyZW4iOnJldHVybmBNNzYsMGMtMTYuNywwLC0yNSwzLC0yNSw5YzAsMiwyLDYuMyw2LDEzYzIxLjMsMjguNyw0Mi4zLDYwLjMsCjYzLDk1Yzk2LjcsMTU2LjcsMTcyLjgsMzMyLjUsMjI4LjUsNTI3LjVjNTUuNywxOTUsOTIuOCw0MTYuNSwxMTEuNSw2NjQuNQpjMTEuMywxMzkuMywxNywyOTAuNywxNyw0NTRjMCwyOCwxLjcsNDMsMy4zLDQ1bDAsYCsocis5KStgCmMtMyw0LC0zLjMsMTYuNywtMy4zLDM4YzAsMTYyLC01LjcsMzEzLjcsLTE3LDQ1NWMtMTguNywyNDgsLTU1LjgsNDY5LjMsLTExMS41LDY2NApjLTU1LjcsMTk0LjcsLTEzMS44LDM3MC4zLC0yMjguNSw1MjdjLTIwLjcsMzQuNywtNDEuNyw2Ni4zLC02Myw5NWMtMiwzLjMsLTQsNywtNiwxMQpjMCw3LjMsNS43LDExLDE3LDExYzAsMCwxMSwwLDExLDBjOS4zLDAsMTQuMywtMC4zLDE1LC0xYzUuMywtNS4zLDEwLjMsLTExLDE1LC0xNwpjMjQyLjcsLTI5NC43LDM5NS4zLC02ODEuNyw0NTgsLTExNjFjMjEuMywtMTY0LjcsMzMuMywtMzUwLjcsMzYsLTU1OApsMCwtYCsocisxNDQpK2BjLTIsLTE1OS4zLC0xMCwtMzEwLjcsLTI0LC00NTRjLTUzLjMsLTUyOCwtMjEwLC05NDkuNywKLTQ3MCwtMTI2NWMtNC43LC02LC05LjcsLTExLjcsLTE1LC0xN2MtMC43LC0wLjcsLTYuNywtMSwtMTgsLTF6YDtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBzdHJldGNoeSBkZWxpbWl0ZXIuIil9fSwidGFsbERlbGltIikscmQ9Y2xhc3N7c3RhdGlje28odGhpcywiRG9jdW1lbnRGcmFnbWVudCIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuY2hpbGRyZW49dm9pZCAwLHRoaXMuY2xhc3Nlcz12b2lkIDAsdGhpcy5oZWlnaHQ9dm9pZCAwLHRoaXMuZGVwdGg9dm9pZCAwLHRoaXMubWF4Rm9udFNpemU9dm9pZCAwLHRoaXMuc3R5bGU9dm9pZCAwLHRoaXMuY2hpbGRyZW49ZSx0aGlzLmNsYXNzZXM9W10sdGhpcy5oZWlnaHQ9MCx0aGlzLmRlcHRoPTAsdGhpcy5tYXhGb250U2l6ZT0wLHRoaXMuc3R5bGU9e319aGFzQ2xhc3MoZSl7cmV0dXJuIEp0LmNvbnRhaW5zKHRoaXMuY2xhc3NlcyxlKX10b05vZGUoKXtmb3IodmFyIGU9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLHI9MDtyPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3IrKyllLmFwcGVuZENoaWxkKHRoaXMuY2hpbGRyZW5bcl0udG9Ob2RlKCkpO3JldHVybiBlfXRvTWFya3VwKCl7Zm9yKHZhciBlPSIiLHI9MDtyPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3IrKyllKz10aGlzLmNoaWxkcmVuW3JdLnRvTWFya3VwKCk7cmV0dXJuIGV9dG9UZXh0KCl7dmFyIGU9byhyPT5yLnRvVGV4dCgpLCJ0b1RleHQiKTtyZXR1cm4gdGhpcy5jaGlsZHJlbi5tYXAoZSkuam9pbigiIil9fSxsYz17IkFNUy1SZWd1bGFyIjp7MzI6WzAsMCwwLDAsLjI1XSw2NTpbMCwuNjg4ODksMCwwLC43MjIyMl0sNjY6WzAsLjY4ODg5LDAsMCwuNjY2NjddLDY3OlswLC42ODg4OSwwLDAsLjcyMjIyXSw2ODpbMCwuNjg4ODksMCwwLC43MjIyMl0sNjk6WzAsLjY4ODg5LDAsMCwuNjY2NjddLDcwOlswLC42ODg4OSwwLDAsLjYxMTExXSw3MTpbMCwuNjg4ODksMCwwLC43Nzc3OF0sNzI6WzAsLjY4ODg5LDAsMCwuNzc3NzhdLDczOlswLC42ODg4OSwwLDAsLjM4ODg5XSw3NDpbLjE2NjY3LC42ODg4OSwwLDAsLjVdLDc1OlswLC42ODg4OSwwLDAsLjc3Nzc4XSw3NjpbMCwuNjg4ODksMCwwLC42NjY2N10sNzc6WzAsLjY4ODg5LDAsMCwuOTQ0NDVdLDc4OlswLC42ODg4OSwwLDAsLjcyMjIyXSw3OTpbLjE2NjY3LC42ODg4OSwwLDAsLjc3Nzc4XSw4MDpbMCwuNjg4ODksMCwwLC42MTExMV0sODE6Wy4xNjY2NywuNjg4ODksMCwwLC43Nzc3OF0sODI6WzAsLjY4ODg5LDAsMCwuNzIyMjJdLDgzOlswLC42ODg4OSwwLDAsLjU1NTU2XSw4NDpbMCwuNjg4ODksMCwwLC42NjY2N10sODU6WzAsLjY4ODg5LDAsMCwuNzIyMjJdLDg2OlswLC42ODg4OSwwLDAsLjcyMjIyXSw4NzpbMCwuNjg4ODksMCwwLDFdLDg4OlswLC42ODg4OSwwLDAsLjcyMjIyXSw4OTpbMCwuNjg4ODksMCwwLC43MjIyMl0sOTA6WzAsLjY4ODg5LDAsMCwuNjY2NjddLDEwNzpbMCwuNjg4ODksMCwwLC41NTU1Nl0sMTYwOlswLDAsMCwwLC4yNV0sMTY1OlswLC42NzUsLjAyNSwwLC43NV0sMTc0OlsuMTU1NTksLjY5MjI0LDAsMCwuOTQ2NjZdLDI0MDpbMCwuNjg4ODksMCwwLC41NTU1Nl0sMjk1OlswLC42ODg4OSwwLDAsLjU0MDI4XSw3MTA6WzAsLjgyNSwwLDAsMi4zMzMzNF0sNzMyOlswLC45LDAsMCwyLjMzMzM0XSw3NzA6WzAsLjgyNSwwLDAsMi4zMzMzNF0sNzcxOlswLC45LDAsMCwyLjMzMzM0XSw5ODk6Wy4wODE2NywuNTgxNjcsMCwwLC43Nzc3OF0sMTAwODpbMCwuNDMwNTYsLjA0MDI4LDAsLjY2NjY3XSw4MjQ1OlswLC41NDk4NiwwLDAsLjI3NV0sODQ2MzpbMCwuNjg4ODksMCwwLC41NDAyOF0sODQ4NzpbMCwuNjg4ODksMCwwLC43MjIyMl0sODQ5ODpbMCwuNjg4ODksMCwwLC41NTU1Nl0sODUwMjpbMCwuNjg4ODksMCwwLC42NjY2N10sODUwMzpbMCwuNjg4ODksMCwwLC40NDQ0NV0sODUwNDpbMCwuNjg4ODksMCwwLC42NjY2N10sODUxMzpbMCwuNjg4ODksMCwwLC42Mzg4OV0sODU5MjpbLS4wMzU5OCwuNDY0MDIsMCwwLC41XSw4NTk0OlstLjAzNTk4LC40NjQwMiwwLDAsLjVdLDg2MDI6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NjAzOlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODYwNjpbLjAxMzU0LC41MjIzOSwwLDAsMV0sODYwODpbLjAxMzU0LC41MjIzOSwwLDAsMV0sODYxMDpbLjAxMzU0LC41MjIzOSwwLDAsMS4xMTExMV0sODYxMTpbLjAxMzU0LC41MjIzOSwwLDAsMS4xMTExMV0sODYxOTpbMCwuNTQ5ODYsMCwwLDFdLDg2MjA6WzAsLjU0OTg2LDAsMCwxXSw4NjIxOlstLjEzMzEzLC4zNzc4OCwwLDAsMS4zODg4OV0sODYyMjpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2MjQ6WzAsLjY5MjI0LDAsMCwuNV0sODYyNTpbMCwuNjkyMjQsMCwwLC41XSw4NjMwOlswLC40MzA1NiwwLDAsMV0sODYzMTpbMCwuNDMwNTYsMCwwLDFdLDg2MzQ6Wy4wODE5OCwuNTgxOTgsMCwwLC43Nzc3OF0sODYzNTpbLjA4MTk4LC41ODE5OCwwLDAsLjc3Nzc4XSw4NjM4OlsuMTk0NDQsLjY5MjI0LDAsMCwuNDE2NjddLDg2Mzk6Wy4xOTQ0NCwuNjkyMjQsMCwwLC40MTY2N10sODY0MjpbLjE5NDQ0LC42OTIyNCwwLDAsLjQxNjY3XSw4NjQzOlsuMTk0NDQsLjY5MjI0LDAsMCwuNDE2NjddLDg2NDQ6Wy4xODA4LC42NzUsMCwwLDFdLDg2NDY6Wy4xODA4LC42NzUsMCwwLDFdLDg2NDc6Wy4xODA4LC42NzUsMCwwLDFdLDg2NDg6Wy4xOTQ0NCwuNjkyMjQsMCwwLC44MzMzNF0sODY0OTpbLjE4MDgsLjY3NSwwLDAsMV0sODY1MDpbLjE5NDQ0LC42OTIyNCwwLDAsLjgzMzM0XSw4NjUxOlsuMDEzNTQsLjUyMjM5LDAsMCwxXSw4NjUyOlsuMDEzNTQsLjUyMjM5LDAsMCwxXSw4NjUzOlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODY1NDpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NTU6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NjY2OlsuMTM2NjcsLjYzNjY3LDAsMCwxXSw4NjY3OlsuMTM2NjcsLjYzNjY3LDAsMCwxXSw4NjY5OlstLjEzMzEzLC4zNzc4OCwwLDAsMV0sODY3MjpbLS4wNjQsLjQzNywwLDAsMS4zMzRdLDg2NzQ6Wy0uMDY0LC40MzcsMCwwLDEuMzM0XSw4NzA1OlswLC44MjUsMCwwLC41XSw4NzA4OlswLC42ODg4OSwwLDAsLjU1NTU2XSw4NzA5OlsuMDgxNjcsLjU4MTY3LDAsMCwuNzc3NzhdLDg3MTc6WzAsLjQzMDU2LDAsMCwuNDI5MTddLDg3MjI6Wy0uMDM1OTgsLjQ2NDAyLDAsMCwuNV0sODcyNDpbLjA4MTk4LC42OTIyNCwwLDAsLjc3Nzc4XSw4NzI2OlsuMDgxNjcsLjU4MTY3LDAsMCwuNzc3NzhdLDg3MzM6WzAsLjY5MjI0LDAsMCwuNzc3NzhdLDg3MzY6WzAsLjY5MjI0LDAsMCwuNzIyMjJdLDg3Mzc6WzAsLjY5MjI0LDAsMCwuNzIyMjJdLDg3Mzg6Wy4wMzUxNywuNTIyMzksMCwwLC43MjIyMl0sODczOTpbLjA4MTY3LC41ODE2NywwLDAsLjIyMjIyXSw4NzQwOlsuMjUxNDIsLjc0MTExLDAsMCwuMjc3NzhdLDg3NDE6Wy4wODE2NywuNTgxNjcsMCwwLC4zODg4OV0sODc0MjpbLjI1MTQyLC43NDExMSwwLDAsLjVdLDg3NTY6WzAsLjY5MjI0LDAsMCwuNjY2NjddLDg3NTc6WzAsLjY5MjI0LDAsMCwuNjY2NjddLDg3NjQ6Wy0uMTMzMTMsLjM2Njg3LDAsMCwuNzc3NzhdLDg3NjU6Wy0uMTMzMTMsLjM3Nzg4LDAsMCwuNzc3NzhdLDg3Njk6Wy0uMTMzMTMsLjM2Njg3LDAsMCwuNzc3NzhdLDg3NzA6Wy0uMDM2MjUsLjQ2Mzc1LDAsMCwuNzc3NzhdLDg3NzQ6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODc3NjpbLS4wMTY4OCwuNDgzMTIsMCwwLC43Nzc3OF0sODc3ODpbLjA4MTY3LC41ODE2NywwLDAsLjc3Nzc4XSw4NzgyOlsuMDYwNjIsLjU0OTg2LDAsMCwuNzc3NzhdLDg3ODM6Wy4wNjA2MiwuNTQ5ODYsMCwwLC43Nzc3OF0sODc4NTpbLjA4MTk4LC41ODE5OCwwLDAsLjc3Nzc4XSw4Nzg2OlsuMDgxOTgsLjU4MTk4LDAsMCwuNzc3NzhdLDg3ODc6Wy4wODE5OCwuNTgxOTgsMCwwLC43Nzc3OF0sODc5MDpbMCwuNjkyMjQsMCwwLC43Nzc3OF0sODc5MTpbLjIyOTU4LC43Mjk1OCwwLDAsLjc3Nzc4XSw4Nzk2OlsuMDgxOTgsLjkxNjY3LDAsMCwuNzc3NzhdLDg4MDY6Wy4yNTU4MywuNzU1ODMsMCwwLC43Nzc3OF0sODgwNzpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSw4ODA4OlsuMjUxNDIsLjc1NzI2LDAsMCwuNzc3NzhdLDg4MDk6Wy4yNTE0MiwuNzU3MjYsMCwwLC43Nzc3OF0sODgxMjpbLjI1NTgzLC43NTU4MywwLDAsLjVdLDg4MTQ6Wy4yMDU3NiwuNzA1NzYsMCwwLC43Nzc3OF0sODgxNTpbLjIwNTc2LC43MDU3NiwwLDAsLjc3Nzc4XSw4ODE2OlsuMzAyNzQsLjc5MzgzLDAsMCwuNzc3NzhdLDg4MTc6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODgxODpbLjIyOTU4LC43Mjk1OCwwLDAsLjc3Nzc4XSw4ODE5OlsuMjI5NTgsLjcyOTU4LDAsMCwuNzc3NzhdLDg4MjI6Wy4xODA4LC42NzUsMCwwLC43Nzc3OF0sODgyMzpbLjE4MDgsLjY3NSwwLDAsLjc3Nzc4XSw4ODI4OlsuMTM2NjcsLjYzNjY3LDAsMCwuNzc3NzhdLDg4Mjk6Wy4xMzY2NywuNjM2NjcsMCwwLC43Nzc3OF0sODgzMDpbLjIyOTU4LC43Mjk1OCwwLDAsLjc3Nzc4XSw4ODMxOlsuMjI5NTgsLjcyOTU4LDAsMCwuNzc3NzhdLDg4MzI6Wy4yMDU3NiwuNzA1NzYsMCwwLC43Nzc3OF0sODgzMzpbLjIwNTc2LC43MDU3NiwwLDAsLjc3Nzc4XSw4ODQwOlsuMzAyNzQsLjc5MzgzLDAsMCwuNzc3NzhdLDg4NDE6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODg0MjpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSw4ODQzOlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4NDc6Wy4wMzUxNywuNTQ5ODYsMCwwLC43Nzc3OF0sODg0ODpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw4ODU4OlsuMDgxOTgsLjU4MTk4LDAsMCwuNzc3NzhdLDg4NTk6Wy4wODE5OCwuNTgxOTgsMCwwLC43Nzc3OF0sODg2MTpbLjA4MTk4LC41ODE5OCwwLDAsLjc3Nzc4XSw4ODYyOlswLC42NzUsMCwwLC43Nzc3OF0sODg2MzpbMCwuNjc1LDAsMCwuNzc3NzhdLDg4NjQ6WzAsLjY3NSwwLDAsLjc3Nzc4XSw4ODY1OlswLC42NzUsMCwwLC43Nzc3OF0sODg3MjpbMCwuNjkyMjQsMCwwLC42MTExMV0sODg3MzpbMCwuNjkyMjQsMCwwLC43MjIyMl0sODg3NDpbMCwuNjkyMjQsMCwwLC44ODg4OV0sODg3NjpbMCwuNjg4ODksMCwwLC42MTExMV0sODg3NzpbMCwuNjg4ODksMCwwLC42MTExMV0sODg3ODpbMCwuNjg4ODksMCwwLC43MjIyMl0sODg3OTpbMCwuNjg4ODksMCwwLC43MjIyMl0sODg4MjpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw4ODgzOlsuMDM1MTcsLjU0OTg2LDAsMCwuNzc3NzhdLDg4ODQ6Wy4xMzY2NywuNjM2NjcsMCwwLC43Nzc3OF0sODg4NTpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSw4ODg4OlswLC41NDk4NiwwLDAsMS4xMTExMV0sODg5MDpbLjE5NDQ0LC40MzA1NiwwLDAsLjU1NTU2XSw4ODkxOlsuMTk0NDQsLjY5MjI0LDAsMCwuNjExMTFdLDg4OTI6Wy4xOTQ0NCwuNjkyMjQsMCwwLC42MTExMV0sODkwMTpbMCwuNTQ5ODYsMCwwLC4yNzc3OF0sODkwMzpbLjA4MTY3LC41ODE2NywwLDAsLjc3Nzc4XSw4OTA1OlsuMDgxNjcsLjU4MTY3LDAsMCwuNzc3NzhdLDg5MDY6Wy4wODE2NywuNTgxNjcsMCwwLC43Nzc3OF0sODkwNzpbMCwuNjkyMjQsMCwwLC43Nzc3OF0sODkwODpbMCwuNjkyMjQsMCwwLC43Nzc3OF0sODkwOTpbLS4wMzU5OCwuNDY0MDIsMCwwLC43Nzc3OF0sODkxMDpbMCwuNTQ5ODYsMCwwLC43NjA0Ml0sODkxMTpbMCwuNTQ5ODYsMCwwLC43NjA0Ml0sODkxMjpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw4OTEzOlsuMDM1MTcsLjU0OTg2LDAsMCwuNzc3NzhdLDg5MTQ6WzAsLjU0OTg2LDAsMCwuNjY2NjddLDg5MTU6WzAsLjU0OTg2LDAsMCwuNjY2NjddLDg5MTY6WzAsLjY5MjI0LDAsMCwuNjY2NjddLDg5MTg6Wy4wMzkxLC41MzkxLDAsMCwuNzc3NzhdLDg5MTk6Wy4wMzkxLC41MzkxLDAsMCwuNzc3NzhdLDg5MjA6Wy4wMzUxNywuNTQ5ODYsMCwwLDEuMzMzMzRdLDg5MjE6Wy4wMzUxNywuNTQ5ODYsMCwwLDEuMzMzMzRdLDg5MjI6Wy4zODU2OSwuODg1NjksMCwwLC43Nzc3OF0sODkyMzpbLjM4NTY5LC44ODU2OSwwLDAsLjc3Nzc4XSw4OTI2OlsuMTM2NjcsLjYzNjY3LDAsMCwuNzc3NzhdLDg5Mjc6Wy4xMzY2NywuNjM2NjcsMCwwLC43Nzc3OF0sODkyODpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw4OTI5OlsuMzAyNzQsLjc5MzgzLDAsMCwuNzc3NzhdLDg5MzQ6Wy4yMzIyMiwuNzQxMTEsMCwwLC43Nzc3OF0sODkzNTpbLjIzMjIyLC43NDExMSwwLDAsLjc3Nzc4XSw4OTM2OlsuMjMyMjIsLjc0MTExLDAsMCwuNzc3NzhdLDg5Mzc6Wy4yMzIyMiwuNzQxMTEsMCwwLC43Nzc3OF0sODkzODpbLjIwNTc2LC43MDU3NiwwLDAsLjc3Nzc4XSw4OTM5OlsuMjA1NzYsLjcwNTc2LDAsMCwuNzc3NzhdLDg5NDA6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODk0MTpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw4OTk0OlsuMTk0NDQsLjY5MjI0LDAsMCwuNzc3NzhdLDg5OTU6Wy4xOTQ0NCwuNjkyMjQsMCwwLC43Nzc3OF0sOTQxNjpbLjE1NTU5LC42OTIyNCwwLDAsLjkwMjIyXSw5NDg0OlswLC42OTIyNCwwLDAsLjVdLDk0ODg6WzAsLjY5MjI0LDAsMCwuNV0sOTQ5MjpbMCwuMzc3ODgsMCwwLC41XSw5NDk2OlswLC4zNzc4OCwwLDAsLjVdLDk1ODU6Wy4xOTQ0NCwuNjg4ODksMCwwLC44ODg4OV0sOTU4NjpbLjE5NDQ0LC43NDExMSwwLDAsLjg4ODg5XSw5NjMyOlswLC42NzUsMCwwLC43Nzc3OF0sOTYzMzpbMCwuNjc1LDAsMCwuNzc3NzhdLDk2NTA6WzAsLjU0OTg2LDAsMCwuNzIyMjJdLDk2NTE6WzAsLjU0OTg2LDAsMCwuNzIyMjJdLDk2NTQ6Wy4wMzUxNywuNTQ5ODYsMCwwLC43Nzc3OF0sOTY2MDpbMCwuNTQ5ODYsMCwwLC43MjIyMl0sOTY2MTpbMCwuNTQ5ODYsMCwwLC43MjIyMl0sOTY2NDpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw5Njc0OlsuMTExMTEsLjY5MjI0LDAsMCwuNjY2NjddLDk3MzM6Wy4xOTQ0NCwuNjkyMjQsMCwwLC45NDQ0NV0sMTAwMDM6WzAsLjY5MjI0LDAsMCwuODMzMzRdLDEwMDE2OlswLC42OTIyNCwwLDAsLjgzMzM0XSwxMDczMTpbLjExMTExLC42OTIyNCwwLDAsLjY2NjY3XSwxMDg0NjpbLjE5NDQ0LC43NTU4MywwLDAsLjYxMTExXSwxMDg3NzpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSwxMDg3ODpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSwxMDg4NTpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSwxMDg4NjpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSwxMDg4NzpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSwxMDg4ODpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSwxMDg4OTpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDg5MDpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDg5MTpbLjQ4MjU2LC45ODI1NiwwLDAsLjc3Nzc4XSwxMDg5MjpbLjQ4MjU2LC45ODI1NiwwLDAsLjc3Nzc4XSwxMDkwMTpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSwxMDkwMjpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSwxMDkzMzpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzNDpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzNTpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzNjpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzNzpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzODpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDk0OTpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSwxMDk1MDpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSwxMDk1NTpbLjI4NDgxLC43OTM4MywwLDAsLjc3Nzc4XSwxMDk1NjpbLjI4NDgxLC43OTM4MywwLDAsLjc3Nzc4XSw1NzM1MDpbLjA4MTY3LC41ODE2NywwLDAsLjIyMjIyXSw1NzM1MTpbLjA4MTY3LC41ODE2NywwLDAsLjM4ODg5XSw1NzM1MjpbLjA4MTY3LC41ODE2NywwLDAsLjc3Nzc4XSw1NzM1MzpbMCwuNDMwNTYsLjA0MDI4LDAsLjY2NjY3XSw1NzM1NjpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM1NzpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM1ODpbLjQxOTUxLC45MTk1MSwwLDAsLjc3Nzc4XSw1NzM1OTpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw1NzM2MDpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw1NzM2MTpbLjQxOTUxLC45MTk1MSwwLDAsLjc3Nzc4XSw1NzM2NjpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM2NzpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM2ODpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM2OTpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM3MDpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSw1NzM3MTpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XX0sIkNhbGlncmFwaGljLVJlZ3VsYXIiOnszMjpbMCwwLDAsMCwuMjVdLDY1OlswLC42ODMzMywwLC4xOTQ0NSwuNzk4NDddLDY2OlswLC42ODMzMywuMDMwNDEsLjEzODg5LC42NTY4MV0sNjc6WzAsLjY4MzMzLC4wNTgzNCwuMTM4ODksLjUyNjUzXSw2ODpbMCwuNjgzMzMsLjAyNzc4LC4wODMzNCwuNzcxMzldLDY5OlswLC42ODMzMywuMDg5NDQsLjExMTExLC41Mjc3OF0sNzA6WzAsLjY4MzMzLC4wOTkzMSwuMTExMTEsLjcxODc1XSw3MTpbLjA5NzIyLC42ODMzMywuMDU5MywuMTExMTEsLjU5NDg3XSw3MjpbMCwuNjgzMzMsLjAwOTY1LC4xMTExMSwuODQ0NTJdLDczOlswLC42ODMzMywuMDczODIsMCwuNTQ0NTJdLDc0OlsuMDk3MjIsLjY4MzMzLC4xODQ3MiwuMTY2NjcsLjY3Nzc4XSw3NTpbMCwuNjgzMzMsLjAxNDQ1LC4wNTU1NiwuNzYxOTVdLDc2OlswLC42ODMzMywwLC4xMzg4OSwuNjg5NzJdLDc3OlswLC42ODMzMywwLC4xMzg4OSwxLjIwMDldLDc4OlswLC42ODMzMywuMTQ3MzYsLjA4MzM0LC44MjA0OV0sNzk6WzAsLjY4MzMzLC4wMjc3OCwuMTExMTEsLjc5NjExXSw4MDpbMCwuNjgzMzMsLjA4MjIyLC4wODMzNCwuNjk1NTZdLDgxOlsuMDk3MjIsLjY4MzMzLDAsLjExMTExLC44MTY2N10sODI6WzAsLjY4MzMzLDAsLjA4MzM0LC44NDc1XSw4MzpbMCwuNjgzMzMsLjA3NSwuMTM4ODksLjYwNTU2XSw4NDpbMCwuNjgzMzMsLjI1NDE3LDAsLjU0NDY0XSw4NTpbMCwuNjgzMzMsLjA5OTMxLC4wODMzNCwuNjI1ODNdLDg2OlswLC42ODMzMywuMDgyMjIsMCwuNjEyNzhdLDg3OlswLC42ODMzMywuMDgyMjIsLjA4MzM0LC45ODc3OF0sODg6WzAsLjY4MzMzLC4xNDY0MywuMTM4ODksLjcxMzNdLDg5OlsuMDk3MjIsLjY4MzMzLC4wODIyMiwuMDgzMzQsLjY2ODM0XSw5MDpbMCwuNjgzMzMsLjA3OTQ0LC4xMzg4OSwuNzI0NzNdLDE2MDpbMCwwLDAsMCwuMjVdfSwiRnJha3R1ci1SZWd1bGFyIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjkxNDEsMCwwLC4yOTU3NF0sMzQ6WzAsLjY5MTQxLDAsMCwuMjE0NzFdLDM4OlswLC42OTE0MSwwLDAsLjczNzg2XSwzOTpbMCwuNjkxNDEsMCwwLC4yMTIwMV0sNDA6Wy4yNDk4MiwuNzQ5NDcsMCwwLC4zODg2NV0sNDE6Wy4yNDk4MiwuNzQ5NDcsMCwwLC4zODg2NV0sNDI6WzAsLjYyMTE5LDAsMCwuMjc3NjRdLDQzOlsuMDgzMTksLjU4MjgzLDAsMCwuNzU2MjNdLDQ0OlswLC4xMDgwMywwLDAsLjI3NzY0XSw0NTpbLjA4MzE5LC41ODI4MywwLDAsLjc1NjIzXSw0NjpbMCwuMTA4MDMsMCwwLC4yNzc2NF0sNDc6Wy4yNDk4MiwuNzQ5NDcsMCwwLC41MDE4MV0sNDg6WzAsLjQ3NTM0LDAsMCwuNTAxODFdLDQ5OlswLC40NzUzNCwwLDAsLjUwMTgxXSw1MDpbMCwuNDc1MzQsMCwwLC41MDE4MV0sNTE6Wy4xODkwNiwuNDc1MzQsMCwwLC41MDE4MV0sNTI6Wy4xODkwNiwuNDc1MzQsMCwwLC41MDE4MV0sNTM6Wy4xODkwNiwuNDc1MzQsMCwwLC41MDE4MV0sNTQ6WzAsLjY5MTQxLDAsMCwuNTAxODFdLDU1OlsuMTg5MDYsLjQ3NTM0LDAsMCwuNTAxODFdLDU2OlswLC42OTE0MSwwLDAsLjUwMTgxXSw1NzpbLjE4OTA2LC40NzUzNCwwLDAsLjUwMTgxXSw1ODpbMCwuNDc1MzQsMCwwLC4yMTYwNl0sNTk6Wy4xMjYwNCwuNDc1MzQsMCwwLC4yMTYwNl0sNjE6Wy0uMTMwOTksLjM2ODY2LDAsMCwuNzU2MjNdLDYzOlswLC42OTE0MSwwLDAsLjM2MjQ1XSw2NTpbMCwuNjkxNDEsMCwwLC43MTc2XSw2NjpbMCwuNjkxNDEsMCwwLC44ODM5N10sNjc6WzAsLjY5MTQxLDAsMCwuNjEyNTRdLDY4OlswLC42OTE0MSwwLDAsLjgzMTU4XSw2OTpbMCwuNjkxNDEsMCwwLC42NjI3OF0sNzA6Wy4xMjYwNCwuNjkxNDEsMCwwLC42MTExOV0sNzE6WzAsLjY5MTQxLDAsMCwuNzg1MzldLDcyOlsuMDYzMDIsLjY5MTQxLDAsMCwuNzIwM10sNzM6WzAsLjY5MTQxLDAsMCwuNTU0NDhdLDc0OlsuMTI2MDQsLjY5MTQxLDAsMCwuNTUyMzFdLDc1OlswLC42OTE0MSwwLDAsLjY2ODQ1XSw3NjpbMCwuNjkxNDEsMCwwLC42NjYwMl0sNzc6WzAsLjY5MTQxLDAsMCwxLjA0OTUzXSw3ODpbMCwuNjkxNDEsMCwwLC44MzIxMl0sNzk6WzAsLjY5MTQxLDAsMCwuODI2OTldLDgwOlsuMTg5MDYsLjY5MTQxLDAsMCwuODI3NTNdLDgxOlsuMDM3ODEsLjY5MTQxLDAsMCwuODI2OTldLDgyOlswLC42OTE0MSwwLDAsLjgyODA3XSw4MzpbMCwuNjkxNDEsMCwwLC44Mjg2MV0sODQ6WzAsLjY5MTQxLDAsMCwuNjY4OTldLDg1OlswLC42OTE0MSwwLDAsLjY0NTc2XSw4NjpbMCwuNjkxNDEsMCwwLC44MzEzMV0sODc6WzAsLjY5MTQxLDAsMCwxLjA0NjAyXSw4ODpbMCwuNjkxNDEsMCwwLC43MTkyMl0sODk6Wy4xODkwNiwuNjkxNDEsMCwwLC44MzI5M10sOTA6Wy4xMjYwNCwuNjkxNDEsMCwwLC42MDIwMV0sOTE6Wy4yNDk4MiwuNzQ5NDcsMCwwLC4yNzc2NF0sOTM6Wy4yNDk4MiwuNzQ5NDcsMCwwLC4yNzc2NF0sOTQ6WzAsLjY5MTQxLDAsMCwuNDk5NjVdLDk3OlswLC40NzUzNCwwLDAsLjUwMDQ2XSw5ODpbMCwuNjkxNDEsMCwwLC41MTMxNV0sOTk6WzAsLjQ3NTM0LDAsMCwuMzg5NDZdLDEwMDpbMCwuNjIxMTksMCwwLC40OTg1N10sMTAxOlswLC40NzUzNCwwLDAsLjQwMDUzXSwxMDI6Wy4xODkwNiwuNjkxNDEsMCwwLC4zMjYyNl0sMTAzOlsuMTg5MDYsLjQ3NTM0LDAsMCwuNTAzN10sMTA0OlsuMTg5MDYsLjY5MTQxLDAsMCwuNTIxMjZdLDEwNTpbMCwuNjkxNDEsMCwwLC4yNzg5OV0sMTA2OlswLC42OTE0MSwwLDAsLjI4MDg4XSwxMDc6WzAsLjY5MTQxLDAsMCwuMzg5NDZdLDEwODpbMCwuNjkxNDEsMCwwLC4yNzk1M10sMTA5OlswLC40NzUzNCwwLDAsLjc2Njc2XSwxMTA6WzAsLjQ3NTM0LDAsMCwuNTI2NjZdLDExMTpbMCwuNDc1MzQsMCwwLC40ODg4NV0sMTEyOlsuMTg5MDYsLjUyMzk2LDAsMCwuNTAwNDZdLDExMzpbLjE4OTA2LC40NzUzNCwwLDAsLjQ4OTEyXSwxMTQ6WzAsLjQ3NTM0LDAsMCwuMzg5MTldLDExNTpbMCwuNDc1MzQsMCwwLC40NDI2Nl0sMTE2OlswLC42MjExOSwwLDAsLjMzMzAxXSwxMTc6WzAsLjQ3NTM0LDAsMCwuNTE3Ml0sMTE4OlswLC41MjM5NiwwLDAsLjUxMThdLDExOTpbMCwuNTIzOTYsMCwwLC43NzM1MV0sMTIwOlsuMTg5MDYsLjQ3NTM0LDAsMCwuMzg4NjVdLDEyMTpbLjE4OTA2LC40NzUzNCwwLDAsLjQ5ODg0XSwxMjI6Wy4xODkwNiwuNDc1MzQsMCwwLC4zOTA1NF0sMTYwOlswLDAsMCwwLC4yNV0sODIxNjpbMCwuNjkxNDEsMCwwLC4yMTQ3MV0sODIxNzpbMCwuNjkxNDEsMCwwLC4yMTQ3MV0sNTgxMTI6WzAsLjYyMTE5LDAsMCwuNDk3NDldLDU4MTEzOlswLC42MjExOSwwLDAsLjQ5ODNdLDU4MTE0OlsuMTg5MDYsLjY5MTQxLDAsMCwuMzMzMjhdLDU4MTE1OlsuMTg5MDYsLjY5MTQxLDAsMCwuMzI5MjNdLDU4MTE2OlsuMTg5MDYsLjQ3NTM0LDAsMCwuNTAzNDNdLDU4MTE3OlswLC42OTE0MSwwLDAsLjMzMzAxXSw1ODExODpbMCwuNjIxMTksMCwwLC4zMzQwOV0sNTgxMTk6WzAsLjQ3NTM0LDAsMCwuNTAwNzNdfSwiTWFpbi1Cb2xkIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjk0NDQsMCwwLC4zNV0sMzQ6WzAsLjY5NDQ0LDAsMCwuNjAyNzhdLDM1OlsuMTk0NDQsLjY5NDQ0LDAsMCwuOTU4MzNdLDM2OlsuMDU1NTYsLjc1LDAsMCwuNTc1XSwzNzpbLjA1NTU2LC43NSwwLDAsLjk1ODMzXSwzODpbMCwuNjk0NDQsMCwwLC44OTQ0NF0sMzk6WzAsLjY5NDQ0LDAsMCwuMzE5NDRdLDQwOlsuMjUsLjc1LDAsMCwuNDQ3MjJdLDQxOlsuMjUsLjc1LDAsMCwuNDQ3MjJdLDQyOlswLC43NSwwLDAsLjU3NV0sNDM6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sNDQ6Wy4xOTQ0NCwuMTU1NTYsMCwwLC4zMTk0NF0sNDU6WzAsLjQ0NDQ0LDAsMCwuMzgzMzNdLDQ2OlswLC4xNTU1NiwwLDAsLjMxOTQ0XSw0NzpbLjI1LC43NSwwLDAsLjU3NV0sNDg6WzAsLjY0NDQ0LDAsMCwuNTc1XSw0OTpbMCwuNjQ0NDQsMCwwLC41NzVdLDUwOlswLC42NDQ0NCwwLDAsLjU3NV0sNTE6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1MjpbMCwuNjQ0NDQsMCwwLC41NzVdLDUzOlswLC42NDQ0NCwwLDAsLjU3NV0sNTQ6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1NTpbMCwuNjQ0NDQsMCwwLC41NzVdLDU2OlswLC42NDQ0NCwwLDAsLjU3NV0sNTc6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1ODpbMCwuNDQ0NDQsMCwwLC4zMTk0NF0sNTk6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC4zMTk0NF0sNjA6Wy4wODU1NiwuNTg1NTYsMCwwLC44OTQ0NF0sNjE6Wy0uMTA4ODksLjM5MTExLDAsMCwuODk0NDRdLDYyOlsuMDg1NTYsLjU4NTU2LDAsMCwuODk0NDRdLDYzOlswLC42OTQ0NCwwLDAsLjU0MzA1XSw2NDpbMCwuNjk0NDQsMCwwLC44OTQ0NF0sNjU6WzAsLjY4NjExLDAsMCwuODY5NDRdLDY2OlswLC42ODYxMSwwLDAsLjgxODA1XSw2NzpbMCwuNjg2MTEsMCwwLC44MzA1NV0sNjg6WzAsLjY4NjExLDAsMCwuODgxOTRdLDY5OlswLC42ODYxMSwwLDAsLjc1NTU1XSw3MDpbMCwuNjg2MTEsMCwwLC43MjM2MV0sNzE6WzAsLjY4NjExLDAsMCwuOTA0MTZdLDcyOlswLC42ODYxMSwwLDAsLjldLDczOlswLC42ODYxMSwwLDAsLjQzNjExXSw3NDpbMCwuNjg2MTEsMCwwLC41OTQ0NF0sNzU6WzAsLjY4NjExLDAsMCwuOTAxMzhdLDc2OlswLC42ODYxMSwwLDAsLjY5MTY2XSw3NzpbMCwuNjg2MTEsMCwwLDEuMDkxNjZdLDc4OlswLC42ODYxMSwwLDAsLjldLDc5OlswLC42ODYxMSwwLDAsLjg2Mzg4XSw4MDpbMCwuNjg2MTEsMCwwLC43ODYxMV0sODE6Wy4xOTQ0NCwuNjg2MTEsMCwwLC44NjM4OF0sODI6WzAsLjY4NjExLDAsMCwuODYyNV0sODM6WzAsLjY4NjExLDAsMCwuNjM4ODldLDg0OlswLC42ODYxMSwwLDAsLjhdLDg1OlswLC42ODYxMSwwLDAsLjg4NDcyXSw4NjpbMCwuNjg2MTEsLjAxNTk3LDAsLjg2OTQ0XSw4NzpbMCwuNjg2MTEsLjAxNTk3LDAsMS4xODg4OF0sODg6WzAsLjY4NjExLDAsMCwuODY5NDRdLDg5OlswLC42ODYxMSwuMDI4NzUsMCwuODY5NDRdLDkwOlswLC42ODYxMSwwLDAsLjcwMjc3XSw5MTpbLjI1LC43NSwwLDAsLjMxOTQ0XSw5MjpbLjI1LC43NSwwLDAsLjU3NV0sOTM6Wy4yNSwuNzUsMCwwLC4zMTk0NF0sOTQ6WzAsLjY5NDQ0LDAsMCwuNTc1XSw5NTpbLjMxLC4xMzQ0NCwuMDMxOTQsMCwuNTc1XSw5NzpbMCwuNDQ0NDQsMCwwLC41NTkwMl0sOTg6WzAsLjY5NDQ0LDAsMCwuNjM4ODldLDk5OlswLC40NDQ0NCwwLDAsLjUxMTExXSwxMDA6WzAsLjY5NDQ0LDAsMCwuNjM4ODldLDEwMTpbMCwuNDQ0NDQsMCwwLC41MjcwOF0sMTAyOlswLC42OTQ0NCwuMTA5MDMsMCwuMzUxMzldLDEwMzpbLjE5NDQ0LC40NDQ0NCwuMDE1OTcsMCwuNTc1XSwxMDQ6WzAsLjY5NDQ0LDAsMCwuNjM4ODldLDEwNTpbMCwuNjk0NDQsMCwwLC4zMTk0NF0sMTA2OlsuMTk0NDQsLjY5NDQ0LDAsMCwuMzUxMzldLDEwNzpbMCwuNjk0NDQsMCwwLC42MDY5NF0sMTA4OlswLC42OTQ0NCwwLDAsLjMxOTQ0XSwxMDk6WzAsLjQ0NDQ0LDAsMCwuOTU4MzNdLDExMDpbMCwuNDQ0NDQsMCwwLC42Mzg4OV0sMTExOlswLC40NDQ0NCwwLDAsLjU3NV0sMTEyOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNjM4ODldLDExMzpbLjE5NDQ0LC40NDQ0NCwwLDAsLjYwNjk0XSwxMTQ6WzAsLjQ0NDQ0LDAsMCwuNDczNjFdLDExNTpbMCwuNDQ0NDQsMCwwLC40NTM2MV0sMTE2OlswLC42MzQ5MiwwLDAsLjQ0NzIyXSwxMTc6WzAsLjQ0NDQ0LDAsMCwuNjM4ODldLDExODpbMCwuNDQ0NDQsLjAxNTk3LDAsLjYwNjk0XSwxMTk6WzAsLjQ0NDQ0LC4wMTU5NywwLC44MzA1NV0sMTIwOlswLC40NDQ0NCwwLDAsLjYwNjk0XSwxMjE6Wy4xOTQ0NCwuNDQ0NDQsLjAxNTk3LDAsLjYwNjk0XSwxMjI6WzAsLjQ0NDQ0LDAsMCwuNTExMTFdLDEyMzpbLjI1LC43NSwwLDAsLjU3NV0sMTI0OlsuMjUsLjc1LDAsMCwuMzE5NDRdLDEyNTpbLjI1LC43NSwwLDAsLjU3NV0sMTI2OlsuMzUsLjM0NDQ0LDAsMCwuNTc1XSwxNjA6WzAsMCwwLDAsLjI1XSwxNjM6WzAsLjY5NDQ0LDAsMCwuODY4NTNdLDE2ODpbMCwuNjk0NDQsMCwwLC41NzVdLDE3MjpbMCwuNDQ0NDQsMCwwLC43NjY2Nl0sMTc2OlswLC42OTQ0NCwwLDAsLjg2OTQ0XSwxNzc6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sMTg0OlsuMTcwMTQsMCwwLDAsLjUxMTExXSwxOTg6WzAsLjY4NjExLDAsMCwxLjA0MTY2XSwyMTU6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sMjE2OlsuMDQ4NjEsLjczNDcyLDAsMCwuODk0NDRdLDIyMzpbMCwuNjk0NDQsMCwwLC41OTcyMl0sMjMwOlswLC40NDQ0NCwwLDAsLjgzMDU1XSwyNDc6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sMjQ4OlsuMDk3MjIsLjU0MTY3LDAsMCwuNTc1XSwzMDU6WzAsLjQ0NDQ0LDAsMCwuMzE5NDRdLDMzODpbMCwuNjg2MTEsMCwwLDEuMTY5NDRdLDMzOTpbMCwuNDQ0NDQsMCwwLC44OTQ0NF0sNTY3OlsuMTk0NDQsLjQ0NDQ0LDAsMCwuMzUxMzldLDcxMDpbMCwuNjk0NDQsMCwwLC41NzVdLDcxMTpbMCwuNjMxOTQsMCwwLC41NzVdLDcxMzpbMCwuNTk2MTEsMCwwLC41NzVdLDcxNDpbMCwuNjk0NDQsMCwwLC41NzVdLDcxNTpbMCwuNjk0NDQsMCwwLC41NzVdLDcyODpbMCwuNjk0NDQsMCwwLC41NzVdLDcyOTpbMCwuNjk0NDQsMCwwLC4zMTk0NF0sNzMwOlswLC42OTQ0NCwwLDAsLjg2OTQ0XSw3MzI6WzAsLjY5NDQ0LDAsMCwuNTc1XSw3MzM6WzAsLjY5NDQ0LDAsMCwuNTc1XSw5MTU6WzAsLjY4NjExLDAsMCwuNjkxNjZdLDkxNjpbMCwuNjg2MTEsMCwwLC45NTgzM10sOTIwOlswLC42ODYxMSwwLDAsLjg5NDQ0XSw5MjM6WzAsLjY4NjExLDAsMCwuODA1NTVdLDkyNjpbMCwuNjg2MTEsMCwwLC43NjY2Nl0sOTI4OlswLC42ODYxMSwwLDAsLjldLDkzMTpbMCwuNjg2MTEsMCwwLC44MzA1NV0sOTMzOlswLC42ODYxMSwwLDAsLjg5NDQ0XSw5MzQ6WzAsLjY4NjExLDAsMCwuODMwNTVdLDkzNjpbMCwuNjg2MTEsMCwwLC44OTQ0NF0sOTM3OlswLC42ODYxMSwwLDAsLjgzMDU1XSw4MjExOlswLC40NDQ0NCwuMDMxOTQsMCwuNTc1XSw4MjEyOlswLC40NDQ0NCwuMDMxOTQsMCwxLjE0OTk5XSw4MjE2OlswLC42OTQ0NCwwLDAsLjMxOTQ0XSw4MjE3OlswLC42OTQ0NCwwLDAsLjMxOTQ0XSw4MjIwOlswLC42OTQ0NCwwLDAsLjYwMjc4XSw4MjIxOlswLC42OTQ0NCwwLDAsLjYwMjc4XSw4MjI0OlsuMTk0NDQsLjY5NDQ0LDAsMCwuNTExMTFdLDgyMjU6Wy4xOTQ0NCwuNjk0NDQsMCwwLC41MTExMV0sODI0MjpbMCwuNTU1NTYsMCwwLC4zNDQ0NF0sODQwNzpbMCwuNzI0NDQsLjE1NDg2LDAsLjU3NV0sODQ2MzpbMCwuNjk0NDQsMCwwLC42Njc1OV0sODQ2NTpbMCwuNjk0NDQsMCwwLC44MzA1NV0sODQ2NzpbMCwuNjk0NDQsMCwwLC40NzM2MV0sODQ3MjpbLjE5NDQ0LC40NDQ0NCwwLDAsLjc0MDI3XSw4NDc2OlswLC42OTQ0NCwwLDAsLjgzMDU1XSw4NTAxOlswLC42OTQ0NCwwLDAsLjcwMjc3XSw4NTkyOlstLjEwODg5LC4zOTExMSwwLDAsMS4xNDk5OV0sODU5MzpbLjE5NDQ0LC42OTQ0NCwwLDAsLjU3NV0sODU5NDpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg1OTU6Wy4xOTQ0NCwuNjk0NDQsMCwwLC41NzVdLDg1OTY6Wy0uMTA4ODksLjM5MTExLDAsMCwxLjE0OTk5XSw4NTk3OlsuMjUsLjc1LDAsMCwuNTc1XSw4NTk4OlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw4NTk5OlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw4NjAwOlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw4NjAxOlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw4NjM2OlstLjEwODg5LC4zOTExMSwwLDAsMS4xNDk5OV0sODYzNzpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NDA6Wy0uMTA4ODksLjM5MTExLDAsMCwxLjE0OTk5XSw4NjQxOlstLjEwODg5LC4zOTExMSwwLDAsMS4xNDk5OV0sODY1NjpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NTc6Wy4xOTQ0NCwuNjk0NDQsMCwwLC43MDI3N10sODY1ODpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NTk6Wy4xOTQ0NCwuNjk0NDQsMCwwLC43MDI3N10sODY2MDpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NjE6Wy4yNSwuNzUsMCwwLC43MDI3N10sODcwNDpbMCwuNjk0NDQsMCwwLC42Mzg4OV0sODcwNjpbMCwuNjk0NDQsLjA2Mzg5LDAsLjYyODQ3XSw4NzA3OlswLC42OTQ0NCwwLDAsLjYzODg5XSw4NzA5OlsuMDU1NTYsLjc1LDAsMCwuNTc1XSw4NzExOlswLC42ODYxMSwwLDAsLjk1ODMzXSw4NzEyOlsuMDg1NTYsLjU4NTU2LDAsMCwuNzY2NjZdLDg3MTU6Wy4wODU1NiwuNTg1NTYsMCwwLC43NjY2Nl0sODcyMjpbLjEzMzMzLC42MzMzMywwLDAsLjg5NDQ0XSw4NzIzOlsuMTMzMzMsLjYzMzMzLDAsMCwuODk0NDRdLDg3MjU6Wy4yNSwuNzUsMCwwLC41NzVdLDg3MjY6Wy4yNSwuNzUsMCwwLC41NzVdLDg3Mjc6Wy0uMDI3NzgsLjQ3MjIyLDAsMCwuNTc1XSw4NzI4OlstLjAyNjM5LC40NzM2MSwwLDAsLjU3NV0sODcyOTpbLS4wMjYzOSwuNDczNjEsMCwwLC41NzVdLDg3MzA6Wy4xOCwuODIsMCwwLC45NTgzM10sODczMzpbMCwuNDQ0NDQsMCwwLC44OTQ0NF0sODczNDpbMCwuNDQ0NDQsMCwwLDEuMTQ5OTldLDg3MzY6WzAsLjY5MjI0LDAsMCwuNzIyMjJdLDg3Mzk6Wy4yNSwuNzUsMCwwLC4zMTk0NF0sODc0MTpbLjI1LC43NSwwLDAsLjU3NV0sODc0MzpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODc0NDpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODc0NTpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODc0NjpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODc0NzpbLjE5NDQ0LC42OTQ0NCwuMTI3NzgsMCwuNTY4NzVdLDg3NjQ6Wy0uMTA4ODksLjM5MTExLDAsMCwuODk0NDRdLDg3Njg6Wy4xOTQ0NCwuNjk0NDQsMCwwLC4zMTk0NF0sODc3MTpbLjAwMjIyLC41MDIyMiwwLDAsLjg5NDQ0XSw4NzczOlsuMDI3LC42MzgsMCwwLC44OTRdLDg3NzY6Wy4wMjQ0NCwuNTI0NDQsMCwwLC44OTQ0NF0sODc4MTpbLjAwMjIyLC41MDIyMiwwLDAsLjg5NDQ0XSw4ODAxOlsuMDAyMjIsLjUwMjIyLDAsMCwuODk0NDRdLDg4MDQ6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sODgwNTpbLjE5NjY3LC42OTY2NywwLDAsLjg5NDQ0XSw4ODEwOlsuMDg1NTYsLjU4NTU2LDAsMCwxLjE0OTk5XSw4ODExOlsuMDg1NTYsLjU4NTU2LDAsMCwxLjE0OTk5XSw4ODI2OlsuMDg1NTYsLjU4NTU2LDAsMCwuODk0NDRdLDg4Mjc6Wy4wODU1NiwuNTg1NTYsMCwwLC44OTQ0NF0sODgzNDpbLjA4NTU2LC41ODU1NiwwLDAsLjg5NDQ0XSw4ODM1OlsuMDg1NTYsLjU4NTU2LDAsMCwuODk0NDRdLDg4Mzg6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sODgzOTpbLjE5NjY3LC42OTY2NywwLDAsLjg5NDQ0XSw4ODQ2OlswLC41NTU1NiwwLDAsLjc2NjY2XSw4ODQ5OlsuMTk2NjcsLjY5NjY3LDAsMCwuODk0NDRdLDg4NTA6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sODg1MTpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODg1MjpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODg1MzpbLjEzMzMzLC42MzMzMywwLDAsLjg5NDQ0XSw4ODU0OlsuMTMzMzMsLjYzMzMzLDAsMCwuODk0NDRdLDg4NTU6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sODg1NjpbLjEzMzMzLC42MzMzMywwLDAsLjg5NDQ0XSw4ODU3OlsuMTMzMzMsLjYzMzMzLDAsMCwuODk0NDRdLDg4NjY6WzAsLjY5NDQ0LDAsMCwuNzAyNzddLDg4Njc6WzAsLjY5NDQ0LDAsMCwuNzAyNzddLDg4Njg6WzAsLjY5NDQ0LDAsMCwuODk0NDRdLDg4Njk6WzAsLjY5NDQ0LDAsMCwuODk0NDRdLDg5MDA6Wy0uMDI2MzksLjQ3MzYxLDAsMCwuNTc1XSw4OTAxOlstLjAyNjM5LC40NzM2MSwwLDAsLjMxOTQ0XSw4OTAyOlstLjAyNzc4LC40NzIyMiwwLDAsLjU3NV0sODk2ODpbLjI1LC43NSwwLDAsLjUxMTExXSw4OTY5OlsuMjUsLjc1LDAsMCwuNTExMTFdLDg5NzA6Wy4yNSwuNzUsMCwwLC41MTExMV0sODk3MTpbLjI1LC43NSwwLDAsLjUxMTExXSw4OTk0OlstLjEzODg5LC4zNjExMSwwLDAsMS4xNDk5OV0sODk5NTpbLS4xMzg4OSwuMzYxMTEsMCwwLDEuMTQ5OTldLDk2NTE6Wy4xOTQ0NCwuNjk0NDQsMCwwLDEuMDIyMjJdLDk2NTc6Wy0uMDI3NzgsLjQ3MjIyLDAsMCwuNTc1XSw5NjYxOlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjAyMjIyXSw5NjY3OlstLjAyNzc4LC40NzIyMiwwLDAsLjU3NV0sOTcxMTpbLjE5NDQ0LC42OTQ0NCwwLDAsMS4xNDk5OV0sOTgyNDpbLjEyOTYzLC42OTQ0NCwwLDAsLjg5NDQ0XSw5ODI1OlsuMTI5NjMsLjY5NDQ0LDAsMCwuODk0NDRdLDk4MjY6Wy4xMjk2MywuNjk0NDQsMCwwLC44OTQ0NF0sOTgyNzpbLjEyOTYzLC42OTQ0NCwwLDAsLjg5NDQ0XSw5ODM3OlswLC43NSwwLDAsLjQ0NzIyXSw5ODM4OlsuMTk0NDQsLjY5NDQ0LDAsMCwuNDQ3MjJdLDk4Mzk6Wy4xOTQ0NCwuNjk0NDQsMCwwLC40NDcyMl0sMTAyMTY6Wy4yNSwuNzUsMCwwLC40NDcyMl0sMTAyMTc6Wy4yNSwuNzUsMCwwLC40NDcyMl0sMTA4MTU6WzAsLjY4NjExLDAsMCwuOV0sMTA5Mjc6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sMTA5Mjg6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sNTczNzY6Wy4xOTQ0NCwuNjk0NDQsMCwwLDBdfSwiTWFpbi1Cb2xkSXRhbGljIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjk0NDQsLjExNDE3LDAsLjM4NjExXSwzNDpbMCwuNjk0NDQsLjA3OTM5LDAsLjYyMDU1XSwzNTpbLjE5NDQ0LC42OTQ0NCwuMDY4MzMsMCwuOTQ0NDRdLDM3OlsuMDU1NTYsLjc1LC4xMjg2MSwwLC45NDQ0NF0sMzg6WzAsLjY5NDQ0LC4wODUyOCwwLC44ODU1NV0sMzk6WzAsLjY5NDQ0LC4xMjk0NSwwLC4zNTU1NV0sNDA6Wy4yNSwuNzUsLjE1ODA2LDAsLjQ3MzMzXSw0MTpbLjI1LC43NSwuMDMzMDYsMCwuNDczMzNdLDQyOlswLC43NSwuMTQzMzMsMCwuNTkxMTFdLDQzOlsuMTAzMzMsLjYwMzMzLC4wMzMwNiwwLC44ODU1NV0sNDQ6Wy4xOTQ0NCwuMTQ3MjIsMCwwLC4zNTU1NV0sNDU6WzAsLjQ0NDQ0LC4wMjYxMSwwLC40MTQ0NF0sNDY6WzAsLjE0NzIyLDAsMCwuMzU1NTVdLDQ3OlsuMjUsLjc1LC4xNTgwNiwwLC41OTExMV0sNDg6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNDk6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNTA6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNTE6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNTI6Wy4xOTQ0NCwuNjQ0NDQsLjEzMTY3LDAsLjU5MTExXSw1MzpbMCwuNjQ0NDQsLjEzMTY3LDAsLjU5MTExXSw1NDpbMCwuNjQ0NDQsLjEzMTY3LDAsLjU5MTExXSw1NTpbLjE5NDQ0LC42NDQ0NCwuMTMxNjcsMCwuNTkxMTFdLDU2OlswLC42NDQ0NCwuMTMxNjcsMCwuNTkxMTFdLDU3OlswLC42NDQ0NCwuMTMxNjcsMCwuNTkxMTFdLDU4OlswLC40NDQ0NCwuMDY2OTUsMCwuMzU1NTVdLDU5OlsuMTk0NDQsLjQ0NDQ0LC4wNjY5NSwwLC4zNTU1NV0sNjE6Wy0uMTA4ODksLjM5MTExLC4wNjgzMywwLC44ODU1NV0sNjM6WzAsLjY5NDQ0LC4xMTQ3MiwwLC41OTExMV0sNjQ6WzAsLjY5NDQ0LC4wOTIwOCwwLC44ODU1NV0sNjU6WzAsLjY4NjExLDAsMCwuODY1NTVdLDY2OlswLC42ODYxMSwuMDk5MiwwLC44MTY2Nl0sNjc6WzAsLjY4NjExLC4xNDIwOCwwLC44MjY2Nl0sNjg6WzAsLjY4NjExLC4wOTA2MiwwLC44NzU1NV0sNjk6WzAsLjY4NjExLC4xMTQzMSwwLC43NTY2Nl0sNzA6WzAsLjY4NjExLC4xMjkwMywwLC43MjcyMl0sNzE6WzAsLjY4NjExLC4wNzM0NywwLC44OTUyN10sNzI6WzAsLjY4NjExLC4xNzIwOCwwLC44OTYxXSw3MzpbMCwuNjg2MTEsLjE1NjgxLDAsLjQ3MTY2XSw3NDpbMCwuNjg2MTEsLjE0NSwwLC42MTA1NV0sNzU6WzAsLjY4NjExLC4xNDIwOCwwLC44OTQ5OV0sNzY6WzAsLjY4NjExLDAsMCwuNjk3NzddLDc3OlswLC42ODYxMSwuMTcyMDgsMCwxLjA3Mjc3XSw3ODpbMCwuNjg2MTEsLjE3MjA4LDAsLjg5NjFdLDc5OlswLC42ODYxMSwuMDkwNjIsMCwuODU0OTldLDgwOlswLC42ODYxMSwuMDk5MiwwLC43ODcyMV0sODE6Wy4xOTQ0NCwuNjg2MTEsLjA5MDYyLDAsLjg1NDk5XSw4MjpbMCwuNjg2MTEsLjAyNTU5LDAsLjg1OTQ0XSw4MzpbMCwuNjg2MTEsLjExMjY0LDAsLjY0OTk5XSw4NDpbMCwuNjg2MTEsLjEyOTAzLDAsLjc5NjFdLDg1OlswLC42ODYxMSwuMTcyMDgsMCwuODgwODNdLDg2OlswLC42ODYxMSwuMTg2MjUsMCwuODY1NTVdLDg3OlswLC42ODYxMSwuMTg2MjUsMCwxLjE1OTk5XSw4ODpbMCwuNjg2MTEsLjE1NjgxLDAsLjg2NTU1XSw4OTpbMCwuNjg2MTEsLjE5ODAzLDAsLjg2NTU1XSw5MDpbMCwuNjg2MTEsLjE0MjA4LDAsLjcwODg4XSw5MTpbLjI1LC43NSwuMTg3NSwwLC4zNTYxMV0sOTM6Wy4yNSwuNzUsLjA5OTcyLDAsLjM1NjExXSw5NDpbMCwuNjk0NDQsLjA2NzA5LDAsLjU5MTExXSw5NTpbLjMxLC4xMzQ0NCwuMDk4MTEsMCwuNTkxMTFdLDk3OlswLC40NDQ0NCwuMDk0MjYsMCwuNTkxMTFdLDk4OlswLC42OTQ0NCwuMDc4NjEsMCwuNTMyMjJdLDk5OlswLC40NDQ0NCwuMDUyMjIsMCwuNTMyMjJdLDEwMDpbMCwuNjk0NDQsLjEwODYxLDAsLjU5MTExXSwxMDE6WzAsLjQ0NDQ0LC4wODUsMCwuNTMyMjJdLDEwMjpbLjE5NDQ0LC42OTQ0NCwuMjE3NzgsMCwuNF0sMTAzOlsuMTk0NDQsLjQ0NDQ0LC4xMDUsMCwuNTMyMjJdLDEwNDpbMCwuNjk0NDQsLjA5NDI2LDAsLjU5MTExXSwxMDU6WzAsLjY5MzI2LC4xMTM4NywwLC4zNTU1NV0sMTA2OlsuMTk0NDQsLjY5MzI2LC4xNjcyLDAsLjM1NTU1XSwxMDc6WzAsLjY5NDQ0LC4xMTExMSwwLC41MzIyMl0sMTA4OlswLC42OTQ0NCwuMTA4NjEsMCwuMjk2NjZdLDEwOTpbMCwuNDQ0NDQsLjA5NDI2LDAsLjk0NDQ0XSwxMTA6WzAsLjQ0NDQ0LC4wOTQyNiwwLC42NDk5OV0sMTExOlswLC40NDQ0NCwuMDc4NjEsMCwuNTkxMTFdLDExMjpbLjE5NDQ0LC40NDQ0NCwuMDc4NjEsMCwuNTkxMTFdLDExMzpbLjE5NDQ0LC40NDQ0NCwuMTA1LDAsLjUzMjIyXSwxMTQ6WzAsLjQ0NDQ0LC4xMTExMSwwLC41MDE2N10sMTE1OlswLC40NDQ0NCwuMDgxNjcsMCwuNDg2OTRdLDExNjpbMCwuNjM0OTIsLjA5NjM5LDAsLjM4NV0sMTE3OlswLC40NDQ0NCwuMDk0MjYsMCwuNjIwNTVdLDExODpbMCwuNDQ0NDQsLjExMTExLDAsLjUzMjIyXSwxMTk6WzAsLjQ0NDQ0LC4xMTExMSwwLC43Njc3N10sMTIwOlswLC40NDQ0NCwuMTI1ODMsMCwuNTYwNTVdLDEyMTpbLjE5NDQ0LC40NDQ0NCwuMTA1LDAsLjU2MTY2XSwxMjI6WzAsLjQ0NDQ0LC4xMzg4OSwwLC40OTA1NV0sMTI2OlsuMzUsLjM0NDQ0LC4xMTQ3MiwwLC41OTExMV0sMTYwOlswLDAsMCwwLC4yNV0sMTY4OlswLC42OTQ0NCwuMTE0NzMsMCwuNTkxMTFdLDE3NjpbMCwuNjk0NDQsMCwwLC45NDg4OF0sMTg0OlsuMTcwMTQsMCwwLDAsLjUzMjIyXSwxOTg6WzAsLjY4NjExLC4xMTQzMSwwLDEuMDIyNzddLDIxNjpbLjA0ODYxLC43MzQ3MiwuMDkwNjIsMCwuODg1NTVdLDIyMzpbLjE5NDQ0LC42OTQ0NCwuMDk3MzYsMCwuNjY1XSwyMzA6WzAsLjQ0NDQ0LC4wODUsMCwuODI2NjZdLDI0ODpbLjA5NzIyLC41NDE2NywuMDk0NTgsMCwuNTkxMTFdLDMwNTpbMCwuNDQ0NDQsLjA5NDI2LDAsLjM1NTU1XSwzMzg6WzAsLjY4NjExLC4xMTQzMSwwLDEuMTQwNTRdLDMzOTpbMCwuNDQ0NDQsLjA4NSwwLC44MjY2Nl0sNTY3OlsuMTk0NDQsLjQ0NDQ0LC4wNDYxMSwwLC4zODVdLDcxMDpbMCwuNjk0NDQsLjA2NzA5LDAsLjU5MTExXSw3MTE6WzAsLjYzMTk0LC4wODI3MSwwLC41OTExMV0sNzEzOlswLC41OTQ0NCwuMTA0NDQsMCwuNTkxMTFdLDcxNDpbMCwuNjk0NDQsLjA4NTI4LDAsLjU5MTExXSw3MTU6WzAsLjY5NDQ0LDAsMCwuNTkxMTFdLDcyODpbMCwuNjk0NDQsLjEwMzMzLDAsLjU5MTExXSw3Mjk6WzAsLjY5NDQ0LC4xMjk0NSwwLC4zNTU1NV0sNzMwOlswLC42OTQ0NCwwLDAsLjk0ODg4XSw3MzI6WzAsLjY5NDQ0LC4xMTQ3MiwwLC41OTExMV0sNzMzOlswLC42OTQ0NCwuMTE0NzIsMCwuNTkxMTFdLDkxNTpbMCwuNjg2MTEsLjEyOTAzLDAsLjY5Nzc3XSw5MTY6WzAsLjY4NjExLDAsMCwuOTQ0NDRdLDkyMDpbMCwuNjg2MTEsLjA5MDYyLDAsLjg4NTU1XSw5MjM6WzAsLjY4NjExLDAsMCwuODA2NjZdLDkyNjpbMCwuNjg2MTEsLjE1MDkyLDAsLjc2Nzc3XSw5Mjg6WzAsLjY4NjExLC4xNzIwOCwwLC44OTYxXSw5MzE6WzAsLjY4NjExLC4xMTQzMSwwLC44MjY2Nl0sOTMzOlswLC42ODYxMSwuMTA3NzgsMCwuODg1NTVdLDkzNDpbMCwuNjg2MTEsLjA1NjMyLDAsLjgyNjY2XSw5MzY6WzAsLjY4NjExLC4xMDc3OCwwLC44ODU1NV0sOTM3OlswLC42ODYxMSwuMDk5MiwwLC44MjY2Nl0sODIxMTpbMCwuNDQ0NDQsLjA5ODExLDAsLjU5MTExXSw4MjEyOlswLC40NDQ0NCwuMDk4MTEsMCwxLjE4MjIxXSw4MjE2OlswLC42OTQ0NCwuMTI5NDUsMCwuMzU1NTVdLDgyMTc6WzAsLjY5NDQ0LC4xMjk0NSwwLC4zNTU1NV0sODIyMDpbMCwuNjk0NDQsLjE2NzcyLDAsLjYyMDU1XSw4MjIxOlswLC42OTQ0NCwuMDc5MzksMCwuNjIwNTVdfSwiTWFpbi1JdGFsaWMiOnszMjpbMCwwLDAsMCwuMjVdLDMzOlswLC42OTQ0NCwuMTI0MTcsMCwuMzA2NjddLDM0OlswLC42OTQ0NCwuMDY5NjEsMCwuNTE0NDRdLDM1OlsuMTk0NDQsLjY5NDQ0LC4wNjYxNiwwLC44MTc3N10sMzc6Wy4wNTU1NiwuNzUsLjEzNjM5LDAsLjgxNzc3XSwzODpbMCwuNjk0NDQsLjA5Njk0LDAsLjc2NjY2XSwzOTpbMCwuNjk0NDQsLjEyNDE3LDAsLjMwNjY3XSw0MDpbLjI1LC43NSwuMTYxOTQsMCwuNDA4ODldLDQxOlsuMjUsLjc1LC4wMzY5NCwwLC40MDg4OV0sNDI6WzAsLjc1LC4xNDkxNywwLC41MTExMV0sNDM6Wy4wNTY2NywuNTYxNjcsLjAzNjk0LDAsLjc2NjY2XSw0NDpbLjE5NDQ0LC4xMDU1NiwwLDAsLjMwNjY3XSw0NTpbMCwuNDMwNTYsLjAyODI2LDAsLjM1Nzc4XSw0NjpbMCwuMTA1NTYsMCwwLC4zMDY2N10sNDc6Wy4yNSwuNzUsLjE2MTk0LDAsLjUxMTExXSw0ODpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw0OTpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw1MDpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw1MTpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw1MjpbLjE5NDQ0LC42NDQ0NCwuMTM1NTYsMCwuNTExMTFdLDUzOlswLC42NDQ0NCwuMTM1NTYsMCwuNTExMTFdLDU0OlswLC42NDQ0NCwuMTM1NTYsMCwuNTExMTFdLDU1OlsuMTk0NDQsLjY0NDQ0LC4xMzU1NiwwLC41MTExMV0sNTY6WzAsLjY0NDQ0LC4xMzU1NiwwLC41MTExMV0sNTc6WzAsLjY0NDQ0LC4xMzU1NiwwLC41MTExMV0sNTg6WzAsLjQzMDU2LC4wNTgyLDAsLjMwNjY3XSw1OTpbLjE5NDQ0LC40MzA1NiwuMDU4MiwwLC4zMDY2N10sNjE6Wy0uMTMzMTMsLjM2Njg3LC4wNjYxNiwwLC43NjY2Nl0sNjM6WzAsLjY5NDQ0LC4xMjI1LDAsLjUxMTExXSw2NDpbMCwuNjk0NDQsLjA5NTk3LDAsLjc2NjY2XSw2NTpbMCwuNjgzMzMsMCwwLC43NDMzM10sNjY6WzAsLjY4MzMzLC4xMDI1NywwLC43MDM4OV0sNjc6WzAsLjY4MzMzLC4xNDUyOCwwLC43MTU1NV0sNjg6WzAsLjY4MzMzLC4wOTQwMywwLC43NTVdLDY5OlswLC42ODMzMywuMTIwMjgsMCwuNjc4MzNdLDcwOlswLC42ODMzMywuMTMzMDUsMCwuNjUyNzddLDcxOlswLC42ODMzMywuMDg3MjIsMCwuNzczNjFdLDcyOlswLC42ODMzMywuMTYzODksMCwuNzQzMzNdLDczOlswLC42ODMzMywuMTU4MDYsMCwuMzg1NTVdLDc0OlswLC42ODMzMywuMTQwMjgsMCwuNTI1XSw3NTpbMCwuNjgzMzMsLjE0NTI4LDAsLjc2ODg4XSw3NjpbMCwuNjgzMzMsMCwwLC42MjcyMl0sNzc6WzAsLjY4MzMzLC4xNjM4OSwwLC44OTY2Nl0sNzg6WzAsLjY4MzMzLC4xNjM4OSwwLC43NDMzM10sNzk6WzAsLjY4MzMzLC4wOTQwMywwLC43NjY2Nl0sODA6WzAsLjY4MzMzLC4xMDI1NywwLC42NzgzM10sODE6Wy4xOTQ0NCwuNjgzMzMsLjA5NDAzLDAsLjc2NjY2XSw4MjpbMCwuNjgzMzMsLjAzODY4LDAsLjcyOTQ0XSw4MzpbMCwuNjgzMzMsLjExOTcyLDAsLjU2MjIyXSw4NDpbMCwuNjgzMzMsLjEzMzA1LDAsLjcxNTU1XSw4NTpbMCwuNjgzMzMsLjE2Mzg5LDAsLjc0MzMzXSw4NjpbMCwuNjgzMzMsLjE4MzYxLDAsLjc0MzMzXSw4NzpbMCwuNjgzMzMsLjE4MzYxLDAsLjk5ODg4XSw4ODpbMCwuNjgzMzMsLjE1ODA2LDAsLjc0MzMzXSw4OTpbMCwuNjgzMzMsLjE5MzgzLDAsLjc0MzMzXSw5MDpbMCwuNjgzMzMsLjE0NTI4LDAsLjYxMzMzXSw5MTpbLjI1LC43NSwuMTg3NSwwLC4zMDY2N10sOTM6Wy4yNSwuNzUsLjEwNTI4LDAsLjMwNjY3XSw5NDpbMCwuNjk0NDQsLjA2NjQ2LDAsLjUxMTExXSw5NTpbLjMxLC4xMjA1NiwuMDkyMDgsMCwuNTExMTFdLDk3OlswLC40MzA1NiwuMDc2NzEsMCwuNTExMTFdLDk4OlswLC42OTQ0NCwuMDYzMTIsMCwuNDZdLDk5OlswLC40MzA1NiwuMDU2NTMsMCwuNDZdLDEwMDpbMCwuNjk0NDQsLjEwMzMzLDAsLjUxMTExXSwxMDE6WzAsLjQzMDU2LC4wNzUxNCwwLC40Nl0sMTAyOlsuMTk0NDQsLjY5NDQ0LC4yMTE5NCwwLC4zMDY2N10sMTAzOlsuMTk0NDQsLjQzMDU2LC4wODg0NywwLC40Nl0sMTA0OlswLC42OTQ0NCwuMDc2NzEsMCwuNTExMTFdLDEwNTpbMCwuNjU1MzYsLjEwMTksMCwuMzA2NjddLDEwNjpbLjE5NDQ0LC42NTUzNiwuMTQ0NjcsMCwuMzA2NjddLDEwNzpbMCwuNjk0NDQsLjEwNzY0LDAsLjQ2XSwxMDg6WzAsLjY5NDQ0LC4xMDMzMywwLC4yNTU1NV0sMTA5OlswLC40MzA1NiwuMDc2NzEsMCwuODE3NzddLDExMDpbMCwuNDMwNTYsLjA3NjcxLDAsLjU2MjIyXSwxMTE6WzAsLjQzMDU2LC4wNjMxMiwwLC41MTExMV0sMTEyOlsuMTk0NDQsLjQzMDU2LC4wNjMxMiwwLC41MTExMV0sMTEzOlsuMTk0NDQsLjQzMDU2LC4wODg0NywwLC40Nl0sMTE0OlswLC40MzA1NiwuMTA3NjQsMCwuNDIxNjZdLDExNTpbMCwuNDMwNTYsLjA4MjA4LDAsLjQwODg5XSwxMTY6WzAsLjYxNTA4LC4wOTQ4NiwwLC4zMzIyMl0sMTE3OlswLC40MzA1NiwuMDc2NzEsMCwuNTM2NjZdLDExODpbMCwuNDMwNTYsLjEwNzY0LDAsLjQ2XSwxMTk6WzAsLjQzMDU2LC4xMDc2NCwwLC42NjQ0NF0sMTIwOlswLC40MzA1NiwuMTIwNDIsMCwuNDYzODldLDEyMTpbLjE5NDQ0LC40MzA1NiwuMDg4NDcsMCwuNDg1NTVdLDEyMjpbMCwuNDMwNTYsLjEyMjkyLDAsLjQwODg5XSwxMjY6Wy4zNSwuMzE3ODYsLjExNTg1LDAsLjUxMTExXSwxNjA6WzAsMCwwLDAsLjI1XSwxNjg6WzAsLjY2Nzg2LC4xMDQ3NCwwLC41MTExMV0sMTc2OlswLC42OTQ0NCwwLDAsLjgzMTI5XSwxODQ6Wy4xNzAxNCwwLDAsMCwuNDZdLDE5ODpbMCwuNjgzMzMsLjEyMDI4LDAsLjg4Mjc3XSwyMTY6Wy4wNDg2MSwuNzMxOTQsLjA5NDAzLDAsLjc2NjY2XSwyMjM6Wy4xOTQ0NCwuNjk0NDQsLjEwNTE0LDAsLjUzNjY2XSwyMzA6WzAsLjQzMDU2LC4wNzUxNCwwLC43MTU1NV0sMjQ4OlsuMDk3MjIsLjUyNzc4LC4wOTE5NCwwLC41MTExMV0sMzM4OlswLC42ODMzMywuMTIwMjgsMCwuOTg0OTldLDMzOTpbMCwuNDMwNTYsLjA3NTE0LDAsLjcxNTU1XSw3MTA6WzAsLjY5NDQ0LC4wNjY0NiwwLC41MTExMV0sNzExOlswLC42Mjg0NywuMDgyOTUsMCwuNTExMTFdLDcxMzpbMCwuNTYxNjcsLjEwMzMzLDAsLjUxMTExXSw3MTQ6WzAsLjY5NDQ0LC4wOTY5NCwwLC41MTExMV0sNzE1OlswLC42OTQ0NCwwLDAsLjUxMTExXSw3Mjg6WzAsLjY5NDQ0LC4xMDgwNiwwLC41MTExMV0sNzI5OlswLC42Njc4NiwuMTE3NTIsMCwuMzA2NjddLDczMDpbMCwuNjk0NDQsMCwwLC44MzEyOV0sNzMyOlswLC42Njc4NiwuMTE1ODUsMCwuNTExMTFdLDczMzpbMCwuNjk0NDQsLjEyMjUsMCwuNTExMTFdLDkxNTpbMCwuNjgzMzMsLjEzMzA1LDAsLjYyNzIyXSw5MTY6WzAsLjY4MzMzLDAsMCwuODE3NzddLDkyMDpbMCwuNjgzMzMsLjA5NDAzLDAsLjc2NjY2XSw5MjM6WzAsLjY4MzMzLDAsMCwuNjkyMjJdLDkyNjpbMCwuNjgzMzMsLjE1Mjk0LDAsLjY2NDQ0XSw5Mjg6WzAsLjY4MzMzLC4xNjM4OSwwLC43NDMzM10sOTMxOlswLC42ODMzMywuMTIwMjgsMCwuNzE1NTVdLDkzMzpbMCwuNjgzMzMsLjExMTExLDAsLjc2NjY2XSw5MzQ6WzAsLjY4MzMzLC4wNTk4NiwwLC43MTU1NV0sOTM2OlswLC42ODMzMywuMTExMTEsMCwuNzY2NjZdLDkzNzpbMCwuNjgzMzMsLjEwMjU3LDAsLjcxNTU1XSw4MjExOlswLC40MzA1NiwuMDkyMDgsMCwuNTExMTFdLDgyMTI6WzAsLjQzMDU2LC4wOTIwOCwwLDEuMDIyMjJdLDgyMTY6WzAsLjY5NDQ0LC4xMjQxNywwLC4zMDY2N10sODIxNzpbMCwuNjk0NDQsLjEyNDE3LDAsLjMwNjY3XSw4MjIwOlswLC42OTQ0NCwuMTY4NSwwLC41MTQ0NF0sODIyMTpbMCwuNjk0NDQsLjA2OTYxLDAsLjUxNDQ0XSw4NDYzOlswLC42ODg4OSwwLDAsLjU0MDI4XX0sIk1haW4tUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sMzM6WzAsLjY5NDQ0LDAsMCwuMjc3NzhdLDM0OlswLC42OTQ0NCwwLDAsLjVdLDM1OlsuMTk0NDQsLjY5NDQ0LDAsMCwuODMzMzRdLDM2OlsuMDU1NTYsLjc1LDAsMCwuNV0sMzc6Wy4wNTU1NiwuNzUsMCwwLC44MzMzNF0sMzg6WzAsLjY5NDQ0LDAsMCwuNzc3NzhdLDM5OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw0MDpbLjI1LC43NSwwLDAsLjM4ODg5XSw0MTpbLjI1LC43NSwwLDAsLjM4ODg5XSw0MjpbMCwuNzUsMCwwLC41XSw0MzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw0NDpbLjE5NDQ0LC4xMDU1NiwwLDAsLjI3Nzc4XSw0NTpbMCwuNDMwNTYsMCwwLC4zMzMzM10sNDY6WzAsLjEwNTU2LDAsMCwuMjc3NzhdLDQ3OlsuMjUsLjc1LDAsMCwuNV0sNDg6WzAsLjY0NDQ0LDAsMCwuNV0sNDk6WzAsLjY0NDQ0LDAsMCwuNV0sNTA6WzAsLjY0NDQ0LDAsMCwuNV0sNTE6WzAsLjY0NDQ0LDAsMCwuNV0sNTI6WzAsLjY0NDQ0LDAsMCwuNV0sNTM6WzAsLjY0NDQ0LDAsMCwuNV0sNTQ6WzAsLjY0NDQ0LDAsMCwuNV0sNTU6WzAsLjY0NDQ0LDAsMCwuNV0sNTY6WzAsLjY0NDQ0LDAsMCwuNV0sNTc6WzAsLjY0NDQ0LDAsMCwuNV0sNTg6WzAsLjQzMDU2LDAsMCwuMjc3NzhdLDU5OlsuMTk0NDQsLjQzMDU2LDAsMCwuMjc3NzhdLDYwOlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw2MTpbLS4xMzMxMywuMzY2ODcsMCwwLC43Nzc3OF0sNjI6Wy4wMzkxLC41MzkxLDAsMCwuNzc3NzhdLDYzOlswLC42OTQ0NCwwLDAsLjQ3MjIyXSw2NDpbMCwuNjk0NDQsMCwwLC43Nzc3OF0sNjU6WzAsLjY4MzMzLDAsMCwuNzVdLDY2OlswLC42ODMzMywwLDAsLjcwODM0XSw2NzpbMCwuNjgzMzMsMCwwLC43MjIyMl0sNjg6WzAsLjY4MzMzLDAsMCwuNzYzODldLDY5OlswLC42ODMzMywwLDAsLjY4MDU2XSw3MDpbMCwuNjgzMzMsMCwwLC42NTI3OF0sNzE6WzAsLjY4MzMzLDAsMCwuNzg0NzJdLDcyOlswLC42ODMzMywwLDAsLjc1XSw3MzpbMCwuNjgzMzMsMCwwLC4zNjExMV0sNzQ6WzAsLjY4MzMzLDAsMCwuNTEzODldLDc1OlswLC42ODMzMywwLDAsLjc3Nzc4XSw3NjpbMCwuNjgzMzMsMCwwLC42MjVdLDc3OlswLC42ODMzMywwLDAsLjkxNjY3XSw3ODpbMCwuNjgzMzMsMCwwLC43NV0sNzk6WzAsLjY4MzMzLDAsMCwuNzc3NzhdLDgwOlswLC42ODMzMywwLDAsLjY4MDU2XSw4MTpbLjE5NDQ0LC42ODMzMywwLDAsLjc3Nzc4XSw4MjpbMCwuNjgzMzMsMCwwLC43MzYxMV0sODM6WzAsLjY4MzMzLDAsMCwuNTU1NTZdLDg0OlswLC42ODMzMywwLDAsLjcyMjIyXSw4NTpbMCwuNjgzMzMsMCwwLC43NV0sODY6WzAsLjY4MzMzLC4wMTM4OSwwLC43NV0sODc6WzAsLjY4MzMzLC4wMTM4OSwwLDEuMDI3NzhdLDg4OlswLC42ODMzMywwLDAsLjc1XSw4OTpbMCwuNjgzMzMsLjAyNSwwLC43NV0sOTA6WzAsLjY4MzMzLDAsMCwuNjExMTFdLDkxOlsuMjUsLjc1LDAsMCwuMjc3NzhdLDkyOlsuMjUsLjc1LDAsMCwuNV0sOTM6Wy4yNSwuNzUsMCwwLC4yNzc3OF0sOTQ6WzAsLjY5NDQ0LDAsMCwuNV0sOTU6Wy4zMSwuMTIwNTYsLjAyNzc4LDAsLjVdLDk3OlswLC40MzA1NiwwLDAsLjVdLDk4OlswLC42OTQ0NCwwLDAsLjU1NTU2XSw5OTpbMCwuNDMwNTYsMCwwLC40NDQ0NV0sMTAwOlswLC42OTQ0NCwwLDAsLjU1NTU2XSwxMDE6WzAsLjQzMDU2LDAsMCwuNDQ0NDVdLDEwMjpbMCwuNjk0NDQsLjA3Nzc4LDAsLjMwNTU2XSwxMDM6Wy4xOTQ0NCwuNDMwNTYsLjAxMzg5LDAsLjVdLDEwNDpbMCwuNjk0NDQsMCwwLC41NTU1Nl0sMTA1OlswLC42Njc4NiwwLDAsLjI3Nzc4XSwxMDY6Wy4xOTQ0NCwuNjY3ODYsMCwwLC4zMDU1Nl0sMTA3OlswLC42OTQ0NCwwLDAsLjUyNzc4XSwxMDg6WzAsLjY5NDQ0LDAsMCwuMjc3NzhdLDEwOTpbMCwuNDMwNTYsMCwwLC44MzMzNF0sMTEwOlswLC40MzA1NiwwLDAsLjU1NTU2XSwxMTE6WzAsLjQzMDU2LDAsMCwuNV0sMTEyOlsuMTk0NDQsLjQzMDU2LDAsMCwuNTU1NTZdLDExMzpbLjE5NDQ0LC40MzA1NiwwLDAsLjUyNzc4XSwxMTQ6WzAsLjQzMDU2LDAsMCwuMzkxNjddLDExNTpbMCwuNDMwNTYsMCwwLC4zOTQ0NV0sMTE2OlswLC42MTUwOCwwLDAsLjM4ODg5XSwxMTc6WzAsLjQzMDU2LDAsMCwuNTU1NTZdLDExODpbMCwuNDMwNTYsLjAxMzg5LDAsLjUyNzc4XSwxMTk6WzAsLjQzMDU2LC4wMTM4OSwwLC43MjIyMl0sMTIwOlswLC40MzA1NiwwLDAsLjUyNzc4XSwxMjE6Wy4xOTQ0NCwuNDMwNTYsLjAxMzg5LDAsLjUyNzc4XSwxMjI6WzAsLjQzMDU2LDAsMCwuNDQ0NDVdLDEyMzpbLjI1LC43NSwwLDAsLjVdLDEyNDpbLjI1LC43NSwwLDAsLjI3Nzc4XSwxMjU6Wy4yNSwuNzUsMCwwLC41XSwxMjY6Wy4zNSwuMzE3ODYsMCwwLC41XSwxNjA6WzAsMCwwLDAsLjI1XSwxNjM6WzAsLjY5NDQ0LDAsMCwuNzY5MDldLDE2NzpbLjE5NDQ0LC42OTQ0NCwwLDAsLjQ0NDQ1XSwxNjg6WzAsLjY2Nzg2LDAsMCwuNV0sMTcyOlswLC40MzA1NiwwLDAsLjY2NjY3XSwxNzY6WzAsLjY5NDQ0LDAsMCwuNzVdLDE3NzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSwxODI6Wy4xOTQ0NCwuNjk0NDQsMCwwLC42MTExMV0sMTg0OlsuMTcwMTQsMCwwLDAsLjQ0NDQ1XSwxOTg6WzAsLjY4MzMzLDAsMCwuOTAyNzhdLDIxNTpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSwyMTY6Wy4wNDg2MSwuNzMxOTQsMCwwLC43Nzc3OF0sMjIzOlswLC42OTQ0NCwwLDAsLjVdLDIzMDpbMCwuNDMwNTYsMCwwLC43MjIyMl0sMjQ3OlsuMDgzMzMsLjU4MzMzLDAsMCwuNzc3NzhdLDI0ODpbLjA5NzIyLC41Mjc3OCwwLDAsLjVdLDMwNTpbMCwuNDMwNTYsMCwwLC4yNzc3OF0sMzM4OlswLC42ODMzMywwLDAsMS4wMTM4OV0sMzM5OlswLC40MzA1NiwwLDAsLjc3Nzc4XSw1Njc6Wy4xOTQ0NCwuNDMwNTYsMCwwLC4zMDU1Nl0sNzEwOlswLC42OTQ0NCwwLDAsLjVdLDcxMTpbMCwuNjI4NDcsMCwwLC41XSw3MTM6WzAsLjU2Nzc4LDAsMCwuNV0sNzE0OlswLC42OTQ0NCwwLDAsLjVdLDcxNTpbMCwuNjk0NDQsMCwwLC41XSw3Mjg6WzAsLjY5NDQ0LDAsMCwuNV0sNzI5OlswLC42Njc4NiwwLDAsLjI3Nzc4XSw3MzA6WzAsLjY5NDQ0LDAsMCwuNzVdLDczMjpbMCwuNjY3ODYsMCwwLC41XSw3MzM6WzAsLjY5NDQ0LDAsMCwuNV0sOTE1OlswLC42ODMzMywwLDAsLjYyNV0sOTE2OlswLC42ODMzMywwLDAsLjgzMzM0XSw5MjA6WzAsLjY4MzMzLDAsMCwuNzc3NzhdLDkyMzpbMCwuNjgzMzMsMCwwLC42OTQ0NV0sOTI2OlswLC42ODMzMywwLDAsLjY2NjY3XSw5Mjg6WzAsLjY4MzMzLDAsMCwuNzVdLDkzMTpbMCwuNjgzMzMsMCwwLC43MjIyMl0sOTMzOlswLC42ODMzMywwLDAsLjc3Nzc4XSw5MzQ6WzAsLjY4MzMzLDAsMCwuNzIyMjJdLDkzNjpbMCwuNjgzMzMsMCwwLC43Nzc3OF0sOTM3OlswLC42ODMzMywwLDAsLjcyMjIyXSw4MjExOlswLC40MzA1NiwuMDI3NzgsMCwuNV0sODIxMjpbMCwuNDMwNTYsLjAyNzc4LDAsMV0sODIxNjpbMCwuNjk0NDQsMCwwLC4yNzc3OF0sODIxNzpbMCwuNjk0NDQsMCwwLC4yNzc3OF0sODIyMDpbMCwuNjk0NDQsMCwwLC41XSw4MjIxOlswLC42OTQ0NCwwLDAsLjVdLDgyMjQ6Wy4xOTQ0NCwuNjk0NDQsMCwwLC40NDQ0NV0sODIyNTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjQ0NDQ1XSw4MjMwOlswLC4xMjMsMCwwLDEuMTcyXSw4MjQyOlswLC41NTU1NiwwLDAsLjI3NV0sODQwNzpbMCwuNzE0NDQsLjE1MzgyLDAsLjVdLDg0NjM6WzAsLjY4ODg5LDAsMCwuNTQwMjhdLDg0NjU6WzAsLjY5NDQ0LDAsMCwuNzIyMjJdLDg0Njc6WzAsLjY5NDQ0LDAsLjExMTExLC40MTY2N10sODQ3MjpbLjE5NDQ0LC40MzA1NiwwLC4xMTExMSwuNjM2NDZdLDg0NzY6WzAsLjY5NDQ0LDAsMCwuNzIyMjJdLDg1MDE6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDg1OTI6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NTkzOlsuMTk0NDQsLjY5NDQ0LDAsMCwuNV0sODU5NDpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg1OTU6Wy4xOTQ0NCwuNjk0NDQsMCwwLC41XSw4NTk2OlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODU5NzpbLjI1LC43NSwwLDAsLjVdLDg1OTg6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDg1OTk6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDg2MDA6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDg2MDE6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDg2MTQ6Wy4wMTEsLjUxMSwwLDAsMV0sODYxNzpbLjAxMSwuNTExLDAsMCwxLjEyNl0sODYxODpbLjAxMSwuNTExLDAsMCwxLjEyNl0sODYzNjpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2Mzc6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NjQwOlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODY0MTpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NTI6Wy4wMTEsLjY3MSwwLDAsMV0sODY1NjpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NTc6Wy4xOTQ0NCwuNjk0NDQsMCwwLC42MTExMV0sODY1ODpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NTk6Wy4xOTQ0NCwuNjk0NDQsMCwwLC42MTExMV0sODY2MDpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NjE6Wy4yNSwuNzUsMCwwLC42MTExMV0sODcwNDpbMCwuNjk0NDQsMCwwLC41NTU1Nl0sODcwNjpbMCwuNjk0NDQsLjA1NTU2LC4wODMzNCwuNTMwOV0sODcwNzpbMCwuNjk0NDQsMCwwLC41NTU1Nl0sODcwOTpbLjA1NTU2LC43NSwwLDAsLjVdLDg3MTE6WzAsLjY4MzMzLDAsMCwuODMzMzRdLDg3MTI6Wy4wMzkxLC41MzkxLDAsMCwuNjY2NjddLDg3MTU6Wy4wMzkxLC41MzkxLDAsMCwuNjY2NjddLDg3MjI6Wy4wODMzMywuNTgzMzMsMCwwLC43Nzc3OF0sODcyMzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw4NzI1OlsuMjUsLjc1LDAsMCwuNV0sODcyNjpbLjI1LC43NSwwLDAsLjVdLDg3Mjc6Wy0uMDM0NzIsLjQ2NTI4LDAsMCwuNV0sODcyODpbLS4wNTU1NSwuNDQ0NDUsMCwwLC41XSw4NzI5OlstLjA1NTU1LC40NDQ0NSwwLDAsLjVdLDg3MzA6Wy4yLC44LDAsMCwuODMzMzRdLDg3MzM6WzAsLjQzMDU2LDAsMCwuNzc3NzhdLDg3MzQ6WzAsLjQzMDU2LDAsMCwxXSw4NzM2OlswLC42OTIyNCwwLDAsLjcyMjIyXSw4NzM5OlsuMjUsLjc1LDAsMCwuMjc3NzhdLDg3NDE6Wy4yNSwuNzUsMCwwLC41XSw4NzQzOlswLC41NTU1NiwwLDAsLjY2NjY3XSw4NzQ0OlswLC41NTU1NiwwLDAsLjY2NjY3XSw4NzQ1OlswLC41NTU1NiwwLDAsLjY2NjY3XSw4NzQ2OlswLC41NTU1NiwwLDAsLjY2NjY3XSw4NzQ3OlsuMTk0NDQsLjY5NDQ0LC4xMTExMSwwLC40MTY2N10sODc2NDpbLS4xMzMxMywuMzY2ODcsMCwwLC43Nzc3OF0sODc2ODpbLjE5NDQ0LC42OTQ0NCwwLDAsLjI3Nzc4XSw4NzcxOlstLjAzNjI1LC40NjM3NSwwLDAsLjc3Nzc4XSw4NzczOlstLjAyMiwuNTg5LDAsMCwuNzc4XSw4Nzc2OlstLjAxNjg4LC40ODMxMiwwLDAsLjc3Nzc4XSw4NzgxOlstLjAzNjI1LC40NjM3NSwwLDAsLjc3Nzc4XSw4Nzg0OlstLjEzMywuNjczLDAsMCwuNzc4XSw4ODAxOlstLjAzNjI1LC40NjM3NSwwLDAsLjc3Nzc4XSw4ODA0OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4MDU6Wy4xMzU5NywuNjM1OTcsMCwwLC43Nzc3OF0sODgxMDpbLjAzOTEsLjUzOTEsMCwwLDFdLDg4MTE6Wy4wMzkxLC41MzkxLDAsMCwxXSw4ODI2OlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw4ODI3OlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw4ODM0OlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw4ODM1OlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw4ODM4OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4Mzk6Wy4xMzU5NywuNjM1OTcsMCwwLC43Nzc3OF0sODg0NjpbMCwuNTU1NTYsMCwwLC42NjY2N10sODg0OTpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSw4ODUwOlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4NTE6WzAsLjU1NTU2LDAsMCwuNjY2NjddLDg4NTI6WzAsLjU1NTU2LDAsMCwuNjY2NjddLDg4NTM6Wy4wODMzMywuNTgzMzMsMCwwLC43Nzc3OF0sODg1NDpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw4ODU1OlsuMDgzMzMsLjU4MzMzLDAsMCwuNzc3NzhdLDg4NTY6Wy4wODMzMywuNTgzMzMsMCwwLC43Nzc3OF0sODg1NzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw4ODY2OlswLC42OTQ0NCwwLDAsLjYxMTExXSw4ODY3OlswLC42OTQ0NCwwLDAsLjYxMTExXSw4ODY4OlswLC42OTQ0NCwwLDAsLjc3Nzc4XSw4ODY5OlswLC42OTQ0NCwwLDAsLjc3Nzc4XSw4ODcyOlsuMjQ5LC43NSwwLDAsLjg2N10sODkwMDpbLS4wNTU1NSwuNDQ0NDUsMCwwLC41XSw4OTAxOlstLjA1NTU1LC40NDQ0NSwwLDAsLjI3Nzc4XSw4OTAyOlstLjAzNDcyLC40NjUyOCwwLDAsLjVdLDg5MDQ6Wy4wMDUsLjUwNSwwLDAsLjldLDg5NDI6Wy4wMywuOTAzLDAsMCwuMjc4XSw4OTQzOlstLjE5LC4zMTMsMCwwLDEuMTcyXSw4OTQ1OlstLjEsLjgyMywwLDAsMS4yODJdLDg5Njg6Wy4yNSwuNzUsMCwwLC40NDQ0NV0sODk2OTpbLjI1LC43NSwwLDAsLjQ0NDQ1XSw4OTcwOlsuMjUsLjc1LDAsMCwuNDQ0NDVdLDg5NzE6Wy4yNSwuNzUsMCwwLC40NDQ0NV0sODk5NDpbLS4xNDIzNiwuMzU3NjQsMCwwLDFdLDg5OTU6Wy0uMTQyMzYsLjM1NzY0LDAsMCwxXSw5MTM2OlsuMjQ0LC43NDQsMCwwLC40MTJdLDkxMzc6Wy4yNDQsLjc0NSwwLDAsLjQxMl0sOTY1MTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjg4ODg5XSw5NjU3OlstLjAzNDcyLC40NjUyOCwwLDAsLjVdLDk2NjE6Wy4xOTQ0NCwuNjk0NDQsMCwwLC44ODg4OV0sOTY2NzpbLS4wMzQ3MiwuNDY1MjgsMCwwLC41XSw5NzExOlsuMTk0NDQsLjY5NDQ0LDAsMCwxXSw5ODI0OlsuMTI5NjMsLjY5NDQ0LDAsMCwuNzc3NzhdLDk4MjU6Wy4xMjk2MywuNjk0NDQsMCwwLC43Nzc3OF0sOTgyNjpbLjEyOTYzLC42OTQ0NCwwLDAsLjc3Nzc4XSw5ODI3OlsuMTI5NjMsLjY5NDQ0LDAsMCwuNzc3NzhdLDk4Mzc6WzAsLjc1LDAsMCwuMzg4ODldLDk4Mzg6Wy4xOTQ0NCwuNjk0NDQsMCwwLC4zODg4OV0sOTgzOTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjM4ODg5XSwxMDIxNjpbLjI1LC43NSwwLDAsLjM4ODg5XSwxMDIxNzpbLjI1LC43NSwwLDAsLjM4ODg5XSwxMDIyMjpbLjI0NCwuNzQ0LDAsMCwuNDEyXSwxMDIyMzpbLjI0NCwuNzQ1LDAsMCwuNDEyXSwxMDIyOTpbLjAxMSwuNTExLDAsMCwxLjYwOV0sMTAyMzA6Wy4wMTEsLjUxMSwwLDAsMS42MzhdLDEwMjMxOlsuMDExLC41MTEsMCwwLDEuODU5XSwxMDIzMjpbLjAyNCwuNTI1LDAsMCwxLjYwOV0sMTAyMzM6Wy4wMjQsLjUyNSwwLDAsMS42MzhdLDEwMjM0OlsuMDI0LC41MjUsMCwwLDEuODU4XSwxMDIzNjpbLjAxMSwuNTExLDAsMCwxLjYzOF0sMTA4MTU6WzAsLjY4MzMzLDAsMCwuNzVdLDEwOTI3OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDEwOTI4OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDU3Mzc2OlsuMTk0NDQsLjY5NDQ0LDAsMCwwXX0sIk1hdGgtQm9sZEl0YWxpYyI6ezMyOlswLDAsMCwwLC4yNV0sNDg6WzAsLjQ0NDQ0LDAsMCwuNTc1XSw0OTpbMCwuNDQ0NDQsMCwwLC41NzVdLDUwOlswLC40NDQ0NCwwLDAsLjU3NV0sNTE6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC41NzVdLDUyOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNTc1XSw1MzpbLjE5NDQ0LC40NDQ0NCwwLDAsLjU3NV0sNTQ6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1NTpbLjE5NDQ0LC40NDQ0NCwwLDAsLjU3NV0sNTY6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1NzpbLjE5NDQ0LC40NDQ0NCwwLDAsLjU3NV0sNjU6WzAsLjY4NjExLDAsMCwuODY5NDRdLDY2OlswLC42ODYxMSwuMDQ4MzUsMCwuODY2NF0sNjc6WzAsLjY4NjExLC4wNjk3OSwwLC44MTY5NF0sNjg6WzAsLjY4NjExLC4wMzE5NCwwLC45MzgxMl0sNjk6WzAsLjY4NjExLC4wNTQ1MSwwLC44MTAwN10sNzA6WzAsLjY4NjExLC4xNTk3MiwwLC42ODg4OV0sNzE6WzAsLjY4NjExLDAsMCwuODg2NzNdLDcyOlswLC42ODYxMSwuMDgyMjksMCwuOTgyMjldLDczOlswLC42ODYxMSwuMDc3NzgsMCwuNTExMTFdLDc0OlswLC42ODYxMSwuMTAwNjksMCwuNjMxMjVdLDc1OlswLC42ODYxMSwuMDY5NzksMCwuOTcxMThdLDc2OlswLC42ODYxMSwwLDAsLjc1NTU1XSw3NzpbMCwuNjg2MTEsLjExNDI0LDAsMS4xNDIwMV0sNzg6WzAsLjY4NjExLC4xMTQyNCwwLC45NTAzNF0sNzk6WzAsLjY4NjExLC4wMzE5NCwwLC44MzY2Nl0sODA6WzAsLjY4NjExLC4xNTk3MiwwLC43MjMwOV0sODE6Wy4xOTQ0NCwuNjg2MTEsMCwwLC44Njg2MV0sODI6WzAsLjY4NjExLC4wMDQyMSwwLC44NzIzNV0sODM6WzAsLjY4NjExLC4wNTM4MiwwLC42OTI3MV0sODQ6WzAsLjY4NjExLC4xNTk3MiwwLC42MzY2M10sODU6WzAsLjY4NjExLC4xMTQyNCwwLC44MDAyN10sODY6WzAsLjY4NjExLC4yNTU1NSwwLC42Nzc3OF0sODc6WzAsLjY4NjExLC4xNTk3MiwwLDEuMDkzMDVdLDg4OlswLC42ODYxMSwuMDc3NzgsMCwuOTQ3MjJdLDg5OlswLC42ODYxMSwuMjU1NTUsMCwuNjc0NThdLDkwOlswLC42ODYxMSwuMDY5NzksMCwuNzcyNTddLDk3OlswLC40NDQ0NCwwLDAsLjYzMjg3XSw5ODpbMCwuNjk0NDQsMCwwLC41MjA4M10sOTk6WzAsLjQ0NDQ0LDAsMCwuNTEzNDJdLDEwMDpbMCwuNjk0NDQsMCwwLC42MDk3Ml0sMTAxOlswLC40NDQ0NCwwLDAsLjU1MzYxXSwxMDI6Wy4xOTQ0NCwuNjk0NDQsLjExMDQyLDAsLjU2ODA2XSwxMDM6Wy4xOTQ0NCwuNDQ0NDQsLjAzNzA0LDAsLjU0NDldLDEwNDpbMCwuNjk0NDQsMCwwLC42Njc1OV0sMTA1OlswLC42OTMyNiwwLDAsLjQwNDhdLDEwNjpbLjE5NDQ0LC42OTMyNiwuMDYyMiwwLC40NzA4M10sMTA3OlswLC42OTQ0NCwuMDE4NTIsMCwuNjAzN10sMTA4OlswLC42OTQ0NCwuMDA4OCwwLC4zNDgxNV0sMTA5OlswLC40NDQ0NCwwLDAsMS4wMzI0XSwxMTA6WzAsLjQ0NDQ0LDAsMCwuNzEyOTZdLDExMTpbMCwuNDQ0NDQsMCwwLC41ODQ3Ml0sMTEyOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNjAwOTJdLDExMzpbLjE5NDQ0LC40NDQ0NCwuMDM3MDQsMCwuNTQyMTNdLDExNDpbMCwuNDQ0NDQsLjAzMTk0LDAsLjUyODddLDExNTpbMCwuNDQ0NDQsMCwwLC41MzEyNV0sMTE2OlswLC42MzQ5MiwwLDAsLjQxNTI4XSwxMTc6WzAsLjQ0NDQ0LDAsMCwuNjgxMDJdLDExODpbMCwuNDQ0NDQsLjAzNzA0LDAsLjU2NjY2XSwxMTk6WzAsLjQ0NDQ0LC4wMjc3OCwwLC44MzE0OF0sMTIwOlswLC40NDQ0NCwwLDAsLjY1OTAzXSwxMjE6Wy4xOTQ0NCwuNDQ0NDQsLjAzNzA0LDAsLjU5MDI4XSwxMjI6WzAsLjQ0NDQ0LC4wNDIxMywwLC41NTUwOV0sMTYwOlswLDAsMCwwLC4yNV0sOTE1OlswLC42ODYxMSwuMTU5NzIsMCwuNjU2OTRdLDkxNjpbMCwuNjg2MTEsMCwwLC45NTgzM10sOTIwOlswLC42ODYxMSwuMDMxOTQsMCwuODY3MjJdLDkyMzpbMCwuNjg2MTEsMCwwLC44MDU1NV0sOTI2OlswLC42ODYxMSwuMDc0NTgsMCwuODQxMjVdLDkyODpbMCwuNjg2MTEsLjA4MjI5LDAsLjk4MjI5XSw5MzE6WzAsLjY4NjExLC4wNTQ1MSwwLC44ODUwN10sOTMzOlswLC42ODYxMSwuMTU5NzIsMCwuNjcwODNdLDkzNDpbMCwuNjg2MTEsMCwwLC43NjY2Nl0sOTM2OlswLC42ODYxMSwuMTE2NTMsMCwuNzE0MDJdLDkzNzpbMCwuNjg2MTEsLjA0ODM1LDAsLjg3ODldLDk0NTpbMCwuNDQ0NDQsMCwwLC43NjA2NF0sOTQ2OlsuMTk0NDQsLjY5NDQ0LC4wMzQwMywwLC42NTk3Ml0sOTQ3OlsuMTk0NDQsLjQ0NDQ0LC4wNjM4OSwwLC41OTAwM10sOTQ4OlswLC42OTQ0NCwuMDM4MTksMCwuNTIyMjJdLDk0OTpbMCwuNDQ0NDQsMCwwLC41Mjg4Ml0sOTUwOlsuMTk0NDQsLjY5NDQ0LC4wNjIxNSwwLC41MDgzM10sOTUxOlsuMTk0NDQsLjQ0NDQ0LC4wMzcwNCwwLC42XSw5NTI6WzAsLjY5NDQ0LC4wMzE5NCwwLC41NjE4XSw5NTM6WzAsLjQ0NDQ0LDAsMCwuNDEyMDRdLDk1NDpbMCwuNDQ0NDQsMCwwLC42Njc1OV0sOTU1OlswLC42OTQ0NCwwLDAsLjY3MDgzXSw5NTY6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC43MDc4N10sOTU3OlswLC40NDQ0NCwuMDY4OTgsMCwuNTc2ODVdLDk1ODpbLjE5NDQ0LC42OTQ0NCwuMDMwMjEsMCwuNTA4MzNdLDk1OTpbMCwuNDQ0NDQsMCwwLC41ODQ3Ml0sOTYwOlswLC40NDQ0NCwuMDM3MDQsMCwuNjgyNDFdLDk2MTpbLjE5NDQ0LC40NDQ0NCwwLDAsLjYxMThdLDk2MjpbLjA5NzIyLC40NDQ0NCwuMDc5MTcsMCwuNDIzNjFdLDk2MzpbMCwuNDQ0NDQsLjAzNzA0LDAsLjY4NTg4XSw5NjQ6WzAsLjQ0NDQ0LC4xMzQ3MiwwLC41MjA4M10sOTY1OlswLC40NDQ0NCwuMDM3MDQsMCwuNjMwNTVdLDk2NjpbLjE5NDQ0LC40NDQ0NCwwLDAsLjc0NzIyXSw5Njc6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC43MTgwNV0sOTY4OlsuMTk0NDQsLjY5NDQ0LC4wMzcwNCwwLC43NTgzM10sOTY5OlswLC40NDQ0NCwuMDM3MDQsMCwuNzE3ODJdLDk3NzpbMCwuNjk0NDQsMCwwLC42OTE1NV0sOTgxOlsuMTk0NDQsLjY5NDQ0LDAsMCwuNzEyNV0sOTgyOlswLC40NDQ0NCwuMDMxOTQsMCwuOTc1XSwxMDA5OlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNjExOF0sMTAxMzpbMCwuNDQ0NDQsMCwwLC40ODMzM10sNTc2NDk6WzAsLjQ0NDQ0LDAsMCwuMzkzNTJdLDU3OTExOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNDM4ODldfSwiTWF0aC1JdGFsaWMiOnszMjpbMCwwLDAsMCwuMjVdLDQ4OlswLC40MzA1NiwwLDAsLjVdLDQ5OlswLC40MzA1NiwwLDAsLjVdLDUwOlswLC40MzA1NiwwLDAsLjVdLDUxOlsuMTk0NDQsLjQzMDU2LDAsMCwuNV0sNTI6Wy4xOTQ0NCwuNDMwNTYsMCwwLC41XSw1MzpbLjE5NDQ0LC40MzA1NiwwLDAsLjVdLDU0OlswLC42NDQ0NCwwLDAsLjVdLDU1OlsuMTk0NDQsLjQzMDU2LDAsMCwuNV0sNTY6WzAsLjY0NDQ0LDAsMCwuNV0sNTc6Wy4xOTQ0NCwuNDMwNTYsMCwwLC41XSw2NTpbMCwuNjgzMzMsMCwuMTM4ODksLjc1XSw2NjpbMCwuNjgzMzMsLjA1MDE3LC4wODMzNCwuNzU4NTFdLDY3OlswLC42ODMzMywuMDcxNTMsLjA4MzM0LC43MTQ3Ml0sNjg6WzAsLjY4MzMzLC4wMjc3OCwuMDU1NTYsLjgyNzkyXSw2OTpbMCwuNjgzMzMsLjA1NzY0LC4wODMzNCwuNzM4Ml0sNzA6WzAsLjY4MzMzLC4xMzg4OSwuMDgzMzQsLjY0MzA2XSw3MTpbMCwuNjgzMzMsMCwuMDgzMzQsLjc4NjI1XSw3MjpbMCwuNjgzMzMsLjA4MTI1LC4wNTU1NiwuODMxMjVdLDczOlswLC42ODMzMywuMDc4NDcsLjExMTExLC40Mzk1OF0sNzQ6WzAsLjY4MzMzLC4wOTYxOCwuMTY2NjcsLjU1NDUxXSw3NTpbMCwuNjgzMzMsLjA3MTUzLC4wNTU1NiwuODQ5MzFdLDc2OlswLC42ODMzMywwLC4wMjc3OCwuNjgwNTZdLDc3OlswLC42ODMzMywuMTA5MDMsLjA4MzM0LC45NzAxNF0sNzg6WzAsLjY4MzMzLC4xMDkwMywuMDgzMzQsLjgwMzQ3XSw3OTpbMCwuNjgzMzMsLjAyNzc4LC4wODMzNCwuNzYyNzhdLDgwOlswLC42ODMzMywuMTM4ODksLjA4MzM0LC42NDIwMV0sODE6Wy4xOTQ0NCwuNjgzMzMsMCwuMDgzMzQsLjc5MDU2XSw4MjpbMCwuNjgzMzMsLjAwNzczLC4wODMzNCwuNzU5MjldLDgzOlswLC42ODMzMywuMDU3NjQsLjA4MzM0LC42MTMyXSw4NDpbMCwuNjgzMzMsLjEzODg5LC4wODMzNCwuNTg0MzhdLDg1OlswLC42ODMzMywuMTA5MDMsLjAyNzc4LC42ODI3OF0sODY6WzAsLjY4MzMzLC4yMjIyMiwwLC41ODMzM10sODc6WzAsLjY4MzMzLC4xMzg4OSwwLC45NDQ0NV0sODg6WzAsLjY4MzMzLC4wNzg0NywuMDgzMzQsLjgyODQ3XSw4OTpbMCwuNjgzMzMsLjIyMjIyLDAsLjU4MDU2XSw5MDpbMCwuNjgzMzMsLjA3MTUzLC4wODMzNCwuNjgyNjRdLDk3OlswLC40MzA1NiwwLDAsLjUyODU5XSw5ODpbMCwuNjk0NDQsMCwwLC40MjkxN10sOTk6WzAsLjQzMDU2LDAsLjA1NTU2LC40MzI3Nl0sMTAwOlswLC42OTQ0NCwwLC4xNjY2NywuNTIwNDldLDEwMTpbMCwuNDMwNTYsMCwuMDU1NTYsLjQ2NTYzXSwxMDI6Wy4xOTQ0NCwuNjk0NDQsLjEwNzY0LC4xNjY2NywuNDg5NTldLDEwMzpbLjE5NDQ0LC40MzA1NiwuMDM1ODgsLjAyNzc4LC40NzY5N10sMTA0OlswLC42OTQ0NCwwLDAsLjU3NjE2XSwxMDU6WzAsLjY1OTUyLDAsMCwuMzQ0NTFdLDEwNjpbLjE5NDQ0LC42NTk1MiwuMDU3MjQsMCwuNDExODFdLDEwNzpbMCwuNjk0NDQsLjAzMTQ4LDAsLjUyMDZdLDEwODpbMCwuNjk0NDQsLjAxOTY4LC4wODMzNCwuMjk4MzhdLDEwOTpbMCwuNDMwNTYsMCwwLC44NzgwMV0sMTEwOlswLC40MzA1NiwwLDAsLjYwMDIzXSwxMTE6WzAsLjQzMDU2LDAsLjA1NTU2LC40ODQ3Ml0sMTEyOlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC41MDMxM10sMTEzOlsuMTk0NDQsLjQzMDU2LC4wMzU4OCwuMDgzMzQsLjQ0NjQxXSwxMTQ6WzAsLjQzMDU2LC4wMjc3OCwuMDU1NTYsLjQ1MTE2XSwxMTU6WzAsLjQzMDU2LDAsLjA1NTU2LC40Njg3NV0sMTE2OlswLC42MTUwOCwwLC4wODMzNCwuMzYxMTFdLDExNzpbMCwuNDMwNTYsMCwuMDI3NzgsLjU3MjQ2XSwxMTg6WzAsLjQzMDU2LC4wMzU4OCwuMDI3NzgsLjQ4NDcyXSwxMTk6WzAsLjQzMDU2LC4wMjY5MSwuMDgzMzQsLjcxNTkyXSwxMjA6WzAsLjQzMDU2LDAsLjAyNzc4LC41NzE1M10sMTIxOlsuMTk0NDQsLjQzMDU2LC4wMzU4OCwuMDU1NTYsLjQ5MDI4XSwxMjI6WzAsLjQzMDU2LC4wNDM5OCwuMDU1NTYsLjQ2NTA1XSwxNjA6WzAsMCwwLDAsLjI1XSw5MTU6WzAsLjY4MzMzLC4xMzg4OSwuMDgzMzQsLjYxNTI4XSw5MTY6WzAsLjY4MzMzLDAsLjE2NjY3LC44MzMzNF0sOTIwOlswLC42ODMzMywuMDI3NzgsLjA4MzM0LC43NjI3OF0sOTIzOlswLC42ODMzMywwLC4xNjY2NywuNjk0NDVdLDkyNjpbMCwuNjgzMzMsLjA3NTY5LC4wODMzNCwuNzQyMzZdLDkyODpbMCwuNjgzMzMsLjA4MTI1LC4wNTU1NiwuODMxMjVdLDkzMTpbMCwuNjgzMzMsLjA1NzY0LC4wODMzNCwuNzc5ODZdLDkzMzpbMCwuNjgzMzMsLjEzODg5LC4wNTU1NiwuNTgzMzNdLDkzNDpbMCwuNjgzMzMsMCwuMDgzMzQsLjY2NjY3XSw5MzY6WzAsLjY4MzMzLC4xMSwuMDU1NTYsLjYxMjIyXSw5Mzc6WzAsLjY4MzMzLC4wNTAxNywuMDgzMzQsLjc3MjRdLDk0NTpbMCwuNDMwNTYsLjAwMzcsLjAyNzc4LC42Mzk3XSw5NDY6Wy4xOTQ0NCwuNjk0NDQsLjA1Mjc4LC4wODMzNCwuNTY1NjNdLDk0NzpbLjE5NDQ0LC40MzA1NiwuMDU1NTYsMCwuNTE3NzNdLDk0ODpbMCwuNjk0NDQsLjAzNzg1LC4wNTU1NiwuNDQ0NDRdLDk0OTpbMCwuNDMwNTYsMCwuMDgzMzQsLjQ2NjMyXSw5NTA6Wy4xOTQ0NCwuNjk0NDQsLjA3Mzc4LC4wODMzNCwuNDM3NV0sOTUxOlsuMTk0NDQsLjQzMDU2LC4wMzU4OCwuMDU1NTYsLjQ5NjUzXSw5NTI6WzAsLjY5NDQ0LC4wMjc3OCwuMDgzMzQsLjQ2OTQ0XSw5NTM6WzAsLjQzMDU2LDAsLjA1NTU2LC4zNTM5NF0sOTU0OlswLC40MzA1NiwwLDAsLjU3NjE2XSw5NTU6WzAsLjY5NDQ0LDAsMCwuNTgzMzRdLDk1NjpbLjE5NDQ0LC40MzA1NiwwLC4wMjc3OCwuNjAyNTVdLDk1NzpbMCwuNDMwNTYsLjA2MzY2LC4wMjc3OCwuNDkzOThdLDk1ODpbLjE5NDQ0LC42OTQ0NCwuMDQ2MDEsLjExMTExLC40Mzc1XSw5NTk6WzAsLjQzMDU2LDAsLjA1NTU2LC40ODQ3Ml0sOTYwOlswLC40MzA1NiwuMDM1ODgsMCwuNTcwMDNdLDk2MTpbLjE5NDQ0LC40MzA1NiwwLC4wODMzNCwuNTE3MDJdLDk2MjpbLjA5NzIyLC40MzA1NiwuMDc5ODYsLjA4MzM0LC4zNjI4NV0sOTYzOlswLC40MzA1NiwuMDM1ODgsMCwuNTcxNDFdLDk2NDpbMCwuNDMwNTYsLjExMzIsLjAyNzc4LC40MzcxNV0sOTY1OlswLC40MzA1NiwuMDM1ODgsLjAyNzc4LC41NDAyOF0sOTY2OlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC42NTQxN10sOTY3OlsuMTk0NDQsLjQzMDU2LDAsLjA1NTU2LC42MjU2OV0sOTY4OlsuMTk0NDQsLjY5NDQ0LC4wMzU4OCwuMTExMTEsLjY1MTM5XSw5Njk6WzAsLjQzMDU2LC4wMzU4OCwwLC42MjI0NV0sOTc3OlswLC42OTQ0NCwwLC4wODMzNCwuNTkxNDRdLDk4MTpbLjE5NDQ0LC42OTQ0NCwwLC4wODMzNCwuNTk1ODNdLDk4MjpbMCwuNDMwNTYsLjAyNzc4LDAsLjgyODEzXSwxMDA5OlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC41MTcwMl0sMTAxMzpbMCwuNDMwNTYsMCwuMDU1NTYsLjQwNTldLDU3NjQ5OlswLC40MzA1NiwwLC4wMjc3OCwuMzIyNDZdLDU3OTExOlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC4zODQwM119LCJTYW5zU2VyaWYtQm9sZCI6ezMyOlswLDAsMCwwLC4yNV0sMzM6WzAsLjY5NDQ0LDAsMCwuMzY2NjddLDM0OlswLC42OTQ0NCwwLDAsLjU1ODM0XSwzNTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjkxNjY3XSwzNjpbLjA1NTU2LC43NSwwLDAsLjU1XSwzNzpbLjA1NTU2LC43NSwwLDAsMS4wMjkxMl0sMzg6WzAsLjY5NDQ0LDAsMCwuODMwNTZdLDM5OlswLC42OTQ0NCwwLDAsLjMwNTU2XSw0MDpbLjI1LC43NSwwLDAsLjQyNzc4XSw0MTpbLjI1LC43NSwwLDAsLjQyNzc4XSw0MjpbMCwuNzUsMCwwLC41NV0sNDM6Wy4xMTY2NywuNjE2NjcsMCwwLC44NTU1Nl0sNDQ6Wy4xMDU1NiwuMTMwNTYsMCwwLC4zMDU1Nl0sNDU6WzAsLjQ1ODMzLDAsMCwuMzY2NjddLDQ2OlswLC4xMzA1NiwwLDAsLjMwNTU2XSw0NzpbLjI1LC43NSwwLDAsLjU1XSw0ODpbMCwuNjk0NDQsMCwwLC41NV0sNDk6WzAsLjY5NDQ0LDAsMCwuNTVdLDUwOlswLC42OTQ0NCwwLDAsLjU1XSw1MTpbMCwuNjk0NDQsMCwwLC41NV0sNTI6WzAsLjY5NDQ0LDAsMCwuNTVdLDUzOlswLC42OTQ0NCwwLDAsLjU1XSw1NDpbMCwuNjk0NDQsMCwwLC41NV0sNTU6WzAsLjY5NDQ0LDAsMCwuNTVdLDU2OlswLC42OTQ0NCwwLDAsLjU1XSw1NzpbMCwuNjk0NDQsMCwwLC41NV0sNTg6WzAsLjQ1ODMzLDAsMCwuMzA1NTZdLDU5OlsuMTA1NTYsLjQ1ODMzLDAsMCwuMzA1NTZdLDYxOlstLjA5Mzc1LC40MDYyNSwwLDAsLjg1NTU2XSw2MzpbMCwuNjk0NDQsMCwwLC41MTk0NV0sNjQ6WzAsLjY5NDQ0LDAsMCwuNzMzMzRdLDY1OlswLC42OTQ0NCwwLDAsLjczMzM0XSw2NjpbMCwuNjk0NDQsMCwwLC43MzMzNF0sNjc6WzAsLjY5NDQ0LDAsMCwuNzAyNzhdLDY4OlswLC42OTQ0NCwwLDAsLjc5NDQ1XSw2OTpbMCwuNjk0NDQsMCwwLC42NDE2N10sNzA6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDcxOlswLC42OTQ0NCwwLDAsLjczMzM0XSw3MjpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sNzM6WzAsLjY5NDQ0LDAsMCwuMzMwNTZdLDc0OlswLC42OTQ0NCwwLDAsLjUxOTQ1XSw3NTpbMCwuNjk0NDQsMCwwLC43NjM4OV0sNzY6WzAsLjY5NDQ0LDAsMCwuNTgwNTZdLDc3OlswLC42OTQ0NCwwLDAsLjk3Nzc4XSw3ODpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sNzk6WzAsLjY5NDQ0LDAsMCwuNzk0NDVdLDgwOlswLC42OTQ0NCwwLDAsLjcwMjc4XSw4MTpbLjEwNTU2LC42OTQ0NCwwLDAsLjc5NDQ1XSw4MjpbMCwuNjk0NDQsMCwwLC43MDI3OF0sODM6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDg0OlswLC42OTQ0NCwwLDAsLjczMzM0XSw4NTpbMCwuNjk0NDQsMCwwLC43NjM4OV0sODY6WzAsLjY5NDQ0LC4wMTUyOCwwLC43MzMzNF0sODc6WzAsLjY5NDQ0LC4wMTUyOCwwLDEuMDM4ODldLDg4OlswLC42OTQ0NCwwLDAsLjczMzM0XSw4OTpbMCwuNjk0NDQsLjAyNzUsMCwuNzMzMzRdLDkwOlswLC42OTQ0NCwwLDAsLjY3MjIzXSw5MTpbLjI1LC43NSwwLDAsLjM0MzA2XSw5MzpbLjI1LC43NSwwLDAsLjM0MzA2XSw5NDpbMCwuNjk0NDQsMCwwLC41NV0sOTU6Wy4zNSwuMTA4MzMsLjAzMDU2LDAsLjU1XSw5NzpbMCwuNDU4MzMsMCwwLC41MjVdLDk4OlswLC42OTQ0NCwwLDAsLjU2MTExXSw5OTpbMCwuNDU4MzMsMCwwLC40ODg4OV0sMTAwOlswLC42OTQ0NCwwLDAsLjU2MTExXSwxMDE6WzAsLjQ1ODMzLDAsMCwuNTExMTFdLDEwMjpbMCwuNjk0NDQsLjA3NjM5LDAsLjMzNjExXSwxMDM6Wy4xOTQ0NCwuNDU4MzMsLjAxNTI4LDAsLjU1XSwxMDQ6WzAsLjY5NDQ0LDAsMCwuNTYxMTFdLDEwNTpbMCwuNjk0NDQsMCwwLC4yNTU1Nl0sMTA2OlsuMTk0NDQsLjY5NDQ0LDAsMCwuMjg2MTFdLDEwNzpbMCwuNjk0NDQsMCwwLC41MzA1Nl0sMTA4OlswLC42OTQ0NCwwLDAsLjI1NTU2XSwxMDk6WzAsLjQ1ODMzLDAsMCwuODY2NjddLDExMDpbMCwuNDU4MzMsMCwwLC41NjExMV0sMTExOlswLC40NTgzMywwLDAsLjU1XSwxMTI6Wy4xOTQ0NCwuNDU4MzMsMCwwLC41NjExMV0sMTEzOlsuMTk0NDQsLjQ1ODMzLDAsMCwuNTYxMTFdLDExNDpbMCwuNDU4MzMsLjAxNTI4LDAsLjM3MjIyXSwxMTU6WzAsLjQ1ODMzLDAsMCwuNDIxNjddLDExNjpbMCwuNTg5MjksMCwwLC40MDQxN10sMTE3OlswLC40NTgzMywwLDAsLjU2MTExXSwxMTg6WzAsLjQ1ODMzLC4wMTUyOCwwLC41XSwxMTk6WzAsLjQ1ODMzLC4wMTUyOCwwLC43NDQ0NV0sMTIwOlswLC40NTgzMywwLDAsLjVdLDEyMTpbLjE5NDQ0LC40NTgzMywuMDE1MjgsMCwuNV0sMTIyOlswLC40NTgzMywwLDAsLjQ3NjM5XSwxMjY6Wy4zNSwuMzQ0NDQsMCwwLC41NV0sMTYwOlswLDAsMCwwLC4yNV0sMTY4OlswLC42OTQ0NCwwLDAsLjU1XSwxNzY6WzAsLjY5NDQ0LDAsMCwuNzMzMzRdLDE4MDpbMCwuNjk0NDQsMCwwLC41NV0sMTg0OlsuMTcwMTQsMCwwLDAsLjQ4ODg5XSwzMDU6WzAsLjQ1ODMzLDAsMCwuMjU1NTZdLDU2NzpbLjE5NDQ0LC40NTgzMywwLDAsLjI4NjExXSw3MTA6WzAsLjY5NDQ0LDAsMCwuNTVdLDcxMTpbMCwuNjM1NDIsMCwwLC41NV0sNzEzOlswLC42Mzc3OCwwLDAsLjU1XSw3Mjg6WzAsLjY5NDQ0LDAsMCwuNTVdLDcyOTpbMCwuNjk0NDQsMCwwLC4zMDU1Nl0sNzMwOlswLC42OTQ0NCwwLDAsLjczMzM0XSw3MzI6WzAsLjY5NDQ0LDAsMCwuNTVdLDczMzpbMCwuNjk0NDQsMCwwLC41NV0sOTE1OlswLC42OTQ0NCwwLDAsLjU4MDU2XSw5MTY6WzAsLjY5NDQ0LDAsMCwuOTE2NjddLDkyMDpbMCwuNjk0NDQsMCwwLC44NTU1Nl0sOTIzOlswLC42OTQ0NCwwLDAsLjY3MjIzXSw5MjY6WzAsLjY5NDQ0LDAsMCwuNzMzMzRdLDkyODpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sOTMxOlswLC42OTQ0NCwwLDAsLjc5NDQ1XSw5MzM6WzAsLjY5NDQ0LDAsMCwuODU1NTZdLDkzNDpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sOTM2OlswLC42OTQ0NCwwLDAsLjg1NTU2XSw5Mzc6WzAsLjY5NDQ0LDAsMCwuNzk0NDVdLDgyMTE6WzAsLjQ1ODMzLC4wMzA1NiwwLC41NV0sODIxMjpbMCwuNDU4MzMsLjAzMDU2LDAsMS4xMDAwMV0sODIxNjpbMCwuNjk0NDQsMCwwLC4zMDU1Nl0sODIxNzpbMCwuNjk0NDQsMCwwLC4zMDU1Nl0sODIyMDpbMCwuNjk0NDQsMCwwLC41NTgzNF0sODIyMTpbMCwuNjk0NDQsMCwwLC41NTgzNF19LCJTYW5zU2VyaWYtSXRhbGljIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjk0NDQsLjA1NzMzLDAsLjMxOTQ1XSwzNDpbMCwuNjk0NDQsLjAwMzE2LDAsLjVdLDM1OlsuMTk0NDQsLjY5NDQ0LC4wNTA4NywwLC44MzMzNF0sMzY6Wy4wNTU1NiwuNzUsLjExMTU2LDAsLjVdLDM3OlsuMDU1NTYsLjc1LC4wMzEyNiwwLC44MzMzNF0sMzg6WzAsLjY5NDQ0LC4wMzA1OCwwLC43NTgzNF0sMzk6WzAsLjY5NDQ0LC4wNzgxNiwwLC4yNzc3OF0sNDA6Wy4yNSwuNzUsLjEzMTY0LDAsLjM4ODg5XSw0MTpbLjI1LC43NSwuMDI1MzYsMCwuMzg4ODldLDQyOlswLC43NSwuMTE3NzUsMCwuNV0sNDM6Wy4wODMzMywuNTgzMzMsLjAyNTM2LDAsLjc3Nzc4XSw0NDpbLjEyNSwuMDgzMzMsMCwwLC4yNzc3OF0sNDU6WzAsLjQ0NDQ0LC4wMTk0NiwwLC4zMzMzM10sNDY6WzAsLjA4MzMzLDAsMCwuMjc3NzhdLDQ3OlsuMjUsLjc1LC4xMzE2NCwwLC41XSw0ODpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDQ5OlswLC42NTU1NiwuMTExNTYsMCwuNV0sNTA6WzAsLjY1NTU2LC4xMTE1NiwwLC41XSw1MTpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDUyOlswLC42NTU1NiwuMTExNTYsMCwuNV0sNTM6WzAsLjY1NTU2LC4xMTE1NiwwLC41XSw1NDpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDU1OlswLC42NTU1NiwuMTExNTYsMCwuNV0sNTY6WzAsLjY1NTU2LC4xMTE1NiwwLC41XSw1NzpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDU4OlswLC40NDQ0NCwuMDI1MDIsMCwuMjc3NzhdLDU5OlsuMTI1LC40NDQ0NCwuMDI1MDIsMCwuMjc3NzhdLDYxOlstLjEzLC4zNywuMDUwODcsMCwuNzc3NzhdLDYzOlswLC42OTQ0NCwuMTE4MDksMCwuNDcyMjJdLDY0OlswLC42OTQ0NCwuMDc1NTUsMCwuNjY2NjddLDY1OlswLC42OTQ0NCwwLDAsLjY2NjY3XSw2NjpbMCwuNjk0NDQsLjA4MjkzLDAsLjY2NjY3XSw2NzpbMCwuNjk0NDQsLjExOTgzLDAsLjYzODg5XSw2ODpbMCwuNjk0NDQsLjA3NTU1LDAsLjcyMjIzXSw2OTpbMCwuNjk0NDQsLjExOTgzLDAsLjU5NzIyXSw3MDpbMCwuNjk0NDQsLjEzMzcyLDAsLjU2OTQ1XSw3MTpbMCwuNjk0NDQsLjExOTgzLDAsLjY2NjY3XSw3MjpbMCwuNjk0NDQsLjA4MDk0LDAsLjcwODM0XSw3MzpbMCwuNjk0NDQsLjEzMzcyLDAsLjI3Nzc4XSw3NDpbMCwuNjk0NDQsLjA4MDk0LDAsLjQ3MjIyXSw3NTpbMCwuNjk0NDQsLjExOTgzLDAsLjY5NDQ1XSw3NjpbMCwuNjk0NDQsMCwwLC41NDE2N10sNzc6WzAsLjY5NDQ0LC4wODA5NCwwLC44NzVdLDc4OlswLC42OTQ0NCwuMDgwOTQsMCwuNzA4MzRdLDc5OlswLC42OTQ0NCwuMDc1NTUsMCwuNzM2MTFdLDgwOlswLC42OTQ0NCwuMDgyOTMsMCwuNjM4ODldLDgxOlsuMTI1LC42OTQ0NCwuMDc1NTUsMCwuNzM2MTFdLDgyOlswLC42OTQ0NCwuMDgyOTMsMCwuNjQ1ODRdLDgzOlswLC42OTQ0NCwuMDkyMDUsMCwuNTU1NTZdLDg0OlswLC42OTQ0NCwuMTMzNzIsMCwuNjgwNTZdLDg1OlswLC42OTQ0NCwuMDgwOTQsMCwuNjg3NV0sODY6WzAsLjY5NDQ0LC4xNjE1LDAsLjY2NjY3XSw4NzpbMCwuNjk0NDQsLjE2MTUsMCwuOTQ0NDVdLDg4OlswLC42OTQ0NCwuMTMzNzIsMCwuNjY2NjddLDg5OlswLC42OTQ0NCwuMTcyNjEsMCwuNjY2NjddLDkwOlswLC42OTQ0NCwuMTE5ODMsMCwuNjExMTFdLDkxOlsuMjUsLjc1LC4xNTk0MiwwLC4yODg4OV0sOTM6Wy4yNSwuNzUsLjA4NzE5LDAsLjI4ODg5XSw5NDpbMCwuNjk0NDQsLjA3OTksMCwuNV0sOTU6Wy4zNSwuMDk0NDQsLjA4NjE2LDAsLjVdLDk3OlswLC40NDQ0NCwuMDA5ODEsMCwuNDgwNTZdLDk4OlswLC42OTQ0NCwuMDMwNTcsMCwuNTE2NjddLDk5OlswLC40NDQ0NCwuMDgzMzYsMCwuNDQ0NDVdLDEwMDpbMCwuNjk0NDQsLjA5NDgzLDAsLjUxNjY3XSwxMDE6WzAsLjQ0NDQ0LC4wNjc3OCwwLC40NDQ0NV0sMTAyOlswLC42OTQ0NCwuMjE3MDUsMCwuMzA1NTZdLDEwMzpbLjE5NDQ0LC40NDQ0NCwuMTA4MzYsMCwuNV0sMTA0OlswLC42OTQ0NCwuMDE3NzgsMCwuNTE2NjddLDEwNTpbMCwuNjc5MzcsLjA5NzE4LDAsLjIzODg5XSwxMDY6Wy4xOTQ0NCwuNjc5MzcsLjA5MTYyLDAsLjI2NjY3XSwxMDc6WzAsLjY5NDQ0LC4wODMzNiwwLC40ODg4OV0sMTA4OlswLC42OTQ0NCwuMDk0ODMsMCwuMjM4ODldLDEwOTpbMCwuNDQ0NDQsLjAxNzc4LDAsLjc5NDQ1XSwxMTA6WzAsLjQ0NDQ0LC4wMTc3OCwwLC41MTY2N10sMTExOlswLC40NDQ0NCwuMDY2MTMsMCwuNV0sMTEyOlsuMTk0NDQsLjQ0NDQ0LC4wMzg5LDAsLjUxNjY3XSwxMTM6Wy4xOTQ0NCwuNDQ0NDQsLjA0MTY5LDAsLjUxNjY3XSwxMTQ6WzAsLjQ0NDQ0LC4xMDgzNiwwLC4zNDE2N10sMTE1OlswLC40NDQ0NCwuMDc3OCwwLC4zODMzM10sMTE2OlswLC41NzE0MywuMDcyMjUsMCwuMzYxMTFdLDExNzpbMCwuNDQ0NDQsLjA0MTY5LDAsLjUxNjY3XSwxMTg6WzAsLjQ0NDQ0LC4xMDgzNiwwLC40NjExMV0sMTE5OlswLC40NDQ0NCwuMTA4MzYsMCwuNjgzMzRdLDEyMDpbMCwuNDQ0NDQsLjA5MTY5LDAsLjQ2MTExXSwxMjE6Wy4xOTQ0NCwuNDQ0NDQsLjEwODM2LDAsLjQ2MTExXSwxMjI6WzAsLjQ0NDQ0LC4wODc1MiwwLC40MzQ3Ml0sMTI2OlsuMzUsLjMyNjU5LC4wODgyNiwwLC41XSwxNjA6WzAsMCwwLDAsLjI1XSwxNjg6WzAsLjY3OTM3LC4wNjM4NSwwLC41XSwxNzY6WzAsLjY5NDQ0LDAsMCwuNzM3NTJdLDE4NDpbLjE3MDE0LDAsMCwwLC40NDQ0NV0sMzA1OlswLC40NDQ0NCwuMDQxNjksMCwuMjM4ODldLDU2NzpbLjE5NDQ0LC40NDQ0NCwuMDQxNjksMCwuMjY2NjddLDcxMDpbMCwuNjk0NDQsLjA3OTksMCwuNV0sNzExOlswLC42MzE5NCwuMDg0MzIsMCwuNV0sNzEzOlswLC42MDg4OSwuMDg3NzYsMCwuNV0sNzE0OlswLC42OTQ0NCwuMDkyMDUsMCwuNV0sNzE1OlswLC42OTQ0NCwwLDAsLjVdLDcyODpbMCwuNjk0NDQsLjA5NDgzLDAsLjVdLDcyOTpbMCwuNjc5MzcsLjA3Nzc0LDAsLjI3Nzc4XSw3MzA6WzAsLjY5NDQ0LDAsMCwuNzM3NTJdLDczMjpbMCwuNjc2NTksLjA4ODI2LDAsLjVdLDczMzpbMCwuNjk0NDQsLjA5MjA1LDAsLjVdLDkxNTpbMCwuNjk0NDQsLjEzMzcyLDAsLjU0MTY3XSw5MTY6WzAsLjY5NDQ0LDAsMCwuODMzMzRdLDkyMDpbMCwuNjk0NDQsLjA3NTU1LDAsLjc3Nzc4XSw5MjM6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDkyNjpbMCwuNjk0NDQsLjEyODE2LDAsLjY2NjY3XSw5Mjg6WzAsLjY5NDQ0LC4wODA5NCwwLC43MDgzNF0sOTMxOlswLC42OTQ0NCwuMTE5ODMsMCwuNzIyMjJdLDkzMzpbMCwuNjk0NDQsLjA5MDMxLDAsLjc3Nzc4XSw5MzQ6WzAsLjY5NDQ0LC4wNDYwMywwLC43MjIyMl0sOTM2OlswLC42OTQ0NCwuMDkwMzEsMCwuNzc3NzhdLDkzNzpbMCwuNjk0NDQsLjA4MjkzLDAsLjcyMjIyXSw4MjExOlswLC40NDQ0NCwuMDg2MTYsMCwuNV0sODIxMjpbMCwuNDQ0NDQsLjA4NjE2LDAsMV0sODIxNjpbMCwuNjk0NDQsLjA3ODE2LDAsLjI3Nzc4XSw4MjE3OlswLC42OTQ0NCwuMDc4MTYsMCwuMjc3NzhdLDgyMjA6WzAsLjY5NDQ0LC4xNDIwNSwwLC41XSw4MjIxOlswLC42OTQ0NCwuMDAzMTYsMCwuNV19LCJTYW5zU2VyaWYtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sMzM6WzAsLjY5NDQ0LDAsMCwuMzE5NDVdLDM0OlswLC42OTQ0NCwwLDAsLjVdLDM1OlsuMTk0NDQsLjY5NDQ0LDAsMCwuODMzMzRdLDM2OlsuMDU1NTYsLjc1LDAsMCwuNV0sMzc6Wy4wNTU1NiwuNzUsMCwwLC44MzMzNF0sMzg6WzAsLjY5NDQ0LDAsMCwuNzU4MzRdLDM5OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw0MDpbLjI1LC43NSwwLDAsLjM4ODg5XSw0MTpbLjI1LC43NSwwLDAsLjM4ODg5XSw0MjpbMCwuNzUsMCwwLC41XSw0MzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw0NDpbLjEyNSwuMDgzMzMsMCwwLC4yNzc3OF0sNDU6WzAsLjQ0NDQ0LDAsMCwuMzMzMzNdLDQ2OlswLC4wODMzMywwLDAsLjI3Nzc4XSw0NzpbLjI1LC43NSwwLDAsLjVdLDQ4OlswLC42NTU1NiwwLDAsLjVdLDQ5OlswLC42NTU1NiwwLDAsLjVdLDUwOlswLC42NTU1NiwwLDAsLjVdLDUxOlswLC42NTU1NiwwLDAsLjVdLDUyOlswLC42NTU1NiwwLDAsLjVdLDUzOlswLC42NTU1NiwwLDAsLjVdLDU0OlswLC42NTU1NiwwLDAsLjVdLDU1OlswLC42NTU1NiwwLDAsLjVdLDU2OlswLC42NTU1NiwwLDAsLjVdLDU3OlswLC42NTU1NiwwLDAsLjVdLDU4OlswLC40NDQ0NCwwLDAsLjI3Nzc4XSw1OTpbLjEyNSwuNDQ0NDQsMCwwLC4yNzc3OF0sNjE6Wy0uMTMsLjM3LDAsMCwuNzc3NzhdLDYzOlswLC42OTQ0NCwwLDAsLjQ3MjIyXSw2NDpbMCwuNjk0NDQsMCwwLC42NjY2N10sNjU6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDY2OlswLC42OTQ0NCwwLDAsLjY2NjY3XSw2NzpbMCwuNjk0NDQsMCwwLC42Mzg4OV0sNjg6WzAsLjY5NDQ0LDAsMCwuNzIyMjNdLDY5OlswLC42OTQ0NCwwLDAsLjU5NzIyXSw3MDpbMCwuNjk0NDQsMCwwLC41Njk0NV0sNzE6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDcyOlswLC42OTQ0NCwwLDAsLjcwODM0XSw3MzpbMCwuNjk0NDQsMCwwLC4yNzc3OF0sNzQ6WzAsLjY5NDQ0LDAsMCwuNDcyMjJdLDc1OlswLC42OTQ0NCwwLDAsLjY5NDQ1XSw3NjpbMCwuNjk0NDQsMCwwLC41NDE2N10sNzc6WzAsLjY5NDQ0LDAsMCwuODc1XSw3ODpbMCwuNjk0NDQsMCwwLC43MDgzNF0sNzk6WzAsLjY5NDQ0LDAsMCwuNzM2MTFdLDgwOlswLC42OTQ0NCwwLDAsLjYzODg5XSw4MTpbLjEyNSwuNjk0NDQsMCwwLC43MzYxMV0sODI6WzAsLjY5NDQ0LDAsMCwuNjQ1ODRdLDgzOlswLC42OTQ0NCwwLDAsLjU1NTU2XSw4NDpbMCwuNjk0NDQsMCwwLC42ODA1Nl0sODU6WzAsLjY5NDQ0LDAsMCwuNjg3NV0sODY6WzAsLjY5NDQ0LC4wMTM4OSwwLC42NjY2N10sODc6WzAsLjY5NDQ0LC4wMTM4OSwwLC45NDQ0NV0sODg6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDg5OlswLC42OTQ0NCwuMDI1LDAsLjY2NjY3XSw5MDpbMCwuNjk0NDQsMCwwLC42MTExMV0sOTE6Wy4yNSwuNzUsMCwwLC4yODg4OV0sOTM6Wy4yNSwuNzUsMCwwLC4yODg4OV0sOTQ6WzAsLjY5NDQ0LDAsMCwuNV0sOTU6Wy4zNSwuMDk0NDQsLjAyNzc4LDAsLjVdLDk3OlswLC40NDQ0NCwwLDAsLjQ4MDU2XSw5ODpbMCwuNjk0NDQsMCwwLC41MTY2N10sOTk6WzAsLjQ0NDQ0LDAsMCwuNDQ0NDVdLDEwMDpbMCwuNjk0NDQsMCwwLC41MTY2N10sMTAxOlswLC40NDQ0NCwwLDAsLjQ0NDQ1XSwxMDI6WzAsLjY5NDQ0LC4wNjk0NCwwLC4zMDU1Nl0sMTAzOlsuMTk0NDQsLjQ0NDQ0LC4wMTM4OSwwLC41XSwxMDQ6WzAsLjY5NDQ0LDAsMCwuNTE2NjddLDEwNTpbMCwuNjc5MzcsMCwwLC4yMzg4OV0sMTA2OlsuMTk0NDQsLjY3OTM3LDAsMCwuMjY2NjddLDEwNzpbMCwuNjk0NDQsMCwwLC40ODg4OV0sMTA4OlswLC42OTQ0NCwwLDAsLjIzODg5XSwxMDk6WzAsLjQ0NDQ0LDAsMCwuNzk0NDVdLDExMDpbMCwuNDQ0NDQsMCwwLC41MTY2N10sMTExOlswLC40NDQ0NCwwLDAsLjVdLDExMjpbLjE5NDQ0LC40NDQ0NCwwLDAsLjUxNjY3XSwxMTM6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC41MTY2N10sMTE0OlswLC40NDQ0NCwuMDEzODksMCwuMzQxNjddLDExNTpbMCwuNDQ0NDQsMCwwLC4zODMzM10sMTE2OlswLC41NzE0MywwLDAsLjM2MTExXSwxMTc6WzAsLjQ0NDQ0LDAsMCwuNTE2NjddLDExODpbMCwuNDQ0NDQsLjAxMzg5LDAsLjQ2MTExXSwxMTk6WzAsLjQ0NDQ0LC4wMTM4OSwwLC42ODMzNF0sMTIwOlswLC40NDQ0NCwwLDAsLjQ2MTExXSwxMjE6Wy4xOTQ0NCwuNDQ0NDQsLjAxMzg5LDAsLjQ2MTExXSwxMjI6WzAsLjQ0NDQ0LDAsMCwuNDM0NzJdLDEyNjpbLjM1LC4zMjY1OSwwLDAsLjVdLDE2MDpbMCwwLDAsMCwuMjVdLDE2ODpbMCwuNjc5MzcsMCwwLC41XSwxNzY6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDE4NDpbLjE3MDE0LDAsMCwwLC40NDQ0NV0sMzA1OlswLC40NDQ0NCwwLDAsLjIzODg5XSw1Njc6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC4yNjY2N10sNzEwOlswLC42OTQ0NCwwLDAsLjVdLDcxMTpbMCwuNjMxOTQsMCwwLC41XSw3MTM6WzAsLjYwODg5LDAsMCwuNV0sNzE0OlswLC42OTQ0NCwwLDAsLjVdLDcxNTpbMCwuNjk0NDQsMCwwLC41XSw3Mjg6WzAsLjY5NDQ0LDAsMCwuNV0sNzI5OlswLC42NzkzNywwLDAsLjI3Nzc4XSw3MzA6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDczMjpbMCwuNjc2NTksMCwwLC41XSw3MzM6WzAsLjY5NDQ0LDAsMCwuNV0sOTE1OlswLC42OTQ0NCwwLDAsLjU0MTY3XSw5MTY6WzAsLjY5NDQ0LDAsMCwuODMzMzRdLDkyMDpbMCwuNjk0NDQsMCwwLC43Nzc3OF0sOTIzOlswLC42OTQ0NCwwLDAsLjYxMTExXSw5MjY6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDkyODpbMCwuNjk0NDQsMCwwLC43MDgzNF0sOTMxOlswLC42OTQ0NCwwLDAsLjcyMjIyXSw5MzM6WzAsLjY5NDQ0LDAsMCwuNzc3NzhdLDkzNDpbMCwuNjk0NDQsMCwwLC43MjIyMl0sOTM2OlswLC42OTQ0NCwwLDAsLjc3Nzc4XSw5Mzc6WzAsLjY5NDQ0LDAsMCwuNzIyMjJdLDgyMTE6WzAsLjQ0NDQ0LC4wMjc3OCwwLC41XSw4MjEyOlswLC40NDQ0NCwuMDI3NzgsMCwxXSw4MjE2OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw4MjE3OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw4MjIwOlswLC42OTQ0NCwwLDAsLjVdLDgyMjE6WzAsLjY5NDQ0LDAsMCwuNV19LCJTY3JpcHQtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sNjU6WzAsLjcsLjIyOTI1LDAsLjgwMjUzXSw2NjpbMCwuNywuMDQwODcsMCwuOTA3NTddLDY3OlswLC43LC4xNjg5LDAsLjY2NjE5XSw2ODpbMCwuNywuMDkzNzEsMCwuNzc0NDNdLDY5OlswLC43LC4xODU4MywwLC41NjE2Ml0sNzA6WzAsLjcsLjEzNjM0LDAsLjg5NTQ0XSw3MTpbMCwuNywuMTczMjIsMCwuNjA5NjFdLDcyOlswLC43LC4yOTY5NCwwLC45NjkxOV0sNzM6WzAsLjcsLjE5MTg5LDAsLjgwOTA3XSw3NDpbLjI3Nzc4LC43LC4xOTE4OSwwLDEuMDUxNTldLDc1OlswLC43LC4zMTI1OSwwLC45MTM2NF0sNzY6WzAsLjcsLjE5MTg5LDAsLjg3MzczXSw3NzpbMCwuNywuMTU5ODEsMCwxLjA4MDMxXSw3ODpbMCwuNywuMzUyNSwwLC45MDE1XSw3OTpbMCwuNywuMDgwNzgsMCwuNzM3ODddLDgwOlswLC43LC4wODA3OCwwLDEuMDEyNjJdLDgxOlswLC43LC4wMzMwNSwwLC44ODI4Ml0sODI6WzAsLjcsLjA2MjU5LDAsLjg1XSw4MzpbMCwuNywuMTkxODksMCwuODY3NjddLDg0OlswLC43LC4yOTA4NywwLC43NDY5N10sODU6WzAsLjcsLjI1ODE1LDAsLjc5OTk2XSw4NjpbMCwuNywuMjc1MjMsMCwuNjIyMDRdLDg3OlswLC43LC4yNzUyMywwLC44MDUzMl0sODg6WzAsLjcsLjI2MDA2LDAsLjk0NDQ1XSw4OTpbMCwuNywuMjkzOSwwLC43MDk2MV0sOTA6WzAsLjcsLjI0MDM3LDAsLjgyMTJdLDE2MDpbMCwwLDAsMCwuMjVdfSwiU2l6ZTEtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sNDA6Wy4zNTAwMSwuODUsMCwwLC40NTgzNF0sNDE6Wy4zNTAwMSwuODUsMCwwLC40NTgzNF0sNDc6Wy4zNTAwMSwuODUsMCwwLC41Nzc3OF0sOTE6Wy4zNTAwMSwuODUsMCwwLC40MTY2N10sOTI6Wy4zNTAwMSwuODUsMCwwLC41Nzc3OF0sOTM6Wy4zNTAwMSwuODUsMCwwLC40MTY2N10sMTIzOlsuMzUwMDEsLjg1LDAsMCwuNTgzMzRdLDEyNTpbLjM1MDAxLC44NSwwLDAsLjU4MzM0XSwxNjA6WzAsMCwwLDAsLjI1XSw3MTA6WzAsLjcyMjIyLDAsMCwuNTU1NTZdLDczMjpbMCwuNzIyMjIsMCwwLC41NTU1Nl0sNzcwOlswLC43MjIyMiwwLDAsLjU1NTU2XSw3NzE6WzAsLjcyMjIyLDAsMCwuNTU1NTZdLDgyMTQ6Wy05OWUtNSwuNjAxLDAsMCwuNzc3NzhdLDg1OTM6WzFlLTUsLjYsMCwwLC42NjY2N10sODU5NTpbMWUtNSwuNiwwLDAsLjY2NjY3XSw4NjU3OlsxZS01LC42LDAsMCwuNzc3NzhdLDg2NTk6WzFlLTUsLjYsMCwwLC43Nzc3OF0sODcxOTpbLjI1MDAxLC43NSwwLDAsLjk0NDQ1XSw4NzIwOlsuMjUwMDEsLjc1LDAsMCwuOTQ0NDVdLDg3MjE6Wy4yNTAwMSwuNzUsMCwwLDEuMDU1NTZdLDg3MzA6Wy4zNTAwMSwuODUsMCwwLDFdLDg3Mzk6Wy0uMDA1OTksLjYwNiwwLDAsLjMzMzMzXSw4NzQxOlstLjAwNTk5LC42MDYsMCwwLC41NTU1Nl0sODc0NzpbLjMwNjEyLC44MDUsLjE5NDQ1LDAsLjQ3MjIyXSw4NzQ4OlsuMzA2LC44MDUsLjE5NDQ1LDAsLjQ3MjIyXSw4NzQ5OlsuMzA2LC44MDUsLjE5NDQ1LDAsLjQ3MjIyXSw4NzUwOlsuMzA2MTIsLjgwNSwuMTk0NDUsMCwuNDcyMjJdLDg4OTY6Wy4yNTAwMSwuNzUsMCwwLC44MzMzNF0sODg5NzpbLjI1MDAxLC43NSwwLDAsLjgzMzM0XSw4ODk4OlsuMjUwMDEsLjc1LDAsMCwuODMzMzRdLDg4OTk6Wy4yNTAwMSwuNzUsMCwwLC44MzMzNF0sODk2ODpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSw4OTY5OlsuMzUwMDEsLjg1LDAsMCwuNDcyMjJdLDg5NzA6Wy4zNTAwMSwuODUsMCwwLC40NzIyMl0sODk3MTpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSw5MTY4OlstOTllLTUsLjYwMSwwLDAsLjY2NjY3XSwxMDIxNjpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSwxMDIxNzpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSwxMDc1MjpbLjI1MDAxLC43NSwwLDAsMS4xMTExMV0sMTA3NTM6Wy4yNTAwMSwuNzUsMCwwLDEuMTExMTFdLDEwNzU0OlsuMjUwMDEsLjc1LDAsMCwxLjExMTExXSwxMDc1NjpbLjI1MDAxLC43NSwwLDAsLjgzMzM0XSwxMDc1ODpbLjI1MDAxLC43NSwwLDAsLjgzMzM0XX0sIlNpemUyLVJlZ3VsYXIiOnszMjpbMCwwLDAsMCwuMjVdLDQwOlsuNjUwMDIsMS4xNSwwLDAsLjU5NzIyXSw0MTpbLjY1MDAyLDEuMTUsMCwwLC41OTcyMl0sNDc6Wy42NTAwMiwxLjE1LDAsMCwuODExMTFdLDkxOlsuNjUwMDIsMS4xNSwwLDAsLjQ3MjIyXSw5MjpbLjY1MDAyLDEuMTUsMCwwLC44MTExMV0sOTM6Wy42NTAwMiwxLjE1LDAsMCwuNDcyMjJdLDEyMzpbLjY1MDAyLDEuMTUsMCwwLC42NjY2N10sMTI1OlsuNjUwMDIsMS4xNSwwLDAsLjY2NjY3XSwxNjA6WzAsMCwwLDAsLjI1XSw3MTA6WzAsLjc1LDAsMCwxXSw3MzI6WzAsLjc1LDAsMCwxXSw3NzA6WzAsLjc1LDAsMCwxXSw3NzE6WzAsLjc1LDAsMCwxXSw4NzE5OlsuNTUwMDEsMS4wNSwwLDAsMS4yNzc3OF0sODcyMDpbLjU1MDAxLDEuMDUsMCwwLDEuMjc3NzhdLDg3MjE6Wy41NTAwMSwxLjA1LDAsMCwxLjQ0NDQ1XSw4NzMwOlsuNjUwMDIsMS4xNSwwLDAsMV0sODc0NzpbLjg2MjI1LDEuMzYsLjQ0NDQ1LDAsLjU1NTU2XSw4NzQ4OlsuODYyLDEuMzYsLjQ0NDQ1LDAsLjU1NTU2XSw4NzQ5OlsuODYyLDEuMzYsLjQ0NDQ1LDAsLjU1NTU2XSw4NzUwOlsuODYyMjUsMS4zNiwuNDQ0NDUsMCwuNTU1NTZdLDg4OTY6Wy41NTAwMSwxLjA1LDAsMCwxLjExMTExXSw4ODk3OlsuNTUwMDEsMS4wNSwwLDAsMS4xMTExMV0sODg5ODpbLjU1MDAxLDEuMDUsMCwwLDEuMTExMTFdLDg4OTk6Wy41NTAwMSwxLjA1LDAsMCwxLjExMTExXSw4OTY4OlsuNjUwMDIsMS4xNSwwLDAsLjUyNzc4XSw4OTY5OlsuNjUwMDIsMS4xNSwwLDAsLjUyNzc4XSw4OTcwOlsuNjUwMDIsMS4xNSwwLDAsLjUyNzc4XSw4OTcxOlsuNjUwMDIsMS4xNSwwLDAsLjUyNzc4XSwxMDIxNjpbLjY1MDAyLDEuMTUsMCwwLC42MTExMV0sMTAyMTc6Wy42NTAwMiwxLjE1LDAsMCwuNjExMTFdLDEwNzUyOlsuNTUwMDEsMS4wNSwwLDAsMS41MTExMl0sMTA3NTM6Wy41NTAwMSwxLjA1LDAsMCwxLjUxMTEyXSwxMDc1NDpbLjU1MDAxLDEuMDUsMCwwLDEuNTExMTJdLDEwNzU2OlsuNTUwMDEsMS4wNSwwLDAsMS4xMTExMV0sMTA3NTg6Wy41NTAwMSwxLjA1LDAsMCwxLjExMTExXX0sIlNpemUzLVJlZ3VsYXIiOnszMjpbMCwwLDAsMCwuMjVdLDQwOlsuOTUwMDMsMS40NSwwLDAsLjczNjExXSw0MTpbLjk1MDAzLDEuNDUsMCwwLC43MzYxMV0sNDc6Wy45NTAwMywxLjQ1LDAsMCwxLjA0NDQ1XSw5MTpbLjk1MDAzLDEuNDUsMCwwLC41Mjc3OF0sOTI6Wy45NTAwMywxLjQ1LDAsMCwxLjA0NDQ1XSw5MzpbLjk1MDAzLDEuNDUsMCwwLC41Mjc3OF0sMTIzOlsuOTUwMDMsMS40NSwwLDAsLjc1XSwxMjU6Wy45NTAwMywxLjQ1LDAsMCwuNzVdLDE2MDpbMCwwLDAsMCwuMjVdLDcxMDpbMCwuNzUsMCwwLDEuNDQ0NDVdLDczMjpbMCwuNzUsMCwwLDEuNDQ0NDVdLDc3MDpbMCwuNzUsMCwwLDEuNDQ0NDVdLDc3MTpbMCwuNzUsMCwwLDEuNDQ0NDVdLDg3MzA6Wy45NTAwMywxLjQ1LDAsMCwxXSw4OTY4OlsuOTUwMDMsMS40NSwwLDAsLjU4MzM0XSw4OTY5OlsuOTUwMDMsMS40NSwwLDAsLjU4MzM0XSw4OTcwOlsuOTUwMDMsMS40NSwwLDAsLjU4MzM0XSw4OTcxOlsuOTUwMDMsMS40NSwwLDAsLjU4MzM0XSwxMDIxNjpbLjk1MDAzLDEuNDUsMCwwLC43NV0sMTAyMTc6Wy45NTAwMywxLjQ1LDAsMCwuNzVdfSwiU2l6ZTQtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sNDA6WzEuMjUwMDMsMS43NSwwLDAsLjc5MTY3XSw0MTpbMS4yNTAwMywxLjc1LDAsMCwuNzkxNjddLDQ3OlsxLjI1MDAzLDEuNzUsMCwwLDEuMjc3NzhdLDkxOlsxLjI1MDAzLDEuNzUsMCwwLC41ODMzNF0sOTI6WzEuMjUwMDMsMS43NSwwLDAsMS4yNzc3OF0sOTM6WzEuMjUwMDMsMS43NSwwLDAsLjU4MzM0XSwxMjM6WzEuMjUwMDMsMS43NSwwLDAsLjgwNTU2XSwxMjU6WzEuMjUwMDMsMS43NSwwLDAsLjgwNTU2XSwxNjA6WzAsMCwwLDAsLjI1XSw3MTA6WzAsLjgyNSwwLDAsMS44ODg5XSw3MzI6WzAsLjgyNSwwLDAsMS44ODg5XSw3NzA6WzAsLjgyNSwwLDAsMS44ODg5XSw3NzE6WzAsLjgyNSwwLDAsMS44ODg5XSw4NzMwOlsxLjI1MDAzLDEuNzUsMCwwLDFdLDg5Njg6WzEuMjUwMDMsMS43NSwwLDAsLjYzODg5XSw4OTY5OlsxLjI1MDAzLDEuNzUsMCwwLC42Mzg4OV0sODk3MDpbMS4yNTAwMywxLjc1LDAsMCwuNjM4ODldLDg5NzE6WzEuMjUwMDMsMS43NSwwLDAsLjYzODg5XSw5MTE1OlsuNjQ1MDIsMS4xNTUsMCwwLC44NzVdLDkxMTY6WzFlLTUsLjYsMCwwLC44NzVdLDkxMTc6Wy42NDUwMiwxLjE1NSwwLDAsLjg3NV0sOTExODpbLjY0NTAyLDEuMTU1LDAsMCwuODc1XSw5MTE5OlsxZS01LC42LDAsMCwuODc1XSw5MTIwOlsuNjQ1MDIsMS4xNTUsMCwwLC44NzVdLDkxMjE6Wy42NDUwMiwxLjE1NSwwLDAsLjY2NjY3XSw5MTIyOlstOTllLTUsLjYwMSwwLDAsLjY2NjY3XSw5MTIzOlsuNjQ1MDIsMS4xNTUsMCwwLC42NjY2N10sOTEyNDpbLjY0NTAyLDEuMTU1LDAsMCwuNjY2NjddLDkxMjU6Wy05OWUtNSwuNjAxLDAsMCwuNjY2NjddLDkxMjY6Wy42NDUwMiwxLjE1NSwwLDAsLjY2NjY3XSw5MTI3OlsxZS01LC45LDAsMCwuODg4ODldLDkxMjg6Wy42NTAwMiwxLjE1LDAsMCwuODg4ODldLDkxMjk6Wy45MDAwMSwwLDAsMCwuODg4ODldLDkxMzA6WzAsLjMsMCwwLC44ODg4OV0sOTEzMTpbMWUtNSwuOSwwLDAsLjg4ODg5XSw5MTMyOlsuNjUwMDIsMS4xNSwwLDAsLjg4ODg5XSw5MTMzOlsuOTAwMDEsMCwwLDAsLjg4ODg5XSw5MTQzOlsuODg1MDIsLjkxNSwwLDAsMS4wNTU1Nl0sMTAyMTY6WzEuMjUwMDMsMS43NSwwLDAsLjgwNTU2XSwxMDIxNzpbMS4yNTAwMywxLjc1LDAsMCwuODA1NTZdLDU3MzQ0OlstLjAwNDk5LC42MDUsMCwwLDEuMDU1NTZdLDU3MzQ1OlstLjAwNDk5LC42MDUsMCwwLDEuMDU1NTZdLDU3NjgwOlswLC4xMiwwLDAsLjQ1XSw1NzY4MTpbMCwuMTIsMCwwLC40NV0sNTc2ODI6WzAsLjEyLDAsMCwuNDVdLDU3NjgzOlswLC4xMiwwLDAsLjQ1XX0sIlR5cGV3cml0ZXItUmVndWxhciI6ezMyOlswLDAsMCwwLC41MjVdLDMzOlswLC42MTExMSwwLDAsLjUyNV0sMzQ6WzAsLjYxMTExLDAsMCwuNTI1XSwzNTpbMCwuNjExMTEsMCwwLC41MjVdLDM2OlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSwzNzpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sMzg6WzAsLjYxMTExLDAsMCwuNTI1XSwzOTpbMCwuNjExMTEsMCwwLC41MjVdLDQwOlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSw0MTpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sNDI6WzAsLjUyMDgzLDAsMCwuNTI1XSw0MzpbLS4wODA1NiwuNTMwNTUsMCwwLC41MjVdLDQ0OlsuMTM4ODksLjEyNSwwLDAsLjUyNV0sNDU6Wy0uMDgwNTYsLjUzMDU1LDAsMCwuNTI1XSw0NjpbMCwuMTI1LDAsMCwuNTI1XSw0NzpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sNDg6WzAsLjYxMTExLDAsMCwuNTI1XSw0OTpbMCwuNjExMTEsMCwwLC41MjVdLDUwOlswLC42MTExMSwwLDAsLjUyNV0sNTE6WzAsLjYxMTExLDAsMCwuNTI1XSw1MjpbMCwuNjExMTEsMCwwLC41MjVdLDUzOlswLC42MTExMSwwLDAsLjUyNV0sNTQ6WzAsLjYxMTExLDAsMCwuNTI1XSw1NTpbMCwuNjExMTEsMCwwLC41MjVdLDU2OlswLC42MTExMSwwLDAsLjUyNV0sNTc6WzAsLjYxMTExLDAsMCwuNTI1XSw1ODpbMCwuNDMwNTYsMCwwLC41MjVdLDU5OlsuMTM4ODksLjQzMDU2LDAsMCwuNTI1XSw2MDpbLS4wNTU1NiwuNTU1NTYsMCwwLC41MjVdLDYxOlstLjE5NTQ5LC40MTU2MiwwLDAsLjUyNV0sNjI6Wy0uMDU1NTYsLjU1NTU2LDAsMCwuNTI1XSw2MzpbMCwuNjExMTEsMCwwLC41MjVdLDY0OlswLC42MTExMSwwLDAsLjUyNV0sNjU6WzAsLjYxMTExLDAsMCwuNTI1XSw2NjpbMCwuNjExMTEsMCwwLC41MjVdLDY3OlswLC42MTExMSwwLDAsLjUyNV0sNjg6WzAsLjYxMTExLDAsMCwuNTI1XSw2OTpbMCwuNjExMTEsMCwwLC41MjVdLDcwOlswLC42MTExMSwwLDAsLjUyNV0sNzE6WzAsLjYxMTExLDAsMCwuNTI1XSw3MjpbMCwuNjExMTEsMCwwLC41MjVdLDczOlswLC42MTExMSwwLDAsLjUyNV0sNzQ6WzAsLjYxMTExLDAsMCwuNTI1XSw3NTpbMCwuNjExMTEsMCwwLC41MjVdLDc2OlswLC42MTExMSwwLDAsLjUyNV0sNzc6WzAsLjYxMTExLDAsMCwuNTI1XSw3ODpbMCwuNjExMTEsMCwwLC41MjVdLDc5OlswLC42MTExMSwwLDAsLjUyNV0sODA6WzAsLjYxMTExLDAsMCwuNTI1XSw4MTpbLjEzODg5LC42MTExMSwwLDAsLjUyNV0sODI6WzAsLjYxMTExLDAsMCwuNTI1XSw4MzpbMCwuNjExMTEsMCwwLC41MjVdLDg0OlswLC42MTExMSwwLDAsLjUyNV0sODU6WzAsLjYxMTExLDAsMCwuNTI1XSw4NjpbMCwuNjExMTEsMCwwLC41MjVdLDg3OlswLC42MTExMSwwLDAsLjUyNV0sODg6WzAsLjYxMTExLDAsMCwuNTI1XSw4OTpbMCwuNjExMTEsMCwwLC41MjVdLDkwOlswLC42MTExMSwwLDAsLjUyNV0sOTE6Wy4wODMzMywuNjk0NDQsMCwwLC41MjVdLDkyOlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSw5MzpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sOTQ6WzAsLjYxMTExLDAsMCwuNTI1XSw5NTpbLjA5NTE0LDAsMCwwLC41MjVdLDk2OlswLC42MTExMSwwLDAsLjUyNV0sOTc6WzAsLjQzMDU2LDAsMCwuNTI1XSw5ODpbMCwuNjExMTEsMCwwLC41MjVdLDk5OlswLC40MzA1NiwwLDAsLjUyNV0sMTAwOlswLC42MTExMSwwLDAsLjUyNV0sMTAxOlswLC40MzA1NiwwLDAsLjUyNV0sMTAyOlswLC42MTExMSwwLDAsLjUyNV0sMTAzOlsuMjIyMjIsLjQzMDU2LDAsMCwuNTI1XSwxMDQ6WzAsLjYxMTExLDAsMCwuNTI1XSwxMDU6WzAsLjYxMTExLDAsMCwuNTI1XSwxMDY6Wy4yMjIyMiwuNjExMTEsMCwwLC41MjVdLDEwNzpbMCwuNjExMTEsMCwwLC41MjVdLDEwODpbMCwuNjExMTEsMCwwLC41MjVdLDEwOTpbMCwuNDMwNTYsMCwwLC41MjVdLDExMDpbMCwuNDMwNTYsMCwwLC41MjVdLDExMTpbMCwuNDMwNTYsMCwwLC41MjVdLDExMjpbLjIyMjIyLC40MzA1NiwwLDAsLjUyNV0sMTEzOlsuMjIyMjIsLjQzMDU2LDAsMCwuNTI1XSwxMTQ6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMTU6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMTY6WzAsLjU1MzU4LDAsMCwuNTI1XSwxMTc6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMTg6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMTk6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMjA6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMjE6Wy4yMjIyMiwuNDMwNTYsMCwwLC41MjVdLDEyMjpbMCwuNDMwNTYsMCwwLC41MjVdLDEyMzpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sMTI0OlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSwxMjU6Wy4wODMzMywuNjk0NDQsMCwwLC41MjVdLDEyNjpbMCwuNjExMTEsMCwwLC41MjVdLDEyNzpbMCwuNjExMTEsMCwwLC41MjVdLDE2MDpbMCwwLDAsMCwuNTI1XSwxNzY6WzAsLjYxMTExLDAsMCwuNTI1XSwxODQ6Wy4xOTQ0NSwwLDAsMCwuNTI1XSwzMDU6WzAsLjQzMDU2LDAsMCwuNTI1XSw1Njc6Wy4yMjIyMiwuNDMwNTYsMCwwLC41MjVdLDcxMTpbMCwuNTY1OTcsMCwwLC41MjVdLDcxMzpbMCwuNTY1NTUsMCwwLC41MjVdLDcxNDpbMCwuNjExMTEsMCwwLC41MjVdLDcxNTpbMCwuNjExMTEsMCwwLC41MjVdLDcyODpbMCwuNjExMTEsMCwwLC41MjVdLDczMDpbMCwuNjExMTEsMCwwLC41MjVdLDc3MDpbMCwuNjExMTEsMCwwLC41MjVdLDc3MTpbMCwuNjExMTEsMCwwLC41MjVdLDc3NjpbMCwuNjExMTEsMCwwLC41MjVdLDkxNTpbMCwuNjExMTEsMCwwLC41MjVdLDkxNjpbMCwuNjExMTEsMCwwLC41MjVdLDkyMDpbMCwuNjExMTEsMCwwLC41MjVdLDkyMzpbMCwuNjExMTEsMCwwLC41MjVdLDkyNjpbMCwuNjExMTEsMCwwLC41MjVdLDkyODpbMCwuNjExMTEsMCwwLC41MjVdLDkzMTpbMCwuNjExMTEsMCwwLC41MjVdLDkzMzpbMCwuNjExMTEsMCwwLC41MjVdLDkzNDpbMCwuNjExMTEsMCwwLC41MjVdLDkzNjpbMCwuNjExMTEsMCwwLC41MjVdLDkzNzpbMCwuNjExMTEsMCwwLC41MjVdLDgyMTY6WzAsLjYxMTExLDAsMCwuNTI1XSw4MjE3OlswLC42MTExMSwwLDAsLjUyNV0sODI0MjpbMCwuNjExMTEsMCwwLC41MjVdLDkyNTE6Wy4xMTExMSwuMjE5NDQsMCwwLC41MjVdfX0sbDQ9e3NsYW50OlsuMjUsLjI1LC4yNV0sc3BhY2U6WzAsMCwwXSxzdHJldGNoOlswLDAsMF0sc2hyaW5rOlswLDAsMF0seEhlaWdodDpbLjQzMSwuNDMxLC40MzFdLHF1YWQ6WzEsMS4xNzEsMS40NzJdLGV4dHJhU3BhY2U6WzAsMCwwXSxudW0xOlsuNjc3LC43MzIsLjkyNV0sbnVtMjpbLjM5NCwuMzg0LC4zODddLG51bTM6Wy40NDQsLjQ3MSwuNTA0XSxkZW5vbTE6Wy42ODYsLjc1MiwxLjAyNV0sZGVub20yOlsuMzQ1LC4zNDQsLjUzMl0sc3VwMTpbLjQxMywuNTAzLC41MDRdLHN1cDI6Wy4zNjMsLjQzMSwuNDA0XSxzdXAzOlsuMjg5LC4yODYsLjI5NF0sc3ViMTpbLjE1LC4xNDMsLjJdLHN1YjI6Wy4yNDcsLjI4NiwuNF0sc3VwRHJvcDpbLjM4NiwuMzUzLC40OTRdLHN1YkRyb3A6Wy4wNSwuMDcxLC4xXSxkZWxpbTE6WzIuMzksMS43LDEuOThdLGRlbGltMjpbMS4wMSwxLjE1NywxLjQyXSxheGlzSGVpZ2h0OlsuMjUsLjI1LC4yNV0sZGVmYXVsdFJ1bGVUaGlja25lc3M6Wy4wNCwuMDQ5LC4wNDldLGJpZ09wU3BhY2luZzE6Wy4xMTEsLjExMSwuMTExXSxiaWdPcFNwYWNpbmcyOlsuMTY2LC4xNjYsLjE2Nl0sYmlnT3BTcGFjaW5nMzpbLjIsLjIsLjJdLGJpZ09wU3BhY2luZzQ6Wy42LC42MTEsLjYxMV0sYmlnT3BTcGFjaW5nNTpbLjEsLjE0MywuMTQzXSxzcXJ0UnVsZVRoaWNrbmVzczpbLjA0LC4wNCwuMDRdLHB0UGVyRW06WzEwLDEwLDEwXSxkb3VibGVSdWxlU2VwOlsuMiwuMiwuMl0sYXJyYXlSdWxlV2lkdGg6Wy4wNCwuMDQsLjA0XSxmYm94c2VwOlsuMywuMywuM10sZmJveHJ1bGU6Wy4wNCwuMDQsLjA0XX0sbkc9e1x1MDBDNToiQSIsXHUwMEQwOiJEIixcdTAwREU6Im8iLFx1MDBFNToiYSIsXHUwMEYwOiJkIixcdTAwRkU6Im8iLFx1MDQxMDoiQSIsXHUwNDExOiJCIixcdTA0MTI6IkIiLFx1MDQxMzoiRiIsXHUwNDE0OiJBIixcdTA0MTU6IkUiLFx1MDQxNjoiSyIsXHUwNDE3OiIzIixcdTA0MTg6Ik4iLFx1MDQxOToiTiIsXHUwNDFBOiJLIixcdTA0MUI6Ik4iLFx1MDQxQzoiTSIsXHUwNDFEOiJIIixcdTA0MUU6Ik8iLFx1MDQxRjoiTiIsXHUwNDIwOiJQIixcdTA0MjE6IkMiLFx1MDQyMjoiVCIsXHUwNDIzOiJ5IixcdTA0MjQ6Ik8iLFx1MDQyNToiWCIsXHUwNDI2OiJVIixcdTA0Mjc6ImgiLFx1MDQyODoiVyIsXHUwNDI5OiJXIixcdTA0MkE6IkIiLFx1MDQyQjoiWCIsXHUwNDJDOiJCIixcdTA0MkQ6IjMiLFx1MDQyRToiWCIsXHUwNDJGOiJSIixcdTA0MzA6ImEiLFx1MDQzMToiYiIsXHUwNDMyOiJhIixcdTA0MzM6InIiLFx1MDQzNDoieSIsXHUwNDM1OiJlIixcdTA0MzY6Im0iLFx1MDQzNzoiZSIsXHUwNDM4OiJuIixcdTA0Mzk6Im4iLFx1MDQzQToibiIsXHUwNDNCOiJuIixcdTA0M0M6Im0iLFx1MDQzRDoibiIsXHUwNDNFOiJvIixcdTA0M0Y6Im4iLFx1MDQ0MDoicCIsXHUwNDQxOiJjIixcdTA0NDI6Im8iLFx1MDQ0MzoieSIsXHUwNDQ0OiJiIixcdTA0NDU6IngiLFx1MDQ0NjoibiIsXHUwNDQ3OiJuIixcdTA0NDg6InciLFx1MDQ0OToidyIsXHUwNDRBOiJhIixcdTA0NEI6Im0iLFx1MDQ0QzoiYSIsXHUwNDREOiJlIixcdTA0NEU6Im0iLFx1MDQ0RjoiciJ9O28oQWJlLCJzZXRGb250TWV0cmljcyIpO28oSUMsImdldENoYXJhY3Rlck1ldHJpY3MiKTtjQz17fTtvKF9iZSwiZ2V0R2xvYmFsTWV0cmljcyIpO0xiZT1bWzEsMSwxXSxbMiwxLDFdLFszLDEsMV0sWzQsMiwxXSxbNSwyLDFdLFs2LDMsMV0sWzcsNCwyXSxbOCw2LDNdLFs5LDcsNl0sWzEwLDgsN10sWzExLDEwLDldXSxpRz1bLjUsLjYsLjcsLjgsLjksMSwxLjIsMS40NCwxLjcyOCwyLjA3NCwyLjQ4OF0sYUc9byhmdW5jdGlvbihlLHIpe3JldHVybiByLnNpemU8Mj9lOkxiZVtlLTFdW3Iuc2l6ZS0xXX0sInNpemVBdFN0eWxlIiksVDQ9Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJPcHRpb25zIil9Y29uc3RydWN0b3IoZSl7dGhpcy5zdHlsZT12b2lkIDAsdGhpcy5jb2xvcj12b2lkIDAsdGhpcy5zaXplPXZvaWQgMCx0aGlzLnRleHRTaXplPXZvaWQgMCx0aGlzLnBoYW50b209dm9pZCAwLHRoaXMuZm9udD12b2lkIDAsdGhpcy5mb250RmFtaWx5PXZvaWQgMCx0aGlzLmZvbnRXZWlnaHQ9dm9pZCAwLHRoaXMuZm9udFNoYXBlPXZvaWQgMCx0aGlzLnNpemVNdWx0aXBsaWVyPXZvaWQgMCx0aGlzLm1heFNpemU9dm9pZCAwLHRoaXMubWluUnVsZVRoaWNrbmVzcz12b2lkIDAsdGhpcy5fZm9udE1ldHJpY3M9dm9pZCAwLHRoaXMuc3R5bGU9ZS5zdHlsZSx0aGlzLmNvbG9yPWUuY29sb3IsdGhpcy5zaXplPWUuc2l6ZXx8dC5CQVNFU0laRSx0aGlzLnRleHRTaXplPWUudGV4dFNpemV8fHRoaXMuc2l6ZSx0aGlzLnBoYW50b209ISFlLnBoYW50b20sdGhpcy5mb250PWUuZm9udHx8IiIsdGhpcy5mb250RmFtaWx5PWUuZm9udEZhbWlseXx8IiIsdGhpcy5mb250V2VpZ2h0PWUuZm9udFdlaWdodHx8IiIsdGhpcy5mb250U2hhcGU9ZS5mb250U2hhcGV8fCIiLHRoaXMuc2l6ZU11bHRpcGxpZXI9aUdbdGhpcy5zaXplLTFdLHRoaXMubWF4U2l6ZT1lLm1heFNpemUsdGhpcy5taW5SdWxlVGhpY2tuZXNzPWUubWluUnVsZVRoaWNrbmVzcyx0aGlzLl9mb250TWV0cmljcz12b2lkIDB9ZXh0ZW5kKGUpe3ZhciByPXtzdHlsZTp0aGlzLnN0eWxlLHNpemU6dGhpcy5zaXplLHRleHRTaXplOnRoaXMudGV4dFNpemUsY29sb3I6dGhpcy5jb2xvcixwaGFudG9tOnRoaXMucGhhbnRvbSxmb250OnRoaXMuZm9udCxmb250RmFtaWx5OnRoaXMuZm9udEZhbWlseSxmb250V2VpZ2h0OnRoaXMuZm9udFdlaWdodCxmb250U2hhcGU6dGhpcy5mb250U2hhcGUsbWF4U2l6ZTp0aGlzLm1heFNpemUsbWluUnVsZVRoaWNrbmVzczp0aGlzLm1pblJ1bGVUaGlja25lc3N9O2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJihyW25dPWVbbl0pO3JldHVybiBuZXcgdChyKX1oYXZpbmdTdHlsZShlKXtyZXR1cm4gdGhpcy5zdHlsZT09PWU/dGhpczp0aGlzLmV4dGVuZCh7c3R5bGU6ZSxzaXplOmFHKHRoaXMudGV4dFNpemUsZSl9KX1oYXZpbmdDcmFtcGVkU3R5bGUoKXtyZXR1cm4gdGhpcy5oYXZpbmdTdHlsZSh0aGlzLnN0eWxlLmNyYW1wKCkpfWhhdmluZ1NpemUoZSl7cmV0dXJuIHRoaXMuc2l6ZT09PWUmJnRoaXMudGV4dFNpemU9PT1lP3RoaXM6dGhpcy5leHRlbmQoe3N0eWxlOnRoaXMuc3R5bGUudGV4dCgpLHNpemU6ZSx0ZXh0U2l6ZTplLHNpemVNdWx0aXBsaWVyOmlHW2UtMV19KX1oYXZpbmdCYXNlU3R5bGUoZSl7ZT1lfHx0aGlzLnN0eWxlLnRleHQoKTt2YXIgcj1hRyh0LkJBU0VTSVpFLGUpO3JldHVybiB0aGlzLnNpemU9PT1yJiZ0aGlzLnRleHRTaXplPT09dC5CQVNFU0laRSYmdGhpcy5zdHlsZT09PWU/dGhpczp0aGlzLmV4dGVuZCh7c3R5bGU6ZSxzaXplOnJ9KX1oYXZpbmdCYXNlU2l6aW5nKCl7dmFyIGU7c3dpdGNoKHRoaXMuc3R5bGUuaWQpe2Nhc2UgNDpjYXNlIDU6ZT0zO2JyZWFrO2Nhc2UgNjpjYXNlIDc6ZT0xO2JyZWFrO2RlZmF1bHQ6ZT02fXJldHVybiB0aGlzLmV4dGVuZCh7c3R5bGU6dGhpcy5zdHlsZS50ZXh0KCksc2l6ZTplfSl9d2l0aENvbG9yKGUpe3JldHVybiB0aGlzLmV4dGVuZCh7Y29sb3I6ZX0pfXdpdGhQaGFudG9tKCl7cmV0dXJuIHRoaXMuZXh0ZW5kKHtwaGFudG9tOiEwfSl9d2l0aEZvbnQoZSl7cmV0dXJuIHRoaXMuZXh0ZW5kKHtmb250OmV9KX13aXRoVGV4dEZvbnRGYW1pbHkoZSl7cmV0dXJuIHRoaXMuZXh0ZW5kKHtmb250RmFtaWx5OmUsZm9udDoiIn0pfXdpdGhUZXh0Rm9udFdlaWdodChlKXtyZXR1cm4gdGhpcy5leHRlbmQoe2ZvbnRXZWlnaHQ6ZSxmb250OiIifSl9d2l0aFRleHRGb250U2hhcGUoZSl7cmV0dXJuIHRoaXMuZXh0ZW5kKHtmb250U2hhcGU6ZSxmb250OiIifSl9c2l6aW5nQ2xhc3NlcyhlKXtyZXR1cm4gZS5zaXplIT09dGhpcy5zaXplP1sic2l6aW5nIiwicmVzZXQtc2l6ZSIrZS5zaXplLCJzaXplIit0aGlzLnNpemVdOltdfWJhc2VTaXppbmdDbGFzc2VzKCl7cmV0dXJuIHRoaXMuc2l6ZSE9PXQuQkFTRVNJWkU/WyJzaXppbmciLCJyZXNldC1zaXplIit0aGlzLnNpemUsInNpemUiK3QuQkFTRVNJWkVdOltdfWZvbnRNZXRyaWNzKCl7cmV0dXJuIHRoaXMuX2ZvbnRNZXRyaWNzfHwodGhpcy5fZm9udE1ldHJpY3M9X2JlKHRoaXMuc2l6ZSkpLHRoaXMuX2ZvbnRNZXRyaWNzfWdldENvbG9yKCl7cmV0dXJuIHRoaXMucGhhbnRvbT8idHJhbnNwYXJlbnQiOnRoaXMuY29sb3J9fTtUNC5CQVNFU0laRT02O1RDPXtwdDoxLG1tOjcyMjcvMjU0MCxjbTo3MjI3LzI1NCxpbjo3Mi4yNyxicDo4MDMvODAwLHBjOjEyLGRkOjEyMzgvMTE1NyxjYzoxNDg1Ni8xMTU3LG5kOjY4NS82NDIsbmM6MTM3MC8xMDcsc3A6MS82NTUzNixweDo4MDMvODAwfSxEYmU9e2V4OiEwLGVtOiEwLG11OiEwfSxPRz1vKGZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZSE9InN0cmluZyImJihlPWUudW5pdCksZSBpbiBUQ3x8ZSBpbiBEYmV8fGU9PT0iZXgifSwidmFsaWRVbml0IiksSm49byhmdW5jdGlvbihlLHIpe3ZhciBuO2lmKGUudW5pdCBpbiBUQyluPVRDW2UudW5pdF0vci5mb250TWV0cmljcygpLnB0UGVyRW0vci5zaXplTXVsdGlwbGllcjtlbHNlIGlmKGUudW5pdD09PSJtdSIpbj1yLmZvbnRNZXRyaWNzKCkuY3NzRW1QZXJNdTtlbHNle3ZhciBpO2lmKHIuc3R5bGUuaXNUaWdodCgpP2k9ci5oYXZpbmdTdHlsZShyLnN0eWxlLnRleHQoKSk6aT1yLGUudW5pdD09PSJleCIpbj1pLmZvbnRNZXRyaWNzKCkueEhlaWdodDtlbHNlIGlmKGUudW5pdD09PSJlbSIpbj1pLmZvbnRNZXRyaWNzKCkucXVhZDtlbHNlIHRocm93IG5ldyBsdCgiSW52YWxpZCB1bml0OiAnIitlLnVuaXQrIiciKTtpIT09ciYmKG4qPWkuc2l6ZU11bHRpcGxpZXIvci5zaXplTXVsdGlwbGllcil9cmV0dXJuIE1hdGgubWluKGUubnVtYmVyKm4sci5tYXhTaXplKX0sImNhbGN1bGF0ZVNpemUiKSxndD1vKGZ1bmN0aW9uKGUpe3JldHVybitlLnRvRml4ZWQoNCkrImVtIn0sIm1ha2VFbSIpLHloPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuZmlsdGVyKHI9PnIpLmpvaW4oIiAiKX0sImNyZWF0ZUNsYXNzIiksUEc9byhmdW5jdGlvbihlLHIsbil7aWYodGhpcy5jbGFzc2VzPWV8fFtdLHRoaXMuYXR0cmlidXRlcz17fSx0aGlzLmhlaWdodD0wLHRoaXMuZGVwdGg9MCx0aGlzLm1heEZvbnRTaXplPTAsdGhpcy5zdHlsZT1ufHx7fSxyKXtyLnN0eWxlLmlzVGlnaHQoKSYmdGhpcy5jbGFzc2VzLnB1c2goIm10aWdodCIpO3ZhciBpPXIuZ2V0Q29sb3IoKTtpJiYodGhpcy5zdHlsZS5jb2xvcj1pKX19LCJpbml0Tm9kZSIpLEJHPW8oZnVuY3Rpb24oZSl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlKTtyLmNsYXNzTmFtZT15aCh0aGlzLmNsYXNzZXMpO2Zvcih2YXIgbiBpbiB0aGlzLnN0eWxlKXRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkobikmJihyLnN0eWxlW25dPXRoaXMuc3R5bGVbbl0pO2Zvcih2YXIgaSBpbiB0aGlzLmF0dHJpYnV0ZXMpdGhpcy5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KGkpJiZyLnNldEF0dHJpYnV0ZShpLHRoaXMuYXR0cmlidXRlc1tpXSk7Zm9yKHZhciBhPTA7YTx0aGlzLmNoaWxkcmVuLmxlbmd0aDthKyspci5hcHBlbmRDaGlsZCh0aGlzLmNoaWxkcmVuW2FdLnRvTm9kZSgpKTtyZXR1cm4gcn0sInRvTm9kZSIpLEZHPW8oZnVuY3Rpb24oZSl7dmFyIHI9IjwiK2U7dGhpcy5jbGFzc2VzLmxlbmd0aCYmKHIrPScgY2xhc3M9IicrSnQuZXNjYXBlKHloKHRoaXMuY2xhc3NlcykpKyciJyk7dmFyIG49IiI7Zm9yKHZhciBpIGluIHRoaXMuc3R5bGUpdGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShpKSYmKG4rPUp0Lmh5cGhlbmF0ZShpKSsiOiIrdGhpcy5zdHlsZVtpXSsiOyIpO24mJihyKz0nIHN0eWxlPSInK0p0LmVzY2FwZShuKSsnIicpO2Zvcih2YXIgYSBpbiB0aGlzLmF0dHJpYnV0ZXMpdGhpcy5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KGEpJiYocis9IiAiK2ErJz0iJytKdC5lc2NhcGUodGhpcy5hdHRyaWJ1dGVzW2FdKSsnIicpO3IrPSI+Ijtmb3IodmFyIHM9MDtzPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3MrKylyKz10aGlzLmNoaWxkcmVuW3NdLnRvTWFya3VwKCk7cmV0dXJuIHIrPSI8LyIrZSsiPiIscn0sInRvTWFya3VwIiksbmQ9Y2xhc3N7c3RhdGlje28odGhpcywiU3BhbiIpfWNvbnN0cnVjdG9yKGUscixuLGkpe3RoaXMuY2hpbGRyZW49dm9pZCAwLHRoaXMuYXR0cmlidXRlcz12b2lkIDAsdGhpcy5jbGFzc2VzPXZvaWQgMCx0aGlzLmhlaWdodD12b2lkIDAsdGhpcy5kZXB0aD12b2lkIDAsdGhpcy53aWR0aD12b2lkIDAsdGhpcy5tYXhGb250U2l6ZT12b2lkIDAsdGhpcy5zdHlsZT12b2lkIDAsUEcuY2FsbCh0aGlzLGUsbixpKSx0aGlzLmNoaWxkcmVuPXJ8fFtdfXNldEF0dHJpYnV0ZShlLHIpe3RoaXMuYXR0cmlidXRlc1tlXT1yfWhhc0NsYXNzKGUpe3JldHVybiBKdC5jb250YWlucyh0aGlzLmNsYXNzZXMsZSl9dG9Ob2RlKCl7cmV0dXJuIEJHLmNhbGwodGhpcywic3BhbiIpfXRvTWFya3VwKCl7cmV0dXJuIEZHLmNhbGwodGhpcywic3BhbiIpfX0sbXk9Y2xhc3N7c3RhdGlje28odGhpcywiQW5jaG9yIil9Y29uc3RydWN0b3IoZSxyLG4saSl7dGhpcy5jaGlsZHJlbj12b2lkIDAsdGhpcy5hdHRyaWJ1dGVzPXZvaWQgMCx0aGlzLmNsYXNzZXM9dm9pZCAwLHRoaXMuaGVpZ2h0PXZvaWQgMCx0aGlzLmRlcHRoPXZvaWQgMCx0aGlzLm1heEZvbnRTaXplPXZvaWQgMCx0aGlzLnN0eWxlPXZvaWQgMCxQRy5jYWxsKHRoaXMscixpKSx0aGlzLmNoaWxkcmVuPW58fFtdLHRoaXMuc2V0QXR0cmlidXRlKCJocmVmIixlKX1zZXRBdHRyaWJ1dGUoZSxyKXt0aGlzLmF0dHJpYnV0ZXNbZV09cn1oYXNDbGFzcyhlKXtyZXR1cm4gSnQuY29udGFpbnModGhpcy5jbGFzc2VzLGUpfXRvTm9kZSgpe3JldHVybiBCRy5jYWxsKHRoaXMsImEiKX10b01hcmt1cCgpe3JldHVybiBGRy5jYWxsKHRoaXMsImEiKX19LGtDPWNsYXNze3N0YXRpY3tvKHRoaXMsIkltZyIpfWNvbnN0cnVjdG9yKGUscixuKXt0aGlzLnNyYz12b2lkIDAsdGhpcy5hbHQ9dm9pZCAwLHRoaXMuY2xhc3Nlcz12b2lkIDAsdGhpcy5oZWlnaHQ9dm9pZCAwLHRoaXMuZGVwdGg9dm9pZCAwLHRoaXMubWF4Rm9udFNpemU9dm9pZCAwLHRoaXMuc3R5bGU9dm9pZCAwLHRoaXMuYWx0PXIsdGhpcy5zcmM9ZSx0aGlzLmNsYXNzZXM9WyJtb3JkIl0sdGhpcy5zdHlsZT1ufWhhc0NsYXNzKGUpe3JldHVybiBKdC5jb250YWlucyh0aGlzLmNsYXNzZXMsZSl9dG9Ob2RlKCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7ZS5zcmM9dGhpcy5zcmMsZS5hbHQ9dGhpcy5hbHQsZS5jbGFzc05hbWU9Im1vcmQiO2Zvcih2YXIgciBpbiB0aGlzLnN0eWxlKXRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkocikmJihlLnN0eWxlW3JdPXRoaXMuc3R5bGVbcl0pO3JldHVybiBlfXRvTWFya3VwKCl7dmFyIGU9JzxpbWcgc3JjPSInK0p0LmVzY2FwZSh0aGlzLnNyYykrJyInKygnIGFsdD0iJytKdC5lc2NhcGUodGhpcy5hbHQpKyciJykscj0iIjtmb3IodmFyIG4gaW4gdGhpcy5zdHlsZSl0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KG4pJiYocis9SnQuaHlwaGVuYXRlKG4pKyI6Iit0aGlzLnN0eWxlW25dKyI7Iik7cmV0dXJuIHImJihlKz0nIHN0eWxlPSInK0p0LmVzY2FwZShyKSsnIicpLGUrPSInLz4iLGV9fSxOYmU9e1x1MDBFRToiXHUwMTMxXHUwMzAyIixcdTAwRUY6Ilx1MDEzMVx1MDMwOCIsXHUwMEVEOiJcdTAxMzFcdTAzMDEiLFx1MDBFQzoiXHUwMTMxXHUwMzAwIn0sRXM9Y2xhc3N7c3RhdGlje28odGhpcywiU3ltYm9sTm9kZSIpfWNvbnN0cnVjdG9yKGUscixuLGksYSxzLGwsdSl7dGhpcy50ZXh0PXZvaWQgMCx0aGlzLmhlaWdodD12b2lkIDAsdGhpcy5kZXB0aD12b2lkIDAsdGhpcy5pdGFsaWM9dm9pZCAwLHRoaXMuc2tldz12b2lkIDAsdGhpcy53aWR0aD12b2lkIDAsdGhpcy5tYXhGb250U2l6ZT12b2lkIDAsdGhpcy5jbGFzc2VzPXZvaWQgMCx0aGlzLnN0eWxlPXZvaWQgMCx0aGlzLnRleHQ9ZSx0aGlzLmhlaWdodD1yfHwwLHRoaXMuZGVwdGg9bnx8MCx0aGlzLml0YWxpYz1pfHwwLHRoaXMuc2tldz1hfHwwLHRoaXMud2lkdGg9c3x8MCx0aGlzLmNsYXNzZXM9bHx8W10sdGhpcy5zdHlsZT11fHx7fSx0aGlzLm1heEZvbnRTaXplPTA7dmFyIGg9Z2JlKHRoaXMudGV4dC5jaGFyQ29kZUF0KDApKTtoJiZ0aGlzLmNsYXNzZXMucHVzaChoKyJfZmFsbGJhY2siKSwvW8Ouw6/DrcOsXS8udGVzdCh0aGlzLnRleHQpJiYodGhpcy50ZXh0PU5iZVt0aGlzLnRleHRdKX1oYXNDbGFzcyhlKXtyZXR1cm4gSnQuY29udGFpbnModGhpcy5jbGFzc2VzLGUpfXRvTm9kZSgpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMudGV4dCkscj1udWxsO3RoaXMuaXRhbGljPjAmJihyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKSxyLnN0eWxlLm1hcmdpblJpZ2h0PWd0KHRoaXMuaXRhbGljKSksdGhpcy5jbGFzc2VzLmxlbmd0aD4wJiYocj1yfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIiksci5jbGFzc05hbWU9eWgodGhpcy5jbGFzc2VzKSk7Zm9yKHZhciBuIGluIHRoaXMuc3R5bGUpdGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHI9cnx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpLHIuc3R5bGVbbl09dGhpcy5zdHlsZVtuXSk7cmV0dXJuIHI/KHIuYXBwZW5kQ2hpbGQoZSkscik6ZX10b01hcmt1cCgpe3ZhciBlPSExLHI9IjxzcGFuIjt0aGlzLmNsYXNzZXMubGVuZ3RoJiYoZT0hMCxyKz0nIGNsYXNzPSInLHIrPUp0LmVzY2FwZSh5aCh0aGlzLmNsYXNzZXMpKSxyKz0nIicpO3ZhciBuPSIiO3RoaXMuaXRhbGljPjAmJihuKz0ibWFyZ2luLXJpZ2h0OiIrdGhpcy5pdGFsaWMrImVtOyIpO2Zvcih2YXIgaSBpbiB0aGlzLnN0eWxlKXRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkoaSkmJihuKz1KdC5oeXBoZW5hdGUoaSkrIjoiK3RoaXMuc3R5bGVbaV0rIjsiKTtuJiYoZT0hMCxyKz0nIHN0eWxlPSInK0p0LmVzY2FwZShuKSsnIicpO3ZhciBhPUp0LmVzY2FwZSh0aGlzLnRleHQpO3JldHVybiBlPyhyKz0iPiIscis9YSxyKz0iPC9zcGFuPiIscik6YX19LHZsPWNsYXNze3N0YXRpY3tvKHRoaXMsIlN2Z05vZGUiKX1jb25zdHJ1Y3RvcihlLHIpe3RoaXMuY2hpbGRyZW49dm9pZCAwLHRoaXMuYXR0cmlidXRlcz12b2lkIDAsdGhpcy5jaGlsZHJlbj1lfHxbXSx0aGlzLmF0dHJpYnV0ZXM9cnx8e319dG9Ob2RlKCl7dmFyIGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLCJzdmciKTtmb3IodmFyIG4gaW4gdGhpcy5hdHRyaWJ1dGVzKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMsbikmJnIuc2V0QXR0cmlidXRlKG4sdGhpcy5hdHRyaWJ1dGVzW25dKTtmb3IodmFyIGk9MDtpPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO2krKylyLmFwcGVuZENoaWxkKHRoaXMuY2hpbGRyZW5baV0udG9Ob2RlKCkpO3JldHVybiByfXRvTWFya3VwKCl7dmFyIGU9JzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIic7Zm9yKHZhciByIGluIHRoaXMuYXR0cmlidXRlcylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLHIpJiYoZSs9IiAiK3IrJz0iJytKdC5lc2NhcGUodGhpcy5hdHRyaWJ1dGVzW3JdKSsnIicpO2UrPSI+Ijtmb3IodmFyIG49MDtuPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO24rKyllKz10aGlzLmNoaWxkcmVuW25dLnRvTWFya3VwKCk7cmV0dXJuIGUrPSI8L3N2Zz4iLGV9fSxjYz1jbGFzc3tzdGF0aWN7byh0aGlzLCJQYXRoTm9kZSIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy5wYXRoTmFtZT12b2lkIDAsdGhpcy5hbHRlcm5hdGU9dm9pZCAwLHRoaXMucGF0aE5hbWU9ZSx0aGlzLmFsdGVybmF0ZT1yfXRvTm9kZSgpe3ZhciBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZSwicGF0aCIpO3JldHVybiB0aGlzLmFsdGVybmF0ZT9yLnNldEF0dHJpYnV0ZSgiZCIsdGhpcy5hbHRlcm5hdGUpOnIuc2V0QXR0cmlidXRlKCJkIixyR1t0aGlzLnBhdGhOYW1lXSkscn10b01hcmt1cCgpe3JldHVybiB0aGlzLmFsdGVybmF0ZT8nPHBhdGggZD0iJytKdC5lc2NhcGUodGhpcy5hbHRlcm5hdGUpKyciLz4nOic8cGF0aCBkPSInK0p0LmVzY2FwZShyR1t0aGlzLnBhdGhOYW1lXSkrJyIvPid9fSxneT1jbGFzc3tzdGF0aWN7byh0aGlzLCJMaW5lTm9kZSIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuYXR0cmlidXRlcz12b2lkIDAsdGhpcy5hdHRyaWJ1dGVzPWV8fHt9fXRvTm9kZSgpe3ZhciBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZSwibGluZSIpO2Zvcih2YXIgbiBpbiB0aGlzLmF0dHJpYnV0ZXMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcyxuKSYmci5zZXRBdHRyaWJ1dGUobix0aGlzLmF0dHJpYnV0ZXNbbl0pO3JldHVybiByfXRvTWFya3VwKCl7dmFyIGU9IjxsaW5lIjtmb3IodmFyIHIgaW4gdGhpcy5hdHRyaWJ1dGVzKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMscikmJihlKz0iICIrcisnPSInK0p0LmVzY2FwZSh0aGlzLmF0dHJpYnV0ZXNbcl0pKyciJyk7cmV0dXJuIGUrPSIvPiIsZX19O28oc0csImFzc2VydFN5bWJvbERvbU5vZGUiKTtvKFJiZSwiYXNzZXJ0U3BhbiIpO01iZT17YmluOjEsY2xvc2U6MSxpbm5lcjoxLG9wZW46MSxwdW5jdDoxLHJlbDoxfSxJYmU9eyJhY2NlbnQtdG9rZW4iOjEsbWF0aG9yZDoxLCJvcC10b2tlbiI6MSxzcGFjaW5nOjEsdGV4dG9yZDoxfSxDbj17bWF0aDp7fSx0ZXh0Ont9fTtvKCQsImRlZmluZVN5bWJvbCIpO1Y9Im1hdGgiLGl0PSJ0ZXh0IixyZT0ibWFpbiIsYmU9ImFtcyIsVW49ImFjY2VudC10b2tlbiIsTHQ9ImJpbiIsZXM9ImNsb3NlIixTcD0iaW5uZXIiLHRyPSJtYXRob3JkIixDaT0ib3AtdG9rZW4iLGVvPSJvcGVuIixMND0icHVuY3QiLHdlPSJyZWwiLGd1PSJzcGFjaW5nIixfZT0idGV4dG9yZCI7JChWLHJlLHdlLCJcdTIyNjEiLCJcXGVxdWl2IiwhMCk7JChWLHJlLHdlLCJcdTIyN0EiLCJcXHByZWMiLCEwKTskKFYscmUsd2UsIlx1MjI3QiIsIlxcc3VjYyIsITApOyQoVixyZSx3ZSwiXHUyMjNDIiwiXFxzaW0iLCEwKTskKFYscmUsd2UsIlx1MjJBNSIsIlxccGVycCIpOyQoVixyZSx3ZSwiXHUyQUFGIiwiXFxwcmVjZXEiLCEwKTskKFYscmUsd2UsIlx1MkFCMCIsIlxcc3VjY2VxIiwhMCk7JChWLHJlLHdlLCJcdTIyNDMiLCJcXHNpbWVxIiwhMCk7JChWLHJlLHdlLCJcdTIyMjMiLCJcXG1pZCIsITApOyQoVixyZSx3ZSwiXHUyMjZBIiwiXFxsbCIsITApOyQoVixyZSx3ZSwiXHUyMjZCIiwiXFxnZyIsITApOyQoVixyZSx3ZSwiXHUyMjREIiwiXFxhc3ltcCIsITApOyQoVixyZSx3ZSwiXHUyMjI1IiwiXFxwYXJhbGxlbCIpOyQoVixyZSx3ZSwiXHUyMkM4IiwiXFxib3d0aWUiLCEwKTskKFYscmUsd2UsIlx1MjMyMyIsIlxcc21pbGUiLCEwKTskKFYscmUsd2UsIlx1MjI5MSIsIlxcc3FzdWJzZXRlcSIsITApOyQoVixyZSx3ZSwiXHUyMjkyIiwiXFxzcXN1cHNldGVxIiwhMCk7JChWLHJlLHdlLCJcdTIyNTAiLCJcXGRvdGVxIiwhMCk7JChWLHJlLHdlLCJcdTIzMjIiLCJcXGZyb3duIiwhMCk7JChWLHJlLHdlLCJcdTIyMEIiLCJcXG5pIiwhMCk7JChWLHJlLHdlLCJcdTIyMUQiLCJcXHByb3B0byIsITApOyQoVixyZSx3ZSwiXHUyMkEyIiwiXFx2ZGFzaCIsITApOyQoVixyZSx3ZSwiXHUyMkEzIiwiXFxkYXNodiIsITApOyQoVixyZSx3ZSwiXHUyMjBCIiwiXFxvd25zIik7JChWLHJlLEw0LCIuIiwiXFxsZG90cCIpOyQoVixyZSxMNCwiXHUyMkM1IiwiXFxjZG90cCIpOyQoVixyZSxfZSwiIyIsIlxcIyIpOyQoaXQscmUsX2UsIiMiLCJcXCMiKTskKFYscmUsX2UsIiYiLCJcXCYiKTskKGl0LHJlLF9lLCImIiwiXFwmIik7JChWLHJlLF9lLCJcdTIxMzUiLCJcXGFsZXBoIiwhMCk7JChWLHJlLF9lLCJcdTIyMDAiLCJcXGZvcmFsbCIsITApOyQoVixyZSxfZSwiXHUyMTBGIiwiXFxoYmFyIiwhMCk7JChWLHJlLF9lLCJcdTIyMDMiLCJcXGV4aXN0cyIsITApOyQoVixyZSxfZSwiXHUyMjA3IiwiXFxuYWJsYSIsITApOyQoVixyZSxfZSwiXHUyNjZEIiwiXFxmbGF0IiwhMCk7JChWLHJlLF9lLCJcdTIxMTMiLCJcXGVsbCIsITApOyQoVixyZSxfZSwiXHUyNjZFIiwiXFxuYXR1cmFsIiwhMCk7JChWLHJlLF9lLCJcdTI2NjMiLCJcXGNsdWJzdWl0IiwhMCk7JChWLHJlLF9lLCJcdTIxMTgiLCJcXHdwIiwhMCk7JChWLHJlLF9lLCJcdTI2NkYiLCJcXHNoYXJwIiwhMCk7JChWLHJlLF9lLCJcdTI2NjIiLCJcXGRpYW1vbmRzdWl0IiwhMCk7JChWLHJlLF9lLCJcdTIxMUMiLCJcXFJlIiwhMCk7JChWLHJlLF9lLCJcdTI2NjEiLCJcXGhlYXJ0c3VpdCIsITApOyQoVixyZSxfZSwiXHUyMTExIiwiXFxJbSIsITApOyQoVixyZSxfZSwiXHUyNjYwIiwiXFxzcGFkZXN1aXQiLCEwKTskKFYscmUsX2UsIlx4QTciLCJcXFMiLCEwKTskKGl0LHJlLF9lLCJceEE3IiwiXFxTIik7JChWLHJlLF9lLCJceEI2IiwiXFxQIiwhMCk7JChpdCxyZSxfZSwiXHhCNiIsIlxcUCIpOyQoVixyZSxfZSwiXHUyMDIwIiwiXFxkYWciKTskKGl0LHJlLF9lLCJcdTIwMjAiLCJcXGRhZyIpOyQoaXQscmUsX2UsIlx1MjAyMCIsIlxcdGV4dGRhZ2dlciIpOyQoVixyZSxfZSwiXHUyMDIxIiwiXFxkZGFnIik7JChpdCxyZSxfZSwiXHUyMDIxIiwiXFxkZGFnIik7JChpdCxyZSxfZSwiXHUyMDIxIiwiXFx0ZXh0ZGFnZ2VyZGJsIik7JChWLHJlLGVzLCJcdTIzQjEiLCJcXHJtb3VzdGFjaGUiLCEwKTskKFYscmUsZW8sIlx1MjNCMCIsIlxcbG1vdXN0YWNoZSIsITApOyQoVixyZSxlcywiXHUyN0VGIiwiXFxyZ3JvdXAiLCEwKTskKFYscmUsZW8sIlx1MjdFRSIsIlxcbGdyb3VwIiwhMCk7JChWLHJlLEx0LCJcdTIyMTMiLCJcXG1wIiwhMCk7JChWLHJlLEx0LCJcdTIyOTYiLCJcXG9taW51cyIsITApOyQoVixyZSxMdCwiXHUyMjhFIiwiXFx1cGx1cyIsITApOyQoVixyZSxMdCwiXHUyMjkzIiwiXFxzcWNhcCIsITApOyQoVixyZSxMdCwiXHUyMjE3IiwiXFxhc3QiKTskKFYscmUsTHQsIlx1MjI5NCIsIlxcc3FjdXAiLCEwKTskKFYscmUsTHQsIlx1MjVFRiIsIlxcYmlnY2lyYyIsITApOyQoVixyZSxMdCwiXHUyMjE5IiwiXFxidWxsZXQiLCEwKTskKFYscmUsTHQsIlx1MjAyMSIsIlxcZGRhZ2dlciIpOyQoVixyZSxMdCwiXHUyMjQwIiwiXFx3ciIsITApOyQoVixyZSxMdCwiXHUyQTNGIiwiXFxhbWFsZyIpOyQoVixyZSxMdCwiJiIsIlxcQW5kIik7JChWLHJlLHdlLCJcdTI3RjUiLCJcXGxvbmdsZWZ0YXJyb3ciLCEwKTskKFYscmUsd2UsIlx1MjFEMCIsIlxcTGVmdGFycm93IiwhMCk7JChWLHJlLHdlLCJcdTI3RjgiLCJcXExvbmdsZWZ0YXJyb3ciLCEwKTskKFYscmUsd2UsIlx1MjdGNiIsIlxcbG9uZ3JpZ2h0YXJyb3ciLCEwKTskKFYscmUsd2UsIlx1MjFEMiIsIlxcUmlnaHRhcnJvdyIsITApOyQoVixyZSx3ZSwiXHUyN0Y5IiwiXFxMb25ncmlnaHRhcnJvdyIsITApOyQoVixyZSx3ZSwiXHUyMTk0IiwiXFxsZWZ0cmlnaHRhcnJvdyIsITApOyQoVixyZSx3ZSwiXHUyN0Y3IiwiXFxsb25nbGVmdHJpZ2h0YXJyb3ciLCEwKTskKFYscmUsd2UsIlx1MjFENCIsIlxcTGVmdHJpZ2h0YXJyb3ciLCEwKTskKFYscmUsd2UsIlx1MjdGQSIsIlxcTG9uZ2xlZnRyaWdodGFycm93IiwhMCk7JChWLHJlLHdlLCJcdTIxQTYiLCJcXG1hcHN0byIsITApOyQoVixyZSx3ZSwiXHUyN0ZDIiwiXFxsb25nbWFwc3RvIiwhMCk7JChWLHJlLHdlLCJcdTIxOTciLCJcXG5lYXJyb3ciLCEwKTskKFYscmUsd2UsIlx1MjFBOSIsIlxcaG9va2xlZnRhcnJvdyIsITApOyQoVixyZSx3ZSwiXHUyMUFBIiwiXFxob29rcmlnaHRhcnJvdyIsITApOyQoVixyZSx3ZSwiXHUyMTk4IiwiXFxzZWFycm93IiwhMCk7JChWLHJlLHdlLCJcdTIxQkMiLCJcXGxlZnRoYXJwb29udXAiLCEwKTskKFYscmUsd2UsIlx1MjFDMCIsIlxccmlnaHRoYXJwb29udXAiLCEwKTskKFYscmUsd2UsIlx1MjE5OSIsIlxcc3dhcnJvdyIsITApOyQoVixyZSx3ZSwiXHUyMUJEIiwiXFxsZWZ0aGFycG9vbmRvd24iLCEwKTskKFYscmUsd2UsIlx1MjFDMSIsIlxccmlnaHRoYXJwb29uZG93biIsITApOyQoVixyZSx3ZSwiXHUyMTk2IiwiXFxud2Fycm93IiwhMCk7JChWLHJlLHdlLCJcdTIxQ0MiLCJcXHJpZ2h0bGVmdGhhcnBvb25zIiwhMCk7JChWLGJlLHdlLCJcdTIyNkUiLCJcXG5sZXNzIiwhMCk7JChWLGJlLHdlLCJcdUUwMTAiLCJcXEBubGVxc2xhbnQiKTskKFYsYmUsd2UsIlx1RTAxMSIsIlxcQG5sZXFxIik7JChWLGJlLHdlLCJcdTJBODciLCJcXGxuZXEiLCEwKTskKFYsYmUsd2UsIlx1MjI2OCIsIlxcbG5lcXEiLCEwKTskKFYsYmUsd2UsIlx1RTAwQyIsIlxcQGx2ZXJ0bmVxcSIpOyQoVixiZSx3ZSwiXHUyMkU2IiwiXFxsbnNpbSIsITApOyQoVixiZSx3ZSwiXHUyQTg5IiwiXFxsbmFwcHJveCIsITApOyQoVixiZSx3ZSwiXHUyMjgwIiwiXFxucHJlYyIsITApOyQoVixiZSx3ZSwiXHUyMkUwIiwiXFxucHJlY2VxIiwhMCk7JChWLGJlLHdlLCJcdTIyRTgiLCJcXHByZWNuc2ltIiwhMCk7JChWLGJlLHdlLCJcdTJBQjkiLCJcXHByZWNuYXBwcm94IiwhMCk7JChWLGJlLHdlLCJcdTIyNDEiLCJcXG5zaW0iLCEwKTskKFYsYmUsd2UsIlx1RTAwNiIsIlxcQG5zaG9ydG1pZCIpOyQoVixiZSx3ZSwiXHUyMjI0IiwiXFxubWlkIiwhMCk7JChWLGJlLHdlLCJcdTIyQUMiLCJcXG52ZGFzaCIsITApOyQoVixiZSx3ZSwiXHUyMkFEIiwiXFxudkRhc2giLCEwKTskKFYsYmUsd2UsIlx1MjJFQSIsIlxcbnRyaWFuZ2xlbGVmdCIpOyQoVixiZSx3ZSwiXHUyMkVDIiwiXFxudHJpYW5nbGVsZWZ0ZXEiLCEwKTskKFYsYmUsd2UsIlx1MjI4QSIsIlxcc3Vic2V0bmVxIiwhMCk7JChWLGJlLHdlLCJcdUUwMUEiLCJcXEB2YXJzdWJzZXRuZXEiKTskKFYsYmUsd2UsIlx1MkFDQiIsIlxcc3Vic2V0bmVxcSIsITApOyQoVixiZSx3ZSwiXHVFMDE3IiwiXFxAdmFyc3Vic2V0bmVxcSIpOyQoVixiZSx3ZSwiXHUyMjZGIiwiXFxuZ3RyIiwhMCk7JChWLGJlLHdlLCJcdUUwMEYiLCJcXEBuZ2Vxc2xhbnQiKTskKFYsYmUsd2UsIlx1RTAwRSIsIlxcQG5nZXFxIik7JChWLGJlLHdlLCJcdTJBODgiLCJcXGduZXEiLCEwKTskKFYsYmUsd2UsIlx1MjI2OSIsIlxcZ25lcXEiLCEwKTskKFYsYmUsd2UsIlx1RTAwRCIsIlxcQGd2ZXJ0bmVxcSIpOyQoVixiZSx3ZSwiXHUyMkU3IiwiXFxnbnNpbSIsITApOyQoVixiZSx3ZSwiXHUyQThBIiwiXFxnbmFwcHJveCIsITApOyQoVixiZSx3ZSwiXHUyMjgxIiwiXFxuc3VjYyIsITApOyQoVixiZSx3ZSwiXHUyMkUxIiwiXFxuc3VjY2VxIiwhMCk7JChWLGJlLHdlLCJcdTIyRTkiLCJcXHN1Y2Nuc2ltIiwhMCk7JChWLGJlLHdlLCJcdTJBQkEiLCJcXHN1Y2NuYXBwcm94IiwhMCk7JChWLGJlLHdlLCJcdTIyNDYiLCJcXG5jb25nIiwhMCk7JChWLGJlLHdlLCJcdUUwMDciLCJcXEBuc2hvcnRwYXJhbGxlbCIpOyQoVixiZSx3ZSwiXHUyMjI2IiwiXFxucGFyYWxsZWwiLCEwKTskKFYsYmUsd2UsIlx1MjJBRiIsIlxcblZEYXNoIiwhMCk7JChWLGJlLHdlLCJcdTIyRUIiLCJcXG50cmlhbmdsZXJpZ2h0Iik7JChWLGJlLHdlLCJcdTIyRUQiLCJcXG50cmlhbmdsZXJpZ2h0ZXEiLCEwKTskKFYsYmUsd2UsIlx1RTAxOCIsIlxcQG5zdXBzZXRlcXEiKTskKFYsYmUsd2UsIlx1MjI4QiIsIlxcc3Vwc2V0bmVxIiwhMCk7JChWLGJlLHdlLCJcdUUwMUIiLCJcXEB2YXJzdXBzZXRuZXEiKTskKFYsYmUsd2UsIlx1MkFDQyIsIlxcc3Vwc2V0bmVxcSIsITApOyQoVixiZSx3ZSwiXHVFMDE5IiwiXFxAdmFyc3Vwc2V0bmVxcSIpOyQoVixiZSx3ZSwiXHUyMkFFIiwiXFxuVmRhc2giLCEwKTskKFYsYmUsd2UsIlx1MkFCNSIsIlxccHJlY25lcXEiLCEwKTskKFYsYmUsd2UsIlx1MkFCNiIsIlxcc3VjY25lcXEiLCEwKTskKFYsYmUsd2UsIlx1RTAxNiIsIlxcQG5zdWJzZXRlcXEiKTskKFYsYmUsTHQsIlx1MjJCNCIsIlxcdW5saGQiKTskKFYsYmUsTHQsIlx1MjJCNSIsIlxcdW5yaGQiKTskKFYsYmUsd2UsIlx1MjE5QSIsIlxcbmxlZnRhcnJvdyIsITApOyQoVixiZSx3ZSwiXHUyMTlCIiwiXFxucmlnaHRhcnJvdyIsITApOyQoVixiZSx3ZSwiXHUyMUNEIiwiXFxuTGVmdGFycm93IiwhMCk7JChWLGJlLHdlLCJcdTIxQ0YiLCJcXG5SaWdodGFycm93IiwhMCk7JChWLGJlLHdlLCJcdTIxQUUiLCJcXG5sZWZ0cmlnaHRhcnJvdyIsITApOyQoVixiZSx3ZSwiXHUyMUNFIiwiXFxuTGVmdHJpZ2h0YXJyb3ciLCEwKTskKFYsYmUsd2UsIlx1MjVCMyIsIlxcdmFydHJpYW5nbGUiKTskKFYsYmUsX2UsIlx1MjEwRiIsIlxcaHNsYXNoIik7JChWLGJlLF9lLCJcdTI1QkQiLCJcXHRyaWFuZ2xlZG93biIpOyQoVixiZSxfZSwiXHUyNUNBIiwiXFxsb3plbmdlIik7JChWLGJlLF9lLCJcdTI0QzgiLCJcXGNpcmNsZWRTIik7JChWLGJlLF9lLCJceEFFIiwiXFxjaXJjbGVkUiIpOyQoaXQsYmUsX2UsIlx4QUUiLCJcXGNpcmNsZWRSIik7JChWLGJlLF9lLCJcdTIyMjEiLCJcXG1lYXN1cmVkYW5nbGUiLCEwKTskKFYsYmUsX2UsIlx1MjIwNCIsIlxcbmV4aXN0cyIpOyQoVixiZSxfZSwiXHUyMTI3IiwiXFxtaG8iKTskKFYsYmUsX2UsIlx1MjEzMiIsIlxcRmludiIsITApOyQoVixiZSxfZSwiXHUyMTQxIiwiXFxHYW1lIiwhMCk7JChWLGJlLF9lLCJcdTIwMzUiLCJcXGJhY2twcmltZSIpOyQoVixiZSxfZSwiXHUyNUIyIiwiXFxibGFja3RyaWFuZ2xlIik7JChWLGJlLF9lLCJcdTI1QkMiLCJcXGJsYWNrdHJpYW5nbGVkb3duIik7JChWLGJlLF9lLCJcdTI1QTAiLCJcXGJsYWNrc3F1YXJlIik7JChWLGJlLF9lLCJcdTI5RUIiLCJcXGJsYWNrbG96ZW5nZSIpOyQoVixiZSxfZSwiXHUyNjA1IiwiXFxiaWdzdGFyIik7JChWLGJlLF9lLCJcdTIyMjIiLCJcXHNwaGVyaWNhbGFuZ2xlIiwhMCk7JChWLGJlLF9lLCJcdTIyMDEiLCJcXGNvbXBsZW1lbnQiLCEwKTskKFYsYmUsX2UsIlx4RjAiLCJcXGV0aCIsITApOyQoaXQscmUsX2UsIlx4RjAiLCJceEYwIik7JChWLGJlLF9lLCJcdTI1NzEiLCJcXGRpYWd1cCIpOyQoVixiZSxfZSwiXHUyNTcyIiwiXFxkaWFnZG93biIpOyQoVixiZSxfZSwiXHUyNUExIiwiXFxzcXVhcmUiKTskKFYsYmUsX2UsIlx1MjVBMSIsIlxcQm94Iik7JChWLGJlLF9lLCJcdTI1Q0EiLCJcXERpYW1vbmQiKTskKFYsYmUsX2UsIlx4QTUiLCJcXHllbiIsITApOyQoaXQsYmUsX2UsIlx4QTUiLCJcXHllbiIsITApOyQoVixiZSxfZSwiXHUyNzEzIiwiXFxjaGVja21hcmsiLCEwKTskKGl0LGJlLF9lLCJcdTI3MTMiLCJcXGNoZWNrbWFyayIpOyQoVixiZSxfZSwiXHUyMTM2IiwiXFxiZXRoIiwhMCk7JChWLGJlLF9lLCJcdTIxMzgiLCJcXGRhbGV0aCIsITApOyQoVixiZSxfZSwiXHUyMTM3IiwiXFxnaW1lbCIsITApOyQoVixiZSxfZSwiXHUwM0REIiwiXFxkaWdhbW1hIiwhMCk7JChWLGJlLF9lLCJcdTAzRjAiLCJcXHZhcmthcHBhIik7JChWLGJlLGVvLCJcdTI1MEMiLCJcXEB1bGNvcm5lciIsITApOyQoVixiZSxlcywiXHUyNTEwIiwiXFxAdXJjb3JuZXIiLCEwKTskKFYsYmUsZW8sIlx1MjUxNCIsIlxcQGxsY29ybmVyIiwhMCk7JChWLGJlLGVzLCJcdTI1MTgiLCJcXEBscmNvcm5lciIsITApOyQoVixiZSx3ZSwiXHUyMjY2IiwiXFxsZXFxIiwhMCk7JChWLGJlLHdlLCJcdTJBN0QiLCJcXGxlcXNsYW50IiwhMCk7JChWLGJlLHdlLCJcdTJBOTUiLCJcXGVxc2xhbnRsZXNzIiwhMCk7JChWLGJlLHdlLCJcdTIyNzIiLCJcXGxlc3NzaW0iLCEwKTskKFYsYmUsd2UsIlx1MkE4NSIsIlxcbGVzc2FwcHJveCIsITApOyQoVixiZSx3ZSwiXHUyMjRBIiwiXFxhcHByb3hlcSIsITApOyQoVixiZSxMdCwiXHUyMkQ2IiwiXFxsZXNzZG90Iik7JChWLGJlLHdlLCJcdTIyRDgiLCJcXGxsbCIsITApOyQoVixiZSx3ZSwiXHUyMjc2IiwiXFxsZXNzZ3RyIiwhMCk7JChWLGJlLHdlLCJcdTIyREEiLCJcXGxlc3NlcWd0ciIsITApOyQoVixiZSx3ZSwiXHUyQThCIiwiXFxsZXNzZXFxZ3RyIiwhMCk7JChWLGJlLHdlLCJcdTIyNTEiLCJcXGRvdGVxZG90Iik7JChWLGJlLHdlLCJcdTIyNTMiLCJcXHJpc2luZ2RvdHNlcSIsITApOyQoVixiZSx3ZSwiXHUyMjUyIiwiXFxmYWxsaW5nZG90c2VxIiwhMCk7JChWLGJlLHdlLCJcdTIyM0QiLCJcXGJhY2tzaW0iLCEwKTskKFYsYmUsd2UsIlx1MjJDRCIsIlxcYmFja3NpbWVxIiwhMCk7JChWLGJlLHdlLCJcdTJBQzUiLCJcXHN1YnNldGVxcSIsITApOyQoVixiZSx3ZSwiXHUyMkQwIiwiXFxTdWJzZXQiLCEwKTskKFYsYmUsd2UsIlx1MjI4RiIsIlxcc3FzdWJzZXQiLCEwKTskKFYsYmUsd2UsIlx1MjI3QyIsIlxccHJlY2N1cmx5ZXEiLCEwKTskKFYsYmUsd2UsIlx1MjJERSIsIlxcY3VybHllcXByZWMiLCEwKTskKFYsYmUsd2UsIlx1MjI3RSIsIlxccHJlY3NpbSIsITApOyQoVixiZSx3ZSwiXHUyQUI3IiwiXFxwcmVjYXBwcm94IiwhMCk7JChWLGJlLHdlLCJcdTIyQjIiLCJcXHZhcnRyaWFuZ2xlbGVmdCIpOyQoVixiZSx3ZSwiXHUyMkI0IiwiXFx0cmlhbmdsZWxlZnRlcSIpOyQoVixiZSx3ZSwiXHUyMkE4IiwiXFx2RGFzaCIsITApOyQoVixiZSx3ZSwiXHUyMkFBIiwiXFxWdmRhc2giLCEwKTskKFYsYmUsd2UsIlx1MjMyMyIsIlxcc21hbGxzbWlsZSIpOyQoVixiZSx3ZSwiXHUyMzIyIiwiXFxzbWFsbGZyb3duIik7JChWLGJlLHdlLCJcdTIyNEYiLCJcXGJ1bXBlcSIsITApOyQoVixiZSx3ZSwiXHUyMjRFIiwiXFxCdW1wZXEiLCEwKTskKFYsYmUsd2UsIlx1MjI2NyIsIlxcZ2VxcSIsITApOyQoVixiZSx3ZSwiXHUyQTdFIiwiXFxnZXFzbGFudCIsITApOyQoVixiZSx3ZSwiXHUyQTk2IiwiXFxlcXNsYW50Z3RyIiwhMCk7JChWLGJlLHdlLCJcdTIyNzMiLCJcXGd0cnNpbSIsITApOyQoVixiZSx3ZSwiXHUyQTg2IiwiXFxndHJhcHByb3giLCEwKTskKFYsYmUsTHQsIlx1MjJENyIsIlxcZ3RyZG90Iik7JChWLGJlLHdlLCJcdTIyRDkiLCJcXGdnZyIsITApOyQoVixiZSx3ZSwiXHUyMjc3IiwiXFxndHJsZXNzIiwhMCk7JChWLGJlLHdlLCJcdTIyREIiLCJcXGd0cmVxbGVzcyIsITApOyQoVixiZSx3ZSwiXHUyQThDIiwiXFxndHJlcXFsZXNzIiwhMCk7JChWLGJlLHdlLCJcdTIyNTYiLCJcXGVxY2lyYyIsITApOyQoVixiZSx3ZSwiXHUyMjU3IiwiXFxjaXJjZXEiLCEwKTskKFYsYmUsd2UsIlx1MjI1QyIsIlxcdHJpYW5nbGVxIiwhMCk7JChWLGJlLHdlLCJcdTIyM0MiLCJcXHRoaWNrc2ltIik7JChWLGJlLHdlLCJcdTIyNDgiLCJcXHRoaWNrYXBwcm94Iik7JChWLGJlLHdlLCJcdTJBQzYiLCJcXHN1cHNldGVxcSIsITApOyQoVixiZSx3ZSwiXHUyMkQxIiwiXFxTdXBzZXQiLCEwKTskKFYsYmUsd2UsIlx1MjI5MCIsIlxcc3FzdXBzZXQiLCEwKTskKFYsYmUsd2UsIlx1MjI3RCIsIlxcc3VjY2N1cmx5ZXEiLCEwKTskKFYsYmUsd2UsIlx1MjJERiIsIlxcY3VybHllcXN1Y2MiLCEwKTskKFYsYmUsd2UsIlx1MjI3RiIsIlxcc3VjY3NpbSIsITApOyQoVixiZSx3ZSwiXHUyQUI4IiwiXFxzdWNjYXBwcm94IiwhMCk7JChWLGJlLHdlLCJcdTIyQjMiLCJcXHZhcnRyaWFuZ2xlcmlnaHQiKTskKFYsYmUsd2UsIlx1MjJCNSIsIlxcdHJpYW5nbGVyaWdodGVxIik7JChWLGJlLHdlLCJcdTIyQTkiLCJcXFZkYXNoIiwhMCk7JChWLGJlLHdlLCJcdTIyMjMiLCJcXHNob3J0bWlkIik7JChWLGJlLHdlLCJcdTIyMjUiLCJcXHNob3J0cGFyYWxsZWwiKTskKFYsYmUsd2UsIlx1MjI2QyIsIlxcYmV0d2VlbiIsITApOyQoVixiZSx3ZSwiXHUyMkQ0IiwiXFxwaXRjaGZvcmsiLCEwKTskKFYsYmUsd2UsIlx1MjIxRCIsIlxcdmFycHJvcHRvIik7JChWLGJlLHdlLCJcdTI1QzAiLCJcXGJsYWNrdHJpYW5nbGVsZWZ0Iik7JChWLGJlLHdlLCJcdTIyMzQiLCJcXHRoZXJlZm9yZSIsITApOyQoVixiZSx3ZSwiXHUyMjBEIiwiXFxiYWNrZXBzaWxvbiIpOyQoVixiZSx3ZSwiXHUyNUI2IiwiXFxibGFja3RyaWFuZ2xlcmlnaHQiKTskKFYsYmUsd2UsIlx1MjIzNSIsIlxcYmVjYXVzZSIsITApOyQoVixiZSx3ZSwiXHUyMkQ4IiwiXFxsbGxlc3MiKTskKFYsYmUsd2UsIlx1MjJEOSIsIlxcZ2dndHIiKTskKFYsYmUsTHQsIlx1MjJCMiIsIlxcbGhkIik7JChWLGJlLEx0LCJcdTIyQjMiLCJcXHJoZCIpOyQoVixiZSx3ZSwiXHUyMjQyIiwiXFxlcXNpbSIsITApOyQoVixyZSx3ZSwiXHUyMkM4IiwiXFxKb2luIik7JChWLGJlLHdlLCJcdTIyNTEiLCJcXERvdGVxIiwhMCk7JChWLGJlLEx0LCJcdTIyMTQiLCJcXGRvdHBsdXMiLCEwKTskKFYsYmUsTHQsIlx1MjIxNiIsIlxcc21hbGxzZXRtaW51cyIpOyQoVixiZSxMdCwiXHUyMkQyIiwiXFxDYXAiLCEwKTskKFYsYmUsTHQsIlx1MjJEMyIsIlxcQ3VwIiwhMCk7JChWLGJlLEx0LCJcdTJBNUUiLCJcXGRvdWJsZWJhcndlZGdlIiwhMCk7JChWLGJlLEx0LCJcdTIyOUYiLCJcXGJveG1pbnVzIiwhMCk7JChWLGJlLEx0LCJcdTIyOUUiLCJcXGJveHBsdXMiLCEwKTskKFYsYmUsTHQsIlx1MjJDNyIsIlxcZGl2aWRlb250aW1lcyIsITApOyQoVixiZSxMdCwiXHUyMkM5IiwiXFxsdGltZXMiLCEwKTskKFYsYmUsTHQsIlx1MjJDQSIsIlxccnRpbWVzIiwhMCk7JChWLGJlLEx0LCJcdTIyQ0IiLCJcXGxlZnR0aHJlZXRpbWVzIiwhMCk7JChWLGJlLEx0LCJcdTIyQ0MiLCJcXHJpZ2h0dGhyZWV0aW1lcyIsITApOyQoVixiZSxMdCwiXHUyMkNGIiwiXFxjdXJseXdlZGdlIiwhMCk7JChWLGJlLEx0LCJcdTIyQ0UiLCJcXGN1cmx5dmVlIiwhMCk7JChWLGJlLEx0LCJcdTIyOUQiLCJcXGNpcmNsZWRkYXNoIiwhMCk7JChWLGJlLEx0LCJcdTIyOUIiLCJcXGNpcmNsZWRhc3QiLCEwKTskKFYsYmUsTHQsIlx1MjJDNSIsIlxcY2VudGVyZG90Iik7JChWLGJlLEx0LCJcdTIyQkEiLCJcXGludGVyY2FsIiwhMCk7JChWLGJlLEx0LCJcdTIyRDIiLCJcXGRvdWJsZWNhcCIpOyQoVixiZSxMdCwiXHUyMkQzIiwiXFxkb3VibGVjdXAiKTskKFYsYmUsTHQsIlx1MjJBMCIsIlxcYm94dGltZXMiLCEwKTskKFYsYmUsd2UsIlx1MjFFMiIsIlxcZGFzaHJpZ2h0YXJyb3ciLCEwKTskKFYsYmUsd2UsIlx1MjFFMCIsIlxcZGFzaGxlZnRhcnJvdyIsITApOyQoVixiZSx3ZSwiXHUyMUM3IiwiXFxsZWZ0bGVmdGFycm93cyIsITApOyQoVixiZSx3ZSwiXHUyMUM2IiwiXFxsZWZ0cmlnaHRhcnJvd3MiLCEwKTskKFYsYmUsd2UsIlx1MjFEQSIsIlxcTGxlZnRhcnJvdyIsITApOyQoVixiZSx3ZSwiXHUyMTlFIiwiXFx0d29oZWFkbGVmdGFycm93IiwhMCk7JChWLGJlLHdlLCJcdTIxQTIiLCJcXGxlZnRhcnJvd3RhaWwiLCEwKTskKFYsYmUsd2UsIlx1MjFBQiIsIlxcbG9vcGFycm93bGVmdCIsITApOyQoVixiZSx3ZSwiXHUyMUNCIiwiXFxsZWZ0cmlnaHRoYXJwb29ucyIsITApOyQoVixiZSx3ZSwiXHUyMUI2IiwiXFxjdXJ2ZWFycm93bGVmdCIsITApOyQoVixiZSx3ZSwiXHUyMUJBIiwiXFxjaXJjbGVhcnJvd2xlZnQiLCEwKTskKFYsYmUsd2UsIlx1MjFCMCIsIlxcTHNoIiwhMCk7JChWLGJlLHdlLCJcdTIxQzgiLCJcXHVwdXBhcnJvd3MiLCEwKTskKFYsYmUsd2UsIlx1MjFCRiIsIlxcdXBoYXJwb29ubGVmdCIsITApOyQoVixiZSx3ZSwiXHUyMUMzIiwiXFxkb3duaGFycG9vbmxlZnQiLCEwKTskKFYscmUsd2UsIlx1MjJCNiIsIlxcb3JpZ29mIiwhMCk7JChWLHJlLHdlLCJcdTIyQjciLCJcXGltYWdlb2YiLCEwKTskKFYsYmUsd2UsIlx1MjJCOCIsIlxcbXVsdGltYXAiLCEwKTskKFYsYmUsd2UsIlx1MjFBRCIsIlxcbGVmdHJpZ2h0c3F1aWdhcnJvdyIsITApOyQoVixiZSx3ZSwiXHUyMUM5IiwiXFxyaWdodHJpZ2h0YXJyb3dzIiwhMCk7JChWLGJlLHdlLCJcdTIxQzQiLCJcXHJpZ2h0bGVmdGFycm93cyIsITApOyQoVixiZSx3ZSwiXHUyMUEwIiwiXFx0d29oZWFkcmlnaHRhcnJvdyIsITApOyQoVixiZSx3ZSwiXHUyMUEzIiwiXFxyaWdodGFycm93dGFpbCIsITApOyQoVixiZSx3ZSwiXHUyMUFDIiwiXFxsb29wYXJyb3dyaWdodCIsITApOyQoVixiZSx3ZSwiXHUyMUI3IiwiXFxjdXJ2ZWFycm93cmlnaHQiLCEwKTskKFYsYmUsd2UsIlx1MjFCQiIsIlxcY2lyY2xlYXJyb3dyaWdodCIsITApOyQoVixiZSx3ZSwiXHUyMUIxIiwiXFxSc2giLCEwKTskKFYsYmUsd2UsIlx1MjFDQSIsIlxcZG93bmRvd25hcnJvd3MiLCEwKTskKFYsYmUsd2UsIlx1MjFCRSIsIlxcdXBoYXJwb29ucmlnaHQiLCEwKTskKFYsYmUsd2UsIlx1MjFDMiIsIlxcZG93bmhhcnBvb25yaWdodCIsITApOyQoVixiZSx3ZSwiXHUyMUREIiwiXFxyaWdodHNxdWlnYXJyb3ciLCEwKTskKFYsYmUsd2UsIlx1MjFERCIsIlxcbGVhZHN0byIpOyQoVixiZSx3ZSwiXHUyMURCIiwiXFxScmlnaHRhcnJvdyIsITApOyQoVixiZSx3ZSwiXHUyMUJFIiwiXFxyZXN0cmljdGlvbiIpOyQoVixyZSxfZSwiXHUyMDE4IiwiYCIpOyQoVixyZSxfZSwiJCIsIlxcJCIpOyQoaXQscmUsX2UsIiQiLCJcXCQiKTskKGl0LHJlLF9lLCIkIiwiXFx0ZXh0ZG9sbGFyIik7JChWLHJlLF9lLCIlIiwiXFwlIik7JChpdCxyZSxfZSwiJSIsIlxcJSIpOyQoVixyZSxfZSwiXyIsIlxcXyIpOyQoaXQscmUsX2UsIl8iLCJcXF8iKTskKGl0LHJlLF9lLCJfIiwiXFx0ZXh0dW5kZXJzY29yZSIpOyQoVixyZSxfZSwiXHUyMjIwIiwiXFxhbmdsZSIsITApOyQoVixyZSxfZSwiXHUyMjFFIiwiXFxpbmZ0eSIsITApOyQoVixyZSxfZSwiXHUyMDMyIiwiXFxwcmltZSIpOyQoVixyZSxfZSwiXHUyNUIzIiwiXFx0cmlhbmdsZSIpOyQoVixyZSxfZSwiXHUwMzkzIiwiXFxHYW1tYSIsITApOyQoVixyZSxfZSwiXHUwMzk0IiwiXFxEZWx0YSIsITApOyQoVixyZSxfZSwiXHUwMzk4IiwiXFxUaGV0YSIsITApOyQoVixyZSxfZSwiXHUwMzlCIiwiXFxMYW1iZGEiLCEwKTskKFYscmUsX2UsIlx1MDM5RSIsIlxcWGkiLCEwKTskKFYscmUsX2UsIlx1MDNBMCIsIlxcUGkiLCEwKTskKFYscmUsX2UsIlx1MDNBMyIsIlxcU2lnbWEiLCEwKTskKFYscmUsX2UsIlx1MDNBNSIsIlxcVXBzaWxvbiIsITApOyQoVixyZSxfZSwiXHUwM0E2IiwiXFxQaGkiLCEwKTskKFYscmUsX2UsIlx1MDNBOCIsIlxcUHNpIiwhMCk7JChWLHJlLF9lLCJcdTAzQTkiLCJcXE9tZWdhIiwhMCk7JChWLHJlLF9lLCJBIiwiXHUwMzkxIik7JChWLHJlLF9lLCJCIiwiXHUwMzkyIik7JChWLHJlLF9lLCJFIiwiXHUwMzk1Iik7JChWLHJlLF9lLCJaIiwiXHUwMzk2Iik7JChWLHJlLF9lLCJIIiwiXHUwMzk3Iik7JChWLHJlLF9lLCJJIiwiXHUwMzk5Iik7JChWLHJlLF9lLCJLIiwiXHUwMzlBIik7JChWLHJlLF9lLCJNIiwiXHUwMzlDIik7JChWLHJlLF9lLCJOIiwiXHUwMzlEIik7JChWLHJlLF9lLCJPIiwiXHUwMzlGIik7JChWLHJlLF9lLCJQIiwiXHUwM0ExIik7JChWLHJlLF9lLCJUIiwiXHUwM0E0Iik7JChWLHJlLF9lLCJYIiwiXHUwM0E3Iik7JChWLHJlLF9lLCJceEFDIiwiXFxuZWciLCEwKTskKFYscmUsX2UsIlx4QUMiLCJcXGxub3QiKTskKFYscmUsX2UsIlx1MjJBNCIsIlxcdG9wIik7JChWLHJlLF9lLCJcdTIyQTUiLCJcXGJvdCIpOyQoVixyZSxfZSwiXHUyMjA1IiwiXFxlbXB0eXNldCIpOyQoVixiZSxfZSwiXHUyMjA1IiwiXFx2YXJub3RoaW5nIik7JChWLHJlLHRyLCJcdTAzQjEiLCJcXGFscGhhIiwhMCk7JChWLHJlLHRyLCJcdTAzQjIiLCJcXGJldGEiLCEwKTskKFYscmUsdHIsIlx1MDNCMyIsIlxcZ2FtbWEiLCEwKTskKFYscmUsdHIsIlx1MDNCNCIsIlxcZGVsdGEiLCEwKTskKFYscmUsdHIsIlx1MDNGNSIsIlxcZXBzaWxvbiIsITApOyQoVixyZSx0ciwiXHUwM0I2IiwiXFx6ZXRhIiwhMCk7JChWLHJlLHRyLCJcdTAzQjciLCJcXGV0YSIsITApOyQoVixyZSx0ciwiXHUwM0I4IiwiXFx0aGV0YSIsITApOyQoVixyZSx0ciwiXHUwM0I5IiwiXFxpb3RhIiwhMCk7JChWLHJlLHRyLCJcdTAzQkEiLCJcXGthcHBhIiwhMCk7JChWLHJlLHRyLCJcdTAzQkIiLCJcXGxhbWJkYSIsITApOyQoVixyZSx0ciwiXHUwM0JDIiwiXFxtdSIsITApOyQoVixyZSx0ciwiXHUwM0JEIiwiXFxudSIsITApOyQoVixyZSx0ciwiXHUwM0JFIiwiXFx4aSIsITApOyQoVixyZSx0ciwiXHUwM0JGIiwiXFxvbWljcm9uIiwhMCk7JChWLHJlLHRyLCJcdTAzQzAiLCJcXHBpIiwhMCk7JChWLHJlLHRyLCJcdTAzQzEiLCJcXHJobyIsITApOyQoVixyZSx0ciwiXHUwM0MzIiwiXFxzaWdtYSIsITApOyQoVixyZSx0ciwiXHUwM0M0IiwiXFx0YXUiLCEwKTskKFYscmUsdHIsIlx1MDNDNSIsIlxcdXBzaWxvbiIsITApOyQoVixyZSx0ciwiXHUwM0Q1IiwiXFxwaGkiLCEwKTskKFYscmUsdHIsIlx1MDNDNyIsIlxcY2hpIiwhMCk7JChWLHJlLHRyLCJcdTAzQzgiLCJcXHBzaSIsITApOyQoVixyZSx0ciwiXHUwM0M5IiwiXFxvbWVnYSIsITApOyQoVixyZSx0ciwiXHUwM0I1IiwiXFx2YXJlcHNpbG9uIiwhMCk7JChWLHJlLHRyLCJcdTAzRDEiLCJcXHZhcnRoZXRhIiwhMCk7JChWLHJlLHRyLCJcdTAzRDYiLCJcXHZhcnBpIiwhMCk7JChWLHJlLHRyLCJcdTAzRjEiLCJcXHZhcnJobyIsITApOyQoVixyZSx0ciwiXHUwM0MyIiwiXFx2YXJzaWdtYSIsITApOyQoVixyZSx0ciwiXHUwM0M2IiwiXFx2YXJwaGkiLCEwKTskKFYscmUsTHQsIlx1MjIxNyIsIioiLCEwKTskKFYscmUsTHQsIisiLCIrIik7JChWLHJlLEx0LCJcdTIyMTIiLCItIiwhMCk7JChWLHJlLEx0LCJcdTIyQzUiLCJcXGNkb3QiLCEwKTskKFYscmUsTHQsIlx1MjIxOCIsIlxcY2lyYyIsITApOyQoVixyZSxMdCwiXHhGNyIsIlxcZGl2IiwhMCk7JChWLHJlLEx0LCJceEIxIiwiXFxwbSIsITApOyQoVixyZSxMdCwiXHhENyIsIlxcdGltZXMiLCEwKTskKFYscmUsTHQsIlx1MjIyOSIsIlxcY2FwIiwhMCk7JChWLHJlLEx0LCJcdTIyMkEiLCJcXGN1cCIsITApOyQoVixyZSxMdCwiXHUyMjE2IiwiXFxzZXRtaW51cyIsITApOyQoVixyZSxMdCwiXHUyMjI3IiwiXFxsYW5kIik7JChWLHJlLEx0LCJcdTIyMjgiLCJcXGxvciIpOyQoVixyZSxMdCwiXHUyMjI3IiwiXFx3ZWRnZSIsITApOyQoVixyZSxMdCwiXHUyMjI4IiwiXFx2ZWUiLCEwKTskKFYscmUsX2UsIlx1MjIxQSIsIlxcc3VyZCIpOyQoVixyZSxlbywiXHUyN0U4IiwiXFxsYW5nbGUiLCEwKTskKFYscmUsZW8sIlx1MjIyMyIsIlxcbHZlcnQiKTskKFYscmUsZW8sIlx1MjIyNSIsIlxcbFZlcnQiKTskKFYscmUsZXMsIj8iLCI/Iik7JChWLHJlLGVzLCIhIiwiISIpOyQoVixyZSxlcywiXHUyN0U5IiwiXFxyYW5nbGUiLCEwKTskKFYscmUsZXMsIlx1MjIyMyIsIlxccnZlcnQiKTskKFYscmUsZXMsIlx1MjIyNSIsIlxcclZlcnQiKTskKFYscmUsd2UsIj0iLCI9Iik7JChWLHJlLHdlLCI6IiwiOiIpOyQoVixyZSx3ZSwiXHUyMjQ4IiwiXFxhcHByb3giLCEwKTskKFYscmUsd2UsIlx1MjI0NSIsIlxcY29uZyIsITApOyQoVixyZSx3ZSwiXHUyMjY1IiwiXFxnZSIpOyQoVixyZSx3ZSwiXHUyMjY1IiwiXFxnZXEiLCEwKTskKFYscmUsd2UsIlx1MjE5MCIsIlxcZ2V0cyIpOyQoVixyZSx3ZSwiPiIsIlxcZ3QiLCEwKTskKFYscmUsd2UsIlx1MjIwOCIsIlxcaW4iLCEwKTskKFYscmUsd2UsIlx1RTAyMCIsIlxcQG5vdCIpOyQoVixyZSx3ZSwiXHUyMjgyIiwiXFxzdWJzZXQiLCEwKTskKFYscmUsd2UsIlx1MjI4MyIsIlxcc3Vwc2V0IiwhMCk7JChWLHJlLHdlLCJcdTIyODYiLCJcXHN1YnNldGVxIiwhMCk7JChWLHJlLHdlLCJcdTIyODciLCJcXHN1cHNldGVxIiwhMCk7JChWLGJlLHdlLCJcdTIyODgiLCJcXG5zdWJzZXRlcSIsITApOyQoVixiZSx3ZSwiXHUyMjg5IiwiXFxuc3Vwc2V0ZXEiLCEwKTskKFYscmUsd2UsIlx1MjJBOCIsIlxcbW9kZWxzIik7JChWLHJlLHdlLCJcdTIxOTAiLCJcXGxlZnRhcnJvdyIsITApOyQoVixyZSx3ZSwiXHUyMjY0IiwiXFxsZSIpOyQoVixyZSx3ZSwiXHUyMjY0IiwiXFxsZXEiLCEwKTskKFYscmUsd2UsIjwiLCJcXGx0IiwhMCk7JChWLHJlLHdlLCJcdTIxOTIiLCJcXHJpZ2h0YXJyb3ciLCEwKTskKFYscmUsd2UsIlx1MjE5MiIsIlxcdG8iKTskKFYsYmUsd2UsIlx1MjI3MSIsIlxcbmdlcSIsITApOyQoVixiZSx3ZSwiXHUyMjcwIiwiXFxubGVxIiwhMCk7JChWLHJlLGd1LCJceEEwIiwiXFwgIik7JChWLHJlLGd1LCJceEEwIiwiXFxzcGFjZSIpOyQoVixyZSxndSwiXHhBMCIsIlxcbm9icmVha3NwYWNlIik7JChpdCxyZSxndSwiXHhBMCIsIlxcICIpOyQoaXQscmUsZ3UsIlx4QTAiLCIgIik7JChpdCxyZSxndSwiXHhBMCIsIlxcc3BhY2UiKTskKGl0LHJlLGd1LCJceEEwIiwiXFxub2JyZWFrc3BhY2UiKTskKFYscmUsZ3UsbnVsbCwiXFxub2JyZWFrIik7JChWLHJlLGd1LG51bGwsIlxcYWxsb3dicmVhayIpOyQoVixyZSxMNCwiLCIsIiwiKTskKFYscmUsTDQsIjsiLCI7Iik7JChWLGJlLEx0LCJcdTIyQkMiLCJcXGJhcndlZGdlIiwhMCk7JChWLGJlLEx0LCJcdTIyQkIiLCJcXHZlZWJhciIsITApOyQoVixyZSxMdCwiXHUyMjk5IiwiXFxvZG90IiwhMCk7JChWLHJlLEx0LCJcdTIyOTUiLCJcXG9wbHVzIiwhMCk7JChWLHJlLEx0LCJcdTIyOTciLCJcXG90aW1lcyIsITApOyQoVixyZSxfZSwiXHUyMjAyIiwiXFxwYXJ0aWFsIiwhMCk7JChWLHJlLEx0LCJcdTIyOTgiLCJcXG9zbGFzaCIsITApOyQoVixiZSxMdCwiXHUyMjlBIiwiXFxjaXJjbGVkY2lyYyIsITApOyQoVixiZSxMdCwiXHUyMkExIiwiXFxib3hkb3QiLCEwKTskKFYscmUsTHQsIlx1MjVCMyIsIlxcYmlndHJpYW5nbGV1cCIpOyQoVixyZSxMdCwiXHUyNUJEIiwiXFxiaWd0cmlhbmdsZWRvd24iKTskKFYscmUsTHQsIlx1MjAyMCIsIlxcZGFnZ2VyIik7JChWLHJlLEx0LCJcdTIyQzQiLCJcXGRpYW1vbmQiKTskKFYscmUsTHQsIlx1MjJDNiIsIlxcc3RhciIpOyQoVixyZSxMdCwiXHUyNUMzIiwiXFx0cmlhbmdsZWxlZnQiKTskKFYscmUsTHQsIlx1MjVCOSIsIlxcdHJpYW5nbGVyaWdodCIpOyQoVixyZSxlbywieyIsIlxceyIpOyQoaXQscmUsX2UsInsiLCJcXHsiKTskKGl0LHJlLF9lLCJ7IiwiXFx0ZXh0YnJhY2VsZWZ0Iik7JChWLHJlLGVzLCJ9IiwiXFx9Iik7JChpdCxyZSxfZSwifSIsIlxcfSIpOyQoaXQscmUsX2UsIn0iLCJcXHRleHRicmFjZXJpZ2h0Iik7JChWLHJlLGVvLCJ7IiwiXFxsYnJhY2UiKTskKFYscmUsZXMsIn0iLCJcXHJicmFjZSIpOyQoVixyZSxlbywiWyIsIlxcbGJyYWNrIiwhMCk7JChpdCxyZSxfZSwiWyIsIlxcbGJyYWNrIiwhMCk7JChWLHJlLGVzLCJdIiwiXFxyYnJhY2siLCEwKTskKGl0LHJlLF9lLCJdIiwiXFxyYnJhY2siLCEwKTskKFYscmUsZW8sIigiLCJcXGxwYXJlbiIsITApOyQoVixyZSxlcywiKSIsIlxccnBhcmVuIiwhMCk7JChpdCxyZSxfZSwiPCIsIlxcdGV4dGxlc3MiLCEwKTskKGl0LHJlLF9lLCI+IiwiXFx0ZXh0Z3JlYXRlciIsITApOyQoVixyZSxlbywiXHUyMzBBIiwiXFxsZmxvb3IiLCEwKTskKFYscmUsZXMsIlx1MjMwQiIsIlxccmZsb29yIiwhMCk7JChWLHJlLGVvLCJcdTIzMDgiLCJcXGxjZWlsIiwhMCk7JChWLHJlLGVzLCJcdTIzMDkiLCJcXHJjZWlsIiwhMCk7JChWLHJlLF9lLCJcXCIsIlxcYmFja3NsYXNoIik7JChWLHJlLF9lLCJcdTIyMjMiLCJ8Iik7JChWLHJlLF9lLCJcdTIyMjMiLCJcXHZlcnQiKTskKGl0LHJlLF9lLCJ8IiwiXFx0ZXh0YmFyIiwhMCk7JChWLHJlLF9lLCJcdTIyMjUiLCJcXHwiKTskKFYscmUsX2UsIlx1MjIyNSIsIlxcVmVydCIpOyQoaXQscmUsX2UsIlx1MjIyNSIsIlxcdGV4dGJhcmRibCIpOyQoaXQscmUsX2UsIn4iLCJcXHRleHRhc2NpaXRpbGRlIik7JChpdCxyZSxfZSwiXFwiLCJcXHRleHRiYWNrc2xhc2giKTskKGl0LHJlLF9lLCJeIiwiXFx0ZXh0YXNjaWljaXJjdW0iKTskKFYscmUsd2UsIlx1MjE5MSIsIlxcdXBhcnJvdyIsITApOyQoVixyZSx3ZSwiXHUyMUQxIiwiXFxVcGFycm93IiwhMCk7JChWLHJlLHdlLCJcdTIxOTMiLCJcXGRvd25hcnJvdyIsITApOyQoVixyZSx3ZSwiXHUyMUQzIiwiXFxEb3duYXJyb3ciLCEwKTskKFYscmUsd2UsIlx1MjE5NSIsIlxcdXBkb3duYXJyb3ciLCEwKTskKFYscmUsd2UsIlx1MjFENSIsIlxcVXBkb3duYXJyb3ciLCEwKTskKFYscmUsQ2ksIlx1MjIxMCIsIlxcY29wcm9kIik7JChWLHJlLENpLCJcdTIyQzEiLCJcXGJpZ3ZlZSIpOyQoVixyZSxDaSwiXHUyMkMwIiwiXFxiaWd3ZWRnZSIpOyQoVixyZSxDaSwiXHUyQTA0IiwiXFxiaWd1cGx1cyIpOyQoVixyZSxDaSwiXHUyMkMyIiwiXFxiaWdjYXAiKTskKFYscmUsQ2ksIlx1MjJDMyIsIlxcYmlnY3VwIik7JChWLHJlLENpLCJcdTIyMkIiLCJcXGludCIpOyQoVixyZSxDaSwiXHUyMjJCIiwiXFxpbnRvcCIpOyQoVixyZSxDaSwiXHUyMjJDIiwiXFxpaW50Iik7JChWLHJlLENpLCJcdTIyMkQiLCJcXGlpaW50Iik7JChWLHJlLENpLCJcdTIyMEYiLCJcXHByb2QiKTskKFYscmUsQ2ksIlx1MjIxMSIsIlxcc3VtIik7JChWLHJlLENpLCJcdTJBMDIiLCJcXGJpZ290aW1lcyIpOyQoVixyZSxDaSwiXHUyQTAxIiwiXFxiaWdvcGx1cyIpOyQoVixyZSxDaSwiXHUyQTAwIiwiXFxiaWdvZG90Iik7JChWLHJlLENpLCJcdTIyMkUiLCJcXG9pbnQiKTskKFYscmUsQ2ksIlx1MjIyRiIsIlxcb2lpbnQiKTskKFYscmUsQ2ksIlx1MjIzMCIsIlxcb2lpaW50Iik7JChWLHJlLENpLCJcdTJBMDYiLCJcXGJpZ3NxY3VwIik7JChWLHJlLENpLCJcdTIyMkIiLCJcXHNtYWxsaW50Iik7JChpdCxyZSxTcCwiXHUyMDI2IiwiXFx0ZXh0ZWxsaXBzaXMiKTskKFYscmUsU3AsIlx1MjAyNiIsIlxcbWF0aGVsbGlwc2lzIik7JChpdCxyZSxTcCwiXHUyMDI2IiwiXFxsZG90cyIsITApOyQoVixyZSxTcCwiXHUyMDI2IiwiXFxsZG90cyIsITApOyQoVixyZSxTcCwiXHUyMkVGIiwiXFxAY2RvdHMiLCEwKTskKFYscmUsU3AsIlx1MjJGMSIsIlxcZGRvdHMiLCEwKTskKFYscmUsX2UsIlx1MjJFRSIsIlxcdmFydmRvdHMiKTskKFYscmUsVW4sIlx1MDJDQSIsIlxcYWN1dGUiKTskKFYscmUsVW4sIlx1MDJDQiIsIlxcZ3JhdmUiKTskKFYscmUsVW4sIlx4QTgiLCJcXGRkb3QiKTskKFYscmUsVW4sIn4iLCJcXHRpbGRlIik7JChWLHJlLFVuLCJcdTAyQzkiLCJcXGJhciIpOyQoVixyZSxVbiwiXHUwMkQ4IiwiXFxicmV2ZSIpOyQoVixyZSxVbiwiXHUwMkM3IiwiXFxjaGVjayIpOyQoVixyZSxVbiwiXiIsIlxcaGF0Iik7JChWLHJlLFVuLCJcdTIwRDciLCJcXHZlYyIpOyQoVixyZSxVbiwiXHUwMkQ5IiwiXFxkb3QiKTskKFYscmUsVW4sIlx1MDJEQSIsIlxcbWF0aHJpbmciKTskKFYscmUsdHIsIlx1RTEzMSIsIlxcQGltYXRoIik7JChWLHJlLHRyLCJcdUUyMzciLCJcXEBqbWF0aCIpOyQoVixyZSxfZSwiXHUwMTMxIiwiXHUwMTMxIik7JChWLHJlLF9lLCJcdTAyMzciLCJcdTAyMzciKTskKGl0LHJlLF9lLCJcdTAxMzEiLCJcXGkiLCEwKTskKGl0LHJlLF9lLCJcdTAyMzciLCJcXGoiLCEwKTskKGl0LHJlLF9lLCJceERGIiwiXFxzcyIsITApOyQoaXQscmUsX2UsIlx4RTYiLCJcXGFlIiwhMCk7JChpdCxyZSxfZSwiXHUwMTUzIiwiXFxvZSIsITApOyQoaXQscmUsX2UsIlx4RjgiLCJcXG8iLCEwKTskKGl0LHJlLF9lLCJceEM2IiwiXFxBRSIsITApOyQoaXQscmUsX2UsIlx1MDE1MiIsIlxcT0UiLCEwKTskKGl0LHJlLF9lLCJceEQ4IiwiXFxPIiwhMCk7JChpdCxyZSxVbiwiXHUwMkNBIiwiXFwnIik7JChpdCxyZSxVbiwiXHUwMkNCIiwiXFxgIik7JChpdCxyZSxVbiwiXHUwMkM2IiwiXFxeIik7JChpdCxyZSxVbiwiXHUwMkRDIiwiXFx+Iik7JChpdCxyZSxVbiwiXHUwMkM5IiwiXFw9Iik7JChpdCxyZSxVbiwiXHUwMkQ4IiwiXFx1Iik7JChpdCxyZSxVbiwiXHUwMkQ5IiwiXFwuIik7JChpdCxyZSxVbiwiXHhCOCIsIlxcYyIpOyQoaXQscmUsVW4sIlx1MDJEQSIsIlxcciIpOyQoaXQscmUsVW4sIlx1MDJDNyIsIlxcdiIpOyQoaXQscmUsVW4sIlx4QTgiLCdcXCInKTskKGl0LHJlLFVuLCJcdTAyREQiLCJcXEgiKTskKGl0LHJlLFVuLCJcdTI1RUYiLCJcXHRleHRjaXJjbGVkIik7ekc9eyItLSI6ITAsIi0tLSI6ITAsImBgIjohMCwiJyciOiEwfTskKGl0LHJlLF9lLCJcdTIwMTMiLCItLSIsITApOyQoaXQscmUsX2UsIlx1MjAxMyIsIlxcdGV4dGVuZGFzaCIpOyQoaXQscmUsX2UsIlx1MjAxNCIsIi0tLSIsITApOyQoaXQscmUsX2UsIlx1MjAxNCIsIlxcdGV4dGVtZGFzaCIpOyQoaXQscmUsX2UsIlx1MjAxOCIsImAiLCEwKTskKGl0LHJlLF9lLCJcdTIwMTgiLCJcXHRleHRxdW90ZWxlZnQiKTskKGl0LHJlLF9lLCJcdTIwMTkiLCInIiwhMCk7JChpdCxyZSxfZSwiXHUyMDE5IiwiXFx0ZXh0cXVvdGVyaWdodCIpOyQoaXQscmUsX2UsIlx1MjAxQyIsImBgIiwhMCk7JChpdCxyZSxfZSwiXHUyMDFDIiwiXFx0ZXh0cXVvdGVkYmxsZWZ0Iik7JChpdCxyZSxfZSwiXHUyMDFEIiwiJyciLCEwKTskKGl0LHJlLF9lLCJcdTIwMUQiLCJcXHRleHRxdW90ZWRibHJpZ2h0Iik7JChWLHJlLF9lLCJceEIwIiwiXFxkZWdyZWUiLCEwKTskKGl0LHJlLF9lLCJceEIwIiwiXFxkZWdyZWUiKTskKGl0LHJlLF9lLCJceEIwIiwiXFx0ZXh0ZGVncmVlIiwhMCk7JChWLHJlLF9lLCJceEEzIiwiXFxwb3VuZHMiKTskKFYscmUsX2UsIlx4QTMiLCJcXG1hdGhzdGVybGluZyIsITApOyQoaXQscmUsX2UsIlx4QTMiLCJcXHBvdW5kcyIpOyQoaXQscmUsX2UsIlx4QTMiLCJcXHRleHRzdGVybGluZyIsITApOyQoVixiZSxfZSwiXHUyNzIwIiwiXFxtYWx0ZXNlIik7JChpdCxiZSxfZSwiXHUyNzIwIiwiXFxtYWx0ZXNlIik7b0c9JzAxMjM0NTY3ODkvQC4iJztmb3IoYzQ9MDtjNDxvRy5sZW5ndGg7YzQrKyl1Qz1vRy5jaGFyQXQoYzQpLCQoVixyZSxfZSx1Qyx1Qyk7bEc9JzAxMjM0NTY3ODkhQCooKS09KyI7Oj8vLiwnO2Zvcih1ND0wO3U0PGxHLmxlbmd0aDt1NCsrKWhDPWxHLmNoYXJBdCh1NCksJChpdCxyZSxfZSxoQyxoQyk7azQ9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiO2ZvcihoND0wO2g0PGs0Lmxlbmd0aDtoNCsrKWN5PWs0LmNoYXJBdChoNCksJChWLHJlLHRyLGN5LGN5KSwkKGl0LHJlLF9lLGN5LGN5KTskKFYsYmUsX2UsIkMiLCJcdTIxMDIiKTskKGl0LGJlLF9lLCJDIiwiXHUyMTAyIik7JChWLGJlLF9lLCJIIiwiXHUyMTBEIik7JChpdCxiZSxfZSwiSCIsIlx1MjEwRCIpOyQoVixiZSxfZSwiTiIsIlx1MjExNSIpOyQoaXQsYmUsX2UsIk4iLCJcdTIxMTUiKTskKFYsYmUsX2UsIlAiLCJcdTIxMTkiKTskKGl0LGJlLF9lLCJQIiwiXHUyMTE5Iik7JChWLGJlLF9lLCJRIiwiXHUyMTFBIik7JChpdCxiZSxfZSwiUSIsIlx1MjExQSIpOyQoVixiZSxfZSwiUiIsIlx1MjExRCIpOyQoaXQsYmUsX2UsIlIiLCJcdTIxMUQiKTskKFYsYmUsX2UsIloiLCJcdTIxMjQiKTskKGl0LGJlLF9lLCJaIiwiXHUyMTI0Iik7JChWLHJlLHRyLCJoIiwiXHUyMTBFIik7JChpdCxyZSx0ciwiaCIsIlx1MjEwRSIpO3NyPSIiO2ZvcihOYT0wO05hPGs0Lmxlbmd0aDtOYSsrKVFuPWs0LmNoYXJBdChOYSksc3I9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NjMyMCtOYSksJChWLHJlLHRyLFFuLHNyKSwkKGl0LHJlLF9lLFFuLHNyKSxzcj1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU2MzcyK05hKSwkKFYscmUsdHIsUW4sc3IpLCQoaXQscmUsX2UsUW4sc3IpLHNyPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTY0MjQrTmEpLCQoVixyZSx0cixRbixzciksJChpdCxyZSxfZSxRbixzciksc3I9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NjU4MCtOYSksJChWLHJlLHRyLFFuLHNyKSwkKGl0LHJlLF9lLFFuLHNyKSxzcj1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU2Njg0K05hKSwkKFYscmUsdHIsUW4sc3IpLCQoaXQscmUsX2UsUW4sc3IpLHNyPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTY3MzYrTmEpLCQoVixyZSx0cixRbixzciksJChpdCxyZSxfZSxRbixzciksc3I9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1Njc4OCtOYSksJChWLHJlLHRyLFFuLHNyKSwkKGl0LHJlLF9lLFFuLHNyKSxzcj1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU2ODQwK05hKSwkKFYscmUsdHIsUW4sc3IpLCQoaXQscmUsX2UsUW4sc3IpLHNyPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTY5NDQrTmEpLCQoVixyZSx0cixRbixzciksJChpdCxyZSxfZSxRbixzciksTmE8MjYmJihzcj1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU2NjMyK05hKSwkKFYscmUsdHIsUW4sc3IpLCQoaXQscmUsX2UsUW4sc3IpLHNyPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTY0NzYrTmEpLCQoVixyZSx0cixRbixzciksJChpdCxyZSxfZSxRbixzcikpO3NyPSJcdXsxRDU1Q30iOyQoVixyZSx0ciwiayIsc3IpOyQoaXQscmUsX2UsImsiLHNyKTtmb3IobWg9MDttaDwxMDttaCsrKXV1PW1oLnRvU3RyaW5nKCksc3I9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NzI5NCttaCksJChWLHJlLHRyLHV1LHNyKSwkKGl0LHJlLF9lLHV1LHNyKSxzcj1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU3MzE0K21oKSwkKFYscmUsdHIsdXUsc3IpLCQoaXQscmUsX2UsdXUsc3IpLHNyPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTczMjQrbWgpLCQoVixyZSx0cix1dSxzciksJChpdCxyZSxfZSx1dSxzciksc3I9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NzMzNCttaCksJChWLHJlLHRyLHV1LHNyKSwkKGl0LHJlLF9lLHV1LHNyKTtFQz0iXHhEMFx4REVceEZFIjtmb3IoZjQ9MDtmNDxFQy5sZW5ndGg7ZjQrKyl1eT1FQy5jaGFyQXQoZjQpLCQoVixyZSx0cix1eSx1eSksJChpdCxyZSxfZSx1eSx1eSk7ZDQ9W1sibWF0aGJmIiwidGV4dGJmIiwiTWFpbi1Cb2xkIl0sWyJtYXRoYmYiLCJ0ZXh0YmYiLCJNYWluLUJvbGQiXSxbIm1hdGhub3JtYWwiLCJ0ZXh0aXQiLCJNYXRoLUl0YWxpYyJdLFsibWF0aG5vcm1hbCIsInRleHRpdCIsIk1hdGgtSXRhbGljIl0sWyJib2xkc3ltYm9sIiwiYm9sZHN5bWJvbCIsIk1haW4tQm9sZEl0YWxpYyJdLFsiYm9sZHN5bWJvbCIsImJvbGRzeW1ib2wiLCJNYWluLUJvbGRJdGFsaWMiXSxbIm1hdGhzY3IiLCJ0ZXh0c2NyIiwiU2NyaXB0LVJlZ3VsYXIiXSxbIiIsIiIsIiJdLFsiIiwiIiwiIl0sWyIiLCIiLCIiXSxbIm1hdGhmcmFrIiwidGV4dGZyYWsiLCJGcmFrdHVyLVJlZ3VsYXIiXSxbIm1hdGhmcmFrIiwidGV4dGZyYWsiLCJGcmFrdHVyLVJlZ3VsYXIiXSxbIm1hdGhiYiIsInRleHRiYiIsIkFNUy1SZWd1bGFyIl0sWyJtYXRoYmIiLCJ0ZXh0YmIiLCJBTVMtUmVndWxhciJdLFsibWF0aGJvbGRmcmFrIiwidGV4dGJvbGRmcmFrIiwiRnJha3R1ci1SZWd1bGFyIl0sWyJtYXRoYm9sZGZyYWsiLCJ0ZXh0Ym9sZGZyYWsiLCJGcmFrdHVyLVJlZ3VsYXIiXSxbIm1hdGhzZiIsInRleHRzZiIsIlNhbnNTZXJpZi1SZWd1bGFyIl0sWyJtYXRoc2YiLCJ0ZXh0c2YiLCJTYW5zU2VyaWYtUmVndWxhciJdLFsibWF0aGJvbGRzZiIsInRleHRib2xkc2YiLCJTYW5zU2VyaWYtQm9sZCJdLFsibWF0aGJvbGRzZiIsInRleHRib2xkc2YiLCJTYW5zU2VyaWYtQm9sZCJdLFsibWF0aGl0c2YiLCJ0ZXh0aXRzZiIsIlNhbnNTZXJpZi1JdGFsaWMiXSxbIm1hdGhpdHNmIiwidGV4dGl0c2YiLCJTYW5zU2VyaWYtSXRhbGljIl0sWyIiLCIiLCIiXSxbIiIsIiIsIiJdLFsibWF0aHR0IiwidGV4dHR0IiwiVHlwZXdyaXRlci1SZWd1bGFyIl0sWyJtYXRodHQiLCJ0ZXh0dHQiLCJUeXBld3JpdGVyLVJlZ3VsYXIiXV0sY0c9W1sibWF0aGJmIiwidGV4dGJmIiwiTWFpbi1Cb2xkIl0sWyIiLCIiLCIiXSxbIm1hdGhzZiIsInRleHRzZiIsIlNhbnNTZXJpZi1SZWd1bGFyIl0sWyJtYXRoYm9sZHNmIiwidGV4dGJvbGRzZiIsIlNhbnNTZXJpZi1Cb2xkIl0sWyJtYXRodHQiLCJ0ZXh0dHQiLCJUeXBld3JpdGVyLVJlZ3VsYXIiXV0sT2JlPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1lLmNoYXJDb2RlQXQoMCksaT1lLmNoYXJDb2RlQXQoMSksYT0obi01NTI5NikqMTAyNCsoaS01NjMyMCkrNjU1MzYscz1yPT09Im1hdGgiPzA6MTtpZigxMTk4MDg8PWEmJmE8MTIwNDg0KXt2YXIgbD1NYXRoLmZsb29yKChhLTExOTgwOCkvMjYpO3JldHVybltkNFtsXVsyXSxkNFtsXVtzXV19ZWxzZSBpZigxMjA3ODI8PWEmJmE8PTEyMDgzMSl7dmFyIHU9TWF0aC5mbG9vcigoYS0xMjA3ODIpLzEwKTtyZXR1cm5bY0dbdV1bMl0sY0dbdV1bc11dfWVsc2V7aWYoYT09PTEyMDQ4NXx8YT09PTEyMDQ4NilyZXR1cm5bZDRbMF1bMl0sZDRbMF1bc11dO2lmKDEyMDQ4NjxhJiZhPDEyMDc4MilyZXR1cm5bIiIsIiJdO3Rocm93IG5ldyBsdCgiVW5zdXBwb3J0ZWQgY2hhcmFjdGVyOiAiK2UpfX0sIndpZGVDaGFyYWN0ZXJGb250IiksRDQ9byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIENuW25dW2VdJiZDbltuXVtlXS5yZXBsYWNlJiYoZT1DbltuXVtlXS5yZXBsYWNlKSx7dmFsdWU6ZSxtZXRyaWNzOklDKGUscixuKX19LCJsb29rdXBTeW1ib2wiKSx5bD1vKGZ1bmN0aW9uKGUscixuLGksYSl7dmFyIHM9RDQoZSxyLG4pLGw9cy5tZXRyaWNzO2U9cy52YWx1ZTt2YXIgdTtpZihsKXt2YXIgaD1sLml0YWxpYzsobj09PSJ0ZXh0Inx8aSYmaS5mb250PT09Im1hdGhpdCIpJiYoaD0wKSx1PW5ldyBFcyhlLGwuaGVpZ2h0LGwuZGVwdGgsaCxsLnNrZXcsbC53aWR0aCxhKX1lbHNlIHR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuKCJObyBjaGFyYWN0ZXIgbWV0cmljcyAiKygiZm9yICciK2UrIicgaW4gc3R5bGUgJyIrcisiJyBhbmQgbW9kZSAnIituKyInIikpLHU9bmV3IEVzKGUsMCwwLDAsMCwwLGEpO2lmKGkpe3UubWF4Rm9udFNpemU9aS5zaXplTXVsdGlwbGllcixpLnN0eWxlLmlzVGlnaHQoKSYmdS5jbGFzc2VzLnB1c2goIm10aWdodCIpO3ZhciBmPWkuZ2V0Q29sb3IoKTtmJiYodS5zdHlsZS5jb2xvcj1mKX1yZXR1cm4gdX0sIm1ha2VTeW1ib2wiKSxQYmU9byhmdW5jdGlvbihlLHIsbixpKXtyZXR1cm4gaT09PXZvaWQgMCYmKGk9W10pLG4uZm9udD09PSJib2xkc3ltYm9sIiYmRDQoZSwiTWFpbi1Cb2xkIixyKS5tZXRyaWNzP3lsKGUsIk1haW4tQm9sZCIscixuLGkuY29uY2F0KFsibWF0aGJmIl0pKTplPT09IlxcInx8Q25bcl1bZV0uZm9udD09PSJtYWluIj95bChlLCJNYWluLVJlZ3VsYXIiLHIsbixpKTp5bChlLCJBTVMtUmVndWxhciIscixuLGkuY29uY2F0KFsiYW1zcm0iXSkpfSwibWF0aHN5bSIpLEJiZT1vKGZ1bmN0aW9uKGUscixuLGksYSl7cmV0dXJuIGEhPT0idGV4dG9yZCImJkQ0KGUsIk1hdGgtQm9sZEl0YWxpYyIscikubWV0cmljcz97Zm9udE5hbWU6Ik1hdGgtQm9sZEl0YWxpYyIsZm9udENsYXNzOiJib2xkc3ltYm9sIn06e2ZvbnROYW1lOiJNYWluLUJvbGQiLGZvbnRDbGFzczoibWF0aGJmIn19LCJib2xkc3ltYm9sIiksRmJlPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWUubW9kZSxhPWUudGV4dCxzPVsibW9yZCJdLGw9aT09PSJtYXRoInx8aT09PSJ0ZXh0IiYmci5mb250LHU9bD9yLmZvbnQ6ci5mb250RmFtaWx5LGg9IiIsZj0iIjtpZihhLmNoYXJDb2RlQXQoMCk9PT01NTM0OSYmKFtoLGZdPU9iZShhLGkpKSxoLmxlbmd0aD4wKXJldHVybiB5bChhLGgsaSxyLHMuY29uY2F0KGYpKTtpZih1KXt2YXIgZCxwO2lmKHU9PT0iYm9sZHN5bWJvbCIpe3ZhciBtPUJiZShhLGkscixzLG4pO2Q9bS5mb250TmFtZSxwPVttLmZvbnRDbGFzc119ZWxzZSBsPyhkPVZHW3VdLmZvbnROYW1lLHA9W3VdKTooZD1wNCh1LHIuZm9udFdlaWdodCxyLmZvbnRTaGFwZSkscD1bdSxyLmZvbnRXZWlnaHQsci5mb250U2hhcGVdKTtpZihENChhLGQsaSkubWV0cmljcylyZXR1cm4geWwoYSxkLGkscixzLmNvbmNhdChwKSk7aWYoekcuaGFzT3duUHJvcGVydHkoYSkmJmQuc2xpY2UoMCwxMCk9PT0iVHlwZXdyaXRlciIpe2Zvcih2YXIgZz1bXSx5PTA7eTxhLmxlbmd0aDt5KyspZy5wdXNoKHlsKGFbeV0sZCxpLHIscy5jb25jYXQocCkpKTtyZXR1cm4gJEcoZyl9fWlmKG49PT0ibWF0aG9yZCIpcmV0dXJuIHlsKGEsIk1hdGgtSXRhbGljIixpLHIscy5jb25jYXQoWyJtYXRobm9ybWFsIl0pKTtpZihuPT09InRleHRvcmQiKXt2YXIgdj1DbltpXVthXSYmQ25baV1bYV0uZm9udDtpZih2PT09ImFtcyIpe3ZhciB4PXA0KCJhbXNybSIsci5mb250V2VpZ2h0LHIuZm9udFNoYXBlKTtyZXR1cm4geWwoYSx4LGkscixzLmNvbmNhdCgiYW1zcm0iLHIuZm9udFdlaWdodCxyLmZvbnRTaGFwZSkpfWVsc2UgaWYodj09PSJtYWluInx8IXYpe3ZhciBiPXA0KCJ0ZXh0cm0iLHIuZm9udFdlaWdodCxyLmZvbnRTaGFwZSk7cmV0dXJuIHlsKGEsYixpLHIscy5jb25jYXQoci5mb250V2VpZ2h0LHIuZm9udFNoYXBlKSl9ZWxzZXt2YXIgdz1wNCh2LHIuZm9udFdlaWdodCxyLmZvbnRTaGFwZSk7cmV0dXJuIHlsKGEsdyxpLHIscy5jb25jYXQodyxyLmZvbnRXZWlnaHQsci5mb250U2hhcGUpKX19ZWxzZSB0aHJvdyBuZXcgRXJyb3IoInVuZXhwZWN0ZWQgdHlwZTogIituKyIgaW4gbWFrZU9yZCIpfSwibWFrZU9yZCIpLHpiZT1vKCh0LGUpPT57aWYoeWgodC5jbGFzc2VzKSE9PXloKGUuY2xhc3Nlcyl8fHQuc2tldyE9PWUuc2tld3x8dC5tYXhGb250U2l6ZSE9PWUubWF4Rm9udFNpemUpcmV0dXJuITE7aWYodC5jbGFzc2VzLmxlbmd0aD09PTEpe3ZhciByPXQuY2xhc3Nlc1swXTtpZihyPT09Im1iaW4ifHxyPT09Im1vcmQiKXJldHVybiExfWZvcih2YXIgbiBpbiB0LnN0eWxlKWlmKHQuc3R5bGUuaGFzT3duUHJvcGVydHkobikmJnQuc3R5bGVbbl0hPT1lLnN0eWxlW25dKXJldHVybiExO2Zvcih2YXIgaSBpbiBlLnN0eWxlKWlmKGUuc3R5bGUuaGFzT3duUHJvcGVydHkoaSkmJnQuc3R5bGVbaV0hPT1lLnN0eWxlW2ldKXJldHVybiExO3JldHVybiEwfSwiY2FuQ29tYmluZSIpLEdiZT1vKHQ9Pntmb3IodmFyIGU9MDtlPHQubGVuZ3RoLTE7ZSsrKXt2YXIgcj10W2VdLG49dFtlKzFdO3IgaW5zdGFuY2VvZiBFcyYmbiBpbnN0YW5jZW9mIEVzJiZ6YmUocixuKSYmKHIudGV4dCs9bi50ZXh0LHIuaGVpZ2h0PU1hdGgubWF4KHIuaGVpZ2h0LG4uaGVpZ2h0KSxyLmRlcHRoPU1hdGgubWF4KHIuZGVwdGgsbi5kZXB0aCksci5pdGFsaWM9bi5pdGFsaWMsdC5zcGxpY2UoZSsxLDEpLGUtLSl9cmV0dXJuIHR9LCJ0cnlDb21iaW5lQ2hhcnMiKSxPQz1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj0wLG49MCxpPTAsYT0wO2E8ZS5jaGlsZHJlbi5sZW5ndGg7YSsrKXt2YXIgcz1lLmNoaWxkcmVuW2FdO3MuaGVpZ2h0PnImJihyPXMuaGVpZ2h0KSxzLmRlcHRoPm4mJihuPXMuZGVwdGgpLHMubWF4Rm9udFNpemU+aSYmKGk9cy5tYXhGb250U2l6ZSl9ZS5oZWlnaHQ9cixlLmRlcHRoPW4sZS5tYXhGb250U2l6ZT1pfSwic2l6ZUVsZW1lbnRGcm9tQ2hpbGRyZW4iKSxUcz1vKGZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPW5ldyBuZChlLHIsbixpKTtyZXR1cm4gT0MoYSksYX0sIm1ha2VTcGFuIiksR0c9bygodCxlLHIsbik9Pm5ldyBuZCh0LGUscixuKSwibWFrZVN2Z1NwYW4iKSwkYmU9byhmdW5jdGlvbihlLHIsbil7dmFyIGk9VHMoW2VdLFtdLHIpO3JldHVybiBpLmhlaWdodD1NYXRoLm1heChufHxyLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3Msci5taW5SdWxlVGhpY2tuZXNzKSxpLnN0eWxlLmJvcmRlckJvdHRvbVdpZHRoPWd0KGkuaGVpZ2h0KSxpLm1heEZvbnRTaXplPTEsaX0sIm1ha2VMaW5lU3BhbiIpLFZiZT1vKGZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPW5ldyBteShlLHIsbixpKTtyZXR1cm4gT0MoYSksYX0sIm1ha2VBbmNob3IiKSwkRz1vKGZ1bmN0aW9uKGUpe3ZhciByPW5ldyByZChlKTtyZXR1cm4gT0Mocikscn0sIm1ha2VGcmFnbWVudCIpLFViZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIGUgaW5zdGFuY2VvZiByZD9UcyhbXSxbZV0scik6ZX0sIndyYXBGcmFnbWVudCIpLEhiZT1vKGZ1bmN0aW9uKGUpe2lmKGUucG9zaXRpb25UeXBlPT09ImluZGl2aWR1YWxTaGlmdCIpe2Zvcih2YXIgcj1lLmNoaWxkcmVuLG49W3JbMF1dLGk9LXJbMF0uc2hpZnQtclswXS5lbGVtLmRlcHRoLGE9aSxzPTE7czxyLmxlbmd0aDtzKyspe3ZhciBsPS1yW3NdLnNoaWZ0LWEtcltzXS5lbGVtLmRlcHRoLHU9bC0ocltzLTFdLmVsZW0uaGVpZ2h0K3Jbcy0xXS5lbGVtLmRlcHRoKTthPWErbCxuLnB1c2goe3R5cGU6Imtlcm4iLHNpemU6dX0pLG4ucHVzaChyW3NdKX1yZXR1cm57Y2hpbGRyZW46bixkZXB0aDppfX12YXIgaDtpZihlLnBvc2l0aW9uVHlwZT09PSJ0b3AiKXtmb3IodmFyIGY9ZS5wb3NpdGlvbkRhdGEsZD0wO2Q8ZS5jaGlsZHJlbi5sZW5ndGg7ZCsrKXt2YXIgcD1lLmNoaWxkcmVuW2RdO2YtPXAudHlwZT09PSJrZXJuIj9wLnNpemU6cC5lbGVtLmhlaWdodCtwLmVsZW0uZGVwdGh9aD1mfWVsc2UgaWYoZS5wb3NpdGlvblR5cGU9PT0iYm90dG9tIiloPS1lLnBvc2l0aW9uRGF0YTtlbHNle3ZhciBtPWUuY2hpbGRyZW5bMF07aWYobS50eXBlIT09ImVsZW0iKXRocm93IG5ldyBFcnJvcignRmlyc3QgY2hpbGQgbXVzdCBoYXZlIHR5cGUgImVsZW0iLicpO2lmKGUucG9zaXRpb25UeXBlPT09InNoaWZ0IiloPS1tLmVsZW0uZGVwdGgtZS5wb3NpdGlvbkRhdGE7ZWxzZSBpZihlLnBvc2l0aW9uVHlwZT09PSJmaXJzdEJhc2VsaW5lIiloPS1tLmVsZW0uZGVwdGg7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcG9zaXRpb25UeXBlICIrZS5wb3NpdGlvblR5cGUrIi4iKX1yZXR1cm57Y2hpbGRyZW46ZS5jaGlsZHJlbixkZXB0aDpofX0sImdldFZMaXN0Q2hpbGRyZW5BbmREZXB0aCIpLFdiZT1vKGZ1bmN0aW9uKGUscil7Zm9yKHZhcntjaGlsZHJlbjpuLGRlcHRoOml9PUhiZShlKSxhPTAscz0wO3M8bi5sZW5ndGg7cysrKXt2YXIgbD1uW3NdO2lmKGwudHlwZT09PSJlbGVtIil7dmFyIHU9bC5lbGVtO2E9TWF0aC5tYXgoYSx1Lm1heEZvbnRTaXplLHUuaGVpZ2h0KX19YSs9Mjt2YXIgaD1UcyhbInBzdHJ1dCJdLFtdKTtoLnN0eWxlLmhlaWdodD1ndChhKTtmb3IodmFyIGY9W10sZD1pLHA9aSxtPWksZz0wO2c8bi5sZW5ndGg7ZysrKXt2YXIgeT1uW2ddO2lmKHkudHlwZT09PSJrZXJuIiltKz15LnNpemU7ZWxzZXt2YXIgdj15LmVsZW0seD15LndyYXBwZXJDbGFzc2VzfHxbXSxiPXkud3JhcHBlclN0eWxlfHx7fSx3PVRzKHgsW2gsdl0sdm9pZCAwLGIpO3cuc3R5bGUudG9wPWd0KC1hLW0tdi5kZXB0aCkseS5tYXJnaW5MZWZ0JiYody5zdHlsZS5tYXJnaW5MZWZ0PXkubWFyZ2luTGVmdCkseS5tYXJnaW5SaWdodCYmKHcuc3R5bGUubWFyZ2luUmlnaHQ9eS5tYXJnaW5SaWdodCksZi5wdXNoKHcpLG0rPXYuaGVpZ2h0K3YuZGVwdGh9ZD1NYXRoLm1pbihkLG0pLHA9TWF0aC5tYXgocCxtKX12YXIgXz1UcyhbInZsaXN0Il0sZik7Xy5zdHlsZS5oZWlnaHQ9Z3QocCk7dmFyIFQ7aWYoZDwwKXt2YXIgRT1UcyhbXSxbXSksTD1UcyhbInZsaXN0Il0sW0VdKTtMLnN0eWxlLmhlaWdodD1ndCgtZCk7dmFyIFM9VHMoWyJ2bGlzdC1zIl0sW25ldyBFcygiXHUyMDBCIildKTtUPVtUcyhbInZsaXN0LXIiXSxbXyxTXSksVHMoWyJ2bGlzdC1yIl0sW0xdKV19ZWxzZSBUPVtUcyhbInZsaXN0LXIiXSxbX10pXTt2YXIgQT1UcyhbInZsaXN0LXQiXSxUKTtyZXR1cm4gVC5sZW5ndGg9PT0yJiZBLmNsYXNzZXMucHVzaCgidmxpc3QtdDIiKSxBLmhlaWdodD1wLEEuZGVwdGg9LWQsQX0sIm1ha2VWTGlzdCIpLFliZT1vKCh0LGUpPT57dmFyIHI9VHMoWyJtc3BhY2UiXSxbXSxlKSxuPUpuKHQsZSk7cmV0dXJuIHIuc3R5bGUubWFyZ2luUmlnaHQ9Z3Qobikscn0sIm1ha2VHbHVlIikscDQ9byhmdW5jdGlvbihlLHIsbil7dmFyIGk9IiI7c3dpdGNoKGUpe2Nhc2UiYW1zcm0iOmk9IkFNUyI7YnJlYWs7Y2FzZSJ0ZXh0cm0iOmk9Ik1haW4iO2JyZWFrO2Nhc2UidGV4dHNmIjppPSJTYW5zU2VyaWYiO2JyZWFrO2Nhc2UidGV4dHR0IjppPSJUeXBld3JpdGVyIjticmVhaztkZWZhdWx0Omk9ZX12YXIgYTtyZXR1cm4gcj09PSJ0ZXh0YmYiJiZuPT09InRleHRpdCI/YT0iQm9sZEl0YWxpYyI6cj09PSJ0ZXh0YmYiP2E9IkJvbGQiOnI9PT0idGV4dGl0Ij9hPSJJdGFsaWMiOmE9IlJlZ3VsYXIiLGkrIi0iK2F9LCJyZXRyaWV2ZVRleHRGb250TmFtZSIpLFZHPXttYXRoYmY6e3ZhcmlhbnQ6ImJvbGQiLGZvbnROYW1lOiJNYWluLUJvbGQifSxtYXRocm06e3ZhcmlhbnQ6Im5vcm1hbCIsZm9udE5hbWU6Ik1haW4tUmVndWxhciJ9LHRleHRpdDp7dmFyaWFudDoiaXRhbGljIixmb250TmFtZToiTWFpbi1JdGFsaWMifSxtYXRoaXQ6e3ZhcmlhbnQ6Iml0YWxpYyIsZm9udE5hbWU6Ik1haW4tSXRhbGljIn0sbWF0aG5vcm1hbDp7dmFyaWFudDoiaXRhbGljIixmb250TmFtZToiTWF0aC1JdGFsaWMifSxtYXRoYmI6e3ZhcmlhbnQ6ImRvdWJsZS1zdHJ1Y2siLGZvbnROYW1lOiJBTVMtUmVndWxhciJ9LG1hdGhjYWw6e3ZhcmlhbnQ6InNjcmlwdCIsZm9udE5hbWU6IkNhbGlncmFwaGljLVJlZ3VsYXIifSxtYXRoZnJhazp7dmFyaWFudDoiZnJha3R1ciIsZm9udE5hbWU6IkZyYWt0dXItUmVndWxhciJ9LG1hdGhzY3I6e3ZhcmlhbnQ6InNjcmlwdCIsZm9udE5hbWU6IlNjcmlwdC1SZWd1bGFyIn0sbWF0aHNmOnt2YXJpYW50OiJzYW5zLXNlcmlmIixmb250TmFtZToiU2Fuc1NlcmlmLVJlZ3VsYXIifSxtYXRodHQ6e3ZhcmlhbnQ6Im1vbm9zcGFjZSIsZm9udE5hbWU6IlR5cGV3cml0ZXItUmVndWxhciJ9fSxVRz17dmVjOlsidmVjIiwuNDcxLC43MTRdLG9paW50U2l6ZTE6WyJvaWludFNpemUxIiwuOTU3LC40OTldLG9paW50U2l6ZTI6WyJvaWludFNpemUyIiwxLjQ3MiwuNjU5XSxvaWlpbnRTaXplMTpbIm9paWludFNpemUxIiwxLjMwNCwuNDk5XSxvaWlpbnRTaXplMjpbIm9paWludFNpemUyIiwxLjk4LC42NTldfSxxYmU9byhmdW5jdGlvbihlLHIpe3ZhcltuLGksYV09VUdbZV0scz1uZXcgY2MobiksbD1uZXcgdmwoW3NdLHt3aWR0aDpndChpKSxoZWlnaHQ6Z3QoYSksc3R5bGU6IndpZHRoOiIrZ3QoaSksdmlld0JveDoiMCAwICIrMWUzKmkrIiAiKzFlMyphLHByZXNlcnZlQXNwZWN0UmF0aW86InhNaW5ZTWluIn0pLHU9R0coWyJvdmVybGF5Il0sW2xdLHIpO3JldHVybiB1LmhlaWdodD1hLHUuc3R5bGUuaGVpZ2h0PWd0KGEpLHUuc3R5bGUud2lkdGg9Z3QoaSksdX0sInN0YXRpY1N2ZyIpLEZlPXtmb250TWFwOlZHLG1ha2VTeW1ib2w6eWwsbWF0aHN5bTpQYmUsbWFrZVNwYW46VHMsbWFrZVN2Z1NwYW46R0csbWFrZUxpbmVTcGFuOiRiZSxtYWtlQW5jaG9yOlZiZSxtYWtlRnJhZ21lbnQ6JEcsd3JhcEZyYWdtZW50OlViZSxtYWtlVkxpc3Q6V2JlLG1ha2VPcmQ6RmJlLG1ha2VHbHVlOlliZSxzdGF0aWNTdmc6cWJlLHN2Z0RhdGE6VUcsdHJ5Q29tYmluZUNoYXJzOkdiZX0sWm49e251bWJlcjozLHVuaXQ6Im11In0sZWQ9e251bWJlcjo0LHVuaXQ6Im11In0saHU9e251bWJlcjo1LHVuaXQ6Im11In0sWGJlPXttb3JkOnttb3A6Wm4sbWJpbjplZCxtcmVsOmh1LG1pbm5lcjpabn0sbW9wOnttb3JkOlpuLG1vcDpabixtcmVsOmh1LG1pbm5lcjpabn0sbWJpbjp7bW9yZDplZCxtb3A6ZWQsbW9wZW46ZWQsbWlubmVyOmVkfSxtcmVsOnttb3JkOmh1LG1vcDpodSxtb3BlbjpodSxtaW5uZXI6aHV9LG1vcGVuOnt9LG1jbG9zZTp7bW9wOlpuLG1iaW46ZWQsbXJlbDpodSxtaW5uZXI6Wm59LG1wdW5jdDp7bW9yZDpabixtb3A6Wm4sbXJlbDpodSxtb3BlbjpabixtY2xvc2U6Wm4sbXB1bmN0OlpuLG1pbm5lcjpabn0sbWlubmVyOnttb3JkOlpuLG1vcDpabixtYmluOmVkLG1yZWw6aHUsbW9wZW46Wm4sbXB1bmN0OlpuLG1pbm5lcjpabn19LGpiZT17bW9yZDp7bW9wOlpufSxtb3A6e21vcmQ6Wm4sbW9wOlpufSxtYmluOnt9LG1yZWw6e30sbW9wZW46e30sbWNsb3NlOnttb3A6Wm59LG1wdW5jdDp7fSxtaW5uZXI6e21vcDpabn19LEhHPXt9LEU0PXt9LFM0PXt9O28oU3QsImRlZmluZUZ1bmN0aW9uIik7byhpZCwiZGVmaW5lRnVuY3Rpb25CdWlsZGVycyIpO0M0PW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUudHlwZT09PSJvcmRncm91cCImJmUuYm9keS5sZW5ndGg9PT0xP2UuYm9keVswXTplfSwibm9ybWFsaXplQXJndW1lbnQiKSxnaT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9PT0ib3JkZ3JvdXAiP2UuYm9keTpbZV19LCJvcmRhcmd1bWVudCIpLHB1PUZlLm1ha2VTcGFuLEtiZT1bImxlZnRtb3N0IiwibWJpbiIsIm1vcGVuIiwibXJlbCIsIm1vcCIsIm1wdW5jdCJdLFFiZT1bInJpZ2h0bW9zdCIsIm1yZWwiLCJtY2xvc2UiLCJtcHVuY3QiXSxaYmU9e2Rpc3BsYXk6cnIuRElTUExBWSx0ZXh0OnJyLlRFWFQsc2NyaXB0OnJyLlNDUklQVCxzY3JpcHRzY3JpcHQ6cnIuU0NSSVBUU0NSSVBUfSxKYmU9e21vcmQ6Im1vcmQiLG1vcDoibW9wIixtYmluOiJtYmluIixtcmVsOiJtcmVsIixtb3BlbjoibW9wZW4iLG1jbG9zZToibWNsb3NlIixtcHVuY3Q6Im1wdW5jdCIsbWlubmVyOiJtaW5uZXIifSxGaT1vKGZ1bmN0aW9uKGUscixuLGkpe2k9PT12b2lkIDAmJihpPVtudWxsLG51bGxdKTtmb3IodmFyIGE9W10scz0wO3M8ZS5sZW5ndGg7cysrKXt2YXIgbD1QcihlW3NdLHIpO2lmKGwgaW5zdGFuY2VvZiByZCl7dmFyIHU9bC5jaGlsZHJlbjthLnB1c2goLi4udSl9ZWxzZSBhLnB1c2gobCl9aWYoRmUudHJ5Q29tYmluZUNoYXJzKGEpLCFuKXJldHVybiBhO3ZhciBoPXI7aWYoZS5sZW5ndGg9PT0xKXt2YXIgZj1lWzBdO2YudHlwZT09PSJzaXppbmciP2g9ci5oYXZpbmdTaXplKGYuc2l6ZSk6Zi50eXBlPT09InN0eWxpbmciJiYoaD1yLmhhdmluZ1N0eWxlKFpiZVtmLnN0eWxlXSkpfXZhciBkPXB1KFtpWzBdfHwibGVmdG1vc3QiXSxbXSxyKSxwPXB1KFtpWzFdfHwicmlnaHRtb3N0Il0sW10sciksbT1uPT09InJvb3QiO3JldHVybiB1RyhhLChnLHkpPT57dmFyIHY9eS5jbGFzc2VzWzBdLHg9Zy5jbGFzc2VzWzBdO3Y9PT0ibWJpbiImJkp0LmNvbnRhaW5zKFFiZSx4KT95LmNsYXNzZXNbMF09Im1vcmQiOng9PT0ibWJpbiImJkp0LmNvbnRhaW5zKEtiZSx2KSYmKGcuY2xhc3Nlc1swXT0ibW9yZCIpfSx7bm9kZTpkfSxwLG0pLHVHKGEsKGcseSk9Pnt2YXIgdj1TQyh5KSx4PVNDKGcpLGI9diYmeD9nLmhhc0NsYXNzKCJtdGlnaHQiKT9qYmVbdl1beF06WGJlW3ZdW3hdOm51bGw7aWYoYilyZXR1cm4gRmUubWFrZUdsdWUoYixoKX0se25vZGU6ZH0scCxtKSxhfSwiYnVpbGRFeHByZXNzaW9uIiksdUc9byhmdW5jdGlvbiB0KGUscixuLGksYSl7aSYmZS5wdXNoKGkpO2Zvcih2YXIgcz0wO3M8ZS5sZW5ndGg7cysrKXt2YXIgbD1lW3NdLHU9V0cobCk7aWYodSl7dCh1LmNoaWxkcmVuLHIsbixudWxsLGEpO2NvbnRpbnVlfXZhciBoPSFsLmhhc0NsYXNzKCJtc3BhY2UiKTtpZihoKXt2YXIgZj1yKGwsbi5ub2RlKTtmJiYobi5pbnNlcnRBZnRlcj9uLmluc2VydEFmdGVyKGYpOihlLnVuc2hpZnQoZikscysrKSl9aD9uLm5vZGU9bDphJiZsLmhhc0NsYXNzKCJuZXdsaW5lIikmJihuLm5vZGU9cHUoWyJsZWZ0bW9zdCJdKSksbi5pbnNlcnRBZnRlcj0oZD0+cD0+e2Uuc3BsaWNlKGQrMSwwLHApLHMrK30pKHMpfWkmJmUucG9wKCl9LCJ0cmF2ZXJzZU5vblNwYWNlTm9kZXMiKSxXRz1vKGZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgcmR8fGUgaW5zdGFuY2VvZiBteXx8ZSBpbnN0YW5jZW9mIG5kJiZlLmhhc0NsYXNzKCJlbmNsb3NpbmciKT9lOm51bGx9LCJjaGVja1BhcnRpYWxHcm91cCIpLGU0ZT1vKGZ1bmN0aW9uIHQoZSxyKXt2YXIgbj1XRyhlKTtpZihuKXt2YXIgaT1uLmNoaWxkcmVuO2lmKGkubGVuZ3RoKXtpZihyPT09InJpZ2h0IilyZXR1cm4gdChpW2kubGVuZ3RoLTFdLCJyaWdodCIpO2lmKHI9PT0ibGVmdCIpcmV0dXJuIHQoaVswXSwibGVmdCIpfX1yZXR1cm4gZX0sImdldE91dGVybW9zdE5vZGUiKSxTQz1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIGU/KHImJihlPWU0ZShlLHIpKSxKYmVbZS5jbGFzc2VzWzBdXXx8bnVsbCk6bnVsbH0sImdldFR5cGVPZkRvbVRyZWUiKSx5eT1vKGZ1bmN0aW9uKGUscil7dmFyIG49WyJudWxsZGVsaW1pdGVyIl0uY29uY2F0KGUuYmFzZVNpemluZ0NsYXNzZXMoKSk7cmV0dXJuIHB1KHIuY29uY2F0KG4pKX0sIm1ha2VOdWxsRGVsaW1pdGVyIiksUHI9byhmdW5jdGlvbihlLHIsbil7aWYoIWUpcmV0dXJuIHB1KCk7aWYoRTRbZS50eXBlXSl7dmFyIGk9RTRbZS50eXBlXShlLHIpO2lmKG4mJnIuc2l6ZSE9PW4uc2l6ZSl7aT1wdShyLnNpemluZ0NsYXNzZXMobiksW2ldLHIpO3ZhciBhPXIuc2l6ZU11bHRpcGxpZXIvbi5zaXplTXVsdGlwbGllcjtpLmhlaWdodCo9YSxpLmRlcHRoKj1hfXJldHVybiBpfWVsc2UgdGhyb3cgbmV3IGx0KCJHb3QgZ3JvdXAgb2YgdW5rbm93biB0eXBlOiAnIitlLnR5cGUrIiciKX0sImJ1aWxkR3JvdXAiKTtvKG00LCJidWlsZEhUTUxVbmJyZWFrYWJsZSIpO28oQ0MsImJ1aWxkSFRNTCIpO28oWUcsIm5ld0RvY3VtZW50RnJhZ21lbnQiKTtrcz1jbGFzc3tzdGF0aWN7byh0aGlzLCJNYXRoTm9kZSIpfWNvbnN0cnVjdG9yKGUscixuKXt0aGlzLnR5cGU9dm9pZCAwLHRoaXMuYXR0cmlidXRlcz12b2lkIDAsdGhpcy5jaGlsZHJlbj12b2lkIDAsdGhpcy5jbGFzc2VzPXZvaWQgMCx0aGlzLnR5cGU9ZSx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5jaGlsZHJlbj1yfHxbXSx0aGlzLmNsYXNzZXM9bnx8W119c2V0QXR0cmlidXRlKGUscil7dGhpcy5hdHRyaWJ1dGVzW2VdPXJ9Z2V0QXR0cmlidXRlKGUpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbZV19dG9Ob2RlKCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIix0aGlzLnR5cGUpO2Zvcih2YXIgciBpbiB0aGlzLmF0dHJpYnV0ZXMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcyxyKSYmZS5zZXRBdHRyaWJ1dGUocix0aGlzLmF0dHJpYnV0ZXNbcl0pO3RoaXMuY2xhc3Nlcy5sZW5ndGg+MCYmKGUuY2xhc3NOYW1lPXloKHRoaXMuY2xhc3NlcykpO2Zvcih2YXIgbj0wO248dGhpcy5jaGlsZHJlbi5sZW5ndGg7bisrKWUuYXBwZW5kQ2hpbGQodGhpcy5jaGlsZHJlbltuXS50b05vZGUoKSk7cmV0dXJuIGV9dG9NYXJrdXAoKXt2YXIgZT0iPCIrdGhpcy50eXBlO2Zvcih2YXIgciBpbiB0aGlzLmF0dHJpYnV0ZXMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcyxyKSYmKGUrPSIgIityKyc9IicsZSs9SnQuZXNjYXBlKHRoaXMuYXR0cmlidXRlc1tyXSksZSs9JyInKTt0aGlzLmNsYXNzZXMubGVuZ3RoPjAmJihlKz0nIGNsYXNzID0iJytKdC5lc2NhcGUoeWgodGhpcy5jbGFzc2VzKSkrJyInKSxlKz0iPiI7Zm9yKHZhciBuPTA7bjx0aGlzLmNoaWxkcmVuLmxlbmd0aDtuKyspZSs9dGhpcy5jaGlsZHJlbltuXS50b01hcmt1cCgpO3JldHVybiBlKz0iPC8iK3RoaXMudHlwZSsiPiIsZX10b1RleHQoKXtyZXR1cm4gdGhpcy5jaGlsZHJlbi5tYXAoZT0+ZS50b1RleHQoKSkuam9pbigiIil9fSx0ZD1jbGFzc3tzdGF0aWN7byh0aGlzLCJUZXh0Tm9kZSIpfWNvbnN0cnVjdG9yKGUpe3RoaXMudGV4dD12b2lkIDAsdGhpcy50ZXh0PWV9dG9Ob2RlKCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMudGV4dCl9dG9NYXJrdXAoKXtyZXR1cm4gSnQuZXNjYXBlKHRoaXMudG9UZXh0KCkpfXRvVGV4dCgpe3JldHVybiB0aGlzLnRleHR9fSxBQz1jbGFzc3tzdGF0aWN7byh0aGlzLCJTcGFjZU5vZGUiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLndpZHRoPXZvaWQgMCx0aGlzLmNoYXJhY3Rlcj12b2lkIDAsdGhpcy53aWR0aD1lLGU+PS4wNTU1NSYmZTw9LjA1NTU2P3RoaXMuY2hhcmFjdGVyPSJcdTIwMEEiOmU+PS4xNjY2JiZlPD0uMTY2Nz90aGlzLmNoYXJhY3Rlcj0iXHUyMDA5IjplPj0uMjIyMiYmZTw9LjIyMjM/dGhpcy5jaGFyYWN0ZXI9Ilx1MjAwNSI6ZT49LjI3NzcmJmU8PS4yNzc4P3RoaXMuY2hhcmFjdGVyPSJcdTIwMDVcdTIwMEEiOmU+PS0uMDU1NTYmJmU8PS0uMDU1NTU/dGhpcy5jaGFyYWN0ZXI9Ilx1MjAwQVx1MjA2MyI6ZT49LS4xNjY3JiZlPD0tLjE2NjY/dGhpcy5jaGFyYWN0ZXI9Ilx1MjAwOVx1MjA2MyI6ZT49LS4yMjIzJiZlPD0tLjIyMjI/dGhpcy5jaGFyYWN0ZXI9Ilx1MjA1Rlx1MjA2MyI6ZT49LS4yNzc4JiZlPD0tLjI3Nzc/dGhpcy5jaGFyYWN0ZXI9Ilx1MjAwNVx1MjA2MyI6dGhpcy5jaGFyYWN0ZXI9bnVsbH10b05vZGUoKXtpZih0aGlzLmNoYXJhY3RlcilyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGhpcy5jaGFyYWN0ZXIpO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCIsIm1zcGFjZSIpO3JldHVybiBlLnNldEF0dHJpYnV0ZSgid2lkdGgiLGd0KHRoaXMud2lkdGgpKSxlfXRvTWFya3VwKCl7cmV0dXJuIHRoaXMuY2hhcmFjdGVyPyI8bXRleHQ+Iit0aGlzLmNoYXJhY3RlcisiPC9tdGV4dD4iOic8bXNwYWNlIHdpZHRoPSInK2d0KHRoaXMud2lkdGgpKyciLz4nfXRvVGV4dCgpe3JldHVybiB0aGlzLmNoYXJhY3Rlcj90aGlzLmNoYXJhY3RlcjoiICJ9fSxhdD17TWF0aE5vZGU6a3MsVGV4dE5vZGU6dGQsU3BhY2VOb2RlOkFDLG5ld0RvY3VtZW50RnJhZ21lbnQ6WUd9LE1vPW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiBDbltyXVtlXSYmQ25bcl1bZV0ucmVwbGFjZSYmZS5jaGFyQ29kZUF0KDApIT09NTUzNDkmJiEoekcuaGFzT3duUHJvcGVydHkoZSkmJm4mJihuLmZvbnRGYW1pbHkmJm4uZm9udEZhbWlseS5zbGljZSg0LDYpPT09InR0Inx8bi5mb250JiZuLmZvbnQuc2xpY2UoNCw2KT09PSJ0dCIpKSYmKGU9Q25bcl1bZV0ucmVwbGFjZSksbmV3IGF0LlRleHROb2RlKGUpfSwibWFrZVRleHQiKSxQQz1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLmxlbmd0aD09PTE/ZVswXTpuZXcgYXQuTWF0aE5vZGUoIm1yb3ciLGUpfSwibWFrZVJvdyIpLEJDPW8oZnVuY3Rpb24oZSxyKXtpZihyLmZvbnRGYW1pbHk9PT0idGV4dHR0IilyZXR1cm4ibW9ub3NwYWNlIjtpZihyLmZvbnRGYW1pbHk9PT0idGV4dHNmIilyZXR1cm4gci5mb250U2hhcGU9PT0idGV4dGl0IiYmci5mb250V2VpZ2h0PT09InRleHRiZiI/InNhbnMtc2VyaWYtYm9sZC1pdGFsaWMiOnIuZm9udFNoYXBlPT09InRleHRpdCI/InNhbnMtc2VyaWYtaXRhbGljIjpyLmZvbnRXZWlnaHQ9PT0idGV4dGJmIj8iYm9sZC1zYW5zLXNlcmlmIjoic2Fucy1zZXJpZiI7aWYoci5mb250U2hhcGU9PT0idGV4dGl0IiYmci5mb250V2VpZ2h0PT09InRleHRiZiIpcmV0dXJuImJvbGQtaXRhbGljIjtpZihyLmZvbnRTaGFwZT09PSJ0ZXh0aXQiKXJldHVybiJpdGFsaWMiO2lmKHIuZm9udFdlaWdodD09PSJ0ZXh0YmYiKXJldHVybiJib2xkIjt2YXIgbj1yLmZvbnQ7aWYoIW58fG49PT0ibWF0aG5vcm1hbCIpcmV0dXJuIG51bGw7dmFyIGk9ZS5tb2RlO2lmKG49PT0ibWF0aGl0IilyZXR1cm4iaXRhbGljIjtpZihuPT09ImJvbGRzeW1ib2wiKXJldHVybiBlLnR5cGU9PT0idGV4dG9yZCI/ImJvbGQiOiJib2xkLWl0YWxpYyI7aWYobj09PSJtYXRoYmYiKXJldHVybiJib2xkIjtpZihuPT09Im1hdGhiYiIpcmV0dXJuImRvdWJsZS1zdHJ1Y2siO2lmKG49PT0ibWF0aGZyYWsiKXJldHVybiJmcmFrdHVyIjtpZihuPT09Im1hdGhzY3IifHxuPT09Im1hdGhjYWwiKXJldHVybiJzY3JpcHQiO2lmKG49PT0ibWF0aHNmIilyZXR1cm4ic2Fucy1zZXJpZiI7aWYobj09PSJtYXRodHQiKXJldHVybiJtb25vc3BhY2UiO3ZhciBhPWUudGV4dDtpZihKdC5jb250YWlucyhbIlxcaW1hdGgiLCJcXGptYXRoIl0sYSkpcmV0dXJuIG51bGw7Q25baV1bYV0mJkNuW2ldW2FdLnJlcGxhY2UmJihhPUNuW2ldW2FdLnJlcGxhY2UpO3ZhciBzPUZlLmZvbnRNYXBbbl0uZm9udE5hbWU7cmV0dXJuIElDKGEscyxpKT9GZS5mb250TWFwW25dLnZhcmlhbnQ6bnVsbH0sImdldFZhcmlhbnQiKSxTcz1vKGZ1bmN0aW9uKGUscixuKXtpZihlLmxlbmd0aD09PTEpe3ZhciBpPXluKGVbMF0scik7cmV0dXJuIG4mJmkgaW5zdGFuY2VvZiBrcyYmaS50eXBlPT09Im1vIiYmKGkuc2V0QXR0cmlidXRlKCJsc3BhY2UiLCIwZW0iKSxpLnNldEF0dHJpYnV0ZSgicnNwYWNlIiwiMGVtIikpLFtpXX1mb3IodmFyIGE9W10scyxsPTA7bDxlLmxlbmd0aDtsKyspe3ZhciB1PXluKGVbbF0scik7aWYodSBpbnN0YW5jZW9mIGtzJiZzIGluc3RhbmNlb2Yga3Mpe2lmKHUudHlwZT09PSJtdGV4dCImJnMudHlwZT09PSJtdGV4dCImJnUuZ2V0QXR0cmlidXRlKCJtYXRodmFyaWFudCIpPT09cy5nZXRBdHRyaWJ1dGUoIm1hdGh2YXJpYW50Iikpe3MuY2hpbGRyZW4ucHVzaCguLi51LmNoaWxkcmVuKTtjb250aW51ZX1lbHNlIGlmKHUudHlwZT09PSJtbiImJnMudHlwZT09PSJtbiIpe3MuY2hpbGRyZW4ucHVzaCguLi51LmNoaWxkcmVuKTtjb250aW51ZX1lbHNlIGlmKHUudHlwZT09PSJtaSImJnUuY2hpbGRyZW4ubGVuZ3RoPT09MSYmcy50eXBlPT09Im1uIil7dmFyIGg9dS5jaGlsZHJlblswXTtpZihoIGluc3RhbmNlb2YgdGQmJmgudGV4dD09PSIuIil7cy5jaGlsZHJlbi5wdXNoKC4uLnUuY2hpbGRyZW4pO2NvbnRpbnVlfX1lbHNlIGlmKHMudHlwZT09PSJtaSImJnMuY2hpbGRyZW4ubGVuZ3RoPT09MSl7dmFyIGY9cy5jaGlsZHJlblswXTtpZihmIGluc3RhbmNlb2YgdGQmJmYudGV4dD09PSJcdTAzMzgiJiYodS50eXBlPT09Im1vInx8dS50eXBlPT09Im1pInx8dS50eXBlPT09Im1uIikpe3ZhciBkPXUuY2hpbGRyZW5bMF07ZCBpbnN0YW5jZW9mIHRkJiZkLnRleHQubGVuZ3RoPjAmJihkLnRleHQ9ZC50ZXh0LnNsaWNlKDAsMSkrIlx1MDMzOCIrZC50ZXh0LnNsaWNlKDEpLGEucG9wKCkpfX19YS5wdXNoKHUpLHM9dX1yZXR1cm4gYX0sImJ1aWxkRXhwcmVzc2lvbiIpLHZoPW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiBQQyhTcyhlLHIsbikpfSwiYnVpbGRFeHByZXNzaW9uUm93IikseW49byhmdW5jdGlvbihlLHIpe2lmKCFlKXJldHVybiBuZXcgYXQuTWF0aE5vZGUoIm1yb3ciKTtpZihTNFtlLnR5cGVdKXt2YXIgbj1TNFtlLnR5cGVdKGUscik7cmV0dXJuIG59ZWxzZSB0aHJvdyBuZXcgbHQoIkdvdCBncm91cCBvZiB1bmtub3duIHR5cGU6ICciK2UudHlwZSsiJyIpfSwiYnVpbGRHcm91cCIpO28oaEcsImJ1aWxkTWF0aE1MIik7cUc9byhmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFQ0KHtzdHlsZTplLmRpc3BsYXlNb2RlP3JyLkRJU1BMQVk6cnIuVEVYVCxtYXhTaXplOmUubWF4U2l6ZSxtaW5SdWxlVGhpY2tuZXNzOmUubWluUnVsZVRoaWNrbmVzc30pfSwib3B0aW9uc0Zyb21TZXR0aW5ncyIpLFhHPW8oZnVuY3Rpb24oZSxyKXtpZihyLmRpc3BsYXlNb2RlKXt2YXIgbj1bImthdGV4LWRpc3BsYXkiXTtyLmxlcW5vJiZuLnB1c2goImxlcW5vIiksci5mbGVxbiYmbi5wdXNoKCJmbGVxbiIpLGU9RmUubWFrZVNwYW4obixbZV0pfXJldHVybiBlfSwiZGlzcGxheVdyYXAiKSx0NGU9byhmdW5jdGlvbihlLHIsbil7dmFyIGk9cUcobiksYTtpZihuLm91dHB1dD09PSJtYXRobWwiKXJldHVybiBoRyhlLHIsaSxuLmRpc3BsYXlNb2RlLCEwKTtpZihuLm91dHB1dD09PSJodG1sIil7dmFyIHM9Q0MoZSxpKTthPUZlLm1ha2VTcGFuKFsia2F0ZXgiXSxbc10pfWVsc2V7dmFyIGw9aEcoZSxyLGksbi5kaXNwbGF5TW9kZSwhMSksdT1DQyhlLGkpO2E9RmUubWFrZVNwYW4oWyJrYXRleCJdLFtsLHVdKX1yZXR1cm4gWEcoYSxuKX0sImJ1aWxkVHJlZSIpLHI0ZT1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1xRyhuKSxhPUNDKGUsaSkscz1GZS5tYWtlU3BhbihbImthdGV4Il0sW2FdKTtyZXR1cm4gWEcocyxuKX0sImJ1aWxkSFRNTFRyZWUiKSxuNGU9e3dpZGVoYXQ6Il4iLHdpZGVjaGVjazoiXHUwMkM3Iix3aWRldGlsZGU6In4iLHV0aWxkZToifiIsb3ZlcmxlZnRhcnJvdzoiXHUyMTkwIix1bmRlcmxlZnRhcnJvdzoiXHUyMTkwIix4bGVmdGFycm93OiJcdTIxOTAiLG92ZXJyaWdodGFycm93OiJcdTIxOTIiLHVuZGVycmlnaHRhcnJvdzoiXHUyMTkyIix4cmlnaHRhcnJvdzoiXHUyMTkyIix1bmRlcmJyYWNlOiJcdTIzREYiLG92ZXJicmFjZToiXHUyM0RFIixvdmVyZ3JvdXA6Ilx1MjNFMCIsdW5kZXJncm91cDoiXHUyM0UxIixvdmVybGVmdHJpZ2h0YXJyb3c6Ilx1MjE5NCIsdW5kZXJsZWZ0cmlnaHRhcnJvdzoiXHUyMTk0Iix4bGVmdHJpZ2h0YXJyb3c6Ilx1MjE5NCIsT3ZlcnJpZ2h0YXJyb3c6Ilx1MjFEMiIseFJpZ2h0YXJyb3c6Ilx1MjFEMiIsb3ZlcmxlZnRoYXJwb29uOiJcdTIxQkMiLHhsZWZ0aGFycG9vbnVwOiJcdTIxQkMiLG92ZXJyaWdodGhhcnBvb246Ilx1MjFDMCIseHJpZ2h0aGFycG9vbnVwOiJcdTIxQzAiLHhMZWZ0YXJyb3c6Ilx1MjFEMCIseExlZnRyaWdodGFycm93OiJcdTIxRDQiLHhob29rbGVmdGFycm93OiJcdTIxQTkiLHhob29rcmlnaHRhcnJvdzoiXHUyMUFBIix4bWFwc3RvOiJcdTIxQTYiLHhyaWdodGhhcnBvb25kb3duOiJcdTIxQzEiLHhsZWZ0aGFycG9vbmRvd246Ilx1MjFCRCIseHJpZ2h0bGVmdGhhcnBvb25zOiJcdTIxQ0MiLHhsZWZ0cmlnaHRoYXJwb29uczoiXHUyMUNCIix4dHdvaGVhZGxlZnRhcnJvdzoiXHUyMTlFIix4dHdvaGVhZHJpZ2h0YXJyb3c6Ilx1MjFBMCIseGxvbmdlcXVhbDoiPSIseHRvZnJvbToiXHUyMUM0Iix4cmlnaHRsZWZ0YXJyb3dzOiJcdTIxQzQiLHhyaWdodGVxdWlsaWJyaXVtOiJcdTIxQ0MiLHhsZWZ0ZXF1aWxpYnJpdW06Ilx1MjFDQiIsIlxcY2RyaWdodGFycm93IjoiXHUyMTkyIiwiXFxjZGxlZnRhcnJvdyI6Ilx1MjE5MCIsIlxcY2Rsb25nZXF1YWwiOiI9In0saTRlPW8oZnVuY3Rpb24oZSl7dmFyIHI9bmV3IGF0Lk1hdGhOb2RlKCJtbyIsW25ldyBhdC5UZXh0Tm9kZShuNGVbZS5yZXBsYWNlKC9eXFwvLCIiKV0pXSk7cmV0dXJuIHIuc2V0QXR0cmlidXRlKCJzdHJldGNoeSIsInRydWUiKSxyfSwibWF0aE1Mbm9kZSIpLGE0ZT17b3ZlcnJpZ2h0YXJyb3c6W1sicmlnaHRhcnJvdyJdLC44ODgsNTIyLCJ4TWF4WU1pbiJdLG92ZXJsZWZ0YXJyb3c6W1sibGVmdGFycm93Il0sLjg4OCw1MjIsInhNaW5ZTWluIl0sdW5kZXJyaWdodGFycm93OltbInJpZ2h0YXJyb3ciXSwuODg4LDUyMiwieE1heFlNaW4iXSx1bmRlcmxlZnRhcnJvdzpbWyJsZWZ0YXJyb3ciXSwuODg4LDUyMiwieE1pbllNaW4iXSx4cmlnaHRhcnJvdzpbWyJyaWdodGFycm93Il0sMS40NjksNTIyLCJ4TWF4WU1pbiJdLCJcXGNkcmlnaHRhcnJvdyI6W1sicmlnaHRhcnJvdyJdLDMsNTIyLCJ4TWF4WU1pbiJdLHhsZWZ0YXJyb3c6W1sibGVmdGFycm93Il0sMS40NjksNTIyLCJ4TWluWU1pbiJdLCJcXGNkbGVmdGFycm93IjpbWyJsZWZ0YXJyb3ciXSwzLDUyMiwieE1pbllNaW4iXSxPdmVycmlnaHRhcnJvdzpbWyJkb3VibGVyaWdodGFycm93Il0sLjg4OCw1NjAsInhNYXhZTWluIl0seFJpZ2h0YXJyb3c6W1siZG91YmxlcmlnaHRhcnJvdyJdLDEuNTI2LDU2MCwieE1heFlNaW4iXSx4TGVmdGFycm93OltbImRvdWJsZWxlZnRhcnJvdyJdLDEuNTI2LDU2MCwieE1pbllNaW4iXSxvdmVybGVmdGhhcnBvb246W1sibGVmdGhhcnBvb24iXSwuODg4LDUyMiwieE1pbllNaW4iXSx4bGVmdGhhcnBvb251cDpbWyJsZWZ0aGFycG9vbiJdLC44ODgsNTIyLCJ4TWluWU1pbiJdLHhsZWZ0aGFycG9vbmRvd246W1sibGVmdGhhcnBvb25kb3duIl0sLjg4OCw1MjIsInhNaW5ZTWluIl0sb3ZlcnJpZ2h0aGFycG9vbjpbWyJyaWdodGhhcnBvb24iXSwuODg4LDUyMiwieE1heFlNaW4iXSx4cmlnaHRoYXJwb29udXA6W1sicmlnaHRoYXJwb29uIl0sLjg4OCw1MjIsInhNYXhZTWluIl0seHJpZ2h0aGFycG9vbmRvd246W1sicmlnaHRoYXJwb29uZG93biJdLC44ODgsNTIyLCJ4TWF4WU1pbiJdLHhsb25nZXF1YWw6W1sibG9uZ2VxdWFsIl0sLjg4OCwzMzQsInhNaW5ZTWluIl0sIlxcY2Rsb25nZXF1YWwiOltbImxvbmdlcXVhbCJdLDMsMzM0LCJ4TWluWU1pbiJdLHh0d29oZWFkbGVmdGFycm93OltbInR3b2hlYWRsZWZ0YXJyb3ciXSwuODg4LDMzNCwieE1pbllNaW4iXSx4dHdvaGVhZHJpZ2h0YXJyb3c6W1sidHdvaGVhZHJpZ2h0YXJyb3ciXSwuODg4LDMzNCwieE1heFlNaW4iXSxvdmVybGVmdHJpZ2h0YXJyb3c6W1sibGVmdGFycm93IiwicmlnaHRhcnJvdyJdLC44ODgsNTIyXSxvdmVyYnJhY2U6W1sibGVmdGJyYWNlIiwibWlkYnJhY2UiLCJyaWdodGJyYWNlIl0sMS42LDU0OF0sdW5kZXJicmFjZTpbWyJsZWZ0YnJhY2V1bmRlciIsIm1pZGJyYWNldW5kZXIiLCJyaWdodGJyYWNldW5kZXIiXSwxLjYsNTQ4XSx1bmRlcmxlZnRyaWdodGFycm93OltbImxlZnRhcnJvdyIsInJpZ2h0YXJyb3ciXSwuODg4LDUyMl0seGxlZnRyaWdodGFycm93OltbImxlZnRhcnJvdyIsInJpZ2h0YXJyb3ciXSwxLjc1LDUyMl0seExlZnRyaWdodGFycm93OltbImRvdWJsZWxlZnRhcnJvdyIsImRvdWJsZXJpZ2h0YXJyb3ciXSwxLjc1LDU2MF0seHJpZ2h0bGVmdGhhcnBvb25zOltbImxlZnRoYXJwb29uZG93bnBsdXMiLCJyaWdodGhhcnBvb25wbHVzIl0sMS43NSw3MTZdLHhsZWZ0cmlnaHRoYXJwb29uczpbWyJsZWZ0aGFycG9vbnBsdXMiLCJyaWdodGhhcnBvb25kb3ducGx1cyJdLDEuNzUsNzE2XSx4aG9va2xlZnRhcnJvdzpbWyJsZWZ0YXJyb3ciLCJyaWdodGhvb2siXSwxLjA4LDUyMl0seGhvb2tyaWdodGFycm93OltbImxlZnRob29rIiwicmlnaHRhcnJvdyJdLDEuMDgsNTIyXSxvdmVybGluZXNlZ21lbnQ6W1sibGVmdGxpbmVzZWdtZW50IiwicmlnaHRsaW5lc2VnbWVudCJdLC44ODgsNTIyXSx1bmRlcmxpbmVzZWdtZW50OltbImxlZnRsaW5lc2VnbWVudCIsInJpZ2h0bGluZXNlZ21lbnQiXSwuODg4LDUyMl0sb3Zlcmdyb3VwOltbImxlZnRncm91cCIsInJpZ2h0Z3JvdXAiXSwuODg4LDM0Ml0sdW5kZXJncm91cDpbWyJsZWZ0Z3JvdXB1bmRlciIsInJpZ2h0Z3JvdXB1bmRlciJdLC44ODgsMzQyXSx4bWFwc3RvOltbImxlZnRtYXBzdG8iLCJyaWdodGFycm93Il0sMS41LDUyMl0seHRvZnJvbTpbWyJsZWZ0VG9Gcm9tIiwicmlnaHRUb0Zyb20iXSwxLjc1LDUyOF0seHJpZ2h0bGVmdGFycm93czpbWyJiYXJhYm92ZWxlZnRhcnJvdyIsInJpZ2h0YXJyb3dhYm92ZWJhciJdLDEuNzUsOTAxXSx4cmlnaHRlcXVpbGlicml1bTpbWyJiYXJhYm92ZXNob3J0bGVmdGhhcnBvb24iLCJyaWdodGhhcnBvb25hYm92ZXNob3J0YmFyIl0sMS43NSw3MTZdLHhsZWZ0ZXF1aWxpYnJpdW06W1sic2hvcnRiYXJhYm92ZWxlZnRoYXJwb29uIiwic2hvcnRyaWdodGhhcnBvb25hYm92ZWJhciJdLDEuNzUsNzE2XX0sczRlPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUudHlwZT09PSJvcmRncm91cCI/ZS5ib2R5Lmxlbmd0aDoxfSwiZ3JvdXBMZW5ndGgiKSxvNGU9byhmdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4oKXt2YXIgbD00ZTUsdT1lLmxhYmVsLnNsaWNlKDEpO2lmKEp0LmNvbnRhaW5zKFsid2lkZWhhdCIsIndpZGVjaGVjayIsIndpZGV0aWxkZSIsInV0aWxkZSJdLHUpKXt2YXIgaD1lLGY9czRlKGguYmFzZSksZCxwLG07aWYoZj41KXU9PT0id2lkZWhhdCJ8fHU9PT0id2lkZWNoZWNrIj8oZD00MjAsbD0yMzY0LG09LjQyLHA9dSsiNCIpOihkPTMxMixsPTIzNDAsbT0uMzQscD0idGlsZGU0Iik7ZWxzZXt2YXIgZz1bMSwxLDIsMiwzLDNdW2ZdO3U9PT0id2lkZWhhdCJ8fHU9PT0id2lkZWNoZWNrIj8obD1bMCwxMDYyLDIzNjQsMjM2NCwyMzY0XVtnXSxkPVswLDIzOSwzMDAsMzYwLDQyMF1bZ10sbT1bMCwuMjQsLjMsLjMsLjM2LC40Ml1bZ10scD11K2cpOihsPVswLDYwMCwxMDMzLDIzMzksMjM0MF1bZ10sZD1bMCwyNjAsMjg2LDMwNiwzMTJdW2ddLG09WzAsLjI2LC4yODYsLjMsLjMwNiwuMzRdW2ddLHA9InRpbGRlIitnKX12YXIgeT1uZXcgY2MocCksdj1uZXcgdmwoW3ldLHt3aWR0aDoiMTAwJSIsaGVpZ2h0Omd0KG0pLHZpZXdCb3g6IjAgMCAiK2wrIiAiK2QscHJlc2VydmVBc3BlY3RSYXRpbzoibm9uZSJ9KTtyZXR1cm57c3BhbjpGZS5tYWtlU3ZnU3BhbihbXSxbdl0sciksbWluV2lkdGg6MCxoZWlnaHQ6bX19ZWxzZXt2YXIgeD1bXSxiPWE0ZVt1XSxbdyxfLFRdPWIsRT1ULzFlMyxMPXcubGVuZ3RoLFMsQTtpZihMPT09MSl7dmFyIEk9YlszXTtTPVsiaGlkZS10YWlsIl0sQT1bSV19ZWxzZSBpZihMPT09MilTPVsiaGFsZmFycm93LWxlZnQiLCJoYWxmYXJyb3ctcmlnaHQiXSxBPVsieE1pbllNaW4iLCJ4TWF4WU1pbiJdO2Vsc2UgaWYoTD09PTMpUz1bImJyYWNlLWxlZnQiLCJicmFjZS1jZW50ZXIiLCJicmFjZS1yaWdodCJdLEE9WyJ4TWluWU1pbiIsInhNaWRZTWluIiwieE1heFlNaW4iXTtlbHNlIHRocm93IG5ldyBFcnJvcihgQ29ycmVjdCBrYXRleEltYWdlc0RhdGEgb3IgdXBkYXRlIGNvZGUgaGVyZSB0byBzdXBwb3J0CiAgICAgICAgICAgICAgICAgICAgYCtMKyIgY2hpbGRyZW4uIik7Zm9yKHZhciBEPTA7RDxMO0QrKyl7dmFyIGs9bmV3IGNjKHdbRF0pLFI9bmV3IHZsKFtrXSx7d2lkdGg6IjQwMGVtIixoZWlnaHQ6Z3QoRSksdmlld0JveDoiMCAwICIrbCsiICIrVCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOkFbRF0rIiBzbGljZSJ9KSxDPUZlLm1ha2VTdmdTcGFuKFtTW0RdXSxbUl0scik7aWYoTD09PTEpcmV0dXJue3NwYW46QyxtaW5XaWR0aDpfLGhlaWdodDpFfTtDLnN0eWxlLmhlaWdodD1ndChFKSx4LnB1c2goQyl9cmV0dXJue3NwYW46RmUubWFrZVNwYW4oWyJzdHJldGNoeSJdLHgsciksbWluV2lkdGg6XyxoZWlnaHQ6RX19fW8obiwiYnVpbGRTdmdTcGFuXyIpO3ZhcntzcGFuOmksbWluV2lkdGg6YSxoZWlnaHQ6c309bigpO3JldHVybiBpLmhlaWdodD1zLGkuc3R5bGUuaGVpZ2h0PWd0KHMpLGE+MCYmKGkuc3R5bGUubWluV2lkdGg9Z3QoYSkpLGl9LCJzdmdTcGFuIiksbDRlPW8oZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgcyxsPWUuaGVpZ2h0K2UuZGVwdGgrbitpO2lmKC9mYm94fGNvbG9yfGFuZ2wvLnRlc3Qocikpe2lmKHM9RmUubWFrZVNwYW4oWyJzdHJldGNoeSIscl0sW10sYSkscj09PSJmYm94Iil7dmFyIHU9YS5jb2xvciYmYS5nZXRDb2xvcigpO3UmJihzLnN0eWxlLmJvcmRlckNvbG9yPXUpfX1lbHNle3ZhciBoPVtdOy9eW2J4XWNhbmNlbCQvLnRlc3QocikmJmgucHVzaChuZXcgZ3koe3gxOiIwIix5MToiMCIseDI6IjEwMCUiLHkyOiIxMDAlIiwic3Ryb2tlLXdpZHRoIjoiMC4wNDZlbSJ9KSksL154P2NhbmNlbCQvLnRlc3QocikmJmgucHVzaChuZXcgZ3koe3gxOiIwIix5MToiMTAwJSIseDI6IjEwMCUiLHkyOiIwIiwic3Ryb2tlLXdpZHRoIjoiMC4wNDZlbSJ9KSk7dmFyIGY9bmV3IHZsKGgse3dpZHRoOiIxMDAlIixoZWlnaHQ6Z3QobCl9KTtzPUZlLm1ha2VTdmdTcGFuKFtdLFtmXSxhKX1yZXR1cm4gcy5oZWlnaHQ9bCxzLnN0eWxlLmhlaWdodD1ndChsKSxzfSwiZW5jbG9zZVNwYW4iKSxtdT17ZW5jbG9zZVNwYW46bDRlLG1hdGhNTG5vZGU6aTRlLHN2Z1NwYW46bzRlfTtvKGdyLCJhc3NlcnROb2RlVHlwZSIpO28oRkMsImFzc2VydFN5bWJvbE5vZGVUeXBlIik7byhONCwiY2hlY2tTeW1ib2xOb2RlVHlwZSIpO3pDPW8oKHQsZSk9Pnt2YXIgcixuLGk7dCYmdC50eXBlPT09InN1cHN1YiI/KG49Z3IodC5iYXNlLCJhY2NlbnQiKSxyPW4uYmFzZSx0LmJhc2U9cixpPVJiZShQcih0LGUpKSx0LmJhc2U9bik6KG49Z3IodCwiYWNjZW50Iikscj1uLmJhc2UpO3ZhciBhPVByKHIsZS5oYXZpbmdDcmFtcGVkU3R5bGUoKSkscz1uLmlzU2hpZnR5JiZKdC5pc0NoYXJhY3RlckJveChyKSxsPTA7aWYocyl7dmFyIHU9SnQuZ2V0QmFzZUVsZW0ociksaD1Qcih1LGUuaGF2aW5nQ3JhbXBlZFN0eWxlKCkpO2w9c0coaCkuc2tld312YXIgZj1uLmxhYmVsPT09IlxcYyIsZD1mP2EuaGVpZ2h0K2EuZGVwdGg6TWF0aC5taW4oYS5oZWlnaHQsZS5mb250TWV0cmljcygpLnhIZWlnaHQpLHA7aWYobi5pc1N0cmV0Y2h5KXA9bXUuc3ZnU3BhbihuLGUpLHA9RmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImZpcnN0QmFzZWxpbmUiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTphfSx7dHlwZToiZWxlbSIsZWxlbTpwLHdyYXBwZXJDbGFzc2VzOlsic3ZnLWFsaWduIl0sd3JhcHBlclN0eWxlOmw+MD97d2lkdGg6ImNhbGMoMTAwJSAtICIrZ3QoMipsKSsiKSIsbWFyZ2luTGVmdDpndCgyKmwpfTp2b2lkIDB9XX0sZSk7ZWxzZXt2YXIgbSxnO24ubGFiZWw9PT0iXFx2ZWMiPyhtPUZlLnN0YXRpY1N2ZygidmVjIixlKSxnPUZlLnN2Z0RhdGEudmVjWzFdKToobT1GZS5tYWtlT3JkKHttb2RlOm4ubW9kZSx0ZXh0Om4ubGFiZWx9LGUsInRleHRvcmQiKSxtPXNHKG0pLG0uaXRhbGljPTAsZz1tLndpZHRoLGYmJihkKz1tLmRlcHRoKSkscD1GZS5tYWtlU3BhbihbImFjY2VudC1ib2R5Il0sW21dKTt2YXIgeT1uLmxhYmVsPT09IlxcdGV4dGNpcmNsZWQiO3kmJihwLmNsYXNzZXMucHVzaCgiYWNjZW50LWZ1bGwiKSxkPWEuaGVpZ2h0KTt2YXIgdj1sO3l8fCh2LT1nLzIpLHAuc3R5bGUubGVmdD1ndCh2KSxuLmxhYmVsPT09IlxcdGV4dGNpcmNsZWQiJiYocC5zdHlsZS50b3A9Ii4yZW0iKSxwPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJmaXJzdEJhc2VsaW5lIixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06YX0se3R5cGU6Imtlcm4iLHNpemU6LWR9LHt0eXBlOiJlbGVtIixlbGVtOnB9XX0sZSl9dmFyIHg9RmUubWFrZVNwYW4oWyJtb3JkIiwiYWNjZW50Il0sW3BdLGUpO3JldHVybiBpPyhpLmNoaWxkcmVuWzBdPXgsaS5oZWlnaHQ9TWF0aC5tYXgoeC5oZWlnaHQsaS5oZWlnaHQpLGkuY2xhc3Nlc1swXT0ibW9yZCIsaSk6eH0sImh0bWxCdWlsZGVyJGEiKSxqRz1vKCh0LGUpPT57dmFyIHI9dC5pc1N0cmV0Y2h5P211Lm1hdGhNTG5vZGUodC5sYWJlbCk6bmV3IGF0Lk1hdGhOb2RlKCJtbyIsW01vKHQubGFiZWwsdC5tb2RlKV0pLG49bmV3IGF0Lk1hdGhOb2RlKCJtb3ZlciIsW3luKHQuYmFzZSxlKSxyXSk7cmV0dXJuIG4uc2V0QXR0cmlidXRlKCJhY2NlbnQiLCJ0cnVlIiksbn0sIm1hdGhtbEJ1aWxkZXIkOSIpLGM0ZT1uZXcgUmVnRXhwKFsiXFxhY3V0ZSIsIlxcZ3JhdmUiLCJcXGRkb3QiLCJcXHRpbGRlIiwiXFxiYXIiLCJcXGJyZXZlIiwiXFxjaGVjayIsIlxcaGF0IiwiXFx2ZWMiLCJcXGRvdCIsIlxcbWF0aHJpbmciXS5tYXAodD0+IlxcIit0KS5qb2luKCJ8IikpO1N0KHt0eXBlOiJhY2NlbnQiLG5hbWVzOlsiXFxhY3V0ZSIsIlxcZ3JhdmUiLCJcXGRkb3QiLCJcXHRpbGRlIiwiXFxiYXIiLCJcXGJyZXZlIiwiXFxjaGVjayIsIlxcaGF0IiwiXFx2ZWMiLCJcXGRvdCIsIlxcbWF0aHJpbmciLCJcXHdpZGVjaGVjayIsIlxcd2lkZWhhdCIsIlxcd2lkZXRpbGRlIiwiXFxvdmVycmlnaHRhcnJvdyIsIlxcb3ZlcmxlZnRhcnJvdyIsIlxcT3ZlcnJpZ2h0YXJyb3ciLCJcXG92ZXJsZWZ0cmlnaHRhcnJvdyIsIlxcb3Zlcmdyb3VwIiwiXFxvdmVybGluZXNlZ21lbnQiLCJcXG92ZXJsZWZ0aGFycG9vbiIsIlxcb3ZlcnJpZ2h0aGFycG9vbiJdLHByb3BzOntudW1BcmdzOjF9LGhhbmRsZXI6bygodCxlKT0+e3ZhciByPUM0KGVbMF0pLG49IWM0ZS50ZXN0KHQuZnVuY05hbWUpLGk9IW58fHQuZnVuY05hbWU9PT0iXFx3aWRlaGF0Inx8dC5mdW5jTmFtZT09PSJcXHdpZGV0aWxkZSJ8fHQuZnVuY05hbWU9PT0iXFx3aWRlY2hlY2siO3JldHVybnt0eXBlOiJhY2NlbnQiLG1vZGU6dC5wYXJzZXIubW9kZSxsYWJlbDp0LmZ1bmNOYW1lLGlzU3RyZXRjaHk6bixpc1NoaWZ0eTppLGJhc2U6cn19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6ekMsbWF0aG1sQnVpbGRlcjpqR30pO1N0KHt0eXBlOiJhY2NlbnQiLG5hbWVzOlsiXFwnIiwiXFxgIiwiXFxeIiwiXFx+IiwiXFw9IiwiXFx1IiwiXFwuIiwnXFwiJywiXFxjIiwiXFxyIiwiXFxIIiwiXFx2IiwiXFx0ZXh0Y2lyY2xlZCJdLHByb3BzOntudW1BcmdzOjEsYWxsb3dlZEluVGV4dDohMCxhbGxvd2VkSW5NYXRoOiEwLGFyZ1R5cGVzOlsicHJpbWl0aXZlIl19LGhhbmRsZXI6bygodCxlKT0+e3ZhciByPWVbMF0sbj10LnBhcnNlci5tb2RlO3JldHVybiBuPT09Im1hdGgiJiYodC5wYXJzZXIuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KCJtYXRoVnNUZXh0QWNjZW50cyIsIkxhVGVYJ3MgYWNjZW50ICIrdC5mdW5jTmFtZSsiIHdvcmtzIG9ubHkgaW4gdGV4dCBtb2RlIiksbj0idGV4dCIpLHt0eXBlOiJhY2NlbnQiLG1vZGU6bixsYWJlbDp0LmZ1bmNOYW1lLGlzU3RyZXRjaHk6ITEsaXNTaGlmdHk6ITAsYmFzZTpyfX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjp6QyxtYXRobWxCdWlsZGVyOmpHfSk7U3Qoe3R5cGU6ImFjY2VudFVuZGVyIixuYW1lczpbIlxcdW5kZXJsZWZ0YXJyb3ciLCJcXHVuZGVycmlnaHRhcnJvdyIsIlxcdW5kZXJsZWZ0cmlnaHRhcnJvdyIsIlxcdW5kZXJncm91cCIsIlxcdW5kZXJsaW5lc2VnbWVudCIsIlxcdXRpbGRlIl0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQsaT1lWzBdO3JldHVybnt0eXBlOiJhY2NlbnRVbmRlciIsbW9kZTpyLm1vZGUsbGFiZWw6bixiYXNlOml9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj1Qcih0LmJhc2UsZSksbj1tdS5zdmdTcGFuKHQsZSksaT10LmxhYmVsPT09IlxcdXRpbGRlIj8uMTI6MCxhPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJ0b3AiLHBvc2l0aW9uRGF0YTpyLmhlaWdodCxjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06bix3cmFwcGVyQ2xhc3NlczpbInN2Zy1hbGlnbiJdfSx7dHlwZToia2VybiIsc2l6ZTppfSx7dHlwZToiZWxlbSIsZWxlbTpyfV19LGUpO3JldHVybiBGZS5tYWtlU3BhbihbIm1vcmQiLCJhY2NlbnR1bmRlciJdLFthXSxlKX0sImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9bXUubWF0aE1Mbm9kZSh0LmxhYmVsKSxuPW5ldyBhdC5NYXRoTm9kZSgibXVuZGVyIixbeW4odC5iYXNlLGUpLHJdKTtyZXR1cm4gbi5zZXRBdHRyaWJ1dGUoImFjY2VudHVuZGVyIiwidHJ1ZSIpLG59LCJtYXRobWxCdWlsZGVyIil9KTtnND1vKHQ9Pnt2YXIgZT1uZXcgYXQuTWF0aE5vZGUoIm1wYWRkZWQiLHQ/W3RdOltdKTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiKzAuNmVtIiksZS5zZXRBdHRyaWJ1dGUoImxzcGFjZSIsIjAuM2VtIiksZX0sInBhZGRlZE5vZGUiKTtTdCh7dHlwZToieEFycm93IixuYW1lczpbIlxceGxlZnRhcnJvdyIsIlxceHJpZ2h0YXJyb3ciLCJcXHhMZWZ0YXJyb3ciLCJcXHhSaWdodGFycm93IiwiXFx4bGVmdHJpZ2h0YXJyb3ciLCJcXHhMZWZ0cmlnaHRhcnJvdyIsIlxceGhvb2tsZWZ0YXJyb3ciLCJcXHhob29rcmlnaHRhcnJvdyIsIlxceG1hcHN0byIsIlxceHJpZ2h0aGFycG9vbmRvd24iLCJcXHhyaWdodGhhcnBvb251cCIsIlxceGxlZnRoYXJwb29uZG93biIsIlxceGxlZnRoYXJwb29udXAiLCJcXHhyaWdodGxlZnRoYXJwb29ucyIsIlxceGxlZnRyaWdodGhhcnBvb25zIiwiXFx4bG9uZ2VxdWFsIiwiXFx4dHdvaGVhZHJpZ2h0YXJyb3ciLCJcXHh0d29oZWFkbGVmdGFycm93IiwiXFx4dG9mcm9tIiwiXFx4cmlnaHRsZWZ0YXJyb3dzIiwiXFx4cmlnaHRlcXVpbGlicml1bSIsIlxceGxlZnRlcXVpbGlicml1bSIsIlxcXFxjZHJpZ2h0YXJyb3ciLCJcXFxcY2RsZWZ0YXJyb3ciLCJcXFxcY2Rsb25nZXF1YWwiXSxwcm9wczp7bnVtQXJnczoxLG51bU9wdGlvbmFsQXJnczoxfSxoYW5kbGVyKHQsZSxyKXt2YXJ7cGFyc2VyOm4sZnVuY05hbWU6aX09dDtyZXR1cm57dHlwZToieEFycm93Iixtb2RlOm4ubW9kZSxsYWJlbDppLGJvZHk6ZVswXSxiZWxvdzpyWzBdfX0saHRtbEJ1aWxkZXIodCxlKXt2YXIgcj1lLnN0eWxlLG49ZS5oYXZpbmdTdHlsZShyLnN1cCgpKSxpPUZlLndyYXBGcmFnbWVudChQcih0LmJvZHksbixlKSxlKSxhPXQubGFiZWwuc2xpY2UoMCwyKT09PSJcXHgiPyJ4IjoiY2QiO2kuY2xhc3Nlcy5wdXNoKGErIi1hcnJvdy1wYWQiKTt2YXIgczt0LmJlbG93JiYobj1lLmhhdmluZ1N0eWxlKHIuc3ViKCkpLHM9RmUud3JhcEZyYWdtZW50KFByKHQuYmVsb3csbixlKSxlKSxzLmNsYXNzZXMucHVzaChhKyItYXJyb3ctcGFkIikpO3ZhciBsPW11LnN2Z1NwYW4odCxlKSx1PS1lLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCsuNSpsLmhlaWdodCxoPS1lLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodC0uNSpsLmhlaWdodC0uMTExOyhpLmRlcHRoPi4yNXx8dC5sYWJlbD09PSJcXHhsZWZ0ZXF1aWxpYnJpdW0iKSYmKGgtPWkuZGVwdGgpO3ZhciBmO2lmKHMpe3ZhciBkPS1lLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCtzLmhlaWdodCsuNSpsLmhlaWdodCsuMTExO2Y9RmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOmksc2hpZnQ6aH0se3R5cGU6ImVsZW0iLGVsZW06bCxzaGlmdDp1fSx7dHlwZToiZWxlbSIsZWxlbTpzLHNoaWZ0OmR9XX0sZSl9ZWxzZSBmPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTppLHNoaWZ0Omh9LHt0eXBlOiJlbGVtIixlbGVtOmwsc2hpZnQ6dX1dfSxlKTtyZXR1cm4gZi5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jaGlsZHJlblsxXS5jbGFzc2VzLnB1c2goInN2Zy1hbGlnbiIpLEZlLm1ha2VTcGFuKFsibXJlbCIsIngtYXJyb3ciXSxbZl0sZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1tdS5tYXRoTUxub2RlKHQubGFiZWwpO3Iuc2V0QXR0cmlidXRlKCJtaW5zaXplIix0LmxhYmVsLmNoYXJBdCgwKT09PSJ4Ij8iMS43NWVtIjoiMy4wZW0iKTt2YXIgbjtpZih0LmJvZHkpe3ZhciBpPWc0KHluKHQuYm9keSxlKSk7aWYodC5iZWxvdyl7dmFyIGE9ZzQoeW4odC5iZWxvdyxlKSk7bj1uZXcgYXQuTWF0aE5vZGUoIm11bmRlcm92ZXIiLFtyLGEsaV0pfWVsc2Ugbj1uZXcgYXQuTWF0aE5vZGUoIm1vdmVyIixbcixpXSl9ZWxzZSBpZih0LmJlbG93KXt2YXIgcz1nNCh5bih0LmJlbG93LGUpKTtuPW5ldyBhdC5NYXRoTm9kZSgibXVuZGVyIixbcixzXSl9ZWxzZSBuPWc0KCksbj1uZXcgYXQuTWF0aE5vZGUoIm1vdmVyIixbcixuXSk7cmV0dXJuIG59fSk7dTRlPUZlLm1ha2VTcGFuO28oS0csImh0bWxCdWlsZGVyJDkiKTtvKFFHLCJtYXRobWxCdWlsZGVyJDgiKTtTdCh7dHlwZToibWNsYXNzIixuYW1lczpbIlxcbWF0aG9yZCIsIlxcbWF0aGJpbiIsIlxcbWF0aHJlbCIsIlxcbWF0aG9wZW4iLCJcXG1hdGhjbG9zZSIsIlxcbWF0aHB1bmN0IiwiXFxtYXRoaW5uZXIiXSxwcm9wczp7bnVtQXJnczoxLHByaW1pdGl2ZTohMH0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cixmdW5jTmFtZTpufT10LGk9ZVswXTtyZXR1cm57dHlwZToibWNsYXNzIixtb2RlOnIubW9kZSxtY2xhc3M6Im0iK24uc2xpY2UoNSksYm9keTpnaShpKSxpc0NoYXJhY3RlckJveDpKdC5pc0NoYXJhY3RlckJveChpKX19LGh0bWxCdWlsZGVyOktHLG1hdGhtbEJ1aWxkZXI6UUd9KTtSND1vKHQ9Pnt2YXIgZT10LnR5cGU9PT0ib3JkZ3JvdXAiJiZ0LmJvZHkubGVuZ3RoP3QuYm9keVswXTp0O3JldHVybiBlLnR5cGU9PT0iYXRvbSImJihlLmZhbWlseT09PSJiaW4ifHxlLmZhbWlseT09PSJyZWwiKT8ibSIrZS5mYW1pbHk6Im1vcmQifSwiYmlucmVsQ2xhc3MiKTtTdCh7dHlwZToibWNsYXNzIixuYW1lczpbIlxcQGJpbnJlbCJdLHByb3BzOntudW1BcmdzOjJ9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnJ9PXQ7cmV0dXJue3R5cGU6Im1jbGFzcyIsbW9kZTpyLm1vZGUsbWNsYXNzOlI0KGVbMF0pLGJvZHk6Z2koZVsxXSksaXNDaGFyYWN0ZXJCb3g6SnQuaXNDaGFyYWN0ZXJCb3goZVsxXSl9fX0pO1N0KHt0eXBlOiJtY2xhc3MiLG5hbWVzOlsiXFxzdGFja3JlbCIsIlxcb3ZlcnNldCIsIlxcdW5kZXJzZXQiXSxwcm9wczp7bnVtQXJnczoyfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQsaT1lWzFdLGE9ZVswXSxzO24hPT0iXFxzdGFja3JlbCI/cz1SNChpKTpzPSJtcmVsIjt2YXIgbD17dHlwZToib3AiLG1vZGU6aS5tb2RlLGxpbWl0czohMCxhbHdheXNIYW5kbGVTdXBTdWI6ITAscGFyZW50SXNTdXBTdWI6ITEsc3ltYm9sOiExLHN1cHByZXNzQmFzZVNoaWZ0Om4hPT0iXFxzdGFja3JlbCIsYm9keTpnaShpKX0sdT17dHlwZToic3Vwc3ViIixtb2RlOmEubW9kZSxiYXNlOmwsc3VwOm49PT0iXFx1bmRlcnNldCI/bnVsbDphLHN1YjpuPT09IlxcdW5kZXJzZXQiP2E6bnVsbH07cmV0dXJue3R5cGU6Im1jbGFzcyIsbW9kZTpyLm1vZGUsbWNsYXNzOnMsYm9keTpbdV0saXNDaGFyYWN0ZXJCb3g6SnQuaXNDaGFyYWN0ZXJCb3godSl9fSxodG1sQnVpbGRlcjpLRyxtYXRobWxCdWlsZGVyOlFHfSk7U3Qoe3R5cGU6InBtYiIsbmFtZXM6WyJcXHBtYiJdLHByb3BzOntudW1BcmdzOjEsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cn09dDtyZXR1cm57dHlwZToicG1iIixtb2RlOnIubW9kZSxtY2xhc3M6UjQoZVswXSksYm9keTpnaShlWzBdKX19LGh0bWxCdWlsZGVyKHQsZSl7dmFyIHI9RmkodC5ib2R5LGUsITApLG49RmUubWFrZVNwYW4oW3QubWNsYXNzXSxyLGUpO3JldHVybiBuLnN0eWxlLnRleHRTaGFkb3c9IjAuMDJlbSAwLjAxZW0gMC4wNHB4IixufSxtYXRobWxCdWlsZGVyKHQsZSl7dmFyIHI9U3ModC5ib2R5LGUpLG49bmV3IGF0Lk1hdGhOb2RlKCJtc3R5bGUiLHIpO3JldHVybiBuLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJ0ZXh0LXNoYWRvdzogMC4wMmVtIDAuMDFlbSAwLjA0cHgiKSxufX0pO2g0ZT17Ij4iOiJcXFxcY2RyaWdodGFycm93IiwiPCI6IlxcXFxjZGxlZnRhcnJvdyIsIj0iOiJcXFxcY2Rsb25nZXF1YWwiLEE6IlxcdXBhcnJvdyIsVjoiXFxkb3duYXJyb3ciLCJ8IjoiXFxWZXJ0IiwiLiI6Im5vIGFycm93In0sZkc9bygoKT0+KHt0eXBlOiJzdHlsaW5nIixib2R5OltdLG1vZGU6Im1hdGgiLHN0eWxlOiJkaXNwbGF5In0pLCJuZXdDZWxsIiksZEc9byh0PT50LnR5cGU9PT0idGV4dG9yZCImJnQudGV4dD09PSJAIiwiaXNTdGFydE9mQXJyb3ciKSxmNGU9bygodCxlKT0+KHQudHlwZT09PSJtYXRob3JkInx8dC50eXBlPT09ImF0b20iKSYmdC50ZXh0PT09ZSwiaXNMYWJlbEVuZCIpO28oZDRlLCJjZEFycm93Iik7byhwNGUsInBhcnNlQ0QiKTtTdCh7dHlwZToiY2RsYWJlbCIsbmFtZXM6WyJcXFxcY2RsZWZ0IiwiXFxcXGNkcmlnaHQiXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQ7cmV0dXJue3R5cGU6ImNkbGFiZWwiLG1vZGU6ci5tb2RlLHNpZGU6bi5zbGljZSg0KSxsYWJlbDplWzBdfX0saHRtbEJ1aWxkZXIodCxlKXt2YXIgcj1lLmhhdmluZ1N0eWxlKGUuc3R5bGUuc3VwKCkpLG49RmUud3JhcEZyYWdtZW50KFByKHQubGFiZWwscixlKSxlKTtyZXR1cm4gbi5jbGFzc2VzLnB1c2goImNkLWxhYmVsLSIrdC5zaWRlKSxuLnN0eWxlLmJvdHRvbT1ndCguOC1uLmRlcHRoKSxuLmhlaWdodD0wLG4uZGVwdGg9MCxufSxtYXRobWxCdWlsZGVyKHQsZSl7dmFyIHI9bmV3IGF0Lk1hdGhOb2RlKCJtcm93IixbeW4odC5sYWJlbCxlKV0pO3JldHVybiByPW5ldyBhdC5NYXRoTm9kZSgibXBhZGRlZCIsW3JdKSxyLnNldEF0dHJpYnV0ZSgid2lkdGgiLCIwIiksdC5zaWRlPT09ImxlZnQiJiZyLnNldEF0dHJpYnV0ZSgibHNwYWNlIiwiLTF3aWR0aCIpLHIuc2V0QXR0cmlidXRlKCJ2b2Zmc2V0IiwiMC43ZW0iKSxyPW5ldyBhdC5NYXRoTm9kZSgibXN0eWxlIixbcl0pLHIuc2V0QXR0cmlidXRlKCJkaXNwbGF5c3R5bGUiLCJmYWxzZSIpLHIuc2V0QXR0cmlidXRlKCJzY3JpcHRsZXZlbCIsIjEiKSxyfX0pO1N0KHt0eXBlOiJjZGxhYmVscGFyZW50IixuYW1lczpbIlxcXFxjZHBhcmVudCJdLHByb3BzOntudW1BcmdzOjF9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnJ9PXQ7cmV0dXJue3R5cGU6ImNkbGFiZWxwYXJlbnQiLG1vZGU6ci5tb2RlLGZyYWdtZW50OmVbMF19fSxodG1sQnVpbGRlcih0LGUpe3ZhciByPUZlLndyYXBGcmFnbWVudChQcih0LmZyYWdtZW50LGUpLGUpO3JldHVybiByLmNsYXNzZXMucHVzaCgiY2QtdmVydC1hcnJvdyIpLHJ9LG1hdGhtbEJ1aWxkZXIodCxlKXtyZXR1cm4gbmV3IGF0Lk1hdGhOb2RlKCJtcm93IixbeW4odC5mcmFnbWVudCxlKV0pfX0pO1N0KHt0eXBlOiJ0ZXh0b3JkIixuYW1lczpbIlxcQGNoYXIiXSxwcm9wczp7bnVtQXJnczoxLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXIodCxlKXtmb3IodmFye3BhcnNlcjpyfT10LG49Z3IoZVswXSwib3JkZ3JvdXAiKSxpPW4uYm9keSxhPSIiLHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGw9Z3IoaVtzXSwidGV4dG9yZCIpO2ErPWwudGV4dH12YXIgdT1wYXJzZUludChhKSxoO2lmKGlzTmFOKHUpKXRocm93IG5ldyBsdCgiXFxAY2hhciBoYXMgbm9uLW51bWVyaWMgYXJndW1lbnQgIithKTtpZih1PDB8fHU+PTExMTQxMTEpdGhyb3cgbmV3IGx0KCJcXEBjaGFyIHdpdGggaW52YWxpZCBjb2RlIHBvaW50ICIrYSk7cmV0dXJuIHU8PTY1NTM1P2g9U3RyaW5nLmZyb21DaGFyQ29kZSh1KToodS09NjU1MzYsaD1TdHJpbmcuZnJvbUNoYXJDb2RlKCh1Pj4xMCkrNTUyOTYsKHUmMTAyMykrNTYzMjApKSx7dHlwZToidGV4dG9yZCIsbW9kZTpyLm1vZGUsdGV4dDpofX19KTtaRz1vKCh0LGUpPT57dmFyIHI9RmkodC5ib2R5LGUud2l0aENvbG9yKHQuY29sb3IpLCExKTtyZXR1cm4gRmUubWFrZUZyYWdtZW50KHIpfSwiaHRtbEJ1aWxkZXIkOCIpLEpHPW8oKHQsZSk9Pnt2YXIgcj1Tcyh0LmJvZHksZS53aXRoQ29sb3IodC5jb2xvcikpLG49bmV3IGF0Lk1hdGhOb2RlKCJtc3R5bGUiLHIpO3JldHVybiBuLnNldEF0dHJpYnV0ZSgibWF0aGNvbG9yIix0LmNvbG9yKSxufSwibWF0aG1sQnVpbGRlciQ3Iik7U3Qoe3R5cGU6ImNvbG9yIixuYW1lczpbIlxcdGV4dGNvbG9yIl0scHJvcHM6e251bUFyZ3M6MixhbGxvd2VkSW5UZXh0OiEwLGFyZ1R5cGVzOlsiY29sb3IiLCJvcmlnaW5hbCJdfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyfT10LG49Z3IoZVswXSwiY29sb3ItdG9rZW4iKS5jb2xvcixpPWVbMV07cmV0dXJue3R5cGU6ImNvbG9yIixtb2RlOnIubW9kZSxjb2xvcjpuLGJvZHk6Z2koaSl9fSxodG1sQnVpbGRlcjpaRyxtYXRobWxCdWlsZGVyOkpHfSk7U3Qoe3R5cGU6ImNvbG9yIixuYW1lczpbIlxcY29sb3IiXSxwcm9wczp7bnVtQXJnczoxLGFsbG93ZWRJblRleHQ6ITAsYXJnVHlwZXM6WyJjb2xvciJdfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyLGJyZWFrT25Ub2tlblRleHQ6bn09dCxpPWdyKGVbMF0sImNvbG9yLXRva2VuIikuY29sb3I7ci5ndWxsZXQubWFjcm9zLnNldCgiXFxjdXJyZW50QGNvbG9yIixpKTt2YXIgYT1yLnBhcnNlRXhwcmVzc2lvbighMCxuKTtyZXR1cm57dHlwZToiY29sb3IiLG1vZGU6ci5tb2RlLGNvbG9yOmksYm9keTphfX0saHRtbEJ1aWxkZXI6WkcsbWF0aG1sQnVpbGRlcjpKR30pO1N0KHt0eXBlOiJjciIsbmFtZXM6WyJcXFxcIl0scHJvcHM6e251bUFyZ3M6MCxudW1PcHRpb25hbEFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKHQsZSxyKXt2YXJ7cGFyc2VyOm59PXQsaT1uLmd1bGxldC5mdXR1cmUoKS50ZXh0PT09IlsiP24ucGFyc2VTaXplR3JvdXAoITApOm51bGwsYT0hbi5zZXR0aW5ncy5kaXNwbGF5TW9kZXx8IW4uc2V0dGluZ3MudXNlU3RyaWN0QmVoYXZpb3IoIm5ld0xpbmVJbkRpc3BsYXlNb2RlIiwiSW4gTGFUZVgsIFxcXFwgb3IgXFxuZXdsaW5lIGRvZXMgbm90aGluZyBpbiBkaXNwbGF5IG1vZGUiKTtyZXR1cm57dHlwZToiY3IiLG1vZGU6bi5tb2RlLG5ld0xpbmU6YSxzaXplOmkmJmdyKGksInNpemUiKS52YWx1ZX19LGh0bWxCdWlsZGVyKHQsZSl7dmFyIHI9RmUubWFrZVNwYW4oWyJtc3BhY2UiXSxbXSxlKTtyZXR1cm4gdC5uZXdMaW5lJiYoci5jbGFzc2VzLnB1c2goIm5ld2xpbmUiKSx0LnNpemUmJihyLnN0eWxlLm1hcmdpblRvcD1ndChKbih0LnNpemUsZSkpKSkscn0sbWF0aG1sQnVpbGRlcih0LGUpe3ZhciByPW5ldyBhdC5NYXRoTm9kZSgibXNwYWNlIik7cmV0dXJuIHQubmV3TGluZSYmKHIuc2V0QXR0cmlidXRlKCJsaW5lYnJlYWsiLCJuZXdsaW5lIiksdC5zaXplJiZyLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixndChKbih0LnNpemUsZSkpKSkscn19KTtfQz17IlxcZ2xvYmFsIjoiXFxnbG9iYWwiLCJcXGxvbmciOiJcXFxcZ2xvYmFsbG9uZyIsIlxcXFxnbG9iYWxsb25nIjoiXFxcXGdsb2JhbGxvbmciLCJcXGRlZiI6IlxcZ2RlZiIsIlxcZ2RlZiI6IlxcZ2RlZiIsIlxcZWRlZiI6IlxceGRlZiIsIlxceGRlZiI6IlxceGRlZiIsIlxcbGV0IjoiXFxcXGdsb2JhbGxldCIsIlxcZnV0dXJlbGV0IjoiXFxcXGdsb2JhbGZ1dHVyZSJ9LGUkPW8odD0+e3ZhciBlPXQudGV4dDtpZigvXig/OltcXHt9JCYjXl9dfEVPRikkLy50ZXN0KGUpKXRocm93IG5ldyBsdCgiRXhwZWN0ZWQgYSBjb250cm9sIHNlcXVlbmNlIix0KTtyZXR1cm4gZX0sImNoZWNrQ29udHJvbFNlcXVlbmNlIiksbTRlPW8odD0+e3ZhciBlPXQuZ3VsbGV0LnBvcFRva2VuKCk7cmV0dXJuIGUudGV4dD09PSI9IiYmKGU9dC5ndWxsZXQucG9wVG9rZW4oKSxlLnRleHQ9PT0iICImJihlPXQuZ3VsbGV0LnBvcFRva2VuKCkpKSxlfSwiZ2V0UkhTIiksdCQ9bygodCxlLHIsbik9Pnt2YXIgaT10Lmd1bGxldC5tYWNyb3MuZ2V0KHIudGV4dCk7aT09bnVsbCYmKHIubm9leHBhbmQ9ITAsaT17dG9rZW5zOltyXSxudW1BcmdzOjAsdW5leHBhbmRhYmxlOiF0Lmd1bGxldC5pc0V4cGFuZGFibGUoci50ZXh0KX0pLHQuZ3VsbGV0Lm1hY3Jvcy5zZXQoZSxpLG4pfSwibGV0Q29tbWFuZCIpO1N0KHt0eXBlOiJpbnRlcm5hbCIsbmFtZXM6WyJcXGdsb2JhbCIsIlxcbG9uZyIsIlxcXFxnbG9iYWxsb25nIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKHQpe3ZhcntwYXJzZXI6ZSxmdW5jTmFtZTpyfT10O2UuY29uc3VtZVNwYWNlcygpO3ZhciBuPWUuZmV0Y2goKTtpZihfQ1tuLnRleHRdKXJldHVybihyPT09IlxcZ2xvYmFsInx8cj09PSJcXFxcZ2xvYmFsbG9uZyIpJiYobi50ZXh0PV9DW24udGV4dF0pLGdyKGUucGFyc2VGdW5jdGlvbigpLCJpbnRlcm5hbCIpO3Rocm93IG5ldyBsdCgiSW52YWxpZCB0b2tlbiBhZnRlciBtYWNybyBwcmVmaXgiLG4pfX0pO1N0KHt0eXBlOiJpbnRlcm5hbCIsbmFtZXM6WyJcXGRlZiIsIlxcZ2RlZiIsIlxcZWRlZiIsIlxceGRlZiJdLHByb3BzOntudW1BcmdzOjAsYWxsb3dlZEluVGV4dDohMCxwcmltaXRpdmU6ITB9LGhhbmRsZXIodCl7dmFye3BhcnNlcjplLGZ1bmNOYW1lOnJ9PXQsbj1lLmd1bGxldC5wb3BUb2tlbigpLGk9bi50ZXh0O2lmKC9eKD86W1xce30kJiNeX118RU9GKSQvLnRlc3QoaSkpdGhyb3cgbmV3IGx0KCJFeHBlY3RlZCBhIGNvbnRyb2wgc2VxdWVuY2UiLG4pO2Zvcih2YXIgYT0wLHMsbD1bW11dO2UuZ3VsbGV0LmZ1dHVyZSgpLnRleHQhPT0ieyI7KWlmKG49ZS5ndWxsZXQucG9wVG9rZW4oKSxuLnRleHQ9PT0iIyIpe2lmKGUuZ3VsbGV0LmZ1dHVyZSgpLnRleHQ9PT0ieyIpe3M9ZS5ndWxsZXQuZnV0dXJlKCksbFthXS5wdXNoKCJ7Iik7YnJlYWt9aWYobj1lLmd1bGxldC5wb3BUb2tlbigpLCEvXlsxLTldJC8udGVzdChuLnRleHQpKXRocm93IG5ldyBsdCgnSW52YWxpZCBhcmd1bWVudCBudW1iZXIgIicrbi50ZXh0KyciJyk7aWYocGFyc2VJbnQobi50ZXh0KSE9PWErMSl0aHJvdyBuZXcgbHQoJ0FyZ3VtZW50IG51bWJlciAiJytuLnRleHQrJyIgb3V0IG9mIG9yZGVyJyk7YSsrLGwucHVzaChbXSl9ZWxzZXtpZihuLnRleHQ9PT0iRU9GIil0aHJvdyBuZXcgbHQoIkV4cGVjdGVkIGEgbWFjcm8gZGVmaW5pdGlvbiIpO2xbYV0ucHVzaChuLnRleHQpfXZhcnt0b2tlbnM6dX09ZS5ndWxsZXQuY29uc3VtZUFyZygpO3JldHVybiBzJiZ1LnVuc2hpZnQocyksKHI9PT0iXFxlZGVmInx8cj09PSJcXHhkZWYiKSYmKHU9ZS5ndWxsZXQuZXhwYW5kVG9rZW5zKHUpLHUucmV2ZXJzZSgpKSxlLmd1bGxldC5tYWNyb3Muc2V0KGkse3Rva2Vuczp1LG51bUFyZ3M6YSxkZWxpbWl0ZXJzOmx9LHI9PT1fQ1tyXSkse3R5cGU6ImludGVybmFsIixtb2RlOmUubW9kZX19fSk7U3Qoe3R5cGU6ImludGVybmFsIixuYW1lczpbIlxcbGV0IiwiXFxcXGdsb2JhbGxldCJdLHByb3BzOntudW1BcmdzOjAsYWxsb3dlZEluVGV4dDohMCxwcmltaXRpdmU6ITB9LGhhbmRsZXIodCl7dmFye3BhcnNlcjplLGZ1bmNOYW1lOnJ9PXQsbj1lJChlLmd1bGxldC5wb3BUb2tlbigpKTtlLmd1bGxldC5jb25zdW1lU3BhY2VzKCk7dmFyIGk9bTRlKGUpO3JldHVybiB0JChlLG4saSxyPT09IlxcXFxnbG9iYWxsZXQiKSx7dHlwZToiaW50ZXJuYWwiLG1vZGU6ZS5tb2RlfX19KTtTdCh7dHlwZToiaW50ZXJuYWwiLG5hbWVzOlsiXFxmdXR1cmVsZXQiLCJcXFxcZ2xvYmFsZnV0dXJlIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwLHByaW1pdGl2ZTohMH0saGFuZGxlcih0KXt2YXJ7cGFyc2VyOmUsZnVuY05hbWU6cn09dCxuPWUkKGUuZ3VsbGV0LnBvcFRva2VuKCkpLGk9ZS5ndWxsZXQucG9wVG9rZW4oKSxhPWUuZ3VsbGV0LnBvcFRva2VuKCk7cmV0dXJuIHQkKGUsbixhLHI9PT0iXFxcXGdsb2JhbGZ1dHVyZSIpLGUuZ3VsbGV0LnB1c2hUb2tlbihhKSxlLmd1bGxldC5wdXNoVG9rZW4oaSkse3R5cGU6ImludGVybmFsIixtb2RlOmUubW9kZX19fSk7aHk9byhmdW5jdGlvbihlLHIsbil7dmFyIGk9Q24ubWF0aFtlXSYmQ24ubWF0aFtlXS5yZXBsYWNlLGE9SUMoaXx8ZSxyLG4pO2lmKCFhKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc3ltYm9sICIrZSsiIGFuZCBmb250IHNpemUgIityKyIuIik7cmV0dXJuIGF9LCJnZXRNZXRyaWNzIiksR0M9byhmdW5jdGlvbihlLHIsbixpKXt2YXIgYT1uLmhhdmluZ0Jhc2VTdHlsZShyKSxzPUZlLm1ha2VTcGFuKGkuY29uY2F0KGEuc2l6aW5nQ2xhc3NlcyhuKSksW2VdLG4pLGw9YS5zaXplTXVsdGlwbGllci9uLnNpemVNdWx0aXBsaWVyO3JldHVybiBzLmhlaWdodCo9bCxzLmRlcHRoKj1sLHMubWF4Rm9udFNpemU9YS5zaXplTXVsdGlwbGllcixzfSwic3R5bGVXcmFwIiksciQ9byhmdW5jdGlvbihlLHIsbil7dmFyIGk9ci5oYXZpbmdCYXNlU3R5bGUobiksYT0oMS1yLnNpemVNdWx0aXBsaWVyL2kuc2l6ZU11bHRpcGxpZXIpKnIuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O2UuY2xhc3Nlcy5wdXNoKCJkZWxpbWNlbnRlciIpLGUuc3R5bGUudG9wPWd0KGEpLGUuaGVpZ2h0LT1hLGUuZGVwdGgrPWF9LCJjZW50ZXJTcGFuIiksZzRlPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMpe3ZhciBsPUZlLm1ha2VTeW1ib2woZSwiTWFpbi1SZWd1bGFyIixhLGkpLHU9R0MobCxyLGkscyk7cmV0dXJuIG4mJnIkKHUsaSxyKSx1fSwibWFrZVNtYWxsRGVsaW0iKSx5NGU9byhmdW5jdGlvbihlLHIsbixpKXtyZXR1cm4gRmUubWFrZVN5bWJvbChlLCJTaXplIityKyItUmVndWxhciIsbixpKX0sIm1hdGhybVNpemUiKSxuJD1vKGZ1bmN0aW9uKGUscixuLGksYSxzKXt2YXIgbD15NGUoZSxyLGEsaSksdT1HQyhGZS5tYWtlU3BhbihbImRlbGltc2l6aW5nIiwic2l6ZSIrcl0sW2xdLGkpLHJyLlRFWFQsaSxzKTtyZXR1cm4gbiYmciQodSxpLHJyLlRFWFQpLHV9LCJtYWtlTGFyZ2VEZWxpbSIpLGZDPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpO3I9PT0iU2l6ZTEtUmVndWxhciI/aT0iZGVsaW0tc2l6ZTEiOmk9ImRlbGltLXNpemU0Ijt2YXIgYT1GZS5tYWtlU3BhbihbImRlbGltc2l6aW5naW5uZXIiLGldLFtGZS5tYWtlU3BhbihbXSxbRmUubWFrZVN5bWJvbChlLHIsbildKV0pO3JldHVybnt0eXBlOiJlbGVtIixlbGVtOmF9fSwibWFrZUdseXBoU3BhbiIpLGRDPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWxjWyJTaXplNC1SZWd1bGFyIl1bZS5jaGFyQ29kZUF0KDApXT9sY1siU2l6ZTQtUmVndWxhciJdW2UuY2hhckNvZGVBdCgwKV1bNF06bGNbIlNpemUxLVJlZ3VsYXIiXVtlLmNoYXJDb2RlQXQoMCldWzRdLGE9bmV3IGNjKCJpbm5lciIsU2JlKGUsTWF0aC5yb3VuZCgxZTMqcikpKSxzPW5ldyB2bChbYV0se3dpZHRoOmd0KGkpLGhlaWdodDpndChyKSxzdHlsZToid2lkdGg6IitndChpKSx2aWV3Qm94OiIwIDAgIisxZTMqaSsiICIrTWF0aC5yb3VuZCgxZTMqcikscHJlc2VydmVBc3BlY3RSYXRpbzoieE1pbllNaW4ifSksbD1GZS5tYWtlU3ZnU3BhbihbXSxbc10sbik7cmV0dXJuIGwuaGVpZ2h0PXIsbC5zdHlsZS5oZWlnaHQ9Z3QociksbC5zdHlsZS53aWR0aD1ndChpKSx7dHlwZToiZWxlbSIsZWxlbTpsfX0sIm1ha2VJbm5lciIpLExDPS4wMDgseTQ9e3R5cGU6Imtlcm4iLHNpemU6LTEqTEN9LHY0ZT1bInwiLCJcXGx2ZXJ0IiwiXFxydmVydCIsIlxcdmVydCJdLHg0ZT1bIlxcfCIsIlxcbFZlcnQiLCJcXHJWZXJ0IiwiXFxWZXJ0Il0saSQ9byhmdW5jdGlvbihlLHIsbixpLGEscyl7dmFyIGwsdSxoLGYsZD0iIixwPTA7bD1oPWY9ZSx1PW51bGw7dmFyIG09IlNpemUxLVJlZ3VsYXIiO2U9PT0iXFx1cGFycm93Ij9oPWY9Ilx1MjNEMCI6ZT09PSJcXFVwYXJyb3ciP2g9Zj0iXHUyMDE2IjplPT09IlxcZG93bmFycm93Ij9sPWg9Ilx1MjNEMCI6ZT09PSJcXERvd25hcnJvdyI/bD1oPSJcdTIwMTYiOmU9PT0iXFx1cGRvd25hcnJvdyI/KGw9IlxcdXBhcnJvdyIsaD0iXHUyM0QwIixmPSJcXGRvd25hcnJvdyIpOmU9PT0iXFxVcGRvd25hcnJvdyI/KGw9IlxcVXBhcnJvdyIsaD0iXHUyMDE2IixmPSJcXERvd25hcnJvdyIpOkp0LmNvbnRhaW5zKHY0ZSxlKT8oaD0iXHUyMjIzIixkPSJ2ZXJ0IixwPTMzMyk6SnQuY29udGFpbnMoeDRlLGUpPyhoPSJcdTIyMjUiLGQ9ImRvdWJsZXZlcnQiLHA9NTU2KTplPT09IlsifHxlPT09IlxcbGJyYWNrIj8obD0iXHUyM0ExIixoPSJcdTIzQTIiLGY9Ilx1MjNBMyIsbT0iU2l6ZTQtUmVndWxhciIsZD0ibGJyYWNrIixwPTY2Nyk6ZT09PSJdInx8ZT09PSJcXHJicmFjayI/KGw9Ilx1MjNBNCIsaD0iXHUyM0E1IixmPSJcdTIzQTYiLG09IlNpemU0LVJlZ3VsYXIiLGQ9InJicmFjayIscD02NjcpOmU9PT0iXFxsZmxvb3IifHxlPT09Ilx1MjMwQSI/KGg9bD0iXHUyM0EyIixmPSJcdTIzQTMiLG09IlNpemU0LVJlZ3VsYXIiLGQ9ImxmbG9vciIscD02NjcpOmU9PT0iXFxsY2VpbCJ8fGU9PT0iXHUyMzA4Ij8obD0iXHUyM0ExIixoPWY9Ilx1MjNBMiIsbT0iU2l6ZTQtUmVndWxhciIsZD0ibGNlaWwiLHA9NjY3KTplPT09IlxccmZsb29yInx8ZT09PSJcdTIzMEIiPyhoPWw9Ilx1MjNBNSIsZj0iXHUyM0E2IixtPSJTaXplNC1SZWd1bGFyIixkPSJyZmxvb3IiLHA9NjY3KTplPT09IlxccmNlaWwifHxlPT09Ilx1MjMwOSI/KGw9Ilx1MjNBNCIsaD1mPSJcdTIzQTUiLG09IlNpemU0LVJlZ3VsYXIiLGQ9InJjZWlsIixwPTY2Nyk6ZT09PSIoInx8ZT09PSJcXGxwYXJlbiI/KGw9Ilx1MjM5QiIsaD0iXHUyMzlDIixmPSJcdTIzOUQiLG09IlNpemU0LVJlZ3VsYXIiLGQ9ImxwYXJlbiIscD04NzUpOmU9PT0iKSJ8fGU9PT0iXFxycGFyZW4iPyhsPSJcdTIzOUUiLGg9Ilx1MjM5RiIsZj0iXHUyM0EwIixtPSJTaXplNC1SZWd1bGFyIixkPSJycGFyZW4iLHA9ODc1KTplPT09IlxceyJ8fGU9PT0iXFxsYnJhY2UiPyhsPSJcdTIzQTciLHU9Ilx1MjNBOCIsZj0iXHUyM0E5IixoPSJcdTIzQUEiLG09IlNpemU0LVJlZ3VsYXIiKTplPT09IlxcfSJ8fGU9PT0iXFxyYnJhY2UiPyhsPSJcdTIzQUIiLHU9Ilx1MjNBQyIsZj0iXHUyM0FEIixoPSJcdTIzQUEiLG09IlNpemU0LVJlZ3VsYXIiKTplPT09IlxcbGdyb3VwInx8ZT09PSJcdTI3RUUiPyhsPSJcdTIzQTciLGY9Ilx1MjNBOSIsaD0iXHUyM0FBIixtPSJTaXplNC1SZWd1bGFyIik6ZT09PSJcXHJncm91cCJ8fGU9PT0iXHUyN0VGIj8obD0iXHUyM0FCIixmPSJcdTIzQUQiLGg9Ilx1MjNBQSIsbT0iU2l6ZTQtUmVndWxhciIpOmU9PT0iXFxsbW91c3RhY2hlInx8ZT09PSJcdTIzQjAiPyhsPSJcdTIzQTciLGY9Ilx1MjNBRCIsaD0iXHUyM0FBIixtPSJTaXplNC1SZWd1bGFyIik6KGU9PT0iXFxybW91c3RhY2hlInx8ZT09PSJcdTIzQjEiKSYmKGw9Ilx1MjNBQiIsZj0iXHUyM0E5IixoPSJcdTIzQUEiLG09IlNpemU0LVJlZ3VsYXIiKTt2YXIgZz1oeShsLG0sYSkseT1nLmhlaWdodCtnLmRlcHRoLHY9aHkoaCxtLGEpLHg9di5oZWlnaHQrdi5kZXB0aCxiPWh5KGYsbSxhKSx3PWIuaGVpZ2h0K2IuZGVwdGgsXz0wLFQ9MTtpZih1IT09bnVsbCl7dmFyIEU9aHkodSxtLGEpO189RS5oZWlnaHQrRS5kZXB0aCxUPTJ9dmFyIEw9eSt3K18sUz1NYXRoLm1heCgwLE1hdGguY2VpbCgoci1MKS8oVCp4KSkpLEE9TCtTKlQqeCxJPWkuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0O24mJihJKj1pLnNpemVNdWx0aXBsaWVyKTt2YXIgRD1BLzItSSxrPVtdO2lmKGQubGVuZ3RoPjApe3ZhciBSPUEteS13LEM9TWF0aC5yb3VuZChBKjFlMyksTz1DYmUoZCxNYXRoLnJvdW5kKFIqMWUzKSksTj1uZXcgY2MoZCxPKSxQPShwLzFlMykudG9GaXhlZCgzKSsiZW0iLEY9KEMvMWUzKS50b0ZpeGVkKDMpKyJlbSIsQj1uZXcgdmwoW05dLHt3aWR0aDpQLGhlaWdodDpGLHZpZXdCb3g6IjAgMCAiK3ArIiAiK0N9KSxHPUZlLm1ha2VTdmdTcGFuKFtdLFtCXSxpKTtHLmhlaWdodD1DLzFlMyxHLnN0eWxlLndpZHRoPVAsRy5zdHlsZS5oZWlnaHQ9RixrLnB1c2goe3R5cGU6ImVsZW0iLGVsZW06R30pfWVsc2V7aWYoay5wdXNoKGZDKGYsbSxhKSksay5wdXNoKHk0KSx1PT09bnVsbCl7dmFyIHo9QS15LXcrMipMQztrLnB1c2goZEMoaCx6LGkpKX1lbHNle3ZhciBXPShBLXktdy1fKS8yKzIqTEM7ay5wdXNoKGRDKGgsVyxpKSksay5wdXNoKHk0KSxrLnB1c2goZkModSxtLGEpKSxrLnB1c2goeTQpLGsucHVzaChkQyhoLFcsaSkpfWsucHVzaCh5NCksay5wdXNoKGZDKGwsbSxhKSl9dmFyIFo9aS5oYXZpbmdCYXNlU3R5bGUocnIuVEVYVCksaj1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiYm90dG9tIixwb3NpdGlvbkRhdGE6RCxjaGlsZHJlbjprfSxaKTtyZXR1cm4gR0MoRmUubWFrZVNwYW4oWyJkZWxpbXNpemluZyIsIm11bHQiXSxbal0sWikscnIuVEVYVCxpLHMpfSwibWFrZVN0YWNrZWREZWxpbSIpLHBDPTgwLG1DPS4wOCxnQz1vKGZ1bmN0aW9uKGUscixuLGksYSl7dmFyIHM9RWJlKGUsaSxuKSxsPW5ldyBjYyhlLHMpLHU9bmV3IHZsKFtsXSx7d2lkdGg6IjQwMGVtIixoZWlnaHQ6Z3Qociksdmlld0JveDoiMCAwIDQwMDAwMCAiK24scHJlc2VydmVBc3BlY3RSYXRpbzoieE1pbllNaW4gc2xpY2UifSk7cmV0dXJuIEZlLm1ha2VTdmdTcGFuKFsiaGlkZS10YWlsIl0sW3VdLGEpfSwic3FydFN2ZyIpLGI0ZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49ci5oYXZpbmdCYXNlU2l6aW5nKCksaT1sJCgiXFxzdXJkIixlKm4uc2l6ZU11bHRpcGxpZXIsbyQsbiksYT1uLnNpemVNdWx0aXBsaWVyLHM9TWF0aC5tYXgoMCxyLm1pblJ1bGVUaGlja25lc3Mtci5mb250TWV0cmljcygpLnNxcnRSdWxlVGhpY2tuZXNzKSxsLHU9MCxoPTAsZj0wLGQ7cmV0dXJuIGkudHlwZT09PSJzbWFsbCI/KGY9MWUzKzFlMypzK3BDLGU8MT9hPTE6ZTwxLjQmJihhPS43KSx1PSgxK3MrbUMpL2EsaD0oMStzKS9hLGw9Z0MoInNxcnRNYWluIix1LGYscyxyKSxsLnN0eWxlLm1pbldpZHRoPSIwLjg1M2VtIixkPS44MzMvYSk6aS50eXBlPT09ImxhcmdlIj8oZj0oMWUzK3BDKSpmeVtpLnNpemVdLGg9KGZ5W2kuc2l6ZV0rcykvYSx1PShmeVtpLnNpemVdK3MrbUMpL2EsbD1nQygic3FydFNpemUiK2kuc2l6ZSx1LGYscyxyKSxsLnN0eWxlLm1pbldpZHRoPSIxLjAyZW0iLGQ9MS9hKToodT1lK3MrbUMsaD1lK3MsZj1NYXRoLmZsb29yKDFlMyplK3MpK3BDLGw9Z0MoInNxcnRUYWxsIix1LGYscyxyKSxsLnN0eWxlLm1pbldpZHRoPSIwLjc0MmVtIixkPTEuMDU2KSxsLmhlaWdodD1oLGwuc3R5bGUuaGVpZ2h0PWd0KHUpLHtzcGFuOmwsYWR2YW5jZVdpZHRoOmQscnVsZVdpZHRoOihyLmZvbnRNZXRyaWNzKCkuc3FydFJ1bGVUaGlja25lc3MrcykqYX19LCJtYWtlU3FydEltYWdlIiksYSQ9WyIoIiwiXFxscGFyZW4iLCIpIiwiXFxycGFyZW4iLCJbIiwiXFxsYnJhY2siLCJdIiwiXFxyYnJhY2siLCJcXHsiLCJcXGxicmFjZSIsIlxcfSIsIlxccmJyYWNlIiwiXFxsZmxvb3IiLCJcXHJmbG9vciIsIlx1MjMwQSIsIlx1MjMwQiIsIlxcbGNlaWwiLCJcXHJjZWlsIiwiXHUyMzA4IiwiXHUyMzA5IiwiXFxzdXJkIl0sdzRlPVsiXFx1cGFycm93IiwiXFxkb3duYXJyb3ciLCJcXHVwZG93bmFycm93IiwiXFxVcGFycm93IiwiXFxEb3duYXJyb3ciLCJcXFVwZG93bmFycm93IiwifCIsIlxcfCIsIlxcdmVydCIsIlxcVmVydCIsIlxcbHZlcnQiLCJcXHJ2ZXJ0IiwiXFxsVmVydCIsIlxcclZlcnQiLCJcXGxncm91cCIsIlxccmdyb3VwIiwiXHUyN0VFIiwiXHUyN0VGIiwiXFxsbW91c3RhY2hlIiwiXFxybW91c3RhY2hlIiwiXHUyM0IwIiwiXHUyM0IxIl0scyQ9WyI8IiwiPiIsIlxcbGFuZ2xlIiwiXFxyYW5nbGUiLCIvIiwiXFxiYWNrc2xhc2giLCJcXGx0IiwiXFxndCJdLGZ5PVswLDEuMiwxLjgsMi40LDNdLFQ0ZT1vKGZ1bmN0aW9uKGUscixuLGksYSl7aWYoZT09PSI8Inx8ZT09PSJcXGx0Inx8ZT09PSJcdTI3RTgiP2U9IlxcbGFuZ2xlIjooZT09PSI+Inx8ZT09PSJcXGd0Inx8ZT09PSJcdTI3RTkiKSYmKGU9IlxccmFuZ2xlIiksSnQuY29udGFpbnMoYSQsZSl8fEp0LmNvbnRhaW5zKHMkLGUpKXJldHVybiBuJChlLHIsITEsbixpLGEpO2lmKEp0LmNvbnRhaW5zKHc0ZSxlKSlyZXR1cm4gaSQoZSxmeVtyXSwhMSxuLGksYSk7dGhyb3cgbmV3IGx0KCJJbGxlZ2FsIGRlbGltaXRlcjogJyIrZSsiJyIpfSwibWFrZVNpemVkRGVsaW0iKSxrNGU9W3t0eXBlOiJzbWFsbCIsc3R5bGU6cnIuU0NSSVBUU0NSSVBUfSx7dHlwZToic21hbGwiLHN0eWxlOnJyLlNDUklQVH0se3R5cGU6InNtYWxsIixzdHlsZTpyci5URVhUfSx7dHlwZToibGFyZ2UiLHNpemU6MX0se3R5cGU6ImxhcmdlIixzaXplOjJ9LHt0eXBlOiJsYXJnZSIsc2l6ZTozfSx7dHlwZToibGFyZ2UiLHNpemU6NH1dLEU0ZT1be3R5cGU6InNtYWxsIixzdHlsZTpyci5TQ1JJUFRTQ1JJUFR9LHt0eXBlOiJzbWFsbCIsc3R5bGU6cnIuU0NSSVBUfSx7dHlwZToic21hbGwiLHN0eWxlOnJyLlRFWFR9LHt0eXBlOiJzdGFjayJ9XSxvJD1be3R5cGU6InNtYWxsIixzdHlsZTpyci5TQ1JJUFRTQ1JJUFR9LHt0eXBlOiJzbWFsbCIsc3R5bGU6cnIuU0NSSVBUfSx7dHlwZToic21hbGwiLHN0eWxlOnJyLlRFWFR9LHt0eXBlOiJsYXJnZSIsc2l6ZToxfSx7dHlwZToibGFyZ2UiLHNpemU6Mn0se3R5cGU6ImxhcmdlIixzaXplOjN9LHt0eXBlOiJsYXJnZSIsc2l6ZTo0fSx7dHlwZToic3RhY2sifV0sUzRlPW8oZnVuY3Rpb24oZSl7aWYoZS50eXBlPT09InNtYWxsIilyZXR1cm4iTWFpbi1SZWd1bGFyIjtpZihlLnR5cGU9PT0ibGFyZ2UiKXJldHVybiJTaXplIitlLnNpemUrIi1SZWd1bGFyIjtpZihlLnR5cGU9PT0ic3RhY2siKXJldHVybiJTaXplNC1SZWd1bGFyIjt0aHJvdyBuZXcgRXJyb3IoIkFkZCBzdXBwb3J0IGZvciBkZWxpbSB0eXBlICciK2UudHlwZSsiJyBoZXJlLiIpfSwiZGVsaW1UeXBlVG9Gb250IiksbCQ9byhmdW5jdGlvbihlLHIsbixpKXtmb3IodmFyIGE9TWF0aC5taW4oMiwzLWkuc3R5bGUuc2l6ZSkscz1hO3M8bi5sZW5ndGgmJm5bc10udHlwZSE9PSJzdGFjayI7cysrKXt2YXIgbD1oeShlLFM0ZShuW3NdKSwibWF0aCIpLHU9bC5oZWlnaHQrbC5kZXB0aDtpZihuW3NdLnR5cGU9PT0ic21hbGwiKXt2YXIgaD1pLmhhdmluZ0Jhc2VTdHlsZShuW3NdLnN0eWxlKTt1Kj1oLnNpemVNdWx0aXBsaWVyfWlmKHU+cilyZXR1cm4gbltzXX1yZXR1cm4gbltuLmxlbmd0aC0xXX0sInRyYXZlcnNlU2VxdWVuY2UiKSxjJD1vKGZ1bmN0aW9uKGUscixuLGksYSxzKXtlPT09IjwifHxlPT09IlxcbHQifHxlPT09Ilx1MjdFOCI/ZT0iXFxsYW5nbGUiOihlPT09Ij4ifHxlPT09IlxcZ3QifHxlPT09Ilx1MjdFOSIpJiYoZT0iXFxyYW5nbGUiKTt2YXIgbDtKdC5jb250YWlucyhzJCxlKT9sPWs0ZTpKdC5jb250YWlucyhhJCxlKT9sPW8kOmw9RTRlO3ZhciB1PWwkKGUscixsLGkpO3JldHVybiB1LnR5cGU9PT0ic21hbGwiP2c0ZShlLHUuc3R5bGUsbixpLGEscyk6dS50eXBlPT09ImxhcmdlIj9uJChlLHUuc2l6ZSxuLGksYSxzKTppJChlLHIsbixpLGEscyl9LCJtYWtlQ3VzdG9tU2l6ZWREZWxpbSIpLEM0ZT1vKGZ1bmN0aW9uKGUscixuLGksYSxzKXt2YXIgbD1pLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCppLnNpemVNdWx0aXBsaWVyLHU9OTAxLGg9NS9pLmZvbnRNZXRyaWNzKCkucHRQZXJFbSxmPU1hdGgubWF4KHItbCxuK2wpLGQ9TWF0aC5tYXgoZi81MDAqdSwyKmYtaCk7cmV0dXJuIGMkKGUsZCwhMCxpLGEscyl9LCJtYWtlTGVmdFJpZ2h0RGVsaW0iKSxkdT17c3FydEltYWdlOmI0ZSxzaXplZERlbGltOlQ0ZSxzaXplVG9NYXhIZWlnaHQ6ZnksY3VzdG9tU2l6ZWREZWxpbTpjJCxsZWZ0UmlnaHREZWxpbTpDNGV9LHBHPXsiXFxiaWdsIjp7bWNsYXNzOiJtb3BlbiIsc2l6ZToxfSwiXFxCaWdsIjp7bWNsYXNzOiJtb3BlbiIsc2l6ZToyfSwiXFxiaWdnbCI6e21jbGFzczoibW9wZW4iLHNpemU6M30sIlxcQmlnZ2wiOnttY2xhc3M6Im1vcGVuIixzaXplOjR9LCJcXGJpZ3IiOnttY2xhc3M6Im1jbG9zZSIsc2l6ZToxfSwiXFxCaWdyIjp7bWNsYXNzOiJtY2xvc2UiLHNpemU6Mn0sIlxcYmlnZ3IiOnttY2xhc3M6Im1jbG9zZSIsc2l6ZTozfSwiXFxCaWdnciI6e21jbGFzczoibWNsb3NlIixzaXplOjR9LCJcXGJpZ20iOnttY2xhc3M6Im1yZWwiLHNpemU6MX0sIlxcQmlnbSI6e21jbGFzczoibXJlbCIsc2l6ZToyfSwiXFxiaWdnbSI6e21jbGFzczoibXJlbCIsc2l6ZTozfSwiXFxCaWdnbSI6e21jbGFzczoibXJlbCIsc2l6ZTo0fSwiXFxiaWciOnttY2xhc3M6Im1vcmQiLHNpemU6MX0sIlxcQmlnIjp7bWNsYXNzOiJtb3JkIixzaXplOjJ9LCJcXGJpZ2ciOnttY2xhc3M6Im1vcmQiLHNpemU6M30sIlxcQmlnZyI6e21jbGFzczoibW9yZCIsc2l6ZTo0fX0sQTRlPVsiKCIsIlxcbHBhcmVuIiwiKSIsIlxccnBhcmVuIiwiWyIsIlxcbGJyYWNrIiwiXSIsIlxccmJyYWNrIiwiXFx7IiwiXFxsYnJhY2UiLCJcXH0iLCJcXHJicmFjZSIsIlxcbGZsb29yIiwiXFxyZmxvb3IiLCJcdTIzMEEiLCJcdTIzMEIiLCJcXGxjZWlsIiwiXFxyY2VpbCIsIlx1MjMwOCIsIlx1MjMwOSIsIjwiLCI+IiwiXFxsYW5nbGUiLCJcdTI3RTgiLCJcXHJhbmdsZSIsIlx1MjdFOSIsIlxcbHQiLCJcXGd0IiwiXFxsdmVydCIsIlxccnZlcnQiLCJcXGxWZXJ0IiwiXFxyVmVydCIsIlxcbGdyb3VwIiwiXFxyZ3JvdXAiLCJcdTI3RUUiLCJcdTI3RUYiLCJcXGxtb3VzdGFjaGUiLCJcXHJtb3VzdGFjaGUiLCJcdTIzQjAiLCJcdTIzQjEiLCIvIiwiXFxiYWNrc2xhc2giLCJ8IiwiXFx2ZXJ0IiwiXFx8IiwiXFxWZXJ0IiwiXFx1cGFycm93IiwiXFxVcGFycm93IiwiXFxkb3duYXJyb3ciLCJcXERvd25hcnJvdyIsIlxcdXBkb3duYXJyb3ciLCJcXFVwZG93bmFycm93IiwiLiJdO28oTTQsImNoZWNrRGVsaW1pdGVyIik7U3Qoe3R5cGU6ImRlbGltc2l6aW5nIixuYW1lczpbIlxcYmlnbCIsIlxcQmlnbCIsIlxcYmlnZ2wiLCJcXEJpZ2dsIiwiXFxiaWdyIiwiXFxCaWdyIiwiXFxiaWdnciIsIlxcQmlnZ3IiLCJcXGJpZ20iLCJcXEJpZ20iLCJcXGJpZ2dtIiwiXFxCaWdnbSIsIlxcYmlnIiwiXFxCaWciLCJcXGJpZ2ciLCJcXEJpZ2ciXSxwcm9wczp7bnVtQXJnczoxLGFyZ1R5cGVzOlsicHJpbWl0aXZlIl19LGhhbmRsZXI6bygodCxlKT0+e3ZhciByPU00KGVbMF0sdCk7cmV0dXJue3R5cGU6ImRlbGltc2l6aW5nIixtb2RlOnQucGFyc2VyLm1vZGUsc2l6ZTpwR1t0LmZ1bmNOYW1lXS5zaXplLG1jbGFzczpwR1t0LmZ1bmNOYW1lXS5tY2xhc3MsZGVsaW06ci50ZXh0fX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvKCh0LGUpPT50LmRlbGltPT09Ii4iP0ZlLm1ha2VTcGFuKFt0Lm1jbGFzc10pOmR1LnNpemVkRGVsaW0odC5kZWxpbSx0LnNpemUsZSx0Lm1vZGUsW3QubWNsYXNzXSksImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKHQ9Pnt2YXIgZT1bXTt0LmRlbGltIT09Ii4iJiZlLnB1c2goTW8odC5kZWxpbSx0Lm1vZGUpKTt2YXIgcj1uZXcgYXQuTWF0aE5vZGUoIm1vIixlKTt0Lm1jbGFzcz09PSJtb3BlbiJ8fHQubWNsYXNzPT09Im1jbG9zZSI/ci5zZXRBdHRyaWJ1dGUoImZlbmNlIiwidHJ1ZSIpOnIuc2V0QXR0cmlidXRlKCJmZW5jZSIsImZhbHNlIiksci5zZXRBdHRyaWJ1dGUoInN0cmV0Y2h5IiwidHJ1ZSIpO3ZhciBuPWd0KGR1LnNpemVUb01heEhlaWdodFt0LnNpemVdKTtyZXR1cm4gci5zZXRBdHRyaWJ1dGUoIm1pbnNpemUiLG4pLHIuc2V0QXR0cmlidXRlKCJtYXhzaXplIixuKSxyfSwibWF0aG1sQnVpbGRlciIpfSk7byhtRywiYXNzZXJ0UGFyc2VkIik7U3Qoe3R5cGU6ImxlZnRyaWdodC1yaWdodCIsbmFtZXM6WyJcXHJpZ2h0Il0scHJvcHM6e251bUFyZ3M6MSxwcmltaXRpdmU6ITB9LGhhbmRsZXI6bygodCxlKT0+e3ZhciByPXQucGFyc2VyLmd1bGxldC5tYWNyb3MuZ2V0KCJcXGN1cnJlbnRAY29sb3IiKTtpZihyJiZ0eXBlb2YgciE9InN0cmluZyIpdGhyb3cgbmV3IGx0KCJcXGN1cnJlbnRAY29sb3Igc2V0IHRvIG5vbi1zdHJpbmcgaW4gXFxyaWdodCIpO3JldHVybnt0eXBlOiJsZWZ0cmlnaHQtcmlnaHQiLG1vZGU6dC5wYXJzZXIubW9kZSxkZWxpbTpNNChlWzBdLHQpLnRleHQsY29sb3I6cn19LCJoYW5kbGVyIil9KTtTdCh7dHlwZToibGVmdHJpZ2h0IixuYW1lczpbIlxcbGVmdCJdLHByb3BzOntudW1BcmdzOjEscHJpbWl0aXZlOiEwfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXIgcj1NNChlWzBdLHQpLG49dC5wYXJzZXI7KytuLmxlZnRyaWdodERlcHRoO3ZhciBpPW4ucGFyc2VFeHByZXNzaW9uKCExKTstLW4ubGVmdHJpZ2h0RGVwdGgsbi5leHBlY3QoIlxccmlnaHQiLCExKTt2YXIgYT1ncihuLnBhcnNlRnVuY3Rpb24oKSwibGVmdHJpZ2h0LXJpZ2h0Iik7cmV0dXJue3R5cGU6ImxlZnRyaWdodCIsbW9kZTpuLm1vZGUsYm9keTppLGxlZnQ6ci50ZXh0LHJpZ2h0OmEuZGVsaW0scmlnaHRDb2xvcjphLmNvbG9yfX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvKCh0LGUpPT57bUcodCk7Zm9yKHZhciByPUZpKHQuYm9keSxlLCEwLFsibW9wZW4iLCJtY2xvc2UiXSksbj0wLGk9MCxhPSExLHM9MDtzPHIubGVuZ3RoO3MrKylyW3NdLmlzTWlkZGxlP2E9ITA6KG49TWF0aC5tYXgocltzXS5oZWlnaHQsbiksaT1NYXRoLm1heChyW3NdLmRlcHRoLGkpKTtuKj1lLnNpemVNdWx0aXBsaWVyLGkqPWUuc2l6ZU11bHRpcGxpZXI7dmFyIGw7aWYodC5sZWZ0PT09Ii4iP2w9eXkoZSxbIm1vcGVuIl0pOmw9ZHUubGVmdFJpZ2h0RGVsaW0odC5sZWZ0LG4saSxlLHQubW9kZSxbIm1vcGVuIl0pLHIudW5zaGlmdChsKSxhKWZvcih2YXIgdT0xO3U8ci5sZW5ndGg7dSsrKXt2YXIgaD1yW3VdLGY9aC5pc01pZGRsZTtmJiYoclt1XT1kdS5sZWZ0UmlnaHREZWxpbShmLmRlbGltLG4saSxmLm9wdGlvbnMsdC5tb2RlLFtdKSl9dmFyIGQ7aWYodC5yaWdodD09PSIuIilkPXl5KGUsWyJtY2xvc2UiXSk7ZWxzZXt2YXIgcD10LnJpZ2h0Q29sb3I/ZS53aXRoQ29sb3IodC5yaWdodENvbG9yKTplO2Q9ZHUubGVmdFJpZ2h0RGVsaW0odC5yaWdodCxuLGkscCx0Lm1vZGUsWyJtY2xvc2UiXSl9cmV0dXJuIHIucHVzaChkKSxGZS5tYWtlU3BhbihbIm1pbm5lciJdLHIsZSl9LCJodG1sQnVpbGRlciIpLG1hdGhtbEJ1aWxkZXI6bygodCxlKT0+e21HKHQpO3ZhciByPVNzKHQuYm9keSxlKTtpZih0LmxlZnQhPT0iLiIpe3ZhciBuPW5ldyBhdC5NYXRoTm9kZSgibW8iLFtNbyh0LmxlZnQsdC5tb2RlKV0pO24uc2V0QXR0cmlidXRlKCJmZW5jZSIsInRydWUiKSxyLnVuc2hpZnQobil9aWYodC5yaWdodCE9PSIuIil7dmFyIGk9bmV3IGF0Lk1hdGhOb2RlKCJtbyIsW01vKHQucmlnaHQsdC5tb2RlKV0pO2kuc2V0QXR0cmlidXRlKCJmZW5jZSIsInRydWUiKSx0LnJpZ2h0Q29sb3ImJmkuc2V0QXR0cmlidXRlKCJtYXRoY29sb3IiLHQucmlnaHRDb2xvciksci5wdXNoKGkpfXJldHVybiBQQyhyKX0sIm1hdGhtbEJ1aWxkZXIiKX0pO1N0KHt0eXBlOiJtaWRkbGUiLG5hbWVzOlsiXFxtaWRkbGUiXSxwcm9wczp7bnVtQXJnczoxLHByaW1pdGl2ZTohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFyIHI9TTQoZVswXSx0KTtpZighdC5wYXJzZXIubGVmdHJpZ2h0RGVwdGgpdGhyb3cgbmV3IGx0KCJcXG1pZGRsZSB3aXRob3V0IHByZWNlZGluZyBcXGxlZnQiLHIpO3JldHVybnt0eXBlOiJtaWRkbGUiLG1vZGU6dC5wYXJzZXIubW9kZSxkZWxpbTpyLnRleHR9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcjtpZih0LmRlbGltPT09Ii4iKXI9eXkoZSxbXSk7ZWxzZXtyPWR1LnNpemVkRGVsaW0odC5kZWxpbSwxLGUsdC5tb2RlLFtdKTt2YXIgbj17ZGVsaW06dC5kZWxpbSxvcHRpb25zOmV9O3IuaXNNaWRkbGU9bn1yZXR1cm4gcn0sImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9dC5kZWxpbT09PSJcXHZlcnQifHx0LmRlbGltPT09InwiP01vKCJ8IiwidGV4dCIpOk1vKHQuZGVsaW0sdC5tb2RlKSxuPW5ldyBhdC5NYXRoTm9kZSgibW8iLFtyXSk7cmV0dXJuIG4uc2V0QXR0cmlidXRlKCJmZW5jZSIsInRydWUiKSxuLnNldEF0dHJpYnV0ZSgibHNwYWNlIiwiMC4wNWVtIiksbi5zZXRBdHRyaWJ1dGUoInJzcGFjZSIsIjAuMDVlbSIpLG59LCJtYXRobWxCdWlsZGVyIil9KTskQz1vKCh0LGUpPT57dmFyIHI9RmUud3JhcEZyYWdtZW50KFByKHQuYm9keSxlKSxlKSxuPXQubGFiZWwuc2xpY2UoMSksaT1lLnNpemVNdWx0aXBsaWVyLGEscz0wLGw9SnQuaXNDaGFyYWN0ZXJCb3godC5ib2R5KTtpZihuPT09InNvdXQiKWE9RmUubWFrZVNwYW4oWyJzdHJldGNoeSIsInNvdXQiXSksYS5oZWlnaHQ9ZS5mb250TWV0cmljcygpLmRlZmF1bHRSdWxlVGhpY2tuZXNzL2kscz0tLjUqZS5mb250TWV0cmljcygpLnhIZWlnaHQ7ZWxzZSBpZihuPT09InBoYXNlIil7dmFyIHU9Sm4oe251bWJlcjouNix1bml0OiJwdCJ9LGUpLGg9Sm4oe251bWJlcjouMzUsdW5pdDoiZXgifSxlKSxmPWUuaGF2aW5nQmFzZVNpemluZygpO2k9aS9mLnNpemVNdWx0aXBsaWVyO3ZhciBkPXIuaGVpZ2h0K3IuZGVwdGgrdStoO3Iuc3R5bGUucGFkZGluZ0xlZnQ9Z3QoZC8yK3UpO3ZhciBwPU1hdGguZmxvb3IoMWUzKmQqaSksbT1UYmUocCksZz1uZXcgdmwoW25ldyBjYygicGhhc2UiLG0pXSx7d2lkdGg6IjQwMGVtIixoZWlnaHQ6Z3QocC8xZTMpLHZpZXdCb3g6IjAgMCA0MDAwMDAgIitwLHByZXNlcnZlQXNwZWN0UmF0aW86InhNaW5ZTWluIHNsaWNlIn0pO2E9RmUubWFrZVN2Z1NwYW4oWyJoaWRlLXRhaWwiXSxbZ10sZSksYS5zdHlsZS5oZWlnaHQ9Z3QoZCkscz1yLmRlcHRoK3UraH1lbHNley9jYW5jZWwvLnRlc3Qobik/bHx8ci5jbGFzc2VzLnB1c2goImNhbmNlbC1wYWQiKTpuPT09ImFuZ2wiP3IuY2xhc3Nlcy5wdXNoKCJhbmdscGFkIik6ci5jbGFzc2VzLnB1c2goImJveHBhZCIpO3ZhciB5PTAsdj0wLHg9MDsvYm94Ly50ZXN0KG4pPyh4PU1hdGgubWF4KGUuZm9udE1ldHJpY3MoKS5mYm94cnVsZSxlLm1pblJ1bGVUaGlja25lc3MpLHk9ZS5mb250TWV0cmljcygpLmZib3hzZXArKG49PT0iY29sb3Jib3giPzA6eCksdj15KTpuPT09ImFuZ2wiPyh4PU1hdGgubWF4KGUuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcyxlLm1pblJ1bGVUaGlja25lc3MpLHk9NCp4LHY9TWF0aC5tYXgoMCwuMjUtci5kZXB0aCkpOih5PWw/LjI6MCx2PXkpLGE9bXUuZW5jbG9zZVNwYW4ocixuLHksdixlKSwvZmJveHxib3hlZHxmY29sb3Jib3gvLnRlc3Qobik/KGEuc3R5bGUuYm9yZGVyU3R5bGU9InNvbGlkIixhLnN0eWxlLmJvcmRlcldpZHRoPWd0KHgpKTpuPT09ImFuZ2wiJiZ4IT09LjA0OSYmKGEuc3R5bGUuYm9yZGVyVG9wV2lkdGg9Z3QoeCksYS5zdHlsZS5ib3JkZXJSaWdodFdpZHRoPWd0KHgpKSxzPXIuZGVwdGgrdix0LmJhY2tncm91bmRDb2xvciYmKGEuc3R5bGUuYmFja2dyb3VuZENvbG9yPXQuYmFja2dyb3VuZENvbG9yLHQuYm9yZGVyQ29sb3ImJihhLnN0eWxlLmJvcmRlckNvbG9yPXQuYm9yZGVyQ29sb3IpKX12YXIgYjtpZih0LmJhY2tncm91bmRDb2xvciliPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTphLHNoaWZ0OnN9LHt0eXBlOiJlbGVtIixlbGVtOnIsc2hpZnQ6MH1dfSxlKTtlbHNle3ZhciB3PS9jYW5jZWx8cGhhc2UvLnRlc3Qobik/WyJzdmctYWxpZ24iXTpbXTtiPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTpyLHNoaWZ0OjB9LHt0eXBlOiJlbGVtIixlbGVtOmEsc2hpZnQ6cyx3cmFwcGVyQ2xhc3Nlczp3fV19LGUpfXJldHVybi9jYW5jZWwvLnRlc3QobikmJihiLmhlaWdodD1yLmhlaWdodCxiLmRlcHRoPXIuZGVwdGgpLC9jYW5jZWwvLnRlc3QobikmJiFsP0ZlLm1ha2VTcGFuKFsibW9yZCIsImNhbmNlbC1sYXAiXSxbYl0sZSk6RmUubWFrZVNwYW4oWyJtb3JkIl0sW2JdLGUpfSwiaHRtbEJ1aWxkZXIkNyIpLFZDPW8oKHQsZSk9Pnt2YXIgcj0wLG49bmV3IGF0Lk1hdGhOb2RlKHQubGFiZWwuaW5kZXhPZigiY29sb3Jib3giKT4tMT8ibXBhZGRlZCI6Im1lbmNsb3NlIixbeW4odC5ib2R5LGUpXSk7c3dpdGNoKHQubGFiZWwpe2Nhc2UiXFxjYW5jZWwiOm4uc2V0QXR0cmlidXRlKCJub3RhdGlvbiIsInVwZGlhZ29uYWxzdHJpa2UiKTticmVhaztjYXNlIlxcYmNhbmNlbCI6bi5zZXRBdHRyaWJ1dGUoIm5vdGF0aW9uIiwiZG93bmRpYWdvbmFsc3RyaWtlIik7YnJlYWs7Y2FzZSJcXHBoYXNlIjpuLnNldEF0dHJpYnV0ZSgibm90YXRpb24iLCJwaGFzb3JhbmdsZSIpO2JyZWFrO2Nhc2UiXFxzb3V0IjpuLnNldEF0dHJpYnV0ZSgibm90YXRpb24iLCJob3Jpem9udGFsc3RyaWtlIik7YnJlYWs7Y2FzZSJcXGZib3giOm4uc2V0QXR0cmlidXRlKCJub3RhdGlvbiIsImJveCIpO2JyZWFrO2Nhc2UiXFxhbmdsIjpuLnNldEF0dHJpYnV0ZSgibm90YXRpb24iLCJhY3R1YXJpYWwiKTticmVhaztjYXNlIlxcZmNvbG9yYm94IjpjYXNlIlxcY29sb3Jib3giOmlmKHI9ZS5mb250TWV0cmljcygpLmZib3hzZXAqZS5mb250TWV0cmljcygpLnB0UGVyRW0sbi5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiKyIrMipyKyJwdCIpLG4uc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIrIisyKnIrInB0Iiksbi5zZXRBdHRyaWJ1dGUoImxzcGFjZSIscisicHQiKSxuLnNldEF0dHJpYnV0ZSgidm9mZnNldCIscisicHQiKSx0LmxhYmVsPT09IlxcZmNvbG9yYm94Iil7dmFyIGk9TWF0aC5tYXgoZS5mb250TWV0cmljcygpLmZib3hydWxlLGUubWluUnVsZVRoaWNrbmVzcyk7bi5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiYm9yZGVyOiAiK2krImVtIHNvbGlkICIrU3RyaW5nKHQuYm9yZGVyQ29sb3IpKX1icmVhaztjYXNlIlxceGNhbmNlbCI6bi5zZXRBdHRyaWJ1dGUoIm5vdGF0aW9uIiwidXBkaWFnb25hbHN0cmlrZSBkb3duZGlhZ29uYWxzdHJpa2UiKTticmVha31yZXR1cm4gdC5iYWNrZ3JvdW5kQ29sb3ImJm4uc2V0QXR0cmlidXRlKCJtYXRoYmFja2dyb3VuZCIsdC5iYWNrZ3JvdW5kQ29sb3IpLG59LCJtYXRobWxCdWlsZGVyJDYiKTtTdCh7dHlwZToiZW5jbG9zZSIsbmFtZXM6WyJcXGNvbG9yYm94Il0scHJvcHM6e251bUFyZ3M6MixhbGxvd2VkSW5UZXh0OiEwLGFyZ1R5cGVzOlsiY29sb3IiLCJ0ZXh0Il19LGhhbmRsZXIodCxlLHIpe3ZhcntwYXJzZXI6bixmdW5jTmFtZTppfT10LGE9Z3IoZVswXSwiY29sb3ItdG9rZW4iKS5jb2xvcixzPWVbMV07cmV0dXJue3R5cGU6ImVuY2xvc2UiLG1vZGU6bi5tb2RlLGxhYmVsOmksYmFja2dyb3VuZENvbG9yOmEsYm9keTpzfX0saHRtbEJ1aWxkZXI6JEMsbWF0aG1sQnVpbGRlcjpWQ30pO1N0KHt0eXBlOiJlbmNsb3NlIixuYW1lczpbIlxcZmNvbG9yYm94Il0scHJvcHM6e251bUFyZ3M6MyxhbGxvd2VkSW5UZXh0OiEwLGFyZ1R5cGVzOlsiY29sb3IiLCJjb2xvciIsInRleHQiXX0saGFuZGxlcih0LGUscil7dmFye3BhcnNlcjpuLGZ1bmNOYW1lOml9PXQsYT1ncihlWzBdLCJjb2xvci10b2tlbiIpLmNvbG9yLHM9Z3IoZVsxXSwiY29sb3ItdG9rZW4iKS5jb2xvcixsPWVbMl07cmV0dXJue3R5cGU6ImVuY2xvc2UiLG1vZGU6bi5tb2RlLGxhYmVsOmksYmFja2dyb3VuZENvbG9yOnMsYm9yZGVyQ29sb3I6YSxib2R5Omx9fSxodG1sQnVpbGRlcjokQyxtYXRobWxCdWlsZGVyOlZDfSk7U3Qoe3R5cGU6ImVuY2xvc2UiLG5hbWVzOlsiXFxmYm94Il0scHJvcHM6e251bUFyZ3M6MSxhcmdUeXBlczpbImhib3giXSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyfT10O3JldHVybnt0eXBlOiJlbmNsb3NlIixtb2RlOnIubW9kZSxsYWJlbDoiXFxmYm94Iixib2R5OmVbMF19fX0pO1N0KHt0eXBlOiJlbmNsb3NlIixuYW1lczpbIlxcY2FuY2VsIiwiXFxiY2FuY2VsIiwiXFx4Y2FuY2VsIiwiXFxzb3V0IiwiXFxwaGFzZSJdLHByb3BzOntudW1BcmdzOjF9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnIsZnVuY05hbWU6bn09dCxpPWVbMF07cmV0dXJue3R5cGU6ImVuY2xvc2UiLG1vZGU6ci5tb2RlLGxhYmVsOm4sYm9keTppfX0saHRtbEJ1aWxkZXI6JEMsbWF0aG1sQnVpbGRlcjpWQ30pO1N0KHt0eXBlOiJlbmNsb3NlIixuYW1lczpbIlxcYW5nbCJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJoYm94Il0sYWxsb3dlZEluVGV4dDohMX0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cn09dDtyZXR1cm57dHlwZToiZW5jbG9zZSIsbW9kZTpyLm1vZGUsbGFiZWw6IlxcYW5nbCIsYm9keTplWzBdfX19KTt1JD17fTtvKHVjLCJkZWZpbmVFbnZpcm9ubWVudCIpO2gkPXt9O28obGUsImRlZmluZU1hY3JvIik7byhnRywiZ2V0SExpbmVzIik7STQ9byh0PT57dmFyIGU9dC5wYXJzZXIuc2V0dGluZ3M7aWYoIWUuZGlzcGxheU1vZGUpdGhyb3cgbmV3IGx0KCJ7Iit0LmVudk5hbWUrIn0gY2FuIGJlIHVzZWQgb25seSBpbiBkaXNwbGF5IG1vZGUuIil9LCJ2YWxpZGF0ZUFtc0Vudmlyb25tZW50Q29udGV4dCIpO28oVUMsImdldEF1dG9UYWciKTtvKHhoLCJwYXJzZUFycmF5Iik7byhIQywiZENlbGxTdHlsZSIpO2hjPW8oZnVuY3Rpb24oZSxyKXt2YXIgbixpLGE9ZS5ib2R5Lmxlbmd0aCxzPWUuaExpbmVzQmVmb3JlUm93LGw9MCx1PW5ldyBBcnJheShhKSxoPVtdLGY9TWF0aC5tYXgoci5mb250TWV0cmljcygpLmFycmF5UnVsZVdpZHRoLHIubWluUnVsZVRoaWNrbmVzcyksZD0xL3IuZm9udE1ldHJpY3MoKS5wdFBlckVtLHA9NSpkO2lmKGUuY29sU2VwYXJhdGlvblR5cGUmJmUuY29sU2VwYXJhdGlvblR5cGU9PT0ic21hbGwiKXt2YXIgbT1yLmhhdmluZ1N0eWxlKHJyLlNDUklQVCkuc2l6ZU11bHRpcGxpZXI7cD0uMjc3OCoobS9yLnNpemVNdWx0aXBsaWVyKX12YXIgZz1lLmNvbFNlcGFyYXRpb25UeXBlPT09IkNEIj9Kbih7bnVtYmVyOjMsdW5pdDoiZXgifSxyKToxMipkLHk9MypkLHY9ZS5hcnJheXN0cmV0Y2gqZyx4PS43KnYsYj0uMyp2LHc9MDtmdW5jdGlvbiBfKGtlKXtmb3IodmFyIFJlPTA7UmU8a2UubGVuZ3RoOysrUmUpUmU+MCYmKHcrPS4yNSksaC5wdXNoKHtwb3M6dyxpc0Rhc2hlZDprZVtSZV19KX1mb3IobyhfLCJzZXRITGluZVBvcyIpLF8oc1swXSksbj0wO248ZS5ib2R5Lmxlbmd0aDsrK24pe3ZhciBUPWUuYm9keVtuXSxFPXgsTD1iO2w8VC5sZW5ndGgmJihsPVQubGVuZ3RoKTt2YXIgUz1uZXcgQXJyYXkoVC5sZW5ndGgpO2ZvcihpPTA7aTxULmxlbmd0aDsrK2kpe3ZhciBBPVByKFRbaV0scik7TDxBLmRlcHRoJiYoTD1BLmRlcHRoKSxFPEEuaGVpZ2h0JiYoRT1BLmhlaWdodCksU1tpXT1BfXZhciBJPWUucm93R2Fwc1tuXSxEPTA7SSYmKEQ9Sm4oSSxyKSxEPjAmJihEKz1iLEw8RCYmKEw9RCksRD0wKSksZS5hZGRKb3QmJihMKz15KSxTLmhlaWdodD1FLFMuZGVwdGg9TCx3Kz1FLFMucG9zPXcsdys9TCtELHVbbl09UyxfKHNbbisxXSl9dmFyIGs9dy8yK3IuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0LFI9ZS5jb2xzfHxbXSxDPVtdLE8sTixQPVtdO2lmKGUudGFncyYmZS50YWdzLnNvbWUoa2U9PmtlKSlmb3Iobj0wO248YTsrK24pe3ZhciBGPXVbbl0sQj1GLnBvcy1rLEc9ZS50YWdzW25dLHo9dm9pZCAwO0c9PT0hMD96PUZlLm1ha2VTcGFuKFsiZXFuLW51bSJdLFtdLHIpOkc9PT0hMT96PUZlLm1ha2VTcGFuKFtdLFtdLHIpOno9RmUubWFrZVNwYW4oW10sRmkoRyxyLCEwKSxyKSx6LmRlcHRoPUYuZGVwdGgsei5oZWlnaHQ9Ri5oZWlnaHQsUC5wdXNoKHt0eXBlOiJlbGVtIixlbGVtOnosc2hpZnQ6Qn0pfWZvcihpPTAsTj0wO2k8bHx8TjxSLmxlbmd0aDsrK2ksKytOKXtmb3IodmFyIFc9UltOXXx8e30sWj0hMDtXLnR5cGU9PT0ic2VwYXJhdG9yIjspe2lmKFp8fChPPUZlLm1ha2VTcGFuKFsiYXJyYXljb2xzZXAiXSxbXSksTy5zdHlsZS53aWR0aD1ndChyLmZvbnRNZXRyaWNzKCkuZG91YmxlUnVsZVNlcCksQy5wdXNoKE8pKSxXLnNlcGFyYXRvcj09PSJ8Inx8Vy5zZXBhcmF0b3I9PT0iOiIpe3ZhciBqPVcuc2VwYXJhdG9yPT09InwiPyJzb2xpZCI6ImRhc2hlZCIsb2U9RmUubWFrZVNwYW4oWyJ2ZXJ0aWNhbC1zZXBhcmF0b3IiXSxbXSxyKTtvZS5zdHlsZS5oZWlnaHQ9Z3Qodyksb2Uuc3R5bGUuYm9yZGVyUmlnaHRXaWR0aD1ndChmKSxvZS5zdHlsZS5ib3JkZXJSaWdodFN0eWxlPWosb2Uuc3R5bGUubWFyZ2luPSIwICIrZ3QoLWYvMik7dmFyIEs9dy1rO0smJihvZS5zdHlsZS52ZXJ0aWNhbEFsaWduPWd0KC1LKSksQy5wdXNoKG9lKX1lbHNlIHRocm93IG5ldyBsdCgiSW52YWxpZCBzZXBhcmF0b3IgdHlwZTogIitXLnNlcGFyYXRvcik7TisrLFc9UltOXXx8e30sWj0hMX1pZighKGk+PWwpKXt2YXIgZWU9dm9pZCAwOyhpPjB8fGUuaHNraXBCZWZvcmVBbmRBZnRlcikmJihlZT1KdC5kZWZsdChXLnByZWdhcCxwKSxlZSE9PTAmJihPPUZlLm1ha2VTcGFuKFsiYXJyYXljb2xzZXAiXSxbXSksTy5zdHlsZS53aWR0aD1ndChlZSksQy5wdXNoKE8pKSk7dmFyIEo9W107Zm9yKG49MDtuPGE7KytuKXt2YXIgSD11W25dLHE9SFtpXTtpZihxKXt2YXIgUT1ILnBvcy1rO3EuZGVwdGg9SC5kZXB0aCxxLmhlaWdodD1ILmhlaWdodCxKLnB1c2goe3R5cGU6ImVsZW0iLGVsZW06cSxzaGlmdDpRfSl9fUo9RmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46Sn0sciksSj1GZS5tYWtlU3BhbihbImNvbC1hbGlnbi0iKyhXLmFsaWdufHwiYyIpXSxbSl0pLEMucHVzaChKKSwoaTxsLTF8fGUuaHNraXBCZWZvcmVBbmRBZnRlcikmJihlZT1KdC5kZWZsdChXLnBvc3RnYXAscCksZWUhPT0wJiYoTz1GZS5tYWtlU3BhbihbImFycmF5Y29sc2VwIl0sW10pLE8uc3R5bGUud2lkdGg9Z3QoZWUpLEMucHVzaChPKSkpfX1pZih1PUZlLm1ha2VTcGFuKFsibXRhYmxlIl0sQyksaC5sZW5ndGg+MCl7Zm9yKHZhciBhZT1GZS5tYWtlTGluZVNwYW4oImhsaW5lIixyLGYpLHVlPUZlLm1ha2VMaW5lU3BhbigiaGRhc2hsaW5lIixyLGYpLGNlPVt7dHlwZToiZWxlbSIsZWxlbTp1LHNoaWZ0OjB9XTtoLmxlbmd0aD4wOyl7dmFyIHRlPWgucG9wKCksTmU9dGUucG9zLWs7dGUuaXNEYXNoZWQ/Y2UucHVzaCh7dHlwZToiZWxlbSIsZWxlbTp1ZSxzaGlmdDpOZX0pOmNlLnB1c2goe3R5cGU6ImVsZW0iLGVsZW06YWUsc2hpZnQ6TmV9KX11PUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOmNlfSxyKX1pZihQLmxlbmd0aD09PTApcmV0dXJuIEZlLm1ha2VTcGFuKFsibW9yZCJdLFt1XSxyKTt2YXIgc2U9RmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46UH0scik7cmV0dXJuIHNlPUZlLm1ha2VTcGFuKFsidGFnIl0sW3NlXSxyKSxGZS5tYWtlRnJhZ21lbnQoW3Usc2VdKX0sImh0bWxCdWlsZGVyIiksXzRlPXtjOiJjZW50ZXIgIixsOiJsZWZ0ICIscjoicmlnaHQgIn0sZmM9byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1bXSxpPW5ldyBhdC5NYXRoTm9kZSgibXRkIixbXSxbIm10ci1nbHVlIl0pLGE9bmV3IGF0Lk1hdGhOb2RlKCJtdGQiLFtdLFsibW1sLWVxbi1udW0iXSkscz0wO3M8ZS5ib2R5Lmxlbmd0aDtzKyspe2Zvcih2YXIgbD1lLmJvZHlbc10sdT1bXSxoPTA7aDxsLmxlbmd0aDtoKyspdS5wdXNoKG5ldyBhdC5NYXRoTm9kZSgibXRkIixbeW4obFtoXSxyKV0pKTtlLnRhZ3MmJmUudGFnc1tzXSYmKHUudW5zaGlmdChpKSx1LnB1c2goaSksZS5sZXFubz91LnVuc2hpZnQoYSk6dS5wdXNoKGEpKSxuLnB1c2gobmV3IGF0Lk1hdGhOb2RlKCJtdHIiLHUpKX12YXIgZj1uZXcgYXQuTWF0aE5vZGUoIm10YWJsZSIsbiksZD1lLmFycmF5c3RyZXRjaD09PS41Py4xOi4xNitlLmFycmF5c3RyZXRjaC0xKyhlLmFkZEpvdD8uMDk6MCk7Zi5zZXRBdHRyaWJ1dGUoInJvd3NwYWNpbmciLGd0KGQpKTt2YXIgcD0iIixtPSIiO2lmKGUuY29scyYmZS5jb2xzLmxlbmd0aD4wKXt2YXIgZz1lLmNvbHMseT0iIix2PSExLHg9MCxiPWcubGVuZ3RoO2dbMF0udHlwZT09PSJzZXBhcmF0b3IiJiYocCs9InRvcCAiLHg9MSksZ1tnLmxlbmd0aC0xXS50eXBlPT09InNlcGFyYXRvciImJihwKz0iYm90dG9tICIsYi09MSk7Zm9yKHZhciB3PXg7dzxiO3crKylnW3ddLnR5cGU9PT0iYWxpZ24iPyhtKz1fNGVbZ1t3XS5hbGlnbl0sdiYmKHkrPSJub25lICIpLHY9ITApOmdbd10udHlwZT09PSJzZXBhcmF0b3IiJiZ2JiYoeSs9Z1t3XS5zZXBhcmF0b3I9PT0ifCI/InNvbGlkICI6ImRhc2hlZCAiLHY9ITEpO2Yuc2V0QXR0cmlidXRlKCJjb2x1bW5hbGlnbiIsbS50cmltKCkpLC9bc2RdLy50ZXN0KHkpJiZmLnNldEF0dHJpYnV0ZSgiY29sdW1ubGluZXMiLHkudHJpbSgpKX1pZihlLmNvbFNlcGFyYXRpb25UeXBlPT09ImFsaWduIil7Zm9yKHZhciBfPWUuY29sc3x8W10sVD0iIixFPTE7RTxfLmxlbmd0aDtFKyspVCs9RSUyPyIwZW0gIjoiMWVtICI7Zi5zZXRBdHRyaWJ1dGUoImNvbHVtbnNwYWNpbmciLFQudHJpbSgpKX1lbHNlIGUuY29sU2VwYXJhdGlvblR5cGU9PT0iYWxpZ25hdCJ8fGUuY29sU2VwYXJhdGlvblR5cGU9PT0iZ2F0aGVyIj9mLnNldEF0dHJpYnV0ZSgiY29sdW1uc3BhY2luZyIsIjBlbSIpOmUuY29sU2VwYXJhdGlvblR5cGU9PT0ic21hbGwiP2Yuc2V0QXR0cmlidXRlKCJjb2x1bW5zcGFjaW5nIiwiMC4yNzc4ZW0iKTplLmNvbFNlcGFyYXRpb25UeXBlPT09IkNEIj9mLnNldEF0dHJpYnV0ZSgiY29sdW1uc3BhY2luZyIsIjAuNWVtIik6Zi5zZXRBdHRyaWJ1dGUoImNvbHVtbnNwYWNpbmciLCIxZW0iKTt2YXIgTD0iIixTPWUuaExpbmVzQmVmb3JlUm93O3ArPVNbMF0ubGVuZ3RoPjA/ImxlZnQgIjoiIixwKz1TW1MubGVuZ3RoLTFdLmxlbmd0aD4wPyJyaWdodCAiOiIiO2Zvcih2YXIgQT0xO0E8Uy5sZW5ndGgtMTtBKyspTCs9U1tBXS5sZW5ndGg9PT0wPyJub25lICI6U1tBXVswXT8iZGFzaGVkICI6InNvbGlkICI7cmV0dXJuL1tzZF0vLnRlc3QoTCkmJmYuc2V0QXR0cmlidXRlKCJyb3dsaW5lcyIsTC50cmltKCkpLHAhPT0iIiYmKGY9bmV3IGF0Lk1hdGhOb2RlKCJtZW5jbG9zZSIsW2ZdKSxmLnNldEF0dHJpYnV0ZSgibm90YXRpb24iLHAudHJpbSgpKSksZS5hcnJheXN0cmV0Y2gmJmUuYXJyYXlzdHJldGNoPDEmJihmPW5ldyBhdC5NYXRoTm9kZSgibXN0eWxlIixbZl0pLGYuc2V0QXR0cmlidXRlKCJzY3JpcHRsZXZlbCIsIjEiKSksZn0sIm1hdGhtbEJ1aWxkZXIiKSxmJD1vKGZ1bmN0aW9uKGUscil7ZS5lbnZOYW1lLmluZGV4T2YoImVkIik9PT0tMSYmSTQoZSk7dmFyIG49W10saT1lLmVudk5hbWUuaW5kZXhPZigiYXQiKT4tMT8iYWxpZ25hdCI6ImFsaWduIixhPWUuZW52TmFtZT09PSJzcGxpdCIscz14aChlLnBhcnNlcix7Y29sczpuLGFkZEpvdDohMCxhdXRvVGFnOmE/dm9pZCAwOlVDKGUuZW52TmFtZSksZW1wdHlTaW5nbGVSb3c6ITAsY29sU2VwYXJhdGlvblR5cGU6aSxtYXhOdW1Db2xzOmE/Mjp2b2lkIDAsbGVxbm86ZS5wYXJzZXIuc2V0dGluZ3MubGVxbm99LCJkaXNwbGF5IiksbCx1PTAsaD17dHlwZToib3JkZ3JvdXAiLG1vZGU6ZS5tb2RlLGJvZHk6W119O2lmKHJbMF0mJnJbMF0udHlwZT09PSJvcmRncm91cCIpe2Zvcih2YXIgZj0iIixkPTA7ZDxyWzBdLmJvZHkubGVuZ3RoO2QrKyl7dmFyIHA9Z3IoclswXS5ib2R5W2RdLCJ0ZXh0b3JkIik7Zis9cC50ZXh0fWw9TnVtYmVyKGYpLHU9bCoyfXZhciBtPSF1O3MuYm9keS5mb3JFYWNoKGZ1bmN0aW9uKHgpe2Zvcih2YXIgYj0xO2I8eC5sZW5ndGg7Yis9Mil7dmFyIHc9Z3IoeFtiXSwic3R5bGluZyIpLF89Z3Iody5ib2R5WzBdLCJvcmRncm91cCIpO18uYm9keS51bnNoaWZ0KGgpfWlmKG0pdTx4Lmxlbmd0aCYmKHU9eC5sZW5ndGgpO2Vsc2V7dmFyIFQ9eC5sZW5ndGgvMjtpZihsPFQpdGhyb3cgbmV3IGx0KCJUb28gbWFueSBtYXRoIGluIGEgcm93OiAiKygiZXhwZWN0ZWQgIitsKyIsIGJ1dCBnb3QgIitUKSx4WzBdKX19KTtmb3IodmFyIGc9MDtnPHU7KytnKXt2YXIgeT0iciIsdj0wO2clMj09PTE/eT0ibCI6Zz4wJiZtJiYodj0xKSxuW2ddPXt0eXBlOiJhbGlnbiIsYWxpZ246eSxwcmVnYXA6dixwb3N0Z2FwOjB9fXJldHVybiBzLmNvbFNlcGFyYXRpb25UeXBlPW0/ImFsaWduIjoiYWxpZ25hdCIsc30sImFsaWduZWRIYW5kbGVyIik7dWMoe3R5cGU6ImFycmF5IixuYW1lczpbImFycmF5IiwiZGFycmF5Il0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcih0LGUpe3ZhciByPU40KGVbMF0pLG49cj9bZVswXV06Z3IoZVswXSwib3JkZ3JvdXAiKS5ib2R5LGk9bi5tYXAoZnVuY3Rpb24ocyl7dmFyIGw9RkMocyksdT1sLnRleHQ7aWYoImxjciIuaW5kZXhPZih1KSE9PS0xKXJldHVybnt0eXBlOiJhbGlnbiIsYWxpZ246dX07aWYodT09PSJ8IilyZXR1cm57dHlwZToic2VwYXJhdG9yIixzZXBhcmF0b3I6InwifTtpZih1PT09IjoiKXJldHVybnt0eXBlOiJzZXBhcmF0b3IiLHNlcGFyYXRvcjoiOiJ9O3Rocm93IG5ldyBsdCgiVW5rbm93biBjb2x1bW4gYWxpZ25tZW50OiAiK3Uscyl9KSxhPXtjb2xzOmksaHNraXBCZWZvcmVBbmRBZnRlcjohMCxtYXhOdW1Db2xzOmkubGVuZ3RofTtyZXR1cm4geGgodC5wYXJzZXIsYSxIQyh0LmVudk5hbWUpKX0saHRtbEJ1aWxkZXI6aGMsbWF0aG1sQnVpbGRlcjpmY30pO3VjKHt0eXBlOiJhcnJheSIsbmFtZXM6WyJtYXRyaXgiLCJwbWF0cml4IiwiYm1hdHJpeCIsIkJtYXRyaXgiLCJ2bWF0cml4IiwiVm1hdHJpeCIsIm1hdHJpeCoiLCJwbWF0cml4KiIsImJtYXRyaXgqIiwiQm1hdHJpeCoiLCJ2bWF0cml4KiIsIlZtYXRyaXgqIl0scHJvcHM6e251bUFyZ3M6MH0saGFuZGxlcih0KXt2YXIgZT17bWF0cml4Om51bGwscG1hdHJpeDpbIigiLCIpIl0sYm1hdHJpeDpbIlsiLCJdIl0sQm1hdHJpeDpbIlxceyIsIlxcfSJdLHZtYXRyaXg6WyJ8IiwifCJdLFZtYXRyaXg6WyJcXFZlcnQiLCJcXFZlcnQiXX1bdC5lbnZOYW1lLnJlcGxhY2UoIioiLCIiKV0scj0iYyIsbj17aHNraXBCZWZvcmVBbmRBZnRlcjohMSxjb2xzOlt7dHlwZToiYWxpZ24iLGFsaWduOnJ9XX07aWYodC5lbnZOYW1lLmNoYXJBdCh0LmVudk5hbWUubGVuZ3RoLTEpPT09IioiKXt2YXIgaT10LnBhcnNlcjtpZihpLmNvbnN1bWVTcGFjZXMoKSxpLmZldGNoKCkudGV4dD09PSJbIil7aWYoaS5jb25zdW1lKCksaS5jb25zdW1lU3BhY2VzKCkscj1pLmZldGNoKCkudGV4dCwibGNyIi5pbmRleE9mKHIpPT09LTEpdGhyb3cgbmV3IGx0KCJFeHBlY3RlZCBsIG9yIGMgb3IgciIsaS5uZXh0VG9rZW4pO2kuY29uc3VtZSgpLGkuY29uc3VtZVNwYWNlcygpLGkuZXhwZWN0KCJdIiksaS5jb25zdW1lKCksbi5jb2xzPVt7dHlwZToiYWxpZ24iLGFsaWduOnJ9XX19dmFyIGE9eGgodC5wYXJzZXIsbixIQyh0LmVudk5hbWUpKSxzPU1hdGgubWF4KDAsLi4uYS5ib2R5Lm1hcChsPT5sLmxlbmd0aCkpO3JldHVybiBhLmNvbHM9bmV3IEFycmF5KHMpLmZpbGwoe3R5cGU6ImFsaWduIixhbGlnbjpyfSksZT97dHlwZToibGVmdHJpZ2h0Iixtb2RlOnQubW9kZSxib2R5OlthXSxsZWZ0OmVbMF0scmlnaHQ6ZVsxXSxyaWdodENvbG9yOnZvaWQgMH06YX0saHRtbEJ1aWxkZXI6aGMsbWF0aG1sQnVpbGRlcjpmY30pO3VjKHt0eXBlOiJhcnJheSIsbmFtZXM6WyJzbWFsbG1hdHJpeCJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXIodCl7dmFyIGU9e2FycmF5c3RyZXRjaDouNX0scj14aCh0LnBhcnNlcixlLCJzY3JpcHQiKTtyZXR1cm4gci5jb2xTZXBhcmF0aW9uVHlwZT0ic21hbGwiLHJ9LGh0bWxCdWlsZGVyOmhjLG1hdGhtbEJ1aWxkZXI6ZmN9KTt1Yyh7dHlwZToiYXJyYXkiLG5hbWVzOlsic3ViYXJyYXkiXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyKHQsZSl7dmFyIHI9TjQoZVswXSksbj1yP1tlWzBdXTpncihlWzBdLCJvcmRncm91cCIpLmJvZHksaT1uLm1hcChmdW5jdGlvbihzKXt2YXIgbD1GQyhzKSx1PWwudGV4dDtpZigibGMiLmluZGV4T2YodSkhPT0tMSlyZXR1cm57dHlwZToiYWxpZ24iLGFsaWduOnV9O3Rocm93IG5ldyBsdCgiVW5rbm93biBjb2x1bW4gYWxpZ25tZW50OiAiK3Uscyl9KTtpZihpLmxlbmd0aD4xKXRocm93IG5ldyBsdCgie3N1YmFycmF5fSBjYW4gY29udGFpbiBvbmx5IG9uZSBjb2x1bW4iKTt2YXIgYT17Y29sczppLGhza2lwQmVmb3JlQW5kQWZ0ZXI6ITEsYXJyYXlzdHJldGNoOi41fTtpZihhPXhoKHQucGFyc2VyLGEsInNjcmlwdCIpLGEuYm9keS5sZW5ndGg+MCYmYS5ib2R5WzBdLmxlbmd0aD4xKXRocm93IG5ldyBsdCgie3N1YmFycmF5fSBjYW4gY29udGFpbiBvbmx5IG9uZSBjb2x1bW4iKTtyZXR1cm4gYX0saHRtbEJ1aWxkZXI6aGMsbWF0aG1sQnVpbGRlcjpmY30pO3VjKHt0eXBlOiJhcnJheSIsbmFtZXM6WyJjYXNlcyIsImRjYXNlcyIsInJjYXNlcyIsImRyY2FzZXMiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKHQpe3ZhciBlPXthcnJheXN0cmV0Y2g6MS4yLGNvbHM6W3t0eXBlOiJhbGlnbiIsYWxpZ246ImwiLHByZWdhcDowLHBvc3RnYXA6MX0se3R5cGU6ImFsaWduIixhbGlnbjoibCIscHJlZ2FwOjAscG9zdGdhcDowfV19LHI9eGgodC5wYXJzZXIsZSxIQyh0LmVudk5hbWUpKTtyZXR1cm57dHlwZToibGVmdHJpZ2h0Iixtb2RlOnQubW9kZSxib2R5OltyXSxsZWZ0OnQuZW52TmFtZS5pbmRleE9mKCJyIik+LTE/Ii4iOiJcXHsiLHJpZ2h0OnQuZW52TmFtZS5pbmRleE9mKCJyIik+LTE/IlxcfSI6Ii4iLHJpZ2h0Q29sb3I6dm9pZCAwfX0saHRtbEJ1aWxkZXI6aGMsbWF0aG1sQnVpbGRlcjpmY30pO3VjKHt0eXBlOiJhcnJheSIsbmFtZXM6WyJhbGlnbiIsImFsaWduKiIsImFsaWduZWQiLCJzcGxpdCJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXI6ZiQsaHRtbEJ1aWxkZXI6aGMsbWF0aG1sQnVpbGRlcjpmY30pO3VjKHt0eXBlOiJhcnJheSIsbmFtZXM6WyJnYXRoZXJlZCIsImdhdGhlciIsImdhdGhlcioiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKHQpe0p0LmNvbnRhaW5zKFsiZ2F0aGVyIiwiZ2F0aGVyKiJdLHQuZW52TmFtZSkmJkk0KHQpO3ZhciBlPXtjb2xzOlt7dHlwZToiYWxpZ24iLGFsaWduOiJjIn1dLGFkZEpvdDohMCxjb2xTZXBhcmF0aW9uVHlwZToiZ2F0aGVyIixhdXRvVGFnOlVDKHQuZW52TmFtZSksZW1wdHlTaW5nbGVSb3c6ITAsbGVxbm86dC5wYXJzZXIuc2V0dGluZ3MubGVxbm99O3JldHVybiB4aCh0LnBhcnNlcixlLCJkaXNwbGF5Iil9LGh0bWxCdWlsZGVyOmhjLG1hdGhtbEJ1aWxkZXI6ZmN9KTt1Yyh7dHlwZToiYXJyYXkiLG5hbWVzOlsiYWxpZ25hdCIsImFsaWduYXQqIiwiYWxpZ25lZGF0Il0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcjpmJCxodG1sQnVpbGRlcjpoYyxtYXRobWxCdWlsZGVyOmZjfSk7dWMoe3R5cGU6ImFycmF5IixuYW1lczpbImVxdWF0aW9uIiwiZXF1YXRpb24qIl0scHJvcHM6e251bUFyZ3M6MH0saGFuZGxlcih0KXtJNCh0KTt2YXIgZT17YXV0b1RhZzpVQyh0LmVudk5hbWUpLGVtcHR5U2luZ2xlUm93OiEwLHNpbmdsZVJvdzohMCxtYXhOdW1Db2xzOjEsbGVxbm86dC5wYXJzZXIuc2V0dGluZ3MubGVxbm99O3JldHVybiB4aCh0LnBhcnNlcixlLCJkaXNwbGF5Iil9LGh0bWxCdWlsZGVyOmhjLG1hdGhtbEJ1aWxkZXI6ZmN9KTt1Yyh7dHlwZToiYXJyYXkiLG5hbWVzOlsiQ0QiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKHQpe3JldHVybiBJNCh0KSxwNGUodC5wYXJzZXIpfSxodG1sQnVpbGRlcjpoYyxtYXRobWxCdWlsZGVyOmZjfSk7bGUoIlxcbm9udW1iZXIiLCJcXGdkZWZcXEBlcW5zd3swfSIpO2xlKCJcXG5vdGFnIiwiXFxub251bWJlciIpO1N0KHt0eXBlOiJ0ZXh0IixuYW1lczpbIlxcaGxpbmUiLCJcXGhkYXNobGluZSJdLHByb3BzOntudW1BcmdzOjAsYWxsb3dlZEluVGV4dDohMCxhbGxvd2VkSW5NYXRoOiEwfSxoYW5kbGVyKHQsZSl7dGhyb3cgbmV3IGx0KHQuZnVuY05hbWUrIiB2YWxpZCBvbmx5IHdpdGhpbiBhcnJheSBlbnZpcm9ubWVudCIpfX0pO3lHPXUkO1N0KHt0eXBlOiJlbnZpcm9ubWVudCIsbmFtZXM6WyJcXGJlZ2luIiwiXFxlbmQiXSxwcm9wczp7bnVtQXJnczoxLGFyZ1R5cGVzOlsidGV4dCJdfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQsaT1lWzBdO2lmKGkudHlwZSE9PSJvcmRncm91cCIpdGhyb3cgbmV3IGx0KCJJbnZhbGlkIGVudmlyb25tZW50IG5hbWUiLGkpO2Zvcih2YXIgYT0iIixzPTA7czxpLmJvZHkubGVuZ3RoOysrcylhKz1ncihpLmJvZHlbc10sInRleHRvcmQiKS50ZXh0O2lmKG49PT0iXFxiZWdpbiIpe2lmKCF5Ry5oYXNPd25Qcm9wZXJ0eShhKSl0aHJvdyBuZXcgbHQoIk5vIHN1Y2ggZW52aXJvbm1lbnQ6ICIrYSxpKTt2YXIgbD15R1thXSx7YXJnczp1LG9wdEFyZ3M6aH09ci5wYXJzZUFyZ3VtZW50cygiXFxiZWdpbnsiK2ErIn0iLGwpLGY9e21vZGU6ci5tb2RlLGVudk5hbWU6YSxwYXJzZXI6cn0sZD1sLmhhbmRsZXIoZix1LGgpO3IuZXhwZWN0KCJcXGVuZCIsITEpO3ZhciBwPXIubmV4dFRva2VuLG09Z3Ioci5wYXJzZUZ1bmN0aW9uKCksImVudmlyb25tZW50Iik7aWYobS5uYW1lIT09YSl0aHJvdyBuZXcgbHQoIk1pc21hdGNoOiBcXGJlZ2lueyIrYSsifSBtYXRjaGVkIGJ5IFxcZW5keyIrbS5uYW1lKyJ9IixwKTtyZXR1cm4gZH1yZXR1cm57dHlwZToiZW52aXJvbm1lbnQiLG1vZGU6ci5tb2RlLG5hbWU6YSxuYW1lR3JvdXA6aX19fSk7ZCQ9bygodCxlKT0+e3ZhciByPXQuZm9udCxuPWUud2l0aEZvbnQocik7cmV0dXJuIFByKHQuYm9keSxuKX0sImh0bWxCdWlsZGVyJDUiKSxwJD1vKCh0LGUpPT57dmFyIHI9dC5mb250LG49ZS53aXRoRm9udChyKTtyZXR1cm4geW4odC5ib2R5LG4pfSwibWF0aG1sQnVpbGRlciQ0Iiksdkc9eyJcXEJiYiI6IlxcbWF0aGJiIiwiXFxib2xkIjoiXFxtYXRoYmYiLCJcXGZyYWsiOiJcXG1hdGhmcmFrIiwiXFxibSI6IlxcYm9sZHN5bWJvbCJ9O1N0KHt0eXBlOiJmb250IixuYW1lczpbIlxcbWF0aHJtIiwiXFxtYXRoaXQiLCJcXG1hdGhiZiIsIlxcbWF0aG5vcm1hbCIsIlxcbWF0aGJiIiwiXFxtYXRoY2FsIiwiXFxtYXRoZnJhayIsIlxcbWF0aHNjciIsIlxcbWF0aHNmIiwiXFxtYXRodHQiLCJcXEJiYiIsIlxcYm9sZCIsIlxcZnJhayJdLHByb3BzOntudW1BcmdzOjEsYWxsb3dlZEluQXJndW1lbnQ6ITB9LGhhbmRsZXI6bygodCxlKT0+e3ZhcntwYXJzZXI6cixmdW5jTmFtZTpufT10LGk9QzQoZVswXSksYT1uO3JldHVybiBhIGluIHZHJiYoYT12R1thXSkse3R5cGU6ImZvbnQiLG1vZGU6ci5tb2RlLGZvbnQ6YS5zbGljZSgxKSxib2R5Oml9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOmQkLG1hdGhtbEJ1aWxkZXI6cCR9KTtTdCh7dHlwZToibWNsYXNzIixuYW1lczpbIlxcYm9sZHN5bWJvbCIsIlxcYm0iXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnJ9PXQsbj1lWzBdLGk9SnQuaXNDaGFyYWN0ZXJCb3gobik7cmV0dXJue3R5cGU6Im1jbGFzcyIsbW9kZTpyLm1vZGUsbWNsYXNzOlI0KG4pLGJvZHk6W3t0eXBlOiJmb250Iixtb2RlOnIubW9kZSxmb250OiJib2xkc3ltYm9sIixib2R5Om59XSxpc0NoYXJhY3RlckJveDppfX0sImhhbmRsZXIiKX0pO1N0KHt0eXBlOiJmb250IixuYW1lczpbIlxccm0iLCJcXHNmIiwiXFx0dCIsIlxcYmYiLCJcXGl0IiwiXFxjYWwiXSxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6bygodCxlKT0+e3ZhcntwYXJzZXI6cixmdW5jTmFtZTpuLGJyZWFrT25Ub2tlblRleHQ6aX09dCx7bW9kZTphfT1yLHM9ci5wYXJzZUV4cHJlc3Npb24oITAsaSksbD0ibWF0aCIrbi5zbGljZSgxKTtyZXR1cm57dHlwZToiZm9udCIsbW9kZTphLGZvbnQ6bCxib2R5Ont0eXBlOiJvcmRncm91cCIsbW9kZTpyLm1vZGUsYm9keTpzfX19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6ZCQsbWF0aG1sQnVpbGRlcjpwJH0pO20kPW8oKHQsZSk9Pnt2YXIgcj1lO3JldHVybiB0PT09ImRpc3BsYXkiP3I9ci5pZD49cnIuU0NSSVBULmlkP3IudGV4dCgpOnJyLkRJU1BMQVk6dD09PSJ0ZXh0IiYmci5zaXplPT09cnIuRElTUExBWS5zaXplP3I9cnIuVEVYVDp0PT09InNjcmlwdCI/cj1yci5TQ1JJUFQ6dD09PSJzY3JpcHRzY3JpcHQiJiYocj1yci5TQ1JJUFRTQ1JJUFQpLHJ9LCJhZGp1c3RTdHlsZSIpLFdDPW8oKHQsZSk9Pnt2YXIgcj1tJCh0LnNpemUsZS5zdHlsZSksbj1yLmZyYWNOdW0oKSxpPXIuZnJhY0RlbigpLGE7YT1lLmhhdmluZ1N0eWxlKG4pO3ZhciBzPVByKHQubnVtZXIsYSxlKTtpZih0LmNvbnRpbnVlZCl7dmFyIGw9OC41L2UuZm9udE1ldHJpY3MoKS5wdFBlckVtLHU9My41L2UuZm9udE1ldHJpY3MoKS5wdFBlckVtO3MuaGVpZ2h0PXMuaGVpZ2h0PGw/bDpzLmhlaWdodCxzLmRlcHRoPXMuZGVwdGg8dT91OnMuZGVwdGh9YT1lLmhhdmluZ1N0eWxlKGkpO3ZhciBoPVByKHQuZGVub20sYSxlKSxmLGQscDt0Lmhhc0JhckxpbmU/KHQuYmFyU2l6ZT8oZD1Kbih0LmJhclNpemUsZSksZj1GZS5tYWtlTGluZVNwYW4oImZyYWMtbGluZSIsZSxkKSk6Zj1GZS5tYWtlTGluZVNwYW4oImZyYWMtbGluZSIsZSksZD1mLmhlaWdodCxwPWYuaGVpZ2h0KTooZj1udWxsLGQ9MCxwPWUuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcyk7dmFyIG0sZyx5O3Iuc2l6ZT09PXJyLkRJU1BMQVkuc2l6ZXx8dC5zaXplPT09ImRpc3BsYXkiPyhtPWUuZm9udE1ldHJpY3MoKS5udW0xLGQ+MD9nPTMqcDpnPTcqcCx5PWUuZm9udE1ldHJpY3MoKS5kZW5vbTEpOihkPjA/KG09ZS5mb250TWV0cmljcygpLm51bTIsZz1wKToobT1lLmZvbnRNZXRyaWNzKCkubnVtMyxnPTMqcCkseT1lLmZvbnRNZXRyaWNzKCkuZGVub20yKTt2YXIgdjtpZihmKXt2YXIgYj1lLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodDttLXMuZGVwdGgtKGIrLjUqZCk8ZyYmKG0rPWctKG0tcy5kZXB0aC0oYisuNSpkKSkpLGItLjUqZC0oaC5oZWlnaHQteSk8ZyYmKHkrPWctKGItLjUqZC0oaC5oZWlnaHQteSkpKTt2YXIgdz0tKGItLjUqZCk7dj1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiaW5kaXZpZHVhbFNoaWZ0IixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06aCxzaGlmdDp5fSx7dHlwZToiZWxlbSIsZWxlbTpmLHNoaWZ0Ond9LHt0eXBlOiJlbGVtIixlbGVtOnMsc2hpZnQ6LW19XX0sZSl9ZWxzZXt2YXIgeD1tLXMuZGVwdGgtKGguaGVpZ2h0LXkpO3g8ZyYmKG0rPS41KihnLXgpLHkrPS41KihnLXgpKSx2PUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTpoLHNoaWZ0Onl9LHt0eXBlOiJlbGVtIixlbGVtOnMsc2hpZnQ6LW19XX0sZSl9YT1lLmhhdmluZ1N0eWxlKHIpLHYuaGVpZ2h0Kj1hLnNpemVNdWx0aXBsaWVyL2Uuc2l6ZU11bHRpcGxpZXIsdi5kZXB0aCo9YS5zaXplTXVsdGlwbGllci9lLnNpemVNdWx0aXBsaWVyO3ZhciBfO3Iuc2l6ZT09PXJyLkRJU1BMQVkuc2l6ZT9fPWUuZm9udE1ldHJpY3MoKS5kZWxpbTE6ci5zaXplPT09cnIuU0NSSVBUU0NSSVBULnNpemU/Xz1lLmhhdmluZ1N0eWxlKHJyLlNDUklQVCkuZm9udE1ldHJpY3MoKS5kZWxpbTI6Xz1lLmZvbnRNZXRyaWNzKCkuZGVsaW0yO3ZhciBULEU7cmV0dXJuIHQubGVmdERlbGltPT1udWxsP1Q9eXkoZSxbIm1vcGVuIl0pOlQ9ZHUuY3VzdG9tU2l6ZWREZWxpbSh0LmxlZnREZWxpbSxfLCEwLGUuaGF2aW5nU3R5bGUociksdC5tb2RlLFsibW9wZW4iXSksdC5jb250aW51ZWQ/RT1GZS5tYWtlU3BhbihbXSk6dC5yaWdodERlbGltPT1udWxsP0U9eXkoZSxbIm1jbG9zZSJdKTpFPWR1LmN1c3RvbVNpemVkRGVsaW0odC5yaWdodERlbGltLF8sITAsZS5oYXZpbmdTdHlsZShyKSx0Lm1vZGUsWyJtY2xvc2UiXSksRmUubWFrZVNwYW4oWyJtb3JkIl0uY29uY2F0KGEuc2l6aW5nQ2xhc3NlcyhlKSksW1QsRmUubWFrZVNwYW4oWyJtZnJhYyJdLFt2XSksRV0sZSl9LCJodG1sQnVpbGRlciQ0IiksWUM9bygodCxlKT0+e3ZhciByPW5ldyBhdC5NYXRoTm9kZSgibWZyYWMiLFt5bih0Lm51bWVyLGUpLHluKHQuZGVub20sZSldKTtpZighdC5oYXNCYXJMaW5lKXIuc2V0QXR0cmlidXRlKCJsaW5ldGhpY2tuZXNzIiwiMHB4Iik7ZWxzZSBpZih0LmJhclNpemUpe3ZhciBuPUpuKHQuYmFyU2l6ZSxlKTtyLnNldEF0dHJpYnV0ZSgibGluZXRoaWNrbmVzcyIsZ3QobikpfXZhciBpPW0kKHQuc2l6ZSxlLnN0eWxlKTtpZihpLnNpemUhPT1lLnN0eWxlLnNpemUpe3I9bmV3IGF0Lk1hdGhOb2RlKCJtc3R5bGUiLFtyXSk7dmFyIGE9aS5zaXplPT09cnIuRElTUExBWS5zaXplPyJ0cnVlIjoiZmFsc2UiO3Iuc2V0QXR0cmlidXRlKCJkaXNwbGF5c3R5bGUiLGEpLHIuc2V0QXR0cmlidXRlKCJzY3JpcHRsZXZlbCIsIjAiKX1pZih0LmxlZnREZWxpbSE9bnVsbHx8dC5yaWdodERlbGltIT1udWxsKXt2YXIgcz1bXTtpZih0LmxlZnREZWxpbSE9bnVsbCl7dmFyIGw9bmV3IGF0Lk1hdGhOb2RlKCJtbyIsW25ldyBhdC5UZXh0Tm9kZSh0LmxlZnREZWxpbS5yZXBsYWNlKCJcXCIsIiIpKV0pO2wuc2V0QXR0cmlidXRlKCJmZW5jZSIsInRydWUiKSxzLnB1c2gobCl9aWYocy5wdXNoKHIpLHQucmlnaHREZWxpbSE9bnVsbCl7dmFyIHU9bmV3IGF0Lk1hdGhOb2RlKCJtbyIsW25ldyBhdC5UZXh0Tm9kZSh0LnJpZ2h0RGVsaW0ucmVwbGFjZSgiXFwiLCIiKSldKTt1LnNldEF0dHJpYnV0ZSgiZmVuY2UiLCJ0cnVlIikscy5wdXNoKHUpfXJldHVybiBQQyhzKX1yZXR1cm4gcn0sIm1hdGhtbEJ1aWxkZXIkMyIpO1N0KHt0eXBlOiJnZW5mcmFjIixuYW1lczpbIlxcZGZyYWMiLCJcXGZyYWMiLCJcXHRmcmFjIiwiXFxkYmlub20iLCJcXGJpbm9tIiwiXFx0Ymlub20iLCJcXFxcYXRvcGZyYWMiLCJcXFxcYnJhY2VmcmFjIiwiXFxcXGJyYWNrZnJhYyJdLHByb3BzOntudW1BcmdzOjIsYWxsb3dlZEluQXJndW1lbnQ6ITB9LGhhbmRsZXI6bygodCxlKT0+e3ZhcntwYXJzZXI6cixmdW5jTmFtZTpufT10LGk9ZVswXSxhPWVbMV0scyxsPW51bGwsdT1udWxsLGg9ImF1dG8iO3N3aXRjaChuKXtjYXNlIlxcZGZyYWMiOmNhc2UiXFxmcmFjIjpjYXNlIlxcdGZyYWMiOnM9ITA7YnJlYWs7Y2FzZSJcXFxcYXRvcGZyYWMiOnM9ITE7YnJlYWs7Y2FzZSJcXGRiaW5vbSI6Y2FzZSJcXGJpbm9tIjpjYXNlIlxcdGJpbm9tIjpzPSExLGw9IigiLHU9IikiO2JyZWFrO2Nhc2UiXFxcXGJyYWNlZnJhYyI6cz0hMSxsPSJcXHsiLHU9IlxcfSI7YnJlYWs7Y2FzZSJcXFxcYnJhY2tmcmFjIjpzPSExLGw9IlsiLHU9Il0iO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgZ2VuZnJhYyBjb21tYW5kIil9c3dpdGNoKG4pe2Nhc2UiXFxkZnJhYyI6Y2FzZSJcXGRiaW5vbSI6aD0iZGlzcGxheSI7YnJlYWs7Y2FzZSJcXHRmcmFjIjpjYXNlIlxcdGJpbm9tIjpoPSJ0ZXh0IjticmVha31yZXR1cm57dHlwZToiZ2VuZnJhYyIsbW9kZTpyLm1vZGUsY29udGludWVkOiExLG51bWVyOmksZGVub206YSxoYXNCYXJMaW5lOnMsbGVmdERlbGltOmwscmlnaHREZWxpbTp1LHNpemU6aCxiYXJTaXplOm51bGx9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOldDLG1hdGhtbEJ1aWxkZXI6WUN9KTtTdCh7dHlwZToiZ2VuZnJhYyIsbmFtZXM6WyJcXGNmcmFjIl0scHJvcHM6e251bUFyZ3M6Mn0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQsaT1lWzBdLGE9ZVsxXTtyZXR1cm57dHlwZToiZ2VuZnJhYyIsbW9kZTpyLm1vZGUsY29udGludWVkOiEwLG51bWVyOmksZGVub206YSxoYXNCYXJMaW5lOiEwLGxlZnREZWxpbTpudWxsLHJpZ2h0RGVsaW06bnVsbCxzaXplOiJkaXNwbGF5IixiYXJTaXplOm51bGx9fSwiaGFuZGxlciIpfSk7U3Qoe3R5cGU6ImluZml4IixuYW1lczpbIlxcb3ZlciIsIlxcY2hvb3NlIiwiXFxhdG9wIiwiXFxicmFjZSIsIlxcYnJhY2siXSxwcm9wczp7bnVtQXJnczowLGluZml4OiEwfSxoYW5kbGVyKHQpe3ZhcntwYXJzZXI6ZSxmdW5jTmFtZTpyLHRva2VuOm59PXQsaTtzd2l0Y2gocil7Y2FzZSJcXG92ZXIiOmk9IlxcZnJhYyI7YnJlYWs7Y2FzZSJcXGNob29zZSI6aT0iXFxiaW5vbSI7YnJlYWs7Y2FzZSJcXGF0b3AiOmk9IlxcXFxhdG9wZnJhYyI7YnJlYWs7Y2FzZSJcXGJyYWNlIjppPSJcXFxcYnJhY2VmcmFjIjticmVhaztjYXNlIlxcYnJhY2siOmk9IlxcXFxicmFja2ZyYWMiO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgaW5maXggZ2VuZnJhYyBjb21tYW5kIil9cmV0dXJue3R5cGU6ImluZml4Iixtb2RlOmUubW9kZSxyZXBsYWNlV2l0aDppLHRva2VuOm59fX0pO3hHPVsiZGlzcGxheSIsInRleHQiLCJzY3JpcHQiLCJzY3JpcHRzY3JpcHQiXSxiRz1vKGZ1bmN0aW9uKGUpe3ZhciByPW51bGw7cmV0dXJuIGUubGVuZ3RoPjAmJihyPWUscj1yPT09Ii4iP251bGw6cikscn0sImRlbGltRnJvbVZhbHVlIik7U3Qoe3R5cGU6ImdlbmZyYWMiLG5hbWVzOlsiXFxnZW5mcmFjIl0scHJvcHM6e251bUFyZ3M6NixhbGxvd2VkSW5Bcmd1bWVudDohMCxhcmdUeXBlczpbIm1hdGgiLCJtYXRoIiwic2l6ZSIsInRleHQiLCJtYXRoIiwibWF0aCJdfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyfT10LG49ZVs0XSxpPWVbNV0sYT1DNChlWzBdKSxzPWEudHlwZT09PSJhdG9tIiYmYS5mYW1pbHk9PT0ib3BlbiI/YkcoYS50ZXh0KTpudWxsLGw9QzQoZVsxXSksdT1sLnR5cGU9PT0iYXRvbSImJmwuZmFtaWx5PT09ImNsb3NlIj9iRyhsLnRleHQpOm51bGwsaD1ncihlWzJdLCJzaXplIiksZixkPW51bGw7aC5pc0JsYW5rP2Y9ITA6KGQ9aC52YWx1ZSxmPWQubnVtYmVyPjApO3ZhciBwPSJhdXRvIixtPWVbM107aWYobS50eXBlPT09Im9yZGdyb3VwIil7aWYobS5ib2R5Lmxlbmd0aD4wKXt2YXIgZz1ncihtLmJvZHlbMF0sInRleHRvcmQiKTtwPXhHW051bWJlcihnLnRleHQpXX19ZWxzZSBtPWdyKG0sInRleHRvcmQiKSxwPXhHW051bWJlcihtLnRleHQpXTtyZXR1cm57dHlwZToiZ2VuZnJhYyIsbW9kZTpyLm1vZGUsbnVtZXI6bixkZW5vbTppLGNvbnRpbnVlZDohMSxoYXNCYXJMaW5lOmYsYmFyU2l6ZTpkLGxlZnREZWxpbTpzLHJpZ2h0RGVsaW06dSxzaXplOnB9fSxodG1sQnVpbGRlcjpXQyxtYXRobWxCdWlsZGVyOllDfSk7U3Qoe3R5cGU6ImluZml4IixuYW1lczpbIlxcYWJvdmUiXSxwcm9wczp7bnVtQXJnczoxLGFyZ1R5cGVzOlsic2l6ZSJdLGluZml4OiEwfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm4sdG9rZW46aX09dDtyZXR1cm57dHlwZToiaW5maXgiLG1vZGU6ci5tb2RlLHJlcGxhY2VXaXRoOiJcXFxcYWJvdmVmcmFjIixzaXplOmdyKGVbMF0sInNpemUiKS52YWx1ZSx0b2tlbjppfX19KTtTdCh7dHlwZToiZ2VuZnJhYyIsbmFtZXM6WyJcXFxcYWJvdmVmcmFjIl0scHJvcHM6e251bUFyZ3M6MyxhcmdUeXBlczpbIm1hdGgiLCJzaXplIiwibWF0aCJdfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnIsZnVuY05hbWU6bn09dCxpPWVbMF0sYT1vYmUoZ3IoZVsxXSwiaW5maXgiKS5zaXplKSxzPWVbMl0sbD1hLm51bWJlcj4wO3JldHVybnt0eXBlOiJnZW5mcmFjIixtb2RlOnIubW9kZSxudW1lcjppLGRlbm9tOnMsY29udGludWVkOiExLGhhc0JhckxpbmU6bCxiYXJTaXplOmEsbGVmdERlbGltOm51bGwscmlnaHREZWxpbTpudWxsLHNpemU6ImF1dG8ifX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpXQyxtYXRobWxCdWlsZGVyOllDfSk7ZyQ9bygodCxlKT0+e3ZhciByPWUuc3R5bGUsbixpO3QudHlwZT09PSJzdXBzdWIiPyhuPXQuc3VwP1ByKHQuc3VwLGUuaGF2aW5nU3R5bGUoci5zdXAoKSksZSk6UHIodC5zdWIsZS5oYXZpbmdTdHlsZShyLnN1YigpKSxlKSxpPWdyKHQuYmFzZSwiaG9yaXpCcmFjZSIpKTppPWdyKHQsImhvcml6QnJhY2UiKTt2YXIgYT1QcihpLmJhc2UsZS5oYXZpbmdCYXNlU3R5bGUocnIuRElTUExBWSkpLHM9bXUuc3ZnU3BhbihpLGUpLGw7aWYoaS5pc092ZXI/KGw9RmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImZpcnN0QmFzZWxpbmUiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTphfSx7dHlwZToia2VybiIsc2l6ZTouMX0se3R5cGU6ImVsZW0iLGVsZW06c31dfSxlKSxsLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzFdLmNsYXNzZXMucHVzaCgic3ZnLWFsaWduIikpOihsPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJib3R0b20iLHBvc2l0aW9uRGF0YTphLmRlcHRoKy4xK3MuaGVpZ2h0LGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTpzfSx7dHlwZToia2VybiIsc2l6ZTouMX0se3R5cGU6ImVsZW0iLGVsZW06YX1dfSxlKSxsLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLmNsYXNzZXMucHVzaCgic3ZnLWFsaWduIikpLG4pe3ZhciB1PUZlLm1ha2VTcGFuKFsibW9yZCIsaS5pc092ZXI/Im1vdmVyIjoibXVuZGVyIl0sW2xdLGUpO2kuaXNPdmVyP2w9RmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImZpcnN0QmFzZWxpbmUiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTp1fSx7dHlwZToia2VybiIsc2l6ZTouMn0se3R5cGU6ImVsZW0iLGVsZW06bn1dfSxlKTpsPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJib3R0b20iLHBvc2l0aW9uRGF0YTp1LmRlcHRoKy4yK24uaGVpZ2h0K24uZGVwdGgsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOm59LHt0eXBlOiJrZXJuIixzaXplOi4yfSx7dHlwZToiZWxlbSIsZWxlbTp1fV19LGUpfXJldHVybiBGZS5tYWtlU3BhbihbIm1vcmQiLGkuaXNPdmVyPyJtb3ZlciI6Im11bmRlciJdLFtsXSxlKX0sImh0bWxCdWlsZGVyJDMiKSxMNGU9bygodCxlKT0+e3ZhciByPW11Lm1hdGhNTG5vZGUodC5sYWJlbCk7cmV0dXJuIG5ldyBhdC5NYXRoTm9kZSh0LmlzT3Zlcj8ibW92ZXIiOiJtdW5kZXIiLFt5bih0LmJhc2UsZSkscl0pfSwibWF0aG1sQnVpbGRlciQyIik7U3Qoe3R5cGU6Imhvcml6QnJhY2UiLG5hbWVzOlsiXFxvdmVyYnJhY2UiLCJcXHVuZGVyYnJhY2UiXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQ7cmV0dXJue3R5cGU6Imhvcml6QnJhY2UiLG1vZGU6ci5tb2RlLGxhYmVsOm4saXNPdmVyOi9eXFxvdmVyLy50ZXN0KG4pLGJhc2U6ZVswXX19LGh0bWxCdWlsZGVyOmckLG1hdGhtbEJ1aWxkZXI6TDRlfSk7U3Qoe3R5cGU6ImhyZWYiLG5hbWVzOlsiXFxocmVmIl0scHJvcHM6e251bUFyZ3M6MixhcmdUeXBlczpbInVybCIsIm9yaWdpbmFsIl0sYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyfT10LG49ZVsxXSxpPWdyKGVbMF0sInVybCIpLnVybDtyZXR1cm4gci5zZXR0aW5ncy5pc1RydXN0ZWQoe2NvbW1hbmQ6IlxcaHJlZiIsdXJsOml9KT97dHlwZToiaHJlZiIsbW9kZTpyLm1vZGUsaHJlZjppLGJvZHk6Z2kobil9OnIuZm9ybWF0VW5zdXBwb3J0ZWRDbWQoIlxcaHJlZiIpfSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj1GaSh0LmJvZHksZSwhMSk7cmV0dXJuIEZlLm1ha2VBbmNob3IodC5ocmVmLFtdLHIsZSl9LCJodG1sQnVpbGRlciIpLG1hdGhtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPXZoKHQuYm9keSxlKTtyZXR1cm4gciBpbnN0YW5jZW9mIGtzfHwocj1uZXcga3MoIm1yb3ciLFtyXSkpLHIuc2V0QXR0cmlidXRlKCJocmVmIix0LmhyZWYpLHJ9LCJtYXRobWxCdWlsZGVyIil9KTtTdCh7dHlwZToiaHJlZiIsbmFtZXM6WyJcXHVybCJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJ1cmwiXSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnJ9PXQsbj1ncihlWzBdLCJ1cmwiKS51cmw7aWYoIXIuc2V0dGluZ3MuaXNUcnVzdGVkKHtjb21tYW5kOiJcXHVybCIsdXJsOm59KSlyZXR1cm4gci5mb3JtYXRVbnN1cHBvcnRlZENtZCgiXFx1cmwiKTtmb3IodmFyIGk9W10sYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgcz1uW2FdO3M9PT0ifiImJihzPSJcXHRleHRhc2NpaXRpbGRlIiksaS5wdXNoKHt0eXBlOiJ0ZXh0b3JkIixtb2RlOiJ0ZXh0Iix0ZXh0OnN9KX12YXIgbD17dHlwZToidGV4dCIsbW9kZTpyLm1vZGUsZm9udDoiXFx0ZXh0dHQiLGJvZHk6aX07cmV0dXJue3R5cGU6ImhyZWYiLG1vZGU6ci5tb2RlLGhyZWY6bixib2R5OmdpKGwpfX0sImhhbmRsZXIiKX0pO1N0KHt0eXBlOiJoYm94IixuYW1lczpbIlxcaGJveCJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJ0ZXh0Il0sYWxsb3dlZEluVGV4dDohMCxwcmltaXRpdmU6ITB9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnJ9PXQ7cmV0dXJue3R5cGU6Imhib3giLG1vZGU6ci5tb2RlLGJvZHk6Z2koZVswXSl9fSxodG1sQnVpbGRlcih0LGUpe3ZhciByPUZpKHQuYm9keSxlLCExKTtyZXR1cm4gRmUubWFrZUZyYWdtZW50KHIpfSxtYXRobWxCdWlsZGVyKHQsZSl7cmV0dXJuIG5ldyBhdC5NYXRoTm9kZSgibXJvdyIsU3ModC5ib2R5LGUpKX19KTtTdCh7dHlwZToiaHRtbCIsbmFtZXM6WyJcXGh0bWxDbGFzcyIsIlxcaHRtbElkIiwiXFxodG1sU3R5bGUiLCJcXGh0bWxEYXRhIl0scHJvcHM6e251bUFyZ3M6MixhcmdUeXBlczpbInJhdyIsIm9yaWdpbmFsIl0sYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm4sdG9rZW46aX09dCxhPWdyKGVbMF0sInJhdyIpLnN0cmluZyxzPWVbMV07ci5zZXR0aW5ncy5zdHJpY3QmJnIuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KCJodG1sRXh0ZW5zaW9uIiwiSFRNTCBleHRlbnNpb24gaXMgZGlzYWJsZWQgb24gc3RyaWN0IG1vZGUiKTt2YXIgbCx1PXt9O3N3aXRjaChuKXtjYXNlIlxcaHRtbENsYXNzIjp1LmNsYXNzPWEsbD17Y29tbWFuZDoiXFxodG1sQ2xhc3MiLGNsYXNzOmF9O2JyZWFrO2Nhc2UiXFxodG1sSWQiOnUuaWQ9YSxsPXtjb21tYW5kOiJcXGh0bWxJZCIsaWQ6YX07YnJlYWs7Y2FzZSJcXGh0bWxTdHlsZSI6dS5zdHlsZT1hLGw9e2NvbW1hbmQ6IlxcaHRtbFN0eWxlIixzdHlsZTphfTticmVhaztjYXNlIlxcaHRtbERhdGEiOntmb3IodmFyIGg9YS5zcGxpdCgiLCIpLGY9MDtmPGgubGVuZ3RoO2YrKyl7dmFyIGQ9aFtmXS5zcGxpdCgiPSIpO2lmKGQubGVuZ3RoIT09Mil0aHJvdyBuZXcgbHQoIkVycm9yIHBhcnNpbmcga2V5LXZhbHVlIGZvciBcXGh0bWxEYXRhIik7dVsiZGF0YS0iK2RbMF0udHJpbSgpXT1kWzFdLnRyaW0oKX1sPXtjb21tYW5kOiJcXGh0bWxEYXRhIixhdHRyaWJ1dGVzOnV9O2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgaHRtbCBjb21tYW5kIil9cmV0dXJuIHIuc2V0dGluZ3MuaXNUcnVzdGVkKGwpP3t0eXBlOiJodG1sIixtb2RlOnIubW9kZSxhdHRyaWJ1dGVzOnUsYm9keTpnaShzKX06ci5mb3JtYXRVbnN1cHBvcnRlZENtZChuKX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9RmkodC5ib2R5LGUsITEpLG49WyJlbmNsb3NpbmciXTt0LmF0dHJpYnV0ZXMuY2xhc3MmJm4ucHVzaCguLi50LmF0dHJpYnV0ZXMuY2xhc3MudHJpbSgpLnNwbGl0KC9ccysvKSk7dmFyIGk9RmUubWFrZVNwYW4obixyLGUpO2Zvcih2YXIgYSBpbiB0LmF0dHJpYnV0ZXMpYSE9PSJjbGFzcyImJnQuYXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eShhKSYmaS5zZXRBdHRyaWJ1dGUoYSx0LmF0dHJpYnV0ZXNbYV0pO3JldHVybiBpfSwiaHRtbEJ1aWxkZXIiKSxtYXRobWxCdWlsZGVyOm8oKHQsZSk9PnZoKHQuYm9keSxlKSwibWF0aG1sQnVpbGRlciIpfSk7U3Qoe3R5cGU6Imh0bWxtYXRobWwiLG5hbWVzOlsiXFxodG1sQG1hdGhtbCJdLHByb3BzOntudW1BcmdzOjIsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyfT10O3JldHVybnt0eXBlOiJodG1sbWF0aG1sIixtb2RlOnIubW9kZSxodG1sOmdpKGVbMF0pLG1hdGhtbDpnaShlWzFdKX19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPUZpKHQuaHRtbCxlLCExKTtyZXR1cm4gRmUubWFrZUZyYWdtZW50KHIpfSwiaHRtbEJ1aWxkZXIiKSxtYXRobWxCdWlsZGVyOm8oKHQsZSk9PnZoKHQubWF0aG1sLGUpLCJtYXRobWxCdWlsZGVyIil9KTt5Qz1vKGZ1bmN0aW9uKGUpe2lmKC9eWy0rXT8gKihcZCsoXC5cZCopP3xcLlxkKykkLy50ZXN0KGUpKXJldHVybntudW1iZXI6K2UsdW5pdDoiYnAifTt2YXIgcj0vKFstK10/KSAqKFxkKyg/OlwuXGQqKT98XC5cZCspICooW2Etel17Mn0pLy5leGVjKGUpO2lmKCFyKXRocm93IG5ldyBsdCgiSW52YWxpZCBzaXplOiAnIitlKyInIGluIFxcaW5jbHVkZWdyYXBoaWNzIik7dmFyIG49e251bWJlcjorKHJbMV0rclsyXSksdW5pdDpyWzNdfTtpZighT0cobikpdGhyb3cgbmV3IGx0KCJJbnZhbGlkIHVuaXQ6ICciK24udW5pdCsiJyBpbiBcXGluY2x1ZGVncmFwaGljcy4iKTtyZXR1cm4gbn0sInNpemVEYXRhIik7U3Qoe3R5cGU6ImluY2x1ZGVncmFwaGljcyIsbmFtZXM6WyJcXGluY2x1ZGVncmFwaGljcyJdLHByb3BzOntudW1BcmdzOjEsbnVtT3B0aW9uYWxBcmdzOjEsYXJnVHlwZXM6WyJyYXciLCJ1cmwiXSxhbGxvd2VkSW5UZXh0OiExfSxoYW5kbGVyOm8oKHQsZSxyKT0+e3ZhcntwYXJzZXI6bn09dCxpPXtudW1iZXI6MCx1bml0OiJlbSJ9LGE9e251bWJlcjouOSx1bml0OiJlbSJ9LHM9e251bWJlcjowLHVuaXQ6ImVtIn0sbD0iIjtpZihyWzBdKWZvcih2YXIgdT1ncihyWzBdLCJyYXciKS5zdHJpbmcsaD11LnNwbGl0KCIsIiksZj0wO2Y8aC5sZW5ndGg7ZisrKXt2YXIgZD1oW2ZdLnNwbGl0KCI9Iik7aWYoZC5sZW5ndGg9PT0yKXt2YXIgcD1kWzFdLnRyaW0oKTtzd2l0Y2goZFswXS50cmltKCkpe2Nhc2UiYWx0IjpsPXA7YnJlYWs7Y2FzZSJ3aWR0aCI6aT15QyhwKTticmVhaztjYXNlImhlaWdodCI6YT15QyhwKTticmVhaztjYXNlInRvdGFsaGVpZ2h0IjpzPXlDKHApO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IGx0KCJJbnZhbGlkIGtleTogJyIrZFswXSsiJyBpbiBcXGluY2x1ZGVncmFwaGljcy4iKX19fXZhciBtPWdyKGVbMF0sInVybCIpLnVybDtyZXR1cm4gbD09PSIiJiYobD1tLGw9bC5yZXBsYWNlKC9eLipbXFwvXS8sIiIpLGw9bC5zdWJzdHJpbmcoMCxsLmxhc3RJbmRleE9mKCIuIikpKSxuLnNldHRpbmdzLmlzVHJ1c3RlZCh7Y29tbWFuZDoiXFxpbmNsdWRlZ3JhcGhpY3MiLHVybDptfSk/e3R5cGU6ImluY2x1ZGVncmFwaGljcyIsbW9kZTpuLm1vZGUsYWx0Omwsd2lkdGg6aSxoZWlnaHQ6YSx0b3RhbGhlaWdodDpzLHNyYzptfTpuLmZvcm1hdFVuc3VwcG9ydGVkQ21kKCJcXGluY2x1ZGVncmFwaGljcyIpfSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj1Kbih0LmhlaWdodCxlKSxuPTA7dC50b3RhbGhlaWdodC5udW1iZXI+MCYmKG49Sm4odC50b3RhbGhlaWdodCxlKS1yKTt2YXIgaT0wO3Qud2lkdGgubnVtYmVyPjAmJihpPUpuKHQud2lkdGgsZSkpO3ZhciBhPXtoZWlnaHQ6Z3QocituKX07aT4wJiYoYS53aWR0aD1ndChpKSksbj4wJiYoYS52ZXJ0aWNhbEFsaWduPWd0KC1uKSk7dmFyIHM9bmV3IGtDKHQuc3JjLHQuYWx0LGEpO3JldHVybiBzLmhlaWdodD1yLHMuZGVwdGg9bixzfSwiaHRtbEJ1aWxkZXIiKSxtYXRobWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj1uZXcgYXQuTWF0aE5vZGUoIm1nbHlwaCIsW10pO3Iuc2V0QXR0cmlidXRlKCJhbHQiLHQuYWx0KTt2YXIgbj1Kbih0LmhlaWdodCxlKSxpPTA7aWYodC50b3RhbGhlaWdodC5udW1iZXI+MCYmKGk9Sm4odC50b3RhbGhlaWdodCxlKS1uLHIuc2V0QXR0cmlidXRlKCJ2YWxpZ24iLGd0KC1pKSkpLHIuc2V0QXR0cmlidXRlKCJoZWlnaHQiLGd0KG4raSkpLHQud2lkdGgubnVtYmVyPjApe3ZhciBhPUpuKHQud2lkdGgsZSk7ci5zZXRBdHRyaWJ1dGUoIndpZHRoIixndChhKSl9cmV0dXJuIHIuc2V0QXR0cmlidXRlKCJzcmMiLHQuc3JjKSxyfSwibWF0aG1sQnVpbGRlciIpfSk7U3Qoe3R5cGU6Imtlcm4iLG5hbWVzOlsiXFxrZXJuIiwiXFxta2VybiIsIlxcaHNraXAiLCJcXG1za2lwIl0scHJvcHM6e251bUFyZ3M6MSxhcmdUeXBlczpbInNpemUiXSxwcmltaXRpdmU6ITAsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cixmdW5jTmFtZTpufT10LGk9Z3IoZVswXSwic2l6ZSIpO2lmKHIuc2V0dGluZ3Muc3RyaWN0KXt2YXIgYT1uWzFdPT09Im0iLHM9aS52YWx1ZS51bml0PT09Im11IjthPyhzfHxyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgibWF0aFZzVGV4dFVuaXRzIiwiTGFUZVgncyAiK24rIiBzdXBwb3J0cyBvbmx5IG11IHVuaXRzLCAiKygibm90ICIraS52YWx1ZS51bml0KyIgdW5pdHMiKSksci5tb2RlIT09Im1hdGgiJiZyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgibWF0aFZzVGV4dFVuaXRzIiwiTGFUZVgncyAiK24rIiB3b3JrcyBvbmx5IGluIG1hdGggbW9kZSIpKTpzJiZyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgibWF0aFZzVGV4dFVuaXRzIiwiTGFUZVgncyAiK24rIiBkb2Vzbid0IHN1cHBvcnQgbXUgdW5pdHMiKX1yZXR1cm57dHlwZToia2VybiIsbW9kZTpyLm1vZGUsZGltZW5zaW9uOmkudmFsdWV9fSxodG1sQnVpbGRlcih0LGUpe3JldHVybiBGZS5tYWtlR2x1ZSh0LmRpbWVuc2lvbixlKX0sbWF0aG1sQnVpbGRlcih0LGUpe3ZhciByPUpuKHQuZGltZW5zaW9uLGUpO3JldHVybiBuZXcgYXQuU3BhY2VOb2RlKHIpfX0pO1N0KHt0eXBlOiJsYXAiLG5hbWVzOlsiXFxtYXRobGxhcCIsIlxcbWF0aHJsYXAiLCJcXG1hdGhjbGFwIl0scHJvcHM6e251bUFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnIsZnVuY05hbWU6bn09dCxpPWVbMF07cmV0dXJue3R5cGU6ImxhcCIsbW9kZTpyLm1vZGUsYWxpZ25tZW50Om4uc2xpY2UoNSksYm9keTppfX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI7dC5hbGlnbm1lbnQ9PT0iY2xhcCI/KHI9RmUubWFrZVNwYW4oW10sW1ByKHQuYm9keSxlKV0pLHI9RmUubWFrZVNwYW4oWyJpbm5lciJdLFtyXSxlKSk6cj1GZS5tYWtlU3BhbihbImlubmVyIl0sW1ByKHQuYm9keSxlKV0pO3ZhciBuPUZlLm1ha2VTcGFuKFsiZml4Il0sW10pLGk9RmUubWFrZVNwYW4oW3QuYWxpZ25tZW50XSxbcixuXSxlKSxhPUZlLm1ha2VTcGFuKFsic3RydXQiXSk7cmV0dXJuIGEuc3R5bGUuaGVpZ2h0PWd0KGkuaGVpZ2h0K2kuZGVwdGgpLGkuZGVwdGgmJihhLnN0eWxlLnZlcnRpY2FsQWxpZ249Z3QoLWkuZGVwdGgpKSxpLmNoaWxkcmVuLnVuc2hpZnQoYSksaT1GZS5tYWtlU3BhbihbInRoaW5ib3giXSxbaV0sZSksRmUubWFrZVNwYW4oWyJtb3JkIiwidmJveCJdLFtpXSxlKX0sImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9bmV3IGF0Lk1hdGhOb2RlKCJtcGFkZGVkIixbeW4odC5ib2R5LGUpXSk7aWYodC5hbGlnbm1lbnQhPT0icmxhcCIpe3ZhciBuPXQuYWxpZ25tZW50PT09ImxsYXAiPyItMSI6Ii0wLjUiO3Iuc2V0QXR0cmlidXRlKCJsc3BhY2UiLG4rIndpZHRoIil9cmV0dXJuIHIuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIjBweCIpLHJ9LCJtYXRobWxCdWlsZGVyIil9KTtTdCh7dHlwZToic3R5bGluZyIsbmFtZXM6WyJcXCgiLCIkIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwLGFsbG93ZWRJbk1hdGg6ITF9LGhhbmRsZXIodCxlKXt2YXJ7ZnVuY05hbWU6cixwYXJzZXI6bn09dCxpPW4ubW9kZTtuLnN3aXRjaE1vZGUoIm1hdGgiKTt2YXIgYT1yPT09IlxcKCI/IlxcKSI6IiQiLHM9bi5wYXJzZUV4cHJlc3Npb24oITEsYSk7cmV0dXJuIG4uZXhwZWN0KGEpLG4uc3dpdGNoTW9kZShpKSx7dHlwZToic3R5bGluZyIsbW9kZTpuLm1vZGUsc3R5bGU6InRleHQiLGJvZHk6c319fSk7U3Qoe3R5cGU6InRleHQiLG5hbWVzOlsiXFwpIiwiXFxdIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwLGFsbG93ZWRJbk1hdGg6ITF9LGhhbmRsZXIodCxlKXt0aHJvdyBuZXcgbHQoIk1pc21hdGNoZWQgIit0LmZ1bmNOYW1lKX19KTt3Rz1vKCh0LGUpPT57c3dpdGNoKGUuc3R5bGUuc2l6ZSl7Y2FzZSByci5ESVNQTEFZLnNpemU6cmV0dXJuIHQuZGlzcGxheTtjYXNlIHJyLlRFWFQuc2l6ZTpyZXR1cm4gdC50ZXh0O2Nhc2UgcnIuU0NSSVBULnNpemU6cmV0dXJuIHQuc2NyaXB0O2Nhc2UgcnIuU0NSSVBUU0NSSVBULnNpemU6cmV0dXJuIHQuc2NyaXB0c2NyaXB0O2RlZmF1bHQ6cmV0dXJuIHQudGV4dH19LCJjaG9vc2VNYXRoU3R5bGUiKTtTdCh7dHlwZToibWF0aGNob2ljZSIsbmFtZXM6WyJcXG1hdGhjaG9pY2UiXSxwcm9wczp7bnVtQXJnczo0LHByaW1pdGl2ZTohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyfT10O3JldHVybnt0eXBlOiJtYXRoY2hvaWNlIixtb2RlOnIubW9kZSxkaXNwbGF5OmdpKGVbMF0pLHRleHQ6Z2koZVsxXSksc2NyaXB0OmdpKGVbMl0pLHNjcmlwdHNjcmlwdDpnaShlWzNdKX19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPXdHKHQsZSksbj1GaShyLGUsITEpO3JldHVybiBGZS5tYWtlRnJhZ21lbnQobil9LCJodG1sQnVpbGRlciIpLG1hdGhtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPXdHKHQsZSk7cmV0dXJuIHZoKHIsZSl9LCJtYXRobWxCdWlsZGVyIil9KTt5JD1vKCh0LGUscixuLGksYSxzKT0+e3Q9RmUubWFrZVNwYW4oW10sW3RdKTt2YXIgbD1yJiZKdC5pc0NoYXJhY3RlckJveChyKSx1LGg7aWYoZSl7dmFyIGY9UHIoZSxuLmhhdmluZ1N0eWxlKGkuc3VwKCkpLG4pO2g9e2VsZW06ZixrZXJuOk1hdGgubWF4KG4uZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmcxLG4uZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmczLWYuZGVwdGgpfX1pZihyKXt2YXIgZD1QcihyLG4uaGF2aW5nU3R5bGUoaS5zdWIoKSksbik7dT17ZWxlbTpkLGtlcm46TWF0aC5tYXgobi5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzIsbi5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzQtZC5oZWlnaHQpfX12YXIgcDtpZihoJiZ1KXt2YXIgbT1uLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNSt1LmVsZW0uaGVpZ2h0K3UuZWxlbS5kZXB0aCt1Lmtlcm4rdC5kZXB0aCtzO3A9RmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImJvdHRvbSIscG9zaXRpb25EYXRhOm0sY2hpbGRyZW46W3t0eXBlOiJrZXJuIixzaXplOm4uZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc1fSx7dHlwZToiZWxlbSIsZWxlbTp1LmVsZW0sbWFyZ2luTGVmdDpndCgtYSl9LHt0eXBlOiJrZXJuIixzaXplOnUua2Vybn0se3R5cGU6ImVsZW0iLGVsZW06dH0se3R5cGU6Imtlcm4iLHNpemU6aC5rZXJufSx7dHlwZToiZWxlbSIsZWxlbTpoLmVsZW0sbWFyZ2luTGVmdDpndChhKX0se3R5cGU6Imtlcm4iLHNpemU6bi5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzV9XX0sbil9ZWxzZSBpZih1KXt2YXIgZz10LmhlaWdodC1zO3A9RmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6InRvcCIscG9zaXRpb25EYXRhOmcsY2hpbGRyZW46W3t0eXBlOiJrZXJuIixzaXplOm4uZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc1fSx7dHlwZToiZWxlbSIsZWxlbTp1LmVsZW0sbWFyZ2luTGVmdDpndCgtYSl9LHt0eXBlOiJrZXJuIixzaXplOnUua2Vybn0se3R5cGU6ImVsZW0iLGVsZW06dH1dfSxuKX1lbHNlIGlmKGgpe3ZhciB5PXQuZGVwdGgrcztwPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJib3R0b20iLHBvc2l0aW9uRGF0YTp5LGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTp0fSx7dHlwZToia2VybiIsc2l6ZTpoLmtlcm59LHt0eXBlOiJlbGVtIixlbGVtOmguZWxlbSxtYXJnaW5MZWZ0Omd0KGEpfSx7dHlwZToia2VybiIsc2l6ZTpuLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNX1dfSxuKX1lbHNlIHJldHVybiB0O3ZhciB2PVtwXTtpZih1JiZhIT09MCYmIWwpe3ZhciB4PUZlLm1ha2VTcGFuKFsibXNwYWNlIl0sW10sbik7eC5zdHlsZS5tYXJnaW5SaWdodD1ndChhKSx2LnVuc2hpZnQoeCl9cmV0dXJuIEZlLm1ha2VTcGFuKFsibW9wIiwib3AtbGltaXRzIl0sdixuKX0sImFzc2VtYmxlU3VwU3ViIiksdiQ9WyJcXHNtYWxsaW50Il0sQ3A9bygodCxlKT0+e3ZhciByLG4saT0hMSxhO3QudHlwZT09PSJzdXBzdWIiPyhyPXQuc3VwLG49dC5zdWIsYT1ncih0LmJhc2UsIm9wIiksaT0hMCk6YT1ncih0LCJvcCIpO3ZhciBzPWUuc3R5bGUsbD0hMTtzLnNpemU9PT1yci5ESVNQTEFZLnNpemUmJmEuc3ltYm9sJiYhSnQuY29udGFpbnModiQsYS5uYW1lKSYmKGw9ITApO3ZhciB1O2lmKGEuc3ltYm9sKXt2YXIgaD1sPyJTaXplMi1SZWd1bGFyIjoiU2l6ZTEtUmVndWxhciIsZj0iIjtpZigoYS5uYW1lPT09Ilxcb2lpbnQifHxhLm5hbWU9PT0iXFxvaWlpbnQiKSYmKGY9YS5uYW1lLnNsaWNlKDEpLGEubmFtZT1mPT09Im9paW50Ij8iXFxpaW50IjoiXFxpaWludCIpLHU9RmUubWFrZVN5bWJvbChhLm5hbWUsaCwibWF0aCIsZSxbIm1vcCIsIm9wLXN5bWJvbCIsbD8ibGFyZ2Utb3AiOiJzbWFsbC1vcCJdKSxmLmxlbmd0aD4wKXt2YXIgZD11Lml0YWxpYyxwPUZlLnN0YXRpY1N2ZyhmKyJTaXplIisobD8iMiI6IjEiKSxlKTt1PUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTp1LHNoaWZ0OjB9LHt0eXBlOiJlbGVtIixlbGVtOnAsc2hpZnQ6bD8uMDg6MH1dfSxlKSxhLm5hbWU9IlxcIitmLHUuY2xhc3Nlcy51bnNoaWZ0KCJtb3AiKSx1Lml0YWxpYz1kfX1lbHNlIGlmKGEuYm9keSl7dmFyIG09RmkoYS5ib2R5LGUsITApO20ubGVuZ3RoPT09MSYmbVswXWluc3RhbmNlb2YgRXM/KHU9bVswXSx1LmNsYXNzZXNbMF09Im1vcCIpOnU9RmUubWFrZVNwYW4oWyJtb3AiXSxtLGUpfWVsc2V7Zm9yKHZhciBnPVtdLHk9MTt5PGEubmFtZS5sZW5ndGg7eSsrKWcucHVzaChGZS5tYXRoc3ltKGEubmFtZVt5XSxhLm1vZGUsZSkpO3U9RmUubWFrZVNwYW4oWyJtb3AiXSxnLGUpfXZhciB2PTAseD0wO3JldHVybih1IGluc3RhbmNlb2YgRXN8fGEubmFtZT09PSJcXG9paW50Inx8YS5uYW1lPT09Ilxcb2lpaW50IikmJiFhLnN1cHByZXNzQmFzZVNoaWZ0JiYodj0odS5oZWlnaHQtdS5kZXB0aCkvMi1lLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCx4PXUuaXRhbGljKSxpP3kkKHUscixuLGUscyx4LHYpOih2JiYodS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLHUuc3R5bGUudG9wPWd0KHYpKSx1KX0sImh0bWxCdWlsZGVyJDIiKSx2eT1vKCh0LGUpPT57dmFyIHI7aWYodC5zeW1ib2wpcj1uZXcga3MoIm1vIixbTW8odC5uYW1lLHQubW9kZSldKSxKdC5jb250YWlucyh2JCx0Lm5hbWUpJiZyLnNldEF0dHJpYnV0ZSgibGFyZ2VvcCIsImZhbHNlIik7ZWxzZSBpZih0LmJvZHkpcj1uZXcga3MoIm1vIixTcyh0LmJvZHksZSkpO2Vsc2V7cj1uZXcga3MoIm1pIixbbmV3IHRkKHQubmFtZS5zbGljZSgxKSldKTt2YXIgbj1uZXcga3MoIm1vIixbTW8oIlx1MjA2MSIsInRleHQiKV0pO3QucGFyZW50SXNTdXBTdWI/cj1uZXcga3MoIm1yb3ciLFtyLG5dKTpyPVlHKFtyLG5dKX1yZXR1cm4gcn0sIm1hdGhtbEJ1aWxkZXIkMSIpLEQ0ZT17Ilx1MjIwRiI6IlxccHJvZCIsIlx1MjIxMCI6IlxcY29wcm9kIiwiXHUyMjExIjoiXFxzdW0iLCJcdTIyQzAiOiJcXGJpZ3dlZGdlIiwiXHUyMkMxIjoiXFxiaWd2ZWUiLCJcdTIyQzIiOiJcXGJpZ2NhcCIsIlx1MjJDMyI6IlxcYmlnY3VwIiwiXHUyQTAwIjoiXFxiaWdvZG90IiwiXHUyQTAxIjoiXFxiaWdvcGx1cyIsIlx1MkEwMiI6IlxcYmlnb3RpbWVzIiwiXHUyQTA0IjoiXFxiaWd1cGx1cyIsIlx1MkEwNiI6IlxcYmlnc3FjdXAifTtTdCh7dHlwZToib3AiLG5hbWVzOlsiXFxjb3Byb2QiLCJcXGJpZ3ZlZSIsIlxcYmlnd2VkZ2UiLCJcXGJpZ3VwbHVzIiwiXFxiaWdjYXAiLCJcXGJpZ2N1cCIsIlxcaW50b3AiLCJcXHByb2QiLCJcXHN1bSIsIlxcYmlnb3RpbWVzIiwiXFxiaWdvcGx1cyIsIlxcYmlnb2RvdCIsIlxcYmlnc3FjdXAiLCJcXHNtYWxsaW50IiwiXHUyMjBGIiwiXHUyMjEwIiwiXHUyMjExIiwiXHUyMkMwIiwiXHUyMkMxIiwiXHUyMkMyIiwiXHUyMkMzIiwiXHUyQTAwIiwiXHUyQTAxIiwiXHUyQTAyIiwiXHUyQTA0IiwiXHUyQTA2Il0scHJvcHM6e251bUFyZ3M6MH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQsaT1uO3JldHVybiBpLmxlbmd0aD09PTEmJihpPUQ0ZVtpXSkse3R5cGU6Im9wIixtb2RlOnIubW9kZSxsaW1pdHM6ITAscGFyZW50SXNTdXBTdWI6ITEsc3ltYm9sOiEwLG5hbWU6aX19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6Q3AsbWF0aG1sQnVpbGRlcjp2eX0pO1N0KHt0eXBlOiJvcCIsbmFtZXM6WyJcXG1hdGhvcCJdLHByb3BzOntudW1BcmdzOjEscHJpbWl0aXZlOiEwfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnJ9PXQsbj1lWzBdO3JldHVybnt0eXBlOiJvcCIsbW9kZTpyLm1vZGUsbGltaXRzOiExLHBhcmVudElzU3VwU3ViOiExLHN5bWJvbDohMSxib2R5OmdpKG4pfX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpDcCxtYXRobWxCdWlsZGVyOnZ5fSk7TjRlPXsiXHUyMjJCIjoiXFxpbnQiLCJcdTIyMkMiOiJcXGlpbnQiLCJcdTIyMkQiOiJcXGlpaW50IiwiXHUyMjJFIjoiXFxvaW50IiwiXHUyMjJGIjoiXFxvaWludCIsIlx1MjIzMCI6Ilxcb2lpaW50In07U3Qoe3R5cGU6Im9wIixuYW1lczpbIlxcYXJjc2luIiwiXFxhcmNjb3MiLCJcXGFyY3RhbiIsIlxcYXJjdGciLCJcXGFyY2N0ZyIsIlxcYXJnIiwiXFxjaCIsIlxcY29zIiwiXFxjb3NlYyIsIlxcY29zaCIsIlxcY290IiwiXFxjb3RnIiwiXFxjb3RoIiwiXFxjc2MiLCJcXGN0ZyIsIlxcY3RoIiwiXFxkZWciLCJcXGRpbSIsIlxcZXhwIiwiXFxob20iLCJcXGtlciIsIlxcbGciLCJcXGxuIiwiXFxsb2ciLCJcXHNlYyIsIlxcc2luIiwiXFxzaW5oIiwiXFxzaCIsIlxcdGFuIiwiXFx0YW5oIiwiXFx0ZyIsIlxcdGgiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKHQpe3ZhcntwYXJzZXI6ZSxmdW5jTmFtZTpyfT10O3JldHVybnt0eXBlOiJvcCIsbW9kZTplLm1vZGUsbGltaXRzOiExLHBhcmVudElzU3VwU3ViOiExLHN5bWJvbDohMSxuYW1lOnJ9fSxodG1sQnVpbGRlcjpDcCxtYXRobWxCdWlsZGVyOnZ5fSk7U3Qoe3R5cGU6Im9wIixuYW1lczpbIlxcZGV0IiwiXFxnY2QiLCJcXGluZiIsIlxcbGltIiwiXFxtYXgiLCJcXG1pbiIsIlxcUHIiLCJcXHN1cCJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXIodCl7dmFye3BhcnNlcjplLGZ1bmNOYW1lOnJ9PXQ7cmV0dXJue3R5cGU6Im9wIixtb2RlOmUubW9kZSxsaW1pdHM6ITAscGFyZW50SXNTdXBTdWI6ITEsc3ltYm9sOiExLG5hbWU6cn19LGh0bWxCdWlsZGVyOkNwLG1hdGhtbEJ1aWxkZXI6dnl9KTtTdCh7dHlwZToib3AiLG5hbWVzOlsiXFxpbnQiLCJcXGlpbnQiLCJcXGlpaW50IiwiXFxvaW50IiwiXFxvaWludCIsIlxcb2lpaW50IiwiXHUyMjJCIiwiXHUyMjJDIiwiXHUyMjJEIiwiXHUyMjJFIiwiXHUyMjJGIiwiXHUyMjMwIl0scHJvcHM6e251bUFyZ3M6MH0saGFuZGxlcih0KXt2YXJ7cGFyc2VyOmUsZnVuY05hbWU6cn09dCxuPXI7cmV0dXJuIG4ubGVuZ3RoPT09MSYmKG49TjRlW25dKSx7dHlwZToib3AiLG1vZGU6ZS5tb2RlLGxpbWl0czohMSxwYXJlbnRJc1N1cFN1YjohMSxzeW1ib2w6ITAsbmFtZTpufX0saHRtbEJ1aWxkZXI6Q3AsbWF0aG1sQnVpbGRlcjp2eX0pO3gkPW8oKHQsZSk9Pnt2YXIgcixuLGk9ITEsYTt0LnR5cGU9PT0ic3Vwc3ViIj8ocj10LnN1cCxuPXQuc3ViLGE9Z3IodC5iYXNlLCJvcGVyYXRvcm5hbWUiKSxpPSEwKTphPWdyKHQsIm9wZXJhdG9ybmFtZSIpO3ZhciBzO2lmKGEuYm9keS5sZW5ndGg+MCl7Zm9yKHZhciBsPWEuYm9keS5tYXAoZD0+e3ZhciBwPWQudGV4dDtyZXR1cm4gdHlwZW9mIHA9PSJzdHJpbmciP3t0eXBlOiJ0ZXh0b3JkIixtb2RlOmQubW9kZSx0ZXh0OnB9OmR9KSx1PUZpKGwsZS53aXRoRm9udCgibWF0aHJtIiksITApLGg9MDtoPHUubGVuZ3RoO2grKyl7dmFyIGY9dVtoXTtmIGluc3RhbmNlb2YgRXMmJihmLnRleHQ9Zi50ZXh0LnJlcGxhY2UoL1x1MjIxMi8sIi0iKS5yZXBsYWNlKC9cdTIyMTcvLCIqIikpfXM9RmUubWFrZVNwYW4oWyJtb3AiXSx1LGUpfWVsc2Ugcz1GZS5tYWtlU3BhbihbIm1vcCJdLFtdLGUpO3JldHVybiBpP3kkKHMscixuLGUsZS5zdHlsZSwwLDApOnN9LCJodG1sQnVpbGRlciQxIiksUjRlPW8oKHQsZSk9Pntmb3IodmFyIHI9U3ModC5ib2R5LGUud2l0aEZvbnQoIm1hdGhybSIpKSxuPSEwLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXTtpZighKGEgaW5zdGFuY2VvZiBhdC5TcGFjZU5vZGUpKWlmKGEgaW5zdGFuY2VvZiBhdC5NYXRoTm9kZSlzd2l0Y2goYS50eXBlKXtjYXNlIm1pIjpjYXNlIm1uIjpjYXNlIm1zIjpjYXNlIm1zcGFjZSI6Y2FzZSJtdGV4dCI6YnJlYWs7Y2FzZSJtbyI6e3ZhciBzPWEuY2hpbGRyZW5bMF07YS5jaGlsZHJlbi5sZW5ndGg9PT0xJiZzIGluc3RhbmNlb2YgYXQuVGV4dE5vZGU/cy50ZXh0PXMudGV4dC5yZXBsYWNlKC9cdTIyMTIvLCItIikucmVwbGFjZSgvXHUyMjE3LywiKiIpOm49ITE7YnJlYWt9ZGVmYXVsdDpuPSExfWVsc2Ugbj0hMX1pZihuKXt2YXIgbD1yLm1hcChmPT5mLnRvVGV4dCgpKS5qb2luKCIiKTtyPVtuZXcgYXQuVGV4dE5vZGUobCldfXZhciB1PW5ldyBhdC5NYXRoTm9kZSgibWkiLHIpO3Uuc2V0QXR0cmlidXRlKCJtYXRodmFyaWFudCIsIm5vcm1hbCIpO3ZhciBoPW5ldyBhdC5NYXRoTm9kZSgibW8iLFtNbygiXHUyMDYxIiwidGV4dCIpXSk7cmV0dXJuIHQucGFyZW50SXNTdXBTdWI/bmV3IGF0Lk1hdGhOb2RlKCJtcm93IixbdSxoXSk6YXQubmV3RG9jdW1lbnRGcmFnbWVudChbdSxoXSl9LCJtYXRobWxCdWlsZGVyIik7U3Qoe3R5cGU6Im9wZXJhdG9ybmFtZSIsbmFtZXM6WyJcXG9wZXJhdG9ybmFtZUAiLCJcXG9wZXJhdG9ybmFtZXdpdGhsaW1pdHMiXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnIsZnVuY05hbWU6bn09dCxpPWVbMF07cmV0dXJue3R5cGU6Im9wZXJhdG9ybmFtZSIsbW9kZTpyLm1vZGUsYm9keTpnaShpKSxhbHdheXNIYW5kbGVTdXBTdWI6bj09PSJcXG9wZXJhdG9ybmFtZXdpdGhsaW1pdHMiLGxpbWl0czohMSxwYXJlbnRJc1N1cFN1YjohMX19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6eCQsbWF0aG1sQnVpbGRlcjpSNGV9KTtsZSgiXFxvcGVyYXRvcm5hbWUiLCJcXEBpZnN0YXJcXG9wZXJhdG9ybmFtZXdpdGhsaW1pdHNcXG9wZXJhdG9ybmFtZUAiKTtpZCh7dHlwZToib3JkZ3JvdXAiLGh0bWxCdWlsZGVyKHQsZSl7cmV0dXJuIHQuc2VtaXNpbXBsZT9GZS5tYWtlRnJhZ21lbnQoRmkodC5ib2R5LGUsITEpKTpGZS5tYWtlU3BhbihbIm1vcmQiXSxGaSh0LmJvZHksZSwhMCksZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXtyZXR1cm4gdmgodC5ib2R5LGUsITApfX0pO1N0KHt0eXBlOiJvdmVybGluZSIsbmFtZXM6WyJcXG92ZXJsaW5lIl0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cn09dCxuPWVbMF07cmV0dXJue3R5cGU6Im92ZXJsaW5lIixtb2RlOnIubW9kZSxib2R5Om59fSxodG1sQnVpbGRlcih0LGUpe3ZhciByPVByKHQuYm9keSxlLmhhdmluZ0NyYW1wZWRTdHlsZSgpKSxuPUZlLm1ha2VMaW5lU3Bhbigib3ZlcmxpbmUtbGluZSIsZSksaT1lLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3MsYT1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiZmlyc3RCYXNlbGluZSIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOnJ9LHt0eXBlOiJrZXJuIixzaXplOjMqaX0se3R5cGU6ImVsZW0iLGVsZW06bn0se3R5cGU6Imtlcm4iLHNpemU6aX1dfSxlKTtyZXR1cm4gRmUubWFrZVNwYW4oWyJtb3JkIiwib3ZlcmxpbmUiXSxbYV0sZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1uZXcgYXQuTWF0aE5vZGUoIm1vIixbbmV3IGF0LlRleHROb2RlKCJcdTIwM0UiKV0pO3Iuc2V0QXR0cmlidXRlKCJzdHJldGNoeSIsInRydWUiKTt2YXIgbj1uZXcgYXQuTWF0aE5vZGUoIm1vdmVyIixbeW4odC5ib2R5LGUpLHJdKTtyZXR1cm4gbi5zZXRBdHRyaWJ1dGUoImFjY2VudCIsInRydWUiKSxufX0pO1N0KHt0eXBlOiJwaGFudG9tIixuYW1lczpbIlxccGhhbnRvbSJdLHByb3BzOntudW1BcmdzOjEsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyfT10LG49ZVswXTtyZXR1cm57dHlwZToicGhhbnRvbSIsbW9kZTpyLm1vZGUsYm9keTpnaShuKX19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPUZpKHQuYm9keSxlLndpdGhQaGFudG9tKCksITEpO3JldHVybiBGZS5tYWtlRnJhZ21lbnQocil9LCJodG1sQnVpbGRlciIpLG1hdGhtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPVNzKHQuYm9keSxlKTtyZXR1cm4gbmV3IGF0Lk1hdGhOb2RlKCJtcGhhbnRvbSIscil9LCJtYXRobWxCdWlsZGVyIil9KTtTdCh7dHlwZToiaHBoYW50b20iLG5hbWVzOlsiXFxocGhhbnRvbSJdLHByb3BzOntudW1BcmdzOjEsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyfT10LG49ZVswXTtyZXR1cm57dHlwZToiaHBoYW50b20iLG1vZGU6ci5tb2RlLGJvZHk6bn19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPUZlLm1ha2VTcGFuKFtdLFtQcih0LmJvZHksZS53aXRoUGhhbnRvbSgpKV0pO2lmKHIuaGVpZ2h0PTAsci5kZXB0aD0wLHIuY2hpbGRyZW4pZm9yKHZhciBuPTA7bjxyLmNoaWxkcmVuLmxlbmd0aDtuKyspci5jaGlsZHJlbltuXS5oZWlnaHQ9MCxyLmNoaWxkcmVuW25dLmRlcHRoPTA7cmV0dXJuIHI9RmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImZpcnN0QmFzZWxpbmUiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTpyfV19LGUpLEZlLm1ha2VTcGFuKFsibW9yZCJdLFtyXSxlKX0sImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9U3MoZ2kodC5ib2R5KSxlKSxuPW5ldyBhdC5NYXRoTm9kZSgibXBoYW50b20iLHIpLGk9bmV3IGF0Lk1hdGhOb2RlKCJtcGFkZGVkIixbbl0pO3JldHVybiBpLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IiwiMHB4IiksaS5zZXRBdHRyaWJ1dGUoImRlcHRoIiwiMHB4IiksaX0sIm1hdGhtbEJ1aWxkZXIiKX0pO1N0KHt0eXBlOiJ2cGhhbnRvbSIsbmFtZXM6WyJcXHZwaGFudG9tIl0scHJvcHM6e251bUFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnJ9PXQsbj1lWzBdO3JldHVybnt0eXBlOiJ2cGhhbnRvbSIsbW9kZTpyLm1vZGUsYm9keTpufX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9RmUubWFrZVNwYW4oWyJpbm5lciJdLFtQcih0LmJvZHksZS53aXRoUGhhbnRvbSgpKV0pLG49RmUubWFrZVNwYW4oWyJmaXgiXSxbXSk7cmV0dXJuIEZlLm1ha2VTcGFuKFsibW9yZCIsInJsYXAiXSxbcixuXSxlKX0sImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9U3MoZ2kodC5ib2R5KSxlKSxuPW5ldyBhdC5NYXRoTm9kZSgibXBoYW50b20iLHIpLGk9bmV3IGF0Lk1hdGhOb2RlKCJtcGFkZGVkIixbbl0pO3JldHVybiBpLnNldEF0dHJpYnV0ZSgid2lkdGgiLCIwcHgiKSxpfSwibWF0aG1sQnVpbGRlciIpfSk7U3Qoe3R5cGU6InJhaXNlYm94IixuYW1lczpbIlxccmFpc2Vib3giXSxwcm9wczp7bnVtQXJnczoyLGFyZ1R5cGVzOlsic2l6ZSIsImhib3giXSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyfT10LG49Z3IoZVswXSwic2l6ZSIpLnZhbHVlLGk9ZVsxXTtyZXR1cm57dHlwZToicmFpc2Vib3giLG1vZGU6ci5tb2RlLGR5Om4sYm9keTppfX0saHRtbEJ1aWxkZXIodCxlKXt2YXIgcj1Qcih0LmJvZHksZSksbj1Kbih0LmR5LGUpO3JldHVybiBGZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToic2hpZnQiLHBvc2l0aW9uRGF0YTotbixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06cn1dfSxlKX0sbWF0aG1sQnVpbGRlcih0LGUpe3ZhciByPW5ldyBhdC5NYXRoTm9kZSgibXBhZGRlZCIsW3luKHQuYm9keSxlKV0pLG49dC5keS5udW1iZXIrdC5keS51bml0O3JldHVybiByLnNldEF0dHJpYnV0ZSgidm9mZnNldCIsbikscn19KTtTdCh7dHlwZToiaW50ZXJuYWwiLG5hbWVzOlsiXFxyZWxheCJdLHByb3BzOntudW1BcmdzOjAsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcih0KXt2YXJ7cGFyc2VyOmV9PXQ7cmV0dXJue3R5cGU6ImludGVybmFsIixtb2RlOmUubW9kZX19fSk7U3Qoe3R5cGU6InJ1bGUiLG5hbWVzOlsiXFxydWxlIl0scHJvcHM6e251bUFyZ3M6MixudW1PcHRpb25hbEFyZ3M6MSxhcmdUeXBlczpbInNpemUiLCJzaXplIiwic2l6ZSJdfSxoYW5kbGVyKHQsZSxyKXt2YXJ7cGFyc2VyOm59PXQsaT1yWzBdLGE9Z3IoZVswXSwic2l6ZSIpLHM9Z3IoZVsxXSwic2l6ZSIpO3JldHVybnt0eXBlOiJydWxlIixtb2RlOm4ubW9kZSxzaGlmdDppJiZncihpLCJzaXplIikudmFsdWUsd2lkdGg6YS52YWx1ZSxoZWlnaHQ6cy52YWx1ZX19LGh0bWxCdWlsZGVyKHQsZSl7dmFyIHI9RmUubWFrZVNwYW4oWyJtb3JkIiwicnVsZSJdLFtdLGUpLG49Sm4odC53aWR0aCxlKSxpPUpuKHQuaGVpZ2h0LGUpLGE9dC5zaGlmdD9Kbih0LnNoaWZ0LGUpOjA7cmV0dXJuIHIuc3R5bGUuYm9yZGVyUmlnaHRXaWR0aD1ndChuKSxyLnN0eWxlLmJvcmRlclRvcFdpZHRoPWd0KGkpLHIuc3R5bGUuYm90dG9tPWd0KGEpLHIud2lkdGg9bixyLmhlaWdodD1pK2Esci5kZXB0aD0tYSxyLm1heEZvbnRTaXplPWkqMS4xMjUqZS5zaXplTXVsdGlwbGllcixyfSxtYXRobWxCdWlsZGVyKHQsZSl7dmFyIHI9Sm4odC53aWR0aCxlKSxuPUpuKHQuaGVpZ2h0LGUpLGk9dC5zaGlmdD9Kbih0LnNoaWZ0LGUpOjAsYT1lLmNvbG9yJiZlLmdldENvbG9yKCl8fCJibGFjayIscz1uZXcgYXQuTWF0aE5vZGUoIm1zcGFjZSIpO3Muc2V0QXR0cmlidXRlKCJtYXRoYmFja2dyb3VuZCIsYSkscy5zZXRBdHRyaWJ1dGUoIndpZHRoIixndChyKSkscy5zZXRBdHRyaWJ1dGUoImhlaWdodCIsZ3QobikpO3ZhciBsPW5ldyBhdC5NYXRoTm9kZSgibXBhZGRlZCIsW3NdKTtyZXR1cm4gaT49MD9sLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixndChpKSk6KGwuc2V0QXR0cmlidXRlKCJoZWlnaHQiLGd0KGkpKSxsLnNldEF0dHJpYnV0ZSgiZGVwdGgiLGd0KC1pKSkpLGwuc2V0QXR0cmlidXRlKCJ2b2Zmc2V0IixndChpKSksbH19KTtvKGIkLCJzaXppbmdHcm91cCIpO1RHPVsiXFx0aW55IiwiXFxzaXhwdHNpemUiLCJcXHNjcmlwdHNpemUiLCJcXGZvb3Rub3Rlc2l6ZSIsIlxcc21hbGwiLCJcXG5vcm1hbHNpemUiLCJcXGxhcmdlIiwiXFxMYXJnZSIsIlxcTEFSR0UiLCJcXGh1Z2UiLCJcXEh1Z2UiXSxNNGU9bygodCxlKT0+e3ZhciByPWUuaGF2aW5nU2l6ZSh0LnNpemUpO3JldHVybiBiJCh0LmJvZHkscixlKX0sImh0bWxCdWlsZGVyIik7U3Qoe3R5cGU6InNpemluZyIsbmFtZXM6VEcscHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7YnJlYWtPblRva2VuVGV4dDpyLGZ1bmNOYW1lOm4scGFyc2VyOml9PXQsYT1pLnBhcnNlRXhwcmVzc2lvbighMSxyKTtyZXR1cm57dHlwZToic2l6aW5nIixtb2RlOmkubW9kZSxzaXplOlRHLmluZGV4T2YobikrMSxib2R5OmF9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOk00ZSxtYXRobWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj1lLmhhdmluZ1NpemUodC5zaXplKSxuPVNzKHQuYm9keSxyKSxpPW5ldyBhdC5NYXRoTm9kZSgibXN0eWxlIixuKTtyZXR1cm4gaS5zZXRBdHRyaWJ1dGUoIm1hdGhzaXplIixndChyLnNpemVNdWx0aXBsaWVyKSksaX0sIm1hdGhtbEJ1aWxkZXIiKX0pO1N0KHt0eXBlOiJzbWFzaCIsbmFtZXM6WyJcXHNtYXNoIl0scHJvcHM6e251bUFyZ3M6MSxudW1PcHRpb25hbEFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOm8oKHQsZSxyKT0+e3ZhcntwYXJzZXI6bn09dCxpPSExLGE9ITEscz1yWzBdJiZncihyWzBdLCJvcmRncm91cCIpO2lmKHMpZm9yKHZhciBsPSIiLHU9MDt1PHMuYm9keS5sZW5ndGg7Kyt1KXt2YXIgaD1zLmJvZHlbdV07aWYobD1oLnRleHQsbD09PSJ0IilpPSEwO2Vsc2UgaWYobD09PSJiIilhPSEwO2Vsc2V7aT0hMSxhPSExO2JyZWFrfX1lbHNlIGk9ITAsYT0hMDt2YXIgZj1lWzBdO3JldHVybnt0eXBlOiJzbWFzaCIsbW9kZTpuLm1vZGUsYm9keTpmLHNtYXNoSGVpZ2h0Omksc21hc2hEZXB0aDphfX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9RmUubWFrZVNwYW4oW10sW1ByKHQuYm9keSxlKV0pO2lmKCF0LnNtYXNoSGVpZ2h0JiYhdC5zbWFzaERlcHRoKXJldHVybiByO2lmKHQuc21hc2hIZWlnaHQmJihyLmhlaWdodD0wLHIuY2hpbGRyZW4pKWZvcih2YXIgbj0wO248ci5jaGlsZHJlbi5sZW5ndGg7bisrKXIuY2hpbGRyZW5bbl0uaGVpZ2h0PTA7aWYodC5zbWFzaERlcHRoJiYoci5kZXB0aD0wLHIuY2hpbGRyZW4pKWZvcih2YXIgaT0wO2k8ci5jaGlsZHJlbi5sZW5ndGg7aSsrKXIuY2hpbGRyZW5baV0uZGVwdGg9MDt2YXIgYT1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiZmlyc3RCYXNlbGluZSIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOnJ9XX0sZSk7cmV0dXJuIEZlLm1ha2VTcGFuKFsibW9yZCJdLFthXSxlKX0sImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9bmV3IGF0Lk1hdGhOb2RlKCJtcGFkZGVkIixbeW4odC5ib2R5LGUpXSk7cmV0dXJuIHQuc21hc2hIZWlnaHQmJnIuc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIwcHgiKSx0LnNtYXNoRGVwdGgmJnIuc2V0QXR0cmlidXRlKCJkZXB0aCIsIjBweCIpLHJ9LCJtYXRobWxCdWlsZGVyIil9KTtTdCh7dHlwZToic3FydCIsbmFtZXM6WyJcXHNxcnQiXSxwcm9wczp7bnVtQXJnczoxLG51bU9wdGlvbmFsQXJnczoxfSxoYW5kbGVyKHQsZSxyKXt2YXJ7cGFyc2VyOm59PXQsaT1yWzBdLGE9ZVswXTtyZXR1cm57dHlwZToic3FydCIsbW9kZTpuLm1vZGUsYm9keTphLGluZGV4Oml9fSxodG1sQnVpbGRlcih0LGUpe3ZhciByPVByKHQuYm9keSxlLmhhdmluZ0NyYW1wZWRTdHlsZSgpKTtyLmhlaWdodD09PTAmJihyLmhlaWdodD1lLmZvbnRNZXRyaWNzKCkueEhlaWdodCkscj1GZS53cmFwRnJhZ21lbnQocixlKTt2YXIgbj1lLmZvbnRNZXRyaWNzKCksaT1uLmRlZmF1bHRSdWxlVGhpY2tuZXNzLGE9aTtlLnN0eWxlLmlkPHJyLlRFWFQuaWQmJihhPWUuZm9udE1ldHJpY3MoKS54SGVpZ2h0KTt2YXIgcz1pK2EvNCxsPXIuaGVpZ2h0K3IuZGVwdGgrcytpLHtzcGFuOnUscnVsZVdpZHRoOmgsYWR2YW5jZVdpZHRoOmZ9PWR1LnNxcnRJbWFnZShsLGUpLGQ9dS5oZWlnaHQtaDtkPnIuaGVpZ2h0K3IuZGVwdGgrcyYmKHM9KHMrZC1yLmhlaWdodC1yLmRlcHRoKS8yKTt2YXIgcD11LmhlaWdodC1yLmhlaWdodC1zLWg7ci5zdHlsZS5wYWRkaW5nTGVmdD1ndChmKTt2YXIgbT1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiZmlyc3RCYXNlbGluZSIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOnIsd3JhcHBlckNsYXNzZXM6WyJzdmctYWxpZ24iXX0se3R5cGU6Imtlcm4iLHNpemU6LShyLmhlaWdodCtwKX0se3R5cGU6ImVsZW0iLGVsZW06dX0se3R5cGU6Imtlcm4iLHNpemU6aH1dfSxlKTtpZih0LmluZGV4KXt2YXIgZz1lLmhhdmluZ1N0eWxlKHJyLlNDUklQVFNDUklQVCkseT1Qcih0LmluZGV4LGcsZSksdj0uNioobS5oZWlnaHQtbS5kZXB0aCkseD1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToic2hpZnQiLHBvc2l0aW9uRGF0YTotdixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06eX1dfSxlKSxiPUZlLm1ha2VTcGFuKFsicm9vdCJdLFt4XSk7cmV0dXJuIEZlLm1ha2VTcGFuKFsibW9yZCIsInNxcnQiXSxbYixtXSxlKX1lbHNlIHJldHVybiBGZS5tYWtlU3BhbihbIm1vcmQiLCJzcXJ0Il0sW21dLGUpfSxtYXRobWxCdWlsZGVyKHQsZSl7dmFye2JvZHk6cixpbmRleDpufT10O3JldHVybiBuP25ldyBhdC5NYXRoTm9kZSgibXJvb3QiLFt5bihyLGUpLHluKG4sZSldKTpuZXcgYXQuTWF0aE5vZGUoIm1zcXJ0IixbeW4ocixlKV0pfX0pO2tHPXtkaXNwbGF5OnJyLkRJU1BMQVksdGV4dDpyci5URVhULHNjcmlwdDpyci5TQ1JJUFQsc2NyaXB0c2NyaXB0OnJyLlNDUklQVFNDUklQVH07U3Qoe3R5cGU6InN0eWxpbmciLG5hbWVzOlsiXFxkaXNwbGF5c3R5bGUiLCJcXHRleHRzdHlsZSIsIlxcc2NyaXB0c3R5bGUiLCJcXHNjcmlwdHNjcmlwdHN0eWxlIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwLHByaW1pdGl2ZTohMH0saGFuZGxlcih0LGUpe3ZhcnticmVha09uVG9rZW5UZXh0OnIsZnVuY05hbWU6bixwYXJzZXI6aX09dCxhPWkucGFyc2VFeHByZXNzaW9uKCEwLHIpLHM9bi5zbGljZSgxLG4ubGVuZ3RoLTUpO3JldHVybnt0eXBlOiJzdHlsaW5nIixtb2RlOmkubW9kZSxzdHlsZTpzLGJvZHk6YX19LGh0bWxCdWlsZGVyKHQsZSl7dmFyIHI9a0dbdC5zdHlsZV0sbj1lLmhhdmluZ1N0eWxlKHIpLndpdGhGb250KCIiKTtyZXR1cm4gYiQodC5ib2R5LG4sZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1rR1t0LnN0eWxlXSxuPWUuaGF2aW5nU3R5bGUociksaT1Tcyh0LmJvZHksbiksYT1uZXcgYXQuTWF0aE5vZGUoIm1zdHlsZSIsaSkscz17ZGlzcGxheTpbIjAiLCJ0cnVlIl0sdGV4dDpbIjAiLCJmYWxzZSJdLHNjcmlwdDpbIjEiLCJmYWxzZSJdLHNjcmlwdHNjcmlwdDpbIjIiLCJmYWxzZSJdfSxsPXNbdC5zdHlsZV07cmV0dXJuIGEuc2V0QXR0cmlidXRlKCJzY3JpcHRsZXZlbCIsbFswXSksYS5zZXRBdHRyaWJ1dGUoImRpc3BsYXlzdHlsZSIsbFsxXSksYX19KTtJNGU9byhmdW5jdGlvbihlLHIpe3ZhciBuPWUuYmFzZTtpZihuKWlmKG4udHlwZT09PSJvcCIpe3ZhciBpPW4ubGltaXRzJiYoci5zdHlsZS5zaXplPT09cnIuRElTUExBWS5zaXplfHxuLmFsd2F5c0hhbmRsZVN1cFN1Yik7cmV0dXJuIGk/Q3A6bnVsbH1lbHNlIGlmKG4udHlwZT09PSJvcGVyYXRvcm5hbWUiKXt2YXIgYT1uLmFsd2F5c0hhbmRsZVN1cFN1YiYmKHIuc3R5bGUuc2l6ZT09PXJyLkRJU1BMQVkuc2l6ZXx8bi5saW1pdHMpO3JldHVybiBhP3gkOm51bGx9ZWxzZXtpZihuLnR5cGU9PT0iYWNjZW50IilyZXR1cm4gSnQuaXNDaGFyYWN0ZXJCb3gobi5iYXNlKT96QzpudWxsO2lmKG4udHlwZT09PSJob3JpekJyYWNlIil7dmFyIHM9IWUuc3ViO3JldHVybiBzPT09bi5pc092ZXI/ZyQ6bnVsbH1lbHNlIHJldHVybiBudWxsfWVsc2UgcmV0dXJuIG51bGx9LCJodG1sQnVpbGRlckRlbGVnYXRlIik7aWQoe3R5cGU6InN1cHN1YiIsaHRtbEJ1aWxkZXIodCxlKXt2YXIgcj1JNGUodCxlKTtpZihyKXJldHVybiByKHQsZSk7dmFye2Jhc2U6bixzdXA6aSxzdWI6YX09dCxzPVByKG4sZSksbCx1LGg9ZS5mb250TWV0cmljcygpLGY9MCxkPTAscD1uJiZKdC5pc0NoYXJhY3RlckJveChuKTtpZihpKXt2YXIgbT1lLmhhdmluZ1N0eWxlKGUuc3R5bGUuc3VwKCkpO2w9UHIoaSxtLGUpLHB8fChmPXMuaGVpZ2h0LW0uZm9udE1ldHJpY3MoKS5zdXBEcm9wKm0uc2l6ZU11bHRpcGxpZXIvZS5zaXplTXVsdGlwbGllcil9aWYoYSl7dmFyIGc9ZS5oYXZpbmdTdHlsZShlLnN0eWxlLnN1YigpKTt1PVByKGEsZyxlKSxwfHwoZD1zLmRlcHRoK2cuZm9udE1ldHJpY3MoKS5zdWJEcm9wKmcuc2l6ZU11bHRpcGxpZXIvZS5zaXplTXVsdGlwbGllcil9dmFyIHk7ZS5zdHlsZT09PXJyLkRJU1BMQVk/eT1oLnN1cDE6ZS5zdHlsZS5jcmFtcGVkP3k9aC5zdXAzOnk9aC5zdXAyO3ZhciB2PWUuc2l6ZU11bHRpcGxpZXIseD1ndCguNS9oLnB0UGVyRW0vdiksYj1udWxsO2lmKHUpe3ZhciB3PXQuYmFzZSYmdC5iYXNlLnR5cGU9PT0ib3AiJiZ0LmJhc2UubmFtZSYmKHQuYmFzZS5uYW1lPT09Ilxcb2lpbnQifHx0LmJhc2UubmFtZT09PSJcXG9paWludCIpOyhzIGluc3RhbmNlb2YgRXN8fHcpJiYoYj1ndCgtcy5pdGFsaWMpKX12YXIgXztpZihsJiZ1KXtmPU1hdGgubWF4KGYseSxsLmRlcHRoKy4yNSpoLnhIZWlnaHQpLGQ9TWF0aC5tYXgoZCxoLnN1YjIpO3ZhciBUPWguZGVmYXVsdFJ1bGVUaGlja25lc3MsRT00KlQ7aWYoZi1sLmRlcHRoLSh1LmhlaWdodC1kKTxFKXtkPUUtKGYtbC5kZXB0aCkrdS5oZWlnaHQ7dmFyIEw9LjgqaC54SGVpZ2h0LShmLWwuZGVwdGgpO0w+MCYmKGYrPUwsZC09TCl9dmFyIFM9W3t0eXBlOiJlbGVtIixlbGVtOnUsc2hpZnQ6ZCxtYXJnaW5SaWdodDp4LG1hcmdpbkxlZnQ6Yn0se3R5cGU6ImVsZW0iLGVsZW06bCxzaGlmdDotZixtYXJnaW5SaWdodDp4fV07Xz1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiaW5kaXZpZHVhbFNoaWZ0IixjaGlsZHJlbjpTfSxlKX1lbHNlIGlmKHUpe2Q9TWF0aC5tYXgoZCxoLnN1YjEsdS5oZWlnaHQtLjgqaC54SGVpZ2h0KTt2YXIgQT1be3R5cGU6ImVsZW0iLGVsZW06dSxtYXJnaW5MZWZ0OmIsbWFyZ2luUmlnaHQ6eH1dO189RmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6InNoaWZ0Iixwb3NpdGlvbkRhdGE6ZCxjaGlsZHJlbjpBfSxlKX1lbHNlIGlmKGwpZj1NYXRoLm1heChmLHksbC5kZXB0aCsuMjUqaC54SGVpZ2h0KSxfPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJzaGlmdCIscG9zaXRpb25EYXRhOi1mLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTpsLG1hcmdpblJpZ2h0Onh9XX0sZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoInN1cHN1YiBtdXN0IGhhdmUgZWl0aGVyIHN1cCBvciBzdWIuIik7dmFyIEk9U0MocywicmlnaHQiKXx8Im1vcmQiO3JldHVybiBGZS5tYWtlU3BhbihbSV0sW3MsRmUubWFrZVNwYW4oWyJtc3Vwc3ViIl0sW19dKV0sZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj0hMSxuLGk7dC5iYXNlJiZ0LmJhc2UudHlwZT09PSJob3JpekJyYWNlIiYmKGk9ISF0LnN1cCxpPT09dC5iYXNlLmlzT3ZlciYmKHI9ITAsbj10LmJhc2UuaXNPdmVyKSksdC5iYXNlJiYodC5iYXNlLnR5cGU9PT0ib3AifHx0LmJhc2UudHlwZT09PSJvcGVyYXRvcm5hbWUiKSYmKHQuYmFzZS5wYXJlbnRJc1N1cFN1Yj0hMCk7dmFyIGE9W3luKHQuYmFzZSxlKV07dC5zdWImJmEucHVzaCh5bih0LnN1YixlKSksdC5zdXAmJmEucHVzaCh5bih0LnN1cCxlKSk7dmFyIHM7aWYocilzPW4/Im1vdmVyIjoibXVuZGVyIjtlbHNlIGlmKHQuc3ViKWlmKHQuc3VwKXt2YXIgaD10LmJhc2U7aCYmaC50eXBlPT09Im9wIiYmaC5saW1pdHMmJmUuc3R5bGU9PT1yci5ESVNQTEFZfHxoJiZoLnR5cGU9PT0ib3BlcmF0b3JuYW1lIiYmaC5hbHdheXNIYW5kbGVTdXBTdWImJihlLnN0eWxlPT09cnIuRElTUExBWXx8aC5saW1pdHMpP3M9Im11bmRlcm92ZXIiOnM9Im1zdWJzdXAifWVsc2V7dmFyIHU9dC5iYXNlO3UmJnUudHlwZT09PSJvcCImJnUubGltaXRzJiYoZS5zdHlsZT09PXJyLkRJU1BMQVl8fHUuYWx3YXlzSGFuZGxlU3VwU3ViKXx8dSYmdS50eXBlPT09Im9wZXJhdG9ybmFtZSImJnUuYWx3YXlzSGFuZGxlU3VwU3ViJiYodS5saW1pdHN8fGUuc3R5bGU9PT1yci5ESVNQTEFZKT9zPSJtdW5kZXIiOnM9Im1zdWIifWVsc2V7dmFyIGw9dC5iYXNlO2wmJmwudHlwZT09PSJvcCImJmwubGltaXRzJiYoZS5zdHlsZT09PXJyLkRJU1BMQVl8fGwuYWx3YXlzSGFuZGxlU3VwU3ViKXx8bCYmbC50eXBlPT09Im9wZXJhdG9ybmFtZSImJmwuYWx3YXlzSGFuZGxlU3VwU3ViJiYobC5saW1pdHN8fGUuc3R5bGU9PT1yci5ESVNQTEFZKT9zPSJtb3ZlciI6cz0ibXN1cCJ9cmV0dXJuIG5ldyBhdC5NYXRoTm9kZShzLGEpfX0pO2lkKHt0eXBlOiJhdG9tIixodG1sQnVpbGRlcih0LGUpe3JldHVybiBGZS5tYXRoc3ltKHQudGV4dCx0Lm1vZGUsZSxbIm0iK3QuZmFtaWx5XSl9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1uZXcgYXQuTWF0aE5vZGUoIm1vIixbTW8odC50ZXh0LHQubW9kZSldKTtpZih0LmZhbWlseT09PSJiaW4iKXt2YXIgbj1CQyh0LGUpO249PT0iYm9sZC1pdGFsaWMiJiZyLnNldEF0dHJpYnV0ZSgibWF0aHZhcmlhbnQiLG4pfWVsc2UgdC5mYW1pbHk9PT0icHVuY3QiP3Iuc2V0QXR0cmlidXRlKCJzZXBhcmF0b3IiLCJ0cnVlIik6KHQuZmFtaWx5PT09Im9wZW4ifHx0LmZhbWlseT09PSJjbG9zZSIpJiZyLnNldEF0dHJpYnV0ZSgic3RyZXRjaHkiLCJmYWxzZSIpO3JldHVybiByfX0pO3ckPXttaToiaXRhbGljIixtbjoibm9ybWFsIixtdGV4dDoibm9ybWFsIn07aWQoe3R5cGU6Im1hdGhvcmQiLGh0bWxCdWlsZGVyKHQsZSl7cmV0dXJuIEZlLm1ha2VPcmQodCxlLCJtYXRob3JkIil9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1uZXcgYXQuTWF0aE5vZGUoIm1pIixbTW8odC50ZXh0LHQubW9kZSxlKV0pLG49QkModCxlKXx8Iml0YWxpYyI7cmV0dXJuIG4hPT13JFtyLnR5cGVdJiZyLnNldEF0dHJpYnV0ZSgibWF0aHZhcmlhbnQiLG4pLHJ9fSk7aWQoe3R5cGU6InRleHRvcmQiLGh0bWxCdWlsZGVyKHQsZSl7cmV0dXJuIEZlLm1ha2VPcmQodCxlLCJ0ZXh0b3JkIil9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1Nbyh0LnRleHQsdC5tb2RlLGUpLG49QkModCxlKXx8Im5vcm1hbCIsaTtyZXR1cm4gdC5tb2RlPT09InRleHQiP2k9bmV3IGF0Lk1hdGhOb2RlKCJtdGV4dCIsW3JdKTovWzAtOV0vLnRlc3QodC50ZXh0KT9pPW5ldyBhdC5NYXRoTm9kZSgibW4iLFtyXSk6dC50ZXh0PT09IlxccHJpbWUiP2k9bmV3IGF0Lk1hdGhOb2RlKCJtbyIsW3JdKTppPW5ldyBhdC5NYXRoTm9kZSgibWkiLFtyXSksbiE9PXckW2kudHlwZV0mJmkuc2V0QXR0cmlidXRlKCJtYXRodmFyaWFudCIsbiksaX19KTt2Qz17Ilxcbm9icmVhayI6Im5vYnJlYWsiLCJcXGFsbG93YnJlYWsiOiJhbGxvd2JyZWFrIn0seEM9eyIgIjp7fSwiXFwgIjp7fSwifiI6e2NsYXNzTmFtZToibm9icmVhayJ9LCJcXHNwYWNlIjp7fSwiXFxub2JyZWFrc3BhY2UiOntjbGFzc05hbWU6Im5vYnJlYWsifX07aWQoe3R5cGU6InNwYWNpbmciLGh0bWxCdWlsZGVyKHQsZSl7aWYoeEMuaGFzT3duUHJvcGVydHkodC50ZXh0KSl7dmFyIHI9eENbdC50ZXh0XS5jbGFzc05hbWV8fCIiO2lmKHQubW9kZT09PSJ0ZXh0Iil7dmFyIG49RmUubWFrZU9yZCh0LGUsInRleHRvcmQiKTtyZXR1cm4gbi5jbGFzc2VzLnB1c2gociksbn1lbHNlIHJldHVybiBGZS5tYWtlU3BhbihbIm1zcGFjZSIscl0sW0ZlLm1hdGhzeW0odC50ZXh0LHQubW9kZSxlKV0sZSl9ZWxzZXtpZih2Qy5oYXNPd25Qcm9wZXJ0eSh0LnRleHQpKXJldHVybiBGZS5tYWtlU3BhbihbIm1zcGFjZSIsdkNbdC50ZXh0XV0sW10sZSk7dGhyb3cgbmV3IGx0KCdVbmtub3duIHR5cGUgb2Ygc3BhY2UgIicrdC50ZXh0KyciJyl9fSxtYXRobWxCdWlsZGVyKHQsZSl7dmFyIHI7aWYoeEMuaGFzT3duUHJvcGVydHkodC50ZXh0KSlyPW5ldyBhdC5NYXRoTm9kZSgibXRleHQiLFtuZXcgYXQuVGV4dE5vZGUoIlx4QTAiKV0pO2Vsc2V7aWYodkMuaGFzT3duUHJvcGVydHkodC50ZXh0KSlyZXR1cm4gbmV3IGF0Lk1hdGhOb2RlKCJtc3BhY2UiKTt0aHJvdyBuZXcgbHQoJ1Vua25vd24gdHlwZSBvZiBzcGFjZSAiJyt0LnRleHQrJyInKX1yZXR1cm4gcn19KTtFRz1vKCgpPT57dmFyIHQ9bmV3IGF0Lk1hdGhOb2RlKCJtdGQiLFtdKTtyZXR1cm4gdC5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiNTAlIiksdH0sInBhZCIpO2lkKHt0eXBlOiJ0YWciLG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1uZXcgYXQuTWF0aE5vZGUoIm10YWJsZSIsW25ldyBhdC5NYXRoTm9kZSgibXRyIixbRUcoKSxuZXcgYXQuTWF0aE5vZGUoIm10ZCIsW3ZoKHQuYm9keSxlKV0pLEVHKCksbmV3IGF0Lk1hdGhOb2RlKCJtdGQiLFt2aCh0LnRhZyxlKV0pXSldKTtyZXR1cm4gci5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpLHJ9fSk7U0c9eyJcXHRleHQiOnZvaWQgMCwiXFx0ZXh0cm0iOiJ0ZXh0cm0iLCJcXHRleHRzZiI6InRleHRzZiIsIlxcdGV4dHR0IjoidGV4dHR0IiwiXFx0ZXh0bm9ybWFsIjoidGV4dHJtIn0sQ0c9eyJcXHRleHRiZiI6InRleHRiZiIsIlxcdGV4dG1kIjoidGV4dG1kIn0sTzRlPXsiXFx0ZXh0aXQiOiJ0ZXh0aXQiLCJcXHRleHR1cCI6InRleHR1cCJ9LEFHPW8oKHQsZSk9Pnt2YXIgcj10LmZvbnQ7aWYocil7aWYoU0dbcl0pcmV0dXJuIGUud2l0aFRleHRGb250RmFtaWx5KFNHW3JdKTtpZihDR1tyXSlyZXR1cm4gZS53aXRoVGV4dEZvbnRXZWlnaHQoQ0dbcl0pO2lmKHI9PT0iXFxlbXBoIilyZXR1cm4gZS5mb250U2hhcGU9PT0idGV4dGl0Ij9lLndpdGhUZXh0Rm9udFNoYXBlKCJ0ZXh0dXAiKTplLndpdGhUZXh0Rm9udFNoYXBlKCJ0ZXh0aXQiKX1lbHNlIHJldHVybiBlO3JldHVybiBlLndpdGhUZXh0Rm9udFNoYXBlKE80ZVtyXSl9LCJvcHRpb25zV2l0aEZvbnQiKTtTdCh7dHlwZToidGV4dCIsbmFtZXM6WyJcXHRleHQiLCJcXHRleHRybSIsIlxcdGV4dHNmIiwiXFx0ZXh0dHQiLCJcXHRleHRub3JtYWwiLCJcXHRleHRiZiIsIlxcdGV4dG1kIiwiXFx0ZXh0aXQiLCJcXHRleHR1cCIsIlxcZW1waCJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJ0ZXh0Il0sYWxsb3dlZEluQXJndW1lbnQ6ITAsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cixmdW5jTmFtZTpufT10LGk9ZVswXTtyZXR1cm57dHlwZToidGV4dCIsbW9kZTpyLm1vZGUsYm9keTpnaShpKSxmb250Om59fSxodG1sQnVpbGRlcih0LGUpe3ZhciByPUFHKHQsZSksbj1GaSh0LmJvZHksciwhMCk7cmV0dXJuIEZlLm1ha2VTcGFuKFsibW9yZCIsInRleHQiXSxuLHIpfSxtYXRobWxCdWlsZGVyKHQsZSl7dmFyIHI9QUcodCxlKTtyZXR1cm4gdmgodC5ib2R5LHIpfX0pO1N0KHt0eXBlOiJ1bmRlcmxpbmUiLG5hbWVzOlsiXFx1bmRlcmxpbmUiXSxwcm9wczp7bnVtQXJnczoxLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnJ9PXQ7cmV0dXJue3R5cGU6InVuZGVybGluZSIsbW9kZTpyLm1vZGUsYm9keTplWzBdfX0saHRtbEJ1aWxkZXIodCxlKXt2YXIgcj1Qcih0LmJvZHksZSksbj1GZS5tYWtlTGluZVNwYW4oInVuZGVybGluZS1saW5lIixlKSxpPWUuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcyxhPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJ0b3AiLHBvc2l0aW9uRGF0YTpyLmhlaWdodCxjaGlsZHJlbjpbe3R5cGU6Imtlcm4iLHNpemU6aX0se3R5cGU6ImVsZW0iLGVsZW06bn0se3R5cGU6Imtlcm4iLHNpemU6MyppfSx7dHlwZToiZWxlbSIsZWxlbTpyfV19LGUpO3JldHVybiBGZS5tYWtlU3BhbihbIm1vcmQiLCJ1bmRlcmxpbmUiXSxbYV0sZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1uZXcgYXQuTWF0aE5vZGUoIm1vIixbbmV3IGF0LlRleHROb2RlKCJcdTIwM0UiKV0pO3Iuc2V0QXR0cmlidXRlKCJzdHJldGNoeSIsInRydWUiKTt2YXIgbj1uZXcgYXQuTWF0aE5vZGUoIm11bmRlciIsW3luKHQuYm9keSxlKSxyXSk7cmV0dXJuIG4uc2V0QXR0cmlidXRlKCJhY2NlbnR1bmRlciIsInRydWUiKSxufX0pO1N0KHt0eXBlOiJ2Y2VudGVyIixuYW1lczpbIlxcdmNlbnRlciJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJvcmlnaW5hbCJdLGFsbG93ZWRJblRleHQ6ITF9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnJ9PXQ7cmV0dXJue3R5cGU6InZjZW50ZXIiLG1vZGU6ci5tb2RlLGJvZHk6ZVswXX19LGh0bWxCdWlsZGVyKHQsZSl7dmFyIHI9UHIodC5ib2R5LGUpLG49ZS5mb250TWV0cmljcygpLmF4aXNIZWlnaHQsaT0uNSooci5oZWlnaHQtbi0oci5kZXB0aCtuKSk7cmV0dXJuIEZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJzaGlmdCIscG9zaXRpb25EYXRhOmksY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOnJ9XX0sZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXtyZXR1cm4gbmV3IGF0Lk1hdGhOb2RlKCJtcGFkZGVkIixbeW4odC5ib2R5LGUpXSxbInZjZW50ZXIiXSl9fSk7U3Qoe3R5cGU6InZlcmIiLG5hbWVzOlsiXFx2ZXJiIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKHQsZSxyKXt0aHJvdyBuZXcgbHQoIlxcdmVyYiBlbmRlZCBieSBlbmQgb2YgbGluZSBpbnN0ZWFkIG9mIG1hdGNoaW5nIGRlbGltaXRlciIpfSxodG1sQnVpbGRlcih0LGUpe2Zvcih2YXIgcj1fRyh0KSxuPVtdLGk9ZS5oYXZpbmdTdHlsZShlLnN0eWxlLnRleHQoKSksYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgcz1yW2FdO3M9PT0ifiImJihzPSJcXHRleHRhc2NpaXRpbGRlIiksbi5wdXNoKEZlLm1ha2VTeW1ib2wocywiVHlwZXdyaXRlci1SZWd1bGFyIix0Lm1vZGUsaSxbIm1vcmQiLCJ0ZXh0dHQiXSkpfXJldHVybiBGZS5tYWtlU3BhbihbIm1vcmQiLCJ0ZXh0Il0uY29uY2F0KGkuc2l6aW5nQ2xhc3NlcyhlKSksRmUudHJ5Q29tYmluZUNoYXJzKG4pLGkpfSxtYXRobWxCdWlsZGVyKHQsZSl7dmFyIHI9bmV3IGF0LlRleHROb2RlKF9HKHQpKSxuPW5ldyBhdC5NYXRoTm9kZSgibXRleHQiLFtyXSk7cmV0dXJuIG4uc2V0QXR0cmlidXRlKCJtYXRodmFyaWFudCIsIm1vbm9zcGFjZSIpLG59fSk7X0c9byh0PT50LmJvZHkucmVwbGFjZSgvIC9nLHQuc3Rhcj8iXHUyNDIzIjoiXHhBMCIpLCJtYWtlVmVyYiIpLGdoPUhHLFQkPWBbIFxyCgldYCxQNGU9IlxcXFxbYS16QS1aQF0rIixCNGU9IlxcXFxbXlx1RDgwMC1cdURGRkZdIixGNGU9IigiK1A0ZSsiKSIrVCQrIioiLHo0ZT1gXFxcXCgKfFsgXHIJXSsKPylbIFxyCV0qYCxEQz0iW1x1MDMwMC1cdTAzNkZdIixHNGU9bmV3IFJlZ0V4cChEQysiKyQiKSwkNGU9IigiK1QkKyIrKXwiKyh6NGUrInwiKSsiKFshLVxcW1xcXS1cdTIwMjdcdTIwMkEtXHVEN0ZGXHVGOTAwLVx1RkZGRl0iKyhEQysiKiIpKyJ8W1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdIisoREMrIioiKSsifFxcXFx2ZXJiXFwqKFteXSkuKj9cXDR8XFxcXHZlcmIoW14qYS16QS1aXSkuKj9cXDUiKygifCIrRjRlKSsoInwiK0I0ZSsiKSIpLEE0PWNsYXNze3N0YXRpY3tvKHRoaXMsIkxleGVyIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLmlucHV0PXZvaWQgMCx0aGlzLnNldHRpbmdzPXZvaWQgMCx0aGlzLnRva2VuUmVnZXg9dm9pZCAwLHRoaXMuY2F0Y29kZXM9dm9pZCAwLHRoaXMuaW5wdXQ9ZSx0aGlzLnNldHRpbmdzPXIsdGhpcy50b2tlblJlZ2V4PW5ldyBSZWdFeHAoJDRlLCJnIiksdGhpcy5jYXRjb2Rlcz17IiUiOjE0LCJ+IjoxM319c2V0Q2F0Y29kZShlLHIpe3RoaXMuY2F0Y29kZXNbZV09cn1sZXgoKXt2YXIgZT10aGlzLmlucHV0LHI9dGhpcy50b2tlblJlZ2V4Lmxhc3RJbmRleDtpZihyPT09ZS5sZW5ndGgpcmV0dXJuIG5ldyBSbygiRU9GIixuZXcgSnModGhpcyxyLHIpKTt2YXIgbj10aGlzLnRva2VuUmVnZXguZXhlYyhlKTtpZihuPT09bnVsbHx8bi5pbmRleCE9PXIpdGhyb3cgbmV3IGx0KCJVbmV4cGVjdGVkIGNoYXJhY3RlcjogJyIrZVtyXSsiJyIsbmV3IFJvKGVbcl0sbmV3IEpzKHRoaXMscixyKzEpKSk7dmFyIGk9bls2XXx8blszXXx8KG5bMl0/IlxcICI6IiAiKTtpZih0aGlzLmNhdGNvZGVzW2ldPT09MTQpe3ZhciBhPWUuaW5kZXhPZihgCmAsdGhpcy50b2tlblJlZ2V4Lmxhc3RJbmRleCk7cmV0dXJuIGE9PT0tMT8odGhpcy50b2tlblJlZ2V4Lmxhc3RJbmRleD1lLmxlbmd0aCx0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgiY29tbWVudEF0RW5kIiwiJSBjb21tZW50IGhhcyBubyB0ZXJtaW5hdGluZyBuZXdsaW5lOyBMYVRlWCB3b3VsZCBmYWlsIGJlY2F1c2Ugb2YgY29tbWVudGluZyB0aGUgZW5kIG9mIG1hdGggbW9kZSAoZS5nLiAkKSIpKTp0aGlzLnRva2VuUmVnZXgubGFzdEluZGV4PWErMSx0aGlzLmxleCgpfXJldHVybiBuZXcgUm8oaSxuZXcgSnModGhpcyxyLHRoaXMudG9rZW5SZWdleC5sYXN0SW5kZXgpKX19LE5DPWNsYXNze3N0YXRpY3tvKHRoaXMsIk5hbWVzcGFjZSIpfWNvbnN0cnVjdG9yKGUscil7ZT09PXZvaWQgMCYmKGU9e30pLHI9PT12b2lkIDAmJihyPXt9KSx0aGlzLmN1cnJlbnQ9dm9pZCAwLHRoaXMuYnVpbHRpbnM9dm9pZCAwLHRoaXMudW5kZWZTdGFjaz12b2lkIDAsdGhpcy5jdXJyZW50PXIsdGhpcy5idWlsdGlucz1lLHRoaXMudW5kZWZTdGFjaz1bXX1iZWdpbkdyb3VwKCl7dGhpcy51bmRlZlN0YWNrLnB1c2goe30pfWVuZEdyb3VwKCl7aWYodGhpcy51bmRlZlN0YWNrLmxlbmd0aD09PTApdGhyb3cgbmV3IGx0KCJVbmJhbGFuY2VkIG5hbWVzcGFjZSBkZXN0cnVjdGlvbjogYXR0ZW1wdCB0byBwb3AgZ2xvYmFsIG5hbWVzcGFjZTsgcGxlYXNlIHJlcG9ydCB0aGlzIGFzIGEgYnVnIik7dmFyIGU9dGhpcy51bmRlZlN0YWNrLnBvcCgpO2Zvcih2YXIgciBpbiBlKWUuaGFzT3duUHJvcGVydHkocikmJihlW3JdPT1udWxsP2RlbGV0ZSB0aGlzLmN1cnJlbnRbcl06dGhpcy5jdXJyZW50W3JdPWVbcl0pfWVuZEdyb3Vwcygpe2Zvcig7dGhpcy51bmRlZlN0YWNrLmxlbmd0aD4wOyl0aGlzLmVuZEdyb3VwKCl9aGFzKGUpe3JldHVybiB0aGlzLmN1cnJlbnQuaGFzT3duUHJvcGVydHkoZSl8fHRoaXMuYnVpbHRpbnMuaGFzT3duUHJvcGVydHkoZSl9Z2V0KGUpe3JldHVybiB0aGlzLmN1cnJlbnQuaGFzT3duUHJvcGVydHkoZSk/dGhpcy5jdXJyZW50W2VdOnRoaXMuYnVpbHRpbnNbZV19c2V0KGUscixuKXtpZihuPT09dm9pZCAwJiYobj0hMSksbil7Zm9yKHZhciBpPTA7aTx0aGlzLnVuZGVmU3RhY2subGVuZ3RoO2krKylkZWxldGUgdGhpcy51bmRlZlN0YWNrW2ldW2VdO3RoaXMudW5kZWZTdGFjay5sZW5ndGg+MCYmKHRoaXMudW5kZWZTdGFja1t0aGlzLnVuZGVmU3RhY2subGVuZ3RoLTFdW2VdPXIpfWVsc2V7dmFyIGE9dGhpcy51bmRlZlN0YWNrW3RoaXMudW5kZWZTdGFjay5sZW5ndGgtMV07YSYmIWEuaGFzT3duUHJvcGVydHkoZSkmJihhW2VdPXRoaXMuY3VycmVudFtlXSl9cj09bnVsbD9kZWxldGUgdGhpcy5jdXJyZW50W2VdOnRoaXMuY3VycmVudFtlXT1yfX0sVjRlPWgkO2xlKCJcXG5vZXhwYW5kIixmdW5jdGlvbih0KXt2YXIgZT10LnBvcFRva2VuKCk7cmV0dXJuIHQuaXNFeHBhbmRhYmxlKGUudGV4dCkmJihlLm5vZXhwYW5kPSEwLGUudHJlYXRBc1JlbGF4PSEwKSx7dG9rZW5zOltlXSxudW1BcmdzOjB9fSk7bGUoIlxcZXhwYW5kYWZ0ZXIiLGZ1bmN0aW9uKHQpe3ZhciBlPXQucG9wVG9rZW4oKTtyZXR1cm4gdC5leHBhbmRPbmNlKCEwKSx7dG9rZW5zOltlXSxudW1BcmdzOjB9fSk7bGUoIlxcQGZpcnN0b2Z0d28iLGZ1bmN0aW9uKHQpe3ZhciBlPXQuY29uc3VtZUFyZ3MoMik7cmV0dXJue3Rva2VuczplWzBdLG51bUFyZ3M6MH19KTtsZSgiXFxAc2Vjb25kb2Z0d28iLGZ1bmN0aW9uKHQpe3ZhciBlPXQuY29uc3VtZUFyZ3MoMik7cmV0dXJue3Rva2VuczplWzFdLG51bUFyZ3M6MH19KTtsZSgiXFxAaWZuZXh0Y2hhciIsZnVuY3Rpb24odCl7dmFyIGU9dC5jb25zdW1lQXJncygzKTt0LmNvbnN1bWVTcGFjZXMoKTt2YXIgcj10LmZ1dHVyZSgpO3JldHVybiBlWzBdLmxlbmd0aD09PTEmJmVbMF1bMF0udGV4dD09PXIudGV4dD97dG9rZW5zOmVbMV0sbnVtQXJnczowfTp7dG9rZW5zOmVbMl0sbnVtQXJnczowfX0pO2xlKCJcXEBpZnN0YXIiLCJcXEBpZm5leHRjaGFyICp7XFxAZmlyc3RvZnR3b3sjMX19Iik7bGUoIlxcVGV4dE9yTWF0aCIsZnVuY3Rpb24odCl7dmFyIGU9dC5jb25zdW1lQXJncygyKTtyZXR1cm4gdC5tb2RlPT09InRleHQiP3t0b2tlbnM6ZVswXSxudW1BcmdzOjB9Ont0b2tlbnM6ZVsxXSxudW1BcmdzOjB9fSk7TEc9ezA6MCwxOjEsMjoyLDM6Myw0OjQsNTo1LDY6Niw3OjcsODo4LDk6OSxhOjEwLEE6MTAsYjoxMSxCOjExLGM6MTIsQzoxMixkOjEzLEQ6MTMsZToxNCxFOjE0LGY6MTUsRjoxNX07bGUoIlxcY2hhciIsZnVuY3Rpb24odCl7dmFyIGU9dC5wb3BUb2tlbigpLHIsbj0iIjtpZihlLnRleHQ9PT0iJyIpcj04LGU9dC5wb3BUb2tlbigpO2Vsc2UgaWYoZS50ZXh0PT09JyInKXI9MTYsZT10LnBvcFRva2VuKCk7ZWxzZSBpZihlLnRleHQ9PT0iYCIpaWYoZT10LnBvcFRva2VuKCksZS50ZXh0WzBdPT09IlxcIiluPWUudGV4dC5jaGFyQ29kZUF0KDEpO2Vsc2V7aWYoZS50ZXh0PT09IkVPRiIpdGhyb3cgbmV3IGx0KCJcXGNoYXJgIG1pc3NpbmcgYXJndW1lbnQiKTtuPWUudGV4dC5jaGFyQ29kZUF0KDApfWVsc2Ugcj0xMDtpZihyKXtpZihuPUxHW2UudGV4dF0sbj09bnVsbHx8bj49cil0aHJvdyBuZXcgbHQoIkludmFsaWQgYmFzZS0iK3IrIiBkaWdpdCAiK2UudGV4dCk7Zm9yKHZhciBpOyhpPUxHW3QuZnV0dXJlKCkudGV4dF0pIT1udWxsJiZpPHI7KW4qPXIsbis9aSx0LnBvcFRva2VuKCl9cmV0dXJuIlxcQGNoYXJ7IituKyJ9In0pO3FDPW8oKHQsZSxyKT0+e3ZhciBuPXQuY29uc3VtZUFyZygpLnRva2VucztpZihuLmxlbmd0aCE9PTEpdGhyb3cgbmV3IGx0KCJcXG5ld2NvbW1hbmQncyBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgbWFjcm8gbmFtZSIpO3ZhciBpPW5bMF0udGV4dCxhPXQuaXNEZWZpbmVkKGkpO2lmKGEmJiFlKXRocm93IG5ldyBsdCgiXFxuZXdjb21tYW5keyIraSsifSBhdHRlbXB0aW5nIHRvIHJlZGVmaW5lICIrKGkrIjsgdXNlIFxccmVuZXdjb21tYW5kIikpO2lmKCFhJiYhcil0aHJvdyBuZXcgbHQoIlxccmVuZXdjb21tYW5keyIraSsifSB3aGVuIGNvbW1hbmQgIitpKyIgZG9lcyBub3QgeWV0IGV4aXN0OyB1c2UgXFxuZXdjb21tYW5kIik7dmFyIHM9MDtpZihuPXQuY29uc3VtZUFyZygpLnRva2VucyxuLmxlbmd0aD09PTEmJm5bMF0udGV4dD09PSJbIil7Zm9yKHZhciBsPSIiLHU9dC5leHBhbmROZXh0VG9rZW4oKTt1LnRleHQhPT0iXSImJnUudGV4dCE9PSJFT0YiOylsKz11LnRleHQsdT10LmV4cGFuZE5leHRUb2tlbigpO2lmKCFsLm1hdGNoKC9eXHMqWzAtOV0rXHMqJC8pKXRocm93IG5ldyBsdCgiSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzOiAiK2wpO3M9cGFyc2VJbnQobCksbj10LmNvbnN1bWVBcmcoKS50b2tlbnN9cmV0dXJuIHQubWFjcm9zLnNldChpLHt0b2tlbnM6bixudW1BcmdzOnN9KSwiIn0sIm5ld2NvbW1hbmQiKTtsZSgiXFxuZXdjb21tYW5kIix0PT5xQyh0LCExLCEwKSk7bGUoIlxccmVuZXdjb21tYW5kIix0PT5xQyh0LCEwLCExKSk7bGUoIlxccHJvdmlkZWNvbW1hbmQiLHQ9PnFDKHQsITAsITApKTtsZSgiXFxtZXNzYWdlIix0PT57dmFyIGU9dC5jb25zdW1lQXJncygxKVswXTtyZXR1cm4gY29uc29sZS5sb2coZS5yZXZlcnNlKCkubWFwKHI9PnIudGV4dCkuam9pbigiIikpLCIifSk7bGUoIlxcZXJybWVzc2FnZSIsdD0+e3ZhciBlPXQuY29uc3VtZUFyZ3MoMSlbMF07cmV0dXJuIGNvbnNvbGUuZXJyb3IoZS5yZXZlcnNlKCkubWFwKHI9PnIudGV4dCkuam9pbigiIikpLCIifSk7bGUoIlxcc2hvdyIsdD0+e3ZhciBlPXQucG9wVG9rZW4oKSxyPWUudGV4dDtyZXR1cm4gY29uc29sZS5sb2coZSx0Lm1hY3Jvcy5nZXQociksZ2hbcl0sQ24ubWF0aFtyXSxDbi50ZXh0W3JdKSwiIn0pO2xlKCJcXGJncm91cCIsInsiKTtsZSgiXFxlZ3JvdXAiLCJ9Iik7bGUoIn4iLCJcXG5vYnJlYWtzcGFjZSIpO2xlKCJcXGxxIiwiYCIpO2xlKCJcXHJxIiwiJyIpO2xlKCJcXGFhIiwiXFxyIGEiKTtsZSgiXFxBQSIsIlxcciBBIik7bGUoIlxcdGV4dGNvcHlyaWdodCIsIlxcaHRtbEBtYXRobWx7XFx0ZXh0Y2lyY2xlZHtjfX17XFxjaGFyYFx4QTl9Iik7bGUoIlxcY29weXJpZ2h0IiwiXFxUZXh0T3JNYXRoe1xcdGV4dGNvcHlyaWdodH17XFx0ZXh0e1xcdGV4dGNvcHlyaWdodH19Iik7bGUoIlxcdGV4dHJlZ2lzdGVyZWQiLCJcXGh0bWxAbWF0aG1se1xcdGV4dGNpcmNsZWR7XFxzY3JpcHRzaXplIFJ9fXtcXGNoYXJgXHhBRX0iKTtsZSgiXHUyMTJDIiwiXFxtYXRoc2Nye0J9Iik7bGUoIlx1MjEzMCIsIlxcbWF0aHNjcntFfSIpO2xlKCJcdTIxMzEiLCJcXG1hdGhzY3J7Rn0iKTtsZSgiXHUyMTBCIiwiXFxtYXRoc2Nye0h9Iik7bGUoIlx1MjExMCIsIlxcbWF0aHNjcntJfSIpO2xlKCJcdTIxMTIiLCJcXG1hdGhzY3J7TH0iKTtsZSgiXHUyMTMzIiwiXFxtYXRoc2Nye019Iik7bGUoIlx1MjExQiIsIlxcbWF0aHNjcntSfSIpO2xlKCJcdTIxMkQiLCJcXG1hdGhmcmFre0N9Iik7bGUoIlx1MjEwQyIsIlxcbWF0aGZyYWt7SH0iKTtsZSgiXHUyMTI4IiwiXFxtYXRoZnJha3tafSIpO2xlKCJcXEJiYmsiLCJcXEJiYntrfSIpO2xlKCJceEI3IiwiXFxjZG90cCIpO2xlKCJcXGxsYXAiLCJcXG1hdGhsbGFwe1xcdGV4dHJteyMxfX0iKTtsZSgiXFxybGFwIiwiXFxtYXRocmxhcHtcXHRleHRybXsjMX19Iik7bGUoIlxcY2xhcCIsIlxcbWF0aGNsYXB7XFx0ZXh0cm17IzF9fSIpO2xlKCJcXG1hdGhzdHJ1dCIsIlxcdnBoYW50b217KH0iKTtsZSgiXFx1bmRlcmJhciIsIlxcdW5kZXJsaW5le1xcdGV4dHsjMX19Iik7bGUoIlxcbm90IiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFxtYXRocmxhcFxcQG5vdH19e1xcY2hhciIzMzh9Jyk7bGUoIlxcbmVxIiwiXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFxub3Q9fX17XFxtYXRocmVse1xcY2hhcmBcdTIyNjB9fSIpO2xlKCJcXG5lIiwiXFxuZXEiKTtsZSgiXHUyMjYwIiwiXFxuZXEiKTtsZSgiXFxub3RpbiIsIlxcaHRtbEBtYXRobWx7XFxtYXRocmVse3tcXGlufVxcbWF0aGxsYXB7L1xcbXNraXAxbXV9fX17XFxtYXRocmVse1xcY2hhcmBcdTIyMDl9fSIpO2xlKCJcdTIyMDkiLCJcXG5vdGluIik7bGUoIlx1MjI1OCIsIlxcaHRtbEBtYXRobWx7XFxtYXRocmVsez1cXGtlcm57LTFlbX1cXHJhaXNlYm94ezAuNGVtfXskXFxzY3JpcHRzaXplXFxmcm93biR9fX17XFxtYXRocmVse1xcY2hhcmBcdTIyNTh9fSIpO2xlKCJcdTIyNTkiLCJcXGh0bWxAbWF0aG1se1xcc3RhY2tyZWx7XFx0aW55XFx3ZWRnZX17PX19e1xcbWF0aHJlbHtcXGNoYXJgXHUyMjU4fX0iKTtsZSgiXHUyMjVBIiwiXFxodG1sQG1hdGhtbHtcXHN0YWNrcmVse1xcdGlueVxcdmVlfXs9fX17XFxtYXRocmVse1xcY2hhcmBcdTIyNUF9fSIpO2xlKCJcdTIyNUIiLCJcXGh0bWxAbWF0aG1se1xcc3RhY2tyZWx7XFxzY3JpcHRzaXplXFxzdGFyfXs9fX17XFxtYXRocmVse1xcY2hhcmBcdTIyNUJ9fSIpO2xlKCJcdTIyNUQiLCJcXGh0bWxAbWF0aG1se1xcc3RhY2tyZWx7XFx0aW55XFxtYXRocm17ZGVmfX17PX19e1xcbWF0aHJlbHtcXGNoYXJgXHUyMjVEfX0iKTtsZSgiXHUyMjVFIiwiXFxodG1sQG1hdGhtbHtcXHN0YWNrcmVse1xcdGlueVxcbWF0aHJte219fXs9fX17XFxtYXRocmVse1xcY2hhcmBcdTIyNUV9fSIpO2xlKCJcdTIyNUYiLCJcXGh0bWxAbWF0aG1se1xcc3RhY2tyZWx7XFx0aW55P317PX19e1xcbWF0aHJlbHtcXGNoYXJgXHUyMjVGfX0iKTtsZSgiXHUyN0MyIiwiXFxwZXJwIik7bGUoIlx1MjAzQyIsIlxcbWF0aGNsb3NleyFcXG1rZXJuLTAuOG11IX0iKTtsZSgiXHUyMjBDIiwiXFxub3RuaSIpO2xlKCJcdTIzMUMiLCJcXHVsY29ybmVyIik7bGUoIlx1MjMxRCIsIlxcdXJjb3JuZXIiKTtsZSgiXHUyMzFFIiwiXFxsbGNvcm5lciIpO2xlKCJcdTIzMUYiLCJcXGxyY29ybmVyIik7bGUoIlx4QTkiLCJcXGNvcHlyaWdodCIpO2xlKCJceEFFIiwiXFx0ZXh0cmVnaXN0ZXJlZCIpO2xlKCJcdUZFMEYiLCJcXHRleHRyZWdpc3RlcmVkIik7bGUoIlxcdWxjb3JuZXIiLCdcXGh0bWxAbWF0aG1se1xcQHVsY29ybmVyfXtcXG1hdGhvcHtcXGNoYXIiMjMxY319Jyk7bGUoIlxcdXJjb3JuZXIiLCdcXGh0bWxAbWF0aG1se1xcQHVyY29ybmVyfXtcXG1hdGhvcHtcXGNoYXIiMjMxZH19Jyk7bGUoIlxcbGxjb3JuZXIiLCdcXGh0bWxAbWF0aG1se1xcQGxsY29ybmVyfXtcXG1hdGhvcHtcXGNoYXIiMjMxZX19Jyk7bGUoIlxcbHJjb3JuZXIiLCdcXGh0bWxAbWF0aG1se1xcQGxyY29ybmVyfXtcXG1hdGhvcHtcXGNoYXIiMjMxZn19Jyk7bGUoIlxcdmRvdHMiLCJcXG1hdGhvcmR7XFx2YXJ2ZG90c1xccnVsZXswcHR9ezE1cHR9fSIpO2xlKCJcdTIyRUUiLCJcXHZkb3RzIik7bGUoIlxcdmFyR2FtbWEiLCJcXG1hdGhpdHtcXEdhbW1hfSIpO2xlKCJcXHZhckRlbHRhIiwiXFxtYXRoaXR7XFxEZWx0YX0iKTtsZSgiXFx2YXJUaGV0YSIsIlxcbWF0aGl0e1xcVGhldGF9Iik7bGUoIlxcdmFyTGFtYmRhIiwiXFxtYXRoaXR7XFxMYW1iZGF9Iik7bGUoIlxcdmFyWGkiLCJcXG1hdGhpdHtcXFhpfSIpO2xlKCJcXHZhclBpIiwiXFxtYXRoaXR7XFxQaX0iKTtsZSgiXFx2YXJTaWdtYSIsIlxcbWF0aGl0e1xcU2lnbWF9Iik7bGUoIlxcdmFyVXBzaWxvbiIsIlxcbWF0aGl0e1xcVXBzaWxvbn0iKTtsZSgiXFx2YXJQaGkiLCJcXG1hdGhpdHtcXFBoaX0iKTtsZSgiXFx2YXJQc2kiLCJcXG1hdGhpdHtcXFBzaX0iKTtsZSgiXFx2YXJPbWVnYSIsIlxcbWF0aGl0e1xcT21lZ2F9Iik7bGUoIlxcc3Vic3RhY2siLCJcXGJlZ2lue3N1YmFycmF5fXtjfSMxXFxlbmR7c3ViYXJyYXl9Iik7bGUoIlxcY29sb24iLCJcXG5vYnJlYWtcXG1za2lwMm11XFxtYXRocHVuY3R7fVxcbWF0aGNob2ljZXtcXG1rZXJuLTNtdX17XFxta2Vybi0zbXV9e317fXs6fVxcbXNraXA2bXVcXHJlbGF4Iik7bGUoIlxcYm94ZWQiLCJcXGZib3h7JFxcZGlzcGxheXN0eWxleyMxfSR9Iik7bGUoIlxcaWZmIiwiXFxET1RTQlxcO1xcTG9uZ2xlZnRyaWdodGFycm93XFw7Iik7bGUoIlxcaW1wbGllcyIsIlxcRE9UU0JcXDtcXExvbmdyaWdodGFycm93XFw7Iik7bGUoIlxcaW1wbGllZGJ5IiwiXFxET1RTQlxcO1xcTG9uZ2xlZnRhcnJvd1xcOyIpO0RHPXsiLCI6IlxcZG90c2MiLCJcXG5vdCI6IlxcZG90c2IiLCIrIjoiXFxkb3RzYiIsIj0iOiJcXGRvdHNiIiwiPCI6IlxcZG90c2IiLCI+IjoiXFxkb3RzYiIsIi0iOiJcXGRvdHNiIiwiKiI6IlxcZG90c2IiLCI6IjoiXFxkb3RzYiIsIlxcRE9UU0IiOiJcXGRvdHNiIiwiXFxjb3Byb2QiOiJcXGRvdHNiIiwiXFxiaWd2ZWUiOiJcXGRvdHNiIiwiXFxiaWd3ZWRnZSI6IlxcZG90c2IiLCJcXGJpZ3VwbHVzIjoiXFxkb3RzYiIsIlxcYmlnY2FwIjoiXFxkb3RzYiIsIlxcYmlnY3VwIjoiXFxkb3RzYiIsIlxccHJvZCI6IlxcZG90c2IiLCJcXHN1bSI6IlxcZG90c2IiLCJcXGJpZ290aW1lcyI6IlxcZG90c2IiLCJcXGJpZ29wbHVzIjoiXFxkb3RzYiIsIlxcYmlnb2RvdCI6IlxcZG90c2IiLCJcXGJpZ3NxY3VwIjoiXFxkb3RzYiIsIlxcQW5kIjoiXFxkb3RzYiIsIlxcbG9uZ3JpZ2h0YXJyb3ciOiJcXGRvdHNiIiwiXFxMb25ncmlnaHRhcnJvdyI6IlxcZG90c2IiLCJcXGxvbmdsZWZ0YXJyb3ciOiJcXGRvdHNiIiwiXFxMb25nbGVmdGFycm93IjoiXFxkb3RzYiIsIlxcbG9uZ2xlZnRyaWdodGFycm93IjoiXFxkb3RzYiIsIlxcTG9uZ2xlZnRyaWdodGFycm93IjoiXFxkb3RzYiIsIlxcbWFwc3RvIjoiXFxkb3RzYiIsIlxcbG9uZ21hcHN0byI6IlxcZG90c2IiLCJcXGhvb2tyaWdodGFycm93IjoiXFxkb3RzYiIsIlxcZG90ZXEiOiJcXGRvdHNiIiwiXFxtYXRoYmluIjoiXFxkb3RzYiIsIlxcbWF0aHJlbCI6IlxcZG90c2IiLCJcXHJlbGJhciI6IlxcZG90c2IiLCJcXFJlbGJhciI6IlxcZG90c2IiLCJcXHhyaWdodGFycm93IjoiXFxkb3RzYiIsIlxceGxlZnRhcnJvdyI6IlxcZG90c2IiLCJcXERPVFNJIjoiXFxkb3RzaSIsIlxcaW50IjoiXFxkb3RzaSIsIlxcb2ludCI6IlxcZG90c2kiLCJcXGlpbnQiOiJcXGRvdHNpIiwiXFxpaWludCI6IlxcZG90c2kiLCJcXGlpaWludCI6IlxcZG90c2kiLCJcXGlkb3RzaW50IjoiXFxkb3RzaSIsIlxcRE9UU1giOiJcXGRvdHN4In07bGUoIlxcZG90cyIsZnVuY3Rpb24odCl7dmFyIGU9IlxcZG90c28iLHI9dC5leHBhbmRBZnRlckZ1dHVyZSgpLnRleHQ7cmV0dXJuIHIgaW4gREc/ZT1ER1tyXTooci5zbGljZSgwLDQpPT09Ilxcbm90Inx8ciBpbiBDbi5tYXRoJiZKdC5jb250YWlucyhbImJpbiIsInJlbCJdLENuLm1hdGhbcl0uZ3JvdXApKSYmKGU9IlxcZG90c2IiKSxlfSk7WEM9eyIpIjohMCwiXSI6ITAsIlxccmJyYWNrIjohMCwiXFx9IjohMCwiXFxyYnJhY2UiOiEwLCJcXHJhbmdsZSI6ITAsIlxccmNlaWwiOiEwLCJcXHJmbG9vciI6ITAsIlxccmdyb3VwIjohMCwiXFxybW91c3RhY2hlIjohMCwiXFxyaWdodCI6ITAsIlxcYmlnciI6ITAsIlxcYmlnZ3IiOiEwLCJcXEJpZ3IiOiEwLCJcXEJpZ2dyIjohMCwkOiEwLCI7IjohMCwiLiI6ITAsIiwiOiEwfTtsZSgiXFxkb3RzbyIsZnVuY3Rpb24odCl7dmFyIGU9dC5mdXR1cmUoKS50ZXh0O3JldHVybiBlIGluIFhDPyJcXGxkb3RzXFwsIjoiXFxsZG90cyJ9KTtsZSgiXFxkb3RzYyIsZnVuY3Rpb24odCl7dmFyIGU9dC5mdXR1cmUoKS50ZXh0O3JldHVybiBlIGluIFhDJiZlIT09IiwiPyJcXGxkb3RzXFwsIjoiXFxsZG90cyJ9KTtsZSgiXFxjZG90cyIsZnVuY3Rpb24odCl7dmFyIGU9dC5mdXR1cmUoKS50ZXh0O3JldHVybiBlIGluIFhDPyJcXEBjZG90c1xcLCI6IlxcQGNkb3RzIn0pO2xlKCJcXGRvdHNiIiwiXFxjZG90cyIpO2xlKCJcXGRvdHNtIiwiXFxjZG90cyIpO2xlKCJcXGRvdHNpIiwiXFwhXFxjZG90cyIpO2xlKCJcXGRvdHN4IiwiXFxsZG90c1xcLCIpO2xlKCJcXERPVFNJIiwiXFxyZWxheCIpO2xlKCJcXERPVFNCIiwiXFxyZWxheCIpO2xlKCJcXERPVFNYIiwiXFxyZWxheCIpO2xlKCJcXHRtc3BhY2UiLCJcXFRleHRPck1hdGh7XFxrZXJuIzEjM317XFxtc2tpcCMxIzJ9XFxyZWxheCIpO2xlKCJcXCwiLCJcXHRtc3BhY2UrezNtdX17LjE2NjdlbX0iKTtsZSgiXFx0aGluc3BhY2UiLCJcXCwiKTtsZSgiXFw+IiwiXFxtc2tpcHs0bXV9Iik7bGUoIlxcOiIsIlxcdG1zcGFjZSt7NG11fXsuMjIyMmVtfSIpO2xlKCJcXG1lZHNwYWNlIiwiXFw6Iik7bGUoIlxcOyIsIlxcdG1zcGFjZSt7NW11fXsuMjc3N2VtfSIpO2xlKCJcXHRoaWNrc3BhY2UiLCJcXDsiKTtsZSgiXFwhIiwiXFx0bXNwYWNlLXszbXV9ey4xNjY3ZW19Iik7bGUoIlxcbmVndGhpbnNwYWNlIiwiXFwhIik7bGUoIlxcbmVnbWVkc3BhY2UiLCJcXHRtc3BhY2UtezRtdX17LjIyMjJlbX0iKTtsZSgiXFxuZWd0aGlja3NwYWNlIiwiXFx0bXNwYWNlLXs1bXV9ey4yNzdlbX0iKTtsZSgiXFxlbnNwYWNlIiwiXFxrZXJuLjVlbSAiKTtsZSgiXFxlbnNraXAiLCJcXGhza2lwLjVlbVxccmVsYXgiKTtsZSgiXFxxdWFkIiwiXFxoc2tpcDFlbVxccmVsYXgiKTtsZSgiXFxxcXVhZCIsIlxcaHNraXAyZW1cXHJlbGF4Iik7bGUoIlxcdGFnIiwiXFxAaWZzdGFyXFx0YWdAbGl0ZXJhbFxcdGFnQHBhcmVuIik7bGUoIlxcdGFnQHBhcmVuIiwiXFx0YWdAbGl0ZXJhbHsoeyMxfSl9Iik7bGUoIlxcdGFnQGxpdGVyYWwiLHQ9PntpZih0Lm1hY3Jvcy5nZXQoIlxcZGZAdGFnIikpdGhyb3cgbmV3IGx0KCJNdWx0aXBsZSBcXHRhZyIpO3JldHVybiJcXGdkZWZcXGRmQHRhZ3tcXHRleHR7IzF9fSJ9KTtsZSgiXFxibW9kIiwiXFxtYXRoY2hvaWNle1xcbXNraXAxbXV9e1xcbXNraXAxbXV9e1xcbXNraXA1bXV9e1xcbXNraXA1bXV9XFxtYXRoYmlue1xccm0gbW9kfVxcbWF0aGNob2ljZXtcXG1za2lwMW11fXtcXG1za2lwMW11fXtcXG1za2lwNW11fXtcXG1za2lwNW11fSIpO2xlKCJcXHBvZCIsIlxcYWxsb3dicmVha1xcbWF0aGNob2ljZXtcXG1rZXJuMThtdX17XFxta2VybjhtdX17XFxta2VybjhtdX17XFxta2VybjhtdX0oIzEpIik7bGUoIlxccG1vZCIsIlxccG9ke3tcXHJtIG1vZH1cXG1rZXJuNm11IzF9Iik7bGUoIlxcbW9kIiwiXFxhbGxvd2JyZWFrXFxtYXRoY2hvaWNle1xcbWtlcm4xOG11fXtcXG1rZXJuMTJtdX17XFxta2VybjEybXV9e1xcbWtlcm4xMm11fXtcXHJtIG1vZH1cXCxcXCwjMSIpO2xlKCJcXG5ld2xpbmUiLCJcXFxcXFxyZWxheCIpO2xlKCJcXFRlWCIsIlxcdGV4dHJte1xcaHRtbEBtYXRobWx7VFxca2Vybi0uMTY2N2VtXFxyYWlzZWJveHstLjVleH17RX1cXGtlcm4tLjEyNWVtWH17VGVYfX0iKTtrJD1ndChsY1siTWFpbi1SZWd1bGFyIl1bODRdWzFdLS43KmxjWyJNYWluLVJlZ3VsYXIiXVs2NV1bMV0pO2xlKCJcXExhVGVYIiwiXFx0ZXh0cm17XFxodG1sQG1hdGhtbHsiKygiTFxca2Vybi0uMzZlbVxccmFpc2Vib3h7IitrJCsifXtcXHNjcmlwdHN0eWxlIEF9IikrIlxca2Vybi0uMTVlbVxcVGVYfXtMYVRlWH19Iik7bGUoIlxcS2FUZVgiLCJcXHRleHRybXtcXGh0bWxAbWF0aG1seyIrKCJLXFxrZXJuLS4xN2VtXFxyYWlzZWJveHsiK2skKyJ9e1xcc2NyaXB0c3R5bGUgQX0iKSsiXFxrZXJuLS4xNWVtXFxUZVh9e0thVGVYfX0iKTtsZSgiXFxoc3BhY2UiLCJcXEBpZnN0YXJcXEBoc3BhY2VyXFxAaHNwYWNlIik7bGUoIlxcQGhzcGFjZSIsIlxcaHNraXAgIzFcXHJlbGF4Iik7bGUoIlxcQGhzcGFjZXIiLCJcXHJ1bGV7MHB0fXswcHR9XFxoc2tpcCAjMVxccmVsYXgiKTtsZSgiXFxvcmRpbmFyeWNvbG9uIiwiOiIpO2xlKCJcXHZjZW50Y29sb24iLCJcXG1hdGhyZWx7XFxtYXRob3BcXG9yZGluYXJ5Y29sb259Iik7bGUoIlxcZGJsY29sb24iLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXHZjZW50Y29sb25cXG1hdGhyZWx7XFxta2Vybi0uOW11fVxcdmNlbnRjb2xvbn19e1xcbWF0aG9we1xcY2hhciIyMjM3fX0nKTtsZSgiXFxjb2xvbmVxcSIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fT19fXtcXG1hdGhvcHtcXGNoYXIiMjI1NH19Jyk7bGUoIlxcQ29sb25lcXEiLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXGRibGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9PX19e1xcbWF0aG9we1xcY2hhciIyMjM3XFxjaGFyIjNkfX0nKTtsZSgiXFxjb2xvbmVxIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFx2Y2VudGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxtYXRocmVsey19fX17XFxtYXRob3B7XFxjaGFyIjNhXFxjaGFyIjIyMTJ9fScpO2xlKCJcXENvbG9uZXEiLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXGRibGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxtYXRocmVsey19fX17XFxtYXRob3B7XFxjaGFyIjIyMzdcXGNoYXIiMjIxMn19Jyk7bGUoIlxcZXFxY29sb24iLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHs9XFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFx2Y2VudGNvbG9ufX17XFxtYXRob3B7XFxjaGFyIjIyNTV9fScpO2xlKCJcXEVxcWNvbG9uIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7PVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcZGJsY29sb259fXtcXG1hdGhvcHtcXGNoYXIiM2RcXGNoYXIiMjIzN319Jyk7bGUoIlxcZXFjb2xvbiIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcbWF0aHJlbHstfVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcdmNlbnRjb2xvbn19e1xcbWF0aG9we1xcY2hhciIyMjM5fX0nKTtsZSgiXFxFcWNvbG9uIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFxtYXRocmVsey19XFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxkYmxjb2xvbn19e1xcbWF0aG9we1xcY2hhciIyMjEyXFxjaGFyIjIyMzd9fScpO2xlKCJcXGNvbG9uYXBwcm94IiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFx2Y2VudGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxhcHByb3h9fXtcXG1hdGhvcHtcXGNoYXIiM2FcXGNoYXIiMjI0OH19Jyk7bGUoIlxcQ29sb25hcHByb3giLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXGRibGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxhcHByb3h9fXtcXG1hdGhvcHtcXGNoYXIiMjIzN1xcY2hhciIyMjQ4fX0nKTtsZSgiXFxjb2xvbnNpbSIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcc2ltfX17XFxtYXRob3B7XFxjaGFyIjNhXFxjaGFyIjIyM2N9fScpO2xlKCJcXENvbG9uc2ltIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFxkYmxjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcc2ltfX17XFxtYXRob3B7XFxjaGFyIjIyMzdcXGNoYXIiMjIzY319Jyk7bGUoIlx1MjIzNyIsIlxcZGJsY29sb24iKTtsZSgiXHUyMjM5IiwiXFxlcWNvbG9uIik7bGUoIlx1MjI1NCIsIlxcY29sb25lcXEiKTtsZSgiXHUyMjU1IiwiXFxlcXFjb2xvbiIpO2xlKCJcdTJBNzQiLCJcXENvbG9uZXFxIik7bGUoIlxccmF0aW8iLCJcXHZjZW50Y29sb24iKTtsZSgiXFxjb2xvbmNvbG9uIiwiXFxkYmxjb2xvbiIpO2xlKCJcXGNvbG9uZXF1YWxzIiwiXFxjb2xvbmVxcSIpO2xlKCJcXGNvbG9uY29sb25lcXVhbHMiLCJcXENvbG9uZXFxIik7bGUoIlxcZXF1YWxzY29sb24iLCJcXGVxcWNvbG9uIik7bGUoIlxcZXF1YWxzY29sb25jb2xvbiIsIlxcRXFxY29sb24iKTtsZSgiXFxjb2xvbm1pbnVzIiwiXFxjb2xvbmVxIik7bGUoIlxcY29sb25jb2xvbm1pbnVzIiwiXFxDb2xvbmVxIik7bGUoIlxcbWludXNjb2xvbiIsIlxcZXFjb2xvbiIpO2xlKCJcXG1pbnVzY29sb25jb2xvbiIsIlxcRXFjb2xvbiIpO2xlKCJcXGNvbG9uY29sb25hcHByb3giLCJcXENvbG9uYXBwcm94Iik7bGUoIlxcY29sb25jb2xvbnNpbSIsIlxcQ29sb25zaW0iKTtsZSgiXFxzaW1jb2xvbiIsIlxcbWF0aHJlbHtcXHNpbVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcdmNlbnRjb2xvbn0iKTtsZSgiXFxzaW1jb2xvbmNvbG9uIiwiXFxtYXRocmVse1xcc2ltXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxkYmxjb2xvbn0iKTtsZSgiXFxhcHByb3hjb2xvbiIsIlxcbWF0aHJlbHtcXGFwcHJveFxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcdmNlbnRjb2xvbn0iKTtsZSgiXFxhcHByb3hjb2xvbmNvbG9uIiwiXFxtYXRocmVse1xcYXBwcm94XFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxkYmxjb2xvbn0iKTtsZSgiXFxub3RuaSIsIlxcaHRtbEBtYXRobWx7XFxub3RcXG5pfXtcXG1hdGhyZWx7XFxjaGFyYFx1MjIwQ319Iik7bGUoIlxcbGltc3VwIiwiXFxET1RTQlxcb3BlcmF0b3JuYW1lKntsaW1cXCxzdXB9Iik7bGUoIlxcbGltaW5mIiwiXFxET1RTQlxcb3BlcmF0b3JuYW1lKntsaW1cXCxpbmZ9Iik7bGUoIlxcaW5qbGltIiwiXFxET1RTQlxcb3BlcmF0b3JuYW1lKntpbmpcXCxsaW19Iik7bGUoIlxccHJvamxpbSIsIlxcRE9UU0JcXG9wZXJhdG9ybmFtZSp7cHJvalxcLGxpbX0iKTtsZSgiXFx2YXJsaW1zdXAiLCJcXERPVFNCXFxvcGVyYXRvcm5hbWUqe1xcb3ZlcmxpbmV7bGltfX0iKTtsZSgiXFx2YXJsaW1pbmYiLCJcXERPVFNCXFxvcGVyYXRvcm5hbWUqe1xcdW5kZXJsaW5le2xpbX19Iik7bGUoIlxcdmFyaW5qbGltIiwiXFxET1RTQlxcb3BlcmF0b3JuYW1lKntcXHVuZGVycmlnaHRhcnJvd3tsaW19fSIpO2xlKCJcXHZhcnByb2psaW0iLCJcXERPVFNCXFxvcGVyYXRvcm5hbWUqe1xcdW5kZXJsZWZ0YXJyb3d7bGltfX0iKTtsZSgiXFxndmVydG5lcXEiLCJcXGh0bWxAbWF0aG1se1xcQGd2ZXJ0bmVxcX17XHUyMjY5fSIpO2xlKCJcXGx2ZXJ0bmVxcSIsIlxcaHRtbEBtYXRobWx7XFxAbHZlcnRuZXFxfXtcdTIyNjh9Iik7bGUoIlxcbmdlcXEiLCJcXGh0bWxAbWF0aG1se1xcQG5nZXFxfXtcdTIyNzF9Iik7bGUoIlxcbmdlcXNsYW50IiwiXFxodG1sQG1hdGhtbHtcXEBuZ2Vxc2xhbnR9e1x1MjI3MX0iKTtsZSgiXFxubGVxcSIsIlxcaHRtbEBtYXRobWx7XFxAbmxlcXF9e1x1MjI3MH0iKTtsZSgiXFxubGVxc2xhbnQiLCJcXGh0bWxAbWF0aG1se1xcQG5sZXFzbGFudH17XHUyMjcwfSIpO2xlKCJcXG5zaG9ydG1pZCIsIlxcaHRtbEBtYXRobWx7XFxAbnNob3J0bWlkfXtcdTIyMjR9Iik7bGUoIlxcbnNob3J0cGFyYWxsZWwiLCJcXGh0bWxAbWF0aG1se1xcQG5zaG9ydHBhcmFsbGVsfXtcdTIyMjZ9Iik7bGUoIlxcbnN1YnNldGVxcSIsIlxcaHRtbEBtYXRobWx7XFxAbnN1YnNldGVxcX17XHUyMjg4fSIpO2xlKCJcXG5zdXBzZXRlcXEiLCJcXGh0bWxAbWF0aG1se1xcQG5zdXBzZXRlcXF9e1x1MjI4OX0iKTtsZSgiXFx2YXJzdWJzZXRuZXEiLCJcXGh0bWxAbWF0aG1se1xcQHZhcnN1YnNldG5lcX17XHUyMjhBfSIpO2xlKCJcXHZhcnN1YnNldG5lcXEiLCJcXGh0bWxAbWF0aG1se1xcQHZhcnN1YnNldG5lcXF9e1x1MkFDQn0iKTtsZSgiXFx2YXJzdXBzZXRuZXEiLCJcXGh0bWxAbWF0aG1se1xcQHZhcnN1cHNldG5lcX17XHUyMjhCfSIpO2xlKCJcXHZhcnN1cHNldG5lcXEiLCJcXGh0bWxAbWF0aG1se1xcQHZhcnN1cHNldG5lcXF9e1x1MkFDQ30iKTtsZSgiXFxpbWF0aCIsIlxcaHRtbEBtYXRobWx7XFxAaW1hdGh9e1x1MDEzMX0iKTtsZSgiXFxqbWF0aCIsIlxcaHRtbEBtYXRobWx7XFxAam1hdGh9e1x1MDIzN30iKTtsZSgiXFxsbGJyYWNrZXQiLCJcXGh0bWxAbWF0aG1se1xcbWF0aG9wZW57W1xcbWtlcm4tMy4ybXVbfX17XFxtYXRob3BlbntcXGNoYXJgXHUyN0U2fX0iKTtsZSgiXFxycmJyYWNrZXQiLCJcXGh0bWxAbWF0aG1se1xcbWF0aGNsb3Nle11cXG1rZXJuLTMuMm11XX19e1xcbWF0aGNsb3Nle1xcY2hhcmBcdTI3RTd9fSIpO2xlKCJcdTI3RTYiLCJcXGxsYnJhY2tldCIpO2xlKCJcdTI3RTciLCJcXHJyYnJhY2tldCIpO2xlKCJcXGxCcmFjZSIsIlxcaHRtbEBtYXRobWx7XFxtYXRob3BlbntcXHtcXG1rZXJuLTMuMm11W319e1xcbWF0aG9wZW57XFxjaGFyYFx1Mjk4M319Iik7bGUoIlxcckJyYWNlIiwiXFxodG1sQG1hdGhtbHtcXG1hdGhjbG9zZXtdXFxta2Vybi0zLjJtdVxcfX19e1xcbWF0aGNsb3Nle1xcY2hhcmBcdTI5ODR9fSIpO2xlKCJcdTI5ODMiLCJcXGxCcmFjZSIpO2xlKCJcdTI5ODQiLCJcXHJCcmFjZSIpO2xlKCJcXG1pbnVzbyIsIlxcbWF0aGJpbntcXGh0bWxAbWF0aG1se3tcXG1hdGhybGFwe1xcbWF0aGNob2ljZXtcXGtlcm57MC4xNDVlbX19e1xca2VybnswLjE0NWVtfX17XFxrZXJuezAuMTAxNWVtfX17XFxrZXJuezAuMDcyNWVtfX1cXGNpcmN9ey19fX17XFxjaGFyYFx1MjlCNX19Iik7bGUoIlx1MjlCNSIsIlxcbWludXNvIik7bGUoIlxcZGFyciIsIlxcZG93bmFycm93Iik7bGUoIlxcZEFyciIsIlxcRG93bmFycm93Iik7bGUoIlxcRGFyciIsIlxcRG93bmFycm93Iik7bGUoIlxcbGFuZyIsIlxcbGFuZ2xlIik7bGUoIlxccmFuZyIsIlxccmFuZ2xlIik7bGUoIlxcdWFyciIsIlxcdXBhcnJvdyIpO2xlKCJcXHVBcnIiLCJcXFVwYXJyb3ciKTtsZSgiXFxVYXJyIiwiXFxVcGFycm93Iik7bGUoIlxcTiIsIlxcbWF0aGJie059Iik7bGUoIlxcUiIsIlxcbWF0aGJie1J9Iik7bGUoIlxcWiIsIlxcbWF0aGJie1p9Iik7bGUoIlxcYWxlZiIsIlxcYWxlcGgiKTtsZSgiXFxhbGVmc3ltIiwiXFxhbGVwaCIpO2xlKCJcXEFscGhhIiwiXFxtYXRocm17QX0iKTtsZSgiXFxCZXRhIiwiXFxtYXRocm17Qn0iKTtsZSgiXFxidWxsIiwiXFxidWxsZXQiKTtsZSgiXFxDaGkiLCJcXG1hdGhybXtYfSIpO2xlKCJcXGNsdWJzIiwiXFxjbHVic3VpdCIpO2xlKCJcXGNudW1zIiwiXFxtYXRoYmJ7Q30iKTtsZSgiXFxDb21wbGV4IiwiXFxtYXRoYmJ7Q30iKTtsZSgiXFxEYWdnZXIiLCJcXGRkYWdnZXIiKTtsZSgiXFxkaWFtb25kcyIsIlxcZGlhbW9uZHN1aXQiKTtsZSgiXFxlbXB0eSIsIlxcZW1wdHlzZXQiKTtsZSgiXFxFcHNpbG9uIiwiXFxtYXRocm17RX0iKTtsZSgiXFxFdGEiLCJcXG1hdGhybXtIfSIpO2xlKCJcXGV4aXN0IiwiXFxleGlzdHMiKTtsZSgiXFxoYXJyIiwiXFxsZWZ0cmlnaHRhcnJvdyIpO2xlKCJcXGhBcnIiLCJcXExlZnRyaWdodGFycm93Iik7bGUoIlxcSGFyciIsIlxcTGVmdHJpZ2h0YXJyb3ciKTtsZSgiXFxoZWFydHMiLCJcXGhlYXJ0c3VpdCIpO2xlKCJcXGltYWdlIiwiXFxJbSIpO2xlKCJcXGluZmluIiwiXFxpbmZ0eSIpO2xlKCJcXElvdGEiLCJcXG1hdGhybXtJfSIpO2xlKCJcXGlzaW4iLCJcXGluIik7bGUoIlxcS2FwcGEiLCJcXG1hdGhybXtLfSIpO2xlKCJcXGxhcnIiLCJcXGxlZnRhcnJvdyIpO2xlKCJcXGxBcnIiLCJcXExlZnRhcnJvdyIpO2xlKCJcXExhcnIiLCJcXExlZnRhcnJvdyIpO2xlKCJcXGxyYXJyIiwiXFxsZWZ0cmlnaHRhcnJvdyIpO2xlKCJcXGxyQXJyIiwiXFxMZWZ0cmlnaHRhcnJvdyIpO2xlKCJcXExyYXJyIiwiXFxMZWZ0cmlnaHRhcnJvdyIpO2xlKCJcXE11IiwiXFxtYXRocm17TX0iKTtsZSgiXFxuYXRudW1zIiwiXFxtYXRoYmJ7Tn0iKTtsZSgiXFxOdSIsIlxcbWF0aHJte059Iik7bGUoIlxcT21pY3JvbiIsIlxcbWF0aHJte099Iik7bGUoIlxccGx1c21uIiwiXFxwbSIpO2xlKCJcXHJhcnIiLCJcXHJpZ2h0YXJyb3ciKTtsZSgiXFxyQXJyIiwiXFxSaWdodGFycm93Iik7bGUoIlxcUmFyciIsIlxcUmlnaHRhcnJvdyIpO2xlKCJcXHJlYWwiLCJcXFJlIik7bGUoIlxccmVhbHMiLCJcXG1hdGhiYntSfSIpO2xlKCJcXFJlYWxzIiwiXFxtYXRoYmJ7Un0iKTtsZSgiXFxSaG8iLCJcXG1hdGhybXtQfSIpO2xlKCJcXHNkb3QiLCJcXGNkb3QiKTtsZSgiXFxzZWN0IiwiXFxTIik7bGUoIlxcc3BhZGVzIiwiXFxzcGFkZXN1aXQiKTtsZSgiXFxzdWIiLCJcXHN1YnNldCIpO2xlKCJcXHN1YmUiLCJcXHN1YnNldGVxIik7bGUoIlxcc3VwZSIsIlxcc3Vwc2V0ZXEiKTtsZSgiXFxUYXUiLCJcXG1hdGhybXtUfSIpO2xlKCJcXHRoZXRhc3ltIiwiXFx2YXJ0aGV0YSIpO2xlKCJcXHdlaWVycCIsIlxcd3AiKTtsZSgiXFxaZXRhIiwiXFxtYXRocm17Wn0iKTtsZSgiXFxhcmdtaW4iLCJcXERPVFNCXFxvcGVyYXRvcm5hbWUqe2FyZ1xcLG1pbn0iKTtsZSgiXFxhcmdtYXgiLCJcXERPVFNCXFxvcGVyYXRvcm5hbWUqe2FyZ1xcLG1heH0iKTtsZSgiXFxwbGltIiwiXFxET1RTQlxcbWF0aG9we1xcb3BlcmF0b3JuYW1le3BsaW19fVxcbGltaXRzIik7bGUoIlxcYnJhIiwiXFxtYXRoaW5uZXJ7XFxsYW5nbGV7IzF9fH0iKTtsZSgiXFxrZXQiLCJcXG1hdGhpbm5lcnt8eyMxfVxccmFuZ2xlfSIpO2xlKCJcXGJyYWtldCIsIlxcbWF0aGlubmVye1xcbGFuZ2xleyMxfVxccmFuZ2xlfSIpO2xlKCJcXEJyYSIsIlxcbGVmdFxcbGFuZ2xlIzFcXHJpZ2h0fCIpO2xlKCJcXEtldCIsIlxcbGVmdHwjMVxccmlnaHRcXHJhbmdsZSIpO0UkPW8odD0+ZT0+e3ZhciByPWUuY29uc3VtZUFyZygpLnRva2VucyxuPWUuY29uc3VtZUFyZygpLnRva2VucyxpPWUuY29uc3VtZUFyZygpLnRva2VucyxhPWUuY29uc3VtZUFyZygpLnRva2VucyxzPWUubWFjcm9zLmdldCgifCIpLGw9ZS5tYWNyb3MuZ2V0KCJcXHwiKTtlLm1hY3Jvcy5iZWdpbkdyb3VwKCk7dmFyIHU9byhkPT5wPT57dCYmKHAubWFjcm9zLnNldCgifCIscyksaS5sZW5ndGgmJnAubWFjcm9zLnNldCgiXFx8IixsKSk7dmFyIG09ZDtpZighZCYmaS5sZW5ndGgpe3ZhciBnPXAuZnV0dXJlKCk7Zy50ZXh0PT09InwiJiYocC5wb3BUb2tlbigpLG09ITApfXJldHVybnt0b2tlbnM6bT9pOm4sbnVtQXJnczowfX0sIm1pZE1hY3JvIik7ZS5tYWNyb3Muc2V0KCJ8Iix1KCExKSksaS5sZW5ndGgmJmUubWFjcm9zLnNldCgiXFx8Iix1KCEwKSk7dmFyIGg9ZS5jb25zdW1lQXJnKCkudG9rZW5zLGY9ZS5leHBhbmRUb2tlbnMoWy4uLmEsLi4uaCwuLi5yXSk7cmV0dXJuIGUubWFjcm9zLmVuZEdyb3VwKCkse3Rva2VuczpmLnJldmVyc2UoKSxudW1BcmdzOjB9fSwiYnJha2V0SGVscGVyIik7bGUoIlxcYnJhQGtldCIsRSQoITEpKTtsZSgiXFxicmFAc2V0IixFJCghMCkpO2xlKCJcXEJyYWtldCIsIlxcYnJhQGtldHtcXGxlZnRcXGxhbmdsZX17XFwsXFxtaWRkbGVcXHZlcnRcXCx9e1xcLFxcbWlkZGxlXFx2ZXJ0XFwsfXtcXHJpZ2h0XFxyYW5nbGV9Iik7bGUoIlxcU2V0IiwiXFxicmFAc2V0e1xcbGVmdFxce1xcOn17XFw7XFxtaWRkbGVcXHZlcnRcXDt9e1xcO1xcbWlkZGxlXFxWZXJ0XFw7fXtcXDpcXHJpZ2h0XFx9fSIpO2xlKCJcXHNldCIsIlxcYnJhQHNldHtcXHtcXCx9e1xcbWlkfXt9e1xcLFxcfX0iKTtsZSgiXFxhbmdsbiIsIntcXGFuZ2wgbn0iKTtsZSgiXFxibHVlIiwiXFx0ZXh0Y29sb3J7IyM2NDk1ZWR9eyMxfSIpO2xlKCJcXG9yYW5nZSIsIlxcdGV4dGNvbG9yeyMjZmZhNTAwfXsjMX0iKTtsZSgiXFxwaW5rIiwiXFx0ZXh0Y29sb3J7IyNmZjAwYWZ9eyMxfSIpO2xlKCJcXHJlZCIsIlxcdGV4dGNvbG9yeyMjZGYwMDMwfXsjMX0iKTtsZSgiXFxncmVlbiIsIlxcdGV4dGNvbG9yeyMjMjhhZTdifXsjMX0iKTtsZSgiXFxncmF5IiwiXFx0ZXh0Y29sb3J7Z3JheX17IzF9Iik7bGUoIlxccHVycGxlIiwiXFx0ZXh0Y29sb3J7IyM5ZDM4YmR9eyMxfSIpO2xlKCJcXGJsdWVBIiwiXFx0ZXh0Y29sb3J7IyNjY2ZhZmZ9eyMxfSIpO2xlKCJcXGJsdWVCIiwiXFx0ZXh0Y29sb3J7IyM4MGY2ZmZ9eyMxfSIpO2xlKCJcXGJsdWVDIiwiXFx0ZXh0Y29sb3J7IyM2M2Q5ZWF9eyMxfSIpO2xlKCJcXGJsdWVEIiwiXFx0ZXh0Y29sb3J7IyMxMWFjY2R9eyMxfSIpO2xlKCJcXGJsdWVFIiwiXFx0ZXh0Y29sb3J7IyMwYzdmOTl9eyMxfSIpO2xlKCJcXHRlYWxBIiwiXFx0ZXh0Y29sb3J7IyM5NGZmZjV9eyMxfSIpO2xlKCJcXHRlYWxCIiwiXFx0ZXh0Y29sb3J7IyMyNmVkZDV9eyMxfSIpO2xlKCJcXHRlYWxDIiwiXFx0ZXh0Y29sb3J7IyMwMWQxYzF9eyMxfSIpO2xlKCJcXHRlYWxEIiwiXFx0ZXh0Y29sb3J7IyMwMWE5OTV9eyMxfSIpO2xlKCJcXHRlYWxFIiwiXFx0ZXh0Y29sb3J7IyMyMDgxNzB9eyMxfSIpO2xlKCJcXGdyZWVuQSIsIlxcdGV4dGNvbG9yeyMjYjZmZmIwfXsjMX0iKTtsZSgiXFxncmVlbkIiLCJcXHRleHRjb2xvcnsjIzhhZjI4MX17IzF9Iik7bGUoIlxcZ3JlZW5DIiwiXFx0ZXh0Y29sb3J7IyM3NGNmNzB9eyMxfSIpO2xlKCJcXGdyZWVuRCIsIlxcdGV4dGNvbG9yeyMjMWZhYjU0fXsjMX0iKTtsZSgiXFxncmVlbkUiLCJcXHRleHRjb2xvcnsjIzBkOTIzZn17IzF9Iik7bGUoIlxcZ29sZEEiLCJcXHRleHRjb2xvcnsjI2ZmZDBhOX17IzF9Iik7bGUoIlxcZ29sZEIiLCJcXHRleHRjb2xvcnsjI2ZmYmI3MX17IzF9Iik7bGUoIlxcZ29sZEMiLCJcXHRleHRjb2xvcnsjI2ZmOWMzOX17IzF9Iik7bGUoIlxcZ29sZEQiLCJcXHRleHRjb2xvcnsjI2UwN2QxMH17IzF9Iik7bGUoIlxcZ29sZEUiLCJcXHRleHRjb2xvcnsjI2E3NWEwNX17IzF9Iik7bGUoIlxccmVkQSIsIlxcdGV4dGNvbG9yeyMjZmNhOWE5fXsjMX0iKTtsZSgiXFxyZWRCIiwiXFx0ZXh0Y29sb3J7IyNmZjg0ODJ9eyMxfSIpO2xlKCJcXHJlZEMiLCJcXHRleHRjb2xvcnsjI2Y5Njg1ZH17IzF9Iik7bGUoIlxccmVkRCIsIlxcdGV4dGNvbG9yeyMjZTg0ZDM5fXsjMX0iKTtsZSgiXFxyZWRFIiwiXFx0ZXh0Y29sb3J7IyNiYzI2MTJ9eyMxfSIpO2xlKCJcXG1hcm9vbkEiLCJcXHRleHRjb2xvcnsjI2ZmYmRlMH17IzF9Iik7bGUoIlxcbWFyb29uQiIsIlxcdGV4dGNvbG9yeyMjZmY5MmM2fXsjMX0iKTtsZSgiXFxtYXJvb25DIiwiXFx0ZXh0Y29sb3J7IyNlZDVmYTZ9eyMxfSIpO2xlKCJcXG1hcm9vbkQiLCJcXHRleHRjb2xvcnsjI2NhMzM3Y317IzF9Iik7bGUoIlxcbWFyb29uRSIsIlxcdGV4dGNvbG9yeyMjOWUwMzRlfXsjMX0iKTtsZSgiXFxwdXJwbGVBIiwiXFx0ZXh0Y29sb3J7IyNkZGQ3ZmZ9eyMxfSIpO2xlKCJcXHB1cnBsZUIiLCJcXHRleHRjb2xvcnsjI2M2YjlmY317IzF9Iik7bGUoIlxccHVycGxlQyIsIlxcdGV4dGNvbG9yeyMjYWE4N2ZmfXsjMX0iKTtsZSgiXFxwdXJwbGVEIiwiXFx0ZXh0Y29sb3J7IyM3ODU0YWJ9eyMxfSIpO2xlKCJcXHB1cnBsZUUiLCJcXHRleHRjb2xvcnsjIzU0M2I3OH17IzF9Iik7bGUoIlxcbWludEEiLCJcXHRleHRjb2xvcnsjI2Y1ZjllOH17IzF9Iik7bGUoIlxcbWludEIiLCJcXHRleHRjb2xvcnsjI2VkZjJkZn17IzF9Iik7bGUoIlxcbWludEMiLCJcXHRleHRjb2xvcnsjI2UwZTVjY317IzF9Iik7bGUoIlxcZ3JheUEiLCJcXHRleHRjb2xvcnsjI2Y2ZjdmN317IzF9Iik7bGUoIlxcZ3JheUIiLCJcXHRleHRjb2xvcnsjI2YwZjFmMn17IzF9Iik7bGUoIlxcZ3JheUMiLCJcXHRleHRjb2xvcnsjI2UzZTVlNn17IzF9Iik7bGUoIlxcZ3JheUQiLCJcXHRleHRjb2xvcnsjI2Q2ZDhkYX17IzF9Iik7bGUoIlxcZ3JheUUiLCJcXHRleHRjb2xvcnsjI2JhYmVjMn17IzF9Iik7bGUoIlxcZ3JheUYiLCJcXHRleHRjb2xvcnsjIzg4OGQ5M317IzF9Iik7bGUoIlxcZ3JheUciLCJcXHRleHRjb2xvcnsjIzYyNjU2OX17IzF9Iik7bGUoIlxcZ3JheUgiLCJcXHRleHRjb2xvcnsjIzNiM2U0MH17IzF9Iik7bGUoIlxcZ3JheUkiLCJcXHRleHRjb2xvcnsjIzIxMjQyY317IzF9Iik7bGUoIlxca2FCbHVlIiwiXFx0ZXh0Y29sb3J7IyMzMTQ0NTN9eyMxfSIpO2xlKCJcXGthR3JlZW4iLCJcXHRleHRjb2xvcnsjIzcxQjMwN317IzF9Iik7UyQ9eyJeIjohMCxfOiEwLCJcXGxpbWl0cyI6ITAsIlxcbm9saW1pdHMiOiEwfSxSQz1jbGFzc3tzdGF0aWN7byh0aGlzLCJNYWNyb0V4cGFuZGVyIil9Y29uc3RydWN0b3IoZSxyLG4pe3RoaXMuc2V0dGluZ3M9dm9pZCAwLHRoaXMuZXhwYW5zaW9uQ291bnQ9dm9pZCAwLHRoaXMubGV4ZXI9dm9pZCAwLHRoaXMubWFjcm9zPXZvaWQgMCx0aGlzLnN0YWNrPXZvaWQgMCx0aGlzLm1vZGU9dm9pZCAwLHRoaXMuc2V0dGluZ3M9cix0aGlzLmV4cGFuc2lvbkNvdW50PTAsdGhpcy5mZWVkKGUpLHRoaXMubWFjcm9zPW5ldyBOQyhWNGUsci5tYWNyb3MpLHRoaXMubW9kZT1uLHRoaXMuc3RhY2s9W119ZmVlZChlKXt0aGlzLmxleGVyPW5ldyBBNChlLHRoaXMuc2V0dGluZ3MpfXN3aXRjaE1vZGUoZSl7dGhpcy5tb2RlPWV9YmVnaW5Hcm91cCgpe3RoaXMubWFjcm9zLmJlZ2luR3JvdXAoKX1lbmRHcm91cCgpe3RoaXMubWFjcm9zLmVuZEdyb3VwKCl9ZW5kR3JvdXBzKCl7dGhpcy5tYWNyb3MuZW5kR3JvdXBzKCl9ZnV0dXJlKCl7cmV0dXJuIHRoaXMuc3RhY2subGVuZ3RoPT09MCYmdGhpcy5wdXNoVG9rZW4odGhpcy5sZXhlci5sZXgoKSksdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXX1wb3BUb2tlbigpe3JldHVybiB0aGlzLmZ1dHVyZSgpLHRoaXMuc3RhY2sucG9wKCl9cHVzaFRva2VuKGUpe3RoaXMuc3RhY2sucHVzaChlKX1wdXNoVG9rZW5zKGUpe3RoaXMuc3RhY2sucHVzaCguLi5lKX1zY2FuQXJndW1lbnQoZSl7dmFyIHIsbixpO2lmKGUpe2lmKHRoaXMuY29uc3VtZVNwYWNlcygpLHRoaXMuZnV0dXJlKCkudGV4dCE9PSJbIilyZXR1cm4gbnVsbDtyPXRoaXMucG9wVG9rZW4oKSx7dG9rZW5zOmksZW5kOm59PXRoaXMuY29uc3VtZUFyZyhbIl0iXSl9ZWxzZSh7dG9rZW5zOmksc3RhcnQ6cixlbmQ6bn09dGhpcy5jb25zdW1lQXJnKCkpO3JldHVybiB0aGlzLnB1c2hUb2tlbihuZXcgUm8oIkVPRiIsbi5sb2MpKSx0aGlzLnB1c2hUb2tlbnMoaSksci5yYW5nZShuLCIiKX1jb25zdW1lU3BhY2VzKCl7Zm9yKDs7KXt2YXIgZT10aGlzLmZ1dHVyZSgpO2lmKGUudGV4dD09PSIgIil0aGlzLnN0YWNrLnBvcCgpO2Vsc2UgYnJlYWt9fWNvbnN1bWVBcmcoZSl7dmFyIHI9W10sbj1lJiZlLmxlbmd0aD4wO258fHRoaXMuY29uc3VtZVNwYWNlcygpO3ZhciBpPXRoaXMuZnV0dXJlKCksYSxzPTAsbD0wO2Rve2lmKGE9dGhpcy5wb3BUb2tlbigpLHIucHVzaChhKSxhLnRleHQ9PT0ieyIpKytzO2Vsc2UgaWYoYS50ZXh0PT09In0iKXtpZigtLXMscz09PS0xKXRocm93IG5ldyBsdCgiRXh0cmEgfSIsYSl9ZWxzZSBpZihhLnRleHQ9PT0iRU9GIil0aHJvdyBuZXcgbHQoIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0IGluIGEgbWFjcm8gYXJndW1lbnQsIGV4cGVjdGVkICciKyhlJiZuP2VbbF06In0iKSsiJyIsYSk7aWYoZSYmbilpZigocz09PTB8fHM9PT0xJiZlW2xdPT09InsiKSYmYS50ZXh0PT09ZVtsXSl7aWYoKytsLGw9PT1lLmxlbmd0aCl7ci5zcGxpY2UoLWwsbCk7YnJlYWt9fWVsc2UgbD0wfXdoaWxlKHMhPT0wfHxuKTtyZXR1cm4gaS50ZXh0PT09InsiJiZyW3IubGVuZ3RoLTFdLnRleHQ9PT0ifSImJihyLnBvcCgpLHIuc2hpZnQoKSksci5yZXZlcnNlKCkse3Rva2VuczpyLHN0YXJ0OmksZW5kOmF9fWNvbnN1bWVBcmdzKGUscil7aWYocil7aWYoci5sZW5ndGghPT1lKzEpdGhyb3cgbmV3IGx0KCJUaGUgbGVuZ3RoIG9mIGRlbGltaXRlcnMgZG9lc24ndCBtYXRjaCB0aGUgbnVtYmVyIG9mIGFyZ3MhIik7Zm9yKHZhciBuPXJbMF0saT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgYT10aGlzLnBvcFRva2VuKCk7aWYobltpXSE9PWEudGV4dCl0aHJvdyBuZXcgbHQoIlVzZSBvZiB0aGUgbWFjcm8gZG9lc24ndCBtYXRjaCBpdHMgZGVmaW5pdGlvbiIsYSl9fWZvcih2YXIgcz1bXSxsPTA7bDxlO2wrKylzLnB1c2godGhpcy5jb25zdW1lQXJnKHImJnJbbCsxXSkudG9rZW5zKTtyZXR1cm4gc31jb3VudEV4cGFuc2lvbihlKXtpZih0aGlzLmV4cGFuc2lvbkNvdW50Kz1lLHRoaXMuZXhwYW5zaW9uQ291bnQ+dGhpcy5zZXR0aW5ncy5tYXhFeHBhbmQpdGhyb3cgbmV3IGx0KCJUb28gbWFueSBleHBhbnNpb25zOiBpbmZpbml0ZSBsb29wIG9yIG5lZWQgdG8gaW5jcmVhc2UgbWF4RXhwYW5kIHNldHRpbmciKX1leHBhbmRPbmNlKGUpe3ZhciByPXRoaXMucG9wVG9rZW4oKSxuPXIudGV4dCxpPXIubm9leHBhbmQ/bnVsbDp0aGlzLl9nZXRFeHBhbnNpb24obik7aWYoaT09bnVsbHx8ZSYmaS51bmV4cGFuZGFibGUpe2lmKGUmJmk9PW51bGwmJm5bMF09PT0iXFwiJiYhdGhpcy5pc0RlZmluZWQobikpdGhyb3cgbmV3IGx0KCJVbmRlZmluZWQgY29udHJvbCBzZXF1ZW5jZTogIituKTtyZXR1cm4gdGhpcy5wdXNoVG9rZW4ociksITF9dGhpcy5jb3VudEV4cGFuc2lvbigxKTt2YXIgYT1pLnRva2VucyxzPXRoaXMuY29uc3VtZUFyZ3MoaS5udW1BcmdzLGkuZGVsaW1pdGVycyk7aWYoaS5udW1BcmdzKXthPWEuc2xpY2UoKTtmb3IodmFyIGw9YS5sZW5ndGgtMTtsPj0wOy0tbCl7dmFyIHU9YVtsXTtpZih1LnRleHQ9PT0iIyIpe2lmKGw9PT0wKXRocm93IG5ldyBsdCgiSW5jb21wbGV0ZSBwbGFjZWhvbGRlciBhdCBlbmQgb2YgbWFjcm8gYm9keSIsdSk7aWYodT1hWy0tbF0sdS50ZXh0PT09IiMiKWEuc3BsaWNlKGwrMSwxKTtlbHNlIGlmKC9eWzEtOV0kLy50ZXN0KHUudGV4dCkpYS5zcGxpY2UobCwyLC4uLnNbK3UudGV4dC0xXSk7ZWxzZSB0aHJvdyBuZXcgbHQoIk5vdCBhIHZhbGlkIGFyZ3VtZW50IG51bWJlciIsdSl9fX1yZXR1cm4gdGhpcy5wdXNoVG9rZW5zKGEpLGEubGVuZ3RofWV4cGFuZEFmdGVyRnV0dXJlKCl7cmV0dXJuIHRoaXMuZXhwYW5kT25jZSgpLHRoaXMuZnV0dXJlKCl9ZXhwYW5kTmV4dFRva2VuKCl7Zm9yKDs7KWlmKHRoaXMuZXhwYW5kT25jZSgpPT09ITEpe3ZhciBlPXRoaXMuc3RhY2sucG9wKCk7cmV0dXJuIGUudHJlYXRBc1JlbGF4JiYoZS50ZXh0PSJcXHJlbGF4IiksZX10aHJvdyBuZXcgRXJyb3J9ZXhwYW5kTWFjcm8oZSl7cmV0dXJuIHRoaXMubWFjcm9zLmhhcyhlKT90aGlzLmV4cGFuZFRva2VucyhbbmV3IFJvKGUpXSk6dm9pZCAwfWV4cGFuZFRva2VucyhlKXt2YXIgcj1bXSxuPXRoaXMuc3RhY2subGVuZ3RoO2Zvcih0aGlzLnB1c2hUb2tlbnMoZSk7dGhpcy5zdGFjay5sZW5ndGg+bjspaWYodGhpcy5leHBhbmRPbmNlKCEwKT09PSExKXt2YXIgaT10aGlzLnN0YWNrLnBvcCgpO2kudHJlYXRBc1JlbGF4JiYoaS5ub2V4cGFuZD0hMSxpLnRyZWF0QXNSZWxheD0hMSksci5wdXNoKGkpfXJldHVybiB0aGlzLmNvdW50RXhwYW5zaW9uKHIubGVuZ3RoKSxyfWV4cGFuZE1hY3JvQXNUZXh0KGUpe3ZhciByPXRoaXMuZXhwYW5kTWFjcm8oZSk7cmV0dXJuIHImJnIubWFwKG49Pm4udGV4dCkuam9pbigiIil9X2dldEV4cGFuc2lvbihlKXt2YXIgcj10aGlzLm1hY3Jvcy5nZXQoZSk7aWYocj09bnVsbClyZXR1cm4gcjtpZihlLmxlbmd0aD09PTEpe3ZhciBuPXRoaXMubGV4ZXIuY2F0Y29kZXNbZV07aWYobiE9bnVsbCYmbiE9PTEzKXJldHVybn12YXIgaT10eXBlb2Ygcj09ImZ1bmN0aW9uIj9yKHRoaXMpOnI7aWYodHlwZW9mIGk9PSJzdHJpbmciKXt2YXIgYT0wO2lmKGkuaW5kZXhPZigiIyIpIT09LTEpZm9yKHZhciBzPWkucmVwbGFjZSgvIyMvZywiIik7cy5pbmRleE9mKCIjIisoYSsxKSkhPT0tMTspKythO2Zvcih2YXIgbD1uZXcgQTQoaSx0aGlzLnNldHRpbmdzKSx1PVtdLGg9bC5sZXgoKTtoLnRleHQhPT0iRU9GIjspdS5wdXNoKGgpLGg9bC5sZXgoKTt1LnJldmVyc2UoKTt2YXIgZj17dG9rZW5zOnUsbnVtQXJnczphfTtyZXR1cm4gZn1yZXR1cm4gaX1pc0RlZmluZWQoZSl7cmV0dXJuIHRoaXMubWFjcm9zLmhhcyhlKXx8Z2guaGFzT3duUHJvcGVydHkoZSl8fENuLm1hdGguaGFzT3duUHJvcGVydHkoZSl8fENuLnRleHQuaGFzT3duUHJvcGVydHkoZSl8fFMkLmhhc093blByb3BlcnR5KGUpfWlzRXhwYW5kYWJsZShlKXt2YXIgcj10aGlzLm1hY3Jvcy5nZXQoZSk7cmV0dXJuIHIhPW51bGw/dHlwZW9mIHI9PSJzdHJpbmcifHx0eXBlb2Ygcj09ImZ1bmN0aW9uInx8IXIudW5leHBhbmRhYmxlOmdoLmhhc093blByb3BlcnR5KGUpJiYhZ2hbZV0ucHJpbWl0aXZlfX0sTkc9L15b4oKK4oKL4oKM4oKN4oKO4oKA4oKB4oKC4oKD4oKE4oKF4oKG4oKH4oKI4oKJ4oKQ4oKR4oKV4bWi4rG84oKW4oKX4oKY4oKZ4oKS4oKa4bWj4oKb4oKc4bWk4bWl4oKT4bWm4bWn4bWo4bWp4bWqXS8sdjQ9T2JqZWN0LmZyZWV6ZSh7Ilx1MjA4QSI6IisiLCJcdTIwOEIiOiItIiwiXHUyMDhDIjoiPSIsIlx1MjA4RCI6IigiLCJcdTIwOEUiOiIpIiwiXHUyMDgwIjoiMCIsIlx1MjA4MSI6IjEiLCJcdTIwODIiOiIyIiwiXHUyMDgzIjoiMyIsIlx1MjA4NCI6IjQiLCJcdTIwODUiOiI1IiwiXHUyMDg2IjoiNiIsIlx1MjA4NyI6IjciLCJcdTIwODgiOiI4IiwiXHUyMDg5IjoiOSIsIlx1MjA5MCI6ImEiLCJcdTIwOTEiOiJlIiwiXHUyMDk1IjoiaCIsIlx1MUQ2MiI6ImkiLCJcdTJDN0MiOiJqIiwiXHUyMDk2IjoiayIsIlx1MjA5NyI6ImwiLCJcdTIwOTgiOiJtIiwiXHUyMDk5IjoibiIsIlx1MjA5MiI6Im8iLCJcdTIwOUEiOiJwIiwiXHUxRDYzIjoiciIsIlx1MjA5QiI6InMiLCJcdTIwOUMiOiJ0IiwiXHUxRDY0IjoidSIsIlx1MUQ2NSI6InYiLCJcdTIwOTMiOiJ4IiwiXHUxRDY2IjoiXHUwM0IyIiwiXHUxRDY3IjoiXHUwM0IzIiwiXHUxRDY4IjoiXHUwM0MxIiwiXHUxRDY5IjoiXHUwM0Q1IiwiXHUxRDZBIjoiXHUwM0M3IiwiXHUyMDdBIjoiKyIsIlx1MjA3QiI6Ii0iLCJcdTIwN0MiOiI9IiwiXHUyMDdEIjoiKCIsIlx1MjA3RSI6IikiLCJcdTIwNzAiOiIwIiwiXHhCOSI6IjEiLCJceEIyIjoiMiIsIlx4QjMiOiIzIiwiXHUyMDc0IjoiNCIsIlx1MjA3NSI6IjUiLCJcdTIwNzYiOiI2IiwiXHUyMDc3IjoiNyIsIlx1MjA3OCI6IjgiLCJcdTIwNzkiOiI5IiwiXHUxRDJDIjoiQSIsIlx1MUQyRSI6IkIiLCJcdTFEMzAiOiJEIiwiXHUxRDMxIjoiRSIsIlx1MUQzMyI6IkciLCJcdTFEMzQiOiJIIiwiXHUxRDM1IjoiSSIsIlx1MUQzNiI6IkoiLCJcdTFEMzciOiJLIiwiXHUxRDM4IjoiTCIsIlx1MUQzOSI6Ik0iLCJcdTFEM0EiOiJOIiwiXHUxRDNDIjoiTyIsIlx1MUQzRSI6IlAiLCJcdTFEM0YiOiJSIiwiXHUxRDQwIjoiVCIsIlx1MUQ0MSI6IlUiLCJcdTJDN0QiOiJWIiwiXHUxRDQyIjoiVyIsIlx1MUQ0MyI6ImEiLCJcdTFENDciOiJiIiwiXHUxRDlDIjoiYyIsIlx1MUQ0OCI6ImQiLCJcdTFENDkiOiJlIiwiXHUxREEwIjoiZiIsIlx1MUQ0RCI6ImciLFx1MDJCMDoiaCIsIlx1MjA3MSI6ImkiLFx1MDJCMjoiaiIsIlx1MUQ0RiI6ImsiLFx1MDJFMToibCIsIlx1MUQ1MCI6Im0iLFx1MjA3RjoibiIsIlx1MUQ1MiI6Im8iLCJcdTFENTYiOiJwIixcdTAyQjM6InIiLFx1MDJFMjoicyIsIlx1MUQ1NyI6InQiLCJcdTFENTgiOiJ1IiwiXHUxRDVCIjoidiIsXHUwMkI3OiJ3IixcdTAyRTM6IngiLFx1MDJCODoieSIsIlx1MURCQiI6InoiLCJcdTFENUQiOiJcdTAzQjIiLCJcdTFENUUiOiJcdTAzQjMiLCJcdTFENUYiOiJcdTAzQjQiLCJcdTFENjAiOiJcdTAzRDUiLCJcdTFENjEiOiJcdTAzQzciLCJcdTFEQkYiOiJcdTAzQjgifSksYkM9eyJcdTAzMDEiOnt0ZXh0OiJcXCciLG1hdGg6IlxcYWN1dGUifSwiXHUwMzAwIjp7dGV4dDoiXFxgIixtYXRoOiJcXGdyYXZlIn0sIlx1MDMwOCI6e3RleHQ6J1xcIicsbWF0aDoiXFxkZG90In0sIlx1MDMwMyI6e3RleHQ6IlxcfiIsbWF0aDoiXFx0aWxkZSJ9LCJcdTAzMDQiOnt0ZXh0OiJcXD0iLG1hdGg6IlxcYmFyIn0sIlx1MDMwNiI6e3RleHQ6IlxcdSIsbWF0aDoiXFxicmV2ZSJ9LCJcdTAzMEMiOnt0ZXh0OiJcXHYiLG1hdGg6IlxcY2hlY2sifSwiXHUwMzAyIjp7dGV4dDoiXFxeIixtYXRoOiJcXGhhdCJ9LCJcdTAzMDciOnt0ZXh0OiJcXC4iLG1hdGg6IlxcZG90In0sIlx1MDMwQSI6e3RleHQ6IlxcciIsbWF0aDoiXFxtYXRocmluZyJ9LCJcdTAzMEIiOnt0ZXh0OiJcXEgifSwiXHUwMzI3Ijp7dGV4dDoiXFxjIn19LFJHPXtcdTAwRTE6ImFcdTAzMDEiLFx1MDBFMDoiYVx1MDMwMCIsXHUwMEU0OiJhXHUwMzA4IixcdTAxREY6ImFcdTAzMDhcdTAzMDQiLFx1MDBFMzoiYVx1MDMwMyIsXHUwMTAxOiJhXHUwMzA0IixcdTAxMDM6ImFcdTAzMDYiLFx1MUVBRjoiYVx1MDMwNlx1MDMwMSIsXHUxRUIxOiJhXHUwMzA2XHUwMzAwIixcdTFFQjU6ImFcdTAzMDZcdTAzMDMiLFx1MDFDRToiYVx1MDMwQyIsXHUwMEUyOiJhXHUwMzAyIixcdTFFQTU6ImFcdTAzMDJcdTAzMDEiLFx1MUVBNzoiYVx1MDMwMlx1MDMwMCIsXHUxRUFCOiJhXHUwMzAyXHUwMzAzIixcdTAyMjc6ImFcdTAzMDciLFx1MDFFMToiYVx1MDMwN1x1MDMwNCIsXHUwMEU1OiJhXHUwMzBBIixcdTAxRkI6ImFcdTAzMEFcdTAzMDEiLFx1MUUwMzoiYlx1MDMwNyIsXHUwMTA3OiJjXHUwMzAxIixcdTFFMDk6ImNcdTAzMjdcdTAzMDEiLFx1MDEwRDoiY1x1MDMwQyIsXHUwMTA5OiJjXHUwMzAyIixcdTAxMEI6ImNcdTAzMDciLFx1MDBFNzoiY1x1MDMyNyIsXHUwMTBGOiJkXHUwMzBDIixcdTFFMEI6ImRcdTAzMDciLFx1MUUxMToiZFx1MDMyNyIsXHUwMEU5OiJlXHUwMzAxIixcdTAwRTg6ImVcdTAzMDAiLFx1MDBFQjoiZVx1MDMwOCIsXHUxRUJEOiJlXHUwMzAzIixcdTAxMTM6ImVcdTAzMDQiLFx1MUUxNzoiZVx1MDMwNFx1MDMwMSIsXHUxRTE1OiJlXHUwMzA0XHUwMzAwIixcdTAxMTU6ImVcdTAzMDYiLFx1MUUxRDoiZVx1MDMyN1x1MDMwNiIsXHUwMTFCOiJlXHUwMzBDIixcdTAwRUE6ImVcdTAzMDIiLFx1MUVCRjoiZVx1MDMwMlx1MDMwMSIsXHUxRUMxOiJlXHUwMzAyXHUwMzAwIixcdTFFQzU6ImVcdTAzMDJcdTAzMDMiLFx1MDExNzoiZVx1MDMwNyIsXHUwMjI5OiJlXHUwMzI3IixcdTFFMUY6ImZcdTAzMDciLFx1MDFGNToiZ1x1MDMwMSIsXHUxRTIxOiJnXHUwMzA0IixcdTAxMUY6ImdcdTAzMDYiLFx1MDFFNzoiZ1x1MDMwQyIsXHUwMTFEOiJnXHUwMzAyIixcdTAxMjE6ImdcdTAzMDciLFx1MDEyMzoiZ1x1MDMyNyIsXHUxRTI3OiJoXHUwMzA4IixcdTAyMUY6ImhcdTAzMEMiLFx1MDEyNToiaFx1MDMwMiIsXHUxRTIzOiJoXHUwMzA3IixcdTFFMjk6ImhcdTAzMjciLFx1MDBFRDoiaVx1MDMwMSIsXHUwMEVDOiJpXHUwMzAwIixcdTAwRUY6ImlcdTAzMDgiLFx1MUUyRjoiaVx1MDMwOFx1MDMwMSIsXHUwMTI5OiJpXHUwMzAzIixcdTAxMkI6ImlcdTAzMDQiLFx1MDEyRDoiaVx1MDMwNiIsXHUwMUQwOiJpXHUwMzBDIixcdTAwRUU6ImlcdTAzMDIiLFx1MDFGMDoialx1MDMwQyIsXHUwMTM1OiJqXHUwMzAyIixcdTFFMzE6ImtcdTAzMDEiLFx1MDFFOToia1x1MDMwQyIsXHUwMTM3OiJrXHUwMzI3IixcdTAxM0E6ImxcdTAzMDEiLFx1MDEzRToibFx1MDMwQyIsXHUwMTNDOiJsXHUwMzI3IixcdTFFM0Y6Im1cdTAzMDEiLFx1MUU0MToibVx1MDMwNyIsXHUwMTQ0OiJuXHUwMzAxIixcdTAxRjk6Im5cdTAzMDAiLFx1MDBGMToiblx1MDMwMyIsXHUwMTQ4OiJuXHUwMzBDIixcdTFFNDU6Im5cdTAzMDciLFx1MDE0Njoiblx1MDMyNyIsXHUwMEYzOiJvXHUwMzAxIixcdTAwRjI6Im9cdTAzMDAiLFx1MDBGNjoib1x1MDMwOCIsXHUwMjJCOiJvXHUwMzA4XHUwMzA0IixcdTAwRjU6Im9cdTAzMDMiLFx1MUU0RDoib1x1MDMwM1x1MDMwMSIsXHUxRTRGOiJvXHUwMzAzXHUwMzA4IixcdTAyMkQ6Im9cdTAzMDNcdTAzMDQiLFx1MDE0RDoib1x1MDMwNCIsXHUxRTUzOiJvXHUwMzA0XHUwMzAxIixcdTFFNTE6Im9cdTAzMDRcdTAzMDAiLFx1MDE0Rjoib1x1MDMwNiIsXHUwMUQyOiJvXHUwMzBDIixcdTAwRjQ6Im9cdTAzMDIiLFx1MUVEMToib1x1MDMwMlx1MDMwMSIsXHUxRUQzOiJvXHUwMzAyXHUwMzAwIixcdTFFRDc6Im9cdTAzMDJcdTAzMDMiLFx1MDIyRjoib1x1MDMwNyIsXHUwMjMxOiJvXHUwMzA3XHUwMzA0IixcdTAxNTE6Im9cdTAzMEIiLFx1MUU1NToicFx1MDMwMSIsXHUxRTU3OiJwXHUwMzA3IixcdTAxNTU6InJcdTAzMDEiLFx1MDE1OToiclx1MDMwQyIsXHUxRTU5OiJyXHUwMzA3IixcdTAxNTc6InJcdTAzMjciLFx1MDE1Qjoic1x1MDMwMSIsXHUxRTY1OiJzXHUwMzAxXHUwMzA3IixcdTAxNjE6InNcdTAzMEMiLFx1MUU2Nzoic1x1MDMwQ1x1MDMwNyIsXHUwMTVEOiJzXHUwMzAyIixcdTFFNjE6InNcdTAzMDciLFx1MDE1Rjoic1x1MDMyNyIsXHUxRTk3OiJ0XHUwMzA4IixcdTAxNjU6InRcdTAzMEMiLFx1MUU2QjoidFx1MDMwNyIsXHUwMTYzOiJ0XHUwMzI3IixcdTAwRkE6InVcdTAzMDEiLFx1MDBGOToidVx1MDMwMCIsXHUwMEZDOiJ1XHUwMzA4IixcdTAxRDg6InVcdTAzMDhcdTAzMDEiLFx1MDFEQzoidVx1MDMwOFx1MDMwMCIsXHUwMUQ2OiJ1XHUwMzA4XHUwMzA0IixcdTAxREE6InVcdTAzMDhcdTAzMEMiLFx1MDE2OToidVx1MDMwMyIsXHUxRTc5OiJ1XHUwMzAzXHUwMzAxIixcdTAxNkI6InVcdTAzMDQiLFx1MUU3QjoidVx1MDMwNFx1MDMwOCIsXHUwMTZEOiJ1XHUwMzA2IixcdTAxRDQ6InVcdTAzMEMiLFx1MDBGQjoidVx1MDMwMiIsXHUwMTZGOiJ1XHUwMzBBIixcdTAxNzE6InVcdTAzMEIiLFx1MUU3RDoidlx1MDMwMyIsXHUxRTgzOiJ3XHUwMzAxIixcdTFFODE6IndcdTAzMDAiLFx1MUU4NToid1x1MDMwOCIsXHUwMTc1OiJ3XHUwMzAyIixcdTFFODc6IndcdTAzMDciLFx1MUU5ODoid1x1MDMwQSIsXHUxRThEOiJ4XHUwMzA4IixcdTFFOEI6InhcdTAzMDciLFx1MDBGRDoieVx1MDMwMSIsXHUxRUYzOiJ5XHUwMzAwIixcdTAwRkY6InlcdTAzMDgiLFx1MUVGOToieVx1MDMwMyIsXHUwMjMzOiJ5XHUwMzA0IixcdTAxNzc6InlcdTAzMDIiLFx1MUU4RjoieVx1MDMwNyIsXHUxRTk5OiJ5XHUwMzBBIixcdTAxN0E6InpcdTAzMDEiLFx1MDE3RToielx1MDMwQyIsXHUxRTkxOiJ6XHUwMzAyIixcdTAxN0M6InpcdTAzMDciLFx1MDBDMToiQVx1MDMwMSIsXHUwMEMwOiJBXHUwMzAwIixcdTAwQzQ6IkFcdTAzMDgiLFx1MDFERToiQVx1MDMwOFx1MDMwNCIsXHUwMEMzOiJBXHUwMzAzIixcdTAxMDA6IkFcdTAzMDQiLFx1MDEwMjoiQVx1MDMwNiIsXHUxRUFFOiJBXHUwMzA2XHUwMzAxIixcdTFFQjA6IkFcdTAzMDZcdTAzMDAiLFx1MUVCNDoiQVx1MDMwNlx1MDMwMyIsXHUwMUNEOiJBXHUwMzBDIixcdTAwQzI6IkFcdTAzMDIiLFx1MUVBNDoiQVx1MDMwMlx1MDMwMSIsXHUxRUE2OiJBXHUwMzAyXHUwMzAwIixcdTFFQUE6IkFcdTAzMDJcdTAzMDMiLFx1MDIyNjoiQVx1MDMwNyIsXHUwMUUwOiJBXHUwMzA3XHUwMzA0IixcdTAwQzU6IkFcdTAzMEEiLFx1MDFGQToiQVx1MDMwQVx1MDMwMSIsXHUxRTAyOiJCXHUwMzA3IixcdTAxMDY6IkNcdTAzMDEiLFx1MUUwODoiQ1x1MDMyN1x1MDMwMSIsXHUwMTBDOiJDXHUwMzBDIixcdTAxMDg6IkNcdTAzMDIiLFx1MDEwQToiQ1x1MDMwNyIsXHUwMEM3OiJDXHUwMzI3IixcdTAxMEU6IkRcdTAzMEMiLFx1MUUwQToiRFx1MDMwNyIsXHUxRTEwOiJEXHUwMzI3IixcdTAwQzk6IkVcdTAzMDEiLFx1MDBDODoiRVx1MDMwMCIsXHUwMENCOiJFXHUwMzA4IixcdTFFQkM6IkVcdTAzMDMiLFx1MDExMjoiRVx1MDMwNCIsXHUxRTE2OiJFXHUwMzA0XHUwMzAxIixcdTFFMTQ6IkVcdTAzMDRcdTAzMDAiLFx1MDExNDoiRVx1MDMwNiIsXHUxRTFDOiJFXHUwMzI3XHUwMzA2IixcdTAxMUE6IkVcdTAzMEMiLFx1MDBDQToiRVx1MDMwMiIsXHUxRUJFOiJFXHUwMzAyXHUwMzAxIixcdTFFQzA6IkVcdTAzMDJcdTAzMDAiLFx1MUVDNDoiRVx1MDMwMlx1MDMwMyIsXHUwMTE2OiJFXHUwMzA3IixcdTAyMjg6IkVcdTAzMjciLFx1MUUxRToiRlx1MDMwNyIsXHUwMUY0OiJHXHUwMzAxIixcdTFFMjA6IkdcdTAzMDQiLFx1MDExRToiR1x1MDMwNiIsXHUwMUU2OiJHXHUwMzBDIixcdTAxMUM6IkdcdTAzMDIiLFx1MDEyMDoiR1x1MDMwNyIsXHUwMTIyOiJHXHUwMzI3IixcdTFFMjY6IkhcdTAzMDgiLFx1MDIxRToiSFx1MDMwQyIsXHUwMTI0OiJIXHUwMzAyIixcdTFFMjI6IkhcdTAzMDciLFx1MUUyODoiSFx1MDMyNyIsXHUwMENEOiJJXHUwMzAxIixcdTAwQ0M6IklcdTAzMDAiLFx1MDBDRjoiSVx1MDMwOCIsXHUxRTJFOiJJXHUwMzA4XHUwMzAxIixcdTAxMjg6IklcdTAzMDMiLFx1MDEyQToiSVx1MDMwNCIsXHUwMTJDOiJJXHUwMzA2IixcdTAxQ0Y6IklcdTAzMEMiLFx1MDBDRToiSVx1MDMwMiIsXHUwMTMwOiJJXHUwMzA3IixcdTAxMzQ6IkpcdTAzMDIiLFx1MUUzMDoiS1x1MDMwMSIsXHUwMUU4OiJLXHUwMzBDIixcdTAxMzY6IktcdTAzMjciLFx1MDEzOToiTFx1MDMwMSIsXHUwMTNEOiJMXHUwMzBDIixcdTAxM0I6IkxcdTAzMjciLFx1MUUzRToiTVx1MDMwMSIsXHUxRTQwOiJNXHUwMzA3IixcdTAxNDM6Ik5cdTAzMDEiLFx1MDFGODoiTlx1MDMwMCIsXHUwMEQxOiJOXHUwMzAzIixcdTAxNDc6Ik5cdTAzMEMiLFx1MUU0NDoiTlx1MDMwNyIsXHUwMTQ1OiJOXHUwMzI3IixcdTAwRDM6Ik9cdTAzMDEiLFx1MDBEMjoiT1x1MDMwMCIsXHUwMEQ2OiJPXHUwMzA4IixcdTAyMkE6Ik9cdTAzMDhcdTAzMDQiLFx1MDBENToiT1x1MDMwMyIsXHUxRTRDOiJPXHUwMzAzXHUwMzAxIixcdTFFNEU6Ik9cdTAzMDNcdTAzMDgiLFx1MDIyQzoiT1x1MDMwM1x1MDMwNCIsXHUwMTRDOiJPXHUwMzA0IixcdTFFNTI6Ik9cdTAzMDRcdTAzMDEiLFx1MUU1MDoiT1x1MDMwNFx1MDMwMCIsXHUwMTRFOiJPXHUwMzA2IixcdTAxRDE6Ik9cdTAzMEMiLFx1MDBENDoiT1x1MDMwMiIsXHUxRUQwOiJPXHUwMzAyXHUwMzAxIixcdTFFRDI6Ik9cdTAzMDJcdTAzMDAiLFx1MUVENjoiT1x1MDMwMlx1MDMwMyIsXHUwMjJFOiJPXHUwMzA3IixcdTAyMzA6Ik9cdTAzMDdcdTAzMDQiLFx1MDE1MDoiT1x1MDMwQiIsXHUxRTU0OiJQXHUwMzAxIixcdTFFNTY6IlBcdTAzMDciLFx1MDE1NDoiUlx1MDMwMSIsXHUwMTU4OiJSXHUwMzBDIixcdTFFNTg6IlJcdTAzMDciLFx1MDE1NjoiUlx1MDMyNyIsXHUwMTVBOiJTXHUwMzAxIixcdTFFNjQ6IlNcdTAzMDFcdTAzMDciLFx1MDE2MDoiU1x1MDMwQyIsXHUxRTY2OiJTXHUwMzBDXHUwMzA3IixcdTAxNUM6IlNcdTAzMDIiLFx1MUU2MDoiU1x1MDMwNyIsXHUwMTVFOiJTXHUwMzI3IixcdTAxNjQ6IlRcdTAzMEMiLFx1MUU2QToiVFx1MDMwNyIsXHUwMTYyOiJUXHUwMzI3IixcdTAwREE6IlVcdTAzMDEiLFx1MDBEOToiVVx1MDMwMCIsXHUwMERDOiJVXHUwMzA4IixcdTAxRDc6IlVcdTAzMDhcdTAzMDEiLFx1MDFEQjoiVVx1MDMwOFx1MDMwMCIsXHUwMUQ1OiJVXHUwMzA4XHUwMzA0IixcdTAxRDk6IlVcdTAzMDhcdTAzMEMiLFx1MDE2ODoiVVx1MDMwMyIsXHUxRTc4OiJVXHUwMzAzXHUwMzAxIixcdTAxNkE6IlVcdTAzMDQiLFx1MUU3QToiVVx1MDMwNFx1MDMwOCIsXHUwMTZDOiJVXHUwMzA2IixcdTAxRDM6IlVcdTAzMEMiLFx1MDBEQjoiVVx1MDMwMiIsXHUwMTZFOiJVXHUwMzBBIixcdTAxNzA6IlVcdTAzMEIiLFx1MUU3QzoiVlx1MDMwMyIsXHUxRTgyOiJXXHUwMzAxIixcdTFFODA6IldcdTAzMDAiLFx1MUU4NDoiV1x1MDMwOCIsXHUwMTc0OiJXXHUwMzAyIixcdTFFODY6IldcdTAzMDciLFx1MUU4QzoiWFx1MDMwOCIsXHUxRThBOiJYXHUwMzA3IixcdTAwREQ6IllcdTAzMDEiLFx1MUVGMjoiWVx1MDMwMCIsXHUwMTc4OiJZXHUwMzA4IixcdTFFRjg6IllcdTAzMDMiLFx1MDIzMjoiWVx1MDMwNCIsXHUwMTc2OiJZXHUwMzAyIixcdTFFOEU6IllcdTAzMDciLFx1MDE3OToiWlx1MDMwMSIsXHUwMTdEOiJaXHUwMzBDIixcdTFFOTA6IlpcdTAzMDIiLFx1MDE3QjoiWlx1MDMwNyIsXHUwM0FDOiJcdTAzQjFcdTAzMDEiLFx1MUY3MDoiXHUwM0IxXHUwMzAwIixcdTFGQjE6Ilx1MDNCMVx1MDMwNCIsXHUxRkIwOiJcdTAzQjFcdTAzMDYiLFx1MDNBRDoiXHUwM0I1XHUwMzAxIixcdTFGNzI6Ilx1MDNCNVx1MDMwMCIsXHUwM0FFOiJcdTAzQjdcdTAzMDEiLFx1MUY3NDoiXHUwM0I3XHUwMzAwIixcdTAzQUY6Ilx1MDNCOVx1MDMwMSIsXHUxRjc2OiJcdTAzQjlcdTAzMDAiLFx1MDNDQToiXHUwM0I5XHUwMzA4IixcdTAzOTA6Ilx1MDNCOVx1MDMwOFx1MDMwMSIsXHUxRkQyOiJcdTAzQjlcdTAzMDhcdTAzMDAiLFx1MUZEMToiXHUwM0I5XHUwMzA0IixcdTFGRDA6Ilx1MDNCOVx1MDMwNiIsXHUwM0NDOiJcdTAzQkZcdTAzMDEiLFx1MUY3ODoiXHUwM0JGXHUwMzAwIixcdTAzQ0Q6Ilx1MDNDNVx1MDMwMSIsXHUxRjdBOiJcdTAzQzVcdTAzMDAiLFx1MDNDQjoiXHUwM0M1XHUwMzA4IixcdTAzQjA6Ilx1MDNDNVx1MDMwOFx1MDMwMSIsXHUxRkUyOiJcdTAzQzVcdTAzMDhcdTAzMDAiLFx1MUZFMToiXHUwM0M1XHUwMzA0IixcdTFGRTA6Ilx1MDNDNVx1MDMwNiIsXHUwM0NFOiJcdTAzQzlcdTAzMDEiLFx1MUY3QzoiXHUwM0M5XHUwMzAwIixcdTAzOEU6Ilx1MDNBNVx1MDMwMSIsXHUxRkVBOiJcdTAzQTVcdTAzMDAiLFx1MDNBQjoiXHUwM0E1XHUwMzA4IixcdTFGRTk6Ilx1MDNBNVx1MDMwNCIsXHUxRkU4OiJcdTAzQTVcdTAzMDYiLFx1MDM4RjoiXHUwM0E5XHUwMzAxIixcdTFGRkE6Ilx1MDNBOVx1MDMwMCJ9LF80PWNsYXNzIHR7c3RhdGlje28odGhpcywiUGFyc2VyIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLm1vZGU9dm9pZCAwLHRoaXMuZ3VsbGV0PXZvaWQgMCx0aGlzLnNldHRpbmdzPXZvaWQgMCx0aGlzLmxlZnRyaWdodERlcHRoPXZvaWQgMCx0aGlzLm5leHRUb2tlbj12b2lkIDAsdGhpcy5tb2RlPSJtYXRoIix0aGlzLmd1bGxldD1uZXcgUkMoZSxyLHRoaXMubW9kZSksdGhpcy5zZXR0aW5ncz1yLHRoaXMubGVmdHJpZ2h0RGVwdGg9MH1leHBlY3QoZSxyKXtpZihyPT09dm9pZCAwJiYocj0hMCksdGhpcy5mZXRjaCgpLnRleHQhPT1lKXRocm93IG5ldyBsdCgiRXhwZWN0ZWQgJyIrZSsiJywgZ290ICciK3RoaXMuZmV0Y2goKS50ZXh0KyInIix0aGlzLmZldGNoKCkpO3ImJnRoaXMuY29uc3VtZSgpfWNvbnN1bWUoKXt0aGlzLm5leHRUb2tlbj1udWxsfWZldGNoKCl7cmV0dXJuIHRoaXMubmV4dFRva2VuPT1udWxsJiYodGhpcy5uZXh0VG9rZW49dGhpcy5ndWxsZXQuZXhwYW5kTmV4dFRva2VuKCkpLHRoaXMubmV4dFRva2VufXN3aXRjaE1vZGUoZSl7dGhpcy5tb2RlPWUsdGhpcy5ndWxsZXQuc3dpdGNoTW9kZShlKX1wYXJzZSgpe3RoaXMuc2V0dGluZ3MuZ2xvYmFsR3JvdXB8fHRoaXMuZ3VsbGV0LmJlZ2luR3JvdXAoKSx0aGlzLnNldHRpbmdzLmNvbG9ySXNUZXh0Q29sb3ImJnRoaXMuZ3VsbGV0Lm1hY3Jvcy5zZXQoIlxcY29sb3IiLCJcXHRleHRjb2xvciIpO3RyeXt2YXIgZT10aGlzLnBhcnNlRXhwcmVzc2lvbighMSk7cmV0dXJuIHRoaXMuZXhwZWN0KCJFT0YiKSx0aGlzLnNldHRpbmdzLmdsb2JhbEdyb3VwfHx0aGlzLmd1bGxldC5lbmRHcm91cCgpLGV9ZmluYWxseXt0aGlzLmd1bGxldC5lbmRHcm91cHMoKX19c3VicGFyc2UoZSl7dmFyIHI9dGhpcy5uZXh0VG9rZW47dGhpcy5jb25zdW1lKCksdGhpcy5ndWxsZXQucHVzaFRva2VuKG5ldyBSbygifSIpKSx0aGlzLmd1bGxldC5wdXNoVG9rZW5zKGUpO3ZhciBuPXRoaXMucGFyc2VFeHByZXNzaW9uKCExKTtyZXR1cm4gdGhpcy5leHBlY3QoIn0iKSx0aGlzLm5leHRUb2tlbj1yLG59cGFyc2VFeHByZXNzaW9uKGUscil7Zm9yKHZhciBuPVtdOzspe3RoaXMubW9kZT09PSJtYXRoIiYmdGhpcy5jb25zdW1lU3BhY2VzKCk7dmFyIGk9dGhpcy5mZXRjaCgpO2lmKHQuZW5kT2ZFeHByZXNzaW9uLmluZGV4T2YoaS50ZXh0KSE9PS0xfHxyJiZpLnRleHQ9PT1yfHxlJiZnaFtpLnRleHRdJiZnaFtpLnRleHRdLmluZml4KWJyZWFrO3ZhciBhPXRoaXMucGFyc2VBdG9tKHIpO2lmKGEpe2lmKGEudHlwZT09PSJpbnRlcm5hbCIpY29udGludWV9ZWxzZSBicmVhaztuLnB1c2goYSl9cmV0dXJuIHRoaXMubW9kZT09PSJ0ZXh0IiYmdGhpcy5mb3JtTGlnYXR1cmVzKG4pLHRoaXMuaGFuZGxlSW5maXhOb2RlcyhuKX1oYW5kbGVJbmZpeE5vZGVzKGUpe2Zvcih2YXIgcj0tMSxuLGk9MDtpPGUubGVuZ3RoO2krKylpZihlW2ldLnR5cGU9PT0iaW5maXgiKXtpZihyIT09LTEpdGhyb3cgbmV3IGx0KCJvbmx5IG9uZSBpbmZpeCBvcGVyYXRvciBwZXIgZ3JvdXAiLGVbaV0udG9rZW4pO3I9aSxuPWVbaV0ucmVwbGFjZVdpdGh9aWYociE9PS0xJiZuKXt2YXIgYSxzLGw9ZS5zbGljZSgwLHIpLHU9ZS5zbGljZShyKzEpO2wubGVuZ3RoPT09MSYmbFswXS50eXBlPT09Im9yZGdyb3VwIj9hPWxbMF06YT17dHlwZToib3JkZ3JvdXAiLG1vZGU6dGhpcy5tb2RlLGJvZHk6bH0sdS5sZW5ndGg9PT0xJiZ1WzBdLnR5cGU9PT0ib3JkZ3JvdXAiP3M9dVswXTpzPXt0eXBlOiJvcmRncm91cCIsbW9kZTp0aGlzLm1vZGUsYm9keTp1fTt2YXIgaDtyZXR1cm4gbj09PSJcXFxcYWJvdmVmcmFjIj9oPXRoaXMuY2FsbEZ1bmN0aW9uKG4sW2EsZVtyXSxzXSxbXSk6aD10aGlzLmNhbGxGdW5jdGlvbihuLFthLHNdLFtdKSxbaF19ZWxzZSByZXR1cm4gZX1oYW5kbGVTdXBTdWJzY3JpcHQoZSl7dmFyIHI9dGhpcy5mZXRjaCgpLG49ci50ZXh0O3RoaXMuY29uc3VtZSgpLHRoaXMuY29uc3VtZVNwYWNlcygpO3ZhciBpPXRoaXMucGFyc2VHcm91cChlKTtpZighaSl0aHJvdyBuZXcgbHQoIkV4cGVjdGVkIGdyb3VwIGFmdGVyICciK24rIiciLHIpO3JldHVybiBpfWZvcm1hdFVuc3VwcG9ydGVkQ21kKGUpe2Zvcih2YXIgcj1bXSxuPTA7bjxlLmxlbmd0aDtuKyspci5wdXNoKHt0eXBlOiJ0ZXh0b3JkIixtb2RlOiJ0ZXh0Iix0ZXh0OmVbbl19KTt2YXIgaT17dHlwZToidGV4dCIsbW9kZTp0aGlzLm1vZGUsYm9keTpyfSxhPXt0eXBlOiJjb2xvciIsbW9kZTp0aGlzLm1vZGUsY29sb3I6dGhpcy5zZXR0aW5ncy5lcnJvckNvbG9yLGJvZHk6W2ldfTtyZXR1cm4gYX1wYXJzZUF0b20oZSl7dmFyIHI9dGhpcy5wYXJzZUdyb3VwKCJhdG9tIixlKTtpZih0aGlzLm1vZGU9PT0idGV4dCIpcmV0dXJuIHI7Zm9yKHZhciBuLGk7Oyl7dGhpcy5jb25zdW1lU3BhY2VzKCk7dmFyIGE9dGhpcy5mZXRjaCgpO2lmKGEudGV4dD09PSJcXGxpbWl0cyJ8fGEudGV4dD09PSJcXG5vbGltaXRzIil7aWYociYmci50eXBlPT09Im9wIil7dmFyIHM9YS50ZXh0PT09IlxcbGltaXRzIjtyLmxpbWl0cz1zLHIuYWx3YXlzSGFuZGxlU3VwU3ViPSEwfWVsc2UgaWYociYmci50eXBlPT09Im9wZXJhdG9ybmFtZSIpci5hbHdheXNIYW5kbGVTdXBTdWImJihyLmxpbWl0cz1hLnRleHQ9PT0iXFxsaW1pdHMiKTtlbHNlIHRocm93IG5ldyBsdCgiTGltaXQgY29udHJvbHMgbXVzdCBmb2xsb3cgYSBtYXRoIG9wZXJhdG9yIixhKTt0aGlzLmNvbnN1bWUoKX1lbHNlIGlmKGEudGV4dD09PSJeIil7aWYobil0aHJvdyBuZXcgbHQoIkRvdWJsZSBzdXBlcnNjcmlwdCIsYSk7bj10aGlzLmhhbmRsZVN1cFN1YnNjcmlwdCgic3VwZXJzY3JpcHQiKX1lbHNlIGlmKGEudGV4dD09PSJfIil7aWYoaSl0aHJvdyBuZXcgbHQoIkRvdWJsZSBzdWJzY3JpcHQiLGEpO2k9dGhpcy5oYW5kbGVTdXBTdWJzY3JpcHQoInN1YnNjcmlwdCIpfWVsc2UgaWYoYS50ZXh0PT09IiciKXtpZihuKXRocm93IG5ldyBsdCgiRG91YmxlIHN1cGVyc2NyaXB0IixhKTt2YXIgbD17dHlwZToidGV4dG9yZCIsbW9kZTp0aGlzLm1vZGUsdGV4dDoiXFxwcmltZSJ9LHU9W2xdO2Zvcih0aGlzLmNvbnN1bWUoKTt0aGlzLmZldGNoKCkudGV4dD09PSInIjspdS5wdXNoKGwpLHRoaXMuY29uc3VtZSgpO3RoaXMuZmV0Y2goKS50ZXh0PT09Il4iJiZ1LnB1c2godGhpcy5oYW5kbGVTdXBTdWJzY3JpcHQoInN1cGVyc2NyaXB0IikpLG49e3R5cGU6Im9yZGdyb3VwIixtb2RlOnRoaXMubW9kZSxib2R5OnV9fWVsc2UgaWYodjRbYS50ZXh0XSl7dmFyIGg9TkcudGVzdChhLnRleHQpLGY9W107Zm9yKGYucHVzaChuZXcgUm8odjRbYS50ZXh0XSkpLHRoaXMuY29uc3VtZSgpOzspe3ZhciBkPXRoaXMuZmV0Y2goKS50ZXh0O2lmKCF2NFtkXXx8TkcudGVzdChkKSE9PWgpYnJlYWs7Zi51bnNoaWZ0KG5ldyBSbyh2NFtkXSkpLHRoaXMuY29uc3VtZSgpfXZhciBwPXRoaXMuc3VicGFyc2UoZik7aD9pPXt0eXBlOiJvcmRncm91cCIsbW9kZToibWF0aCIsYm9keTpwfTpuPXt0eXBlOiJvcmRncm91cCIsbW9kZToibWF0aCIsYm9keTpwfX1lbHNlIGJyZWFrfXJldHVybiBufHxpP3t0eXBlOiJzdXBzdWIiLG1vZGU6dGhpcy5tb2RlLGJhc2U6cixzdXA6bixzdWI6aX06cn1wYXJzZUZ1bmN0aW9uKGUscil7dmFyIG49dGhpcy5mZXRjaCgpLGk9bi50ZXh0LGE9Z2hbaV07aWYoIWEpcmV0dXJuIG51bGw7aWYodGhpcy5jb25zdW1lKCksciYmciE9PSJhdG9tIiYmIWEuYWxsb3dlZEluQXJndW1lbnQpdGhyb3cgbmV3IGx0KCJHb3QgZnVuY3Rpb24gJyIraSsiJyB3aXRoIG5vIGFyZ3VtZW50cyIrKHI/IiBhcyAiK3I6IiIpLG4pO2lmKHRoaXMubW9kZT09PSJ0ZXh0IiYmIWEuYWxsb3dlZEluVGV4dCl0aHJvdyBuZXcgbHQoIkNhbid0IHVzZSBmdW5jdGlvbiAnIitpKyInIGluIHRleHQgbW9kZSIsbik7aWYodGhpcy5tb2RlPT09Im1hdGgiJiZhLmFsbG93ZWRJbk1hdGg9PT0hMSl0aHJvdyBuZXcgbHQoIkNhbid0IHVzZSBmdW5jdGlvbiAnIitpKyInIGluIG1hdGggbW9kZSIsbik7dmFye2FyZ3M6cyxvcHRBcmdzOmx9PXRoaXMucGFyc2VBcmd1bWVudHMoaSxhKTtyZXR1cm4gdGhpcy5jYWxsRnVuY3Rpb24oaSxzLGwsbixlKX1jYWxsRnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgcz17ZnVuY05hbWU6ZSxwYXJzZXI6dGhpcyx0b2tlbjppLGJyZWFrT25Ub2tlblRleHQ6YX0sbD1naFtlXTtpZihsJiZsLmhhbmRsZXIpcmV0dXJuIGwuaGFuZGxlcihzLHIsbik7dGhyb3cgbmV3IGx0KCJObyBmdW5jdGlvbiBoYW5kbGVyIGZvciAiK2UpfXBhcnNlQXJndW1lbnRzKGUscil7dmFyIG49ci5udW1BcmdzK3IubnVtT3B0aW9uYWxBcmdzO2lmKG49PT0wKXJldHVybnthcmdzOltdLG9wdEFyZ3M6W119O2Zvcih2YXIgaT1bXSxhPVtdLHM9MDtzPG47cysrKXt2YXIgbD1yLmFyZ1R5cGVzJiZyLmFyZ1R5cGVzW3NdLHU9czxyLm51bU9wdGlvbmFsQXJnczsoci5wcmltaXRpdmUmJmw9PW51bGx8fHIudHlwZT09PSJzcXJ0IiYmcz09PTEmJmFbMF09PW51bGwpJiYobD0icHJpbWl0aXZlIik7dmFyIGg9dGhpcy5wYXJzZUdyb3VwT2ZUeXBlKCJhcmd1bWVudCB0byAnIitlKyInIixsLHUpO2lmKHUpYS5wdXNoKGgpO2Vsc2UgaWYoaCE9bnVsbClpLnB1c2goaCk7ZWxzZSB0aHJvdyBuZXcgbHQoIk51bGwgYXJndW1lbnQsIHBsZWFzZSByZXBvcnQgdGhpcyBhcyBhIGJ1ZyIpfXJldHVybnthcmdzOmksb3B0QXJnczphfX1wYXJzZUdyb3VwT2ZUeXBlKGUscixuKXtzd2l0Y2gocil7Y2FzZSJjb2xvciI6cmV0dXJuIHRoaXMucGFyc2VDb2xvckdyb3VwKG4pO2Nhc2Uic2l6ZSI6cmV0dXJuIHRoaXMucGFyc2VTaXplR3JvdXAobik7Y2FzZSJ1cmwiOnJldHVybiB0aGlzLnBhcnNlVXJsR3JvdXAobik7Y2FzZSJtYXRoIjpjYXNlInRleHQiOnJldHVybiB0aGlzLnBhcnNlQXJndW1lbnRHcm91cChuLHIpO2Nhc2UiaGJveCI6e3ZhciBpPXRoaXMucGFyc2VBcmd1bWVudEdyb3VwKG4sInRleHQiKTtyZXR1cm4gaSE9bnVsbD97dHlwZToic3R5bGluZyIsbW9kZTppLm1vZGUsYm9keTpbaV0sc3R5bGU6InRleHQifTpudWxsfWNhc2UicmF3Ijp7dmFyIGE9dGhpcy5wYXJzZVN0cmluZ0dyb3VwKCJyYXciLG4pO3JldHVybiBhIT1udWxsP3t0eXBlOiJyYXciLG1vZGU6InRleHQiLHN0cmluZzphLnRleHR9Om51bGx9Y2FzZSJwcmltaXRpdmUiOntpZihuKXRocm93IG5ldyBsdCgiQSBwcmltaXRpdmUgYXJndW1lbnQgY2Fubm90IGJlIG9wdGlvbmFsIik7dmFyIHM9dGhpcy5wYXJzZUdyb3VwKGUpO2lmKHM9PW51bGwpdGhyb3cgbmV3IGx0KCJFeHBlY3RlZCBncm91cCBhcyAiK2UsdGhpcy5mZXRjaCgpKTtyZXR1cm4gc31jYXNlIm9yaWdpbmFsIjpjYXNlIG51bGw6Y2FzZSB2b2lkIDA6cmV0dXJuIHRoaXMucGFyc2VBcmd1bWVudEdyb3VwKG4pO2RlZmF1bHQ6dGhyb3cgbmV3IGx0KCJVbmtub3duIGdyb3VwIHR5cGUgYXMgIitlLHRoaXMuZmV0Y2goKSl9fWNvbnN1bWVTcGFjZXMoKXtmb3IoO3RoaXMuZmV0Y2goKS50ZXh0PT09IiAiOyl0aGlzLmNvbnN1bWUoKX1wYXJzZVN0cmluZ0dyb3VwKGUscil7dmFyIG49dGhpcy5ndWxsZXQuc2NhbkFyZ3VtZW50KHIpO2lmKG49PW51bGwpcmV0dXJuIG51bGw7Zm9yKHZhciBpPSIiLGE7KGE9dGhpcy5mZXRjaCgpKS50ZXh0IT09IkVPRiI7KWkrPWEudGV4dCx0aGlzLmNvbnN1bWUoKTtyZXR1cm4gdGhpcy5jb25zdW1lKCksbi50ZXh0PWksbn1wYXJzZVJlZ2V4R3JvdXAoZSxyKXtmb3IodmFyIG49dGhpcy5mZXRjaCgpLGk9bixhPSIiLHM7KHM9dGhpcy5mZXRjaCgpKS50ZXh0IT09IkVPRiImJmUudGVzdChhK3MudGV4dCk7KWk9cyxhKz1pLnRleHQsdGhpcy5jb25zdW1lKCk7aWYoYT09PSIiKXRocm93IG5ldyBsdCgiSW52YWxpZCAiK3IrIjogJyIrbi50ZXh0KyInIixuKTtyZXR1cm4gbi5yYW5nZShpLGEpfXBhcnNlQ29sb3JHcm91cChlKXt2YXIgcj10aGlzLnBhcnNlU3RyaW5nR3JvdXAoImNvbG9yIixlKTtpZihyPT1udWxsKXJldHVybiBudWxsO3ZhciBuPS9eKCNbYS1mMC05XXszfXwjP1thLWYwLTldezZ9fFthLXpdKykkL2kuZXhlYyhyLnRleHQpO2lmKCFuKXRocm93IG5ldyBsdCgiSW52YWxpZCBjb2xvcjogJyIrci50ZXh0KyInIixyKTt2YXIgaT1uWzBdO3JldHVybi9eWzAtOWEtZl17Nn0kL2kudGVzdChpKSYmKGk9IiMiK2kpLHt0eXBlOiJjb2xvci10b2tlbiIsbW9kZTp0aGlzLm1vZGUsY29sb3I6aX19cGFyc2VTaXplR3JvdXAoZSl7dmFyIHIsbj0hMTtpZih0aGlzLmd1bGxldC5jb25zdW1lU3BhY2VzKCksIWUmJnRoaXMuZ3VsbGV0LmZ1dHVyZSgpLnRleHQhPT0ieyI/cj10aGlzLnBhcnNlUmVnZXhHcm91cCgvXlstK10/ICooPzokfFxkK3xcZCtcLlxkKnxcLlxkKikgKlthLXpdezAsMn0gKiQvLCJzaXplIik6cj10aGlzLnBhcnNlU3RyaW5nR3JvdXAoInNpemUiLGUpLCFyKXJldHVybiBudWxsOyFlJiZyLnRleHQubGVuZ3RoPT09MCYmKHIudGV4dD0iMHB0IixuPSEwKTt2YXIgaT0vKFstK10/KSAqKFxkKyg/OlwuXGQqKT98XC5cZCspICooW2Etel17Mn0pLy5leGVjKHIudGV4dCk7aWYoIWkpdGhyb3cgbmV3IGx0KCJJbnZhbGlkIHNpemU6ICciK3IudGV4dCsiJyIscik7dmFyIGE9e251bWJlcjorKGlbMV0raVsyXSksdW5pdDppWzNdfTtpZighT0coYSkpdGhyb3cgbmV3IGx0KCJJbnZhbGlkIHVuaXQ6ICciK2EudW5pdCsiJyIscik7cmV0dXJue3R5cGU6InNpemUiLG1vZGU6dGhpcy5tb2RlLHZhbHVlOmEsaXNCbGFuazpufX1wYXJzZVVybEdyb3VwKGUpe3RoaXMuZ3VsbGV0LmxleGVyLnNldENhdGNvZGUoIiUiLDEzKSx0aGlzLmd1bGxldC5sZXhlci5zZXRDYXRjb2RlKCJ+IiwxMik7dmFyIHI9dGhpcy5wYXJzZVN0cmluZ0dyb3VwKCJ1cmwiLGUpO2lmKHRoaXMuZ3VsbGV0LmxleGVyLnNldENhdGNvZGUoIiUiLDE0KSx0aGlzLmd1bGxldC5sZXhlci5zZXRDYXRjb2RlKCJ+IiwxMykscj09bnVsbClyZXR1cm4gbnVsbDt2YXIgbj1yLnRleHQucmVwbGFjZSgvXFwoWyMkJSZ+X157fV0pL2csIiQxIik7cmV0dXJue3R5cGU6InVybCIsbW9kZTp0aGlzLm1vZGUsdXJsOm59fXBhcnNlQXJndW1lbnRHcm91cChlLHIpe3ZhciBuPXRoaXMuZ3VsbGV0LnNjYW5Bcmd1bWVudChlKTtpZihuPT1udWxsKXJldHVybiBudWxsO3ZhciBpPXRoaXMubW9kZTtyJiZ0aGlzLnN3aXRjaE1vZGUociksdGhpcy5ndWxsZXQuYmVnaW5Hcm91cCgpO3ZhciBhPXRoaXMucGFyc2VFeHByZXNzaW9uKCExLCJFT0YiKTt0aGlzLmV4cGVjdCgiRU9GIiksdGhpcy5ndWxsZXQuZW5kR3JvdXAoKTt2YXIgcz17dHlwZToib3JkZ3JvdXAiLG1vZGU6dGhpcy5tb2RlLGxvYzpuLmxvYyxib2R5OmF9O3JldHVybiByJiZ0aGlzLnN3aXRjaE1vZGUoaSksc31wYXJzZUdyb3VwKGUscil7dmFyIG49dGhpcy5mZXRjaCgpLGk9bi50ZXh0LGE7aWYoaT09PSJ7Inx8aT09PSJcXGJlZ2luZ3JvdXAiKXt0aGlzLmNvbnN1bWUoKTt2YXIgcz1pPT09InsiPyJ9IjoiXFxlbmRncm91cCI7dGhpcy5ndWxsZXQuYmVnaW5Hcm91cCgpO3ZhciBsPXRoaXMucGFyc2VFeHByZXNzaW9uKCExLHMpLHU9dGhpcy5mZXRjaCgpO3RoaXMuZXhwZWN0KHMpLHRoaXMuZ3VsbGV0LmVuZEdyb3VwKCksYT17dHlwZToib3JkZ3JvdXAiLG1vZGU6dGhpcy5tb2RlLGxvYzpKcy5yYW5nZShuLHUpLGJvZHk6bCxzZW1pc2ltcGxlOmk9PT0iXFxiZWdpbmdyb3VwInx8dm9pZCAwfX1lbHNlIGlmKGE9dGhpcy5wYXJzZUZ1bmN0aW9uKHIsZSl8fHRoaXMucGFyc2VTeW1ib2woKSxhPT1udWxsJiZpWzBdPT09IlxcIiYmIVMkLmhhc093blByb3BlcnR5KGkpKXtpZih0aGlzLnNldHRpbmdzLnRocm93T25FcnJvcil0aHJvdyBuZXcgbHQoIlVuZGVmaW5lZCBjb250cm9sIHNlcXVlbmNlOiAiK2ksbik7YT10aGlzLmZvcm1hdFVuc3VwcG9ydGVkQ21kKGkpLHRoaXMuY29uc3VtZSgpfXJldHVybiBhfWZvcm1MaWdhdHVyZXMoZSl7Zm9yKHZhciByPWUubGVuZ3RoLTEsbj0wO248cjsrK24pe3ZhciBpPWVbbl0sYT1pLnRleHQ7YT09PSItIiYmZVtuKzFdLnRleHQ9PT0iLSImJihuKzE8ciYmZVtuKzJdLnRleHQ9PT0iLSI/KGUuc3BsaWNlKG4sMyx7dHlwZToidGV4dG9yZCIsbW9kZToidGV4dCIsbG9jOkpzLnJhbmdlKGksZVtuKzJdKSx0ZXh0OiItLS0ifSksci09Mik6KGUuc3BsaWNlKG4sMix7dHlwZToidGV4dG9yZCIsbW9kZToidGV4dCIsbG9jOkpzLnJhbmdlKGksZVtuKzFdKSx0ZXh0OiItLSJ9KSxyLT0xKSksKGE9PT0iJyJ8fGE9PT0iYCIpJiZlW24rMV0udGV4dD09PWEmJihlLnNwbGljZShuLDIse3R5cGU6InRleHRvcmQiLG1vZGU6InRleHQiLGxvYzpKcy5yYW5nZShpLGVbbisxXSksdGV4dDphK2F9KSxyLT0xKX19cGFyc2VTeW1ib2woKXt2YXIgZT10aGlzLmZldGNoKCkscj1lLnRleHQ7aWYoL15cXHZlcmJbXmEtekEtWl0vLnRlc3Qocikpe3RoaXMuY29uc3VtZSgpO3ZhciBuPXIuc2xpY2UoNSksaT1uLmNoYXJBdCgwKT09PSIqIjtpZihpJiYobj1uLnNsaWNlKDEpKSxuLmxlbmd0aDwyfHxuLmNoYXJBdCgwKSE9PW4uc2xpY2UoLTEpKXRocm93IG5ldyBsdChgXFx2ZXJiIGFzc2VydGlvbiBmYWlsZWQgLS0KICAgICAgICAgICAgICAgICAgICBwbGVhc2UgcmVwb3J0IHdoYXQgaW5wdXQgY2F1c2VkIHRoaXMgYnVnYCk7cmV0dXJuIG49bi5zbGljZSgxLC0xKSx7dHlwZToidmVyYiIsbW9kZToidGV4dCIsYm9keTpuLHN0YXI6aX19UkcuaGFzT3duUHJvcGVydHkoclswXSkmJiFDblt0aGlzLm1vZGVdW3JbMF1dJiYodGhpcy5zZXR0aW5ncy5zdHJpY3QmJnRoaXMubW9kZT09PSJtYXRoIiYmdGhpcy5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoInVuaWNvZGVUZXh0SW5NYXRoTW9kZSIsJ0FjY2VudGVkIFVuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgIicrclswXSsnIiB1c2VkIGluIG1hdGggbW9kZScsZSkscj1SR1tyWzBdXStyLnNsaWNlKDEpKTt2YXIgYT1HNGUuZXhlYyhyKTthJiYocj1yLnN1YnN0cmluZygwLGEuaW5kZXgpLHI9PT0iaSI/cj0iXHUwMTMxIjpyPT09ImoiJiYocj0iXHUwMjM3IikpO3ZhciBzO2lmKENuW3RoaXMubW9kZV1bcl0pe3RoaXMuc2V0dGluZ3Muc3RyaWN0JiZ0aGlzLm1vZGU9PT0ibWF0aCImJkVDLmluZGV4T2Yocik+PTAmJnRoaXMuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KCJ1bmljb2RlVGV4dEluTWF0aE1vZGUiLCdMYXRpbi0xL1VuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgIicrclswXSsnIiB1c2VkIGluIG1hdGggbW9kZScsZSk7dmFyIGw9Q25bdGhpcy5tb2RlXVtyXS5ncm91cCx1PUpzLnJhbmdlKGUpLGg7aWYoTWJlLmhhc093blByb3BlcnR5KGwpKXt2YXIgZj1sO2g9e3R5cGU6ImF0b20iLG1vZGU6dGhpcy5tb2RlLGZhbWlseTpmLGxvYzp1LHRleHQ6cn19ZWxzZSBoPXt0eXBlOmwsbW9kZTp0aGlzLm1vZGUsbG9jOnUsdGV4dDpyfTtzPWh9ZWxzZSBpZihyLmNoYXJDb2RlQXQoMCk+PTEyOCl0aGlzLnNldHRpbmdzLnN0cmljdCYmKElHKHIuY2hhckNvZGVBdCgwKSk/dGhpcy5tb2RlPT09Im1hdGgiJiZ0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgidW5pY29kZVRleHRJbk1hdGhNb2RlIiwnVW5pY29kZSB0ZXh0IGNoYXJhY3RlciAiJytyWzBdKyciIHVzZWQgaW4gbWF0aCBtb2RlJyxlKTp0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgidW5rbm93blN5bWJvbCIsJ1VucmVjb2duaXplZCBVbmljb2RlIGNoYXJhY3RlciAiJytyWzBdKyciJysoIiAoIityLmNoYXJDb2RlQXQoMCkrIikiKSxlKSkscz17dHlwZToidGV4dG9yZCIsbW9kZToidGV4dCIsbG9jOkpzLnJhbmdlKGUpLHRleHQ6cn07ZWxzZSByZXR1cm4gbnVsbDtpZih0aGlzLmNvbnN1bWUoKSxhKWZvcih2YXIgZD0wO2Q8YVswXS5sZW5ndGg7ZCsrKXt2YXIgcD1hWzBdW2RdO2lmKCFiQ1twXSl0aHJvdyBuZXcgbHQoIlVua25vd24gYWNjZW50ICcgIitwKyInIixlKTt2YXIgbT1iQ1twXVt0aGlzLm1vZGVdfHxiQ1twXS50ZXh0O2lmKCFtKXRocm93IG5ldyBsdCgiQWNjZW50ICIrcCsiIHVuc3VwcG9ydGVkIGluICIrdGhpcy5tb2RlKyIgbW9kZSIsZSk7cz17dHlwZToiYWNjZW50Iixtb2RlOnRoaXMubW9kZSxsb2M6SnMucmFuZ2UoZSksbGFiZWw6bSxpc1N0cmV0Y2h5OiExLGlzU2hpZnR5OiEwLGJhc2U6c319cmV0dXJuIHN9fTtfNC5lbmRPZkV4cHJlc3Npb249WyJ9IiwiXFxlbmRncm91cCIsIlxcZW5kIiwiXFxyaWdodCIsIiYiXTtqQz1vKGZ1bmN0aW9uKGUscil7aWYoISh0eXBlb2YgZT09InN0cmluZyJ8fGUgaW5zdGFuY2VvZiBTdHJpbmcpKXRocm93IG5ldyBUeXBlRXJyb3IoIkthVGVYIGNhbiBvbmx5IHBhcnNlIHN0cmluZyB0eXBlZCBleHByZXNzaW9uIik7dmFyIG49bmV3IF80KGUscik7ZGVsZXRlIG4uZ3VsbGV0Lm1hY3Jvcy5jdXJyZW50WyJcXGRmQHRhZyJdO3ZhciBpPW4ucGFyc2UoKTtpZihkZWxldGUgbi5ndWxsZXQubWFjcm9zLmN1cnJlbnRbIlxcY3VycmVudEBjb2xvciJdLGRlbGV0ZSBuLmd1bGxldC5tYWNyb3MuY3VycmVudFsiXFxjb2xvciJdLG4uZ3VsbGV0Lm1hY3Jvcy5nZXQoIlxcZGZAdGFnIikpe2lmKCFyLmRpc3BsYXlNb2RlKXRocm93IG5ldyBsdCgiXFx0YWcgd29ya3Mgb25seSBpbiBkaXNwbGF5IGVxdWF0aW9ucyIpO2k9W3t0eXBlOiJ0YWciLG1vZGU6InRleHQiLGJvZHk6aSx0YWc6bi5zdWJwYXJzZShbbmV3IFJvKCJcXGRmQHRhZyIpXSl9XX1yZXR1cm4gaX0sInBhcnNlVHJlZSIpLEMkPW8oZnVuY3Rpb24oZSxyLG4pe3IudGV4dENvbnRlbnQ9IiI7dmFyIGk9S0MoZSxuKS50b05vZGUoKTtyLmFwcGVuZENoaWxkKGkpfSwicmVuZGVyIik7dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY29tcGF0TW9kZSE9PSJDU1MxQ29tcGF0IiYmKHR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuKCJXYXJuaW5nOiBLYVRlWCBkb2Vzbid0IHdvcmsgaW4gcXVpcmtzIG1vZGUuIE1ha2Ugc3VyZSB5b3VyIHdlYnNpdGUgaGFzIGEgc3VpdGFibGUgZG9jdHlwZS4iKSxDJD1vKGZ1bmN0aW9uKCl7dGhyb3cgbmV3IGx0KCJLYVRlWCBkb2Vzbid0IHdvcmsgaW4gcXVpcmtzIG1vZGUuIil9LCJyZW5kZXIiKSk7VTRlPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1LQyhlLHIpLnRvTWFya3VwKCk7cmV0dXJuIG59LCJyZW5kZXJUb1N0cmluZyIpLEg0ZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49bmV3IGR5KHIpO3JldHVybiBqQyhlLG4pfSwiZ2VuZXJhdGVQYXJzZVRyZWUiKSxBJD1vKGZ1bmN0aW9uKGUscixuKXtpZihuLnRocm93T25FcnJvcnx8IShlIGluc3RhbmNlb2YgbHQpKXRocm93IGU7dmFyIGk9RmUubWFrZVNwYW4oWyJrYXRleC1lcnJvciJdLFtuZXcgRXMocildKTtyZXR1cm4gaS5zZXRBdHRyaWJ1dGUoInRpdGxlIixlLnRvU3RyaW5nKCkpLGkuc2V0QXR0cmlidXRlKCJzdHlsZSIsImNvbG9yOiIrbi5lcnJvckNvbG9yKSxpfSwicmVuZGVyRXJyb3IiKSxLQz1vKGZ1bmN0aW9uKGUscil7dmFyIG49bmV3IGR5KHIpO3RyeXt2YXIgaT1qQyhlLG4pO3JldHVybiB0NGUoaSxlLG4pfWNhdGNoKGEpe3JldHVybiBBJChhLGUsbil9fSwicmVuZGVyVG9Eb21UcmVlIiksVzRlPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1uZXcgZHkocik7dHJ5e3ZhciBpPWpDKGUsbik7cmV0dXJuIHI0ZShpLGUsbil9Y2F0Y2goYSl7cmV0dXJuIEEkKGEsZSxuKX19LCJyZW5kZXJUb0hUTUxUcmVlIiksWTRlPXt2ZXJzaW9uOiIwLjE2LjExIixyZW5kZXI6QyQscmVuZGVyVG9TdHJpbmc6VTRlLFBhcnNlRXJyb3I6bHQsU0VUVElOR1NfU0NIRU1BOng0LF9fcGFyc2U6SDRlLF9fcmVuZGVyVG9Eb21UcmVlOktDLF9fcmVuZGVyVG9IVE1MVHJlZTpXNGUsX19zZXRGb250TWV0cmljczpBYmUsX19kZWZpbmVTeW1ib2w6JCxfX2RlZmluZUZ1bmN0aW9uOlN0LF9fZGVmaW5lTWFjcm86bGUsX19kb21UcmVlOntTcGFuOm5kLEFuY2hvcjpteSxTeW1ib2xOb2RlOkVzLFN2Z05vZGU6dmwsUGF0aE5vZGU6Y2MsTGluZU5vZGU6Z3l9fX0pO2Z1bmN0aW9uIGo0ZSgpe2xldCB0PSJkYXRhLXRlbXAtaHJlZi10YXJnZXQiO0FwLmRlZmF1bHQuYWRkSG9vaygiYmVmb3JlU2FuaXRpemVBdHRyaWJ1dGVzIixlPT57ZS50YWdOYW1lPT09IkEiJiZlLmhhc0F0dHJpYnV0ZSgidGFyZ2V0IikmJmUuc2V0QXR0cmlidXRlKHQsZS5nZXRBdHRyaWJ1dGUoInRhcmdldCIpPz8iIil9KSxBcC5kZWZhdWx0LmFkZEhvb2soImFmdGVyU2FuaXRpemVBdHRyaWJ1dGVzIixlPT57ZS50YWdOYW1lPT09IkEiJiZlLmhhc0F0dHJpYnV0ZSh0KSYmKGUuc2V0QXR0cmlidXRlKCJ0YXJnZXQiLGUuZ2V0QXR0cmlidXRlKHQpPz8iIiksZS5yZW1vdmVBdHRyaWJ1dGUodCksZS5nZXRBdHRyaWJ1dGUoInRhcmdldCIpPT09Il9ibGFuayImJmUuc2V0QXR0cmlidXRlKCJyZWwiLCJub29wZW5lciIpKX0pfXZhciBBcCxhZCxxNGUsWDRlLFIkLEQkLGtyLEs0ZSxRNGUsWjRlLEo0ZSxNJCxlM2UseHIsdDNlLHIzZSx5dSxRQyxuM2UsaTNlLE4kLFpDLHlpLHNkLGJoLHFlLGZyPU0oKCk9PnsidXNlIHN0cmljdCI7QXA9SmkobEMoKSwxKSxhZD0vPGJyXHMqXC8/Pi9naSxxNGU9byh0PT50P00kKHQpLnJlcGxhY2UoL1xcbi9nLCIjYnIjIikuc3BsaXQoIiNiciMiKTpbIiJdLCJnZXRSb3dzIiksWDRlPSgoKT0+e2xldCB0PSExO3JldHVybigpPT57dHx8KGo0ZSgpLHQ9ITApfX0pKCk7byhqNGUsInNldHVwRG9tcHVyaWZ5SG9va3MiKTtSJD1vKHQ9PihYNGUoKSxBcC5kZWZhdWx0LnNhbml0aXplKHQpKSwicmVtb3ZlU2NyaXB0IiksRCQ9bygodCxlKT0+e2lmKGUuZmxvd2NoYXJ0Py5odG1sTGFiZWxzIT09ITEpe2xldCByPWUuc2VjdXJpdHlMZXZlbDtyPT09ImFudGlzY3JpcHQifHxyPT09InN0cmljdCI/dD1SJCh0KTpyIT09Imxvb3NlIiYmKHQ9TSQodCksdD10LnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLHQ9dC5yZXBsYWNlKC89L2csIiZlcXVhbHM7IiksdD1KNGUodCkpfXJldHVybiB0fSwic2FuaXRpemVNb3JlIiksa3I9bygodCxlKT0+dCYmKGUuZG9tcHVyaWZ5Q29uZmlnP3Q9QXAuZGVmYXVsdC5zYW5pdGl6ZShEJCh0LGUpLGUuZG9tcHVyaWZ5Q29uZmlnKS50b1N0cmluZygpOnQ9QXAuZGVmYXVsdC5zYW5pdGl6ZShEJCh0LGUpLHtGT1JCSURfVEFHUzpbInN0eWxlIl19KS50b1N0cmluZygpLHQpLCJzYW5pdGl6ZVRleHQiKSxLNGU9bygodCxlKT0+dHlwZW9mIHQ9PSJzdHJpbmciP2tyKHQsZSk6dC5mbGF0KCkubWFwKHI9PmtyKHIsZSkpLCJzYW5pdGl6ZVRleHRPckFycmF5IiksUTRlPW8odD0+YWQudGVzdCh0KSwiaGFzQnJlYWtzIiksWjRlPW8odD0+dC5zcGxpdChhZCksInNwbGl0QnJlYWtzIiksSjRlPW8odD0+dC5yZXBsYWNlKC8jYnIjL2csIjxici8+IiksInBsYWNlaG9sZGVyVG9CcmVhayIpLE0kPW8odD0+dC5yZXBsYWNlKGFkLCIjYnIjIiksImJyZWFrVG9QbGFjZWhvbGRlciIpLGUzZT1vKHQ9PntsZXQgZT0iIjtyZXR1cm4gdCYmKGU9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gsZT1lLnJlcGxhY2VBbGwoL1woL2csIlxcKCIpLGU9ZS5yZXBsYWNlQWxsKC9cKS9nLCJcXCkiKSksZX0sImdldFVybCIpLHhyPW8odD0+ISh0PT09ITF8fFsiZmFsc2UiLCJudWxsIiwiMCJdLmluY2x1ZGVzKFN0cmluZyh0KS50cmltKCkudG9Mb3dlckNhc2UoKSkpLCJldmFsdWF0ZSIpLHQzZT1vKGZ1bmN0aW9uKC4uLnQpe2xldCBlPXQuZmlsdGVyKHI9PiFpc05hTihyKSk7cmV0dXJuIE1hdGgubWF4KC4uLmUpfSwiZ2V0TWF4IikscjNlPW8oZnVuY3Rpb24oLi4udCl7bGV0IGU9dC5maWx0ZXIocj0+IWlzTmFOKHIpKTtyZXR1cm4gTWF0aC5taW4oLi4uZSl9LCJnZXRNaW4iKSx5dT1vKGZ1bmN0aW9uKHQpe2xldCBlPXQuc3BsaXQoLygsKS8pLHI9W107Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspe2xldCBpPWVbbl07aWYoaT09PSIsIiYmbj4wJiZuKzE8ZS5sZW5ndGgpe2xldCBhPWVbbi0xXSxzPWVbbisxXTtuM2UoYSxzKSYmKGk9YSsiLCIrcyxuKyssci5wb3AoKSl9ci5wdXNoKGkzZShpKSl9cmV0dXJuIHIuam9pbigiIil9LCJwYXJzZUdlbmVyaWNUeXBlcyIpLFFDPW8oKHQsZSk9Pk1hdGgubWF4KDAsdC5zcGxpdChlKS5sZW5ndGgtMSksImNvdW50T2NjdXJyZW5jZSIpLG4zZT1vKCh0LGUpPT57bGV0IHI9UUModCwifiIpLG49UUMoZSwifiIpO3JldHVybiByPT09MSYmbj09PTF9LCJzaG91bGRDb21iaW5lU2V0cyIpLGkzZT1vKHQ9PntsZXQgZT1RQyh0LCJ+Iikscj0hMTtpZihlPD0xKXJldHVybiB0O2UlMiE9PTAmJnQuc3RhcnRzV2l0aCgifiIpJiYodD10LnN1YnN0cmluZygxKSxyPSEwKTtsZXQgbj1bLi4udF0saT1uLmluZGV4T2YoIn4iKSxhPW4ubGFzdEluZGV4T2YoIn4iKTtmb3IoO2khPT0tMSYmYSE9PS0xJiZpIT09YTspbltpXT0iPCIsblthXT0iPiIsaT1uLmluZGV4T2YoIn4iKSxhPW4ubGFzdEluZGV4T2YoIn4iKTtyZXR1cm4gciYmbi51bnNoaWZ0KCJ+Iiksbi5qb2luKCIiKX0sInByb2Nlc3NTZXQiKSxOJD1vKCgpPT53aW5kb3cuTWF0aE1MRWxlbWVudCE9PXZvaWQgMCwiaXNNYXRoTUxTdXBwb3J0ZWQiKSxaQz0vXCRcJCguKilcJFwkL2cseWk9byh0PT4odC5tYXRjaChaQyk/Lmxlbmd0aD8/MCk+MCwiaGFzS2F0ZXgiKSxzZD1vKGFzeW5jKHQsZSk9Pnt0PWF3YWl0IGJoKHQsZSk7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ci5pbm5lckhUTUw9dCxyLmlkPSJrYXRleC10ZW1wIixyLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsci5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHIuc3R5bGUudG9wPSIwIixkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJib2R5Iik/Lmluc2VydEFkamFjZW50RWxlbWVudCgiYmVmb3JlZW5kIixyKTtsZXQgaT17d2lkdGg6ci5jbGllbnRXaWR0aCxoZWlnaHQ6ci5jbGllbnRIZWlnaHR9O3JldHVybiByLnJlbW92ZSgpLGl9LCJjYWxjdWxhdGVNYXRoTUxEaW1lbnNpb25zIiksYmg9byhhc3luYyh0LGUpPT57aWYoIXlpKHQpKXJldHVybiB0O2lmKCEoTiQoKXx8ZS5sZWdhY3lNYXRoTUx8fGUuZm9yY2VMZWdhY3lNYXRoTUwpKXJldHVybiB0LnJlcGxhY2UoWkMsIk1hdGhNTCBpcyB1bnN1cHBvcnRlZCBpbiB0aGlzIGVudmlyb25tZW50LiIpO2xldHtkZWZhdWx0OnJ9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihMJCgpLF8kKSksbj1lLmZvcmNlTGVnYWN5TWF0aE1MfHwhTiQoKSYmZS5sZWdhY3lNYXRoTUw/Imh0bWxBbmRNYXRobWwiOiJtYXRobWwiO3JldHVybiB0LnNwbGl0KGFkKS5tYXAoaT0+eWkoaSk/YDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyB3aGl0ZS1zcGFjZTogbm93cmFwOyI+JHtpfTwvZGl2PmA6YDxkaXY+JHtpfTwvZGl2PmApLmpvaW4oIiIpLnJlcGxhY2UoWkMsKGksYSk9PnIucmVuZGVyVG9TdHJpbmcoYSx7dGhyb3dPbkVycm9yOiEwLGRpc3BsYXlNb2RlOiEwLG91dHB1dDpufSkucmVwbGFjZSgvXG4vZywiICIpLnJlcGxhY2UoLzxhbm5vdGF0aW9uLio8XC9hbm5vdGF0aW9uPi9nLCIiKSl9LCJyZW5kZXJLYXRleCIpLHFlPXtnZXRSb3dzOnE0ZSxzYW5pdGl6ZVRleHQ6a3Isc2FuaXRpemVUZXh0T3JBcnJheTpLNGUsaGFzQnJlYWtzOlE0ZSxzcGxpdEJyZWFrczpaNGUsbGluZUJyZWFrUmVnZXg6YWQscmVtb3ZlU2NyaXB0OlIkLGdldFVybDplM2UsZXZhbHVhdGU6eHIsZ2V0TWF4OnQzZSxnZXRNaW46cjNlfX0pO3ZhciBhM2UsczNlLFpyLElvLGFpPU0oKCk9PnsidXNlIHN0cmljdCI7dXQoKTthM2U9byhmdW5jdGlvbih0LGUpe2ZvcihsZXQgciBvZiBlKXQuYXR0cihyWzBdLHJbMV0pfSwiZDNBdHRycyIpLHMzZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1uZXcgTWFwO3JldHVybiByPyhuLnNldCgid2lkdGgiLCIxMDAlIiksbi5zZXQoInN0eWxlIixgbWF4LXdpZHRoOiAke2V9cHg7YCkpOihuLnNldCgiaGVpZ2h0Iix0KSxuLnNldCgid2lkdGgiLGUpKSxufSwiY2FsY3VsYXRlU3ZnU2l6ZUF0dHJzIiksWnI9byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT1zM2UoZSxyLG4pO2EzZSh0LGkpfSwiY29uZmlndXJlU3ZnU2l6ZSIpLElvPW8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9ZS5ub2RlKCkuZ2V0QkJveCgpLGE9aS53aWR0aCxzPWkuaGVpZ2h0O1kuaW5mbyhgU1ZHIGJvdW5kczogJHthfXgke3N9YCxpKTtsZXQgbD0wLHU9MDtZLmluZm8oYEdyYXBoIGJvdW5kczogJHtsfXgke3V9YCx0KSxsPWErcioyLHU9cytyKjIsWS5pbmZvKGBDYWxjdWxhdGVkIGJvdW5kczogJHtsfXgke3V9YCksWnIoZSx1LGwsbik7bGV0IGg9YCR7aS54LXJ9ICR7aS55LXJ9ICR7aS53aWR0aCsyKnJ9ICR7aS5oZWlnaHQrMipyfWA7ZS5hdHRyKCJ2aWV3Qm94IixoKX0sInNldHVwR3JhcGhWaWV3Ym94Iil9KTt2YXIgTzQsbzNlLEkkLE8kLEpDPU0oKCk9PnsidXNlIHN0cmljdCI7dXQoKTtPND17fSxvM2U9bygodCxlLHIpPT57bGV0IG49IiI7cmV0dXJuIHQgaW4gTzQmJk80W3RdP249TzRbdF0ocik6WS53YXJuKGBObyB0aGVtZSBmb3VuZCBmb3IgJHt0fWApLGAgJiB7CiAgICBmb250LWZhbWlseTogJHtyLmZvbnRGYW1pbHl9OwogICAgZm9udC1zaXplOiAke3IuZm9udFNpemV9OwogICAgZmlsbDogJHtyLnRleHRDb2xvcn0KICB9CgogIC8qIENsYXNzZXMgY29tbW9uIGZvciBtdWx0aXBsZSBkaWFncmFtcyAqLwoKICAmIC5lcnJvci1pY29uIHsKICAgIGZpbGw6ICR7ci5lcnJvckJrZ0NvbG9yfTsKICB9CiAgJiAuZXJyb3ItdGV4dCB7CiAgICBmaWxsOiAke3IuZXJyb3JUZXh0Q29sb3J9OwogICAgc3Ryb2tlOiAke3IuZXJyb3JUZXh0Q29sb3J9OwogIH0KCiAgJiAuZWRnZS10aGlja25lc3Mtbm9ybWFsIHsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KICAmIC5lZGdlLXRoaWNrbmVzcy10aGljayB7CiAgICBzdHJva2Utd2lkdGg6IDMuNXB4CiAgfQogICYgLmVkZ2UtcGF0dGVybi1zb2xpZCB7CiAgICBzdHJva2UtZGFzaGFycmF5OiAwOwogIH0KICAmIC5lZGdlLXRoaWNrbmVzcy1pbnZpc2libGUgewogICAgc3Ryb2tlLXdpZHRoOiAwOwogICAgZmlsbDogbm9uZTsKICB9CiAgJiAuZWRnZS1wYXR0ZXJuLWRhc2hlZHsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDM7CiAgfQogIC5lZGdlLXBhdHRlcm4tZG90dGVkIHsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDI7CiAgfQoKICAmIC5tYXJrZXIgewogICAgZmlsbDogJHtyLmxpbmVDb2xvcn07CiAgICBzdHJva2U6ICR7ci5saW5lQ29sb3J9OwogIH0KICAmIC5tYXJrZXIuY3Jvc3MgewogICAgc3Ryb2tlOiAke3IubGluZUNvbG9yfTsKICB9CgogICYgc3ZnIHsKICAgIGZvbnQtZmFtaWx5OiAke3IuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6ICR7ci5mb250U2l6ZX07CiAgfQogICAmIHAgewogICAgbWFyZ2luOiAwCiAgIH0KCiAgJHtufQoKICAke2V9CmB9LCJnZXRTdHlsZXMiKSxJJD1vKCh0LGUpPT57ZSE9PXZvaWQgMCYmKE80W3RdPWUpfSwiYWRkU3R5bGVzRm9yRGlhZ3JhbSIpLE8kPW8zZX0pO3ZhciB4eT17fTt2cih4eSx7Y2xlYXI6KCk9PkxyLGdldEFjY0Rlc2NyaXB0aW9uOigpPT56cixnZXRBY2NUaXRsZTooKT0+QnIsZ2V0RGlhZ3JhbVRpdGxlOigpPT5KcixzZXRBY2NEZXNjcmlwdGlvbjooKT0+RnIsc2V0QWNjVGl0bGU6KCk9Pk1yLHNldERpYWdyYW1UaXRsZTooKT0+Y259KTt2YXIgZTcsdDcscjcsbjcsTHIsTXIsQnIsRnIsenIsY24sSnIsQWk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtmcigpO1phKCk7ZTc9IiIsdDc9IiIscjc9IiIsbjc9byh0PT5rcih0LENyKCkpLCJzYW5pdGl6ZVRleHQiKSxMcj1vKCgpPT57ZTc9IiIscjc9IiIsdDc9IiJ9LCJjbGVhciIpLE1yPW8odD0+e2U3PW43KHQpLnJlcGxhY2UoL15ccysvZywiIil9LCJzZXRBY2NUaXRsZSIpLEJyPW8oKCk9PmU3LCJnZXRBY2NUaXRsZSIpLEZyPW8odD0+e3I3PW43KHQpLnJlcGxhY2UoL1xuXHMrL2csYApgKX0sInNldEFjY0Rlc2NyaXB0aW9uIiksenI9bygoKT0+cjcsImdldEFjY0Rlc2NyaXB0aW9uIiksY249byh0PT57dDc9bjcodCl9LCJzZXREaWFncmFtVGl0bGUiKSxKcj1vKCgpPT50NywiZ2V0RGlhZ3JhbVRpdGxlIil9KTt2YXIgUCQsbDNlLHBlLGE3LEI0LHM3LG83LGMzZSxQNCxvZCxieSxpNyxWdD1NKCgpPT57InVzZSBzdHJpY3QiO1pmKCk7dXQoKTtaYSgpO2ZyKCk7YWkoKTtKQygpO0FpKCk7UCQ9WSxsM2U9SjEscGU9Q3IsYTc9bzQsQjQ9cGgsczc9byh0PT5rcih0LHBlKCkpLCJzYW5pdGl6ZVRleHQiKSxvNz1JbyxjM2U9bygoKT0+eHksImdldENvbW1vbkRiIiksUDQ9e30sb2Q9bygodCxlLHIpPT57UDRbdF0mJlAkLndhcm4oYERpYWdyYW0gd2l0aCBpZCAke3R9IGFscmVhZHkgcmVnaXN0ZXJlZC4gT3ZlcndyaXRpbmcuYCksUDRbdF09ZSxyJiZWUyh0LHIpLEkkKHQsZS5zdHlsZXMpLGUuaW5qZWN0VXRpbHM/LihQJCxsM2UscGUsczcsbzcsYzNlKCksKCk9Pnt9KX0sInJlZ2lzdGVyRGlhZ3JhbSIpLGJ5PW8odD0+e2lmKHQgaW4gUDQpcmV0dXJuIFA0W3RdO3Rocm93IG5ldyBpNyh0KX0sImdldERpYWdyYW0iKSxpNz1jbGFzcyBleHRlbmRzIEVycm9ye3N0YXRpY3tvKHRoaXMsIkRpYWdyYW1Ob3RGb3VuZEVycm9yIil9Y29uc3RydWN0b3IoZSl7c3VwZXIoYERpYWdyYW0gJHtlfSBub3QgZm91bmQuYCl9fX0pO3ZhciBibCx3aCx0cyx4bCxkYyx3eSxsNyxjNyxGNCx6NCxCJCx1M2UsaDNlLGYzZSxkM2UscDNlLG0zZSxnM2UseTNlLHYzZSx4M2UsYjNlLHczZSxUM2UsazNlLEUzZSxTM2UsQzNlLEYkLEEzZSxfM2UseiQsTDNlLEQzZSxOM2UsUjNlLFRoLE0zZSxJM2UsTzNlLFAzZSxCM2UsVHksdTc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWdCgpO2ZyKCk7QWkoKTtibD1bXSx3aD1bIiJdLHRzPSJnbG9iYWwiLHhsPSIiLGRjPVt7YWxpYXM6Imdsb2JhbCIsbGFiZWw6e3RleHQ6Imdsb2JhbCJ9LHR5cGU6e3RleHQ6Imdsb2JhbCJ9LHRhZ3M6bnVsbCxsaW5rOm51bGwscGFyZW50Qm91bmRhcnk6IiJ9XSx3eT1bXSxsNz0iIixjNz0hMSxGND00LHo0PTIsdTNlPW8oZnVuY3Rpb24oKXtyZXR1cm4gQiR9LCJnZXRDNFR5cGUiKSxoM2U9byhmdW5jdGlvbih0KXtCJD1rcih0LHBlKCkpfSwic2V0QzRUeXBlIiksZjNlPW8oZnVuY3Rpb24odCxlLHIsbixpLGEscyxsLHUpe2lmKHQ9PW51bGx8fGU9PT12b2lkIDB8fGU9PT1udWxsfHxyPT09dm9pZCAwfHxyPT09bnVsbHx8bj09PXZvaWQgMHx8bj09PW51bGwpcmV0dXJuO2xldCBoPXt9LGY9d3kuZmluZChkPT5kLmZyb209PT1lJiZkLnRvPT09cik7aWYoZj9oPWY6d3kucHVzaChoKSxoLnR5cGU9dCxoLmZyb209ZSxoLnRvPXIsaC5sYWJlbD17dGV4dDpufSxpPT1udWxsKWgudGVjaG49e3RleHQ6IiJ9O2Vsc2UgaWYodHlwZW9mIGk9PSJvYmplY3QiKXtsZXRbZCxwXT1PYmplY3QuZW50cmllcyhpKVswXTtoW2RdPXt0ZXh0OnB9fWVsc2UgaC50ZWNobj17dGV4dDppfTtpZihhPT1udWxsKWguZGVzY3I9e3RleHQ6IiJ9O2Vsc2UgaWYodHlwZW9mIGE9PSJvYmplY3QiKXtsZXRbZCxwXT1PYmplY3QuZW50cmllcyhhKVswXTtoW2RdPXt0ZXh0OnB9fWVsc2UgaC5kZXNjcj17dGV4dDphfTtpZih0eXBlb2Ygcz09Im9iamVjdCIpe2xldFtkLHBdPU9iamVjdC5lbnRyaWVzKHMpWzBdO2hbZF09cH1lbHNlIGguc3ByaXRlPXM7aWYodHlwZW9mIGw9PSJvYmplY3QiKXtsZXRbZCxwXT1PYmplY3QuZW50cmllcyhsKVswXTtoW2RdPXB9ZWxzZSBoLnRhZ3M9bDtpZih0eXBlb2YgdT09Im9iamVjdCIpe2xldFtkLHBdPU9iamVjdC5lbnRyaWVzKHUpWzBdO2hbZF09cH1lbHNlIGgubGluaz11O2gud3JhcD1UaCgpfSwiYWRkUmVsIiksZDNlPW8oZnVuY3Rpb24odCxlLHIsbixpLGEscyl7aWYoZT09PW51bGx8fHI9PT1udWxsKXJldHVybjtsZXQgbD17fSx1PWJsLmZpbmQoaD0+aC5hbGlhcz09PWUpO2lmKHUmJmU9PT11LmFsaWFzP2w9dToobC5hbGlhcz1lLGJsLnB1c2gobCkpLHI9PW51bGw/bC5sYWJlbD17dGV4dDoiIn06bC5sYWJlbD17dGV4dDpyfSxuPT1udWxsKWwuZGVzY3I9e3RleHQ6IiJ9O2Vsc2UgaWYodHlwZW9mIG49PSJvYmplY3QiKXtsZXRbaCxmXT1PYmplY3QuZW50cmllcyhuKVswXTtsW2hdPXt0ZXh0OmZ9fWVsc2UgbC5kZXNjcj17dGV4dDpufTtpZih0eXBlb2YgaT09Im9iamVjdCIpe2xldFtoLGZdPU9iamVjdC5lbnRyaWVzKGkpWzBdO2xbaF09Zn1lbHNlIGwuc3ByaXRlPWk7aWYodHlwZW9mIGE9PSJvYmplY3QiKXtsZXRbaCxmXT1PYmplY3QuZW50cmllcyhhKVswXTtsW2hdPWZ9ZWxzZSBsLnRhZ3M9YTtpZih0eXBlb2Ygcz09Im9iamVjdCIpe2xldFtoLGZdPU9iamVjdC5lbnRyaWVzKHMpWzBdO2xbaF09Zn1lbHNlIGwubGluaz1zO2wudHlwZUM0U2hhcGU9e3RleHQ6dH0sbC5wYXJlbnRCb3VuZGFyeT10cyxsLndyYXA9VGgoKX0sImFkZFBlcnNvbk9yU3lzdGVtIikscDNlPW8oZnVuY3Rpb24odCxlLHIsbixpLGEscyxsKXtpZihlPT09bnVsbHx8cj09PW51bGwpcmV0dXJuO2xldCB1PXt9LGg9YmwuZmluZChmPT5mLmFsaWFzPT09ZSk7aWYoaCYmZT09PWguYWxpYXM/dT1oOih1LmFsaWFzPWUsYmwucHVzaCh1KSkscj09bnVsbD91LmxhYmVsPXt0ZXh0OiIifTp1LmxhYmVsPXt0ZXh0OnJ9LG49PW51bGwpdS50ZWNobj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2Ygbj09Im9iamVjdCIpe2xldFtmLGRdPU9iamVjdC5lbnRyaWVzKG4pWzBdO3VbZl09e3RleHQ6ZH19ZWxzZSB1LnRlY2huPXt0ZXh0Om59O2lmKGk9PW51bGwpdS5kZXNjcj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2YgaT09Im9iamVjdCIpe2xldFtmLGRdPU9iamVjdC5lbnRyaWVzKGkpWzBdO3VbZl09e3RleHQ6ZH19ZWxzZSB1LmRlc2NyPXt0ZXh0Oml9O2lmKHR5cGVvZiBhPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMoYSlbMF07dVtmXT1kfWVsc2UgdS5zcHJpdGU9YTtpZih0eXBlb2Ygcz09Im9iamVjdCIpe2xldFtmLGRdPU9iamVjdC5lbnRyaWVzKHMpWzBdO3VbZl09ZH1lbHNlIHUudGFncz1zO2lmKHR5cGVvZiBsPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMobClbMF07dVtmXT1kfWVsc2UgdS5saW5rPWw7dS53cmFwPVRoKCksdS50eXBlQzRTaGFwZT17dGV4dDp0fSx1LnBhcmVudEJvdW5kYXJ5PXRzfSwiYWRkQ29udGFpbmVyIiksbTNlPW8oZnVuY3Rpb24odCxlLHIsbixpLGEscyxsKXtpZihlPT09bnVsbHx8cj09PW51bGwpcmV0dXJuO2xldCB1PXt9LGg9YmwuZmluZChmPT5mLmFsaWFzPT09ZSk7aWYoaCYmZT09PWguYWxpYXM/dT1oOih1LmFsaWFzPWUsYmwucHVzaCh1KSkscj09bnVsbD91LmxhYmVsPXt0ZXh0OiIifTp1LmxhYmVsPXt0ZXh0OnJ9LG49PW51bGwpdS50ZWNobj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2Ygbj09Im9iamVjdCIpe2xldFtmLGRdPU9iamVjdC5lbnRyaWVzKG4pWzBdO3VbZl09e3RleHQ6ZH19ZWxzZSB1LnRlY2huPXt0ZXh0Om59O2lmKGk9PW51bGwpdS5kZXNjcj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2YgaT09Im9iamVjdCIpe2xldFtmLGRdPU9iamVjdC5lbnRyaWVzKGkpWzBdO3VbZl09e3RleHQ6ZH19ZWxzZSB1LmRlc2NyPXt0ZXh0Oml9O2lmKHR5cGVvZiBhPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMoYSlbMF07dVtmXT1kfWVsc2UgdS5zcHJpdGU9YTtpZih0eXBlb2Ygcz09Im9iamVjdCIpe2xldFtmLGRdPU9iamVjdC5lbnRyaWVzKHMpWzBdO3VbZl09ZH1lbHNlIHUudGFncz1zO2lmKHR5cGVvZiBsPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMobClbMF07dVtmXT1kfWVsc2UgdS5saW5rPWw7dS53cmFwPVRoKCksdS50eXBlQzRTaGFwZT17dGV4dDp0fSx1LnBhcmVudEJvdW5kYXJ5PXRzfSwiYWRkQ29tcG9uZW50IiksZzNlPW8oZnVuY3Rpb24odCxlLHIsbixpKXtpZih0PT09bnVsbHx8ZT09PW51bGwpcmV0dXJuO2xldCBhPXt9LHM9ZGMuZmluZChsPT5sLmFsaWFzPT09dCk7aWYocyYmdD09PXMuYWxpYXM/YT1zOihhLmFsaWFzPXQsZGMucHVzaChhKSksZT09bnVsbD9hLmxhYmVsPXt0ZXh0OiIifTphLmxhYmVsPXt0ZXh0OmV9LHI9PW51bGwpYS50eXBlPXt0ZXh0OiJzeXN0ZW0ifTtlbHNlIGlmKHR5cGVvZiByPT0ib2JqZWN0Iil7bGV0W2wsdV09T2JqZWN0LmVudHJpZXMocilbMF07YVtsXT17dGV4dDp1fX1lbHNlIGEudHlwZT17dGV4dDpyfTtpZih0eXBlb2Ygbj09Im9iamVjdCIpe2xldFtsLHVdPU9iamVjdC5lbnRyaWVzKG4pWzBdO2FbbF09dX1lbHNlIGEudGFncz1uO2lmKHR5cGVvZiBpPT0ib2JqZWN0Iil7bGV0W2wsdV09T2JqZWN0LmVudHJpZXMoaSlbMF07YVtsXT11fWVsc2UgYS5saW5rPWk7YS5wYXJlbnRCb3VuZGFyeT10cyxhLndyYXA9VGgoKSx4bD10cyx0cz10LHdoLnB1c2goeGwpfSwiYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeSIpLHkzZT1vKGZ1bmN0aW9uKHQsZSxyLG4saSl7aWYodD09PW51bGx8fGU9PT1udWxsKXJldHVybjtsZXQgYT17fSxzPWRjLmZpbmQobD0+bC5hbGlhcz09PXQpO2lmKHMmJnQ9PT1zLmFsaWFzP2E9czooYS5hbGlhcz10LGRjLnB1c2goYSkpLGU9PW51bGw/YS5sYWJlbD17dGV4dDoiIn06YS5sYWJlbD17dGV4dDplfSxyPT1udWxsKWEudHlwZT17dGV4dDoiY29udGFpbmVyIn07ZWxzZSBpZih0eXBlb2Ygcj09Im9iamVjdCIpe2xldFtsLHVdPU9iamVjdC5lbnRyaWVzKHIpWzBdO2FbbF09e3RleHQ6dX19ZWxzZSBhLnR5cGU9e3RleHQ6cn07aWYodHlwZW9mIG49PSJvYmplY3QiKXtsZXRbbCx1XT1PYmplY3QuZW50cmllcyhuKVswXTthW2xdPXV9ZWxzZSBhLnRhZ3M9bjtpZih0eXBlb2YgaT09Im9iamVjdCIpe2xldFtsLHVdPU9iamVjdC5lbnRyaWVzKGkpWzBdO2FbbF09dX1lbHNlIGEubGluaz1pO2EucGFyZW50Qm91bmRhcnk9dHMsYS53cmFwPVRoKCkseGw9dHMsdHM9dCx3aC5wdXNoKHhsKX0sImFkZENvbnRhaW5lckJvdW5kYXJ5IiksdjNlPW8oZnVuY3Rpb24odCxlLHIsbixpLGEscyxsKXtpZihlPT09bnVsbHx8cj09PW51bGwpcmV0dXJuO2xldCB1PXt9LGg9ZGMuZmluZChmPT5mLmFsaWFzPT09ZSk7aWYoaCYmZT09PWguYWxpYXM/dT1oOih1LmFsaWFzPWUsZGMucHVzaCh1KSkscj09bnVsbD91LmxhYmVsPXt0ZXh0OiIifTp1LmxhYmVsPXt0ZXh0OnJ9LG49PW51bGwpdS50eXBlPXt0ZXh0OiJub2RlIn07ZWxzZSBpZih0eXBlb2Ygbj09Im9iamVjdCIpe2xldFtmLGRdPU9iamVjdC5lbnRyaWVzKG4pWzBdO3VbZl09e3RleHQ6ZH19ZWxzZSB1LnR5cGU9e3RleHQ6bn07aWYoaT09bnVsbCl1LmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBpPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMoaSlbMF07dVtmXT17dGV4dDpkfX1lbHNlIHUuZGVzY3I9e3RleHQ6aX07aWYodHlwZW9mIHM9PSJvYmplY3QiKXtsZXRbZixkXT1PYmplY3QuZW50cmllcyhzKVswXTt1W2ZdPWR9ZWxzZSB1LnRhZ3M9cztpZih0eXBlb2YgbD09Im9iamVjdCIpe2xldFtmLGRdPU9iamVjdC5lbnRyaWVzKGwpWzBdO3VbZl09ZH1lbHNlIHUubGluaz1sO3Uubm9kZVR5cGU9dCx1LnBhcmVudEJvdW5kYXJ5PXRzLHUud3JhcD1UaCgpLHhsPXRzLHRzPWUsd2gucHVzaCh4bCl9LCJhZGREZXBsb3ltZW50Tm9kZSIpLHgzZT1vKGZ1bmN0aW9uKCl7dHM9eGwsd2gucG9wKCkseGw9d2gucG9wKCksd2gucHVzaCh4bCl9LCJwb3BCb3VuZGFyeVBhcnNlU3RhY2siKSxiM2U9byhmdW5jdGlvbih0LGUscixuLGksYSxzLGwsdSxoLGYpe2xldCBkPWJsLmZpbmQocD0+cC5hbGlhcz09PWUpO2lmKCEoZD09PXZvaWQgMCYmKGQ9ZGMuZmluZChwPT5wLmFsaWFzPT09ZSksZD09PXZvaWQgMCkpKXtpZihyIT1udWxsKWlmKHR5cGVvZiByPT0ib2JqZWN0Iil7bGV0W3AsbV09T2JqZWN0LmVudHJpZXMocilbMF07ZFtwXT1tfWVsc2UgZC5iZ0NvbG9yPXI7aWYobiE9bnVsbClpZih0eXBlb2Ygbj09Im9iamVjdCIpe2xldFtwLG1dPU9iamVjdC5lbnRyaWVzKG4pWzBdO2RbcF09bX1lbHNlIGQuZm9udENvbG9yPW47aWYoaSE9bnVsbClpZih0eXBlb2YgaT09Im9iamVjdCIpe2xldFtwLG1dPU9iamVjdC5lbnRyaWVzKGkpWzBdO2RbcF09bX1lbHNlIGQuYm9yZGVyQ29sb3I9aTtpZihhIT1udWxsKWlmKHR5cGVvZiBhPT0ib2JqZWN0Iil7bGV0W3AsbV09T2JqZWN0LmVudHJpZXMoYSlbMF07ZFtwXT1tfWVsc2UgZC5zaGFkb3dpbmc9YTtpZihzIT1udWxsKWlmKHR5cGVvZiBzPT0ib2JqZWN0Iil7bGV0W3AsbV09T2JqZWN0LmVudHJpZXMocylbMF07ZFtwXT1tfWVsc2UgZC5zaGFwZT1zO2lmKGwhPW51bGwpaWYodHlwZW9mIGw9PSJvYmplY3QiKXtsZXRbcCxtXT1PYmplY3QuZW50cmllcyhsKVswXTtkW3BdPW19ZWxzZSBkLnNwcml0ZT1sO2lmKHUhPW51bGwpaWYodHlwZW9mIHU9PSJvYmplY3QiKXtsZXRbcCxtXT1PYmplY3QuZW50cmllcyh1KVswXTtkW3BdPW19ZWxzZSBkLnRlY2huPXU7aWYoaCE9bnVsbClpZih0eXBlb2YgaD09Im9iamVjdCIpe2xldFtwLG1dPU9iamVjdC5lbnRyaWVzKGgpWzBdO2RbcF09bX1lbHNlIGQubGVnZW5kVGV4dD1oO2lmKGYhPW51bGwpaWYodHlwZW9mIGY9PSJvYmplY3QiKXtsZXRbcCxtXT1PYmplY3QuZW50cmllcyhmKVswXTtkW3BdPW19ZWxzZSBkLmxlZ2VuZFNwcml0ZT1mfX0sInVwZGF0ZUVsU3R5bGUiKSx3M2U9byhmdW5jdGlvbih0LGUscixuLGksYSxzKXtsZXQgbD13eS5maW5kKHU9PnUuZnJvbT09PWUmJnUudG89PT1yKTtpZihsIT09dm9pZCAwKXtpZihuIT1udWxsKWlmKHR5cGVvZiBuPT0ib2JqZWN0Iil7bGV0W3UsaF09T2JqZWN0LmVudHJpZXMobilbMF07bFt1XT1ofWVsc2UgbC50ZXh0Q29sb3I9bjtpZihpIT1udWxsKWlmKHR5cGVvZiBpPT0ib2JqZWN0Iil7bGV0W3UsaF09T2JqZWN0LmVudHJpZXMoaSlbMF07bFt1XT1ofWVsc2UgbC5saW5lQ29sb3I9aTtpZihhIT1udWxsKWlmKHR5cGVvZiBhPT0ib2JqZWN0Iil7bGV0W3UsaF09T2JqZWN0LmVudHJpZXMoYSlbMF07bFt1XT1wYXJzZUludChoKX1lbHNlIGwub2Zmc2V0WD1wYXJzZUludChhKTtpZihzIT1udWxsKWlmKHR5cGVvZiBzPT0ib2JqZWN0Iil7bGV0W3UsaF09T2JqZWN0LmVudHJpZXMocylbMF07bFt1XT1wYXJzZUludChoKX1lbHNlIGwub2Zmc2V0WT1wYXJzZUludChzKX19LCJ1cGRhdGVSZWxTdHlsZSIpLFQzZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1GNCxpPXo0O2lmKHR5cGVvZiBlPT0ib2JqZWN0Iil7bGV0IGE9T2JqZWN0LnZhbHVlcyhlKVswXTtuPXBhcnNlSW50KGEpfWVsc2Ugbj1wYXJzZUludChlKTtpZih0eXBlb2Ygcj09Im9iamVjdCIpe2xldCBhPU9iamVjdC52YWx1ZXMocilbMF07aT1wYXJzZUludChhKX1lbHNlIGk9cGFyc2VJbnQocik7bj49MSYmKEY0PW4pLGk+PTEmJih6ND1pKX0sInVwZGF0ZUxheW91dENvbmZpZyIpLGszZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIEY0fSwiZ2V0QzRTaGFwZUluUm93IiksRTNlPW8oZnVuY3Rpb24oKXtyZXR1cm4gejR9LCJnZXRDNEJvdW5kYXJ5SW5Sb3ciKSxTM2U9byhmdW5jdGlvbigpe3JldHVybiB0c30sImdldEN1cnJlbnRCb3VuZGFyeVBhcnNlIiksQzNlPW8oZnVuY3Rpb24oKXtyZXR1cm4geGx9LCJnZXRQYXJlbnRCb3VuZGFyeVBhcnNlIiksRiQ9byhmdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD9ibDpibC5maWx0ZXIoZT0+ZS5wYXJlbnRCb3VuZGFyeT09PXQpfSwiZ2V0QzRTaGFwZUFycmF5IiksQTNlPW8oZnVuY3Rpb24odCl7cmV0dXJuIGJsLmZpbmQoZT0+ZS5hbGlhcz09PXQpfSwiZ2V0QzRTaGFwZSIpLF8zZT1vKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qua2V5cyhGJCh0KSl9LCJnZXRDNFNoYXBlS2V5cyIpLHokPW8oZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/ZGM6ZGMuZmlsdGVyKGU9PmUucGFyZW50Qm91bmRhcnk9PT10KX0sImdldEJvdW5kYXJpZXMiKSxMM2U9eiQsRDNlPW8oZnVuY3Rpb24oKXtyZXR1cm4gd3l9LCJnZXRSZWxzIiksTjNlPW8oZnVuY3Rpb24oKXtyZXR1cm4gbDd9LCJnZXRUaXRsZSIpLFIzZT1vKGZ1bmN0aW9uKHQpe2M3PXR9LCJzZXRXcmFwIiksVGg9byhmdW5jdGlvbigpe3JldHVybiBjN30sImF1dG9XcmFwIiksTTNlPW8oZnVuY3Rpb24oKXtibD1bXSxkYz1be2FsaWFzOiJnbG9iYWwiLGxhYmVsOnt0ZXh0OiJnbG9iYWwifSx0eXBlOnt0ZXh0OiJnbG9iYWwifSx0YWdzOm51bGwsbGluazpudWxsLHBhcmVudEJvdW5kYXJ5OiIifV0seGw9IiIsdHM9Imdsb2JhbCIsd2g9WyIiXSx3eT1bXSx3aD1bIiJdLGw3PSIiLGM3PSExLEY0PTQsejQ9Mn0sImNsZWFyIiksSTNlPXtTT0xJRDowLERPVFRFRDoxLE5PVEU6MixTT0xJRF9DUk9TUzozLERPVFRFRF9DUk9TUzo0LFNPTElEX09QRU46NSxET1RURURfT1BFTjo2LExPT1BfU1RBUlQ6MTAsTE9PUF9FTkQ6MTEsQUxUX1NUQVJUOjEyLEFMVF9FTFNFOjEzLEFMVF9FTkQ6MTQsT1BUX1NUQVJUOjE1LE9QVF9FTkQ6MTYsQUNUSVZFX1NUQVJUOjE3LEFDVElWRV9FTkQ6MTgsUEFSX1NUQVJUOjE5LFBBUl9BTkQ6MjAsUEFSX0VORDoyMSxSRUNUX1NUQVJUOjIyLFJFQ1RfRU5EOjIzLFNPTElEX1BPSU5UOjI0LERPVFRFRF9QT0lOVDoyNX0sTzNlPXtGSUxMRUQ6MCxPUEVOOjF9LFAzZT17TEVGVE9GOjAsUklHSFRPRjoxLE9WRVI6Mn0sQjNlPW8oZnVuY3Rpb24odCl7bDc9a3IodCxwZSgpKX0sInNldFRpdGxlIiksVHk9e2FkZFBlcnNvbk9yU3lzdGVtOmQzZSxhZGRQZXJzb25PclN5c3RlbUJvdW5kYXJ5OmczZSxhZGRDb250YWluZXI6cDNlLGFkZENvbnRhaW5lckJvdW5kYXJ5OnkzZSxhZGRDb21wb25lbnQ6bTNlLGFkZERlcGxveW1lbnROb2RlOnYzZSxwb3BCb3VuZGFyeVBhcnNlU3RhY2s6eDNlLGFkZFJlbDpmM2UsdXBkYXRlRWxTdHlsZTpiM2UsdXBkYXRlUmVsU3R5bGU6dzNlLHVwZGF0ZUxheW91dENvbmZpZzpUM2UsYXV0b1dyYXA6VGgsc2V0V3JhcDpSM2UsZ2V0QzRTaGFwZUFycmF5OkYkLGdldEM0U2hhcGU6QTNlLGdldEM0U2hhcGVLZXlzOl8zZSxnZXRCb3VuZGFyaWVzOnokLGdldEJvdW5kYXJ5czpMM2UsZ2V0Q3VycmVudEJvdW5kYXJ5UGFyc2U6UzNlLGdldFBhcmVudEJvdW5kYXJ5UGFyc2U6QzNlLGdldFJlbHM6RDNlLGdldFRpdGxlOk4zZSxnZXRDNFR5cGU6dTNlLGdldEM0U2hhcGVJblJvdzprM2UsZ2V0QzRCb3VuZGFyeUluUm93OkUzZSxzZXRBY2NUaXRsZTpNcixnZXRBY2NUaXRsZTpCcixnZXRBY2NEZXNjcmlwdGlvbjp6cixzZXRBY2NEZXNjcmlwdGlvbjpGcixnZXRDb25maWc6bygoKT0+cGUoKS5jNCwiZ2V0Q29uZmlnIiksY2xlYXI6TTNlLExJTkVUWVBFOkkzZSxBUlJPV1RZUEU6TzNlLFBMQUNFTUVOVDpQM2Usc2V0VGl0bGU6QjNlLHNldEM0VHlwZTpoM2V9fSk7ZnVuY3Rpb24gbGQodCxlKXtyZXR1cm4gdD09bnVsbHx8ZT09bnVsbD9OYU46dDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59dmFyIGg3PU0oKCk9PnsidXNlIHN0cmljdCI7byhsZCwiYXNjZW5kaW5nIil9KTtmdW5jdGlvbiBmNyh0LGUpe3JldHVybiB0PT1udWxsfHxlPT1udWxsP05hTjplPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn12YXIgRyQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKGY3LCJkZXNjZW5kaW5nIil9KTtmdW5jdGlvbiBjZCh0KXtsZXQgZSxyLG47dC5sZW5ndGghPT0yPyhlPWxkLHI9bygobCx1KT0+bGQodChsKSx1KSwiY29tcGFyZTIiKSxuPW8oKGwsdSk9PnQobCktdSwiZGVsdGEiKSk6KGU9dD09PWxkfHx0PT09Zjc/dDpGM2Uscj10LG49dCk7ZnVuY3Rpb24gaShsLHUsaD0wLGY9bC5sZW5ndGgpe2lmKGg8Zil7aWYoZSh1LHUpIT09MClyZXR1cm4gZjtkb3tsZXQgZD1oK2Y+Pj4xO3IobFtkXSx1KTwwP2g9ZCsxOmY9ZH13aGlsZShoPGYpfXJldHVybiBofW8oaSwibGVmdCIpO2Z1bmN0aW9uIGEobCx1LGg9MCxmPWwubGVuZ3RoKXtpZihoPGYpe2lmKGUodSx1KSE9PTApcmV0dXJuIGY7ZG97bGV0IGQ9aCtmPj4+MTtyKGxbZF0sdSk8PTA/aD1kKzE6Zj1kfXdoaWxlKGg8Zil9cmV0dXJuIGh9byhhLCJyaWdodCIpO2Z1bmN0aW9uIHMobCx1LGg9MCxmPWwubGVuZ3RoKXtsZXQgZD1pKGwsdSxoLGYtMSk7cmV0dXJuIGQ+aCYmbihsW2QtMV0sdSk+LW4obFtkXSx1KT9kLTE6ZH1yZXR1cm4gbyhzLCJjZW50ZXIiKSx7bGVmdDppLGNlbnRlcjpzLHJpZ2h0OmF9fWZ1bmN0aW9uIEYzZSgpe3JldHVybiAwfXZhciBkNz1NKCgpPT57InVzZSBzdHJpY3QiO2g3KCk7RyQoKTtvKGNkLCJiaXNlY3RvciIpO28oRjNlLCJ6ZXJvIil9KTtmdW5jdGlvbiBwNyh0KXtyZXR1cm4gdD09PW51bGw/TmFOOit0fXZhciAkJD1NKCgpPT57InVzZSBzdHJpY3QiO28ocDcsIm51bWJlciIpfSk7dmFyIFYkLFUkLHozZSxHM2UsbTcsSCQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtoNygpO2Q3KCk7JCQoKTtWJD1jZChsZCksVSQ9ViQucmlnaHQsejNlPVYkLmxlZnQsRzNlPWNkKHA3KS5jZW50ZXIsbTc9VSR9KTtmdW5jdGlvbiBXJCh7X2ludGVybjp0LF9rZXk6ZX0scil7bGV0IG49ZShyKTtyZXR1cm4gdC5oYXMobik/dC5nZXQobik6cn1mdW5jdGlvbiAkM2Uoe19pbnRlcm46dCxfa2V5OmV9LHIpe2xldCBuPWUocik7cmV0dXJuIHQuaGFzKG4pP3QuZ2V0KG4pOih0LnNldChuLHIpLHIpfWZ1bmN0aW9uIFYzZSh7X2ludGVybjp0LF9rZXk6ZX0scil7bGV0IG49ZShyKTtyZXR1cm4gdC5oYXMobikmJihyPXQuZ2V0KG4pLHQuZGVsZXRlKG4pKSxyfWZ1bmN0aW9uIFUzZSh0KXtyZXR1cm4gdCE9PW51bGwmJnR5cGVvZiB0PT0ib2JqZWN0Ij90LnZhbHVlT2YoKTp0fXZhciBfcCxZJD1NKCgpPT57InVzZSBzdHJpY3QiO19wPWNsYXNzIGV4dGVuZHMgTWFwe3N0YXRpY3tvKHRoaXMsIkludGVybk1hcCIpfWNvbnN0cnVjdG9yKGUscj1VM2Upe2lmKHN1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7X2ludGVybjp7dmFsdWU6bmV3IE1hcH0sX2tleTp7dmFsdWU6cn19KSxlIT1udWxsKWZvcihsZXRbbixpXW9mIGUpdGhpcy5zZXQobixpKX1nZXQoZSl7cmV0dXJuIHN1cGVyLmdldChXJCh0aGlzLGUpKX1oYXMoZSl7cmV0dXJuIHN1cGVyLmhhcyhXJCh0aGlzLGUpKX1zZXQoZSxyKXtyZXR1cm4gc3VwZXIuc2V0KCQzZSh0aGlzLGUpLHIpfWRlbGV0ZShlKXtyZXR1cm4gc3VwZXIuZGVsZXRlKFYzZSh0aGlzLGUpKX19O28oVyQsImludGVybl9nZXQiKTtvKCQzZSwiaW50ZXJuX3NldCIpO28oVjNlLCJpbnRlcm5fZGVsZXRlIik7byhVM2UsImtleW9mIil9KTtmdW5jdGlvbiBHNCh0LGUscil7bGV0IG49KGUtdCkvTWF0aC5tYXgoMCxyKSxpPU1hdGguZmxvb3IoTWF0aC5sb2cxMChuKSksYT1uL01hdGgucG93KDEwLGkpLHM9YT49SDNlPzEwOmE+PVczZT81OmE+PVkzZT8yOjEsbCx1LGg7cmV0dXJuIGk8MD8oaD1NYXRoLnBvdygxMCwtaSkvcyxsPU1hdGgucm91bmQodCpoKSx1PU1hdGgucm91bmQoZSpoKSxsL2g8dCYmKytsLHUvaD5lJiYtLXUsaD0taCk6KGg9TWF0aC5wb3coMTAsaSkqcyxsPU1hdGgucm91bmQodC9oKSx1PU1hdGgucm91bmQoZS9oKSxsKmg8dCYmKytsLHUqaD5lJiYtLXUpLHU8bCYmLjU8PXImJnI8Mj9HNCh0LGUscioyKTpbbCx1LGhdfWZ1bmN0aW9uICQ0KHQsZSxyKXtpZihlPStlLHQ9K3Qscj0rciwhKHI+MCkpcmV0dXJuW107aWYodD09PWUpcmV0dXJuW3RdO2xldCBuPWU8dCxbaSxhLHNdPW4/RzQoZSx0LHIpOkc0KHQsZSxyKTtpZighKGE+PWkpKXJldHVybltdO2xldCBsPWEtaSsxLHU9bmV3IEFycmF5KGwpO2lmKG4paWYoczwwKWZvcihsZXQgaD0wO2g8bDsrK2gpdVtoXT0oYS1oKS8tcztlbHNlIGZvcihsZXQgaD0wO2g8bDsrK2gpdVtoXT0oYS1oKSpzO2Vsc2UgaWYoczwwKWZvcihsZXQgaD0wO2g8bDsrK2gpdVtoXT0oaStoKS8tcztlbHNlIGZvcihsZXQgaD0wO2g8bDsrK2gpdVtoXT0oaStoKSpzO3JldHVybiB1fWZ1bmN0aW9uIGt5KHQsZSxyKXtyZXR1cm4gZT0rZSx0PSt0LHI9K3IsRzQodCxlLHIpWzJdfWZ1bmN0aW9uIExwKHQsZSxyKXtlPStlLHQ9K3Qscj0rcjtsZXQgbj1lPHQsaT1uP2t5KGUsdCxyKTpreSh0LGUscik7cmV0dXJuKG4/LTE6MSkqKGk8MD8xLy1pOmkpfXZhciBIM2UsVzNlLFkzZSxxJD1NKCgpPT57InVzZSBzdHJpY3QiO0gzZT1NYXRoLnNxcnQoNTApLFczZT1NYXRoLnNxcnQoMTApLFkzZT1NYXRoLnNxcnQoMik7byhHNCwidGlja1NwZWMiKTtvKCQ0LCJ0aWNrcyIpO28oa3ksInRpY2tJbmNyZW1lbnQiKTtvKExwLCJ0aWNrU3RlcCIpfSk7ZnVuY3Rpb24gVjQodCxlKXtsZXQgcjtpZihlPT09dm9pZCAwKWZvcihsZXQgbiBvZiB0KW4hPW51bGwmJihyPG58fHI9PT12b2lkIDAmJm4+PW4pJiYocj1uKTtlbHNle2xldCBuPS0xO2ZvcihsZXQgaSBvZiB0KShpPWUoaSwrK24sdCkpIT1udWxsJiYocjxpfHxyPT09dm9pZCAwJiZpPj1pKSYmKHI9aSl9cmV0dXJuIHJ9dmFyIFgkPU0oKCk9PnsidXNlIHN0cmljdCI7byhWNCwibWF4Iil9KTtmdW5jdGlvbiBVNCh0LGUpe2xldCByO2lmKGU9PT12b2lkIDApZm9yKGxldCBuIG9mIHQpbiE9bnVsbCYmKHI+bnx8cj09PXZvaWQgMCYmbj49bikmJihyPW4pO2Vsc2V7bGV0IG49LTE7Zm9yKGxldCBpIG9mIHQpKGk9ZShpLCsrbix0KSkhPW51bGwmJihyPml8fHI9PT12b2lkIDAmJmk+PWkpJiYocj1pKX1yZXR1cm4gcn12YXIgaiQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKFU0LCJtaW4iKX0pO2Z1bmN0aW9uIEg0KHQsZSxyKXt0PSt0LGU9K2Uscj0oaT1hcmd1bWVudHMubGVuZ3RoKTwyPyhlPXQsdD0wLDEpOmk8Mz8xOityO2Zvcih2YXIgbj0tMSxpPU1hdGgubWF4KDAsTWF0aC5jZWlsKChlLXQpL3IpKXwwLGE9bmV3IEFycmF5KGkpOysrbjxpOylhW25dPXQrbipyO3JldHVybiBhfXZhciBLJD1NKCgpPT57InVzZSBzdHJpY3QiO28oSDQsInJhbmdlIil9KTt2YXIga2g9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIJCgpO2Q3KCk7WCQoKTtqJCgpO0skKCk7cSQoKTtZJCgpfSk7ZnVuY3Rpb24gZzcodCl7cmV0dXJuIHR9dmFyIFEkPU0oKCk9PnsidXNlIHN0cmljdCI7byhnNywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gcTNlKHQpe3JldHVybiJ0cmFuc2xhdGUoIit0KyIsMCkifWZ1bmN0aW9uIFgzZSh0KXtyZXR1cm4idHJhbnNsYXRlKDAsIit0KyIpIn1mdW5jdGlvbiBqM2UodCl7cmV0dXJuIGU9Pit0KGUpfWZ1bmN0aW9uIEszZSh0LGUpe3JldHVybiBlPU1hdGgubWF4KDAsdC5iYW5kd2lkdGgoKS1lKjIpLzIsdC5yb3VuZCgpJiYoZT1NYXRoLnJvdW5kKGUpKSxyPT4rdChyKStlfWZ1bmN0aW9uIFEzZSgpe3JldHVybiF0aGlzLl9fYXhpc31mdW5jdGlvbiBKJCh0LGUpe3ZhciByPVtdLG49bnVsbCxpPW51bGwsYT02LHM9NixsPTMsdT10eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmRldmljZVBpeGVsUmF0aW8+MT8wOi41LGg9dD09PVk0fHx0PT09VzQ/LTE6MSxmPXQ9PT1XNHx8dD09PXk3PyJ4IjoieSIsZD10PT09WTR8fHQ9PT12Nz9xM2U6WDNlO2Z1bmN0aW9uIHAobSl7dmFyIGc9bj8/KGUudGlja3M/ZS50aWNrcy5hcHBseShlLHIpOmUuZG9tYWluKCkpLHk9aT8/KGUudGlja0Zvcm1hdD9lLnRpY2tGb3JtYXQuYXBwbHkoZSxyKTpnNyksdj1NYXRoLm1heChhLDApK2wseD1lLnJhbmdlKCksYj0reFswXSt1LHc9K3hbeC5sZW5ndGgtMV0rdSxfPShlLmJhbmR3aWR0aD9LM2U6ajNlKShlLmNvcHkoKSx1KSxUPW0uc2VsZWN0aW9uP20uc2VsZWN0aW9uKCk6bSxFPVQuc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbbnVsbF0pLEw9VC5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShnLGUpLm9yZGVyKCksUz1MLmV4aXQoKSxBPUwuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRpY2siKSxJPUwuc2VsZWN0KCJsaW5lIiksRD1MLnNlbGVjdCgidGV4dCIpO0U9RS5tZXJnZShFLmVudGVyKCkuaW5zZXJ0KCJwYXRoIiwiLnRpY2siKS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLmF0dHIoInN0cm9rZSIsImN1cnJlbnRDb2xvciIpKSxMPUwubWVyZ2UoQSksST1JLm1lcmdlKEEuYXBwZW5kKCJsaW5lIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikuYXR0cihmKyIyIixoKmEpKSxEPUQubWVyZ2UoQS5hcHBlbmQoInRleHQiKS5hdHRyKCJmaWxsIiwiY3VycmVudENvbG9yIikuYXR0cihmLGgqdikuYXR0cigiZHkiLHQ9PT1ZND8iMGVtIjp0PT09djc/IjAuNzFlbSI6IjAuMzJlbSIpKSxtIT09VCYmKEU9RS50cmFuc2l0aW9uKG0pLEw9TC50cmFuc2l0aW9uKG0pLEk9SS50cmFuc2l0aW9uKG0pLEQ9RC50cmFuc2l0aW9uKG0pLFM9Uy50cmFuc2l0aW9uKG0pLmF0dHIoIm9wYWNpdHkiLFokKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGspe3JldHVybiBpc0Zpbml0ZShrPV8oaykpP2Qoayt1KTp0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil9KSxBLmF0dHIoIm9wYWNpdHkiLFokKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGspe3ZhciBSPXRoaXMucGFyZW50Tm9kZS5fX2F4aXM7cmV0dXJuIGQoKFImJmlzRmluaXRlKFI9UihrKSk/UjpfKGspKSt1KX0pKSxTLnJlbW92ZSgpLEUuYXR0cigiZCIsdD09PVc0fHx0PT09eTc/cz8iTSIraCpzKyIsIitiKyJIIit1KyJWIit3KyJIIitoKnM6Ik0iK3UrIiwiK2IrIlYiK3c6cz8iTSIrYisiLCIraCpzKyJWIit1KyJIIit3KyJWIitoKnM6Ik0iK2IrIiwiK3UrIkgiK3cpLEwuYXR0cigib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihrKXtyZXR1cm4gZChfKGspK3UpfSksSS5hdHRyKGYrIjIiLGgqYSksRC5hdHRyKGYsaCp2KS50ZXh0KHkpLFQuZmlsdGVyKFEzZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsdD09PXk3PyJzdGFydCI6dD09PVc0PyJlbmQiOiJtaWRkbGUiKSxULmVhY2goZnVuY3Rpb24oKXt0aGlzLl9fYXhpcz1ffSl9cmV0dXJuIG8ocCwiYXhpcyIpLHAuc2NhbGU9ZnVuY3Rpb24obSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bSxwKTplfSxwLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHI9QXJyYXkuZnJvbShhcmd1bWVudHMpLHB9LHAudGlja0FyZ3VtZW50cz1mdW5jdGlvbihtKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1tPT1udWxsP1tdOkFycmF5LmZyb20obSkscCk6ci5zbGljZSgpfSxwLnRpY2tWYWx1ZXM9ZnVuY3Rpb24obSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bT09bnVsbD9udWxsOkFycmF5LmZyb20obSkscCk6biYmbi5zbGljZSgpfSxwLnRpY2tGb3JtYXQ9ZnVuY3Rpb24obSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bSxwKTppfSxwLnRpY2tTaXplPWZ1bmN0aW9uKG0pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXM9K20scCk6YX0scC50aWNrU2l6ZUlubmVyPWZ1bmN0aW9uKG0pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSttLHApOmF9LHAudGlja1NpemVPdXRlcj1mdW5jdGlvbihtKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rbSxwKTpzfSxwLnRpY2tQYWRkaW5nPWZ1bmN0aW9uKG0pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSttLHApOmx9LHAub2Zmc2V0PWZ1bmN0aW9uKG0pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSttLHApOnV9LHB9ZnVuY3Rpb24geDcodCl7cmV0dXJuIEokKFk0LHQpfWZ1bmN0aW9uIGI3KHQpe3JldHVybiBKJCh2Nyx0KX12YXIgWTQseTcsdjcsVzQsWiQsZVY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtRJCgpO1k0PTEseTc9Mix2Nz0zLFc0PTQsWiQ9MWUtNjtvKHEzZSwidHJhbnNsYXRlWCIpO28oWDNlLCJ0cmFuc2xhdGVZIik7byhqM2UsIm51bWJlciIpO28oSzNlLCJjZW50ZXIiKTtvKFEzZSwiZW50ZXJpbmciKTtvKEokLCJheGlzIik7byh4NywiYXhpc1RvcCIpO28oYjcsImF4aXNCb3R0b20iKX0pO3ZhciB0Vj1NKCgpPT57InVzZSBzdHJpY3QiO2VWKCl9KTtmdW5jdGlvbiBuVigpe2Zvcih2YXIgdD0wLGU9YXJndW1lbnRzLmxlbmd0aCxyPXt9LG47dDxlOysrdCl7aWYoIShuPWFyZ3VtZW50c1t0XSsiIil8fG4gaW4gcnx8L1tccy5dLy50ZXN0KG4pKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK24pO3Jbbl09W119cmV0dXJuIG5ldyBxNChyKX1mdW5jdGlvbiBxNCh0KXt0aGlzLl89dH1mdW5jdGlvbiBKM2UodCxlKXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHIpe3ZhciBuPSIiLGk9ci5pbmRleE9mKCIuIik7aWYoaT49MCYmKG49ci5zbGljZShpKzEpLHI9ci5zbGljZSgwLGkpKSxyJiYhZS5oYXNPd25Qcm9wZXJ0eShyKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIityKTtyZXR1cm57dHlwZTpyLG5hbWU6bn19KX1mdW5jdGlvbiBlNWUodCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoLGk7cjxuOysrcilpZigoaT10W3JdKS5uYW1lPT09ZSlyZXR1cm4gaS52YWx1ZX1mdW5jdGlvbiByVih0LGUscil7Zm9yKHZhciBuPTAsaT10Lmxlbmd0aDtuPGk7KytuKWlmKHRbbl0ubmFtZT09PWUpe3Rbbl09WjNlLHQ9dC5zbGljZSgwLG4pLmNvbmNhdCh0LnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZ0LnB1c2goe25hbWU6ZSx2YWx1ZTpyfSksdH12YXIgWjNlLHc3LGlWPU0oKCk9PnsidXNlIHN0cmljdCI7WjNlPXt2YWx1ZTpvKCgpPT57fSwidmFsdWUiKX07byhuViwiZGlzcGF0Y2giKTtvKHE0LCJEaXNwYXRjaCIpO28oSjNlLCJwYXJzZVR5cGVuYW1lcyIpO3E0LnByb3RvdHlwZT1uVi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnE0LG9uOm8oZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl8sbj1KM2UodCsiIixyKSxpLGE9LTEscz1uLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KythPHM7KWlmKChpPSh0PW5bYV0pLnR5cGUpJiYoaT1lNWUocltpXSx0Lm5hbWUpKSlyZXR1cm4gaTtyZXR1cm59aWYoZSE9bnVsbCYmdHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK2UpO2Zvcig7KythPHM7KWlmKGk9KHQ9blthXSkudHlwZSlyW2ldPXJWKHJbaV0sdC5uYW1lLGUpO2Vsc2UgaWYoZT09bnVsbClmb3IoaSBpbiByKXJbaV09clYocltpXSx0Lm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9LCJvbiIpLGNvcHk6byhmdW5jdGlvbigpe3ZhciB0PXt9LGU9dGhpcy5fO2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXS5zbGljZSgpO3JldHVybiBuZXcgcTQodCl9LCJjb3B5IiksY2FsbDpvKGZ1bmN0aW9uKHQsZSl7aWYoKGk9YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgcj1uZXcgQXJyYXkoaSksbj0wLGksYTtuPGk7KytuKXJbbl09YXJndW1lbnRzW24rMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IoYT10aGlzLl9bdF0sbj0wLGk9YS5sZW5ndGg7bjxpOysrbilhW25dLnZhbHVlLmFwcGx5KGUscil9LCJjYWxsIiksYXBwbHk6byhmdW5jdGlvbih0LGUscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IodmFyIG49dGhpcy5fW3RdLGk9MCxhPW4ubGVuZ3RoO2k8YTsrK2kpbltpXS52YWx1ZS5hcHBseShlLHIpfSwiYXBwbHkiKX07byhlNWUsImdldCIpO28oclYsInNldCIpO3c3PW5WfSk7dmFyIFQ3PU0oKCk9PnsidXNlIHN0cmljdCI7aVYoKX0pO3ZhciBYNCxrNyxFNz1NKCgpPT57InVzZSBzdHJpY3QiO1g0PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixrNz17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6WDQseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifX0pO2Z1bmN0aW9uIHBjKHQpe3ZhciBlPXQrPSIiLHI9ZS5pbmRleE9mKCI6Iik7cmV0dXJuIHI+PTAmJihlPXQuc2xpY2UoMCxyKSkhPT0ieG1sbnMiJiYodD10LnNsaWNlKHIrMSkpLGs3Lmhhc093blByb3BlcnR5KGUpP3tzcGFjZTprN1tlXSxsb2NhbDp0fTp0fXZhciBqND1NKCgpPT57InVzZSBzdHJpY3QiO0U3KCk7byhwYywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gdDVlKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudCxyPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiByPT09WDQmJmUuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PVg0P2UuY3JlYXRlRWxlbWVudCh0KTplLmNyZWF0ZUVsZW1lbnROUyhyLHQpfX1mdW5jdGlvbiByNWUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gRXkodCl7dmFyIGU9cGModCk7cmV0dXJuKGUubG9jYWw/cjVlOnQ1ZSkoZSl9dmFyIFM3PU0oKCk9PnsidXNlIHN0cmljdCI7ajQoKTtFNygpO28odDVlLCJjcmVhdG9ySW5oZXJpdCIpO28ocjVlLCJjcmVhdG9yRml4ZWQiKTtvKEV5LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBuNWUoKXt9ZnVuY3Rpb24gRWgodCl7cmV0dXJuIHQ9PW51bGw/bjVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3Rvcih0KX19dmFyIEs0PU0oKCk9PnsidXNlIHN0cmljdCI7byhuNWUsIm5vbmUiKTtvKEVoLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBDNyh0KXt0eXBlb2YgdCE9ImZ1bmN0aW9uIiYmKHQ9RWgodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMscj1lLmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIGE9ZVtpXSxzPWEubGVuZ3RoLGw9bltpXT1uZXcgQXJyYXkocyksdSxoLGY9MDtmPHM7KytmKSh1PWFbZl0pJiYoaD10LmNhbGwodSx1Ll9fZGF0YV9fLGYsYSkpJiYoIl9fZGF0YV9fImluIHUmJihoLl9fZGF0YV9fPXUuX19kYXRhX18pLGxbZl09aCk7cmV0dXJuIG5ldyBzaShuLHRoaXMuX3BhcmVudHMpfXZhciBhVj1NKCgpPT57InVzZSBzdHJpY3QiO3dsKCk7SzQoKTtvKEM3LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBBNyh0KXtyZXR1cm4gdD09bnVsbD9bXTpBcnJheS5pc0FycmF5KHQpP3Q6QXJyYXkuZnJvbSh0KX12YXIgc1Y9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKEE3LCJhcnJheSIpfSk7ZnVuY3Rpb24gaTVlKCl7cmV0dXJuW119ZnVuY3Rpb24gRHAodCl7cmV0dXJuIHQ9PW51bGw/aTVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbCh0KX19dmFyIF83PU0oKCk9PnsidXNlIHN0cmljdCI7byhpNWUsImVtcHR5Iik7byhEcCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gYTVlKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBBNyh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIEw3KHQpe3R5cGVvZiB0PT0iZnVuY3Rpb24iP3Q9YTVlKHQpOnQ9RHAodCk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxyPWUubGVuZ3RoLG49W10saT1bXSxhPTA7YTxyOysrYSlmb3IodmFyIHM9ZVthXSxsPXMubGVuZ3RoLHUsaD0wO2g8bDsrK2gpKHU9c1toXSkmJihuLnB1c2godC5jYWxsKHUsdS5fX2RhdGFfXyxoLHMpKSxpLnB1c2godSkpO3JldHVybiBuZXcgc2kobixpKX12YXIgb1Y9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt3bCgpO3NWKCk7XzcoKTtvKGE1ZSwiYXJyYXlBbGwiKTtvKEw3LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBOcCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKHQpfX1mdW5jdGlvbiBRNCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUubWF0Y2hlcyh0KX19dmFyIFN5PU0oKCk9PnsidXNlIHN0cmljdCI7byhOcCwiZGVmYXVsdCIpO28oUTQsImNoaWxkTWF0Y2hlciIpfSk7ZnVuY3Rpb24gbzVlKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBzNWUuY2FsbCh0aGlzLmNoaWxkcmVuLHQpfX1mdW5jdGlvbiBsNWUoKXtyZXR1cm4gdGhpcy5maXJzdEVsZW1lbnRDaGlsZH1mdW5jdGlvbiBENyh0KXtyZXR1cm4gdGhpcy5zZWxlY3QodD09bnVsbD9sNWU6bzVlKHR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6UTQodCkpKX12YXIgczVlLGxWPU0oKCk9PnsidXNlIHN0cmljdCI7U3koKTtzNWU9QXJyYXkucHJvdG90eXBlLmZpbmQ7byhvNWUsImNoaWxkRmluZCIpO28obDVlLCJjaGlsZEZpcnN0Iik7byhENywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gdTVlKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5jaGlsZHJlbil9ZnVuY3Rpb24gaDVlKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBjNWUuY2FsbCh0aGlzLmNoaWxkcmVuLHQpfX1mdW5jdGlvbiBONyh0KXtyZXR1cm4gdGhpcy5zZWxlY3RBbGwodD09bnVsbD91NWU6aDVlKHR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6UTQodCkpKX12YXIgYzVlLGNWPU0oKCk9PnsidXNlIHN0cmljdCI7U3koKTtjNWU9QXJyYXkucHJvdG90eXBlLmZpbHRlcjtvKHU1ZSwiY2hpbGRyZW4iKTtvKGg1ZSwiY2hpbGRyZW5GaWx0ZXIiKTtvKE43LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBSNyh0KXt0eXBlb2YgdCE9ImZ1bmN0aW9uIiYmKHQ9TnAodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMscj1lLmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIGE9ZVtpXSxzPWEubGVuZ3RoLGw9bltpXT1bXSx1LGg9MDtoPHM7KytoKSh1PWFbaF0pJiZ0LmNhbGwodSx1Ll9fZGF0YV9fLGgsYSkmJmwucHVzaCh1KTtyZXR1cm4gbmV3IHNpKG4sdGhpcy5fcGFyZW50cyl9dmFyIHVWPU0oKCk9PnsidXNlIHN0cmljdCI7d2woKTtTeSgpO28oUjcsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEN5KHQpe3JldHVybiBuZXcgQXJyYXkodC5sZW5ndGgpfXZhciBNNz1NKCgpPT57InVzZSBzdHJpY3QiO28oQ3ksImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEk3KCl7cmV0dXJuIG5ldyBzaSh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChDeSksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gQXkodCxlKXt0aGlzLm93bmVyRG9jdW1lbnQ9dC5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPXQubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9dCx0aGlzLl9fZGF0YV9fPWV9dmFyIE83PU0oKCk9PnsidXNlIHN0cmljdCI7TTcoKTt3bCgpO28oSTcsImRlZmF1bHQiKTtvKEF5LCJFbnRlck5vZGUiKTtBeS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkF5LGFwcGVuZENoaWxkOm8oZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCx0aGlzLl9uZXh0KX0sImFwcGVuZENoaWxkIiksaW5zZXJ0QmVmb3JlOm8oZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LGUpfSwiaW5zZXJ0QmVmb3JlIikscXVlcnlTZWxlY3RvcjpvKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3Rvcih0KX0sInF1ZXJ5U2VsZWN0b3IiKSxxdWVyeVNlbGVjdG9yQWxsOm8oZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHQpfSwicXVlcnlTZWxlY3RvckFsbCIpfX0pO2Z1bmN0aW9uIFA3KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX12YXIgaFY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKFA3LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBmNWUodCxlLHIsbixpLGEpe2Zvcih2YXIgcz0wLGwsdT1lLmxlbmd0aCxoPWEubGVuZ3RoO3M8aDsrK3MpKGw9ZVtzXSk/KGwuX19kYXRhX189YVtzXSxuW3NdPWwpOnJbc109bmV3IEF5KHQsYVtzXSk7Zm9yKDtzPHU7KytzKShsPWVbc10pJiYoaVtzXT1sKX1mdW5jdGlvbiBkNWUodCxlLHIsbixpLGEscyl7dmFyIGwsdSxoPW5ldyBNYXAsZj1lLmxlbmd0aCxkPWEubGVuZ3RoLHA9bmV3IEFycmF5KGYpLG07Zm9yKGw9MDtsPGY7KytsKSh1PWVbbF0pJiYocFtsXT1tPXMuY2FsbCh1LHUuX19kYXRhX18sbCxlKSsiIixoLmhhcyhtKT9pW2xdPXU6aC5zZXQobSx1KSk7Zm9yKGw9MDtsPGQ7KytsKW09cy5jYWxsKHQsYVtsXSxsLGEpKyIiLCh1PWguZ2V0KG0pKT8obltsXT11LHUuX19kYXRhX189YVtsXSxoLmRlbGV0ZShtKSk6cltsXT1uZXcgQXkodCxhW2xdKTtmb3IobD0wO2w8ZjsrK2wpKHU9ZVtsXSkmJmguZ2V0KHBbbF0pPT09dSYmKGlbbF09dSl9ZnVuY3Rpb24gcDVlKHQpe3JldHVybiB0Ll9fZGF0YV9ffWZ1bmN0aW9uIEI3KHQsZSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIEFycmF5LmZyb20odGhpcyxwNWUpO3ZhciByPWU/ZDVlOmY1ZSxuPXRoaXMuX3BhcmVudHMsaT10aGlzLl9ncm91cHM7dHlwZW9mIHQhPSJmdW5jdGlvbiImJih0PVA3KHQpKTtmb3IodmFyIGE9aS5sZW5ndGgscz1uZXcgQXJyYXkoYSksbD1uZXcgQXJyYXkoYSksdT1uZXcgQXJyYXkoYSksaD0wO2g8YTsrK2gpe3ZhciBmPW5baF0sZD1pW2hdLHA9ZC5sZW5ndGgsbT1tNWUodC5jYWxsKGYsZiYmZi5fX2RhdGFfXyxoLG4pKSxnPW0ubGVuZ3RoLHk9bFtoXT1uZXcgQXJyYXkoZyksdj1zW2hdPW5ldyBBcnJheShnKSx4PXVbaF09bmV3IEFycmF5KHApO3IoZixkLHksdix4LG0sZSk7Zm9yKHZhciBiPTAsdz0wLF8sVDtiPGc7KytiKWlmKF89eVtiXSl7Zm9yKGI+PXcmJih3PWIrMSk7IShUPXZbd10pJiYrK3c8ZzspO18uX25leHQ9VHx8bnVsbH19cmV0dXJuIHM9bmV3IHNpKHMsbikscy5fZW50ZXI9bCxzLl9leGl0PXUsc31mdW5jdGlvbiBtNWUodCl7cmV0dXJuIHR5cGVvZiB0PT0ib2JqZWN0IiYmImxlbmd0aCJpbiB0P3Q6QXJyYXkuZnJvbSh0KX12YXIgZlY9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt3bCgpO083KCk7aFYoKTtvKGY1ZSwiYmluZEluZGV4Iik7byhkNWUsImJpbmRLZXkiKTtvKHA1ZSwiZGF0dW0iKTtvKEI3LCJkZWZhdWx0Iik7byhtNWUsImFycmF5bGlrZSIpfSk7ZnVuY3Rpb24gRjcoKXtyZXR1cm4gbmV3IHNpKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoQ3kpLHRoaXMuX3BhcmVudHMpfXZhciBkVj1NKCgpPT57InVzZSBzdHJpY3QiO003KCk7d2woKTtvKEY3LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiB6Nyh0LGUscil7dmFyIG49dGhpcy5lbnRlcigpLGk9dGhpcyxhPXRoaXMuZXhpdCgpO3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIj8obj10KG4pLG4mJihuPW4uc2VsZWN0aW9uKCkpKTpuPW4uYXBwZW5kKHQrIiIpLGUhPW51bGwmJihpPWUoaSksaSYmKGk9aS5zZWxlY3Rpb24oKSkpLHI9PW51bGw/YS5yZW1vdmUoKTpyKGEpLG4mJmk/bi5tZXJnZShpKS5vcmRlcigpOml9dmFyIHBWPU0oKCk9PnsidXNlIHN0cmljdCI7byh6NywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gRzcodCl7Zm9yKHZhciBlPXQuc2VsZWN0aW9uP3Quc2VsZWN0aW9uKCk6dCxyPXRoaXMuX2dyb3VwcyxuPWUuX2dyb3VwcyxpPXIubGVuZ3RoLGE9bi5sZW5ndGgscz1NYXRoLm1pbihpLGEpLGw9bmV3IEFycmF5KGkpLHU9MDt1PHM7Kyt1KWZvcih2YXIgaD1yW3VdLGY9blt1XSxkPWgubGVuZ3RoLHA9bFt1XT1uZXcgQXJyYXkoZCksbSxnPTA7ZzxkOysrZykobT1oW2ddfHxmW2ddKSYmKHBbZ109bSk7Zm9yKDt1PGk7Kyt1KWxbdV09clt1XTtyZXR1cm4gbmV3IHNpKGwsdGhpcy5fcGFyZW50cyl9dmFyIG1WPU0oKCk9PnsidXNlIHN0cmljdCI7d2woKTtvKEc3LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiAkNygpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0tMSxyPXQubGVuZ3RoOysrZTxyOylmb3IodmFyIG49dFtlXSxpPW4ubGVuZ3RoLTEsYT1uW2ldLHM7LS1pPj0wOykocz1uW2ldKSYmKGEmJnMuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYSleNCYmYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzLGEpLGE9cyk7cmV0dXJuIHRoaXN9dmFyIGdWPU0oKCk9PnsidXNlIHN0cmljdCI7bygkNywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gVjcodCl7dHx8KHQ9ZzVlKTtmdW5jdGlvbiBlKGQscCl7cmV0dXJuIGQmJnA/dChkLl9fZGF0YV9fLHAuX19kYXRhX18pOiFkLSFwfW8oZSwiY29tcGFyZU5vZGUiKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLG49ci5sZW5ndGgsaT1uZXcgQXJyYXkobiksYT0wO2E8bjsrK2Epe2Zvcih2YXIgcz1yW2FdLGw9cy5sZW5ndGgsdT1pW2FdPW5ldyBBcnJheShsKSxoLGY9MDtmPGw7KytmKShoPXNbZl0pJiYodVtmXT1oKTt1LnNvcnQoZSl9cmV0dXJuIG5ldyBzaShpLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9ZnVuY3Rpb24gZzVlKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfXZhciB5Vj1NKCgpPT57InVzZSBzdHJpY3QiO3dsKCk7byhWNywiZGVmYXVsdCIpO28oZzVlLCJhc2NlbmRpbmciKX0pO2Z1bmN0aW9uIFU3KCl7dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfXZhciB2Vj1NKCgpPT57InVzZSBzdHJpY3QiO28oVTcsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEg3KCl7cmV0dXJuIEFycmF5LmZyb20odGhpcyl9dmFyIHhWPU0oKCk9PnsidXNlIHN0cmljdCI7byhINywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gVzcoKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxyPXQubGVuZ3RoO2U8cjsrK2UpZm9yKHZhciBuPXRbZV0saT0wLGE9bi5sZW5ndGg7aTxhOysraSl7dmFyIHM9bltpXTtpZihzKXJldHVybiBzfXJldHVybiBudWxsfXZhciBiVj1NKCgpPT57InVzZSBzdHJpY3QiO28oVzcsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFk3KCl7bGV0IHQ9MDtmb3IobGV0IGUgb2YgdGhpcykrK3Q7cmV0dXJuIHR9dmFyIHdWPU0oKCk9PnsidXNlIHN0cmljdCI7byhZNywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gcTcoKXtyZXR1cm4hdGhpcy5ub2RlKCl9dmFyIFRWPU0oKCk9PnsidXNlIHN0cmljdCI7byhxNywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gWDcodCl7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxyPTAsbj1lLmxlbmd0aDtyPG47KytyKWZvcih2YXIgaT1lW3JdLGE9MCxzPWkubGVuZ3RoLGw7YTxzOysrYSkobD1pW2FdKSYmdC5jYWxsKGwsbC5fX2RhdGFfXyxhLGkpO3JldHVybiB0aGlzfXZhciBrVj1NKCgpPT57InVzZSBzdHJpY3QiO28oWDcsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHk1ZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gdjVlKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24geDVlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUodCxlKX19ZnVuY3Rpb24gYjVlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZSl9fWZ1bmN0aW9uIHc1ZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6dGhpcy5zZXRBdHRyaWJ1dGUodCxyKX19ZnVuY3Rpb24gVDVlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwscil9fWZ1bmN0aW9uIGo3KHQsZSl7dmFyIHI9cGModCk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgbj10aGlzLm5vZGUoKTtyZXR1cm4gci5sb2NhbD9uLmdldEF0dHJpYnV0ZU5TKHIuc3BhY2Usci5sb2NhbCk6bi5nZXRBdHRyaWJ1dGUocil9cmV0dXJuIHRoaXMuZWFjaCgoZT09bnVsbD9yLmxvY2FsP3Y1ZTp5NWU6dHlwZW9mIGU9PSJmdW5jdGlvbiI/ci5sb2NhbD9UNWU6dzVlOnIubG9jYWw/YjVlOng1ZSkocixlKSl9dmFyIEVWPU0oKCk9PnsidXNlIHN0cmljdCI7ajQoKTtvKHk1ZSwiYXR0clJlbW92ZSIpO28odjVlLCJhdHRyUmVtb3ZlTlMiKTtvKHg1ZSwiYXR0ckNvbnN0YW50Iik7byhiNWUsImF0dHJDb25zdGFudE5TIik7byh3NWUsImF0dHJGdW5jdGlvbiIpO28oVDVlLCJhdHRyRnVuY3Rpb25OUyIpO28oajcsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIF95KHQpe3JldHVybiB0Lm93bmVyRG9jdW1lbnQmJnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8dC5kb2N1bWVudCYmdHx8dC5kZWZhdWx0Vmlld312YXIgSzc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKF95LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBrNWUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19ZnVuY3Rpb24gRTVlKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsZSxyKX19ZnVuY3Rpb24gUzVlKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtuPT1udWxsP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4scil9fWZ1bmN0aW9uIFE3KHQsZSxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgoZT09bnVsbD9rNWU6dHlwZW9mIGU9PSJmdW5jdGlvbiI/UzVlOkU1ZSkodCxlLHI/PyIiKSk6U2godGhpcy5ub2RlKCksdCl9ZnVuY3Rpb24gU2godCxlKXtyZXR1cm4gdC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGUpfHxfeSh0KS5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShlKX12YXIgWjc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtLNygpO28oazVlLCJzdHlsZVJlbW92ZSIpO28oRTVlLCJzdHlsZUNvbnN0YW50Iik7byhTNWUsInN0eWxlRnVuY3Rpb24iKTtvKFE3LCJkZWZhdWx0Iik7byhTaCwic3R5bGVWYWx1ZSIpfSk7ZnVuY3Rpb24gQzVlKHQpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3RdfX1mdW5jdGlvbiBBNWUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW3RdPWV9fWZ1bmN0aW9uIF81ZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/ZGVsZXRlIHRoaXNbdF06dGhpc1t0XT1yfX1mdW5jdGlvbiBKNyh0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChlPT1udWxsP0M1ZTp0eXBlb2YgZT09ImZ1bmN0aW9uIj9fNWU6QTVlKSh0LGUpKTp0aGlzLm5vZGUoKVt0XX12YXIgU1Y9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKEM1ZSwicHJvcGVydHlSZW1vdmUiKTtvKEE1ZSwicHJvcGVydHlDb25zdGFudCIpO28oXzVlLCJwcm9wZXJ0eUZ1bmN0aW9uIik7byhKNywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gQ1YodCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIGVBKHQpe3JldHVybiB0LmNsYXNzTGlzdHx8bmV3IEFWKHQpfWZ1bmN0aW9uIEFWKHQpe3RoaXMuX25vZGU9dCx0aGlzLl9uYW1lcz1DVih0LmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIF9WKHQsZSl7Zm9yKHZhciByPWVBKHQpLG49LTEsaT1lLmxlbmd0aDsrK248aTspci5hZGQoZVtuXSl9ZnVuY3Rpb24gTFYodCxlKXtmb3IodmFyIHI9ZUEodCksbj0tMSxpPWUubGVuZ3RoOysrbjxpOylyLnJlbW92ZShlW25dKX1mdW5jdGlvbiBMNWUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7X1YodGhpcyx0KX19ZnVuY3Rpb24gRDVlKHQpe3JldHVybiBmdW5jdGlvbigpe0xWKHRoaXMsdCl9fWZ1bmN0aW9uIE41ZSh0LGUpe3JldHVybiBmdW5jdGlvbigpeyhlLmFwcGx5KHRoaXMsYXJndW1lbnRzKT9fVjpMVikodGhpcyx0KX19ZnVuY3Rpb24gdEEodCxlKXt2YXIgcj1DVih0KyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj1lQSh0aGlzLm5vZGUoKSksaT0tMSxhPXIubGVuZ3RoOysraTxhOylpZighbi5jb250YWlucyhyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgZT09ImZ1bmN0aW9uIj9ONWU6ZT9MNWU6RDVlKShyLGUpKX12YXIgRFY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKENWLCJjbGFzc0FycmF5Iik7byhlQSwiY2xhc3NMaXN0Iik7byhBViwiQ2xhc3NMaXN0Iik7QVYucHJvdG90eXBlPXthZGQ6byhmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lcy5pbmRleE9mKHQpO2U8MCYmKHRoaXMuX25hbWVzLnB1c2godCksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sImFkZCIpLHJlbW92ZTpvKGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWVzLmluZGV4T2YodCk7ZT49MCYmKHRoaXMuX25hbWVzLnNwbGljZShlLDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LCJyZW1vdmUiKSxjb250YWluczpvKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKHQpPj0wfSwiY29udGFpbnMiKX07byhfViwiY2xhc3NlZEFkZCIpO28oTFYsImNsYXNzZWRSZW1vdmUiKTtvKEw1ZSwiY2xhc3NlZFRydWUiKTtvKEQ1ZSwiY2xhc3NlZEZhbHNlIik7byhONWUsImNsYXNzZWRGdW5jdGlvbiIpO28odEEsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFI1ZSgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gTTVlKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19ZnVuY3Rpb24gSTVlKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9ZT8/IiJ9fWZ1bmN0aW9uIHJBKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCh0PT1udWxsP1I1ZToodHlwZW9mIHQ9PSJmdW5jdGlvbiI/STVlOk01ZSkodCkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fXZhciBOVj1NKCgpPT57InVzZSBzdHJpY3QiO28oUjVlLCJ0ZXh0UmVtb3ZlIik7byhNNWUsInRleHRDb25zdGFudCIpO28oSTVlLCJ0ZXh0RnVuY3Rpb24iKTtvKHJBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBPNWUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBQNWUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9dH19ZnVuY3Rpb24gQjVlKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPWU/PyIifX1mdW5jdGlvbiBuQSh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2godD09bnVsbD9PNWU6KHR5cGVvZiB0PT0iZnVuY3Rpb24iP0I1ZTpQNWUpKHQpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9dmFyIFJWPU0oKCk9PnsidXNlIHN0cmljdCI7byhPNWUsImh0bWxSZW1vdmUiKTtvKFA1ZSwiaHRtbENvbnN0YW50Iik7byhCNWUsImh0bWxGdW5jdGlvbiIpO28obkEsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEY1ZSgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBpQSgpe3JldHVybiB0aGlzLmVhY2goRjVlKX12YXIgTVY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKEY1ZSwicmFpc2UiKTtvKGlBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiB6NWUoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBhQSgpe3JldHVybiB0aGlzLmVhY2goejVlKX12YXIgSVY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHo1ZSwibG93ZXIiKTtvKGFBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBzQSh0KXt2YXIgZT10eXBlb2YgdD09ImZ1bmN0aW9uIj90OkV5KHQpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfXZhciBPVj1NKCgpPT57InVzZSBzdHJpY3QiO1M3KCk7byhzQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gRzVlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gb0EodCxlKXt2YXIgcj10eXBlb2YgdD09ImZ1bmN0aW9uIj90OkV5KHQpLG49ZT09bnVsbD9HNWU6dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpFaChlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9dmFyIFBWPU0oKCk9PnsidXNlIHN0cmljdCI7UzcoKTtLNCgpO28oRzVlLCJjb25zdGFudE51bGwiKTtvKG9BLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiAkNWUoKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBsQSgpe3JldHVybiB0aGlzLmVhY2goJDVlKX12YXIgQlY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKCQ1ZSwicmVtb3ZlIik7byhsQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gVjVlKCl7dmFyIHQ9dGhpcy5jbG9uZU5vZGUoITEpLGU9dGhpcy5wYXJlbnROb2RlO3JldHVybiBlP2UuaW5zZXJ0QmVmb3JlKHQsdGhpcy5uZXh0U2libGluZyk6dH1mdW5jdGlvbiBVNWUoKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMCksZT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGU/ZS5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fWZ1bmN0aW9uIGNBKHQpe3JldHVybiB0aGlzLnNlbGVjdCh0P1U1ZTpWNWUpfXZhciBGVj1NKCgpPT57InVzZSBzdHJpY3QiO28oVjVlLCJzZWxlY3Rpb25fY2xvbmVTaGFsbG93Iik7byhVNWUsInNlbGVjdGlvbl9jbG9uZURlZXAiKTtvKGNBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiB1QSh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5ub2RlKCkuX19kYXRhX199dmFyIHpWPU0oKCk9PnsidXNlIHN0cmljdCI7byh1QSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gSDVlKHQpe3JldHVybiBmdW5jdGlvbihlKXt0LmNhbGwodGhpcyxlLHRoaXMuX19kYXRhX18pfX1mdW5jdGlvbiBXNWUodCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbihlKXt2YXIgcj0iIixuPWUuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYocj1lLnNsaWNlKG4rMSksZT1lLnNsaWNlKDAsbikpLHt0eXBlOmUsbmFtZTpyfX0pfWZ1bmN0aW9uIFk1ZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fb247aWYoZSl7Zm9yKHZhciByPTAsbj0tMSxpPWUubGVuZ3RoLGE7cjxpOysrcilhPWVbcl0sKCF0LnR5cGV8fGEudHlwZT09PXQudHlwZSkmJmEubmFtZT09PXQubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoYS50eXBlLGEubGlzdGVuZXIsYS5vcHRpb25zKTplWysrbl09YTsrK24/ZS5sZW5ndGg9bjpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gcTVlKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10aGlzLl9fb24saSxhPUg1ZShlKTtpZihuKXtmb3IodmFyIHM9MCxsPW4ubGVuZ3RoO3M8bDsrK3MpaWYoKGk9bltzXSkudHlwZT09PXQudHlwZSYmaS5uYW1lPT09dC5uYW1lKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoaS50eXBlLGkubGlzdGVuZXIsaS5vcHRpb25zKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoaS50eXBlLGkubGlzdGVuZXI9YSxpLm9wdGlvbnM9ciksaS52YWx1ZT1lO3JldHVybn19dGhpcy5hZGRFdmVudExpc3RlbmVyKHQudHlwZSxhLHIpLGk9e3R5cGU6dC50eXBlLG5hbWU6dC5uYW1lLHZhbHVlOmUsbGlzdGVuZXI6YSxvcHRpb25zOnJ9LG4/bi5wdXNoKGkpOnRoaXMuX19vbj1baV19fWZ1bmN0aW9uIGhBKHQsZSxyKXt2YXIgbj1XNWUodCsiIiksaSxhPW4ubGVuZ3RoLHM7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgbD10aGlzLm5vZGUoKS5fX29uO2lmKGwpe2Zvcih2YXIgdT0wLGg9bC5sZW5ndGgsZjt1PGg7Kyt1KWZvcihpPTAsZj1sW3VdO2k8YTsrK2kpaWYoKHM9bltpXSkudHlwZT09PWYudHlwZSYmcy5uYW1lPT09Zi5uYW1lKXJldHVybiBmLnZhbHVlfXJldHVybn1mb3IobD1lP3E1ZTpZNWUsaT0wO2k8YTsrK2kpdGhpcy5lYWNoKGwobltpXSxlLHIpKTtyZXR1cm4gdGhpc312YXIgR1Y9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKEg1ZSwiY29udGV4dExpc3RlbmVyIik7byhXNWUsInBhcnNlVHlwZW5hbWVzIik7byhZNWUsIm9uUmVtb3ZlIik7byhxNWUsIm9uQWRkIik7byhoQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gJFYodCxlLHIpe3ZhciBuPV95KHQpLGk9bi5DdXN0b21FdmVudDt0eXBlb2YgaT09ImZ1bmN0aW9uIj9pPW5ldyBpKGUscik6KGk9bi5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxyPyhpLmluaXRFdmVudChlLHIuYnViYmxlcyxyLmNhbmNlbGFibGUpLGkuZGV0YWlsPXIuZGV0YWlsKTppLmluaXRFdmVudChlLCExLCExKSksdC5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIFg1ZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiAkVih0aGlzLHQsZSl9fWZ1bmN0aW9uIGo1ZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiAkVih0aGlzLHQsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBmQSh0LGUpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiBlPT0iZnVuY3Rpb24iP2o1ZTpYNWUpKHQsZSkpfXZhciBWVj1NKCgpPT57InVzZSBzdHJpY3QiO0s3KCk7bygkViwiZGlzcGF0Y2hFdmVudCIpO28oWDVlLCJkaXNwYXRjaENvbnN0YW50Iik7byhqNWUsImRpc3BhdGNoRnVuY3Rpb24iKTtvKGZBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbipkQSgpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0wLHI9dC5sZW5ndGg7ZTxyOysrZSlmb3IodmFyIG49dFtlXSxpPTAsYT1uLmxlbmd0aCxzO2k8YTsrK2kpKHM9bltpXSkmJih5aWVsZCBzKX12YXIgVVY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKGRBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBzaSh0LGUpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZX1mdW5jdGlvbiBIVigpe3JldHVybiBuZXcgc2koW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxwQSl9ZnVuY3Rpb24gSzVlKCl7cmV0dXJuIHRoaXN9dmFyIHBBLHZ1LHdsPU0oKCk9PnsidXNlIHN0cmljdCI7YVYoKTtvVigpO2xWKCk7Y1YoKTt1VigpO2ZWKCk7TzcoKTtkVigpO3BWKCk7bVYoKTtnVigpO3lWKCk7dlYoKTt4VigpO2JWKCk7d1YoKTtUVigpO2tWKCk7RVYoKTtaNygpO1NWKCk7RFYoKTtOVigpO1JWKCk7TVYoKTtJVigpO09WKCk7UFYoKTtCVigpO0ZWKCk7elYoKTtHVigpO1ZWKCk7VVYoKTtwQT1bbnVsbF07byhzaSwiU2VsZWN0aW9uIik7byhIViwic2VsZWN0aW9uIik7byhLNWUsInNlbGVjdGlvbl9zZWxlY3Rpb24iKTtzaS5wcm90b3R5cGU9SFYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpzaSxzZWxlY3Q6Qzcsc2VsZWN0QWxsOkw3LHNlbGVjdENoaWxkOkQ3LHNlbGVjdENoaWxkcmVuOk43LGZpbHRlcjpSNyxkYXRhOkI3LGVudGVyOkk3LGV4aXQ6Rjcsam9pbjp6NyxtZXJnZTpHNyxzZWxlY3Rpb246SzVlLG9yZGVyOiQ3LHNvcnQ6VjcsY2FsbDpVNyxub2RlczpINyxub2RlOlc3LHNpemU6WTcsZW1wdHk6cTcsZWFjaDpYNyxhdHRyOmo3LHN0eWxlOlE3LHByb3BlcnR5Oko3LGNsYXNzZWQ6dEEsdGV4dDpyQSxodG1sOm5BLHJhaXNlOmlBLGxvd2VyOmFBLGFwcGVuZDpzQSxpbnNlcnQ6b0EscmVtb3ZlOmxBLGNsb25lOmNBLGRhdHVtOnVBLG9uOmhBLGRpc3BhdGNoOmZBLFtTeW1ib2wuaXRlcmF0b3JdOmRBfTt2dT1IVn0pO2Z1bmN0aW9uIFZlKHQpe3JldHVybiB0eXBlb2YgdD09InN0cmluZyI/bmV3IHNpKFtbZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgc2koW1t0XV0scEEpfXZhciBXVj1NKCgpPT57InVzZSBzdHJpY3QiO3dsKCk7byhWZSwiZGVmYXVsdCIpfSk7dmFyIFRsPU0oKCk9PnsidXNlIHN0cmljdCI7U3koKTtqNCgpO1dWKCk7d2woKTtLNCgpO183KCk7WjcoKX0pO3ZhciBZVj1NKCgpPT57InVzZSBzdHJpY3QifSk7ZnVuY3Rpb24gQ2godCxlLHIpe3QucHJvdG90eXBlPWUucHJvdG90eXBlPXIsci5jb25zdHJ1Y3Rvcj10fWZ1bmN0aW9uIFJwKHQsZSl7dmFyIHI9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSk7Zm9yKHZhciBuIGluIGUpcltuXT1lW25dO3JldHVybiByfXZhciBtQT1NKCgpPT57InVzZSBzdHJpY3QiO28oQ2gsImRlZmF1bHQiKTtvKFJwLCJleHRlbmQiKX0pO2Z1bmN0aW9uIEFoKCl7fWZ1bmN0aW9uIFhWKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gaXdlKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4OCgpfWZ1bmN0aW9uIGF3ZSgpe3JldHVybiB0VSh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBqVigpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIEVsKHQpe3ZhciBlLHI7cmV0dXJuIHQ9KHQrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChlPVE1ZS5leGVjKHQpKT8ocj1lWzFdLmxlbmd0aCxlPXBhcnNlSW50KGVbMV0sMTYpLHI9PT02P0tWKGUpOnI9PT0zP25ldyBkYShlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8ZSYyNDAsKGUmMTUpPDw0fGUmMTUsMSk6cj09PTg/WjQoZT4+MjQmMjU1LGU+PjE2JjI1NSxlPj44JjI1NSwoZSYyNTUpLzI1NSk6cj09PTQ/WjQoZT4+MTImMTV8ZT4+OCYyNDAsZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fGUmMjQwLCgoZSYxNSk8PDR8ZSYxNSkvMjU1KTpudWxsKTooZT1aNWUuZXhlYyh0KSk/bmV3IGRhKGVbMV0sZVsyXSxlWzNdLDEpOihlPUo1ZS5leGVjKHQpKT9uZXcgZGEoZVsxXSoyNTUvMTAwLGVbMl0qMjU1LzEwMCxlWzNdKjI1NS8xMDAsMSk6KGU9ZXdlLmV4ZWModCkpP1o0KGVbMV0sZVsyXSxlWzNdLGVbNF0pOihlPXR3ZS5leGVjKHQpKT9aNChlWzFdKjI1NS8xMDAsZVsyXSoyNTUvMTAwLGVbM10qMjU1LzEwMCxlWzRdKTooZT1yd2UuZXhlYyh0KSk/SlYoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCwxKTooZT1ud2UuZXhlYyh0KSk/SlYoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCxlWzRdKTpxVi5oYXNPd25Qcm9wZXJ0eSh0KT9LVihxVlt0XSk6dD09PSJ0cmFuc3BhcmVudCI/bmV3IGRhKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gS1YodCl7cmV0dXJuIG5ldyBkYSh0Pj4xNiYyNTUsdD4+OCYyNTUsdCYyNTUsMSl9ZnVuY3Rpb24gWjQodCxlLHIsbil7cmV0dXJuIG48PTAmJih0PWU9cj1OYU4pLG5ldyBkYSh0LGUscixuKX1mdW5jdGlvbiB5QSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIEFofHwodD1FbCh0KSksdD8odD10LnJnYigpLG5ldyBkYSh0LnIsdC5nLHQuYix0Lm9wYWNpdHkpKTpuZXcgZGF9ZnVuY3Rpb24gSXAodCxlLHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3lBKHQpOm5ldyBkYSh0LGUscixuPz8xKX1mdW5jdGlvbiBkYSh0LGUscixuKXt0aGlzLnI9K3QsdGhpcy5nPStlLHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gUVYoKXtyZXR1cm5gIyR7dWQodGhpcy5yKX0ke3VkKHRoaXMuZyl9JHt1ZCh0aGlzLmIpfWB9ZnVuY3Rpb24gc3dlKCl7cmV0dXJuYCMke3VkKHRoaXMucil9JHt1ZCh0aGlzLmcpfSR7dWQodGhpcy5iKX0ke3VkKChpc05hTih0aGlzLm9wYWNpdHkpPzE6dGhpcy5vcGFjaXR5KSoyNTUpfWB9ZnVuY3Rpb24gWlYoKXtsZXQgdD10Myh0aGlzLm9wYWNpdHkpO3JldHVybmAke3Q9PT0xPyJyZ2IoIjoicmdiYSgifSR7aGQodGhpcy5yKX0sICR7aGQodGhpcy5nKX0sICR7aGQodGhpcy5iKX0ke3Q9PT0xPyIpIjpgLCAke3R9KWB9YH1mdW5jdGlvbiB0Myh0KXtyZXR1cm4gaXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpfWZ1bmN0aW9uIGhkKHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHQpfHwwKSl9ZnVuY3Rpb24gdWQodCl7cmV0dXJuIHQ9aGQodCksKHQ8MTY/IjAiOiIiKSt0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBKVih0LGUscixuKXtyZXR1cm4gbjw9MD90PWU9cj1OYU46cjw9MHx8cj49MT90PWU9TmFOOmU8PTAmJih0PU5hTiksbmV3IGtsKHQsZSxyLG4pfWZ1bmN0aW9uIHRVKHQpe2lmKHQgaW5zdGFuY2VvZiBrbClyZXR1cm4gbmV3IGtsKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIEFofHwodD1FbCh0KSksIXQpcmV0dXJuIG5ldyBrbDtpZih0IGluc3RhbmNlb2Yga2wpcmV0dXJuIHQ7dD10LnJnYigpO3ZhciBlPXQuci8yNTUscj10LmcvMjU1LG49dC5iLzI1NSxpPU1hdGgubWluKGUscixuKSxhPU1hdGgubWF4KGUscixuKSxzPU5hTixsPWEtaSx1PShhK2kpLzI7cmV0dXJuIGw/KGU9PT1hP3M9KHItbikvbCsocjxuKSo2OnI9PT1hP3M9KG4tZSkvbCsyOnM9KGUtcikvbCs0LGwvPXU8LjU/YStpOjItYS1pLHMqPTYwKTpsPXU+MCYmdTwxPzA6cyxuZXcga2wocyxsLHUsdC5vcGFjaXR5KX1mdW5jdGlvbiByVSh0LGUscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/dFUodCk6bmV3IGtsKHQsZSxyLG4/PzEpfWZ1bmN0aW9uIGtsKHQsZSxyLG4pe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBlVSh0KXtyZXR1cm4gdD0odHx8MCklMzYwLHQ8MD90KzM2MDp0fWZ1bmN0aW9uIEo0KHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDEsdHx8MCkpfWZ1bmN0aW9uIGdBKHQsZSxyKXtyZXR1cm4odDw2MD9lKyhyLWUpKnQvNjA6dDwxODA/cjp0PDI0MD9lKyhyLWUpKigyNDAtdCkvNjA6ZSkqMjU1fXZhciBMeSxlMyxNcCxEeSxtYyxRNWUsWjVlLEo1ZSxld2UsdHdlLHJ3ZSxud2UscVYsdkE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjttQSgpO28oQWgsIkNvbG9yIik7THk9LjcsZTM9MS9MeSxNcD0iXFxzKihbKy1dP1xcZCspXFxzKiIsRHk9IlxccyooWystXT8oPzpcXGQqXFwuKT9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLG1jPSJcXHMqKFsrLV0/KD86XFxkKlxcLik/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsUTVlPS9eIyhbMC05YS1mXXszLDh9KSQvLFo1ZT1uZXcgUmVnRXhwKGBecmdiXFwoJHtNcH0sJHtNcH0sJHtNcH1cXCkkYCksSjVlPW5ldyBSZWdFeHAoYF5yZ2JcXCgke21jfSwke21jfSwke21jfVxcKSRgKSxld2U9bmV3IFJlZ0V4cChgXnJnYmFcXCgke01wfSwke01wfSwke01wfSwke0R5fVxcKSRgKSx0d2U9bmV3IFJlZ0V4cChgXnJnYmFcXCgke21jfSwke21jfSwke21jfSwke0R5fVxcKSRgKSxyd2U9bmV3IFJlZ0V4cChgXmhzbFxcKCR7RHl9LCR7bWN9LCR7bWN9XFwpJGApLG53ZT1uZXcgUmVnRXhwKGBeaHNsYVxcKCR7RHl9LCR7bWN9LCR7bWN9LCR7RHl9XFwpJGApLHFWPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O0NoKEFoLEVsLHtjb3B5KHQpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsdCl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OlhWLGZvcm1hdEhleDpYVixmb3JtYXRIZXg4Oml3ZSxmb3JtYXRIc2w6YXdlLGZvcm1hdFJnYjpqVix0b1N0cmluZzpqVn0pO28oWFYsImNvbG9yX2Zvcm1hdEhleCIpO28oaXdlLCJjb2xvcl9mb3JtYXRIZXg4Iik7byhhd2UsImNvbG9yX2Zvcm1hdEhzbCIpO28oalYsImNvbG9yX2Zvcm1hdFJnYiIpO28oRWwsImNvbG9yIik7byhLViwicmdibiIpO28oWjQsInJnYmEiKTtvKHlBLCJyZ2JDb252ZXJ0Iik7byhJcCwicmdiIik7byhkYSwiUmdiIik7Q2goZGEsSXAsUnAoQWgse2JyaWdodGVyKHQpe3JldHVybiB0PXQ9PW51bGw/ZTM6TWF0aC5wb3coZTMsdCksbmV3IGRhKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcih0KXtyZXR1cm4gdD10PT1udWxsP0x5Ok1hdGgucG93KEx5LHQpLG5ldyBkYSh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2IoKXtyZXR1cm4gdGhpc30sY2xhbXAoKXtyZXR1cm4gbmV3IGRhKGhkKHRoaXMuciksaGQodGhpcy5nKSxoZCh0aGlzLmIpLHQzKHRoaXMub3BhY2l0eSkpfSxkaXNwbGF5YWJsZSgpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6UVYsZm9ybWF0SGV4OlFWLGZvcm1hdEhleDg6c3dlLGZvcm1hdFJnYjpaVix0b1N0cmluZzpaVn0pKTtvKFFWLCJyZ2JfZm9ybWF0SGV4Iik7byhzd2UsInJnYl9mb3JtYXRIZXg4Iik7byhaViwicmdiX2Zvcm1hdFJnYiIpO28odDMsImNsYW1wYSIpO28oaGQsImNsYW1waSIpO28odWQsImhleCIpO28oSlYsImhzbGEiKTtvKHRVLCJoc2xDb252ZXJ0Iik7byhyVSwiaHNsIik7byhrbCwiSHNsIik7Q2goa2wsclUsUnAoQWgse2JyaWdodGVyKHQpe3JldHVybiB0PXQ9PW51bGw/ZTM6TWF0aC5wb3coZTMsdCksbmV3IGtsKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyKHQpe3JldHVybiB0PXQ9PW51bGw/THk6TWF0aC5wb3coTHksdCksbmV3IGtsKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiKCl7dmFyIHQ9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCxlPWlzTmFOKHQpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqZSxpPTIqci1uO3JldHVybiBuZXcgZGEoZ0EodD49MjQwP3QtMjQwOnQrMTIwLGksbiksZ0EodCxpLG4pLGdBKHQ8MTIwP3QrMjQwOnQtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sY2xhbXAoKXtyZXR1cm4gbmV3IGtsKGVVKHRoaXMuaCksSjQodGhpcy5zKSxKNCh0aGlzLmwpLHQzKHRoaXMub3BhY2l0eSkpfSxkaXNwbGF5YWJsZSgpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsKCl7bGV0IHQ9dDModGhpcy5vcGFjaXR5KTtyZXR1cm5gJHt0PT09MT8iaHNsKCI6ImhzbGEoIn0ke2VVKHRoaXMuaCl9LCAke0o0KHRoaXMucykqMTAwfSUsICR7SjQodGhpcy5sKSoxMDB9JSR7dD09PTE/IikiOmAsICR7dH0pYH1gfX0pKTtvKGVVLCJjbGFtcGgiKTtvKEo0LCJjbGFtcHQiKTtvKGdBLCJoc2wycmdiIil9KTt2YXIgblUsaVUsYVU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtuVT1NYXRoLlBJLzE4MCxpVT0xODAvTWF0aC5QSX0pO2Z1bmN0aW9uIGhVKHQpe2lmKHQgaW5zdGFuY2VvZiBnYylyZXR1cm4gbmV3IGdjKHQubCx0LmEsdC5iLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIHh1KXJldHVybiBmVSh0KTt0IGluc3RhbmNlb2YgZGF8fCh0PXlBKHQpKTt2YXIgZT1UQSh0LnIpLHI9VEEodC5nKSxuPVRBKHQuYiksaT14QSgoLjIyMjUwNDUqZSsuNzE2ODc4NipyKy4wNjA2MTY5Km4pL29VKSxhLHM7cmV0dXJuIGU9PT1yJiZyPT09bj9hPXM9aTooYT14QSgoLjQzNjA3NDcqZSsuMzg1MDY0OSpyKy4xNDMwODA0Km4pL3NVKSxzPXhBKCguMDEzOTMyMiplKy4wOTcxMDQ1KnIrLjcxNDE3MzMqbikvbFUpKSxuZXcgZ2MoMTE2KmktMTYsNTAwKihhLWkpLDIwMCooaS1zKSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIGtBKHQsZSxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9oVSh0KTpuZXcgZ2ModCxlLHIsbj8/MSl9ZnVuY3Rpb24gZ2ModCxlLHIsbil7dGhpcy5sPSt0LHRoaXMuYT0rZSx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIHhBKHQpe3JldHVybiB0Pm93ZT9NYXRoLnBvdyh0LDEvMyk6dC91VStjVX1mdW5jdGlvbiBiQSh0KXtyZXR1cm4gdD5PcD90KnQqdDp1VSoodC1jVSl9ZnVuY3Rpb24gd0EodCl7cmV0dXJuIDI1NSoodDw9LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KX1mdW5jdGlvbiBUQSh0KXtyZXR1cm4odC89MjU1KTw9LjA0MDQ1P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBsd2UodCl7aWYodCBpbnN0YW5jZW9mIHh1KXJldHVybiBuZXcgeHUodC5oLHQuYyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgZ2N8fCh0PWhVKHQpKSx0LmE9PT0wJiZ0LmI9PT0wKXJldHVybiBuZXcgeHUoTmFOLDA8dC5sJiZ0Lmw8MTAwPzA6TmFOLHQubCx0Lm9wYWNpdHkpO3ZhciBlPU1hdGguYXRhbjIodC5iLHQuYSkqaVU7cmV0dXJuIG5ldyB4dShlPDA/ZSszNjA6ZSxNYXRoLnNxcnQodC5hKnQuYSt0LmIqdC5iKSx0LmwsdC5vcGFjaXR5KX1mdW5jdGlvbiBOeSh0LGUscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/bHdlKHQpOm5ldyB4dSh0LGUscixuPz8xKX1mdW5jdGlvbiB4dSh0LGUscixuKXt0aGlzLmg9K3QsdGhpcy5jPStlLHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gZlUodCl7aWYoaXNOYU4odC5oKSlyZXR1cm4gbmV3IGdjKHQubCwwLDAsdC5vcGFjaXR5KTt2YXIgZT10LmgqblU7cmV0dXJuIG5ldyBnYyh0LmwsTWF0aC5jb3MoZSkqdC5jLE1hdGguc2luKGUpKnQuYyx0Lm9wYWNpdHkpfXZhciByMyxzVSxvVSxsVSxjVSxPcCx1VSxvd2UsZFU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjttQSgpO3ZBKCk7YVUoKTtyMz0xOCxzVT0uOTY0MjIsb1U9MSxsVT0uODI1MjEsY1U9NC8yOSxPcD02LzI5LHVVPTMqT3AqT3Asb3dlPU9wKk9wKk9wO28oaFUsImxhYkNvbnZlcnQiKTtvKGtBLCJsYWIiKTtvKGdjLCJMYWIiKTtDaChnYyxrQSxScChBaCx7YnJpZ2h0ZXIodCl7cmV0dXJuIG5ldyBnYyh0aGlzLmwrcjMqKHQ/PzEpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyKHQpe3JldHVybiBuZXcgZ2ModGhpcy5sLXIzKih0Pz8xKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LHJnYigpe3ZhciB0PSh0aGlzLmwrMTYpLzExNixlPWlzTmFOKHRoaXMuYSk/dDp0K3RoaXMuYS81MDAscj1pc05hTih0aGlzLmIpP3Q6dC10aGlzLmIvMjAwO3JldHVybiBlPXNVKmJBKGUpLHQ9b1UqYkEodCkscj1sVSpiQShyKSxuZXcgZGEod0EoMy4xMzM4NTYxKmUtMS42MTY4NjY3KnQtLjQ5MDYxNDYqciksd0EoLS45Nzg3Njg0KmUrMS45MTYxNDE1KnQrLjAzMzQ1NCpyKSx3QSguMDcxOTQ1MyplLS4yMjg5OTE0KnQrMS40MDUyNDI3KnIpLHRoaXMub3BhY2l0eSl9fSkpO28oeEEsInh5ejJsYWIiKTtvKGJBLCJsYWIyeHl6Iik7byh3QSwibHJnYjJyZ2IiKTtvKFRBLCJyZ2IybHJnYiIpO28obHdlLCJoY2xDb252ZXJ0Iik7byhOeSwiaGNsIik7byh4dSwiSGNsIik7byhmVSwiaGNsMmxhYiIpO0NoKHh1LE55LFJwKEFoLHticmlnaHRlcih0KXtyZXR1cm4gbmV3IHh1KHRoaXMuaCx0aGlzLmMsdGhpcy5sK3IzKih0Pz8xKSx0aGlzLm9wYWNpdHkpfSxkYXJrZXIodCl7cmV0dXJuIG5ldyB4dSh0aGlzLmgsdGhpcy5jLHRoaXMubC1yMyoodD8/MSksdGhpcy5vcGFjaXR5KX0scmdiKCl7cmV0dXJuIGZVKHRoaXMpLnJnYigpfX0pKX0pO3ZhciBQcD1NKCgpPT57InVzZSBzdHJpY3QiO3ZBKCk7ZFUoKX0pO2Z1bmN0aW9uIEVBKHQsZSxyLG4saSl7dmFyIGE9dCp0LHM9YSp0O3JldHVybigoMS0zKnQrMyphLXMpKmUrKDQtNiphKzMqcykqcisoMSszKnQrMyphLTMqcykqbitzKmkpLzZ9ZnVuY3Rpb24gU0EodCl7dmFyIGU9dC5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49cjw9MD9yPTA6cj49MT8ocj0xLGUtMSk6TWF0aC5mbG9vcihyKmUpLGk9dFtuXSxhPXRbbisxXSxzPW4+MD90W24tMV06MippLWEsbD1uPGUtMT90W24rMl06MiphLWk7cmV0dXJuIEVBKChyLW4vZSkqZSxzLGksYSxsKX19dmFyIENBPU0oKCk9PnsidXNlIHN0cmljdCI7byhFQSwiYmFzaXMiKTtvKFNBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBBQSh0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49TWF0aC5mbG9vcigoKHIlPTEpPDA/KytyOnIpKmUpLGk9dFsobitlLTEpJWVdLGE9dFtuJWVdLHM9dFsobisxKSVlXSxsPXRbKG4rMiklZV07cmV0dXJuIEVBKChyLW4vZSkqZSxpLGEscyxsKX19dmFyIHBVPU0oKCk9PnsidXNlIHN0cmljdCI7Q0EoKTtvKEFBLCJkZWZhdWx0Iil9KTt2YXIgQnAsX0E9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtCcD1vKHQ9PigpPT50LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBtVSh0LGUpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdCtyKmV9fWZ1bmN0aW9uIGN3ZSh0LGUscil7cmV0dXJuIHQ9TWF0aC5wb3codCxyKSxlPU1hdGgucG93KGUsciktdCxyPTEvcixmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3codCtuKmUscil9fWZ1bmN0aW9uIGdVKHQsZSl7dmFyIHI9ZS10O3JldHVybiByP21VKHQscj4xODB8fHI8LTE4MD9yLTM2MCpNYXRoLnJvdW5kKHIvMzYwKTpyKTpCcChpc05hTih0KT9lOnQpfWZ1bmN0aW9uIHlVKHQpe3JldHVybih0PSt0KT09MT9idTpmdW5jdGlvbihlLHIpe3JldHVybiByLWU/Y3dlKGUscix0KTpCcChpc05hTihlKT9yOmUpfX1mdW5jdGlvbiBidSh0LGUpe3ZhciByPWUtdDtyZXR1cm4gcj9tVSh0LHIpOkJwKGlzTmFOKHQpP2U6dCl9dmFyIExBPU0oKCk9PnsidXNlIHN0cmljdCI7X0EoKTtvKG1VLCJsaW5lYXIiKTtvKGN3ZSwiZXhwb25lbnRpYWwiKTtvKGdVLCJodWUiKTtvKHlVLCJnYW1tYSIpO28oYnUsIm5vZ2FtbWEiKX0pO2Z1bmN0aW9uIHZVKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1lLmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKSxzLGw7Zm9yKHM9MDtzPHI7KytzKWw9SXAoZVtzXSksbltzXT1sLnJ8fDAsaVtzXT1sLmd8fDAsYVtzXT1sLmJ8fDA7cmV0dXJuIG49dChuKSxpPXQoaSksYT10KGEpLGwub3BhY2l0eT0xLGZ1bmN0aW9uKHUpe3JldHVybiBsLnI9bih1KSxsLmc9aSh1KSxsLmI9YSh1KSxsKyIifX19dmFyIGZkLHV3ZSxod2UsREE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtQcCgpO0NBKCk7cFUoKTtMQSgpO2ZkPW8oZnVuY3Rpb24gdChlKXt2YXIgcj15VShlKTtmdW5jdGlvbiBuKGksYSl7dmFyIHM9cigoaT1JcChpKSkuciwoYT1JcChhKSkuciksbD1yKGkuZyxhLmcpLHU9cihpLmIsYS5iKSxoPWJ1KGkub3BhY2l0eSxhLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihmKXtyZXR1cm4gaS5yPXMoZiksaS5nPWwoZiksaS5iPXUoZiksaS5vcGFjaXR5PWgoZiksaSsiIn19cmV0dXJuIG8obiwicmdiIiksbi5nYW1tYT10LG59LCJyZ2JHYW1tYSIpKDEpO28odlUsInJnYlNwbGluZSIpO3V3ZT12VShTQSksaHdlPXZVKEFBKX0pO2Z1bmN0aW9uIE5BKHQsZSl7ZXx8KGU9W10pO3ZhciByPXQ/TWF0aC5taW4oZS5sZW5ndGgsdC5sZW5ndGgpOjAsbj1lLnNsaWNlKCksaTtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKGk9MDtpPHI7KytpKW5baV09dFtpXSooMS1hKStlW2ldKmE7cmV0dXJuIG59fWZ1bmN0aW9uIHhVKHQpe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcodCkmJiEodCBpbnN0YW5jZW9mIERhdGFWaWV3KX12YXIgYlU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKE5BLCJkZWZhdWx0Iik7byh4VSwiaXNOdW1iZXJBcnJheSIpfSk7ZnVuY3Rpb24gd1UodCxlKXt2YXIgcj1lP2UubGVuZ3RoOjAsbj10P01hdGgubWluKHIsdC5sZW5ndGgpOjAsaT1uZXcgQXJyYXkobiksYT1uZXcgQXJyYXkocikscztmb3Iocz0wO3M8bjsrK3MpaVtzXT1faCh0W3NdLGVbc10pO2Zvcig7czxyOysrcylhW3NdPWVbc107cmV0dXJuIGZ1bmN0aW9uKGwpe2ZvcihzPTA7czxuOysrcylhW3NdPWlbc10obCk7cmV0dXJuIGF9fXZhciBUVT1NKCgpPT57InVzZSBzdHJpY3QiO24zKCk7byh3VSwiZ2VuZXJpY0FycmF5Iil9KTtmdW5jdGlvbiBSQSh0LGUpe3ZhciByPW5ldyBEYXRlO3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24obil7cmV0dXJuIHIuc2V0VGltZSh0KigxLW4pK2Uqbikscn19dmFyIGtVPU0oKCk9PnsidXNlIHN0cmljdCI7byhSQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gZWEodCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKHIpe3JldHVybiB0KigxLXIpK2Uqcn19dmFyIFJ5PU0oKCk9PnsidXNlIHN0cmljdCI7byhlYSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gTUEodCxlKXt2YXIgcj17fSxuPXt9LGk7KHQ9PT1udWxsfHx0eXBlb2YgdCE9Im9iamVjdCIpJiYodD17fSksKGU9PT1udWxsfHx0eXBlb2YgZSE9Im9iamVjdCIpJiYoZT17fSk7Zm9yKGkgaW4gZSlpIGluIHQ/cltpXT1faCh0W2ldLGVbaV0pOm5baV09ZVtpXTtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKGkgaW4gciluW2ldPXJbaV0oYSk7cmV0dXJuIG59fXZhciBFVT1NKCgpPT57InVzZSBzdHJpY3QiO24zKCk7byhNQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gZndlKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBkd2UodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpKyIifX1mdW5jdGlvbiBGcCh0LGUpe3ZhciByPU9BLmxhc3RJbmRleD1JQS5sYXN0SW5kZXg9MCxuLGksYSxzPS0xLGw9W10sdT1bXTtmb3IodD10KyIiLGU9ZSsiIjsobj1PQS5leGVjKHQpKSYmKGk9SUEuZXhlYyhlKSk7KShhPWkuaW5kZXgpPnImJihhPWUuc2xpY2UocixhKSxsW3NdP2xbc10rPWE6bFsrK3NdPWEpLChuPW5bMF0pPT09KGk9aVswXSk/bFtzXT9sW3NdKz1pOmxbKytzXT1pOihsWysrc109bnVsbCx1LnB1c2goe2k6cyx4OmVhKG4saSl9KSkscj1JQS5sYXN0SW5kZXg7cmV0dXJuIHI8ZS5sZW5ndGgmJihhPWUuc2xpY2UociksbFtzXT9sW3NdKz1hOmxbKytzXT1hKSxsLmxlbmd0aDwyP3VbMF0/ZHdlKHVbMF0ueCk6ZndlKGUpOihlPXUubGVuZ3RoLGZ1bmN0aW9uKGgpe2Zvcih2YXIgZj0wLGQ7ZjxlOysrZilsWyhkPXVbZl0pLmldPWQueChoKTtyZXR1cm4gbC5qb2luKCIiKX0pfXZhciBPQSxJQSxQQT1NKCgpPT57InVzZSBzdHJpY3QiO1J5KCk7T0E9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLElBPW5ldyBSZWdFeHAoT0Euc291cmNlLCJnIik7byhmd2UsInplcm8iKTtvKGR3ZSwib25lIik7byhGcCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gX2godCxlKXt2YXIgcj10eXBlb2YgZSxuO3JldHVybiBlPT1udWxsfHxyPT09ImJvb2xlYW4iP0JwKGUpOihyPT09Im51bWJlciI/ZWE6cj09PSJzdHJpbmciPyhuPUVsKGUpKT8oZT1uLGZkKTpGcDplIGluc3RhbmNlb2YgRWw/ZmQ6ZSBpbnN0YW5jZW9mIERhdGU/UkE6eFUoZSk/TkE6QXJyYXkuaXNBcnJheShlKT93VTp0eXBlb2YgZS52YWx1ZU9mIT0iZnVuY3Rpb24iJiZ0eXBlb2YgZS50b1N0cmluZyE9ImZ1bmN0aW9uInx8aXNOYU4oZSk/TUE6ZWEpKHQsZSl9dmFyIG4zPU0oKCk9PnsidXNlIHN0cmljdCI7UHAoKTtEQSgpO1RVKCk7a1UoKTtSeSgpO0VVKCk7UEEoKTtfQSgpO2JVKCk7byhfaCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gaTModCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnJvdW5kKHQqKDEtcikrZSpyKX19dmFyIFNVPU0oKCk9PnsidXNlIHN0cmljdCI7byhpMywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gczModCxlLHIsbixpLGEpe3ZhciBzLGwsdTtyZXR1cm4ocz1NYXRoLnNxcnQodCp0K2UqZSkpJiYodC89cyxlLz1zKSwodT10KnIrZSpuKSYmKHItPXQqdSxuLT1lKnUpLChsPU1hdGguc3FydChyKnIrbipuKSkmJihyLz1sLG4vPWwsdS89bCksdCpuPGUqciYmKHQ9LXQsZT0tZSx1PS11LHM9LXMpLHt0cmFuc2xhdGVYOmksdHJhbnNsYXRlWTphLHJvdGF0ZTpNYXRoLmF0YW4yKGUsdCkqQ1Usc2tld1g6TWF0aC5hdGFuKHUpKkNVLHNjYWxlWDpzLHNjYWxlWTpsfX12YXIgQ1UsYTMsQVU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtDVT0xODAvTWF0aC5QSSxhMz17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtvKHMzLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBfVSh0KXtsZXQgZT1uZXcodHlwZW9mIERPTU1hdHJpeD09ImZ1bmN0aW9uIj9ET01NYXRyaXg6V2ViS2l0Q1NTTWF0cml4KSh0KyIiKTtyZXR1cm4gZS5pc0lkZW50aXR5P2EzOnMzKGUuYSxlLmIsZS5jLGUuZCxlLmUsZS5mKX1mdW5jdGlvbiBMVSh0KXtyZXR1cm4gdD09bnVsbD9hMzoobzN8fChvMz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxvMy5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCksKHQ9bzMudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KHQ9dC5tYXRyaXgsczModC5hLHQuYix0LmMsdC5kLHQuZSx0LmYpKTphMyl9dmFyIG8zLERVPU0oKCk9PnsidXNlIHN0cmljdCI7QVUoKTtvKF9VLCJwYXJzZUNzcyIpO28oTFUsInBhcnNlU3ZnIil9KTtmdW5jdGlvbiBOVSh0LGUscixuKXtmdW5jdGlvbiBpKGgpe3JldHVybiBoLmxlbmd0aD9oLnBvcCgpKyIgIjoiIn1vKGksInBvcCIpO2Z1bmN0aW9uIGEoaCxmLGQscCxtLGcpe2lmKGghPT1kfHxmIT09cCl7dmFyIHk9bS5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGUsbnVsbCxyKTtnLnB1c2goe2k6eS00LHg6ZWEoaCxkKX0se2k6eS0yLHg6ZWEoZixwKX0pfWVsc2UoZHx8cCkmJm0ucHVzaCgidHJhbnNsYXRlKCIrZCtlK3Arcil9byhhLCJ0cmFuc2xhdGUiKTtmdW5jdGlvbiBzKGgsZixkLHApe2ghPT1mPyhoLWY+MTgwP2YrPTM2MDpmLWg+MTgwJiYoaCs9MzYwKSxwLnB1c2goe2k6ZC5wdXNoKGkoZCkrInJvdGF0ZSgiLG51bGwsbiktMix4OmVhKGgsZil9KSk6ZiYmZC5wdXNoKGkoZCkrInJvdGF0ZSgiK2Yrbil9byhzLCJyb3RhdGUiKTtmdW5jdGlvbiBsKGgsZixkLHApe2ghPT1mP3AucHVzaCh7aTpkLnB1c2goaShkKSsic2tld1goIixudWxsLG4pLTIseDplYShoLGYpfSk6ZiYmZC5wdXNoKGkoZCkrInNrZXdYKCIrZituKX1vKGwsInNrZXdYIik7ZnVuY3Rpb24gdShoLGYsZCxwLG0sZyl7aWYoaCE9PWR8fGYhPT1wKXt2YXIgeT1tLnB1c2goaShtKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7Zy5wdXNoKHtpOnktNCx4OmVhKGgsZCl9LHtpOnktMix4OmVhKGYscCl9KX1lbHNlKGQhPT0xfHxwIT09MSkmJm0ucHVzaChpKG0pKyJzY2FsZSgiK2QrIiwiK3ArIikiKX1yZXR1cm4gbyh1LCJzY2FsZSIpLGZ1bmN0aW9uKGgsZil7dmFyIGQ9W10scD1bXTtyZXR1cm4gaD10KGgpLGY9dChmKSxhKGgudHJhbnNsYXRlWCxoLnRyYW5zbGF0ZVksZi50cmFuc2xhdGVYLGYudHJhbnNsYXRlWSxkLHApLHMoaC5yb3RhdGUsZi5yb3RhdGUsZCxwKSxsKGguc2tld1gsZi5za2V3WCxkLHApLHUoaC5zY2FsZVgsaC5zY2FsZVksZi5zY2FsZVgsZi5zY2FsZVksZCxwKSxoPWY9bnVsbCxmdW5jdGlvbihtKXtmb3IodmFyIGc9LTEseT1wLmxlbmd0aCx2OysrZzx5OylkWyh2PXBbZ10pLmldPXYueChtKTtyZXR1cm4gZC5qb2luKCIiKX19fXZhciBCQSxGQSxSVT1NKCgpPT57InVzZSBzdHJpY3QiO1J5KCk7RFUoKTtvKE5VLCJpbnRlcnBvbGF0ZVRyYW5zZm9ybSIpO0JBPU5VKF9VLCJweCwgIiwicHgpIiwiZGVnKSIpLEZBPU5VKExVLCIsICIsIikiLCIpIil9KTtmdW5jdGlvbiBNVSh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgbj10KChlPU55KGUpKS5oLChyPU55KHIpKS5oKSxpPWJ1KGUuYyxyLmMpLGE9YnUoZS5sLHIubCkscz1idShlLm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24obCl7cmV0dXJuIGUuaD1uKGwpLGUuYz1pKGwpLGUubD1hKGwpLGUub3BhY2l0eT1zKGwpLGUrIiJ9fX12YXIgekEscHdlLElVPU0oKCk9PnsidXNlIHN0cmljdCI7UHAoKTtMQSgpO28oTVUsImhjbCIpO3pBPU1VKGdVKSxwd2U9TVUoYnUpfSk7dmFyIHpwPU0oKCk9PnsidXNlIHN0cmljdCI7bjMoKTtSeSgpO1NVKCk7UEEoKTtSVSgpO0RBKCk7SVUoKX0pO2Z1bmN0aW9uIEZ5KCl7cmV0dXJuIGRkfHwoQlUobXdlKSxkZD1QeS5ub3coKSt1Myl9ZnVuY3Rpb24gbXdlKCl7ZGQ9MH1mdW5jdGlvbiBCeSgpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gaDModCxlLHIpe3ZhciBuPW5ldyBCeTtyZXR1cm4gbi5yZXN0YXJ0KHQsZSxyKSxufWZ1bmN0aW9uIEZVKCl7RnkoKSwrK0dwO2Zvcih2YXIgdD1sMyxlO3Q7KShlPWRkLXQuX3RpbWUpPj0wJiZ0Ll9jYWxsLmNhbGwodm9pZCAwLGUpLHQ9dC5fbmV4dDstLUdwfWZ1bmN0aW9uIE9VKCl7ZGQ9KGMzPVB5Lm5vdygpKSt1MyxHcD1JeT0wO3RyeXtGVSgpfWZpbmFsbHl7R3A9MCx5d2UoKSxkZD0wfX1mdW5jdGlvbiBnd2UoKXt2YXIgdD1QeS5ub3coKSxlPXQtYzM7ZT5QVSYmKHUzLT1lLGMzPXQpfWZ1bmN0aW9uIHl3ZSgpe2Zvcih2YXIgdCxlPWwzLHIsbj0xLzA7ZTspZS5fY2FsbD8obj5lLl90aW1lJiYobj1lLl90aW1lKSx0PWUsZT1lLl9uZXh0KToocj1lLl9uZXh0LGUuX25leHQ9bnVsbCxlPXQ/dC5fbmV4dD1yOmwzPXIpO095PXQsR0Eobil9ZnVuY3Rpb24gR0EodCl7aWYoIUdwKXtJeSYmKEl5PWNsZWFyVGltZW91dChJeSkpO3ZhciBlPXQtZGQ7ZT4yND8odDwxLzAmJihJeT1zZXRUaW1lb3V0KE9VLHQtUHkubm93KCktdTMpKSxNeSYmKE15PWNsZWFySW50ZXJ2YWwoTXkpKSk6KE15fHwoYzM9UHkubm93KCksTXk9c2V0SW50ZXJ2YWwoZ3dlLFBVKSksR3A9MSxCVShPVSkpfX12YXIgR3AsSXksTXksUFUsbDMsT3ksYzMsZGQsdTMsUHksQlUsJEE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtHcD0wLEl5PTAsTXk9MCxQVT0xZTMsYzM9MCxkZD0wLHUzPTAsUHk9dHlwZW9mIHBlcmZvcm1hbmNlPT0ib2JqZWN0IiYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUsQlU9dHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24odCl7c2V0VGltZW91dCh0LDE3KX07byhGeSwibm93Iik7byhtd2UsImNsZWFyTm93Iik7byhCeSwiVGltZXIiKTtCeS5wcm90b3R5cGU9aDMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpCeSxyZXN0YXJ0Om8oZnVuY3Rpb24odCxlLHIpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7cj0ocj09bnVsbD9GeSgpOityKSsoZT09bnVsbD8wOitlKSwhdGhpcy5fbmV4dCYmT3khPT10aGlzJiYoT3k/T3kuX25leHQ9dGhpczpsMz10aGlzLE95PXRoaXMpLHRoaXMuX2NhbGw9dCx0aGlzLl90aW1lPXIsR0EoKX0sInJlc3RhcnQiKSxzdG9wOm8oZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLEdBKCkpfSwic3RvcCIpfTtvKGgzLCJ0aW1lciIpO28oRlUsInRpbWVyRmx1c2giKTtvKE9VLCJ3YWtlIik7byhnd2UsInBva2UiKTtvKHl3ZSwibmFwIik7byhHQSwic2xlZXAiKX0pO2Z1bmN0aW9uIHp5KHQsZSxyKXt2YXIgbj1uZXcgQnk7cmV0dXJuIGU9ZT09bnVsbD8wOitlLG4ucmVzdGFydChpPT57bi5zdG9wKCksdChpK2UpfSxlLHIpLG59dmFyIHpVPU0oKCk9PnsidXNlIHN0cmljdCI7JEEoKTtvKHp5LCJkZWZhdWx0Iil9KTt2YXIgZjM9TSgoKT0+eyJ1c2Ugc3RyaWN0IjskQSgpO3pVKCl9KTtmdW5jdGlvbiB3dSh0LGUscixuLGksYSl7dmFyIHM9dC5fX3RyYW5zaXRpb247aWYoIXMpdC5fX3RyYW5zaXRpb249e307ZWxzZSBpZihyIGluIHMpcmV0dXJuO2J3ZSh0LHIse25hbWU6ZSxpbmRleDpuLGdyb3VwOmksb246dndlLHR3ZWVuOnh3ZSx0aW1lOmEudGltZSxkZWxheTphLmRlbGF5LGR1cmF0aW9uOmEuZHVyYXRpb24sZWFzZTphLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTpWVX0pfWZ1bmN0aW9uICR5KHQsZSl7dmFyIHI9emkodCxlKTtpZihyLnN0YXRlPlZVKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkIik7cmV0dXJuIHJ9ZnVuY3Rpb24gcGEodCxlKXt2YXIgcj16aSh0LGUpO2lmKHIuc3RhdGU+ZDMpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nIik7cmV0dXJuIHJ9ZnVuY3Rpb24gemkodCxlKXt2YXIgcj10Ll9fdHJhbnNpdGlvbjtpZighcnx8IShyPXJbZV0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gcn1mdW5jdGlvbiBid2UodCxlLHIpe3ZhciBuPXQuX190cmFuc2l0aW9uLGk7bltlXT1yLHIudGltZXI9aDMoYSwwLHIudGltZSk7ZnVuY3Rpb24gYShoKXtyLnN0YXRlPUdVLHIudGltZXIucmVzdGFydChzLHIuZGVsYXksci50aW1lKSxyLmRlbGF5PD1oJiZzKGgtci5kZWxheSl9byhhLCJzY2hlZHVsZSIpO2Z1bmN0aW9uIHMoaCl7dmFyIGYsZCxwLG07aWYoci5zdGF0ZSE9PUdVKXJldHVybiB1KCk7Zm9yKGYgaW4gbilpZihtPW5bZl0sbS5uYW1lPT09ci5uYW1lKXtpZihtLnN0YXRlPT09ZDMpcmV0dXJuIHp5KHMpO20uc3RhdGU9PT0kVT8obS5zdGF0ZT1HeSxtLnRpbWVyLnN0b3AoKSxtLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLG0uaW5kZXgsbS5ncm91cCksZGVsZXRlIG5bZl0pOitmPGUmJihtLnN0YXRlPUd5LG0udGltZXIuc3RvcCgpLG0ub24uY2FsbCgiY2FuY2VsIix0LHQuX19kYXRhX18sbS5pbmRleCxtLmdyb3VwKSxkZWxldGUgbltmXSl9aWYoenkoZnVuY3Rpb24oKXtyLnN0YXRlPT09ZDMmJihyLnN0YXRlPSRVLHIudGltZXIucmVzdGFydChsLHIuZGVsYXksci50aW1lKSxsKGgpKX0pLHIuc3RhdGU9cDMsci5vbi5jYWxsKCJzdGFydCIsdCx0Ll9fZGF0YV9fLHIuaW5kZXgsci5ncm91cCksci5zdGF0ZT09PXAzKXtmb3Ioci5zdGF0ZT1kMyxpPW5ldyBBcnJheShwPXIudHdlZW4ubGVuZ3RoKSxmPTAsZD0tMTtmPHA7KytmKShtPXIudHdlZW5bZl0udmFsdWUuY2FsbCh0LHQuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSkmJihpWysrZF09bSk7aS5sZW5ndGg9ZCsxfX1vKHMsInN0YXJ0Iik7ZnVuY3Rpb24gbChoKXtmb3IodmFyIGY9aDxyLmR1cmF0aW9uP3IuZWFzZS5jYWxsKG51bGwsaC9yLmR1cmF0aW9uKTooci50aW1lci5yZXN0YXJ0KHUpLHIuc3RhdGU9bTMsMSksZD0tMSxwPWkubGVuZ3RoOysrZDxwOylpW2RdLmNhbGwodCxmKTtyLnN0YXRlPT09bTMmJihyLm9uLmNhbGwoImVuZCIsdCx0Ll9fZGF0YV9fLHIuaW5kZXgsci5ncm91cCksdSgpKX1vKGwsInRpY2siKTtmdW5jdGlvbiB1KCl7ci5zdGF0ZT1HeSxyLnRpbWVyLnN0b3AoKSxkZWxldGUgbltlXTtmb3IodmFyIGggaW4gbilyZXR1cm47ZGVsZXRlIHQuX190cmFuc2l0aW9ufW8odSwic3RvcCIpfXZhciB2d2UseHdlLFZVLEdVLHAzLGQzLCRVLG0zLEd5LENzPU0oKCk9PnsidXNlIHN0cmljdCI7VDcoKTtmMygpO3Z3ZT13Nygic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSx4d2U9W10sVlU9MCxHVT0xLHAzPTIsZDM9MywkVT00LG0zPTUsR3k9NjtvKHd1LCJkZWZhdWx0Iik7bygkeSwiaW5pdCIpO28ocGEsInNldCIpO28oemksImdldCIpO28oYndlLCJjcmVhdGUiKX0pO2Z1bmN0aW9uIFZ5KHQsZSl7dmFyIHI9dC5fX3RyYW5zaXRpb24sbixpLGE9ITAscztpZihyKXtlPWU9PW51bGw/bnVsbDplKyIiO2ZvcihzIGluIHIpe2lmKChuPXJbc10pLm5hbWUhPT1lKXthPSExO2NvbnRpbnVlfWk9bi5zdGF0ZT5wMyYmbi5zdGF0ZTxtMyxuLnN0YXRlPUd5LG4udGltZXIuc3RvcCgpLG4ub24uY2FsbChpPyJpbnRlcnJ1cHQiOiJjYW5jZWwiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLGRlbGV0ZSByW3NdfWEmJmRlbGV0ZSB0Ll9fdHJhbnNpdGlvbn19dmFyIFVVPU0oKCk9PnsidXNlIHN0cmljdCI7Q3MoKTtvKFZ5LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBWQSh0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7VnkodGhpcyx0KX0pfXZhciBIVT1NKCgpPT57InVzZSBzdHJpY3QiO1VVKCk7byhWQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gd3dlKHQsZSl7dmFyIHIsbjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT1wYSh0aGlzLHQpLGE9aS50d2VlbjtpZihhIT09cil7bj1yPWE7Zm9yKHZhciBzPTAsbD1uLmxlbmd0aDtzPGw7KytzKWlmKG5bc10ubmFtZT09PWUpe249bi5zbGljZSgpLG4uc3BsaWNlKHMsMSk7YnJlYWt9fWkudHdlZW49bn19ZnVuY3Rpb24gVHdlKHQsZSxyKXt2YXIgbixpO2lmKHR5cGVvZiByIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1wYSh0aGlzLHQpLHM9YS50d2VlbjtpZihzIT09bil7aT0obj1zKS5zbGljZSgpO2Zvcih2YXIgbD17bmFtZTplLHZhbHVlOnJ9LHU9MCxoPWkubGVuZ3RoO3U8aDsrK3UpaWYoaVt1XS5uYW1lPT09ZSl7aVt1XT1sO2JyZWFrfXU9PT1oJiZpLnB1c2gobCl9YS50d2Vlbj1pfX1mdW5jdGlvbiBVQSh0LGUpe3ZhciByPXRoaXMuX2lkO2lmKHQrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPXppKHRoaXMubm9kZSgpLHIpLnR3ZWVuLGk9MCxhPW4ubGVuZ3RoLHM7aTxhOysraSlpZigocz1uW2ldKS5uYW1lPT09dClyZXR1cm4gcy52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChlPT1udWxsP3d3ZTpUd2UpKHIsdCxlKSl9ZnVuY3Rpb24gJHAodCxlLHIpe3ZhciBuPXQuX2lkO3JldHVybiB0LmVhY2goZnVuY3Rpb24oKXt2YXIgaT1wYSh0aGlzLG4pOyhpLnZhbHVlfHwoaS52YWx1ZT17fSkpW2VdPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaSl7cmV0dXJuIHppKGksbikudmFsdWVbZV19fXZhciBVeT1NKCgpPT57InVzZSBzdHJpY3QiO0NzKCk7byh3d2UsInR3ZWVuUmVtb3ZlIik7byhUd2UsInR3ZWVuRnVuY3Rpb24iKTtvKFVBLCJkZWZhdWx0Iik7bygkcCwidHdlZW5WYWx1ZSIpfSk7ZnVuY3Rpb24gSHkodCxlKXt2YXIgcjtyZXR1cm4odHlwZW9mIGU9PSJudW1iZXIiP2VhOmUgaW5zdGFuY2VvZiBFbD9mZDoocj1FbChlKSk/KGU9cixmZCk6RnApKHQsZSl9dmFyIEhBPU0oKCk9PnsidXNlIHN0cmljdCI7UHAoKTt6cCgpO28oSHksImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGt3ZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gRXdlKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gU3dlKHQsZSxyKXt2YXIgbixpPXIrIiIsYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz10aGlzLmdldEF0dHJpYnV0ZSh0KTtyZXR1cm4gcz09PWk/bnVsbDpzPT09bj9hOmE9ZShuPXMscil9fWZ1bmN0aW9uIEN3ZSh0LGUscil7dmFyIG4saT1yKyIiLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpO3JldHVybiBzPT09aT9udWxsOnM9PT1uP2E6YT1lKG49cyxyKX19ZnVuY3Rpb24gQXdlKHQsZSxyKXt2YXIgbixpLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHMsbD1yKHRoaXMpLHU7cmV0dXJuIGw9PW51bGw/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KToocz10aGlzLmdldEF0dHJpYnV0ZSh0KSx1PWwrIiIscz09PXU/bnVsbDpzPT09biYmdT09PWk/YTooaT11LGE9ZShuPXMsbCkpKX19ZnVuY3Rpb24gX3dlKHQsZSxyKXt2YXIgbixpLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHMsbD1yKHRoaXMpLHU7cmV0dXJuIGw9PW51bGw/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6KHM9dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpLHU9bCsiIixzPT09dT9udWxsOnM9PT1uJiZ1PT09aT9hOihpPXUsYT1lKG49cyxsKSkpfX1mdW5jdGlvbiBXQSh0LGUpe3ZhciByPXBjKHQpLG49cj09PSJ0cmFuc2Zvcm0iP0ZBOkh5O3JldHVybiB0aGlzLmF0dHJUd2Vlbih0LHR5cGVvZiBlPT0iZnVuY3Rpb24iPyhyLmxvY2FsP193ZTpBd2UpKHIsbiwkcCh0aGlzLCJhdHRyLiIrdCxlKSk6ZT09bnVsbD8oci5sb2NhbD9Fd2U6a3dlKShyKTooci5sb2NhbD9Dd2U6U3dlKShyLG4sZSkpfXZhciBXVT1NKCgpPT57InVzZSBzdHJpY3QiO3pwKCk7VGwoKTtVeSgpO0hBKCk7byhrd2UsImF0dHJSZW1vdmUiKTtvKEV3ZSwiYXR0clJlbW92ZU5TIik7byhTd2UsImF0dHJDb25zdGFudCIpO28oQ3dlLCJhdHRyQ29uc3RhbnROUyIpO28oQXdlLCJhdHRyRnVuY3Rpb24iKTtvKF93ZSwiYXR0ckZ1bmN0aW9uTlMiKTtvKFdBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBMd2UodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dGhpcy5zZXRBdHRyaWJ1dGUodCxlLmNhbGwodGhpcyxyKSl9fWZ1bmN0aW9uIER3ZSh0LGUpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlLmNhbGwodGhpcyxyKSl9fWZ1bmN0aW9uIE53ZSh0LGUpe3ZhciByLG47ZnVuY3Rpb24gaSgpe3ZhciBhPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBhIT09biYmKHI9KG49YSkmJkR3ZSh0LGEpKSxyfXJldHVybiBvKGksInR3ZWVuIiksaS5fdmFsdWU9ZSxpfWZ1bmN0aW9uIFJ3ZSh0LGUpe3ZhciByLG47ZnVuY3Rpb24gaSgpe3ZhciBhPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBhIT09biYmKHI9KG49YSkmJkx3ZSh0LGEpKSxyfXJldHVybiBvKGksInR3ZWVuIiksaS5fdmFsdWU9ZSxpfWZ1bmN0aW9uIFlBKHQsZSl7dmFyIHI9ImF0dHIuIit0O2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4ocj10aGlzLnR3ZWVuKHIpKSYmci5fdmFsdWU7aWYoZT09bnVsbClyZXR1cm4gdGhpcy50d2VlbihyLG51bGwpO2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjt2YXIgbj1wYyh0KTtyZXR1cm4gdGhpcy50d2VlbihyLChuLmxvY2FsP053ZTpSd2UpKG4sZSkpfXZhciBZVT1NKCgpPT57InVzZSBzdHJpY3QiO1RsKCk7byhMd2UsImF0dHJJbnRlcnBvbGF0ZSIpO28oRHdlLCJhdHRySW50ZXJwb2xhdGVOUyIpO28oTndlLCJhdHRyVHdlZW5OUyIpO28oUndlLCJhdHRyVHdlZW4iKTtvKFlBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBNd2UodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXskeSh0aGlzLHQpLmRlbGF5PStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gSXdlKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXskeSh0aGlzLHQpLmRlbGF5PWV9fWZ1bmN0aW9uIHFBKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/TXdlOkl3ZSkoZSx0KSk6emkodGhpcy5ub2RlKCksZSkuZGVsYXl9dmFyIHFVPU0oKCk9PnsidXNlIHN0cmljdCI7Q3MoKTtvKE13ZSwiZGVsYXlGdW5jdGlvbiIpO28oSXdlLCJkZWxheUNvbnN0YW50Iik7byhxQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gT3dlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cGEodGhpcyx0KS5kdXJhdGlvbj0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIFB3ZSh0LGUpe3JldHVybiBlPStlLGZ1bmN0aW9uKCl7cGEodGhpcyx0KS5kdXJhdGlvbj1lfX1mdW5jdGlvbiBYQSh0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP093ZTpQd2UpKGUsdCkpOnppKHRoaXMubm9kZSgpLGUpLmR1cmF0aW9ufXZhciBYVT1NKCgpPT57InVzZSBzdHJpY3QiO0NzKCk7byhPd2UsImR1cmF0aW9uRnVuY3Rpb24iKTtvKFB3ZSwiZHVyYXRpb25Db25zdGFudCIpO28oWEEsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEJ3ZSh0LGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtwYSh0aGlzLHQpLmVhc2U9ZX19ZnVuY3Rpb24gakEodCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKEJ3ZShlLHQpKTp6aSh0aGlzLm5vZGUoKSxlKS5lYXNlfXZhciBqVT1NKCgpPT57InVzZSBzdHJpY3QiO0NzKCk7byhCd2UsImVhc2VDb25zdGFudCIpO28oakEsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEZ3ZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKHR5cGVvZiByIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtwYSh0aGlzLHQpLmVhc2U9cn19ZnVuY3Rpb24gS0EodCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLmVhY2goRndlKHRoaXMuX2lkLHQpKX12YXIgS1U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtDcygpO28oRndlLCJlYXNlVmFyeWluZyIpO28oS0EsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFFBKHQpe3R5cGVvZiB0IT0iZnVuY3Rpb24iJiYodD1OcCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxyPWUubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgYT1lW2ldLHM9YS5sZW5ndGgsbD1uW2ldPVtdLHUsaD0wO2g8czsrK2gpKHU9YVtoXSkmJnQuY2FsbCh1LHUuX19kYXRhX18saCxhKSYmbC5wdXNoKHUpO3JldHVybiBuZXcgcnMobix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBRVT1NKCgpPT57InVzZSBzdHJpY3QiO1RsKCk7cGQoKTtvKFFBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBaQSh0KXtpZih0Ll9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHI9dC5fZ3JvdXBzLG49ZS5sZW5ndGgsaT1yLmxlbmd0aCxhPU1hdGgubWluKG4saSkscz1uZXcgQXJyYXkobiksbD0wO2w8YTsrK2wpZm9yKHZhciB1PWVbbF0saD1yW2xdLGY9dS5sZW5ndGgsZD1zW2xdPW5ldyBBcnJheShmKSxwLG09MDttPGY7KyttKShwPXVbbV18fGhbbV0pJiYoZFttXT1wKTtmb3IoO2w8bjsrK2wpc1tsXT1lW2xdO3JldHVybiBuZXcgcnMocyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBaVT1NKCgpPT57InVzZSBzdHJpY3QiO3BkKCk7byhaQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gendlKHQpe3JldHVybih0KyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoZnVuY3Rpb24oZSl7dmFyIHI9ZS5pbmRleE9mKCIuIik7cmV0dXJuIHI+PTAmJihlPWUuc2xpY2UoMCxyKSksIWV8fGU9PT0ic3RhcnQifSl9ZnVuY3Rpb24gR3dlKHQsZSxyKXt2YXIgbixpLGE9endlKGUpPyR5OnBhO3JldHVybiBmdW5jdGlvbigpe3ZhciBzPWEodGhpcyx0KSxsPXMub247bCE9PW4mJihpPShuPWwpLmNvcHkoKSkub24oZSxyKSxzLm9uPWl9fWZ1bmN0aW9uIEpBKHQsZSl7dmFyIHI9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj96aSh0aGlzLm5vZGUoKSxyKS5vbi5vbih0KTp0aGlzLmVhY2goR3dlKHIsdCxlKSl9dmFyIEpVPU0oKCk9PnsidXNlIHN0cmljdCI7Q3MoKTtvKHp3ZSwic3RhcnQiKTtvKEd3ZSwib25GdW5jdGlvbiIpO28oSkEsImRlZmF1bHQiKX0pO2Z1bmN0aW9uICR3ZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciByIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtyIT09dClyZXR1cm47ZSYmZS5yZW1vdmVDaGlsZCh0aGlzKX19ZnVuY3Rpb24gZTgoKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsJHdlKHRoaXMuX2lkKSl9dmFyIGVIPU0oKCk9PnsidXNlIHN0cmljdCI7bygkd2UsInJlbW92ZUZ1bmN0aW9uIik7byhlOCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gdDgodCl7dmFyIGU9dGhpcy5fbmFtZSxyPXRoaXMuX2lkO3R5cGVvZiB0IT0iZnVuY3Rpb24iJiYodD1FaCh0KSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLGE9bmV3IEFycmF5KGkpLHM9MDtzPGk7KytzKWZvcih2YXIgbD1uW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLGQscD0wO3A8dTsrK3ApKGY9bFtwXSkmJihkPXQuY2FsbChmLGYuX19kYXRhX18scCxsKSkmJigiX19kYXRhX18iaW4gZiYmKGQuX19kYXRhX189Zi5fX2RhdGFfXyksaFtwXT1kLHd1KGhbcF0sZSxyLHAsaCx6aShmLHIpKSk7cmV0dXJuIG5ldyBycyhhLHRoaXMuX3BhcmVudHMsZSxyKX12YXIgdEg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtUbCgpO3BkKCk7Q3MoKTtvKHQ4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiByOCh0KXt2YXIgZT10aGlzLl9uYW1lLHI9dGhpcy5faWQ7dHlwZW9mIHQhPSJmdW5jdGlvbiImJih0PURwKHQpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsYT1bXSxzPVtdLGw9MDtsPGk7KytsKWZvcih2YXIgdT1uW2xdLGg9dS5sZW5ndGgsZixkPTA7ZDxoOysrZClpZihmPXVbZF0pe2Zvcih2YXIgcD10LmNhbGwoZixmLl9fZGF0YV9fLGQsdSksbSxnPXppKGYscikseT0wLHY9cC5sZW5ndGg7eTx2OysreSkobT1wW3ldKSYmd3UobSxlLHIseSxwLGcpO2EucHVzaChwKSxzLnB1c2goZil9cmV0dXJuIG5ldyBycyhhLHMsZSxyKX12YXIgckg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtUbCgpO3BkKCk7Q3MoKTtvKHI4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBuOCgpe3JldHVybiBuZXcgVndlKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX12YXIgVndlLG5IPU0oKCk9PnsidXNlIHN0cmljdCI7VGwoKTtWd2U9dnUucHJvdG90eXBlLmNvbnN0cnVjdG9yO28objgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFV3ZSh0LGUpe3ZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1TaCh0aGlzLHQpLHM9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksU2godGhpcyx0KSk7cmV0dXJuIGE9PT1zP251bGw6YT09PXImJnM9PT1uP2k6aT1lKHI9YSxuPXMpfX1mdW5jdGlvbiBpSCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBId2UodCxlLHIpe3ZhciBuLGk9cisiIixhO3JldHVybiBmdW5jdGlvbigpe3ZhciBzPVNoKHRoaXMsdCk7cmV0dXJuIHM9PT1pP251bGw6cz09PW4/YTphPWUobj1zLHIpfX1mdW5jdGlvbiBXd2UodCxlLHIpe3ZhciBuLGksYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz1TaCh0aGlzLHQpLGw9cih0aGlzKSx1PWwrIiI7cmV0dXJuIGw9PW51bGwmJih1PWw9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksU2godGhpcyx0KSkpLHM9PT11P251bGw6cz09PW4mJnU9PT1pP2E6KGk9dSxhPWUobj1zLGwpKX19ZnVuY3Rpb24gWXdlKHQsZSl7dmFyIHIsbixpLGE9InN0eWxlLiIrZSxzPSJlbmQuIithLGw7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHU9cGEodGhpcyx0KSxoPXUub24sZj11LnZhbHVlW2FdPT1udWxsP2x8fChsPWlIKGUpKTp2b2lkIDA7KGghPT1yfHxpIT09ZikmJihuPShyPWgpLmNvcHkoKSkub24ocyxpPWYpLHUub249bn19ZnVuY3Rpb24gaTgodCxlLHIpe3ZhciBuPSh0Kz0iIik9PSJ0cmFuc2Zvcm0iP0JBOkh5O3JldHVybiBlPT1udWxsP3RoaXMuc3R5bGVUd2Vlbih0LFV3ZSh0LG4pKS5vbigiZW5kLnN0eWxlLiIrdCxpSCh0KSk6dHlwZW9mIGU9PSJmdW5jdGlvbiI/dGhpcy5zdHlsZVR3ZWVuKHQsV3dlKHQsbiwkcCh0aGlzLCJzdHlsZS4iK3QsZSkpKS5lYWNoKFl3ZSh0aGlzLl9pZCx0KSk6dGhpcy5zdHlsZVR3ZWVuKHQsSHdlKHQsbixlKSxyKS5vbigiZW5kLnN0eWxlLiIrdCxudWxsKX12YXIgYUg9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt6cCgpO1RsKCk7Q3MoKTtVeSgpO0hBKCk7byhVd2UsInN0eWxlTnVsbCIpO28oaUgsInN0eWxlUmVtb3ZlIik7byhId2UsInN0eWxlQ29uc3RhbnQiKTtvKFd3ZSwic3R5bGVGdW5jdGlvbiIpO28oWXdlLCJzdHlsZU1heWJlUmVtb3ZlIik7byhpOCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gcXdlKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24obil7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUuY2FsbCh0aGlzLG4pLHIpfX1mdW5jdGlvbiBYd2UodCxlLHIpe3ZhciBuLGk7ZnVuY3Rpb24gYSgpe3ZhciBzPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBzIT09aSYmKG49KGk9cykmJnF3ZSh0LHMscikpLG59cmV0dXJuIG8oYSwidHdlZW4iKSxhLl92YWx1ZT1lLGF9ZnVuY3Rpb24gYTgodCxlLHIpe3ZhciBuPSJzdHlsZS4iKyh0Kz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihuPXRoaXMudHdlZW4obikpJiZuLl92YWx1ZTtpZihlPT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKG4sbnVsbCk7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKG4sWHdlKHQsZSxyPz8iIikpfXZhciBzSD1NKCgpPT57InVzZSBzdHJpY3QiO28ocXdlLCJzdHlsZUludGVycG9sYXRlIik7byhYd2UsInN0eWxlVHdlZW4iKTtvKGE4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBqd2UodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiBLd2UodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTt0aGlzLnRleHRDb250ZW50PWU/PyIifX1mdW5jdGlvbiBzOCh0KXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsdHlwZW9mIHQ9PSJmdW5jdGlvbiI/S3dlKCRwKHRoaXMsInRleHQiLHQpKTpqd2UodD09bnVsbD8iIjp0KyIiKSl9dmFyIG9IPU0oKCk9PnsidXNlIHN0cmljdCI7VXkoKTtvKGp3ZSwidGV4dENvbnN0YW50Iik7byhLd2UsInRleHRGdW5jdGlvbiIpO28oczgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFF3ZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dGhpcy50ZXh0Q29udGVudD10LmNhbGwodGhpcyxlKX19ZnVuY3Rpb24gWndlKHQpe3ZhciBlLHI7ZnVuY3Rpb24gbigpe3ZhciBpPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpIT09ciYmKGU9KHI9aSkmJlF3ZShpKSksZX1yZXR1cm4gbyhuLCJ0d2VlbiIpLG4uX3ZhbHVlPXQsbn1mdW5jdGlvbiBvOCh0KXt2YXIgZT0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybihlPXRoaXMudHdlZW4oZSkpJiZlLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKGUsbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKGUsWndlKHQpKX12YXIgbEg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKFF3ZSwidGV4dEludGVycG9sYXRlIik7byhad2UsInRleHRUd2VlbiIpO28obzgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGw4KCl7Zm9yKHZhciB0PXRoaXMuX25hbWUsZT10aGlzLl9pZCxyPWczKCksbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxhPTA7YTxpOysrYSlmb3IodmFyIHM9blthXSxsPXMubGVuZ3RoLHUsaD0wO2g8bDsrK2gpaWYodT1zW2hdKXt2YXIgZj16aSh1LGUpO3d1KHUsdCxyLGgscyx7dGltZTpmLnRpbWUrZi5kZWxheStmLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246Zi5kdXJhdGlvbixlYXNlOmYuZWFzZX0pfXJldHVybiBuZXcgcnMobix0aGlzLl9wYXJlbnRzLHQscil9dmFyIGNIPU0oKCk9PnsidXNlIHN0cmljdCI7cGQoKTtDcygpO28obDgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGM4KCl7dmFyIHQsZSxyPXRoaXMsbj1yLl9pZCxpPXIuc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihhLHMpe3ZhciBsPXt2YWx1ZTpzfSx1PXt2YWx1ZTpvKGZ1bmN0aW9uKCl7LS1pPT09MCYmYSgpfSwidmFsdWUiKX07ci5lYWNoKGZ1bmN0aW9uKCl7dmFyIGg9cGEodGhpcyxuKSxmPWgub247ZiE9PXQmJihlPSh0PWYpLmNvcHkoKSxlLl8uY2FuY2VsLnB1c2gobCksZS5fLmludGVycnVwdC5wdXNoKGwpLGUuXy5lbmQucHVzaCh1KSksaC5vbj1lfSksaT09PTAmJmEoKX0pfXZhciB1SD1NKCgpPT57InVzZSBzdHJpY3QiO0NzKCk7byhjOCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gcnModCxlLHIsbil7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lLHRoaXMuX25hbWU9cix0aGlzLl9pZD1ufWZ1bmN0aW9uIGhIKHQpe3JldHVybiB2dSgpLnRyYW5zaXRpb24odCl9ZnVuY3Rpb24gZzMoKXtyZXR1cm4rK0p3ZX12YXIgSndlLFR1LHBkPU0oKCk9PnsidXNlIHN0cmljdCI7VGwoKTtXVSgpO1lVKCk7cVUoKTtYVSgpO2pVKCk7S1UoKTtRVSgpO1pVKCk7SlUoKTtlSCgpO3RIKCk7ckgoKTtuSCgpO2FIKCk7c0goKTtvSCgpO2xIKCk7Y0goKTtVeSgpO3VIKCk7SndlPTA7byhycywiVHJhbnNpdGlvbiIpO28oaEgsInRyYW5zaXRpb24iKTtvKGczLCJuZXdJZCIpO1R1PXZ1LnByb3RvdHlwZTtycy5wcm90b3R5cGU9aEgucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpycyxzZWxlY3Q6dDgsc2VsZWN0QWxsOnI4LHNlbGVjdENoaWxkOlR1LnNlbGVjdENoaWxkLHNlbGVjdENoaWxkcmVuOlR1LnNlbGVjdENoaWxkcmVuLGZpbHRlcjpRQSxtZXJnZTpaQSxzZWxlY3Rpb246bjgsdHJhbnNpdGlvbjpsOCxjYWxsOlR1LmNhbGwsbm9kZXM6VHUubm9kZXMsbm9kZTpUdS5ub2RlLHNpemU6VHUuc2l6ZSxlbXB0eTpUdS5lbXB0eSxlYWNoOlR1LmVhY2gsb246SkEsYXR0cjpXQSxhdHRyVHdlZW46WUEsc3R5bGU6aTgsc3R5bGVUd2VlbjphOCx0ZXh0OnM4LHRleHRUd2VlbjpvOCxyZW1vdmU6ZTgsdHdlZW46VUEsZGVsYXk6cUEsZHVyYXRpb246WEEsZWFzZTpqQSxlYXNlVmFyeWluZzpLQSxlbmQ6YzgsW1N5bWJvbC5pdGVyYXRvcl06VHVbU3ltYm9sLml0ZXJhdG9yXX19KTtmdW5jdGlvbiB5Myh0KXtyZXR1cm4oKHQqPTIpPD0xP3QqdCp0Oih0LT0yKSp0KnQrMikvMn12YXIgZkg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHkzLCJjdWJpY0luT3V0Iil9KTt2YXIgdTg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtmSCgpfSk7ZnVuY3Rpb24gdFRlKHQsZSl7Zm9yKHZhciByOyEocj10Ll9fdHJhbnNpdGlvbil8fCEocj1yW2VdKTspaWYoISh0PXQucGFyZW50Tm9kZSkpdGhyb3cgbmV3IEVycm9yKGB0cmFuc2l0aW9uICR7ZX0gbm90IGZvdW5kYCk7cmV0dXJuIHJ9ZnVuY3Rpb24gaDgodCl7dmFyIGUscjt0IGluc3RhbmNlb2YgcnM/KGU9dC5faWQsdD10Ll9uYW1lKTooZT1nMygpLChyPWVUZSkudGltZT1GeSgpLHQ9dD09bnVsbD9udWxsOnQrIiIpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxhPTA7YTxpOysrYSlmb3IodmFyIHM9blthXSxsPXMubGVuZ3RoLHUsaD0wO2g8bDsrK2gpKHU9c1toXSkmJnd1KHUsdCxlLGgscyxyfHx0VGUodSxlKSk7cmV0dXJuIG5ldyBycyhuLHRoaXMuX3BhcmVudHMsdCxlKX12YXIgZVRlLGRIPU0oKCk9PnsidXNlIHN0cmljdCI7cGQoKTtDcygpO3U4KCk7ZjMoKTtlVGU9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOnkzfTtvKHRUZSwiaW5oZXJpdCIpO28oaDgsImRlZmF1bHQiKX0pO3ZhciBwSD1NKCgpPT57InVzZSBzdHJpY3QiO1RsKCk7SFUoKTtkSCgpO3Z1LnByb3RvdHlwZS5pbnRlcnJ1cHQ9VkE7dnUucHJvdG90eXBlLnRyYW5zaXRpb249aDh9KTt2YXIgdjM9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwSCgpfSk7dmFyIG1IPU0oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgZ0g9TSgoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciB5SD1NKCgpPT57InVzZSBzdHJpY3QifSk7ZnVuY3Rpb24gdkgodCl7cmV0dXJuWyt0WzBdLCt0WzFdXX1mdW5jdGlvbiByVGUodCl7cmV0dXJuW3ZIKHRbMF0pLHZIKHRbMV0pXX1mdW5jdGlvbiBmOCh0KXtyZXR1cm57dHlwZTp0fX12YXIgQWd0LF9ndCxMZ3QsRGd0LE5ndCxSZ3QseEg9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt2MygpO21IKCk7Z0goKTt5SCgpOyh7YWJzOkFndCxtYXg6X2d0LG1pbjpMZ3R9PU1hdGgpO28odkgsIm51bWJlcjEiKTtvKHJUZSwibnVtYmVyMiIpO0RndD17bmFtZToieCIsaGFuZGxlczpbInciLCJlIl0ubWFwKGY4KSxpbnB1dDpvKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PW51bGw/bnVsbDpbWyt0WzBdLGVbMF1bMV1dLFsrdFsxXSxlWzFdWzFdXV19LCJpbnB1dCIpLG91dHB1dDpvKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZbdFswXVswXSx0WzFdWzBdXX0sIm91dHB1dCIpfSxOZ3Q9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcChmOCksaW5wdXQ6byhmdW5jdGlvbih0LGUpe3JldHVybiB0PT1udWxsP251bGw6W1tlWzBdWzBdLCt0WzBdXSxbZVsxXVswXSwrdFsxXV1dfSwiaW5wdXQiKSxvdXRwdXQ6byhmdW5jdGlvbih0KXtyZXR1cm4gdCYmW3RbMF1bMV0sdFsxXVsxXV19LCJvdXRwdXQiKX0sUmd0PXtuYW1lOiJ4eSIsaGFuZGxlczpbIm4iLCJ3IiwiZSIsInMiLCJudyIsIm5lIiwic3ciLCJzZSJdLm1hcChmOCksaW5wdXQ6byhmdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD9udWxsOnJUZSh0KX0sImlucHV0Iiksb3V0cHV0Om8oZnVuY3Rpb24odCl7cmV0dXJuIHR9LCJvdXRwdXQiKX07byhmOCwidHlwZSIpfSk7dmFyIGJIPU0oKCk9PnsidXNlIHN0cmljdCI7eEgoKX0pO2Z1bmN0aW9uIHdIKHQpe3RoaXMuXys9dFswXTtmb3IobGV0IGU9MSxyPXQubGVuZ3RoO2U8cjsrK2UpdGhpcy5fKz1hcmd1bWVudHNbZV0rdFtlXX1mdW5jdGlvbiBpVGUodCl7bGV0IGU9TWF0aC5mbG9vcih0KTtpZighKGU+PTApKXRocm93IG5ldyBFcnJvcihgaW52YWxpZCBkaWdpdHM6ICR7dH1gKTtpZihlPjE1KXJldHVybiB3SDtsZXQgcj0xMCoqZTtyZXR1cm4gZnVuY3Rpb24obil7dGhpcy5fKz1uWzBdO2ZvcihsZXQgaT0xLGE9bi5sZW5ndGg7aTxhOysraSl0aGlzLl8rPU1hdGgucm91bmQoYXJndW1lbnRzW2ldKnIpL3IrbltpXX19ZnVuY3Rpb24gVEgoKXtyZXR1cm4gbmV3IGdkfXZhciBkOCxwOCxtZCxuVGUsZ2Qsa0g9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtkOD1NYXRoLlBJLHA4PTIqZDgsbWQ9MWUtNixuVGU9cDgtbWQ7byh3SCwiYXBwZW5kIik7byhpVGUsImFwcGVuZFJvdW5kIik7Z2Q9Y2xhc3N7c3RhdGlje28odGhpcywiUGF0aCIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIiLHRoaXMuX2FwcGVuZD1lPT1udWxsP3dIOmlUZShlKX1tb3ZlVG8oZSxyKXt0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDA9dGhpcy5feDE9K2V9LCR7dGhpcy5feTA9dGhpcy5feTE9K3J9YH1jbG9zZVBhdGgoKXt0aGlzLl94MSE9PW51bGwmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl9hcHBlbmRgWmApfWxpbmVUbyhlLHIpe3RoaXMuX2FwcGVuZGBMJHt0aGlzLl94MT0rZX0sJHt0aGlzLl95MT0rcn1gfXF1YWRyYXRpY0N1cnZlVG8oZSxyLG4saSl7dGhpcy5fYXBwZW5kYFEkeytlfSwkeytyfSwke3RoaXMuX3gxPStufSwke3RoaXMuX3kxPStpfWB9YmV6aWVyQ3VydmVUbyhlLHIsbixpLGEscyl7dGhpcy5fYXBwZW5kYEMkeytlfSwkeytyfSwkeytufSwkeytpfSwke3RoaXMuX3gxPSthfSwke3RoaXMuX3kxPStzfWB9YXJjVG8oZSxyLG4saSxhKXtpZihlPStlLHI9K3Isbj0rbixpPStpLGE9K2EsYTwwKXRocm93IG5ldyBFcnJvcihgbmVnYXRpdmUgcmFkaXVzOiAke2F9YCk7bGV0IHM9dGhpcy5feDEsbD10aGlzLl95MSx1PW4tZSxoPWktcixmPXMtZSxkPWwtcixwPWYqZitkKmQ7aWYodGhpcy5feDE9PT1udWxsKXRoaXMuX2FwcGVuZGBNJHt0aGlzLl94MT1lfSwke3RoaXMuX3kxPXJ9YDtlbHNlIGlmKHA+bWQpaWYoIShNYXRoLmFicyhkKnUtaCpmKT5tZCl8fCFhKXRoaXMuX2FwcGVuZGBMJHt0aGlzLl94MT1lfSwke3RoaXMuX3kxPXJ9YDtlbHNle2xldCBtPW4tcyxnPWktbCx5PXUqdStoKmgsdj1tKm0rZypnLHg9TWF0aC5zcXJ0KHkpLGI9TWF0aC5zcXJ0KHApLHc9YSpNYXRoLnRhbigoZDgtTWF0aC5hY29zKCh5K3AtdikvKDIqeCpiKSkpLzIpLF89dy9iLFQ9dy94O01hdGguYWJzKF8tMSk+bWQmJnRoaXMuX2FwcGVuZGBMJHtlK18qZn0sJHtyK18qZH1gLHRoaXMuX2FwcGVuZGBBJHthfSwke2F9LDAsMCwkeysoZCptPmYqZyl9LCR7dGhpcy5feDE9ZStUKnV9LCR7dGhpcy5feTE9citUKmh9YH19YXJjKGUscixuLGksYSxzKXtpZihlPStlLHI9K3Isbj0rbixzPSEhcyxuPDApdGhyb3cgbmV3IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7bn1gKTtsZXQgbD1uKk1hdGguY29zKGkpLHU9bipNYXRoLnNpbihpKSxoPWUrbCxmPXIrdSxkPTFecyxwPXM/aS1hOmEtaTt0aGlzLl94MT09PW51bGw/dGhpcy5fYXBwZW5kYE0ke2h9LCR7Zn1gOihNYXRoLmFicyh0aGlzLl94MS1oKT5tZHx8TWF0aC5hYnModGhpcy5feTEtZik+bWQpJiZ0aGlzLl9hcHBlbmRgTCR7aH0sJHtmfWAsbiYmKHA8MCYmKHA9cCVwOCtwOCkscD5uVGU/dGhpcy5fYXBwZW5kYEEke259LCR7bn0sMCwxLCR7ZH0sJHtlLWx9LCR7ci11fUEke259LCR7bn0sMCwxLCR7ZH0sJHt0aGlzLl94MT1ofSwke3RoaXMuX3kxPWZ9YDpwPm1kJiZ0aGlzLl9hcHBlbmRgQSR7bn0sJHtufSwwLCR7KyhwPj1kOCl9LCR7ZH0sJHt0aGlzLl94MT1lK24qTWF0aC5jb3MoYSl9LCR7dGhpcy5feTE9cituKk1hdGguc2luKGEpfWApfXJlY3QoZSxyLG4saSl7dGhpcy5fYXBwZW5kYE0ke3RoaXMuX3gwPXRoaXMuX3gxPStlfSwke3RoaXMuX3kwPXRoaXMuX3kxPStyfWgke249K259diR7K2l9aCR7LW59WmB9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5ffX07byhUSCwicGF0aCIpO1RILnByb3RvdHlwZT1nZC5wcm90b3R5cGV9KTt2YXIgbTg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtrSCgpfSk7dmFyIEVIPU0oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgU0g9TSgoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBDSD1NKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIEFIPU0oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgX0g9TSgoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBMSD1NKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIERIPU0oKCk9PnsidXNlIHN0cmljdCJ9KTtmdW5jdGlvbiBnOCh0KXtyZXR1cm4gTWF0aC5hYnModD1NYXRoLnJvdW5kKHQpKT49MWUyMT90LnRvTG9jYWxlU3RyaW5nKCJlbiIpLnJlcGxhY2UoLywvZywiIik6dC50b1N0cmluZygxMCl9ZnVuY3Rpb24geWQodCxlKXtpZigocj0odD1lP3QudG9FeHBvbmVudGlhbChlLTEpOnQudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIHIsbj10LnNsaWNlKDAscik7cmV0dXJuW24ubGVuZ3RoPjE/blswXStuLnNsaWNlKDIpOm4sK3Quc2xpY2UocisxKV19dmFyIFd5PU0oKCk9PnsidXNlIHN0cmljdCI7byhnOCwiZGVmYXVsdCIpO28oeWQsImZvcm1hdERlY2ltYWxQYXJ0cyIpfSk7ZnVuY3Rpb24gU2wodCl7cmV0dXJuIHQ9eWQoTWF0aC5hYnModCkpLHQ/dFsxXTpOYU59dmFyIFl5PU0oKCk9PnsidXNlIHN0cmljdCI7V3koKTtvKFNsLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiB5OCh0LGUpe3JldHVybiBmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT1yLmxlbmd0aCxhPVtdLHM9MCxsPXRbMF0sdT0wO2k+MCYmbD4wJiYodStsKzE+biYmKGw9TWF0aC5tYXgoMSxuLXUpKSxhLnB1c2goci5zdWJzdHJpbmcoaS09bCxpK2wpKSwhKCh1Kz1sKzEpPm4pKTspbD10W3M9KHMrMSkldC5sZW5ndGhdO3JldHVybiBhLnJldmVyc2UoKS5qb2luKGUpfX12YXIgTkg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHk4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiB2OCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihyKXtyZXR1cm4gdFsrcl19KX19dmFyIFJIPU0oKCk9PnsidXNlIHN0cmljdCI7byh2OCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gTGgodCl7aWYoIShlPWFUZS5leGVjKHQpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK3QpO3ZhciBlO3JldHVybiBuZXcgeDMoe2ZpbGw6ZVsxXSxhbGlnbjplWzJdLHNpZ246ZVszXSxzeW1ib2w6ZVs0XSx6ZXJvOmVbNV0sd2lkdGg6ZVs2XSxjb21tYTplWzddLHByZWNpc2lvbjplWzhdJiZlWzhdLnNsaWNlKDEpLHRyaW06ZVs5XSx0eXBlOmVbMTBdfSl9ZnVuY3Rpb24geDModCl7dGhpcy5maWxsPXQuZmlsbD09PXZvaWQgMD8iICI6dC5maWxsKyIiLHRoaXMuYWxpZ249dC5hbGlnbj09PXZvaWQgMD8iPiI6dC5hbGlnbisiIix0aGlzLnNpZ249dC5zaWduPT09dm9pZCAwPyItIjp0LnNpZ24rIiIsdGhpcy5zeW1ib2w9dC5zeW1ib2w9PT12b2lkIDA/IiI6dC5zeW1ib2wrIiIsdGhpcy56ZXJvPSEhdC56ZXJvLHRoaXMud2lkdGg9dC53aWR0aD09PXZvaWQgMD92b2lkIDA6K3Qud2lkdGgsdGhpcy5jb21tYT0hIXQuY29tbWEsdGhpcy5wcmVjaXNpb249dC5wcmVjaXNpb249PT12b2lkIDA/dm9pZCAwOit0LnByZWNpc2lvbix0aGlzLnRyaW09ISF0LnRyaW0sdGhpcy50eXBlPXQudHlwZT09PXZvaWQgMD8iIjp0LnR5cGUrIiJ9dmFyIGFUZSx4OD1NKCgpPT57InVzZSBzdHJpY3QiO2FUZT0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtvKExoLCJmb3JtYXRTcGVjaWZpZXIiKTtMaC5wcm90b3R5cGU9eDMucHJvdG90eXBlO28oeDMsIkZvcm1hdFNwZWNpZmllciIpO3gzLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyh0aGlzLndpZHRoPT09dm9pZCAwPyIiOk1hdGgubWF4KDEsdGhpcy53aWR0aHwwKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsodGhpcy5wcmVjaXNpb249PT12b2lkIDA/IiI6Ii4iK01hdGgubWF4KDAsdGhpcy5wcmVjaXNpb258MCkpKyh0aGlzLnRyaW0/In4iOiIiKSt0aGlzLnR5cGV9fSk7ZnVuY3Rpb24gYjgodCl7ZTpmb3IodmFyIGU9dC5sZW5ndGgscj0xLG49LTEsaTtyPGU7KytyKXN3aXRjaCh0W3JdKXtjYXNlIi4iOm49aT1yO2JyZWFrO2Nhc2UiMCI6bj09PTAmJihuPXIpLGk9cjticmVhaztkZWZhdWx0OmlmKCErdFtyXSlicmVhayBlO24+MCYmKG49MCk7YnJlYWt9cmV0dXJuIG4+MD90LnNsaWNlKDAsbikrdC5zbGljZShpKzEpOnR9dmFyIE1IPU0oKCk9PnsidXNlIHN0cmljdCI7byhiOCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gVDgodCxlKXt2YXIgcj15ZCh0LGUpO2lmKCFyKXJldHVybiB0KyIiO3ZhciBuPXJbMF0saT1yWzFdLGE9aS0odzg9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGkvMykpKSozKSsxLHM9bi5sZW5ndGg7cmV0dXJuIGE9PT1zP246YT5zP24rbmV3IEFycmF5KGEtcysxKS5qb2luKCIwIik6YT4wP24uc2xpY2UoMCxhKSsiLiIrbi5zbGljZShhKToiMC4iK25ldyBBcnJheSgxLWEpLmpvaW4oIjAiKSt5ZCh0LE1hdGgubWF4KDAsZSthLTEpKVswXX12YXIgdzgsazg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtXeSgpO28oVDgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGIzKHQsZSl7dmFyIHI9eWQodCxlKTtpZighcilyZXR1cm4gdCsiIjt2YXIgbj1yWzBdLGk9clsxXTtyZXR1cm4gaTwwPyIwLiIrbmV3IEFycmF5KC1pKS5qb2luKCIwIikrbjpuLmxlbmd0aD5pKzE/bi5zbGljZSgwLGkrMSkrIi4iK24uc2xpY2UoaSsxKTpuK25ldyBBcnJheShpLW4ubGVuZ3RoKzIpLmpvaW4oIjAiKX12YXIgSUg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtXeSgpO28oYjMsImRlZmF1bHQiKX0pO3ZhciBFOCxPSD1NKCgpPT57InVzZSBzdHJpY3QiO1d5KCk7azgoKTtJSCgpO0U4PXsiJSI6bygodCxlKT0+KHQqMTAwKS50b0ZpeGVkKGUpLCIlIiksYjpvKHQ9Pk1hdGgucm91bmQodCkudG9TdHJpbmcoMiksImIiKSxjOm8odD0+dCsiIiwiYyIpLGQ6ZzgsZTpvKCh0LGUpPT50LnRvRXhwb25lbnRpYWwoZSksImUiKSxmOm8oKHQsZSk9PnQudG9GaXhlZChlKSwiZiIpLGc6bygodCxlKT0+dC50b1ByZWNpc2lvbihlKSwiZyIpLG86byh0PT5NYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDgpLCJvIikscDpvKCh0LGUpPT5iMyh0KjEwMCxlKSwicCIpLHI6YjMsczpUOCxYOm8odD0+TWF0aC5yb3VuZCh0KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSwiWCIpLHg6byh0PT5NYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KSwieCIpfX0pO2Z1bmN0aW9uIHczKHQpe3JldHVybiB0fXZhciBQSD1NKCgpPT57InVzZSBzdHJpY3QiO28odzMsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFM4KHQpe3ZhciBlPXQuZ3JvdXBpbmc9PT12b2lkIDB8fHQudGhvdXNhbmRzPT09dm9pZCAwP3czOnk4KEJILmNhbGwodC5ncm91cGluZyxOdW1iZXIpLHQudGhvdXNhbmRzKyIiKSxyPXQuY3VycmVuY3k9PT12b2lkIDA/IiI6dC5jdXJyZW5jeVswXSsiIixuPXQuY3VycmVuY3k9PT12b2lkIDA/IiI6dC5jdXJyZW5jeVsxXSsiIixpPXQuZGVjaW1hbD09PXZvaWQgMD8iLiI6dC5kZWNpbWFsKyIiLGE9dC5udW1lcmFscz09PXZvaWQgMD93Mzp2OChCSC5jYWxsKHQubnVtZXJhbHMsU3RyaW5nKSkscz10LnBlcmNlbnQ9PT12b2lkIDA/IiUiOnQucGVyY2VudCsiIixsPXQubWludXM9PT12b2lkIDA/Ilx1MjIxMiI6dC5taW51cysiIix1PXQubmFuPT09dm9pZCAwPyJOYU4iOnQubmFuKyIiO2Z1bmN0aW9uIGgoZCl7ZD1MaChkKTt2YXIgcD1kLmZpbGwsbT1kLmFsaWduLGc9ZC5zaWduLHk9ZC5zeW1ib2wsdj1kLnplcm8seD1kLndpZHRoLGI9ZC5jb21tYSx3PWQucHJlY2lzaW9uLF89ZC50cmltLFQ9ZC50eXBlO1Q9PT0ibiI/KGI9ITAsVD0iZyIpOkU4W1RdfHwodz09PXZvaWQgMCYmKHc9MTIpLF89ITAsVD0iZyIpLCh2fHxwPT09IjAiJiZtPT09Ij0iKSYmKHY9ITAscD0iMCIsbT0iPSIpO3ZhciBFPXk9PT0iJCI/cjp5PT09IiMiJiYvW2JveFhdLy50ZXN0KFQpPyIwIitULnRvTG93ZXJDYXNlKCk6IiIsTD15PT09IiQiP246L1slcF0vLnRlc3QoVCk/czoiIixTPUU4W1RdLEE9L1tkZWZncHJzJV0vLnRlc3QoVCk7dz13PT09dm9pZCAwPzY6L1tncHJzXS8udGVzdChUKT9NYXRoLm1heCgxLE1hdGgubWluKDIxLHcpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLHcpKTtmdW5jdGlvbiBJKEQpe3ZhciBrPUUsUj1MLEMsTyxOO2lmKFQ9PT0iYyIpUj1TKEQpK1IsRD0iIjtlbHNle0Q9K0Q7dmFyIFA9RDwwfHwxL0Q8MDtpZihEPWlzTmFOKEQpP3U6UyhNYXRoLmFicyhEKSx3KSxfJiYoRD1iOChEKSksUCYmK0Q9PTAmJmchPT0iKyImJihQPSExKSxrPShQP2c9PT0iKCI/ZzpsOmc9PT0iLSJ8fGc9PT0iKCI/IiI6ZykrayxSPShUPT09InMiP0ZIWzgrdzgvM106IiIpK1IrKFAmJmc9PT0iKCI/IikiOiIiKSxBKXtmb3IoQz0tMSxPPUQubGVuZ3RoOysrQzxPOylpZihOPUQuY2hhckNvZGVBdChDKSw0OD5OfHxOPjU3KXtSPShOPT09NDY/aStELnNsaWNlKEMrMSk6RC5zbGljZShDKSkrUixEPUQuc2xpY2UoMCxDKTticmVha319fWImJiF2JiYoRD1lKEQsMS8wKSk7dmFyIEY9ay5sZW5ndGgrRC5sZW5ndGgrUi5sZW5ndGgsQj1GPHg/bmV3IEFycmF5KHgtRisxKS5qb2luKHApOiIiO3N3aXRjaChiJiZ2JiYoRD1lKEIrRCxCLmxlbmd0aD94LVIubGVuZ3RoOjEvMCksQj0iIiksbSl7Y2FzZSI8IjpEPWsrRCtSK0I7YnJlYWs7Y2FzZSI9IjpEPWsrQitEK1I7YnJlYWs7Y2FzZSJeIjpEPUIuc2xpY2UoMCxGPUIubGVuZ3RoPj4xKStrK0QrUitCLnNsaWNlKEYpO2JyZWFrO2RlZmF1bHQ6RD1CK2srRCtSO2JyZWFrfXJldHVybiBhKEQpfXJldHVybiBvKEksImZvcm1hdCIpLEkudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gZCsiIn0sSX1vKGgsIm5ld0Zvcm1hdCIpO2Z1bmN0aW9uIGYoZCxwKXt2YXIgbT1oKChkPUxoKGQpLGQudHlwZT0iZiIsZCkpLGc9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKFNsKHApLzMpKSkqMyx5PU1hdGgucG93KDEwLC1nKSx2PUZIWzgrZy8zXTtyZXR1cm4gZnVuY3Rpb24oeCl7cmV0dXJuIG0oeSp4KSt2fX1yZXR1cm4gbyhmLCJmb3JtYXRQcmVmaXgiKSx7Zm9ybWF0OmgsZm9ybWF0UHJlZml4OmZ9fXZhciBCSCxGSCx6SD1NKCgpPT57InVzZSBzdHJpY3QiO1l5KCk7TkgoKTtSSCgpO3g4KCk7TUgoKTtPSCgpO2s4KCk7UEgoKTtCSD1BcnJheS5wcm90b3R5cGUubWFwLEZIPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiXHhCNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO28oUzgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEM4KHQpe3JldHVybiBUMz1TOCh0KSxrMz1UMy5mb3JtYXQsRTM9VDMuZm9ybWF0UHJlZml4LFQzfXZhciBUMyxrMyxFMyxHSD1NKCgpPT57InVzZSBzdHJpY3QiO3pIKCk7Qzgoe3Rob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdfSk7byhDOCwiZGVmYXVsdExvY2FsZSIpfSk7ZnVuY3Rpb24gUzModCl7cmV0dXJuIE1hdGgubWF4KDAsLVNsKE1hdGguYWJzKHQpKSl9dmFyICRIPU0oKCk9PnsidXNlIHN0cmljdCI7WXkoKTtvKFMzLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBDMyh0LGUpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihTbChlKS8zKSkpKjMtU2woTWF0aC5hYnModCkpKX12YXIgVkg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtZeSgpO28oQzMsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEEzKHQsZSl7cmV0dXJuIHQ9TWF0aC5hYnModCksZT1NYXRoLmFicyhlKS10LE1hdGgubWF4KDAsU2woZSktU2wodCkpKzF9dmFyIFVIPU0oKCk9PnsidXNlIHN0cmljdCI7WXkoKTtvKEEzLCJkZWZhdWx0Iil9KTt2YXIgQTg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtHSCgpO3g4KCk7JEgoKTtWSCgpO1VIKCl9KTt2YXIgSEg9TSgoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBXSD1NKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIFlIPU0oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgcUg9TSgoKT0+eyJ1c2Ugc3RyaWN0In0pO2Z1bmN0aW9uIERoKHQsZSl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6dGhpcy5yYW5nZSh0KTticmVhaztkZWZhdWx0OnRoaXMucmFuZ2UoZSkuZG9tYWluKHQpO2JyZWFrfXJldHVybiB0aGlzfXZhciBxeT1NKCgpPT57InVzZSBzdHJpY3QiO28oRGgsImluaXRSYW5nZSIpfSk7ZnVuY3Rpb24ga3UoKXt2YXIgdD1uZXcgX3AsZT1bXSxyPVtdLG49Xzg7ZnVuY3Rpb24gaShhKXtsZXQgcz10LmdldChhKTtpZihzPT09dm9pZCAwKXtpZihuIT09XzgpcmV0dXJuIG47dC5zZXQoYSxzPWUucHVzaChhKS0xKX1yZXR1cm4gcltzJXIubGVuZ3RoXX1yZXR1cm4gbyhpLCJzY2FsZSIpLGkuZG9tYWluPWZ1bmN0aW9uKGEpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBlLnNsaWNlKCk7ZT1bXSx0PW5ldyBfcDtmb3IobGV0IHMgb2YgYSl0LmhhcyhzKXx8dC5zZXQocyxlLnB1c2gocyktMSk7cmV0dXJuIGl9LGkucmFuZ2U9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9QXJyYXkuZnJvbShhKSxpKTpyLnNsaWNlKCl9LGkudW5rbm93bj1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1hLGkpOm59LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBrdShlLHIpLnVua25vd24obil9LERoLmFwcGx5KGksYXJndW1lbnRzKSxpfXZhciBfOCxMOD1NKCgpPT57InVzZSBzdHJpY3QiO2toKCk7cXkoKTtfOD1TeW1ib2woImltcGxpY2l0Iik7byhrdSwib3JkaW5hbCIpfSk7ZnVuY3Rpb24gVnAoKXt2YXIgdD1rdSgpLnVua25vd24odm9pZCAwKSxlPXQuZG9tYWluLHI9dC5yYW5nZSxuPTAsaT0xLGEscyxsPSExLHU9MCxoPTAsZj0uNTtkZWxldGUgdC51bmtub3duO2Z1bmN0aW9uIGQoKXt2YXIgcD1lKCkubGVuZ3RoLG09aTxuLGc9bT9pOm4seT1tP246aTthPSh5LWcpL01hdGgubWF4KDEscC11K2gqMiksbCYmKGE9TWF0aC5mbG9vcihhKSksZys9KHktZy1hKihwLXUpKSpmLHM9YSooMS11KSxsJiYoZz1NYXRoLnJvdW5kKGcpLHM9TWF0aC5yb3VuZChzKSk7dmFyIHY9SDQocCkubWFwKGZ1bmN0aW9uKHgpe3JldHVybiBnK2EqeH0pO3JldHVybiByKG0/di5yZXZlcnNlKCk6dil9cmV0dXJuIG8oZCwicmVzY2FsZSIpLHQuZG9tYWluPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlKHApLGQoKSk6ZSgpfSx0LnJhbmdlPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhbbixpXT1wLG49K24saT0raSxkKCkpOltuLGldfSx0LnJhbmdlUm91bmQ9ZnVuY3Rpb24ocCl7cmV0dXJuW24saV09cCxuPStuLGk9K2ksbD0hMCxkKCl9LHQuYmFuZHdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHN9LHQuc3RlcD1mdW5jdGlvbigpe3JldHVybiBhfSx0LnJvdW5kPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSEhcCxkKCkpOmx9LHQucGFkZGluZz1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1NYXRoLm1pbigxLGg9K3ApLGQoKSk6dX0sdC5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9TWF0aC5taW4oMSxwKSxkKCkpOnV9LHQucGFkZGluZ091dGVyPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPStwLGQoKSk6aH0sdC5hbGlnbj1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1NYXRoLm1heCgwLE1hdGgubWluKDEscCkpLGQoKSk6Zn0sdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFZwKGUoKSxbbixpXSkucm91bmQobCkucGFkZGluZ0lubmVyKHUpLnBhZGRpbmdPdXRlcihoKS5hbGlnbihmKX0sRGguYXBwbHkoZCgpLGFyZ3VtZW50cyl9dmFyIFhIPU0oKCk9PnsidXNlIHN0cmljdCI7a2goKTtxeSgpO0w4KCk7byhWcCwiYmFuZCIpfSk7ZnVuY3Rpb24gRDgodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciBqSD1NKCgpPT57InVzZSBzdHJpY3QiO28oRDgsImNvbnN0YW50cyIpfSk7ZnVuY3Rpb24gTjgodCl7cmV0dXJuK3R9dmFyIEtIPU0oKCk9PnsidXNlIHN0cmljdCI7byhOOCwibnVtYmVyIil9KTtmdW5jdGlvbiBVcCh0KXtyZXR1cm4gdH1mdW5jdGlvbiBSOCh0LGUpe3JldHVybihlLT10PSt0KT9mdW5jdGlvbihyKXtyZXR1cm4oci10KS9lfTpEOChpc05hTihlKT9OYU46LjUpfWZ1bmN0aW9uIHNUZSh0LGUpe3ZhciByO3JldHVybiB0PmUmJihyPXQsdD1lLGU9ciksZnVuY3Rpb24obil7cmV0dXJuIE1hdGgubWF4KHQsTWF0aC5taW4oZSxuKSl9fWZ1bmN0aW9uIG9UZSh0LGUscil7dmFyIG49dFswXSxpPXRbMV0sYT1lWzBdLHM9ZVsxXTtyZXR1cm4gaTxuPyhuPVI4KGksbiksYT1yKHMsYSkpOihuPVI4KG4saSksYT1yKGEscykpLGZ1bmN0aW9uKGwpe3JldHVybiBhKG4obCkpfX1mdW5jdGlvbiBsVGUodCxlLHIpe3ZhciBuPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKS0xLGk9bmV3IEFycmF5KG4pLGE9bmV3IEFycmF5KG4pLHM9LTE7Zm9yKHRbbl08dFswXSYmKHQ9dC5zbGljZSgpLnJldmVyc2UoKSxlPWUuc2xpY2UoKS5yZXZlcnNlKCkpOysrczxuOylpW3NdPVI4KHRbc10sdFtzKzFdKSxhW3NdPXIoZVtzXSxlW3MrMV0pO3JldHVybiBmdW5jdGlvbihsKXt2YXIgdT1tNyh0LGwsMSxuKS0xO3JldHVybiBhW3VdKGlbdV0obCkpfX1mdW5jdGlvbiBfMyh0LGUpe3JldHVybiBlLmRvbWFpbih0LmRvbWFpbigpKS5yYW5nZSh0LnJhbmdlKCkpLmludGVycG9sYXRlKHQuaW50ZXJwb2xhdGUoKSkuY2xhbXAodC5jbGFtcCgpKS51bmtub3duKHQudW5rbm93bigpKX1mdW5jdGlvbiBjVGUoKXt2YXIgdD1RSCxlPVFILHI9X2gsbixpLGEscz1VcCxsLHUsaDtmdW5jdGlvbiBmKCl7dmFyIHA9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpO3JldHVybiBzIT09VXAmJihzPXNUZSh0WzBdLHRbcC0xXSkpLGw9cD4yP2xUZTpvVGUsdT1oPW51bGwsZH1vKGYsInJlc2NhbGUiKTtmdW5jdGlvbiBkKHApe3JldHVybiBwPT1udWxsfHxpc05hTihwPStwKT9hOih1fHwodT1sKHQubWFwKG4pLGUscikpKShuKHMocCkpKX1yZXR1cm4gbyhkLCJzY2FsZSIpLGQuaW52ZXJ0PWZ1bmN0aW9uKHApe3JldHVybiBzKGkoKGh8fChoPWwoZSx0Lm1hcChuKSxlYSkpKShwKSkpfSxkLmRvbWFpbj1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1BcnJheS5mcm9tKHAsTjgpLGYoKSk6dC5zbGljZSgpfSxkLnJhbmdlPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPUFycmF5LmZyb20ocCksZigpKTplLnNsaWNlKCl9LGQucmFuZ2VSb3VuZD1mdW5jdGlvbihwKXtyZXR1cm4gZT1BcnJheS5mcm9tKHApLHI9aTMsZigpfSxkLmNsYW1wPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXA/ITA6VXAsZigpKTpzIT09VXB9LGQuaW50ZXJwb2xhdGU9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cCxmKCkpOnJ9LGQudW5rbm93bj1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1wLGQpOmF9LGZ1bmN0aW9uKHAsbSl7cmV0dXJuIG49cCxpPW0sZigpfX1mdW5jdGlvbiBYeSgpe3JldHVybiBjVGUoKShVcCxVcCl9dmFyIFFILE04PU0oKCk9PnsidXNlIHN0cmljdCI7a2goKTt6cCgpO2pIKCk7S0goKTtRSD1bMCwxXTtvKFVwLCJpZGVudGl0eSIpO28oUjgsIm5vcm1hbGl6ZSIpO28oc1RlLCJjbGFtcGVyIik7byhvVGUsImJpbWFwIik7byhsVGUsInBvbHltYXAiKTtvKF8zLCJjb3B5Iik7byhjVGUsInRyYW5zZm9ybWVyIik7byhYeSwiY29udGludW91cyIpfSk7ZnVuY3Rpb24gSTgodCxlLHIsbil7dmFyIGk9THAodCxlLHIpLGE7c3dpdGNoKG49TGgobj8/IixmIiksbi50eXBlKXtjYXNlInMiOnt2YXIgcz1NYXRoLm1heChNYXRoLmFicyh0KSxNYXRoLmFicyhlKSk7cmV0dXJuIG4ucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4oYT1DMyhpLHMpKSYmKG4ucHJlY2lzaW9uPWEpLEUzKG4scyl9Y2FzZSIiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UiciI6e24ucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4oYT1BMyhpLE1hdGgubWF4KE1hdGguYWJzKHQpLE1hdGguYWJzKGUpKSkpJiYobi5wcmVjaXNpb249YS0obi50eXBlPT09ImUiKSk7YnJlYWt9Y2FzZSJmIjpjYXNlIiUiOntuLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKGE9UzMoaSkpJiYobi5wcmVjaXNpb249YS0obi50eXBlPT09IiUiKSoyKTticmVha319cmV0dXJuIGszKG4pfXZhciBaSD1NKCgpPT57InVzZSBzdHJpY3QiO2toKCk7QTgoKTtvKEk4LCJ0aWNrRm9ybWF0Iil9KTtmdW5jdGlvbiB1VGUodCl7dmFyIGU9dC5kb21haW47cmV0dXJuIHQudGlja3M9ZnVuY3Rpb24ocil7dmFyIG49ZSgpO3JldHVybiAkNChuWzBdLG5bbi5sZW5ndGgtMV0scj8/MTApfSx0LnRpY2tGb3JtYXQ9ZnVuY3Rpb24ocixuKXt2YXIgaT1lKCk7cmV0dXJuIEk4KGlbMF0saVtpLmxlbmd0aC0xXSxyPz8xMCxuKX0sdC5uaWNlPWZ1bmN0aW9uKHIpe3I9PW51bGwmJihyPTEwKTt2YXIgbj1lKCksaT0wLGE9bi5sZW5ndGgtMSxzPW5baV0sbD1uW2FdLHUsaCxmPTEwO2ZvcihsPHMmJihoPXMscz1sLGw9aCxoPWksaT1hLGE9aCk7Zi0tID4wOyl7aWYoaD1reShzLGwsciksaD09PXUpcmV0dXJuIG5baV09cyxuW2FdPWwsZShuKTtpZihoPjApcz1NYXRoLmZsb29yKHMvaCkqaCxsPU1hdGguY2VpbChsL2gpKmg7ZWxzZSBpZihoPDApcz1NYXRoLmNlaWwocypoKS9oLGw9TWF0aC5mbG9vcihsKmgpL2g7ZWxzZSBicmVhazt1PWh9cmV0dXJuIHR9LHR9ZnVuY3Rpb24gQ2woKXt2YXIgdD1YeSgpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gXzModCxDbCgpKX0sRGguYXBwbHkodCxhcmd1bWVudHMpLHVUZSh0KX12YXIgSkg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtraCgpO004KCk7cXkoKTtaSCgpO28odVRlLCJsaW5lYXJpc2giKTtvKENsLCJsaW5lYXIiKX0pO2Z1bmN0aW9uIE84KHQsZSl7dD10LnNsaWNlKCk7dmFyIHI9MCxuPXQubGVuZ3RoLTEsaT10W3JdLGE9dFtuXSxzO3JldHVybiBhPGkmJihzPXIscj1uLG49cyxzPWksaT1hLGE9cyksdFtyXT1lLmZsb29yKGkpLHRbbl09ZS5jZWlsKGEpLHR9dmFyIGVXPU0oKCk9PnsidXNlIHN0cmljdCI7byhPOCwibmljZSIpfSk7ZnVuY3Rpb24gdm4odCxlLHIsbil7ZnVuY3Rpb24gaShhKXtyZXR1cm4gdChhPWFyZ3VtZW50cy5sZW5ndGg9PT0wP25ldyBEYXRlOm5ldyBEYXRlKCthKSksYX1yZXR1cm4gbyhpLCJpbnRlcnZhbCIpLGkuZmxvb3I9YT0+KHQoYT1uZXcgRGF0ZSgrYSkpLGEpLGkuY2VpbD1hPT4odChhPW5ldyBEYXRlKGEtMSkpLGUoYSwxKSx0KGEpLGEpLGkucm91bmQ9YT0+e2xldCBzPWkoYSksbD1pLmNlaWwoYSk7cmV0dXJuIGEtczxsLWE/czpsfSxpLm9mZnNldD0oYSxzKT0+KGUoYT1uZXcgRGF0ZSgrYSkscz09bnVsbD8xOk1hdGguZmxvb3IocykpLGEpLGkucmFuZ2U9KGEscyxsKT0+e2xldCB1PVtdO2lmKGE9aS5jZWlsKGEpLGw9bD09bnVsbD8xOk1hdGguZmxvb3IobCksIShhPHMpfHwhKGw+MCkpcmV0dXJuIHU7bGV0IGg7ZG8gdS5wdXNoKGg9bmV3IERhdGUoK2EpKSxlKGEsbCksdChhKTt3aGlsZShoPGEmJmE8cyk7cmV0dXJuIHV9LGkuZmlsdGVyPWE9PnZuKHM9PntpZihzPj1zKWZvcig7dChzKSwhYShzKTspcy5zZXRUaW1lKHMtMSl9LChzLGwpPT57aWYocz49cylpZihsPDApZm9yKDsrK2w8PTA7KWZvcig7ZShzLC0xKSwhYShzKTspO2Vsc2UgZm9yKDstLWw+PTA7KWZvcig7ZShzLDEpLCFhKHMpOyk7fSksciYmKGkuY291bnQ9KGEscyk9PihQOC5zZXRUaW1lKCthKSxCOC5zZXRUaW1lKCtzKSx0KFA4KSx0KEI4KSxNYXRoLmZsb29yKHIoUDgsQjgpKSksaS5ldmVyeT1hPT4oYT1NYXRoLmZsb29yKGEpLCFpc0Zpbml0ZShhKXx8IShhPjApP251bGw6YT4xP2kuZmlsdGVyKG4/cz0+bihzKSVhPT09MDpzPT5pLmNvdW50KDAscyklYT09PTApOmkpKSxpfXZhciBQOCxCOCxFdT1NKCgpPT57InVzZSBzdHJpY3QiO1A4PW5ldyBEYXRlLEI4PW5ldyBEYXRlO28odm4sInRpbWVJbnRlcnZhbCIpfSk7dmFyIHljLHRXLEY4PU0oKCk9PnsidXNlIHN0cmljdCI7RXUoKTt5Yz12bigoKT0+e30sKHQsZSk9Pnt0LnNldFRpbWUoK3QrZSl9LCh0LGUpPT5lLXQpO3ljLmV2ZXJ5PXQ9Pih0PU1hdGguZmxvb3IodCksIWlzRmluaXRlKHQpfHwhKHQ+MCk/bnVsbDp0PjE/dm4oZT0+e2Uuc2V0VGltZShNYXRoLmZsb29yKGUvdCkqdCl9LChlLHIpPT57ZS5zZXRUaW1lKCtlK3IqdCl9LChlLHIpPT4oci1lKS90KTp5Yyk7dFc9eWMucmFuZ2V9KTt2YXIgdG8sclcsejg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtFdSgpO3RvPXZuKHQ9Pnt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpKX0sKHQsZSk9Pnt0LnNldFRpbWUoK3QrZSoxZTMpfSwodCxlKT0+KGUtdCkvMWUzLHQ9PnQuZ2V0VVRDU2Vjb25kcygpKSxyVz10by5yYW5nZX0pO3ZhciBTdSxoVGUsTDMsZlRlLEc4PU0oKCk9PnsidXNlIHN0cmljdCI7RXUoKTtTdT12bih0PT57dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKS10LmdldFNlY29uZHMoKSoxZTMpfSwodCxlKT0+e3Quc2V0VGltZSgrdCtlKjZlNCl9LCh0LGUpPT4oZS10KS82ZTQsdD0+dC5nZXRNaW51dGVzKCkpLGhUZT1TdS5yYW5nZSxMMz12bih0PT57dC5zZXRVVENTZWNvbmRzKDAsMCl9LCh0LGUpPT57dC5zZXRUaW1lKCt0K2UqNmU0KX0sKHQsZSk9PihlLXQpLzZlNCx0PT50LmdldFVUQ01pbnV0ZXMoKSksZlRlPUwzLnJhbmdlfSk7dmFyIEN1LGRUZSxEMyxwVGUsJDg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtFdSgpO0N1PXZuKHQ9Pnt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpLXQuZ2V0U2Vjb25kcygpKjFlMy10LmdldE1pbnV0ZXMoKSo2ZTQpfSwodCxlKT0+e3Quc2V0VGltZSgrdCtlKjM2ZTUpfSwodCxlKT0+KGUtdCkvMzZlNSx0PT50LmdldEhvdXJzKCkpLGRUZT1DdS5yYW5nZSxEMz12bih0PT57dC5zZXRVVENNaW51dGVzKDAsMCwwKX0sKHQsZSk9Pnt0LnNldFRpbWUoK3QrZSozNmU1KX0sKHQsZSk9PihlLXQpLzM2ZTUsdD0+dC5nZXRVVENIb3VycygpKSxwVGU9RDMucmFuZ2V9KTt2YXIgT28sbVRlLEt5LGdUZSxOMyx5VGUsVjg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtFdSgpO09vPXZuKHQ9PnQuc2V0SG91cnMoMCwwLDAsMCksKHQsZSk9PnQuc2V0RGF0ZSh0LmdldERhdGUoKStlKSwodCxlKT0+KGUtdC0oZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqNmU0KS84NjRlNSx0PT50LmdldERhdGUoKS0xKSxtVGU9T28ucmFuZ2UsS3k9dm4odD0+e3Quc2V0VVRDSG91cnMoMCwwLDAsMCl9LCh0LGUpPT57dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK2UpfSwodCxlKT0+KGUtdCkvODY0ZTUsdD0+dC5nZXRVVENEYXRlKCktMSksZ1RlPUt5LnJhbmdlLE4zPXZuKHQ9Pnt0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSwodCxlKT0+e3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKStlKX0sKHQsZSk9PihlLXQpLzg2NGU1LHQ9Pk1hdGguZmxvb3IodC84NjRlNSkpLHlUZT1OMy5yYW5nZX0pO2Z1bmN0aW9uIGJkKHQpe3JldHVybiB2bihlPT57ZS5zZXREYXRlKGUuZ2V0RGF0ZSgpLShlLmdldERheSgpKzctdCklNyksZS5zZXRIb3VycygwLDAsMCwwKX0sKGUscik9PntlLnNldERhdGUoZS5nZXREYXRlKCkrcio3KX0sKGUscik9PihyLWUtKHIuZ2V0VGltZXpvbmVPZmZzZXQoKS1lLmdldFRpbWV6b25lT2Zmc2V0KCkpKjZlNCkvNjA0OGU1KX1mdW5jdGlvbiB3ZCh0KXtyZXR1cm4gdm4oZT0+e2Uuc2V0VVRDRGF0ZShlLmdldFVUQ0RhdGUoKS0oZS5nZXRVVENEYXkoKSs3LXQpJTcpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9LChlLHIpPT57ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpK3IqNyl9LChlLHIpPT4oci1lKS82MDQ4ZTUpfXZhciBBbCxOaCxSMyxNMyx4YyxJMyxPMyxpVyx2VGUseFRlLGJUZSx3VGUsVFRlLGtUZSxUZCxIcCxhVyxzVyxSaCxvVyxsVyxjVyxFVGUsU1RlLENUZSxBVGUsX1RlLExUZSxVOD1NKCgpPT57InVzZSBzdHJpY3QiO0V1KCk7byhiZCwidGltZVdlZWtkYXkiKTtBbD1iZCgwKSxOaD1iZCgxKSxSMz1iZCgyKSxNMz1iZCgzKSx4Yz1iZCg0KSxJMz1iZCg1KSxPMz1iZCg2KSxpVz1BbC5yYW5nZSx2VGU9TmgucmFuZ2UseFRlPVIzLnJhbmdlLGJUZT1NMy5yYW5nZSx3VGU9eGMucmFuZ2UsVFRlPUkzLnJhbmdlLGtUZT1PMy5yYW5nZTtvKHdkLCJ1dGNXZWVrZGF5Iik7VGQ9d2QoMCksSHA9d2QoMSksYVc9d2QoMiksc1c9d2QoMyksUmg9d2QoNCksb1c9d2QoNSksbFc9d2QoNiksY1c9VGQucmFuZ2UsRVRlPUhwLnJhbmdlLFNUZT1hVy5yYW5nZSxDVGU9c1cucmFuZ2UsQVRlPVJoLnJhbmdlLF9UZT1vVy5yYW5nZSxMVGU9bFcucmFuZ2V9KTt2YXIgQXUsRFRlLFAzLE5UZSxIOD1NKCgpPT57InVzZSBzdHJpY3QiO0V1KCk7QXU9dm4odD0+e3Quc2V0RGF0ZSgxKSx0LnNldEhvdXJzKDAsMCwwLDApfSwodCxlKT0+e3Quc2V0TW9udGgodC5nZXRNb250aCgpK2UpfSwodCxlKT0+ZS5nZXRNb250aCgpLXQuZ2V0TW9udGgoKSsoZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKSkqMTIsdD0+dC5nZXRNb250aCgpKSxEVGU9QXUucmFuZ2UsUDM9dm4odD0+e3Quc2V0VVRDRGF0ZSgxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSwodCxlKT0+e3Quc2V0VVRDTW9udGgodC5nZXRVVENNb250aCgpK2UpfSwodCxlKT0+ZS5nZXRVVENNb250aCgpLXQuZ2V0VVRDTW9udGgoKSsoZS5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKSkqMTIsdD0+dC5nZXRVVENNb250aCgpKSxOVGU9UDMucmFuZ2V9KTt2YXIgcm8sUlRlLF9sLE1UZSxXOD1NKCgpPT57InVzZSBzdHJpY3QiO0V1KCk7cm89dm4odD0+e3Quc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSwodCxlKT0+e3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK2UpfSwodCxlKT0+ZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKSx0PT50LmdldEZ1bGxZZWFyKCkpO3JvLmV2ZXJ5PXQ9PiFpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpfHwhKHQ+MCk/bnVsbDp2bihlPT57ZS5zZXRGdWxsWWVhcihNYXRoLmZsb29yKGUuZ2V0RnVsbFllYXIoKS90KSp0KSxlLnNldE1vbnRoKDAsMSksZS5zZXRIb3VycygwLDAsMCwwKX0sKGUscik9PntlLnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKStyKnQpfSk7UlRlPXJvLnJhbmdlLF9sPXZuKHQ9Pnt0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sKHQsZSk9Pnt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStlKX0sKHQsZSk9PmUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCksdD0+dC5nZXRVVENGdWxsWWVhcigpKTtfbC5ldmVyeT10PT4haXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKXx8ISh0PjApP251bGw6dm4oZT0+e2Uuc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihlLmdldFVUQ0Z1bGxZZWFyKCkvdCkqdCksZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9LChlLHIpPT57ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrcip0KX0pO01UZT1fbC5yYW5nZX0pO2Z1bmN0aW9uIGhXKHQsZSxyLG4saSxhKXtsZXQgcz1bW3RvLDEsMWUzXSxbdG8sNSw1KjFlM10sW3RvLDE1LDE1KjFlM10sW3RvLDMwLDMwKjFlM10sW2EsMSw2ZTRdLFthLDUsNSo2ZTRdLFthLDE1LDE1KjZlNF0sW2EsMzAsMzAqNmU0XSxbaSwxLDM2ZTVdLFtpLDMsMyozNmU1XSxbaSw2LDYqMzZlNV0sW2ksMTIsMTIqMzZlNV0sW24sMSw4NjRlNV0sW24sMiwyKjg2NGU1XSxbciwxLDYwNDhlNV0sW2UsMSwyNTkyZTZdLFtlLDMsMyoyNTkyZTZdLFt0LDEsMzE1MzZlNl1dO2Z1bmN0aW9uIGwoaCxmLGQpe2xldCBwPWY8aDtwJiYoW2gsZl09W2YsaF0pO2xldCBtPWQmJnR5cGVvZiBkLnJhbmdlPT0iZnVuY3Rpb24iP2Q6dShoLGYsZCksZz1tP20ucmFuZ2UoaCwrZisxKTpbXTtyZXR1cm4gcD9nLnJldmVyc2UoKTpnfW8obCwidGlja3MiKTtmdW5jdGlvbiB1KGgsZixkKXtsZXQgcD1NYXRoLmFicyhmLWgpL2QsbT1jZCgoWywsdl0pPT52KS5yaWdodChzLHApO2lmKG09PT1zLmxlbmd0aClyZXR1cm4gdC5ldmVyeShMcChoLzMxNTM2ZTYsZi8zMTUzNmU2LGQpKTtpZihtPT09MClyZXR1cm4geWMuZXZlcnkoTWF0aC5tYXgoTHAoaCxmLGQpLDEpKTtsZXRbZyx5XT1zW3Avc1ttLTFdWzJdPHNbbV1bMl0vcD9tLTE6bV07cmV0dXJuIGcuZXZlcnkoeSl9cmV0dXJuIG8odSwidGlja0ludGVydmFsIiksW2wsdV19dmFyIE9UZSxQVGUsWTgscTgsZlc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtraCgpO0Y4KCk7ejgoKTtHOCgpOyQ4KCk7VjgoKTtVOCgpO0g4KCk7VzgoKTtvKGhXLCJ0aWNrZXIiKTtbT1RlLFBUZV09aFcoX2wsUDMsVGQsTjMsRDMsTDMpLFtZOCxxOF09aFcocm8sQXUsQWwsT28sQ3UsU3UpfSk7dmFyIEIzPU0oKCk9PnsidXNlIHN0cmljdCI7RjgoKTt6OCgpO0c4KCk7JDgoKTtWOCgpO1U4KCk7SDgoKTtXOCgpO2ZXKCl9KTtmdW5jdGlvbiBYOCh0KXtpZigwPD10LnkmJnQueTwxMDApe3ZhciBlPW5ldyBEYXRlKC0xLHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKTtyZXR1cm4gZS5zZXRGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCl9ZnVuY3Rpb24gajgodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZShEYXRlLlVUQygtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpO3JldHVybiBlLnNldFVUQ0Z1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEModC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSl9ZnVuY3Rpb24gUXkodCxlLHIpe3JldHVybnt5OnQsbTplLGQ6cixIOjAsTTowLFM6MCxMOjB9fWZ1bmN0aW9uIEs4KHQpe3ZhciBlPXQuZGF0ZVRpbWUscj10LmRhdGUsbj10LnRpbWUsaT10LnBlcmlvZHMsYT10LmRheXMscz10LnNob3J0RGF5cyxsPXQubW9udGhzLHU9dC5zaG9ydE1vbnRocyxoPVp5KGkpLGY9SnkoaSksZD1aeShhKSxwPUp5KGEpLG09WnkocyksZz1KeShzKSx5PVp5KGwpLHY9SnkobCkseD1aeSh1KSxiPUp5KHUpLHc9e2E6UCxBOkYsYjpCLEI6RyxjOm51bGwsZDp2VyxlOnZXLGY6YWtlLGc6bWtlLEc6eWtlLEg6cmtlLEk6bmtlLGo6aWtlLEw6a1csbTpza2UsTTpva2UscDp6LHE6VyxROndXLHM6VFcsUzpsa2UsdTpja2UsVTp1a2UsVjpoa2Usdzpma2UsVzpka2UseDpudWxsLFg6bnVsbCx5OnBrZSxZOmdrZSxaOnZrZSwiJSI6Yld9LF89e2E6WixBOmosYjpvZSxCOkssYzpudWxsLGQ6eFcsZTp4VyxmOlRrZSxnOlJrZSxHOklrZSxIOnhrZSxJOmJrZSxqOndrZSxMOlNXLG06a2tlLE06RWtlLHA6ZWUscTpKLFE6d1csczpUVyxTOlNrZSx1OkNrZSxVOkFrZSxWOl9rZSx3OkxrZSxXOkRrZSx4Om51bGwsWDpudWxsLHk6TmtlLFk6TWtlLFo6T2tlLCIlIjpiV30sVD17YTpJLEE6RCxiOmssQjpSLGM6QyxkOmdXLGU6Z1csZjpaVGUsZzptVyxHOnBXLEg6eVcsSTp5VyxqOlhUZSxMOlFUZSxtOnFUZSxNOmpUZSxwOkEscTpZVGUsUTpla2Usczp0a2UsUzpLVGUsdTokVGUsVTpWVGUsVjpVVGUsdzpHVGUsVzpIVGUseDpPLFg6Tix5Om1XLFk6cFcsWjpXVGUsIiUiOkpUZX07dy54PUUocix3KSx3Llg9RShuLHcpLHcuYz1FKGUsdyksXy54PUUocixfKSxfLlg9RShuLF8pLF8uYz1FKGUsXyk7ZnVuY3Rpb24gRShILHEpe3JldHVybiBmdW5jdGlvbihRKXt2YXIgYWU9W10sdWU9LTEsY2U9MCx0ZT1ILmxlbmd0aCxOZSxzZSxrZTtmb3IoUSBpbnN0YW5jZW9mIERhdGV8fChRPW5ldyBEYXRlKCtRKSk7Kyt1ZTx0ZTspSC5jaGFyQ29kZUF0KHVlKT09PTM3JiYoYWUucHVzaChILnNsaWNlKGNlLHVlKSksKHNlPWRXW05lPUguY2hhckF0KCsrdWUpXSkhPW51bGw/TmU9SC5jaGFyQXQoKyt1ZSk6c2U9TmU9PT0iZSI/IiAiOiIwIiwoa2U9cVtOZV0pJiYoTmU9a2UoUSxzZSkpLGFlLnB1c2goTmUpLGNlPXVlKzEpO3JldHVybiBhZS5wdXNoKEguc2xpY2UoY2UsdWUpKSxhZS5qb2luKCIiKX19byhFLCJuZXdGb3JtYXQiKTtmdW5jdGlvbiBMKEgscSl7cmV0dXJuIGZ1bmN0aW9uKFEpe3ZhciBhZT1ReSgxOTAwLHZvaWQgMCwxKSx1ZT1TKGFlLEgsUSs9IiIsMCksY2UsdGU7aWYodWUhPVEubGVuZ3RoKXJldHVybiBudWxsO2lmKCJRImluIGFlKXJldHVybiBuZXcgRGF0ZShhZS5RKTtpZigicyJpbiBhZSlyZXR1cm4gbmV3IERhdGUoYWUucyoxZTMrKCJMImluIGFlP2FlLkw6MCkpO2lmKHEmJiEoIloiaW4gYWUpJiYoYWUuWj0wKSwicCJpbiBhZSYmKGFlLkg9YWUuSCUxMithZS5wKjEyKSxhZS5tPT09dm9pZCAwJiYoYWUubT0icSJpbiBhZT9hZS5xOjApLCJWImluIGFlKXtpZihhZS5WPDF8fGFlLlY+NTMpcmV0dXJuIG51bGw7InciaW4gYWV8fChhZS53PTEpLCJaImluIGFlPyhjZT1qOChReShhZS55LDAsMSkpLHRlPWNlLmdldFVUQ0RheSgpLGNlPXRlPjR8fHRlPT09MD9IcC5jZWlsKGNlKTpIcChjZSksY2U9S3kub2Zmc2V0KGNlLChhZS5WLTEpKjcpLGFlLnk9Y2UuZ2V0VVRDRnVsbFllYXIoKSxhZS5tPWNlLmdldFVUQ01vbnRoKCksYWUuZD1jZS5nZXRVVENEYXRlKCkrKGFlLncrNiklNyk6KGNlPVg4KFF5KGFlLnksMCwxKSksdGU9Y2UuZ2V0RGF5KCksY2U9dGU+NHx8dGU9PT0wP05oLmNlaWwoY2UpOk5oKGNlKSxjZT1Pby5vZmZzZXQoY2UsKGFlLlYtMSkqNyksYWUueT1jZS5nZXRGdWxsWWVhcigpLGFlLm09Y2UuZ2V0TW9udGgoKSxhZS5kPWNlLmdldERhdGUoKSsoYWUudys2KSU3KX1lbHNlKCJXImluIGFlfHwiVSJpbiBhZSkmJigidyJpbiBhZXx8KGFlLnc9InUiaW4gYWU/YWUudSU3OiJXImluIGFlPzE6MCksdGU9IloiaW4gYWU/ajgoUXkoYWUueSwwLDEpKS5nZXRVVENEYXkoKTpYOChReShhZS55LDAsMSkpLmdldERheSgpLGFlLm09MCxhZS5kPSJXImluIGFlPyhhZS53KzYpJTcrYWUuVyo3LSh0ZSs1KSU3OmFlLncrYWUuVSo3LSh0ZSs2KSU3KTtyZXR1cm4iWiJpbiBhZT8oYWUuSCs9YWUuWi8xMDB8MCxhZS5NKz1hZS5aJTEwMCxqOChhZSkpOlg4KGFlKX19byhMLCJuZXdQYXJzZSIpO2Z1bmN0aW9uIFMoSCxxLFEsYWUpe2Zvcih2YXIgdWU9MCxjZT1xLmxlbmd0aCx0ZT1RLmxlbmd0aCxOZSxzZTt1ZTxjZTspe2lmKGFlPj10ZSlyZXR1cm4tMTtpZihOZT1xLmNoYXJDb2RlQXQodWUrKyksTmU9PT0zNyl7aWYoTmU9cS5jaGFyQXQodWUrKyksc2U9VFtOZSBpbiBkVz9xLmNoYXJBdCh1ZSsrKTpOZV0sIXNlfHwoYWU9c2UoSCxRLGFlKSk8MClyZXR1cm4tMX1lbHNlIGlmKE5lIT1RLmNoYXJDb2RlQXQoYWUrKykpcmV0dXJuLTF9cmV0dXJuIGFlfW8oUywicGFyc2VTcGVjaWZpZXIiKTtmdW5jdGlvbiBBKEgscSxRKXt2YXIgYWU9aC5leGVjKHEuc2xpY2UoUSkpO3JldHVybiBhZT8oSC5wPWYuZ2V0KGFlWzBdLnRvTG93ZXJDYXNlKCkpLFErYWVbMF0ubGVuZ3RoKTotMX1vKEEsInBhcnNlUGVyaW9kIik7ZnVuY3Rpb24gSShILHEsUSl7dmFyIGFlPW0uZXhlYyhxLnNsaWNlKFEpKTtyZXR1cm4gYWU/KEgudz1nLmdldChhZVswXS50b0xvd2VyQ2FzZSgpKSxRK2FlWzBdLmxlbmd0aCk6LTF9byhJLCJwYXJzZVNob3J0V2Vla2RheSIpO2Z1bmN0aW9uIEQoSCxxLFEpe3ZhciBhZT1kLmV4ZWMocS5zbGljZShRKSk7cmV0dXJuIGFlPyhILnc9cC5nZXQoYWVbMF0udG9Mb3dlckNhc2UoKSksUSthZVswXS5sZW5ndGgpOi0xfW8oRCwicGFyc2VXZWVrZGF5Iik7ZnVuY3Rpb24gayhILHEsUSl7dmFyIGFlPXguZXhlYyhxLnNsaWNlKFEpKTtyZXR1cm4gYWU/KEgubT1iLmdldChhZVswXS50b0xvd2VyQ2FzZSgpKSxRK2FlWzBdLmxlbmd0aCk6LTF9byhrLCJwYXJzZVNob3J0TW9udGgiKTtmdW5jdGlvbiBSKEgscSxRKXt2YXIgYWU9eS5leGVjKHEuc2xpY2UoUSkpO3JldHVybiBhZT8oSC5tPXYuZ2V0KGFlWzBdLnRvTG93ZXJDYXNlKCkpLFErYWVbMF0ubGVuZ3RoKTotMX1vKFIsInBhcnNlTW9udGgiKTtmdW5jdGlvbiBDKEgscSxRKXtyZXR1cm4gUyhILGUscSxRKX1vKEMsInBhcnNlTG9jYWxlRGF0ZVRpbWUiKTtmdW5jdGlvbiBPKEgscSxRKXtyZXR1cm4gUyhILHIscSxRKX1vKE8sInBhcnNlTG9jYWxlRGF0ZSIpO2Z1bmN0aW9uIE4oSCxxLFEpe3JldHVybiBTKEgsbixxLFEpfW8oTiwicGFyc2VMb2NhbGVUaW1lIik7ZnVuY3Rpb24gUChIKXtyZXR1cm4gc1tILmdldERheSgpXX1vKFAsImZvcm1hdFNob3J0V2Vla2RheSIpO2Z1bmN0aW9uIEYoSCl7cmV0dXJuIGFbSC5nZXREYXkoKV19byhGLCJmb3JtYXRXZWVrZGF5Iik7ZnVuY3Rpb24gQihIKXtyZXR1cm4gdVtILmdldE1vbnRoKCldfW8oQiwiZm9ybWF0U2hvcnRNb250aCIpO2Z1bmN0aW9uIEcoSCl7cmV0dXJuIGxbSC5nZXRNb250aCgpXX1vKEcsImZvcm1hdE1vbnRoIik7ZnVuY3Rpb24geihIKXtyZXR1cm4gaVsrKEguZ2V0SG91cnMoKT49MTIpXX1vKHosImZvcm1hdFBlcmlvZCIpO2Z1bmN0aW9uIFcoSCl7cmV0dXJuIDErfn4oSC5nZXRNb250aCgpLzMpfW8oVywiZm9ybWF0UXVhcnRlciIpO2Z1bmN0aW9uIFooSCl7cmV0dXJuIHNbSC5nZXRVVENEYXkoKV19byhaLCJmb3JtYXRVVENTaG9ydFdlZWtkYXkiKTtmdW5jdGlvbiBqKEgpe3JldHVybiBhW0guZ2V0VVRDRGF5KCldfW8oaiwiZm9ybWF0VVRDV2Vla2RheSIpO2Z1bmN0aW9uIG9lKEgpe3JldHVybiB1W0guZ2V0VVRDTW9udGgoKV19byhvZSwiZm9ybWF0VVRDU2hvcnRNb250aCIpO2Z1bmN0aW9uIEsoSCl7cmV0dXJuIGxbSC5nZXRVVENNb250aCgpXX1vKEssImZvcm1hdFVUQ01vbnRoIik7ZnVuY3Rpb24gZWUoSCl7cmV0dXJuIGlbKyhILmdldFVUQ0hvdXJzKCk+PTEyKV19byhlZSwiZm9ybWF0VVRDUGVyaW9kIik7ZnVuY3Rpb24gSihIKXtyZXR1cm4gMSt+fihILmdldFVUQ01vbnRoKCkvMyl9cmV0dXJuIG8oSiwiZm9ybWF0VVRDUXVhcnRlciIpLHtmb3JtYXQ6byhmdW5jdGlvbihIKXt2YXIgcT1FKEgrPSIiLHcpO3JldHVybiBxLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEh9LHF9LCJmb3JtYXQiKSxwYXJzZTpvKGZ1bmN0aW9uKEgpe3ZhciBxPUwoSCs9IiIsITEpO3JldHVybiBxLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEh9LHF9LCJwYXJzZSIpLHV0Y0Zvcm1hdDpvKGZ1bmN0aW9uKEgpe3ZhciBxPUUoSCs9IiIsXyk7cmV0dXJuIHEudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gSH0scX0sInV0Y0Zvcm1hdCIpLHV0Y1BhcnNlOm8oZnVuY3Rpb24oSCl7dmFyIHE9TChIKz0iIiwhMCk7cmV0dXJuIHEudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gSH0scX0sInV0Y1BhcnNlIil9fWZ1bmN0aW9uIEhyKHQsZSxyKXt2YXIgbj10PDA/Ii0iOiIiLGk9KG4/LXQ6dCkrIiIsYT1pLmxlbmd0aDtyZXR1cm4gbisoYTxyP25ldyBBcnJheShyLWErMSkuam9pbihlKStpOmkpfWZ1bmN0aW9uIHpUZSh0KXtyZXR1cm4gdC5yZXBsYWNlKEZUZSwiXFwkJiIpfWZ1bmN0aW9uIFp5KHQpe3JldHVybiBuZXcgUmVnRXhwKCJeKD86Iit0Lm1hcCh6VGUpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBKeSh0KXtyZXR1cm4gbmV3IE1hcCh0Lm1hcCgoZSxyKT0+W2UudG9Mb3dlckNhc2UoKSxyXSkpfWZ1bmN0aW9uIEdUZSh0LGUscil7dmFyIG49dGEuZXhlYyhlLnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KHQudz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiAkVGUodCxlLHIpe3ZhciBuPXRhLmV4ZWMoZS5zbGljZShyLHIrMSkpO3JldHVybiBuPyh0LnU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVlRlKHQsZSxyKXt2YXIgbj10YS5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5VPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFVUZSh0LGUscil7dmFyIG49dGEuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuVj0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBIVGUodCxlLHIpe3ZhciBuPXRhLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Llc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcFcodCxlLHIpe3ZhciBuPXRhLmV4ZWMoZS5zbGljZShyLHIrNCkpO3JldHVybiBuPyh0Lnk9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbVcodCxlLHIpe3ZhciBuPXRhLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lnk9K25bMF0rKCtuWzBdPjY4PzE5MDA6MmUzKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBXVGUodCxlLHIpe3ZhciBuPS9eKFopfChbKy1dXGRcZCkoPzo6PyhcZFxkKSk/Ly5leGVjKGUuc2xpY2UocixyKzYpKTtyZXR1cm4gbj8odC5aPW5bMV0/MDotKG5bMl0rKG5bM118fCIwMCIpKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBZVGUodCxlLHIpe3ZhciBuPXRhLmV4ZWMoZS5zbGljZShyLHIrMSkpO3JldHVybiBuPyh0LnE9blswXSozLTMscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcVRlKHQsZSxyKXt2YXIgbj10YS5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5tPW5bMF0tMSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBnVyh0LGUscil7dmFyIG49dGEuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBYVGUodCxlLHIpe3ZhciBuPXRhLmV4ZWMoZS5zbGljZShyLHIrMykpO3JldHVybiBuPyh0Lm09MCx0LmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geVcodCxlLHIpe3ZhciBuPXRhLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lkg9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24galRlKHQsZSxyKXt2YXIgbj10YS5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5NPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEtUZSh0LGUscil7dmFyIG49dGEuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuUz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBRVGUodCxlLHIpe3ZhciBuPXRhLmV4ZWMoZS5zbGljZShyLHIrMykpO3JldHVybiBuPyh0Lkw9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWlRlKHQsZSxyKXt2YXIgbj10YS5leGVjKGUuc2xpY2UocixyKzYpKTtyZXR1cm4gbj8odC5MPU1hdGguZmxvb3IoblswXS8xZTMpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEpUZSh0LGUscil7dmFyIG49QlRlLmV4ZWMoZS5zbGljZShyLHIrMSkpO3JldHVybiBuP3IrblswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gZWtlKHQsZSxyKXt2YXIgbj10YS5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0LlE9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdGtlKHQsZSxyKXt2YXIgbj10YS5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0LnM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdlcodCxlKXtyZXR1cm4gSHIodC5nZXREYXRlKCksZSwyKX1mdW5jdGlvbiBya2UodCxlKXtyZXR1cm4gSHIodC5nZXRIb3VycygpLGUsMil9ZnVuY3Rpb24gbmtlKHQsZSl7cmV0dXJuIEhyKHQuZ2V0SG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiBpa2UodCxlKXtyZXR1cm4gSHIoMStPby5jb3VudChybyh0KSx0KSxlLDMpfWZ1bmN0aW9uIGtXKHQsZSl7cmV0dXJuIEhyKHQuZ2V0TWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBha2UodCxlKXtyZXR1cm4ga1codCxlKSsiMDAwIn1mdW5jdGlvbiBza2UodCxlKXtyZXR1cm4gSHIodC5nZXRNb250aCgpKzEsZSwyKX1mdW5jdGlvbiBva2UodCxlKXtyZXR1cm4gSHIodC5nZXRNaW51dGVzKCksZSwyKX1mdW5jdGlvbiBsa2UodCxlKXtyZXR1cm4gSHIodC5nZXRTZWNvbmRzKCksZSwyKX1mdW5jdGlvbiBja2UodCl7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm4gZT09PTA/NzplfWZ1bmN0aW9uIHVrZSh0LGUpe3JldHVybiBIcihBbC5jb3VudChybyh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gRVcodCl7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm4gZT49NHx8ZT09PTA/eGModCk6eGMuY2VpbCh0KX1mdW5jdGlvbiBoa2UodCxlKXtyZXR1cm4gdD1FVyh0KSxIcih4Yy5jb3VudChybyh0KSx0KSsocm8odCkuZ2V0RGF5KCk9PT00KSxlLDIpfWZ1bmN0aW9uIGZrZSh0KXtyZXR1cm4gdC5nZXREYXkoKX1mdW5jdGlvbiBka2UodCxlKXtyZXR1cm4gSHIoTmguY291bnQocm8odCktMSx0KSxlLDIpfWZ1bmN0aW9uIHBrZSh0LGUpe3JldHVybiBIcih0LmdldEZ1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gbWtlKHQsZSl7cmV0dXJuIHQ9RVcodCksSHIodC5nZXRGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIGdrZSh0LGUpe3JldHVybiBIcih0LmdldEZ1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24geWtlKHQsZSl7dmFyIHI9dC5nZXREYXkoKTtyZXR1cm4gdD1yPj00fHxyPT09MD94Yyh0KTp4Yy5jZWlsKHQpLEhyKHQuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiB2a2UodCl7dmFyIGU9dC5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybihlPjA/Ii0iOihlKj0tMSwiKyIpKStIcihlLzYwfDAsIjAiLDIpK0hyKGUlNjAsIjAiLDIpfWZ1bmN0aW9uIHhXKHQsZSl7cmV0dXJuIEhyKHQuZ2V0VVRDRGF0ZSgpLGUsMil9ZnVuY3Rpb24geGtlKHQsZSl7cmV0dXJuIEhyKHQuZ2V0VVRDSG91cnMoKSxlLDIpfWZ1bmN0aW9uIGJrZSh0LGUpe3JldHVybiBIcih0LmdldFVUQ0hvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gd2tlKHQsZSl7cmV0dXJuIEhyKDErS3kuY291bnQoX2wodCksdCksZSwzKX1mdW5jdGlvbiBTVyh0LGUpe3JldHVybiBIcih0LmdldFVUQ01pbGxpc2Vjb25kcygpLGUsMyl9ZnVuY3Rpb24gVGtlKHQsZSl7cmV0dXJuIFNXKHQsZSkrIjAwMCJ9ZnVuY3Rpb24ga2tlKHQsZSl7cmV0dXJuIEhyKHQuZ2V0VVRDTW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gRWtlKHQsZSl7cmV0dXJuIEhyKHQuZ2V0VVRDTWludXRlcygpLGUsMil9ZnVuY3Rpb24gU2tlKHQsZSl7cmV0dXJuIEhyKHQuZ2V0VVRDU2Vjb25kcygpLGUsMil9ZnVuY3Rpb24gQ2tlKHQpe3ZhciBlPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIGU9PT0wPzc6ZX1mdW5jdGlvbiBBa2UodCxlKXtyZXR1cm4gSHIoVGQuY291bnQoX2wodCktMSx0KSxlLDIpfWZ1bmN0aW9uIENXKHQpe3ZhciBlPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIGU+PTR8fGU9PT0wP1JoKHQpOlJoLmNlaWwodCl9ZnVuY3Rpb24gX2tlKHQsZSl7cmV0dXJuIHQ9Q1codCksSHIoUmguY291bnQoX2wodCksdCkrKF9sKHQpLmdldFVUQ0RheSgpPT09NCksZSwyKX1mdW5jdGlvbiBMa2UodCl7cmV0dXJuIHQuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gRGtlKHQsZSl7cmV0dXJuIEhyKEhwLmNvdW50KF9sKHQpLTEsdCksZSwyKX1mdW5jdGlvbiBOa2UodCxlKXtyZXR1cm4gSHIodC5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIFJrZSh0LGUpe3JldHVybiB0PUNXKHQpLEhyKHQuZ2V0VVRDRnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBNa2UodCxlKXtyZXR1cm4gSHIodC5nZXRVVENGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIElrZSh0LGUpe3ZhciByPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIHQ9cj49NHx8cj09PTA/UmgodCk6UmguY2VpbCh0KSxIcih0LmdldFVUQ0Z1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gT2tlKCl7cmV0dXJuIiswMDAwIn1mdW5jdGlvbiBiVygpe3JldHVybiIlIn1mdW5jdGlvbiB3Vyh0KXtyZXR1cm4rdH1mdW5jdGlvbiBUVyh0KXtyZXR1cm4gTWF0aC5mbG9vcigrdC8xZTMpfXZhciBkVyx0YSxCVGUsRlRlLEFXPU0oKCk9PnsidXNlIHN0cmljdCI7QjMoKTtvKFg4LCJsb2NhbERhdGUiKTtvKGo4LCJ1dGNEYXRlIik7byhReSwibmV3RGF0ZSIpO28oSzgsImZvcm1hdExvY2FsZSIpO2RXPXsiLSI6IiIsXzoiICIsMDoiMCJ9LHRhPS9eXHMqXGQrLyxCVGU9L14lLyxGVGU9L1tcXF4kKis/fFtcXSgpLnt9XS9nO28oSHIsInBhZCIpO28oelRlLCJyZXF1b3RlIik7byhaeSwiZm9ybWF0UmUiKTtvKEp5LCJmb3JtYXRMb29rdXAiKTtvKEdUZSwicGFyc2VXZWVrZGF5TnVtYmVyU3VuZGF5Iik7bygkVGUsInBhcnNlV2Vla2RheU51bWJlck1vbmRheSIpO28oVlRlLCJwYXJzZVdlZWtOdW1iZXJTdW5kYXkiKTtvKFVUZSwicGFyc2VXZWVrTnVtYmVySVNPIik7byhIVGUsInBhcnNlV2Vla051bWJlck1vbmRheSIpO28ocFcsInBhcnNlRnVsbFllYXIiKTtvKG1XLCJwYXJzZVllYXIiKTtvKFdUZSwicGFyc2Vab25lIik7byhZVGUsInBhcnNlUXVhcnRlciIpO28ocVRlLCJwYXJzZU1vbnRoTnVtYmVyIik7byhnVywicGFyc2VEYXlPZk1vbnRoIik7byhYVGUsInBhcnNlRGF5T2ZZZWFyIik7byh5VywicGFyc2VIb3VyMjQiKTtvKGpUZSwicGFyc2VNaW51dGVzIik7byhLVGUsInBhcnNlU2Vjb25kcyIpO28oUVRlLCJwYXJzZU1pbGxpc2Vjb25kcyIpO28oWlRlLCJwYXJzZU1pY3Jvc2Vjb25kcyIpO28oSlRlLCJwYXJzZUxpdGVyYWxQZXJjZW50Iik7byhla2UsInBhcnNlVW5peFRpbWVzdGFtcCIpO28odGtlLCJwYXJzZVVuaXhUaW1lc3RhbXBTZWNvbmRzIik7byh2VywiZm9ybWF0RGF5T2ZNb250aCIpO28ocmtlLCJmb3JtYXRIb3VyMjQiKTtvKG5rZSwiZm9ybWF0SG91cjEyIik7byhpa2UsImZvcm1hdERheU9mWWVhciIpO28oa1csImZvcm1hdE1pbGxpc2Vjb25kcyIpO28oYWtlLCJmb3JtYXRNaWNyb3NlY29uZHMiKTtvKHNrZSwiZm9ybWF0TW9udGhOdW1iZXIiKTtvKG9rZSwiZm9ybWF0TWludXRlcyIpO28obGtlLCJmb3JtYXRTZWNvbmRzIik7byhja2UsImZvcm1hdFdlZWtkYXlOdW1iZXJNb25kYXkiKTtvKHVrZSwiZm9ybWF0V2Vla051bWJlclN1bmRheSIpO28oRVcsImRJU08iKTtvKGhrZSwiZm9ybWF0V2Vla051bWJlcklTTyIpO28oZmtlLCJmb3JtYXRXZWVrZGF5TnVtYmVyU3VuZGF5Iik7byhka2UsImZvcm1hdFdlZWtOdW1iZXJNb25kYXkiKTtvKHBrZSwiZm9ybWF0WWVhciIpO28obWtlLCJmb3JtYXRZZWFySVNPIik7byhna2UsImZvcm1hdEZ1bGxZZWFyIik7byh5a2UsImZvcm1hdEZ1bGxZZWFySVNPIik7byh2a2UsImZvcm1hdFpvbmUiKTtvKHhXLCJmb3JtYXRVVENEYXlPZk1vbnRoIik7byh4a2UsImZvcm1hdFVUQ0hvdXIyNCIpO28oYmtlLCJmb3JtYXRVVENIb3VyMTIiKTtvKHdrZSwiZm9ybWF0VVRDRGF5T2ZZZWFyIik7byhTVywiZm9ybWF0VVRDTWlsbGlzZWNvbmRzIik7byhUa2UsImZvcm1hdFVUQ01pY3Jvc2Vjb25kcyIpO28oa2tlLCJmb3JtYXRVVENNb250aE51bWJlciIpO28oRWtlLCJmb3JtYXRVVENNaW51dGVzIik7byhTa2UsImZvcm1hdFVUQ1NlY29uZHMiKTtvKENrZSwiZm9ybWF0VVRDV2Vla2RheU51bWJlck1vbmRheSIpO28oQWtlLCJmb3JtYXRVVENXZWVrTnVtYmVyU3VuZGF5Iik7byhDVywiVVRDZElTTyIpO28oX2tlLCJmb3JtYXRVVENXZWVrTnVtYmVySVNPIik7byhMa2UsImZvcm1hdFVUQ1dlZWtkYXlOdW1iZXJTdW5kYXkiKTtvKERrZSwiZm9ybWF0VVRDV2Vla051bWJlck1vbmRheSIpO28oTmtlLCJmb3JtYXRVVENZZWFyIik7byhSa2UsImZvcm1hdFVUQ1llYXJJU08iKTtvKE1rZSwiZm9ybWF0VVRDRnVsbFllYXIiKTtvKElrZSwiZm9ybWF0VVRDRnVsbFllYXJJU08iKTtvKE9rZSwiZm9ybWF0VVRDWm9uZSIpO28oYlcsImZvcm1hdExpdGVyYWxQZXJjZW50Iik7byh3VywiZm9ybWF0VW5peFRpbWVzdGFtcCIpO28oVFcsImZvcm1hdFVuaXhUaW1lc3RhbXBTZWNvbmRzIil9KTtmdW5jdGlvbiBROCh0KXtyZXR1cm4gV3A9SzgodCksa2Q9V3AuZm9ybWF0LF9XPVdwLnBhcnNlLExXPVdwLnV0Y0Zvcm1hdCxEVz1XcC51dGNQYXJzZSxXcH12YXIgV3Asa2QsX1csTFcsRFcsTlc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtBVygpO1E4KHtkYXRlVGltZToiJXgsICVYIixkYXRlOiIlLW0vJS1kLyVZIix0aW1lOiIlLUk6JU06JVMgJXAiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSk7byhROCwiZGVmYXVsdExvY2FsZSIpfSk7dmFyIFo4PU0oKCk9PnsidXNlIHN0cmljdCI7TlcoKX0pO2Z1bmN0aW9uIFBrZSh0KXtyZXR1cm4gbmV3IERhdGUodCl9ZnVuY3Rpb24gQmtlKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRGF0ZT8rdDorbmV3IERhdGUoK3QpfWZ1bmN0aW9uIFJXKHQsZSxyLG4saSxhLHMsbCx1LGgpe3ZhciBmPVh5KCksZD1mLmludmVydCxwPWYuZG9tYWluLG09aCgiLiVMIiksZz1oKCI6JVMiKSx5PWgoIiVJOiVNIiksdj1oKCIlSSAlcCIpLHg9aCgiJWEgJWQiKSxiPWgoIiViICVkIiksdz1oKCIlQiIpLF89aCgiJVkiKTtmdW5jdGlvbiBUKEUpe3JldHVybih1KEUpPEU/bTpsKEUpPEU/ZzpzKEUpPEU/eTphKEUpPEU/djpuKEUpPEU/aShFKTxFP3g6YjpyKEUpPEU/dzpfKShFKX1yZXR1cm4gbyhULCJ0aWNrRm9ybWF0IiksZi5pbnZlcnQ9ZnVuY3Rpb24oRSl7cmV0dXJuIG5ldyBEYXRlKGQoRSkpfSxmLmRvbWFpbj1mdW5jdGlvbihFKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9wKEFycmF5LmZyb20oRSxCa2UpKTpwKCkubWFwKFBrZSl9LGYudGlja3M9ZnVuY3Rpb24oRSl7dmFyIEw9cCgpO3JldHVybiB0KExbMF0sTFtMLmxlbmd0aC0xXSxFPz8xMCl9LGYudGlja0Zvcm1hdD1mdW5jdGlvbihFLEwpe3JldHVybiBMPT1udWxsP1Q6aChMKX0sZi5uaWNlPWZ1bmN0aW9uKEUpe3ZhciBMPXAoKTtyZXR1cm4oIUV8fHR5cGVvZiBFLnJhbmdlIT0iZnVuY3Rpb24iKSYmKEU9ZShMWzBdLExbTC5sZW5ndGgtMV0sRT8/MTApKSxFP3AoTzgoTCxFKSk6Zn0sZi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIF8zKGYsUlcodCxlLHIsbixpLGEscyxsLHUsaCkpfSxmfWZ1bmN0aW9uIEYzKCl7cmV0dXJuIERoLmFwcGx5KFJXKFk4LHE4LHJvLEF1LEFsLE9vLEN1LFN1LHRvLGtkKS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSksYXJndW1lbnRzKX12YXIgTVc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtCMygpO1o4KCk7TTgoKTtxeSgpO2VXKCk7byhQa2UsImRhdGUiKTtvKEJrZSwibnVtYmVyIik7byhSVywiY2FsZW5kYXIiKTtvKEYzLCJ0aW1lIil9KTt2YXIgSVc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtYSCgpO0pIKCk7TDgoKTtNVygpfSk7ZnVuY3Rpb24gSjgodCl7Zm9yKHZhciBlPXQubGVuZ3RoLzZ8MCxyPW5ldyBBcnJheShlKSxuPTA7bjxlOylyW25dPSIjIit0LnNsaWNlKG4qNiwrK24qNik7cmV0dXJuIHJ9dmFyIE9XPU0oKCk9PnsidXNlIHN0cmljdCI7byhKOCwiZGVmYXVsdCIpfSk7dmFyIGVfLFBXPU0oKCk9PnsidXNlIHN0cmljdCI7T1coKTtlXz1KOCgiNGU3OWE3ZjI4ZTJjZTE1NzU5NzZiN2IyNTlhMTRmZWRjOTQ5YWY3YWExZmY5ZGE3OWM3NTVmYmFiMGFiIil9KTt2YXIgQlc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtQVygpfSk7ZnVuY3Rpb24gRm4odCl7cmV0dXJuIG8oZnVuY3Rpb24oKXtyZXR1cm4gdH0sImNvbnN0YW50Iil9dmFyIHozPU0oKCk9PnsidXNlIHN0cmljdCI7byhGbiwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gelcodCl7cmV0dXJuIHQ+MT8wOnQ8LTE/WXA6TWF0aC5hY29zKHQpfWZ1bmN0aW9uIHJfKHQpe3JldHVybiB0Pj0xP2V2OnQ8PS0xPy1ldjpNYXRoLmFzaW4odCl9dmFyIHRfLG1hLE1oLEZXLEczLExsLEVkLHJhLFlwLGV2LHFwLCQzPU0oKCk9PnsidXNlIHN0cmljdCI7dF89TWF0aC5hYnMsbWE9TWF0aC5hdGFuMixNaD1NYXRoLmNvcyxGVz1NYXRoLm1heCxHMz1NYXRoLm1pbixMbD1NYXRoLnNpbixFZD1NYXRoLnNxcnQscmE9MWUtMTIsWXA9TWF0aC5QSSxldj1ZcC8yLHFwPTIqWXA7byh6VywiYWNvcyIpO28ocl8sImFzaW4iKX0pO2Z1bmN0aW9uIFYzKHQpe2xldCBlPTM7cmV0dXJuIHQuZGlnaXRzPWZ1bmN0aW9uKHIpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBlO2lmKHI9PW51bGwpZT1udWxsO2Vsc2V7bGV0IG49TWF0aC5mbG9vcihyKTtpZighKG4+PTApKXRocm93IG5ldyBSYW5nZUVycm9yKGBpbnZhbGlkIGRpZ2l0czogJHtyfWApO2U9bn1yZXR1cm4gdH0sKCk9Pm5ldyBnZChlKX12YXIgbl89TSgoKT0+eyJ1c2Ugc3RyaWN0IjttOCgpO28oVjMsIndpdGhQYXRoIil9KTtmdW5jdGlvbiBGa2UodCl7cmV0dXJuIHQuaW5uZXJSYWRpdXN9ZnVuY3Rpb24gemtlKHQpe3JldHVybiB0Lm91dGVyUmFkaXVzfWZ1bmN0aW9uIEdrZSh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uICRrZSh0KXtyZXR1cm4gdC5lbmRBbmdsZX1mdW5jdGlvbiBWa2UodCl7cmV0dXJuIHQmJnQucGFkQW5nbGV9ZnVuY3Rpb24gVWtlKHQsZSxyLG4saSxhLHMsbCl7dmFyIHU9ci10LGg9bi1lLGY9cy1pLGQ9bC1hLHA9ZCp1LWYqaDtpZighKHAqcDxyYSkpcmV0dXJuIHA9KGYqKGUtYSktZCoodC1pKSkvcCxbdCtwKnUsZStwKmhdfWZ1bmN0aW9uIFUzKHQsZSxyLG4saSxhLHMpe3ZhciBsPXQtcix1PWUtbixoPShzP2E6LWEpL0VkKGwqbCt1KnUpLGY9aCp1LGQ9LWgqbCxwPXQrZixtPWUrZCxnPXIrZix5PW4rZCx2PShwK2cpLzIseD0obSt5KS8yLGI9Zy1wLHc9eS1tLF89YipiK3cqdyxUPWktYSxFPXAqeS1nKm0sTD0odzwwPy0xOjEpKkVkKEZXKDAsVCpUKl8tRSpFKSksUz0oRSp3LWIqTCkvXyxBPSgtRSpiLXcqTCkvXyxJPShFKncrYipMKS9fLEQ9KC1FKmIrdypMKS9fLGs9Uy12LFI9QS14LEM9SS12LE89RC14O3JldHVybiBrKmsrUipSPkMqQytPKk8mJihTPUksQT1EKSx7Y3g6UyxjeTpBLHgwMTotZix5MDE6LWQseDExOlMqKGkvVC0xKSx5MTE6QSooaS9ULTEpfX1mdW5jdGlvbiBEbCgpe3ZhciB0PUZrZSxlPXprZSxyPUZuKDApLG49bnVsbCxpPUdrZSxhPSRrZSxzPVZrZSxsPW51bGwsdT1WMyhoKTtmdW5jdGlvbiBoKCl7dmFyIGYsZCxwPSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxtPStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxnPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpLWV2LHk9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyktZXYsdj10Xyh5LWcpLHg9eT5nO2lmKGx8fChsPWY9dSgpKSxtPHAmJihkPW0sbT1wLHA9ZCksIShtPnJhKSlsLm1vdmVUbygwLDApO2Vsc2UgaWYodj5xcC1yYSlsLm1vdmVUbyhtKk1oKGcpLG0qTGwoZykpLGwuYXJjKDAsMCxtLGcseSwheCkscD5yYSYmKGwubW92ZVRvKHAqTWgoeSkscCpMbCh5KSksbC5hcmMoMCwwLHAseSxnLHgpKTtlbHNle3ZhciBiPWcsdz15LF89ZyxUPXksRT12LEw9dixTPXMuYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsQT1TPnJhJiYobj8rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RWQocCpwK20qbSkpLEk9RzModF8obS1wKS8yLCtyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksRD1JLGs9SSxSLEM7aWYoQT5yYSl7dmFyIE89cl8oQS9wKkxsKFMpKSxOPXJfKEEvbSpMbChTKSk7KEUtPU8qMik+cmE/KE8qPXg/MTotMSxfKz1PLFQtPU8pOihFPTAsXz1UPShnK3kpLzIpLChMLT1OKjIpPnJhPyhOKj14PzE6LTEsYis9Tix3LT1OKTooTD0wLGI9dz0oZyt5KS8yKX12YXIgUD1tKk1oKGIpLEY9bSpMbChiKSxCPXAqTWgoVCksRz1wKkxsKFQpO2lmKEk+cmEpe3ZhciB6PW0qTWgodyksVz1tKkxsKHcpLFo9cCpNaChfKSxqPXAqTGwoXyksb2U7aWYodjxZcClpZihvZT1Va2UoUCxGLFosaix6LFcsQixHKSl7dmFyIEs9UC1vZVswXSxlZT1GLW9lWzFdLEo9ei1vZVswXSxIPVctb2VbMV0scT0xL0xsKHpXKChLKkorZWUqSCkvKEVkKEsqSytlZSplZSkqRWQoSipKK0gqSCkpKS8yKSxRPUVkKG9lWzBdKm9lWzBdK29lWzFdKm9lWzFdKTtEPUczKEksKHAtUSkvKHEtMSkpLGs9RzMoSSwobS1RKS8ocSsxKSl9ZWxzZSBEPWs9MH1MPnJhP2s+cmE/KFI9VTMoWixqLFAsRixtLGsseCksQz1VMyh6LFcsQixHLG0sayx4KSxsLm1vdmVUbyhSLmN4K1IueDAxLFIuY3krUi55MDEpLGs8ST9sLmFyYyhSLmN4LFIuY3ksayxtYShSLnkwMSxSLngwMSksbWEoQy55MDEsQy54MDEpLCF4KToobC5hcmMoUi5jeCxSLmN5LGssbWEoUi55MDEsUi54MDEpLG1hKFIueTExLFIueDExKSwheCksbC5hcmMoMCwwLG0sbWEoUi5jeStSLnkxMSxSLmN4K1IueDExKSxtYShDLmN5K0MueTExLEMuY3grQy54MTEpLCF4KSxsLmFyYyhDLmN4LEMuY3ksayxtYShDLnkxMSxDLngxMSksbWEoQy55MDEsQy54MDEpLCF4KSkpOihsLm1vdmVUbyhQLEYpLGwuYXJjKDAsMCxtLGIsdywheCkpOmwubW92ZVRvKFAsRiksIShwPnJhKXx8IShFPnJhKT9sLmxpbmVUbyhCLEcpOkQ+cmE/KFI9VTMoQixHLHosVyxwLC1ELHgpLEM9VTMoUCxGLFosaixwLC1ELHgpLGwubGluZVRvKFIuY3grUi54MDEsUi5jeStSLnkwMSksRDxJP2wuYXJjKFIuY3gsUi5jeSxELG1hKFIueTAxLFIueDAxKSxtYShDLnkwMSxDLngwMSksIXgpOihsLmFyYyhSLmN4LFIuY3ksRCxtYShSLnkwMSxSLngwMSksbWEoUi55MTEsUi54MTEpLCF4KSxsLmFyYygwLDAscCxtYShSLmN5K1IueTExLFIuY3grUi54MTEpLG1hKEMuY3krQy55MTEsQy5jeCtDLngxMSkseCksbC5hcmMoQy5jeCxDLmN5LEQsbWEoQy55MTEsQy54MTEpLG1hKEMueTAxLEMueDAxKSwheCkpKTpsLmFyYygwLDAscCxULF8seCl9aWYobC5jbG9zZVBhdGgoKSxmKXJldHVybiBsPW51bGwsZisiInx8bnVsbH1yZXR1cm4gbyhoLCJhcmMiKSxoLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIGY9KCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLGQ9KCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2EuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLVlwLzI7cmV0dXJuW01oKGQpKmYsTGwoZCkqZl19LGguaW5uZXJSYWRpdXM9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpGbigrZiksaCk6dH0saC5vdXRlclJhZGl1cz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOkZuKCtmKSxoKTplfSxoLmNvcm5lclJhZGl1cz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOkZuKCtmKSxoKTpyfSxoLnBhZFJhZGl1cz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1mPT1udWxsP251bGw6dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpGbigrZiksaCk6bn0saC5zdGFydEFuZ2xlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6Rm4oK2YpLGgpOml9LGguZW5kQW5nbGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpGbigrZiksaCk6YX0saC5wYWRBbmdsZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOkZuKCtmKSxoKTpzfSxoLmNvbnRleHQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9Zj8/bnVsbCxoKTpsfSxofXZhciBHVz1NKCgpPT57InVzZSBzdHJpY3QiO3ozKCk7JDMoKTtuXygpO28oRmtlLCJhcmNJbm5lclJhZGl1cyIpO28oemtlLCJhcmNPdXRlclJhZGl1cyIpO28oR2tlLCJhcmNTdGFydEFuZ2xlIik7bygka2UsImFyY0VuZEFuZ2xlIik7byhWa2UsImFyY1BhZEFuZ2xlIik7byhVa2UsImludGVyc2VjdCIpO28oVTMsImNvcm5lclRhbmdlbnRzIik7byhEbCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gdHYodCl7cmV0dXJuIHR5cGVvZiB0PT0ib2JqZWN0IiYmImxlbmd0aCJpbiB0P3Q6QXJyYXkuZnJvbSh0KX12YXIgbzJ0LGlfPU0oKCk9PnsidXNlIHN0cmljdCI7bzJ0PUFycmF5LnByb3RvdHlwZS5zbGljZTtvKHR2LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiAkVyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gWHAodCl7cmV0dXJuIG5ldyAkVyh0KX12YXIgYV89TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKCRXLCJMaW5lYXIiKTskVy5wcm90b3R5cGU9e2FyZWFTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSwiYXJlYVN0YXJ0IiksYXJlYUVuZDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LCJhcmVhRW5kIiksbGluZVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKHQsZSk7YnJlYWt9fSwicG9pbnQiKX07byhYcCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gVlcodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gVVcodCl7cmV0dXJuIHRbMV19dmFyIEhXPU0oKCk9PnsidXNlIHN0cmljdCI7byhWVywieCIpO28oVVcsInkiKX0pO2Z1bmN0aW9uIG5zKHQsZSl7dmFyIHI9Rm4oITApLG49bnVsbCxpPVhwLGE9bnVsbCxzPVYzKGwpO3Q9dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDp0PT09dm9pZCAwP1ZXOkZuKHQpLGU9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTplPT09dm9pZCAwP1VXOkZuKGUpO2Z1bmN0aW9uIGwodSl7dmFyIGgsZj0odT10dih1KSkubGVuZ3RoLGQscD0hMSxtO2ZvcihuPT1udWxsJiYoYT1pKG09cygpKSksaD0wO2g8PWY7KytoKSEoaDxmJiZyKGQ9dVtoXSxoLHUpKT09PXAmJigocD0hcCk/YS5saW5lU3RhcnQoKTphLmxpbmVFbmQoKSkscCYmYS5wb2ludCgrdChkLGgsdSksK2UoZCxoLHUpKTtpZihtKXJldHVybiBhPW51bGwsbSsiInx8bnVsbH1yZXR1cm4gbyhsLCJsaW5lIiksbC54PWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6Rm4oK3UpLGwpOnR9LGwueT1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgdT09ImZ1bmN0aW9uIj91OkZuKCt1KSxsKTplfSxsLmRlZmluZWQ9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpGbighIXUpLGwpOnJ9LGwuY3VydmU9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dSxuIT1udWxsJiYoYT1pKG4pKSxsKTppfSxsLmNvbnRleHQ9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9PW51bGw/bj1hPW51bGw6YT1pKG49dSksbCk6bn0sbH12YXIgV1c9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtpXygpO3ozKCk7YV8oKTtuXygpO0hXKCk7byhucywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gc18odCxlKXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIFlXPU0oKCk9PnsidXNlIHN0cmljdCI7byhzXywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gb18odCl7cmV0dXJuIHR9dmFyIHFXPU0oKCk9PnsidXNlIHN0cmljdCI7byhvXywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gSDMoKXt2YXIgdD1vXyxlPXNfLHI9bnVsbCxuPUZuKDApLGk9Rm4ocXApLGE9Rm4oMCk7ZnVuY3Rpb24gcyhsKXt2YXIgdSxoPShsPXR2KGwpKS5sZW5ndGgsZixkLHA9MCxtPW5ldyBBcnJheShoKSxnPW5ldyBBcnJheShoKSx5PStuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx2PU1hdGgubWluKHFwLE1hdGgubWF4KC1xcCxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKS15KSkseCxiPU1hdGgubWluKE1hdGguYWJzKHYpL2gsYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLHc9YioodjwwPy0xOjEpLF87Zm9yKHU9MDt1PGg7Kyt1KShfPWdbbVt1XT11XT0rdChsW3VdLHUsbCkpPjAmJihwKz1fKTtmb3IoZSE9bnVsbD9tLnNvcnQoZnVuY3Rpb24oVCxFKXtyZXR1cm4gZShnW1RdLGdbRV0pfSk6ciE9bnVsbCYmbS5zb3J0KGZ1bmN0aW9uKFQsRSl7cmV0dXJuIHIobFtUXSxsW0VdKX0pLHU9MCxkPXA/KHYtaCp3KS9wOjA7dTxoOysrdSx5PXgpZj1tW3VdLF89Z1tmXSx4PXkrKF8+MD9fKmQ6MCkrdyxnW2ZdPXtkYXRhOmxbZl0saW5kZXg6dSx2YWx1ZTpfLHN0YXJ0QW5nbGU6eSxlbmRBbmdsZTp4LHBhZEFuZ2xlOmJ9O3JldHVybiBnfXJldHVybiBvKHMsInBpZSIpLHMudmFsdWU9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpGbigrbCkscyk6dH0scy5zb3J0VmFsdWVzPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWwscj1udWxsLHMpOmV9LHMuc29ydD1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1sLGU9bnVsbCxzKTpyfSxzLnN0YXJ0QW5nbGU9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpGbigrbCkscyk6bn0scy5lbmRBbmdsZT1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOkZuKCtsKSxzKTppfSxzLnBhZEFuZ2xlPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6Rm4oK2wpLHMpOmF9LHN9dmFyIFhXPU0oKCk9PnsidXNlIHN0cmljdCI7aV8oKTt6MygpO1lXKCk7cVcoKTskMygpO28oSDMsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGxfKHQpe3JldHVybiBuZXcgVzModCwhMCl9ZnVuY3Rpb24gY18odCl7cmV0dXJuIG5ldyBXMyh0LCExKX12YXIgVzMsalc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtXMz1jbGFzc3tzdGF0aWN7byh0aGlzLCJCdW1wIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLl9jb250ZXh0PWUsdGhpcy5feD1yfWFyZWFTdGFydCgpe3RoaXMuX2xpbmU9MH1hcmVhRW5kKCl7dGhpcy5fbGluZT1OYU59bGluZVN0YXJ0KCl7dGhpcy5fcG9pbnQ9MH1saW5lRW5kKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfXBvaW50KGUscil7c3dpdGNoKGU9K2Uscj0rcix0aGlzLl9wb2ludCl7Y2FzZSAwOnt0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSxyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHIpO2JyZWFrfWNhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6e3RoaXMuX3g/dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHRoaXMuX3gwPSh0aGlzLl94MCtlKS8yLHRoaXMuX3kwLHRoaXMuX3gwLHIsZSxyKTp0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8odGhpcy5feDAsdGhpcy5feTA9KHRoaXMuX3kwK3IpLzIsZSx0aGlzLl95MCxlLHIpO2JyZWFrfX10aGlzLl94MD1lLHRoaXMuX3kwPXJ9fTtvKGxfLCJidW1wWCIpO28oY18sImJ1bXBZIil9KTtmdW5jdGlvbiBubygpe312YXIgcnY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKG5vLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBqcCh0LGUscil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKnQuX3gwK3QuX3gxKS8zLCgyKnQuX3kwK3QuX3kxKS8zLCh0Ll94MCsyKnQuX3gxKS8zLCh0Ll95MCsyKnQuX3kxKS8zLCh0Ll94MCs0KnQuX3gxK2UpLzYsKHQuX3kwKzQqdC5feTErcikvNil9ZnVuY3Rpb24gbnYodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIFBvKHQpe3JldHVybiBuZXcgbnYodCl9dmFyIGl2PU0oKCk9PnsidXNlIHN0cmljdCI7byhqcCwicG9pbnQiKTtvKG52LCJCYXNpcyIpO252LnByb3RvdHlwZT17YXJlYVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LCJhcmVhU3RhcnQiKSxhcmVhRW5kOm8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sImFyZWFFbmQiKSxsaW5lU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6anAodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LCJsaW5lRW5kIikscG9pbnQ6byhmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2NvbnRleHQubGluZVRvKCg1KnRoaXMuX3gwK3RoaXMuX3gxKS82LCg1KnRoaXMuX3kwK3RoaXMuX3kxKS82KTtkZWZhdWx0OmpwKHRoaXMsdCxlKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9LCJwb2ludCIpfTtvKFBvLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBLVyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gWTModCl7cmV0dXJuIG5ldyBLVyh0KX12YXIgUVc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtydigpO2l2KCk7byhLVywiQmFzaXNDbG9zZWQiKTtLVy5wcm90b3R5cGU9e2FyZWFTdGFydDpubyxhcmVhRW5kOm5vLGxpbmVTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9TmFOLHRoaXMuX3BvaW50PTB9LCJsaW5lU3RhcnQiKSxsaW5lRW5kOm8oZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp7dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAyOnt0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDIrMip0aGlzLl94MykvMywodGhpcy5feTIrMip0aGlzLl95MykvMyksdGhpcy5fY29udGV4dC5saW5lVG8oKHRoaXMuX3gzKzIqdGhpcy5feDIpLzMsKHRoaXMuX3kzKzIqdGhpcy5feTIpLzMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KTticmVha319fSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mj10LHRoaXMuX3kyPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSx0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDArNCp0aGlzLl94MSt0KS82LCh0aGlzLl95MCs0KnRoaXMuX3kxK2UpLzYpO2JyZWFrO2RlZmF1bHQ6anAodGhpcyx0LGUpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX0sInBvaW50Iil9O28oWTMsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFpXKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBxMyh0KXtyZXR1cm4gbmV3IFpXKHQpfXZhciBKVz1NKCgpPT57InVzZSBzdHJpY3QiO2l2KCk7byhaVywiQmFzaXNPcGVuIik7WlcucHJvdG90eXBlPXthcmVhU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sImFyZWFTdGFydCIpLGFyZWFFbmQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSwiYXJlYUVuZCIpLGxpbmVTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LCJsaW5lU3RhcnQiKSxsaW5lRW5kOm8oZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LCJsaW5lRW5kIikscG9pbnQ6byhmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO3ZhciByPSh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYsbj0odGhpcy5feTArNCp0aGlzLl95MStlKS82O3RoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8ocixuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhyLG4pO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6anAodGhpcyx0LGUpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX0sInBvaW50Iil9O28ocTMsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGVZKHQsZSl7dGhpcy5fYmFzaXM9bmV3IG52KHQpLHRoaXMuX2JldGE9ZX12YXIgdV8sdFk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtpdigpO28oZVksIkJ1bmRsZSIpO2VZLnByb3RvdHlwZT17bGluZVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LCJsaW5lU3RhcnQiKSxsaW5lRW5kOm8oZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGU9dGhpcy5feSxyPXQubGVuZ3RoLTE7aWYocj4wKWZvcih2YXIgbj10WzBdLGk9ZVswXSxhPXRbcl0tbixzPWVbcl0taSxsPS0xLHU7KytsPD1yOyl1PWwvcix0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKnRbbF0rKDEtdGhpcy5fYmV0YSkqKG4rdSphKSx0aGlzLl9iZXRhKmVbbF0rKDEtdGhpcy5fYmV0YSkqKGkrdSpzKSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXt0aGlzLl94LnB1c2goK3QpLHRoaXMuX3kucHVzaCgrZSl9LCJwb2ludCIpfTt1Xz1vKGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gZT09PTE/bmV3IG52KG4pOm5ldyBlWShuLGUpfXJldHVybiBvKHIsImJ1bmRsZSIpLHIuYmV0YT1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LHJ9LCJjdXN0b20iKSguODUpfSk7ZnVuY3Rpb24gS3AodCxlLHIpe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0Ll94MSt0Ll9rKih0Ll94Mi10Ll94MCksdC5feTErdC5fayoodC5feTItdC5feTApLHQuX3gyK3QuX2sqKHQuX3gxLWUpLHQuX3kyK3QuX2sqKHQuX3kxLXIpLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiBYMyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9dmFyIGhfLGF2PU0oKCk9PnsidXNlIHN0cmljdCI7byhLcCwicG9pbnQiKTtvKFgzLCJDYXJkaW5hbCIpO1gzLnByb3RvdHlwZT17YXJlYVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LCJhcmVhU3RhcnQiKSxhcmVhRW5kOm8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sImFyZWFFbmQiKSxsaW5lU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzpLcCh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LCJsaW5lRW5kIikscG9pbnQ6byhmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPXQsdGhpcy5feTE9ZTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OktwKHRoaXMsdCxlKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9LCJwb2ludCIpfTtoXz1vKGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbmV3IFgzKG4sZSl9cmV0dXJuIG8ociwiY2FyZGluYWwiKSxyLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxyfSwiY3VzdG9tIikoMCl9KTtmdW5jdGlvbiBqMyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9dmFyIGZfLGRfPU0oKCk9PnsidXNlIHN0cmljdCI7cnYoKTthdigpO28oajMsIkNhcmRpbmFsQ2xvc2VkIik7ajMucHJvdG90eXBlPXthcmVhU3RhcnQ6bm8sYXJlYUVuZDpubyxsaW5lU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1lKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PWU7YnJlYWs7ZGVmYXVsdDpLcCh0aGlzLHQsZSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfSwicG9pbnQiKX07Zl89byhmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIobil7cmV0dXJuIG5ldyBqMyhuLGUpfXJldHVybiBvKHIsImNhcmRpbmFsIiksci50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiB0KCtuKX0scn0sImN1c3RvbSIpKDApfSk7ZnVuY3Rpb24gSzModCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fXZhciBwXyxtXz1NKCgpPT57InVzZSBzdHJpY3QiO2F2KCk7byhLMywiQ2FyZGluYWxPcGVuIik7SzMucHJvdG90eXBlPXthcmVhU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sImFyZWFTdGFydCIpLGFyZWFFbmQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSwiYXJlYUVuZCIpLGxpbmVTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LCJsaW5lU3RhcnQiKSxsaW5lRW5kOm8oZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LCJsaW5lRW5kIikscG9pbnQ6byhmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OktwKHRoaXMsdCxlKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9LCJwb2ludCIpfTtwXz1vKGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbmV3IEszKG4sZSl9cmV0dXJuIG8ociwiY2FyZGluYWwiKSxyLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxyfSwiY3VzdG9tIikoMCl9KTtmdW5jdGlvbiBzdih0LGUscil7dmFyIG49dC5feDEsaT10Ll95MSxhPXQuX3gyLHM9dC5feTI7aWYodC5fbDAxX2E+cmEpe3ZhciBsPTIqdC5fbDAxXzJhKzMqdC5fbDAxX2EqdC5fbDEyX2ErdC5fbDEyXzJhLHU9Myp0Ll9sMDFfYSoodC5fbDAxX2ErdC5fbDEyX2EpO249KG4qbC10Ll94MCp0Ll9sMTJfMmErdC5feDIqdC5fbDAxXzJhKS91LGk9KGkqbC10Ll95MCp0Ll9sMTJfMmErdC5feTIqdC5fbDAxXzJhKS91fWlmKHQuX2wyM19hPnJhKXt2YXIgaD0yKnQuX2wyM18yYSszKnQuX2wyM19hKnQuX2wxMl9hK3QuX2wxMl8yYSxmPTMqdC5fbDIzX2EqKHQuX2wyM19hK3QuX2wxMl9hKTthPShhKmgrdC5feDEqdC5fbDIzXzJhLWUqdC5fbDEyXzJhKS9mLHM9KHMqaCt0Ll95MSp0Ll9sMjNfMmEtcip0Ll9sMTJfMmEpL2Z9dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4saSxhLHMsdC5feDIsdC5feTIpfWZ1bmN0aW9uIHJZKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9dmFyIGdfLFEzPU0oKCk9PnsidXNlIHN0cmljdCI7JDMoKTthdigpO28oc3YsInBvaW50Iik7byhyWSwiQ2F0bXVsbFJvbSIpO3JZLnByb3RvdHlwZT17YXJlYVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LCJhcmVhU3RhcnQiKSxhcmVhRW5kOm8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sImFyZWFFbmQiKSxsaW5lU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LCJsaW5lRW5kIikscG9pbnQ6byhmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItdCxuPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OnN2KHRoaXMsdCxlKTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfSwicG9pbnQiKX07Z189byhmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGU/bmV3IHJZKG4sZSk6bmV3IFgzKG4sMCl9cmV0dXJuIG8ociwiY2F0bXVsbFJvbSIpLHIuYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxyfSwiY3VzdG9tIikoLjUpfSk7ZnVuY3Rpb24gblkodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX12YXIgeV8saVk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtkXygpO3J2KCk7UTMoKTtvKG5ZLCJDYXRtdWxsUm9tQ2xvc2VkIik7blkucHJvdG90eXBlPXthcmVhU3RhcnQ6bm8sYXJlYUVuZDpubyxsaW5lU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciByPXRoaXMuX3gyLXQsbj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cocipyK24qbix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6c3YodGhpcyx0LGUpO2JyZWFrfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9LCJwb2ludCIpfTt5Xz1vKGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gZT9uZXcgblkobixlKTpuZXcgajMobiwwKX1yZXR1cm4gbyhyLCJjYXRtdWxsUm9tIiksci5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LHJ9LCJjdXN0b20iKSguNSl9KTtmdW5jdGlvbiBhWSh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfXZhciB2XyxzWT1NKCgpPT57InVzZSBzdHJpY3QiO21fKCk7UTMoKTtvKGFZLCJDYXRtdWxsUm9tT3BlbiIpO2FZLnByb3RvdHlwZT17YXJlYVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LCJhcmVhU3RhcnQiKSxhcmVhRW5kOm8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sImFyZWFFbmQiKSxsaW5lU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciByPXRoaXMuX3gyLXQsbj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cocipyK24qbix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6c3YodGhpcyx0LGUpO2JyZWFrfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9LCJwb2ludCIpfTt2Xz1vKGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gZT9uZXcgYVkobixlKTpuZXcgSzMobiwwKX1yZXR1cm4gbyhyLCJjYXRtdWxsUm9tIiksci5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LHJ9LCJjdXN0b20iKSguNSl9KTtmdW5jdGlvbiBvWSh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gWjModCl7cmV0dXJuIG5ldyBvWSh0KX12YXIgbFk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtydigpO28ob1ksIkxpbmVhckNsb3NlZCIpO29ZLnByb3RvdHlwZT17YXJlYVN0YXJ0Om5vLGFyZWFFbmQ6bm8sbGluZVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LCJsaW5lRW5kIikscG9pbnQ6byhmdW5jdGlvbih0LGUpe3Q9K3QsZT0rZSx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSkpfSwicG9pbnQiKX07byhaMywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gY1kodCl7cmV0dXJuIHQ8MD8tMToxfWZ1bmN0aW9uIHVZKHQsZSxyKXt2YXIgbj10Ll94MS10Ll94MCxpPWUtdC5feDEsYT0odC5feTEtdC5feTApLyhufHxpPDAmJi0wKSxzPShyLXQuX3kxKS8oaXx8bjwwJiYtMCksbD0oYSppK3MqbikvKG4raSk7cmV0dXJuKGNZKGEpK2NZKHMpKSpNYXRoLm1pbihNYXRoLmFicyhhKSxNYXRoLmFicyhzKSwuNSpNYXRoLmFicyhsKSl8fDB9ZnVuY3Rpb24gaFkodCxlKXt2YXIgcj10Ll94MS10Ll94MDtyZXR1cm4gcj8oMyoodC5feTEtdC5feTApL3ItZSkvMjplfWZ1bmN0aW9uIHhfKHQsZSxyKXt2YXIgbj10Ll94MCxpPXQuX3kwLGE9dC5feDEscz10Ll95MSxsPShhLW4pLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4rbCxpK2wqZSxhLWwscy1sKnIsYSxzKX1mdW5jdGlvbiBKMyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gZlkodCl7dGhpcy5fY29udGV4dD1uZXcgZFkodCl9ZnVuY3Rpb24gZFkodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIGJfKHQpe3JldHVybiBuZXcgSjModCl9ZnVuY3Rpb24gd18odCl7cmV0dXJuIG5ldyBmWSh0KX12YXIgcFk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKGNZLCJzaWduIik7byh1WSwic2xvcGUzIik7byhoWSwic2xvcGUyIik7byh4XywicG9pbnQiKTtvKEozLCJNb25vdG9uZVgiKTtKMy5wcm90b3R5cGU9e2FyZWFTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSwiYXJlYVN0YXJ0IiksYXJlYUVuZDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LCJhcmVhRW5kIiksbGluZVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT10aGlzLl90MD1OYU4sdGhpcy5fcG9pbnQ9MH0sImxpbmVTdGFydCIpLGxpbmVFbmQ6byhmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVhaztjYXNlIDM6eF8odGhpcyx0aGlzLl90MCxoWSh0aGlzLHRoaXMuX3QwKSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXt2YXIgcj1OYU47aWYodD0rdCxlPStlLCEodD09PXRoaXMuX3gxJiZlPT09dGhpcy5feTEpKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHhfKHRoaXMsaFkodGhpcyxyPXVZKHRoaXMsdCxlKSkscik7YnJlYWs7ZGVmYXVsdDp4Xyh0aGlzLHRoaXMuX3QwLHI9dVkodGhpcyx0LGUpKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWUsdGhpcy5fdDA9cn19LCJwb2ludCIpfTtvKGZZLCJNb25vdG9uZVkiKTsoZlkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSjMucHJvdG90eXBlKSkucG9pbnQ9ZnVuY3Rpb24odCxlKXtKMy5wcm90b3R5cGUucG9pbnQuY2FsbCh0aGlzLGUsdCl9O28oZFksIlJlZmxlY3RDb250ZXh0Iik7ZFkucHJvdG90eXBlPXttb3ZlVG86byhmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubW92ZVRvKGUsdCl9LCJtb3ZlVG8iKSxjbG9zZVBhdGg6byhmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LCJjbG9zZVBhdGgiKSxsaW5lVG86byhmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCl9LCJsaW5lVG8iKSxiZXppZXJDdXJ2ZVRvOm8oZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhlLHQsbixyLGEsaSl9LCJiZXppZXJDdXJ2ZVRvIil9O28oYl8sIm1vbm90b25lWCIpO28od18sIm1vbm90b25lWSIpfSk7ZnVuY3Rpb24gZ1kodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIG1ZKHQpe3ZhciBlLHI9dC5sZW5ndGgtMSxuLGk9bmV3IEFycmF5KHIpLGE9bmV3IEFycmF5KHIpLHM9bmV3IEFycmF5KHIpO2ZvcihpWzBdPTAsYVswXT0yLHNbMF09dFswXSsyKnRbMV0sZT0xO2U8ci0xOysrZSlpW2VdPTEsYVtlXT00LHNbZV09NCp0W2VdKzIqdFtlKzFdO2ZvcihpW3ItMV09MixhW3ItMV09NyxzW3ItMV09OCp0W3ItMV0rdFtyXSxlPTE7ZTxyOysrZSluPWlbZV0vYVtlLTFdLGFbZV0tPW4sc1tlXS09bipzW2UtMV07Zm9yKGlbci0xXT1zW3ItMV0vYVtyLTFdLGU9ci0yO2U+PTA7LS1lKWlbZV09KHNbZV0taVtlKzFdKS9hW2VdO2ZvcihhW3ItMV09KHRbcl0raVtyLTFdKS8yLGU9MDtlPHItMTsrK2UpYVtlXT0yKnRbZSsxXS1pW2UrMV07cmV0dXJuW2ksYV19ZnVuY3Rpb24gZTUodCl7cmV0dXJuIG5ldyBnWSh0KX12YXIgeVk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKGdZLCJOYXR1cmFsIik7Z1kucHJvdG90eXBlPXthcmVhU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sImFyZWFTdGFydCIpLGFyZWFFbmQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSwiYXJlYUVuZCIpLGxpbmVTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5feCxlPXRoaXMuX3kscj10Lmxlbmd0aDtpZihyKWlmKHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odFswXSxlWzBdKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0WzBdLGVbMF0pLHI9PT0yKXRoaXMuX2NvbnRleHQubGluZVRvKHRbMV0sZVsxXSk7ZWxzZSBmb3IodmFyIG49bVkodCksaT1tWShlKSxhPTAscz0xO3M8cjsrK2EsKytzKXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuWzBdW2FdLGlbMF1bYV0sblsxXVthXSxpWzFdW2FdLHRbc10sZVtzXSk7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZyPT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LCJsaW5lRW5kIikscG9pbnQ6byhmdW5jdGlvbih0LGUpe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtlKX0sInBvaW50Iil9O28obVksImNvbnRyb2xQb2ludHMiKTtvKGU1LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiB0NSh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl90PWV9ZnVuY3Rpb24gcjUodCl7cmV0dXJuIG5ldyB0NSh0LC41KX1mdW5jdGlvbiBUXyh0KXtyZXR1cm4gbmV3IHQ1KHQsMCl9ZnVuY3Rpb24ga18odCl7cmV0dXJuIG5ldyB0NSh0LDEpfXZhciB2WT1NKCgpPT57InVzZSBzdHJpY3QiO28odDUsIlN0ZXAiKTt0NS5wcm90b3R5cGU9e2FyZWFTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSwiYXJlYVN0YXJ0IiksYXJlYUVuZDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LCJhcmVhRW5kIiksbGluZVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl94PXRoaXMuX3k9TmFOLHRoaXMuX3BvaW50PTB9LCJsaW5lU3RhcnQiKSxsaW5lRW5kOm8oZnVuY3Rpb24oKXswPHRoaXMuX3QmJnRoaXMuX3Q8MSYmdGhpcy5fcG9pbnQ9PT0yJiZ0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHRoaXMuX3kpLCh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPj0wJiYodGhpcy5fdD0xLXRoaXMuX3QsdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUpfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OntpZih0aGlzLl90PD0wKXRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsZSksdGhpcy5fY29udGV4dC5saW5lVG8odCxlKTtlbHNle3ZhciByPXRoaXMuX3gqKDEtdGhpcy5fdCkrdCp0aGlzLl90O3RoaXMuX2NvbnRleHQubGluZVRvKHIsdGhpcy5feSksdGhpcy5fY29udGV4dC5saW5lVG8ocixlKX1icmVha319dGhpcy5feD10LHRoaXMuX3k9ZX0sInBvaW50Iil9O28ocjUsImRlZmF1bHQiKTtvKFRfLCJzdGVwQmVmb3JlIik7byhrXywic3RlcEFmdGVyIil9KTt2YXIgeFk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtHVygpO1dXKCk7WFcoKTtRVygpO0pXKCk7aXYoKTtqVygpO3RZKCk7ZF8oKTttXygpO2F2KCk7aVkoKTtzWSgpO1EzKCk7bFkoKTthXygpO3BZKCk7eVkoKTt2WSgpfSk7dmFyIGJZPU0oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgd1k9TSgoKT0+eyJ1c2Ugc3RyaWN0In0pO2Z1bmN0aW9uIEloKHQsZSxyKXt0aGlzLms9dCx0aGlzLng9ZSx0aGlzLnk9cn1mdW5jdGlvbiBTXyh0KXtmb3IoOyF0Ll9fem9vbTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuIEVfO3JldHVybiB0Ll9fem9vbX12YXIgRV8sQ189TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKEloLCJUcmFuc2Zvcm0iKTtJaC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkloLHNjYWxlOm8oZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT0xP3RoaXM6bmV3IEloKHRoaXMuayp0LHRoaXMueCx0aGlzLnkpfSwic2NhbGUiKSx0cmFuc2xhdGU6byhmdW5jdGlvbih0LGUpe3JldHVybiB0PT09MCZlPT09MD90aGlzOm5ldyBJaCh0aGlzLmssdGhpcy54K3RoaXMuayp0LHRoaXMueSt0aGlzLmsqZSl9LCJ0cmFuc2xhdGUiKSxhcHBseTpvKGZ1bmN0aW9uKHQpe3JldHVyblt0WzBdKnRoaXMuayt0aGlzLngsdFsxXSp0aGlzLmsrdGhpcy55XX0sImFwcGx5IiksYXBwbHlYOm8oZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueH0sImFwcGx5WCIpLGFwcGx5WTpvKGZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnl9LCJhcHBseVkiKSxpbnZlcnQ6byhmdW5jdGlvbih0KXtyZXR1cm5bKHRbMF0tdGhpcy54KS90aGlzLmssKHRbMV0tdGhpcy55KS90aGlzLmtdfSwiaW52ZXJ0IiksaW52ZXJ0WDpvKGZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueCkvdGhpcy5rfSwiaW52ZXJ0WCIpLGludmVydFk6byhmdW5jdGlvbih0KXtyZXR1cm4odC10aGlzLnkpL3RoaXMua30sImludmVydFkiKSxyZXNjYWxlWDpvKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0sInJlc2NhbGVYIikscmVzY2FsZVk6byhmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRZLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LCJyZXNjYWxlWSIpLHRvU3RyaW5nOm8oZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifSwidG9TdHJpbmciKX07RV89bmV3IEloKDEsMCwwKTtTXy5wcm90b3R5cGU9SWgucHJvdG90eXBlO28oU18sInRyYW5zZm9ybSIpfSk7dmFyIFRZPU0oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIga1k9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt2MygpO2JZKCk7d1koKTtDXygpO1RZKCl9KTt2YXIgRVk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtrWSgpO0NfKCl9KTt2YXIgcHI9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtraCgpO3RWKCk7YkgoKTtFSCgpO1BwKCk7U0goKTtDSCgpO1Q3KCk7WVYoKTtBSCgpO3U4KCk7X0goKTtESCgpO0E4KCk7SEgoKTtXSCgpO3pwKCk7bTgoKTtZSCgpO0xIKCk7cUgoKTtJVygpO0JXKCk7VGwoKTt4WSgpO0IzKCk7WjgoKTtmMygpO3YzKCk7RVkoKX0pO3ZhciBTWT1FaShuYT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobmEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO25hLkJMQU5LX1VSTD1uYS5yZWxhdGl2ZUZpcnN0Q2hhcmFjdGVycz1uYS53aGl0ZXNwYWNlRXNjYXBlQ2hhcnNSZWdleD1uYS51cmxTY2hlbWVSZWdleD1uYS5jdHJsQ2hhcmFjdGVyc1JlZ2V4PW5hLmh0bWxDdHJsRW50aXR5UmVnZXg9bmEuaHRtbEVudGl0aWVzUmVnZXg9bmEuaW52YWxpZFByb3RvY29sUmVnZXg9dm9pZCAwO25hLmludmFsaWRQcm90b2NvbFJlZ2V4PS9eKFteXHddKikoamF2YXNjcmlwdHxkYXRhfHZic2NyaXB0KS9pbTtuYS5odG1sRW50aXRpZXNSZWdleD0vJiMoXHcrKSheXHd8Oyk/L2c7bmEuaHRtbEN0cmxFbnRpdHlSZWdleD0vJihuZXdsaW5lfHRhYik7L2dpO25hLmN0cmxDaGFyYWN0ZXJzUmVnZXg9L1tcdTAwMDAtXHUwMDFGXHUwMDdGLVx1MDA5Rlx1MjAwMC1cdTIwMERcdUZFRkZdL2dpbTtuYS51cmxTY2hlbWVSZWdleD0vXi4rKDp8JmNvbG9uOykvZ2ltO25hLndoaXRlc3BhY2VFc2NhcGVDaGFyc1JlZ2V4PS8oXFx8JTVbY0NdKSgoJSg2W2VFXXw3Mnw3NCkpfFtucnRdKS9nO25hLnJlbGF0aXZlRmlyc3RDaGFyYWN0ZXJzPVsiLiIsIi8iXTtuYS5CTEFOS19VUkw9ImFib3V0OmJsYW5rIn0pO3ZhciBRcD1FaShuNT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobjUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO241LnNhbml0aXplVXJsPXZvaWQgMDt2YXIgUmE9U1koKTtmdW5jdGlvbiBIa2UodCl7cmV0dXJuIFJhLnJlbGF0aXZlRmlyc3RDaGFyYWN0ZXJzLmluZGV4T2YodFswXSk+LTF9byhIa2UsImlzUmVsYXRpdmVVcmxXaXRob3V0UHJvdG9jb2wiKTtmdW5jdGlvbiBXa2UodCl7dmFyIGU9dC5yZXBsYWNlKFJhLmN0cmxDaGFyYWN0ZXJzUmVnZXgsIiIpO3JldHVybiBlLnJlcGxhY2UoUmEuaHRtbEVudGl0aWVzUmVnZXgsZnVuY3Rpb24ocixuKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShuKX0pfW8oV2tlLCJkZWNvZGVIdG1sQ2hhcmFjdGVycyIpO2Z1bmN0aW9uIFlrZSh0KXtyZXR1cm4gVVJMLmNhblBhcnNlKHQpfW8oWWtlLCJpc1ZhbGlkVXJsIik7ZnVuY3Rpb24gQ1kodCl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQodCl9Y2F0Y2h7cmV0dXJuIHR9fW8oQ1ksImRlY29kZVVSSSIpO2Z1bmN0aW9uIHFrZSh0KXtpZighdClyZXR1cm4gUmEuQkxBTktfVVJMO3ZhciBlLHI9Q1kodC50cmltKCkpO2RvIHI9V2tlKHIpLnJlcGxhY2UoUmEuaHRtbEN0cmxFbnRpdHlSZWdleCwiIikucmVwbGFjZShSYS5jdHJsQ2hhcmFjdGVyc1JlZ2V4LCIiKS5yZXBsYWNlKFJhLndoaXRlc3BhY2VFc2NhcGVDaGFyc1JlZ2V4LCIiKS50cmltKCkscj1DWShyKSxlPXIubWF0Y2goUmEuY3RybENoYXJhY3RlcnNSZWdleCl8fHIubWF0Y2goUmEuaHRtbEVudGl0aWVzUmVnZXgpfHxyLm1hdGNoKFJhLmh0bWxDdHJsRW50aXR5UmVnZXgpfHxyLm1hdGNoKFJhLndoaXRlc3BhY2VFc2NhcGVDaGFyc1JlZ2V4KTt3aGlsZShlJiZlLmxlbmd0aD4wKTt2YXIgbj1yO2lmKCFuKXJldHVybiBSYS5CTEFOS19VUkw7aWYoSGtlKG4pKXJldHVybiBuO3ZhciBpPW4udHJpbVN0YXJ0KCksYT1pLm1hdGNoKFJhLnVybFNjaGVtZVJlZ2V4KTtpZighYSlyZXR1cm4gbjt2YXIgcz1hWzBdLnRvTG93ZXJDYXNlKCkudHJpbSgpO2lmKFJhLmludmFsaWRQcm90b2NvbFJlZ2V4LnRlc3QocykpcmV0dXJuIFJhLkJMQU5LX1VSTDt2YXIgbD1pLnJlcGxhY2UoL1xcL2csIi8iKTtpZihzPT09Im1haWx0bzoifHxzLmluY2x1ZGVzKCI6Ly8iKSlyZXR1cm4gbDtpZihzPT09Imh0dHA6Inx8cz09PSJodHRwczoiKXtpZighWWtlKGwpKXJldHVybiBSYS5CTEFOS19VUkw7dmFyIHU9bmV3IFVSTChsKTtyZXR1cm4gdS5wcm90b2NvbD11LnByb3RvY29sLnRvTG93ZXJDYXNlKCksdS5ob3N0bmFtZT11Lmhvc3RuYW1lLnRvTG93ZXJDYXNlKCksdS50b1N0cmluZygpfXJldHVybiBsfW8ocWtlLCJzYW5pdGl6ZVVybCIpO241LnNhbml0aXplVXJsPXFrZX0pO3ZhciBBXyxTZCxpNSxBWSxfWSxMWSxObCxvdixsdj1NKCgpPT57InVzZSBzdHJpY3QiO0FfPUppKFFwKCksMSk7ZnIoKTtTZD1vKCh0LGUpPT57bGV0IHI9dC5hcHBlbmQoInJlY3QiKTtpZihyLmF0dHIoIngiLGUueCksci5hdHRyKCJ5IixlLnkpLHIuYXR0cigiZmlsbCIsZS5maWxsKSxyLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLHIuYXR0cigid2lkdGgiLGUud2lkdGgpLHIuYXR0cigiaGVpZ2h0IixlLmhlaWdodCksZS5uYW1lJiZyLmF0dHIoIm5hbWUiLGUubmFtZSksZS5yeCYmci5hdHRyKCJyeCIsZS5yeCksZS5yeSYmci5hdHRyKCJyeSIsZS5yeSksZS5hdHRycyE9PXZvaWQgMClmb3IobGV0IG4gaW4gZS5hdHRycylyLmF0dHIobixlLmF0dHJzW25dKTtyZXR1cm4gZS5jbGFzcyYmci5hdHRyKCJjbGFzcyIsZS5jbGFzcykscn0sImRyYXdSZWN0IiksaTU9bygodCxlKT0+e2xldCByPXt4OmUuc3RhcnR4LHk6ZS5zdGFydHksd2lkdGg6ZS5zdG9weC1lLnN0YXJ0eCxoZWlnaHQ6ZS5zdG9weS1lLnN0YXJ0eSxmaWxsOmUuZmlsbCxzdHJva2U6ZS5zdHJva2UsY2xhc3M6InJlY3QifTtTZCh0LHIpLmxvd2VyKCl9LCJkcmF3QmFja2dyb3VuZFJlY3QiKSxBWT1vKCh0LGUpPT57bGV0IHI9ZS50ZXh0LnJlcGxhY2UoYWQsIiAiKSxuPXQuYXBwZW5kKCJ0ZXh0Iik7bi5hdHRyKCJ4IixlLngpLG4uYXR0cigieSIsZS55KSxuLmF0dHIoImNsYXNzIiwibGVnZW5kIiksbi5zdHlsZSgidGV4dC1hbmNob3IiLGUuYW5jaG9yKSxlLmNsYXNzJiZuLmF0dHIoImNsYXNzIixlLmNsYXNzKTtsZXQgaT1uLmFwcGVuZCgidHNwYW4iKTtyZXR1cm4gaS5hdHRyKCJ4IixlLngrZS50ZXh0TWFyZ2luKjIpLGkudGV4dChyKSxufSwiZHJhd1RleHQiKSxfWT1vKCh0LGUscixuKT0+e2xldCBpPXQuYXBwZW5kKCJpbWFnZSIpO2kuYXR0cigieCIsZSksaS5hdHRyKCJ5IixyKTtsZXQgYT0oMCxBXy5zYW5pdGl6ZVVybCkobik7aS5hdHRyKCJ4bGluazpocmVmIixhKX0sImRyYXdJbWFnZSIpLExZPW8oKHQsZSxyLG4pPT57bGV0IGk9dC5hcHBlbmQoInVzZSIpO2kuYXR0cigieCIsZSksaS5hdHRyKCJ5IixyKTtsZXQgYT0oMCxBXy5zYW5pdGl6ZVVybCkobik7aS5hdHRyKCJ4bGluazpocmVmIixgIyR7YX1gKX0sImRyYXdFbWJlZGRlZEltYWdlIiksTmw9bygoKT0+KHt4OjAseTowLHdpZHRoOjEwMCxoZWlnaHQ6MTAwLGZpbGw6IiNFREYyQUUiLHN0cm9rZToiIzY2NiIsYW5jaG9yOiJzdGFydCIscng6MCxyeTowfSksImdldE5vdGVSZWN0Iiksb3Y9bygoKT0+KHt4OjAseTowLHdpZHRoOjEwMCxoZWlnaHQ6MTAwLCJ0ZXh0LWFuY2hvciI6InN0YXJ0IixzdHlsZToiIzY2NiIsdGV4dE1hcmdpbjowLHJ4OjAscnk6MCx0c3BhbjohMH0pLCJnZXRUZXh0T2JqIil9KTt2YXIgRFksX18sTlksWGtlLGprZSxLa2UsUWtlLFprZSxKa2UsZUVlLHRFZSxyRWUsbkVlLGlFZSxhRWUsX3UsUmwsUlk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtmcigpO2x2KCk7RFk9SmkoUXAoKSwxKSxfXz1vKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFNkKHQsZSl9LCJkcmF3UmVjdCIpLE5ZPW8oZnVuY3Rpb24odCxlLHIsbixpLGEpe2xldCBzPXQuYXBwZW5kKCJpbWFnZSIpO3MuYXR0cigid2lkdGgiLGUpLHMuYXR0cigiaGVpZ2h0IixyKSxzLmF0dHIoIngiLG4pLHMuYXR0cigieSIsaSk7bGV0IGw9YS5zdGFydHNXaXRoKCJkYXRhOmltYWdlL3BuZztiYXNlNjQiKT9hOigwLERZLnNhbml0aXplVXJsKShhKTtzLmF0dHIoInhsaW5rOmhyZWYiLGwpfSwiZHJhd0ltYWdlIiksWGtlPW8oKHQsZSxyKT0+e2xldCBuPXQuYXBwZW5kKCJnIiksaT0wO2ZvcihsZXQgYSBvZiBlKXtsZXQgcz1hLnRleHRDb2xvcj9hLnRleHRDb2xvcjoiIzQ0NDQ0NCIsbD1hLmxpbmVDb2xvcj9hLmxpbmVDb2xvcjoiIzQ0NDQ0NCIsdT1hLm9mZnNldFg/cGFyc2VJbnQoYS5vZmZzZXRYKTowLGg9YS5vZmZzZXRZP3BhcnNlSW50KGEub2Zmc2V0WSk6MCxmPSIiO2lmKGk9PT0wKXtsZXQgcD1uLmFwcGVuZCgibGluZSIpO3AuYXR0cigieDEiLGEuc3RhcnRQb2ludC54KSxwLmF0dHIoInkxIixhLnN0YXJ0UG9pbnQueSkscC5hdHRyKCJ4MiIsYS5lbmRQb2ludC54KSxwLmF0dHIoInkyIixhLmVuZFBvaW50LnkpLHAuYXR0cigic3Ryb2tlLXdpZHRoIiwiMSIpLHAuYXR0cigic3Ryb2tlIixsKSxwLnN0eWxlKCJmaWxsIiwibm9uZSIpLGEudHlwZSE9PSJyZWxfYiImJnAuYXR0cigibWFya2VyLWVuZCIsInVybCgiK2YrIiNhcnJvd2hlYWQpIiksKGEudHlwZT09PSJiaXJlbCJ8fGEudHlwZT09PSJyZWxfYiIpJiZwLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK2YrIiNhcnJvd2VuZCkiKSxpPS0xfWVsc2V7bGV0IHA9bi5hcHBlbmQoInBhdGgiKTtwLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMSIpLmF0dHIoInN0cm9rZSIsbCkuYXR0cigiZCIsIk1zdGFydHgsc3RhcnR5IFFjb250cm9seCxjb250cm9seSBzdG9weCxzdG9weSAiLnJlcGxhY2VBbGwoInN0YXJ0eCIsYS5zdGFydFBvaW50LngpLnJlcGxhY2VBbGwoInN0YXJ0eSIsYS5zdGFydFBvaW50LnkpLnJlcGxhY2VBbGwoImNvbnRyb2x4IixhLnN0YXJ0UG9pbnQueCsoYS5lbmRQb2ludC54LWEuc3RhcnRQb2ludC54KS8yLShhLmVuZFBvaW50LngtYS5zdGFydFBvaW50LngpLzQpLnJlcGxhY2VBbGwoImNvbnRyb2x5IixhLnN0YXJ0UG9pbnQueSsoYS5lbmRQb2ludC55LWEuc3RhcnRQb2ludC55KS8yKS5yZXBsYWNlQWxsKCJzdG9weCIsYS5lbmRQb2ludC54KS5yZXBsYWNlQWxsKCJzdG9weSIsYS5lbmRQb2ludC55KSksYS50eXBlIT09InJlbF9iIiYmcC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrZisiI2Fycm93aGVhZCkiKSwoYS50eXBlPT09ImJpcmVsInx8YS50eXBlPT09InJlbF9iIikmJnAuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrZisiI2Fycm93ZW5kKSIpfWxldCBkPXIubWVzc2FnZUZvbnQoKTtfdShyKShhLmxhYmVsLnRleHQsbixNYXRoLm1pbihhLnN0YXJ0UG9pbnQueCxhLmVuZFBvaW50LngpK01hdGguYWJzKGEuZW5kUG9pbnQueC1hLnN0YXJ0UG9pbnQueCkvMit1LE1hdGgubWluKGEuc3RhcnRQb2ludC55LGEuZW5kUG9pbnQueSkrTWF0aC5hYnMoYS5lbmRQb2ludC55LWEuc3RhcnRQb2ludC55KS8yK2gsYS5sYWJlbC53aWR0aCxhLmxhYmVsLmhlaWdodCx7ZmlsbDpzfSxkKSxhLnRlY2huJiZhLnRlY2huLnRleHQhPT0iIiYmKGQ9ci5tZXNzYWdlRm9udCgpLF91KHIpKCJbIithLnRlY2huLnRleHQrIl0iLG4sTWF0aC5taW4oYS5zdGFydFBvaW50LngsYS5lbmRQb2ludC54KStNYXRoLmFicyhhLmVuZFBvaW50LngtYS5zdGFydFBvaW50LngpLzIrdSxNYXRoLm1pbihhLnN0YXJ0UG9pbnQueSxhLmVuZFBvaW50LnkpK01hdGguYWJzKGEuZW5kUG9pbnQueS1hLnN0YXJ0UG9pbnQueSkvMityLm1lc3NhZ2VGb250U2l6ZSs1K2gsTWF0aC5tYXgoYS5sYWJlbC53aWR0aCxhLnRlY2huLndpZHRoKSxhLnRlY2huLmhlaWdodCx7ZmlsbDpzLCJmb250LXN0eWxlIjoiaXRhbGljIn0sZCkpfX0sImRyYXdSZWxzIiksamtlPW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPXQuYXBwZW5kKCJnIiksaT1lLmJnQ29sb3I/ZS5iZ0NvbG9yOiJub25lIixhPWUuYm9yZGVyQ29sb3I/ZS5ib3JkZXJDb2xvcjoiIzQ0NDQ0NCIscz1lLmZvbnRDb2xvcj9lLmZvbnRDb2xvcjoiYmxhY2siLGw9eyJzdHJva2Utd2lkdGgiOjEsInN0cm9rZS1kYXNoYXJyYXkiOiI3LjAsNy4wIn07ZS5ub2RlVHlwZSYmKGw9eyJzdHJva2Utd2lkdGgiOjF9KTtsZXQgdT17eDplLngseTplLnksZmlsbDppLHN0cm9rZTphLHdpZHRoOmUud2lkdGgsaGVpZ2h0OmUuaGVpZ2h0LHJ4OjIuNSxyeToyLjUsYXR0cnM6bH07X18obix1KTtsZXQgaD1yLmJvdW5kYXJ5Rm9udCgpO2guZm9udFdlaWdodD0iYm9sZCIsaC5mb250U2l6ZT1oLmZvbnRTaXplKzIsaC5mb250Q29sb3I9cyxfdShyKShlLmxhYmVsLnRleHQsbixlLngsZS55K2UubGFiZWwuWSxlLndpZHRoLGUuaGVpZ2h0LHtmaWxsOiIjNDQ0NDQ0In0saCksZS50eXBlJiZlLnR5cGUudGV4dCE9PSIiJiYoaD1yLmJvdW5kYXJ5Rm9udCgpLGguZm9udENvbG9yPXMsX3UocikoZS50eXBlLnRleHQsbixlLngsZS55K2UudHlwZS5ZLGUud2lkdGgsZS5oZWlnaHQse2ZpbGw6IiM0NDQ0NDQifSxoKSksZS5kZXNjciYmZS5kZXNjci50ZXh0IT09IiImJihoPXIuYm91bmRhcnlGb250KCksaC5mb250U2l6ZT1oLmZvbnRTaXplLTIsaC5mb250Q29sb3I9cyxfdShyKShlLmRlc2NyLnRleHQsbixlLngsZS55K2UuZGVzY3IuWSxlLndpZHRoLGUuaGVpZ2h0LHtmaWxsOiIjNDQ0NDQ0In0saCkpfSwiZHJhd0JvdW5kYXJ5IiksS2tlPW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPWUuYmdDb2xvcj9lLmJnQ29sb3I6cltlLnR5cGVDNFNoYXBlLnRleHQrIl9iZ19jb2xvciJdLGk9ZS5ib3JkZXJDb2xvcj9lLmJvcmRlckNvbG9yOnJbZS50eXBlQzRTaGFwZS50ZXh0KyJfYm9yZGVyX2NvbG9yIl0sYT1lLmZvbnRDb2xvcj9lLmZvbnRDb2xvcjoiI0ZGRkZGRiIscz0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEQUFBQUF3Q0FJQUFBRFlZRzdRQUFBQ0QwbEVRVlI0WHUyWW9VNEVNUkNHVCs0ajhBaThBaGFINFFIZ0FValF1Rk1FQ1VnTUlVZ3dKQWdNaGdRc0FZVWlKQ2lRSUJCWStFSVRzamZUZG1lNlYyNHY0Yzh2eUdiYitaak90TjBiTmN2alFYbWtIODNXdllCV3RvNlBMbTZ2N3A3dUgxL3cyZlhEK1BCeWNYMVB2MmwzSWREbS92bjd4K2RYUWlBdWJSem9VUmE3Z1JaV2QwaUdSSWlKYk9uaG5mWUJRWk5Kak5idXlZMmVKRzhma0RFM2JiRzRlcDZNSFVBc2dZeG1FM25WczZWc0JXSlNHY2NzT2xGUG1MSVZpTXpMT0I3cENWTzJBdEhKTW9oSDdGaDZ6cWl0UUs3bTBySnZBVllnR2NFcGUvL1BMZER6NjVzTTRwRjlON0lDY1hES0lCNU52Nmo3dEQwTm9TZE0yUXJVOUdnMGV3RTFMcUJoSFIzQkJkdmoydmFwbmlkakh4RC9xNnZkN1B2aHIzMUF3Y1k4ZVhNVFhBS0VDWlpKRlh1RXEyN2FMZ1FLNXVMTW9oQ2VuR0d1R2V3T3hTakJ2WUJxZUc2QitOcWlibGdnZGpuYytaWER5K0ZORnBGenc3Nk8zVUJBUk91WGg2Rm9pQWNmNWc5ZVR2VWd6eTBuV2c2SThjWEhSVXBnNWJPVkJDbytLRHBGYWpPZjIzR2dQbWU3UlNRK2xhY0lFTlVnSjZnZzFrNkhqZ09scW5McWlwNHRFdWh2MGhORU1YVUQwY2x5WEUzcDZwWkEwUzJubnZUbFh3TEpFWldsYjdjVFFIMStVU2dUTjRWaEFlbm0vd2VhMU9DQU9tcW82ZkUxV0NiOVdTS0JhaCtyYlVXUFdBbUUyUnZrMEFwaUI0NWVPeU5BelU4eGNUdmo4S3ZrS0VvT2FJWWVITkEzWnV5Z0F2Rk1VTzBBQUFBQVNVVk9SSzVDWUlJPSI7c3dpdGNoKGUudHlwZUM0U2hhcGUudGV4dCl7Y2FzZSJwZXJzb24iOnM9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBREFBQUFBd0NBSUFBQURZWUc3UUFBQUNEMGxFUVZSNFh1MllvVTRFTVJDR1QrNGo4QWk4QWhhSDRRSGdBVWpRdUZNRUNVZ01JVWd3SkFnTWhnUXNBWVVpSkNpUUlCQlkrRUlUc2pmVGRtZTZWMjR2NGM4dnlHYmIrWmpPdE4wYk5jdmpRWG1rSDgzV3ZZQld0bzZQTG02djdwN3VIMS93MmZYRCtQQnljWDFQdjJsM0lkRG0vdm43eCtkWFFpQXViUnpvVVJhN2dSWldkMGlHUklpSmJPbmhuZllCUVpOSmpOYnV5WTJlSkc4ZmtERTNiYkc0ZXA2TUhVQXNnWXhtRTNuVnM2VnNCV0pTR2Njc09sRlBtTElWaU16TE9CN3BDVk8yQXRISk1vaEg3Rmg2enFpdFFLN20wckp2QVZZZ0djRXBlLy9QTGREejY1c000cEY5TjdJQ2NYREtJQjVOdjZqN3REME5vU2RNMlFyVTlHZzBld0UxTHFCaEhSM0JCZHZqMnZhcG5pZGpIeEQvcTZ2ZDdQdmhyMzFBd2NZOGVYTVRYQUtFQ1paSkZYdUVxMjdhTGdRSzV1TE1vaENlbkdHdUdld094U2pCdllCcWVHNkIrTnFpYmxnZ2RqbmMrWlhEeStGTkZwRnp3NzZPM1VCQVJPdVhoNkZvaUFjZjVnOWVUdlVnenkwbldnNkk4Y1hIUlVwZzViT1ZCQ28rS0RwRmFqT2YyM0dnUG1lN1JTUStsYWNJRU5VZ0o2Z2cxazZIamdPbHFuTHFpcDR0RXVodjBoTkVNWFVEMGNseVhFM3A2cFpBMFMybm52VGxYd0xKRVpXbGI3Y1RRSDErVVNnVE40VmhBZW5tL3dlYTFPQ0FPbXFvNmZFMVdDYjlXU0tCYWgrcmJVV1BXQW1FMlJ2azBBcGlCNDVlT3lOQXpVOHhjVHZqOEt2a0tFb09hSVllSE5BM1p1eWdBdkZNVU8wQUFBQUFTVVZPUks1Q1lJST0iO2JyZWFrO2Nhc2UiZXh0ZXJuYWxfcGVyc29uIjpzPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURBQUFBQXdDQUlBQUFEWVlHN1FBQUFCNkVsRVFWUjRYdTJZTFkrRU1CQ0c5K2RXcjBhajBXZzBHbzFHbzArajhYZHYydVRDdnYxZ3B0MGViSEtQdWhEYWVXNDYwNVo5bUp2eDRBZFhVeVRVZGQwOHordTZmbG1XWlJuSHNXa2FmazlEcHRBd0RQdStmMGVBWXR1MlBFYUdXdWo1ZkNJWnJCQUMyZUxCQW5SQ3NFa2t4bWVhSnA3aURKMlFNRGRIc0xnOFN4S0ZFSmFBbzhsQVhubXVPRkloVE1weHhLQVRlYm80VWlGa251Tm80T25pU0lYUXlSeEVBM1lzbmpHQ1ZFalZYRDd5TFVBcXhCR1V5UHYvWTRXMmJlTWdHdVM3a1ZRSUJ5Y0gwZkQrb2k1cGV6UUVUeGRIS21RS0drMWVRRVlsZEsranc1R3hQZlo5ejdNazBRbmhmMVcxbTN3Ly9FVW41QkRtU1pzYlI0NFFRTEJFcXJCSHFPcm1TS2FRQXhkbkxBckNyeFpjTTdBN1pLczRpb1JxOExGQytOcEMzV0NCSnN2cFZ3NWVkbTlpRVhGdXlOZnhYQWdTd2ZyRlExYzBpTmRhOEFkZWp2VWdua3RPdEpRUXhtY2ZGekdnbGM1V1ZDajdvRGdGcVUxOGJvZUZTczUyQ1VoOExFOEJJVlFEVDFBQnJCMEh0Z1NFWWxYNWRvSm5Dd3Y5VFhvY0tDYUtibndoZERLUHE0bGYzU3dVM0hMcTRWLytXWWhIVk1hLzNiNElsZnlpa0FkdUNrY0JjN21RMy96L1FxL2NUdWlraGt6QjEyQWUvbWNKQzlVK1ZvOEVqMWdXQXRnYmVHZ0ZzQU1IcjUwQklXT0xDYmV6dmhwQkZVZFk2RUp1Si9RRFcwWG9NWDYwelowQUFBQUFTVVZPUks1Q1lJST0iO2JyZWFrfWxldCBsPXQuYXBwZW5kKCJnIik7bC5hdHRyKCJjbGFzcyIsInBlcnNvbi1tYW4iKTtsZXQgdT1ObCgpO3N3aXRjaChlLnR5cGVDNFNoYXBlLnRleHQpe2Nhc2UicGVyc29uIjpjYXNlImV4dGVybmFsX3BlcnNvbiI6Y2FzZSJzeXN0ZW0iOmNhc2UiZXh0ZXJuYWxfc3lzdGVtIjpjYXNlImNvbnRhaW5lciI6Y2FzZSJleHRlcm5hbF9jb250YWluZXIiOmNhc2UiY29tcG9uZW50IjpjYXNlImV4dGVybmFsX2NvbXBvbmVudCI6dS54PWUueCx1Lnk9ZS55LHUuZmlsbD1uLHUud2lkdGg9ZS53aWR0aCx1LmhlaWdodD1lLmhlaWdodCx1LnN0cm9rZT1pLHUucng9Mi41LHUucnk9Mi41LHUuYXR0cnM9eyJzdHJva2Utd2lkdGgiOi41fSxfXyhsLHUpO2JyZWFrO2Nhc2Uic3lzdGVtX2RiIjpjYXNlImV4dGVybmFsX3N5c3RlbV9kYiI6Y2FzZSJjb250YWluZXJfZGIiOmNhc2UiZXh0ZXJuYWxfY29udGFpbmVyX2RiIjpjYXNlImNvbXBvbmVudF9kYiI6Y2FzZSJleHRlcm5hbF9jb21wb25lbnRfZGIiOmwuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsbikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41IikuYXR0cigic3Ryb2tlIixpKS5hdHRyKCJkIiwiTXN0YXJ0eCxzdGFydHljMCwtMTAgaGFsZiwtMTAgaGFsZiwtMTBjMCwwIGhhbGYsMCBoYWxmLDEwbDAsaGVpZ2h0YzAsMTAgLWhhbGYsMTAgLWhhbGYsMTBjMCwwIC1oYWxmLDAgLWhhbGYsLTEwbDAsLWhlaWdodCIucmVwbGFjZUFsbCgic3RhcnR4IixlLngpLnJlcGxhY2VBbGwoInN0YXJ0eSIsZS55KS5yZXBsYWNlQWxsKCJoYWxmIixlLndpZHRoLzIpLnJlcGxhY2VBbGwoImhlaWdodCIsZS5oZWlnaHQpKSxsLmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41IikuYXR0cigic3Ryb2tlIixpKS5hdHRyKCJkIiwiTXN0YXJ0eCxzdGFydHljMCwxMCBoYWxmLDEwIGhhbGYsMTBjMCwwIGhhbGYsMCBoYWxmLC0xMCIucmVwbGFjZUFsbCgic3RhcnR4IixlLngpLnJlcGxhY2VBbGwoInN0YXJ0eSIsZS55KS5yZXBsYWNlQWxsKCJoYWxmIixlLndpZHRoLzIpKTticmVhaztjYXNlInN5c3RlbV9xdWV1ZSI6Y2FzZSJleHRlcm5hbF9zeXN0ZW1fcXVldWUiOmNhc2UiY29udGFpbmVyX3F1ZXVlIjpjYXNlImV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZSI6Y2FzZSJjb21wb25lbnRfcXVldWUiOmNhc2UiZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlIjpsLmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLG4pLmF0dHIoInN0cm9rZS13aWR0aCIsIjAuNSIpLmF0dHIoInN0cm9rZSIsaSkuYXR0cigiZCIsIk1zdGFydHgsc3RhcnR5bHdpZHRoLDBjNSwwIDUsaGFsZiA1LGhhbGZjMCwwIDAsaGFsZiAtNSxoYWxmbC13aWR0aCwwYy01LDAgLTUsLWhhbGYgLTUsLWhhbGZjMCwwIDAsLWhhbGYgNSwtaGFsZiIucmVwbGFjZUFsbCgic3RhcnR4IixlLngpLnJlcGxhY2VBbGwoInN0YXJ0eSIsZS55KS5yZXBsYWNlQWxsKCJ3aWR0aCIsZS53aWR0aCkucmVwbGFjZUFsbCgiaGFsZiIsZS5oZWlnaHQvMikpLGwuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjUiKS5hdHRyKCJzdHJva2UiLGkpLmF0dHIoImQiLCJNc3RhcnR4LHN0YXJ0eWMtNSwwIC01LGhhbGYgLTUsaGFsZmMwLGhhbGYgNSxoYWxmIDUsaGFsZiIucmVwbGFjZUFsbCgic3RhcnR4IixlLngrZS53aWR0aCkucmVwbGFjZUFsbCgic3RhcnR5IixlLnkpLnJlcGxhY2VBbGwoImhhbGYiLGUuaGVpZ2h0LzIpKTticmVha31sZXQgaD1hRWUocixlLnR5cGVDNFNoYXBlLnRleHQpO3N3aXRjaChsLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLGEpLmF0dHIoImZvbnQtZmFtaWx5IixoLmZvbnRGYW1pbHkpLmF0dHIoImZvbnQtc2l6ZSIsaC5mb250U2l6ZS0yKS5hdHRyKCJmb250LXN0eWxlIiwiaXRhbGljIikuYXR0cigibGVuZ3RoQWRqdXN0Iiwic3BhY2luZyIpLmF0dHIoInRleHRMZW5ndGgiLGUudHlwZUM0U2hhcGUud2lkdGgpLmF0dHIoIngiLGUueCtlLndpZHRoLzItZS50eXBlQzRTaGFwZS53aWR0aC8yKS5hdHRyKCJ5IixlLnkrZS50eXBlQzRTaGFwZS5ZKS50ZXh0KCI8PCIrZS50eXBlQzRTaGFwZS50ZXh0KyI+PiIpLGUudHlwZUM0U2hhcGUudGV4dCl7Y2FzZSJwZXJzb24iOmNhc2UiZXh0ZXJuYWxfcGVyc29uIjpOWShsLDQ4LDQ4LGUueCtlLndpZHRoLzItMjQsZS55K2UuaW1hZ2UuWSxzKTticmVha31sZXQgZj1yW2UudHlwZUM0U2hhcGUudGV4dCsiRm9udCJdKCk7cmV0dXJuIGYuZm9udFdlaWdodD0iYm9sZCIsZi5mb250U2l6ZT1mLmZvbnRTaXplKzIsZi5mb250Q29sb3I9YSxfdShyKShlLmxhYmVsLnRleHQsbCxlLngsZS55K2UubGFiZWwuWSxlLndpZHRoLGUuaGVpZ2h0LHtmaWxsOmF9LGYpLGY9cltlLnR5cGVDNFNoYXBlLnRleHQrIkZvbnQiXSgpLGYuZm9udENvbG9yPWEsZS50ZWNobiYmZS50ZWNobj8udGV4dCE9PSIiP191KHIpKGUudGVjaG4udGV4dCxsLGUueCxlLnkrZS50ZWNobi5ZLGUud2lkdGgsZS5oZWlnaHQse2ZpbGw6YSwiZm9udC1zdHlsZSI6Iml0YWxpYyJ9LGYpOmUudHlwZSYmZS50eXBlLnRleHQhPT0iIiYmX3UocikoZS50eXBlLnRleHQsbCxlLngsZS55K2UudHlwZS5ZLGUud2lkdGgsZS5oZWlnaHQse2ZpbGw6YSwiZm9udC1zdHlsZSI6Iml0YWxpYyJ9LGYpLGUuZGVzY3ImJmUuZGVzY3IudGV4dCE9PSIiJiYoZj1yLnBlcnNvbkZvbnQoKSxmLmZvbnRDb2xvcj1hLF91KHIpKGUuZGVzY3IudGV4dCxsLGUueCxlLnkrZS5kZXNjci5ZLGUud2lkdGgsZS5oZWlnaHQse2ZpbGw6YX0sZikpLGUuaGVpZ2h0fSwiZHJhd0M0U2hhcGUiKSxRa2U9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJkYXRhYmFzZSIpLmF0dHIoImZpbGwtcnVsZSIsImV2ZW5vZGQiKS5hdHRyKCJjbGlwLXJ1bGUiLCJldmVub2RkIikuYXBwZW5kKCJwYXRoIikuYXR0cigidHJhbnNmb3JtIiwic2NhbGUoLjUpIikuYXR0cigiZCIsIk0xMi4yNTguMDAxbC4yNTYuMDA0LjI1NS4wMDUuMjUzLjAwOC4yNTEuMDEuMjQ5LjAxMi4yNDcuMDE1LjI0Ni4wMTYuMjQyLjAxOS4yNDEuMDIuMjM5LjAyMy4yMzYuMDI0LjIzMy4wMjcuMjMxLjAyOC4yMjkuMDMxLjIyNS4wMzIuMjIzLjAzNC4yMi4wMzYuMjE3LjAzOC4yMTQuMDQuMjExLjA0MS4yMDguMDQzLjIwNS4wNDUuMjAxLjA0Ni4xOTguMDQ4LjE5NC4wNS4xOTEuMDUxLjE4Ny4wNTMuMTgzLjA1NC4xOC4wNTYuMTc1LjA1Ny4xNzIuMDU5LjE2OC4wNi4xNjMuMDYxLjE2LjA2My4xNTUuMDY0LjE1LjA2Ni4wNzQuMDMzLjA3My4wMzMuMDcxLjAzNC4wNy4wMzQuMDY5LjAzNS4wNjguMDM1LjA2Ny4wMzUuMDY2LjAzNS4wNjQuMDM2LjA2NC4wMzYuMDYyLjAzNi4wNi4wMzYuMDYuMDM3LjA1OC4wMzcuMDU4LjAzNy4wNTUuMDM4LjA1NS4wMzguMDUzLjAzOC4wNTIuMDM4LjA1MS4wMzkuMDUuMDM5LjA0OC4wMzkuMDQ3LjAzOS4wNDUuMDQuMDQ0LjA0LjA0My4wNC4wNDEuMDQuMDQuMDQxLjAzOS4wNDEuMDM3LjA0MS4wMzYuMDQxLjAzNC4wNDEuMDMzLjA0Mi4wMzIuMDQyLjAzLjA0Mi4wMjkuMDQyLjAyNy4wNDIuMDI2LjA0My4wMjQuMDQzLjAyMy4wNDMuMDIxLjA0My4wMi4wNDMuMDE4LjA0NC4wMTcuMDQzLjAxNS4wNDQuMDEzLjA0NC4wMTIuMDQ0LjAxMS4wNDUuMDA5LjA0NC4wMDcuMDQ1LjAwNi4wNDUuMDA0LjA0NS4wMDIuMDQ1LjAwMS4wNDV2MTdsLS4wMDEuMDQ1LS4wMDIuMDQ1LS4wMDQuMDQ1LS4wMDYuMDQ1LS4wMDcuMDQ1LS4wMDkuMDQ0LS4wMTEuMDQ1LS4wMTIuMDQ0LS4wMTMuMDQ0LS4wMTUuMDQ0LS4wMTcuMDQzLS4wMTguMDQ0LS4wMi4wNDMtLjAyMS4wNDMtLjAyMy4wNDMtLjAyNC4wNDMtLjAyNi4wNDMtLjAyNy4wNDItLjAyOS4wNDItLjAzLjA0Mi0uMDMyLjA0Mi0uMDMzLjA0Mi0uMDM0LjA0MS0uMDM2LjA0MS0uMDM3LjA0MS0uMDM5LjA0MS0uMDQuMDQxLS4wNDEuMDQtLjA0My4wNC0uMDQ0LjA0LS4wNDUuMDQtLjA0Ny4wMzktLjA0OC4wMzktLjA1LjAzOS0uMDUxLjAzOS0uMDUyLjAzOC0uMDUzLjAzOC0uMDU1LjAzOC0uMDU1LjAzOC0uMDU4LjAzNy0uMDU4LjAzNy0uMDYuMDM3LS4wNi4wMzYtLjA2Mi4wMzYtLjA2NC4wMzYtLjA2NC4wMzYtLjA2Ni4wMzUtLjA2Ny4wMzUtLjA2OC4wMzUtLjA2OS4wMzUtLjA3LjAzNC0uMDcxLjAzNC0uMDczLjAzMy0uMDc0LjAzMy0uMTUuMDY2LS4xNTUuMDY0LS4xNi4wNjMtLjE2My4wNjEtLjE2OC4wNi0uMTcyLjA1OS0uMTc1LjA1Ny0uMTguMDU2LS4xODMuMDU0LS4xODcuMDUzLS4xOTEuMDUxLS4xOTQuMDUtLjE5OC4wNDgtLjIwMS4wNDYtLjIwNS4wNDUtLjIwOC4wNDMtLjIxMS4wNDEtLjIxNC4wNC0uMjE3LjAzOC0uMjIuMDM2LS4yMjMuMDM0LS4yMjUuMDMyLS4yMjkuMDMxLS4yMzEuMDI4LS4yMzMuMDI3LS4yMzYuMDI0LS4yMzkuMDIzLS4yNDEuMDItLjI0Mi4wMTktLjI0Ni4wMTYtLjI0Ny4wMTUtLjI0OS4wMTItLjI1MS4wMS0uMjUzLjAwOC0uMjU1LjAwNS0uMjU2LjAwNC0uMjU4LjAwMS0uMjU4LS4wMDEtLjI1Ni0uMDA0LS4yNTUtLjAwNS0uMjUzLS4wMDgtLjI1MS0uMDEtLjI0OS0uMDEyLS4yNDctLjAxNS0uMjQ1LS4wMTYtLjI0My0uMDE5LS4yNDEtLjAyLS4yMzgtLjAyMy0uMjM2LS4wMjQtLjIzNC0uMDI3LS4yMzEtLjAyOC0uMjI4LS4wMzEtLjIyNi0uMDMyLS4yMjMtLjAzNC0uMjItLjAzNi0uMjE3LS4wMzgtLjIxNC0uMDQtLjIxMS0uMDQxLS4yMDgtLjA0My0uMjA0LS4wNDUtLjIwMS0uMDQ2LS4xOTgtLjA0OC0uMTk1LS4wNS0uMTktLjA1MS0uMTg3LS4wNTMtLjE4NC0uMDU0LS4xNzktLjA1Ni0uMTc2LS4wNTctLjE3Mi0uMDU5LS4xNjctLjA2LS4xNjQtLjA2MS0uMTU5LS4wNjMtLjE1NS0uMDY0LS4xNTEtLjA2Ni0uMDc0LS4wMzMtLjA3Mi0uMDMzLS4wNzItLjAzNC0uMDctLjAzNC0uMDY5LS4wMzUtLjA2OC0uMDM1LS4wNjctLjAzNS0uMDY2LS4wMzUtLjA2NC0uMDM2LS4wNjMtLjAzNi0uMDYyLS4wMzYtLjA2MS0uMDM2LS4wNi0uMDM3LS4wNTgtLjAzNy0uMDU3LS4wMzctLjA1Ni0uMDM4LS4wNTUtLjAzOC0uMDUzLS4wMzgtLjA1Mi0uMDM4LS4wNTEtLjAzOS0uMDQ5LS4wMzktLjA0OS0uMDM5LS4wNDYtLjAzOS0uMDQ2LS4wNC0uMDQ0LS4wNC0uMDQzLS4wNC0uMDQxLS4wNC0uMDQtLjA0MS0uMDM5LS4wNDEtLjAzNy0uMDQxLS4wMzYtLjA0MS0uMDM0LS4wNDEtLjAzMy0uMDQyLS4wMzItLjA0Mi0uMDMtLjA0Mi0uMDI5LS4wNDItLjAyNy0uMDQyLS4wMjYtLjA0My0uMDI0LS4wNDMtLjAyMy0uMDQzLS4wMjEtLjA0My0uMDItLjA0My0uMDE4LS4wNDQtLjAxNy0uMDQzLS4wMTUtLjA0NC0uMDEzLS4wNDQtLjAxMi0uMDQ0LS4wMTEtLjA0NS0uMDA5LS4wNDQtLjAwNy0uMDQ1LS4wMDYtLjA0NS0uMDA0LS4wNDUtLjAwMi0uMDQ1LS4wMDEtLjA0NXYtMTdsLjAwMS0uMDQ1LjAwMi0uMDQ1LjAwNC0uMDQ1LjAwNi0uMDQ1LjAwNy0uMDQ1LjAwOS0uMDQ0LjAxMS0uMDQ1LjAxMi0uMDQ0LjAxMy0uMDQ0LjAxNS0uMDQ0LjAxNy0uMDQzLjAxOC0uMDQ0LjAyLS4wNDMuMDIxLS4wNDMuMDIzLS4wNDMuMDI0LS4wNDMuMDI2LS4wNDMuMDI3LS4wNDIuMDI5LS4wNDIuMDMtLjA0Mi4wMzItLjA0Mi4wMzMtLjA0Mi4wMzQtLjA0MS4wMzYtLjA0MS4wMzctLjA0MS4wMzktLjA0MS4wNC0uMDQxLjA0MS0uMDQuMDQzLS4wNC4wNDQtLjA0LjA0Ni0uMDQuMDQ2LS4wMzkuMDQ5LS4wMzkuMDQ5LS4wMzkuMDUxLS4wMzkuMDUyLS4wMzguMDUzLS4wMzguMDU1LS4wMzguMDU2LS4wMzguMDU3LS4wMzcuMDU4LS4wMzcuMDYtLjAzNy4wNjEtLjAzNi4wNjItLjAzNi4wNjMtLjAzNi4wNjQtLjAzNi4wNjYtLjAzNS4wNjctLjAzNS4wNjgtLjAzNS4wNjktLjAzNS4wNy0uMDM0LjA3Mi0uMDM0LjA3Mi0uMDMzLjA3NC0uMDMzLjE1MS0uMDY2LjE1NS0uMDY0LjE1OS0uMDYzLjE2NC0uMDYxLjE2Ny0uMDYuMTcyLS4wNTkuMTc2LS4wNTcuMTc5LS4wNTYuMTg0LS4wNTQuMTg3LS4wNTMuMTktLjA1MS4xOTUtLjA1LjE5OC0uMDQ4LjIwMS0uMDQ2LjIwNC0uMDQ1LjIwOC0uMDQzLjIxMS0uMDQxLjIxNC0uMDQuMjE3LS4wMzguMjItLjAzNi4yMjMtLjAzNC4yMjYtLjAzMi4yMjgtLjAzMS4yMzEtLjAyOC4yMzQtLjAyNy4yMzYtLjAyNC4yMzgtLjAyMy4yNDEtLjAyLjI0My0uMDE5LjI0NS0uMDE2LjI0Ny0uMDE1LjI0OS0uMDEyLjI1MS0uMDEuMjUzLS4wMDguMjU1LS4wMDUuMjU2LS4wMDQuMjU4LS4wMDEuMjU4LjAwMXptLTkuMjU4IDIwLjQ5OXYuMDFsLjAwMS4wMjEuMDAzLjAyMS4wMDQuMDIyLjAwNS4wMjEuMDA2LjAyMi4wMDcuMDIyLjAwOS4wMjMuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjMuMDE2LjAyNC4wMTcuMDIzLjAxOC4wMjQuMDE5LjAyNC4wMjEuMDI0LjAyMi4wMjUuMDIzLjAyNC4wMjQuMDI1LjA1Mi4wNDkuMDU2LjA1LjA2MS4wNTEuMDY2LjA1MS4wNy4wNTEuMDc1LjA1MS4wNzkuMDUyLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1MS4xMDUuMDUyLjExLjA1Mi4xMTQuMDUxLjExOS4wNTEuMTIzLjA1MS4xMjcuMDUuMTMxLjA1LjEzNS4wNS4xMzkuMDQ4LjE0NC4wNDkuMTQ3LjA0Ny4xNTIuMDQ3LjE1NS4wNDcuMTYuMDQ1LjE2My4wNDUuMTY3LjA0My4xNzEuMDQzLjE3Ni4wNDEuMTc4LjA0MS4xODMuMDM5LjE4Ny4wMzkuMTkuMDM3LjE5NC4wMzUuMTk3LjAzNS4yMDIuMDMzLjIwNC4wMzEuMjA5LjAzLjIxMi4wMjkuMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMS4yMy4wMi4yMzMuMDE4LjIzNi4wMTYuMjQuMDE1LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNS4yNTYuMDA0LjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwNC4yNTQtLjAwNS4yNS0uMDA4LjI0Ny0uMDExLjI0NC0uMDEyLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIxLjIyNi0uMDIxLjIyNC0uMDI0LjIyLS4wMjYuMjE2LS4wMjcuMjEyLS4wMjguMjEtLjAzMS4yMDUtLjAzMS4yMDItLjAzNC4xOTgtLjAzNC4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjA0LjE3OS0uMDQuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0Ni4xNTUtLjA0Ni4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OS4xMzktLjA0OS4xMzYtLjA1LjEzMS0uMDUuMTI2LS4wNS4xMjMtLjA1MS4xMTgtLjA1Mi4xMTQtLjA1MS4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUzLjA4My0uMDUxLjA3OS0uMDUyLjA3NC0uMDUyLjA3LS4wNTEuMDY1LS4wNTEuMDYtLjA1MS4wNTYtLjA1LjA1MS0uMDUuMDIzLS4wMjQuMDIzLS4wMjUuMDIxLS4wMjQuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyNC4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIzLjAxLS4wMjIuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTI3bC0uMDc3LjA1NS0uMDguMDUzLS4wODMuMDU0LS4wODUuMDUzLS4wODcuMDUyLS4wOS4wNTItLjA5My4wNTEtLjA5NS4wNS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OS0uMTA1LjA0OC0uMTA2LjA0Ny0uMTA5LjA0Ny0uMTExLjA0Ni0uMTE0LjA0NS0uMTE1LjA0NS0uMTE4LjA0NC0uMTIuMDQzLS4xMjIuMDQyLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjA0LS4xMzIuMDM4LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM3LS4xMzkuMDM1LS4xNDIuMDM1LS4xNDMuMDM0LS4xNDQuMDMzLS4xNDcuMDMyLS4xNDguMDMxLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI5LS4xNTQuMDI3LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI1LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIyLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMTEtLjE3OC4wMS0uMTc5LjAwOC0uMTc5LjAwOC0uMTgxLjAwNi0uMTgyLjAwNS0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMmgtLjM3bC0uMTg0LS4wMDItLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDUtLjE4MS0uMDA2LS4xNzktLjAwOC0uMTc5LS4wMDgtLjE3OC0uMDEtLjE3Ni0uMDExLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIyLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI1LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI3LS4xNTMtLjAyOS0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMS0uMTQ2LS4wMzItLjE0NS0uMDMzLS4xNDMtLjAzNC0uMTQxLS4wMzUtLjE0LS4wMzUtLjEzNy0uMDM3LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM4LS4xMy0uMDQtLjEyOC0uMDQtLjEyNi0uMDQxLS4xMjQtLjA0Mi0uMTIyLS4wNDItLjEyLS4wNDQtLjExNy0uMDQzLS4xMTYtLjA0NS0uMTEzLS4wNDUtLjExMi0uMDQ2LS4xMDktLjA0Ny0uMTA2LS4wNDctLjEwNS0uMDQ4LS4xMDItLjA0OS0uMS0uMDQ5LS4wOTctLjA1LS4wOTUtLjA1LS4wOTMtLjA1Mi0uMDktLjA1MS0uMDg3LS4wNTItLjA4NS0uMDUzLS4wODMtLjA1NC0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xMjd6bTAtNS42NTR2LjAxMWwuMDAxLjAyMS4wMDMuMDIxLjAwNC4wMjEuMDA1LjAyMi4wMDYuMDIyLjAwNy4wMjIuMDA5LjAyMi4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyNC4wMTYuMDIzLjAxNy4wMjQuMDE4LjAyNC4wMTkuMDI0LjAyMS4wMjQuMDIyLjAyNC4wMjMuMDI1LjAyNC4wMjQuMDUyLjA1LjA1Ni4wNS4wNjEuMDUuMDY2LjA1MS4wNy4wNTEuMDc1LjA1Mi4wNzkuMDUxLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1Mi4xMDUuMDUyLjExLjA1MS4xMTQuMDUxLjExOS4wNTIuMTIzLjA1LjEyNy4wNTEuMTMxLjA1LjEzNS4wNDkuMTM5LjA0OS4xNDQuMDQ4LjE0Ny4wNDguMTUyLjA0Ny4xNTUuMDQ2LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDQuMTcxLjA0Mi4xNzYuMDQyLjE3OC4wNC4xODMuMDQuMTg3LjAzOC4xOS4wMzcuMTk0LjAzNi4xOTcuMDM0LjIwMi4wMzMuMjA0LjAzMi4yMDkuMDMuMjEyLjAyOC4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIyLjIzLjAyLjIzMy4wMTguMjM2LjAxNi4yNC4wMTQuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA2LjI1Ni4wMDMuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDAzLjI1NC0uMDA2LjI1LS4wMDguMjQ3LS4wMS4yNDQtLjAxMi4yNDEtLjAxNS4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyLjIyNi0uMDIyLjIyNC0uMDI0LjIyLS4wMjUuMjE2LS4wMjcuMjEyLS4wMjkuMjEtLjAzLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM1LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDM5LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDUuMTU1LS4wNDcuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDguMTM5LS4wNS4xMzYtLjA0OS4xMzEtLjA1LjEyNi0uMDUxLjEyMy0uMDUxLjExOC0uMDUxLjExNC0uMDUyLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTEuMDctLjA1Mi4wNjUtLjA1MS4wNi0uMDUuMDU2LS4wNTEuMDUxLS4wNDkuMDIzLS4wMjUuMDIzLS4wMjQuMDIxLS4wMjUuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyMy4wMTMtLjAyNC4wMTItLjAyMi4wMS0uMDIzLjAxLS4wMjMuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjEuMDA0LS4wMjIuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTM5bC0uMDc3LjA1NC0uMDguMDU0LS4wODMuMDU0LS4wODUuMDUyLS4wODcuMDUzLS4wOS4wNTEtLjA5My4wNTEtLjA5NS4wNTEtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDktLjEwNS4wNDgtLjEwNi4wNDctLjEwOS4wNDctLjExMS4wNDYtLjExNC4wNDUtLjExNS4wNDQtLjExOC4wNDQtLjEyLjA0NC0uMTIyLjA0Mi0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wMzktLjEzMi4wMzktLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzYtLjEzOS4wMzYtLjE0Mi4wMzUtLjE0My4wMzMtLjE0NC4wMzMtLjE0Ny4wMzMtLjE0OC4wMzEtLjE1LjAzLS4xNTEuMDMtLjE1My4wMjgtLjE1NC4wMjgtLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjUtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjItLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxMS0uMTc4LjAwOS0uMTc5LjAwOS0uMTc5LjAwNy0uMTgxLjAwNy0uMTgyLjAwNS0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMmgtLjM3bC0uMTg0LS4wMDItLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDUtLjE4MS0uMDA3LS4xNzktLjAwNy0uMTc5LS4wMDktLjE3OC0uMDA5LS4xNzYtLjAxMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMi0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNS0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyOC0uMTUzLS4wMjgtLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzEtLjE0Ni0uMDMzLS4xNDUtLjAzMy0uMTQzLS4wMzMtLjE0MS0uMDM1LS4xNC0uMDM2LS4xMzctLjAzNi0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOS0uMTMtLjAzOS0uMTI4LS4wNC0uMTI2LS4wNDEtLjEyNC0uMDQyLS4xMjItLjA0My0uMTItLjA0My0uMTE3LS4wNDQtLjExNi0uMDQ0LS4xMTMtLjA0Ni0uMTEyLS4wNDYtLjEwOS0uMDQ2LS4xMDYtLjA0Ny0uMTA1LS4wNDgtLjEwMi0uMDQ5LS4xLS4wNDktLjA5Ny0uMDUtLjA5NS0uMDUxLS4wOTMtLjA1MS0uMDktLjA1MS0uMDg3LS4wNTMtLjA4NS0uMDUyLS4wODMtLjA1NC0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xMzl6bTAtNS42NjZ2LjAxMWwuMDAxLjAyLjAwMy4wMjIuMDA0LjAyMS4wMDUuMDIyLjAwNi4wMjEuMDA3LjAyMi4wMDkuMDIzLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDIzLjAxNi4wMjQuMDE3LjAyNC4wMTguMDIzLjAxOS4wMjQuMDIxLjAyNS4wMjIuMDI0LjAyMy4wMjQuMDI0LjAyNS4wNTIuMDUuMDU2LjA1LjA2MS4wNS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUyLjA3OS4wNTEuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUyLjEwNS4wNTEuMTEuMDUyLjExNC4wNTEuMTE5LjA1MS4xMjMuMDUxLjEyNy4wNS4xMzEuMDUuMTM1LjA1LjEzOS4wNDkuMTQ0LjA0OC4xNDcuMDQ4LjE1Mi4wNDcuMTU1LjA0Ni4xNi4wNDUuMTYzLjA0NS4xNjcuMDQzLjE3MS4wNDMuMTc2LjA0Mi4xNzguMDQuMTgzLjA0LjE4Ny4wMzguMTkuMDM3LjE5NC4wMzYuMTk3LjAzNC4yMDIuMDMzLjIwNC4wMzIuMjA5LjAzLjIxMi4wMjguMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMS4yMy4wMi4yMzMuMDE4LjIzNi4wMTcuMjQuMDE0LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNi4yNTYuMDAzLjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwMy4yNTQtLjAwNi4yNS0uMDA4LjI0Ny0uMDEuMjQ0LS4wMTMuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMi4yMjYtLjAyMi4yMjQtLjAyNC4yMi0uMDI1LjIxNi0uMDI3LjIxMi0uMDI5LjIxLS4wMy4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNS4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjAzOS4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ1LjE1NS0uMDQ3LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ5LjEzOS0uMDQ5LjEzNi0uMDQ5LjEzMS0uMDUxLjEyNi0uMDUuMTIzLS4wNTEuMTE4LS4wNTIuMTE0LS4wNTEuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1Mi4wNy0uMDUxLjA2NS0uMDUxLjA2LS4wNTEuMDU2LS4wNS4wNTEtLjA0OS4wMjMtLjAyNS4wMjMtLjAyNS4wMjEtLjAyNC4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDI0LjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjIuMDEtLjAyMy4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xNTNsLS4wNzcuMDU0LS4wOC4wNTQtLjA4My4wNTMtLjA4NS4wNTMtLjA4Ny4wNTMtLjA5LjA1MS0uMDkzLjA1MS0uMDk1LjA1MS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OC0uMTA1LjA0OC0uMTA2LjA0OC0uMTA5LjA0Ni0uMTExLjA0Ni0uMTE0LjA0Ni0uMTE1LjA0NC0uMTE4LjA0NC0uMTIuMDQzLS4xMjIuMDQzLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjAzOS0uMTMyLjAzOS0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNi0uMTM5LjAzNi0uMTQyLjAzNC0uMTQzLjAzNC0uMTQ0LjAzMy0uMTQ3LjAzMi0uMTQ4LjAzMi0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOC0uMTU0LjAyOC0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNC0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMy0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDEtLjE3OC4wMS0uMTc5LjAwOS0uMTc5LjAwNy0uMTgxLjAwNi0uMTgyLjAwNi0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMS0uMTg1LjAwMS0uMTg1LS4wMDEtLjE4NC0uMDAxLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA2LS4xODEtLjAwNi0uMTc5LS4wMDctLjE3OS0uMDA5LS4xNzgtLjAxLS4xNzYtLjAxLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIzLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI0LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI4LS4xNTMtLjAyOC0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMi0uMTQ2LS4wMzItLjE0NS0uMDMzLS4xNDMtLjAzNC0uMTQxLS4wMzQtLjE0LS4wMzYtLjEzNy0uMDM2LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM5LS4xMy0uMDM5LS4xMjgtLjA0MS0uMTI2LS4wNDEtLjEyNC0uMDQxLS4xMjItLjA0My0uMTItLjA0My0uMTE3LS4wNDQtLjExNi0uMDQ0LS4xMTMtLjA0Ni0uMTEyLS4wNDYtLjEwOS0uMDQ2LS4xMDYtLjA0OC0uMTA1LS4wNDgtLjEwMi0uMDQ4LS4xLS4wNS0uMDk3LS4wNDktLjA5NS0uMDUxLS4wOTMtLjA1MS0uMDktLjA1Mi0uMDg3LS4wNTItLjA4NS0uMDUzLS4wODMtLjA1My0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xNTN6bTguNzQtOC4xNzlsLS4yNTcuMDA0LS4yNTQuMDA1LS4yNS4wMDgtLjI0Ny4wMTEtLjI0NC4wMTItLjI0MS4wMTQtLjIzNy4wMTYtLjIzMy4wMTgtLjIzMS4wMjEtLjIyNi4wMjItLjIyNC4wMjMtLjIyLjAyNi0uMjE2LjAyNy0uMjEyLjAyOC0uMjEuMDMxLS4yMDUuMDMyLS4yMDIuMDMzLS4xOTguMDM0LS4xOTQuMDM2LS4xOTEuMDM4LS4xODcuMDM4LS4xODMuMDQtLjE3OS4wNDEtLjE3NS4wNDItLjE3Mi4wNDMtLjE2OC4wNDMtLjE2My4wNDUtLjE2LjA0Ni0uMTU1LjA0Ni0uMTUyLjA0OC0uMTQ4LjA0OC0uMTQzLjA0OC0uMTM5LjA0OS0uMTM2LjA1LS4xMzEuMDUtLjEyNi4wNTEtLjEyMy4wNTEtLjExOC4wNTEtLjExNC4wNTItLjExLjA1Mi0uMTA2LjA1Mi0uMTAxLjA1Mi0uMDk2LjA1Mi0uMDkyLjA1Mi0uMDg4LjA1Mi0uMDgzLjA1Mi0uMDc5LjA1Mi0uMDc0LjA1MS0uMDcuMDUyLS4wNjUuMDUxLS4wNi4wNS0uMDU2LjA1LS4wNTEuMDUtLjAyMy4wMjUtLjAyMy4wMjQtLjAyMS4wMjQtLjAyLjAyNS0uMDE5LjAyNC0uMDE4LjAyNC0uMDE3LjAyMy0uMDE1LjAyNC0uMDE0LjAyMy0uMDEzLjAyMy0uMDEyLjAyMy0uMDEuMDIzLS4wMS4wMjItLjAwOC4wMjItLjAwNi4wMjMtLjAwNi4wMjEtLjAwNC4wMjItLjAwNC4wMjEtLjAwMS4wMjEtLjAwMS4wMjEuMDAxLjAyMS4wMDEuMDIxLjAwNC4wMjEuMDA0LjAyMi4wMDYuMDIxLjAwNi4wMjMuMDA4LjAyMi4wMS4wMjIuMDEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTQuMDIzLjAxNS4wMjQuMDE3LjAyMy4wMTguMDI0LjAxOS4wMjQuMDIuMDI1LjAyMS4wMjQuMDIzLjAyNC4wMjMuMDI1LjA1MS4wNS4wNTYuMDUuMDYuMDUuMDY1LjA1MS4wNy4wNTIuMDc0LjA1MS4wNzkuMDUyLjA4My4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ni4wNTIuMTAxLjA1Mi4xMDYuMDUyLjExLjA1Mi4xMTQuMDUyLjExOC4wNTEuMTIzLjA1MS4xMjYuMDUxLjEzMS4wNS4xMzYuMDUuMTM5LjA0OS4xNDMuMDQ4LjE0OC4wNDguMTUyLjA0OC4xNTUuMDQ2LjE2LjA0Ni4xNjMuMDQ1LjE2OC4wNDMuMTcyLjA0My4xNzUuMDQyLjE3OS4wNDEuMTgzLjA0LjE4Ny4wMzguMTkxLjAzOC4xOTQuMDM2LjE5OC4wMzQuMjAyLjAzMy4yMDUuMDMyLjIxLjAzMS4yMTIuMDI4LjIxNi4wMjcuMjIuMDI2LjIyNC4wMjMuMjI2LjAyMi4yMzEuMDIxLjIzMy4wMTguMjM3LjAxNi4yNDEuMDE0LjI0NC4wMTIuMjQ3LjAxMS4yNS4wMDguMjU0LjAwNS4yNTcuMDA0LjI2LjAwMS4yNi0uMDAxLjI1Ny0uMDA0LjI1NC0uMDA1LjI1LS4wMDguMjQ3LS4wMTEuMjQ0LS4wMTIuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMjEuMjI2LS4wMjIuMjI0LS4wMjMuMjItLjAyNi4yMTYtLjAyNy4yMTItLjAyOC4yMS0uMDMxLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM0LjE5NC0uMDM2LjE5MS0uMDM4LjE4Ny0uMDM4LjE4My0uMDQuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDMuMTYzLS4wNDUuMTYtLjA0Ni4xNTUtLjA0Ni4xNTItLjA0OC4xNDgtLjA0OC4xNDMtLjA0OC4xMzktLjA0OS4xMzYtLjA1LjEzMS0uMDUuMTI2LS4wNTEuMTIzLS4wNTEuMTE4LS4wNTEuMTE0LS4wNTIuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1MS4wNy0uMDUyLjA2NS0uMDUxLjA2LS4wNS4wNTYtLjA1LjA1MS0uMDUuMDIzLS4wMjUuMDIzLS4wMjQuMDIxLS4wMjQuMDItLjAyNS4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyMy4wMTUtLjAyNC4wMTQtLjAyMy4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIzLjAxLS4wMjIuMDA4LS4wMjIuMDA2LS4wMjMuMDA2LS4wMjEuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjEtLjAwMS0uMDIxLS4wMDEtLjAyMS0uMDA0LS4wMjEtLjAwNC0uMDIyLS4wMDYtLjAyMS0uMDA2LS4wMjMtLjAwOC0uMDIyLS4wMS0uMDIyLS4wMS0uMDIzLS4wMTItLjAyMy0uMDEzLS4wMjMtLjAxNC0uMDIzLS4wMTUtLjAyNC0uMDE3LS4wMjMtLjAxOC0uMDI0LS4wMTktLjAyNC0uMDItLjAyNS0uMDIxLS4wMjQtLjAyMy0uMDI0LS4wMjMtLjAyNS0uMDUxLS4wNS0uMDU2LS4wNS0uMDYtLjA1LS4wNjUtLjA1MS0uMDctLjA1Mi0uMDc0LS4wNTEtLjA3OS0uMDUyLS4wODMtLjA1Mi0uMDg4LS4wNTItLjA5Mi0uMDUyLS4wOTYtLjA1Mi0uMTAxLS4wNTItLjEwNi0uMDUyLS4xMS0uMDUyLS4xMTQtLjA1Mi0uMTE4LS4wNTEtLjEyMy0uMDUxLS4xMjYtLjA1MS0uMTMxLS4wNS0uMTM2LS4wNS0uMTM5LS4wNDktLjE0My0uMDQ4LS4xNDgtLjA0OC0uMTUyLS4wNDgtLjE1NS0uMDQ2LS4xNi0uMDQ2LS4xNjMtLjA0NS0uMTY4LS4wNDMtLjE3Mi0uMDQzLS4xNzUtLjA0Mi0uMTc5LS4wNDEtLjE4My0uMDQtLjE4Ny0uMDM4LS4xOTEtLjAzOC0uMTk0LS4wMzYtLjE5OC0uMDM0LS4yMDItLjAzMy0uMjA1LS4wMzItLjIxLS4wMzEtLjIxMi0uMDI4LS4yMTYtLjAyNy0uMjItLjAyNi0uMjI0LS4wMjMtLjIyNi0uMDIyLS4yMzEtLjAyMS0uMjMzLS4wMTgtLjIzNy0uMDE2LS4yNDEtLjAxNC0uMjQ0LS4wMTItLjI0Ny0uMDExLS4yNS0uMDA4LS4yNTQtLjAwNS0uMjU3LS4wMDQtLjI2LS4wMDEtLjI2LjAwMXoiKX0sImluc2VydERhdGFiYXNlSWNvbiIpLFprZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJzeW1ib2wiKS5hdHRyKCJpZCIsImNvbXB1dGVyIikuYXR0cigid2lkdGgiLCIyNCIpLmF0dHIoImhlaWdodCIsIjI0IikuYXBwZW5kKCJwYXRoIikuYXR0cigidHJhbnNmb3JtIiwic2NhbGUoLjUpIikuYXR0cigiZCIsIk0yIDJ2MTNoMjB2LTEzaC0yMHptMTggMTFoLTE2di05aDE2djl6bS0xMC4yMjggNmwuNDY2LTFoMy41MjRsLjQ2NyAxaC00LjQ1N3ptMTQuMjI4IDNoLTI0bDItNmgyLjEwNGwtMS4zMyA0aDE4LjQ1bC0xLjI5Ny00aDIuMDczbDIgNnptLTUtMTBoLTE0di03aDE0djd6Iil9LCJpbnNlcnRDb21wdXRlckljb24iKSxKa2U9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJjbG9jayIpLmF0dHIoIndpZHRoIiwiMjQiKS5hdHRyKCJoZWlnaHQiLCIyNCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMTIgMmM1LjUxNCAwIDEwIDQuNDg2IDEwIDEwcy00LjQ4NiAxMC0xMCAxMC0xMC00LjQ4Ni0xMC0xMCA0LjQ4Ni0xMCAxMC0xMHptMC0yYy02LjYyNyAwLTEyIDUuMzczLTEyIDEyczUuMzczIDEyIDEyIDEyIDEyLTUuMzczIDEyLTEyLTUuMzczLTEyLTEyLTEyem01Ljg0OCAxMi40NTljLjIwMi4wMzguMjAyLjMzMy4wMDEuMzcyLTEuOTA3LjM2MS02LjA0NSAxLjExMS02LjU0NyAxLjExMS0uNzE5IDAtMS4zMDEtLjU4Mi0xLjMwMS0xLjMwMSAwLS41MTIuNzctNS40NDcgMS4xMjUtNy40NDUuMDM0LS4xOTIuMzEyLS4xODEuMzQzLjAxNGwuOTg1IDYuMjM4IDUuMzk0IDEuMDExeiIpfSwiaW5zZXJ0Q2xvY2tJY29uIiksZUVlPW8oZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiYXJyb3doZWFkIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKX0sImluc2VydEFycm93SGVhZCIpLHRFZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFycm93ZW5kIikuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEwIDAgTCAwIDUgTCAxMCAxMCB6Iil9LCJpbnNlcnRBcnJvd0VuZCIpLHJFZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImZpbGxlZC1oZWFkIikuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LCJpbnNlcnRBcnJvd0ZpbGxlZEhlYWQiKSxuRWU9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJzZXF1ZW5jZW51bWJlciIpLmF0dHIoInJlZlgiLDE1KS5hdHRyKCJyZWZZIiwxNSkuYXR0cigibWFya2VyV2lkdGgiLDYwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsMTUpLmF0dHIoImN5IiwxNSkuYXR0cigiciIsNil9LCJpbnNlcnREeW5hbWljTnVtYmVyIiksaUVlPW8oZnVuY3Rpb24odCl7bGV0IHI9dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY3Jvc3NoZWFkIikuYXR0cigibWFya2VyV2lkdGgiLDE1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hdHRyKCJyZWZYIiwxNikuYXR0cigicmVmWSIsNCk7ci5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwiYmxhY2siKS5hdHRyKCJzdHJva2UiLCIjMDAwMDAwIikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIwLCAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigiZCIsIk0gOSwyIFYgNiBMMTYsNCBaIiksci5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAwMDAiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjAsIDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJkIiwiTSAwLDEgTCA2LDcgTSA2LDEgTCAwLDciKX0sImluc2VydEFycm93Q3Jvc3NIZWFkIiksYUVlPW8oKHQsZSk9Pih7Zm9udEZhbWlseTp0W2UrIkZvbnRGYW1pbHkiXSxmb250U2l6ZTp0W2UrIkZvbnRTaXplIl0sZm9udFdlaWdodDp0W2UrIkZvbnRXZWlnaHQiXX0pLCJnZXRDNFNoYXBlRm9udCIpLF91PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChpLGEscyxsLHUsaCxmKXtsZXQgZD1hLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLHMrdS8yKS5hdHRyKCJ5IixsK2gvMis1KS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KGkpO24oZCxmKX1vKHQsImJ5VGV4dCIpO2Z1bmN0aW9uIGUoaSxhLHMsbCx1LGgsZixkKXtsZXR7Zm9udFNpemU6cCxmb250RmFtaWx5Om0sZm9udFdlaWdodDpnfT1kLHk9aS5zcGxpdChxZS5saW5lQnJlYWtSZWdleCk7Zm9yKGxldCB2PTA7djx5Lmxlbmd0aDt2Kyspe2xldCB4PXYqcC1wKih5Lmxlbmd0aC0xKS8yLGI9YS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixzK3UvMikuYXR0cigieSIsbCkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgiZm9udC1zaXplIixwKS5zdHlsZSgiZm9udC13ZWlnaHQiLGcpLnN0eWxlKCJmb250LWZhbWlseSIsbSk7Yi5hcHBlbmQoInRzcGFuIikuYXR0cigiZHkiLHgpLnRleHQoeVt2XSkuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWF0aGVtYXRpY2FsIiksbihiLGYpfX1vKGUsImJ5VHNwYW4iKTtmdW5jdGlvbiByKGksYSxzLGwsdSxoLGYsZCl7bGV0IHA9YS5hcHBlbmQoInN3aXRjaCIpLGc9cC5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixzKS5hdHRyKCJ5IixsKS5hdHRyKCJ3aWR0aCIsdSkuYXR0cigiaGVpZ2h0IixoKS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTtnLmFwcGVuZCgiZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KGkpLGUoaSxwLHMsbCx1LGgsZixkKSxuKGcsZil9byhyLCJieUZvIik7ZnVuY3Rpb24gbihpLGEpe2ZvcihsZXQgcyBpbiBhKWEuaGFzT3duUHJvcGVydHkocykmJmkuYXR0cihzLGFbc10pfXJldHVybiBvKG4sIl9zZXRUZXh0QXR0cnMiKSxmdW5jdGlvbihpKXtyZXR1cm4gaS50ZXh0UGxhY2VtZW50PT09ImZvIj9yOmkudGV4dFBsYWNlbWVudD09PSJvbGQiP3Q6ZX19KCksUmw9e2RyYXdSZWN0Ol9fLGRyYXdCb3VuZGFyeTpqa2UsZHJhd0M0U2hhcGU6S2tlLGRyYXdSZWxzOlhrZSxkcmF3SW1hZ2U6TlksaW5zZXJ0QXJyb3dIZWFkOmVFZSxpbnNlcnRBcnJvd0VuZDp0RWUsaW5zZXJ0QXJyb3dGaWxsZWRIZWFkOnJFZSxpbnNlcnREeW5hbWljTnVtYmVyOm5FZSxpbnNlcnRBcnJvd0Nyb3NzSGVhZDppRWUsaW5zZXJ0RGF0YWJhc2VJY29uOlFrZSxpbnNlcnRDb21wdXRlckljb246WmtlLGluc2VydENsb2NrSWNvbjpKa2V9fSk7dmFyIHNFZSxzNSxMXz1NKCgpPT57InVzZSBzdHJpY3QiO3NFZT10eXBlb2YgZ2xvYmFsPT0ib2JqZWN0IiYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWwsczU9c0VlfSk7dmFyIG9FZSxsRWUsb2ksQm89TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMXygpO29FZT10eXBlb2Ygc2VsZj09Im9iamVjdCImJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLGxFZT1zNXx8b0VlfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLG9pPWxFZX0pO3ZhciBjRWUsaWEsQ2Q9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtCbygpO2NFZT1vaS5TeW1ib2wsaWE9Y0VlfSk7ZnVuY3Rpb24gZkVlKHQpe3ZhciBlPXVFZS5jYWxsKHQsY3YpLHI9dFtjdl07dHJ5e3RbY3ZdPXZvaWQgMDt2YXIgbj0hMH1jYXRjaHt9dmFyIGk9aEVlLmNhbGwodCk7cmV0dXJuIG4mJihlP3RbY3ZdPXI6ZGVsZXRlIHRbY3ZdKSxpfXZhciBNWSx1RWUsaEVlLGN2LElZLE9ZPU0oKCk9PnsidXNlIHN0cmljdCI7Q2QoKTtNWT1PYmplY3QucHJvdG90eXBlLHVFZT1NWS5oYXNPd25Qcm9wZXJ0eSxoRWU9TVkudG9TdHJpbmcsY3Y9aWE/aWEudG9TdHJpbmdUYWc6dm9pZCAwO28oZkVlLCJnZXRSYXdUYWciKTtJWT1mRWV9KTtmdW5jdGlvbiBtRWUodCl7cmV0dXJuIHBFZS5jYWxsKHQpfXZhciBkRWUscEVlLFBZLEJZPU0oKCk9PnsidXNlIHN0cmljdCI7ZEVlPU9iamVjdC5wcm90b3R5cGUscEVlPWRFZS50b1N0cmluZztvKG1FZSwib2JqZWN0VG9TdHJpbmciKTtQWT1tRWV9KTtmdW5jdGlvbiB2RWUodCl7cmV0dXJuIHQ9PW51bGw/dD09PXZvaWQgMD95RWU6Z0VlOkZZJiZGWSBpbiBPYmplY3QodCk/SVkodCk6UFkodCl9dmFyIGdFZSx5RWUsRlksZ2EsTHU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtDZCgpO09ZKCk7QlkoKTtnRWU9IltvYmplY3QgTnVsbF0iLHlFZT0iW29iamVjdCBVbmRlZmluZWRdIixGWT1pYT9pYS50b1N0cmluZ1RhZzp2b2lkIDA7byh2RWUsImJhc2VHZXRUYWciKTtnYT12RWV9KTtmdW5jdGlvbiB4RWUodCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIHQhPW51bGwmJihlPT0ib2JqZWN0Inx8ZT09ImZ1bmN0aW9uIil9dmFyIHhuLGlvPU0oKCk9PnsidXNlIHN0cmljdCI7byh4RWUsImlzT2JqZWN0Iik7eG49eEVlfSk7ZnVuY3Rpb24gRUVlKHQpe2lmKCF4bih0KSlyZXR1cm4hMTt2YXIgZT1nYSh0KTtyZXR1cm4gZT09d0VlfHxlPT1URWV8fGU9PWJFZXx8ZT09a0VlfXZhciBiRWUsd0VlLFRFZSxrRWUsX2ksdXY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMdSgpO2lvKCk7YkVlPSJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIix3RWU9IltvYmplY3QgRnVuY3Rpb25dIixURWU9IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIixrRWU9IltvYmplY3QgUHJveHldIjtvKEVFZSwiaXNGdW5jdGlvbiIpO19pPUVFZX0pO3ZhciBTRWUsbzUselk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtCbygpO1NFZT1vaVsiX19jb3JlLWpzX3NoYXJlZF9fIl0sbzU9U0VlfSk7ZnVuY3Rpb24gQ0VlKHQpe3JldHVybiEhR1kmJkdZIGluIHR9dmFyIEdZLCRZLFZZPU0oKCk9PnsidXNlIHN0cmljdCI7elkoKTtHWT1mdW5jdGlvbigpe3ZhciB0PS9bXi5dKyQvLmV4ZWMobzUmJm81LmtleXMmJm81LmtleXMuSUVfUFJPVE98fCIiKTtyZXR1cm4gdD8iU3ltYm9sKHNyYylfMS4iK3Q6IiJ9KCk7byhDRWUsImlzTWFza2VkIik7JFk9Q0VlfSk7ZnVuY3Rpb24gTEVlKHQpe2lmKHQhPW51bGwpe3RyeXtyZXR1cm4gX0VlLmNhbGwodCl9Y2F0Y2h7fXRyeXtyZXR1cm4gdCsiIn1jYXRjaHt9fXJldHVybiIifXZhciBBRWUsX0VlLER1LERfPU0oKCk9PnsidXNlIHN0cmljdCI7QUVlPUZ1bmN0aW9uLnByb3RvdHlwZSxfRWU9QUVlLnRvU3RyaW5nO28oTEVlLCJ0b1NvdXJjZSIpO0R1PUxFZX0pO2Z1bmN0aW9uIEJFZSh0KXtpZigheG4odCl8fCRZKHQpKXJldHVybiExO3ZhciBlPV9pKHQpP1BFZTpORWU7cmV0dXJuIGUudGVzdChEdSh0KSl9dmFyIERFZSxORWUsUkVlLE1FZSxJRWUsT0VlLFBFZSxVWSxIWT1NKCgpPT57InVzZSBzdHJpY3QiO3V2KCk7VlkoKTtpbygpO0RfKCk7REVlPS9bXFxeJC4qKz8oKVtcXXt9fF0vZyxORWU9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sUkVlPUZ1bmN0aW9uLnByb3RvdHlwZSxNRWU9T2JqZWN0LnByb3RvdHlwZSxJRWU9UkVlLnRvU3RyaW5nLE9FZT1NRWUuaGFzT3duUHJvcGVydHksUEVlPVJlZ0V4cCgiXiIrSUVlLmNhbGwoT0VlKS5yZXBsYWNlKERFZSwiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKTtvKEJFZSwiYmFzZUlzTmF0aXZlIik7VVk9QkVlfSk7ZnVuY3Rpb24gRkVlKHQsZSl7cmV0dXJuIHQ/LltlXX12YXIgV1ksWVk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKEZFZSwiZ2V0VmFsdWUiKTtXWT1GRWV9KTtmdW5jdGlvbiB6RWUodCxlKXt2YXIgcj1XWSh0LGUpO3JldHVybiBVWShyKT9yOnZvaWQgMH12YXIgQXMsT2g9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIWSgpO1lZKCk7byh6RWUsImdldE5hdGl2ZSIpO0FzPXpFZX0pO3ZhciBHRWUsTnUsaHY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPaCgpO0dFZT1BcyhPYmplY3QsImNyZWF0ZSIpLE51PUdFZX0pO2Z1bmN0aW9uICRFZSgpe3RoaXMuX19kYXRhX189TnU/TnUobnVsbCk6e30sdGhpcy5zaXplPTB9dmFyIHFZLFhZPU0oKCk9PnsidXNlIHN0cmljdCI7aHYoKTtvKCRFZSwiaGFzaENsZWFyIik7cVk9JEVlfSk7ZnVuY3Rpb24gVkVlKHQpe3ZhciBlPXRoaXMuaGFzKHQpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1t0XTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfXZhciBqWSxLWT1NKCgpPT57InVzZSBzdHJpY3QiO28oVkVlLCJoYXNoRGVsZXRlIik7alk9VkVlfSk7ZnVuY3Rpb24gWUVlKHQpe3ZhciBlPXRoaXMuX19kYXRhX187aWYoTnUpe3ZhciByPWVbdF07cmV0dXJuIHI9PT1VRWU/dm9pZCAwOnJ9cmV0dXJuIFdFZS5jYWxsKGUsdCk/ZVt0XTp2b2lkIDB9dmFyIFVFZSxIRWUsV0VlLFFZLFpZPU0oKCk9PnsidXNlIHN0cmljdCI7aHYoKTtVRWU9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLEhFZT1PYmplY3QucHJvdG90eXBlLFdFZT1IRWUuaGFzT3duUHJvcGVydHk7byhZRWUsImhhc2hHZXQiKTtRWT1ZRWV9KTtmdW5jdGlvbiBqRWUodCl7dmFyIGU9dGhpcy5fX2RhdGFfXztyZXR1cm4gTnU/ZVt0XSE9PXZvaWQgMDpYRWUuY2FsbChlLHQpfXZhciBxRWUsWEVlLEpZLGVxPU0oKCk9PnsidXNlIHN0cmljdCI7aHYoKTtxRWU9T2JqZWN0LnByb3RvdHlwZSxYRWU9cUVlLmhhc093blByb3BlcnR5O28oakVlLCJoYXNoSGFzIik7Slk9akVlfSk7ZnVuY3Rpb24gUUVlKHQsZSl7dmFyIHI9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyh0KT8wOjEsclt0XT1OdSYmZT09PXZvaWQgMD9LRWU6ZSx0aGlzfXZhciBLRWUsdHEscnE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtodigpO0tFZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7byhRRWUsImhhc2hTZXQiKTt0cT1RRWV9KTtmdW5jdGlvbiBacCh0KXt2YXIgZT0tMSxyPXQ9PW51bGw/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxyOyl7dmFyIG49dFtlXTt0aGlzLnNldChuWzBdLG5bMV0pfX12YXIgTl8sbnE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtYWSgpO0tZKCk7WlkoKTtlcSgpO3JxKCk7byhacCwiSGFzaCIpO1pwLnByb3RvdHlwZS5jbGVhcj1xWTtacC5wcm90b3R5cGUuZGVsZXRlPWpZO1pwLnByb3RvdHlwZS5nZXQ9UVk7WnAucHJvdG90eXBlLmhhcz1KWTtacC5wcm90b3R5cGUuc2V0PXRxO05fPVpwfSk7ZnVuY3Rpb24gWkVlKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH12YXIgaXEsYXE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKFpFZSwibGlzdENhY2hlQ2xlYXIiKTtpcT1aRWV9KTtmdW5jdGlvbiBKRWUodCxlKXtyZXR1cm4gdD09PWV8fHQhPT10JiZlIT09ZX12YXIgRm8sQWQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKEpFZSwiZXEiKTtGbz1KRWV9KTtmdW5jdGlvbiBlNmUodCxlKXtmb3IodmFyIHI9dC5sZW5ndGg7ci0tOylpZihGbyh0W3JdWzBdLGUpKXJldHVybiByO3JldHVybi0xfXZhciBQaCxmdj1NKCgpPT57InVzZSBzdHJpY3QiO0FkKCk7byhlNmUsImFzc29jSW5kZXhPZiIpO1BoPWU2ZX0pO2Z1bmN0aW9uIG42ZSh0KXt2YXIgZT10aGlzLl9fZGF0YV9fLHI9UGgoZSx0KTtpZihyPDApcmV0dXJuITE7dmFyIG49ZS5sZW5ndGgtMTtyZXR1cm4gcj09bj9lLnBvcCgpOnI2ZS5jYWxsKGUsciwxKSwtLXRoaXMuc2l6ZSwhMH12YXIgdDZlLHI2ZSxzcSxvcT1NKCgpPT57InVzZSBzdHJpY3QiO2Z2KCk7dDZlPUFycmF5LnByb3RvdHlwZSxyNmU9dDZlLnNwbGljZTtvKG42ZSwibGlzdENhY2hlRGVsZXRlIik7c3E9bjZlfSk7ZnVuY3Rpb24gaTZlKHQpe3ZhciBlPXRoaXMuX19kYXRhX18scj1QaChlLHQpO3JldHVybiByPDA/dm9pZCAwOmVbcl1bMV19dmFyIGxxLGNxPU0oKCk9PnsidXNlIHN0cmljdCI7ZnYoKTtvKGk2ZSwibGlzdENhY2hlR2V0Iik7bHE9aTZlfSk7ZnVuY3Rpb24gYTZlKHQpe3JldHVybiBQaCh0aGlzLl9fZGF0YV9fLHQpPi0xfXZhciB1cSxocT1NKCgpPT57InVzZSBzdHJpY3QiO2Z2KCk7byhhNmUsImxpc3RDYWNoZUhhcyIpO3VxPWE2ZX0pO2Z1bmN0aW9uIHM2ZSh0LGUpe3ZhciByPXRoaXMuX19kYXRhX18sbj1QaChyLHQpO3JldHVybiBuPDA/KCsrdGhpcy5zaXplLHIucHVzaChbdCxlXSkpOnJbbl1bMV09ZSx0aGlzfXZhciBmcSxkcT1NKCgpPT57InVzZSBzdHJpY3QiO2Z2KCk7byhzNmUsImxpc3RDYWNoZVNldCIpO2ZxPXM2ZX0pO2Z1bmN0aW9uIEpwKHQpe3ZhciBlPS0xLHI9dD09bnVsbD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPHI7KXt2YXIgbj10W2VdO3RoaXMuc2V0KG5bMF0sblsxXSl9fXZhciBCaCxkdj1NKCgpPT57InVzZSBzdHJpY3QiO2FxKCk7b3EoKTtjcSgpO2hxKCk7ZHEoKTtvKEpwLCJMaXN0Q2FjaGUiKTtKcC5wcm90b3R5cGUuY2xlYXI9aXE7SnAucHJvdG90eXBlLmRlbGV0ZT1zcTtKcC5wcm90b3R5cGUuZ2V0PWxxO0pwLnByb3RvdHlwZS5oYXM9dXE7SnAucHJvdG90eXBlLnNldD1mcTtCaD1KcH0pO3ZhciBvNmUsRmgsbDU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPaCgpO0JvKCk7bzZlPUFzKG9pLCJNYXAiKSxGaD1vNmV9KTtmdW5jdGlvbiBsNmUoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBOXyxtYXA6bmV3KEZofHxCaCksc3RyaW5nOm5ldyBOX319dmFyIHBxLG1xPU0oKCk9PnsidXNlIHN0cmljdCI7bnEoKTtkdigpO2w1KCk7byhsNmUsIm1hcENhY2hlQ2xlYXIiKTtwcT1sNmV9KTtmdW5jdGlvbiBjNmUodCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIGU9PSJzdHJpbmcifHxlPT0ibnVtYmVyInx8ZT09InN5bWJvbCJ8fGU9PSJib29sZWFuIj90IT09Il9fcHJvdG9fXyI6dD09PW51bGx9dmFyIGdxLHlxPU0oKCk9PnsidXNlIHN0cmljdCI7byhjNmUsImlzS2V5YWJsZSIpO2dxPWM2ZX0pO2Z1bmN0aW9uIHU2ZSh0LGUpe3ZhciByPXQuX19kYXRhX187cmV0dXJuIGdxKGUpP3JbdHlwZW9mIGU9PSJzdHJpbmciPyJzdHJpbmciOiJoYXNoIl06ci5tYXB9dmFyIHpoLHB2PU0oKCk9PnsidXNlIHN0cmljdCI7eXEoKTtvKHU2ZSwiZ2V0TWFwRGF0YSIpO3poPXU2ZX0pO2Z1bmN0aW9uIGg2ZSh0KXt2YXIgZT16aCh0aGlzLHQpLmRlbGV0ZSh0KTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfXZhciB2cSx4cT1NKCgpPT57InVzZSBzdHJpY3QiO3B2KCk7byhoNmUsIm1hcENhY2hlRGVsZXRlIik7dnE9aDZlfSk7ZnVuY3Rpb24gZjZlKHQpe3JldHVybiB6aCh0aGlzLHQpLmdldCh0KX12YXIgYnEsd3E9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwdigpO28oZjZlLCJtYXBDYWNoZUdldCIpO2JxPWY2ZX0pO2Z1bmN0aW9uIGQ2ZSh0KXtyZXR1cm4gemgodGhpcyx0KS5oYXModCl9dmFyIFRxLGtxPU0oKCk9PnsidXNlIHN0cmljdCI7cHYoKTtvKGQ2ZSwibWFwQ2FjaGVIYXMiKTtUcT1kNmV9KTtmdW5jdGlvbiBwNmUodCxlKXt2YXIgcj16aCh0aGlzLHQpLG49ci5zaXplO3JldHVybiByLnNldCh0LGUpLHRoaXMuc2l6ZSs9ci5zaXplPT1uPzA6MSx0aGlzfXZhciBFcSxTcT1NKCgpPT57InVzZSBzdHJpY3QiO3B2KCk7byhwNmUsIm1hcENhY2hlU2V0Iik7RXE9cDZlfSk7ZnVuY3Rpb24gZW0odCl7dmFyIGU9LTEscj10PT1udWxsPzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8cjspe3ZhciBuPXRbZV07dGhpcy5zZXQoblswXSxuWzFdKX19dmFyIF9kLGM1PU0oKCk9PnsidXNlIHN0cmljdCI7bXEoKTt4cSgpO3dxKCk7a3EoKTtTcSgpO28oZW0sIk1hcENhY2hlIik7ZW0ucHJvdG90eXBlLmNsZWFyPXBxO2VtLnByb3RvdHlwZS5kZWxldGU9dnE7ZW0ucHJvdG90eXBlLmdldD1icTtlbS5wcm90b3R5cGUuaGFzPVRxO2VtLnByb3RvdHlwZS5zZXQ9RXE7X2Q9ZW19KTtmdW5jdGlvbiBSXyh0LGUpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24ifHxlIT1udWxsJiZ0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKG02ZSk7dmFyIHI9byhmdW5jdGlvbigpe3ZhciBuPWFyZ3VtZW50cyxpPWU/ZS5hcHBseSh0aGlzLG4pOm5bMF0sYT1yLmNhY2hlO2lmKGEuaGFzKGkpKXJldHVybiBhLmdldChpKTt2YXIgcz10LmFwcGx5KHRoaXMsbik7cmV0dXJuIHIuY2FjaGU9YS5zZXQoaSxzKXx8YSxzfSwibWVtb2l6ZWQiKTtyZXR1cm4gci5jYWNoZT1uZXcoUl8uQ2FjaGV8fF9kKSxyfXZhciBtNmUsdG0sTV89TSgoKT0+eyJ1c2Ugc3RyaWN0IjtjNSgpO202ZT0iRXhwZWN0ZWQgYSBmdW5jdGlvbiI7byhSXywibWVtb2l6ZSIpO1JfLkNhY2hlPV9kO3RtPVJffSk7ZnVuY3Rpb24gZzZlKCl7dGhpcy5fX2RhdGFfXz1uZXcgQmgsdGhpcy5zaXplPTB9dmFyIENxLEFxPU0oKCk9PnsidXNlIHN0cmljdCI7ZHYoKTtvKGc2ZSwic3RhY2tDbGVhciIpO0NxPWc2ZX0pO2Z1bmN0aW9uIHk2ZSh0KXt2YXIgZT10aGlzLl9fZGF0YV9fLHI9ZS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZT1lLnNpemUscn12YXIgX3EsTHE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHk2ZSwic3RhY2tEZWxldGUiKTtfcT15NmV9KTtmdW5jdGlvbiB2NmUodCl7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KHQpfXZhciBEcSxOcT1NKCgpPT57InVzZSBzdHJpY3QiO28odjZlLCJzdGFja0dldCIpO0RxPXY2ZX0pO2Z1bmN0aW9uIHg2ZSh0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModCl9dmFyIFJxLE1xPU0oKCk9PnsidXNlIHN0cmljdCI7byh4NmUsInN0YWNrSGFzIik7UnE9eDZlfSk7ZnVuY3Rpb24gdzZlKHQsZSl7dmFyIHI9dGhpcy5fX2RhdGFfXztpZihyIGluc3RhbmNlb2YgQmgpe3ZhciBuPXIuX19kYXRhX187aWYoIUZofHxuLmxlbmd0aDxiNmUtMSlyZXR1cm4gbi5wdXNoKFt0LGVdKSx0aGlzLnNpemU9KytyLnNpemUsdGhpcztyPXRoaXMuX19kYXRhX189bmV3IF9kKG4pfXJldHVybiByLnNldCh0LGUpLHRoaXMuc2l6ZT1yLnNpemUsdGhpc312YXIgYjZlLElxLE9xPU0oKCk9PnsidXNlIHN0cmljdCI7ZHYoKTtsNSgpO2M1KCk7YjZlPTIwMDtvKHc2ZSwic3RhY2tTZXQiKTtJcT13NmV9KTtmdW5jdGlvbiBybSh0KXt2YXIgZT10aGlzLl9fZGF0YV9fPW5ldyBCaCh0KTt0aGlzLnNpemU9ZS5zaXplfXZhciBiYyxtdj1NKCgpPT57InVzZSBzdHJpY3QiO2R2KCk7QXEoKTtMcSgpO05xKCk7TXEoKTtPcSgpO28ocm0sIlN0YWNrIik7cm0ucHJvdG90eXBlLmNsZWFyPUNxO3JtLnByb3RvdHlwZS5kZWxldGU9X3E7cm0ucHJvdG90eXBlLmdldD1EcTtybS5wcm90b3R5cGUuaGFzPVJxO3JtLnByb3RvdHlwZS5zZXQ9SXE7YmM9cm19KTt2YXIgVDZlLG5tLElfPU0oKCk9PnsidXNlIHN0cmljdCI7T2goKTtUNmU9ZnVuY3Rpb24oKXt0cnl7dmFyIHQ9QXMoT2JqZWN0LCJkZWZpbmVQcm9wZXJ0eSIpO3JldHVybiB0KHt9LCIiLHt9KSx0fWNhdGNoe319KCksbm09VDZlfSk7ZnVuY3Rpb24gazZlKHQsZSxyKXtlPT0iX19wcm90b19fIiYmbm0/bm0odCxlLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpyLHdyaXRhYmxlOiEwfSk6dFtlXT1yfXZhciB3YyxpbT1NKCgpPT57InVzZSBzdHJpY3QiO0lfKCk7byhrNmUsImJhc2VBc3NpZ25WYWx1ZSIpO3djPWs2ZX0pO2Z1bmN0aW9uIEU2ZSh0LGUscil7KHIhPT12b2lkIDAmJiFGbyh0W2VdLHIpfHxyPT09dm9pZCAwJiYhKGUgaW4gdCkpJiZ3Yyh0LGUscil9dmFyIGd2LE9fPU0oKCk9PnsidXNlIHN0cmljdCI7aW0oKTtBZCgpO28oRTZlLCJhc3NpZ25NZXJnZVZhbHVlIik7Z3Y9RTZlfSk7ZnVuY3Rpb24gUzZlKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPS0xLGE9T2JqZWN0KGUpLHM9bihlKSxsPXMubGVuZ3RoO2wtLTspe3ZhciB1PXNbdD9sOisraV07aWYocihhW3VdLHUsYSk9PT0hMSlicmVha31yZXR1cm4gZX19dmFyIFBxLEJxPU0oKCk9PnsidXNlIHN0cmljdCI7byhTNmUsImNyZWF0ZUJhc2VGb3IiKTtQcT1TNmV9KTt2YXIgQzZlLGFtLHU1PU0oKCk9PnsidXNlIHN0cmljdCI7QnEoKTtDNmU9UHEoKSxhbT1DNmV9KTtmdW5jdGlvbiBfNmUodCxlKXtpZihlKXJldHVybiB0LnNsaWNlKCk7dmFyIHI9dC5sZW5ndGgsbj1HcT9HcShyKTpuZXcgdC5jb25zdHJ1Y3RvcihyKTtyZXR1cm4gdC5jb3B5KG4pLG59dmFyICRxLEZxLEE2ZSx6cSxHcSxoNSxQXz1NKCgpPT57InVzZSBzdHJpY3QiO0JvKCk7JHE9dHlwZW9mIGV4cG9ydHM9PSJvYmplY3QiJiZleHBvcnRzJiYhZXhwb3J0cy5ub2RlVHlwZSYmZXhwb3J0cyxGcT0kcSYmdHlwZW9mIG1vZHVsZT09Im9iamVjdCImJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLEE2ZT1GcSYmRnEuZXhwb3J0cz09PSRxLHpxPUE2ZT9vaS5CdWZmZXI6dm9pZCAwLEdxPXpxP3pxLmFsbG9jVW5zYWZlOnZvaWQgMDtvKF82ZSwiY2xvbmVCdWZmZXIiKTtoNT1fNmV9KTt2YXIgTDZlLHNtLEJfPU0oKCk9PnsidXNlIHN0cmljdCI7Qm8oKTtMNmU9b2kuVWludDhBcnJheSxzbT1MNmV9KTtmdW5jdGlvbiBENmUodCl7dmFyIGU9bmV3IHQuY29uc3RydWN0b3IodC5ieXRlTGVuZ3RoKTtyZXR1cm4gbmV3IHNtKGUpLnNldChuZXcgc20odCkpLGV9dmFyIG9tLGY1PU0oKCk9PnsidXNlIHN0cmljdCI7Ql8oKTtvKEQ2ZSwiY2xvbmVBcnJheUJ1ZmZlciIpO29tPUQ2ZX0pO2Z1bmN0aW9uIE42ZSh0LGUpe3ZhciByPWU/b20odC5idWZmZXIpOnQuYnVmZmVyO3JldHVybiBuZXcgdC5jb25zdHJ1Y3RvcihyLHQuYnl0ZU9mZnNldCx0Lmxlbmd0aCl9dmFyIGQ1LEZfPU0oKCk9PnsidXNlIHN0cmljdCI7ZjUoKTtvKE42ZSwiY2xvbmVUeXBlZEFycmF5Iik7ZDU9TjZlfSk7ZnVuY3Rpb24gUjZlKHQsZSl7dmFyIHI9LTEsbj10Lmxlbmd0aDtmb3IoZXx8KGU9QXJyYXkobikpOysrcjxuOyllW3JdPXRbcl07cmV0dXJuIGV9dmFyIHA1LHpfPU0oKCk9PnsidXNlIHN0cmljdCI7byhSNmUsImNvcHlBcnJheSIpO3A1PVI2ZX0pO3ZhciBWcSxNNmUsVXEsSHE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtpbygpO1ZxPU9iamVjdC5jcmVhdGUsTTZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gbyh0LCJvYmplY3QiKSxmdW5jdGlvbihlKXtpZigheG4oZSkpcmV0dXJue307aWYoVnEpcmV0dXJuIFZxKGUpO3QucHJvdG90eXBlPWU7dmFyIHI9bmV3IHQ7cmV0dXJuIHQucHJvdG90eXBlPXZvaWQgMCxyfX0oKSxVcT1NNmV9KTtmdW5jdGlvbiBJNmUodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQoZShyKSl9fXZhciBtNSxHXz1NKCgpPT57InVzZSBzdHJpY3QiO28oSTZlLCJvdmVyQXJnIik7bTU9STZlfSk7dmFyIE82ZSxsbSxnNT1NKCgpPT57InVzZSBzdHJpY3QiO0dfKCk7TzZlPW01KE9iamVjdC5nZXRQcm90b3R5cGVPZixPYmplY3QpLGxtPU82ZX0pO2Z1bmN0aW9uIEI2ZSh0KXt2YXIgZT10JiZ0LmNvbnN0cnVjdG9yLHI9dHlwZW9mIGU9PSJmdW5jdGlvbiImJmUucHJvdG90eXBlfHxQNmU7cmV0dXJuIHQ9PT1yfXZhciBQNmUsVGMsY209TSgoKT0+eyJ1c2Ugc3RyaWN0IjtQNmU9T2JqZWN0LnByb3RvdHlwZTtvKEI2ZSwiaXNQcm90b3R5cGUiKTtUYz1CNmV9KTtmdW5jdGlvbiBGNmUodCl7cmV0dXJuIHR5cGVvZiB0LmNvbnN0cnVjdG9yPT0iZnVuY3Rpb24iJiYhVGModCk/VXEobG0odCkpOnt9fXZhciB5NSwkXz1NKCgpPT57InVzZSBzdHJpY3QiO0hxKCk7ZzUoKTtjbSgpO28oRjZlLCJpbml0Q2xvbmVPYmplY3QiKTt5NT1GNmV9KTtmdW5jdGlvbiB6NmUodCl7cmV0dXJuIHQhPW51bGwmJnR5cGVvZiB0PT0ib2JqZWN0In12YXIgZWksem89TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHo2ZSwiaXNPYmplY3RMaWtlIik7ZWk9ejZlfSk7ZnVuY3Rpb24gJDZlKHQpe3JldHVybiBlaSh0KSYmZ2EodCk9PUc2ZX12YXIgRzZlLFZfLFdxPU0oKCk9PnsidXNlIHN0cmljdCI7THUoKTt6bygpO0c2ZT0iW29iamVjdCBBcmd1bWVudHNdIjtvKCQ2ZSwiYmFzZUlzQXJndW1lbnRzIik7Vl89JDZlfSk7dmFyIFlxLFY2ZSxVNmUsSDZlLE1sLHVtPU0oKCk9PnsidXNlIHN0cmljdCI7V3EoKTt6bygpO1lxPU9iamVjdC5wcm90b3R5cGUsVjZlPVlxLmhhc093blByb3BlcnR5LFU2ZT1ZcS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxINmU9Vl8oZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT9WXzpmdW5jdGlvbih0KXtyZXR1cm4gZWkodCkmJlY2ZS5jYWxsKHQsImNhbGxlZSIpJiYhVTZlLmNhbGwodCwiY2FsbGVlIil9LE1sPUg2ZX0pO3ZhciBXNmUsRHQsSG49TSgoKT0+eyJ1c2Ugc3RyaWN0IjtXNmU9QXJyYXkuaXNBcnJheSxEdD1XNmV9KTtmdW5jdGlvbiBxNmUodCl7cmV0dXJuIHR5cGVvZiB0PT0ibnVtYmVyIiYmdD4tMSYmdCUxPT0wJiZ0PD1ZNmV9dmFyIFk2ZSxobSx2NT1NKCgpPT57InVzZSBzdHJpY3QiO1k2ZT05MDA3MTk5MjU0NzQwOTkxO28ocTZlLCJpc0xlbmd0aCIpO2htPXE2ZX0pO2Z1bmN0aW9uIFg2ZSh0KXtyZXR1cm4gdCE9bnVsbCYmaG0odC5sZW5ndGgpJiYhX2kodCl9dmFyIGxpLEdvPU0oKCk9PnsidXNlIHN0cmljdCI7dXYoKTt2NSgpO28oWDZlLCJpc0FycmF5TGlrZSIpO2xpPVg2ZX0pO2Z1bmN0aW9uIGo2ZSh0KXtyZXR1cm4gZWkodCkmJmxpKHQpfXZhciBMZCx4NT1NKCgpPT57InVzZSBzdHJpY3QiO0dvKCk7em8oKTtvKGo2ZSwiaXNBcnJheUxpa2VPYmplY3QiKTtMZD1qNmV9KTtmdW5jdGlvbiBLNmUoKXtyZXR1cm4hMX12YXIgcXEsWHE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKEs2ZSwic3R1YkZhbHNlIik7cXE9SzZlfSk7dmFyIFFxLGpxLFE2ZSxLcSxaNmUsSjZlLElsLGZtPU0oKCk9PnsidXNlIHN0cmljdCI7Qm8oKTtYcSgpO1FxPXR5cGVvZiBleHBvcnRzPT0ib2JqZWN0IiYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsanE9UXEmJnR5cGVvZiBtb2R1bGU9PSJvYmplY3QiJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxRNmU9anEmJmpxLmV4cG9ydHM9PT1RcSxLcT1RNmU/b2kuQnVmZmVyOnZvaWQgMCxaNmU9S3E/S3EuaXNCdWZmZXI6dm9pZCAwLEo2ZT1aNmV8fHFxLElsPUo2ZX0pO2Z1bmN0aW9uIGFTZSh0KXtpZighZWkodCl8fGdhKHQpIT1lU2UpcmV0dXJuITE7dmFyIGU9bG0odCk7aWYoZT09PW51bGwpcmV0dXJuITA7dmFyIHI9blNlLmNhbGwoZSwiY29uc3RydWN0b3IiKSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4gdHlwZW9mIHI9PSJmdW5jdGlvbiImJnIgaW5zdGFuY2VvZiByJiZacS5jYWxsKHIpPT1pU2V9dmFyIGVTZSx0U2UsclNlLFpxLG5TZSxpU2UsSnEsZVg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMdSgpO2c1KCk7em8oKTtlU2U9IltvYmplY3QgT2JqZWN0XSIsdFNlPUZ1bmN0aW9uLnByb3RvdHlwZSxyU2U9T2JqZWN0LnByb3RvdHlwZSxacT10U2UudG9TdHJpbmcsblNlPXJTZS5oYXNPd25Qcm9wZXJ0eSxpU2U9WnEuY2FsbChPYmplY3QpO28oYVNlLCJpc1BsYWluT2JqZWN0Iik7SnE9YVNlfSk7ZnVuY3Rpb24gRFNlKHQpe3JldHVybiBlaSh0KSYmaG0odC5sZW5ndGgpJiYhIXpuW2dhKHQpXX12YXIgc1NlLG9TZSxsU2UsY1NlLHVTZSxoU2UsZlNlLGRTZSxwU2UsbVNlLGdTZSx5U2UsdlNlLHhTZSxiU2Usd1NlLFRTZSxrU2UsRVNlLFNTZSxDU2UsQVNlLF9TZSxMU2Usem4sdFgsclg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMdSgpO3Y1KCk7em8oKTtzU2U9IltvYmplY3QgQXJndW1lbnRzXSIsb1NlPSJbb2JqZWN0IEFycmF5XSIsbFNlPSJbb2JqZWN0IEJvb2xlYW5dIixjU2U9IltvYmplY3QgRGF0ZV0iLHVTZT0iW29iamVjdCBFcnJvcl0iLGhTZT0iW29iamVjdCBGdW5jdGlvbl0iLGZTZT0iW29iamVjdCBNYXBdIixkU2U9IltvYmplY3QgTnVtYmVyXSIscFNlPSJbb2JqZWN0IE9iamVjdF0iLG1TZT0iW29iamVjdCBSZWdFeHBdIixnU2U9IltvYmplY3QgU2V0XSIseVNlPSJbb2JqZWN0IFN0cmluZ10iLHZTZT0iW29iamVjdCBXZWFrTWFwXSIseFNlPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsYlNlPSJbb2JqZWN0IERhdGFWaWV3XSIsd1NlPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLFRTZT0iW29iamVjdCBGbG9hdDY0QXJyYXldIixrU2U9IltvYmplY3QgSW50OEFycmF5XSIsRVNlPSJbb2JqZWN0IEludDE2QXJyYXldIixTU2U9IltvYmplY3QgSW50MzJBcnJheV0iLENTZT0iW29iamVjdCBVaW50OEFycmF5XSIsQVNlPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsX1NlPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsTFNlPSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsem49e307em5bd1NlXT16bltUU2VdPXpuW2tTZV09em5bRVNlXT16bltTU2VdPXpuW0NTZV09em5bQVNlXT16bltfU2VdPXpuW0xTZV09ITA7em5bc1NlXT16bltvU2VdPXpuW3hTZV09em5bbFNlXT16bltiU2VdPXpuW2NTZV09em5bdVNlXT16bltoU2VdPXpuW2ZTZV09em5bZFNlXT16bltwU2VdPXpuW21TZV09em5bZ1NlXT16blt5U2VdPXpuW3ZTZV09ITE7byhEU2UsImJhc2VJc1R5cGVkQXJyYXkiKTt0WD1EU2V9KTtmdW5jdGlvbiBOU2UodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpfX12YXIgJG8sRGQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKE5TZSwiYmFzZVVuYXJ5Iik7JG89TlNlfSk7dmFyIG5YLHl2LFJTZSxVXyxNU2UsVm8sdnY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMXygpO25YPXR5cGVvZiBleHBvcnRzPT0ib2JqZWN0IiYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMseXY9blgmJnR5cGVvZiBtb2R1bGU9PSJvYmplY3QiJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxSU2U9eXYmJnl2LmV4cG9ydHM9PT1uWCxVXz1SU2UmJnM1LnByb2Nlc3MsTVNlPWZ1bmN0aW9uKCl7dHJ5e3ZhciB0PXl2JiZ5di5yZXF1aXJlJiZ5di5yZXF1aXJlKCJ1dGlsIikudHlwZXM7cmV0dXJuIHR8fFVfJiZVXy5iaW5kaW5nJiZVXy5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2h7fX0oKSxWbz1NU2V9KTt2YXIgaVgsSVNlLEdoLHh2PU0oKCk9PnsidXNlIHN0cmljdCI7clgoKTtEZCgpO3Z2KCk7aVg9Vm8mJlZvLmlzVHlwZWRBcnJheSxJU2U9aVg/JG8oaVgpOnRYLEdoPUlTZX0pO2Z1bmN0aW9uIE9TZSh0LGUpe2lmKCEoZT09PSJjb25zdHJ1Y3RvciImJnR5cGVvZiB0W2VdPT0iZnVuY3Rpb24iKSYmZSE9Il9fcHJvdG9fXyIpcmV0dXJuIHRbZV19dmFyIGJ2LEhfPU0oKCk9PnsidXNlIHN0cmljdCI7byhPU2UsInNhZmVHZXQiKTtidj1PU2V9KTtmdW5jdGlvbiBGU2UodCxlLHIpe3ZhciBuPXRbZV07KCEoQlNlLmNhbGwodCxlKSYmRm8obixyKSl8fHI9PT12b2lkIDAmJiEoZSBpbiB0KSkmJndjKHQsZSxyKX12YXIgUFNlLEJTZSxrYyxkbT1NKCgpPT57InVzZSBzdHJpY3QiO2ltKCk7QWQoKTtQU2U9T2JqZWN0LnByb3RvdHlwZSxCU2U9UFNlLmhhc093blByb3BlcnR5O28oRlNlLCJhc3NpZ25WYWx1ZSIpO2tjPUZTZX0pO2Z1bmN0aW9uIHpTZSh0LGUscixuKXt2YXIgaT0hcjtyfHwocj17fSk7Zm9yKHZhciBhPS0xLHM9ZS5sZW5ndGg7KythPHM7KXt2YXIgbD1lW2FdLHU9bj9uKHJbbF0sdFtsXSxsLHIsdCk6dm9pZCAwO3U9PT12b2lkIDAmJih1PXRbbF0pLGk/d2MocixsLHUpOmtjKHIsbCx1KX1yZXR1cm4gcn12YXIgVW8sTmQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtkbSgpO2ltKCk7byh6U2UsImNvcHlPYmplY3QiKTtVbz16U2V9KTtmdW5jdGlvbiBHU2UodCxlKXtmb3IodmFyIHI9LTEsbj1BcnJheSh0KTsrK3I8dDspbltyXT1lKHIpO3JldHVybiBufXZhciBhWCxzWD1NKCgpPT57InVzZSBzdHJpY3QiO28oR1NlLCJiYXNlVGltZXMiKTthWD1HU2V9KTtmdW5jdGlvbiBVU2UodCxlKXt2YXIgcj10eXBlb2YgdDtyZXR1cm4gZT1lPz8kU2UsISFlJiYocj09Im51bWJlciJ8fHIhPSJzeW1ib2wiJiZWU2UudGVzdCh0KSkmJnQ+LTEmJnQlMT09MCYmdDxlfXZhciAkU2UsVlNlLCRoLHd2PU0oKCk9PnsidXNlIHN0cmljdCI7JFNlPTkwMDcxOTkyNTQ3NDA5OTEsVlNlPS9eKD86MHxbMS05XVxkKikkLztvKFVTZSwiaXNJbmRleCIpOyRoPVVTZX0pO2Z1bmN0aW9uIFlTZSh0LGUpe3ZhciByPUR0KHQpLG49IXImJk1sKHQpLGk9IXImJiFuJiZJbCh0KSxhPSFyJiYhbiYmIWkmJkdoKHQpLHM9cnx8bnx8aXx8YSxsPXM/YVgodC5sZW5ndGgsU3RyaW5nKTpbXSx1PWwubGVuZ3RoO2Zvcih2YXIgaCBpbiB0KShlfHxXU2UuY2FsbCh0LGgpKSYmIShzJiYoaD09Imxlbmd0aCJ8fGkmJihoPT0ib2Zmc2V0Inx8aD09InBhcmVudCIpfHxhJiYoaD09ImJ1ZmZlciJ8fGg9PSJieXRlTGVuZ3RoInx8aD09ImJ5dGVPZmZzZXQiKXx8JGgoaCx1KSkpJiZsLnB1c2goaCk7cmV0dXJuIGx9dmFyIEhTZSxXU2UsYjUsV189TSgoKT0+eyJ1c2Ugc3RyaWN0IjtzWCgpO3VtKCk7SG4oKTtmbSgpO3d2KCk7eHYoKTtIU2U9T2JqZWN0LnByb3RvdHlwZSxXU2U9SFNlLmhhc093blByb3BlcnR5O28oWVNlLCJhcnJheUxpa2VLZXlzIik7YjU9WVNlfSk7ZnVuY3Rpb24gcVNlKHQpe3ZhciBlPVtdO2lmKHQhPW51bGwpZm9yKHZhciByIGluIE9iamVjdCh0KSllLnB1c2gocik7cmV0dXJuIGV9dmFyIG9YLGxYPU0oKCk9PnsidXNlIHN0cmljdCI7byhxU2UsIm5hdGl2ZUtleXNJbiIpO29YPXFTZX0pO2Z1bmN0aW9uIEtTZSh0KXtpZigheG4odCkpcmV0dXJuIG9YKHQpO3ZhciBlPVRjKHQpLHI9W107Zm9yKHZhciBuIGluIHQpbj09ImNvbnN0cnVjdG9yIiYmKGV8fCFqU2UuY2FsbCh0LG4pKXx8ci5wdXNoKG4pO3JldHVybiByfXZhciBYU2UsalNlLGNYLHVYPU0oKCk9PnsidXNlIHN0cmljdCI7aW8oKTtjbSgpO2xYKCk7WFNlPU9iamVjdC5wcm90b3R5cGUsalNlPVhTZS5oYXNPd25Qcm9wZXJ0eTtvKEtTZSwiYmFzZUtleXNJbiIpO2NYPUtTZX0pO2Z1bmN0aW9uIFFTZSh0KXtyZXR1cm4gbGkodCk/YjUodCwhMCk6Y1godCl9dmFyIF9zLFZoPU0oKCk9PnsidXNlIHN0cmljdCI7V18oKTt1WCgpO0dvKCk7byhRU2UsImtleXNJbiIpO19zPVFTZX0pO2Z1bmN0aW9uIFpTZSh0KXtyZXR1cm4gVW8odCxfcyh0KSl9dmFyIGhYLGZYPU0oKCk9PnsidXNlIHN0cmljdCI7TmQoKTtWaCgpO28oWlNlLCJ0b1BsYWluT2JqZWN0Iik7aFg9WlNlfSk7ZnVuY3Rpb24gSlNlKHQsZSxyLG4saSxhLHMpe3ZhciBsPWJ2KHQsciksdT1idihlLHIpLGg9cy5nZXQodSk7aWYoaCl7Z3YodCxyLGgpO3JldHVybn12YXIgZj1hP2EobCx1LHIrIiIsdCxlLHMpOnZvaWQgMCxkPWY9PT12b2lkIDA7aWYoZCl7dmFyIHA9RHQodSksbT0hcCYmSWwodSksZz0hcCYmIW0mJkdoKHUpO2Y9dSxwfHxtfHxnP0R0KGwpP2Y9bDpMZChsKT9mPXA1KGwpOm0/KGQ9ITEsZj1oNSh1LCEwKSk6Zz8oZD0hMSxmPWQ1KHUsITApKTpmPVtdOkpxKHUpfHxNbCh1KT8oZj1sLE1sKGwpP2Y9aFgobCk6KCF4bihsKXx8X2kobCkpJiYoZj15NSh1KSkpOmQ9ITF9ZCYmKHMuc2V0KHUsZiksaShmLHUsbixhLHMpLHMuZGVsZXRlKHUpKSxndih0LHIsZil9dmFyIGRYLHBYPU0oKCk9PnsidXNlIHN0cmljdCI7T18oKTtQXygpO0ZfKCk7el8oKTskXygpO3VtKCk7SG4oKTt4NSgpO2ZtKCk7dXYoKTtpbygpO2VYKCk7eHYoKTtIXygpO2ZYKCk7byhKU2UsImJhc2VNZXJnZURlZXAiKTtkWD1KU2V9KTtmdW5jdGlvbiBtWCh0LGUscixuLGkpe3QhPT1lJiZhbShlLGZ1bmN0aW9uKGEscyl7aWYoaXx8KGk9bmV3IGJjKSx4bihhKSlkWCh0LGUscyxyLG1YLG4saSk7ZWxzZXt2YXIgbD1uP24oYnYodCxzKSxhLHMrIiIsdCxlLGkpOnZvaWQgMDtsPT09dm9pZCAwJiYobD1hKSxndih0LHMsbCl9fSxfcyl9dmFyIGdYLHlYPU0oKCk9PnsidXNlIHN0cmljdCI7bXYoKTtPXygpO3U1KCk7cFgoKTtpbygpO1ZoKCk7SF8oKTtvKG1YLCJiYXNlTWVyZ2UiKTtnWD1tWH0pO2Z1bmN0aW9uIGVDZSh0KXtyZXR1cm4gdH12YXIgYWEsUnU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKGVDZSwiaWRlbnRpdHkiKTthYT1lQ2V9KTtmdW5jdGlvbiB0Q2UodCxlLHIpe3N3aXRjaChyLmxlbmd0aCl7Y2FzZSAwOnJldHVybiB0LmNhbGwoZSk7Y2FzZSAxOnJldHVybiB0LmNhbGwoZSxyWzBdKTtjYXNlIDI6cmV0dXJuIHQuY2FsbChlLHJbMF0sclsxXSk7Y2FzZSAzOnJldHVybiB0LmNhbGwoZSxyWzBdLHJbMV0sclsyXSl9cmV0dXJuIHQuYXBwbHkoZSxyKX12YXIgdlgseFg9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHRDZSwiYXBwbHkiKTt2WD10Q2V9KTtmdW5jdGlvbiByQ2UodCxlLHIpe3JldHVybiBlPWJYKGU9PT12b2lkIDA/dC5sZW5ndGgtMTplLDApLGZ1bmN0aW9uKCl7Zm9yKHZhciBuPWFyZ3VtZW50cyxpPS0xLGE9Ylgobi5sZW5ndGgtZSwwKSxzPUFycmF5KGEpOysraTxhOylzW2ldPW5bZStpXTtpPS0xO2Zvcih2YXIgbD1BcnJheShlKzEpOysraTxlOylsW2ldPW5baV07cmV0dXJuIGxbZV09cihzKSx2WCh0LHRoaXMsbCl9fXZhciBiWCx3NSxZXz1NKCgpPT57InVzZSBzdHJpY3QiO3hYKCk7Ylg9TWF0aC5tYXg7byhyQ2UsIm92ZXJSZXN0Iik7dzU9ckNlfSk7ZnVuY3Rpb24gbkNlKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX12YXIgTHMscV89TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKG5DZSwiY29uc3RhbnQiKTtMcz1uQ2V9KTt2YXIgaUNlLHdYLFRYPU0oKCk9PnsidXNlIHN0cmljdCI7cV8oKTtJXygpO1J1KCk7aUNlPW5tP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIG5tKHQsInRvU3RyaW5nIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6THMoZSksd3JpdGFibGU6ITB9KX06YWEsd1g9aUNlfSk7ZnVuY3Rpb24gbENlKHQpe3ZhciBlPTAscj0wO3JldHVybiBmdW5jdGlvbigpe3ZhciBuPW9DZSgpLGk9c0NlLShuLXIpO2lmKHI9bixpPjApe2lmKCsrZT49YUNlKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSBlPTA7cmV0dXJuIHQuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fXZhciBhQ2Usc0NlLG9DZSxrWCxFWD1NKCgpPT57InVzZSBzdHJpY3QiO2FDZT04MDAsc0NlPTE2LG9DZT1EYXRlLm5vdztvKGxDZSwic2hvcnRPdXQiKTtrWD1sQ2V9KTt2YXIgY0NlLFQ1LFhfPU0oKCk9PnsidXNlIHN0cmljdCI7VFgoKTtFWCgpO2NDZT1rWCh3WCksVDU9Y0NlfSk7ZnVuY3Rpb24gdUNlKHQsZSl7cmV0dXJuIFQ1KHc1KHQsZSxhYSksdCsiIil9dmFyIEVjLHBtPU0oKCk9PnsidXNlIHN0cmljdCI7UnUoKTtZXygpO1hfKCk7byh1Q2UsImJhc2VSZXN0Iik7RWM9dUNlfSk7ZnVuY3Rpb24gaENlKHQsZSxyKXtpZigheG4ocikpcmV0dXJuITE7dmFyIG49dHlwZW9mIGU7cmV0dXJuKG49PSJudW1iZXIiP2xpKHIpJiYkaChlLHIubGVuZ3RoKTpuPT0ic3RyaW5nIiYmZSBpbiByKT9GbyhyW2VdLHQpOiExfXZhciBhbyxSZD1NKCgpPT57InVzZSBzdHJpY3QiO0FkKCk7R28oKTt3digpO2lvKCk7byhoQ2UsImlzSXRlcmF0ZWVDYWxsIik7YW89aENlfSk7ZnVuY3Rpb24gZkNlKHQpe3JldHVybiBFYyhmdW5jdGlvbihlLHIpe3ZhciBuPS0xLGk9ci5sZW5ndGgsYT1pPjE/cltpLTFdOnZvaWQgMCxzPWk+Mj9yWzJdOnZvaWQgMDtmb3IoYT10Lmxlbmd0aD4zJiZ0eXBlb2YgYT09ImZ1bmN0aW9uIj8oaS0tLGEpOnZvaWQgMCxzJiZhbyhyWzBdLHJbMV0scykmJihhPWk8Mz92b2lkIDA6YSxpPTEpLGU9T2JqZWN0KGUpOysrbjxpOyl7dmFyIGw9cltuXTtsJiZ0KGUsbCxuLGEpfXJldHVybiBlfSl9dmFyIGs1LGpfPU0oKCk9PnsidXNlIHN0cmljdCI7cG0oKTtSZCgpO28oZkNlLCJjcmVhdGVBc3NpZ25lciIpO2s1PWZDZX0pO3ZhciBkQ2UsVWgsS189TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt5WCgpO2pfKCk7ZENlPWs1KGZ1bmN0aW9uKHQsZSxyKXtnWCh0LGUscil9KSxVaD1kQ2V9KTtmdW5jdGlvbiBKXyh0LGUpe2lmKCF0KXJldHVybiBlO2xldCByPWBjdXJ2ZSR7dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpfWA7cmV0dXJuIHBDZVtyXT8/ZX1mdW5jdGlvbiB2Q2UodCxlKXtsZXQgcj10LnRyaW0oKTtpZihyKXJldHVybiBlLnNlY3VyaXR5TGV2ZWwhPT0ibG9vc2UiPygwLEFYLnNhbml0aXplVXJsKShyKTpyfWZ1bmN0aW9uIERYKHQsZSl7cmV0dXJuIXR8fCFlPzA6TWF0aC5zcXJ0KE1hdGgucG93KGUueC10LngsMikrTWF0aC5wb3coZS55LXQueSwyKSl9ZnVuY3Rpb24gYkNlKHQpe2xldCBlLHI9MDt0LmZvckVhY2goaT0+e3IrPURYKGksZSksZT1pfSk7bGV0IG49ci8yO3JldHVybiBlOSh0LG4pfWZ1bmN0aW9uIHdDZSh0KXtyZXR1cm4gdC5sZW5ndGg9PT0xP3RbMF06YkNlKHQpfWZ1bmN0aW9uIGtDZSh0LGUscil7bGV0IG49c3RydWN0dXJlZENsb25lKHIpO1kuaW5mbygib3VyIHBvaW50cyIsbiksZSE9PSJzdGFydF9sZWZ0IiYmZSE9PSJzdGFydF9yaWdodCImJm4ucmV2ZXJzZSgpO2xldCBpPTI1K3QsYT1lOShuLGkpLHM9MTArdCouNSxsPU1hdGguYXRhbjIoblswXS55LWEueSxuWzBdLngtYS54KSx1PXt4OjAseTowfTtyZXR1cm4gZT09PSJzdGFydF9sZWZ0Ij8odS54PU1hdGguc2luKGwrTWF0aC5QSSkqcysoblswXS54K2EueCkvMix1Lnk9LU1hdGguY29zKGwrTWF0aC5QSSkqcysoblswXS55K2EueSkvMik6ZT09PSJlbmRfcmlnaHQiPyh1Lng9TWF0aC5zaW4obC1NYXRoLlBJKSpzKyhuWzBdLngrYS54KS8yLTUsdS55PS1NYXRoLmNvcyhsLU1hdGguUEkpKnMrKG5bMF0ueSthLnkpLzItNSk6ZT09PSJlbmRfbGVmdCI/KHUueD1NYXRoLnNpbihsKSpzKyhuWzBdLngrYS54KS8yLTUsdS55PS1NYXRoLmNvcyhsKSpzKyhuWzBdLnkrYS55KS8yLTUpOih1Lng9TWF0aC5zaW4obCkqcysoblswXS54K2EueCkvMix1Lnk9LU1hdGguY29zKGwpKnMrKG5bMF0ueSthLnkpLzIpLHV9ZnVuY3Rpb24gdDkodCl7bGV0IGU9IiIscj0iIjtmb3IobGV0IG4gb2YgdCluIT09dm9pZCAwJiYobi5zdGFydHNXaXRoKCJjb2xvcjoiKXx8bi5zdGFydHNXaXRoKCJ0ZXh0LWFsaWduOiIpP3I9cituKyI7IjplPWUrbisiOyIpO3JldHVybntzdHlsZTplLGxhYmVsU3R5bGU6cn19ZnVuY3Rpb24gRUNlKHQpe2xldCBlPSIiLHI9IjAxMjM0NTY3ODlhYmNkZWYiLG49ci5sZW5ndGg7Zm9yKGxldCBpPTA7aTx0O2krKyllKz1yLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbikpO3JldHVybiBlfWZ1bmN0aW9uIFM1KHQsZSl7cmV0dXJuIGE5KHQsZSkuaGVpZ2h0fWZ1bmN0aW9uIHNvKHQsZSl7cmV0dXJuIGE5KHQsZSkud2lkdGh9ZnVuY3Rpb24gczkodCl7cmV0dXJuInN0ciJpbiB0fWZ1bmN0aW9uIERzKHQsZSl7cmV0dXJuIFVoKHt9LHQsZSl9ZnVuY3Rpb24gR24odCl7cmV0dXJuIHQ/P251bGx9dmFyIEFYLFpfLHBDZSxtQ2UsZ0NlLF9YLExYLHlDZSx4Q2UsU1gsZTksVENlLENYLHI5LG45LFNDZSxDQ2UsaTksQUNlLGE5LFFfLEU1LF9DZSxMQ2UsSG8sVXQsTlgsTWEsQzUsaHI9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtBWD1KaShRcCgpLDEpO3ByKCk7ZnIoKTtuQygpO3V0KCk7WmYoKTtncCgpO01fKCk7S18oKTtRYigpO1pfPSJcdTIwMEIiLHBDZT17Y3VydmVCYXNpczpQbyxjdXJ2ZUJhc2lzQ2xvc2VkOlkzLGN1cnZlQmFzaXNPcGVuOnEzLGN1cnZlQnVtcFg6bF8sY3VydmVCdW1wWTpjXyxjdXJ2ZUJ1bmRsZTp1XyxjdXJ2ZUNhcmRpbmFsQ2xvc2VkOmZfLGN1cnZlQ2FyZGluYWxPcGVuOnBfLGN1cnZlQ2FyZGluYWw6aF8sY3VydmVDYXRtdWxsUm9tQ2xvc2VkOnlfLGN1cnZlQ2F0bXVsbFJvbU9wZW46dl8sY3VydmVDYXRtdWxsUm9tOmdfLGN1cnZlTGluZWFyOlhwLGN1cnZlTGluZWFyQ2xvc2VkOlozLGN1cnZlTW9ub3RvbmVYOmJfLGN1cnZlTW9ub3RvbmVZOndfLGN1cnZlTmF0dXJhbDplNSxjdXJ2ZVN0ZXA6cjUsY3VydmVTdGVwQWZ0ZXI6a18sY3VydmVTdGVwQmVmb3JlOlRffSxtQ2U9L1xzKig/OihcdyspKD89Oik6fChcdyspKVxzKig/OihcdyspfCgoPzooPyF9JXsyfSkufFxyP1xuKSopKT9ccyooPzp9JXsyfSk/L2dpLGdDZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9X1godCwvKD86aW5pdFxiKXwoPzppbml0aWFsaXplXGIpLyksbj17fTtpZihBcnJheS5pc0FycmF5KHIpKXtsZXQgcz1yLm1hcChsPT5sLmFyZ3MpO3hwKHMpLG49Vm4obixbLi4uc10pfWVsc2Ugbj1yLmFyZ3M7aWYoIW4pcmV0dXJuO2xldCBpPW1wKHQsZSksYT0iY29uZmlnIjtyZXR1cm4gblthXSE9PXZvaWQgMCYmKGk9PT0iZmxvd2NoYXJ0LXYyIiYmKGk9ImZsb3djaGFydCIpLG5baV09blthXSxkZWxldGUgblthXSksbn0sImRldGVjdEluaXQiKSxfWD1vKGZ1bmN0aW9uKHQsZT1udWxsKXt0cnl7bGV0IHI9bmV3IFJlZ0V4cChgWyVdezJ9KD8hW3tdJHttQ2Uuc291cmNlfSkoPz1bfV1bJV17Mn0pLioKYCwiaWciKTt0PXQudHJpbSgpLnJlcGxhY2UociwiIikucmVwbGFjZSgvJy9nbSwnIicpLFkuZGVidWcoYERldGVjdGluZyBkaWFncmFtIGRpcmVjdGl2ZSR7ZSE9PW51bGw/IiB0eXBlOiIrZToiIn0gYmFzZWQgb24gdGhlIHRleHQ6JHt0fWApO2xldCBuLGk9W107Zm9yKDsobj1LZi5leGVjKHQpKSE9PW51bGw7KWlmKG4uaW5kZXg9PT1LZi5sYXN0SW5kZXgmJktmLmxhc3RJbmRleCsrLG4mJiFlfHxlJiZuWzFdPy5tYXRjaChlKXx8ZSYmblsyXT8ubWF0Y2goZSkpe2xldCBhPW5bMV0/blsxXTpuWzJdLHM9blszXT9uWzNdLnRyaW0oKTpuWzRdP0pTT04ucGFyc2Uobls0XS50cmltKCkpOm51bGw7aS5wdXNoKHt0eXBlOmEsYXJnczpzfSl9cmV0dXJuIGkubGVuZ3RoPT09MD97dHlwZTp0LGFyZ3M6bnVsbH06aS5sZW5ndGg9PT0xP2lbMF06aX1jYXRjaChyKXtyZXR1cm4gWS5lcnJvcihgRVJST1I6ICR7ci5tZXNzYWdlfSAtIFVuYWJsZSB0byBwYXJzZSBkaXJlY3RpdmUgdHlwZTogJyR7ZX0nIGJhc2VkIG9uIHRoZSB0ZXh0OiAnJHt0fSdgKSx7dHlwZTp2b2lkIDAsYXJnczpudWxsfX19LCJkZXRlY3REaXJlY3RpdmUiKSxMWD1vKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoS2YsIiIpfSwicmVtb3ZlRGlyZWN0aXZlcyIpLHlDZT1vKGZ1bmN0aW9uKHQsZSl7Zm9yKGxldFtyLG5db2YgZS5lbnRyaWVzKCkpaWYobi5tYXRjaCh0KSlyZXR1cm4gcjtyZXR1cm4tMX0sImlzU3Vic3RyaW5nSW5BcnJheSIpO28oSl8sImludGVycG9sYXRlVG9DdXJ2ZSIpO28odkNlLCJmb3JtYXRVcmwiKTt4Q2U9bygodCwuLi5lKT0+e2xldCByPXQuc3BsaXQoIi4iKSxuPXIubGVuZ3RoLTEsaT1yW25dLGE9d2luZG93O2ZvcihsZXQgcz0wO3M8bjtzKyspaWYoYT1hW3Jbc11dLCFhKXtZLmVycm9yKGBGdW5jdGlvbiBuYW1lOiAke3R9IG5vdCBmb3VuZCBpbiB3aW5kb3dgKTtyZXR1cm59YVtpXSguLi5lKX0sInJ1bkZ1bmMiKTtvKERYLCJkaXN0YW5jZSIpO28oYkNlLCJ0cmF2ZXJzZUVkZ2UiKTtvKHdDZSwiY2FsY0xhYmVsUG9zaXRpb24iKTtTWD1vKCh0LGU9Mik9PntsZXQgcj1NYXRoLnBvdygxMCxlKTtyZXR1cm4gTWF0aC5yb3VuZCh0KnIpL3J9LCJyb3VuZE51bWJlciIpLGU5PW8oKHQsZSk9PntsZXQgcixuPWU7Zm9yKGxldCBpIG9mIHQpe2lmKHIpe2xldCBhPURYKGkscik7aWYoYTxuKW4tPWE7ZWxzZXtsZXQgcz1uL2E7aWYoczw9MClyZXR1cm4gcjtpZihzPj0xKXJldHVybnt4OmkueCx5OmkueX07aWYocz4wJiZzPDEpcmV0dXJue3g6U1goKDEtcykqci54K3MqaS54LDUpLHk6U1goKDEtcykqci55K3MqaS55LDUpfX19cj1pfXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgYSBzdWl0YWJsZSBwb2ludCBmb3IgdGhlIGdpdmVuIGRpc3RhbmNlIil9LCJjYWxjdWxhdGVQb2ludCIpLFRDZT1vKCh0LGUscik9PntZLmluZm8oYG91ciBwb2ludHMgJHtKU09OLnN0cmluZ2lmeShlKX1gKSxlWzBdIT09ciYmKGU9ZS5yZXZlcnNlKCkpO2xldCBpPWU5KGUsMjUpLGE9dD8xMDo1LHM9TWF0aC5hdGFuMihlWzBdLnktaS55LGVbMF0ueC1pLngpLGw9e3g6MCx5OjB9O3JldHVybiBsLng9TWF0aC5zaW4ocykqYSsoZVswXS54K2kueCkvMixsLnk9LU1hdGguY29zKHMpKmErKGVbMF0ueStpLnkpLzIsbH0sImNhbGNDYXJkaW5hbGl0eVBvc2l0aW9uIik7byhrQ2UsImNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24iKTtvKHQ5LCJnZXRTdHlsZXNGcm9tQXJyYXkiKTtDWD0wLHI5PW8oKCk9PihDWCsrLCJpZC0iK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDEyKSsiLSIrQ1gpLCJnZW5lcmF0ZUlkIik7byhFQ2UsIm1ha2VSYW5kb21IZXgiKTtuOT1vKHQ9PkVDZSh0Lmxlbmd0aCksInJhbmRvbSIpLFNDZT1vKGZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsZmlsbDp2b2lkIDAsYW5jaG9yOiJzdGFydCIsc3R5bGU6IiM2NjYiLHdpZHRoOjEwMCxoZWlnaHQ6MTAwLHRleHRNYXJnaW46MCxyeDowLHJ5OjAsdmFsaWduOnZvaWQgMCx0ZXh0OiIifX0sImdldFRleHRPYmoiKSxDQ2U9byhmdW5jdGlvbih0LGUpe2xldCByPWUudGV4dC5yZXBsYWNlKHFlLmxpbmVCcmVha1JlZ2V4LCIgIiksWyxuXT1IbyhlLmZvbnRTaXplKSxpPXQuYXBwZW5kKCJ0ZXh0Iik7aS5hdHRyKCJ4IixlLngpLGkuYXR0cigieSIsZS55KSxpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsZS5hbmNob3IpLGkuc3R5bGUoImZvbnQtZmFtaWx5IixlLmZvbnRGYW1pbHkpLGkuc3R5bGUoImZvbnQtc2l6ZSIsbiksaS5zdHlsZSgiZm9udC13ZWlnaHQiLGUuZm9udFdlaWdodCksaS5hdHRyKCJmaWxsIixlLmZpbGwpLGUuY2xhc3MhPT12b2lkIDAmJmkuYXR0cigiY2xhc3MiLGUuY2xhc3MpO2xldCBhPWkuYXBwZW5kKCJ0c3BhbiIpO3JldHVybiBhLmF0dHIoIngiLGUueCtlLnRleHRNYXJnaW4qMiksYS5hdHRyKCJmaWxsIixlLmZpbGwpLGEudGV4dChyKSxpfSwiZHJhd1NpbXBsZVRleHQiKSxpOT10bSgodCxlLHIpPT57aWYoIXR8fChyPU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIixqb2luV2l0aDoiPGJyLz4ifSxyKSxxZS5saW5lQnJlYWtSZWdleC50ZXN0KHQpKSlyZXR1cm4gdDtsZXQgbj10LnNwbGl0KCIgIikuZmlsdGVyKEJvb2xlYW4pLGk9W10sYT0iIjtyZXR1cm4gbi5mb3JFYWNoKChzLGwpPT57bGV0IHU9c28oYCR7c30gYCxyKSxoPXNvKGEscik7aWYodT5lKXtsZXR7aHlwaGVuYXRlZFN0cmluZ3M6cCxyZW1haW5pbmdXb3JkOm19PUFDZShzLGUsIi0iLHIpO2kucHVzaChhLC4uLnApLGE9bX1lbHNlIGgrdT49ZT8oaS5wdXNoKGEpLGE9cyk6YT1bYSxzXS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpO2wrMT09PW4ubGVuZ3RoJiZpLnB1c2goYSl9KSxpLmZpbHRlcihzPT5zIT09IiIpLmpvaW4oci5qb2luV2l0aCl9LCh0LGUscik9PmAke3R9JHtlfSR7ci5mb250U2l6ZX0ke3IuZm9udFdlaWdodH0ke3IuZm9udEZhbWlseX0ke3Iuam9pbldpdGh9YCksQUNlPXRtKCh0LGUscj0iLSIsbik9PntuPU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIixtYXJnaW46MH0sbik7bGV0IGk9Wy4uLnRdLGE9W10scz0iIjtyZXR1cm4gaS5mb3JFYWNoKChsLHUpPT57bGV0IGg9YCR7c30ke2x9YDtpZihzbyhoLG4pPj1lKXtsZXQgZD11KzEscD1pLmxlbmd0aD09PWQsbT1gJHtofSR7cn1gO2EucHVzaChwP2g6bSkscz0iIn1lbHNlIHM9aH0pLHtoeXBoZW5hdGVkU3RyaW5nczphLHJlbWFpbmluZ1dvcmQ6c319LCh0LGUscj0iLSIsbik9PmAke3R9JHtlfSR7cn0ke24uZm9udFNpemV9JHtuLmZvbnRXZWlnaHR9JHtuLmZvbnRGYW1pbHl9YCk7byhTNSwiY2FsY3VsYXRlVGV4dEhlaWdodCIpO28oc28sImNhbGN1bGF0ZVRleHRXaWR0aCIpO2E5PXRtKCh0LGUpPT57bGV0e2ZvbnRTaXplOnI9MTIsZm9udEZhbWlseTpuPSJBcmlhbCIsZm9udFdlaWdodDppPTQwMH09ZTtpZighdClyZXR1cm57d2lkdGg6MCxoZWlnaHQ6MH07bGV0WyxhXT1IbyhyKSxzPVsic2Fucy1zZXJpZiIsbl0sbD10LnNwbGl0KHFlLmxpbmVCcmVha1JlZ2V4KSx1PVtdLGg9VmUoImJvZHkiKTtpZighaC5yZW1vdmUpcmV0dXJue3dpZHRoOjAsaGVpZ2h0OjAsbGluZUhlaWdodDowfTtsZXQgZj1oLmFwcGVuZCgic3ZnIik7Zm9yKGxldCBwIG9mIHMpe2xldCBtPTAsZz17d2lkdGg6MCxoZWlnaHQ6MCxsaW5lSGVpZ2h0OjB9O2ZvcihsZXQgeSBvZiBsKXtsZXQgdj1TQ2UoKTt2LnRleHQ9eXx8Wl87bGV0IHg9Q0NlKGYsdikuc3R5bGUoImZvbnQtc2l6ZSIsYSkuc3R5bGUoImZvbnQtd2VpZ2h0IixpKS5zdHlsZSgiZm9udC1mYW1pbHkiLHApLGI9KHguX2dyb3Vwc3x8eClbMF1bMF0uZ2V0QkJveCgpO2lmKGIud2lkdGg9PT0wJiZiLmhlaWdodD09PTApdGhyb3cgbmV3IEVycm9yKCJzdmcgZWxlbWVudCBub3QgaW4gcmVuZGVyIHRyZWUiKTtnLndpZHRoPU1hdGgucm91bmQoTWF0aC5tYXgoZy53aWR0aCxiLndpZHRoKSksbT1NYXRoLnJvdW5kKGIuaGVpZ2h0KSxnLmhlaWdodCs9bSxnLmxpbmVIZWlnaHQ9TWF0aC5yb3VuZChNYXRoLm1heChnLmxpbmVIZWlnaHQsbSkpfXUucHVzaChnKX1mLnJlbW92ZSgpO2xldCBkPWlzTmFOKHVbMV0uaGVpZ2h0KXx8aXNOYU4odVsxXS53aWR0aCl8fGlzTmFOKHVbMV0ubGluZUhlaWdodCl8fHVbMF0uaGVpZ2h0PnVbMV0uaGVpZ2h0JiZ1WzBdLndpZHRoPnVbMV0ud2lkdGgmJnVbMF0ubGluZUhlaWdodD51WzFdLmxpbmVIZWlnaHQ/MDoxO3JldHVybiB1W2RdfSwodCxlKT0+YCR7dH0ke2UuZm9udFNpemV9JHtlLmZvbnRXZWlnaHR9JHtlLmZvbnRGYW1pbHl9YCksUV89Y2xhc3N7Y29uc3RydWN0b3IoZT0hMSxyKXt0aGlzLmNvdW50PTA7dGhpcy5jb3VudD1yP3IubGVuZ3RoOjAsdGhpcy5uZXh0PWU/KCk9PnRoaXMuY291bnQrKzooKT0+RGF0ZS5ub3coKX1zdGF0aWN7byh0aGlzLCJJbml0SURHZW5lcmF0b3IiKX19LF9DZT1vKGZ1bmN0aW9uKHQpe3JldHVybiBFNT1FNXx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdD1lc2NhcGUodCkucmVwbGFjZSgvJTI2L2csIiYiKS5yZXBsYWNlKC8lMjMvZywiIyIpLnJlcGxhY2UoLyUzQi9nLCI7IiksRTUuaW5uZXJIVE1MPXQsdW5lc2NhcGUoRTUudGV4dENvbnRlbnQpfSwiZW50aXR5RGVjb2RlIik7byhzOSwiaXNEZXRhaWxlZEVycm9yIik7TENlPW8oKHQsZSxyLG4pPT57aWYoIW4pcmV0dXJuO2xldCBpPXQubm9kZSgpPy5nZXRCQm94KCk7aSYmdC5hcHBlbmQoInRleHQiKS50ZXh0KG4pLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieCIsaS54K2kud2lkdGgvMikuYXR0cigieSIsLXIpLmF0dHIoImNsYXNzIixlKX0sImluc2VydFRpdGxlIiksSG89byh0PT57aWYodHlwZW9mIHQ9PSJudW1iZXIiKXJldHVyblt0LHQrInB4Il07bGV0IGU9cGFyc2VJbnQodD8/IiIsMTApO3JldHVybiBOdW1iZXIuaXNOYU4oZSk/W3ZvaWQgMCx2b2lkIDBdOnQ9PT1TdHJpbmcoZSk/W2UsdCsicHgiXTpbZSx0XX0sInBhcnNlRm9udFNpemUiKTtvKERzLCJjbGVhbkFuZE1lcmdlIik7VXQ9e2Fzc2lnbldpdGhEZXB0aDpWbix3cmFwTGFiZWw6aTksY2FsY3VsYXRlVGV4dEhlaWdodDpTNSxjYWxjdWxhdGVUZXh0V2lkdGg6c28sY2FsY3VsYXRlVGV4dERpbWVuc2lvbnM6YTksY2xlYW5BbmRNZXJnZTpEcyxkZXRlY3RJbml0OmdDZSxkZXRlY3REaXJlY3RpdmU6X1gsaXNTdWJzdHJpbmdJbkFycmF5OnlDZSxpbnRlcnBvbGF0ZVRvQ3VydmU6Sl8sY2FsY0xhYmVsUG9zaXRpb246d0NlLGNhbGNDYXJkaW5hbGl0eVBvc2l0aW9uOlRDZSxjYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uOmtDZSxmb3JtYXRVcmw6dkNlLGdldFN0eWxlc0Zyb21BcnJheTp0OSxnZW5lcmF0ZUlkOnI5LHJhbmRvbTpuOSxydW5GdW5jOnhDZSxlbnRpdHlEZWNvZGU6X0NlLGluc2VydFRpdGxlOkxDZSxwYXJzZUZvbnRTaXplOkhvLEluaXRJREdlbmVyYXRvcjpRX30sTlg9byhmdW5jdGlvbih0KXtsZXQgZT10O3JldHVybiBlPWUucmVwbGFjZSgvc3R5bGUuKjpcUyojLio7L2csZnVuY3Rpb24ocil7cmV0dXJuIHIuc3Vic3RyaW5nKDAsci5sZW5ndGgtMSl9KSxlPWUucmVwbGFjZSgvY2xhc3NEZWYuKjpcUyojLio7L2csZnVuY3Rpb24ocil7cmV0dXJuIHIuc3Vic3RyaW5nKDAsci5sZW5ndGgtMSl9KSxlPWUucmVwbGFjZSgvI1x3KzsvZyxmdW5jdGlvbihyKXtsZXQgbj1yLnN1YnN0cmluZygxLHIubGVuZ3RoLTEpO3JldHVybi9eXCs/XGQrJC8udGVzdChuKT8iXHVGQjAyXHhCMFx4QjAiK24rIlx4QjZceERGIjoiXHVGQjAyXHhCMCIrbisiXHhCNlx4REYifSksZX0sImVuY29kZUVudGl0aWVzIiksTWE9byhmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC/vrILCsMKwL2csIiYjIikucmVwbGFjZSgv76yCwrAvZywiJiIpLnJlcGxhY2UoL8K2w58vZywiOyIpfSwiZGVjb2RlRW50aXRpZXMiKSxDNT1vKCh0LGUse2NvdW50ZXI6cj0wLHByZWZpeDpuLHN1ZmZpeDppfSk9PmAke24/YCR7bn1fYDoiIn0ke3R9XyR7ZX1fJHtyfSR7aT9gXyR7aX1gOiIifWAsImdldEVkZ2VJZCIpO28oR24sImhhbmRsZVVuZGVmaW5lZEF0dHIiKX0pO2Z1bmN0aW9uIE9sKHQsZSxyLG4saSl7aWYoIWVbdF0ud2lkdGgpaWYocillW3RdLnRleHQ9aTkoZVt0XS50ZXh0LGksbiksZVt0XS50ZXh0TGluZXM9ZVt0XS50ZXh0LnNwbGl0KHFlLmxpbmVCcmVha1JlZ2V4KS5sZW5ndGgsZVt0XS53aWR0aD1pLGVbdF0uaGVpZ2h0PVM1KGVbdF0udGV4dCxuKTtlbHNle2xldCBhPWVbdF0udGV4dC5zcGxpdChxZS5saW5lQnJlYWtSZWdleCk7ZVt0XS50ZXh0TGluZXM9YS5sZW5ndGg7bGV0IHM9MDtlW3RdLmhlaWdodD0wLGVbdF0ud2lkdGg9MDtmb3IobGV0IGwgb2YgYSllW3RdLndpZHRoPU1hdGgubWF4KHNvKGwsbiksZVt0XS53aWR0aCkscz1TNShsLG4pLGVbdF0uaGVpZ2h0PWVbdF0uaGVpZ2h0K3N9fWZ1bmN0aW9uIFBYKHQsZSxyLG4saSl7bGV0IGE9bmV3IEQ1KGkpO2EuZGF0YS53aWR0aExpbWl0PXIuZGF0YS53aWR0aExpbWl0L01hdGgubWluKG85LG4ubGVuZ3RoKTtmb3IobGV0W3MsbF1vZiBuLmVudHJpZXMoKSl7bGV0IHU9MDtsLmltYWdlPXt3aWR0aDowLGhlaWdodDowLFk6MH0sbC5zcHJpdGUmJihsLmltYWdlLndpZHRoPTQ4LGwuaW1hZ2UuaGVpZ2h0PTQ4LGwuaW1hZ2UuWT11LHU9bC5pbWFnZS5ZK2wuaW1hZ2UuaGVpZ2h0KTtsZXQgaD1sLndyYXAmJkd0LndyYXAsZj1BNShHdCk7aWYoZi5mb250U2l6ZT1mLmZvbnRTaXplKzIsZi5mb250V2VpZ2h0PSJib2xkIixPbCgibGFiZWwiLGwsaCxmLGEuZGF0YS53aWR0aExpbWl0KSxsLmxhYmVsLlk9dSs4LHU9bC5sYWJlbC5ZK2wubGFiZWwuaGVpZ2h0LGwudHlwZSYmbC50eXBlLnRleHQhPT0iIil7bC50eXBlLnRleHQ9IlsiK2wudHlwZS50ZXh0KyJdIjtsZXQgZz1BNShHdCk7T2woInR5cGUiLGwsaCxnLGEuZGF0YS53aWR0aExpbWl0KSxsLnR5cGUuWT11KzUsdT1sLnR5cGUuWStsLnR5cGUuaGVpZ2h0fWlmKGwuZGVzY3ImJmwuZGVzY3IudGV4dCE9PSIiKXtsZXQgZz1BNShHdCk7Zy5mb250U2l6ZT1nLmZvbnRTaXplLTIsT2woImRlc2NyIixsLGgsZyxhLmRhdGEud2lkdGhMaW1pdCksbC5kZXNjci5ZPXUrMjAsdT1sLmRlc2NyLlkrbC5kZXNjci5oZWlnaHR9aWYocz09MHx8cyVvOT09PTApe2xldCBnPXIuZGF0YS5zdGFydHgrR3QuZGlhZ3JhbU1hcmdpblgseT1yLmRhdGEuc3RvcHkrR3QuZGlhZ3JhbU1hcmdpblkrdTthLnNldERhdGEoZyxnLHkseSl9ZWxzZXtsZXQgZz1hLmRhdGEuc3RvcHghPT1hLmRhdGEuc3RhcnR4P2EuZGF0YS5zdG9weCtHdC5kaWFncmFtTWFyZ2luWDphLmRhdGEuc3RhcnR4LHk9YS5kYXRhLnN0YXJ0eTthLnNldERhdGEoZyxnLHkseSl9YS5uYW1lPWwuYWxpYXM7bGV0IGQ9aS5kYi5nZXRDNFNoYXBlQXJyYXkobC5hbGlhcykscD1pLmRiLmdldEM0U2hhcGVLZXlzKGwuYWxpYXMpO3AubGVuZ3RoPjAmJk9YKGEsdCxkLHApLGU9bC5hbGlhcztsZXQgbT1pLmRiLmdldEJvdW5kYXJ5cyhlKTttLmxlbmd0aD4wJiZQWCh0LGUsYSxtLGkpLGwuYWxpYXMhPT0iZ2xvYmFsIiYmSVgodCxsLGEpLHIuZGF0YS5zdG9weT1NYXRoLm1heChhLmRhdGEuc3RvcHkrR3QuYzRTaGFwZU1hcmdpbixyLmRhdGEuc3RvcHkpLHIuZGF0YS5zdG9weD1NYXRoLm1heChhLmRhdGEuc3RvcHgrR3QuYzRTaGFwZU1hcmdpbixyLmRhdGEuc3RvcHgpLF81PU1hdGgubWF4KF81LHIuZGF0YS5zdG9weCksTDU9TWF0aC5tYXgoTDUsci5kYXRhLnN0b3B5KX19dmFyIF81LEw1LE1YLG85LEd0LEQ1LGw5LFR2LEE1LERDZSxJWCxPWCxOcyxSWCxOQ2UsUkNlLE1DZSxjOSxCWD1NKCgpPT57InVzZSBzdHJpY3QiO3ByKCk7UlkoKTt1dCgpO1VTKCk7ZnIoKTt1NygpO1Z0KCk7Z3AoKTtocigpO2FpKCk7XzU9MCxMNT0wLE1YPTQsbzk9MjtleS55eT1UeTtHdD17fSxENT1jbGFzc3tzdGF0aWN7byh0aGlzLCJCb3VuZHMiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLm5hbWU9IiIsdGhpcy5kYXRhPXt9LHRoaXMuZGF0YS5zdGFydHg9dm9pZCAwLHRoaXMuZGF0YS5zdG9weD12b2lkIDAsdGhpcy5kYXRhLnN0YXJ0eT12b2lkIDAsdGhpcy5kYXRhLnN0b3B5PXZvaWQgMCx0aGlzLmRhdGEud2lkdGhMaW1pdD12b2lkIDAsdGhpcy5uZXh0RGF0YT17fSx0aGlzLm5leHREYXRhLnN0YXJ0eD12b2lkIDAsdGhpcy5uZXh0RGF0YS5zdG9weD12b2lkIDAsdGhpcy5uZXh0RGF0YS5zdGFydHk9dm9pZCAwLHRoaXMubmV4dERhdGEuc3RvcHk9dm9pZCAwLHRoaXMubmV4dERhdGEuY250PTAsbDkoZS5kYi5nZXRDb25maWcoKSl9c2V0RGF0YShlLHIsbixpKXt0aGlzLm5leHREYXRhLnN0YXJ0eD10aGlzLmRhdGEuc3RhcnR4PWUsdGhpcy5uZXh0RGF0YS5zdG9weD10aGlzLmRhdGEuc3RvcHg9cix0aGlzLm5leHREYXRhLnN0YXJ0eT10aGlzLmRhdGEuc3RhcnR5PW4sdGhpcy5uZXh0RGF0YS5zdG9weT10aGlzLmRhdGEuc3RvcHk9aX11cGRhdGVWYWwoZSxyLG4saSl7ZVtyXT09PXZvaWQgMD9lW3JdPW46ZVtyXT1pKG4sZVtyXSl9aW5zZXJ0KGUpe3RoaXMubmV4dERhdGEuY250PXRoaXMubmV4dERhdGEuY250KzE7bGV0IHI9dGhpcy5uZXh0RGF0YS5zdGFydHg9PT10aGlzLm5leHREYXRhLnN0b3B4P3RoaXMubmV4dERhdGEuc3RvcHgrZS5tYXJnaW46dGhpcy5uZXh0RGF0YS5zdG9weCtlLm1hcmdpbioyLG49citlLndpZHRoLGk9dGhpcy5uZXh0RGF0YS5zdGFydHkrZS5tYXJnaW4qMixhPWkrZS5oZWlnaHQ7KHI+PXRoaXMuZGF0YS53aWR0aExpbWl0fHxuPj10aGlzLmRhdGEud2lkdGhMaW1pdHx8dGhpcy5uZXh0RGF0YS5jbnQ+TVgpJiYocj10aGlzLm5leHREYXRhLnN0YXJ0eCtlLm1hcmdpbitHdC5uZXh0TGluZVBhZGRpbmdYLGk9dGhpcy5uZXh0RGF0YS5zdG9weStlLm1hcmdpbioyLHRoaXMubmV4dERhdGEuc3RvcHg9bj1yK2Uud2lkdGgsdGhpcy5uZXh0RGF0YS5zdGFydHk9dGhpcy5uZXh0RGF0YS5zdG9weSx0aGlzLm5leHREYXRhLnN0b3B5PWE9aStlLmhlaWdodCx0aGlzLm5leHREYXRhLmNudD0xKSxlLng9cixlLnk9aSx0aGlzLnVwZGF0ZVZhbCh0aGlzLmRhdGEsInN0YXJ0eCIscixNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwodGhpcy5kYXRhLCJzdGFydHkiLGksTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKHRoaXMuZGF0YSwic3RvcHgiLG4sTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKHRoaXMuZGF0YSwic3RvcHkiLGEsTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKHRoaXMubmV4dERhdGEsInN0YXJ0eCIscixNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwodGhpcy5uZXh0RGF0YSwic3RhcnR5IixpLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbCh0aGlzLm5leHREYXRhLCJzdG9weCIsbixNYXRoLm1heCksdGhpcy51cGRhdGVWYWwodGhpcy5uZXh0RGF0YSwic3RvcHkiLGEsTWF0aC5tYXgpfWluaXQoZSl7dGhpcy5uYW1lPSIiLHRoaXMuZGF0YT17c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDAsd2lkdGhMaW1pdDp2b2lkIDB9LHRoaXMubmV4dERhdGE9e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwLGNudDowfSxsOShlLmRiLmdldENvbmZpZygpKX1idW1wTGFzdE1hcmdpbihlKXt0aGlzLmRhdGEuc3RvcHgrPWUsdGhpcy5kYXRhLnN0b3B5Kz1lfX0sbDk9byhmdW5jdGlvbih0KXtWbihHdCx0KSx0LmZvbnRGYW1pbHkmJihHdC5wZXJzb25Gb250RmFtaWx5PUd0LnN5c3RlbUZvbnRGYW1pbHk9R3QubWVzc2FnZUZvbnRGYW1pbHk9dC5mb250RmFtaWx5KSx0LmZvbnRTaXplJiYoR3QucGVyc29uRm9udFNpemU9R3Quc3lzdGVtRm9udFNpemU9R3QubWVzc2FnZUZvbnRTaXplPXQuZm9udFNpemUpLHQuZm9udFdlaWdodCYmKEd0LnBlcnNvbkZvbnRXZWlnaHQ9R3Quc3lzdGVtRm9udFdlaWdodD1HdC5tZXNzYWdlRm9udFdlaWdodD10LmZvbnRXZWlnaHQpfSwic2V0Q29uZiIpLFR2PW8oKHQsZSk9Pih7Zm9udEZhbWlseTp0W2UrIkZvbnRGYW1pbHkiXSxmb250U2l6ZTp0W2UrIkZvbnRTaXplIl0sZm9udFdlaWdodDp0W2UrIkZvbnRXZWlnaHQiXX0pLCJjNFNoYXBlRm9udCIpLEE1PW8odD0+KHtmb250RmFtaWx5OnQuYm91bmRhcnlGb250RmFtaWx5LGZvbnRTaXplOnQuYm91bmRhcnlGb250U2l6ZSxmb250V2VpZ2h0OnQuYm91bmRhcnlGb250V2VpZ2h0fSksImJvdW5kYXJ5Rm9udCIpLERDZT1vKHQ9Pih7Zm9udEZhbWlseTp0Lm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOnQubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6dC5tZXNzYWdlRm9udFdlaWdodH0pLCJtZXNzYWdlRm9udCIpO28oT2wsImNhbGNDNFNoYXBlVGV4dFdIIik7SVg9byhmdW5jdGlvbih0LGUscil7ZS54PXIuZGF0YS5zdGFydHgsZS55PXIuZGF0YS5zdGFydHksZS53aWR0aD1yLmRhdGEuc3RvcHgtci5kYXRhLnN0YXJ0eCxlLmhlaWdodD1yLmRhdGEuc3RvcHktci5kYXRhLnN0YXJ0eSxlLmxhYmVsLnk9R3QuYzRTaGFwZU1hcmdpbi0zNTtsZXQgbj1lLndyYXAmJkd0LndyYXAsaT1BNShHdCk7aS5mb250U2l6ZT1pLmZvbnRTaXplKzIsaS5mb250V2VpZ2h0PSJib2xkIjtsZXQgYT1zbyhlLmxhYmVsLnRleHQsaSk7T2woImxhYmVsIixlLG4saSxhKSxSbC5kcmF3Qm91bmRhcnkodCxlLEd0KX0sImRyYXdCb3VuZGFyeSIpLE9YPW8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9MDtmb3IobGV0IGEgb2Ygbil7aT0wO2xldCBzPXJbYV0sbD1UdihHdCxzLnR5cGVDNFNoYXBlLnRleHQpO3N3aXRjaChsLmZvbnRTaXplPWwuZm9udFNpemUtMixzLnR5cGVDNFNoYXBlLndpZHRoPXNvKCJceEFCIitzLnR5cGVDNFNoYXBlLnRleHQrIlx4QkIiLGwpLHMudHlwZUM0U2hhcGUuaGVpZ2h0PWwuZm9udFNpemUrMixzLnR5cGVDNFNoYXBlLlk9R3QuYzRTaGFwZVBhZGRpbmcsaT1zLnR5cGVDNFNoYXBlLlkrcy50eXBlQzRTaGFwZS5oZWlnaHQtNCxzLmltYWdlPXt3aWR0aDowLGhlaWdodDowLFk6MH0scy50eXBlQzRTaGFwZS50ZXh0KXtjYXNlInBlcnNvbiI6Y2FzZSJleHRlcm5hbF9wZXJzb24iOnMuaW1hZ2Uud2lkdGg9NDgscy5pbWFnZS5oZWlnaHQ9NDgscy5pbWFnZS5ZPWksaT1zLmltYWdlLlkrcy5pbWFnZS5oZWlnaHQ7YnJlYWt9cy5zcHJpdGUmJihzLmltYWdlLndpZHRoPTQ4LHMuaW1hZ2UuaGVpZ2h0PTQ4LHMuaW1hZ2UuWT1pLGk9cy5pbWFnZS5ZK3MuaW1hZ2UuaGVpZ2h0KTtsZXQgdT1zLndyYXAmJkd0LndyYXAsaD1HdC53aWR0aC1HdC5jNFNoYXBlUGFkZGluZyoyLGY9VHYoR3Qscy50eXBlQzRTaGFwZS50ZXh0KTtpZihmLmZvbnRTaXplPWYuZm9udFNpemUrMixmLmZvbnRXZWlnaHQ9ImJvbGQiLE9sKCJsYWJlbCIscyx1LGYsaCkscy5sYWJlbC5ZPWkrOCxpPXMubGFiZWwuWStzLmxhYmVsLmhlaWdodCxzLnR5cGUmJnMudHlwZS50ZXh0IT09IiIpe3MudHlwZS50ZXh0PSJbIitzLnR5cGUudGV4dCsiXSI7bGV0IG09VHYoR3Qscy50eXBlQzRTaGFwZS50ZXh0KTtPbCgidHlwZSIscyx1LG0saCkscy50eXBlLlk9aSs1LGk9cy50eXBlLlkrcy50eXBlLmhlaWdodH1lbHNlIGlmKHMudGVjaG4mJnMudGVjaG4udGV4dCE9PSIiKXtzLnRlY2huLnRleHQ9IlsiK3MudGVjaG4udGV4dCsiXSI7bGV0IG09VHYoR3Qscy50ZWNobi50ZXh0KTtPbCgidGVjaG4iLHMsdSxtLGgpLHMudGVjaG4uWT1pKzUsaT1zLnRlY2huLlkrcy50ZWNobi5oZWlnaHR9bGV0IGQ9aSxwPXMubGFiZWwud2lkdGg7aWYocy5kZXNjciYmcy5kZXNjci50ZXh0IT09IiIpe2xldCBtPVR2KEd0LHMudHlwZUM0U2hhcGUudGV4dCk7T2woImRlc2NyIixzLHUsbSxoKSxzLmRlc2NyLlk9aSsyMCxpPXMuZGVzY3IuWStzLmRlc2NyLmhlaWdodCxwPU1hdGgubWF4KHMubGFiZWwud2lkdGgscy5kZXNjci53aWR0aCksZD1pLXMuZGVzY3IudGV4dExpbmVzKjV9cD1wK0d0LmM0U2hhcGVQYWRkaW5nLHMud2lkdGg9TWF0aC5tYXgocy53aWR0aHx8R3Qud2lkdGgscCxHdC53aWR0aCkscy5oZWlnaHQ9TWF0aC5tYXgocy5oZWlnaHR8fEd0LmhlaWdodCxkLEd0LmhlaWdodCkscy5tYXJnaW49cy5tYXJnaW58fEd0LmM0U2hhcGVNYXJnaW4sdC5pbnNlcnQocyksUmwuZHJhd0M0U2hhcGUoZSxzLEd0KX10LmJ1bXBMYXN0TWFyZ2luKEd0LmM0U2hhcGVNYXJnaW4pfSwiZHJhd0M0U2hhcGVBcnJheSIpLE5zPWNsYXNze3N0YXRpY3tvKHRoaXMsIlBvaW50Iil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLng9ZSx0aGlzLnk9cn19LFJYPW8oZnVuY3Rpb24odCxlKXtsZXQgcj10Lngsbj10LnksaT1lLngsYT1lLnkscz1yK3Qud2lkdGgvMixsPW4rdC5oZWlnaHQvMix1PU1hdGguYWJzKHItaSksaD1NYXRoLmFicyhuLWEpLGY9aC91LGQ9dC5oZWlnaHQvdC53aWR0aCxwPW51bGw7cmV0dXJuIG49PWEmJnI8aT9wPW5ldyBOcyhyK3Qud2lkdGgsbCk6bj09YSYmcj5pP3A9bmV3IE5zKHIsbCk6cj09aSYmbjxhP3A9bmV3IE5zKHMsbit0LmhlaWdodCk6cj09aSYmbj5hJiYocD1uZXcgTnMocyxuKSkscj5pJiZuPGE/ZD49Zj9wPW5ldyBOcyhyLGwrZip0LndpZHRoLzIpOnA9bmV3IE5zKHMtdS9oKnQuaGVpZ2h0LzIsbit0LmhlaWdodCk6cjxpJiZuPGE/ZD49Zj9wPW5ldyBOcyhyK3Qud2lkdGgsbCtmKnQud2lkdGgvMik6cD1uZXcgTnMocyt1L2gqdC5oZWlnaHQvMixuK3QuaGVpZ2h0KTpyPGkmJm4+YT9kPj1mP3A9bmV3IE5zKHIrdC53aWR0aCxsLWYqdC53aWR0aC8yKTpwPW5ldyBOcyhzK3QuaGVpZ2h0LzIqdS9oLG4pOnI+aSYmbj5hJiYoZD49Zj9wPW5ldyBOcyhyLGwtdC53aWR0aC8yKmYpOnA9bmV3IE5zKHMtdC5oZWlnaHQvMip1L2gsbikpLHB9LCJnZXRJbnRlcnNlY3RQb2ludCIpLE5DZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9e3g6MCx5OjB9O3IueD1lLngrZS53aWR0aC8yLHIueT1lLnkrZS5oZWlnaHQvMjtsZXQgbj1SWCh0LHIpO3IueD10LngrdC53aWR0aC8yLHIueT10LnkrdC5oZWlnaHQvMjtsZXQgaT1SWChlLHIpO3JldHVybntzdGFydFBvaW50Om4sZW5kUG9pbnQ6aX19LCJnZXRJbnRlcnNlY3RQb2ludHMiKSxSQ2U9byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT0wO2ZvcihsZXQgYSBvZiBlKXtpPWkrMTtsZXQgcz1hLndyYXAmJkd0LndyYXAsbD1EQ2UoR3QpO24uZGIuZ2V0QzRUeXBlKCk9PT0iQzREeW5hbWljIiYmKGEubGFiZWwudGV4dD1pKyI6ICIrYS5sYWJlbC50ZXh0KTtsZXQgaD1zbyhhLmxhYmVsLnRleHQsbCk7T2woImxhYmVsIixhLHMsbCxoKSxhLnRlY2huJiZhLnRlY2huLnRleHQhPT0iIiYmKGg9c28oYS50ZWNobi50ZXh0LGwpLE9sKCJ0ZWNobiIsYSxzLGwsaCkpLGEuZGVzY3ImJmEuZGVzY3IudGV4dCE9PSIiJiYoaD1zbyhhLmRlc2NyLnRleHQsbCksT2woImRlc2NyIixhLHMsbCxoKSk7bGV0IGY9cihhLmZyb20pLGQ9cihhLnRvKSxwPU5DZShmLGQpO2Euc3RhcnRQb2ludD1wLnN0YXJ0UG9pbnQsYS5lbmRQb2ludD1wLmVuZFBvaW50fVJsLmRyYXdSZWxzKHQsZSxHdCl9LCJkcmF3UmVscyIpO28oUFgsImRyYXdJbnNpZGVCb3VuZGFyeSIpO01DZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe0d0PXBlKCkuYzQ7bGV0IGk9cGUoKS5zZWN1cml0eUxldmVsLGE7aT09PSJzYW5kYm94IiYmKGE9VmUoIiNpIitlKSk7bGV0IHM9aT09PSJzYW5kYm94Ij9WZShhLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOlZlKCJib2R5IiksbD1uLmRiO24uZGIuc2V0V3JhcChHdC53cmFwKSxNWD1sLmdldEM0U2hhcGVJblJvdygpLG85PWwuZ2V0QzRCb3VuZGFyeUluUm93KCksWS5kZWJ1ZyhgQzoke0pTT04uc3RyaW5naWZ5KEd0LG51bGwsMil9YCk7bGV0IHU9aT09PSJzYW5kYm94Ij9zLnNlbGVjdChgW2lkPSIke2V9Il1gKTpWZShgW2lkPSIke2V9Il1gKTtSbC5pbnNlcnRDb21wdXRlckljb24odSksUmwuaW5zZXJ0RGF0YWJhc2VJY29uKHUpLFJsLmluc2VydENsb2NrSWNvbih1KTtsZXQgaD1uZXcgRDUobik7aC5zZXREYXRhKEd0LmRpYWdyYW1NYXJnaW5YLEd0LmRpYWdyYW1NYXJnaW5YLEd0LmRpYWdyYW1NYXJnaW5ZLEd0LmRpYWdyYW1NYXJnaW5ZKSxoLmRhdGEud2lkdGhMaW1pdD1zY3JlZW4uYXZhaWxXaWR0aCxfNT1HdC5kaWFncmFtTWFyZ2luWCxMNT1HdC5kaWFncmFtTWFyZ2luWTtsZXQgZj1uLmRiLmdldFRpdGxlKCksZD1uLmRiLmdldEJvdW5kYXJ5cygiIik7UFgodSwiIixoLGQsbiksUmwuaW5zZXJ0QXJyb3dIZWFkKHUpLFJsLmluc2VydEFycm93RW5kKHUpLFJsLmluc2VydEFycm93Q3Jvc3NIZWFkKHUpLFJsLmluc2VydEFycm93RmlsbGVkSGVhZCh1KSxSQ2UodSxuLmRiLmdldFJlbHMoKSxuLmRiLmdldEM0U2hhcGUsbiksaC5kYXRhLnN0b3B4PV81LGguZGF0YS5zdG9weT1MNTtsZXQgcD1oLmRhdGEsZz1wLnN0b3B5LXAuc3RhcnR5KzIqR3QuZGlhZ3JhbU1hcmdpblksdj1wLnN0b3B4LXAuc3RhcnR4KzIqR3QuZGlhZ3JhbU1hcmdpblg7ZiYmdS5hcHBlbmQoInRleHQiKS50ZXh0KGYpLmF0dHIoIngiLChwLnN0b3B4LXAuc3RhcnR4KS8yLTQqR3QuZGlhZ3JhbU1hcmdpblgpLmF0dHIoInkiLHAuc3RhcnR5K0d0LmRpYWdyYW1NYXJnaW5ZKSxacih1LGcsdixHdC51c2VNYXhXaWR0aCk7bGV0IHg9Zj82MDowO3UuYXR0cigidmlld0JveCIscC5zdGFydHgtR3QuZGlhZ3JhbU1hcmdpblgrIiAtIisoR3QuZGlhZ3JhbU1hcmdpblkreCkrIiAiK3YrIiAiKyhnK3gpKSxZLmRlYnVnKCJtb2RlbHM6IixwKX0sImRyYXciKSxjOT17ZHJhd1BlcnNvbk9yU3lzdGVtQXJyYXk6T1gsZHJhd0JvdW5kYXJ5OklYLHNldENvbmY6bDksZHJhdzpNQ2V9fSk7dmFyIElDZSxGWCx6WD1NKCgpPT57InVzZSBzdHJpY3QiO0lDZT1vKHQ9PmAucGVyc29uIHsKICAgIHN0cm9rZTogJHt0LnBlcnNvbkJvcmRlcn07CiAgICBmaWxsOiAke3QucGVyc29uQmtnfTsKICB9CmAsImdldFN0eWxlcyIpLEZYPUlDZX0pO3ZhciBHWD17fTt2cihHWCx7ZGlhZ3JhbTooKT0+T0NlfSk7dmFyIE9DZSwkWD1NKCgpPT57InVzZSBzdHJpY3QiO1VTKCk7dTcoKTtCWCgpO3pYKCk7T0NlPXtwYXJzZXI6b3osZGI6VHkscmVuZGVyZXI6Yzksc3R5bGVzOkZYLGluaXQ6bygoe2M0OnQsd3JhcDplfSk9PntjOS5zZXRDb25mKHQpLFR5LnNldFdyYXAoZSl9LCJpbml0Iil9fSk7ZnVuY3Rpb24gZjkoKXtyZXR1cm57YXN5bmM6ITEsYnJlYWtzOiExLGV4dGVuc2lvbnM6bnVsbCxnZm06ITAsaG9va3M6bnVsbCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNpbGVudDohMSx0b2tlbml6ZXI6bnVsbCx3YWxrVG9rZW5zOm51bGx9fWZ1bmN0aW9uIGpYKHQpe0lkPXR9ZnVuY3Rpb24gb28odCxlKXtpZihlKXtpZihLWC50ZXN0KHQpKXJldHVybiB0LnJlcGxhY2UoekNlLEhYKX1lbHNlIGlmKFFYLnRlc3QodCkpcmV0dXJuIHQucmVwbGFjZShHQ2UsSFgpO3JldHVybiB0fWZ1bmN0aW9uIFVDZSh0KXtyZXR1cm4gdC5yZXBsYWNlKFZDZSwoZSxyKT0+KHI9ci50b0xvd2VyQ2FzZSgpLHI9PT0iY29sb24iPyI6IjpyLmNoYXJBdCgwKT09PSIjIj9yLmNoYXJBdCgxKT09PSJ4Ij9TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KHIuc3Vic3RyaW5nKDIpLDE2KSk6U3RyaW5nLmZyb21DaGFyQ29kZSgrci5zdWJzdHJpbmcoMSkpOiIiKSl9ZnVuY3Rpb24gZm4odCxlKXtsZXQgcj10eXBlb2YgdD09InN0cmluZyI/dDp0LnNvdXJjZTtlPWV8fCIiO2xldCBuPXtyZXBsYWNlOm8oKGksYSk9PntsZXQgcz10eXBlb2YgYT09InN0cmluZyI/YTphLnNvdXJjZTtyZXR1cm4gcz1zLnJlcGxhY2UoSENlLCIkMSIpLHI9ci5yZXBsYWNlKGkscyksbn0sInJlcGxhY2UiKSxnZXRSZWdleDpvKCgpPT5uZXcgUmVnRXhwKHIsZSksImdldFJlZ2V4Iil9O3JldHVybiBufWZ1bmN0aW9uIFdYKHQpe3RyeXt0PWVuY29kZVVSSSh0KS5yZXBsYWNlKC8lMjUvZywiJSIpfWNhdGNoe3JldHVybiBudWxsfXJldHVybiB0fWZ1bmN0aW9uIFlYKHQsZSl7bGV0IHI9dC5yZXBsYWNlKC9cfC9nLChhLHMsbCk9PntsZXQgdT0hMSxoPXM7Zm9yKDstLWg+PTAmJmxbaF09PT0iXFwiOyl1PSF1O3JldHVybiB1PyJ8IjoiIHwifSksbj1yLnNwbGl0KC8gXHwvKSxpPTA7aWYoblswXS50cmltKCl8fG4uc2hpZnQoKSxuLmxlbmd0aD4wJiYhbltuLmxlbmd0aC0xXS50cmltKCkmJm4ucG9wKCksZSlpZihuLmxlbmd0aD5lKW4uc3BsaWNlKGUpO2Vsc2UgZm9yKDtuLmxlbmd0aDxlOyluLnB1c2goIiIpO2Zvcig7aTxuLmxlbmd0aDtpKyspbltpXT1uW2ldLnRyaW0oKS5yZXBsYWNlKC9cXFx8L2csInwiKTtyZXR1cm4gbn1mdW5jdGlvbiBrdih0LGUscil7bGV0IG49dC5sZW5ndGg7aWYobj09PTApcmV0dXJuIiI7bGV0IGk9MDtmb3IoO2k8bjspe2xldCBhPXQuY2hhckF0KG4taS0xKTtpZihhPT09ZSYmIXIpaSsrO2Vsc2UgaWYoYSE9PWUmJnIpaSsrO2Vsc2UgYnJlYWt9cmV0dXJuIHQuc2xpY2UoMCxuLWkpfWZ1bmN0aW9uIFdDZSh0LGUpe2lmKHQuaW5kZXhPZihlWzFdKT09PS0xKXJldHVybi0xO2xldCByPTA7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspaWYodFtuXT09PSJcXCIpbisrO2Vsc2UgaWYodFtuXT09PWVbMF0pcisrO2Vsc2UgaWYodFtuXT09PWVbMV0mJihyLS0scjwwKSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBxWCh0LGUscixuKXtsZXQgaT1lLmhyZWYsYT1lLnRpdGxlP29vKGUudGl0bGUpOm51bGwscz10WzFdLnJlcGxhY2UoL1xcKFtcW1xdXSkvZywiJDEiKTtpZih0WzBdLmNoYXJBdCgwKSE9PSIhIil7bi5zdGF0ZS5pbkxpbms9ITA7bGV0IGw9e3R5cGU6ImxpbmsiLHJhdzpyLGhyZWY6aSx0aXRsZTphLHRleHQ6cyx0b2tlbnM6bi5pbmxpbmVUb2tlbnMocyl9O3JldHVybiBuLnN0YXRlLmluTGluaz0hMSxsfXJldHVybnt0eXBlOiJpbWFnZSIscmF3OnIsaHJlZjppLHRpdGxlOmEsdGV4dDpvbyhzKX19ZnVuY3Rpb24gWUNlKHQsZSl7bGV0IHI9dC5tYXRjaCgvXihccyspKD86YGBgKS8pO2lmKHI9PT1udWxsKXJldHVybiBlO2xldCBuPXJbMV07cmV0dXJuIGUuc3BsaXQoYApgKS5tYXAoaT0+e2xldCBhPWkubWF0Y2goL15ccysvKTtpZihhPT09bnVsbClyZXR1cm4gaTtsZXRbc109YTtyZXR1cm4gcy5sZW5ndGg+PW4ubGVuZ3RoP2kuc2xpY2Uobi5sZW5ndGgpOml9KS5qb2luKGAKYCl9ZnVuY3Rpb24gZW4odCxlKXtyZXR1cm4gTWQucGFyc2UodCxlKX12YXIgSWQsS1gsekNlLFFYLEdDZSwkQ2UsSFgsVkNlLEhDZSxTdixnbSxxQ2UsWENlLGpDZSxBdixLQ2UsWlgsSlgsZDksUUNlLHA5LFpDZSxKQ2UsTTUsbTksZTdlLGVqLHQ3ZSxnOSxYWCxyN2UsbjdlLHRqLGk3ZSxyaixhN2UsX3YsczdlLG83ZSxsN2UsYzdlLHU3ZSxoN2UsZjdlLGQ3ZSxwN2UsUjUsbTdlLG5qLGlqLGc3ZSx5OSx5N2UsdTksdjdlLE41LEV2LE11LHltLEN2LEl1LG1tLGg5LE1kLFBFdCxCRXQsRkV0LHpFdCxHRXQsJEV0LFZFdCxhaj1NKCgpPT57InVzZSBzdHJpY3QiO28oZjksIl9nZXREZWZhdWx0cyIpO0lkPWY5KCk7byhqWCwiY2hhbmdlRGVmYXVsdHMiKTtLWD0vWyY8PiInXS8sekNlPW5ldyBSZWdFeHAoS1guc291cmNlLCJnIiksUVg9L1s8PiInXXwmKD8hKCNcZHsxLDd9fCNbWHhdW2EtZkEtRjAtOV17MSw2fXxcdyspOykvLEdDZT1uZXcgUmVnRXhwKFFYLnNvdXJjZSwiZyIpLCRDZT17IiYiOiImYW1wOyIsIjwiOiImbHQ7IiwiPiI6IiZndDsiLCciJzoiJnF1b3Q7IiwiJyI6IiYjMzk7In0sSFg9byh0PT4kQ2VbdF0sImdldEVzY2FwZVJlcGxhY2VtZW50Iik7byhvbywiZXNjYXBlJDEiKTtWQ2U9LyYoIyg/OlxkKyl8KD86I3hbMC05QS1GYS1mXSspfCg/Olx3KykpOz8vaWc7byhVQ2UsInVuZXNjYXBlIik7SENlPS8oXnxbXlxbXSlcXi9nO28oZm4sImVkaXQiKTtvKFdYLCJjbGVhblVybCIpO1N2PXtleGVjOm8oKCk9Pm51bGwsImV4ZWMiKX07byhZWCwic3BsaXRDZWxscyIpO28oa3YsInJ0cmltIik7byhXQ2UsImZpbmRDbG9zaW5nQnJhY2tldCIpO28ocVgsIm91dHB1dExpbmsiKTtvKFlDZSwiaW5kZW50Q29kZUNvbXBlbnNhdGlvbiIpO2dtPWNsYXNze3N0YXRpY3tvKHRoaXMsIl9Ub2tlbml6ZXIiKX1vcHRpb25zO3J1bGVzO2xleGVyO2NvbnN0cnVjdG9yKGUpe3RoaXMub3B0aW9ucz1lfHxJZH1zcGFjZShlKXtsZXQgcj10aGlzLnJ1bGVzLmJsb2NrLm5ld2xpbmUuZXhlYyhlKTtpZihyJiZyWzBdLmxlbmd0aD4wKXJldHVybnt0eXBlOiJzcGFjZSIscmF3OnJbMF19fWNvZGUoZSl7bGV0IHI9dGhpcy5ydWxlcy5ibG9jay5jb2RlLmV4ZWMoZSk7aWYocil7bGV0IG49clswXS5yZXBsYWNlKC9eIHsxLDR9L2dtLCIiKTtyZXR1cm57dHlwZToiY29kZSIscmF3OnJbMF0sY29kZUJsb2NrU3R5bGU6ImluZGVudGVkIix0ZXh0OnRoaXMub3B0aW9ucy5wZWRhbnRpYz9uOmt2KG4sYApgKX19fWZlbmNlcyhlKXtsZXQgcj10aGlzLnJ1bGVzLmJsb2NrLmZlbmNlcy5leGVjKGUpO2lmKHIpe2xldCBuPXJbMF0saT1ZQ2UobixyWzNdfHwiIik7cmV0dXJue3R5cGU6ImNvZGUiLHJhdzpuLGxhbmc6clsyXT9yWzJdLnRyaW0oKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLCIkMSIpOnJbMl0sdGV4dDppfX19aGVhZGluZyhlKXtsZXQgcj10aGlzLnJ1bGVzLmJsb2NrLmhlYWRpbmcuZXhlYyhlKTtpZihyKXtsZXQgbj1yWzJdLnRyaW0oKTtpZigvIyQvLnRlc3Qobikpe2xldCBpPWt2KG4sIiMiKTsodGhpcy5vcHRpb25zLnBlZGFudGljfHwhaXx8LyAkLy50ZXN0KGkpKSYmKG49aS50cmltKCkpfXJldHVybnt0eXBlOiJoZWFkaW5nIixyYXc6clswXSxkZXB0aDpyWzFdLmxlbmd0aCx0ZXh0Om4sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKG4pfX19aHIoZSl7bGV0IHI9dGhpcy5ydWxlcy5ibG9jay5oci5leGVjKGUpO2lmKHIpcmV0dXJue3R5cGU6ImhyIixyYXc6a3YoclswXSxgCmApfX1ibG9ja3F1b3RlKGUpe2xldCByPXRoaXMucnVsZXMuYmxvY2suYmxvY2txdW90ZS5leGVjKGUpO2lmKHIpe2xldCBuPWt2KHJbMF0sYApgKS5zcGxpdChgCmApLGk9IiIsYT0iIixzPVtdO2Zvcig7bi5sZW5ndGg+MDspe2xldCBsPSExLHU9W10saDtmb3IoaD0wO2g8bi5sZW5ndGg7aCsrKWlmKC9eIHswLDN9Pi8udGVzdChuW2hdKSl1LnB1c2gobltoXSksbD0hMDtlbHNlIGlmKCFsKXUucHVzaChuW2hdKTtlbHNlIGJyZWFrO249bi5zbGljZShoKTtsZXQgZj11LmpvaW4oYApgKSxkPWYucmVwbGFjZSgvXG4gezAsM30oKD86PSt8LSspICopKD89XG58JCkvZyxgCiAgICAkMWApLnJlcGxhY2UoL14gezAsM30+WyBcdF0/L2dtLCIiKTtpPWk/YCR7aX0KJHtmfWA6ZixhPWE/YCR7YX0KJHtkfWA6ZDtsZXQgcD10aGlzLmxleGVyLnN0YXRlLnRvcDtpZih0aGlzLmxleGVyLnN0YXRlLnRvcD0hMCx0aGlzLmxleGVyLmJsb2NrVG9rZW5zKGQscywhMCksdGhpcy5sZXhlci5zdGF0ZS50b3A9cCxuLmxlbmd0aD09PTApYnJlYWs7bGV0IG09c1tzLmxlbmd0aC0xXTtpZihtPy50eXBlPT09ImNvZGUiKWJyZWFrO2lmKG0/LnR5cGU9PT0iYmxvY2txdW90ZSIpe2xldCBnPW0seT1nLnJhdytgCmArbi5qb2luKGAKYCksdj10aGlzLmJsb2NrcXVvdGUoeSk7c1tzLmxlbmd0aC0xXT12LGk9aS5zdWJzdHJpbmcoMCxpLmxlbmd0aC1nLnJhdy5sZW5ndGgpK3YucmF3LGE9YS5zdWJzdHJpbmcoMCxhLmxlbmd0aC1nLnRleHQubGVuZ3RoKSt2LnRleHQ7YnJlYWt9ZWxzZSBpZihtPy50eXBlPT09Imxpc3QiKXtsZXQgZz1tLHk9Zy5yYXcrYApgK24uam9pbihgCmApLHY9dGhpcy5saXN0KHkpO3Nbcy5sZW5ndGgtMV09dixpPWkuc3Vic3RyaW5nKDAsaS5sZW5ndGgtbS5yYXcubGVuZ3RoKSt2LnJhdyxhPWEuc3Vic3RyaW5nKDAsYS5sZW5ndGgtZy5yYXcubGVuZ3RoKSt2LnJhdyxuPXkuc3Vic3RyaW5nKHNbcy5sZW5ndGgtMV0ucmF3Lmxlbmd0aCkuc3BsaXQoYApgKTtjb250aW51ZX19cmV0dXJue3R5cGU6ImJsb2NrcXVvdGUiLHJhdzppLHRva2VuczpzLHRleHQ6YX19fWxpc3QoZSl7bGV0IHI9dGhpcy5ydWxlcy5ibG9jay5saXN0LmV4ZWMoZSk7aWYocil7bGV0IG49clsxXS50cmltKCksaT1uLmxlbmd0aD4xLGE9e3R5cGU6Imxpc3QiLHJhdzoiIixvcmRlcmVkOmksc3RhcnQ6aT8rbi5zbGljZSgwLC0xKToiIixsb29zZTohMSxpdGVtczpbXX07bj1pP2BcXGR7MSw5fVxcJHtuLnNsaWNlKC0xKX1gOmBcXCR7bn1gLHRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKG49aT9uOiJbKistXSIpO2xldCBzPW5ldyBSZWdFeHAoYF4oIHswLDN9JHtufSkoKD86WwkgXVteXFxuXSopPyg/OlxcbnwkKSlgKSxsPSExO2Zvcig7ZTspe2xldCB1PSExLGg9IiIsZj0iIjtpZighKHI9cy5leGVjKGUpKXx8dGhpcy5ydWxlcy5ibG9jay5oci50ZXN0KGUpKWJyZWFrO2g9clswXSxlPWUuc3Vic3RyaW5nKGgubGVuZ3RoKTtsZXQgZD1yWzJdLnNwbGl0KGAKYCwxKVswXS5yZXBsYWNlKC9eXHQrLyx4PT4iICIucmVwZWF0KDMqeC5sZW5ndGgpKSxwPWUuc3BsaXQoYApgLDEpWzBdLG09IWQudHJpbSgpLGc9MDtpZih0aGlzLm9wdGlvbnMucGVkYW50aWM/KGc9MixmPWQudHJpbVN0YXJ0KCkpOm0/Zz1yWzFdLmxlbmd0aCsxOihnPXJbMl0uc2VhcmNoKC9bXiBdLyksZz1nPjQ/MTpnLGY9ZC5zbGljZShnKSxnKz1yWzFdLmxlbmd0aCksbSYmL14gKiQvLnRlc3QocCkmJihoKz1wK2AKYCxlPWUuc3Vic3RyaW5nKHAubGVuZ3RoKzEpLHU9ITApLCF1KXtsZXQgeD1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyxnLTEpfX0oPzpbKistXXxcXGR7MSw5fVsuKV0pKCg/OlsgCV1bXlxcbl0qKT8oPzpcXG58JCkpYCksYj1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyxnLTEpfX0oKD86LSAqKXszLH18KD86XyAqKXszLH18KD86XFwqICopezMsfSkoPzpcXG4rfCQpYCksdz1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyxnLTEpfX0oPzpcYFxgXGB8fn5+KWApLF89bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsZy0xKX19I2ApO2Zvcig7ZTspe2xldCBUPWUuc3BsaXQoYApgLDEpWzBdO2lmKHA9VCx0aGlzLm9wdGlvbnMucGVkYW50aWMmJihwPXAucmVwbGFjZSgvXiB7MSw0fSg/PSggezR9KSpbXiBdKS9nLCIgICIpKSx3LnRlc3QocCl8fF8udGVzdChwKXx8eC50ZXN0KHApfHxiLnRlc3QoZSkpYnJlYWs7aWYocC5zZWFyY2goL1teIF0vKT49Z3x8IXAudHJpbSgpKWYrPWAKYCtwLnNsaWNlKGcpO2Vsc2V7aWYobXx8ZC5zZWFyY2goL1teIF0vKT49NHx8dy50ZXN0KGQpfHxfLnRlc3QoZCl8fGIudGVzdChkKSlicmVhaztmKz1gCmArcH0hbSYmIXAudHJpbSgpJiYobT0hMCksaCs9VCtgCmAsZT1lLnN1YnN0cmluZyhULmxlbmd0aCsxKSxkPXAuc2xpY2UoZyl9fWEubG9vc2V8fChsP2EubG9vc2U9ITA6L1xuICpcbiAqJC8udGVzdChoKSYmKGw9ITApKTtsZXQgeT1udWxsLHY7dGhpcy5vcHRpb25zLmdmbSYmKHk9L15cW1sgeFhdXF0gLy5leGVjKGYpLHkmJih2PXlbMF0hPT0iWyBdICIsZj1mLnJlcGxhY2UoL15cW1sgeFhdXF0gKy8sIiIpKSksYS5pdGVtcy5wdXNoKHt0eXBlOiJsaXN0X2l0ZW0iLHJhdzpoLHRhc2s6ISF5LGNoZWNrZWQ6dixsb29zZTohMSx0ZXh0OmYsdG9rZW5zOltdfSksYS5yYXcrPWh9YS5pdGVtc1thLml0ZW1zLmxlbmd0aC0xXS5yYXc9YS5pdGVtc1thLml0ZW1zLmxlbmd0aC0xXS5yYXcudHJpbUVuZCgpLGEuaXRlbXNbYS5pdGVtcy5sZW5ndGgtMV0udGV4dD1hLml0ZW1zW2EuaXRlbXMubGVuZ3RoLTFdLnRleHQudHJpbUVuZCgpLGEucmF3PWEucmF3LnRyaW1FbmQoKTtmb3IobGV0IHU9MDt1PGEuaXRlbXMubGVuZ3RoO3UrKylpZih0aGlzLmxleGVyLnN0YXRlLnRvcD0hMSxhLml0ZW1zW3VdLnRva2Vucz10aGlzLmxleGVyLmJsb2NrVG9rZW5zKGEuaXRlbXNbdV0udGV4dCxbXSksIWEubG9vc2Upe2xldCBoPWEuaXRlbXNbdV0udG9rZW5zLmZpbHRlcihkPT5kLnR5cGU9PT0ic3BhY2UiKSxmPWgubGVuZ3RoPjAmJmguc29tZShkPT4vXG4uKlxuLy50ZXN0KGQucmF3KSk7YS5sb29zZT1mfWlmKGEubG9vc2UpZm9yKGxldCB1PTA7dTxhLml0ZW1zLmxlbmd0aDt1KyspYS5pdGVtc1t1XS5sb29zZT0hMDtyZXR1cm4gYX19aHRtbChlKXtsZXQgcj10aGlzLnJ1bGVzLmJsb2NrLmh0bWwuZXhlYyhlKTtpZihyKXJldHVybnt0eXBlOiJodG1sIixibG9jazohMCxyYXc6clswXSxwcmU6clsxXT09PSJwcmUifHxyWzFdPT09InNjcmlwdCJ8fHJbMV09PT0ic3R5bGUiLHRleHQ6clswXX19ZGVmKGUpe2xldCByPXRoaXMucnVsZXMuYmxvY2suZGVmLmV4ZWMoZSk7aWYocil7bGV0IG49clsxXS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xzKy9nLCIgIiksaT1yWzJdP3JbMl0ucmVwbGFjZSgvXjwoLiopPiQvLCIkMSIpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24sIiQxIik6IiIsYT1yWzNdP3JbM10uc3Vic3RyaW5nKDEsclszXS5sZW5ndGgtMSkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbiwiJDEiKTpyWzNdO3JldHVybnt0eXBlOiJkZWYiLHRhZzpuLHJhdzpyWzBdLGhyZWY6aSx0aXRsZTphfX19dGFibGUoZSl7bGV0IHI9dGhpcy5ydWxlcy5ibG9jay50YWJsZS5leGVjKGUpO2lmKCFyfHwhL1s6fF0vLnRlc3QoclsyXSkpcmV0dXJuO2xldCBuPVlYKHJbMV0pLGk9clsyXS5yZXBsYWNlKC9eXHx8XHwgKiQvZywiIikuc3BsaXQoInwiKSxhPXJbM10mJnJbM10udHJpbSgpP3JbM10ucmVwbGFjZSgvXG5bIFx0XSokLywiIikuc3BsaXQoYApgKTpbXSxzPXt0eXBlOiJ0YWJsZSIscmF3OnJbMF0saGVhZGVyOltdLGFsaWduOltdLHJvd3M6W119O2lmKG4ubGVuZ3RoPT09aS5sZW5ndGgpe2ZvcihsZXQgbCBvZiBpKS9eICotKzogKiQvLnRlc3QobCk/cy5hbGlnbi5wdXNoKCJyaWdodCIpOi9eICo6LSs6ICokLy50ZXN0KGwpP3MuYWxpZ24ucHVzaCgiY2VudGVyIik6L14gKjotKyAqJC8udGVzdChsKT9zLmFsaWduLnB1c2goImxlZnQiKTpzLmFsaWduLnB1c2gobnVsbCk7Zm9yKGxldCBsPTA7bDxuLmxlbmd0aDtsKyspcy5oZWFkZXIucHVzaCh7dGV4dDpuW2xdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShuW2xdKSxoZWFkZXI6ITAsYWxpZ246cy5hbGlnbltsXX0pO2ZvcihsZXQgbCBvZiBhKXMucm93cy5wdXNoKFlYKGwscy5oZWFkZXIubGVuZ3RoKS5tYXAoKHUsaCk9Pih7dGV4dDp1LHRva2Vuczp0aGlzLmxleGVyLmlubGluZSh1KSxoZWFkZXI6ITEsYWxpZ246cy5hbGlnbltoXX0pKSk7cmV0dXJuIHN9fWxoZWFkaW5nKGUpe2xldCByPXRoaXMucnVsZXMuYmxvY2subGhlYWRpbmcuZXhlYyhlKTtpZihyKXJldHVybnt0eXBlOiJoZWFkaW5nIixyYXc6clswXSxkZXB0aDpyWzJdLmNoYXJBdCgwKT09PSI9Ij8xOjIsdGV4dDpyWzFdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShyWzFdKX19cGFyYWdyYXBoKGUpe2xldCByPXRoaXMucnVsZXMuYmxvY2sucGFyYWdyYXBoLmV4ZWMoZSk7aWYocil7bGV0IG49clsxXS5jaGFyQXQoclsxXS5sZW5ndGgtMSk9PT1gCmA/clsxXS5zbGljZSgwLC0xKTpyWzFdO3JldHVybnt0eXBlOiJwYXJhZ3JhcGgiLHJhdzpyWzBdLHRleHQ6bix0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUobil9fX10ZXh0KGUpe2xldCByPXRoaXMucnVsZXMuYmxvY2sudGV4dC5leGVjKGUpO2lmKHIpcmV0dXJue3R5cGU6InRleHQiLHJhdzpyWzBdLHRleHQ6clswXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUoclswXSl9fWVzY2FwZShlKXtsZXQgcj10aGlzLnJ1bGVzLmlubGluZS5lc2NhcGUuZXhlYyhlKTtpZihyKXJldHVybnt0eXBlOiJlc2NhcGUiLHJhdzpyWzBdLHRleHQ6b28oclsxXSl9fXRhZyhlKXtsZXQgcj10aGlzLnJ1bGVzLmlubGluZS50YWcuZXhlYyhlKTtpZihyKXJldHVybiF0aGlzLmxleGVyLnN0YXRlLmluTGluayYmL148YSAvaS50ZXN0KHJbMF0pP3RoaXMubGV4ZXIuc3RhdGUuaW5MaW5rPSEwOnRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rJiYvXjxcL2E+L2kudGVzdChyWzBdKSYmKHRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rPSExKSwhdGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrJiYvXjwocHJlfGNvZGV8a2JkfHNjcmlwdCkoXHN8PikvaS50ZXN0KHJbMF0pP3RoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz0hMDp0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2smJi9ePFwvKHByZXxjb2RlfGtiZHxzY3JpcHQpKFxzfD4pL2kudGVzdChyWzBdKSYmKHRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz0hMSkse3R5cGU6Imh0bWwiLHJhdzpyWzBdLGluTGluazp0aGlzLmxleGVyLnN0YXRlLmluTGluayxpblJhd0Jsb2NrOnRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayxibG9jazohMSx0ZXh0OnJbMF19fWxpbmsoZSl7bGV0IHI9dGhpcy5ydWxlcy5pbmxpbmUubGluay5leGVjKGUpO2lmKHIpe2xldCBuPXJbMl0udHJpbSgpO2lmKCF0aGlzLm9wdGlvbnMucGVkYW50aWMmJi9ePC8udGVzdChuKSl7aWYoIS8+JC8udGVzdChuKSlyZXR1cm47bGV0IHM9a3Yobi5zbGljZSgwLC0xKSwiXFwiKTtpZigobi5sZW5ndGgtcy5sZW5ndGgpJTI9PT0wKXJldHVybn1lbHNle2xldCBzPVdDZShyWzJdLCIoKSIpO2lmKHM+LTEpe2xldCB1PShyWzBdLmluZGV4T2YoIiEiKT09PTA/NTo0KStyWzFdLmxlbmd0aCtzO3JbMl09clsyXS5zdWJzdHJpbmcoMCxzKSxyWzBdPXJbMF0uc3Vic3RyaW5nKDAsdSkudHJpbSgpLHJbM109IiJ9fWxldCBpPXJbMl0sYT0iIjtpZih0aGlzLm9wdGlvbnMucGVkYW50aWMpe2xldCBzPS9eKFteJyJdKlteXHNdKVxzKyhbJyJdKSguKilcMi8uZXhlYyhpKTtzJiYoaT1zWzFdLGE9c1szXSl9ZWxzZSBhPXJbM10/clszXS5zbGljZSgxLC0xKToiIjtyZXR1cm4gaT1pLnRyaW0oKSwvXjwvLnRlc3QoaSkmJih0aGlzLm9wdGlvbnMucGVkYW50aWMmJiEvPiQvLnRlc3Qobik/aT1pLnNsaWNlKDEpOmk9aS5zbGljZSgxLC0xKSkscVgocix7aHJlZjppJiZpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24sIiQxIiksdGl0bGU6YSYmYS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLCIkMSIpfSxyWzBdLHRoaXMubGV4ZXIpfX1yZWZsaW5rKGUscil7bGV0IG47aWYoKG49dGhpcy5ydWxlcy5pbmxpbmUucmVmbGluay5leGVjKGUpKXx8KG49dGhpcy5ydWxlcy5pbmxpbmUubm9saW5rLmV4ZWMoZSkpKXtsZXQgaT0oblsyXXx8blsxXSkucmVwbGFjZSgvXHMrL2csIiAiKSxhPXJbaS50b0xvd2VyQ2FzZSgpXTtpZighYSl7bGV0IHM9blswXS5jaGFyQXQoMCk7cmV0dXJue3R5cGU6InRleHQiLHJhdzpzLHRleHQ6c319cmV0dXJuIHFYKG4sYSxuWzBdLHRoaXMubGV4ZXIpfX1lbVN0cm9uZyhlLHIsbj0iIil7bGV0IGk9dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmdMRGVsaW0uZXhlYyhlKTtpZighaXx8aVszXSYmbi5tYXRjaCgvW1xwe0x9XHB7Tn1dL3UpKXJldHVybjtpZighKGlbMV18fGlbMl18fCIiKXx8IW58fHRoaXMucnVsZXMuaW5saW5lLnB1bmN0dWF0aW9uLmV4ZWMobikpe2xldCBzPVsuLi5pWzBdXS5sZW5ndGgtMSxsLHUsaD1zLGY9MCxkPWlbMF1bMF09PT0iKiI/dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmdSRGVsaW1Bc3Q6dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmdSRGVsaW1VbmQ7Zm9yKGQubGFzdEluZGV4PTAscj1yLnNsaWNlKC0xKmUubGVuZ3RoK3MpOyhpPWQuZXhlYyhyKSkhPW51bGw7KXtpZihsPWlbMV18fGlbMl18fGlbM118fGlbNF18fGlbNV18fGlbNl0sIWwpY29udGludWU7aWYodT1bLi4ubF0ubGVuZ3RoLGlbM118fGlbNF0pe2grPXU7Y29udGludWV9ZWxzZSBpZigoaVs1XXx8aVs2XSkmJnMlMyYmISgocyt1KSUzKSl7Zis9dTtjb250aW51ZX1pZihoLT11LGg+MCljb250aW51ZTt1PU1hdGgubWluKHUsdStoK2YpO2xldCBwPVsuLi5pWzBdXVswXS5sZW5ndGgsbT1lLnNsaWNlKDAscytpLmluZGV4K3ArdSk7aWYoTWF0aC5taW4ocyx1KSUyKXtsZXQgeT1tLnNsaWNlKDEsLTEpO3JldHVybnt0eXBlOiJlbSIscmF3Om0sdGV4dDp5LHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2Vucyh5KX19bGV0IGc9bS5zbGljZSgyLC0yKTtyZXR1cm57dHlwZToic3Ryb25nIixyYXc6bSx0ZXh0OmcsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKGcpfX19fWNvZGVzcGFuKGUpe2xldCByPXRoaXMucnVsZXMuaW5saW5lLmNvZGUuZXhlYyhlKTtpZihyKXtsZXQgbj1yWzJdLnJlcGxhY2UoL1xuL2csIiAiKSxpPS9bXiBdLy50ZXN0KG4pLGE9L14gLy50ZXN0KG4pJiYvICQvLnRlc3Qobik7cmV0dXJuIGkmJmEmJihuPW4uc3Vic3RyaW5nKDEsbi5sZW5ndGgtMSkpLG49b28obiwhMCkse3R5cGU6ImNvZGVzcGFuIixyYXc6clswXSx0ZXh0Om59fX1icihlKXtsZXQgcj10aGlzLnJ1bGVzLmlubGluZS5ici5leGVjKGUpO2lmKHIpcmV0dXJue3R5cGU6ImJyIixyYXc6clswXX19ZGVsKGUpe2xldCByPXRoaXMucnVsZXMuaW5saW5lLmRlbC5leGVjKGUpO2lmKHIpcmV0dXJue3R5cGU6ImRlbCIscmF3OnJbMF0sdGV4dDpyWzJdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhyWzJdKX19YXV0b2xpbmsoZSl7bGV0IHI9dGhpcy5ydWxlcy5pbmxpbmUuYXV0b2xpbmsuZXhlYyhlKTtpZihyKXtsZXQgbixpO3JldHVybiByWzJdPT09IkAiPyhuPW9vKHJbMV0pLGk9Im1haWx0bzoiK24pOihuPW9vKHJbMV0pLGk9bikse3R5cGU6ImxpbmsiLHJhdzpyWzBdLHRleHQ6bixocmVmOmksdG9rZW5zOlt7dHlwZToidGV4dCIscmF3Om4sdGV4dDpufV19fX11cmwoZSl7bGV0IHI7aWYocj10aGlzLnJ1bGVzLmlubGluZS51cmwuZXhlYyhlKSl7bGV0IG4saTtpZihyWzJdPT09IkAiKW49b28oclswXSksaT0ibWFpbHRvOiIrbjtlbHNle2xldCBhO2RvIGE9clswXSxyWzBdPXRoaXMucnVsZXMuaW5saW5lLl9iYWNrcGVkYWwuZXhlYyhyWzBdKT8uWzBdPz8iIjt3aGlsZShhIT09clswXSk7bj1vbyhyWzBdKSxyWzFdPT09Ind3dy4iP2k9Imh0dHA6Ly8iK3JbMF06aT1yWzBdfXJldHVybnt0eXBlOiJsaW5rIixyYXc6clswXSx0ZXh0Om4saHJlZjppLHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzpuLHRleHQ6bn1dfX19aW5saW5lVGV4dChlKXtsZXQgcj10aGlzLnJ1bGVzLmlubGluZS50ZXh0LmV4ZWMoZSk7aWYocil7bGV0IG47cmV0dXJuIHRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz9uPXJbMF06bj1vbyhyWzBdKSx7dHlwZToidGV4dCIscmF3OnJbMF0sdGV4dDpufX19fSxxQ2U9L14oPzogKig/OlxufCQpKSsvLFhDZT0vXiggezR9W15cbl0rKD86XG4oPzogKig/OlxufCQpKSopPykrLyxqQ2U9L14gezAsM30oYHszLH0oPz1bXmBcbl0qKD86XG58JCkpfH57Myx9KShbXlxuXSopKD86XG58JCkoPzp8KFtcc1xTXSo/KSg/OlxufCQpKSg/OiB7MCwzfVwxW35gXSogKig/PVxufCQpfCQpLyxBdj0vXiB7MCwzfSgoPzotW1x0IF0qKXszLH18KD86X1sgXHRdKil7Myx9fCg/OlwqWyBcdF0qKXszLH0pKD86XG4rfCQpLyxLQ2U9L14gezAsM30oI3sxLDZ9KSg/PVxzfCQpKC4qKSg/OlxuK3wkKS8sWlg9Lyg/OlsqKy1dfFxkezEsOX1bLildKS8sSlg9Zm4oL14oPyFidWxsIHxibG9ja0NvZGV8ZmVuY2VzfGJsb2NrcXVvdGV8aGVhZGluZ3xodG1sKSgoPzoufFxuKD8hXHMqP1xufGJ1bGwgfGJsb2NrQ29kZXxmZW5jZXN8YmxvY2txdW90ZXxoZWFkaW5nfGh0bWwpKSs/KVxuIHswLDN9KD0rfC0rKSAqKD86XG4rfCQpLykucmVwbGFjZSgvYnVsbC9nLFpYKS5yZXBsYWNlKC9ibG9ja0NvZGUvZywvIHs0fS8pLnJlcGxhY2UoL2ZlbmNlcy9nLC8gezAsM30oPzpgezMsfXx+ezMsfSkvKS5yZXBsYWNlKC9ibG9ja3F1b3RlL2csLyB7MCwzfT4vKS5yZXBsYWNlKC9oZWFkaW5nL2csLyB7MCwzfSN7MSw2fS8pLnJlcGxhY2UoL2h0bWwvZywvIHswLDN9PFteXG4+XSs+XG4vKS5nZXRSZWdleCgpLGQ5PS9eKFteXG5dKyg/OlxuKD8haHJ8aGVhZGluZ3xsaGVhZGluZ3xibG9ja3F1b3RlfGZlbmNlc3xsaXN0fGh0bWx8dGFibGV8ICtcbilbXlxuXSspKikvLFFDZT0vXlteXG5dKy8scDk9Lyg/IVxzKlxdKSg/OlxcLnxbXlxbXF1cXF0pKy8sWkNlPWZuKC9eIHswLDN9XFsobGFiZWwpXF06ICooPzpcbiAqKT8oW148XHNdW15cc10qfDwuKj8+KSg/Oig/OiArKD86XG4gKik/fCAqXG4gKikodGl0bGUpKT8gKig/OlxuK3wkKS8pLnJlcGxhY2UoImxhYmVsIixwOSkucmVwbGFjZSgidGl0bGUiLC8oPzoiKD86XFwiP3xbXiJcXF0pKiJ8J1teJ1xuXSooPzpcblteJ1xuXSspKlxuPyd8XChbXigpXSpcKSkvKS5nZXRSZWdleCgpLEpDZT1mbigvXiggezAsM31idWxsKShbIFx0XVteXG5dKz8pPyg/OlxufCQpLykucmVwbGFjZSgvYnVsbC9nLFpYKS5nZXRSZWdleCgpLE01PSJhZGRyZXNzfGFydGljbGV8YXNpZGV8YmFzZXxiYXNlZm9udHxibG9ja3F1b3RlfGJvZHl8Y2FwdGlvbnxjZW50ZXJ8Y29sfGNvbGdyb3VwfGRkfGRldGFpbHN8ZGlhbG9nfGRpcnxkaXZ8ZGx8ZHR8ZmllbGRzZXR8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aFsxLTZdfGhlYWR8aGVhZGVyfGhyfGh0bWx8aWZyYW1lfGxlZ2VuZHxsaXxsaW5rfG1haW58bWVudXxtZW51aXRlbXxtZXRhfG5hdnxub2ZyYW1lc3xvbHxvcHRncm91cHxvcHRpb258cHxwYXJhbXxzZWFyY2h8c2VjdGlvbnxzdW1tYXJ5fHRhYmxlfHRib2R5fHRkfHRmb290fHRofHRoZWFkfHRpdGxlfHRyfHRyYWNrfHVsIixtOT0vPCEtLSg/Oi0/PnxbXHNcU10qPyg/Oi0tPnwkKSkvLGU3ZT1mbigiXiB7MCwzfSg/Ojwoc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSlbXFxzPl1bXFxzXFxTXSo/KD86PC9cXDE+W15cXG5dKlxcbit8JCl8Y29tbWVudFteXFxuXSooXFxuK3wkKXw8XFw/W1xcc1xcU10qPyg/OlxcPz5cXG4qfCQpfDwhW0EtWl1bXFxzXFxTXSo/KD86Plxcbip8JCl8PCFcXFtDREFUQVxcW1tcXHNcXFNdKj8oPzpcXF1cXF0+XFxuKnwkKXw8Lz8odGFnKSg/OiArfFxcbnwvPz4pW1xcc1xcU10qPyg/Oig/OlxcbiAqKStcXG58JCl8PCg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpKFthLXpdW1xcdy1dKikoPzphdHRyaWJ1dGUpKj8gKi8/Pig/PVsgXFx0XSooPzpcXG58JCkpW1xcc1xcU10qPyg/Oig/OlxcbiAqKStcXG58JCl8PC8oPyFzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKVthLXpdW1xcdy1dKlxccyo+KD89WyBcXHRdKig/OlxcbnwkKSlbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKSkiLCJpIikucmVwbGFjZSgiY29tbWVudCIsbTkpLnJlcGxhY2UoInRhZyIsTTUpLnJlcGxhY2UoImF0dHJpYnV0ZSIsLyArW2EtekEtWjpfXVtcdy46LV0qKD86ICo9ICoiW14iXG5dKiJ8ICo9IConW14nXG5dKid8ICo9ICpbXlxzIic9PD5gXSspPy8pLmdldFJlZ2V4KCksZWo9Zm4oZDkpLnJlcGxhY2UoImhyIixBdikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSg/Olxcc3wkKSIpLnJlcGxhY2UoInxsaGVhZGluZyIsIiIpLnJlcGxhY2UoInx0YWJsZSIsIiIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixNNSkuZ2V0UmVnZXgoKSx0N2U9Zm4oL14oIHswLDN9PiA/KHBhcmFncmFwaHxbXlxuXSopKD86XG58JCkpKy8pLnJlcGxhY2UoInBhcmFncmFwaCIsZWopLmdldFJlZ2V4KCksZzk9e2Jsb2NrcXVvdGU6dDdlLGNvZGU6WENlLGRlZjpaQ2UsZmVuY2VzOmpDZSxoZWFkaW5nOktDZSxocjpBdixodG1sOmU3ZSxsaGVhZGluZzpKWCxsaXN0OkpDZSxuZXdsaW5lOnFDZSxwYXJhZ3JhcGg6ZWosdGFibGU6U3YsdGV4dDpRQ2V9LFhYPWZuKCJeICooW15cXG4gXS4qKVxcbiB7MCwzfSgoPzpcXHwgKik/Oj8tKzo/ICooPzpcXHwgKjo/LSs6PyAqKSooPzpcXHwgKik/KSg/OlxcbigoPzooPyEgKlxcbnxocnxoZWFkaW5nfGJsb2NrcXVvdGV8Y29kZXxmZW5jZXN8bGlzdHxodG1sKS4qKD86XFxufCQpKSopXFxuKnwkKSIpLnJlcGxhY2UoImhyIixBdikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSg/Olxcc3wkKSIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiY29kZSIsIiB7NH1bXlxcbl0iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLE01KS5nZXRSZWdleCgpLHI3ZT17Li4uZzksdGFibGU6WFgscGFyYWdyYXBoOmZuKGQ5KS5yZXBsYWNlKCJociIsQXYpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0oPzpcXHN8JCkiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIiKS5yZXBsYWNlKCJ0YWJsZSIsWFgpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixNNSkuZ2V0UmVnZXgoKX0sbjdlPXsuLi5nOSxodG1sOmZuKGBeICooPzpjb21tZW50ICooPzpcXG58XFxzKiQpfDwodGFnKVtcXHNcXFNdKz88L1xcMT4gKig/OlxcbnsyLH18XFxzKiQpfDx0YWcoPzoiW14iXSoifCdbXiddKid8XFxzW14nIi8+XFxzXSopKj8vPz4gKig/OlxcbnsyLH18XFxzKiQpKWApLnJlcGxhY2UoImNvbW1lbnQiLG05KS5yZXBsYWNlKC90YWcvZywiKD8hKD86YXxlbXxzdHJvbmd8c21hbGx8c3xjaXRlfHF8ZGZufGFiYnJ8ZGF0YXx0aW1lfGNvZGV8dmFyfHNhbXB8a2JkfHN1YnxzdXB8aXxifHV8bWFya3xydWJ5fHJ0fHJwfGJkaXxiZG98c3Bhbnxicnx3YnJ8aW5zfGRlbHxpbWcpXFxiKVxcdysoPyE6fFteXFx3XFxzQF0qQClcXGIiKS5nZXRSZWdleCgpLGRlZjovXiAqXFsoW15cXV0rKVxdOiAqPD8oW15ccz5dKyk+Pyg/OiArKFsiKF1bXlxuXStbIildKSk/ICooPzpcbit8JCkvLGhlYWRpbmc6L14oI3sxLDZ9KSguKikoPzpcbit8JCkvLGZlbmNlczpTdixsaGVhZGluZzovXiguKz8pXG4gezAsM30oPSt8LSspICooPzpcbit8JCkvLHBhcmFncmFwaDpmbihkOSkucmVwbGFjZSgiaHIiLEF2KS5yZXBsYWNlKCJoZWFkaW5nIixgICojezEsNn0gKlteCl1gKS5yZXBsYWNlKCJsaGVhZGluZyIsSlgpLnJlcGxhY2UoInx0YWJsZSIsIiIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgifGZlbmNlcyIsIiIpLnJlcGxhY2UoInxsaXN0IiwiIikucmVwbGFjZSgifGh0bWwiLCIiKS5yZXBsYWNlKCJ8dGFnIiwiIikuZ2V0UmVnZXgoKX0sdGo9L15cXChbISIjJCUmJygpKissXC0uLzo7PD0+P0BcW1xdXFxeX2B7fH1+XSkvLGk3ZT0vXihgKykoW15gXXxbXmBdW1xzXFNdKj9bXmBdKVwxKD8hYCkvLHJqPS9eKCB7Mix9fFxcKVxuKD8hXHMqJCkvLGE3ZT0vXihgK3xbXmBdKSg/Oig/PSB7Mix9XG4pfFtcc1xTXSo/KD86KD89W1xcPCFcW2AqX118XGJffCQpfFteIF0oPz0gezIsfVxuKSkpLyxfdj0iXFxwe1B9XFxwe1N9IixzN2U9Zm4oL14oKD8hWypfXSlbXHNwdW5jdHVhdGlvbl0pLywidSIpLnJlcGxhY2UoL3B1bmN0dWF0aW9uL2csX3YpLmdldFJlZ2V4KCksbzdlPS9cW1teW1xdXSo/XF1cKFteXChcKV0qP1wpfGBbXmBdKj9gfDxbXjw+XSo/Pi9nLGw3ZT1mbigvXig/OlwqKyg/OigoPyFcKilbcHVuY3RdKXxbXlxzKl0pKXxeXysoPzooKD8hXylbcHVuY3RdKXwoW15cc19dKSkvLCJ1IikucmVwbGFjZSgvcHVuY3QvZyxfdikuZ2V0UmVnZXgoKSxjN2U9Zm4oIl5bXl8qXSo/X19bXl8qXSo/XFwqW15fKl0qPyg/PV9fKXxbXipdKyg/PVteKl0pfCg/IVxcKilbcHVuY3RdKFxcKispKD89W1xcc118JCl8W15wdW5jdFxcc10oXFwqKykoPyFcXCopKD89W3B1bmN0XFxzXXwkKXwoPyFcXCopW3B1bmN0XFxzXShcXCorKSg/PVtecHVuY3RcXHNdKXxbXFxzXShcXCorKSg/IVxcKikoPz1bcHVuY3RdKXwoPyFcXCopW3B1bmN0XShcXCorKSg/IVxcKikoPz1bcHVuY3RdKXxbXnB1bmN0XFxzXShcXCorKSg/PVtecHVuY3RcXHNdKSIsImd1IikucmVwbGFjZSgvcHVuY3QvZyxfdikuZ2V0UmVnZXgoKSx1N2U9Zm4oIl5bXl8qXSo/XFwqXFwqW15fKl0qP19bXl8qXSo/KD89XFwqXFwqKXxbXl9dKyg/PVteX10pfCg/IV8pW3B1bmN0XShfKykoPz1bXFxzXXwkKXxbXnB1bmN0XFxzXShfKykoPyFfKSg/PVtwdW5jdFxcc118JCl8KD8hXylbcHVuY3RcXHNdKF8rKSg/PVtecHVuY3RcXHNdKXxbXFxzXShfKykoPyFfKSg/PVtwdW5jdF0pfCg/IV8pW3B1bmN0XShfKykoPyFfKSg/PVtwdW5jdF0pIiwiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLF92KS5nZXRSZWdleCgpLGg3ZT1mbigvXFwoW3B1bmN0XSkvLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csX3YpLmdldFJlZ2V4KCksZjdlPWZuKC9ePChzY2hlbWU6W15cc1x4MDAtXHgxZjw+XSp8ZW1haWwpPi8pLnJlcGxhY2UoInNjaGVtZSIsL1thLXpBLVpdW2EtekEtWjAtOSsuLV17MSwzMX0vKS5yZXBsYWNlKCJlbWFpbCIsL1thLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rKEApW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKyg/IVstX10pLykuZ2V0UmVnZXgoKSxkN2U9Zm4obTkpLnJlcGxhY2UoIig/Oi0tPnwkKSIsIi0tPiIpLmdldFJlZ2V4KCkscDdlPWZuKCJeY29tbWVudHxePC9bYS16QS1aXVtcXHc6LV0qXFxzKj58XjxbYS16QS1aXVtcXHctXSooPzphdHRyaWJ1dGUpKj9cXHMqLz8+fF48XFw/W1xcc1xcU10qP1xcPz58XjwhW2EtekEtWl0rXFxzW1xcc1xcU10qPz58XjwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/XFxdXFxdPiIpLnJlcGxhY2UoImNvbW1lbnQiLGQ3ZSkucmVwbGFjZSgiYXR0cmlidXRlIiwvXHMrW2EtekEtWjpfXVtcdy46LV0qKD86XHMqPVxzKiJbXiJdKiJ8XHMqPVxzKidbXiddKid8XHMqPVxzKlteXHMiJz08PmBdKyk/LykuZ2V0UmVnZXgoKSxSNT0vKD86XFsoPzpcXC58W15cW1xdXFxdKSpcXXxcXC58YFteYF0qYHxbXlxbXF1cXGBdKSo/LyxtN2U9Zm4oL14hP1xbKGxhYmVsKVxdXChccyooaHJlZikoPzpccysodGl0bGUpKT9ccypcKS8pLnJlcGxhY2UoImxhYmVsIixSNSkucmVwbGFjZSgiaHJlZiIsLzwoPzpcXC58W15cbjw+XFxdKSs+fFteXHNceDAwLVx4MWZdKi8pLnJlcGxhY2UoInRpdGxlIiwvIig/OlxcIj98W14iXFxdKSoifCcoPzpcXCc/fFteJ1xcXSkqJ3xcKCg/OlxcXCk/fFteKVxcXSkqXCkvKS5nZXRSZWdleCgpLG5qPWZuKC9eIT9cWyhsYWJlbClcXVxbKHJlZilcXS8pLnJlcGxhY2UoImxhYmVsIixSNSkucmVwbGFjZSgicmVmIixwOSkuZ2V0UmVnZXgoKSxpaj1mbigvXiE/XFsocmVmKVxdKD86XFtcXSk/LykucmVwbGFjZSgicmVmIixwOSkuZ2V0UmVnZXgoKSxnN2U9Zm4oInJlZmxpbmt8bm9saW5rKD8hXFwoKSIsImciKS5yZXBsYWNlKCJyZWZsaW5rIixuaikucmVwbGFjZSgibm9saW5rIixpaikuZ2V0UmVnZXgoKSx5OT17X2JhY2twZWRhbDpTdixhbnlQdW5jdHVhdGlvbjpoN2UsYXV0b2xpbms6ZjdlLGJsb2NrU2tpcDpvN2UsYnI6cmosY29kZTppN2UsZGVsOlN2LGVtU3Ryb25nTERlbGltOmw3ZSxlbVN0cm9uZ1JEZWxpbUFzdDpjN2UsZW1TdHJvbmdSRGVsaW1VbmQ6dTdlLGVzY2FwZTp0aixsaW5rOm03ZSxub2xpbms6aWoscHVuY3R1YXRpb246czdlLHJlZmxpbms6bmoscmVmbGlua1NlYXJjaDpnN2UsdGFnOnA3ZSx0ZXh0OmE3ZSx1cmw6U3Z9LHk3ZT17Li4ueTksbGluazpmbigvXiE/XFsobGFiZWwpXF1cKCguKj8pXCkvKS5yZXBsYWNlKCJsYWJlbCIsUjUpLmdldFJlZ2V4KCkscmVmbGluazpmbigvXiE/XFsobGFiZWwpXF1ccypcWyhbXlxdXSopXF0vKS5yZXBsYWNlKCJsYWJlbCIsUjUpLmdldFJlZ2V4KCl9LHU5PXsuLi55OSxlc2NhcGU6Zm4odGopLnJlcGxhY2UoIl0pIiwifnxdKSIpLmdldFJlZ2V4KCksdXJsOmZuKC9eKCg/OmZ0cHxodHRwcz8pOlwvXC98d3d3XC4pKD86W2EtekEtWjAtOVwtXStcLj8pK1teXHM8XSp8XmVtYWlsLywiaSIpLnJlcGxhY2UoImVtYWlsIiwvW0EtWmEtejAtOS5fKy1dKyhAKVthLXpBLVowLTktX10rKD86XC5bYS16QS1aMC05LV9dKlthLXpBLVowLTldKSsoPyFbLV9dKS8pLmdldFJlZ2V4KCksX2JhY2twZWRhbDovKD86W14/IS4sOjsqXycifigpJl0rfFwoW14pXSpcKXwmKD8hW2EtekEtWjAtOV0rOyQpfFs/IS4sOjsqXycifildKyg/ISQpKSsvLGRlbDovXih+fj8pKD89W15cc35dKShbXHNcU10qP1teXHN+XSlcMSg/PVtefl18JCkvLHRleHQ6L14oW2B+XSt8W15gfl0pKD86KD89IHsyLH1cbil8KD89W2EtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0rQCl8W1xzXFNdKj8oPzooPz1bXFw8IVxbYCp+X118XGJffGh0dHBzPzpcL1wvfGZ0cDpcL1wvfHd3d1wufCQpfFteIF0oPz0gezIsfVxuKXxbXmEtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0oPz1bYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXStAKSkpL30sdjdlPXsuLi51OSxicjpmbihyaikucmVwbGFjZSgiezIsfSIsIioiKS5nZXRSZWdleCgpLHRleHQ6Zm4odTkudGV4dCkucmVwbGFjZSgiXFxiXyIsIlxcYl98IHsyLH1cXG4iKS5yZXBsYWNlKC9cezIsXH0vZywiKiIpLmdldFJlZ2V4KCl9LE41PXtub3JtYWw6ZzksZ2ZtOnI3ZSxwZWRhbnRpYzpuN2V9LEV2PXtub3JtYWw6eTksZ2ZtOnU5LGJyZWFrczp2N2UscGVkYW50aWM6eTdlfSxNdT1jbGFzcyB0e3N0YXRpY3tvKHRoaXMsIl9MZXhlciIpfXRva2VucztvcHRpb25zO3N0YXRlO3Rva2VuaXplcjtpbmxpbmVRdWV1ZTtjb25zdHJ1Y3RvcihlKXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2Vucy5saW5rcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMub3B0aW9ucz1lfHxJZCx0aGlzLm9wdGlvbnMudG9rZW5pemVyPXRoaXMub3B0aW9ucy50b2tlbml6ZXJ8fG5ldyBnbSx0aGlzLnRva2VuaXplcj10aGlzLm9wdGlvbnMudG9rZW5pemVyLHRoaXMudG9rZW5pemVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMudG9rZW5pemVyLmxleGVyPXRoaXMsdGhpcy5pbmxpbmVRdWV1ZT1bXSx0aGlzLnN0YXRlPXtpbkxpbms6ITEsaW5SYXdCbG9jazohMSx0b3A6ITB9O2xldCByPXtibG9jazpONS5ub3JtYWwsaW5saW5lOkV2Lm5vcm1hbH07dGhpcy5vcHRpb25zLnBlZGFudGljPyhyLmJsb2NrPU41LnBlZGFudGljLHIuaW5saW5lPUV2LnBlZGFudGljKTp0aGlzLm9wdGlvbnMuZ2ZtJiYoci5ibG9jaz1ONS5nZm0sdGhpcy5vcHRpb25zLmJyZWFrcz9yLmlubGluZT1Fdi5icmVha3M6ci5pbmxpbmU9RXYuZ2ZtKSx0aGlzLnRva2VuaXplci5ydWxlcz1yfXN0YXRpYyBnZXQgcnVsZXMoKXtyZXR1cm57YmxvY2s6TjUsaW5saW5lOkV2fX1zdGF0aWMgbGV4KGUscil7cmV0dXJuIG5ldyB0KHIpLmxleChlKX1zdGF0aWMgbGV4SW5saW5lKGUscil7cmV0dXJuIG5ldyB0KHIpLmlubGluZVRva2VucyhlKX1sZXgoZSl7ZT1lLnJlcGxhY2UoL1xyXG58XHIvZyxgCmApLHRoaXMuYmxvY2tUb2tlbnMoZSx0aGlzLnRva2Vucyk7Zm9yKGxldCByPTA7cjx0aGlzLmlubGluZVF1ZXVlLmxlbmd0aDtyKyspe2xldCBuPXRoaXMuaW5saW5lUXVldWVbcl07dGhpcy5pbmxpbmVUb2tlbnMobi5zcmMsbi50b2tlbnMpfXJldHVybiB0aGlzLmlubGluZVF1ZXVlPVtdLHRoaXMudG9rZW5zfWJsb2NrVG9rZW5zKGUscj1bXSxuPSExKXt0aGlzLm9wdGlvbnMucGVkYW50aWM/ZT1lLnJlcGxhY2UoL1x0L2csIiAgICAiKS5yZXBsYWNlKC9eICskL2dtLCIiKTplPWUucmVwbGFjZSgvXiggKikoXHQrKS9nbSwobCx1LGgpPT51KyIgICAgIi5yZXBlYXQoaC5sZW5ndGgpKTtsZXQgaSxhLHM7Zm9yKDtlOylpZighKHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5ibG9jayYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuYmxvY2suc29tZShsPT4oaT1sLmNhbGwoe2xleGVyOnRoaXN9LGUscikpPyhlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCksci5wdXNoKGkpLCEwKTohMSkpKXtpZihpPXRoaXMudG9rZW5pemVyLnNwYWNlKGUpKXtlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCksaS5yYXcubGVuZ3RoPT09MSYmci5sZW5ndGg+MD9yW3IubGVuZ3RoLTFdLnJhdys9YApgOnIucHVzaChpKTtjb250aW51ZX1pZihpPXRoaXMudG9rZW5pemVyLmNvZGUoZSkpe2U9ZS5zdWJzdHJpbmcoaS5yYXcubGVuZ3RoKSxhPXJbci5sZW5ndGgtMV0sYSYmKGEudHlwZT09PSJwYXJhZ3JhcGgifHxhLnR5cGU9PT0idGV4dCIpPyhhLnJhdys9YApgK2kucmF3LGEudGV4dCs9YApgK2kudGV4dCx0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1hLnRleHQpOnIucHVzaChpKTtjb250aW51ZX1pZihpPXRoaXMudG9rZW5pemVyLmZlbmNlcyhlKSl7ZT1lLnN1YnN0cmluZyhpLnJhdy5sZW5ndGgpLHIucHVzaChpKTtjb250aW51ZX1pZihpPXRoaXMudG9rZW5pemVyLmhlYWRpbmcoZSkpe2U9ZS5zdWJzdHJpbmcoaS5yYXcubGVuZ3RoKSxyLnB1c2goaSk7Y29udGludWV9aWYoaT10aGlzLnRva2VuaXplci5ocihlKSl7ZT1lLnN1YnN0cmluZyhpLnJhdy5sZW5ndGgpLHIucHVzaChpKTtjb250aW51ZX1pZihpPXRoaXMudG9rZW5pemVyLmJsb2NrcXVvdGUoZSkpe2U9ZS5zdWJzdHJpbmcoaS5yYXcubGVuZ3RoKSxyLnB1c2goaSk7Y29udGludWV9aWYoaT10aGlzLnRva2VuaXplci5saXN0KGUpKXtlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCksci5wdXNoKGkpO2NvbnRpbnVlfWlmKGk9dGhpcy50b2tlbml6ZXIuaHRtbChlKSl7ZT1lLnN1YnN0cmluZyhpLnJhdy5sZW5ndGgpLHIucHVzaChpKTtjb250aW51ZX1pZihpPXRoaXMudG9rZW5pemVyLmRlZihlKSl7ZT1lLnN1YnN0cmluZyhpLnJhdy5sZW5ndGgpLGE9cltyLmxlbmd0aC0xXSxhJiYoYS50eXBlPT09InBhcmFncmFwaCJ8fGEudHlwZT09PSJ0ZXh0Iik/KGEucmF3Kz1gCmAraS5yYXcsYS50ZXh0Kz1gCmAraS5yYXcsdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9YS50ZXh0KTp0aGlzLnRva2Vucy5saW5rc1tpLnRhZ118fCh0aGlzLnRva2Vucy5saW5rc1tpLnRhZ109e2hyZWY6aS5ocmVmLHRpdGxlOmkudGl0bGV9KTtjb250aW51ZX1pZihpPXRoaXMudG9rZW5pemVyLnRhYmxlKGUpKXtlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCksci5wdXNoKGkpO2NvbnRpbnVlfWlmKGk9dGhpcy50b2tlbml6ZXIubGhlYWRpbmcoZSkpe2U9ZS5zdWJzdHJpbmcoaS5yYXcubGVuZ3RoKSxyLnB1c2goaSk7Y29udGludWV9aWYocz1lLHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydEJsb2NrKXtsZXQgbD0xLzAsdT1lLnNsaWNlKDEpLGg7dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRCbG9jay5mb3JFYWNoKGY9PntoPWYuY2FsbCh7bGV4ZXI6dGhpc30sdSksdHlwZW9mIGg9PSJudW1iZXIiJiZoPj0wJiYobD1NYXRoLm1pbihsLGgpKX0pLGw8MS8wJiZsPj0wJiYocz1lLnN1YnN0cmluZygwLGwrMSkpfWlmKHRoaXMuc3RhdGUudG9wJiYoaT10aGlzLnRva2VuaXplci5wYXJhZ3JhcGgocykpKXthPXJbci5sZW5ndGgtMV0sbiYmYT8udHlwZT09PSJwYXJhZ3JhcGgiPyhhLnJhdys9YApgK2kucmF3LGEudGV4dCs9YApgK2kudGV4dCx0aGlzLmlubGluZVF1ZXVlLnBvcCgpLHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWEudGV4dCk6ci5wdXNoKGkpLG49cy5sZW5ndGghPT1lLmxlbmd0aCxlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCk7Y29udGludWV9aWYoaT10aGlzLnRva2VuaXplci50ZXh0KGUpKXtlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCksYT1yW3IubGVuZ3RoLTFdLGEmJmEudHlwZT09PSJ0ZXh0Ij8oYS5yYXcrPWAKYCtpLnJhdyxhLnRleHQrPWAKYCtpLnRleHQsdGhpcy5pbmxpbmVRdWV1ZS5wb3AoKSx0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1hLnRleHQpOnIucHVzaChpKTtjb250aW51ZX1pZihlKXtsZXQgbD0iSW5maW5pdGUgbG9vcCBvbiBieXRlOiAiK2UuY2hhckNvZGVBdCgwKTtpZih0aGlzLm9wdGlvbnMuc2lsZW50KXtjb25zb2xlLmVycm9yKGwpO2JyZWFrfWVsc2UgdGhyb3cgbmV3IEVycm9yKGwpfX1yZXR1cm4gdGhpcy5zdGF0ZS50b3A9ITAscn1pbmxpbmUoZSxyPVtdKXtyZXR1cm4gdGhpcy5pbmxpbmVRdWV1ZS5wdXNoKHtzcmM6ZSx0b2tlbnM6cn0pLHJ9aW5saW5lVG9rZW5zKGUscj1bXSl7bGV0IG4saSxhLHM9ZSxsLHUsaDtpZih0aGlzLnRva2Vucy5saW5rcyl7bGV0IGY9T2JqZWN0LmtleXModGhpcy50b2tlbnMubGlua3MpO2lmKGYubGVuZ3RoPjApZm9yKDsobD10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUucmVmbGlua1NlYXJjaC5leGVjKHMpKSE9bnVsbDspZi5pbmNsdWRlcyhsWzBdLnNsaWNlKGxbMF0ubGFzdEluZGV4T2YoIlsiKSsxLC0xKSkmJihzPXMuc2xpY2UoMCxsLmluZGV4KSsiWyIrImEiLnJlcGVhdChsWzBdLmxlbmd0aC0yKSsiXSIrcy5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUucmVmbGlua1NlYXJjaC5sYXN0SW5kZXgpKX1mb3IoOyhsPXRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5ibG9ja1NraXAuZXhlYyhzKSkhPW51bGw7KXM9cy5zbGljZSgwLGwuaW5kZXgpKyJbIisiYSIucmVwZWF0KGxbMF0ubGVuZ3RoLTIpKyJdIitzLnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5ibG9ja1NraXAubGFzdEluZGV4KTtmb3IoOyhsPXRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbi5leGVjKHMpKSE9bnVsbDspcz1zLnNsaWNlKDAsbC5pbmRleCkrIisrIitzLnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbi5sYXN0SW5kZXgpO2Zvcig7ZTspaWYodXx8KGg9IiIpLHU9ITEsISh0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuaW5saW5lJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5pbmxpbmUuc29tZShmPT4obj1mLmNhbGwoe2xleGVyOnRoaXN9LGUscikpPyhlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksci5wdXNoKG4pLCEwKTohMSkpKXtpZihuPXRoaXMudG9rZW5pemVyLmVzY2FwZShlKSl7ZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLHIucHVzaChuKTtjb250aW51ZX1pZihuPXRoaXMudG9rZW5pemVyLnRhZyhlKSl7ZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLGk9cltyLmxlbmd0aC0xXSxpJiZuLnR5cGU9PT0idGV4dCImJmkudHlwZT09PSJ0ZXh0Ij8oaS5yYXcrPW4ucmF3LGkudGV4dCs9bi50ZXh0KTpyLnB1c2gobik7Y29udGludWV9aWYobj10aGlzLnRva2VuaXplci5saW5rKGUpKXtlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksci5wdXNoKG4pO2NvbnRpbnVlfWlmKG49dGhpcy50b2tlbml6ZXIucmVmbGluayhlLHRoaXMudG9rZW5zLmxpbmtzKSl7ZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLGk9cltyLmxlbmd0aC0xXSxpJiZuLnR5cGU9PT0idGV4dCImJmkudHlwZT09PSJ0ZXh0Ij8oaS5yYXcrPW4ucmF3LGkudGV4dCs9bi50ZXh0KTpyLnB1c2gobik7Y29udGludWV9aWYobj10aGlzLnRva2VuaXplci5lbVN0cm9uZyhlLHMsaCkpe2U9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSxyLnB1c2gobik7Y29udGludWV9aWYobj10aGlzLnRva2VuaXplci5jb2Rlc3BhbihlKSl7ZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLHIucHVzaChuKTtjb250aW51ZX1pZihuPXRoaXMudG9rZW5pemVyLmJyKGUpKXtlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksci5wdXNoKG4pO2NvbnRpbnVlfWlmKG49dGhpcy50b2tlbml6ZXIuZGVsKGUpKXtlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksci5wdXNoKG4pO2NvbnRpbnVlfWlmKG49dGhpcy50b2tlbml6ZXIuYXV0b2xpbmsoZSkpe2U9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSxyLnB1c2gobik7Y29udGludWV9aWYoIXRoaXMuc3RhdGUuaW5MaW5rJiYobj10aGlzLnRva2VuaXplci51cmwoZSkpKXtlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksci5wdXNoKG4pO2NvbnRpbnVlfWlmKGE9ZSx0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRJbmxpbmUpe2xldCBmPTEvMCxkPWUuc2xpY2UoMSkscDt0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGluZS5mb3JFYWNoKG09PntwPW0uY2FsbCh7bGV4ZXI6dGhpc30sZCksdHlwZW9mIHA9PSJudW1iZXIiJiZwPj0wJiYoZj1NYXRoLm1pbihmLHApKX0pLGY8MS8wJiZmPj0wJiYoYT1lLnN1YnN0cmluZygwLGYrMSkpfWlmKG49dGhpcy50b2tlbml6ZXIuaW5saW5lVGV4dChhKSl7ZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLG4ucmF3LnNsaWNlKC0xKSE9PSJfIiYmKGg9bi5yYXcuc2xpY2UoLTEpKSx1PSEwLGk9cltyLmxlbmd0aC0xXSxpJiZpLnR5cGU9PT0idGV4dCI/KGkucmF3Kz1uLnJhdyxpLnRleHQrPW4udGV4dCk6ci5wdXNoKG4pO2NvbnRpbnVlfWlmKGUpe2xldCBmPSJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrZS5jaGFyQ29kZUF0KDApO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpe2NvbnNvbGUuZXJyb3IoZik7YnJlYWt9ZWxzZSB0aHJvdyBuZXcgRXJyb3IoZil9fXJldHVybiByfX0seW09Y2xhc3N7c3RhdGlje28odGhpcywiX1JlbmRlcmVyIil9b3B0aW9ucztwYXJzZXI7Y29uc3RydWN0b3IoZSl7dGhpcy5vcHRpb25zPWV8fElkfXNwYWNlKGUpe3JldHVybiIifWNvZGUoe3RleHQ6ZSxsYW5nOnIsZXNjYXBlZDpufSl7bGV0IGk9KHJ8fCIiKS5tYXRjaCgvXlxTKi8pPy5bMF0sYT1lLnJlcGxhY2UoL1xuJC8sIiIpK2AKYDtyZXR1cm4gaT8nPHByZT48Y29kZSBjbGFzcz0ibGFuZ3VhZ2UtJytvbyhpKSsnIj4nKyhuP2E6b28oYSwhMCkpK2A8L2NvZGU+PC9wcmU+CmA6IjxwcmU+PGNvZGU+Iisobj9hOm9vKGEsITApKStgPC9jb2RlPjwvcHJlPgpgfWJsb2NrcXVvdGUoe3Rva2VuczplfSl7cmV0dXJuYDxibG9ja3F1b3RlPgoke3RoaXMucGFyc2VyLnBhcnNlKGUpfTwvYmxvY2txdW90ZT4KYH1odG1sKHt0ZXh0OmV9KXtyZXR1cm4gZX1oZWFkaW5nKHt0b2tlbnM6ZSxkZXB0aDpyfSl7cmV0dXJuYDxoJHtyfT4ke3RoaXMucGFyc2VyLnBhcnNlSW5saW5lKGUpfTwvaCR7cn0+CmB9aHIoZSl7cmV0dXJuYDxocj4KYH1saXN0KGUpe2xldCByPWUub3JkZXJlZCxuPWUuc3RhcnQsaT0iIjtmb3IobGV0IGw9MDtsPGUuaXRlbXMubGVuZ3RoO2wrKyl7bGV0IHU9ZS5pdGVtc1tsXTtpKz10aGlzLmxpc3RpdGVtKHUpfWxldCBhPXI/Im9sIjoidWwiLHM9ciYmbiE9PTE/JyBzdGFydD0iJytuKyciJzoiIjtyZXR1cm4iPCIrYStzK2A+CmAraSsiPC8iK2ErYD4KYH1saXN0aXRlbShlKXtsZXQgcj0iIjtpZihlLnRhc2spe2xldCBuPXRoaXMuY2hlY2tib3goe2NoZWNrZWQ6ISFlLmNoZWNrZWR9KTtlLmxvb3NlP2UudG9rZW5zLmxlbmd0aD4wJiZlLnRva2Vuc1swXS50eXBlPT09InBhcmFncmFwaCI/KGUudG9rZW5zWzBdLnRleHQ9bisiICIrZS50b2tlbnNbMF0udGV4dCxlLnRva2Vuc1swXS50b2tlbnMmJmUudG9rZW5zWzBdLnRva2Vucy5sZW5ndGg+MCYmZS50b2tlbnNbMF0udG9rZW5zWzBdLnR5cGU9PT0idGV4dCImJihlLnRva2Vuc1swXS50b2tlbnNbMF0udGV4dD1uKyIgIitlLnRva2Vuc1swXS50b2tlbnNbMF0udGV4dCkpOmUudG9rZW5zLnVuc2hpZnQoe3R5cGU6InRleHQiLHJhdzpuKyIgIix0ZXh0Om4rIiAifSk6cis9bisiICJ9cmV0dXJuIHIrPXRoaXMucGFyc2VyLnBhcnNlKGUudG9rZW5zLCEhZS5sb29zZSksYDxsaT4ke3J9PC9saT4KYH1jaGVja2JveCh7Y2hlY2tlZDplfSl7cmV0dXJuIjxpbnB1dCAiKyhlPydjaGVja2VkPSIiICc6IiIpKydkaXNhYmxlZD0iIiB0eXBlPSJjaGVja2JveCI+J31wYXJhZ3JhcGgoe3Rva2VuczplfSl7cmV0dXJuYDxwPiR7dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUoZSl9PC9wPgpgfXRhYmxlKGUpe2xldCByPSIiLG49IiI7Zm9yKGxldCBhPTA7YTxlLmhlYWRlci5sZW5ndGg7YSsrKW4rPXRoaXMudGFibGVjZWxsKGUuaGVhZGVyW2FdKTtyKz10aGlzLnRhYmxlcm93KHt0ZXh0Om59KTtsZXQgaT0iIjtmb3IobGV0IGE9MDthPGUucm93cy5sZW5ndGg7YSsrKXtsZXQgcz1lLnJvd3NbYV07bj0iIjtmb3IobGV0IGw9MDtsPHMubGVuZ3RoO2wrKyluKz10aGlzLnRhYmxlY2VsbChzW2xdKTtpKz10aGlzLnRhYmxlcm93KHt0ZXh0Om59KX1yZXR1cm4gaSYmKGk9YDx0Ym9keT4ke2l9PC90Ym9keT5gKSxgPHRhYmxlPgo8dGhlYWQ+CmArcitgPC90aGVhZD4KYCtpK2A8L3RhYmxlPgpgfXRhYmxlcm93KHt0ZXh0OmV9KXtyZXR1cm5gPHRyPgoke2V9PC90cj4KYH10YWJsZWNlbGwoZSl7bGV0IHI9dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUoZS50b2tlbnMpLG49ZS5oZWFkZXI/InRoIjoidGQiO3JldHVybihlLmFsaWduP2A8JHtufSBhbGlnbj0iJHtlLmFsaWdufSI+YDpgPCR7bn0+YCkrcitgPC8ke259PgpgfXN0cm9uZyh7dG9rZW5zOmV9KXtyZXR1cm5gPHN0cm9uZz4ke3RoaXMucGFyc2VyLnBhcnNlSW5saW5lKGUpfTwvc3Ryb25nPmB9ZW0oe3Rva2VuczplfSl7cmV0dXJuYDxlbT4ke3RoaXMucGFyc2VyLnBhcnNlSW5saW5lKGUpfTwvZW0+YH1jb2Rlc3Bhbih7dGV4dDplfSl7cmV0dXJuYDxjb2RlPiR7ZX08L2NvZGU+YH1icihlKXtyZXR1cm4iPGJyPiJ9ZGVsKHt0b2tlbnM6ZX0pe3JldHVybmA8ZGVsPiR7dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUoZSl9PC9kZWw+YH1saW5rKHtocmVmOmUsdGl0bGU6cix0b2tlbnM6bn0pe2xldCBpPXRoaXMucGFyc2VyLnBhcnNlSW5saW5lKG4pLGE9V1goZSk7aWYoYT09PW51bGwpcmV0dXJuIGk7ZT1hO2xldCBzPSc8YSBocmVmPSInK2UrJyInO3JldHVybiByJiYocys9JyB0aXRsZT0iJytyKyciJykscys9Ij4iK2krIjwvYT4iLHN9aW1hZ2Uoe2hyZWY6ZSx0aXRsZTpyLHRleHQ6bn0pe2xldCBpPVdYKGUpO2lmKGk9PT1udWxsKXJldHVybiBuO2U9aTtsZXQgYT1gPGltZyBzcmM9IiR7ZX0iIGFsdD0iJHtufSJgO3JldHVybiByJiYoYSs9YCB0aXRsZT0iJHtyfSJgKSxhKz0iPiIsYX10ZXh0KGUpe3JldHVybiJ0b2tlbnMiaW4gZSYmZS50b2tlbnM/dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUoZS50b2tlbnMpOmUudGV4dH19LEN2PWNsYXNze3N0YXRpY3tvKHRoaXMsIl9UZXh0UmVuZGVyZXIiKX1zdHJvbmcoe3RleHQ6ZX0pe3JldHVybiBlfWVtKHt0ZXh0OmV9KXtyZXR1cm4gZX1jb2Rlc3Bhbih7dGV4dDplfSl7cmV0dXJuIGV9ZGVsKHt0ZXh0OmV9KXtyZXR1cm4gZX1odG1sKHt0ZXh0OmV9KXtyZXR1cm4gZX10ZXh0KHt0ZXh0OmV9KXtyZXR1cm4gZX1saW5rKHt0ZXh0OmV9KXtyZXR1cm4iIitlfWltYWdlKHt0ZXh0OmV9KXtyZXR1cm4iIitlfWJyKCl7cmV0dXJuIiJ9fSxJdT1jbGFzcyB0e3N0YXRpY3tvKHRoaXMsIl9QYXJzZXIiKX1vcHRpb25zO3JlbmRlcmVyO3RleHRSZW5kZXJlcjtjb25zdHJ1Y3RvcihlKXt0aGlzLm9wdGlvbnM9ZXx8SWQsdGhpcy5vcHRpb25zLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcnx8bmV3IHltLHRoaXMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyLHRoaXMucmVuZGVyZXIub3B0aW9ucz10aGlzLm9wdGlvbnMsdGhpcy5yZW5kZXJlci5wYXJzZXI9dGhpcyx0aGlzLnRleHRSZW5kZXJlcj1uZXcgQ3Z9c3RhdGljIHBhcnNlKGUscil7cmV0dXJuIG5ldyB0KHIpLnBhcnNlKGUpfXN0YXRpYyBwYXJzZUlubGluZShlLHIpe3JldHVybiBuZXcgdChyKS5wYXJzZUlubGluZShlKX1wYXJzZShlLHI9ITApe2xldCBuPSIiO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtsZXQgYT1lW2ldO2lmKHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1thLnR5cGVdKXtsZXQgbD1hLHU9dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2wudHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LGwpO2lmKHUhPT0hMXx8IVsic3BhY2UiLCJociIsImhlYWRpbmciLCJjb2RlIiwidGFibGUiLCJibG9ja3F1b3RlIiwibGlzdCIsImh0bWwiLCJwYXJhZ3JhcGgiLCJ0ZXh0Il0uaW5jbHVkZXMobC50eXBlKSl7bis9dXx8IiI7Y29udGludWV9fWxldCBzPWE7c3dpdGNoKHMudHlwZSl7Y2FzZSJzcGFjZSI6e24rPXRoaXMucmVuZGVyZXIuc3BhY2Uocyk7Y29udGludWV9Y2FzZSJociI6e24rPXRoaXMucmVuZGVyZXIuaHIocyk7Y29udGludWV9Y2FzZSJoZWFkaW5nIjp7bis9dGhpcy5yZW5kZXJlci5oZWFkaW5nKHMpO2NvbnRpbnVlfWNhc2UiY29kZSI6e24rPXRoaXMucmVuZGVyZXIuY29kZShzKTtjb250aW51ZX1jYXNlInRhYmxlIjp7bis9dGhpcy5yZW5kZXJlci50YWJsZShzKTtjb250aW51ZX1jYXNlImJsb2NrcXVvdGUiOntuKz10aGlzLnJlbmRlcmVyLmJsb2NrcXVvdGUocyk7Y29udGludWV9Y2FzZSJsaXN0Ijp7bis9dGhpcy5yZW5kZXJlci5saXN0KHMpO2NvbnRpbnVlfWNhc2UiaHRtbCI6e24rPXRoaXMucmVuZGVyZXIuaHRtbChzKTtjb250aW51ZX1jYXNlInBhcmFncmFwaCI6e24rPXRoaXMucmVuZGVyZXIucGFyYWdyYXBoKHMpO2NvbnRpbnVlfWNhc2UidGV4dCI6e2xldCBsPXMsdT10aGlzLnJlbmRlcmVyLnRleHQobCk7Zm9yKDtpKzE8ZS5sZW5ndGgmJmVbaSsxXS50eXBlPT09InRleHQiOylsPWVbKytpXSx1Kz1gCmArdGhpcy5yZW5kZXJlci50ZXh0KGwpO3I/bis9dGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgoe3R5cGU6InBhcmFncmFwaCIscmF3OnUsdGV4dDp1LHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzp1LHRleHQ6dX1dfSk6bis9dTtjb250aW51ZX1kZWZhdWx0OntsZXQgbD0nVG9rZW4gd2l0aCAiJytzLnR5cGUrJyIgdHlwZSB3YXMgbm90IGZvdW5kLic7aWYodGhpcy5vcHRpb25zLnNpbGVudClyZXR1cm4gY29uc29sZS5lcnJvcihsKSwiIjt0aHJvdyBuZXcgRXJyb3IobCl9fX1yZXR1cm4gbn1wYXJzZUlubGluZShlLHIpe3I9cnx8dGhpcy5yZW5kZXJlcjtsZXQgbj0iIjtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl7bGV0IGE9ZVtpXTtpZih0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbYS50eXBlXSl7bGV0IGw9dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2EudHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LGEpO2lmKGwhPT0hMXx8IVsiZXNjYXBlIiwiaHRtbCIsImxpbmsiLCJpbWFnZSIsInN0cm9uZyIsImVtIiwiY29kZXNwYW4iLCJiciIsImRlbCIsInRleHQiXS5pbmNsdWRlcyhhLnR5cGUpKXtuKz1sfHwiIjtjb250aW51ZX19bGV0IHM9YTtzd2l0Y2gocy50eXBlKXtjYXNlImVzY2FwZSI6e24rPXIudGV4dChzKTticmVha31jYXNlImh0bWwiOntuKz1yLmh0bWwocyk7YnJlYWt9Y2FzZSJsaW5rIjp7bis9ci5saW5rKHMpO2JyZWFrfWNhc2UiaW1hZ2UiOntuKz1yLmltYWdlKHMpO2JyZWFrfWNhc2Uic3Ryb25nIjp7bis9ci5zdHJvbmcocyk7YnJlYWt9Y2FzZSJlbSI6e24rPXIuZW0ocyk7YnJlYWt9Y2FzZSJjb2Rlc3BhbiI6e24rPXIuY29kZXNwYW4ocyk7YnJlYWt9Y2FzZSJiciI6e24rPXIuYnIocyk7YnJlYWt9Y2FzZSJkZWwiOntuKz1yLmRlbChzKTticmVha31jYXNlInRleHQiOntuKz1yLnRleHQocyk7YnJlYWt9ZGVmYXVsdDp7bGV0IGw9J1Rva2VuIHdpdGggIicrcy50eXBlKyciIHR5cGUgd2FzIG5vdCBmb3VuZC4nO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpcmV0dXJuIGNvbnNvbGUuZXJyb3IobCksIiI7dGhyb3cgbmV3IEVycm9yKGwpfX19cmV0dXJuIG59fSxtbT1jbGFzc3tzdGF0aWN7byh0aGlzLCJfSG9va3MiKX1vcHRpb25zO2NvbnN0cnVjdG9yKGUpe3RoaXMub3B0aW9ucz1lfHxJZH1zdGF0aWMgcGFzc1Rocm91Z2hIb29rcz1uZXcgU2V0KFsicHJlcHJvY2VzcyIsInBvc3Rwcm9jZXNzIiwicHJvY2Vzc0FsbFRva2VucyJdKTtwcmVwcm9jZXNzKGUpe3JldHVybiBlfXBvc3Rwcm9jZXNzKGUpe3JldHVybiBlfXByb2Nlc3NBbGxUb2tlbnMoZSl7cmV0dXJuIGV9fSxoOT1jbGFzc3tzdGF0aWN7byh0aGlzLCJNYXJrZWQiKX1kZWZhdWx0cz1mOSgpO29wdGlvbnM9dGhpcy5zZXRPcHRpb25zO3BhcnNlPXRoaXMuI2UoTXUubGV4LEl1LnBhcnNlKTtwYXJzZUlubGluZT10aGlzLiNlKE11LmxleElubGluZSxJdS5wYXJzZUlubGluZSk7UGFyc2VyPUl1O1JlbmRlcmVyPXltO1RleHRSZW5kZXJlcj1DdjtMZXhlcj1NdTtUb2tlbml6ZXI9Z207SG9va3M9bW07Y29uc3RydWN0b3IoLi4uZSl7dGhpcy51c2UoLi4uZSl9d2Fsa1Rva2VucyhlLHIpe2xldCBuPVtdO2ZvcihsZXQgaSBvZiBlKXN3aXRjaChuPW4uY29uY2F0KHIuY2FsbCh0aGlzLGkpKSxpLnR5cGUpe2Nhc2UidGFibGUiOntsZXQgYT1pO2ZvcihsZXQgcyBvZiBhLmhlYWRlciluPW4uY29uY2F0KHRoaXMud2Fsa1Rva2VucyhzLnRva2VucyxyKSk7Zm9yKGxldCBzIG9mIGEucm93cylmb3IobGV0IGwgb2YgcyluPW4uY29uY2F0KHRoaXMud2Fsa1Rva2VucyhsLnRva2VucyxyKSk7YnJlYWt9Y2FzZSJsaXN0Ijp7bGV0IGE9aTtuPW4uY29uY2F0KHRoaXMud2Fsa1Rva2VucyhhLml0ZW1zLHIpKTticmVha31kZWZhdWx0OntsZXQgYT1pO3RoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucz8uY2hpbGRUb2tlbnM/LlthLnR5cGVdP3RoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1thLnR5cGVdLmZvckVhY2gocz0+e2xldCBsPWFbc10uZmxhdCgxLzApO249bi5jb25jYXQodGhpcy53YWxrVG9rZW5zKGwscikpfSk6YS50b2tlbnMmJihuPW4uY29uY2F0KHRoaXMud2Fsa1Rva2VucyhhLnRva2VucyxyKSkpfX1yZXR1cm4gbn11c2UoLi4uZSl7bGV0IHI9dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zfHx7cmVuZGVyZXJzOnt9LGNoaWxkVG9rZW5zOnt9fTtyZXR1cm4gZS5mb3JFYWNoKG49PntsZXQgaT17Li4ubn07aWYoaS5hc3luYz10aGlzLmRlZmF1bHRzLmFzeW5jfHxpLmFzeW5jfHwhMSxuLmV4dGVuc2lvbnMmJihuLmV4dGVuc2lvbnMuZm9yRWFjaChhPT57aWYoIWEubmFtZSl0aHJvdyBuZXcgRXJyb3IoImV4dGVuc2lvbiBuYW1lIHJlcXVpcmVkIik7aWYoInJlbmRlcmVyImluIGEpe2xldCBzPXIucmVuZGVyZXJzW2EubmFtZV07cz9yLnJlbmRlcmVyc1thLm5hbWVdPWZ1bmN0aW9uKC4uLmwpe2xldCB1PWEucmVuZGVyZXIuYXBwbHkodGhpcyxsKTtyZXR1cm4gdT09PSExJiYodT1zLmFwcGx5KHRoaXMsbCkpLHV9OnIucmVuZGVyZXJzW2EubmFtZV09YS5yZW5kZXJlcn1pZigidG9rZW5pemVyImluIGEpe2lmKCFhLmxldmVsfHxhLmxldmVsIT09ImJsb2NrIiYmYS5sZXZlbCE9PSJpbmxpbmUiKXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIGxldmVsIG11c3QgYmUgJ2Jsb2NrJyBvciAnaW5saW5lJyIpO2xldCBzPXJbYS5sZXZlbF07cz9zLnVuc2hpZnQoYS50b2tlbml6ZXIpOnJbYS5sZXZlbF09W2EudG9rZW5pemVyXSxhLnN0YXJ0JiYoYS5sZXZlbD09PSJibG9jayI/ci5zdGFydEJsb2NrP3Iuc3RhcnRCbG9jay5wdXNoKGEuc3RhcnQpOnIuc3RhcnRCbG9jaz1bYS5zdGFydF06YS5sZXZlbD09PSJpbmxpbmUiJiYoci5zdGFydElubGluZT9yLnN0YXJ0SW5saW5lLnB1c2goYS5zdGFydCk6ci5zdGFydElubGluZT1bYS5zdGFydF0pKX0iY2hpbGRUb2tlbnMiaW4gYSYmYS5jaGlsZFRva2VucyYmKHIuY2hpbGRUb2tlbnNbYS5uYW1lXT1hLmNoaWxkVG9rZW5zKX0pLGkuZXh0ZW5zaW9ucz1yKSxuLnJlbmRlcmVyKXtsZXQgYT10aGlzLmRlZmF1bHRzLnJlbmRlcmVyfHxuZXcgeW0odGhpcy5kZWZhdWx0cyk7Zm9yKGxldCBzIGluIG4ucmVuZGVyZXIpe2lmKCEocyBpbiBhKSl0aHJvdyBuZXcgRXJyb3IoYHJlbmRlcmVyICcke3N9JyBkb2VzIG5vdCBleGlzdGApO2lmKFsib3B0aW9ucyIsInBhcnNlciJdLmluY2x1ZGVzKHMpKWNvbnRpbnVlO2xldCBsPXMsdT1uLnJlbmRlcmVyW2xdO24udXNlTmV3UmVuZGVyZXJ8fCh1PXRoaXMuI3QodSxsLGEpKTtsZXQgaD1hW2xdO2FbbF09KC4uLmYpPT57bGV0IGQ9dS5hcHBseShhLGYpO3JldHVybiBkPT09ITEmJihkPWguYXBwbHkoYSxmKSksZHx8IiJ9fWkucmVuZGVyZXI9YX1pZihuLnRva2VuaXplcil7bGV0IGE9dGhpcy5kZWZhdWx0cy50b2tlbml6ZXJ8fG5ldyBnbSh0aGlzLmRlZmF1bHRzKTtmb3IobGV0IHMgaW4gbi50b2tlbml6ZXIpe2lmKCEocyBpbiBhKSl0aHJvdyBuZXcgRXJyb3IoYHRva2VuaXplciAnJHtzfScgZG9lcyBub3QgZXhpc3RgKTtpZihbIm9wdGlvbnMiLCJydWxlcyIsImxleGVyIl0uaW5jbHVkZXMocykpY29udGludWU7bGV0IGw9cyx1PW4udG9rZW5pemVyW2xdLGg9YVtsXTthW2xdPSguLi5mKT0+e2xldCBkPXUuYXBwbHkoYSxmKTtyZXR1cm4gZD09PSExJiYoZD1oLmFwcGx5KGEsZikpLGR9fWkudG9rZW5pemVyPWF9aWYobi5ob29rcyl7bGV0IGE9dGhpcy5kZWZhdWx0cy5ob29rc3x8bmV3IG1tO2ZvcihsZXQgcyBpbiBuLmhvb2tzKXtpZighKHMgaW4gYSkpdGhyb3cgbmV3IEVycm9yKGBob29rICcke3N9JyBkb2VzIG5vdCBleGlzdGApO2lmKHM9PT0ib3B0aW9ucyIpY29udGludWU7bGV0IGw9cyx1PW4uaG9va3NbbF0saD1hW2xdO21tLnBhc3NUaHJvdWdoSG9va3MuaGFzKHMpP2FbbF09Zj0+e2lmKHRoaXMuZGVmYXVsdHMuYXN5bmMpcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1LmNhbGwoYSxmKSkudGhlbihwPT5oLmNhbGwoYSxwKSk7bGV0IGQ9dS5jYWxsKGEsZik7cmV0dXJuIGguY2FsbChhLGQpfTphW2xdPSguLi5mKT0+e2xldCBkPXUuYXBwbHkoYSxmKTtyZXR1cm4gZD09PSExJiYoZD1oLmFwcGx5KGEsZikpLGR9fWkuaG9va3M9YX1pZihuLndhbGtUb2tlbnMpe2xldCBhPXRoaXMuZGVmYXVsdHMud2Fsa1Rva2VucyxzPW4ud2Fsa1Rva2VucztpLndhbGtUb2tlbnM9ZnVuY3Rpb24obCl7bGV0IHU9W107cmV0dXJuIHUucHVzaChzLmNhbGwodGhpcyxsKSksYSYmKHU9dS5jb25jYXQoYS5jYWxsKHRoaXMsbCkpKSx1fX10aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLml9fSksdGhpc30jdChlLHIsbil7c3dpdGNoKHIpe2Nhc2UiaGVhZGluZyI6cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiFpLnR5cGV8fGkudHlwZSE9PXI/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZS5jYWxsKHRoaXMsbi5wYXJzZXIucGFyc2VJbmxpbmUoaS50b2tlbnMpLGkuZGVwdGgsVUNlKG4ucGFyc2VyLnBhcnNlSW5saW5lKGkudG9rZW5zLG4ucGFyc2VyLnRleHRSZW5kZXJlcikpKX07Y2FzZSJjb2RlIjpyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIWkudHlwZXx8aS50eXBlIT09cj9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplLmNhbGwodGhpcyxpLnRleHQsaS5sYW5nLCEhaS5lc2NhcGVkKX07Y2FzZSJ0YWJsZSI6cmV0dXJuIGZ1bmN0aW9uKGkpe2lmKCFpLnR5cGV8fGkudHlwZSE9PXIpcmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2xldCBhPSIiLHM9IiI7Zm9yKGxldCB1PTA7dTxpLmhlYWRlci5sZW5ndGg7dSsrKXMrPXRoaXMudGFibGVjZWxsKHt0ZXh0OmkuaGVhZGVyW3VdLnRleHQsdG9rZW5zOmkuaGVhZGVyW3VdLnRva2VucyxoZWFkZXI6ITAsYWxpZ246aS5hbGlnblt1XX0pO2ErPXRoaXMudGFibGVyb3coe3RleHQ6c30pO2xldCBsPSIiO2ZvcihsZXQgdT0wO3U8aS5yb3dzLmxlbmd0aDt1Kyspe2xldCBoPWkucm93c1t1XTtzPSIiO2ZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7ZisrKXMrPXRoaXMudGFibGVjZWxsKHt0ZXh0OmhbZl0udGV4dCx0b2tlbnM6aFtmXS50b2tlbnMsaGVhZGVyOiExLGFsaWduOmkuYWxpZ25bZl19KTtsKz10aGlzLnRhYmxlcm93KHt0ZXh0OnN9KX1yZXR1cm4gZS5jYWxsKHRoaXMsYSxsKX07Y2FzZSJibG9ja3F1b3RlIjpyZXR1cm4gZnVuY3Rpb24oaSl7aWYoIWkudHlwZXx8aS50eXBlIT09cilyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bGV0IGE9dGhpcy5wYXJzZXIucGFyc2UoaS50b2tlbnMpO3JldHVybiBlLmNhbGwodGhpcyxhKX07Y2FzZSJsaXN0IjpyZXR1cm4gZnVuY3Rpb24oaSl7aWYoIWkudHlwZXx8aS50eXBlIT09cilyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bGV0IGE9aS5vcmRlcmVkLHM9aS5zdGFydCxsPWkubG9vc2UsdT0iIjtmb3IobGV0IGg9MDtoPGkuaXRlbXMubGVuZ3RoO2grKyl7bGV0IGY9aS5pdGVtc1toXSxkPWYuY2hlY2tlZCxwPWYudGFzayxtPSIiO2lmKGYudGFzayl7bGV0IGc9dGhpcy5jaGVja2JveCh7Y2hlY2tlZDohIWR9KTtsP2YudG9rZW5zLmxlbmd0aD4wJiZmLnRva2Vuc1swXS50eXBlPT09InBhcmFncmFwaCI/KGYudG9rZW5zWzBdLnRleHQ9ZysiICIrZi50b2tlbnNbMF0udGV4dCxmLnRva2Vuc1swXS50b2tlbnMmJmYudG9rZW5zWzBdLnRva2Vucy5sZW5ndGg+MCYmZi50b2tlbnNbMF0udG9rZW5zWzBdLnR5cGU9PT0idGV4dCImJihmLnRva2Vuc1swXS50b2tlbnNbMF0udGV4dD1nKyIgIitmLnRva2Vuc1swXS50b2tlbnNbMF0udGV4dCkpOmYudG9rZW5zLnVuc2hpZnQoe3R5cGU6InRleHQiLHRleHQ6ZysiICJ9KTptKz1nKyIgIn1tKz10aGlzLnBhcnNlci5wYXJzZShmLnRva2VucyxsKSx1Kz10aGlzLmxpc3RpdGVtKHt0eXBlOiJsaXN0X2l0ZW0iLHJhdzptLHRleHQ6bSx0YXNrOnAsY2hlY2tlZDohIWQsbG9vc2U6bCx0b2tlbnM6Zi50b2tlbnN9KX1yZXR1cm4gZS5jYWxsKHRoaXMsdSxhLHMpfTtjYXNlImh0bWwiOnJldHVybiBmdW5jdGlvbihpKXtyZXR1cm4haS50eXBlfHxpLnR5cGUhPT1yP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUuY2FsbCh0aGlzLGkudGV4dCxpLmJsb2NrKX07Y2FzZSJwYXJhZ3JhcGgiOnJldHVybiBmdW5jdGlvbihpKXtyZXR1cm4haS50eXBlfHxpLnR5cGUhPT1yP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUuY2FsbCh0aGlzLHRoaXMucGFyc2VyLnBhcnNlSW5saW5lKGkudG9rZW5zKSl9O2Nhc2UiZXNjYXBlIjpyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIWkudHlwZXx8aS50eXBlIT09cj9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplLmNhbGwodGhpcyxpLnRleHQpfTtjYXNlImxpbmsiOnJldHVybiBmdW5jdGlvbihpKXtyZXR1cm4haS50eXBlfHxpLnR5cGUhPT1yP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUuY2FsbCh0aGlzLGkuaHJlZixpLnRpdGxlLHRoaXMucGFyc2VyLnBhcnNlSW5saW5lKGkudG9rZW5zKSl9O2Nhc2UiaW1hZ2UiOnJldHVybiBmdW5jdGlvbihpKXtyZXR1cm4haS50eXBlfHxpLnR5cGUhPT1yP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUuY2FsbCh0aGlzLGkuaHJlZixpLnRpdGxlLGkudGV4dCl9O2Nhc2Uic3Ryb25nIjpyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIWkudHlwZXx8aS50eXBlIT09cj9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplLmNhbGwodGhpcyx0aGlzLnBhcnNlci5wYXJzZUlubGluZShpLnRva2VucykpfTtjYXNlImVtIjpyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIWkudHlwZXx8aS50eXBlIT09cj9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplLmNhbGwodGhpcyx0aGlzLnBhcnNlci5wYXJzZUlubGluZShpLnRva2VucykpfTtjYXNlImNvZGVzcGFuIjpyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIWkudHlwZXx8aS50eXBlIT09cj9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplLmNhbGwodGhpcyxpLnRleHQpfTtjYXNlImRlbCI6cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiFpLnR5cGV8fGkudHlwZSE9PXI/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZS5jYWxsKHRoaXMsdGhpcy5wYXJzZXIucGFyc2VJbmxpbmUoaS50b2tlbnMpKX07Y2FzZSJ0ZXh0IjpyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIWkudHlwZXx8aS50eXBlIT09cj9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplLmNhbGwodGhpcyxpLnRleHQpfX1yZXR1cm4gZX1zZXRPcHRpb25zKGUpe3JldHVybiB0aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLmV9LHRoaXN9bGV4ZXIoZSxyKXtyZXR1cm4gTXUubGV4KGUscj8/dGhpcy5kZWZhdWx0cyl9cGFyc2VyKGUscil7cmV0dXJuIEl1LnBhcnNlKGUscj8/dGhpcy5kZWZhdWx0cyl9I2UoZSxyKXtyZXR1cm4obixpKT0+e2xldCBhPXsuLi5pfSxzPXsuLi50aGlzLmRlZmF1bHRzLC4uLmF9O3RoaXMuZGVmYXVsdHMuYXN5bmM9PT0hMCYmYS5hc3luYz09PSExJiYocy5zaWxlbnR8fGNvbnNvbGUud2FybigibWFya2VkKCk6IFRoZSBhc3luYyBvcHRpb24gd2FzIHNldCB0byB0cnVlIGJ5IGFuIGV4dGVuc2lvbi4gVGhlIGFzeW5jOiBmYWxzZSBvcHRpb24gc2VudCB0byBwYXJzZSB3aWxsIGJlIGlnbm9yZWQuIikscy5hc3luYz0hMCk7bGV0IGw9dGhpcy4jcighIXMuc2lsZW50LCEhcy5hc3luYyk7aWYodHlwZW9mIG4+InUifHxuPT09bnVsbClyZXR1cm4gbChuZXcgRXJyb3IoIm1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkIG9yIG51bGwiKSk7aWYodHlwZW9mIG4hPSJzdHJpbmciKXJldHVybiBsKG5ldyBFcnJvcigibWFya2VkKCk6IGlucHV0IHBhcmFtZXRlciBpcyBvZiB0eXBlICIrT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pKyIsIHN0cmluZyBleHBlY3RlZCIpKTtpZihzLmhvb2tzJiYocy5ob29rcy5vcHRpb25zPXMpLHMuYXN5bmMpcmV0dXJuIFByb21pc2UucmVzb2x2ZShzLmhvb2tzP3MuaG9va3MucHJlcHJvY2VzcyhuKTpuKS50aGVuKHU9PmUodSxzKSkudGhlbih1PT5zLmhvb2tzP3MuaG9va3MucHJvY2Vzc0FsbFRva2Vucyh1KTp1KS50aGVuKHU9PnMud2Fsa1Rva2Vucz9Qcm9taXNlLmFsbCh0aGlzLndhbGtUb2tlbnModSxzLndhbGtUb2tlbnMpKS50aGVuKCgpPT51KTp1KS50aGVuKHU9PnIodSxzKSkudGhlbih1PT5zLmhvb2tzP3MuaG9va3MucG9zdHByb2Nlc3ModSk6dSkuY2F0Y2gobCk7dHJ5e3MuaG9va3MmJihuPXMuaG9va3MucHJlcHJvY2VzcyhuKSk7bGV0IHU9ZShuLHMpO3MuaG9va3MmJih1PXMuaG9va3MucHJvY2Vzc0FsbFRva2Vucyh1KSkscy53YWxrVG9rZW5zJiZ0aGlzLndhbGtUb2tlbnModSxzLndhbGtUb2tlbnMpO2xldCBoPXIodSxzKTtyZXR1cm4gcy5ob29rcyYmKGg9cy5ob29rcy5wb3N0cHJvY2VzcyhoKSksaH1jYXRjaCh1KXtyZXR1cm4gbCh1KX19fSNyKGUscil7cmV0dXJuIG49PntpZihuLm1lc3NhZ2UrPWAKUGxlYXNlIHJlcG9ydCB0aGlzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJrZWRqcy9tYXJrZWQuYCxlKXtsZXQgaT0iPHA+QW4gZXJyb3Igb2NjdXJyZWQ6PC9wPjxwcmU+IitvbyhuLm1lc3NhZ2UrIiIsITApKyI8L3ByZT4iO3JldHVybiByP1Byb21pc2UucmVzb2x2ZShpKTppfWlmKHIpcmV0dXJuIFByb21pc2UucmVqZWN0KG4pO3Rocm93IG59fX0sTWQ9bmV3IGg5O28oZW4sIm1hcmtlZCIpO2VuLm9wdGlvbnM9ZW4uc2V0T3B0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gTWQuc2V0T3B0aW9ucyh0KSxlbi5kZWZhdWx0cz1NZC5kZWZhdWx0cyxqWChlbi5kZWZhdWx0cyksZW59O2VuLmdldERlZmF1bHRzPWY5O2VuLmRlZmF1bHRzPUlkO2VuLnVzZT1mdW5jdGlvbiguLi50KXtyZXR1cm4gTWQudXNlKC4uLnQpLGVuLmRlZmF1bHRzPU1kLmRlZmF1bHRzLGpYKGVuLmRlZmF1bHRzKSxlbn07ZW4ud2Fsa1Rva2Vucz1mdW5jdGlvbih0LGUpe3JldHVybiBNZC53YWxrVG9rZW5zKHQsZSl9O2VuLnBhcnNlSW5saW5lPU1kLnBhcnNlSW5saW5lO2VuLlBhcnNlcj1JdTtlbi5wYXJzZXI9SXUucGFyc2U7ZW4uUmVuZGVyZXI9eW07ZW4uVGV4dFJlbmRlcmVyPUN2O2VuLkxleGVyPU11O2VuLmxleGVyPU11LmxleDtlbi5Ub2tlbml6ZXI9Z207ZW4uSG9va3M9bW07ZW4ucGFyc2U9ZW47UEV0PWVuLm9wdGlvbnMsQkV0PWVuLnNldE9wdGlvbnMsRkV0PWVuLnVzZSx6RXQ9ZW4ud2Fsa1Rva2VucyxHRXQ9ZW4ucGFyc2VJbmxpbmUsJEV0PUl1LnBhcnNlLFZFdD1NdS5sZXh9KTtmdW5jdGlvbiB4N2UodCx7bWFya2Rvd25BdXRvV3JhcDplfSl7bGV0IG49dC5yZXBsYWNlKC88YnJcLz4vZyxgCmApLnJlcGxhY2UoL1xuezIsfS9nLGAKYCksaT1qYihuKTtyZXR1cm4gZT09PSExP2kucmVwbGFjZSgvIC9nLCImbmJzcDsiKTppfWZ1bmN0aW9uIHNqKHQsZT17fSl7bGV0IHI9eDdlKHQsZSksbj1lbi5sZXhlcihyKSxpPVtbXV0sYT0wO2Z1bmN0aW9uIHMobCx1PSJub3JtYWwiKXtsLnR5cGU9PT0idGV4dCI/bC50ZXh0LnNwbGl0KGAKYCkuZm9yRWFjaCgoZixkKT0+e2QhPT0wJiYoYSsrLGkucHVzaChbXSkpLGYuc3BsaXQoIiAiKS5mb3JFYWNoKHA9PntwPXAucmVwbGFjZSgvJiMzOTsvZywiJyIpLHAmJmlbYV0ucHVzaCh7Y29udGVudDpwLHR5cGU6dX0pfSl9KTpsLnR5cGU9PT0ic3Ryb25nInx8bC50eXBlPT09ImVtIj9sLnRva2Vucy5mb3JFYWNoKGg9PntzKGgsbC50eXBlKX0pOmwudHlwZT09PSJodG1sIiYmaVthXS5wdXNoKHtjb250ZW50OmwudGV4dCx0eXBlOiJub3JtYWwifSl9cmV0dXJuIG8ocywicHJvY2Vzc05vZGUiKSxuLmZvckVhY2gobD0+e2wudHlwZT09PSJwYXJhZ3JhcGgiP2wudG9rZW5zPy5mb3JFYWNoKHU9PntzKHUpfSk6bC50eXBlPT09Imh0bWwiJiZpW2FdLnB1c2goe2NvbnRlbnQ6bC50ZXh0LHR5cGU6Im5vcm1hbCJ9KX0pLGl9ZnVuY3Rpb24gb2oodCx7bWFya2Rvd25BdXRvV3JhcDplfT17fSl7bGV0IHI9ZW4ubGV4ZXIodCk7ZnVuY3Rpb24gbihpKXtyZXR1cm4gaS50eXBlPT09InRleHQiP2U9PT0hMT9pLnRleHQucmVwbGFjZSgvXG4gKi9nLCI8YnIvPiIpLnJlcGxhY2UoLyAvZywiJm5ic3A7Iik6aS50ZXh0LnJlcGxhY2UoL1xuICovZywiPGJyLz4iKTppLnR5cGU9PT0ic3Ryb25nIj9gPHN0cm9uZz4ke2kudG9rZW5zPy5tYXAobikuam9pbigiIil9PC9zdHJvbmc+YDppLnR5cGU9PT0iZW0iP2A8ZW0+JHtpLnRva2Vucz8ubWFwKG4pLmpvaW4oIiIpfTwvZW0+YDppLnR5cGU9PT0icGFyYWdyYXBoIj9gPHA+JHtpLnRva2Vucz8ubWFwKG4pLmpvaW4oIiIpfTwvcD5gOmkudHlwZT09PSJzcGFjZSI/IiI6aS50eXBlPT09Imh0bWwiP2Ake2kudGV4dH1gOmkudHlwZT09PSJlc2NhcGUiP2kudGV4dDpgVW5zdXBwb3J0ZWQgbWFya2Rvd246ICR7aS50eXBlfWB9cmV0dXJuIG8obiwib3V0cHV0Iiksci5tYXAobikuam9pbigiIil9dmFyIGxqPU0oKCk9PnsidXNlIHN0cmljdCI7YWooKTtHUygpO28oeDdlLCJwcmVwcm9jZXNzTWFya2Rvd24iKTtvKHNqLCJtYXJrZG93blRvTGluZXMiKTtvKG9qLCJtYXJrZG93blRvSFRNTCIpfSk7ZnVuY3Rpb24gYjdlKHQpe3JldHVybiBJbnRsLlNlZ21lbnRlcj9bLi4ubmV3IEludGwuU2VnbWVudGVyKCkuc2VnbWVudCh0KV0ubWFwKGU9PmUuc2VnbWVudCk6Wy4uLnRdfWZ1bmN0aW9uIHc3ZSh0LGUpe2xldCByPWI3ZShlLmNvbnRlbnQpO3JldHVybiBjaih0LFtdLHIsZS50eXBlKX1mdW5jdGlvbiBjaih0LGUscixuKXtpZihyLmxlbmd0aD09PTApcmV0dXJuW3tjb250ZW50OmUuam9pbigiIiksdHlwZTpufSx7Y29udGVudDoiIix0eXBlOm59XTtsZXRbaSwuLi5hXT1yLHM9Wy4uLmUsaV07cmV0dXJuIHQoW3tjb250ZW50OnMuam9pbigiIiksdHlwZTpufV0pP2NqKHQscyxhLG4pOihlLmxlbmd0aD09PTAmJmkmJihlLnB1c2goaSksci5zaGlmdCgpKSxbe2NvbnRlbnQ6ZS5qb2luKCIiKSx0eXBlOm59LHtjb250ZW50OnIuam9pbigiIiksdHlwZTpufV0pfWZ1bmN0aW9uIHVqKHQsZSl7aWYodC5zb21lKCh7Y29udGVudDpyfSk9PnIuaW5jbHVkZXMoYApgKSkpdGhyb3cgbmV3IEVycm9yKCJzcGxpdExpbmVUb0ZpdFdpZHRoIGRvZXMgbm90IHN1cHBvcnQgbmV3bGluZXMgaW4gdGhlIGxpbmUiKTtyZXR1cm4gdjkodCxlKX1mdW5jdGlvbiB2OSh0LGUscj1bXSxuPVtdKXtpZih0Lmxlbmd0aD09PTApcmV0dXJuIG4ubGVuZ3RoPjAmJnIucHVzaChuKSxyLmxlbmd0aD4wP3I6W107bGV0IGk9IiI7dFswXS5jb250ZW50PT09IiAiJiYoaT0iICIsdC5zaGlmdCgpKTtsZXQgYT10LnNoaWZ0KCk/P3tjb250ZW50OiIgIix0eXBlOiJub3JtYWwifSxzPVsuLi5uXTtpZihpIT09IiImJnMucHVzaCh7Y29udGVudDppLHR5cGU6Im5vcm1hbCJ9KSxzLnB1c2goYSksZShzKSlyZXR1cm4gdjkodCxlLHIscyk7aWYobi5sZW5ndGg+MClyLnB1c2gobiksdC51bnNoaWZ0KGEpO2Vsc2UgaWYoYS5jb250ZW50KXtsZXRbbCx1XT13N2UoZSxhKTtyLnB1c2goW2xdKSx1LmNvbnRlbnQmJnQudW5zaGlmdCh1KX1yZXR1cm4gdjkodCxlLHIpfXZhciBoaj1NKCgpPT57InVzZSBzdHJpY3QiO28oYjdlLCJzcGxpdFRleHRUb0NoYXJzIik7byh3N2UsInNwbGl0V29yZFRvRml0V2lkdGgiKTtvKGNqLCJzcGxpdFdvcmRUb0ZpdFdpZHRoUmVjdXJzaW9uIik7byh1aiwic3BsaXRMaW5lVG9GaXRXaWR0aCIpO28odjksInNwbGl0TGluZVRvRml0V2lkdGhSZWN1cnNpb24iKX0pO2Z1bmN0aW9uIGZqKHQsZSl7ZSYmdC5hdHRyKCJzdHlsZSIsZSl9YXN5bmMgZnVuY3Rpb24gVDdlKHQsZSxyLG4saT0hMSl7bGV0IGE9dC5hcHBlbmQoImZvcmVpZ25PYmplY3QiKTthLmF0dHIoIndpZHRoIixgJHsxMCpyfXB4YCksYS5hdHRyKCJoZWlnaHQiLGAkezEwKnJ9cHhgKTtsZXQgcz1hLmFwcGVuZCgieGh0bWw6ZGl2IiksbD1lLmxhYmVsO2UubGFiZWwmJnlpKGUubGFiZWwpJiYobD1hd2FpdCBiaChlLmxhYmVsLnJlcGxhY2UocWUubGluZUJyZWFrUmVnZXgsYApgKSxwZSgpKSk7bGV0IHU9ZS5pc05vZGU/Im5vZGVMYWJlbCI6ImVkZ2VMYWJlbCIsaD1zLmFwcGVuZCgic3BhbiIpO2guaHRtbChsKSxmaihoLGUubGFiZWxTdHlsZSksaC5hdHRyKCJjbGFzcyIsYCR7dX0gJHtufWApLGZqKHMsZS5sYWJlbFN0eWxlKSxzLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLHMuc3R5bGUoIndoaXRlLXNwYWNlIiwibm93cmFwIikscy5zdHlsZSgibGluZS1oZWlnaHQiLCIxLjUiKSxzLnN0eWxlKCJtYXgtd2lkdGgiLHIrInB4Iikscy5zdHlsZSgidGV4dC1hbGlnbiIsImNlbnRlciIpLHMuYXR0cigieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiksaSYmcy5hdHRyKCJjbGFzcyIsImxhYmVsQmtnIik7bGV0IGY9cy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIGYud2lkdGg9PT1yJiYocy5zdHlsZSgiZGlzcGxheSIsInRhYmxlIikscy5zdHlsZSgid2hpdGUtc3BhY2UiLCJicmVhay1zcGFjZXMiKSxzLnN0eWxlKCJ3aWR0aCIscisicHgiKSxmPXMubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxhLm5vZGUoKX1mdW5jdGlvbiB4OSh0LGUscil7cmV0dXJuIHQuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoImNsYXNzIiwidGV4dC1vdXRlci10c3BhbiIpLmF0dHIoIngiLDApLmF0dHIoInkiLGUqci0uMSsiZW0iKS5hdHRyKCJkeSIscisiZW0iKX1mdW5jdGlvbiBrN2UodCxlLHIpe2xldCBuPXQuYXBwZW5kKCJ0ZXh0IiksaT14OShuLDEsZSk7YjkoaSxyKTtsZXQgYT1pLm5vZGUoKS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKTtyZXR1cm4gbi5yZW1vdmUoKSxhfWZ1bmN0aW9uIGRqKHQsZSxyKXtsZXQgbj10LmFwcGVuZCgidGV4dCIpLGk9eDkobiwxLGUpO2I5KGksW3tjb250ZW50OnIsdHlwZToibm9ybWFsIn1dKTtsZXQgYT1pLm5vZGUoKT8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIGEmJm4ucmVtb3ZlKCksYX1mdW5jdGlvbiBFN2UodCxlLHIsbj0hMSl7bGV0IGE9ZS5hcHBlbmQoImciKSxzPWEuaW5zZXJ0KCJyZWN0IikuYXR0cigiY2xhc3MiLCJiYWNrZ3JvdW5kIikuYXR0cigic3R5bGUiLCJzdHJva2U6IG5vbmUiKSxsPWEuYXBwZW5kKCJ0ZXh0IikuYXR0cigieSIsIi0xMC4xIiksdT0wO2ZvcihsZXQgaCBvZiByKXtsZXQgZj1vKHA9Pms3ZShhLDEuMSxwKTw9dCwiY2hlY2tXaWR0aCIpLGQ9ZihoKT9baF06dWooaCxmKTtmb3IobGV0IHAgb2YgZCl7bGV0IG09eDkobCx1LDEuMSk7YjkobSxwKSx1Kyt9fWlmKG4pe2xldCBoPWwubm9kZSgpLmdldEJCb3goKSxmPTI7cmV0dXJuIHMuYXR0cigieCIsaC54LWYpLmF0dHIoInkiLGgueS1mKS5hdHRyKCJ3aWR0aCIsaC53aWR0aCsyKmYpLmF0dHIoImhlaWdodCIsaC5oZWlnaHQrMipmKSxhLm5vZGUoKX1lbHNlIHJldHVybiBsLm5vZGUoKX1mdW5jdGlvbiBiOSh0LGUpe3QudGV4dCgiIiksZS5mb3JFYWNoKChyLG4pPT57bGV0IGk9dC5hcHBlbmQoInRzcGFuIikuYXR0cigiZm9udC1zdHlsZSIsci50eXBlPT09ImVtIj8iaXRhbGljIjoibm9ybWFsIikuYXR0cigiY2xhc3MiLCJ0ZXh0LWlubmVyLXRzcGFuIikuYXR0cigiZm9udC13ZWlnaHQiLHIudHlwZT09PSJzdHJvbmciPyJib2xkIjoibm9ybWFsIik7bj09PTA/aS50ZXh0KHIuY29udGVudCk6aS50ZXh0KCIgIityLmNvbnRlbnQpfSl9ZnVuY3Rpb24gdzkodCl7cmV0dXJuIHQucmVwbGFjZSgvZmFbYmtscnNdPzpmYS1bXHctXSsvZyxlPT5gPGkgY2xhc3M9JyR7ZS5yZXBsYWNlKCI6IiwiICIpfSc+PC9pPmApfXZhciBMaSxQbD1NKCgpPT57InVzZSBzdHJpY3QiO1Z0KCk7ZnIoKTtwcigpO3V0KCk7bGooKTtocigpO2hqKCk7byhmaiwiYXBwbHlTdHlsZSIpO28oVDdlLCJhZGRIdG1sU3BhbiIpO28oeDksImNyZWF0ZVRzcGFuIik7byhrN2UsImNvbXB1dGVXaWR0aE9mVGV4dCIpO28oZGosImNvbXB1dGVEaW1lbnNpb25PZlRleHQiKTtvKEU3ZSwiY3JlYXRlRm9ybWF0dGVkVGV4dCIpO28oYjksInVwZGF0ZVRleHRDb250ZW50QW5kU3R5bGVzIik7byh3OSwicmVwbGFjZUljb25TdWJzdHJpbmciKTtMaT1vKGFzeW5jKHQsZT0iIix7c3R5bGU6cj0iIixpc1RpdGxlOm49ITEsY2xhc3NlczppPSIiLHVzZUh0bWxMYWJlbHM6YT0hMCxpc05vZGU6cz0hMCx3aWR0aDpsPTIwMCxhZGRTdmdCYWNrZ3JvdW5kOnU9ITF9PXt9LGgpPT57aWYoWS5kZWJ1ZygiWFlaIGNyZWF0ZVRleHQiLGUscixuLGksYSxzLCJhZGRTdmdCYWNrZ3JvdW5kOiAiLHUpLGEpe2xldCBmPW9qKGUsaCksZD13OShNYShmKSkscD1lLnJlcGxhY2UoL1xcXFwvZywiXFwiKSxtPXtpc05vZGU6cyxsYWJlbDp5aShlKT9wOmQsbGFiZWxTdHlsZTpyLnJlcGxhY2UoImZpbGw6IiwiY29sb3I6Iil9O3JldHVybiBhd2FpdCBUN2UodCxtLGwsaSx1KX1lbHNle2xldCBmPWUucmVwbGFjZSgvPGJyXHMqXC8/Pi9nLCI8YnIvPiIpLGQ9c2ooZi5yZXBsYWNlKCI8YnI+IiwiPGJyLz4iKSxoKSxwPUU3ZShsLHQsZCxlP3U6ITEpO2lmKHMpey9zdHJva2U6Ly5leGVjKHIpJiYocj1yLnJlcGxhY2UoInN0cm9rZToiLCJsaW5lQ29sb3I6IikpO2xldCBtPXIucmVwbGFjZSgvc3Ryb2tlOlteO10rOz8vZywiIikucmVwbGFjZSgvc3Ryb2tlLXdpZHRoOlteO10rOz8vZywiIikucmVwbGFjZSgvZmlsbDpbXjtdKzs/L2csIiIpLnJlcGxhY2UoL2NvbG9yOi9nLCJmaWxsOiIpO1ZlKHApLmF0dHIoInN0eWxlIixtKX1lbHNle2xldCBtPXIucmVwbGFjZSgvc3Ryb2tlOlteO10rOz8vZywiIikucmVwbGFjZSgvc3Ryb2tlLXdpZHRoOlteO10rOz8vZywiIikucmVwbGFjZSgvZmlsbDpbXjtdKzs/L2csIiIpLnJlcGxhY2UoL2JhY2tncm91bmQ6L2csImZpbGw6Iik7VmUocCkuc2VsZWN0KCJyZWN0IikuYXR0cigic3R5bGUiLG0ucmVwbGFjZSgvYmFja2dyb3VuZDovZywiZmlsbDoiKSk7bGV0IGc9ci5yZXBsYWNlKC9zdHJva2U6W147XSs7Py9nLCIiKS5yZXBsYWNlKC9zdHJva2Utd2lkdGg6W147XSs7Py9nLCIiKS5yZXBsYWNlKC9maWxsOlteO10rOz8vZywiIikucmVwbGFjZSgvY29sb3I6L2csImZpbGw6Iik7VmUocCkuc2VsZWN0KCJ0ZXh0IikuYXR0cigic3R5bGUiLGcpfXJldHVybiBwfX0sImNyZWF0ZVRleHQiKX0pO2Z1bmN0aW9uIFd0KHQpe2xldCBlPXQubWFwKChyLG4pPT5gJHtuPT09MD8iTSI6IkwifSR7ci54fSwke3IueX1gKTtyZXR1cm4gZS5wdXNoKCJaIiksZS5qb2luKCIgIil9ZnVuY3Rpb24gV28odCxlLHIsbixpLGEpe2xldCBzPVtdLHU9ci10LGg9bi1lLGY9dS9hLGQ9MipNYXRoLlBJL2YscD1lK2gvMjtmb3IobGV0IG09MDttPD01MDttKyspe2xldCBnPW0vNTAseT10K2cqdSx2PXAraSpNYXRoLnNpbihkKih5LXQpKTtzLnB1c2goe3g6eSx5OnZ9KX1yZXR1cm4gc31mdW5jdGlvbiBPNSh0LGUscixuLGksYSl7bGV0IHM9W10sbD1pKk1hdGguUEkvMTgwLGY9KGEqTWF0aC5QSS8xODAtbCkvKG4tMSk7Zm9yKGxldCBkPTA7ZDxuO2QrKyl7bGV0IHA9bCtkKmYsbT10K3IqTWF0aC5jb3MocCksZz1lK3IqTWF0aC5zaW4ocCk7cy5wdXNoKHt4Oi1tLHk6LWd9KX1yZXR1cm4gc312YXIgc3QsSTUsamUsb3QsT3Q9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtQbCgpO1Z0KCk7cHIoKTticygpO2ZyKCk7aHIoKTtzdD1vKGFzeW5jKHQsZSxyKT0+e2xldCBuLGk9ZS51c2VIdG1sTGFiZWxzfHx4cihwZSgpPy5odG1sTGFiZWxzKTtyP249cjpuPSJub2RlIGRlZmF1bHQiO2xldCBhPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLG4pLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxzPWEuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmF0dHIoInN0eWxlIixHbihlLmxhYmVsU3R5bGUpKSxsO2UubGFiZWw9PT12b2lkIDA/bD0iIjpsPXR5cGVvZiBlLmxhYmVsPT0ic3RyaW5nIj9lLmxhYmVsOmUubGFiZWxbMF07bGV0IHU9YXdhaXQgTGkocyxrcihNYShsKSxwZSgpKSx7dXNlSHRtbExhYmVsczppLHdpZHRoOmUud2lkdGh8fHBlKCkuZmxvd2NoYXJ0Py53cmFwcGluZ1dpZHRoLGNzc0NsYXNzZXM6Im1hcmtkb3duLW5vZGUtbGFiZWwiLHN0eWxlOmUubGFiZWxTdHlsZSxhZGRTdmdCYWNrZ3JvdW5kOiEhZS5pY29ufHwhIWUuaW1nfSksaD11LmdldEJCb3goKSxmPShlPy5wYWRkaW5nPz8wKS8yO2lmKGkpe2xldCBkPXUuY2hpbGRyZW5bMF0scD1WZSh1KSxtPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImltZyIpO2lmKG0pe2xldCBnPWwucmVwbGFjZSgvPGltZ1tePl0qPi9nLCIiKS50cmltKCk9PT0iIjthd2FpdCBQcm9taXNlLmFsbChbLi4ubV0ubWFwKHk9Pm5ldyBQcm9taXNlKHY9PntmdW5jdGlvbiB4KCl7aWYoeS5zdHlsZS5kaXNwbGF5PSJmbGV4Iix5LnN0eWxlLmZsZXhEaXJlY3Rpb249ImNvbHVtbiIsZyl7bGV0IGI9cGUoKS5mb250U2l6ZT9wZSgpLmZvbnRTaXplOndpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmZvbnRTaXplLHc9NSxbXz11ci5mb250U2l6ZV09SG8oYiksVD1fKncrInB4Ijt5LnN0eWxlLm1pbldpZHRoPVQseS5zdHlsZS5tYXhXaWR0aD1UfWVsc2UgeS5zdHlsZS53aWR0aD0iMTAwJSI7dih5KX1vKHgsInNldHVwSW1hZ2UiKSxzZXRUaW1lb3V0KCgpPT57eS5jb21wbGV0ZSYmeCgpfSkseS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIseCkseS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIix4KX0pKSl9aD1kLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHAuYXR0cigid2lkdGgiLGgud2lkdGgpLHAuYXR0cigiaGVpZ2h0IixoLmhlaWdodCl9cmV0dXJuIGk/cy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistaC53aWR0aC8yKyIsICIrLWguaGVpZ2h0LzIrIikiKTpzLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCAiKy1oLmhlaWdodC8yKyIpIiksZS5jZW50ZXJMYWJlbCYmcy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistaC53aWR0aC8yKyIsICIrLWguaGVpZ2h0LzIrIikiKSxzLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHtzaGFwZVN2ZzphLGJib3g6aCxoYWxmUGFkZGluZzpmLGxhYmVsOnN9fSwibGFiZWxIZWxwZXIiKSxJNT1vKGFzeW5jKHQsZSxyKT0+e2xldCBuPXIudXNlSHRtbExhYmVsc3x8eHIocGUoKT8uZmxvd2NoYXJ0Py5odG1sTGFiZWxzKSxpPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmF0dHIoInN0eWxlIixyLmxhYmVsU3R5bGV8fCIiKSxhPWF3YWl0IExpKGksa3IoTWEoZSkscGUoKSkse3VzZUh0bWxMYWJlbHM6bix3aWR0aDpyLndpZHRofHxwZSgpPy5mbG93Y2hhcnQ/LndyYXBwaW5nV2lkdGgsc3R5bGU6ci5sYWJlbFN0eWxlLGFkZFN2Z0JhY2tncm91bmQ6ISFyLmljb258fCEhci5pbWd9KSxzPWEuZ2V0QkJveCgpLGw9ci5wYWRkaW5nLzI7aWYoeHIocGUoKT8uZmxvd2NoYXJ0Py5odG1sTGFiZWxzKSl7bGV0IHU9YS5jaGlsZHJlblswXSxoPVZlKGEpO3M9dS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoLmF0dHIoIndpZHRoIixzLndpZHRoKSxoLmF0dHIoImhlaWdodCIscy5oZWlnaHQpfXJldHVybiBuP2kuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXMud2lkdGgvMisiLCAiKy1zLmhlaWdodC8yKyIpIik6aS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIistcy5oZWlnaHQvMisiKSIpLHIuY2VudGVyTGFiZWwmJmkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXMud2lkdGgvMisiLCAiKy1zLmhlaWdodC8yKyIpIiksaS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSx7c2hhcGVTdmc6dCxiYm94OnMsaGFsZlBhZGRpbmc6bCxsYWJlbDppfX0sImluc2VydExhYmVsIiksamU9bygodCxlKT0+e2xldCByPWUubm9kZSgpLmdldEJCb3goKTt0LndpZHRoPXIud2lkdGgsdC5oZWlnaHQ9ci5oZWlnaHR9LCJ1cGRhdGVOb2RlQm91bmRzIiksb3Q9bygodCxlKT0+KHQubG9vaz09PSJoYW5kRHJhd24iPyJyb3VnaC1ub2RlIjoibm9kZSIpKyIgIit0LmNzc0NsYXNzZXMrIiAiKyhlfHwiIiksImdldE5vZGVDbGFzc2VzIik7byhXdCwiY3JlYXRlUGF0aEZyb21Qb2ludHMiKTtvKFdvLCJnZW5lcmF0ZUZ1bGxTaW5lV2F2ZVBvaW50cyIpO28oTzUsImdlbmVyYXRlQ2lyY2xlUG9pbnRzIil9KTtmdW5jdGlvbiBTN2UodCxlKXtyZXR1cm4gdC5pbnRlcnNlY3QoZSl9dmFyIHBqLG1qPU0oKCk9PnsidXNlIHN0cmljdCI7byhTN2UsImludGVyc2VjdE5vZGUiKTtwaj1TN2V9KTtmdW5jdGlvbiBDN2UodCxlLHIsbil7dmFyIGk9dC54LGE9dC55LHM9aS1uLngsbD1hLW4ueSx1PU1hdGguc3FydChlKmUqbCpsK3IqcipzKnMpLGg9TWF0aC5hYnMoZSpyKnMvdSk7bi54PGkmJihoPS1oKTt2YXIgZj1NYXRoLmFicyhlKnIqbC91KTtyZXR1cm4gbi55PGEmJihmPS1mKSx7eDppK2gseTphK2Z9fXZhciBQNSxUOT1NKCgpPT57InVzZSBzdHJpY3QiO28oQzdlLCJpbnRlcnNlY3RFbGxpcHNlIik7UDU9QzdlfSk7ZnVuY3Rpb24gQTdlKHQsZSxyKXtyZXR1cm4gUDUodCxlLGUscil9dmFyIGdqLHlqPU0oKCk9PnsidXNlIHN0cmljdCI7VDkoKTtvKEE3ZSwiaW50ZXJzZWN0Q2lyY2xlIik7Z2o9QTdlfSk7ZnVuY3Rpb24gXzdlKHQsZSxyLG4pe3ZhciBpLGEscyxsLHUsaCxmLGQscCxtLGcseSx2LHgsYjtpZihpPWUueS10Lnkscz10LngtZS54LHU9ZS54KnQueS10LngqZS55LHA9aSpyLngrcypyLnkrdSxtPWkqbi54K3Mqbi55K3UsIShwIT09MCYmbSE9PTAmJnZqKHAsbSkpJiYoYT1uLnktci55LGw9ci54LW4ueCxoPW4ueCpyLnktci54Km4ueSxmPWEqdC54K2wqdC55K2gsZD1hKmUueCtsKmUueStoLCEoZiE9PTAmJmQhPT0wJiZ2aihmLGQpKSYmKGc9aSpsLWEqcyxnIT09MCkpKXJldHVybiB5PU1hdGguYWJzKGcvMiksdj1zKmgtbCp1LHg9djwwPyh2LXkpL2c6KHYreSkvZyx2PWEqdS1pKmgsYj12PDA/KHYteSkvZzoodit5KS9nLHt4LHk6Yn19ZnVuY3Rpb24gdmoodCxlKXtyZXR1cm4gdCplPjB9dmFyIHhqLGJqPU0oKCk9PnsidXNlIHN0cmljdCI7byhfN2UsImludGVyc2VjdExpbmUiKTtvKHZqLCJzYW1lU2lnbiIpO3hqPV83ZX0pO2Z1bmN0aW9uIEw3ZSh0LGUscil7bGV0IG49dC54LGk9dC55LGE9W10scz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksbD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7dHlwZW9mIGUuZm9yRWFjaD09ImZ1bmN0aW9uIj9lLmZvckVhY2goZnVuY3Rpb24oZil7cz1NYXRoLm1pbihzLGYueCksbD1NYXRoLm1pbihsLGYueSl9KToocz1NYXRoLm1pbihzLGUueCksbD1NYXRoLm1pbihsLGUueSkpO2xldCB1PW4tdC53aWR0aC8yLXMsaD1pLXQuaGVpZ2h0LzItbDtmb3IobGV0IGY9MDtmPGUubGVuZ3RoO2YrKyl7bGV0IGQ9ZVtmXSxwPWVbZjxlLmxlbmd0aC0xP2YrMTowXSxtPXhqKHQscix7eDp1K2QueCx5OmgrZC55fSx7eDp1K3AueCx5OmgrcC55fSk7bSYmYS5wdXNoKG0pfXJldHVybiBhLmxlbmd0aD8oYS5sZW5ndGg+MSYmYS5zb3J0KGZ1bmN0aW9uKGYsZCl7bGV0IHA9Zi54LXIueCxtPWYueS1yLnksZz1NYXRoLnNxcnQocCpwK20qbSkseT1kLngtci54LHY9ZC55LXIueSx4PU1hdGguc3FydCh5Knkrdip2KTtyZXR1cm4gZzx4Py0xOmc9PT14PzA6MX0pLGFbMF0pOnR9dmFyIHdqLFRqPU0oKCk9PnsidXNlIHN0cmljdCI7YmooKTtvKEw3ZSwiaW50ZXJzZWN0UG9seWdvbiIpO3dqPUw3ZX0pO3ZhciBEN2UsSGgsazk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtEN2U9bygodCxlKT0+e3ZhciByPXQueCxuPXQueSxpPWUueC1yLGE9ZS55LW4scz10LndpZHRoLzIsbD10LmhlaWdodC8yLHUsaDtyZXR1cm4gTWF0aC5hYnMoYSkqcz5NYXRoLmFicyhpKSpsPyhhPDAmJihsPS1sKSx1PWE9PT0wPzA6bCppL2EsaD1sKTooaTwwJiYocz0tcyksdT1zLGg9aT09PTA/MDpzKmEvaSkse3g6cit1LHk6bitofX0sImludGVyc2VjdFJlY3QiKSxIaD1EN2V9KTt2YXIgWWUscXQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjttaigpO3lqKCk7VDkoKTtUaigpO2s5KCk7WWU9e25vZGU6cGosY2lyY2xlOmdqLGVsbGlwc2U6UDUscG9seWdvbjp3aixyZWN0OkhofX0pO3ZhciBraixTYyxON2UsWmUsS2UsWHQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWdCgpO2tqPW8odD0+e2xldHtoYW5kRHJhd25TZWVkOmV9PXBlKCk7cmV0dXJue2ZpbGw6dCxoYWNodXJlQW5nbGU6MTIwLGhhY2h1cmVHYXA6NCxmaWxsV2VpZ2h0OjIscm91Z2huZXNzOi43LHN0cm9rZTp0LHNlZWQ6ZX19LCJzb2xpZFN0YXRlRmlsbCIpLFNjPW8odD0+e2xldCBlPU43ZShbLi4udC5jc3NDb21waWxlZFN0eWxlc3x8W10sLi4udC5jc3NTdHlsZXN8fFtdXSk7cmV0dXJue3N0eWxlc01hcDplLHN0eWxlc0FycmF5OlsuLi5lXX19LCJjb21waWxlU3R5bGVzIiksTjdlPW8odD0+e2xldCBlPW5ldyBNYXA7cmV0dXJuIHQuZm9yRWFjaChyPT57bGV0W24saV09ci5zcGxpdCgiOiIpO2Uuc2V0KG4udHJpbSgpLGk/LnRyaW0oKSl9KSxlfSwic3R5bGVzMk1hcCIpLFplPW8odD0+e2xldHtzdHlsZXNBcnJheTplfT1TYyh0KSxyPVtdLG49W10saT1bXSxhPVtdO3JldHVybiBlLmZvckVhY2gocz0+e2xldCBsPXNbMF07bD09PSJjb2xvciJ8fGw9PT0iZm9udC1zaXplInx8bD09PSJmb250LWZhbWlseSJ8fGw9PT0iZm9udC13ZWlnaHQifHxsPT09ImZvbnQtc3R5bGUifHxsPT09InRleHQtZGVjb3JhdGlvbiJ8fGw9PT0idGV4dC1hbGlnbiJ8fGw9PT0idGV4dC10cmFuc2Zvcm0ifHxsPT09ImxpbmUtaGVpZ2h0Inx8bD09PSJsZXR0ZXItc3BhY2luZyJ8fGw9PT0id29yZC1zcGFjaW5nInx8bD09PSJ0ZXh0LXNoYWRvdyJ8fGw9PT0idGV4dC1vdmVyZmxvdyJ8fGw9PT0id2hpdGUtc3BhY2UifHxsPT09IndvcmQtd3JhcCJ8fGw9PT0id29yZC1icmVhayJ8fGw9PT0ib3ZlcmZsb3ctd3JhcCJ8fGw9PT0iaHlwaGVucyI/ci5wdXNoKHMuam9pbigiOiIpKyIgIWltcG9ydGFudCIpOihuLnB1c2gocy5qb2luKCI6IikrIiAhaW1wb3J0YW50IiksbC5pbmNsdWRlcygic3Ryb2tlIikmJmkucHVzaChzLmpvaW4oIjoiKSsiICFpbXBvcnRhbnQiKSxsPT09ImZpbGwiJiZhLnB1c2gocy5qb2luKCI6IikrIiAhaW1wb3J0YW50IikpfSkse2xhYmVsU3R5bGVzOnIuam9pbigiOyIpLG5vZGVTdHlsZXM6bi5qb2luKCI7Iiksc3R5bGVzQXJyYXk6ZSxib3JkZXJTdHlsZXM6aSxiYWNrZ3JvdW5kU3R5bGVzOmF9fSwic3R5bGVzMlN0cmluZyIpLEtlPW8oKHQsZSk9PntsZXR7dGhlbWVWYXJpYWJsZXM6cixoYW5kRHJhd25TZWVkOm59PXBlKCkse25vZGVCb3JkZXI6aSxtYWluQmtnOmF9PXIse3N0eWxlc01hcDpzfT1TYyh0KTtyZXR1cm4gT2JqZWN0LmFzc2lnbih7cm91Z2huZXNzOi43LGZpbGw6cy5nZXQoImZpbGwiKXx8YSxmaWxsU3R5bGU6ImhhY2h1cmUiLGZpbGxXZWlnaHQ6NCxoYWNodXJlR2FwOjUuMixzdHJva2U6cy5nZXQoInN0cm9rZSIpfHxpLHNlZWQ6bixzdHJva2VXaWR0aDpzLmdldCgic3Ryb2tlLXdpZHRoIik/LnJlcGxhY2UoInB4IiwiIil8fDEuMyxmaWxsTGluZURhc2g6WzAsMF19LGUpfSwidXNlck5vZGVPdmVycmlkZXMiKX0pO2Z1bmN0aW9uIEU5KHQsZSxyKXtpZih0JiZ0Lmxlbmd0aCl7bGV0W24saV09ZSxhPU1hdGguUEkvMTgwKnIscz1NYXRoLmNvcyhhKSxsPU1hdGguc2luKGEpO2ZvcihsZXQgdSBvZiB0KXtsZXRbaCxmXT11O3VbMF09KGgtbikqcy0oZi1pKSpsK24sdVsxXT0oaC1uKSpsKyhmLWkpKnMraX19fWZ1bmN0aW9uIFI3ZSh0LGUpe3JldHVybiB0WzBdPT09ZVswXSYmdFsxXT09PWVbMV19ZnVuY3Rpb24gTTdlKHQsZSxyLG49MSl7bGV0IGk9cixhPU1hdGgubWF4KGUsLjEpLHM9dFswXSYmdFswXVswXSYmdHlwZW9mIHRbMF1bMF09PSJudW1iZXIiP1t0XTp0LGw9WzAsMF07aWYoaSlmb3IobGV0IGggb2YgcylFOShoLGwsaSk7bGV0IHU9ZnVuY3Rpb24oaCxmLGQpe2xldCBwPVtdO2ZvcihsZXQgYiBvZiBoKXtsZXQgdz1bLi4uYl07UjdlKHdbMF0sd1t3Lmxlbmd0aC0xXSl8fHcucHVzaChbd1swXVswXSx3WzBdWzFdXSksdy5sZW5ndGg+MiYmcC5wdXNoKHcpfWxldCBtPVtdO2Y9TWF0aC5tYXgoZiwuMSk7bGV0IGc9W107Zm9yKGxldCBiIG9mIHApZm9yKGxldCB3PTA7dzxiLmxlbmd0aC0xO3crKyl7bGV0IF89Ylt3XSxUPWJbdysxXTtpZihfWzFdIT09VFsxXSl7bGV0IEU9TWF0aC5taW4oX1sxXSxUWzFdKTtnLnB1c2goe3ltaW46RSx5bWF4Ok1hdGgubWF4KF9bMV0sVFsxXSkseDpFPT09X1sxXT9fWzBdOlRbMF0saXNsb3BlOihUWzBdLV9bMF0pLyhUWzFdLV9bMV0pfSl9fWlmKGcuc29ydCgoYix3KT0+Yi55bWluPHcueW1pbj8tMTpiLnltaW4+dy55bWluPzE6Yi54PHcueD8tMTpiLng+dy54PzE6Yi55bWF4PT09dy55bWF4PzA6KGIueW1heC13LnltYXgpL01hdGguYWJzKGIueW1heC13LnltYXgpKSwhZy5sZW5ndGgpcmV0dXJuIG07bGV0IHk9W10sdj1nWzBdLnltaW4seD0wO2Zvcig7eS5sZW5ndGh8fGcubGVuZ3RoOyl7aWYoZy5sZW5ndGgpe2xldCBiPS0xO2ZvcihsZXQgdz0wO3c8Zy5sZW5ndGgmJiEoZ1t3XS55bWluPnYpO3crKyliPXc7Zy5zcGxpY2UoMCxiKzEpLmZvckVhY2godz0+e3kucHVzaCh7czp2LGVkZ2U6d30pfSl9aWYoeT15LmZpbHRlcihiPT4hKGIuZWRnZS55bWF4PD12KSkseS5zb3J0KChiLHcpPT5iLmVkZ2UueD09PXcuZWRnZS54PzA6KGIuZWRnZS54LXcuZWRnZS54KS9NYXRoLmFicyhiLmVkZ2UueC13LmVkZ2UueCkpLChkIT09MXx8eCVmPT0wKSYmeS5sZW5ndGg+MSlmb3IobGV0IGI9MDtiPHkubGVuZ3RoO2IrPTIpe2xldCB3PWIrMTtpZih3Pj15Lmxlbmd0aClicmVhaztsZXQgXz15W2JdLmVkZ2UsVD15W3ddLmVkZ2U7bS5wdXNoKFtbTWF0aC5yb3VuZChfLngpLHZdLFtNYXRoLnJvdW5kKFQueCksdl1dKX12Kz1kLHkuZm9yRWFjaChiPT57Yi5lZGdlLng9Yi5lZGdlLngrZCpiLmVkZ2UuaXNsb3BlfSkseCsrfXJldHVybiBtfShzLGEsbik7aWYoaSl7Zm9yKGxldCBoIG9mIHMpRTkoaCxsLC1pKTsoZnVuY3Rpb24oaCxmLGQpe2xldCBwPVtdO2guZm9yRWFjaChtPT5wLnB1c2goLi4ubSkpLEU5KHAsZixkKX0pKHUsbCwtaSl9cmV0dXJuIHV9ZnVuY3Rpb24gUnYodCxlKXt2YXIgcjtsZXQgbj1lLmhhY2h1cmVBbmdsZSs5MCxpPWUuaGFjaHVyZUdhcDtpPDAmJihpPTQqZS5zdHJva2VXaWR0aCksaT1NYXRoLnJvdW5kKE1hdGgubWF4KGksLjEpKTtsZXQgYT0xO3JldHVybiBlLnJvdWdobmVzcz49MSYmKCgocj1lLnJhbmRvbWl6ZXIpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5uZXh0KCkpfHxNYXRoLnJhbmRvbSgpKT4uNyYmKGE9aSksTTdlKHQsaSxuLGF8fDEpfWZ1bmN0aW9uIFc1KHQpe2xldCBlPXRbMF0scj10WzFdO3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coZVswXS1yWzBdLDIpK01hdGgucG93KGVbMV0tclsxXSwyKSl9ZnVuY3Rpb24gQzkodCxlKXtyZXR1cm4gdC50eXBlPT09ZX1mdW5jdGlvbiBHOSh0KXtsZXQgZT1bXSxyPWZ1bmN0aW9uKHMpe2xldCBsPW5ldyBBcnJheTtmb3IoO3MhPT0iIjspaWYocy5tYXRjaCgvXihbIFx0XHJcbixdKykvKSlzPXMuc3Vic3RyKFJlZ0V4cC4kMS5sZW5ndGgpO2Vsc2UgaWYocy5tYXRjaCgvXihbYUFjQ2hIbExtTXFRc1N0VHZWelpdKS8pKWxbbC5sZW5ndGhdPXt0eXBlOkk3ZSx0ZXh0OlJlZ0V4cC4kMX0scz1zLnN1YnN0cihSZWdFeHAuJDEubGVuZ3RoKTtlbHNle2lmKCFzLm1hdGNoKC9eKChbLStdP1swLTldKyhcLlswLTldKik/fFstK10/XC5bMC05XSspKFtlRV1bLStdP1swLTldKyk/KS8pKXJldHVybltdO2xbbC5sZW5ndGhdPXt0eXBlOlM5LHRleHQ6YCR7cGFyc2VGbG9hdChSZWdFeHAuJDEpfWB9LHM9cy5zdWJzdHIoUmVnRXhwLiQxLmxlbmd0aCl9cmV0dXJuIGxbbC5sZW5ndGhdPXt0eXBlOkVqLHRleHQ6IiJ9LGx9KHQpLG49IkJPRCIsaT0wLGE9cltpXTtmb3IoOyFDOShhLEVqKTspe2xldCBzPTAsbD1bXTtpZihuPT09IkJPRCIpe2lmKGEudGV4dCE9PSJNIiYmYS50ZXh0IT09Im0iKXJldHVybiBHOSgiTTAsMCIrdCk7aSsrLHM9QjVbYS50ZXh0XSxuPWEudGV4dH1lbHNlIEM5KGEsUzkpP3M9QjVbbl06KGkrKyxzPUI1W2EudGV4dF0sbj1hLnRleHQpO2lmKCEoaStzPHIubGVuZ3RoKSl0aHJvdyBuZXcgRXJyb3IoIlBhdGggZGF0YSBlbmRlZCBzaG9ydCIpO2ZvcihsZXQgdT1pO3U8aStzO3UrKyl7bGV0IGg9clt1XTtpZighQzkoaCxTOSkpdGhyb3cgbmV3IEVycm9yKCJQYXJhbSBub3QgYSBudW1iZXI6ICIrbisiLCIraC50ZXh0KTtsW2wubGVuZ3RoXT0raC50ZXh0fWlmKHR5cGVvZiBCNVtuXSE9Im51bWJlciIpdGhyb3cgbmV3IEVycm9yKCJCYWQgc2VnbWVudDogIituKTt7bGV0IHU9e2tleTpuLGRhdGE6bH07ZS5wdXNoKHUpLGkrPXMsYT1yW2ldLG49PT0iTSImJihuPSJMIiksbj09PSJtIiYmKG49ImwiKX19cmV0dXJuIGV9ZnVuY3Rpb24gUmoodCl7bGV0IGU9MCxyPTAsbj0wLGk9MCxhPVtdO2ZvcihsZXR7a2V5OnMsZGF0YTpsfW9mIHQpc3dpdGNoKHMpe2Nhc2UiTSI6YS5wdXNoKHtrZXk6Ik0iLGRhdGE6Wy4uLmxdfSksW2Uscl09bCxbbixpXT1sO2JyZWFrO2Nhc2UibSI6ZSs9bFswXSxyKz1sWzFdLGEucHVzaCh7a2V5OiJNIixkYXRhOltlLHJdfSksbj1lLGk9cjticmVhaztjYXNlIkwiOmEucHVzaCh7a2V5OiJMIixkYXRhOlsuLi5sXX0pLFtlLHJdPWw7YnJlYWs7Y2FzZSJsIjplKz1sWzBdLHIrPWxbMV0sYS5wdXNoKHtrZXk6IkwiLGRhdGE6W2Uscl19KTticmVhaztjYXNlIkMiOmEucHVzaCh7a2V5OiJDIixkYXRhOlsuLi5sXX0pLGU9bFs0XSxyPWxbNV07YnJlYWs7Y2FzZSJjIjp7bGV0IHU9bC5tYXAoKGgsZik9PmYlMj9oK3I6aCtlKTthLnB1c2goe2tleToiQyIsZGF0YTp1fSksZT11WzRdLHI9dVs1XTticmVha31jYXNlIlEiOmEucHVzaCh7a2V5OiJRIixkYXRhOlsuLi5sXX0pLGU9bFsyXSxyPWxbM107YnJlYWs7Y2FzZSJxIjp7bGV0IHU9bC5tYXAoKGgsZik9PmYlMj9oK3I6aCtlKTthLnB1c2goe2tleToiUSIsZGF0YTp1fSksZT11WzJdLHI9dVszXTticmVha31jYXNlIkEiOmEucHVzaCh7a2V5OiJBIixkYXRhOlsuLi5sXX0pLGU9bFs1XSxyPWxbNl07YnJlYWs7Y2FzZSJhIjplKz1sWzVdLHIrPWxbNl0sYS5wdXNoKHtrZXk6IkEiLGRhdGE6W2xbMF0sbFsxXSxsWzJdLGxbM10sbFs0XSxlLHJdfSk7YnJlYWs7Y2FzZSJIIjphLnB1c2goe2tleToiSCIsZGF0YTpbLi4ubF19KSxlPWxbMF07YnJlYWs7Y2FzZSJoIjplKz1sWzBdLGEucHVzaCh7a2V5OiJIIixkYXRhOltlXX0pO2JyZWFrO2Nhc2UiViI6YS5wdXNoKHtrZXk6IlYiLGRhdGE6Wy4uLmxdfSkscj1sWzBdO2JyZWFrO2Nhc2UidiI6cis9bFswXSxhLnB1c2goe2tleToiViIsZGF0YTpbcl19KTticmVhaztjYXNlIlMiOmEucHVzaCh7a2V5OiJTIixkYXRhOlsuLi5sXX0pLGU9bFsyXSxyPWxbM107YnJlYWs7Y2FzZSJzIjp7bGV0IHU9bC5tYXAoKGgsZik9PmYlMj9oK3I6aCtlKTthLnB1c2goe2tleToiUyIsZGF0YTp1fSksZT11WzJdLHI9dVszXTticmVha31jYXNlIlQiOmEucHVzaCh7a2V5OiJUIixkYXRhOlsuLi5sXX0pLGU9bFswXSxyPWxbMV07YnJlYWs7Y2FzZSJ0IjplKz1sWzBdLHIrPWxbMV0sYS5wdXNoKHtrZXk6IlQiLGRhdGE6W2Uscl19KTticmVhaztjYXNlIloiOmNhc2UieiI6YS5wdXNoKHtrZXk6IloiLGRhdGE6W119KSxlPW4scj1pfXJldHVybiBhfWZ1bmN0aW9uIE1qKHQpe2xldCBlPVtdLHI9IiIsbj0wLGk9MCxhPTAscz0wLGw9MCx1PTA7Zm9yKGxldHtrZXk6aCxkYXRhOmZ9b2YgdCl7c3dpdGNoKGgpe2Nhc2UiTSI6ZS5wdXNoKHtrZXk6Ik0iLGRhdGE6Wy4uLmZdfSksW24saV09ZixbYSxzXT1mO2JyZWFrO2Nhc2UiQyI6ZS5wdXNoKHtrZXk6IkMiLGRhdGE6Wy4uLmZdfSksbj1mWzRdLGk9Zls1XSxsPWZbMl0sdT1mWzNdO2JyZWFrO2Nhc2UiTCI6ZS5wdXNoKHtrZXk6IkwiLGRhdGE6Wy4uLmZdfSksW24saV09ZjticmVhaztjYXNlIkgiOm49ZlswXSxlLnB1c2goe2tleToiTCIsZGF0YTpbbixpXX0pO2JyZWFrO2Nhc2UiViI6aT1mWzBdLGUucHVzaCh7a2V5OiJMIixkYXRhOltuLGldfSk7YnJlYWs7Y2FzZSJTIjp7bGV0IGQ9MCxwPTA7cj09PSJDInx8cj09PSJTIj8oZD1uKyhuLWwpLHA9aSsoaS11KSk6KGQ9bixwPWkpLGUucHVzaCh7a2V5OiJDIixkYXRhOltkLHAsLi4uZl19KSxsPWZbMF0sdT1mWzFdLG49ZlsyXSxpPWZbM107YnJlYWt9Y2FzZSJUIjp7bGV0W2QscF09ZixtPTAsZz0wO3I9PT0iUSJ8fHI9PT0iVCI/KG09bisobi1sKSxnPWkrKGktdSkpOihtPW4sZz1pKTtsZXQgeT1uKzIqKG0tbikvMyx2PWkrMiooZy1pKS8zLHg9ZCsyKihtLWQpLzMsYj1wKzIqKGctcCkvMztlLnB1c2goe2tleToiQyIsZGF0YTpbeSx2LHgsYixkLHBdfSksbD1tLHU9ZyxuPWQsaT1wO2JyZWFrfWNhc2UiUSI6e2xldFtkLHAsbSxnXT1mLHk9bisyKihkLW4pLzMsdj1pKzIqKHAtaSkvMyx4PW0rMiooZC1tKS8zLGI9ZysyKihwLWcpLzM7ZS5wdXNoKHtrZXk6IkMiLGRhdGE6W3ksdix4LGIsbSxnXX0pLGw9ZCx1PXAsbj1tLGk9ZzticmVha31jYXNlIkEiOntsZXQgZD1NYXRoLmFicyhmWzBdKSxwPU1hdGguYWJzKGZbMV0pLG09ZlsyXSxnPWZbM10seT1mWzRdLHY9Zls1XSx4PWZbNl07ZD09PTB8fHA9PT0wPyhlLnB1c2goe2tleToiQyIsZGF0YTpbbixpLHYseCx2LHhdfSksbj12LGk9eCk6KG4hPT12fHxpIT09eCkmJihJaihuLGksdix4LGQscCxtLGcseSkuZm9yRWFjaChmdW5jdGlvbihiKXtlLnB1c2goe2tleToiQyIsZGF0YTpifSl9KSxuPXYsaT14KTticmVha31jYXNlIloiOmUucHVzaCh7a2V5OiJaIixkYXRhOltdfSksbj1hLGk9c31yPWh9cmV0dXJuIGV9ZnVuY3Rpb24gTHYodCxlLHIpe3JldHVyblt0Kk1hdGguY29zKHIpLWUqTWF0aC5zaW4ociksdCpNYXRoLnNpbihyKStlKk1hdGguY29zKHIpXX1mdW5jdGlvbiBJaih0LGUscixuLGksYSxzLGwsdSxoKXtsZXQgZj0oZD1zLE1hdGguUEkqZC8xODApO3ZhciBkO2xldCBwPVtdLG09MCxnPTAseT0wLHY9MDtpZihoKVttLGcseSx2XT1oO2Vsc2V7W3QsZV09THYodCxlLC1mKSxbcixuXT1MdihyLG4sLWYpO2xldCBSPSh0LXIpLzIsQz0oZS1uKS8yLE89UipSLyhpKmkpK0MqQy8oYSphKTtPPjEmJihPPU1hdGguc3FydChPKSxpKj1PLGEqPU8pO2xldCBOPWkqaSxQPWEqYSxGPU4qUC1OKkMqQy1QKlIqUixCPU4qQypDK1AqUipSLEc9KGw9PT11Py0xOjEpKk1hdGguc3FydChNYXRoLmFicyhGL0IpKTt5PUcqaSpDL2ErKHQrcikvMix2PUcqLWEqUi9pKyhlK24pLzIsbT1NYXRoLmFzaW4ocGFyc2VGbG9hdCgoKGUtdikvYSkudG9GaXhlZCg5KSkpLGc9TWF0aC5hc2luKHBhcnNlRmxvYXQoKChuLXYpL2EpLnRvRml4ZWQoOSkpKSx0PHkmJihtPU1hdGguUEktbSkscjx5JiYoZz1NYXRoLlBJLWcpLG08MCYmKG09MipNYXRoLlBJK20pLGc8MCYmKGc9MipNYXRoLlBJK2cpLHUmJm0+ZyYmKG0tPTIqTWF0aC5QSSksIXUmJmc+bSYmKGctPTIqTWF0aC5QSSl9bGV0IHg9Zy1tO2lmKE1hdGguYWJzKHgpPjEyMCpNYXRoLlBJLzE4MCl7bGV0IFI9ZyxDPXIsTz1uO2c9dSYmZz5tP20rMTIwKk1hdGguUEkvMTgwKjE6bSsxMjAqTWF0aC5QSS8xODAqLTEscD1JaihyPXkraSpNYXRoLmNvcyhnKSxuPXYrYSpNYXRoLnNpbihnKSxDLE8saSxhLHMsMCx1LFtnLFIseSx2XSl9eD1nLW07bGV0IGI9TWF0aC5jb3MobSksdz1NYXRoLnNpbihtKSxfPU1hdGguY29zKGcpLFQ9TWF0aC5zaW4oZyksRT1NYXRoLnRhbih4LzQpLEw9NC8zKmkqRSxTPTQvMyphKkUsQT1bdCxlXSxJPVt0K0wqdyxlLVMqYl0sRD1bcitMKlQsbi1TKl9dLGs9W3Isbl07aWYoSVswXT0yKkFbMF0tSVswXSxJWzFdPTIqQVsxXS1JWzFdLGgpcmV0dXJuW0ksRCxrXS5jb25jYXQocCk7e3A9W0ksRCxrXS5jb25jYXQocCk7bGV0IFI9W107Zm9yKGxldCBDPTA7QzxwLmxlbmd0aDtDKz0zKXtsZXQgTz1MdihwW0NdWzBdLHBbQ11bMV0sZiksTj1MdihwW0MrMV1bMF0scFtDKzFdWzFdLGYpLFA9THYocFtDKzJdWzBdLHBbQysyXVsxXSxmKTtSLnB1c2goW09bMF0sT1sxXSxOWzBdLE5bMV0sUFswXSxQWzFdXSl9cmV0dXJuIFJ9fWZ1bmN0aW9uIE9qKHQsZSxyLG4saSl7cmV0dXJue3R5cGU6InBhdGgiLG9wczpXaCh0LGUscixuLGkpfX1mdW5jdGlvbiBHNSh0LGUscil7bGV0IG49KHR8fFtdKS5sZW5ndGg7aWYobj4yKXtsZXQgaT1bXTtmb3IobGV0IGE9MDthPG4tMTthKyspaS5wdXNoKC4uLldoKHRbYV1bMF0sdFthXVsxXSx0W2ErMV1bMF0sdFthKzFdWzFdLHIpKTtyZXR1cm4gZSYmaS5wdXNoKC4uLldoKHRbbi0xXVswXSx0W24tMV1bMV0sdFswXVswXSx0WzBdWzFdLHIpKSx7dHlwZToicGF0aCIsb3BzOml9fXJldHVybiBuPT09Mj9Paih0WzBdWzBdLHRbMF1bMV0sdFsxXVswXSx0WzFdWzFdLHIpOnt0eXBlOiJwYXRoIixvcHM6W119fWZ1bmN0aW9uIFA3ZSh0LGUscixuLGkpe3JldHVybiBmdW5jdGlvbihhLHMpe3JldHVybiBHNShhLCEwLHMpfShbW3QsZV0sW3QrcixlXSxbdCtyLGUrbl0sW3QsZStuXV0saSl9ZnVuY3Rpb24gU2oodCxlKXtpZih0Lmxlbmd0aCl7bGV0IHI9dHlwZW9mIHRbMF1bMF09PSJudW1iZXIiP1t0XTp0LG49RjUoclswXSwxKigxKy4yKmUucm91Z2huZXNzKSxlKSxpPWUuZGlzYWJsZU11bHRpU3Ryb2tlP1tdOkY1KHJbMF0sMS41KigxKy4yMiplLnJvdWdobmVzcyksX2ooZSkpO2ZvcihsZXQgYT0xO2E8ci5sZW5ndGg7YSsrKXtsZXQgcz1yW2FdO2lmKHMubGVuZ3RoKXtsZXQgbD1GNShzLDEqKDErLjIqZS5yb3VnaG5lc3MpLGUpLHU9ZS5kaXNhYmxlTXVsdGlTdHJva2U/W106RjUocywxLjUqKDErLjIyKmUucm91Z2huZXNzKSxfaihlKSk7Zm9yKGxldCBoIG9mIGwpaC5vcCE9PSJtb3ZlIiYmbi5wdXNoKGgpO2ZvcihsZXQgaCBvZiB1KWgub3AhPT0ibW92ZSImJmkucHVzaChoKX19cmV0dXJue3R5cGU6InBhdGgiLG9wczpuLmNvbmNhdChpKX19cmV0dXJue3R5cGU6InBhdGgiLG9wczpbXX19ZnVuY3Rpb24gUGoodCxlLHIpe2xldCBuPU1hdGguc3FydCgyKk1hdGguUEkqTWF0aC5zcXJ0KChNYXRoLnBvdyh0LzIsMikrTWF0aC5wb3coZS8yLDIpKS8yKSksaT1NYXRoLmNlaWwoTWF0aC5tYXgoci5jdXJ2ZVN0ZXBDb3VudCxyLmN1cnZlU3RlcENvdW50L01hdGguc3FydCgyMDApKm4pKSxhPTIqTWF0aC5QSS9pLHM9TWF0aC5hYnModC8yKSxsPU1hdGguYWJzKGUvMiksdT0xLXIuY3VydmVGaXR0aW5nO3JldHVybiBzKz1ucihzKnUsciksbCs9bnIobCp1LHIpLHtpbmNyZW1lbnQ6YSxyeDpzLHJ5Omx9fWZ1bmN0aW9uIE85KHQsZSxyLG4pe2xldFtpLGFdPUxqKG4uaW5jcmVtZW50LHQsZSxuLnJ4LG4ucnksMSxuLmluY3JlbWVudCpWNSguMSxWNSguNCwxLHIpLHIpLHIpLHM9VTUoaSxudWxsLHIpO2lmKCFyLmRpc2FibGVNdWx0aVN0cm9rZSYmci5yb3VnaG5lc3MhPT0wKXtsZXRbbF09TGoobi5pbmNyZW1lbnQsdCxlLG4ucngsbi5yeSwxLjUsMCxyKSx1PVU1KGwsbnVsbCxyKTtzPXMuY29uY2F0KHUpfXJldHVybntlc3RpbWF0ZWRQb2ludHM6YSxvcHNldDp7dHlwZToicGF0aCIsb3BzOnN9fX1mdW5jdGlvbiBDaih0LGUscixuLGksYSxzLGwsdSl7bGV0IGg9dCxmPWUsZD1NYXRoLmFicyhyLzIpLHA9TWF0aC5hYnMobi8yKTtkKz1uciguMDEqZCx1KSxwKz1uciguMDEqcCx1KTtsZXQgbT1pLGc9YTtmb3IoO208MDspbSs9MipNYXRoLlBJLGcrPTIqTWF0aC5QSTtnLW0+MipNYXRoLlBJJiYobT0wLGc9MipNYXRoLlBJKTtsZXQgeT0yKk1hdGguUEkvdS5jdXJ2ZVN0ZXBDb3VudCx2PU1hdGgubWluKHkvMiwoZy1tKS8yKSx4PURqKHYsaCxmLGQscCxtLGcsMSx1KTtpZighdS5kaXNhYmxlTXVsdGlTdHJva2Upe2xldCBiPURqKHYsaCxmLGQscCxtLGcsMS41LHUpO3gucHVzaCguLi5iKX1yZXR1cm4gcyYmKGw/eC5wdXNoKC4uLldoKGgsZixoK2QqTWF0aC5jb3MobSksZitwKk1hdGguc2luKG0pLHUpLC4uLldoKGgsZixoK2QqTWF0aC5jb3MoZyksZitwKk1hdGguc2luKGcpLHUpKTp4LnB1c2goe29wOiJsaW5lVG8iLGRhdGE6W2gsZl19LHtvcDoibGluZVRvIixkYXRhOltoK2QqTWF0aC5jb3MobSksZitwKk1hdGguc2luKG0pXX0pKSx7dHlwZToicGF0aCIsb3BzOnh9fWZ1bmN0aW9uIEFqKHQsZSl7bGV0IHI9TWooUmooRzkodCkpKSxuPVtdLGk9WzAsMF0sYT1bMCwwXTtmb3IobGV0e2tleTpzLGRhdGE6bH1vZiByKXN3aXRjaChzKXtjYXNlIk0iOmE9W2xbMF0sbFsxXV0saT1bbFswXSxsWzFdXTticmVhaztjYXNlIkwiOm4ucHVzaCguLi5XaChhWzBdLGFbMV0sbFswXSxsWzFdLGUpKSxhPVtsWzBdLGxbMV1dO2JyZWFrO2Nhc2UiQyI6e2xldFt1LGgsZixkLHAsbV09bDtuLnB1c2goLi4uQjdlKHUsaCxmLGQscCxtLGEsZSkpLGE9W3AsbV07YnJlYWt9Y2FzZSJaIjpuLnB1c2goLi4uV2goYVswXSxhWzFdLGlbMF0saVsxXSxlKSksYT1baVswXSxpWzFdXX1yZXR1cm57dHlwZToicGF0aCIsb3BzOm59fWZ1bmN0aW9uIEE5KHQsZSl7bGV0IHI9W107Zm9yKGxldCBuIG9mIHQpaWYobi5sZW5ndGgpe2xldCBpPWUubWF4UmFuZG9tbmVzc09mZnNldHx8MCxhPW4ubGVuZ3RoO2lmKGE+Mil7ci5wdXNoKHtvcDoibW92ZSIsZGF0YTpbblswXVswXStucihpLGUpLG5bMF1bMV0rbnIoaSxlKV19KTtmb3IobGV0IHM9MTtzPGE7cysrKXIucHVzaCh7b3A6ImxpbmVUbyIsZGF0YTpbbltzXVswXStucihpLGUpLG5bc11bMV0rbnIoaSxlKV19KX19cmV0dXJue3R5cGU6ImZpbGxQYXRoIixvcHM6cn19ZnVuY3Rpb24gdm0odCxlKXtyZXR1cm4gZnVuY3Rpb24ocixuKXtsZXQgaT1yLmZpbGxTdHlsZXx8ImhhY2h1cmUiO2lmKCFSc1tpXSlzd2l0Y2goaSl7Y2FzZSJ6aWd6YWciOlJzW2ldfHwoUnNbaV09bmV3IEw5KG4pKTticmVhaztjYXNlImNyb3NzLWhhdGNoIjpSc1tpXXx8KFJzW2ldPW5ldyBEOShuKSk7YnJlYWs7Y2FzZSJkb3RzIjpSc1tpXXx8KFJzW2ldPW5ldyBOOShuKSk7YnJlYWs7Y2FzZSJkYXNoZWQiOlJzW2ldfHwoUnNbaV09bmV3IFI5KG4pKTticmVhaztjYXNlInppZ3phZy1saW5lIjpSc1tpXXx8KFJzW2ldPW5ldyBNOShuKSk7YnJlYWs7ZGVmYXVsdDppPSJoYWNodXJlIixSc1tpXXx8KFJzW2ldPW5ldyBOdihuKSl9cmV0dXJuIFJzW2ldfShlLE83ZSkuZmlsbFBvbHlnb25zKHQsZSl9ZnVuY3Rpb24gX2oodCl7bGV0IGU9T2JqZWN0LmFzc2lnbih7fSx0KTtyZXR1cm4gZS5yYW5kb21pemVyPXZvaWQgMCx0LnNlZWQmJihlLnNlZWQ9dC5zZWVkKzEpLGV9ZnVuY3Rpb24gQmoodCl7cmV0dXJuIHQucmFuZG9taXplcnx8KHQucmFuZG9taXplcj1uZXcgSTkodC5zZWVkfHwwKSksdC5yYW5kb21pemVyLm5leHQoKX1mdW5jdGlvbiBWNSh0LGUscixuPTEpe3JldHVybiByLnJvdWdobmVzcypuKihCaihyKSooZS10KSt0KX1mdW5jdGlvbiBucih0LGUscj0xKXtyZXR1cm4gVjUoLXQsdCxlLHIpfWZ1bmN0aW9uIFdoKHQsZSxyLG4saSxhPSExKXtsZXQgcz1hP2kuZGlzYWJsZU11bHRpU3Ryb2tlRmlsbDppLmRpc2FibGVNdWx0aVN0cm9rZSxsPVA5KHQsZSxyLG4saSwhMCwhMSk7aWYocylyZXR1cm4gbDtsZXQgdT1QOSh0LGUscixuLGksITAsITApO3JldHVybiBsLmNvbmNhdCh1KX1mdW5jdGlvbiBQOSh0LGUscixuLGksYSxzKXtsZXQgbD1NYXRoLnBvdyh0LXIsMikrTWF0aC5wb3coZS1uLDIpLHU9TWF0aC5zcXJ0KGwpLGg9MTtoPXU8MjAwPzE6dT41MDA/LjQ6LS4wMDE2NjY4KnUrMS4yMzMzMzQ7bGV0IGY9aS5tYXhSYW5kb21uZXNzT2Zmc2V0fHwwO2YqZioxMDA+bCYmKGY9dS8xMCk7bGV0IGQ9Zi8yLHA9LjIrLjIqQmooaSksbT1pLmJvd2luZyppLm1heFJhbmRvbW5lc3NPZmZzZXQqKG4tZSkvMjAwLGc9aS5ib3dpbmcqaS5tYXhSYW5kb21uZXNzT2Zmc2V0Kih0LXIpLzIwMDttPW5yKG0saSxoKSxnPW5yKGcsaSxoKTtsZXQgeT1bXSx2PW8oKCk9Pm5yKGQsaSxoKSwiTSIpLHg9bygoKT0+bnIoZixpLGgpLCJrIiksYj1pLnByZXNlcnZlVmVydGljZXM7cmV0dXJuIGEmJihzP3kucHVzaCh7b3A6Im1vdmUiLGRhdGE6W3QrKGI/MDp2KCkpLGUrKGI/MDp2KCkpXX0pOnkucHVzaCh7b3A6Im1vdmUiLGRhdGE6W3QrKGI/MDpucihmLGksaCkpLGUrKGI/MDpucihmLGksaCkpXX0pKSxzP3kucHVzaCh7b3A6ImJjdXJ2ZVRvIixkYXRhOlttK3QrKHItdCkqcCt2KCksZytlKyhuLWUpKnArdigpLG0rdCsyKihyLXQpKnArdigpLGcrZSsyKihuLWUpKnArdigpLHIrKGI/MDp2KCkpLG4rKGI/MDp2KCkpXX0pOnkucHVzaCh7b3A6ImJjdXJ2ZVRvIixkYXRhOlttK3QrKHItdCkqcCt4KCksZytlKyhuLWUpKnAreCgpLG0rdCsyKihyLXQpKnAreCgpLGcrZSsyKihuLWUpKnAreCgpLHIrKGI/MDp4KCkpLG4rKGI/MDp4KCkpXX0pLHl9ZnVuY3Rpb24gRjUodCxlLHIpe2lmKCF0Lmxlbmd0aClyZXR1cm5bXTtsZXQgbj1bXTtuLnB1c2goW3RbMF1bMF0rbnIoZSxyKSx0WzBdWzFdK25yKGUscildKSxuLnB1c2goW3RbMF1bMF0rbnIoZSxyKSx0WzBdWzFdK25yKGUscildKTtmb3IobGV0IGk9MTtpPHQubGVuZ3RoO2krKyluLnB1c2goW3RbaV1bMF0rbnIoZSxyKSx0W2ldWzFdK25yKGUscildKSxpPT09dC5sZW5ndGgtMSYmbi5wdXNoKFt0W2ldWzBdK25yKGUsciksdFtpXVsxXStucihlLHIpXSk7cmV0dXJuIFU1KG4sbnVsbCxyKX1mdW5jdGlvbiBVNSh0LGUscil7bGV0IG49dC5sZW5ndGgsaT1bXTtpZihuPjMpe2xldCBhPVtdLHM9MS1yLmN1cnZlVGlnaHRuZXNzO2kucHVzaCh7b3A6Im1vdmUiLGRhdGE6W3RbMV1bMF0sdFsxXVsxXV19KTtmb3IobGV0IGw9MTtsKzI8bjtsKyspe2xldCB1PXRbbF07YVswXT1bdVswXSx1WzFdXSxhWzFdPVt1WzBdKyhzKnRbbCsxXVswXS1zKnRbbC0xXVswXSkvNix1WzFdKyhzKnRbbCsxXVsxXS1zKnRbbC0xXVsxXSkvNl0sYVsyXT1bdFtsKzFdWzBdKyhzKnRbbF1bMF0tcyp0W2wrMl1bMF0pLzYsdFtsKzFdWzFdKyhzKnRbbF1bMV0tcyp0W2wrMl1bMV0pLzZdLGFbM109W3RbbCsxXVswXSx0W2wrMV1bMV1dLGkucHVzaCh7b3A6ImJjdXJ2ZVRvIixkYXRhOlthWzFdWzBdLGFbMV1bMV0sYVsyXVswXSxhWzJdWzFdLGFbM11bMF0sYVszXVsxXV19KX1pZihlJiZlLmxlbmd0aD09PTIpe2xldCBsPXIubWF4UmFuZG9tbmVzc09mZnNldDtpLnB1c2goe29wOiJsaW5lVG8iLGRhdGE6W2VbMF0rbnIobCxyKSxlWzFdK25yKGwscildfSl9fWVsc2Ugbj09PTM/KGkucHVzaCh7b3A6Im1vdmUiLGRhdGE6W3RbMV1bMF0sdFsxXVsxXV19KSxpLnB1c2goe29wOiJiY3VydmVUbyIsZGF0YTpbdFsxXVswXSx0WzFdWzFdLHRbMl1bMF0sdFsyXVsxXSx0WzJdWzBdLHRbMl1bMV1dfSkpOm49PT0yJiZpLnB1c2goLi4uUDkodFswXVswXSx0WzBdWzFdLHRbMV1bMF0sdFsxXVsxXSxyLCEwLCEwKSk7cmV0dXJuIGl9ZnVuY3Rpb24gTGoodCxlLHIsbixpLGEscyxsKXtsZXQgdT1bXSxoPVtdO2lmKGwucm91Z2huZXNzPT09MCl7dC89NCxoLnB1c2goW2UrbipNYXRoLmNvcygtdCkscitpKk1hdGguc2luKC10KV0pO2ZvcihsZXQgZj0wO2Y8PTIqTWF0aC5QSTtmKz10KXtsZXQgZD1bZStuKk1hdGguY29zKGYpLHIraSpNYXRoLnNpbihmKV07dS5wdXNoKGQpLGgucHVzaChkKX1oLnB1c2goW2UrbipNYXRoLmNvcygwKSxyK2kqTWF0aC5zaW4oMCldKSxoLnB1c2goW2UrbipNYXRoLmNvcyh0KSxyK2kqTWF0aC5zaW4odCldKX1lbHNle2xldCBmPW5yKC41LGwpLU1hdGguUEkvMjtoLnB1c2goW25yKGEsbCkrZSsuOSpuKk1hdGguY29zKGYtdCksbnIoYSxsKStyKy45KmkqTWF0aC5zaW4oZi10KV0pO2xldCBkPTIqTWF0aC5QSStmLS4wMTtmb3IobGV0IHA9ZjtwPGQ7cCs9dCl7bGV0IG09W25yKGEsbCkrZStuKk1hdGguY29zKHApLG5yKGEsbCkrcitpKk1hdGguc2luKHApXTt1LnB1c2gobSksaC5wdXNoKG0pfWgucHVzaChbbnIoYSxsKStlK24qTWF0aC5jb3MoZisyKk1hdGguUEkrLjUqcyksbnIoYSxsKStyK2kqTWF0aC5zaW4oZisyKk1hdGguUEkrLjUqcyldKSxoLnB1c2goW25yKGEsbCkrZSsuOTgqbipNYXRoLmNvcyhmK3MpLG5yKGEsbCkrcisuOTgqaSpNYXRoLnNpbihmK3MpXSksaC5wdXNoKFtucihhLGwpK2UrLjkqbipNYXRoLmNvcyhmKy41KnMpLG5yKGEsbCkrcisuOSppKk1hdGguc2luKGYrLjUqcyldKX1yZXR1cm5baCx1XX1mdW5jdGlvbiBEaih0LGUscixuLGksYSxzLGwsdSl7bGV0IGg9YStuciguMSx1KSxmPVtdO2YucHVzaChbbnIobCx1KStlKy45Km4qTWF0aC5jb3MoaC10KSxucihsLHUpK3IrLjkqaSpNYXRoLnNpbihoLXQpXSk7Zm9yKGxldCBkPWg7ZDw9cztkKz10KWYucHVzaChbbnIobCx1KStlK24qTWF0aC5jb3MoZCksbnIobCx1KStyK2kqTWF0aC5zaW4oZCldKTtyZXR1cm4gZi5wdXNoKFtlK24qTWF0aC5jb3MocykscitpKk1hdGguc2luKHMpXSksZi5wdXNoKFtlK24qTWF0aC5jb3MocykscitpKk1hdGguc2luKHMpXSksVTUoZixudWxsLHUpfWZ1bmN0aW9uIEI3ZSh0LGUscixuLGksYSxzLGwpe2xldCB1PVtdLGg9W2wubWF4UmFuZG9tbmVzc09mZnNldHx8MSwobC5tYXhSYW5kb21uZXNzT2Zmc2V0fHwxKSsuM10sZj1bMCwwXSxkPWwuZGlzYWJsZU11bHRpU3Ryb2tlPzE6MixwPWwucHJlc2VydmVWZXJ0aWNlcztmb3IobGV0IG09MDttPGQ7bSsrKW09PT0wP3UucHVzaCh7b3A6Im1vdmUiLGRhdGE6W3NbMF0sc1sxXV19KTp1LnB1c2goe29wOiJtb3ZlIixkYXRhOltzWzBdKyhwPzA6bnIoaFswXSxsKSksc1sxXSsocD8wOm5yKGhbMF0sbCkpXX0pLGY9cD9baSxhXTpbaStucihoW21dLGwpLGErbnIoaFttXSxsKV0sdS5wdXNoKHtvcDoiYmN1cnZlVG8iLGRhdGE6W3QrbnIoaFttXSxsKSxlK25yKGhbbV0sbCkscitucihoW21dLGwpLG4rbnIoaFttXSxsKSxmWzBdLGZbMV1dfSk7cmV0dXJuIHV9ZnVuY3Rpb24gRHYodCl7cmV0dXJuWy4uLnRdfWZ1bmN0aW9uIE5qKHQsZT0wKXtsZXQgcj10Lmxlbmd0aDtpZihyPDMpdGhyb3cgbmV3IEVycm9yKCJBIGN1cnZlIG11c3QgaGF2ZSBhdCBsZWFzdCB0aHJlZSBwb2ludHMuIik7bGV0IG49W107aWYocj09PTMpbi5wdXNoKER2KHRbMF0pLER2KHRbMV0pLER2KHRbMl0pLER2KHRbMl0pKTtlbHNle2xldCBpPVtdO2kucHVzaCh0WzBdLHRbMF0pO2ZvcihsZXQgbD0xO2w8dC5sZW5ndGg7bCsrKWkucHVzaCh0W2xdKSxsPT09dC5sZW5ndGgtMSYmaS5wdXNoKHRbbF0pO2xldCBhPVtdLHM9MS1lO24ucHVzaChEdihpWzBdKSk7Zm9yKGxldCBsPTE7bCsyPGkubGVuZ3RoO2wrKyl7bGV0IHU9aVtsXTthWzBdPVt1WzBdLHVbMV1dLGFbMV09W3VbMF0rKHMqaVtsKzFdWzBdLXMqaVtsLTFdWzBdKS82LHVbMV0rKHMqaVtsKzFdWzFdLXMqaVtsLTFdWzFdKS82XSxhWzJdPVtpW2wrMV1bMF0rKHMqaVtsXVswXS1zKmlbbCsyXVswXSkvNixpW2wrMV1bMV0rKHMqaVtsXVsxXS1zKmlbbCsyXVsxXSkvNl0sYVszXT1baVtsKzFdWzBdLGlbbCsxXVsxXV0sbi5wdXNoKGFbMV0sYVsyXSxhWzNdKX19cmV0dXJuIG59ZnVuY3Rpb24gJDUodCxlKXtyZXR1cm4gTWF0aC5wb3codFswXS1lWzBdLDIpK01hdGgucG93KHRbMV0tZVsxXSwyKX1mdW5jdGlvbiBGN2UodCxlLHIpe2xldCBuPSQ1KGUscik7aWYobj09PTApcmV0dXJuICQ1KHQsZSk7bGV0IGk9KCh0WzBdLWVbMF0pKihyWzBdLWVbMF0pKyh0WzFdLWVbMV0pKihyWzFdLWVbMV0pKS9uO3JldHVybiBpPU1hdGgubWF4KDAsTWF0aC5taW4oMSxpKSksJDUodCxPZChlLHIsaSkpfWZ1bmN0aW9uIE9kKHQsZSxyKXtyZXR1cm5bdFswXSsoZVswXS10WzBdKSpyLHRbMV0rKGVbMV0tdFsxXSkqcl19ZnVuY3Rpb24gQjkodCxlLHIsbil7bGV0IGk9bnx8W107aWYoZnVuY3Rpb24obCx1KXtsZXQgaD1sW3UrMF0sZj1sW3UrMV0sZD1sW3UrMl0scD1sW3UrM10sbT0zKmZbMF0tMipoWzBdLXBbMF07bSo9bTtsZXQgZz0zKmZbMV0tMipoWzFdLXBbMV07Zyo9ZztsZXQgeT0zKmRbMF0tMipwWzBdLWhbMF07eSo9eTtsZXQgdj0zKmRbMV0tMipwWzFdLWhbMV07cmV0dXJuIHYqPXYsbTx5JiYobT15KSxnPHYmJihnPXYpLG0rZ30odCxlKTxyKXtsZXQgbD10W2UrMF07aS5sZW5ndGg/KGE9aVtpLmxlbmd0aC0xXSxzPWwsTWF0aC5zcXJ0KCQ1KGEscykpPjEmJmkucHVzaChsKSk6aS5wdXNoKGwpLGkucHVzaCh0W2UrM10pfWVsc2V7bGV0IHU9dFtlKzBdLGg9dFtlKzFdLGY9dFtlKzJdLGQ9dFtlKzNdLHA9T2QodSxoLC41KSxtPU9kKGgsZiwuNSksZz1PZChmLGQsLjUpLHk9T2QocCxtLC41KSx2PU9kKG0sZywuNSkseD1PZCh5LHYsLjUpO0I5KFt1LHAseSx4XSwwLHIsaSksQjkoW3gsdixnLGRdLDAscixpKX12YXIgYSxzO3JldHVybiBpfWZ1bmN0aW9uIHo3ZSh0LGUpe3JldHVybiBINSh0LDAsdC5sZW5ndGgsZSl9ZnVuY3Rpb24gSDUodCxlLHIsbixpKXtsZXQgYT1pfHxbXSxzPXRbZV0sbD10W3ItMV0sdT0wLGg9MTtmb3IobGV0IGY9ZSsxO2Y8ci0xOysrZil7bGV0IGQ9RjdlKHRbZl0scyxsKTtkPnUmJih1PWQsaD1mKX1yZXR1cm4gTWF0aC5zcXJ0KHUpPm4/KEg1KHQsZSxoKzEsbixhKSxINSh0LGgscixuLGEpKTooYS5sZW5ndGh8fGEucHVzaChzKSxhLnB1c2gobCkpLGF9ZnVuY3Rpb24gXzkodCxlPS4xNSxyKXtsZXQgbj1bXSxpPSh0Lmxlbmd0aC0xKS8zO2ZvcihsZXQgYT0wO2E8aTthKyspQjkodCwzKmEsZSxuKTtyZXR1cm4gciYmcj4wP0g1KG4sMCxuLmxlbmd0aCxyKTpufXZhciBOdixMOSxEOSxOOSxSOSxNOSxScyxJOSxJN2UsUzksRWosQjUsTzdlLGxvLHhtLEY5LHo1LHo5LFhlLGp0PU0oKCk9PnsidXNlIHN0cmljdCI7byhFOSwidCIpO28oUjdlLCJlIik7byhNN2UsInMiKTtvKFJ2LCJuIik7TnY9Y2xhc3N7c3RhdGlje28odGhpcywibyIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuaGVscGVyPWV9ZmlsbFBvbHlnb25zKGUscil7cmV0dXJuIHRoaXMuX2ZpbGxQb2x5Z29ucyhlLHIpfV9maWxsUG9seWdvbnMoZSxyKXtsZXQgbj1SdihlLHIpO3JldHVybnt0eXBlOiJmaWxsU2tldGNoIixvcHM6dGhpcy5yZW5kZXJMaW5lcyhuLHIpfX1yZW5kZXJMaW5lcyhlLHIpe2xldCBuPVtdO2ZvcihsZXQgaSBvZiBlKW4ucHVzaCguLi50aGlzLmhlbHBlci5kb3VibGVMaW5lT3BzKGlbMF1bMF0saVswXVsxXSxpWzFdWzBdLGlbMV1bMV0scikpO3JldHVybiBufX07byhXNSwiYSIpO0w5PWNsYXNzIGV4dGVuZHMgTnZ7c3RhdGlje28odGhpcywiaCIpfWZpbGxQb2x5Z29ucyhlLHIpe2xldCBuPXIuaGFjaHVyZUdhcDtuPDAmJihuPTQqci5zdHJva2VXaWR0aCksbj1NYXRoLm1heChuLC4xKTtsZXQgaT1SdihlLE9iamVjdC5hc3NpZ24oe30scix7aGFjaHVyZUdhcDpufSkpLGE9TWF0aC5QSS8xODAqci5oYWNodXJlQW5nbGUscz1bXSxsPS41Km4qTWF0aC5jb3MoYSksdT0uNSpuKk1hdGguc2luKGEpO2ZvcihsZXRbaCxmXW9mIGkpVzUoW2gsZl0pJiZzLnB1c2goW1toWzBdLWwsaFsxXSt1XSxbLi4uZl1dLFtbaFswXStsLGhbMV0tdV0sWy4uLmZdXSk7cmV0dXJue3R5cGU6ImZpbGxTa2V0Y2giLG9wczp0aGlzLnJlbmRlckxpbmVzKHMscil9fX0sRDk9Y2xhc3MgZXh0ZW5kcyBOdntzdGF0aWN7byh0aGlzLCJyIil9ZmlsbFBvbHlnb25zKGUscil7bGV0IG49dGhpcy5fZmlsbFBvbHlnb25zKGUsciksaT1PYmplY3QuYXNzaWduKHt9LHIse2hhY2h1cmVBbmdsZTpyLmhhY2h1cmVBbmdsZSs5MH0pLGE9dGhpcy5fZmlsbFBvbHlnb25zKGUsaSk7cmV0dXJuIG4ub3BzPW4ub3BzLmNvbmNhdChhLm9wcyksbn19LE45PWNsYXNze3N0YXRpY3tvKHRoaXMsImkiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmhlbHBlcj1lfWZpbGxQb2x5Z29ucyhlLHIpe2xldCBuPVJ2KGUscj1PYmplY3QuYXNzaWduKHt9LHIse2hhY2h1cmVBbmdsZTowfSkpO3JldHVybiB0aGlzLmRvdHNPbkxpbmVzKG4scil9ZG90c09uTGluZXMoZSxyKXtsZXQgbj1bXSxpPXIuaGFjaHVyZUdhcDtpPDAmJihpPTQqci5zdHJva2VXaWR0aCksaT1NYXRoLm1heChpLC4xKTtsZXQgYT1yLmZpbGxXZWlnaHQ7YTwwJiYoYT1yLnN0cm9rZVdpZHRoLzIpO2xldCBzPWkvNDtmb3IobGV0IGwgb2YgZSl7bGV0IHU9VzUobCksaD11L2ksZj1NYXRoLmNlaWwoaCktMSxkPXUtZippLHA9KGxbMF1bMF0rbFsxXVswXSkvMi1pLzQsbT1NYXRoLm1pbihsWzBdWzFdLGxbMV1bMV0pO2ZvcihsZXQgZz0wO2c8ZjtnKyspe2xldCB5PW0rZCtnKmksdj1wLXMrMipNYXRoLnJhbmRvbSgpKnMseD15LXMrMipNYXRoLnJhbmRvbSgpKnMsYj10aGlzLmhlbHBlci5lbGxpcHNlKHYseCxhLGEscik7bi5wdXNoKC4uLmIub3BzKX19cmV0dXJue3R5cGU6ImZpbGxTa2V0Y2giLG9wczpufX19LFI5PWNsYXNze3N0YXRpY3tvKHRoaXMsImMiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmhlbHBlcj1lfWZpbGxQb2x5Z29ucyhlLHIpe2xldCBuPVJ2KGUscik7cmV0dXJue3R5cGU6ImZpbGxTa2V0Y2giLG9wczp0aGlzLmRhc2hlZExpbmUobixyKX19ZGFzaGVkTGluZShlLHIpe2xldCBuPXIuZGFzaE9mZnNldDwwP3IuaGFjaHVyZUdhcDwwPzQqci5zdHJva2VXaWR0aDpyLmhhY2h1cmVHYXA6ci5kYXNoT2Zmc2V0LGk9ci5kYXNoR2FwPDA/ci5oYWNodXJlR2FwPDA/NCpyLnN0cm9rZVdpZHRoOnIuaGFjaHVyZUdhcDpyLmRhc2hHYXAsYT1bXTtyZXR1cm4gZS5mb3JFYWNoKHM9PntsZXQgbD1XNShzKSx1PU1hdGguZmxvb3IobC8obitpKSksaD0obCtpLXUqKG4raSkpLzIsZj1zWzBdLGQ9c1sxXTtmWzBdPmRbMF0mJihmPXNbMV0sZD1zWzBdKTtsZXQgcD1NYXRoLmF0YW4oKGRbMV0tZlsxXSkvKGRbMF0tZlswXSkpO2ZvcihsZXQgbT0wO208dTttKyspe2xldCBnPW0qKG4raSkseT1nK24sdj1bZlswXStnKk1hdGguY29zKHApK2gqTWF0aC5jb3MocCksZlsxXStnKk1hdGguc2luKHApK2gqTWF0aC5zaW4ocCldLHg9W2ZbMF0reSpNYXRoLmNvcyhwKStoKk1hdGguY29zKHApLGZbMV0reSpNYXRoLnNpbihwKStoKk1hdGguc2luKHApXTthLnB1c2goLi4udGhpcy5oZWxwZXIuZG91YmxlTGluZU9wcyh2WzBdLHZbMV0seFswXSx4WzFdLHIpKX19KSxhfX0sTTk9Y2xhc3N7c3RhdGlje28odGhpcywibCIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuaGVscGVyPWV9ZmlsbFBvbHlnb25zKGUscil7bGV0IG49ci5oYWNodXJlR2FwPDA/NCpyLnN0cm9rZVdpZHRoOnIuaGFjaHVyZUdhcCxpPXIuemlnemFnT2Zmc2V0PDA/bjpyLnppZ3phZ09mZnNldCxhPVJ2KGUscj1PYmplY3QuYXNzaWduKHt9LHIse2hhY2h1cmVHYXA6bitpfSkpO3JldHVybnt0eXBlOiJmaWxsU2tldGNoIixvcHM6dGhpcy56aWd6YWdMaW5lcyhhLGkscil9fXppZ3phZ0xpbmVzKGUscixuKXtsZXQgaT1bXTtyZXR1cm4gZS5mb3JFYWNoKGE9PntsZXQgcz1XNShhKSxsPU1hdGgucm91bmQocy8oMipyKSksdT1hWzBdLGg9YVsxXTt1WzBdPmhbMF0mJih1PWFbMV0saD1hWzBdKTtsZXQgZj1NYXRoLmF0YW4oKGhbMV0tdVsxXSkvKGhbMF0tdVswXSkpO2ZvcihsZXQgZD0wO2Q8bDtkKyspe2xldCBwPTIqZCpyLG09MiooZCsxKSpyLGc9TWF0aC5zcXJ0KDIqTWF0aC5wb3cociwyKSkseT1bdVswXStwKk1hdGguY29zKGYpLHVbMV0rcCpNYXRoLnNpbihmKV0sdj1bdVswXSttKk1hdGguY29zKGYpLHVbMV0rbSpNYXRoLnNpbihmKV0seD1beVswXStnKk1hdGguY29zKGYrTWF0aC5QSS80KSx5WzFdK2cqTWF0aC5zaW4oZitNYXRoLlBJLzQpXTtpLnB1c2goLi4udGhpcy5oZWxwZXIuZG91YmxlTGluZU9wcyh5WzBdLHlbMV0seFswXSx4WzFdLG4pLC4uLnRoaXMuaGVscGVyLmRvdWJsZUxpbmVPcHMoeFswXSx4WzFdLHZbMF0sdlsxXSxuKSl9fSksaX19LFJzPXt9LEk5PWNsYXNze3N0YXRpY3tvKHRoaXMsInAiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLnNlZWQ9ZX1uZXh0KCl7cmV0dXJuIHRoaXMuc2VlZD8oMioqMzEtMSYodGhpcy5zZWVkPU1hdGguaW11bCg0ODI3MSx0aGlzLnNlZWQpKSkvMioqMzE6TWF0aC5yYW5kb20oKX19LEk3ZT0wLFM5PTEsRWo9MixCNT17QTo3LGE6NyxDOjYsYzo2LEg6MSxoOjEsTDoyLGw6MixNOjIsbToyLFE6NCxxOjQsUzo0LHM6NCxUOjIsdDoyLFY6MSx2OjEsWjowLHo6MH07byhDOSwiayIpO28oRzksImIiKTtvKFJqLCJ5Iik7byhNaiwibSIpO28oTHYsInciKTtvKElqLCJ4Iik7TzdlPXtyYW5kT2Zmc2V0Om8oZnVuY3Rpb24odCxlKXtyZXR1cm4gbnIodCxlKX0sInJhbmRPZmZzZXQiKSxyYW5kT2Zmc2V0V2l0aFJhbmdlOm8oZnVuY3Rpb24odCxlLHIpe3JldHVybiBWNSh0LGUscil9LCJyYW5kT2Zmc2V0V2l0aFJhbmdlIiksZWxsaXBzZTpvKGZ1bmN0aW9uKHQsZSxyLG4saSl7bGV0IGE9UGoocixuLGkpO3JldHVybiBPOSh0LGUsaSxhKS5vcHNldH0sImVsbGlwc2UiKSxkb3VibGVMaW5lT3BzOm8oZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gV2godCxlLHIsbixpLCEwKX0sImRvdWJsZUxpbmVPcHMiKX07byhPaiwidiIpO28oRzUsIlMiKTtvKFA3ZSwiTyIpO28oU2osIkwiKTtvKFBqLCJUIik7byhPOSwiRCIpO28oQ2osIkEiKTtvKEFqLCJfIik7byhBOSwiSSIpO28odm0sIkMiKTtvKF9qLCJ6Iik7byhCaiwiVyIpO28oVjUsIkUiKTtvKG5yLCJHIik7byhXaCwiJCIpO28oUDksIlIiKTtvKEY1LCJqIik7byhVNSwicSIpO28oTGosIkYiKTtvKERqLCJWIik7byhCN2UsIloiKTtvKER2LCJRIik7byhOaiwiSCIpO28oJDUsIk4iKTtvKEY3ZSwiQiIpO28oT2QsIkoiKTtvKEI5LCJLIik7byh6N2UsIlUiKTtvKEg1LCJYIik7byhfOSwiWSIpO2xvPSJub25lIix4bT1jbGFzc3tzdGF0aWN7byh0aGlzLCJldCIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuZGVmYXVsdE9wdGlvbnM9e21heFJhbmRvbW5lc3NPZmZzZXQ6Mixyb3VnaG5lc3M6MSxib3dpbmc6MSxzdHJva2U6IiMwMDAiLHN0cm9rZVdpZHRoOjEsY3VydmVUaWdodG5lc3M6MCxjdXJ2ZUZpdHRpbmc6Ljk1LGN1cnZlU3RlcENvdW50OjksZmlsbFN0eWxlOiJoYWNodXJlIixmaWxsV2VpZ2h0Oi0xLGhhY2h1cmVBbmdsZTotNDEsaGFjaHVyZUdhcDotMSxkYXNoT2Zmc2V0Oi0xLGRhc2hHYXA6LTEsemlnemFnT2Zmc2V0Oi0xLHNlZWQ6MCxkaXNhYmxlTXVsdGlTdHJva2U6ITEsZGlzYWJsZU11bHRpU3Ryb2tlRmlsbDohMSxwcmVzZXJ2ZVZlcnRpY2VzOiExLGZpbGxTaGFwZVJvdWdobmVzc0dhaW46Ljh9LHRoaXMuY29uZmlnPWV8fHt9LHRoaXMuY29uZmlnLm9wdGlvbnMmJih0aGlzLmRlZmF1bHRPcHRpb25zPXRoaXMuX28odGhpcy5jb25maWcub3B0aW9ucykpfXN0YXRpYyBuZXdTZWVkKCl7cmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoyKiozMSl9X28oZSl7cmV0dXJuIGU/T2JqZWN0LmFzc2lnbih7fSx0aGlzLmRlZmF1bHRPcHRpb25zLGUpOnRoaXMuZGVmYXVsdE9wdGlvbnN9X2QoZSxyLG4pe3JldHVybntzaGFwZTplLHNldHM6cnx8W10sb3B0aW9uczpufHx0aGlzLmRlZmF1bHRPcHRpb25zfX1saW5lKGUscixuLGksYSl7bGV0IHM9dGhpcy5fbyhhKTtyZXR1cm4gdGhpcy5fZCgibGluZSIsW09qKGUscixuLGkscyldLHMpfXJlY3RhbmdsZShlLHIsbixpLGEpe2xldCBzPXRoaXMuX28oYSksbD1bXSx1PVA3ZShlLHIsbixpLHMpO2lmKHMuZmlsbCl7bGV0IGg9W1tlLHJdLFtlK24scl0sW2UrbixyK2ldLFtlLHIraV1dO3MuZmlsbFN0eWxlPT09InNvbGlkIj9sLnB1c2goQTkoW2hdLHMpKTpsLnB1c2godm0oW2hdLHMpKX1yZXR1cm4gcy5zdHJva2UhPT1sbyYmbC5wdXNoKHUpLHRoaXMuX2QoInJlY3RhbmdsZSIsbCxzKX1lbGxpcHNlKGUscixuLGksYSl7bGV0IHM9dGhpcy5fbyhhKSxsPVtdLHU9UGoobixpLHMpLGg9TzkoZSxyLHMsdSk7aWYocy5maWxsKWlmKHMuZmlsbFN0eWxlPT09InNvbGlkIil7bGV0IGY9TzkoZSxyLHMsdSkub3BzZXQ7Zi50eXBlPSJmaWxsUGF0aCIsbC5wdXNoKGYpfWVsc2UgbC5wdXNoKHZtKFtoLmVzdGltYXRlZFBvaW50c10scykpO3JldHVybiBzLnN0cm9rZSE9PWxvJiZsLnB1c2goaC5vcHNldCksdGhpcy5fZCgiZWxsaXBzZSIsbCxzKX1jaXJjbGUoZSxyLG4saSl7bGV0IGE9dGhpcy5lbGxpcHNlKGUscixuLG4saSk7cmV0dXJuIGEuc2hhcGU9ImNpcmNsZSIsYX1saW5lYXJQYXRoKGUscil7bGV0IG49dGhpcy5fbyhyKTtyZXR1cm4gdGhpcy5fZCgibGluZWFyUGF0aCIsW0c1KGUsITEsbildLG4pfWFyYyhlLHIsbixpLGEscyxsPSExLHUpe2xldCBoPXRoaXMuX28odSksZj1bXSxkPUNqKGUscixuLGksYSxzLGwsITAsaCk7aWYobCYmaC5maWxsKWlmKGguZmlsbFN0eWxlPT09InNvbGlkIil7bGV0IHA9T2JqZWN0LmFzc2lnbih7fSxoKTtwLmRpc2FibGVNdWx0aVN0cm9rZT0hMDtsZXQgbT1DaihlLHIsbixpLGEscywhMCwhMSxwKTttLnR5cGU9ImZpbGxQYXRoIixmLnB1c2gobSl9ZWxzZSBmLnB1c2goZnVuY3Rpb24ocCxtLGcseSx2LHgsYil7bGV0IHc9cCxfPW0sVD1NYXRoLmFicyhnLzIpLEU9TWF0aC5hYnMoeS8yKTtUKz1uciguMDEqVCxiKSxFKz1uciguMDEqRSxiKTtsZXQgTD12LFM9eDtmb3IoO0w8MDspTCs9MipNYXRoLlBJLFMrPTIqTWF0aC5QSTtTLUw+MipNYXRoLlBJJiYoTD0wLFM9MipNYXRoLlBJKTtsZXQgQT0oUy1MKS9iLmN1cnZlU3RlcENvdW50LEk9W107Zm9yKGxldCBEPUw7RDw9UztEKz1BKUkucHVzaChbdytUKk1hdGguY29zKEQpLF8rRSpNYXRoLnNpbihEKV0pO3JldHVybiBJLnB1c2goW3crVCpNYXRoLmNvcyhTKSxfK0UqTWF0aC5zaW4oUyldKSxJLnB1c2goW3csX10pLHZtKFtJXSxiKX0oZSxyLG4saSxhLHMsaCkpO3JldHVybiBoLnN0cm9rZSE9PWxvJiZmLnB1c2goZCksdGhpcy5fZCgiYXJjIixmLGgpfWN1cnZlKGUscil7bGV0IG49dGhpcy5fbyhyKSxpPVtdLGE9U2ooZSxuKTtpZihuLmZpbGwmJm4uZmlsbCE9PWxvKWlmKG4uZmlsbFN0eWxlPT09InNvbGlkIil7bGV0IHM9U2ooZSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbikse2Rpc2FibGVNdWx0aVN0cm9rZTohMCxyb3VnaG5lc3M6bi5yb3VnaG5lc3M/bi5yb3VnaG5lc3Mrbi5maWxsU2hhcGVSb3VnaG5lc3NHYWluOjB9KSk7aS5wdXNoKHt0eXBlOiJmaWxsUGF0aCIsb3BzOnRoaXMuX21lcmdlZFNoYXBlKHMub3BzKX0pfWVsc2V7bGV0IHM9W10sbD1lO2lmKGwubGVuZ3RoKXtsZXQgdT10eXBlb2YgbFswXVswXT09Im51bWJlciI/W2xdOmw7Zm9yKGxldCBoIG9mIHUpaC5sZW5ndGg8Mz9zLnB1c2goLi4uaCk6aC5sZW5ndGg9PT0zP3MucHVzaCguLi5fOShOaihbaFswXSxoWzBdLGhbMV0saFsyXV0pLDEwLCgxK24ucm91Z2huZXNzKS8yKSk6cy5wdXNoKC4uLl85KE5qKGgpLDEwLCgxK24ucm91Z2huZXNzKS8yKSl9cy5sZW5ndGgmJmkucHVzaCh2bShbc10sbikpfXJldHVybiBuLnN0cm9rZSE9PWxvJiZpLnB1c2goYSksdGhpcy5fZCgiY3VydmUiLGksbil9cG9seWdvbihlLHIpe2xldCBuPXRoaXMuX28ociksaT1bXSxhPUc1KGUsITAsbik7cmV0dXJuIG4uZmlsbCYmKG4uZmlsbFN0eWxlPT09InNvbGlkIj9pLnB1c2goQTkoW2VdLG4pKTppLnB1c2godm0oW2VdLG4pKSksbi5zdHJva2UhPT1sbyYmaS5wdXNoKGEpLHRoaXMuX2QoInBvbHlnb24iLGksbil9cGF0aChlLHIpe2xldCBuPXRoaXMuX28ociksaT1bXTtpZighZSlyZXR1cm4gdGhpcy5fZCgicGF0aCIsaSxuKTtlPShlfHwiIikucmVwbGFjZSgvXG4vZywiICIpLnJlcGxhY2UoLygtXHMpL2csIi0iKS5yZXBsYWNlKCIvKHNzKS9nIiwiICIpO2xldCBhPW4uZmlsbCYmbi5maWxsIT09InRyYW5zcGFyZW50IiYmbi5maWxsIT09bG8scz1uLnN0cm9rZSE9PWxvLGw9ISEobi5zaW1wbGlmaWNhdGlvbiYmbi5zaW1wbGlmaWNhdGlvbjwxKSx1PWZ1bmN0aW9uKGYsZCxwKXtsZXQgbT1NaihSaihHOShmKSkpLGc9W10seT1bXSx2PVswLDBdLHg9W10sYj1vKCgpPT57eC5sZW5ndGg+PTQmJnkucHVzaCguLi5fOSh4LGQpKSx4PVtdfSwiaSIpLHc9bygoKT0+e2IoKSx5Lmxlbmd0aCYmKGcucHVzaCh5KSx5PVtdKX0sImMiKTtmb3IobGV0e2tleTpULGRhdGE6RX1vZiBtKXN3aXRjaChUKXtjYXNlIk0iOncoKSx2PVtFWzBdLEVbMV1dLHkucHVzaCh2KTticmVhaztjYXNlIkwiOmIoKSx5LnB1c2goW0VbMF0sRVsxXV0pO2JyZWFrO2Nhc2UiQyI6aWYoIXgubGVuZ3RoKXtsZXQgTD15Lmxlbmd0aD95W3kubGVuZ3RoLTFdOnY7eC5wdXNoKFtMWzBdLExbMV1dKX14LnB1c2goW0VbMF0sRVsxXV0pLHgucHVzaChbRVsyXSxFWzNdXSkseC5wdXNoKFtFWzRdLEVbNV1dKTticmVhaztjYXNlIloiOmIoKSx5LnB1c2goW3ZbMF0sdlsxXV0pfWlmKHcoKSwhcClyZXR1cm4gZztsZXQgXz1bXTtmb3IobGV0IFQgb2YgZyl7bGV0IEU9ejdlKFQscCk7RS5sZW5ndGgmJl8ucHVzaChFKX1yZXR1cm4gX30oZSwxLGw/NC00KihuLnNpbXBsaWZpY2F0aW9ufHwxKTooMStuLnJvdWdobmVzcykvMiksaD1BaihlLG4pO2lmKGEpaWYobi5maWxsU3R5bGU9PT0ic29saWQiKWlmKHUubGVuZ3RoPT09MSl7bGV0IGY9QWooZSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbikse2Rpc2FibGVNdWx0aVN0cm9rZTohMCxyb3VnaG5lc3M6bi5yb3VnaG5lc3M/bi5yb3VnaG5lc3Mrbi5maWxsU2hhcGVSb3VnaG5lc3NHYWluOjB9KSk7aS5wdXNoKHt0eXBlOiJmaWxsUGF0aCIsb3BzOnRoaXMuX21lcmdlZFNoYXBlKGYub3BzKX0pfWVsc2UgaS5wdXNoKEE5KHUsbikpO2Vsc2UgaS5wdXNoKHZtKHUsbikpO3JldHVybiBzJiYobD91LmZvckVhY2goZj0+e2kucHVzaChHNShmLCExLG4pKX0pOmkucHVzaChoKSksdGhpcy5fZCgicGF0aCIsaSxuKX1vcHNUb1BhdGgoZSxyKXtsZXQgbj0iIjtmb3IobGV0IGkgb2YgZS5vcHMpe2xldCBhPXR5cGVvZiByPT0ibnVtYmVyIiYmcj49MD9pLmRhdGEubWFwKHM9PitzLnRvRml4ZWQocikpOmkuZGF0YTtzd2l0Y2goaS5vcCl7Y2FzZSJtb3ZlIjpuKz1gTSR7YVswXX0gJHthWzFdfSBgO2JyZWFrO2Nhc2UiYmN1cnZlVG8iOm4rPWBDJHthWzBdfSAke2FbMV19LCAke2FbMl19ICR7YVszXX0sICR7YVs0XX0gJHthWzVdfSBgO2JyZWFrO2Nhc2UibGluZVRvIjpuKz1gTCR7YVswXX0gJHthWzFdfSBgfX1yZXR1cm4gbi50cmltKCl9dG9QYXRocyhlKXtsZXQgcj1lLnNldHN8fFtdLG49ZS5vcHRpb25zfHx0aGlzLmRlZmF1bHRPcHRpb25zLGk9W107Zm9yKGxldCBhIG9mIHIpe2xldCBzPW51bGw7c3dpdGNoKGEudHlwZSl7Y2FzZSJwYXRoIjpzPXtkOnRoaXMub3BzVG9QYXRoKGEpLHN0cm9rZTpuLnN0cm9rZSxzdHJva2VXaWR0aDpuLnN0cm9rZVdpZHRoLGZpbGw6bG99O2JyZWFrO2Nhc2UiZmlsbFBhdGgiOnM9e2Q6dGhpcy5vcHNUb1BhdGgoYSksc3Ryb2tlOmxvLHN0cm9rZVdpZHRoOjAsZmlsbDpuLmZpbGx8fGxvfTticmVhaztjYXNlImZpbGxTa2V0Y2giOnM9dGhpcy5maWxsU2tldGNoKGEsbil9cyYmaS5wdXNoKHMpfXJldHVybiBpfWZpbGxTa2V0Y2goZSxyKXtsZXQgbj1yLmZpbGxXZWlnaHQ7cmV0dXJuIG48MCYmKG49ci5zdHJva2VXaWR0aC8yKSx7ZDp0aGlzLm9wc1RvUGF0aChlKSxzdHJva2U6ci5maWxsfHxsbyxzdHJva2VXaWR0aDpuLGZpbGw6bG99fV9tZXJnZWRTaGFwZShlKXtyZXR1cm4gZS5maWx0ZXIoKHIsbik9Pm49PT0wfHxyLm9wIT09Im1vdmUiKX19LEY5PWNsYXNze3N0YXRpY3tvKHRoaXMsInN0Iil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLmNhbnZhcz1lLHRoaXMuY3R4PXRoaXMuY2FudmFzLmdldENvbnRleHQoIjJkIiksdGhpcy5nZW49bmV3IHhtKHIpfWRyYXcoZSl7bGV0IHI9ZS5zZXRzfHxbXSxuPWUub3B0aW9uc3x8dGhpcy5nZXREZWZhdWx0T3B0aW9ucygpLGk9dGhpcy5jdHgsYT1lLm9wdGlvbnMuZml4ZWREZWNpbWFsUGxhY2VEaWdpdHM7Zm9yKGxldCBzIG9mIHIpc3dpdGNoKHMudHlwZSl7Y2FzZSJwYXRoIjppLnNhdmUoKSxpLnN0cm9rZVN0eWxlPW4uc3Ryb2tlPT09Im5vbmUiPyJ0cmFuc3BhcmVudCI6bi5zdHJva2UsaS5saW5lV2lkdGg9bi5zdHJva2VXaWR0aCxuLnN0cm9rZUxpbmVEYXNoJiZpLnNldExpbmVEYXNoKG4uc3Ryb2tlTGluZURhc2gpLG4uc3Ryb2tlTGluZURhc2hPZmZzZXQmJihpLmxpbmVEYXNoT2Zmc2V0PW4uc3Ryb2tlTGluZURhc2hPZmZzZXQpLHRoaXMuX2RyYXdUb0NvbnRleHQoaSxzLGEpLGkucmVzdG9yZSgpO2JyZWFrO2Nhc2UiZmlsbFBhdGgiOntpLnNhdmUoKSxpLmZpbGxTdHlsZT1uLmZpbGx8fCIiO2xldCBsPWUuc2hhcGU9PT0iY3VydmUifHxlLnNoYXBlPT09InBvbHlnb24ifHxlLnNoYXBlPT09InBhdGgiPyJldmVub2RkIjoibm9uemVybyI7dGhpcy5fZHJhd1RvQ29udGV4dChpLHMsYSxsKSxpLnJlc3RvcmUoKTticmVha31jYXNlImZpbGxTa2V0Y2giOnRoaXMuZmlsbFNrZXRjaChpLHMsbil9fWZpbGxTa2V0Y2goZSxyLG4pe2xldCBpPW4uZmlsbFdlaWdodDtpPDAmJihpPW4uc3Ryb2tlV2lkdGgvMiksZS5zYXZlKCksbi5maWxsTGluZURhc2gmJmUuc2V0TGluZURhc2gobi5maWxsTGluZURhc2gpLG4uZmlsbExpbmVEYXNoT2Zmc2V0JiYoZS5saW5lRGFzaE9mZnNldD1uLmZpbGxMaW5lRGFzaE9mZnNldCksZS5zdHJva2VTdHlsZT1uLmZpbGx8fCIiLGUubGluZVdpZHRoPWksdGhpcy5fZHJhd1RvQ29udGV4dChlLHIsbi5maXhlZERlY2ltYWxQbGFjZURpZ2l0cyksZS5yZXN0b3JlKCl9X2RyYXdUb0NvbnRleHQoZSxyLG4saT0ibm9uemVybyIpe2UuYmVnaW5QYXRoKCk7Zm9yKGxldCBhIG9mIHIub3BzKXtsZXQgcz10eXBlb2Ygbj09Im51bWJlciImJm4+PTA/YS5kYXRhLm1hcChsPT4rbC50b0ZpeGVkKG4pKTphLmRhdGE7c3dpdGNoKGEub3Ape2Nhc2UibW92ZSI6ZS5tb3ZlVG8oc1swXSxzWzFdKTticmVhaztjYXNlImJjdXJ2ZVRvIjplLmJlemllckN1cnZlVG8oc1swXSxzWzFdLHNbMl0sc1szXSxzWzRdLHNbNV0pO2JyZWFrO2Nhc2UibGluZVRvIjplLmxpbmVUbyhzWzBdLHNbMV0pfX1yLnR5cGU9PT0iZmlsbFBhdGgiP2UuZmlsbChpKTplLnN0cm9rZSgpfWdldCBnZW5lcmF0b3IoKXtyZXR1cm4gdGhpcy5nZW59Z2V0RGVmYXVsdE9wdGlvbnMoKXtyZXR1cm4gdGhpcy5nZW4uZGVmYXVsdE9wdGlvbnN9bGluZShlLHIsbixpLGEpe2xldCBzPXRoaXMuZ2VuLmxpbmUoZSxyLG4saSxhKTtyZXR1cm4gdGhpcy5kcmF3KHMpLHN9cmVjdGFuZ2xlKGUscixuLGksYSl7bGV0IHM9dGhpcy5nZW4ucmVjdGFuZ2xlKGUscixuLGksYSk7cmV0dXJuIHRoaXMuZHJhdyhzKSxzfWVsbGlwc2UoZSxyLG4saSxhKXtsZXQgcz10aGlzLmdlbi5lbGxpcHNlKGUscixuLGksYSk7cmV0dXJuIHRoaXMuZHJhdyhzKSxzfWNpcmNsZShlLHIsbixpKXtsZXQgYT10aGlzLmdlbi5jaXJjbGUoZSxyLG4saSk7cmV0dXJuIHRoaXMuZHJhdyhhKSxhfWxpbmVhclBhdGgoZSxyKXtsZXQgbj10aGlzLmdlbi5saW5lYXJQYXRoKGUscik7cmV0dXJuIHRoaXMuZHJhdyhuKSxufXBvbHlnb24oZSxyKXtsZXQgbj10aGlzLmdlbi5wb2x5Z29uKGUscik7cmV0dXJuIHRoaXMuZHJhdyhuKSxufWFyYyhlLHIsbixpLGEscyxsPSExLHUpe2xldCBoPXRoaXMuZ2VuLmFyYyhlLHIsbixpLGEscyxsLHUpO3JldHVybiB0aGlzLmRyYXcoaCksaH1jdXJ2ZShlLHIpe2xldCBuPXRoaXMuZ2VuLmN1cnZlKGUscik7cmV0dXJuIHRoaXMuZHJhdyhuKSxufXBhdGgoZSxyKXtsZXQgbj10aGlzLmdlbi5wYXRoKGUscik7cmV0dXJuIHRoaXMuZHJhdyhuKSxufX0sejU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix6OT1jbGFzc3tzdGF0aWN7byh0aGlzLCJvdCIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy5zdmc9ZSx0aGlzLmdlbj1uZXcgeG0ocil9ZHJhdyhlKXtsZXQgcj1lLnNldHN8fFtdLG49ZS5vcHRpb25zfHx0aGlzLmdldERlZmF1bHRPcHRpb25zKCksaT10aGlzLnN2Zy5vd25lckRvY3VtZW50fHx3aW5kb3cuZG9jdW1lbnQsYT1pLmNyZWF0ZUVsZW1lbnROUyh6NSwiZyIpLHM9ZS5vcHRpb25zLmZpeGVkRGVjaW1hbFBsYWNlRGlnaXRzO2ZvcihsZXQgbCBvZiByKXtsZXQgdT1udWxsO3N3aXRjaChsLnR5cGUpe2Nhc2UicGF0aCI6dT1pLmNyZWF0ZUVsZW1lbnROUyh6NSwicGF0aCIpLHUuc2V0QXR0cmlidXRlKCJkIix0aGlzLm9wc1RvUGF0aChsLHMpKSx1LnNldEF0dHJpYnV0ZSgic3Ryb2tlIixuLnN0cm9rZSksdS5zZXRBdHRyaWJ1dGUoInN0cm9rZS13aWR0aCIsbi5zdHJva2VXaWR0aCsiIiksdS5zZXRBdHRyaWJ1dGUoImZpbGwiLCJub25lIiksbi5zdHJva2VMaW5lRGFzaCYmdS5zZXRBdHRyaWJ1dGUoInN0cm9rZS1kYXNoYXJyYXkiLG4uc3Ryb2tlTGluZURhc2guam9pbigiICIpLnRyaW0oKSksbi5zdHJva2VMaW5lRGFzaE9mZnNldCYmdS5zZXRBdHRyaWJ1dGUoInN0cm9rZS1kYXNob2Zmc2V0IixgJHtuLnN0cm9rZUxpbmVEYXNoT2Zmc2V0fWApO2JyZWFrO2Nhc2UiZmlsbFBhdGgiOnU9aS5jcmVhdGVFbGVtZW50TlMoejUsInBhdGgiKSx1LnNldEF0dHJpYnV0ZSgiZCIsdGhpcy5vcHNUb1BhdGgobCxzKSksdS5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsIm5vbmUiKSx1LnNldEF0dHJpYnV0ZSgic3Ryb2tlLXdpZHRoIiwiMCIpLHUuc2V0QXR0cmlidXRlKCJmaWxsIixuLmZpbGx8fCIiKSxlLnNoYXBlIT09ImN1cnZlIiYmZS5zaGFwZSE9PSJwb2x5Z29uInx8dS5zZXRBdHRyaWJ1dGUoImZpbGwtcnVsZSIsImV2ZW5vZGQiKTticmVhaztjYXNlImZpbGxTa2V0Y2giOnU9dGhpcy5maWxsU2tldGNoKGksbCxuKX11JiZhLmFwcGVuZENoaWxkKHUpfXJldHVybiBhfWZpbGxTa2V0Y2goZSxyLG4pe2xldCBpPW4uZmlsbFdlaWdodDtpPDAmJihpPW4uc3Ryb2tlV2lkdGgvMik7bGV0IGE9ZS5jcmVhdGVFbGVtZW50TlMoejUsInBhdGgiKTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoImQiLHRoaXMub3BzVG9QYXRoKHIsbi5maXhlZERlY2ltYWxQbGFjZURpZ2l0cykpLGEuc2V0QXR0cmlidXRlKCJzdHJva2UiLG4uZmlsbHx8IiIpLGEuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLGkrIiIpLGEuc2V0QXR0cmlidXRlKCJmaWxsIiwibm9uZSIpLG4uZmlsbExpbmVEYXNoJiZhLnNldEF0dHJpYnV0ZSgic3Ryb2tlLWRhc2hhcnJheSIsbi5maWxsTGluZURhc2guam9pbigiICIpLnRyaW0oKSksbi5maWxsTGluZURhc2hPZmZzZXQmJmEuc2V0QXR0cmlidXRlKCJzdHJva2UtZGFzaG9mZnNldCIsYCR7bi5maWxsTGluZURhc2hPZmZzZXR9YCksYX1nZXQgZ2VuZXJhdG9yKCl7cmV0dXJuIHRoaXMuZ2VufWdldERlZmF1bHRPcHRpb25zKCl7cmV0dXJuIHRoaXMuZ2VuLmRlZmF1bHRPcHRpb25zfW9wc1RvUGF0aChlLHIpe3JldHVybiB0aGlzLmdlbi5vcHNUb1BhdGgoZSxyKX1saW5lKGUscixuLGksYSl7bGV0IHM9dGhpcy5nZW4ubGluZShlLHIsbixpLGEpO3JldHVybiB0aGlzLmRyYXcocyl9cmVjdGFuZ2xlKGUscixuLGksYSl7bGV0IHM9dGhpcy5nZW4ucmVjdGFuZ2xlKGUscixuLGksYSk7cmV0dXJuIHRoaXMuZHJhdyhzKX1lbGxpcHNlKGUscixuLGksYSl7bGV0IHM9dGhpcy5nZW4uZWxsaXBzZShlLHIsbixpLGEpO3JldHVybiB0aGlzLmRyYXcocyl9Y2lyY2xlKGUscixuLGkpe2xldCBhPXRoaXMuZ2VuLmNpcmNsZShlLHIsbixpKTtyZXR1cm4gdGhpcy5kcmF3KGEpfWxpbmVhclBhdGgoZSxyKXtsZXQgbj10aGlzLmdlbi5saW5lYXJQYXRoKGUscik7cmV0dXJuIHRoaXMuZHJhdyhuKX1wb2x5Z29uKGUscil7bGV0IG49dGhpcy5nZW4ucG9seWdvbihlLHIpO3JldHVybiB0aGlzLmRyYXcobil9YXJjKGUscixuLGksYSxzLGw9ITEsdSl7bGV0IGg9dGhpcy5nZW4uYXJjKGUscixuLGksYSxzLGwsdSk7cmV0dXJuIHRoaXMuZHJhdyhoKX1jdXJ2ZShlLHIpe2xldCBuPXRoaXMuZ2VuLmN1cnZlKGUscik7cmV0dXJuIHRoaXMuZHJhdyhuKX1wYXRoKGUscil7bGV0IG49dGhpcy5nZW4ucGF0aChlLHIpO3JldHVybiB0aGlzLmRyYXcobil9fSxYZT17Y2FudmFzOm8oKHQsZSk9Pm5ldyBGOSh0LGUpLCJjYW52YXMiKSxzdmc6bygodCxlKT0+bmV3IHo5KHQsZSksInN2ZyIpLGdlbmVyYXRvcjpvKHQ9Pm5ldyB4bSh0KSwiZ2VuZXJhdG9yIiksbmV3U2VlZDpvKCgpPT54bS5uZXdTZWVkKCksIm5ld1NlZWQiKX19KTtmdW5jdGlvbiBGaih0LGUpe2xldHtsYWJlbFN0eWxlczpyfT1aZShlKTtlLmxhYmVsU3R5bGU9cjtsZXQgbj1vdChlKSxpPW47bnx8KGk9ImFuY2hvciIpO2xldCBhPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLGkpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxzPTEse2Nzc1N0eWxlczpsfT1lLHU9WGUuc3ZnKGEpLGg9S2UoZSx7ZmlsbDoiYmxhY2siLHN0cm9rZToibm9uZSIsZmlsbFN0eWxlOiJzb2xpZCJ9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKGgucm91Z2huZXNzPTApO2xldCBmPXUuY2lyY2xlKDAsMCxzKjIsaCksZD1hLmluc2VydCgoKT0+ZiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIGQuYXR0cigiY2xhc3MiLCJhbmNob3IiKS5hdHRyKCJzdHlsZSIsR24obCkpLGplKGUsZCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24ocCl7cmV0dXJuIFkuaW5mbygiQ2lyY2xlIGludGVyc2VjdCIsZSxzLHApLFllLmNpcmNsZShlLHMscCl9LGF9dmFyIHpqPU0oKCk9PnsidXNlIHN0cmljdCI7dXQoKTtPdCgpO3F0KCk7WHQoKTtqdCgpO2hyKCk7byhGaiwiYW5jaG9yIil9KTtmdW5jdGlvbiBHaih0LGUscixuLGksYSxzKXtsZXQgdT0odCtyKS8yLGg9KGUrbikvMixmPU1hdGguYXRhbjIobi1lLHItdCksZD0oci10KS8yLHA9KG4tZSkvMixtPWQvaSxnPXAvYSx5PU1hdGguc3FydChtKioyK2cqKjIpO2lmKHk+MSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBnaXZlbiByYWRpaSBhcmUgdG9vIHNtYWxsIHRvIGNyZWF0ZSBhbiBhcmMgYmV0d2VlbiB0aGUgcG9pbnRzLiIpO2xldCB2PU1hdGguc3FydCgxLXkqKjIpLHg9dSt2KmEqTWF0aC5zaW4oZikqKHM/LTE6MSksYj1oLXYqaSpNYXRoLmNvcyhmKSoocz8tMToxKSx3PU1hdGguYXRhbjIoKGUtYikvYSwodC14KS9pKSxUPU1hdGguYXRhbjIoKG4tYikvYSwoci14KS9pKS13O3MmJlQ8MCYmKFQrPTIqTWF0aC5QSSksIXMmJlQ+MCYmKFQtPTIqTWF0aC5QSSk7bGV0IEU9W107Zm9yKGxldCBMPTA7TDwyMDtMKyspe2xldCBTPUwvMTksQT13K1MqVCxJPXgraSpNYXRoLmNvcyhBKSxEPWIrYSpNYXRoLnNpbihBKTtFLnB1c2goe3g6SSx5OkR9KX1yZXR1cm4gRX1hc3luYyBmdW5jdGlvbiAkaih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WmUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphfT1hd2FpdCBzdCh0LGUsb3QoZSkpLHM9YS53aWR0aCtlLnBhZGRpbmcrMjAsbD1hLmhlaWdodCtlLnBhZGRpbmcsdT1sLzIsaD11LygyLjUrbC81MCkse2Nzc1N0eWxlczpmfT1lLGQ9W3t4OnMvMix5Oi1sLzJ9LHt4Oi1zLzIseTotbC8yfSwuLi5Haigtcy8yLC1sLzIsLXMvMixsLzIsaCx1LCExKSx7eDpzLzIseTpsLzJ9LC4uLkdqKHMvMixsLzIscy8yLC1sLzIsaCx1LCEwKV0scD1YZS5zdmcoaSksbT1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKG0ucm91Z2huZXNzPTAsbS5maWxsU3R5bGU9InNvbGlkIik7bGV0IGc9V3QoZCkseT1wLnBhdGgoZyxtKSx2PWkuaW5zZXJ0KCgpPT55LCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gdi5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLGYmJmUubG9vayE9PSJoYW5kRHJhd24iJiZ2LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixmKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmdi5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksdi5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtoLzJ9LCAwKWApLGplKGUsdiksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeCl7cmV0dXJuIFllLnBvbHlnb24oZSxkLHgpfSxpfXZhciBWaj1NKCgpPT57InVzZSBzdHJpY3QiO090KCk7cXQoKTtYdCgpO2p0KCk7byhHaiwiZ2VuZXJhdGVBcmNQb2ludHMiKTtvKCRqLCJib3dUaWVSZWN0Iil9KTtmdW5jdGlvbiBJYSh0LGUscixuKXtyZXR1cm4gdC5pbnNlcnQoInBvbHlnb24iLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJwb2ludHMiLG4ubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLngrIiwiK2kueX0pLmpvaW4oIiAiKSkuYXR0cigiY2xhc3MiLCJsYWJlbC1jb250YWluZXIiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistZS8yKyIsIityLzIrIikiKX12YXIgT3U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKElhLCJpbnNlcnRQb2x5Z29uU2hhcGUiKX0pO2FzeW5jIGZ1bmN0aW9uIFVqKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1aZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmF9PWF3YWl0IHN0KHQsZSxvdChlKSkscz1hLmhlaWdodCtlLnBhZGRpbmcsbD0xMix1PWEud2lkdGgrZS5wYWRkaW5nK2wsaD0wLGY9dSxkPS1zLHA9MCxtPVt7eDpoK2wseTpkfSx7eDpmLHk6ZH0se3g6Zix5OnB9LHt4OmgseTpwfSx7eDpoLHk6ZCtsfSx7eDpoK2wseTpkfV0sZyx7Y3NzU3R5bGVzOnl9PWU7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCB2PVhlLnN2ZyhpKSx4PUtlKGUse30pLGI9V3QobSksdz12LnBhdGgoYix4KTtnPWkuaW5zZXJ0KCgpPT53LCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstdS8yfSwgJHtzLzJ9KWApLHkmJmcuYXR0cigic3R5bGUiLHkpfWVsc2UgZz1JYShpLHUscyxtKTtyZXR1cm4gbiYmZy5hdHRyKCJzdHlsZSIsbiksamUoZSxnKSxlLmludGVyc2VjdD1mdW5jdGlvbih2KXtyZXR1cm4gWWUucG9seWdvbihlLG0sdil9LGl9dmFyIEhqPU0oKCk9PnsidXNlIHN0cmljdCI7T3QoKTtxdCgpO1h0KCk7anQoKTtPdSgpO090KCk7byhVaiwiY2FyZCIpfSk7ZnVuY3Rpb24gV2oodCxlKXtsZXR7bm9kZVN0eWxlczpyfT1aZShlKTtlLmxhYmVsPSIiO2xldCBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLG90KGUpKS5hdHRyKCJpZCIsZS5kb21JZD8/ZS5pZCkse2Nzc1N0eWxlczppfT1lLGE9TWF0aC5tYXgoMjgsZS53aWR0aD8/MCkscz1be3g6MCx5OmEvMn0se3g6YS8yLHk6MH0se3g6MCx5Oi1hLzJ9LHt4Oi1hLzIseTowfV0sbD1YZS5zdmcobiksdT1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKHUucm91Z2huZXNzPTAsdS5maWxsU3R5bGU9InNvbGlkIik7bGV0IGg9V3QocyksZj1sLnBhdGgoaCx1KSxkPW4uaW5zZXJ0KCgpPT5mLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gaSYmZS5sb29rIT09ImhhbmREcmF3biImJmQuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGkpLHImJmUubG9vayE9PSJoYW5kRHJhd24iJiZkLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixyKSxlLndpZHRoPTI4LGUuaGVpZ2h0PTI4LGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHApe3JldHVybiBZZS5wb2x5Z29uKGUscyxwKX0sbn12YXIgWWo9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO2p0KCk7WHQoKTtPdCgpO28oV2osImNob2ljZSIpfSk7YXN5bmMgZnVuY3Rpb24gcWoodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxoYWxmUGFkZGluZzpzfT1hd2FpdCBzdCh0LGUsb3QoZSkpLGw9YS53aWR0aC8yK3MsdSx7Y3NzU3R5bGVzOmh9PWU7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBmPVhlLnN2ZyhpKSxkPUtlKGUse30pLHA9Zi5jaXJjbGUoMCwwLGwqMixkKTt1PWkuaW5zZXJ0KCgpPT5wLCI6Zmlyc3QtY2hpbGQiKSx1LmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLEduKGgpKX1lbHNlIHU9aS5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLG4pLmF0dHIoInIiLGwpLmF0dHIoImN4IiwwKS5hdHRyKCJjeSIsMCk7cmV0dXJuIGplKGUsdSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oZil7cmV0dXJuIFkuaW5mbygiQ2lyY2xlIGludGVyc2VjdCIsZSxsLGYpLFllLmNpcmNsZShlLGwsZil9LGl9dmFyIFhqPU0oKCk9PnsidXNlIHN0cmljdCI7dXQoKTtPdCgpO3F0KCk7WHQoKTtqdCgpO2hyKCk7byhxaiwiY2lyY2xlIil9KTtmdW5jdGlvbiBHN2UodCl7bGV0IGU9TWF0aC5jb3MoTWF0aC5QSS80KSxyPU1hdGguc2luKE1hdGguUEkvNCksbj10KjIsaT17eDpuLzIqZSx5Om4vMipyfSxhPXt4Oi0obi8yKSplLHk6bi8yKnJ9LHM9e3g6LShuLzIpKmUseTotKG4vMikqcn0sbD17eDpuLzIqZSx5Oi0obi8yKSpyfTtyZXR1cm5gTSAke2EueH0sJHthLnl9IEwgJHtsLnh9LCR7bC55fQogICAgICAgICAgICAgICAgICAgTSAke2kueH0sJHtpLnl9IEwgJHtzLnh9LCR7cy55fWB9ZnVuY3Rpb24gamoodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yLGUubGFiZWw9IiI7bGV0IGk9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsb3QoZSkpLmF0dHIoImlkIixlLmRvbUlkPz9lLmlkKSxhPU1hdGgubWF4KDMwLGU/LndpZHRoPz8wKSx7Y3NzU3R5bGVzOnN9PWUsbD1YZS5zdmcoaSksdT1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKHUucm91Z2huZXNzPTAsdS5maWxsU3R5bGU9InNvbGlkIik7bGV0IGg9bC5jaXJjbGUoMCwwLGEqMix1KSxmPUc3ZShhKSxkPWwucGF0aChmLHUpLHA9aS5pbnNlcnQoKCk9PmgsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBwLmluc2VydCgoKT0+ZCkscyYmZS5sb29rIT09ImhhbmREcmF3biImJnAuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLHMpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZwLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxqZShlLHApLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKG0pe3JldHVybiBZLmluZm8oImNyb3NzZWRDaXJjbGUgaW50ZXJzZWN0IixlLHtyYWRpdXM6YSxwb2ludDptfSksWWUuY2lyY2xlKGUsYSxtKX0saX12YXIgS2o9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt1dCgpO090KCk7WHQoKTtqdCgpO3F0KCk7byhHN2UsImNyZWF0ZUxpbmUiKTtvKGpqLCJjcm9zc2VkQ2lyY2xlIil9KTtmdW5jdGlvbiBZaCh0LGUscixuPTEwMCxpPTAsYT0xODApe2xldCBzPVtdLGw9aSpNYXRoLlBJLzE4MCxmPShhKk1hdGguUEkvMTgwLWwpLyhuLTEpO2ZvcihsZXQgZD0wO2Q8bjtkKyspe2xldCBwPWwrZCpmLG09dCtyKk1hdGguY29zKHApLGc9ZStyKk1hdGguc2luKHApO3MucHVzaCh7eDotbSx5Oi1nfSl9cmV0dXJuIHN9YXN5bmMgZnVuY3Rpb24gUWoodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBzdCh0LGUsb3QoZSkpLGw9YS53aWR0aCsoZS5wYWRkaW5nPz8wKSx1PWEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApLGg9TWF0aC5tYXgoNSx1Ki4xKSx7Y3NzU3R5bGVzOmZ9PWUsZD1bLi4uWWgobC8yLC11LzIsaCwzMCwtOTAsMCkse3g6LWwvMi1oLHk6aH0sLi4uWWgobC8yK2gqMiwtaCxoLDIwLC0xODAsLTI3MCksLi4uWWgobC8yK2gqMixoLGgsMjAsLTkwLC0xODApLHt4Oi1sLzItaCx5Oi11LzJ9LC4uLlloKGwvMix1LzIsaCwyMCwwLDkwKV0scD1be3g6bC8yLHk6LXUvMi1ofSx7eDotbC8yLHk6LXUvMi1ofSwuLi5ZaChsLzIsLXUvMixoLDIwLC05MCwwKSx7eDotbC8yLWgseTotaH0sLi4uWWgobC8yK2wqLjEsLWgsaCwyMCwtMTgwLC0yNzApLC4uLlloKGwvMitsKi4xLGgsaCwyMCwtOTAsLTE4MCkse3g6LWwvMi1oLHk6dS8yfSwuLi5ZaChsLzIsdS8yLGgsMjAsMCw5MCkse3g6LWwvMix5OnUvMitofSx7eDpsLzIseTp1LzIraH1dLG09WGUuc3ZnKGkpLGc9S2UoZSx7ZmlsbDoibm9uZSJ9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKGcucm91Z2huZXNzPTAsZy5maWxsU3R5bGU9InNvbGlkIik7bGV0IHY9V3QoZCkucmVwbGFjZSgiWiIsIiIpLHg9bS5wYXRoKHYsZyksYj1XdChwKSx3PW0ucGF0aChiLHsuLi5nfSksXz1pLmluc2VydCgiZyIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBfLmluc2VydCgoKT0+dywiOmZpcnN0LWNoaWxkIikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDApLF8uaW5zZXJ0KCgpPT54LCI6Zmlyc3QtY2hpbGQiKSxfLmF0dHIoImNsYXNzIiwidGV4dCIpLGYmJmUubG9vayE9PSJoYW5kRHJhd24iJiZfLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixmKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmXy5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksXy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtofSwgMClgKSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1sLzIraC0oYS54LShhLmxlZnQ/PzApKX0sJHstdS8yKyhlLnBhZGRpbmc/PzApLzItKGEueS0oYS50b3A/PzApKX0pYCksamUoZSxfKSxlLmludGVyc2VjdD1mdW5jdGlvbihUKXtyZXR1cm4gWWUucG9seWdvbihlLHAsVCl9LGl9dmFyIFpqPU0oKCk9PnsidXNlIHN0cmljdCI7T3QoKTtxdCgpO1h0KCk7anQoKTtvKFloLCJnZW5lcmF0ZUNpcmNsZVBvaW50cyIpO28oUWosImN1cmx5QnJhY2VMZWZ0Iil9KTtmdW5jdGlvbiBxaCh0LGUscixuPTEwMCxpPTAsYT0xODApe2xldCBzPVtdLGw9aSpNYXRoLlBJLzE4MCxmPShhKk1hdGguUEkvMTgwLWwpLyhuLTEpO2ZvcihsZXQgZD0wO2Q8bjtkKyspe2xldCBwPWwrZCpmLG09dCtyKk1hdGguY29zKHApLGc9ZStyKk1hdGguc2luKHApO3MucHVzaCh7eDptLHk6Z30pfXJldHVybiBzfWFzeW5jIGZ1bmN0aW9uIEpqKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1aZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsbGFiZWw6c309YXdhaXQgc3QodCxlLG90KGUpKSxsPWEud2lkdGgrKGUucGFkZGluZz8/MCksdT1hLmhlaWdodCsoZS5wYWRkaW5nPz8wKSxoPU1hdGgubWF4KDUsdSouMSkse2Nzc1N0eWxlczpmfT1lLGQ9Wy4uLnFoKGwvMiwtdS8yLGgsMjAsLTkwLDApLHt4OmwvMitoLHk6LWh9LC4uLnFoKGwvMitoKjIsLWgsaCwyMCwtMTgwLC0yNzApLC4uLnFoKGwvMitoKjIsaCxoLDIwLC05MCwtMTgwKSx7eDpsLzIraCx5OnUvMn0sLi4ucWgobC8yLHUvMixoLDIwLDAsOTApXSxwPVt7eDotbC8yLHk6LXUvMi1ofSx7eDpsLzIseTotdS8yLWh9LC4uLnFoKGwvMiwtdS8yLGgsMjAsLTkwLDApLHt4OmwvMitoLHk6LWh9LC4uLnFoKGwvMitoKjIsLWgsaCwyMCwtMTgwLC0yNzApLC4uLnFoKGwvMitoKjIsaCxoLDIwLC05MCwtMTgwKSx7eDpsLzIraCx5OnUvMn0sLi4ucWgobC8yLHUvMixoLDIwLDAsOTApLHt4OmwvMix5OnUvMitofSx7eDotbC8yLHk6dS8yK2h9XSxtPVhlLnN2ZyhpKSxnPUtlKGUse2ZpbGw6Im5vbmUifSk7ZS5sb29rIT09ImhhbmREcmF3biImJihnLnJvdWdobmVzcz0wLGcuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCB2PVd0KGQpLnJlcGxhY2UoIloiLCIiKSx4PW0ucGF0aCh2LGcpLGI9V3QocCksdz1tLnBhdGgoYix7Li4uZ30pLF89aS5pbnNlcnQoImciLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gXy5pbnNlcnQoKCk9PncsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwwKSxfLmluc2VydCgoKT0+eCwiOmZpcnN0LWNoaWxkIiksXy5hdHRyKCJjbGFzcyIsInRleHQiKSxmJiZlLmxvb2shPT0iaGFuZERyYXduIiYmXy5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsZiksbiYmZS5sb29rIT09ImhhbmREcmF3biImJl8uc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLF8uYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWh9LCAwKWApLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWwvMisoZS5wYWRkaW5nPz8wKS8yLShhLngtKGEubGVmdD8/MCkpfSwkey11LzIrKGUucGFkZGluZz8/MCkvMi0oYS55LShhLnRvcD8/MCkpfSlgKSxqZShlLF8pLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKFQpe3JldHVybiBZZS5wb2x5Z29uKGUscCxUKX0saX12YXIgZUs9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO3F0KCk7WHQoKTtqdCgpO28ocWgsImdlbmVyYXRlQ2lyY2xlUG9pbnRzIik7byhKaiwiY3VybHlCcmFjZVJpZ2h0Iil9KTtmdW5jdGlvbiBPYSh0LGUscixuPTEwMCxpPTAsYT0xODApe2xldCBzPVtdLGw9aSpNYXRoLlBJLzE4MCxmPShhKk1hdGguUEkvMTgwLWwpLyhuLTEpO2ZvcihsZXQgZD0wO2Q8bjtkKyspe2xldCBwPWwrZCpmLG09dCtyKk1hdGguY29zKHApLGc9ZStyKk1hdGguc2luKHApO3MucHVzaCh7eDotbSx5Oi1nfSl9cmV0dXJuIHN9YXN5bmMgZnVuY3Rpb24gdEsodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBzdCh0LGUsb3QoZSkpLGw9YS53aWR0aCsoZS5wYWRkaW5nPz8wKSx1PWEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApLGg9TWF0aC5tYXgoNSx1Ki4xKSx7Y3NzU3R5bGVzOmZ9PWUsZD1bLi4uT2EobC8yLC11LzIsaCwzMCwtOTAsMCkse3g6LWwvMi1oLHk6aH0sLi4uT2EobC8yK2gqMiwtaCxoLDIwLC0xODAsLTI3MCksLi4uT2EobC8yK2gqMixoLGgsMjAsLTkwLC0xODApLHt4Oi1sLzItaCx5Oi11LzJ9LC4uLk9hKGwvMix1LzIsaCwyMCwwLDkwKV0scD1bLi4uT2EoLWwvMitoK2gvMiwtdS8yLGgsMjAsLTkwLC0xODApLHt4OmwvMi1oLzIseTpofSwuLi5PYSgtbC8yLWgvMiwtaCxoLDIwLDAsOTApLC4uLk9hKC1sLzItaC8yLGgsaCwyMCwtOTAsMCkse3g6bC8yLWgvMix5Oi1ofSwuLi5PYSgtbC8yK2graC8yLHUvMixoLDMwLC0xODAsLTI3MCldLG09W3t4OmwvMix5Oi11LzItaH0se3g6LWwvMix5Oi11LzItaH0sLi4uT2EobC8yLC11LzIsaCwyMCwtOTAsMCkse3g6LWwvMi1oLHk6LWh9LC4uLk9hKGwvMitoKjIsLWgsaCwyMCwtMTgwLC0yNzApLC4uLk9hKGwvMitoKjIsaCxoLDIwLC05MCwtMTgwKSx7eDotbC8yLWgseTp1LzJ9LC4uLk9hKGwvMix1LzIsaCwyMCwwLDkwKSx7eDotbC8yLHk6dS8yK2h9LHt4OmwvMi1oLWgvMix5OnUvMitofSwuLi5PYSgtbC8yK2graC8yLC11LzIsaCwyMCwtOTAsLTE4MCkse3g6bC8yLWgvMix5Omh9LC4uLk9hKC1sLzItaC8yLC1oLGgsMjAsMCw5MCksLi4uT2EoLWwvMi1oLzIsaCxoLDIwLC05MCwwKSx7eDpsLzItaC8yLHk6LWh9LC4uLk9hKC1sLzIraCtoLzIsdS8yLGgsMzAsLTE4MCwtMjcwKV0sZz1YZS5zdmcoaSkseT1LZShlLHtmaWxsOiJub25lIn0pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoeS5yb3VnaG5lc3M9MCx5LmZpbGxTdHlsZT0ic29saWQiKTtsZXQgeD1XdChkKS5yZXBsYWNlKCJaIiwiIiksYj1nLnBhdGgoeCx5KSxfPVd0KHApLnJlcGxhY2UoIloiLCIiKSxUPWcucGF0aChfLHkpLEU9V3QobSksTD1nLnBhdGgoRSx7Li4ueX0pLFM9aS5pbnNlcnQoImciLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gUy5pbnNlcnQoKCk9PkwsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwwKSxTLmluc2VydCgoKT0+YiwiOmZpcnN0LWNoaWxkIiksUy5pbnNlcnQoKCk9PlQsIjpmaXJzdC1jaGlsZCIpLFMuYXR0cigiY2xhc3MiLCJ0ZXh0IiksZiYmZS5sb29rIT09ImhhbmREcmF3biImJlMuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGYpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZTLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxTLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2gtaC80fSwgMClgKSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1sLzIrKGUucGFkZGluZz8/MCkvMi0oYS54LShhLmxlZnQ/PzApKX0sJHstdS8yKyhlLnBhZGRpbmc/PzApLzItKGEueS0oYS50b3A/PzApKX0pYCksamUoZSxTKSxlLmludGVyc2VjdD1mdW5jdGlvbihBKXtyZXR1cm4gWWUucG9seWdvbihlLG0sQSl9LGl9dmFyIHJLPU0oKCk9PnsidXNlIHN0cmljdCI7T3QoKTtxdCgpO1h0KCk7anQoKTtvKE9hLCJnZW5lcmF0ZUNpcmNsZVBvaW50cyIpO28odEssImN1cmx5QnJhY2VzIil9KTthc3luYyBmdW5jdGlvbiBuSyh0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WmUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphfT1hd2FpdCBzdCh0LGUsb3QoZSkpLHM9ODAsbD0yMCx1PU1hdGgubWF4KHMsKGEud2lkdGgrKGUucGFkZGluZz8/MCkqMikqMS4yNSxlPy53aWR0aD8/MCksaD1NYXRoLm1heChsLGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSxmPWgvMix7Y3NzU3R5bGVzOmR9PWUscD1YZS5zdmcoaSksbT1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKG0ucm91Z2huZXNzPTAsbS5maWxsU3R5bGU9InNvbGlkIik7bGV0IGc9dSx5PWgsdj1nLWYseD15LzQsYj1be3g6dix5OjB9LHt4LHk6MH0se3g6MCx5OnkvMn0se3gseX0se3g6dix5fSwuLi5PNSgtdiwteS8yLGYsNTAsMjcwLDkwKV0sdz1XdChiKSxfPXAucGF0aCh3LG0pLFQ9aS5pbnNlcnQoKCk9Pl8sIjpmaXJzdC1jaGlsZCIpO3JldHVybiBULmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIiksZCYmZS5sb29rIT09ImhhbmREcmF3biImJlQuc2VsZWN0Q2hpbGRyZW4oInBhdGgiKS5hdHRyKCJzdHlsZSIsZCksbiYmZS5sb29rIT09ImhhbmREcmF3biImJlQuc2VsZWN0Q2hpbGRyZW4oInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksVC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstdS8yfSwgJHstaC8yfSlgKSxqZShlLFQpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiBZZS5wb2x5Z29uKGUsYixFKX0saX12YXIgaUs9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO3F0KCk7WHQoKTtqdCgpO28obkssImN1cnZlZFRyYXBlem9pZCIpfSk7YXN5bmMgZnVuY3Rpb24gYUsodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBzdCh0LGUsb3QoZSkpLGw9TWF0aC5tYXgoYS53aWR0aCtlLnBhZGRpbmcsZS53aWR0aD8/MCksdT1sLzIsaD11LygyLjUrbC81MCksZj1NYXRoLm1heChhLmhlaWdodCtoK2UucGFkZGluZyxlLmhlaWdodD8/MCksZCx7Y3NzU3R5bGVzOnB9PWU7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBtPVhlLnN2ZyhpKSxnPVY3ZSgwLDAsbCxmLHUsaCkseT1VN2UoMCxoLGwsZix1LGgpLHY9bS5wYXRoKGcsS2UoZSx7fSkpLHg9bS5wYXRoKHksS2UoZSx7ZmlsbDoibm9uZSJ9KSk7ZD1pLmluc2VydCgoKT0+eCwiOmZpcnN0LWNoaWxkIiksZD1pLmluc2VydCgoKT0+diwiOmZpcnN0LWNoaWxkIiksZC5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLHAmJmQuYXR0cigic3R5bGUiLHApfWVsc2V7bGV0IG09JDdlKDAsMCxsLGYsdSxoKTtkPWkuaW5zZXJ0KCJwYXRoIiwiOmZpcnN0LWNoaWxkIikuYXR0cigiZCIsbSkuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIsR24ocCkpLmF0dHIoInN0eWxlIixuKX1yZXR1cm4gZC5hdHRyKCJsYWJlbC1vZmZzZXQteSIsaCksZC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstbC8yfSwgJHstKGYvMitoKX0pYCksamUoZSxkKSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey0oYS53aWR0aC8yKS0oYS54LShhLmxlZnQ/PzApKX0sICR7LShhLmhlaWdodC8yKSsoZS5wYWRkaW5nPz8wKS8xLjUtKGEueS0oYS50b3A/PzApKX0pYCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24obSl7bGV0IGc9WWUucmVjdChlLG0pLHk9Zy54LShlLng/PzApO2lmKHUhPTAmJihNYXRoLmFicyh5KTwoZS53aWR0aD8/MCkvMnx8TWF0aC5hYnMoeSk9PShlLndpZHRoPz8wKS8yJiZNYXRoLmFicyhnLnktKGUueT8/MCkpPihlLmhlaWdodD8/MCkvMi1oKSl7bGV0IHY9aCpoKigxLXkqeS8odSp1KSk7dj4wJiYodj1NYXRoLnNxcnQodikpLHY9aC12LG0ueS0oZS55Pz8wKT4wJiYodj0tdiksZy55Kz12fXJldHVybiBnfSxpfXZhciAkN2UsVjdlLFU3ZSxzSz1NKCgpPT57InVzZSBzdHJpY3QiO090KCk7cXQoKTtYdCgpO2p0KCk7aHIoKTskN2U9bygodCxlLHIsbixpLGEpPT5bYE0ke3R9LCR7ZSthfWAsYGEke2l9LCR7YX0gMCwwLDAgJHtyfSwwYCxgYSR7aX0sJHthfSAwLDAsMCAkey1yfSwwYCxgbDAsJHtufWAsYGEke2l9LCR7YX0gMCwwLDAgJHtyfSwwYCxgbDAsJHstbn1gXS5qb2luKCIgIiksImNyZWF0ZUN5bGluZGVyUGF0aEQiKSxWN2U9bygodCxlLHIsbixpLGEpPT5bYE0ke3R9LCR7ZSthfWAsYE0ke3Qrcn0sJHtlK2F9YCxgYSR7aX0sJHthfSAwLDAsMCAkey1yfSwwYCxgbDAsJHtufWAsYGEke2l9LCR7YX0gMCwwLDAgJHtyfSwwYCxgbDAsJHstbn1gXS5qb2luKCIgIiksImNyZWF0ZU91dGVyQ3lsaW5kZXJQYXRoRCIpLFU3ZT1vKCh0LGUscixuLGksYSk9PltgTSR7dC1yLzJ9LCR7LW4vMn1gLGBhJHtpfSwke2F9IDAsMCwwICR7cn0sMGBdLmpvaW4oIiAiKSwiY3JlYXRlSW5uZXJDeWxpbmRlclBhdGhEIik7byhhSywiY3lsaW5kZXIiKX0pO2FzeW5jIGZ1bmN0aW9uIG9LKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1aZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsbGFiZWw6c309YXdhaXQgc3QodCxlLG90KGUpKSxsPWEud2lkdGgrZS5wYWRkaW5nLHU9YS5oZWlnaHQrZS5wYWRkaW5nLGg9dSouMixmPS1sLzIsZD0tdS8yLWgvMix7Y3NzU3R5bGVzOnB9PWUsbT1YZS5zdmcoaSksZz1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKGcucm91Z2huZXNzPTAsZy5maWxsU3R5bGU9InNvbGlkIik7bGV0IHk9W3t4OmYseTpkK2h9LHt4Oi1mLHk6ZCtofSx7eDotZix5Oi1kfSx7eDpmLHk6LWR9LHt4OmYseTpkfSx7eDotZix5OmR9LHt4Oi1mLHk6ZCtofV0sdj1tLnBvbHlnb24oeS5tYXAoYj0+W2IueCxiLnldKSxnKSx4PWkuaW5zZXJ0KCgpPT52LCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4geC5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLHAmJmUubG9vayE9PSJoYW5kRHJhd24iJiZ4LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixwKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmeC5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbikscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtmKyhlLnBhZGRpbmc/PzApLzItKGEueC0oYS5sZWZ0Pz8wKSl9LCAke2QraCsoZS5wYWRkaW5nPz8wKS8yLShhLnktKGEudG9wPz8wKSl9KWApLGplKGUseCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIFllLnJlY3QoZSxiKX0saX12YXIgbEs9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO3F0KCk7WHQoKTtqdCgpO28ob0ssImRpdmlkZWRSZWN0YW5nbGUiKX0pO2FzeW5jIGZ1bmN0aW9uIGNLKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1aZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsaGFsZlBhZGRpbmc6c309YXdhaXQgc3QodCxlLG90KGUpKSx1PWEud2lkdGgvMitzKzUsaD1hLndpZHRoLzIrcyxmLHtjc3NTdHlsZXM6ZH09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IHA9WGUuc3ZnKGkpLG09S2UoZSx7cm91Z2huZXNzOi4yLHN0cm9rZVdpZHRoOjIuNX0pLGc9S2UoZSx7cm91Z2huZXNzOi4yLHN0cm9rZVdpZHRoOjEuNX0pLHk9cC5jaXJjbGUoMCwwLHUqMixtKSx2PXAuY2lyY2xlKDAsMCxoKjIsZyk7Zj1pLmluc2VydCgiZyIsIjpmaXJzdC1jaGlsZCIpLGYuYXR0cigiY2xhc3MiLEduKGUuY3NzQ2xhc3NlcykpLmF0dHIoInN0eWxlIixHbihkKSksZi5ub2RlKCk/LmFwcGVuZENoaWxkKHkpLGYubm9kZSgpPy5hcHBlbmRDaGlsZCh2KX1lbHNle2Y9aS5pbnNlcnQoImciLCI6Zmlyc3QtY2hpbGQiKTtsZXQgcD1mLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIiksbT1mLmluc2VydCgiY2lyY2xlIik7Zi5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixuKSxwLmF0dHIoImNsYXNzIiwib3V0ZXItY2lyY2xlIikuYXR0cigic3R5bGUiLG4pLmF0dHIoInIiLHUpLmF0dHIoImN4IiwwKS5hdHRyKCJjeSIsMCksbS5hdHRyKCJjbGFzcyIsImlubmVyLWNpcmNsZSIpLmF0dHIoInN0eWxlIixuKS5hdHRyKCJyIixoKS5hdHRyKCJjeCIsMCkuYXR0cigiY3kiLDApfXJldHVybiBqZShlLGYpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHApe3JldHVybiBZLmluZm8oIkRvdWJsZUNpcmNsZSBpbnRlcnNlY3QiLGUsdSxwKSxZZS5jaXJjbGUoZSx1LHApfSxpfXZhciB1Sz1NKCgpPT57InVzZSBzdHJpY3QiO3V0KCk7T3QoKTtxdCgpO1h0KCk7anQoKTtocigpO28oY0ssImRvdWJsZWNpcmNsZSIpfSk7ZnVuY3Rpb24gaEsodCxlLHtjb25maWc6e3RoZW1lVmFyaWFibGVzOnJ9fSl7bGV0e2xhYmVsU3R5bGVzOm4sbm9kZVN0eWxlczppfT1aZShlKTtlLmxhYmVsPSIiLGUubGFiZWxTdHlsZT1uO2xldCBhPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLG90KGUpKS5hdHRyKCJpZCIsZS5kb21JZD8/ZS5pZCkscz03LHtjc3NTdHlsZXM6bH09ZSx1PVhlLnN2ZyhhKSx7bm9kZUJvcmRlcjpofT1yLGY9S2UoZSx7ZmlsbFN0eWxlOiJzb2xpZCJ9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKGYucm91Z2huZXNzPTApO2xldCBkPXUuY2lyY2xlKDAsMCxzKjIsZikscD1hLmluc2VydCgoKT0+ZCwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHAuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGBmaWxsOiAke2h9ICFpbXBvcnRhbnQ7YCksbCYmbC5sZW5ndGg+MCYmZS5sb29rIT09ImhhbmREcmF3biImJnAuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGwpLGkmJmUubG9vayE9PSJoYW5kRHJhd24iJiZwLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixpKSxqZShlLHApLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKG0pe3JldHVybiBZLmluZm8oImZpbGxlZENpcmNsZSBpbnRlcnNlY3QiLGUse3JhZGl1czpzLHBvaW50Om19KSxZZS5jaXJjbGUoZSxzLG0pfSxhfXZhciBmSz1NKCgpPT57InVzZSBzdHJpY3QiO2p0KCk7dXQoKTtxdCgpO1h0KCk7T3QoKTtvKGhLLCJmaWxsZWRDaXJjbGUiKX0pO2FzeW5jIGZ1bmN0aW9uIGRLKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1aZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsbGFiZWw6c309YXdhaXQgc3QodCxlLG90KGUpKSxsPWEud2lkdGgrKGUucGFkZGluZz8/MCksdT1sK2EuaGVpZ2h0LGg9bCthLmhlaWdodCxmPVt7eDowLHk6LXV9LHt4OmgseTotdX0se3g6aC8yLHk6MH1dLHtjc3NTdHlsZXM6ZH09ZSxwPVhlLnN2ZyhpKSxtPUtlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYobS5yb3VnaG5lc3M9MCxtLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgZz1XdChmKSx5PXAucGF0aChnLG0pLHY9aS5pbnNlcnQoKCk9PnksIjpmaXJzdC1jaGlsZCIpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey11LzJ9LCAke3UvMn0pYCk7cmV0dXJuIGQmJmUubG9vayE9PSJoYW5kRHJhd24iJiZ2LnNlbGVjdENoaWxkcmVuKCJwYXRoIikuYXR0cigic3R5bGUiLGQpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZ2LnNlbGVjdENoaWxkcmVuKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLGUud2lkdGg9bCxlLmhlaWdodD11LGplKGUsdikscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstYS53aWR0aC8yLShhLngtKGEubGVmdD8/MCkpfSwgJHstdS8yKyhlLnBhZGRpbmc/PzApLzIrKGEueS0oYS50b3A/PzApKX0pYCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeCl7cmV0dXJuIFkuaW5mbygiVHJpYW5nbGUgaW50ZXJzZWN0IixlLGYseCksWWUucG9seWdvbihlLGYseCl9LGl9dmFyIHBLPU0oKCk9PnsidXNlIHN0cmljdCI7dXQoKTtPdCgpO3F0KCk7WHQoKTtqdCgpO090KCk7byhkSywiZmxpcHBlZFRyaWFuZ2xlIil9KTtmdW5jdGlvbiBtSyh0LGUse2RpcjpyLGNvbmZpZzp7c3RhdGU6bix0aGVtZVZhcmlhYmxlczppfX0pe2xldHtub2RlU3R5bGVzOmF9PVplKGUpO2UubGFiZWw9IiI7bGV0IHM9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsb3QoZSkpLmF0dHIoImlkIixlLmRvbUlkPz9lLmlkKSx7Y3NzU3R5bGVzOmx9PWUsdT1NYXRoLm1heCg3MCxlPy53aWR0aD8/MCksaD1NYXRoLm1heCgxMCxlPy5oZWlnaHQ/PzApO3I9PT0iTFIiJiYodT1NYXRoLm1heCgxMCxlPy53aWR0aD8/MCksaD1NYXRoLm1heCg3MCxlPy5oZWlnaHQ/PzApKTtsZXQgZj0tMSp1LzIsZD0tMSpoLzIscD1YZS5zdmcocyksbT1LZShlLHtzdHJva2U6aS5saW5lQ29sb3IsZmlsbDppLmxpbmVDb2xvcn0pO2UubG9vayE9PSJoYW5kRHJhd24iJiYobS5yb3VnaG5lc3M9MCxtLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgZz1wLnJlY3RhbmdsZShmLGQsdSxoLG0pLHk9cy5pbnNlcnQoKCk9PmcsIjpmaXJzdC1jaGlsZCIpO2wmJmUubG9vayE9PSJoYW5kRHJhd24iJiZ5LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixsKSxhJiZlLmxvb2shPT0iaGFuZERyYXduIiYmeS5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsYSksamUoZSx5KTtsZXQgdj1uPy5wYWRkaW5nPz8wO3JldHVybiBlLndpZHRoJiZlLmhlaWdodCYmKGUud2lkdGgrPXYvMnx8MCxlLmhlaWdodCs9di8yfHwwKSxlLmludGVyc2VjdD1mdW5jdGlvbih4KXtyZXR1cm4gWWUucmVjdChlLHgpfSxzfXZhciBnSz1NKCgpPT57InVzZSBzdHJpY3QiO2p0KCk7cXQoKTtYdCgpO090KCk7byhtSywiZm9ya0pvaW4iKX0pO2FzeW5jIGZ1bmN0aW9uIHlLKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1aZShlKTtlLmxhYmVsU3R5bGU9cjtsZXQgaT04MCxhPTUwLHtzaGFwZVN2ZzpzLGJib3g6bH09YXdhaXQgc3QodCxlLG90KGUpKSx1PU1hdGgubWF4KGksbC53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSxoPU1hdGgubWF4KGEsbC5oZWlnaHQrKGUucGFkZGluZz8/MCkqMixlPy5oZWlnaHQ/PzApLGY9aC8yLHtjc3NTdHlsZXM6ZH09ZSxwPVhlLnN2ZyhzKSxtPUtlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYobS5yb3VnaG5lc3M9MCxtLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgZz1be3g6LXUvMix5Oi1oLzJ9LHt4OnUvMi1mLHk6LWgvMn0sLi4uTzUoLXUvMitmLDAsZiw1MCw5MCwyNzApLHt4OnUvMi1mLHk6aC8yfSx7eDotdS8yLHk6aC8yfV0seT1XdChnKSx2PXAucGF0aCh5LG0pLHg9cy5pbnNlcnQoKCk9PnYsIjpmaXJzdC1jaGlsZCIpO3JldHVybiB4LmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIiksZCYmZS5sb29rIT09ImhhbmREcmF3biImJnguc2VsZWN0Q2hpbGRyZW4oInBhdGgiKS5hdHRyKCJzdHlsZSIsZCksbiYmZS5sb29rIT09ImhhbmREcmF3biImJnguc2VsZWN0Q2hpbGRyZW4oInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksamUoZSx4KSxlLmludGVyc2VjdD1mdW5jdGlvbihiKXtyZXR1cm4gWS5pbmZvKCJQaWxsIGludGVyc2VjdCIsZSx7cmFkaXVzOmYscG9pbnQ6Yn0pLFllLnBvbHlnb24oZSxnLGIpfSxzfXZhciB2Sz1NKCgpPT57InVzZSBzdHJpY3QiO3V0KCk7T3QoKTtxdCgpO1h0KCk7anQoKTtvKHlLLCJoYWxmUm91bmRlZFJlY3RhbmdsZSIpfSk7YXN5bmMgZnVuY3Rpb24geEsodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgc3QodCxlLG90KGUpKSxzPTQsbD1hLmhlaWdodCtlLnBhZGRpbmcsdT1sL3MsaD1hLndpZHRoKzIqdStlLnBhZGRpbmcsZj1be3g6dSx5OjB9LHt4OmgtdSx5OjB9LHt4OmgseTotbC8yfSx7eDpoLXUseTotbH0se3g6dSx5Oi1sfSx7eDowLHk6LWwvMn1dLGQse2Nzc1N0eWxlczpwfT1lO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgbT1YZS5zdmcoaSksZz1LZShlLHt9KSx5PUg3ZSgwLDAsaCxsLHUpLHY9bS5wYXRoKHksZyk7ZD1pLmluc2VydCgoKT0+diwiOmZpcnN0LWNoaWxkIikuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWgvMn0sICR7bC8yfSlgKSxwJiZkLmF0dHIoInN0eWxlIixwKX1lbHNlIGQ9SWEoaSxoLGwsZik7cmV0dXJuIG4mJmQuYXR0cigic3R5bGUiLG4pLGUud2lkdGg9aCxlLmhlaWdodD1sLGplKGUsZCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24obSl7cmV0dXJuIFllLnBvbHlnb24oZSxmLG0pfSxpfXZhciBIN2UsYks9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO3F0KCk7WHQoKTtqdCgpO091KCk7SDdlPW8oKHQsZSxyLG4saSk9PltgTSR7dCtpfSwke2V9YCxgTCR7dCtyLWl9LCR7ZX1gLGBMJHt0K3J9LCR7ZS1uLzJ9YCxgTCR7dCtyLWl9LCR7ZS1ufWAsYEwke3QraX0sJHtlLW59YCxgTCR7dH0sJHtlLW4vMn1gLCJaIl0uam9pbigiICIpLCJjcmVhdGVIZXhhZ29uUGF0aEQiKTtvKHhLLCJoZXhhZ29uIil9KTthc3luYyBmdW5jdGlvbiB3Syh0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WmUoZSk7ZS5sYWJlbD0iIixlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aX09YXdhaXQgc3QodCxlLG90KGUpKSxhPU1hdGgubWF4KDMwLGU/LndpZHRoPz8wKSxzPU1hdGgubWF4KDMwLGU/LmhlaWdodD8/MCkse2Nzc1N0eWxlczpsfT1lLHU9WGUuc3ZnKGkpLGg9S2UoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihoLnJvdWdobmVzcz0wLGguZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBmPVt7eDowLHk6MH0se3g6YSx5OjB9LHt4OjAseTpzfSx7eDphLHk6c31dLGQ9V3QoZikscD11LnBhdGgoZCxoKSxtPWkuaW5zZXJ0KCgpPT5wLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gbS5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLGwmJmUubG9vayE9PSJoYW5kRHJhd24iJiZtLnNlbGVjdENoaWxkcmVuKCJwYXRoIikuYXR0cigic3R5bGUiLGwpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZtLnNlbGVjdENoaWxkcmVuKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLG0uYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWEvMn0sICR7LXMvMn0pYCksamUoZSxtKSxlLmludGVyc2VjdD1mdW5jdGlvbihnKXtyZXR1cm4gWS5pbmZvKCJQaWxsIGludGVyc2VjdCIsZSx7cG9pbnRzOmZ9KSxZZS5wb2x5Z29uKGUsZixnKX0saX12YXIgVEs9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt1dCgpO090KCk7cXQoKTtYdCgpO2p0KCk7byh3SywiaG91cmdsYXNzIil9KTthc3luYyBmdW5jdGlvbiBrSyh0LGUse2NvbmZpZzp7dGhlbWVWYXJpYWJsZXM6cixmbG93Y2hhcnQ6bn19KXtsZXR7bGFiZWxTdHlsZXM6aX09WmUoZSk7ZS5sYWJlbFN0eWxlPWk7bGV0IGE9ZS5hc3NldEhlaWdodD8/NDgscz1lLmFzc2V0V2lkdGg/PzQ4LGw9TWF0aC5tYXgoYSxzKSx1PW4/LndyYXBwaW5nV2lkdGg7ZS53aWR0aD1NYXRoLm1heChsLHU/PzApO2xldHtzaGFwZVN2ZzpoLGJib3g6ZixsYWJlbDpkfT1hd2FpdCBzdCh0LGUsImljb24tc2hhcGUgZGVmYXVsdCIpLHA9ZS5wb3M9PT0idCIsbT1sLGc9bCx7bm9kZUJvcmRlcjp5fT1yLHtzdHlsZXNNYXA6dn09U2MoZSkseD0tZy8yLGI9LW0vMix3PWUubGFiZWw/ODowLF89WGUuc3ZnKGgpLFQ9S2UoZSx7c3Ryb2tlOiJub25lIixmaWxsOiJub25lIn0pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoVC5yb3VnaG5lc3M9MCxULmZpbGxTdHlsZT0ic29saWQiKTtsZXQgRT1fLnJlY3RhbmdsZSh4LGIsZyxtLFQpLEw9TWF0aC5tYXgoZyxmLndpZHRoKSxTPW0rZi5oZWlnaHQrdyxBPV8ucmVjdGFuZ2xlKC1MLzIsLVMvMixMLFMsey4uLlQsZmlsbDoidHJhbnNwYXJlbnQiLHN0cm9rZToibm9uZSJ9KSxJPWguaW5zZXJ0KCgpPT5FLCI6Zmlyc3QtY2hpbGQiKSxEPWguaW5zZXJ0KCgpPT5BKTtpZihlLmljb24pe2xldCBrPWguYXBwZW5kKCJnIik7ay5odG1sKGA8Zz4ke2F3YWl0IF9vKGUuaWNvbix7aGVpZ2h0Omwsd2lkdGg6bCxmYWxsYmFja1ByZWZpeDoiIn0pfTwvZz5gKTtsZXQgUj1rLm5vZGUoKS5nZXRCQm94KCksQz1SLndpZHRoLE89Ui5oZWlnaHQsTj1SLngsUD1SLnk7ay5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstQy8yLU59LCR7cD9mLmhlaWdodC8yK3cvMi1PLzItUDotZi5oZWlnaHQvMi13LzItTy8yLVB9KWApLGsuYXR0cigic3R5bGUiLGBjb2xvcjogJHt2LmdldCgic3Ryb2tlIik/P3l9O2ApfXJldHVybiBkLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1mLndpZHRoLzItKGYueC0oZi5sZWZ0Pz8wKSl9LCR7cD8tUy8yOlMvMi1mLmhlaWdodH0pYCksSS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoMCwke3A/Zi5oZWlnaHQvMit3LzI6LWYuaGVpZ2h0LzItdy8yfSlgKSxqZShlLEQpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGspe2lmKFkuaW5mbygiaWNvblNxdWFyZSBpbnRlcnNlY3QiLGUsayksIWUubGFiZWwpcmV0dXJuIFllLnJlY3QoZSxrKTtsZXQgUj1lLng/PzAsQz1lLnk/PzAsTz1lLmhlaWdodD8/MCxOPVtdO3JldHVybiBwP049W3t4OlItZi53aWR0aC8yLHk6Qy1PLzJ9LHt4OlIrZi53aWR0aC8yLHk6Qy1PLzJ9LHt4OlIrZi53aWR0aC8yLHk6Qy1PLzIrZi5oZWlnaHQrd30se3g6UitnLzIseTpDLU8vMitmLmhlaWdodCt3fSx7eDpSK2cvMix5OkMrTy8yfSx7eDpSLWcvMix5OkMrTy8yfSx7eDpSLWcvMix5OkMtTy8yK2YuaGVpZ2h0K3d9LHt4OlItZi53aWR0aC8yLHk6Qy1PLzIrZi5oZWlnaHQrd31dOk49W3t4OlItZy8yLHk6Qy1PLzJ9LHt4OlIrZy8yLHk6Qy1PLzJ9LHt4OlIrZy8yLHk6Qy1PLzIrbX0se3g6UitmLndpZHRoLzIseTpDLU8vMittfSx7eDpSK2Yud2lkdGgvMi8yLHk6QytPLzJ9LHt4OlItZi53aWR0aC8yLHk6QytPLzJ9LHt4OlItZi53aWR0aC8yLHk6Qy1PLzIrbX0se3g6Ui1nLzIseTpDLU8vMittfV0sWWUucG9seWdvbihlLE4sayl9LGh9dmFyIEVLPU0oKCk9PnsidXNlIHN0cmljdCI7anQoKTt1dCgpO3N1KCk7cXQoKTtYdCgpO090KCk7byhrSywiaWNvbiIpfSk7YXN5bmMgZnVuY3Rpb24gU0sodCxlLHtjb25maWc6e3RoZW1lVmFyaWFibGVzOnIsZmxvd2NoYXJ0Om59fSl7bGV0e2xhYmVsU3R5bGVzOml9PVplKGUpO2UubGFiZWxTdHlsZT1pO2xldCBhPWUuYXNzZXRIZWlnaHQ/PzQ4LHM9ZS5hc3NldFdpZHRoPz80OCxsPU1hdGgubWF4KGEscyksdT1uPy53cmFwcGluZ1dpZHRoO2Uud2lkdGg9TWF0aC5tYXgobCx1Pz8wKTtsZXR7c2hhcGVTdmc6aCxiYm94OmYsbGFiZWw6ZH09YXdhaXQgc3QodCxlLCJpY29uLXNoYXBlIGRlZmF1bHQiKSxwPTIwLG09ZS5sYWJlbD84OjAsZz1lLnBvcz09PSJ0Iix7bm9kZUJvcmRlcjp5LG1haW5Ca2c6dn09cix7c3R5bGVzTWFwOnh9PVNjKGUpLGI9WGUuc3ZnKGgpLHc9S2UoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJih3LnJvdWdobmVzcz0wLHcuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBfPXguZ2V0KCJmaWxsIik7dy5zdHJva2U9Xz8/djtsZXQgVD1oLmFwcGVuZCgiZyIpO2UuaWNvbiYmVC5odG1sKGA8Zz4ke2F3YWl0IF9vKGUuaWNvbix7aGVpZ2h0Omwsd2lkdGg6bCxmYWxsYmFja1ByZWZpeDoiIn0pfTwvZz5gKTtsZXQgRT1ULm5vZGUoKS5nZXRCQm94KCksTD1FLndpZHRoLFM9RS5oZWlnaHQsQT1FLngsST1FLnksRD1NYXRoLm1heChMLFMpKk1hdGguU1FSVDIrcCoyLGs9Yi5jaXJjbGUoMCwwLEQsdyksUj1NYXRoLm1heChELGYud2lkdGgpLEM9RCtmLmhlaWdodCttLE89Yi5yZWN0YW5nbGUoLVIvMiwtQy8yLFIsQyx7Li4udyxmaWxsOiJ0cmFuc3BhcmVudCIsc3Ryb2tlOiJub25lIn0pLE49aC5pbnNlcnQoKCk9PmssIjpmaXJzdC1jaGlsZCIpLFA9aC5pbnNlcnQoKCk9Pk8pO3JldHVybiBULmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1MLzItQX0sJHtnP2YuaGVpZ2h0LzIrbS8yLVMvMi1JOi1mLmhlaWdodC8yLW0vMi1TLzItSX0pYCksVC5hdHRyKCJzdHlsZSIsYGNvbG9yOiAke3guZ2V0KCJzdHJva2UiKT8/eX07YCksZC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstZi53aWR0aC8yLShmLngtKGYubGVmdD8/MCkpfSwke2c/LUMvMjpDLzItZi5oZWlnaHR9KWApLE4uYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKDAsJHtnP2YuaGVpZ2h0LzIrbS8yOi1mLmhlaWdodC8yLW0vMn0pYCksamUoZSxQKSxlLmludGVyc2VjdD1mdW5jdGlvbihGKXtyZXR1cm4gWS5pbmZvKCJpY29uU3F1YXJlIGludGVyc2VjdCIsZSxGKSxZZS5yZWN0KGUsRil9LGh9dmFyIENLPU0oKCk9PnsidXNlIHN0cmljdCI7anQoKTt1dCgpO3N1KCk7cXQoKTtYdCgpO090KCk7byhTSywiaWNvbkNpcmNsZSIpfSk7dmFyIFBhLFhoPU0oKCk9PnsidXNlIHN0cmljdCI7UGE9bygodCxlLHIsbixpKT0+WyJNIix0K2ksZSwiSCIsdCtyLWksIkEiLGksaSwwLDAsMSx0K3IsZStpLCJWIixlK24taSwiQSIsaSxpLDAsMCwxLHQrci1pLGUrbiwiSCIsdCtpLCJBIixpLGksMCwwLDEsdCxlK24taSwiViIsZStpLCJBIixpLGksMCwwLDEsdCtpLGUsIloiXS5qb2luKCIgIiksImNyZWF0ZVJvdW5kZWRSZWN0UGF0aEQiKX0pO2FzeW5jIGZ1bmN0aW9uIEFLKHQsZSx7Y29uZmlnOnt0aGVtZVZhcmlhYmxlczpyLGZsb3djaGFydDpufX0pe2xldHtsYWJlbFN0eWxlczppfT1aZShlKTtlLmxhYmVsU3R5bGU9aTtsZXQgYT1lLmFzc2V0SGVpZ2h0Pz80OCxzPWUuYXNzZXRXaWR0aD8/NDgsbD1NYXRoLm1heChhLHMpLHU9bj8ud3JhcHBpbmdXaWR0aDtlLndpZHRoPU1hdGgubWF4KGwsdT8/MCk7bGV0e3NoYXBlU3ZnOmgsYmJveDpmLGhhbGZQYWRkaW5nOmQsbGFiZWw6cH09YXdhaXQgc3QodCxlLCJpY29uLXNoYXBlIGRlZmF1bHQiKSxtPWUucG9zPT09InQiLGc9bCtkKjIseT1sK2QqMix7bm9kZUJvcmRlcjp2LG1haW5Ca2c6eH09cix7c3R5bGVzTWFwOmJ9PVNjKGUpLHc9LXkvMixfPS1nLzIsVD1lLmxhYmVsPzg6MCxFPVhlLnN2ZyhoKSxMPUtlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoTC5yb3VnaG5lc3M9MCxMLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgUz1iLmdldCgiZmlsbCIpO0wuc3Ryb2tlPVM/P3g7bGV0IEE9RS5wYXRoKFBhKHcsXyx5LGcsNSksTCksST1NYXRoLm1heCh5LGYud2lkdGgpLEQ9ZytmLmhlaWdodCtULGs9RS5yZWN0YW5nbGUoLUkvMiwtRC8yLEksRCx7Li4uTCxmaWxsOiJ0cmFuc3BhcmVudCIsc3Ryb2tlOiJub25lIn0pLFI9aC5pbnNlcnQoKCk9PkEsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImNsYXNzIiwiaWNvbi1zaGFwZTIiKSxDPWguaW5zZXJ0KCgpPT5rKTtpZihlLmljb24pe2xldCBPPWguYXBwZW5kKCJnIik7Ty5odG1sKGA8Zz4ke2F3YWl0IF9vKGUuaWNvbix7aGVpZ2h0Omwsd2lkdGg6bCxmYWxsYmFja1ByZWZpeDoiIn0pfTwvZz5gKTtsZXQgTj1PLm5vZGUoKS5nZXRCQm94KCksUD1OLndpZHRoLEY9Ti5oZWlnaHQsQj1OLngsRz1OLnk7Ty5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstUC8yLUJ9LCR7bT9mLmhlaWdodC8yK1QvMi1GLzItRzotZi5oZWlnaHQvMi1ULzItRi8yLUd9KWApLE8uYXR0cigic3R5bGUiLGBjb2xvcjogJHtiLmdldCgic3Ryb2tlIik/P3Z9O2ApfXJldHVybiBwLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1mLndpZHRoLzItKGYueC0oZi5sZWZ0Pz8wKSl9LCR7bT8tRC8yOkQvMi1mLmhlaWdodH0pYCksUi5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoMCwke20/Zi5oZWlnaHQvMitULzI6LWYuaGVpZ2h0LzItVC8yfSlgKSxqZShlLEMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKE8pe2lmKFkuaW5mbygiaWNvblNxdWFyZSBpbnRlcnNlY3QiLGUsTyksIWUubGFiZWwpcmV0dXJuIFllLnJlY3QoZSxPKTtsZXQgTj1lLng/PzAsUD1lLnk/PzAsRj1lLmhlaWdodD8/MCxCPVtdO3JldHVybiBtP0I9W3t4Ok4tZi53aWR0aC8yLHk6UC1GLzJ9LHt4Ok4rZi53aWR0aC8yLHk6UC1GLzJ9LHt4Ok4rZi53aWR0aC8yLHk6UC1GLzIrZi5oZWlnaHQrVH0se3g6Tit5LzIseTpQLUYvMitmLmhlaWdodCtUfSx7eDpOK3kvMix5OlArRi8yfSx7eDpOLXkvMix5OlArRi8yfSx7eDpOLXkvMix5OlAtRi8yK2YuaGVpZ2h0K1R9LHt4Ok4tZi53aWR0aC8yLHk6UC1GLzIrZi5oZWlnaHQrVH1dOkI9W3t4Ok4teS8yLHk6UC1GLzJ9LHt4Ok4reS8yLHk6UC1GLzJ9LHt4Ok4reS8yLHk6UC1GLzIrZ30se3g6TitmLndpZHRoLzIseTpQLUYvMitnfSx7eDpOK2Yud2lkdGgvMi8yLHk6UCtGLzJ9LHt4Ok4tZi53aWR0aC8yLHk6UCtGLzJ9LHt4Ok4tZi53aWR0aC8yLHk6UC1GLzIrZ30se3g6Ti15LzIseTpQLUYvMitnfV0sWWUucG9seWdvbihlLEIsTyl9LGh9dmFyIF9LPU0oKCk9PnsidXNlIHN0cmljdCI7anQoKTt1dCgpO3N1KCk7cXQoKTtYdCgpO1hoKCk7T3QoKTtvKEFLLCJpY29uUm91bmRlZCIpfSk7YXN5bmMgZnVuY3Rpb24gTEsodCxlLHtjb25maWc6e3RoZW1lVmFyaWFibGVzOnIsZmxvd2NoYXJ0Om59fSl7bGV0e2xhYmVsU3R5bGVzOml9PVplKGUpO2UubGFiZWxTdHlsZT1pO2xldCBhPWUuYXNzZXRIZWlnaHQ/PzQ4LHM9ZS5hc3NldFdpZHRoPz80OCxsPU1hdGgubWF4KGEscyksdT1uPy53cmFwcGluZ1dpZHRoO2Uud2lkdGg9TWF0aC5tYXgobCx1Pz8wKTtsZXR7c2hhcGVTdmc6aCxiYm94OmYsaGFsZlBhZGRpbmc6ZCxsYWJlbDpwfT1hd2FpdCBzdCh0LGUsImljb24tc2hhcGUgZGVmYXVsdCIpLG09ZS5wb3M9PT0idCIsZz1sK2QqMix5PWwrZCoyLHtub2RlQm9yZGVyOnYsbWFpbkJrZzp4fT1yLHtzdHlsZXNNYXA6Yn09U2MoZSksdz0teS8yLF89LWcvMixUPWUubGFiZWw/ODowLEU9WGUuc3ZnKGgpLEw9S2UoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihMLnJvdWdobmVzcz0wLEwuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBTPWIuZ2V0KCJmaWxsIik7TC5zdHJva2U9Uz8/eDtsZXQgQT1FLnBhdGgoUGEodyxfLHksZywuMSksTCksST1NYXRoLm1heCh5LGYud2lkdGgpLEQ9ZytmLmhlaWdodCtULGs9RS5yZWN0YW5nbGUoLUkvMiwtRC8yLEksRCx7Li4uTCxmaWxsOiJ0cmFuc3BhcmVudCIsc3Ryb2tlOiJub25lIn0pLFI9aC5pbnNlcnQoKCk9PkEsIjpmaXJzdC1jaGlsZCIpLEM9aC5pbnNlcnQoKCk9PmspO2lmKGUuaWNvbil7bGV0IE89aC5hcHBlbmQoImciKTtPLmh0bWwoYDxnPiR7YXdhaXQgX28oZS5pY29uLHtoZWlnaHQ6bCx3aWR0aDpsLGZhbGxiYWNrUHJlZml4OiIifSl9PC9nPmApO2xldCBOPU8ubm9kZSgpLmdldEJCb3goKSxQPU4ud2lkdGgsRj1OLmhlaWdodCxCPU4ueCxHPU4ueTtPLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1QLzItQn0sJHttP2YuaGVpZ2h0LzIrVC8yLUYvMi1HOi1mLmhlaWdodC8yLVQvMi1GLzItR30pYCksTy5hdHRyKCJzdHlsZSIsYGNvbG9yOiAke2IuZ2V0KCJzdHJva2UiKT8/dn07YCl9cmV0dXJuIHAuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWYud2lkdGgvMi0oZi54LShmLmxlZnQ/PzApKX0sJHttPy1ELzI6RC8yLWYuaGVpZ2h0fSlgKSxSLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgwLCR7bT9mLmhlaWdodC8yK1QvMjotZi5oZWlnaHQvMi1ULzJ9KWApLGplKGUsQyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oTyl7aWYoWS5pbmZvKCJpY29uU3F1YXJlIGludGVyc2VjdCIsZSxPKSwhZS5sYWJlbClyZXR1cm4gWWUucmVjdChlLE8pO2xldCBOPWUueD8/MCxQPWUueT8/MCxGPWUuaGVpZ2h0Pz8wLEI9W107cmV0dXJuIG0/Qj1be3g6Ti1mLndpZHRoLzIseTpQLUYvMn0se3g6TitmLndpZHRoLzIseTpQLUYvMn0se3g6TitmLndpZHRoLzIseTpQLUYvMitmLmhlaWdodCtUfSx7eDpOK3kvMix5OlAtRi8yK2YuaGVpZ2h0K1R9LHt4Ok4reS8yLHk6UCtGLzJ9LHt4Ok4teS8yLHk6UCtGLzJ9LHt4Ok4teS8yLHk6UC1GLzIrZi5oZWlnaHQrVH0se3g6Ti1mLndpZHRoLzIseTpQLUYvMitmLmhlaWdodCtUfV06Qj1be3g6Ti15LzIseTpQLUYvMn0se3g6Tit5LzIseTpQLUYvMn0se3g6Tit5LzIseTpQLUYvMitnfSx7eDpOK2Yud2lkdGgvMix5OlAtRi8yK2d9LHt4Ok4rZi53aWR0aC8yLzIseTpQK0YvMn0se3g6Ti1mLndpZHRoLzIseTpQK0YvMn0se3g6Ti1mLndpZHRoLzIseTpQLUYvMitnfSx7eDpOLXkvMix5OlAtRi8yK2d9XSxZZS5wb2x5Z29uKGUsQixPKX0saH12YXIgREs9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtqdCgpO3V0KCk7c3UoKTtxdCgpO1hoKCk7WHQoKTtPdCgpO28oTEssImljb25TcXVhcmUiKX0pO2FzeW5jIGZ1bmN0aW9uIE5LKHQsZSx7Y29uZmlnOntmbG93Y2hhcnQ6cn19KXtsZXQgbj1uZXcgSW1hZ2U7bi5zcmM9ZT8uaW1nPz8iIixhd2FpdCBuLmRlY29kZSgpO2xldCBpPU51bWJlcihuLm5hdHVyYWxXaWR0aC50b1N0cmluZygpLnJlcGxhY2UoInB4IiwiIikpLGE9TnVtYmVyKG4ubmF0dXJhbEhlaWdodC50b1N0cmluZygpLnJlcGxhY2UoInB4IiwiIikpO2UuaW1hZ2VBc3BlY3RSYXRpbz1pL2E7bGV0e2xhYmVsU3R5bGVzOnN9PVplKGUpO2UubGFiZWxTdHlsZT1zO2xldCBsPXI/LndyYXBwaW5nV2lkdGg7ZS5kZWZhdWx0V2lkdGg9cj8ud3JhcHBpbmdXaWR0aDtsZXQgdT1NYXRoLm1heChlLmxhYmVsP2w/PzA6MCxlPy5hc3NldFdpZHRoPz9pKSxoPWUuY29uc3RyYWludD09PSJvbiImJmU/LmFzc2V0SGVpZ2h0P2UuYXNzZXRIZWlnaHQqZS5pbWFnZUFzcGVjdFJhdGlvOnUsZj1lLmNvbnN0cmFpbnQ9PT0ib24iP2gvZS5pbWFnZUFzcGVjdFJhdGlvOmU/LmFzc2V0SGVpZ2h0Pz9hO2Uud2lkdGg9TWF0aC5tYXgoaCxsPz8wKTtsZXR7c2hhcGVTdmc6ZCxiYm94OnAsbGFiZWw6bX09YXdhaXQgc3QodCxlLCJpbWFnZS1zaGFwZSBkZWZhdWx0IiksZz1lLnBvcz09PSJ0Iix5PS1oLzIsdj0tZi8yLHg9ZS5sYWJlbD84OjAsYj1YZS5zdmcoZCksdz1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKHcucm91Z2huZXNzPTAsdy5maWxsU3R5bGU9InNvbGlkIik7bGV0IF89Yi5yZWN0YW5nbGUoeSx2LGgsZix3KSxUPU1hdGgubWF4KGgscC53aWR0aCksRT1mK3AuaGVpZ2h0K3gsTD1iLnJlY3RhbmdsZSgtVC8yLC1FLzIsVCxFLHsuLi53LGZpbGw6Im5vbmUiLHN0cm9rZToibm9uZSJ9KSxTPWQuaW5zZXJ0KCgpPT5fLCI6Zmlyc3QtY2hpbGQiKSxBPWQuaW5zZXJ0KCgpPT5MKTtpZihlLmltZyl7bGV0IEk9ZC5hcHBlbmQoImltYWdlIik7SS5hdHRyKCJocmVmIixlLmltZyksSS5hdHRyKCJ3aWR0aCIsaCksSS5hdHRyKCJoZWlnaHQiLGYpLEkuYXR0cigicHJlc2VydmVBc3BlY3RSYXRpbyIsIm5vbmUiKSxJLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1oLzJ9LCR7Zz9FLzItZjotRS8yfSlgKX1yZXR1cm4gbS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstcC53aWR0aC8yLShwLngtKHAubGVmdD8/MCkpfSwke2c/LWYvMi1wLmhlaWdodC8yLXgvMjpmLzItcC5oZWlnaHQvMit4LzJ9KWApLFMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKDAsJHtnP3AuaGVpZ2h0LzIreC8yOi1wLmhlaWdodC8yLXgvMn0pYCksamUoZSxBKSxlLmludGVyc2VjdD1mdW5jdGlvbihJKXtpZihZLmluZm8oImljb25TcXVhcmUgaW50ZXJzZWN0IixlLEkpLCFlLmxhYmVsKXJldHVybiBZZS5yZWN0KGUsSSk7bGV0IEQ9ZS54Pz8wLGs9ZS55Pz8wLFI9ZS5oZWlnaHQ/PzAsQz1bXTtyZXR1cm4gZz9DPVt7eDpELXAud2lkdGgvMix5OmstUi8yfSx7eDpEK3Aud2lkdGgvMix5OmstUi8yfSx7eDpEK3Aud2lkdGgvMix5OmstUi8yK3AuaGVpZ2h0K3h9LHt4OkQraC8yLHk6ay1SLzIrcC5oZWlnaHQreH0se3g6RCtoLzIseTprK1IvMn0se3g6RC1oLzIseTprK1IvMn0se3g6RC1oLzIseTprLVIvMitwLmhlaWdodCt4fSx7eDpELXAud2lkdGgvMix5OmstUi8yK3AuaGVpZ2h0K3h9XTpDPVt7eDpELWgvMix5OmstUi8yfSx7eDpEK2gvMix5OmstUi8yfSx7eDpEK2gvMix5OmstUi8yK2Z9LHt4OkQrcC53aWR0aC8yLHk6ay1SLzIrZn0se3g6RCtwLndpZHRoLzIvMix5OmsrUi8yfSx7eDpELXAud2lkdGgvMix5OmsrUi8yfSx7eDpELXAud2lkdGgvMix5OmstUi8yK2Z9LHt4OkQtaC8yLHk6ay1SLzIrZn1dLFllLnBvbHlnb24oZSxDLEkpfSxkfXZhciBSSz1NKCgpPT57InVzZSBzdHJpY3QiO2p0KCk7dXQoKTtxdCgpO1h0KCk7T3QoKTtvKE5LLCJpbWFnZVNxdWFyZSIpfSk7YXN5bmMgZnVuY3Rpb24gTUsodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgc3QodCxlLG90KGUpKSxzPU1hdGgubWF4KGEud2lkdGgrKGUucGFkZGluZz8/MCkqMixlPy53aWR0aD8/MCksbD1NYXRoLm1heChhLmhlaWdodCsoZS5wYWRkaW5nPz8wKSoyLGU/LmhlaWdodD8/MCksdT1be3g6MCx5OjB9LHt4OnMseTowfSx7eDpzKzMqbC82LHk6LWx9LHt4Oi0zKmwvNix5Oi1sfV0saCx7Y3NzU3R5bGVzOmZ9PWU7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBkPVhlLnN2ZyhpKSxwPUtlKGUse30pLG09V3QodSksZz1kLnBhdGgobSxwKTtoPWkuaW5zZXJ0KCgpPT5nLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstcy8yfSwgJHtsLzJ9KWApLGYmJmguYXR0cigic3R5bGUiLGYpfWVsc2UgaD1JYShpLHMsbCx1KTtyZXR1cm4gbiYmaC5hdHRyKCJzdHlsZSIsbiksZS53aWR0aD1zLGUuaGVpZ2h0PWwsamUoZSxoKSxlLmludGVyc2VjdD1mdW5jdGlvbihkKXtyZXR1cm4gWWUucG9seWdvbihlLHUsZCl9LGl9dmFyIElLPU0oKCk9PnsidXNlIHN0cmljdCI7T3QoKTtxdCgpO1h0KCk7anQoKTtPdSgpO28oTUssImludl90cmFwZXpvaWQiKX0pO2FzeW5jIGZ1bmN0aW9uIFBkKHQsZSxyKXtsZXR7bGFiZWxTdHlsZXM6bixub2RlU3R5bGVzOml9PVplKGUpO2UubGFiZWxTdHlsZT1uO2xldHtzaGFwZVN2ZzphLGJib3g6c309YXdhaXQgc3QodCxlLG90KGUpKSxsPU1hdGgubWF4KHMud2lkdGgrci5sYWJlbFBhZGRpbmdYKjIsZT8ud2lkdGh8fDApLHU9TWF0aC5tYXgocy5oZWlnaHQrci5sYWJlbFBhZGRpbmdZKjIsZT8uaGVpZ2h0fHwwKSxoPS1sLzIsZj0tdS8yLGQse3J4OnAscnk6bX09ZSx7Y3NzU3R5bGVzOmd9PWU7aWYocj8ucngmJnIucnkmJihwPXIucngsbT1yLnJ5KSxlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IHk9WGUuc3ZnKGEpLHY9S2UoZSx7fSkseD1wfHxtP3kucGF0aChQYShoLGYsbCx1LHB8fDApLHYpOnkucmVjdGFuZ2xlKGgsZixsLHUsdik7ZD1hLmluc2VydCgoKT0+eCwiOmZpcnN0LWNoaWxkIiksZC5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixHbihnKSl9ZWxzZSBkPWEuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksZC5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixpKS5hdHRyKCJyeCIsR24ocCkpLmF0dHIoInJ5IixHbihtKSkuYXR0cigieCIsaCkuYXR0cigieSIsZikuYXR0cigid2lkdGgiLGwpLmF0dHIoImhlaWdodCIsdSk7cmV0dXJuIGplKGUsZCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeSl7cmV0dXJuIFllLnJlY3QoZSx5KX0sYX12YXIgTXY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO3F0KCk7WGgoKTtYdCgpO2p0KCk7aHIoKTtvKFBkLCJkcmF3UmVjdCIpfSk7YXN5bmMgZnVuY3Rpb24gT0sodCxlKXtsZXR7c2hhcGVTdmc6cixiYm94Om4sbGFiZWw6aX09YXdhaXQgc3QodCxlLCJsYWJlbCIpLGE9ci5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gYS5hdHRyKCJ3aWR0aCIsLjEpLmF0dHIoImhlaWdodCIsLjEpLHIuYXR0cigiY2xhc3MiLCJsYWJlbCBlZGdlTGFiZWwiKSxpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey0obi53aWR0aC8yKS0obi54LShuLmxlZnQ/PzApKX0sICR7LShuLmhlaWdodC8yKS0obi55LShuLnRvcD8/MCkpfSlgKSxqZShlLGEpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHUpe3JldHVybiBZZS5yZWN0KGUsdSl9LHJ9dmFyIFBLPU0oKCk9PnsidXNlIHN0cmljdCI7TXYoKTtPdCgpO3F0KCk7byhPSywibGFiZWxSZWN0Iil9KTthc3luYyBmdW5jdGlvbiBCSyh0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WmUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphfT1hd2FpdCBzdCh0LGUsb3QoZSkpLHM9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSxlPy53aWR0aD8/MCksbD1NYXRoLm1heChhLmhlaWdodCsoZS5wYWRkaW5nPz8wKSxlPy5oZWlnaHQ/PzApLHU9W3t4OjAseTowfSx7eDpzKzMqbC82LHk6MH0se3g6cyx5Oi1sfSx7eDotKDMqbCkvNix5Oi1sfV0saCx7Y3NzU3R5bGVzOmZ9PWU7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBkPVhlLnN2ZyhpKSxwPUtlKGUse30pLG09V3QodSksZz1kLnBhdGgobSxwKTtoPWkuaW5zZXJ0KCgpPT5nLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstcy8yfSwgJHtsLzJ9KWApLGYmJmguYXR0cigic3R5bGUiLGYpfWVsc2UgaD1JYShpLHMsbCx1KTtyZXR1cm4gbiYmaC5hdHRyKCJzdHlsZSIsbiksZS53aWR0aD1zLGUuaGVpZ2h0PWwsamUoZSxoKSxlLmludGVyc2VjdD1mdW5jdGlvbihkKXtyZXR1cm4gWWUucG9seWdvbihlLHUsZCl9LGl9dmFyIEZLPU0oKCk9PnsidXNlIHN0cmljdCI7T3QoKTtxdCgpO1h0KCk7anQoKTtPdSgpO28oQkssImxlYW5fbGVmdCIpfSk7YXN5bmMgZnVuY3Rpb24geksodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgc3QodCxlLG90KGUpKSxzPU1hdGgubWF4KGEud2lkdGgrKGUucGFkZGluZz8/MCksZT8ud2lkdGg/PzApLGw9TWF0aC5tYXgoYS5oZWlnaHQrKGUucGFkZGluZz8/MCksZT8uaGVpZ2h0Pz8wKSx1PVt7eDotMypsLzYseTowfSx7eDpzLHk6MH0se3g6cyszKmwvNix5Oi1sfSx7eDowLHk6LWx9XSxoLHtjc3NTdHlsZXM6Zn09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IGQ9WGUuc3ZnKGkpLHA9S2UoZSx7fSksbT1XdCh1KSxnPWQucGF0aChtLHApO2g9aS5pbnNlcnQoKCk9PmcsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1zLzJ9LCAke2wvMn0pYCksZiYmaC5hdHRyKCJzdHlsZSIsZil9ZWxzZSBoPUlhKGkscyxsLHUpO3JldHVybiBuJiZoLmF0dHIoInN0eWxlIixuKSxlLndpZHRoPXMsZS5oZWlnaHQ9bCxqZShlLGgpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGQpe3JldHVybiBZZS5wb2x5Z29uKGUsdSxkKX0saX12YXIgR0s9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO3F0KCk7WHQoKTtqdCgpO091KCk7byh6SywibGVhbl9yaWdodCIpfSk7ZnVuY3Rpb24gJEsodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWw9IiIsZS5sYWJlbFN0eWxlPXI7bGV0IGk9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsb3QoZSkpLmF0dHIoImlkIixlLmRvbUlkPz9lLmlkKSx7Y3NzU3R5bGVzOmF9PWUscz1NYXRoLm1heCgzNSxlPy53aWR0aD8/MCksbD1NYXRoLm1heCgzNSxlPy5oZWlnaHQ/PzApLHU9NyxoPVt7eDpzLHk6MH0se3g6MCx5OmwrdS8yfSx7eDpzLTIqdSx5OmwrdS8yfSx7eDowLHk6MipsfSx7eDpzLHk6bC11LzJ9LHt4OjIqdSx5OmwtdS8yfV0sZj1YZS5zdmcoaSksZD1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKGQucm91Z2huZXNzPTAsZC5maWxsU3R5bGU9InNvbGlkIik7bGV0IHA9V3QoaCksbT1mLnBhdGgocCxkKSxnPWkuaW5zZXJ0KCgpPT5tLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gYSYmZS5sb29rIT09ImhhbmREcmF3biImJmcuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGEpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZnLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxnLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgtJHtzLzJ9LCR7LWx9KWApLGplKGUsZyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeSl7cmV0dXJuIFkuaW5mbygibGlnaHRuaW5nQm9sdCBpbnRlcnNlY3QiLGUseSksWWUucG9seWdvbihlLGgseSl9LGl9dmFyIFZLPU0oKCk9PnsidXNlIHN0cmljdCI7dXQoKTtPdCgpO1h0KCk7anQoKTtxdCgpO090KCk7bygkSywibGlnaHRuaW5nQm9sdCIpfSk7YXN5bmMgZnVuY3Rpb24gVUsodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBzdCh0LGUsb3QoZSkpLGw9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSxlLndpZHRoPz8wKSx1PWwvMixoPXUvKDIuNStsLzUwKSxmPU1hdGgubWF4KGEuaGVpZ2h0K2grKGUucGFkZGluZz8/MCksZS5oZWlnaHQ/PzApLGQ9ZiouMSxwLHtjc3NTdHlsZXM6bX09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IGc9WGUuc3ZnKGkpLHk9WTdlKDAsMCxsLGYsdSxoLGQpLHY9cTdlKDAsaCxsLGYsdSxoKSx4PUtlKGUse30pLGI9Zy5wYXRoKHkseCksdz1nLnBhdGgodix4KTtpLmluc2VydCgoKT0+dywiOmZpcnN0LWNoaWxkIikuYXR0cigiY2xhc3MiLCJsaW5lIikscD1pLmluc2VydCgoKT0+YiwiOmZpcnN0LWNoaWxkIikscC5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLG0mJnAuYXR0cigic3R5bGUiLG0pfWVsc2V7bGV0IGc9VzdlKDAsMCxsLGYsdSxoLGQpO3A9aS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJkIixnKS5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixHbihtKSkuYXR0cigic3R5bGUiLG4pfXJldHVybiBwLmF0dHIoImxhYmVsLW9mZnNldC15IixoKSxwLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1sLzJ9LCAkey0oZi8yK2gpfSlgKSxqZShlLHApLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LShhLndpZHRoLzIpLShhLngtKGEubGVmdD8/MCkpfSwgJHstKGEuaGVpZ2h0LzIpK2gtKGEueS0oYS50b3A/PzApKX0pYCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oZyl7bGV0IHk9WWUucmVjdChlLGcpLHY9eS54LShlLng/PzApO2lmKHUhPTAmJihNYXRoLmFicyh2KTwoZS53aWR0aD8/MCkvMnx8TWF0aC5hYnModik9PShlLndpZHRoPz8wKS8yJiZNYXRoLmFicyh5LnktKGUueT8/MCkpPihlLmhlaWdodD8/MCkvMi1oKSl7bGV0IHg9aCpoKigxLXYqdi8odSp1KSk7eD4wJiYoeD1NYXRoLnNxcnQoeCkpLHg9aC14LGcueS0oZS55Pz8wKT4wJiYoeD0teCkseS55Kz14fXJldHVybiB5fSxpfXZhciBXN2UsWTdlLHE3ZSxISz1NKCgpPT57InVzZSBzdHJpY3QiO090KCk7cXQoKTtYdCgpO2p0KCk7aHIoKTtXN2U9bygodCxlLHIsbixpLGEscyk9PltgTSR7dH0sJHtlK2F9YCxgYSR7aX0sJHthfSAwLDAsMCAke3J9LDBgLGBhJHtpfSwke2F9IDAsMCwwICR7LXJ9LDBgLGBsMCwke259YCxgYSR7aX0sJHthfSAwLDAsMCAke3J9LDBgLGBsMCwkey1ufWAsYE0ke3R9LCR7ZSthK3N9YCxgYSR7aX0sJHthfSAwLDAsMCAke3J9LDBgXS5qb2luKCIgIiksImNyZWF0ZUN5bGluZGVyUGF0aEQiKSxZN2U9bygodCxlLHIsbixpLGEscyk9PltgTSR7dH0sJHtlK2F9YCxgTSR7dCtyfSwke2UrYX1gLGBhJHtpfSwke2F9IDAsMCwwICR7LXJ9LDBgLGBsMCwke259YCxgYSR7aX0sJHthfSAwLDAsMCAke3J9LDBgLGBsMCwkey1ufWAsYE0ke3R9LCR7ZSthK3N9YCxgYSR7aX0sJHthfSAwLDAsMCAke3J9LDBgXS5qb2luKCIgIiksImNyZWF0ZU91dGVyQ3lsaW5kZXJQYXRoRCIpLHE3ZT1vKCh0LGUscixuLGksYSk9PltgTSR7dC1yLzJ9LCR7LW4vMn1gLGBhJHtpfSwke2F9IDAsMCwwICR7cn0sMGBdLmpvaW4oIiAiKSwiY3JlYXRlSW5uZXJDeWxpbmRlclBhdGhEIik7byhVSywibGluZWRDeWxpbmRlciIpfSk7YXN5bmMgZnVuY3Rpb24gV0sodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBzdCh0LGUsb3QoZSkpLGw9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSx1PU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSxoPXUvNCxmPXUraCx7Y3NzU3R5bGVzOmR9PWUscD1YZS5zdmcoaSksbT1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKG0ucm91Z2huZXNzPTAsbS5maWxsU3R5bGU9InNvbGlkIik7bGV0IGc9W3t4Oi1sLzItbC8yKi4xLHk6LWYvMn0se3g6LWwvMi1sLzIqLjEseTpmLzJ9LC4uLldvKC1sLzItbC8yKi4xLGYvMixsLzIrbC8yKi4xLGYvMixoLC44KSx7eDpsLzIrbC8yKi4xLHk6LWYvMn0se3g6LWwvMi1sLzIqLjEseTotZi8yfSx7eDotbC8yLHk6LWYvMn0se3g6LWwvMix5OmYvMioxLjF9LHt4Oi1sLzIseTotZi8yfV0seT1wLnBvbHlnb24oZy5tYXAoeD0+W3gueCx4LnldKSxtKSx2PWkuaW5zZXJ0KCgpPT55LCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gdi5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLGQmJmUubG9vayE9PSJoYW5kRHJhd24iJiZ2LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixkKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmdi5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksdi5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoMCwkey1oLzJ9KWApLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWwvMisoZS5wYWRkaW5nPz8wKStsLzIqLjEvMi0oYS54LShhLmxlZnQ/PzApKX0sJHstdS8yKyhlLnBhZGRpbmc/PzApLWgvMi0oYS55LShhLnRvcD8/MCkpfSlgKSxqZShlLHYpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHgpe3JldHVybiBZZS5wb2x5Z29uKGUsZyx4KX0saX12YXIgWUs9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO3F0KCk7anQoKTtYdCgpO28oV0ssImxpbmVkV2F2ZUVkZ2VkUmVjdCIpfSk7YXN5bmMgZnVuY3Rpb24gcUsodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBzdCh0LGUsb3QoZSkpLGw9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSx1PU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSxoPTUsZj0tbC8yLGQ9LXUvMix7Y3NzU3R5bGVzOnB9PWUsbT1YZS5zdmcoaSksZz1LZShlLHt9KSx5PVt7eDpmLWgseTpkK2h9LHt4OmYtaCx5OmQrdStofSx7eDpmK2wtaCx5OmQrdStofSx7eDpmK2wtaCx5OmQrdX0se3g6ZitsLHk6ZCt1fSx7eDpmK2wseTpkK3UtaH0se3g6ZitsK2gseTpkK3UtaH0se3g6ZitsK2gseTpkLWh9LHt4OmYraCx5OmQtaH0se3g6ZitoLHk6ZH0se3g6Zix5OmR9LHt4OmYseTpkK2h9XSx2PVt7eDpmLHk6ZCtofSx7eDpmK2wtaCx5OmQraH0se3g6ZitsLWgseTpkK3V9LHt4OmYrbCx5OmQrdX0se3g6ZitsLHk6ZH0se3g6Zix5OmR9XTtlLmxvb2shPT0iaGFuZERyYXduIiYmKGcucm91Z2huZXNzPTAsZy5maWxsU3R5bGU9InNvbGlkIik7bGV0IHg9V3QoeSksYj1tLnBhdGgoeCxnKSx3PVd0KHYpLF89bS5wYXRoKHcsey4uLmcsZmlsbDoibm9uZSJ9KSxUPWkuaW5zZXJ0KCgpPT5fLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gVC5pbnNlcnQoKCk9PmIsIjpmaXJzdC1jaGlsZCIpLFQuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxwJiZlLmxvb2shPT0iaGFuZERyYXduIiYmVC5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIscCksbiYmZS5sb29rIT09ImhhbmREcmF3biImJlQuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LShhLndpZHRoLzIpLWgtKGEueC0oYS5sZWZ0Pz8wKSl9LCAkey0oYS5oZWlnaHQvMikraC0oYS55LShhLnRvcD8/MCkpfSlgKSxqZShlLFQpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiBZZS5wb2x5Z29uKGUseSxFKX0saX12YXIgWEs9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO1h0KCk7anQoKTtxdCgpO28ocUssIm11bHRpUmVjdCIpfSk7YXN5bmMgZnVuY3Rpb24gaksodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBzdCh0LGUsb3QoZSkpLGw9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSx1PU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSxoPXUvNCxmPXUraCxkPS1sLzIscD0tZi8yLG09NSx7Y3NzU3R5bGVzOmd9PWUseT1XbyhkLW0scCtmK20sZCtsLW0scCtmK20saCwuOCksdj15Py5beS5sZW5ndGgtMV0seD1be3g6ZC1tLHk6cCttfSx7eDpkLW0seTpwK2YrbX0sLi4ueSx7eDpkK2wtbSx5OnYueS1tfSx7eDpkK2wseTp2LnktbX0se3g6ZCtsLHk6di55LTIqbX0se3g6ZCtsK20seTp2LnktMiptfSx7eDpkK2wrbSx5OnAtbX0se3g6ZCttLHk6cC1tfSx7eDpkK20seTpwfSx7eDpkLHk6cH0se3g6ZCx5OnArbX1dLGI9W3t4OmQseTpwK219LHt4OmQrbC1tLHk6cCttfSx7eDpkK2wtbSx5OnYueS1tfSx7eDpkK2wseTp2LnktbX0se3g6ZCtsLHk6cH0se3g6ZCx5OnB9XSx3PVhlLnN2ZyhpKSxfPUtlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoXy5yb3VnaG5lc3M9MCxfLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgVD1XdCh4KSxFPXcucGF0aChULF8pLEw9V3QoYiksUz13LnBhdGgoTCxfKSxBPWkuaW5zZXJ0KCgpPT5FLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gQS5pbnNlcnQoKCk9PlMpLEEuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxnJiZlLmxvb2shPT0iaGFuZERyYXduIiYmQS5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsZyksbiYmZS5sb29rIT09ImhhbmREcmF3biImJkEuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLEEuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKDAsJHstaC8yfSlgKSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey0oYS53aWR0aC8yKS1tLShhLngtKGEubGVmdD8/MCkpfSwgJHstKGEuaGVpZ2h0LzIpK20taC8yLShhLnktKGEudG9wPz8wKSl9KWApLGplKGUsQSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oSSl7cmV0dXJuIFllLnBvbHlnb24oZSx4LEkpfSxpfXZhciBLSz1NKCgpPT57InVzZSBzdHJpY3QiO090KCk7cXQoKTtqdCgpO1h0KCk7byhqSywibXVsdGlXYXZlRWRnZWRSZWN0YW5nbGUiKX0pO2FzeW5jIGZ1bmN0aW9uIFFLKHQsZSx7Y29uZmlnOnt0aGVtZVZhcmlhYmxlczpyfX0pe2xldHtsYWJlbFN0eWxlczpuLG5vZGVTdHlsZXM6aX09WmUoZSk7ZS5sYWJlbFN0eWxlPW4sZS51c2VIdG1sTGFiZWxzfHxDcigpLmZsb3djaGFydD8uaHRtbExhYmVscyE9PSExfHwoZS5jZW50ZXJMYWJlbD0hMCk7bGV0e3NoYXBlU3ZnOnMsYmJveDpsfT1hd2FpdCBzdCh0LGUsb3QoZSkpLHU9TWF0aC5tYXgobC53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSxoPU1hdGgubWF4KGwuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSxmPS11LzIsZD0taC8yLHtjc3NTdHlsZXM6cH09ZSxtPVhlLnN2ZyhzKSxnPUtlKGUse2ZpbGw6ci5ub3RlQmtnQ29sb3Isc3Ryb2tlOnIubm90ZUJvcmRlckNvbG9yfSk7ZS5sb29rIT09ImhhbmREcmF3biImJihnLnJvdWdobmVzcz0wLGcuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCB5PW0ucmVjdGFuZ2xlKGYsZCx1LGgsZyksdj1zLmluc2VydCgoKT0+eSwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHYuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxwJiZlLmxvb2shPT0iaGFuZERyYXduIiYmdi5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIscCksaSYmZS5sb29rIT09ImhhbmREcmF3biImJnYuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGkpLGplKGUsdiksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeCl7cmV0dXJuIFllLnJlY3QoZSx4KX0sc312YXIgWks9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtqdCgpO3F0KCk7WHQoKTtPdCgpO1phKCk7byhRSywibm90ZSIpfSk7YXN5bmMgZnVuY3Rpb24gSksodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgc3QodCxlLG90KGUpKSxzPWEud2lkdGgrZS5wYWRkaW5nLGw9YS5oZWlnaHQrZS5wYWRkaW5nLHU9cytsLGg9W3t4OnUvMix5OjB9LHt4OnUseTotdS8yfSx7eDp1LzIseTotdX0se3g6MCx5Oi11LzJ9XSxmLHtjc3NTdHlsZXM6ZH09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IHA9WGUuc3ZnKGkpLG09S2UoZSx7fSksZz1YN2UoMCwwLHUpLHk9cC5wYXRoKGcsbSk7Zj1pLmluc2VydCgoKT0+eSwiOmZpcnN0LWNoaWxkIikuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LXUvMn0sICR7dS8yfSlgKSxkJiZmLmF0dHIoInN0eWxlIixkKX1lbHNlIGY9SWEoaSx1LHUsaCk7cmV0dXJuIG4mJmYuYXR0cigic3R5bGUiLG4pLGplKGUsZiksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24ocCl7cmV0dXJuIFkuZGVidWcoYEFQQTEyIEludGVyc2VjdCBjYWxsZWQgU1BMSVQKcG9pbnQ6YCxwLGAKbm9kZToKYCxlLGAKcmVzOmAsWWUucG9seWdvbihlLGgscCkpLFllLnBvbHlnb24oZSxoLHApfSxpfXZhciBYN2UsZVE9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt1dCgpO090KCk7cXQoKTtYdCgpO2p0KCk7T3UoKTtYN2U9bygodCxlLHIpPT5bYE0ke3Qrci8yfSwke2V9YCxgTCR7dCtyfSwke2Utci8yfWAsYEwke3Qrci8yfSwke2Utcn1gLGBMJHt0fSwke2Utci8yfWAsIloiXS5qb2luKCIgIiksImNyZWF0ZURlY2lzaW9uQm94UGF0aEQiKTtvKEpLLCJxdWVzdGlvbiIpfSk7YXN5bmMgZnVuY3Rpb24gdFEodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBzdCh0LGUsb3QoZSkpLGw9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSxlPy53aWR0aD8/MCksdT1NYXRoLm1heChhLmhlaWdodCsoZS5wYWRkaW5nPz8wKSxlPy5oZWlnaHQ/PzApLGg9LWwvMixmPS11LzIsZD1mLzIscD1be3g6aCtkLHk6Zn0se3g6aCx5OjB9LHt4OmgrZCx5Oi1mfSx7eDotaCx5Oi1mfSx7eDotaCx5OmZ9XSx7Y3NzU3R5bGVzOm19PWUsZz1YZS5zdmcoaSkseT1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKHkucm91Z2huZXNzPTAseS5maWxsU3R5bGU9InNvbGlkIik7bGV0IHY9V3QocCkseD1nLnBhdGgodix5KSxiPWkuaW5zZXJ0KCgpPT54LCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gYi5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLG0mJmUubG9vayE9PSJoYW5kRHJhd24iJiZiLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixtKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmYi5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksYi5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstZC8yfSwwKWApLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWQvMi1hLndpZHRoLzItKGEueC0oYS5sZWZ0Pz8wKSl9LCAkey0oYS5oZWlnaHQvMiktKGEueS0oYS50b3A/PzApKX0pYCksamUoZSxiKSxlLmludGVyc2VjdD1mdW5jdGlvbih3KXtyZXR1cm4gWWUucG9seWdvbihlLHAsdyl9LGl9dmFyIHJRPU0oKCk9PnsidXNlIHN0cmljdCI7T3QoKTtxdCgpO1h0KCk7anQoKTtvKHRRLCJyZWN0X2xlZnRfaW52X2Fycm93Iil9KTtmdW5jdGlvbiBqN2UodCxlKXtlJiZ0LmF0dHIoInN0eWxlIixlKX1hc3luYyBmdW5jdGlvbiBLN2UodCl7bGV0IGU9VmUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImZvcmVpZ25PYmplY3QiKSkscj1lLmFwcGVuZCgieGh0bWw6ZGl2Iiksbj10LmxhYmVsO3QubGFiZWwmJnlpKHQubGFiZWwpJiYobj1hd2FpdCBiaCh0LmxhYmVsLnJlcGxhY2UocWUubGluZUJyZWFrUmVnZXgsYApgKSxwZSgpKSk7bGV0IGk9dC5pc05vZGU/Im5vZGVMYWJlbCI6ImVkZ2VMYWJlbCI7cmV0dXJuIHIuaHRtbCgnPHNwYW4gY2xhc3M9IicraSsnIiAnKyh0LmxhYmVsU3R5bGU/J3N0eWxlPSInK3QubGFiZWxTdHlsZSsnIic6IiIpKyI+IituKyI8L3NwYW4+IiksajdlKHIsdC5sYWJlbFN0eWxlKSxyLnN0eWxlKCJkaXNwbGF5IiwiaW5saW5lLWJsb2NrIiksci5zdHlsZSgicGFkZGluZy1yaWdodCIsIjFweCIpLHIuc3R5bGUoIndoaXRlLXNwYWNlIiwibm93cmFwIiksci5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKSxlLm5vZGUoKX12YXIgUTdlLENjLFk1PU0oKCk9PnsidXNlIHN0cmljdCI7cHIoKTt1dCgpO1Z0KCk7ZnIoKTtocigpO28oajdlLCJhcHBseVN0eWxlIik7byhLN2UsImFkZEh0bWxMYWJlbCIpO1E3ZT1vKGFzeW5jKHQsZSxyLG4pPT57bGV0IGk9dHx8IiI7aWYodHlwZW9mIGk9PSJvYmplY3QiJiYoaT1pWzBdKSx4cihwZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7aT1pLnJlcGxhY2UoL1xcbnxcbi9nLCI8YnIgLz4iKSxZLmluZm8oInZlcnRleFRleHQiK2kpO2xldCBhPXtpc05vZGU6bixsYWJlbDpNYShpKS5yZXBsYWNlKC9mYVtibHJzXT86ZmEtW1x3LV0rL2csbD0+YDxpIGNsYXNzPScke2wucmVwbGFjZSgiOiIsIiAiKX0nPjwvaT5gKSxsYWJlbFN0eWxlOmUmJmUucmVwbGFjZSgiZmlsbDoiLCJjb2xvcjoiKX07cmV0dXJuIGF3YWl0IEs3ZShhKX1lbHNle2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7YS5zZXRBdHRyaWJ1dGUoInN0eWxlIixlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpO2xldCBzPVtdO3R5cGVvZiBpPT0ic3RyaW5nIj9zPWkuc3BsaXQoL1xcbnxcbnw8YnJccypcLz8+L2dpKTpBcnJheS5pc0FycmF5KGkpP3M9aTpzPVtdO2ZvcihsZXQgbCBvZiBzKXtsZXQgdT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTt1LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLHUuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLHUuc2V0QXR0cmlidXRlKCJ4IiwiMCIpLHI/dS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwidGl0bGUtcm93Iik6dS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwicm93IiksdS50ZXh0Q29udGVudD1sLnRyaW0oKSxhLmFwcGVuZENoaWxkKHUpfXJldHVybiBhfX0sImNyZWF0ZUxhYmVsIiksQ2M9UTdlfSk7YXN5bmMgZnVuY3Rpb24gblEodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldCBpO2UuY3NzQ2xhc3Nlcz9pPSJub2RlICIrZS5jc3NDbGFzc2VzOmk9Im5vZGUgZGVmYXVsdCI7bGV0IGE9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsaSkuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLHM9YS5pbnNlcnQoImciKSxsPWEuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmF0dHIoInN0eWxlIixuKSx1PWUuZGVzY3JpcHRpb24saD1lLmxhYmVsLGY9bC5ub2RlKCkuYXBwZW5kQ2hpbGQoYXdhaXQgQ2MoaCxlLmxhYmVsU3R5bGUsITAsITApKSxkPXt3aWR0aDowLGhlaWdodDowfTtpZih4cihwZSgpPy5mbG93Y2hhcnQ/Lmh0bWxMYWJlbHMpKXtsZXQgUz1mLmNoaWxkcmVuWzBdLEE9VmUoZik7ZD1TLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEEuYXR0cigid2lkdGgiLGQud2lkdGgpLEEuYXR0cigiaGVpZ2h0IixkLmhlaWdodCl9WS5pbmZvKCJUZXh0IDIiLHUpO2xldCBwPXV8fFtdLG09Zi5nZXRCQm94KCksZz1sLm5vZGUoKS5hcHBlbmRDaGlsZChhd2FpdCBDYyhwLmpvaW4/cC5qb2luKCI8YnIvPiIpOnAsZS5sYWJlbFN0eWxlLCEwLCEwKSkseT1nLmNoaWxkcmVuWzBdLHY9VmUoZyk7ZD15LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHYuYXR0cigid2lkdGgiLGQud2lkdGgpLHYuYXR0cigiaGVpZ2h0IixkLmhlaWdodCk7bGV0IHg9KGUucGFkZGluZ3x8MCkvMjtWZShnKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKGQud2lkdGg+bS53aWR0aD8wOihtLndpZHRoLWQud2lkdGgpLzIpKyIsICIrKG0uaGVpZ2h0K3grNSkrIikiKSxWZShmKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKGQud2lkdGg8bS53aWR0aD8wOi0obS53aWR0aC1kLndpZHRoKS8yKSsiLCAwKSIpLGQ9bC5ub2RlKCkuZ2V0QkJveCgpLGwuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWQud2lkdGgvMisiLCAiKygtZC5oZWlnaHQvMi14KzMpKyIpIik7bGV0IGI9ZC53aWR0aCsoZS5wYWRkaW5nfHwwKSx3PWQuaGVpZ2h0KyhlLnBhZGRpbmd8fDApLF89LWQud2lkdGgvMi14LFQ9LWQuaGVpZ2h0LzIteCxFLEw7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBTPVhlLnN2ZyhhKSxBPUtlKGUse30pLEk9Uy5wYXRoKFBhKF8sVCxiLHcsZS5yeHx8MCksQSksRD1TLmxpbmUoLWQud2lkdGgvMi14LC1kLmhlaWdodC8yLXgrbS5oZWlnaHQreCxkLndpZHRoLzIreCwtZC5oZWlnaHQvMi14K20uaGVpZ2h0K3gsQSk7TD1hLmluc2VydCgoKT0+KFkuZGVidWcoIlJvdWdoIG5vZGUgaW5zZXJ0IENYQyIsSSksRCksIjpmaXJzdC1jaGlsZCIpLEU9YS5pbnNlcnQoKCk9PihZLmRlYnVnKCJSb3VnaCBub2RlIGluc2VydCBDWEMiLEkpLEkpLCI6Zmlyc3QtY2hpbGQiKX1lbHNlIEU9cy5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxMPXMuaW5zZXJ0KCJsaW5lIiksRS5hdHRyKCJjbGFzcyIsIm91dGVyIHRpdGxlLXN0YXRlIikuYXR0cigic3R5bGUiLG4pLmF0dHIoIngiLC1kLndpZHRoLzIteCkuYXR0cigieSIsLWQuaGVpZ2h0LzIteCkuYXR0cigid2lkdGgiLGQud2lkdGgrKGUucGFkZGluZ3x8MCkpLmF0dHIoImhlaWdodCIsZC5oZWlnaHQrKGUucGFkZGluZ3x8MCkpLEwuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1kLndpZHRoLzIteCkuYXR0cigieDIiLGQud2lkdGgvMit4KS5hdHRyKCJ5MSIsLWQuaGVpZ2h0LzIteCttLmhlaWdodCt4KS5hdHRyKCJ5MiIsLWQuaGVpZ2h0LzIteCttLmhlaWdodCt4KTtyZXR1cm4gamUoZSxFKSxlLmludGVyc2VjdD1mdW5jdGlvbihTKXtyZXR1cm4gWWUucmVjdChlLFMpfSxhfXZhciBpUT1NKCgpPT57InVzZSBzdHJpY3QiO3ByKCk7ZnIoKTtPdCgpO1k1KCk7cXQoKTtYdCgpO2p0KCk7VnQoKTtYaCgpO3V0KCk7byhuUSwicmVjdFdpdGhUaXRsZSIpfSk7YXN5bmMgZnVuY3Rpb24gYVEodCxlKXtsZXQgcj17cng6NSxyeTo1LGNsYXNzZXM6IiIsbGFiZWxQYWRkaW5nWDooZT8ucGFkZGluZ3x8MCkqMSxsYWJlbFBhZGRpbmdZOihlPy5wYWRkaW5nfHwwKSoxfTtyZXR1cm4gUGQodCxlLHIpfXZhciBzUT1NKCgpPT57InVzZSBzdHJpY3QiO012KCk7byhhUSwicm91bmRlZFJlY3QiKX0pO2FzeW5jIGZ1bmN0aW9uIG9RKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1aZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsbGFiZWw6c309YXdhaXQgc3QodCxlLG90KGUpKSxsPWU/LnBhZGRpbmc/PzAsdT1NYXRoLm1heChhLndpZHRoKyhlLnBhZGRpbmc/PzApKjIsZT8ud2lkdGg/PzApLGg9TWF0aC5tYXgoYS5oZWlnaHQrKGUucGFkZGluZz8/MCkqMixlPy5oZWlnaHQ/PzApLGY9LWEud2lkdGgvMi1sLGQ9LWEuaGVpZ2h0LzItbCx7Y3NzU3R5bGVzOnB9PWUsbT1YZS5zdmcoaSksZz1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKGcucm91Z2huZXNzPTAsZy5maWxsU3R5bGU9InNvbGlkIik7bGV0IHk9W3t4OmYseTpkfSx7eDpmK3UrOCx5OmR9LHt4OmYrdSs4LHk6ZCtofSx7eDpmLTgseTpkK2h9LHt4OmYtOCx5OmR9LHt4OmYseTpkfSx7eDpmLHk6ZCtofV0sdj1tLnBvbHlnb24oeS5tYXAoYj0+W2IueCxiLnldKSxnKSx4PWkuaW5zZXJ0KCgpPT52LCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4geC5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixHbihwKSksbiYmZS5sb29rIT09ImhhbmREcmF3biImJnguc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLHAmJmUubG9vayE9PSJoYW5kRHJhd24iJiZ4LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey11LzIrNCsoZS5wYWRkaW5nPz8wKS0oYS54LShhLmxlZnQ/PzApKX0sJHstaC8yKyhlLnBhZGRpbmc/PzApLShhLnktKGEudG9wPz8wKSl9KWApLGplKGUseCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIFllLnJlY3QoZSxiKX0saX12YXIgbFE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO3F0KCk7WHQoKTtqdCgpO2hyKCk7byhvUSwic2hhZGVkUHJvY2VzcyIpfSk7YXN5bmMgZnVuY3Rpb24gY1EodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBzdCh0LGUsb3QoZSkpLGw9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSx1PU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSxoPS1sLzIsZj0tdS8yLHtjc3NTdHlsZXM6ZH09ZSxwPVhlLnN2ZyhpKSxtPUtlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYobS5yb3VnaG5lc3M9MCxtLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgZz1be3g6aCx5OmZ9LHt4OmgseTpmK3V9LHt4OmgrbCx5OmYrdX0se3g6aCtsLHk6Zi11LzJ9XSx5PVd0KGcpLHY9cC5wYXRoKHksbSkseD1pLmluc2VydCgoKT0+diwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHguYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxkJiZlLmxvb2shPT0iaGFuZERyYXduIiYmeC5zZWxlY3RDaGlsZHJlbigicGF0aCIpLmF0dHIoInN0eWxlIixkKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmeC5zZWxlY3RDaGlsZHJlbigicGF0aCIpLmF0dHIoInN0eWxlIixuKSx4LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgwLCAke3UvNH0pYCkscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstbC8yKyhlLnBhZGRpbmc/PzApLShhLngtKGEubGVmdD8/MCkpfSwgJHstdS80KyhlLnBhZGRpbmc/PzApLShhLnktKGEudG9wPz8wKSl9KWApLGplKGUseCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIFllLnBvbHlnb24oZSxnLGIpfSxpfXZhciB1UT1NKCgpPT57InVzZSBzdHJpY3QiO090KCk7cXQoKTtYdCgpO2p0KCk7byhjUSwic2xvcGVkUmVjdCIpfSk7YXN5bmMgZnVuY3Rpb24gaFEodCxlKXtsZXQgcj17cng6MCxyeTowLGNsYXNzZXM6IiIsbGFiZWxQYWRkaW5nWDooZT8ucGFkZGluZ3x8MCkqMixsYWJlbFBhZGRpbmdZOihlPy5wYWRkaW5nfHwwKSoxfTtyZXR1cm4gUGQodCxlLHIpfXZhciBmUT1NKCgpPT57InVzZSBzdHJpY3QiO012KCk7byhoUSwic3F1YXJlUmVjdCIpfSk7YXN5bmMgZnVuY3Rpb24gZFEodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgc3QodCxlLG90KGUpKSxzPWEuaGVpZ2h0K2UucGFkZGluZyxsPWEud2lkdGgrcy80K2UucGFkZGluZyx1LHtjc3NTdHlsZXM6aH09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IGY9WGUuc3ZnKGkpLGQ9S2UoZSx7fSkscD1QYSgtbC8yLC1zLzIsbCxzLHMvMiksbT1mLnBhdGgocCxkKTt1PWkuaW5zZXJ0KCgpPT5tLCI6Zmlyc3QtY2hpbGQiKSx1LmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLEduKGgpKX1lbHNlIHU9aS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSx1LmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLG4pLmF0dHIoInJ4IixzLzIpLmF0dHIoInJ5IixzLzIpLmF0dHIoIngiLC1sLzIpLmF0dHIoInkiLC1zLzIpLmF0dHIoIndpZHRoIixsKS5hdHRyKCJoZWlnaHQiLHMpO3JldHVybiBqZShlLHUpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGYpe3JldHVybiBZZS5yZWN0KGUsZil9LGl9dmFyIHBRPU0oKCk9PnsidXNlIHN0cmljdCI7T3QoKTtxdCgpO1h0KCk7anQoKTtYaCgpO2hyKCk7byhkUSwic3RhZGl1bSIpfSk7YXN5bmMgZnVuY3Rpb24gbVEodCxlKXtyZXR1cm4gUGQodCxlLHtyeDo1LHJ5OjUsY2xhc3NlczoiZmxvd2NoYXJ0LW5vZGUifSl9dmFyIGdRPU0oKCk9PnsidXNlIHN0cmljdCI7TXYoKTtvKG1RLCJzdGF0ZSIpfSk7ZnVuY3Rpb24geVEodCxlLHtjb25maWc6e3RoZW1lVmFyaWFibGVzOnJ9fSl7bGV0e2xhYmVsU3R5bGVzOm4sbm9kZVN0eWxlczppfT1aZShlKTtlLmxhYmVsU3R5bGU9bjtsZXR7Y3NzU3R5bGVzOmF9PWUse2xpbmVDb2xvcjpzLHN0YXRlQm9yZGVyOmwsbm9kZUJvcmRlcjp1fT1yLGg9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxmPVhlLnN2ZyhoKSxkPUtlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoZC5yb3VnaG5lc3M9MCxkLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgcD1mLmNpcmNsZSgwLDAsMTQsey4uLmQsc3Ryb2tlOnMsc3Ryb2tlV2lkdGg6Mn0pLG09bD8/dSxnPWYuY2lyY2xlKDAsMCw1LHsuLi5kLGZpbGw6bSxzdHJva2U6bSxzdHJva2VXaWR0aDoyLGZpbGxTdHlsZToic29saWQifSkseT1oLmluc2VydCgoKT0+cCwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHkuaW5zZXJ0KCgpPT5nKSxhJiZ5LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixhKSxpJiZ5LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixpKSxqZShlLHkpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHYpe3JldHVybiBZZS5jaXJjbGUoZSw3LHYpfSxofXZhciB2UT1NKCgpPT57InVzZSBzdHJpY3QiO2p0KCk7cXQoKTtYdCgpO090KCk7byh5USwic3RhdGVFbmQiKX0pO2Z1bmN0aW9uIHhRKHQsZSx7Y29uZmlnOnt0aGVtZVZhcmlhYmxlczpyfX0pe2xldHtsaW5lQ29sb3I6bn09cixpPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQiKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksYTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IGw9WGUuc3ZnKGkpLmNpcmNsZSgwLDAsMTQsa2oobikpO2E9aS5pbnNlcnQoKCk9PmwpLGEuYXR0cigiY2xhc3MiLCJzdGF0ZS1zdGFydCIpLmF0dHIoInIiLDcpLmF0dHIoIndpZHRoIiwxNCkuYXR0cigiaGVpZ2h0IiwxNCl9ZWxzZSBhPWkuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKSxhLmF0dHIoImNsYXNzIiwic3RhdGUtc3RhcnQiKS5hdHRyKCJyIiw3KS5hdHRyKCJ3aWR0aCIsMTQpLmF0dHIoImhlaWdodCIsMTQpO3JldHVybiBqZShlLGEpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHMpe3JldHVybiBZZS5jaXJjbGUoZSw3LHMpfSxpfXZhciBiUT1NKCgpPT57InVzZSBzdHJpY3QiO2p0KCk7cXQoKTtYdCgpO090KCk7byh4USwic3RhdGVTdGFydCIpfSk7YXN5bmMgZnVuY3Rpb24gd1EodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgc3QodCxlLG90KGUpKSxzPShlPy5wYWRkaW5nfHwwKS8yLGw9YS53aWR0aCtlLnBhZGRpbmcsdT1hLmhlaWdodCtlLnBhZGRpbmcsaD0tYS53aWR0aC8yLXMsZj0tYS5oZWlnaHQvMi1zLGQ9W3t4OjAseTowfSx7eDpsLHk6MH0se3g6bCx5Oi11fSx7eDowLHk6LXV9LHt4OjAseTowfSx7eDotOCx5OjB9LHt4OmwrOCx5OjB9LHt4OmwrOCx5Oi11fSx7eDotOCx5Oi11fSx7eDotOCx5OjB9XTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IHA9WGUuc3ZnKGkpLG09S2UoZSx7fSksZz1wLnJlY3RhbmdsZShoLTgsZixsKzE2LHUsbSkseT1wLmxpbmUoaCxmLGgsZit1LG0pLHY9cC5saW5lKGgrbCxmLGgrbCxmK3UsbSk7aS5pbnNlcnQoKCk9PnksIjpmaXJzdC1jaGlsZCIpLGkuaW5zZXJ0KCgpPT52LCI6Zmlyc3QtY2hpbGQiKTtsZXQgeD1pLmluc2VydCgoKT0+ZywiOmZpcnN0LWNoaWxkIikse2Nzc1N0eWxlczpifT1lO3guYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIsR24oYikpLGplKGUseCl9ZWxzZXtsZXQgcD1JYShpLGwsdSxkKTtuJiZwLmF0dHIoInN0eWxlIixuKSxqZShlLHApfXJldHVybiBlLmludGVyc2VjdD1mdW5jdGlvbihwKXtyZXR1cm4gWWUucG9seWdvbihlLGQscCl9LGl9dmFyIFRRPU0oKCk9PnsidXNlIHN0cmljdCI7T3QoKTtxdCgpO1h0KCk7anQoKTtPdSgpO2hyKCk7byh3USwic3Vicm91dGluZSIpfSk7YXN5bmMgZnVuY3Rpb24ga1EodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgc3QodCxlLG90KGUpKSxzPU1hdGgubWF4KGEud2lkdGgrKGUucGFkZGluZz8/MCkqMixlPy53aWR0aD8/MCksbD1NYXRoLm1heChhLmhlaWdodCsoZS5wYWRkaW5nPz8wKSoyLGU/LmhlaWdodD8/MCksdT0tcy8yLGg9LWwvMixmPS4yKmwsZD0uMipsLHtjc3NTdHlsZXM6cH09ZSxtPVhlLnN2ZyhpKSxnPUtlKGUse30pLHk9W3t4OnUtZi8yLHk6aH0se3g6dStzK2YvMix5Omh9LHt4OnUrcytmLzIseTpoK2x9LHt4OnUtZi8yLHk6aCtsfV0sdj1be3g6dStzLWYvMix5OmgrbH0se3g6dStzK2YvMix5OmgrbH0se3g6dStzK2YvMix5OmgrbC1kfV07ZS5sb29rIT09ImhhbmREcmF3biImJihnLnJvdWdobmVzcz0wLGcuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCB4PVd0KHkpLGI9bS5wYXRoKHgsZyksdz1XdCh2KSxfPW0ucGF0aCh3LHsuLi5nLGZpbGxTdHlsZToic29saWQifSksVD1pLmluc2VydCgoKT0+XywiOmZpcnN0LWNoaWxkIik7cmV0dXJuIFQuaW5zZXJ0KCgpPT5iLCI6Zmlyc3QtY2hpbGQiKSxULmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikscCYmZS5sb29rIT09ImhhbmREcmF3biImJlQuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLHApLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZULnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxqZShlLFQpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiBZZS5wb2x5Z29uKGUseSxFKX0saX12YXIgRVE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO1h0KCk7anQoKTtxdCgpO28oa1EsInRhZ2dlZFJlY3QiKX0pO2FzeW5jIGZ1bmN0aW9uIFNRKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1aZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsbGFiZWw6c309YXdhaXQgc3QodCxlLG90KGUpKSxsPU1hdGgubWF4KGEud2lkdGgrKGUucGFkZGluZz8/MCkqMixlPy53aWR0aD8/MCksdT1NYXRoLm1heChhLmhlaWdodCsoZS5wYWRkaW5nPz8wKSoyLGU/LmhlaWdodD8/MCksaD11LzQsZj0uMipsLGQ9LjIqdSxwPXUraCx7Y3NzU3R5bGVzOm19PWUsZz1YZS5zdmcoaSkseT1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKHkucm91Z2huZXNzPTAseS5maWxsU3R5bGU9InNvbGlkIik7bGV0IHY9W3t4Oi1sLzItbC8yKi4xLHk6cC8yfSwuLi5XbygtbC8yLWwvMiouMSxwLzIsbC8yK2wvMiouMSxwLzIsaCwuOCkse3g6bC8yK2wvMiouMSx5Oi1wLzJ9LHt4Oi1sLzItbC8yKi4xLHk6LXAvMn1dLHg9LWwvMitsLzIqLjEsYj0tcC8yLWQqLjQsdz1be3g6eCtsLWYseTooYit1KSoxLjR9LHt4OngrbCx5OmIrdS1kfSx7eDp4K2wseTooYit1KSouOX0sLi4uV28oeCtsLChiK3UpKjEuMyx4K2wtZiwoYit1KSoxLjUsLXUqLjAzLC41KV0sXz1XdCh2KSxUPWcucGF0aChfLHkpLEU9V3QodyksTD1nLnBhdGgoRSx7Li4ueSxmaWxsU3R5bGU6InNvbGlkIn0pLFM9aS5pbnNlcnQoKCk9PkwsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBTLmluc2VydCgoKT0+VCwiOmZpcnN0LWNoaWxkIiksUy5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLG0mJmUubG9vayE9PSJoYW5kRHJhd24iJiZTLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixtKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmUy5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksUy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoMCwkey1oLzJ9KWApLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWwvMisoZS5wYWRkaW5nPz8wKS0oYS54LShhLmxlZnQ/PzApKX0sJHstdS8yKyhlLnBhZGRpbmc/PzApLWgvMi0oYS55LShhLnRvcD8/MCkpfSlgKSxqZShlLFMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKEEpe3JldHVybiBZZS5wb2x5Z29uKGUsdixBKX0saX12YXIgQ1E9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO3F0KCk7anQoKTtYdCgpO28oU1EsInRhZ2dlZFdhdmVFZGdlZFJlY3RhbmdsZSIpfSk7YXN5bmMgZnVuY3Rpb24gQVEodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgc3QodCxlLG90KGUpKSxzPU1hdGgubWF4KGEud2lkdGgrZS5wYWRkaW5nLGU/LndpZHRofHwwKSxsPU1hdGgubWF4KGEuaGVpZ2h0K2UucGFkZGluZyxlPy5oZWlnaHR8fDApLHU9LXMvMixoPS1sLzIsZj1pLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBmLmF0dHIoImNsYXNzIiwidGV4dCIpLmF0dHIoInN0eWxlIixuKS5hdHRyKCJyeCIsMCkuYXR0cigicnkiLDApLmF0dHIoIngiLHUpLmF0dHIoInkiLGgpLmF0dHIoIndpZHRoIixzKS5hdHRyKCJoZWlnaHQiLGwpLGplKGUsZiksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oZCl7cmV0dXJuIFllLnJlY3QoZSxkKX0saX12YXIgX1E9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO3F0KCk7WHQoKTtvKEFRLCJ0ZXh0Iil9KTthc3luYyBmdW5jdGlvbiBMUSh0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WmUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGxhYmVsOnMsaGFsZlBhZGRpbmc6bH09YXdhaXQgc3QodCxlLG90KGUpKSx1PWUubG9vaz09PSJuZW8iP2wqMjpsLGg9YS5oZWlnaHQrdSxmPWgvMixkPWYvKDIuNStoLzUwKSxwPWEud2lkdGgrZCt1LHtjc3NTdHlsZXM6bX09ZSxnO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgeT1YZS5zdmcoaSksdj1KN2UoMCwwLHAsaCxkLGYpLHg9ZUFlKDAsMCxwLGgsZCxmKSxiPXkucGF0aCh2LEtlKGUse30pKSx3PXkucGF0aCh4LEtlKGUse2ZpbGw6Im5vbmUifSkpO2c9aS5pbnNlcnQoKCk9PncsIjpmaXJzdC1jaGlsZCIpLGc9aS5pbnNlcnQoKCk9PmIsIjpmaXJzdC1jaGlsZCIpLGcuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxtJiZnLmF0dHIoInN0eWxlIixtKX1lbHNle2xldCB5PVo3ZSgwLDAscCxoLGQsZik7Zz1pLmluc2VydCgicGF0aCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImQiLHkpLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLEduKG0pKS5hdHRyKCJzdHlsZSIsbiksZy5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLG0mJmcuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG0pLG4mJmcuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pfXJldHVybiBnLmF0dHIoImxhYmVsLW9mZnNldC14IixkKSxnLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1wLzJ9LCAke2gvMn0gKWApLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LShhLndpZHRoLzIpLWQtKGEueC0oYS5sZWZ0Pz8wKSl9LCAkey0oYS5oZWlnaHQvMiktKGEueS0oYS50b3A/PzApKX0pYCksamUoZSxnKSxlLmludGVyc2VjdD1mdW5jdGlvbih5KXtsZXQgdj1ZZS5yZWN0KGUseSkseD12LnktKGUueT8/MCk7aWYoZiE9MCYmKE1hdGguYWJzKHgpPChlLmhlaWdodD8/MCkvMnx8TWF0aC5hYnMoeCk9PShlLmhlaWdodD8/MCkvMiYmTWF0aC5hYnModi54LShlLng/PzApKT4oZS53aWR0aD8/MCkvMi1kKSl7bGV0IGI9ZCpkKigxLXgqeC8oZipmKSk7YiE9MCYmKGI9TWF0aC5zcXJ0KGIpKSxiPWQtYix5LngtKGUueD8/MCk+MCYmKGI9LWIpLHYueCs9Yn1yZXR1cm4gdn0saX12YXIgWjdlLEo3ZSxlQWUsRFE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO1h0KCk7anQoKTtxdCgpO2hyKCk7WjdlPW8oKHQsZSxyLG4saSxhKT0+YE0ke3R9LCR7ZX0KICAgIGEke2l9LCR7YX0gMCwwLDEgMCwkey1ufQogICAgbCR7cn0sMAogICAgYSR7aX0sJHthfSAwLDAsMSAwLCR7bn0KICAgIE0ke3J9LCR7LW59CiAgICBhJHtpfSwke2F9IDAsMCwwIDAsJHtufQogICAgbCR7LXJ9LDBgLCJjcmVhdGVDeWxpbmRlclBhdGhEIiksSjdlPW8oKHQsZSxyLG4saSxhKT0+W2BNJHt0fSwke2V9YCxgTSR7dCtyfSwke2V9YCxgYSR7aX0sJHthfSAwLDAsMCAwLCR7LW59YCxgbCR7LXJ9LDBgLGBhJHtpfSwke2F9IDAsMCwwIDAsJHtufWAsYGwke3J9LDBgXS5qb2luKCIgIiksImNyZWF0ZU91dGVyQ3lsaW5kZXJQYXRoRCIpLGVBZT1vKCh0LGUscixuLGksYSk9PltgTSR7dCtyLzJ9LCR7LW4vMn1gLGBhJHtpfSwke2F9IDAsMCwwIDAsJHtufWBdLmpvaW4oIiAiKSwiY3JlYXRlSW5uZXJDeWxpbmRlclBhdGhEIik7byhMUSwidGlsdGVkQ3lsaW5kZXIiKX0pO2FzeW5jIGZ1bmN0aW9uIE5RKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1aZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmF9PWF3YWl0IHN0KHQsZSxvdChlKSkscz1hLndpZHRoK2UucGFkZGluZyxsPWEuaGVpZ2h0K2UucGFkZGluZyx1PVt7eDotMypsLzYseTowfSx7eDpzKzMqbC82LHk6MH0se3g6cyx5Oi1sfSx7eDowLHk6LWx9XSxoLHtjc3NTdHlsZXM6Zn09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IGQ9WGUuc3ZnKGkpLHA9S2UoZSx7fSksbT1XdCh1KSxnPWQucGF0aChtLHApO2g9aS5pbnNlcnQoKCk9PmcsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1zLzJ9LCAke2wvMn0pYCksZiYmaC5hdHRyKCJzdHlsZSIsZil9ZWxzZSBoPUlhKGkscyxsLHUpO3JldHVybiBuJiZoLmF0dHIoInN0eWxlIixuKSxlLndpZHRoPXMsZS5oZWlnaHQ9bCxqZShlLGgpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGQpe3JldHVybiBZZS5wb2x5Z29uKGUsdSxkKX0saX12YXIgUlE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO3F0KCk7WHQoKTtqdCgpO091KCk7byhOUSwidHJhcGV6b2lkIil9KTthc3luYyBmdW5jdGlvbiBNUSh0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WmUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphfT1hd2FpdCBzdCh0LGUsb3QoZSkpLHM9NjAsbD0yMCx1PU1hdGgubWF4KHMsYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSxoPU1hdGgubWF4KGwsYS5oZWlnaHQrKGUucGFkZGluZz8/MCkqMixlPy5oZWlnaHQ/PzApLHtjc3NTdHlsZXM6Zn09ZSxkPVhlLnN2ZyhpKSxwPUtlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYocC5yb3VnaG5lc3M9MCxwLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgbT1be3g6LXUvMiouOCx5Oi1oLzJ9LHt4OnUvMiouOCx5Oi1oLzJ9LHt4OnUvMix5Oi1oLzIqLjZ9LHt4OnUvMix5OmgvMn0se3g6LXUvMix5OmgvMn0se3g6LXUvMix5Oi1oLzIqLjZ9XSxnPVd0KG0pLHk9ZC5wYXRoKGcscCksdj1pLmluc2VydCgoKT0+eSwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHYuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxmJiZlLmxvb2shPT0iaGFuZERyYXduIiYmdi5zZWxlY3RDaGlsZHJlbigicGF0aCIpLmF0dHIoInN0eWxlIixmKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmdi5zZWxlY3RDaGlsZHJlbigicGF0aCIpLmF0dHIoInN0eWxlIixuKSxqZShlLHYpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHgpe3JldHVybiBZZS5wb2x5Z29uKGUsbSx4KX0saX12YXIgSVE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO3F0KCk7WHQoKTtqdCgpO28oTVEsInRyYXBlem9pZGFsUGVudGFnb24iKX0pO2FzeW5jIGZ1bmN0aW9uIE9RKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1aZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsbGFiZWw6c309YXdhaXQgc3QodCxlLG90KGUpKSxsPXhyKHBlKCkuZmxvd2NoYXJ0Py5odG1sTGFiZWxzKSx1PWEud2lkdGgrKGUucGFkZGluZz8/MCksaD11K2EuaGVpZ2h0LGY9dSthLmhlaWdodCxkPVt7eDowLHk6MH0se3g6Zix5OjB9LHt4OmYvMix5Oi1ofV0se2Nzc1N0eWxlczpwfT1lLG09WGUuc3ZnKGkpLGc9S2UoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihnLnJvdWdobmVzcz0wLGcuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCB5PVd0KGQpLHY9bS5wYXRoKHksZykseD1pLmluc2VydCgoKT0+diwiOmZpcnN0LWNoaWxkIikuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWgvMn0sICR7aC8yfSlgKTtyZXR1cm4gcCYmZS5sb29rIT09ImhhbmREcmF3biImJnguc2VsZWN0Q2hpbGRyZW4oInBhdGgiKS5hdHRyKCJzdHlsZSIscCksbiYmZS5sb29rIT09ImhhbmREcmF3biImJnguc2VsZWN0Q2hpbGRyZW4oInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksZS53aWR0aD11LGUuaGVpZ2h0PWgsamUoZSx4KSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1hLndpZHRoLzItKGEueC0oYS5sZWZ0Pz8wKSl9LCAke2gvMi0oYS5oZWlnaHQrKGUucGFkZGluZz8/MCkvKGw/MjoxKS0oYS55LShhLnRvcD8/MCkpKX0pYCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIFkuaW5mbygiVHJpYW5nbGUgaW50ZXJzZWN0IixlLGQsYiksWWUucG9seWdvbihlLGQsYil9LGl9dmFyIFBRPU0oKCk9PnsidXNlIHN0cmljdCI7dXQoKTtPdCgpO3F0KCk7WHQoKTtqdCgpO090KCk7ZnIoKTtWdCgpO28oT1EsInRyaWFuZ2xlIil9KTthc3luYyBmdW5jdGlvbiBCUSh0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WmUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGxhYmVsOnN9PWF3YWl0IHN0KHQsZSxvdChlKSksbD1NYXRoLm1heChhLndpZHRoKyhlLnBhZGRpbmc/PzApKjIsZT8ud2lkdGg/PzApLHU9TWF0aC5tYXgoYS5oZWlnaHQrKGUucGFkZGluZz8/MCkqMixlPy5oZWlnaHQ/PzApLGg9dS84LGY9dStoLHtjc3NTdHlsZXM6ZH09ZSxtPTcwLWwsZz1tPjA/bS8yOjAseT1YZS5zdmcoaSksdj1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKHYucm91Z2huZXNzPTAsdi5maWxsU3R5bGU9InNvbGlkIik7bGV0IHg9W3t4Oi1sLzItZyx5OmYvMn0sLi4uV28oLWwvMi1nLGYvMixsLzIrZyxmLzIsaCwuOCkse3g6bC8yK2cseTotZi8yfSx7eDotbC8yLWcseTotZi8yfV0sYj1XdCh4KSx3PXkucGF0aChiLHYpLF89aS5pbnNlcnQoKCk9PncsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBfLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIiksZCYmZS5sb29rIT09ImhhbmREcmF3biImJl8uc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGQpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZfLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxfLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgwLCR7LWgvMn0pYCkscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstbC8yKyhlLnBhZGRpbmc/PzApLShhLngtKGEubGVmdD8/MCkpfSwkey11LzIrKGUucGFkZGluZz8/MCktaC0oYS55LShhLnRvcD8/MCkpfSlgKSxqZShlLF8pLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKFQpe3JldHVybiBZZS5wb2x5Z29uKGUseCxUKX0saX12YXIgRlE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO3F0KCk7anQoKTtYdCgpO28oQlEsIndhdmVFZGdlZFJlY3RhbmdsZSIpfSk7YXN5bmMgZnVuY3Rpb24gelEodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgc3QodCxlLG90KGUpKSxzPTEwMCxsPTUwLHU9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSxoPU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSxmPXUvaCxkPXUscD1oO2Q+cCpmP3A9ZC9mOmQ9cCpmLGQ9TWF0aC5tYXgoZCxzKSxwPU1hdGgubWF4KHAsbCk7bGV0IG09TWF0aC5taW4ocCouMixwLzQpLGc9cCttKjIse2Nzc1N0eWxlczp5fT1lLHY9WGUuc3ZnKGkpLHg9S2UoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJih4LnJvdWdobmVzcz0wLHguZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBiPVt7eDotZC8yLHk6Zy8yfSwuLi5XbygtZC8yLGcvMixkLzIsZy8yLG0sMSkse3g6ZC8yLHk6LWcvMn0sLi4uV28oZC8yLC1nLzIsLWQvMiwtZy8yLG0sLTEpXSx3PVd0KGIpLF89di5wYXRoKHcseCksVD1pLmluc2VydCgoKT0+XywiOmZpcnN0LWNoaWxkIik7cmV0dXJuIFQuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSx5JiZlLmxvb2shPT0iaGFuZERyYXduIiYmVC5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIseSksbiYmZS5sb29rIT09ImhhbmREcmF3biImJlQuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLGplKGUsVCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIFllLnBvbHlnb24oZSxiLEUpfSxpfXZhciBHUT1NKCgpPT57InVzZSBzdHJpY3QiO090KCk7cXQoKTtYdCgpO2p0KCk7byh6USwid2F2ZVJlY3RhbmdsZSIpfSk7YXN5bmMgZnVuY3Rpb24gJFEodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVplKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBzdCh0LGUsb3QoZSkpLGw9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSx1PU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSxoPTUsZj0tbC8yLGQ9LXUvMix7Y3NzU3R5bGVzOnB9PWUsbT1YZS5zdmcoaSksZz1LZShlLHt9KSx5PVt7eDpmLWgseTpkLWh9LHt4OmYtaCx5OmQrdX0se3g6ZitsLHk6ZCt1fSx7eDpmK2wseTpkLWh9XSx2PWBNJHtmLWh9LCR7ZC1ofSBMJHtmK2x9LCR7ZC1ofSBMJHtmK2x9LCR7ZCt1fSBMJHtmLWh9LCR7ZCt1fSBMJHtmLWh9LCR7ZC1ofQogICAgICAgICAgICAgICAgTSR7Zi1ofSwke2R9IEwke2YrbH0sJHtkfQogICAgICAgICAgICAgICAgTSR7Zn0sJHtkLWh9IEwke2Z9LCR7ZCt1fWA7ZS5sb29rIT09ImhhbmREcmF3biImJihnLnJvdWdobmVzcz0wLGcuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCB4PW0ucGF0aCh2LGcpLGI9aS5pbnNlcnQoKCk9PngsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBiLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2gvMn0sICR7aC8yfSlgKSxiLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikscCYmZS5sb29rIT09ImhhbmREcmF3biImJmIuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLHApLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZiLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey0oYS53aWR0aC8yKStoLzItKGEueC0oYS5sZWZ0Pz8wKSl9LCAkey0oYS5oZWlnaHQvMikraC8yLShhLnktKGEudG9wPz8wKSl9KWApLGplKGUsYiksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odyl7cmV0dXJuIFllLnBvbHlnb24oZSx5LHcpfSxpfXZhciBWUT1NKCgpPT57InVzZSBzdHJpY3QiO090KCk7WHQoKTtqdCgpO3F0KCk7bygkUSwid2luZG93UGFuZSIpfSk7YXN5bmMgZnVuY3Rpb24gVVEodCxlLHIsbixpPXIuY2xhc3MucGFkZGluZz8/MTIpe2xldCBhPW4/MDozLHM9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsb3QoZSkpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxsPW51bGwsdT1udWxsLGg9bnVsbCxmPW51bGwsZD0wLHA9MCxtPTA7aWYobD1zLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiYW5ub3RhdGlvbi1ncm91cCB0ZXh0IiksZS5hbm5vdGF0aW9ucy5sZW5ndGg+MCl7bGV0IGI9ZS5hbm5vdGF0aW9uc1swXTthd2FpdCBxNShsLHt0ZXh0OmBceEFCJHtifVx4QkJgfSwwKSxkPWwubm9kZSgpLmdldEJCb3goKS5oZWlnaHR9dT1zLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwtZ3JvdXAgdGV4dCIpLGF3YWl0IHE1KHUsZSwwLFsiZm9udC13ZWlnaHQ6IGJvbGRlciJdKTtsZXQgZz11Lm5vZGUoKS5nZXRCQm94KCk7cD1nLmhlaWdodCxoPXMuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJtZW1iZXJzLWdyb3VwIHRleHQiKTtsZXQgeT0wO2ZvcihsZXQgYiBvZiBlLm1lbWJlcnMpe2xldCB3PWF3YWl0IHE1KGgsYix5LFtiLnBhcnNlQ2xhc3NpZmllcigpXSk7eSs9dythfW09aC5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodCxtPD0wJiYobT1pLzIpLGY9cy5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm1ldGhvZHMtZ3JvdXAgdGV4dCIpO2xldCB2PTA7Zm9yKGxldCBiIG9mIGUubWV0aG9kcyl7bGV0IHc9YXdhaXQgcTUoZixiLHYsW2IucGFyc2VDbGFzc2lmaWVyKCldKTt2Kz13K2F9bGV0IHg9cy5ub2RlKCkuZ2V0QkJveCgpO2lmKGwhPT1udWxsKXtsZXQgYj1sLm5vZGUoKS5nZXRCQm94KCk7bC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstYi53aWR0aC8yfSlgKX1yZXR1cm4gdS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstZy53aWR0aC8yfSwgJHtkfSlgKSx4PXMubm9kZSgpLmdldEJCb3goKSxoLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgwLCAke2QrcCtpKjJ9KWApLHg9cy5ub2RlKCkuZ2V0QkJveCgpLGYuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKDAsICR7ZCtwKyhtP20raSo0OmkqMil9KWApLHg9cy5ub2RlKCkuZ2V0QkJveCgpLHtzaGFwZVN2ZzpzLGJib3g6eH19YXN5bmMgZnVuY3Rpb24gcTUodCxlLHIsbj1bXSl7bGV0IGk9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuYXR0cigic3R5bGUiLG4uam9pbigiOyAiKSksYT1DcigpLHM9InVzZUh0bWxMYWJlbHMiaW4gZT9lLnVzZUh0bWxMYWJlbHM6eHIoYS5odG1sTGFiZWxzKT8/ITAsbD0iIjsidGV4dCJpbiBlP2w9ZS50ZXh0Omw9ZS5sYWJlbCwhcyYmbC5zdGFydHNXaXRoKCJcXCIpJiYobD1sLnN1YnN0cmluZygxKSkseWkobCkmJihzPSEwKTtsZXQgdT1hd2FpdCBMaShpLHM3KE1hKGwpKSx7d2lkdGg6c28obCxhKSs1MCxjbGFzc2VzOiJtYXJrZG93bi1ub2RlLWxhYmVsIix1c2VIdG1sTGFiZWxzOnN9LGEpLGgsZj0xO2lmKHMpe2xldCBkPXUuY2hpbGRyZW5bMF0scD1WZSh1KTtmPWQuaW5uZXJIVE1MLnNwbGl0KCI8YnI+IikubGVuZ3RoLGQuaW5uZXJIVE1MLmluY2x1ZGVzKCI8L21hdGg+IikmJihmKz1kLmlubmVySFRNTC5zcGxpdCgiPG1yb3c+IikubGVuZ3RoLTEpO2xldCBtPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImltZyIpO2lmKG0pe2xldCBnPWwucmVwbGFjZSgvPGltZ1tePl0qPi9nLCIiKS50cmltKCk9PT0iIjthd2FpdCBQcm9taXNlLmFsbChbLi4ubV0ubWFwKHk9Pm5ldyBQcm9taXNlKHY9PntmdW5jdGlvbiB4KCl7aWYoeS5zdHlsZS5kaXNwbGF5PSJmbGV4Iix5LnN0eWxlLmZsZXhEaXJlY3Rpb249ImNvbHVtbiIsZyl7bGV0IGI9YS5mb250U2l6ZT8udG9TdHJpbmcoKT8/d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuZm9udFNpemUsXz1wYXJzZUludChiLDEwKSo1KyJweCI7eS5zdHlsZS5taW5XaWR0aD1fLHkuc3R5bGUubWF4V2lkdGg9X31lbHNlIHkuc3R5bGUud2lkdGg9IjEwMCUiO3YoeSl9byh4LCJzZXR1cEltYWdlIiksc2V0VGltZW91dCgoKT0+e3kuY29tcGxldGUmJngoKX0pLHkuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLHgpLHkuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIseCl9KSkpfWg9ZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxwLmF0dHIoIndpZHRoIixoLndpZHRoKSxwLmF0dHIoImhlaWdodCIsaC5oZWlnaHQpfWVsc2V7bi5pbmNsdWRlcygiZm9udC13ZWlnaHQ6IGJvbGRlciIpJiZWZSh1KS5zZWxlY3RBbGwoInRzcGFuIikuYXR0cigiZm9udC13ZWlnaHQiLCIiKSxmPXUuY2hpbGRyZW4ubGVuZ3RoO2xldCBkPXUuY2hpbGRyZW5bMF07KHUudGV4dENvbnRlbnQ9PT0iInx8dS50ZXh0Q29udGVudC5pbmNsdWRlcygiJmd0IikpJiYoZC50ZXh0Q29udGVudD1sWzBdK2wuc3Vic3RyaW5nKDEpLnJlcGxhY2VBbGwoIiZndDsiLCI+IikucmVwbGFjZUFsbCgiJmx0OyIsIjwiKS50cmltKCksbFsxXT09PSIgIiYmKGQudGV4dENvbnRlbnQ9ZC50ZXh0Q29udGVudFswXSsiICIrZC50ZXh0Q29udGVudC5zdWJzdHJpbmcoMSkpKSxkLnRleHRDb250ZW50PT09InVuZGVmaW5lZCImJihkLnRleHRDb250ZW50PSIiKSxoPXUuZ2V0QkJveCgpfXJldHVybiBpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrKC1oLmhlaWdodC8oMipmKStyKSsiKSIpLGguaGVpZ2h0fXZhciBIUT1NKCgpPT57InVzZSBzdHJpY3QiO3ByKCk7WmEoKTtPdCgpO2hyKCk7VnQoKTtQbCgpO2ZyKCk7byhVUSwidGV4dEhlbHBlciIpO28ocTUsImFkZFRleHQiKX0pO2FzeW5jIGZ1bmN0aW9uIFdRKHQsZSl7bGV0IHI9cGUoKSxuPXIuY2xhc3MucGFkZGluZz8/MTIsaT1uLGE9ZS51c2VIdG1sTGFiZWxzPz94cihyLmh0bWxMYWJlbHMpPz8hMCxzPWU7cy5hbm5vdGF0aW9ucz1zLmFubm90YXRpb25zPz9bXSxzLm1lbWJlcnM9cy5tZW1iZXJzPz9bXSxzLm1ldGhvZHM9cy5tZXRob2RzPz9bXTtsZXR7c2hhcGVTdmc6bCxiYm94OnV9PWF3YWl0IFVRKHQsZSxyLGEsaSkse2xhYmVsU3R5bGVzOmgsbm9kZVN0eWxlczpmfT1aZShlKTtlLmxhYmVsU3R5bGU9aCxlLmNzc1N0eWxlcz1zLnN0eWxlc3x8IiI7bGV0IGQ9cy5zdHlsZXM/LmpvaW4oIjsiKXx8Znx8IiI7ZS5jc3NTdHlsZXN8fChlLmNzc1N0eWxlcz1kLnJlcGxhY2VBbGwoIiFpbXBvcnRhbnQiLCIiKS5zcGxpdCgiOyIpKTtsZXQgcD1zLm1lbWJlcnMubGVuZ3RoPT09MCYmcy5tZXRob2RzLmxlbmd0aD09PTAmJiFyLmNsYXNzPy5oaWRlRW1wdHlNZW1iZXJzQm94LG09WGUuc3ZnKGwpLGc9S2UoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihnLnJvdWdobmVzcz0wLGcuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCB5PXUud2lkdGgsdj11LmhlaWdodDtzLm1lbWJlcnMubGVuZ3RoPT09MCYmcy5tZXRob2RzLmxlbmd0aD09PTA/dis9aTpzLm1lbWJlcnMubGVuZ3RoPjAmJnMubWV0aG9kcy5sZW5ndGg9PT0wJiYodis9aSoyKTtsZXQgeD0teS8yLGI9LXYvMix3PW0ucmVjdGFuZ2xlKHgtbixiLW4tKHA/bjpzLm1lbWJlcnMubGVuZ3RoPT09MCYmcy5tZXRob2RzLmxlbmd0aD09PTA/LW4vMjowKSx5KzIqbix2KzIqbisocD9uKjI6cy5tZW1iZXJzLmxlbmd0aD09PTAmJnMubWV0aG9kcy5sZW5ndGg9PT0wPy1uOjApLGcpLF89bC5pbnNlcnQoKCk9PncsIjpmaXJzdC1jaGlsZCIpO18uYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKTtsZXQgVD1fLm5vZGUoKS5nZXRCQm94KCk7bC5zZWxlY3RBbGwoIi50ZXh0IikuZWFjaCgoQSxJLEQpPT57bGV0IGs9VmUoRFtJXSksUj1rLmF0dHIoInRyYW5zZm9ybSIpLEM9MDtpZihSKXtsZXQgRj1SZWdFeHAoL3RyYW5zbGF0ZVwoKFteLF0rKSwoW14pXSspXCkvKS5leGVjKFIpO0YmJihDPXBhcnNlRmxvYXQoRlsyXSkpfWxldCBPPUMrYituLShwP246cy5tZW1iZXJzLmxlbmd0aD09PTAmJnMubWV0aG9kcy5sZW5ndGg9PT0wPy1uLzI6MCk7YXx8KE8tPTQpO2xldCBOPXg7KGsuYXR0cigiY2xhc3MiKS5pbmNsdWRlcygibGFiZWwtZ3JvdXAiKXx8ay5hdHRyKCJjbGFzcyIpLmluY2x1ZGVzKCJhbm5vdGF0aW9uLWdyb3VwIikpJiYoTj0tay5ub2RlKCk/LmdldEJCb3goKS53aWR0aC8yfHwwLGwuc2VsZWN0QWxsKCJ0ZXh0IikuZWFjaChmdW5jdGlvbihQLEYsQil7d2luZG93LmdldENvbXB1dGVkU3R5bGUoQltGXSkudGV4dEFuY2hvcj09PSJtaWRkbGUiJiYoTj0wKX0pKSxrLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke059LCAke099KWApfSk7bGV0IEU9bC5zZWxlY3QoIi5hbm5vdGF0aW9uLWdyb3VwIikubm9kZSgpLmdldEJCb3goKS5oZWlnaHQtKHA/bi8yOjApfHwwLEw9bC5zZWxlY3QoIi5sYWJlbC1ncm91cCIpLm5vZGUoKS5nZXRCQm94KCkuaGVpZ2h0LShwP24vMjowKXx8MCxTPWwuc2VsZWN0KCIubWVtYmVycy1ncm91cCIpLm5vZGUoKS5nZXRCQm94KCkuaGVpZ2h0LShwP24vMjowKXx8MDtpZihzLm1lbWJlcnMubGVuZ3RoPjB8fHMubWV0aG9kcy5sZW5ndGg+MHx8cCl7bGV0IEE9bS5saW5lKFQueCxFK0wrYituLFQueCtULndpZHRoLEUrTCtiK24sZyk7bC5pbnNlcnQoKCk9PkEpLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpLmF0dHIoInN0eWxlIixkKX1pZihwfHxzLm1lbWJlcnMubGVuZ3RoPjB8fHMubWV0aG9kcy5sZW5ndGg+MCl7bGV0IEE9bS5saW5lKFQueCxFK0wrUytiK2kqMituLFQueCtULndpZHRoLEUrTCtTK2IrbitpKjIsZyk7bC5pbnNlcnQoKCk9PkEpLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpLmF0dHIoInN0eWxlIixkKX1pZihzLmxvb2shPT0iaGFuZERyYXduIiYmbC5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsZCksXy5zZWxlY3QoIjpudGgtY2hpbGQoMikiKS5hdHRyKCJzdHlsZSIsZCksbC5zZWxlY3RBbGwoIi5kaXZpZGVyIikuc2VsZWN0KCJwYXRoIikuYXR0cigic3R5bGUiLGQpLGUubGFiZWxTdHlsZT9sLnNlbGVjdEFsbCgic3BhbiIpLmF0dHIoInN0eWxlIixlLmxhYmVsU3R5bGUpOmwuc2VsZWN0QWxsKCJzcGFuIikuYXR0cigic3R5bGUiLGQpLCFhKXtsZXQgQT1SZWdFeHAoL2NvbG9yXHMqOlxzKihbXjtdKikvKSxJPUEuZXhlYyhkKTtpZihJKXtsZXQgRD1JWzBdLnJlcGxhY2UoImNvbG9yIiwiZmlsbCIpO2wuc2VsZWN0QWxsKCJ0c3BhbiIpLmF0dHIoInN0eWxlIixEKX1lbHNlIGlmKGgpe2xldCBEPUEuZXhlYyhoKTtpZihEKXtsZXQgaz1EWzBdLnJlcGxhY2UoImNvbG9yIiwiZmlsbCIpO2wuc2VsZWN0QWxsKCJ0c3BhbiIpLmF0dHIoInN0eWxlIixrKX19fXJldHVybiBqZShlLF8pLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKEEpe3JldHVybiBZZS5yZWN0KGUsQSl9LGx9dmFyIFlRPU0oKCk9PnsidXNlIHN0cmljdCI7T3QoKTtWdCgpO3ByKCk7anQoKTtYdCgpO3F0KCk7SFEoKTtmcigpO28oV1EsImNsYXNzQm94Iil9KTthc3luYyBmdW5jdGlvbiBxUSh0LGUse2NvbmZpZzpyfSl7bGV0e2xhYmVsU3R5bGVzOm4sbm9kZVN0eWxlczppfT1aZShlKTtlLmxhYmVsU3R5bGU9bnx8IiI7bGV0IGE9MTAscz1lLndpZHRoO2Uud2lkdGg9KGUud2lkdGg/PzIwMCktMTA7bGV0e3NoYXBlU3ZnOmwsYmJveDp1LGxhYmVsOmh9PWF3YWl0IHN0KHQsZSxvdChlKSksZj1lLnBhZGRpbmd8fDEwLGQ9IiIscDsidGlja2V0ImluIGUmJmUudGlja2V0JiZyPy5rYW5iYW4/LnRpY2tldEJhc2VVcmwmJihkPXI/LmthbmJhbj8udGlja2V0QmFzZVVybC5yZXBsYWNlKCIjVElDS0VUIyIsZS50aWNrZXQpLHA9bC5pbnNlcnQoInN2ZzphIiwiOmZpcnN0LWNoaWxkIikuYXR0cigiY2xhc3MiLCJrYW5iYW4tdGlja2V0LWxpbmsiKS5hdHRyKCJ4bGluazpocmVmIixkKS5hdHRyKCJ0YXJnZXQiLCJfYmxhbmsiKSk7bGV0IG09e3VzZUh0bWxMYWJlbHM6ZS51c2VIdG1sTGFiZWxzLGxhYmVsU3R5bGU6ZS5sYWJlbFN0eWxlfHwiIix3aWR0aDplLndpZHRoLGltZzplLmltZyxwYWRkaW5nOmUucGFkZGluZ3x8OCxjZW50ZXJMYWJlbDohMX0sZyx5O3A/e2xhYmVsOmcsYmJveDp5fT1hd2FpdCBJNShwLCJ0aWNrZXQiaW4gZSYmZS50aWNrZXR8fCIiLG0pOntsYWJlbDpnLGJib3g6eX09YXdhaXQgSTUobCwidGlja2V0ImluIGUmJmUudGlja2V0fHwiIixtKTtsZXR7bGFiZWw6dixiYm94Onh9PWF3YWl0IEk1KGwsImFzc2lnbmVkImluIGUmJmUuYXNzaWduZWR8fCIiLG0pO2Uud2lkdGg9cztsZXQgYj0xMCx3PWU/LndpZHRofHwwLF89TWF0aC5tYXgoeS5oZWlnaHQseC5oZWlnaHQpLzIsVD1NYXRoLm1heCh1LmhlaWdodCtiKjIsZT8uaGVpZ2h0fHwwKStfLEU9LXcvMixMPS1ULzI7aC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoZi13LzIpKyIsICIrKC1fLXUuaGVpZ2h0LzIpKyIpIiksZy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoZi13LzIpKyIsICIrKC1fK3UuaGVpZ2h0LzIpKyIpIiksdi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoZit3LzIteC53aWR0aC0yKmEpKyIsICIrKC1fK3UuaGVpZ2h0LzIpKyIpIik7bGV0IFMse3J4OkEscnk6SX09ZSx7Y3NzU3R5bGVzOkR9PWU7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBrPVhlLnN2ZyhsKSxSPUtlKGUse30pLEM9QXx8ST9rLnBhdGgoUGEoRSxMLHcsVCxBfHwwKSxSKTprLnJlY3RhbmdsZShFLEwsdyxULFIpO1M9bC5pbnNlcnQoKCk9PkMsIjpmaXJzdC1jaGlsZCIpLFMuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIsRHx8bnVsbCl9ZWxzZXtTPWwuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksUy5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciBfX0FQQV9fIikuYXR0cigic3R5bGUiLGkpLmF0dHIoInJ4IixBPz81KS5hdHRyKCJyeSIsST8/NSkuYXR0cigieCIsRSkuYXR0cigieSIsTCkuYXR0cigid2lkdGgiLHcpLmF0dHIoImhlaWdodCIsVCk7bGV0IGs9InByaW9yaXR5ImluIGUmJmUucHJpb3JpdHk7aWYoayl7bGV0IFI9bC5hcHBlbmQoImxpbmUiKSxDPUUrMixPPUwrTWF0aC5mbG9vcigoQT8/MCkvMiksTj1MK1QtTWF0aC5mbG9vcigoQT8/MCkvMik7Ui5hdHRyKCJ4MSIsQykuYXR0cigieTEiLE8pLmF0dHIoIngyIixDKS5hdHRyKCJ5MiIsTikuYXR0cigic3Ryb2tlLXdpZHRoIiwiNCIpLmF0dHIoInN0cm9rZSIsdEFlKGspKX19cmV0dXJuIGplKGUsUyksZS5oZWlnaHQ9VCxlLmludGVyc2VjdD1mdW5jdGlvbihrKXtyZXR1cm4gWWUucmVjdChlLGspfSxsfXZhciB0QWUsWFE9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPdCgpO3F0KCk7WGgoKTtYdCgpO2p0KCk7dEFlPW8odD0+e3N3aXRjaCh0KXtjYXNlIlZlcnkgSGlnaCI6cmV0dXJuInJlZCI7Y2FzZSJIaWdoIjpyZXR1cm4ib3JhbmdlIjtjYXNlIk1lZGl1bSI6cmV0dXJuIG51bGw7Y2FzZSJMb3ciOnJldHVybiJibHVlIjtjYXNlIlZlcnkgTG93IjpyZXR1cm4ibGlnaHRibHVlIn19LCJjb2xvckZyb21Qcmlvcml0eSIpO28ocVEsImthbmJhbkl0ZW0iKX0pO2Z1bmN0aW9uIGpRKHQpe3JldHVybiB0IGluICQ5fXZhciByQWUsbkFlLCQ5LFY5PU0oKCk9PnsidXNlIHN0cmljdCI7emooKTtWaigpO0hqKCk7WWooKTtYaigpO0tqKCk7WmooKTtlSygpO3JLKCk7aUsoKTtzSygpO2xLKCk7dUsoKTtmSygpO3BLKCk7Z0soKTt2SygpO2JLKCk7VEsoKTtFSygpO0NLKCk7X0soKTtESygpO1JLKCk7SUsoKTtQSygpO0ZLKCk7R0soKTtWSygpO0hLKCk7WUsoKTtYSygpO0tLKCk7WksoKTtlUSgpO3JRKCk7aVEoKTtzUSgpO2xRKCk7dVEoKTtmUSgpO3BRKCk7Z1EoKTt2USgpO2JRKCk7VFEoKTtFUSgpO0NRKCk7X1EoKTtEUSgpO1JRKCk7SVEoKTtQUSgpO0ZRKCk7R1EoKTtWUSgpO1lRKCk7WFEoKTtyQWU9W3tzZW1hbnRpY05hbWU6IlByb2Nlc3MiLG5hbWU6IlJlY3RhbmdsZSIsc2hvcnROYW1lOiJyZWN0IixkZXNjcmlwdGlvbjoiU3RhbmRhcmQgcHJvY2VzcyBzaGFwZSIsYWxpYXNlczpbInByb2MiLCJwcm9jZXNzIiwicmVjdGFuZ2xlIl0saW50ZXJuYWxBbGlhc2VzOlsic3F1YXJlUmVjdCJdLGhhbmRsZXI6aFF9LHtzZW1hbnRpY05hbWU6IkV2ZW50IixuYW1lOiJSb3VuZGVkIFJlY3RhbmdsZSIsc2hvcnROYW1lOiJyb3VuZGVkIixkZXNjcmlwdGlvbjoiUmVwcmVzZW50cyBhbiBldmVudCIsYWxpYXNlczpbImV2ZW50Il0saW50ZXJuYWxBbGlhc2VzOlsicm91bmRlZFJlY3QiXSxoYW5kbGVyOmFRfSx7c2VtYW50aWNOYW1lOiJUZXJtaW5hbCBQb2ludCIsbmFtZToiU3RhZGl1bSIsc2hvcnROYW1lOiJzdGFkaXVtIixkZXNjcmlwdGlvbjoiVGVybWluYWwgcG9pbnQiLGFsaWFzZXM6WyJ0ZXJtaW5hbCIsInBpbGwiXSxoYW5kbGVyOmRRfSx7c2VtYW50aWNOYW1lOiJTdWJwcm9jZXNzIixuYW1lOiJGcmFtZWQgUmVjdGFuZ2xlIixzaG9ydE5hbWU6ImZyLXJlY3QiLGRlc2NyaXB0aW9uOiJTdWJwcm9jZXNzIixhbGlhc2VzOlsic3VicHJvY2VzcyIsInN1YnByb2MiLCJmcmFtZWQtcmVjdGFuZ2xlIiwic3Vicm91dGluZSJdLGhhbmRsZXI6d1F9LHtzZW1hbnRpY05hbWU6IkRhdGFiYXNlIixuYW1lOiJDeWxpbmRlciIsc2hvcnROYW1lOiJjeWwiLGRlc2NyaXB0aW9uOiJEYXRhYmFzZSBzdG9yYWdlIixhbGlhc2VzOlsiZGIiLCJkYXRhYmFzZSIsImN5bGluZGVyIl0saGFuZGxlcjphS30se3NlbWFudGljTmFtZToiU3RhcnQiLG5hbWU6IkNpcmNsZSIsc2hvcnROYW1lOiJjaXJjbGUiLGRlc2NyaXB0aW9uOiJTdGFydGluZyBwb2ludCIsYWxpYXNlczpbImNpcmMiXSxoYW5kbGVyOnFqfSx7c2VtYW50aWNOYW1lOiJEZWNpc2lvbiIsbmFtZToiRGlhbW9uZCIsc2hvcnROYW1lOiJkaWFtIixkZXNjcmlwdGlvbjoiRGVjaXNpb24tbWFraW5nIHN0ZXAiLGFsaWFzZXM6WyJkZWNpc2lvbiIsImRpYW1vbmQiLCJxdWVzdGlvbiJdLGhhbmRsZXI6Skt9LHtzZW1hbnRpY05hbWU6IlByZXBhcmUgQ29uZGl0aW9uYWwiLG5hbWU6IkhleGFnb24iLHNob3J0TmFtZToiaGV4IixkZXNjcmlwdGlvbjoiUHJlcGFyYXRpb24gb3IgY29uZGl0aW9uIHN0ZXAiLGFsaWFzZXM6WyJoZXhhZ29uIiwicHJlcGFyZSJdLGhhbmRsZXI6eEt9LHtzZW1hbnRpY05hbWU6IkRhdGEgSW5wdXQvT3V0cHV0IixuYW1lOiJMZWFuIFJpZ2h0IixzaG9ydE5hbWU6ImxlYW4tciIsZGVzY3JpcHRpb246IlJlcHJlc2VudHMgaW5wdXQgb3Igb3V0cHV0IixhbGlhc2VzOlsibGVhbi1yaWdodCIsImluLW91dCJdLGludGVybmFsQWxpYXNlczpbImxlYW5fcmlnaHQiXSxoYW5kbGVyOnpLfSx7c2VtYW50aWNOYW1lOiJEYXRhIElucHV0L091dHB1dCIsbmFtZToiTGVhbiBMZWZ0IixzaG9ydE5hbWU6ImxlYW4tbCIsZGVzY3JpcHRpb246IlJlcHJlc2VudHMgb3V0cHV0IG9yIGlucHV0IixhbGlhc2VzOlsibGVhbi1sZWZ0Iiwib3V0LWluIl0saW50ZXJuYWxBbGlhc2VzOlsibGVhbl9sZWZ0Il0saGFuZGxlcjpCS30se3NlbWFudGljTmFtZToiUHJpb3JpdHkgQWN0aW9uIixuYW1lOiJUcmFwZXpvaWQgQmFzZSBCb3R0b20iLHNob3J0TmFtZToidHJhcC1iIixkZXNjcmlwdGlvbjoiUHJpb3JpdHkgYWN0aW9uIixhbGlhc2VzOlsicHJpb3JpdHkiLCJ0cmFwZXpvaWQtYm90dG9tIiwidHJhcGV6b2lkIl0saGFuZGxlcjpOUX0se3NlbWFudGljTmFtZToiTWFudWFsIE9wZXJhdGlvbiIsbmFtZToiVHJhcGV6b2lkIEJhc2UgVG9wIixzaG9ydE5hbWU6InRyYXAtdCIsZGVzY3JpcHRpb246IlJlcHJlc2VudHMgYSBtYW51YWwgdGFzayIsYWxpYXNlczpbIm1hbnVhbCIsInRyYXBlem9pZC10b3AiLCJpbnYtdHJhcGV6b2lkIl0saW50ZXJuYWxBbGlhc2VzOlsiaW52X3RyYXBlem9pZCJdLGhhbmRsZXI6TUt9LHtzZW1hbnRpY05hbWU6IlN0b3AiLG5hbWU6IkRvdWJsZSBDaXJjbGUiLHNob3J0TmFtZToiZGJsLWNpcmMiLGRlc2NyaXB0aW9uOiJSZXByZXNlbnRzIGEgc3RvcCBwb2ludCIsYWxpYXNlczpbImRvdWJsZS1jaXJjbGUiXSxpbnRlcm5hbEFsaWFzZXM6WyJkb3VibGVjaXJjbGUiXSxoYW5kbGVyOmNLfSx7c2VtYW50aWNOYW1lOiJUZXh0IEJsb2NrIixuYW1lOiJUZXh0IEJsb2NrIixzaG9ydE5hbWU6InRleHQiLGRlc2NyaXB0aW9uOiJUZXh0IGJsb2NrIixoYW5kbGVyOkFRfSx7c2VtYW50aWNOYW1lOiJDYXJkIixuYW1lOiJOb3RjaGVkIFJlY3RhbmdsZSIsc2hvcnROYW1lOiJub3RjaC1yZWN0IixkZXNjcmlwdGlvbjoiUmVwcmVzZW50cyBhIGNhcmQiLGFsaWFzZXM6WyJjYXJkIiwibm90Y2hlZC1yZWN0YW5nbGUiXSxoYW5kbGVyOlVqfSx7c2VtYW50aWNOYW1lOiJMaW5lZC9TaGFkZWQgUHJvY2VzcyIsbmFtZToiTGluZWQgUmVjdGFuZ2xlIixzaG9ydE5hbWU6Imxpbi1yZWN0IixkZXNjcmlwdGlvbjoiTGluZWQgcHJvY2VzcyBzaGFwZSIsYWxpYXNlczpbImxpbmVkLXJlY3RhbmdsZSIsImxpbmVkLXByb2Nlc3MiLCJsaW4tcHJvYyIsInNoYWRlZC1wcm9jZXNzIl0saGFuZGxlcjpvUX0se3NlbWFudGljTmFtZToiU3RhcnQiLG5hbWU6IlNtYWxsIENpcmNsZSIsc2hvcnROYW1lOiJzbS1jaXJjIixkZXNjcmlwdGlvbjoiU21hbGwgc3RhcnRpbmcgcG9pbnQiLGFsaWFzZXM6WyJzdGFydCIsInNtYWxsLWNpcmNsZSJdLGludGVybmFsQWxpYXNlczpbInN0YXRlU3RhcnQiXSxoYW5kbGVyOnhRfSx7c2VtYW50aWNOYW1lOiJTdG9wIixuYW1lOiJGcmFtZWQgQ2lyY2xlIixzaG9ydE5hbWU6ImZyLWNpcmMiLGRlc2NyaXB0aW9uOiJTdG9wIHBvaW50IixhbGlhc2VzOlsic3RvcCIsImZyYW1lZC1jaXJjbGUiXSxpbnRlcm5hbEFsaWFzZXM6WyJzdGF0ZUVuZCJdLGhhbmRsZXI6eVF9LHtzZW1hbnRpY05hbWU6IkZvcmsvSm9pbiIsbmFtZToiRmlsbGVkIFJlY3RhbmdsZSIsc2hvcnROYW1lOiJmb3JrIixkZXNjcmlwdGlvbjoiRm9yayBvciBqb2luIGluIHByb2Nlc3MgZmxvdyIsYWxpYXNlczpbImpvaW4iXSxpbnRlcm5hbEFsaWFzZXM6WyJmb3JrSm9pbiJdLGhhbmRsZXI6bUt9LHtzZW1hbnRpY05hbWU6IkNvbGxhdGUiLG5hbWU6IkhvdXJnbGFzcyIsc2hvcnROYW1lOiJob3VyZ2xhc3MiLGRlc2NyaXB0aW9uOiJSZXByZXNlbnRzIGEgY29sbGF0ZSBvcGVyYXRpb24iLGFsaWFzZXM6WyJob3VyZ2xhc3MiLCJjb2xsYXRlIl0saGFuZGxlcjp3S30se3NlbWFudGljTmFtZToiQ29tbWVudCIsbmFtZToiQ3VybHkgQnJhY2UiLHNob3J0TmFtZToiYnJhY2UiLGRlc2NyaXB0aW9uOiJBZGRzIGEgY29tbWVudCIsYWxpYXNlczpbImNvbW1lbnQiLCJicmFjZS1sIl0saGFuZGxlcjpRan0se3NlbWFudGljTmFtZToiQ29tbWVudCBSaWdodCIsbmFtZToiQ3VybHkgQnJhY2UiLHNob3J0TmFtZToiYnJhY2UtciIsZGVzY3JpcHRpb246IkFkZHMgYSBjb21tZW50IixoYW5kbGVyOkpqfSx7c2VtYW50aWNOYW1lOiJDb21tZW50IHdpdGggYnJhY2VzIG9uIGJvdGggc2lkZXMiLG5hbWU6IkN1cmx5IEJyYWNlcyIsc2hvcnROYW1lOiJicmFjZXMiLGRlc2NyaXB0aW9uOiJBZGRzIGEgY29tbWVudCIsaGFuZGxlcjp0S30se3NlbWFudGljTmFtZToiQ29tIExpbmsiLG5hbWU6IkxpZ2h0bmluZyBCb2x0IixzaG9ydE5hbWU6ImJvbHQiLGRlc2NyaXB0aW9uOiJDb21tdW5pY2F0aW9uIGxpbmsiLGFsaWFzZXM6WyJjb20tbGluayIsImxpZ2h0bmluZy1ib2x0Il0saGFuZGxlcjokS30se3NlbWFudGljTmFtZToiRG9jdW1lbnQiLG5hbWU6IkRvY3VtZW50IixzaG9ydE5hbWU6ImRvYyIsZGVzY3JpcHRpb246IlJlcHJlc2VudHMgYSBkb2N1bWVudCIsYWxpYXNlczpbImRvYyIsImRvY3VtZW50Il0saGFuZGxlcjpCUX0se3NlbWFudGljTmFtZToiRGVsYXkiLG5hbWU6IkhhbGYtUm91bmRlZCBSZWN0YW5nbGUiLHNob3J0TmFtZToiZGVsYXkiLGRlc2NyaXB0aW9uOiJSZXByZXNlbnRzIGEgZGVsYXkiLGFsaWFzZXM6WyJoYWxmLXJvdW5kZWQtcmVjdGFuZ2xlIl0saGFuZGxlcjp5S30se3NlbWFudGljTmFtZToiRGlyZWN0IEFjY2VzcyBTdG9yYWdlIixuYW1lOiJIb3Jpem9udGFsIEN5bGluZGVyIixzaG9ydE5hbWU6ImgtY3lsIixkZXNjcmlwdGlvbjoiRGlyZWN0IGFjY2VzcyBzdG9yYWdlIixhbGlhc2VzOlsiZGFzIiwiaG9yaXpvbnRhbC1jeWxpbmRlciJdLGhhbmRsZXI6TFF9LHtzZW1hbnRpY05hbWU6IkRpc2sgU3RvcmFnZSIsbmFtZToiTGluZWQgQ3lsaW5kZXIiLHNob3J0TmFtZToibGluLWN5bCIsZGVzY3JpcHRpb246IkRpc2sgc3RvcmFnZSIsYWxpYXNlczpbImRpc2siLCJsaW5lZC1jeWxpbmRlciJdLGhhbmRsZXI6VUt9LHtzZW1hbnRpY05hbWU6IkRpc3BsYXkiLG5hbWU6IkN1cnZlZCBUcmFwZXpvaWQiLHNob3J0TmFtZToiY3Vydi10cmFwIixkZXNjcmlwdGlvbjoiUmVwcmVzZW50cyBhIGRpc3BsYXkiLGFsaWFzZXM6WyJjdXJ2ZWQtdHJhcGV6b2lkIiwiZGlzcGxheSJdLGhhbmRsZXI6bkt9LHtzZW1hbnRpY05hbWU6IkRpdmlkZWQgUHJvY2VzcyIsbmFtZToiRGl2aWRlZCBSZWN0YW5nbGUiLHNob3J0TmFtZToiZGl2LXJlY3QiLGRlc2NyaXB0aW9uOiJEaXZpZGVkIHByb2Nlc3Mgc2hhcGUiLGFsaWFzZXM6WyJkaXYtcHJvYyIsImRpdmlkZWQtcmVjdGFuZ2xlIiwiZGl2aWRlZC1wcm9jZXNzIl0saGFuZGxlcjpvS30se3NlbWFudGljTmFtZToiRXh0cmFjdCIsbmFtZToiVHJpYW5nbGUiLHNob3J0TmFtZToidHJpIixkZXNjcmlwdGlvbjoiRXh0cmFjdGlvbiBwcm9jZXNzIixhbGlhc2VzOlsiZXh0cmFjdCIsInRyaWFuZ2xlIl0saGFuZGxlcjpPUX0se3NlbWFudGljTmFtZToiSW50ZXJuYWwgU3RvcmFnZSIsbmFtZToiV2luZG93IFBhbmUiLHNob3J0TmFtZToid2luLXBhbmUiLGRlc2NyaXB0aW9uOiJJbnRlcm5hbCBzdG9yYWdlIixhbGlhc2VzOlsiaW50ZXJuYWwtc3RvcmFnZSIsIndpbmRvdy1wYW5lIl0saGFuZGxlcjokUX0se3NlbWFudGljTmFtZToiSnVuY3Rpb24iLG5hbWU6IkZpbGxlZCBDaXJjbGUiLHNob3J0TmFtZToiZi1jaXJjIixkZXNjcmlwdGlvbjoiSnVuY3Rpb24gcG9pbnQiLGFsaWFzZXM6WyJqdW5jdGlvbiIsImZpbGxlZC1jaXJjbGUiXSxoYW5kbGVyOmhLfSx7c2VtYW50aWNOYW1lOiJMb29wIExpbWl0IixuYW1lOiJUcmFwZXpvaWRhbCBQZW50YWdvbiIsc2hvcnROYW1lOiJub3RjaC1wZW50IixkZXNjcmlwdGlvbjoiTG9vcCBsaW1pdCBzdGVwIixhbGlhc2VzOlsibG9vcC1saW1pdCIsIm5vdGNoZWQtcGVudGFnb24iXSxoYW5kbGVyOk1RfSx7c2VtYW50aWNOYW1lOiJNYW51YWwgRmlsZSIsbmFtZToiRmxpcHBlZCBUcmlhbmdsZSIsc2hvcnROYW1lOiJmbGlwLXRyaSIsZGVzY3JpcHRpb246Ik1hbnVhbCBmaWxlIG9wZXJhdGlvbiIsYWxpYXNlczpbIm1hbnVhbC1maWxlIiwiZmxpcHBlZC10cmlhbmdsZSJdLGhhbmRsZXI6ZEt9LHtzZW1hbnRpY05hbWU6Ik1hbnVhbCBJbnB1dCIsbmFtZToiU2xvcGVkIFJlY3RhbmdsZSIsc2hvcnROYW1lOiJzbC1yZWN0IixkZXNjcmlwdGlvbjoiTWFudWFsIGlucHV0IHN0ZXAiLGFsaWFzZXM6WyJtYW51YWwtaW5wdXQiLCJzbG9wZWQtcmVjdGFuZ2xlIl0saGFuZGxlcjpjUX0se3NlbWFudGljTmFtZToiTXVsdGktRG9jdW1lbnQiLG5hbWU6IlN0YWNrZWQgRG9jdW1lbnQiLHNob3J0TmFtZToiZG9jcyIsZGVzY3JpcHRpb246Ik11bHRpcGxlIGRvY3VtZW50cyIsYWxpYXNlczpbImRvY3VtZW50cyIsInN0LWRvYyIsInN0YWNrZWQtZG9jdW1lbnQiXSxoYW5kbGVyOmpLfSx7c2VtYW50aWNOYW1lOiJNdWx0aS1Qcm9jZXNzIixuYW1lOiJTdGFja2VkIFJlY3RhbmdsZSIsc2hvcnROYW1lOiJzdC1yZWN0IixkZXNjcmlwdGlvbjoiTXVsdGlwbGUgcHJvY2Vzc2VzIixhbGlhc2VzOlsicHJvY3MiLCJwcm9jZXNzZXMiLCJzdGFja2VkLXJlY3RhbmdsZSJdLGhhbmRsZXI6cUt9LHtzZW1hbnRpY05hbWU6IlN0b3JlZCBEYXRhIixuYW1lOiJCb3cgVGllIFJlY3RhbmdsZSIsc2hvcnROYW1lOiJib3ctcmVjdCIsZGVzY3JpcHRpb246IlN0b3JlZCBkYXRhIixhbGlhc2VzOlsic3RvcmVkLWRhdGEiLCJib3ctdGllLXJlY3RhbmdsZSJdLGhhbmRsZXI6JGp9LHtzZW1hbnRpY05hbWU6IlN1bW1hcnkiLG5hbWU6IkNyb3NzZWQgQ2lyY2xlIixzaG9ydE5hbWU6ImNyb3NzLWNpcmMiLGRlc2NyaXB0aW9uOiJTdW1tYXJ5IixhbGlhc2VzOlsic3VtbWFyeSIsImNyb3NzZWQtY2lyY2xlIl0saGFuZGxlcjpqan0se3NlbWFudGljTmFtZToiVGFnZ2VkIERvY3VtZW50IixuYW1lOiJUYWdnZWQgRG9jdW1lbnQiLHNob3J0TmFtZToidGFnLWRvYyIsZGVzY3JpcHRpb246IlRhZ2dlZCBkb2N1bWVudCIsYWxpYXNlczpbInRhZy1kb2MiLCJ0YWdnZWQtZG9jdW1lbnQiXSxoYW5kbGVyOlNRfSx7c2VtYW50aWNOYW1lOiJUYWdnZWQgUHJvY2VzcyIsbmFtZToiVGFnZ2VkIFJlY3RhbmdsZSIsc2hvcnROYW1lOiJ0YWctcmVjdCIsZGVzY3JpcHRpb246IlRhZ2dlZCBwcm9jZXNzIixhbGlhc2VzOlsidGFnZ2VkLXJlY3RhbmdsZSIsInRhZy1wcm9jIiwidGFnZ2VkLXByb2Nlc3MiXSxoYW5kbGVyOmtRfSx7c2VtYW50aWNOYW1lOiJQYXBlciBUYXBlIixuYW1lOiJGbGFnIixzaG9ydE5hbWU6ImZsYWciLGRlc2NyaXB0aW9uOiJQYXBlciB0YXBlIixhbGlhc2VzOlsicGFwZXItdGFwZSJdLGhhbmRsZXI6elF9LHtzZW1hbnRpY05hbWU6Ik9kZCIsbmFtZToiT2RkIixzaG9ydE5hbWU6Im9kZCIsZGVzY3JpcHRpb246Ik9kZCBzaGFwZSIsaW50ZXJuYWxBbGlhc2VzOlsicmVjdF9sZWZ0X2ludl9hcnJvdyJdLGhhbmRsZXI6dFF9LHtzZW1hbnRpY05hbWU6IkxpbmVkIERvY3VtZW50IixuYW1lOiJMaW5lZCBEb2N1bWVudCIsc2hvcnROYW1lOiJsaW4tZG9jIixkZXNjcmlwdGlvbjoiTGluZWQgZG9jdW1lbnQiLGFsaWFzZXM6WyJsaW5lZC1kb2N1bWVudCJdLGhhbmRsZXI6V0t9XSxuQWU9bygoKT0+e2xldCBlPVsuLi5PYmplY3QuZW50cmllcyh7c3RhdGU6bVEsY2hvaWNlOldqLG5vdGU6UUsscmVjdFdpdGhUaXRsZTpuUSxsYWJlbFJlY3Q6T0ssaWNvblNxdWFyZTpMSyxpY29uQ2lyY2xlOlNLLGljb246a0ssaWNvblJvdW5kZWQ6QUssaW1hZ2VTcXVhcmU6TkssYW5jaG9yOkZqLGthbmJhbkl0ZW06cVEsY2xhc3NCb3g6V1F9KSwuLi5yQWUuZmxhdE1hcChyPT5bci5zaG9ydE5hbWUsLi4uImFsaWFzZXMiaW4gcj9yLmFsaWFzZXM6W10sLi4uImludGVybmFsQWxpYXNlcyJpbiByP3IuaW50ZXJuYWxBbGlhc2VzOltdXS5tYXAoaT0+W2ksci5oYW5kbGVyXSkpXTtyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGUpfSwiZ2VuZXJhdGVTaGFwZU1hcCIpLCQ5PW5BZSgpO28oalEsImlzVmFsaWRTaGFwZSIpfSk7ZnVuY3Rpb24gaFoodCl7cmV0dXJuIHR5cGVvZiB0PiJ1Inx8dD09PW51bGx9ZnVuY3Rpb24gaUFlKHQpe3JldHVybiB0eXBlb2YgdD09Im9iamVjdCImJnQhPT1udWxsfWZ1bmN0aW9uIGFBZSh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90OmhaKHQpP1tdOlt0XX1mdW5jdGlvbiBzQWUodCxlKXt2YXIgcixuLGksYTtpZihlKWZvcihhPU9iamVjdC5rZXlzKGUpLHI9MCxuPWEubGVuZ3RoO3I8bjtyKz0xKWk9YVtyXSx0W2ldPWVbaV07cmV0dXJuIHR9ZnVuY3Rpb24gb0FlKHQsZSl7dmFyIHI9IiIsbjtmb3Iobj0wO248ZTtuKz0xKXIrPXQ7cmV0dXJuIHJ9ZnVuY3Rpb24gbEFlKHQpe3JldHVybiB0PT09MCYmTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZPT09MS90fWZ1bmN0aW9uIGZaKHQsZSl7dmFyIHI9IiIsbj10LnJlYXNvbnx8Iih1bmtub3duIHJlYXNvbikiO3JldHVybiB0Lm1hcms/KHQubWFyay5uYW1lJiYocis9J2luICInK3QubWFyay5uYW1lKyciICcpLHIrPSIoIisodC5tYXJrLmxpbmUrMSkrIjoiKyh0Lm1hcmsuY29sdW1uKzEpKyIpIiwhZSYmdC5tYXJrLnNuaXBwZXQmJihyKz1gCgpgK3QubWFyay5zbmlwcGV0KSxuKyIgIityKTpufWZ1bmN0aW9uIE92KHQsZSl7RXJyb3IuY2FsbCh0aGlzKSx0aGlzLm5hbWU9IllBTUxFeGNlcHRpb24iLHRoaXMucmVhc29uPXQsdGhpcy5tYXJrPWUsdGhpcy5tZXNzYWdlPWZaKHRoaXMsITEpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcik6dGhpcy5zdGFjaz1uZXcgRXJyb3IoKS5zdGFja3x8IiJ9ZnVuY3Rpb24gVTkodCxlLHIsbixpKXt2YXIgYT0iIixzPSIiLGw9TWF0aC5mbG9vcihpLzIpLTE7cmV0dXJuIG4tZT5sJiYoYT0iIC4uLiAiLGU9bi1sK2EubGVuZ3RoKSxyLW4+bCYmKHM9IiAuLi4iLHI9bitsLXMubGVuZ3RoKSx7c3RyOmErdC5zbGljZShlLHIpLnJlcGxhY2UoL1x0L2csIlx1MjE5MiIpK3MscG9zOm4tZSthLmxlbmd0aH19ZnVuY3Rpb24gSDkodCxlKXtyZXR1cm4gR2kucmVwZWF0KCIgIixlLXQubGVuZ3RoKSt0fWZ1bmN0aW9uIG1BZSh0LGUpe2lmKGU9T2JqZWN0LmNyZWF0ZShlfHxudWxsKSwhdC5idWZmZXIpcmV0dXJuIG51bGw7ZS5tYXhMZW5ndGh8fChlLm1heExlbmd0aD03OSksdHlwZW9mIGUuaW5kZW50IT0ibnVtYmVyIiYmKGUuaW5kZW50PTEpLHR5cGVvZiBlLmxpbmVzQmVmb3JlIT0ibnVtYmVyIiYmKGUubGluZXNCZWZvcmU9MyksdHlwZW9mIGUubGluZXNBZnRlciE9Im51bWJlciImJihlLmxpbmVzQWZ0ZXI9Mik7Zm9yKHZhciByPS9ccj9cbnxccnxcMC9nLG49WzBdLGk9W10sYSxzPS0xO2E9ci5leGVjKHQuYnVmZmVyKTspaS5wdXNoKGEuaW5kZXgpLG4ucHVzaChhLmluZGV4K2FbMF0ubGVuZ3RoKSx0LnBvc2l0aW9uPD1hLmluZGV4JiZzPDAmJihzPW4ubGVuZ3RoLTIpO3M8MCYmKHM9bi5sZW5ndGgtMSk7dmFyIGw9IiIsdSxoLGY9TWF0aC5taW4odC5saW5lK2UubGluZXNBZnRlcixpLmxlbmd0aCkudG9TdHJpbmcoKS5sZW5ndGgsZD1lLm1heExlbmd0aC0oZS5pbmRlbnQrZiszKTtmb3IodT0xO3U8PWUubGluZXNCZWZvcmUmJiEocy11PDApO3UrKyloPVU5KHQuYnVmZmVyLG5bcy11XSxpW3MtdV0sdC5wb3NpdGlvbi0obltzXS1uW3MtdV0pLGQpLGw9R2kucmVwZWF0KCIgIixlLmluZGVudCkrSDkoKHQubGluZS11KzEpLnRvU3RyaW5nKCksZikrIiB8ICIraC5zdHIrYApgK2w7Zm9yKGg9VTkodC5idWZmZXIsbltzXSxpW3NdLHQucG9zaXRpb24sZCksbCs9R2kucmVwZWF0KCIgIixlLmluZGVudCkrSDkoKHQubGluZSsxKS50b1N0cmluZygpLGYpKyIgfCAiK2guc3RyK2AKYCxsKz1HaS5yZXBlYXQoIi0iLGUuaW5kZW50K2YrMytoLnBvcykrYF4KYCx1PTE7dTw9ZS5saW5lc0FmdGVyJiYhKHMrdT49aS5sZW5ndGgpO3UrKyloPVU5KHQuYnVmZmVyLG5bcyt1XSxpW3MrdV0sdC5wb3NpdGlvbi0obltzXS1uW3MrdV0pLGQpLGwrPUdpLnJlcGVhdCgiICIsZS5pbmRlbnQpK0g5KCh0LmxpbmUrdSsxKS50b1N0cmluZygpLGYpKyIgfCAiK2guc3RyK2AKYDtyZXR1cm4gbC5yZXBsYWNlKC9cbiQvLCIiKX1mdW5jdGlvbiB4QWUodCl7dmFyIGU9e307cmV0dXJuIHQhPT1udWxsJiZPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3Rbcl0uZm9yRWFjaChmdW5jdGlvbihuKXtlW1N0cmluZyhuKV09cn0pfSksZX1mdW5jdGlvbiBiQWUodCxlKXtpZihlPWV8fHt9LE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24ocil7aWYoeUFlLmluZGV4T2Yocik9PT0tMSl0aHJvdyBuZXcgTXMoJ1Vua25vd24gb3B0aW9uICInK3IrJyIgaXMgbWV0IGluIGRlZmluaXRpb24gb2YgIicrdCsnIiBZQU1MIHR5cGUuJyl9KSx0aGlzLm9wdGlvbnM9ZSx0aGlzLnRhZz10LHRoaXMua2luZD1lLmtpbmR8fG51bGwsdGhpcy5yZXNvbHZlPWUucmVzb2x2ZXx8ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdGhpcy5jb25zdHJ1Y3Q9ZS5jb25zdHJ1Y3R8fGZ1bmN0aW9uKHIpe3JldHVybiByfSx0aGlzLmluc3RhbmNlT2Y9ZS5pbnN0YW5jZU9mfHxudWxsLHRoaXMucHJlZGljYXRlPWUucHJlZGljYXRlfHxudWxsLHRoaXMucmVwcmVzZW50PWUucmVwcmVzZW50fHxudWxsLHRoaXMucmVwcmVzZW50TmFtZT1lLnJlcHJlc2VudE5hbWV8fG51bGwsdGhpcy5kZWZhdWx0U3R5bGU9ZS5kZWZhdWx0U3R5bGV8fG51bGwsdGhpcy5tdWx0aT1lLm11bHRpfHwhMSx0aGlzLnN0eWxlQWxpYXNlcz14QWUoZS5zdHlsZUFsaWFzZXN8fG51bGwpLHZBZS5pbmRleE9mKHRoaXMua2luZCk9PT0tMSl0aHJvdyBuZXcgTXMoJ1Vua25vd24ga2luZCAiJyt0aGlzLmtpbmQrJyIgaXMgc3BlY2lmaWVkIGZvciAiJyt0KyciIFlBTUwgdHlwZS4nKX1mdW5jdGlvbiBLUSh0LGUpe3ZhciByPVtdO3JldHVybiB0W2VdLmZvckVhY2goZnVuY3Rpb24obil7dmFyIGk9ci5sZW5ndGg7ci5mb3JFYWNoKGZ1bmN0aW9uKGEscyl7YS50YWc9PT1uLnRhZyYmYS5raW5kPT09bi5raW5kJiZhLm11bHRpPT09bi5tdWx0aSYmKGk9cyl9KSxyW2ldPW59KSxyfWZ1bmN0aW9uIHdBZSgpe3ZhciB0PXtzY2FsYXI6e30sc2VxdWVuY2U6e30sbWFwcGluZzp7fSxmYWxsYmFjazp7fSxtdWx0aTp7c2NhbGFyOltdLHNlcXVlbmNlOltdLG1hcHBpbmc6W10sZmFsbGJhY2s6W119fSxlLHI7ZnVuY3Rpb24gbihpKXtpLm11bHRpPyh0Lm11bHRpW2kua2luZF0ucHVzaChpKSx0Lm11bHRpLmZhbGxiYWNrLnB1c2goaSkpOnRbaS5raW5kXVtpLnRhZ109dC5mYWxsYmFja1tpLnRhZ109aX1mb3IobyhuLCJjb2xsZWN0VHlwZSIpLGU9MCxyPWFyZ3VtZW50cy5sZW5ndGg7ZTxyO2UrPTEpYXJndW1lbnRzW2VdLmZvckVhY2gobik7cmV0dXJuIHR9ZnVuY3Rpb24gWTkodCl7cmV0dXJuIHRoaXMuZXh0ZW5kKHQpfWZ1bmN0aW9uIEFBZSh0KXtpZih0PT09bnVsbClyZXR1cm4hMDt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZT09PTEmJnQ9PT0ifiJ8fGU9PT00JiYodD09PSJudWxsInx8dD09PSJOdWxsInx8dD09PSJOVUxMIil9ZnVuY3Rpb24gX0FlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gTEFlKHQpe3JldHVybiB0PT09bnVsbH1mdW5jdGlvbiBOQWUodCl7aWYodD09PW51bGwpcmV0dXJuITE7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGU9PT00JiYodD09PSJ0cnVlInx8dD09PSJUcnVlInx8dD09PSJUUlVFIil8fGU9PT01JiYodD09PSJmYWxzZSJ8fHQ9PT0iRmFsc2UifHx0PT09IkZBTFNFIil9ZnVuY3Rpb24gUkFlKHQpe3JldHVybiB0PT09InRydWUifHx0PT09IlRydWUifHx0PT09IlRSVUUifWZ1bmN0aW9uIE1BZSh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpPT09IltvYmplY3QgQm9vbGVhbl0ifWZ1bmN0aW9uIE9BZSh0KXtyZXR1cm4gNDg8PXQmJnQ8PTU3fHw2NTw9dCYmdDw9NzB8fDk3PD10JiZ0PD0xMDJ9ZnVuY3Rpb24gUEFlKHQpe3JldHVybiA0ODw9dCYmdDw9NTV9ZnVuY3Rpb24gQkFlKHQpe3JldHVybiA0ODw9dCYmdDw9NTd9ZnVuY3Rpb24gRkFlKHQpe2lmKHQ9PT1udWxsKXJldHVybiExO3ZhciBlPXQubGVuZ3RoLHI9MCxuPSExLGk7aWYoIWUpcmV0dXJuITE7aWYoaT10W3JdLChpPT09Ii0ifHxpPT09IisiKSYmKGk9dFsrK3JdKSxpPT09IjAiKXtpZihyKzE9PT1lKXJldHVybiEwO2lmKGk9dFsrK3JdLGk9PT0iYiIpe2ZvcihyKys7cjxlO3IrKylpZihpPXRbcl0saSE9PSJfIil7aWYoaSE9PSIwIiYmaSE9PSIxIilyZXR1cm4hMTtuPSEwfXJldHVybiBuJiZpIT09Il8ifWlmKGk9PT0ieCIpe2ZvcihyKys7cjxlO3IrKylpZihpPXRbcl0saSE9PSJfIil7aWYoIU9BZSh0LmNoYXJDb2RlQXQocikpKXJldHVybiExO249ITB9cmV0dXJuIG4mJmkhPT0iXyJ9aWYoaT09PSJvIil7Zm9yKHIrKztyPGU7cisrKWlmKGk9dFtyXSxpIT09Il8iKXtpZighUEFlKHQuY2hhckNvZGVBdChyKSkpcmV0dXJuITE7bj0hMH1yZXR1cm4gbiYmaSE9PSJfIn19aWYoaT09PSJfIilyZXR1cm4hMTtmb3IoO3I8ZTtyKyspaWYoaT10W3JdLGkhPT0iXyIpe2lmKCFCQWUodC5jaGFyQ29kZUF0KHIpKSlyZXR1cm4hMTtuPSEwfXJldHVybiEoIW58fGk9PT0iXyIpfWZ1bmN0aW9uIHpBZSh0KXt2YXIgZT10LHI9MSxuO2lmKGUuaW5kZXhPZigiXyIpIT09LTEmJihlPWUucmVwbGFjZSgvXy9nLCIiKSksbj1lWzBdLChuPT09Ii0ifHxuPT09IisiKSYmKG49PT0iLSImJihyPS0xKSxlPWUuc2xpY2UoMSksbj1lWzBdKSxlPT09IjAiKXJldHVybiAwO2lmKG49PT0iMCIpe2lmKGVbMV09PT0iYiIpcmV0dXJuIHIqcGFyc2VJbnQoZS5zbGljZSgyKSwyKTtpZihlWzFdPT09IngiKXJldHVybiByKnBhcnNlSW50KGUuc2xpY2UoMiksMTYpO2lmKGVbMV09PT0ibyIpcmV0dXJuIHIqcGFyc2VJbnQoZS5zbGljZSgyKSw4KX1yZXR1cm4gcipwYXJzZUludChlLDEwKX1mdW5jdGlvbiBHQWUodCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KT09PSJbb2JqZWN0IE51bWJlcl0iJiZ0JTE9PT0wJiYhR2kuaXNOZWdhdGl2ZVplcm8odCl9ZnVuY3Rpb24gVUFlKHQpe3JldHVybiEodD09PW51bGx8fCFWQWUudGVzdCh0KXx8dFt0Lmxlbmd0aC0xXT09PSJfIil9ZnVuY3Rpb24gSEFlKHQpe3ZhciBlLHI7cmV0dXJuIGU9dC5yZXBsYWNlKC9fL2csIiIpLnRvTG93ZXJDYXNlKCkscj1lWzBdPT09Ii0iPy0xOjEsIistIi5pbmRleE9mKGVbMF0pPj0wJiYoZT1lLnNsaWNlKDEpKSxlPT09Ii5pbmYiP3I9PT0xP051bWJlci5QT1NJVElWRV9JTkZJTklUWTpOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk6ZT09PSIubmFuIj9OYU46cipwYXJzZUZsb2F0KGUsMTApfWZ1bmN0aW9uIFlBZSh0LGUpe3ZhciByO2lmKGlzTmFOKHQpKXN3aXRjaChlKXtjYXNlImxvd2VyY2FzZSI6cmV0dXJuIi5uYW4iO2Nhc2UidXBwZXJjYXNlIjpyZXR1cm4iLk5BTiI7Y2FzZSJjYW1lbGNhc2UiOnJldHVybiIuTmFOIn1lbHNlIGlmKE51bWJlci5QT1NJVElWRV9JTkZJTklUWT09PXQpc3dpdGNoKGUpe2Nhc2UibG93ZXJjYXNlIjpyZXR1cm4iLmluZiI7Y2FzZSJ1cHBlcmNhc2UiOnJldHVybiIuSU5GIjtjYXNlImNhbWVsY2FzZSI6cmV0dXJuIi5JbmYifWVsc2UgaWYoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZPT09dClzd2l0Y2goZSl7Y2FzZSJsb3dlcmNhc2UiOnJldHVybiItLmluZiI7Y2FzZSJ1cHBlcmNhc2UiOnJldHVybiItLklORiI7Y2FzZSJjYW1lbGNhc2UiOnJldHVybiItLkluZiJ9ZWxzZSBpZihHaS5pc05lZ2F0aXZlWmVybyh0KSlyZXR1cm4iLTAuMCI7cmV0dXJuIHI9dC50b1N0cmluZygxMCksV0FlLnRlc3Qocik/ci5yZXBsYWNlKCJlIiwiLmUiKTpyfWZ1bmN0aW9uIHFBZSh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpPT09IltvYmplY3QgTnVtYmVyXSImJih0JTEhPT0wfHxHaS5pc05lZ2F0aXZlWmVybyh0KSl9ZnVuY3Rpb24gS0FlKHQpe3JldHVybiB0PT09bnVsbD8hMTpwWi5leGVjKHQpIT09bnVsbHx8bVouZXhlYyh0KSE9PW51bGx9ZnVuY3Rpb24gUUFlKHQpe3ZhciBlLHIsbixpLGEscyxsLHU9MCxoPW51bGwsZixkLHA7aWYoZT1wWi5leGVjKHQpLGU9PT1udWxsJiYoZT1tWi5leGVjKHQpKSxlPT09bnVsbCl0aHJvdyBuZXcgRXJyb3IoIkRhdGUgcmVzb2x2ZSBlcnJvciIpO2lmKHI9K2VbMV0sbj0rZVsyXS0xLGk9K2VbM10sIWVbNF0pcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHIsbixpKSk7aWYoYT0rZVs0XSxzPStlWzVdLGw9K2VbNl0sZVs3XSl7Zm9yKHU9ZVs3XS5zbGljZSgwLDMpO3UubGVuZ3RoPDM7KXUrPSIwIjt1PSt1fXJldHVybiBlWzldJiYoZj0rZVsxMF0sZD0rKGVbMTFdfHwwKSxoPShmKjYwK2QpKjZlNCxlWzldPT09Ii0iJiYoaD0taCkpLHA9bmV3IERhdGUoRGF0ZS5VVEMocixuLGksYSxzLGwsdSkpLGgmJnAuc2V0VGltZShwLmdldFRpbWUoKS1oKSxwfWZ1bmN0aW9uIFpBZSh0KXtyZXR1cm4gdC50b0lTT1N0cmluZygpfWZ1bmN0aW9uIGU4ZSh0KXtyZXR1cm4gdD09PSI8PCJ8fHQ9PT1udWxsfWZ1bmN0aW9uIHI4ZSh0KXtpZih0PT09bnVsbClyZXR1cm4hMTt2YXIgZSxyLG49MCxpPXQubGVuZ3RoLGE9UTk7Zm9yKHI9MDtyPGk7cisrKWlmKGU9YS5pbmRleE9mKHQuY2hhckF0KHIpKSwhKGU+NjQpKXtpZihlPDApcmV0dXJuITE7bis9Nn1yZXR1cm4gbiU4PT09MH1mdW5jdGlvbiBuOGUodCl7dmFyIGUscixuPXQucmVwbGFjZSgvW1xyXG49XS9nLCIiKSxpPW4ubGVuZ3RoLGE9UTkscz0wLGw9W107Zm9yKGU9MDtlPGk7ZSsrKWUlND09PTAmJmUmJihsLnB1c2gocz4+MTYmMjU1KSxsLnB1c2gocz4+OCYyNTUpLGwucHVzaChzJjI1NSkpLHM9czw8NnxhLmluZGV4T2Yobi5jaGFyQXQoZSkpO3JldHVybiByPWklNCo2LHI9PT0wPyhsLnB1c2gocz4+MTYmMjU1KSxsLnB1c2gocz4+OCYyNTUpLGwucHVzaChzJjI1NSkpOnI9PT0xOD8obC5wdXNoKHM+PjEwJjI1NSksbC5wdXNoKHM+PjImMjU1KSk6cj09PTEyJiZsLnB1c2gocz4+NCYyNTUpLG5ldyBVaW50OEFycmF5KGwpfWZ1bmN0aW9uIGk4ZSh0KXt2YXIgZT0iIixyPTAsbixpLGE9dC5sZW5ndGgscz1ROTtmb3Iobj0wO248YTtuKyspbiUzPT09MCYmbiYmKGUrPXNbcj4+MTgmNjNdLGUrPXNbcj4+MTImNjNdLGUrPXNbcj4+NiY2M10sZSs9c1tyJjYzXSkscj0ocjw8OCkrdFtuXTtyZXR1cm4gaT1hJTMsaT09PTA/KGUrPXNbcj4+MTgmNjNdLGUrPXNbcj4+MTImNjNdLGUrPXNbcj4+NiY2M10sZSs9c1tyJjYzXSk6aT09PTI/KGUrPXNbcj4+MTAmNjNdLGUrPXNbcj4+NCY2M10sZSs9c1tyPDwyJjYzXSxlKz1zWzY0XSk6aT09PTEmJihlKz1zW3I+PjImNjNdLGUrPXNbcjw8NCY2M10sZSs9c1s2NF0sZSs9c1s2NF0pLGV9ZnVuY3Rpb24gYThlKHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCk9PT0iW29iamVjdCBVaW50OEFycmF5XSJ9ZnVuY3Rpb24gYzhlKHQpe2lmKHQ9PT1udWxsKXJldHVybiEwO3ZhciBlPVtdLHIsbixpLGEscyxsPXQ7Zm9yKHI9MCxuPWwubGVuZ3RoO3I8bjtyKz0xKXtpZihpPWxbcl0scz0hMSxsOGUuY2FsbChpKSE9PSJbb2JqZWN0IE9iamVjdF0iKXJldHVybiExO2ZvcihhIGluIGkpaWYobzhlLmNhbGwoaSxhKSlpZighcylzPSEwO2Vsc2UgcmV0dXJuITE7aWYoIXMpcmV0dXJuITE7aWYoZS5pbmRleE9mKGEpPT09LTEpZS5wdXNoKGEpO2Vsc2UgcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gdThlKHQpe3JldHVybiB0IT09bnVsbD90OltdfWZ1bmN0aW9uIGQ4ZSh0KXtpZih0PT09bnVsbClyZXR1cm4hMDt2YXIgZSxyLG4saSxhLHM9dDtmb3IoYT1uZXcgQXJyYXkocy5sZW5ndGgpLGU9MCxyPXMubGVuZ3RoO2U8cjtlKz0xKXtpZihuPXNbZV0sZjhlLmNhbGwobikhPT0iW29iamVjdCBPYmplY3RdInx8KGk9T2JqZWN0LmtleXMobiksaS5sZW5ndGghPT0xKSlyZXR1cm4hMTthW2VdPVtpWzBdLG5baVswXV1dfXJldHVybiEwfWZ1bmN0aW9uIHA4ZSh0KXtpZih0PT09bnVsbClyZXR1cm5bXTt2YXIgZSxyLG4saSxhLHM9dDtmb3IoYT1uZXcgQXJyYXkocy5sZW5ndGgpLGU9MCxyPXMubGVuZ3RoO2U8cjtlKz0xKW49c1tlXSxpPU9iamVjdC5rZXlzKG4pLGFbZV09W2lbMF0sbltpWzBdXV07cmV0dXJuIGF9ZnVuY3Rpb24geThlKHQpe2lmKHQ9PT1udWxsKXJldHVybiEwO3ZhciBlLHI9dDtmb3IoZSBpbiByKWlmKGc4ZS5jYWxsKHIsZSkmJnJbZV0hPT1udWxsKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHY4ZSh0KXtyZXR1cm4gdCE9PW51bGw/dDp7fX1mdW5jdGlvbiBaUSh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIEFjKHQpe3JldHVybiB0PT09MTB8fHQ9PT0xM31mdW5jdGlvbiBGZCh0KXtyZXR1cm4gdD09PTl8fHQ9PT0zMn1mdW5jdGlvbiBJcyh0KXtyZXR1cm4gdD09PTl8fHQ9PT0zMnx8dD09PTEwfHx0PT09MTN9ZnVuY3Rpb24gd20odCl7cmV0dXJuIHQ9PT00NHx8dD09PTkxfHx0PT09OTN8fHQ9PT0xMjN8fHQ9PT0xMjV9ZnVuY3Rpb24gRThlKHQpe3ZhciBlO3JldHVybiA0ODw9dCYmdDw9NTc/dC00ODooZT10fDMyLDk3PD1lJiZlPD0xMDI/ZS05NysxMDotMSl9ZnVuY3Rpb24gUzhlKHQpe3JldHVybiB0PT09MTIwPzI6dD09PTExNz80OnQ9PT04NT84OjB9ZnVuY3Rpb24gQzhlKHQpe3JldHVybiA0ODw9dCYmdDw9NTc/dC00ODotMX1mdW5jdGlvbiBKUSh0KXtyZXR1cm4gdD09PTQ4PyJcMCI6dD09PTk3PyJceDA3Ijp0PT09OTg/IlxiIjp0PT09MTE2fHx0PT09OT8iCSI6dD09PTExMD9gCmA6dD09PTExOD8iXHYiOnQ9PT0xMDI/IlxmIjp0PT09MTE0PyJcciI6dD09PTEwMT8iXHgxQiI6dD09PTMyPyIgIjp0PT09MzQ/JyInOnQ9PT00Nz8iLyI6dD09PTkyPyJcXCI6dD09PTc4PyJceDg1Ijp0PT09OTU/Ilx4QTAiOnQ9PT03Nj8iXHUyMDI4Ijp0PT09ODA/Ilx1MjAyOSI6IiJ9ZnVuY3Rpb24gQThlKHQpe3JldHVybiB0PD02NTUzNT9TdHJpbmcuZnJvbUNoYXJDb2RlKHQpOlN0cmluZy5mcm9tQ2hhckNvZGUoKHQtNjU1MzY+PjEwKSs1NTI5NiwodC02NTUzNiYxMDIzKSs1NjMyMCl9ZnVuY3Rpb24gXzhlKHQsZSl7dGhpcy5pbnB1dD10LHRoaXMuZmlsZW5hbWU9ZS5maWxlbmFtZXx8bnVsbCx0aGlzLnNjaGVtYT1lLnNjaGVtYXx8Z1osdGhpcy5vbldhcm5pbmc9ZS5vbldhcm5pbmd8fG51bGwsdGhpcy5sZWdhY3k9ZS5sZWdhY3l8fCExLHRoaXMuanNvbj1lLmpzb258fCExLHRoaXMubGlzdGVuZXI9ZS5saXN0ZW5lcnx8bnVsbCx0aGlzLmltcGxpY2l0VHlwZXM9dGhpcy5zY2hlbWEuY29tcGlsZWRJbXBsaWNpdCx0aGlzLnR5cGVNYXA9dGhpcy5zY2hlbWEuY29tcGlsZWRUeXBlTWFwLHRoaXMubGVuZ3RoPXQubGVuZ3RoLHRoaXMucG9zaXRpb249MCx0aGlzLmxpbmU9MCx0aGlzLmxpbmVTdGFydD0wLHRoaXMubGluZUluZGVudD0wLHRoaXMuZmlyc3RUYWJJbkxpbmU9LTEsdGhpcy5kb2N1bWVudHM9W119ZnVuY3Rpb24ga1oodCxlKXt2YXIgcj17bmFtZTp0LmZpbGVuYW1lLGJ1ZmZlcjp0LmlucHV0LnNsaWNlKDAsLTEpLHBvc2l0aW9uOnQucG9zaXRpb24sbGluZTp0LmxpbmUsY29sdW1uOnQucG9zaXRpb24tdC5saW5lU3RhcnR9O3JldHVybiByLnNuaXBwZXQ9Z0FlKHIpLG5ldyBNcyhlLHIpfWZ1bmN0aW9uIFF0KHQsZSl7dGhyb3cga1oodCxlKX1mdW5jdGlvbiBLNSh0LGUpe3Qub25XYXJuaW5nJiZ0Lm9uV2FybmluZy5jYWxsKG51bGwsa1oodCxlKSl9ZnVuY3Rpb24gamgodCxlLHIsbil7dmFyIGksYSxzLGw7aWYoZTxyKXtpZihsPXQuaW5wdXQuc2xpY2UoZSxyKSxuKWZvcihpPTAsYT1sLmxlbmd0aDtpPGE7aSs9MSlzPWwuY2hhckNvZGVBdChpKSxzPT09OXx8MzI8PXMmJnM8PTExMTQxMTF8fFF0KHQsImV4cGVjdGVkIHZhbGlkIEpTT04gY2hhcmFjdGVyIik7ZWxzZSB3OGUudGVzdChsKSYmUXQodCwidGhlIHN0cmVhbSBjb250YWlucyBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMiKTt0LnJlc3VsdCs9bH19ZnVuY3Rpb24gdFoodCxlLHIsbil7dmFyIGksYSxzLGw7Zm9yKEdpLmlzT2JqZWN0KHIpfHxRdCh0LCJjYW5ub3QgbWVyZ2UgbWFwcGluZ3M7IHRoZSBwcm92aWRlZCBzb3VyY2Ugb2JqZWN0IGlzIHVuYWNjZXB0YWJsZSIpLGk9T2JqZWN0LmtleXMocikscz0wLGw9aS5sZW5ndGg7czxsO3MrPTEpYT1pW3NdLEtoLmNhbGwoZSxhKXx8KGVbYV09clthXSxuW2FdPSEwKX1mdW5jdGlvbiBUbSh0LGUscixuLGksYSxzLGwsdSl7dmFyIGgsZjtpZihBcnJheS5pc0FycmF5KGkpKWZvcihpPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGkpLGg9MCxmPWkubGVuZ3RoO2g8ZjtoKz0xKUFycmF5LmlzQXJyYXkoaVtoXSkmJlF0KHQsIm5lc3RlZCBhcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW5zaWRlIGtleXMiKSx0eXBlb2YgaT09Im9iamVjdCImJlpRKGlbaF0pPT09IltvYmplY3QgT2JqZWN0XSImJihpW2hdPSJbb2JqZWN0IE9iamVjdF0iKTtpZih0eXBlb2YgaT09Im9iamVjdCImJlpRKGkpPT09IltvYmplY3QgT2JqZWN0XSImJihpPSJbb2JqZWN0IE9iamVjdF0iKSxpPVN0cmluZyhpKSxlPT09bnVsbCYmKGU9e30pLG49PT0idGFnOnlhbWwub3JnLDIwMDI6bWVyZ2UiKWlmKEFycmF5LmlzQXJyYXkoYSkpZm9yKGg9MCxmPWEubGVuZ3RoO2g8ZjtoKz0xKXRaKHQsZSxhW2hdLHIpO2Vsc2UgdFoodCxlLGEscik7ZWxzZSF0Lmpzb24mJiFLaC5jYWxsKHIsaSkmJktoLmNhbGwoZSxpKSYmKHQubGluZT1zfHx0LmxpbmUsdC5saW5lU3RhcnQ9bHx8dC5saW5lU3RhcnQsdC5wb3NpdGlvbj11fHx0LnBvc2l0aW9uLFF0KHQsImR1cGxpY2F0ZWQgbWFwcGluZyBrZXkiKSksaT09PSJfX3Byb3RvX18iP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLGkse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmF9KTplW2ldPWEsZGVsZXRlIHJbaV07cmV0dXJuIGV9ZnVuY3Rpb24gWjkodCl7dmFyIGU7ZT10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksZT09PTEwP3QucG9zaXRpb24rKzplPT09MTM/KHQucG9zaXRpb24rKyx0LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbik9PT0xMCYmdC5wb3NpdGlvbisrKTpRdCh0LCJhIGxpbmUgYnJlYWsgaXMgZXhwZWN0ZWQiKSx0LmxpbmUrPTEsdC5saW5lU3RhcnQ9dC5wb3NpdGlvbix0LmZpcnN0VGFiSW5MaW5lPS0xfWZ1bmN0aW9uIERpKHQsZSxyKXtmb3IodmFyIG49MCxpPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKTtpIT09MDspe2Zvcig7RmQoaSk7KWk9PT05JiZ0LmZpcnN0VGFiSW5MaW5lPT09LTEmJih0LmZpcnN0VGFiSW5MaW5lPXQucG9zaXRpb24pLGk9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7aWYoZSYmaT09PTM1KWRvIGk9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7d2hpbGUoaSE9PTEwJiZpIT09MTMmJmkhPT0wKTtpZihBYyhpKSlmb3IoWjkodCksaT10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksbisrLHQubGluZUluZGVudD0wO2k9PT0zMjspdC5saW5lSW5kZW50KyssaT10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTtlbHNlIGJyZWFrfXJldHVybiByIT09LTEmJm4hPT0wJiZ0LmxpbmVJbmRlbnQ8ciYmSzUodCwiZGVmaWNpZW50IGluZGVudGF0aW9uIiksbn1mdW5jdGlvbiBKNSh0KXt2YXIgZT10LnBvc2l0aW9uLHI7cmV0dXJuIHI9dC5pbnB1dC5jaGFyQ29kZUF0KGUpLCEhKChyPT09NDV8fHI9PT00NikmJnI9PT10LmlucHV0LmNoYXJDb2RlQXQoZSsxKSYmcj09PXQuaW5wdXQuY2hhckNvZGVBdChlKzIpJiYoZSs9MyxyPXQuaW5wdXQuY2hhckNvZGVBdChlKSxyPT09MHx8SXMocikpKX1mdW5jdGlvbiBKOSh0LGUpe2U9PT0xP3QucmVzdWx0Kz0iICI6ZT4xJiYodC5yZXN1bHQrPUdpLnJlcGVhdChgCmAsZS0xKSl9ZnVuY3Rpb24gTDhlKHQsZSxyKXt2YXIgbixpLGEscyxsLHUsaCxmLGQ9dC5raW5kLHA9dC5yZXN1bHQsbTtpZihtPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxJcyhtKXx8d20obSl8fG09PT0zNXx8bT09PTM4fHxtPT09NDJ8fG09PT0zM3x8bT09PTEyNHx8bT09PTYyfHxtPT09Mzl8fG09PT0zNHx8bT09PTM3fHxtPT09NjR8fG09PT05Nnx8KG09PT02M3x8bT09PTQ1KSYmKGk9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24rMSksSXMoaSl8fHImJndtKGkpKSlyZXR1cm4hMTtmb3IodC5raW5kPSJzY2FsYXIiLHQucmVzdWx0PSIiLGE9cz10LnBvc2l0aW9uLGw9ITE7bSE9PTA7KXtpZihtPT09NTgpe2lmKGk9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24rMSksSXMoaSl8fHImJndtKGkpKWJyZWFrfWVsc2UgaWYobT09PTM1KXtpZihuPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uLTEpLElzKG4pKWJyZWFrfWVsc2V7aWYodC5wb3NpdGlvbj09PXQubGluZVN0YXJ0JiZKNSh0KXx8ciYmd20obSkpYnJlYWs7aWYoQWMobSkpaWYodT10LmxpbmUsaD10LmxpbmVTdGFydCxmPXQubGluZUluZGVudCxEaSh0LCExLC0xKSx0LmxpbmVJbmRlbnQ+PWUpe2w9ITAsbT10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbik7Y29udGludWV9ZWxzZXt0LnBvc2l0aW9uPXMsdC5saW5lPXUsdC5saW5lU3RhcnQ9aCx0LmxpbmVJbmRlbnQ9ZjticmVha319bCYmKGpoKHQsYSxzLCExKSxKOSh0LHQubGluZS11KSxhPXM9dC5wb3NpdGlvbixsPSExKSxGZChtKXx8KHM9dC5wb3NpdGlvbisxKSxtPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pfXJldHVybiBqaCh0LGEscywhMSksdC5yZXN1bHQ/ITA6KHQua2luZD1kLHQucmVzdWx0PXAsITEpfWZ1bmN0aW9uIEQ4ZSh0LGUpe3ZhciByLG4saTtpZihyPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxyIT09MzkpcmV0dXJuITE7Zm9yKHQua2luZD0ic2NhbGFyIix0LnJlc3VsdD0iIix0LnBvc2l0aW9uKyssbj1pPXQucG9zaXRpb247KHI9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pKSE9PTA7KWlmKHI9PT0zOSlpZihqaCh0LG4sdC5wb3NpdGlvbiwhMCkscj10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSxyPT09Mzkpbj10LnBvc2l0aW9uLHQucG9zaXRpb24rKyxpPXQucG9zaXRpb247ZWxzZSByZXR1cm4hMDtlbHNlIEFjKHIpPyhqaCh0LG4saSwhMCksSjkodCxEaSh0LCExLGUpKSxuPWk9dC5wb3NpdGlvbik6dC5wb3NpdGlvbj09PXQubGluZVN0YXJ0JiZKNSh0KT9RdCh0LCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgZG9jdW1lbnQgd2l0aGluIGEgc2luZ2xlIHF1b3RlZCBzY2FsYXIiKToodC5wb3NpdGlvbisrLGk9dC5wb3NpdGlvbik7UXQodCwidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBzaW5nbGUgcXVvdGVkIHNjYWxhciIpfWZ1bmN0aW9uIE44ZSh0LGUpe3ZhciByLG4saSxhLHMsbDtpZihsPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxsIT09MzQpcmV0dXJuITE7Zm9yKHQua2luZD0ic2NhbGFyIix0LnJlc3VsdD0iIix0LnBvc2l0aW9uKysscj1uPXQucG9zaXRpb247KGw9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pKSE9PTA7KXtpZihsPT09MzQpcmV0dXJuIGpoKHQscix0LnBvc2l0aW9uLCEwKSx0LnBvc2l0aW9uKyssITA7aWYobD09PTkyKXtpZihqaCh0LHIsdC5wb3NpdGlvbiwhMCksbD10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSxBYyhsKSlEaSh0LCExLGUpO2Vsc2UgaWYobDwyNTYmJndaW2xdKXQucmVzdWx0Kz1UWltsXSx0LnBvc2l0aW9uKys7ZWxzZSBpZigocz1TOGUobCkpPjApe2ZvcihpPXMsYT0wO2k+MDtpLS0pbD10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSwocz1FOGUobCkpPj0wP2E9KGE8PDQpK3M6UXQodCwiZXhwZWN0ZWQgaGV4YWRlY2ltYWwgY2hhcmFjdGVyIik7dC5yZXN1bHQrPUE4ZShhKSx0LnBvc2l0aW9uKyt9ZWxzZSBRdCh0LCJ1bmtub3duIGVzY2FwZSBzZXF1ZW5jZSIpO3I9bj10LnBvc2l0aW9ufWVsc2UgQWMobCk/KGpoKHQscixuLCEwKSxKOSh0LERpKHQsITEsZSkpLHI9bj10LnBvc2l0aW9uKTp0LnBvc2l0aW9uPT09dC5saW5lU3RhcnQmJko1KHQpP1F0KHQsInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBkb2N1bWVudCB3aXRoaW4gYSBkb3VibGUgcXVvdGVkIHNjYWxhciIpOih0LnBvc2l0aW9uKyssbj10LnBvc2l0aW9uKX1RdCh0LCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIGRvdWJsZSBxdW90ZWQgc2NhbGFyIil9ZnVuY3Rpb24gUjhlKHQsZSl7dmFyIHI9ITAsbixpLGEscz10LnRhZyxsLHU9dC5hbmNob3IsaCxmLGQscCxtLGc9T2JqZWN0LmNyZWF0ZShudWxsKSx5LHYseCxiO2lmKGI9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pLGI9PT05MSlmPTkzLG09ITEsbD1bXTtlbHNlIGlmKGI9PT0xMjMpZj0xMjUsbT0hMCxsPXt9O2Vsc2UgcmV0dXJuITE7Zm9yKHQuYW5jaG9yIT09bnVsbCYmKHQuYW5jaG9yTWFwW3QuYW5jaG9yXT1sKSxiPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO2IhPT0wOyl7aWYoRGkodCwhMCxlKSxiPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxiPT09ZilyZXR1cm4gdC5wb3NpdGlvbisrLHQudGFnPXMsdC5hbmNob3I9dSx0LmtpbmQ9bT8ibWFwcGluZyI6InNlcXVlbmNlIix0LnJlc3VsdD1sLCEwO3I/Yj09PTQ0JiZRdCh0LCJleHBlY3RlZCB0aGUgbm9kZSBjb250ZW50LCBidXQgZm91bmQgJywnIik6UXQodCwibWlzc2VkIGNvbW1hIGJldHdlZW4gZmxvdyBjb2xsZWN0aW9uIGVudHJpZXMiKSx2PXk9eD1udWxsLGQ9cD0hMSxiPT09NjMmJihoPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKzEpLElzKGgpJiYoZD1wPSEwLHQucG9zaXRpb24rKyxEaSh0LCEwLGUpKSksbj10LmxpbmUsaT10LmxpbmVTdGFydCxhPXQucG9zaXRpb24sa20odCxlLFg1LCExLCEwKSx2PXQudGFnLHk9dC5yZXN1bHQsRGkodCwhMCxlKSxiPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSwocHx8dC5saW5lPT09bikmJmI9PT01OCYmKGQ9ITAsYj10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSxEaSh0LCEwLGUpLGttKHQsZSxYNSwhMSwhMCkseD10LnJlc3VsdCksbT9UbSh0LGwsZyx2LHkseCxuLGksYSk6ZD9sLnB1c2goVG0odCxudWxsLGcsdix5LHgsbixpLGEpKTpsLnB1c2goeSksRGkodCwhMCxlKSxiPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxiPT09NDQ/KHI9ITAsYj10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSk6cj0hMX1RdCh0LCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIGZsb3cgY29sbGVjdGlvbiIpfWZ1bmN0aW9uIE04ZSh0LGUpe3ZhciByLG4saT1XOSxhPSExLHM9ITEsbD1lLHU9MCxoPSExLGYsZDtpZihkPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxkPT09MTI0KW49ITE7ZWxzZSBpZihkPT09NjIpbj0hMDtlbHNlIHJldHVybiExO2Zvcih0LmtpbmQ9InNjYWxhciIsdC5yZXN1bHQ9IiI7ZCE9PTA7KWlmKGQ9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbiksZD09PTQzfHxkPT09NDUpVzk9PT1pP2k9ZD09PTQzP1FROmI4ZTpRdCh0LCJyZXBlYXQgb2YgYSBjaG9tcGluZyBtb2RlIGlkZW50aWZpZXIiKTtlbHNlIGlmKChmPUM4ZShkKSk+PTApZj09PTA/UXQodCwiYmFkIGV4cGxpY2l0IGluZGVudGF0aW9uIHdpZHRoIG9mIGEgYmxvY2sgc2NhbGFyOyBpdCBjYW5ub3QgYmUgbGVzcyB0aGFuIG9uZSIpOnM/UXQodCwicmVwZWF0IG9mIGFuIGluZGVudGF0aW9uIHdpZHRoIGlkZW50aWZpZXIiKToobD1lK2YtMSxzPSEwKTtlbHNlIGJyZWFrO2lmKEZkKGQpKXtkbyBkPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO3doaWxlKEZkKGQpKTtpZihkPT09MzUpZG8gZD10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTt3aGlsZSghQWMoZCkmJmQhPT0wKX1mb3IoO2QhPT0wOyl7Zm9yKFo5KHQpLHQubGluZUluZGVudD0wLGQ9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pOyghc3x8dC5saW5lSW5kZW50PGwpJiZkPT09MzI7KXQubGluZUluZGVudCsrLGQ9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7aWYoIXMmJnQubGluZUluZGVudD5sJiYobD10LmxpbmVJbmRlbnQpLEFjKGQpKXt1Kys7Y29udGludWV9aWYodC5saW5lSW5kZW50PGwpe2k9PT1RUT90LnJlc3VsdCs9R2kucmVwZWF0KGAKYCxhPzErdTp1KTppPT09VzkmJmEmJih0LnJlc3VsdCs9YApgKTticmVha31mb3Iobj9GZChkKT8oaD0hMCx0LnJlc3VsdCs9R2kucmVwZWF0KGAKYCxhPzErdTp1KSk6aD8oaD0hMSx0LnJlc3VsdCs9R2kucmVwZWF0KGAKYCx1KzEpKTp1PT09MD9hJiYodC5yZXN1bHQrPSIgIik6dC5yZXN1bHQrPUdpLnJlcGVhdChgCmAsdSk6dC5yZXN1bHQrPUdpLnJlcGVhdChgCmAsYT8xK3U6dSksYT0hMCxzPSEwLHU9MCxyPXQucG9zaXRpb247IUFjKGQpJiZkIT09MDspZD10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTtqaCh0LHIsdC5wb3NpdGlvbiwhMSl9cmV0dXJuITB9ZnVuY3Rpb24gcloodCxlKXt2YXIgcixuPXQudGFnLGk9dC5hbmNob3IsYT1bXSxzLGw9ITEsdTtpZih0LmZpcnN0VGFiSW5MaW5lIT09LTEpcmV0dXJuITE7Zm9yKHQuYW5jaG9yIT09bnVsbCYmKHQuYW5jaG9yTWFwW3QuYW5jaG9yXT1hKSx1PXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKTt1IT09MCYmKHQuZmlyc3RUYWJJbkxpbmUhPT0tMSYmKHQucG9zaXRpb249dC5maXJzdFRhYkluTGluZSxRdCh0LCJ0YWIgY2hhcmFjdGVycyBtdXN0IG5vdCBiZSB1c2VkIGluIGluZGVudGF0aW9uIikpLCEodSE9PTQ1fHwocz10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbisxKSwhSXMocykpKSk7KXtpZihsPSEwLHQucG9zaXRpb24rKyxEaSh0LCEwLC0xKSYmdC5saW5lSW5kZW50PD1lKXthLnB1c2gobnVsbCksdT10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbik7Y29udGludWV9aWYocj10LmxpbmUsa20odCxlLHZaLCExLCEwKSxhLnB1c2godC5yZXN1bHQpLERpKHQsITAsLTEpLHU9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pLCh0LmxpbmU9PT1yfHx0LmxpbmVJbmRlbnQ+ZSkmJnUhPT0wKVF0KHQsImJhZCBpbmRlbnRhdGlvbiBvZiBhIHNlcXVlbmNlIGVudHJ5Iik7ZWxzZSBpZih0LmxpbmVJbmRlbnQ8ZSlicmVha31yZXR1cm4gbD8odC50YWc9bix0LmFuY2hvcj1pLHQua2luZD0ic2VxdWVuY2UiLHQucmVzdWx0PWEsITApOiExfWZ1bmN0aW9uIEk4ZSh0LGUscil7dmFyIG4saSxhLHMsbCx1LGg9dC50YWcsZj10LmFuY2hvcixkPXt9LHA9T2JqZWN0LmNyZWF0ZShudWxsKSxtPW51bGwsZz1udWxsLHk9bnVsbCx2PSExLHg9ITEsYjtpZih0LmZpcnN0VGFiSW5MaW5lIT09LTEpcmV0dXJuITE7Zm9yKHQuYW5jaG9yIT09bnVsbCYmKHQuYW5jaG9yTWFwW3QuYW5jaG9yXT1kKSxiPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKTtiIT09MDspe2lmKCF2JiZ0LmZpcnN0VGFiSW5MaW5lIT09LTEmJih0LnBvc2l0aW9uPXQuZmlyc3RUYWJJbkxpbmUsUXQodCwidGFiIGNoYXJhY3RlcnMgbXVzdCBub3QgYmUgdXNlZCBpbiBpbmRlbnRhdGlvbiIpKSxuPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKzEpLGE9dC5saW5lLChiPT09NjN8fGI9PT01OCkmJklzKG4pKWI9PT02Mz8odiYmKFRtKHQsZCxwLG0sZyxudWxsLHMsbCx1KSxtPWc9eT1udWxsKSx4PSEwLHY9ITAsaT0hMCk6dj8odj0hMSxpPSEwKTpRdCh0LCJpbmNvbXBsZXRlIGV4cGxpY2l0IG1hcHBpbmcgcGFpcjsgYSBrZXkgbm9kZSBpcyBtaXNzZWQ7IG9yIGZvbGxvd2VkIGJ5IGEgbm9uLXRhYnVsYXRlZCBlbXB0eSBsaW5lIiksdC5wb3NpdGlvbis9MSxiPW47ZWxzZXtpZihzPXQubGluZSxsPXQubGluZVN0YXJ0LHU9dC5wb3NpdGlvbiwha20odCxyLHlaLCExLCEwKSlicmVhaztpZih0LmxpbmU9PT1hKXtmb3IoYj10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbik7RmQoYik7KWI9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7aWYoYj09PTU4KWI9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbiksSXMoYil8fFF0KHQsImEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgZXhwZWN0ZWQgYWZ0ZXIgdGhlIGtleS12YWx1ZSBzZXBhcmF0b3Igd2l0aGluIGEgYmxvY2sgbWFwcGluZyIpLHYmJihUbSh0LGQscCxtLGcsbnVsbCxzLGwsdSksbT1nPXk9bnVsbCkseD0hMCx2PSExLGk9ITEsbT10LnRhZyxnPXQucmVzdWx0O2Vsc2UgaWYoeClRdCh0LCJjYW4gbm90IHJlYWQgYW4gaW1wbGljaXQgbWFwcGluZyBwYWlyOyBhIGNvbG9uIGlzIG1pc3NlZCIpO2Vsc2UgcmV0dXJuIHQudGFnPWgsdC5hbmNob3I9ZiwhMH1lbHNlIGlmKHgpUXQodCwiY2FuIG5vdCByZWFkIGEgYmxvY2sgbWFwcGluZyBlbnRyeTsgYSBtdWx0aWxpbmUga2V5IG1heSBub3QgYmUgYW4gaW1wbGljaXQga2V5Iik7ZWxzZSByZXR1cm4gdC50YWc9aCx0LmFuY2hvcj1mLCEwfWlmKCh0LmxpbmU9PT1hfHx0LmxpbmVJbmRlbnQ+ZSkmJih2JiYocz10LmxpbmUsbD10LmxpbmVTdGFydCx1PXQucG9zaXRpb24pLGttKHQsZSxqNSwhMCxpKSYmKHY/Zz10LnJlc3VsdDp5PXQucmVzdWx0KSx2fHwoVG0odCxkLHAsbSxnLHkscyxsLHUpLG09Zz15PW51bGwpLERpKHQsITAsLTEpLGI9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pKSwodC5saW5lPT09YXx8dC5saW5lSW5kZW50PmUpJiZiIT09MClRdCh0LCJiYWQgaW5kZW50YXRpb24gb2YgYSBtYXBwaW5nIGVudHJ5Iik7ZWxzZSBpZih0LmxpbmVJbmRlbnQ8ZSlicmVha31yZXR1cm4gdiYmVG0odCxkLHAsbSxnLG51bGwscyxsLHUpLHgmJih0LnRhZz1oLHQuYW5jaG9yPWYsdC5raW5kPSJtYXBwaW5nIix0LnJlc3VsdD1kKSx4fWZ1bmN0aW9uIE84ZSh0KXt2YXIgZSxyPSExLG49ITEsaSxhLHM7aWYocz10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbikscyE9PTMzKXJldHVybiExO2lmKHQudGFnIT09bnVsbCYmUXQodCwiZHVwbGljYXRpb24gb2YgYSB0YWcgcHJvcGVydHkiKSxzPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pLHM9PT02MD8ocj0hMCxzPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pKTpzPT09MzM/KG49ITAsaT0iISEiLHM9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbikpOmk9IiEiLGU9dC5wb3NpdGlvbixyKXtkbyBzPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO3doaWxlKHMhPT0wJiZzIT09NjIpO3QucG9zaXRpb248dC5sZW5ndGg/KGE9dC5pbnB1dC5zbGljZShlLHQucG9zaXRpb24pLHM9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbikpOlF0KHQsInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgdmVyYmF0aW0gdGFnIil9ZWxzZXtmb3IoO3MhPT0wJiYhSXMocyk7KXM9PT0zMyYmKG4/UXQodCwidGFnIHN1ZmZpeCBjYW5ub3QgY29udGFpbiBleGNsYW1hdGlvbiBtYXJrcyIpOihpPXQuaW5wdXQuc2xpY2UoZS0xLHQucG9zaXRpb24rMSkseFoudGVzdChpKXx8UXQodCwibmFtZWQgdGFnIGhhbmRsZSBjYW5ub3QgY29udGFpbiBzdWNoIGNoYXJhY3RlcnMiKSxuPSEwLGU9dC5wb3NpdGlvbisxKSkscz10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTthPXQuaW5wdXQuc2xpY2UoZSx0LnBvc2l0aW9uKSxrOGUudGVzdChhKSYmUXQodCwidGFnIHN1ZmZpeCBjYW5ub3QgY29udGFpbiBmbG93IGluZGljYXRvciBjaGFyYWN0ZXJzIil9YSYmIWJaLnRlc3QoYSkmJlF0KHQsInRhZyBuYW1lIGNhbm5vdCBjb250YWluIHN1Y2ggY2hhcmFjdGVyczogIithKTt0cnl7YT1kZWNvZGVVUklDb21wb25lbnQoYSl9Y2F0Y2h7UXQodCwidGFnIG5hbWUgaXMgbWFsZm9ybWVkOiAiK2EpfXJldHVybiByP3QudGFnPWE6S2guY2FsbCh0LnRhZ01hcCxpKT90LnRhZz10LnRhZ01hcFtpXSthOmk9PT0iISI/dC50YWc9IiEiK2E6aT09PSIhISI/dC50YWc9InRhZzp5YW1sLm9yZywyMDAyOiIrYTpRdCh0LCd1bmRlY2xhcmVkIHRhZyBoYW5kbGUgIicraSsnIicpLCEwfWZ1bmN0aW9uIFA4ZSh0KXt2YXIgZSxyO2lmKHI9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pLHIhPT0zOClyZXR1cm4hMTtmb3IodC5hbmNob3IhPT1udWxsJiZRdCh0LCJkdXBsaWNhdGlvbiBvZiBhbiBhbmNob3IgcHJvcGVydHkiKSxyPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pLGU9dC5wb3NpdGlvbjtyIT09MCYmIUlzKHIpJiYhd20ocik7KXI9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7cmV0dXJuIHQucG9zaXRpb249PT1lJiZRdCh0LCJuYW1lIG9mIGFuIGFuY2hvciBub2RlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIiksdC5hbmNob3I9dC5pbnB1dC5zbGljZShlLHQucG9zaXRpb24pLCEwfWZ1bmN0aW9uIEI4ZSh0KXt2YXIgZSxyLG47aWYobj10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksbiE9PTQyKXJldHVybiExO2ZvcihuPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pLGU9dC5wb3NpdGlvbjtuIT09MCYmIUlzKG4pJiYhd20obik7KW49dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7cmV0dXJuIHQucG9zaXRpb249PT1lJiZRdCh0LCJuYW1lIG9mIGFuIGFsaWFzIG5vZGUgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIiKSxyPXQuaW5wdXQuc2xpY2UoZSx0LnBvc2l0aW9uKSxLaC5jYWxsKHQuYW5jaG9yTWFwLHIpfHxRdCh0LCd1bmlkZW50aWZpZWQgYWxpYXMgIicrcisnIicpLHQucmVzdWx0PXQuYW5jaG9yTWFwW3JdLERpKHQsITAsLTEpLCEwfWZ1bmN0aW9uIGttKHQsZSxyLG4saSl7dmFyIGEscyxsLHU9MSxoPSExLGY9ITEsZCxwLG0sZyx5LHY7aWYodC5saXN0ZW5lciE9PW51bGwmJnQubGlzdGVuZXIoIm9wZW4iLHQpLHQudGFnPW51bGwsdC5hbmNob3I9bnVsbCx0LmtpbmQ9bnVsbCx0LnJlc3VsdD1udWxsLGE9cz1sPWo1PT09cnx8dlo9PT1yLG4mJkRpKHQsITAsLTEpJiYoaD0hMCx0LmxpbmVJbmRlbnQ+ZT91PTE6dC5saW5lSW5kZW50PT09ZT91PTA6dC5saW5lSW5kZW50PGUmJih1PS0xKSksdT09PTEpZm9yKDtPOGUodCl8fFA4ZSh0KTspRGkodCwhMCwtMSk/KGg9ITAsbD1hLHQubGluZUluZGVudD5lP3U9MTp0LmxpbmVJbmRlbnQ9PT1lP3U9MDp0LmxpbmVJbmRlbnQ8ZSYmKHU9LTEpKTpsPSExO2lmKGwmJihsPWh8fGkpLCh1PT09MXx8ajU9PT1yKSYmKFg1PT09cnx8eVo9PT1yP3k9ZTp5PWUrMSx2PXQucG9zaXRpb24tdC5saW5lU3RhcnQsdT09PTE/bCYmKHJaKHQsdil8fEk4ZSh0LHYseSkpfHxSOGUodCx5KT9mPSEwOihzJiZNOGUodCx5KXx8RDhlKHQseSl8fE44ZSh0LHkpP2Y9ITA6QjhlKHQpPyhmPSEwLCh0LnRhZyE9PW51bGx8fHQuYW5jaG9yIT09bnVsbCkmJlF0KHQsImFsaWFzIG5vZGUgc2hvdWxkIG5vdCBoYXZlIGFueSBwcm9wZXJ0aWVzIikpOkw4ZSh0LHksWDU9PT1yKSYmKGY9ITAsdC50YWc9PT1udWxsJiYodC50YWc9Ij8iKSksdC5hbmNob3IhPT1udWxsJiYodC5hbmNob3JNYXBbdC5hbmNob3JdPXQucmVzdWx0KSk6dT09PTAmJihmPWwmJnJaKHQsdikpKSx0LnRhZz09PW51bGwpdC5hbmNob3IhPT1udWxsJiYodC5hbmNob3JNYXBbdC5hbmNob3JdPXQucmVzdWx0KTtlbHNlIGlmKHQudGFnPT09Ij8iKXtmb3IodC5yZXN1bHQhPT1udWxsJiZ0LmtpbmQhPT0ic2NhbGFyIiYmUXQodCwndW5hY2NlcHRhYmxlIG5vZGUga2luZCBmb3IgITw/PiB0YWc7IGl0IHNob3VsZCBiZSAic2NhbGFyIiwgbm90ICInK3Qua2luZCsnIicpLGQ9MCxwPXQuaW1wbGljaXRUeXBlcy5sZW5ndGg7ZDxwO2QrPTEpaWYoZz10LmltcGxpY2l0VHlwZXNbZF0sZy5yZXNvbHZlKHQucmVzdWx0KSl7dC5yZXN1bHQ9Zy5jb25zdHJ1Y3QodC5yZXN1bHQpLHQudGFnPWcudGFnLHQuYW5jaG9yIT09bnVsbCYmKHQuYW5jaG9yTWFwW3QuYW5jaG9yXT10LnJlc3VsdCk7YnJlYWt9fWVsc2UgaWYodC50YWchPT0iISIpe2lmKEtoLmNhbGwodC50eXBlTWFwW3Qua2luZHx8ImZhbGxiYWNrIl0sdC50YWcpKWc9dC50eXBlTWFwW3Qua2luZHx8ImZhbGxiYWNrIl1bdC50YWddO2Vsc2UgZm9yKGc9bnVsbCxtPXQudHlwZU1hcC5tdWx0aVt0LmtpbmR8fCJmYWxsYmFjayJdLGQ9MCxwPW0ubGVuZ3RoO2Q8cDtkKz0xKWlmKHQudGFnLnNsaWNlKDAsbVtkXS50YWcubGVuZ3RoKT09PW1bZF0udGFnKXtnPW1bZF07YnJlYWt9Z3x8UXQodCwidW5rbm93biB0YWcgITwiK3QudGFnKyI+IiksdC5yZXN1bHQhPT1udWxsJiZnLmtpbmQhPT10LmtpbmQmJlF0KHQsInVuYWNjZXB0YWJsZSBub2RlIGtpbmQgZm9yICE8Iit0LnRhZysnPiB0YWc7IGl0IHNob3VsZCBiZSAiJytnLmtpbmQrJyIsIG5vdCAiJyt0LmtpbmQrJyInKSxnLnJlc29sdmUodC5yZXN1bHQsdC50YWcpPyh0LnJlc3VsdD1nLmNvbnN0cnVjdCh0LnJlc3VsdCx0LnRhZyksdC5hbmNob3IhPT1udWxsJiYodC5hbmNob3JNYXBbdC5hbmNob3JdPXQucmVzdWx0KSk6UXQodCwiY2Fubm90IHJlc29sdmUgYSBub2RlIHdpdGggITwiK3QudGFnKyI+IGV4cGxpY2l0IHRhZyIpfXJldHVybiB0Lmxpc3RlbmVyIT09bnVsbCYmdC5saXN0ZW5lcigiY2xvc2UiLHQpLHQudGFnIT09bnVsbHx8dC5hbmNob3IhPT1udWxsfHxmfWZ1bmN0aW9uIEY4ZSh0KXt2YXIgZT10LnBvc2l0aW9uLHIsbixpLGE9ITEscztmb3IodC52ZXJzaW9uPW51bGwsdC5jaGVja0xpbmVCcmVha3M9dC5sZWdhY3ksdC50YWdNYXA9T2JqZWN0LmNyZWF0ZShudWxsKSx0LmFuY2hvck1hcD1PYmplY3QuY3JlYXRlKG51bGwpOyhzPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSkhPT0wJiYoRGkodCwhMCwtMSkscz10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksISh0LmxpbmVJbmRlbnQ+MHx8cyE9PTM3KSk7KXtmb3IoYT0hMCxzPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pLHI9dC5wb3NpdGlvbjtzIT09MCYmIUlzKHMpOylzPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO2ZvcihuPXQuaW5wdXQuc2xpY2Uocix0LnBvc2l0aW9uKSxpPVtdLG4ubGVuZ3RoPDEmJlF0KHQsImRpcmVjdGl2ZSBuYW1lIG11c3Qgbm90IGJlIGxlc3MgdGhhbiBvbmUgY2hhcmFjdGVyIGluIGxlbmd0aCIpO3MhPT0wOyl7Zm9yKDtGZChzKTspcz10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTtpZihzPT09MzUpe2RvIHM9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7d2hpbGUocyE9PTAmJiFBYyhzKSk7YnJlYWt9aWYoQWMocykpYnJlYWs7Zm9yKHI9dC5wb3NpdGlvbjtzIT09MCYmIUlzKHMpOylzPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO2kucHVzaCh0LmlucHV0LnNsaWNlKHIsdC5wb3NpdGlvbikpfXMhPT0wJiZaOSh0KSxLaC5jYWxsKGVaLG4pP2VaW25dKHQsbixpKTpLNSh0LCd1bmtub3duIGRvY3VtZW50IGRpcmVjdGl2ZSAiJytuKyciJyl9aWYoRGkodCwhMCwtMSksdC5saW5lSW5kZW50PT09MCYmdC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pPT09NDUmJnQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKzEpPT09NDUmJnQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKzIpPT09NDU/KHQucG9zaXRpb24rPTMsRGkodCwhMCwtMSkpOmEmJlF0KHQsImRpcmVjdGl2ZXMgZW5kIG1hcmsgaXMgZXhwZWN0ZWQiKSxrbSh0LHQubGluZUluZGVudC0xLGo1LCExLCEwKSxEaSh0LCEwLC0xKSx0LmNoZWNrTGluZUJyZWFrcyYmVDhlLnRlc3QodC5pbnB1dC5zbGljZShlLHQucG9zaXRpb24pKSYmSzUodCwibm9uLUFTQ0lJIGxpbmUgYnJlYWtzIGFyZSBpbnRlcnByZXRlZCBhcyBjb250ZW50IiksdC5kb2N1bWVudHMucHVzaCh0LnJlc3VsdCksdC5wb3NpdGlvbj09PXQubGluZVN0YXJ0JiZKNSh0KSl7dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pPT09NDYmJih0LnBvc2l0aW9uKz0zLERpKHQsITAsLTEpKTtyZXR1cm59aWYodC5wb3NpdGlvbjx0Lmxlbmd0aC0xKVF0KHQsImVuZCBvZiB0aGUgc3RyZWFtIG9yIGEgZG9jdW1lbnQgc2VwYXJhdG9yIGlzIGV4cGVjdGVkIik7ZWxzZSByZXR1cm59ZnVuY3Rpb24gRVoodCxlKXt0PVN0cmluZyh0KSxlPWV8fHt9LHQubGVuZ3RoIT09MCYmKHQuY2hhckNvZGVBdCh0Lmxlbmd0aC0xKSE9PTEwJiZ0LmNoYXJDb2RlQXQodC5sZW5ndGgtMSkhPT0xMyYmKHQrPWAKYCksdC5jaGFyQ29kZUF0KDApPT09NjUyNzkmJih0PXQuc2xpY2UoMSkpKTt2YXIgcj1uZXcgXzhlKHQsZSksbj10LmluZGV4T2YoIlwwIik7Zm9yKG4hPT0tMSYmKHIucG9zaXRpb249bixRdChyLCJudWxsIGJ5dGUgaXMgbm90IGFsbG93ZWQgaW4gaW5wdXQiKSksci5pbnB1dCs9IlwwIjtyLmlucHV0LmNoYXJDb2RlQXQoci5wb3NpdGlvbik9PT0zMjspci5saW5lSW5kZW50Kz0xLHIucG9zaXRpb24rPTE7Zm9yKDtyLnBvc2l0aW9uPHIubGVuZ3RoLTE7KUY4ZShyKTtyZXR1cm4gci5kb2N1bWVudHN9ZnVuY3Rpb24gejhlKHQsZSxyKXtlIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QiJiZ0eXBlb2Ygcj4idSImJihyPWUsZT1udWxsKTt2YXIgbj1FWih0LHIpO2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXJldHVybiBuO2Zvcih2YXIgaT0wLGE9bi5sZW5ndGg7aTxhO2krPTEpZShuW2ldKX1mdW5jdGlvbiBHOGUodCxlKXt2YXIgcj1FWih0LGUpO2lmKHIubGVuZ3RoIT09MCl7aWYoci5sZW5ndGg9PT0xKXJldHVybiByWzBdO3Rocm93IG5ldyBNcygiZXhwZWN0ZWQgYSBzaW5nbGUgZG9jdW1lbnQgaW4gdGhlIHN0cmVhbSwgYnV0IGZvdW5kIG1vcmUiKX19ZnVuY3Rpb24gb19lKHQsZSl7dmFyIHIsbixpLGEscyxsLHU7aWYoZT09PW51bGwpcmV0dXJue307Zm9yKHI9e30sbj1PYmplY3Qua2V5cyhlKSxpPTAsYT1uLmxlbmd0aDtpPGE7aSs9MSlzPW5baV0sbD1TdHJpbmcoZVtzXSkscy5zbGljZSgwLDIpPT09IiEhIiYmKHM9InRhZzp5YW1sLm9yZywyMDAyOiIrcy5zbGljZSgyKSksdT10LmNvbXBpbGVkVHlwZU1hcC5mYWxsYmFja1tzXSx1JiZBWi5jYWxsKHUuc3R5bGVBbGlhc2VzLGwpJiYobD11LnN0eWxlQWxpYXNlc1tsXSkscltzXT1sO3JldHVybiByfWZ1bmN0aW9uIGxfZSh0KXt2YXIgZSxyLG47aWYoZT10LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLHQ8PTI1NSlyPSJ4IixuPTI7ZWxzZSBpZih0PD02NTUzNSlyPSJ1IixuPTQ7ZWxzZSBpZih0PD00Mjk0OTY3Mjk1KXI9IlUiLG49ODtlbHNlIHRocm93IG5ldyBNcygiY29kZSBwb2ludCB3aXRoaW4gYSBzdHJpbmcgbWF5IG5vdCBiZSBncmVhdGVyIHRoYW4gMHhGRkZGRkZGRiIpO3JldHVybiJcXCIrcitHaS5yZXBlYXQoIjAiLG4tZS5sZW5ndGgpK2V9ZnVuY3Rpb24gdV9lKHQpe3RoaXMuc2NoZW1hPXQuc2NoZW1hfHxnWix0aGlzLmluZGVudD1NYXRoLm1heCgxLHQuaW5kZW50fHwyKSx0aGlzLm5vQXJyYXlJbmRlbnQ9dC5ub0FycmF5SW5kZW50fHwhMSx0aGlzLnNraXBJbnZhbGlkPXQuc2tpcEludmFsaWR8fCExLHRoaXMuZmxvd0xldmVsPUdpLmlzTm90aGluZyh0LmZsb3dMZXZlbCk/LTE6dC5mbG93TGV2ZWwsdGhpcy5zdHlsZU1hcD1vX2UodGhpcy5zY2hlbWEsdC5zdHlsZXN8fG51bGwpLHRoaXMuc29ydEtleXM9dC5zb3J0S2V5c3x8ITEsdGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGh8fDgwLHRoaXMubm9SZWZzPXQubm9SZWZzfHwhMSx0aGlzLm5vQ29tcGF0TW9kZT10Lm5vQ29tcGF0TW9kZXx8ITEsdGhpcy5jb25kZW5zZUZsb3c9dC5jb25kZW5zZUZsb3d8fCExLHRoaXMucXVvdGluZ1R5cGU9dC5xdW90aW5nVHlwZT09PSciJz9CdjpjX2UsdGhpcy5mb3JjZVF1b3Rlcz10LmZvcmNlUXVvdGVzfHwhMSx0aGlzLnJlcGxhY2VyPXR5cGVvZiB0LnJlcGxhY2VyPT0iZnVuY3Rpb24iP3QucmVwbGFjZXI6bnVsbCx0aGlzLmltcGxpY2l0VHlwZXM9dGhpcy5zY2hlbWEuY29tcGlsZWRJbXBsaWNpdCx0aGlzLmV4cGxpY2l0VHlwZXM9dGhpcy5zY2hlbWEuY29tcGlsZWRFeHBsaWNpdCx0aGlzLnRhZz1udWxsLHRoaXMucmVzdWx0PSIiLHRoaXMuZHVwbGljYXRlcz1bXSx0aGlzLnVzZWREdXBsaWNhdGVzPW51bGx9ZnVuY3Rpb24gbloodCxlKXtmb3IodmFyIHI9R2kucmVwZWF0KCIgIixlKSxuPTAsaT0tMSxhPSIiLHMsbD10Lmxlbmd0aDtuPGw7KWk9dC5pbmRleE9mKGAKYCxuKSxpPT09LTE/KHM9dC5zbGljZShuKSxuPWwpOihzPXQuc2xpY2UobixpKzEpLG49aSsxKSxzLmxlbmd0aCYmcyE9PWAKYCYmKGErPXIpLGErPXM7cmV0dXJuIGF9ZnVuY3Rpb24gWDkodCxlKXtyZXR1cm5gCmArR2kucmVwZWF0KCIgIix0LmluZGVudCplKX1mdW5jdGlvbiBoX2UodCxlKXt2YXIgcixuLGk7Zm9yKHI9MCxuPXQuaW1wbGljaXRUeXBlcy5sZW5ndGg7cjxuO3IrPTEpaWYoaT10LmltcGxpY2l0VHlwZXNbcl0saS5yZXNvbHZlKGUpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFo1KHQpe3JldHVybiB0PT09VzhlfHx0PT09VThlfWZ1bmN0aW9uIEZ2KHQpe3JldHVybiAzMjw9dCYmdDw9MTI2fHwxNjE8PXQmJnQ8PTU1Mjk1JiZ0IT09ODIzMiYmdCE9PTgyMzN8fDU3MzQ0PD10JiZ0PD02NTUzMyYmdCE9PWVMfHw2NTUzNjw9dCYmdDw9MTExNDExMX1mdW5jdGlvbiBpWih0KXtyZXR1cm4gRnYodCkmJnQhPT1lTCYmdCE9PUg4ZSYmdCE9PVB2fWZ1bmN0aW9uIGFaKHQsZSxyKXt2YXIgbj1pWih0KSxpPW4mJiFaNSh0KTtyZXR1cm4ocj9uOm4mJnQhPT1fWiYmdCE9PUxaJiZ0IT09RFomJnQhPT1OWiYmdCE9PVJaKSYmdCE9PXE5JiYhKGU9PT1RNSYmIWkpfHxpWihlKSYmIVo1KGUpJiZ0PT09cTl8fGU9PT1RNSYmaX1mdW5jdGlvbiBmX2UodCl7cmV0dXJuIEZ2KHQpJiZ0IT09ZUwmJiFaNSh0KSYmdCE9PVo4ZSYmdCE9PXRfZSYmdCE9PVE1JiZ0IT09X1omJnQhPT1MWiYmdCE9PURaJiZ0IT09TlomJnQhPT1SWiYmdCE9PXE5JiZ0IT09ajhlJiZ0IT09UThlJiZ0IT09WThlJiZ0IT09aV9lJiZ0IT09SjhlJiZ0IT09ZV9lJiZ0IT09SzhlJiZ0IT09cThlJiZ0IT09WDhlJiZ0IT09cl9lJiZ0IT09bl9lfWZ1bmN0aW9uIGRfZSh0KXtyZXR1cm4hWjUodCkmJnQhPT1RNX1mdW5jdGlvbiBJdih0LGUpe3ZhciByPXQuY2hhckNvZGVBdChlKSxuO3JldHVybiByPj01NTI5NiYmcjw9NTYzMTkmJmUrMTx0Lmxlbmd0aCYmKG49dC5jaGFyQ29kZUF0KGUrMSksbj49NTYzMjAmJm48PTU3MzQzKT8oci01NTI5NikqMTAyNCtuLTU2MzIwKzY1NTM2OnJ9ZnVuY3Rpb24gTVoodCl7dmFyIGU9L15cbiogLztyZXR1cm4gZS50ZXN0KHQpfWZ1bmN0aW9uIHBfZSh0LGUscixuLGksYSxzLGwpe3ZhciB1LGg9MCxmPW51bGwsZD0hMSxwPSExLG09biE9PS0xLGc9LTEseT1mX2UoSXYodCwwKSkmJmRfZShJdih0LHQubGVuZ3RoLTEpKTtpZihlfHxzKWZvcih1PTA7dTx0Lmxlbmd0aDtoPj02NTUzNj91Kz0yOnUrKyl7aWYoaD1Jdih0LHUpLCFGdihoKSlyZXR1cm4gYm07eT15JiZhWihoLGYsbCksZj1ofWVsc2V7Zm9yKHU9MDt1PHQubGVuZ3RoO2g+PTY1NTM2P3UrPTI6dSsrKXtpZihoPUl2KHQsdSksaD09PVB2KWQ9ITAsbSYmKHA9cHx8dS1nLTE+biYmdFtnKzFdIT09IiAiLGc9dSk7ZWxzZSBpZighRnYoaCkpcmV0dXJuIGJtO3k9eSYmYVooaCxmLGwpLGY9aH1wPXB8fG0mJnUtZy0xPm4mJnRbZysxXSE9PSIgIn1yZXR1cm4hZCYmIXA/eSYmIXMmJiFpKHQpP0laOmE9PT1Cdj9ibTpqOTpyPjkmJk1aKHQpP2JtOnM/YT09PUJ2P2JtOmo5OnA/UFo6T1p9ZnVuY3Rpb24gbV9lKHQsZSxyLG4saSl7dC5kdW1wPWZ1bmN0aW9uKCl7aWYoZS5sZW5ndGg9PT0wKXJldHVybiB0LnF1b3RpbmdUeXBlPT09QnY/JyIiJzoiJyciO2lmKCF0Lm5vQ29tcGF0TW9kZSYmKGFfZS5pbmRleE9mKGUpIT09LTF8fHNfZS50ZXN0KGUpKSlyZXR1cm4gdC5xdW90aW5nVHlwZT09PUJ2PyciJytlKyciJzoiJyIrZSsiJyI7dmFyIGE9dC5pbmRlbnQqTWF0aC5tYXgoMSxyKSxzPXQubGluZVdpZHRoPT09LTE/LTE6TWF0aC5tYXgoTWF0aC5taW4odC5saW5lV2lkdGgsNDApLHQubGluZVdpZHRoLWEpLGw9bnx8dC5mbG93TGV2ZWw+LTEmJnI+PXQuZmxvd0xldmVsO2Z1bmN0aW9uIHUoaCl7cmV0dXJuIGhfZSh0LGgpfXN3aXRjaChvKHUsInRlc3RBbWJpZ3VpdHkiKSxwX2UoZSxsLHQuaW5kZW50LHMsdSx0LnF1b3RpbmdUeXBlLHQuZm9yY2VRdW90ZXMmJiFuLGkpKXtjYXNlIElaOnJldHVybiBlO2Nhc2Ugajk6cmV0dXJuIiciK2UucmVwbGFjZSgvJy9nLCInJyIpKyInIjtjYXNlIE9aOnJldHVybiJ8IitzWihlLHQuaW5kZW50KStvWihuWihlLGEpKTtjYXNlIFBaOnJldHVybiI+IitzWihlLHQuaW5kZW50KStvWihuWihnX2UoZSxzKSxhKSk7Y2FzZSBibTpyZXR1cm4nIicreV9lKGUpKyciJztkZWZhdWx0OnRocm93IG5ldyBNcygiaW1wb3NzaWJsZSBlcnJvcjogaW52YWxpZCBzY2FsYXIgc3R5bGUiKX19KCl9ZnVuY3Rpb24gc1oodCxlKXt2YXIgcj1NWih0KT9TdHJpbmcoZSk6IiIsbj10W3QubGVuZ3RoLTFdPT09YApgLGk9biYmKHRbdC5sZW5ndGgtMl09PT1gCmB8fHQ9PT1gCmApLGE9aT8iKyI6bj8iIjoiLSI7cmV0dXJuIHIrYStgCmB9ZnVuY3Rpb24gb1oodCl7cmV0dXJuIHRbdC5sZW5ndGgtMV09PT1gCmA/dC5zbGljZSgwLC0xKTp0fWZ1bmN0aW9uIGdfZSh0LGUpe2Zvcih2YXIgcj0vKFxuKykoW15cbl0qKS9nLG49ZnVuY3Rpb24oKXt2YXIgaD10LmluZGV4T2YoYApgKTtyZXR1cm4gaD1oIT09LTE/aDp0Lmxlbmd0aCxyLmxhc3RJbmRleD1oLGxaKHQuc2xpY2UoMCxoKSxlKX0oKSxpPXRbMF09PT1gCmB8fHRbMF09PT0iICIsYSxzO3M9ci5leGVjKHQpOyl7dmFyIGw9c1sxXSx1PXNbMl07YT11WzBdPT09IiAiLG4rPWwrKCFpJiYhYSYmdSE9PSIiP2AKYDoiIikrbFoodSxlKSxpPWF9cmV0dXJuIG59ZnVuY3Rpb24gbFoodCxlKXtpZih0PT09IiJ8fHRbMF09PT0iICIpcmV0dXJuIHQ7Zm9yKHZhciByPS8gW14gXS9nLG4saT0wLGEscz0wLGw9MCx1PSIiO249ci5leGVjKHQpOylsPW4uaW5kZXgsbC1pPmUmJihhPXM+aT9zOmwsdSs9YApgK3Quc2xpY2UoaSxhKSxpPWErMSkscz1sO3JldHVybiB1Kz1gCmAsdC5sZW5ndGgtaT5lJiZzPmk/dSs9dC5zbGljZShpLHMpK2AKYCt0LnNsaWNlKHMrMSk6dSs9dC5zbGljZShpKSx1LnNsaWNlKDEpfWZ1bmN0aW9uIHlfZSh0KXtmb3IodmFyIGU9IiIscj0wLG4saT0wO2k8dC5sZW5ndGg7cj49NjU1MzY/aSs9MjppKyspcj1Jdih0LGkpLG49RmFbcl0sIW4mJkZ2KHIpPyhlKz10W2ldLHI+PTY1NTM2JiYoZSs9dFtpKzFdKSk6ZSs9bnx8bF9lKHIpO3JldHVybiBlfWZ1bmN0aW9uIHZfZSh0LGUscil7dmFyIG49IiIsaT10LnRhZyxhLHMsbDtmb3IoYT0wLHM9ci5sZW5ndGg7YTxzO2ErPTEpbD1yW2FdLHQucmVwbGFjZXImJihsPXQucmVwbGFjZXIuY2FsbChyLFN0cmluZyhhKSxsKSksKFB1KHQsZSxsLCExLCExKXx8dHlwZW9mIGw+InUiJiZQdSh0LGUsbnVsbCwhMSwhMSkpJiYobiE9PSIiJiYobis9IiwiKyh0LmNvbmRlbnNlRmxvdz8iIjoiICIpKSxuKz10LmR1bXApO3QudGFnPWksdC5kdW1wPSJbIituKyJdIn1mdW5jdGlvbiBjWih0LGUscixuKXt2YXIgaT0iIixhPXQudGFnLHMsbCx1O2ZvcihzPTAsbD1yLmxlbmd0aDtzPGw7cys9MSl1PXJbc10sdC5yZXBsYWNlciYmKHU9dC5yZXBsYWNlci5jYWxsKHIsU3RyaW5nKHMpLHUpKSwoUHUodCxlKzEsdSwhMCwhMCwhMSwhMCl8fHR5cGVvZiB1PiJ1IiYmUHUodCxlKzEsbnVsbCwhMCwhMCwhMSwhMCkpJiYoKCFufHxpIT09IiIpJiYoaSs9WDkodCxlKSksdC5kdW1wJiZQdj09PXQuZHVtcC5jaGFyQ29kZUF0KDApP2krPSItIjppKz0iLSAiLGkrPXQuZHVtcCk7dC50YWc9YSx0LmR1bXA9aXx8IltdIn1mdW5jdGlvbiB4X2UodCxlLHIpe3ZhciBuPSIiLGk9dC50YWcsYT1PYmplY3Qua2V5cyhyKSxzLGwsdSxoLGY7Zm9yKHM9MCxsPWEubGVuZ3RoO3M8bDtzKz0xKWY9IiIsbiE9PSIiJiYoZis9IiwgIiksdC5jb25kZW5zZUZsb3cmJihmKz0nIicpLHU9YVtzXSxoPXJbdV0sdC5yZXBsYWNlciYmKGg9dC5yZXBsYWNlci5jYWxsKHIsdSxoKSksUHUodCxlLHUsITEsITEpJiYodC5kdW1wLmxlbmd0aD4xMDI0JiYoZis9Ij8gIiksZis9dC5kdW1wKyh0LmNvbmRlbnNlRmxvdz8nIic6IiIpKyI6IisodC5jb25kZW5zZUZsb3c/IiI6IiAiKSxQdSh0LGUsaCwhMSwhMSkmJihmKz10LmR1bXAsbis9ZikpO3QudGFnPWksdC5kdW1wPSJ7IituKyJ9In1mdW5jdGlvbiBiX2UodCxlLHIsbil7dmFyIGk9IiIsYT10LnRhZyxzPU9iamVjdC5rZXlzKHIpLGwsdSxoLGYsZCxwO2lmKHQuc29ydEtleXM9PT0hMClzLnNvcnQoKTtlbHNlIGlmKHR5cGVvZiB0LnNvcnRLZXlzPT0iZnVuY3Rpb24iKXMuc29ydCh0LnNvcnRLZXlzKTtlbHNlIGlmKHQuc29ydEtleXMpdGhyb3cgbmV3IE1zKCJzb3J0S2V5cyBtdXN0IGJlIGEgYm9vbGVhbiBvciBhIGZ1bmN0aW9uIik7Zm9yKGw9MCx1PXMubGVuZ3RoO2w8dTtsKz0xKXA9IiIsKCFufHxpIT09IiIpJiYocCs9WDkodCxlKSksaD1zW2xdLGY9cltoXSx0LnJlcGxhY2VyJiYoZj10LnJlcGxhY2VyLmNhbGwocixoLGYpKSxQdSh0LGUrMSxoLCEwLCEwLCEwKSYmKGQ9dC50YWchPT1udWxsJiZ0LnRhZyE9PSI/Inx8dC5kdW1wJiZ0LmR1bXAubGVuZ3RoPjEwMjQsZCYmKHQuZHVtcCYmUHY9PT10LmR1bXAuY2hhckNvZGVBdCgwKT9wKz0iPyI6cCs9Ij8gIikscCs9dC5kdW1wLGQmJihwKz1YOSh0LGUpKSxQdSh0LGUrMSxmLCEwLGQpJiYodC5kdW1wJiZQdj09PXQuZHVtcC5jaGFyQ29kZUF0KDApP3ArPSI6IjpwKz0iOiAiLHArPXQuZHVtcCxpKz1wKSk7dC50YWc9YSx0LmR1bXA9aXx8Int9In1mdW5jdGlvbiB1Wih0LGUscil7dmFyIG4saSxhLHMsbCx1O2ZvcihpPXI/dC5leHBsaWNpdFR5cGVzOnQuaW1wbGljaXRUeXBlcyxhPTAscz1pLmxlbmd0aDthPHM7YSs9MSlpZihsPWlbYV0sKGwuaW5zdGFuY2VPZnx8bC5wcmVkaWNhdGUpJiYoIWwuaW5zdGFuY2VPZnx8dHlwZW9mIGU9PSJvYmplY3QiJiZlIGluc3RhbmNlb2YgbC5pbnN0YW5jZU9mKSYmKCFsLnByZWRpY2F0ZXx8bC5wcmVkaWNhdGUoZSkpKXtpZihyP2wubXVsdGkmJmwucmVwcmVzZW50TmFtZT90LnRhZz1sLnJlcHJlc2VudE5hbWUoZSk6dC50YWc9bC50YWc6dC50YWc9Ij8iLGwucmVwcmVzZW50KXtpZih1PXQuc3R5bGVNYXBbbC50YWddfHxsLmRlZmF1bHRTdHlsZSxDWi5jYWxsKGwucmVwcmVzZW50KT09PSJbb2JqZWN0IEZ1bmN0aW9uXSIpbj1sLnJlcHJlc2VudChlLHUpO2Vsc2UgaWYoQVouY2FsbChsLnJlcHJlc2VudCx1KSluPWwucmVwcmVzZW50W3VdKGUsdSk7ZWxzZSB0aHJvdyBuZXcgTXMoIiE8IitsLnRhZysnPiB0YWcgcmVzb2x2ZXIgYWNjZXB0cyBub3QgIicrdSsnIiBzdHlsZScpO3QuZHVtcD1ufXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIFB1KHQsZSxyLG4saSxhLHMpe3QudGFnPW51bGwsdC5kdW1wPXIsdVoodCxyLCExKXx8dVoodCxyLCEwKTt2YXIgbD1DWi5jYWxsKHQuZHVtcCksdT1uLGg7biYmKG49dC5mbG93TGV2ZWw8MHx8dC5mbG93TGV2ZWw+ZSk7dmFyIGY9bD09PSJbb2JqZWN0IE9iamVjdF0ifHxsPT09IltvYmplY3QgQXJyYXldIixkLHA7aWYoZiYmKGQ9dC5kdXBsaWNhdGVzLmluZGV4T2YocikscD1kIT09LTEpLCh0LnRhZyE9PW51bGwmJnQudGFnIT09Ij8ifHxwfHx0LmluZGVudCE9PTImJmU+MCkmJihpPSExKSxwJiZ0LnVzZWREdXBsaWNhdGVzW2RdKXQuZHVtcD0iKnJlZl8iK2Q7ZWxzZXtpZihmJiZwJiYhdC51c2VkRHVwbGljYXRlc1tkXSYmKHQudXNlZER1cGxpY2F0ZXNbZF09ITApLGw9PT0iW29iamVjdCBPYmplY3RdIiluJiZPYmplY3Qua2V5cyh0LmR1bXApLmxlbmd0aCE9PTA/KGJfZSh0LGUsdC5kdW1wLGkpLHAmJih0LmR1bXA9IiZyZWZfIitkK3QuZHVtcCkpOih4X2UodCxlLHQuZHVtcCkscCYmKHQuZHVtcD0iJnJlZl8iK2QrIiAiK3QuZHVtcCkpO2Vsc2UgaWYobD09PSJbb2JqZWN0IEFycmF5XSIpbiYmdC5kdW1wLmxlbmd0aCE9PTA/KHQubm9BcnJheUluZGVudCYmIXMmJmU+MD9jWih0LGUtMSx0LmR1bXAsaSk6Y1oodCxlLHQuZHVtcCxpKSxwJiYodC5kdW1wPSImcmVmXyIrZCt0LmR1bXApKToodl9lKHQsZSx0LmR1bXApLHAmJih0LmR1bXA9IiZyZWZfIitkKyIgIit0LmR1bXApKTtlbHNlIGlmKGw9PT0iW29iamVjdCBTdHJpbmddIil0LnRhZyE9PSI/IiYmbV9lKHQsdC5kdW1wLGUsYSx1KTtlbHNle2lmKGw9PT0iW29iamVjdCBVbmRlZmluZWRdIilyZXR1cm4hMTtpZih0LnNraXBJbnZhbGlkKXJldHVybiExO3Rocm93IG5ldyBNcygidW5hY2NlcHRhYmxlIGtpbmQgb2YgYW4gb2JqZWN0IHRvIGR1bXAgIitsKX10LnRhZyE9PW51bGwmJnQudGFnIT09Ij8iJiYoaD1lbmNvZGVVUkkodC50YWdbMF09PT0iISI/dC50YWcuc2xpY2UoMSk6dC50YWcpLnJlcGxhY2UoLyEvZywiJTIxIiksdC50YWdbMF09PT0iISI/aD0iISIraDpoLnNsaWNlKDAsMTgpPT09InRhZzp5YW1sLm9yZywyMDAyOiI/aD0iISEiK2guc2xpY2UoMTgpOmg9IiE8IitoKyI+Iix0LmR1bXA9aCsiICIrdC5kdW1wKX1yZXR1cm4hMH1mdW5jdGlvbiB3X2UodCxlKXt2YXIgcj1bXSxuPVtdLGksYTtmb3IoSzkodCxyLG4pLGk9MCxhPW4ubGVuZ3RoO2k8YTtpKz0xKWUuZHVwbGljYXRlcy5wdXNoKHJbbltpXV0pO2UudXNlZER1cGxpY2F0ZXM9bmV3IEFycmF5KGEpfWZ1bmN0aW9uIEs5KHQsZSxyKXt2YXIgbixpLGE7aWYodCE9PW51bGwmJnR5cGVvZiB0PT0ib2JqZWN0IilpZihpPWUuaW5kZXhPZih0KSxpIT09LTEpci5pbmRleE9mKGkpPT09LTEmJnIucHVzaChpKTtlbHNlIGlmKGUucHVzaCh0KSxBcnJheS5pc0FycmF5KHQpKWZvcihpPTAsYT10Lmxlbmd0aDtpPGE7aSs9MSlLOSh0W2ldLGUscik7ZWxzZSBmb3Iobj1PYmplY3Qua2V5cyh0KSxpPTAsYT1uLmxlbmd0aDtpPGE7aSs9MSlLOSh0W25baV1dLGUscil9ZnVuY3Rpb24gVF9lKHQsZSl7ZT1lfHx7fTt2YXIgcj1uZXcgdV9lKGUpO3Iubm9SZWZzfHx3X2UodCxyKTt2YXIgbj10O3JldHVybiByLnJlcGxhY2VyJiYobj1yLnJlcGxhY2VyLmNhbGwoeyIiOm59LCIiLG4pKSxQdShyLDAsbiwhMCwhMCk/ci5kdW1wK2AKYDoiIn1mdW5jdGlvbiB0TCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiRnVuY3Rpb24geWFtbC4iK3QrIiBpcyByZW1vdmVkIGluIGpzLXlhbWwgNC4gVXNlIHlhbWwuIitlKyIgaW5zdGVhZCwgd2hpY2ggaXMgbm93IHNhZmUgYnkgZGVmYXVsdC4iKX19dmFyIGNBZSx1QWUsaEFlLGZBZSxkQWUscEFlLEdpLE1zLGdBZSx5QWUsdkFlLEJhLFRBZSxrQWUsRUFlLFNBZSxDQWUsREFlLElBZSwkQWUsVkFlLFdBZSxYQWUsZFosakFlLHBaLG1aLEpBZSx0OGUsUTksczhlLG84ZSxsOGUsaDhlLGY4ZSxtOGUsZzhlLHg4ZSxnWixLaCxYNSx5Wix2WixqNSxXOSxiOGUsUVEsdzhlLFQ4ZSxrOGUseFosYlosd1osVFosQmQsZVosJDhlLFY4ZSxTWixDWixBWixlTCxVOGUsUHYsSDhlLFc4ZSxZOGUscThlLHE5LFg4ZSxqOGUsSzhlLFE4ZSxfWixaOGUsUTUsSjhlLGVfZSx0X2Uscl9lLExaLERaLG5fZSxOWixpX2UsUlosRmEsYV9lLHNfZSxjX2UsQnYsSVosajksT1osUFosYm0sa19lLEVfZSxFbSxTbSxQRHQsQkR0LEZEdCx6RHQsR0R0LGV3PU0oKCk9PnsidXNlIHN0cmljdCI7byhoWiwiaXNOb3RoaW5nIik7byhpQWUsImlzT2JqZWN0Iik7byhhQWUsInRvQXJyYXkiKTtvKHNBZSwiZXh0ZW5kIik7byhvQWUsInJlcGVhdCIpO28obEFlLCJpc05lZ2F0aXZlWmVybyIpO2NBZT1oWix1QWU9aUFlLGhBZT1hQWUsZkFlPW9BZSxkQWU9bEFlLHBBZT1zQWUsR2k9e2lzTm90aGluZzpjQWUsaXNPYmplY3Q6dUFlLHRvQXJyYXk6aEFlLHJlcGVhdDpmQWUsaXNOZWdhdGl2ZVplcm86ZEFlLGV4dGVuZDpwQWV9O28oZlosImZvcm1hdEVycm9yIik7byhPdiwiWUFNTEV4Y2VwdGlvbiQxIik7T3YucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtPdi5wcm90b3R5cGUuY29uc3RydWN0b3I9T3Y7T3YucHJvdG90eXBlLnRvU3RyaW5nPW8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubmFtZSsiOiAiK2ZaKHRoaXMsZSl9LCJ0b1N0cmluZyIpO01zPU92O28oVTksImdldExpbmUiKTtvKEg5LCJwYWRTdGFydCIpO28obUFlLCJtYWtlU25pcHBldCIpO2dBZT1tQWUseUFlPVsia2luZCIsIm11bHRpIiwicmVzb2x2ZSIsImNvbnN0cnVjdCIsImluc3RhbmNlT2YiLCJwcmVkaWNhdGUiLCJyZXByZXNlbnQiLCJyZXByZXNlbnROYW1lIiwiZGVmYXVsdFN0eWxlIiwic3R5bGVBbGlhc2VzIl0sdkFlPVsic2NhbGFyIiwic2VxdWVuY2UiLCJtYXBwaW5nIl07byh4QWUsImNvbXBpbGVTdHlsZUFsaWFzZXMiKTtvKGJBZSwiVHlwZSQxIik7QmE9YkFlO28oS1EsImNvbXBpbGVMaXN0Iik7byh3QWUsImNvbXBpbGVNYXAiKTtvKFk5LCJTY2hlbWEkMSIpO1k5LnByb3RvdHlwZS5leHRlbmQ9byhmdW5jdGlvbihlKXt2YXIgcj1bXSxuPVtdO2lmKGUgaW5zdGFuY2VvZiBCYSluLnB1c2goZSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKW49bi5jb25jYXQoZSk7ZWxzZSBpZihlJiYoQXJyYXkuaXNBcnJheShlLmltcGxpY2l0KXx8QXJyYXkuaXNBcnJheShlLmV4cGxpY2l0KSkpZS5pbXBsaWNpdCYmKHI9ci5jb25jYXQoZS5pbXBsaWNpdCkpLGUuZXhwbGljaXQmJihuPW4uY29uY2F0KGUuZXhwbGljaXQpKTtlbHNlIHRocm93IG5ldyBNcygiU2NoZW1hLmV4dGVuZCBhcmd1bWVudCBzaG91bGQgYmUgYSBUeXBlLCBbIFR5cGUgXSwgb3IgYSBzY2hlbWEgZGVmaW5pdGlvbiAoeyBpbXBsaWNpdDogWy4uLl0sIGV4cGxpY2l0OiBbLi4uXSB9KSIpO3IuZm9yRWFjaChmdW5jdGlvbihhKXtpZighKGEgaW5zdGFuY2VvZiBCYSkpdGhyb3cgbmV3IE1zKCJTcGVjaWZpZWQgbGlzdCBvZiBZQU1MIHR5cGVzIChvciBhIHNpbmdsZSBUeXBlIG9iamVjdCkgY29udGFpbnMgYSBub24tVHlwZSBvYmplY3QuIik7aWYoYS5sb2FkS2luZCYmYS5sb2FkS2luZCE9PSJzY2FsYXIiKXRocm93IG5ldyBNcygiVGhlcmUgaXMgYSBub24tc2NhbGFyIHR5cGUgaW4gdGhlIGltcGxpY2l0IGxpc3Qgb2YgYSBzY2hlbWEuIEltcGxpY2l0IHJlc29sdmluZyBvZiBzdWNoIHR5cGVzIGlzIG5vdCBzdXBwb3J0ZWQuIik7aWYoYS5tdWx0aSl0aHJvdyBuZXcgTXMoIlRoZXJlIGlzIGEgbXVsdGkgdHlwZSBpbiB0aGUgaW1wbGljaXQgbGlzdCBvZiBhIHNjaGVtYS4gTXVsdGkgdGFncyBjYW4gb25seSBiZSBsaXN0ZWQgYXMgZXhwbGljaXQuIil9KSxuLmZvckVhY2goZnVuY3Rpb24oYSl7aWYoIShhIGluc3RhbmNlb2YgQmEpKXRocm93IG5ldyBNcygiU3BlY2lmaWVkIGxpc3Qgb2YgWUFNTCB0eXBlcyAob3IgYSBzaW5nbGUgVHlwZSBvYmplY3QpIGNvbnRhaW5zIGEgbm9uLVR5cGUgb2JqZWN0LiIpfSk7dmFyIGk9T2JqZWN0LmNyZWF0ZShZOS5wcm90b3R5cGUpO3JldHVybiBpLmltcGxpY2l0PSh0aGlzLmltcGxpY2l0fHxbXSkuY29uY2F0KHIpLGkuZXhwbGljaXQ9KHRoaXMuZXhwbGljaXR8fFtdKS5jb25jYXQobiksaS5jb21waWxlZEltcGxpY2l0PUtRKGksImltcGxpY2l0IiksaS5jb21waWxlZEV4cGxpY2l0PUtRKGksImV4cGxpY2l0IiksaS5jb21waWxlZFR5cGVNYXA9d0FlKGkuY29tcGlsZWRJbXBsaWNpdCxpLmNvbXBpbGVkRXhwbGljaXQpLGl9LCJleHRlbmQiKTtUQWU9WTksa0FlPW5ldyBCYSgidGFnOnlhbWwub3JnLDIwMDI6c3RyIix7a2luZDoic2NhbGFyIixjb25zdHJ1Y3Q6byhmdW5jdGlvbih0KXtyZXR1cm4gdCE9PW51bGw/dDoiIn0sImNvbnN0cnVjdCIpfSksRUFlPW5ldyBCYSgidGFnOnlhbWwub3JnLDIwMDI6c2VxIix7a2luZDoic2VxdWVuY2UiLGNvbnN0cnVjdDpvKGZ1bmN0aW9uKHQpe3JldHVybiB0IT09bnVsbD90OltdfSwiY29uc3RydWN0Iil9KSxTQWU9bmV3IEJhKCJ0YWc6eWFtbC5vcmcsMjAwMjptYXAiLHtraW5kOiJtYXBwaW5nIixjb25zdHJ1Y3Q6byhmdW5jdGlvbih0KXtyZXR1cm4gdCE9PW51bGw/dDp7fX0sImNvbnN0cnVjdCIpfSksQ0FlPW5ldyBUQWUoe2V4cGxpY2l0OltrQWUsRUFlLFNBZV19KTtvKEFBZSwicmVzb2x2ZVlhbWxOdWxsIik7byhfQWUsImNvbnN0cnVjdFlhbWxOdWxsIik7byhMQWUsImlzTnVsbCIpO0RBZT1uZXcgQmEoInRhZzp5YW1sLm9yZywyMDAyOm51bGwiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6QUFlLGNvbnN0cnVjdDpfQWUscHJlZGljYXRlOkxBZSxyZXByZXNlbnQ6e2Nhbm9uaWNhbDpvKGZ1bmN0aW9uKCl7cmV0dXJuIn4ifSwiY2Fub25pY2FsIiksbG93ZXJjYXNlOm8oZnVuY3Rpb24oKXtyZXR1cm4ibnVsbCJ9LCJsb3dlcmNhc2UiKSx1cHBlcmNhc2U6byhmdW5jdGlvbigpe3JldHVybiJOVUxMIn0sInVwcGVyY2FzZSIpLGNhbWVsY2FzZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIk51bGwifSwiY2FtZWxjYXNlIiksZW1wdHk6byhmdW5jdGlvbigpe3JldHVybiIifSwiZW1wdHkiKX0sZGVmYXVsdFN0eWxlOiJsb3dlcmNhc2UifSk7byhOQWUsInJlc29sdmVZYW1sQm9vbGVhbiIpO28oUkFlLCJjb25zdHJ1Y3RZYW1sQm9vbGVhbiIpO28oTUFlLCJpc0Jvb2xlYW4iKTtJQWU9bmV3IEJhKCJ0YWc6eWFtbC5vcmcsMjAwMjpib29sIix7a2luZDoic2NhbGFyIixyZXNvbHZlOk5BZSxjb25zdHJ1Y3Q6UkFlLHByZWRpY2F0ZTpNQWUscmVwcmVzZW50Ontsb3dlcmNhc2U6byhmdW5jdGlvbih0KXtyZXR1cm4gdD8idHJ1ZSI6ImZhbHNlIn0sImxvd2VyY2FzZSIpLHVwcGVyY2FzZTpvKGZ1bmN0aW9uKHQpe3JldHVybiB0PyJUUlVFIjoiRkFMU0UifSwidXBwZXJjYXNlIiksY2FtZWxjYXNlOm8oZnVuY3Rpb24odCl7cmV0dXJuIHQ/IlRydWUiOiJGYWxzZSJ9LCJjYW1lbGNhc2UiKX0sZGVmYXVsdFN0eWxlOiJsb3dlcmNhc2UifSk7byhPQWUsImlzSGV4Q29kZSIpO28oUEFlLCJpc09jdENvZGUiKTtvKEJBZSwiaXNEZWNDb2RlIik7byhGQWUsInJlc29sdmVZYW1sSW50ZWdlciIpO28oekFlLCJjb25zdHJ1Y3RZYW1sSW50ZWdlciIpO28oR0FlLCJpc0ludGVnZXIiKTskQWU9bmV3IEJhKCJ0YWc6eWFtbC5vcmcsMjAwMjppbnQiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6RkFlLGNvbnN0cnVjdDp6QWUscHJlZGljYXRlOkdBZSxyZXByZXNlbnQ6e2JpbmFyeTpvKGZ1bmN0aW9uKHQpe3JldHVybiB0Pj0wPyIwYiIrdC50b1N0cmluZygyKToiLTBiIit0LnRvU3RyaW5nKDIpLnNsaWNlKDEpfSwiYmluYXJ5Iiksb2N0YWw6byhmdW5jdGlvbih0KXtyZXR1cm4gdD49MD8iMG8iK3QudG9TdHJpbmcoOCk6Ii0wbyIrdC50b1N0cmluZyg4KS5zbGljZSgxKX0sIm9jdGFsIiksZGVjaW1hbDpvKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKDEwKX0sImRlY2ltYWwiKSxoZXhhZGVjaW1hbDpvKGZ1bmN0aW9uKHQpe3JldHVybiB0Pj0wPyIweCIrdC50b1N0cmluZygxNikudG9VcHBlckNhc2UoKToiLTB4Iit0LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLnNsaWNlKDEpfSwiaGV4YWRlY2ltYWwiKX0sZGVmYXVsdFN0eWxlOiJkZWNpbWFsIixzdHlsZUFsaWFzZXM6e2JpbmFyeTpbMiwiYmluIl0sb2N0YWw6WzgsIm9jdCJdLGRlY2ltYWw6WzEwLCJkZWMiXSxoZXhhZGVjaW1hbDpbMTYsImhleCJdfX0pLFZBZT1uZXcgUmVnRXhwKCJeKD86Wy0rXT8oPzpbMC05XVswLTlfXSopKD86XFwuWzAtOV9dKik/KD86W2VFXVstK10/WzAtOV0rKT98XFwuWzAtOV9dKyg/OltlRV1bLStdP1swLTldKyk/fFstK10/XFwuKD86aW5mfEluZnxJTkYpfFxcLig/Om5hbnxOYU58TkFOKSkkIik7byhVQWUsInJlc29sdmVZYW1sRmxvYXQiKTtvKEhBZSwiY29uc3RydWN0WWFtbEZsb2F0Iik7V0FlPS9eWy0rXT9bMC05XStlLztvKFlBZSwicmVwcmVzZW50WWFtbEZsb2F0Iik7byhxQWUsImlzRmxvYXQiKTtYQWU9bmV3IEJhKCJ0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpVQWUsY29uc3RydWN0OkhBZSxwcmVkaWNhdGU6cUFlLHJlcHJlc2VudDpZQWUsZGVmYXVsdFN0eWxlOiJsb3dlcmNhc2UifSksZFo9Q0FlLmV4dGVuZCh7aW1wbGljaXQ6W0RBZSxJQWUsJEFlLFhBZV19KSxqQWU9ZFoscFo9bmV3IFJlZ0V4cCgiXihbMC05XVswLTldWzAtOV1bMC05XSktKFswLTldWzAtOV0pLShbMC05XVswLTldKSQiKSxtWj1uZXcgUmVnRXhwKCJeKFswLTldWzAtOV1bMC05XVswLTldKS0oWzAtOV1bMC05XT8pLShbMC05XVswLTldPykoPzpbVHRdfFsgXFx0XSspKFswLTldWzAtOV0/KTooWzAtOV1bMC05XSk6KFswLTldWzAtOV0pKD86XFwuKFswLTldKikpPyg/OlsgXFx0XSooWnwoWy0rXSkoWzAtOV1bMC05XT8pKD86OihbMC05XVswLTldKSk/KSk/JCIpO28oS0FlLCJyZXNvbHZlWWFtbFRpbWVzdGFtcCIpO28oUUFlLCJjb25zdHJ1Y3RZYW1sVGltZXN0YW1wIik7byhaQWUsInJlcHJlc2VudFlhbWxUaW1lc3RhbXAiKTtKQWU9bmV3IEJhKCJ0YWc6eWFtbC5vcmcsMjAwMjp0aW1lc3RhbXAiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6S0FlLGNvbnN0cnVjdDpRQWUsaW5zdGFuY2VPZjpEYXRlLHJlcHJlc2VudDpaQWV9KTtvKGU4ZSwicmVzb2x2ZVlhbWxNZXJnZSIpO3Q4ZT1uZXcgQmEoInRhZzp5YW1sLm9yZywyMDAyOm1lcmdlIix7a2luZDoic2NhbGFyIixyZXNvbHZlOmU4ZX0pLFE5PWBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPQpccmA7byhyOGUsInJlc29sdmVZYW1sQmluYXJ5Iik7byhuOGUsImNvbnN0cnVjdFlhbWxCaW5hcnkiKTtvKGk4ZSwicmVwcmVzZW50WWFtbEJpbmFyeSIpO28oYThlLCJpc0JpbmFyeSIpO3M4ZT1uZXcgQmEoInRhZzp5YW1sLm9yZywyMDAyOmJpbmFyeSIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpyOGUsY29uc3RydWN0Om44ZSxwcmVkaWNhdGU6YThlLHJlcHJlc2VudDppOGV9KSxvOGU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxsOGU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztvKGM4ZSwicmVzb2x2ZVlhbWxPbWFwIik7byh1OGUsImNvbnN0cnVjdFlhbWxPbWFwIik7aDhlPW5ldyBCYSgidGFnOnlhbWwub3JnLDIwMDI6b21hcCIse2tpbmQ6InNlcXVlbmNlIixyZXNvbHZlOmM4ZSxjb25zdHJ1Y3Q6dThlfSksZjhlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7byhkOGUsInJlc29sdmVZYW1sUGFpcnMiKTtvKHA4ZSwiY29uc3RydWN0WWFtbFBhaXJzIik7bThlPW5ldyBCYSgidGFnOnlhbWwub3JnLDIwMDI6cGFpcnMiLHtraW5kOiJzZXF1ZW5jZSIscmVzb2x2ZTpkOGUsY29uc3RydWN0OnA4ZX0pLGc4ZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O28oeThlLCJyZXNvbHZlWWFtbFNldCIpO28odjhlLCJjb25zdHJ1Y3RZYW1sU2V0Iik7eDhlPW5ldyBCYSgidGFnOnlhbWwub3JnLDIwMDI6c2V0Iix7a2luZDoibWFwcGluZyIscmVzb2x2ZTp5OGUsY29uc3RydWN0OnY4ZX0pLGdaPWpBZS5leHRlbmQoe2ltcGxpY2l0OltKQWUsdDhlXSxleHBsaWNpdDpbczhlLGg4ZSxtOGUseDhlXX0pLEtoPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksWDU9MSx5Wj0yLHZaPTMsajU9NCxXOT0xLGI4ZT0yLFFRPTMsdzhlPS9bXHgwMC1ceDA4XHgwQlx4MENceDBFLVx4MUZceDdGLVx4ODRceDg2LVx4OUZcdUZGRkVcdUZGRkZdfFtcdUQ4MDAtXHVEQkZGXSg/IVtcdURDMDAtXHVERkZGXSl8KD86W15cdUQ4MDAtXHVEQkZGXXxeKVtcdURDMDAtXHVERkZGXS8sVDhlPS9bXHg4NVx1MjAyOFx1MjAyOV0vLGs4ZT0vWyxcW1xdXHtcfV0vLHhaPS9eKD86IXwhIXwhW2EtelwtXSshKSQvaSxiWj0vXig/OiF8W14sXFtcXVx7XH1dKSg/OiVbMC05YS1mXXsyfXxbMC05YS16XC0jO1wvXD86QCY9XCtcJCxfXC4hflwqJ1woXClcW1xdXSkqJC9pO28oWlEsIl9jbGFzcyIpO28oQWMsImlzX0VPTCIpO28oRmQsImlzX1dISVRFX1NQQUNFIik7byhJcywiaXNfV1NfT1JfRU9MIik7byh3bSwiaXNfRkxPV19JTkRJQ0FUT1IiKTtvKEU4ZSwiZnJvbUhleENvZGUiKTtvKFM4ZSwiZXNjYXBlZEhleExlbiIpO28oQzhlLCJmcm9tRGVjaW1hbENvZGUiKTtvKEpRLCJzaW1wbGVFc2NhcGVTZXF1ZW5jZSIpO28oQThlLCJjaGFyRnJvbUNvZGVwb2ludCIpO3daPW5ldyBBcnJheSgyNTYpLFRaPW5ldyBBcnJheSgyNTYpO2ZvcihCZD0wO0JkPDI1NjtCZCsrKXdaW0JkXT1KUShCZCk/MTowLFRaW0JkXT1KUShCZCk7byhfOGUsIlN0YXRlJDEiKTtvKGtaLCJnZW5lcmF0ZUVycm9yIik7byhRdCwidGhyb3dFcnJvciIpO28oSzUsInRocm93V2FybmluZyIpO2VaPXtZQU1MOm8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpLGEscztlLnZlcnNpb24hPT1udWxsJiZRdChlLCJkdXBsaWNhdGlvbiBvZiAlWUFNTCBkaXJlY3RpdmUiKSxuLmxlbmd0aCE9PTEmJlF0KGUsIllBTUwgZGlyZWN0aXZlIGFjY2VwdHMgZXhhY3RseSBvbmUgYXJndW1lbnQiKSxpPS9eKFswLTldKylcLihbMC05XSspJC8uZXhlYyhuWzBdKSxpPT09bnVsbCYmUXQoZSwiaWxsLWZvcm1lZCBhcmd1bWVudCBvZiB0aGUgWUFNTCBkaXJlY3RpdmUiKSxhPXBhcnNlSW50KGlbMV0sMTApLHM9cGFyc2VJbnQoaVsyXSwxMCksYSE9PTEmJlF0KGUsInVuYWNjZXB0YWJsZSBZQU1MIHZlcnNpb24gb2YgdGhlIGRvY3VtZW50IiksZS52ZXJzaW9uPW5bMF0sZS5jaGVja0xpbmVCcmVha3M9czwyLHMhPT0xJiZzIT09MiYmSzUoZSwidW5zdXBwb3J0ZWQgWUFNTCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudCIpfSwiaGFuZGxlWWFtbERpcmVjdGl2ZSIpLFRBRzpvKGZ1bmN0aW9uKGUscixuKXt2YXIgaSxhO24ubGVuZ3RoIT09MiYmUXQoZSwiVEFHIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgdHdvIGFyZ3VtZW50cyIpLGk9blswXSxhPW5bMV0seFoudGVzdChpKXx8UXQoZSwiaWxsLWZvcm1lZCB0YWcgaGFuZGxlIChmaXJzdCBhcmd1bWVudCkgb2YgdGhlIFRBRyBkaXJlY3RpdmUiKSxLaC5jYWxsKGUudGFnTWFwLGkpJiZRdChlLCd0aGVyZSBpcyBhIHByZXZpb3VzbHkgZGVjbGFyZWQgc3VmZml4IGZvciAiJytpKyciIHRhZyBoYW5kbGUnKSxiWi50ZXN0KGEpfHxRdChlLCJpbGwtZm9ybWVkIHRhZyBwcmVmaXggKHNlY29uZCBhcmd1bWVudCkgb2YgdGhlIFRBRyBkaXJlY3RpdmUiKTt0cnl7YT1kZWNvZGVVUklDb21wb25lbnQoYSl9Y2F0Y2h7UXQoZSwidGFnIHByZWZpeCBpcyBtYWxmb3JtZWQ6ICIrYSl9ZS50YWdNYXBbaV09YX0sImhhbmRsZVRhZ0RpcmVjdGl2ZSIpfTtvKGpoLCJjYXB0dXJlU2VnbWVudCIpO28odFosIm1lcmdlTWFwcGluZ3MiKTtvKFRtLCJzdG9yZU1hcHBpbmdQYWlyIik7byhaOSwicmVhZExpbmVCcmVhayIpO28oRGksInNraXBTZXBhcmF0aW9uU3BhY2UiKTtvKEo1LCJ0ZXN0RG9jdW1lbnRTZXBhcmF0b3IiKTtvKEo5LCJ3cml0ZUZvbGRlZExpbmVzIik7byhMOGUsInJlYWRQbGFpblNjYWxhciIpO28oRDhlLCJyZWFkU2luZ2xlUXVvdGVkU2NhbGFyIik7byhOOGUsInJlYWREb3VibGVRdW90ZWRTY2FsYXIiKTtvKFI4ZSwicmVhZEZsb3dDb2xsZWN0aW9uIik7byhNOGUsInJlYWRCbG9ja1NjYWxhciIpO28oclosInJlYWRCbG9ja1NlcXVlbmNlIik7byhJOGUsInJlYWRCbG9ja01hcHBpbmciKTtvKE84ZSwicmVhZFRhZ1Byb3BlcnR5Iik7byhQOGUsInJlYWRBbmNob3JQcm9wZXJ0eSIpO28oQjhlLCJyZWFkQWxpYXMiKTtvKGttLCJjb21wb3NlTm9kZSIpO28oRjhlLCJyZWFkRG9jdW1lbnQiKTtvKEVaLCJsb2FkRG9jdW1lbnRzIik7byh6OGUsImxvYWRBbGwkMSIpO28oRzhlLCJsb2FkJDEiKTskOGU9ejhlLFY4ZT1HOGUsU1o9e2xvYWRBbGw6JDhlLGxvYWQ6VjhlfSxDWj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLEFaPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksZUw9NjUyNzksVThlPTksUHY9MTAsSDhlPTEzLFc4ZT0zMixZOGU9MzMscThlPTM0LHE5PTM1LFg4ZT0zNyxqOGU9MzgsSzhlPTM5LFE4ZT00MixfWj00NCxaOGU9NDUsUTU9NTgsSjhlPTYxLGVfZT02Mix0X2U9NjMscl9lPTY0LExaPTkxLERaPTkzLG5fZT05NixOWj0xMjMsaV9lPTEyNCxSWj0xMjUsRmE9e307RmFbMF09IlxcMCI7RmFbN109IlxcYSI7RmFbOF09IlxcYiI7RmFbOV09IlxcdCI7RmFbMTBdPSJcXG4iO0ZhWzExXT0iXFx2IjtGYVsxMl09IlxcZiI7RmFbMTNdPSJcXHIiO0ZhWzI3XT0iXFxlIjtGYVszNF09J1xcIic7RmFbOTJdPSJcXFxcIjtGYVsxMzNdPSJcXE4iO0ZhWzE2MF09IlxcXyI7RmFbODIzMl09IlxcTCI7RmFbODIzM109IlxcUCI7YV9lPVsieSIsIlkiLCJ5ZXMiLCJZZXMiLCJZRVMiLCJvbiIsIk9uIiwiT04iLCJuIiwiTiIsIm5vIiwiTm8iLCJOTyIsIm9mZiIsIk9mZiIsIk9GRiJdLHNfZT0vXlstK10/WzAtOV9dKyg/OjpbMC05X10rKSsoPzpcLlswLTlfXSopPyQvO28ob19lLCJjb21waWxlU3R5bGVNYXAiKTtvKGxfZSwiZW5jb2RlSGV4Iik7Y19lPTEsQnY9MjtvKHVfZSwiU3RhdGUiKTtvKG5aLCJpbmRlbnRTdHJpbmciKTtvKFg5LCJnZW5lcmF0ZU5leHRMaW5lIik7byhoX2UsInRlc3RJbXBsaWNpdFJlc29sdmluZyIpO28oWjUsImlzV2hpdGVzcGFjZSIpO28oRnYsImlzUHJpbnRhYmxlIik7byhpWiwiaXNOc0NoYXJPcldoaXRlc3BhY2UiKTtvKGFaLCJpc1BsYWluU2FmZSIpO28oZl9lLCJpc1BsYWluU2FmZUZpcnN0Iik7byhkX2UsImlzUGxhaW5TYWZlTGFzdCIpO28oSXYsImNvZGVQb2ludEF0Iik7byhNWiwibmVlZEluZGVudEluZGljYXRvciIpO0laPTEsajk9MixPWj0zLFBaPTQsYm09NTtvKHBfZSwiY2hvb3NlU2NhbGFyU3R5bGUiKTtvKG1fZSwid3JpdGVTY2FsYXIiKTtvKHNaLCJibG9ja0hlYWRlciIpO28ob1osImRyb3BFbmRpbmdOZXdsaW5lIik7byhnX2UsImZvbGRTdHJpbmciKTtvKGxaLCJmb2xkTGluZSIpO28oeV9lLCJlc2NhcGVTdHJpbmciKTtvKHZfZSwid3JpdGVGbG93U2VxdWVuY2UiKTtvKGNaLCJ3cml0ZUJsb2NrU2VxdWVuY2UiKTtvKHhfZSwid3JpdGVGbG93TWFwcGluZyIpO28oYl9lLCJ3cml0ZUJsb2NrTWFwcGluZyIpO28odVosImRldGVjdFR5cGUiKTtvKFB1LCJ3cml0ZU5vZGUiKTtvKHdfZSwiZ2V0RHVwbGljYXRlUmVmZXJlbmNlcyIpO28oSzksImluc3BlY3ROb2RlIik7byhUX2UsImR1bXAkMSIpO2tfZT1UX2UsRV9lPXtkdW1wOmtfZX07byh0TCwicmVuYW1lZCIpO0VtPWRaLFNtPVNaLmxvYWQsUER0PVNaLmxvYWRBbGwsQkR0PUVfZS5kdW1wLEZEdD10TCgic2FmZUxvYWQiLCJsb2FkIiksekR0PXRMKCJzYWZlTG9hZEFsbCIsImxvYWRBbGwiKSxHRHQ9dEwoInNhZmVEdW1wIiwiZHVtcCIpfSk7ZnVuY3Rpb24gaUwodCl7bGV0IGU9W107Zm9yKGxldCByIG9mIHQpe2xldCBuPUd2LmdldChyKTtuPy5zdHlsZXMmJihlPVsuLi5lLC4uLm4uc3R5bGVzPz9bXV0ubWFwKGk9PmkudHJpbSgpKSksbj8udGV4dFN0eWxlcyYmKGU9Wy4uLmUsLi4ubi50ZXh0U3R5bGVzPz9bXV0ubWFwKGk9PmkudHJpbSgpKSl9cmV0dXJuIGV9dmFyIFNfZSxCWixDbSxRaCxPcyxHdixCdSxhTCxzTCx0dyxuTCxZbyxydyxudyxpdyxhdyxDX2UsQV9lLF9fZSxMX2UsRF9lLE5fZSxSX2Usb0wsTV9lLElfZSxPX2UsRlosUF9lLEJfZSxsTCx6WixHWixGX2UsJFosel9lLEdfZSwkX2UsVl9lLFVfZSx6dixWWixVWixIX2UsV19lLEhaLFlfZSxxX2UsWF9lLGpfZSxLX2UsV1osWVosUV9lLFpfZSxKX2UsZTllLHQ5ZSxyOWUsc3csY0w9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwcigpO2hyKCk7VnQoKTtmcigpO1Y5KCk7dXQoKTtldygpO0FpKCk7U19lPSJmbG93Y2hhcnQtIixCWj0wLENtPXBlKCksUWg9bmV3IE1hcCxPcz1bXSxHdj1uZXcgTWFwLEJ1PVtdLGFMPW5ldyBNYXAsc0w9bmV3IE1hcCx0dz0wLG5MPSEwLG53PVtdLGl3PW8odD0+cWUuc2FuaXRpemVUZXh0KHQsQ20pLCJzYW5pdGl6ZVRleHQiKSxhdz1vKGZ1bmN0aW9uKHQpe2ZvcihsZXQgZSBvZiBRaC52YWx1ZXMoKSlpZihlLmlkPT09dClyZXR1cm4gZS5kb21JZDtyZXR1cm4gdH0sImxvb2tVcERvbUlkIiksQ19lPW8oZnVuY3Rpb24odCxlLHIsbixpLGEscz17fSxsKXtpZighdHx8dC50cmltKCkubGVuZ3RoPT09MClyZXR1cm47bGV0IHUsaD1RaC5nZXQodCk7aWYoaD09PXZvaWQgMCYmKGg9e2lkOnQsbGFiZWxUeXBlOiJ0ZXh0Iixkb21JZDpTX2UrdCsiLSIrQlosc3R5bGVzOltdLGNsYXNzZXM6W119LFFoLnNldCh0LGgpKSxCWisrLGUhPT12b2lkIDA/KENtPXBlKCksdT1pdyhlLnRleHQudHJpbSgpKSxoLmxhYmVsVHlwZT1lLnR5cGUsdS5zdGFydHNXaXRoKCciJykmJnUuZW5kc1dpdGgoJyInKSYmKHU9dS5zdWJzdHJpbmcoMSx1Lmxlbmd0aC0xKSksaC50ZXh0PXUpOmgudGV4dD09PXZvaWQgMCYmKGgudGV4dD10KSxyIT09dm9pZCAwJiYoaC50eXBlPXIpLG4/LmZvckVhY2goZnVuY3Rpb24oZil7aC5zdHlsZXMucHVzaChmKX0pLGk/LmZvckVhY2goZnVuY3Rpb24oZil7aC5jbGFzc2VzLnB1c2goZil9KSxhIT09dm9pZCAwJiYoaC5kaXI9YSksaC5wcm9wcz09PXZvaWQgMD9oLnByb3BzPXM6cyE9PXZvaWQgMCYmT2JqZWN0LmFzc2lnbihoLnByb3BzLHMpLGwhPT12b2lkIDApe2xldCBmO2wuaW5jbHVkZXMoYApgKT9mPWwrYApgOmY9YHsKYCtsK2AKfWA7bGV0IGQ9U20oZix7c2NoZW1hOkVtfSk7aWYoZC5zaGFwZSl7aWYoZC5zaGFwZSE9PWQuc2hhcGUudG9Mb3dlckNhc2UoKXx8ZC5zaGFwZS5pbmNsdWRlcygiXyIpKXRocm93IG5ldyBFcnJvcihgTm8gc3VjaCBzaGFwZTogJHtkLnNoYXBlfS4gU2hhcGUgbmFtZXMgc2hvdWxkIGJlIGxvd2VyY2FzZS5gKTtpZighalEoZC5zaGFwZSkpdGhyb3cgbmV3IEVycm9yKGBObyBzdWNoIHNoYXBlOiAke2Quc2hhcGV9LmApO2gudHlwZT1kPy5zaGFwZX1kPy5sYWJlbCYmKGgudGV4dD1kPy5sYWJlbCksZD8uaWNvbiYmKGguaWNvbj1kPy5pY29uLCFkLmxhYmVsPy50cmltKCkmJmgudGV4dD09PXQmJihoLnRleHQ9IiIpKSxkPy5mb3JtJiYoaC5mb3JtPWQ/LmZvcm0pLGQ/LnBvcyYmKGgucG9zPWQ/LnBvcyksZD8uaW1nJiYoaC5pbWc9ZD8uaW1nLCFkLmxhYmVsPy50cmltKCkmJmgudGV4dD09PXQmJihoLnRleHQ9IiIpKSxkPy5jb25zdHJhaW50JiYoaC5jb25zdHJhaW50PWQuY29uc3RyYWludCksZC53JiYoaC5hc3NldFdpZHRoPU51bWJlcihkLncpKSxkLmgmJihoLmFzc2V0SGVpZ2h0PU51bWJlcihkLmgpKX19LCJhZGRWZXJ0ZXgiKSxBX2U9byhmdW5jdGlvbih0LGUscil7bGV0IGE9e3N0YXJ0OnQsZW5kOmUsdHlwZTp2b2lkIDAsdGV4dDoiIixsYWJlbFR5cGU6InRleHQifTtZLmluZm8oImFiYzc4IEdvdCBlZGdlLi4uIixhKTtsZXQgcz1yLnRleHQ7aWYocyE9PXZvaWQgMCYmKGEudGV4dD1pdyhzLnRleHQudHJpbSgpKSxhLnRleHQuc3RhcnRzV2l0aCgnIicpJiZhLnRleHQuZW5kc1dpdGgoJyInKSYmKGEudGV4dD1hLnRleHQuc3Vic3RyaW5nKDEsYS50ZXh0Lmxlbmd0aC0xKSksYS5sYWJlbFR5cGU9cy50eXBlKSxyIT09dm9pZCAwJiYoYS50eXBlPXIudHlwZSxhLnN0cm9rZT1yLnN0cm9rZSxhLmxlbmd0aD1yLmxlbmd0aD4xMD8xMDpyLmxlbmd0aCksT3MubGVuZ3RoPChDbS5tYXhFZGdlcz8/NTAwKSlZLmluZm8oIlB1c2hpbmcgZWRnZS4uLiIpLE9zLnB1c2goYSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEVkZ2UgbGltaXQgZXhjZWVkZWQuICR7T3MubGVuZ3RofSBlZGdlcyBmb3VuZCwgYnV0IHRoZSBsaW1pdCBpcyAke0NtLm1heEVkZ2VzfS4KCkluaXRpYWxpemUgbWVybWFpZCB3aXRoIG1heEVkZ2VzIHNldCB0byBhIGhpZ2hlciBudW1iZXIgdG8gYWxsb3cgbW9yZSBlZGdlcy4KWW91IGNhbm5vdCBzZXQgdGhpcyBjb25maWcgdmlhIGNvbmZpZ3VyYXRpb24gaW5zaWRlIHRoZSBkaWFncmFtIGFzIGl0IGlzIGEgc2VjdXJlIGNvbmZpZy4KWW91IGhhdmUgdG8gY2FsbCBtZXJtYWlkLmluaXRpYWxpemUuYCl9LCJhZGRTaW5nbGVMaW5rIiksX19lPW8oZnVuY3Rpb24odCxlLHIpe1kuaW5mbygiYWRkTGluayIsdCxlLHIpO2ZvcihsZXQgbiBvZiB0KWZvcihsZXQgaSBvZiBlKUFfZShuLGkscil9LCJhZGRMaW5rIiksTF9lPW8oZnVuY3Rpb24odCxlKXt0LmZvckVhY2goZnVuY3Rpb24ocil7cj09PSJkZWZhdWx0Ij9Pcy5kZWZhdWx0SW50ZXJwb2xhdGU9ZTpPc1tyXS5pbnRlcnBvbGF0ZT1lfSl9LCJ1cGRhdGVMaW5rSW50ZXJwb2xhdGUiKSxEX2U9byhmdW5jdGlvbih0LGUpe3QuZm9yRWFjaChmdW5jdGlvbihyKXtpZih0eXBlb2Ygcj09Im51bWJlciImJnI+PU9zLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBpbmRleCAke3J9IGZvciBsaW5rU3R5bGUgaXMgb3V0IG9mIGJvdW5kcy4gVmFsaWQgaW5kaWNlcyBmb3IgbGlua1N0eWxlIGFyZSBiZXR3ZWVuIDAgYW5kICR7T3MubGVuZ3RoLTF9LiAoSGVscDogRW5zdXJlIHRoYXQgdGhlIGluZGV4IGlzIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgZXhpc3RpbmcgZWRnZXMuKWApO3I9PT0iZGVmYXVsdCI/T3MuZGVmYXVsdFN0eWxlPWU6KE9zW3JdLnN0eWxlPWUsKE9zW3JdPy5zdHlsZT8ubGVuZ3RoPz8wKT4wJiYhT3Nbcl0/LnN0eWxlPy5zb21lKG49Pm4/LnN0YXJ0c1dpdGgoImZpbGwiKSkmJk9zW3JdPy5zdHlsZT8ucHVzaCgiZmlsbDpub25lIikpfSl9LCJ1cGRhdGVMaW5rIiksTl9lPW8oZnVuY3Rpb24odCxlKXt0LnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihyKXtsZXQgbj1Hdi5nZXQocik7bj09PXZvaWQgMCYmKG49e2lkOnIsc3R5bGVzOltdLHRleHRTdHlsZXM6W119LEd2LnNldChyLG4pKSxlPy5mb3JFYWNoKGZ1bmN0aW9uKGkpe2lmKC9jb2xvci8uZXhlYyhpKSl7bGV0IGE9aS5yZXBsYWNlKCJmaWxsIiwiYmdGaWxsIik7bi50ZXh0U3R5bGVzLnB1c2goYSl9bi5zdHlsZXMucHVzaChpKX0pfSl9LCJhZGRDbGFzcyIpLFJfZT1vKGZ1bmN0aW9uKHQpe1lvPXQsLy4qPC8uZXhlYyhZbykmJihZbz0iUkwiKSwvLipcXi8uZXhlYyhZbykmJihZbz0iQlQiKSwvLio+Ly5leGVjKFlvKSYmKFlvPSJMUiIpLC8uKnYvLmV4ZWMoWW8pJiYoWW89IlRCIiksWW89PT0iVEQiJiYoWW89IlRCIil9LCJzZXREaXJlY3Rpb24iKSxvTD1vKGZ1bmN0aW9uKHQsZSl7Zm9yKGxldCByIG9mIHQuc3BsaXQoIiwiKSl7bGV0IG49UWguZ2V0KHIpO24mJm4uY2xhc3Nlcy5wdXNoKGUpO2xldCBpPWFMLmdldChyKTtpJiZpLmNsYXNzZXMucHVzaChlKX19LCJzZXRDbGFzcyIpLE1fZT1vKGZ1bmN0aW9uKHQsZSl7aWYoZSE9PXZvaWQgMCl7ZT1pdyhlKTtmb3IobGV0IHIgb2YgdC5zcGxpdCgiLCIpKXNMLnNldChydz09PSJnZW4tMSI/YXcocik6cixlKX19LCJzZXRUb29sdGlwIiksSV9lPW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPWF3KHQpO2lmKHBlKCkuc2VjdXJpdHlMZXZlbCE9PSJsb29zZSJ8fGU9PT12b2lkIDApcmV0dXJuO2xldCBpPVtdO2lmKHR5cGVvZiByPT0ic3RyaW5nIil7aT1yLnNwbGl0KC8sKD89KD86KD86W14iXSoiKXsyfSkqW14iXSokKS8pO2ZvcihsZXQgcz0wO3M8aS5sZW5ndGg7cysrKXtsZXQgbD1pW3NdLnRyaW0oKTtsLnN0YXJ0c1dpdGgoJyInKSYmbC5lbmRzV2l0aCgnIicpJiYobD1sLnN1YnN0cigxLGwubGVuZ3RoLTIpKSxpW3NdPWx9fWkubGVuZ3RoPT09MCYmaS5wdXNoKHQpO2xldCBhPVFoLmdldCh0KTthJiYoYS5oYXZlQ2FsbGJhY2s9ITAsbncucHVzaChmdW5jdGlvbigpe2xldCBzPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD0iJHtufSJdYCk7cyE9PW51bGwmJnMuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7VXQucnVuRnVuYyhlLC4uLmkpfSwhMSl9KSl9LCJzZXRDbGlja0Z1biIpLE9fZT1vKGZ1bmN0aW9uKHQsZSxyKXt0LnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihuKXtsZXQgaT1RaC5nZXQobik7aSE9PXZvaWQgMCYmKGkubGluaz1VdC5mb3JtYXRVcmwoZSxDbSksaS5saW5rVGFyZ2V0PXIpfSksb0wodCwiY2xpY2thYmxlIil9LCJzZXRMaW5rIiksRlo9byhmdW5jdGlvbih0KXtyZXR1cm4gc0wuZ2V0KHQpfSwiZ2V0VG9vbHRpcCIpLFBfZT1vKGZ1bmN0aW9uKHQsZSxyKXt0LnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihuKXtJX2UobixlLHIpfSksb0wodCwiY2xpY2thYmxlIil9LCJzZXRDbGlja0V2ZW50IiksQl9lPW8oZnVuY3Rpb24odCl7bncuZm9yRWFjaChmdW5jdGlvbihlKXtlKHQpfSl9LCJiaW5kRnVuY3Rpb25zIiksbEw9byhmdW5jdGlvbigpe3JldHVybiBZby50cmltKCl9LCJnZXREaXJlY3Rpb24iKSx6Wj1vKGZ1bmN0aW9uKCl7cmV0dXJuIFFofSwiZ2V0VmVydGljZXMiKSxHWj1vKGZ1bmN0aW9uKCl7cmV0dXJuIE9zfSwiZ2V0RWRnZXMiKSxGX2U9byhmdW5jdGlvbigpe3JldHVybiBHdn0sImdldENsYXNzZXMiKSwkWj1vKGZ1bmN0aW9uKHQpe2xldCBlPVZlKCIubWVybWFpZFRvb2x0aXAiKTsoZS5fZ3JvdXBzfHxlKVswXVswXT09PW51bGwmJihlPVZlKCJib2R5IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsIm1lcm1haWRUb29sdGlwIikuc3R5bGUoIm9wYWNpdHkiLDApKSxWZSh0KS5zZWxlY3QoInN2ZyIpLnNlbGVjdEFsbCgiZy5ub2RlIikub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtsZXQgaT1WZSh0aGlzKTtpZihpLmF0dHIoInRpdGxlIik9PT1udWxsKXJldHVybjtsZXQgcz10aGlzPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlLnRyYW5zaXRpb24oKS5kdXJhdGlvbigyMDApLnN0eWxlKCJvcGFjaXR5IiwiLjkiKSxlLnRleHQoaS5hdHRyKCJ0aXRsZSIpKS5zdHlsZSgibGVmdCIsd2luZG93LnNjcm9sbFgrcy5sZWZ0KyhzLnJpZ2h0LXMubGVmdCkvMisicHgiKS5zdHlsZSgidG9wIix3aW5kb3cuc2Nyb2xsWStzLmJvdHRvbSsicHgiKSxlLmh0bWwoZS5odG1sKCkucmVwbGFjZSgvJmx0O2JyXC8mZ3Q7L2csIjxici8+IikpLGkuY2xhc3NlZCgiaG92ZXIiLCEwKX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXtlLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApLnN0eWxlKCJvcGFjaXR5IiwwKSxWZSh0aGlzKS5jbGFzc2VkKCJob3ZlciIsITEpfSl9LCJzZXR1cFRvb2xUaXBzIik7bncucHVzaCgkWik7el9lPW8oZnVuY3Rpb24odD0iZ2VuLTEiKXtRaD1uZXcgTWFwLEd2PW5ldyBNYXAsT3M9W10sbnc9WyRaXSxCdT1bXSxhTD1uZXcgTWFwLHR3PTAsc0w9bmV3IE1hcCxuTD0hMCxydz10LENtPXBlKCksTHIoKX0sImNsZWFyIiksR19lPW8odD0+e3J3PXR8fCJnZW4tMiJ9LCJzZXRHZW4iKSwkX2U9byhmdW5jdGlvbigpe3JldHVybiJmaWxsOiNmZmE7c3Ryb2tlOiAjZjY2OyBzdHJva2Utd2lkdGg6IDNweDsgc3Ryb2tlLWRhc2hhcnJheTogNSwgNTtmaWxsOiNmZmE7c3Ryb2tlOiAjNjY2OyJ9LCJkZWZhdWx0U3R5bGUiKSxWX2U9byhmdW5jdGlvbih0LGUscil7bGV0IG49dC50ZXh0LnRyaW0oKSxpPXIudGV4dDt0PT09ciYmL1xzLy5leGVjKHIudGV4dCkmJihuPXZvaWQgMCk7ZnVuY3Rpb24gYShoKXtsZXQgZj17Ym9vbGVhbjp7fSxudW1iZXI6e30sc3RyaW5nOnt9fSxkPVtdLHA7cmV0dXJue25vZGVMaXN0OmguZmlsdGVyKGZ1bmN0aW9uKGcpe2xldCB5PXR5cGVvZiBnO3JldHVybiBnLnN0bXQmJmcuc3RtdD09PSJkaXIiPyhwPWcudmFsdWUsITEpOmcudHJpbSgpPT09IiI/ITE6eSBpbiBmP2ZbeV0uaGFzT3duUHJvcGVydHkoZyk/ITE6Zlt5XVtnXT0hMDpkLmluY2x1ZGVzKGcpPyExOmQucHVzaChnKX0pLGRpcjpwfX1vKGEsInVuaXEiKTtsZXR7bm9kZUxpc3Q6cyxkaXI6bH09YShlLmZsYXQoKSk7aWYocnc9PT0iZ2VuLTEiKWZvcihsZXQgaD0wO2g8cy5sZW5ndGg7aCsrKXNbaF09YXcoc1toXSk7bj1uPz8ic3ViR3JhcGgiK3R3LGk9aXx8IiIsaT1pdyhpKSx0dz10dysxO2xldCB1PXtpZDpuLG5vZGVzOnMsdGl0bGU6aS50cmltKCksY2xhc3NlczpbXSxkaXI6bCxsYWJlbFR5cGU6ci50eXBlfTtyZXR1cm4gWS5pbmZvKCJBZGRpbmciLHUuaWQsdS5ub2Rlcyx1LmRpciksdS5ub2Rlcz1ZWih1LEJ1KS5ub2RlcyxCdS5wdXNoKHUpLGFMLnNldChuLHUpLG59LCJhZGRTdWJHcmFwaCIpLFVfZT1vKGZ1bmN0aW9uKHQpe2ZvcihsZXRbZSxyXW9mIEJ1LmVudHJpZXMoKSlpZihyLmlkPT09dClyZXR1cm4gZTtyZXR1cm4tMX0sImdldFBvc0ZvcklkIiksenY9LTEsVlo9W10sVVo9byhmdW5jdGlvbih0LGUpe2xldCByPUJ1W2VdLm5vZGVzO2lmKHp2PXp2KzEsenY+MmUzKXJldHVybntyZXN1bHQ6ITEsY291bnQ6MH07aWYoVlpbenZdPWUsQnVbZV0uaWQ9PT10KXJldHVybntyZXN1bHQ6ITAsY291bnQ6MH07bGV0IG49MCxpPTE7Zm9yKDtuPHIubGVuZ3RoOyl7bGV0IGE9VV9lKHJbbl0pO2lmKGE+PTApe2xldCBzPVVaKHQsYSk7aWYocy5yZXN1bHQpcmV0dXJue3Jlc3VsdDohMCxjb3VudDppK3MuY291bnR9O2k9aStzLmNvdW50fW49bisxfXJldHVybntyZXN1bHQ6ITEsY291bnQ6aX19LCJpbmRleE5vZGVzMiIpLEhfZT1vKGZ1bmN0aW9uKHQpe3JldHVybiBWWlt0XX0sImdldERlcHRoRmlyc3RQb3MiKSxXX2U9byhmdW5jdGlvbigpe3p2PS0xLEJ1Lmxlbmd0aD4wJiZVWigibm9uZSIsQnUubGVuZ3RoLTEpfSwiaW5kZXhOb2RlcyIpLEhaPW8oZnVuY3Rpb24oKXtyZXR1cm4gQnV9LCJnZXRTdWJHcmFwaHMiKSxZX2U9bygoKT0+bkw/KG5MPSExLCEwKTohMSwiZmlyc3RHcmFwaCIpLHFfZT1vKHQ9PntsZXQgZT10LnRyaW0oKSxyPSJhcnJvd19vcGVuIjtzd2l0Y2goZVswXSl7Y2FzZSI8IjpyPSJhcnJvd19wb2ludCIsZT1lLnNsaWNlKDEpO2JyZWFrO2Nhc2UieCI6cj0iYXJyb3dfY3Jvc3MiLGU9ZS5zbGljZSgxKTticmVhaztjYXNlIm8iOnI9ImFycm93X2NpcmNsZSIsZT1lLnNsaWNlKDEpO2JyZWFrfWxldCBuPSJub3JtYWwiO3JldHVybiBlLmluY2x1ZGVzKCI9IikmJihuPSJ0aGljayIpLGUuaW5jbHVkZXMoIi4iKSYmKG49ImRvdHRlZCIpLHt0eXBlOnIsc3Ryb2tlOm59fSwiZGVzdHJ1Y3RTdGFydExpbmsiKSxYX2U9bygodCxlKT0+e2xldCByPWUubGVuZ3RoLG49MDtmb3IobGV0IGk9MDtpPHI7KytpKWVbaV09PT10JiYrK247cmV0dXJuIG59LCJjb3VudENoYXIiKSxqX2U9byh0PT57bGV0IGU9dC50cmltKCkscj1lLnNsaWNlKDAsLTEpLG49ImFycm93X29wZW4iO3N3aXRjaChlLnNsaWNlKC0xKSl7Y2FzZSJ4IjpuPSJhcnJvd19jcm9zcyIsZS5zdGFydHNXaXRoKCJ4IikmJihuPSJkb3VibGVfIituLHI9ci5zbGljZSgxKSk7YnJlYWs7Y2FzZSI+IjpuPSJhcnJvd19wb2ludCIsZS5zdGFydHNXaXRoKCI8IikmJihuPSJkb3VibGVfIituLHI9ci5zbGljZSgxKSk7YnJlYWs7Y2FzZSJvIjpuPSJhcnJvd19jaXJjbGUiLGUuc3RhcnRzV2l0aCgibyIpJiYobj0iZG91YmxlXyIrbixyPXIuc2xpY2UoMSkpO2JyZWFrfWxldCBpPSJub3JtYWwiLGE9ci5sZW5ndGgtMTtyLnN0YXJ0c1dpdGgoIj0iKSYmKGk9InRoaWNrIiksci5zdGFydHNXaXRoKCJ+IikmJihpPSJpbnZpc2libGUiKTtsZXQgcz1YX2UoIi4iLHIpO3JldHVybiBzJiYoaT0iZG90dGVkIixhPXMpLHt0eXBlOm4sc3Ryb2tlOmksbGVuZ3RoOmF9fSwiZGVzdHJ1Y3RFbmRMaW5rIiksS19lPW8oKHQsZSk9PntsZXQgcj1qX2UodCksbjtpZihlKXtpZihuPXFfZShlKSxuLnN0cm9rZSE9PXIuc3Ryb2tlKXJldHVybnt0eXBlOiJJTlZBTElEIixzdHJva2U6IklOVkFMSUQifTtpZihuLnR5cGU9PT0iYXJyb3dfb3BlbiIpbi50eXBlPXIudHlwZTtlbHNle2lmKG4udHlwZSE9PXIudHlwZSlyZXR1cm57dHlwZToiSU5WQUxJRCIsc3Ryb2tlOiJJTlZBTElEIn07bi50eXBlPSJkb3VibGVfIituLnR5cGV9cmV0dXJuIG4udHlwZT09PSJkb3VibGVfYXJyb3ciJiYobi50eXBlPSJkb3VibGVfYXJyb3dfcG9pbnQiKSxuLmxlbmd0aD1yLmxlbmd0aCxufXJldHVybiByfSwiZGVzdHJ1Y3RMaW5rIiksV1o9bygodCxlKT0+e2ZvcihsZXQgciBvZiB0KWlmKHIubm9kZXMuaW5jbHVkZXMoZSkpcmV0dXJuITA7cmV0dXJuITF9LCJleGlzdHMiKSxZWj1vKCh0LGUpPT57bGV0IHI9W107cmV0dXJuIHQubm9kZXMuZm9yRWFjaCgobixpKT0+e1daKGUsbil8fHIucHVzaCh0Lm5vZGVzW2ldKX0pLHtub2RlczpyfX0sIm1ha2VVbmlxIiksUV9lPXtmaXJzdEdyYXBoOllfZX0sWl9lPW8odD0+e2lmKHQuaW1nKXJldHVybiJpbWFnZVNxdWFyZSI7aWYodC5pY29uKXJldHVybiB0LmZvcm09PT0iY2lyY2xlIj8iaWNvbkNpcmNsZSI6dC5mb3JtPT09InNxdWFyZSI/Imljb25TcXVhcmUiOnQuZm9ybT09PSJyb3VuZGVkIj8iaWNvblJvdW5kZWQiOiJpY29uIjtzd2l0Y2godC50eXBlKXtjYXNlInNxdWFyZSI6Y2FzZSB2b2lkIDA6cmV0dXJuInNxdWFyZVJlY3QiO2Nhc2Uicm91bmQiOnJldHVybiJyb3VuZGVkUmVjdCI7Y2FzZSJlbGxpcHNlIjpyZXR1cm4iZWxsaXBzZSI7ZGVmYXVsdDpyZXR1cm4gdC50eXBlfX0sImdldFR5cGVGcm9tVmVydGV4IiksSl9lPW8oKHQsZSk9PnQuZmluZChyPT5yLmlkPT09ZSksImZpbmROb2RlIiksZTllPW8odD0+e2xldCBlPSJub25lIixyPSJhcnJvd19wb2ludCI7c3dpdGNoKHQpe2Nhc2UiYXJyb3dfcG9pbnQiOmNhc2UiYXJyb3dfY2lyY2xlIjpjYXNlImFycm93X2Nyb3NzIjpyPXQ7YnJlYWs7Y2FzZSJkb3VibGVfYXJyb3dfcG9pbnQiOmNhc2UiZG91YmxlX2Fycm93X2NpcmNsZSI6Y2FzZSJkb3VibGVfYXJyb3dfY3Jvc3MiOmU9dC5yZXBsYWNlKCJkb3VibGVfIiwiIikscj1lO2JyZWFrfXJldHVybnthcnJvd1R5cGVTdGFydDplLGFycm93VHlwZUVuZDpyfX0sImRlc3RydWN0RWRnZVR5cGUiKSx0OWU9bygodCxlLHIsbixpLGEpPT57bGV0IHM9ci5nZXQodC5pZCksbD1uLmdldCh0LmlkKT8/ITEsdT1KX2UoZSx0LmlkKTtpZih1KXUuY3NzU3R5bGVzPXQuc3R5bGVzLHUuY3NzQ29tcGlsZWRTdHlsZXM9aUwodC5jbGFzc2VzKSx1LmNzc0NsYXNzZXM9dC5jbGFzc2VzLmpvaW4oIiAiKTtlbHNle2xldCBoPXtpZDp0LmlkLGxhYmVsOnQudGV4dCxsYWJlbFN0eWxlOiIiLHBhcmVudElkOnMscGFkZGluZzppLmZsb3djaGFydD8ucGFkZGluZ3x8OCxjc3NTdHlsZXM6dC5zdHlsZXMsY3NzQ29tcGlsZWRTdHlsZXM6aUwoWyJkZWZhdWx0Iiwibm9kZSIsLi4udC5jbGFzc2VzXSksY3NzQ2xhc3NlczoiZGVmYXVsdCAiK3QuY2xhc3Nlcy5qb2luKCIgIiksZGlyOnQuZGlyLGRvbUlkOnQuZG9tSWQsbG9vazphLGxpbms6dC5saW5rLGxpbmtUYXJnZXQ6dC5saW5rVGFyZ2V0LHRvb2x0aXA6RloodC5pZCksaWNvbjp0Lmljb24scG9zOnQucG9zLGltZzp0LmltZyxhc3NldFdpZHRoOnQuYXNzZXRXaWR0aCxhc3NldEhlaWdodDp0LmFzc2V0SGVpZ2h0LGNvbnN0cmFpbnQ6dC5jb25zdHJhaW50fTtsP2UucHVzaCh7Li4uaCxpc0dyb3VwOiEwLHNoYXBlOiJyZWN0In0pOmUucHVzaCh7Li4uaCxpc0dyb3VwOiExLHNoYXBlOlpfZSh0KX0pfX0sImFkZE5vZGVGcm9tVmVydGV4Iik7byhpTCwiZ2V0Q29tcGlsZWRTdHlsZXMiKTtyOWU9bygoKT0+e2xldCB0PXBlKCksZT1bXSxyPVtdLG49SFooKSxpPW5ldyBNYXAsYT1uZXcgTWFwO2ZvcihsZXQgdT1uLmxlbmd0aC0xO3U+PTA7dS0tKXtsZXQgaD1uW3VdO2gubm9kZXMubGVuZ3RoPjAmJmEuc2V0KGguaWQsITApO2ZvcihsZXQgZiBvZiBoLm5vZGVzKWkuc2V0KGYsaC5pZCl9Zm9yKGxldCB1PW4ubGVuZ3RoLTE7dT49MDt1LS0pe2xldCBoPW5bdV07ZS5wdXNoKHtpZDpoLmlkLGxhYmVsOmgudGl0bGUsbGFiZWxTdHlsZToiIixwYXJlbnRJZDppLmdldChoLmlkKSxwYWRkaW5nOjgsY3NzQ29tcGlsZWRTdHlsZXM6aUwoaC5jbGFzc2VzKSxjc3NDbGFzc2VzOmguY2xhc3Nlcy5qb2luKCIgIiksc2hhcGU6InJlY3QiLGRpcjpoLmRpcixpc0dyb3VwOiEwLGxvb2s6dC5sb29rfSl9elooKS5mb3JFYWNoKHU9Pnt0OWUodSxlLGksYSx0LHQubG9va3x8ImNsYXNzaWMiKX0pO2xldCBsPUdaKCk7cmV0dXJuIGwuZm9yRWFjaCgodSxoKT0+e2xldHthcnJvd1R5cGVTdGFydDpmLGFycm93VHlwZUVuZDpkfT1lOWUodS50eXBlKSxwPVsuLi5sLmRlZmF1bHRTdHlsZT8/W11dO3Uuc3R5bGUmJnAucHVzaCguLi51LnN0eWxlKTtsZXQgbT17aWQ6QzUodS5zdGFydCx1LmVuZCx7Y291bnRlcjpoLHByZWZpeDoiTCJ9KSxzdGFydDp1LnN0YXJ0LGVuZDp1LmVuZCx0eXBlOnUudHlwZT8/Im5vcm1hbCIsbGFiZWw6dS50ZXh0LGxhYmVscG9zOiJjIix0aGlja25lc3M6dS5zdHJva2UsbWlubGVuOnUubGVuZ3RoLGNsYXNzZXM6dT8uc3Ryb2tlPT09ImludmlzaWJsZSI/IiI6ImVkZ2UtdGhpY2tuZXNzLW5vcm1hbCBlZGdlLXBhdHRlcm4tc29saWQgZmxvd2NoYXJ0LWxpbmsiLGFycm93VHlwZVN0YXJ0OnU/LnN0cm9rZT09PSJpbnZpc2libGUiPyJub25lIjpmLGFycm93VHlwZUVuZDp1Py5zdHJva2U9PT0iaW52aXNpYmxlIj8ibm9uZSI6ZCxhcnJvd2hlYWRTdHlsZToiZmlsbDogIzMzMyIsbGFiZWxTdHlsZTpwLHN0eWxlOnAscGF0dGVybjp1LnN0cm9rZSxsb29rOnQubG9va307ci5wdXNoKG0pfSkse25vZGVzOmUsZWRnZXM6cixvdGhlcjp7fSxjb25maWc6dH19LCJnZXREYXRhIiksc3c9e2RlZmF1bHRDb25maWc6bygoKT0+QjQuZmxvd2NoYXJ0LCJkZWZhdWx0Q29uZmlnIiksc2V0QWNjVGl0bGU6TXIsZ2V0QWNjVGl0bGU6QnIsZ2V0QWNjRGVzY3JpcHRpb246enIsZ2V0RGF0YTpyOWUsc2V0QWNjRGVzY3JpcHRpb246RnIsYWRkVmVydGV4OkNfZSxsb29rVXBEb21JZDphdyxhZGRMaW5rOl9fZSx1cGRhdGVMaW5rSW50ZXJwb2xhdGU6TF9lLHVwZGF0ZUxpbms6RF9lLGFkZENsYXNzOk5fZSxzZXREaXJlY3Rpb246Ul9lLHNldENsYXNzOm9MLHNldFRvb2x0aXA6TV9lLGdldFRvb2x0aXA6Rlosc2V0Q2xpY2tFdmVudDpQX2Usc2V0TGluazpPX2UsYmluZEZ1bmN0aW9uczpCX2UsZ2V0RGlyZWN0aW9uOmxMLGdldFZlcnRpY2VzOnpaLGdldEVkZ2VzOkdaLGdldENsYXNzZXM6Rl9lLGNsZWFyOnpfZSxzZXRHZW46R19lLGRlZmF1bHRTdHlsZTokX2UsYWRkU3ViR3JhcGg6Vl9lLGdldERlcHRoRmlyc3RQb3M6SF9lLGluZGV4Tm9kZXM6V19lLGdldFN1YkdyYXBoczpIWixkZXN0cnVjdExpbms6S19lLGxleDpRX2UsZXhpc3RzOldaLG1ha2VVbmlxOllaLHNldERpYWdyYW1UaXRsZTpjbixnZXREaWFncmFtVGl0bGU6SnJ9fSk7dmFyIEFtLG93PU0oKCk9PnsidXNlIHN0cmljdCI7cHIoKTtBbT1vKCh0LGUpPT57bGV0IHI7cmV0dXJuIGU9PT0ic2FuZGJveCImJihyPVZlKCIjaSIrdCkpLChlPT09InNhbmRib3giP1ZlKHIubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSk6VmUoImJvZHkiKSkuc2VsZWN0KGBbaWQ9IiR7dH0iXWApfSwiZ2V0RGlhZ3JhbUVsZW1lbnQiKX0pO3ZhciBGdSwkdj1NKCgpPT57InVzZSBzdHJpY3QiO0Z1PW8oKHtmbG93Y2hhcnQ6dH0pPT57bGV0IGU9dD8uc3ViR3JhcGhUaXRsZU1hcmdpbj8udG9wPz8wLHI9dD8uc3ViR3JhcGhUaXRsZU1hcmdpbj8uYm90dG9tPz8wLG49ZStyO3JldHVybntzdWJHcmFwaFRpdGxlVG9wTWFyZ2luOmUsc3ViR3JhcGhUaXRsZUJvdHRvbU1hcmdpbjpyLHN1YkdyYXBoVGl0bGVUb3RhbE1hcmdpbjpufX0sImdldFN1YkdyYXBoVGl0bGVNYXJnaW5zIil9KTt2YXIgcVosbjllLGk5ZSxhOWUsczllLG85ZSxsOWUsWFosX20salosbHc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWdCgpO2ZyKCk7dXQoKTskdigpO3ByKCk7anQoKTtQbCgpO2s5KCk7WTUoKTtYaCgpO1h0KCk7cVo9byhhc3luYyh0LGUpPT57WS5pbmZvKCJDcmVhdGluZyBzdWJncmFwaCByZWN0IGZvciAiLGUuaWQsZSk7bGV0IHI9cGUoKSx7dGhlbWVWYXJpYWJsZXM6bixoYW5kRHJhd25TZWVkOml9PXIse2NsdXN0ZXJCa2c6YSxjbHVzdGVyQm9yZGVyOnN9PW4se2xhYmVsU3R5bGVzOmwsbm9kZVN0eWxlczp1LGJvcmRlclN0eWxlczpoLGJhY2tncm91bmRTdHlsZXM6Zn09WmUoZSksZD10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3RlciAiK2UuY3NzQ2xhc3NlcykuYXR0cigiaWQiLGUuaWQpLmF0dHIoImRhdGEtbG9vayIsZS5sb29rKSxwPXhyKHIuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpLG09ZC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXItbGFiZWwgIiksZz1hd2FpdCBMaShtLGUubGFiZWwse3N0eWxlOmUubGFiZWxTdHlsZSx1c2VIdG1sTGFiZWxzOnAsaXNOb2RlOiEwfSkseT1nLmdldEJCb3goKTtpZih4cihyLmZsb3djaGFydC5odG1sTGFiZWxzKSl7bGV0IEw9Zy5jaGlsZHJlblswXSxTPVZlKGcpO3k9TC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxTLmF0dHIoIndpZHRoIix5LndpZHRoKSxTLmF0dHIoImhlaWdodCIseS5oZWlnaHQpfWxldCB2PWUud2lkdGg8PXkud2lkdGgrZS5wYWRkaW5nP3kud2lkdGgrZS5wYWRkaW5nOmUud2lkdGg7ZS53aWR0aDw9eS53aWR0aCtlLnBhZGRpbmc/ZS5kaWZmPSh2LWUud2lkdGgpLzItZS5wYWRkaW5nOmUuZGlmZj0tZS5wYWRkaW5nO2xldCB4PWUuaGVpZ2h0LGI9ZS54LXYvMix3PWUueS14LzI7WS50cmFjZSgiRGF0YSAiLGUsSlNPTi5zdHJpbmdpZnkoZSkpO2xldCBfO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgTD1YZS5zdmcoZCksUz1LZShlLHtyb3VnaG5lc3M6LjcsZmlsbDphLHN0cm9rZTpzLGZpbGxXZWlnaHQ6MyxzZWVkOml9KSxBPUwucGF0aChQYShiLHcsdix4LDApLFMpO189ZC5pbnNlcnQoKCk9PihZLmRlYnVnKCJSb3VnaCBub2RlIGluc2VydCBDWEMiLEEpLEEpLCI6Zmlyc3QtY2hpbGQiKSxfLnNlbGVjdCgicGF0aDpudGgtY2hpbGQoMikiKS5hdHRyKCJzdHlsZSIsaC5qb2luKCI7IikpLF8uc2VsZWN0KCJwYXRoIikuYXR0cigic3R5bGUiLGYuam9pbigiOyIpLnJlcGxhY2UoImZpbGwiLCJzdHJva2UiKSl9ZWxzZSBfPWQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksXy5hdHRyKCJzdHlsZSIsdSkuYXR0cigicngiLGUucngpLmF0dHIoInJ5IixlLnJ5KS5hdHRyKCJ4IixiKS5hdHRyKCJ5Iix3KS5hdHRyKCJ3aWR0aCIsdikuYXR0cigiaGVpZ2h0Iix4KTtsZXR7c3ViR3JhcGhUaXRsZVRvcE1hcmdpbjpUfT1GdShyKTtpZihtLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2UueC15LndpZHRoLzJ9LCAke2UueS1lLmhlaWdodC8yK1R9KWApLGwpe2xldCBMPW0uc2VsZWN0KCJzcGFuIik7TCYmTC5hdHRyKCJzdHlsZSIsbCl9bGV0IEU9Xy5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBlLm9mZnNldFg9MCxlLndpZHRoPUUud2lkdGgsZS5oZWlnaHQ9RS5oZWlnaHQsZS5vZmZzZXRZPXkuaGVpZ2h0LWUucGFkZGluZy8yLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKEwpe3JldHVybiBIaChlLEwpfSx7Y2x1c3RlcjpkLGxhYmVsQkJveDp5fX0sInJlY3QiKSxuOWU9bygodCxlKT0+e2xldCByPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub3RlLWNsdXN0ZXIiKS5hdHRyKCJpZCIsZS5pZCksbj1yLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGk9MCplLnBhZGRpbmcsYT1pLzI7bi5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoIngiLGUueC1lLndpZHRoLzItYSkuYXR0cigieSIsZS55LWUuaGVpZ2h0LzItYSkuYXR0cigid2lkdGgiLGUud2lkdGgraSkuYXR0cigiaGVpZ2h0IixlLmhlaWdodCtpKS5hdHRyKCJmaWxsIiwibm9uZSIpO2xldCBzPW4ubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS53aWR0aD1zLndpZHRoLGUuaGVpZ2h0PXMuaGVpZ2h0LGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGwpe3JldHVybiBIaChlLGwpfSx7Y2x1c3RlcjpyLGxhYmVsQkJveDp7d2lkdGg6MCxoZWlnaHQ6MH19fSwibm90ZUdyb3VwIiksaTllPW8oYXN5bmModCxlKT0+e2xldCByPXBlKCkse3RoZW1lVmFyaWFibGVzOm4saGFuZERyYXduU2VlZDppfT1yLHthbHRCYWNrZ3JvdW5kOmEsY29tcG9zaXRlQmFja2dyb3VuZDpzLGNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZDpsLG5vZGVCb3JkZXI6dX09bixoPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLGUuY3NzQ2xhc3NlcykuYXR0cigiaWQiLGUuaWQpLmF0dHIoImRhdGEtaWQiLGUuaWQpLmF0dHIoImRhdGEtbG9vayIsZS5sb29rKSxmPWguaW5zZXJ0KCJnIiwiOmZpcnN0LWNoaWxkIiksZD1oLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3Rlci1sYWJlbCIpLHA9aC5hcHBlbmQoInJlY3QiKSxtPWQubm9kZSgpLmFwcGVuZENoaWxkKGF3YWl0IENjKGUubGFiZWwsZS5sYWJlbFN0eWxlLHZvaWQgMCwhMCkpLGc9bS5nZXRCQm94KCk7aWYoeHIoci5mbG93Y2hhcnQuaHRtbExhYmVscykpe2xldCBBPW0uY2hpbGRyZW5bMF0sST1WZShtKTtnPUEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksSS5hdHRyKCJ3aWR0aCIsZy53aWR0aCksSS5hdHRyKCJoZWlnaHQiLGcuaGVpZ2h0KX1sZXQgeT0wKmUucGFkZGluZyx2PXkvMix4PShlLndpZHRoPD1nLndpZHRoK2UucGFkZGluZz9nLndpZHRoK2UucGFkZGluZzplLndpZHRoKSt5O2Uud2lkdGg8PWcud2lkdGgrZS5wYWRkaW5nP2UuZGlmZj0oeC1lLndpZHRoKS8yLWUucGFkZGluZzplLmRpZmY9LWUucGFkZGluZztsZXQgYj1lLmhlaWdodCt5LHc9ZS5oZWlnaHQreS1nLmhlaWdodC02LF89ZS54LXgvMixUPWUueS1iLzI7ZS53aWR0aD14O2xldCBFPWUueS1lLmhlaWdodC8yLXYrZy5oZWlnaHQrMixMO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgQT1lLmNzc0NsYXNzZXMuaW5jbHVkZXMoInN0YXRlZGlhZ3JhbS1jbHVzdGVyLWFsdCIpLEk9WGUuc3ZnKGgpLEQ9ZS5yeHx8ZS5yeT9JLnBhdGgoUGEoXyxULHgsYiwxMCkse3JvdWdobmVzczouNyxmaWxsOmwsZmlsbFN0eWxlOiJzb2xpZCIsc3Ryb2tlOnUsc2VlZDppfSk6SS5yZWN0YW5nbGUoXyxULHgsYix7c2VlZDppfSk7TD1oLmluc2VydCgoKT0+RCwiOmZpcnN0LWNoaWxkIik7bGV0IGs9SS5yZWN0YW5nbGUoXyxFLHgsdyx7ZmlsbDpBP2E6cyxmaWxsU3R5bGU6QT8iaGFjaHVyZSI6InNvbGlkIixzdHJva2U6dSxzZWVkOml9KTtMPWguaW5zZXJ0KCgpPT5ELCI6Zmlyc3QtY2hpbGQiKSxwPWguaW5zZXJ0KCgpPT5rKX1lbHNlIEw9Zi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxMLmF0dHIoImNsYXNzIiwib3V0ZXIiKS5hdHRyKCJ4IixfKS5hdHRyKCJ5IixUKS5hdHRyKCJ3aWR0aCIseCkuYXR0cigiaGVpZ2h0IixiKS5hdHRyKCJkYXRhLWxvb2siLGUubG9vaykscC5hdHRyKCJjbGFzcyIsImlubmVyIikuYXR0cigieCIsXykuYXR0cigieSIsRSkuYXR0cigid2lkdGgiLHgpLmF0dHIoImhlaWdodCIsdyk7ZC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtlLngtZy53aWR0aC8yfSwgJHtUKzEtKHhyKHIuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpPzA6Myl9KWApO2xldCBTPUwubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS5oZWlnaHQ9Uy5oZWlnaHQsZS5vZmZzZXRYPTAsZS5vZmZzZXRZPWcuaGVpZ2h0LWUucGFkZGluZy8yLGUubGFiZWxCQm94PWcsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oQSl7cmV0dXJuIEhoKGUsQSl9LHtjbHVzdGVyOmgsbGFiZWxCQm94Omd9fSwicm91bmRlZFdpdGhUaXRsZSIpLGE5ZT1vKGFzeW5jKHQsZSk9PntZLmluZm8oIkNyZWF0aW5nIHN1YmdyYXBoIHJlY3QgZm9yICIsZS5pZCxlKTtsZXQgcj1wZSgpLHt0aGVtZVZhcmlhYmxlczpuLGhhbmREcmF3blNlZWQ6aX09cix7Y2x1c3RlckJrZzphLGNsdXN0ZXJCb3JkZXI6c309bix7bGFiZWxTdHlsZXM6bCxub2RlU3R5bGVzOnUsYm9yZGVyU3R5bGVzOmgsYmFja2dyb3VuZFN0eWxlczpmfT1aZShlKSxkPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVyICIrZS5jc3NDbGFzc2VzKS5hdHRyKCJpZCIsZS5pZCkuYXR0cigiZGF0YS1sb29rIixlLmxvb2spLHA9eHIoci5mbG93Y2hhcnQuaHRtbExhYmVscyksbT1kLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3Rlci1sYWJlbCAiKSxnPWF3YWl0IExpKG0sZS5sYWJlbCx7c3R5bGU6ZS5sYWJlbFN0eWxlLHVzZUh0bWxMYWJlbHM6cCxpc05vZGU6ITAsd2lkdGg6ZS53aWR0aH0pLHk9Zy5nZXRCQm94KCk7aWYoeHIoci5mbG93Y2hhcnQuaHRtbExhYmVscykpe2xldCBMPWcuY2hpbGRyZW5bMF0sUz1WZShnKTt5PUwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksUy5hdHRyKCJ3aWR0aCIseS53aWR0aCksUy5hdHRyKCJoZWlnaHQiLHkuaGVpZ2h0KX1sZXQgdj1lLndpZHRoPD15LndpZHRoK2UucGFkZGluZz95LndpZHRoK2UucGFkZGluZzplLndpZHRoO2Uud2lkdGg8PXkud2lkdGgrZS5wYWRkaW5nP2UuZGlmZj0odi1lLndpZHRoKS8yLWUucGFkZGluZzplLmRpZmY9LWUucGFkZGluZztsZXQgeD1lLmhlaWdodCxiPWUueC12LzIsdz1lLnkteC8yO1kudHJhY2UoIkRhdGEgIixlLEpTT04uc3RyaW5naWZ5KGUpKTtsZXQgXztpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IEw9WGUuc3ZnKGQpLFM9S2UoZSx7cm91Z2huZXNzOi43LGZpbGw6YSxzdHJva2U6cyxmaWxsV2VpZ2h0OjQsc2VlZDppfSksQT1MLnBhdGgoUGEoYix3LHYseCxlLnJ4KSxTKTtfPWQuaW5zZXJ0KCgpPT4oWS5kZWJ1ZygiUm91Z2ggbm9kZSBpbnNlcnQgQ1hDIixBKSxBKSwiOmZpcnN0LWNoaWxkIiksXy5zZWxlY3QoInBhdGg6bnRoLWNoaWxkKDIpIikuYXR0cigic3R5bGUiLGguam9pbigiOyIpKSxfLnNlbGVjdCgicGF0aCIpLmF0dHIoInN0eWxlIixmLmpvaW4oIjsiKS5yZXBsYWNlKCJmaWxsIiwic3Ryb2tlIikpfWVsc2UgXz1kLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLF8uYXR0cigic3R5bGUiLHUpLmF0dHIoInJ4IixlLnJ4KS5hdHRyKCJyeSIsZS5yeSkuYXR0cigieCIsYikuYXR0cigieSIsdykuYXR0cigid2lkdGgiLHYpLmF0dHIoImhlaWdodCIseCk7bGV0e3N1YkdyYXBoVGl0bGVUb3BNYXJnaW46VH09RnUocik7aWYobS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtlLngteS53aWR0aC8yfSwgJHtlLnktZS5oZWlnaHQvMitUfSlgKSxsKXtsZXQgTD1tLnNlbGVjdCgic3BhbiIpO0wmJkwuYXR0cigic3R5bGUiLGwpfWxldCBFPV8ubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS5vZmZzZXRYPTAsZS53aWR0aD1FLndpZHRoLGUuaGVpZ2h0PUUuaGVpZ2h0LGUub2Zmc2V0WT15LmhlaWdodC1lLnBhZGRpbmcvMixlLmludGVyc2VjdD1mdW5jdGlvbihMKXtyZXR1cm4gSGgoZSxMKX0se2NsdXN0ZXI6ZCxsYWJlbEJCb3g6eX19LCJrYW5iYW5TZWN0aW9uIiksczllPW8oKHQsZSk9PntsZXQgcj1wZSgpLHt0aGVtZVZhcmlhYmxlczpuLGhhbmREcmF3blNlZWQ6aX09cix7bm9kZUJvcmRlcjphfT1uLHM9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsZS5jc3NDbGFzc2VzKS5hdHRyKCJpZCIsZS5pZCkuYXR0cigiZGF0YS1sb29rIixlLmxvb2spLGw9cy5pbnNlcnQoImciLCI6Zmlyc3QtY2hpbGQiKSx1PTAqZS5wYWRkaW5nLGg9ZS53aWR0aCt1O2UuZGlmZj0tZS5wYWRkaW5nO2xldCBmPWUuaGVpZ2h0K3UsZD1lLngtaC8yLHA9ZS55LWYvMjtlLndpZHRoPWg7bGV0IG07aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCB2PVhlLnN2ZyhzKS5yZWN0YW5nbGUoZCxwLGgsZix7ZmlsbDoibGlnaHRncmV5Iixyb3VnaG5lc3M6LjUsc3Ryb2tlTGluZURhc2g6WzVdLHN0cm9rZTphLHNlZWQ6aX0pO209cy5pbnNlcnQoKCk9PnYsIjpmaXJzdC1jaGlsZCIpfWVsc2UgbT1sLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLG0uYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieCIsZCkuYXR0cigieSIscCkuYXR0cigid2lkdGgiLGgpLmF0dHIoImhlaWdodCIsZikuYXR0cigiZGF0YS1sb29rIixlLmxvb2spO2xldCBnPW0ubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS5oZWlnaHQ9Zy5oZWlnaHQsZS5vZmZzZXRYPTAsZS5vZmZzZXRZPTAsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeSl7cmV0dXJuIEhoKGUseSl9LHtjbHVzdGVyOnMsbGFiZWxCQm94Ont9fX0sImRpdmlkZXIiKSxvOWU9cVosbDllPXtyZWN0OnFaLHNxdWFyZVJlY3Q6bzllLHJvdW5kZWRXaXRoVGl0bGU6aTllLG5vdGVHcm91cDpuOWUsZGl2aWRlcjpzOWUsa2FuYmFuU2VjdGlvbjphOWV9LFhaPW5ldyBNYXAsX209byhhc3luYyh0LGUpPT57bGV0IHI9ZS5zaGFwZXx8InJlY3QiLG49YXdhaXQgbDllW3JdKHQsZSk7cmV0dXJuIFhaLnNldChlLmlkLG4pLG59LCJpbnNlcnRDbHVzdGVyIiksalo9bygoKT0+e1haPW5ldyBNYXB9LCJjbGVhciIpfSk7ZnVuY3Rpb24gY3codCxlKXtpZih0PT09dm9pZCAwfHxlPT09dm9pZCAwKXJldHVybnthbmdsZTowLGRlbHRhWDowLGRlbHRhWTowfTt0PVduKHQpLGU9V24oZSk7bGV0W3Isbl09W3QueCx0LnldLFtpLGFdPVtlLngsZS55XSxzPWktcixsPWEtbjtyZXR1cm57YW5nbGU6TWF0aC5hdGFuKGwvcyksZGVsdGFYOnMsZGVsdGFZOmx9fXZhciBxbyxXbix1dyx1TD1NKCgpPT57InVzZSBzdHJpY3QiO3FvPXthZ2dyZWdhdGlvbjoxOCxleHRlbnNpb246MTgsY29tcG9zaXRpb246MTgsZGVwZW5kZW5jeTo2LGxvbGxpcG9wOjEzLjUsYXJyb3dfcG9pbnQ6NH07byhjdywiY2FsY3VsYXRlRGVsdGFBbmRBbmdsZSIpO1duPW8odD0+QXJyYXkuaXNBcnJheSh0KT97eDp0WzBdLHk6dFsxXX06dCwicG9pbnRUcmFuc2Zvcm1lciIpLHV3PW8odD0+KHt4Om8oZnVuY3Rpb24oZSxyLG4pe2xldCBpPTAsYT1XbihuWzBdKS54PFduKG5bbi5sZW5ndGgtMV0pLng/ImxlZnQiOiJyaWdodCI7aWYocj09PTAmJk9iamVjdC5oYXNPd24ocW8sdC5hcnJvd1R5cGVTdGFydCkpe2xldHthbmdsZTptLGRlbHRhWDpnfT1jdyhuWzBdLG5bMV0pO2k9cW9bdC5hcnJvd1R5cGVTdGFydF0qTWF0aC5jb3MobSkqKGc+PTA/MTotMSl9ZWxzZSBpZihyPT09bi5sZW5ndGgtMSYmT2JqZWN0Lmhhc093bihxbyx0LmFycm93VHlwZUVuZCkpe2xldHthbmdsZTptLGRlbHRhWDpnfT1jdyhuW24ubGVuZ3RoLTFdLG5bbi5sZW5ndGgtMl0pO2k9cW9bdC5hcnJvd1R5cGVFbmRdKk1hdGguY29zKG0pKihnPj0wPzE6LTEpfWxldCBzPU1hdGguYWJzKFduKGUpLngtV24obltuLmxlbmd0aC0xXSkueCksbD1NYXRoLmFicyhXbihlKS55LVduKG5bbi5sZW5ndGgtMV0pLnkpLHU9TWF0aC5hYnMoV24oZSkueC1XbihuWzBdKS54KSxoPU1hdGguYWJzKFduKGUpLnktV24oblswXSkueSksZj1xb1t0LmFycm93VHlwZVN0YXJ0XSxkPXFvW3QuYXJyb3dUeXBlRW5kXSxwPTE7aWYoczxkJiZzPjAmJmw8ZCl7bGV0IG09ZCtwLXM7bSo9YT09PSJyaWdodCI/LTE6MSxpLT1tfWlmKHU8ZiYmdT4wJiZoPGYpe2xldCBtPWYrcC11O20qPWE9PT0icmlnaHQiPy0xOjEsaSs9bX1yZXR1cm4gV24oZSkueCtpfSwieCIpLHk6byhmdW5jdGlvbihlLHIsbil7bGV0IGk9MCxhPVduKG5bMF0pLnk8V24obltuLmxlbmd0aC0xXSkueT8iZG93biI6InVwIjtpZihyPT09MCYmT2JqZWN0Lmhhc093bihxbyx0LmFycm93VHlwZVN0YXJ0KSl7bGV0e2FuZ2xlOm0sZGVsdGFZOmd9PWN3KG5bMF0sblsxXSk7aT1xb1t0LmFycm93VHlwZVN0YXJ0XSpNYXRoLmFicyhNYXRoLnNpbihtKSkqKGc+PTA/MTotMSl9ZWxzZSBpZihyPT09bi5sZW5ndGgtMSYmT2JqZWN0Lmhhc093bihxbyx0LmFycm93VHlwZUVuZCkpe2xldHthbmdsZTptLGRlbHRhWTpnfT1jdyhuW24ubGVuZ3RoLTFdLG5bbi5sZW5ndGgtMl0pO2k9cW9bdC5hcnJvd1R5cGVFbmRdKk1hdGguYWJzKE1hdGguc2luKG0pKSooZz49MD8xOi0xKX1sZXQgcz1NYXRoLmFicyhXbihlKS55LVduKG5bbi5sZW5ndGgtMV0pLnkpLGw9TWF0aC5hYnMoV24oZSkueC1XbihuW24ubGVuZ3RoLTFdKS54KSx1PU1hdGguYWJzKFduKGUpLnktV24oblswXSkueSksaD1NYXRoLmFicyhXbihlKS54LVduKG5bMF0pLngpLGY9cW9bdC5hcnJvd1R5cGVTdGFydF0sZD1xb1t0LmFycm93VHlwZUVuZF0scD0xO2lmKHM8ZCYmcz4wJiZsPGQpe2xldCBtPWQrcC1zO20qPWE9PT0idXAiPy0xOjEsaS09bX1pZih1PGYmJnU+MCYmaDxmKXtsZXQgbT1mK3AtdTttKj1hPT09InVwIj8tMToxLGkrPW19cmV0dXJuIFduKGUpLnkraX0sInkiKX0pLCJnZXRMaW5lRnVuY3Rpb25zV2l0aE9mZnNldCIpfSk7dmFyIFFaLGM5ZSxLWixaWj1NKCgpPT57InVzZSBzdHJpY3QiO3V0KCk7UVo9bygodCxlLHIsbixpKT0+e2UuYXJyb3dUeXBlU3RhcnQmJktaKHQsInN0YXJ0IixlLmFycm93VHlwZVN0YXJ0LHIsbixpKSxlLmFycm93VHlwZUVuZCYmS1oodCwiZW5kIixlLmFycm93VHlwZUVuZCxyLG4saSl9LCJhZGRFZGdlTWFya2VycyIpLGM5ZT17YXJyb3dfY3Jvc3M6ImNyb3NzIixhcnJvd19wb2ludDoicG9pbnQiLGFycm93X2JhcmI6ImJhcmIiLGFycm93X2NpcmNsZToiY2lyY2xlIixhZ2dyZWdhdGlvbjoiYWdncmVnYXRpb24iLGV4dGVuc2lvbjoiZXh0ZW5zaW9uIixjb21wb3NpdGlvbjoiY29tcG9zaXRpb24iLGRlcGVuZGVuY3k6ImRlcGVuZGVuY3kiLGxvbGxpcG9wOiJsb2xsaXBvcCJ9LEtaPW8oKHQsZSxyLG4saSxhKT0+e2xldCBzPWM5ZVtyXTtpZighcyl7WS53YXJuKGBVbmtub3duIGFycm93IHR5cGU6ICR7cn1gKTtyZXR1cm59bGV0IGw9ZT09PSJzdGFydCI/IlN0YXJ0IjoiRW5kIjt0LmF0dHIoYG1hcmtlci0ke2V9YCxgdXJsKCR7bn0jJHtpfV8ke2F9LSR7c30ke2x9KWApfSwiYWRkRWRnZU1hcmtlciIpfSk7ZnVuY3Rpb24gaHcodCxlKXtwZSgpLmZsb3djaGFydC5odG1sTGFiZWxzJiZ0JiYodC5zdHlsZS53aWR0aD1lLmxlbmd0aCo5KyJweCIsdC5zdHlsZS5oZWlnaHQ9IjEycHgiKX1mdW5jdGlvbiBmOWUodCl7bGV0IGU9W10scj1bXTtmb3IobGV0IG49MTtuPHQubGVuZ3RoLTE7bisrKXtsZXQgaT10W24tMV0sYT10W25dLHM9dFtuKzFdOyhpLng9PT1hLngmJmEueT09PXMueSYmTWF0aC5hYnMoYS54LXMueCk+NSYmTWF0aC5hYnMoYS55LWkueSk+NXx8aS55PT09YS55JiZhLng9PT1zLngmJk1hdGguYWJzKGEueC1pLngpPjUmJk1hdGguYWJzKGEueS1zLnkpPjUpJiYoZS5wdXNoKGEpLHIucHVzaChuKSl9cmV0dXJue2Nvcm5lclBvaW50czplLGNvcm5lclBvaW50UG9zaXRpb25zOnJ9fXZhciBmdyx5YSx0SixWdixkdyxwdyx1OWUsaDllLEpaLGVKLGQ5ZSxtdyxoTD1NKCgpPT57InVzZSBzdHJpY3QiO1Z0KCk7ZnIoKTt1dCgpO1BsKCk7aHIoKTt1TCgpOyR2KCk7cHIoKTtqdCgpO1k1KCk7WlooKTtmdz1uZXcgTWFwLHlhPW5ldyBNYXAsdEo9bygoKT0+e2Z3LmNsZWFyKCkseWEuY2xlYXIoKX0sImNsZWFyIiksVnY9byh0PT50P3QucmVkdWNlKChyLG4pPT5yKyI7IituLCIiKToiIiwiZ2V0TGFiZWxTdHlsZXMiKSxkdz1vKGFzeW5jKHQsZSk9PntsZXQgcj14cihwZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSxuPWF3YWl0IExpKHQsZS5sYWJlbCx7c3R5bGU6VnYoZS5sYWJlbFN0eWxlKSx1c2VIdG1sTGFiZWxzOnIsYWRkU3ZnQmFja2dyb3VuZDohMCxpc05vZGU6ITF9KTtZLmluZm8oImFiYzgyIixlLGUubGFiZWxUeXBlKTtsZXQgaT10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZUxhYmVsIiksYT1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKTthLm5vZGUoKS5hcHBlbmRDaGlsZChuKTtsZXQgcz1uLmdldEJCb3goKTtpZihyKXtsZXQgdT1uLmNoaWxkcmVuWzBdLGg9VmUobik7cz11LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGguYXR0cigid2lkdGgiLHMud2lkdGgpLGguYXR0cigiaGVpZ2h0IixzLmhlaWdodCl9YS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistcy53aWR0aC8yKyIsICIrLXMuaGVpZ2h0LzIrIikiKSxmdy5zZXQoZS5pZCxpKSxlLndpZHRoPXMud2lkdGgsZS5oZWlnaHQ9cy5oZWlnaHQ7bGV0IGw7aWYoZS5zdGFydExhYmVsTGVmdCl7bGV0IHU9YXdhaXQgQ2MoZS5zdGFydExhYmVsTGVmdCxWdihlLmxhYmVsU3R5bGUpKSxoPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksZj1oLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTtsPWYubm9kZSgpLmFwcGVuZENoaWxkKHUpO2xldCBkPXUuZ2V0QkJveCgpO2YuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWQud2lkdGgvMisiLCAiKy1kLmhlaWdodC8yKyIpIikseWEuZ2V0KGUuaWQpfHx5YS5zZXQoZS5pZCx7fSkseWEuZ2V0KGUuaWQpLnN0YXJ0TGVmdD1oLGh3KGwsZS5zdGFydExhYmVsTGVmdCl9aWYoZS5zdGFydExhYmVsUmlnaHQpe2xldCB1PWF3YWl0IENjKGUuc3RhcnRMYWJlbFJpZ2h0LFZ2KGUubGFiZWxTdHlsZSkpLGg9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VUZXJtaW5hbHMiKSxmPWguaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJpbm5lciIpO2w9aC5ub2RlKCkuYXBwZW5kQ2hpbGQodSksZi5ub2RlKCkuYXBwZW5kQ2hpbGQodSk7bGV0IGQ9dS5nZXRCQm94KCk7Zi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistZC53aWR0aC8yKyIsICIrLWQuaGVpZ2h0LzIrIikiKSx5YS5nZXQoZS5pZCl8fHlhLnNldChlLmlkLHt9KSx5YS5nZXQoZS5pZCkuc3RhcnRSaWdodD1oLGh3KGwsZS5zdGFydExhYmVsUmlnaHQpfWlmKGUuZW5kTGFiZWxMZWZ0KXtsZXQgdT1hd2FpdCBDYyhlLmVuZExhYmVsTGVmdCxWdihlLmxhYmVsU3R5bGUpKSxoPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksZj1oLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTtsPWYubm9kZSgpLmFwcGVuZENoaWxkKHUpO2xldCBkPXUuZ2V0QkJveCgpO2YuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWQud2lkdGgvMisiLCAiKy1kLmhlaWdodC8yKyIpIiksaC5ub2RlKCkuYXBwZW5kQ2hpbGQodSkseWEuZ2V0KGUuaWQpfHx5YS5zZXQoZS5pZCx7fSkseWEuZ2V0KGUuaWQpLmVuZExlZnQ9aCxodyhsLGUuZW5kTGFiZWxMZWZ0KX1pZihlLmVuZExhYmVsUmlnaHQpe2xldCB1PWF3YWl0IENjKGUuZW5kTGFiZWxSaWdodCxWdihlLmxhYmVsU3R5bGUpKSxoPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksZj1oLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTtsPWYubm9kZSgpLmFwcGVuZENoaWxkKHUpO2xldCBkPXUuZ2V0QkJveCgpO2YuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWQud2lkdGgvMisiLCAiKy1kLmhlaWdodC8yKyIpIiksaC5ub2RlKCkuYXBwZW5kQ2hpbGQodSkseWEuZ2V0KGUuaWQpfHx5YS5zZXQoZS5pZCx7fSkseWEuZ2V0KGUuaWQpLmVuZFJpZ2h0PWgsaHcobCxlLmVuZExhYmVsUmlnaHQpfXJldHVybiBufSwiaW5zZXJ0RWRnZUxhYmVsIik7byhodywic2V0VGVybWluYWxXaWR0aCIpO3B3PW8oKHQsZSk9PntZLmRlYnVnKCJNb3ZpbmcgbGFiZWwgYWJjODggIix0LmlkLHQubGFiZWwsZncuZ2V0KHQuaWQpLGUpO2xldCByPWUudXBkYXRlZFBhdGg/ZS51cGRhdGVkUGF0aDplLm9yaWdpbmFsUGF0aCxuPXBlKCkse3N1YkdyYXBoVGl0bGVUb3RhbE1hcmdpbjppfT1GdShuKTtpZih0LmxhYmVsKXtsZXQgYT1mdy5nZXQodC5pZCkscz10LngsbD10Lnk7aWYocil7bGV0IHU9VXQuY2FsY0xhYmVsUG9zaXRpb24ocik7WS5kZWJ1ZygiTW92aW5nIGxhYmVsICIrdC5sYWJlbCsiIGZyb20gKCIscywiLCIsbCwiKSB0byAoIix1LngsIiwiLHUueSwiKSBhYmM4OCIpLGUudXBkYXRlZFBhdGgmJihzPXUueCxsPXUueSl9YS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtzfSwgJHtsK2kvMn0pYCl9aWYodC5zdGFydExhYmVsTGVmdCl7bGV0IGE9eWEuZ2V0KHQuaWQpLnN0YXJ0TGVmdCxzPXQueCxsPXQueTtpZihyKXtsZXQgdT1VdC5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKHQuYXJyb3dUeXBlU3RhcnQ/MTA6MCwic3RhcnRfbGVmdCIscik7cz11LngsbD11Lnl9YS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtzfSwgJHtsfSlgKX1pZih0LnN0YXJ0TGFiZWxSaWdodCl7bGV0IGE9eWEuZ2V0KHQuaWQpLnN0YXJ0UmlnaHQscz10LngsbD10Lnk7aWYocil7bGV0IHU9VXQuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbih0LmFycm93VHlwZVN0YXJ0PzEwOjAsInN0YXJ0X3JpZ2h0IixyKTtzPXUueCxsPXUueX1hLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3N9LCAke2x9KWApfWlmKHQuZW5kTGFiZWxMZWZ0KXtsZXQgYT15YS5nZXQodC5pZCkuZW5kTGVmdCxzPXQueCxsPXQueTtpZihyKXtsZXQgdT1VdC5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKHQuYXJyb3dUeXBlRW5kPzEwOjAsImVuZF9sZWZ0IixyKTtzPXUueCxsPXUueX1hLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3N9LCAke2x9KWApfWlmKHQuZW5kTGFiZWxSaWdodCl7bGV0IGE9eWEuZ2V0KHQuaWQpLmVuZFJpZ2h0LHM9dC54LGw9dC55O2lmKHIpe2xldCB1PVV0LmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24odC5hcnJvd1R5cGVFbmQ/MTA6MCwiZW5kX3JpZ2h0IixyKTtzPXUueCxsPXUueX1hLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3N9LCAke2x9KWApfX0sInBvc2l0aW9uRWRnZUxhYmVsIiksdTllPW8oKHQsZSk9PntsZXQgcj10Lngsbj10LnksaT1NYXRoLmFicyhlLngtciksYT1NYXRoLmFicyhlLnktbikscz10LndpZHRoLzIsbD10LmhlaWdodC8yO3JldHVybiBpPj1zfHxhPj1sfSwib3V0c2lkZU5vZGUiKSxoOWU9bygodCxlLHIpPT57WS5kZWJ1ZyhgaW50ZXJzZWN0aW9uIGNhbGMgYWJjODk6CiAgb3V0c2lkZVBvaW50OiAke0pTT04uc3RyaW5naWZ5KGUpfQogIGluc2lkZVBvaW50IDogJHtKU09OLnN0cmluZ2lmeShyKX0KICBub2RlICAgICAgICA6IHg6JHt0Lnh9IHk6JHt0Lnl9IHc6JHt0LndpZHRofSBoOiR7dC5oZWlnaHR9YCk7bGV0IG49dC54LGk9dC55LGE9TWF0aC5hYnMobi1yLngpLHM9dC53aWR0aC8yLGw9ci54PGUueD9zLWE6cythLHU9dC5oZWlnaHQvMixoPU1hdGguYWJzKGUueS1yLnkpLGY9TWF0aC5hYnMoZS54LXIueCk7aWYoTWF0aC5hYnMoaS1lLnkpKnM+TWF0aC5hYnMobi1lLngpKnUpe2xldCBkPXIueTxlLnk/ZS55LXUtaTppLXUtZS55O2w9ZipkL2g7bGV0IHA9e3g6ci54PGUueD9yLngrbDpyLngtZitsLHk6ci55PGUueT9yLnkraC1kOnIueS1oK2R9O3JldHVybiBsPT09MCYmKHAueD1lLngscC55PWUueSksZj09PTAmJihwLng9ZS54KSxoPT09MCYmKHAueT1lLnkpLFkuZGVidWcoYGFiYzg5IHRvcC9ib3R0b20gY2FsYywgUSAke2h9LCBxICR7ZH0sIFIgJHtmfSwgciAke2x9YCxwKSxwfWVsc2V7ci54PGUueD9sPWUueC1zLW46bD1uLXMtZS54O2xldCBkPWgqbC9mLHA9ci54PGUueD9yLngrZi1sOnIueC1mK2wsbT1yLnk8ZS55P3IueStkOnIueS1kO3JldHVybiBZLmRlYnVnKGBzaWRlcyBjYWxjIGFiYzg5LCBRICR7aH0sIHEgJHtkfSwgUiAke2Z9LCByICR7bH1gLHtfeDpwLF95Om19KSxsPT09MCYmKHA9ZS54LG09ZS55KSxmPT09MCYmKHA9ZS54KSxoPT09MCYmKG09ZS55KSx7eDpwLHk6bX19fSwiaW50ZXJzZWN0aW9uIiksSlo9bygodCxlKT0+e1kud2FybigiYWJjODggY3V0UGF0aEF0SW50ZXJzZWN0Iix0LGUpO2xldCByPVtdLG49dFswXSxpPSExO3JldHVybiB0LmZvckVhY2goYT0+e2lmKFkuaW5mbygiYWJjODggY2hlY2tpbmcgcG9pbnQiLGEsZSksIXU5ZShlLGEpJiYhaSl7bGV0IHM9aDllKGUsbixhKTtZLmRlYnVnKCJhYmM4OCBpbnNpZGUiLGEsbixzKSxZLmRlYnVnKCJhYmM4OCBpbnRlcnNlY3Rpb24iLHMsZSk7bGV0IGw9ITE7ci5mb3JFYWNoKHU9PntsPWx8fHUueD09PXMueCYmdS55PT09cy55fSksci5zb21lKHU9PnUueD09PXMueCYmdS55PT09cy55KT9ZLndhcm4oImFiYzg4IG5vIGludGVyc2VjdCIscyxyKTpyLnB1c2gocyksaT0hMH1lbHNlIFkud2FybigiYWJjODggb3V0c2lkZSIsYSxuKSxuPWEsaXx8ci5wdXNoKGEpfSksWS5kZWJ1ZygicmV0dXJuaW5nIHBvaW50cyIscikscn0sImN1dFBhdGhBdEludGVyc2VjdCIpO28oZjllLCJleHRyYWN0Q29ybmVyUG9pbnRzIik7ZUo9byhmdW5jdGlvbih0LGUscil7bGV0IG49ZS54LXQueCxpPWUueS10LnksYT1NYXRoLnNxcnQobipuK2kqaSkscz1yL2E7cmV0dXJue3g6ZS54LXMqbix5OmUueS1zKml9fSwiZmluZEFkamFjZW50UG9pbnQiKSxkOWU9byhmdW5jdGlvbih0KXtsZXR7Y29ybmVyUG9pbnRQb3NpdGlvbnM6ZX09ZjllKHQpLHI9W107Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspaWYoZS5pbmNsdWRlcyhuKSl7bGV0IGk9dFtuLTFdLGE9dFtuKzFdLHM9dFtuXSxsPWVKKGkscyw1KSx1PWVKKGEscyw1KSxoPXUueC1sLngsZj11LnktbC55O3IucHVzaChsKTtsZXQgZD1NYXRoLnNxcnQoMikqMixwPXt4OnMueCx5OnMueX07aWYoTWF0aC5hYnMoYS54LWkueCk+MTAmJk1hdGguYWJzKGEueS1pLnkpPj0xMCl7WS5kZWJ1ZygiQ29ybmVyIHBvaW50IGZpeGluZyIsTWF0aC5hYnMoYS54LWkueCksTWF0aC5hYnMoYS55LWkueSkpO2xldCBtPTU7cy54PT09bC54P3A9e3g6aDwwP2wueC1tK2Q6bC54K20tZCx5OmY8MD9sLnktZDpsLnkrZH06cD17eDpoPDA/bC54LWQ6bC54K2QseTpmPDA/bC55LW0rZDpsLnkrbS1kfX1lbHNlIFkuZGVidWcoIkNvcm5lciBwb2ludCBza2lwcGluZyBmaXhpbmciLE1hdGguYWJzKGEueC1pLngpLE1hdGguYWJzKGEueS1pLnkpKTtyLnB1c2gocCx1KX1lbHNlIHIucHVzaCh0W25dKTtyZXR1cm4gcn0sImZpeENvcm5lcnMiKSxtdz1vKGZ1bmN0aW9uKHQsZSxyLG4saSxhLHMpe2xldHtoYW5kRHJhd25TZWVkOmx9PXBlKCksdT1lLnBvaW50cyxoPSExLGY9aTt2YXIgZD1hO2QuaW50ZXJzZWN0JiZmLmludGVyc2VjdCYmKHU9dS5zbGljZSgxLGUucG9pbnRzLmxlbmd0aC0xKSx1LnVuc2hpZnQoZi5pbnRlcnNlY3QodVswXSkpLFkuZGVidWcoIkxhc3QgcG9pbnQgQVBBMTIiLGUuc3RhcnQsIi0tPiIsZS5lbmQsdVt1Lmxlbmd0aC0xXSxkLGQuaW50ZXJzZWN0KHVbdS5sZW5ndGgtMV0pKSx1LnB1c2goZC5pbnRlcnNlY3QodVt1Lmxlbmd0aC0xXSkpKSxlLnRvQ2x1c3RlciYmKFkuaW5mbygidG8gY2x1c3RlciBhYmM4OCIsci5nZXQoZS50b0NsdXN0ZXIpKSx1PUpaKGUucG9pbnRzLHIuZ2V0KGUudG9DbHVzdGVyKS5ub2RlKSxoPSEwKSxlLmZyb21DbHVzdGVyJiYoWS5kZWJ1ZygiZnJvbSBjbHVzdGVyIGFiYzg4IixyLmdldChlLmZyb21DbHVzdGVyKSxKU09OLnN0cmluZ2lmeSh1LG51bGwsMikpLHU9SloodS5yZXZlcnNlKCksci5nZXQoZS5mcm9tQ2x1c3Rlcikubm9kZSkucmV2ZXJzZSgpLGg9ITApO2xldCBwPXUuZmlsdGVyKEw9PiFOdW1iZXIuaXNOYU4oTC55KSk7cD1kOWUocCk7bGV0IG09UG87ZS5jdXJ2ZSYmKG09ZS5jdXJ2ZSk7bGV0e3g6Zyx5fT11dyhlKSx2PW5zKCkueChnKS55KHkpLmN1cnZlKG0pLHg7c3dpdGNoKGUudGhpY2tuZXNzKXtjYXNlIm5vcm1hbCI6eD0iZWRnZS10aGlja25lc3Mtbm9ybWFsIjticmVhaztjYXNlInRoaWNrIjp4PSJlZGdlLXRoaWNrbmVzcy10aGljayI7YnJlYWs7Y2FzZSJpbnZpc2libGUiOng9ImVkZ2UtdGhpY2tuZXNzLWludmlzaWJsZSI7YnJlYWs7ZGVmYXVsdDp4PSJlZGdlLXRoaWNrbmVzcy1ub3JtYWwifXN3aXRjaChlLnBhdHRlcm4pe2Nhc2Uic29saWQiOngrPSIgZWRnZS1wYXR0ZXJuLXNvbGlkIjticmVhaztjYXNlImRvdHRlZCI6eCs9IiBlZGdlLXBhdHRlcm4tZG90dGVkIjticmVhaztjYXNlImRhc2hlZCI6eCs9IiBlZGdlLXBhdHRlcm4tZGFzaGVkIjticmVhaztkZWZhdWx0OngrPSIgZWRnZS1wYXR0ZXJuLXNvbGlkIn1sZXQgYix3PXYocCksXz1BcnJheS5pc0FycmF5KGUuc3R5bGUpP2Uuc3R5bGU6W2Uuc3R5bGVdO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgTD1YZS5zdmcodCk7T2JqZWN0LmFzc2lnbihbXSxwKTtsZXQgUz1MLnBhdGgodyx7cm91Z2huZXNzOi4zLHNlZWQ6bH0pO3grPSIgdHJhbnNpdGlvbiIsYj1WZShTKS5zZWxlY3QoInBhdGgiKS5hdHRyKCJpZCIsZS5pZCkuYXR0cigiY2xhc3MiLCIgIit4KyhlLmNsYXNzZXM/IiAiK2UuY2xhc3NlczoiIikpLmF0dHIoInN0eWxlIixfP18ucmVkdWNlKChJLEQpPT5JKyI7IitELCIiKToiIik7bGV0IEE9Yi5hdHRyKCJkIik7Yi5hdHRyKCJkIixBKSx0Lm5vZGUoKS5hcHBlbmRDaGlsZChiLm5vZGUoKSl9ZWxzZSBiPXQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsdykuYXR0cigiaWQiLGUuaWQpLmF0dHIoImNsYXNzIiwiICIreCsoZS5jbGFzc2VzPyIgIitlLmNsYXNzZXM6IiIpKS5hdHRyKCJzdHlsZSIsXz9fLnJlZHVjZSgoTCxTKT0+TCsiOyIrUywiIik6IiIpO2xldCBUPSIiOyhwZSgpLmZsb3djaGFydC5hcnJvd01hcmtlckFic29sdXRlfHxwZSgpLnN0YXRlLmFycm93TWFya2VyQWJzb2x1dGUpJiYoVD13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCxUPVQucmVwbGFjZSgvXCgvZywiXFwoIikucmVwbGFjZSgvXCkvZywiXFwpIikpLFkuaW5mbygiYXJyb3dUeXBlU3RhcnQiLGUuYXJyb3dUeXBlU3RhcnQpLFkuaW5mbygiYXJyb3dUeXBlRW5kIixlLmFycm93VHlwZUVuZCksUVooYixlLFQscyxuKTtsZXQgRT17fTtyZXR1cm4gaCYmKEUudXBkYXRlZFBhdGg9dSksRS5vcmlnaW5hbFBhdGg9ZS5wb2ludHMsRX0sImluc2VydEVkZ2UiKX0pO3ZhciBwOWUsbTllLGc5ZSx5OWUsdjllLHg5ZSxiOWUsdzllLFQ5ZSxrOWUsRTllLGd3LGZMPU0oKCk9PnsidXNlIHN0cmljdCI7dXQoKTtwOWU9bygodCxlLHIsbik9PntlLmZvckVhY2goaT0+e0U5ZVtpXSh0LHIsbil9KX0sImluc2VydE1hcmtlcnMiKSxtOWU9bygodCxlLHIpPT57WS50cmFjZSgiTWFraW5nIG1hcmtlcnMgZm9yICIsciksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItZXh0ZW5zaW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBleHRlbnNpb24gIitlKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDcgTDE4LDEzIFYgMSBaIiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItZXh0ZW5zaW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZXh0ZW5zaW9uICIrZSkuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIFYgMTMgTDE4LDcgWiIpfSwiZXh0ZW5zaW9uIiksZzllPW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWNvbXBvc2l0aW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjb21wb3NpdGlvbiAiK2UpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1jb21wb3NpdGlvbkVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNvbXBvc2l0aW9uICIrZSkuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpfSwiY29tcG9zaXRpb24iKSx5OWU9bygodCxlLHIpPT57dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItYWdncmVnYXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGFnZ3JlZ2F0aW9uICIrZSkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWFnZ3JlZ2F0aW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgYWdncmVnYXRpb24gIitlKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIil9LCJhZ2dyZWdhdGlvbiIpLHY5ZT1vKCh0LGUscik9Pnt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1kZXBlbmRlbmN5U3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBkZXBlbmRlbmN5ICIrZSkuYXR0cigicmVmWCIsNikuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSA1LDcgTDksMTMgTDEsNyBMOSwxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1kZXBlbmRlbmN5RW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZGVwZW5kZW5jeSAiK2UpLmF0dHIoInJlZlgiLDEzKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSwiZGVwZW5kZW5jeSIpLHg5ZT1vKCh0LGUscik9Pnt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1sb2xsaXBvcFN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgbG9sbGlwb3AgIitlKS5hdHRyKCJyZWZYIiwxMykuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigiZmlsbCIsInRyYW5zcGFyZW50IikuYXR0cigiY3giLDcpLmF0dHIoImN5Iiw3KS5hdHRyKCJyIiw2KSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1sb2xsaXBvcEVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGxvbGxpcG9wICIrZSkuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigiZmlsbCIsInRyYW5zcGFyZW50IikuYXR0cigiY3giLDcpLmF0dHIoImN5Iiw3KS5hdHRyKCJyIiw2KX0sImxvbGxpcG9wIiksYjllPW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLXBvaW50RW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsNSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiw4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpLHQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLXBvaW50U3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw0LjUpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCA1IEwgMTAgMTAgTCAxMCAwIHoiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LCJwb2ludCIpLHc5ZT1vKCh0LGUscik9Pnt0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1jaXJjbGVFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiwxMSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLCI1IikuYXR0cigiY3kiLCI1IikuYXR0cigiciIsIjUiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksdC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItY2lyY2xlU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiwtMSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLCI1IikuYXR0cigiY3kiLCI1IikuYXR0cigiciIsIjUiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LCJjaXJjbGUiKSxUOWU9bygodCxlLHIpPT57dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItY3Jvc3NFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjcm9zcyAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTEgMTEiKS5hdHRyKCJyZWZYIiwxMikuYXR0cigicmVmWSIsNS4yKS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIGwgOSw5IE0gMTAsMSBsIC05LDkiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksdC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItY3Jvc3NTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNyb3NzICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMSAxMSIpLmF0dHIoInJlZlgiLC0xKS5hdHRyKCJyZWZZIiw1LjIpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgbCA5LDkgTSAxMCwxIGwgLTksOSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX0sImNyb3NzIiksazllPW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWJhcmJFbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE0KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE5LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LCJiYXJiIiksRTllPXtleHRlbnNpb246bTllLGNvbXBvc2l0aW9uOmc5ZSxhZ2dyZWdhdGlvbjp5OWUsZGVwZW5kZW5jeTp2OWUsbG9sbGlwb3A6eDllLHBvaW50OmI5ZSxjaXJjbGU6dzllLGNyb3NzOlQ5ZSxiYXJiOms5ZX0sZ3c9cDllfSk7YXN5bmMgZnVuY3Rpb24gTG0odCxlLHIpe2xldCBuLGk7ZS5zaGFwZT09PSJyZWN0IiYmKGUucngmJmUucnk/ZS5zaGFwZT0icm91bmRlZFJlY3QiOmUuc2hhcGU9InNxdWFyZVJlY3QiKTtsZXQgYT1lLnNoYXBlPyQ5W2Uuc2hhcGVdOnZvaWQgMDtpZighYSl0aHJvdyBuZXcgRXJyb3IoYE5vIHN1Y2ggc2hhcGU6ICR7ZS5zaGFwZX0uIFBsZWFzZSBjaGVjayB5b3VyIHN5bnRheC5gKTtpZihlLmxpbmspe2xldCBzO3IuY29uZmlnLnNlY3VyaXR5TGV2ZWw9PT0ic2FuZGJveCI/cz0iX3RvcCI6ZS5saW5rVGFyZ2V0JiYocz1lLmxpbmtUYXJnZXR8fCJfYmxhbmsiKSxuPXQuaW5zZXJ0KCJzdmc6YSIpLmF0dHIoInhsaW5rOmhyZWYiLGUubGluaykuYXR0cigidGFyZ2V0IixzPz9udWxsKSxpPWF3YWl0IGEobixlLHIpfWVsc2UgaT1hd2FpdCBhKHQsZSxyKSxuPWk7cmV0dXJuIGUudG9vbHRpcCYmaS5hdHRyKCJ0aXRsZSIsZS50b29sdGlwKSx5dy5zZXQoZS5pZCxuKSxlLmhhdmVDYWxsYmFjayYmbi5hdHRyKCJjbGFzcyIsbi5hdHRyKCJjbGFzcyIpKyIgY2xpY2thYmxlIiksbn12YXIgeXcsckosbkosVXYsdnc9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt1dCgpO1Y5KCk7eXc9bmV3IE1hcDtvKExtLCJpbnNlcnROb2RlIik7cko9bygodCxlKT0+e3l3LnNldChlLmlkLHQpfSwic2V0Tm9kZUVsZW0iKSxuSj1vKCgpPT57eXcuY2xlYXIoKX0sImNsZWFyIiksVXY9byh0PT57bGV0IGU9eXcuZ2V0KHQuaWQpO1kudHJhY2UoIlRyYW5zZm9ybWluZyBub2RlIix0LmRpZmYsdCwidHJhbnNsYXRlKCIrKHQueC10LndpZHRoLzItNSkrIiwgIit0LndpZHRoLzIrIikiKTtsZXQgcj04LG49dC5kaWZmfHwwO3JldHVybiB0LmNsdXN0ZXJOb2RlP2UuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHQueCtuLXQud2lkdGgvMikrIiwgIisodC55LXQuaGVpZ2h0LzItcikrIikiKTplLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QueCsiLCAiK3QueSsiKSIpLG59LCJwb3NpdGlvbk5vZGUiKX0pO3ZhciBpSixhSj1NKCgpPT57InVzZSBzdHJpY3QiO1phKCk7ZnIoKTt1dCgpO2x3KCk7aEwoKTtmTCgpO3Z3KCk7T3QoKTtocigpO2lKPXtjb21tb246cWUsZ2V0Q29uZmlnOkNyLGluc2VydENsdXN0ZXI6X20saW5zZXJ0RWRnZTptdyxpbnNlcnRFZGdlTGFiZWw6ZHcsaW5zZXJ0TWFya2VyczpndyxpbnNlcnROb2RlOkxtLGludGVycG9sYXRlVG9DdXJ2ZTpKXyxsYWJlbEhlbHBlcjpzdCxsb2c6WSxwb3NpdGlvbkVkZ2VMYWJlbDpwd319KTtmdW5jdGlvbiBDOWUodCl7cmV0dXJuIHR5cGVvZiB0PT0ic3ltYm9sInx8ZWkodCkmJmdhKHQpPT1TOWV9dmFyIFM5ZSxjbyx6ZD1NKCgpPT57InVzZSBzdHJpY3QiO0x1KCk7em8oKTtTOWU9IltvYmplY3QgU3ltYm9sXSI7byhDOWUsImlzU3ltYm9sIik7Y289QzllfSk7ZnVuY3Rpb24gQTllKHQsZSl7Zm9yKHZhciByPS0xLG49dD09bnVsbD8wOnQubGVuZ3RoLGk9QXJyYXkobik7KytyPG47KWlbcl09ZSh0W3JdLHIsdCk7cmV0dXJuIGl9dmFyIFBzLEdkPU0oKCk9PnsidXNlIHN0cmljdCI7byhBOWUsImFycmF5TWFwIik7UHM9QTllfSk7ZnVuY3Rpb24gbEoodCl7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXJldHVybiB0O2lmKER0KHQpKXJldHVybiBQcyh0LGxKKSsiIjtpZihjbyh0KSlyZXR1cm4gb0o/b0ouY2FsbCh0KToiIjt2YXIgZT10KyIiO3JldHVybiBlPT0iMCImJjEvdD09LV85ZT8iLTAiOmV9dmFyIF85ZSxzSixvSixjSix1Sj1NKCgpPT57InVzZSBzdHJpY3QiO0NkKCk7R2QoKTtIbigpO3pkKCk7XzllPTEvMCxzSj1pYT9pYS5wcm90b3R5cGU6dm9pZCAwLG9KPXNKP3NKLnRvU3RyaW5nOnZvaWQgMDtvKGxKLCJiYXNlVG9TdHJpbmciKTtjSj1sSn0pO2Z1bmN0aW9uIEQ5ZSh0KXtmb3IodmFyIGU9dC5sZW5ndGg7ZS0tJiZMOWUudGVzdCh0LmNoYXJBdChlKSk7KTtyZXR1cm4gZX12YXIgTDllLGhKLGZKPU0oKCk9PnsidXNlIHN0cmljdCI7TDllPS9ccy87byhEOWUsInRyaW1tZWRFbmRJbmRleCIpO2hKPUQ5ZX0pO2Z1bmN0aW9uIFI5ZSh0KXtyZXR1cm4gdCYmdC5zbGljZSgwLGhKKHQpKzEpLnJlcGxhY2UoTjllLCIiKX12YXIgTjllLGRKLHBKPU0oKCk9PnsidXNlIHN0cmljdCI7ZkooKTtOOWU9L15ccysvO28oUjllLCJiYXNlVHJpbSIpO2RKPVI5ZX0pO2Z1bmN0aW9uIEI5ZSh0KXtpZih0eXBlb2YgdD09Im51bWJlciIpcmV0dXJuIHQ7aWYoY28odCkpcmV0dXJuIG1KO2lmKHhuKHQpKXt2YXIgZT10eXBlb2YgdC52YWx1ZU9mPT0iZnVuY3Rpb24iP3QudmFsdWVPZigpOnQ7dD14bihlKT9lKyIiOmV9aWYodHlwZW9mIHQhPSJzdHJpbmciKXJldHVybiB0PT09MD90Oit0O3Q9ZEoodCk7dmFyIHI9STllLnRlc3QodCk7cmV0dXJuIHJ8fE85ZS50ZXN0KHQpP1A5ZSh0LnNsaWNlKDIpLHI/Mjo4KTpNOWUudGVzdCh0KT9tSjordH12YXIgbUosTTllLEk5ZSxPOWUsUDllLGdKLHlKPU0oKCk9PnsidXNlIHN0cmljdCI7cEooKTtpbygpO3pkKCk7bUo9TmFOLE05ZT0vXlstK10weFswLTlhLWZdKyQvaSxJOWU9L14wYlswMV0rJC9pLE85ZT0vXjBvWzAtN10rJC9pLFA5ZT1wYXJzZUludDtvKEI5ZSwidG9OdW1iZXIiKTtnSj1COWV9KTtmdW5jdGlvbiB6OWUodCl7aWYoIXQpcmV0dXJuIHQ9PT0wP3Q6MDtpZih0PWdKKHQpLHQ9PT12Snx8dD09PS12Sil7dmFyIGU9dDwwPy0xOjE7cmV0dXJuIGUqRjllfXJldHVybiB0PT09dD90OjB9dmFyIHZKLEY5ZSxEbSxkTD1NKCgpPT57InVzZSBzdHJpY3QiO3lKKCk7dko9MS8wLEY5ZT0xNzk3NjkzMTM0ODYyMzE1N2UyOTI7byh6OWUsInRvRmluaXRlIik7RG09ejllfSk7ZnVuY3Rpb24gRzllKHQpe3ZhciBlPURtKHQpLHI9ZSUxO3JldHVybiBlPT09ZT9yP2UtcjplOjB9dmFyIF9jLE5tPU0oKCk9PnsidXNlIHN0cmljdCI7ZEwoKTtvKEc5ZSwidG9JbnRlZ2VyIik7X2M9RzllfSk7dmFyICQ5ZSx4dyx4Sj1NKCgpPT57InVzZSBzdHJpY3QiO09oKCk7Qm8oKTskOWU9QXMob2ksIldlYWtNYXAiKSx4dz0kOWV9KTtmdW5jdGlvbiBWOWUoKXt9dmFyIHRpLHBMPU0oKCk9PnsidXNlIHN0cmljdCI7byhWOWUsIm5vb3AiKTt0aT1WOWV9KTtmdW5jdGlvbiBVOWUodCxlKXtmb3IodmFyIHI9LTEsbj10PT1udWxsPzA6dC5sZW5ndGg7KytyPG4mJmUodFtyXSxyLHQpIT09ITE7KTtyZXR1cm4gdH12YXIgYncsbUw9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKFU5ZSwiYXJyYXlFYWNoIik7Ync9VTllfSk7ZnVuY3Rpb24gSDllKHQsZSxyLG4pe2Zvcih2YXIgaT10Lmxlbmd0aCxhPXIrKG4/MTotMSk7bj9hLS06KythPGk7KWlmKGUodFthXSxhLHQpKXJldHVybiBhO3JldHVybi0xfXZhciB3dyxnTD1NKCgpPT57InVzZSBzdHJpY3QiO28oSDllLCJiYXNlRmluZEluZGV4Iik7d3c9SDllfSk7ZnVuY3Rpb24gVzllKHQpe3JldHVybiB0IT09dH12YXIgYkosd0o9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKFc5ZSwiYmFzZUlzTmFOIik7Yko9VzllfSk7ZnVuY3Rpb24gWTllKHQsZSxyKXtmb3IodmFyIG49ci0xLGk9dC5sZW5ndGg7KytuPGk7KWlmKHRbbl09PT1lKXJldHVybiBuO3JldHVybi0xfXZhciBUSixrSj1NKCgpPT57InVzZSBzdHJpY3QiO28oWTllLCJzdHJpY3RJbmRleE9mIik7VEo9WTllfSk7ZnVuY3Rpb24gcTllKHQsZSxyKXtyZXR1cm4gZT09PWU/VEoodCxlLHIpOnd3KHQsYkoscil9dmFyIFJtLFR3PU0oKCk9PnsidXNlIHN0cmljdCI7Z0woKTt3SigpO2tKKCk7byhxOWUsImJhc2VJbmRleE9mIik7Um09cTllfSk7ZnVuY3Rpb24gWDllKHQsZSl7dmFyIHI9dD09bnVsbD8wOnQubGVuZ3RoO3JldHVybiEhciYmUm0odCxlLDApPi0xfXZhciBrdyx5TD1NKCgpPT57InVzZSBzdHJpY3QiO1R3KCk7byhYOWUsImFycmF5SW5jbHVkZXMiKTtrdz1YOWV9KTt2YXIgajllLEVKLFNKPU0oKCk9PnsidXNlIHN0cmljdCI7R18oKTtqOWU9bTUoT2JqZWN0LmtleXMsT2JqZWN0KSxFSj1qOWV9KTtmdW5jdGlvbiBaOWUodCl7aWYoIVRjKHQpKXJldHVybiBFSih0KTt2YXIgZT1bXTtmb3IodmFyIHIgaW4gT2JqZWN0KHQpKVE5ZS5jYWxsKHQscikmJnIhPSJjb25zdHJ1Y3RvciImJmUucHVzaChyKTtyZXR1cm4gZX12YXIgSzllLFE5ZSxNbSxFdz1NKCgpPT57InVzZSBzdHJpY3QiO2NtKCk7U0ooKTtLOWU9T2JqZWN0LnByb3RvdHlwZSxROWU9SzllLmhhc093blByb3BlcnR5O28oWjllLCJiYXNlS2V5cyIpO01tPVo5ZX0pO2Z1bmN0aW9uIEo5ZSh0KXtyZXR1cm4gbGkodCk/YjUodCk6TW0odCl9dmFyIEdyLExjPU0oKCk9PnsidXNlIHN0cmljdCI7V18oKTtFdygpO0dvKCk7byhKOWUsImtleXMiKTtHcj1KOWV9KTt2YXIgZUxlLHRMZSxyTGUsdmEsQ0o9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtkbSgpO05kKCk7al8oKTtHbygpO2NtKCk7TGMoKTtlTGU9T2JqZWN0LnByb3RvdHlwZSx0TGU9ZUxlLmhhc093blByb3BlcnR5LHJMZT1rNShmdW5jdGlvbih0LGUpe2lmKFRjKGUpfHxsaShlKSl7VW8oZSxHcihlKSx0KTtyZXR1cm59Zm9yKHZhciByIGluIGUpdExlLmNhbGwoZSxyKSYma2ModCxyLGVbcl0pfSksdmE9ckxlfSk7ZnVuY3Rpb24gYUxlKHQsZSl7aWYoRHQodCkpcmV0dXJuITE7dmFyIHI9dHlwZW9mIHQ7cmV0dXJuIHI9PSJudW1iZXIifHxyPT0ic3ltYm9sInx8cj09ImJvb2xlYW4ifHx0PT1udWxsfHxjbyh0KT8hMDppTGUudGVzdCh0KXx8IW5MZS50ZXN0KHQpfHxlIT1udWxsJiZ0IGluIE9iamVjdChlKX12YXIgbkxlLGlMZSxJbSxTdz1NKCgpPT57InVzZSBzdHJpY3QiO0huKCk7emQoKTtuTGU9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8saUxlPS9eXHcqJC87byhhTGUsImlzS2V5Iik7SW09YUxlfSk7ZnVuY3Rpb24gb0xlKHQpe3ZhciBlPXRtKHQsZnVuY3Rpb24obil7cmV0dXJuIHIuc2l6ZT09PXNMZSYmci5jbGVhcigpLG59KSxyPWUuY2FjaGU7cmV0dXJuIGV9dmFyIHNMZSxBSixfSj1NKCgpPT57InVzZSBzdHJpY3QiO01fKCk7c0xlPTUwMDtvKG9MZSwibWVtb2l6ZUNhcHBlZCIpO0FKPW9MZX0pO3ZhciBsTGUsY0xlLHVMZSxMSixESj1NKCgpPT57InVzZSBzdHJpY3QiO19KKCk7bExlPS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLGNMZT0vXFwoXFwpPy9nLHVMZT1BSihmdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gdC5jaGFyQ29kZUF0KDApPT09NDYmJmUucHVzaCgiIiksdC5yZXBsYWNlKGxMZSxmdW5jdGlvbihyLG4saSxhKXtlLnB1c2goaT9hLnJlcGxhY2UoY0xlLCIkMSIpOm58fHIpfSksZX0pLExKPXVMZX0pO2Z1bmN0aW9uIGhMZSh0KXtyZXR1cm4gdD09bnVsbD8iIjpjSih0KX12YXIgQ3csdkw9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt1SigpO28oaExlLCJ0b1N0cmluZyIpO0N3PWhMZX0pO2Z1bmN0aW9uIGZMZSh0LGUpe3JldHVybiBEdCh0KT90OkltKHQsZSk/W3RdOkxKKEN3KHQpKX12YXIgWmgsSHY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIbigpO1N3KCk7REooKTt2TCgpO28oZkxlLCJjYXN0UGF0aCIpO1poPWZMZX0pO2Z1bmN0aW9uIHBMZSh0KXtpZih0eXBlb2YgdD09InN0cmluZyJ8fGNvKHQpKXJldHVybiB0O3ZhciBlPXQrIiI7cmV0dXJuIGU9PSIwIiYmMS90PT0tZExlPyItMCI6ZX12YXIgZExlLERjLE9tPU0oKCk9PnsidXNlIHN0cmljdCI7emQoKTtkTGU9MS8wO28ocExlLCJ0b0tleSIpO0RjPXBMZX0pO2Z1bmN0aW9uIG1MZSh0LGUpe2U9WmgoZSx0KTtmb3IodmFyIHI9MCxuPWUubGVuZ3RoO3QhPW51bGwmJnI8bjspdD10W0RjKGVbcisrXSldO3JldHVybiByJiZyPT1uP3Q6dm9pZCAwfXZhciBKaCxXdj1NKCgpPT57InVzZSBzdHJpY3QiO0h2KCk7T20oKTtvKG1MZSwiYmFzZUdldCIpO0poPW1MZX0pO2Z1bmN0aW9uIGdMZSh0LGUscil7dmFyIG49dD09bnVsbD92b2lkIDA6SmgodCxlKTtyZXR1cm4gbj09PXZvaWQgMD9yOm59dmFyIE5KLFJKPU0oKCk9PnsidXNlIHN0cmljdCI7V3YoKTtvKGdMZSwiZ2V0Iik7Tko9Z0xlfSk7ZnVuY3Rpb24geUxlKHQsZSl7Zm9yKHZhciByPS0xLG49ZS5sZW5ndGgsaT10Lmxlbmd0aDsrK3I8bjspdFtpK3JdPWVbcl07cmV0dXJuIHR9dmFyIFBtLEF3PU0oKCk9PnsidXNlIHN0cmljdCI7byh5TGUsImFycmF5UHVzaCIpO1BtPXlMZX0pO2Z1bmN0aW9uIHZMZSh0KXtyZXR1cm4gRHQodCl8fE1sKHQpfHwhIShNSiYmdCYmdFtNSl0pfXZhciBNSixJSixPSj1NKCgpPT57InVzZSBzdHJpY3QiO0NkKCk7dW0oKTtIbigpO01KPWlhP2lhLmlzQ29uY2F0U3ByZWFkYWJsZTp2b2lkIDA7byh2TGUsImlzRmxhdHRlbmFibGUiKTtJSj12TGV9KTtmdW5jdGlvbiBQSih0LGUscixuLGkpe3ZhciBhPS0xLHM9dC5sZW5ndGg7Zm9yKHJ8fChyPUlKKSxpfHwoaT1bXSk7KythPHM7KXt2YXIgbD10W2FdO2U+MCYmcihsKT9lPjE/UEoobCxlLTEscixuLGkpOlBtKGksbCk6bnx8KGlbaS5sZW5ndGhdPWwpfXJldHVybiBpfXZhciBOYyxCbT1NKCgpPT57InVzZSBzdHJpY3QiO0F3KCk7T0ooKTtvKFBKLCJiYXNlRmxhdHRlbiIpO05jPVBKfSk7ZnVuY3Rpb24geExlKHQpe3ZhciBlPXQ9PW51bGw/MDp0Lmxlbmd0aDtyZXR1cm4gZT9OYyh0LDEpOltdfXZhciBXcixfdz1NKCgpPT57InVzZSBzdHJpY3QiO0JtKCk7byh4TGUsImZsYXR0ZW4iKTtXcj14TGV9KTtmdW5jdGlvbiBiTGUodCl7cmV0dXJuIFQ1KHc1KHQsdm9pZCAwLFdyKSx0KyIiKX12YXIgQkosRko9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtfdygpO1lfKCk7WF8oKTtvKGJMZSwiZmxhdFJlc3QiKTtCSj1iTGV9KTtmdW5jdGlvbiB3TGUodCxlLHIpe3ZhciBuPS0xLGk9dC5sZW5ndGg7ZTwwJiYoZT0tZT5pPzA6aStlKSxyPXI+aT9pOnIscjwwJiYocis9aSksaT1lPnI/MDpyLWU+Pj4wLGU+Pj49MDtmb3IodmFyIGE9QXJyYXkoaSk7KytuPGk7KWFbbl09dFtuK2VdO3JldHVybiBhfXZhciBMdyx4TD1NKCgpPT57InVzZSBzdHJpY3QiO28od0xlLCJiYXNlU2xpY2UiKTtMdz13TGV9KTtmdW5jdGlvbiBETGUodCl7cmV0dXJuIExMZS50ZXN0KHQpfXZhciBUTGUsa0xlLEVMZSxTTGUsQ0xlLEFMZSxfTGUsTExlLHpKLEdKPU0oKCk9PnsidXNlIHN0cmljdCI7VExlPSJcXHVkODAwLVxcdWRmZmYiLGtMZT0iXFx1MDMwMC1cXHUwMzZmIixFTGU9IlxcdWZlMjAtXFx1ZmUyZiIsU0xlPSJcXHUyMGQwLVxcdTIwZmYiLENMZT1rTGUrRUxlK1NMZSxBTGU9IlxcdWZlMGVcXHVmZTBmIixfTGU9IlxcdTIwMGQiLExMZT1SZWdFeHAoIlsiK19MZStUTGUrQ0xlK0FMZSsiXSIpO28oRExlLCJoYXNVbmljb2RlIik7eko9RExlfSk7ZnVuY3Rpb24gTkxlKHQsZSxyLG4pe3ZhciBpPS0xLGE9dD09bnVsbD8wOnQubGVuZ3RoO2ZvcihuJiZhJiYocj10WysraV0pOysraTxhOylyPWUocix0W2ldLGksdCk7cmV0dXJuIHJ9dmFyICRKLFZKPU0oKCk9PnsidXNlIHN0cmljdCI7byhOTGUsImFycmF5UmVkdWNlIik7JEo9TkxlfSk7ZnVuY3Rpb24gUkxlKHQsZSl7cmV0dXJuIHQmJlVvKGUsR3IoZSksdCl9dmFyIFVKLEhKPU0oKCk9PnsidXNlIHN0cmljdCI7TmQoKTtMYygpO28oUkxlLCJiYXNlQXNzaWduIik7VUo9UkxlfSk7ZnVuY3Rpb24gTUxlKHQsZSl7cmV0dXJuIHQmJlVvKGUsX3MoZSksdCl9dmFyIFdKLFlKPU0oKCk9PnsidXNlIHN0cmljdCI7TmQoKTtWaCgpO28oTUxlLCJiYXNlQXNzaWduSW4iKTtXSj1NTGV9KTtmdW5jdGlvbiBJTGUodCxlKXtmb3IodmFyIHI9LTEsbj10PT1udWxsPzA6dC5sZW5ndGgsaT0wLGE9W107KytyPG47KXt2YXIgcz10W3JdO2UocyxyLHQpJiYoYVtpKytdPXMpfXJldHVybiBhfXZhciBGbSxEdz1NKCgpPT57InVzZSBzdHJpY3QiO28oSUxlLCJhcnJheUZpbHRlciIpO0ZtPUlMZX0pO2Z1bmN0aW9uIE9MZSgpe3JldHVybltdfXZhciBOdyxiTD1NKCgpPT57InVzZSBzdHJpY3QiO28oT0xlLCJzdHViQXJyYXkiKTtOdz1PTGV9KTt2YXIgUExlLEJMZSxxSixGTGUsem0sUnc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtEdygpO2JMKCk7UExlPU9iamVjdC5wcm90b3R5cGUsQkxlPVBMZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxxSj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLEZMZT1xSj9mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD9bXToodD1PYmplY3QodCksRm0ocUoodCksZnVuY3Rpb24oZSl7cmV0dXJuIEJMZS5jYWxsKHQsZSl9KSl9Ok53LHptPUZMZX0pO2Z1bmN0aW9uIHpMZSh0LGUpe3JldHVybiBVbyh0LHptKHQpLGUpfXZhciBYSixqSj1NKCgpPT57InVzZSBzdHJpY3QiO05kKCk7UncoKTtvKHpMZSwiY29weVN5bWJvbHMiKTtYSj16TGV9KTt2YXIgR0xlLCRMZSxNdyx3TD1NKCgpPT57InVzZSBzdHJpY3QiO0F3KCk7ZzUoKTtSdygpO2JMKCk7R0xlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsJExlPUdMZT9mdW5jdGlvbih0KXtmb3IodmFyIGU9W107dDspUG0oZSx6bSh0KSksdD1sbSh0KTtyZXR1cm4gZX06TncsTXc9JExlfSk7ZnVuY3Rpb24gVkxlKHQsZSl7cmV0dXJuIFVvKHQsTXcodCksZSl9dmFyIEtKLFFKPU0oKCk9PnsidXNlIHN0cmljdCI7TmQoKTt3TCgpO28oVkxlLCJjb3B5U3ltYm9sc0luIik7S0o9VkxlfSk7ZnVuY3Rpb24gVUxlKHQsZSxyKXt2YXIgbj1lKHQpO3JldHVybiBEdCh0KT9uOlBtKG4scih0KSl9dmFyIEl3LFRMPU0oKCk9PnsidXNlIHN0cmljdCI7QXcoKTtIbigpO28oVUxlLCJiYXNlR2V0QWxsS2V5cyIpO0l3PVVMZX0pO2Z1bmN0aW9uIEhMZSh0KXtyZXR1cm4gSXcodCxHcix6bSl9dmFyIFl2LGtMPU0oKCk9PnsidXNlIHN0cmljdCI7VEwoKTtSdygpO0xjKCk7byhITGUsImdldEFsbEtleXMiKTtZdj1ITGV9KTtmdW5jdGlvbiBXTGUodCl7cmV0dXJuIEl3KHQsX3MsTXcpfXZhciBPdyxFTD1NKCgpPT57InVzZSBzdHJpY3QiO1RMKCk7d0woKTtWaCgpO28oV0xlLCJnZXRBbGxLZXlzSW4iKTtPdz1XTGV9KTt2YXIgWUxlLFB3LFpKPU0oKCk9PnsidXNlIHN0cmljdCI7T2goKTtCbygpO1lMZT1BcyhvaSwiRGF0YVZpZXciKSxQdz1ZTGV9KTt2YXIgcUxlLEJ3LEpKPU0oKCk9PnsidXNlIHN0cmljdCI7T2goKTtCbygpO3FMZT1BcyhvaSwiUHJvbWlzZSIpLEJ3PXFMZX0pO3ZhciBYTGUsZWYsU0w9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtPaCgpO0JvKCk7WExlPUFzKG9pLCJTZXQiKSxlZj1YTGV9KTt2YXIgZWVlLGpMZSx0ZWUscmVlLG5lZSxpZWUsS0xlLFFMZSxaTGUsSkxlLGVEZSwkZCx1byxWZD1NKCgpPT57InVzZSBzdHJpY3QiO1pKKCk7bDUoKTtKSigpO1NMKCk7eEooKTtMdSgpO0RfKCk7ZWVlPSJbb2JqZWN0IE1hcF0iLGpMZT0iW29iamVjdCBPYmplY3RdIix0ZWU9IltvYmplY3QgUHJvbWlzZV0iLHJlZT0iW29iamVjdCBTZXRdIixuZWU9IltvYmplY3QgV2Vha01hcF0iLGllZT0iW29iamVjdCBEYXRhVmlld10iLEtMZT1EdShQdyksUUxlPUR1KEZoKSxaTGU9RHUoQncpLEpMZT1EdShlZiksZURlPUR1KHh3KSwkZD1nYTsoUHcmJiRkKG5ldyBQdyhuZXcgQXJyYXlCdWZmZXIoMSkpKSE9aWVlfHxGaCYmJGQobmV3IEZoKSE9ZWVlfHxCdyYmJGQoQncucmVzb2x2ZSgpKSE9dGVlfHxlZiYmJGQobmV3IGVmKSE9cmVlfHx4dyYmJGQobmV3IHh3KSE9bmVlKSYmKCRkPW8oZnVuY3Rpb24odCl7dmFyIGU9Z2EodCkscj1lPT1qTGU/dC5jb25zdHJ1Y3Rvcjp2b2lkIDAsbj1yP0R1KHIpOiIiO2lmKG4pc3dpdGNoKG4pe2Nhc2UgS0xlOnJldHVybiBpZWU7Y2FzZSBRTGU6cmV0dXJuIGVlZTtjYXNlIFpMZTpyZXR1cm4gdGVlO2Nhc2UgSkxlOnJldHVybiByZWU7Y2FzZSBlRGU6cmV0dXJuIG5lZX1yZXR1cm4gZX0sImdldFRhZyIpKTt1bz0kZH0pO2Z1bmN0aW9uIG5EZSh0KXt2YXIgZT10Lmxlbmd0aCxyPW5ldyB0LmNvbnN0cnVjdG9yKGUpO3JldHVybiBlJiZ0eXBlb2YgdFswXT09InN0cmluZyImJnJEZS5jYWxsKHQsImluZGV4IikmJihyLmluZGV4PXQuaW5kZXgsci5pbnB1dD10LmlucHV0KSxyfXZhciB0RGUsckRlLGFlZSxzZWU9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt0RGU9T2JqZWN0LnByb3RvdHlwZSxyRGU9dERlLmhhc093blByb3BlcnR5O28obkRlLCJpbml0Q2xvbmVBcnJheSIpO2FlZT1uRGV9KTtmdW5jdGlvbiBpRGUodCxlKXt2YXIgcj1lP29tKHQuYnVmZmVyKTp0LmJ1ZmZlcjtyZXR1cm4gbmV3IHQuY29uc3RydWN0b3Iocix0LmJ5dGVPZmZzZXQsdC5ieXRlTGVuZ3RoKX12YXIgb2VlLGxlZT1NKCgpPT57InVzZSBzdHJpY3QiO2Y1KCk7byhpRGUsImNsb25lRGF0YVZpZXciKTtvZWU9aURlfSk7ZnVuY3Rpb24gc0RlKHQpe3ZhciBlPW5ldyB0LmNvbnN0cnVjdG9yKHQuc291cmNlLGFEZS5leGVjKHQpKTtyZXR1cm4gZS5sYXN0SW5kZXg9dC5sYXN0SW5kZXgsZX12YXIgYURlLGNlZSx1ZWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjthRGU9L1x3KiQvO28oc0RlLCJjbG9uZVJlZ0V4cCIpO2NlZT1zRGV9KTtmdW5jdGlvbiBvRGUodCl7cmV0dXJuIGZlZT9PYmplY3QoZmVlLmNhbGwodCkpOnt9fXZhciBoZWUsZmVlLGRlZSxwZWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtDZCgpO2hlZT1pYT9pYS5wcm90b3R5cGU6dm9pZCAwLGZlZT1oZWU/aGVlLnZhbHVlT2Y6dm9pZCAwO28ob0RlLCJjbG9uZVN5bWJvbCIpO2RlZT1vRGV9KTtmdW5jdGlvbiBBRGUodCxlLHIpe3ZhciBuPXQuY29uc3RydWN0b3I7c3dpdGNoKGUpe2Nhc2UgZ0RlOnJldHVybiBvbSh0KTtjYXNlIGxEZTpjYXNlIGNEZTpyZXR1cm4gbmV3IG4oK3QpO2Nhc2UgeURlOnJldHVybiBvZWUodCxyKTtjYXNlIHZEZTpjYXNlIHhEZTpjYXNlIGJEZTpjYXNlIHdEZTpjYXNlIFREZTpjYXNlIGtEZTpjYXNlIEVEZTpjYXNlIFNEZTpjYXNlIENEZTpyZXR1cm4gZDUodCxyKTtjYXNlIHVEZTpyZXR1cm4gbmV3IG47Y2FzZSBoRGU6Y2FzZSBwRGU6cmV0dXJuIG5ldyBuKHQpO2Nhc2UgZkRlOnJldHVybiBjZWUodCk7Y2FzZSBkRGU6cmV0dXJuIG5ldyBuO2Nhc2UgbURlOnJldHVybiBkZWUodCl9fXZhciBsRGUsY0RlLHVEZSxoRGUsZkRlLGREZSxwRGUsbURlLGdEZSx5RGUsdkRlLHhEZSxiRGUsd0RlLFREZSxrRGUsRURlLFNEZSxDRGUsbWVlLGdlZT1NKCgpPT57InVzZSBzdHJpY3QiO2Y1KCk7bGVlKCk7dWVlKCk7cGVlKCk7Rl8oKTtsRGU9IltvYmplY3QgQm9vbGVhbl0iLGNEZT0iW29iamVjdCBEYXRlXSIsdURlPSJbb2JqZWN0IE1hcF0iLGhEZT0iW29iamVjdCBOdW1iZXJdIixmRGU9IltvYmplY3QgUmVnRXhwXSIsZERlPSJbb2JqZWN0IFNldF0iLHBEZT0iW29iamVjdCBTdHJpbmddIixtRGU9IltvYmplY3QgU3ltYm9sXSIsZ0RlPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIseURlPSJbb2JqZWN0IERhdGFWaWV3XSIsdkRlPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLHhEZT0iW29iamVjdCBGbG9hdDY0QXJyYXldIixiRGU9IltvYmplY3QgSW50OEFycmF5XSIsd0RlPSJbb2JqZWN0IEludDE2QXJyYXldIixURGU9IltvYmplY3QgSW50MzJBcnJheV0iLGtEZT0iW29iamVjdCBVaW50OEFycmF5XSIsRURlPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsU0RlPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsQ0RlPSJbb2JqZWN0IFVpbnQzMkFycmF5XSI7byhBRGUsImluaXRDbG9uZUJ5VGFnIik7bWVlPUFEZX0pO2Z1bmN0aW9uIExEZSh0KXtyZXR1cm4gZWkodCkmJnVvKHQpPT1fRGV9dmFyIF9EZSx5ZWUsdmVlPU0oKCk9PnsidXNlIHN0cmljdCI7VmQoKTt6bygpO19EZT0iW29iamVjdCBNYXBdIjtvKExEZSwiYmFzZUlzTWFwIik7eWVlPUxEZX0pO3ZhciB4ZWUsRERlLGJlZSx3ZWU9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt2ZWUoKTtEZCgpO3Z2KCk7eGVlPVZvJiZWby5pc01hcCxERGU9eGVlPyRvKHhlZSk6eWVlLGJlZT1ERGV9KTtmdW5jdGlvbiBSRGUodCl7cmV0dXJuIGVpKHQpJiZ1byh0KT09TkRlfXZhciBORGUsVGVlLGtlZT1NKCgpPT57InVzZSBzdHJpY3QiO1ZkKCk7em8oKTtORGU9IltvYmplY3QgU2V0XSI7byhSRGUsImJhc2VJc1NldCIpO1RlZT1SRGV9KTt2YXIgRWVlLE1EZSxTZWUsQ2VlPU0oKCk9PnsidXNlIHN0cmljdCI7a2VlKCk7RGQoKTt2digpO0VlZT1WbyYmVm8uaXNTZXQsTURlPUVlZT8kbyhFZWUpOlRlZSxTZWU9TURlfSk7ZnVuY3Rpb24gRncodCxlLHIsbixpLGEpe3ZhciBzLGw9ZSZJRGUsdT1lJk9EZSxoPWUmUERlO2lmKHImJihzPWk/cih0LG4saSxhKTpyKHQpKSxzIT09dm9pZCAwKXJldHVybiBzO2lmKCF4bih0KSlyZXR1cm4gdDt2YXIgZj1EdCh0KTtpZihmKXtpZihzPWFlZSh0KSwhbClyZXR1cm4gcDUodCxzKX1lbHNle3ZhciBkPXVvKHQpLHA9ZD09X2VlfHxkPT0kRGU7aWYoSWwodCkpcmV0dXJuIGg1KHQsbCk7aWYoZD09TGVlfHxkPT1BZWV8fHAmJiFpKXtpZihzPXV8fHA/e306eTUodCksIWwpcmV0dXJuIHU/S0oodCxXSihzLHQpKTpYSih0LFVKKHMsdCkpfWVsc2V7aWYoIUFuW2RdKXJldHVybiBpP3Q6e307cz1tZWUodCxkLGwpfX1hfHwoYT1uZXcgYmMpO3ZhciBtPWEuZ2V0KHQpO2lmKG0pcmV0dXJuIG07YS5zZXQodCxzKSxTZWUodCk/dC5mb3JFYWNoKGZ1bmN0aW9uKHYpe3MuYWRkKEZ3KHYsZSxyLHYsdCxhKSl9KTpiZWUodCkmJnQuZm9yRWFjaChmdW5jdGlvbih2LHgpe3Muc2V0KHgsRncodixlLHIseCx0LGEpKX0pO3ZhciBnPWg/dT9PdzpZdjp1P19zOkdyLHk9Zj92b2lkIDA6Zyh0KTtyZXR1cm4gYncoeXx8dCxmdW5jdGlvbih2LHgpe3kmJih4PXYsdj10W3hdKSxrYyhzLHgsRncodixlLHIseCx0LGEpKX0pLHN9dmFyIElEZSxPRGUsUERlLEFlZSxCRGUsRkRlLHpEZSxHRGUsX2VlLCREZSxWRGUsVURlLExlZSxIRGUsV0RlLFlEZSxxRGUsWERlLGpEZSxLRGUsUURlLFpEZSxKRGUsZU5lLHROZSxyTmUsbk5lLGlOZSxhTmUsQW4sencsQ0w9TSgoKT0+eyJ1c2Ugc3RyaWN0IjttdigpO21MKCk7ZG0oKTtISigpO1lKKCk7UF8oKTt6XygpO2pKKCk7UUooKTtrTCgpO0VMKCk7VmQoKTtzZWUoKTtnZWUoKTskXygpO0huKCk7Zm0oKTt3ZWUoKTtpbygpO0NlZSgpO0xjKCk7VmgoKTtJRGU9MSxPRGU9MixQRGU9NCxBZWU9IltvYmplY3QgQXJndW1lbnRzXSIsQkRlPSJbb2JqZWN0IEFycmF5XSIsRkRlPSJbb2JqZWN0IEJvb2xlYW5dIix6RGU9IltvYmplY3QgRGF0ZV0iLEdEZT0iW29iamVjdCBFcnJvcl0iLF9lZT0iW29iamVjdCBGdW5jdGlvbl0iLCREZT0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLFZEZT0iW29iamVjdCBNYXBdIixVRGU9IltvYmplY3QgTnVtYmVyXSIsTGVlPSJbb2JqZWN0IE9iamVjdF0iLEhEZT0iW29iamVjdCBSZWdFeHBdIixXRGU9IltvYmplY3QgU2V0XSIsWURlPSJbb2JqZWN0IFN0cmluZ10iLHFEZT0iW29iamVjdCBTeW1ib2xdIixYRGU9IltvYmplY3QgV2Vha01hcF0iLGpEZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLEtEZT0iW29iamVjdCBEYXRhVmlld10iLFFEZT0iW29iamVjdCBGbG9hdDMyQXJyYXldIixaRGU9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsSkRlPSJbb2JqZWN0IEludDhBcnJheV0iLGVOZT0iW29iamVjdCBJbnQxNkFycmF5XSIsdE5lPSJbb2JqZWN0IEludDMyQXJyYXldIixyTmU9IltvYmplY3QgVWludDhBcnJheV0iLG5OZT0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLGlOZT0iW29iamVjdCBVaW50MTZBcnJheV0iLGFOZT0iW29iamVjdCBVaW50MzJBcnJheV0iLEFuPXt9O0FuW0FlZV09QW5bQkRlXT1BbltqRGVdPUFuW0tEZV09QW5bRkRlXT1Bblt6RGVdPUFuW1FEZV09QW5bWkRlXT1BbltKRGVdPUFuW2VOZV09QW5bdE5lXT1BbltWRGVdPUFuW1VEZV09QW5bTGVlXT1BbltIRGVdPUFuW1dEZV09QW5bWURlXT1BbltxRGVdPUFuW3JOZV09QW5bbk5lXT1BbltpTmVdPUFuW2FOZV09ITA7QW5bR0RlXT1BbltfZWVdPUFuW1hEZV09ITE7byhGdywiYmFzZUNsb25lIik7enc9Rnd9KTtmdW5jdGlvbiBvTmUodCl7cmV0dXJuIHp3KHQsc05lKX12YXIgc05lLHJuLEFMPU0oKCk9PnsidXNlIHN0cmljdCI7Q0woKTtzTmU9NDtvKG9OZSwiY2xvbmUiKTtybj1vTmV9KTtmdW5jdGlvbiB1TmUodCl7cmV0dXJuIHp3KHQsbE5lfGNOZSl9dmFyIGxOZSxjTmUsX0wsRGVlPU0oKCk9PnsidXNlIHN0cmljdCI7Q0woKTtsTmU9MSxjTmU9NDtvKHVOZSwiY2xvbmVEZWVwIik7X0w9dU5lfSk7ZnVuY3Rpb24gaE5lKHQpe2Zvcih2YXIgZT0tMSxyPXQ9PW51bGw/MDp0Lmxlbmd0aCxuPTAsaT1bXTsrK2U8cjspe3ZhciBhPXRbZV07YSYmKGlbbisrXT1hKX1yZXR1cm4gaX12YXIgUmMsTmVlPU0oKCk9PnsidXNlIHN0cmljdCI7byhoTmUsImNvbXBhY3QiKTtSYz1oTmV9KTtmdW5jdGlvbiBkTmUodCl7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KHQsZk5lKSx0aGlzfXZhciBmTmUsUmVlLE1lZT1NKCgpPT57InVzZSBzdHJpY3QiO2ZOZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7byhkTmUsInNldENhY2hlQWRkIik7UmVlPWROZX0pO2Z1bmN0aW9uIHBOZSh0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModCl9dmFyIEllZSxPZWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHBOZSwic2V0Q2FjaGVIYXMiKTtJZWU9cE5lfSk7ZnVuY3Rpb24gR3codCl7dmFyIGU9LTEscj10PT1udWxsPzA6dC5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IF9kOysrZTxyOyl0aGlzLmFkZCh0W2VdKX12YXIgR20sJHc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtjNSgpO01lZSgpO09lZSgpO28oR3csIlNldENhY2hlIik7R3cucHJvdG90eXBlLmFkZD1Hdy5wcm90b3R5cGUucHVzaD1SZWU7R3cucHJvdG90eXBlLmhhcz1JZWU7R209R3d9KTtmdW5jdGlvbiBtTmUodCxlKXtmb3IodmFyIHI9LTEsbj10PT1udWxsPzA6dC5sZW5ndGg7KytyPG47KWlmKGUodFtyXSxyLHQpKXJldHVybiEwO3JldHVybiExfXZhciBWdyxMTD1NKCgpPT57InVzZSBzdHJpY3QiO28obU5lLCJhcnJheVNvbWUiKTtWdz1tTmV9KTtmdW5jdGlvbiBnTmUodCxlKXtyZXR1cm4gdC5oYXMoZSl9dmFyICRtLFV3PU0oKCk9PnsidXNlIHN0cmljdCI7byhnTmUsImNhY2hlSGFzIik7JG09Z05lfSk7ZnVuY3Rpb24geE5lKHQsZSxyLG4saSxhKXt2YXIgcz1yJnlOZSxsPXQubGVuZ3RoLHU9ZS5sZW5ndGg7aWYobCE9dSYmIShzJiZ1PmwpKXJldHVybiExO3ZhciBoPWEuZ2V0KHQpLGY9YS5nZXQoZSk7aWYoaCYmZilyZXR1cm4gaD09ZSYmZj09dDt2YXIgZD0tMSxwPSEwLG09ciZ2TmU/bmV3IEdtOnZvaWQgMDtmb3IoYS5zZXQodCxlKSxhLnNldChlLHQpOysrZDxsOyl7dmFyIGc9dFtkXSx5PWVbZF07aWYobil2YXIgdj1zP24oeSxnLGQsZSx0LGEpOm4oZyx5LGQsdCxlLGEpO2lmKHYhPT12b2lkIDApe2lmKHYpY29udGludWU7cD0hMTticmVha31pZihtKXtpZighVncoZSxmdW5jdGlvbih4LGIpe2lmKCEkbShtLGIpJiYoZz09PXh8fGkoZyx4LHIsbixhKSkpcmV0dXJuIG0ucHVzaChiKX0pKXtwPSExO2JyZWFrfX1lbHNlIGlmKCEoZz09PXl8fGkoZyx5LHIsbixhKSkpe3A9ITE7YnJlYWt9fXJldHVybiBhLmRlbGV0ZSh0KSxhLmRlbGV0ZShlKSxwfXZhciB5TmUsdk5lLEh3LERMPU0oKCk9PnsidXNlIHN0cmljdCI7JHcoKTtMTCgpO1V3KCk7eU5lPTEsdk5lPTI7byh4TmUsImVxdWFsQXJyYXlzIik7SHc9eE5lfSk7ZnVuY3Rpb24gYk5lKHQpe3ZhciBlPS0xLHI9QXJyYXkodC5zaXplKTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKG4saSl7clsrK2VdPVtpLG5dfSkscn12YXIgUGVlLEJlZT1NKCgpPT57InVzZSBzdHJpY3QiO28oYk5lLCJtYXBUb0FycmF5Iik7UGVlPWJOZX0pO2Z1bmN0aW9uIHdOZSh0KXt2YXIgZT0tMSxyPUFycmF5KHQuc2l6ZSk7cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbihuKXtyWysrZV09bn0pLHJ9dmFyIFZtLFd3PU0oKCk9PnsidXNlIHN0cmljdCI7byh3TmUsInNldFRvQXJyYXkiKTtWbT13TmV9KTtmdW5jdGlvbiBPTmUodCxlLHIsbixpLGEscyl7c3dpdGNoKHIpe2Nhc2UgSU5lOmlmKHQuYnl0ZUxlbmd0aCE9ZS5ieXRlTGVuZ3RofHx0LmJ5dGVPZmZzZXQhPWUuYnl0ZU9mZnNldClyZXR1cm4hMTt0PXQuYnVmZmVyLGU9ZS5idWZmZXI7Y2FzZSBNTmU6cmV0dXJuISh0LmJ5dGVMZW5ndGghPWUuYnl0ZUxlbmd0aHx8IWEobmV3IHNtKHQpLG5ldyBzbShlKSkpO2Nhc2UgRU5lOmNhc2UgU05lOmNhc2UgX05lOnJldHVybiBGbygrdCwrZSk7Y2FzZSBDTmU6cmV0dXJuIHQubmFtZT09ZS5uYW1lJiZ0Lm1lc3NhZ2U9PWUubWVzc2FnZTtjYXNlIExOZTpjYXNlIE5OZTpyZXR1cm4gdD09ZSsiIjtjYXNlIEFOZTp2YXIgbD1QZWU7Y2FzZSBETmU6dmFyIHU9biZUTmU7aWYobHx8KGw9Vm0pLHQuc2l6ZSE9ZS5zaXplJiYhdSlyZXR1cm4hMTt2YXIgaD1zLmdldCh0KTtpZihoKXJldHVybiBoPT1lO258PWtOZSxzLnNldCh0LGUpO3ZhciBmPUh3KGwodCksbChlKSxuLGksYSxzKTtyZXR1cm4gcy5kZWxldGUodCksZjtjYXNlIFJOZTppZihOTClyZXR1cm4gTkwuY2FsbCh0KT09TkwuY2FsbChlKX1yZXR1cm4hMX12YXIgVE5lLGtOZSxFTmUsU05lLENOZSxBTmUsX05lLExOZSxETmUsTk5lLFJOZSxNTmUsSU5lLEZlZSxOTCx6ZWUsR2VlPU0oKCk9PnsidXNlIHN0cmljdCI7Q2QoKTtCXygpO0FkKCk7REwoKTtCZWUoKTtXdygpO1ROZT0xLGtOZT0yLEVOZT0iW29iamVjdCBCb29sZWFuXSIsU05lPSJbb2JqZWN0IERhdGVdIixDTmU9IltvYmplY3QgRXJyb3JdIixBTmU9IltvYmplY3QgTWFwXSIsX05lPSJbb2JqZWN0IE51bWJlcl0iLExOZT0iW29iamVjdCBSZWdFeHBdIixETmU9IltvYmplY3QgU2V0XSIsTk5lPSJbb2JqZWN0IFN0cmluZ10iLFJOZT0iW29iamVjdCBTeW1ib2xdIixNTmU9IltvYmplY3QgQXJyYXlCdWZmZXJdIixJTmU9IltvYmplY3QgRGF0YVZpZXddIixGZWU9aWE/aWEucHJvdG90eXBlOnZvaWQgMCxOTD1GZWU/RmVlLnZhbHVlT2Y6dm9pZCAwO28oT05lLCJlcXVhbEJ5VGFnIik7emVlPU9OZX0pO2Z1bmN0aW9uIHpOZSh0LGUscixuLGksYSl7dmFyIHM9ciZQTmUsbD1Zdih0KSx1PWwubGVuZ3RoLGg9WXYoZSksZj1oLmxlbmd0aDtpZih1IT1mJiYhcylyZXR1cm4hMTtmb3IodmFyIGQ9dTtkLS07KXt2YXIgcD1sW2RdO2lmKCEocz9wIGluIGU6Rk5lLmNhbGwoZSxwKSkpcmV0dXJuITF9dmFyIG09YS5nZXQodCksZz1hLmdldChlKTtpZihtJiZnKXJldHVybiBtPT1lJiZnPT10O3ZhciB5PSEwO2Euc2V0KHQsZSksYS5zZXQoZSx0KTtmb3IodmFyIHY9czsrK2Q8dTspe3A9bFtkXTt2YXIgeD10W3BdLGI9ZVtwXTtpZihuKXZhciB3PXM/bihiLHgscCxlLHQsYSk6bih4LGIscCx0LGUsYSk7aWYoISh3PT09dm9pZCAwP3g9PT1ifHxpKHgsYixyLG4sYSk6dykpe3k9ITE7YnJlYWt9dnx8KHY9cD09ImNvbnN0cnVjdG9yIil9aWYoeSYmIXYpe3ZhciBfPXQuY29uc3RydWN0b3IsVD1lLmNvbnN0cnVjdG9yO18hPVQmJiJjb25zdHJ1Y3RvciJpbiB0JiYiY29uc3RydWN0b3IiaW4gZSYmISh0eXBlb2YgXz09ImZ1bmN0aW9uIiYmXyBpbnN0YW5jZW9mIF8mJnR5cGVvZiBUPT0iZnVuY3Rpb24iJiZUIGluc3RhbmNlb2YgVCkmJih5PSExKX1yZXR1cm4gYS5kZWxldGUodCksYS5kZWxldGUoZSkseX12YXIgUE5lLEJOZSxGTmUsJGVlLFZlZT1NKCgpPT57InVzZSBzdHJpY3QiO2tMKCk7UE5lPTEsQk5lPU9iamVjdC5wcm90b3R5cGUsRk5lPUJOZS5oYXNPd25Qcm9wZXJ0eTtvKHpOZSwiZXF1YWxPYmplY3RzIik7JGVlPXpOZX0pO2Z1bmN0aW9uIFZOZSh0LGUscixuLGksYSl7dmFyIHM9RHQodCksbD1EdChlKSx1PXM/SGVlOnVvKHQpLGg9bD9IZWU6dW8oZSk7dT11PT1VZWU/WXc6dSxoPWg9PVVlZT9ZdzpoO3ZhciBmPXU9PVl3LGQ9aD09WXcscD11PT1oO2lmKHAmJklsKHQpKXtpZighSWwoZSkpcmV0dXJuITE7cz0hMCxmPSExfWlmKHAmJiFmKXJldHVybiBhfHwoYT1uZXcgYmMpLHN8fEdoKHQpP0h3KHQsZSxyLG4saSxhKTp6ZWUodCxlLHUscixuLGksYSk7aWYoIShyJkdOZSkpe3ZhciBtPWYmJldlZS5jYWxsKHQsIl9fd3JhcHBlZF9fIiksZz1kJiZXZWUuY2FsbChlLCJfX3dyYXBwZWRfXyIpO2lmKG18fGcpe3ZhciB5PW0/dC52YWx1ZSgpOnQsdj1nP2UudmFsdWUoKTplO3JldHVybiBhfHwoYT1uZXcgYmMpLGkoeSx2LHIsbixhKX19cmV0dXJuIHA/KGF8fChhPW5ldyBiYyksJGVlKHQsZSxyLG4saSxhKSk6ITF9dmFyIEdOZSxVZWUsSGVlLFl3LCROZSxXZWUsWWVlLHFlZT1NKCgpPT57InVzZSBzdHJpY3QiO212KCk7REwoKTtHZWUoKTtWZWUoKTtWZCgpO0huKCk7Zm0oKTt4digpO0dOZT0xLFVlZT0iW29iamVjdCBBcmd1bWVudHNdIixIZWU9IltvYmplY3QgQXJyYXldIixZdz0iW29iamVjdCBPYmplY3RdIiwkTmU9T2JqZWN0LnByb3RvdHlwZSxXZWU9JE5lLmhhc093blByb3BlcnR5O28oVk5lLCJiYXNlSXNFcXVhbERlZXAiKTtZZWU9Vk5lfSk7ZnVuY3Rpb24gWGVlKHQsZSxyLG4saSl7cmV0dXJuIHQ9PT1lPyEwOnQ9PW51bGx8fGU9PW51bGx8fCFlaSh0KSYmIWVpKGUpP3QhPT10JiZlIT09ZTpZZWUodCxlLHIsbixYZWUsaSl9dmFyIHF3LFJMPU0oKCk9PnsidXNlIHN0cmljdCI7cWVlKCk7em8oKTtvKFhlZSwiYmFzZUlzRXF1YWwiKTtxdz1YZWV9KTtmdW5jdGlvbiBXTmUodCxlLHIsbil7dmFyIGk9ci5sZW5ndGgsYT1pLHM9IW47aWYodD09bnVsbClyZXR1cm4hYTtmb3IodD1PYmplY3QodCk7aS0tOyl7dmFyIGw9cltpXTtpZihzJiZsWzJdP2xbMV0hPT10W2xbMF1dOiEobFswXWluIHQpKXJldHVybiExfWZvcig7KytpPGE7KXtsPXJbaV07dmFyIHU9bFswXSxoPXRbdV0sZj1sWzFdO2lmKHMmJmxbMl0pe2lmKGg9PT12b2lkIDAmJiEodSBpbiB0KSlyZXR1cm4hMX1lbHNle3ZhciBkPW5ldyBiYztpZihuKXZhciBwPW4oaCxmLHUsdCxlLGQpO2lmKCEocD09PXZvaWQgMD9xdyhmLGgsVU5lfEhOZSxuLGQpOnApKXJldHVybiExfX1yZXR1cm4hMH12YXIgVU5lLEhOZSxqZWUsS2VlPU0oKCk9PnsidXNlIHN0cmljdCI7bXYoKTtSTCgpO1VOZT0xLEhOZT0yO28oV05lLCJiYXNlSXNNYXRjaCIpO2plZT1XTmV9KTtmdW5jdGlvbiBZTmUodCl7cmV0dXJuIHQ9PT10JiYheG4odCl9dmFyIFh3LE1MPU0oKCk9PnsidXNlIHN0cmljdCI7aW8oKTtvKFlOZSwiaXNTdHJpY3RDb21wYXJhYmxlIik7WHc9WU5lfSk7ZnVuY3Rpb24gcU5lKHQpe2Zvcih2YXIgZT1Hcih0KSxyPWUubGVuZ3RoO3ItLTspe3ZhciBuPWVbcl0saT10W25dO2Vbcl09W24saSxYdyhpKV19cmV0dXJuIGV9dmFyIFFlZSxaZWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtNTCgpO0xjKCk7byhxTmUsImdldE1hdGNoRGF0YSIpO1FlZT1xTmV9KTtmdW5jdGlvbiBYTmUodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/ITE6clt0XT09PWUmJihlIT09dm9pZCAwfHx0IGluIE9iamVjdChyKSl9fXZhciBqdyxJTD1NKCgpPT57InVzZSBzdHJpY3QiO28oWE5lLCJtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSIpO2p3PVhOZX0pO2Z1bmN0aW9uIGpOZSh0KXt2YXIgZT1RZWUodCk7cmV0dXJuIGUubGVuZ3RoPT0xJiZlWzBdWzJdP2p3KGVbMF1bMF0sZVswXVsxXSk6ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT10fHxqZWUocix0LGUpfX12YXIgSmVlLGV0ZT1NKCgpPT57InVzZSBzdHJpY3QiO0tlZSgpO1plZSgpO0lMKCk7byhqTmUsImJhc2VNYXRjaGVzIik7SmVlPWpOZX0pO2Z1bmN0aW9uIEtOZSh0LGUpe3JldHVybiB0IT1udWxsJiZlIGluIE9iamVjdCh0KX12YXIgdHRlLHJ0ZT1NKCgpPT57InVzZSBzdHJpY3QiO28oS05lLCJiYXNlSGFzSW4iKTt0dGU9S05lfSk7ZnVuY3Rpb24gUU5lKHQsZSxyKXtlPVpoKGUsdCk7Zm9yKHZhciBuPS0xLGk9ZS5sZW5ndGgsYT0hMTsrK248aTspe3ZhciBzPURjKGVbbl0pO2lmKCEoYT10IT1udWxsJiZyKHQscykpKWJyZWFrO3Q9dFtzXX1yZXR1cm4gYXx8KytuIT1pP2E6KGk9dD09bnVsbD8wOnQubGVuZ3RoLCEhaSYmaG0oaSkmJiRoKHMsaSkmJihEdCh0KXx8TWwodCkpKX12YXIgS3csT0w9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdigpO3VtKCk7SG4oKTt3digpO3Y1KCk7T20oKTtvKFFOZSwiaGFzUGF0aCIpO0t3PVFOZX0pO2Z1bmN0aW9uIFpOZSh0LGUpe3JldHVybiB0IT1udWxsJiZLdyh0LGUsdHRlKX12YXIgUXcsUEw9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtydGUoKTtPTCgpO28oWk5lLCJoYXNJbiIpO1F3PVpOZX0pO2Z1bmN0aW9uIHRSZSh0LGUpe3JldHVybiBJbSh0KSYmWHcoZSk/ancoRGModCksZSk6ZnVuY3Rpb24ocil7dmFyIG49Tkoocix0KTtyZXR1cm4gbj09PXZvaWQgMCYmbj09PWU/UXcocix0KTpxdyhlLG4sSk5lfGVSZSl9fXZhciBKTmUsZVJlLG50ZSxpdGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtSTCgpO1JKKCk7UEwoKTtTdygpO01MKCk7SUwoKTtPbSgpO0pOZT0xLGVSZT0yO28odFJlLCJiYXNlTWF0Y2hlc1Byb3BlcnR5Iik7bnRlPXRSZX0pO2Z1bmN0aW9uIHJSZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGU/Llt0XX19dmFyIFp3LEJMPU0oKCk9PnsidXNlIHN0cmljdCI7byhyUmUsImJhc2VQcm9wZXJ0eSIpO1p3PXJSZX0pO2Z1bmN0aW9uIG5SZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIEpoKGUsdCl9fXZhciBhdGUsc3RlPU0oKCk9PnsidXNlIHN0cmljdCI7V3YoKTtvKG5SZSwiYmFzZVByb3BlcnR5RGVlcCIpO2F0ZT1uUmV9KTtmdW5jdGlvbiBpUmUodCl7cmV0dXJuIEltKHQpP1p3KERjKHQpKTphdGUodCl9dmFyIG90ZSxsdGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtCTCgpO3N0ZSgpO1N3KCk7T20oKTtvKGlSZSwicHJvcGVydHkiKTtvdGU9aVJlfSk7ZnVuY3Rpb24gYVJlKHQpe3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIj90OnQ9PW51bGw/YWE6dHlwZW9mIHQ9PSJvYmplY3QiP0R0KHQpP250ZSh0WzBdLHRbMV0pOkplZSh0KTpvdGUodCl9dmFyIGRuLGlzPU0oKCk9PnsidXNlIHN0cmljdCI7ZXRlKCk7aXRlKCk7UnUoKTtIbigpO2x0ZSgpO28oYVJlLCJiYXNlSXRlcmF0ZWUiKTtkbj1hUmV9KTtmdW5jdGlvbiBzUmUodCxlLHIsbil7Zm9yKHZhciBpPS0xLGE9dD09bnVsbD8wOnQubGVuZ3RoOysraTxhOyl7dmFyIHM9dFtpXTtlKG4scyxyKHMpLHQpfXJldHVybiBufXZhciBjdGUsdXRlPU0oKCk9PnsidXNlIHN0cmljdCI7byhzUmUsImFycmF5QWdncmVnYXRvciIpO2N0ZT1zUmV9KTtmdW5jdGlvbiBvUmUodCxlKXtyZXR1cm4gdCYmYW0odCxlLEdyKX12YXIgVW0sSnc9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt1NSgpO0xjKCk7byhvUmUsImJhc2VGb3JPd24iKTtVbT1vUmV9KTtmdW5jdGlvbiBsUmUodCxlKXtyZXR1cm4gZnVuY3Rpb24ocixuKXtpZihyPT1udWxsKXJldHVybiByO2lmKCFsaShyKSlyZXR1cm4gdChyLG4pO2Zvcih2YXIgaT1yLmxlbmd0aCxhPWU/aTotMSxzPU9iamVjdChyKTsoZT9hLS06KythPGkpJiZuKHNbYV0sYSxzKSE9PSExOyk7cmV0dXJuIHJ9fXZhciBodGUsZnRlPU0oKCk9PnsidXNlIHN0cmljdCI7R28oKTtvKGxSZSwiY3JlYXRlQmFzZUVhY2giKTtodGU9bFJlfSk7dmFyIGNSZSxCcyx0Zj1NKCgpPT57InVzZSBzdHJpY3QiO0p3KCk7ZnRlKCk7Y1JlPWh0ZShVbSksQnM9Y1JlfSk7ZnVuY3Rpb24gdVJlKHQsZSxyLG4pe3JldHVybiBCcyh0LGZ1bmN0aW9uKGksYSxzKXtlKG4saSxyKGkpLHMpfSksbn12YXIgZHRlLHB0ZT1NKCgpPT57InVzZSBzdHJpY3QiO3RmKCk7byh1UmUsImJhc2VBZ2dyZWdhdG9yIik7ZHRlPXVSZX0pO2Z1bmN0aW9uIGhSZSh0LGUpe3JldHVybiBmdW5jdGlvbihyLG4pe3ZhciBpPUR0KHIpP2N0ZTpkdGUsYT1lP2UoKTp7fTtyZXR1cm4gaShyLHQsZG4obiwyKSxhKX19dmFyIG10ZSxndGU9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt1dGUoKTtwdGUoKTtpcygpO0huKCk7byhoUmUsImNyZWF0ZUFnZ3JlZ2F0b3IiKTttdGU9aFJlfSk7dmFyIGZSZSxlVCx5dGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtCbygpO2ZSZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIG9pLkRhdGUubm93KCl9LCJub3ciKSxlVD1mUmV9KTt2YXIgdnRlLGRSZSxwUmUscmYseHRlPU0oKCk9PnsidXNlIHN0cmljdCI7cG0oKTtBZCgpO1JkKCk7VmgoKTt2dGU9T2JqZWN0LnByb3RvdHlwZSxkUmU9dnRlLmhhc093blByb3BlcnR5LHBSZT1FYyhmdW5jdGlvbih0LGUpe3Q9T2JqZWN0KHQpO3ZhciByPS0xLG49ZS5sZW5ndGgsaT1uPjI/ZVsyXTp2b2lkIDA7Zm9yKGkmJmFvKGVbMF0sZVsxXSxpKSYmKG49MSk7KytyPG47KWZvcih2YXIgYT1lW3JdLHM9X3MoYSksbD0tMSx1PXMubGVuZ3RoOysrbDx1Oyl7dmFyIGg9c1tsXSxmPXRbaF07KGY9PT12b2lkIDB8fEZvKGYsdnRlW2hdKSYmIWRSZS5jYWxsKHQsaCkpJiYodFtoXT1hW2hdKX1yZXR1cm4gdH0pLHJmPXBSZX0pO2Z1bmN0aW9uIG1SZSh0LGUscil7Zm9yKHZhciBuPS0xLGk9dD09bnVsbD8wOnQubGVuZ3RoOysrbjxpOylpZihyKGUsdFtuXSkpcmV0dXJuITA7cmV0dXJuITF9dmFyIHRULEZMPU0oKCk9PnsidXNlIHN0cmljdCI7byhtUmUsImFycmF5SW5jbHVkZXNXaXRoIik7dFQ9bVJlfSk7ZnVuY3Rpb24geVJlKHQsZSxyLG4pe3ZhciBpPS0xLGE9a3cscz0hMCxsPXQubGVuZ3RoLHU9W10saD1lLmxlbmd0aDtpZighbClyZXR1cm4gdTtyJiYoZT1QcyhlLCRvKHIpKSksbj8oYT10VCxzPSExKTplLmxlbmd0aD49Z1JlJiYoYT0kbSxzPSExLGU9bmV3IEdtKGUpKTtlOmZvcig7KytpPGw7KXt2YXIgZj10W2ldLGQ9cj09bnVsbD9mOnIoZik7aWYoZj1ufHxmIT09MD9mOjAscyYmZD09PWQpe2Zvcih2YXIgcD1oO3AtLTspaWYoZVtwXT09PWQpY29udGludWUgZTt1LnB1c2goZil9ZWxzZSBhKGUsZCxuKXx8dS5wdXNoKGYpfXJldHVybiB1fXZhciBnUmUsYnRlLHd0ZT1NKCgpPT57InVzZSBzdHJpY3QiOyR3KCk7eUwoKTtGTCgpO0dkKCk7RGQoKTtVdygpO2dSZT0yMDA7byh5UmUsImJhc2VEaWZmZXJlbmNlIik7YnRlPXlSZX0pO3ZhciB2UmUsbmYsVHRlPU0oKCk9PnsidXNlIHN0cmljdCI7d3RlKCk7Qm0oKTtwbSgpO3g1KCk7dlJlPUVjKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIExkKHQpP2J0ZSh0LE5jKGUsMSxMZCwhMCkpOltdfSksbmY9dlJlfSk7ZnVuY3Rpb24geFJlKHQpe3ZhciBlPXQ9PW51bGw/MDp0Lmxlbmd0aDtyZXR1cm4gZT90W2UtMV06dm9pZCAwfXZhciB4YSxrdGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHhSZSwibGFzdCIpO3hhPXhSZX0pO2Z1bmN0aW9uIGJSZSh0LGUscil7dmFyIG49dD09bnVsbD8wOnQubGVuZ3RoO3JldHVybiBuPyhlPXJ8fGU9PT12b2lkIDA/MTpfYyhlKSxMdyh0LGU8MD8wOmUsbikpOltdfXZhciB4aSxFdGU9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt4TCgpO05tKCk7byhiUmUsImRyb3AiKTt4aT1iUmV9KTtmdW5jdGlvbiB3UmUodCxlLHIpe3ZhciBuPXQ9PW51bGw/MDp0Lmxlbmd0aDtyZXR1cm4gbj8oZT1yfHxlPT09dm9pZCAwPzE6X2MoZSksZT1uLWUsTHcodCwwLGU8MD8wOmUpKTpbXX12YXIgenUsU3RlPU0oKCk9PnsidXNlIHN0cmljdCI7eEwoKTtObSgpO28od1JlLCJkcm9wUmlnaHQiKTt6dT13UmV9KTtmdW5jdGlvbiBUUmUodCl7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6YWF9dmFyIEhtLHJUPU0oKCk9PnsidXNlIHN0cmljdCI7UnUoKTtvKFRSZSwiY2FzdEZ1bmN0aW9uIik7SG09VFJlfSk7ZnVuY3Rpb24ga1JlKHQsZSl7dmFyIHI9RHQodCk/Ync6QnM7cmV0dXJuIHIodCxIbShlKSl9dmFyIFNlLG5UPU0oKCk9PnsidXNlIHN0cmljdCI7bUwoKTt0ZigpO3JUKCk7SG4oKTtvKGtSZSwiZm9yRWFjaCIpO1NlPWtSZX0pO3ZhciBDdGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtuVCgpfSk7ZnVuY3Rpb24gRVJlKHQsZSl7Zm9yKHZhciByPS0xLG49dD09bnVsbD8wOnQubGVuZ3RoOysrcjxuOylpZighZSh0W3JdLHIsdCkpcmV0dXJuITE7cmV0dXJuITB9dmFyIEF0ZSxfdGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKEVSZSwiYXJyYXlFdmVyeSIpO0F0ZT1FUmV9KTtmdW5jdGlvbiBTUmUodCxlKXt2YXIgcj0hMDtyZXR1cm4gQnModCxmdW5jdGlvbihuLGksYSl7cmV0dXJuIHI9ISFlKG4saSxhKSxyfSkscn12YXIgTHRlLER0ZT1NKCgpPT57InVzZSBzdHJpY3QiO3RmKCk7byhTUmUsImJhc2VFdmVyeSIpO0x0ZT1TUmV9KTtmdW5jdGlvbiBDUmUodCxlLHIpe3ZhciBuPUR0KHQpP0F0ZTpMdGU7cmV0dXJuIHImJmFvKHQsZSxyKSYmKGU9dm9pZCAwKSxuKHQsZG4oZSwzKSl9dmFyIHphLE50ZT1NKCgpPT57InVzZSBzdHJpY3QiO190ZSgpO0R0ZSgpO2lzKCk7SG4oKTtSZCgpO28oQ1JlLCJldmVyeSIpO3phPUNSZX0pO2Z1bmN0aW9uIEFSZSh0LGUpe3ZhciByPVtdO3JldHVybiBCcyh0LGZ1bmN0aW9uKG4saSxhKXtlKG4saSxhKSYmci5wdXNoKG4pfSkscn12YXIgaVQsekw9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt0ZigpO28oQVJlLCJiYXNlRmlsdGVyIik7aVQ9QVJlfSk7ZnVuY3Rpb24gX1JlKHQsZSl7dmFyIHI9RHQodCk/Rm06aVQ7cmV0dXJuIHIodCxkbihlLDMpKX12YXIgWXIsR0w9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtEdygpO3pMKCk7aXMoKTtIbigpO28oX1JlLCJmaWx0ZXIiKTtZcj1fUmV9KTtmdW5jdGlvbiBMUmUodCl7cmV0dXJuIGZ1bmN0aW9uKGUscixuKXt2YXIgaT1PYmplY3QoZSk7aWYoIWxpKGUpKXt2YXIgYT1kbihyLDMpO2U9R3IoZSkscj1vKGZ1bmN0aW9uKGwpe3JldHVybiBhKGlbbF0sbCxpKX0sInByZWRpY2F0ZSIpfXZhciBzPXQoZSxyLG4pO3JldHVybiBzPi0xP2lbYT9lW3NdOnNdOnZvaWQgMH19dmFyIFJ0ZSxNdGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtpcygpO0dvKCk7TGMoKTtvKExSZSwiY3JlYXRlRmluZCIpO1J0ZT1MUmV9KTtmdW5jdGlvbiBOUmUodCxlLHIpe3ZhciBuPXQ9PW51bGw/MDp0Lmxlbmd0aDtpZighbilyZXR1cm4tMTt2YXIgaT1yPT1udWxsPzA6X2Mocik7cmV0dXJuIGk8MCYmKGk9RFJlKG4raSwwKSksd3codCxkbihlLDMpLGkpfXZhciBEUmUsSXRlLE90ZT1NKCgpPT57InVzZSBzdHJpY3QiO2dMKCk7aXMoKTtObSgpO0RSZT1NYXRoLm1heDtvKE5SZSwiZmluZEluZGV4Iik7SXRlPU5SZX0pO3ZhciBSUmUsYXMsUHRlPU0oKCk9PnsidXNlIHN0cmljdCI7TXRlKCk7T3RlKCk7UlJlPVJ0ZShJdGUpLGFzPVJSZX0pO2Z1bmN0aW9uIE1SZSh0KXtyZXR1cm4gdCYmdC5sZW5ndGg/dFswXTp2b2lkIDB9dmFyIHNhLEJ0ZT1NKCgpPT57InVzZSBzdHJpY3QiO28oTVJlLCJoZWFkIik7c2E9TVJlfSk7dmFyIEZ0ZT1NKCgpPT57InVzZSBzdHJpY3QiO0J0ZSgpfSk7ZnVuY3Rpb24gSVJlKHQsZSl7dmFyIHI9LTEsbj1saSh0KT9BcnJheSh0Lmxlbmd0aCk6W107cmV0dXJuIEJzKHQsZnVuY3Rpb24oaSxhLHMpe25bKytyXT1lKGksYSxzKX0pLG59dmFyIGFULCRMPU0oKCk9PnsidXNlIHN0cmljdCI7dGYoKTtHbygpO28oSVJlLCJiYXNlTWFwIik7YVQ9SVJlfSk7ZnVuY3Rpb24gT1JlKHQsZSl7dmFyIHI9RHQodCk/UHM6YVQ7cmV0dXJuIHIodCxkbihlLDMpKX12YXIgUWUsV209TSgoKT0+eyJ1c2Ugc3RyaWN0IjtHZCgpO2lzKCk7JEwoKTtIbigpO28oT1JlLCJtYXAiKTtRZT1PUmV9KTtmdW5jdGlvbiBQUmUodCxlKXtyZXR1cm4gTmMoUWUodCxlKSwxKX12YXIgYmEsVkw9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtCbSgpO1dtKCk7byhQUmUsImZsYXRNYXAiKTtiYT1QUmV9KTtmdW5jdGlvbiBCUmUodCxlKXtyZXR1cm4gdD09bnVsbD90OmFtKHQsSG0oZSksX3MpfXZhciBVTCx6dGU9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt1NSgpO3JUKCk7VmgoKTtvKEJSZSwiZm9ySW4iKTtVTD1CUmV9KTtmdW5jdGlvbiBGUmUodCxlKXtyZXR1cm4gdCYmVW0odCxIbShlKSl9dmFyIEhMLEd0ZT1NKCgpPT57InVzZSBzdHJpY3QiO0p3KCk7clQoKTtvKEZSZSwiZm9yT3duIik7SEw9RlJlfSk7dmFyIHpSZSxHUmUsJFJlLFdMLCR0ZT1NKCgpPT57InVzZSBzdHJpY3QiO2ltKCk7Z3RlKCk7elJlPU9iamVjdC5wcm90b3R5cGUsR1JlPXpSZS5oYXNPd25Qcm9wZXJ0eSwkUmU9bXRlKGZ1bmN0aW9uKHQsZSxyKXtHUmUuY2FsbCh0LHIpP3Rbcl0ucHVzaChlKTp3Yyh0LHIsW2VdKX0pLFdMPSRSZX0pO2Z1bmN0aW9uIFZSZSh0LGUpe3JldHVybiB0PmV9dmFyIFZ0ZSxVdGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKFZSZSwiYmFzZUd0Iik7VnRlPVZSZX0pO2Z1bmN0aW9uIFdSZSh0LGUpe3JldHVybiB0IT1udWxsJiZIUmUuY2FsbCh0LGUpfXZhciBVUmUsSFJlLEh0ZSxXdGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtVUmU9T2JqZWN0LnByb3RvdHlwZSxIUmU9VVJlLmhhc093blByb3BlcnR5O28oV1JlLCJiYXNlSGFzIik7SHRlPVdSZX0pO2Z1bmN0aW9uIFlSZSh0LGUpe3JldHVybiB0IT1udWxsJiZLdyh0LGUsSHRlKX12YXIgTnQsWXRlPU0oKCk9PnsidXNlIHN0cmljdCI7V3RlKCk7T0woKTtvKFlSZSwiaGFzIik7TnQ9WVJlfSk7ZnVuY3Rpb24gWFJlKHQpe3JldHVybiB0eXBlb2YgdD09InN0cmluZyJ8fCFEdCh0KSYmZWkodCkmJmdhKHQpPT1xUmV9dmFyIHFSZSxiaSxzVD1NKCgpPT57InVzZSBzdHJpY3QiO0x1KCk7SG4oKTt6bygpO3FSZT0iW29iamVjdCBTdHJpbmddIjtvKFhSZSwiaXNTdHJpbmciKTtiaT1YUmV9KTtmdW5jdGlvbiBqUmUodCxlKXtyZXR1cm4gUHMoZSxmdW5jdGlvbihyKXtyZXR1cm4gdFtyXX0pfXZhciBxdGUsWHRlPU0oKCk9PnsidXNlIHN0cmljdCI7R2QoKTtvKGpSZSwiYmFzZVZhbHVlcyIpO3F0ZT1qUmV9KTtmdW5jdGlvbiBLUmUodCl7cmV0dXJuIHQ9PW51bGw/W106cXRlKHQsR3IodCkpfXZhciBicixZTD1NKCgpPT57InVzZSBzdHJpY3QiO1h0ZSgpO0xjKCk7byhLUmUsInZhbHVlcyIpO2JyPUtSZX0pO2Z1bmN0aW9uIFpSZSh0LGUscixuKXt0PWxpKHQpP3Q6YnIodCkscj1yJiYhbj9fYyhyKTowO3ZhciBpPXQubGVuZ3RoO3JldHVybiByPDAmJihyPVFSZShpK3IsMCkpLGJpKHQpP3I8PWkmJnQuaW5kZXhPZihlLHIpPi0xOiEhaSYmUm0odCxlLHIpPi0xfXZhciBRUmUsWW4sanRlPU0oKCk9PnsidXNlIHN0cmljdCI7VHcoKTtHbygpO3NUKCk7Tm0oKTtZTCgpO1FSZT1NYXRoLm1heDtvKFpSZSwiaW5jbHVkZXMiKTtZbj1aUmV9KTtmdW5jdGlvbiBlTWUodCxlLHIpe3ZhciBuPXQ9PW51bGw/MDp0Lmxlbmd0aDtpZighbilyZXR1cm4tMTt2YXIgaT1yPT1udWxsPzA6X2Mocik7cmV0dXJuIGk8MCYmKGk9SlJlKG4raSwwKSksUm0odCxlLGkpfXZhciBKUmUsb1QsS3RlPU0oKCk9PnsidXNlIHN0cmljdCI7VHcoKTtObSgpO0pSZT1NYXRoLm1heDtvKGVNZSwiaW5kZXhPZiIpO29UPWVNZX0pO2Z1bmN0aW9uIGFNZSh0KXtpZih0PT1udWxsKXJldHVybiEwO2lmKGxpKHQpJiYoRHQodCl8fHR5cGVvZiB0PT0ic3RyaW5nInx8dHlwZW9mIHQuc3BsaWNlPT0iZnVuY3Rpb24ifHxJbCh0KXx8R2godCl8fE1sKHQpKSlyZXR1cm4hdC5sZW5ndGg7dmFyIGU9dW8odCk7aWYoZT09dE1lfHxlPT1yTWUpcmV0dXJuIXQuc2l6ZTtpZihUYyh0KSlyZXR1cm4hTW0odCkubGVuZ3RoO2Zvcih2YXIgciBpbiB0KWlmKGlNZS5jYWxsKHQscikpcmV0dXJuITE7cmV0dXJuITB9dmFyIHRNZSxyTWUsbk1lLGlNZSxjcixsVD1NKCgpPT57InVzZSBzdHJpY3QiO0V3KCk7VmQoKTt1bSgpO0huKCk7R28oKTtmbSgpO2NtKCk7eHYoKTt0TWU9IltvYmplY3QgTWFwXSIsck1lPSJbb2JqZWN0IFNldF0iLG5NZT1PYmplY3QucHJvdG90eXBlLGlNZT1uTWUuaGFzT3duUHJvcGVydHk7byhhTWUsImlzRW1wdHkiKTtjcj1hTWV9KTtmdW5jdGlvbiBvTWUodCl7cmV0dXJuIGVpKHQpJiZnYSh0KT09c01lfXZhciBzTWUsUXRlLFp0ZT1NKCgpPT57InVzZSBzdHJpY3QiO0x1KCk7em8oKTtzTWU9IltvYmplY3QgUmVnRXhwXSI7byhvTWUsImJhc2VJc1JlZ0V4cCIpO1F0ZT1vTWV9KTt2YXIgSnRlLGxNZSxYbyxlcmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtadGUoKTtEZCgpO3Z2KCk7SnRlPVZvJiZWby5pc1JlZ0V4cCxsTWU9SnRlPyRvKEp0ZSk6UXRlLFhvPWxNZX0pO2Z1bmN0aW9uIGNNZSh0KXtyZXR1cm4gdD09PXZvaWQgMH12YXIgZHIsdHJlPU0oKCk9PnsidXNlIHN0cmljdCI7byhjTWUsImlzVW5kZWZpbmVkIik7ZHI9Y01lfSk7ZnVuY3Rpb24gdU1lKHQsZSl7cmV0dXJuIHQ8ZX12YXIgY1QscUw9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHVNZSwiYmFzZUx0Iik7Y1Q9dU1lfSk7ZnVuY3Rpb24gaE1lKHQsZSl7dmFyIHI9e307cmV0dXJuIGU9ZG4oZSwzKSxVbSh0LGZ1bmN0aW9uKG4saSxhKXt3YyhyLGksZShuLGksYSkpfSkscn12YXIgVWQscnJlPU0oKCk9PnsidXNlIHN0cmljdCI7aW0oKTtKdygpO2lzKCk7byhoTWUsIm1hcFZhbHVlcyIpO1VkPWhNZX0pO2Z1bmN0aW9uIGZNZSh0LGUscil7Zm9yKHZhciBuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXt2YXIgYT10W25dLHM9ZShhKTtpZihzIT1udWxsJiYobD09PXZvaWQgMD9zPT09cyYmIWNvKHMpOnIocyxsKSkpdmFyIGw9cyx1PWF9cmV0dXJuIHV9dmFyIFltLHVUPU0oKCk9PnsidXNlIHN0cmljdCI7emQoKTtvKGZNZSwiYmFzZUV4dHJlbXVtIik7WW09Zk1lfSk7ZnVuY3Rpb24gZE1lKHQpe3JldHVybiB0JiZ0Lmxlbmd0aD9ZbSh0LGFhLFZ0ZSk6dm9pZCAwfXZhciBGcyxucmU9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt1VCgpO1V0ZSgpO1J1KCk7byhkTWUsIm1heCIpO0ZzPWRNZX0pO2Z1bmN0aW9uIHBNZSh0KXtyZXR1cm4gdCYmdC5sZW5ndGg/WW0odCxhYSxjVCk6dm9pZCAwfXZhciBCbCxYTD1NKCgpPT57InVzZSBzdHJpY3QiO3VUKCk7cUwoKTtSdSgpO28ocE1lLCJtaW4iKTtCbD1wTWV9KTtmdW5jdGlvbiBtTWUodCxlKXtyZXR1cm4gdCYmdC5sZW5ndGg/WW0odCxkbihlLDIpLGNUKTp2b2lkIDB9dmFyIEhkLGlyZT1NKCgpPT57InVzZSBzdHJpY3QiO3VUKCk7aXMoKTtxTCgpO28obU1lLCJtaW5CeSIpO0hkPW1NZX0pO2Z1bmN0aW9uIHlNZSh0KXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKGdNZSk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzO3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAwOnJldHVybiF0LmNhbGwodGhpcyk7Y2FzZSAxOnJldHVybiF0LmNhbGwodGhpcyxlWzBdKTtjYXNlIDI6cmV0dXJuIXQuY2FsbCh0aGlzLGVbMF0sZVsxXSk7Y2FzZSAzOnJldHVybiF0LmNhbGwodGhpcyxlWzBdLGVbMV0sZVsyXSl9cmV0dXJuIXQuYXBwbHkodGhpcyxlKX19dmFyIGdNZSxhcmUsc3JlPU0oKCk9PnsidXNlIHN0cmljdCI7Z01lPSJFeHBlY3RlZCBhIGZ1bmN0aW9uIjtvKHlNZSwibmVnYXRlIik7YXJlPXlNZX0pO2Z1bmN0aW9uIHZNZSh0LGUscixuKXtpZigheG4odCkpcmV0dXJuIHQ7ZT1aaChlLHQpO2Zvcih2YXIgaT0tMSxhPWUubGVuZ3RoLHM9YS0xLGw9dDtsIT1udWxsJiYrK2k8YTspe3ZhciB1PURjKGVbaV0pLGg9cjtpZih1PT09Il9fcHJvdG9fXyJ8fHU9PT0iY29uc3RydWN0b3IifHx1PT09InByb3RvdHlwZSIpcmV0dXJuIHQ7aWYoaSE9cyl7dmFyIGY9bFt1XTtoPW4/bihmLHUsbCk6dm9pZCAwLGg9PT12b2lkIDAmJihoPXhuKGYpP2Y6JGgoZVtpKzFdKT9bXTp7fSl9a2MobCx1LGgpLGw9bFt1XX1yZXR1cm4gdH12YXIgb3JlLGxyZT1NKCgpPT57InVzZSBzdHJpY3QiO2RtKCk7SHYoKTt3digpO2lvKCk7T20oKTtvKHZNZSwiYmFzZVNldCIpO29yZT12TWV9KTtmdW5jdGlvbiB4TWUodCxlLHIpe2Zvcih2YXIgbj0tMSxpPWUubGVuZ3RoLGE9e307KytuPGk7KXt2YXIgcz1lW25dLGw9SmgodCxzKTtyKGwscykmJm9yZShhLFpoKHMsdCksbCl9cmV0dXJuIGF9dmFyIGhULGpMPU0oKCk9PnsidXNlIHN0cmljdCI7V3YoKTtscmUoKTtIdigpO28oeE1lLCJiYXNlUGlja0J5Iik7aFQ9eE1lfSk7ZnVuY3Rpb24gYk1lKHQsZSl7aWYodD09bnVsbClyZXR1cm57fTt2YXIgcj1QcyhPdyh0KSxmdW5jdGlvbihuKXtyZXR1cm5bbl19KTtyZXR1cm4gZT1kbihlKSxoVCh0LHIsZnVuY3Rpb24obixpKXtyZXR1cm4gZShuLGlbMF0pfSl9dmFyIHpzLGNyZT1NKCgpPT57InVzZSBzdHJpY3QiO0dkKCk7aXMoKTtqTCgpO0VMKCk7byhiTWUsInBpY2tCeSIpO3pzPWJNZX0pO2Z1bmN0aW9uIHdNZSh0LGUpe3ZhciByPXQubGVuZ3RoO2Zvcih0LnNvcnQoZSk7ci0tOyl0W3JdPXRbcl0udmFsdWU7cmV0dXJuIHR9dmFyIHVyZSxocmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHdNZSwiYmFzZVNvcnRCeSIpO3VyZT13TWV9KTtmdW5jdGlvbiBUTWUodCxlKXtpZih0IT09ZSl7dmFyIHI9dCE9PXZvaWQgMCxuPXQ9PT1udWxsLGk9dD09PXQsYT1jbyh0KSxzPWUhPT12b2lkIDAsbD1lPT09bnVsbCx1PWU9PT1lLGg9Y28oZSk7aWYoIWwmJiFoJiYhYSYmdD5lfHxhJiZzJiZ1JiYhbCYmIWh8fG4mJnMmJnV8fCFyJiZ1fHwhaSlyZXR1cm4gMTtpZighbiYmIWEmJiFoJiZ0PGV8fGgmJnImJmkmJiFuJiYhYXx8bCYmciYmaXx8IXMmJml8fCF1KXJldHVybi0xfXJldHVybiAwfXZhciBmcmUsZHJlPU0oKCk9PnsidXNlIHN0cmljdCI7emQoKTtvKFRNZSwiY29tcGFyZUFzY2VuZGluZyIpO2ZyZT1UTWV9KTtmdW5jdGlvbiBrTWUodCxlLHIpe2Zvcih2YXIgbj0tMSxpPXQuY3JpdGVyaWEsYT1lLmNyaXRlcmlhLHM9aS5sZW5ndGgsbD1yLmxlbmd0aDsrK248czspe3ZhciB1PWZyZShpW25dLGFbbl0pO2lmKHUpe2lmKG4+PWwpcmV0dXJuIHU7dmFyIGg9cltuXTtyZXR1cm4gdSooaD09ImRlc2MiPy0xOjEpfX1yZXR1cm4gdC5pbmRleC1lLmluZGV4fXZhciBwcmUsbXJlPU0oKCk9PnsidXNlIHN0cmljdCI7ZHJlKCk7byhrTWUsImNvbXBhcmVNdWx0aXBsZSIpO3ByZT1rTWV9KTtmdW5jdGlvbiBFTWUodCxlLHIpe2UubGVuZ3RoP2U9UHMoZSxmdW5jdGlvbihhKXtyZXR1cm4gRHQoYSk/ZnVuY3Rpb24ocyl7cmV0dXJuIEpoKHMsYS5sZW5ndGg9PT0xP2FbMF06YSl9OmF9KTplPVthYV07dmFyIG49LTE7ZT1QcyhlLCRvKGRuKSk7dmFyIGk9YVQodCxmdW5jdGlvbihhLHMsbCl7dmFyIHU9UHMoZSxmdW5jdGlvbihoKXtyZXR1cm4gaChhKX0pO3JldHVybntjcml0ZXJpYTp1LGluZGV4Oisrbix2YWx1ZTphfX0pO3JldHVybiB1cmUoaSxmdW5jdGlvbihhLHMpe3JldHVybiBwcmUoYSxzLHIpfSl9dmFyIGdyZSx5cmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtHZCgpO1d2KCk7aXMoKTskTCgpO2hyZSgpO0RkKCk7bXJlKCk7UnUoKTtIbigpO28oRU1lLCJiYXNlT3JkZXJCeSIpO2dyZT1FTWV9KTt2YXIgU01lLHZyZSx4cmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtCTCgpO1NNZT1adygibGVuZ3RoIiksdnJlPVNNZX0pO2Z1bmN0aW9uIEJNZSh0KXtmb3IodmFyIGU9YnJlLmxhc3RJbmRleD0wO2JyZS50ZXN0KHQpOykrK2U7cmV0dXJuIGV9dmFyIHdyZSxDTWUsQU1lLF9NZSxMTWUsRE1lLE5NZSxLTCxRTCxSTWUsVHJlLGtyZSxFcmUsTU1lLFNyZSxDcmUsSU1lLE9NZSxQTWUsYnJlLEFyZSxfcmU9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt3cmU9IlxcdWQ4MDAtXFx1ZGZmZiIsQ01lPSJcXHUwMzAwLVxcdTAzNmYiLEFNZT0iXFx1ZmUyMC1cXHVmZTJmIixfTWU9IlxcdTIwZDAtXFx1MjBmZiIsTE1lPUNNZStBTWUrX01lLERNZT0iXFx1ZmUwZVxcdWZlMGYiLE5NZT0iWyIrd3JlKyJdIixLTD0iWyIrTE1lKyJdIixRTD0iXFx1ZDgzY1tcXHVkZmZiLVxcdWRmZmZdIixSTWU9Iig/OiIrS0wrInwiK1FMKyIpIixUcmU9IlteIit3cmUrIl0iLGtyZT0iKD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfSIsRXJlPSJbXFx1ZDgwMC1cXHVkYmZmXVtcXHVkYzAwLVxcdWRmZmZdIixNTWU9IlxcdTIwMGQiLFNyZT1STWUrIj8iLENyZT0iWyIrRE1lKyJdPyIsSU1lPSIoPzoiK01NZSsiKD86IitbVHJlLGtyZSxFcmVdLmpvaW4oInwiKSsiKSIrQ3JlK1NyZSsiKSoiLE9NZT1DcmUrU3JlK0lNZSxQTWU9Iig/OiIrW1RyZStLTCsiPyIsS0wsa3JlLEVyZSxOTWVdLmpvaW4oInwiKSsiKSIsYnJlPVJlZ0V4cChRTCsiKD89IitRTCsiKXwiK1BNZStPTWUsImciKTtvKEJNZSwidW5pY29kZVNpemUiKTtBcmU9Qk1lfSk7ZnVuY3Rpb24gRk1lKHQpe3JldHVybiB6Sih0KT9BcmUodCk6dnJlKHQpfXZhciBMcmUsRHJlPU0oKCk9PnsidXNlIHN0cmljdCI7eHJlKCk7R0ooKTtfcmUoKTtvKEZNZSwic3RyaW5nU2l6ZSIpO0xyZT1GTWV9KTtmdW5jdGlvbiB6TWUodCxlKXtyZXR1cm4gaFQodCxlLGZ1bmN0aW9uKHIsbil7cmV0dXJuIFF3KHQsbil9KX12YXIgTnJlLFJyZT1NKCgpPT57InVzZSBzdHJpY3QiO2pMKCk7UEwoKTtvKHpNZSwiYmFzZVBpY2siKTtOcmU9ek1lfSk7dmFyIEdNZSxXZCxNcmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtScmUoKTtGSigpO0dNZT1CSihmdW5jdGlvbih0LGUpe3JldHVybiB0PT1udWxsP3t9Ok5yZSh0LGUpfSksV2Q9R01lfSk7ZnVuY3Rpb24gVU1lKHQsZSxyLG4pe2Zvcih2YXIgaT0tMSxhPVZNZSgkTWUoKGUtdCkvKHJ8fDEpKSwwKSxzPUFycmF5KGEpO2EtLTspc1tuP2E6KytpXT10LHQrPXI7cmV0dXJuIHN9dmFyICRNZSxWTWUsSXJlLE9yZT1NKCgpPT57InVzZSBzdHJpY3QiOyRNZT1NYXRoLmNlaWwsVk1lPU1hdGgubWF4O28oVU1lLCJiYXNlUmFuZ2UiKTtJcmU9VU1lfSk7ZnVuY3Rpb24gSE1lKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIG4mJnR5cGVvZiBuIT0ibnVtYmVyIiYmYW8oZSxyLG4pJiYocj1uPXZvaWQgMCksZT1EbShlKSxyPT09dm9pZCAwPyhyPWUsZT0wKTpyPURtKHIpLG49bj09PXZvaWQgMD9lPHI/MTotMTpEbShuKSxJcmUoZSxyLG4sdCl9fXZhciBQcmUsQnJlPU0oKCk9PnsidXNlIHN0cmljdCI7T3JlKCk7UmQoKTtkTCgpO28oSE1lLCJjcmVhdGVSYW5nZSIpO1ByZT1ITWV9KTt2YXIgV01lLGpvLEZyZT1NKCgpPT57InVzZSBzdHJpY3QiO0JyZSgpO1dNZT1QcmUoKSxqbz1XTWV9KTtmdW5jdGlvbiBZTWUodCxlLHIsbixpKXtyZXR1cm4gaSh0LGZ1bmN0aW9uKGEscyxsKXtyPW4/KG49ITEsYSk6ZShyLGEscyxsKX0pLHJ9dmFyIHpyZSxHcmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKFlNZSwiYmFzZVJlZHVjZSIpO3pyZT1ZTWV9KTtmdW5jdGlvbiBxTWUodCxlLHIpe3ZhciBuPUR0KHQpPyRKOnpyZSxpPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gbih0LGRuKGUsNCkscixpLEJzKX12YXIgcXIsWkw9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWSigpO3RmKCk7aXMoKTtHcmUoKTtIbigpO28ocU1lLCJyZWR1Y2UiKTtxcj1xTWV9KTtmdW5jdGlvbiBYTWUodCxlKXt2YXIgcj1EdCh0KT9GbTppVDtyZXR1cm4gcih0LGFyZShkbihlLDMpKSl9dmFyIGFmLCRyZT1NKCgpPT57InVzZSBzdHJpY3QiO0R3KCk7ekwoKTtpcygpO0huKCk7c3JlKCk7byhYTWUsInJlamVjdCIpO2FmPVhNZX0pO2Z1bmN0aW9uIFFNZSh0KXtpZih0PT1udWxsKXJldHVybiAwO2lmKGxpKHQpKXJldHVybiBiaSh0KT9McmUodCk6dC5sZW5ndGg7dmFyIGU9dW8odCk7cmV0dXJuIGU9PWpNZXx8ZT09S01lP3Quc2l6ZTpNbSh0KS5sZW5ndGh9dmFyIGpNZSxLTWUsSkwsVnJlPU0oKCk9PnsidXNlIHN0cmljdCI7RXcoKTtWZCgpO0dvKCk7c1QoKTtEcmUoKTtqTWU9IltvYmplY3QgTWFwXSIsS01lPSJbb2JqZWN0IFNldF0iO28oUU1lLCJzaXplIik7Skw9UU1lfSk7ZnVuY3Rpb24gWk1lKHQsZSl7dmFyIHI7cmV0dXJuIEJzKHQsZnVuY3Rpb24obixpLGEpe3JldHVybiByPWUobixpLGEpLCFyfSksISFyfXZhciBVcmUsSHJlPU0oKCk9PnsidXNlIHN0cmljdCI7dGYoKTtvKFpNZSwiYmFzZVNvbWUiKTtVcmU9Wk1lfSk7ZnVuY3Rpb24gSk1lKHQsZSxyKXt2YXIgbj1EdCh0KT9WdzpVcmU7cmV0dXJuIHImJmFvKHQsZSxyKSYmKGU9dm9pZCAwKSxuKHQsZG4oZSwzKSl9dmFyIHF2LFdyZT1NKCgpPT57InVzZSBzdHJpY3QiO0xMKCk7aXMoKTtIcmUoKTtIbigpO1JkKCk7byhKTWUsInNvbWUiKTtxdj1KTWV9KTt2YXIgZUllLE1jLFlyZT1NKCgpPT57InVzZSBzdHJpY3QiO0JtKCk7eXJlKCk7cG0oKTtSZCgpO2VJZT1FYyhmdW5jdGlvbih0LGUpe2lmKHQ9PW51bGwpcmV0dXJuW107dmFyIHI9ZS5sZW5ndGg7cmV0dXJuIHI+MSYmYW8odCxlWzBdLGVbMV0pP2U9W106cj4yJiZhbyhlWzBdLGVbMV0sZVsyXSkmJihlPVtlWzBdXSksZ3JlKHQsTmMoZSwxKSxbXSl9KSxNYz1lSWV9KTt2YXIgdEllLHJJZSxxcmUsWHJlPU0oKCk9PnsidXNlIHN0cmljdCI7U0woKTtwTCgpO1d3KCk7dEllPTEvMCxySWU9ZWYmJjEvVm0obmV3IGVmKFssLTBdKSlbMV09PXRJZT9mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGVmKHQpfTp0aSxxcmU9ckllfSk7ZnVuY3Rpb24gaUllKHQsZSxyKXt2YXIgbj0tMSxpPWt3LGE9dC5sZW5ndGgscz0hMCxsPVtdLHU9bDtpZihyKXM9ITEsaT10VDtlbHNlIGlmKGE+PW5JZSl7dmFyIGg9ZT9udWxsOnFyZSh0KTtpZihoKXJldHVybiBWbShoKTtzPSExLGk9JG0sdT1uZXcgR219ZWxzZSB1PWU/W106bDtlOmZvcig7KytuPGE7KXt2YXIgZj10W25dLGQ9ZT9lKGYpOmY7aWYoZj1yfHxmIT09MD9mOjAscyYmZD09PWQpe2Zvcih2YXIgcD11Lmxlbmd0aDtwLS07KWlmKHVbcF09PT1kKWNvbnRpbnVlIGU7ZSYmdS5wdXNoKGQpLGwucHVzaChmKX1lbHNlIGkodSxkLHIpfHwodSE9PWwmJnUucHVzaChkKSxsLnB1c2goZikpfXJldHVybiBsfXZhciBuSWUscW0sZlQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjskdygpO3lMKCk7RkwoKTtVdygpO1hyZSgpO1d3KCk7bkllPTIwMDtvKGlJZSwiYmFzZVVuaXEiKTtxbT1pSWV9KTt2YXIgYUllLGVELGpyZT1NKCgpPT57InVzZSBzdHJpY3QiO0JtKCk7cG0oKTtmVCgpO3g1KCk7YUllPUVjKGZ1bmN0aW9uKHQpe3JldHVybiBxbShOYyh0LDEsTGQsITApKX0pLGVEPWFJZX0pO2Z1bmN0aW9uIHNJZSh0KXtyZXR1cm4gdCYmdC5sZW5ndGg/cW0odCk6W119dmFyIFhtLEtyZT1NKCgpPT57InVzZSBzdHJpY3QiO2ZUKCk7byhzSWUsInVuaXEiKTtYbT1zSWV9KTtmdW5jdGlvbiBvSWUodCxlKXtyZXR1cm4gdCYmdC5sZW5ndGg/cW0odCxkbihlLDIpKTpbXX12YXIgUXJlLFpyZT1NKCgpPT57InVzZSBzdHJpY3QiO2lzKCk7ZlQoKTtvKG9JZSwidW5pcUJ5Iik7UXJlPW9JZX0pO2Z1bmN0aW9uIGNJZSh0KXt2YXIgZT0rK2xJZTtyZXR1cm4gQ3codCkrZX12YXIgbEllLFlkLEpyZT1NKCgpPT57InVzZSBzdHJpY3QiO3ZMKCk7bEllPTA7byhjSWUsInVuaXF1ZUlkIik7WWQ9Y0llfSk7ZnVuY3Rpb24gdUllKHQsZSxyKXtmb3IodmFyIG49LTEsaT10Lmxlbmd0aCxhPWUubGVuZ3RoLHM9e307KytuPGk7KXt2YXIgbD1uPGE/ZVtuXTp2b2lkIDA7cihzLHRbbl0sbCl9cmV0dXJuIHN9dmFyIGVuZSx0bmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHVJZSwiYmFzZVppcE9iamVjdCIpO2VuZT11SWV9KTtmdW5jdGlvbiBoSWUodCxlKXtyZXR1cm4gZW5lKHR8fFtdLGV8fFtdLGtjKX12YXIgZFQscm5lPU0oKCk9PnsidXNlIHN0cmljdCI7ZG0oKTt0bmUoKTtvKGhJZSwiemlwT2JqZWN0Iik7ZFQ9aEllfSk7dmFyIEh0PU0oKCk9PnsidXNlIHN0cmljdCI7Q0ooKTtBTCgpO0RlZSgpO05lZSgpO3FfKCk7eHRlKCk7VHRlKCk7RXRlKCk7U3RlKCk7Q3RlKCk7TnRlKCk7R0woKTtQdGUoKTtGdGUoKTtWTCgpO193KCk7blQoKTt6dGUoKTtHdGUoKTskdGUoKTtZdGUoKTtSdSgpO2p0ZSgpO0t0ZSgpO0huKCk7bFQoKTt1digpO2lvKCk7ZXJlKCk7c1QoKTt0cmUoKTtMYygpO2t0ZSgpO1dtKCk7cnJlKCk7bnJlKCk7S18oKTtYTCgpO2lyZSgpO3BMKCk7eXRlKCk7TXJlKCk7Y3JlKCk7RnJlKCk7WkwoKTskcmUoKTtWcmUoKTtXcmUoKTtZcmUoKTtqcmUoKTtLcmUoKTtKcmUoKTtZTCgpO3JuZSgpO30pO2Z1bmN0aW9uIGluZSh0LGUpe3RbZV0/dFtlXSsrOnRbZV09MX1mdW5jdGlvbiBhbmUodCxlKXstLXRbZV18fGRlbGV0ZSB0W2VdfWZ1bmN0aW9uIFh2KHQsZSxyLG4pe3ZhciBpPSIiK2UsYT0iIityO2lmKCF0JiZpPmEpe3ZhciBzPWk7aT1hLGE9c31yZXR1cm4gaStubmUrYStubmUrKGRyKG4pP2ZJZTpuKX1mdW5jdGlvbiBkSWUodCxlLHIsbil7dmFyIGk9IiIrZSxhPSIiK3I7aWYoIXQmJmk+YSl7dmFyIHM9aTtpPWEsYT1zfXZhciBsPXt2OmksdzphfTtyZXR1cm4gbiYmKGwubmFtZT1uKSxsfWZ1bmN0aW9uIHREKHQsZSl7cmV0dXJuIFh2KHQsZS52LGUudyxlLm5hbWUpfXZhciBmSWUscWQsbm5lLElyLHBUPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtmSWU9IlwwIixxZD0iXDAiLG5uZT0iASIsSXI9Y2xhc3N7c3RhdGlje28odGhpcywiR3JhcGgiKX1jb25zdHJ1Y3RvcihlPXt9KXt0aGlzLl9pc0RpcmVjdGVkPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJkaXJlY3RlZCIpP2UuZGlyZWN0ZWQ6ITAsdGhpcy5faXNNdWx0aWdyYXBoPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJtdWx0aWdyYXBoIik/ZS5tdWx0aWdyYXBoOiExLHRoaXMuX2lzQ29tcG91bmQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsImNvbXBvdW5kIik/ZS5jb21wb3VuZDohMSx0aGlzLl9sYWJlbD12b2lkIDAsdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuPUxzKHZvaWQgMCksdGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuPUxzKHZvaWQgMCksdGhpcy5fbm9kZXM9e30sdGhpcy5faXNDb21wb3VuZCYmKHRoaXMuX3BhcmVudD17fSx0aGlzLl9jaGlsZHJlbj17fSx0aGlzLl9jaGlsZHJlbltxZF09e30pLHRoaXMuX2luPXt9LHRoaXMuX3ByZWRzPXt9LHRoaXMuX291dD17fSx0aGlzLl9zdWNzPXt9LHRoaXMuX2VkZ2VPYmpzPXt9LHRoaXMuX2VkZ2VMYWJlbHM9e319aXNEaXJlY3RlZCgpe3JldHVybiB0aGlzLl9pc0RpcmVjdGVkfWlzTXVsdGlncmFwaCgpe3JldHVybiB0aGlzLl9pc011bHRpZ3JhcGh9aXNDb21wb3VuZCgpe3JldHVybiB0aGlzLl9pc0NvbXBvdW5kfXNldEdyYXBoKGUpe3JldHVybiB0aGlzLl9sYWJlbD1lLHRoaXN9Z3JhcGgoKXtyZXR1cm4gdGhpcy5fbGFiZWx9c2V0RGVmYXVsdE5vZGVMYWJlbChlKXtyZXR1cm4gX2koZSl8fChlPUxzKGUpKSx0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49ZSx0aGlzfW5vZGVDb3VudCgpe3JldHVybiB0aGlzLl9ub2RlQ291bnR9bm9kZXMoKXtyZXR1cm4gR3IodGhpcy5fbm9kZXMpfXNvdXJjZXMoKXt2YXIgZT10aGlzO3JldHVybiBZcih0aGlzLm5vZGVzKCksZnVuY3Rpb24ocil7cmV0dXJuIGNyKGUuX2luW3JdKX0pfXNpbmtzKCl7dmFyIGU9dGhpcztyZXR1cm4gWXIodGhpcy5ub2RlcygpLGZ1bmN0aW9uKHIpe3JldHVybiBjcihlLl9vdXRbcl0pfSl9c2V0Tm9kZXMoZSxyKXt2YXIgbj1hcmd1bWVudHMsaT10aGlzO3JldHVybiBTZShlLGZ1bmN0aW9uKGEpe24ubGVuZ3RoPjE/aS5zZXROb2RlKGEscik6aS5zZXROb2RlKGEpfSksdGhpc31zZXROb2RlKGUscil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLl9ub2RlcyxlKT8oYXJndW1lbnRzLmxlbmd0aD4xJiYodGhpcy5fbm9kZXNbZV09ciksdGhpcyk6KHRoaXMuX25vZGVzW2VdPWFyZ3VtZW50cy5sZW5ndGg+MT9yOnRoaXMuX2RlZmF1bHROb2RlTGFiZWxGbihlKSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcGFyZW50W2VdPXFkLHRoaXMuX2NoaWxkcmVuW2VdPXt9LHRoaXMuX2NoaWxkcmVuW3FkXVtlXT0hMCksdGhpcy5faW5bZV09e30sdGhpcy5fcHJlZHNbZV09e30sdGhpcy5fb3V0W2VdPXt9LHRoaXMuX3N1Y3NbZV09e30sKyt0aGlzLl9ub2RlQ291bnQsdGhpcyl9bm9kZShlKXtyZXR1cm4gdGhpcy5fbm9kZXNbZV19aGFzTm9kZShlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX25vZGVzLGUpfXJlbW92ZU5vZGUoZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX25vZGVzLGUpKXt2YXIgcj1vKG49PnRoaXMucmVtb3ZlRWRnZSh0aGlzLl9lZGdlT2Jqc1tuXSksInJlbW92ZUVkZ2UiKTtkZWxldGUgdGhpcy5fbm9kZXNbZV0sdGhpcy5faXNDb21wb3VuZCYmKHRoaXMuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0KGUpLGRlbGV0ZSB0aGlzLl9wYXJlbnRbZV0sU2UodGhpcy5jaGlsZHJlbihlKSxuPT57dGhpcy5zZXRQYXJlbnQobil9KSxkZWxldGUgdGhpcy5fY2hpbGRyZW5bZV0pLFNlKEdyKHRoaXMuX2luW2VdKSxyKSxkZWxldGUgdGhpcy5faW5bZV0sZGVsZXRlIHRoaXMuX3ByZWRzW2VdLFNlKEdyKHRoaXMuX291dFtlXSksciksZGVsZXRlIHRoaXMuX291dFtlXSxkZWxldGUgdGhpcy5fc3Vjc1tlXSwtLXRoaXMuX25vZGVDb3VudH1yZXR1cm4gdGhpc31zZXRQYXJlbnQoZSxyKXtpZighdGhpcy5faXNDb21wb3VuZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgcGFyZW50IGluIGEgbm9uLWNvbXBvdW5kIGdyYXBoIik7aWYoZHIocikpcj1xZDtlbHNle3IrPSIiO2Zvcih2YXIgbj1yOyFkcihuKTtuPXRoaXMucGFyZW50KG4pKWlmKG49PT1lKXRocm93IG5ldyBFcnJvcigiU2V0dGluZyAiK3IrIiBhcyBwYXJlbnQgb2YgIitlKyIgd291bGQgY3JlYXRlIGEgY3ljbGUiKTt0aGlzLnNldE5vZGUocil9cmV0dXJuIHRoaXMuc2V0Tm9kZShlKSx0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChlKSx0aGlzLl9wYXJlbnRbZV09cix0aGlzLl9jaGlsZHJlbltyXVtlXT0hMCx0aGlzfV9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChlKXtkZWxldGUgdGhpcy5fY2hpbGRyZW5bdGhpcy5fcGFyZW50W2VdXVtlXX1wYXJlbnQoZSl7aWYodGhpcy5faXNDb21wb3VuZCl7dmFyIHI9dGhpcy5fcGFyZW50W2VdO2lmKHIhPT1xZClyZXR1cm4gcn19Y2hpbGRyZW4oZSl7aWYoZHIoZSkmJihlPXFkKSx0aGlzLl9pc0NvbXBvdW5kKXt2YXIgcj10aGlzLl9jaGlsZHJlbltlXTtpZihyKXJldHVybiBHcihyKX1lbHNle2lmKGU9PT1xZClyZXR1cm4gdGhpcy5ub2RlcygpO2lmKHRoaXMuaGFzTm9kZShlKSlyZXR1cm5bXX19cHJlZGVjZXNzb3JzKGUpe3ZhciByPXRoaXMuX3ByZWRzW2VdO2lmKHIpcmV0dXJuIEdyKHIpfXN1Y2Nlc3NvcnMoZSl7dmFyIHI9dGhpcy5fc3Vjc1tlXTtpZihyKXJldHVybiBHcihyKX1uZWlnaGJvcnMoZSl7dmFyIHI9dGhpcy5wcmVkZWNlc3NvcnMoZSk7aWYocilyZXR1cm4gZUQocix0aGlzLnN1Y2Nlc3NvcnMoZSkpfWlzTGVhZihlKXt2YXIgcjtyZXR1cm4gdGhpcy5pc0RpcmVjdGVkKCk/cj10aGlzLnN1Y2Nlc3NvcnMoZSk6cj10aGlzLm5laWdoYm9ycyhlKSxyLmxlbmd0aD09PTB9ZmlsdGVyTm9kZXMoZSl7dmFyIHI9bmV3IHRoaXMuY29uc3RydWN0b3Ioe2RpcmVjdGVkOnRoaXMuX2lzRGlyZWN0ZWQsbXVsdGlncmFwaDp0aGlzLl9pc011bHRpZ3JhcGgsY29tcG91bmQ6dGhpcy5faXNDb21wb3VuZH0pO3Iuc2V0R3JhcGgodGhpcy5ncmFwaCgpKTt2YXIgbj10aGlzO1NlKHRoaXMuX25vZGVzLGZ1bmN0aW9uKHMsbCl7ZShsKSYmci5zZXROb2RlKGwscyl9KSxTZSh0aGlzLl9lZGdlT2JqcyxmdW5jdGlvbihzKXtyLmhhc05vZGUocy52KSYmci5oYXNOb2RlKHMudykmJnIuc2V0RWRnZShzLG4uZWRnZShzKSl9KTt2YXIgaT17fTtmdW5jdGlvbiBhKHMpe3ZhciBsPW4ucGFyZW50KHMpO3JldHVybiBsPT09dm9pZCAwfHxyLmhhc05vZGUobCk/KGlbc109bCxsKTpsIGluIGk/aVtsXTphKGwpfXJldHVybiBvKGEsImZpbmRQYXJlbnQiKSx0aGlzLl9pc0NvbXBvdW5kJiZTZShyLm5vZGVzKCksZnVuY3Rpb24ocyl7ci5zZXRQYXJlbnQocyxhKHMpKX0pLHJ9c2V0RGVmYXVsdEVkZ2VMYWJlbChlKXtyZXR1cm4gX2koZSl8fChlPUxzKGUpKSx0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm49ZSx0aGlzfWVkZ2VDb3VudCgpe3JldHVybiB0aGlzLl9lZGdlQ291bnR9ZWRnZXMoKXtyZXR1cm4gYnIodGhpcy5fZWRnZU9ianMpfXNldFBhdGgoZSxyKXt2YXIgbj10aGlzLGk9YXJndW1lbnRzO3JldHVybiBxcihlLGZ1bmN0aW9uKGEscyl7cmV0dXJuIGkubGVuZ3RoPjE/bi5zZXRFZGdlKGEscyxyKTpuLnNldEVkZ2UoYSxzKSxzfSksdGhpc31zZXRFZGdlKCl7dmFyIGUscixuLGksYT0hMSxzPWFyZ3VtZW50c1swXTt0eXBlb2Ygcz09Im9iamVjdCImJnMhPT1udWxsJiYidiJpbiBzPyhlPXMudixyPXMudyxuPXMubmFtZSxhcmd1bWVudHMubGVuZ3RoPT09MiYmKGk9YXJndW1lbnRzWzFdLGE9ITApKTooZT1zLHI9YXJndW1lbnRzWzFdLG49YXJndW1lbnRzWzNdLGFyZ3VtZW50cy5sZW5ndGg+MiYmKGk9YXJndW1lbnRzWzJdLGE9ITApKSxlPSIiK2Uscj0iIityLGRyKG4pfHwobj0iIituKTt2YXIgbD1Ydih0aGlzLl9pc0RpcmVjdGVkLGUscixuKTtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5fZWRnZUxhYmVscyxsKSlyZXR1cm4gYSYmKHRoaXMuX2VkZ2VMYWJlbHNbbF09aSksdGhpcztpZighZHIobikmJiF0aGlzLl9pc011bHRpZ3JhcGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IGEgbmFtZWQgZWRnZSB3aGVuIGlzTXVsdGlncmFwaCA9IGZhbHNlIik7dGhpcy5zZXROb2RlKGUpLHRoaXMuc2V0Tm9kZShyKSx0aGlzLl9lZGdlTGFiZWxzW2xdPWE/aTp0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm4oZSxyLG4pO3ZhciB1PWRJZSh0aGlzLl9pc0RpcmVjdGVkLGUscixuKTtyZXR1cm4gZT11LnYscj11LncsT2JqZWN0LmZyZWV6ZSh1KSx0aGlzLl9lZGdlT2Jqc1tsXT11LGluZSh0aGlzLl9wcmVkc1tyXSxlKSxpbmUodGhpcy5fc3Vjc1tlXSxyKSx0aGlzLl9pbltyXVtsXT11LHRoaXMuX291dFtlXVtsXT11LHRoaXMuX2VkZ2VDb3VudCsrLHRoaXN9ZWRnZShlLHIsbil7dmFyIGk9YXJndW1lbnRzLmxlbmd0aD09PTE/dEQodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOlh2KHRoaXMuX2lzRGlyZWN0ZWQsZSxyLG4pO3JldHVybiB0aGlzLl9lZGdlTGFiZWxzW2ldfWhhc0VkZ2UoZSxyLG4pe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg9PT0xP3REKHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTpYdih0aGlzLl9pc0RpcmVjdGVkLGUscixuKTtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX2VkZ2VMYWJlbHMsaSl9cmVtb3ZlRWRnZShlLHIsbil7dmFyIGk9YXJndW1lbnRzLmxlbmd0aD09PTE/dEQodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOlh2KHRoaXMuX2lzRGlyZWN0ZWQsZSxyLG4pLGE9dGhpcy5fZWRnZU9ianNbaV07cmV0dXJuIGEmJihlPWEudixyPWEudyxkZWxldGUgdGhpcy5fZWRnZUxhYmVsc1tpXSxkZWxldGUgdGhpcy5fZWRnZU9ianNbaV0sYW5lKHRoaXMuX3ByZWRzW3JdLGUpLGFuZSh0aGlzLl9zdWNzW2VdLHIpLGRlbGV0ZSB0aGlzLl9pbltyXVtpXSxkZWxldGUgdGhpcy5fb3V0W2VdW2ldLHRoaXMuX2VkZ2VDb3VudC0tKSx0aGlzfWluRWRnZXMoZSxyKXt2YXIgbj10aGlzLl9pbltlXTtpZihuKXt2YXIgaT1icihuKTtyZXR1cm4gcj9ZcihpLGZ1bmN0aW9uKGEpe3JldHVybiBhLnY9PT1yfSk6aX19b3V0RWRnZXMoZSxyKXt2YXIgbj10aGlzLl9vdXRbZV07aWYobil7dmFyIGk9YnIobik7cmV0dXJuIHI/WXIoaSxmdW5jdGlvbihhKXtyZXR1cm4gYS53PT09cn0pOml9fW5vZGVFZGdlcyhlLHIpe3ZhciBuPXRoaXMuaW5FZGdlcyhlLHIpO2lmKG4pcmV0dXJuIG4uY29uY2F0KHRoaXMub3V0RWRnZXMoZSxyKSl9fTtJci5wcm90b3R5cGUuX25vZGVDb3VudD0wO0lyLnByb3RvdHlwZS5fZWRnZUNvdW50PTA7byhpbmUsImluY3JlbWVudE9ySW5pdEVudHJ5Iik7byhhbmUsImRlY3JlbWVudE9yUmVtb3ZlRW50cnkiKTtvKFh2LCJlZGdlQXJnc1RvSWQiKTtvKGRJZSwiZWRnZUFyZ3NUb09iaiIpO28odEQsImVkZ2VPYmpUb0lkIil9KTt2YXIgR3M9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwVCgpfSk7ZnVuY3Rpb24gc25lKHQpe3QuX3ByZXYuX25leHQ9dC5fbmV4dCx0Ll9uZXh0Ll9wcmV2PXQuX3ByZXYsZGVsZXRlIHQuX25leHQsZGVsZXRlIHQuX3ByZXZ9ZnVuY3Rpb24gcEllKHQsZSl7aWYodCE9PSJfbmV4dCImJnQhPT0iX3ByZXYiKXJldHVybiBlfXZhciBtVCxvbmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjttVD1jbGFzc3tzdGF0aWN7byh0aGlzLCJMaXN0Iil9Y29uc3RydWN0b3IoKXt2YXIgZT17fTtlLl9uZXh0PWUuX3ByZXY9ZSx0aGlzLl9zZW50aW5lbD1lfWRlcXVldWUoKXt2YXIgZT10aGlzLl9zZW50aW5lbCxyPWUuX3ByZXY7aWYociE9PWUpcmV0dXJuIHNuZShyKSxyfWVucXVldWUoZSl7dmFyIHI9dGhpcy5fc2VudGluZWw7ZS5fcHJldiYmZS5fbmV4dCYmc25lKGUpLGUuX25leHQ9ci5fbmV4dCxyLl9uZXh0Ll9wcmV2PWUsci5fbmV4dD1lLGUuX3ByZXY9cn10b1N0cmluZygpe2Zvcih2YXIgZT1bXSxyPXRoaXMuX3NlbnRpbmVsLG49ci5fcHJldjtuIT09cjspZS5wdXNoKEpTT04uc3RyaW5naWZ5KG4scEllKSksbj1uLl9wcmV2O3JldHVybiJbIitlLmpvaW4oIiwgIikrIl0ifX07byhzbmUsInVubGluayIpO28ocEllLCJmaWx0ZXJPdXRMaW5rcyIpfSk7ZnVuY3Rpb24gbG5lKHQsZSl7aWYodC5ub2RlQ291bnQoKTw9MSlyZXR1cm5bXTt2YXIgcj15SWUodCxlfHxtSWUpLG49Z0llKHIuZ3JhcGgsci5idWNrZXRzLHIuemVyb0lkeCk7cmV0dXJuIFdyKFFlKG4sZnVuY3Rpb24oaSl7cmV0dXJuIHQub3V0RWRnZXMoaS52LGkudyl9KSl9ZnVuY3Rpb24gZ0llKHQsZSxyKXtmb3IodmFyIG49W10saT1lW2UubGVuZ3RoLTFdLGE9ZVswXSxzO3Qubm9kZUNvdW50KCk7KXtmb3IoO3M9YS5kZXF1ZXVlKCk7KXJEKHQsZSxyLHMpO2Zvcig7cz1pLmRlcXVldWUoKTspckQodCxlLHIscyk7aWYodC5ub2RlQ291bnQoKSl7Zm9yKHZhciBsPWUubGVuZ3RoLTI7bD4wOy0tbClpZihzPWVbbF0uZGVxdWV1ZSgpLHMpe249bi5jb25jYXQockQodCxlLHIscywhMCkpO2JyZWFrfX19cmV0dXJuIG59ZnVuY3Rpb24gckQodCxlLHIsbixpKXt2YXIgYT1pP1tdOnZvaWQgMDtyZXR1cm4gU2UodC5pbkVkZ2VzKG4udiksZnVuY3Rpb24ocyl7dmFyIGw9dC5lZGdlKHMpLHU9dC5ub2RlKHMudik7aSYmYS5wdXNoKHt2OnMudix3OnMud30pLHUub3V0LT1sLG5EKGUscix1KX0pLFNlKHQub3V0RWRnZXMobi52KSxmdW5jdGlvbihzKXt2YXIgbD10LmVkZ2UocyksdT1zLncsaD10Lm5vZGUodSk7aC5pbi09bCxuRChlLHIsaCl9KSx0LnJlbW92ZU5vZGUobi52KSxhfWZ1bmN0aW9uIHlJZSh0LGUpe3ZhciByPW5ldyBJcixuPTAsaT0wO1NlKHQubm9kZXMoKSxmdW5jdGlvbihsKXtyLnNldE5vZGUobCx7djpsLGluOjAsb3V0OjB9KX0pLFNlKHQuZWRnZXMoKSxmdW5jdGlvbihsKXt2YXIgdT1yLmVkZ2UobC52LGwudyl8fDAsaD1lKGwpLGY9dStoO3Iuc2V0RWRnZShsLnYsbC53LGYpLGk9TWF0aC5tYXgoaSxyLm5vZGUobC52KS5vdXQrPWgpLG49TWF0aC5tYXgobixyLm5vZGUobC53KS5pbis9aCl9KTt2YXIgYT1qbyhpK24rMykubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBtVH0pLHM9bisxO3JldHVybiBTZShyLm5vZGVzKCksZnVuY3Rpb24obCl7bkQoYSxzLHIubm9kZShsKSl9KSx7Z3JhcGg6cixidWNrZXRzOmEsemVyb0lkeDpzfX1mdW5jdGlvbiBuRCh0LGUscil7ci5vdXQ/ci5pbj90W3Iub3V0LXIuaW4rZV0uZW5xdWV1ZShyKTp0W3QubGVuZ3RoLTFdLmVucXVldWUocik6dFswXS5lbnF1ZXVlKHIpfXZhciBtSWUsY25lPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtHcygpO29uZSgpO21JZT1McygxKTtvKGxuZSwiZ3JlZWR5RkFTIik7byhnSWUsImRvR3JlZWR5RkFTIik7byhyRCwicmVtb3ZlTm9kZSIpO28oeUllLCJidWlsZFN0YXRlIik7byhuRCwiYXNzaWduQnVja2V0Iil9KTtmdW5jdGlvbiB1bmUodCl7dmFyIGU9dC5ncmFwaCgpLmFjeWNsaWNlcj09PSJncmVlZHkiP2xuZSh0LHIodCkpOnZJZSh0KTtTZShlLGZ1bmN0aW9uKG4pe3ZhciBpPXQuZWRnZShuKTt0LnJlbW92ZUVkZ2UobiksaS5mb3J3YXJkTmFtZT1uLm5hbWUsaS5yZXZlcnNlZD0hMCx0LnNldEVkZ2Uobi53LG4udixpLFlkKCJyZXYiKSl9KTtmdW5jdGlvbiByKG4pe3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5lZGdlKGkpLndlaWdodH19byhyLCJ3ZWlnaHRGbiIpfWZ1bmN0aW9uIHZJZSh0KXt2YXIgZT1bXSxyPXt9LG49e307ZnVuY3Rpb24gaShhKXtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixhKXx8KG5bYV09ITAsclthXT0hMCxTZSh0Lm91dEVkZ2VzKGEpLGZ1bmN0aW9uKHMpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLHMudyk/ZS5wdXNoKHMpOmkocy53KX0pLGRlbGV0ZSByW2FdKX1yZXR1cm4gbyhpLCJkZnMiKSxTZSh0Lm5vZGVzKCksaSksZX1mdW5jdGlvbiBobmUodCl7U2UodC5lZGdlcygpLGZ1bmN0aW9uKGUpe3ZhciByPXQuZWRnZShlKTtpZihyLnJldmVyc2VkKXt0LnJlbW92ZUVkZ2UoZSk7dmFyIG49ci5mb3J3YXJkTmFtZTtkZWxldGUgci5yZXZlcnNlZCxkZWxldGUgci5mb3J3YXJkTmFtZSx0LnNldEVkZ2UoZS53LGUudixyLG4pfX0pfXZhciBpRD1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7Y25lKCk7byh1bmUsInJ1biIpO28odkllLCJkZnNGQVMiKTtvKGhuZSwidW5kbyIpfSk7ZnVuY3Rpb24gSWModCxlLHIsbil7dmFyIGk7ZG8gaT1ZZChuKTt3aGlsZSh0Lmhhc05vZGUoaSkpO3JldHVybiByLmR1bW15PWUsdC5zZXROb2RlKGksciksaX1mdW5jdGlvbiBkbmUodCl7dmFyIGU9bmV3IElyKCkuc2V0R3JhcGgodC5ncmFwaCgpKTtyZXR1cm4gU2UodC5ub2RlcygpLGZ1bmN0aW9uKHIpe2Uuc2V0Tm9kZShyLHQubm9kZShyKSl9KSxTZSh0LmVkZ2VzKCksZnVuY3Rpb24ocil7dmFyIG49ZS5lZGdlKHIudixyLncpfHx7d2VpZ2h0OjAsbWlubGVuOjF9LGk9dC5lZGdlKHIpO2Uuc2V0RWRnZShyLnYsci53LHt3ZWlnaHQ6bi53ZWlnaHQraS53ZWlnaHQsbWlubGVuOk1hdGgubWF4KG4ubWlubGVuLGkubWlubGVuKX0pfSksZX1mdW5jdGlvbiBnVCh0KXt2YXIgZT1uZXcgSXIoe211bHRpZ3JhcGg6dC5pc011bHRpZ3JhcGgoKX0pLnNldEdyYXBoKHQuZ3JhcGgoKSk7cmV0dXJuIFNlKHQubm9kZXMoKSxmdW5jdGlvbihyKXt0LmNoaWxkcmVuKHIpLmxlbmd0aHx8ZS5zZXROb2RlKHIsdC5ub2RlKHIpKX0pLFNlKHQuZWRnZXMoKSxmdW5jdGlvbihyKXtlLnNldEVkZ2Uocix0LmVkZ2UocikpfSksZX1mdW5jdGlvbiBhRCh0LGUpe3ZhciByPXQueCxuPXQueSxpPWUueC1yLGE9ZS55LW4scz10LndpZHRoLzIsbD10LmhlaWdodC8yO2lmKCFpJiYhYSl0aHJvdyBuZXcgRXJyb3IoIk5vdCBwb3NzaWJsZSB0byBmaW5kIGludGVyc2VjdGlvbiBpbnNpZGUgb2YgdGhlIHJlY3RhbmdsZSIpO3ZhciB1LGg7cmV0dXJuIE1hdGguYWJzKGEpKnM+TWF0aC5hYnMoaSkqbD8oYTwwJiYobD0tbCksdT1sKmkvYSxoPWwpOihpPDAmJihzPS1zKSx1PXMsaD1zKmEvaSkse3g6cit1LHk6bitofX1mdW5jdGlvbiBzZih0KXt2YXIgZT1RZShqbyhvRCh0KSsxKSxmdW5jdGlvbigpe3JldHVybltdfSk7cmV0dXJuIFNlKHQubm9kZXMoKSxmdW5jdGlvbihyKXt2YXIgbj10Lm5vZGUociksaT1uLnJhbms7ZHIoaSl8fChlW2ldW24ub3JkZXJdPXIpfSksZX1mdW5jdGlvbiBwbmUodCl7dmFyIGU9QmwoUWUodC5ub2RlcygpLGZ1bmN0aW9uKHIpe3JldHVybiB0Lm5vZGUocikucmFua30pKTtTZSh0Lm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49dC5ub2RlKHIpO050KG4sInJhbmsiKSYmKG4ucmFuay09ZSl9KX1mdW5jdGlvbiBtbmUodCl7dmFyIGU9QmwoUWUodC5ub2RlcygpLGZ1bmN0aW9uKGEpe3JldHVybiB0Lm5vZGUoYSkucmFua30pKSxyPVtdO1NlKHQubm9kZXMoKSxmdW5jdGlvbihhKXt2YXIgcz10Lm5vZGUoYSkucmFuay1lO3Jbc118fChyW3NdPVtdKSxyW3NdLnB1c2goYSl9KTt2YXIgbj0wLGk9dC5ncmFwaCgpLm5vZGVSYW5rRmFjdG9yO1NlKHIsZnVuY3Rpb24oYSxzKXtkcihhKSYmcyVpIT09MD8tLW46biYmU2UoYSxmdW5jdGlvbihsKXt0Lm5vZGUobCkucmFuays9bn0pfSl9ZnVuY3Rpb24gc0QodCxlLHIsbil7dmFyIGk9e3dpZHRoOjAsaGVpZ2h0OjB9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj00JiYoaS5yYW5rPXIsaS5vcmRlcj1uKSxJYyh0LCJib3JkZXIiLGksZSl9ZnVuY3Rpb24gb0QodCl7cmV0dXJuIEZzKFFlKHQubm9kZXMoKSxmdW5jdGlvbihlKXt2YXIgcj10Lm5vZGUoZSkucmFuaztpZighZHIocikpcmV0dXJuIHJ9KSl9ZnVuY3Rpb24gZ25lKHQsZSl7dmFyIHI9e2xoczpbXSxyaHM6W119O3JldHVybiBTZSh0LGZ1bmN0aW9uKG4pe2Uobik/ci5saHMucHVzaChuKTpyLnJocy5wdXNoKG4pfSkscn1mdW5jdGlvbiB5bmUodCxlKXt2YXIgcj1lVCgpO3RyeXtyZXR1cm4gZSgpfWZpbmFsbHl7Y29uc29sZS5sb2codCsiIHRpbWU6ICIrKGVUKCktcikrIm1zIil9fWZ1bmN0aW9uIHZuZSh0LGUpe3JldHVybiBlKCl9dmFyIE9jPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtHcygpO28oSWMsImFkZER1bW15Tm9kZSIpO28oZG5lLCJzaW1wbGlmeSIpO28oZ1QsImFzTm9uQ29tcG91bmRHcmFwaCIpO28oYUQsImludGVyc2VjdFJlY3QiKTtvKHNmLCJidWlsZExheWVyTWF0cml4Iik7byhwbmUsIm5vcm1hbGl6ZVJhbmtzIik7byhtbmUsInJlbW92ZUVtcHR5UmFua3MiKTtvKHNELCJhZGRCb3JkZXJOb2RlIik7byhvRCwibWF4UmFuayIpO28oZ25lLCJwYXJ0aXRpb24iKTtvKHluZSwidGltZSIpO28odm5lLCJub3RpbWUiKX0pO2Z1bmN0aW9uIGJuZSh0KXtmdW5jdGlvbiBlKHIpe3ZhciBuPXQuY2hpbGRyZW4ociksaT10Lm5vZGUocik7aWYobi5sZW5ndGgmJlNlKG4sZSksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGksIm1pblJhbmsiKSl7aS5ib3JkZXJMZWZ0PVtdLGkuYm9yZGVyUmlnaHQ9W107Zm9yKHZhciBhPWkubWluUmFuayxzPWkubWF4UmFuaysxO2E8czsrK2EpeG5lKHQsImJvcmRlckxlZnQiLCJfYmwiLHIsaSxhKSx4bmUodCwiYm9yZGVyUmlnaHQiLCJfYnIiLHIsaSxhKX19byhlLCJkZnMiKSxTZSh0LmNoaWxkcmVuKCksZSl9ZnVuY3Rpb24geG5lKHQsZSxyLG4saSxhKXt2YXIgcz17d2lkdGg6MCxoZWlnaHQ6MCxyYW5rOmEsYm9yZGVyVHlwZTplfSxsPWlbZV1bYS0xXSx1PUljKHQsImJvcmRlciIscyxyKTtpW2VdW2FdPXUsdC5zZXRQYXJlbnQodSxuKSxsJiZ0LnNldEVkZ2UobCx1LHt3ZWlnaHQ6MX0pfXZhciB3bmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO09jKCk7byhibmUsImFkZEJvcmRlclNlZ21lbnRzIik7byh4bmUsImFkZEJvcmRlck5vZGUiKX0pO2Z1bmN0aW9uIGtuZSh0KXt2YXIgZT10LmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpOyhlPT09ImxyInx8ZT09PSJybCIpJiZTbmUodCl9ZnVuY3Rpb24gRW5lKHQpe3ZhciBlPXQuZ3JhcGgoKS5yYW5rZGlyLnRvTG93ZXJDYXNlKCk7KGU9PT0iYnQifHxlPT09InJsIikmJnhJZSh0KSwoZT09PSJsciJ8fGU9PT0icmwiKSYmKGJJZSh0KSxTbmUodCkpfWZ1bmN0aW9uIFNuZSh0KXtTZSh0Lm5vZGVzKCksZnVuY3Rpb24oZSl7VG5lKHQubm9kZShlKSl9KSxTZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7VG5lKHQuZWRnZShlKSl9KX1mdW5jdGlvbiBUbmUodCl7dmFyIGU9dC53aWR0aDt0LndpZHRoPXQuaGVpZ2h0LHQuaGVpZ2h0PWV9ZnVuY3Rpb24geEllKHQpe1NlKHQubm9kZXMoKSxmdW5jdGlvbihlKXtsRCh0Lm5vZGUoZSkpfSksU2UodC5lZGdlcygpLGZ1bmN0aW9uKGUpe3ZhciByPXQuZWRnZShlKTtTZShyLnBvaW50cyxsRCksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsInkiKSYmbEQocil9KX1mdW5jdGlvbiBsRCh0KXt0Lnk9LXQueX1mdW5jdGlvbiBiSWUodCl7U2UodC5ub2RlcygpLGZ1bmN0aW9uKGUpe2NEKHQubm9kZShlKSl9KSxTZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIHI9dC5lZGdlKGUpO1NlKHIucG9pbnRzLGNEKSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwociwieCIpJiZjRChyKX0pfWZ1bmN0aW9uIGNEKHQpe3ZhciBlPXQueDt0Lng9dC55LHQueT1lfXZhciBDbmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO28oa25lLCJhZGp1c3QiKTtvKEVuZSwidW5kbyIpO28oU25lLCJzd2FwV2lkdGhIZWlnaHQiKTtvKFRuZSwic3dhcFdpZHRoSGVpZ2h0T25lIik7byh4SWUsInJldmVyc2VZIik7byhsRCwicmV2ZXJzZVlPbmUiKTtvKGJJZSwic3dhcFhZIik7byhjRCwic3dhcFhZT25lIil9KTtmdW5jdGlvbiBBbmUodCl7dC5ncmFwaCgpLmR1bW15Q2hhaW5zPVtdLFNlKHQuZWRnZXMoKSxmdW5jdGlvbihlKXtUSWUodCxlKX0pfWZ1bmN0aW9uIFRJZSh0LGUpe3ZhciByPWUudixuPXQubm9kZShyKS5yYW5rLGk9ZS53LGE9dC5ub2RlKGkpLnJhbmsscz1lLm5hbWUsbD10LmVkZ2UoZSksdT1sLmxhYmVsUmFuaztpZihhIT09bisxKXt0LnJlbW92ZUVkZ2UoZSk7dmFyIGg9dm9pZCAwLGYsZDtmb3IoZD0wLCsrbjtuPGE7KytkLCsrbilsLnBvaW50cz1bXSxoPXt3aWR0aDowLGhlaWdodDowLGVkZ2VMYWJlbDpsLGVkZ2VPYmo6ZSxyYW5rOm59LGY9SWModCwiZWRnZSIsaCwiX2QiKSxuPT09dSYmKGgud2lkdGg9bC53aWR0aCxoLmhlaWdodD1sLmhlaWdodCxoLmR1bW15PSJlZGdlLWxhYmVsIixoLmxhYmVscG9zPWwubGFiZWxwb3MpLHQuc2V0RWRnZShyLGYse3dlaWdodDpsLndlaWdodH0scyksZD09PTAmJnQuZ3JhcGgoKS5kdW1teUNoYWlucy5wdXNoKGYpLHI9Zjt0LnNldEVkZ2UocixpLHt3ZWlnaHQ6bC53ZWlnaHR9LHMpfX1mdW5jdGlvbiBfbmUodCl7U2UodC5ncmFwaCgpLmR1bW15Q2hhaW5zLGZ1bmN0aW9uKGUpe3ZhciByPXQubm9kZShlKSxuPXIuZWRnZUxhYmVsLGk7Zm9yKHQuc2V0RWRnZShyLmVkZ2VPYmosbik7ci5kdW1teTspaT10LnN1Y2Nlc3NvcnMoZSlbMF0sdC5yZW1vdmVOb2RlKGUpLG4ucG9pbnRzLnB1c2goe3g6ci54LHk6ci55fSksci5kdW1teT09PSJlZGdlLWxhYmVsIiYmKG4ueD1yLngsbi55PXIueSxuLndpZHRoPXIud2lkdGgsbi5oZWlnaHQ9ci5oZWlnaHQpLGU9aSxyPXQubm9kZShlKX0pfXZhciB1RD1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7T2MoKTtvKEFuZSwicnVuIik7byhUSWUsIm5vcm1hbGl6ZUVkZ2UiKTtvKF9uZSwidW5kbyIpfSk7ZnVuY3Rpb24ganYodCl7dmFyIGU9e307ZnVuY3Rpb24gcihuKXt2YXIgaT10Lm5vZGUobik7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikpcmV0dXJuIGkucmFuaztlW25dPSEwO3ZhciBhPUJsKFFlKHQub3V0RWRnZXMobiksZnVuY3Rpb24ocyl7cmV0dXJuIHIocy53KS10LmVkZ2UocykubWlubGVufSkpO3JldHVybihhPT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfHxhPT09dm9pZCAwfHxhPT09bnVsbCkmJihhPTApLGkucmFuaz1hfW8ociwiZGZzIiksU2UodC5zb3VyY2VzKCkscil9ZnVuY3Rpb24gWGQodCxlKXtyZXR1cm4gdC5ub2RlKGUudykucmFuay10Lm5vZGUoZS52KS5yYW5rLXQuZWRnZShlKS5taW5sZW59dmFyIHlUPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtvKGp2LCJsb25nZXN0UGF0aCIpO28oWGQsInNsYWNrIil9KTtmdW5jdGlvbiB2VCh0KXt2YXIgZT1uZXcgSXIoe2RpcmVjdGVkOiExfSkscj10Lm5vZGVzKClbMF0sbj10Lm5vZGVDb3VudCgpO2Uuc2V0Tm9kZShyLHt9KTtmb3IodmFyIGksYTtrSWUoZSx0KTxuOylpPUVJZShlLHQpLGE9ZS5oYXNOb2RlKGkudik/WGQodCxpKTotWGQodCxpKSxTSWUoZSx0LGEpO3JldHVybiBlfWZ1bmN0aW9uIGtJZSh0LGUpe2Z1bmN0aW9uIHIobil7U2UoZS5ub2RlRWRnZXMobiksZnVuY3Rpb24oaSl7dmFyIGE9aS52LHM9bj09PWE/aS53OmE7IXQuaGFzTm9kZShzKSYmIVhkKGUsaSkmJih0LnNldE5vZGUocyx7fSksdC5zZXRFZGdlKG4scyx7fSkscihzKSl9KX1yZXR1cm4gbyhyLCJkZnMiKSxTZSh0Lm5vZGVzKCksciksdC5ub2RlQ291bnQoKX1mdW5jdGlvbiBFSWUodCxlKXtyZXR1cm4gSGQoZS5lZGdlcygpLGZ1bmN0aW9uKHIpe2lmKHQuaGFzTm9kZShyLnYpIT09dC5oYXNOb2RlKHIudykpcmV0dXJuIFhkKGUscil9KX1mdW5jdGlvbiBTSWUodCxlLHIpe1NlKHQubm9kZXMoKSxmdW5jdGlvbihuKXtlLm5vZGUobikucmFuays9cn0pfXZhciBoRD1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7R3MoKTt5VCgpO28odlQsImZlYXNpYmxlVHJlZSIpO28oa0llLCJ0aWdodFRyZWUiKTtvKEVJZSwiZmluZE1pblNsYWNrRWRnZSIpO28oU0llLCJzaGlmdFJhbmtzIil9KTt2YXIgRG5lPU0oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgZkQ9TSgoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBkWXQsZEQ9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO2ZEKCk7ZFl0PUxzKDEpfSk7dmFyIE5uZT1NKCgpPT57InVzZSBzdHJpY3QiO2REKCl9KTt2YXIgcEQ9TSgoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBSbmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwRCgpfSk7dmFyIEVZdCxNbmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO0VZdD1McygxKX0pO2Z1bmN0aW9uIG1EKHQpe3ZhciBlPXt9LHI9e30sbj1bXTtmdW5jdGlvbiBpKGEpe2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLGEpKXRocm93IG5ldyBLdjtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxhKXx8KHJbYV09ITAsZVthXT0hMCxTZSh0LnByZWRlY2Vzc29ycyhhKSxpKSxkZWxldGUgclthXSxuLnB1c2goYSkpfWlmKG8oaSwidmlzaXQiKSxTZSh0LnNpbmtzKCksaSksSkwoZSkhPT10Lm5vZGVDb3VudCgpKXRocm93IG5ldyBLdjtyZXR1cm4gbn1mdW5jdGlvbiBLdigpe312YXIgZ0Q9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO21ELkN5Y2xlRXhjZXB0aW9uPUt2O28obUQsInRvcHNvcnQiKTtvKEt2LCJDeWNsZUV4Y2VwdGlvbiIpO0t2LnByb3RvdHlwZT1uZXcgRXJyb3J9KTt2YXIgSW5lPU0oKCk9PnsidXNlIHN0cmljdCI7Z0QoKX0pO2Z1bmN0aW9uIHhUKHQsZSxyKXtEdChlKXx8KGU9W2VdKTt2YXIgbj0odC5pc0RpcmVjdGVkKCk/dC5zdWNjZXNzb3JzOnQubmVpZ2hib3JzKS5iaW5kKHQpLGk9W10sYT17fTtyZXR1cm4gU2UoZSxmdW5jdGlvbihzKXtpZighdC5oYXNOb2RlKHMpKXRocm93IG5ldyBFcnJvcigiR3JhcGggZG9lcyBub3QgaGF2ZSBub2RlOiAiK3MpO09uZSh0LHMscj09PSJwb3N0IixhLG4saSl9KSxpfWZ1bmN0aW9uIE9uZSh0LGUscixuLGksYSl7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sZSl8fChuW2VdPSEwLHJ8fGEucHVzaChlKSxTZShpKGUpLGZ1bmN0aW9uKHMpe09uZSh0LHMscixuLGksYSl9KSxyJiZhLnB1c2goZSkpfXZhciB5RD1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7byh4VCwiZGZzIik7byhPbmUsImRvRGZzIil9KTtmdW5jdGlvbiB2RCh0LGUpe3JldHVybiB4VCh0LGUsInBvc3QiKX12YXIgUG5lPU0oKCk9PnsidXNlIHN0cmljdCI7eUQoKTtvKHZELCJwb3N0b3JkZXIiKX0pO2Z1bmN0aW9uIHhEKHQsZSl7cmV0dXJuIHhUKHQsZSwicHJlIil9dmFyIEJuZT1NKCgpPT57InVzZSBzdHJpY3QiO3lEKCk7byh4RCwicHJlb3JkZXIiKX0pO3ZhciBGbmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtmRCgpO3BUKCl9KTt2YXIgem5lPU0oKCk9PnsidXNlIHN0cmljdCI7RG5lKCk7ZEQoKTtObmUoKTtSbmUoKTtNbmUoKTtJbmUoKTtQbmUoKTtCbmUoKTtGbmUoKTtwRCgpO2dEKCl9KTtmdW5jdGlvbiBsZih0KXt0PWRuZSh0KSxqdih0KTt2YXIgZT12VCh0KTt3RChlKSxiRChlLHQpO2Zvcih2YXIgcixuO3I9VW5lKGUpOyluPUhuZShlLHQsciksV25lKGUsdCxyLG4pfWZ1bmN0aW9uIGJEKHQsZSl7dmFyIHI9dkQodCx0Lm5vZGVzKCkpO3I9ci5zbGljZSgwLHIubGVuZ3RoLTEpLFNlKHIsZnVuY3Rpb24obil7REllKHQsZSxuKX0pfWZ1bmN0aW9uIERJZSh0LGUscil7dmFyIG49dC5ub2RlKHIpLGk9bi5wYXJlbnQ7dC5lZGdlKHIsaSkuY3V0dmFsdWU9JG5lKHQsZSxyKX1mdW5jdGlvbiAkbmUodCxlLHIpe3ZhciBuPXQubm9kZShyKSxpPW4ucGFyZW50LGE9ITAscz1lLmVkZ2UocixpKSxsPTA7cmV0dXJuIHN8fChhPSExLHM9ZS5lZGdlKGkscikpLGw9cy53ZWlnaHQsU2UoZS5ub2RlRWRnZXMociksZnVuY3Rpb24odSl7dmFyIGg9dS52PT09cixmPWg/dS53OnUudjtpZihmIT09aSl7dmFyIGQ9aD09PWEscD1lLmVkZ2UodSkud2VpZ2h0O2lmKGwrPWQ/cDotcCxSSWUodCxyLGYpKXt2YXIgbT10LmVkZ2UocixmKS5jdXR2YWx1ZTtsKz1kPy1tOm19fX0pLGx9ZnVuY3Rpb24gd0QodCxlKXthcmd1bWVudHMubGVuZ3RoPDImJihlPXQubm9kZXMoKVswXSksVm5lKHQse30sMSxlKX1mdW5jdGlvbiBWbmUodCxlLHIsbixpKXt2YXIgYT1yLHM9dC5ub2RlKG4pO3JldHVybiBlW25dPSEwLFNlKHQubmVpZ2hib3JzKG4pLGZ1bmN0aW9uKGwpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGwpfHwocj1WbmUodCxlLHIsbCxuKSl9KSxzLmxvdz1hLHMubGltPXIrKyxpP3MucGFyZW50PWk6ZGVsZXRlIHMucGFyZW50LHJ9ZnVuY3Rpb24gVW5lKHQpe3JldHVybiBhcyh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7cmV0dXJuIHQuZWRnZShlKS5jdXR2YWx1ZTwwfSl9ZnVuY3Rpb24gSG5lKHQsZSxyKXt2YXIgbj1yLnYsaT1yLnc7ZS5oYXNFZGdlKG4saSl8fChuPXIudyxpPXIudik7dmFyIGE9dC5ub2RlKG4pLHM9dC5ub2RlKGkpLGw9YSx1PSExO2EubGltPnMubGltJiYobD1zLHU9ITApO3ZhciBoPVlyKGUuZWRnZXMoKSxmdW5jdGlvbihmKXtyZXR1cm4gdT09PUduZSh0LHQubm9kZShmLnYpLGwpJiZ1IT09R25lKHQsdC5ub2RlKGYudyksbCl9KTtyZXR1cm4gSGQoaCxmdW5jdGlvbihmKXtyZXR1cm4gWGQoZSxmKX0pfWZ1bmN0aW9uIFduZSh0LGUscixuKXt2YXIgaT1yLnYsYT1yLnc7dC5yZW1vdmVFZGdlKGksYSksdC5zZXRFZGdlKG4udixuLncse30pLHdEKHQpLGJEKHQsZSksTkllKHQsZSl9ZnVuY3Rpb24gTkllKHQsZSl7dmFyIHI9YXModC5ub2RlcygpLGZ1bmN0aW9uKGkpe3JldHVybiFlLm5vZGUoaSkucGFyZW50fSksbj14RCh0LHIpO249bi5zbGljZSgxKSxTZShuLGZ1bmN0aW9uKGkpe3ZhciBhPXQubm9kZShpKS5wYXJlbnQscz1lLmVkZ2UoaSxhKSxsPSExO3N8fChzPWUuZWRnZShhLGkpLGw9ITApLGUubm9kZShpKS5yYW5rPWUubm9kZShhKS5yYW5rKyhsP3MubWlubGVuOi1zLm1pbmxlbil9KX1mdW5jdGlvbiBSSWUodCxlLHIpe3JldHVybiB0Lmhhc0VkZ2UoZSxyKX1mdW5jdGlvbiBHbmUodCxlLHIpe3JldHVybiByLmxvdzw9ZS5saW0mJmUubGltPD1yLmxpbX12YXIgWW5lPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTt6bmUoKTtPYygpO2hEKCk7eVQoKTtsZi5pbml0TG93TGltVmFsdWVzPXdEO2xmLmluaXRDdXRWYWx1ZXM9YkQ7bGYuY2FsY0N1dFZhbHVlPSRuZTtsZi5sZWF2ZUVkZ2U9VW5lO2xmLmVudGVyRWRnZT1IbmU7bGYuZXhjaGFuZ2VFZGdlcz1XbmU7byhsZiwibmV0d29ya1NpbXBsZXgiKTtvKGJELCJpbml0Q3V0VmFsdWVzIik7byhESWUsImFzc2lnbkN1dFZhbHVlIik7bygkbmUsImNhbGNDdXRWYWx1ZSIpO28od0QsImluaXRMb3dMaW1WYWx1ZXMiKTtvKFZuZSwiZGZzQXNzaWduTG93TGltIik7byhVbmUsImxlYXZlRWRnZSIpO28oSG5lLCJlbnRlckVkZ2UiKTtvKFduZSwiZXhjaGFuZ2VFZGdlcyIpO28oTkllLCJ1cGRhdGVSYW5rcyIpO28oUkllLCJpc1RyZWVFZGdlIik7byhHbmUsImlzRGVzY2VuZGFudCIpfSk7ZnVuY3Rpb24gVEQodCl7c3dpdGNoKHQuZ3JhcGgoKS5yYW5rZXIpe2Nhc2UibmV0d29yay1zaW1wbGV4IjpxbmUodCk7YnJlYWs7Y2FzZSJ0aWdodC10cmVlIjpJSWUodCk7YnJlYWs7Y2FzZSJsb25nZXN0LXBhdGgiOk1JZSh0KTticmVhaztkZWZhdWx0OnFuZSh0KX19ZnVuY3Rpb24gSUllKHQpe2p2KHQpLHZUKHQpfWZ1bmN0aW9uIHFuZSh0KXtsZih0KX12YXIgTUllLGtEPU0oKCk9PnsidXNlIHN0cmljdCI7aEQoKTtZbmUoKTt5VCgpO28oVEQsInJhbmsiKTtNSWU9anY7byhJSWUsInRpZ2h0VHJlZVJhbmtlciIpO28ocW5lLCJuZXR3b3JrU2ltcGxleFJhbmtlciIpfSk7ZnVuY3Rpb24gWG5lKHQpe3ZhciBlPUljKHQsInJvb3QiLHt9LCJfcm9vdCIpLHI9T0llKHQpLG49RnMoYnIocikpLTEsaT0yKm4rMTt0LmdyYXBoKCkubmVzdGluZ1Jvb3Q9ZSxTZSh0LmVkZ2VzKCksZnVuY3Rpb24ocyl7dC5lZGdlKHMpLm1pbmxlbio9aX0pO3ZhciBhPVBJZSh0KSsxO1NlKHQuY2hpbGRyZW4oKSxmdW5jdGlvbihzKXtqbmUodCxlLGksYSxuLHIscyl9KSx0LmdyYXBoKCkubm9kZVJhbmtGYWN0b3I9aX1mdW5jdGlvbiBqbmUodCxlLHIsbixpLGEscyl7dmFyIGw9dC5jaGlsZHJlbihzKTtpZighbC5sZW5ndGgpe3MhPT1lJiZ0LnNldEVkZ2UoZSxzLHt3ZWlnaHQ6MCxtaW5sZW46cn0pO3JldHVybn12YXIgdT1zRCh0LCJfYnQiKSxoPXNEKHQsIl9iYiIpLGY9dC5ub2RlKHMpO3Quc2V0UGFyZW50KHUscyksZi5ib3JkZXJUb3A9dSx0LnNldFBhcmVudChoLHMpLGYuYm9yZGVyQm90dG9tPWgsU2UobCxmdW5jdGlvbihkKXtqbmUodCxlLHIsbixpLGEsZCk7dmFyIHA9dC5ub2RlKGQpLG09cC5ib3JkZXJUb3A/cC5ib3JkZXJUb3A6ZCxnPXAuYm9yZGVyQm90dG9tP3AuYm9yZGVyQm90dG9tOmQseT1wLmJvcmRlclRvcD9uOjIqbix2PW0hPT1nPzE6aS1hW3NdKzE7dC5zZXRFZGdlKHUsbSx7d2VpZ2h0OnksbWlubGVuOnYsbmVzdGluZ0VkZ2U6ITB9KSx0LnNldEVkZ2UoZyxoLHt3ZWlnaHQ6eSxtaW5sZW46dixuZXN0aW5nRWRnZTohMH0pfSksdC5wYXJlbnQocyl8fHQuc2V0RWRnZShlLHUse3dlaWdodDowLG1pbmxlbjppK2Fbc119KX1mdW5jdGlvbiBPSWUodCl7dmFyIGU9e307ZnVuY3Rpb24gcihuLGkpe3ZhciBhPXQuY2hpbGRyZW4obik7YSYmYS5sZW5ndGgmJlNlKGEsZnVuY3Rpb24ocyl7cihzLGkrMSl9KSxlW25dPWl9cmV0dXJuIG8ociwiZGZzIiksU2UodC5jaGlsZHJlbigpLGZ1bmN0aW9uKG4pe3IobiwxKX0pLGV9ZnVuY3Rpb24gUEllKHQpe3JldHVybiBxcih0LmVkZ2VzKCksZnVuY3Rpb24oZSxyKXtyZXR1cm4gZSt0LmVkZ2Uocikud2VpZ2h0fSwwKX1mdW5jdGlvbiBLbmUodCl7dmFyIGU9dC5ncmFwaCgpO3QucmVtb3ZlTm9kZShlLm5lc3RpbmdSb290KSxkZWxldGUgZS5uZXN0aW5nUm9vdCxTZSh0LmVkZ2VzKCksZnVuY3Rpb24ocil7dmFyIG49dC5lZGdlKHIpO24ubmVzdGluZ0VkZ2UmJnQucmVtb3ZlRWRnZShyKX0pfXZhciBRbmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO09jKCk7byhYbmUsInJ1biIpO28oam5lLCJkZnMiKTtvKE9JZSwidHJlZURlcHRocyIpO28oUEllLCJzdW1XZWlnaHRzIik7byhLbmUsImNsZWFudXAiKX0pO2Z1bmN0aW9uIFpuZSh0LGUscil7dmFyIG49e30saTtTZShyLGZ1bmN0aW9uKGEpe2Zvcih2YXIgcz10LnBhcmVudChhKSxsLHU7czspe2lmKGw9dC5wYXJlbnQocyksbD8odT1uW2xdLG5bbF09cyk6KHU9aSxpPXMpLHUmJnUhPT1zKXtlLnNldEVkZ2UodSxzKTtyZXR1cm59cz1sfX0pfXZhciBKbmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO28oWm5lLCJhZGRTdWJncmFwaENvbnN0cmFpbnRzIil9KTtmdW5jdGlvbiBlaWUodCxlLHIpe3ZhciBuPUZJZSh0KSxpPW5ldyBJcih7Y29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cm9vdDpufSkuc2V0RGVmYXVsdE5vZGVMYWJlbChmdW5jdGlvbihhKXtyZXR1cm4gdC5ub2RlKGEpfSk7cmV0dXJuIFNlKHQubm9kZXMoKSxmdW5jdGlvbihhKXt2YXIgcz10Lm5vZGUoYSksbD10LnBhcmVudChhKTsocy5yYW5rPT09ZXx8cy5taW5SYW5rPD1lJiZlPD1zLm1heFJhbmspJiYoaS5zZXROb2RlKGEpLGkuc2V0UGFyZW50KGEsbHx8biksU2UodFtyXShhKSxmdW5jdGlvbih1KXt2YXIgaD11LnY9PT1hP3Uudzp1LnYsZj1pLmVkZ2UoaCxhKSxkPWRyKGYpPzA6Zi53ZWlnaHQ7aS5zZXRFZGdlKGgsYSx7d2VpZ2h0OnQuZWRnZSh1KS53ZWlnaHQrZH0pfSksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIm1pblJhbmsiKSYmaS5zZXROb2RlKGEse2JvcmRlckxlZnQ6cy5ib3JkZXJMZWZ0W2VdLGJvcmRlclJpZ2h0OnMuYm9yZGVyUmlnaHRbZV19KSl9KSxpfWZ1bmN0aW9uIEZJZSh0KXtmb3IodmFyIGU7dC5oYXNOb2RlKGU9WWQoIl9yb290IikpOyk7cmV0dXJuIGV9dmFyIHRpZT1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7R3MoKTtvKGVpZSwiYnVpbGRMYXllckdyYXBoIik7byhGSWUsImNyZWF0ZVJvb3ROb2RlIil9KTtmdW5jdGlvbiByaWUodCxlKXtmb3IodmFyIHI9MCxuPTE7bjxlLmxlbmd0aDsrK24pcis9ekllKHQsZVtuLTFdLGVbbl0pO3JldHVybiByfWZ1bmN0aW9uIHpJZSh0LGUscil7Zm9yKHZhciBuPWRUKHIsUWUocixmdW5jdGlvbihoLGYpe3JldHVybiBmfSkpLGk9V3IoUWUoZSxmdW5jdGlvbihoKXtyZXR1cm4gTWMoUWUodC5vdXRFZGdlcyhoKSxmdW5jdGlvbihmKXtyZXR1cm57cG9zOm5bZi53XSx3ZWlnaHQ6dC5lZGdlKGYpLndlaWdodH19KSwicG9zIil9KSksYT0xO2E8ci5sZW5ndGg7KWE8PD0xO3ZhciBzPTIqYS0xO2EtPTE7dmFyIGw9UWUobmV3IEFycmF5KHMpLGZ1bmN0aW9uKCl7cmV0dXJuIDB9KSx1PTA7cmV0dXJuIFNlKGkuZm9yRWFjaChmdW5jdGlvbihoKXt2YXIgZj1oLnBvcythO2xbZl0rPWgud2VpZ2h0O2Zvcih2YXIgZD0wO2Y+MDspZiUyJiYoZCs9bFtmKzFdKSxmPWYtMT4+MSxsW2ZdKz1oLndlaWdodDt1Kz1oLndlaWdodCpkfSkpLHV9dmFyIG5pZT1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7byhyaWUsImNyb3NzQ291bnQiKTtvKHpJZSwidHdvTGF5ZXJDcm9zc0NvdW50Iil9KTtmdW5jdGlvbiBpaWUodCl7dmFyIGU9e30scj1Zcih0Lm5vZGVzKCksZnVuY3Rpb24obCl7cmV0dXJuIXQuY2hpbGRyZW4obCkubGVuZ3RofSksbj1GcyhRZShyLGZ1bmN0aW9uKGwpe3JldHVybiB0Lm5vZGUobCkucmFua30pKSxpPVFlKGpvKG4rMSksZnVuY3Rpb24oKXtyZXR1cm5bXX0pO2Z1bmN0aW9uIGEobCl7aWYoIU50KGUsbCkpe2VbbF09ITA7dmFyIHU9dC5ub2RlKGwpO2lbdS5yYW5rXS5wdXNoKGwpLFNlKHQuc3VjY2Vzc29ycyhsKSxhKX19byhhLCJkZnMiKTt2YXIgcz1NYyhyLGZ1bmN0aW9uKGwpe3JldHVybiB0Lm5vZGUobCkucmFua30pO3JldHVybiBTZShzLGEpLGl9dmFyIGFpZT1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7byhpaWUsImluaXRPcmRlciIpfSk7ZnVuY3Rpb24gc2llKHQsZSl7cmV0dXJuIFFlKGUsZnVuY3Rpb24ocil7dmFyIG49dC5pbkVkZ2VzKHIpO2lmKG4ubGVuZ3RoKXt2YXIgaT1xcihuLGZ1bmN0aW9uKGEscyl7dmFyIGw9dC5lZGdlKHMpLHU9dC5ub2RlKHMudik7cmV0dXJue3N1bTphLnN1bStsLndlaWdodCp1Lm9yZGVyLHdlaWdodDphLndlaWdodCtsLndlaWdodH19LHtzdW06MCx3ZWlnaHQ6MH0pO3JldHVybnt2OnIsYmFyeWNlbnRlcjppLnN1bS9pLndlaWdodCx3ZWlnaHQ6aS53ZWlnaHR9fWVsc2UgcmV0dXJue3Y6cn19KX12YXIgb2llPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtvKHNpZSwiYmFyeWNlbnRlciIpfSk7ZnVuY3Rpb24gbGllKHQsZSl7dmFyIHI9e307U2UodCxmdW5jdGlvbihpLGEpe3ZhciBzPXJbaS52XT17aW5kZWdyZWU6MCxpbjpbXSxvdXQ6W10sdnM6W2kudl0saTphfTtkcihpLmJhcnljZW50ZXIpfHwocy5iYXJ5Y2VudGVyPWkuYmFyeWNlbnRlcixzLndlaWdodD1pLndlaWdodCl9KSxTZShlLmVkZ2VzKCksZnVuY3Rpb24oaSl7dmFyIGE9cltpLnZdLHM9cltpLnddOyFkcihhKSYmIWRyKHMpJiYocy5pbmRlZ3JlZSsrLGEub3V0LnB1c2gocltpLnddKSl9KTt2YXIgbj1ZcihyLGZ1bmN0aW9uKGkpe3JldHVybiFpLmluZGVncmVlfSk7cmV0dXJuIEdJZShuKX1mdW5jdGlvbiBHSWUodCl7dmFyIGU9W107ZnVuY3Rpb24gcihhKXtyZXR1cm4gZnVuY3Rpb24ocyl7cy5tZXJnZWR8fChkcihzLmJhcnljZW50ZXIpfHxkcihhLmJhcnljZW50ZXIpfHxzLmJhcnljZW50ZXI+PWEuYmFyeWNlbnRlcikmJiRJZShhLHMpfX1vKHIsImhhbmRsZUluIik7ZnVuY3Rpb24gbihhKXtyZXR1cm4gZnVuY3Rpb24ocyl7cy5pbi5wdXNoKGEpLC0tcy5pbmRlZ3JlZT09PTAmJnQucHVzaChzKX19Zm9yKG8obiwiaGFuZGxlT3V0Iik7dC5sZW5ndGg7KXt2YXIgaT10LnBvcCgpO2UucHVzaChpKSxTZShpLmluLnJldmVyc2UoKSxyKGkpKSxTZShpLm91dCxuKGkpKX1yZXR1cm4gUWUoWXIoZSxmdW5jdGlvbihhKXtyZXR1cm4hYS5tZXJnZWR9KSxmdW5jdGlvbihhKXtyZXR1cm4gV2QoYSxbInZzIiwiaSIsImJhcnljZW50ZXIiLCJ3ZWlnaHQiXSl9KX1mdW5jdGlvbiAkSWUodCxlKXt2YXIgcj0wLG49MDt0LndlaWdodCYmKHIrPXQuYmFyeWNlbnRlcip0LndlaWdodCxuKz10LndlaWdodCksZS53ZWlnaHQmJihyKz1lLmJhcnljZW50ZXIqZS53ZWlnaHQsbis9ZS53ZWlnaHQpLHQudnM9ZS52cy5jb25jYXQodC52cyksdC5iYXJ5Y2VudGVyPXIvbix0LndlaWdodD1uLHQuaT1NYXRoLm1pbihlLmksdC5pKSxlLm1lcmdlZD0hMH12YXIgY2llPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtvKGxpZSwicmVzb2x2ZUNvbmZsaWN0cyIpO28oR0llLCJkb1Jlc29sdmVDb25mbGljdHMiKTtvKCRJZSwibWVyZ2VFbnRyaWVzIil9KTtmdW5jdGlvbiBoaWUodCxlKXt2YXIgcj1nbmUodCxmdW5jdGlvbihmKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGYsImJhcnljZW50ZXIiKX0pLG49ci5saHMsaT1NYyhyLnJocyxmdW5jdGlvbihmKXtyZXR1cm4tZi5pfSksYT1bXSxzPTAsbD0wLHU9MDtuLnNvcnQoVkllKCEhZSkpLHU9dWllKGEsaSx1KSxTZShuLGZ1bmN0aW9uKGYpe3UrPWYudnMubGVuZ3RoLGEucHVzaChmLnZzKSxzKz1mLmJhcnljZW50ZXIqZi53ZWlnaHQsbCs9Zi53ZWlnaHQsdT11aWUoYSxpLHUpfSk7dmFyIGg9e3ZzOldyKGEpfTtyZXR1cm4gbCYmKGguYmFyeWNlbnRlcj1zL2wsaC53ZWlnaHQ9bCksaH1mdW5jdGlvbiB1aWUodCxlLHIpe2Zvcih2YXIgbjtlLmxlbmd0aCYmKG49eGEoZSkpLmk8PXI7KWUucG9wKCksdC5wdXNoKG4udnMpLHIrKztyZXR1cm4gcn1mdW5jdGlvbiBWSWUodCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7cmV0dXJuIGUuYmFyeWNlbnRlcjxyLmJhcnljZW50ZXI/LTE6ZS5iYXJ5Y2VudGVyPnIuYmFyeWNlbnRlcj8xOnQ/ci5pLWUuaTplLmktci5pfX12YXIgZmllPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtPYygpO28oaGllLCJzb3J0Iik7byh1aWUsImNvbnN1bWVVbnNvcnRhYmxlIik7byhWSWUsImNvbXBhcmVXaXRoQmlhcyIpfSk7ZnVuY3Rpb24gRUQodCxlLHIsbil7dmFyIGk9dC5jaGlsZHJlbihlKSxhPXQubm9kZShlKSxzPWE/YS5ib3JkZXJMZWZ0OnZvaWQgMCxsPWE/YS5ib3JkZXJSaWdodDp2b2lkIDAsdT17fTtzJiYoaT1ZcihpLGZ1bmN0aW9uKGcpe3JldHVybiBnIT09cyYmZyE9PWx9KSk7dmFyIGg9c2llKHQsaSk7U2UoaCxmdW5jdGlvbihnKXtpZih0LmNoaWxkcmVuKGcudikubGVuZ3RoKXt2YXIgeT1FRCh0LGcudixyLG4pO3VbZy52XT15LE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh5LCJiYXJ5Y2VudGVyIikmJkhJZShnLHkpfX0pO3ZhciBmPWxpZShoLHIpO1VJZShmLHUpO3ZhciBkPWhpZShmLG4pO2lmKHMmJihkLnZzPVdyKFtzLGQudnMsbF0pLHQucHJlZGVjZXNzb3JzKHMpLmxlbmd0aCkpe3ZhciBwPXQubm9kZSh0LnByZWRlY2Vzc29ycyhzKVswXSksbT10Lm5vZGUodC5wcmVkZWNlc3NvcnMobClbMF0pO09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkLCJiYXJ5Y2VudGVyIil8fChkLmJhcnljZW50ZXI9MCxkLndlaWdodD0wKSxkLmJhcnljZW50ZXI9KGQuYmFyeWNlbnRlcipkLndlaWdodCtwLm9yZGVyK20ub3JkZXIpLyhkLndlaWdodCsyKSxkLndlaWdodCs9Mn1yZXR1cm4gZH1mdW5jdGlvbiBVSWUodCxlKXtTZSh0LGZ1bmN0aW9uKHIpe3IudnM9V3Ioci52cy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIGVbbl0/ZVtuXS52czpufSkpfSl9ZnVuY3Rpb24gSEllKHQsZSl7ZHIodC5iYXJ5Y2VudGVyKT8odC5iYXJ5Y2VudGVyPWUuYmFyeWNlbnRlcix0LndlaWdodD1lLndlaWdodCk6KHQuYmFyeWNlbnRlcj0odC5iYXJ5Y2VudGVyKnQud2VpZ2h0K2UuYmFyeWNlbnRlciplLndlaWdodCkvKHQud2VpZ2h0K2Uud2VpZ2h0KSx0LndlaWdodCs9ZS53ZWlnaHQpfXZhciBkaWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO29pZSgpO2NpZSgpO2ZpZSgpO28oRUQsInNvcnRTdWJncmFwaCIpO28oVUllLCJleHBhbmRTdWJncmFwaHMiKTtvKEhJZSwibWVyZ2VCYXJ5Y2VudGVycyIpfSk7ZnVuY3Rpb24gZ2llKHQpe3ZhciBlPW9EKHQpLHI9cGllKHQsam8oMSxlKzEpLCJpbkVkZ2VzIiksbj1waWUodCxqbyhlLTEsLTEsLTEpLCJvdXRFZGdlcyIpLGk9aWllKHQpO21pZSh0LGkpO2Zvcih2YXIgYT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscyxsPTAsdT0wO3U8NDsrK2wsKyt1KXtXSWUobCUyP3I6bixsJTQ+PTIpLGk9c2YodCk7dmFyIGg9cmllKHQsaSk7aDxhJiYodT0wLHM9X0woaSksYT1oKX1taWUodCxzKX1mdW5jdGlvbiBwaWUodCxlLHIpe3JldHVybiBRZShlLGZ1bmN0aW9uKG4pe3JldHVybiBlaWUodCxuLHIpfSl9ZnVuY3Rpb24gV0llKHQsZSl7dmFyIHI9bmV3IElyO1NlKHQsZnVuY3Rpb24obil7dmFyIGk9bi5ncmFwaCgpLnJvb3QsYT1FRChuLGkscixlKTtTZShhLnZzLGZ1bmN0aW9uKHMsbCl7bi5ub2RlKHMpLm9yZGVyPWx9KSxabmUobixyLGEudnMpfSl9ZnVuY3Rpb24gbWllKHQsZSl7U2UoZSxmdW5jdGlvbihyKXtTZShyLGZ1bmN0aW9uKG4saSl7dC5ub2RlKG4pLm9yZGVyPWl9KX0pfXZhciB5aWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO0dzKCk7T2MoKTtKbmUoKTt0aWUoKTtuaWUoKTthaWUoKTtkaWUoKTtvKGdpZSwib3JkZXIiKTtvKHBpZSwiYnVpbGRMYXllckdyYXBocyIpO28oV0llLCJzd2VlcExheWVyR3JhcGhzIik7byhtaWUsImFzc2lnbk9yZGVyIil9KTtmdW5jdGlvbiB2aWUodCl7dmFyIGU9cUllKHQpO1NlKHQuZ3JhcGgoKS5kdW1teUNoYWlucyxmdW5jdGlvbihyKXtmb3IodmFyIG49dC5ub2RlKHIpLGk9bi5lZGdlT2JqLGE9WUllKHQsZSxpLnYsaS53KSxzPWEucGF0aCxsPWEubGNhLHU9MCxoPXNbdV0sZj0hMDtyIT09aS53Oyl7aWYobj10Lm5vZGUociksZil7Zm9yKDsoaD1zW3VdKSE9PWwmJnQubm9kZShoKS5tYXhSYW5rPG4ucmFuazspdSsrO2g9PT1sJiYoZj0hMSl9aWYoIWYpe2Zvcig7dTxzLmxlbmd0aC0xJiZ0Lm5vZGUoaD1zW3UrMV0pLm1pblJhbms8PW4ucmFuazspdSsrO2g9c1t1XX10LnNldFBhcmVudChyLGgpLHI9dC5zdWNjZXNzb3JzKHIpWzBdfX0pfWZ1bmN0aW9uIFlJZSh0LGUscixuKXt2YXIgaT1bXSxhPVtdLHM9TWF0aC5taW4oZVtyXS5sb3csZVtuXS5sb3cpLGw9TWF0aC5tYXgoZVtyXS5saW0sZVtuXS5saW0pLHUsaDt1PXI7ZG8gdT10LnBhcmVudCh1KSxpLnB1c2godSk7d2hpbGUodSYmKGVbdV0ubG93PnN8fGw+ZVt1XS5saW0pKTtmb3IoaD11LHU9bjsodT10LnBhcmVudCh1KSkhPT1oOylhLnB1c2godSk7cmV0dXJue3BhdGg6aS5jb25jYXQoYS5yZXZlcnNlKCkpLGxjYTpofX1mdW5jdGlvbiBxSWUodCl7dmFyIGU9e30scj0wO2Z1bmN0aW9uIG4oaSl7dmFyIGE9cjtTZSh0LmNoaWxkcmVuKGkpLG4pLGVbaV09e2xvdzphLGxpbTpyKyt9fXJldHVybiBvKG4sImRmcyIpLFNlKHQuY2hpbGRyZW4oKSxuKSxlfXZhciB4aWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO28odmllLCJwYXJlbnREdW1teUNoYWlucyIpO28oWUllLCJmaW5kUGF0aCIpO28ocUllLCJwb3N0b3JkZXIiKX0pO2Z1bmN0aW9uIFhJZSh0LGUpe3ZhciByPXt9O2Z1bmN0aW9uIG4oaSxhKXt2YXIgcz0wLGw9MCx1PWkubGVuZ3RoLGg9eGEoYSk7cmV0dXJuIFNlKGEsZnVuY3Rpb24oZixkKXt2YXIgcD1LSWUodCxmKSxtPXA/dC5ub2RlKHApLm9yZGVyOnU7KHB8fGY9PT1oKSYmKFNlKGEuc2xpY2UobCxkKzEpLGZ1bmN0aW9uKGcpe1NlKHQucHJlZGVjZXNzb3JzKGcpLGZ1bmN0aW9uKHkpe3ZhciB2PXQubm9kZSh5KSx4PXYub3JkZXI7KHg8c3x8bTx4KSYmISh2LmR1bW15JiZ0Lm5vZGUoZykuZHVtbXkpJiZiaWUocix5LGcpfSl9KSxsPWQrMSxzPW0pfSksYX1yZXR1cm4gbyhuLCJ2aXNpdExheWVyIikscXIoZSxuKSxyfWZ1bmN0aW9uIGpJZSh0LGUpe3ZhciByPXt9O2Z1bmN0aW9uIG4oYSxzLGwsdSxoKXt2YXIgZjtTZShqbyhzLGwpLGZ1bmN0aW9uKGQpe2Y9YVtkXSx0Lm5vZGUoZikuZHVtbXkmJlNlKHQucHJlZGVjZXNzb3JzKGYpLGZ1bmN0aW9uKHApe3ZhciBtPXQubm9kZShwKTttLmR1bW15JiYobS5vcmRlcjx1fHxtLm9yZGVyPmgpJiZiaWUocixwLGYpfSl9KX1vKG4sInNjYW4iKTtmdW5jdGlvbiBpKGEscyl7dmFyIGw9LTEsdSxoPTA7cmV0dXJuIFNlKHMsZnVuY3Rpb24oZixkKXtpZih0Lm5vZGUoZikuZHVtbXk9PT0iYm9yZGVyIil7dmFyIHA9dC5wcmVkZWNlc3NvcnMoZik7cC5sZW5ndGgmJih1PXQubm9kZShwWzBdKS5vcmRlcixuKHMsaCxkLGwsdSksaD1kLGw9dSl9bihzLGgscy5sZW5ndGgsdSxhLmxlbmd0aCl9KSxzfXJldHVybiBvKGksInZpc2l0TGF5ZXIiKSxxcihlLGkpLHJ9ZnVuY3Rpb24gS0llKHQsZSl7aWYodC5ub2RlKGUpLmR1bW15KXJldHVybiBhcyh0LnByZWRlY2Vzc29ycyhlKSxmdW5jdGlvbihyKXtyZXR1cm4gdC5ub2RlKHIpLmR1bW15fSl9ZnVuY3Rpb24gYmllKHQsZSxyKXtpZihlPnIpe3ZhciBuPWU7ZT1yLHI9bn12YXIgaT10W2VdO2l8fCh0W2VdPWk9e30pLGlbcl09ITB9ZnVuY3Rpb24gUUllKHQsZSxyKXtpZihlPnIpe3ZhciBuPWU7ZT1yLHI9bn1yZXR1cm4hIXRbZV0mJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0W2VdLHIpfWZ1bmN0aW9uIFpJZSh0LGUscixuKXt2YXIgaT17fSxhPXt9LHM9e307cmV0dXJuIFNlKGUsZnVuY3Rpb24obCl7U2UobCxmdW5jdGlvbih1LGgpe2lbdV09dSxhW3VdPXUsc1t1XT1ofSl9KSxTZShlLGZ1bmN0aW9uKGwpe3ZhciB1PS0xO1NlKGwsZnVuY3Rpb24oaCl7dmFyIGY9bihoKTtpZihmLmxlbmd0aCl7Zj1NYyhmLGZ1bmN0aW9uKHkpe3JldHVybiBzW3ldfSk7Zm9yKHZhciBkPShmLmxlbmd0aC0xKS8yLHA9TWF0aC5mbG9vcihkKSxtPU1hdGguY2VpbChkKTtwPD1tOysrcCl7dmFyIGc9ZltwXTthW2hdPT09aCYmdTxzW2ddJiYhUUllKHIsaCxnKSYmKGFbZ109aCxhW2hdPWlbaF09aVtnXSx1PXNbZ10pfX19KX0pLHtyb290OmksYWxpZ246YX19ZnVuY3Rpb24gSkllKHQsZSxyLG4saSl7dmFyIGE9e30scz1lT2UodCxlLHIsaSksbD1pPyJib3JkZXJMZWZ0IjoiYm9yZGVyUmlnaHQiO2Z1bmN0aW9uIHUoZCxwKXtmb3IodmFyIG09cy5ub2RlcygpLGc9bS5wb3AoKSx5PXt9O2c7KXlbZ10/ZChnKTooeVtnXT0hMCxtLnB1c2goZyksbT1tLmNvbmNhdChwKGcpKSksZz1tLnBvcCgpfW8odSwiaXRlcmF0ZSIpO2Z1bmN0aW9uIGgoZCl7YVtkXT1zLmluRWRnZXMoZCkucmVkdWNlKGZ1bmN0aW9uKHAsbSl7cmV0dXJuIE1hdGgubWF4KHAsYVttLnZdK3MuZWRnZShtKSl9LDApfW8oaCwicGFzczEiKTtmdW5jdGlvbiBmKGQpe3ZhciBwPXMub3V0RWRnZXMoZCkucmVkdWNlKGZ1bmN0aW9uKGcseSl7cmV0dXJuIE1hdGgubWluKGcsYVt5LnddLXMuZWRnZSh5KSl9LE51bWJlci5QT1NJVElWRV9JTkZJTklUWSksbT10Lm5vZGUoZCk7cCE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSYmbS5ib3JkZXJUeXBlIT09bCYmKGFbZF09TWF0aC5tYXgoYVtkXSxwKSl9cmV0dXJuIG8oZiwicGFzczIiKSx1KGgscy5wcmVkZWNlc3NvcnMuYmluZChzKSksdShmLHMuc3VjY2Vzc29ycy5iaW5kKHMpKSxTZShuLGZ1bmN0aW9uKGQpe2FbZF09YVtyW2RdXX0pLGF9ZnVuY3Rpb24gZU9lKHQsZSxyLG4pe3ZhciBpPW5ldyBJcixhPXQuZ3JhcGgoKSxzPWlPZShhLm5vZGVzZXAsYS5lZGdlc2VwLG4pO3JldHVybiBTZShlLGZ1bmN0aW9uKGwpe3ZhciB1O1NlKGwsZnVuY3Rpb24oaCl7dmFyIGY9cltoXTtpZihpLnNldE5vZGUoZiksdSl7dmFyIGQ9clt1XSxwPWkuZWRnZShkLGYpO2kuc2V0RWRnZShkLGYsTWF0aC5tYXgocyh0LGgsdSkscHx8MCkpfXU9aH0pfSksaX1mdW5jdGlvbiB0T2UodCxlKXtyZXR1cm4gSGQoYnIoZSksZnVuY3Rpb24ocil7dmFyIG49TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLGk9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO3JldHVybiBVTChyLGZ1bmN0aW9uKGEscyl7dmFyIGw9YU9lKHQscykvMjtuPU1hdGgubWF4KGErbCxuKSxpPU1hdGgubWluKGEtbCxpKX0pLG4taX0pfWZ1bmN0aW9uIHJPZSh0LGUpe3ZhciByPWJyKGUpLG49QmwociksaT1GcyhyKTtTZShbInUiLCJkIl0sZnVuY3Rpb24oYSl7U2UoWyJsIiwiciJdLGZ1bmN0aW9uKHMpe3ZhciBsPWErcyx1PXRbbF0saDtpZih1IT09ZSl7dmFyIGY9YnIodSk7aD1zPT09ImwiP24tQmwoZik6aS1GcyhmKSxoJiYodFtsXT1VZCh1LGZ1bmN0aW9uKGQpe3JldHVybiBkK2h9KSl9fSl9KX1mdW5jdGlvbiBuT2UodCxlKXtyZXR1cm4gVWQodC51bCxmdW5jdGlvbihyLG4pe2lmKGUpcmV0dXJuIHRbZS50b0xvd2VyQ2FzZSgpXVtuXTt2YXIgaT1NYyhRZSh0LG4pKTtyZXR1cm4oaVsxXStpWzJdKS8yfSl9ZnVuY3Rpb24gd2llKHQpe3ZhciBlPXNmKHQpLHI9VWgoWEllKHQsZSksakllKHQsZSkpLG49e30saTtTZShbInUiLCJkIl0sZnVuY3Rpb24ocyl7aT1zPT09InUiP2U6YnIoZSkucmV2ZXJzZSgpLFNlKFsibCIsInIiXSxmdW5jdGlvbihsKXtsPT09InIiJiYoaT1RZShpLGZ1bmN0aW9uKGQpe3JldHVybiBicihkKS5yZXZlcnNlKCl9KSk7dmFyIHU9KHM9PT0idSI/dC5wcmVkZWNlc3NvcnM6dC5zdWNjZXNzb3JzKS5iaW5kKHQpLGg9WkllKHQsaSxyLHUpLGY9SkllKHQsaSxoLnJvb3QsaC5hbGlnbixsPT09InIiKTtsPT09InIiJiYoZj1VZChmLGZ1bmN0aW9uKGQpe3JldHVybi1kfSkpLG5bcytsXT1mfSl9KTt2YXIgYT10T2UodCxuKTtyZXR1cm4gck9lKG4sYSksbk9lKG4sdC5ncmFwaCgpLmFsaWduKX1mdW5jdGlvbiBpT2UodCxlLHIpe3JldHVybiBmdW5jdGlvbihuLGksYSl7dmFyIHM9bi5ub2RlKGkpLGw9bi5ub2RlKGEpLHU9MCxoO2lmKHUrPXMud2lkdGgvMixPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywibGFiZWxwb3MiKSlzd2l0Y2gocy5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpKXtjYXNlImwiOmg9LXMud2lkdGgvMjticmVhaztjYXNlInIiOmg9cy53aWR0aC8yO2JyZWFrfWlmKGgmJih1Kz1yP2g6LWgpLGg9MCx1Kz0ocy5kdW1teT9lOnQpLzIsdSs9KGwuZHVtbXk/ZTp0KS8yLHUrPWwud2lkdGgvMixPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCwibGFiZWxwb3MiKSlzd2l0Y2gobC5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpKXtjYXNlImwiOmg9bC53aWR0aC8yO2JyZWFrO2Nhc2UiciI6aD0tbC53aWR0aC8yO2JyZWFrfXJldHVybiBoJiYodSs9cj9oOi1oKSxoPTAsdX19ZnVuY3Rpb24gYU9lKHQsZSl7cmV0dXJuIHQubm9kZShlKS53aWR0aH12YXIgVGllPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtHcygpO09jKCk7byhYSWUsImZpbmRUeXBlMUNvbmZsaWN0cyIpO28oakllLCJmaW5kVHlwZTJDb25mbGljdHMiKTtvKEtJZSwiZmluZE90aGVySW5uZXJTZWdtZW50Tm9kZSIpO28oYmllLCJhZGRDb25mbGljdCIpO28oUUllLCJoYXNDb25mbGljdCIpO28oWkllLCJ2ZXJ0aWNhbEFsaWdubWVudCIpO28oSkllLCJob3Jpem9udGFsQ29tcGFjdGlvbiIpO28oZU9lLCJidWlsZEJsb2NrR3JhcGgiKTtvKHRPZSwiZmluZFNtYWxsZXN0V2lkdGhBbGlnbm1lbnQiKTtvKHJPZSwiYWxpZ25Db29yZGluYXRlcyIpO28obk9lLCJiYWxhbmNlIik7byh3aWUsInBvc2l0aW9uWCIpO28oaU9lLCJzZXAiKTtvKGFPZSwid2lkdGgiKX0pO2Z1bmN0aW9uIGtpZSh0KXt0PWdUKHQpLHNPZSh0KSxITCh3aWUodCksZnVuY3Rpb24oZSxyKXt0Lm5vZGUocikueD1lfSl9ZnVuY3Rpb24gc09lKHQpe3ZhciBlPXNmKHQpLHI9dC5ncmFwaCgpLnJhbmtzZXAsbj0wO1NlKGUsZnVuY3Rpb24oaSl7dmFyIGE9RnMoUWUoaSxmdW5jdGlvbihzKXtyZXR1cm4gdC5ub2RlKHMpLmhlaWdodH0pKTtTZShpLGZ1bmN0aW9uKHMpe3Qubm9kZShzKS55PW4rYS8yfSksbis9YStyfSl9dmFyIEVpZT1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7T2MoKTtUaWUoKTtvKGtpZSwicG9zaXRpb24iKTtvKHNPZSwicG9zaXRpb25ZIil9KTtmdW5jdGlvbiBHdSh0LGUpe3ZhciByPWUmJmUuZGVidWdUaW1pbmc/eW5lOnZuZTtyKCJsYXlvdXQiLCgpPT57dmFyIG49cigiICBidWlsZExheW91dEdyYXBoIiwoKT0+eU9lKHQpKTtyKCIgIHJ1bkxheW91dCIsKCk9Pm9PZShuLHIpKSxyKCIgIHVwZGF0ZUlucHV0R3JhcGgiLCgpPT5sT2UodCxuKSl9KX1mdW5jdGlvbiBvT2UodCxlKXtlKCIgICAgbWFrZVNwYWNlRm9yRWRnZUxhYmVscyIsKCk9PnZPZSh0KSksZSgiICAgIHJlbW92ZVNlbGZFZGdlcyIsKCk9PkFPZSh0KSksZSgiICAgIGFjeWNsaWMiLCgpPT51bmUodCkpLGUoIiAgICBuZXN0aW5nR3JhcGgucnVuIiwoKT0+WG5lKHQpKSxlKCIgICAgcmFuayIsKCk9PlREKGdUKHQpKSksZSgiICAgIGluamVjdEVkZ2VMYWJlbFByb3hpZXMiLCgpPT54T2UodCkpLGUoIiAgICByZW1vdmVFbXB0eVJhbmtzIiwoKT0+bW5lKHQpKSxlKCIgICAgbmVzdGluZ0dyYXBoLmNsZWFudXAiLCgpPT5LbmUodCkpLGUoIiAgICBub3JtYWxpemVSYW5rcyIsKCk9PnBuZSh0KSksZSgiICAgIGFzc2lnblJhbmtNaW5NYXgiLCgpPT5iT2UodCkpLGUoIiAgICByZW1vdmVFZGdlTGFiZWxQcm94aWVzIiwoKT0+d09lKHQpKSxlKCIgICAgbm9ybWFsaXplLnJ1biIsKCk9PkFuZSh0KSksZSgiICAgIHBhcmVudER1bW15Q2hhaW5zIiwoKT0+dmllKHQpKSxlKCIgICAgYWRkQm9yZGVyU2VnbWVudHMiLCgpPT5ibmUodCkpLGUoIiAgICBvcmRlciIsKCk9PmdpZSh0KSksZSgiICAgIGluc2VydFNlbGZFZGdlcyIsKCk9Pl9PZSh0KSksZSgiICAgIGFkanVzdENvb3JkaW5hdGVTeXN0ZW0iLCgpPT5rbmUodCkpLGUoIiAgICBwb3NpdGlvbiIsKCk9PmtpZSh0KSksZSgiICAgIHBvc2l0aW9uU2VsZkVkZ2VzIiwoKT0+TE9lKHQpKSxlKCIgICAgcmVtb3ZlQm9yZGVyTm9kZXMiLCgpPT5DT2UodCkpLGUoIiAgICBub3JtYWxpemUudW5kbyIsKCk9Pl9uZSh0KSksZSgiICAgIGZpeHVwRWRnZUxhYmVsQ29vcmRzIiwoKT0+RU9lKHQpKSxlKCIgICAgdW5kb0Nvb3JkaW5hdGVTeXN0ZW0iLCgpPT5FbmUodCkpLGUoIiAgICB0cmFuc2xhdGVHcmFwaCIsKCk9PlRPZSh0KSksZSgiICAgIGFzc2lnbk5vZGVJbnRlcnNlY3RzIiwoKT0+a09lKHQpKSxlKCIgICAgcmV2ZXJzZVBvaW50cyIsKCk9PlNPZSh0KSksZSgiICAgIGFjeWNsaWMudW5kbyIsKCk9PmhuZSh0KSl9ZnVuY3Rpb24gbE9lKHQsZSl7U2UodC5ub2RlcygpLGZ1bmN0aW9uKHIpe3ZhciBuPXQubm9kZShyKSxpPWUubm9kZShyKTtuJiYobi54PWkueCxuLnk9aS55LGUuY2hpbGRyZW4ocikubGVuZ3RoJiYobi53aWR0aD1pLndpZHRoLG4uaGVpZ2h0PWkuaGVpZ2h0KSl9KSxTZSh0LmVkZ2VzKCksZnVuY3Rpb24ocil7dmFyIG49dC5lZGdlKHIpLGk9ZS5lZGdlKHIpO24ucG9pbnRzPWkucG9pbnRzLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLCJ4IikmJihuLng9aS54LG4ueT1pLnkpfSksdC5ncmFwaCgpLndpZHRoPWUuZ3JhcGgoKS53aWR0aCx0LmdyYXBoKCkuaGVpZ2h0PWUuZ3JhcGgoKS5oZWlnaHR9ZnVuY3Rpb24geU9lKHQpe3ZhciBlPW5ldyBJcih7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLHI9Q0QodC5ncmFwaCgpKTtyZXR1cm4gZS5zZXRHcmFwaChVaCh7fSx1T2UsU0QocixjT2UpLFdkKHIsaE9lKSkpLFNlKHQubm9kZXMoKSxmdW5jdGlvbihuKXt2YXIgaT1DRCh0Lm5vZGUobikpO2Uuc2V0Tm9kZShuLHJmKFNEKGksZk9lKSxkT2UpKSxlLnNldFBhcmVudChuLHQucGFyZW50KG4pKX0pLFNlKHQuZWRnZXMoKSxmdW5jdGlvbihuKXt2YXIgaT1DRCh0LmVkZ2UobikpO2Uuc2V0RWRnZShuLFVoKHt9LG1PZSxTRChpLHBPZSksV2QoaSxnT2UpKSl9KSxlfWZ1bmN0aW9uIHZPZSh0KXt2YXIgZT10LmdyYXBoKCk7ZS5yYW5rc2VwLz0yLFNlKHQuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj10LmVkZ2Uocik7bi5taW5sZW4qPTIsbi5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpIT09ImMiJiYoZS5yYW5rZGlyPT09IlRCInx8ZS5yYW5rZGlyPT09IkJUIj9uLndpZHRoKz1uLmxhYmVsb2Zmc2V0Om4uaGVpZ2h0Kz1uLmxhYmVsb2Zmc2V0KX0pfWZ1bmN0aW9uIHhPZSh0KXtTZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIHI9dC5lZGdlKGUpO2lmKHIud2lkdGgmJnIuaGVpZ2h0KXt2YXIgbj10Lm5vZGUoZS52KSxpPXQubm9kZShlLncpLGE9e3Jhbms6KGkucmFuay1uLnJhbmspLzIrbi5yYW5rLGV9O0ljKHQsImVkZ2UtcHJveHkiLGEsIl9lcCIpfX0pfWZ1bmN0aW9uIGJPZSh0KXt2YXIgZT0wO1NlKHQubm9kZXMoKSxmdW5jdGlvbihyKXt2YXIgbj10Lm5vZGUocik7bi5ib3JkZXJUb3AmJihuLm1pblJhbms9dC5ub2RlKG4uYm9yZGVyVG9wKS5yYW5rLG4ubWF4UmFuaz10Lm5vZGUobi5ib3JkZXJCb3R0b20pLnJhbmssZT1GcyhlLG4ubWF4UmFuaykpfSksdC5ncmFwaCgpLm1heFJhbms9ZX1mdW5jdGlvbiB3T2UodCl7U2UodC5ub2RlcygpLGZ1bmN0aW9uKGUpe3ZhciByPXQubm9kZShlKTtyLmR1bW15PT09ImVkZ2UtcHJveHkiJiYodC5lZGdlKHIuZSkubGFiZWxSYW5rPXIucmFuayx0LnJlbW92ZU5vZGUoZSkpfSl9ZnVuY3Rpb24gVE9lKHQpe3ZhciBlPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxyPTAsbj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksaT0wLGE9dC5ncmFwaCgpLHM9YS5tYXJnaW54fHwwLGw9YS5tYXJnaW55fHwwO2Z1bmN0aW9uIHUoaCl7dmFyIGY9aC54LGQ9aC55LHA9aC53aWR0aCxtPWguaGVpZ2h0O2U9TWF0aC5taW4oZSxmLXAvMikscj1NYXRoLm1heChyLGYrcC8yKSxuPU1hdGgubWluKG4sZC1tLzIpLGk9TWF0aC5tYXgoaSxkK20vMil9byh1LCJnZXRFeHRyZW1lcyIpLFNlKHQubm9kZXMoKSxmdW5jdGlvbihoKXt1KHQubm9kZShoKSl9KSxTZSh0LmVkZ2VzKCksZnVuY3Rpb24oaCl7dmFyIGY9dC5lZGdlKGgpO09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmLCJ4IikmJnUoZil9KSxlLT1zLG4tPWwsU2UodC5ub2RlcygpLGZ1bmN0aW9uKGgpe3ZhciBmPXQubm9kZShoKTtmLngtPWUsZi55LT1ufSksU2UodC5lZGdlcygpLGZ1bmN0aW9uKGgpe3ZhciBmPXQuZWRnZShoKTtTZShmLnBvaW50cyxmdW5jdGlvbihkKXtkLngtPWUsZC55LT1ufSksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGYsIngiKSYmKGYueC09ZSksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGYsInkiKSYmKGYueS09bil9KSxhLndpZHRoPXItZStzLGEuaGVpZ2h0PWktbitsfWZ1bmN0aW9uIGtPZSh0KXtTZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIHI9dC5lZGdlKGUpLG49dC5ub2RlKGUudiksaT10Lm5vZGUoZS53KSxhLHM7ci5wb2ludHM/KGE9ci5wb2ludHNbMF0scz1yLnBvaW50c1tyLnBvaW50cy5sZW5ndGgtMV0pOihyLnBvaW50cz1bXSxhPWkscz1uKSxyLnBvaW50cy51bnNoaWZ0KGFEKG4sYSkpLHIucG9pbnRzLnB1c2goYUQoaSxzKSl9KX1mdW5jdGlvbiBFT2UodCl7U2UodC5lZGdlcygpLGZ1bmN0aW9uKGUpe3ZhciByPXQuZWRnZShlKTtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwociwieCIpKXN3aXRjaCgoci5sYWJlbHBvcz09PSJsInx8ci5sYWJlbHBvcz09PSJyIikmJihyLndpZHRoLT1yLmxhYmVsb2Zmc2V0KSxyLmxhYmVscG9zKXtjYXNlImwiOnIueC09ci53aWR0aC8yK3IubGFiZWxvZmZzZXQ7YnJlYWs7Y2FzZSJyIjpyLngrPXIud2lkdGgvMityLmxhYmVsb2Zmc2V0O2JyZWFrfX0pfWZ1bmN0aW9uIFNPZSh0KXtTZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIHI9dC5lZGdlKGUpO3IucmV2ZXJzZWQmJnIucG9pbnRzLnJldmVyc2UoKX0pfWZ1bmN0aW9uIENPZSh0KXtTZSh0Lm5vZGVzKCksZnVuY3Rpb24oZSl7aWYodC5jaGlsZHJlbihlKS5sZW5ndGgpe3ZhciByPXQubm9kZShlKSxuPXQubm9kZShyLmJvcmRlclRvcCksaT10Lm5vZGUoci5ib3JkZXJCb3R0b20pLGE9dC5ub2RlKHhhKHIuYm9yZGVyTGVmdCkpLHM9dC5ub2RlKHhhKHIuYm9yZGVyUmlnaHQpKTtyLndpZHRoPU1hdGguYWJzKHMueC1hLngpLHIuaGVpZ2h0PU1hdGguYWJzKGkueS1uLnkpLHIueD1hLngrci53aWR0aC8yLHIueT1uLnkrci5oZWlnaHQvMn19KSxTZSh0Lm5vZGVzKCksZnVuY3Rpb24oZSl7dC5ub2RlKGUpLmR1bW15PT09ImJvcmRlciImJnQucmVtb3ZlTm9kZShlKX0pfWZ1bmN0aW9uIEFPZSh0KXtTZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7aWYoZS52PT09ZS53KXt2YXIgcj10Lm5vZGUoZS52KTtyLnNlbGZFZGdlc3x8KHIuc2VsZkVkZ2VzPVtdKSxyLnNlbGZFZGdlcy5wdXNoKHtlLGxhYmVsOnQuZWRnZShlKX0pLHQucmVtb3ZlRWRnZShlKX19KX1mdW5jdGlvbiBfT2UodCl7dmFyIGU9c2YodCk7U2UoZSxmdW5jdGlvbihyKXt2YXIgbj0wO1NlKHIsZnVuY3Rpb24oaSxhKXt2YXIgcz10Lm5vZGUoaSk7cy5vcmRlcj1hK24sU2Uocy5zZWxmRWRnZXMsZnVuY3Rpb24obCl7SWModCwic2VsZmVkZ2UiLHt3aWR0aDpsLmxhYmVsLndpZHRoLGhlaWdodDpsLmxhYmVsLmhlaWdodCxyYW5rOnMucmFuayxvcmRlcjphKyArK24sZTpsLmUsbGFiZWw6bC5sYWJlbH0sIl9zZSIpfSksZGVsZXRlIHMuc2VsZkVkZ2VzfSl9KX1mdW5jdGlvbiBMT2UodCl7U2UodC5ub2RlcygpLGZ1bmN0aW9uKGUpe3ZhciByPXQubm9kZShlKTtpZihyLmR1bW15PT09InNlbGZlZGdlIil7dmFyIG49dC5ub2RlKHIuZS52KSxpPW4ueCtuLndpZHRoLzIsYT1uLnkscz1yLngtaSxsPW4uaGVpZ2h0LzI7dC5zZXRFZGdlKHIuZSxyLmxhYmVsKSx0LnJlbW92ZU5vZGUoZSksci5sYWJlbC5wb2ludHM9W3t4OmkrMipzLzMseTphLWx9LHt4OmkrNSpzLzYseTphLWx9LHt4Omkrcyx5OmF9LHt4OmkrNSpzLzYseTphK2x9LHt4OmkrMipzLzMseTphK2x9XSxyLmxhYmVsLng9ci54LHIubGFiZWwueT1yLnl9fSl9ZnVuY3Rpb24gU0QodCxlKXtyZXR1cm4gVWQoV2QodCxlKSxOdW1iZXIpfWZ1bmN0aW9uIENEKHQpe3ZhciBlPXt9O3JldHVybiBTZSh0LGZ1bmN0aW9uKHIsbil7ZVtuLnRvTG93ZXJDYXNlKCldPXJ9KSxlfXZhciBjT2UsdU9lLGhPZSxmT2UsZE9lLHBPZSxtT2UsZ09lLFNpZT1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7R3MoKTt3bmUoKTtDbmUoKTtpRCgpO3VEKCk7a0QoKTtRbmUoKTt5aWUoKTt4aWUoKTtFaWUoKTtPYygpO28oR3UsImxheW91dCIpO28ob09lLCJydW5MYXlvdXQiKTtvKGxPZSwidXBkYXRlSW5wdXRHcmFwaCIpO2NPZT1bIm5vZGVzZXAiLCJlZGdlc2VwIiwicmFua3NlcCIsIm1hcmdpbngiLCJtYXJnaW55Il0sdU9lPXtyYW5rc2VwOjUwLGVkZ2VzZXA6MjAsbm9kZXNlcDo1MCxyYW5rZGlyOiJ0YiJ9LGhPZT1bImFjeWNsaWNlciIsInJhbmtlciIsInJhbmtkaXIiLCJhbGlnbiJdLGZPZT1bIndpZHRoIiwiaGVpZ2h0Il0sZE9lPXt3aWR0aDowLGhlaWdodDowfSxwT2U9WyJtaW5sZW4iLCJ3ZWlnaHQiLCJ3aWR0aCIsImhlaWdodCIsImxhYmVsb2Zmc2V0Il0sbU9lPXttaW5sZW46MSx3ZWlnaHQ6MSx3aWR0aDowLGhlaWdodDowLGxhYmVsb2Zmc2V0OjEwLGxhYmVscG9zOiJyIn0sZ09lPVsibGFiZWxwb3MiXTtvKHlPZSwiYnVpbGRMYXlvdXRHcmFwaCIpO28odk9lLCJtYWtlU3BhY2VGb3JFZGdlTGFiZWxzIik7byh4T2UsImluamVjdEVkZ2VMYWJlbFByb3hpZXMiKTtvKGJPZSwiYXNzaWduUmFua01pbk1heCIpO28od09lLCJyZW1vdmVFZGdlTGFiZWxQcm94aWVzIik7byhUT2UsInRyYW5zbGF0ZUdyYXBoIik7byhrT2UsImFzc2lnbk5vZGVJbnRlcnNlY3RzIik7byhFT2UsImZpeHVwRWRnZUxhYmVsQ29vcmRzIik7byhTT2UsInJldmVyc2VQb2ludHNGb3JSZXZlcnNlZEVkZ2VzIik7byhDT2UsInJlbW92ZUJvcmRlck5vZGVzIik7byhBT2UsInJlbW92ZVNlbGZFZGdlcyIpO28oX09lLCJpbnNlcnRTZWxmRWRnZXMiKTtvKExPZSwicG9zaXRpb25TZWxmRWRnZXMiKTtvKFNELCJzZWxlY3ROdW1iZXJBdHRycyIpO28oQ0QsImNhbm9uaWNhbGl6ZSIpfSk7dmFyIFF2PU0oKCk9PnsidXNlIHN0cmljdCI7aUQoKTtTaWUoKTt1RCgpO2tEKCl9KTtmdW5jdGlvbiBLbyh0KXt2YXIgZT17b3B0aW9uczp7ZGlyZWN0ZWQ6dC5pc0RpcmVjdGVkKCksbXVsdGlncmFwaDp0LmlzTXVsdGlncmFwaCgpLGNvbXBvdW5kOnQuaXNDb21wb3VuZCgpfSxub2RlczpET2UodCksZWRnZXM6Tk9lKHQpfTtyZXR1cm4gZHIodC5ncmFwaCgpKXx8KGUudmFsdWU9cm4odC5ncmFwaCgpKSksZX1mdW5jdGlvbiBET2UodCl7cmV0dXJuIFFlKHQubm9kZXMoKSxmdW5jdGlvbihlKXt2YXIgcj10Lm5vZGUoZSksbj10LnBhcmVudChlKSxpPXt2OmV9O3JldHVybiBkcihyKXx8KGkudmFsdWU9ciksZHIobil8fChpLnBhcmVudD1uKSxpfSl9ZnVuY3Rpb24gTk9lKHQpe3JldHVybiBRZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIHI9dC5lZGdlKGUpLG49e3Y6ZS52LHc6ZS53fTtyZXR1cm4gZHIoZS5uYW1lKXx8KG4ubmFtZT1lLm5hbWUpLGRyKHIpfHwobi52YWx1ZT1yKSxufSl9dmFyIEFEPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtwVCgpO28oS28sIndyaXRlIik7byhET2UsIndyaXRlTm9kZXMiKTtvKE5PZSwid3JpdGVFZGdlcyIpfSk7dmFyIHdyLGpkLF9pZSxMaWUsYlQsUk9lLERpZSxOaWUsTU9lLEttLEFpZSxSaWUsTWllLElpZSxPaWUsUGllPU0oKCk9PnsidXNlIHN0cmljdCI7dXQoKTtHcygpO0FEKCk7d3I9bmV3IE1hcCxqZD1uZXcgTWFwLF9pZT1uZXcgTWFwLExpZT1vKCgpPT57amQuY2xlYXIoKSxfaWUuY2xlYXIoKSx3ci5jbGVhcigpfSwiY2xlYXIiKSxiVD1vKCh0LGUpPT57bGV0IHI9amQuZ2V0KGUpfHxbXTtyZXR1cm4gWS50cmFjZSgiSW4gaXNEZXNjZW5kYW50IixlLCIgIix0LCIgPSAiLHIuaW5jbHVkZXModCkpLHIuaW5jbHVkZXModCl9LCJpc0Rlc2NlbmRhbnQiKSxST2U9bygodCxlKT0+e2xldCByPWpkLmdldChlKXx8W107cmV0dXJuIFkuaW5mbygiRGVzY2VuZGFudHMgb2YgIixlLCIgaXMgIixyKSxZLmluZm8oIkVkZ2UgaXMgIix0KSx0LnY9PT1lfHx0Lnc9PT1lPyExOnI/ci5pbmNsdWRlcyh0LnYpfHxiVCh0LnYsZSl8fGJUKHQudyxlKXx8ci5pbmNsdWRlcyh0LncpOihZLmRlYnVnKCJUaWx0LCAiLGUsIixub3QgaW4gZGVzY2VuZGFudHMiKSwhMSl9LCJlZGdlSW5DbHVzdGVyIiksRGllPW8oKHQsZSxyLG4pPT57WS53YXJuKCJDb3B5aW5nIGNoaWxkcmVuIG9mICIsdCwicm9vdCIsbiwiZGF0YSIsZS5ub2RlKHQpLG4pO2xldCBpPWUuY2hpbGRyZW4odCl8fFtdO3QhPT1uJiZpLnB1c2godCksWS53YXJuKCJDb3B5aW5nIChub2RlcykgY2x1c3RlcklkIix0LCJub2RlcyIsaSksaS5mb3JFYWNoKGE9PntpZihlLmNoaWxkcmVuKGEpLmxlbmd0aD4wKURpZShhLGUscixuKTtlbHNle2xldCBzPWUubm9kZShhKTtZLmluZm8oImNwICIsYSwiIHRvICIsbiwiIHdpdGggcGFyZW50ICIsdCksci5zZXROb2RlKGEscyksbiE9PWUucGFyZW50KGEpJiYoWS53YXJuKCJTZXR0aW5nIHBhcmVudCIsYSxlLnBhcmVudChhKSksci5zZXRQYXJlbnQoYSxlLnBhcmVudChhKSkpLHQhPT1uJiZhIT09dD8oWS5kZWJ1ZygiU2V0dGluZyBwYXJlbnQiLGEsdCksci5zZXRQYXJlbnQoYSx0KSk6KFkuaW5mbygiSW4gY29weSAiLHQsInJvb3QiLG4sImRhdGEiLGUubm9kZSh0KSxuKSxZLmRlYnVnKCJOb3QgU2V0dGluZyBwYXJlbnQgZm9yIG5vZGU9IixhLCJjbHVzdGVyIT09cm9vdElkIix0IT09biwibm9kZSE9PWNsdXN0ZXJJZCIsYSE9PXQpKTtsZXQgbD1lLmVkZ2VzKGEpO1kuZGVidWcoIkNvcHlpbmcgRWRnZXMiLGwpLGwuZm9yRWFjaCh1PT57WS5pbmZvKCJFZGdlIix1KTtsZXQgaD1lLmVkZ2UodS52LHUudyx1Lm5hbWUpO1kuaW5mbygiRWRnZSBkYXRhIixoLG4pO3RyeXtST2UodSxuKT8oWS5pbmZvKCJDb3B5aW5nIGFzICIsdS52LHUudyxoLHUubmFtZSksci5zZXRFZGdlKHUudix1LncsaCx1Lm5hbWUpLFkuaW5mbygibmV3R3JhcGggZWRnZXMgIixyLmVkZ2VzKCksci5lZGdlKHIuZWRnZXMoKVswXSkpKTpZLmluZm8oIlNraXBwaW5nIGNvcHkgb2YgZWRnZSAiLHUudiwiLS0+Iix1LncsIiByb290SWQ6ICIsbiwiIGNsdXN0ZXJJZDoiLHQpfWNhdGNoKGYpe1kuZXJyb3IoZil9fSl9WS5kZWJ1ZygiUmVtb3Zpbmcgbm9kZSIsYSksZS5yZW1vdmVOb2RlKGEpfSl9LCJjb3B5IiksTmllPW8oKHQsZSk9PntsZXQgcj1lLmNoaWxkcmVuKHQpLG49Wy4uLnJdO2ZvcihsZXQgaSBvZiByKV9pZS5zZXQoaSx0KSxuPVsuLi5uLC4uLk5pZShpLGUpXTtyZXR1cm4gbn0sImV4dHJhY3REZXNjZW5kYW50cyIpLE1PZT1vKCh0LGUscik9PntsZXQgbj10LmVkZ2VzKCkuZmlsdGVyKHU9PnUudj09PWV8fHUudz09PWUpLGk9dC5lZGdlcygpLmZpbHRlcih1PT51LnY9PT1yfHx1Lnc9PT1yKSxhPW4ubWFwKHU9Pih7djp1LnY9PT1lP3I6dS52LHc6dS53PT09ZT9lOnUud30pKSxzPWkubWFwKHU9Pih7djp1LnYsdzp1Lnd9KSk7cmV0dXJuIGEuZmlsdGVyKHU9PnMuc29tZShoPT51LnY9PT1oLnYmJnUudz09PWgudykpfSwiZmluZENvbW1vbkVkZ2VzIiksS209bygodCxlLHIpPT57bGV0IG49ZS5jaGlsZHJlbih0KTtpZihZLnRyYWNlKCJTZWFyY2hpbmcgY2hpbGRyZW4gb2YgaWQgIix0LG4pLG4ubGVuZ3RoPDEpcmV0dXJuIHQ7bGV0IGk7Zm9yKGxldCBhIG9mIG4pe2xldCBzPUttKGEsZSxyKSxsPU1PZShlLHIscyk7aWYocylpZihsLmxlbmd0aD4wKWk9cztlbHNlIHJldHVybiBzfXJldHVybiBpfSwiZmluZE5vbkNsdXN0ZXJDaGlsZCIpLEFpZT1vKHQ9PiF3ci5oYXModCl8fCF3ci5nZXQodCkuZXh0ZXJuYWxDb25uZWN0aW9ucz90OndyLmhhcyh0KT93ci5nZXQodCkuaWQ6dCwiZ2V0QW5jaG9ySWQiKSxSaWU9bygodCxlKT0+e2lmKCF0fHxlPjEwKXtZLmRlYnVnKCJPcHRpbmcgb3V0LCBubyBncmFwaCAiKTtyZXR1cm59ZWxzZSBZLmRlYnVnKCJPcHRpbmcgaW4sIGdyYXBoICIpO3Qubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3QuY2hpbGRyZW4ocikubGVuZ3RoPjAmJihZLndhcm4oIkNsdXN0ZXIgaWRlbnRpZmllZCIsciwiIFJlcGxhY2VtZW50IGlkIGluIGVkZ2VzOiAiLEttKHIsdCxyKSksamQuc2V0KHIsTmllKHIsdCkpLHdyLnNldChyLHtpZDpLbShyLHQsciksY2x1c3RlckRhdGE6dC5ub2RlKHIpfSkpfSksdC5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24ocil7bGV0IG49dC5jaGlsZHJlbihyKSxpPXQuZWRnZXMoKTtuLmxlbmd0aD4wPyhZLmRlYnVnKCJDbHVzdGVyIGlkZW50aWZpZWQiLHIsamQpLGkuZm9yRWFjaChhPT57bGV0IHM9YlQoYS52LHIpLGw9YlQoYS53LHIpO3NebCYmKFkud2FybigiRWRnZTogIixhLCIgbGVhdmVzIGNsdXN0ZXIgIixyKSxZLndhcm4oIkRlc2NlbmRhbnRzIG9mIFhYWCAiLHIsIjogIixqZC5nZXQocikpLHdyLmdldChyKS5leHRlcm5hbENvbm5lY3Rpb25zPSEwKX0pKTpZLmRlYnVnKCJOb3QgYSBjbHVzdGVyICIscixqZCl9KTtmb3IobGV0IHIgb2Ygd3Iua2V5cygpKXtsZXQgbj13ci5nZXQocikuaWQsaT10LnBhcmVudChuKTtpIT09ciYmd3IuaGFzKGkpJiYhd3IuZ2V0KGkpLmV4dGVybmFsQ29ubmVjdGlvbnMmJih3ci5nZXQocikuaWQ9aSl9dC5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24ocil7bGV0IG49dC5lZGdlKHIpO1kud2FybigiRWRnZSAiK3IudisiIC0+ICIrci53KyI6ICIrSlNPTi5zdHJpbmdpZnkocikpLFkud2FybigiRWRnZSAiK3IudisiIC0+ICIrci53KyI6ICIrSlNPTi5zdHJpbmdpZnkodC5lZGdlKHIpKSk7bGV0IGk9ci52LGE9ci53O2lmKFkud2FybigiRml4IFhYWCIsd3IsImlkczoiLHIudixyLncsIlRyYW5zbGF0aW5nOiAiLHdyLmdldChyLnYpLCIgLS0tICIsd3IuZ2V0KHIudykpLHdyLmdldChyLnYpfHx3ci5nZXQoci53KSl7aWYoWS53YXJuKCJGaXhpbmcgYW5kIHRyeWluZyAtIHJlbW92aW5nIFhYWCIsci52LHIudyxyLm5hbWUpLGk9QWllKHIudiksYT1BaWUoci53KSx0LnJlbW92ZUVkZ2Uoci52LHIudyxyLm5hbWUpLGkhPT1yLnYpe2xldCBzPXQucGFyZW50KGkpO3dyLmdldChzKS5leHRlcm5hbENvbm5lY3Rpb25zPSEwLG4uZnJvbUNsdXN0ZXI9ci52fWlmKGEhPT1yLncpe2xldCBzPXQucGFyZW50KGEpO3dyLmdldChzKS5leHRlcm5hbENvbm5lY3Rpb25zPSEwLG4udG9DbHVzdGVyPXIud31ZLndhcm4oIkZpeCBSZXBsYWNpbmcgd2l0aCBYWFgiLGksYSxyLm5hbWUpLHQuc2V0RWRnZShpLGEsbixyLm5hbWUpfX0pLFkud2FybigiQWRqdXN0ZWQgR3JhcGgiLEtvKHQpKSxNaWUodCwwKSxZLnRyYWNlKHdyKX0sImFkanVzdENsdXN0ZXJzQW5kRWRnZXMiKSxNaWU9bygodCxlKT0+e2lmKFkud2FybigiZXh0cmFjdG9yIC0gIixlLEtvKHQpLHQuY2hpbGRyZW4oIkQiKSksZT4xMCl7WS5lcnJvcigiQmFpbGluZyBvdXQiKTtyZXR1cm59bGV0IHI9dC5ub2RlcygpLG49ITE7Zm9yKGxldCBpIG9mIHIpe2xldCBhPXQuY2hpbGRyZW4oaSk7bj1ufHxhLmxlbmd0aD4wfWlmKCFuKXtZLmRlYnVnKCJEb25lLCBubyBub2RlIGhhcyBjaGlsZHJlbiIsdC5ub2RlcygpKTtyZXR1cm59WS5kZWJ1ZygiTm9kZXMgPSAiLHIsZSk7Zm9yKGxldCBpIG9mIHIpaWYoWS5kZWJ1ZygiRXh0cmFjdGluZyBub2RlIixpLHdyLHdyLmhhcyhpKSYmIXdyLmdldChpKS5leHRlcm5hbENvbm5lY3Rpb25zLCF0LnBhcmVudChpKSx0Lm5vZGUoaSksdC5jaGlsZHJlbigiRCIpLCIgRGVwdGggIixlKSwhd3IuaGFzKGkpKVkuZGVidWcoIk5vdCBhIGNsdXN0ZXIiLGksZSk7ZWxzZSBpZighd3IuZ2V0KGkpLmV4dGVybmFsQ29ubmVjdGlvbnMmJnQuY2hpbGRyZW4oaSkmJnQuY2hpbGRyZW4oaSkubGVuZ3RoPjApe1kud2FybigiQ2x1c3RlciB3aXRob3V0IGV4dGVybmFsIGNvbm5lY3Rpb25zLCB3aXRob3V0IGEgcGFyZW50IGFuZCB3aXRoIGNoaWxkcmVuIixpLGUpO2xldCBzPXQuZ3JhcGgoKS5yYW5rZGlyPT09IlRCIj8iTFIiOiJUQiI7d3IuZ2V0KGkpPy5jbHVzdGVyRGF0YT8uZGlyJiYocz13ci5nZXQoaSkuY2x1c3RlckRhdGEuZGlyLFkud2FybigiRml4aW5nIGRpciIsd3IuZ2V0KGkpLmNsdXN0ZXJEYXRhLmRpcixzKSk7bGV0IGw9bmV3IElyKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6cyxub2Rlc2VwOjUwLHJhbmtzZXA6NTAsbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pO1kud2FybigiT2xkIGdyYXBoIGJlZm9yZSBjb3B5IixLbyh0KSksRGllKGksdCxsLGkpLHQuc2V0Tm9kZShpLHtjbHVzdGVyTm9kZTohMCxpZDppLGNsdXN0ZXJEYXRhOndyLmdldChpKS5jbHVzdGVyRGF0YSxsYWJlbDp3ci5nZXQoaSkubGFiZWwsZ3JhcGg6bH0pLFkud2FybigiTmV3IGdyYXBoIGFmdGVyIGNvcHkgbm9kZTogKCIsaSwiKSIsS28obCkpLFkuZGVidWcoIk9sZCBncmFwaCBhZnRlciBjb3B5IixLbyh0KSl9ZWxzZSBZLndhcm4oIkNsdXN0ZXIgKiogIixpLCIgKipub3QgbWVldGluZyB0aGUgY3JpdGVyaWEgIWV4dGVybmFsQ29ubmVjdGlvbnM6Iiwhd3IuZ2V0KGkpLmV4dGVybmFsQ29ubmVjdGlvbnMsIiBubyBwYXJlbnQ6ICIsIXQucGFyZW50KGkpLCIgY2hpbGRyZW4gIix0LmNoaWxkcmVuKGkpJiZ0LmNoaWxkcmVuKGkpLmxlbmd0aD4wLHQuY2hpbGRyZW4oIkQiKSxlKSxZLmRlYnVnKHdyKTtyPXQubm9kZXMoKSxZLndhcm4oIk5ldyBsaXN0IG9mIG5vZGVzIixyKTtmb3IobGV0IGkgb2Ygcil7bGV0IGE9dC5ub2RlKGkpO1kud2FybigiIE5vdyBuZXh0IGxldmVsIixpLGEpLGE/LmNsdXN0ZXJOb2RlJiZNaWUoYS5ncmFwaCxlKzEpfX0sImV4dHJhY3RvciIpLElpZT1vKCh0LGUpPT57aWYoZS5sZW5ndGg9PT0wKXJldHVybltdO2xldCByPU9iamVjdC5hc3NpZ24oW10sZSk7cmV0dXJuIGUuZm9yRWFjaChuPT57bGV0IGk9dC5jaGlsZHJlbihuKSxhPUlpZSh0LGkpO3I9Wy4uLnIsLi4uYV19KSxyfSwic29ydGVyIiksT2llPW8odD0+SWllKHQsdC5jaGlsZHJlbigpKSwic29ydE5vZGVzQnlIaWVyYXJjaHkiKX0pO3ZhciBGaWU9e307dnIoRmllLHtyZW5kZXI6KCk9PklPZX0pO3ZhciBCaWUsSU9lLHppZT1NKCgpPT57InVzZSBzdHJpY3QiO1F2KCk7QUQoKTtHcygpO2ZMKCk7T3QoKTtQaWUoKTt2dygpO2x3KCk7aEwoKTt1dCgpOyR2KCk7VnQoKTtCaWU9byhhc3luYyh0LGUscixuLGksYSk9PntZLndhcm4oIkdyYXBoIGluIHJlY3Vyc2l2ZSByZW5kZXI6WEFYIixLbyhlKSxpKTtsZXQgcz1lLmdyYXBoKCkucmFua2RpcjtZLnRyYWNlKCJEaXIgaW4gcmVjdXJzaXZlIHJlbmRlciAtIGRpcjoiLHMpO2xldCBsPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJyb290Iik7ZS5ub2RlcygpP1kuaW5mbygiUmVjdXJzaXZlIHJlbmRlciBYWFgiLGUubm9kZXMoKSk6WS5pbmZvKCJObyBub2RlcyBmb3VuZCBmb3IiLGUpLGUuZWRnZXMoKS5sZW5ndGg+MCYmWS5pbmZvKCJSZWN1cnNpdmUgZWRnZXMiLGUuZWRnZShlLmVkZ2VzKClbMF0pKTtsZXQgdT1sLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3RlcnMiKSxoPWwuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlUGF0aHMiKSxmPWwuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlTGFiZWxzIiksZD1sLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZXMiKTthd2FpdCBQcm9taXNlLmFsbChlLm5vZGVzKCkubWFwKGFzeW5jIGZ1bmN0aW9uKHkpe2xldCB2PWUubm9kZSh5KTtpZihpIT09dm9pZCAwKXtsZXQgeD1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGkuY2x1c3RlckRhdGEpKTtZLnRyYWNlKGBTZXR0aW5nIGRhdGEgZm9yIHBhcmVudCBjbHVzdGVyIFhYWAogTm9kZS5pZCA9IGAseSxgCiBkYXRhPWAseC5oZWlnaHQsYApQYXJlbnQgY2x1c3RlcmAsaS5oZWlnaHQpLGUuc2V0Tm9kZShpLmlkLHgpLGUucGFyZW50KHkpfHwoWS50cmFjZSgiU2V0dGluZyBwYXJlbnQiLHksaS5pZCksZS5zZXRQYXJlbnQoeSxpLmlkLHgpKX1pZihZLmluZm8oIihJbnNlcnQpIE5vZGUgWFhYIit5KyI6ICIrSlNPTi5zdHJpbmdpZnkoZS5ub2RlKHkpKSksdj8uY2x1c3Rlck5vZGUpe1kuaW5mbygiQ2x1c3RlciBpZGVudGlmaWVkIFhCWCIseSx2LndpZHRoLGUubm9kZSh5KSk7bGV0e3JhbmtzZXA6eCxub2Rlc2VwOmJ9PWUuZ3JhcGgoKTt2LmdyYXBoLnNldEdyYXBoKHsuLi52LmdyYXBoLmdyYXBoKCkscmFua3NlcDp4KzI1LG5vZGVzZXA6Yn0pO2xldCB3PWF3YWl0IEJpZShkLHYuZ3JhcGgscixuLGUubm9kZSh5KSxhKSxfPXcuZWxlbTtqZSh2LF8pLHYuZGlmZj13LmRpZmZ8fDAsWS5pbmZvKCJOZXcgY29tcG91bmQgbm9kZSBhZnRlciByZWN1cnNpdmUgcmVuZGVyIFhBWCIseSwid2lkdGgiLHYud2lkdGgsImhlaWdodCIsdi5oZWlnaHQpLHJKKF8sdil9ZWxzZSBlLmNoaWxkcmVuKHkpLmxlbmd0aD4wPyhZLnRyYWNlKCJDbHVzdGVyIC0gdGhlIG5vbiByZWN1cnNpdmUgcGF0aCBYQlgiLHksdi5pZCx2LHYud2lkdGgsIkdyYXBoOiIsZSksWS50cmFjZShLbSh2LmlkLGUpKSx3ci5zZXQodi5pZCx7aWQ6S20odi5pZCxlKSxub2RlOnZ9KSk6KFkudHJhY2UoIk5vZGUgLSB0aGUgbm9uIHJlY3Vyc2l2ZSBwYXRoIFhBWCIseSxkLGUubm9kZSh5KSxzKSxhd2FpdCBMbShkLGUubm9kZSh5KSx7Y29uZmlnOmEsZGlyOnN9KSl9KSksYXdhaXQgbyhhc3luYygpPT57bGV0IHk9ZS5lZGdlcygpLm1hcChhc3luYyBmdW5jdGlvbih2KXtsZXQgeD1lLmVkZ2Uodi52LHYudyx2Lm5hbWUpO1kuaW5mbygiRWRnZSAiK3YudisiIC0+ICIrdi53KyI6ICIrSlNPTi5zdHJpbmdpZnkodikpLFkuaW5mbygiRWRnZSAiK3YudisiIC0+ICIrdi53KyI6ICIsdiwiICIsSlNPTi5zdHJpbmdpZnkoZS5lZGdlKHYpKSksWS5pbmZvKCJGaXgiLHdyLCJpZHM6Iix2LnYsdi53LCJUcmFuc2xhdGluZzogIix3ci5nZXQodi52KSx3ci5nZXQodi53KSksYXdhaXQgZHcoZix4KX0pO2F3YWl0IFByb21pc2UuYWxsKHkpfSwicHJvY2Vzc0VkZ2VzIikoKSxZLmluZm8oIkdyYXBoIGJlZm9yZSBsYXlvdXQ6IixKU09OLnN0cmluZ2lmeShLbyhlKSkpLFkuaW5mbygiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFhYWCIpLFkuaW5mbygiIyMjICAgICAgICAgICAgICAgIExheW91dCAgICAgICAgICAgICAgICAgIyMjIFhYWCIpLFkuaW5mbygiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFhYWCIpLEd1KGUpLFkuaW5mbygiR3JhcGggYWZ0ZXIgbGF5b3V0OiIsSlNPTi5zdHJpbmdpZnkoS28oZSkpKTtsZXQgbT0wLHtzdWJHcmFwaFRpdGxlVG90YWxNYXJnaW46Z309RnUoYSk7cmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKE9pZShlKS5tYXAoYXN5bmMgZnVuY3Rpb24oeSl7bGV0IHY9ZS5ub2RlKHkpO2lmKFkuaW5mbygiUG9zaXRpb24gWEJYID0+ICIreSsiOiAoIit2LngsIiwiK3YueSwiKSB3aWR0aDogIix2LndpZHRoLCIgaGVpZ2h0OiAiLHYuaGVpZ2h0KSx2Py5jbHVzdGVyTm9kZSl2LnkrPWcsWS5pbmZvKCJBIHRhaW50ZWQgY2x1c3RlciBub2RlIFhCWDEiLHksdi5pZCx2LndpZHRoLHYuaGVpZ2h0LHYueCx2LnksZS5wYXJlbnQoeSkpLHdyLmdldCh2LmlkKS5ub2RlPXYsVXYodik7ZWxzZSBpZihlLmNoaWxkcmVuKHkpLmxlbmd0aD4wKXtZLmluZm8oIkEgcHVyZSBjbHVzdGVyIG5vZGUgWEJYMSIseSx2LmlkLHYueCx2Lnksdi53aWR0aCx2LmhlaWdodCxlLnBhcmVudCh5KSksdi5oZWlnaHQrPWcsZS5ub2RlKHYucGFyZW50SWQpO2xldCB4PXY/LnBhZGRpbmcvMnx8MCxiPXY/LmxhYmVsQkJveD8uaGVpZ2h0fHwwLHc9Yi14fHwwO1kuZGVidWcoIk9mZnNldFkiLHcsImxhYmVsSGVpZ2h0IixiLCJoYWxmUGFkZGluZyIseCksYXdhaXQgX20odSx2KSx3ci5nZXQodi5pZCkubm9kZT12fWVsc2V7bGV0IHg9ZS5ub2RlKHYucGFyZW50SWQpO3YueSs9Zy8yLFkuaW5mbygiQSByZWd1bGFyIG5vZGUgWEJYMSAtIHVzaW5nIHRoZSBwYWRkaW5nIix2LmlkLCJwYXJlbnQiLHYucGFyZW50SWQsdi53aWR0aCx2LmhlaWdodCx2Lngsdi55LCJvZmZzZXRZIix2Lm9mZnNldFksInBhcmVudCIseCx4Py5vZmZzZXRZLHYpLFV2KHYpfX0pKSxlLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbih5KXtsZXQgdj1lLmVkZ2UoeSk7WS5pbmZvKCJFZGdlICIreS52KyIgLT4gIit5LncrIjogIitKU09OLnN0cmluZ2lmeSh2KSx2KSx2LnBvaW50cy5mb3JFYWNoKF89Pl8ueSs9Zy8yKTtsZXQgeD1lLm5vZGUoeS52KTt2YXIgYj1lLm5vZGUoeS53KTtsZXQgdz1tdyhoLHYsd3Iscix4LGIsbik7cHcodix3KX0pLGUubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHkpe2xldCB2PWUubm9kZSh5KTtZLmluZm8oeSx2LnR5cGUsdi5kaWZmKSx2LmlzR3JvdXAmJihtPXYuZGlmZil9KSxZLndhcm4oIlJldHVybmluZyBmcm9tIHJlY3Vyc2l2ZSByZW5kZXIgWEFYIixsLG0pLHtlbGVtOmwsZGlmZjptfX0sInJlY3Vyc2l2ZVJlbmRlciIpLElPZT1vKGFzeW5jKHQsZSk9PntsZXQgcj1uZXcgSXIoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cmFua2Rpcjp0LmRpcmVjdGlvbixub2Rlc2VwOnQuY29uZmlnPy5ub2RlU3BhY2luZ3x8dC5jb25maWc/LmZsb3djaGFydD8ubm9kZVNwYWNpbmd8fHQubm9kZVNwYWNpbmcscmFua3NlcDp0LmNvbmZpZz8ucmFua1NwYWNpbmd8fHQuY29uZmlnPy5mbG93Y2hhcnQ/LnJhbmtTcGFjaW5nfHx0LnJhbmtTcGFjaW5nLG1hcmdpbng6OCxtYXJnaW55Ojh9KS5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCl7cmV0dXJue319KSxuPWUuc2VsZWN0KCJnIik7Z3cobix0Lm1hcmtlcnMsdC50eXBlLHQuZGlhZ3JhbUlkKSxuSigpLHRKKCksalooKSxMaWUoKSx0Lm5vZGVzLmZvckVhY2goYT0+e3Iuc2V0Tm9kZShhLmlkLHsuLi5hfSksYS5wYXJlbnRJZCYmci5zZXRQYXJlbnQoYS5pZCxhLnBhcmVudElkKX0pLFkuZGVidWcoIkVkZ2VzOiIsdC5lZGdlcyksdC5lZGdlcy5mb3JFYWNoKGE9PntpZihhLnN0YXJ0PT09YS5lbmQpe2xldCBzPWEuc3RhcnQsbD1zKyItLS0iK3MrIi0tLTEiLHU9cysiLS0tIitzKyItLS0yIixoPXIubm9kZShzKTtyLnNldE5vZGUobCx7ZG9tSWQ6bCxpZDpsLHBhcmVudElkOmgucGFyZW50SWQsbGFiZWxTdHlsZToiIixsYWJlbDoiIixwYWRkaW5nOjAsc2hhcGU6ImxhYmVsUmVjdCIsc3R5bGU6IiIsd2lkdGg6MTAsaGVpZ2h0OjEwfSksci5zZXRQYXJlbnQobCxoLnBhcmVudElkKSxyLnNldE5vZGUodSx7ZG9tSWQ6dSxpZDp1LHBhcmVudElkOmgucGFyZW50SWQsbGFiZWxTdHlsZToiIixwYWRkaW5nOjAsc2hhcGU6ImxhYmVsUmVjdCIsbGFiZWw6IiIsc3R5bGU6IiIsd2lkdGg6MTAsaGVpZ2h0OjEwfSksci5zZXRQYXJlbnQodSxoLnBhcmVudElkKTtsZXQgZj1zdHJ1Y3R1cmVkQ2xvbmUoYSksZD1zdHJ1Y3R1cmVkQ2xvbmUoYSkscD1zdHJ1Y3R1cmVkQ2xvbmUoYSk7Zi5sYWJlbD0iIixmLmFycm93VHlwZUVuZD0ibm9uZSIsZi5pZD1zKyItY3ljbGljLXNwZWNpYWwtMSIsZC5hcnJvd1R5cGVFbmQ9Im5vbmUiLGQuaWQ9cysiLWN5Y2xpYy1zcGVjaWFsLW1pZCIscC5sYWJlbD0iIixoLmlzR3JvdXAmJihmLmZyb21DbHVzdGVyPXMscC50b0NsdXN0ZXI9cykscC5pZD1zKyItY3ljbGljLXNwZWNpYWwtMiIsci5zZXRFZGdlKHMsbCxmLHMrIi1jeWNsaWMtc3BlY2lhbC0wIiksci5zZXRFZGdlKGwsdSxkLHMrIi1jeWNsaWMtc3BlY2lhbC0xIiksci5zZXRFZGdlKHUscyxwLHMrIi1jeWM8bGljLXNwZWNpYWwtMiIpfWVsc2Ugci5zZXRFZGdlKGEuc3RhcnQsYS5lbmQsey4uLmF9LGEuaWQpfSksWS53YXJuKCJHcmFwaCBhdCBmaXJzdDoiLEpTT04uc3RyaW5naWZ5KEtvKHIpKSksUmllKHIpLFkud2FybigiR3JhcGggYWZ0ZXIgWEFYOiIsSlNPTi5zdHJpbmdpZnkoS28ocikpKTtsZXQgaT1wZSgpO2F3YWl0IEJpZShuLHIsdC50eXBlLHQuZGlhZ3JhbUlkLHZvaWQgMCxpKX0sInJlbmRlciIpfSk7dmFyIFp2LF9ELE9PZSxRbSx3VCxKdj1NKCgpPT57InVzZSBzdHJpY3QiO2FKKCk7dXQoKTtadj17fSxfRD1vKHQ9Pntmb3IobGV0IGUgb2YgdCladltlLm5hbWVdPWV9LCJyZWdpc3RlckxheW91dExvYWRlcnMiKSxPT2U9bygoKT0+e19EKFt7bmFtZToiZGFncmUiLGxvYWRlcjpvKGFzeW5jKCk9PmF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pih6aWUoKSxGaWUpKSwibG9hZGVyIil9XSl9LCJyZWdpc3RlckRlZmF1bHRMYXlvdXRMb2FkZXJzIik7T09lKCk7UW09byhhc3luYyh0LGUpPT57aWYoISh0LmxheW91dEFsZ29yaXRobSBpbiBadikpdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGxheW91dCBhbGdvcml0aG06ICR7dC5sYXlvdXRBbGdvcml0aG19YCk7bGV0IHI9WnZbdC5sYXlvdXRBbGdvcml0aG1dO3JldHVybihhd2FpdCByLmxvYWRlcigpKS5yZW5kZXIodCxlLGlKLHthbGdvcml0aG06ci5hbGdvcml0aG19KX0sInJlbmRlciIpLHdUPW8oKHQ9IiIse2ZhbGxiYWNrOmU9ImRhZ3JlIn09e30pPT57aWYodCBpbiBadilyZXR1cm4gdDtpZihlIGluIFp2KXJldHVybiBZLndhcm4oYExheW91dCBhbGdvcml0aG0gJHt0fSBpcyBub3QgcmVnaXN0ZXJlZC4gVXNpbmcgJHtlfSBhcyBmYWxsYmFjay5gKSxlO3Rocm93IG5ldyBFcnJvcihgQm90aCBsYXlvdXQgYWxnb3JpdGhtcyAke3R9IGFuZCAke2V9IGFyZSBub3QgcmVnaXN0ZXJlZC5gKX0sImdldFJlZ2lzdGVyZWRMYXlvdXRBbGdvcml0aG0iKX0pO3ZhciBabSxQT2UsQk9lLFRUPU0oKCk9PnsidXNlIHN0cmljdCI7YWkoKTt1dCgpO1ptPW8oKHQsZSxyLG4pPT57dC5hdHRyKCJjbGFzcyIscik7bGV0e3dpZHRoOmksaGVpZ2h0OmEseDpzLHk6bH09UE9lKHQsZSk7WnIodCxhLGksbik7bGV0IHU9Qk9lKHMsbCxpLGEsZSk7dC5hdHRyKCJ2aWV3Qm94Iix1KSxZLmRlYnVnKGB2aWV3Qm94IGNvbmZpZ3VyZWQ6ICR7dX0gd2l0aCBwYWRkaW5nOiAke2V9YCl9LCJzZXR1cFZpZXdQb3J0Rm9yU1ZHIiksUE9lPW8oKHQsZSk9PntsZXQgcj10Lm5vZGUoKT8uZ2V0QkJveCgpfHx7d2lkdGg6MCxoZWlnaHQ6MCx4OjAseTowfTtyZXR1cm57d2lkdGg6ci53aWR0aCtlKjIsaGVpZ2h0OnIuaGVpZ2h0K2UqMix4OnIueCx5OnIueX19LCJjYWxjdWxhdGVEaW1lbnNpb25zV2l0aFBhZGRpbmciKSxCT2U9bygodCxlLHIsbixpKT0+YCR7dC1pfSAke2UtaX0gJHtyfSAke259YCwiY3JlYXRlVmlld0JveCIpfSk7dmFyIEZPZSx6T2UsR2llLCRpZT1NKCgpPT57InVzZSBzdHJpY3QiO3ByKCk7VnQoKTt1dCgpO293KCk7SnYoKTtUVCgpO2hyKCk7Y0woKTtGT2U9byhmdW5jdGlvbih0LGUpe3JldHVybiBlLmRiLmdldENsYXNzZXMoKX0sImdldENsYXNzZXMiKSx6T2U9byhhc3luYyBmdW5jdGlvbih0LGUscixuKXtZLmluZm8oIlJFRjA6IiksWS5pbmZvKCJEcmF3aW5nIHN0YXRlIGRpYWdyYW0gKHYyKSIsZSk7bGV0e3NlY3VyaXR5TGV2ZWw6aSxmbG93Y2hhcnQ6YSxsYXlvdXQ6c309cGUoKSxsO2k9PT0ic2FuZGJveCImJihsPVZlKCIjaSIrZSkpO2xldCB1PWk9PT0ic2FuZGJveCI/bC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudDpkb2N1bWVudDtZLmRlYnVnKCJCZWZvcmUgZ2V0RGF0YTogIik7bGV0IGg9bi5kYi5nZXREYXRhKCk7WS5kZWJ1ZygiRGF0YTogIixoKTtsZXQgZj1BbShlLGkpLGQ9bEwoKTtoLnR5cGU9bi50eXBlLGgubGF5b3V0QWxnb3JpdGhtPXdUKHMpLGgubGF5b3V0QWxnb3JpdGhtPT09ImRhZ3JlIiYmcz09PSJlbGsiJiZZLndhcm4oImZsb3djaGFydC1lbGsgd2FzIG1vdmVkIHRvIGFuIGV4dGVybmFsIHBhY2thZ2UgaW4gTWVybWFpZCB2MTEuIFBsZWFzZSByZWZlciBbcmVsZWFzZSBub3Rlc10oaHR0cHM6Ly9naXRodWIuY29tL21lcm1haWQtanMvbWVybWFpZC9yZWxlYXNlcy90YWcvdjExLjAuMCkgZm9yIG1vcmUgZGV0YWlscy4gVGhpcyBkaWFncmFtIHdpbGwgYmUgcmVuZGVyZWQgdXNpbmcgYGRhZ3JlYCBsYXlvdXQgYXMgYSBmYWxsYmFjay4iKSxoLmRpcmVjdGlvbj1kLGgubm9kZVNwYWNpbmc9YT8ubm9kZVNwYWNpbmd8fDUwLGgucmFua1NwYWNpbmc9YT8ucmFua1NwYWNpbmd8fDUwLGgubWFya2Vycz1bInBvaW50IiwiY2lyY2xlIiwiY3Jvc3MiXSxoLmRpYWdyYW1JZD1lLFkuZGVidWcoIlJFRjE6IixoKSxhd2FpdCBRbShoLGYpO2xldCBwPWguY29uZmlnLmZsb3djaGFydD8uZGlhZ3JhbVBhZGRpbmc/Pzg7VXQuaW5zZXJ0VGl0bGUoZiwiZmxvd2NoYXJ0VGl0bGVUZXh0IixhPy50aXRsZVRvcE1hcmdpbnx8MCxuLmRiLmdldERpYWdyYW1UaXRsZSgpKSxabShmLHAsImZsb3djaGFydCIsYT8udXNlTWF4V2lkdGh8fCExKTtmb3IobGV0IG0gb2YgaC5ub2Rlcyl7bGV0IGc9VmUoYCMke2V9IFtpZD0iJHttLmlkfSJdYCk7aWYoIWd8fCFtLmxpbmspY29udGludWU7bGV0IHk9dS5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYSIpO3kuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2xhc3MiLG0uY3NzQ2xhc3NlcykseS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWwiLCJub29wZW5lciIpLGk9PT0ic2FuZGJveCI/eS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0YXJnZXQiLCJfdG9wIik6bS5saW5rVGFyZ2V0JiZ5LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRhcmdldCIsbS5saW5rVGFyZ2V0KTtsZXQgdj1nLmluc2VydChmdW5jdGlvbigpe3JldHVybiB5fSwiOmZpcnN0LWNoaWxkIikseD1nLnNlbGVjdCgiLmxhYmVsLWNvbnRhaW5lciIpO3gmJnYuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIHgubm9kZSgpfSk7bGV0IGI9Zy5zZWxlY3QoIi5sYWJlbCIpO2ImJnYuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIGIubm9kZSgpfSl9fSwiZHJhdyIpLEdpZT17Z2V0Q2xhc3NlczpGT2UsZHJhdzp6T2V9fSk7dmFyIExELFZpZSxVaWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMRD1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oa2ksQXQsUHQsd3Qpe2ZvcihQdD1QdHx8e30sd3Q9a2kubGVuZ3RoO3d0LS07UHRba2lbd3RdXT1BdCk7cmV0dXJuIFB0fSwibyIpLGU9WzEsNF0scj1bMSwzXSxuPVsxLDVdLGk9WzEsOCw5LDEwLDExLDI3LDM0LDM2LDM4LDQ0LDYwLDgzLDg0LDg1LDg2LDg3LDg4LDEwMSwxMDQsMTA1LDEwOCwxMTAsMTEzLDExNCwxMTUsMTIwLDEyMSwxMjIsMTIzXSxhPVsyLDJdLHM9WzEsMTNdLGw9WzEsMTRdLHU9WzEsMTVdLGg9WzEsMTZdLGY9WzEsMjNdLGQ9WzEsMjVdLHA9WzEsMjZdLG09WzEsMjddLGc9WzEsNDldLHk9WzEsNDhdLHY9WzEsMjldLHg9WzEsMzBdLGI9WzEsMzFdLHc9WzEsMzJdLF89WzEsMzNdLFQ9WzEsNDRdLEU9WzEsNDZdLEw9WzEsNDJdLFM9WzEsNDddLEE9WzEsNDNdLEk9WzEsNTBdLEQ9WzEsNDVdLGs9WzEsNTFdLFI9WzEsNTJdLEM9WzEsMzRdLE89WzEsMzVdLE49WzEsMzZdLFA9WzEsMzddLEY9WzEsNTddLEI9WzEsOCw5LDEwLDExLDI3LDMyLDM0LDM2LDM4LDQ0LDYwLDgzLDg0LDg1LDg2LDg3LDg4LDEwMSwxMDQsMTA1LDEwOCwxMTAsMTEzLDExNCwxMTUsMTIwLDEyMSwxMjIsMTIzXSxHPVsxLDYxXSx6PVsxLDYwXSxXPVsxLDYyXSxaPVs4LDksMTEsNzUsNzddLGo9WzEsNzddLG9lPVsxLDkwXSxLPVsxLDk1XSxlZT1bMSw5NF0sSj1bMSw5MV0sSD1bMSw4N10scT1bMSw5M10sUT1bMSw4OV0sYWU9WzEsOTZdLHVlPVsxLDkyXSxjZT1bMSw5N10sdGU9WzEsODhdLE5lPVs4LDksMTAsMTEsNDAsNzUsNzddLHNlPVs4LDksMTAsMTEsNDAsNDYsNzUsNzddLGtlPVs4LDksMTAsMTEsMjksNDAsNDQsNDYsNDgsNTAsNTIsNTQsNTYsNTgsNjAsNjMsNjUsNjcsNjgsNzAsNzUsNzcsODgsMTAxLDEwNCwxMDUsMTA4LDExMCwxMTMsMTE0LDExNV0sUmU9WzgsOSwxMSw0NCw2MCw3NSw3Nyw4OCwxMDEsMTA0LDEwNSwxMDgsMTEwLDExMywxMTQsMTE1XSxDZT1bNDQsNjAsODgsMTAxLDEwNCwxMDUsMTA4LDExMCwxMTMsMTE0LDExNV0sUGU9WzEsMTIzXSxJZT1bMSwxMjJdLCRlPVsxLDEzMF0seWU9WzEsMTQ0XSxYPVsxLDE0NV0sZmU9WzEsMTQ2XSxoZT1bMSwxNDddLGdlPVsxLDEzMl0sbmU9WzEsMTM0XSx2ZT1bMSwxMzhdLFU9WzEsMTM5XSxUZT1bMSwxNDBdLGllPVsxLDE0MV0sRWU9WzEsMTQyXSxBZT1bMSwxNDNdLEdlPVsxLDE0OF0sQmU9WzEsMTQ5XSxtZT1bMSwxMjhdLEhlPVsxLDEyOV0sT2U9WzEsMTM2XSxldD1bMSwxMzFdLGJ0PVsxLDEzNV0sa3Q9WzEsMTMzXSx2dD1bOCw5LDEwLDExLDI3LDMyLDM0LDM2LDM4LDQ0LDYwLDgzLDg0LDg1LDg2LDg3LDg4LDEwMSwxMDQsMTA1LDEwOCwxMTAsMTEzLDExNCwxMTUsMTIwLDEyMSwxMjIsMTIzXSxydD1bMSwxNTFdLHl0PVsxLDE1M10sVWU9WzgsOSwxMV0sdHQ9WzgsOSwxMCwxMSwxNCw0NCw2MCw4OCwxMDQsMTA1LDEwOCwxMTAsMTEzLDExNCwxMTVdLGh0PVsxLDE3M10sRXQ9WzEsMTY5XSxlcj1bMSwxNzBdLGR0PVsxLDE3NF0sSmU9WzEsMTcxXSxjdD1bMSwxNzJdLEN0PVs3NywxMTUsMTE4XSxwdD1bOCw5LDEwLDExLDEyLDE0LDI3LDI5LDMyLDQ0LDYwLDc1LDgzLDg0LDg1LDg2LDg3LDg4LDg5LDEwNCwxMDgsMTEwLDExMywxMTQsMTE1XSxCdD1bMTAsMTA1XSxUcj1bMzEsNDksNTEsNTMsNTUsNTcsNjIsNjQsNjYsNjcsNjksNzEsMTE1LDExNiwxMTddLHlyPVsxLDI0Ml0sb3I9WzEsMjQwXSxsbj1bMSwyNDRdLE9yPVsxLDIzOF0saWk9WzEsMjM5XSxtbj1bMSwyNDFdLE9uPVsxLDI0M10sX3I9WzEsMjQ1XSxtaT1bMSwyNjNdLHZzPVs4LDksMTEsMTA1XSxQbj1bOCw5LDEwLDExLDYwLDgzLDEwNCwxMDUsMTA4LDEwOSwxMTAsMTExXSxTbz17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxncmFwaENvbmZpZzo0LGRvY3VtZW50OjUsbGluZTo2LHN0YXRlbWVudDo3LFNFTUk6OCxORVdMSU5FOjksU1BBQ0U6MTAsRU9GOjExLEdSQVBIOjEyLE5PRElSOjEzLERJUjoxNCxGaXJzdFN0bXRTZXBhcmF0b3I6MTUsZW5kaW5nOjE2LGVuZFRva2VuOjE3LHNwYWNlTGlzdDoxOCxzcGFjZUxpc3ROZXdsaW5lOjE5LHZlcnRleFN0YXRlbWVudDoyMCxzZXBhcmF0b3I6MjEsc3R5bGVTdGF0ZW1lbnQ6MjIsbGlua1N0eWxlU3RhdGVtZW50OjIzLGNsYXNzRGVmU3RhdGVtZW50OjI0LGNsYXNzU3RhdGVtZW50OjI1LGNsaWNrU3RhdGVtZW50OjI2LHN1YmdyYXBoOjI3LHRleHROb1RhZ3M6MjgsU1FTOjI5LHRleHQ6MzAsU1FFOjMxLGVuZDozMixkaXJlY3Rpb246MzMsYWNjX3RpdGxlOjM0LGFjY190aXRsZV92YWx1ZTozNSxhY2NfZGVzY3I6MzYsYWNjX2Rlc2NyX3ZhbHVlOjM3LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6Mzgsc2hhcGVEYXRhOjM5LFNIQVBFX0RBVEE6NDAsbGluazo0MSxub2RlOjQyLHN0eWxlZFZlcnRleDo0MyxBTVA6NDQsdmVydGV4OjQ1LFNUWUxFX1NFUEFSQVRPUjo0NixpZFN0cmluZzo0NyxET1VCTEVDSVJDTEVTVEFSVDo0OCxET1VCTEVDSVJDTEVFTkQ6NDksUFM6NTAsUEU6NTEsIigtIjo1MiwiLSkiOjUzLFNUQURJVU1TVEFSVDo1NCxTVEFESVVNRU5EOjU1LFNVQlJPVVRJTkVTVEFSVDo1NixTVUJST1VUSU5FRU5EOjU3LFZFUlRFWF9XSVRIX1BST1BTX1NUQVJUOjU4LCJOT0RFX1NUUklOR1tmaWVsZF0iOjU5LENPTE9OOjYwLCJOT0RFX1NUUklOR1t2YWx1ZV0iOjYxLFBJUEU6NjIsQ1lMSU5ERVJTVEFSVDo2MyxDWUxJTkRFUkVORDo2NCxESUFNT05EX1NUQVJUOjY1LERJQU1PTkRfU1RPUDo2NixUQUdFTkQ6NjcsVFJBUFNUQVJUOjY4LFRSQVBFTkQ6NjksSU5WVFJBUFNUQVJUOjcwLElOVlRSQVBFTkQ6NzEsbGlua1N0YXRlbWVudDo3MixhcnJvd1RleHQ6NzMsVEVTVFNUUjo3NCxTVEFSVF9MSU5LOjc1LGVkZ2VUZXh0Ojc2LExJTks6NzcsZWRnZVRleHRUb2tlbjo3OCxTVFI6NzksTURfU1RSOjgwLHRleHRUb2tlbjo4MSxrZXl3b3Jkczo4MixTVFlMRTo4MyxMSU5LU1RZTEU6ODQsQ0xBU1NERUY6ODUsQ0xBU1M6ODYsQ0xJQ0s6ODcsRE9XTjo4OCxVUDo4OSx0ZXh0Tm9UYWdzVG9rZW46OTAsc3R5bGVzT3B0OjkxLCJpZFN0cmluZ1t2ZXJ0ZXhdIjo5MiwiaWRTdHJpbmdbY2xhc3NdIjo5MyxDQUxMQkFDS05BTUU6OTQsQ0FMTEJBQ0tBUkdTOjk1LEhSRUY6OTYsTElOS19UQVJHRVQ6OTcsIlNUUltsaW5rXSI6OTgsIlNUUlt0b29sdGlwXSI6OTksYWxwaGFOdW06MTAwLERFRkFVTFQ6MTAxLG51bUxpc3Q6MTAyLElOVEVSUE9MQVRFOjEwMyxOVU06MTA0LENPTU1BOjEwNSxzdHlsZToxMDYsc3R5bGVDb21wb25lbnQ6MTA3LE5PREVfU1RSSU5HOjEwOCxVTklUOjEwOSxCUktUOjExMCxQQ1Q6MTExLGlkU3RyaW5nVG9rZW46MTEyLE1JTlVTOjExMyxNVUxUOjExNCxVTklDT0RFX1RFWFQ6MTE1LFRFWFQ6MTE2LFRBR1NUQVJUOjExNyxFREdFX1RFWFQ6MTE4LGFscGhhTnVtVG9rZW46MTE5LGRpcmVjdGlvbl90YjoxMjAsZGlyZWN0aW9uX2J0OjEyMSxkaXJlY3Rpb25fcmw6MTIyLGRpcmVjdGlvbl9scjoxMjMsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDg6IlNFTUkiLDk6Ik5FV0xJTkUiLDEwOiJTUEFDRSIsMTE6IkVPRiIsMTI6IkdSQVBIIiwxMzoiTk9ESVIiLDE0OiJESVIiLDI3OiJzdWJncmFwaCIsMjk6IlNRUyIsMzE6IlNRRSIsMzI6ImVuZCIsMzQ6ImFjY190aXRsZSIsMzU6ImFjY190aXRsZV92YWx1ZSIsMzY6ImFjY19kZXNjciIsMzc6ImFjY19kZXNjcl92YWx1ZSIsMzg6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDQwOiJTSEFQRV9EQVRBIiw0NDoiQU1QIiw0NjoiU1RZTEVfU0VQQVJBVE9SIiw0ODoiRE9VQkxFQ0lSQ0xFU1RBUlQiLDQ5OiJET1VCTEVDSVJDTEVFTkQiLDUwOiJQUyIsNTE6IlBFIiw1MjoiKC0iLDUzOiItKSIsNTQ6IlNUQURJVU1TVEFSVCIsNTU6IlNUQURJVU1FTkQiLDU2OiJTVUJST1VUSU5FU1RBUlQiLDU3OiJTVUJST1VUSU5FRU5EIiw1ODoiVkVSVEVYX1dJVEhfUFJPUFNfU1RBUlQiLDU5OiJOT0RFX1NUUklOR1tmaWVsZF0iLDYwOiJDT0xPTiIsNjE6Ik5PREVfU1RSSU5HW3ZhbHVlXSIsNjI6IlBJUEUiLDYzOiJDWUxJTkRFUlNUQVJUIiw2NDoiQ1lMSU5ERVJFTkQiLDY1OiJESUFNT05EX1NUQVJUIiw2NjoiRElBTU9ORF9TVE9QIiw2NzoiVEFHRU5EIiw2ODoiVFJBUFNUQVJUIiw2OToiVFJBUEVORCIsNzA6IklOVlRSQVBTVEFSVCIsNzE6IklOVlRSQVBFTkQiLDc0OiJURVNUU1RSIiw3NToiU1RBUlRfTElOSyIsNzc6IkxJTksiLDc5OiJTVFIiLDgwOiJNRF9TVFIiLDgzOiJTVFlMRSIsODQ6IkxJTktTVFlMRSIsODU6IkNMQVNTREVGIiw4NjoiQ0xBU1MiLDg3OiJDTElDSyIsODg6IkRPV04iLDg5OiJVUCIsOTI6ImlkU3RyaW5nW3ZlcnRleF0iLDkzOiJpZFN0cmluZ1tjbGFzc10iLDk0OiJDQUxMQkFDS05BTUUiLDk1OiJDQUxMQkFDS0FSR1MiLDk2OiJIUkVGIiw5NzoiTElOS19UQVJHRVQiLDk4OiJTVFJbbGlua10iLDk5OiJTVFJbdG9vbHRpcF0iLDEwMToiREVGQVVMVCIsMTAzOiJJTlRFUlBPTEFURSIsMTA0OiJOVU0iLDEwNToiQ09NTUEiLDEwODoiTk9ERV9TVFJJTkciLDEwOToiVU5JVCIsMTEwOiJCUktUIiwxMTE6IlBDVCIsMTEzOiJNSU5VUyIsMTE0OiJNVUxUIiwxMTU6IlVOSUNPREVfVEVYVCIsMTE2OiJURVhUIiwxMTc6IlRBR1NUQVJUIiwxMTg6IkVER0VfVEVYVCIsMTIwOiJkaXJlY3Rpb25fdGIiLDEyMToiZGlyZWN0aW9uX2J0IiwxMjI6ImRpcmVjdGlvbl9ybCIsMTIzOiJkaXJlY3Rpb25fbHIifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzUsMF0sWzUsMl0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsM10sWzE2LDJdLFsxNiwxXSxbMTcsMV0sWzE3LDFdLFsxNywxXSxbMTUsMV0sWzE1LDFdLFsxNSwyXSxbMTksMl0sWzE5LDJdLFsxOSwxXSxbMTksMV0sWzE4LDJdLFsxOCwxXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNyw5XSxbNyw2XSxbNyw0XSxbNywxXSxbNywyXSxbNywyXSxbNywxXSxbMjEsMV0sWzIxLDFdLFsyMSwxXSxbMzksMl0sWzM5LDFdLFsyMCw0XSxbMjAsM10sWzIwLDRdLFsyMCwyXSxbMjAsMl0sWzIwLDFdLFs0MiwxXSxbNDIsNl0sWzQyLDVdLFs0MywxXSxbNDMsM10sWzQ1LDRdLFs0NSw0XSxbNDUsNl0sWzQ1LDRdLFs0NSw0XSxbNDUsNF0sWzQ1LDhdLFs0NSw0XSxbNDUsNF0sWzQ1LDRdLFs0NSw2XSxbNDUsNF0sWzQ1LDRdLFs0NSw0XSxbNDUsNF0sWzQ1LDRdLFs0NSwxXSxbNDEsMl0sWzQxLDNdLFs0MSwzXSxbNDEsMV0sWzQxLDNdLFs3NiwxXSxbNzYsMl0sWzc2LDFdLFs3NiwxXSxbNzIsMV0sWzczLDNdLFszMCwxXSxbMzAsMl0sWzMwLDFdLFszMCwxXSxbODIsMV0sWzgyLDFdLFs4MiwxXSxbODIsMV0sWzgyLDFdLFs4MiwxXSxbODIsMV0sWzgyLDFdLFs4MiwxXSxbODIsMV0sWzgyLDFdLFsyOCwxXSxbMjgsMl0sWzI4LDFdLFsyOCwxXSxbMjQsNV0sWzI1LDVdLFsyNiwyXSxbMjYsNF0sWzI2LDNdLFsyNiw1XSxbMjYsM10sWzI2LDVdLFsyNiw1XSxbMjYsN10sWzI2LDJdLFsyNiw0XSxbMjYsMl0sWzI2LDRdLFsyNiw0XSxbMjYsNl0sWzIyLDVdLFsyMyw1XSxbMjMsNV0sWzIzLDldLFsyMyw5XSxbMjMsN10sWzIzLDddLFsxMDIsMV0sWzEwMiwzXSxbOTEsMV0sWzkxLDNdLFsxMDYsMV0sWzEwNiwyXSxbMTA3LDFdLFsxMDcsMV0sWzEwNywxXSxbMTA3LDFdLFsxMDcsMV0sWzEwNywxXSxbMTA3LDFdLFsxMDcsMV0sWzExMiwxXSxbMTEyLDFdLFsxMTIsMV0sWzExMiwxXSxbMTEyLDFdLFsxMTIsMV0sWzExMiwxXSxbMTEyLDFdLFsxMTIsMV0sWzExMiwxXSxbMTEyLDFdLFs4MSwxXSxbODEsMV0sWzgxLDFdLFs4MSwxXSxbOTAsMV0sWzkwLDFdLFs5MCwxXSxbOTAsMV0sWzkwLDFdLFs5MCwxXSxbOTAsMV0sWzkwLDFdLFs5MCwxXSxbOTAsMV0sWzkwLDFdLFs3OCwxXSxbNzgsMV0sWzExOSwxXSxbMTE5LDFdLFsxMTksMV0sWzExOSwxXSxbMTE5LDFdLFsxMTksMV0sWzExOSwxXSxbMTE5LDFdLFsxMTksMV0sWzExOSwxXSxbMTE5LDFdLFs0NywxXSxbNDcsMl0sWzEwMCwxXSxbMTAwLDJdLFszMywxXSxbMzMsMV0sWzMzLDFdLFszMywxXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKEF0LFB0LHd0LFdlLEZ0LGRlLGduKXt2YXIgeGU9ZGUubGVuZ3RoLTE7c3dpdGNoKEZ0KXtjYXNlIDI6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMzooIUFycmF5LmlzQXJyYXkoZGVbeGVdKXx8ZGVbeGVdLmxlbmd0aD4wKSYmZGVbeGUtMV0ucHVzaChkZVt4ZV0pLHRoaXMuJD1kZVt4ZS0xXTticmVhaztjYXNlIDQ6Y2FzZSAxODE6dGhpcy4kPWRlW3hlXTticmVhaztjYXNlIDExOldlLnNldERpcmVjdGlvbigiVEIiKSx0aGlzLiQ9IlRCIjticmVhaztjYXNlIDEyOldlLnNldERpcmVjdGlvbihkZVt4ZS0xXSksdGhpcy4kPWRlW3hlLTFdO2JyZWFrO2Nhc2UgMjc6dGhpcy4kPWRlW3hlLTFdLm5vZGVzO2JyZWFrO2Nhc2UgMjg6Y2FzZSAyOTpjYXNlIDMwOmNhc2UgMzE6Y2FzZSAzMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9V2UuYWRkU3ViR3JhcGgoZGVbeGUtNl0sZGVbeGUtMV0sZGVbeGUtNF0pO2JyZWFrO2Nhc2UgMzQ6dGhpcy4kPVdlLmFkZFN1YkdyYXBoKGRlW3hlLTNdLGRlW3hlLTFdLGRlW3hlLTNdKTticmVhaztjYXNlIDM1OnRoaXMuJD1XZS5hZGRTdWJHcmFwaCh2b2lkIDAsZGVbeGUtMV0sdm9pZCAwKTticmVhaztjYXNlIDM3OnRoaXMuJD1kZVt4ZV0udHJpbSgpLFdlLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAzODpjYXNlIDM5OnRoaXMuJD1kZVt4ZV0udHJpbSgpLFdlLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSA0Mzp0aGlzLiQ9ZGVbeGUtMV0rZGVbeGVdO2JyZWFrO2Nhc2UgNDQ6dGhpcy4kPWRlW3hlXTticmVhaztjYXNlIDQ1OldlLmFkZFZlcnRleChkZVt4ZS0xXVswXSx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCxkZVt4ZV0pLFdlLmFkZExpbmsoZGVbeGUtM10uc3RtdCxkZVt4ZS0xXSxkZVt4ZS0yXSksdGhpcy4kPXtzdG10OmRlW3hlLTFdLG5vZGVzOmRlW3hlLTFdLmNvbmNhdChkZVt4ZS0zXS5ub2Rlcyl9O2JyZWFrO2Nhc2UgNDY6V2UuYWRkTGluayhkZVt4ZS0yXS5zdG10LGRlW3hlXSxkZVt4ZS0xXSksdGhpcy4kPXtzdG10OmRlW3hlXSxub2RlczpkZVt4ZV0uY29uY2F0KGRlW3hlLTJdLm5vZGVzKX07YnJlYWs7Y2FzZSA0NzpXZS5hZGRMaW5rKGRlW3hlLTNdLnN0bXQsZGVbeGUtMV0sZGVbeGUtMl0pLHRoaXMuJD17c3RtdDpkZVt4ZS0xXSxub2RlczpkZVt4ZS0xXS5jb25jYXQoZGVbeGUtM10ubm9kZXMpfTticmVhaztjYXNlIDQ4OnRoaXMuJD17c3RtdDpkZVt4ZS0xXSxub2RlczpkZVt4ZS0xXX07YnJlYWs7Y2FzZSA0OTpXZS5hZGRWZXJ0ZXgoZGVbeGUtMV1bMF0sdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsZGVbeGVdKSx0aGlzLiQ9e3N0bXQ6ZGVbeGUtMV0sbm9kZXM6ZGVbeGUtMV0sc2hhcGVEYXRhOmRlW3hlXX07YnJlYWs7Y2FzZSA1MDp0aGlzLiQ9e3N0bXQ6ZGVbeGVdLG5vZGVzOmRlW3hlXX07YnJlYWs7Y2FzZSA1MTp0aGlzLiQ9W2RlW3hlXV07YnJlYWs7Y2FzZSA1MjpXZS5hZGRWZXJ0ZXgoZGVbeGUtNV1bMF0sdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsZGVbeGUtNF0pLHRoaXMuJD1kZVt4ZS01XS5jb25jYXQoZGVbeGVdKTticmVhaztjYXNlIDUzOnRoaXMuJD1kZVt4ZS00XS5jb25jYXQoZGVbeGVdKTticmVhaztjYXNlIDU0OnRoaXMuJD1kZVt4ZV07YnJlYWs7Y2FzZSA1NTp0aGlzLiQ9ZGVbeGUtMl0sV2Uuc2V0Q2xhc3MoZGVbeGUtMl0sZGVbeGVdKTticmVhaztjYXNlIDU2OnRoaXMuJD1kZVt4ZS0zXSxXZS5hZGRWZXJ0ZXgoZGVbeGUtM10sZGVbeGUtMV0sInNxdWFyZSIpO2JyZWFrO2Nhc2UgNTc6dGhpcy4kPWRlW3hlLTNdLFdlLmFkZFZlcnRleChkZVt4ZS0zXSxkZVt4ZS0xXSwiZG91YmxlY2lyY2xlIik7YnJlYWs7Y2FzZSA1ODp0aGlzLiQ9ZGVbeGUtNV0sV2UuYWRkVmVydGV4KGRlW3hlLTVdLGRlW3hlLTJdLCJjaXJjbGUiKTticmVhaztjYXNlIDU5OnRoaXMuJD1kZVt4ZS0zXSxXZS5hZGRWZXJ0ZXgoZGVbeGUtM10sZGVbeGUtMV0sImVsbGlwc2UiKTticmVhaztjYXNlIDYwOnRoaXMuJD1kZVt4ZS0zXSxXZS5hZGRWZXJ0ZXgoZGVbeGUtM10sZGVbeGUtMV0sInN0YWRpdW0iKTticmVhaztjYXNlIDYxOnRoaXMuJD1kZVt4ZS0zXSxXZS5hZGRWZXJ0ZXgoZGVbeGUtM10sZGVbeGUtMV0sInN1YnJvdXRpbmUiKTticmVhaztjYXNlIDYyOnRoaXMuJD1kZVt4ZS03XSxXZS5hZGRWZXJ0ZXgoZGVbeGUtN10sZGVbeGUtMV0sInJlY3QiLHZvaWQgMCx2b2lkIDAsdm9pZCAwLE9iamVjdC5mcm9tRW50cmllcyhbW2RlW3hlLTVdLGRlW3hlLTNdXV0pKTticmVhaztjYXNlIDYzOnRoaXMuJD1kZVt4ZS0zXSxXZS5hZGRWZXJ0ZXgoZGVbeGUtM10sZGVbeGUtMV0sImN5bGluZGVyIik7YnJlYWs7Y2FzZSA2NDp0aGlzLiQ9ZGVbeGUtM10sV2UuYWRkVmVydGV4KGRlW3hlLTNdLGRlW3hlLTFdLCJyb3VuZCIpO2JyZWFrO2Nhc2UgNjU6dGhpcy4kPWRlW3hlLTNdLFdlLmFkZFZlcnRleChkZVt4ZS0zXSxkZVt4ZS0xXSwiZGlhbW9uZCIpO2JyZWFrO2Nhc2UgNjY6dGhpcy4kPWRlW3hlLTVdLFdlLmFkZFZlcnRleChkZVt4ZS01XSxkZVt4ZS0yXSwiaGV4YWdvbiIpO2JyZWFrO2Nhc2UgNjc6dGhpcy4kPWRlW3hlLTNdLFdlLmFkZFZlcnRleChkZVt4ZS0zXSxkZVt4ZS0xXSwib2RkIik7YnJlYWs7Y2FzZSA2ODp0aGlzLiQ9ZGVbeGUtM10sV2UuYWRkVmVydGV4KGRlW3hlLTNdLGRlW3hlLTFdLCJ0cmFwZXpvaWQiKTticmVhaztjYXNlIDY5OnRoaXMuJD1kZVt4ZS0zXSxXZS5hZGRWZXJ0ZXgoZGVbeGUtM10sZGVbeGUtMV0sImludl90cmFwZXpvaWQiKTticmVhaztjYXNlIDcwOnRoaXMuJD1kZVt4ZS0zXSxXZS5hZGRWZXJ0ZXgoZGVbeGUtM10sZGVbeGUtMV0sImxlYW5fcmlnaHQiKTticmVhaztjYXNlIDcxOnRoaXMuJD1kZVt4ZS0zXSxXZS5hZGRWZXJ0ZXgoZGVbeGUtM10sZGVbeGUtMV0sImxlYW5fbGVmdCIpO2JyZWFrO2Nhc2UgNzI6dGhpcy4kPWRlW3hlXSxXZS5hZGRWZXJ0ZXgoZGVbeGVdKTticmVhaztjYXNlIDczOmRlW3hlLTFdLnRleHQ9ZGVbeGVdLHRoaXMuJD1kZVt4ZS0xXTticmVhaztjYXNlIDc0OmNhc2UgNzU6ZGVbeGUtMl0udGV4dD1kZVt4ZS0xXSx0aGlzLiQ9ZGVbeGUtMl07YnJlYWs7Y2FzZSA3Njp0aGlzLiQ9ZGVbeGVdO2JyZWFrO2Nhc2UgNzc6dmFyIGphPVdlLmRlc3RydWN0TGluayhkZVt4ZV0sZGVbeGUtMl0pO3RoaXMuJD17dHlwZTpqYS50eXBlLHN0cm9rZTpqYS5zdHJva2UsbGVuZ3RoOmphLmxlbmd0aCx0ZXh0OmRlW3hlLTFdfTticmVhaztjYXNlIDc4OnRoaXMuJD17dGV4dDpkZVt4ZV0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgNzk6dGhpcy4kPXt0ZXh0OmRlW3hlLTFdLnRleHQrIiIrZGVbeGVdLHR5cGU6ZGVbeGUtMV0udHlwZX07YnJlYWs7Y2FzZSA4MDp0aGlzLiQ9e3RleHQ6ZGVbeGVdLHR5cGU6InN0cmluZyJ9O2JyZWFrO2Nhc2UgODE6dGhpcy4kPXt0ZXh0OmRlW3hlXSx0eXBlOiJtYXJrZG93biJ9O2JyZWFrO2Nhc2UgODI6dmFyIGphPVdlLmRlc3RydWN0TGluayhkZVt4ZV0pO3RoaXMuJD17dHlwZTpqYS50eXBlLHN0cm9rZTpqYS5zdHJva2UsbGVuZ3RoOmphLmxlbmd0aH07YnJlYWs7Y2FzZSA4Mzp0aGlzLiQ9ZGVbeGUtMV07YnJlYWs7Y2FzZSA4NDp0aGlzLiQ9e3RleHQ6ZGVbeGVdLHR5cGU6InRleHQifTticmVhaztjYXNlIDg1OnRoaXMuJD17dGV4dDpkZVt4ZS0xXS50ZXh0KyIiK2RlW3hlXSx0eXBlOmRlW3hlLTFdLnR5cGV9O2JyZWFrO2Nhc2UgODY6dGhpcy4kPXt0ZXh0OmRlW3hlXSx0eXBlOiJzdHJpbmcifTticmVhaztjYXNlIDg3OmNhc2UgMTAyOnRoaXMuJD17dGV4dDpkZVt4ZV0sdHlwZToibWFya2Rvd24ifTticmVhaztjYXNlIDk5OnRoaXMuJD17dGV4dDpkZVt4ZV0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgMTAwOnRoaXMuJD17dGV4dDpkZVt4ZS0xXS50ZXh0KyIiK2RlW3hlXSx0eXBlOmRlW3hlLTFdLnR5cGV9O2JyZWFrO2Nhc2UgMTAxOnRoaXMuJD17dGV4dDpkZVt4ZV0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgMTAzOnRoaXMuJD1kZVt4ZS00XSxXZS5hZGRDbGFzcyhkZVt4ZS0yXSxkZVt4ZV0pO2JyZWFrO2Nhc2UgMTA0OnRoaXMuJD1kZVt4ZS00XSxXZS5zZXRDbGFzcyhkZVt4ZS0yXSxkZVt4ZV0pO2JyZWFrO2Nhc2UgMTA1OmNhc2UgMTEzOnRoaXMuJD1kZVt4ZS0xXSxXZS5zZXRDbGlja0V2ZW50KGRlW3hlLTFdLGRlW3hlXSk7YnJlYWs7Y2FzZSAxMDY6Y2FzZSAxMTQ6dGhpcy4kPWRlW3hlLTNdLFdlLnNldENsaWNrRXZlbnQoZGVbeGUtM10sZGVbeGUtMl0pLFdlLnNldFRvb2x0aXAoZGVbeGUtM10sZGVbeGVdKTticmVhaztjYXNlIDEwNzp0aGlzLiQ9ZGVbeGUtMl0sV2Uuc2V0Q2xpY2tFdmVudChkZVt4ZS0yXSxkZVt4ZS0xXSxkZVt4ZV0pO2JyZWFrO2Nhc2UgMTA4OnRoaXMuJD1kZVt4ZS00XSxXZS5zZXRDbGlja0V2ZW50KGRlW3hlLTRdLGRlW3hlLTNdLGRlW3hlLTJdKSxXZS5zZXRUb29sdGlwKGRlW3hlLTRdLGRlW3hlXSk7YnJlYWs7Y2FzZSAxMDk6dGhpcy4kPWRlW3hlLTJdLFdlLnNldExpbmsoZGVbeGUtMl0sZGVbeGVdKTticmVhaztjYXNlIDExMDp0aGlzLiQ9ZGVbeGUtNF0sV2Uuc2V0TGluayhkZVt4ZS00XSxkZVt4ZS0yXSksV2Uuc2V0VG9vbHRpcChkZVt4ZS00XSxkZVt4ZV0pO2JyZWFrO2Nhc2UgMTExOnRoaXMuJD1kZVt4ZS00XSxXZS5zZXRMaW5rKGRlW3hlLTRdLGRlW3hlLTJdLGRlW3hlXSk7YnJlYWs7Y2FzZSAxMTI6dGhpcy4kPWRlW3hlLTZdLFdlLnNldExpbmsoZGVbeGUtNl0sZGVbeGUtNF0sZGVbeGVdKSxXZS5zZXRUb29sdGlwKGRlW3hlLTZdLGRlW3hlLTJdKTticmVhaztjYXNlIDExNTp0aGlzLiQ9ZGVbeGUtMV0sV2Uuc2V0TGluayhkZVt4ZS0xXSxkZVt4ZV0pO2JyZWFrO2Nhc2UgMTE2OnRoaXMuJD1kZVt4ZS0zXSxXZS5zZXRMaW5rKGRlW3hlLTNdLGRlW3hlLTJdKSxXZS5zZXRUb29sdGlwKGRlW3hlLTNdLGRlW3hlXSk7YnJlYWs7Y2FzZSAxMTc6dGhpcy4kPWRlW3hlLTNdLFdlLnNldExpbmsoZGVbeGUtM10sZGVbeGUtMl0sZGVbeGVdKTticmVhaztjYXNlIDExODp0aGlzLiQ9ZGVbeGUtNV0sV2Uuc2V0TGluayhkZVt4ZS01XSxkZVt4ZS00XSxkZVt4ZV0pLFdlLnNldFRvb2x0aXAoZGVbeGUtNV0sZGVbeGUtMl0pO2JyZWFrO2Nhc2UgMTE5OnRoaXMuJD1kZVt4ZS00XSxXZS5hZGRWZXJ0ZXgoZGVbeGUtMl0sdm9pZCAwLHZvaWQgMCxkZVt4ZV0pO2JyZWFrO2Nhc2UgMTIwOnRoaXMuJD1kZVt4ZS00XSxXZS51cGRhdGVMaW5rKFtkZVt4ZS0yXV0sZGVbeGVdKTticmVhaztjYXNlIDEyMTp0aGlzLiQ9ZGVbeGUtNF0sV2UudXBkYXRlTGluayhkZVt4ZS0yXSxkZVt4ZV0pO2JyZWFrO2Nhc2UgMTIyOnRoaXMuJD1kZVt4ZS04XSxXZS51cGRhdGVMaW5rSW50ZXJwb2xhdGUoW2RlW3hlLTZdXSxkZVt4ZS0yXSksV2UudXBkYXRlTGluayhbZGVbeGUtNl1dLGRlW3hlXSk7YnJlYWs7Y2FzZSAxMjM6dGhpcy4kPWRlW3hlLThdLFdlLnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZShkZVt4ZS02XSxkZVt4ZS0yXSksV2UudXBkYXRlTGluayhkZVt4ZS02XSxkZVt4ZV0pO2JyZWFrO2Nhc2UgMTI0OnRoaXMuJD1kZVt4ZS02XSxXZS51cGRhdGVMaW5rSW50ZXJwb2xhdGUoW2RlW3hlLTRdXSxkZVt4ZV0pO2JyZWFrO2Nhc2UgMTI1OnRoaXMuJD1kZVt4ZS02XSxXZS51cGRhdGVMaW5rSW50ZXJwb2xhdGUoZGVbeGUtNF0sZGVbeGVdKTticmVhaztjYXNlIDEyNjpjYXNlIDEyODp0aGlzLiQ9W2RlW3hlXV07YnJlYWs7Y2FzZSAxMjc6Y2FzZSAxMjk6ZGVbeGUtMl0ucHVzaChkZVt4ZV0pLHRoaXMuJD1kZVt4ZS0yXTticmVhaztjYXNlIDEzMTp0aGlzLiQ9ZGVbeGUtMV0rZGVbeGVdO2JyZWFrO2Nhc2UgMTc5OnRoaXMuJD1kZVt4ZV07YnJlYWs7Y2FzZSAxODA6dGhpcy4kPWRlW3hlLTFdKyIiK2RlW3hlXTticmVhaztjYXNlIDE4Mjp0aGlzLiQ9ZGVbeGUtMV0rIiIrZGVbeGVdO2JyZWFrO2Nhc2UgMTgzOnRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiVEIifTticmVhaztjYXNlIDE4NDp0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IkJUIn07YnJlYWs7Y2FzZSAxODU6dGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJSTCJ9O2JyZWFrO2Nhc2UgMTg2OnRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiTFIifTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OjIsOTplLDEwOnIsMTI6bn0sezE6WzNdfSx0KGksYSx7NTo2fSksezQ6Nyw5OmUsMTA6ciwxMjpufSx7NDo4LDk6ZSwxMDpyLDEyOm59LHsxMzpbMSw5XSwxNDpbMSwxMF19LHsxOlsyLDFdLDY6MTEsNzoxMiw4OnMsOTpsLDEwOnUsMTE6aCwyMDoxNywyMjoxOCwyMzoxOSwyNDoyMCwyNToyMSwyNjoyMiwyNzpmLDMzOjI0LDM0OmQsMzY6cCwzODptLDQyOjI4LDQzOjM4LDQ0OmcsNDU6MzksNDc6NDAsNjA6eSw4Mzp2LDg0OngsODU6Yiw4Njp3LDg3Ol8sODg6VCwxMDE6RSwxMDQ6TCwxMDU6UywxMDg6QSwxMTA6SSwxMTI6NDEsMTEzOkQsMTE0OmssMTE1OlIsMTIwOkMsMTIxOk8sMTIyOk4sMTIzOlB9LHQoaSxbMiw5XSksdChpLFsyLDEwXSksdChpLFsyLDExXSksezg6WzEsNTRdLDk6WzEsNTVdLDEwOkYsMTU6NTMsMTg6NTZ9LHQoQixbMiwzXSksdChCLFsyLDRdKSx0KEIsWzIsNV0pLHQoQixbMiw2XSksdChCLFsyLDddKSx0KEIsWzIsOF0pLHs4OkcsOTp6LDExOlcsMjE6NTgsNDE6NTksNzI6NjMsNzU6WzEsNjRdLDc3OlsxLDY1XX0sezg6Ryw5OnosMTE6VywyMTo2Nn0sezg6Ryw5OnosMTE6VywyMTo2N30sezg6Ryw5OnosMTE6VywyMTo2OH0sezg6Ryw5OnosMTE6VywyMTo2OX0sezg6Ryw5OnosMTE6VywyMTo3MH0sezg6Ryw5OnosMTA6WzEsNzFdLDExOlcsMjE6NzJ9LHQoQixbMiwzNl0pLHszNTpbMSw3M119LHszNzpbMSw3NF19LHQoQixbMiwzOV0pLHQoWixbMiw1MF0sezE4Ojc1LDM5Ojc2LDEwOkYsNDA6an0pLHsxMDpbMSw3OF19LHsxMDpbMSw3OV19LHsxMDpbMSw4MF19LHsxMDpbMSw4MV19LHsxNDpvZSw0NDpLLDYwOmVlLDc5OlsxLDg1XSw4ODpKLDk0OlsxLDgyXSw5NjpbMSw4M10sMTAwOjg0LDEwNDpILDEwNTpxLDEwODpRLDExMDphZSwxMTM6dWUsMTE0OmNlLDExNTp0ZSwxMTk6ODZ9LHQoQixbMiwxODNdKSx0KEIsWzIsMTg0XSksdChCLFsyLDE4NV0pLHQoQixbMiwxODZdKSx0KE5lLFsyLDUxXSksdChOZSxbMiw1NF0sezQ2OlsxLDk4XX0pLHQoc2UsWzIsNzJdLHsxMTI6MTExLDI5OlsxLDk5XSw0NDpnLDQ4OlsxLDEwMF0sNTA6WzEsMTAxXSw1MjpbMSwxMDJdLDU0OlsxLDEwM10sNTY6WzEsMTA0XSw1ODpbMSwxMDVdLDYwOnksNjM6WzEsMTA2XSw2NTpbMSwxMDddLDY3OlsxLDEwOF0sNjg6WzEsMTA5XSw3MDpbMSwxMTBdLDg4OlQsMTAxOkUsMTA0OkwsMTA1OlMsMTA4OkEsMTEwOkksMTEzOkQsMTE0OmssMTE1OlJ9KSx0KGtlLFsyLDE3OV0pLHQoa2UsWzIsMTQwXSksdChrZSxbMiwxNDFdKSx0KGtlLFsyLDE0Ml0pLHQoa2UsWzIsMTQzXSksdChrZSxbMiwxNDRdKSx0KGtlLFsyLDE0NV0pLHQoa2UsWzIsMTQ2XSksdChrZSxbMiwxNDddKSx0KGtlLFsyLDE0OF0pLHQoa2UsWzIsMTQ5XSksdChrZSxbMiwxNTBdKSx0KGksWzIsMTJdKSx0KGksWzIsMThdKSx0KGksWzIsMTldKSx7OTpbMSwxMTJdfSx0KFJlLFsyLDI2XSx7MTg6MTEzLDEwOkZ9KSx0KEIsWzIsMjddKSx7NDI6MTE0LDQzOjM4LDQ0OmcsNDU6MzksNDc6NDAsNjA6eSw4ODpULDEwMTpFLDEwNDpMLDEwNTpTLDEwODpBLDExMDpJLDExMjo0MSwxMTM6RCwxMTQ6aywxMTU6Un0sdChCLFsyLDQwXSksdChCLFsyLDQxXSksdChCLFsyLDQyXSksdChDZSxbMiw3Nl0sezczOjExNSw2MjpbMSwxMTddLDc0OlsxLDExNl19KSx7NzY6MTE4LDc4OjExOSw3OTpbMSwxMjBdLDgwOlsxLDEyMV0sMTE1OlBlLDExODpJZX0sdChbNDQsNjAsNjIsNzQsODgsMTAxLDEwNCwxMDUsMTA4LDExMCwxMTMsMTE0LDExNV0sWzIsODJdKSx0KEIsWzIsMjhdKSx0KEIsWzIsMjldKSx0KEIsWzIsMzBdKSx0KEIsWzIsMzFdKSx0KEIsWzIsMzJdKSx7MTA6JGUsMTI6eWUsMTQ6WCwyNzpmZSwyODoxMjQsMzI6aGUsNDQ6Z2UsNjA6bmUsNzU6dmUsNzk6WzEsMTI2XSw4MDpbMSwxMjddLDgyOjEzNyw4MzpVLDg0OlRlLDg1OmllLDg2OkVlLDg3OkFlLDg4OkdlLDg5OkJlLDkwOjEyNSwxMDQ6bWUsMTA4OkhlLDExMDpPZSwxMTM6ZXQsMTE0OmJ0LDExNTprdH0sdCh2dCxhLHs1OjE1MH0pLHQoQixbMiwzN10pLHQoQixbMiwzOF0pLHQoWixbMiw0OF0sezQ0OnJ0fSksdChaLFsyLDQ5XSx7MTg6MTUyLDEwOkYsNDA6eXR9KSx0KE5lLFsyLDQ0XSksezQ0OmcsNDc6MTU0LDYwOnksODg6VCwxMDE6RSwxMDQ6TCwxMDU6UywxMDg6QSwxMTA6SSwxMTI6NDEsMTEzOkQsMTE0OmssMTE1OlJ9LHsxMDE6WzEsMTU1XSwxMDI6MTU2LDEwNDpbMSwxNTddfSx7NDQ6Zyw0NzoxNTgsNjA6eSw4ODpULDEwMTpFLDEwNDpMLDEwNTpTLDEwODpBLDExMDpJLDExMjo0MSwxMTM6RCwxMTQ6aywxMTU6Un0sezQ0OmcsNDc6MTU5LDYwOnksODg6VCwxMDE6RSwxMDQ6TCwxMDU6UywxMDg6QSwxMTA6SSwxMTI6NDEsMTEzOkQsMTE0OmssMTE1OlJ9LHQoVWUsWzIsMTA1XSx7MTA6WzEsMTYwXSw5NTpbMSwxNjFdfSksezc5OlsxLDE2Ml19LHQoVWUsWzIsMTEzXSx7MTE5OjE2NCwxMDpbMSwxNjNdLDE0Om9lLDQ0OkssNjA6ZWUsODg6SiwxMDQ6SCwxMDU6cSwxMDg6USwxMTA6YWUsMTEzOnVlLDExNDpjZSwxMTU6dGV9KSx0KFVlLFsyLDExNV0sezEwOlsxLDE2NV19KSx0KHR0LFsyLDE4MV0pLHQodHQsWzIsMTY4XSksdCh0dCxbMiwxNjldKSx0KHR0LFsyLDE3MF0pLHQodHQsWzIsMTcxXSksdCh0dCxbMiwxNzJdKSx0KHR0LFsyLDE3M10pLHQodHQsWzIsMTc0XSksdCh0dCxbMiwxNzVdKSx0KHR0LFsyLDE3Nl0pLHQodHQsWzIsMTc3XSksdCh0dCxbMiwxNzhdKSx7NDQ6Zyw0NzoxNjYsNjA6eSw4ODpULDEwMTpFLDEwNDpMLDEwNTpTLDEwODpBLDExMDpJLDExMjo0MSwxMTM6RCwxMTQ6aywxMTU6Un0sezMwOjE2Nyw2NzpodCw3OTpFdCw4MDplciw4MToxNjgsMTE1OmR0LDExNjpKZSwxMTc6Y3R9LHszMDoxNzUsNjc6aHQsNzk6RXQsODA6ZXIsODE6MTY4LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx7MzA6MTc3LDUwOlsxLDE3Nl0sNjc6aHQsNzk6RXQsODA6ZXIsODE6MTY4LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx7MzA6MTc4LDY3Omh0LDc5OkV0LDgwOmVyLDgxOjE2OCwxMTU6ZHQsMTE2OkplLDExNzpjdH0sezMwOjE3OSw2NzpodCw3OTpFdCw4MDplciw4MToxNjgsMTE1OmR0LDExNjpKZSwxMTc6Y3R9LHszMDoxODAsNjc6aHQsNzk6RXQsODA6ZXIsODE6MTY4LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx7MTA4OlsxLDE4MV19LHszMDoxODIsNjc6aHQsNzk6RXQsODA6ZXIsODE6MTY4LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx7MzA6MTgzLDY1OlsxLDE4NF0sNjc6aHQsNzk6RXQsODA6ZXIsODE6MTY4LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx7MzA6MTg1LDY3Omh0LDc5OkV0LDgwOmVyLDgxOjE2OCwxMTU6ZHQsMTE2OkplLDExNzpjdH0sezMwOjE4Niw2NzpodCw3OTpFdCw4MDplciw4MToxNjgsMTE1OmR0LDExNjpKZSwxMTc6Y3R9LHszMDoxODcsNjc6aHQsNzk6RXQsODA6ZXIsODE6MTY4LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx0KGtlLFsyLDE4MF0pLHQoaSxbMiwyMF0pLHQoUmUsWzIsMjVdKSx0KFosWzIsNDZdLHszOToxODgsMTg6MTg5LDEwOkYsNDA6an0pLHQoQ2UsWzIsNzNdLHsxMDpbMSwxOTBdfSksezEwOlsxLDE5MV19LHszMDoxOTIsNjc6aHQsNzk6RXQsODA6ZXIsODE6MTY4LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx7Nzc6WzEsMTkzXSw3ODoxOTQsMTE1OlBlLDExODpJZX0sdChDdCxbMiw3OF0pLHQoQ3QsWzIsODBdKSx0KEN0LFsyLDgxXSksdChDdCxbMiwxNjZdKSx0KEN0LFsyLDE2N10pLHs4OkcsOTp6LDEwOiRlLDExOlcsMTI6eWUsMTQ6WCwyMToxOTYsMjc6ZmUsMjk6WzEsMTk1XSwzMjpoZSw0NDpnZSw2MDpuZSw3NTp2ZSw4MjoxMzcsODM6VSw4NDpUZSw4NTppZSw4NjpFZSw4NzpBZSw4ODpHZSw4OTpCZSw5MDoxOTcsMTA0Om1lLDEwODpIZSwxMTA6T2UsMTEzOmV0LDExNDpidCwxMTU6a3R9LHQocHQsWzIsOTldKSx0KHB0LFsyLDEwMV0pLHQocHQsWzIsMTAyXSksdChwdCxbMiwxNTVdKSx0KHB0LFsyLDE1Nl0pLHQocHQsWzIsMTU3XSksdChwdCxbMiwxNThdKSx0KHB0LFsyLDE1OV0pLHQocHQsWzIsMTYwXSksdChwdCxbMiwxNjFdKSx0KHB0LFsyLDE2Ml0pLHQocHQsWzIsMTYzXSksdChwdCxbMiwxNjRdKSx0KHB0LFsyLDE2NV0pLHQocHQsWzIsODhdKSx0KHB0LFsyLDg5XSksdChwdCxbMiw5MF0pLHQocHQsWzIsOTFdKSx0KHB0LFsyLDkyXSksdChwdCxbMiw5M10pLHQocHQsWzIsOTRdKSx0KHB0LFsyLDk1XSksdChwdCxbMiw5Nl0pLHQocHQsWzIsOTddKSx0KHB0LFsyLDk4XSksezY6MTEsNzoxMiw4OnMsOTpsLDEwOnUsMTE6aCwyMDoxNywyMjoxOCwyMzoxOSwyNDoyMCwyNToyMSwyNjoyMiwyNzpmLDMyOlsxLDE5OF0sMzM6MjQsMzQ6ZCwzNjpwLDM4Om0sNDI6MjgsNDM6MzgsNDQ6Zyw0NTozOSw0Nzo0MCw2MDp5LDgzOnYsODQ6eCw4NTpiLDg2OncsODc6Xyw4ODpULDEwMTpFLDEwNDpMLDEwNTpTLDEwODpBLDExMDpJLDExMjo0MSwxMTM6RCwxMTQ6aywxMTU6UiwxMjA6QywxMjE6TywxMjI6TiwxMjM6UH0sezEwOkYsMTg6MTk5fSx7NDQ6WzEsMjAwXX0sdChOZSxbMiw0M10pLHsxMDpbMSwyMDFdLDQ0OmcsNjA6eSw4ODpULDEwMTpFLDEwNDpMLDEwNTpTLDEwODpBLDExMDpJLDExMjoxMTEsMTEzOkQsMTE0OmssMTE1OlJ9LHsxMDpbMSwyMDJdfSx7MTA6WzEsMjAzXSwxMDU6WzEsMjA0XX0sdChCdCxbMiwxMjZdKSx7MTA6WzEsMjA1XSw0NDpnLDYwOnksODg6VCwxMDE6RSwxMDQ6TCwxMDU6UywxMDg6QSwxMTA6SSwxMTI6MTExLDExMzpELDExNDprLDExNTpSfSx7MTA6WzEsMjA2XSw0NDpnLDYwOnksODg6VCwxMDE6RSwxMDQ6TCwxMDU6UywxMDg6QSwxMTA6SSwxMTI6MTExLDExMzpELDExNDprLDExNTpSfSx7Nzk6WzEsMjA3XX0sdChVZSxbMiwxMDddLHsxMDpbMSwyMDhdfSksdChVZSxbMiwxMDldLHsxMDpbMSwyMDldfSksezc5OlsxLDIxMF19LHQodHQsWzIsMTgyXSksezc5OlsxLDIxMV0sOTc6WzEsMjEyXX0sdChOZSxbMiw1NV0sezExMjoxMTEsNDQ6Zyw2MDp5LDg4OlQsMTAxOkUsMTA0OkwsMTA1OlMsMTA4OkEsMTEwOkksMTEzOkQsMTE0OmssMTE1OlJ9KSx7MzE6WzEsMjEzXSw2NzpodCw4MToyMTQsMTE1OmR0LDExNjpKZSwxMTc6Y3R9LHQoVHIsWzIsODRdKSx0KFRyLFsyLDg2XSksdChUcixbMiw4N10pLHQoVHIsWzIsMTUxXSksdChUcixbMiwxNTJdKSx0KFRyLFsyLDE1M10pLHQoVHIsWzIsMTU0XSksezQ5OlsxLDIxNV0sNjc6aHQsODE6MjE0LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx7MzA6MjE2LDY3Omh0LDc5OkV0LDgwOmVyLDgxOjE2OCwxMTU6ZHQsMTE2OkplLDExNzpjdH0sezUxOlsxLDIxN10sNjc6aHQsODE6MjE0LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx7NTM6WzEsMjE4XSw2NzpodCw4MToyMTQsMTE1OmR0LDExNjpKZSwxMTc6Y3R9LHs1NTpbMSwyMTldLDY3Omh0LDgxOjIxNCwxMTU6ZHQsMTE2OkplLDExNzpjdH0sezU3OlsxLDIyMF0sNjc6aHQsODE6MjE0LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx7NjA6WzEsMjIxXX0sezY0OlsxLDIyMl0sNjc6aHQsODE6MjE0LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx7NjY6WzEsMjIzXSw2NzpodCw4MToyMTQsMTE1OmR0LDExNjpKZSwxMTc6Y3R9LHszMDoyMjQsNjc6aHQsNzk6RXQsODA6ZXIsODE6MTY4LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx7MzE6WzEsMjI1XSw2NzpodCw4MToyMTQsMTE1OmR0LDExNjpKZSwxMTc6Y3R9LHs2NzpodCw2OTpbMSwyMjZdLDcxOlsxLDIyN10sODE6MjE0LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx7Njc6aHQsNjk6WzEsMjI5XSw3MTpbMSwyMjhdLDgxOjIxNCwxMTU6ZHQsMTE2OkplLDExNzpjdH0sdChaLFsyLDQ1XSx7MTg6MTUyLDEwOkYsNDA6eXR9KSx0KFosWzIsNDddLHs0NDpydH0pLHQoQ2UsWzIsNzVdKSx0KENlLFsyLDc0XSksezYyOlsxLDIzMF0sNjc6aHQsODE6MjE0LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx0KENlLFsyLDc3XSksdChDdCxbMiw3OV0pLHszMDoyMzEsNjc6aHQsNzk6RXQsODA6ZXIsODE6MTY4LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx0KHZ0LGEsezU6MjMyfSksdChwdCxbMiwxMDBdKSx0KEIsWzIsMzVdKSx7NDM6MjMzLDQ0OmcsNDU6MzksNDc6NDAsNjA6eSw4ODpULDEwMTpFLDEwNDpMLDEwNTpTLDEwODpBLDExMDpJLDExMjo0MSwxMTM6RCwxMTQ6aywxMTU6Un0sezEwOkYsMTg6MjM0fSx7MTA6eXIsNjA6b3IsODM6bG4sOTE6MjM1LDEwNDpPciwxMDY6MjM2LDEwNzoyMzcsMTA4OmlpLDEwOTptbiwxMTA6T24sMTExOl9yfSx7MTA6eXIsNjA6b3IsODM6bG4sOTE6MjQ2LDEwMzpbMSwyNDddLDEwNDpPciwxMDY6MjM2LDEwNzoyMzcsMTA4OmlpLDEwOTptbiwxMTA6T24sMTExOl9yfSx7MTA6eXIsNjA6b3IsODM6bG4sOTE6MjQ4LDEwMzpbMSwyNDldLDEwNDpPciwxMDY6MjM2LDEwNzoyMzcsMTA4OmlpLDEwOTptbiwxMTA6T24sMTExOl9yfSx7MTA0OlsxLDI1MF19LHsxMDp5ciw2MDpvciw4Mzpsbiw5MToyNTEsMTA0Ok9yLDEwNjoyMzYsMTA3OjIzNywxMDg6aWksMTA5Om1uLDExMDpPbiwxMTE6X3J9LHs0NDpnLDQ3OjI1Miw2MDp5LDg4OlQsMTAxOkUsMTA0OkwsMTA1OlMsMTA4OkEsMTEwOkksMTEyOjQxLDExMzpELDExNDprLDExNTpSfSx0KFVlLFsyLDEwNl0pLHs3OTpbMSwyNTNdfSx7Nzk6WzEsMjU0XSw5NzpbMSwyNTVdfSx0KFVlLFsyLDExNF0pLHQoVWUsWzIsMTE2XSx7MTA6WzEsMjU2XX0pLHQoVWUsWzIsMTE3XSksdChzZSxbMiw1Nl0pLHQoVHIsWzIsODVdKSx0KHNlLFsyLDU3XSksezUxOlsxLDI1N10sNjc6aHQsODE6MjE0LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx0KHNlLFsyLDY0XSksdChzZSxbMiw1OV0pLHQoc2UsWzIsNjBdKSx0KHNlLFsyLDYxXSksezEwODpbMSwyNThdfSx0KHNlLFsyLDYzXSksdChzZSxbMiw2NV0pLHs2NjpbMSwyNTldLDY3Omh0LDgxOjIxNCwxMTU6ZHQsMTE2OkplLDExNzpjdH0sdChzZSxbMiw2N10pLHQoc2UsWzIsNjhdKSx0KHNlLFsyLDcwXSksdChzZSxbMiw2OV0pLHQoc2UsWzIsNzFdKSx0KFsxMCw0NCw2MCw4OCwxMDEsMTA0LDEwNSwxMDgsMTEwLDExMywxMTQsMTE1XSxbMiw4M10pLHszMTpbMSwyNjBdLDY3Omh0LDgxOjIxNCwxMTU6ZHQsMTE2OkplLDExNzpjdH0sezY6MTEsNzoxMiw4OnMsOTpsLDEwOnUsMTE6aCwyMDoxNywyMjoxOCwyMzoxOSwyNDoyMCwyNToyMSwyNjoyMiwyNzpmLDMyOlsxLDI2MV0sMzM6MjQsMzQ6ZCwzNjpwLDM4Om0sNDI6MjgsNDM6MzgsNDQ6Zyw0NTozOSw0Nzo0MCw2MDp5LDgzOnYsODQ6eCw4NTpiLDg2OncsODc6Xyw4ODpULDEwMTpFLDEwNDpMLDEwNTpTLDEwODpBLDExMDpJLDExMjo0MSwxMTM6RCwxMTQ6aywxMTU6UiwxMjA6QywxMjE6TywxMjI6TiwxMjM6UH0sdChOZSxbMiw1M10pLHs0MzoyNjIsNDQ6Zyw0NTozOSw0Nzo0MCw2MDp5LDg4OlQsMTAxOkUsMTA0OkwsMTA1OlMsMTA4OkEsMTEwOkksMTEyOjQxLDExMzpELDExNDprLDExNTpSfSx0KFVlLFsyLDExOV0sezEwNTptaX0pLHQodnMsWzIsMTI4XSx7MTA3OjI2NCwxMDp5ciw2MDpvciw4MzpsbiwxMDQ6T3IsMTA4OmlpLDEwOTptbiwxMTA6T24sMTExOl9yfSksdChQbixbMiwxMzBdKSx0KFBuLFsyLDEzMl0pLHQoUG4sWzIsMTMzXSksdChQbixbMiwxMzRdKSx0KFBuLFsyLDEzNV0pLHQoUG4sWzIsMTM2XSksdChQbixbMiwxMzddKSx0KFBuLFsyLDEzOF0pLHQoUG4sWzIsMTM5XSksdChVZSxbMiwxMjBdLHsxMDU6bWl9KSx7MTA6WzEsMjY1XX0sdChVZSxbMiwxMjFdLHsxMDU6bWl9KSx7MTA6WzEsMjY2XX0sdChCdCxbMiwxMjddKSx0KFVlLFsyLDEwM10sezEwNTptaX0pLHQoVWUsWzIsMTA0XSx7MTEyOjExMSw0NDpnLDYwOnksODg6VCwxMDE6RSwxMDQ6TCwxMDU6UywxMDg6QSwxMTA6SSwxMTM6RCwxMTQ6aywxMTU6Un0pLHQoVWUsWzIsMTA4XSksdChVZSxbMiwxMTBdLHsxMDpbMSwyNjddfSksdChVZSxbMiwxMTFdKSx7OTc6WzEsMjY4XX0sezUxOlsxLDI2OV19LHs2MjpbMSwyNzBdfSx7NjY6WzEsMjcxXX0sezg6Ryw5OnosMTE6VywyMToyNzJ9LHQoQixbMiwzNF0pLHQoTmUsWzIsNTJdKSx7MTA6eXIsNjA6b3IsODM6bG4sMTA0Ok9yLDEwNjoyNzMsMTA3OjIzNywxMDg6aWksMTA5Om1uLDExMDpPbiwxMTE6X3J9LHQoUG4sWzIsMTMxXSksezE0Om9lLDQ0OkssNjA6ZWUsODg6SiwxMDA6Mjc0LDEwNDpILDEwNTpxLDEwODpRLDExMDphZSwxMTM6dWUsMTE0OmNlLDExNTp0ZSwxMTk6ODZ9LHsxNDpvZSw0NDpLLDYwOmVlLDg4OkosMTAwOjI3NSwxMDQ6SCwxMDU6cSwxMDg6USwxMTA6YWUsMTEzOnVlLDExNDpjZSwxMTU6dGUsMTE5Ojg2fSx7OTc6WzEsMjc2XX0sdChVZSxbMiwxMThdKSx0KHNlLFsyLDU4XSksezMwOjI3Nyw2NzpodCw3OTpFdCw4MDplciw4MToxNjgsMTE1OmR0LDExNjpKZSwxMTc6Y3R9LHQoc2UsWzIsNjZdKSx0KHZ0LGEsezU6Mjc4fSksdCh2cyxbMiwxMjldLHsxMDc6MjY0LDEwOnlyLDYwOm9yLDgzOmxuLDEwNDpPciwxMDg6aWksMTA5Om1uLDExMDpPbiwxMTE6X3J9KSx0KFVlLFsyLDEyNF0sezExOToxNjQsMTA6WzEsMjc5XSwxNDpvZSw0NDpLLDYwOmVlLDg4OkosMTA0OkgsMTA1OnEsMTA4OlEsMTEwOmFlLDExMzp1ZSwxMTQ6Y2UsMTE1OnRlfSksdChVZSxbMiwxMjVdLHsxMTk6MTY0LDEwOlsxLDI4MF0sMTQ6b2UsNDQ6Syw2MDplZSw4ODpKLDEwNDpILDEwNTpxLDEwODpRLDExMDphZSwxMTM6dWUsMTE0OmNlLDExNTp0ZX0pLHQoVWUsWzIsMTEyXSksezMxOlsxLDI4MV0sNjc6aHQsODE6MjE0LDExNTpkdCwxMTY6SmUsMTE3OmN0fSx7NjoxMSw3OjEyLDg6cyw5OmwsMTA6dSwxMTpoLDIwOjE3LDIyOjE4LDIzOjE5LDI0OjIwLDI1OjIxLDI2OjIyLDI3OmYsMzI6WzEsMjgyXSwzMzoyNCwzNDpkLDM2OnAsMzg6bSw0MjoyOCw0MzozOCw0NDpnLDQ1OjM5LDQ3OjQwLDYwOnksODM6diw4NDp4LDg1OmIsODY6dyw4NzpfLDg4OlQsMTAxOkUsMTA0OkwsMTA1OlMsMTA4OkEsMTEwOkksMTEyOjQxLDExMzpELDExNDprLDExNTpSLDEyMDpDLDEyMTpPLDEyMjpOLDEyMzpQfSx7MTA6eXIsNjA6b3IsODM6bG4sOTE6MjgzLDEwNDpPciwxMDY6MjM2LDEwNzoyMzcsMTA4OmlpLDEwOTptbiwxMTA6T24sMTExOl9yfSx7MTA6eXIsNjA6b3IsODM6bG4sOTE6Mjg0LDEwNDpPciwxMDY6MjM2LDEwNzoyMzcsMTA4OmlpLDEwOTptbiwxMTA6T24sMTExOl9yfSx0KHNlLFsyLDYyXSksdChCLFsyLDMzXSksdChVZSxbMiwxMjJdLHsxMDU6bWl9KSx0KFVlLFsyLDEyM10sezEwNTptaX0pXSxkZWZhdWx0QWN0aW9uczp7fSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oQXQsUHQpe2lmKFB0LnJlY292ZXJhYmxlKXRoaXMudHJhY2UoQXQpO2Vsc2V7dmFyIHd0PW5ldyBFcnJvcihBdCk7dGhyb3cgd3QuaGFzaD1QdCx3dH19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihBdCl7dmFyIFB0PXRoaXMsd3Q9WzBdLFdlPVtdLEZ0PVtudWxsXSxkZT1bXSxnbj10aGlzLnRhYmxlLHhlPSIiLGphPTAsVzE9MCxZMT0wLHExPTIsWDE9MSxvcD1kZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxLbj1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLGNhPXt5eTp7fX07Zm9yKHZhciB0YyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LHRjKSYmKGNhLnl5W3RjXT10aGlzLnl5W3RjXSk7S24uc2V0SW5wdXQoQXQsY2EueXkpLGNhLnl5LmxleGVyPUtuLGNhLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBLbi55eWxsb2M+InUiJiYoS24ueXlsbG9jPXt9KTt2YXIgV2Y9S24ueXlsbG9jO2RlLnB1c2goV2YpO3ZhciBqMT1Lbi5vcHRpb25zJiZLbi5vcHRpb25zLnJhbmdlczt0eXBlb2YgY2EueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9Y2EueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gVEYoS2Epe3d0Lmxlbmd0aD13dC5sZW5ndGgtMipLYSxGdC5sZW5ndGg9RnQubGVuZ3RoLUthLGRlLmxlbmd0aD1kZS5sZW5ndGgtS2F9byhURiwicG9wU3RhY2siKTtmdW5jdGlvbiBZZigpe3ZhciBLYTtyZXR1cm4gS2E9V2UucG9wKCl8fEtuLmxleCgpfHxYMSx0eXBlb2YgS2EhPSJudW1iZXIiJiYoS2EgaW5zdGFuY2VvZiBBcnJheSYmKFdlPUthLEthPVdlLnBvcCgpKSxLYT1QdC5zeW1ib2xzX1tLYV18fEthKSxLYX1vKFlmLCJsZXgiKTtmb3IodmFyIHVhLEsxLEVuLE9pLGtGLGxwLHJjPXt9LHFmLENvLHpiLFhmOzspe2lmKEVuPXd0W3d0Lmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW0VuXT9PaT10aGlzLmRlZmF1bHRBY3Rpb25zW0VuXTooKHVhPT09bnVsbHx8dHlwZW9mIHVhPiJ1IikmJih1YT1ZZigpKSxPaT1nbltFbl0mJmduW0VuXVt1YV0pLHR5cGVvZiBPaT4idSJ8fCFPaS5sZW5ndGh8fCFPaVswXSl7dmFyIGNwPSIiO1hmPVtdO2ZvcihxZiBpbiBnbltFbl0pdGhpcy50ZXJtaW5hbHNfW3FmXSYmcWY+cTEmJlhmLnB1c2goIiciK3RoaXMudGVybWluYWxzX1txZl0rIiciKTtLbi5zaG93UG9zaXRpb24/Y3A9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoamErMSkrYDoKYCtLbi5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK1hmLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bdWFdfHx1YSkrIiciOmNwPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGphKzEpKyI6IFVuZXhwZWN0ZWQgIisodWE9PVgxPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3VhXXx8dWEpKyInIiksdGhpcy5wYXJzZUVycm9yKGNwLHt0ZXh0OktuLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t1YV18fHVhLGxpbmU6S24ueXlsaW5lbm8sbG9jOldmLGV4cGVjdGVkOlhmfSl9aWYoT2lbMF1pbnN0YW5jZW9mIEFycmF5JiZPaS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK0VuKyIsIHRva2VuOiAiK3VhKTtzd2l0Y2goT2lbMF0pe2Nhc2UgMTp3dC5wdXNoKHVhKSxGdC5wdXNoKEtuLnl5dGV4dCksZGUucHVzaChLbi55eWxsb2MpLHd0LnB1c2goT2lbMV0pLHVhPW51bGwsSzE/KHVhPUsxLEsxPW51bGwpOihXMT1Lbi55eWxlbmcseGU9S24ueXl0ZXh0LGphPUtuLnl5bGluZW5vLFdmPUtuLnl5bGxvYyxZMT4wJiZZMS0tKTticmVhaztjYXNlIDI6aWYoQ289dGhpcy5wcm9kdWN0aW9uc19bT2lbMV1dWzFdLHJjLiQ9RnRbRnQubGVuZ3RoLUNvXSxyYy5fJD17Zmlyc3RfbGluZTpkZVtkZS5sZW5ndGgtKENvfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6ZGVbZGUubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46ZGVbZGUubGVuZ3RoLShDb3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpkZVtkZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGoxJiYocmMuXyQucmFuZ2U9W2RlW2RlLmxlbmd0aC0oQ298fDEpXS5yYW5nZVswXSxkZVtkZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxscD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkocmMsW3hlLFcxLGphLGNhLnl5LE9pWzFdLEZ0LGRlXS5jb25jYXQob3ApKSx0eXBlb2YgbHA8InUiKXJldHVybiBscDtDbyYmKHd0PXd0LnNsaWNlKDAsLTEqQ28qMiksRnQ9RnQuc2xpY2UoMCwtMSpDbyksZGU9ZGUuc2xpY2UoMCwtMSpDbykpLHd0LnB1c2godGhpcy5wcm9kdWN0aW9uc19bT2lbMV1dWzBdKSxGdC5wdXNoKHJjLiQpLGRlLnB1c2gocmMuXyQpLHpiPWduW3d0W3d0Lmxlbmd0aC0yXV1bd3Rbd3QubGVuZ3RoLTFdXSx3dC5wdXNoKHpiKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfSwicGFyc2UiKX0sZ2w9ZnVuY3Rpb24oKXt2YXIga2k9e0VPRjoxLHBhcnNlRXJyb3I6byhmdW5jdGlvbihQdCx3dCl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihQdCx3dCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoUHQpfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24oQXQsUHQpe3JldHVybiB0aGlzLnl5PVB0fHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1BdCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30sInNldElucHV0IiksaW5wdXQ6byhmdW5jdGlvbigpe3ZhciBBdD10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9QXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPUF0LHRoaXMubWF0Y2hlZCs9QXQ7dmFyIFB0PUF0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gUHQ/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLEF0fSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKEF0KXt2YXIgUHQ9QXQubGVuZ3RoLHd0PUF0LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9QXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLVB0KSx0aGlzLm9mZnNldC09UHQ7dmFyIFdlPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLHd0Lmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09d3QubGVuZ3RoLTEpO3ZhciBGdD10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46d3Q/KHd0Lmxlbmd0aD09PVdlLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrV2VbV2UubGVuZ3RoLXd0Lmxlbmd0aF0ubGVuZ3RoLXd0WzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tUHR9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bRnRbMF0sRnRbMF0rdGhpcy55eWxlbmctUHRdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sInVucHV0IiksbW9yZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30sIm1vcmUiKSxyZWplY3Q6byhmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sInJlamVjdCIpLGxlc3M6byhmdW5jdGlvbihBdCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKEF0KSl9LCJsZXNzIikscGFzdElucHV0Om8oZnVuY3Rpb24oKXt2YXIgQXQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihBdC5sZW5ndGg+MjA/Ii4uLiI6IiIpK0F0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSwicGFzdElucHV0IiksdXBjb21pbmdJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIEF0PXRoaXMubWF0Y2g7cmV0dXJuIEF0Lmxlbmd0aDwyMCYmKEF0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1BdC5sZW5ndGgpKSwoQXQuc3Vic3RyKDAsMjApKyhBdC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sInVwY29taW5nSW5wdXQiKSxzaG93UG9zaXRpb246byhmdW5jdGlvbigpe3ZhciBBdD10aGlzLnBhc3RJbnB1dCgpLFB0PW5ldyBBcnJheShBdC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBBdCt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArUHQrIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKEF0LFB0KXt2YXIgd3QsV2UsRnQ7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKEZ0PXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKEZ0Lnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLFdlPUF0WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxXZSYmKHRoaXMueXlsaW5lbm8rPVdlLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOldlP1dlW1dlLmxlbmd0aC0xXS5sZW5ndGgtV2VbV2UubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rQXRbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9QXRbMF0sdGhpcy5tYXRjaCs9QXRbMF0sdGhpcy5tYXRjaGVzPUF0LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKEF0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1BdFswXSx3dD10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxQdCx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSx3dClyZXR1cm4gd3Q7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGRlIGluIEZ0KXRoaXNbZGVdPUZ0W2RlXTtyZXR1cm4hMX1yZXR1cm4hMX0sInRlc3RfbWF0Y2giKSxuZXh0Om8oZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgQXQsUHQsd3QsV2U7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgRnQ9dGhpcy5fY3VycmVudFJ1bGVzKCksZGU9MDtkZTxGdC5sZW5ndGg7ZGUrKylpZih3dD10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW0Z0W2RlXV0pLHd0JiYoIVB0fHx3dFswXS5sZW5ndGg+UHRbMF0ubGVuZ3RoKSl7aWYoUHQ9d3QsV2U9ZGUsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoQXQ9dGhpcy50ZXN0X21hdGNoKHd0LEZ0W2RlXSksQXQhPT0hMSlyZXR1cm4gQXQ7aWYodGhpcy5fYmFja3RyYWNrKXtQdD0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBQdD8oQXQ9dGhpcy50ZXN0X21hdGNoKFB0LEZ0W1dlXSksQXQhPT0hMT9BdDohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBQdD10aGlzLm5leHQoKTtyZXR1cm4gUHR8fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKFB0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goUHQpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIFB0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIFB0PjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24oUHQpe3JldHVybiBQdD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKFB0fHwwKSxQdD49MD90aGlzLmNvbmRpdGlvblN0YWNrW1B0XToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKFB0KXt0aGlzLmJlZ2luKFB0KX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6e30scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKFB0LHd0LFdlLEZ0KXt2YXIgZGU9RnQ7c3dpdGNoKFdlKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDM0O2JyZWFrO2Nhc2UgMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2JyZWFrO2Nhc2UgMjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMzY7YnJlYWs7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7YnJlYWs7Y2FzZSA0OnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNjpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSA3OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgic2hhcGVEYXRhIiksd3QueXl0ZXh0PSIiLDQwO2JyZWFrO2Nhc2UgODpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInNoYXBlRGF0YVN0ciIpLDQwO2JyZWFrO2Nhc2UgOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQwO2JyZWFrO2Nhc2UgMTA6bGV0IGduPS9cblxzKi9nO3JldHVybiB3dC55eXRleHQ9d3QueXl0ZXh0LnJlcGxhY2UoZ24sIjxici8+IiksNDA7YnJlYWs7Y2FzZSAxMTpyZXR1cm4gNDA7Y2FzZSAxMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMzp0aGlzLmJlZ2luKCJjYWxsYmFja25hbWUiKTticmVhaztjYXNlIDE0OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE1OnRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJjYWxsYmFja2FyZ3MiKTticmVhaztjYXNlIDE2OnJldHVybiA5NDtjYXNlIDE3OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE4OnJldHVybiA5NTtjYXNlIDE5OnJldHVybiJNRF9TVFIiO2Nhc2UgMjA6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjE6dGhpcy5iZWdpbigibWRfc3RyaW5nIik7YnJlYWs7Y2FzZSAyMjpyZXR1cm4iU1RSIjtjYXNlIDIzOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI0OnRoaXMucHVzaFN0YXRlKCJzdHJpbmciKTticmVhaztjYXNlIDI1OnJldHVybiA4MztjYXNlIDI2OnJldHVybiAxMDE7Y2FzZSAyNzpyZXR1cm4gODQ7Y2FzZSAyODpyZXR1cm4gMTAzO2Nhc2UgMjk6cmV0dXJuIDg1O2Nhc2UgMzA6cmV0dXJuIDg2O2Nhc2UgMzE6cmV0dXJuIDk2O2Nhc2UgMzI6dGhpcy5iZWdpbigiY2xpY2siKTticmVhaztjYXNlIDMzOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDM0OnJldHVybiA4NztjYXNlIDM1OnJldHVybiBQdC5sZXguZmlyc3RHcmFwaCgpJiZ0aGlzLmJlZ2luKCJkaXIiKSwxMjticmVhaztjYXNlIDM2OnJldHVybiBQdC5sZXguZmlyc3RHcmFwaCgpJiZ0aGlzLmJlZ2luKCJkaXIiKSwxMjticmVhaztjYXNlIDM3OnJldHVybiBQdC5sZXguZmlyc3RHcmFwaCgpJiZ0aGlzLmJlZ2luKCJkaXIiKSwxMjticmVhaztjYXNlIDM4OnJldHVybiAyNztjYXNlIDM5OnJldHVybiAzMjtjYXNlIDQwOnJldHVybiA5NztjYXNlIDQxOnJldHVybiA5NztjYXNlIDQyOnJldHVybiA5NztjYXNlIDQzOnJldHVybiA5NztjYXNlIDQ0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTM7YnJlYWs7Y2FzZSA0NTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2JyZWFrO2Nhc2UgNDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDticmVhaztjYXNlIDQ3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7YnJlYWs7Y2FzZSA0ODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2JyZWFrO2Nhc2UgNDk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDticmVhaztjYXNlIDUwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7YnJlYWs7Y2FzZSA1MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2JyZWFrO2Nhc2UgNTI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDticmVhaztjYXNlIDUzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7YnJlYWs7Y2FzZSA1NDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2JyZWFrO2Nhc2UgNTU6cmV0dXJuIDEyMDtjYXNlIDU2OnJldHVybiAxMjE7Y2FzZSA1NzpyZXR1cm4gMTIyO2Nhc2UgNTg6cmV0dXJuIDEyMztjYXNlIDU5OnJldHVybiAxMDQ7Y2FzZSA2MDpyZXR1cm4gMTEwO2Nhc2UgNjE6cmV0dXJuIDQ2O2Nhc2UgNjI6cmV0dXJuIDYwO2Nhc2UgNjM6cmV0dXJuIDQ0O2Nhc2UgNjQ6cmV0dXJuIDg7Y2FzZSA2NTpyZXR1cm4gMTA1O2Nhc2UgNjY6cmV0dXJuIDExNDtjYXNlIDY3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNzc7YnJlYWs7Y2FzZSA2ODpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImVkZ2VUZXh0IiksNzU7YnJlYWs7Y2FzZSA2OTpyZXR1cm4gMTE4O2Nhc2UgNzA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw3NzticmVhaztjYXNlIDcxOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGhpY2tFZGdlVGV4dCIpLDc1O2JyZWFrO2Nhc2UgNzI6cmV0dXJuIDExODtjYXNlIDczOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNzc7YnJlYWs7Y2FzZSA3NDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImRvdHRlZEVkZ2VUZXh0IiksNzU7YnJlYWs7Y2FzZSA3NTpyZXR1cm4gMTE4O2Nhc2UgNzY6cmV0dXJuIDc3O2Nhc2UgNzc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw1MzticmVhaztjYXNlIDc4OnJldHVybiJURVhUIjtjYXNlIDc5OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiZWxsaXBzZVRleHQiKSw1MjticmVhaztjYXNlIDgwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNTU7YnJlYWs7Y2FzZSA4MTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw1NDticmVhaztjYXNlIDgyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNTc7YnJlYWs7Y2FzZSA4MzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw1NjticmVhaztjYXNlIDg0OnJldHVybiA1ODtjYXNlIDg1OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDY3O2JyZWFrO2Nhc2UgODY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw2NDticmVhaztjYXNlIDg3OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDYzO2JyZWFrO2Nhc2UgODg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0OTticmVhaztjYXNlIDg5OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDQ4O2JyZWFrO2Nhc2UgOTA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw2OTticmVhaztjYXNlIDkxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNzE7YnJlYWs7Y2FzZSA5MjpyZXR1cm4gMTE2O2Nhc2UgOTM6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0cmFwVGV4dCIpLDY4O2JyZWFrO2Nhc2UgOTQ6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0cmFwVGV4dCIpLDcwO2JyZWFrO2Nhc2UgOTU6cmV0dXJuIDExNztjYXNlIDk2OnJldHVybiA2NztjYXNlIDk3OnJldHVybiA4OTtjYXNlIDk4OnJldHVybiJTRVAiO2Nhc2UgOTk6cmV0dXJuIDg4O2Nhc2UgMTAwOnJldHVybiAxMTQ7Y2FzZSAxMDE6cmV0dXJuIDExMDtjYXNlIDEwMjpyZXR1cm4gNDQ7Y2FzZSAxMDM6cmV0dXJuIDEwODtjYXNlIDEwNDpyZXR1cm4gMTEzO2Nhc2UgMTA1OnJldHVybiAxMTU7Y2FzZSAxMDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw2MjticmVhaztjYXNlIDEwNzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw2MjticmVhaztjYXNlIDEwODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDUxO2JyZWFrO2Nhc2UgMTA5OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDUwO2JyZWFrO2Nhc2UgMTEwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMzE7YnJlYWs7Y2FzZSAxMTE6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksMjk7YnJlYWs7Y2FzZSAxMTI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw2NjticmVhaztjYXNlIDExMzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw2NTticmVhaztjYXNlIDExNDpyZXR1cm4iVEVYVCI7Y2FzZSAxMTU6cmV0dXJuIlFVT1RFIjtjYXNlIDExNjpyZXR1cm4gOTtjYXNlIDExNzpyZXR1cm4gMTA7Y2FzZSAxMTg6cmV0dXJuIDExfX0sImFub255bW91cyIpLHJ1bGVzOlsvXig/OmFjY1RpdGxlXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKjpccyopLywvXig/Oig/IVxufHwpKlteXG5dKikvLC9eKD86YWNjRGVzY3Jccypce1xzKikvLC9eKD86W1x9XSkvLC9eKD86W15cfV0qKS8sL14oPzpAXHspLywvXig/OlsiXSkvLC9eKD86WyJdKS8sL14oPzpbXlwiXSspLywvXig/OltefV4iXSspLywvXig/Olx9KS8sL14oPzpjYWxsW1xzXSspLywvXig/OlwoW1xzXSpcKSkvLC9eKD86XCgpLywvXig/OlteKF0qKS8sL14oPzpcKSkvLC9eKD86W14pXSopLywvXig/OlteYCJdKykvLC9eKD86W2BdWyJdKS8sL14oPzpbIl1bYF0pLywvXig/OlteIl0rKS8sL14oPzpbIl0pLywvXig/OlsiXSkvLC9eKD86c3R5bGVcYikvLC9eKD86ZGVmYXVsdFxiKS8sL14oPzpsaW5rU3R5bGVcYikvLC9eKD86aW50ZXJwb2xhdGVcYikvLC9eKD86Y2xhc3NEZWZcYikvLC9eKD86Y2xhc3NcYikvLC9eKD86aHJlZltcc10pLywvXig/OmNsaWNrW1xzXSspLywvXig/Oltcc1xuXSkvLC9eKD86W15cc1xuXSopLywvXig/OmZsb3djaGFydC1lbGtcYikvLC9eKD86Z3JhcGhcYikvLC9eKD86Zmxvd2NoYXJ0XGIpLywvXig/OnN1YmdyYXBoXGIpLywvXig/OmVuZFxiXHMqKS8sL14oPzpfc2VsZlxiKS8sL14oPzpfYmxhbmtcYikvLC9eKD86X3BhcmVudFxiKS8sL14oPzpfdG9wXGIpLywvXig/Oihccj9cbikqXHMqXG4pLywvXig/OlxzKkxSXGIpLywvXig/OlxzKlJMXGIpLywvXig/OlxzKlRCXGIpLywvXig/OlxzKkJUXGIpLywvXig/OlxzKlREXGIpLywvXig/OlxzKkJSXGIpLywvXig/OlxzKjwpLywvXig/OlxzKj4pLywvXig/OlxzKlxeKS8sL14oPzpccyp2XGIpLywvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrQlRbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopLywvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopLywvXig/OlswLTldKykvLC9eKD86IykvLC9eKD86Ojo6KS8sL14oPzo6KS8sL14oPzomKS8sL14oPzo7KS8sL14oPzosKS8sL14oPzpcKikvLC9eKD86XHMqW3hvPF0/LS0rWy14bz5dXHMqKS8sL14oPzpccypbeG88XT8tLVxzKikvLC9eKD86W14tXXwtKD8hLSkrKS8sL14oPzpccypbeG88XT89PStbPXhvPl1ccyopLywvXig/OlxzKlt4bzxdPz09XHMqKS8sL14oPzpbXj1dfD0oPyEpKS8sL14oPzpccypbeG88XT8tP1wuKy1beG8+XT9ccyopLywvXig/OlxzKlt4bzxdPy1cLlxzKikvLC9eKD86W15cLl18XC4oPyEpKS8sL14oPzpccyp+fltcfl0rXHMqKS8sL14oPzpbLS9cKV1bXCldKS8sL14oPzpbXlwoXClcW1xdXHtcfV18IVwpKykvLC9eKD86XCgtKS8sL14oPzpcXVwpKS8sL14oPzpcKFxbKS8sL14oPzpcXVxdKS8sL14oPzpcW1xbKS8sL14oPzpcW1x8KS8sL14oPzo+KS8sL14oPzpcKVxdKS8sL14oPzpcW1woKS8sL14oPzpcKVwpXCkpLywvXig/OlwoXChcKCkvLC9eKD86W1xcKD89XF0pXVtcXV0pLywvXig/OlwvKD89XF0pXF0pLywvXig/OlwvKD8hXF0pfFxcKD8hXF0pfFteXFxcW1xdXChcKVx7XH1cL10rKS8sL14oPzpcW1wvKS8sL14oPzpcW1xcKS8sL14oPzo8KS8sL14oPzo+KS8sL14oPzpcXikvLC9eKD86XFxcfCkvLC9eKD86dlxiKS8sL14oPzpcKikvLC9eKD86IykvLC9eKD86JikvLC9eKD86KFtBLVphLXowLTkhIlwjJCUmJyorXC5gP1xcX1wvXXwtKD89W15cPlwtXC5dKXwoPyEpKSspLywvXig/Oi0pLywvXig/OltcdTAwQUFcdTAwQjVcdTAwQkFcdTAwQzAtXHUwMEQ2XHUwMEQ4LVx1MDBGNl18W1x1MDBGOC1cdTAyQzFcdTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1MDJFQ1x1MDJFRVx1MDM3MC1cdTAzNzRcdTAzNzZcdTAzNzddfFtcdTAzN0EtXHUwMzdEXHUwMzg2XHUwMzg4LVx1MDM4QVx1MDM4Q1x1MDM4RS1cdTAzQTFcdTAzQTMtXHUwM0Y1XXxbXHUwM0Y3LVx1MDQ4MVx1MDQ4QS1cdTA1MjdcdTA1MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDVEMC1cdTA1RUFdfFtcdTA1RjAtXHUwNUYyXHUwNjIwLVx1MDY0QVx1MDY2RVx1MDY2Rlx1MDY3MS1cdTA2RDNcdTA2RDVcdTA2RTVcdTA2RTZcdTA2RUVdfFtcdTA2RUZcdTA2RkEtXHUwNkZDXHUwNkZGXHUwNzEwXHUwNzEyLVx1MDcyRlx1MDc0RC1cdTA3QTVcdTA3QjFcdTA3Q0EtXHUwN0VBXXxbXHUwN0Y0XHUwN0Y1XHUwN0ZBXHUwODAwLVx1MDgxNVx1MDgxQVx1MDgyNFx1MDgyOFx1MDg0MC1cdTA4NThcdTA4QTBdfFtcdTA4QTItXHUwOEFDXHUwOTA0LVx1MDkzOVx1MDkzRFx1MDk1MFx1MDk1OC1cdTA5NjFcdTA5NzEtXHUwOTc3XXxbXHUwOTc5LVx1MDk3Rlx1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFBLVx1MDlCMFx1MDlCMl18W1x1MDlCNi1cdTA5QjlcdTA5QkRcdTA5Q0VcdTA5RENcdTA5RERcdTA5REYtXHUwOUUxXHUwOUYwXHUwOUYxXHUwQTA1LVx1MEEwQV18W1x1MEEwRlx1MEExMFx1MEExMy1cdTBBMjhcdTBBMkEtXHUwQTMwXHUwQTMyXHUwQTMzXHUwQTM1XHUwQTM2XHUwQTM4XHUwQTM5XXxbXHUwQTU5LVx1MEE1Q1x1MEE1RVx1MEE3Mi1cdTBBNzRcdTBBODUtXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThdfFtcdTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCRFx1MEFEMFx1MEFFMFx1MEFFMVx1MEIwNS1cdTBCMENdfFtcdTBCMEZcdTBCMTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0RcdTBCNUNdfFtcdTBCNURcdTBCNUYtXHUwQjYxXHUwQjcxXHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XXxbXHUwQjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjlcdTBCRDBdfFtcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzMzXHUwQzM1LVx1MEMzOVx1MEMzRF18W1x1MEM1OFx1MEM1OVx1MEM2MFx1MEM2MVx1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNdfFtcdTBDQjUtXHUwQ0I5XHUwQ0JEXHUwQ0RFXHUwQ0UwXHUwQ0UxXHUwQ0YxXHUwQ0YyXHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBdfFtcdTBEMTItXHUwRDNBXHUwRDNEXHUwRDRFXHUwRDYwXHUwRDYxXHUwRDdBLVx1MEQ3Rlx1MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXXxbXHUwREIzLVx1MERCQlx1MERCRFx1MERDMC1cdTBEQzZcdTBFMDEtXHUwRTMwXHUwRTMyXHUwRTMzXHUwRTQwLVx1MEU0Nlx1MEU4MV18W1x1MEU4Mlx1MEU4NFx1MEU4N1x1MEU4OFx1MEU4QVx1MEU4RFx1MEU5NC1cdTBFOTdcdTBFOTktXHUwRTlGXHUwRUExLVx1MEVBM118W1x1MEVBNVx1MEVBN1x1MEVBQVx1MEVBQlx1MEVBRC1cdTBFQjBcdTBFQjJcdTBFQjNcdTBFQkRcdTBFQzAtXHUwRUM0XHUwRUM2XXxbXHUwRURDLVx1MEVERlx1MEYwMFx1MEY0MC1cdTBGNDdcdTBGNDktXHUwRjZDXHUwRjg4LVx1MEY4Q1x1MTAwMC1cdTEwMkFdfFtcdTEwM0ZcdTEwNTAtXHUxMDU1XHUxMDVBLVx1MTA1RFx1MTA2MVx1MTA2NVx1MTA2Nlx1MTA2RS1cdTEwNzBcdTEwNzUtXHUxMDgxXXxbXHUxMDhFXHUxMEEwLVx1MTBDNVx1MTBDN1x1MTBDRFx1MTBEMC1cdTEwRkFcdTEwRkMtXHUxMjQ4XHUxMjRBLVx1MTI0RF18W1x1MTI1MC1cdTEyNTZcdTEyNThcdTEyNUEtXHUxMjVEXHUxMjYwLVx1MTI4OFx1MTI4QS1cdTEyOERcdTEyOTAtXHUxMkIwXXxbXHUxMkIyLVx1MTJCNVx1MTJCOC1cdTEyQkVcdTEyQzBcdTEyQzItXHUxMkM1XHUxMkM4LVx1MTJENlx1MTJEOC1cdTEzMTBdfFtcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1QVx1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y0XHUxNDAxLVx1MTY2Q118W1x1MTY2Ri1cdTE2N0ZcdTE2ODEtXHUxNjlBXHUxNkEwLVx1MTZFQVx1MTcwMC1cdTE3MENcdTE3MEUtXHUxNzExXXxbXHUxNzIwLVx1MTczMVx1MTc0MC1cdTE3NTFcdTE3NjAtXHUxNzZDXHUxNzZFLVx1MTc3MFx1MTc4MC1cdTE3QjNcdTE3RDddfFtcdTE3RENcdTE4MjAtXHUxODc3XHUxODgwLVx1MThBOFx1MThBQVx1MThCMC1cdTE4RjVcdTE5MDAtXHUxOTFDXXxbXHUxOTUwLVx1MTk2RFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOUFCXHUxOUMxLVx1MTlDN1x1MUEwMC1cdTFBMTZdfFtcdTFBMjAtXHUxQTU0XHUxQUE3XHUxQjA1LVx1MUIzM1x1MUI0NS1cdTFCNEJcdTFCODMtXHUxQkEwXHUxQkFFXHUxQkFGXXxbXHUxQkJBLVx1MUJFNVx1MUMwMC1cdTFDMjNcdTFDNEQtXHUxQzRGXHUxQzVBLVx1MUM3RFx1MUNFOS1cdTFDRUNdfFtcdTFDRUUtXHUxQ0YxXHUxQ0Y1XHUxQ0Y2XHUxRDAwLVx1MURCRlx1MUUwMC1cdTFGMTVcdTFGMTgtXHUxRjFEXXxbXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RF18W1x1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXXxbXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjA3MVx1MjA3Rl18W1x1MjA5MC1cdTIwOUNcdTIxMDJcdTIxMDdcdTIxMEEtXHUyMTEzXHUyMTE1XHUyMTE5LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEyOF18W1x1MjEyQS1cdTIxMkRcdTIxMkYtXHUyMTM5XHUyMTNDLVx1MjEzRlx1MjE0NS1cdTIxNDlcdTIxNEVcdTIxODNcdTIxODRdfFtcdTJDMDAtXHUyQzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0VFXHUyQ0YyXHUyQ0YzXXxbXHUyRDAwLVx1MkQyNVx1MkQyN1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEODAtXHUyRDk2XHUyREEwLVx1MkRBNl18W1x1MkRBOC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJEQzZcdTJEQzgtXHUyRENFXXxbXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTJFMkZcdTMwMDVcdTMwMDZcdTMwMzEtXHUzMDM1XHUzMDNCXHUzMDNDXXxbXHUzMDQxLVx1MzA5Nlx1MzA5RC1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkRdfFtcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZDQ118W1x1QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MUZcdUE2MkFcdUE2MkJdfFtcdUE2NDAtXHVBNjZFXHVBNjdGLVx1QTY5N1x1QTZBMC1cdUE2RTVcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OF18W1x1QTc4Qi1cdUE3OEVcdUE3OTAtXHVBNzkzXHVBN0EwLVx1QTdBQVx1QTdGOC1cdUE4MDFcdUE4MDMtXHVBODA1XXxbXHVBODA3LVx1QTgwQVx1QTgwQy1cdUE4MjJcdUE4NDAtXHVBODczXHVBODgyLVx1QThCM1x1QThGMi1cdUE4RjdcdUE4RkJdfFtcdUE5MEEtXHVBOTI1XHVBOTMwLVx1QTk0Nlx1QTk2MC1cdUE5N0NcdUE5ODQtXHVBOUIyXHVBOUNGXHVBQTAwLVx1QUEyOF18W1x1QUE0MC1cdUFBNDJcdUFBNDQtXHVBQTRCXHVBQTYwLVx1QUE3Nlx1QUE3QVx1QUE4MC1cdUFBQUZcdUFBQjFcdUFBQjVdfFtcdUFBQjZcdUFBQjktXHVBQUJEXHVBQUMwXHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUFcdUFBRjItXHVBQUY0XXxbXHVBQjAxLVx1QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIyOC1cdUFCMkVdfFtcdUFCQzAtXHVBQkUyXHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkE2RF18W1x1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkIxRFx1RkIxRi1cdUZCMjhcdUZCMkEtXHVGQjM2XXxbXHVGQjM4LVx1RkIzQ1x1RkIzRVx1RkI0MFx1RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXXxbXHVGRDUwLVx1RkQ4Rlx1RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZFRkNdfFtcdUZGMjEtXHVGRjNBXHVGRjQxLVx1RkY1QVx1RkY2Ni1cdUZGQkVcdUZGQzItXHVGRkM3XHVGRkNBLVx1RkZDRl18W1x1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXSkvLC9eKD86XHwpLywvXig/Olx8KS8sL14oPzpcKSkvLC9eKD86XCgpLywvXig/OlxdKS8sL14oPzpcWykvLC9eKD86KFx9KSkvLC9eKD86XHspLywvXig/OlteXFtcXVwoXClce1x9XHxcIl0rKS8sL14oPzoiKS8sL14oPzooXHI/XG4pKykvLC9eKD86XHMpLywvXig/OiQpL10sY29uZGl0aW9uczp7c2hhcGVEYXRhRW5kQnJhY2tldDp7cnVsZXM6WzIxLDI0LDc2LDc5LDgxLDgzLDg3LDg5LDkzLDk0LDEwNywxMDksMTExLDExM10saW5jbHVzaXZlOiExfSxzaGFwZURhdGFTdHI6e3J1bGVzOls5LDEwLDIxLDI0LDc2LDc5LDgxLDgzLDg3LDg5LDkzLDk0LDEwNywxMDksMTExLDExM10saW5jbHVzaXZlOiExfSxzaGFwZURhdGE6e3J1bGVzOls4LDExLDEyLDIxLDI0LDc2LDc5LDgxLDgzLDg3LDg5LDkzLDk0LDEwNywxMDksMTExLDExM10saW5jbHVzaXZlOiExfSxjYWxsYmFja2FyZ3M6e3J1bGVzOlsxNywxOCwyMSwyNCw3Niw3OSw4MSw4Myw4Nyw4OSw5Myw5NCwxMDcsMTA5LDExMSwxMTNdLGluY2x1c2l2ZTohMX0sY2FsbGJhY2tuYW1lOntydWxlczpbMTQsMTUsMTYsMjEsMjQsNzYsNzksODEsODMsODcsODksOTMsOTQsMTA3LDEwOSwxMTEsMTEzXSxpbmNsdXNpdmU6ITF9LGhyZWY6e3J1bGVzOlsyMSwyNCw3Niw3OSw4MSw4Myw4Nyw4OSw5Myw5NCwxMDcsMTA5LDExMSwxMTNdLGluY2x1c2l2ZTohMX0sY2xpY2s6e3J1bGVzOlsyMSwyNCwzMywzNCw3Niw3OSw4MSw4Myw4Nyw4OSw5Myw5NCwxMDcsMTA5LDExMSwxMTNdLGluY2x1c2l2ZTohMX0sZG90dGVkRWRnZVRleHQ6e3J1bGVzOlsyMSwyNCw3Myw3NSw3Niw3OSw4MSw4Myw4Nyw4OSw5Myw5NCwxMDcsMTA5LDExMSwxMTNdLGluY2x1c2l2ZTohMX0sdGhpY2tFZGdlVGV4dDp7cnVsZXM6WzIxLDI0LDcwLDcyLDc2LDc5LDgxLDgzLDg3LDg5LDkzLDk0LDEwNywxMDksMTExLDExM10saW5jbHVzaXZlOiExfSxlZGdlVGV4dDp7cnVsZXM6WzIxLDI0LDY3LDY5LDc2LDc5LDgxLDgzLDg3LDg5LDkzLDk0LDEwNywxMDksMTExLDExM10saW5jbHVzaXZlOiExfSx0cmFwVGV4dDp7cnVsZXM6WzIxLDI0LDc2LDc5LDgxLDgzLDg3LDg5LDkwLDkxLDkyLDkzLDk0LDEwNywxMDksMTExLDExM10saW5jbHVzaXZlOiExfSxlbGxpcHNlVGV4dDp7cnVsZXM6WzIxLDI0LDc2LDc3LDc4LDc5LDgxLDgzLDg3LDg5LDkzLDk0LDEwNywxMDksMTExLDExM10saW5jbHVzaXZlOiExfSx0ZXh0OntydWxlczpbMjEsMjQsNzYsNzksODAsODEsODIsODMsODYsODcsODgsODksOTMsOTQsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsMTEyLDExMywxMTRdLGluY2x1c2l2ZTohMX0sdmVydGV4OntydWxlczpbMjEsMjQsNzYsNzksODEsODMsODcsODksOTMsOTQsMTA3LDEwOSwxMTEsMTEzXSxpbmNsdXNpdmU6ITF9LGRpcjp7cnVsZXM6WzIxLDI0LDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDc2LDc5LDgxLDgzLDg3LDg5LDkzLDk0LDEwNywxMDksMTExLDExM10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbNSw2LDIxLDI0LDc2LDc5LDgxLDgzLDg3LDg5LDkzLDk0LDEwNywxMDksMTExLDExM10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOlszLDIxLDI0LDc2LDc5LDgxLDgzLDg3LDg5LDkzLDk0LDEwNywxMDksMTExLDExM10saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOlsxLDIxLDI0LDc2LDc5LDgxLDgzLDg3LDg5LDkzLDk0LDEwNywxMDksMTExLDExM10saW5jbHVzaXZlOiExfSxtZF9zdHJpbmc6e3J1bGVzOlsxOSwyMCwyMSwyNCw3Niw3OSw4MSw4Myw4Nyw4OSw5Myw5NCwxMDcsMTA5LDExMSwxMTNdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbMjEsMjIsMjMsMjQsNzYsNzksODEsODMsODcsODksOTMsOTQsMTA3LDEwOSwxMTEsMTEzXSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDIsNCw3LDEzLDIxLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDcwLDcxLDczLDc0LDc2LDc5LDgxLDgzLDg0LDg1LDg3LDg5LDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNywxMDksMTExLDExMywxMTUsMTE2LDExNywxMThdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4ga2l9KCk7U28ubGV4ZXI9Z2w7ZnVuY3Rpb24gQm4oKXt0aGlzLnl5PXt9fXJldHVybiBvKEJuLCJQYXJzZXIiKSxCbi5wcm90b3R5cGU9U28sU28uUGFyc2VyPUJuLG5ldyBCbn0oKTtMRC5wYXJzZXI9TEQ7VmllPUxEfSk7dmFyIEdPZSwkT2UsSGllLFdpZT1NKCgpPT57InVzZSBzdHJpY3QiO0xvKCk7R09lPW8oKHQsZSk9PntsZXQgcj1heSxuPXIodCwiciIpLGk9cih0LCJnIiksYT1yKHQsImIiKTtyZXR1cm4gWnMobixpLGEsZSl9LCJmYWRlIiksJE9lPW8odD0+YC5sYWJlbCB7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogICAgY29sb3I6ICR7dC5ub2RlVGV4dENvbG9yfHx0LnRleHRDb2xvcn07CiAgfQogIC5jbHVzdGVyLWxhYmVsIHRleHQgewogICAgZmlsbDogJHt0LnRpdGxlQ29sb3J9OwogIH0KICAuY2x1c3Rlci1sYWJlbCBzcGFuIHsKICAgIGNvbG9yOiAke3QudGl0bGVDb2xvcn07CiAgfQogIC5jbHVzdGVyLWxhYmVsIHNwYW4gcCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKICB9CgogIC5sYWJlbCB0ZXh0LHNwYW4gewogICAgZmlsbDogJHt0Lm5vZGVUZXh0Q29sb3J8fHQudGV4dENvbG9yfTsKICAgIGNvbG9yOiAke3Qubm9kZVRleHRDb2xvcnx8dC50ZXh0Q29sb3J9OwogIH0KCiAgLm5vZGUgcmVjdCwKICAubm9kZSBjaXJjbGUsCiAgLm5vZGUgZWxsaXBzZSwKICAubm9kZSBwb2x5Z29uLAogIC5ub2RlIHBhdGggewogICAgZmlsbDogJHt0Lm1haW5Ca2d9OwogICAgc3Ryb2tlOiAke3Qubm9kZUJvcmRlcn07CiAgICBzdHJva2Utd2lkdGg6IDFweDsKICB9CiAgLnJvdWdoLW5vZGUgLmxhYmVsIHRleHQgLCAubm9kZSAubGFiZWwgdGV4dCwgLmltYWdlLXNoYXBlIC5sYWJlbCwgLmljb24tc2hhcGUgLmxhYmVsIHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgfQogIC8vIC5mbG93Y2hhcnQtbGFiZWwgLnRleHQtb3V0ZXItdHNwYW4gewogIC8vICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAvLyB9CiAgLy8gLmZsb3djaGFydC1sYWJlbCAudGV4dC1pbm5lci10c3BhbiB7CiAgLy8gICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgLy8gfQoKICAubm9kZSAua2F0ZXggcGF0aCB7CiAgICBmaWxsOiAjMDAwOwogICAgc3Ryb2tlOiAjMDAwOwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKICAucm91Z2gtbm9kZSAubGFiZWwsLm5vZGUgLmxhYmVsLCAuaW1hZ2Utc2hhcGUgLmxhYmVsLCAuaWNvbi1zaGFwZSAubGFiZWwgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KICAubm9kZS5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogIH0KCgogIC5yb290IC5hbmNob3IgcGF0aCB7CiAgICBmaWxsOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogICAgc3Ryb2tlLXdpZHRoOiAwOwogICAgc3Ryb2tlOiAke3QubGluZUNvbG9yfTsKICB9CgogIC5hcnJvd2hlYWRQYXRoIHsKICAgIGZpbGw6ICR7dC5hcnJvd2hlYWRDb2xvcn07CiAgfQoKICAuZWRnZVBhdGggLnBhdGggewogICAgc3Ryb2tlOiAke3QubGluZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMi4wcHg7CiAgfQoKICAuZmxvd2NoYXJ0LWxpbmsgewogICAgc3Ryb2tlOiAke3QubGluZUNvbG9yfTsKICAgIGZpbGw6IG5vbmU7CiAgfQoKICAuZWRnZUxhYmVsIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgIHAgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3QuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICB9CiAgICByZWN0IHsKICAgICAgb3BhY2l0eTogMC41OwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3QuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICAgIGZpbGw6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgIH0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICB9CgogIC8qIEZvciBodG1sIGxhYmVscyBvbmx5ICovCiAgLmxhYmVsQmtnIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICR7R09lKHQuZWRnZUxhYmVsQmFja2dyb3VuZCwuNSl9OwogICAgLy8gYmFja2dyb3VuZC1jb2xvcjoKICB9CgogIC5jbHVzdGVyIHJlY3QgewogICAgZmlsbDogJHt0LmNsdXN0ZXJCa2d9OwogICAgc3Ryb2tlOiAke3QuY2x1c3RlckJvcmRlcn07CiAgICBzdHJva2Utd2lkdGg6IDFweDsKICB9CgogIC5jbHVzdGVyIHRleHQgewogICAgZmlsbDogJHt0LnRpdGxlQ29sb3J9OwogIH0KCiAgLmNsdXN0ZXIgc3BhbiB7CiAgICBjb2xvcjogJHt0LnRpdGxlQ29sb3J9OwogIH0KICAvKiAuY2x1c3RlciBkaXYgewogICAgY29sb3I6ICR7dC50aXRsZUNvbG9yfTsKICB9ICovCgogIGRpdi5tZXJtYWlkVG9vbHRpcCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBtYXgtd2lkdGg6IDIwMHB4OwogICAgcGFkZGluZzogMnB4OwogICAgZm9udC1mYW1pbHk6ICR7dC5mb250RmFtaWx5fTsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGJhY2tncm91bmQ6ICR7dC50ZXJ0aWFyeUNvbG9yfTsKICAgIGJvcmRlcjogMXB4IHNvbGlkICR7dC5ib3JkZXIyfTsKICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgei1pbmRleDogMTAwOwogIH0KCiAgLmZsb3djaGFydFRpdGxlVGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZm9udC1zaXplOiAxOHB4OwogICAgZmlsbDogJHt0LnRleHRDb2xvcn07CiAgfQoKICByZWN0LnRleHQgewogICAgZmlsbDogbm9uZTsKICAgIHN0cm9rZS13aWR0aDogMDsKICB9CgogIC5pY29uLXNoYXBlLCAuaW1hZ2Utc2hhcGUgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHt0LmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgcCB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgICAgcGFkZGluZzogMnB4OwogICAgfQogICAgcmVjdCB7CiAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHt0LmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgICBmaWxsOiAke3QuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICB9CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQpgLCJnZXRTdHlsZXMiKSxIaWU9JE9lfSk7dmFyIGtUPXt9O3ZyKGtULHtkaWFncmFtOigpPT5WT2V9KTt2YXIgVk9lLEVUPU0oKCk9PnsidXNlIHN0cmljdCI7VnQoKTtjTCgpOyRpZSgpO1VpZSgpO1dpZSgpO1ZPZT17cGFyc2VyOlZpZSxkYjpzdyxyZW5kZXJlcjpHaWUsc3R5bGVzOkhpZSxpbml0Om8odD0+e3QuZmxvd2NoYXJ0fHwodC5mbG93Y2hhcnQ9e30pLHQubGF5b3V0JiZhNyh7bGF5b3V0OnQubGF5b3V0fSksdC5mbG93Y2hhcnQuYXJyb3dNYXJrZXJBYnNvbHV0ZT10LmFycm93TWFya2VyQWJzb2x1dGUsYTcoe2Zsb3djaGFydDp7YXJyb3dNYXJrZXJBYnNvbHV0ZTp0LmFycm93TWFya2VyQWJzb2x1dGV9fSksc3cuY2xlYXIoKSxzdy5zZXRHZW4oImdlbi0yIil9LCJpbml0Iil9fSk7dmFyIERELEtpZSxRaWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtERD1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oUyxBLEksRCl7Zm9yKEk9SXx8e30sRD1TLmxlbmd0aDtELS07SVtTW0RdXT1BKTtyZXR1cm4gSX0sIm8iKSxlPVs2LDgsMTAsMjAsMjIsMjQsMjYsMjcsMjhdLHI9WzEsMTBdLG49WzEsMTFdLGk9WzEsMTJdLGE9WzEsMTNdLHM9WzEsMTRdLGw9WzEsMTVdLHU9WzEsMjFdLGg9WzEsMjJdLGY9WzEsMjNdLGQ9WzEsMjRdLHA9WzEsMjVdLG09WzYsOCwxMCwxMywxNSwxOCwxOSwyMCwyMiwyNCwyNiwyNywyOCw0MSw0Miw0Myw0NCw0NV0sZz1bMSwzNF0seT1bMjcsMjgsNDYsNDddLHY9WzQxLDQyLDQzLDQ0LDQ1XSx4PVsxNywzNF0sYj1bMSw1NF0sdz1bMSw1M10sXz1bMTcsMzQsMzYsMzhdLFQ9e3RyYWNlOm8oZnVuY3Rpb24oKXt9LCJ0cmFjZSIpLHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsRVJfRElBR1JBTTo0LGRvY3VtZW50OjUsRU9GOjYsbGluZTo3LFNQQUNFOjgsc3RhdGVtZW50OjksTkVXTElORToxMCxlbnRpdHlOYW1lOjExLHJlbFNwZWM6MTIsIjoiOjEzLHJvbGU6MTQsQkxPQ0tfU1RBUlQ6MTUsYXR0cmlidXRlczoxNixCTE9DS19TVE9QOjE3LFNRUzoxOCxTUUU6MTksdGl0bGU6MjAsdGl0bGVfdmFsdWU6MjEsYWNjX3RpdGxlOjIyLGFjY190aXRsZV92YWx1ZToyMyxhY2NfZGVzY3I6MjQsYWNjX2Rlc2NyX3ZhbHVlOjI1LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MjYsQUxQSEFOVU06MjcsRU5USVRZX05BTUU6MjgsYXR0cmlidXRlOjI5LGF0dHJpYnV0ZVR5cGU6MzAsYXR0cmlidXRlTmFtZTozMSxhdHRyaWJ1dGVLZXlUeXBlTGlzdDozMixhdHRyaWJ1dGVDb21tZW50OjMzLEFUVFJJQlVURV9XT1JEOjM0LGF0dHJpYnV0ZUtleVR5cGU6MzUsQ09NTUE6MzYsQVRUUklCVVRFX0tFWTozNyxDT01NRU5UOjM4LGNhcmRpbmFsaXR5OjM5LHJlbFR5cGU6NDAsWkVST19PUl9PTkU6NDEsWkVST19PUl9NT1JFOjQyLE9ORV9PUl9NT1JFOjQzLE9OTFlfT05FOjQ0LE1EX1BBUkVOVDo0NSxOT05fSURFTlRJRllJTkc6NDYsSURFTlRJRllJTkc6NDcsV09SRDo0OCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiRVJfRElBR1JBTSIsNjoiRU9GIiw4OiJTUEFDRSIsMTA6Ik5FV0xJTkUiLDEzOiI6IiwxNToiQkxPQ0tfU1RBUlQiLDE3OiJCTE9DS19TVE9QIiwxODoiU1FTIiwxOToiU1FFIiwyMDoidGl0bGUiLDIxOiJ0aXRsZV92YWx1ZSIsMjI6ImFjY190aXRsZSIsMjM6ImFjY190aXRsZV92YWx1ZSIsMjQ6ImFjY19kZXNjciIsMjU6ImFjY19kZXNjcl92YWx1ZSIsMjY6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDI3OiJBTFBIQU5VTSIsMjg6IkVOVElUWV9OQU1FIiwzNDoiQVRUUklCVVRFX1dPUkQiLDM2OiJDT01NQSIsMzc6IkFUVFJJQlVURV9LRVkiLDM4OiJDT01NRU5UIiw0MToiWkVST19PUl9PTkUiLDQyOiJaRVJPX09SX01PUkUiLDQzOiJPTkVfT1JfTU9SRSIsNDQ6Ik9OTFlfT05FIiw0NToiTURfUEFSRU5UIiw0NjoiTk9OX0lERU5USUZZSU5HIiw0NzoiSURFTlRJRllJTkciLDQ4OiJXT1JEIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFs1LDBdLFs1LDJdLFs3LDJdLFs3LDFdLFs3LDFdLFs3LDFdLFs5LDVdLFs5LDRdLFs5LDNdLFs5LDFdLFs5LDddLFs5LDZdLFs5LDRdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDFdLFsxMSwxXSxbMTEsMV0sWzE2LDFdLFsxNiwyXSxbMjksMl0sWzI5LDNdLFsyOSwzXSxbMjksNF0sWzMwLDFdLFszMSwxXSxbMzIsMV0sWzMyLDNdLFszNSwxXSxbMzMsMV0sWzEyLDNdLFszOSwxXSxbMzksMV0sWzM5LDFdLFszOSwxXSxbMzksMV0sWzQwLDFdLFs0MCwxXSxbMTQsMV0sWzE0LDFdLFsxNCwxXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKEEsSSxELGssUixDLE8pe3ZhciBOPUMubGVuZ3RoLTE7c3dpdGNoKFIpe2Nhc2UgMTpicmVhaztjYXNlIDI6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMzpDW04tMV0ucHVzaChDW05dKSx0aGlzLiQ9Q1tOLTFdO2JyZWFrO2Nhc2UgNDpjYXNlIDU6dGhpcy4kPUNbTl07YnJlYWs7Y2FzZSA2OmNhc2UgNzp0aGlzLiQ9W107YnJlYWs7Y2FzZSA4OmsuYWRkRW50aXR5KENbTi00XSksay5hZGRFbnRpdHkoQ1tOLTJdKSxrLmFkZFJlbGF0aW9uc2hpcChDW04tNF0sQ1tOXSxDW04tMl0sQ1tOLTNdKTticmVhaztjYXNlIDk6ay5hZGRFbnRpdHkoQ1tOLTNdKSxrLmFkZEF0dHJpYnV0ZXMoQ1tOLTNdLENbTi0xXSk7YnJlYWs7Y2FzZSAxMDprLmFkZEVudGl0eShDW04tMl0pO2JyZWFrO2Nhc2UgMTE6ay5hZGRFbnRpdHkoQ1tOXSk7YnJlYWs7Y2FzZSAxMjprLmFkZEVudGl0eShDW04tNl0sQ1tOLTRdKSxrLmFkZEF0dHJpYnV0ZXMoQ1tOLTZdLENbTi0xXSk7YnJlYWs7Y2FzZSAxMzprLmFkZEVudGl0eShDW04tNV0sQ1tOLTNdKTticmVhaztjYXNlIDE0OmsuYWRkRW50aXR5KENbTi0zXSxDW04tMV0pO2JyZWFrO2Nhc2UgMTU6Y2FzZSAxNjp0aGlzLiQ9Q1tOXS50cmltKCksay5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMTc6Y2FzZSAxODp0aGlzLiQ9Q1tOXS50cmltKCksay5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMTk6Y2FzZSA0Mzp0aGlzLiQ9Q1tOXTticmVhaztjYXNlIDIwOmNhc2UgNDE6Y2FzZSA0Mjp0aGlzLiQ9Q1tOXS5yZXBsYWNlKC8iL2csIiIpO2JyZWFrO2Nhc2UgMjE6Y2FzZSAyOTp0aGlzLiQ9W0NbTl1dO2JyZWFrO2Nhc2UgMjI6Q1tOXS5wdXNoKENbTi0xXSksdGhpcy4kPUNbTl07YnJlYWs7Y2FzZSAyMzp0aGlzLiQ9e2F0dHJpYnV0ZVR5cGU6Q1tOLTFdLGF0dHJpYnV0ZU5hbWU6Q1tOXX07YnJlYWs7Y2FzZSAyNDp0aGlzLiQ9e2F0dHJpYnV0ZVR5cGU6Q1tOLTJdLGF0dHJpYnV0ZU5hbWU6Q1tOLTFdLGF0dHJpYnV0ZUtleVR5cGVMaXN0OkNbTl19O2JyZWFrO2Nhc2UgMjU6dGhpcy4kPXthdHRyaWJ1dGVUeXBlOkNbTi0yXSxhdHRyaWJ1dGVOYW1lOkNbTi0xXSxhdHRyaWJ1dGVDb21tZW50OkNbTl19O2JyZWFrO2Nhc2UgMjY6dGhpcy4kPXthdHRyaWJ1dGVUeXBlOkNbTi0zXSxhdHRyaWJ1dGVOYW1lOkNbTi0yXSxhdHRyaWJ1dGVLZXlUeXBlTGlzdDpDW04tMV0sYXR0cmlidXRlQ29tbWVudDpDW05dfTticmVhaztjYXNlIDI3OmNhc2UgMjg6Y2FzZSAzMTp0aGlzLiQ9Q1tOXTticmVhaztjYXNlIDMwOkNbTi0yXS5wdXNoKENbTl0pLHRoaXMuJD1DW04tMl07YnJlYWs7Y2FzZSAzMjp0aGlzLiQ9Q1tOXS5yZXBsYWNlKC8iL2csIiIpO2JyZWFrO2Nhc2UgMzM6dGhpcy4kPXtjYXJkQTpDW05dLHJlbFR5cGU6Q1tOLTFdLGNhcmRCOkNbTi0yXX07YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9ay5DYXJkaW5hbGl0eS5aRVJPX09SX09ORTticmVhaztjYXNlIDM1OnRoaXMuJD1rLkNhcmRpbmFsaXR5LlpFUk9fT1JfTU9SRTticmVhaztjYXNlIDM2OnRoaXMuJD1rLkNhcmRpbmFsaXR5Lk9ORV9PUl9NT1JFO2JyZWFrO2Nhc2UgMzc6dGhpcy4kPWsuQ2FyZGluYWxpdHkuT05MWV9PTkU7YnJlYWs7Y2FzZSAzODp0aGlzLiQ9ay5DYXJkaW5hbGl0eS5NRF9QQVJFTlQ7YnJlYWs7Y2FzZSAzOTp0aGlzLiQ9ay5JZGVudGlmaWNhdGlvbi5OT05fSURFTlRJRllJTkc7YnJlYWs7Y2FzZSA0MDp0aGlzLiQ9ay5JZGVudGlmaWNhdGlvbi5JREVOVElGWUlORzticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHQoZSxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6WzEsNl0sOTo3LDEwOlsxLDhdLDExOjksMjA6ciwyMjpuLDI0OmksMjY6YSwyNzpzLDI4Omx9LHQoZSxbMiw3XSx7MTpbMiwxXX0pLHQoZSxbMiwzXSksezk6MTYsMTE6OSwyMDpyLDIyOm4sMjQ6aSwyNjphLDI3OnMsMjg6bH0sdChlLFsyLDVdKSx0KGUsWzIsNl0pLHQoZSxbMiwxMV0sezEyOjE3LDM5OjIwLDE1OlsxLDE4XSwxODpbMSwxOV0sNDE6dSw0MjpoLDQzOmYsNDQ6ZCw0NTpwfSksezIxOlsxLDI2XX0sezIzOlsxLDI3XX0sezI1OlsxLDI4XX0sdChlLFsyLDE4XSksdChtLFsyLDE5XSksdChtLFsyLDIwXSksdChlLFsyLDRdKSx7MTE6MjksMjc6cywyODpsfSx7MTY6MzAsMTc6WzEsMzFdLDI5OjMyLDMwOjMzLDM0Omd9LHsxMTozNSwyNzpzLDI4Omx9LHs0MDozNiw0NjpbMSwzN10sNDc6WzEsMzhdfSx0KHksWzIsMzRdKSx0KHksWzIsMzVdKSx0KHksWzIsMzZdKSx0KHksWzIsMzddKSx0KHksWzIsMzhdKSx0KGUsWzIsMTVdKSx0KGUsWzIsMTZdKSx0KGUsWzIsMTddKSx7MTM6WzEsMzldfSx7MTc6WzEsNDBdfSx0KGUsWzIsMTBdKSx7MTY6NDEsMTc6WzIsMjFdLDI5OjMyLDMwOjMzLDM0Omd9LHszMTo0MiwzNDpbMSw0M119LHszNDpbMiwyN119LHsxOTpbMSw0NF19LHszOTo0NSw0MTp1LDQyOmgsNDM6Ziw0NDpkLDQ1OnB9LHQodixbMiwzOV0pLHQodixbMiw0MF0pLHsxNDo0NiwyNzpbMSw0OV0sMjg6WzEsNDhdLDQ4OlsxLDQ3XX0sdChlLFsyLDldKSx7MTc6WzIsMjJdfSx0KHgsWzIsMjNdLHszMjo1MCwzMzo1MSwzNTo1MiwzNzpiLDM4Ond9KSx0KFsxNywzNCwzNywzOF0sWzIsMjhdKSx0KGUsWzIsMTRdLHsxNTpbMSw1NV19KSx0KFsyNywyOF0sWzIsMzNdKSx0KGUsWzIsOF0pLHQoZSxbMiw0MV0pLHQoZSxbMiw0Ml0pLHQoZSxbMiw0M10pLHQoeCxbMiwyNF0sezMzOjU2LDM2OlsxLDU3XSwzODp3fSksdCh4LFsyLDI1XSksdChfLFsyLDI5XSksdCh4LFsyLDMyXSksdChfLFsyLDMxXSksezE2OjU4LDE3OlsxLDU5XSwyOTozMiwzMDozMywzNDpnfSx0KHgsWzIsMjZdKSx7MzU6NjAsMzc6Yn0sezE3OlsxLDYxXX0sdChlLFsyLDEzXSksdChfLFsyLDMwXSksdChlLFsyLDEyXSldLGRlZmF1bHRBY3Rpb25zOnszNDpbMiwyN10sNDE6WzIsMjJdfSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oQSxJKXtpZihJLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoQSk7ZWxzZXt2YXIgRD1uZXcgRXJyb3IoQSk7dGhyb3cgRC5oYXNoPUksRH19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihBKXt2YXIgST10aGlzLEQ9WzBdLGs9W10sUj1bbnVsbF0sQz1bXSxPPXRoaXMudGFibGUsTj0iIixQPTAsRj0wLEI9MCxHPTIsej0xLFc9Qy5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxaPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksaj17eXk6e319O2Zvcih2YXIgb2UgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxvZSkmJihqLnl5W29lXT10aGlzLnl5W29lXSk7Wi5zZXRJbnB1dChBLGoueXkpLGoueXkubGV4ZXI9WixqLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBaLnl5bGxvYz4idSImJihaLnl5bGxvYz17fSk7dmFyIEs9Wi55eWxsb2M7Qy5wdXNoKEspO3ZhciBlZT1aLm9wdGlvbnMmJloub3B0aW9ucy5yYW5nZXM7dHlwZW9mIGoueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9ai55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBKKEllKXtELmxlbmd0aD1ELmxlbmd0aC0yKkllLFIubGVuZ3RoPVIubGVuZ3RoLUllLEMubGVuZ3RoPUMubGVuZ3RoLUllfW8oSiwicG9wU3RhY2siKTtmdW5jdGlvbiBIKCl7dmFyIEllO3JldHVybiBJZT1rLnBvcCgpfHxaLmxleCgpfHx6LHR5cGVvZiBJZSE9Im51bWJlciImJihJZSBpbnN0YW5jZW9mIEFycmF5JiYoaz1JZSxJZT1rLnBvcCgpKSxJZT1JLnN5bWJvbHNfW0llXXx8SWUpLEllfW8oSCwibGV4Iik7Zm9yKHZhciBxLFEsYWUsdWUsY2UsdGUsTmU9e30sc2Usa2UsUmUsQ2U7Oyl7aWYoYWU9RFtELmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2FlXT91ZT10aGlzLmRlZmF1bHRBY3Rpb25zW2FlXTooKHE9PT1udWxsfHx0eXBlb2YgcT4idSIpJiYocT1IKCkpLHVlPU9bYWVdJiZPW2FlXVtxXSksdHlwZW9mIHVlPiJ1Inx8IXVlLmxlbmd0aHx8IXVlWzBdKXt2YXIgUGU9IiI7Q2U9W107Zm9yKHNlIGluIE9bYWVdKXRoaXMudGVybWluYWxzX1tzZV0mJnNlPkcmJkNlLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tzZV0rIiciKTtaLnNob3dQb3NpdGlvbj9QZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhQKzEpK2A6CmArWi5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK0NlLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bcV18fHEpKyInIjpQZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhQKzEpKyI6IFVuZXhwZWN0ZWQgIisocT09ej8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1txXXx8cSkrIiciKSx0aGlzLnBhcnNlRXJyb3IoUGUse3RleHQ6Wi5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bcV18fHEsbGluZTpaLnl5bGluZW5vLGxvYzpLLGV4cGVjdGVkOkNlfSl9aWYodWVbMF1pbnN0YW5jZW9mIEFycmF5JiZ1ZS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2FlKyIsIHRva2VuOiAiK3EpO3N3aXRjaCh1ZVswXSl7Y2FzZSAxOkQucHVzaChxKSxSLnB1c2goWi55eXRleHQpLEMucHVzaChaLnl5bGxvYyksRC5wdXNoKHVlWzFdKSxxPW51bGwsUT8ocT1RLFE9bnVsbCk6KEY9Wi55eWxlbmcsTj1aLnl5dGV4dCxQPVoueXlsaW5lbm8sSz1aLnl5bGxvYyxCPjAmJkItLSk7YnJlYWs7Y2FzZSAyOmlmKGtlPXRoaXMucHJvZHVjdGlvbnNfW3VlWzFdXVsxXSxOZS4kPVJbUi5sZW5ndGgta2VdLE5lLl8kPXtmaXJzdF9saW5lOkNbQy5sZW5ndGgtKGtlfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6Q1tDLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOkNbQy5sZW5ndGgtKGtlfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOkNbQy5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGVlJiYoTmUuXyQucmFuZ2U9W0NbQy5sZW5ndGgtKGtlfHwxKV0ucmFuZ2VbMF0sQ1tDLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHRlPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShOZSxbTixGLFAsai55eSx1ZVsxXSxSLENdLmNvbmNhdChXKSksdHlwZW9mIHRlPCJ1IilyZXR1cm4gdGU7a2UmJihEPUQuc2xpY2UoMCwtMSprZSoyKSxSPVIuc2xpY2UoMCwtMSprZSksQz1DLnNsaWNlKDAsLTEqa2UpKSxELnB1c2godGhpcy5wcm9kdWN0aW9uc19bdWVbMV1dWzBdKSxSLnB1c2goTmUuJCksQy5wdXNoKE5lLl8kKSxSZT1PW0RbRC5sZW5ndGgtMl1dW0RbRC5sZW5ndGgtMV1dLEQucHVzaChSZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LEU9ZnVuY3Rpb24oKXt2YXIgUz17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKEksRCl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihJLEQpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKEkpfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24oQSxJKXtyZXR1cm4gdGhpcy55eT1JfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1BLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIEE9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPUEsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPUEsdGhpcy5tYXRjaGVkKz1BO3ZhciBJPUEubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBJPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxBfSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKEEpe3ZhciBJPUEubGVuZ3RoLEQ9QS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PUErdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLUkpLHRoaXMub2Zmc2V0LT1JO3ZhciBrPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLEQubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1ELmxlbmd0aC0xKTt2YXIgUj10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46RD8oRC5sZW5ndGg9PT1rLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkra1trLmxlbmd0aC1ELmxlbmd0aF0ubGVuZ3RoLURbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1JfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W1JbMF0sUlswXSt0aGlzLnl5bGVuZy1JXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24oQSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKEEpKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBBPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oQS5sZW5ndGg+MjA/Ii4uLiI6IiIpK0Euc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgQT10aGlzLm1hdGNoO3JldHVybiBBLmxlbmd0aDwyMCYmKEErPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLUEubGVuZ3RoKSksKEEuc3Vic3RyKDAsMjApKyhBLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIEE9dGhpcy5wYXN0SW5wdXQoKSxJPW5ldyBBcnJheShBLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIEErdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK0krIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKEEsSSl7dmFyIEQsayxSO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihSPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKFIueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksaz1BWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxrJiYodGhpcy55eWxpbmVubys9ay5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjprP2tbay5sZW5ndGgtMV0ubGVuZ3RoLWtbay5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitBWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPUFbMF0sdGhpcy5tYXRjaCs9QVswXSx0aGlzLm1hdGNoZXM9QSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShBWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1BWzBdLEQ9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsSSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxEKXJldHVybiBEO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBDIGluIFIpdGhpc1tDXT1SW0NdO3JldHVybiExfXJldHVybiExfSwidGVzdF9tYXRjaCIpLG5leHQ6byhmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBBLEksRCxrO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIFI9dGhpcy5fY3VycmVudFJ1bGVzKCksQz0wO0M8Ui5sZW5ndGg7QysrKWlmKEQ9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tSW0NdXSksRCYmKCFJfHxEWzBdLmxlbmd0aD5JWzBdLmxlbmd0aCkpe2lmKEk9RCxrPUMsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoQT10aGlzLnRlc3RfbWF0Y2goRCxSW0NdKSxBIT09ITEpcmV0dXJuIEE7aWYodGhpcy5fYmFja3RyYWNrKXtJPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIEk/KEE9dGhpcy50ZXN0X21hdGNoKEksUltrXSksQSE9PSExP0E6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LCJuZXh0IiksbGV4Om8oZnVuY3Rpb24oKXt2YXIgST10aGlzLm5leHQoKTtyZXR1cm4gSXx8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24oSSl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKEkpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIEk9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gST4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sInBvcFN0YXRlIiksX2N1cnJlbnRSdWxlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sIl9jdXJyZW50UnVsZXMiKSx0b3BTdGF0ZTpvKGZ1bmN0aW9uKEkpe3JldHVybiBJPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoSXx8MCksST49MD90aGlzLmNvbmRpdGlvblN0YWNrW0ldOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24oSSl7dGhpcy5iZWdpbihJKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKEksRCxrLFIpe3ZhciBDPVI7c3dpdGNoKGspe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMjI7YnJlYWs7Y2FzZSAxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSAyOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwyNDticmVhaztjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjticmVhaztjYXNlIDQ6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA2OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDc6cmV0dXJuIDEwO2Nhc2UgODpicmVhaztjYXNlIDk6cmV0dXJuIDg7Y2FzZSAxMDpyZXR1cm4gMjg7Y2FzZSAxMTpyZXR1cm4gNDg7Y2FzZSAxMjpyZXR1cm4gNDtjYXNlIDEzOnJldHVybiB0aGlzLmJlZ2luKCJibG9jayIpLDE1O2JyZWFrO2Nhc2UgMTQ6cmV0dXJuIDM2O2Nhc2UgMTU6YnJlYWs7Y2FzZSAxNjpyZXR1cm4gMzc7Y2FzZSAxNzpyZXR1cm4gMzQ7Y2FzZSAxODpyZXR1cm4gMzQ7Y2FzZSAxOTpyZXR1cm4gMzg7Y2FzZSAyMDpicmVhaztjYXNlIDIxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTc7YnJlYWs7Y2FzZSAyMjpyZXR1cm4gRC55eXRleHRbMF07Y2FzZSAyMzpyZXR1cm4gMTg7Y2FzZSAyNDpyZXR1cm4gMTk7Y2FzZSAyNTpyZXR1cm4gNDE7Y2FzZSAyNjpyZXR1cm4gNDM7Y2FzZSAyNzpyZXR1cm4gNDM7Y2FzZSAyODpyZXR1cm4gNDM7Y2FzZSAyOTpyZXR1cm4gNDE7Y2FzZSAzMDpyZXR1cm4gNDE7Y2FzZSAzMTpyZXR1cm4gNDI7Y2FzZSAzMjpyZXR1cm4gNDI7Y2FzZSAzMzpyZXR1cm4gNDI7Y2FzZSAzNDpyZXR1cm4gNDI7Y2FzZSAzNTpyZXR1cm4gNDI7Y2FzZSAzNjpyZXR1cm4gNDM7Y2FzZSAzNzpyZXR1cm4gNDI7Y2FzZSAzODpyZXR1cm4gNDM7Y2FzZSAzOTpyZXR1cm4gNDQ7Y2FzZSA0MDpyZXR1cm4gNDQ7Y2FzZSA0MTpyZXR1cm4gNDQ7Y2FzZSA0MjpyZXR1cm4gNDQ7Y2FzZSA0MzpyZXR1cm4gNDE7Y2FzZSA0NDpyZXR1cm4gNDI7Y2FzZSA0NTpyZXR1cm4gNDM7Y2FzZSA0NjpyZXR1cm4gNDU7Y2FzZSA0NzpyZXR1cm4gNDY7Y2FzZSA0ODpyZXR1cm4gNDc7Y2FzZSA0OTpyZXR1cm4gNDc7Y2FzZSA1MDpyZXR1cm4gNDY7Y2FzZSA1MTpyZXR1cm4gNDY7Y2FzZSA1MjpyZXR1cm4gNDY7Y2FzZSA1MzpyZXR1cm4gMjc7Y2FzZSA1NDpyZXR1cm4gRC55eXRleHRbMF07Y2FzZSA1NTpyZXR1cm4gNn19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86W1xzXSspL2ksL14oPzoiW14iJVxyXG5cdlxiXFxdKyIpL2ksL14oPzoiW14iXSoiKS9pLC9eKD86ZXJEaWFncmFtXGIpL2ksL14oPzpceykvaSwvXig/OiwpL2ksL14oPzpccyspL2ksL14oPzpcYigoPzpQSyl8KD86RkspfCg/OlVLKSlcYikvaSwvXig/OiguKj8pW35dKC4qPykqW35dKS9pLC9eKD86W1wqQS1aYS16X11bQS1aYS16MC05XC1fXFtcXVwoXCldKikvaSwvXig/OiJbXiJdKiIpL2ksL14oPzpbXG5dKykvaSwvXig/Olx9KS9pLC9eKD86LikvaSwvXig/OlxbKS9pLC9eKD86XF0pL2ksL14oPzpvbmUgb3IgemVyb1xiKS9pLC9eKD86b25lIG9yIG1vcmVcYikvaSwvXig/Om9uZSBvciBtYW55XGIpL2ksL14oPzoxXCspL2ksL14oPzpcfG9cYikvaSwvXig/Onplcm8gb3Igb25lXGIpL2ksL14oPzp6ZXJvIG9yIG1vcmVcYikvaSwvXig/Onplcm8gb3IgbWFueVxiKS9pLC9eKD86MFwrKS9pLC9eKD86XH1vXGIpL2ksL14oPzptYW55XCgwXCkpL2ksL14oPzptYW55XCgxXCkpL2ksL14oPzptYW55XGIpL2ksL14oPzpcfVx8KS9pLC9eKD86b25lXGIpL2ksL14oPzpvbmx5IG9uZVxiKS9pLC9eKD86MVxiKS9pLC9eKD86XHxcfCkvaSwvXig/Om9cfCkvaSwvXig/Om9ceykvaSwvXig/Olx8XHspL2ksL14oPzpccyp1XGIpL2ksL14oPzpcLlwuKS9pLC9eKD86LS0pL2ksL14oPzp0b1xiKS9pLC9eKD86b3B0aW9uYWxseSB0b1xiKS9pLC9eKD86XC4tKS9pLC9eKD86LVwuKS9pLC9eKD86W0EtWmEtel9dW0EtWmEtejAtOVwtX10qKS9pLC9eKD86LikvaSwvXig/OiQpL2ldLGNvbmRpdGlvbnM6e2FjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOls1LDZdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbM10saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOlsxXSxpbmNsdXNpdmU6ITF9LGJsb2NrOntydWxlczpbMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjJdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMiw0LDcsOCw5LDEwLDExLDEyLDEzLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIFN9KCk7VC5sZXhlcj1FO2Z1bmN0aW9uIEwoKXt0aGlzLnl5PXt9fXJldHVybiBvKEwsIlBhcnNlciIpLEwucHJvdG90eXBlPVQsVC5QYXJzZXI9TCxuZXcgTH0oKTtERC5wYXJzZXI9REQ7S2llPUREfSk7dmFyIEtkLE5ELGpPZSxLT2UsWmllLFFPZSxaT2UsSk9lLGVQZSx0UGUsSmllLGVhZT1NKCgpPT57InVzZSBzdHJpY3QiO3V0KCk7VnQoKTtBaSgpO0tkPW5ldyBNYXAsTkQ9W10sak9lPXtaRVJPX09SX09ORToiWkVST19PUl9PTkUiLFpFUk9fT1JfTU9SRToiWkVST19PUl9NT1JFIixPTkVfT1JfTU9SRToiT05FX09SX01PUkUiLE9OTFlfT05FOiJPTkxZX09ORSIsTURfUEFSRU5UOiJNRF9QQVJFTlQifSxLT2U9e05PTl9JREVOVElGWUlORzoiTk9OX0lERU5USUZZSU5HIixJREVOVElGWUlORzoiSURFTlRJRllJTkcifSxaaWU9byhmdW5jdGlvbih0LGU9dm9pZCAwKXtyZXR1cm4gS2QuaGFzKHQpPyFLZC5nZXQodCkuYWxpYXMmJmUmJihLZC5nZXQodCkuYWxpYXM9ZSxZLmluZm8oYEFkZCBhbGlhcyAnJHtlfScgdG8gZW50aXR5ICcke3R9J2ApKTooS2Quc2V0KHQse2F0dHJpYnV0ZXM6W10sYWxpYXM6ZX0pLFkuaW5mbygiQWRkZWQgbmV3IGVudGl0eSA6Iix0KSksS2QuZ2V0KHQpfSwiYWRkRW50aXR5IiksUU9lPW8oKCk9PktkLCJnZXRFbnRpdGllcyIpLFpPZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9WmllKHQpLG47Zm9yKG49ZS5sZW5ndGgtMTtuPj0wO24tLSlyLmF0dHJpYnV0ZXMucHVzaChlW25dKSxZLmRlYnVnKCJBZGRlZCBhdHRyaWJ1dGUgIixlW25dLmF0dHJpYnV0ZU5hbWUpfSwiYWRkQXR0cmlidXRlcyIpLEpPZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe2xldCBpPXtlbnRpdHlBOnQscm9sZUE6ZSxlbnRpdHlCOnIscmVsU3BlYzpufTtORC5wdXNoKGkpLFkuZGVidWcoIkFkZGVkIG5ldyByZWxhdGlvbnNoaXAgOiIsaSl9LCJhZGRSZWxhdGlvbnNoaXAiKSxlUGU9bygoKT0+TkQsImdldFJlbGF0aW9uc2hpcHMiKSx0UGU9byhmdW5jdGlvbigpe0tkPW5ldyBNYXAsTkQ9W10sTHIoKX0sImNsZWFyIiksSmllPXtDYXJkaW5hbGl0eTpqT2UsSWRlbnRpZmljYXRpb246S09lLGdldENvbmZpZzpvKCgpPT5wZSgpLmVyLCJnZXRDb25maWciKSxhZGRFbnRpdHk6WmllLGFkZEF0dHJpYnV0ZXM6Wk9lLGdldEVudGl0aWVzOlFPZSxhZGRSZWxhdGlvbnNoaXA6Sk9lLGdldFJlbGF0aW9uc2hpcHM6ZVBlLGNsZWFyOnRQZSxzZXRBY2NUaXRsZTpNcixnZXRBY2NUaXRsZTpCcixzZXRBY2NEZXNjcmlwdGlvbjpGcixnZXRBY2NEZXNjcmlwdGlvbjp6cixzZXREaWFncmFtVGl0bGU6Y24sZ2V0RGlhZ3JhbVRpdGxlOkpyfX0pO3ZhciBGbCxyUGUsUW8sdGFlPU0oKCk9PnsidXNlIHN0cmljdCI7Rmw9e09OTFlfT05FX1NUQVJUOiJPTkxZX09ORV9TVEFSVCIsT05MWV9PTkVfRU5EOiJPTkxZX09ORV9FTkQiLFpFUk9fT1JfT05FX1NUQVJUOiJaRVJPX09SX09ORV9TVEFSVCIsWkVST19PUl9PTkVfRU5EOiJaRVJPX09SX09ORV9FTkQiLE9ORV9PUl9NT1JFX1NUQVJUOiJPTkVfT1JfTU9SRV9TVEFSVCIsT05FX09SX01PUkVfRU5EOiJPTkVfT1JfTU9SRV9FTkQiLFpFUk9fT1JfTU9SRV9TVEFSVDoiWkVST19PUl9NT1JFX1NUQVJUIixaRVJPX09SX01PUkVfRU5EOiJaRVJPX09SX01PUkVfRU5EIixNRF9QQVJFTlRfRU5EOiJNRF9QQVJFTlRfRU5EIixNRF9QQVJFTlRfU1RBUlQ6Ik1EX1BBUkVOVF9TVEFSVCJ9LHJQZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixGbC5NRF9QQVJFTlRfU1RBUlQpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsRmwuTURfUEFSRU5UX0VORCkuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLEZsLk9OTFlfT05FX1NUQVJUKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTgpLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNOSwwIEw5LDE4IE0xNSwwIEwxNSwxOCIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsRmwuT05MWV9PTkVfRU5EKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsOSkuYXR0cigibWFya2VyV2lkdGgiLDE4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTMsMCBMMywxOCBNOSwwIEw5LDE4Iikscj10LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLEZsLlpFUk9fT1JfT05FX1NUQVJUKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMzApLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKSxyLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDIxKS5hdHRyKCJjeSIsOSkuYXR0cigiciIsNiksci5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNOSwwIEw5LDE4Iikscj10LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLEZsLlpFUk9fT1JfT05FX0VORCkuYXR0cigicmVmWCIsMzApLmF0dHIoInJlZlkiLDkpLmF0dHIoIm1hcmtlcldpZHRoIiwzMCkuYXR0cigibWFya2VySGVpZ2h0IiwxOCkuYXR0cigib3JpZW50IiwiYXV0byIpLHIuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjeCIsOSkuYXR0cigiY3kiLDkpLmF0dHIoInIiLDYpLHIuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTIxLDAgTDIxLDE4IiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixGbC5PTkVfT1JfTU9SRV9TVEFSVCkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNDUpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMCwxOCBRIDE4LDAgMzYsMTggUSAxOCwzNiAwLDE4IE00Miw5IEw0MiwyNyIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsRmwuT05FX09SX01PUkVfRU5EKS5hdHRyKCJyZWZYIiwyNykuYXR0cigicmVmWSIsMTgpLmF0dHIoIm1hcmtlcldpZHRoIiw0NSkuYXR0cigibWFya2VySGVpZ2h0IiwzNikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0zLDkgTDMsMjcgTTksMTggUTI3LDAgNDUsMTggUTI3LDM2IDksMTgiKSxyPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsRmwuWkVST19PUl9NT1JFX1NUQVJUKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsMTgpLmF0dHIoIm1hcmtlcldpZHRoIiw1NykuYXR0cigibWFya2VySGVpZ2h0IiwzNikuYXR0cigib3JpZW50IiwiYXV0byIpLHIuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjeCIsNDgpLmF0dHIoImN5IiwxOCkuYXR0cigiciIsNiksci5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMCwxOCBRMTgsMCAzNiwxOCBRMTgsMzYgMCwxOCIpLHI9dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixGbC5aRVJPX09SX01PUkVfRU5EKS5hdHRyKCJyZWZYIiwzOSkuYXR0cigicmVmWSIsMTgpLmF0dHIoIm1hcmtlcldpZHRoIiw1NykuYXR0cigibWFya2VySGVpZ2h0IiwzNikuYXR0cigib3JpZW50IiwiYXV0byIpLHIuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjeCIsOSkuYXR0cigiY3kiLDE4KS5hdHRyKCJyIiw2KSxyLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0yMSwxOCBRMzksMCA1NywxOCBRMzksMzYgMjEsMTgiKX0sImluc2VydE1hcmtlcnMiKSxRbz17RVJNYXJrZXJzOkZsLGluc2VydE1hcmtlcnM6clBlfX0pO3ZhciByYWUsbmFlPU0oKCk9PnsidXNlIHN0cmljdCI7cmFlPS9eKD86WzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzEtNV1bMC05YS1mXXszfS1bODlhYl1bMC05YS1mXXszfS1bMC05YS1mXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwKSQvaX0pO2Z1bmN0aW9uIG5QZSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJzdHJpbmciJiZyYWUudGVzdCh0KX12YXIgaWFlLGFhZT1NKCgpPT57InVzZSBzdHJpY3QiO25hZSgpO28oblBlLCJ2YWxpZGF0ZSIpO2lhZT1uUGV9KTtmdW5jdGlvbiBzYWUodCxlPTApe3JldHVybiB3YVt0W2UrMF1dK3dhW3RbZSsxXV0rd2FbdFtlKzJdXSt3YVt0W2UrM11dKyItIit3YVt0W2UrNF1dK3dhW3RbZSs1XV0rIi0iK3dhW3RbZSs2XV0rd2FbdFtlKzddXSsiLSIrd2FbdFtlKzhdXSt3YVt0W2UrOV1dKyItIit3YVt0W2UrMTBdXSt3YVt0W2UrMTFdXSt3YVt0W2UrMTJdXSt3YVt0W2UrMTNdXSt3YVt0W2UrMTRdXSt3YVt0W2UrMTVdXX12YXIgd2Esb2FlPU0oKCk9PnsidXNlIHN0cmljdCI7d2E9W107Zm9yKGxldCB0PTA7dDwyNTY7Kyt0KXdhLnB1c2goKHQrMjU2KS50b1N0cmluZygxNikuc2xpY2UoMSkpO28oc2FlLCJ1bnNhZmVTdHJpbmdpZnkiKX0pO2Z1bmN0aW9uIGlQZSh0KXtpZighaWFlKHQpKXRocm93IFR5cGVFcnJvcigiSW52YWxpZCBVVUlEIik7bGV0IGUscj1uZXcgVWludDhBcnJheSgxNik7cmV0dXJuIHJbMF09KGU9cGFyc2VJbnQodC5zbGljZSgwLDgpLDE2KSk+Pj4yNCxyWzFdPWU+Pj4xNiYyNTUsclsyXT1lPj4+OCYyNTUsclszXT1lJjI1NSxyWzRdPShlPXBhcnNlSW50KHQuc2xpY2UoOSwxMyksMTYpKT4+Pjgscls1XT1lJjI1NSxyWzZdPShlPXBhcnNlSW50KHQuc2xpY2UoMTQsMTgpLDE2KSk+Pj44LHJbN109ZSYyNTUscls4XT0oZT1wYXJzZUludCh0LnNsaWNlKDE5LDIzKSwxNikpPj4+OCxyWzldPWUmMjU1LHJbMTBdPShlPXBhcnNlSW50KHQuc2xpY2UoMjQsMzYpLDE2KSkvMTA5OTUxMTYyNzc3NiYyNTUsclsxMV09ZS80Mjk0OTY3Mjk2JjI1NSxyWzEyXT1lPj4+MjQmMjU1LHJbMTNdPWU+Pj4xNiYyNTUsclsxNF09ZT4+PjgmMjU1LHJbMTVdPWUmMjU1LHJ9dmFyIGxhZSxjYWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjthYWUoKTtvKGlQZSwicGFyc2UiKTtsYWU9aVBlfSk7ZnVuY3Rpb24gYVBlKHQpe3Q9dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHQpKTtsZXQgZT1bXTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoOysrcillLnB1c2godC5jaGFyQ29kZUF0KHIpKTtyZXR1cm4gZX1mdW5jdGlvbiBSRCh0LGUscil7ZnVuY3Rpb24gbihpLGEscyxsKXt2YXIgdTtpZih0eXBlb2YgaT09InN0cmluZyImJihpPWFQZShpKSksdHlwZW9mIGE9PSJzdHJpbmciJiYoYT1sYWUoYSkpLCgodT1hKT09PW51bGx8fHU9PT12b2lkIDA/dm9pZCAwOnUubGVuZ3RoKSE9PTE2KXRocm93IFR5cGVFcnJvcigiTmFtZXNwYWNlIG11c3QgYmUgYXJyYXktbGlrZSAoMTYgaXRlcmFibGUgaW50ZWdlciB2YWx1ZXMsIDAtMjU1KSIpO2xldCBoPW5ldyBVaW50OEFycmF5KDE2K2kubGVuZ3RoKTtpZihoLnNldChhKSxoLnNldChpLGEubGVuZ3RoKSxoPXIoaCksaFs2XT1oWzZdJjE1fGUsaFs4XT1oWzhdJjYzfDEyOCxzKXtsPWx8fDA7Zm9yKGxldCBmPTA7ZjwxNjsrK2Ypc1tsK2ZdPWhbZl07cmV0dXJuIHN9cmV0dXJuIHNhZShoKX1vKG4sImdlbmVyYXRlVVVJRCIpO3RyeXtuLm5hbWU9dH1jYXRjaHt9cmV0dXJuIG4uRE5TPXNQZSxuLlVSTD1vUGUsbn12YXIgc1BlLG9QZSx1YWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvYWUoKTtjYWUoKTtvKGFQZSwic3RyaW5nVG9CeXRlcyIpO3NQZT0iNmJhN2I4MTAtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4IixvUGU9IjZiYTdiODExLTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOCI7byhSRCwidjM1Iil9KTtmdW5jdGlvbiBsUGUodCxlLHIsbil7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gZSZyXn5lJm47Y2FzZSAxOnJldHVybiBlXnJebjtjYXNlIDI6cmV0dXJuIGUmcl5lJm5eciZuO2Nhc2UgMzpyZXR1cm4gZV5yXm59fWZ1bmN0aW9uIE1EKHQsZSl7cmV0dXJuIHQ8PGV8dD4+PjMyLWV9ZnVuY3Rpb24gY1BlKHQpe2xldCBlPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwzMzk1NDY5NzgyXSxyPVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4NTM3NzUyMF07aWYodHlwZW9mIHQ9PSJzdHJpbmciKXtsZXQgcz11bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQodCkpO3Q9W107Zm9yKGxldCBsPTA7bDxzLmxlbmd0aDsrK2wpdC5wdXNoKHMuY2hhckNvZGVBdChsKSl9ZWxzZSBBcnJheS5pc0FycmF5KHQpfHwodD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSk7dC5wdXNoKDEyOCk7bGV0IG49dC5sZW5ndGgvNCsyLGk9TWF0aC5jZWlsKG4vMTYpLGE9bmV3IEFycmF5KGkpO2ZvcihsZXQgcz0wO3M8aTsrK3Mpe2xldCBsPW5ldyBVaW50MzJBcnJheSgxNik7Zm9yKGxldCB1PTA7dTwxNjsrK3UpbFt1XT10W3MqNjQrdSo0XTw8MjR8dFtzKjY0K3UqNCsxXTw8MTZ8dFtzKjY0K3UqNCsyXTw8OHx0W3MqNjQrdSo0KzNdO2Fbc109bH1hW2ktMV1bMTRdPSh0Lmxlbmd0aC0xKSo4L01hdGgucG93KDIsMzIpLGFbaS0xXVsxNF09TWF0aC5mbG9vcihhW2ktMV1bMTRdKSxhW2ktMV1bMTVdPSh0Lmxlbmd0aC0xKSo4JjQyOTQ5NjcyOTU7Zm9yKGxldCBzPTA7czxpOysrcyl7bGV0IGw9bmV3IFVpbnQzMkFycmF5KDgwKTtmb3IobGV0IG09MDttPDE2OysrbSlsW21dPWFbc11bbV07Zm9yKGxldCBtPTE2O208ODA7KyttKWxbbV09TUQobFttLTNdXmxbbS04XV5sW20tMTRdXmxbbS0xNl0sMSk7bGV0IHU9clswXSxoPXJbMV0sZj1yWzJdLGQ9clszXSxwPXJbNF07Zm9yKGxldCBtPTA7bTw4MDsrK20pe2xldCBnPU1hdGguZmxvb3IobS8yMCkseT1NRCh1LDUpK2xQZShnLGgsZixkKStwK2VbZ10rbFttXT4+PjA7cD1kLGQ9ZixmPU1EKGgsMzApPj4+MCxoPXUsdT15fXJbMF09clswXSt1Pj4+MCxyWzFdPXJbMV0raD4+PjAsclsyXT1yWzJdK2Y+Pj4wLHJbM109clszXStkPj4+MCxyWzRdPXJbNF0rcD4+PjB9cmV0dXJuW3JbMF0+PjI0JjI1NSxyWzBdPj4xNiYyNTUsclswXT4+OCYyNTUsclswXSYyNTUsclsxXT4+MjQmMjU1LHJbMV0+PjE2JjI1NSxyWzFdPj44JjI1NSxyWzFdJjI1NSxyWzJdPj4yNCYyNTUsclsyXT4+MTYmMjU1LHJbMl0+PjgmMjU1LHJbMl0mMjU1LHJbM10+PjI0JjI1NSxyWzNdPj4xNiYyNTUsclszXT4+OCYyNTUsclszXSYyNTUscls0XT4+MjQmMjU1LHJbNF0+PjE2JjI1NSxyWzRdPj44JjI1NSxyWzRdJjI1NV19dmFyIGhhZSxmYWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKGxQZSwiZiIpO28oTUQsIlJPVEwiKTtvKGNQZSwic2hhMSIpO2hhZT1jUGV9KTt2YXIgdVBlLElELGRhZT1NKCgpPT57InVzZSBzdHJpY3QiO3VhZSgpO2ZhZSgpO3VQZT1SRCgidjUiLDgwLGhhZSksSUQ9dVBlfSk7dmFyIHBhZT1NKCgpPT57InVzZSBzdHJpY3QiO2RhZSgpfSk7ZnVuY3Rpb24gYlBlKHQ9IiIsZT0iIil7bGV0IHI9dC5yZXBsYWNlKGhQZSwiIik7cmV0dXJuYCR7Z2FlKGUpfSR7Z2FlKHIpfSR7SUQodCx4UGUpfWB9ZnVuY3Rpb24gZ2FlKHQ9IiIpe3JldHVybiB0Lmxlbmd0aD4wP2Ake3R9LWA6IiJ9dmFyIGhQZSwkaSxlMixmUGUsZFBlLHBQZSxtUGUseWFlLGdQZSxtYWUseVBlLHZQZSx4UGUsdmFlLHhhZT1NKCgpPT57InVzZSBzdHJpY3QiO0dzKCk7cHIoKTtRdigpO1Z0KCk7dXQoKTtocigpO3RhZSgpO2FpKCk7ZnIoKTtwYWUoKTtoUGU9L1teXGRBLVphLXpdKFxXKSovZywkaT17fSxlMj1uZXcgTWFwLGZQZT1vKGZ1bmN0aW9uKHQpe2xldCBlPU9iamVjdC5rZXlzKHQpO2ZvcihsZXQgciBvZiBlKSRpW3JdPXRbcl19LCJzZXRDb25mIiksZFBlPW8oKHQsZSxyKT0+e2xldCBuPSRpLmVudGl0eVBhZGRpbmcvMyxpPSRpLmVudGl0eVBhZGRpbmcvMyxhPSRpLmZvbnRTaXplKi44NSxzPWUubm9kZSgpLmdldEJCb3goKSxsPVtdLHU9ITEsaD0hMSxmPTAsZD0wLHA9MCxtPTAsZz1zLmhlaWdodCtuKjIseT0xO3IuZm9yRWFjaCh3PT57dy5hdHRyaWJ1dGVLZXlUeXBlTGlzdCE9PXZvaWQgMCYmdy5hdHRyaWJ1dGVLZXlUeXBlTGlzdC5sZW5ndGg+MCYmKHU9ITApLHcuYXR0cmlidXRlQ29tbWVudCE9PXZvaWQgMCYmKGg9ITApfSksci5mb3JFYWNoKHc9PntsZXQgXz1gJHtlLm5vZGUoKS5pZH0tYXR0ci0ke3l9YCxUPTAsRT15dSh3LmF0dHJpYnV0ZVR5cGUpLEw9dC5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJlciBlbnRpdHlMYWJlbCIsITApLmF0dHIoImlkIixgJHtffS10eXBlYCkuYXR0cigieCIsMCkuYXR0cigieSIsMCkuc3R5bGUoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuc3R5bGUoInRleHQtYW5jaG9yIiwibGVmdCIpLnN0eWxlKCJmb250LWZhbWlseSIscGUoKS5mb250RmFtaWx5KS5zdHlsZSgiZm9udC1zaXplIixhKyJweCIpLnRleHQoRSksUz10LmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoImVyIGVudGl0eUxhYmVsIiwhMCkuYXR0cigiaWQiLGAke199LW5hbWVgKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5zdHlsZSgiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJsZWZ0Iikuc3R5bGUoImZvbnQtZmFtaWx5IixwZSgpLmZvbnRGYW1pbHkpLnN0eWxlKCJmb250LXNpemUiLGErInB4IikudGV4dCh3LmF0dHJpYnV0ZU5hbWUpLEE9e307QS50bj1MLEEubm49UztsZXQgST1MLm5vZGUoKS5nZXRCQm94KCksRD1TLm5vZGUoKS5nZXRCQm94KCk7aWYoZj1NYXRoLm1heChmLEkud2lkdGgpLGQ9TWF0aC5tYXgoZCxELndpZHRoKSxUPU1hdGgubWF4KEkuaGVpZ2h0LEQuaGVpZ2h0KSx1KXtsZXQgaz13LmF0dHJpYnV0ZUtleVR5cGVMaXN0IT09dm9pZCAwP3cuYXR0cmlidXRlS2V5VHlwZUxpc3Quam9pbigiLCIpOiIiLFI9dC5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJlciBlbnRpdHlMYWJlbCIsITApLmF0dHIoImlkIixgJHtffS1rZXlgKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5zdHlsZSgiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJsZWZ0Iikuc3R5bGUoImZvbnQtZmFtaWx5IixwZSgpLmZvbnRGYW1pbHkpLnN0eWxlKCJmb250LXNpemUiLGErInB4IikudGV4dChrKTtBLmtuPVI7bGV0IEM9Ui5ub2RlKCkuZ2V0QkJveCgpO3A9TWF0aC5tYXgocCxDLndpZHRoKSxUPU1hdGgubWF4KFQsQy5oZWlnaHQpfWlmKGgpe2xldCBrPXQuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgZW50aXR5TGFiZWwiLCEwKS5hdHRyKCJpZCIsYCR7X30tY29tbWVudGApLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnN0eWxlKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsImxlZnQiKS5zdHlsZSgiZm9udC1mYW1pbHkiLHBlKCkuZm9udEZhbWlseSkuc3R5bGUoImZvbnQtc2l6ZSIsYSsicHgiKS50ZXh0KHcuYXR0cmlidXRlQ29tbWVudHx8IiIpO0EuY249aztsZXQgUj1rLm5vZGUoKS5nZXRCQm94KCk7bT1NYXRoLm1heChtLFIud2lkdGgpLFQ9TWF0aC5tYXgoVCxSLmhlaWdodCl9QS5oZWlnaHQ9VCxsLnB1c2goQSksZys9VCtuKjIseSs9MX0pO2xldCB2PTQ7dSYmKHYrPTIpLGgmJih2Kz0yKTtsZXQgeD1mK2QrcCttLGI9e3dpZHRoOk1hdGgubWF4KCRpLm1pbkVudGl0eVdpZHRoLE1hdGgubWF4KHMud2lkdGgrJGkuZW50aXR5UGFkZGluZyoyLHgraSp2KSksaGVpZ2h0OnIubGVuZ3RoPjA/ZzpNYXRoLm1heCgkaS5taW5FbnRpdHlIZWlnaHQscy5oZWlnaHQrJGkuZW50aXR5UGFkZGluZyoyKX07aWYoci5sZW5ndGg+MCl7bGV0IHc9TWF0aC5tYXgoMCwoYi53aWR0aC14LWkqdikvKHYvMikpO2UuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYi53aWR0aC8yKyIsIisobitzLmhlaWdodC8yKSsiKSIpO2xldCBfPXMuaGVpZ2h0K24qMixUPSJhdHRyaWJ1dGVCb3hPZGQiO2wuZm9yRWFjaChFPT57bGV0IEw9XytuK0UuaGVpZ2h0LzI7RS50bi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpKyIsIitMKyIpIik7bGV0IFM9dC5pbnNlcnQoInJlY3QiLCIjIitFLnRuLm5vZGUoKS5pZCkuY2xhc3NlZChgZXIgJHtUfWAsITApLmF0dHIoIngiLDApLmF0dHIoInkiLF8pLmF0dHIoIndpZHRoIixmK2kqMit3KS5hdHRyKCJoZWlnaHQiLEUuaGVpZ2h0K24qMiksQT1wYXJzZUZsb2F0KFMuYXR0cigieCIpKStwYXJzZUZsb2F0KFMuYXR0cigid2lkdGgiKSk7RS5ubi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoQStpKSsiLCIrTCsiKSIpO2xldCBJPXQuaW5zZXJ0KCJyZWN0IiwiIyIrRS5ubi5ub2RlKCkuaWQpLmNsYXNzZWQoYGVyICR7VH1gLCEwKS5hdHRyKCJ4IixBKS5hdHRyKCJ5IixfKS5hdHRyKCJ3aWR0aCIsZCtpKjIrdykuYXR0cigiaGVpZ2h0IixFLmhlaWdodCtuKjIpLEQ9cGFyc2VGbG9hdChJLmF0dHIoIngiKSkrcGFyc2VGbG9hdChJLmF0dHIoIndpZHRoIikpO2lmKHUpe0Uua24uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKEQraSkrIiwiK0wrIikiKTtsZXQgaz10Lmluc2VydCgicmVjdCIsIiMiK0Uua24ubm9kZSgpLmlkKS5jbGFzc2VkKGBlciAke1R9YCwhMCkuYXR0cigieCIsRCkuYXR0cigieSIsXykuYXR0cigid2lkdGgiLHAraSoyK3cpLmF0dHIoImhlaWdodCIsRS5oZWlnaHQrbioyKTtEPXBhcnNlRmxvYXQoay5hdHRyKCJ4IikpK3BhcnNlRmxvYXQoay5hdHRyKCJ3aWR0aCIpKX1oJiYoRS5jbi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoRCtpKSsiLCIrTCsiKSIpLHQuaW5zZXJ0KCJyZWN0IiwiIyIrRS5jbi5ub2RlKCkuaWQpLmNsYXNzZWQoYGVyICR7VH1gLCJ0cnVlIikuYXR0cigieCIsRCkuYXR0cigieSIsXykuYXR0cigid2lkdGgiLG0raSoyK3cpLmF0dHIoImhlaWdodCIsRS5oZWlnaHQrbioyKSksXys9RS5oZWlnaHQrbioyLFQ9VD09PSJhdHRyaWJ1dGVCb3hPZGQiPyJhdHRyaWJ1dGVCb3hFdmVuIjoiYXR0cmlidXRlQm94T2RkIn0pfWVsc2UgYi5oZWlnaHQ9TWF0aC5tYXgoJGkubWluRW50aXR5SGVpZ2h0LGcpLGUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYi53aWR0aC8yKyIsIitiLmhlaWdodC8yKyIpIik7cmV0dXJuIGJ9LCJkcmF3QXR0cmlidXRlcyIpLHBQZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1bLi4uZS5rZXlzKCldLGk7cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbihhKXtsZXQgcz1iUGUoYSwiZW50aXR5Iik7ZTIuc2V0KGEscyk7bGV0IGw9dC5hcHBlbmQoImciKS5hdHRyKCJpZCIscyk7aT1pPT09dm9pZCAwP3M6aTtsZXQgdT0idGV4dC0iK3MsaD1sLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoImVyIGVudGl0eUxhYmVsIiwhMCkuYXR0cigiaWQiLHUpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnN0eWxlKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJmb250LWZhbWlseSIscGUoKS5mb250RmFtaWx5KS5zdHlsZSgiZm9udC1zaXplIiwkaS5mb250U2l6ZSsicHgiKS50ZXh0KGUuZ2V0KGEpLmFsaWFzPz9hKSx7d2lkdGg6ZixoZWlnaHQ6ZH09ZFBlKGwsaCxlLmdldChhKS5hdHRyaWJ1dGVzKSxtPWwuaW5zZXJ0KCJyZWN0IiwiIyIrdSkuY2xhc3NlZCgiZXIgZW50aXR5Qm94IiwhMCkuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLGYpLmF0dHIoImhlaWdodCIsZCkubm9kZSgpLmdldEJCb3goKTtyLnNldE5vZGUocyx7d2lkdGg6bS53aWR0aCxoZWlnaHQ6bS5oZWlnaHQsc2hhcGU6InJlY3QiLGlkOnN9KX0pLGl9LCJkcmF3RW50aXRpZXMiKSxtUGU9byhmdW5jdGlvbih0LGUpe2Uubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3IhPT12b2lkIDAmJmUubm9kZShyKSE9PXZvaWQgMCYmdC5zZWxlY3QoIiMiK3IpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhlLm5vZGUocikueC1lLm5vZGUocikud2lkdGgvMikrIiwiKyhlLm5vZGUocikueS1lLm5vZGUocikuaGVpZ2h0LzIpKyIgKSIpfSl9LCJhZGp1c3RFbnRpdGllcyIpLHlhZT1vKGZ1bmN0aW9uKHQpe3JldHVybih0LmVudGl0eUErdC5yb2xlQSt0LmVudGl0eUIpLnJlcGxhY2UoL1xzL2csIiIpfSwiZ2V0RWRnZU5hbWUiKSxnUGU9byhmdW5jdGlvbih0LGUpe3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24ocil7ZS5zZXRFZGdlKGUyLmdldChyLmVudGl0eUEpLGUyLmdldChyLmVudGl0eUIpLHtyZWxhdGlvbnNoaXA6cn0seWFlKHIpKX0pLHR9LCJhZGRSZWxhdGlvbnNoaXBzIiksbWFlPTAseVBlPW8oZnVuY3Rpb24odCxlLHIsbixpKXttYWUrKztsZXQgYT1yLmVkZ2UoZTIuZ2V0KGUuZW50aXR5QSksZTIuZ2V0KGUuZW50aXR5QikseWFlKGUpKSxzPW5zKCkueChmdW5jdGlvbih5KXtyZXR1cm4geS54fSkueShmdW5jdGlvbih5KXtyZXR1cm4geS55fSkuY3VydmUoUG8pLGw9dC5pbnNlcnQoInBhdGgiLCIjIituKS5jbGFzc2VkKCJlciByZWxhdGlvbnNoaXBMaW5lIiwhMCkuYXR0cigiZCIscyhhLnBvaW50cykpLnN0eWxlKCJzdHJva2UiLCRpLnN0cm9rZSkuc3R5bGUoImZpbGwiLCJub25lIik7ZS5yZWxTcGVjLnJlbFR5cGU9PT1pLmRiLklkZW50aWZpY2F0aW9uLk5PTl9JREVOVElGWUlORyYmbC5hdHRyKCJzdHJva2UtZGFzaGFycmF5IiwiOCw4Iik7bGV0IHU9IiI7c3dpdGNoKCRpLmFycm93TWFya2VyQWJzb2x1dGUmJih1PXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoLHU9dS5yZXBsYWNlKC9cKC9nLCJcXCgiKSx1PXUucmVwbGFjZSgvXCkvZywiXFwpIikpLGUucmVsU3BlYy5jYXJkQSl7Y2FzZSBpLmRiLkNhcmRpbmFsaXR5LlpFUk9fT1JfT05FOmwuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3UrIiMiK1FvLkVSTWFya2Vycy5aRVJPX09SX09ORV9FTkQrIikiKTticmVhaztjYXNlIGkuZGIuQ2FyZGluYWxpdHkuWkVST19PUl9NT1JFOmwuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3UrIiMiK1FvLkVSTWFya2Vycy5aRVJPX09SX01PUkVfRU5EKyIpIik7YnJlYWs7Y2FzZSBpLmRiLkNhcmRpbmFsaXR5Lk9ORV9PUl9NT1JFOmwuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3UrIiMiK1FvLkVSTWFya2Vycy5PTkVfT1JfTU9SRV9FTkQrIikiKTticmVhaztjYXNlIGkuZGIuQ2FyZGluYWxpdHkuT05MWV9PTkU6bC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrdSsiIyIrUW8uRVJNYXJrZXJzLk9OTFlfT05FX0VORCsiKSIpO2JyZWFrO2Nhc2UgaS5kYi5DYXJkaW5hbGl0eS5NRF9QQVJFTlQ6bC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrdSsiIyIrUW8uRVJNYXJrZXJzLk1EX1BBUkVOVF9FTkQrIikiKTticmVha31zd2l0Y2goZS5yZWxTcGVjLmNhcmRCKXtjYXNlIGkuZGIuQ2FyZGluYWxpdHkuWkVST19PUl9PTkU6bC5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIit1KyIjIitRby5FUk1hcmtlcnMuWkVST19PUl9PTkVfU1RBUlQrIikiKTticmVhaztjYXNlIGkuZGIuQ2FyZGluYWxpdHkuWkVST19PUl9NT1JFOmwuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrdSsiIyIrUW8uRVJNYXJrZXJzLlpFUk9fT1JfTU9SRV9TVEFSVCsiKSIpO2JyZWFrO2Nhc2UgaS5kYi5DYXJkaW5hbGl0eS5PTkVfT1JfTU9SRTpsLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3UrIiMiK1FvLkVSTWFya2Vycy5PTkVfT1JfTU9SRV9TVEFSVCsiKSIpO2JyZWFrO2Nhc2UgaS5kYi5DYXJkaW5hbGl0eS5PTkxZX09ORTpsLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3UrIiMiK1FvLkVSTWFya2Vycy5PTkxZX09ORV9TVEFSVCsiKSIpO2JyZWFrO2Nhc2UgaS5kYi5DYXJkaW5hbGl0eS5NRF9QQVJFTlQ6bC5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIit1KyIjIitRby5FUk1hcmtlcnMuTURfUEFSRU5UX1NUQVJUKyIpIik7YnJlYWt9bGV0IGg9bC5ub2RlKCkuZ2V0VG90YWxMZW5ndGgoKSxmPWwubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoaCouNSksZD0icmVsIittYWUscD1lLnJvbGVBLnNwbGl0KC88YnIgP1wvPi9nKSxtPXQuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiZXIgcmVsYXRpb25zaGlwTGFiZWwiLCEwKS5hdHRyKCJpZCIsZCkuYXR0cigieCIsZi54KS5hdHRyKCJ5IixmLnkpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnN0eWxlKCJmb250LWZhbWlseSIscGUoKS5mb250RmFtaWx5KS5zdHlsZSgiZm9udC1zaXplIiwkaS5mb250U2l6ZSsicHgiKTtpZihwLmxlbmd0aD09MSltLnRleHQoZS5yb2xlQSk7ZWxzZXtsZXQgeT0tKHAubGVuZ3RoLTEpKi41O3AuZm9yRWFjaCgodix4KT0+e20uYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLGYueCkuYXR0cigiZHkiLGAke3g9PT0wP3k6MX1lbWApLnRleHQodil9KX1sZXQgZz1tLm5vZGUoKS5nZXRCQm94KCk7dC5pbnNlcnQoInJlY3QiLCIjIitkKS5jbGFzc2VkKCJlciByZWxhdGlvbnNoaXBMYWJlbEJveCIsITApLmF0dHIoIngiLGYueC1nLndpZHRoLzIpLmF0dHIoInkiLGYueS1nLmhlaWdodC8yKS5hdHRyKCJ3aWR0aCIsZy53aWR0aCkuYXR0cigiaGVpZ2h0IixnLmhlaWdodCl9LCJkcmF3UmVsYXRpb25zaGlwRnJvbUxheW91dCIpLHZQZT1vKGZ1bmN0aW9uKHQsZSxyLG4peyRpPXBlKCkuZXIsWS5pbmZvKCJEcmF3aW5nIEVSIGRpYWdyYW0iKTtsZXQgaT1wZSgpLnNlY3VyaXR5TGV2ZWwsYTtpPT09InNhbmRib3giJiYoYT1WZSgiI2kiK2UpKTtsZXQgbD0oaT09PSJzYW5kYm94Ij9WZShhLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOlZlKCJib2R5IikpLnNlbGVjdChgW2lkPScke2V9J11gKTtRby5pbnNlcnRNYXJrZXJzKGwsJGkpO2xldCB1O3U9bmV3IElyKHttdWx0aWdyYXBoOiEwLGRpcmVjdGVkOiEwLGNvbXBvdW5kOiExfSkuc2V0R3JhcGgoe3JhbmtkaXI6JGkubGF5b3V0RGlyZWN0aW9uLG1hcmdpbng6MjAsbWFyZ2lueToyMCxub2Rlc2VwOjEwMCxlZGdlc2VwOjEwMCxyYW5rc2VwOjEwMH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pO2xldCBoPXBQZShsLG4uZGIuZ2V0RW50aXRpZXMoKSx1KSxmPWdQZShuLmRiLmdldFJlbGF0aW9uc2hpcHMoKSx1KTtHdSh1KSxtUGUobCx1KSxmLmZvckVhY2goZnVuY3Rpb24oeSl7eVBlKGwseSx1LGgsbil9KTtsZXQgZD0kaS5kaWFncmFtUGFkZGluZztVdC5pbnNlcnRUaXRsZShsLCJlbnRpdHlUaXRsZVRleHQiLCRpLnRpdGxlVG9wTWFyZ2luLG4uZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpO2xldCBwPWwubm9kZSgpLmdldEJCb3goKSxtPXAud2lkdGgrZCoyLGc9cC5oZWlnaHQrZCoyO1pyKGwsZyxtLCRpLnVzZU1heFdpZHRoKSxsLmF0dHIoInZpZXdCb3giLGAke3AueC1kfSAke3AueS1kfSAke219ICR7Z31gKX0sImRyYXciKSx4UGU9IjI4ZTlmOWRiLTNjOGQtNWFhNS05ZmFmLTQ0Mjg2YWU1OTM3YyI7byhiUGUsImdlbmVyYXRlSWQiKTtvKGdhZSwic3RyV2l0aEh5cGhlbiIpO3ZhZT17c2V0Q29uZjpmUGUsZHJhdzp2UGV9fSk7dmFyIHdQZSxiYWUsd2FlPU0oKCk9PnsidXNlIHN0cmljdCI7d1BlPW8odD0+YAogIC5lbnRpdHlCb3ggewogICAgZmlsbDogJHt0Lm1haW5Ca2d9OwogICAgc3Ryb2tlOiAke3Qubm9kZUJvcmRlcn07CiAgfQoKICAuYXR0cmlidXRlQm94T2RkIHsKICAgIGZpbGw6ICR7dC5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGR9OwogICAgc3Ryb2tlOiAke3Qubm9kZUJvcmRlcn07CiAgfQoKICAuYXR0cmlidXRlQm94RXZlbiB7CiAgICBmaWxsOiAgJHt0LmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW59OwogICAgc3Ryb2tlOiAke3Qubm9kZUJvcmRlcn07CiAgfQoKICAucmVsYXRpb25zaGlwTGFiZWxCb3ggewogICAgZmlsbDogJHt0LnRlcnRpYXJ5Q29sb3J9OwogICAgb3BhY2l0eTogMC43OwogICAgYmFja2dyb3VuZC1jb2xvcjogJHt0LnRlcnRpYXJ5Q29sb3J9OwogICAgICByZWN0IHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KICB9CgogICAgLnJlbGF0aW9uc2hpcExpbmUgewogICAgICBzdHJva2U6ICR7dC5saW5lQ29sb3J9OwogICAgfQoKICAuZW50aXR5VGl0bGVUZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBmb250LXNpemU6IDE4cHg7CiAgICBmaWxsOiAke3QudGV4dENvbG9yfTsKICB9ICAgIAogICNNRF9QQVJFTlRfU1RBUlQgewogICAgZmlsbDogI2Y1ZjVmNSAhaW1wb3J0YW50OwogICAgc3Ryb2tlOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogICAgc3Ryb2tlLXdpZHRoOiAxOwogIH0KICAjTURfUEFSRU5UX0VORCB7CiAgICBmaWxsOiAjZjVmNWY1ICFpbXBvcnRhbnQ7CiAgICBzdHJva2U6ICR7dC5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgICBzdHJva2Utd2lkdGg6IDE7CiAgfQogIApgLCJnZXRTdHlsZXMiKSxiYWU9d1BlfSk7dmFyIFRhZT17fTt2cihUYWUse2RpYWdyYW06KCk9PlRQZX0pO3ZhciBUUGUsa2FlPU0oKCk9PnsidXNlIHN0cmljdCI7UWllKCk7ZWFlKCk7eGFlKCk7d2FlKCk7VFBlPXtwYXJzZXI6S2llLGRiOkppZSxyZW5kZXJlcjp2YWUsc3R5bGVzOmJhZX19KTtmdW5jdGlvbiByaSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJvYmplY3QiJiZ0IT09bnVsbCYmdHlwZW9mIHQuJHR5cGU9PSJzdHJpbmcifWZ1bmN0aW9uIFRhKHQpe3JldHVybiB0eXBlb2YgdD09Im9iamVjdCImJnQhPT1udWxsJiZ0eXBlb2YgdC4kcmVmVGV4dD09InN0cmluZyJ9ZnVuY3Rpb24gT0QodCl7cmV0dXJuIHR5cGVvZiB0PT0ib2JqZWN0IiYmdCE9PW51bGwmJnR5cGVvZiB0Lm5hbWU9PSJzdHJpbmciJiZ0eXBlb2YgdC50eXBlPT0ic3RyaW5nIiYmdHlwZW9mIHQucGF0aD09InN0cmluZyJ9ZnVuY3Rpb24gWmQodCl7cmV0dXJuIHR5cGVvZiB0PT0ib2JqZWN0IiYmdCE9PW51bGwmJnJpKHQuY29udGFpbmVyKSYmVGEodC5yZWZlcmVuY2UpJiZ0eXBlb2YgdC5tZXNzYWdlPT0ic3RyaW5nIn1mdW5jdGlvbiBobyh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJvYmplY3QiJiZ0IT09bnVsbCYmQXJyYXkuaXNBcnJheSh0LmNvbnRlbnQpfWZ1bmN0aW9uIGNmKHQpe3JldHVybiB0eXBlb2YgdD09Im9iamVjdCImJnQhPT1udWxsJiZ0eXBlb2YgdC50b2tlblR5cGU9PSJvYmplY3QifWZ1bmN0aW9uIHQyKHQpe3JldHVybiBobyh0KSYmdHlwZW9mIHQuZnVsbFRleHQ9PSJzdHJpbmcifXZhciBRZCxabz1NKCgpPT57InVzZSBzdHJpY3QiO28ocmksImlzQXN0Tm9kZSIpO28oVGEsImlzUmVmZXJlbmNlIik7byhPRCwiaXNBc3ROb2RlRGVzY3JpcHRpb24iKTtvKFpkLCJpc0xpbmtpbmdFcnJvciIpO1FkPWNsYXNze3N0YXRpY3tvKHRoaXMsIkFic3RyYWN0QXN0UmVmbGVjdGlvbiIpfWNvbnN0cnVjdG9yKCl7dGhpcy5zdWJ0eXBlcz17fSx0aGlzLmFsbFN1YnR5cGVzPXt9fWlzSW5zdGFuY2UoZSxyKXtyZXR1cm4gcmkoZSkmJnRoaXMuaXNTdWJ0eXBlKGUuJHR5cGUscil9aXNTdWJ0eXBlKGUscil7aWYoZT09PXIpcmV0dXJuITA7bGV0IG49dGhpcy5zdWJ0eXBlc1tlXTtufHwobj10aGlzLnN1YnR5cGVzW2VdPXt9KTtsZXQgaT1uW3JdO2lmKGkhPT12b2lkIDApcmV0dXJuIGk7e2xldCBhPXRoaXMuY29tcHV0ZUlzU3VidHlwZShlLHIpO3JldHVybiBuW3JdPWEsYX19Z2V0QWxsU3ViVHlwZXMoZSl7bGV0IHI9dGhpcy5hbGxTdWJ0eXBlc1tlXTtpZihyKXJldHVybiByO3tsZXQgbj10aGlzLmdldEFsbFR5cGVzKCksaT1bXTtmb3IobGV0IGEgb2Ygbil0aGlzLmlzU3VidHlwZShhLGUpJiZpLnB1c2goYSk7cmV0dXJuIHRoaXMuYWxsU3VidHlwZXNbZV09aSxpfX19O28oaG8sImlzQ29tcG9zaXRlQ3N0Tm9kZSIpO28oY2YsImlzTGVhZkNzdE5vZGUiKTtvKHQyLCJpc1Jvb3RDc3ROb2RlIil9KTtmdW5jdGlvbiBDUGUodCl7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj90OnR5cGVvZiB0PiJ1Ij8idW5kZWZpbmVkIjp0eXBlb2YgdC50b1N0cmluZz09ImZ1bmN0aW9uIj90LnRvU3RyaW5nKCk6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIFNUKHQpe3JldHVybiEhdCYmdHlwZW9mIHRbU3ltYm9sLml0ZXJhdG9yXT09ImZ1bmN0aW9uIn1mdW5jdGlvbiB0biguLi50KXtpZih0Lmxlbmd0aD09PTEpe2xldCBlPXRbMF07aWYoZSBpbnN0YW5jZW9mIGZvKXJldHVybiBlO2lmKFNUKGUpKXJldHVybiBuZXcgZm8oKCk9PmVbU3ltYm9sLml0ZXJhdG9yXSgpLHI9PnIubmV4dCgpKTtpZih0eXBlb2YgZS5sZW5ndGg9PSJudW1iZXIiKXJldHVybiBuZXcgZm8oKCk9Pih7aW5kZXg6MH0pLHI9PnIuaW5kZXg8ZS5sZW5ndGg/e2RvbmU6ITEsdmFsdWU6ZVtyLmluZGV4KytdfTpzcyl9cmV0dXJuIHQubGVuZ3RoPjE/bmV3IGZvKCgpPT4oe2NvbGxJbmRleDowLGFyckluZGV4OjB9KSxlPT57ZG97aWYoZS5pdGVyYXRvcil7bGV0IHI9ZS5pdGVyYXRvci5uZXh0KCk7aWYoIXIuZG9uZSlyZXR1cm4gcjtlLml0ZXJhdG9yPXZvaWQgMH1pZihlLmFycmF5KXtpZihlLmFyckluZGV4PGUuYXJyYXkubGVuZ3RoKXJldHVybntkb25lOiExLHZhbHVlOmUuYXJyYXlbZS5hcnJJbmRleCsrXX07ZS5hcnJheT12b2lkIDAsZS5hcnJJbmRleD0wfWlmKGUuY29sbEluZGV4PHQubGVuZ3RoKXtsZXQgcj10W2UuY29sbEluZGV4KytdO1NUKHIpP2UuaXRlcmF0b3I9cltTeW1ib2wuaXRlcmF0b3JdKCk6ciYmdHlwZW9mIHIubGVuZ3RoPT0ibnVtYmVyIiYmKGUuYXJyYXk9cil9fXdoaWxlKGUuaXRlcmF0b3J8fGUuYXJyYXl8fGUuY29sbEluZGV4PHQubGVuZ3RoKTtyZXR1cm4gc3N9KTpyMn12YXIgZm8scjIsc3MsUGMsSm0sJHM9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijtmbz1jbGFzcyB0e3N0YXRpY3tvKHRoaXMsIlN0cmVhbUltcGwiKX1jb25zdHJ1Y3RvcihlLHIpe3RoaXMuc3RhcnRGbj1lLHRoaXMubmV4dEZuPXJ9aXRlcmF0b3IoKXtsZXQgZT17c3RhdGU6dGhpcy5zdGFydEZuKCksbmV4dDpvKCgpPT50aGlzLm5leHRGbihlLnN0YXRlKSwibmV4dCIpLFtTeW1ib2wuaXRlcmF0b3JdOigpPT5lfTtyZXR1cm4gZX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzLml0ZXJhdG9yKCl9aXNFbXB0eSgpe3JldHVybiEhdGhpcy5pdGVyYXRvcigpLm5leHQoKS5kb25lfWNvdW50KCl7bGV0IGU9dGhpcy5pdGVyYXRvcigpLHI9MCxuPWUubmV4dCgpO2Zvcig7IW4uZG9uZTspcisrLG49ZS5uZXh0KCk7cmV0dXJuIHJ9dG9BcnJheSgpe2xldCBlPVtdLHI9dGhpcy5pdGVyYXRvcigpLG47ZG8gbj1yLm5leHQoKSxuLnZhbHVlIT09dm9pZCAwJiZlLnB1c2gobi52YWx1ZSk7d2hpbGUoIW4uZG9uZSk7cmV0dXJuIGV9dG9TZXQoKXtyZXR1cm4gbmV3IFNldCh0aGlzKX10b01hcChlLHIpe2xldCBuPXRoaXMubWFwKGk9PltlP2UoaSk6aSxyP3IoaSk6aV0pO3JldHVybiBuZXcgTWFwKG4pfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuam9pbigpfWNvbmNhdChlKXtsZXQgcj1lW1N5bWJvbC5pdGVyYXRvcl0oKTtyZXR1cm4gbmV3IHQoKCk9Pih7Zmlyc3Q6dGhpcy5zdGFydEZuKCksZmlyc3REb25lOiExfSksbj0+e2xldCBpO2lmKCFuLmZpcnN0RG9uZSl7ZG8gaWYoaT10aGlzLm5leHRGbihuLmZpcnN0KSwhaS5kb25lKXJldHVybiBpO3doaWxlKCFpLmRvbmUpO24uZmlyc3REb25lPSEwfWRvIGlmKGk9ci5uZXh0KCksIWkuZG9uZSlyZXR1cm4gaTt3aGlsZSghaS5kb25lKTtyZXR1cm4gc3N9KX1qb2luKGU9IiwiKXtsZXQgcj10aGlzLml0ZXJhdG9yKCksbj0iIixpLGE9ITE7ZG8gaT1yLm5leHQoKSxpLmRvbmV8fChhJiYobis9ZSksbis9Q1BlKGkudmFsdWUpKSxhPSEwO3doaWxlKCFpLmRvbmUpO3JldHVybiBufWluZGV4T2YoZSxyPTApe2xldCBuPXRoaXMuaXRlcmF0b3IoKSxpPTAsYT1uLm5leHQoKTtmb3IoOyFhLmRvbmU7KXtpZihpPj1yJiZhLnZhbHVlPT09ZSlyZXR1cm4gaTthPW4ubmV4dCgpLGkrK31yZXR1cm4tMX1ldmVyeShlKXtsZXQgcj10aGlzLml0ZXJhdG9yKCksbj1yLm5leHQoKTtmb3IoOyFuLmRvbmU7KXtpZighZShuLnZhbHVlKSlyZXR1cm4hMTtuPXIubmV4dCgpfXJldHVybiEwfXNvbWUoZSl7bGV0IHI9dGhpcy5pdGVyYXRvcigpLG49ci5uZXh0KCk7Zm9yKDshbi5kb25lOyl7aWYoZShuLnZhbHVlKSlyZXR1cm4hMDtuPXIubmV4dCgpfXJldHVybiExfWZvckVhY2goZSl7bGV0IHI9dGhpcy5pdGVyYXRvcigpLG49MCxpPXIubmV4dCgpO2Zvcig7IWkuZG9uZTspZShpLnZhbHVlLG4pLGk9ci5uZXh0KCksbisrfW1hcChlKXtyZXR1cm4gbmV3IHQodGhpcy5zdGFydEZuLHI9PntsZXR7ZG9uZTpuLHZhbHVlOml9PXRoaXMubmV4dEZuKHIpO3JldHVybiBuP3NzOntkb25lOiExLHZhbHVlOmUoaSl9fSl9ZmlsdGVyKGUpe3JldHVybiBuZXcgdCh0aGlzLnN0YXJ0Rm4scj0+e2xldCBuO2RvIGlmKG49dGhpcy5uZXh0Rm4ociksIW4uZG9uZSYmZShuLnZhbHVlKSlyZXR1cm4gbjt3aGlsZSghbi5kb25lKTtyZXR1cm4gc3N9KX1ub25OdWxsYWJsZSgpe3JldHVybiB0aGlzLmZpbHRlcihlPT5lIT1udWxsKX1yZWR1Y2UoZSxyKXtsZXQgbj10aGlzLml0ZXJhdG9yKCksaT1yLGE9bi5uZXh0KCk7Zm9yKDshYS5kb25lOylpPT09dm9pZCAwP2k9YS52YWx1ZTppPWUoaSxhLnZhbHVlKSxhPW4ubmV4dCgpO3JldHVybiBpfXJlZHVjZVJpZ2h0KGUscil7cmV0dXJuIHRoaXMucmVjdXJzaXZlUmVkdWNlKHRoaXMuaXRlcmF0b3IoKSxlLHIpfXJlY3Vyc2l2ZVJlZHVjZShlLHIsbil7bGV0IGk9ZS5uZXh0KCk7aWYoaS5kb25lKXJldHVybiBuO2xldCBhPXRoaXMucmVjdXJzaXZlUmVkdWNlKGUscixuKTtyZXR1cm4gYT09PXZvaWQgMD9pLnZhbHVlOnIoYSxpLnZhbHVlKX1maW5kKGUpe2xldCByPXRoaXMuaXRlcmF0b3IoKSxuPXIubmV4dCgpO2Zvcig7IW4uZG9uZTspe2lmKGUobi52YWx1ZSkpcmV0dXJuIG4udmFsdWU7bj1yLm5leHQoKX19ZmluZEluZGV4KGUpe2xldCByPXRoaXMuaXRlcmF0b3IoKSxuPTAsaT1yLm5leHQoKTtmb3IoOyFpLmRvbmU7KXtpZihlKGkudmFsdWUpKXJldHVybiBuO2k9ci5uZXh0KCksbisrfXJldHVybi0xfWluY2x1ZGVzKGUpe2xldCByPXRoaXMuaXRlcmF0b3IoKSxuPXIubmV4dCgpO2Zvcig7IW4uZG9uZTspe2lmKG4udmFsdWU9PT1lKXJldHVybiEwO249ci5uZXh0KCl9cmV0dXJuITF9ZmxhdE1hcChlKXtyZXR1cm4gbmV3IHQoKCk9Pih7dGhpczp0aGlzLnN0YXJ0Rm4oKX0pLHI9Pntkb3tpZihyLml0ZXJhdG9yKXtsZXQgYT1yLml0ZXJhdG9yLm5leHQoKTtpZihhLmRvbmUpci5pdGVyYXRvcj12b2lkIDA7ZWxzZSByZXR1cm4gYX1sZXR7ZG9uZTpuLHZhbHVlOml9PXRoaXMubmV4dEZuKHIudGhpcyk7aWYoIW4pe2xldCBhPWUoaSk7aWYoU1QoYSkpci5pdGVyYXRvcj1hW1N5bWJvbC5pdGVyYXRvcl0oKTtlbHNlIHJldHVybntkb25lOiExLHZhbHVlOmF9fX13aGlsZShyLml0ZXJhdG9yKTtyZXR1cm4gc3N9KX1mbGF0KGUpe2lmKGU9PT12b2lkIDAmJihlPTEpLGU8PTApcmV0dXJuIHRoaXM7bGV0IHI9ZT4xP3RoaXMuZmxhdChlLTEpOnRoaXM7cmV0dXJuIG5ldyB0KCgpPT4oe3RoaXM6ci5zdGFydEZuKCl9KSxuPT57ZG97aWYobi5pdGVyYXRvcil7bGV0IHM9bi5pdGVyYXRvci5uZXh0KCk7aWYocy5kb25lKW4uaXRlcmF0b3I9dm9pZCAwO2Vsc2UgcmV0dXJuIHN9bGV0e2RvbmU6aSx2YWx1ZTphfT1yLm5leHRGbihuLnRoaXMpO2lmKCFpKWlmKFNUKGEpKW4uaXRlcmF0b3I9YVtTeW1ib2wuaXRlcmF0b3JdKCk7ZWxzZSByZXR1cm57ZG9uZTohMSx2YWx1ZTphfX13aGlsZShuLml0ZXJhdG9yKTtyZXR1cm4gc3N9KX1oZWFkKCl7bGV0IHI9dGhpcy5pdGVyYXRvcigpLm5leHQoKTtpZighci5kb25lKXJldHVybiByLnZhbHVlfXRhaWwoZT0xKXtyZXR1cm4gbmV3IHQoKCk9PntsZXQgcj10aGlzLnN0YXJ0Rm4oKTtmb3IobGV0IG49MDtuPGU7bisrKWlmKHRoaXMubmV4dEZuKHIpLmRvbmUpcmV0dXJuIHI7cmV0dXJuIHJ9LHRoaXMubmV4dEZuKX1saW1pdChlKXtyZXR1cm4gbmV3IHQoKCk9Pih7c2l6ZTowLHN0YXRlOnRoaXMuc3RhcnRGbigpfSkscj0+KHIuc2l6ZSsrLHIuc2l6ZT5lP3NzOnRoaXMubmV4dEZuKHIuc3RhdGUpKSl9ZGlzdGluY3QoZSl7bGV0IHI9bmV3IFNldDtyZXR1cm4gdGhpcy5maWx0ZXIobj0+e2xldCBpPWU/ZShuKTpuO3JldHVybiByLmhhcyhpKT8hMTooci5hZGQoaSksITApfSl9ZXhjbHVkZShlLHIpe2xldCBuPW5ldyBTZXQ7Zm9yKGxldCBpIG9mIGUpe2xldCBhPXI/cihpKTppO24uYWRkKGEpfXJldHVybiB0aGlzLmZpbHRlcihpPT57bGV0IGE9cj9yKGkpOmk7cmV0dXJuIW4uaGFzKGEpfSl9fTtvKENQZSwidG9TdHJpbmciKTtvKFNULCJpc0l0ZXJhYmxlIik7cjI9bmV3IGZvKCgpPT57fSwoKT0+c3MpLHNzPU9iamVjdC5mcmVlemUoe2RvbmU6ITAsdmFsdWU6dm9pZCAwfSk7byh0biwic3RyZWFtIik7UGM9Y2xhc3MgZXh0ZW5kcyBmb3tzdGF0aWN7byh0aGlzLCJUcmVlU3RyZWFtSW1wbCIpfWNvbnN0cnVjdG9yKGUscixuKXtzdXBlcigoKT0+KHtpdGVyYXRvcnM6bj8uaW5jbHVkZVJvb3Q/W1tlXVtTeW1ib2wuaXRlcmF0b3JdKCldOltyKGUpW1N5bWJvbC5pdGVyYXRvcl0oKV0scHJ1bmVkOiExfSksaT0+e2ZvcihpLnBydW5lZCYmKGkuaXRlcmF0b3JzLnBvcCgpLGkucHJ1bmVkPSExKTtpLml0ZXJhdG9ycy5sZW5ndGg+MDspe2xldCBzPWkuaXRlcmF0b3JzW2kuaXRlcmF0b3JzLmxlbmd0aC0xXS5uZXh0KCk7aWYocy5kb25lKWkuaXRlcmF0b3JzLnBvcCgpO2Vsc2UgcmV0dXJuIGkuaXRlcmF0b3JzLnB1c2gocihzLnZhbHVlKVtTeW1ib2wuaXRlcmF0b3JdKCkpLHN9cmV0dXJuIHNzfSl9aXRlcmF0b3IoKXtsZXQgZT17c3RhdGU6dGhpcy5zdGFydEZuKCksbmV4dDpvKCgpPT50aGlzLm5leHRGbihlLnN0YXRlKSwibmV4dCIpLHBydW5lOm8oKCk9PntlLnN0YXRlLnBydW5lZD0hMH0sInBydW5lIiksW1N5bWJvbC5pdGVyYXRvcl06KCk9PmV9O3JldHVybiBlfX07KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoYSl7cmV0dXJuIGEucmVkdWNlKChzLGwpPT5zK2wsMCl9byhlLCJzdW0iKSx0LnN1bT1lO2Z1bmN0aW9uIHIoYSl7cmV0dXJuIGEucmVkdWNlKChzLGwpPT5zKmwsMCl9byhyLCJwcm9kdWN0IiksdC5wcm9kdWN0PXI7ZnVuY3Rpb24gbihhKXtyZXR1cm4gYS5yZWR1Y2UoKHMsbCk9Pk1hdGgubWluKHMsbCkpfW8obiwibWluIiksdC5taW49bjtmdW5jdGlvbiBpKGEpe3JldHVybiBhLnJlZHVjZSgocyxsKT0+TWF0aC5tYXgocyxsKSl9byhpLCJtYXgiKSx0Lm1heD1pfSkoSm18fChKbT17fSkpfSk7dmFyIEFUPXt9O3ZyKEFULHtEZWZhdWx0TmFtZVJlZ2V4cDooKT0+Q1QsUmFuZ2VDb21wYXJpc29uOigpPT4kdSxjb21wYXJlUmFuZ2U6KCk9PkFhZSxmaW5kQ29tbWVudE5vZGU6KCk9PnpELGZpbmREZWNsYXJhdGlvbk5vZGVBdE9mZnNldDooKT0+X1BlLGZpbmRMZWFmTm9kZUF0T2Zmc2V0OigpPT5HRCxmaW5kTGVhZk5vZGVCZWZvcmVPZmZzZXQ6KCk9Pl9hZSxmbGF0dGVuQ3N0OigpPT5BUGUsZ2V0SW50ZXJpb3JOb2RlczooKT0+TlBlLGdldE5leHROb2RlOigpPT5MUGUsZ2V0UHJldmlvdXNOb2RlOigpPT5EYWUsZ2V0U3RhcnRsaW5lTm9kZTooKT0+RFBlLGluUmFuZ2U6KCk9PkZELGlzQ2hpbGROb2RlOigpPT5CRCxpc0NvbW1lbnROb2RlOigpPT5QRCxzdHJlYW1Dc3Q6KCk9PkpkLHRvRG9jdW1lbnRTZWdtZW50OigpPT5lMCx0b2tlblRvUmFuZ2U6KCk9PmVnfSk7ZnVuY3Rpb24gSmQodCl7cmV0dXJuIG5ldyBQYyh0LGU9PmhvKGUpP2UuY29udGVudDpbXSx7aW5jbHVkZVJvb3Q6ITB9KX1mdW5jdGlvbiBBUGUodCl7cmV0dXJuIEpkKHQpLmZpbHRlcihjZil9ZnVuY3Rpb24gQkQodCxlKXtmb3IoO3QuY29udGFpbmVyOylpZih0PXQuY29udGFpbmVyLHQ9PT1lKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGVnKHQpe3JldHVybntzdGFydDp7Y2hhcmFjdGVyOnQuc3RhcnRDb2x1bW4tMSxsaW5lOnQuc3RhcnRMaW5lLTF9LGVuZDp7Y2hhcmFjdGVyOnQuZW5kQ29sdW1uLGxpbmU6dC5lbmRMaW5lLTF9fX1mdW5jdGlvbiBlMCh0KXtpZighdClyZXR1cm47bGV0e29mZnNldDplLGVuZDpyLHJhbmdlOm59PXQ7cmV0dXJue3JhbmdlOm4sb2Zmc2V0OmUsZW5kOnIsbGVuZ3RoOnItZX19ZnVuY3Rpb24gQWFlKHQsZSl7aWYodC5lbmQubGluZTxlLnN0YXJ0LmxpbmV8fHQuZW5kLmxpbmU9PT1lLnN0YXJ0LmxpbmUmJnQuZW5kLmNoYXJhY3Rlcjx0LnN0YXJ0LmNoYXJhY3RlcilyZXR1cm4gJHUuQmVmb3JlO2lmKHQuc3RhcnQubGluZT5lLmVuZC5saW5lfHx0LnN0YXJ0LmxpbmU9PT1lLmVuZC5saW5lJiZ0LnN0YXJ0LmNoYXJhY3Rlcj5lLmVuZC5jaGFyYWN0ZXIpcmV0dXJuICR1LkFmdGVyO2xldCByPXQuc3RhcnQubGluZT5lLnN0YXJ0LmxpbmV8fHQuc3RhcnQubGluZT09PWUuc3RhcnQubGluZSYmdC5zdGFydC5jaGFyYWN0ZXI+PWUuc3RhcnQuY2hhcmFjdGVyLG49dC5lbmQubGluZTxlLmVuZC5saW5lfHx0LmVuZC5saW5lPT09ZS5lbmQubGluZSYmdC5lbmQuY2hhcmFjdGVyPD1lLmVuZC5jaGFyYWN0ZXI7cmV0dXJuIHImJm4/JHUuSW5zaWRlOnI/JHUuT3ZlcmxhcEJhY2s6JHUuT3ZlcmxhcEZyb250fWZ1bmN0aW9uIEZEKHQsZSl7cmV0dXJuIEFhZSh0LGUpPiR1LkFmdGVyfWZ1bmN0aW9uIF9QZSh0LGUscj1DVCl7aWYodCl7aWYoZT4wKXtsZXQgbj1lLXQub2Zmc2V0LGk9dC50ZXh0LmNoYXJBdChuKTtyLnRlc3QoaSl8fGUtLX1yZXR1cm4gR0QodCxlKX19ZnVuY3Rpb24gekQodCxlKXtpZih0KXtsZXQgcj1EYWUodCwhMCk7aWYociYmUEQocixlKSlyZXR1cm4gcjtpZih0Mih0KSl7bGV0IG49dC5jb250ZW50LmZpbmRJbmRleChpPT4haS5oaWRkZW4pO2ZvcihsZXQgaT1uLTE7aT49MDtpLS0pe2xldCBhPXQuY29udGVudFtpXTtpZihQRChhLGUpKXJldHVybiBhfX19fWZ1bmN0aW9uIFBEKHQsZSl7cmV0dXJuIGNmKHQpJiZlLmluY2x1ZGVzKHQudG9rZW5UeXBlLm5hbWUpfWZ1bmN0aW9uIEdEKHQsZSl7aWYoY2YodCkpcmV0dXJuIHQ7aWYoaG8odCkpe2xldCByPUxhZSh0LGUsITEpO2lmKHIpcmV0dXJuIEdEKHIsZSl9fWZ1bmN0aW9uIF9hZSh0LGUpe2lmKGNmKHQpKXJldHVybiB0O2lmKGhvKHQpKXtsZXQgcj1MYWUodCxlLCEwKTtpZihyKXJldHVybiBfYWUocixlKX19ZnVuY3Rpb24gTGFlKHQsZSxyKXtsZXQgbj0wLGk9dC5jb250ZW50Lmxlbmd0aC0xLGE7Zm9yKDtuPD1pOyl7bGV0IHM9TWF0aC5mbG9vcigobitpKS8yKSxsPXQuY29udGVudFtzXTtpZihsLm9mZnNldDw9ZSYmbC5lbmQ+ZSlyZXR1cm4gbDtsLmVuZDw9ZT8oYT1yP2w6dm9pZCAwLG49cysxKTppPXMtMX1yZXR1cm4gYX1mdW5jdGlvbiBEYWUodCxlPSEwKXtmb3IoO3QuY29udGFpbmVyOyl7bGV0IHI9dC5jb250YWluZXIsbj1yLmNvbnRlbnQuaW5kZXhPZih0KTtmb3IoO24+MDspe24tLTtsZXQgaT1yLmNvbnRlbnRbbl07aWYoZXx8IWkuaGlkZGVuKXJldHVybiBpfXQ9cn19ZnVuY3Rpb24gTFBlKHQsZT0hMCl7Zm9yKDt0LmNvbnRhaW5lcjspe2xldCByPXQuY29udGFpbmVyLG49ci5jb250ZW50LmluZGV4T2YodCksaT1yLmNvbnRlbnQubGVuZ3RoLTE7Zm9yKDtuPGk7KXtuKys7bGV0IGE9ci5jb250ZW50W25dO2lmKGV8fCFhLmhpZGRlbilyZXR1cm4gYX10PXJ9fWZ1bmN0aW9uIERQZSh0KXtpZih0LnJhbmdlLnN0YXJ0LmNoYXJhY3Rlcj09PTApcmV0dXJuIHQ7bGV0IGU9dC5yYW5nZS5zdGFydC5saW5lLHI9dCxuO2Zvcig7dC5jb250YWluZXI7KXtsZXQgaT10LmNvbnRhaW5lcixhPW4/P2kuY29udGVudC5pbmRleE9mKHQpO2lmKGE9PT0wPyh0PWksbj12b2lkIDApOihuPWEtMSx0PWkuY29udGVudFtuXSksdC5yYW5nZS5zdGFydC5saW5lIT09ZSlicmVhaztyPXR9cmV0dXJuIHJ9ZnVuY3Rpb24gTlBlKHQsZSl7bGV0IHI9UlBlKHQsZSk7cmV0dXJuIHI/ci5wYXJlbnQuY29udGVudC5zbGljZShyLmErMSxyLmIpOltdfWZ1bmN0aW9uIFJQZSh0LGUpe2xldCByPUNhZSh0KSxuPUNhZShlKSxpO2ZvcihsZXQgYT0wO2E8ci5sZW5ndGgmJmE8bi5sZW5ndGg7YSsrKXtsZXQgcz1yW2FdLGw9blthXTtpZihzLnBhcmVudD09PWwucGFyZW50KWk9e3BhcmVudDpzLnBhcmVudCxhOnMuaW5kZXgsYjpsLmluZGV4fTtlbHNlIGJyZWFrfXJldHVybiBpfWZ1bmN0aW9uIENhZSh0KXtsZXQgZT1bXTtmb3IoO3QuY29udGFpbmVyOyl7bGV0IHI9dC5jb250YWluZXIsbj1yLmNvbnRlbnQuaW5kZXhPZih0KTtlLnB1c2goe3BhcmVudDpyLGluZGV4Om59KSx0PXJ9cmV0dXJuIGUucmV2ZXJzZSgpfXZhciAkdSxDVCx6bD1NKCgpPT57InVzZSBzdHJpY3QiO1pvKCk7JHMoKTtvKEpkLCJzdHJlYW1Dc3QiKTtvKEFQZSwiZmxhdHRlbkNzdCIpO28oQkQsImlzQ2hpbGROb2RlIik7byhlZywidG9rZW5Ub1JhbmdlIik7byhlMCwidG9Eb2N1bWVudFNlZ21lbnQiKTsoZnVuY3Rpb24odCl7dFt0LkJlZm9yZT0wXT0iQmVmb3JlIix0W3QuQWZ0ZXI9MV09IkFmdGVyIix0W3QuT3ZlcmxhcEZyb250PTJdPSJPdmVybGFwRnJvbnQiLHRbdC5PdmVybGFwQmFjaz0zXT0iT3ZlcmxhcEJhY2siLHRbdC5JbnNpZGU9NF09Ikluc2lkZSJ9KSgkdXx8KCR1PXt9KSk7byhBYWUsImNvbXBhcmVSYW5nZSIpO28oRkQsImluUmFuZ2UiKTtDVD0vXltcd1xwe0x9XSQvdTtvKF9QZSwiZmluZERlY2xhcmF0aW9uTm9kZUF0T2Zmc2V0Iik7byh6RCwiZmluZENvbW1lbnROb2RlIik7byhQRCwiaXNDb21tZW50Tm9kZSIpO28oR0QsImZpbmRMZWFmTm9kZUF0T2Zmc2V0Iik7byhfYWUsImZpbmRMZWFmTm9kZUJlZm9yZU9mZnNldCIpO28oTGFlLCJiaW5hcnlTZWFyY2giKTtvKERhZSwiZ2V0UHJldmlvdXNOb2RlIik7byhMUGUsImdldE5leHROb2RlIik7byhEUGUsImdldFN0YXJ0bGluZU5vZGUiKTtvKE5QZSwiZ2V0SW50ZXJpb3JOb2RlcyIpO28oUlBlLCJnZXRDb21tb25QYXJlbnQiKTtvKENhZSwiZ2V0UGFyZW50Q2hhaW4iKX0pO2Z1bmN0aW9uIHVmKHQpe3Rocm93IG5ldyBFcnJvcigiRXJyb3IhIFRoZSBpbnB1dCB2YWx1ZSB3YXMgbm90IGhhbmRsZWQuIil9dmFyIHQwLF9UPU0oKCk9PnsidXNlIHN0cmljdCI7dDA9Y2xhc3MgZXh0ZW5kcyBFcnJvcntzdGF0aWN7byh0aGlzLCJFcnJvcldpdGhMb2NhdGlvbiIpfWNvbnN0cnVjdG9yKGUscil7c3VwZXIoZT9gJHtyfSBhdCAke2UucmFuZ2Uuc3RhcnQubGluZX06JHtlLnJhbmdlLnN0YXJ0LmNoYXJhY3Rlcn1gOnIpfX07byh1ZiwiYXNzZXJ0VW5yZWFjaGFibGUiKX0pO3ZhciBvMj17fTt2cihvMix7QWJzdHJhY3RFbGVtZW50OigpPT5WRCxBYnN0cmFjdFJ1bGU6KCk9Pm4yLEFic3RyYWN0VHlwZTooKT0+aTIsQWN0aW9uOigpPT5nTixBbHRlcm5hdGl2ZXM6KCk9PnlOLEFycmF5TGl0ZXJhbDooKT0+VUQsQXJyYXlUeXBlOigpPT5IRCxBc3NpZ25tZW50OigpPT52TixCb29sZWFuTGl0ZXJhbDooKT0+WUQsQ2hhcmFjdGVyUmFuZ2U6KCk9PnhOLENvbmRpdGlvbjooKT0+TFQsQ29uanVuY3Rpb246KCk9PlhELENyb3NzUmVmZXJlbmNlOigpPT53TixEaXNqdW5jdGlvbjooKT0+S0QsRW5kT2ZGaWxlOigpPT5UTixHcmFtbWFyOigpPT5aRCxHcmFtbWFySW1wb3J0OigpPT5SYWUsR3JvdXA6KCk9PkVOLEluZmVycmVkVHlwZTooKT0+SkQsSW50ZXJmYWNlOigpPT5lTixLZXl3b3JkOigpPT5TTixMYW5naXVtR3JhbW1hckFzdFJlZmxlY3Rpb246KCk9PnRnLExhbmdpdW1HcmFtbWFyVGVybWluYWxzOigpPT5NUGUsTmFtZWRBcmd1bWVudDooKT0+TWFlLE5lZ2F0ZWRUb2tlbjooKT0+Q04sTmVnYXRpb246KCk9PnROLE51bWJlckxpdGVyYWw6KCk9Pm5OLFBhcmFtZXRlcjooKT0+aU4sUGFyYW1ldGVyUmVmZXJlbmNlOigpPT5hTixQYXJzZXJSdWxlOigpPT5vTixSZWZlcmVuY2VUeXBlOigpPT5sTixSZWdleFRva2VuOigpPT5fTixSZXR1cm5UeXBlOigpPT5JYWUsUnVsZUNhbGw6KCk9PkROLFNpbXBsZVR5cGU6KCk9PmhOLFN0cmluZ0xpdGVyYWw6KCk9PmZOLFRlcm1pbmFsQWx0ZXJuYXRpdmVzOigpPT5OTixUZXJtaW5hbEdyb3VwOigpPT5NTixUZXJtaW5hbFJ1bGU6KCk9Pk5ULFRlcm1pbmFsUnVsZUNhbGw6KCk9Pk9OLFR5cGU6KCk9PmROLFR5cGVBdHRyaWJ1dGU6KCk9Pk9hZSxUeXBlRGVmaW5pdGlvbjooKT0+JEQsVW5pb25UeXBlOigpPT5wTixVbm9yZGVyZWRHcm91cDooKT0+UE4sVW50aWxUb2tlbjooKT0+Qk4sVmFsdWVMaXRlcmFsOigpPT5EVCxXaWxkY2FyZDooKT0+ek4saXNBYnN0cmFjdEVsZW1lbnQ6KCk9PmEyLGlzQWJzdHJhY3RSdWxlOigpPT5JUGUsaXNBYnN0cmFjdFR5cGU6KCk9Pk9QZSxpc0FjdGlvbjooKT0+VnUsaXNBbHRlcm5hdGl2ZXM6KCk9Pk9ULGlzQXJyYXlMaXRlcmFsOigpPT5HUGUsaXNBcnJheVR5cGU6KCk9PldELGlzQXNzaWdubWVudDooKT0+R2wsaXNCb29sZWFuTGl0ZXJhbDooKT0+cUQsaXNDaGFyYWN0ZXJSYW5nZTooKT0+Yk4saXNDb25kaXRpb246KCk9PlBQZSxpc0Nvbmp1bmN0aW9uOigpPT5qRCxpc0Nyb3NzUmVmZXJlbmNlOigpPT5yMCxpc0Rpc2p1bmN0aW9uOigpPT5RRCxpc0VuZE9mRmlsZTooKT0+a04saXNGZWF0dXJlTmFtZTooKT0+QlBlLGlzR3JhbW1hcjooKT0+JFBlLGlzR3JhbW1hckltcG9ydDooKT0+VlBlLGlzR3JvdXA6KCk9PmhmLGlzSW5mZXJyZWRUeXBlOigpPT5SVCxpc0ludGVyZmFjZTooKT0+TVQsaXNLZXl3b3JkOigpPT5lbCxpc05hbWVkQXJndW1lbnQ6KCk9PlVQZSxpc05lZ2F0ZWRUb2tlbjooKT0+QU4saXNOZWdhdGlvbjooKT0+ck4saXNOdW1iZXJMaXRlcmFsOigpPT5IUGUsaXNQYXJhbWV0ZXI6KCk9PldQZSxpc1BhcmFtZXRlclJlZmVyZW5jZTooKT0+c04saXNQYXJzZXJSdWxlOigpPT5HYSxpc1ByaW1pdGl2ZVR5cGU6KCk9Pk5hZSxpc1JlZmVyZW5jZVR5cGU6KCk9PmNOLGlzUmVnZXhUb2tlbjooKT0+TE4saXNSZXR1cm5UeXBlOigpPT51Tixpc1J1bGVDYWxsOigpPT4kbCxpc1NpbXBsZVR5cGU6KCk9PklULGlzU3RyaW5nTGl0ZXJhbDooKT0+WVBlLGlzVGVybWluYWxBbHRlcm5hdGl2ZXM6KCk9PlJOLGlzVGVybWluYWxHcm91cDooKT0+SU4saXNUZXJtaW5hbFJ1bGU6KCk9PkpvLGlzVGVybWluYWxSdWxlQ2FsbDooKT0+UFQsaXNUeXBlOigpPT5zMixpc1R5cGVBdHRyaWJ1dGU6KCk9PnFQZSxpc1R5cGVEZWZpbml0aW9uOigpPT5GUGUsaXNVbmlvblR5cGU6KCk9Pm1OLGlzVW5vcmRlcmVkR3JvdXA6KCk9PkJULGlzVW50aWxUb2tlbjooKT0+Rk4saXNWYWx1ZUxpdGVyYWw6KCk9PnpQZSxpc1dpbGRjYXJkOigpPT5HTixyZWZsZWN0aW9uOigpPT5scn0pO2Z1bmN0aW9uIElQZSh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LG4yKX1mdW5jdGlvbiBPUGUodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxpMil9ZnVuY3Rpb24gUFBlKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsTFQpfWZ1bmN0aW9uIEJQZSh0KXtyZXR1cm4gTmFlKHQpfHx0PT09ImN1cnJlbnQifHx0PT09ImVudHJ5Inx8dD09PSJleHRlbmRzInx8dD09PSJmYWxzZSJ8fHQ9PT0iZnJhZ21lbnQifHx0PT09ImdyYW1tYXIifHx0PT09ImhpZGRlbiJ8fHQ9PT0iaW1wb3J0Inx8dD09PSJpbnRlcmZhY2UifHx0PT09InJldHVybnMifHx0PT09InRlcm1pbmFsInx8dD09PSJ0cnVlInx8dD09PSJ0eXBlInx8dD09PSJpbmZlciJ8fHQ9PT0iaW5mZXJzInx8dD09PSJ3aXRoInx8dHlwZW9mIHQ9PSJzdHJpbmciJiYvXF4/W19hLXpBLVpdW1x3X10qLy50ZXN0KHQpfWZ1bmN0aW9uIE5hZSh0KXtyZXR1cm4gdD09PSJzdHJpbmcifHx0PT09Im51bWJlciJ8fHQ9PT0iYm9vbGVhbiJ8fHQ9PT0iRGF0ZSJ8fHQ9PT0iYmlnaW50In1mdW5jdGlvbiBGUGUodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCwkRCl9ZnVuY3Rpb24gelBlKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsRFQpfWZ1bmN0aW9uIGEyKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsVkQpfWZ1bmN0aW9uIEdQZSh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LFVEKX1mdW5jdGlvbiBXRCh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LEhEKX1mdW5jdGlvbiBxRCh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LFlEKX1mdW5jdGlvbiBqRCh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LFhEKX1mdW5jdGlvbiBRRCh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LEtEKX1mdW5jdGlvbiAkUGUodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxaRCl9ZnVuY3Rpb24gVlBlKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsUmFlKX1mdW5jdGlvbiBSVCh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LEpEKX1mdW5jdGlvbiBNVCh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LGVOKX1mdW5jdGlvbiBVUGUodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxNYWUpfWZ1bmN0aW9uIHJOKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsdE4pfWZ1bmN0aW9uIEhQZSh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LG5OKX1mdW5jdGlvbiBXUGUodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxpTil9ZnVuY3Rpb24gc04odCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxhTil9ZnVuY3Rpb24gR2EodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxvTil9ZnVuY3Rpb24gY04odCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxsTil9ZnVuY3Rpb24gdU4odCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxJYWUpfWZ1bmN0aW9uIElUKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsaE4pfWZ1bmN0aW9uIFlQZSh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LGZOKX1mdW5jdGlvbiBKbyh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LE5UKX1mdW5jdGlvbiBzMih0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LGROKX1mdW5jdGlvbiBxUGUodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxPYWUpfWZ1bmN0aW9uIG1OKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQscE4pfWZ1bmN0aW9uIFZ1KHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsZ04pfWZ1bmN0aW9uIE9UKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQseU4pfWZ1bmN0aW9uIEdsKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsdk4pfWZ1bmN0aW9uIGJOKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQseE4pfWZ1bmN0aW9uIHIwKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsd04pfWZ1bmN0aW9uIGtOKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsVE4pfWZ1bmN0aW9uIGhmKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsRU4pfWZ1bmN0aW9uIGVsKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsU04pfWZ1bmN0aW9uIEFOKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsQ04pfWZ1bmN0aW9uIExOKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsX04pfWZ1bmN0aW9uICRsKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsRE4pfWZ1bmN0aW9uIFJOKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsTk4pfWZ1bmN0aW9uIElOKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsTU4pfWZ1bmN0aW9uIFBUKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsT04pfWZ1bmN0aW9uIEJUKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsUE4pfWZ1bmN0aW9uIEZOKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsQk4pfWZ1bmN0aW9uIEdOKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsek4pfXZhciBNUGUsbjIsaTIsTFQsJEQsRFQsVkQsVUQsSEQsWUQsWEQsS0QsWkQsUmFlLEpELGVOLE1hZSx0TixuTixpTixhTixvTixsTixJYWUsaE4sZk4sTlQsZE4sT2FlLHBOLGdOLHlOLHZOLHhOLHdOLFROLEVOLFNOLENOLF9OLEROLE5OLE1OLE9OLFBOLEJOLHpOLHRnLGxyLEJjPU0oKCk9PnsidXNlIHN0cmljdCI7Wm8oKTtNUGU9e0lEOi9cXj9bX2EtekEtWl1bXHdfXSovLFNUUklORzovIihcXC58W14iXFxdKSoifCcoXFwufFteJ1xcXSkqJy8sTlVNQkVSOi9OYU58LT8oKFxkKlwuXGQrfFxkKykoW0VlXVsrLV0/XGQrKT98SW5maW5pdHkpLyxSZWdleExpdGVyYWw6L1wvKD8hWyorP10pKD86W15cclxuXFsvXFxdfFxcLnxcWyg/OlteXHJcblxdXFxdfFxcLikqXF0pK1wvW2Etel0qLyxXUzovXHMrLyxNTF9DT01NRU5UOi9cL1wqW1xzXFNdKj9cKlwvLyxTTF9DT01NRU5UOi9cL1wvW15cblxyXSovfSxuMj0iQWJzdHJhY3RSdWxlIjtvKElQZSwiaXNBYnN0cmFjdFJ1bGUiKTtpMj0iQWJzdHJhY3RUeXBlIjtvKE9QZSwiaXNBYnN0cmFjdFR5cGUiKTtMVD0iQ29uZGl0aW9uIjtvKFBQZSwiaXNDb25kaXRpb24iKTtvKEJQZSwiaXNGZWF0dXJlTmFtZSIpO28oTmFlLCJpc1ByaW1pdGl2ZVR5cGUiKTskRD0iVHlwZURlZmluaXRpb24iO28oRlBlLCJpc1R5cGVEZWZpbml0aW9uIik7RFQ9IlZhbHVlTGl0ZXJhbCI7byh6UGUsImlzVmFsdWVMaXRlcmFsIik7VkQ9IkFic3RyYWN0RWxlbWVudCI7byhhMiwiaXNBYnN0cmFjdEVsZW1lbnQiKTtVRD0iQXJyYXlMaXRlcmFsIjtvKEdQZSwiaXNBcnJheUxpdGVyYWwiKTtIRD0iQXJyYXlUeXBlIjtvKFdELCJpc0FycmF5VHlwZSIpO1lEPSJCb29sZWFuTGl0ZXJhbCI7byhxRCwiaXNCb29sZWFuTGl0ZXJhbCIpO1hEPSJDb25qdW5jdGlvbiI7byhqRCwiaXNDb25qdW5jdGlvbiIpO0tEPSJEaXNqdW5jdGlvbiI7byhRRCwiaXNEaXNqdW5jdGlvbiIpO1pEPSJHcmFtbWFyIjtvKCRQZSwiaXNHcmFtbWFyIik7UmFlPSJHcmFtbWFySW1wb3J0IjtvKFZQZSwiaXNHcmFtbWFySW1wb3J0Iik7SkQ9IkluZmVycmVkVHlwZSI7byhSVCwiaXNJbmZlcnJlZFR5cGUiKTtlTj0iSW50ZXJmYWNlIjtvKE1ULCJpc0ludGVyZmFjZSIpO01hZT0iTmFtZWRBcmd1bWVudCI7byhVUGUsImlzTmFtZWRBcmd1bWVudCIpO3ROPSJOZWdhdGlvbiI7byhyTiwiaXNOZWdhdGlvbiIpO25OPSJOdW1iZXJMaXRlcmFsIjtvKEhQZSwiaXNOdW1iZXJMaXRlcmFsIik7aU49IlBhcmFtZXRlciI7byhXUGUsImlzUGFyYW1ldGVyIik7YU49IlBhcmFtZXRlclJlZmVyZW5jZSI7byhzTiwiaXNQYXJhbWV0ZXJSZWZlcmVuY2UiKTtvTj0iUGFyc2VyUnVsZSI7byhHYSwiaXNQYXJzZXJSdWxlIik7bE49IlJlZmVyZW5jZVR5cGUiO28oY04sImlzUmVmZXJlbmNlVHlwZSIpO0lhZT0iUmV0dXJuVHlwZSI7byh1TiwiaXNSZXR1cm5UeXBlIik7aE49IlNpbXBsZVR5cGUiO28oSVQsImlzU2ltcGxlVHlwZSIpO2ZOPSJTdHJpbmdMaXRlcmFsIjtvKFlQZSwiaXNTdHJpbmdMaXRlcmFsIik7TlQ9IlRlcm1pbmFsUnVsZSI7byhKbywiaXNUZXJtaW5hbFJ1bGUiKTtkTj0iVHlwZSI7byhzMiwiaXNUeXBlIik7T2FlPSJUeXBlQXR0cmlidXRlIjtvKHFQZSwiaXNUeXBlQXR0cmlidXRlIik7cE49IlVuaW9uVHlwZSI7byhtTiwiaXNVbmlvblR5cGUiKTtnTj0iQWN0aW9uIjtvKFZ1LCJpc0FjdGlvbiIpO3lOPSJBbHRlcm5hdGl2ZXMiO28oT1QsImlzQWx0ZXJuYXRpdmVzIik7dk49IkFzc2lnbm1lbnQiO28oR2wsImlzQXNzaWdubWVudCIpO3hOPSJDaGFyYWN0ZXJSYW5nZSI7byhiTiwiaXNDaGFyYWN0ZXJSYW5nZSIpO3dOPSJDcm9zc1JlZmVyZW5jZSI7byhyMCwiaXNDcm9zc1JlZmVyZW5jZSIpO1ROPSJFbmRPZkZpbGUiO28oa04sImlzRW5kT2ZGaWxlIik7RU49Ikdyb3VwIjtvKGhmLCJpc0dyb3VwIik7U049IktleXdvcmQiO28oZWwsImlzS2V5d29yZCIpO0NOPSJOZWdhdGVkVG9rZW4iO28oQU4sImlzTmVnYXRlZFRva2VuIik7X049IlJlZ2V4VG9rZW4iO28oTE4sImlzUmVnZXhUb2tlbiIpO0ROPSJSdWxlQ2FsbCI7bygkbCwiaXNSdWxlQ2FsbCIpO05OPSJUZXJtaW5hbEFsdGVybmF0aXZlcyI7byhSTiwiaXNUZXJtaW5hbEFsdGVybmF0aXZlcyIpO01OPSJUZXJtaW5hbEdyb3VwIjtvKElOLCJpc1Rlcm1pbmFsR3JvdXAiKTtPTj0iVGVybWluYWxSdWxlQ2FsbCI7byhQVCwiaXNUZXJtaW5hbFJ1bGVDYWxsIik7UE49IlVub3JkZXJlZEdyb3VwIjtvKEJULCJpc1Vub3JkZXJlZEdyb3VwIik7Qk49IlVudGlsVG9rZW4iO28oRk4sImlzVW50aWxUb2tlbiIpO3pOPSJXaWxkY2FyZCI7byhHTiwiaXNXaWxkY2FyZCIpO3RnPWNsYXNzIGV4dGVuZHMgUWR7c3RhdGlje28odGhpcywiTGFuZ2l1bUdyYW1tYXJBc3RSZWZsZWN0aW9uIil9Z2V0QWxsVHlwZXMoKXtyZXR1cm5bIkFic3RyYWN0RWxlbWVudCIsIkFic3RyYWN0UnVsZSIsIkFic3RyYWN0VHlwZSIsIkFjdGlvbiIsIkFsdGVybmF0aXZlcyIsIkFycmF5TGl0ZXJhbCIsIkFycmF5VHlwZSIsIkFzc2lnbm1lbnQiLCJCb29sZWFuTGl0ZXJhbCIsIkNoYXJhY3RlclJhbmdlIiwiQ29uZGl0aW9uIiwiQ29uanVuY3Rpb24iLCJDcm9zc1JlZmVyZW5jZSIsIkRpc2p1bmN0aW9uIiwiRW5kT2ZGaWxlIiwiR3JhbW1hciIsIkdyYW1tYXJJbXBvcnQiLCJHcm91cCIsIkluZmVycmVkVHlwZSIsIkludGVyZmFjZSIsIktleXdvcmQiLCJOYW1lZEFyZ3VtZW50IiwiTmVnYXRlZFRva2VuIiwiTmVnYXRpb24iLCJOdW1iZXJMaXRlcmFsIiwiUGFyYW1ldGVyIiwiUGFyYW1ldGVyUmVmZXJlbmNlIiwiUGFyc2VyUnVsZSIsIlJlZmVyZW5jZVR5cGUiLCJSZWdleFRva2VuIiwiUmV0dXJuVHlwZSIsIlJ1bGVDYWxsIiwiU2ltcGxlVHlwZSIsIlN0cmluZ0xpdGVyYWwiLCJUZXJtaW5hbEFsdGVybmF0aXZlcyIsIlRlcm1pbmFsR3JvdXAiLCJUZXJtaW5hbFJ1bGUiLCJUZXJtaW5hbFJ1bGVDYWxsIiwiVHlwZSIsIlR5cGVBdHRyaWJ1dGUiLCJUeXBlRGVmaW5pdGlvbiIsIlVuaW9uVHlwZSIsIlVub3JkZXJlZEdyb3VwIiwiVW50aWxUb2tlbiIsIlZhbHVlTGl0ZXJhbCIsIldpbGRjYXJkIl19Y29tcHV0ZUlzU3VidHlwZShlLHIpe3N3aXRjaChlKXtjYXNlIGdOOmNhc2UgeU46Y2FzZSB2TjpjYXNlIHhOOmNhc2Ugd046Y2FzZSBUTjpjYXNlIEVOOmNhc2UgU046Y2FzZSBDTjpjYXNlIF9OOmNhc2UgRE46Y2FzZSBOTjpjYXNlIE1OOmNhc2UgT046Y2FzZSBQTjpjYXNlIEJOOmNhc2Ugek46cmV0dXJuIHRoaXMuaXNTdWJ0eXBlKFZELHIpO2Nhc2UgVUQ6Y2FzZSBuTjpjYXNlIGZOOnJldHVybiB0aGlzLmlzU3VidHlwZShEVCxyKTtjYXNlIEhEOmNhc2UgbE46Y2FzZSBoTjpjYXNlIHBOOnJldHVybiB0aGlzLmlzU3VidHlwZSgkRCxyKTtjYXNlIFlEOnJldHVybiB0aGlzLmlzU3VidHlwZShMVCxyKXx8dGhpcy5pc1N1YnR5cGUoRFQscik7Y2FzZSBYRDpjYXNlIEtEOmNhc2UgdE46Y2FzZSBhTjpyZXR1cm4gdGhpcy5pc1N1YnR5cGUoTFQscik7Y2FzZSBKRDpjYXNlIGVOOmNhc2UgZE46cmV0dXJuIHRoaXMuaXNTdWJ0eXBlKGkyLHIpO2Nhc2Ugb046cmV0dXJuIHRoaXMuaXNTdWJ0eXBlKG4yLHIpfHx0aGlzLmlzU3VidHlwZShpMixyKTtjYXNlIE5UOnJldHVybiB0aGlzLmlzU3VidHlwZShuMixyKTtkZWZhdWx0OnJldHVybiExfX1nZXRSZWZlcmVuY2VUeXBlKGUpe2xldCByPWAke2UuY29udGFpbmVyLiR0eXBlfToke2UucHJvcGVydHl9YDtzd2l0Y2gocil7Y2FzZSJBY3Rpb246dHlwZSI6Y2FzZSJDcm9zc1JlZmVyZW5jZTp0eXBlIjpjYXNlIkludGVyZmFjZTpzdXBlclR5cGVzIjpjYXNlIlBhcnNlclJ1bGU6cmV0dXJuVHlwZSI6Y2FzZSJTaW1wbGVUeXBlOnR5cGVSZWYiOnJldHVybiBpMjtjYXNlIkdyYW1tYXI6aGlkZGVuVG9rZW5zIjpjYXNlIlBhcnNlclJ1bGU6aGlkZGVuVG9rZW5zIjpjYXNlIlJ1bGVDYWxsOnJ1bGUiOnJldHVybiBuMjtjYXNlIkdyYW1tYXI6dXNlZEdyYW1tYXJzIjpyZXR1cm4gWkQ7Y2FzZSJOYW1lZEFyZ3VtZW50OnBhcmFtZXRlciI6Y2FzZSJQYXJhbWV0ZXJSZWZlcmVuY2U6cGFyYW1ldGVyIjpyZXR1cm4gaU47Y2FzZSJUZXJtaW5hbFJ1bGVDYWxsOnJ1bGUiOnJldHVybiBOVDtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgJHtyfSBpcyBub3QgYSB2YWxpZCByZWZlcmVuY2UgaWQuYCl9fWdldFR5cGVNZXRhRGF0YShlKXtzd2l0Y2goZSl7Y2FzZSJBYnN0cmFjdEVsZW1lbnQiOnJldHVybntuYW1lOiJBYnN0cmFjdEVsZW1lbnQiLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJsb29rYWhlYWQifV19O2Nhc2UiQXJyYXlMaXRlcmFsIjpyZXR1cm57bmFtZToiQXJyYXlMaXRlcmFsIixwcm9wZXJ0aWVzOlt7bmFtZToiZWxlbWVudHMiLGRlZmF1bHRWYWx1ZTpbXX1dfTtjYXNlIkFycmF5VHlwZSI6cmV0dXJue25hbWU6IkFycmF5VHlwZSIscHJvcGVydGllczpbe25hbWU6ImVsZW1lbnRUeXBlIn1dfTtjYXNlIkJvb2xlYW5MaXRlcmFsIjpyZXR1cm57bmFtZToiQm9vbGVhbkxpdGVyYWwiLHByb3BlcnRpZXM6W3tuYW1lOiJ0cnVlIixkZWZhdWx0VmFsdWU6ITF9XX07Y2FzZSJDb25qdW5jdGlvbiI6cmV0dXJue25hbWU6IkNvbmp1bmN0aW9uIixwcm9wZXJ0aWVzOlt7bmFtZToibGVmdCJ9LHtuYW1lOiJyaWdodCJ9XX07Y2FzZSJEaXNqdW5jdGlvbiI6cmV0dXJue25hbWU6IkRpc2p1bmN0aW9uIixwcm9wZXJ0aWVzOlt7bmFtZToibGVmdCJ9LHtuYW1lOiJyaWdodCJ9XX07Y2FzZSJHcmFtbWFyIjpyZXR1cm57bmFtZToiR3JhbW1hciIscHJvcGVydGllczpbe25hbWU6ImRlZmluZXNIaWRkZW5Ub2tlbnMiLGRlZmF1bHRWYWx1ZTohMX0se25hbWU6ImhpZGRlblRva2VucyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToiaW1wb3J0cyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToiaW50ZXJmYWNlcyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToiaXNEZWNsYXJlZCIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToibmFtZSJ9LHtuYW1lOiJydWxlcyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToidHlwZXMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6InVzZWRHcmFtbWFycyIsZGVmYXVsdFZhbHVlOltdfV19O2Nhc2UiR3JhbW1hckltcG9ydCI6cmV0dXJue25hbWU6IkdyYW1tYXJJbXBvcnQiLHByb3BlcnRpZXM6W3tuYW1lOiJwYXRoIn1dfTtjYXNlIkluZmVycmVkVHlwZSI6cmV0dXJue25hbWU6IkluZmVycmVkVHlwZSIscHJvcGVydGllczpbe25hbWU6Im5hbWUifV19O2Nhc2UiSW50ZXJmYWNlIjpyZXR1cm57bmFtZToiSW50ZXJmYWNlIixwcm9wZXJ0aWVzOlt7bmFtZToiYXR0cmlidXRlcyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToibmFtZSJ9LHtuYW1lOiJzdXBlclR5cGVzIixkZWZhdWx0VmFsdWU6W119XX07Y2FzZSJOYW1lZEFyZ3VtZW50IjpyZXR1cm57bmFtZToiTmFtZWRBcmd1bWVudCIscHJvcGVydGllczpbe25hbWU6ImNhbGxlZEJ5TmFtZSIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToicGFyYW1ldGVyIn0se25hbWU6InZhbHVlIn1dfTtjYXNlIk5lZ2F0aW9uIjpyZXR1cm57bmFtZToiTmVnYXRpb24iLHByb3BlcnRpZXM6W3tuYW1lOiJ2YWx1ZSJ9XX07Y2FzZSJOdW1iZXJMaXRlcmFsIjpyZXR1cm57bmFtZToiTnVtYmVyTGl0ZXJhbCIscHJvcGVydGllczpbe25hbWU6InZhbHVlIn1dfTtjYXNlIlBhcmFtZXRlciI6cmV0dXJue25hbWU6IlBhcmFtZXRlciIscHJvcGVydGllczpbe25hbWU6Im5hbWUifV19O2Nhc2UiUGFyYW1ldGVyUmVmZXJlbmNlIjpyZXR1cm57bmFtZToiUGFyYW1ldGVyUmVmZXJlbmNlIixwcm9wZXJ0aWVzOlt7bmFtZToicGFyYW1ldGVyIn1dfTtjYXNlIlBhcnNlclJ1bGUiOnJldHVybntuYW1lOiJQYXJzZXJSdWxlIixwcm9wZXJ0aWVzOlt7bmFtZToiZGF0YVR5cGUifSx7bmFtZToiZGVmaW5lc0hpZGRlblRva2VucyIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToiZGVmaW5pdGlvbiJ9LHtuYW1lOiJlbnRyeSIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToiZnJhZ21lbnQiLGRlZmF1bHRWYWx1ZTohMX0se25hbWU6ImhpZGRlblRva2VucyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToiaW5mZXJyZWRUeXBlIn0se25hbWU6Im5hbWUifSx7bmFtZToicGFyYW1ldGVycyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToicmV0dXJuVHlwZSJ9LHtuYW1lOiJ3aWxkY2FyZCIsZGVmYXVsdFZhbHVlOiExfV19O2Nhc2UiUmVmZXJlbmNlVHlwZSI6cmV0dXJue25hbWU6IlJlZmVyZW5jZVR5cGUiLHByb3BlcnRpZXM6W3tuYW1lOiJyZWZlcmVuY2VUeXBlIn1dfTtjYXNlIlJldHVyblR5cGUiOnJldHVybntuYW1lOiJSZXR1cm5UeXBlIixwcm9wZXJ0aWVzOlt7bmFtZToibmFtZSJ9XX07Y2FzZSJTaW1wbGVUeXBlIjpyZXR1cm57bmFtZToiU2ltcGxlVHlwZSIscHJvcGVydGllczpbe25hbWU6InByaW1pdGl2ZVR5cGUifSx7bmFtZToic3RyaW5nVHlwZSJ9LHtuYW1lOiJ0eXBlUmVmIn1dfTtjYXNlIlN0cmluZ0xpdGVyYWwiOnJldHVybntuYW1lOiJTdHJpbmdMaXRlcmFsIixwcm9wZXJ0aWVzOlt7bmFtZToidmFsdWUifV19O2Nhc2UiVGVybWluYWxSdWxlIjpyZXR1cm57bmFtZToiVGVybWluYWxSdWxlIixwcm9wZXJ0aWVzOlt7bmFtZToiZGVmaW5pdGlvbiJ9LHtuYW1lOiJmcmFnbWVudCIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToiaGlkZGVuIixkZWZhdWx0VmFsdWU6ITF9LHtuYW1lOiJuYW1lIn0se25hbWU6InR5cGUifV19O2Nhc2UiVHlwZSI6cmV0dXJue25hbWU6IlR5cGUiLHByb3BlcnRpZXM6W3tuYW1lOiJuYW1lIn0se25hbWU6InR5cGUifV19O2Nhc2UiVHlwZUF0dHJpYnV0ZSI6cmV0dXJue25hbWU6IlR5cGVBdHRyaWJ1dGUiLHByb3BlcnRpZXM6W3tuYW1lOiJkZWZhdWx0VmFsdWUifSx7bmFtZToiaXNPcHRpb25hbCIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToibmFtZSJ9LHtuYW1lOiJ0eXBlIn1dfTtjYXNlIlVuaW9uVHlwZSI6cmV0dXJue25hbWU6IlVuaW9uVHlwZSIscHJvcGVydGllczpbe25hbWU6InR5cGVzIixkZWZhdWx0VmFsdWU6W119XX07Y2FzZSJBY3Rpb24iOnJldHVybntuYW1lOiJBY3Rpb24iLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJmZWF0dXJlIn0se25hbWU6ImluZmVycmVkVHlwZSJ9LHtuYW1lOiJsb29rYWhlYWQifSx7bmFtZToib3BlcmF0b3IifSx7bmFtZToidHlwZSJ9XX07Y2FzZSJBbHRlcm5hdGl2ZXMiOnJldHVybntuYW1lOiJBbHRlcm5hdGl2ZXMiLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJlbGVtZW50cyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToibG9va2FoZWFkIn1dfTtjYXNlIkFzc2lnbm1lbnQiOnJldHVybntuYW1lOiJBc3NpZ25tZW50Iixwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToiZmVhdHVyZSJ9LHtuYW1lOiJsb29rYWhlYWQifSx7bmFtZToib3BlcmF0b3IifSx7bmFtZToidGVybWluYWwifV19O2Nhc2UiQ2hhcmFjdGVyUmFuZ2UiOnJldHVybntuYW1lOiJDaGFyYWN0ZXJSYW5nZSIscHJvcGVydGllczpbe25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6ImxlZnQifSx7bmFtZToibG9va2FoZWFkIn0se25hbWU6InJpZ2h0In1dfTtjYXNlIkNyb3NzUmVmZXJlbmNlIjpyZXR1cm57bmFtZToiQ3Jvc3NSZWZlcmVuY2UiLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJkZXByZWNhdGVkU3ludGF4IixkZWZhdWx0VmFsdWU6ITF9LHtuYW1lOiJsb29rYWhlYWQifSx7bmFtZToidGVybWluYWwifSx7bmFtZToidHlwZSJ9XX07Y2FzZSJFbmRPZkZpbGUiOnJldHVybntuYW1lOiJFbmRPZkZpbGUiLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJsb29rYWhlYWQifV19O2Nhc2UiR3JvdXAiOnJldHVybntuYW1lOiJHcm91cCIscHJvcGVydGllczpbe25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6ImVsZW1lbnRzIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJndWFyZENvbmRpdGlvbiJ9LHtuYW1lOiJsb29rYWhlYWQifV19O2Nhc2UiS2V5d29yZCI6cmV0dXJue25hbWU6IktleXdvcmQiLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJsb29rYWhlYWQifSx7bmFtZToidmFsdWUifV19O2Nhc2UiTmVnYXRlZFRva2VuIjpyZXR1cm57bmFtZToiTmVnYXRlZFRva2VuIixwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToibG9va2FoZWFkIn0se25hbWU6InRlcm1pbmFsIn1dfTtjYXNlIlJlZ2V4VG9rZW4iOnJldHVybntuYW1lOiJSZWdleFRva2VuIixwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToibG9va2FoZWFkIn0se25hbWU6InJlZ2V4In1dfTtjYXNlIlJ1bGVDYWxsIjpyZXR1cm57bmFtZToiUnVsZUNhbGwiLHByb3BlcnRpZXM6W3tuYW1lOiJhcmd1bWVudHMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6Imxvb2thaGVhZCJ9LHtuYW1lOiJydWxlIn1dfTtjYXNlIlRlcm1pbmFsQWx0ZXJuYXRpdmVzIjpyZXR1cm57bmFtZToiVGVybWluYWxBbHRlcm5hdGl2ZXMiLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJlbGVtZW50cyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToibG9va2FoZWFkIn1dfTtjYXNlIlRlcm1pbmFsR3JvdXAiOnJldHVybntuYW1lOiJUZXJtaW5hbEdyb3VwIixwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToiZWxlbWVudHMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6Imxvb2thaGVhZCJ9XX07Y2FzZSJUZXJtaW5hbFJ1bGVDYWxsIjpyZXR1cm57bmFtZToiVGVybWluYWxSdWxlQ2FsbCIscHJvcGVydGllczpbe25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6Imxvb2thaGVhZCJ9LHtuYW1lOiJydWxlIn1dfTtjYXNlIlVub3JkZXJlZEdyb3VwIjpyZXR1cm57bmFtZToiVW5vcmRlcmVkR3JvdXAiLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJlbGVtZW50cyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToibG9va2FoZWFkIn1dfTtjYXNlIlVudGlsVG9rZW4iOnJldHVybntuYW1lOiJVbnRpbFRva2VuIixwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToibG9va2FoZWFkIn0se25hbWU6InRlcm1pbmFsIn1dfTtjYXNlIldpbGRjYXJkIjpyZXR1cm57bmFtZToiV2lsZGNhcmQiLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJsb29rYWhlYWQifV19O2RlZmF1bHQ6cmV0dXJue25hbWU6ZSxwcm9wZXJ0aWVzOltdfX19fSxscj1uZXcgdGd9KTt2YXIgelQ9e307dnIoelQse2Fzc2lnbk1hbmRhdG9yeVByb3BlcnRpZXM6KCk9PlVOLGNvcHlBc3ROb2RlOigpPT5WTixmaW5kTG9jYWxSZWZlcmVuY2VzOigpPT5qUGUsZmluZFJvb3ROb2RlOigpPT5QYWUsZ2V0Q29udGFpbmVyT2ZUeXBlOigpPT5uMCxnZXREb2N1bWVudDooKT0+VmksaGFzQ29udGFpbmVyT2ZUeXBlOigpPT5YUGUsbGlua0NvbnRlbnRUb0NvbnRhaW5lcjooKT0+RlQsc3RyZWFtQWxsQ29udGVudHM6KCk9PkZjLHN0cmVhbUFzdDooKT0+dGwsc3RyZWFtQ29udGVudHM6KCk9PmwyLHN0cmVhbVJlZmVyZW5jZXM6KCk9PnJnfSk7ZnVuY3Rpb24gRlQodCl7Zm9yKGxldFtlLHJdb2YgT2JqZWN0LmVudHJpZXModCkpZS5zdGFydHNXaXRoKCIkIil8fChBcnJheS5pc0FycmF5KHIpP3IuZm9yRWFjaCgobixpKT0+e3JpKG4pJiYobi4kY29udGFpbmVyPXQsbi4kY29udGFpbmVyUHJvcGVydHk9ZSxuLiRjb250YWluZXJJbmRleD1pKX0pOnJpKHIpJiYoci4kY29udGFpbmVyPXQsci4kY29udGFpbmVyUHJvcGVydHk9ZSkpfWZ1bmN0aW9uIG4wKHQsZSl7bGV0IHI9dDtmb3IoO3I7KXtpZihlKHIpKXJldHVybiByO3I9ci4kY29udGFpbmVyfX1mdW5jdGlvbiBYUGUodCxlKXtsZXQgcj10O2Zvcig7cjspe2lmKGUocikpcmV0dXJuITA7cj1yLiRjb250YWluZXJ9cmV0dXJuITF9ZnVuY3Rpb24gVmkodCl7bGV0IHI9UGFlKHQpLiRkb2N1bWVudDtpZighcil0aHJvdyBuZXcgRXJyb3IoIkFTVCBub2RlIGhhcyBubyBkb2N1bWVudC4iKTtyZXR1cm4gcn1mdW5jdGlvbiBQYWUodCl7Zm9yKDt0LiRjb250YWluZXI7KXQ9dC4kY29udGFpbmVyO3JldHVybiB0fWZ1bmN0aW9uIGwyKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJOb2RlIG11c3QgYmUgYW4gQXN0Tm9kZS4iKTtsZXQgcj1lPy5yYW5nZTtyZXR1cm4gbmV3IGZvKCgpPT4oe2tleXM6T2JqZWN0LmtleXModCksa2V5SW5kZXg6MCxhcnJheUluZGV4OjB9KSxuPT57Zm9yKDtuLmtleUluZGV4PG4ua2V5cy5sZW5ndGg7KXtsZXQgaT1uLmtleXNbbi5rZXlJbmRleF07aWYoIWkuc3RhcnRzV2l0aCgiJCIpKXtsZXQgYT10W2ldO2lmKHJpKGEpKXtpZihuLmtleUluZGV4KyssJE4oYSxyKSlyZXR1cm57ZG9uZTohMSx2YWx1ZTphfX1lbHNlIGlmKEFycmF5LmlzQXJyYXkoYSkpe2Zvcig7bi5hcnJheUluZGV4PGEubGVuZ3RoOyl7bGV0IHM9bi5hcnJheUluZGV4KyssbD1hW3NdO2lmKHJpKGwpJiYkTihsLHIpKXJldHVybntkb25lOiExLHZhbHVlOmx9fW4uYXJyYXlJbmRleD0wfX1uLmtleUluZGV4Kyt9cmV0dXJuIHNzfSl9ZnVuY3Rpb24gRmModCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoIlJvb3Qgbm9kZSBtdXN0IGJlIGFuIEFzdE5vZGUuIik7cmV0dXJuIG5ldyBQYyh0LHI9PmwyKHIsZSkpfWZ1bmN0aW9uIHRsKHQsZSl7aWYodCl7aWYoZT8ucmFuZ2UmJiEkTih0LGUucmFuZ2UpKXJldHVybiBuZXcgUGModCwoKT0+W10pfWVsc2UgdGhyb3cgbmV3IEVycm9yKCJSb290IG5vZGUgbXVzdCBiZSBhbiBBc3ROb2RlLiIpO3JldHVybiBuZXcgUGModCxyPT5sMihyLGUpLHtpbmNsdWRlUm9vdDohMH0pfWZ1bmN0aW9uICROKHQsZSl7dmFyIHI7aWYoIWUpcmV0dXJuITA7bGV0IG49KHI9dC4kY3N0Tm9kZSk9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLnJhbmdlO3JldHVybiBuP0ZEKG4sZSk6ITF9ZnVuY3Rpb24gcmcodCl7cmV0dXJuIG5ldyBmbygoKT0+KHtrZXlzOk9iamVjdC5rZXlzKHQpLGtleUluZGV4OjAsYXJyYXlJbmRleDowfSksZT0+e2Zvcig7ZS5rZXlJbmRleDxlLmtleXMubGVuZ3RoOyl7bGV0IHI9ZS5rZXlzW2Uua2V5SW5kZXhdO2lmKCFyLnN0YXJ0c1dpdGgoIiQiKSl7bGV0IG49dFtyXTtpZihUYShuKSlyZXR1cm4gZS5rZXlJbmRleCsrLHtkb25lOiExLHZhbHVlOntyZWZlcmVuY2U6bixjb250YWluZXI6dCxwcm9wZXJ0eTpyfX07aWYoQXJyYXkuaXNBcnJheShuKSl7Zm9yKDtlLmFycmF5SW5kZXg8bi5sZW5ndGg7KXtsZXQgaT1lLmFycmF5SW5kZXgrKyxhPW5baV07aWYoVGEoYSkpcmV0dXJue2RvbmU6ITEsdmFsdWU6e3JlZmVyZW5jZTphLGNvbnRhaW5lcjp0LHByb3BlcnR5OnIsaW5kZXg6aX19fWUuYXJyYXlJbmRleD0wfX1lLmtleUluZGV4Kyt9cmV0dXJuIHNzfSl9ZnVuY3Rpb24galBlKHQsZT1WaSh0KS5wYXJzZVJlc3VsdC52YWx1ZSl7bGV0IHI9W107cmV0dXJuIHRsKGUpLmZvckVhY2gobj0+e3JnKG4pLmZvckVhY2goaT0+e2kucmVmZXJlbmNlLnJlZj09PXQmJnIucHVzaChpLnJlZmVyZW5jZSl9KX0pLHRuKHIpfWZ1bmN0aW9uIFVOKHQsZSl7bGV0IHI9dC5nZXRUeXBlTWV0YURhdGEoZS4kdHlwZSksbj1lO2ZvcihsZXQgaSBvZiByLnByb3BlcnRpZXMpaS5kZWZhdWx0VmFsdWUhPT12b2lkIDAmJm5baS5uYW1lXT09PXZvaWQgMCYmKG5baS5uYW1lXT1CYWUoaS5kZWZhdWx0VmFsdWUpKX1mdW5jdGlvbiBCYWUodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/Wy4uLnQubWFwKEJhZSldOnR9ZnVuY3Rpb24gVk4odCxlKXtsZXQgcj17JHR5cGU6dC4kdHlwZX07Zm9yKGxldFtuLGldb2YgT2JqZWN0LmVudHJpZXModCkpaWYoIW4uc3RhcnRzV2l0aCgiJCIpKWlmKHJpKGkpKXJbbl09Vk4oaSxlKTtlbHNlIGlmKFRhKGkpKXJbbl09ZShyLG4saS4kcmVmTm9kZSxpLiRyZWZUZXh0KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoaSkpe2xldCBhPVtdO2ZvcihsZXQgcyBvZiBpKXJpKHMpP2EucHVzaChWTihzLGUpKTpUYShzKT9hLnB1c2goZShyLG4scy4kcmVmTm9kZSxzLiRyZWZUZXh0KSk6YS5wdXNoKHMpO3Jbbl09YX1lbHNlIHJbbl09aTtyZXR1cm4gRlQocikscn12YXIgb3M9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtabygpOyRzKCk7emwoKTtvKEZULCJsaW5rQ29udGVudFRvQ29udGFpbmVyIik7byhuMCwiZ2V0Q29udGFpbmVyT2ZUeXBlIik7byhYUGUsImhhc0NvbnRhaW5lck9mVHlwZSIpO28oVmksImdldERvY3VtZW50Iik7byhQYWUsImZpbmRSb290Tm9kZSIpO28obDIsInN0cmVhbUNvbnRlbnRzIik7byhGYywic3RyZWFtQWxsQ29udGVudHMiKTtvKHRsLCJzdHJlYW1Bc3QiKTtvKCROLCJpc0FzdE5vZGVJblJhbmdlIik7byhyZywic3RyZWFtUmVmZXJlbmNlcyIpO28oalBlLCJmaW5kTG9jYWxSZWZlcmVuY2VzIik7byhVTiwiYXNzaWduTWFuZGF0b3J5UHJvcGVydGllcyIpO28oQmFlLCJjb3B5RGVmYXVsdFZhbHVlIik7byhWTiwiY29weUFzdE5vZGUiKX0pO2Z1bmN0aW9uIGFyKHQpe3JldHVybiB0LmNoYXJDb2RlQXQoMCl9ZnVuY3Rpb24gR1QodCxlKXtBcnJheS5pc0FycmF5KHQpP3QuZm9yRWFjaChmdW5jdGlvbihyKXtlLnB1c2gocil9KTplLnB1c2godCl9ZnVuY3Rpb24gbmcodCxlKXtpZih0W2VdPT09ITApdGhyb3ciZHVwbGljYXRlIGZsYWcgIitlO2xldCByPXRbZV07dFtlXT0hMH1mdW5jdGlvbiBpMCh0KXtpZih0PT09dm9pZCAwKXRocm93IEVycm9yKCJJbnRlcm5hbCBFcnJvciAtIFNob3VsZCBuZXZlciBnZXQgaGVyZSEiKTtyZXR1cm4hMH1mdW5jdGlvbiBjMigpe3Rocm93IEVycm9yKCJJbnRlcm5hbCBFcnJvciAtIFNob3VsZCBuZXZlciBnZXQgaGVyZSEiKX1mdW5jdGlvbiBITih0KXtyZXR1cm4gdC50eXBlPT09IkNoYXJhY3RlciJ9dmFyIFdOPU0oKCk9PnsidXNlIHN0cmljdCI7byhhciwiY2MiKTtvKEdULCJpbnNlcnRUb1NldCIpO28obmcsImFkZEZsYWciKTtvKGkwLCJBU1NFUlRfRVhJU1RTIik7byhjMiwiQVNTRVJUX05FVkVSX1JFQUNIX0hFUkUiKTtvKEhOLCJpc0NoYXJhY3RlciIpfSk7dmFyIHUyLGgyLFlOLEZhZT1NKCgpPT57InVzZSBzdHJpY3QiO1dOKCk7dTI9W107Zm9yKGxldCB0PWFyKCIwIik7dDw9YXIoIjkiKTt0KyspdTIucHVzaCh0KTtoMj1bYXIoIl8iKV0uY29uY2F0KHUyKTtmb3IobGV0IHQ9YXIoImEiKTt0PD1hcigieiIpO3QrKyloMi5wdXNoKHQpO2ZvcihsZXQgdD1hcigiQSIpO3Q8PWFyKCJaIik7dCsrKWgyLnB1c2godCk7WU49W2FyKCIgIiksYXIoIlxmIiksYXIoYApgKSxhcigiXHIiKSxhcigiCSIpLGFyKCJcdiIpLGFyKCIJIiksYXIoIlx4QTAiKSxhcigiXHUxNjgwIiksYXIoIlx1MjAwMCIpLGFyKCJcdTIwMDEiKSxhcigiXHUyMDAyIiksYXIoIlx1MjAwMyIpLGFyKCJcdTIwMDQiKSxhcigiXHUyMDA1IiksYXIoIlx1MjAwNiIpLGFyKCJcdTIwMDciKSxhcigiXHUyMDA4IiksYXIoIlx1MjAwOSIpLGFyKCJcdTIwMEEiKSxhcigiXHUyMDI4IiksYXIoIlx1MjAyOSIpLGFyKCJcdTIwMkYiKSxhcigiXHUyMDVGIiksYXIoIlx1MzAwMCIpLGFyKCJcdUZFRkYiKV19KTt2YXIgS1BlLCRULFFQZSxhMCx6YWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtXTigpO0ZhZSgpO0tQZT0vWzAtOWEtZkEtRl0vLCRUPS9bMC05XS8sUVBlPS9bMS05XS8sYTA9Y2xhc3N7c3RhdGlje28odGhpcywiUmVnRXhwUGFyc2VyIil9Y29uc3RydWN0b3IoKXt0aGlzLmlkeD0wLHRoaXMuaW5wdXQ9IiIsdGhpcy5ncm91cElkeD0wfXNhdmVTdGF0ZSgpe3JldHVybntpZHg6dGhpcy5pZHgsaW5wdXQ6dGhpcy5pbnB1dCxncm91cElkeDp0aGlzLmdyb3VwSWR4fX1yZXN0b3JlU3RhdGUoZSl7dGhpcy5pZHg9ZS5pZHgsdGhpcy5pbnB1dD1lLmlucHV0LHRoaXMuZ3JvdXBJZHg9ZS5ncm91cElkeH1wYXR0ZXJuKGUpe3RoaXMuaWR4PTAsdGhpcy5pbnB1dD1lLHRoaXMuZ3JvdXBJZHg9MCx0aGlzLmNvbnN1bWVDaGFyKCIvIik7bGV0IHI9dGhpcy5kaXNqdW5jdGlvbigpO3RoaXMuY29uc3VtZUNoYXIoIi8iKTtsZXQgbj17dHlwZToiRmxhZ3MiLGxvYzp7YmVnaW46dGhpcy5pZHgsZW5kOmUubGVuZ3RofSxnbG9iYWw6ITEsaWdub3JlQ2FzZTohMSxtdWx0aUxpbmU6ITEsdW5pY29kZTohMSxzdGlja3k6ITF9O2Zvcig7dGhpcy5pc1JlZ0V4cEZsYWcoKTspc3dpdGNoKHRoaXMucG9wQ2hhcigpKXtjYXNlImciOm5nKG4sImdsb2JhbCIpO2JyZWFrO2Nhc2UiaSI6bmcobiwiaWdub3JlQ2FzZSIpO2JyZWFrO2Nhc2UibSI6bmcobiwibXVsdGlMaW5lIik7YnJlYWs7Y2FzZSJ1IjpuZyhuLCJ1bmljb2RlIik7YnJlYWs7Y2FzZSJ5IjpuZyhuLCJzdGlja3kiKTticmVha31pZih0aGlzLmlkeCE9PXRoaXMuaW5wdXQubGVuZ3RoKXRocm93IEVycm9yKCJSZWR1bmRhbnQgaW5wdXQ6ICIrdGhpcy5pbnB1dC5zdWJzdHJpbmcodGhpcy5pZHgpKTtyZXR1cm57dHlwZToiUGF0dGVybiIsZmxhZ3M6bix2YWx1ZTpyLGxvYzp0aGlzLmxvYygwKX19ZGlzanVuY3Rpb24oKXtsZXQgZT1bXSxyPXRoaXMuaWR4O2ZvcihlLnB1c2godGhpcy5hbHRlcm5hdGl2ZSgpKTt0aGlzLnBlZWtDaGFyKCk9PT0ifCI7KXRoaXMuY29uc3VtZUNoYXIoInwiKSxlLnB1c2godGhpcy5hbHRlcm5hdGl2ZSgpKTtyZXR1cm57dHlwZToiRGlzanVuY3Rpb24iLHZhbHVlOmUsbG9jOnRoaXMubG9jKHIpfX1hbHRlcm5hdGl2ZSgpe2xldCBlPVtdLHI9dGhpcy5pZHg7Zm9yKDt0aGlzLmlzVGVybSgpOyllLnB1c2godGhpcy50ZXJtKCkpO3JldHVybnt0eXBlOiJBbHRlcm5hdGl2ZSIsdmFsdWU6ZSxsb2M6dGhpcy5sb2Mocil9fXRlcm0oKXtyZXR1cm4gdGhpcy5pc0Fzc2VydGlvbigpP3RoaXMuYXNzZXJ0aW9uKCk6dGhpcy5hdG9tKCl9YXNzZXJ0aW9uKCl7bGV0IGU9dGhpcy5pZHg7c3dpdGNoKHRoaXMucG9wQ2hhcigpKXtjYXNlIl4iOnJldHVybnt0eXBlOiJTdGFydEFuY2hvciIsbG9jOnRoaXMubG9jKGUpfTtjYXNlIiQiOnJldHVybnt0eXBlOiJFbmRBbmNob3IiLGxvYzp0aGlzLmxvYyhlKX07Y2FzZSJcXCI6c3dpdGNoKHRoaXMucG9wQ2hhcigpKXtjYXNlImIiOnJldHVybnt0eXBlOiJXb3JkQm91bmRhcnkiLGxvYzp0aGlzLmxvYyhlKX07Y2FzZSJCIjpyZXR1cm57dHlwZToiTm9uV29yZEJvdW5kYXJ5Iixsb2M6dGhpcy5sb2MoZSl9fXRocm93IEVycm9yKCJJbnZhbGlkIEFzc2VydGlvbiBFc2NhcGUiKTtjYXNlIigiOnRoaXMuY29uc3VtZUNoYXIoIj8iKTtsZXQgcjtzd2l0Y2godGhpcy5wb3BDaGFyKCkpe2Nhc2UiPSI6cj0iTG9va2FoZWFkIjticmVhaztjYXNlIiEiOnI9Ik5lZ2F0aXZlTG9va2FoZWFkIjticmVha31pMChyKTtsZXQgbj10aGlzLmRpc2p1bmN0aW9uKCk7cmV0dXJuIHRoaXMuY29uc3VtZUNoYXIoIikiKSx7dHlwZTpyLHZhbHVlOm4sbG9jOnRoaXMubG9jKGUpfX1yZXR1cm4gYzIoKX1xdWFudGlmaWVyKGU9ITEpe2xldCByLG49dGhpcy5pZHg7c3dpdGNoKHRoaXMucG9wQ2hhcigpKXtjYXNlIioiOnI9e2F0TGVhc3Q6MCxhdE1vc3Q6MS8wfTticmVhaztjYXNlIisiOnI9e2F0TGVhc3Q6MSxhdE1vc3Q6MS8wfTticmVhaztjYXNlIj8iOnI9e2F0TGVhc3Q6MCxhdE1vc3Q6MX07YnJlYWs7Y2FzZSJ7IjpsZXQgaT10aGlzLmludGVnZXJJbmNsdWRpbmdaZXJvKCk7c3dpdGNoKHRoaXMucG9wQ2hhcigpKXtjYXNlIn0iOnI9e2F0TGVhc3Q6aSxhdE1vc3Q6aX07YnJlYWs7Y2FzZSIsIjpsZXQgYTt0aGlzLmlzRGlnaXQoKT8oYT10aGlzLmludGVnZXJJbmNsdWRpbmdaZXJvKCkscj17YXRMZWFzdDppLGF0TW9zdDphfSk6cj17YXRMZWFzdDppLGF0TW9zdDoxLzB9LHRoaXMuY29uc3VtZUNoYXIoIn0iKTticmVha31pZihlPT09ITAmJnI9PT12b2lkIDApcmV0dXJuO2kwKHIpO2JyZWFrfWlmKCEoZT09PSEwJiZyPT09dm9pZCAwKSYmaTAocikpcmV0dXJuIHRoaXMucGVla0NoYXIoMCk9PT0iPyI/KHRoaXMuY29uc3VtZUNoYXIoIj8iKSxyLmdyZWVkeT0hMSk6ci5ncmVlZHk9ITAsci50eXBlPSJRdWFudGlmaWVyIixyLmxvYz10aGlzLmxvYyhuKSxyfWF0b20oKXtsZXQgZSxyPXRoaXMuaWR4O3N3aXRjaCh0aGlzLnBlZWtDaGFyKCkpe2Nhc2UiLiI6ZT10aGlzLmRvdEFsbCgpO2JyZWFrO2Nhc2UiXFwiOmU9dGhpcy5hdG9tRXNjYXBlKCk7YnJlYWs7Y2FzZSJbIjplPXRoaXMuY2hhcmFjdGVyQ2xhc3MoKTticmVhaztjYXNlIigiOmU9dGhpcy5ncm91cCgpO2JyZWFrfXJldHVybiBlPT09dm9pZCAwJiZ0aGlzLmlzUGF0dGVybkNoYXJhY3RlcigpJiYoZT10aGlzLnBhdHRlcm5DaGFyYWN0ZXIoKSksaTAoZSk/KGUubG9jPXRoaXMubG9jKHIpLHRoaXMuaXNRdWFudGlmaWVyKCkmJihlLnF1YW50aWZpZXI9dGhpcy5xdWFudGlmaWVyKCkpLGUpOmMyKCl9ZG90QWxsKCl7cmV0dXJuIHRoaXMuY29uc3VtZUNoYXIoIi4iKSx7dHlwZToiU2V0Iixjb21wbGVtZW50OiEwLHZhbHVlOlthcihgCmApLGFyKCJcciIpLGFyKCJcdTIwMjgiKSxhcigiXHUyMDI5IildfX1hdG9tRXNjYXBlKCl7c3dpdGNoKHRoaXMuY29uc3VtZUNoYXIoIlxcIiksdGhpcy5wZWVrQ2hhcigpKXtjYXNlIjEiOmNhc2UiMiI6Y2FzZSIzIjpjYXNlIjQiOmNhc2UiNSI6Y2FzZSI2IjpjYXNlIjciOmNhc2UiOCI6Y2FzZSI5IjpyZXR1cm4gdGhpcy5kZWNpbWFsRXNjYXBlQXRvbSgpO2Nhc2UiZCI6Y2FzZSJEIjpjYXNlInMiOmNhc2UiUyI6Y2FzZSJ3IjpjYXNlIlciOnJldHVybiB0aGlzLmNoYXJhY3RlckNsYXNzRXNjYXBlKCk7Y2FzZSJmIjpjYXNlIm4iOmNhc2UiciI6Y2FzZSJ0IjpjYXNlInYiOnJldHVybiB0aGlzLmNvbnRyb2xFc2NhcGVBdG9tKCk7Y2FzZSJjIjpyZXR1cm4gdGhpcy5jb250cm9sTGV0dGVyRXNjYXBlQXRvbSgpO2Nhc2UiMCI6cmV0dXJuIHRoaXMubnVsQ2hhcmFjdGVyQXRvbSgpO2Nhc2UieCI6cmV0dXJuIHRoaXMuaGV4RXNjYXBlU2VxdWVuY2VBdG9tKCk7Y2FzZSJ1IjpyZXR1cm4gdGhpcy5yZWdFeHBVbmljb2RlRXNjYXBlU2VxdWVuY2VBdG9tKCk7ZGVmYXVsdDpyZXR1cm4gdGhpcy5pZGVudGl0eUVzY2FwZUF0b20oKX19ZGVjaW1hbEVzY2FwZUF0b20oKXtyZXR1cm57dHlwZToiR3JvdXBCYWNrUmVmZXJlbmNlIix2YWx1ZTp0aGlzLnBvc2l0aXZlSW50ZWdlcigpfX1jaGFyYWN0ZXJDbGFzc0VzY2FwZSgpe2xldCBlLHI9ITE7c3dpdGNoKHRoaXMucG9wQ2hhcigpKXtjYXNlImQiOmU9dTI7YnJlYWs7Y2FzZSJEIjplPXUyLHI9ITA7YnJlYWs7Y2FzZSJzIjplPVlOO2JyZWFrO2Nhc2UiUyI6ZT1ZTixyPSEwO2JyZWFrO2Nhc2UidyI6ZT1oMjticmVhaztjYXNlIlciOmU9aDIscj0hMDticmVha31yZXR1cm4gaTAoZSk/e3R5cGU6IlNldCIsdmFsdWU6ZSxjb21wbGVtZW50OnJ9OmMyKCl9Y29udHJvbEVzY2FwZUF0b20oKXtsZXQgZTtzd2l0Y2godGhpcy5wb3BDaGFyKCkpe2Nhc2UiZiI6ZT1hcigiXGYiKTticmVhaztjYXNlIm4iOmU9YXIoYApgKTticmVhaztjYXNlInIiOmU9YXIoIlxyIik7YnJlYWs7Y2FzZSJ0IjplPWFyKCIJIik7YnJlYWs7Y2FzZSJ2IjplPWFyKCJcdiIpO2JyZWFrfXJldHVybiBpMChlKT97dHlwZToiQ2hhcmFjdGVyIix2YWx1ZTplfTpjMigpfWNvbnRyb2xMZXR0ZXJFc2NhcGVBdG9tKCl7dGhpcy5jb25zdW1lQ2hhcigiYyIpO2xldCBlPXRoaXMucG9wQ2hhcigpO2lmKC9bYS16QS1aXS8udGVzdChlKT09PSExKXRocm93IEVycm9yKCJJbnZhbGlkICIpO3JldHVybnt0eXBlOiJDaGFyYWN0ZXIiLHZhbHVlOmUudG9VcHBlckNhc2UoKS5jaGFyQ29kZUF0KDApLTY0fX1udWxDaGFyYWN0ZXJBdG9tKCl7cmV0dXJuIHRoaXMuY29uc3VtZUNoYXIoIjAiKSx7dHlwZToiQ2hhcmFjdGVyIix2YWx1ZTphcigiXDAiKX19aGV4RXNjYXBlU2VxdWVuY2VBdG9tKCl7cmV0dXJuIHRoaXMuY29uc3VtZUNoYXIoIngiKSx0aGlzLnBhcnNlSGV4RGlnaXRzKDIpfXJlZ0V4cFVuaWNvZGVFc2NhcGVTZXF1ZW5jZUF0b20oKXtyZXR1cm4gdGhpcy5jb25zdW1lQ2hhcigidSIpLHRoaXMucGFyc2VIZXhEaWdpdHMoNCl9aWRlbnRpdHlFc2NhcGVBdG9tKCl7bGV0IGU9dGhpcy5wb3BDaGFyKCk7cmV0dXJue3R5cGU6IkNoYXJhY3RlciIsdmFsdWU6YXIoZSl9fWNsYXNzUGF0dGVybkNoYXJhY3RlckF0b20oKXtzd2l0Y2godGhpcy5wZWVrQ2hhcigpKXtjYXNlYApgOmNhc2UiXHIiOmNhc2UiXHUyMDI4IjpjYXNlIlx1MjAyOSI6Y2FzZSJcXCI6Y2FzZSJdIjp0aHJvdyBFcnJvcigiVEJEIik7ZGVmYXVsdDpsZXQgZT10aGlzLnBvcENoYXIoKTtyZXR1cm57dHlwZToiQ2hhcmFjdGVyIix2YWx1ZTphcihlKX19fWNoYXJhY3RlckNsYXNzKCl7bGV0IGU9W10scj0hMTtmb3IodGhpcy5jb25zdW1lQ2hhcigiWyIpLHRoaXMucGVla0NoYXIoMCk9PT0iXiImJih0aGlzLmNvbnN1bWVDaGFyKCJeIikscj0hMCk7dGhpcy5pc0NsYXNzQXRvbSgpOyl7bGV0IG49dGhpcy5jbGFzc0F0b20oKSxpPW4udHlwZT09PSJDaGFyYWN0ZXIiO2lmKEhOKG4pJiZ0aGlzLmlzUmFuZ2VEYXNoKCkpe3RoaXMuY29uc3VtZUNoYXIoIi0iKTtsZXQgYT10aGlzLmNsYXNzQXRvbSgpLHM9YS50eXBlPT09IkNoYXJhY3RlciI7aWYoSE4oYSkpe2lmKGEudmFsdWU8bi52YWx1ZSl0aHJvdyBFcnJvcigiUmFuZ2Ugb3V0IG9mIG9yZGVyIGluIGNoYXJhY3RlciBjbGFzcyIpO2UucHVzaCh7ZnJvbTpuLnZhbHVlLHRvOmEudmFsdWV9KX1lbHNlIEdUKG4udmFsdWUsZSksZS5wdXNoKGFyKCItIikpLEdUKGEudmFsdWUsZSl9ZWxzZSBHVChuLnZhbHVlLGUpfXJldHVybiB0aGlzLmNvbnN1bWVDaGFyKCJdIikse3R5cGU6IlNldCIsY29tcGxlbWVudDpyLHZhbHVlOmV9fWNsYXNzQXRvbSgpe3N3aXRjaCh0aGlzLnBlZWtDaGFyKCkpe2Nhc2UiXSI6Y2FzZWAKYDpjYXNlIlxyIjpjYXNlIlx1MjAyOCI6Y2FzZSJcdTIwMjkiOnRocm93IEVycm9yKCJUQkQiKTtjYXNlIlxcIjpyZXR1cm4gdGhpcy5jbGFzc0VzY2FwZSgpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuY2xhc3NQYXR0ZXJuQ2hhcmFjdGVyQXRvbSgpfX1jbGFzc0VzY2FwZSgpe3N3aXRjaCh0aGlzLmNvbnN1bWVDaGFyKCJcXCIpLHRoaXMucGVla0NoYXIoKSl7Y2FzZSJiIjpyZXR1cm4gdGhpcy5jb25zdW1lQ2hhcigiYiIpLHt0eXBlOiJDaGFyYWN0ZXIiLHZhbHVlOmFyKCJcYiIpfTtjYXNlImQiOmNhc2UiRCI6Y2FzZSJzIjpjYXNlIlMiOmNhc2UidyI6Y2FzZSJXIjpyZXR1cm4gdGhpcy5jaGFyYWN0ZXJDbGFzc0VzY2FwZSgpO2Nhc2UiZiI6Y2FzZSJuIjpjYXNlInIiOmNhc2UidCI6Y2FzZSJ2IjpyZXR1cm4gdGhpcy5jb250cm9sRXNjYXBlQXRvbSgpO2Nhc2UiYyI6cmV0dXJuIHRoaXMuY29udHJvbExldHRlckVzY2FwZUF0b20oKTtjYXNlIjAiOnJldHVybiB0aGlzLm51bENoYXJhY3RlckF0b20oKTtjYXNlIngiOnJldHVybiB0aGlzLmhleEVzY2FwZVNlcXVlbmNlQXRvbSgpO2Nhc2UidSI6cmV0dXJuIHRoaXMucmVnRXhwVW5pY29kZUVzY2FwZVNlcXVlbmNlQXRvbSgpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuaWRlbnRpdHlFc2NhcGVBdG9tKCl9fWdyb3VwKCl7bGV0IGU9ITA7c3dpdGNoKHRoaXMuY29uc3VtZUNoYXIoIigiKSx0aGlzLnBlZWtDaGFyKDApKXtjYXNlIj8iOnRoaXMuY29uc3VtZUNoYXIoIj8iKSx0aGlzLmNvbnN1bWVDaGFyKCI6IiksZT0hMTticmVhaztkZWZhdWx0OnRoaXMuZ3JvdXBJZHgrKzticmVha31sZXQgcj10aGlzLmRpc2p1bmN0aW9uKCk7dGhpcy5jb25zdW1lQ2hhcigiKSIpO2xldCBuPXt0eXBlOiJHcm91cCIsY2FwdHVyaW5nOmUsdmFsdWU6cn07cmV0dXJuIGUmJihuLmlkeD10aGlzLmdyb3VwSWR4KSxufXBvc2l0aXZlSW50ZWdlcigpe2xldCBlPXRoaXMucG9wQ2hhcigpO2lmKFFQZS50ZXN0KGUpPT09ITEpdGhyb3cgRXJyb3IoIkV4cGVjdGluZyBhIHBvc2l0aXZlIGludGVnZXIiKTtmb3IoOyRULnRlc3QodGhpcy5wZWVrQ2hhcigwKSk7KWUrPXRoaXMucG9wQ2hhcigpO3JldHVybiBwYXJzZUludChlLDEwKX1pbnRlZ2VySW5jbHVkaW5nWmVybygpe2xldCBlPXRoaXMucG9wQ2hhcigpO2lmKCRULnRlc3QoZSk9PT0hMSl0aHJvdyBFcnJvcigiRXhwZWN0aW5nIGFuIGludGVnZXIiKTtmb3IoOyRULnRlc3QodGhpcy5wZWVrQ2hhcigwKSk7KWUrPXRoaXMucG9wQ2hhcigpO3JldHVybiBwYXJzZUludChlLDEwKX1wYXR0ZXJuQ2hhcmFjdGVyKCl7bGV0IGU9dGhpcy5wb3BDaGFyKCk7c3dpdGNoKGUpe2Nhc2VgCmA6Y2FzZSJcciI6Y2FzZSJcdTIwMjgiOmNhc2UiXHUyMDI5IjpjYXNlIl4iOmNhc2UiJCI6Y2FzZSJcXCI6Y2FzZSIuIjpjYXNlIioiOmNhc2UiKyI6Y2FzZSI/IjpjYXNlIigiOmNhc2UiKSI6Y2FzZSJbIjpjYXNlInwiOnRocm93IEVycm9yKCJUQkQiKTtkZWZhdWx0OnJldHVybnt0eXBlOiJDaGFyYWN0ZXIiLHZhbHVlOmFyKGUpfX19aXNSZWdFeHBGbGFnKCl7c3dpdGNoKHRoaXMucGVla0NoYXIoMCkpe2Nhc2UiZyI6Y2FzZSJpIjpjYXNlIm0iOmNhc2UidSI6Y2FzZSJ5IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1pc1JhbmdlRGFzaCgpe3JldHVybiB0aGlzLnBlZWtDaGFyKCk9PT0iLSImJnRoaXMuaXNDbGFzc0F0b20oMSl9aXNEaWdpdCgpe3JldHVybiAkVC50ZXN0KHRoaXMucGVla0NoYXIoMCkpfWlzQ2xhc3NBdG9tKGU9MCl7c3dpdGNoKHRoaXMucGVla0NoYXIoZSkpe2Nhc2UiXSI6Y2FzZWAKYDpjYXNlIlxyIjpjYXNlIlx1MjAyOCI6Y2FzZSJcdTIwMjkiOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fWlzVGVybSgpe3JldHVybiB0aGlzLmlzQXRvbSgpfHx0aGlzLmlzQXNzZXJ0aW9uKCl9aXNBdG9tKCl7aWYodGhpcy5pc1BhdHRlcm5DaGFyYWN0ZXIoKSlyZXR1cm4hMDtzd2l0Y2godGhpcy5wZWVrQ2hhcigwKSl7Y2FzZSIuIjpjYXNlIlxcIjpjYXNlIlsiOmNhc2UiKCI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19aXNBc3NlcnRpb24oKXtzd2l0Y2godGhpcy5wZWVrQ2hhcigwKSl7Y2FzZSJeIjpjYXNlIiQiOnJldHVybiEwO2Nhc2UiXFwiOnN3aXRjaCh0aGlzLnBlZWtDaGFyKDEpKXtjYXNlImIiOmNhc2UiQiI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX1jYXNlIigiOnJldHVybiB0aGlzLnBlZWtDaGFyKDEpPT09Ij8iJiYodGhpcy5wZWVrQ2hhcigyKT09PSI9Inx8dGhpcy5wZWVrQ2hhcigyKT09PSIhIik7ZGVmYXVsdDpyZXR1cm4hMX19aXNRdWFudGlmaWVyKCl7bGV0IGU9dGhpcy5zYXZlU3RhdGUoKTt0cnl7cmV0dXJuIHRoaXMucXVhbnRpZmllcighMCkhPT12b2lkIDB9Y2F0Y2h7cmV0dXJuITF9ZmluYWxseXt0aGlzLnJlc3RvcmVTdGF0ZShlKX19aXNQYXR0ZXJuQ2hhcmFjdGVyKCl7c3dpdGNoKHRoaXMucGVla0NoYXIoKSl7Y2FzZSJeIjpjYXNlIiQiOmNhc2UiXFwiOmNhc2UiLiI6Y2FzZSIqIjpjYXNlIisiOmNhc2UiPyI6Y2FzZSIoIjpjYXNlIikiOmNhc2UiWyI6Y2FzZSJ8IjpjYXNlIi8iOmNhc2VgCmA6Y2FzZSJcciI6Y2FzZSJcdTIwMjgiOmNhc2UiXHUyMDI5IjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX1wYXJzZUhleERpZ2l0cyhlKXtsZXQgcj0iIjtmb3IobGV0IGk9MDtpPGU7aSsrKXtsZXQgYT10aGlzLnBvcENoYXIoKTtpZihLUGUudGVzdChhKT09PSExKXRocm93IEVycm9yKCJFeHBlY3RpbmcgYSBIZXhEZWNpbWFsIGRpZ2l0cyIpO3IrPWF9cmV0dXJue3R5cGU6IkNoYXJhY3RlciIsdmFsdWU6cGFyc2VJbnQociwxNil9fXBlZWtDaGFyKGU9MCl7cmV0dXJuIHRoaXMuaW5wdXRbdGhpcy5pZHgrZV19cG9wQ2hhcigpe2xldCBlPXRoaXMucGVla0NoYXIoMCk7cmV0dXJuIHRoaXMuY29uc3VtZUNoYXIodm9pZCAwKSxlfWNvbnN1bWVDaGFyKGUpe2lmKGUhPT12b2lkIDAmJnRoaXMuaW5wdXRbdGhpcy5pZHhdIT09ZSl0aHJvdyBFcnJvcigiRXhwZWN0ZWQ6ICciK2UrIicgYnV0IGZvdW5kOiAnIit0aGlzLmlucHV0W3RoaXMuaWR4XSsiJyBhdCBvZmZzZXQ6ICIrdGhpcy5pZHgpO2lmKHRoaXMuaWR4Pj10aGlzLmlucHV0Lmxlbmd0aCl0aHJvdyBFcnJvcigiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQiKTt0aGlzLmlkeCsrfWxvYyhlKXtyZXR1cm57YmVnaW46ZSxlbmQ6dGhpcy5pZHh9fX19KTt2YXIgemMsR2FlPU0oKCk9PnsidXNlIHN0cmljdCI7emM9Y2xhc3N7c3RhdGlje28odGhpcywiQmFzZVJlZ0V4cFZpc2l0b3IiKX12aXNpdENoaWxkcmVuKGUpe2ZvcihsZXQgciBpbiBlKXtsZXQgbj1lW3JdO2UuaGFzT3duUHJvcGVydHkocikmJihuLnR5cGUhPT12b2lkIDA/dGhpcy52aXNpdChuKTpBcnJheS5pc0FycmF5KG4pJiZuLmZvckVhY2goaT0+e3RoaXMudmlzaXQoaSl9LHRoaXMpKX19dmlzaXQoZSl7c3dpdGNoKGUudHlwZSl7Y2FzZSJQYXR0ZXJuIjp0aGlzLnZpc2l0UGF0dGVybihlKTticmVhaztjYXNlIkZsYWdzIjp0aGlzLnZpc2l0RmxhZ3MoZSk7YnJlYWs7Y2FzZSJEaXNqdW5jdGlvbiI6dGhpcy52aXNpdERpc2p1bmN0aW9uKGUpO2JyZWFrO2Nhc2UiQWx0ZXJuYXRpdmUiOnRoaXMudmlzaXRBbHRlcm5hdGl2ZShlKTticmVhaztjYXNlIlN0YXJ0QW5jaG9yIjp0aGlzLnZpc2l0U3RhcnRBbmNob3IoZSk7YnJlYWs7Y2FzZSJFbmRBbmNob3IiOnRoaXMudmlzaXRFbmRBbmNob3IoZSk7YnJlYWs7Y2FzZSJXb3JkQm91bmRhcnkiOnRoaXMudmlzaXRXb3JkQm91bmRhcnkoZSk7YnJlYWs7Y2FzZSJOb25Xb3JkQm91bmRhcnkiOnRoaXMudmlzaXROb25Xb3JkQm91bmRhcnkoZSk7YnJlYWs7Y2FzZSJMb29rYWhlYWQiOnRoaXMudmlzaXRMb29rYWhlYWQoZSk7YnJlYWs7Y2FzZSJOZWdhdGl2ZUxvb2thaGVhZCI6dGhpcy52aXNpdE5lZ2F0aXZlTG9va2FoZWFkKGUpO2JyZWFrO2Nhc2UiQ2hhcmFjdGVyIjp0aGlzLnZpc2l0Q2hhcmFjdGVyKGUpO2JyZWFrO2Nhc2UiU2V0Ijp0aGlzLnZpc2l0U2V0KGUpO2JyZWFrO2Nhc2UiR3JvdXAiOnRoaXMudmlzaXRHcm91cChlKTticmVhaztjYXNlIkdyb3VwQmFja1JlZmVyZW5jZSI6dGhpcy52aXNpdEdyb3VwQmFja1JlZmVyZW5jZShlKTticmVhaztjYXNlIlF1YW50aWZpZXIiOnRoaXMudmlzaXRRdWFudGlmaWVyKGUpO2JyZWFrfXRoaXMudmlzaXRDaGlsZHJlbihlKX12aXNpdFBhdHRlcm4oZSl7fXZpc2l0RmxhZ3MoZSl7fXZpc2l0RGlzanVuY3Rpb24oZSl7fXZpc2l0QWx0ZXJuYXRpdmUoZSl7fXZpc2l0U3RhcnRBbmNob3IoZSl7fXZpc2l0RW5kQW5jaG9yKGUpe312aXNpdFdvcmRCb3VuZGFyeShlKXt9dmlzaXROb25Xb3JkQm91bmRhcnkoZSl7fXZpc2l0TG9va2FoZWFkKGUpe312aXNpdE5lZ2F0aXZlTG9va2FoZWFkKGUpe312aXNpdENoYXJhY3RlcihlKXt9dmlzaXRTZXQoZSl7fXZpc2l0R3JvdXAoZSl7fXZpc2l0R3JvdXBCYWNrUmVmZXJlbmNlKGUpe312aXNpdFF1YW50aWZpZXIoZSl7fX19KTt2YXIgZjI9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt6YWUoKTtHYWUoKX0pO3ZhciBVVD17fTt2cihVVCx7TkVXTElORV9SRUdFWFA6KCk9PlhOLGVzY2FwZVJlZ0V4cDooKT0+bzAsZ2V0Q2FzZUluc2Vuc2l0aXZlUGF0dGVybjooKT0+S04sZ2V0VGVybWluYWxQYXJ0czooKT0+WlBlLGlzTXVsdGlsaW5lQ29tbWVudDooKT0+ak4saXNXaGl0ZXNwYWNlOigpPT5WVCxwYXJ0aWFsTWF0Y2hlczooKT0+UU4scGFydGlhbFJlZ0V4cDooKT0+VmFlfSk7ZnVuY3Rpb24gWlBlKHQpe3RyeXt0eXBlb2YgdCE9InN0cmluZyImJih0PXQuc291cmNlKSx0PWAvJHt0fS9gO2xldCBlPSRhZS5wYXR0ZXJuKHQpLHI9W107Zm9yKGxldCBuIG9mIGUudmFsdWUudmFsdWUpczAucmVzZXQodCksczAudmlzaXQobiksci5wdXNoKHtzdGFydDpzMC5zdGFydFJlZ2V4cCxlbmQ6czAuZW5kUmVnZXh9KTtyZXR1cm4gcn1jYXRjaHtyZXR1cm5bXX19ZnVuY3Rpb24gak4odCl7dHJ5e3JldHVybiB0eXBlb2YgdD09InN0cmluZyImJih0PW5ldyBSZWdFeHAodCkpLHQ9dC50b1N0cmluZygpLHMwLnJlc2V0KHQpLHMwLnZpc2l0KCRhZS5wYXR0ZXJuKHQpKSxzMC5tdWx0aWxpbmV9Y2F0Y2h7cmV0dXJuITF9fWZ1bmN0aW9uIFZUKHQpe3JldHVybih0eXBlb2YgdD09InN0cmluZyI/bmV3IFJlZ0V4cCh0KTp0KS50ZXN0KCIgIil9ZnVuY3Rpb24gbzAodCl7cmV0dXJuIHQucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csIlxcJCYiKX1mdW5jdGlvbiBLTih0KXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKHQsZT0+L1x3Ly50ZXN0KGUpP2BbJHtlLnRvTG93ZXJDYXNlKCl9JHtlLnRvVXBwZXJDYXNlKCl9XWA6bzAoZSkpLmpvaW4oIiIpfWZ1bmN0aW9uIFFOKHQsZSl7bGV0IHI9VmFlKHQpLG49ZS5tYXRjaChyKTtyZXR1cm4hIW4mJm5bMF0ubGVuZ3RoPjB9ZnVuY3Rpb24gVmFlKHQpe3R5cGVvZiB0PT0ic3RyaW5nIiYmKHQ9bmV3IFJlZ0V4cCh0KSk7bGV0IGU9dCxyPXQuc291cmNlLG49MDtmdW5jdGlvbiBpKCl7bGV0IGE9IiIscztmdW5jdGlvbiBsKGgpe2ErPXIuc3Vic3RyKG4saCksbis9aH1vKGwsImFwcGVuZFJhdyIpO2Z1bmN0aW9uIHUoaCl7YSs9Iig/OiIrci5zdWJzdHIobixoKSsifCQpIixuKz1ofWZvcihvKHUsImFwcGVuZE9wdGlvbmFsIik7bjxyLmxlbmd0aDspc3dpdGNoKHJbbl0pe2Nhc2UiXFwiOnN3aXRjaChyW24rMV0pe2Nhc2UiYyI6dSgzKTticmVhaztjYXNlIngiOnUoNCk7YnJlYWs7Y2FzZSJ1IjplLnVuaWNvZGU/cltuKzJdPT09InsiP3Uoci5pbmRleE9mKCJ9IixuKS1uKzEpOnUoNik6dSgyKTticmVhaztjYXNlInAiOmNhc2UiUCI6ZS51bmljb2RlP3Uoci5pbmRleE9mKCJ9IixuKS1uKzEpOnUoMik7YnJlYWs7Y2FzZSJrIjp1KHIuaW5kZXhPZigiPiIsbiktbisxKTticmVhaztkZWZhdWx0OnUoMik7YnJlYWt9YnJlYWs7Y2FzZSJbIjpzPS9cWyg/OlxcLnwuKSo/XF0vZyxzLmxhc3RJbmRleD1uLHM9cy5leGVjKHIpfHxbXSx1KHNbMF0ubGVuZ3RoKTticmVhaztjYXNlInwiOmNhc2UiXiI6Y2FzZSIkIjpjYXNlIioiOmNhc2UiKyI6Y2FzZSI/IjpsKDEpO2JyZWFrO2Nhc2UieyI6cz0vXHtcZCssP1xkKlx9L2cscy5sYXN0SW5kZXg9bixzPXMuZXhlYyhyKSxzP2woc1swXS5sZW5ndGgpOnUoMSk7YnJlYWs7Y2FzZSIoIjppZihyW24rMV09PT0iPyIpc3dpdGNoKHJbbisyXSl7Y2FzZSI6IjphKz0iKD86IixuKz0zLGErPWkoKSsifCQpIjticmVhaztjYXNlIj0iOmErPSIoPz0iLG4rPTMsYSs9aSgpKyIpIjticmVhaztjYXNlIiEiOnM9bixuKz0zLGkoKSxhKz1yLnN1YnN0cihzLG4tcyk7YnJlYWs7Y2FzZSI8Ijpzd2l0Y2gocltuKzNdKXtjYXNlIj0iOmNhc2UiISI6cz1uLG4rPTQsaSgpLGErPXIuc3Vic3RyKHMsbi1zKTticmVhaztkZWZhdWx0Omwoci5pbmRleE9mKCI+IixuKS1uKzEpLGErPWkoKSsifCQpIjticmVha31icmVha31lbHNlIGwoMSksYSs9aSgpKyJ8JCkiO2JyZWFrO2Nhc2UiKSI6cmV0dXJuKytuLGE7ZGVmYXVsdDp1KDEpO2JyZWFrfXJldHVybiBhfXJldHVybiBvKGksInByb2Nlc3MiKSxuZXcgUmVnRXhwKGkoKSx0LmZsYWdzKX12YXIgWE4sJGFlLHFOLHMwLGlnPU0oKCk9PnsidXNlIHN0cmljdCI7ZjIoKTtYTj0vXHI/XG4vZ20sJGFlPW5ldyBhMCxxTj1jbGFzcyBleHRlbmRzIHpje3N0YXRpY3tvKHRoaXMsIlRlcm1pbmFsUmVnRXhwVmlzaXRvciIpfWNvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlzU3RhcnRpbmc9ITAsdGhpcy5lbmRSZWdleHBTdGFjaz1bXSx0aGlzLm11bHRpbGluZT0hMX1nZXQgZW5kUmVnZXgoKXtyZXR1cm4gdGhpcy5lbmRSZWdleHBTdGFjay5qb2luKCIiKX1yZXNldChlKXt0aGlzLm11bHRpbGluZT0hMSx0aGlzLnJlZ2V4PWUsdGhpcy5zdGFydFJlZ2V4cD0iIix0aGlzLmlzU3RhcnRpbmc9ITAsdGhpcy5lbmRSZWdleHBTdGFjaz1bXX12aXNpdEdyb3VwKGUpe2UucXVhbnRpZmllciYmKHRoaXMuaXNTdGFydGluZz0hMSx0aGlzLmVuZFJlZ2V4cFN0YWNrPVtdKX12aXNpdENoYXJhY3RlcihlKXtsZXQgcj1TdHJpbmcuZnJvbUNoYXJDb2RlKGUudmFsdWUpO2lmKCF0aGlzLm11bHRpbGluZSYmcj09PWAKYCYmKHRoaXMubXVsdGlsaW5lPSEwKSxlLnF1YW50aWZpZXIpdGhpcy5pc1N0YXJ0aW5nPSExLHRoaXMuZW5kUmVnZXhwU3RhY2s9W107ZWxzZXtsZXQgbj1vMChyKTt0aGlzLmVuZFJlZ2V4cFN0YWNrLnB1c2gobiksdGhpcy5pc1N0YXJ0aW5nJiYodGhpcy5zdGFydFJlZ2V4cCs9bil9fXZpc2l0U2V0KGUpe2lmKCF0aGlzLm11bHRpbGluZSl7bGV0IHI9dGhpcy5yZWdleC5zdWJzdHJpbmcoZS5sb2MuYmVnaW4sZS5sb2MuZW5kKSxuPW5ldyBSZWdFeHAocik7dGhpcy5tdWx0aWxpbmU9ISFgCmAubWF0Y2gobil9aWYoZS5xdWFudGlmaWVyKXRoaXMuaXNTdGFydGluZz0hMSx0aGlzLmVuZFJlZ2V4cFN0YWNrPVtdO2Vsc2V7bGV0IHI9dGhpcy5yZWdleC5zdWJzdHJpbmcoZS5sb2MuYmVnaW4sZS5sb2MuZW5kKTt0aGlzLmVuZFJlZ2V4cFN0YWNrLnB1c2gociksdGhpcy5pc1N0YXJ0aW5nJiYodGhpcy5zdGFydFJlZ2V4cCs9cil9fXZpc2l0Q2hpbGRyZW4oZSl7ZS50eXBlPT09Ikdyb3VwIiYmZS5xdWFudGlmaWVyfHxzdXBlci52aXNpdENoaWxkcmVuKGUpfX0sczA9bmV3IHFOO28oWlBlLCJnZXRUZXJtaW5hbFBhcnRzIik7byhqTiwiaXNNdWx0aWxpbmVDb21tZW50Iik7byhWVCwiaXNXaGl0ZXNwYWNlIik7byhvMCwiZXNjYXBlUmVnRXhwIik7byhLTiwiZ2V0Q2FzZUluc2Vuc2l0aXZlUGF0dGVybiIpO28oUU4sInBhcnRpYWxNYXRjaGVzIik7byhWYWUsInBhcnRpYWxSZWdFeHAiKX0pO3ZhciBXVD17fTt2cihXVCx7ZmluZEFzc2lnbm1lbnQ6KCk9PnNSLGZpbmROYW1lQXNzaWdubWVudDooKT0+SFQsZmluZE5vZGVGb3JLZXl3b3JkOigpPT5pUixmaW5kTm9kZUZvclByb3BlcnR5OigpPT5wMixmaW5kTm9kZXNGb3JLZXl3b3JkOigpPT5KUGUsZmluZE5vZGVzRm9yS2V5d29yZEludGVybmFsOigpPT5hUixmaW5kTm9kZXNGb3JQcm9wZXJ0eTooKT0+clIsZ2V0QWN0aW9uQXRFbGVtZW50OigpPT5xYWUsZ2V0QWN0aW9uVHlwZTooKT0+amFlLGdldEFsbFJlYWNoYWJsZVJ1bGVzOigpPT5kMixnZXRDcm9zc1JlZmVyZW5jZVRlcm1pbmFsOigpPT5lUixnZXRFbnRyeVJ1bGU6KCk9PlVhZSxnZXRFeHBsaWNpdFJ1bGVUeXBlOigpPT5vUixnZXRIaWRkZW5SdWxlczooKT0+SGFlLGdldFJ1bGVUeXBlOigpPT5sUixnZXRUeXBlTmFtZTooKT0+bDAsaXNBcnJheUNhcmRpbmFsaXR5OigpPT50QmUsaXNBcnJheU9wZXJhdG9yOigpPT5yQmUsaXNDb21tZW50VGVybWluYWw6KCk9PnRSLGlzRGF0YVR5cGU6KCk9Pm5CZSxpc0RhdGFUeXBlUnVsZTooKT0+bTIsaXNPcHRpb25hbENhcmRpbmFsaXR5OigpPT5lQmUsdGVybWluYWxSZWdleDooKT0+YWd9KTtmdW5jdGlvbiBVYWUodCl7cmV0dXJuIHQucnVsZXMuZmluZChlPT5HYShlKSYmZS5lbnRyeSl9ZnVuY3Rpb24gSGFlKHQpe3JldHVybiB0LnJ1bGVzLmZpbHRlcihlPT5KbyhlKSYmZS5oaWRkZW4pfWZ1bmN0aW9uIGQyKHQsZSl7bGV0IHI9bmV3IFNldCxuPVVhZSh0KTtpZighbilyZXR1cm4gbmV3IFNldCh0LnJ1bGVzKTtsZXQgaT1bbl0uY29uY2F0KEhhZSh0KSk7Zm9yKGxldCBzIG9mIGkpV2FlKHMscixlKTtsZXQgYT1uZXcgU2V0O2ZvcihsZXQgcyBvZiB0LnJ1bGVzKShyLmhhcyhzLm5hbWUpfHxKbyhzKSYmcy5oaWRkZW4pJiZhLmFkZChzKTtyZXR1cm4gYX1mdW5jdGlvbiBXYWUodCxlLHIpe2UuYWRkKHQubmFtZSksRmModCkuZm9yRWFjaChuPT57aWYoJGwobil8fHImJlBUKG4pKXtsZXQgaT1uLnJ1bGUucmVmO2kmJiFlLmhhcyhpLm5hbWUpJiZXYWUoaSxlLHIpfX0pfWZ1bmN0aW9uIGVSKHQpe2lmKHQudGVybWluYWwpcmV0dXJuIHQudGVybWluYWw7aWYodC50eXBlLnJlZil7bGV0IGU9SFQodC50eXBlLnJlZik7cmV0dXJuIGU/LnRlcm1pbmFsfX1mdW5jdGlvbiB0Uih0KXtyZXR1cm4gdC5oaWRkZW4mJiFhZyh0KS50ZXN0KCIgIil9ZnVuY3Rpb24gclIodCxlKXtyZXR1cm4hdHx8IWU/W106blIodCxlLHQuYXN0Tm9kZSwhMCl9ZnVuY3Rpb24gcDIodCxlLHIpe2lmKCF0fHwhZSlyZXR1cm47bGV0IG49blIodCxlLHQuYXN0Tm9kZSwhMCk7aWYobi5sZW5ndGghPT0wKXJldHVybiByIT09dm9pZCAwP3I9TWF0aC5tYXgoMCxNYXRoLm1pbihyLG4ubGVuZ3RoLTEpKTpyPTAsbltyXX1mdW5jdGlvbiBuUih0LGUscixuKXtpZighbil7bGV0IGk9bjAodC5ncmFtbWFyU291cmNlLEdsKTtpZihpJiZpLmZlYXR1cmU9PT1lKXJldHVyblt0XX1yZXR1cm4gaG8odCkmJnQuYXN0Tm9kZT09PXI/dC5jb250ZW50LmZsYXRNYXAoaT0+blIoaSxlLHIsITEpKTpbXX1mdW5jdGlvbiBKUGUodCxlKXtyZXR1cm4gdD9hUih0LGUsdD8uYXN0Tm9kZSk6W119ZnVuY3Rpb24gaVIodCxlLHIpe2lmKCF0KXJldHVybjtsZXQgbj1hUih0LGUsdD8uYXN0Tm9kZSk7aWYobi5sZW5ndGghPT0wKXJldHVybiByIT09dm9pZCAwP3I9TWF0aC5tYXgoMCxNYXRoLm1pbihyLG4ubGVuZ3RoLTEpKTpyPTAsbltyXX1mdW5jdGlvbiBhUih0LGUscil7aWYodC5hc3ROb2RlIT09cilyZXR1cm5bXTtpZihlbCh0LmdyYW1tYXJTb3VyY2UpJiZ0LmdyYW1tYXJTb3VyY2UudmFsdWU9PT1lKXJldHVyblt0XTtsZXQgbj1KZCh0KS5pdGVyYXRvcigpLGksYT1bXTtkbyBpZihpPW4ubmV4dCgpLCFpLmRvbmUpe2xldCBzPWkudmFsdWU7cy5hc3ROb2RlPT09cj9lbChzLmdyYW1tYXJTb3VyY2UpJiZzLmdyYW1tYXJTb3VyY2UudmFsdWU9PT1lJiZhLnB1c2gocyk6bi5wcnVuZSgpfXdoaWxlKCFpLmRvbmUpO3JldHVybiBhfWZ1bmN0aW9uIHNSKHQpe3ZhciBlO2xldCByPXQuYXN0Tm9kZTtmb3IoO3I9PT0oKGU9dC5jb250YWluZXIpPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS5hc3ROb2RlKTspe2xldCBuPW4wKHQuZ3JhbW1hclNvdXJjZSxHbCk7aWYobilyZXR1cm4gbjt0PXQuY29udGFpbmVyfX1mdW5jdGlvbiBIVCh0KXtsZXQgZT10O3JldHVybiBSVChlKSYmKFZ1KGUuJGNvbnRhaW5lcik/ZT1lLiRjb250YWluZXIuJGNvbnRhaW5lcjpHYShlLiRjb250YWluZXIpP2U9ZS4kY29udGFpbmVyOnVmKGUuJGNvbnRhaW5lcikpLFlhZSh0LGUsbmV3IE1hcCl9ZnVuY3Rpb24gWWFlKHQsZSxyKXt2YXIgbjtmdW5jdGlvbiBpKGEscyl7bGV0IGw7cmV0dXJuIG4wKGEsR2wpfHwobD1ZYWUocyxzLHIpKSxyLnNldCh0LGwpLGx9aWYobyhpLCJnbyIpLHIuaGFzKHQpKXJldHVybiByLmdldCh0KTtyLnNldCh0LHZvaWQgMCk7Zm9yKGxldCBhIG9mIEZjKGUpKXtpZihHbChhKSYmYS5mZWF0dXJlLnRvTG93ZXJDYXNlKCk9PT0ibmFtZSIpcmV0dXJuIHIuc2V0KHQsYSksYTtpZigkbChhKSYmR2EoYS5ydWxlLnJlZikpcmV0dXJuIGkoYSxhLnJ1bGUucmVmKTtpZihJVChhKSYmKCEoKG49YS50eXBlUmVmKT09PW51bGx8fG49PT12b2lkIDApJiZuLnJlZikpcmV0dXJuIGkoYSxhLnR5cGVSZWYucmVmKX19ZnVuY3Rpb24gcWFlKHQpe2xldCBlPXQuJGNvbnRhaW5lcjtpZihoZihlKSl7bGV0IHI9ZS5lbGVtZW50cyxuPXIuaW5kZXhPZih0KTtmb3IobGV0IGk9bi0xO2k+PTA7aS0tKXtsZXQgYT1yW2ldO2lmKFZ1KGEpKXJldHVybiBhO3tsZXQgcz1GYyhyW2ldKS5maW5kKFZ1KTtpZihzKXJldHVybiBzfX19aWYoYTIoZSkpcmV0dXJuIHFhZShlKX1mdW5jdGlvbiBlQmUodCxlKXtyZXR1cm4gdD09PSI/Inx8dD09PSIqInx8aGYoZSkmJiEhZS5ndWFyZENvbmRpdGlvbn1mdW5jdGlvbiB0QmUodCl7cmV0dXJuIHQ9PT0iKiJ8fHQ9PT0iKyJ9ZnVuY3Rpb24gckJlKHQpe3JldHVybiB0PT09Iis9In1mdW5jdGlvbiBtMih0KXtyZXR1cm4gWGFlKHQsbmV3IFNldCl9ZnVuY3Rpb24gWGFlKHQsZSl7aWYoZS5oYXModCkpcmV0dXJuITA7ZS5hZGQodCk7Zm9yKGxldCByIG9mIEZjKHQpKWlmKCRsKHIpKXtpZighci5ydWxlLnJlZnx8R2Eoci5ydWxlLnJlZikmJiFYYWUoci5ydWxlLnJlZixlKSlyZXR1cm4hMX1lbHNle2lmKEdsKHIpKXJldHVybiExO2lmKFZ1KHIpKXJldHVybiExfXJldHVybiEhdC5kZWZpbml0aW9ufWZ1bmN0aW9uIG5CZSh0KXtyZXR1cm4gSk4odC50eXBlLG5ldyBTZXQpfWZ1bmN0aW9uIEpOKHQsZSl7aWYoZS5oYXModCkpcmV0dXJuITA7aWYoZS5hZGQodCksV0QodCkpcmV0dXJuITE7aWYoY04odCkpcmV0dXJuITE7aWYobU4odCkpcmV0dXJuIHQudHlwZXMuZXZlcnkocj0+Sk4ocixlKSk7aWYoSVQodCkpe2lmKHQucHJpbWl0aXZlVHlwZSE9PXZvaWQgMClyZXR1cm4hMDtpZih0LnN0cmluZ1R5cGUhPT12b2lkIDApcmV0dXJuITA7aWYodC50eXBlUmVmIT09dm9pZCAwKXtsZXQgcj10LnR5cGVSZWYucmVmO3JldHVybiBzMihyKT9KTihyLnR5cGUsZSk6ITF9ZWxzZSByZXR1cm4hMX1lbHNlIHJldHVybiExfWZ1bmN0aW9uIG9SKHQpe2lmKHQuaW5mZXJyZWRUeXBlKXJldHVybiB0LmluZmVycmVkVHlwZS5uYW1lO2lmKHQuZGF0YVR5cGUpcmV0dXJuIHQuZGF0YVR5cGU7aWYodC5yZXR1cm5UeXBlKXtsZXQgZT10LnJldHVyblR5cGUucmVmO2lmKGUpe2lmKEdhKGUpKXJldHVybiBlLm5hbWU7aWYoTVQoZSl8fHMyKGUpKXJldHVybiBlLm5hbWV9fX1mdW5jdGlvbiBsMCh0KXt2YXIgZTtpZihHYSh0KSlyZXR1cm4gbTIodCk/dC5uYW1lOihlPW9SKHQpKSE9PW51bGwmJmUhPT12b2lkIDA/ZTp0Lm5hbWU7aWYoTVQodCl8fHMyKHQpfHx1Tih0KSlyZXR1cm4gdC5uYW1lO2lmKFZ1KHQpKXtsZXQgcj1qYWUodCk7aWYocilyZXR1cm4gcn1lbHNlIGlmKFJUKHQpKXJldHVybiB0Lm5hbWU7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZ2V0IG5hbWUgb2YgVW5rbm93biBUeXBlIil9ZnVuY3Rpb24gamFlKHQpe3ZhciBlO2lmKHQuaW5mZXJyZWRUeXBlKXJldHVybiB0LmluZmVycmVkVHlwZS5uYW1lO2lmKCEoKGU9dC50eXBlKT09PW51bGx8fGU9PT12b2lkIDApJiZlLnJlZilyZXR1cm4gbDAodC50eXBlLnJlZil9ZnVuY3Rpb24gbFIodCl7dmFyIGUscixuO3JldHVybiBKbyh0KT8ocj0oZT10LnR5cGUpPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS5uYW1lKSE9PW51bGwmJnIhPT12b2lkIDA/cjoic3RyaW5nIjptMih0KT90Lm5hbWU6KG49b1IodCkpIT09bnVsbCYmbiE9PXZvaWQgMD9uOnQubmFtZX1mdW5jdGlvbiBhZyh0KXtsZXQgZT17czohMSxpOiExLHU6ITF9LHI9c2codC5kZWZpbml0aW9uLGUpLG49T2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbLGldKT0+aSkubWFwKChbaV0pPT5pKS5qb2luKCIiKTtyZXR1cm4gbmV3IFJlZ0V4cChyLG4pfWZ1bmN0aW9uIHNnKHQsZSl7aWYoUk4odCkpcmV0dXJuIGlCZSh0KTtpZihJTih0KSlyZXR1cm4gYUJlKHQpO2lmKGJOKHQpKXJldHVybiBsQmUodCk7aWYoUFQodCkpe2xldCByPXQucnVsZS5yZWY7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIHJ1bGUgcmVmZXJlbmNlLiIpO3JldHVybiBVdShzZyhyLmRlZmluaXRpb24pLHtjYXJkaW5hbGl0eTp0LmNhcmRpbmFsaXR5LGxvb2thaGVhZDp0Lmxvb2thaGVhZH0pfWVsc2V7aWYoQU4odCkpcmV0dXJuIG9CZSh0KTtpZihGTih0KSlyZXR1cm4gc0JlKHQpO2lmKExOKHQpKXtsZXQgcj10LnJlZ2V4Lmxhc3RJbmRleE9mKCIvIiksbj10LnJlZ2V4LnN1YnN0cmluZygxLHIpLGk9dC5yZWdleC5zdWJzdHJpbmcocisxKTtyZXR1cm4gZSYmKGUuaT1pLmluY2x1ZGVzKCJpIiksZS5zPWkuaW5jbHVkZXMoInMiKSxlLnU9aS5pbmNsdWRlcygidSIpKSxVdShuLHtjYXJkaW5hbGl0eTp0LmNhcmRpbmFsaXR5LGxvb2thaGVhZDp0Lmxvb2thaGVhZCx3cmFwOiExfSl9ZWxzZXtpZihHTih0KSlyZXR1cm4gVXUoY1Ise2NhcmRpbmFsaXR5OnQuY2FyZGluYWxpdHksbG9va2FoZWFkOnQubG9va2FoZWFkfSk7dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRlcm1pbmFsIGVsZW1lbnQ6ICR7dD8uJHR5cGV9YCl9fX1mdW5jdGlvbiBpQmUodCl7cmV0dXJuIFV1KHQuZWxlbWVudHMubWFwKGU9PnNnKGUpKS5qb2luKCJ8Iikse2NhcmRpbmFsaXR5OnQuY2FyZGluYWxpdHksbG9va2FoZWFkOnQubG9va2FoZWFkfSl9ZnVuY3Rpb24gYUJlKHQpe3JldHVybiBVdSh0LmVsZW1lbnRzLm1hcChlPT5zZyhlKSkuam9pbigiIikse2NhcmRpbmFsaXR5OnQuY2FyZGluYWxpdHksbG9va2FoZWFkOnQubG9va2FoZWFkfSl9ZnVuY3Rpb24gc0JlKHQpe3JldHVybiBVdShgJHtjUn0qPyR7c2codC50ZXJtaW5hbCl9YCx7Y2FyZGluYWxpdHk6dC5jYXJkaW5hbGl0eSxsb29rYWhlYWQ6dC5sb29rYWhlYWR9KX1mdW5jdGlvbiBvQmUodCl7cmV0dXJuIFV1KGAoPyEke3NnKHQudGVybWluYWwpfSkke2NSfSo/YCx7Y2FyZGluYWxpdHk6dC5jYXJkaW5hbGl0eSxsb29rYWhlYWQ6dC5sb29rYWhlYWR9KX1mdW5jdGlvbiBsQmUodCl7cmV0dXJuIHQucmlnaHQ/VXUoYFske1pOKHQubGVmdCl9LSR7Wk4odC5yaWdodCl9XWAse2NhcmRpbmFsaXR5OnQuY2FyZGluYWxpdHksbG9va2FoZWFkOnQubG9va2FoZWFkLHdyYXA6ITF9KTpVdShaTih0LmxlZnQpLHtjYXJkaW5hbGl0eTp0LmNhcmRpbmFsaXR5LGxvb2thaGVhZDp0Lmxvb2thaGVhZCx3cmFwOiExfSl9ZnVuY3Rpb24gWk4odCl7cmV0dXJuIG8wKHQudmFsdWUpfWZ1bmN0aW9uIFV1KHQsZSl7dmFyIHI7cmV0dXJuKGUud3JhcCE9PSExfHxlLmxvb2thaGVhZCkmJih0PWAoJHsocj1lLmxvb2thaGVhZCkhPT1udWxsJiZyIT09dm9pZCAwP3I6IiJ9JHt0fSlgKSxlLmNhcmRpbmFsaXR5P2Ake3R9JHtlLmNhcmRpbmFsaXR5fWA6dH12YXIgY1IsVmw9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtfVCgpO0JjKCk7Wm8oKTtvcygpO3psKCk7aWcoKTtvKFVhZSwiZ2V0RW50cnlSdWxlIik7byhIYWUsImdldEhpZGRlblJ1bGVzIik7byhkMiwiZ2V0QWxsUmVhY2hhYmxlUnVsZXMiKTtvKFdhZSwicnVsZURmcyIpO28oZVIsImdldENyb3NzUmVmZXJlbmNlVGVybWluYWwiKTtvKHRSLCJpc0NvbW1lbnRUZXJtaW5hbCIpO28oclIsImZpbmROb2Rlc0ZvclByb3BlcnR5Iik7byhwMiwiZmluZE5vZGVGb3JQcm9wZXJ0eSIpO28oblIsImZpbmROb2Rlc0ZvclByb3BlcnR5SW50ZXJuYWwiKTtvKEpQZSwiZmluZE5vZGVzRm9yS2V5d29yZCIpO28oaVIsImZpbmROb2RlRm9yS2V5d29yZCIpO28oYVIsImZpbmROb2Rlc0ZvcktleXdvcmRJbnRlcm5hbCIpO28oc1IsImZpbmRBc3NpZ25tZW50Iik7byhIVCwiZmluZE5hbWVBc3NpZ25tZW50Iik7byhZYWUsImZpbmROYW1lQXNzaWdubWVudEludGVybmFsIik7byhxYWUsImdldEFjdGlvbkF0RWxlbWVudCIpO28oZUJlLCJpc09wdGlvbmFsQ2FyZGluYWxpdHkiKTtvKHRCZSwiaXNBcnJheUNhcmRpbmFsaXR5Iik7byhyQmUsImlzQXJyYXlPcGVyYXRvciIpO28obTIsImlzRGF0YVR5cGVSdWxlIik7byhYYWUsImlzRGF0YVR5cGVSdWxlSW50ZXJuYWwiKTtvKG5CZSwiaXNEYXRhVHlwZSIpO28oSk4sImlzRGF0YVR5cGVJbnRlcm5hbCIpO28ob1IsImdldEV4cGxpY2l0UnVsZVR5cGUiKTtvKGwwLCJnZXRUeXBlTmFtZSIpO28oamFlLCJnZXRBY3Rpb25UeXBlIik7byhsUiwiZ2V0UnVsZVR5cGUiKTtvKGFnLCJ0ZXJtaW5hbFJlZ2V4Iik7Y1I9L1tcc1xTXS8uc291cmNlO28oc2csImFic3RyYWN0RWxlbWVudFRvUmVnZXgiKTtvKGlCZSwidGVybWluYWxBbHRlcm5hdGl2ZXNUb1JlZ2V4Iik7byhhQmUsInRlcm1pbmFsR3JvdXBUb1JlZ2V4Iik7byhzQmUsInVudGlsVG9rZW5Ub1JlZ2V4Iik7byhvQmUsIm5lZ2F0ZVRva2VuVG9SZWdleCIpO28obEJlLCJjaGFyYWN0ZXJSYW5nZVRvUmVnZXgiKTtvKFpOLCJrZXl3b3JkVG9SZWdleCIpO28oVXUsIndpdGhDYXJkaW5hbGl0eSIpfSk7ZnVuY3Rpb24gdVIodCl7bGV0IGU9W10scj10LkdyYW1tYXI7Zm9yKGxldCBuIG9mIHIucnVsZXMpSm8obikmJnRSKG4pJiZqTihhZyhuKSkmJmUucHVzaChuLm5hbWUpO3JldHVybnttdWx0aWxpbmVDb21tZW50UnVsZXM6ZSxuYW1lUmVnZXhwOkNUfX12YXIgaFI9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt6bCgpO1ZsKCk7aWcoKTtCYygpO28odVIsImNyZWF0ZUdyYW1tYXJDb25maWciKX0pO3ZhciBmUj1NKCgpPT57InVzZSBzdHJpY3QifSk7ZnVuY3Rpb24gb2codCl7Y29uc29sZSYmY29uc29sZS5lcnJvciYmY29uc29sZS5lcnJvcihgRXJyb3I6ICR7dH1gKX1mdW5jdGlvbiBnMih0KXtjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybihgV2FybmluZzogJHt0fWApfXZhciBLYWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKG9nLCJQUklOVF9FUlJPUiIpO28oZzIsIlBSSU5UX1dBUk5JTkciKX0pO2Z1bmN0aW9uIHkyKHQpe2xldCBlPW5ldyBEYXRlKCkuZ2V0VGltZSgpLHI9dCgpO3JldHVybnt0aW1lOm5ldyBEYXRlKCkuZ2V0VGltZSgpLWUsdmFsdWU6cn19dmFyIFFhZT1NKCgpPT57InVzZSBzdHJpY3QiO28oeTIsInRpbWVyIil9KTtmdW5jdGlvbiB2Mih0KXtmdW5jdGlvbiBlKCl7fW8oZSwiRmFrZUNvbnN0cnVjdG9yIiksZS5wcm90b3R5cGU9dDtsZXQgcj1uZXcgZTtmdW5jdGlvbiBuKCl7cmV0dXJuIHR5cGVvZiByLmJhcn1yZXR1cm4gbyhuLCJmYWtlQWNjZXNzIiksbigpLG4oKSx0OygwLGV2YWwpKHQpfXZhciBaYWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKHYyLCJ0b0Zhc3RQcm9wZXJ0aWVzIil9KTt2YXIgbGc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtLYWUoKTtRYWUoKTtaYWUoKX0pO2Z1bmN0aW9uIGNCZSh0KXtyZXR1cm4gdUJlKHQpP3QuTEFCRUw6dC5uYW1lfWZ1bmN0aW9uIHVCZSh0KXtyZXR1cm4gYmkodC5MQUJFTCkmJnQuTEFCRUwhPT0iIn1mdW5jdGlvbiBZVCh0KXtyZXR1cm4gUWUodCxjZyl9ZnVuY3Rpb24gY2codCl7ZnVuY3Rpb24gZShyKXtyZXR1cm4gUWUocixjZyl9aWYobyhlLCJjb252ZXJ0RGVmaW5pdGlvbiIpLHQgaW5zdGFuY2VvZiBubil7bGV0IHI9e3R5cGU6Ik5vblRlcm1pbmFsIixuYW1lOnQubm9uVGVybWluYWxOYW1lLGlkeDp0LmlkeH07cmV0dXJuIGJpKHQubGFiZWwpJiYoci5sYWJlbD10LmxhYmVsKSxyfWVsc2V7aWYodCBpbnN0YW5jZW9mIF9uKXJldHVybnt0eXBlOiJBbHRlcm5hdGl2ZSIsZGVmaW5pdGlvbjplKHQuZGVmaW5pdGlvbil9O2lmKHQgaW5zdGFuY2VvZiBhbilyZXR1cm57dHlwZToiT3B0aW9uIixpZHg6dC5pZHgsZGVmaW5pdGlvbjplKHQuZGVmaW5pdGlvbil9O2lmKHQgaW5zdGFuY2VvZiBMbilyZXR1cm57dHlwZToiUmVwZXRpdGlvbk1hbmRhdG9yeSIsaWR4OnQuaWR4LGRlZmluaXRpb246ZSh0LmRlZmluaXRpb24pfTtpZih0IGluc3RhbmNlb2YgRG4pcmV0dXJue3R5cGU6IlJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yIixpZHg6dC5pZHgsc2VwYXJhdG9yOmNnKG5ldyBFcih7dGVybWluYWxUeXBlOnQuc2VwYXJhdG9yfSkpLGRlZmluaXRpb246ZSh0LmRlZmluaXRpb24pfTtpZih0IGluc3RhbmNlb2YgYm4pcmV0dXJue3R5cGU6IlJlcGV0aXRpb25XaXRoU2VwYXJhdG9yIixpZHg6dC5pZHgsc2VwYXJhdG9yOmNnKG5ldyBFcih7dGVybWluYWxUeXBlOnQuc2VwYXJhdG9yfSkpLGRlZmluaXRpb246ZSh0LmRlZmluaXRpb24pfTtpZih0IGluc3RhbmNlb2YgRHIpcmV0dXJue3R5cGU6IlJlcGV0aXRpb24iLGlkeDp0LmlkeCxkZWZpbml0aW9uOmUodC5kZWZpbml0aW9uKX07aWYodCBpbnN0YW5jZW9mIHduKXJldHVybnt0eXBlOiJBbHRlcm5hdGlvbiIsaWR4OnQuaWR4LGRlZmluaXRpb246ZSh0LmRlZmluaXRpb24pfTtpZih0IGluc3RhbmNlb2YgRXIpe2xldCByPXt0eXBlOiJUZXJtaW5hbCIsbmFtZTp0LnRlcm1pbmFsVHlwZS5uYW1lLGxhYmVsOmNCZSh0LnRlcm1pbmFsVHlwZSksaWR4OnQuaWR4fTtiaSh0LmxhYmVsKSYmKHIudGVybWluYWxMYWJlbD10LmxhYmVsKTtsZXQgbj10LnRlcm1pbmFsVHlwZS5QQVRURVJOO3JldHVybiB0LnRlcm1pbmFsVHlwZS5QQVRURVJOJiYoci5wYXR0ZXJuPVhvKG4pP24uc291cmNlOm4pLHJ9ZWxzZXtpZih0IGluc3RhbmNlb2YgbHMpcmV0dXJue3R5cGU6IlJ1bGUiLG5hbWU6dC5uYW1lLG9yZ1RleHQ6dC5vcmdUZXh0LGRlZmluaXRpb246ZSh0LmRlZmluaXRpb24pfTt0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX19fXZhciBwbyxubixscyxfbixhbixMbixEbixEcixibix3bixFcixxVD1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7byhjQmUsInRva2VuTGFiZWwiKTtvKHVCZSwiaGFzVG9rZW5MYWJlbCIpO3BvPWNsYXNze3N0YXRpY3tvKHRoaXMsIkFic3RyYWN0UHJvZHVjdGlvbiIpfWdldCBkZWZpbml0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmluaXRpb259c2V0IGRlZmluaXRpb24oZSl7dGhpcy5fZGVmaW5pdGlvbj1lfWNvbnN0cnVjdG9yKGUpe3RoaXMuX2RlZmluaXRpb249ZX1hY2NlcHQoZSl7ZS52aXNpdCh0aGlzKSxTZSh0aGlzLmRlZmluaXRpb24scj0+e3IuYWNjZXB0KGUpfSl9fSxubj1jbGFzcyBleHRlbmRzIHBve3N0YXRpY3tvKHRoaXMsIk5vblRlcm1pbmFsIil9Y29uc3RydWN0b3IoZSl7c3VwZXIoW10pLHRoaXMuaWR4PTEsdmEodGhpcyx6cyhlLHI9PnIhPT12b2lkIDApKX1zZXQgZGVmaW5pdGlvbihlKXt9Z2V0IGRlZmluaXRpb24oKXtyZXR1cm4gdGhpcy5yZWZlcmVuY2VkUnVsZSE9PXZvaWQgMD90aGlzLnJlZmVyZW5jZWRSdWxlLmRlZmluaXRpb246W119YWNjZXB0KGUpe2UudmlzaXQodGhpcyl9fSxscz1jbGFzcyBleHRlbmRzIHBve3N0YXRpY3tvKHRoaXMsIlJ1bGUiKX1jb25zdHJ1Y3RvcihlKXtzdXBlcihlLmRlZmluaXRpb24pLHRoaXMub3JnVGV4dD0iIix2YSh0aGlzLHpzKGUscj0+ciE9PXZvaWQgMCkpfX0sX249Y2xhc3MgZXh0ZW5kcyBwb3tzdGF0aWN7byh0aGlzLCJBbHRlcm5hdGl2ZSIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUuZGVmaW5pdGlvbiksdGhpcy5pZ25vcmVBbWJpZ3VpdGllcz0hMSx2YSh0aGlzLHpzKGUscj0+ciE9PXZvaWQgMCkpfX0sYW49Y2xhc3MgZXh0ZW5kcyBwb3tzdGF0aWN7byh0aGlzLCJPcHRpb24iKX1jb25zdHJ1Y3RvcihlKXtzdXBlcihlLmRlZmluaXRpb24pLHRoaXMuaWR4PTEsdmEodGhpcyx6cyhlLHI9PnIhPT12b2lkIDApKX19LExuPWNsYXNzIGV4dGVuZHMgcG97c3RhdGlje28odGhpcywiUmVwZXRpdGlvbk1hbmRhdG9yeSIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUuZGVmaW5pdGlvbiksdGhpcy5pZHg9MSx2YSh0aGlzLHpzKGUscj0+ciE9PXZvaWQgMCkpfX0sRG49Y2xhc3MgZXh0ZW5kcyBwb3tzdGF0aWN7byh0aGlzLCJSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvciIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUuZGVmaW5pdGlvbiksdGhpcy5pZHg9MSx2YSh0aGlzLHpzKGUscj0+ciE9PXZvaWQgMCkpfX0sRHI9Y2xhc3MgZXh0ZW5kcyBwb3tzdGF0aWN7byh0aGlzLCJSZXBldGl0aW9uIil9Y29uc3RydWN0b3IoZSl7c3VwZXIoZS5kZWZpbml0aW9uKSx0aGlzLmlkeD0xLHZhKHRoaXMsenMoZSxyPT5yIT09dm9pZCAwKSl9fSxibj1jbGFzcyBleHRlbmRzIHBve3N0YXRpY3tvKHRoaXMsIlJlcGV0aXRpb25XaXRoU2VwYXJhdG9yIil9Y29uc3RydWN0b3IoZSl7c3VwZXIoZS5kZWZpbml0aW9uKSx0aGlzLmlkeD0xLHZhKHRoaXMsenMoZSxyPT5yIT09dm9pZCAwKSl9fSx3bj1jbGFzcyBleHRlbmRzIHBve3N0YXRpY3tvKHRoaXMsIkFsdGVybmF0aW9uIil9Z2V0IGRlZmluaXRpb24oKXtyZXR1cm4gdGhpcy5fZGVmaW5pdGlvbn1zZXQgZGVmaW5pdGlvbihlKXt0aGlzLl9kZWZpbml0aW9uPWV9Y29uc3RydWN0b3IoZSl7c3VwZXIoZS5kZWZpbml0aW9uKSx0aGlzLmlkeD0xLHRoaXMuaWdub3JlQW1iaWd1aXRpZXM9ITEsdGhpcy5oYXNQcmVkaWNhdGVzPSExLHZhKHRoaXMsenMoZSxyPT5yIT09dm9pZCAwKSl9fSxFcj1jbGFzc3tzdGF0aWN7byh0aGlzLCJUZXJtaW5hbCIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuaWR4PTEsdmEodGhpcyx6cyhlLHI9PnIhPT12b2lkIDApKX1hY2NlcHQoZSl7ZS52aXNpdCh0aGlzKX19O28oWVQsInNlcmlhbGl6ZUdyYW1tYXIiKTtvKGNnLCJzZXJpYWxpemVQcm9kdWN0aW9uIil9KTt2YXIgY3MsSmFlPU0oKCk9PnsidXNlIHN0cmljdCI7cVQoKTtjcz1jbGFzc3tzdGF0aWN7byh0aGlzLCJHQXN0VmlzaXRvciIpfXZpc2l0KGUpe2xldCByPWU7c3dpdGNoKHIuY29uc3RydWN0b3Ipe2Nhc2Ugbm46cmV0dXJuIHRoaXMudmlzaXROb25UZXJtaW5hbChyKTtjYXNlIF9uOnJldHVybiB0aGlzLnZpc2l0QWx0ZXJuYXRpdmUocik7Y2FzZSBhbjpyZXR1cm4gdGhpcy52aXNpdE9wdGlvbihyKTtjYXNlIExuOnJldHVybiB0aGlzLnZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeShyKTtjYXNlIERuOnJldHVybiB0aGlzLnZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3Iocik7Y2FzZSBibjpyZXR1cm4gdGhpcy52aXNpdFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yKHIpO2Nhc2UgRHI6cmV0dXJuIHRoaXMudmlzaXRSZXBldGl0aW9uKHIpO2Nhc2Ugd246cmV0dXJuIHRoaXMudmlzaXRBbHRlcm5hdGlvbihyKTtjYXNlIEVyOnJldHVybiB0aGlzLnZpc2l0VGVybWluYWwocik7Y2FzZSBsczpyZXR1cm4gdGhpcy52aXNpdFJ1bGUocik7ZGVmYXVsdDp0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX19dmlzaXROb25UZXJtaW5hbChlKXt9dmlzaXRBbHRlcm5hdGl2ZShlKXt9dmlzaXRPcHRpb24oZSl7fXZpc2l0UmVwZXRpdGlvbihlKXt9dmlzaXRSZXBldGl0aW9uTWFuZGF0b3J5KGUpe312aXNpdFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yKGUpe312aXNpdFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yKGUpe312aXNpdEFsdGVybmF0aW9uKGUpe312aXNpdFRlcm1pbmFsKGUpe312aXNpdFJ1bGUoZSl7fX19KTtmdW5jdGlvbiBkUih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIF9ufHx0IGluc3RhbmNlb2YgYW58fHQgaW5zdGFuY2VvZiBEcnx8dCBpbnN0YW5jZW9mIExufHx0IGluc3RhbmNlb2YgRG58fHQgaW5zdGFuY2VvZiBibnx8dCBpbnN0YW5jZW9mIEVyfHx0IGluc3RhbmNlb2YgbHN9ZnVuY3Rpb24gYzAodCxlPVtdKXtyZXR1cm4gdCBpbnN0YW5jZW9mIGFufHx0IGluc3RhbmNlb2YgRHJ8fHQgaW5zdGFuY2VvZiBibj8hMDp0IGluc3RhbmNlb2Ygd24/cXYodC5kZWZpbml0aW9uLG49PmMwKG4sZSkpOnQgaW5zdGFuY2VvZiBubiYmWW4oZSx0KT8hMTp0IGluc3RhbmNlb2YgcG8/KHQgaW5zdGFuY2VvZiBubiYmZS5wdXNoKHQpLHphKHQuZGVmaW5pdGlvbixuPT5jMChuLGUpKSk6ITF9ZnVuY3Rpb24gcFIodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB3bn1mdW5jdGlvbiBWcyh0KXtpZih0IGluc3RhbmNlb2Ygbm4pcmV0dXJuIlNVQlJVTEUiO2lmKHQgaW5zdGFuY2VvZiBhbilyZXR1cm4iT1BUSU9OIjtpZih0IGluc3RhbmNlb2Ygd24pcmV0dXJuIk9SIjtpZih0IGluc3RhbmNlb2YgTG4pcmV0dXJuIkFUX0xFQVNUX09ORSI7aWYodCBpbnN0YW5jZW9mIERuKXJldHVybiJBVF9MRUFTVF9PTkVfU0VQIjtpZih0IGluc3RhbmNlb2YgYm4pcmV0dXJuIk1BTllfU0VQIjtpZih0IGluc3RhbmNlb2YgRHIpcmV0dXJuIk1BTlkiO2lmKHQgaW5zdGFuY2VvZiBFcilyZXR1cm4iQ09OU1VNRSI7dGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIil9dmFyIGVzZT1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7cVQoKTtvKGRSLCJpc1NlcXVlbmNlUHJvZCIpO28oYzAsImlzT3B0aW9uYWxQcm9kIik7byhwUiwiaXNCcmFuY2hpbmdQcm9kIik7byhWcywiZ2V0UHJvZHVjdGlvbkRzbE5hbWUiKX0pO3ZhciB1cz1NKCgpPT57InVzZSBzdHJpY3QiO3FUKCk7SmFlKCk7ZXNlKCl9KTtmdW5jdGlvbiB0c2UodCxlLHIpe3JldHVybltuZXcgYW4oe2RlZmluaXRpb246W25ldyBFcih7dGVybWluYWxUeXBlOnQuc2VwYXJhdG9yfSldLmNvbmNhdCh0LmRlZmluaXRpb24pfSldLmNvbmNhdChlLHIpfXZhciBIdSxYVD1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7dXMoKTtIdT1jbGFzc3tzdGF0aWN7byh0aGlzLCJSZXN0V2Fsa2VyIil9d2FsayhlLHI9W10pe1NlKGUuZGVmaW5pdGlvbiwobixpKT0+e2xldCBhPXhpKGUuZGVmaW5pdGlvbixpKzEpO2lmKG4gaW5zdGFuY2VvZiBubil0aGlzLndhbGtQcm9kUmVmKG4sYSxyKTtlbHNlIGlmKG4gaW5zdGFuY2VvZiBFcil0aGlzLndhbGtUZXJtaW5hbChuLGEscik7ZWxzZSBpZihuIGluc3RhbmNlb2YgX24pdGhpcy53YWxrRmxhdChuLGEscik7ZWxzZSBpZihuIGluc3RhbmNlb2YgYW4pdGhpcy53YWxrT3B0aW9uKG4sYSxyKTtlbHNlIGlmKG4gaW5zdGFuY2VvZiBMbil0aGlzLndhbGtBdExlYXN0T25lKG4sYSxyKTtlbHNlIGlmKG4gaW5zdGFuY2VvZiBEbil0aGlzLndhbGtBdExlYXN0T25lU2VwKG4sYSxyKTtlbHNlIGlmKG4gaW5zdGFuY2VvZiBibil0aGlzLndhbGtNYW55U2VwKG4sYSxyKTtlbHNlIGlmKG4gaW5zdGFuY2VvZiBEcil0aGlzLndhbGtNYW55KG4sYSxyKTtlbHNlIGlmKG4gaW5zdGFuY2VvZiB3bil0aGlzLndhbGtPcihuLGEscik7ZWxzZSB0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX0pfXdhbGtUZXJtaW5hbChlLHIsbil7fXdhbGtQcm9kUmVmKGUscixuKXt9d2Fsa0ZsYXQoZSxyLG4pe2xldCBpPXIuY29uY2F0KG4pO3RoaXMud2FsayhlLGkpfXdhbGtPcHRpb24oZSxyLG4pe2xldCBpPXIuY29uY2F0KG4pO3RoaXMud2FsayhlLGkpfXdhbGtBdExlYXN0T25lKGUscixuKXtsZXQgaT1bbmV3IGFuKHtkZWZpbml0aW9uOmUuZGVmaW5pdGlvbn0pXS5jb25jYXQocixuKTt0aGlzLndhbGsoZSxpKX13YWxrQXRMZWFzdE9uZVNlcChlLHIsbil7bGV0IGk9dHNlKGUscixuKTt0aGlzLndhbGsoZSxpKX13YWxrTWFueShlLHIsbil7bGV0IGk9W25ldyBhbih7ZGVmaW5pdGlvbjplLmRlZmluaXRpb259KV0uY29uY2F0KHIsbik7dGhpcy53YWxrKGUsaSl9d2Fsa01hbnlTZXAoZSxyLG4pe2xldCBpPXRzZShlLHIsbik7dGhpcy53YWxrKGUsaSl9d2Fsa09yKGUscixuKXtsZXQgaT1yLmNvbmNhdChuKTtTZShlLmRlZmluaXRpb24sYT0+e2xldCBzPW5ldyBfbih7ZGVmaW5pdGlvbjpbYV19KTt0aGlzLndhbGsocyxpKX0pfX07byh0c2UsInJlc3RGb3JSZXBldGl0aW9uV2l0aFNlcGFyYXRvciIpfSk7ZnVuY3Rpb24gdTAodCl7aWYodCBpbnN0YW5jZW9mIG5uKXJldHVybiB1MCh0LnJlZmVyZW5jZWRSdWxlKTtpZih0IGluc3RhbmNlb2YgRXIpcmV0dXJuIGRCZSh0KTtpZihkUih0KSlyZXR1cm4gaEJlKHQpO2lmKHBSKHQpKXJldHVybiBmQmUodCk7dGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIil9ZnVuY3Rpb24gaEJlKHQpe2xldCBlPVtdLHI9dC5kZWZpbml0aW9uLG49MCxpPXIubGVuZ3RoPm4sYSxzPSEwO2Zvcig7aSYmczspYT1yW25dLHM9YzAoYSksZT1lLmNvbmNhdCh1MChhKSksbj1uKzEsaT1yLmxlbmd0aD5uO3JldHVybiBYbShlKX1mdW5jdGlvbiBmQmUodCl7bGV0IGU9UWUodC5kZWZpbml0aW9uLHI9PnUwKHIpKTtyZXR1cm4gWG0oV3IoZSkpfWZ1bmN0aW9uIGRCZSh0KXtyZXR1cm5bdC50ZXJtaW5hbFR5cGVdfXZhciBtUj1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7dXMoKTtvKHUwLCJmaXJzdCIpO28oaEJlLCJmaXJzdEZvclNlcXVlbmNlIik7byhmQmUsImZpcnN0Rm9yQnJhbmNoaW5nIik7byhkQmUsImZpcnN0Rm9yVGVybWluYWwiKX0pO3ZhciBqVCxnUj1NKCgpPT57InVzZSBzdHJpY3QiO2pUPSJffklOfl8ifSk7ZnVuY3Rpb24gcnNlKHQpe2xldCBlPXt9O3JldHVybiBTZSh0LHI9PntsZXQgbj1uZXcgeVIocikuc3RhcnRXYWxraW5nKCk7dmEoZSxuKX0pLGV9ZnVuY3Rpb24gcEJlKHQsZSl7cmV0dXJuIHQubmFtZStlK2pUfXZhciB5Uixuc2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtYVCgpO21SKCk7SHQoKTtnUigpO3VzKCk7eVI9Y2xhc3MgZXh0ZW5kcyBIdXtzdGF0aWN7byh0aGlzLCJSZXN5bmNGb2xsb3dzV2Fsa2VyIil9Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnRvcFByb2Q9ZSx0aGlzLmZvbGxvd3M9e319c3RhcnRXYWxraW5nKCl7cmV0dXJuIHRoaXMud2Fsayh0aGlzLnRvcFByb2QpLHRoaXMuZm9sbG93c313YWxrVGVybWluYWwoZSxyLG4pe313YWxrUHJvZFJlZihlLHIsbil7bGV0IGk9cEJlKGUucmVmZXJlbmNlZFJ1bGUsZS5pZHgpK3RoaXMudG9wUHJvZC5uYW1lLGE9ci5jb25jYXQobikscz1uZXcgX24oe2RlZmluaXRpb246YX0pLGw9dTAocyk7dGhpcy5mb2xsb3dzW2ldPWx9fTtvKHJzZSwiY29tcHV0ZUFsbFByb2RzRm9sbG93cyIpO28ocEJlLCJidWlsZEJldHdlZW5Qcm9kc0ZvbGxvd1ByZWZpeCIpfSk7ZnVuY3Rpb24gdWcodCl7bGV0IGU9dC50b1N0cmluZygpO2lmKEtULmhhc093blByb3BlcnR5KGUpKXJldHVybiBLVFtlXTt7bGV0IHI9bUJlLnBhdHRlcm4oZSk7cmV0dXJuIEtUW2VdPXIscn19ZnVuY3Rpb24gaXNlKCl7S1Q9e319dmFyIEtULG1CZSxRVD1NKCgpPT57InVzZSBzdHJpY3QiO2YyKCk7S1Q9e30sbUJlPW5ldyBhMDtvKHVnLCJnZXRSZWdFeHBBc3QiKTtvKGlzZSwiY2xlYXJSZWdFeHBQYXJzZXJDYWNoZSIpfSk7ZnVuY3Rpb24gb3NlKHQsZT0hMSl7dHJ5e2xldCByPXVnKHQpO3JldHVybiB2UihyLnZhbHVlLHt9LHIuZmxhZ3MuaWdub3JlQ2FzZSl9Y2F0Y2gocil7aWYoci5tZXNzYWdlPT09c3NlKWUmJmcyKGAke3gyfQlVbmFibGUgdG8gb3B0aW1pemU6IDwgJHt0LnRvU3RyaW5nKCl9ID4KCUNvbXBsZW1lbnQgU2V0cyBjYW5ub3QgYmUgYXV0b21hdGljYWxseSBvcHRpbWl6ZWQuCglUaGlzIHdpbGwgZGlzYWJsZSB0aGUgbGV4ZXIncyBmaXJzdCBjaGFyIG9wdGltaXphdGlvbnMuCglTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNDT01QTEVNRU5UIGZvciBkZXRhaWxzLmApO2Vsc2V7bGV0IG49IiI7ZSYmKG49YAoJVGhpcyB3aWxsIGRpc2FibGUgdGhlIGxleGVyJ3MgZmlyc3QgY2hhciBvcHRpbWl6YXRpb25zLgoJU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjUkVHRVhQX1BBUlNJTkcgZm9yIGRldGFpbHMuYCksb2coYCR7eDJ9CglGYWlsZWQgcGFyc2luZzogPCAke3QudG9TdHJpbmcoKX0gPgoJVXNpbmcgdGhlIEBjaGV2cm90YWluL3JlZ2V4cC10by1hc3QgbGlicmFyeQoJUGxlYXNlIG9wZW4gYW4gaXNzdWUgYXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaGV2cm90YWluL2NoZXZyb3RhaW4vaXNzdWVzYCtuKX19cmV0dXJuW119ZnVuY3Rpb24gdlIodCxlLHIpe3N3aXRjaCh0LnR5cGUpe2Nhc2UiRGlzanVuY3Rpb24iOmZvcihsZXQgaT0wO2k8dC52YWx1ZS5sZW5ndGg7aSsrKXZSKHQudmFsdWVbaV0sZSxyKTticmVhaztjYXNlIkFsdGVybmF0aXZlIjpsZXQgbj10LnZhbHVlO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtsZXQgYT1uW2ldO3N3aXRjaChhLnR5cGUpe2Nhc2UiRW5kQW5jaG9yIjpjYXNlIkdyb3VwQmFja1JlZmVyZW5jZSI6Y2FzZSJMb29rYWhlYWQiOmNhc2UiTmVnYXRpdmVMb29rYWhlYWQiOmNhc2UiU3RhcnRBbmNob3IiOmNhc2UiV29yZEJvdW5kYXJ5IjpjYXNlIk5vbldvcmRCb3VuZGFyeSI6Y29udGludWV9bGV0IHM9YTtzd2l0Y2gocy50eXBlKXtjYXNlIkNoYXJhY3RlciI6WlQocy52YWx1ZSxlLHIpO2JyZWFrO2Nhc2UiU2V0IjppZihzLmNvbXBsZW1lbnQ9PT0hMCl0aHJvdyBFcnJvcihzc2UpO1NlKHMudmFsdWUsdT0+e2lmKHR5cGVvZiB1PT0ibnVtYmVyIilaVCh1LGUscik7ZWxzZXtsZXQgaD11O2lmKHI9PT0hMClmb3IobGV0IGY9aC5mcm9tO2Y8PWgudG87ZisrKVpUKGYsZSxyKTtlbHNle2ZvcihsZXQgZj1oLmZyb207Zjw9aC50byYmZjxoZztmKyspWlQoZixlLHIpO2lmKGgudG8+PWhnKXtsZXQgZj1oLmZyb20+PWhnP2guZnJvbTpoZyxkPWgudG8scD1HYyhmKSxtPUdjKGQpO2ZvcihsZXQgZz1wO2c8PW07ZysrKWVbZ109Z319fX0pO2JyZWFrO2Nhc2UiR3JvdXAiOnZSKHMudmFsdWUsZSxyKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJOb24gRXhoYXVzdGl2ZSBNYXRjaCIpfWxldCBsPXMucXVhbnRpZmllciE9PXZvaWQgMCYmcy5xdWFudGlmaWVyLmF0TGVhc3Q9PT0wO2lmKHMudHlwZT09PSJHcm91cCImJnhSKHMpPT09ITF8fHMudHlwZSE9PSJHcm91cCImJmw9PT0hMSlicmVha31icmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCEiKX1yZXR1cm4gYnIoZSl9ZnVuY3Rpb24gWlQodCxlLHIpe2xldCBuPUdjKHQpO2Vbbl09bixyPT09ITAmJmdCZSh0LGUpfWZ1bmN0aW9uIGdCZSh0LGUpe2xldCByPVN0cmluZy5mcm9tQ2hhckNvZGUodCksbj1yLnRvVXBwZXJDYXNlKCk7aWYobiE9PXIpe2xldCBpPUdjKG4uY2hhckNvZGVBdCgwKSk7ZVtpXT1pfWVsc2V7bGV0IGk9ci50b0xvd2VyQ2FzZSgpO2lmKGkhPT1yKXtsZXQgYT1HYyhpLmNoYXJDb2RlQXQoMCkpO2VbYV09YX19fWZ1bmN0aW9uIGFzZSh0LGUpe3JldHVybiBhcyh0LnZhbHVlLHI9PntpZih0eXBlb2Ygcj09Im51bWJlciIpcmV0dXJuIFluKGUscik7e2xldCBuPXI7cmV0dXJuIGFzKGUsaT0+bi5mcm9tPD1pJiZpPD1uLnRvKSE9PXZvaWQgMH19KX1mdW5jdGlvbiB4Uih0KXtsZXQgZT10LnF1YW50aWZpZXI7cmV0dXJuIGUmJmUuYXRMZWFzdD09PTA/ITA6dC52YWx1ZT9EdCh0LnZhbHVlKT96YSh0LnZhbHVlLHhSKTp4Uih0LnZhbHVlKTohMX1mdW5jdGlvbiBKVCh0LGUpe2lmKGUgaW5zdGFuY2VvZiBSZWdFeHApe2xldCByPXVnKGUpLG49bmV3IGJSKHQpO3JldHVybiBuLnZpc2l0KHIpLG4uZm91bmR9ZWxzZSByZXR1cm4gYXMoZSxyPT5Zbih0LHIuY2hhckNvZGVBdCgwKSkpIT09dm9pZCAwfXZhciBzc2UseDIsYlIsbHNlPU0oKCk9PnsidXNlIHN0cmljdCI7ZjIoKTtIdCgpO2xnKCk7UVQoKTt3UigpO3NzZT0iQ29tcGxlbWVudCBTZXRzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBmaXJzdCBjaGFyIG9wdGltaXphdGlvbiIseDI9YFVuYWJsZSB0byB1c2UgImZpcnN0IGNoYXIiIGxleGVyIG9wdGltaXphdGlvbnM6CmA7byhvc2UsImdldE9wdGltaXplZFN0YXJ0Q29kZXNJbmRpY2VzIik7byh2UiwiZmlyc3RDaGFyT3B0aW1pemVkSW5kaWNlcyIpO28oWlQsImFkZE9wdGltaXplZElkeFRvUmVzdWx0Iik7byhnQmUsImhhbmRsZUlnbm9yZUNhc2UiKTtvKGFzZSwiZmluZENvZGUiKTtvKHhSLCJpc1dob2xlT3B0aW9uYWwiKTtiUj1jbGFzcyBleHRlbmRzIHpje3N0YXRpY3tvKHRoaXMsIkNoYXJDb2RlRmluZGVyIil9Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnRhcmdldENoYXJDb2Rlcz1lLHRoaXMuZm91bmQ9ITF9dmlzaXRDaGlsZHJlbihlKXtpZih0aGlzLmZvdW5kIT09ITApe3N3aXRjaChlLnR5cGUpe2Nhc2UiTG9va2FoZWFkIjp0aGlzLnZpc2l0TG9va2FoZWFkKGUpO3JldHVybjtjYXNlIk5lZ2F0aXZlTG9va2FoZWFkIjp0aGlzLnZpc2l0TmVnYXRpdmVMb29rYWhlYWQoZSk7cmV0dXJufXN1cGVyLnZpc2l0Q2hpbGRyZW4oZSl9fXZpc2l0Q2hhcmFjdGVyKGUpe1luKHRoaXMudGFyZ2V0Q2hhckNvZGVzLGUudmFsdWUpJiYodGhpcy5mb3VuZD0hMCl9dmlzaXRTZXQoZSl7ZS5jb21wbGVtZW50P2FzZShlLHRoaXMudGFyZ2V0Q2hhckNvZGVzKT09PXZvaWQgMCYmKHRoaXMuZm91bmQ9ITApOmFzZShlLHRoaXMudGFyZ2V0Q2hhckNvZGVzKSE9PXZvaWQgMCYmKHRoaXMuZm91bmQ9ITApfX07byhKVCwiY2FuTWF0Y2hDaGFyQ29kZSIpfSk7ZnVuY3Rpb24gaHNlKHQsZSl7ZT1yZihlLHt1c2VTdGlja3k6a1IsZGVidWc6ITEsc2FmZU1vZGU6ITEscG9zaXRpb25UcmFja2luZzoiZnVsbCIsbGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzOlsiXHIiLGAKYF0sdHJhY2VyOm8oKGIsdyk9PncoKSwidHJhY2VyIil9KTtsZXQgcj1lLnRyYWNlcjtyKCJpbml0Q2hhckNvZGVUb09wdGltaXplZEluZGV4TWFwIiwoKT0+e0lCZSgpfSk7bGV0IG47cigiUmVqZWN0IExleGVyLk5BIiwoKT0+e249YWYodCxiPT5iW2gwXT09PWNpLk5BKX0pO2xldCBpPSExLGE7cigiVHJhbnNmb3JtIFBhdHRlcm5zIiwoKT0+e2k9ITEsYT1RZShuLGI9PntsZXQgdz1iW2gwXTtpZihYbyh3KSl7bGV0IF89dy5zb3VyY2U7cmV0dXJuIF8ubGVuZ3RoPT09MSYmXyE9PSJeIiYmXyE9PSIkIiYmXyE9PSIuIiYmIXcuaWdub3JlQ2FzZT9fOl8ubGVuZ3RoPT09MiYmX1swXT09PSJcXCImJiFZbihbImQiLCJEIiwicyIsIlMiLCJ0IiwiciIsIm4iLCJ0IiwiMCIsImMiLCJiIiwiQiIsImYiLCJ2IiwidyIsIlciXSxfWzFdKT9fWzFdOmUudXNlU3RpY2t5P3VzZSh3KTpjc2Uodyl9ZWxzZXtpZihfaSh3KSlyZXR1cm4gaT0hMCx7ZXhlYzp3fTtpZih0eXBlb2Ygdz09Im9iamVjdCIpcmV0dXJuIGk9ITAsdztpZih0eXBlb2Ygdz09InN0cmluZyIpe2lmKHcubGVuZ3RoPT09MSlyZXR1cm4gdzt7bGV0IF89dy5yZXBsYWNlKC9bXFxeJC4qKz8oKVtcXXt9fF0vZywiXFwkJiIpLFQ9bmV3IFJlZ0V4cChfKTtyZXR1cm4gZS51c2VTdGlja3k/dXNlKFQpOmNzZShUKX19ZWxzZSB0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX19KX0pO2xldCBzLGwsdSxoLGY7cigibWlzYyBtYXBwaW5nIiwoKT0+e3M9UWUobixiPT5iLnRva2VuVHlwZUlkeCksbD1RZShuLGI9PntsZXQgdz1iLkdST1VQO2lmKHchPT1jaS5TS0lQUEVEKXtpZihiaSh3KSlyZXR1cm4gdztpZihkcih3KSlyZXR1cm4hMTt0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX19KSx1PVFlKG4sYj0+e2xldCB3PWIuTE9OR0VSX0FMVDtpZih3KXJldHVybiBEdCh3KT9RZSh3LFQ9Pm9UKG4sVCkpOltvVChuLHcpXX0pLGg9UWUobixiPT5iLlBVU0hfTU9ERSksZj1RZShuLGI9Pk50KGIsIlBPUF9NT0RFIikpfSk7bGV0IGQ7cigiTGluZSBUZXJtaW5hdG9yIEhhbmRsaW5nIiwoKT0+e2xldCBiPXhzZShlLmxpbmVUZXJtaW5hdG9yQ2hhcmFjdGVycyk7ZD1RZShuLHc9PiExKSxlLnBvc2l0aW9uVHJhY2tpbmchPT0ib25seU9mZnNldCImJihkPVFlKG4sdz0+TnQodywiTElORV9CUkVBS1MiKT8hIXcuTElORV9CUkVBS1M6dnNlKHcsYik9PT0hMSYmSlQoYix3LlBBVFRFUk4pKSl9KTtsZXQgcCxtLGcseTtyKCJNaXNjIE1hcHBpbmcgIzIiLCgpPT57cD1RZShuLGdzZSksbT1RZShhLFJCZSksZz1xcihuLChiLHcpPT57bGV0IF89dy5HUk9VUDtyZXR1cm4gYmkoXykmJl8hPT1jaS5TS0lQUEVEJiYoYltfXT1bXSksYn0se30pLHk9UWUoYSwoYix3KT0+KHtwYXR0ZXJuOmFbd10sbG9uZ2VyQWx0OnVbd10sY2FuTGluZVRlcm1pbmF0b3I6ZFt3XSxpc0N1c3RvbTpwW3ddLHNob3J0Om1bd10sZ3JvdXA6bFt3XSxwdXNoOmhbd10scG9wOmZbd10sdG9rZW5UeXBlSWR4OnNbd10sdG9rZW5UeXBlOm5bd119KSl9KTtsZXQgdj0hMCx4PVtdO3JldHVybiBlLnNhZmVNb2RlfHxyKCJGaXJzdCBDaGFyIE9wdGltaXphdGlvbiIsKCk9Pnt4PXFyKG4sKGIsdyxfKT0+e2lmKHR5cGVvZiB3LlBBVFRFUk49PSJzdHJpbmciKXtsZXQgVD13LlBBVFRFUk4uY2hhckNvZGVBdCgwKSxFPUdjKFQpO1RSKGIsRSx5W19dKX1lbHNlIGlmKER0KHcuU1RBUlRfQ0hBUlNfSElOVCkpe2xldCBUO1NlKHcuU1RBUlRfQ0hBUlNfSElOVCxFPT57bGV0IEw9dHlwZW9mIEU9PSJzdHJpbmciP0UuY2hhckNvZGVBdCgwKTpFLFM9R2MoTCk7VCE9PVMmJihUPVMsVFIoYixTLHlbX10pKX0pfWVsc2UgaWYoWG8ody5QQVRURVJOKSlpZih3LlBBVFRFUk4udW5pY29kZSl2PSExLGUuZW5zdXJlT3B0aW1pemF0aW9ucyYmb2coYCR7eDJ9CVVuYWJsZSB0byBhbmFseXplIDwgJHt3LlBBVFRFUk4udG9TdHJpbmcoKX0gPiBwYXR0ZXJuLgoJVGhlIHJlZ2V4cCB1bmljb2RlIGZsYWcgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgdGhlIHJlZ2V4cC10by1hc3QgbGlicmFyeS4KCVRoaXMgd2lsbCBkaXNhYmxlIHRoZSBsZXhlcidzIGZpcnN0IGNoYXIgb3B0aW1pemF0aW9ucy4KCUZvciBkZXRhaWxzIFNlZTogaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2xleGVyX2Vycm9ycy5odG1sI1VOSUNPREVfT1BUSU1JWkVgKTtlbHNle2xldCBUPW9zZSh3LlBBVFRFUk4sZS5lbnN1cmVPcHRpbWl6YXRpb25zKTtjcihUKSYmKHY9ITEpLFNlKFQsRT0+e1RSKGIsRSx5W19dKX0pfWVsc2UgZS5lbnN1cmVPcHRpbWl6YXRpb25zJiZvZyhgJHt4Mn0JVG9rZW5UeXBlOiA8JHt3Lm5hbWV9PiBpcyB1c2luZyBhIGN1c3RvbSB0b2tlbiBwYXR0ZXJuIHdpdGhvdXQgcHJvdmlkaW5nIDxzdGFydF9jaGFyc19oaW50PiBwYXJhbWV0ZXIuCglUaGlzIHdpbGwgZGlzYWJsZSB0aGUgbGV4ZXIncyBmaXJzdCBjaGFyIG9wdGltaXphdGlvbnMuCglGb3IgZGV0YWlscyBTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNDVVNUT01fT1BUSU1JWkVgKSx2PSExO3JldHVybiBifSxbXSl9KSx7ZW1wdHlHcm91cHM6ZyxwYXR0ZXJuSWR4VG9Db25maWc6eSxjaGFyQ29kZVRvUGF0dGVybklkeFRvQ29uZmlnOngsaGFzQ3VzdG9tOmksY2FuQmVPcHRpbWl6ZWQ6dn19ZnVuY3Rpb24gZnNlKHQsZSl7bGV0IHI9W10sbj12QmUodCk7cj1yLmNvbmNhdChuLmVycm9ycyk7bGV0IGk9eEJlKG4udmFsaWQpLGE9aS52YWxpZDtyZXR1cm4gcj1yLmNvbmNhdChpLmVycm9ycykscj1yLmNvbmNhdCh5QmUoYSkpLHI9ci5jb25jYXQoQUJlKGEpKSxyPXIuY29uY2F0KF9CZShhLGUpKSxyPXIuY29uY2F0KExCZShhKSkscn1mdW5jdGlvbiB5QmUodCl7bGV0IGU9W10scj1Zcih0LG49PlhvKG5baDBdKSk7cmV0dXJuIGU9ZS5jb25jYXQod0JlKHIpKSxlPWUuY29uY2F0KEVCZShyKSksZT1lLmNvbmNhdChTQmUocikpLGU9ZS5jb25jYXQoQ0JlKHIpKSxlPWUuY29uY2F0KFRCZShyKSksZX1mdW5jdGlvbiB2QmUodCl7bGV0IGU9WXIodCxpPT4hTnQoaSxoMCkpLHI9UWUoZSxpPT4oe21lc3NhZ2U6IlRva2VuIFR5cGU6IC0+IitpLm5hbWUrIjwtIG1pc3Npbmcgc3RhdGljICdQQVRURVJOJyBwcm9wZXJ0eSIsdHlwZTpxbi5NSVNTSU5HX1BBVFRFUk4sdG9rZW5UeXBlczpbaV19KSksbj1uZih0LGUpO3JldHVybntlcnJvcnM6cix2YWxpZDpufX1mdW5jdGlvbiB4QmUodCl7bGV0IGU9WXIodCxpPT57bGV0IGE9aVtoMF07cmV0dXJuIVhvKGEpJiYhX2koYSkmJiFOdChhLCJleGVjIikmJiFiaShhKX0pLHI9UWUoZSxpPT4oe21lc3NhZ2U6IlRva2VuIFR5cGU6IC0+IitpLm5hbWUrIjwtIHN0YXRpYyAnUEFUVEVSTicgY2FuIG9ubHkgYmUgYSBSZWdFeHAsIGEgRnVuY3Rpb24gbWF0Y2hpbmcgdGhlIHtDdXN0b21QYXR0ZXJuTWF0Y2hlckZ1bmN9IHR5cGUgb3IgYW4gT2JqZWN0IG1hdGNoaW5nIHRoZSB7SUN1c3RvbVBhdHRlcm59IGludGVyZmFjZS4iLHR5cGU6cW4uSU5WQUxJRF9QQVRURVJOLHRva2VuVHlwZXM6W2ldfSkpLG49bmYodCxlKTtyZXR1cm57ZXJyb3JzOnIsdmFsaWQ6bn19ZnVuY3Rpb24gd0JlKHQpe2NsYXNzIGUgZXh0ZW5kcyB6Y3tzdGF0aWN7byh0aGlzLCJFbmRBbmNob3JGaW5kZXIiKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5mb3VuZD0hMX12aXNpdEVuZEFuY2hvcihhKXt0aGlzLmZvdW5kPSEwfX1sZXQgcj1Zcih0LGk9PntsZXQgYT1pLlBBVFRFUk47dHJ5e2xldCBzPXVnKGEpLGw9bmV3IGU7cmV0dXJuIGwudmlzaXQocyksbC5mb3VuZH1jYXRjaHtyZXR1cm4gYkJlLnRlc3QoYS5zb3VyY2UpfX0pO3JldHVybiBRZShyLGk9Pih7bWVzc2FnZTpgVW5leHBlY3RlZCBSZWdFeHAgQW5jaG9yIEVycm9yOgoJVG9rZW4gVHlwZTogLT5gK2kubmFtZStgPC0gc3RhdGljICdQQVRURVJOJyBjYW5ub3QgY29udGFpbiBlbmQgb2YgaW5wdXQgYW5jaG9yICckJwoJU2VlIGNoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjQU5DSE9SUwlmb3IgZGV0YWlscy5gLHR5cGU6cW4uRU9JX0FOQ0hPUl9GT1VORCx0b2tlblR5cGVzOltpXX0pKX1mdW5jdGlvbiBUQmUodCl7bGV0IGU9WXIodCxuPT5uLlBBVFRFUk4udGVzdCgiIikpO3JldHVybiBRZShlLG49Pih7bWVzc2FnZToiVG9rZW4gVHlwZTogLT4iK24ubmFtZSsiPC0gc3RhdGljICdQQVRURVJOJyBtdXN0IG5vdCBtYXRjaCBhbiBlbXB0eSBzdHJpbmciLHR5cGU6cW4uRU1QVFlfTUFUQ0hfUEFUVEVSTix0b2tlblR5cGVzOltuXX0pKX1mdW5jdGlvbiBFQmUodCl7Y2xhc3MgZSBleHRlbmRzIHpje3N0YXRpY3tvKHRoaXMsIlN0YXJ0QW5jaG9yRmluZGVyIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZm91bmQ9ITF9dmlzaXRTdGFydEFuY2hvcihhKXt0aGlzLmZvdW5kPSEwfX1sZXQgcj1Zcih0LGk9PntsZXQgYT1pLlBBVFRFUk47dHJ5e2xldCBzPXVnKGEpLGw9bmV3IGU7cmV0dXJuIGwudmlzaXQocyksbC5mb3VuZH1jYXRjaHtyZXR1cm4ga0JlLnRlc3QoYS5zb3VyY2UpfX0pO3JldHVybiBRZShyLGk9Pih7bWVzc2FnZTpgVW5leHBlY3RlZCBSZWdFeHAgQW5jaG9yIEVycm9yOgoJVG9rZW4gVHlwZTogLT5gK2kubmFtZStgPC0gc3RhdGljICdQQVRURVJOJyBjYW5ub3QgY29udGFpbiBzdGFydCBvZiBpbnB1dCBhbmNob3IgJ14nCglTZWUgaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2xleGVyX2Vycm9ycy5odG1sI0FOQ0hPUlMJZm9yIGRldGFpbHMuYCx0eXBlOnFuLlNPSV9BTkNIT1JfRk9VTkQsdG9rZW5UeXBlczpbaV19KSl9ZnVuY3Rpb24gU0JlKHQpe2xldCBlPVlyKHQsbj0+e2xldCBpPW5baDBdO3JldHVybiBpIGluc3RhbmNlb2YgUmVnRXhwJiYoaS5tdWx0aWxpbmV8fGkuZ2xvYmFsKX0pO3JldHVybiBRZShlLG49Pih7bWVzc2FnZToiVG9rZW4gVHlwZTogLT4iK24ubmFtZSsiPC0gc3RhdGljICdQQVRURVJOJyBtYXkgTk9UIGNvbnRhaW4gZ2xvYmFsKCdnJykgb3IgbXVsdGlsaW5lKCdtJykiLHR5cGU6cW4uVU5TVVBQT1JURURfRkxBR1NfRk9VTkQsdG9rZW5UeXBlczpbbl19KSl9ZnVuY3Rpb24gQ0JlKHQpe2xldCBlPVtdLHI9UWUodCxhPT5xcih0LChzLGwpPT4oYS5QQVRURVJOLnNvdXJjZT09PWwuUEFUVEVSTi5zb3VyY2UmJiFZbihlLGwpJiZsLlBBVFRFUk4hPT1jaS5OQSYmKGUucHVzaChsKSxzLnB1c2gobCkpLHMpLFtdKSk7cj1SYyhyKTtsZXQgbj1ZcihyLGE9PmEubGVuZ3RoPjEpO3JldHVybiBRZShuLGE9PntsZXQgcz1RZShhLHU9PnUubmFtZSk7cmV0dXJue21lc3NhZ2U6YFRoZSBzYW1lIFJlZ0V4cCBwYXR0ZXJuIC0+JHtzYShhKS5QQVRURVJOfTwtaGFzIGJlZW4gdXNlZCBpbiBhbGwgb2YgdGhlIGZvbGxvd2luZyBUb2tlbiBUeXBlczogJHtzLmpvaW4oIiwgIil9IDwtYCx0eXBlOnFuLkRVUExJQ0FURV9QQVRURVJOU19GT1VORCx0b2tlblR5cGVzOmF9fSl9ZnVuY3Rpb24gQUJlKHQpe2xldCBlPVlyKHQsbj0+e2lmKCFOdChuLCJHUk9VUCIpKXJldHVybiExO2xldCBpPW4uR1JPVVA7cmV0dXJuIGkhPT1jaS5TS0lQUEVEJiZpIT09Y2kuTkEmJiFiaShpKX0pO3JldHVybiBRZShlLG49Pih7bWVzc2FnZToiVG9rZW4gVHlwZTogLT4iK24ubmFtZSsiPC0gc3RhdGljICdHUk9VUCcgY2FuIG9ubHkgYmUgTGV4ZXIuU0tJUFBFRC9MZXhlci5OQS9BIFN0cmluZyIsdHlwZTpxbi5JTlZBTElEX0dST1VQX1RZUEVfRk9VTkQsdG9rZW5UeXBlczpbbl19KSl9ZnVuY3Rpb24gX0JlKHQsZSl7bGV0IHI9WXIodCxpPT5pLlBVU0hfTU9ERSE9PXZvaWQgMCYmIVluKGUsaS5QVVNIX01PREUpKTtyZXR1cm4gUWUocixpPT4oe21lc3NhZ2U6YFRva2VuIFR5cGU6IC0+JHtpLm5hbWV9PC0gc3RhdGljICdQVVNIX01PREUnIHZhbHVlIGNhbm5vdCByZWZlciB0byBhIExleGVyIE1vZGUgLT4ke2kuUFVTSF9NT0RFfTwtd2hpY2ggZG9lcyBub3QgZXhpc3RgLHR5cGU6cW4uUFVTSF9NT0RFX0RPRVNfTk9UX0VYSVNULHRva2VuVHlwZXM6W2ldfSkpfWZ1bmN0aW9uIExCZSh0KXtsZXQgZT1bXSxyPXFyKHQsKG4saSxhKT0+e2xldCBzPWkuUEFUVEVSTjtyZXR1cm4gcz09PWNpLk5BfHwoYmkocyk/bi5wdXNoKHtzdHI6cyxpZHg6YSx0b2tlblR5cGU6aX0pOlhvKHMpJiZOQmUocykmJm4ucHVzaCh7c3RyOnMuc291cmNlLGlkeDphLHRva2VuVHlwZTppfSkpLG59LFtdKTtyZXR1cm4gU2UodCwobixpKT0+e1NlKHIsKHtzdHI6YSxpZHg6cyx0b2tlblR5cGU6bH0pPT57aWYoaTxzJiZEQmUoYSxuLlBBVFRFUk4pKXtsZXQgdT1gVG9rZW46IC0+JHtsLm5hbWV9PC0gY2FuIG5ldmVyIGJlIG1hdGNoZWQuCkJlY2F1c2UgaXQgYXBwZWFycyBBRlRFUiB0aGUgVG9rZW4gVHlwZSAtPiR7bi5uYW1lfTwtaW4gdGhlIGxleGVyJ3MgZGVmaW5pdGlvbi4KU2VlIGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNVTlJFQUNIQUJMRWA7ZS5wdXNoKHttZXNzYWdlOnUsdHlwZTpxbi5VTlJFQUNIQUJMRV9QQVRURVJOLHRva2VuVHlwZXM6W24sbF19KX19KX0pLGV9ZnVuY3Rpb24gREJlKHQsZSl7aWYoWG8oZSkpe2xldCByPWUuZXhlYyh0KTtyZXR1cm4gciE9PW51bGwmJnIuaW5kZXg9PT0wfWVsc2V7aWYoX2koZSkpcmV0dXJuIGUodCwwLFtdLHt9KTtpZihOdChlLCJleGVjIikpcmV0dXJuIGUuZXhlYyh0LDAsW10se30pO2lmKHR5cGVvZiBlPT0ic3RyaW5nIilyZXR1cm4gZT09PXQ7dGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIil9fWZ1bmN0aW9uIE5CZSh0KXtyZXR1cm4gYXMoWyIuIiwiXFwiLCJbIiwiXSIsInwiLCJeIiwiJCIsIigiLCIpIiwiPyIsIioiLCIrIiwieyJdLHI9PnQuc291cmNlLmluZGV4T2YocikhPT0tMSk9PT12b2lkIDB9ZnVuY3Rpb24gY3NlKHQpe2xldCBlPXQuaWdub3JlQ2FzZT8iaSI6IiI7cmV0dXJuIG5ldyBSZWdFeHAoYF4oPzoke3Quc291cmNlfSlgLGUpfWZ1bmN0aW9uIHVzZSh0KXtsZXQgZT10Lmlnbm9yZUNhc2U/Iml5IjoieSI7cmV0dXJuIG5ldyBSZWdFeHAoYCR7dC5zb3VyY2V9YCxlKX1mdW5jdGlvbiBkc2UodCxlLHIpe2xldCBuPVtdO3JldHVybiBOdCh0LGZnKXx8bi5wdXNoKHttZXNzYWdlOiJBIE11bHRpTW9kZSBMZXhlciBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgd2l0aG91dCBhIDwiK2ZnK2A+IHByb3BlcnR5IGluIGl0cyBkZWZpbml0aW9uCmAsdHlwZTpxbi5NVUxUSV9NT0RFX0xFWEVSX1dJVEhPVVRfREVGQVVMVF9NT0RFfSksTnQodCxlayl8fG4ucHVzaCh7bWVzc2FnZToiQSBNdWx0aU1vZGUgTGV4ZXIgY2Fubm90IGJlIGluaXRpYWxpemVkIHdpdGhvdXQgYSA8IitlaytgPiBwcm9wZXJ0eSBpbiBpdHMgZGVmaW5pdGlvbgpgLHR5cGU6cW4uTVVMVElfTU9ERV9MRVhFUl9XSVRIT1VUX01PREVTX1BST1BFUlRZfSksTnQodCxlaykmJk50KHQsZmcpJiYhTnQodC5tb2Rlcyx0LmRlZmF1bHRNb2RlKSYmbi5wdXNoKHttZXNzYWdlOmBBIE11bHRpTW9kZSBMZXhlciBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCBhICR7Zmd9OiA8JHt0LmRlZmF1bHRNb2RlfT53aGljaCBkb2VzIG5vdCBleGlzdApgLHR5cGU6cW4uTVVMVElfTU9ERV9MRVhFUl9ERUZBVUxUX01PREVfVkFMVUVfRE9FU19OT1RfRVhJU1R9KSxOdCh0LGVrKSYmU2UodC5tb2RlcywoaSxhKT0+e1NlKGksKHMsbCk9PntpZihkcihzKSluLnB1c2goe21lc3NhZ2U6YEEgTGV4ZXIgY2Fubm90IGJlIGluaXRpYWxpemVkIHVzaW5nIGFuIHVuZGVmaW5lZCBUb2tlbiBUeXBlLiBNb2RlOjwke2F9PiBhdCBpbmRleDogPCR7bH0+CmAsdHlwZTpxbi5MRVhFUl9ERUZJTklUSU9OX0NBTk5PVF9DT05UQUlOX1VOREVGSU5FRH0pO2Vsc2UgaWYoTnQocywiTE9OR0VSX0FMVCIpKXtsZXQgdT1EdChzLkxPTkdFUl9BTFQpP3MuTE9OR0VSX0FMVDpbcy5MT05HRVJfQUxUXTtTZSh1LGg9PnshZHIoaCkmJiFZbihpLGgpJiZuLnB1c2goe21lc3NhZ2U6YEEgTXVsdGlNb2RlIExleGVyIGNhbm5vdCBiZSBpbml0aWFsaXplZCB3aXRoIGEgbG9uZ2VyX2FsdCA8JHtoLm5hbWV9PiBvbiB0b2tlbiA8JHtzLm5hbWV9PiBvdXRzaWRlIG9mIG1vZGUgPCR7YX0+CmAsdHlwZTpxbi5NVUxUSV9NT0RFX0xFWEVSX0xPTkdFUl9BTFRfTk9UX0lOX0NVUlJFTlRfTU9ERX0pfSl9fSl9KSxufWZ1bmN0aW9uIHBzZSh0LGUscil7bGV0IG49W10saT0hMSxhPVJjKFdyKGJyKHQubW9kZXMpKSkscz1hZihhLHU9PnVbaDBdPT09Y2kuTkEpLGw9eHNlKHIpO3JldHVybiBlJiZTZShzLHU9PntsZXQgaD12c2UodSxsKTtpZihoIT09ITEpe2xldCBkPXttZXNzYWdlOk1CZSh1LGgpLHR5cGU6aC5pc3N1ZSx0b2tlblR5cGU6dX07bi5wdXNoKGQpfWVsc2UgTnQodSwiTElORV9CUkVBS1MiKT91LkxJTkVfQlJFQUtTPT09ITAmJihpPSEwKTpKVChsLHUuUEFUVEVSTikmJihpPSEwKX0pLGUmJiFpJiZuLnB1c2goe21lc3NhZ2U6YFdhcm5pbmc6IE5vIExJTkVfQlJFQUtTIEZvdW5kLgoJVGhpcyBMZXhlciBoYXMgYmVlbiBkZWZpbmVkIHRvIHRyYWNrIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiwKCUJ1dCBub25lIG9mIHRoZSBUb2tlbiBUeXBlcyBjYW4gYmUgaWRlbnRpZmllZCBhcyBtYXRjaGluZyBhIGxpbmUgdGVybWluYXRvci4KCVNlZSBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjTElORV9CUkVBS1MgCglmb3IgZGV0YWlscy5gLHR5cGU6cW4uTk9fTElORV9CUkVBS1NfRkxBR1N9KSxufWZ1bmN0aW9uIG1zZSh0KXtsZXQgZT17fSxyPUdyKHQpO3JldHVybiBTZShyLG49PntsZXQgaT10W25dO2lmKER0KGkpKWVbbl09W107ZWxzZSB0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX0pLGV9ZnVuY3Rpb24gZ3NlKHQpe2xldCBlPXQuUEFUVEVSTjtpZihYbyhlKSlyZXR1cm4hMTtpZihfaShlKSlyZXR1cm4hMDtpZihOdChlLCJleGVjIikpcmV0dXJuITA7aWYoYmkoZSkpcmV0dXJuITE7dGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIil9ZnVuY3Rpb24gUkJlKHQpe3JldHVybiBiaSh0KSYmdC5sZW5ndGg9PT0xP3QuY2hhckNvZGVBdCgwKTohMX1mdW5jdGlvbiB2c2UodCxlKXtpZihOdCh0LCJMSU5FX0JSRUFLUyIpKXJldHVybiExO2lmKFhvKHQuUEFUVEVSTikpe3RyeXtKVChlLHQuUEFUVEVSTil9Y2F0Y2gocil7cmV0dXJue2lzc3VlOnFuLklERU5USUZZX1RFUk1JTkFUT1IsZXJyTXNnOnIubWVzc2FnZX19cmV0dXJuITF9ZWxzZXtpZihiaSh0LlBBVFRFUk4pKXJldHVybiExO2lmKGdzZSh0KSlyZXR1cm57aXNzdWU6cW4uQ1VTVE9NX0xJTkVfQlJFQUt9O3Rocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfX1mdW5jdGlvbiBNQmUodCxlKXtpZihlLmlzc3VlPT09cW4uSURFTlRJRllfVEVSTUlOQVRPUilyZXR1cm5gV2FybmluZzogdW5hYmxlIHRvIGlkZW50aWZ5IGxpbmUgdGVybWluYXRvciB1c2FnZSBpbiBwYXR0ZXJuLgoJVGhlIHByb2JsZW0gaXMgaW4gdGhlIDwke3QubmFtZX0+IFRva2VuIFR5cGUKCSBSb290IGNhdXNlOiAke2UuZXJyTXNnfS4KCUZvciBkZXRhaWxzIFNlZTogaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2xleGVyX2Vycm9ycy5odG1sI0lERU5USUZZX1RFUk1JTkFUT1JgO2lmKGUuaXNzdWU9PT1xbi5DVVNUT01fTElORV9CUkVBSylyZXR1cm5gV2FybmluZzogQSBDdXN0b20gVG9rZW4gUGF0dGVybiBzaG91bGQgc3BlY2lmeSB0aGUgPGxpbmVfYnJlYWtzPiBvcHRpb24uCglUaGUgcHJvYmxlbSBpcyBpbiB0aGUgPCR7dC5uYW1lfT4gVG9rZW4gVHlwZQoJRm9yIGRldGFpbHMgU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjQ1VTVE9NX0xJTkVfQlJFQUtgO3Rocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfWZ1bmN0aW9uIHhzZSh0KXtyZXR1cm4gUWUodCxyPT5iaShyKT9yLmNoYXJDb2RlQXQoMCk6cil9ZnVuY3Rpb24gVFIodCxlLHIpe3RbZV09PT12b2lkIDA/dFtlXT1bcl06dFtlXS5wdXNoKHIpfWZ1bmN0aW9uIEdjKHQpe3JldHVybiB0PGhnP3Q6dGtbdF19ZnVuY3Rpb24gSUJlKCl7aWYoY3IodGspKXt0az1uZXcgQXJyYXkoNjU1MzYpO2ZvcihsZXQgdD0wO3Q8NjU1MzY7dCsrKXRrW3RdPXQ+MjU1PzI1NSt+fih0LzI1NSk6dH19dmFyIGgwLGZnLGVrLGtSLGJCZSxrQmUseXNlLGhnLHRrLHdSPU0oKCk9PnsidXNlIHN0cmljdCI7ZjIoKTtiMigpO0h0KCk7bGcoKTtsc2UoKTtRVCgpO2gwPSJQQVRURVJOIixmZz0iZGVmYXVsdE1vZGUiLGVrPSJtb2RlcyIsa1I9dHlwZW9mIG5ldyBSZWdFeHAoIig/OikiKS5zdGlja3k9PSJib29sZWFuIjtvKGhzZSwiYW5hbHl6ZVRva2VuVHlwZXMiKTtvKGZzZSwidmFsaWRhdGVQYXR0ZXJucyIpO28oeUJlLCJ2YWxpZGF0ZVJlZ0V4cFBhdHRlcm4iKTtvKHZCZSwiZmluZE1pc3NpbmdQYXR0ZXJucyIpO28oeEJlLCJmaW5kSW52YWxpZFBhdHRlcm5zIik7YkJlPS9bXlxcXVskXS87byh3QmUsImZpbmRFbmRPZklucHV0QW5jaG9yIik7byhUQmUsImZpbmRFbXB0eU1hdGNoUmVnRXhwcyIpO2tCZT0vW15cXFtdW1xeXXxeXF4vO28oRUJlLCJmaW5kU3RhcnRPZklucHV0QW5jaG9yIik7byhTQmUsImZpbmRVbnN1cHBvcnRlZEZsYWdzIik7byhDQmUsImZpbmREdXBsaWNhdGVQYXR0ZXJucyIpO28oQUJlLCJmaW5kSW52YWxpZEdyb3VwVHlwZSIpO28oX0JlLCJmaW5kTW9kZXNUaGF0RG9Ob3RFeGlzdCIpO28oTEJlLCJmaW5kVW5yZWFjaGFibGVQYXR0ZXJucyIpO28oREJlLCJ0ZXN0VG9rZW5UeXBlIik7byhOQmUsIm5vTWV0YUNoYXIiKTtvKGNzZSwiYWRkU3RhcnRPZklucHV0Iik7byh1c2UsImFkZFN0aWNreUZsYWciKTtvKGRzZSwicGVyZm9ybVJ1bnRpbWVDaGVja3MiKTtvKHBzZSwicGVyZm9ybVdhcm5pbmdSdW50aW1lQ2hlY2tzIik7byhtc2UsImNsb25lRW1wdHlHcm91cHMiKTtvKGdzZSwiaXNDdXN0b21QYXR0ZXJuIik7byhSQmUsImlzU2hvcnRQYXR0ZXJuIik7eXNlPXt0ZXN0Om8oZnVuY3Rpb24odCl7bGV0IGU9dC5sZW5ndGg7Zm9yKGxldCByPXRoaXMubGFzdEluZGV4O3I8ZTtyKyspe2xldCBuPXQuY2hhckNvZGVBdChyKTtpZihuPT09MTApcmV0dXJuIHRoaXMubGFzdEluZGV4PXIrMSwhMDtpZihuPT09MTMpcmV0dXJuIHQuY2hhckNvZGVBdChyKzEpPT09MTA/dGhpcy5sYXN0SW5kZXg9cisyOnRoaXMubGFzdEluZGV4PXIrMSwhMH1yZXR1cm4hMX0sInRlc3QiKSxsYXN0SW5kZXg6MH07byh2c2UsImNoZWNrTGluZUJyZWFrc0lzc3VlcyIpO28oTUJlLCJidWlsZExpbmVCcmVha0lzc3VlTWVzc2FnZSIpO28oeHNlLCJnZXRDaGFyQ29kZXMiKTtvKFRSLCJhZGRUb01hcE9mQXJyYXlzIik7aGc9MjU2LHRrPVtdO28oR2MsImNoYXJDb2RlVG9PcHRpbWl6ZWRJbmRleCIpO28oSUJlLCJpbml0Q2hhckNvZGVUb09wdGltaXplZEluZGV4TWFwIil9KTtmdW5jdGlvbiBXdSh0LGUpe2xldCByPXQudG9rZW5UeXBlSWR4O3JldHVybiByPT09ZS50b2tlblR5cGVJZHg/ITA6ZS5pc1BhcmVudD09PSEwJiZlLmNhdGVnb3J5TWF0Y2hlc01hcFtyXT09PSEwfWZ1bmN0aW9uIGRnKHQsZSl7cmV0dXJuIHQudG9rZW5UeXBlSWR4PT09ZS50b2tlblR5cGVJZHh9ZnVuY3Rpb24gWXUodCl7bGV0IGU9T0JlKHQpO1BCZShlKSxGQmUoZSksQkJlKGUpLFNlKGUscj0+e3IuaXNQYXJlbnQ9ci5jYXRlZ29yeU1hdGNoZXMubGVuZ3RoPjB9KX1mdW5jdGlvbiBPQmUodCl7bGV0IGU9cm4odCkscj10LG49ITA7Zm9yKDtuOyl7cj1SYyhXcihRZShyLGE9PmEuQ0FURUdPUklFUykpKTtsZXQgaT1uZihyLGUpO2U9ZS5jb25jYXQoaSksY3IoaSk/bj0hMTpyPWl9cmV0dXJuIGV9ZnVuY3Rpb24gUEJlKHQpe1NlKHQsZT0+e0VSKGUpfHwoVHNlW2JzZV09ZSxlLnRva2VuVHlwZUlkeD1ic2UrKyksd3NlKGUpJiYhRHQoZS5DQVRFR09SSUVTKSYmKGUuQ0FURUdPUklFUz1bZS5DQVRFR09SSUVTXSksd3NlKGUpfHwoZS5DQVRFR09SSUVTPVtdKSx6QmUoZSl8fChlLmNhdGVnb3J5TWF0Y2hlcz1bXSksR0JlKGUpfHwoZS5jYXRlZ29yeU1hdGNoZXNNYXA9e30pfSl9ZnVuY3Rpb24gQkJlKHQpe1NlKHQsZT0+e2UuY2F0ZWdvcnlNYXRjaGVzPVtdLFNlKGUuY2F0ZWdvcnlNYXRjaGVzTWFwLChyLG4pPT57ZS5jYXRlZ29yeU1hdGNoZXMucHVzaChUc2Vbbl0udG9rZW5UeXBlSWR4KX0pfSl9ZnVuY3Rpb24gRkJlKHQpe1NlKHQsZT0+e2tzZShbXSxlKX0pfWZ1bmN0aW9uIGtzZSh0LGUpe1NlKHQscj0+e2UuY2F0ZWdvcnlNYXRjaGVzTWFwW3IudG9rZW5UeXBlSWR4XT0hMH0pLFNlKGUuQ0FURUdPUklFUyxyPT57bGV0IG49dC5jb25jYXQoZSk7WW4obixyKXx8a3NlKG4scil9KX1mdW5jdGlvbiBFUih0KXtyZXR1cm4gTnQodCwidG9rZW5UeXBlSWR4Iil9ZnVuY3Rpb24gd3NlKHQpe3JldHVybiBOdCh0LCJDQVRFR09SSUVTIil9ZnVuY3Rpb24gekJlKHQpe3JldHVybiBOdCh0LCJjYXRlZ29yeU1hdGNoZXMiKX1mdW5jdGlvbiBHQmUodCl7cmV0dXJuIE50KHQsImNhdGVnb3J5TWF0Y2hlc01hcCIpfWZ1bmN0aW9uIEVzZSh0KXtyZXR1cm4gTnQodCwidG9rZW5UeXBlSWR4Iil9dmFyIGJzZSxUc2UsZjA9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO28oV3UsInRva2VuU3RydWN0dXJlZE1hdGNoZXIiKTtvKGRnLCJ0b2tlblN0cnVjdHVyZWRNYXRjaGVyTm9DYXRlZ29yaWVzIik7YnNlPTEsVHNlPXt9O28oWXUsImF1Z21lbnRUb2tlblR5cGVzIik7byhPQmUsImV4cGFuZENhdGVnb3JpZXMiKTtvKFBCZSwiYXNzaWduVG9rZW5EZWZhdWx0UHJvcHMiKTtvKEJCZSwiYXNzaWduQ2F0ZWdvcmllc1Rva2Vuc1Byb3AiKTtvKEZCZSwiYXNzaWduQ2F0ZWdvcmllc01hcFByb3AiKTtvKGtzZSwic2luZ2xlQXNzaWduQ2F0ZWdvcmllc1Rva3NNYXAiKTtvKEVSLCJoYXNTaG9ydEtleVByb3BlcnR5Iik7byh3c2UsImhhc0NhdGVnb3JpZXNQcm9wZXJ0eSIpO28oekJlLCJoYXNFeHRlbmRpbmdUb2tlbnNUeXBlc1Byb3BlcnR5Iik7byhHQmUsImhhc0V4dGVuZGluZ1Rva2Vuc1R5cGVzTWFwUHJvcGVydHkiKTtvKEVzZSwiaXNUb2tlblR5cGUiKX0pO3ZhciBTUixDUj1NKCgpPT57InVzZSBzdHJpY3QiO1NSPXtidWlsZFVuYWJsZVRvUG9wTGV4ZXJNb2RlTWVzc2FnZSh0KXtyZXR1cm5gVW5hYmxlIHRvIHBvcCBMZXhlciBNb2RlIGFmdGVyIGVuY291bnRlcmluZyBUb2tlbiAtPiR7dC5pbWFnZX08LSBUaGUgTW9kZSBTdGFjayBpcyBlbXB0eWB9LGJ1aWxkVW5leHBlY3RlZENoYXJhY3RlcnNNZXNzYWdlKHQsZSxyLG4saSl7cmV0dXJuYHVuZXhwZWN0ZWQgY2hhcmFjdGVyOiAtPiR7dC5jaGFyQXQoZSl9PC0gYXQgb2Zmc2V0OiAke2V9LCBza2lwcGVkICR7cn0gY2hhcmFjdGVycy5gfX19KTt2YXIgcW4sdzIsY2ksYjI9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt3UigpO0h0KCk7bGcoKTtmMCgpO0NSKCk7UVQoKTsoZnVuY3Rpb24odCl7dFt0Lk1JU1NJTkdfUEFUVEVSTj0wXT0iTUlTU0lOR19QQVRURVJOIix0W3QuSU5WQUxJRF9QQVRURVJOPTFdPSJJTlZBTElEX1BBVFRFUk4iLHRbdC5FT0lfQU5DSE9SX0ZPVU5EPTJdPSJFT0lfQU5DSE9SX0ZPVU5EIix0W3QuVU5TVVBQT1JURURfRkxBR1NfRk9VTkQ9M109IlVOU1VQUE9SVEVEX0ZMQUdTX0ZPVU5EIix0W3QuRFVQTElDQVRFX1BBVFRFUk5TX0ZPVU5EPTRdPSJEVVBMSUNBVEVfUEFUVEVSTlNfRk9VTkQiLHRbdC5JTlZBTElEX0dST1VQX1RZUEVfRk9VTkQ9NV09IklOVkFMSURfR1JPVVBfVFlQRV9GT1VORCIsdFt0LlBVU0hfTU9ERV9ET0VTX05PVF9FWElTVD02XT0iUFVTSF9NT0RFX0RPRVNfTk9UX0VYSVNUIix0W3QuTVVMVElfTU9ERV9MRVhFUl9XSVRIT1VUX0RFRkFVTFRfTU9ERT03XT0iTVVMVElfTU9ERV9MRVhFUl9XSVRIT1VUX0RFRkFVTFRfTU9ERSIsdFt0Lk1VTFRJX01PREVfTEVYRVJfV0lUSE9VVF9NT0RFU19QUk9QRVJUWT04XT0iTVVMVElfTU9ERV9MRVhFUl9XSVRIT1VUX01PREVTX1BST1BFUlRZIix0W3QuTVVMVElfTU9ERV9MRVhFUl9ERUZBVUxUX01PREVfVkFMVUVfRE9FU19OT1RfRVhJU1Q9OV09Ik1VTFRJX01PREVfTEVYRVJfREVGQVVMVF9NT0RFX1ZBTFVFX0RPRVNfTk9UX0VYSVNUIix0W3QuTEVYRVJfREVGSU5JVElPTl9DQU5OT1RfQ09OVEFJTl9VTkRFRklORUQ9MTBdPSJMRVhFUl9ERUZJTklUSU9OX0NBTk5PVF9DT05UQUlOX1VOREVGSU5FRCIsdFt0LlNPSV9BTkNIT1JfRk9VTkQ9MTFdPSJTT0lfQU5DSE9SX0ZPVU5EIix0W3QuRU1QVFlfTUFUQ0hfUEFUVEVSTj0xMl09IkVNUFRZX01BVENIX1BBVFRFUk4iLHRbdC5OT19MSU5FX0JSRUFLU19GTEFHUz0xM109Ik5PX0xJTkVfQlJFQUtTX0ZMQUdTIix0W3QuVU5SRUFDSEFCTEVfUEFUVEVSTj0xNF09IlVOUkVBQ0hBQkxFX1BBVFRFUk4iLHRbdC5JREVOVElGWV9URVJNSU5BVE9SPTE1XT0iSURFTlRJRllfVEVSTUlOQVRPUiIsdFt0LkNVU1RPTV9MSU5FX0JSRUFLPTE2XT0iQ1VTVE9NX0xJTkVfQlJFQUsiLHRbdC5NVUxUSV9NT0RFX0xFWEVSX0xPTkdFUl9BTFRfTk9UX0lOX0NVUlJFTlRfTU9ERT0xN109Ik1VTFRJX01PREVfTEVYRVJfTE9OR0VSX0FMVF9OT1RfSU5fQ1VSUkVOVF9NT0RFIn0pKHFufHwocW49e30pKTt3Mj17ZGVmZXJEZWZpbml0aW9uRXJyb3JzSGFuZGxpbmc6ITEscG9zaXRpb25UcmFja2luZzoiZnVsbCIsbGluZVRlcm1pbmF0b3JzUGF0dGVybjovXG58XHJcbj8vZyxsaW5lVGVybWluYXRvckNoYXJhY3RlcnM6W2AKYCwiXHIiXSxlbnN1cmVPcHRpbWl6YXRpb25zOiExLHNhZmVNb2RlOiExLGVycm9yTWVzc2FnZVByb3ZpZGVyOlNSLHRyYWNlSW5pdFBlcmY6ITEsc2tpcFZhbGlkYXRpb25zOiExLHJlY292ZXJ5RW5hYmxlZDohMH07T2JqZWN0LmZyZWV6ZSh3Mik7Y2k9Y2xhc3N7c3RhdGlje28odGhpcywiTGV4ZXIiKX1jb25zdHJ1Y3RvcihlLHI9dzIpe2lmKHRoaXMubGV4ZXJEZWZpbml0aW9uPWUsdGhpcy5sZXhlckRlZmluaXRpb25FcnJvcnM9W10sdGhpcy5sZXhlckRlZmluaXRpb25XYXJuaW5nPVtdLHRoaXMucGF0dGVybklkeFRvQ29uZmlnPXt9LHRoaXMuY2hhckNvZGVUb1BhdHRlcm5JZHhUb0NvbmZpZz17fSx0aGlzLm1vZGVzPVtdLHRoaXMuZW1wdHlHcm91cHM9e30sdGhpcy50cmFja1N0YXJ0TGluZXM9ITAsdGhpcy50cmFja0VuZExpbmVzPSEwLHRoaXMuaGFzQ3VzdG9tPSExLHRoaXMuY2FuTW9kZUJlT3B0aW1pemVkPXt9LHRoaXMuVFJBQ0VfSU5JVD0oaSxhKT0+e2lmKHRoaXMudHJhY2VJbml0UGVyZj09PSEwKXt0aGlzLnRyYWNlSW5pdEluZGVudCsrO2xldCBzPW5ldyBBcnJheSh0aGlzLnRyYWNlSW5pdEluZGVudCsxKS5qb2luKCIJIik7dGhpcy50cmFjZUluaXRJbmRlbnQ8dGhpcy50cmFjZUluaXRNYXhJZGVudCYmY29uc29sZS5sb2coYCR7c30tLT4gPCR7aX0+YCk7bGV0e3RpbWU6bCx2YWx1ZTp1fT15MihhKSxoPWw+MTA/Y29uc29sZS53YXJuOmNvbnNvbGUubG9nO3JldHVybiB0aGlzLnRyYWNlSW5pdEluZGVudDx0aGlzLnRyYWNlSW5pdE1heElkZW50JiZoKGAke3N9PC0tIDwke2l9PiB0aW1lOiAke2x9bXNgKSx0aGlzLnRyYWNlSW5pdEluZGVudC0tLHV9ZWxzZSByZXR1cm4gYSgpfSx0eXBlb2Ygcj09ImJvb2xlYW4iKXRocm93IEVycm9yKGBUaGUgc2Vjb25kIGFyZ3VtZW50IHRvIHRoZSBMZXhlciBjb25zdHJ1Y3RvciBpcyBub3cgYW4gSUxleGVyQ29uZmlnIE9iamVjdC4KYSBib29sZWFuIDJuZCBhcmd1bWVudCBpcyBubyBsb25nZXIgc3VwcG9ydGVkYCk7dGhpcy5jb25maWc9dmEoe30sdzIscik7bGV0IG49dGhpcy5jb25maWcudHJhY2VJbml0UGVyZjtuPT09ITA/KHRoaXMudHJhY2VJbml0TWF4SWRlbnQ9MS8wLHRoaXMudHJhY2VJbml0UGVyZj0hMCk6dHlwZW9mIG49PSJudW1iZXIiJiYodGhpcy50cmFjZUluaXRNYXhJZGVudD1uLHRoaXMudHJhY2VJbml0UGVyZj0hMCksdGhpcy50cmFjZUluaXRJbmRlbnQ9LTEsdGhpcy5UUkFDRV9JTklUKCJMZXhlciBDb25zdHJ1Y3RvciIsKCk9PntsZXQgaSxhPSEwO3RoaXMuVFJBQ0VfSU5JVCgiTGV4ZXIgQ29uZmlnIGhhbmRsaW5nIiwoKT0+e2lmKHRoaXMuY29uZmlnLmxpbmVUZXJtaW5hdG9yc1BhdHRlcm49PT13Mi5saW5lVGVybWluYXRvcnNQYXR0ZXJuKXRoaXMuY29uZmlnLmxpbmVUZXJtaW5hdG9yc1BhdHRlcm49eXNlO2Vsc2UgaWYodGhpcy5jb25maWcubGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzPT09dzIubGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzKXRocm93IEVycm9yKGBFcnJvcjogTWlzc2luZyA8bGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzPiBwcm9wZXJ0eSBvbiB0aGUgTGV4ZXIgY29uZmlnLgoJRm9yIGRldGFpbHMgU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjTUlTU0lOR19MSU5FX1RFUk1fQ0hBUlNgKTtpZihyLnNhZmVNb2RlJiZyLmVuc3VyZU9wdGltaXphdGlvbnMpdGhyb3cgRXJyb3IoJyJzYWZlTW9kZSIgYW5kICJlbnN1cmVPcHRpbWl6YXRpb25zIiBmbGFncyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLicpO3RoaXMudHJhY2tTdGFydExpbmVzPS9mdWxsfG9ubHlTdGFydC9pLnRlc3QodGhpcy5jb25maWcucG9zaXRpb25UcmFja2luZyksdGhpcy50cmFja0VuZExpbmVzPS9mdWxsL2kudGVzdCh0aGlzLmNvbmZpZy5wb3NpdGlvblRyYWNraW5nKSxEdChlKT9pPXttb2Rlczp7ZGVmYXVsdE1vZGU6cm4oZSl9LGRlZmF1bHRNb2RlOmZnfTooYT0hMSxpPXJuKGUpKX0pLHRoaXMuY29uZmlnLnNraXBWYWxpZGF0aW9ucz09PSExJiYodGhpcy5UUkFDRV9JTklUKCJwZXJmb3JtUnVudGltZUNoZWNrcyIsKCk9Pnt0aGlzLmxleGVyRGVmaW5pdGlvbkVycm9ycz10aGlzLmxleGVyRGVmaW5pdGlvbkVycm9ycy5jb25jYXQoZHNlKGksdGhpcy50cmFja1N0YXJ0TGluZXMsdGhpcy5jb25maWcubGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzKSl9KSx0aGlzLlRSQUNFX0lOSVQoInBlcmZvcm1XYXJuaW5nUnVudGltZUNoZWNrcyIsKCk9Pnt0aGlzLmxleGVyRGVmaW5pdGlvbldhcm5pbmc9dGhpcy5sZXhlckRlZmluaXRpb25XYXJuaW5nLmNvbmNhdChwc2UoaSx0aGlzLnRyYWNrU3RhcnRMaW5lcyx0aGlzLmNvbmZpZy5saW5lVGVybWluYXRvckNoYXJhY3RlcnMpKX0pKSxpLm1vZGVzPWkubW9kZXM/aS5tb2Rlczp7fSxTZShpLm1vZGVzLChsLHUpPT57aS5tb2Rlc1t1XT1hZihsLGg9PmRyKGgpKX0pO2xldCBzPUdyKGkubW9kZXMpO2lmKFNlKGkubW9kZXMsKGwsdSk9Pnt0aGlzLlRSQUNFX0lOSVQoYE1vZGU6IDwke3V9PiBwcm9jZXNzaW5nYCwoKT0+e2lmKHRoaXMubW9kZXMucHVzaCh1KSx0aGlzLmNvbmZpZy5za2lwVmFsaWRhdGlvbnM9PT0hMSYmdGhpcy5UUkFDRV9JTklUKCJ2YWxpZGF0ZVBhdHRlcm5zIiwoKT0+e3RoaXMubGV4ZXJEZWZpbml0aW9uRXJyb3JzPXRoaXMubGV4ZXJEZWZpbml0aW9uRXJyb3JzLmNvbmNhdChmc2UobCxzKSl9KSxjcih0aGlzLmxleGVyRGVmaW5pdGlvbkVycm9ycykpe1l1KGwpO2xldCBoO3RoaXMuVFJBQ0VfSU5JVCgiYW5hbHl6ZVRva2VuVHlwZXMiLCgpPT57aD1oc2UobCx7bGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzOnRoaXMuY29uZmlnLmxpbmVUZXJtaW5hdG9yQ2hhcmFjdGVycyxwb3NpdGlvblRyYWNraW5nOnIucG9zaXRpb25UcmFja2luZyxlbnN1cmVPcHRpbWl6YXRpb25zOnIuZW5zdXJlT3B0aW1pemF0aW9ucyxzYWZlTW9kZTpyLnNhZmVNb2RlLHRyYWNlcjp0aGlzLlRSQUNFX0lOSVR9KX0pLHRoaXMucGF0dGVybklkeFRvQ29uZmlnW3VdPWgucGF0dGVybklkeFRvQ29uZmlnLHRoaXMuY2hhckNvZGVUb1BhdHRlcm5JZHhUb0NvbmZpZ1t1XT1oLmNoYXJDb2RlVG9QYXR0ZXJuSWR4VG9Db25maWcsdGhpcy5lbXB0eUdyb3Vwcz12YSh7fSx0aGlzLmVtcHR5R3JvdXBzLGguZW1wdHlHcm91cHMpLHRoaXMuaGFzQ3VzdG9tPWguaGFzQ3VzdG9tfHx0aGlzLmhhc0N1c3RvbSx0aGlzLmNhbk1vZGVCZU9wdGltaXplZFt1XT1oLmNhbkJlT3B0aW1pemVkfX0pfSksdGhpcy5kZWZhdWx0TW9kZT1pLmRlZmF1bHRNb2RlLCFjcih0aGlzLmxleGVyRGVmaW5pdGlvbkVycm9ycykmJiF0aGlzLmNvbmZpZy5kZWZlckRlZmluaXRpb25FcnJvcnNIYW5kbGluZyl7bGV0IHU9UWUodGhpcy5sZXhlckRlZmluaXRpb25FcnJvcnMsaD0+aC5tZXNzYWdlKS5qb2luKGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpgKTt0aHJvdyBuZXcgRXJyb3IoYEVycm9ycyBkZXRlY3RlZCBpbiBkZWZpbml0aW9uIG9mIExleGVyOgpgK3UpfVNlKHRoaXMubGV4ZXJEZWZpbml0aW9uV2FybmluZyxsPT57ZzIobC5tZXNzYWdlKX0pLHRoaXMuVFJBQ0VfSU5JVCgiQ2hvb3Npbmcgc3ViLW1ldGhvZHMgaW1wbGVtZW50YXRpb25zIiwoKT0+e2lmKGtSPyh0aGlzLmNob3BJbnB1dD1hYSx0aGlzLm1hdGNoPXRoaXMubWF0Y2hXaXRoVGVzdCk6KHRoaXMudXBkYXRlTGFzdEluZGV4PXRpLHRoaXMubWF0Y2g9dGhpcy5tYXRjaFdpdGhFeGVjKSxhJiYodGhpcy5oYW5kbGVNb2Rlcz10aSksdGhpcy50cmFja1N0YXJ0TGluZXM9PT0hMSYmKHRoaXMuY29tcHV0ZU5ld0NvbHVtbj1hYSksdGhpcy50cmFja0VuZExpbmVzPT09ITEmJih0aGlzLnVwZGF0ZVRva2VuRW5kTGluZUNvbHVtbkxvY2F0aW9uPXRpKSwvZnVsbC9pLnRlc3QodGhpcy5jb25maWcucG9zaXRpb25UcmFja2luZykpdGhpcy5jcmVhdGVUb2tlbkluc3RhbmNlPXRoaXMuY3JlYXRlRnVsbFRva2VuO2Vsc2UgaWYoL29ubHlTdGFydC9pLnRlc3QodGhpcy5jb25maWcucG9zaXRpb25UcmFja2luZykpdGhpcy5jcmVhdGVUb2tlbkluc3RhbmNlPXRoaXMuY3JlYXRlU3RhcnRPbmx5VG9rZW47ZWxzZSBpZigvb25seU9mZnNldC9pLnRlc3QodGhpcy5jb25maWcucG9zaXRpb25UcmFja2luZykpdGhpcy5jcmVhdGVUb2tlbkluc3RhbmNlPXRoaXMuY3JlYXRlT2Zmc2V0T25seVRva2VuO2Vsc2UgdGhyb3cgRXJyb3IoYEludmFsaWQgPHBvc2l0aW9uVHJhY2tpbmc+IGNvbmZpZyBvcHRpb246ICIke3RoaXMuY29uZmlnLnBvc2l0aW9uVHJhY2tpbmd9ImApO3RoaXMuaGFzQ3VzdG9tPyh0aGlzLmFkZFRva2VuPXRoaXMuYWRkVG9rZW5Vc2luZ1B1c2gsdGhpcy5oYW5kbGVQYXlsb2FkPXRoaXMuaGFuZGxlUGF5bG9hZFdpdGhDdXN0b20pOih0aGlzLmFkZFRva2VuPXRoaXMuYWRkVG9rZW5Vc2luZ01lbWJlckFjY2Vzcyx0aGlzLmhhbmRsZVBheWxvYWQ9dGhpcy5oYW5kbGVQYXlsb2FkTm9DdXN0b20pfSksdGhpcy5UUkFDRV9JTklUKCJGYWlsZWQgT3B0aW1pemF0aW9uIFdhcm5pbmdzIiwoKT0+e2xldCBsPXFyKHRoaXMuY2FuTW9kZUJlT3B0aW1pemVkLCh1LGgsZik9PihoPT09ITEmJnUucHVzaChmKSx1KSxbXSk7aWYoci5lbnN1cmVPcHRpbWl6YXRpb25zJiYhY3IobCkpdGhyb3cgRXJyb3IoYExleGVyIE1vZGVzOiA8ICR7bC5qb2luKCIsICIpfSA+IGNhbm5vdCBiZSBvcHRpbWl6ZWQuCgkgRGlzYWJsZSB0aGUgImVuc3VyZU9wdGltaXphdGlvbnMiIGxleGVyIGNvbmZpZyBmbGFnIHRvIHNpbGVudGx5IGlnbm9yZSB0aGlzIGFuZCBydW4gdGhlIGxleGVyIGluIGFuIHVuLW9wdGltaXplZCBtb2RlLgoJIE9yIGluc3BlY3QgdGhlIGNvbnNvbGUgbG9nIGZvciBkZXRhaWxzIG9uIGhvdyB0byByZXNvbHZlIHRoZXNlIGlzc3Vlcy5gKX0pLHRoaXMuVFJBQ0VfSU5JVCgiY2xlYXJSZWdFeHBQYXJzZXJDYWNoZSIsKCk9Pntpc2UoKX0pLHRoaXMuVFJBQ0VfSU5JVCgidG9GYXN0UHJvcGVydGllcyIsKCk9Pnt2Mih0aGlzKX0pfSl9dG9rZW5pemUoZSxyPXRoaXMuZGVmYXVsdE1vZGUpe2lmKCFjcih0aGlzLmxleGVyRGVmaW5pdGlvbkVycm9ycykpe2xldCBpPVFlKHRoaXMubGV4ZXJEZWZpbml0aW9uRXJyb3JzLGE9PmEubWVzc2FnZSkuam9pbihgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KYCk7dGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gVG9rZW5pemUgYmVjYXVzZSBFcnJvcnMgZGV0ZWN0ZWQgaW4gZGVmaW5pdGlvbiBvZiBMZXhlcjoKYCtpKX1yZXR1cm4gdGhpcy50b2tlbml6ZUludGVybmFsKGUscil9dG9rZW5pemVJbnRlcm5hbChlLHIpe2xldCBuLGksYSxzLGwsdSxoLGYsZCxwLG0sZyx5LHYseCxiLHc9ZSxfPXcubGVuZ3RoLFQ9MCxFPTAsTD10aGlzLmhhc0N1c3RvbT8wOk1hdGguZmxvb3IoZS5sZW5ndGgvMTApLFM9bmV3IEFycmF5KEwpLEE9W10sST10aGlzLnRyYWNrU3RhcnRMaW5lcz8xOnZvaWQgMCxEPXRoaXMudHJhY2tTdGFydExpbmVzPzE6dm9pZCAwLGs9bXNlKHRoaXMuZW1wdHlHcm91cHMpLFI9dGhpcy50cmFja1N0YXJ0TGluZXMsQz10aGlzLmNvbmZpZy5saW5lVGVybWluYXRvcnNQYXR0ZXJuLE89MCxOPVtdLFA9W10sRj1bXSxCPVtdO09iamVjdC5mcmVlemUoQik7bGV0IEc7ZnVuY3Rpb24geigpe3JldHVybiBOfW8oeiwiZ2V0UG9zc2libGVQYXR0ZXJuc1Nsb3ciKTtmdW5jdGlvbiBXKGVlKXtsZXQgSj1HYyhlZSksSD1QW0pdO3JldHVybiBIPT09dm9pZCAwP0I6SH1vKFcsImdldFBvc3NpYmxlUGF0dGVybnNPcHRpbWl6ZWQiKTtsZXQgWj1vKGVlPT57aWYoRi5sZW5ndGg9PT0xJiZlZS50b2tlblR5cGUuUFVTSF9NT0RFPT09dm9pZCAwKXtsZXQgSj10aGlzLmNvbmZpZy5lcnJvck1lc3NhZ2VQcm92aWRlci5idWlsZFVuYWJsZVRvUG9wTGV4ZXJNb2RlTWVzc2FnZShlZSk7QS5wdXNoKHtvZmZzZXQ6ZWUuc3RhcnRPZmZzZXQsbGluZTplZS5zdGFydExpbmUsY29sdW1uOmVlLnN0YXJ0Q29sdW1uLGxlbmd0aDplZS5pbWFnZS5sZW5ndGgsbWVzc2FnZTpKfSl9ZWxzZXtGLnBvcCgpO2xldCBKPXhhKEYpO049dGhpcy5wYXR0ZXJuSWR4VG9Db25maWdbSl0sUD10aGlzLmNoYXJDb2RlVG9QYXR0ZXJuSWR4VG9Db25maWdbSl0sTz1OLmxlbmd0aDtsZXQgSD10aGlzLmNhbk1vZGVCZU9wdGltaXplZFtKXSYmdGhpcy5jb25maWcuc2FmZU1vZGU9PT0hMTtQJiZIP0c9VzpHPXp9fSwicG9wX21vZGUiKTtmdW5jdGlvbiBqKGVlKXtGLnB1c2goZWUpLFA9dGhpcy5jaGFyQ29kZVRvUGF0dGVybklkeFRvQ29uZmlnW2VlXSxOPXRoaXMucGF0dGVybklkeFRvQ29uZmlnW2VlXSxPPU4ubGVuZ3RoLE89Ti5sZW5ndGg7bGV0IEo9dGhpcy5jYW5Nb2RlQmVPcHRpbWl6ZWRbZWVdJiZ0aGlzLmNvbmZpZy5zYWZlTW9kZT09PSExO1AmJko/Rz1XOkc9en1vKGosInB1c2hfbW9kZSIpLGouY2FsbCh0aGlzLHIpO2xldCBvZSxLPXRoaXMuY29uZmlnLnJlY292ZXJ5RW5hYmxlZDtmb3IoO1Q8Xzspe3U9bnVsbDtsZXQgZWU9dy5jaGFyQ29kZUF0KFQpLEo9RyhlZSksSD1KLmxlbmd0aDtmb3Iobj0wO248SDtuKyspe29lPUpbbl07bGV0IHE9b2UucGF0dGVybjtoPW51bGw7bGV0IFE9b2Uuc2hvcnQ7aWYoUSE9PSExP2VlPT09USYmKHU9cSk6b2UuaXNDdXN0b209PT0hMD8oYj1xLmV4ZWModyxULFMsayksYiE9PW51bGw/KHU9YlswXSxiLnBheWxvYWQhPT12b2lkIDAmJihoPWIucGF5bG9hZCkpOnU9bnVsbCk6KHRoaXMudXBkYXRlTGFzdEluZGV4KHEsVCksdT10aGlzLm1hdGNoKHEsZSxUKSksdSE9PW51bGwpe2lmKGw9b2UubG9uZ2VyQWx0LGwhPT12b2lkIDApe2xldCBhZT1sLmxlbmd0aDtmb3IoYT0wO2E8YWU7YSsrKXtsZXQgdWU9TltsW2FdXSxjZT11ZS5wYXR0ZXJuO2lmKGY9bnVsbCx1ZS5pc0N1c3RvbT09PSEwPyhiPWNlLmV4ZWModyxULFMsayksYiE9PW51bGw/KHM9YlswXSxiLnBheWxvYWQhPT12b2lkIDAmJihmPWIucGF5bG9hZCkpOnM9bnVsbCk6KHRoaXMudXBkYXRlTGFzdEluZGV4KGNlLFQpLHM9dGhpcy5tYXRjaChjZSxlLFQpKSxzJiZzLmxlbmd0aD51Lmxlbmd0aCl7dT1zLGg9ZixvZT11ZTticmVha319fWJyZWFrfX1pZih1IT09bnVsbCl7aWYoZD11Lmxlbmd0aCxwPW9lLmdyb3VwLHAhPT12b2lkIDAmJihtPW9lLnRva2VuVHlwZUlkeCxnPXRoaXMuY3JlYXRlVG9rZW5JbnN0YW5jZSh1LFQsbSxvZS50b2tlblR5cGUsSSxELGQpLHRoaXMuaGFuZGxlUGF5bG9hZChnLGgpLHA9PT0hMT9FPXRoaXMuYWRkVG9rZW4oUyxFLGcpOmtbcF0ucHVzaChnKSksZT10aGlzLmNob3BJbnB1dChlLGQpLFQ9VCtkLEQ9dGhpcy5jb21wdXRlTmV3Q29sdW1uKEQsZCksUj09PSEwJiZvZS5jYW5MaW5lVGVybWluYXRvcj09PSEwKXtsZXQgcT0wLFEsYWU7Qy5sYXN0SW5kZXg9MDtkbyBRPUMudGVzdCh1KSxRPT09ITAmJihhZT1DLmxhc3RJbmRleC0xLHErKyk7d2hpbGUoUT09PSEwKTtxIT09MCYmKEk9SStxLEQ9ZC1hZSx0aGlzLnVwZGF0ZVRva2VuRW5kTGluZUNvbHVtbkxvY2F0aW9uKGcscCxhZSxxLEksRCxkKSl9dGhpcy5oYW5kbGVNb2RlcyhvZSxaLGosZyl9ZWxzZXtsZXQgcT1ULFE9SSxhZT1ELHVlPUs9PT0hMTtmb3IoO3VlPT09ITEmJlQ8XzspZm9yKGU9dGhpcy5jaG9wSW5wdXQoZSwxKSxUKyssaT0wO2k8TztpKyspe2xldCBjZT1OW2ldLHRlPWNlLnBhdHRlcm4sTmU9Y2Uuc2hvcnQ7aWYoTmUhPT0hMT93LmNoYXJDb2RlQXQoVCk9PT1OZSYmKHVlPSEwKTpjZS5pc0N1c3RvbT09PSEwP3VlPXRlLmV4ZWModyxULFMsaykhPT1udWxsOih0aGlzLnVwZGF0ZUxhc3RJbmRleCh0ZSxUKSx1ZT10ZS5leGVjKGUpIT09bnVsbCksdWU9PT0hMClicmVha31pZih5PVQtcSxEPXRoaXMuY29tcHV0ZU5ld0NvbHVtbihELHkpLHg9dGhpcy5jb25maWcuZXJyb3JNZXNzYWdlUHJvdmlkZXIuYnVpbGRVbmV4cGVjdGVkQ2hhcmFjdGVyc01lc3NhZ2UodyxxLHksUSxhZSksQS5wdXNoKHtvZmZzZXQ6cSxsaW5lOlEsY29sdW1uOmFlLGxlbmd0aDp5LG1lc3NhZ2U6eH0pLEs9PT0hMSlicmVha319cmV0dXJuIHRoaXMuaGFzQ3VzdG9tfHwoUy5sZW5ndGg9RSkse3Rva2VuczpTLGdyb3VwczprLGVycm9yczpBfX1oYW5kbGVNb2RlcyhlLHIsbixpKXtpZihlLnBvcD09PSEwKXtsZXQgYT1lLnB1c2g7cihpKSxhIT09dm9pZCAwJiZuLmNhbGwodGhpcyxhKX1lbHNlIGUucHVzaCE9PXZvaWQgMCYmbi5jYWxsKHRoaXMsZS5wdXNoKX1jaG9wSW5wdXQoZSxyKXtyZXR1cm4gZS5zdWJzdHJpbmcocil9dXBkYXRlTGFzdEluZGV4KGUscil7ZS5sYXN0SW5kZXg9cn11cGRhdGVUb2tlbkVuZExpbmVDb2x1bW5Mb2NhdGlvbihlLHIsbixpLGEscyxsKXtsZXQgdSxoO3IhPT12b2lkIDAmJih1PW49PT1sLTEsaD11Py0xOjAsaT09PTEmJnU9PT0hMHx8KGUuZW5kTGluZT1hK2gsZS5lbmRDb2x1bW49cy0xKy1oKSl9Y29tcHV0ZU5ld0NvbHVtbihlLHIpe3JldHVybiBlK3J9Y3JlYXRlT2Zmc2V0T25seVRva2VuKGUscixuLGkpe3JldHVybntpbWFnZTplLHN0YXJ0T2Zmc2V0OnIsdG9rZW5UeXBlSWR4Om4sdG9rZW5UeXBlOml9fWNyZWF0ZVN0YXJ0T25seVRva2VuKGUscixuLGksYSxzKXtyZXR1cm57aW1hZ2U6ZSxzdGFydE9mZnNldDpyLHN0YXJ0TGluZTphLHN0YXJ0Q29sdW1uOnMsdG9rZW5UeXBlSWR4Om4sdG9rZW5UeXBlOml9fWNyZWF0ZUZ1bGxUb2tlbihlLHIsbixpLGEscyxsKXtyZXR1cm57aW1hZ2U6ZSxzdGFydE9mZnNldDpyLGVuZE9mZnNldDpyK2wtMSxzdGFydExpbmU6YSxlbmRMaW5lOmEsc3RhcnRDb2x1bW46cyxlbmRDb2x1bW46cytsLTEsdG9rZW5UeXBlSWR4Om4sdG9rZW5UeXBlOml9fWFkZFRva2VuVXNpbmdQdXNoKGUscixuKXtyZXR1cm4gZS5wdXNoKG4pLHJ9YWRkVG9rZW5Vc2luZ01lbWJlckFjY2VzcyhlLHIsbil7cmV0dXJuIGVbcl09bixyKysscn1oYW5kbGVQYXlsb2FkTm9DdXN0b20oZSxyKXt9aGFuZGxlUGF5bG9hZFdpdGhDdXN0b20oZSxyKXtyIT09bnVsbCYmKGUucGF5bG9hZD1yKX1tYXRjaFdpdGhUZXN0KGUscixuKXtyZXR1cm4gZS50ZXN0KHIpPT09ITA/ci5zdWJzdHJpbmcobixlLmxhc3RJbmRleCk6bnVsbH1tYXRjaFdpdGhFeGVjKGUscil7bGV0IG49ZS5leGVjKHIpO3JldHVybiBuIT09bnVsbD9uWzBdOm51bGx9fTtjaS5TS0lQUEVEPSJUaGlzIG1hcmtzIGEgc2tpcHBlZCBUb2tlbiBwYXR0ZXJuLCB0aGlzIG1lYW5zIGVhY2ggdG9rZW4gaWRlbnRpZmllZCBieSBpdCB3aWxsYmUgY29uc3VtZWQgYW5kIHRoZW4gdGhyb3duIGludG8gb2JsaXZpb24sIHRoaXMgY2FuIGJlIHVzZWQgdG8gZm9yIGV4YW1wbGUgdG8gY29tcGxldGVseSBpZ25vcmUgd2hpdGVzcGFjZS4iO2NpLk5BPS9OT1RfQVBQTElDQUJMRS99KTtmdW5jdGlvbiBxdSh0KXtyZXR1cm4gQVIodCk/dC5MQUJFTDp0Lm5hbWV9ZnVuY3Rpb24gQVIodCl7cmV0dXJuIGJpKHQuTEFCRUwpJiZ0LkxBQkVMIT09IiJ9ZnVuY3Rpb24gcmsodCl7cmV0dXJuIFZCZSh0KX1mdW5jdGlvbiBWQmUodCl7bGV0IGU9dC5wYXR0ZXJuLHI9e307aWYoci5uYW1lPXQubmFtZSxkcihlKXx8KHIuUEFUVEVSTj1lKSxOdCh0LCRCZSkpdGhyb3dgVGhlIHBhcmVudCBwcm9wZXJ0eSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLgpTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaGV2cm90YWluL2NoZXZyb3RhaW4vaXNzdWVzLzU2NCNpc3N1ZWNvbW1lbnQtMzQ5MDYyMzQ2IGZvciBkZXRhaWxzLmA7cmV0dXJuIE50KHQsU3NlKSYmKHIuQ0FURUdPUklFUz10W1NzZV0pLFl1KFtyXSksTnQodCxDc2UpJiYoci5MQUJFTD10W0NzZV0pLE50KHQsQXNlKSYmKHIuR1JPVVA9dFtBc2VdKSxOdCh0LExzZSkmJihyLlBPUF9NT0RFPXRbTHNlXSksTnQodCxfc2UpJiYoci5QVVNIX01PREU9dFtfc2VdKSxOdCh0LERzZSkmJihyLkxPTkdFUl9BTFQ9dFtEc2VdKSxOdCh0LE5zZSkmJihyLkxJTkVfQlJFQUtTPXRbTnNlXSksTnQodCxSc2UpJiYoci5TVEFSVF9DSEFSU19ISU5UPXRbUnNlXSkscn1mdW5jdGlvbiBkMCh0LGUscixuLGksYSxzLGwpe3JldHVybntpbWFnZTplLHN0YXJ0T2Zmc2V0OnIsZW5kT2Zmc2V0Om4sc3RhcnRMaW5lOmksZW5kTGluZTphLHN0YXJ0Q29sdW1uOnMsZW5kQ29sdW1uOmwsdG9rZW5UeXBlSWR4OnQudG9rZW5UeXBlSWR4LHRva2VuVHlwZTp0fX1mdW5jdGlvbiBUMih0LGUpe3JldHVybiBXdSh0LGUpfXZhciAkQmUsU3NlLENzZSxBc2UsX3NlLExzZSxEc2UsTnNlLFJzZSxtbyxwMD1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7YjIoKTtmMCgpO28ocXUsInRva2VuTGFiZWwiKTtvKEFSLCJoYXNUb2tlbkxhYmVsIik7JEJlPSJwYXJlbnQiLFNzZT0iY2F0ZWdvcmllcyIsQ3NlPSJsYWJlbCIsQXNlPSJncm91cCIsX3NlPSJwdXNoX21vZGUiLExzZT0icG9wX21vZGUiLERzZT0ibG9uZ2VyX2FsdCIsTnNlPSJsaW5lX2JyZWFrcyIsUnNlPSJzdGFydF9jaGFyc19oaW50IjtvKHJrLCJjcmVhdGVUb2tlbiIpO28oVkJlLCJjcmVhdGVUb2tlbkludGVybmFsIik7bW89cmsoe25hbWU6IkVPRiIscGF0dGVybjpjaS5OQX0pO1l1KFttb10pO28oZDAsImNyZWF0ZVRva2VuSW5zdGFuY2UiKTtvKFQyLCJ0b2tlbk1hdGNoZXIiKX0pO3ZhciBYdSxNc2UsVWwscGc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwMCgpO0h0KCk7dXMoKTtYdT17YnVpbGRNaXNtYXRjaFRva2VuTWVzc2FnZSh7ZXhwZWN0ZWQ6dCxhY3R1YWw6ZSxwcmV2aW91czpyLHJ1bGVOYW1lOm59KXtyZXR1cm5gRXhwZWN0aW5nICR7QVIodCk/YC0tPiAke3F1KHQpfSA8LS1gOmB0b2tlbiBvZiB0eXBlIC0tPiAke3QubmFtZX0gPC0tYH0gYnV0IGZvdW5kIC0tPiAnJHtlLmltYWdlfScgPC0tYH0sYnVpbGROb3RBbGxJbnB1dFBhcnNlZE1lc3NhZ2Uoe2ZpcnN0UmVkdW5kYW50OnQscnVsZU5hbWU6ZX0pe3JldHVybiJSZWR1bmRhbnQgaW5wdXQsIGV4cGVjdGluZyBFT0YgYnV0IGZvdW5kOiAiK3QuaW1hZ2V9LGJ1aWxkTm9WaWFibGVBbHRNZXNzYWdlKHtleHBlY3RlZFBhdGhzUGVyQWx0OnQsYWN0dWFsOmUscHJldmlvdXM6cixjdXN0b21Vc2VyRGVzY3JpcHRpb246bixydWxlTmFtZTppfSl7bGV0IGE9IkV4cGVjdGluZzogIixsPWAKYnV0IGZvdW5kOiAnYCtzYShlKS5pbWFnZSsiJyI7aWYobilyZXR1cm4gYStuK2w7e2xldCB1PXFyKHQsKHAsbSk9PnAuY29uY2F0KG0pLFtdKSxoPVFlKHUscD0+YFske1FlKHAsbT0+cXUobSkpLmpvaW4oIiwgIil9XWApLGQ9YG9uZSBvZiB0aGVzZSBwb3NzaWJsZSBUb2tlbiBzZXF1ZW5jZXM6CiR7UWUoaCwocCxtKT0+YCAgJHttKzF9LiAke3B9YCkuam9pbihgCmApfWA7cmV0dXJuIGErZCtsfX0sYnVpbGRFYXJseUV4aXRNZXNzYWdlKHtleHBlY3RlZEl0ZXJhdGlvblBhdGhzOnQsYWN0dWFsOmUsY3VzdG9tVXNlckRlc2NyaXB0aW9uOnIscnVsZU5hbWU6bn0pe2xldCBpPSJFeHBlY3Rpbmc6ICIscz1gCmJ1dCBmb3VuZDogJ2Arc2EoZSkuaW1hZ2UrIiciO2lmKHIpcmV0dXJuIGkrcitzO3tsZXQgdT1gZXhwZWN0aW5nIGF0IGxlYXN0IG9uZSBpdGVyYXRpb24gd2hpY2ggc3RhcnRzIHdpdGggb25lIG9mIHRoZXNlIHBvc3NpYmxlIFRva2VuIHNlcXVlbmNlczo6CiAgPCR7UWUodCxoPT5gWyR7UWUoaCxmPT5xdShmKSkuam9pbigiLCIpfV1gKS5qb2luKCIgLCIpfT5gO3JldHVybiBpK3Urc319fTtPYmplY3QuZnJlZXplKFh1KTtNc2U9e2J1aWxkUnVsZU5vdEZvdW5kRXJyb3IodCxlKXtyZXR1cm4iSW52YWxpZCBncmFtbWFyLCByZWZlcmVuY2UgdG8gYSBydWxlIHdoaWNoIGlzIG5vdCBkZWZpbmVkOiAtPiIrZS5ub25UZXJtaW5hbE5hbWUrYDwtCmluc2lkZSB0b3AgbGV2ZWwgcnVsZTogLT5gK3QubmFtZSsiPC0ifX0sVWw9e2J1aWxkRHVwbGljYXRlRm91bmRFcnJvcih0LGUpe2Z1bmN0aW9uIHIoZil7cmV0dXJuIGYgaW5zdGFuY2VvZiBFcj9mLnRlcm1pbmFsVHlwZS5uYW1lOmYgaW5zdGFuY2VvZiBubj9mLm5vblRlcm1pbmFsTmFtZToiIn1vKHIsImdldEV4dHJhUHJvZHVjdGlvbkFyZ3VtZW50Iik7bGV0IG49dC5uYW1lLGk9c2EoZSksYT1pLmlkeCxzPVZzKGkpLGw9cihpKSx1PWE+MCxoPWAtPiR7c30ke3U/YToiIn08LSAke2w/YHdpdGggYXJndW1lbnQ6IC0+JHtsfTwtYDoiIn0KICAgICAgICAgICAgICAgICAgYXBwZWFycyBtb3JlIHRoYW4gb25jZSAoJHtlLmxlbmd0aH0gdGltZXMpIGluIHRoZSB0b3AgbGV2ZWwgcnVsZTogLT4ke259PC0uICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIEZvciBmdXJ0aGVyIGRldGFpbHMgc2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9GQVEuaHRtbCNOVU1FUklDQUxfU1VGRklYRVMgCiAgICAgICAgICAgICAgICAgIGA7cmV0dXJuIGg9aC5yZXBsYWNlKC9bIFx0XSsvZywiICIpLGg9aC5yZXBsYWNlKC9cc1xzKy9nLGAKYCksaH0sYnVpbGROYW1lc3BhY2VDb25mbGljdEVycm9yKHQpe3JldHVybmBOYW1lc3BhY2UgY29uZmxpY3QgZm91bmQgaW4gZ3JhbW1hci4KVGhlIGdyYW1tYXIgaGFzIGJvdGggYSBUZXJtaW5hbChUb2tlbikgYW5kIGEgTm9uLVRlcm1pbmFsKFJ1bGUpIG5hbWVkOiA8JHt0Lm5hbWV9Pi4KVG8gcmVzb2x2ZSB0aGlzIG1ha2Ugc3VyZSBlYWNoIFRlcm1pbmFsIGFuZCBOb24tVGVybWluYWwgbmFtZXMgYXJlIHVuaXF1ZQpUaGlzIGlzIGVhc3kgdG8gYWNjb21wbGlzaCBieSB1c2luZyB0aGUgY29udmVudGlvbiB0aGF0IFRlcm1pbmFsIG5hbWVzIHN0YXJ0IHdpdGggYW4gdXBwZXJjYXNlIGxldHRlcgphbmQgTm9uLVRlcm1pbmFsIG5hbWVzIHN0YXJ0IHdpdGggYSBsb3dlciBjYXNlIGxldHRlci5gfSxidWlsZEFsdGVybmF0aW9uUHJlZml4QW1iaWd1aXR5RXJyb3IodCl7bGV0IGU9UWUodC5wcmVmaXhQYXRoLGk9PnF1KGkpKS5qb2luKCIsICIpLHI9dC5hbHRlcm5hdGlvbi5pZHg9PT0wPyIiOnQuYWx0ZXJuYXRpb24uaWR4O3JldHVybmBBbWJpZ3VvdXMgYWx0ZXJuYXRpdmVzOiA8JHt0LmFtYmlndWl0eUluZGljZXMuam9pbigiICwiKX0+IGR1ZSB0byBjb21tb24gbG9va2FoZWFkIHByZWZpeAppbiA8T1Ike3J9PiBpbnNpZGUgPCR7dC50b3BMZXZlbFJ1bGUubmFtZX0+IFJ1bGUsCjwke2V9PiBtYXkgYXBwZWFycyBhcyBhIHByZWZpeCBwYXRoIGluIGFsbCB0aGVzZSBhbHRlcm5hdGl2ZXMuClNlZTogaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2dyYW1tYXJfZXJyb3JzLmh0bWwjQ09NTU9OX1BSRUZJWApGb3IgRnVydGhlciBkZXRhaWxzLmB9LGJ1aWxkQWx0ZXJuYXRpb25BbWJpZ3VpdHlFcnJvcih0KXtsZXQgZT1RZSh0LnByZWZpeFBhdGgsaT0+cXUoaSkpLmpvaW4oIiwgIikscj10LmFsdGVybmF0aW9uLmlkeD09PTA/IiI6dC5hbHRlcm5hdGlvbi5pZHgsbj1gQW1iaWd1b3VzIEFsdGVybmF0aXZlcyBEZXRlY3RlZDogPCR7dC5hbWJpZ3VpdHlJbmRpY2VzLmpvaW4oIiAsIil9PiBpbiA8T1Ike3J9PiBpbnNpZGUgPCR7dC50b3BMZXZlbFJ1bGUubmFtZX0+IFJ1bGUsCjwke2V9PiBtYXkgYXBwZWFycyBhcyBhIHByZWZpeCBwYXRoIGluIGFsbCB0aGVzZSBhbHRlcm5hdGl2ZXMuCmA7cmV0dXJuIG49bitgU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfZ3JhbW1hcl9lcnJvcnMuaHRtbCNBTUJJR1VPVVNfQUxURVJOQVRJVkVTCkZvciBGdXJ0aGVyIGRldGFpbHMuYCxufSxidWlsZEVtcHR5UmVwZXRpdGlvbkVycm9yKHQpe2xldCBlPVZzKHQucmVwZXRpdGlvbik7cmV0dXJuIHQucmVwZXRpdGlvbi5pZHghPT0wJiYoZSs9dC5yZXBldGl0aW9uLmlkeCksYFRoZSByZXBldGl0aW9uIDwke2V9PiB3aXRoaW4gUnVsZSA8JHt0LnRvcExldmVsUnVsZS5uYW1lfT4gY2FuIG5ldmVyIGNvbnN1bWUgYW55IHRva2Vucy4KVGhpcyBjb3VsZCBsZWFkIHRvIGFuIGluZmluaXRlIGxvb3AuYH0sYnVpbGRUb2tlbk5hbWVFcnJvcih0KXtyZXR1cm4iZGVwcmVjYXRlZCJ9LGJ1aWxkRW1wdHlBbHRlcm5hdGlvbkVycm9yKHQpe3JldHVybmBBbWJpZ3VvdXMgZW1wdHkgYWx0ZXJuYXRpdmU6IDwke3QuZW1wdHlDaG9pY2VJZHgrMX0+IGluIDxPUiR7dC5hbHRlcm5hdGlvbi5pZHh9PiBpbnNpZGUgPCR7dC50b3BMZXZlbFJ1bGUubmFtZX0+IFJ1bGUuCk9ubHkgdGhlIGxhc3QgYWx0ZXJuYXRpdmUgbWF5IGJlIGFuIGVtcHR5IGFsdGVybmF0aXZlLmB9LGJ1aWxkVG9vTWFueUFsdGVybmF0aXZlc0Vycm9yKHQpe3JldHVybmBBbiBBbHRlcm5hdGlvbiBjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gMjU2IGFsdGVybmF0aXZlczoKPE9SJHt0LmFsdGVybmF0aW9uLmlkeH0+IGluc2lkZSA8JHt0LnRvcExldmVsUnVsZS5uYW1lfT4gUnVsZS4KIGhhcyAke3QuYWx0ZXJuYXRpb24uZGVmaW5pdGlvbi5sZW5ndGgrMX0gYWx0ZXJuYXRpdmVzLmB9LGJ1aWxkTGVmdFJlY3Vyc2lvbkVycm9yKHQpe2xldCBlPXQudG9wTGV2ZWxSdWxlLm5hbWUscj1RZSh0LmxlZnRSZWN1cnNpb25QYXRoLGE9PmEubmFtZSksbj1gJHtlfSAtLT4gJHtyLmNvbmNhdChbZV0pLmpvaW4oIiAtLT4gIil9YDtyZXR1cm5gTGVmdCBSZWN1cnNpb24gZm91bmQgaW4gZ3JhbW1hci4KcnVsZTogPCR7ZX0+IGNhbiBiZSBpbnZva2VkIGZyb20gaXRzZWxmIChkaXJlY3RseSBvciBpbmRpcmVjdGx5KQp3aXRob3V0IGNvbnN1bWluZyBhbnkgVG9rZW5zLiBUaGUgZ3JhbW1hciBwYXRoIHRoYXQgY2F1c2VzIHRoaXMgaXM6IAogJHtufQogVG8gZml4IHRoaXMgcmVmYWN0b3IgeW91ciBncmFtbWFyIHRvIHJlbW92ZSB0aGUgbGVmdCByZWN1cnNpb24uCnNlZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTExfcGFyc2VyI0xlZnRfZmFjdG9yaW5nLmB9LGJ1aWxkSW52YWxpZFJ1bGVOYW1lRXJyb3IodCl7cmV0dXJuImRlcHJlY2F0ZWQifSxidWlsZER1cGxpY2F0ZVJ1bGVOYW1lRXJyb3IodCl7bGV0IGU7cmV0dXJuIHQudG9wTGV2ZWxSdWxlIGluc3RhbmNlb2YgbHM/ZT10LnRvcExldmVsUnVsZS5uYW1lOmU9dC50b3BMZXZlbFJ1bGUsYER1cGxpY2F0ZSBkZWZpbml0aW9uLCBydWxlOiAtPiR7ZX08LSBpcyBhbHJlYWR5IGRlZmluZWQgaW4gdGhlIGdyYW1tYXI6IC0+JHt0LmdyYW1tYXJOYW1lfTwtYH19fSk7ZnVuY3Rpb24gSXNlKHQsZSl7bGV0IHI9bmV3IF9SKHQsZSk7cmV0dXJuIHIucmVzb2x2ZVJlZnMoKSxyLmVycm9yc312YXIgX1IsT3NlPU0oKCk9PnsidXNlIHN0cmljdCI7VXMoKTtIdCgpO3VzKCk7byhJc2UsInJlc29sdmVHcmFtbWFyIik7X1I9Y2xhc3MgZXh0ZW5kcyBjc3tzdGF0aWN7byh0aGlzLCJHYXN0UmVmUmVzb2x2ZXJWaXNpdG9yIil9Y29uc3RydWN0b3IoZSxyKXtzdXBlcigpLHRoaXMubmFtZVRvVG9wUnVsZT1lLHRoaXMuZXJyTXNnUHJvdmlkZXI9cix0aGlzLmVycm9ycz1bXX1yZXNvbHZlUmVmcygpe1NlKGJyKHRoaXMubmFtZVRvVG9wUnVsZSksZT0+e3RoaXMuY3VyclRvcExldmVsPWUsZS5hY2NlcHQodGhpcyl9KX12aXNpdE5vblRlcm1pbmFsKGUpe2xldCByPXRoaXMubmFtZVRvVG9wUnVsZVtlLm5vblRlcm1pbmFsTmFtZV07aWYocillLnJlZmVyZW5jZWRSdWxlPXI7ZWxzZXtsZXQgbj10aGlzLmVyck1zZ1Byb3ZpZGVyLmJ1aWxkUnVsZU5vdEZvdW5kRXJyb3IodGhpcy5jdXJyVG9wTGV2ZWwsZSk7dGhpcy5lcnJvcnMucHVzaCh7bWVzc2FnZTpuLHR5cGU6VWkuVU5SRVNPTFZFRF9TVUJSVUxFX1JFRixydWxlTmFtZTp0aGlzLmN1cnJUb3BMZXZlbC5uYW1lLHVucmVzb2x2ZWRSZWZOYW1lOmUubm9uVGVybWluYWxOYW1lfSl9fX19KTtmdW5jdGlvbiBzayh0LGUscj1bXSl7cj1ybihyKTtsZXQgbj1bXSxpPTA7ZnVuY3Rpb24gYShsKXtyZXR1cm4gbC5jb25jYXQoeGkodCxpKzEpKX1vKGEsInJlbWFpbmluZ1BhdGhXaXRoIik7ZnVuY3Rpb24gcyhsKXtsZXQgdT1zayhhKGwpLGUscik7cmV0dXJuIG4uY29uY2F0KHUpfWZvcihvKHMsImdldEFsdGVybmF0aXZlc0ZvclByb2QiKTtyLmxlbmd0aDxlJiZpPHQubGVuZ3RoOyl7bGV0IGw9dFtpXTtpZihsIGluc3RhbmNlb2YgX24pcmV0dXJuIHMobC5kZWZpbml0aW9uKTtpZihsIGluc3RhbmNlb2Ygbm4pcmV0dXJuIHMobC5kZWZpbml0aW9uKTtpZihsIGluc3RhbmNlb2YgYW4pbj1zKGwuZGVmaW5pdGlvbik7ZWxzZSBpZihsIGluc3RhbmNlb2YgTG4pe2xldCB1PWwuZGVmaW5pdGlvbi5jb25jYXQoW25ldyBEcih7ZGVmaW5pdGlvbjpsLmRlZmluaXRpb259KV0pO3JldHVybiBzKHUpfWVsc2UgaWYobCBpbnN0YW5jZW9mIERuKXtsZXQgdT1bbmV3IF9uKHtkZWZpbml0aW9uOmwuZGVmaW5pdGlvbn0pLG5ldyBEcih7ZGVmaW5pdGlvbjpbbmV3IEVyKHt0ZXJtaW5hbFR5cGU6bC5zZXBhcmF0b3J9KV0uY29uY2F0KGwuZGVmaW5pdGlvbil9KV07cmV0dXJuIHModSl9ZWxzZSBpZihsIGluc3RhbmNlb2YgYm4pe2xldCB1PWwuZGVmaW5pdGlvbi5jb25jYXQoW25ldyBEcih7ZGVmaW5pdGlvbjpbbmV3IEVyKHt0ZXJtaW5hbFR5cGU6bC5zZXBhcmF0b3J9KV0uY29uY2F0KGwuZGVmaW5pdGlvbil9KV0pO249cyh1KX1lbHNlIGlmKGwgaW5zdGFuY2VvZiBEcil7bGV0IHU9bC5kZWZpbml0aW9uLmNvbmNhdChbbmV3IERyKHtkZWZpbml0aW9uOmwuZGVmaW5pdGlvbn0pXSk7bj1zKHUpfWVsc2V7aWYobCBpbnN0YW5jZW9mIHduKXJldHVybiBTZShsLmRlZmluaXRpb24sdT0+e2NyKHUuZGVmaW5pdGlvbik9PT0hMSYmKG49cyh1LmRlZmluaXRpb24pKX0pLG47aWYobCBpbnN0YW5jZW9mIEVyKXIucHVzaChsLnRlcm1pbmFsVHlwZSk7ZWxzZSB0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX1pKyt9cmV0dXJuIG4ucHVzaCh7cGFydGlhbFBhdGg6cixzdWZmaXhEZWY6eGkodCxpKX0pLG59ZnVuY3Rpb24gb2sodCxlLHIsbil7bGV0IGk9IkVYSVRfTk9ORV9URVJNSU5BTCIsYT1baV0scz0iRVhJVF9BTFRFUk5BVElWRSIsbD0hMSx1PWUubGVuZ3RoLGg9dS1uLTEsZj1bXSxkPVtdO2ZvcihkLnB1c2goe2lkeDotMSxkZWY6dCxydWxlU3RhY2s6W10sb2NjdXJyZW5jZVN0YWNrOltdfSk7IWNyKGQpOyl7bGV0IHA9ZC5wb3AoKTtpZihwPT09cyl7bCYmeGEoZCkuaWR4PD1oJiZkLnBvcCgpO2NvbnRpbnVlfWxldCBtPXAuZGVmLGc9cC5pZHgseT1wLnJ1bGVTdGFjayx2PXAub2NjdXJyZW5jZVN0YWNrO2lmKGNyKG0pKWNvbnRpbnVlO2xldCB4PW1bMF07aWYoeD09PWkpe2xldCBiPXtpZHg6ZyxkZWY6eGkobSkscnVsZVN0YWNrOnp1KHkpLG9jY3VycmVuY2VTdGFjazp6dSh2KX07ZC5wdXNoKGIpfWVsc2UgaWYoeCBpbnN0YW5jZW9mIEVyKWlmKGc8dS0xKXtsZXQgYj1nKzEsdz1lW2JdO2lmKHIodyx4LnRlcm1pbmFsVHlwZSkpe2xldCBfPXtpZHg6YixkZWY6eGkobSkscnVsZVN0YWNrOnksb2NjdXJyZW5jZVN0YWNrOnZ9O2QucHVzaChfKX19ZWxzZSBpZihnPT09dS0xKWYucHVzaCh7bmV4dFRva2VuVHlwZTp4LnRlcm1pbmFsVHlwZSxuZXh0VG9rZW5PY2N1cnJlbmNlOnguaWR4LHJ1bGVTdGFjazp5LG9jY3VycmVuY2VTdGFjazp2fSksbD0hMDtlbHNlIHRocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpO2Vsc2UgaWYoeCBpbnN0YW5jZW9mIG5uKXtsZXQgYj1ybih5KTtiLnB1c2goeC5ub25UZXJtaW5hbE5hbWUpO2xldCB3PXJuKHYpO3cucHVzaCh4LmlkeCk7bGV0IF89e2lkeDpnLGRlZjp4LmRlZmluaXRpb24uY29uY2F0KGEseGkobSkpLHJ1bGVTdGFjazpiLG9jY3VycmVuY2VTdGFjazp3fTtkLnB1c2goXyl9ZWxzZSBpZih4IGluc3RhbmNlb2YgYW4pe2xldCBiPXtpZHg6ZyxkZWY6eGkobSkscnVsZVN0YWNrOnksb2NjdXJyZW5jZVN0YWNrOnZ9O2QucHVzaChiKSxkLnB1c2gocyk7bGV0IHc9e2lkeDpnLGRlZjp4LmRlZmluaXRpb24uY29uY2F0KHhpKG0pKSxydWxlU3RhY2s6eSxvY2N1cnJlbmNlU3RhY2s6dn07ZC5wdXNoKHcpfWVsc2UgaWYoeCBpbnN0YW5jZW9mIExuKXtsZXQgYj1uZXcgRHIoe2RlZmluaXRpb246eC5kZWZpbml0aW9uLGlkeDp4LmlkeH0pLHc9eC5kZWZpbml0aW9uLmNvbmNhdChbYl0seGkobSkpLF89e2lkeDpnLGRlZjp3LHJ1bGVTdGFjazp5LG9jY3VycmVuY2VTdGFjazp2fTtkLnB1c2goXyl9ZWxzZSBpZih4IGluc3RhbmNlb2YgRG4pe2xldCBiPW5ldyBFcih7dGVybWluYWxUeXBlOnguc2VwYXJhdG9yfSksdz1uZXcgRHIoe2RlZmluaXRpb246W2JdLmNvbmNhdCh4LmRlZmluaXRpb24pLGlkeDp4LmlkeH0pLF89eC5kZWZpbml0aW9uLmNvbmNhdChbd10seGkobSkpLFQ9e2lkeDpnLGRlZjpfLHJ1bGVTdGFjazp5LG9jY3VycmVuY2VTdGFjazp2fTtkLnB1c2goVCl9ZWxzZSBpZih4IGluc3RhbmNlb2YgYm4pe2xldCBiPXtpZHg6ZyxkZWY6eGkobSkscnVsZVN0YWNrOnksb2NjdXJyZW5jZVN0YWNrOnZ9O2QucHVzaChiKSxkLnB1c2gocyk7bGV0IHc9bmV3IEVyKHt0ZXJtaW5hbFR5cGU6eC5zZXBhcmF0b3J9KSxfPW5ldyBEcih7ZGVmaW5pdGlvbjpbd10uY29uY2F0KHguZGVmaW5pdGlvbiksaWR4OnguaWR4fSksVD14LmRlZmluaXRpb24uY29uY2F0KFtfXSx4aShtKSksRT17aWR4OmcsZGVmOlQscnVsZVN0YWNrOnksb2NjdXJyZW5jZVN0YWNrOnZ9O2QucHVzaChFKX1lbHNlIGlmKHggaW5zdGFuY2VvZiBEcil7bGV0IGI9e2lkeDpnLGRlZjp4aShtKSxydWxlU3RhY2s6eSxvY2N1cnJlbmNlU3RhY2s6dn07ZC5wdXNoKGIpLGQucHVzaChzKTtsZXQgdz1uZXcgRHIoe2RlZmluaXRpb246eC5kZWZpbml0aW9uLGlkeDp4LmlkeH0pLF89eC5kZWZpbml0aW9uLmNvbmNhdChbd10seGkobSkpLFQ9e2lkeDpnLGRlZjpfLHJ1bGVTdGFjazp5LG9jY3VycmVuY2VTdGFjazp2fTtkLnB1c2goVCl9ZWxzZSBpZih4IGluc3RhbmNlb2Ygd24pZm9yKGxldCBiPXguZGVmaW5pdGlvbi5sZW5ndGgtMTtiPj0wO2ItLSl7bGV0IHc9eC5kZWZpbml0aW9uW2JdLF89e2lkeDpnLGRlZjp3LmRlZmluaXRpb24uY29uY2F0KHhpKG0pKSxydWxlU3RhY2s6eSxvY2N1cnJlbmNlU3RhY2s6dn07ZC5wdXNoKF8pLGQucHVzaChzKX1lbHNlIGlmKHggaW5zdGFuY2VvZiBfbilkLnB1c2goe2lkeDpnLGRlZjp4LmRlZmluaXRpb24uY29uY2F0KHhpKG0pKSxydWxlU3RhY2s6eSxvY2N1cnJlbmNlU3RhY2s6dn0pO2Vsc2UgaWYoeCBpbnN0YW5jZW9mIGxzKWQucHVzaChVQmUoeCxnLHksdikpO2Vsc2UgdGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIil9cmV0dXJuIGZ9ZnVuY3Rpb24gVUJlKHQsZSxyLG4pe2xldCBpPXJuKHIpO2kucHVzaCh0Lm5hbWUpO2xldCBhPXJuKG4pO3JldHVybiBhLnB1c2goMSkse2lkeDplLGRlZjp0LmRlZmluaXRpb24scnVsZVN0YWNrOmksb2NjdXJyZW5jZVN0YWNrOmF9fXZhciBMUixuayxtZyxpayxrMixhayxFMixTMj1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7bVIoKTtYVCgpO3VzKCk7TFI9Y2xhc3MgZXh0ZW5kcyBIdXtzdGF0aWN7byh0aGlzLCJBYnN0cmFjdE5leHRQb3NzaWJsZVRva2Vuc1dhbGtlciIpfWNvbnN0cnVjdG9yKGUscil7c3VwZXIoKSx0aGlzLnRvcFByb2Q9ZSx0aGlzLnBhdGg9cix0aGlzLnBvc3NpYmxlVG9rVHlwZXM9W10sdGhpcy5uZXh0UHJvZHVjdGlvbk5hbWU9IiIsdGhpcy5uZXh0UHJvZHVjdGlvbk9jY3VycmVuY2U9MCx0aGlzLmZvdW5kPSExLHRoaXMuaXNBdEVuZE9mUGF0aD0hMX1zdGFydFdhbGtpbmcoKXtpZih0aGlzLmZvdW5kPSExLHRoaXMucGF0aC5ydWxlU3RhY2tbMF0hPT10aGlzLnRvcFByb2QubmFtZSl0aHJvdyBFcnJvcigiVGhlIHBhdGggZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgd2Fsa2VyJ3MgdG9wIFJ1bGUhIik7cmV0dXJuIHRoaXMucnVsZVN0YWNrPXJuKHRoaXMucGF0aC5ydWxlU3RhY2spLnJldmVyc2UoKSx0aGlzLm9jY3VycmVuY2VTdGFjaz1ybih0aGlzLnBhdGgub2NjdXJyZW5jZVN0YWNrKS5yZXZlcnNlKCksdGhpcy5ydWxlU3RhY2sucG9wKCksdGhpcy5vY2N1cnJlbmNlU3RhY2sucG9wKCksdGhpcy51cGRhdGVFeHBlY3RlZE5leHQoKSx0aGlzLndhbGsodGhpcy50b3BQcm9kKSx0aGlzLnBvc3NpYmxlVG9rVHlwZXN9d2FsayhlLHI9W10pe3RoaXMuZm91bmR8fHN1cGVyLndhbGsoZSxyKX13YWxrUHJvZFJlZihlLHIsbil7aWYoZS5yZWZlcmVuY2VkUnVsZS5uYW1lPT09dGhpcy5uZXh0UHJvZHVjdGlvbk5hbWUmJmUuaWR4PT09dGhpcy5uZXh0UHJvZHVjdGlvbk9jY3VycmVuY2Upe2xldCBpPXIuY29uY2F0KG4pO3RoaXMudXBkYXRlRXhwZWN0ZWROZXh0KCksdGhpcy53YWxrKGUucmVmZXJlbmNlZFJ1bGUsaSl9fXVwZGF0ZUV4cGVjdGVkTmV4dCgpe2NyKHRoaXMucnVsZVN0YWNrKT8odGhpcy5uZXh0UHJvZHVjdGlvbk5hbWU9IiIsdGhpcy5uZXh0UHJvZHVjdGlvbk9jY3VycmVuY2U9MCx0aGlzLmlzQXRFbmRPZlBhdGg9ITApOih0aGlzLm5leHRQcm9kdWN0aW9uTmFtZT10aGlzLnJ1bGVTdGFjay5wb3AoKSx0aGlzLm5leHRQcm9kdWN0aW9uT2NjdXJyZW5jZT10aGlzLm9jY3VycmVuY2VTdGFjay5wb3AoKSl9fSxuaz1jbGFzcyBleHRlbmRzIExSe3N0YXRpY3tvKHRoaXMsIk5leHRBZnRlclRva2VuV2Fsa2VyIil9Y29uc3RydWN0b3IoZSxyKXtzdXBlcihlLHIpLHRoaXMucGF0aD1yLHRoaXMubmV4dFRlcm1pbmFsTmFtZT0iIix0aGlzLm5leHRUZXJtaW5hbE9jY3VycmVuY2U9MCx0aGlzLm5leHRUZXJtaW5hbE5hbWU9dGhpcy5wYXRoLmxhc3RUb2submFtZSx0aGlzLm5leHRUZXJtaW5hbE9jY3VycmVuY2U9dGhpcy5wYXRoLmxhc3RUb2tPY2N1cnJlbmNlfXdhbGtUZXJtaW5hbChlLHIsbil7aWYodGhpcy5pc0F0RW5kT2ZQYXRoJiZlLnRlcm1pbmFsVHlwZS5uYW1lPT09dGhpcy5uZXh0VGVybWluYWxOYW1lJiZlLmlkeD09PXRoaXMubmV4dFRlcm1pbmFsT2NjdXJyZW5jZSYmIXRoaXMuZm91bmQpe2xldCBpPXIuY29uY2F0KG4pLGE9bmV3IF9uKHtkZWZpbml0aW9uOml9KTt0aGlzLnBvc3NpYmxlVG9rVHlwZXM9dTAoYSksdGhpcy5mb3VuZD0hMH19fSxtZz1jbGFzcyBleHRlbmRzIEh1e3N0YXRpY3tvKHRoaXMsIkFic3RyYWN0TmV4dFRlcm1pbmFsQWZ0ZXJQcm9kdWN0aW9uV2Fsa2VyIil9Y29uc3RydWN0b3IoZSxyKXtzdXBlcigpLHRoaXMudG9wUnVsZT1lLHRoaXMub2NjdXJyZW5jZT1yLHRoaXMucmVzdWx0PXt0b2tlbjp2b2lkIDAsb2NjdXJyZW5jZTp2b2lkIDAsaXNFbmRPZlJ1bGU6dm9pZCAwfX1zdGFydFdhbGtpbmcoKXtyZXR1cm4gdGhpcy53YWxrKHRoaXMudG9wUnVsZSksdGhpcy5yZXN1bHR9fSxpaz1jbGFzcyBleHRlbmRzIG1ne3N0YXRpY3tvKHRoaXMsIk5leHRUZXJtaW5hbEFmdGVyTWFueVdhbGtlciIpfXdhbGtNYW55KGUscixuKXtpZihlLmlkeD09PXRoaXMub2NjdXJyZW5jZSl7bGV0IGk9c2Eoci5jb25jYXQobikpO3RoaXMucmVzdWx0LmlzRW5kT2ZSdWxlPWk9PT12b2lkIDAsaSBpbnN0YW5jZW9mIEVyJiYodGhpcy5yZXN1bHQudG9rZW49aS50ZXJtaW5hbFR5cGUsdGhpcy5yZXN1bHQub2NjdXJyZW5jZT1pLmlkeCl9ZWxzZSBzdXBlci53YWxrTWFueShlLHIsbil9fSxrMj1jbGFzcyBleHRlbmRzIG1ne3N0YXRpY3tvKHRoaXMsIk5leHRUZXJtaW5hbEFmdGVyTWFueVNlcFdhbGtlciIpfXdhbGtNYW55U2VwKGUscixuKXtpZihlLmlkeD09PXRoaXMub2NjdXJyZW5jZSl7bGV0IGk9c2Eoci5jb25jYXQobikpO3RoaXMucmVzdWx0LmlzRW5kT2ZSdWxlPWk9PT12b2lkIDAsaSBpbnN0YW5jZW9mIEVyJiYodGhpcy5yZXN1bHQudG9rZW49aS50ZXJtaW5hbFR5cGUsdGhpcy5yZXN1bHQub2NjdXJyZW5jZT1pLmlkeCl9ZWxzZSBzdXBlci53YWxrTWFueVNlcChlLHIsbil9fSxhaz1jbGFzcyBleHRlbmRzIG1ne3N0YXRpY3tvKHRoaXMsIk5leHRUZXJtaW5hbEFmdGVyQXRMZWFzdE9uZVdhbGtlciIpfXdhbGtBdExlYXN0T25lKGUscixuKXtpZihlLmlkeD09PXRoaXMub2NjdXJyZW5jZSl7bGV0IGk9c2Eoci5jb25jYXQobikpO3RoaXMucmVzdWx0LmlzRW5kT2ZSdWxlPWk9PT12b2lkIDAsaSBpbnN0YW5jZW9mIEVyJiYodGhpcy5yZXN1bHQudG9rZW49aS50ZXJtaW5hbFR5cGUsdGhpcy5yZXN1bHQub2NjdXJyZW5jZT1pLmlkeCl9ZWxzZSBzdXBlci53YWxrQXRMZWFzdE9uZShlLHIsbil9fSxFMj1jbGFzcyBleHRlbmRzIG1ne3N0YXRpY3tvKHRoaXMsIk5leHRUZXJtaW5hbEFmdGVyQXRMZWFzdE9uZVNlcFdhbGtlciIpfXdhbGtBdExlYXN0T25lU2VwKGUscixuKXtpZihlLmlkeD09PXRoaXMub2NjdXJyZW5jZSl7bGV0IGk9c2Eoci5jb25jYXQobikpO3RoaXMucmVzdWx0LmlzRW5kT2ZSdWxlPWk9PT12b2lkIDAsaSBpbnN0YW5jZW9mIEVyJiYodGhpcy5yZXN1bHQudG9rZW49aS50ZXJtaW5hbFR5cGUsdGhpcy5yZXN1bHQub2NjdXJyZW5jZT1pLmlkeCl9ZWxzZSBzdXBlci53YWxrQXRMZWFzdE9uZVNlcChlLHIsbil9fTtvKHNrLCJwb3NzaWJsZVBhdGhzRnJvbSIpO28ob2ssIm5leHRQb3NzaWJsZVRva2Vuc0FmdGVyIik7byhVQmUsImV4cGFuZFRvcExldmVsUnVsZSIpfSk7ZnVuY3Rpb24gQzIodCl7aWYodCBpbnN0YW5jZW9mIGFufHx0PT09Ik9wdGlvbiIpcmV0dXJuIFhuLk9QVElPTjtpZih0IGluc3RhbmNlb2YgRHJ8fHQ9PT0iUmVwZXRpdGlvbiIpcmV0dXJuIFhuLlJFUEVUSVRJT047aWYodCBpbnN0YW5jZW9mIExufHx0PT09IlJlcGV0aXRpb25NYW5kYXRvcnkiKXJldHVybiBYbi5SRVBFVElUSU9OX01BTkRBVE9SWTtpZih0IGluc3RhbmNlb2YgRG58fHQ9PT0iUmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IiKXJldHVybiBYbi5SRVBFVElUSU9OX01BTkRBVE9SWV9XSVRIX1NFUEFSQVRPUjtpZih0IGluc3RhbmNlb2YgYm58fHQ9PT0iUmVwZXRpdGlvbldpdGhTZXBhcmF0b3IiKXJldHVybiBYbi5SRVBFVElUSU9OX1dJVEhfU0VQQVJBVE9SO2lmKHQgaW5zdGFuY2VvZiB3bnx8dD09PSJBbHRlcm5hdGlvbiIpcmV0dXJuIFhuLkFMVEVSTkFUSU9OO3Rocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfWZ1bmN0aW9uIGNrKHQpe2xldHtvY2N1cnJlbmNlOmUscnVsZTpyLHByb2RUeXBlOm4sbWF4TG9va2FoZWFkOml9PXQsYT1DMihuKTtyZXR1cm4gYT09PVhuLkFMVEVSTkFUSU9OP2dnKGUscixpKTp5ZyhlLHIsYSxpKX1mdW5jdGlvbiBCc2UodCxlLHIsbixpLGEpe2xldCBzPWdnKHQsZSxyKSxsPVVzZShzKT9kZzpXdTtyZXR1cm4gYShzLG4sbCxpKX1mdW5jdGlvbiBGc2UodCxlLHIsbixpLGEpe2xldCBzPXlnKHQsZSxpLHIpLGw9VXNlKHMpP2RnOld1O3JldHVybiBhKHNbMF0sbCxuKX1mdW5jdGlvbiB6c2UodCxlLHIsbil7bGV0IGk9dC5sZW5ndGgsYT16YSh0LHM9PnphKHMsbD0+bC5sZW5ndGg9PT0xKSk7aWYoZSlyZXR1cm4gZnVuY3Rpb24ocyl7bGV0IGw9UWUocyx1PT51LkdBVEUpO2ZvcihsZXQgdT0wO3U8aTt1Kyspe2xldCBoPXRbdV0sZj1oLmxlbmd0aCxkPWxbdV07aWYoIShkIT09dm9pZCAwJiZkLmNhbGwodGhpcyk9PT0hMSkpZTpmb3IobGV0IHA9MDtwPGY7cCsrKXtsZXQgbT1oW3BdLGc9bS5sZW5ndGg7Zm9yKGxldCB5PTA7eTxnO3krKyl7bGV0IHY9dGhpcy5MQSh5KzEpO2lmKHIodixtW3ldKT09PSExKWNvbnRpbnVlIGV9cmV0dXJuIHV9fX07aWYoYSYmIW4pe2xldCBzPVFlKHQsdT0+V3IodSkpLGw9cXIocywodSxoLGYpPT4oU2UoaCxkPT57TnQodSxkLnRva2VuVHlwZUlkeCl8fCh1W2QudG9rZW5UeXBlSWR4XT1mKSxTZShkLmNhdGVnb3J5TWF0Y2hlcyxwPT57TnQodSxwKXx8KHVbcF09Zil9KX0pLHUpLHt9KTtyZXR1cm4gZnVuY3Rpb24oKXtsZXQgdT10aGlzLkxBKDEpO3JldHVybiBsW3UudG9rZW5UeXBlSWR4XX19ZWxzZSByZXR1cm4gZnVuY3Rpb24oKXtmb3IobGV0IHM9MDtzPGk7cysrKXtsZXQgbD10W3NdLHU9bC5sZW5ndGg7ZTpmb3IobGV0IGg9MDtoPHU7aCsrKXtsZXQgZj1sW2hdLGQ9Zi5sZW5ndGg7Zm9yKGxldCBwPTA7cDxkO3ArKyl7bGV0IG09dGhpcy5MQShwKzEpO2lmKHIobSxmW3BdKT09PSExKWNvbnRpbnVlIGV9cmV0dXJuIHN9fX19ZnVuY3Rpb24gR3NlKHQsZSxyKXtsZXQgbj16YSh0LGE9PmEubGVuZ3RoPT09MSksaT10Lmxlbmd0aDtpZihuJiYhcil7bGV0IGE9V3IodCk7aWYoYS5sZW5ndGg9PT0xJiZjcihhWzBdLmNhdGVnb3J5TWF0Y2hlcykpe2xldCBsPWFbMF0udG9rZW5UeXBlSWR4O3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLkxBKDEpLnRva2VuVHlwZUlkeD09PWx9fWVsc2V7bGV0IHM9cXIoYSwobCx1LGgpPT4obFt1LnRva2VuVHlwZUlkeF09ITAsU2UodS5jYXRlZ29yeU1hdGNoZXMsZj0+e2xbZl09ITB9KSxsKSxbXSk7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IGw9dGhpcy5MQSgxKTtyZXR1cm4gc1tsLnRva2VuVHlwZUlkeF09PT0hMH19fWVsc2UgcmV0dXJuIGZ1bmN0aW9uKCl7ZTpmb3IobGV0IGE9MDthPGk7YSsrKXtsZXQgcz10W2FdLGw9cy5sZW5ndGg7Zm9yKGxldCB1PTA7dTxsO3UrKyl7bGV0IGg9dGhpcy5MQSh1KzEpO2lmKGUoaCxzW3VdKT09PSExKWNvbnRpbnVlIGV9cmV0dXJuITB9cmV0dXJuITF9fWZ1bmN0aW9uIFBzZSh0KXtsZXQgZT1uZXcgQXJyYXkodCk7Zm9yKGxldCByPTA7cjx0O3IrKyllW3JdPVtdO3JldHVybiBlfWZ1bmN0aW9uIERSKHQpe2xldCBlPVsiIl07Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2xldCBuPXRbcl0saT1bXTtmb3IobGV0IGE9MDthPGUubGVuZ3RoO2ErKyl7bGV0IHM9ZVthXTtpLnB1c2gocysiXyIrbi50b2tlblR5cGVJZHgpO2ZvcihsZXQgbD0wO2w8bi5jYXRlZ29yeU1hdGNoZXMubGVuZ3RoO2wrKyl7bGV0IHU9Il8iK24uY2F0ZWdvcnlNYXRjaGVzW2xdO2kucHVzaChzK3UpfX1lPWl9cmV0dXJuIGV9ZnVuY3Rpb24gSEJlKHQsZSxyKXtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl7aWYobj09PXIpY29udGludWU7bGV0IGk9dFtuXTtmb3IobGV0IGE9MDthPGUubGVuZ3RoO2ErKyl7bGV0IHM9ZVthXTtpZihpW3NdPT09ITApcmV0dXJuITF9fXJldHVybiEwfWZ1bmN0aW9uICRzZSh0LGUpe2xldCByPVFlKHQscz0+c2soW3NdLDEpKSxuPVBzZShyLmxlbmd0aCksaT1RZShyLHM9PntsZXQgbD17fTtyZXR1cm4gU2Uocyx1PT57bGV0IGg9RFIodS5wYXJ0aWFsUGF0aCk7U2UoaCxmPT57bFtmXT0hMH0pfSksbH0pLGE9cjtmb3IobGV0IHM9MTtzPD1lO3MrKyl7bGV0IGw9YTthPVBzZShsLmxlbmd0aCk7Zm9yKGxldCB1PTA7dTxsLmxlbmd0aDt1Kyspe2xldCBoPWxbdV07Zm9yKGxldCBmPTA7ZjxoLmxlbmd0aDtmKyspe2xldCBkPWhbZl0ucGFydGlhbFBhdGgscD1oW2ZdLnN1ZmZpeERlZixtPURSKGQpO2lmKEhCZShpLG0sdSl8fGNyKHApfHxkLmxlbmd0aD09PWUpe2xldCB5PW5bdV07aWYodWsoeSxkKT09PSExKXt5LnB1c2goZCk7Zm9yKGxldCB2PTA7djxtLmxlbmd0aDt2Kyspe2xldCB4PW1bdl07aVt1XVt4XT0hMH19fWVsc2V7bGV0IHk9c2socCxzKzEsZCk7YVt1XT1hW3VdLmNvbmNhdCh5KSxTZSh5LHY9PntsZXQgeD1EUih2LnBhcnRpYWxQYXRoKTtTZSh4LGI9PntpW3VdW2JdPSEwfSl9KX19fX1yZXR1cm4gbn1mdW5jdGlvbiBnZyh0LGUscixuKXtsZXQgaT1uZXcgbGsodCxYbi5BTFRFUk5BVElPTixuKTtyZXR1cm4gZS5hY2NlcHQoaSksJHNlKGkucmVzdWx0LHIpfWZ1bmN0aW9uIHlnKHQsZSxyLG4pe2xldCBpPW5ldyBsayh0LHIpO2UuYWNjZXB0KGkpO2xldCBhPWkucmVzdWx0LGw9bmV3IE5SKGUsdCxyKS5zdGFydFdhbGtpbmcoKSx1PW5ldyBfbih7ZGVmaW5pdGlvbjphfSksaD1uZXcgX24oe2RlZmluaXRpb246bH0pO3JldHVybiAkc2UoW3UsaF0sbil9ZnVuY3Rpb24gdWsodCxlKXtlOmZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdO2lmKG4ubGVuZ3RoPT09ZS5sZW5ndGgpe2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtsZXQgYT1lW2ldLHM9bltpXTtpZigoYT09PXN8fHMuY2F0ZWdvcnlNYXRjaGVzTWFwW2EudG9rZW5UeXBlSWR4XSE9PXZvaWQgMCk9PT0hMSljb250aW51ZSBlfXJldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiBWc2UodCxlKXtyZXR1cm4gdC5sZW5ndGg8ZS5sZW5ndGgmJnphKHQsKHIsbik9PntsZXQgaT1lW25dO3JldHVybiByPT09aXx8aS5jYXRlZ29yeU1hdGNoZXNNYXBbci50b2tlblR5cGVJZHhdfSl9ZnVuY3Rpb24gVXNlKHQpe3JldHVybiB6YSh0LGU9PnphKGUscj0+emEocixuPT5jcihuLmNhdGVnb3J5TWF0Y2hlcykpKSl9dmFyIFhuLE5SLGxrLHZnPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtTMigpO1hUKCk7ZjAoKTt1cygpOyhmdW5jdGlvbih0KXt0W3QuT1BUSU9OPTBdPSJPUFRJT04iLHRbdC5SRVBFVElUSU9OPTFdPSJSRVBFVElUSU9OIix0W3QuUkVQRVRJVElPTl9NQU5EQVRPUlk9Ml09IlJFUEVUSVRJT05fTUFOREFUT1JZIix0W3QuUkVQRVRJVElPTl9NQU5EQVRPUllfV0lUSF9TRVBBUkFUT1I9M109IlJFUEVUSVRJT05fTUFOREFUT1JZX1dJVEhfU0VQQVJBVE9SIix0W3QuUkVQRVRJVElPTl9XSVRIX1NFUEFSQVRPUj00XT0iUkVQRVRJVElPTl9XSVRIX1NFUEFSQVRPUiIsdFt0LkFMVEVSTkFUSU9OPTVdPSJBTFRFUk5BVElPTiJ9KShYbnx8KFhuPXt9KSk7byhDMiwiZ2V0UHJvZFR5cGUiKTtvKGNrLCJnZXRMb29rYWhlYWRQYXRocyIpO28oQnNlLCJidWlsZExvb2thaGVhZEZ1bmNGb3JPciIpO28oRnNlLCJidWlsZExvb2thaGVhZEZ1bmNGb3JPcHRpb25hbFByb2QiKTtvKHpzZSwiYnVpbGRBbHRlcm5hdGl2ZXNMb29rQWhlYWRGdW5jIik7byhHc2UsImJ1aWxkU2luZ2xlQWx0ZXJuYXRpdmVMb29rYWhlYWRGdW5jdGlvbiIpO05SPWNsYXNzIGV4dGVuZHMgSHV7c3RhdGlje28odGhpcywiUmVzdERlZmluaXRpb25GaW5kZXJXYWxrZXIiKX1jb25zdHJ1Y3RvcihlLHIsbil7c3VwZXIoKSx0aGlzLnRvcFByb2Q9ZSx0aGlzLnRhcmdldE9jY3VycmVuY2U9cix0aGlzLnRhcmdldFByb2RUeXBlPW59c3RhcnRXYWxraW5nKCl7cmV0dXJuIHRoaXMud2Fsayh0aGlzLnRvcFByb2QpLHRoaXMucmVzdERlZn1jaGVja0lzVGFyZ2V0KGUscixuLGkpe3JldHVybiBlLmlkeD09PXRoaXMudGFyZ2V0T2NjdXJyZW5jZSYmdGhpcy50YXJnZXRQcm9kVHlwZT09PXI/KHRoaXMucmVzdERlZj1uLmNvbmNhdChpKSwhMCk6ITF9d2Fsa09wdGlvbihlLHIsbil7dGhpcy5jaGVja0lzVGFyZ2V0KGUsWG4uT1BUSU9OLHIsbil8fHN1cGVyLndhbGtPcHRpb24oZSxyLG4pfXdhbGtBdExlYXN0T25lKGUscixuKXt0aGlzLmNoZWNrSXNUYXJnZXQoZSxYbi5SRVBFVElUSU9OX01BTkRBVE9SWSxyLG4pfHxzdXBlci53YWxrT3B0aW9uKGUscixuKX13YWxrQXRMZWFzdE9uZVNlcChlLHIsbil7dGhpcy5jaGVja0lzVGFyZ2V0KGUsWG4uUkVQRVRJVElPTl9NQU5EQVRPUllfV0lUSF9TRVBBUkFUT1IscixuKXx8c3VwZXIud2Fsa09wdGlvbihlLHIsbil9d2Fsa01hbnkoZSxyLG4pe3RoaXMuY2hlY2tJc1RhcmdldChlLFhuLlJFUEVUSVRJT04scixuKXx8c3VwZXIud2Fsa09wdGlvbihlLHIsbil9d2Fsa01hbnlTZXAoZSxyLG4pe3RoaXMuY2hlY2tJc1RhcmdldChlLFhuLlJFUEVUSVRJT05fV0lUSF9TRVBBUkFUT1IscixuKXx8c3VwZXIud2Fsa09wdGlvbihlLHIsbil9fSxsaz1jbGFzcyBleHRlbmRzIGNze3N0YXRpY3tvKHRoaXMsIkluc2lkZURlZmluaXRpb25GaW5kZXJWaXNpdG9yIil9Y29uc3RydWN0b3IoZSxyLG4pe3N1cGVyKCksdGhpcy50YXJnZXRPY2N1cnJlbmNlPWUsdGhpcy50YXJnZXRQcm9kVHlwZT1yLHRoaXMudGFyZ2V0UmVmPW4sdGhpcy5yZXN1bHQ9W119Y2hlY2tJc1RhcmdldChlLHIpe2UuaWR4PT09dGhpcy50YXJnZXRPY2N1cnJlbmNlJiZ0aGlzLnRhcmdldFByb2RUeXBlPT09ciYmKHRoaXMudGFyZ2V0UmVmPT09dm9pZCAwfHxlPT09dGhpcy50YXJnZXRSZWYpJiYodGhpcy5yZXN1bHQ9ZS5kZWZpbml0aW9uKX12aXNpdE9wdGlvbihlKXt0aGlzLmNoZWNrSXNUYXJnZXQoZSxYbi5PUFRJT04pfXZpc2l0UmVwZXRpdGlvbihlKXt0aGlzLmNoZWNrSXNUYXJnZXQoZSxYbi5SRVBFVElUSU9OKX12aXNpdFJlcGV0aXRpb25NYW5kYXRvcnkoZSl7dGhpcy5jaGVja0lzVGFyZ2V0KGUsWG4uUkVQRVRJVElPTl9NQU5EQVRPUlkpfXZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IoZSl7dGhpcy5jaGVja0lzVGFyZ2V0KGUsWG4uUkVQRVRJVElPTl9NQU5EQVRPUllfV0lUSF9TRVBBUkFUT1IpfXZpc2l0UmVwZXRpdGlvbldpdGhTZXBhcmF0b3IoZSl7dGhpcy5jaGVja0lzVGFyZ2V0KGUsWG4uUkVQRVRJVElPTl9XSVRIX1NFUEFSQVRPUil9dmlzaXRBbHRlcm5hdGlvbihlKXt0aGlzLmNoZWNrSXNUYXJnZXQoZSxYbi5BTFRFUk5BVElPTil9fTtvKFBzZSwiaW5pdGlhbGl6ZUFycmF5T2ZBcnJheXMiKTtvKERSLCJwYXRoVG9IYXNoS2V5cyIpO28oSEJlLCJpc1VuaXF1ZVByZWZpeEhhc2giKTtvKCRzZSwibG9va0FoZWFkU2VxdWVuY2VGcm9tQWx0ZXJuYXRpdmVzIik7byhnZywiZ2V0TG9va2FoZWFkUGF0aHNGb3JPciIpO28oeWcsImdldExvb2thaGVhZFBhdGhzRm9yT3B0aW9uYWxQcm9kIik7byh1aywiY29udGFpbnNQYXRoIik7byhWc2UsImlzU3RyaWN0UHJlZml4T2ZQYXRoIik7byhVc2UsImFyZVRva2VuQ2F0ZWdvcmllc05vdFVzZWQiKX0pO2Z1bmN0aW9uIEhzZSh0KXtsZXQgZT10Lmxvb2thaGVhZFN0cmF0ZWd5LnZhbGlkYXRlKHtydWxlczp0LnJ1bGVzLHRva2VuVHlwZXM6dC50b2tlblR5cGVzLGdyYW1tYXJOYW1lOnQuZ3JhbW1hck5hbWV9KTtyZXR1cm4gUWUoZSxyPT5PYmplY3QuYXNzaWduKHt0eXBlOlVpLkNVU1RPTV9MT09LQUhFQURfVkFMSURBVElPTn0scikpfWZ1bmN0aW9uIFdzZSh0LGUscixuKXtsZXQgaT1iYSh0LHU9PldCZSh1LHIpKSxhPVFCZSh0LGUscikscz1iYSh0LHU9PlhCZSh1LHIpKSxsPWJhKHQsdT0+cUJlKHUsdCxuLHIpKTtyZXR1cm4gaS5jb25jYXQoYSxzLGwpfWZ1bmN0aW9uIFdCZSh0LGUpe2xldCByPW5ldyBSUjt0LmFjY2VwdChyKTtsZXQgbj1yLmFsbFByb2R1Y3Rpb25zLGk9V0wobixZQmUpLGE9enMoaSxsPT5sLmxlbmd0aD4xKTtyZXR1cm4gUWUoYnIoYSksbD0+e2xldCB1PXNhKGwpLGg9ZS5idWlsZER1cGxpY2F0ZUZvdW5kRXJyb3IodCxsKSxmPVZzKHUpLGQ9e21lc3NhZ2U6aCx0eXBlOlVpLkRVUExJQ0FURV9QUk9EVUNUSU9OUyxydWxlTmFtZTp0Lm5hbWUsZHNsTmFtZTpmLG9jY3VycmVuY2U6dS5pZHh9LHA9WXNlKHUpO3JldHVybiBwJiYoZC5wYXJhbWV0ZXI9cCksZH0pfWZ1bmN0aW9uIFlCZSh0KXtyZXR1cm5gJHtWcyh0KX1fI18ke3QuaWR4fV8jXyR7WXNlKHQpfWB9ZnVuY3Rpb24gWXNlKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRXI/dC50ZXJtaW5hbFR5cGUubmFtZTp0IGluc3RhbmNlb2Ygbm4/dC5ub25UZXJtaW5hbE5hbWU6IiJ9ZnVuY3Rpb24gcUJlKHQsZSxyLG4pe2xldCBpPVtdO2lmKHFyKGUsKHMsbCk9PmwubmFtZT09PXQubmFtZT9zKzE6cywwKT4xKXtsZXQgcz1uLmJ1aWxkRHVwbGljYXRlUnVsZU5hbWVFcnJvcih7dG9wTGV2ZWxSdWxlOnQsZ3JhbW1hck5hbWU6cn0pO2kucHVzaCh7bWVzc2FnZTpzLHR5cGU6VWkuRFVQTElDQVRFX1JVTEVfTkFNRSxydWxlTmFtZTp0Lm5hbWV9KX1yZXR1cm4gaX1mdW5jdGlvbiBxc2UodCxlLHIpe2xldCBuPVtdLGk7cmV0dXJuIFluKGUsdCl8fChpPWBJbnZhbGlkIHJ1bGUgb3ZlcnJpZGUsIHJ1bGU6IC0+JHt0fTwtIGNhbm5vdCBiZSBvdmVycmlkZGVuIGluIHRoZSBncmFtbWFyOiAtPiR7cn08LWFzIGl0IGlzIG5vdCBkZWZpbmVkIGluIGFueSBvZiB0aGUgc3VwZXIgZ3JhbW1hcnMgYCxuLnB1c2goe21lc3NhZ2U6aSx0eXBlOlVpLklOVkFMSURfUlVMRV9PVkVSUklERSxydWxlTmFtZTp0fSkpLG59ZnVuY3Rpb24gSVIodCxlLHIsbj1bXSl7bGV0IGk9W10sYT1oayhlLmRlZmluaXRpb24pO2lmKGNyKGEpKXJldHVybltdO3tsZXQgcz10Lm5hbWU7WW4oYSx0KSYmaS5wdXNoKHttZXNzYWdlOnIuYnVpbGRMZWZ0UmVjdXJzaW9uRXJyb3Ioe3RvcExldmVsUnVsZTp0LGxlZnRSZWN1cnNpb25QYXRoOm59KSx0eXBlOlVpLkxFRlRfUkVDVVJTSU9OLHJ1bGVOYW1lOnN9KTtsZXQgdT1uZihhLG4uY29uY2F0KFt0XSkpLGg9YmEodSxmPT57bGV0IGQ9cm4obik7cmV0dXJuIGQucHVzaChmKSxJUih0LGYscixkKX0pO3JldHVybiBpLmNvbmNhdChoKX19ZnVuY3Rpb24gaGsodCl7bGV0IGU9W107aWYoY3IodCkpcmV0dXJuIGU7bGV0IHI9c2EodCk7aWYociBpbnN0YW5jZW9mIG5uKWUucHVzaChyLnJlZmVyZW5jZWRSdWxlKTtlbHNlIGlmKHIgaW5zdGFuY2VvZiBfbnx8ciBpbnN0YW5jZW9mIGFufHxyIGluc3RhbmNlb2YgTG58fHIgaW5zdGFuY2VvZiBEbnx8ciBpbnN0YW5jZW9mIGJufHxyIGluc3RhbmNlb2YgRHIpZT1lLmNvbmNhdChoayhyLmRlZmluaXRpb24pKTtlbHNlIGlmKHIgaW5zdGFuY2VvZiB3billPVdyKFFlKHIuZGVmaW5pdGlvbixhPT5oayhhLmRlZmluaXRpb24pKSk7ZWxzZSBpZighKHIgaW5zdGFuY2VvZiBFcikpdGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIik7bGV0IG49YzAociksaT10Lmxlbmd0aD4xO2lmKG4mJmkpe2xldCBhPXhpKHQpO3JldHVybiBlLmNvbmNhdChoayhhKSl9ZWxzZSByZXR1cm4gZX1mdW5jdGlvbiBYc2UodCxlKXtsZXQgcj1uZXcgQTI7dC5hY2NlcHQocik7bGV0IG49ci5hbHRlcm5hdGlvbnM7cmV0dXJuIGJhKG4sYT0+e2xldCBzPXp1KGEuZGVmaW5pdGlvbik7cmV0dXJuIGJhKHMsKGwsdSk9PntsZXQgaD1vayhbbF0sW10sV3UsMSk7cmV0dXJuIGNyKGgpP1t7bWVzc2FnZTplLmJ1aWxkRW1wdHlBbHRlcm5hdGlvbkVycm9yKHt0b3BMZXZlbFJ1bGU6dCxhbHRlcm5hdGlvbjphLGVtcHR5Q2hvaWNlSWR4OnV9KSx0eXBlOlVpLk5PTkVfTEFTVF9FTVBUWV9BTFQscnVsZU5hbWU6dC5uYW1lLG9jY3VycmVuY2U6YS5pZHgsYWx0ZXJuYXRpdmU6dSsxfV06W119KX0pfWZ1bmN0aW9uIGpzZSh0LGUscil7bGV0IG49bmV3IEEyO3QuYWNjZXB0KG4pO2xldCBpPW4uYWx0ZXJuYXRpb25zO3JldHVybiBpPWFmKGkscz0+cy5pZ25vcmVBbWJpZ3VpdGllcz09PSEwKSxiYShpLHM9PntsZXQgbD1zLmlkeCx1PXMubWF4TG9va2FoZWFkfHxlLGg9Z2cobCx0LHUscyksZj1qQmUoaCxzLHQsciksZD1LQmUoaCxzLHQscik7cmV0dXJuIGYuY29uY2F0KGQpfSl9ZnVuY3Rpb24gWEJlKHQsZSl7bGV0IHI9bmV3IEEyO3QuYWNjZXB0KHIpO2xldCBuPXIuYWx0ZXJuYXRpb25zO3JldHVybiBiYShuLGE9PmEuZGVmaW5pdGlvbi5sZW5ndGg+MjU1P1t7bWVzc2FnZTplLmJ1aWxkVG9vTWFueUFsdGVybmF0aXZlc0Vycm9yKHt0b3BMZXZlbFJ1bGU6dCxhbHRlcm5hdGlvbjphfSksdHlwZTpVaS5UT09fTUFOWV9BTFRTLHJ1bGVOYW1lOnQubmFtZSxvY2N1cnJlbmNlOmEuaWR4fV06W10pfWZ1bmN0aW9uIEtzZSh0LGUscil7bGV0IG49W107cmV0dXJuIFNlKHQsaT0+e2xldCBhPW5ldyBNUjtpLmFjY2VwdChhKTtsZXQgcz1hLmFsbFByb2R1Y3Rpb25zO1NlKHMsbD0+e2xldCB1PUMyKGwpLGg9bC5tYXhMb29rYWhlYWR8fGUsZj1sLmlkeCxwPXlnKGYsaSx1LGgpWzBdO2lmKGNyKFdyKHApKSl7bGV0IG09ci5idWlsZEVtcHR5UmVwZXRpdGlvbkVycm9yKHt0b3BMZXZlbFJ1bGU6aSxyZXBldGl0aW9uOmx9KTtuLnB1c2goe21lc3NhZ2U6bSx0eXBlOlVpLk5PX05PTl9FTVBUWV9MT09LQUhFQUQscnVsZU5hbWU6aS5uYW1lfSl9fSl9KSxufWZ1bmN0aW9uIGpCZSh0LGUscixuKXtsZXQgaT1bXSxhPXFyKHQsKGwsdSxoKT0+KGUuZGVmaW5pdGlvbltoXS5pZ25vcmVBbWJpZ3VpdGllcz09PSEwfHxTZSh1LGY9PntsZXQgZD1baF07U2UodCwocCxtKT0+e2ghPT1tJiZ1ayhwLGYpJiZlLmRlZmluaXRpb25bbV0uaWdub3JlQW1iaWd1aXRpZXMhPT0hMCYmZC5wdXNoKG0pfSksZC5sZW5ndGg+MSYmIXVrKGksZikmJihpLnB1c2goZiksbC5wdXNoKHthbHRzOmQscGF0aDpmfSkpfSksbCksW10pO3JldHVybiBRZShhLGw9PntsZXQgdT1RZShsLmFsdHMsZj0+ZisxKTtyZXR1cm57bWVzc2FnZTpuLmJ1aWxkQWx0ZXJuYXRpb25BbWJpZ3VpdHlFcnJvcih7dG9wTGV2ZWxSdWxlOnIsYWx0ZXJuYXRpb246ZSxhbWJpZ3VpdHlJbmRpY2VzOnUscHJlZml4UGF0aDpsLnBhdGh9KSx0eXBlOlVpLkFNQklHVU9VU19BTFRTLHJ1bGVOYW1lOnIubmFtZSxvY2N1cnJlbmNlOmUuaWR4LGFsdGVybmF0aXZlczpsLmFsdHN9fSl9ZnVuY3Rpb24gS0JlKHQsZSxyLG4pe2xldCBpPXFyKHQsKHMsbCx1KT0+e2xldCBoPVFlKGwsZj0+KHtpZHg6dSxwYXRoOmZ9KSk7cmV0dXJuIHMuY29uY2F0KGgpfSxbXSk7cmV0dXJuIFJjKGJhKGkscz0+e2lmKGUuZGVmaW5pdGlvbltzLmlkeF0uaWdub3JlQW1iaWd1aXRpZXM9PT0hMClyZXR1cm5bXTtsZXQgdT1zLmlkeCxoPXMucGF0aCxmPVlyKGkscD0+ZS5kZWZpbml0aW9uW3AuaWR4XS5pZ25vcmVBbWJpZ3VpdGllcyE9PSEwJiZwLmlkeDx1JiZWc2UocC5wYXRoLGgpKTtyZXR1cm4gUWUoZixwPT57bGV0IG09W3AuaWR4KzEsdSsxXSxnPWUuaWR4PT09MD8iIjplLmlkeDtyZXR1cm57bWVzc2FnZTpuLmJ1aWxkQWx0ZXJuYXRpb25QcmVmaXhBbWJpZ3VpdHlFcnJvcih7dG9wTGV2ZWxSdWxlOnIsYWx0ZXJuYXRpb246ZSxhbWJpZ3VpdHlJbmRpY2VzOm0scHJlZml4UGF0aDpwLnBhdGh9KSx0eXBlOlVpLkFNQklHVU9VU19QUkVGSVhfQUxUUyxydWxlTmFtZTpyLm5hbWUsb2NjdXJyZW5jZTpnLGFsdGVybmF0aXZlczptfX0pfSkpfWZ1bmN0aW9uIFFCZSh0LGUscil7bGV0IG49W10saT1RZShlLGE9PmEubmFtZSk7cmV0dXJuIFNlKHQsYT0+e2xldCBzPWEubmFtZTtpZihZbihpLHMpKXtsZXQgbD1yLmJ1aWxkTmFtZXNwYWNlQ29uZmxpY3RFcnJvcihhKTtuLnB1c2goe21lc3NhZ2U6bCx0eXBlOlVpLkNPTkZMSUNUX1RPS0VOU19SVUxFU19OQU1FU1BBQ0UscnVsZU5hbWU6c30pfX0pLG59dmFyIFJSLEEyLE1SLF8yPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtVcygpO3VzKCk7dmcoKTtTMigpO2YwKCk7byhIc2UsInZhbGlkYXRlTG9va2FoZWFkIik7byhXc2UsInZhbGlkYXRlR3JhbW1hciIpO28oV0JlLCJ2YWxpZGF0ZUR1cGxpY2F0ZVByb2R1Y3Rpb25zIik7byhZQmUsImlkZW50aWZ5UHJvZHVjdGlvbkZvckR1cGxpY2F0ZXMiKTtvKFlzZSwiZ2V0RXh0cmFQcm9kdWN0aW9uQXJndW1lbnQiKTtSUj1jbGFzcyBleHRlbmRzIGNze3N0YXRpY3tvKHRoaXMsIk9jY3VycmVuY2VWYWxpZGF0aW9uQ29sbGVjdG9yIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuYWxsUHJvZHVjdGlvbnM9W119dmlzaXROb25UZXJtaW5hbChlKXt0aGlzLmFsbFByb2R1Y3Rpb25zLnB1c2goZSl9dmlzaXRPcHRpb24oZSl7dGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKGUpfXZpc2l0UmVwZXRpdGlvbldpdGhTZXBhcmF0b3IoZSl7dGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKGUpfXZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeShlKXt0aGlzLmFsbFByb2R1Y3Rpb25zLnB1c2goZSl9dmlzaXRSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcihlKXt0aGlzLmFsbFByb2R1Y3Rpb25zLnB1c2goZSl9dmlzaXRSZXBldGl0aW9uKGUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChlKX12aXNpdEFsdGVybmF0aW9uKGUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChlKX12aXNpdFRlcm1pbmFsKGUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChlKX19O28ocUJlLCJ2YWxpZGF0ZVJ1bGVEb2VzTm90QWxyZWFkeUV4aXN0Iik7byhxc2UsInZhbGlkYXRlUnVsZUlzT3ZlcnJpZGRlbiIpO28oSVIsInZhbGlkYXRlTm9MZWZ0UmVjdXJzaW9uIik7byhoaywiZ2V0Rmlyc3ROb25lVGVybWluYWwiKTtBMj1jbGFzcyBleHRlbmRzIGNze3N0YXRpY3tvKHRoaXMsIk9yQ29sbGVjdG9yIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuYWx0ZXJuYXRpb25zPVtdfXZpc2l0QWx0ZXJuYXRpb24oZSl7dGhpcy5hbHRlcm5hdGlvbnMucHVzaChlKX19O28oWHNlLCJ2YWxpZGF0ZUVtcHR5T3JBbHRlcm5hdGl2ZSIpO28oanNlLCJ2YWxpZGF0ZUFtYmlndW91c0FsdGVybmF0aW9uQWx0ZXJuYXRpdmVzIik7TVI9Y2xhc3MgZXh0ZW5kcyBjc3tzdGF0aWN7byh0aGlzLCJSZXBldGl0aW9uQ29sbGVjdG9yIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuYWxsUHJvZHVjdGlvbnM9W119dmlzaXRSZXBldGl0aW9uV2l0aFNlcGFyYXRvcihlKXt0aGlzLmFsbFByb2R1Y3Rpb25zLnB1c2goZSl9dmlzaXRSZXBldGl0aW9uTWFuZGF0b3J5KGUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChlKX12aXNpdFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yKGUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChlKX12aXNpdFJlcGV0aXRpb24oZSl7dGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKGUpfX07byhYQmUsInZhbGlkYXRlVG9vTWFueUFsdHMiKTtvKEtzZSwidmFsaWRhdGVTb21lTm9uRW1wdHlMb29rYWhlYWRQYXRoIik7byhqQmUsImNoZWNrQWx0ZXJuYXRpdmVzQW1iaWd1aXRpZXMiKTtvKEtCZSwiY2hlY2tQcmVmaXhBbHRlcm5hdGl2ZXNBbWJpZ3VpdGllcyIpO28oUUJlLCJjaGVja1Rlcm1pbmFsQW5kTm9uZVRlcm1pbmFsc05hbWVTcGFjZSIpfSk7ZnVuY3Rpb24gUXNlKHQpe2xldCBlPXJmKHQse2Vyck1zZ1Byb3ZpZGVyOk1zZX0pLHI9e307cmV0dXJuIFNlKHQucnVsZXMsbj0+e3Jbbi5uYW1lXT1ufSksSXNlKHIsZS5lcnJNc2dQcm92aWRlcil9ZnVuY3Rpb24gWnNlKHQpe3JldHVybiB0PXJmKHQse2Vyck1zZ1Byb3ZpZGVyOlVsfSksV3NlKHQucnVsZXMsdC50b2tlblR5cGVzLHQuZXJyTXNnUHJvdmlkZXIsdC5ncmFtbWFyTmFtZSl9dmFyIEpzZT1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7T3NlKCk7XzIoKTtwZygpO28oUXNlLCJyZXNvbHZlR3JhbW1hciIpO28oWnNlLCJ2YWxpZGF0ZUdyYW1tYXIiKX0pO2Z1bmN0aW9uIGZmKHQpe3JldHVybiBZbihpb2UsdC5uYW1lKX12YXIgZW9lLHRvZSxyb2Usbm9lLGlvZSx4ZyxtMCxMMixEMixOMixiZz1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7ZW9lPSJNaXNtYXRjaGVkVG9rZW5FeGNlcHRpb24iLHRvZT0iTm9WaWFibGVBbHRFeGNlcHRpb24iLHJvZT0iRWFybHlFeGl0RXhjZXB0aW9uIixub2U9Ik5vdEFsbElucHV0UGFyc2VkRXhjZXB0aW9uIixpb2U9W2VvZSx0b2Uscm9lLG5vZV07T2JqZWN0LmZyZWV6ZShpb2UpO28oZmYsImlzUmVjb2duaXRpb25FeGNlcHRpb24iKTt4Zz1jbGFzcyBleHRlbmRzIEVycm9ye3N0YXRpY3tvKHRoaXMsIlJlY29nbml0aW9uRXhjZXB0aW9uIil9Y29uc3RydWN0b3IoZSxyKXtzdXBlcihlKSx0aGlzLnRva2VuPXIsdGhpcy5yZXN5bmNlZFRva2Vucz1bXSxPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxuZXcudGFyZ2V0LnByb3RvdHlwZSksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcil9fSxtMD1jbGFzcyBleHRlbmRzIHhne3N0YXRpY3tvKHRoaXMsIk1pc21hdGNoZWRUb2tlbkV4Y2VwdGlvbiIpfWNvbnN0cnVjdG9yKGUscixuKXtzdXBlcihlLHIpLHRoaXMucHJldmlvdXNUb2tlbj1uLHRoaXMubmFtZT1lb2V9fSxMMj1jbGFzcyBleHRlbmRzIHhne3N0YXRpY3tvKHRoaXMsIk5vVmlhYmxlQWx0RXhjZXB0aW9uIil9Y29uc3RydWN0b3IoZSxyLG4pe3N1cGVyKGUsciksdGhpcy5wcmV2aW91c1Rva2VuPW4sdGhpcy5uYW1lPXRvZX19LEQyPWNsYXNzIGV4dGVuZHMgeGd7c3RhdGlje28odGhpcywiTm90QWxsSW5wdXRQYXJzZWRFeGNlcHRpb24iKX1jb25zdHJ1Y3RvcihlLHIpe3N1cGVyKGUsciksdGhpcy5uYW1lPW5vZX19LE4yPWNsYXNzIGV4dGVuZHMgeGd7c3RhdGlje28odGhpcywiRWFybHlFeGl0RXhjZXB0aW9uIil9Y29uc3RydWN0b3IoZSxyLG4pe3N1cGVyKGUsciksdGhpcy5wcmV2aW91c1Rva2VuPW4sdGhpcy5uYW1lPXJvZX19fSk7ZnVuY3Rpb24gWkJlKHQsZSxyLG4saSxhLHMpe2xldCBsPXRoaXMuZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKG4saSksdT10aGlzLmZpcnN0QWZ0ZXJSZXBNYXBbbF07aWYodT09PXZvaWQgMCl7bGV0IHA9dGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCksbT10aGlzLmdldEdBc3RQcm9kdWN0aW9ucygpW3BdO3U9bmV3IGEobSxpKS5zdGFydFdhbGtpbmcoKSx0aGlzLmZpcnN0QWZ0ZXJSZXBNYXBbbF09dX1sZXQgaD11LnRva2VuLGY9dS5vY2N1cnJlbmNlLGQ9dS5pc0VuZE9mUnVsZTt0aGlzLlJVTEVfU1RBQ0subGVuZ3RoPT09MSYmZCYmaD09PXZvaWQgMCYmKGg9bW8sZj0xKSwhKGg9PT12b2lkIDB8fGY9PT12b2lkIDApJiZ0aGlzLnNob3VsZEluUmVwZXRpdGlvblJlY292ZXJ5QmVUcmllZChoLGYscykmJnRoaXMudHJ5SW5SZXBldGl0aW9uUmVjb3ZlcnkodCxlLHIsaCl9dmFyIE9SLEJSLFBSLGZrLEZSPU0oKCk9PnsidXNlIHN0cmljdCI7cDAoKTtIdCgpO2JnKCk7Z1IoKTtVcygpO09SPXt9LEJSPSJJblJ1bGVSZWNvdmVyeUV4Y2VwdGlvbiIsUFI9Y2xhc3MgZXh0ZW5kcyBFcnJvcntzdGF0aWN7byh0aGlzLCJJblJ1bGVSZWNvdmVyeUV4Y2VwdGlvbiIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMubmFtZT1CUn19LGZrPWNsYXNze3N0YXRpY3tvKHRoaXMsIlJlY292ZXJhYmxlIil9aW5pdFJlY292ZXJhYmxlKGUpe3RoaXMuZmlyc3RBZnRlclJlcE1hcD17fSx0aGlzLnJlc3luY0ZvbGxvd3M9e30sdGhpcy5yZWNvdmVyeUVuYWJsZWQ9TnQoZSwicmVjb3ZlcnlFbmFibGVkIik/ZS5yZWNvdmVyeUVuYWJsZWQ6aHMucmVjb3ZlcnlFbmFibGVkLHRoaXMucmVjb3ZlcnlFbmFibGVkJiYodGhpcy5hdHRlbXB0SW5SZXBldGl0aW9uUmVjb3Zlcnk9WkJlKX1nZXRUb2tlblRvSW5zZXJ0KGUpe2xldCByPWQwKGUsIiIsTmFOLE5hTixOYU4sTmFOLE5hTixOYU4pO3JldHVybiByLmlzSW5zZXJ0ZWRJblJlY292ZXJ5PSEwLHJ9Y2FuVG9rZW5UeXBlQmVJbnNlcnRlZEluUmVjb3ZlcnkoZSl7cmV0dXJuITB9Y2FuVG9rZW5UeXBlQmVEZWxldGVkSW5SZWNvdmVyeShlKXtyZXR1cm4hMH10cnlJblJlcGV0aXRpb25SZWNvdmVyeShlLHIsbixpKXtsZXQgYT10aGlzLmZpbmRSZVN5bmNUb2tlblR5cGUoKSxzPXRoaXMuZXhwb3J0TGV4ZXJTdGF0ZSgpLGw9W10sdT0hMSxoPXRoaXMuTEEoMSksZj10aGlzLkxBKDEpLGQ9bygoKT0+e2xldCBwPXRoaXMuTEEoMCksbT10aGlzLmVycm9yTWVzc2FnZVByb3ZpZGVyLmJ1aWxkTWlzbWF0Y2hUb2tlbk1lc3NhZ2Uoe2V4cGVjdGVkOmksYWN0dWFsOmgscHJldmlvdXM6cCxydWxlTmFtZTp0aGlzLmdldEN1cnJSdWxlRnVsbE5hbWUoKX0pLGc9bmV3IG0wKG0saCx0aGlzLkxBKDApKTtnLnJlc3luY2VkVG9rZW5zPXp1KGwpLHRoaXMuU0FWRV9FUlJPUihnKX0sImdlbmVyYXRlRXJyb3JNZXNzYWdlIik7Zm9yKDshdTspaWYodGhpcy50b2tlbk1hdGNoZXIoZixpKSl7ZCgpO3JldHVybn1lbHNlIGlmKG4uY2FsbCh0aGlzKSl7ZCgpLGUuYXBwbHkodGhpcyxyKTtyZXR1cm59ZWxzZSB0aGlzLnRva2VuTWF0Y2hlcihmLGEpP3U9ITA6KGY9dGhpcy5TS0lQX1RPS0VOKCksdGhpcy5hZGRUb1Jlc3luY1Rva2VucyhmLGwpKTt0aGlzLmltcG9ydExleGVyU3RhdGUocyl9c2hvdWxkSW5SZXBldGl0aW9uUmVjb3ZlcnlCZVRyaWVkKGUscixuKXtyZXR1cm4hKG49PT0hMXx8dGhpcy50b2tlbk1hdGNoZXIodGhpcy5MQSgxKSxlKXx8dGhpcy5pc0JhY2tUcmFja2luZygpfHx0aGlzLmNhblBlcmZvcm1JblJ1bGVSZWNvdmVyeShlLHRoaXMuZ2V0Rm9sbG93c0ZvckluUnVsZVJlY292ZXJ5KGUscikpKX1nZXRGb2xsb3dzRm9ySW5SdWxlUmVjb3ZlcnkoZSxyKXtsZXQgbj10aGlzLmdldEN1cnJlbnRHcmFtbWFyUGF0aChlLHIpO3JldHVybiB0aGlzLmdldE5leHRQb3NzaWJsZVRva2VuVHlwZXMobil9dHJ5SW5SdWxlUmVjb3ZlcnkoZSxyKXtpZih0aGlzLmNhblJlY292ZXJXaXRoU2luZ2xlVG9rZW5JbnNlcnRpb24oZSxyKSlyZXR1cm4gdGhpcy5nZXRUb2tlblRvSW5zZXJ0KGUpO2lmKHRoaXMuY2FuUmVjb3ZlcldpdGhTaW5nbGVUb2tlbkRlbGV0aW9uKGUpKXtsZXQgbj10aGlzLlNLSVBfVE9LRU4oKTtyZXR1cm4gdGhpcy5jb25zdW1lVG9rZW4oKSxufXRocm93IG5ldyBQUigic2FkIHNhZCBwYW5kYSIpfWNhblBlcmZvcm1JblJ1bGVSZWNvdmVyeShlLHIpe3JldHVybiB0aGlzLmNhblJlY292ZXJXaXRoU2luZ2xlVG9rZW5JbnNlcnRpb24oZSxyKXx8dGhpcy5jYW5SZWNvdmVyV2l0aFNpbmdsZVRva2VuRGVsZXRpb24oZSl9Y2FuUmVjb3ZlcldpdGhTaW5nbGVUb2tlbkluc2VydGlvbihlLHIpe2lmKCF0aGlzLmNhblRva2VuVHlwZUJlSW5zZXJ0ZWRJblJlY292ZXJ5KGUpfHxjcihyKSlyZXR1cm4hMTtsZXQgbj10aGlzLkxBKDEpO3JldHVybiBhcyhyLGE9PnRoaXMudG9rZW5NYXRjaGVyKG4sYSkpIT09dm9pZCAwfWNhblJlY292ZXJXaXRoU2luZ2xlVG9rZW5EZWxldGlvbihlKXtyZXR1cm4gdGhpcy5jYW5Ub2tlblR5cGVCZURlbGV0ZWRJblJlY292ZXJ5KGUpP3RoaXMudG9rZW5NYXRjaGVyKHRoaXMuTEEoMiksZSk6ITF9aXNJbkN1cnJlbnRSdWxlUmVTeW5jU2V0KGUpe2xldCByPXRoaXMuZ2V0Q3VyckZvbGxvd0tleSgpLG49dGhpcy5nZXRGb2xsb3dTZXRGcm9tRm9sbG93S2V5KHIpO3JldHVybiBZbihuLGUpfWZpbmRSZVN5bmNUb2tlblR5cGUoKXtsZXQgZT10aGlzLmZsYXR0ZW5Gb2xsb3dTZXQoKSxyPXRoaXMuTEEoMSksbj0yO2Zvcig7Oyl7bGV0IGk9YXMoZSxhPT5UMihyLGEpKTtpZihpIT09dm9pZCAwKXJldHVybiBpO3I9dGhpcy5MQShuKSxuKyt9fWdldEN1cnJGb2xsb3dLZXkoKXtpZih0aGlzLlJVTEVfU1RBQ0subGVuZ3RoPT09MSlyZXR1cm4gT1I7bGV0IGU9dGhpcy5nZXRMYXN0RXhwbGljaXRSdWxlU2hvcnROYW1lKCkscj10aGlzLmdldExhc3RFeHBsaWNpdFJ1bGVPY2N1cnJlbmNlSW5kZXgoKSxuPXRoaXMuZ2V0UHJldmlvdXNFeHBsaWNpdFJ1bGVTaG9ydE5hbWUoKTtyZXR1cm57cnVsZU5hbWU6dGhpcy5zaG9ydFJ1bGVOYW1lVG9GdWxsTmFtZShlKSxpZHhJbkNhbGxpbmdSdWxlOnIsaW5SdWxlOnRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbE5hbWUobil9fWJ1aWxkRnVsbEZvbGxvd0tleVN0YWNrKCl7bGV0IGU9dGhpcy5SVUxFX1NUQUNLLHI9dGhpcy5SVUxFX09DQ1VSUkVOQ0VfU1RBQ0s7cmV0dXJuIFFlKGUsKG4saSk9Pmk9PT0wP09SOntydWxlTmFtZTp0aGlzLnNob3J0UnVsZU5hbWVUb0Z1bGxOYW1lKG4pLGlkeEluQ2FsbGluZ1J1bGU6cltpXSxpblJ1bGU6dGhpcy5zaG9ydFJ1bGVOYW1lVG9GdWxsTmFtZShlW2ktMV0pfSl9ZmxhdHRlbkZvbGxvd1NldCgpe2xldCBlPVFlKHRoaXMuYnVpbGRGdWxsRm9sbG93S2V5U3RhY2soKSxyPT50aGlzLmdldEZvbGxvd1NldEZyb21Gb2xsb3dLZXkocikpO3JldHVybiBXcihlKX1nZXRGb2xsb3dTZXRGcm9tRm9sbG93S2V5KGUpe2lmKGU9PT1PUilyZXR1cm5bbW9dO2xldCByPWUucnVsZU5hbWUrZS5pZHhJbkNhbGxpbmdSdWxlK2pUK2UuaW5SdWxlO3JldHVybiB0aGlzLnJlc3luY0ZvbGxvd3Nbcl19YWRkVG9SZXN5bmNUb2tlbnMoZSxyKXtyZXR1cm4gdGhpcy50b2tlbk1hdGNoZXIoZSxtbyl8fHIucHVzaChlKSxyfXJlU3luY1RvKGUpe2xldCByPVtdLG49dGhpcy5MQSgxKTtmb3IoO3RoaXMudG9rZW5NYXRjaGVyKG4sZSk9PT0hMTspbj10aGlzLlNLSVBfVE9LRU4oKSx0aGlzLmFkZFRvUmVzeW5jVG9rZW5zKG4scik7cmV0dXJuIHp1KHIpfWF0dGVtcHRJblJlcGV0aXRpb25SZWNvdmVyeShlLHIsbixpLGEscyxsKXt9Z2V0Q3VycmVudEdyYW1tYXJQYXRoKGUscil7bGV0IG49dGhpcy5nZXRIdW1hblJlYWRhYmxlUnVsZVN0YWNrKCksaT1ybih0aGlzLlJVTEVfT0NDVVJSRU5DRV9TVEFDSyk7cmV0dXJue3J1bGVTdGFjazpuLG9jY3VycmVuY2VTdGFjazppLGxhc3RUb2s6ZSxsYXN0VG9rT2NjdXJyZW5jZTpyfX1nZXRIdW1hblJlYWRhYmxlUnVsZVN0YWNrKCl7cmV0dXJuIFFlKHRoaXMuUlVMRV9TVEFDSyxlPT50aGlzLnNob3J0UnVsZU5hbWVUb0Z1bGxOYW1lKGUpKX19O28oWkJlLCJhdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnkiKX0pO2Z1bmN0aW9uIGRrKHQsZSxyKXtyZXR1cm4gcnxlfHR9dmFyIHBrPU0oKCk9PnsidXNlIHN0cmljdCI7byhkaywiZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkIil9KTt2YXIganUselI9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO3BnKCk7VXMoKTtfMigpO3ZnKCk7anU9Y2xhc3N7c3RhdGlje28odGhpcywiTExrTG9va2FoZWFkU3RyYXRlZ3kiKX1jb25zdHJ1Y3RvcihlKXt2YXIgcjt0aGlzLm1heExvb2thaGVhZD0ocj1lPy5tYXhMb29rYWhlYWQpIT09bnVsbCYmciE9PXZvaWQgMD9yOmhzLm1heExvb2thaGVhZH12YWxpZGF0ZShlKXtsZXQgcj10aGlzLnZhbGlkYXRlTm9MZWZ0UmVjdXJzaW9uKGUucnVsZXMpO2lmKGNyKHIpKXtsZXQgbj10aGlzLnZhbGlkYXRlRW1wdHlPckFsdGVybmF0aXZlcyhlLnJ1bGVzKSxpPXRoaXMudmFsaWRhdGVBbWJpZ3VvdXNBbHRlcm5hdGlvbkFsdGVybmF0aXZlcyhlLnJ1bGVzLHRoaXMubWF4TG9va2FoZWFkKSxhPXRoaXMudmFsaWRhdGVTb21lTm9uRW1wdHlMb29rYWhlYWRQYXRoKGUucnVsZXMsdGhpcy5tYXhMb29rYWhlYWQpO3JldHVyblsuLi5yLC4uLm4sLi4uaSwuLi5hXX1yZXR1cm4gcn12YWxpZGF0ZU5vTGVmdFJlY3Vyc2lvbihlKXtyZXR1cm4gYmEoZSxyPT5JUihyLHIsVWwpKX12YWxpZGF0ZUVtcHR5T3JBbHRlcm5hdGl2ZXMoZSl7cmV0dXJuIGJhKGUscj0+WHNlKHIsVWwpKX12YWxpZGF0ZUFtYmlndW91c0FsdGVybmF0aW9uQWx0ZXJuYXRpdmVzKGUscil7cmV0dXJuIGJhKGUsbj0+anNlKG4scixVbCkpfXZhbGlkYXRlU29tZU5vbkVtcHR5TG9va2FoZWFkUGF0aChlLHIpe3JldHVybiBLc2UoZSxyLFVsKX1idWlsZExvb2thaGVhZEZvckFsdGVybmF0aW9uKGUpe3JldHVybiBCc2UoZS5wcm9kT2NjdXJyZW5jZSxlLnJ1bGUsZS5tYXhMb29rYWhlYWQsZS5oYXNQcmVkaWNhdGVzLGUuZHluYW1pY1Rva2Vuc0VuYWJsZWQsenNlKX1idWlsZExvb2thaGVhZEZvck9wdGlvbmFsKGUpe3JldHVybiBGc2UoZS5wcm9kT2NjdXJyZW5jZSxlLnJ1bGUsZS5tYXhMb29rYWhlYWQsZS5keW5hbWljVG9rZW5zRW5hYmxlZCxDMihlLnByb2RUeXBlKSxHc2UpfX19KTtmdW5jdGlvbiBKQmUodCl7bWsucmVzZXQoKSx0LmFjY2VwdChtayk7bGV0IGU9bWsuZHNsTWV0aG9kcztyZXR1cm4gbWsucmVzZXQoKSxlfXZhciBnayxHUixtayxhb2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO1VzKCk7cGsoKTt1cygpO3pSKCk7Z2s9Y2xhc3N7c3RhdGlje28odGhpcywiTG9va3NBaGVhZCIpfWluaXRMb29rc0FoZWFkKGUpe3RoaXMuZHluYW1pY1Rva2Vuc0VuYWJsZWQ9TnQoZSwiZHluYW1pY1Rva2Vuc0VuYWJsZWQiKT9lLmR5bmFtaWNUb2tlbnNFbmFibGVkOmhzLmR5bmFtaWNUb2tlbnNFbmFibGVkLHRoaXMubWF4TG9va2FoZWFkPU50KGUsIm1heExvb2thaGVhZCIpP2UubWF4TG9va2FoZWFkOmhzLm1heExvb2thaGVhZCx0aGlzLmxvb2thaGVhZFN0cmF0ZWd5PU50KGUsImxvb2thaGVhZFN0cmF0ZWd5Iik/ZS5sb29rYWhlYWRTdHJhdGVneTpuZXcganUoe21heExvb2thaGVhZDp0aGlzLm1heExvb2thaGVhZH0pLHRoaXMubG9va0FoZWFkRnVuY3NDYWNoZT1uZXcgTWFwfXByZUNvbXB1dGVMb29rYWhlYWRGdW5jdGlvbnMoZSl7U2UoZSxyPT57dGhpcy5UUkFDRV9JTklUKGAke3IubmFtZX0gUnVsZSBMb29rYWhlYWRgLCgpPT57bGV0e2FsdGVybmF0aW9uOm4scmVwZXRpdGlvbjppLG9wdGlvbjphLHJlcGV0aXRpb25NYW5kYXRvcnk6cyxyZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcjpsLHJlcGV0aXRpb25XaXRoU2VwYXJhdG9yOnV9PUpCZShyKTtTZShuLGg9PntsZXQgZj1oLmlkeD09PTA/IiI6aC5pZHg7dGhpcy5UUkFDRV9JTklUKGAke1ZzKGgpfSR7Zn1gLCgpPT57bGV0IGQ9dGhpcy5sb29rYWhlYWRTdHJhdGVneS5idWlsZExvb2thaGVhZEZvckFsdGVybmF0aW9uKHtwcm9kT2NjdXJyZW5jZTpoLmlkeCxydWxlOnIsbWF4TG9va2FoZWFkOmgubWF4TG9va2FoZWFkfHx0aGlzLm1heExvb2thaGVhZCxoYXNQcmVkaWNhdGVzOmguaGFzUHJlZGljYXRlcyxkeW5hbWljVG9rZW5zRW5hYmxlZDp0aGlzLmR5bmFtaWNUb2tlbnNFbmFibGVkfSkscD1kayh0aGlzLmZ1bGxSdWxlTmFtZVRvU2hvcnRbci5uYW1lXSwyNTYsaC5pZHgpO3RoaXMuc2V0TGFGdW5jQ2FjaGUocCxkKX0pfSksU2UoaSxoPT57dGhpcy5jb21wdXRlTG9va2FoZWFkRnVuYyhyLGguaWR4LDc2OCwiUmVwZXRpdGlvbiIsaC5tYXhMb29rYWhlYWQsVnMoaCkpfSksU2UoYSxoPT57dGhpcy5jb21wdXRlTG9va2FoZWFkRnVuYyhyLGguaWR4LDUxMiwiT3B0aW9uIixoLm1heExvb2thaGVhZCxWcyhoKSl9KSxTZShzLGg9Pnt0aGlzLmNvbXB1dGVMb29rYWhlYWRGdW5jKHIsaC5pZHgsMTAyNCwiUmVwZXRpdGlvbk1hbmRhdG9yeSIsaC5tYXhMb29rYWhlYWQsVnMoaCkpfSksU2UobCxoPT57dGhpcy5jb21wdXRlTG9va2FoZWFkRnVuYyhyLGguaWR4LDE1MzYsIlJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yIixoLm1heExvb2thaGVhZCxWcyhoKSl9KSxTZSh1LGg9Pnt0aGlzLmNvbXB1dGVMb29rYWhlYWRGdW5jKHIsaC5pZHgsMTI4MCwiUmVwZXRpdGlvbldpdGhTZXBhcmF0b3IiLGgubWF4TG9va2FoZWFkLFZzKGgpKX0pfSl9KX1jb21wdXRlTG9va2FoZWFkRnVuYyhlLHIsbixpLGEscyl7dGhpcy5UUkFDRV9JTklUKGAke3N9JHtyPT09MD8iIjpyfWAsKCk9PntsZXQgbD10aGlzLmxvb2thaGVhZFN0cmF0ZWd5LmJ1aWxkTG9va2FoZWFkRm9yT3B0aW9uYWwoe3Byb2RPY2N1cnJlbmNlOnIscnVsZTplLG1heExvb2thaGVhZDphfHx0aGlzLm1heExvb2thaGVhZCxkeW5hbWljVG9rZW5zRW5hYmxlZDp0aGlzLmR5bmFtaWNUb2tlbnNFbmFibGVkLHByb2RUeXBlOml9KSx1PWRrKHRoaXMuZnVsbFJ1bGVOYW1lVG9TaG9ydFtlLm5hbWVdLG4scik7dGhpcy5zZXRMYUZ1bmNDYWNoZSh1LGwpfSl9Z2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKGUscil7bGV0IG49dGhpcy5nZXRMYXN0RXhwbGljaXRSdWxlU2hvcnROYW1lKCk7cmV0dXJuIGRrKG4sZSxyKX1nZXRMYUZ1bmNGcm9tQ2FjaGUoZSl7cmV0dXJuIHRoaXMubG9va0FoZWFkRnVuY3NDYWNoZS5nZXQoZSl9c2V0TGFGdW5jQ2FjaGUoZSxyKXt0aGlzLmxvb2tBaGVhZEZ1bmNzQ2FjaGUuc2V0KGUscil9fSxHUj1jbGFzcyBleHRlbmRzIGNze3N0YXRpY3tvKHRoaXMsIkRzbE1ldGhvZHNDb2xsZWN0b3JWaXNpdG9yIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZHNsTWV0aG9kcz17b3B0aW9uOltdLGFsdGVybmF0aW9uOltdLHJlcGV0aXRpb246W10scmVwZXRpdGlvbldpdGhTZXBhcmF0b3I6W10scmVwZXRpdGlvbk1hbmRhdG9yeTpbXSxyZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcjpbXX19cmVzZXQoKXt0aGlzLmRzbE1ldGhvZHM9e29wdGlvbjpbXSxhbHRlcm5hdGlvbjpbXSxyZXBldGl0aW9uOltdLHJlcGV0aXRpb25XaXRoU2VwYXJhdG9yOltdLHJlcGV0aXRpb25NYW5kYXRvcnk6W10scmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3I6W119fXZpc2l0T3B0aW9uKGUpe3RoaXMuZHNsTWV0aG9kcy5vcHRpb24ucHVzaChlKX12aXNpdFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yKGUpe3RoaXMuZHNsTWV0aG9kcy5yZXBldGl0aW9uV2l0aFNlcGFyYXRvci5wdXNoKGUpfXZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeShlKXt0aGlzLmRzbE1ldGhvZHMucmVwZXRpdGlvbk1hbmRhdG9yeS5wdXNoKGUpfXZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IoZSl7dGhpcy5kc2xNZXRob2RzLnJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yLnB1c2goZSl9dmlzaXRSZXBldGl0aW9uKGUpe3RoaXMuZHNsTWV0aG9kcy5yZXBldGl0aW9uLnB1c2goZSl9dmlzaXRBbHRlcm5hdGlvbihlKXt0aGlzLmRzbE1ldGhvZHMuYWx0ZXJuYXRpb24ucHVzaChlKX19LG1rPW5ldyBHUjtvKEpCZSwiY29sbGVjdE1ldGhvZHMiKX0pO2Z1bmN0aW9uIFVSKHQsZSl7aXNOYU4odC5zdGFydE9mZnNldCk9PT0hMD8odC5zdGFydE9mZnNldD1lLnN0YXJ0T2Zmc2V0LHQuZW5kT2Zmc2V0PWUuZW5kT2Zmc2V0KTp0LmVuZE9mZnNldDxlLmVuZE9mZnNldCYmKHQuZW5kT2Zmc2V0PWUuZW5kT2Zmc2V0KX1mdW5jdGlvbiBIUih0LGUpe2lzTmFOKHQuc3RhcnRPZmZzZXQpPT09ITA/KHQuc3RhcnRPZmZzZXQ9ZS5zdGFydE9mZnNldCx0LnN0YXJ0Q29sdW1uPWUuc3RhcnRDb2x1bW4sdC5zdGFydExpbmU9ZS5zdGFydExpbmUsdC5lbmRPZmZzZXQ9ZS5lbmRPZmZzZXQsdC5lbmRDb2x1bW49ZS5lbmRDb2x1bW4sdC5lbmRMaW5lPWUuZW5kTGluZSk6dC5lbmRPZmZzZXQ8ZS5lbmRPZmZzZXQmJih0LmVuZE9mZnNldD1lLmVuZE9mZnNldCx0LmVuZENvbHVtbj1lLmVuZENvbHVtbix0LmVuZExpbmU9ZS5lbmRMaW5lKX1mdW5jdGlvbiBzb2UodCxlLHIpe3QuY2hpbGRyZW5bcl09PT12b2lkIDA/dC5jaGlsZHJlbltyXT1bZV06dC5jaGlsZHJlbltyXS5wdXNoKGUpfWZ1bmN0aW9uIG9vZSh0LGUscil7dC5jaGlsZHJlbltlXT09PXZvaWQgMD90LmNoaWxkcmVuW2VdPVtyXTp0LmNoaWxkcmVuW2VdLnB1c2gocil9dmFyIGxvZT1NKCgpPT57InVzZSBzdHJpY3QiO28oVVIsInNldE5vZGVMb2NhdGlvbk9ubHlPZmZzZXQiKTtvKEhSLCJzZXROb2RlTG9jYXRpb25GdWxsIik7byhzb2UsImFkZFRlcm1pbmFsVG9Dc3QiKTtvKG9vZSwiYWRkTm9uZVRlcm1pbmFsVG9Dc3QiKX0pO2Z1bmN0aW9uIFdSKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZUZlLHtlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMSx2YWx1ZTplfSl9dmFyIGVGZSxjb2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtlRmU9Im5hbWUiO28oV1IsImRlZmluZU5hbWVQcm9wIil9KTtmdW5jdGlvbiB0RmUodCxlKXtsZXQgcj1Hcih0KSxuPXIubGVuZ3RoO2ZvcihsZXQgaT0wO2k8bjtpKyspe2xldCBhPXJbaV0scz10W2FdLGw9cy5sZW5ndGg7Zm9yKGxldCB1PTA7dTxsO3UrKyl7bGV0IGg9c1t1XTtoLnRva2VuVHlwZUlkeD09PXZvaWQgMCYmdGhpc1toLm5hbWVdKGguY2hpbGRyZW4sZSl9fX1mdW5jdGlvbiB1b2UodCxlKXtsZXQgcj1vKGZ1bmN0aW9uKCl7fSwiZGVyaXZlZENvbnN0cnVjdG9yIik7V1Iocix0KyJCYXNlU2VtYW50aWNzIik7bGV0IG49e3Zpc2l0Om8oZnVuY3Rpb24oaSxhKXtpZihEdChpKSYmKGk9aVswXSksIWRyKGkpKXJldHVybiB0aGlzW2kubmFtZV0oaS5jaGlsZHJlbixhKX0sInZpc2l0IiksdmFsaWRhdGVWaXNpdG9yOm8oZnVuY3Rpb24oKXtsZXQgaT1yRmUodGhpcyxlKTtpZighY3IoaSkpe2xldCBhPVFlKGkscz0+cy5tc2cpO3Rocm93IEVycm9yKGBFcnJvcnMgRGV0ZWN0ZWQgaW4gQ1NUIFZpc2l0b3IgPCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfT46Cgkke2Euam9pbihgCgpgKS5yZXBsYWNlKC9cbi9nLGAKCWApfWApfX0sInZhbGlkYXRlVmlzaXRvciIpfTtyZXR1cm4gci5wcm90b3R5cGU9bixyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIuX1JVTEVfTkFNRVM9ZSxyfWZ1bmN0aW9uIGhvZSh0LGUscil7bGV0IG49byhmdW5jdGlvbigpe30sImRlcml2ZWRDb25zdHJ1Y3RvciIpO1dSKG4sdCsiQmFzZVNlbWFudGljc1dpdGhEZWZhdWx0cyIpO2xldCBpPU9iamVjdC5jcmVhdGUoci5wcm90b3R5cGUpO3JldHVybiBTZShlLGE9PntpW2FdPXRGZX0pLG4ucHJvdG90eXBlPWksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixufWZ1bmN0aW9uIHJGZSh0LGUpe3JldHVybiBuRmUodCxlKX1mdW5jdGlvbiBuRmUodCxlKXtsZXQgcj1ZcihlLGk9Pl9pKHRbaV0pPT09ITEpLG49UWUocixpPT4oe21zZzpgTWlzc2luZyB2aXNpdG9yIG1ldGhvZDogPCR7aX0+IG9uICR7dC5jb25zdHJ1Y3Rvci5uYW1lfSBDU1QgVmlzaXRvci5gLHR5cGU6WVIuTUlTU0lOR19NRVRIT0QsbWV0aG9kTmFtZTppfSkpO3JldHVybiBSYyhuKX12YXIgWVIsZm9lPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtjb2UoKTtvKHRGZSwiZGVmYXVsdFZpc2l0Iik7byh1b2UsImNyZWF0ZUJhc2VTZW1hbnRpY1Zpc2l0b3JDb25zdHJ1Y3RvciIpO28oaG9lLCJjcmVhdGVCYXNlVmlzaXRvckNvbnN0cnVjdG9yV2l0aERlZmF1bHRzIik7KGZ1bmN0aW9uKHQpe3RbdC5SRURVTkRBTlRfTUVUSE9EPTBdPSJSRURVTkRBTlRfTUVUSE9EIix0W3QuTUlTU0lOR19NRVRIT0Q9MV09Ik1JU1NJTkdfTUVUSE9EIn0pKFlSfHwoWVI9e30pKTtvKHJGZSwidmFsaWRhdGVWaXNpdG9yIik7byhuRmUsInZhbGlkYXRlTWlzc2luZ0NzdE1ldGhvZHMiKX0pO3ZhciBiayxkb2U9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijtsb2UoKTtIdCgpO2ZvZSgpO1VzKCk7Yms9Y2xhc3N7c3RhdGlje28odGhpcywiVHJlZUJ1aWxkZXIiKX1pbml0VHJlZUJ1aWxkZXIoZSl7aWYodGhpcy5DU1RfU1RBQ0s9W10sdGhpcy5vdXRwdXRDc3Q9ZS5vdXRwdXRDc3QsdGhpcy5ub2RlTG9jYXRpb25UcmFja2luZz1OdChlLCJub2RlTG9jYXRpb25UcmFja2luZyIpP2Uubm9kZUxvY2F0aW9uVHJhY2tpbmc6aHMubm9kZUxvY2F0aW9uVHJhY2tpbmcsIXRoaXMub3V0cHV0Q3N0KXRoaXMuY3N0SW52b2NhdGlvblN0YXRlVXBkYXRlPXRpLHRoaXMuY3N0RmluYWxseVN0YXRlVXBkYXRlPXRpLHRoaXMuY3N0UG9zdFRlcm1pbmFsPXRpLHRoaXMuY3N0UG9zdE5vblRlcm1pbmFsPXRpLHRoaXMuY3N0UG9zdFJ1bGU9dGk7ZWxzZSBpZigvZnVsbC9pLnRlc3QodGhpcy5ub2RlTG9jYXRpb25UcmFja2luZykpdGhpcy5yZWNvdmVyeUVuYWJsZWQ/KHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbVRva2VuPUhSLHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbU5vZGU9SFIsdGhpcy5jc3RQb3N0UnVsZT10aSx0aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb249dGhpcy5zZXRJbml0aWFsTm9kZUxvY2F0aW9uRnVsbFJlY292ZXJ5KToodGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tVG9rZW49dGksdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tTm9kZT10aSx0aGlzLmNzdFBvc3RSdWxlPXRoaXMuY3N0UG9zdFJ1bGVGdWxsLHRoaXMuc2V0SW5pdGlhbE5vZGVMb2NhdGlvbj10aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb25GdWxsUmVndWxhcik7ZWxzZSBpZigvb25seU9mZnNldC9pLnRlc3QodGhpcy5ub2RlTG9jYXRpb25UcmFja2luZykpdGhpcy5yZWNvdmVyeUVuYWJsZWQ/KHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbVRva2VuPVVSLHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbU5vZGU9VVIsdGhpcy5jc3RQb3N0UnVsZT10aSx0aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb249dGhpcy5zZXRJbml0aWFsTm9kZUxvY2F0aW9uT25seU9mZnNldFJlY292ZXJ5KToodGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tVG9rZW49dGksdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tTm9kZT10aSx0aGlzLmNzdFBvc3RSdWxlPXRoaXMuY3N0UG9zdFJ1bGVPbmx5T2Zmc2V0LHRoaXMuc2V0SW5pdGlhbE5vZGVMb2NhdGlvbj10aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb25Pbmx5T2Zmc2V0UmVndWxhcik7ZWxzZSBpZigvbm9uZS9pLnRlc3QodGhpcy5ub2RlTG9jYXRpb25UcmFja2luZykpdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tVG9rZW49dGksdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tTm9kZT10aSx0aGlzLmNzdFBvc3RSdWxlPXRpLHRoaXMuc2V0SW5pdGlhbE5vZGVMb2NhdGlvbj10aTtlbHNlIHRocm93IEVycm9yKGBJbnZhbGlkIDxub2RlTG9jYXRpb25UcmFja2luZz4gY29uZmlnIG9wdGlvbjogIiR7ZS5ub2RlTG9jYXRpb25UcmFja2luZ30iYCl9c2V0SW5pdGlhbE5vZGVMb2NhdGlvbk9ubHlPZmZzZXRSZWNvdmVyeShlKXtlLmxvY2F0aW9uPXtzdGFydE9mZnNldDpOYU4sZW5kT2Zmc2V0Ok5hTn19c2V0SW5pdGlhbE5vZGVMb2NhdGlvbk9ubHlPZmZzZXRSZWd1bGFyKGUpe2UubG9jYXRpb249e3N0YXJ0T2Zmc2V0OnRoaXMuTEEoMSkuc3RhcnRPZmZzZXQsZW5kT2Zmc2V0Ok5hTn19c2V0SW5pdGlhbE5vZGVMb2NhdGlvbkZ1bGxSZWNvdmVyeShlKXtlLmxvY2F0aW9uPXtzdGFydE9mZnNldDpOYU4sc3RhcnRMaW5lOk5hTixzdGFydENvbHVtbjpOYU4sZW5kT2Zmc2V0Ok5hTixlbmRMaW5lOk5hTixlbmRDb2x1bW46TmFOfX1zZXRJbml0aWFsTm9kZUxvY2F0aW9uRnVsbFJlZ3VsYXIoZSl7bGV0IHI9dGhpcy5MQSgxKTtlLmxvY2F0aW9uPXtzdGFydE9mZnNldDpyLnN0YXJ0T2Zmc2V0LHN0YXJ0TGluZTpyLnN0YXJ0TGluZSxzdGFydENvbHVtbjpyLnN0YXJ0Q29sdW1uLGVuZE9mZnNldDpOYU4sZW5kTGluZTpOYU4sZW5kQ29sdW1uOk5hTn19Y3N0SW52b2NhdGlvblN0YXRlVXBkYXRlKGUpe2xldCByPXtuYW1lOmUsY2hpbGRyZW46T2JqZWN0LmNyZWF0ZShudWxsKX07dGhpcy5zZXRJbml0aWFsTm9kZUxvY2F0aW9uKHIpLHRoaXMuQ1NUX1NUQUNLLnB1c2gocil9Y3N0RmluYWxseVN0YXRlVXBkYXRlKCl7dGhpcy5DU1RfU1RBQ0sucG9wKCl9Y3N0UG9zdFJ1bGVGdWxsKGUpe2xldCByPXRoaXMuTEEoMCksbj1lLmxvY2F0aW9uO24uc3RhcnRPZmZzZXQ8PXIuc3RhcnRPZmZzZXQ/KG4uZW5kT2Zmc2V0PXIuZW5kT2Zmc2V0LG4uZW5kTGluZT1yLmVuZExpbmUsbi5lbmRDb2x1bW49ci5lbmRDb2x1bW4pOihuLnN0YXJ0T2Zmc2V0PU5hTixuLnN0YXJ0TGluZT1OYU4sbi5zdGFydENvbHVtbj1OYU4pfWNzdFBvc3RSdWxlT25seU9mZnNldChlKXtsZXQgcj10aGlzLkxBKDApLG49ZS5sb2NhdGlvbjtuLnN0YXJ0T2Zmc2V0PD1yLnN0YXJ0T2Zmc2V0P24uZW5kT2Zmc2V0PXIuZW5kT2Zmc2V0Om4uc3RhcnRPZmZzZXQ9TmFOfWNzdFBvc3RUZXJtaW5hbChlLHIpe2xldCBuPXRoaXMuQ1NUX1NUQUNLW3RoaXMuQ1NUX1NUQUNLLmxlbmd0aC0xXTtzb2UobixyLGUpLHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbVRva2VuKG4ubG9jYXRpb24scil9Y3N0UG9zdE5vblRlcm1pbmFsKGUscil7bGV0IG49dGhpcy5DU1RfU1RBQ0tbdGhpcy5DU1RfU1RBQ0subGVuZ3RoLTFdO29vZShuLHIsZSksdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tTm9kZShuLmxvY2F0aW9uLGUubG9jYXRpb24pfWdldEJhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3IoKXtpZihkcih0aGlzLmJhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3IpKXtsZXQgZT11b2UodGhpcy5jbGFzc05hbWUsR3IodGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZSkpO3JldHVybiB0aGlzLmJhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3I9ZSxlfXJldHVybiB0aGlzLmJhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3J9Z2V0QmFzZUNzdFZpc2l0b3JDb25zdHJ1Y3RvcldpdGhEZWZhdWx0cygpe2lmKGRyKHRoaXMuYmFzZUNzdFZpc2l0b3JXaXRoRGVmYXVsdHNDb25zdHJ1Y3Rvcikpe2xldCBlPWhvZSh0aGlzLmNsYXNzTmFtZSxHcih0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlKSx0aGlzLmdldEJhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3IoKSk7cmV0dXJuIHRoaXMuYmFzZUNzdFZpc2l0b3JXaXRoRGVmYXVsdHNDb25zdHJ1Y3Rvcj1lLGV9cmV0dXJuIHRoaXMuYmFzZUNzdFZpc2l0b3JXaXRoRGVmYXVsdHNDb25zdHJ1Y3Rvcn1nZXRMYXN0RXhwbGljaXRSdWxlU2hvcnROYW1lKCl7bGV0IGU9dGhpcy5SVUxFX1NUQUNLO3JldHVybiBlW2UubGVuZ3RoLTFdfWdldFByZXZpb3VzRXhwbGljaXRSdWxlU2hvcnROYW1lKCl7bGV0IGU9dGhpcy5SVUxFX1NUQUNLO3JldHVybiBlW2UubGVuZ3RoLTJdfWdldExhc3RFeHBsaWNpdFJ1bGVPY2N1cnJlbmNlSW5kZXgoKXtsZXQgZT10aGlzLlJVTEVfT0NDVVJSRU5DRV9TVEFDSztyZXR1cm4gZVtlLmxlbmd0aC0xXX19fSk7dmFyIHdrLHBvZT1NKCgpPT57InVzZSBzdHJpY3QiO1VzKCk7d2s9Y2xhc3N7c3RhdGlje28odGhpcywiTGV4ZXJBZGFwdGVyIil9aW5pdExleGVyQWRhcHRlcigpe3RoaXMudG9rVmVjdG9yPVtdLHRoaXMudG9rVmVjdG9yTGVuZ3RoPTAsdGhpcy5jdXJySWR4PS0xfXNldCBpbnB1dChlKXtpZih0aGlzLnNlbGZBbmFseXNpc0RvbmUhPT0hMCl0aHJvdyBFcnJvcigiTWlzc2luZyA8cGVyZm9ybVNlbGZBbmFseXNpcz4gaW52b2NhdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBQYXJzZXIncyBjb25zdHJ1Y3Rvci4iKTt0aGlzLnJlc2V0KCksdGhpcy50b2tWZWN0b3I9ZSx0aGlzLnRva1ZlY3Rvckxlbmd0aD1lLmxlbmd0aH1nZXQgaW5wdXQoKXtyZXR1cm4gdGhpcy50b2tWZWN0b3J9U0tJUF9UT0tFTigpe3JldHVybiB0aGlzLmN1cnJJZHg8PXRoaXMudG9rVmVjdG9yLmxlbmd0aC0yPyh0aGlzLmNvbnN1bWVUb2tlbigpLHRoaXMuTEEoMSkpOndnfUxBKGUpe2xldCByPXRoaXMuY3VycklkeCtlO3JldHVybiByPDB8fHRoaXMudG9rVmVjdG9yTGVuZ3RoPD1yP3dnOnRoaXMudG9rVmVjdG9yW3JdfWNvbnN1bWVUb2tlbigpe3RoaXMuY3VycklkeCsrfWV4cG9ydExleGVyU3RhdGUoKXtyZXR1cm4gdGhpcy5jdXJySWR4fWltcG9ydExleGVyU3RhdGUoZSl7dGhpcy5jdXJySWR4PWV9cmVzZXRMZXhlclN0YXRlKCl7dGhpcy5jdXJySWR4PS0xfW1vdmVUb1Rlcm1pbmF0ZWRTdGF0ZSgpe3RoaXMuY3VycklkeD10aGlzLnRva1ZlY3Rvci5sZW5ndGgtMX1nZXRMZXhlclBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuZXhwb3J0TGV4ZXJTdGF0ZSgpfX19KTt2YXIgVGssbW9lPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtiZygpO1VzKCk7cGcoKTtfMigpO3VzKCk7VGs9Y2xhc3N7c3RhdGlje28odGhpcywiUmVjb2duaXplckFwaSIpfUFDVElPTihlKXtyZXR1cm4gZS5jYWxsKHRoaXMpfWNvbnN1bWUoZSxyLG4pe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbChyLGUsbil9c3VicnVsZShlLHIsbil7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKHIsZSxuKX1vcHRpb24oZSxyKXtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChyLGUpfW9yKGUscil7cmV0dXJuIHRoaXMub3JJbnRlcm5hbChyLGUpfW1hbnkoZSxyKXtyZXR1cm4gdGhpcy5tYW55SW50ZXJuYWwoZSxyKX1hdExlYXN0T25lKGUscil7cmV0dXJuIHRoaXMuYXRMZWFzdE9uZUludGVybmFsKGUscil9Q09OU1VNRShlLHIpe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbChlLDAscil9Q09OU1VNRTEoZSxyKXtyZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWwoZSwxLHIpfUNPTlNVTUUyKGUscil7cmV0dXJuIHRoaXMuY29uc3VtZUludGVybmFsKGUsMixyKX1DT05TVU1FMyhlLHIpe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbChlLDMscil9Q09OU1VNRTQoZSxyKXtyZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWwoZSw0LHIpfUNPTlNVTUU1KGUscil7cmV0dXJuIHRoaXMuY29uc3VtZUludGVybmFsKGUsNSxyKX1DT05TVU1FNihlLHIpe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbChlLDYscil9Q09OU1VNRTcoZSxyKXtyZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWwoZSw3LHIpfUNPTlNVTUU4KGUscil7cmV0dXJuIHRoaXMuY29uc3VtZUludGVybmFsKGUsOCxyKX1DT05TVU1FOShlLHIpe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbChlLDkscil9U1VCUlVMRShlLHIpe3JldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChlLDAscil9U1VCUlVMRTEoZSxyKXtyZXR1cm4gdGhpcy5zdWJydWxlSW50ZXJuYWwoZSwxLHIpfVNVQlJVTEUyKGUscil7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKGUsMixyKX1TVUJSVUxFMyhlLHIpe3JldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChlLDMscil9U1VCUlVMRTQoZSxyKXtyZXR1cm4gdGhpcy5zdWJydWxlSW50ZXJuYWwoZSw0LHIpfVNVQlJVTEU1KGUscil7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKGUsNSxyKX1TVUJSVUxFNihlLHIpe3JldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChlLDYscil9U1VCUlVMRTcoZSxyKXtyZXR1cm4gdGhpcy5zdWJydWxlSW50ZXJuYWwoZSw3LHIpfVNVQlJVTEU4KGUscil7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKGUsOCxyKX1TVUJSVUxFOShlLHIpe3JldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChlLDkscil9T1BUSU9OKGUpe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGUsMCl9T1BUSU9OMShlKXtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChlLDEpfU9QVElPTjIoZSl7cmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWwoZSwyKX1PUFRJT04zKGUpe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGUsMyl9T1BUSU9ONChlKXtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChlLDQpfU9QVElPTjUoZSl7cmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWwoZSw1KX1PUFRJT042KGUpe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGUsNil9T1BUSU9ONyhlKXtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChlLDcpfU9QVElPTjgoZSl7cmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWwoZSw4KX1PUFRJT045KGUpe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGUsOSl9T1IoZSl7cmV0dXJuIHRoaXMub3JJbnRlcm5hbChlLDApfU9SMShlKXtyZXR1cm4gdGhpcy5vckludGVybmFsKGUsMSl9T1IyKGUpe3JldHVybiB0aGlzLm9ySW50ZXJuYWwoZSwyKX1PUjMoZSl7cmV0dXJuIHRoaXMub3JJbnRlcm5hbChlLDMpfU9SNChlKXtyZXR1cm4gdGhpcy5vckludGVybmFsKGUsNCl9T1I1KGUpe3JldHVybiB0aGlzLm9ySW50ZXJuYWwoZSw1KX1PUjYoZSl7cmV0dXJuIHRoaXMub3JJbnRlcm5hbChlLDYpfU9SNyhlKXtyZXR1cm4gdGhpcy5vckludGVybmFsKGUsNyl9T1I4KGUpe3JldHVybiB0aGlzLm9ySW50ZXJuYWwoZSw4KX1PUjkoZSl7cmV0dXJuIHRoaXMub3JJbnRlcm5hbChlLDkpfU1BTlkoZSl7dGhpcy5tYW55SW50ZXJuYWwoMCxlKX1NQU5ZMShlKXt0aGlzLm1hbnlJbnRlcm5hbCgxLGUpfU1BTlkyKGUpe3RoaXMubWFueUludGVybmFsKDIsZSl9TUFOWTMoZSl7dGhpcy5tYW55SW50ZXJuYWwoMyxlKX1NQU5ZNChlKXt0aGlzLm1hbnlJbnRlcm5hbCg0LGUpfU1BTlk1KGUpe3RoaXMubWFueUludGVybmFsKDUsZSl9TUFOWTYoZSl7dGhpcy5tYW55SW50ZXJuYWwoNixlKX1NQU5ZNyhlKXt0aGlzLm1hbnlJbnRlcm5hbCg3LGUpfU1BTlk4KGUpe3RoaXMubWFueUludGVybmFsKDgsZSl9TUFOWTkoZSl7dGhpcy5tYW55SW50ZXJuYWwoOSxlKX1NQU5ZX1NFUChlKXt0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDAsZSl9TUFOWV9TRVAxKGUpe3RoaXMubWFueVNlcEZpcnN0SW50ZXJuYWwoMSxlKX1NQU5ZX1NFUDIoZSl7dGhpcy5tYW55U2VwRmlyc3RJbnRlcm5hbCgyLGUpfU1BTllfU0VQMyhlKXt0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDMsZSl9TUFOWV9TRVA0KGUpe3RoaXMubWFueVNlcEZpcnN0SW50ZXJuYWwoNCxlKX1NQU5ZX1NFUDUoZSl7dGhpcy5tYW55U2VwRmlyc3RJbnRlcm5hbCg1LGUpfU1BTllfU0VQNihlKXt0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDYsZSl9TUFOWV9TRVA3KGUpe3RoaXMubWFueVNlcEZpcnN0SW50ZXJuYWwoNyxlKX1NQU5ZX1NFUDgoZSl7dGhpcy5tYW55U2VwRmlyc3RJbnRlcm5hbCg4LGUpfU1BTllfU0VQOShlKXt0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDksZSl9QVRfTEVBU1RfT05FKGUpe3RoaXMuYXRMZWFzdE9uZUludGVybmFsKDAsZSl9QVRfTEVBU1RfT05FMShlKXtyZXR1cm4gdGhpcy5hdExlYXN0T25lSW50ZXJuYWwoMSxlKX1BVF9MRUFTVF9PTkUyKGUpe3RoaXMuYXRMZWFzdE9uZUludGVybmFsKDIsZSl9QVRfTEVBU1RfT05FMyhlKXt0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCgzLGUpfUFUX0xFQVNUX09ORTQoZSl7dGhpcy5hdExlYXN0T25lSW50ZXJuYWwoNCxlKX1BVF9MRUFTVF9PTkU1KGUpe3RoaXMuYXRMZWFzdE9uZUludGVybmFsKDUsZSl9QVRfTEVBU1RfT05FNihlKXt0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCg2LGUpfUFUX0xFQVNUX09ORTcoZSl7dGhpcy5hdExlYXN0T25lSW50ZXJuYWwoNyxlKX1BVF9MRUFTVF9PTkU4KGUpe3RoaXMuYXRMZWFzdE9uZUludGVybmFsKDgsZSl9QVRfTEVBU1RfT05FOShlKXt0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCg5LGUpfUFUX0xFQVNUX09ORV9TRVAoZSl7dGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbCgwLGUpfUFUX0xFQVNUX09ORV9TRVAxKGUpe3RoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwoMSxlKX1BVF9MRUFTVF9PTkVfU0VQMihlKXt0aGlzLmF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsKDIsZSl9QVRfTEVBU1RfT05FX1NFUDMoZSl7dGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbCgzLGUpfUFUX0xFQVNUX09ORV9TRVA0KGUpe3RoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwoNCxlKX1BVF9MRUFTVF9PTkVfU0VQNShlKXt0aGlzLmF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsKDUsZSl9QVRfTEVBU1RfT05FX1NFUDYoZSl7dGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbCg2LGUpfUFUX0xFQVNUX09ORV9TRVA3KGUpe3RoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwoNyxlKX1BVF9MRUFTVF9PTkVfU0VQOChlKXt0aGlzLmF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsKDgsZSl9QVRfTEVBU1RfT05FX1NFUDkoZSl7dGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbCg5LGUpfVJVTEUoZSxyLG49VGcpe2lmKFluKHRoaXMuZGVmaW5lZFJ1bGVzTmFtZXMsZSkpe2xldCBzPXttZXNzYWdlOlVsLmJ1aWxkRHVwbGljYXRlUnVsZU5hbWVFcnJvcih7dG9wTGV2ZWxSdWxlOmUsZ3JhbW1hck5hbWU6dGhpcy5jbGFzc05hbWV9KSx0eXBlOlVpLkRVUExJQ0FURV9SVUxFX05BTUUscnVsZU5hbWU6ZX07dGhpcy5kZWZpbml0aW9uRXJyb3JzLnB1c2gocyl9dGhpcy5kZWZpbmVkUnVsZXNOYW1lcy5wdXNoKGUpO2xldCBpPXRoaXMuZGVmaW5lUnVsZShlLHIsbik7cmV0dXJuIHRoaXNbZV09aSxpfU9WRVJSSURFX1JVTEUoZSxyLG49VGcpe2xldCBpPXFzZShlLHRoaXMuZGVmaW5lZFJ1bGVzTmFtZXMsdGhpcy5jbGFzc05hbWUpO3RoaXMuZGVmaW5pdGlvbkVycm9ycz10aGlzLmRlZmluaXRpb25FcnJvcnMuY29uY2F0KGkpO2xldCBhPXRoaXMuZGVmaW5lUnVsZShlLHIsbik7cmV0dXJuIHRoaXNbZV09YSxhfUJBQ0tUUkFDSyhlLHIpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaXNCYWNrVHJhY2tpbmdTdGFjay5wdXNoKDEpO2xldCBuPXRoaXMuc2F2ZVJlY29nU3RhdGUoKTt0cnl7cmV0dXJuIGUuYXBwbHkodGhpcyxyKSwhMH1jYXRjaChpKXtpZihmZihpKSlyZXR1cm4hMTt0aHJvdyBpfWZpbmFsbHl7dGhpcy5yZWxvYWRSZWNvZ1N0YXRlKG4pLHRoaXMuaXNCYWNrVHJhY2tpbmdTdGFjay5wb3AoKX19fWdldEdBc3RQcm9kdWN0aW9ucygpe3JldHVybiB0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlfWdldFNlcmlhbGl6ZWRHYXN0UHJvZHVjdGlvbnMoKXtyZXR1cm4gWVQoYnIodGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZSkpfX19KTt2YXIga2ssZ29lPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtwaygpO2JnKCk7dmcoKTtTMigpO1VzKCk7RlIoKTtwMCgpO2YwKCk7a2s9Y2xhc3N7c3RhdGlje28odGhpcywiUmVjb2duaXplckVuZ2luZSIpfWluaXRSZWNvZ25pemVyRW5naW5lKGUscil7aWYodGhpcy5jbGFzc05hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLHRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbD17fSx0aGlzLmZ1bGxSdWxlTmFtZVRvU2hvcnQ9e30sdGhpcy5ydWxlU2hvcnROYW1lSWR4PTI1Nix0aGlzLnRva2VuTWF0Y2hlcj1kZyx0aGlzLnN1YnJ1bGVJZHg9MCx0aGlzLmRlZmluZWRSdWxlc05hbWVzPVtdLHRoaXMudG9rZW5zTWFwPXt9LHRoaXMuaXNCYWNrVHJhY2tpbmdTdGFjaz1bXSx0aGlzLlJVTEVfU1RBQ0s9W10sdGhpcy5SVUxFX09DQ1VSUkVOQ0VfU1RBQ0s9W10sdGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZT17fSxOdChyLCJzZXJpYWxpemVkR3JhbW1hciIpKXRocm93IEVycm9yKGBUaGUgUGFyc2VyJ3MgY29uZmlndXJhdGlvbiBjYW4gbm8gbG9uZ2VyIGNvbnRhaW4gYSA8c2VyaWFsaXplZEdyYW1tYXI+IHByb3BlcnR5LgoJU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9jaGFuZ2VzL0JSRUFLSU5HX0NIQU5HRVMuaHRtbCNfNi0wLTAKCUZvciBGdXJ0aGVyIGRldGFpbHMuYCk7aWYoRHQoZSkpe2lmKGNyKGUpKXRocm93IEVycm9yKGBBIFRva2VuIFZvY2FidWxhcnkgY2Fubm90IGJlIGVtcHR5LgoJTm90ZSB0aGF0IHRoZSBmaXJzdCBhcmd1bWVudCBmb3IgdGhlIHBhcnNlciBjb25zdHJ1Y3RvcgoJaXMgbm8gbG9uZ2VyIGEgVG9rZW4gdmVjdG9yIChzaW5jZSB2NC4wKS5gKTtpZih0eXBlb2YgZVswXS5zdGFydE9mZnNldD09Im51bWJlciIpdGhyb3cgRXJyb3IoYFRoZSBQYXJzZXIgY29uc3RydWN0b3Igbm8gbG9uZ2VyIGFjY2VwdHMgYSB0b2tlbiB2ZWN0b3IgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LgoJU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9jaGFuZ2VzL0JSRUFLSU5HX0NIQU5HRVMuaHRtbCNfNC0wLTAKCUZvciBGdXJ0aGVyIGRldGFpbHMuYCl9aWYoRHQoZSkpdGhpcy50b2tlbnNNYXA9cXIoZSwoYSxzKT0+KGFbcy5uYW1lXT1zLGEpLHt9KTtlbHNlIGlmKE50KGUsIm1vZGVzIikmJnphKFdyKGJyKGUubW9kZXMpKSxFc2UpKXtsZXQgYT1XcihicihlLm1vZGVzKSkscz1YbShhKTt0aGlzLnRva2Vuc01hcD1xcihzLChsLHUpPT4obFt1Lm5hbWVdPXUsbCkse30pfWVsc2UgaWYoeG4oZSkpdGhpcy50b2tlbnNNYXA9cm4oZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIjx0b2tlbnNEaWN0aW9uYXJ5PiBhcmd1bWVudCBtdXN0IGJlIEFuIEFycmF5IG9mIFRva2VuIGNvbnN0cnVjdG9ycywgQSBkaWN0aW9uYXJ5IG9mIFRva2VuIGNvbnN0cnVjdG9ycyBvciBhbiBJTXVsdGlNb2RlTGV4ZXJEZWZpbml0aW9uIik7dGhpcy50b2tlbnNNYXAuRU9GPW1vO2xldCBuPU50KGUsIm1vZGVzIik/V3IoYnIoZS5tb2RlcykpOmJyKGUpLGk9emEobixhPT5jcihhLmNhdGVnb3J5TWF0Y2hlcykpO3RoaXMudG9rZW5NYXRjaGVyPWk/ZGc6V3UsWXUoYnIodGhpcy50b2tlbnNNYXApKX1kZWZpbmVSdWxlKGUscixuKXtpZih0aGlzLnNlbGZBbmFseXNpc0RvbmUpdGhyb3cgRXJyb3IoYEdyYW1tYXIgcnVsZSA8JHtlfT4gbWF5IG5vdCBiZSBkZWZpbmVkIGFmdGVyIHRoZSAncGVyZm9ybVNlbGZBbmFseXNpcycgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZCcKTWFrZSBzdXJlIHRoYXQgYWxsIGdyYW1tYXIgcnVsZSBkZWZpbml0aW9ucyBhcmUgZG9uZSBiZWZvcmUgJ3BlcmZvcm1TZWxmQW5hbHlzaXMnIGlzIGNhbGxlZC5gKTtsZXQgaT1OdChuLCJyZXN5bmNFbmFibGVkIik/bi5yZXN5bmNFbmFibGVkOlRnLnJlc3luY0VuYWJsZWQsYT1OdChuLCJyZWNvdmVyeVZhbHVlRnVuYyIpP24ucmVjb3ZlcnlWYWx1ZUZ1bmM6VGcucmVjb3ZlcnlWYWx1ZUZ1bmMscz10aGlzLnJ1bGVTaG9ydE5hbWVJZHg8PDEyO3RoaXMucnVsZVNob3J0TmFtZUlkeCsrLHRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbFtzXT1lLHRoaXMuZnVsbFJ1bGVOYW1lVG9TaG9ydFtlXT1zO2xldCBsO3JldHVybiB0aGlzLm91dHB1dENzdD09PSEwP2w9byhmdW5jdGlvbiguLi5mKXt0cnl7dGhpcy5ydWxlSW52b2NhdGlvblN0YXRlVXBkYXRlKHMsZSx0aGlzLnN1YnJ1bGVJZHgpLHIuYXBwbHkodGhpcyxmKTtsZXQgZD10aGlzLkNTVF9TVEFDS1t0aGlzLkNTVF9TVEFDSy5sZW5ndGgtMV07cmV0dXJuIHRoaXMuY3N0UG9zdFJ1bGUoZCksZH1jYXRjaChkKXtyZXR1cm4gdGhpcy5pbnZva2VSdWxlQ2F0Y2goZCxpLGEpfWZpbmFsbHl7dGhpcy5ydWxlRmluYWxseVN0YXRlVXBkYXRlKCl9fSwiaW52b2tlUnVsZVdpdGhUcnkiKTpsPW8oZnVuY3Rpb24oLi4uZil7dHJ5e3JldHVybiB0aGlzLnJ1bGVJbnZvY2F0aW9uU3RhdGVVcGRhdGUocyxlLHRoaXMuc3VicnVsZUlkeCksci5hcHBseSh0aGlzLGYpfWNhdGNoKGQpe3JldHVybiB0aGlzLmludm9rZVJ1bGVDYXRjaChkLGksYSl9ZmluYWxseXt0aGlzLnJ1bGVGaW5hbGx5U3RhdGVVcGRhdGUoKX19LCJpbnZva2VSdWxlV2l0aFRyeUNzdCIpLE9iamVjdC5hc3NpZ24obCx7cnVsZU5hbWU6ZSxvcmlnaW5hbEdyYW1tYXJBY3Rpb246cn0pfWludm9rZVJ1bGVDYXRjaChlLHIsbil7bGV0IGk9dGhpcy5SVUxFX1NUQUNLLmxlbmd0aD09PTEsYT1yJiYhdGhpcy5pc0JhY2tUcmFja2luZygpJiZ0aGlzLnJlY292ZXJ5RW5hYmxlZDtpZihmZihlKSl7bGV0IHM9ZTtpZihhKXtsZXQgbD10aGlzLmZpbmRSZVN5bmNUb2tlblR5cGUoKTtpZih0aGlzLmlzSW5DdXJyZW50UnVsZVJlU3luY1NldChsKSlpZihzLnJlc3luY2VkVG9rZW5zPXRoaXMucmVTeW5jVG8obCksdGhpcy5vdXRwdXRDc3Qpe2xldCB1PXRoaXMuQ1NUX1NUQUNLW3RoaXMuQ1NUX1NUQUNLLmxlbmd0aC0xXTtyZXR1cm4gdS5yZWNvdmVyZWROb2RlPSEwLHV9ZWxzZSByZXR1cm4gbihlKTtlbHNle2lmKHRoaXMub3V0cHV0Q3N0KXtsZXQgdT10aGlzLkNTVF9TVEFDS1t0aGlzLkNTVF9TVEFDSy5sZW5ndGgtMV07dS5yZWNvdmVyZWROb2RlPSEwLHMucGFydGlhbENzdFJlc3VsdD11fXRocm93IHN9fWVsc2V7aWYoaSlyZXR1cm4gdGhpcy5tb3ZlVG9UZXJtaW5hdGVkU3RhdGUoKSxuKGUpO3Rocm93IHN9fWVsc2UgdGhyb3cgZX1vcHRpb25JbnRlcm5hbChlLHIpe2xldCBuPXRoaXMuZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKDUxMixyKTtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbExvZ2ljKGUscixuKX1vcHRpb25JbnRlcm5hbExvZ2ljKGUscixuKXtsZXQgaT10aGlzLmdldExhRnVuY0Zyb21DYWNoZShuKSxhO2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXthPWUuREVGO2xldCBzPWUuR0FURTtpZihzIT09dm9pZCAwKXtsZXQgbD1pO2k9bygoKT0+cy5jYWxsKHRoaXMpJiZsLmNhbGwodGhpcyksImxvb2tBaGVhZEZ1bmMiKX19ZWxzZSBhPWU7aWYoaS5jYWxsKHRoaXMpPT09ITApcmV0dXJuIGEuY2FsbCh0aGlzKX1hdExlYXN0T25lSW50ZXJuYWwoZSxyKXtsZXQgbj10aGlzLmdldEtleUZvckF1dG9tYXRpY0xvb2thaGVhZCgxMDI0LGUpO3JldHVybiB0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbExvZ2ljKGUscixuKX1hdExlYXN0T25lSW50ZXJuYWxMb2dpYyhlLHIsbil7bGV0IGk9dGhpcy5nZXRMYUZ1bmNGcm9tQ2FjaGUobiksYTtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil7YT1yLkRFRjtsZXQgcz1yLkdBVEU7aWYocyE9PXZvaWQgMCl7bGV0IGw9aTtpPW8oKCk9PnMuY2FsbCh0aGlzKSYmbC5jYWxsKHRoaXMpLCJsb29rQWhlYWRGdW5jIil9fWVsc2UgYT1yO2lmKGkuY2FsbCh0aGlzKT09PSEwKXtsZXQgcz10aGlzLmRvU2luZ2xlUmVwZXRpdGlvbihhKTtmb3IoO2kuY2FsbCh0aGlzKT09PSEwJiZzPT09ITA7KXM9dGhpcy5kb1NpbmdsZVJlcGV0aXRpb24oYSl9ZWxzZSB0aHJvdyB0aGlzLnJhaXNlRWFybHlFeGl0RXhjZXB0aW9uKGUsWG4uUkVQRVRJVElPTl9NQU5EQVRPUlksci5FUlJfTVNHKTt0aGlzLmF0dGVtcHRJblJlcGV0aXRpb25SZWNvdmVyeSh0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCxbZSxyXSxpLDEwMjQsZSxhayl9YXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwoZSxyKXtsZXQgbj10aGlzLmdldEtleUZvckF1dG9tYXRpY0xvb2thaGVhZCgxNTM2LGUpO3RoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWxMb2dpYyhlLHIsbil9YXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWxMb2dpYyhlLHIsbil7bGV0IGk9ci5ERUYsYT1yLlNFUDtpZih0aGlzLmdldExhRnVuY0Zyb21DYWNoZShuKS5jYWxsKHRoaXMpPT09ITApe2kuY2FsbCh0aGlzKTtsZXQgbD1vKCgpPT50aGlzLnRva2VuTWF0Y2hlcih0aGlzLkxBKDEpLGEpLCJzZXBhcmF0b3JMb29rQWhlYWRGdW5jIik7Zm9yKDt0aGlzLnRva2VuTWF0Y2hlcih0aGlzLkxBKDEpLGEpPT09ITA7KXRoaXMuQ09OU1VNRShhKSxpLmNhbGwodGhpcyk7dGhpcy5hdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnkodGhpcy5yZXBldGl0aW9uU2VwU2Vjb25kSW50ZXJuYWwsW2UsYSxsLGksRTJdLGwsMTUzNixlLEUyKX1lbHNlIHRocm93IHRoaXMucmFpc2VFYXJseUV4aXRFeGNlcHRpb24oZSxYbi5SRVBFVElUSU9OX01BTkRBVE9SWV9XSVRIX1NFUEFSQVRPUixyLkVSUl9NU0cpfW1hbnlJbnRlcm5hbChlLHIpe2xldCBuPXRoaXMuZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKDc2OCxlKTtyZXR1cm4gdGhpcy5tYW55SW50ZXJuYWxMb2dpYyhlLHIsbil9bWFueUludGVybmFsTG9naWMoZSxyLG4pe2xldCBpPXRoaXMuZ2V0TGFGdW5jRnJvbUNhY2hlKG4pLGE7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpe2E9ci5ERUY7bGV0IGw9ci5HQVRFO2lmKGwhPT12b2lkIDApe2xldCB1PWk7aT1vKCgpPT5sLmNhbGwodGhpcykmJnUuY2FsbCh0aGlzKSwibG9va2FoZWFkRnVuY3Rpb24iKX19ZWxzZSBhPXI7bGV0IHM9ITA7Zm9yKDtpLmNhbGwodGhpcyk9PT0hMCYmcz09PSEwOylzPXRoaXMuZG9TaW5nbGVSZXBldGl0aW9uKGEpO3RoaXMuYXR0ZW1wdEluUmVwZXRpdGlvblJlY292ZXJ5KHRoaXMubWFueUludGVybmFsLFtlLHJdLGksNzY4LGUsaWsscyl9bWFueVNlcEZpcnN0SW50ZXJuYWwoZSxyKXtsZXQgbj10aGlzLmdldEtleUZvckF1dG9tYXRpY0xvb2thaGVhZCgxMjgwLGUpO3RoaXMubWFueVNlcEZpcnN0SW50ZXJuYWxMb2dpYyhlLHIsbil9bWFueVNlcEZpcnN0SW50ZXJuYWxMb2dpYyhlLHIsbil7bGV0IGk9ci5ERUYsYT1yLlNFUDtpZih0aGlzLmdldExhRnVuY0Zyb21DYWNoZShuKS5jYWxsKHRoaXMpPT09ITApe2kuY2FsbCh0aGlzKTtsZXQgbD1vKCgpPT50aGlzLnRva2VuTWF0Y2hlcih0aGlzLkxBKDEpLGEpLCJzZXBhcmF0b3JMb29rQWhlYWRGdW5jIik7Zm9yKDt0aGlzLnRva2VuTWF0Y2hlcih0aGlzLkxBKDEpLGEpPT09ITA7KXRoaXMuQ09OU1VNRShhKSxpLmNhbGwodGhpcyk7dGhpcy5hdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnkodGhpcy5yZXBldGl0aW9uU2VwU2Vjb25kSW50ZXJuYWwsW2UsYSxsLGksazJdLGwsMTI4MCxlLGsyKX19cmVwZXRpdGlvblNlcFNlY29uZEludGVybmFsKGUscixuLGksYSl7Zm9yKDtuKCk7KXRoaXMuQ09OU1VNRShyKSxpLmNhbGwodGhpcyk7dGhpcy5hdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnkodGhpcy5yZXBldGl0aW9uU2VwU2Vjb25kSW50ZXJuYWwsW2UscixuLGksYV0sbiwxNTM2LGUsYSl9ZG9TaW5nbGVSZXBldGl0aW9uKGUpe2xldCByPXRoaXMuZ2V0TGV4ZXJQb3NpdGlvbigpO3JldHVybiBlLmNhbGwodGhpcyksdGhpcy5nZXRMZXhlclBvc2l0aW9uKCk+cn1vckludGVybmFsKGUscil7bGV0IG49dGhpcy5nZXRLZXlGb3JBdXRvbWF0aWNMb29rYWhlYWQoMjU2LHIpLGk9RHQoZSk/ZTplLkRFRixzPXRoaXMuZ2V0TGFGdW5jRnJvbUNhY2hlKG4pLmNhbGwodGhpcyxpKTtpZihzIT09dm9pZCAwKXJldHVybiBpW3NdLkFMVC5jYWxsKHRoaXMpO3RoaXMucmFpc2VOb0FsdEV4Y2VwdGlvbihyLGUuRVJSX01TRyl9cnVsZUZpbmFsbHlTdGF0ZVVwZGF0ZSgpe2lmKHRoaXMuUlVMRV9TVEFDSy5wb3AoKSx0aGlzLlJVTEVfT0NDVVJSRU5DRV9TVEFDSy5wb3AoKSx0aGlzLmNzdEZpbmFsbHlTdGF0ZVVwZGF0ZSgpLHRoaXMuUlVMRV9TVEFDSy5sZW5ndGg9PT0wJiZ0aGlzLmlzQXRFbmRPZklucHV0KCk9PT0hMSl7bGV0IGU9dGhpcy5MQSgxKSxyPXRoaXMuZXJyb3JNZXNzYWdlUHJvdmlkZXIuYnVpbGROb3RBbGxJbnB1dFBhcnNlZE1lc3NhZ2Uoe2ZpcnN0UmVkdW5kYW50OmUscnVsZU5hbWU6dGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCl9KTt0aGlzLlNBVkVfRVJST1IobmV3IEQyKHIsZSkpfX1zdWJydWxlSW50ZXJuYWwoZSxyLG4pe2xldCBpO3RyeXtsZXQgYT1uIT09dm9pZCAwP24uQVJHUzp2b2lkIDA7cmV0dXJuIHRoaXMuc3VicnVsZUlkeD1yLGk9ZS5hcHBseSh0aGlzLGEpLHRoaXMuY3N0UG9zdE5vblRlcm1pbmFsKGksbiE9PXZvaWQgMCYmbi5MQUJFTCE9PXZvaWQgMD9uLkxBQkVMOmUucnVsZU5hbWUpLGl9Y2F0Y2goYSl7dGhyb3cgdGhpcy5zdWJydWxlSW50ZXJuYWxFcnJvcihhLG4sZS5ydWxlTmFtZSl9fXN1YnJ1bGVJbnRlcm5hbEVycm9yKGUscixuKXt0aHJvdyBmZihlKSYmZS5wYXJ0aWFsQ3N0UmVzdWx0IT09dm9pZCAwJiYodGhpcy5jc3RQb3N0Tm9uVGVybWluYWwoZS5wYXJ0aWFsQ3N0UmVzdWx0LHIhPT12b2lkIDAmJnIuTEFCRUwhPT12b2lkIDA/ci5MQUJFTDpuKSxkZWxldGUgZS5wYXJ0aWFsQ3N0UmVzdWx0KSxlfWNvbnN1bWVJbnRlcm5hbChlLHIsbil7bGV0IGk7dHJ5e2xldCBhPXRoaXMuTEEoMSk7dGhpcy50b2tlbk1hdGNoZXIoYSxlKT09PSEwPyh0aGlzLmNvbnN1bWVUb2tlbigpLGk9YSk6dGhpcy5jb25zdW1lSW50ZXJuYWxFcnJvcihlLGEsbil9Y2F0Y2goYSl7aT10aGlzLmNvbnN1bWVJbnRlcm5hbFJlY292ZXJ5KGUscixhKX1yZXR1cm4gdGhpcy5jc3RQb3N0VGVybWluYWwobiE9PXZvaWQgMCYmbi5MQUJFTCE9PXZvaWQgMD9uLkxBQkVMOmUubmFtZSxpKSxpfWNvbnN1bWVJbnRlcm5hbEVycm9yKGUscixuKXtsZXQgaSxhPXRoaXMuTEEoMCk7dGhyb3cgbiE9PXZvaWQgMCYmbi5FUlJfTVNHP2k9bi5FUlJfTVNHOmk9dGhpcy5lcnJvck1lc3NhZ2VQcm92aWRlci5idWlsZE1pc21hdGNoVG9rZW5NZXNzYWdlKHtleHBlY3RlZDplLGFjdHVhbDpyLHByZXZpb3VzOmEscnVsZU5hbWU6dGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCl9KSx0aGlzLlNBVkVfRVJST1IobmV3IG0wKGkscixhKSl9Y29uc3VtZUludGVybmFsUmVjb3ZlcnkoZSxyLG4pe2lmKHRoaXMucmVjb3ZlcnlFbmFibGVkJiZuLm5hbWU9PT0iTWlzbWF0Y2hlZFRva2VuRXhjZXB0aW9uIiYmIXRoaXMuaXNCYWNrVHJhY2tpbmcoKSl7bGV0IGk9dGhpcy5nZXRGb2xsb3dzRm9ySW5SdWxlUmVjb3ZlcnkoZSxyKTt0cnl7cmV0dXJuIHRoaXMudHJ5SW5SdWxlUmVjb3ZlcnkoZSxpKX1jYXRjaChhKXt0aHJvdyBhLm5hbWU9PT1CUj9uOmF9fWVsc2UgdGhyb3cgbn1zYXZlUmVjb2dTdGF0ZSgpe2xldCBlPXRoaXMuZXJyb3JzLHI9cm4odGhpcy5SVUxFX1NUQUNLKTtyZXR1cm57ZXJyb3JzOmUsbGV4ZXJTdGF0ZTp0aGlzLmV4cG9ydExleGVyU3RhdGUoKSxSVUxFX1NUQUNLOnIsQ1NUX1NUQUNLOnRoaXMuQ1NUX1NUQUNLfX1yZWxvYWRSZWNvZ1N0YXRlKGUpe3RoaXMuZXJyb3JzPWUuZXJyb3JzLHRoaXMuaW1wb3J0TGV4ZXJTdGF0ZShlLmxleGVyU3RhdGUpLHRoaXMuUlVMRV9TVEFDSz1lLlJVTEVfU1RBQ0t9cnVsZUludm9jYXRpb25TdGF0ZVVwZGF0ZShlLHIsbil7dGhpcy5SVUxFX09DQ1VSUkVOQ0VfU1RBQ0sucHVzaChuKSx0aGlzLlJVTEVfU1RBQ0sucHVzaChlKSx0aGlzLmNzdEludm9jYXRpb25TdGF0ZVVwZGF0ZShyKX1pc0JhY2tUcmFja2luZygpe3JldHVybiB0aGlzLmlzQmFja1RyYWNraW5nU3RhY2subGVuZ3RoIT09MH1nZXRDdXJyUnVsZUZ1bGxOYW1lKCl7bGV0IGU9dGhpcy5nZXRMYXN0RXhwbGljaXRSdWxlU2hvcnROYW1lKCk7cmV0dXJuIHRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbFtlXX1zaG9ydFJ1bGVOYW1lVG9GdWxsTmFtZShlKXtyZXR1cm4gdGhpcy5zaG9ydFJ1bGVOYW1lVG9GdWxsW2VdfWlzQXRFbmRPZklucHV0KCl7cmV0dXJuIHRoaXMudG9rZW5NYXRjaGVyKHRoaXMuTEEoMSksbW8pfXJlc2V0KCl7dGhpcy5yZXNldExleGVyU3RhdGUoKSx0aGlzLnN1YnJ1bGVJZHg9MCx0aGlzLmlzQmFja1RyYWNraW5nU3RhY2s9W10sdGhpcy5lcnJvcnM9W10sdGhpcy5SVUxFX1NUQUNLPVtdLHRoaXMuQ1NUX1NUQUNLPVtdLHRoaXMuUlVMRV9PQ0NVUlJFTkNFX1NUQUNLPVtdfX19KTt2YXIgRWsseW9lPU0oKCk9PnsidXNlIHN0cmljdCI7YmcoKTtIdCgpO3ZnKCk7VXMoKTtFaz1jbGFzc3tzdGF0aWN7byh0aGlzLCJFcnJvckhhbmRsZXIiKX1pbml0RXJyb3JIYW5kbGVyKGUpe3RoaXMuX2Vycm9ycz1bXSx0aGlzLmVycm9yTWVzc2FnZVByb3ZpZGVyPU50KGUsImVycm9yTWVzc2FnZVByb3ZpZGVyIik/ZS5lcnJvck1lc3NhZ2VQcm92aWRlcjpocy5lcnJvck1lc3NhZ2VQcm92aWRlcn1TQVZFX0VSUk9SKGUpe2lmKGZmKGUpKXJldHVybiBlLmNvbnRleHQ9e3J1bGVTdGFjazp0aGlzLmdldEh1bWFuUmVhZGFibGVSdWxlU3RhY2soKSxydWxlT2NjdXJyZW5jZVN0YWNrOnJuKHRoaXMuUlVMRV9PQ0NVUlJFTkNFX1NUQUNLKX0sdGhpcy5fZXJyb3JzLnB1c2goZSksZTt0aHJvdyBFcnJvcigiVHJ5aW5nIHRvIHNhdmUgYW4gRXJyb3Igd2hpY2ggaXMgbm90IGEgUmVjb2duaXRpb25FeGNlcHRpb24iKX1nZXQgZXJyb3JzKCl7cmV0dXJuIHJuKHRoaXMuX2Vycm9ycyl9c2V0IGVycm9ycyhlKXt0aGlzLl9lcnJvcnM9ZX1yYWlzZUVhcmx5RXhpdEV4Y2VwdGlvbihlLHIsbil7bGV0IGk9dGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCksYT10aGlzLmdldEdBc3RQcm9kdWN0aW9ucygpW2ldLGw9eWcoZSxhLHIsdGhpcy5tYXhMb29rYWhlYWQpWzBdLHU9W107Zm9yKGxldCBmPTE7Zjw9dGhpcy5tYXhMb29rYWhlYWQ7ZisrKXUucHVzaCh0aGlzLkxBKGYpKTtsZXQgaD10aGlzLmVycm9yTWVzc2FnZVByb3ZpZGVyLmJ1aWxkRWFybHlFeGl0TWVzc2FnZSh7ZXhwZWN0ZWRJdGVyYXRpb25QYXRoczpsLGFjdHVhbDp1LHByZXZpb3VzOnRoaXMuTEEoMCksY3VzdG9tVXNlckRlc2NyaXB0aW9uOm4scnVsZU5hbWU6aX0pO3Rocm93IHRoaXMuU0FWRV9FUlJPUihuZXcgTjIoaCx0aGlzLkxBKDEpLHRoaXMuTEEoMCkpKX1yYWlzZU5vQWx0RXhjZXB0aW9uKGUscil7bGV0IG49dGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCksaT10aGlzLmdldEdBc3RQcm9kdWN0aW9ucygpW25dLGE9Z2coZSxpLHRoaXMubWF4TG9va2FoZWFkKSxzPVtdO2ZvcihsZXQgaD0xO2g8PXRoaXMubWF4TG9va2FoZWFkO2grKylzLnB1c2godGhpcy5MQShoKSk7bGV0IGw9dGhpcy5MQSgwKSx1PXRoaXMuZXJyb3JNZXNzYWdlUHJvdmlkZXIuYnVpbGROb1ZpYWJsZUFsdE1lc3NhZ2Uoe2V4cGVjdGVkUGF0aHNQZXJBbHQ6YSxhY3R1YWw6cyxwcmV2aW91czpsLGN1c3RvbVVzZXJEZXNjcmlwdGlvbjpyLHJ1bGVOYW1lOnRoaXMuZ2V0Q3VyclJ1bGVGdWxsTmFtZSgpfSk7dGhyb3cgdGhpcy5TQVZFX0VSUk9SKG5ldyBMMih1LHRoaXMuTEEoMSksbCkpfX19KTt2YXIgU2ssdm9lPU0oKCk9PnsidXNlIHN0cmljdCI7UzIoKTtIdCgpO1NrPWNsYXNze3N0YXRpY3tvKHRoaXMsIkNvbnRlbnRBc3Npc3QiKX1pbml0Q29udGVudEFzc2lzdCgpe31jb21wdXRlQ29udGVudEFzc2lzdChlLHIpe2xldCBuPXRoaXMuZ2FzdFByb2R1Y3Rpb25zQ2FjaGVbZV07aWYoZHIobikpdGhyb3cgRXJyb3IoYFJ1bGUgLT4ke2V9PC0gZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBncmFtbWFyLmApO3JldHVybiBvayhbbl0scix0aGlzLnRva2VuTWF0Y2hlcix0aGlzLm1heExvb2thaGVhZCl9Z2V0TmV4dFBvc3NpYmxlVG9rZW5UeXBlcyhlKXtsZXQgcj1zYShlLnJ1bGVTdGFjayksaT10aGlzLmdldEdBc3RQcm9kdWN0aW9ucygpW3JdO3JldHVybiBuZXcgbmsoaSxlKS5zdGFydFdhbGtpbmcoKX19fSk7ZnVuY3Rpb24gTTIodCxlLHIsbj0hMSl7QWsocik7bGV0IGk9eGEodGhpcy5yZWNvcmRpbmdQcm9kU3RhY2spLGE9X2koZSk/ZTplLkRFRixzPW5ldyB0KHtkZWZpbml0aW9uOltdLGlkeDpyfSk7cmV0dXJuIG4mJihzLnNlcGFyYXRvcj1lLlNFUCksTnQoZSwiTUFYX0xPT0tBSEVBRCIpJiYocy5tYXhMb29rYWhlYWQ9ZS5NQVhfTE9PS0FIRUFEKSx0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wdXNoKHMpLGEuY2FsbCh0aGlzKSxpLmRlZmluaXRpb24ucHVzaChzKSx0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wb3AoKSxfa31mdW5jdGlvbiBzRmUodCxlKXtBayhlKTtsZXQgcj14YSh0aGlzLnJlY29yZGluZ1Byb2RTdGFjayksbj1EdCh0KT09PSExLGk9bj09PSExP3Q6dC5ERUYsYT1uZXcgd24oe2RlZmluaXRpb246W10saWR4OmUsaWdub3JlQW1iaWd1aXRpZXM6biYmdC5JR05PUkVfQU1CSUdVSVRJRVM9PT0hMH0pO050KHQsIk1BWF9MT09LQUhFQUQiKSYmKGEubWF4TG9va2FoZWFkPXQuTUFYX0xPT0tBSEVBRCk7bGV0IHM9cXYoaSxsPT5faShsLkdBVEUpKTtyZXR1cm4gYS5oYXNQcmVkaWNhdGVzPXMsci5kZWZpbml0aW9uLnB1c2goYSksU2UoaSxsPT57bGV0IHU9bmV3IF9uKHtkZWZpbml0aW9uOltdfSk7YS5kZWZpbml0aW9uLnB1c2godSksTnQobCwiSUdOT1JFX0FNQklHVUlUSUVTIik/dS5pZ25vcmVBbWJpZ3VpdGllcz1sLklHTk9SRV9BTUJJR1VJVElFUzpOdChsLCJHQVRFIikmJih1Lmlnbm9yZUFtYmlndWl0aWVzPSEwKSx0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wdXNoKHUpLGwuQUxULmNhbGwodGhpcyksdGhpcy5yZWNvcmRpbmdQcm9kU3RhY2sucG9wKCl9KSxfa31mdW5jdGlvbiB3b2UodCl7cmV0dXJuIHQ9PT0wPyIiOmAke3R9YH1mdW5jdGlvbiBBayh0KXtpZih0PDB8fHQ+Ym9lKXtsZXQgZT1uZXcgRXJyb3IoYEludmFsaWQgRFNMIE1ldGhvZCBpZHggdmFsdWU6IDwke3R9PgoJSWR4IHZhbHVlIG11c3QgYmUgYSBub25lIG5lZ2F0aXZlIHZhbHVlIHNtYWxsZXIgdGhhbiAke2JvZSsxfWApO3Rocm93IGUuS05PV05fUkVDT1JERVJfRVJST1I9ITAsZX19dmFyIF9rLHhvZSxib2UsVG9lLGtvZSxhRmUsQ2ssRW9lPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTt1cygpO2IyKCk7ZjAoKTtwMCgpO1VzKCk7cGsoKTtfaz17ZGVzY3JpcHRpb246IlRoaXMgT2JqZWN0IGluZGljYXRlcyB0aGUgUGFyc2VyIGlzIGR1cmluZyBSZWNvcmRpbmcgUGhhc2UifTtPYmplY3QuZnJlZXplKF9rKTt4b2U9ITAsYm9lPU1hdGgucG93KDIsOCktMSxUb2U9cmsoe25hbWU6IlJFQ09SRElOR19QSEFTRV9UT0tFTiIscGF0dGVybjpjaS5OQX0pO1l1KFtUb2VdKTtrb2U9ZDAoVG9lLGBUaGlzIElUb2tlbiBpbmRpY2F0ZXMgdGhlIFBhcnNlciBpcyBpbiBSZWNvcmRpbmcgUGhhc2UKCVNlZTogaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvaW50ZXJuYWxzLmh0bWwjZ3JhbW1hci1yZWNvcmRpbmcgZm9yIGRldGFpbHNgLC0xLC0xLC0xLC0xLC0xLC0xKTtPYmplY3QuZnJlZXplKGtvZSk7YUZlPXtuYW1lOmBUaGlzIENTVE5vZGUgaW5kaWNhdGVzIHRoZSBQYXJzZXIgaXMgaW4gUmVjb3JkaW5nIFBoYXNlCglTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL2ludGVybmFscy5odG1sI2dyYW1tYXItcmVjb3JkaW5nIGZvciBkZXRhaWxzYCxjaGlsZHJlbjp7fX0sQ2s9Y2xhc3N7c3RhdGlje28odGhpcywiR2FzdFJlY29yZGVyIil9aW5pdEdhc3RSZWNvcmRlcihlKXt0aGlzLnJlY29yZGluZ1Byb2RTdGFjaz1bXSx0aGlzLlJFQ09SRElOR19QSEFTRT0hMX1lbmFibGVSZWNvcmRpbmcoKXt0aGlzLlJFQ09SRElOR19QSEFTRT0hMCx0aGlzLlRSQUNFX0lOSVQoIkVuYWJsZSBSZWNvcmRpbmciLCgpPT57Zm9yKGxldCBlPTA7ZTwxMDtlKyspe2xldCByPWU+MD9lOiIiO3RoaXNbYENPTlNVTUUke3J9YF09ZnVuY3Rpb24obixpKXtyZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWxSZWNvcmQobixlLGkpfSx0aGlzW2BTVUJSVUxFJHtyfWBdPWZ1bmN0aW9uKG4saSl7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsUmVjb3JkKG4sZSxpKX0sdGhpc1tgT1BUSU9OJHtyfWBdPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsUmVjb3JkKG4sZSl9LHRoaXNbYE9SJHtyfWBdPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLm9ySW50ZXJuYWxSZWNvcmQobixlKX0sdGhpc1tgTUFOWSR7cn1gXT1mdW5jdGlvbihuKXt0aGlzLm1hbnlJbnRlcm5hbFJlY29yZChlLG4pfSx0aGlzW2BNQU5ZX1NFUCR7cn1gXT1mdW5jdGlvbihuKXt0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsUmVjb3JkKGUsbil9LHRoaXNbYEFUX0xFQVNUX09ORSR7cn1gXT1mdW5jdGlvbihuKXt0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbFJlY29yZChlLG4pfSx0aGlzW2BBVF9MRUFTVF9PTkVfU0VQJHtyfWBdPWZ1bmN0aW9uKG4pe3RoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWxSZWNvcmQoZSxuKX19dGhpcy5jb25zdW1lPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWxSZWNvcmQocixlLG4pfSx0aGlzLnN1YnJ1bGU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbFJlY29yZChyLGUsbil9LHRoaXMub3B0aW9uPWZ1bmN0aW9uKGUscil7cmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWxSZWNvcmQocixlKX0sdGhpcy5vcj1mdW5jdGlvbihlLHIpe3JldHVybiB0aGlzLm9ySW50ZXJuYWxSZWNvcmQocixlKX0sdGhpcy5tYW55PWZ1bmN0aW9uKGUscil7dGhpcy5tYW55SW50ZXJuYWxSZWNvcmQoZSxyKX0sdGhpcy5hdExlYXN0T25lPWZ1bmN0aW9uKGUscil7dGhpcy5hdExlYXN0T25lSW50ZXJuYWxSZWNvcmQoZSxyKX0sdGhpcy5BQ1RJT049dGhpcy5BQ1RJT05fUkVDT1JELHRoaXMuQkFDS1RSQUNLPXRoaXMuQkFDS1RSQUNLX1JFQ09SRCx0aGlzLkxBPXRoaXMuTEFfUkVDT1JEfSl9ZGlzYWJsZVJlY29yZGluZygpe3RoaXMuUkVDT1JESU5HX1BIQVNFPSExLHRoaXMuVFJBQ0VfSU5JVCgiRGVsZXRpbmcgUmVjb3JkaW5nIG1ldGhvZHMiLCgpPT57bGV0IGU9dGhpcztmb3IobGV0IHI9MDtyPDEwO3IrKyl7bGV0IG49cj4wP3I6IiI7ZGVsZXRlIGVbYENPTlNVTUUke259YF0sZGVsZXRlIGVbYFNVQlJVTEUke259YF0sZGVsZXRlIGVbYE9QVElPTiR7bn1gXSxkZWxldGUgZVtgT1Ike259YF0sZGVsZXRlIGVbYE1BTlkke259YF0sZGVsZXRlIGVbYE1BTllfU0VQJHtufWBdLGRlbGV0ZSBlW2BBVF9MRUFTVF9PTkUke259YF0sZGVsZXRlIGVbYEFUX0xFQVNUX09ORV9TRVAke259YF19ZGVsZXRlIGUuY29uc3VtZSxkZWxldGUgZS5zdWJydWxlLGRlbGV0ZSBlLm9wdGlvbixkZWxldGUgZS5vcixkZWxldGUgZS5tYW55LGRlbGV0ZSBlLmF0TGVhc3RPbmUsZGVsZXRlIGUuQUNUSU9OLGRlbGV0ZSBlLkJBQ0tUUkFDSyxkZWxldGUgZS5MQX0pfUFDVElPTl9SRUNPUkQoZSl7fUJBQ0tUUkFDS19SRUNPUkQoZSxyKXtyZXR1cm4oKT0+ITB9TEFfUkVDT1JEKGUpe3JldHVybiB3Z310b3BMZXZlbFJ1bGVSZWNvcmQoZSxyKXt0cnl7bGV0IG49bmV3IGxzKHtkZWZpbml0aW9uOltdLG5hbWU6ZX0pO3JldHVybiBuLm5hbWU9ZSx0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wdXNoKG4pLHIuY2FsbCh0aGlzKSx0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wb3AoKSxufWNhdGNoKG4pe2lmKG4uS05PV05fUkVDT1JERVJfRVJST1IhPT0hMCl0cnl7bi5tZXNzYWdlPW4ubWVzc2FnZStgCgkgVGhpcyBlcnJvciB3YXMgdGhyb3duIGR1cmluZyB0aGUgImdyYW1tYXIgcmVjb3JkaW5nIHBoYXNlIiBGb3IgbW9yZSBpbmZvIHNlZToKCWh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL2ludGVybmFscy5odG1sI2dyYW1tYXItcmVjb3JkaW5nYH1jYXRjaHt0aHJvdyBufXRocm93IG59fW9wdGlvbkludGVybmFsUmVjb3JkKGUscil7cmV0dXJuIE0yLmNhbGwodGhpcyxhbixlLHIpfWF0TGVhc3RPbmVJbnRlcm5hbFJlY29yZChlLHIpe00yLmNhbGwodGhpcyxMbixyLGUpfWF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsUmVjb3JkKGUscil7TTIuY2FsbCh0aGlzLERuLHIsZSx4b2UpfW1hbnlJbnRlcm5hbFJlY29yZChlLHIpe00yLmNhbGwodGhpcyxEcixyLGUpfW1hbnlTZXBGaXJzdEludGVybmFsUmVjb3JkKGUscil7TTIuY2FsbCh0aGlzLGJuLHIsZSx4b2UpfW9ySW50ZXJuYWxSZWNvcmQoZSxyKXtyZXR1cm4gc0ZlLmNhbGwodGhpcyxlLHIpfXN1YnJ1bGVJbnRlcm5hbFJlY29yZChlLHIsbil7aWYoQWsociksIWV8fE50KGUsInJ1bGVOYW1lIik9PT0hMSl7bGV0IGw9bmV3IEVycm9yKGA8U1VCUlVMRSR7d29lKHIpfT4gYXJndW1lbnQgaXMgaW52YWxpZCBleHBlY3RpbmcgYSBQYXJzZXIgbWV0aG9kIHJlZmVyZW5jZSBidXQgZ290OiA8JHtKU09OLnN0cmluZ2lmeShlKX0+CiBpbnNpZGUgdG9wIGxldmVsIHJ1bGU6IDwke3RoaXMucmVjb3JkaW5nUHJvZFN0YWNrWzBdLm5hbWV9PmApO3Rocm93IGwuS05PV05fUkVDT1JERVJfRVJST1I9ITAsbH1sZXQgaT14YSh0aGlzLnJlY29yZGluZ1Byb2RTdGFjayksYT1lLnJ1bGVOYW1lLHM9bmV3IG5uKHtpZHg6cixub25UZXJtaW5hbE5hbWU6YSxsYWJlbDpuPy5MQUJFTCxyZWZlcmVuY2VkUnVsZTp2b2lkIDB9KTtyZXR1cm4gaS5kZWZpbml0aW9uLnB1c2gocyksdGhpcy5vdXRwdXRDc3Q/YUZlOl9rfWNvbnN1bWVJbnRlcm5hbFJlY29yZChlLHIsbil7aWYoQWsociksIUVSKGUpKXtsZXQgcz1uZXcgRXJyb3IoYDxDT05TVU1FJHt3b2Uocil9PiBhcmd1bWVudCBpcyBpbnZhbGlkIGV4cGVjdGluZyBhIFRva2VuVHlwZSByZWZlcmVuY2UgYnV0IGdvdDogPCR7SlNPTi5zdHJpbmdpZnkoZSl9PgogaW5zaWRlIHRvcCBsZXZlbCBydWxlOiA8JHt0aGlzLnJlY29yZGluZ1Byb2RTdGFja1swXS5uYW1lfT5gKTt0aHJvdyBzLktOT1dOX1JFQ09SREVSX0VSUk9SPSEwLHN9bGV0IGk9eGEodGhpcy5yZWNvcmRpbmdQcm9kU3RhY2spLGE9bmV3IEVyKHtpZHg6cix0ZXJtaW5hbFR5cGU6ZSxsYWJlbDpuPy5MQUJFTH0pO3JldHVybiBpLmRlZmluaXRpb24ucHVzaChhKSxrb2V9fTtvKE0yLCJyZWNvcmRQcm9kIik7byhzRmUsInJlY29yZE9yUHJvZCIpO28od29lLCJnZXRJZHhTdWZmaXgiKTtvKEFrLCJhc3NlcnRNZXRob2RJZHhJc1ZhbGlkIil9KTt2YXIgTGssU29lPU0oKCk9PnsidXNlIHN0cmljdCI7SHQoKTtsZygpO1VzKCk7TGs9Y2xhc3N7c3RhdGlje28odGhpcywiUGVyZm9ybWFuY2VUcmFjZXIiKX1pbml0UGVyZm9ybWFuY2VUcmFjZXIoZSl7aWYoTnQoZSwidHJhY2VJbml0UGVyZiIpKXtsZXQgcj1lLnRyYWNlSW5pdFBlcmYsbj10eXBlb2Ygcj09Im51bWJlciI7dGhpcy50cmFjZUluaXRNYXhJZGVudD1uP3I6MS8wLHRoaXMudHJhY2VJbml0UGVyZj1uP3I+MDpyfWVsc2UgdGhpcy50cmFjZUluaXRNYXhJZGVudD0wLHRoaXMudHJhY2VJbml0UGVyZj1ocy50cmFjZUluaXRQZXJmO3RoaXMudHJhY2VJbml0SW5kZW50PS0xfVRSQUNFX0lOSVQoZSxyKXtpZih0aGlzLnRyYWNlSW5pdFBlcmY9PT0hMCl7dGhpcy50cmFjZUluaXRJbmRlbnQrKztsZXQgbj1uZXcgQXJyYXkodGhpcy50cmFjZUluaXRJbmRlbnQrMSkuam9pbigiCSIpO3RoaXMudHJhY2VJbml0SW5kZW50PHRoaXMudHJhY2VJbml0TWF4SWRlbnQmJmNvbnNvbGUubG9nKGAke259LS0+IDwke2V9PmApO2xldHt0aW1lOmksdmFsdWU6YX09eTIocikscz1pPjEwP2NvbnNvbGUud2Fybjpjb25zb2xlLmxvZztyZXR1cm4gdGhpcy50cmFjZUluaXRJbmRlbnQ8dGhpcy50cmFjZUluaXRNYXhJZGVudCYmcyhgJHtufTwtLSA8JHtlfT4gdGltZTogJHtpfW1zYCksdGhpcy50cmFjZUluaXRJbmRlbnQtLSxhfWVsc2UgcmV0dXJuIHIoKX19fSk7ZnVuY3Rpb24gQ29lKHQsZSl7ZS5mb3JFYWNoKHI9PntsZXQgbj1yLnByb3RvdHlwZTtPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhuKS5mb3JFYWNoKGk9PntpZihpPT09ImNvbnN0cnVjdG9yIilyZXR1cm47bGV0IGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGkpO2EmJihhLmdldHx8YS5zZXQpP09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxpLGEpOnQucHJvdG90eXBlW2ldPXIucHJvdG90eXBlW2ldfSl9KX12YXIgQW9lPU0oKCk9PnsidXNlIHN0cmljdCI7byhDb2UsImFwcGx5TWl4aW5zIil9KTtmdW5jdGlvbiBEayh0PXZvaWQgMCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciB3ZyxocyxUZyxVaSxJMixPMixVcz1NKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7bGcoKTtuc2UoKTtwMCgpO3BnKCk7SnNlKCk7RlIoKTthb2UoKTtkb2UoKTtwb2UoKTttb2UoKTtnb2UoKTt5b2UoKTt2b2UoKTtFb2UoKTtTb2UoKTtBb2UoKTtfMigpO3dnPWQwKG1vLCIiLE5hTixOYU4sTmFOLE5hTixOYU4sTmFOKTtPYmplY3QuZnJlZXplKHdnKTtocz1PYmplY3QuZnJlZXplKHtyZWNvdmVyeUVuYWJsZWQ6ITEsbWF4TG9va2FoZWFkOjMsZHluYW1pY1Rva2Vuc0VuYWJsZWQ6ITEsb3V0cHV0Q3N0OiEwLGVycm9yTWVzc2FnZVByb3ZpZGVyOlh1LG5vZGVMb2NhdGlvblRyYWNraW5nOiJub25lIix0cmFjZUluaXRQZXJmOiExLHNraXBWYWxpZGF0aW9uczohMX0pLFRnPU9iamVjdC5mcmVlemUoe3JlY292ZXJ5VmFsdWVGdW5jOm8oKCk9Pnt9LCJyZWNvdmVyeVZhbHVlRnVuYyIpLHJlc3luY0VuYWJsZWQ6ITB9KTsoZnVuY3Rpb24odCl7dFt0LklOVkFMSURfUlVMRV9OQU1FPTBdPSJJTlZBTElEX1JVTEVfTkFNRSIsdFt0LkRVUExJQ0FURV9SVUxFX05BTUU9MV09IkRVUExJQ0FURV9SVUxFX05BTUUiLHRbdC5JTlZBTElEX1JVTEVfT1ZFUlJJREU9Ml09IklOVkFMSURfUlVMRV9PVkVSUklERSIsdFt0LkRVUExJQ0FURV9QUk9EVUNUSU9OUz0zXT0iRFVQTElDQVRFX1BST0RVQ1RJT05TIix0W3QuVU5SRVNPTFZFRF9TVUJSVUxFX1JFRj00XT0iVU5SRVNPTFZFRF9TVUJSVUxFX1JFRiIsdFt0LkxFRlRfUkVDVVJTSU9OPTVdPSJMRUZUX1JFQ1VSU0lPTiIsdFt0Lk5PTkVfTEFTVF9FTVBUWV9BTFQ9Nl09Ik5PTkVfTEFTVF9FTVBUWV9BTFQiLHRbdC5BTUJJR1VPVVNfQUxUUz03XT0iQU1CSUdVT1VTX0FMVFMiLHRbdC5DT05GTElDVF9UT0tFTlNfUlVMRVNfTkFNRVNQQUNFPThdPSJDT05GTElDVF9UT0tFTlNfUlVMRVNfTkFNRVNQQUNFIix0W3QuSU5WQUxJRF9UT0tFTl9OQU1FPTldPSJJTlZBTElEX1RPS0VOX05BTUUiLHRbdC5OT19OT05fRU1QVFlfTE9PS0FIRUFEPTEwXT0iTk9fTk9OX0VNUFRZX0xPT0tBSEVBRCIsdFt0LkFNQklHVU9VU19QUkVGSVhfQUxUUz0xMV09IkFNQklHVU9VU19QUkVGSVhfQUxUUyIsdFt0LlRPT19NQU5ZX0FMVFM9MTJdPSJUT09fTUFOWV9BTFRTIix0W3QuQ1VTVE9NX0xPT0tBSEVBRF9WQUxJREFUSU9OPTEzXT0iQ1VTVE9NX0xPT0tBSEVBRF9WQUxJREFUSU9OIn0pKFVpfHwoVWk9e30pKTtvKERrLCJFTVBUWV9BTFQiKTtJMj1jbGFzcyB0e3N0YXRpY3tvKHRoaXMsIlBhcnNlciIpfXN0YXRpYyBwZXJmb3JtU2VsZkFuYWx5c2lzKGUpe3Rocm93IEVycm9yKCJUaGUgKipzdGF0aWMqKiBgcGVyZm9ybVNlbGZBbmFseXNpc2AgbWV0aG9kIGhhcyBiZWVuIGRlcHJlY2F0ZWQuCVxuVXNlIHRoZSAqKmluc3RhbmNlKiogbWV0aG9kIHdpdGggdGhlIHNhbWUgbmFtZSBpbnN0ZWFkLiIpfXBlcmZvcm1TZWxmQW5hbHlzaXMoKXt0aGlzLlRSQUNFX0lOSVQoInBlcmZvcm1TZWxmQW5hbHlzaXMiLCgpPT57bGV0IGU7dGhpcy5zZWxmQW5hbHlzaXNEb25lPSEwO2xldCByPXRoaXMuY2xhc3NOYW1lO3RoaXMuVFJBQ0VfSU5JVCgidG9GYXN0UHJvcHMiLCgpPT57djIodGhpcyl9KSx0aGlzLlRSQUNFX0lOSVQoIkdyYW1tYXIgUmVjb3JkaW5nIiwoKT0+e3RyeXt0aGlzLmVuYWJsZVJlY29yZGluZygpLFNlKHRoaXMuZGVmaW5lZFJ1bGVzTmFtZXMsaT0+e2xldCBzPXRoaXNbaV0ub3JpZ2luYWxHcmFtbWFyQWN0aW9uLGw7dGhpcy5UUkFDRV9JTklUKGAke2l9IFJ1bGVgLCgpPT57bD10aGlzLnRvcExldmVsUnVsZVJlY29yZChpLHMpfSksdGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZVtpXT1sfSl9ZmluYWxseXt0aGlzLmRpc2FibGVSZWNvcmRpbmcoKX19KTtsZXQgbj1bXTtpZih0aGlzLlRSQUNFX0lOSVQoIkdyYW1tYXIgUmVzb2x2aW5nIiwoKT0+e249UXNlKHtydWxlczpicih0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlKX0pLHRoaXMuZGVmaW5pdGlvbkVycm9ycz10aGlzLmRlZmluaXRpb25FcnJvcnMuY29uY2F0KG4pfSksdGhpcy5UUkFDRV9JTklUKCJHcmFtbWFyIFZhbGlkYXRpb25zIiwoKT0+e2lmKGNyKG4pJiZ0aGlzLnNraXBWYWxpZGF0aW9ucz09PSExKXtsZXQgaT1ac2Uoe3J1bGVzOmJyKHRoaXMuZ2FzdFByb2R1Y3Rpb25zQ2FjaGUpLHRva2VuVHlwZXM6YnIodGhpcy50b2tlbnNNYXApLGVyck1zZ1Byb3ZpZGVyOlVsLGdyYW1tYXJOYW1lOnJ9KSxhPUhzZSh7bG9va2FoZWFkU3RyYXRlZ3k6dGhpcy5sb29rYWhlYWRTdHJhdGVneSxydWxlczpicih0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlKSx0b2tlblR5cGVzOmJyKHRoaXMudG9rZW5zTWFwKSxncmFtbWFyTmFtZTpyfSk7dGhpcy5kZWZpbml0aW9uRXJyb3JzPXRoaXMuZGVmaW5pdGlvbkVycm9ycy5jb25jYXQoaSxhKX19KSxjcih0aGlzLmRlZmluaXRpb25FcnJvcnMpJiYodGhpcy5yZWNvdmVyeUVuYWJsZWQmJnRoaXMuVFJBQ0VfSU5JVCgiY29tcHV0ZUFsbFByb2RzRm9sbG93cyIsKCk9PntsZXQgaT1yc2UoYnIodGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZSkpO3RoaXMucmVzeW5jRm9sbG93cz1pfSksdGhpcy5UUkFDRV9JTklUKCJDb21wdXRlTG9va2FoZWFkRnVuY3Rpb25zIiwoKT0+e3ZhciBpLGE7KGE9KGk9dGhpcy5sb29rYWhlYWRTdHJhdGVneSkuaW5pdGlhbGl6ZSk9PT1udWxsfHxhPT09dm9pZCAwfHxhLmNhbGwoaSx7cnVsZXM6YnIodGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZSl9KSx0aGlzLnByZUNvbXB1dGVMb29rYWhlYWRGdW5jdGlvbnMoYnIodGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZSkpfSkpLCF0LkRFRkVSX0RFRklOSVRJT05fRVJST1JTX0hBTkRMSU5HJiYhY3IodGhpcy5kZWZpbml0aW9uRXJyb3JzKSl0aHJvdyBlPVFlKHRoaXMuZGVmaW5pdGlvbkVycm9ycyxpPT5pLm1lc3NhZ2UpLG5ldyBFcnJvcihgUGFyc2VyIERlZmluaXRpb24gRXJyb3JzIGRldGVjdGVkOgogJHtlLmpvaW4oYAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmApfWApfSl9Y29uc3RydWN0b3IoZSxyKXt0aGlzLmRlZmluaXRpb25FcnJvcnM9W10sdGhpcy5zZWxmQW5hbHlzaXNEb25lPSExO2xldCBuPXRoaXM7aWYobi5pbml0RXJyb3JIYW5kbGVyKHIpLG4uaW5pdExleGVyQWRhcHRlcigpLG4uaW5pdExvb2tzQWhlYWQociksbi5pbml0UmVjb2duaXplckVuZ2luZShlLHIpLG4uaW5pdFJlY292ZXJhYmxlKHIpLG4uaW5pdFRyZWVCdWlsZGVyKHIpLG4uaW5pdENvbnRlbnRBc3Npc3QoKSxuLmluaXRHYXN0UmVjb3JkZXIociksbi5pbml0UGVyZm9ybWFuY2VUcmFjZXIociksTnQociwiaWdub3JlZElzc3VlcyIpKXRocm93IG5ldyBFcnJvcihgVGhlIDxpZ25vcmVkSXNzdWVzPiBJUGFyc2VyQ29uZmlnIHByb3BlcnR5IGhhcyBiZWVuIGRlcHJlY2F0ZWQuCglQbGVhc2UgdXNlIHRoZSA8SUdOT1JFX0FNQklHVUlUSUVTPiBmbGFnIG9uIHRoZSByZWxldmFudCBEU0wgbWV0aG9kIGluc3RlYWQuCglTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19ncmFtbWFyX2Vycm9ycy5odG1sI0lHTk9SSU5HX0FNQklHVUlUSUVTCglGb3IgZnVydGhlciBkZXRhaWxzLmApO3RoaXMuc2tpcFZhbGlkYXRpb25zPU50KHIsInNraXBWYWxpZGF0aW9ucyIpP3Iuc2tpcFZhbGlkYXRpb25zOmhzLnNraXBWYWxpZGF0aW9uc319O0kyLkRFRkVSX0RFRklOSVRJT05fRVJST1JTX0hBTkRMSU5HPSExO0NvZShJMixbZmssZ2ssYmssd2ssa2ssVGssRWssU2ssQ2ssTGtdKTtPMj1jbGFzcyBleHRlbmRzIEkye3N0YXRpY3tvKHRoaXMsIkVtYmVkZGVkQWN0aW9uc1BhcnNlciIpfWNvbnN0cnVjdG9yKGUscj1ocyl7bGV0IG49cm4ocik7bi5vdXRwdXRDc3Q9ITEsc3VwZXIoZSxuKX19fSk7dmFyIF9vZT1NKCgpPT57InVzZSBzdHJpY3QiO3VzKCl9KTt2YXIgTG9lPU0oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgRG9lPU0oKCk9PnsidXNlIHN0cmljdCI7X29lKCk7TG9lKCl9KTt2YXIgTm9lPU0oKCk9PnsidXNlIHN0cmljdCI7ZlIoKX0pO3ZhciBnMD1NKCgpPT57InVzZSBzdHJpY3QiO2ZSKCk7VXMoKTtiMigpO3AwKCk7dmcoKTt6UigpO3BnKCk7YmcoKTtDUigpO3VzKCk7dXMoKTtEb2UoKTtOb2UoKX0pO2Z1bmN0aW9uIHkwKHQsZSxyKXtyZXR1cm5gJHt0Lm5hbWV9XyR7ZX1fJHtyfWB9ZnVuY3Rpb24gT29lKHQpe2xldCBlPXtkZWNpc2lvbk1hcDp7fSxkZWNpc2lvblN0YXRlczpbXSxydWxlVG9TdGFydFN0YXRlOm5ldyBNYXAscnVsZVRvU3RvcFN0YXRlOm5ldyBNYXAsc3RhdGVzOltdfTtkRmUoZSx0KTtsZXQgcj10Lmxlbmd0aDtmb3IobGV0IG49MDtuPHI7bisrKXtsZXQgaT10W25dLGE9djAoZSxpLGkpO2EhPT12b2lkIDAmJkVGZShlLGksYSl9cmV0dXJuIGV9ZnVuY3Rpb24gZEZlKHQsZSl7bGV0IHI9ZS5sZW5ndGg7Zm9yKGxldCBuPTA7bjxyO24rKyl7bGV0IGk9ZVtuXSxhPW9hKHQsaSx2b2lkIDAse3R5cGU6bEZlfSkscz1vYSh0LGksdm9pZCAwLHt0eXBlOlNnfSk7YS5zdG9wPXMsdC5ydWxlVG9TdGFydFN0YXRlLnNldChpLGEpLHQucnVsZVRvU3RvcFN0YXRlLnNldChpLHMpfX1mdW5jdGlvbiBQb2UodCxlLHIpe3JldHVybiByIGluc3RhbmNlb2YgRXI/WFIodCxlLHIudGVybWluYWxUeXBlLHIpOnIgaW5zdGFuY2VvZiBubj9rRmUodCxlLHIpOnIgaW5zdGFuY2VvZiB3bj92RmUodCxlLHIpOnIgaW5zdGFuY2VvZiBhbj94RmUodCxlLHIpOnIgaW5zdGFuY2VvZiBEcj9wRmUodCxlLHIpOnIgaW5zdGFuY2VvZiBibj9tRmUodCxlLHIpOnIgaW5zdGFuY2VvZiBMbj9nRmUodCxlLHIpOnIgaW5zdGFuY2VvZiBEbj95RmUodCxlLHIpOnYwKHQsZSxyKX1mdW5jdGlvbiBwRmUodCxlLHIpe2xldCBuPW9hKHQsZSxyLHt0eXBlOk1vZX0pO3BmKHQsbik7bGV0IGk9Q2codCxlLG4scix2MCh0LGUscikpO3JldHVybiBGb2UodCxlLHIsaSl9ZnVuY3Rpb24gbUZlKHQsZSxyKXtsZXQgbj1vYSh0LGUscix7dHlwZTpNb2V9KTtwZih0LG4pO2xldCBpPUNnKHQsZSxuLHIsdjAodCxlLHIpKSxhPVhSKHQsZSxyLnNlcGFyYXRvcixyKTtyZXR1cm4gRm9lKHQsZSxyLGksYSl9ZnVuY3Rpb24gZ0ZlKHQsZSxyKXtsZXQgbj1vYSh0LGUscix7dHlwZTpSb2V9KTtwZih0LG4pO2xldCBpPUNnKHQsZSxuLHIsdjAodCxlLHIpKTtyZXR1cm4gQm9lKHQsZSxyLGkpfWZ1bmN0aW9uIHlGZSh0LGUscil7bGV0IG49b2EodCxlLHIse3R5cGU6Um9lfSk7cGYodCxuKTtsZXQgaT1DZyh0LGUsbixyLHYwKHQsZSxyKSksYT1YUih0LGUsci5zZXBhcmF0b3Iscik7cmV0dXJuIEJvZSh0LGUscixpLGEpfWZ1bmN0aW9uIHZGZSh0LGUscil7bGV0IG49b2EodCxlLHIse3R5cGU6ZGZ9KTtwZih0LG4pO2xldCBpPVFlKHIuZGVmaW5pdGlvbixzPT5Qb2UodCxlLHMpKTtyZXR1cm4gQ2codCxlLG4sciwuLi5pKX1mdW5jdGlvbiB4RmUodCxlLHIpe2xldCBuPW9hKHQsZSxyLHt0eXBlOmRmfSk7cGYodCxuKTtsZXQgaT1DZyh0LGUsbixyLHYwKHQsZSxyKSk7cmV0dXJuIGJGZSh0LGUscixpKX1mdW5jdGlvbiB2MCh0LGUscil7bGV0IG49WXIoUWUoci5kZWZpbml0aW9uLGk9PlBvZSh0LGUsaSkpLGk9PmkhPT12b2lkIDApO3JldHVybiBuLmxlbmd0aD09PTE/blswXTpuLmxlbmd0aD09PTA/dm9pZCAwOlRGZSh0LG4pfWZ1bmN0aW9uIEJvZSh0LGUscixuLGkpe2xldCBhPW4ubGVmdCxzPW4ucmlnaHQsbD1vYSh0LGUscix7dHlwZTpmRmV9KTtwZih0LGwpO2xldCB1PW9hKHQsZSxyLHt0eXBlOklvZX0pO3JldHVybiBhLmxvb3BiYWNrPWwsdS5sb29wYmFjaz1sLHQuZGVjaXNpb25NYXBbeTAoZSxpPyJSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvciI6IlJlcGV0aXRpb25NYW5kYXRvcnkiLHIuaWR4KV09bCxOaShzLGwpLGk9PT12b2lkIDA/KE5pKGwsYSksTmkobCx1KSk6KE5pKGwsdSksTmkobCxpLmxlZnQpLE5pKGkucmlnaHQsYSkpLHtsZWZ0OmEscmlnaHQ6dX19ZnVuY3Rpb24gRm9lKHQsZSxyLG4saSl7bGV0IGE9bi5sZWZ0LHM9bi5yaWdodCxsPW9hKHQsZSxyLHt0eXBlOmhGZX0pO3BmKHQsbCk7bGV0IHU9b2EodCxlLHIse3R5cGU6SW9lfSksaD1vYSh0LGUscix7dHlwZTp1RmV9KTtyZXR1cm4gbC5sb29wYmFjaz1oLHUubG9vcGJhY2s9aCxOaShsLGEpLE5pKGwsdSksTmkocyxoKSxpIT09dm9pZCAwPyhOaShoLHUpLE5pKGgsaS5sZWZ0KSxOaShpLnJpZ2h0LGEpKTpOaShoLGwpLHQuZGVjaXNpb25NYXBbeTAoZSxpPyJSZXBldGl0aW9uV2l0aFNlcGFyYXRvciI6IlJlcGV0aXRpb24iLHIuaWR4KV09bCx7bGVmdDpsLHJpZ2h0OnV9fWZ1bmN0aW9uIGJGZSh0LGUscixuKXtsZXQgaT1uLmxlZnQsYT1uLnJpZ2h0O3JldHVybiBOaShpLGEpLHQuZGVjaXNpb25NYXBbeTAoZSwiT3B0aW9uIixyLmlkeCldPWksbn1mdW5jdGlvbiBwZih0LGUpe3JldHVybiB0LmRlY2lzaW9uU3RhdGVzLnB1c2goZSksZS5kZWNpc2lvbj10LmRlY2lzaW9uU3RhdGVzLmxlbmd0aC0xLGUuZGVjaXNpb259ZnVuY3Rpb24gQ2codCxlLHIsbiwuLi5pKXtsZXQgYT1vYSh0LGUsbix7dHlwZTpjRmUsc3RhcnQ6cn0pO3IuZW5kPWE7Zm9yKGxldCBsIG9mIGkpbCE9PXZvaWQgMD8oTmkocixsLmxlZnQpLE5pKGwucmlnaHQsYSkpOk5pKHIsYSk7bGV0IHM9e2xlZnQ6cixyaWdodDphfTtyZXR1cm4gdC5kZWNpc2lvbk1hcFt5MChlLHdGZShuKSxuLmlkeCldPXIsc31mdW5jdGlvbiB3RmUodCl7aWYodCBpbnN0YW5jZW9mIHduKXJldHVybiJBbHRlcm5hdGlvbiI7aWYodCBpbnN0YW5jZW9mIGFuKXJldHVybiJPcHRpb24iO2lmKHQgaW5zdGFuY2VvZiBEcilyZXR1cm4iUmVwZXRpdGlvbiI7aWYodCBpbnN0YW5jZW9mIGJuKXJldHVybiJSZXBldGl0aW9uV2l0aFNlcGFyYXRvciI7aWYodCBpbnN0YW5jZW9mIExuKXJldHVybiJSZXBldGl0aW9uTWFuZGF0b3J5IjtpZih0IGluc3RhbmNlb2YgRG4pcmV0dXJuIlJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yIjt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcHJvZHVjdGlvbiB0eXBlIGVuY291bnRlcmVkIil9ZnVuY3Rpb24gVEZlKHQsZSl7bGV0IHI9ZS5sZW5ndGg7Zm9yKGxldCBhPTA7YTxyLTE7YSsrKXtsZXQgcz1lW2FdLGw7cy5sZWZ0LnRyYW5zaXRpb25zLmxlbmd0aD09PTEmJihsPXMubGVmdC50cmFuc2l0aW9uc1swXSk7bGV0IHU9bCBpbnN0YW5jZW9mIEVnLGg9bCxmPWVbYSsxXS5sZWZ0O3MubGVmdC50eXBlPT09ZGYmJnMucmlnaHQudHlwZT09PWRmJiZsIT09dm9pZCAwJiYodSYmaC5mb2xsb3dTdGF0ZT09PXMucmlnaHR8fGwudGFyZ2V0PT09cy5yaWdodCk/KHU/aC5mb2xsb3dTdGF0ZT1mOmwudGFyZ2V0PWYsU0ZlKHQscy5yaWdodCkpOk5pKHMucmlnaHQsZil9bGV0IG49ZVswXSxpPWVbci0xXTtyZXR1cm57bGVmdDpuLmxlZnQscmlnaHQ6aS5yaWdodH19ZnVuY3Rpb24gWFIodCxlLHIsbil7bGV0IGk9b2EodCxlLG4se3R5cGU6ZGZ9KSxhPW9hKHQsZSxuLHt0eXBlOmRmfSk7cmV0dXJuIGpSKGksbmV3IGtnKGEscikpLHtsZWZ0OmkscmlnaHQ6YX19ZnVuY3Rpb24ga0ZlKHQsZSxyKXtsZXQgbj1yLnJlZmVyZW5jZWRSdWxlLGk9dC5ydWxlVG9TdGFydFN0YXRlLmdldChuKSxhPW9hKHQsZSxyLHt0eXBlOmRmfSkscz1vYSh0LGUscix7dHlwZTpkZn0pLGw9bmV3IEVnKGksbixzKTtyZXR1cm4galIoYSxsKSx7bGVmdDphLHJpZ2h0OnN9fWZ1bmN0aW9uIEVGZSh0LGUscil7bGV0IG49dC5ydWxlVG9TdGFydFN0YXRlLmdldChlKTtOaShuLHIubGVmdCk7bGV0IGk9dC5ydWxlVG9TdG9wU3RhdGUuZ2V0KGUpO3JldHVybiBOaShyLnJpZ2h0LGkpLHtsZWZ0Om4scmlnaHQ6aX19ZnVuY3Rpb24gTmkodCxlKXtsZXQgcj1uZXcgQjIoZSk7alIodCxyKX1mdW5jdGlvbiBvYSh0LGUscixuKXtsZXQgaT1PYmplY3QuYXNzaWduKHthdG46dCxwcm9kdWN0aW9uOnIsZXBzaWxvbk9ubHlUcmFuc2l0aW9uczohMSxydWxlOmUsdHJhbnNpdGlvbnM6W10sbmV4dFRva2VuV2l0aGluUnVsZTpbXSxzdGF0ZU51bWJlcjp0LnN0YXRlcy5sZW5ndGh9LG4pO3JldHVybiB0LnN0YXRlcy5wdXNoKGkpLGl9ZnVuY3Rpb24galIodCxlKXt0LnRyYW5zaXRpb25zLmxlbmd0aD09PTAmJih0LmVwc2lsb25Pbmx5VHJhbnNpdGlvbnM9ZS5pc0Vwc2lsb24oKSksdC50cmFuc2l0aW9ucy5wdXNoKGUpfWZ1bmN0aW9uIFNGZSh0LGUpe3Quc3RhdGVzLnNwbGljZSh0LnN0YXRlcy5pbmRleE9mKGUpLDEpfXZhciBkZixsRmUsUm9lLE1vZSxTZyxjRmUsdUZlLGhGZSxmRmUsSW9lLFAyLGtnLEIyLEVnLHpvZT1NKCgpPT57InVzZSBzdHJpY3QiO1dtKCk7R0woKTtnMCgpO28oeTAsImJ1aWxkQVROS2V5Iik7ZGY9MSxsRmU9MixSb2U9NCxNb2U9NSxTZz03LGNGZT04LHVGZT05LGhGZT0xMCxmRmU9MTEsSW9lPTEyLFAyPWNsYXNze3N0YXRpY3tvKHRoaXMsIkFic3RyYWN0VHJhbnNpdGlvbiIpfWNvbnN0cnVjdG9yKGUpe3RoaXMudGFyZ2V0PWV9aXNFcHNpbG9uKCl7cmV0dXJuITF9fSxrZz1jbGFzcyBleHRlbmRzIFAye3N0YXRpY3tvKHRoaXMsIkF0b21UcmFuc2l0aW9uIil9Y29uc3RydWN0b3IoZSxyKXtzdXBlcihlKSx0aGlzLnRva2VuVHlwZT1yfX0sQjI9Y2xhc3MgZXh0ZW5kcyBQMntzdGF0aWN7byh0aGlzLCJFcHNpbG9uVHJhbnNpdGlvbiIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUpfWlzRXBzaWxvbigpe3JldHVybiEwfX0sRWc9Y2xhc3MgZXh0ZW5kcyBQMntzdGF0aWN7byh0aGlzLCJSdWxlVHJhbnNpdGlvbiIpfWNvbnN0cnVjdG9yKGUscixuKXtzdXBlcihlKSx0aGlzLnJ1bGU9cix0aGlzLmZvbGxvd1N0YXRlPW59aXNFcHNpbG9uKCl7cmV0dXJuITB9fTtvKE9vZSwiY3JlYXRlQVROIik7byhkRmUsImNyZWF0ZVJ1bGVTdGFydEFuZFN0b3BBVE5TdGF0ZXMiKTtvKFBvZSwiYXRvbSIpO28ocEZlLCJyZXBldGl0aW9uIik7byhtRmUsInJlcGV0aXRpb25TZXAiKTtvKGdGZSwicmVwZXRpdGlvbk1hbmRhdG9yeSIpO28oeUZlLCJyZXBldGl0aW9uTWFuZGF0b3J5U2VwIik7byh2RmUsImFsdGVybmF0aW9uIik7byh4RmUsIm9wdGlvbiIpO28odjAsImJsb2NrIik7byhCb2UsInBsdXMiKTtvKEZvZSwic3RhciIpO28oYkZlLCJvcHRpb25hbCIpO28ocGYsImRlZmluZURlY2lzaW9uU3RhdGUiKTtvKENnLCJtYWtlQWx0cyIpO28od0ZlLCJnZXRQcm9kVHlwZSIpO28oVEZlLCJtYWtlQmxvY2siKTtvKFhSLCJ0b2tlblJlZiIpO28oa0ZlLCJydWxlUmVmIik7byhFRmUsImJ1aWxkUnVsZUhhbmRsZSIpO28oTmksImVwc2lsb24iKTtvKG9hLCJuZXdTdGF0ZSIpO28oalIsImFkZFRyYW5zaXRpb24iKTtvKFNGZSwicmVtb3ZlU3RhdGUiKX0pO2Z1bmN0aW9uIEtSKHQsZT0hMCl7cmV0dXJuYCR7ZT9gYSR7dC5hbHR9YDoiIn1zJHt0LnN0YXRlLnN0YXRlTnVtYmVyfToke3Quc3RhY2subWFwKHI9PnIuc3RhdGVOdW1iZXIudG9TdHJpbmcoKSkuam9pbigiXyIpfWB9dmFyIEYyLEFnLEdvZT1NKCgpPT57InVzZSBzdHJpY3QiO1dtKCk7RjI9e30sQWc9Y2xhc3N7c3RhdGlje28odGhpcywiQVROQ29uZmlnU2V0Iil9Y29uc3RydWN0b3IoKXt0aGlzLm1hcD17fSx0aGlzLmNvbmZpZ3M9W119Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5jb25maWdzLmxlbmd0aH1maW5hbGl6ZSgpe3RoaXMubWFwPXt9fWFkZChlKXtsZXQgcj1LUihlKTtyIGluIHRoaXMubWFwfHwodGhpcy5tYXBbcl09dGhpcy5jb25maWdzLmxlbmd0aCx0aGlzLmNvbmZpZ3MucHVzaChlKSl9Z2V0IGVsZW1lbnRzKCl7cmV0dXJuIHRoaXMuY29uZmlnc31nZXQgYWx0cygpe3JldHVybiBRZSh0aGlzLmNvbmZpZ3MsZT0+ZS5hbHQpfWdldCBrZXkoKXtsZXQgZT0iIjtmb3IobGV0IHIgaW4gdGhpcy5tYXApZSs9cisiOiI7cmV0dXJuIGV9fTtvKEtSLCJnZXRBVE5Db25maWdLZXkiKX0pO2Z1bmN0aW9uIENGZSh0LGUpe2xldCByPXt9O3JldHVybiBuPT57bGV0IGk9bi50b1N0cmluZygpLGE9cltpXTtyZXR1cm4gYSE9PXZvaWQgMHx8KGE9e2F0blN0YXJ0U3RhdGU6dCxkZWNpc2lvbjplLHN0YXRlczp7fX0scltpXT1hKSxhfX1mdW5jdGlvbiBWb2UodCxlPSEwKXtsZXQgcj1uZXcgU2V0O2ZvcihsZXQgbiBvZiB0KXtsZXQgaT1uZXcgU2V0O2ZvcihsZXQgYSBvZiBuKXtpZihhPT09dm9pZCAwKXtpZihlKWJyZWFrO3JldHVybiExfWxldCBzPVthLnRva2VuVHlwZUlkeF0uY29uY2F0KGEuY2F0ZWdvcnlNYXRjaGVzKTtmb3IobGV0IGwgb2YgcylpZihyLmhhcyhsKSl7aWYoIWkuaGFzKGwpKXJldHVybiExfWVsc2Ugci5hZGQobCksaS5hZGQobCl9fXJldHVybiEwfWZ1bmN0aW9uIEFGZSh0KXtsZXQgZT10LmRlY2lzaW9uU3RhdGVzLmxlbmd0aCxyPUFycmF5KGUpO2ZvcihsZXQgbj0wO248ZTtuKyspcltuXT1DRmUodC5kZWNpc2lvblN0YXRlc1tuXSxuKTtyZXR1cm4gcn1mdW5jdGlvbiBRUih0LGUscixuKXtsZXQgaT10W2VdKHIpLGE9aS5zdGFydDtpZihhPT09dm9pZCAwKXtsZXQgbD1GRmUoaS5hdG5TdGFydFN0YXRlKTthPVdvZShpLEhvZShsKSksaS5zdGFydD1hfXJldHVybiBfRmUuYXBwbHkodGhpcyxbaSxhLHIsbl0pfWZ1bmN0aW9uIF9GZSh0LGUscixuKXtsZXQgaT1lLGE9MSxzPVtdLGw9dGhpcy5MQShhKyspO2Zvcig7Oyl7bGV0IHU9SUZlKGksbCk7aWYodT09PXZvaWQgMCYmKHU9TEZlLmFwcGx5KHRoaXMsW3QsaSxsLGEscixuXSkpLHU9PT1GMilyZXR1cm4gTUZlKHMsaSxsKTtpZih1LmlzQWNjZXB0U3RhdGU9PT0hMClyZXR1cm4gdS5wcmVkaWN0aW9uO2k9dSxzLnB1c2gobCksbD10aGlzLkxBKGErKyl9fWZ1bmN0aW9uIExGZSh0LGUscixuLGksYSl7bGV0IHM9T0ZlKGUuY29uZmlncyxyLGkpO2lmKHMuc2l6ZT09PTApcmV0dXJuIFVvZSh0LGUscixGMiksRjI7bGV0IGw9SG9lKHMpLHU9QkZlKHMsaSk7aWYodSE9PXZvaWQgMClsLmlzQWNjZXB0U3RhdGU9ITAsbC5wcmVkaWN0aW9uPXUsbC5jb25maWdzLnVuaXF1ZUFsdD11O2Vsc2UgaWYoVkZlKHMpKXtsZXQgaD1CbChzLmFsdHMpO2wuaXNBY2NlcHRTdGF0ZT0hMCxsLnByZWRpY3Rpb249aCxsLmNvbmZpZ3MudW5pcXVlQWx0PWgsREZlLmFwcGx5KHRoaXMsW3QsbixzLmFsdHMsYV0pfXJldHVybiBsPVVvZSh0LGUscixsKSxsfWZ1bmN0aW9uIERGZSh0LGUscixuKXtsZXQgaT1bXTtmb3IobGV0IGg9MTtoPD1lO2grKylpLnB1c2godGhpcy5MQShoKS50b2tlblR5cGUpO2xldCBhPXQuYXRuU3RhcnRTdGF0ZSxzPWEucnVsZSxsPWEucHJvZHVjdGlvbix1PU5GZSh7dG9wTGV2ZWxSdWxlOnMsYW1iaWd1aXR5SW5kaWNlczpyLHByb2R1Y3Rpb246bCxwcmVmaXhQYXRoOml9KTtuKHUpfWZ1bmN0aW9uIE5GZSh0KXtsZXQgZT1RZSh0LnByZWZpeFBhdGgsaT0+cXUoaSkpLmpvaW4oIiwgIikscj10LnByb2R1Y3Rpb24uaWR4PT09MD8iIjp0LnByb2R1Y3Rpb24uaWR4LG49YEFtYmlndW91cyBBbHRlcm5hdGl2ZXMgRGV0ZWN0ZWQ6IDwke3QuYW1iaWd1aXR5SW5kaWNlcy5qb2luKCIsICIpfT4gaW4gPCR7UkZlKHQucHJvZHVjdGlvbil9JHtyfT4gaW5zaWRlIDwke3QudG9wTGV2ZWxSdWxlLm5hbWV9PiBSdWxlLAo8JHtlfT4gbWF5IGFwcGVhcnMgYXMgYSBwcmVmaXggcGF0aCBpbiBhbGwgdGhlc2UgYWx0ZXJuYXRpdmVzLgpgO3JldHVybiBuPW4rYFNlZTogaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2dyYW1tYXJfZXJyb3JzLmh0bWwjQU1CSUdVT1VTX0FMVEVSTkFUSVZFUwpGb3IgRnVydGhlciBkZXRhaWxzLmAsbn1mdW5jdGlvbiBSRmUodCl7aWYodCBpbnN0YW5jZW9mIG5uKXJldHVybiJTVUJSVUxFIjtpZih0IGluc3RhbmNlb2YgYW4pcmV0dXJuIk9QVElPTiI7aWYodCBpbnN0YW5jZW9mIHduKXJldHVybiJPUiI7aWYodCBpbnN0YW5jZW9mIExuKXJldHVybiJBVF9MRUFTVF9PTkUiO2lmKHQgaW5zdGFuY2VvZiBEbilyZXR1cm4iQVRfTEVBU1RfT05FX1NFUCI7aWYodCBpbnN0YW5jZW9mIGJuKXJldHVybiJNQU5ZX1NFUCI7aWYodCBpbnN0YW5jZW9mIERyKXJldHVybiJNQU5ZIjtpZih0IGluc3RhbmNlb2YgRXIpcmV0dXJuIkNPTlNVTUUiO3Rocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfWZ1bmN0aW9uIE1GZSh0LGUscil7bGV0IG49YmEoZS5jb25maWdzLmVsZW1lbnRzLGE9PmEuc3RhdGUudHJhbnNpdGlvbnMpLGk9UXJlKG4uZmlsdGVyKGE9PmEgaW5zdGFuY2VvZiBrZykubWFwKGE9PmEudG9rZW5UeXBlKSxhPT5hLnRva2VuVHlwZUlkeCk7cmV0dXJue2FjdHVhbFRva2VuOnIscG9zc2libGVUb2tlblR5cGVzOmksdG9rZW5QYXRoOnR9fWZ1bmN0aW9uIElGZSh0LGUpe3JldHVybiB0LmVkZ2VzW2UudG9rZW5UeXBlSWR4XX1mdW5jdGlvbiBPRmUodCxlLHIpe2xldCBuPW5ldyBBZyxpPVtdO2ZvcihsZXQgcyBvZiB0LmVsZW1lbnRzKXtpZihyLmlzKHMuYWx0KT09PSExKWNvbnRpbnVlO2lmKHMuc3RhdGUudHlwZT09PVNnKXtpLnB1c2gocyk7Y29udGludWV9bGV0IGw9cy5zdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGg7Zm9yKGxldCB1PTA7dTxsO3UrKyl7bGV0IGg9cy5zdGF0ZS50cmFuc2l0aW9uc1t1XSxmPVBGZShoLGUpO2YhPT12b2lkIDAmJm4uYWRkKHtzdGF0ZTpmLGFsdDpzLmFsdCxzdGFjazpzLnN0YWNrfSl9fWxldCBhO2lmKGkubGVuZ3RoPT09MCYmbi5zaXplPT09MSYmKGE9biksYT09PXZvaWQgMCl7YT1uZXcgQWc7Zm9yKGxldCBzIG9mIG4uZWxlbWVudHMpUmsocyxhKX1pZihpLmxlbmd0aD4wJiYhR0ZlKGEpKWZvcihsZXQgcyBvZiBpKWEuYWRkKHMpO3JldHVybiBhfWZ1bmN0aW9uIFBGZSh0LGUpe2lmKHQgaW5zdGFuY2VvZiBrZyYmVDIoZSx0LnRva2VuVHlwZSkpcmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIEJGZSh0LGUpe2xldCByO2ZvcihsZXQgbiBvZiB0LmVsZW1lbnRzKWlmKGUuaXMobi5hbHQpPT09ITApe2lmKHI9PT12b2lkIDApcj1uLmFsdDtlbHNlIGlmKHIhPT1uLmFsdClyZXR1cm59cmV0dXJuIHJ9ZnVuY3Rpb24gSG9lKHQpe3JldHVybntjb25maWdzOnQsZWRnZXM6e30saXNBY2NlcHRTdGF0ZTohMSxwcmVkaWN0aW9uOi0xfX1mdW5jdGlvbiBVb2UodCxlLHIsbil7cmV0dXJuIG49V29lKHQsbiksZS5lZGdlc1tyLnRva2VuVHlwZUlkeF09bixufWZ1bmN0aW9uIFdvZSh0LGUpe2lmKGU9PT1GMilyZXR1cm4gZTtsZXQgcj1lLmNvbmZpZ3Mua2V5LG49dC5zdGF0ZXNbcl07cmV0dXJuIG4hPT12b2lkIDA/bjooZS5jb25maWdzLmZpbmFsaXplKCksdC5zdGF0ZXNbcl09ZSxlKX1mdW5jdGlvbiBGRmUodCl7bGV0IGU9bmV3IEFnLHI9dC50cmFuc2l0aW9ucy5sZW5ndGg7Zm9yKGxldCBuPTA7bjxyO24rKyl7bGV0IGE9e3N0YXRlOnQudHJhbnNpdGlvbnNbbl0udGFyZ2V0LGFsdDpuLHN0YWNrOltdfTtSayhhLGUpfXJldHVybiBlfWZ1bmN0aW9uIFJrKHQsZSl7bGV0IHI9dC5zdGF0ZTtpZihyLnR5cGU9PT1TZyl7aWYodC5zdGFjay5sZW5ndGg+MCl7bGV0IGk9Wy4uLnQuc3RhY2tdLHM9e3N0YXRlOmkucG9wKCksYWx0OnQuYWx0LHN0YWNrOml9O1JrKHMsZSl9ZWxzZSBlLmFkZCh0KTtyZXR1cm59ci5lcHNpbG9uT25seVRyYW5zaXRpb25zfHxlLmFkZCh0KTtsZXQgbj1yLnRyYW5zaXRpb25zLmxlbmd0aDtmb3IobGV0IGk9MDtpPG47aSsrKXtsZXQgYT1yLnRyYW5zaXRpb25zW2ldLHM9ekZlKHQsYSk7cyE9PXZvaWQgMCYmUmsocyxlKX19ZnVuY3Rpb24gekZlKHQsZSl7aWYoZSBpbnN0YW5jZW9mIEIyKXJldHVybntzdGF0ZTplLnRhcmdldCxhbHQ6dC5hbHQsc3RhY2s6dC5zdGFja307aWYoZSBpbnN0YW5jZW9mIEVnKXtsZXQgcj1bLi4udC5zdGFjayxlLmZvbGxvd1N0YXRlXTtyZXR1cm57c3RhdGU6ZS50YXJnZXQsYWx0OnQuYWx0LHN0YWNrOnJ9fX1mdW5jdGlvbiBHRmUodCl7Zm9yKGxldCBlIG9mIHQuZWxlbWVudHMpaWYoZS5zdGF0ZS50eXBlPT09U2cpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gJEZlKHQpe2ZvcihsZXQgZSBvZiB0LmVsZW1lbnRzKWlmKGUuc3RhdGUudHlwZSE9PVNnKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFZGZSh0KXtpZigkRmUodCkpcmV0dXJuITA7bGV0IGU9VUZlKHQuZWxlbWVudHMpO3JldHVybiBIRmUoZSkmJiFXRmUoZSl9ZnVuY3Rpb24gVUZlKHQpe2xldCBlPW5ldyBNYXA7Zm9yKGxldCByIG9mIHQpe2xldCBuPUtSKHIsITEpLGk9ZS5nZXQobik7aT09PXZvaWQgMCYmKGk9e30sZS5zZXQobixpKSksaVtyLmFsdF09ITB9cmV0dXJuIGV9ZnVuY3Rpb24gSEZlKHQpe2ZvcihsZXQgZSBvZiBBcnJheS5mcm9tKHQudmFsdWVzKCkpKWlmKE9iamVjdC5rZXlzKGUpLmxlbmd0aD4xKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFdGZSh0KXtmb3IobGV0IGUgb2YgQXJyYXkuZnJvbSh0LnZhbHVlcygpKSlpZihPYmplY3Qua2V5cyhlKS5sZW5ndGg9PT0xKXJldHVybiEwO3JldHVybiExfXZhciBOaywkb2UsejIsWW9lPU0oKCk9PnsidXNlIHN0cmljdCI7ZzAoKTt6b2UoKTtHb2UoKTtYTCgpO1ZMKCk7WnJlKCk7V20oKTtfdygpO25UKCk7bFQoKTtaTCgpO28oQ0ZlLCJjcmVhdGVERkFDYWNoZSIpO05rPWNsYXNze3N0YXRpY3tvKHRoaXMsIlByZWRpY2F0ZVNldCIpfWNvbnN0cnVjdG9yKCl7dGhpcy5wcmVkaWNhdGVzPVtdfWlzKGUpe3JldHVybiBlPj10aGlzLnByZWRpY2F0ZXMubGVuZ3RofHx0aGlzLnByZWRpY2F0ZXNbZV19c2V0KGUscil7dGhpcy5wcmVkaWNhdGVzW2VdPXJ9dG9TdHJpbmcoKXtsZXQgZT0iIixyPXRoaXMucHJlZGljYXRlcy5sZW5ndGg7Zm9yKGxldCBuPTA7bjxyO24rKyllKz10aGlzLnByZWRpY2F0ZXNbbl09PT0hMD8iMSI6IjAiO3JldHVybiBlfX0sJG9lPW5ldyBOayx6Mj1jbGFzcyBleHRlbmRzIGp1e3N0YXRpY3tvKHRoaXMsIkxMU3Rhckxvb2thaGVhZFN0cmF0ZWd5Iil9Y29uc3RydWN0b3IoZSl7dmFyIHI7c3VwZXIoKSx0aGlzLmxvZ2dpbmc9KHI9ZT8ubG9nZ2luZykhPT1udWxsJiZyIT09dm9pZCAwP3I6bj0+Y29uc29sZS5sb2cobil9aW5pdGlhbGl6ZShlKXt0aGlzLmF0bj1Pb2UoZS5ydWxlcyksdGhpcy5kZmFzPUFGZSh0aGlzLmF0bil9dmFsaWRhdGVBbWJpZ3VvdXNBbHRlcm5hdGlvbkFsdGVybmF0aXZlcygpe3JldHVybltdfXZhbGlkYXRlRW1wdHlPckFsdGVybmF0aXZlcygpe3JldHVybltdfWJ1aWxkTG9va2FoZWFkRm9yQWx0ZXJuYXRpb24oZSl7bGV0e3Byb2RPY2N1cnJlbmNlOnIscnVsZTpuLGhhc1ByZWRpY2F0ZXM6aSxkeW5hbWljVG9rZW5zRW5hYmxlZDphfT1lLHM9dGhpcy5kZmFzLGw9dGhpcy5sb2dnaW5nLHU9eTAobiwiQWx0ZXJuYXRpb24iLHIpLGY9dGhpcy5hdG4uZGVjaXNpb25NYXBbdV0uZGVjaXNpb24sZD1RZShjayh7bWF4TG9va2FoZWFkOjEsb2NjdXJyZW5jZTpyLHByb2RUeXBlOiJBbHRlcm5hdGlvbiIscnVsZTpufSkscD0+UWUocCxtPT5tWzBdKSk7aWYoVm9lKGQsITEpJiYhYSl7bGV0IHA9cXIoZCwobSxnLHkpPT4oU2UoZyx2PT57diYmKG1bdi50b2tlblR5cGVJZHhdPXksU2Uodi5jYXRlZ29yeU1hdGNoZXMseD0+e21beF09eX0pKX0pLG0pLHt9KTtyZXR1cm4gaT9mdW5jdGlvbihtKXt2YXIgZztsZXQgeT10aGlzLkxBKDEpLHY9cFt5LnRva2VuVHlwZUlkeF07aWYobSE9PXZvaWQgMCYmdiE9PXZvaWQgMCl7bGV0IHg9KGc9bVt2XSk9PT1udWxsfHxnPT09dm9pZCAwP3ZvaWQgMDpnLkdBVEU7aWYoeCE9PXZvaWQgMCYmeC5jYWxsKHRoaXMpPT09ITEpcmV0dXJufXJldHVybiB2fTpmdW5jdGlvbigpe2xldCBtPXRoaXMuTEEoMSk7cmV0dXJuIHBbbS50b2tlblR5cGVJZHhdfX1lbHNlIHJldHVybiBpP2Z1bmN0aW9uKHApe2xldCBtPW5ldyBOayxnPXA9PT12b2lkIDA/MDpwLmxlbmd0aDtmb3IobGV0IHY9MDt2PGc7disrKXtsZXQgeD1wPy5bdl0uR0FURTttLnNldCh2LHg9PT12b2lkIDB8fHguY2FsbCh0aGlzKSl9bGV0IHk9UVIuY2FsbCh0aGlzLHMsZixtLGwpO3JldHVybiB0eXBlb2YgeT09Im51bWJlciI/eTp2b2lkIDB9OmZ1bmN0aW9uKCl7bGV0IHA9UVIuY2FsbCh0aGlzLHMsZiwkb2UsbCk7cmV0dXJuIHR5cGVvZiBwPT0ibnVtYmVyIj9wOnZvaWQgMH19YnVpbGRMb29rYWhlYWRGb3JPcHRpb25hbChlKXtsZXR7cHJvZE9jY3VycmVuY2U6cixydWxlOm4scHJvZFR5cGU6aSxkeW5hbWljVG9rZW5zRW5hYmxlZDphfT1lLHM9dGhpcy5kZmFzLGw9dGhpcy5sb2dnaW5nLHU9eTAobixpLHIpLGY9dGhpcy5hdG4uZGVjaXNpb25NYXBbdV0uZGVjaXNpb24sZD1RZShjayh7bWF4TG9va2FoZWFkOjEsb2NjdXJyZW5jZTpyLHByb2RUeXBlOmkscnVsZTpufSkscD0+UWUocCxtPT5tWzBdKSk7aWYoVm9lKGQpJiZkWzBdWzBdJiYhYSl7bGV0IHA9ZFswXSxtPVdyKHApO2lmKG0ubGVuZ3RoPT09MSYmY3IobVswXS5jYXRlZ29yeU1hdGNoZXMpKXtsZXQgeT1tWzBdLnRva2VuVHlwZUlkeDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5MQSgxKS50b2tlblR5cGVJZHg9PT15fX1lbHNle2xldCBnPXFyKG0sKHksdik9Pih2IT09dm9pZCAwJiYoeVt2LnRva2VuVHlwZUlkeF09ITAsU2Uodi5jYXRlZ29yeU1hdGNoZXMseD0+e3lbeF09ITB9KSkseSkse30pO3JldHVybiBmdW5jdGlvbigpe2xldCB5PXRoaXMuTEEoMSk7cmV0dXJuIGdbeS50b2tlblR5cGVJZHhdPT09ITB9fX1yZXR1cm4gZnVuY3Rpb24oKXtsZXQgcD1RUi5jYWxsKHRoaXMscyxmLCRvZSxsKTtyZXR1cm4gdHlwZW9mIHA9PSJvYmplY3QiPyExOnA9PT0wfX19O28oVm9lLCJpc0xMMVNlcXVlbmNlIik7byhBRmUsImluaXRBVE5TaW11bGF0b3IiKTtvKFFSLCJhZGFwdGl2ZVByZWRpY3QiKTtvKF9GZSwicGVyZm9ybUxvb2thaGVhZCIpO28oTEZlLCJjb21wdXRlTG9va2FoZWFkVGFyZ2V0Iik7byhERmUsInJlcG9ydExvb2thaGVhZEFtYmlndWl0eSIpO28oTkZlLCJidWlsZEFtYmlndWl0eUVycm9yIik7byhSRmUsImdldFByb2R1Y3Rpb25Ec2xOYW1lIik7byhNRmUsImJ1aWxkQWRhcHRpdmVQcmVkaWN0RXJyb3IiKTtvKElGZSwiZ2V0RXhpc3RpbmdUYXJnZXRTdGF0ZSIpO28oT0ZlLCJjb21wdXRlUmVhY2hTZXQiKTtvKFBGZSwiZ2V0UmVhY2hhYmxlVGFyZ2V0Iik7byhCRmUsImdldFVuaXF1ZUFsdCIpO28oSG9lLCJuZXdERkFTdGF0ZSIpO28oVW9lLCJhZGRERkFFZGdlIik7byhXb2UsImFkZERGQVN0YXRlIik7byhGRmUsImNvbXB1dGVTdGFydFN0YXRlIik7byhSaywiY2xvc3VyZSIpO28oekZlLCJnZXRFcHNpbG9uVGFyZ2V0Iik7byhHRmUsImhhc0NvbmZpZ0luUnVsZVN0b3BTdGF0ZSIpO28oJEZlLCJhbGxDb25maWdzSW5SdWxlU3RvcFN0YXRlcyIpO28oVkZlLCJoYXNDb25mbGljdFRlcm1pbmF0aW5nUHJlZGljdGlvbiIpO28oVUZlLCJnZXRDb25mbGljdGluZ0FsdFNldHMiKTtvKEhGZSwiaGFzQ29uZmxpY3RpbmdBbHRTZXQiKTtvKFdGZSwiaGFzU3RhdGVBc3NvY2lhdGVkV2l0aE9uZUFsdCIpfSk7dmFyIHFvZT1NKCgpPT57InVzZSBzdHJpY3QiO1lvZSgpfSk7dmFyIFhvZSxaUixqb2UsTWssWHIsTnIsSWssS29lLEpSLFFvZSxab2UsSm9lLGVsZSxlTSx0bGUscmxlLG5sZSxPayxfZyxMZyx0TSxEZyxpbGUsck0sbk0saU0sYU0sc00sYWxlLHNsZSxvTSxvbGUsbE0sRzIsbGxlLGNsZSx1bGUsaGxlLGZsZSxkbGUscGxlLG1sZSxQayxnbGUseWxlLHZsZSx4bGUsYmxlLHdsZSxUbGUsa2xlLEVsZSxTbGUsQ2xlLEJrLEFsZSxfbGUsTGxlLERsZSxObGUsUmxlLE1sZSxJbGUsT2xlLFBsZSxCbGUsRmxlLHpsZSxjTSx1TSxHbGUsJGxlLFZsZSxVbGUsSGxlLFdsZSxZbGUscWxlLFhsZSxoTSx6ZSxmTT1NKCgpPT57InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIpe3JldHVybiB0eXBlb2Ygcj09InN0cmluZyJ9byhlLCJpcyIpLHQuaXM9ZX0pKFhvZXx8KFhvZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIpe3JldHVybiB0eXBlb2Ygcj09InN0cmluZyJ9byhlLCJpcyIpLHQuaXM9ZX0pKFpSfHwoWlI9e30pKTsoZnVuY3Rpb24odCl7dC5NSU5fVkFMVUU9LTIxNDc0ODM2NDgsdC5NQVhfVkFMVUU9MjE0NzQ4MzY0NztmdW5jdGlvbiBlKHIpe3JldHVybiB0eXBlb2Ygcj09Im51bWJlciImJnQuTUlOX1ZBTFVFPD1yJiZyPD10Lk1BWF9WQUxVRX1vKGUsImlzIiksdC5pcz1lfSkoam9lfHwoam9lPXt9KSk7KGZ1bmN0aW9uKHQpe3QuTUlOX1ZBTFVFPTAsdC5NQVhfVkFMVUU9MjE0NzQ4MzY0NztmdW5jdGlvbiBlKHIpe3JldHVybiB0eXBlb2Ygcj09Im51bWJlciImJnQuTUlOX1ZBTFVFPD1yJiZyPD10Lk1BWF9WQUxVRX1vKGUsImlzIiksdC5pcz1lfSkoTWt8fChNaz17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSl7cmV0dXJuIG49PT1OdW1iZXIuTUFYX1ZBTFVFJiYobj1Nay5NQVhfVkFMVUUpLGk9PT1OdW1iZXIuTUFYX1ZBTFVFJiYoaT1Nay5NQVhfVkFMVUUpLHtsaW5lOm4sY2hhcmFjdGVyOml9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIHplLm9iamVjdExpdGVyYWwoaSkmJnplLnVpbnRlZ2VyKGkubGluZSkmJnplLnVpbnRlZ2VyKGkuY2hhcmFjdGVyKX1vKHIsImlzIiksdC5pcz1yfSkoWHJ8fChYcj17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhLHMpe2lmKHplLnVpbnRlZ2VyKG4pJiZ6ZS51aW50ZWdlcihpKSYmemUudWludGVnZXIoYSkmJnplLnVpbnRlZ2VyKHMpKXJldHVybntzdGFydDpYci5jcmVhdGUobixpKSxlbmQ6WHIuY3JlYXRlKGEscyl9O2lmKFhyLmlzKG4pJiZYci5pcyhpKSlyZXR1cm57c3RhcnQ6bixlbmQ6aX07dGhyb3cgbmV3IEVycm9yKGBSYW5nZSNjcmVhdGUgY2FsbGVkIHdpdGggaW52YWxpZCBhcmd1bWVudHNbJHtufSwgJHtpfSwgJHthfSwgJHtzfV1gKX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiB6ZS5vYmplY3RMaXRlcmFsKGkpJiZYci5pcyhpLnN0YXJ0KSYmWHIuaXMoaS5lbmQpfW8ociwiaXMiKSx0LmlzPXJ9KShOcnx8KE5yPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpKXtyZXR1cm57dXJpOm4scmFuZ2U6aX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gemUub2JqZWN0TGl0ZXJhbChpKSYmTnIuaXMoaS5yYW5nZSkmJih6ZS5zdHJpbmcoaS51cmkpfHx6ZS51bmRlZmluZWQoaS51cmkpKX1vKHIsImlzIiksdC5pcz1yfSkoSWt8fChJaz17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhLHMpe3JldHVybnt0YXJnZXRVcmk6bix0YXJnZXRSYW5nZTppLHRhcmdldFNlbGVjdGlvblJhbmdlOmEsb3JpZ2luU2VsZWN0aW9uUmFuZ2U6c319byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gemUub2JqZWN0TGl0ZXJhbChpKSYmTnIuaXMoaS50YXJnZXRSYW5nZSkmJnplLnN0cmluZyhpLnRhcmdldFVyaSkmJk5yLmlzKGkudGFyZ2V0U2VsZWN0aW9uUmFuZ2UpJiYoTnIuaXMoaS5vcmlnaW5TZWxlY3Rpb25SYW5nZSl8fHplLnVuZGVmaW5lZChpLm9yaWdpblNlbGVjdGlvblJhbmdlKSl9byhyLCJpcyIpLHQuaXM9cn0pKEtvZXx8KEtvZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhLHMpe3JldHVybntyZWQ6bixncmVlbjppLGJsdWU6YSxhbHBoYTpzfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiB6ZS5vYmplY3RMaXRlcmFsKGkpJiZ6ZS5udW1iZXJSYW5nZShpLnJlZCwwLDEpJiZ6ZS5udW1iZXJSYW5nZShpLmdyZWVuLDAsMSkmJnplLm51bWJlclJhbmdlKGkuYmx1ZSwwLDEpJiZ6ZS5udW1iZXJSYW5nZShpLmFscGhhLDAsMSl9byhyLCJpcyIpLHQuaXM9cn0pKEpSfHwoSlI9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3JldHVybntyYW5nZTpuLGNvbG9yOml9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIHplLm9iamVjdExpdGVyYWwoaSkmJk5yLmlzKGkucmFuZ2UpJiZKUi5pcyhpLmNvbG9yKX1vKHIsImlzIiksdC5pcz1yfSkoUW9lfHwoUW9lPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEpe3JldHVybntsYWJlbDpuLHRleHRFZGl0OmksYWRkaXRpb25hbFRleHRFZGl0czphfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiB6ZS5vYmplY3RMaXRlcmFsKGkpJiZ6ZS5zdHJpbmcoaS5sYWJlbCkmJih6ZS51bmRlZmluZWQoaS50ZXh0RWRpdCl8fExnLmlzKGkpKSYmKHplLnVuZGVmaW5lZChpLmFkZGl0aW9uYWxUZXh0RWRpdHMpfHx6ZS50eXBlZEFycmF5KGkuYWRkaXRpb25hbFRleHRFZGl0cyxMZy5pcykpfW8ociwiaXMiKSx0LmlzPXJ9KShab2V8fChab2U9e30pKTsoZnVuY3Rpb24odCl7dC5Db21tZW50PSJjb21tZW50Iix0LkltcG9ydHM9ImltcG9ydHMiLHQuUmVnaW9uPSJyZWdpb24ifSkoSm9lfHwoSm9lPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEscyxsLHUpe2xldCBoPXtzdGFydExpbmU6bixlbmRMaW5lOml9O3JldHVybiB6ZS5kZWZpbmVkKGEpJiYoaC5zdGFydENoYXJhY3Rlcj1hKSx6ZS5kZWZpbmVkKHMpJiYoaC5lbmRDaGFyYWN0ZXI9cyksemUuZGVmaW5lZChsKSYmKGgua2luZD1sKSx6ZS5kZWZpbmVkKHUpJiYoaC5jb2xsYXBzZWRUZXh0PXUpLGh9byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gemUub2JqZWN0TGl0ZXJhbChpKSYmemUudWludGVnZXIoaS5zdGFydExpbmUpJiZ6ZS51aW50ZWdlcihpLnN0YXJ0TGluZSkmJih6ZS51bmRlZmluZWQoaS5zdGFydENoYXJhY3Rlcil8fHplLnVpbnRlZ2VyKGkuc3RhcnRDaGFyYWN0ZXIpKSYmKHplLnVuZGVmaW5lZChpLmVuZENoYXJhY3Rlcil8fHplLnVpbnRlZ2VyKGkuZW5kQ2hhcmFjdGVyKSkmJih6ZS51bmRlZmluZWQoaS5raW5kKXx8emUuc3RyaW5nKGkua2luZCkpfW8ociwiaXMiKSx0LmlzPXJ9KShlbGV8fChlbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3JldHVybntsb2NhdGlvbjpuLG1lc3NhZ2U6aX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gemUuZGVmaW5lZChpKSYmSWsuaXMoaS5sb2NhdGlvbikmJnplLnN0cmluZyhpLm1lc3NhZ2UpfW8ociwiaXMiKSx0LmlzPXJ9KShlTXx8KGVNPXt9KSk7KGZ1bmN0aW9uKHQpe3QuRXJyb3I9MSx0Lldhcm5pbmc9Mix0LkluZm9ybWF0aW9uPTMsdC5IaW50PTR9KSh0bGV8fCh0bGU9e30pKTsoZnVuY3Rpb24odCl7dC5Vbm5lY2Vzc2FyeT0xLHQuRGVwcmVjYXRlZD0yfSkocmxlfHwocmxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocil7bGV0IG49cjtyZXR1cm4gemUub2JqZWN0TGl0ZXJhbChuKSYmemUuc3RyaW5nKG4uaHJlZil9byhlLCJpcyIpLHQuaXM9ZX0pKG5sZXx8KG5sZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhLHMsbCx1KXtsZXQgaD17cmFuZ2U6bixtZXNzYWdlOml9O3JldHVybiB6ZS5kZWZpbmVkKGEpJiYoaC5zZXZlcml0eT1hKSx6ZS5kZWZpbmVkKHMpJiYoaC5jb2RlPXMpLHplLmRlZmluZWQobCkmJihoLnNvdXJjZT1sKSx6ZS5kZWZpbmVkKHUpJiYoaC5yZWxhdGVkSW5mb3JtYXRpb249dSksaH1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXt2YXIgaTtsZXQgYT1uO3JldHVybiB6ZS5kZWZpbmVkKGEpJiZOci5pcyhhLnJhbmdlKSYmemUuc3RyaW5nKGEubWVzc2FnZSkmJih6ZS5udW1iZXIoYS5zZXZlcml0eSl8fHplLnVuZGVmaW5lZChhLnNldmVyaXR5KSkmJih6ZS5pbnRlZ2VyKGEuY29kZSl8fHplLnN0cmluZyhhLmNvZGUpfHx6ZS51bmRlZmluZWQoYS5jb2RlKSkmJih6ZS51bmRlZmluZWQoYS5jb2RlRGVzY3JpcHRpb24pfHx6ZS5zdHJpbmcoKGk9YS5jb2RlRGVzY3JpcHRpb24pPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS5ocmVmKSkmJih6ZS5zdHJpbmcoYS5zb3VyY2UpfHx6ZS51bmRlZmluZWQoYS5zb3VyY2UpKSYmKHplLnVuZGVmaW5lZChhLnJlbGF0ZWRJbmZvcm1hdGlvbil8fHplLnR5cGVkQXJyYXkoYS5yZWxhdGVkSW5mb3JtYXRpb24sZU0uaXMpKX1vKHIsImlzIiksdC5pcz1yfSkoT2t8fChPaz17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSwuLi5hKXtsZXQgcz17dGl0bGU6bixjb21tYW5kOml9O3JldHVybiB6ZS5kZWZpbmVkKGEpJiZhLmxlbmd0aD4wJiYocy5hcmd1bWVudHM9YSksc31vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiB6ZS5kZWZpbmVkKGkpJiZ6ZS5zdHJpbmcoaS50aXRsZSkmJnplLnN0cmluZyhpLmNvbW1hbmQpfW8ociwiaXMiKSx0LmlzPXJ9KShfZ3x8KF9nPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoYSxzKXtyZXR1cm57cmFuZ2U6YSxuZXdUZXh0OnN9fW8oZSwicmVwbGFjZSIpLHQucmVwbGFjZT1lO2Z1bmN0aW9uIHIoYSxzKXtyZXR1cm57cmFuZ2U6e3N0YXJ0OmEsZW5kOmF9LG5ld1RleHQ6c319byhyLCJpbnNlcnQiKSx0Lmluc2VydD1yO2Z1bmN0aW9uIG4oYSl7cmV0dXJue3JhbmdlOmEsbmV3VGV4dDoiIn19byhuLCJkZWwiKSx0LmRlbD1uO2Z1bmN0aW9uIGkoYSl7bGV0IHM9YTtyZXR1cm4gemUub2JqZWN0TGl0ZXJhbChzKSYmemUuc3RyaW5nKHMubmV3VGV4dCkmJk5yLmlzKHMucmFuZ2UpfW8oaSwiaXMiKSx0LmlzPWl9KShMZ3x8KExnPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEpe2xldCBzPXtsYWJlbDpufTtyZXR1cm4gaSE9PXZvaWQgMCYmKHMubmVlZHNDb25maXJtYXRpb249aSksYSE9PXZvaWQgMCYmKHMuZGVzY3JpcHRpb249YSksc31vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiB6ZS5vYmplY3RMaXRlcmFsKGkpJiZ6ZS5zdHJpbmcoaS5sYWJlbCkmJih6ZS5ib29sZWFuKGkubmVlZHNDb25maXJtYXRpb24pfHxpLm5lZWRzQ29uZmlybWF0aW9uPT09dm9pZCAwKSYmKHplLnN0cmluZyhpLmRlc2NyaXB0aW9uKXx8aS5kZXNjcmlwdGlvbj09PXZvaWQgMCl9byhyLCJpcyIpLHQuaXM9cn0pKHRNfHwodE09e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiB6ZS5zdHJpbmcobil9byhlLCJpcyIpLHQuaXM9ZX0pKERnfHwoRGc9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShhLHMsbCl7cmV0dXJue3JhbmdlOmEsbmV3VGV4dDpzLGFubm90YXRpb25JZDpsfX1vKGUsInJlcGxhY2UiKSx0LnJlcGxhY2U9ZTtmdW5jdGlvbiByKGEscyxsKXtyZXR1cm57cmFuZ2U6e3N0YXJ0OmEsZW5kOmF9LG5ld1RleHQ6cyxhbm5vdGF0aW9uSWQ6bH19byhyLCJpbnNlcnQiKSx0Lmluc2VydD1yO2Z1bmN0aW9uIG4oYSxzKXtyZXR1cm57cmFuZ2U6YSxuZXdUZXh0OiIiLGFubm90YXRpb25JZDpzfX1vKG4sImRlbCIpLHQuZGVsPW47ZnVuY3Rpb24gaShhKXtsZXQgcz1hO3JldHVybiBMZy5pcyhzKSYmKHRNLmlzKHMuYW5ub3RhdGlvbklkKXx8RGcuaXMocy5hbm5vdGF0aW9uSWQpKX1vKGksImlzIiksdC5pcz1pfSkoaWxlfHwoaWxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpKXtyZXR1cm57dGV4dERvY3VtZW50Om4sZWRpdHM6aX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gemUuZGVmaW5lZChpKSYmb00uaXMoaS50ZXh0RG9jdW1lbnQpJiZBcnJheS5pc0FycmF5KGkuZWRpdHMpfW8ociwiaXMiKSx0LmlzPXJ9KShyTXx8KHJNPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEpe2xldCBzPXtraW5kOiJjcmVhdGUiLHVyaTpufTtyZXR1cm4gaSE9PXZvaWQgMCYmKGkub3ZlcndyaXRlIT09dm9pZCAwfHxpLmlnbm9yZUlmRXhpc3RzIT09dm9pZCAwKSYmKHMub3B0aW9ucz1pKSxhIT09dm9pZCAwJiYocy5hbm5vdGF0aW9uSWQ9YSksc31vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiBpJiZpLmtpbmQ9PT0iY3JlYXRlIiYmemUuc3RyaW5nKGkudXJpKSYmKGkub3B0aW9ucz09PXZvaWQgMHx8KGkub3B0aW9ucy5vdmVyd3JpdGU9PT12b2lkIDB8fHplLmJvb2xlYW4oaS5vcHRpb25zLm92ZXJ3cml0ZSkpJiYoaS5vcHRpb25zLmlnbm9yZUlmRXhpc3RzPT09dm9pZCAwfHx6ZS5ib29sZWFuKGkub3B0aW9ucy5pZ25vcmVJZkV4aXN0cykpKSYmKGkuYW5ub3RhdGlvbklkPT09dm9pZCAwfHxEZy5pcyhpLmFubm90YXRpb25JZCkpfW8ociwiaXMiKSx0LmlzPXJ9KShuTXx8KG5NPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEscyl7bGV0IGw9e2tpbmQ6InJlbmFtZSIsb2xkVXJpOm4sbmV3VXJpOml9O3JldHVybiBhIT09dm9pZCAwJiYoYS5vdmVyd3JpdGUhPT12b2lkIDB8fGEuaWdub3JlSWZFeGlzdHMhPT12b2lkIDApJiYobC5vcHRpb25zPWEpLHMhPT12b2lkIDAmJihsLmFubm90YXRpb25JZD1zKSxsfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIGkmJmkua2luZD09PSJyZW5hbWUiJiZ6ZS5zdHJpbmcoaS5vbGRVcmkpJiZ6ZS5zdHJpbmcoaS5uZXdVcmkpJiYoaS5vcHRpb25zPT09dm9pZCAwfHwoaS5vcHRpb25zLm92ZXJ3cml0ZT09PXZvaWQgMHx8emUuYm9vbGVhbihpLm9wdGlvbnMub3ZlcndyaXRlKSkmJihpLm9wdGlvbnMuaWdub3JlSWZFeGlzdHM9PT12b2lkIDB8fHplLmJvb2xlYW4oaS5vcHRpb25zLmlnbm9yZUlmRXhpc3RzKSkpJiYoaS5hbm5vdGF0aW9uSWQ9PT12b2lkIDB8fERnLmlzKGkuYW5ub3RhdGlvbklkKSl9byhyLCJpcyIpLHQuaXM9cn0pKGlNfHwoaU09e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGksYSl7bGV0IHM9e2tpbmQ6ImRlbGV0ZSIsdXJpOm59O3JldHVybiBpIT09dm9pZCAwJiYoaS5yZWN1cnNpdmUhPT12b2lkIDB8fGkuaWdub3JlSWZOb3RFeGlzdHMhPT12b2lkIDApJiYocy5vcHRpb25zPWkpLGEhPT12b2lkIDAmJihzLmFubm90YXRpb25JZD1hKSxzfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIGkmJmkua2luZD09PSJkZWxldGUiJiZ6ZS5zdHJpbmcoaS51cmkpJiYoaS5vcHRpb25zPT09dm9pZCAwfHwoaS5vcHRpb25zLnJlY3Vyc2l2ZT09PXZvaWQgMHx8emUuYm9vbGVhbihpLm9wdGlvbnMucmVjdXJzaXZlKSkmJihpLm9wdGlvbnMuaWdub3JlSWZOb3RFeGlzdHM9PT12b2lkIDB8fHplLmJvb2xlYW4oaS5vcHRpb25zLmlnbm9yZUlmTm90RXhpc3RzKSkpJiYoaS5hbm5vdGF0aW9uSWQ9PT12b2lkIDB8fERnLmlzKGkuYW5ub3RhdGlvbklkKSl9byhyLCJpcyIpLHQuaXM9cn0pKGFNfHwoYU09e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiBuJiYobi5jaGFuZ2VzIT09dm9pZCAwfHxuLmRvY3VtZW50Q2hhbmdlcyE9PXZvaWQgMCkmJihuLmRvY3VtZW50Q2hhbmdlcz09PXZvaWQgMHx8bi5kb2N1bWVudENoYW5nZXMuZXZlcnkoaT0+emUuc3RyaW5nKGkua2luZCk/bk0uaXMoaSl8fGlNLmlzKGkpfHxhTS5pcyhpKTpyTS5pcyhpKSkpfW8oZSwiaXMiKSx0LmlzPWV9KShzTXx8KHNNPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobil7cmV0dXJue3VyaTpufX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiB6ZS5kZWZpbmVkKGkpJiZ6ZS5zdHJpbmcoaS51cmkpfW8ociwiaXMiKSx0LmlzPXJ9KShhbGV8fChhbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3JldHVybnt1cmk6bix2ZXJzaW9uOml9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIHplLmRlZmluZWQoaSkmJnplLnN0cmluZyhpLnVyaSkmJnplLmludGVnZXIoaS52ZXJzaW9uKX1vKHIsImlzIiksdC5pcz1yfSkoc2xlfHwoc2xlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpKXtyZXR1cm57dXJpOm4sdmVyc2lvbjppfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiB6ZS5kZWZpbmVkKGkpJiZ6ZS5zdHJpbmcoaS51cmkpJiYoaS52ZXJzaW9uPT09bnVsbHx8emUuaW50ZWdlcihpLnZlcnNpb24pKX1vKHIsImlzIiksdC5pcz1yfSkob018fChvTT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhLHMpe3JldHVybnt1cmk6bixsYW5ndWFnZUlkOmksdmVyc2lvbjphLHRleHQ6c319byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gemUuZGVmaW5lZChpKSYmemUuc3RyaW5nKGkudXJpKSYmemUuc3RyaW5nKGkubGFuZ3VhZ2VJZCkmJnplLmludGVnZXIoaS52ZXJzaW9uKSYmemUuc3RyaW5nKGkudGV4dCl9byhyLCJpcyIpLHQuaXM9cn0pKG9sZXx8KG9sZT17fSkpOyhmdW5jdGlvbih0KXt0LlBsYWluVGV4dD0icGxhaW50ZXh0Iix0Lk1hcmtkb3duPSJtYXJrZG93biI7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiBuPT09dC5QbGFpblRleHR8fG49PT10Lk1hcmtkb3dufW8oZSwiaXMiKSx0LmlzPWV9KShsTXx8KGxNPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocil7bGV0IG49cjtyZXR1cm4gemUub2JqZWN0TGl0ZXJhbChyKSYmbE0uaXMobi5raW5kKSYmemUuc3RyaW5nKG4udmFsdWUpfW8oZSwiaXMiKSx0LmlzPWV9KShHMnx8KEcyPXt9KSk7KGZ1bmN0aW9uKHQpe3QuVGV4dD0xLHQuTWV0aG9kPTIsdC5GdW5jdGlvbj0zLHQuQ29uc3RydWN0b3I9NCx0LkZpZWxkPTUsdC5WYXJpYWJsZT02LHQuQ2xhc3M9Nyx0LkludGVyZmFjZT04LHQuTW9kdWxlPTksdC5Qcm9wZXJ0eT0xMCx0LlVuaXQ9MTEsdC5WYWx1ZT0xMix0LkVudW09MTMsdC5LZXl3b3JkPTE0LHQuU25pcHBldD0xNSx0LkNvbG9yPTE2LHQuRmlsZT0xNyx0LlJlZmVyZW5jZT0xOCx0LkZvbGRlcj0xOSx0LkVudW1NZW1iZXI9MjAsdC5Db25zdGFudD0yMSx0LlN0cnVjdD0yMix0LkV2ZW50PTIzLHQuT3BlcmF0b3I9MjQsdC5UeXBlUGFyYW1ldGVyPTI1fSkobGxlfHwobGxlPXt9KSk7KGZ1bmN0aW9uKHQpe3QuUGxhaW5UZXh0PTEsdC5TbmlwcGV0PTJ9KShjbGV8fChjbGU9e30pKTsoZnVuY3Rpb24odCl7dC5EZXByZWNhdGVkPTF9KSh1bGV8fCh1bGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGksYSl7cmV0dXJue25ld1RleHQ6bixpbnNlcnQ6aSxyZXBsYWNlOmF9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIGkmJnplLnN0cmluZyhpLm5ld1RleHQpJiZOci5pcyhpLmluc2VydCkmJk5yLmlzKGkucmVwbGFjZSl9byhyLCJpcyIpLHQuaXM9cn0pKGhsZXx8KGhsZT17fSkpOyhmdW5jdGlvbih0KXt0LmFzSXM9MSx0LmFkanVzdEluZGVudGF0aW9uPTJ9KShmbGV8fChmbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiBuJiYoemUuc3RyaW5nKG4uZGV0YWlsKXx8bi5kZXRhaWw9PT12b2lkIDApJiYoemUuc3RyaW5nKG4uZGVzY3JpcHRpb24pfHxuLmRlc2NyaXB0aW9uPT09dm9pZCAwKX1vKGUsImlzIiksdC5pcz1lfSkoZGxlfHwoZGxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocil7cmV0dXJue2xhYmVsOnJ9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZX0pKHBsZXx8KHBsZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIsbil7cmV0dXJue2l0ZW1zOnJ8fFtdLGlzSW5jb21wbGV0ZTohIW59fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZX0pKG1sZXx8KG1sZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4pe3JldHVybiBuLnJlcGxhY2UoL1tcXGAqX3t9W1xdKCkjK1wtLiFdL2csIlxcJCYiKX1vKGUsImZyb21QbGFpblRleHQiKSx0LmZyb21QbGFpblRleHQ9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIHplLnN0cmluZyhpKXx8emUub2JqZWN0TGl0ZXJhbChpKSYmemUuc3RyaW5nKGkubGFuZ3VhZ2UpJiZ6ZS5zdHJpbmcoaS52YWx1ZSl9byhyLCJpcyIpLHQuaXM9cn0pKFBrfHwoUGs9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiEhbiYmemUub2JqZWN0TGl0ZXJhbChuKSYmKEcyLmlzKG4uY29udGVudHMpfHxQay5pcyhuLmNvbnRlbnRzKXx8emUudHlwZWRBcnJheShuLmNvbnRlbnRzLFBrLmlzKSkmJihyLnJhbmdlPT09dm9pZCAwfHxOci5pcyhyLnJhbmdlKSl9byhlLCJpcyIpLHQuaXM9ZX0pKGdsZXx8KGdsZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIsbil7cmV0dXJuIG4/e2xhYmVsOnIsZG9jdW1lbnRhdGlvbjpufTp7bGFiZWw6cn19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lfSkoeWxlfHwoeWxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocixuLC4uLmkpe2xldCBhPXtsYWJlbDpyfTtyZXR1cm4gemUuZGVmaW5lZChuKSYmKGEuZG9jdW1lbnRhdGlvbj1uKSx6ZS5kZWZpbmVkKGkpP2EucGFyYW1ldGVycz1pOmEucGFyYW1ldGVycz1bXSxhfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZX0pKHZsZXx8KHZsZT17fSkpOyhmdW5jdGlvbih0KXt0LlRleHQ9MSx0LlJlYWQ9Mix0LldyaXRlPTN9KSh4bGV8fCh4bGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyLG4pe2xldCBpPXtyYW5nZTpyfTtyZXR1cm4gemUubnVtYmVyKG4pJiYoaS5raW5kPW4pLGl9byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lfSkoYmxlfHwoYmxlPXt9KSk7KGZ1bmN0aW9uKHQpe3QuRmlsZT0xLHQuTW9kdWxlPTIsdC5OYW1lc3BhY2U9Myx0LlBhY2thZ2U9NCx0LkNsYXNzPTUsdC5NZXRob2Q9Nix0LlByb3BlcnR5PTcsdC5GaWVsZD04LHQuQ29uc3RydWN0b3I9OSx0LkVudW09MTAsdC5JbnRlcmZhY2U9MTEsdC5GdW5jdGlvbj0xMix0LlZhcmlhYmxlPTEzLHQuQ29uc3RhbnQ9MTQsdC5TdHJpbmc9MTUsdC5OdW1iZXI9MTYsdC5Cb29sZWFuPTE3LHQuQXJyYXk9MTgsdC5PYmplY3Q9MTksdC5LZXk9MjAsdC5OdWxsPTIxLHQuRW51bU1lbWJlcj0yMix0LlN0cnVjdD0yMyx0LkV2ZW50PTI0LHQuT3BlcmF0b3I9MjUsdC5UeXBlUGFyYW1ldGVyPTI2fSkod2xlfHwod2xlPXt9KSk7KGZ1bmN0aW9uKHQpe3QuRGVwcmVjYXRlZD0xfSkoVGxlfHwoVGxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocixuLGksYSxzKXtsZXQgbD17bmFtZTpyLGtpbmQ6bixsb2NhdGlvbjp7dXJpOmEscmFuZ2U6aX19O3JldHVybiBzJiYobC5jb250YWluZXJOYW1lPXMpLGx9byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lfSkoa2xlfHwoa2xlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocixuLGksYSl7cmV0dXJuIGEhPT12b2lkIDA/e25hbWU6cixraW5kOm4sbG9jYXRpb246e3VyaTppLHJhbmdlOmF9fTp7bmFtZTpyLGtpbmQ6bixsb2NhdGlvbjp7dXJpOml9fX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWV9KShFbGV8fChFbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGksYSxzLGwsdSl7bGV0IGg9e25hbWU6bixkZXRhaWw6aSxraW5kOmEscmFuZ2U6cyxzZWxlY3Rpb25SYW5nZTpsfTtyZXR1cm4gdSE9PXZvaWQgMCYmKGguY2hpbGRyZW49dSksaH1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiBpJiZ6ZS5zdHJpbmcoaS5uYW1lKSYmemUubnVtYmVyKGkua2luZCkmJk5yLmlzKGkucmFuZ2UpJiZOci5pcyhpLnNlbGVjdGlvblJhbmdlKSYmKGkuZGV0YWlsPT09dm9pZCAwfHx6ZS5zdHJpbmcoaS5kZXRhaWwpKSYmKGkuZGVwcmVjYXRlZD09PXZvaWQgMHx8emUuYm9vbGVhbihpLmRlcHJlY2F0ZWQpKSYmKGkuY2hpbGRyZW49PT12b2lkIDB8fEFycmF5LmlzQXJyYXkoaS5jaGlsZHJlbikpJiYoaS50YWdzPT09dm9pZCAwfHxBcnJheS5pc0FycmF5KGkudGFncykpfW8ociwiaXMiKSx0LmlzPXJ9KShTbGV8fChTbGU9e30pKTsoZnVuY3Rpb24odCl7dC5FbXB0eT0iIix0LlF1aWNrRml4PSJxdWlja2ZpeCIsdC5SZWZhY3Rvcj0icmVmYWN0b3IiLHQuUmVmYWN0b3JFeHRyYWN0PSJyZWZhY3Rvci5leHRyYWN0Iix0LlJlZmFjdG9ySW5saW5lPSJyZWZhY3Rvci5pbmxpbmUiLHQuUmVmYWN0b3JSZXdyaXRlPSJyZWZhY3Rvci5yZXdyaXRlIix0LlNvdXJjZT0ic291cmNlIix0LlNvdXJjZU9yZ2FuaXplSW1wb3J0cz0ic291cmNlLm9yZ2FuaXplSW1wb3J0cyIsdC5Tb3VyY2VGaXhBbGw9InNvdXJjZS5maXhBbGwifSkoQ2xlfHwoQ2xlPXt9KSk7KGZ1bmN0aW9uKHQpe3QuSW52b2tlZD0xLHQuQXV0b21hdGljPTJ9KShCa3x8KEJrPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEpe2xldCBzPXtkaWFnbm9zdGljczpufTtyZXR1cm4gaSE9bnVsbCYmKHMub25seT1pKSxhIT1udWxsJiYocy50cmlnZ2VyS2luZD1hKSxzfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIHplLmRlZmluZWQoaSkmJnplLnR5cGVkQXJyYXkoaS5kaWFnbm9zdGljcyxPay5pcykmJihpLm9ubHk9PT12b2lkIDB8fHplLnR5cGVkQXJyYXkoaS5vbmx5LHplLnN0cmluZykpJiYoaS50cmlnZ2VyS2luZD09PXZvaWQgMHx8aS50cmlnZ2VyS2luZD09PUJrLkludm9rZWR8fGkudHJpZ2dlcktpbmQ9PT1Cay5BdXRvbWF0aWMpfW8ociwiaXMiKSx0LmlzPXJ9KShBbGV8fChBbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGksYSl7bGV0IHM9e3RpdGxlOm59LGw9ITA7cmV0dXJuIHR5cGVvZiBpPT0ic3RyaW5nIj8obD0hMSxzLmtpbmQ9aSk6X2cuaXMoaSk/cy5jb21tYW5kPWk6cy5lZGl0PWksbCYmYSE9PXZvaWQgMCYmKHMua2luZD1hKSxzfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIGkmJnplLnN0cmluZyhpLnRpdGxlKSYmKGkuZGlhZ25vc3RpY3M9PT12b2lkIDB8fHplLnR5cGVkQXJyYXkoaS5kaWFnbm9zdGljcyxPay5pcykpJiYoaS5raW5kPT09dm9pZCAwfHx6ZS5zdHJpbmcoaS5raW5kKSkmJihpLmVkaXQhPT12b2lkIDB8fGkuY29tbWFuZCE9PXZvaWQgMCkmJihpLmNvbW1hbmQ9PT12b2lkIDB8fF9nLmlzKGkuY29tbWFuZCkpJiYoaS5pc1ByZWZlcnJlZD09PXZvaWQgMHx8emUuYm9vbGVhbihpLmlzUHJlZmVycmVkKSkmJihpLmVkaXQ9PT12b2lkIDB8fHNNLmlzKGkuZWRpdCkpfW8ociwiaXMiKSx0LmlzPXJ9KShfbGV8fChfbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe2xldCBhPXtyYW5nZTpufTtyZXR1cm4gemUuZGVmaW5lZChpKSYmKGEuZGF0YT1pKSxhfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIHplLmRlZmluZWQoaSkmJk5yLmlzKGkucmFuZ2UpJiYoemUudW5kZWZpbmVkKGkuY29tbWFuZCl8fF9nLmlzKGkuY29tbWFuZCkpfW8ociwiaXMiKSx0LmlzPXJ9KShMbGV8fChMbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3JldHVybnt0YWJTaXplOm4saW5zZXJ0U3BhY2VzOml9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIHplLmRlZmluZWQoaSkmJnplLnVpbnRlZ2VyKGkudGFiU2l6ZSkmJnplLmJvb2xlYW4oaS5pbnNlcnRTcGFjZXMpfW8ociwiaXMiKSx0LmlzPXJ9KShEbGV8fChEbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGksYSl7cmV0dXJue3JhbmdlOm4sdGFyZ2V0OmksZGF0YTphfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiB6ZS5kZWZpbmVkKGkpJiZOci5pcyhpLnJhbmdlKSYmKHplLnVuZGVmaW5lZChpLnRhcmdldCl8fHplLnN0cmluZyhpLnRhcmdldCkpfW8ociwiaXMiKSx0LmlzPXJ9KShObGV8fChObGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3JldHVybntyYW5nZTpuLHBhcmVudDppfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiB6ZS5vYmplY3RMaXRlcmFsKGkpJiZOci5pcyhpLnJhbmdlKSYmKGkucGFyZW50PT09dm9pZCAwfHx0LmlzKGkucGFyZW50KSl9byhyLCJpcyIpLHQuaXM9cn0pKFJsZXx8KFJsZT17fSkpOyhmdW5jdGlvbih0KXt0Lm5hbWVzcGFjZT0ibmFtZXNwYWNlIix0LnR5cGU9InR5cGUiLHQuY2xhc3M9ImNsYXNzIix0LmVudW09ImVudW0iLHQuaW50ZXJmYWNlPSJpbnRlcmZhY2UiLHQuc3RydWN0PSJzdHJ1Y3QiLHQudHlwZVBhcmFtZXRlcj0idHlwZVBhcmFtZXRlciIsdC5wYXJhbWV0ZXI9InBhcmFtZXRlciIsdC52YXJpYWJsZT0idmFyaWFibGUiLHQucHJvcGVydHk9InByb3BlcnR5Iix0LmVudW1NZW1iZXI9ImVudW1NZW1iZXIiLHQuZXZlbnQ9ImV2ZW50Iix0LmZ1bmN0aW9uPSJmdW5jdGlvbiIsdC5tZXRob2Q9Im1ldGhvZCIsdC5tYWNybz0ibWFjcm8iLHQua2V5d29yZD0ia2V5d29yZCIsdC5tb2RpZmllcj0ibW9kaWZpZXIiLHQuY29tbWVudD0iY29tbWVudCIsdC5zdHJpbmc9InN0cmluZyIsdC5udW1iZXI9Im51bWJlciIsdC5yZWdleHA9InJlZ2V4cCIsdC5vcGVyYXRvcj0ib3BlcmF0b3IiLHQuZGVjb3JhdG9yPSJkZWNvcmF0b3IifSkoTWxlfHwoTWxlPXt9KSk7KGZ1bmN0aW9uKHQpe3QuZGVjbGFyYXRpb249ImRlY2xhcmF0aW9uIix0LmRlZmluaXRpb249ImRlZmluaXRpb24iLHQucmVhZG9ubHk9InJlYWRvbmx5Iix0LnN0YXRpYz0ic3RhdGljIix0LmRlcHJlY2F0ZWQ9ImRlcHJlY2F0ZWQiLHQuYWJzdHJhY3Q9ImFic3RyYWN0Iix0LmFzeW5jPSJhc3luYyIsdC5tb2RpZmljYXRpb249Im1vZGlmaWNhdGlvbiIsdC5kb2N1bWVudGF0aW9uPSJkb2N1bWVudGF0aW9uIix0LmRlZmF1bHRMaWJyYXJ5PSJkZWZhdWx0TGlicmFyeSJ9KShJbGV8fChJbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiB6ZS5vYmplY3RMaXRlcmFsKG4pJiYobi5yZXN1bHRJZD09PXZvaWQgMHx8dHlwZW9mIG4ucmVzdWx0SWQ9PSJzdHJpbmciKSYmQXJyYXkuaXNBcnJheShuLmRhdGEpJiYobi5kYXRhLmxlbmd0aD09PTB8fHR5cGVvZiBuLmRhdGFbMF09PSJudW1iZXIiKX1vKGUsImlzIiksdC5pcz1lfSkoT2xlfHwoT2xlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpKXtyZXR1cm57cmFuZ2U6bix0ZXh0Oml9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIGkhPW51bGwmJk5yLmlzKGkucmFuZ2UpJiZ6ZS5zdHJpbmcoaS50ZXh0KX1vKHIsImlzIiksdC5pcz1yfSkoUGxlfHwoUGxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEpe3JldHVybntyYW5nZTpuLHZhcmlhYmxlTmFtZTppLGNhc2VTZW5zaXRpdmVMb29rdXA6YX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gaSE9bnVsbCYmTnIuaXMoaS5yYW5nZSkmJnplLmJvb2xlYW4oaS5jYXNlU2Vuc2l0aXZlTG9va3VwKSYmKHplLnN0cmluZyhpLnZhcmlhYmxlTmFtZSl8fGkudmFyaWFibGVOYW1lPT09dm9pZCAwKX1vKHIsImlzIiksdC5pcz1yfSkoQmxlfHwoQmxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpKXtyZXR1cm57cmFuZ2U6bixleHByZXNzaW9uOml9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIGkhPW51bGwmJk5yLmlzKGkucmFuZ2UpJiYoemUuc3RyaW5nKGkuZXhwcmVzc2lvbil8fGkuZXhwcmVzc2lvbj09PXZvaWQgMCl9byhyLCJpcyIpLHQuaXM9cn0pKEZsZXx8KEZsZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSl7cmV0dXJue2ZyYW1lSWQ6bixzdG9wcGVkTG9jYXRpb246aX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gemUuZGVmaW5lZChpKSYmTnIuaXMobi5zdG9wcGVkTG9jYXRpb24pfW8ociwiaXMiKSx0LmlzPXJ9KSh6bGV8fCh6bGU9e30pKTsoZnVuY3Rpb24odCl7dC5UeXBlPTEsdC5QYXJhbWV0ZXI9MjtmdW5jdGlvbiBlKHIpe3JldHVybiByPT09MXx8cj09PTJ9byhlLCJpcyIpLHQuaXM9ZX0pKGNNfHwoY009e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuKXtyZXR1cm57dmFsdWU6bn19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gemUub2JqZWN0TGl0ZXJhbChpKSYmKGkudG9vbHRpcD09PXZvaWQgMHx8emUuc3RyaW5nKGkudG9vbHRpcCl8fEcyLmlzKGkudG9vbHRpcCkpJiYoaS5sb2NhdGlvbj09PXZvaWQgMHx8SWsuaXMoaS5sb2NhdGlvbikpJiYoaS5jb21tYW5kPT09dm9pZCAwfHxfZy5pcyhpLmNvbW1hbmQpKX1vKHIsImlzIiksdC5pcz1yfSkodU18fCh1TT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhKXtsZXQgcz17cG9zaXRpb246bixsYWJlbDppfTtyZXR1cm4gYSE9PXZvaWQgMCYmKHMua2luZD1hKSxzfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIHplLm9iamVjdExpdGVyYWwoaSkmJlhyLmlzKGkucG9zaXRpb24pJiYoemUuc3RyaW5nKGkubGFiZWwpfHx6ZS50eXBlZEFycmF5KGkubGFiZWwsdU0uaXMpKSYmKGkua2luZD09PXZvaWQgMHx8Y00uaXMoaS5raW5kKSkmJmkudGV4dEVkaXRzPT09dm9pZCAwfHx6ZS50eXBlZEFycmF5KGkudGV4dEVkaXRzLExnLmlzKSYmKGkudG9vbHRpcD09PXZvaWQgMHx8emUuc3RyaW5nKGkudG9vbHRpcCl8fEcyLmlzKGkudG9vbHRpcCkpJiYoaS5wYWRkaW5nTGVmdD09PXZvaWQgMHx8emUuYm9vbGVhbihpLnBhZGRpbmdMZWZ0KSkmJihpLnBhZGRpbmdSaWdodD09PXZvaWQgMHx8emUuYm9vbGVhbihpLnBhZGRpbmdSaWdodCkpfW8ociwiaXMiKSx0LmlzPXJ9KShHbGV8fChHbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtyZXR1cm57a2luZDoic25pcHBldCIsdmFsdWU6cn19byhlLCJjcmVhdGVTbmlwcGV0IiksdC5jcmVhdGVTbmlwcGV0PWV9KSgkbGV8fCgkbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyLG4saSxhKXtyZXR1cm57aW5zZXJ0VGV4dDpyLGZpbHRlclRleHQ6bixyYW5nZTppLGNvbW1hbmQ6YX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lfSkoVmxlfHwoVmxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocil7cmV0dXJue2l0ZW1zOnJ9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZX0pKFVsZXx8KFVsZT17fSkpOyhmdW5jdGlvbih0KXt0Lkludm9rZWQ9MCx0LkF1dG9tYXRpYz0xfSkoSGxlfHwoSGxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocixuKXtyZXR1cm57cmFuZ2U6cix0ZXh0Om59fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZX0pKFdsZXx8KFdsZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIsbil7cmV0dXJue3RyaWdnZXJLaW5kOnIsc2VsZWN0ZWRDb21wbGV0aW9uSW5mbzpufX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWV9KShZbGV8fChZbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiB6ZS5vYmplY3RMaXRlcmFsKG4pJiZaUi5pcyhuLnVyaSkmJnplLnN0cmluZyhuLm5hbWUpfW8oZSwiaXMiKSx0LmlzPWV9KShxbGV8fChxbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShhLHMsbCx1KXtyZXR1cm4gbmV3IGhNKGEscyxsLHUpfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKGEpe2xldCBzPWE7cmV0dXJuISEoemUuZGVmaW5lZChzKSYmemUuc3RyaW5nKHMudXJpKSYmKHplLnVuZGVmaW5lZChzLmxhbmd1YWdlSWQpfHx6ZS5zdHJpbmcocy5sYW5ndWFnZUlkKSkmJnplLnVpbnRlZ2VyKHMubGluZUNvdW50KSYmemUuZnVuYyhzLmdldFRleHQpJiZ6ZS5mdW5jKHMucG9zaXRpb25BdCkmJnplLmZ1bmMocy5vZmZzZXRBdCkpfW8ociwiaXMiKSx0LmlzPXI7ZnVuY3Rpb24gbihhLHMpe2xldCBsPWEuZ2V0VGV4dCgpLHU9aShzLChmLGQpPT57bGV0IHA9Zi5yYW5nZS5zdGFydC5saW5lLWQucmFuZ2Uuc3RhcnQubGluZTtyZXR1cm4gcD09PTA/Zi5yYW5nZS5zdGFydC5jaGFyYWN0ZXItZC5yYW5nZS5zdGFydC5jaGFyYWN0ZXI6cH0pLGg9bC5sZW5ndGg7Zm9yKGxldCBmPXUubGVuZ3RoLTE7Zj49MDtmLS0pe2xldCBkPXVbZl0scD1hLm9mZnNldEF0KGQucmFuZ2Uuc3RhcnQpLG09YS5vZmZzZXRBdChkLnJhbmdlLmVuZCk7aWYobTw9aClsPWwuc3Vic3RyaW5nKDAscCkrZC5uZXdUZXh0K2wuc3Vic3RyaW5nKG0sbC5sZW5ndGgpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJPdmVybGFwcGluZyBlZGl0Iik7aD1wfXJldHVybiBsfW8obiwiYXBwbHlFZGl0cyIpLHQuYXBwbHlFZGl0cz1uO2Z1bmN0aW9uIGkoYSxzKXtpZihhLmxlbmd0aDw9MSlyZXR1cm4gYTtsZXQgbD1hLmxlbmd0aC8yfDAsdT1hLnNsaWNlKDAsbCksaD1hLnNsaWNlKGwpO2kodSxzKSxpKGgscyk7bGV0IGY9MCxkPTAscD0wO2Zvcig7Zjx1Lmxlbmd0aCYmZDxoLmxlbmd0aDspcyh1W2ZdLGhbZF0pPD0wP2FbcCsrXT11W2YrK106YVtwKytdPWhbZCsrXTtmb3IoO2Y8dS5sZW5ndGg7KWFbcCsrXT11W2YrK107Zm9yKDtkPGgubGVuZ3RoOylhW3ArK109aFtkKytdO3JldHVybiBhfW8oaSwibWVyZ2VTb3J0Iil9KShYbGV8fChYbGU9e30pKTtoTT1jbGFzc3tzdGF0aWN7byh0aGlzLCJGdWxsVGV4dERvY3VtZW50Iil9Y29uc3RydWN0b3IoZSxyLG4saSl7dGhpcy5fdXJpPWUsdGhpcy5fbGFuZ3VhZ2VJZD1yLHRoaXMuX3ZlcnNpb249bix0aGlzLl9jb250ZW50PWksdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfWdldCB1cmkoKXtyZXR1cm4gdGhpcy5fdXJpfWdldCBsYW5ndWFnZUlkKCl7cmV0dXJuIHRoaXMuX2xhbmd1YWdlSWR9Z2V0IHZlcnNpb24oKXtyZXR1cm4gdGhpcy5fdmVyc2lvbn1nZXRUZXh0KGUpe2lmKGUpe2xldCByPXRoaXMub2Zmc2V0QXQoZS5zdGFydCksbj10aGlzLm9mZnNldEF0KGUuZW5kKTtyZXR1cm4gdGhpcy5fY29udGVudC5zdWJzdHJpbmcocixuKX1yZXR1cm4gdGhpcy5fY29udGVudH11cGRhdGUoZSxyKXt0aGlzLl9jb250ZW50PWUudGV4dCx0aGlzLl92ZXJzaW9uPXIsdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfWdldExpbmVPZmZzZXRzKCl7aWYodGhpcy5fbGluZU9mZnNldHM9PT12b2lkIDApe2xldCBlPVtdLHI9dGhpcy5fY29udGVudCxuPSEwO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKXtuJiYoZS5wdXNoKGkpLG49ITEpO2xldCBhPXIuY2hhckF0KGkpO249YT09PSJcciJ8fGE9PT1gCmAsYT09PSJcciImJmkrMTxyLmxlbmd0aCYmci5jaGFyQXQoaSsxKT09PWAKYCYmaSsrfW4mJnIubGVuZ3RoPjAmJmUucHVzaChyLmxlbmd0aCksdGhpcy5fbGluZU9mZnNldHM9ZX1yZXR1cm4gdGhpcy5fbGluZU9mZnNldHN9cG9zaXRpb25BdChlKXtlPU1hdGgubWF4KE1hdGgubWluKGUsdGhpcy5fY29udGVudC5sZW5ndGgpLDApO2xldCByPXRoaXMuZ2V0TGluZU9mZnNldHMoKSxuPTAsaT1yLmxlbmd0aDtpZihpPT09MClyZXR1cm4gWHIuY3JlYXRlKDAsZSk7Zm9yKDtuPGk7KXtsZXQgcz1NYXRoLmZsb29yKChuK2kpLzIpO3Jbc10+ZT9pPXM6bj1zKzF9bGV0IGE9bi0xO3JldHVybiBYci5jcmVhdGUoYSxlLXJbYV0pfW9mZnNldEF0KGUpe2xldCByPXRoaXMuZ2V0TGluZU9mZnNldHMoKTtpZihlLmxpbmU+PXIubGVuZ3RoKXJldHVybiB0aGlzLl9jb250ZW50Lmxlbmd0aDtpZihlLmxpbmU8MClyZXR1cm4gMDtsZXQgbj1yW2UubGluZV0saT1lLmxpbmUrMTxyLmxlbmd0aD9yW2UubGluZSsxXTp0aGlzLl9jb250ZW50Lmxlbmd0aDtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4obitlLmNoYXJhY3RlcixpKSxuKX1nZXQgbGluZUNvdW50KCl7cmV0dXJuIHRoaXMuZ2V0TGluZU9mZnNldHMoKS5sZW5ndGh9fTsoZnVuY3Rpb24odCl7bGV0IGU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiByKG0pe3JldHVybiB0eXBlb2YgbTwidSJ9byhyLCJkZWZpbmVkIiksdC5kZWZpbmVkPXI7ZnVuY3Rpb24gbihtKXtyZXR1cm4gdHlwZW9mIG0+InUifW8obiwidW5kZWZpbmVkIiksdC51bmRlZmluZWQ9bjtmdW5jdGlvbiBpKG0pe3JldHVybiBtPT09ITB8fG09PT0hMX1vKGksImJvb2xlYW4iKSx0LmJvb2xlYW49aTtmdW5jdGlvbiBhKG0pe3JldHVybiBlLmNhbGwobSk9PT0iW29iamVjdCBTdHJpbmddIn1vKGEsInN0cmluZyIpLHQuc3RyaW5nPWE7ZnVuY3Rpb24gcyhtKXtyZXR1cm4gZS5jYWxsKG0pPT09IltvYmplY3QgTnVtYmVyXSJ9byhzLCJudW1iZXIiKSx0Lm51bWJlcj1zO2Z1bmN0aW9uIGwobSxnLHkpe3JldHVybiBlLmNhbGwobSk9PT0iW29iamVjdCBOdW1iZXJdIiYmZzw9bSYmbTw9eX1vKGwsIm51bWJlclJhbmdlIiksdC5udW1iZXJSYW5nZT1sO2Z1bmN0aW9uIHUobSl7cmV0dXJuIGUuY2FsbChtKT09PSJbb2JqZWN0IE51bWJlcl0iJiYtMjE0NzQ4MzY0ODw9bSYmbTw9MjE0NzQ4MzY0N31vKHUsImludGVnZXIiKSx0LmludGVnZXI9dTtmdW5jdGlvbiBoKG0pe3JldHVybiBlLmNhbGwobSk9PT0iW29iamVjdCBOdW1iZXJdIiYmMDw9bSYmbTw9MjE0NzQ4MzY0N31vKGgsInVpbnRlZ2VyIiksdC51aW50ZWdlcj1oO2Z1bmN0aW9uIGYobSl7cmV0dXJuIGUuY2FsbChtKT09PSJbb2JqZWN0IEZ1bmN0aW9uXSJ9byhmLCJmdW5jIiksdC5mdW5jPWY7ZnVuY3Rpb24gZChtKXtyZXR1cm4gbSE9PW51bGwmJnR5cGVvZiBtPT0ib2JqZWN0In1vKGQsIm9iamVjdExpdGVyYWwiKSx0Lm9iamVjdExpdGVyYWw9ZDtmdW5jdGlvbiBwKG0sZyl7cmV0dXJuIEFycmF5LmlzQXJyYXkobSkmJm0uZXZlcnkoZyl9byhwLCJ0eXBlZEFycmF5IiksdC50eXBlZEFycmF5PXB9KSh6ZXx8KHplPXt9KSl9KTt2YXIgJDIsVjIseDAsYjAsZE0sTmcsRms9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtmTSgpO1pvKCk7emwoKTskMj1jbGFzc3tzdGF0aWN7byh0aGlzLCJDc3ROb2RlQnVpbGRlciIpfWNvbnN0cnVjdG9yKCl7dGhpcy5ub2RlU3RhY2s9W119Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5ub2RlU3RhY2tbdGhpcy5ub2RlU3RhY2subGVuZ3RoLTFdfWJ1aWxkUm9vdE5vZGUoZSl7cmV0dXJuIHRoaXMucm9vdE5vZGU9bmV3IE5nKGUpLHRoaXMucm9vdE5vZGUucm9vdD10aGlzLnJvb3ROb2RlLHRoaXMubm9kZVN0YWNrPVt0aGlzLnJvb3ROb2RlXSx0aGlzLnJvb3ROb2RlfWJ1aWxkQ29tcG9zaXRlTm9kZShlKXtsZXQgcj1uZXcgYjA7cmV0dXJuIHIuZ3JhbW1hclNvdXJjZT1lLHIucm9vdD10aGlzLnJvb3ROb2RlLHRoaXMuY3VycmVudC5jb250ZW50LnB1c2gociksdGhpcy5ub2RlU3RhY2sucHVzaChyKSxyfWJ1aWxkTGVhZk5vZGUoZSxyKXtsZXQgbj1uZXcgeDAoZS5zdGFydE9mZnNldCxlLmltYWdlLmxlbmd0aCxlZyhlKSxlLnRva2VuVHlwZSwhMSk7cmV0dXJuIG4uZ3JhbW1hclNvdXJjZT1yLG4ucm9vdD10aGlzLnJvb3ROb2RlLHRoaXMuY3VycmVudC5jb250ZW50LnB1c2gobiksbn1yZW1vdmVOb2RlKGUpe2xldCByPWUuY29udGFpbmVyO2lmKHIpe2xldCBuPXIuY29udGVudC5pbmRleE9mKGUpO24+PTAmJnIuY29udGVudC5zcGxpY2UobiwxKX19Y29uc3RydWN0KGUpe2xldCByPXRoaXMuY3VycmVudDt0eXBlb2YgZS4kdHlwZT09InN0cmluZyImJih0aGlzLmN1cnJlbnQuYXN0Tm9kZT1lKSxlLiRjc3ROb2RlPXI7bGV0IG49dGhpcy5ub2RlU3RhY2sucG9wKCk7bj8uY29udGVudC5sZW5ndGg9PT0wJiZ0aGlzLnJlbW92ZU5vZGUobil9YWRkSGlkZGVuVG9rZW5zKGUpe2ZvcihsZXQgciBvZiBlKXtsZXQgbj1uZXcgeDAoci5zdGFydE9mZnNldCxyLmltYWdlLmxlbmd0aCxlZyhyKSxyLnRva2VuVHlwZSwhMCk7bi5yb290PXRoaXMucm9vdE5vZGUsdGhpcy5hZGRIaWRkZW5Ub2tlbih0aGlzLnJvb3ROb2RlLG4pfX1hZGRIaWRkZW5Ub2tlbihlLHIpe2xldHtvZmZzZXQ6bixlbmQ6aX09cjtmb3IobGV0IGE9MDthPGUuY29udGVudC5sZW5ndGg7YSsrKXtsZXQgcz1lLmNvbnRlbnRbYV0se29mZnNldDpsLGVuZDp1fT1zO2lmKGhvKHMpJiZuPmwmJmk8dSl7dGhpcy5hZGRIaWRkZW5Ub2tlbihzLHIpO3JldHVybn1lbHNlIGlmKGk8PWwpe2UuY29udGVudC5zcGxpY2UoYSwwLHIpO3JldHVybn19ZS5jb250ZW50LnB1c2gocil9fSxWMj1jbGFzc3tzdGF0aWN7byh0aGlzLCJBYnN0cmFjdENzdE5vZGUiKX1nZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuY29udGFpbmVyfWdldCBmZWF0dXJlKCl7cmV0dXJuIHRoaXMuZ3JhbW1hclNvdXJjZX1nZXQgaGlkZGVuKCl7cmV0dXJuITF9Z2V0IGFzdE5vZGUoKXt2YXIgZSxyO2xldCBuPXR5cGVvZigoZT10aGlzLl9hc3ROb2RlKT09PW51bGx8fGU9PT12b2lkIDA/dm9pZCAwOmUuJHR5cGUpPT0ic3RyaW5nIj90aGlzLl9hc3ROb2RlOihyPXRoaXMuY29udGFpbmVyKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIuYXN0Tm9kZTtpZighbil0aHJvdyBuZXcgRXJyb3IoIlRoaXMgbm9kZSBoYXMgbm8gYXNzb2NpYXRlZCBBU1QgZWxlbWVudCIpO3JldHVybiBufXNldCBhc3ROb2RlKGUpe3RoaXMuX2FzdE5vZGU9ZX1nZXQgZWxlbWVudCgpe3JldHVybiB0aGlzLmFzdE5vZGV9Z2V0IHRleHQoKXtyZXR1cm4gdGhpcy5yb290LmZ1bGxUZXh0LnN1YnN0cmluZyh0aGlzLm9mZnNldCx0aGlzLmVuZCl9fSx4MD1jbGFzcyBleHRlbmRzIFYye3N0YXRpY3tvKHRoaXMsIkxlYWZDc3ROb2RlSW1wbCIpfWdldCBvZmZzZXQoKXtyZXR1cm4gdGhpcy5fb2Zmc2V0fWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5fbGVuZ3RofWdldCBlbmQoKXtyZXR1cm4gdGhpcy5fb2Zmc2V0K3RoaXMuX2xlbmd0aH1nZXQgaGlkZGVuKCl7cmV0dXJuIHRoaXMuX2hpZGRlbn1nZXQgdG9rZW5UeXBlKCl7cmV0dXJuIHRoaXMuX3Rva2VuVHlwZX1nZXQgcmFuZ2UoKXtyZXR1cm4gdGhpcy5fcmFuZ2V9Y29uc3RydWN0b3IoZSxyLG4saSxhPSExKXtzdXBlcigpLHRoaXMuX2hpZGRlbj1hLHRoaXMuX29mZnNldD1lLHRoaXMuX3Rva2VuVHlwZT1pLHRoaXMuX2xlbmd0aD1yLHRoaXMuX3JhbmdlPW59fSxiMD1jbGFzcyBleHRlbmRzIFYye3N0YXRpY3tvKHRoaXMsIkNvbXBvc2l0ZUNzdE5vZGVJbXBsIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29udGVudD1uZXcgZE0odGhpcyl9Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuY29udGVudH1nZXQgb2Zmc2V0KCl7dmFyIGUscjtyZXR1cm4ocj0oZT10aGlzLmZpcnN0Tm9uSGlkZGVuTm9kZSk9PT1udWxsfHxlPT09dm9pZCAwP3ZvaWQgMDplLm9mZnNldCkhPT1udWxsJiZyIT09dm9pZCAwP3I6MH1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuZW5kLXRoaXMub2Zmc2V0fWdldCBlbmQoKXt2YXIgZSxyO3JldHVybihyPShlPXRoaXMubGFzdE5vbkhpZGRlbk5vZGUpPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS5lbmQpIT09bnVsbCYmciE9PXZvaWQgMD9yOjB9Z2V0IHJhbmdlKCl7bGV0IGU9dGhpcy5maXJzdE5vbkhpZGRlbk5vZGUscj10aGlzLmxhc3ROb25IaWRkZW5Ob2RlO2lmKGUmJnIpe2lmKHRoaXMuX3JhbmdlQ2FjaGU9PT12b2lkIDApe2xldHtyYW5nZTpufT1lLHtyYW5nZTppfT1yO3RoaXMuX3JhbmdlQ2FjaGU9e3N0YXJ0Om4uc3RhcnQsZW5kOmkuZW5kLmxpbmU8bi5zdGFydC5saW5lP24uc3RhcnQ6aS5lbmR9fXJldHVybiB0aGlzLl9yYW5nZUNhY2hlfWVsc2UgcmV0dXJue3N0YXJ0OlhyLmNyZWF0ZSgwLDApLGVuZDpYci5jcmVhdGUoMCwwKX19Z2V0IGZpcnN0Tm9uSGlkZGVuTm9kZSgpe2ZvcihsZXQgZSBvZiB0aGlzLmNvbnRlbnQpaWYoIWUuaGlkZGVuKXJldHVybiBlO3JldHVybiB0aGlzLmNvbnRlbnRbMF19Z2V0IGxhc3ROb25IaWRkZW5Ob2RlKCl7Zm9yKGxldCBlPXRoaXMuY29udGVudC5sZW5ndGgtMTtlPj0wO2UtLSl7bGV0IHI9dGhpcy5jb250ZW50W2VdO2lmKCFyLmhpZGRlbilyZXR1cm4gcn1yZXR1cm4gdGhpcy5jb250ZW50W3RoaXMuY29udGVudC5sZW5ndGgtMV19fSxkTT1jbGFzcyB0IGV4dGVuZHMgQXJyYXl7c3RhdGlje28odGhpcywiQ3N0Tm9kZUNvbnRhaW5lciIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5wYXJlbnQ9ZSxPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyx0LnByb3RvdHlwZSl9cHVzaCguLi5lKXtyZXR1cm4gdGhpcy5hZGRQYXJlbnRzKGUpLHN1cGVyLnB1c2goLi4uZSl9dW5zaGlmdCguLi5lKXtyZXR1cm4gdGhpcy5hZGRQYXJlbnRzKGUpLHN1cGVyLnVuc2hpZnQoLi4uZSl9c3BsaWNlKGUsciwuLi5uKXtyZXR1cm4gdGhpcy5hZGRQYXJlbnRzKG4pLHN1cGVyLnNwbGljZShlLHIsLi4ubil9YWRkUGFyZW50cyhlKXtmb3IobGV0IHIgb2YgZSlyLmNvbnRhaW5lcj10aGlzLnBhcmVudH19LE5nPWNsYXNzIGV4dGVuZHMgYjB7c3RhdGlje28odGhpcywiUm9vdENzdE5vZGVJbXBsIil9Z2V0IHRleHQoKXtyZXR1cm4gdGhpcy5fdGV4dC5zdWJzdHJpbmcodGhpcy5vZmZzZXQsdGhpcy5lbmQpfWdldCBmdWxsVGV4dCgpe3JldHVybiB0aGlzLl90ZXh0fWNvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5fdGV4dD0iIix0aGlzLl90ZXh0PWU/PyIifX19KTtmdW5jdGlvbiBwTSh0KXtyZXR1cm4gdC4kdHlwZT09PXprfXZhciB6ayxqbGUsS2xlLFUyLEgyLEdrLFJnLFcyLFlGZSxtTSxZMj1NKCgpPT57InVzZSBzdHJpY3QiO2cwKCk7cW9lKCk7QmMoKTtWbCgpO29zKCk7RmsoKTt6az1TeW1ib2woIkRhdGF0eXBlIik7byhwTSwiaXNEYXRhVHlwZU5vZGUiKTtqbGU9Ilx1MjAwQiIsS2xlPW8odD0+dC5lbmRzV2l0aChqbGUpP3Q6dCtqbGUsIndpdGhSdWxlU3VmZml4IiksVTI9Y2xhc3N7c3RhdGlje28odGhpcywiQWJzdHJhY3RMYW5naXVtUGFyc2VyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5fdW5vcmRlcmVkR3JvdXBzPW5ldyBNYXAsdGhpcy5sZXhlcj1lLnBhcnNlci5MZXhlcjtsZXQgcj10aGlzLmxleGVyLmRlZmluaXRpb247dGhpcy53cmFwcGVyPW5ldyBtTShyLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlLnBhcnNlci5QYXJzZXJDb25maWcpLHtlcnJvck1lc3NhZ2VQcm92aWRlcjplLnBhcnNlci5QYXJzZXJFcnJvck1lc3NhZ2VQcm92aWRlcn0pKX1hbHRlcm5hdGl2ZXMoZSxyKXt0aGlzLndyYXBwZXIud3JhcE9yKGUscil9b3B0aW9uYWwoZSxyKXt0aGlzLndyYXBwZXIud3JhcE9wdGlvbihlLHIpfW1hbnkoZSxyKXt0aGlzLndyYXBwZXIud3JhcE1hbnkoZSxyKX1hdExlYXN0T25lKGUscil7dGhpcy53cmFwcGVyLndyYXBBdExlYXN0T25lKGUscil9aXNSZWNvcmRpbmcoKXtyZXR1cm4gdGhpcy53cmFwcGVyLklTX1JFQ09SRElOR31nZXQgdW5vcmRlcmVkR3JvdXBzKCl7cmV0dXJuIHRoaXMuX3Vub3JkZXJlZEdyb3Vwc31nZXRSdWxlU3RhY2soKXtyZXR1cm4gdGhpcy53cmFwcGVyLlJVTEVfU1RBQ0t9ZmluYWxpemUoKXt0aGlzLndyYXBwZXIud3JhcFNlbGZBbmFseXNpcygpfX0sSDI9Y2xhc3MgZXh0ZW5kcyBVMntzdGF0aWN7byh0aGlzLCJMYW5naXVtUGFyc2VyIil9Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXX1jb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLm5vZGVCdWlsZGVyPW5ldyAkMix0aGlzLnN0YWNrPVtdLHRoaXMuYXNzaWdubWVudE1hcD1uZXcgTWFwLHRoaXMubGlua2VyPWUucmVmZXJlbmNlcy5MaW5rZXIsdGhpcy5jb252ZXJ0ZXI9ZS5wYXJzZXIuVmFsdWVDb252ZXJ0ZXIsdGhpcy5hc3RSZWZsZWN0aW9uPWUuc2hhcmVkLkFzdFJlZmxlY3Rpb259cnVsZShlLHIpe2xldCBuPWUuZnJhZ21lbnQ/dm9pZCAwOm0yKGUpP3prOmwwKGUpLGk9dGhpcy53cmFwcGVyLkRFRklORV9SVUxFKEtsZShlLm5hbWUpLHRoaXMuc3RhcnRJbXBsZW1lbnRhdGlvbihuLHIpLmJpbmQodGhpcykpO3JldHVybiBlLmVudHJ5JiYodGhpcy5tYWluUnVsZT1pKSxpfXBhcnNlKGUpe3RoaXMubm9kZUJ1aWxkZXIuYnVpbGRSb290Tm9kZShlKTtsZXQgcj10aGlzLmxleGVyLnRva2VuaXplKGUpO3RoaXMud3JhcHBlci5pbnB1dD1yLnRva2VucztsZXQgbj10aGlzLm1haW5SdWxlLmNhbGwodGhpcy53cmFwcGVyLHt9KTtyZXR1cm4gdGhpcy5ub2RlQnVpbGRlci5hZGRIaWRkZW5Ub2tlbnMoci5oaWRkZW4pLHRoaXMudW5vcmRlcmVkR3JvdXBzLmNsZWFyKCkse3ZhbHVlOm4sbGV4ZXJFcnJvcnM6ci5lcnJvcnMscGFyc2VyRXJyb3JzOnRoaXMud3JhcHBlci5lcnJvcnN9fXN0YXJ0SW1wbGVtZW50YXRpb24oZSxyKXtyZXR1cm4gbj0+e2lmKCF0aGlzLmlzUmVjb3JkaW5nKCkpe2xldCBhPXskdHlwZTplfTt0aGlzLnN0YWNrLnB1c2goYSksZT09PXprJiYoYS52YWx1ZT0iIil9bGV0IGk7dHJ5e2k9cihuKX1jYXRjaHtpPXZvaWQgMH1yZXR1cm4hdGhpcy5pc1JlY29yZGluZygpJiZpPT09dm9pZCAwJiYoaT10aGlzLmNvbnN0cnVjdCgpKSxpfX1jb25zdW1lKGUscixuKXtsZXQgaT10aGlzLndyYXBwZXIud3JhcENvbnN1bWUoZSxyKTtpZighdGhpcy5pc1JlY29yZGluZygpJiZ0aGlzLmlzVmFsaWRUb2tlbihpKSl7bGV0IGE9dGhpcy5ub2RlQnVpbGRlci5idWlsZExlYWZOb2RlKGksbikse2Fzc2lnbm1lbnQ6cyxpc0Nyb3NzUmVmOmx9PXRoaXMuZ2V0QXNzaWdubWVudChuKSx1PXRoaXMuY3VycmVudDtpZihzKXtsZXQgaD1lbChuKT9pLmltYWdlOnRoaXMuY29udmVydGVyLmNvbnZlcnQoaS5pbWFnZSxhKTt0aGlzLmFzc2lnbihzLm9wZXJhdG9yLHMuZmVhdHVyZSxoLGEsbCl9ZWxzZSBpZihwTSh1KSl7bGV0IGg9aS5pbWFnZTtlbChuKXx8KGg9dGhpcy5jb252ZXJ0ZXIuY29udmVydChoLGEpLnRvU3RyaW5nKCkpLHUudmFsdWUrPWh9fX1pc1ZhbGlkVG9rZW4oZSl7cmV0dXJuIWUuaXNJbnNlcnRlZEluUmVjb3ZlcnkmJiFpc05hTihlLnN0YXJ0T2Zmc2V0KSYmdHlwZW9mIGUuZW5kT2Zmc2V0PT0ibnVtYmVyIiYmIWlzTmFOKGUuZW5kT2Zmc2V0KX1zdWJydWxlKGUscixuLGkpe2xldCBhO3RoaXMuaXNSZWNvcmRpbmcoKXx8KGE9dGhpcy5ub2RlQnVpbGRlci5idWlsZENvbXBvc2l0ZU5vZGUobikpO2xldCBzPXRoaXMud3JhcHBlci53cmFwU3VicnVsZShlLHIsaSk7IXRoaXMuaXNSZWNvcmRpbmcoKSYmYSYmYS5sZW5ndGg+MCYmdGhpcy5wZXJmb3JtU3VicnVsZUFzc2lnbm1lbnQocyxuLGEpfXBlcmZvcm1TdWJydWxlQXNzaWdubWVudChlLHIsbil7bGV0e2Fzc2lnbm1lbnQ6aSxpc0Nyb3NzUmVmOmF9PXRoaXMuZ2V0QXNzaWdubWVudChyKTtpZihpKXRoaXMuYXNzaWduKGkub3BlcmF0b3IsaS5mZWF0dXJlLGUsbixhKTtlbHNlIGlmKCFpKXtsZXQgcz10aGlzLmN1cnJlbnQ7aWYocE0ocykpcy52YWx1ZSs9ZS50b1N0cmluZygpO2Vsc2UgaWYodHlwZW9mIGU9PSJvYmplY3QiJiZlKXtsZXQgbD1lLiR0eXBlLHU9dGhpcy5hc3NpZ25XaXRob3V0T3ZlcnJpZGUoZSxzKTtsJiYodS4kdHlwZT1sKTtsZXQgaD11O3RoaXMuc3RhY2sucG9wKCksdGhpcy5zdGFjay5wdXNoKGgpfX19YWN0aW9uKGUscil7aWYoIXRoaXMuaXNSZWNvcmRpbmcoKSl7bGV0IG49dGhpcy5jdXJyZW50O2lmKCFuLiRjc3ROb2RlJiZyLmZlYXR1cmUmJnIub3BlcmF0b3Ipe249dGhpcy5jb25zdHJ1Y3QoITEpO2xldCBhPW4uJGNzdE5vZGUuZmVhdHVyZTt0aGlzLm5vZGVCdWlsZGVyLmJ1aWxkQ29tcG9zaXRlTm9kZShhKX1sZXQgaT17JHR5cGU6ZX07dGhpcy5zdGFjay5wb3AoKSx0aGlzLnN0YWNrLnB1c2goaSksci5mZWF0dXJlJiZyLm9wZXJhdG9yJiZ0aGlzLmFzc2lnbihyLm9wZXJhdG9yLHIuZmVhdHVyZSxuLG4uJGNzdE5vZGUsITEpfX1jb25zdHJ1Y3QoZT0hMCl7aWYodGhpcy5pc1JlY29yZGluZygpKXJldHVybjtsZXQgcj10aGlzLmN1cnJlbnQ7cmV0dXJuIEZUKHIpLHRoaXMubm9kZUJ1aWxkZXIuY29uc3RydWN0KHIpLGUmJnRoaXMuc3RhY2sucG9wKCkscE0ocik/dGhpcy5jb252ZXJ0ZXIuY29udmVydChyLnZhbHVlLHIuJGNzdE5vZGUpOihVTih0aGlzLmFzdFJlZmxlY3Rpb24scikscil9Z2V0QXNzaWdubWVudChlKXtpZighdGhpcy5hc3NpZ25tZW50TWFwLmhhcyhlKSl7bGV0IHI9bjAoZSxHbCk7dGhpcy5hc3NpZ25tZW50TWFwLnNldChlLHthc3NpZ25tZW50OnIsaXNDcm9zc1JlZjpyP3IwKHIudGVybWluYWwpOiExfSl9cmV0dXJuIHRoaXMuYXNzaWdubWVudE1hcC5nZXQoZSl9YXNzaWduKGUscixuLGksYSl7bGV0IHM9dGhpcy5jdXJyZW50LGw7c3dpdGNoKGEmJnR5cGVvZiBuPT0ic3RyaW5nIj9sPXRoaXMubGlua2VyLmJ1aWxkUmVmZXJlbmNlKHMscixpLG4pOmw9bixlKXtjYXNlIj0iOntzW3JdPWw7YnJlYWt9Y2FzZSI/PSI6e3Nbcl09ITA7YnJlYWt9Y2FzZSIrPSI6QXJyYXkuaXNBcnJheShzW3JdKXx8KHNbcl09W10pLHNbcl0ucHVzaChsKX19YXNzaWduV2l0aG91dE92ZXJyaWRlKGUscil7Zm9yKGxldFtuLGldb2YgT2JqZWN0LmVudHJpZXMocikpe2xldCBhPWVbbl07YT09PXZvaWQgMD9lW25dPWk6QXJyYXkuaXNBcnJheShhKSYmQXJyYXkuaXNBcnJheShpKSYmKGkucHVzaCguLi5hKSxlW25dPWkpfXJldHVybiBlfWdldCBkZWZpbml0aW9uRXJyb3JzKCl7cmV0dXJuIHRoaXMud3JhcHBlci5kZWZpbml0aW9uRXJyb3JzfX0sR2s9Y2xhc3N7c3RhdGlje28odGhpcywiQWJzdHJhY3RQYXJzZXJFcnJvck1lc3NhZ2VQcm92aWRlciIpfWJ1aWxkTWlzbWF0Y2hUb2tlbk1lc3NhZ2UoZSl7cmV0dXJuIFh1LmJ1aWxkTWlzbWF0Y2hUb2tlbk1lc3NhZ2UoZSl9YnVpbGROb3RBbGxJbnB1dFBhcnNlZE1lc3NhZ2UoZSl7cmV0dXJuIFh1LmJ1aWxkTm90QWxsSW5wdXRQYXJzZWRNZXNzYWdlKGUpfWJ1aWxkTm9WaWFibGVBbHRNZXNzYWdlKGUpe3JldHVybiBYdS5idWlsZE5vVmlhYmxlQWx0TWVzc2FnZShlKX1idWlsZEVhcmx5RXhpdE1lc3NhZ2UoZSl7cmV0dXJuIFh1LmJ1aWxkRWFybHlFeGl0TWVzc2FnZShlKX19LFJnPWNsYXNzIGV4dGVuZHMgR2t7c3RhdGlje28odGhpcywiTGFuZ2l1bVBhcnNlckVycm9yTWVzc2FnZVByb3ZpZGVyIil9YnVpbGRNaXNtYXRjaFRva2VuTWVzc2FnZSh7ZXhwZWN0ZWQ6ZSxhY3R1YWw6cn0pe3JldHVybmBFeHBlY3RpbmcgJHtlLkxBQkVMPyJgIitlLkxBQkVMKyJgIjplLm5hbWUuZW5kc1dpdGgoIjpLVyIpP2BrZXl3b3JkICcke2UubmFtZS5zdWJzdHJpbmcoMCxlLm5hbWUubGVuZ3RoLTMpfSdgOmB0b2tlbiBvZiB0eXBlICcke2UubmFtZX0nYH0gYnV0IGZvdW5kIFxgJHtyLmltYWdlfVxgLmB9YnVpbGROb3RBbGxJbnB1dFBhcnNlZE1lc3NhZ2Uoe2ZpcnN0UmVkdW5kYW50OmV9KXtyZXR1cm5gRXhwZWN0aW5nIGVuZCBvZiBmaWxlIGJ1dCBmb3VuZCBcYCR7ZS5pbWFnZX1cYC5gfX0sVzI9Y2xhc3MgZXh0ZW5kcyBVMntzdGF0aWN7byh0aGlzLCJMYW5naXVtQ29tcGxldGlvblBhcnNlciIpfWNvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnRva2Vucz1bXSx0aGlzLmVsZW1lbnRTdGFjaz1bXSx0aGlzLmxhc3RFbGVtZW50U3RhY2s9W10sdGhpcy5uZXh0VG9rZW5JbmRleD0wLHRoaXMuc3RhY2tTaXplPTB9YWN0aW9uKCl7fWNvbnN0cnVjdCgpe31wYXJzZShlKXt0aGlzLnJlc2V0U3RhdGUoKTtsZXQgcj10aGlzLmxleGVyLnRva2VuaXplKGUpO3JldHVybiB0aGlzLnRva2Vucz1yLnRva2Vucyx0aGlzLndyYXBwZXIuaW5wdXQ9Wy4uLnRoaXMudG9rZW5zXSx0aGlzLm1haW5SdWxlLmNhbGwodGhpcy53cmFwcGVyLHt9KSx0aGlzLnVub3JkZXJlZEdyb3Vwcy5jbGVhcigpLHt0b2tlbnM6dGhpcy50b2tlbnMsZWxlbWVudFN0YWNrOlsuLi50aGlzLmxhc3RFbGVtZW50U3RhY2tdLHRva2VuSW5kZXg6dGhpcy5uZXh0VG9rZW5JbmRleH19cnVsZShlLHIpe2xldCBuPXRoaXMud3JhcHBlci5ERUZJTkVfUlVMRShLbGUoZS5uYW1lKSx0aGlzLnN0YXJ0SW1wbGVtZW50YXRpb24ocikuYmluZCh0aGlzKSk7cmV0dXJuIGUuZW50cnkmJih0aGlzLm1haW5SdWxlPW4pLG59cmVzZXRTdGF0ZSgpe3RoaXMuZWxlbWVudFN0YWNrPVtdLHRoaXMubGFzdEVsZW1lbnRTdGFjaz1bXSx0aGlzLm5leHRUb2tlbkluZGV4PTAsdGhpcy5zdGFja1NpemU9MH1zdGFydEltcGxlbWVudGF0aW9uKGUpe3JldHVybiByPT57bGV0IG49dGhpcy5rZWVwU3RhY2tTaXplKCk7dHJ5e2Uocil9ZmluYWxseXt0aGlzLnJlc2V0U3RhY2tTaXplKG4pfX19cmVtb3ZlVW5leHBlY3RlZEVsZW1lbnRzKCl7dGhpcy5lbGVtZW50U3RhY2suc3BsaWNlKHRoaXMuc3RhY2tTaXplKX1rZWVwU3RhY2tTaXplKCl7bGV0IGU9dGhpcy5lbGVtZW50U3RhY2subGVuZ3RoO3JldHVybiB0aGlzLnN0YWNrU2l6ZT1lLGV9cmVzZXRTdGFja1NpemUoZSl7dGhpcy5yZW1vdmVVbmV4cGVjdGVkRWxlbWVudHMoKSx0aGlzLnN0YWNrU2l6ZT1lfWNvbnN1bWUoZSxyLG4pe3RoaXMud3JhcHBlci53cmFwQ29uc3VtZShlLHIpLHRoaXMuaXNSZWNvcmRpbmcoKXx8KHRoaXMubGFzdEVsZW1lbnRTdGFjaz1bLi4udGhpcy5lbGVtZW50U3RhY2ssbl0sdGhpcy5uZXh0VG9rZW5JbmRleD10aGlzLmN1cnJJZHgrMSl9c3VicnVsZShlLHIsbixpKXt0aGlzLmJlZm9yZShuKSx0aGlzLndyYXBwZXIud3JhcFN1YnJ1bGUoZSxyLGkpLHRoaXMuYWZ0ZXIobil9YmVmb3JlKGUpe3RoaXMuaXNSZWNvcmRpbmcoKXx8dGhpcy5lbGVtZW50U3RhY2sucHVzaChlKX1hZnRlcihlKXtpZighdGhpcy5pc1JlY29yZGluZygpKXtsZXQgcj10aGlzLmVsZW1lbnRTdGFjay5sYXN0SW5kZXhPZihlKTtyPj0wJiZ0aGlzLmVsZW1lbnRTdGFjay5zcGxpY2Uocil9fWdldCBjdXJySWR4KCl7cmV0dXJuIHRoaXMud3JhcHBlci5jdXJySWR4fX0sWUZlPXtyZWNvdmVyeUVuYWJsZWQ6ITAsbm9kZUxvY2F0aW9uVHJhY2tpbmc6ImZ1bGwiLHNraXBWYWxpZGF0aW9uczohMCxlcnJvck1lc3NhZ2VQcm92aWRlcjpuZXcgUmd9LG1NPWNsYXNzIGV4dGVuZHMgTzJ7c3RhdGlje28odGhpcywiQ2hldnJvdGFpbldyYXBwZXIiKX1jb25zdHJ1Y3RvcihlLHIpe2xldCBuPXImJiJtYXhMb29rYWhlYWQiaW4gcjtzdXBlcihlLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LFlGZSkse2xvb2thaGVhZFN0cmF0ZWd5Om4/bmV3IGp1KHttYXhMb29rYWhlYWQ6ci5tYXhMb29rYWhlYWR9KTpuZXcgejJ9KSxyKSl9Z2V0IElTX1JFQ09SRElORygpe3JldHVybiB0aGlzLlJFQ09SRElOR19QSEFTRX1ERUZJTkVfUlVMRShlLHIpe3JldHVybiB0aGlzLlJVTEUoZSxyKX13cmFwU2VsZkFuYWx5c2lzKCl7dGhpcy5wZXJmb3JtU2VsZkFuYWx5c2lzKCl9d3JhcENvbnN1bWUoZSxyKXtyZXR1cm4gdGhpcy5jb25zdW1lKGUscil9d3JhcFN1YnJ1bGUoZSxyLG4pe3JldHVybiB0aGlzLnN1YnJ1bGUoZSxyLHtBUkdTOltuXX0pfXdyYXBPcihlLHIpe3RoaXMub3IoZSxyKX13cmFwT3B0aW9uKGUscil7dGhpcy5vcHRpb24oZSxyKX13cmFwTWFueShlLHIpe3RoaXMubWFueShlLHIpfXdyYXBBdExlYXN0T25lKGUscil7dGhpcy5hdExlYXN0T25lKGUscil9fX0pO2Z1bmN0aW9uIFZrKHQsZSxyKXtyZXR1cm4gcUZlKHtwYXJzZXI6ZSx0b2tlbnM6cixydWxlczpuZXcgTWFwLHJ1bGVOYW1lczpuZXcgTWFwfSx0KSxlfWZ1bmN0aW9uIHFGZSh0LGUpe2xldCByPWQyKGUsITEpLG49dG4oZS5ydWxlcykuZmlsdGVyKEdhKS5maWx0ZXIoaT0+ci5oYXMoaSkpO2ZvcihsZXQgaSBvZiBuKXtsZXQgYT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2NvbnN1bWU6MSxvcHRpb25hbDoxLHN1YnJ1bGU6MSxtYW55OjEsb3I6MX0pO2EucnVsZXMuc2V0KGkubmFtZSx0LnBhcnNlci5ydWxlKGksdzAoYSxpLmRlZmluaXRpb24pKSl9fWZ1bmN0aW9uIHcwKHQsZSxyPSExKXtsZXQgbjtpZihlbChlKSluPWV6ZSh0LGUpO2Vsc2UgaWYoVnUoZSkpbj1YRmUodCxlKTtlbHNlIGlmKEdsKGUpKW49dzAodCxlLnRlcm1pbmFsKTtlbHNlIGlmKHIwKGUpKW49UWxlKHQsZSk7ZWxzZSBpZigkbChlKSluPWpGZSh0LGUpO2Vsc2UgaWYoT1QoZSkpbj1RRmUodCxlKTtlbHNlIGlmKEJUKGUpKW49WkZlKHQsZSk7ZWxzZSBpZihoZihlKSluPUpGZSh0LGUpO2Vsc2UgaWYoa04oZSkpe2xldCBpPXQuY29uc3VtZSsrO249bygoKT0+dC5wYXJzZXIuY29uc3VtZShpLG1vLGUpLCJtZXRob2QiKX1lbHNlIHRocm93IG5ldyB0MChlLiRjc3ROb2RlLGBVbmV4cGVjdGVkIGVsZW1lbnQgdHlwZTogJHtlLiR0eXBlfWApO3JldHVybiBabGUodCxyP3ZvaWQgMDokayhlKSxuLGUuY2FyZGluYWxpdHkpfWZ1bmN0aW9uIFhGZSh0LGUpe2xldCByPWwwKGUpO3JldHVybigpPT50LnBhcnNlci5hY3Rpb24ocixlKX1mdW5jdGlvbiBqRmUodCxlKXtsZXQgcj1lLnJ1bGUucmVmO2lmKEdhKHIpKXtsZXQgbj10LnN1YnJ1bGUrKyxpPWUuYXJndW1lbnRzLmxlbmd0aD4wP0tGZShyLGUuYXJndW1lbnRzKTooKT0+KHt9KTtyZXR1cm4gYT0+dC5wYXJzZXIuc3VicnVsZShuLEpsZSh0LHIpLGUsaShhKSl9ZWxzZSBpZihKbyhyKSl7bGV0IG49dC5jb25zdW1lKyssaT1nTSh0LHIubmFtZSk7cmV0dXJuKCk9PnQucGFyc2VyLmNvbnN1bWUobixpLGUpfWVsc2UgaWYocil1ZihyKTtlbHNlIHRocm93IG5ldyB0MChlLiRjc3ROb2RlLGBVbmRlZmluZWQgcnVsZSB0eXBlOiAke2UuJHR5cGV9YCl9ZnVuY3Rpb24gS0ZlKHQsZSl7bGV0IHI9ZS5tYXAobj0+S3Uobi52YWx1ZSkpO3JldHVybiBuPT57bGV0IGk9e307Zm9yKGxldCBhPTA7YTxyLmxlbmd0aDthKyspe2xldCBzPXQucGFyYW1ldGVyc1thXSxsPXJbYV07aVtzLm5hbWVdPWwobil9cmV0dXJuIGl9fWZ1bmN0aW9uIEt1KHQpe2lmKFFEKHQpKXtsZXQgZT1LdSh0LmxlZnQpLHI9S3UodC5yaWdodCk7cmV0dXJuIG49PmUobil8fHIobil9ZWxzZSBpZihqRCh0KSl7bGV0IGU9S3UodC5sZWZ0KSxyPUt1KHQucmlnaHQpO3JldHVybiBuPT5lKG4pJiZyKG4pfWVsc2UgaWYock4odCkpe2xldCBlPUt1KHQudmFsdWUpO3JldHVybiByPT4hZShyKX1lbHNlIGlmKHNOKHQpKXtsZXQgZT10LnBhcmFtZXRlci5yZWYubmFtZTtyZXR1cm4gcj0+ciE9PXZvaWQgMCYmcltlXT09PSEwfWVsc2UgaWYocUQodCkpe2xldCBlPSEhdC50cnVlO3JldHVybigpPT5lfXVmKHQpfWZ1bmN0aW9uIFFGZSh0LGUpe2lmKGUuZWxlbWVudHMubGVuZ3RoPT09MSlyZXR1cm4gdzAodCxlLmVsZW1lbnRzWzBdKTt7bGV0IHI9W107Zm9yKGxldCBpIG9mIGUuZWxlbWVudHMpe2xldCBhPXtBTFQ6dzAodCxpLCEwKX0scz0kayhpKTtzJiYoYS5HQVRFPUt1KHMpKSxyLnB1c2goYSl9bGV0IG49dC5vcisrO3JldHVybiBpPT50LnBhcnNlci5hbHRlcm5hdGl2ZXMobixyLm1hcChhPT57bGV0IHM9e0FMVDpvKCgpPT5hLkFMVChpKSwiQUxUIil9LGw9YS5HQVRFO3JldHVybiBsJiYocy5HQVRFPSgpPT5sKGkpKSxzfSkpfX1mdW5jdGlvbiBaRmUodCxlKXtpZihlLmVsZW1lbnRzLmxlbmd0aD09PTEpcmV0dXJuIHcwKHQsZS5lbGVtZW50c1swXSk7bGV0IHI9W107Zm9yKGxldCBsIG9mIGUuZWxlbWVudHMpe2xldCB1PXtBTFQ6dzAodCxsLCEwKX0saD0kayhsKTtoJiYodS5HQVRFPUt1KGgpKSxyLnB1c2godSl9bGV0IG49dC5vcisrLGk9bygobCx1KT0+e2xldCBoPXUuZ2V0UnVsZVN0YWNrKCkuam9pbigiLSIpO3JldHVybmB1R3JvdXBfJHtsfV8ke2h9YH0sImlkRnVuYyIpLGE9byhsPT50LnBhcnNlci5hbHRlcm5hdGl2ZXMobixyLm1hcCgodSxoKT0+e2xldCBmPXtBTFQ6bygoKT0+ITAsIkFMVCIpfSxkPXQucGFyc2VyO2YuQUxUPSgpPT57aWYodS5BTFQobCksIWQuaXNSZWNvcmRpbmcoKSl7bGV0IG09aShuLGQpO2QudW5vcmRlcmVkR3JvdXBzLmdldChtKXx8ZC51bm9yZGVyZWRHcm91cHMuc2V0KG0sW10pO2xldCBnPWQudW5vcmRlcmVkR3JvdXBzLmdldChtKTt0eXBlb2YgZz8uW2hdPiJ1IiYmKGdbaF09ITApfX07bGV0IHA9dS5HQVRFO3JldHVybiBwP2YuR0FURT0oKT0+cChsKTpmLkdBVEU9KCk9PntsZXQgbT1kLnVub3JkZXJlZEdyb3Vwcy5nZXQoaShuLGQpKTtyZXR1cm4hbT8uW2hdfSxmfSkpLCJhbHRlcm5hdGl2ZXMiKSxzPVpsZSh0LCRrKGUpLGEsIioiKTtyZXR1cm4gbD0+e3MobCksdC5wYXJzZXIuaXNSZWNvcmRpbmcoKXx8dC5wYXJzZXIudW5vcmRlcmVkR3JvdXBzLmRlbGV0ZShpKG4sdC5wYXJzZXIpKX19ZnVuY3Rpb24gSkZlKHQsZSl7bGV0IHI9ZS5lbGVtZW50cy5tYXAobj0+dzAodCxuKSk7cmV0dXJuIG49PnIuZm9yRWFjaChpPT5pKG4pKX1mdW5jdGlvbiAkayh0KXtpZihoZih0KSlyZXR1cm4gdC5ndWFyZENvbmRpdGlvbn1mdW5jdGlvbiBRbGUodCxlLHI9ZS50ZXJtaW5hbCl7aWYocilpZigkbChyKSYmR2Eoci5ydWxlLnJlZikpe2xldCBuPXQuc3VicnVsZSsrO3JldHVybiBpPT50LnBhcnNlci5zdWJydWxlKG4sSmxlKHQsci5ydWxlLnJlZiksZSxpKX1lbHNlIGlmKCRsKHIpJiZKbyhyLnJ1bGUucmVmKSl7bGV0IG49dC5jb25zdW1lKyssaT1nTSh0LHIucnVsZS5yZWYubmFtZSk7cmV0dXJuKCk9PnQucGFyc2VyLmNvbnN1bWUobixpLGUpfWVsc2UgaWYoZWwocikpe2xldCBuPXQuY29uc3VtZSsrLGk9Z00odCxyLnZhbHVlKTtyZXR1cm4oKT0+dC5wYXJzZXIuY29uc3VtZShuLGksZSl9ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBidWlsZCBjcm9zcyByZWZlcmVuY2UgcGFyc2VyIik7ZWxzZXtpZighZS50eXBlLnJlZil0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCByZXNvbHZlIHJlZmVyZW5jZSB0byB0eXBlOiAiK2UudHlwZS4kcmVmVGV4dCk7bGV0IG49SFQoZS50eXBlLnJlZiksaT1uPy50ZXJtaW5hbDtpZighaSl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIG5hbWUgYXNzaWdubWVudCBmb3IgdHlwZTogIitsMChlLnR5cGUucmVmKSk7cmV0dXJuIFFsZSh0LGUsaSl9fWZ1bmN0aW9uIGV6ZSh0LGUpe2xldCByPXQuY29uc3VtZSsrLG49dC50b2tlbnNbZS52YWx1ZV07aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCB0b2tlbiBmb3Iga2V5d29yZDogIitlLnZhbHVlKTtyZXR1cm4oKT0+dC5wYXJzZXIuY29uc3VtZShyLG4sZSl9ZnVuY3Rpb24gWmxlKHQsZSxyLG4pe2xldCBpPWUmJkt1KGUpO2lmKCFuKWlmKGkpe2xldCBhPXQub3IrKztyZXR1cm4gcz0+dC5wYXJzZXIuYWx0ZXJuYXRpdmVzKGEsW3tBTFQ6bygoKT0+cihzKSwiQUxUIiksR0FURTpvKCgpPT5pKHMpLCJHQVRFIil9LHtBTFQ6RGsoKSxHQVRFOm8oKCk9PiFpKHMpLCJHQVRFIil9XSl9ZWxzZSByZXR1cm4gcjtpZihuPT09IioiKXtsZXQgYT10Lm1hbnkrKztyZXR1cm4gcz0+dC5wYXJzZXIubWFueShhLHtERUY6bygoKT0+cihzKSwiREVGIiksR0FURTppPygpPT5pKHMpOnZvaWQgMH0pfWVsc2UgaWYobj09PSIrIil7bGV0IGE9dC5tYW55Kys7aWYoaSl7bGV0IHM9dC5vcisrO3JldHVybiBsPT50LnBhcnNlci5hbHRlcm5hdGl2ZXMocyxbe0FMVDpvKCgpPT50LnBhcnNlci5hdExlYXN0T25lKGEse0RFRjpvKCgpPT5yKGwpLCJERUYiKX0pLCJBTFQiKSxHQVRFOm8oKCk9PmkobCksIkdBVEUiKX0se0FMVDpEaygpLEdBVEU6bygoKT0+IWkobCksIkdBVEUiKX1dKX1lbHNlIHJldHVybiBzPT50LnBhcnNlci5hdExlYXN0T25lKGEse0RFRjpvKCgpPT5yKHMpLCJERUYiKX0pfWVsc2UgaWYobj09PSI/Iil7bGV0IGE9dC5vcHRpb25hbCsrO3JldHVybiBzPT50LnBhcnNlci5vcHRpb25hbChhLHtERUY6bygoKT0+cihzKSwiREVGIiksR0FURTppPygpPT5pKHMpOnZvaWQgMH0pfWVsc2UgdWYobil9ZnVuY3Rpb24gSmxlKHQsZSl7bGV0IHI9dHplKHQsZSksbj10LnJ1bGVzLmdldChyKTtpZighbil0aHJvdyBuZXcgRXJyb3IoYFJ1bGUgIiR7cn0iIG5vdCBmb3VuZC4iYCk7cmV0dXJuIG59ZnVuY3Rpb24gdHplKHQsZSl7aWYoR2EoZSkpcmV0dXJuIGUubmFtZTtpZih0LnJ1bGVOYW1lcy5oYXMoZSkpcmV0dXJuIHQucnVsZU5hbWVzLmdldChlKTt7bGV0IHI9ZSxuPXIuJGNvbnRhaW5lcixpPWUuJHR5cGU7Zm9yKDshR2Eobik7KShoZihuKXx8T1Qobil8fEJUKG4pKSYmKGk9bi5lbGVtZW50cy5pbmRleE9mKHIpLnRvU3RyaW5nKCkrIjoiK2kpLHI9bixuPW4uJGNvbnRhaW5lcjtyZXR1cm4gaT1uLm5hbWUrIjoiK2ksdC5ydWxlTmFtZXMuc2V0KGUsaSksaX19ZnVuY3Rpb24gZ00odCxlKXtsZXQgcj10LnRva2Vuc1tlXTtpZighcil0aHJvdyBuZXcgRXJyb3IoYFRva2VuICIke2V9IiBub3QgZm91bmQuImApO3JldHVybiByfXZhciB5TT1NKCgpPT57InVzZSBzdHJpY3QiO2cwKCk7QmMoKTtfVCgpOyRzKCk7VmwoKTtvKFZrLCJjcmVhdGVQYXJzZXIiKTtvKHFGZSwiYnVpbGRSdWxlcyIpO28odzAsImJ1aWxkRWxlbWVudCIpO28oWEZlLCJidWlsZEFjdGlvbiIpO28oakZlLCJidWlsZFJ1bGVDYWxsIik7byhLRmUsImJ1aWxkUnVsZUNhbGxQcmVkaWNhdGUiKTtvKEt1LCJidWlsZFByZWRpY2F0ZSIpO28oUUZlLCJidWlsZEFsdGVybmF0aXZlcyIpO28oWkZlLCJidWlsZFVub3JkZXJlZEdyb3VwIik7byhKRmUsImJ1aWxkR3JvdXAiKTtvKCRrLCJnZXRHdWFyZENvbmRpdGlvbiIpO28oUWxlLCJidWlsZENyb3NzUmVmZXJlbmNlIik7byhlemUsImJ1aWxkS2V5d29yZCIpO28oWmxlLCJ3cmFwIik7byhKbGUsImdldFJ1bGUiKTtvKHR6ZSwiZ2V0UnVsZU5hbWUiKTtvKGdNLCJnZXRUb2tlbiIpfSk7ZnVuY3Rpb24gdk0odCl7bGV0IGU9dC5HcmFtbWFyLHI9dC5wYXJzZXIuTGV4ZXIsbj1uZXcgVzIodCk7cmV0dXJuIFZrKGUsbixyLmRlZmluaXRpb24pLG4uZmluYWxpemUoKSxufXZhciB4TT1NKCgpPT57InVzZSBzdHJpY3QiO1kyKCk7eU0oKTtvKHZNLCJjcmVhdGVDb21wbGV0aW9uUGFyc2VyIil9KTtmdW5jdGlvbiBiTSh0KXtsZXQgZT1lY2UodCk7cmV0dXJuIGUuZmluYWxpemUoKSxlfWZ1bmN0aW9uIGVjZSh0KXtsZXQgZT10LkdyYW1tYXIscj10LnBhcnNlci5MZXhlcixuPW5ldyBIMih0KTtyZXR1cm4gVmsoZSxuLHIuZGVmaW5pdGlvbil9dmFyIHdNPU0oKCk9PnsidXNlIHN0cmljdCI7WTIoKTt5TSgpO28oYk0sImNyZWF0ZUxhbmdpdW1QYXJzZXIiKTtvKGVjZSwicHJlcGFyZUxhbmdpdW1QYXJzZXIiKX0pO3ZhciBUMCxUTT1NKCgpPT57InVzZSBzdHJpY3QiO2cwKCk7QmMoKTtvcygpO1ZsKCk7aWcoKTskcygpO1QwPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRUb2tlbkJ1aWxkZXIiKX1idWlsZFRva2VucyhlLHIpe2xldCBuPXRuKGQyKGUsITEpKSxpPXRoaXMuYnVpbGRUZXJtaW5hbFRva2VucyhuKSxhPXRoaXMuYnVpbGRLZXl3b3JkVG9rZW5zKG4saSxyKTtyZXR1cm4gaS5mb3JFYWNoKHM9PntsZXQgbD1zLlBBVFRFUk47dHlwZW9mIGw9PSJvYmplY3QiJiZsJiYidGVzdCJpbiBsJiZWVChsKT9hLnVuc2hpZnQocyk6YS5wdXNoKHMpfSksYX1idWlsZFRlcm1pbmFsVG9rZW5zKGUpe3JldHVybiBlLmZpbHRlcihKbykuZmlsdGVyKHI9PiFyLmZyYWdtZW50KS5tYXAocj0+dGhpcy5idWlsZFRlcm1pbmFsVG9rZW4ocikpLnRvQXJyYXkoKX1idWlsZFRlcm1pbmFsVG9rZW4oZSl7bGV0IHI9YWcoZSksbj10aGlzLnJlcXVpcmVzQ3VzdG9tUGF0dGVybihyKT90aGlzLnJlZ2V4UGF0dGVybkZ1bmN0aW9uKHIpOnIsaT17bmFtZTplLm5hbWUsUEFUVEVSTjpuLExJTkVfQlJFQUtTOiEwfTtyZXR1cm4gZS5oaWRkZW4mJihpLkdST1VQPVZUKHIpP2NpLlNLSVBQRUQ6ImhpZGRlbiIpLGl9cmVxdWlyZXNDdXN0b21QYXR0ZXJuKGUpe3JldHVybiBlLmZsYWdzLmluY2x1ZGVzKCJ1Iik/ITA6ISEoZS5zb3VyY2UuaW5jbHVkZXMoIj88PSIpfHxlLnNvdXJjZS5pbmNsdWRlcygiPzwhIikpfXJlZ2V4UGF0dGVybkZ1bmN0aW9uKGUpe2xldCByPW5ldyBSZWdFeHAoZSxlLmZsYWdzKyJ5Iik7cmV0dXJuKG4saSk9PihyLmxhc3RJbmRleD1pLHIuZXhlYyhuKSl9YnVpbGRLZXl3b3JkVG9rZW5zKGUscixuKXtyZXR1cm4gZS5maWx0ZXIoR2EpLmZsYXRNYXAoaT0+RmMoaSkuZmlsdGVyKGVsKSkuZGlzdGluY3QoaT0+aS52YWx1ZSkudG9BcnJheSgpLnNvcnQoKGksYSk9PmEudmFsdWUubGVuZ3RoLWkudmFsdWUubGVuZ3RoKS5tYXAoaT0+dGhpcy5idWlsZEtleXdvcmRUb2tlbihpLHIsISFuPy5jYXNlSW5zZW5zaXRpdmUpKX1idWlsZEtleXdvcmRUb2tlbihlLHIsbil7cmV0dXJue25hbWU6ZS52YWx1ZSxQQVRURVJOOnRoaXMuYnVpbGRLZXl3b3JkUGF0dGVybihlLG4pLExPTkdFUl9BTFQ6dGhpcy5maW5kTG9uZ2VyQWx0KGUscil9fWJ1aWxkS2V5d29yZFBhdHRlcm4oZSxyKXtyZXR1cm4gcj9uZXcgUmVnRXhwKEtOKGUudmFsdWUpKTplLnZhbHVlfWZpbmRMb25nZXJBbHQoZSxyKXtyZXR1cm4gci5yZWR1Y2UoKG4saSk9PntsZXQgYT1pPy5QQVRURVJOO3JldHVybiBhPy5zb3VyY2UmJlFOKCJeIithLnNvdXJjZSsiJCIsZS52YWx1ZSkmJm4ucHVzaChpKSxufSxbXSl9fX0pO3ZhciBrMCwkYyxrTT1NKCgpPT57InVzZSBzdHJpY3QiO0JjKCk7VmwoKTtrMD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0VmFsdWVDb252ZXJ0ZXIiKX1jb252ZXJ0KGUscil7bGV0IG49ci5ncmFtbWFyU291cmNlO2lmKHIwKG4pJiYobj1lUihuKSksJGwobikpe2xldCBpPW4ucnVsZS5yZWY7aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGNzdCBub2RlIHdhcyBub3QgcGFyc2VkIGJ5IGEgcnVsZS4iKTtyZXR1cm4gdGhpcy5ydW5Db252ZXJ0ZXIoaSxlLHIpfXJldHVybiBlfXJ1bkNvbnZlcnRlcihlLHIsbil7dmFyIGk7c3dpdGNoKGUubmFtZS50b1VwcGVyQ2FzZSgpKXtjYXNlIklOVCI6cmV0dXJuICRjLmNvbnZlcnRJbnQocik7Y2FzZSJTVFJJTkciOnJldHVybiAkYy5jb252ZXJ0U3RyaW5nKHIpO2Nhc2UiSUQiOnJldHVybiAkYy5jb252ZXJ0SUQocil9c3dpdGNoKChpPWxSKGUpKT09PW51bGx8fGk9PT12b2lkIDA/dm9pZCAwOmkudG9Mb3dlckNhc2UoKSl7Y2FzZSJudW1iZXIiOnJldHVybiAkYy5jb252ZXJ0TnVtYmVyKHIpO2Nhc2UiYm9vbGVhbiI6cmV0dXJuICRjLmNvbnZlcnRCb29sZWFuKHIpO2Nhc2UiYmlnaW50IjpyZXR1cm4gJGMuY29udmVydEJpZ2ludChyKTtjYXNlImRhdGUiOnJldHVybiAkYy5jb252ZXJ0RGF0ZShyKTtkZWZhdWx0OnJldHVybiByfX19OyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGgpe2xldCBmPSIiO2ZvcihsZXQgZD0xO2Q8aC5sZW5ndGgtMTtkKyspe2xldCBwPWguY2hhckF0KGQpO2lmKHA9PT0iXFwiKXtsZXQgbT1oLmNoYXJBdCgrK2QpO2YrPXIobSl9ZWxzZSBmKz1wfXJldHVybiBmfW8oZSwiY29udmVydFN0cmluZyIpLHQuY29udmVydFN0cmluZz1lO2Z1bmN0aW9uIHIoaCl7c3dpdGNoKGgpe2Nhc2UiYiI6cmV0dXJuIlxiIjtjYXNlImYiOnJldHVybiJcZiI7Y2FzZSJuIjpyZXR1cm5gCmA7Y2FzZSJyIjpyZXR1cm4iXHIiO2Nhc2UidCI6cmV0dXJuIgkiO2Nhc2UidiI6cmV0dXJuIlx2IjtjYXNlIjAiOnJldHVybiJcMCI7ZGVmYXVsdDpyZXR1cm4gaH19byhyLCJjb252ZXJ0RXNjYXBlQ2hhcmFjdGVyIik7ZnVuY3Rpb24gbihoKXtyZXR1cm4gaC5jaGFyQXQoMCk9PT0iXiI/aC5zdWJzdHJpbmcoMSk6aH1vKG4sImNvbnZlcnRJRCIpLHQuY29udmVydElEPW47ZnVuY3Rpb24gaShoKXtyZXR1cm4gcGFyc2VJbnQoaCl9byhpLCJjb252ZXJ0SW50IiksdC5jb252ZXJ0SW50PWk7ZnVuY3Rpb24gYShoKXtyZXR1cm4gQmlnSW50KGgpfW8oYSwiY29udmVydEJpZ2ludCIpLHQuY29udmVydEJpZ2ludD1hO2Z1bmN0aW9uIHMoaCl7cmV0dXJuIG5ldyBEYXRlKGgpfW8ocywiY29udmVydERhdGUiKSx0LmNvbnZlcnREYXRlPXM7ZnVuY3Rpb24gbChoKXtyZXR1cm4gTnVtYmVyKGgpfW8obCwiY29udmVydE51bWJlciIpLHQuY29udmVydE51bWJlcj1sO2Z1bmN0aW9uIHUoaCl7cmV0dXJuIGgudG9Mb3dlckNhc2UoKT09PSJ0cnVlIn1vKHUsImNvbnZlcnRCb29sZWFuIiksdC5jb252ZXJ0Qm9vbGVhbj11fSkoJGN8fCgkYz17fSkpfSk7dmFyIEFNPUVpKENNPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShDTSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEVNO2Z1bmN0aW9uIFNNKCl7aWYoRU09PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJObyBydW50aW1lIGFic3RyYWN0aW9uIGxheWVyIGluc3RhbGxlZCIpO3JldHVybiBFTX1vKFNNLCJSQUwiKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtpZihyPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiTm8gcnVudGltZSBhYnN0cmFjdGlvbiBsYXllciBwcm92aWRlZCIpO0VNPXJ9byhlLCJpbnN0YWxsIiksdC5pbnN0YWxsPWV9KShTTXx8KFNNPXt9KSk7Q00uZGVmYXVsdD1TTX0pO3ZhciBuY2U9RWkoJGE9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRhLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTskYS5zdHJpbmdBcnJheT0kYS5hcnJheT0kYS5mdW5jPSRhLmVycm9yPSRhLm51bWJlcj0kYS5zdHJpbmc9JGEuYm9vbGVhbj12b2lkIDA7ZnVuY3Rpb24gcnplKHQpe3JldHVybiB0PT09ITB8fHQ9PT0hMX1vKHJ6ZSwiYm9vbGVhbiIpOyRhLmJvb2xlYW49cnplO2Z1bmN0aW9uIHRjZSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJzdHJpbmcifHx0IGluc3RhbmNlb2YgU3RyaW5nfW8odGNlLCJzdHJpbmciKTskYS5zdHJpbmc9dGNlO2Z1bmN0aW9uIG56ZSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJudW1iZXIifHx0IGluc3RhbmNlb2YgTnVtYmVyfW8obnplLCJudW1iZXIiKTskYS5udW1iZXI9bnplO2Z1bmN0aW9uIGl6ZSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIEVycm9yfW8oaXplLCJlcnJvciIpOyRhLmVycm9yPWl6ZTtmdW5jdGlvbiBhemUodCl7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24ifW8oYXplLCJmdW5jIik7JGEuZnVuYz1hemU7ZnVuY3Rpb24gcmNlKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfW8ocmNlLCJhcnJheSIpOyRhLmFycmF5PXJjZTtmdW5jdGlvbiBzemUodCl7cmV0dXJuIHJjZSh0KSYmdC5ldmVyeShlPT50Y2UoZSkpfW8oc3plLCJzdHJpbmdBcnJheSIpOyRhLnN0cmluZ0FycmF5PXN6ZX0pO3ZhciBMTT1FaShNZz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTWcsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO01nLkVtaXR0ZXI9TWcuRXZlbnQ9dm9pZCAwO3ZhciBvemU9QU0oKSxpY2U7KGZ1bmN0aW9uKHQpe2xldCBlPXtkaXNwb3NlKCl7fX07dC5Ob25lPWZ1bmN0aW9uKCl7cmV0dXJuIGV9fSkoaWNlfHwoTWcuRXZlbnQ9aWNlPXt9KSk7dmFyIF9NPWNsYXNze3N0YXRpY3tvKHRoaXMsIkNhbGxiYWNrTGlzdCIpfWFkZChlLHI9bnVsbCxuKXt0aGlzLl9jYWxsYmFja3N8fCh0aGlzLl9jYWxsYmFja3M9W10sdGhpcy5fY29udGV4dHM9W10pLHRoaXMuX2NhbGxiYWNrcy5wdXNoKGUpLHRoaXMuX2NvbnRleHRzLnB1c2gociksQXJyYXkuaXNBcnJheShuKSYmbi5wdXNoKHtkaXNwb3NlOm8oKCk9PnRoaXMucmVtb3ZlKGUsciksImRpc3Bvc2UiKX0pfXJlbW92ZShlLHI9bnVsbCl7aWYoIXRoaXMuX2NhbGxiYWNrcylyZXR1cm47bGV0IG49ITE7Zm9yKGxldCBpPTAsYT10aGlzLl9jYWxsYmFja3MubGVuZ3RoO2k8YTtpKyspaWYodGhpcy5fY2FsbGJhY2tzW2ldPT09ZSlpZih0aGlzLl9jb250ZXh0c1tpXT09PXIpe3RoaXMuX2NhbGxiYWNrcy5zcGxpY2UoaSwxKSx0aGlzLl9jb250ZXh0cy5zcGxpY2UoaSwxKTtyZXR1cm59ZWxzZSBuPSEwO2lmKG4pdGhyb3cgbmV3IEVycm9yKCJXaGVuIGFkZGluZyBhIGxpc3RlbmVyIHdpdGggYSBjb250ZXh0LCB5b3Ugc2hvdWxkIHJlbW92ZSBpdCB3aXRoIHRoZSBzYW1lIGNvbnRleHQiKX1pbnZva2UoLi4uZSl7aWYoIXRoaXMuX2NhbGxiYWNrcylyZXR1cm5bXTtsZXQgcj1bXSxuPXRoaXMuX2NhbGxiYWNrcy5zbGljZSgwKSxpPXRoaXMuX2NvbnRleHRzLnNsaWNlKDApO2ZvcihsZXQgYT0wLHM9bi5sZW5ndGg7YTxzO2ErKyl0cnl7ci5wdXNoKG5bYV0uYXBwbHkoaVthXSxlKSl9Y2F0Y2gobCl7KDAsb3plLmRlZmF1bHQpKCkuY29uc29sZS5lcnJvcihsKX1yZXR1cm4gcn1pc0VtcHR5KCl7cmV0dXJuIXRoaXMuX2NhbGxiYWNrc3x8dGhpcy5fY2FsbGJhY2tzLmxlbmd0aD09PTB9ZGlzcG9zZSgpe3RoaXMuX2NhbGxiYWNrcz12b2lkIDAsdGhpcy5fY29udGV4dHM9dm9pZCAwfX0sVWs9Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJFbWl0dGVyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5fb3B0aW9ucz1lfWdldCBldmVudCgpe3JldHVybiB0aGlzLl9ldmVudHx8KHRoaXMuX2V2ZW50PShlLHIsbik9Pnt0aGlzLl9jYWxsYmFja3N8fCh0aGlzLl9jYWxsYmFja3M9bmV3IF9NKSx0aGlzLl9vcHRpb25zJiZ0aGlzLl9vcHRpb25zLm9uRmlyc3RMaXN0ZW5lckFkZCYmdGhpcy5fY2FsbGJhY2tzLmlzRW1wdHkoKSYmdGhpcy5fb3B0aW9ucy5vbkZpcnN0TGlzdGVuZXJBZGQodGhpcyksdGhpcy5fY2FsbGJhY2tzLmFkZChlLHIpO2xldCBpPXtkaXNwb3NlOm8oKCk9Pnt0aGlzLl9jYWxsYmFja3MmJih0aGlzLl9jYWxsYmFja3MucmVtb3ZlKGUsciksaS5kaXNwb3NlPXQuX25vb3AsdGhpcy5fb3B0aW9ucyYmdGhpcy5fb3B0aW9ucy5vbkxhc3RMaXN0ZW5lclJlbW92ZSYmdGhpcy5fY2FsbGJhY2tzLmlzRW1wdHkoKSYmdGhpcy5fb3B0aW9ucy5vbkxhc3RMaXN0ZW5lclJlbW92ZSh0aGlzKSl9LCJkaXNwb3NlIil9O3JldHVybiBBcnJheS5pc0FycmF5KG4pJiZuLnB1c2goaSksaX0pLHRoaXMuX2V2ZW50fWZpcmUoZSl7dGhpcy5fY2FsbGJhY2tzJiZ0aGlzLl9jYWxsYmFja3MuaW52b2tlLmNhbGwodGhpcy5fY2FsbGJhY2tzLGUpfWRpc3Bvc2UoKXt0aGlzLl9jYWxsYmFja3MmJih0aGlzLl9jYWxsYmFja3MuZGlzcG9zZSgpLHRoaXMuX2NhbGxiYWNrcz12b2lkIDApfX07TWcuRW1pdHRlcj1VaztVay5fbm9vcD1mdW5jdGlvbigpe319KTt2YXIgYWNlPUVpKElnPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShJZywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7SWcuQ2FuY2VsbGF0aW9uVG9rZW5Tb3VyY2U9SWcuQ2FuY2VsbGF0aW9uVG9rZW49dm9pZCAwO3ZhciBsemU9QU0oKSxjemU9bmNlKCksRE09TE0oKSxIazsoZnVuY3Rpb24odCl7dC5Ob25lPU9iamVjdC5mcmVlemUoe2lzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOiExLG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOkRNLkV2ZW50Lk5vbmV9KSx0LkNhbmNlbGxlZD1PYmplY3QuZnJlZXplKHtpc0NhbmNlbGxhdGlvblJlcXVlc3RlZDohMCxvbkNhbmNlbGxhdGlvblJlcXVlc3RlZDpETS5FdmVudC5Ob25lfSk7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiBuJiYobj09PXQuTm9uZXx8bj09PXQuQ2FuY2VsbGVkfHxjemUuYm9vbGVhbihuLmlzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKSYmISFuLm9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKX1vKGUsImlzIiksdC5pcz1lfSkoSGt8fChJZy5DYW5jZWxsYXRpb25Ub2tlbj1Iaz17fSkpO3ZhciB1emU9T2JqZWN0LmZyZWV6ZShmdW5jdGlvbih0LGUpe2xldCByPSgwLGx6ZS5kZWZhdWx0KSgpLnRpbWVyLnNldFRpbWVvdXQodC5iaW5kKGUpLDApO3JldHVybntkaXNwb3NlKCl7ci5kaXNwb3NlKCl9fX0pLFdrPWNsYXNze3N0YXRpY3tvKHRoaXMsIk11dGFibGVUb2tlbiIpfWNvbnN0cnVjdG9yKCl7dGhpcy5faXNDYW5jZWxsZWQ9ITF9Y2FuY2VsKCl7dGhpcy5faXNDYW5jZWxsZWR8fCh0aGlzLl9pc0NhbmNlbGxlZD0hMCx0aGlzLl9lbWl0dGVyJiYodGhpcy5fZW1pdHRlci5maXJlKHZvaWQgMCksdGhpcy5kaXNwb3NlKCkpKX1nZXQgaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKXtyZXR1cm4gdGhpcy5faXNDYW5jZWxsZWR9Z2V0IG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKCl7cmV0dXJuIHRoaXMuX2lzQ2FuY2VsbGVkP3V6ZToodGhpcy5fZW1pdHRlcnx8KHRoaXMuX2VtaXR0ZXI9bmV3IERNLkVtaXR0ZXIpLHRoaXMuX2VtaXR0ZXIuZXZlbnQpfWRpc3Bvc2UoKXt0aGlzLl9lbWl0dGVyJiYodGhpcy5fZW1pdHRlci5kaXNwb3NlKCksdGhpcy5fZW1pdHRlcj12b2lkIDApfX0sTk09Y2xhc3N7c3RhdGlje28odGhpcywiQ2FuY2VsbGF0aW9uVG9rZW5Tb3VyY2UiKX1nZXQgdG9rZW4oKXtyZXR1cm4gdGhpcy5fdG9rZW58fCh0aGlzLl90b2tlbj1uZXcgV2spLHRoaXMuX3Rva2VufWNhbmNlbCgpe3RoaXMuX3Rva2VuP3RoaXMuX3Rva2VuLmNhbmNlbCgpOnRoaXMuX3Rva2VuPUhrLkNhbmNlbGxlZH1kaXNwb3NlKCl7dGhpcy5fdG9rZW4/dGhpcy5fdG9rZW4gaW5zdGFuY2VvZiBXayYmdGhpcy5fdG9rZW4uZGlzcG9zZSgpOnRoaXMuX3Rva2VuPUhrLk5vbmV9fTtJZy5DYW5jZWxsYXRpb25Ub2tlblNvdXJjZT1OTX0pO3ZhciBBcj17fTt2YXIgcmw9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtTcihBcixKaShhY2UoKSwxKSl9KTtmdW5jdGlvbiBNTSgpe3JldHVybiBuZXcgUHJvbWlzZSh0PT57dHlwZW9mIHNldEltbWVkaWF0ZT4idSI/c2V0VGltZW91dCh0LDApOnNldEltbWVkaWF0ZSh0KX0pfWZ1bmN0aW9uIG9jZSgpe3JldHVybiBSTT1EYXRlLm5vdygpLG5ldyBBci5DYW5jZWxsYXRpb25Ub2tlblNvdXJjZX1mdW5jdGlvbiBsY2UodCl7c2NlPXR9ZnVuY3Rpb24gbWYodCl7cmV0dXJuIHQ9PT1WY31hc3luYyBmdW5jdGlvbiBIaSh0KXtpZih0PT09QXIuQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSlyZXR1cm47bGV0IGU9RGF0ZS5ub3coKTtpZihlLVJNPj1zY2UmJihSTT1lLGF3YWl0IE1NKCkpLHQuaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQpdGhyb3cgVmN9dmFyIFJNLHNjZSxWYyxmcyxubD1NKCgpPT57InVzZSBzdHJpY3QiO3JsKCk7byhNTSwiZGVsYXlOZXh0VGljayIpO1JNPTAsc2NlPTEwO28ob2NlLCJzdGFydENhbmNlbGFibGVPcGVyYXRpb24iKTtvKGxjZSwic2V0SW50ZXJydXB0aW9uUGVyaW9kIik7VmM9U3ltYm9sKCJPcGVyYXRpb25DYW5jZWxsZWQiKTtvKG1mLCJpc09wZXJhdGlvbkNhbmNlbGxlZCIpO28oSGksImludGVycnVwdEFuZENoZWNrIik7ZnM9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmZXJyZWQiKX1jb25zdHJ1Y3Rvcigpe3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZSgoZSxyKT0+e3RoaXMucmVzb2x2ZT1uPT4oZShuKSx0aGlzKSx0aGlzLnJlamVjdD1uPT4ocihuKSx0aGlzKX0pfX19KTtmdW5jdGlvbiBJTSh0LGUpe2lmKHQubGVuZ3RoPD0xKXJldHVybiB0O2xldCByPXQubGVuZ3RoLzJ8MCxuPXQuc2xpY2UoMCxyKSxpPXQuc2xpY2Uocik7SU0obixlKSxJTShpLGUpO2xldCBhPTAscz0wLGw9MDtmb3IoO2E8bi5sZW5ndGgmJnM8aS5sZW5ndGg7KWUoblthXSxpW3NdKTw9MD90W2wrK109blthKytdOnRbbCsrXT1pW3MrK107Zm9yKDthPG4ubGVuZ3RoOyl0W2wrK109blthKytdO2Zvcig7czxpLmxlbmd0aDspdFtsKytdPWlbcysrXTtyZXR1cm4gdH1mdW5jdGlvbiBjY2UodCxlLHI9MCl7bGV0IG49ZT9bcl06W107Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspe2xldCBhPXQuY2hhckNvZGVBdChpKTt1Y2UoYSkmJihhPT09MTMmJmkrMTx0Lmxlbmd0aCYmdC5jaGFyQ29kZUF0KGkrMSk9PT0xMCYmaSsrLG4ucHVzaChyK2krMSkpfXJldHVybiBufWZ1bmN0aW9uIHVjZSh0KXtyZXR1cm4gdD09PTEzfHx0PT09MTB9ZnVuY3Rpb24gaGNlKHQpe2xldCBlPXQuc3RhcnQscj10LmVuZDtyZXR1cm4gZS5saW5lPnIubGluZXx8ZS5saW5lPT09ci5saW5lJiZlLmNoYXJhY3Rlcj5yLmNoYXJhY3Rlcj97c3RhcnQ6cixlbmQ6ZX06dH1mdW5jdGlvbiBoemUodCl7bGV0IGU9aGNlKHQucmFuZ2UpO3JldHVybiBlIT09dC5yYW5nZT97bmV3VGV4dDp0Lm5ld1RleHQscmFuZ2U6ZX06dH12YXIgWWssT2csZmNlPU0oKCk9PnsidXNlIHN0cmljdCI7WWs9Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJGdWxsVGV4dERvY3VtZW50Iil9Y29uc3RydWN0b3IoZSxyLG4saSl7dGhpcy5fdXJpPWUsdGhpcy5fbGFuZ3VhZ2VJZD1yLHRoaXMuX3ZlcnNpb249bix0aGlzLl9jb250ZW50PWksdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfWdldCB1cmkoKXtyZXR1cm4gdGhpcy5fdXJpfWdldCBsYW5ndWFnZUlkKCl7cmV0dXJuIHRoaXMuX2xhbmd1YWdlSWR9Z2V0IHZlcnNpb24oKXtyZXR1cm4gdGhpcy5fdmVyc2lvbn1nZXRUZXh0KGUpe2lmKGUpe2xldCByPXRoaXMub2Zmc2V0QXQoZS5zdGFydCksbj10aGlzLm9mZnNldEF0KGUuZW5kKTtyZXR1cm4gdGhpcy5fY29udGVudC5zdWJzdHJpbmcocixuKX1yZXR1cm4gdGhpcy5fY29udGVudH11cGRhdGUoZSxyKXtmb3IobGV0IG4gb2YgZSlpZih0LmlzSW5jcmVtZW50YWwobikpe2xldCBpPWhjZShuLnJhbmdlKSxhPXRoaXMub2Zmc2V0QXQoaS5zdGFydCkscz10aGlzLm9mZnNldEF0KGkuZW5kKTt0aGlzLl9jb250ZW50PXRoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKDAsYSkrbi50ZXh0K3RoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKHMsdGhpcy5fY29udGVudC5sZW5ndGgpO2xldCBsPU1hdGgubWF4KGkuc3RhcnQubGluZSwwKSx1PU1hdGgubWF4KGkuZW5kLmxpbmUsMCksaD10aGlzLl9saW5lT2Zmc2V0cyxmPWNjZShuLnRleHQsITEsYSk7aWYodS1sPT09Zi5sZW5ndGgpZm9yKGxldCBwPTAsbT1mLmxlbmd0aDtwPG07cCsrKWhbcCtsKzFdPWZbcF07ZWxzZSBmLmxlbmd0aDwxZTQ/aC5zcGxpY2UobCsxLHUtbCwuLi5mKTp0aGlzLl9saW5lT2Zmc2V0cz1oPWguc2xpY2UoMCxsKzEpLmNvbmNhdChmLGguc2xpY2UodSsxKSk7bGV0IGQ9bi50ZXh0Lmxlbmd0aC0ocy1hKTtpZihkIT09MClmb3IobGV0IHA9bCsxK2YubGVuZ3RoLG09aC5sZW5ndGg7cDxtO3ArKyloW3BdPWhbcF0rZH1lbHNlIGlmKHQuaXNGdWxsKG4pKXRoaXMuX2NvbnRlbnQ9bi50ZXh0LHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMDtlbHNlIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBjaGFuZ2UgZXZlbnQgcmVjZWl2ZWQiKTt0aGlzLl92ZXJzaW9uPXJ9Z2V0TGluZU9mZnNldHMoKXtyZXR1cm4gdGhpcy5fbGluZU9mZnNldHM9PT12b2lkIDAmJih0aGlzLl9saW5lT2Zmc2V0cz1jY2UodGhpcy5fY29udGVudCwhMCkpLHRoaXMuX2xpbmVPZmZzZXRzfXBvc2l0aW9uQXQoZSl7ZT1NYXRoLm1heChNYXRoLm1pbihlLHRoaXMuX2NvbnRlbnQubGVuZ3RoKSwwKTtsZXQgcj10aGlzLmdldExpbmVPZmZzZXRzKCksbj0wLGk9ci5sZW5ndGg7aWYoaT09PTApcmV0dXJue2xpbmU6MCxjaGFyYWN0ZXI6ZX07Zm9yKDtuPGk7KXtsZXQgcz1NYXRoLmZsb29yKChuK2kpLzIpO3Jbc10+ZT9pPXM6bj1zKzF9bGV0IGE9bi0xO3JldHVybiBlPXRoaXMuZW5zdXJlQmVmb3JlRU9MKGUsclthXSkse2xpbmU6YSxjaGFyYWN0ZXI6ZS1yW2FdfX1vZmZzZXRBdChlKXtsZXQgcj10aGlzLmdldExpbmVPZmZzZXRzKCk7aWYoZS5saW5lPj1yLmxlbmd0aClyZXR1cm4gdGhpcy5fY29udGVudC5sZW5ndGg7aWYoZS5saW5lPDApcmV0dXJuIDA7bGV0IG49cltlLmxpbmVdO2lmKGUuY2hhcmFjdGVyPD0wKXJldHVybiBuO2xldCBpPWUubGluZSsxPHIubGVuZ3RoP3JbZS5saW5lKzFdOnRoaXMuX2NvbnRlbnQubGVuZ3RoLGE9TWF0aC5taW4obitlLmNoYXJhY3RlcixpKTtyZXR1cm4gdGhpcy5lbnN1cmVCZWZvcmVFT0woYSxuKX1lbnN1cmVCZWZvcmVFT0woZSxyKXtmb3IoO2U+ciYmdWNlKHRoaXMuX2NvbnRlbnQuY2hhckNvZGVBdChlLTEpKTspZS0tO3JldHVybiBlfWdldCBsaW5lQ291bnQoKXtyZXR1cm4gdGhpcy5nZXRMaW5lT2Zmc2V0cygpLmxlbmd0aH1zdGF0aWMgaXNJbmNyZW1lbnRhbChlKXtsZXQgcj1lO3JldHVybiByIT1udWxsJiZ0eXBlb2Ygci50ZXh0PT0ic3RyaW5nIiYmci5yYW5nZSE9PXZvaWQgMCYmKHIucmFuZ2VMZW5ndGg9PT12b2lkIDB8fHR5cGVvZiByLnJhbmdlTGVuZ3RoPT0ibnVtYmVyIil9c3RhdGljIGlzRnVsbChlKXtsZXQgcj1lO3JldHVybiByIT1udWxsJiZ0eXBlb2Ygci50ZXh0PT0ic3RyaW5nIiYmci5yYW5nZT09PXZvaWQgMCYmci5yYW5nZUxlbmd0aD09PXZvaWQgMH19OyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGksYSxzLGwpe3JldHVybiBuZXcgWWsoaSxhLHMsbCl9byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIoaSxhLHMpe2lmKGkgaW5zdGFuY2VvZiBZaylyZXR1cm4gaS51cGRhdGUoYSxzKSxpO3Rocm93IG5ldyBFcnJvcigiVGV4dERvY3VtZW50LnVwZGF0ZTogZG9jdW1lbnQgbXVzdCBiZSBjcmVhdGVkIGJ5IFRleHREb2N1bWVudC5jcmVhdGUiKX1vKHIsInVwZGF0ZSIpLHQudXBkYXRlPXI7ZnVuY3Rpb24gbihpLGEpe2xldCBzPWkuZ2V0VGV4dCgpLGw9SU0oYS5tYXAoaHplKSwoZixkKT0+e2xldCBwPWYucmFuZ2Uuc3RhcnQubGluZS1kLnJhbmdlLnN0YXJ0LmxpbmU7cmV0dXJuIHA9PT0wP2YucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyLWQucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyOnB9KSx1PTAsaD1bXTtmb3IobGV0IGYgb2YgbCl7bGV0IGQ9aS5vZmZzZXRBdChmLnJhbmdlLnN0YXJ0KTtpZihkPHUpdGhyb3cgbmV3IEVycm9yKCJPdmVybGFwcGluZyBlZGl0Iik7ZD51JiZoLnB1c2gocy5zdWJzdHJpbmcodSxkKSksZi5uZXdUZXh0Lmxlbmd0aCYmaC5wdXNoKGYubmV3VGV4dCksdT1pLm9mZnNldEF0KGYucmFuZ2UuZW5kKX1yZXR1cm4gaC5wdXNoKHMuc3Vic3RyKHUpKSxoLmpvaW4oIiIpfW8obiwiYXBwbHlFZGl0cyIpLHQuYXBwbHlFZGl0cz1ufSkoT2d8fChPZz17fSkpO28oSU0sIm1lcmdlU29ydCIpO28oY2NlLCJjb21wdXRlTGluZU9mZnNldHMiKTtvKHVjZSwiaXNFT0wiKTtvKGhjZSwiZ2V0V2VsbGZvcm1lZFJhbmdlIik7byhoemUsImdldFdlbGxmb3JtZWRFZGl0Iil9KTt2YXIgZGNlLEhzLFBnLE9NPU0oKCk9PnsidXNlIHN0cmljdCI7KCgpPT57InVzZSBzdHJpY3QiO3ZhciB0PXs0NzA6aT0+e2Z1bmN0aW9uIGEodSl7aWYodHlwZW9mIHUhPSJzdHJpbmciKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhdGggbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgIitKU09OLnN0cmluZ2lmeSh1KSl9byhhLCJlIik7ZnVuY3Rpb24gcyh1LGgpe2Zvcih2YXIgZixkPSIiLHA9MCxtPS0xLGc9MCx5PTA7eTw9dS5sZW5ndGg7Kyt5KXtpZih5PHUubGVuZ3RoKWY9dS5jaGFyQ29kZUF0KHkpO2Vsc2V7aWYoZj09PTQ3KWJyZWFrO2Y9NDd9aWYoZj09PTQ3KXtpZighKG09PT15LTF8fGc9PT0xKSlpZihtIT09eS0xJiZnPT09Mil7aWYoZC5sZW5ndGg8Mnx8cCE9PTJ8fGQuY2hhckNvZGVBdChkLmxlbmd0aC0xKSE9PTQ2fHxkLmNoYXJDb2RlQXQoZC5sZW5ndGgtMikhPT00Nil7aWYoZC5sZW5ndGg+Mil7dmFyIHY9ZC5sYXN0SW5kZXhPZigiLyIpO2lmKHYhPT1kLmxlbmd0aC0xKXt2PT09LTE/KGQ9IiIscD0wKTpwPShkPWQuc2xpY2UoMCx2KSkubGVuZ3RoLTEtZC5sYXN0SW5kZXhPZigiLyIpLG09eSxnPTA7Y29udGludWV9fWVsc2UgaWYoZC5sZW5ndGg9PT0yfHxkLmxlbmd0aD09PTEpe2Q9IiIscD0wLG09eSxnPTA7Y29udGludWV9fWgmJihkLmxlbmd0aD4wP2QrPSIvLi4iOmQ9Ii4uIixwPTIpfWVsc2UgZC5sZW5ndGg+MD9kKz0iLyIrdS5zbGljZShtKzEseSk6ZD11LnNsaWNlKG0rMSx5KSxwPXktbS0xO209eSxnPTB9ZWxzZSBmPT09NDYmJmchPT0tMT8rK2c6Zz0tMX1yZXR1cm4gZH1vKHMsInIiKTt2YXIgbD17cmVzb2x2ZTpvKGZ1bmN0aW9uKCl7Zm9yKHZhciB1LGg9IiIsZj0hMSxkPWFyZ3VtZW50cy5sZW5ndGgtMTtkPj0tMSYmIWY7ZC0tKXt2YXIgcDtkPj0wP3A9YXJndW1lbnRzW2RdOih1PT09dm9pZCAwJiYodT1wcm9jZXNzLmN3ZCgpKSxwPXUpLGEocCkscC5sZW5ndGghPT0wJiYoaD1wKyIvIitoLGY9cC5jaGFyQ29kZUF0KDApPT09NDcpfXJldHVybiBoPXMoaCwhZiksZj9oLmxlbmd0aD4wPyIvIitoOiIvIjpoLmxlbmd0aD4wP2g6Ii4ifSwicmVzb2x2ZSIpLG5vcm1hbGl6ZTpvKGZ1bmN0aW9uKHUpe2lmKGEodSksdS5sZW5ndGg9PT0wKXJldHVybiIuIjt2YXIgaD11LmNoYXJDb2RlQXQoMCk9PT00NyxmPXUuY2hhckNvZGVBdCh1Lmxlbmd0aC0xKT09PTQ3O3JldHVybih1PXModSwhaCkpLmxlbmd0aCE9PTB8fGh8fCh1PSIuIiksdS5sZW5ndGg+MCYmZiYmKHUrPSIvIiksaD8iLyIrdTp1fSwibm9ybWFsaXplIiksaXNBYnNvbHV0ZTpvKGZ1bmN0aW9uKHUpe3JldHVybiBhKHUpLHUubGVuZ3RoPjAmJnUuY2hhckNvZGVBdCgwKT09PTQ3fSwiaXNBYnNvbHV0ZSIpLGpvaW46byhmdW5jdGlvbigpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0wKXJldHVybiIuIjtmb3IodmFyIHUsaD0wO2g8YXJndW1lbnRzLmxlbmd0aDsrK2gpe3ZhciBmPWFyZ3VtZW50c1toXTthKGYpLGYubGVuZ3RoPjAmJih1PT09dm9pZCAwP3U9Zjp1Kz0iLyIrZil9cmV0dXJuIHU9PT12b2lkIDA/Ii4iOmwubm9ybWFsaXplKHUpfSwiam9pbiIpLHJlbGF0aXZlOm8oZnVuY3Rpb24odSxoKXtpZihhKHUpLGEoaCksdT09PWh8fCh1PWwucmVzb2x2ZSh1KSk9PT0oaD1sLnJlc29sdmUoaCkpKXJldHVybiIiO2Zvcih2YXIgZj0xO2Y8dS5sZW5ndGgmJnUuY2hhckNvZGVBdChmKT09PTQ3OysrZik7Zm9yKHZhciBkPXUubGVuZ3RoLHA9ZC1mLG09MTttPGgubGVuZ3RoJiZoLmNoYXJDb2RlQXQobSk9PT00NzsrK20pO2Zvcih2YXIgZz1oLmxlbmd0aC1tLHk9cDxnP3A6Zyx2PS0xLHg9MDt4PD15OysreCl7aWYoeD09PXkpe2lmKGc+eSl7aWYoaC5jaGFyQ29kZUF0KG0reCk9PT00NylyZXR1cm4gaC5zbGljZShtK3grMSk7aWYoeD09PTApcmV0dXJuIGguc2xpY2UobSt4KX1lbHNlIHA+eSYmKHUuY2hhckNvZGVBdChmK3gpPT09NDc/dj14Ong9PT0wJiYodj0wKSk7YnJlYWt9dmFyIGI9dS5jaGFyQ29kZUF0KGYreCk7aWYoYiE9PWguY2hhckNvZGVBdChtK3gpKWJyZWFrO2I9PT00NyYmKHY9eCl9dmFyIHc9IiI7Zm9yKHg9Zit2KzE7eDw9ZDsrK3gpeCE9PWQmJnUuY2hhckNvZGVBdCh4KSE9PTQ3fHwody5sZW5ndGg9PT0wP3crPSIuLiI6dys9Ii8uLiIpO3JldHVybiB3Lmxlbmd0aD4wP3craC5zbGljZShtK3YpOihtKz12LGguY2hhckNvZGVBdChtKT09PTQ3JiYrK20saC5zbGljZShtKSl9LCJyZWxhdGl2ZSIpLF9tYWtlTG9uZzpvKGZ1bmN0aW9uKHUpe3JldHVybiB1fSwiX21ha2VMb25nIiksZGlybmFtZTpvKGZ1bmN0aW9uKHUpe2lmKGEodSksdS5sZW5ndGg9PT0wKXJldHVybiIuIjtmb3IodmFyIGg9dS5jaGFyQ29kZUF0KDApLGY9aD09PTQ3LGQ9LTEscD0hMCxtPXUubGVuZ3RoLTE7bT49MTstLW0paWYoKGg9dS5jaGFyQ29kZUF0KG0pKT09PTQ3KXtpZighcCl7ZD1tO2JyZWFrfX1lbHNlIHA9ITE7cmV0dXJuIGQ9PT0tMT9mPyIvIjoiLiI6ZiYmZD09PTE/Ii8vIjp1LnNsaWNlKDAsZCl9LCJkaXJuYW1lIiksYmFzZW5hbWU6byhmdW5jdGlvbih1LGgpe2lmKGghPT12b2lkIDAmJnR5cGVvZiBoIT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKCciZXh0IiBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJyk7YSh1KTt2YXIgZixkPTAscD0tMSxtPSEwO2lmKGghPT12b2lkIDAmJmgubGVuZ3RoPjAmJmgubGVuZ3RoPD11Lmxlbmd0aCl7aWYoaC5sZW5ndGg9PT11Lmxlbmd0aCYmaD09PXUpcmV0dXJuIiI7dmFyIGc9aC5sZW5ndGgtMSx5PS0xO2ZvcihmPXUubGVuZ3RoLTE7Zj49MDstLWYpe3ZhciB2PXUuY2hhckNvZGVBdChmKTtpZih2PT09NDcpe2lmKCFtKXtkPWYrMTticmVha319ZWxzZSB5PT09LTEmJihtPSExLHk9ZisxKSxnPj0wJiYodj09PWguY2hhckNvZGVBdChnKT8tLWc9PS0xJiYocD1mKTooZz0tMSxwPXkpKX1yZXR1cm4gZD09PXA/cD15OnA9PT0tMSYmKHA9dS5sZW5ndGgpLHUuc2xpY2UoZCxwKX1mb3IoZj11Lmxlbmd0aC0xO2Y+PTA7LS1mKWlmKHUuY2hhckNvZGVBdChmKT09PTQ3KXtpZighbSl7ZD1mKzE7YnJlYWt9fWVsc2UgcD09PS0xJiYobT0hMSxwPWYrMSk7cmV0dXJuIHA9PT0tMT8iIjp1LnNsaWNlKGQscCl9LCJiYXNlbmFtZSIpLGV4dG5hbWU6byhmdW5jdGlvbih1KXthKHUpO2Zvcih2YXIgaD0tMSxmPTAsZD0tMSxwPSEwLG09MCxnPXUubGVuZ3RoLTE7Zz49MDstLWcpe3ZhciB5PXUuY2hhckNvZGVBdChnKTtpZih5IT09NDcpZD09PS0xJiYocD0hMSxkPWcrMSkseT09PTQ2P2g9PT0tMT9oPWc6bSE9PTEmJihtPTEpOmghPT0tMSYmKG09LTEpO2Vsc2UgaWYoIXApe2Y9ZysxO2JyZWFrfX1yZXR1cm4gaD09PS0xfHxkPT09LTF8fG09PT0wfHxtPT09MSYmaD09PWQtMSYmaD09PWYrMT8iIjp1LnNsaWNlKGgsZCl9LCJleHRuYW1lIiksZm9ybWF0Om8oZnVuY3Rpb24odSl7aWYodT09PW51bGx8fHR5cGVvZiB1IT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInBhdGhPYmplY3QiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgdSk7cmV0dXJuIGZ1bmN0aW9uKGgsZil7dmFyIGQ9Zi5kaXJ8fGYucm9vdCxwPWYuYmFzZXx8KGYubmFtZXx8IiIpKyhmLmV4dHx8IiIpO3JldHVybiBkP2Q9PT1mLnJvb3Q/ZCtwOmQrIi8iK3A6cH0oMCx1KX0sImZvcm1hdCIpLHBhcnNlOm8oZnVuY3Rpb24odSl7YSh1KTt2YXIgaD17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYodS5sZW5ndGg9PT0wKXJldHVybiBoO3ZhciBmLGQ9dS5jaGFyQ29kZUF0KDApLHA9ZD09PTQ3O3A/KGgucm9vdD0iLyIsZj0xKTpmPTA7Zm9yKHZhciBtPS0xLGc9MCx5PS0xLHY9ITAseD11Lmxlbmd0aC0xLGI9MDt4Pj1mOy0teClpZigoZD11LmNoYXJDb2RlQXQoeCkpIT09NDcpeT09PS0xJiYodj0hMSx5PXgrMSksZD09PTQ2P209PT0tMT9tPXg6YiE9PTEmJihiPTEpOm0hPT0tMSYmKGI9LTEpO2Vsc2UgaWYoIXYpe2c9eCsxO2JyZWFrfXJldHVybiBtPT09LTF8fHk9PT0tMXx8Yj09PTB8fGI9PT0xJiZtPT09eS0xJiZtPT09ZysxP3khPT0tMSYmKGguYmFzZT1oLm5hbWU9Zz09PTAmJnA/dS5zbGljZSgxLHkpOnUuc2xpY2UoZyx5KSk6KGc9PT0wJiZwPyhoLm5hbWU9dS5zbGljZSgxLG0pLGguYmFzZT11LnNsaWNlKDEseSkpOihoLm5hbWU9dS5zbGljZShnLG0pLGguYmFzZT11LnNsaWNlKGcseSkpLGguZXh0PXUuc2xpY2UobSx5KSksZz4wP2guZGlyPXUuc2xpY2UoMCxnLTEpOnAmJihoLmRpcj0iLyIpLGh9LCJwYXJzZSIpLHNlcDoiLyIsZGVsaW1pdGVyOiI6Iix3aW4zMjpudWxsLHBvc2l4Om51bGx9O2wucG9zaXg9bCxpLmV4cG9ydHM9bH19LGU9e307ZnVuY3Rpb24gcihpKXt2YXIgYT1lW2ldO2lmKGEhPT12b2lkIDApcmV0dXJuIGEuZXhwb3J0czt2YXIgcz1lW2ldPXtleHBvcnRzOnt9fTtyZXR1cm4gdFtpXShzLHMuZXhwb3J0cyxyKSxzLmV4cG9ydHN9byhyLCJyIiksci5kPShpLGEpPT57Zm9yKHZhciBzIGluIGEpci5vKGEscykmJiFyLm8oaSxzKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGkscyx7ZW51bWVyYWJsZTohMCxnZXQ6YVtzXX0pfSxyLm89KGksYSk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLGEpLHIucj1pPT57dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX07dmFyIG49e307KCgpPT57bGV0IGk7ci5yKG4pLHIuZChuLHtVUkk6bygoKT0+cCwiVVJJIiksVXRpbHM6bygoKT0+SSwiVXRpbHMiKX0pLHR5cGVvZiBwcm9jZXNzPT0ib2JqZWN0Ij9pPXByb2Nlc3MucGxhdGZvcm09PT0id2luMzIiOnR5cGVvZiBuYXZpZ2F0b3I9PSJvYmplY3QiJiYoaT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIldpbmRvd3MiKT49MCk7bGV0IGE9L15cd1tcd1xkKy4tXSokLyxzPS9eXC8vLGw9L15cL1wvLztmdW5jdGlvbiB1KEQsayl7aWYoIUQuc2NoZW1lJiZrKXRocm93IG5ldyBFcnJvcihgW1VyaUVycm9yXTogU2NoZW1lIGlzIG1pc3Npbmc6IHtzY2hlbWU6ICIiLCBhdXRob3JpdHk6ICIke0QuYXV0aG9yaXR5fSIsIHBhdGg6ICIke0QucGF0aH0iLCBxdWVyeTogIiR7RC5xdWVyeX0iLCBmcmFnbWVudDogIiR7RC5mcmFnbWVudH0ifWApO2lmKEQuc2NoZW1lJiYhYS50ZXN0KEQuc2NoZW1lKSl0aHJvdyBuZXcgRXJyb3IoIltVcmlFcnJvcl06IFNjaGVtZSBjb250YWlucyBpbGxlZ2FsIGNoYXJhY3RlcnMuIik7aWYoRC5wYXRoKXtpZihELmF1dGhvcml0eSl7aWYoIXMudGVzdChELnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgY29udGFpbnMgYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjb21wb25lbnQgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCBhIHNsYXNoICgiLyIpIGNoYXJhY3RlcicpfWVsc2UgaWYobC50ZXN0KEQucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBkb2VzIG5vdCBjb250YWluIGFuIGF1dGhvcml0eSBjb21wb25lbnQsIHRoZW4gdGhlIHBhdGggY2Fubm90IGJlZ2luIHdpdGggdHdvIHNsYXNoIGNoYXJhY3RlcnMgKCIvLyIpJyl9fW8odSwicyIpO2xldCBoPSIiLGY9Ii8iLGQ9L14oKFteOi8/I10rPyk6KT8oXC9cLyhbXi8/I10qKSk/KFtePyNdKikoXD8oW14jXSopKT8oIyguKikpPy87Y2xhc3MgcHtzdGF0aWN7byh0aGlzLCJmIil9c3RhdGljIGlzVXJpKGspe3JldHVybiBrIGluc3RhbmNlb2YgcHx8ISFrJiZ0eXBlb2Ygay5hdXRob3JpdHk9PSJzdHJpbmciJiZ0eXBlb2Ygay5mcmFnbWVudD09InN0cmluZyImJnR5cGVvZiBrLnBhdGg9PSJzdHJpbmciJiZ0eXBlb2Ygay5xdWVyeT09InN0cmluZyImJnR5cGVvZiBrLnNjaGVtZT09InN0cmluZyImJnR5cGVvZiBrLmZzUGF0aD09InN0cmluZyImJnR5cGVvZiBrLndpdGg9PSJmdW5jdGlvbiImJnR5cGVvZiBrLnRvU3RyaW5nPT0iZnVuY3Rpb24ifXNjaGVtZTthdXRob3JpdHk7cGF0aDtxdWVyeTtmcmFnbWVudDtjb25zdHJ1Y3RvcihrLFIsQyxPLE4sUD0hMSl7dHlwZW9mIGs9PSJvYmplY3QiPyh0aGlzLnNjaGVtZT1rLnNjaGVtZXx8aCx0aGlzLmF1dGhvcml0eT1rLmF1dGhvcml0eXx8aCx0aGlzLnBhdGg9ay5wYXRofHxoLHRoaXMucXVlcnk9ay5xdWVyeXx8aCx0aGlzLmZyYWdtZW50PWsuZnJhZ21lbnR8fGgpOih0aGlzLnNjaGVtZT1mdW5jdGlvbihGLEIpe3JldHVybiBGfHxCP0Y6ImZpbGUifShrLFApLHRoaXMuYXV0aG9yaXR5PVJ8fGgsdGhpcy5wYXRoPWZ1bmN0aW9uKEYsQil7c3dpdGNoKEYpe2Nhc2UiaHR0cHMiOmNhc2UiaHR0cCI6Y2FzZSJmaWxlIjpCP0JbMF0hPT1mJiYoQj1mK0IpOkI9Zn1yZXR1cm4gQn0odGhpcy5zY2hlbWUsQ3x8aCksdGhpcy5xdWVyeT1PfHxoLHRoaXMuZnJhZ21lbnQ9Tnx8aCx1KHRoaXMsUCkpfWdldCBmc1BhdGgoKXtyZXR1cm4gYih0aGlzLCExKX13aXRoKGspe2lmKCFrKXJldHVybiB0aGlzO2xldHtzY2hlbWU6UixhdXRob3JpdHk6QyxwYXRoOk8scXVlcnk6TixmcmFnbWVudDpQfT1rO3JldHVybiBSPT09dm9pZCAwP1I9dGhpcy5zY2hlbWU6Uj09PW51bGwmJihSPWgpLEM9PT12b2lkIDA/Qz10aGlzLmF1dGhvcml0eTpDPT09bnVsbCYmKEM9aCksTz09PXZvaWQgMD9PPXRoaXMucGF0aDpPPT09bnVsbCYmKE89aCksTj09PXZvaWQgMD9OPXRoaXMucXVlcnk6Tj09PW51bGwmJihOPWgpLFA9PT12b2lkIDA/UD10aGlzLmZyYWdtZW50OlA9PT1udWxsJiYoUD1oKSxSPT09dGhpcy5zY2hlbWUmJkM9PT10aGlzLmF1dGhvcml0eSYmTz09PXRoaXMucGF0aCYmTj09PXRoaXMucXVlcnkmJlA9PT10aGlzLmZyYWdtZW50P3RoaXM6bmV3IGcoUixDLE8sTixQKX1zdGF0aWMgcGFyc2UoayxSPSExKXtsZXQgQz1kLmV4ZWMoayk7cmV0dXJuIEM/bmV3IGcoQ1syXXx8aCxFKENbNF18fGgpLEUoQ1s1XXx8aCksRShDWzddfHxoKSxFKENbOV18fGgpLFIpOm5ldyBnKGgsaCxoLGgsaCl9c3RhdGljIGZpbGUoayl7bGV0IFI9aDtpZihpJiYoaz1rLnJlcGxhY2UoL1xcL2csZikpLGtbMF09PT1mJiZrWzFdPT09Zil7bGV0IEM9ay5pbmRleE9mKGYsMik7Qz09PS0xPyhSPWsuc3Vic3RyaW5nKDIpLGs9Zik6KFI9ay5zdWJzdHJpbmcoMixDKSxrPWsuc3Vic3RyaW5nKEMpfHxmKX1yZXR1cm4gbmV3IGcoImZpbGUiLFIsayxoLGgpfXN0YXRpYyBmcm9tKGspe2xldCBSPW5ldyBnKGsuc2NoZW1lLGsuYXV0aG9yaXR5LGsucGF0aCxrLnF1ZXJ5LGsuZnJhZ21lbnQpO3JldHVybiB1KFIsITApLFJ9dG9TdHJpbmcoaz0hMSl7cmV0dXJuIHcodGhpcyxrKX10b0pTT04oKXtyZXR1cm4gdGhpc31zdGF0aWMgcmV2aXZlKGspe2lmKGspe2lmKGsgaW5zdGFuY2VvZiBwKXJldHVybiBrO3tsZXQgUj1uZXcgZyhrKTtyZXR1cm4gUi5fZm9ybWF0dGVkPWsuZXh0ZXJuYWwsUi5fZnNQYXRoPWsuX3NlcD09PW0/ay5mc1BhdGg6bnVsbCxSfX1yZXR1cm4ga319bGV0IG09aT8xOnZvaWQgMDtjbGFzcyBnIGV4dGVuZHMgcHtzdGF0aWN7byh0aGlzLCJsIil9X2Zvcm1hdHRlZD1udWxsO19mc1BhdGg9bnVsbDtnZXQgZnNQYXRoKCl7cmV0dXJuIHRoaXMuX2ZzUGF0aHx8KHRoaXMuX2ZzUGF0aD1iKHRoaXMsITEpKSx0aGlzLl9mc1BhdGh9dG9TdHJpbmcoaz0hMSl7cmV0dXJuIGs/dyh0aGlzLCEwKToodGhpcy5fZm9ybWF0dGVkfHwodGhpcy5fZm9ybWF0dGVkPXcodGhpcywhMSkpLHRoaXMuX2Zvcm1hdHRlZCl9dG9KU09OKCl7bGV0IGs9eyRtaWQ6MX07cmV0dXJuIHRoaXMuX2ZzUGF0aCYmKGsuZnNQYXRoPXRoaXMuX2ZzUGF0aCxrLl9zZXA9bSksdGhpcy5fZm9ybWF0dGVkJiYoay5leHRlcm5hbD10aGlzLl9mb3JtYXR0ZWQpLHRoaXMucGF0aCYmKGsucGF0aD10aGlzLnBhdGgpLHRoaXMuc2NoZW1lJiYoay5zY2hlbWU9dGhpcy5zY2hlbWUpLHRoaXMuYXV0aG9yaXR5JiYoay5hdXRob3JpdHk9dGhpcy5hdXRob3JpdHkpLHRoaXMucXVlcnkmJihrLnF1ZXJ5PXRoaXMucXVlcnkpLHRoaXMuZnJhZ21lbnQmJihrLmZyYWdtZW50PXRoaXMuZnJhZ21lbnQpLGt9fWxldCB5PXs1ODoiJTNBIiw0NzoiJTJGIiw2MzoiJTNGIiwzNToiJTIzIiw5MToiJTVCIiw5MzoiJTVEIiw2NDoiJTQwIiwzMzoiJTIxIiwzNjoiJTI0IiwzODoiJTI2IiwzOToiJTI3Iiw0MDoiJTI4Iiw0MToiJTI5Iiw0MjoiJTJBIiw0MzoiJTJCIiw0NDoiJTJDIiw1OToiJTNCIiw2MToiJTNEIiwzMjoiJTIwIn07ZnVuY3Rpb24gdihELGssUil7bGV0IEMsTz0tMTtmb3IobGV0IE49MDtOPEQubGVuZ3RoO04rKyl7bGV0IFA9RC5jaGFyQ29kZUF0KE4pO2lmKFA+PTk3JiZQPD0xMjJ8fFA+PTY1JiZQPD05MHx8UD49NDgmJlA8PTU3fHxQPT09NDV8fFA9PT00Nnx8UD09PTk1fHxQPT09MTI2fHxrJiZQPT09NDd8fFImJlA9PT05MXx8UiYmUD09PTkzfHxSJiZQPT09NTgpTyE9PS0xJiYoQys9ZW5jb2RlVVJJQ29tcG9uZW50KEQuc3Vic3RyaW5nKE8sTikpLE89LTEpLEMhPT12b2lkIDAmJihDKz1ELmNoYXJBdChOKSk7ZWxzZXtDPT09dm9pZCAwJiYoQz1ELnN1YnN0cigwLE4pKTtsZXQgRj15W1BdO0YhPT12b2lkIDA/KE8hPT0tMSYmKEMrPWVuY29kZVVSSUNvbXBvbmVudChELnN1YnN0cmluZyhPLE4pKSxPPS0xKSxDKz1GKTpPPT09LTEmJihPPU4pfX1yZXR1cm4gTyE9PS0xJiYoQys9ZW5jb2RlVVJJQ29tcG9uZW50KEQuc3Vic3RyaW5nKE8pKSksQyE9PXZvaWQgMD9DOkR9byh2LCJkIik7ZnVuY3Rpb24geChEKXtsZXQgaztmb3IobGV0IFI9MDtSPEQubGVuZ3RoO1IrKyl7bGV0IEM9RC5jaGFyQ29kZUF0KFIpO0M9PT0zNXx8Qz09PTYzPyhrPT09dm9pZCAwJiYoaz1ELnN1YnN0cigwLFIpKSxrKz15W0NdKTprIT09dm9pZCAwJiYoays9RFtSXSl9cmV0dXJuIGshPT12b2lkIDA/azpEfW8oeCwicCIpO2Z1bmN0aW9uIGIoRCxrKXtsZXQgUjtyZXR1cm4gUj1ELmF1dGhvcml0eSYmRC5wYXRoLmxlbmd0aD4xJiZELnNjaGVtZT09PSJmaWxlIj9gLy8ke0QuYXV0aG9yaXR5fSR7RC5wYXRofWA6RC5wYXRoLmNoYXJDb2RlQXQoMCk9PT00NyYmKEQucGF0aC5jaGFyQ29kZUF0KDEpPj02NSYmRC5wYXRoLmNoYXJDb2RlQXQoMSk8PTkwfHxELnBhdGguY2hhckNvZGVBdCgxKT49OTcmJkQucGF0aC5jaGFyQ29kZUF0KDEpPD0xMjIpJiZELnBhdGguY2hhckNvZGVBdCgyKT09PTU4P2s/RC5wYXRoLnN1YnN0cigxKTpELnBhdGhbMV0udG9Mb3dlckNhc2UoKStELnBhdGguc3Vic3RyKDIpOkQucGF0aCxpJiYoUj1SLnJlcGxhY2UoL1wvL2csIlxcIikpLFJ9byhiLCJtIik7ZnVuY3Rpb24gdyhELGspe2xldCBSPWs/eDp2LEM9IiIse3NjaGVtZTpPLGF1dGhvcml0eTpOLHBhdGg6UCxxdWVyeTpGLGZyYWdtZW50OkJ9PUQ7aWYoTyYmKEMrPU8sQys9IjoiKSwoTnx8Tz09PSJmaWxlIikmJihDKz1mLEMrPWYpLE4pe2xldCBHPU4uaW5kZXhPZigiQCIpO2lmKEchPT0tMSl7bGV0IHo9Ti5zdWJzdHIoMCxHKTtOPU4uc3Vic3RyKEcrMSksRz16Lmxhc3RJbmRleE9mKCI6IiksRz09PS0xP0MrPVIoeiwhMSwhMSk6KEMrPVIoei5zdWJzdHIoMCxHKSwhMSwhMSksQys9IjoiLEMrPVIoei5zdWJzdHIoRysxKSwhMSwhMCkpLEMrPSJAIn1OPU4udG9Mb3dlckNhc2UoKSxHPU4ubGFzdEluZGV4T2YoIjoiKSxHPT09LTE/Qys9UihOLCExLCEwKTooQys9UihOLnN1YnN0cigwLEcpLCExLCEwKSxDKz1OLnN1YnN0cihHKSl9aWYoUCl7aWYoUC5sZW5ndGg+PTMmJlAuY2hhckNvZGVBdCgwKT09PTQ3JiZQLmNoYXJDb2RlQXQoMik9PT01OCl7bGV0IEc9UC5jaGFyQ29kZUF0KDEpO0c+PTY1JiZHPD05MCYmKFA9YC8ke1N0cmluZy5mcm9tQ2hhckNvZGUoRyszMil9OiR7UC5zdWJzdHIoMyl9YCl9ZWxzZSBpZihQLmxlbmd0aD49MiYmUC5jaGFyQ29kZUF0KDEpPT09NTgpe2xldCBHPVAuY2hhckNvZGVBdCgwKTtHPj02NSYmRzw9OTAmJihQPWAke1N0cmluZy5mcm9tQ2hhckNvZGUoRyszMil9OiR7UC5zdWJzdHIoMil9YCl9Qys9UihQLCEwLCExKX1yZXR1cm4gRiYmKEMrPSI/IixDKz1SKEYsITEsITEpKSxCJiYoQys9IiMiLEMrPWs/Qjp2KEIsITEsITEpKSxDfW8odywieSIpO2Z1bmN0aW9uIF8oRCl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoRCl9Y2F0Y2h7cmV0dXJuIEQubGVuZ3RoPjM/RC5zdWJzdHIoMCwzKStfKEQuc3Vic3RyKDMpKTpEfX1vKF8sInYiKTtsZXQgVD0vKCVbMC05QS1aYS16XVswLTlBLVphLXpdKSsvZztmdW5jdGlvbiBFKEQpe3JldHVybiBELm1hdGNoKFQpP0QucmVwbGFjZShULGs9Pl8oaykpOkR9byhFLCJDIik7dmFyIEw9cig0NzApO2xldCBTPUwucG9zaXh8fEwsQT0iLyI7dmFyIEk7KGZ1bmN0aW9uKEQpe0Quam9pblBhdGg9ZnVuY3Rpb24oaywuLi5SKXtyZXR1cm4gay53aXRoKHtwYXRoOlMuam9pbihrLnBhdGgsLi4uUil9KX0sRC5yZXNvbHZlUGF0aD1mdW5jdGlvbihrLC4uLlIpe2xldCBDPWsucGF0aCxPPSExO0NbMF0hPT1BJiYoQz1BK0MsTz0hMCk7bGV0IE49Uy5yZXNvbHZlKEMsLi4uUik7cmV0dXJuIE8mJk5bMF09PT1BJiYhay5hdXRob3JpdHkmJihOPU4uc3Vic3RyaW5nKDEpKSxrLndpdGgoe3BhdGg6Tn0pfSxELmRpcm5hbWU9ZnVuY3Rpb24oayl7aWYoay5wYXRoLmxlbmd0aD09PTB8fGsucGF0aD09PUEpcmV0dXJuIGs7bGV0IFI9Uy5kaXJuYW1lKGsucGF0aCk7cmV0dXJuIFIubGVuZ3RoPT09MSYmUi5jaGFyQ29kZUF0KDApPT09NDYmJihSPSIiKSxrLndpdGgoe3BhdGg6Un0pfSxELmJhc2VuYW1lPWZ1bmN0aW9uKGspe3JldHVybiBTLmJhc2VuYW1lKGsucGF0aCl9LEQuZXh0bmFtZT1mdW5jdGlvbihrKXtyZXR1cm4gUy5leHRuYW1lKGsucGF0aCl9fSkoSXx8KEk9e30pKX0pKCksZGNlPW59KSgpOyh7VVJJOkhzLFV0aWxzOlBnfT1kY2UpfSk7dmFyIGRzLFVjPU0oKCk9PnsidXNlIHN0cmljdCI7T00oKTsoZnVuY3Rpb24odCl7dC5iYXNlbmFtZT1QZy5iYXNlbmFtZSx0LmRpcm5hbWU9UGcuZGlybmFtZSx0LmV4dG5hbWU9UGcuZXh0bmFtZSx0LmpvaW5QYXRoPVBnLmpvaW5QYXRoLHQucmVzb2x2ZVBhdGg9UGcucmVzb2x2ZVBhdGg7ZnVuY3Rpb24gZShuLGkpe3JldHVybiBuPy50b1N0cmluZygpPT09aT8udG9TdHJpbmcoKX1vKGUsImVxdWFscyIpLHQuZXF1YWxzPWU7ZnVuY3Rpb24gcihuLGkpe2xldCBhPXR5cGVvZiBuPT0ic3RyaW5nIj9uOm4ucGF0aCxzPXR5cGVvZiBpPT0ic3RyaW5nIj9pOmkucGF0aCxsPWEuc3BsaXQoIi8iKS5maWx0ZXIocD0+cC5sZW5ndGg+MCksdT1zLnNwbGl0KCIvIikuZmlsdGVyKHA9PnAubGVuZ3RoPjApLGg9MDtmb3IoO2g8bC5sZW5ndGgmJmxbaF09PT11W2hdO2grKyk7bGV0IGY9Ii4uLyIucmVwZWF0KGwubGVuZ3RoLWgpLGQ9dS5zbGljZShoKS5qb2luKCIvIik7cmV0dXJuIGYrZH1vKHIsInJlbGF0aXZlIiksdC5yZWxhdGl2ZT1yfSkoZHN8fChkcz17fSkpfSk7dmFyIFRuLHEyLFgyLEJnPU0oKCk9PnsidXNlIHN0cmljdCI7ZmNlKCk7QmcoKTtybCgpOyRzKCk7VWMoKTsoZnVuY3Rpb24odCl7dFt0LkNoYW5nZWQ9MF09IkNoYW5nZWQiLHRbdC5QYXJzZWQ9MV09IlBhcnNlZCIsdFt0LkluZGV4ZWRDb250ZW50PTJdPSJJbmRleGVkQ29udGVudCIsdFt0LkNvbXB1dGVkU2NvcGVzPTNdPSJDb21wdXRlZFNjb3BlcyIsdFt0LkxpbmtlZD00XT0iTGlua2VkIix0W3QuSW5kZXhlZFJlZmVyZW5jZXM9NV09IkluZGV4ZWRSZWZlcmVuY2VzIix0W3QuVmFsaWRhdGVkPTZdPSJWYWxpZGF0ZWQifSkoVG58fChUbj17fSkpO3EyPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRMYW5naXVtRG9jdW1lbnRGYWN0b3J5Iil9Y29uc3RydWN0b3IoZSl7dGhpcy5zZXJ2aWNlUmVnaXN0cnk9ZS5TZXJ2aWNlUmVnaXN0cnksdGhpcy50ZXh0RG9jdW1lbnRzPWUud29ya3NwYWNlLlRleHREb2N1bWVudHMsdGhpcy5maWxlU3lzdGVtUHJvdmlkZXI9ZS53b3Jrc3BhY2UuRmlsZVN5c3RlbVByb3ZpZGVyfWFzeW5jIGZyb21VcmkoZSxyPUFyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe2xldCBuPWF3YWl0IHRoaXMuZmlsZVN5c3RlbVByb3ZpZGVyLnJlYWRGaWxlKGUpO3JldHVybiB0aGlzLmNyZWF0ZUFzeW5jKGUsbixyKX1mcm9tVGV4dERvY3VtZW50KGUscixuKXtyZXR1cm4gcj1yPz9Icy5wYXJzZShlLnVyaSksbj90aGlzLmNyZWF0ZUFzeW5jKHIsZSxuKTp0aGlzLmNyZWF0ZShyLGUpfWZyb21TdHJpbmcoZSxyLG4pe3JldHVybiBuP3RoaXMuY3JlYXRlQXN5bmMocixlLG4pOnRoaXMuY3JlYXRlKHIsZSl9ZnJvbU1vZGVsKGUscil7cmV0dXJuIHRoaXMuY3JlYXRlKHIseyRtb2RlbDplfSl9Y3JlYXRlKGUscil7aWYodHlwZW9mIHI9PSJzdHJpbmciKXtsZXQgbj10aGlzLnBhcnNlKGUscik7cmV0dXJuIHRoaXMuY3JlYXRlTGFuZ2l1bURvY3VtZW50KG4sZSx2b2lkIDAscil9ZWxzZSBpZigiJG1vZGVsImluIHIpe2xldCBuPXt2YWx1ZTpyLiRtb2RlbCxwYXJzZXJFcnJvcnM6W10sbGV4ZXJFcnJvcnM6W119O3JldHVybiB0aGlzLmNyZWF0ZUxhbmdpdW1Eb2N1bWVudChuLGUpfWVsc2V7bGV0IG49dGhpcy5wYXJzZShlLHIuZ2V0VGV4dCgpKTtyZXR1cm4gdGhpcy5jcmVhdGVMYW5naXVtRG9jdW1lbnQobixlLHIpfX1hc3luYyBjcmVhdGVBc3luYyhlLHIsbil7aWYodHlwZW9mIHI9PSJzdHJpbmciKXtsZXQgaT1hd2FpdCB0aGlzLnBhcnNlQXN5bmMoZSxyLG4pO3JldHVybiB0aGlzLmNyZWF0ZUxhbmdpdW1Eb2N1bWVudChpLGUsdm9pZCAwLHIpfWVsc2V7bGV0IGk9YXdhaXQgdGhpcy5wYXJzZUFzeW5jKGUsci5nZXRUZXh0KCksbik7cmV0dXJuIHRoaXMuY3JlYXRlTGFuZ2l1bURvY3VtZW50KGksZSxyKX19Y3JlYXRlTGFuZ2l1bURvY3VtZW50KGUscixuLGkpe2xldCBhO2lmKG4pYT17cGFyc2VSZXN1bHQ6ZSx1cmk6cixzdGF0ZTpUbi5QYXJzZWQscmVmZXJlbmNlczpbXSx0ZXh0RG9jdW1lbnQ6bn07ZWxzZXtsZXQgcz10aGlzLmNyZWF0ZVRleHREb2N1bWVudEdldHRlcihyLGkpO2E9e3BhcnNlUmVzdWx0OmUsdXJpOnIsc3RhdGU6VG4uUGFyc2VkLHJlZmVyZW5jZXM6W10sZ2V0IHRleHREb2N1bWVudCgpe3JldHVybiBzKCl9fX1yZXR1cm4gZS52YWx1ZS4kZG9jdW1lbnQ9YSxhfWFzeW5jIHVwZGF0ZShlLHIpe3ZhciBuLGk7bGV0IGE9KG49ZS5wYXJzZVJlc3VsdC52YWx1ZS4kY3N0Tm9kZSk9PT1udWxsfHxuPT09dm9pZCAwP3ZvaWQgMDpuLnJvb3QuZnVsbFRleHQscz0oaT10aGlzLnRleHREb2N1bWVudHMpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS5nZXQoZS51cmkudG9TdHJpbmcoKSksbD1zP3MuZ2V0VGV4dCgpOmF3YWl0IHRoaXMuZmlsZVN5c3RlbVByb3ZpZGVyLnJlYWRGaWxlKGUudXJpKTtpZihzKU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJ0ZXh0RG9jdW1lbnQiLHt2YWx1ZTpzfSk7ZWxzZXtsZXQgdT10aGlzLmNyZWF0ZVRleHREb2N1bWVudEdldHRlcihlLnVyaSxsKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwidGV4dERvY3VtZW50Iix7Z2V0OnV9KX1yZXR1cm4gYSE9PWwmJihlLnBhcnNlUmVzdWx0PWF3YWl0IHRoaXMucGFyc2VBc3luYyhlLnVyaSxsLHIpLGUucGFyc2VSZXN1bHQudmFsdWUuJGRvY3VtZW50PWUpLGUuc3RhdGU9VG4uUGFyc2VkLGV9cGFyc2UoZSxyKXtyZXR1cm4gdGhpcy5zZXJ2aWNlUmVnaXN0cnkuZ2V0U2VydmljZXMoZSkucGFyc2VyLkxhbmdpdW1QYXJzZXIucGFyc2Uocil9cGFyc2VBc3luYyhlLHIsbil7cmV0dXJuIHRoaXMuc2VydmljZVJlZ2lzdHJ5LmdldFNlcnZpY2VzKGUpLnBhcnNlci5Bc3luY1BhcnNlci5wYXJzZShyLG4pfWNyZWF0ZVRleHREb2N1bWVudEdldHRlcihlLHIpe2xldCBuPXRoaXMuc2VydmljZVJlZ2lzdHJ5LGk7cmV0dXJuKCk9Pmk/PyhpPU9nLmNyZWF0ZShlLnRvU3RyaW5nKCksbi5nZXRTZXJ2aWNlcyhlKS5MYW5ndWFnZU1ldGFEYXRhLmxhbmd1YWdlSWQsMCxyPz8iIikpfX0sWDI9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdExhbmdpdW1Eb2N1bWVudHMiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmRvY3VtZW50TWFwPW5ldyBNYXAsdGhpcy5sYW5naXVtRG9jdW1lbnRGYWN0b3J5PWUud29ya3NwYWNlLkxhbmdpdW1Eb2N1bWVudEZhY3Rvcnl9Z2V0IGFsbCgpe3JldHVybiB0bih0aGlzLmRvY3VtZW50TWFwLnZhbHVlcygpKX1hZGREb2N1bWVudChlKXtsZXQgcj1lLnVyaS50b1N0cmluZygpO2lmKHRoaXMuZG9jdW1lbnRNYXAuaGFzKHIpKXRocm93IG5ldyBFcnJvcihgQSBkb2N1bWVudCB3aXRoIHRoZSBVUkkgJyR7cn0nIGlzIGFscmVhZHkgcHJlc2VudC5gKTt0aGlzLmRvY3VtZW50TWFwLnNldChyLGUpfWdldERvY3VtZW50KGUpe2xldCByPWUudG9TdHJpbmcoKTtyZXR1cm4gdGhpcy5kb2N1bWVudE1hcC5nZXQocil9YXN5bmMgZ2V0T3JDcmVhdGVEb2N1bWVudChlLHIpe2xldCBuPXRoaXMuZ2V0RG9jdW1lbnQoZSk7cmV0dXJuIG58fChuPWF3YWl0IHRoaXMubGFuZ2l1bURvY3VtZW50RmFjdG9yeS5mcm9tVXJpKGUsciksdGhpcy5hZGREb2N1bWVudChuKSxuKX1jcmVhdGVEb2N1bWVudChlLHIsbil7aWYobilyZXR1cm4gdGhpcy5sYW5naXVtRG9jdW1lbnRGYWN0b3J5LmZyb21TdHJpbmcocixlLG4pLnRoZW4oaT0+KHRoaXMuYWRkRG9jdW1lbnQoaSksaSkpO3tsZXQgaT10aGlzLmxhbmdpdW1Eb2N1bWVudEZhY3RvcnkuZnJvbVN0cmluZyhyLGUpO3JldHVybiB0aGlzLmFkZERvY3VtZW50KGkpLGl9fWhhc0RvY3VtZW50KGUpe3JldHVybiB0aGlzLmRvY3VtZW50TWFwLmhhcyhlLnRvU3RyaW5nKCkpfWludmFsaWRhdGVEb2N1bWVudChlKXtsZXQgcj1lLnRvU3RyaW5nKCksbj10aGlzLmRvY3VtZW50TWFwLmdldChyKTtyZXR1cm4gbiYmKG4uc3RhdGU9VG4uQ2hhbmdlZCxuLnByZWNvbXB1dGVkU2NvcGVzPXZvaWQgMCxuLnJlZmVyZW5jZXM9W10sbi5kaWFnbm9zdGljcz12b2lkIDApLG59ZGVsZXRlRG9jdW1lbnQoZSl7bGV0IHI9ZS50b1N0cmluZygpLG49dGhpcy5kb2N1bWVudE1hcC5nZXQocik7cmV0dXJuIG4mJihuLnN0YXRlPVRuLkNoYW5nZWQsdGhpcy5kb2N1bWVudE1hcC5kZWxldGUocikpLG59fX0pO3ZhciBqMixQTT1NKCgpPT57InVzZSBzdHJpY3QiO3JsKCk7Wm8oKTtvcygpO25sKCk7QmcoKTtqMj1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0TGlua2VyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5yZWZsZWN0aW9uPWUuc2hhcmVkLkFzdFJlZmxlY3Rpb24sdGhpcy5sYW5naXVtRG9jdW1lbnRzPSgpPT5lLnNoYXJlZC53b3Jrc3BhY2UuTGFuZ2l1bURvY3VtZW50cyx0aGlzLnNjb3BlUHJvdmlkZXI9ZS5yZWZlcmVuY2VzLlNjb3BlUHJvdmlkZXIsdGhpcy5hc3ROb2RlTG9jYXRvcj1lLndvcmtzcGFjZS5Bc3ROb2RlTG9jYXRvcn1hc3luYyBsaW5rKGUscj1Bci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXtmb3IobGV0IG4gb2YgdGwoZS5wYXJzZVJlc3VsdC52YWx1ZSkpYXdhaXQgSGkocikscmcobikuZm9yRWFjaChpPT50aGlzLmRvTGluayhpLGUpKX1kb0xpbmsoZSxyKXtsZXQgbj1lLnJlZmVyZW5jZTtpZihuLl9yZWY9PT12b2lkIDApdHJ5e2xldCBpPXRoaXMuZ2V0Q2FuZGlkYXRlKGUpO2lmKFpkKGkpKW4uX3JlZj1pO2Vsc2UgaWYobi5fbm9kZURlc2NyaXB0aW9uPWksdGhpcy5sYW5naXVtRG9jdW1lbnRzKCkuaGFzRG9jdW1lbnQoaS5kb2N1bWVudFVyaSkpe2xldCBhPXRoaXMubG9hZEFzdE5vZGUoaSk7bi5fcmVmPWE/P3RoaXMuY3JlYXRlTGlua2luZ0Vycm9yKGUsaSl9fWNhdGNoKGkpe24uX3JlZj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse21lc3NhZ2U6YEFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlc29sdmluZyByZWZlcmVuY2UgdG8gJyR7bi4kcmVmVGV4dH0nOiAke2l9YH0pfXIucmVmZXJlbmNlcy5wdXNoKG4pfXVubGluayhlKXtmb3IobGV0IHIgb2YgZS5yZWZlcmVuY2VzKWRlbGV0ZSByLl9yZWYsZGVsZXRlIHIuX25vZGVEZXNjcmlwdGlvbjtlLnJlZmVyZW5jZXM9W119Z2V0Q2FuZGlkYXRlKGUpe2xldCBuPXRoaXMuc2NvcGVQcm92aWRlci5nZXRTY29wZShlKS5nZXRFbGVtZW50KGUucmVmZXJlbmNlLiRyZWZUZXh0KTtyZXR1cm4gbj8/dGhpcy5jcmVhdGVMaW5raW5nRXJyb3IoZSl9YnVpbGRSZWZlcmVuY2UoZSxyLG4saSl7bGV0IGE9dGhpcyxzPXskcmVmTm9kZTpuLCRyZWZUZXh0OmksZ2V0IHJlZigpe3ZhciBsO2lmKHJpKHRoaXMuX3JlZikpcmV0dXJuIHRoaXMuX3JlZjtpZihPRCh0aGlzLl9ub2RlRGVzY3JpcHRpb24pKXtsZXQgdT1hLmxvYWRBc3ROb2RlKHRoaXMuX25vZGVEZXNjcmlwdGlvbik7dGhpcy5fcmVmPXU/P2EuY3JlYXRlTGlua2luZ0Vycm9yKHtyZWZlcmVuY2U6cyxjb250YWluZXI6ZSxwcm9wZXJ0eTpyfSx0aGlzLl9ub2RlRGVzY3JpcHRpb24pfWVsc2UgaWYodGhpcy5fcmVmPT09dm9pZCAwKXtsZXQgdT1hLmdldExpbmtlZE5vZGUoe3JlZmVyZW5jZTpzLGNvbnRhaW5lcjplLHByb3BlcnR5OnJ9KTtpZih1LmVycm9yJiZWaShlKS5zdGF0ZTxUbi5Db21wdXRlZFNjb3BlcylyZXR1cm47dGhpcy5fcmVmPShsPXUubm9kZSkhPT1udWxsJiZsIT09dm9pZCAwP2w6dS5lcnJvcix0aGlzLl9ub2RlRGVzY3JpcHRpb249dS5kZXNjcn1yZXR1cm4gcmkodGhpcy5fcmVmKT90aGlzLl9yZWY6dm9pZCAwfSxnZXQgJG5vZGVEZXNjcmlwdGlvbigpe3JldHVybiB0aGlzLl9ub2RlRGVzY3JpcHRpb259LGdldCBlcnJvcigpe3JldHVybiBaZCh0aGlzLl9yZWYpP3RoaXMuX3JlZjp2b2lkIDB9fTtyZXR1cm4gc31nZXRMaW5rZWROb2RlKGUpe3RyeXtsZXQgcj10aGlzLmdldENhbmRpZGF0ZShlKTtpZihaZChyKSlyZXR1cm57ZXJyb3I6cn07bGV0IG49dGhpcy5sb2FkQXN0Tm9kZShyKTtyZXR1cm4gbj97bm9kZTpuLGRlc2NyOnJ9OntkZXNjcjpyLGVycm9yOnRoaXMuY3JlYXRlTGlua2luZ0Vycm9yKGUscil9fWNhdGNoKHIpe3JldHVybntlcnJvcjpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkse21lc3NhZ2U6YEFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlc29sdmluZyByZWZlcmVuY2UgdG8gJyR7ZS5yZWZlcmVuY2UuJHJlZlRleHR9JzogJHtyfWB9KX19fWxvYWRBc3ROb2RlKGUpe2lmKGUubm9kZSlyZXR1cm4gZS5ub2RlO2xldCByPXRoaXMubGFuZ2l1bURvY3VtZW50cygpLmdldERvY3VtZW50KGUuZG9jdW1lbnRVcmkpO2lmKHIpcmV0dXJuIHRoaXMuYXN0Tm9kZUxvY2F0b3IuZ2V0QXN0Tm9kZShyLnBhcnNlUmVzdWx0LnZhbHVlLGUucGF0aCl9Y3JlYXRlTGlua2luZ0Vycm9yKGUscil7bGV0IG49VmkoZS5jb250YWluZXIpO24uc3RhdGU8VG4uQ29tcHV0ZWRTY29wZXMmJmNvbnNvbGUud2FybihgQXR0ZW1wdGVkIHJlZmVyZW5jZSByZXNvbHV0aW9uIGJlZm9yZSBkb2N1bWVudCByZWFjaGVkIENvbXB1dGVkU2NvcGVzIHN0YXRlICgke24udXJpfSkuYCk7bGV0IGk9dGhpcy5yZWZsZWN0aW9uLmdldFJlZmVyZW5jZVR5cGUoZSk7cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7bWVzc2FnZTpgQ291bGQgbm90IHJlc29sdmUgcmVmZXJlbmNlIHRvICR7aX0gbmFtZWQgJyR7ZS5yZWZlcmVuY2UuJHJlZlRleHR9Jy5gLHRhcmdldERlc2NyaXB0aW9uOnJ9KX19fSk7ZnVuY3Rpb24gcGNlKHQpe3JldHVybiB0eXBlb2YgdC5uYW1lPT0ic3RyaW5nIn12YXIgSzIsQk09TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWbCgpO28ocGNlLCJpc05hbWVkIik7SzI9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdE5hbWVQcm92aWRlciIpfWdldE5hbWUoZSl7aWYocGNlKGUpKXJldHVybiBlLm5hbWV9Z2V0TmFtZU5vZGUoZSl7cmV0dXJuIHAyKGUuJGNzdE5vZGUsIm5hbWUiKX19fSk7dmFyIFEyLEZNPU0oKCk9PnsidXNlIHN0cmljdCI7VmwoKTtabygpO29zKCk7emwoKTskcygpO1VjKCk7UTI9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdFJlZmVyZW5jZXMiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLm5hbWVQcm92aWRlcj1lLnJlZmVyZW5jZXMuTmFtZVByb3ZpZGVyLHRoaXMuaW5kZXg9ZS5zaGFyZWQud29ya3NwYWNlLkluZGV4TWFuYWdlcix0aGlzLm5vZGVMb2NhdG9yPWUud29ya3NwYWNlLkFzdE5vZGVMb2NhdG9yfWZpbmREZWNsYXJhdGlvbihlKXtpZihlKXtsZXQgcj1zUihlKSxuPWUuYXN0Tm9kZTtpZihyJiZuKXtsZXQgaT1uW3IuZmVhdHVyZV07aWYoVGEoaSkpcmV0dXJuIGkucmVmO2lmKEFycmF5LmlzQXJyYXkoaSkpe2ZvcihsZXQgYSBvZiBpKWlmKFRhKGEpJiZhLiRyZWZOb2RlJiZhLiRyZWZOb2RlLm9mZnNldDw9ZS5vZmZzZXQmJmEuJHJlZk5vZGUuZW5kPj1lLmVuZClyZXR1cm4gYS5yZWZ9fWlmKG4pe2xldCBpPXRoaXMubmFtZVByb3ZpZGVyLmdldE5hbWVOb2RlKG4pO2lmKGkmJihpPT09ZXx8QkQoZSxpKSkpcmV0dXJuIG59fX1maW5kRGVjbGFyYXRpb25Ob2RlKGUpe2xldCByPXRoaXMuZmluZERlY2xhcmF0aW9uKGUpO2lmKHI/LiRjc3ROb2RlKXtsZXQgbj10aGlzLm5hbWVQcm92aWRlci5nZXROYW1lTm9kZShyKTtyZXR1cm4gbj8/ci4kY3N0Tm9kZX19ZmluZFJlZmVyZW5jZXMoZSxyKXtsZXQgbj1bXTtpZihyLmluY2x1ZGVEZWNsYXJhdGlvbil7bGV0IGE9dGhpcy5nZXRSZWZlcmVuY2VUb1NlbGYoZSk7YSYmbi5wdXNoKGEpfWxldCBpPXRoaXMuaW5kZXguZmluZEFsbFJlZmVyZW5jZXMoZSx0aGlzLm5vZGVMb2NhdG9yLmdldEFzdE5vZGVQYXRoKGUpKTtyZXR1cm4gci5kb2N1bWVudFVyaSYmKGk9aS5maWx0ZXIoYT0+ZHMuZXF1YWxzKGEuc291cmNlVXJpLHIuZG9jdW1lbnRVcmkpKSksbi5wdXNoKC4uLmkpLHRuKG4pfWdldFJlZmVyZW5jZVRvU2VsZihlKXtsZXQgcj10aGlzLm5hbWVQcm92aWRlci5nZXROYW1lTm9kZShlKTtpZihyKXtsZXQgbj1WaShlKSxpPXRoaXMubm9kZUxvY2F0b3IuZ2V0QXN0Tm9kZVBhdGgoZSk7cmV0dXJue3NvdXJjZVVyaTpuLnVyaSxzb3VyY2VQYXRoOmksdGFyZ2V0VXJpOm4udXJpLHRhcmdldFBhdGg6aSxzZWdtZW50OmUwKHIpLGxvY2FsOiEwfX19fX0pO3ZhciBIYyxFMCxGZz1NKCgpPT57InVzZSBzdHJpY3QiOyRzKCk7SGM9Y2xhc3N7c3RhdGlje28odGhpcywiTXVsdGlNYXAiKX1jb25zdHJ1Y3RvcihlKXtpZih0aGlzLm1hcD1uZXcgTWFwLGUpZm9yKGxldFtyLG5db2YgZSl0aGlzLmFkZChyLG4pfWdldCBzaXplKCl7cmV0dXJuIEptLnN1bSh0bih0aGlzLm1hcC52YWx1ZXMoKSkubWFwKGU9PmUubGVuZ3RoKSl9Y2xlYXIoKXt0aGlzLm1hcC5jbGVhcigpfWRlbGV0ZShlLHIpe2lmKHI9PT12b2lkIDApcmV0dXJuIHRoaXMubWFwLmRlbGV0ZShlKTt7bGV0IG49dGhpcy5tYXAuZ2V0KGUpO2lmKG4pe2xldCBpPW4uaW5kZXhPZihyKTtpZihpPj0wKXJldHVybiBuLmxlbmd0aD09PTE/dGhpcy5tYXAuZGVsZXRlKGUpOm4uc3BsaWNlKGksMSksITB9cmV0dXJuITF9fWdldChlKXt2YXIgcjtyZXR1cm4ocj10aGlzLm1hcC5nZXQoZSkpIT09bnVsbCYmciE9PXZvaWQgMD9yOltdfWhhcyhlLHIpe2lmKHI9PT12b2lkIDApcmV0dXJuIHRoaXMubWFwLmhhcyhlKTt7bGV0IG49dGhpcy5tYXAuZ2V0KGUpO3JldHVybiBuP24uaW5kZXhPZihyKT49MDohMX19YWRkKGUscil7cmV0dXJuIHRoaXMubWFwLmhhcyhlKT90aGlzLm1hcC5nZXQoZSkucHVzaChyKTp0aGlzLm1hcC5zZXQoZSxbcl0pLHRoaXN9YWRkQWxsKGUscil7cmV0dXJuIHRoaXMubWFwLmhhcyhlKT90aGlzLm1hcC5nZXQoZSkucHVzaCguLi5yKTp0aGlzLm1hcC5zZXQoZSxBcnJheS5mcm9tKHIpKSx0aGlzfWZvckVhY2goZSl7dGhpcy5tYXAuZm9yRWFjaCgocixuKT0+ci5mb3JFYWNoKGk9PmUoaSxuLHRoaXMpKSl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpcy5lbnRyaWVzKCkuaXRlcmF0b3IoKX1lbnRyaWVzKCl7cmV0dXJuIHRuKHRoaXMubWFwLmVudHJpZXMoKSkuZmxhdE1hcCgoW2Uscl0pPT5yLm1hcChuPT5bZSxuXSkpfWtleXMoKXtyZXR1cm4gdG4odGhpcy5tYXAua2V5cygpKX12YWx1ZXMoKXtyZXR1cm4gdG4odGhpcy5tYXAudmFsdWVzKCkpLmZsYXQoKX1lbnRyaWVzR3JvdXBlZEJ5S2V5KCl7cmV0dXJuIHRuKHRoaXMubWFwLmVudHJpZXMoKSl9fSxFMD1jbGFzc3tzdGF0aWN7byh0aGlzLCJCaU1hcCIpfWdldCBzaXplKCl7cmV0dXJuIHRoaXMubWFwLnNpemV9Y29uc3RydWN0b3IoZSl7aWYodGhpcy5tYXA9bmV3IE1hcCx0aGlzLmludmVyc2U9bmV3IE1hcCxlKWZvcihsZXRbcixuXW9mIGUpdGhpcy5zZXQocixuKX1jbGVhcigpe3RoaXMubWFwLmNsZWFyKCksdGhpcy5pbnZlcnNlLmNsZWFyKCl9c2V0KGUscil7cmV0dXJuIHRoaXMubWFwLnNldChlLHIpLHRoaXMuaW52ZXJzZS5zZXQocixlKSx0aGlzfWdldChlKXtyZXR1cm4gdGhpcy5tYXAuZ2V0KGUpfWdldEtleShlKXtyZXR1cm4gdGhpcy5pbnZlcnNlLmdldChlKX1kZWxldGUoZSl7bGV0IHI9dGhpcy5tYXAuZ2V0KGUpO3JldHVybiByIT09dm9pZCAwPyh0aGlzLm1hcC5kZWxldGUoZSksdGhpcy5pbnZlcnNlLmRlbGV0ZShyKSwhMCk6ITF9fX0pO3ZhciBaMix6TT1NKCgpPT57InVzZSBzdHJpY3QiO3JsKCk7b3MoKTtGZygpO25sKCk7WjI9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdFNjb3BlQ29tcHV0YXRpb24iKX1jb25zdHJ1Y3RvcihlKXt0aGlzLm5hbWVQcm92aWRlcj1lLnJlZmVyZW5jZXMuTmFtZVByb3ZpZGVyLHRoaXMuZGVzY3JpcHRpb25zPWUud29ya3NwYWNlLkFzdE5vZGVEZXNjcmlwdGlvblByb3ZpZGVyfWFzeW5jIGNvbXB1dGVFeHBvcnRzKGUscj1Bci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXtyZXR1cm4gdGhpcy5jb21wdXRlRXhwb3J0c0Zvck5vZGUoZS5wYXJzZVJlc3VsdC52YWx1ZSxlLHZvaWQgMCxyKX1hc3luYyBjb21wdXRlRXhwb3J0c0Zvck5vZGUoZSxyLG49bDIsaT1Bci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXtsZXQgYT1bXTt0aGlzLmV4cG9ydE5vZGUoZSxhLHIpO2ZvcihsZXQgcyBvZiBuKGUpKWF3YWl0IEhpKGkpLHRoaXMuZXhwb3J0Tm9kZShzLGEscik7cmV0dXJuIGF9ZXhwb3J0Tm9kZShlLHIsbil7bGV0IGk9dGhpcy5uYW1lUHJvdmlkZXIuZ2V0TmFtZShlKTtpJiZyLnB1c2godGhpcy5kZXNjcmlwdGlvbnMuY3JlYXRlRGVzY3JpcHRpb24oZSxpLG4pKX1hc3luYyBjb21wdXRlTG9jYWxTY29wZXMoZSxyPUFyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe2xldCBuPWUucGFyc2VSZXN1bHQudmFsdWUsaT1uZXcgSGM7Zm9yKGxldCBhIG9mIEZjKG4pKWF3YWl0IEhpKHIpLHRoaXMucHJvY2Vzc05vZGUoYSxlLGkpO3JldHVybiBpfXByb2Nlc3NOb2RlKGUscixuKXtsZXQgaT1lLiRjb250YWluZXI7aWYoaSl7bGV0IGE9dGhpcy5uYW1lUHJvdmlkZXIuZ2V0TmFtZShlKTthJiZuLmFkZChpLHRoaXMuZGVzY3JpcHRpb25zLmNyZWF0ZURlc2NyaXB0aW9uKGUsYSxyKSl9fX19KTt2YXIgemcsSjIsZnplLEdNPU0oKCk9PnsidXNlIHN0cmljdCI7JHMoKTt6Zz1jbGFzc3tzdGF0aWN7byh0aGlzLCJTdHJlYW1TY29wZSIpfWNvbnN0cnVjdG9yKGUscixuKXt2YXIgaTt0aGlzLmVsZW1lbnRzPWUsdGhpcy5vdXRlclNjb3BlPXIsdGhpcy5jYXNlSW5zZW5zaXRpdmU9KGk9bj8uY2FzZUluc2Vuc2l0aXZlKSE9PW51bGwmJmkhPT12b2lkIDA/aTohMX1nZXRBbGxFbGVtZW50cygpe3JldHVybiB0aGlzLm91dGVyU2NvcGU/dGhpcy5lbGVtZW50cy5jb25jYXQodGhpcy5vdXRlclNjb3BlLmdldEFsbEVsZW1lbnRzKCkpOnRoaXMuZWxlbWVudHN9Z2V0RWxlbWVudChlKXtsZXQgcj10aGlzLmNhc2VJbnNlbnNpdGl2ZT90aGlzLmVsZW1lbnRzLmZpbmQobj0+bi5uYW1lLnRvTG93ZXJDYXNlKCk9PT1lLnRvTG93ZXJDYXNlKCkpOnRoaXMuZWxlbWVudHMuZmluZChuPT5uLm5hbWU9PT1lKTtpZihyKXJldHVybiByO2lmKHRoaXMub3V0ZXJTY29wZSlyZXR1cm4gdGhpcy5vdXRlclNjb3BlLmdldEVsZW1lbnQoZSl9fSxKMj1jbGFzc3tzdGF0aWN7byh0aGlzLCJNYXBTY29wZSIpfWNvbnN0cnVjdG9yKGUscixuKXt2YXIgaTt0aGlzLmVsZW1lbnRzPW5ldyBNYXAsdGhpcy5jYXNlSW5zZW5zaXRpdmU9KGk9bj8uY2FzZUluc2Vuc2l0aXZlKSE9PW51bGwmJmkhPT12b2lkIDA/aTohMTtmb3IobGV0IGEgb2YgZSl7bGV0IHM9dGhpcy5jYXNlSW5zZW5zaXRpdmU/YS5uYW1lLnRvTG93ZXJDYXNlKCk6YS5uYW1lO3RoaXMuZWxlbWVudHMuc2V0KHMsYSl9dGhpcy5vdXRlclNjb3BlPXJ9Z2V0RWxlbWVudChlKXtsZXQgcj10aGlzLmNhc2VJbnNlbnNpdGl2ZT9lLnRvTG93ZXJDYXNlKCk6ZSxuPXRoaXMuZWxlbWVudHMuZ2V0KHIpO2lmKG4pcmV0dXJuIG47aWYodGhpcy5vdXRlclNjb3BlKXJldHVybiB0aGlzLm91dGVyU2NvcGUuZ2V0RWxlbWVudChlKX1nZXRBbGxFbGVtZW50cygpe2xldCBlPXRuKHRoaXMuZWxlbWVudHMudmFsdWVzKCkpO3JldHVybiB0aGlzLm91dGVyU2NvcGUmJihlPWUuY29uY2F0KHRoaXMub3V0ZXJTY29wZS5nZXRBbGxFbGVtZW50cygpKSksZX19LGZ6ZT17Z2V0RWxlbWVudCgpe30sZ2V0QWxsRWxlbWVudHMoKXtyZXR1cm4gcjJ9fX0pO3ZhciBHZyxleCxTMCxxaywkZyxYaz1NKCgpPT57InVzZSBzdHJpY3QiO0dnPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRpc3Bvc2FibGVDYWNoZSIpfWNvbnN0cnVjdG9yKCl7dGhpcy50b0Rpc3Bvc2U9W10sdGhpcy5pc0Rpc3Bvc2VkPSExfW9uRGlzcG9zZShlKXt0aGlzLnRvRGlzcG9zZS5wdXNoKGUpfWRpc3Bvc2UoKXt0aGlzLnRocm93SWZEaXNwb3NlZCgpLHRoaXMuY2xlYXIoKSx0aGlzLmlzRGlzcG9zZWQ9ITAsdGhpcy50b0Rpc3Bvc2UuZm9yRWFjaChlPT5lLmRpc3Bvc2UoKSl9dGhyb3dJZkRpc3Bvc2VkKCl7aWYodGhpcy5pc0Rpc3Bvc2VkKXRocm93IG5ldyBFcnJvcigiVGhpcyBjYWNoZSBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkIil9fSxleD1jbGFzcyBleHRlbmRzIEdne3N0YXRpY3tvKHRoaXMsIlNpbXBsZUNhY2hlIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY2FjaGU9bmV3IE1hcH1oYXMoZSl7cmV0dXJuIHRoaXMudGhyb3dJZkRpc3Bvc2VkKCksdGhpcy5jYWNoZS5oYXMoZSl9c2V0KGUscil7dGhpcy50aHJvd0lmRGlzcG9zZWQoKSx0aGlzLmNhY2hlLnNldChlLHIpfWdldChlLHIpe2lmKHRoaXMudGhyb3dJZkRpc3Bvc2VkKCksdGhpcy5jYWNoZS5oYXMoZSkpcmV0dXJuIHRoaXMuY2FjaGUuZ2V0KGUpO2lmKHIpe2xldCBuPXIoKTtyZXR1cm4gdGhpcy5jYWNoZS5zZXQoZSxuKSxufWVsc2UgcmV0dXJufWRlbGV0ZShlKXtyZXR1cm4gdGhpcy50aHJvd0lmRGlzcG9zZWQoKSx0aGlzLmNhY2hlLmRlbGV0ZShlKX1jbGVhcigpe3RoaXMudGhyb3dJZkRpc3Bvc2VkKCksdGhpcy5jYWNoZS5jbGVhcigpfX0sUzA9Y2xhc3MgZXh0ZW5kcyBHZ3tzdGF0aWN7byh0aGlzLCJDb250ZXh0Q2FjaGUiKX1jb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMuY2FjaGU9bmV3IE1hcCx0aGlzLmNvbnZlcnRlcj1lPz8ocj0+cil9aGFzKGUscil7cmV0dXJuIHRoaXMudGhyb3dJZkRpc3Bvc2VkKCksdGhpcy5jYWNoZUZvckNvbnRleHQoZSkuaGFzKHIpfXNldChlLHIsbil7dGhpcy50aHJvd0lmRGlzcG9zZWQoKSx0aGlzLmNhY2hlRm9yQ29udGV4dChlKS5zZXQocixuKX1nZXQoZSxyLG4pe3RoaXMudGhyb3dJZkRpc3Bvc2VkKCk7bGV0IGk9dGhpcy5jYWNoZUZvckNvbnRleHQoZSk7aWYoaS5oYXMocikpcmV0dXJuIGkuZ2V0KHIpO2lmKG4pe2xldCBhPW4oKTtyZXR1cm4gaS5zZXQocixhKSxhfWVsc2UgcmV0dXJufWRlbGV0ZShlLHIpe3JldHVybiB0aGlzLnRocm93SWZEaXNwb3NlZCgpLHRoaXMuY2FjaGVGb3JDb250ZXh0KGUpLmRlbGV0ZShyKX1jbGVhcihlKXtpZih0aGlzLnRocm93SWZEaXNwb3NlZCgpLGUpe2xldCByPXRoaXMuY29udmVydGVyKGUpO3RoaXMuY2FjaGUuZGVsZXRlKHIpfWVsc2UgdGhpcy5jYWNoZS5jbGVhcigpfWNhY2hlRm9yQ29udGV4dChlKXtsZXQgcj10aGlzLmNvbnZlcnRlcihlKSxuPXRoaXMuY2FjaGUuZ2V0KHIpO3JldHVybiBufHwobj1uZXcgTWFwLHRoaXMuY2FjaGUuc2V0KHIsbikpLG59fSxxaz1jbGFzcyBleHRlbmRzIFMwe3N0YXRpY3tvKHRoaXMsIkRvY3VtZW50Q2FjaGUiKX1jb25zdHJ1Y3RvcihlKXtzdXBlcihyPT5yLnRvU3RyaW5nKCkpLHRoaXMub25EaXNwb3NlKGUud29ya3NwYWNlLkRvY3VtZW50QnVpbGRlci5vblVwZGF0ZSgocixuKT0+e2xldCBpPXIuY29uY2F0KG4pO2ZvcihsZXQgYSBvZiBpKXRoaXMuY2xlYXIoYSl9KSl9fSwkZz1jbGFzcyBleHRlbmRzIGV4e3N0YXRpY3tvKHRoaXMsIldvcmtzcGFjZUNhY2hlIil9Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLm9uRGlzcG9zZShlLndvcmtzcGFjZS5Eb2N1bWVudEJ1aWxkZXIub25VcGRhdGUoKCk9Pnt0aGlzLmNsZWFyKCl9KSl9fX0pO3ZhciB0eCwkTT1NKCgpPT57InVzZSBzdHJpY3QiO0dNKCk7b3MoKTskcygpO1hrKCk7dHg9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdFNjb3BlUHJvdmlkZXIiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLnJlZmxlY3Rpb249ZS5zaGFyZWQuQXN0UmVmbGVjdGlvbix0aGlzLm5hbWVQcm92aWRlcj1lLnJlZmVyZW5jZXMuTmFtZVByb3ZpZGVyLHRoaXMuZGVzY3JpcHRpb25zPWUud29ya3NwYWNlLkFzdE5vZGVEZXNjcmlwdGlvblByb3ZpZGVyLHRoaXMuaW5kZXhNYW5hZ2VyPWUuc2hhcmVkLndvcmtzcGFjZS5JbmRleE1hbmFnZXIsdGhpcy5nbG9iYWxTY29wZUNhY2hlPW5ldyAkZyhlLnNoYXJlZCl9Z2V0U2NvcGUoZSl7bGV0IHI9W10sbj10aGlzLnJlZmxlY3Rpb24uZ2V0UmVmZXJlbmNlVHlwZShlKSxpPVZpKGUuY29udGFpbmVyKS5wcmVjb21wdXRlZFNjb3BlcztpZihpKXtsZXQgcz1lLmNvbnRhaW5lcjtkb3tsZXQgbD1pLmdldChzKTtsLmxlbmd0aD4wJiZyLnB1c2godG4obCkuZmlsdGVyKHU9PnRoaXMucmVmbGVjdGlvbi5pc1N1YnR5cGUodS50eXBlLG4pKSkscz1zLiRjb250YWluZXJ9d2hpbGUocyl9bGV0IGE9dGhpcy5nZXRHbG9iYWxTY29wZShuLGUpO2ZvcihsZXQgcz1yLmxlbmd0aC0xO3M+PTA7cy0tKWE9dGhpcy5jcmVhdGVTY29wZShyW3NdLGEpO3JldHVybiBhfWNyZWF0ZVNjb3BlKGUscixuKXtyZXR1cm4gbmV3IHpnKHRuKGUpLHIsbil9Y3JlYXRlU2NvcGVGb3JOb2RlcyhlLHIsbil7bGV0IGk9dG4oZSkubWFwKGE9PntsZXQgcz10aGlzLm5hbWVQcm92aWRlci5nZXROYW1lKGEpO2lmKHMpcmV0dXJuIHRoaXMuZGVzY3JpcHRpb25zLmNyZWF0ZURlc2NyaXB0aW9uKGEscyl9KS5ub25OdWxsYWJsZSgpO3JldHVybiBuZXcgemcoaSxyLG4pfWdldEdsb2JhbFNjb3BlKGUscil7cmV0dXJuIHRoaXMuZ2xvYmFsU2NvcGVDYWNoZS5nZXQoZSwoKT0+bmV3IEoyKHRoaXMuaW5kZXhNYW5hZ2VyLmFsbEVsZW1lbnRzKGUpKSl9fX0pO2Z1bmN0aW9uIFZNKHQpe3JldHVybiB0eXBlb2YgdC4kY29tbWVudD09InN0cmluZyJ9ZnVuY3Rpb24gbWNlKHQpe3JldHVybiB0eXBlb2YgdD09Im9iamVjdCImJiEhdCYmKCIkcmVmImluIHR8fCIkZXJyb3IiaW4gdCl9dmFyIHJ4LGprPU0oKCk9PnsidXNlIHN0cmljdCI7T00oKTtabygpO29zKCk7VmwoKTtvKFZNLCJpc0FzdE5vZGVXaXRoQ29tbWVudCIpO28obWNlLCJpc0ludGVybWVkaWF0ZVJlZmVyZW5jZSIpO3J4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRKc29uU2VyaWFsaXplciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuaWdub3JlUHJvcGVydGllcz1uZXcgU2V0KFsiJGNvbnRhaW5lciIsIiRjb250YWluZXJQcm9wZXJ0eSIsIiRjb250YWluZXJJbmRleCIsIiRkb2N1bWVudCIsIiRjc3ROb2RlIl0pLHRoaXMubGFuZ2l1bURvY3VtZW50cz1lLnNoYXJlZC53b3Jrc3BhY2UuTGFuZ2l1bURvY3VtZW50cyx0aGlzLmFzdE5vZGVMb2NhdG9yPWUud29ya3NwYWNlLkFzdE5vZGVMb2NhdG9yLHRoaXMubmFtZVByb3ZpZGVyPWUucmVmZXJlbmNlcy5OYW1lUHJvdmlkZXIsdGhpcy5jb21tZW50UHJvdmlkZXI9ZS5kb2N1bWVudGF0aW9uLkNvbW1lbnRQcm92aWRlcn1zZXJpYWxpemUoZSxyPXt9KXtsZXQgbj1yPy5yZXBsYWNlcixpPW8oKHMsbCk9PnRoaXMucmVwbGFjZXIocyxsLHIpLCJkZWZhdWx0UmVwbGFjZXIiKSxhPW4/KHMsbCk9Pm4ocyxsLGkpOmk7dHJ5e3JldHVybiB0aGlzLmN1cnJlbnREb2N1bWVudD1WaShlKSxKU09OLnN0cmluZ2lmeShlLGEscj8uc3BhY2UpfWZpbmFsbHl7dGhpcy5jdXJyZW50RG9jdW1lbnQ9dm9pZCAwfX1kZXNlcmlhbGl6ZShlLHI9e30pe2xldCBuPUpTT04ucGFyc2UoZSk7cmV0dXJuIHRoaXMubGlua05vZGUobixuLHIpLG59cmVwbGFjZXIoZSxyLHtyZWZUZXh0Om4sc291cmNlVGV4dDppLHRleHRSZWdpb25zOmEsY29tbWVudHM6cyx1cmlDb252ZXJ0ZXI6bH0pe3ZhciB1LGgsZixkO2lmKCF0aGlzLmlnbm9yZVByb3BlcnRpZXMuaGFzKGUpKWlmKFRhKHIpKXtsZXQgcD1yLnJlZixtPW4/ci4kcmVmVGV4dDp2b2lkIDA7aWYocCl7bGV0IGc9VmkocCkseT0iIjt0aGlzLmN1cnJlbnREb2N1bWVudCYmdGhpcy5jdXJyZW50RG9jdW1lbnQhPT1nJiYobD95PWwoZy51cmkscik6eT1nLnVyaS50b1N0cmluZygpKTtsZXQgdj10aGlzLmFzdE5vZGVMb2NhdG9yLmdldEFzdE5vZGVQYXRoKHApO3JldHVybnskcmVmOmAke3l9IyR7dn1gLCRyZWZUZXh0Om19fWVsc2UgcmV0dXJueyRlcnJvcjooaD0odT1yLmVycm9yKT09PW51bGx8fHU9PT12b2lkIDA/dm9pZCAwOnUubWVzc2FnZSkhPT1udWxsJiZoIT09dm9pZCAwP2g6IkNvdWxkIG5vdCByZXNvbHZlIHJlZmVyZW5jZSIsJHJlZlRleHQ6bX19ZWxzZSBpZihyaShyKSl7bGV0IHA7aWYoYSYmKHA9dGhpcy5hZGRBc3ROb2RlUmVnaW9uV2l0aEFzc2lnbm1lbnRzVG8oT2JqZWN0LmFzc2lnbih7fSxyKSksKCFlfHxyLiRkb2N1bWVudCkmJnA/LiR0ZXh0UmVnaW9uJiYocC4kdGV4dFJlZ2lvbi5kb2N1bWVudFVSST0oZj10aGlzLmN1cnJlbnREb2N1bWVudCk9PT1udWxsfHxmPT09dm9pZCAwP3ZvaWQgMDpmLnVyaS50b1N0cmluZygpKSksaSYmIWUmJihwPz8ocD1PYmplY3QuYXNzaWduKHt9LHIpKSxwLiRzb3VyY2VUZXh0PShkPXIuJGNzdE5vZGUpPT09bnVsbHx8ZD09PXZvaWQgMD92b2lkIDA6ZC50ZXh0KSxzKXtwPz8ocD1PYmplY3QuYXNzaWduKHt9LHIpKTtsZXQgbT10aGlzLmNvbW1lbnRQcm92aWRlci5nZXRDb21tZW50KHIpO20mJihwLiRjb21tZW50PW0ucmVwbGFjZSgvXHIvZywiIikpfXJldHVybiBwPz9yfWVsc2UgcmV0dXJuIHJ9YWRkQXN0Tm9kZVJlZ2lvbldpdGhBc3NpZ25tZW50c1RvKGUpe2xldCByPW8obj0+KHtvZmZzZXQ6bi5vZmZzZXQsZW5kOm4uZW5kLGxlbmd0aDpuLmxlbmd0aCxyYW5nZTpuLnJhbmdlfSksImNyZWF0ZURvY3VtZW50U2VnbWVudCIpO2lmKGUuJGNzdE5vZGUpe2xldCBuPWUuJHRleHRSZWdpb249cihlLiRjc3ROb2RlKSxpPW4uYXNzaWdubWVudHM9e307cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZpbHRlcihhPT4hYS5zdGFydHNXaXRoKCIkIikpLmZvckVhY2goYT0+e2xldCBzPXJSKGUuJGNzdE5vZGUsYSkubWFwKHIpO3MubGVuZ3RoIT09MCYmKGlbYV09cyl9KSxlfX1saW5rTm9kZShlLHIsbixpLGEscyl7Zm9yKGxldFt1LGhdb2YgT2JqZWN0LmVudHJpZXMoZSkpaWYoQXJyYXkuaXNBcnJheShoKSlmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKyl7bGV0IGQ9aFtmXTttY2UoZCk/aFtmXT10aGlzLnJldml2ZVJlZmVyZW5jZShlLHUscixkLG4pOnJpKGQpJiZ0aGlzLmxpbmtOb2RlKGQscixuLGUsdSxmKX1lbHNlIG1jZShoKT9lW3VdPXRoaXMucmV2aXZlUmVmZXJlbmNlKGUsdSxyLGgsbik6cmkoaCkmJnRoaXMubGlua05vZGUoaCxyLG4sZSx1KTtsZXQgbD1lO2wuJGNvbnRhaW5lcj1pLGwuJGNvbnRhaW5lclByb3BlcnR5PWEsbC4kY29udGFpbmVySW5kZXg9c31yZXZpdmVSZWZlcmVuY2UoZSxyLG4saSxhKXtsZXQgcz1pLiRyZWZUZXh0LGw9aS4kZXJyb3I7aWYoaS4kcmVmKXtsZXQgdT10aGlzLmdldFJlZk5vZGUobixpLiRyZWYsYS51cmlDb252ZXJ0ZXIpO2lmKHJpKHUpKXJldHVybiBzfHwocz10aGlzLm5hbWVQcm92aWRlci5nZXROYW1lKHUpKSx7JHJlZlRleHQ6cz8/IiIscmVmOnV9O2w9dX1pZihsKXtsZXQgdT17JHJlZlRleHQ6cz8/IiJ9O3JldHVybiB1LmVycm9yPXtjb250YWluZXI6ZSxwcm9wZXJ0eTpyLG1lc3NhZ2U6bCxyZWZlcmVuY2U6dX0sdX1lbHNlIHJldHVybn1nZXRSZWZOb2RlKGUscixuKXt0cnl7bGV0IGk9ci5pbmRleE9mKCIjIik7aWYoaT09PTApe2xldCB1PXRoaXMuYXN0Tm9kZUxvY2F0b3IuZ2V0QXN0Tm9kZShlLHIuc3Vic3RyaW5nKDEpKTtyZXR1cm4gdXx8IkNvdWxkIG5vdCByZXNvbHZlIHBhdGg6ICIrcn1pZihpPDApe2xldCB1PW4/bihyKTpIcy5wYXJzZShyKSxoPXRoaXMubGFuZ2l1bURvY3VtZW50cy5nZXREb2N1bWVudCh1KTtyZXR1cm4gaD9oLnBhcnNlUmVzdWx0LnZhbHVlOiJDb3VsZCBub3QgZmluZCBkb2N1bWVudCBmb3IgVVJJOiAiK3J9bGV0IGE9bj9uKHIuc3Vic3RyaW5nKDAsaSkpOkhzLnBhcnNlKHIuc3Vic3RyaW5nKDAsaSkpLHM9dGhpcy5sYW5naXVtRG9jdW1lbnRzLmdldERvY3VtZW50KGEpO2lmKCFzKXJldHVybiJDb3VsZCBub3QgZmluZCBkb2N1bWVudCBmb3IgVVJJOiAiK3I7aWYoaT09PXIubGVuZ3RoLTEpcmV0dXJuIHMucGFyc2VSZXN1bHQudmFsdWU7bGV0IGw9dGhpcy5hc3ROb2RlTG9jYXRvci5nZXRBc3ROb2RlKHMucGFyc2VSZXN1bHQudmFsdWUsci5zdWJzdHJpbmcoaSsxKSk7cmV0dXJuIGx8fCJDb3VsZCBub3QgcmVzb2x2ZSBVUkk6ICIrcn1jYXRjaChpKXtyZXR1cm4gU3RyaW5nKGkpfX19fSk7dmFyIG54LFVNPU0oKCk9PnsidXNlIHN0cmljdCI7VWMoKTtueD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0U2VydmljZVJlZ2lzdHJ5Iil9cmVnaXN0ZXIoZSl7aWYoIXRoaXMuc2luZ2xldG9uJiYhdGhpcy5tYXApe3RoaXMuc2luZ2xldG9uPWU7cmV0dXJufWlmKCF0aGlzLm1hcCYmKHRoaXMubWFwPXt9LHRoaXMuc2luZ2xldG9uKSl7Zm9yKGxldCByIG9mIHRoaXMuc2luZ2xldG9uLkxhbmd1YWdlTWV0YURhdGEuZmlsZUV4dGVuc2lvbnMpdGhpcy5tYXBbcl09dGhpcy5zaW5nbGV0b247dGhpcy5zaW5nbGV0b249dm9pZCAwfWZvcihsZXQgciBvZiBlLkxhbmd1YWdlTWV0YURhdGEuZmlsZUV4dGVuc2lvbnMpdGhpcy5tYXBbcl0hPT12b2lkIDAmJnRoaXMubWFwW3JdIT09ZSYmY29uc29sZS53YXJuKGBUaGUgZmlsZSBleHRlbnNpb24gJHtyfSBpcyB1c2VkIGJ5IG11bHRpcGxlIGxhbmd1YWdlcy4gSXQgaXMgbm93IGFzc2lnbmVkIHRvICcke2UuTGFuZ3VhZ2VNZXRhRGF0YS5sYW5ndWFnZUlkfScuYCksdGhpcy5tYXBbcl09ZX1nZXRTZXJ2aWNlcyhlKXtpZih0aGlzLnNpbmdsZXRvbiE9PXZvaWQgMClyZXR1cm4gdGhpcy5zaW5nbGV0b247aWYodGhpcy5tYXA9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJUaGUgc2VydmljZSByZWdpc3RyeSBpcyBlbXB0eS4gVXNlIGByZWdpc3RlcmAgdG8gcmVnaXN0ZXIgdGhlIHNlcnZpY2VzIG9mIGEgbGFuZ3VhZ2UuIik7bGV0IHI9ZHMuZXh0bmFtZShlKSxuPXRoaXMubWFwW3JdO2lmKCFuKXRocm93IG5ldyBFcnJvcihgVGhlIHNlcnZpY2UgcmVnaXN0cnkgY29udGFpbnMgbm8gc2VydmljZXMgZm9yIHRoZSBleHRlbnNpb24gJyR7cn0nLmApO3JldHVybiBufWdldCBhbGwoKXtyZXR1cm4gdGhpcy5zaW5nbGV0b24hPT12b2lkIDA/W3RoaXMuc2luZ2xldG9uXTp0aGlzLm1hcCE9PXZvaWQgMD9PYmplY3QudmFsdWVzKHRoaXMubWFwKTpbXX19fSk7ZnVuY3Rpb24gS2sodCl7cmV0dXJue2NvZGU6dH19dmFyIFZnLGl4LGF4PU0oKCk9PnsidXNlIHN0cmljdCI7RmcoKTtubCgpOyRzKCk7byhLaywiZGlhZ25vc3RpY0RhdGEiKTsoZnVuY3Rpb24odCl7dC5hbGw9WyJmYXN0Iiwic2xvdyIsImJ1aWx0LWluIl19KShWZ3x8KFZnPXt9KSk7aXg9Y2xhc3N7c3RhdGlje28odGhpcywiVmFsaWRhdGlvblJlZ2lzdHJ5Iil9Y29uc3RydWN0b3IoZSl7dGhpcy5lbnRyaWVzPW5ldyBIYyx0aGlzLnJlZmxlY3Rpb249ZS5zaGFyZWQuQXN0UmVmbGVjdGlvbn1yZWdpc3RlcihlLHI9dGhpcyxuPSJmYXN0Iil7aWYobj09PSJidWlsdC1pbiIpdGhyb3cgbmV3IEVycm9yKCJUaGUgJ2J1aWx0LWluJyBjYXRlZ29yeSBpcyByZXNlcnZlZCBmb3IgbGV4ZXIsIHBhcnNlciwgYW5kIGxpbmtlciBlcnJvcnMuIik7Zm9yKGxldFtpLGFdb2YgT2JqZWN0LmVudHJpZXMoZSkpe2xldCBzPWE7aWYoQXJyYXkuaXNBcnJheShzKSlmb3IobGV0IGwgb2Ygcyl7bGV0IHU9e2NoZWNrOnRoaXMud3JhcFZhbGlkYXRpb25FeGNlcHRpb24obCxyKSxjYXRlZ29yeTpufTt0aGlzLmFkZEVudHJ5KGksdSl9ZWxzZSBpZih0eXBlb2Ygcz09ImZ1bmN0aW9uIil7bGV0IGw9e2NoZWNrOnRoaXMud3JhcFZhbGlkYXRpb25FeGNlcHRpb24ocyxyKSxjYXRlZ29yeTpufTt0aGlzLmFkZEVudHJ5KGksbCl9fX13cmFwVmFsaWRhdGlvbkV4Y2VwdGlvbihlLHIpe3JldHVybiBhc3luYyhuLGksYSk9Pnt0cnl7YXdhaXQgZS5jYWxsKHIsbixpLGEpfWNhdGNoKHMpe2lmKG1mKHMpKXRocm93IHM7Y29uc29sZS5lcnJvcigiQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHZhbGlkYXRpb246IixzKTtsZXQgbD1zIGluc3RhbmNlb2YgRXJyb3I/cy5tZXNzYWdlOlN0cmluZyhzKTtzIGluc3RhbmNlb2YgRXJyb3ImJnMuc3RhY2smJmNvbnNvbGUuZXJyb3Iocy5zdGFjayksaSgiZXJyb3IiLCJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdmFsaWRhdGlvbjogIitsLHtub2RlOm59KX19fWFkZEVudHJ5KGUscil7aWYoZT09PSJBc3ROb2RlIil7dGhpcy5lbnRyaWVzLmFkZCgiQXN0Tm9kZSIscik7cmV0dXJufWZvcihsZXQgbiBvZiB0aGlzLnJlZmxlY3Rpb24uZ2V0QWxsU3ViVHlwZXMoZSkpdGhpcy5lbnRyaWVzLmFkZChuLHIpfWdldENoZWNrcyhlLHIpe2xldCBuPXRuKHRoaXMuZW50cmllcy5nZXQoZSkpLmNvbmNhdCh0aGlzLmVudHJpZXMuZ2V0KCJBc3ROb2RlIikpO3JldHVybiByJiYobj1uLmZpbHRlcihpPT5yLmluY2x1ZGVzKGkuY2F0ZWdvcnkpKSksbi5tYXAoaT0+aS5jaGVjayl9fX0pO2Z1bmN0aW9uIGdjZSh0KXtpZih0LnJhbmdlKXJldHVybiB0LnJhbmdlO2xldCBlO3JldHVybiB0eXBlb2YgdC5wcm9wZXJ0eT09InN0cmluZyI/ZT1wMih0Lm5vZGUuJGNzdE5vZGUsdC5wcm9wZXJ0eSx0LmluZGV4KTp0eXBlb2YgdC5rZXl3b3JkPT0ic3RyaW5nIiYmKGU9aVIodC5ub2RlLiRjc3ROb2RlLHQua2V5d29yZCx0LmluZGV4KSksZT8/KGU9dC5ub2RlLiRjc3ROb2RlKSxlP2UucmFuZ2U6e3N0YXJ0OntsaW5lOjAsY2hhcmFjdGVyOjB9LGVuZDp7bGluZTowLGNoYXJhY3RlcjowfX19ZnVuY3Rpb24gUWsodCl7c3dpdGNoKHQpe2Nhc2UiZXJyb3IiOnJldHVybiAxO2Nhc2Uid2FybmluZyI6cmV0dXJuIDI7Y2FzZSJpbmZvIjpyZXR1cm4gMztjYXNlImhpbnQiOnJldHVybiA0O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRpYWdub3N0aWMgc2V2ZXJpdHk6ICIrdCl9fXZhciBzeCxRdSxITT1NKCgpPT57InVzZSBzdHJpY3QiO3JsKCk7VmwoKTtvcygpO3psKCk7bmwoKTtheCgpO3N4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHREb2N1bWVudFZhbGlkYXRvciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMudmFsaWRhdGlvblJlZ2lzdHJ5PWUudmFsaWRhdGlvbi5WYWxpZGF0aW9uUmVnaXN0cnksdGhpcy5tZXRhZGF0YT1lLkxhbmd1YWdlTWV0YURhdGF9YXN5bmMgdmFsaWRhdGVEb2N1bWVudChlLHI9e30sbj1Bci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXtsZXQgaT1lLnBhcnNlUmVzdWx0LGE9W107aWYoYXdhaXQgSGkobiksKCFyLmNhdGVnb3JpZXN8fHIuY2F0ZWdvcmllcy5pbmNsdWRlcygiYnVpbHQtaW4iKSkmJih0aGlzLnByb2Nlc3NMZXhpbmdFcnJvcnMoaSxhLHIpLHIuc3RvcEFmdGVyTGV4aW5nRXJyb3JzJiZhLnNvbWUocz0+e3ZhciBsO3JldHVybigobD1zLmRhdGEpPT09bnVsbHx8bD09PXZvaWQgMD92b2lkIDA6bC5jb2RlKT09PVF1LkxleGluZ0Vycm9yfSl8fCh0aGlzLnByb2Nlc3NQYXJzaW5nRXJyb3JzKGksYSxyKSxyLnN0b3BBZnRlclBhcnNpbmdFcnJvcnMmJmEuc29tZShzPT57dmFyIGw7cmV0dXJuKChsPXMuZGF0YSk9PT1udWxsfHxsPT09dm9pZCAwP3ZvaWQgMDpsLmNvZGUpPT09UXUuUGFyc2luZ0Vycm9yfSkpfHwodGhpcy5wcm9jZXNzTGlua2luZ0Vycm9ycyhlLGEsciksci5zdG9wQWZ0ZXJMaW5raW5nRXJyb3JzJiZhLnNvbWUocz0+e3ZhciBsO3JldHVybigobD1zLmRhdGEpPT09bnVsbHx8bD09PXZvaWQgMD92b2lkIDA6bC5jb2RlKT09PVF1LkxpbmtpbmdFcnJvcn0pKSkpcmV0dXJuIGE7dHJ5e2EucHVzaCguLi5hd2FpdCB0aGlzLnZhbGlkYXRlQXN0KGkudmFsdWUscixuKSl9Y2F0Y2gocyl7aWYobWYocykpdGhyb3cgcztjb25zb2xlLmVycm9yKCJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdmFsaWRhdGlvbjoiLHMpfXJldHVybiBhd2FpdCBIaShuKSxhfXByb2Nlc3NMZXhpbmdFcnJvcnMoZSxyLG4pe2ZvcihsZXQgaSBvZiBlLmxleGVyRXJyb3JzKXtsZXQgYT17c2V2ZXJpdHk6UWsoImVycm9yIikscmFuZ2U6e3N0YXJ0OntsaW5lOmkubGluZS0xLGNoYXJhY3RlcjppLmNvbHVtbi0xfSxlbmQ6e2xpbmU6aS5saW5lLTEsY2hhcmFjdGVyOmkuY29sdW1uK2kubGVuZ3RoLTF9fSxtZXNzYWdlOmkubWVzc2FnZSxkYXRhOktrKFF1LkxleGluZ0Vycm9yKSxzb3VyY2U6dGhpcy5nZXRTb3VyY2UoKX07ci5wdXNoKGEpfX1wcm9jZXNzUGFyc2luZ0Vycm9ycyhlLHIsbil7Zm9yKGxldCBpIG9mIGUucGFyc2VyRXJyb3JzKXtsZXQgYTtpZihpc05hTihpLnRva2VuLnN0YXJ0T2Zmc2V0KSl7aWYoInByZXZpb3VzVG9rZW4iaW4gaSl7bGV0IHM9aS5wcmV2aW91c1Rva2VuO2lmKGlzTmFOKHMuc3RhcnRPZmZzZXQpKXtsZXQgbD17bGluZTowLGNoYXJhY3RlcjowfTthPXtzdGFydDpsLGVuZDpsfX1lbHNle2xldCBsPXtsaW5lOnMuZW5kTGluZS0xLGNoYXJhY3RlcjpzLmVuZENvbHVtbn07YT17c3RhcnQ6bCxlbmQ6bH19fX1lbHNlIGE9ZWcoaS50b2tlbik7aWYoYSl7bGV0IHM9e3NldmVyaXR5OlFrKCJlcnJvciIpLHJhbmdlOmEsbWVzc2FnZTppLm1lc3NhZ2UsZGF0YTpLayhRdS5QYXJzaW5nRXJyb3IpLHNvdXJjZTp0aGlzLmdldFNvdXJjZSgpfTtyLnB1c2gocyl9fX1wcm9jZXNzTGlua2luZ0Vycm9ycyhlLHIsbil7Zm9yKGxldCBpIG9mIGUucmVmZXJlbmNlcyl7bGV0IGE9aS5lcnJvcjtpZihhKXtsZXQgcz17bm9kZTphLmNvbnRhaW5lcixwcm9wZXJ0eTphLnByb3BlcnR5LGluZGV4OmEuaW5kZXgsZGF0YTp7Y29kZTpRdS5MaW5raW5nRXJyb3IsY29udGFpbmVyVHlwZTphLmNvbnRhaW5lci4kdHlwZSxwcm9wZXJ0eTphLnByb3BlcnR5LHJlZlRleHQ6YS5yZWZlcmVuY2UuJHJlZlRleHR9fTtyLnB1c2godGhpcy50b0RpYWdub3N0aWMoImVycm9yIixhLm1lc3NhZ2UscykpfX19YXN5bmMgdmFsaWRhdGVBc3QoZSxyLG49QXIuQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSl7bGV0IGk9W10sYT1vKChzLGwsdSk9PntpLnB1c2godGhpcy50b0RpYWdub3N0aWMocyxsLHUpKX0sImFjY2VwdG9yIik7cmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKHRsKGUpLm1hcChhc3luYyBzPT57YXdhaXQgSGkobik7bGV0IGw9dGhpcy52YWxpZGF0aW9uUmVnaXN0cnkuZ2V0Q2hlY2tzKHMuJHR5cGUsci5jYXRlZ29yaWVzKTtmb3IobGV0IHUgb2YgbClhd2FpdCB1KHMsYSxuKX0pKSxpfXRvRGlhZ25vc3RpYyhlLHIsbil7cmV0dXJue21lc3NhZ2U6cixyYW5nZTpnY2Uobiksc2V2ZXJpdHk6UWsoZSksY29kZTpuLmNvZGUsY29kZURlc2NyaXB0aW9uOm4uY29kZURlc2NyaXB0aW9uLHRhZ3M6bi50YWdzLHJlbGF0ZWRJbmZvcm1hdGlvbjpuLnJlbGF0ZWRJbmZvcm1hdGlvbixkYXRhOm4uZGF0YSxzb3VyY2U6dGhpcy5nZXRTb3VyY2UoKX19Z2V0U291cmNlKCl7cmV0dXJuIHRoaXMubWV0YWRhdGEubGFuZ3VhZ2VJZH19O28oZ2NlLCJnZXREaWFnbm9zdGljUmFuZ2UiKTtvKFFrLCJ0b0RpYWdub3N0aWNTZXZlcml0eSIpOyhmdW5jdGlvbih0KXt0LkxleGluZ0Vycm9yPSJsZXhpbmctZXJyb3IiLHQuUGFyc2luZ0Vycm9yPSJwYXJzaW5nLWVycm9yIix0LkxpbmtpbmdFcnJvcj0ibGlua2luZy1lcnJvciJ9KShRdXx8KFF1PXt9KSl9KTt2YXIgb3gsbHgsV009TSgoKT0+eyJ1c2Ugc3RyaWN0IjtybCgpO1pvKCk7b3MoKTt6bCgpO25sKCk7VWMoKTtveD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0QXN0Tm9kZURlc2NyaXB0aW9uUHJvdmlkZXIiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmFzdE5vZGVMb2NhdG9yPWUud29ya3NwYWNlLkFzdE5vZGVMb2NhdG9yLHRoaXMubmFtZVByb3ZpZGVyPWUucmVmZXJlbmNlcy5OYW1lUHJvdmlkZXJ9Y3JlYXRlRGVzY3JpcHRpb24oZSxyLG49VmkoZSkpe3I/PyhyPXRoaXMubmFtZVByb3ZpZGVyLmdldE5hbWUoZSkpO2xldCBpPXRoaXMuYXN0Tm9kZUxvY2F0b3IuZ2V0QXN0Tm9kZVBhdGgoZSk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBOb2RlIGF0IHBhdGggJHtpfSBoYXMgbm8gbmFtZS5gKTtsZXQgYSxzPW8oKCk9Pnt2YXIgbDtyZXR1cm4gYT8/KGE9ZTAoKGw9dGhpcy5uYW1lUHJvdmlkZXIuZ2V0TmFtZU5vZGUoZSkpIT09bnVsbCYmbCE9PXZvaWQgMD9sOmUuJGNzdE5vZGUpKX0sIm5hbWVTZWdtZW50R2V0dGVyIik7cmV0dXJue25vZGU6ZSxuYW1lOnIsZ2V0IG5hbWVTZWdtZW50KCl7cmV0dXJuIHMoKX0sc2VsZWN0aW9uU2VnbWVudDplMChlLiRjc3ROb2RlKSx0eXBlOmUuJHR5cGUsZG9jdW1lbnRVcmk6bi51cmkscGF0aDppfX19LGx4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRSZWZlcmVuY2VEZXNjcmlwdGlvblByb3ZpZGVyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5ub2RlTG9jYXRvcj1lLndvcmtzcGFjZS5Bc3ROb2RlTG9jYXRvcn1hc3luYyBjcmVhdGVEZXNjcmlwdGlvbnMoZSxyPUFyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe2xldCBuPVtdLGk9ZS5wYXJzZVJlc3VsdC52YWx1ZTtmb3IobGV0IGEgb2YgdGwoaSkpYXdhaXQgSGkocikscmcoYSkuZmlsdGVyKHM9PiFaZChzKSkuZm9yRWFjaChzPT57bGV0IGw9dGhpcy5jcmVhdGVEZXNjcmlwdGlvbihzKTtsJiZuLnB1c2gobCl9KTtyZXR1cm4gbn1jcmVhdGVEZXNjcmlwdGlvbihlKXtsZXQgcj1lLnJlZmVyZW5jZS4kbm9kZURlc2NyaXB0aW9uLG49ZS5yZWZlcmVuY2UuJHJlZk5vZGU7aWYoIXJ8fCFuKXJldHVybjtsZXQgaT1WaShlLmNvbnRhaW5lcikudXJpO3JldHVybntzb3VyY2VVcmk6aSxzb3VyY2VQYXRoOnRoaXMubm9kZUxvY2F0b3IuZ2V0QXN0Tm9kZVBhdGgoZS5jb250YWluZXIpLHRhcmdldFVyaTpyLmRvY3VtZW50VXJpLHRhcmdldFBhdGg6ci5wYXRoLHNlZ21lbnQ6ZTAobiksbG9jYWw6ZHMuZXF1YWxzKHIuZG9jdW1lbnRVcmksaSl9fX19KTt2YXIgY3gsWU09TSgoKT0+eyJ1c2Ugc3RyaWN0IjtjeD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0QXN0Tm9kZUxvY2F0b3IiKX1jb25zdHJ1Y3Rvcigpe3RoaXMuc2VnbWVudFNlcGFyYXRvcj0iLyIsdGhpcy5pbmRleFNlcGFyYXRvcj0iQCJ9Z2V0QXN0Tm9kZVBhdGgoZSl7aWYoZS4kY29udGFpbmVyKXtsZXQgcj10aGlzLmdldEFzdE5vZGVQYXRoKGUuJGNvbnRhaW5lciksbj10aGlzLmdldFBhdGhTZWdtZW50KGUpO3JldHVybiByK3RoaXMuc2VnbWVudFNlcGFyYXRvcitufXJldHVybiIifWdldFBhdGhTZWdtZW50KHskY29udGFpbmVyUHJvcGVydHk6ZSwkY29udGFpbmVySW5kZXg6cn0pe2lmKCFlKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyAnJGNvbnRhaW5lclByb3BlcnR5JyBpbiBBU1Qgbm9kZS4iKTtyZXR1cm4gciE9PXZvaWQgMD9lK3RoaXMuaW5kZXhTZXBhcmF0b3IrcjplfWdldEFzdE5vZGUoZSxyKXtyZXR1cm4gci5zcGxpdCh0aGlzLnNlZ21lbnRTZXBhcmF0b3IpLnJlZHVjZSgoaSxhKT0+e2lmKCFpfHxhLmxlbmd0aD09PTApcmV0dXJuIGk7bGV0IHM9YS5pbmRleE9mKHRoaXMuaW5kZXhTZXBhcmF0b3IpO2lmKHM+MCl7bGV0IGw9YS5zdWJzdHJpbmcoMCxzKSx1PXBhcnNlSW50KGEuc3Vic3RyaW5nKHMrMSkpLGg9aVtsXTtyZXR1cm4gaD8uW3VdfXJldHVybiBpW2FdfSxlKX19fSk7dmFyIHV4LHFNPU0oKCk9PnsidXNlIHN0cmljdCI7bmwoKTt1eD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0Q29uZmlndXJhdGlvblByb3ZpZGVyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5fcmVhZHk9bmV3IGZzLHRoaXMuc2V0dGluZ3M9e30sdGhpcy53b3Jrc3BhY2VDb25maWc9ITEsdGhpcy5zZXJ2aWNlUmVnaXN0cnk9ZS5TZXJ2aWNlUmVnaXN0cnl9Z2V0IHJlYWR5KCl7cmV0dXJuIHRoaXMuX3JlYWR5LnByb21pc2V9aW5pdGlhbGl6ZShlKXt2YXIgcixuO3RoaXMud29ya3NwYWNlQ29uZmlnPShuPShyPWUuY2FwYWJpbGl0aWVzLndvcmtzcGFjZSk9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLmNvbmZpZ3VyYXRpb24pIT09bnVsbCYmbiE9PXZvaWQgMD9uOiExfWFzeW5jIGluaXRpYWxpemVkKGUpe2lmKHRoaXMud29ya3NwYWNlQ29uZmlnKXtpZihlLnJlZ2lzdGVyKXtsZXQgcj10aGlzLnNlcnZpY2VSZWdpc3RyeS5hbGw7ZS5yZWdpc3Rlcih7c2VjdGlvbjpyLm1hcChuPT50aGlzLnRvU2VjdGlvbk5hbWUobi5MYW5ndWFnZU1ldGFEYXRhLmxhbmd1YWdlSWQpKX0pfWlmKGUuZmV0Y2hDb25maWd1cmF0aW9uKXtsZXQgcj10aGlzLnNlcnZpY2VSZWdpc3RyeS5hbGwubWFwKGk9Pih7c2VjdGlvbjp0aGlzLnRvU2VjdGlvbk5hbWUoaS5MYW5ndWFnZU1ldGFEYXRhLmxhbmd1YWdlSWQpfSkpLG49YXdhaXQgZS5mZXRjaENvbmZpZ3VyYXRpb24ocik7ci5mb3JFYWNoKChpLGEpPT57dGhpcy51cGRhdGVTZWN0aW9uQ29uZmlndXJhdGlvbihpLnNlY3Rpb24sblthXSl9KX19dGhpcy5fcmVhZHkucmVzb2x2ZSgpfXVwZGF0ZUNvbmZpZ3VyYXRpb24oZSl7ZS5zZXR0aW5ncyYmT2JqZWN0LmtleXMoZS5zZXR0aW5ncykuZm9yRWFjaChyPT57dGhpcy51cGRhdGVTZWN0aW9uQ29uZmlndXJhdGlvbihyLGUuc2V0dGluZ3Nbcl0pfSl9dXBkYXRlU2VjdGlvbkNvbmZpZ3VyYXRpb24oZSxyKXt0aGlzLnNldHRpbmdzW2VdPXJ9YXN5bmMgZ2V0Q29uZmlndXJhdGlvbihlLHIpe2F3YWl0IHRoaXMucmVhZHk7bGV0IG49dGhpcy50b1NlY3Rpb25OYW1lKGUpO2lmKHRoaXMuc2V0dGluZ3Nbbl0pcmV0dXJuIHRoaXMuc2V0dGluZ3Nbbl1bcl19dG9TZWN0aW9uTmFtZShlKXtyZXR1cm5gJHtlfWB9fX0pO3ZhciBDMCxYTT1NKCgpPT57InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIpe3JldHVybntkaXNwb3NlOm8oYXN5bmMoKT0+YXdhaXQgcigpLCJkaXNwb3NlIil9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZX0pKEMwfHwoQzA9e30pKX0pO3ZhciBoeCxqTT1NKCgpPT57InVzZSBzdHJpY3QiO3JsKCk7WE0oKTtGZygpO25sKCk7JHMoKTtheCgpO0JnKCk7aHg9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdERvY3VtZW50QnVpbGRlciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMudXBkYXRlQnVpbGRPcHRpb25zPXt2YWxpZGF0aW9uOntjYXRlZ29yaWVzOlsiYnVpbHQtaW4iLCJmYXN0Il19fSx0aGlzLnVwZGF0ZUxpc3RlbmVycz1bXSx0aGlzLmJ1aWxkUGhhc2VMaXN0ZW5lcnM9bmV3IEhjLHRoaXMuYnVpbGRTdGF0ZT1uZXcgTWFwLHRoaXMuZG9jdW1lbnRCdWlsZFdhaXRlcnM9bmV3IE1hcCx0aGlzLmN1cnJlbnRTdGF0ZT1Ubi5DaGFuZ2VkLHRoaXMubGFuZ2l1bURvY3VtZW50cz1lLndvcmtzcGFjZS5MYW5naXVtRG9jdW1lbnRzLHRoaXMubGFuZ2l1bURvY3VtZW50RmFjdG9yeT1lLndvcmtzcGFjZS5MYW5naXVtRG9jdW1lbnRGYWN0b3J5LHRoaXMuaW5kZXhNYW5hZ2VyPWUud29ya3NwYWNlLkluZGV4TWFuYWdlcix0aGlzLnNlcnZpY2VSZWdpc3RyeT1lLlNlcnZpY2VSZWdpc3RyeX1hc3luYyBidWlsZChlLHI9e30sbj1Bci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXt2YXIgaSxhO2ZvcihsZXQgcyBvZiBlKXtsZXQgbD1zLnVyaS50b1N0cmluZygpO2lmKHMuc3RhdGU9PT1Ubi5WYWxpZGF0ZWQpe2lmKHR5cGVvZiByLnZhbGlkYXRpb249PSJib29sZWFuIiYmci52YWxpZGF0aW9uKXMuc3RhdGU9VG4uSW5kZXhlZFJlZmVyZW5jZXMscy5kaWFnbm9zdGljcz12b2lkIDAsdGhpcy5idWlsZFN0YXRlLmRlbGV0ZShsKTtlbHNlIGlmKHR5cGVvZiByLnZhbGlkYXRpb249PSJvYmplY3QiKXtsZXQgdT10aGlzLmJ1aWxkU3RhdGUuZ2V0KGwpLGg9KGk9dT8ucmVzdWx0KT09PW51bGx8fGk9PT12b2lkIDA/dm9pZCAwOmkudmFsaWRhdGlvbkNoZWNrcztpZihoKXtsZXQgZD0oKGE9ci52YWxpZGF0aW9uLmNhdGVnb3JpZXMpIT09bnVsbCYmYSE9PXZvaWQgMD9hOlZnLmFsbCkuZmlsdGVyKHA9PiFoLmluY2x1ZGVzKHApKTtkLmxlbmd0aD4wJiYodGhpcy5idWlsZFN0YXRlLnNldChsLHtjb21wbGV0ZWQ6ITEsb3B0aW9uczp7dmFsaWRhdGlvbjpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sci52YWxpZGF0aW9uKSx7Y2F0ZWdvcmllczpkfSl9LHJlc3VsdDp1LnJlc3VsdH0pLHMuc3RhdGU9VG4uSW5kZXhlZFJlZmVyZW5jZXMpfX19ZWxzZSB0aGlzLmJ1aWxkU3RhdGUuZGVsZXRlKGwpfXRoaXMuY3VycmVudFN0YXRlPVRuLkNoYW5nZWQsYXdhaXQgdGhpcy5lbWl0VXBkYXRlKGUubWFwKHM9PnMudXJpKSxbXSksYXdhaXQgdGhpcy5idWlsZERvY3VtZW50cyhlLHIsbil9YXN5bmMgdXBkYXRlKGUscixuPUFyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe3RoaXMuY3VycmVudFN0YXRlPVRuLkNoYW5nZWQ7Zm9yKGxldCBzIG9mIHIpdGhpcy5sYW5naXVtRG9jdW1lbnRzLmRlbGV0ZURvY3VtZW50KHMpLHRoaXMuYnVpbGRTdGF0ZS5kZWxldGUocy50b1N0cmluZygpKSx0aGlzLmluZGV4TWFuYWdlci5yZW1vdmUocyk7Zm9yKGxldCBzIG9mIGUpe2lmKCF0aGlzLmxhbmdpdW1Eb2N1bWVudHMuaW52YWxpZGF0ZURvY3VtZW50KHMpKXtsZXQgdT10aGlzLmxhbmdpdW1Eb2N1bWVudEZhY3RvcnkuZnJvbU1vZGVsKHskdHlwZToiSU5WQUxJRCJ9LHMpO3Uuc3RhdGU9VG4uQ2hhbmdlZCx0aGlzLmxhbmdpdW1Eb2N1bWVudHMuYWRkRG9jdW1lbnQodSl9dGhpcy5idWlsZFN0YXRlLmRlbGV0ZShzLnRvU3RyaW5nKCkpfWxldCBpPXRuKGUpLmNvbmNhdChyKS5tYXAocz0+cy50b1N0cmluZygpKS50b1NldCgpO3RoaXMubGFuZ2l1bURvY3VtZW50cy5hbGwuZmlsdGVyKHM9PiFpLmhhcyhzLnVyaS50b1N0cmluZygpKSYmdGhpcy5zaG91bGRSZWxpbmsocyxpKSkuZm9yRWFjaChzPT57dGhpcy5zZXJ2aWNlUmVnaXN0cnkuZ2V0U2VydmljZXMocy51cmkpLnJlZmVyZW5jZXMuTGlua2VyLnVubGluayhzKSxzLnN0YXRlPU1hdGgubWluKHMuc3RhdGUsVG4uQ29tcHV0ZWRTY29wZXMpLHMuZGlhZ25vc3RpY3M9dm9pZCAwfSksYXdhaXQgdGhpcy5lbWl0VXBkYXRlKGUsciksYXdhaXQgSGkobik7bGV0IGE9dGhpcy5sYW5naXVtRG9jdW1lbnRzLmFsbC5maWx0ZXIocz0+e3ZhciBsO3JldHVybiBzLnN0YXRlPFRuLkxpbmtlZHx8ISghKChsPXRoaXMuYnVpbGRTdGF0ZS5nZXQocy51cmkudG9TdHJpbmcoKSkpPT09bnVsbHx8bD09PXZvaWQgMCkmJmwuY29tcGxldGVkKX0pLnRvQXJyYXkoKTthd2FpdCB0aGlzLmJ1aWxkRG9jdW1lbnRzKGEsdGhpcy51cGRhdGVCdWlsZE9wdGlvbnMsbil9YXN5bmMgZW1pdFVwZGF0ZShlLHIpe2F3YWl0IFByb21pc2UuYWxsKHRoaXMudXBkYXRlTGlzdGVuZXJzLm1hcChuPT5uKGUscikpKX1zaG91bGRSZWxpbmsoZSxyKXtyZXR1cm4gZS5yZWZlcmVuY2VzLnNvbWUobj0+bi5lcnJvciE9PXZvaWQgMCk/ITA6dGhpcy5pbmRleE1hbmFnZXIuaXNBZmZlY3RlZChlLHIpfW9uVXBkYXRlKGUpe3JldHVybiB0aGlzLnVwZGF0ZUxpc3RlbmVycy5wdXNoKGUpLEMwLmNyZWF0ZSgoKT0+e2xldCByPXRoaXMudXBkYXRlTGlzdGVuZXJzLmluZGV4T2YoZSk7cj49MCYmdGhpcy51cGRhdGVMaXN0ZW5lcnMuc3BsaWNlKHIsMSl9KX1hc3luYyBidWlsZERvY3VtZW50cyhlLHIsbil7dGhpcy5wcmVwYXJlQnVpbGQoZSxyKSxhd2FpdCB0aGlzLnJ1bkNhbmNlbGFibGUoZSxUbi5QYXJzZWQsbixhPT50aGlzLmxhbmdpdW1Eb2N1bWVudEZhY3RvcnkudXBkYXRlKGEsbikpLGF3YWl0IHRoaXMucnVuQ2FuY2VsYWJsZShlLFRuLkluZGV4ZWRDb250ZW50LG4sYT0+dGhpcy5pbmRleE1hbmFnZXIudXBkYXRlQ29udGVudChhLG4pKSxhd2FpdCB0aGlzLnJ1bkNhbmNlbGFibGUoZSxUbi5Db21wdXRlZFNjb3BlcyxuLGFzeW5jIGE9PntsZXQgcz10aGlzLnNlcnZpY2VSZWdpc3RyeS5nZXRTZXJ2aWNlcyhhLnVyaSkucmVmZXJlbmNlcy5TY29wZUNvbXB1dGF0aW9uO2EucHJlY29tcHV0ZWRTY29wZXM9YXdhaXQgcy5jb21wdXRlTG9jYWxTY29wZXMoYSxuKX0pLGF3YWl0IHRoaXMucnVuQ2FuY2VsYWJsZShlLFRuLkxpbmtlZCxuLGE9PnRoaXMuc2VydmljZVJlZ2lzdHJ5LmdldFNlcnZpY2VzKGEudXJpKS5yZWZlcmVuY2VzLkxpbmtlci5saW5rKGEsbikpLGF3YWl0IHRoaXMucnVuQ2FuY2VsYWJsZShlLFRuLkluZGV4ZWRSZWZlcmVuY2VzLG4sYT0+dGhpcy5pbmRleE1hbmFnZXIudXBkYXRlUmVmZXJlbmNlcyhhLG4pKTtsZXQgaT1lLmZpbHRlcihhPT50aGlzLnNob3VsZFZhbGlkYXRlKGEpKTthd2FpdCB0aGlzLnJ1bkNhbmNlbGFibGUoaSxUbi5WYWxpZGF0ZWQsbixhPT50aGlzLnZhbGlkYXRlKGEsbikpO2ZvcihsZXQgYSBvZiBlKXtsZXQgcz10aGlzLmJ1aWxkU3RhdGUuZ2V0KGEudXJpLnRvU3RyaW5nKCkpO3MmJihzLmNvbXBsZXRlZD0hMCl9fXByZXBhcmVCdWlsZChlLHIpe2ZvcihsZXQgbiBvZiBlKXtsZXQgaT1uLnVyaS50b1N0cmluZygpLGE9dGhpcy5idWlsZFN0YXRlLmdldChpKTsoIWF8fGEuY29tcGxldGVkKSYmdGhpcy5idWlsZFN0YXRlLnNldChpLHtjb21wbGV0ZWQ6ITEsb3B0aW9uczpyLHJlc3VsdDphPy5yZXN1bHR9KX19YXN5bmMgcnVuQ2FuY2VsYWJsZShlLHIsbixpKXtsZXQgYT1lLmZpbHRlcihzPT5zLnN0YXRlPHIpO2ZvcihsZXQgcyBvZiBhKWF3YWl0IEhpKG4pLGF3YWl0IGkocykscy5zdGF0ZT1yO2F3YWl0IHRoaXMubm90aWZ5QnVpbGRQaGFzZShhLHIsbiksdGhpcy5jdXJyZW50U3RhdGU9cn1vbkJ1aWxkUGhhc2UoZSxyKXtyZXR1cm4gdGhpcy5idWlsZFBoYXNlTGlzdGVuZXJzLmFkZChlLHIpLEMwLmNyZWF0ZSgoKT0+e3RoaXMuYnVpbGRQaGFzZUxpc3RlbmVycy5kZWxldGUoZSxyKX0pfXdhaXRVbnRpbChlLHIsbil7bGV0IGk7aWYociYmInBhdGgiaW4gcj9pPXI6bj1yLG4/PyhuPUFyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpLGkpe2xldCBhPXRoaXMubGFuZ2l1bURvY3VtZW50cy5nZXREb2N1bWVudChpKTtpZihhJiZhLnN0YXRlPmUpcmV0dXJuIFByb21pc2UucmVzb2x2ZShpKX1yZXR1cm4gdGhpcy5jdXJyZW50U3RhdGU+PWU/UHJvbWlzZS5yZXNvbHZlKHZvaWQgMCk6bi5pc0NhbmNlbGxhdGlvblJlcXVlc3RlZD9Qcm9taXNlLnJlamVjdChWYyk6bmV3IFByb21pc2UoKGEscyk9PntsZXQgbD10aGlzLm9uQnVpbGRQaGFzZShlLCgpPT57aWYobC5kaXNwb3NlKCksdS5kaXNwb3NlKCksaSl7bGV0IGg9dGhpcy5sYW5naXVtRG9jdW1lbnRzLmdldERvY3VtZW50KGkpO2EoaD8udXJpKX1lbHNlIGEodm9pZCAwKX0pLHU9bi5vbkNhbmNlbGxhdGlvblJlcXVlc3RlZCgoKT0+e2wuZGlzcG9zZSgpLHUuZGlzcG9zZSgpLHMoVmMpfSl9KX1hc3luYyBub3RpZnlCdWlsZFBoYXNlKGUscixuKXtpZihlLmxlbmd0aD09PTApcmV0dXJuO2xldCBpPXRoaXMuYnVpbGRQaGFzZUxpc3RlbmVycy5nZXQocik7Zm9yKGxldCBhIG9mIGkpYXdhaXQgSGkobiksYXdhaXQgYShlLG4pfXNob3VsZFZhbGlkYXRlKGUpe3JldHVybiEhdGhpcy5nZXRCdWlsZE9wdGlvbnMoZSkudmFsaWRhdGlvbn1hc3luYyB2YWxpZGF0ZShlLHIpe3ZhciBuLGk7bGV0IGE9dGhpcy5zZXJ2aWNlUmVnaXN0cnkuZ2V0U2VydmljZXMoZS51cmkpLnZhbGlkYXRpb24uRG9jdW1lbnRWYWxpZGF0b3Iscz10aGlzLmdldEJ1aWxkT3B0aW9ucyhlKS52YWxpZGF0aW9uLGw9dHlwZW9mIHM9PSJvYmplY3QiP3M6dm9pZCAwLHU9YXdhaXQgYS52YWxpZGF0ZURvY3VtZW50KGUsbCxyKTtlLmRpYWdub3N0aWNzP2UuZGlhZ25vc3RpY3MucHVzaCguLi51KTplLmRpYWdub3N0aWNzPXU7bGV0IGg9dGhpcy5idWlsZFN0YXRlLmdldChlLnVyaS50b1N0cmluZygpKTtpZihoKXsobj1oLnJlc3VsdCkhPT1udWxsJiZuIT09dm9pZCAwfHwoaC5yZXN1bHQ9e30pO2xldCBmPShpPWw/LmNhdGVnb3JpZXMpIT09bnVsbCYmaSE9PXZvaWQgMD9pOlZnLmFsbDtoLnJlc3VsdC52YWxpZGF0aW9uQ2hlY2tzP2gucmVzdWx0LnZhbGlkYXRpb25DaGVja3MucHVzaCguLi5mKTpoLnJlc3VsdC52YWxpZGF0aW9uQ2hlY2tzPVsuLi5mXX19Z2V0QnVpbGRPcHRpb25zKGUpe3ZhciByLG47cmV0dXJuKG49KHI9dGhpcy5idWlsZFN0YXRlLmdldChlLnVyaS50b1N0cmluZygpKSk9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLm9wdGlvbnMpIT09bnVsbCYmbiE9PXZvaWQgMD9uOnt9fX19KTt2YXIgZngsS009TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvcygpO1hrKCk7cmwoKTskcygpO1VjKCk7Zng9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdEluZGV4TWFuYWdlciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuc3ltYm9sSW5kZXg9bmV3IE1hcCx0aGlzLnN5bWJvbEJ5VHlwZUluZGV4PW5ldyBTMCx0aGlzLnJlZmVyZW5jZUluZGV4PW5ldyBNYXAsdGhpcy5kb2N1bWVudHM9ZS53b3Jrc3BhY2UuTGFuZ2l1bURvY3VtZW50cyx0aGlzLnNlcnZpY2VSZWdpc3RyeT1lLlNlcnZpY2VSZWdpc3RyeSx0aGlzLmFzdFJlZmxlY3Rpb249ZS5Bc3RSZWZsZWN0aW9ufWZpbmRBbGxSZWZlcmVuY2VzKGUscil7bGV0IG49VmkoZSkudXJpLGk9W107cmV0dXJuIHRoaXMucmVmZXJlbmNlSW5kZXguZm9yRWFjaChhPT57YS5mb3JFYWNoKHM9Pntkcy5lcXVhbHMocy50YXJnZXRVcmksbikmJnMudGFyZ2V0UGF0aD09PXImJmkucHVzaChzKX0pfSksdG4oaSl9YWxsRWxlbWVudHMoZSxyKXtsZXQgbj10bih0aGlzLnN5bWJvbEluZGV4LmtleXMoKSk7cmV0dXJuIHImJihuPW4uZmlsdGVyKGk9PiFyfHxyLmhhcyhpKSkpLG4ubWFwKGk9PnRoaXMuZ2V0RmlsZURlc2NyaXB0aW9ucyhpLGUpKS5mbGF0KCl9Z2V0RmlsZURlc2NyaXB0aW9ucyhlLHIpe3ZhciBuO3JldHVybiByP3RoaXMuc3ltYm9sQnlUeXBlSW5kZXguZ2V0KGUsciwoKT0+e3ZhciBhO3JldHVybigoYT10aGlzLnN5bWJvbEluZGV4LmdldChlKSkhPT1udWxsJiZhIT09dm9pZCAwP2E6W10pLmZpbHRlcihsPT50aGlzLmFzdFJlZmxlY3Rpb24uaXNTdWJ0eXBlKGwudHlwZSxyKSl9KToobj10aGlzLnN5bWJvbEluZGV4LmdldChlKSkhPT1udWxsJiZuIT09dm9pZCAwP246W119cmVtb3ZlKGUpe2xldCByPWUudG9TdHJpbmcoKTt0aGlzLnN5bWJvbEluZGV4LmRlbGV0ZShyKSx0aGlzLnN5bWJvbEJ5VHlwZUluZGV4LmNsZWFyKHIpLHRoaXMucmVmZXJlbmNlSW5kZXguZGVsZXRlKHIpfWFzeW5jIHVwZGF0ZUNvbnRlbnQoZSxyPUFyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe2xldCBpPWF3YWl0IHRoaXMuc2VydmljZVJlZ2lzdHJ5LmdldFNlcnZpY2VzKGUudXJpKS5yZWZlcmVuY2VzLlNjb3BlQ29tcHV0YXRpb24uY29tcHV0ZUV4cG9ydHMoZSxyKSxhPWUudXJpLnRvU3RyaW5nKCk7dGhpcy5zeW1ib2xJbmRleC5zZXQoYSxpKSx0aGlzLnN5bWJvbEJ5VHlwZUluZGV4LmNsZWFyKGEpfWFzeW5jIHVwZGF0ZVJlZmVyZW5jZXMoZSxyPUFyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe2xldCBpPWF3YWl0IHRoaXMuc2VydmljZVJlZ2lzdHJ5LmdldFNlcnZpY2VzKGUudXJpKS53b3Jrc3BhY2UuUmVmZXJlbmNlRGVzY3JpcHRpb25Qcm92aWRlci5jcmVhdGVEZXNjcmlwdGlvbnMoZSxyKTt0aGlzLnJlZmVyZW5jZUluZGV4LnNldChlLnVyaS50b1N0cmluZygpLGkpfWlzQWZmZWN0ZWQoZSxyKXtsZXQgbj10aGlzLnJlZmVyZW5jZUluZGV4LmdldChlLnVyaS50b1N0cmluZygpKTtyZXR1cm4gbj9uLnNvbWUoaT0+IWkubG9jYWwmJnIuaGFzKGkudGFyZ2V0VXJpLnRvU3RyaW5nKCkpKTohMX19fSk7dmFyIGR4LFFNPU0oKCk9PnsidXNlIHN0cmljdCI7cmwoKTtubCgpO1VjKCk7ZHg9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdFdvcmtzcGFjZU1hbmFnZXIiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmluaXRpYWxCdWlsZE9wdGlvbnM9e30sdGhpcy5fcmVhZHk9bmV3IGZzLHRoaXMuc2VydmljZVJlZ2lzdHJ5PWUuU2VydmljZVJlZ2lzdHJ5LHRoaXMubGFuZ2l1bURvY3VtZW50cz1lLndvcmtzcGFjZS5MYW5naXVtRG9jdW1lbnRzLHRoaXMuZG9jdW1lbnRCdWlsZGVyPWUud29ya3NwYWNlLkRvY3VtZW50QnVpbGRlcix0aGlzLmZpbGVTeXN0ZW1Qcm92aWRlcj1lLndvcmtzcGFjZS5GaWxlU3lzdGVtUHJvdmlkZXIsdGhpcy5tdXRleD1lLndvcmtzcGFjZS5Xb3Jrc3BhY2VMb2NrfWdldCByZWFkeSgpe3JldHVybiB0aGlzLl9yZWFkeS5wcm9taXNlfWluaXRpYWxpemUoZSl7dmFyIHI7dGhpcy5mb2xkZXJzPShyPWUud29ya3NwYWNlRm9sZGVycykhPT1udWxsJiZyIT09dm9pZCAwP3I6dm9pZCAwfWluaXRpYWxpemVkKGUpe3JldHVybiB0aGlzLm11dGV4LndyaXRlKHI9Pnt2YXIgbjtyZXR1cm4gdGhpcy5pbml0aWFsaXplV29ya3NwYWNlKChuPXRoaXMuZm9sZGVycykhPT1udWxsJiZuIT09dm9pZCAwP246W10scil9KX1hc3luYyBpbml0aWFsaXplV29ya3NwYWNlKGUscj1Bci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXtsZXQgbj1hd2FpdCB0aGlzLnBlcmZvcm1TdGFydHVwKGUpO2F3YWl0IEhpKHIpLGF3YWl0IHRoaXMuZG9jdW1lbnRCdWlsZGVyLmJ1aWxkKG4sdGhpcy5pbml0aWFsQnVpbGRPcHRpb25zLHIpfWFzeW5jIHBlcmZvcm1TdGFydHVwKGUpe2xldCByPXRoaXMuc2VydmljZVJlZ2lzdHJ5LmFsbC5mbGF0TWFwKGE9PmEuTGFuZ3VhZ2VNZXRhRGF0YS5maWxlRXh0ZW5zaW9ucyksbj1bXSxpPW8oYT0+e24ucHVzaChhKSx0aGlzLmxhbmdpdW1Eb2N1bWVudHMuaGFzRG9jdW1lbnQoYS51cmkpfHx0aGlzLmxhbmdpdW1Eb2N1bWVudHMuYWRkRG9jdW1lbnQoYSl9LCJjb2xsZWN0b3IiKTtyZXR1cm4gYXdhaXQgdGhpcy5sb2FkQWRkaXRpb25hbERvY3VtZW50cyhlLGkpLGF3YWl0IFByb21pc2UuYWxsKGUubWFwKGE9PlthLHRoaXMuZ2V0Um9vdEZvbGRlcihhKV0pLm1hcChhc3luYyBhPT50aGlzLnRyYXZlcnNlRm9sZGVyKC4uLmEscixpKSkpLHRoaXMuX3JlYWR5LnJlc29sdmUoKSxufWxvYWRBZGRpdGlvbmFsRG9jdW1lbnRzKGUscil7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfWdldFJvb3RGb2xkZXIoZSl7cmV0dXJuIEhzLnBhcnNlKGUudXJpKX1hc3luYyB0cmF2ZXJzZUZvbGRlcihlLHIsbixpKXtsZXQgYT1hd2FpdCB0aGlzLmZpbGVTeXN0ZW1Qcm92aWRlci5yZWFkRGlyZWN0b3J5KHIpO2F3YWl0IFByb21pc2UuYWxsKGEubWFwKGFzeW5jIHM9PntpZih0aGlzLmluY2x1ZGVFbnRyeShlLHMsbikpe2lmKHMuaXNEaXJlY3RvcnkpYXdhaXQgdGhpcy50cmF2ZXJzZUZvbGRlcihlLHMudXJpLG4saSk7ZWxzZSBpZihzLmlzRmlsZSl7bGV0IGw9YXdhaXQgdGhpcy5sYW5naXVtRG9jdW1lbnRzLmdldE9yQ3JlYXRlRG9jdW1lbnQocy51cmkpO2kobCl9fX0pKX1pbmNsdWRlRW50cnkoZSxyLG4pe2xldCBpPWRzLmJhc2VuYW1lKHIudXJpKTtpZihpLnN0YXJ0c1dpdGgoIi4iKSlyZXR1cm4hMTtpZihyLmlzRGlyZWN0b3J5KXJldHVybiBpIT09Im5vZGVfbW9kdWxlcyImJmkhPT0ib3V0IjtpZihyLmlzRmlsZSl7bGV0IGE9ZHMuZXh0bmFtZShyLnVyaSk7cmV0dXJuIG4uaW5jbHVkZXMoYSl9cmV0dXJuITF9fX0pO2Z1bmN0aW9uIHljZSh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmKHQubGVuZ3RoPT09MHx8Im5hbWUiaW4gdFswXSl9ZnVuY3Rpb24gSk0odCl7cmV0dXJuIHQmJiJtb2RlcyJpbiB0JiYiZGVmYXVsdE1vZGUiaW4gdH1mdW5jdGlvbiBaTSh0KXtyZXR1cm4heWNlKHQpJiYhSk0odCl9dmFyIHB4LGVJPU0oKCk9PnsidXNlIHN0cmljdCI7ZzAoKTtweD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0TGV4ZXIiKX1jb25zdHJ1Y3RvcihlKXtsZXQgcj1lLnBhcnNlci5Ub2tlbkJ1aWxkZXIuYnVpbGRUb2tlbnMoZS5HcmFtbWFyLHtjYXNlSW5zZW5zaXRpdmU6ZS5MYW5ndWFnZU1ldGFEYXRhLmNhc2VJbnNlbnNpdGl2ZX0pO3RoaXMudG9rZW5UeXBlcz10aGlzLnRvVG9rZW5UeXBlRGljdGlvbmFyeShyKTtsZXQgbj1aTShyKT9PYmplY3QudmFsdWVzKHIpOnI7dGhpcy5jaGV2cm90YWluTGV4ZXI9bmV3IGNpKG4se3Bvc2l0aW9uVHJhY2tpbmc6ImZ1bGwifSl9Z2V0IGRlZmluaXRpb24oKXtyZXR1cm4gdGhpcy50b2tlblR5cGVzfXRva2VuaXplKGUpe3ZhciByO2xldCBuPXRoaXMuY2hldnJvdGFpbkxleGVyLnRva2VuaXplKGUpO3JldHVybnt0b2tlbnM6bi50b2tlbnMsZXJyb3JzOm4uZXJyb3JzLGhpZGRlbjoocj1uLmdyb3Vwcy5oaWRkZW4pIT09bnVsbCYmciE9PXZvaWQgMD9yOltdfX10b1Rva2VuVHlwZURpY3Rpb25hcnkoZSl7aWYoWk0oZSkpcmV0dXJuIGU7bGV0IHI9Sk0oZSk/T2JqZWN0LnZhbHVlcyhlLm1vZGVzKS5mbGF0KCk6ZSxuPXt9O3JldHVybiByLmZvckVhY2goaT0+bltpLm5hbWVdPWkpLG59fTtvKHljZSwiaXNUb2tlblR5cGVBcnJheSIpO28oSk0sImlzSU11bHRpTW9kZUxleGVyRGVmaW5pdGlvbiIpO28oWk0sImlzVG9rZW5UeXBlRGljdGlvbmFyeSIpfSk7ZnVuY3Rpb24gbkkodCxlLHIpe2xldCBuLGk7dHlwZW9mIHQ9PSJzdHJpbmciPyhpPWUsbj1yKTooaT10LnJhbmdlLnN0YXJ0LG49ZSksaXx8KGk9WHIuY3JlYXRlKDAsMCkpO2xldCBhPWJjZSh0KSxzPWFJKG4pLGw9cHplKHtsaW5lczphLHBvc2l0aW9uOmksb3B0aW9uczpzfSk7cmV0dXJuIHh6ZSh7aW5kZXg6MCx0b2tlbnM6bCxwb3NpdGlvbjppfSl9ZnVuY3Rpb24gaUkodCxlKXtsZXQgcj1hSShlKSxuPWJjZSh0KTtpZihuLmxlbmd0aD09PTApcmV0dXJuITE7bGV0IGk9blswXSxhPW5bbi5sZW5ndGgtMV0scz1yLnN0YXJ0LGw9ci5lbmQ7cmV0dXJuISFzPy5leGVjKGkpJiYhIWw/LmV4ZWMoYSl9ZnVuY3Rpb24gYmNlKHQpe2xldCBlPSIiO3JldHVybiB0eXBlb2YgdD09InN0cmluZyI/ZT10OmU9dC50ZXh0LGUuc3BsaXQoWE4pfWZ1bmN0aW9uIHB6ZSh0KXt2YXIgZSxyLG47bGV0IGk9W10sYT10LnBvc2l0aW9uLmxpbmUscz10LnBvc2l0aW9uLmNoYXJhY3Rlcjtmb3IobGV0IGw9MDtsPHQubGluZXMubGVuZ3RoO2wrKyl7bGV0IHU9bD09PTAsaD1sPT09dC5saW5lcy5sZW5ndGgtMSxmPXQubGluZXNbbF0sZD0wO2lmKHUmJnQub3B0aW9ucy5zdGFydCl7bGV0IG09KGU9dC5vcHRpb25zLnN0YXJ0KT09PW51bGx8fGU9PT12b2lkIDA/dm9pZCAwOmUuZXhlYyhmKTttJiYoZD1tLmluZGV4K21bMF0ubGVuZ3RoKX1lbHNle2xldCBtPShyPXQub3B0aW9ucy5saW5lKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIuZXhlYyhmKTttJiYoZD1tLmluZGV4K21bMF0ubGVuZ3RoKX1pZihoKXtsZXQgbT0obj10Lm9wdGlvbnMuZW5kKT09PW51bGx8fG49PT12b2lkIDA/dm9pZCAwOm4uZXhlYyhmKTttJiYoZj1mLnN1YnN0cmluZygwLG0uaW5kZXgpKX1pZihmPWYuc3Vic3RyaW5nKDAsdnplKGYpKSxySShmLGQpPj1mLmxlbmd0aCl7aWYoaS5sZW5ndGg+MCl7bGV0IG09WHIuY3JlYXRlKGEscyk7aS5wdXNoKHt0eXBlOiJicmVhayIsY29udGVudDoiIixyYW5nZTpOci5jcmVhdGUobSxtKX0pfX1lbHNle3ZjZS5sYXN0SW5kZXg9ZDtsZXQgbT12Y2UuZXhlYyhmKTtpZihtKXtsZXQgZz1tWzBdLHk9bVsxXSx2PVhyLmNyZWF0ZShhLHMrZCkseD1Yci5jcmVhdGUoYSxzK2QrZy5sZW5ndGgpO2kucHVzaCh7dHlwZToidGFnIixjb250ZW50OnkscmFuZ2U6TnIuY3JlYXRlKHYseCl9KSxkKz1nLmxlbmd0aCxkPXJJKGYsZCl9aWYoZDxmLmxlbmd0aCl7bGV0IGc9Zi5zdWJzdHJpbmcoZCkseT1BcnJheS5mcm9tKGcubWF0Y2hBbGwoZHplKSk7aS5wdXNoKC4uLm16ZSh5LGcsYSxzK2QpKX19YSsrLHM9MH1yZXR1cm4gaS5sZW5ndGg+MCYmaVtpLmxlbmd0aC0xXS50eXBlPT09ImJyZWFrIj9pLnNsaWNlKDAsLTEpOml9ZnVuY3Rpb24gbXplKHQsZSxyLG4pe2xldCBpPVtdO2lmKHQubGVuZ3RoPT09MCl7bGV0IGE9WHIuY3JlYXRlKHIsbikscz1Yci5jcmVhdGUocixuK2UubGVuZ3RoKTtpLnB1c2goe3R5cGU6InRleHQiLGNvbnRlbnQ6ZSxyYW5nZTpOci5jcmVhdGUoYSxzKX0pfWVsc2V7bGV0IGE9MDtmb3IobGV0IGwgb2YgdCl7bGV0IHU9bC5pbmRleCxoPWUuc3Vic3RyaW5nKGEsdSk7aC5sZW5ndGg+MCYmaS5wdXNoKHt0eXBlOiJ0ZXh0Iixjb250ZW50OmUuc3Vic3RyaW5nKGEsdSkscmFuZ2U6TnIuY3JlYXRlKFhyLmNyZWF0ZShyLGErbiksWHIuY3JlYXRlKHIsdStuKSl9KTtsZXQgZj1oLmxlbmd0aCsxLGQ9bFsxXTtpZihpLnB1c2goe3R5cGU6ImlubGluZS10YWciLGNvbnRlbnQ6ZCxyYW5nZTpOci5jcmVhdGUoWHIuY3JlYXRlKHIsYStmK24pLFhyLmNyZWF0ZShyLGErZitkLmxlbmd0aCtuKSl9KSxmKz1kLmxlbmd0aCxsLmxlbmd0aD09PTQpe2YrPWxbMl0ubGVuZ3RoO2xldCBwPWxbM107aS5wdXNoKHt0eXBlOiJ0ZXh0Iixjb250ZW50OnAscmFuZ2U6TnIuY3JlYXRlKFhyLmNyZWF0ZShyLGErZituKSxYci5jcmVhdGUocixhK2YrcC5sZW5ndGgrbikpfSl9ZWxzZSBpLnB1c2goe3R5cGU6InRleHQiLGNvbnRlbnQ6IiIscmFuZ2U6TnIuY3JlYXRlKFhyLmNyZWF0ZShyLGErZituKSxYci5jcmVhdGUocixhK2YrbikpfSk7YT11K2xbMF0ubGVuZ3RofWxldCBzPWUuc3Vic3RyaW5nKGEpO3MubGVuZ3RoPjAmJmkucHVzaCh7dHlwZToidGV4dCIsY29udGVudDpzLHJhbmdlOk5yLmNyZWF0ZShYci5jcmVhdGUocixhK24pLFhyLmNyZWF0ZShyLGErbitzLmxlbmd0aCkpfSl9cmV0dXJuIGl9ZnVuY3Rpb24gckkodCxlKXtsZXQgcj10LnN1YnN0cmluZyhlKS5tYXRjaChnemUpO3JldHVybiByP2Urci5pbmRleDp0Lmxlbmd0aH1mdW5jdGlvbiB2emUodCl7bGV0IGU9dC5tYXRjaCh5emUpO2lmKGUmJnR5cGVvZiBlLmluZGV4PT0ibnVtYmVyIilyZXR1cm4gZS5pbmRleH1mdW5jdGlvbiB4emUodCl7dmFyIGUscixuLGk7bGV0IGE9WHIuY3JlYXRlKHQucG9zaXRpb24ubGluZSx0LnBvc2l0aW9uLmNoYXJhY3Rlcik7aWYodC50b2tlbnMubGVuZ3RoPT09MClyZXR1cm4gbmV3IFprKFtdLE5yLmNyZWF0ZShhLGEpKTtsZXQgcz1bXTtmb3IoO3QuaW5kZXg8dC50b2tlbnMubGVuZ3RoOyl7bGV0IGg9YnplKHQsc1tzLmxlbmd0aC0xXSk7aCYmcy5wdXNoKGgpfWxldCBsPShyPShlPXNbMF0pPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS5yYW5nZS5zdGFydCkhPT1udWxsJiZyIT09dm9pZCAwP3I6YSx1PShpPShuPXNbcy5sZW5ndGgtMV0pPT09bnVsbHx8bj09PXZvaWQgMD92b2lkIDA6bi5yYW5nZS5lbmQpIT09bnVsbCYmaSE9PXZvaWQgMD9pOmE7cmV0dXJuIG5ldyBaayhzLE5yLmNyZWF0ZShsLHUpKX1mdW5jdGlvbiBiemUodCxlKXtsZXQgcj10LnRva2Vuc1t0LmluZGV4XTtpZihyLnR5cGU9PT0idGFnIilyZXR1cm4gVGNlKHQsITEpO2lmKHIudHlwZT09PSJ0ZXh0Inx8ci50eXBlPT09ImlubGluZS10YWciKXJldHVybiB3Y2UodCk7d3plKHIsZSksdC5pbmRleCsrfWZ1bmN0aW9uIHd6ZSh0LGUpe2lmKGUpe2xldCByPW5ldyBKaygiIix0LnJhbmdlKTsiaW5saW5lcyJpbiBlP2UuaW5saW5lcy5wdXNoKHIpOmUuY29udGVudC5pbmxpbmVzLnB1c2gocil9fWZ1bmN0aW9uIHdjZSh0KXtsZXQgZT10LnRva2Vuc1t0LmluZGV4XSxyPWUsbj1lLGk9W107Zm9yKDtlJiZlLnR5cGUhPT0iYnJlYWsiJiZlLnR5cGUhPT0idGFnIjspaS5wdXNoKFR6ZSh0KSksbj1lLGU9dC50b2tlbnNbdC5pbmRleF07cmV0dXJuIG5ldyBneChpLE5yLmNyZWF0ZShyLnJhbmdlLnN0YXJ0LG4ucmFuZ2UuZW5kKSl9ZnVuY3Rpb24gVHplKHQpe3JldHVybiB0LnRva2Vuc1t0LmluZGV4XS50eXBlPT09ImlubGluZS10YWciP1RjZSh0LCEwKTprY2UodCl9ZnVuY3Rpb24gVGNlKHQsZSl7bGV0IHI9dC50b2tlbnNbdC5pbmRleCsrXSxuPXIuY29udGVudC5zdWJzdHJpbmcoMSksaT10LnRva2Vuc1t0LmluZGV4XTtpZihpPy50eXBlPT09InRleHQiKWlmKGUpe2xldCBhPWtjZSh0KTtyZXR1cm4gbmV3IG14KG4sbmV3IGd4KFthXSxhLnJhbmdlKSxlLE5yLmNyZWF0ZShyLnJhbmdlLnN0YXJ0LGEucmFuZ2UuZW5kKSl9ZWxzZXtsZXQgYT13Y2UodCk7cmV0dXJuIG5ldyBteChuLGEsZSxOci5jcmVhdGUoci5yYW5nZS5zdGFydCxhLnJhbmdlLmVuZCkpfWVsc2V7bGV0IGE9ci5yYW5nZTtyZXR1cm4gbmV3IG14KG4sbmV3IGd4KFtdLGEpLGUsYSl9fWZ1bmN0aW9uIGtjZSh0KXtsZXQgZT10LnRva2Vuc1t0LmluZGV4KytdO3JldHVybiBuZXcgSmsoZS5jb250ZW50LGUucmFuZ2UpfWZ1bmN0aW9uIGFJKHQpe2lmKCF0KXJldHVybiBhSSh7c3RhcnQ6Ii8qKiIsZW5kOiIqLyIsbGluZToiKiJ9KTtsZXR7c3RhcnQ6ZSxlbmQ6cixsaW5lOm59PXQ7cmV0dXJue3N0YXJ0OnRJKGUsITApLGVuZDp0SShyLCExKSxsaW5lOnRJKG4sITApfX1mdW5jdGlvbiB0SSh0LGUpe2lmKHR5cGVvZiB0PT0ic3RyaW5nInx8dHlwZW9mIHQ9PSJvYmplY3QiKXtsZXQgcj10eXBlb2YgdD09InN0cmluZyI/bzAodCk6dC5zb3VyY2U7cmV0dXJuIGU/bmV3IFJlZ0V4cChgXlxccyoke3J9YCk6bmV3IFJlZ0V4cChgXFxzKiR7cn1cXHMqJGApfWVsc2UgcmV0dXJuIHR9ZnVuY3Rpb24ga3plKHQsZSxyKXt2YXIgbixpO2lmKHQ9PT0ibGlua3BsYWluInx8dD09PSJsaW5rY29kZSJ8fHQ9PT0ibGluayIpe2xldCBhPWUuaW5kZXhPZigiICIpLHM9ZTtpZihhPjApe2xldCB1PXJJKGUsYSk7cz1lLnN1YnN0cmluZyh1KSxlPWUuc3Vic3RyaW5nKDAsYSl9cmV0dXJuKHQ9PT0ibGlua2NvZGUifHx0PT09ImxpbmsiJiZyLmxpbms9PT0iY29kZSIpJiYocz1gXGAke3N9XGBgKSwoaT0obj1yLnJlbmRlckxpbmspPT09bnVsbHx8bj09PXZvaWQgMD92b2lkIDA6bi5jYWxsKHIsZSxzKSkhPT1udWxsJiZpIT09dm9pZCAwP2k6RXplKGUscyl9fWZ1bmN0aW9uIEV6ZSh0LGUpe3RyeXtyZXR1cm4gSHMucGFyc2UodCwhMCksYFske2V9XSgke3R9KWB9Y2F0Y2h7cmV0dXJuIHR9fWZ1bmN0aW9uIHhjZSh0KXtyZXR1cm4gdC5lbmRzV2l0aChgCmApP2AKYDpgCgpgfXZhciB2Y2UsZHplLGd6ZSx5emUsWmssbXgsZ3gsSmssc0k9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtmTSgpO2lnKCk7VWMoKTtvKG5JLCJwYXJzZUpTRG9jIik7byhpSSwiaXNKU0RvYyIpO28oYmNlLCJnZXRMaW5lcyIpO3ZjZT0vXHMqKEAoW1xwe0x9XVtccHtMfVxwe059XSopPykvdXksZHplPS9ceyhAW1xwe0x9XVtccHtMfVxwe059XSopKFxzKikoW15cclxufV0rKT9cfS9ndTtvKHB6ZSwidG9rZW5pemUiKTtvKG16ZSwiYnVpbGRJbmxpbmVUb2tlbnMiKTtnemU9L1xTLyx5emU9L1xzKiQvO28ockksInNraXBXaGl0ZXNwYWNlIik7byh2emUsImxhc3RDaGFyYWN0ZXIiKTtvKHh6ZSwicGFyc2VKU0RvY0NvbW1lbnQiKTtvKGJ6ZSwicGFyc2VKU0RvY0VsZW1lbnQiKTtvKHd6ZSwiYXBwZW5kRW1wdHlMaW5lIik7byh3Y2UsInBhcnNlSlNEb2NUZXh0Iik7byhUemUsInBhcnNlSlNEb2NJbmxpbmUiKTtvKFRjZSwicGFyc2VKU0RvY1RhZyIpO28oa2NlLCJwYXJzZUpTRG9jTGluZSIpO28oYUksIm5vcm1hbGl6ZU9wdGlvbnMiKTtvKHRJLCJub3JtYWxpemVPcHRpb24iKTtaaz1jbGFzc3tzdGF0aWN7byh0aGlzLCJKU0RvY0NvbW1lbnRJbXBsIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLmVsZW1lbnRzPWUsdGhpcy5yYW5nZT1yfWdldFRhZyhlKXtyZXR1cm4gdGhpcy5nZXRBbGxUYWdzKCkuZmluZChyPT5yLm5hbWU9PT1lKX1nZXRUYWdzKGUpe3JldHVybiB0aGlzLmdldEFsbFRhZ3MoKS5maWx0ZXIocj0+ci5uYW1lPT09ZSl9Z2V0QWxsVGFncygpe3JldHVybiB0aGlzLmVsZW1lbnRzLmZpbHRlcihlPT4ibmFtZSJpbiBlKX10b1N0cmluZygpe2xldCBlPSIiO2ZvcihsZXQgciBvZiB0aGlzLmVsZW1lbnRzKWlmKGUubGVuZ3RoPT09MCllPXIudG9TdHJpbmcoKTtlbHNle2xldCBuPXIudG9TdHJpbmcoKTtlKz14Y2UoZSkrbn1yZXR1cm4gZS50cmltKCl9dG9NYXJrZG93bihlKXtsZXQgcj0iIjtmb3IobGV0IG4gb2YgdGhpcy5lbGVtZW50cylpZihyLmxlbmd0aD09PTApcj1uLnRvTWFya2Rvd24oZSk7ZWxzZXtsZXQgaT1uLnRvTWFya2Rvd24oZSk7cis9eGNlKHIpK2l9cmV0dXJuIHIudHJpbSgpfX0sbXg9Y2xhc3N7c3RhdGlje28odGhpcywiSlNEb2NUYWdJbXBsIil9Y29uc3RydWN0b3IoZSxyLG4saSl7dGhpcy5uYW1lPWUsdGhpcy5jb250ZW50PXIsdGhpcy5pbmxpbmU9bix0aGlzLnJhbmdlPWl9dG9TdHJpbmcoKXtsZXQgZT1gQCR7dGhpcy5uYW1lfWAscj10aGlzLmNvbnRlbnQudG9TdHJpbmcoKTtyZXR1cm4gdGhpcy5jb250ZW50LmlubGluZXMubGVuZ3RoPT09MT9lPWAke2V9ICR7cn1gOnRoaXMuY29udGVudC5pbmxpbmVzLmxlbmd0aD4xJiYoZT1gJHtlfQoke3J9YCksdGhpcy5pbmxpbmU/YHske2V9fWA6ZX10b01hcmtkb3duKGUpe3ZhciByLG47cmV0dXJuKG49KHI9ZT8ucmVuZGVyVGFnKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIuY2FsbChlLHRoaXMpKSE9PW51bGwmJm4hPT12b2lkIDA/bjp0aGlzLnRvTWFya2Rvd25EZWZhdWx0KGUpfXRvTWFya2Rvd25EZWZhdWx0KGUpe2xldCByPXRoaXMuY29udGVudC50b01hcmtkb3duKGUpO2lmKHRoaXMuaW5saW5lKXtsZXQgYT1remUodGhpcy5uYW1lLHIsZT8/e30pO2lmKHR5cGVvZiBhPT0ic3RyaW5nIilyZXR1cm4gYX1sZXQgbj0iIjtlPy50YWc9PT0iaXRhbGljInx8ZT8udGFnPT09dm9pZCAwP249IioiOmU/LnRhZz09PSJib2xkIj9uPSIqKiI6ZT8udGFnPT09ImJvbGQtaXRhbGljIiYmKG49IioqKiIpO2xldCBpPWAke259QCR7dGhpcy5uYW1lfSR7bn1gO3JldHVybiB0aGlzLmNvbnRlbnQuaW5saW5lcy5sZW5ndGg9PT0xP2k9YCR7aX0gXHUyMDE0ICR7cn1gOnRoaXMuY29udGVudC5pbmxpbmVzLmxlbmd0aD4xJiYoaT1gJHtpfQoke3J9YCksdGhpcy5pbmxpbmU/YHske2l9fWA6aX19O28oa3plLCJyZW5kZXJJbmxpbmVUYWciKTtvKEV6ZSwicmVuZGVyTGlua0RlZmF1bHQiKTtneD1jbGFzc3tzdGF0aWN7byh0aGlzLCJKU0RvY1RleHRJbXBsIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLmlubGluZXM9ZSx0aGlzLnJhbmdlPXJ9dG9TdHJpbmcoKXtsZXQgZT0iIjtmb3IobGV0IHI9MDtyPHRoaXMuaW5saW5lcy5sZW5ndGg7cisrKXtsZXQgbj10aGlzLmlubGluZXNbcl0saT10aGlzLmlubGluZXNbcisxXTtlKz1uLnRvU3RyaW5nKCksaSYmaS5yYW5nZS5zdGFydC5saW5lPm4ucmFuZ2Uuc3RhcnQubGluZSYmKGUrPWAKYCl9cmV0dXJuIGV9dG9NYXJrZG93bihlKXtsZXQgcj0iIjtmb3IobGV0IG49MDtuPHRoaXMuaW5saW5lcy5sZW5ndGg7bisrKXtsZXQgaT10aGlzLmlubGluZXNbbl0sYT10aGlzLmlubGluZXNbbisxXTtyKz1pLnRvTWFya2Rvd24oZSksYSYmYS5yYW5nZS5zdGFydC5saW5lPmkucmFuZ2Uuc3RhcnQubGluZSYmKHIrPWAKYCl9cmV0dXJuIHJ9fSxKaz1jbGFzc3tzdGF0aWN7byh0aGlzLCJKU0RvY0xpbmVJbXBsIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLnRleHQ9ZSx0aGlzLnJhbmdlPXJ9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy50ZXh0fXRvTWFya2Rvd24oKXtyZXR1cm4gdGhpcy50ZXh0fX07byh4Y2UsImZpbGxOZXdsaW5lcyIpfSk7dmFyIHl4LG9JPU0oKCk9PnsidXNlIHN0cmljdCI7b3MoKTtzSSgpO3l4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkpTRG9jRG9jdW1lbnRhdGlvblByb3ZpZGVyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5pbmRleE1hbmFnZXI9ZS5zaGFyZWQud29ya3NwYWNlLkluZGV4TWFuYWdlcix0aGlzLmNvbW1lbnRQcm92aWRlcj1lLmRvY3VtZW50YXRpb24uQ29tbWVudFByb3ZpZGVyfWdldERvY3VtZW50YXRpb24oZSl7bGV0IHI9dGhpcy5jb21tZW50UHJvdmlkZXIuZ2V0Q29tbWVudChlKTtpZihyJiZpSShyKSlyZXR1cm4gbkkocikudG9NYXJrZG93bih7cmVuZGVyTGluazpvKChpLGEpPT50aGlzLmRvY3VtZW50YXRpb25MaW5rUmVuZGVyZXIoZSxpLGEpLCJyZW5kZXJMaW5rIikscmVuZGVyVGFnOm8oaT0+dGhpcy5kb2N1bWVudGF0aW9uVGFnUmVuZGVyZXIoZSxpKSwicmVuZGVyVGFnIil9KX1kb2N1bWVudGF0aW9uTGlua1JlbmRlcmVyKGUscixuKXt2YXIgaTtsZXQgYT0oaT10aGlzLmZpbmROYW1lSW5QcmVjb21wdXRlZFNjb3BlcyhlLHIpKSE9PW51bGwmJmkhPT12b2lkIDA/aTp0aGlzLmZpbmROYW1lSW5HbG9iYWxTY29wZShlLHIpO2lmKGEmJmEubmFtZVNlZ21lbnQpe2xldCBzPWEubmFtZVNlZ21lbnQucmFuZ2Uuc3RhcnQubGluZSsxLGw9YS5uYW1lU2VnbWVudC5yYW5nZS5zdGFydC5jaGFyYWN0ZXIrMSx1PWEuZG9jdW1lbnRVcmkud2l0aCh7ZnJhZ21lbnQ6YEwke3N9LCR7bH1gfSk7cmV0dXJuYFske259XSgke3UudG9TdHJpbmcoKX0pYH1lbHNlIHJldHVybn1kb2N1bWVudGF0aW9uVGFnUmVuZGVyZXIoZSxyKXt9ZmluZE5hbWVJblByZWNvbXB1dGVkU2NvcGVzKGUscil7bGV0IGk9VmkoZSkucHJlY29tcHV0ZWRTY29wZXM7aWYoIWkpcmV0dXJuO2xldCBhPWU7ZG97bGV0IGw9aS5nZXQoYSkuZmluZCh1PT51Lm5hbWU9PT1yKTtpZihsKXJldHVybiBsO2E9YS4kY29udGFpbmVyfXdoaWxlKGEpfWZpbmROYW1lSW5HbG9iYWxTY29wZShlLHIpe3JldHVybiB0aGlzLmluZGV4TWFuYWdlci5hbGxFbGVtZW50cygpLmZpbmQoaT0+aS5uYW1lPT09cil9fX0pO3ZhciB2eCxsST1NKCgpPT57InVzZSBzdHJpY3QiO2prKCk7emwoKTt2eD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0Q29tbWVudFByb3ZpZGVyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5ncmFtbWFyQ29uZmlnPSgpPT5lLnBhcnNlci5HcmFtbWFyQ29uZmlnfWdldENvbW1lbnQoZSl7dmFyIHI7cmV0dXJuIFZNKGUpP2UuJGNvbW1lbnQ6KHI9ekQoZS4kY3N0Tm9kZSx0aGlzLmdyYW1tYXJDb25maWcoKS5tdWx0aWxpbmVDb21tZW50UnVsZXMpKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIudGV4dH19fSk7dmFyIHVpPXt9O3ZhciBjST1NKCgpPT57InVzZSBzdHJpY3QiO1NyKHVpLEppKExNKCksMSkpfSk7dmFyIHh4LHVJLGhJLGZJPU0oKCk9PnsidXNlIHN0cmljdCI7bmwoKTtjSSgpO3h4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRBc3luY1BhcnNlciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuc3luY1BhcnNlcj1lLnBhcnNlci5MYW5naXVtUGFyc2VyfXBhcnNlKGUpe3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5zeW5jUGFyc2VyLnBhcnNlKGUpKX19LHVJPWNsYXNze3N0YXRpY3tvKHRoaXMsIkFic3RyYWN0VGhyZWFkZWRBc3luY1BhcnNlciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMudGhyZWFkQ291bnQ9OCx0aGlzLnRlcm1pbmF0aW9uRGVsYXk9MjAwLHRoaXMud29ya2VyUG9vbD1bXSx0aGlzLnF1ZXVlPVtdLHRoaXMuaHlkcmF0b3I9ZS5zZXJpYWxpemVyLkh5ZHJhdG9yfWluaXRpYWxpemVXb3JrZXJzKCl7Zm9yKDt0aGlzLndvcmtlclBvb2wubGVuZ3RoPHRoaXMudGhyZWFkQ291bnQ7KXtsZXQgZT10aGlzLmNyZWF0ZVdvcmtlcigpO2Uub25SZWFkeSgoKT0+e2lmKHRoaXMucXVldWUubGVuZ3RoPjApe2xldCByPXRoaXMucXVldWUuc2hpZnQoKTtyJiYoZS5sb2NrKCksci5yZXNvbHZlKGUpKX19KSx0aGlzLndvcmtlclBvb2wucHVzaChlKX19YXN5bmMgcGFyc2UoZSxyKXtsZXQgbj1hd2FpdCB0aGlzLmFjcXVpcmVQYXJzZXJXb3JrZXIociksaT1uZXcgZnMsYSxzPXIub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKCk9PnthPXNldFRpbWVvdXQoKCk9Pnt0aGlzLnRlcm1pbmF0ZVdvcmtlcihuKX0sdGhpcy50ZXJtaW5hdGlvbkRlbGF5KX0pO3JldHVybiBuLnBhcnNlKGUpLnRoZW4obD0+e2xldCB1PXRoaXMuaHlkcmF0b3IuaHlkcmF0ZShsKTtpLnJlc29sdmUodSl9KS5jYXRjaChsPT57aS5yZWplY3QobCl9KS5maW5hbGx5KCgpPT57cy5kaXNwb3NlKCksY2xlYXJUaW1lb3V0KGEpfSksaS5wcm9taXNlfXRlcm1pbmF0ZVdvcmtlcihlKXtlLnRlcm1pbmF0ZSgpO2xldCByPXRoaXMud29ya2VyUG9vbC5pbmRleE9mKGUpO3I+PTAmJnRoaXMud29ya2VyUG9vbC5zcGxpY2UociwxKX1hc3luYyBhY3F1aXJlUGFyc2VyV29ya2VyKGUpe3RoaXMuaW5pdGlhbGl6ZVdvcmtlcnMoKTtmb3IobGV0IG4gb2YgdGhpcy53b3JrZXJQb29sKWlmKG4ucmVhZHkpcmV0dXJuIG4ubG9jaygpLG47bGV0IHI9bmV3IGZzO3JldHVybiBlLm9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKCgpPT57bGV0IG49dGhpcy5xdWV1ZS5pbmRleE9mKHIpO24+PTAmJnRoaXMucXVldWUuc3BsaWNlKG4sMSksci5yZWplY3QoVmMpfSksdGhpcy5xdWV1ZS5wdXNoKHIpLHIucHJvbWlzZX19LGhJPWNsYXNze3N0YXRpY3tvKHRoaXMsIlBhcnNlcldvcmtlciIpfWdldCByZWFkeSgpe3JldHVybiB0aGlzLl9yZWFkeX1nZXQgb25SZWFkeSgpe3JldHVybiB0aGlzLm9uUmVhZHlFbWl0dGVyLmV2ZW50fWNvbnN0cnVjdG9yKGUscixuLGkpe3RoaXMub25SZWFkeUVtaXR0ZXI9bmV3IHVpLkVtaXR0ZXIsdGhpcy5kZWZlcnJlZD1uZXcgZnMsdGhpcy5fcmVhZHk9ITAsdGhpcy5fcGFyc2luZz0hMSx0aGlzLnNlbmRNZXNzYWdlPWUsdGhpcy5fdGVybWluYXRlPWkscihhPT57bGV0IHM9YTt0aGlzLmRlZmVycmVkLnJlc29sdmUocyksdGhpcy51bmxvY2soKX0pLG4oYT0+e3RoaXMuZGVmZXJyZWQucmVqZWN0KGEpLHRoaXMudW5sb2NrKCl9KX10ZXJtaW5hdGUoKXt0aGlzLmRlZmVycmVkLnJlamVjdChWYyksdGhpcy5fdGVybWluYXRlKCl9bG9jaygpe3RoaXMuX3JlYWR5PSExfXVubG9jaygpe3RoaXMuX3BhcnNpbmc9ITEsdGhpcy5fcmVhZHk9ITAsdGhpcy5vblJlYWR5RW1pdHRlci5maXJlKCl9cGFyc2UoZSl7aWYodGhpcy5fcGFyc2luZyl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlciB3b3JrZXIgaXMgYnVzeSIpO3JldHVybiB0aGlzLl9wYXJzaW5nPSEwLHRoaXMuZGVmZXJyZWQ9bmV3IGZzLHRoaXMuc2VuZE1lc3NhZ2UoZSksdGhpcy5kZWZlcnJlZC5wcm9taXNlfX19KTt2YXIgYngsZEk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtybCgpO25sKCk7Yng9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdFdvcmtzcGFjZUxvY2siKX1jb25zdHJ1Y3Rvcigpe3RoaXMucHJldmlvdXNUb2tlblNvdXJjZT1uZXcgQXIuQ2FuY2VsbGF0aW9uVG9rZW5Tb3VyY2UsdGhpcy53cml0ZVF1ZXVlPVtdLHRoaXMucmVhZFF1ZXVlPVtdLHRoaXMuZG9uZT0hMH13cml0ZShlKXt0aGlzLmNhbmNlbFdyaXRlKCk7bGV0IHI9bmV3IEFyLkNhbmNlbGxhdGlvblRva2VuU291cmNlO3JldHVybiB0aGlzLnByZXZpb3VzVG9rZW5Tb3VyY2U9cix0aGlzLmVucXVldWUodGhpcy53cml0ZVF1ZXVlLGUsci50b2tlbil9cmVhZChlKXtyZXR1cm4gdGhpcy5lbnF1ZXVlKHRoaXMucmVhZFF1ZXVlLGUpfWVucXVldWUoZSxyLG4pe2xldCBpPW5ldyBmcyxhPXthY3Rpb246cixkZWZlcnJlZDppLGNhbmNlbGxhdGlvblRva2VuOm4/P0FyLkNhbmNlbGxhdGlvblRva2VuLk5vbmV9O3JldHVybiBlLnB1c2goYSksdGhpcy5wZXJmb3JtTmV4dE9wZXJhdGlvbigpLGkucHJvbWlzZX1hc3luYyBwZXJmb3JtTmV4dE9wZXJhdGlvbigpe2lmKCF0aGlzLmRvbmUpcmV0dXJuO2xldCBlPVtdO2lmKHRoaXMud3JpdGVRdWV1ZS5sZW5ndGg+MCllLnB1c2godGhpcy53cml0ZVF1ZXVlLnNoaWZ0KCkpO2Vsc2UgaWYodGhpcy5yZWFkUXVldWUubGVuZ3RoPjApZS5wdXNoKC4uLnRoaXMucmVhZFF1ZXVlLnNwbGljZSgwLHRoaXMucmVhZFF1ZXVlLmxlbmd0aCkpO2Vsc2UgcmV0dXJuO3RoaXMuZG9uZT0hMSxhd2FpdCBQcm9taXNlLmFsbChlLm1hcChhc3luYyh7YWN0aW9uOnIsZGVmZXJyZWQ6bixjYW5jZWxsYXRpb25Ub2tlbjppfSk9Pnt0cnl7bGV0IGE9YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+cihpKSk7bi5yZXNvbHZlKGEpfWNhdGNoKGEpe21mKGEpP24ucmVzb2x2ZSh2b2lkIDApOm4ucmVqZWN0KGEpfX0pKSx0aGlzLmRvbmU9ITAsdGhpcy5wZXJmb3JtTmV4dE9wZXJhdGlvbigpfWNhbmNlbFdyaXRlKCl7dGhpcy5wcmV2aW91c1Rva2VuU291cmNlLmNhbmNlbCgpfX19KTt2YXIgd3gscEk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtGaygpO0JjKCk7Wm8oKTtvcygpO0ZnKCk7emwoKTt3eD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0SHlkcmF0b3IiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmdyYW1tYXJFbGVtZW50SWRNYXA9bmV3IEUwLHRoaXMudG9rZW5UeXBlSWRNYXA9bmV3IEUwLHRoaXMuZ3JhbW1hcj1lLkdyYW1tYXIsdGhpcy5sZXhlcj1lLnBhcnNlci5MZXhlcix0aGlzLmxpbmtlcj1lLnJlZmVyZW5jZXMuTGlua2VyfWRlaHlkcmF0ZShlKXtyZXR1cm57bGV4ZXJFcnJvcnM6ZS5sZXhlckVycm9ycy5tYXAocj0+T2JqZWN0LmFzc2lnbih7fSxyKSkscGFyc2VyRXJyb3JzOmUucGFyc2VyRXJyb3JzLm1hcChyPT5PYmplY3QuYXNzaWduKHt9LHIpKSx2YWx1ZTp0aGlzLmRlaHlkcmF0ZUFzdE5vZGUoZS52YWx1ZSx0aGlzLmNyZWF0ZURlaHlyYXRpb25Db250ZXh0KGUudmFsdWUpKX19Y3JlYXRlRGVoeXJhdGlvbkNvbnRleHQoZSl7bGV0IHI9bmV3IE1hcCxuPW5ldyBNYXA7Zm9yKGxldCBpIG9mIHRsKGUpKXIuc2V0KGkse30pO2lmKGUuJGNzdE5vZGUpZm9yKGxldCBpIG9mIEpkKGUuJGNzdE5vZGUpKW4uc2V0KGkse30pO3JldHVybnthc3ROb2RlczpyLGNzdE5vZGVzOm59fWRlaHlkcmF0ZUFzdE5vZGUoZSxyKXtsZXQgbj1yLmFzdE5vZGVzLmdldChlKTtuLiR0eXBlPWUuJHR5cGUsbi4kY29udGFpbmVySW5kZXg9ZS4kY29udGFpbmVySW5kZXgsbi4kY29udGFpbmVyUHJvcGVydHk9ZS4kY29udGFpbmVyUHJvcGVydHksZS4kY3N0Tm9kZSE9PXZvaWQgMCYmKG4uJGNzdE5vZGU9dGhpcy5kZWh5ZHJhdGVDc3ROb2RlKGUuJGNzdE5vZGUscikpO2ZvcihsZXRbaSxhXW9mIE9iamVjdC5lbnRyaWVzKGUpKWlmKCFpLnN0YXJ0c1dpdGgoIiQiKSlpZihBcnJheS5pc0FycmF5KGEpKXtsZXQgcz1bXTtuW2ldPXM7Zm9yKGxldCBsIG9mIGEpcmkobCk/cy5wdXNoKHRoaXMuZGVoeWRyYXRlQXN0Tm9kZShsLHIpKTpUYShsKT9zLnB1c2godGhpcy5kZWh5ZHJhdGVSZWZlcmVuY2UobCxyKSk6cy5wdXNoKGwpfWVsc2UgcmkoYSk/bltpXT10aGlzLmRlaHlkcmF0ZUFzdE5vZGUoYSxyKTpUYShhKT9uW2ldPXRoaXMuZGVoeWRyYXRlUmVmZXJlbmNlKGEscik6YSE9PXZvaWQgMCYmKG5baV09YSk7cmV0dXJuIG59ZGVoeWRyYXRlUmVmZXJlbmNlKGUscil7bGV0IG49e307cmV0dXJuIG4uJHJlZlRleHQ9ZS4kcmVmVGV4dCxlLiRyZWZOb2RlJiYobi4kcmVmTm9kZT1yLmNzdE5vZGVzLmdldChlLiRyZWZOb2RlKSksbn1kZWh5ZHJhdGVDc3ROb2RlKGUscil7bGV0IG49ci5jc3ROb2Rlcy5nZXQoZSk7cmV0dXJuIHQyKGUpP24uZnVsbFRleHQ9ZS5mdWxsVGV4dDpuLmdyYW1tYXJTb3VyY2U9dGhpcy5nZXRHcmFtbWFyRWxlbWVudElkKGUuZ3JhbW1hclNvdXJjZSksbi5oaWRkZW49ZS5oaWRkZW4sbi5hc3ROb2RlPXIuYXN0Tm9kZXMuZ2V0KGUuYXN0Tm9kZSksaG8oZSk/bi5jb250ZW50PWUuY29udGVudC5tYXAoaT0+dGhpcy5kZWh5ZHJhdGVDc3ROb2RlKGkscikpOmNmKGUpJiYobi50b2tlblR5cGU9ZS50b2tlblR5cGUubmFtZSxuLm9mZnNldD1lLm9mZnNldCxuLmxlbmd0aD1lLmxlbmd0aCxuLnN0YXJ0TGluZT1lLnJhbmdlLnN0YXJ0LmxpbmUsbi5zdGFydENvbHVtbj1lLnJhbmdlLnN0YXJ0LmNoYXJhY3RlcixuLmVuZExpbmU9ZS5yYW5nZS5lbmQubGluZSxuLmVuZENvbHVtbj1lLnJhbmdlLmVuZC5jaGFyYWN0ZXIpLG59aHlkcmF0ZShlKXtsZXQgcj1lLnZhbHVlLG49dGhpcy5jcmVhdGVIeWRyYXRpb25Db250ZXh0KHIpO3JldHVybiIkY3N0Tm9kZSJpbiByJiZ0aGlzLmh5ZHJhdGVDc3ROb2RlKHIuJGNzdE5vZGUsbikse2xleGVyRXJyb3JzOmUubGV4ZXJFcnJvcnMscGFyc2VyRXJyb3JzOmUucGFyc2VyRXJyb3JzLHZhbHVlOnRoaXMuaHlkcmF0ZUFzdE5vZGUocixuKX19Y3JlYXRlSHlkcmF0aW9uQ29udGV4dChlKXtsZXQgcj1uZXcgTWFwLG49bmV3IE1hcDtmb3IobGV0IGEgb2YgdGwoZSkpci5zZXQoYSx7fSk7bGV0IGk7aWYoZS4kY3N0Tm9kZSlmb3IobGV0IGEgb2YgSmQoZS4kY3N0Tm9kZSkpe2xldCBzOyJmdWxsVGV4dCJpbiBhPyhzPW5ldyBOZyhhLmZ1bGxUZXh0KSxpPXMpOiJjb250ZW50ImluIGE/cz1uZXcgYjA6InRva2VuVHlwZSJpbiBhJiYocz10aGlzLmh5ZHJhdGVDc3RMZWFmTm9kZShhKSkscyYmKG4uc2V0KGEscykscy5yb290PWkpfXJldHVybnthc3ROb2RlczpyLGNzdE5vZGVzOm59fWh5ZHJhdGVBc3ROb2RlKGUscil7bGV0IG49ci5hc3ROb2Rlcy5nZXQoZSk7bi4kdHlwZT1lLiR0eXBlLG4uJGNvbnRhaW5lckluZGV4PWUuJGNvbnRhaW5lckluZGV4LG4uJGNvbnRhaW5lclByb3BlcnR5PWUuJGNvbnRhaW5lclByb3BlcnR5LGUuJGNzdE5vZGUmJihuLiRjc3ROb2RlPXIuY3N0Tm9kZXMuZ2V0KGUuJGNzdE5vZGUpKTtmb3IobGV0W2ksYV1vZiBPYmplY3QuZW50cmllcyhlKSlpZighaS5zdGFydHNXaXRoKCIkIikpaWYoQXJyYXkuaXNBcnJheShhKSl7bGV0IHM9W107bltpXT1zO2ZvcihsZXQgbCBvZiBhKXJpKGwpP3MucHVzaCh0aGlzLnNldFBhcmVudCh0aGlzLmh5ZHJhdGVBc3ROb2RlKGwsciksbikpOlRhKGwpP3MucHVzaCh0aGlzLmh5ZHJhdGVSZWZlcmVuY2UobCxuLGkscikpOnMucHVzaChsKX1lbHNlIHJpKGEpP25baV09dGhpcy5zZXRQYXJlbnQodGhpcy5oeWRyYXRlQXN0Tm9kZShhLHIpLG4pOlRhKGEpP25baV09dGhpcy5oeWRyYXRlUmVmZXJlbmNlKGEsbixpLHIpOmEhPT12b2lkIDAmJihuW2ldPWEpO3JldHVybiBufXNldFBhcmVudChlLHIpe3JldHVybiBlLiRjb250YWluZXI9cixlfWh5ZHJhdGVSZWZlcmVuY2UoZSxyLG4saSl7cmV0dXJuIHRoaXMubGlua2VyLmJ1aWxkUmVmZXJlbmNlKHIsbixpLmNzdE5vZGVzLmdldChlLiRyZWZOb2RlKSxlLiRyZWZUZXh0KX1oeWRyYXRlQ3N0Tm9kZShlLHIsbj0wKXtsZXQgaT1yLmNzdE5vZGVzLmdldChlKTtpZih0eXBlb2YgZS5ncmFtbWFyU291cmNlPT0ibnVtYmVyIiYmKGkuZ3JhbW1hclNvdXJjZT10aGlzLmdldEdyYW1tYXJFbGVtZW50KGUuZ3JhbW1hclNvdXJjZSkpLGkuYXN0Tm9kZT1yLmFzdE5vZGVzLmdldChlLmFzdE5vZGUpLGhvKGkpKWZvcihsZXQgYSBvZiBlLmNvbnRlbnQpe2xldCBzPXRoaXMuaHlkcmF0ZUNzdE5vZGUoYSxyLG4rKyk7aS5jb250ZW50LnB1c2gocyl9cmV0dXJuIGl9aHlkcmF0ZUNzdExlYWZOb2RlKGUpe2xldCByPXRoaXMuZ2V0VG9rZW5UeXBlKGUudG9rZW5UeXBlKSxuPWUub2Zmc2V0LGk9ZS5sZW5ndGgsYT1lLnN0YXJ0TGluZSxzPWUuc3RhcnRDb2x1bW4sbD1lLmVuZExpbmUsdT1lLmVuZENvbHVtbixoPWUuaGlkZGVuO3JldHVybiBuZXcgeDAobixpLHtzdGFydDp7bGluZTphLGNoYXJhY3RlcjpzfSxlbmQ6e2xpbmU6bCxjaGFyYWN0ZXI6dX19LHIsaCl9Z2V0VG9rZW5UeXBlKGUpe3JldHVybiB0aGlzLmxleGVyLmRlZmluaXRpb25bZV19Z2V0R3JhbW1hckVsZW1lbnRJZChlKXtyZXR1cm4gdGhpcy5ncmFtbWFyRWxlbWVudElkTWFwLnNpemU9PT0wJiZ0aGlzLmNyZWF0ZUdyYW1tYXJFbGVtZW50SWRNYXAoKSx0aGlzLmdyYW1tYXJFbGVtZW50SWRNYXAuZ2V0KGUpfWdldEdyYW1tYXJFbGVtZW50KGUpe3RoaXMuZ3JhbW1hckVsZW1lbnRJZE1hcC5zaXplPT09MCYmdGhpcy5jcmVhdGVHcmFtbWFyRWxlbWVudElkTWFwKCk7bGV0IHI9dGhpcy5ncmFtbWFyRWxlbWVudElkTWFwLmdldEtleShlKTtpZihyKXJldHVybiByO3Rocm93IG5ldyBFcnJvcigiSW52YWxpZCBncmFtbWFyIGVsZW1lbnQgaWQ6ICIrZSl9Y3JlYXRlR3JhbW1hckVsZW1lbnRJZE1hcCgpe2xldCBlPTA7Zm9yKGxldCByIG9mIHRsKHRoaXMuZ3JhbW1hcikpYTIocikmJnRoaXMuZ3JhbW1hckVsZW1lbnRJZE1hcC5zZXQocixlKyspfX19KTtmdW5jdGlvbiBnbyh0KXtyZXR1cm57ZG9jdW1lbnRhdGlvbjp7Q29tbWVudFByb3ZpZGVyOm8oZT0+bmV3IHZ4KGUpLCJDb21tZW50UHJvdmlkZXIiKSxEb2N1bWVudGF0aW9uUHJvdmlkZXI6byhlPT5uZXcgeXgoZSksIkRvY3VtZW50YXRpb25Qcm92aWRlciIpfSxwYXJzZXI6e0FzeW5jUGFyc2VyOm8oZT0+bmV3IHh4KGUpLCJBc3luY1BhcnNlciIpLEdyYW1tYXJDb25maWc6byhlPT51UihlKSwiR3JhbW1hckNvbmZpZyIpLExhbmdpdW1QYXJzZXI6byhlPT5iTShlKSwiTGFuZ2l1bVBhcnNlciIpLENvbXBsZXRpb25QYXJzZXI6byhlPT52TShlKSwiQ29tcGxldGlvblBhcnNlciIpLFZhbHVlQ29udmVydGVyOm8oKCk9Pm5ldyBrMCwiVmFsdWVDb252ZXJ0ZXIiKSxUb2tlbkJ1aWxkZXI6bygoKT0+bmV3IFQwLCJUb2tlbkJ1aWxkZXIiKSxMZXhlcjpvKGU9Pm5ldyBweChlKSwiTGV4ZXIiKSxQYXJzZXJFcnJvck1lc3NhZ2VQcm92aWRlcjpvKCgpPT5uZXcgUmcsIlBhcnNlckVycm9yTWVzc2FnZVByb3ZpZGVyIil9LHdvcmtzcGFjZTp7QXN0Tm9kZUxvY2F0b3I6bygoKT0+bmV3IGN4LCJBc3ROb2RlTG9jYXRvciIpLEFzdE5vZGVEZXNjcmlwdGlvblByb3ZpZGVyOm8oZT0+bmV3IG94KGUpLCJBc3ROb2RlRGVzY3JpcHRpb25Qcm92aWRlciIpLFJlZmVyZW5jZURlc2NyaXB0aW9uUHJvdmlkZXI6byhlPT5uZXcgbHgoZSksIlJlZmVyZW5jZURlc2NyaXB0aW9uUHJvdmlkZXIiKX0scmVmZXJlbmNlczp7TGlua2VyOm8oZT0+bmV3IGoyKGUpLCJMaW5rZXIiKSxOYW1lUHJvdmlkZXI6bygoKT0+bmV3IEsyLCJOYW1lUHJvdmlkZXIiKSxTY29wZVByb3ZpZGVyOm8oZT0+bmV3IHR4KGUpLCJTY29wZVByb3ZpZGVyIiksU2NvcGVDb21wdXRhdGlvbjpvKGU9Pm5ldyBaMihlKSwiU2NvcGVDb21wdXRhdGlvbiIpLFJlZmVyZW5jZXM6byhlPT5uZXcgUTIoZSksIlJlZmVyZW5jZXMiKX0sc2VyaWFsaXplcjp7SHlkcmF0b3I6byhlPT5uZXcgd3goZSksIkh5ZHJhdG9yIiksSnNvblNlcmlhbGl6ZXI6byhlPT5uZXcgcngoZSksIkpzb25TZXJpYWxpemVyIil9LHZhbGlkYXRpb246e0RvY3VtZW50VmFsaWRhdG9yOm8oZT0+bmV3IHN4KGUpLCJEb2N1bWVudFZhbGlkYXRvciIpLFZhbGlkYXRpb25SZWdpc3RyeTpvKGU9Pm5ldyBpeChlKSwiVmFsaWRhdGlvblJlZ2lzdHJ5Iil9LHNoYXJlZDpvKCgpPT50LnNoYXJlZCwic2hhcmVkIil9fWZ1bmN0aW9uIHlvKHQpe3JldHVybntTZXJ2aWNlUmVnaXN0cnk6bygoKT0+bmV3IG54LCJTZXJ2aWNlUmVnaXN0cnkiKSx3b3Jrc3BhY2U6e0xhbmdpdW1Eb2N1bWVudHM6byhlPT5uZXcgWDIoZSksIkxhbmdpdW1Eb2N1bWVudHMiKSxMYW5naXVtRG9jdW1lbnRGYWN0b3J5Om8oZT0+bmV3IHEyKGUpLCJMYW5naXVtRG9jdW1lbnRGYWN0b3J5IiksRG9jdW1lbnRCdWlsZGVyOm8oZT0+bmV3IGh4KGUpLCJEb2N1bWVudEJ1aWxkZXIiKSxJbmRleE1hbmFnZXI6byhlPT5uZXcgZngoZSksIkluZGV4TWFuYWdlciIpLFdvcmtzcGFjZU1hbmFnZXI6byhlPT5uZXcgZHgoZSksIldvcmtzcGFjZU1hbmFnZXIiKSxGaWxlU3lzdGVtUHJvdmlkZXI6byhlPT50LmZpbGVTeXN0ZW1Qcm92aWRlcihlKSwiRmlsZVN5c3RlbVByb3ZpZGVyIiksV29ya3NwYWNlTG9jazpvKCgpPT5uZXcgYngsIldvcmtzcGFjZUxvY2siKSxDb25maWd1cmF0aW9uUHJvdmlkZXI6byhlPT5uZXcgdXgoZSksIkNvbmZpZ3VyYXRpb25Qcm92aWRlciIpfX19dmFyIG1JPU0oKCk9PnsidXNlIHN0cmljdCI7aFIoKTt4TSgpO3dNKCk7VE0oKTtrTSgpO1BNKCk7Qk0oKTtGTSgpO3pNKCk7JE0oKTtqaygpO1VNKCk7SE0oKTtheCgpO1dNKCk7WU0oKTtxTSgpO2pNKCk7QmcoKTtLTSgpO1FNKCk7ZUkoKTtvSSgpO2xJKCk7WTIoKTtmSSgpO2RJKCk7cEkoKTtvKGdvLCJjcmVhdGVEZWZhdWx0Q29yZU1vZHVsZSIpO28oeW8sImNyZWF0ZURlZmF1bHRTaGFyZWRDb3JlTW9kdWxlIil9KTtmdW5jdGlvbiBXaSh0LGUscixuLGksYSxzLGwsdSl7bGV0IGg9W3QsZSxyLG4saSxhLHMsbCx1XS5yZWR1Y2UoZUUse30pO3JldHVybiBBY2UoaCl9ZnVuY3Rpb24gQ2NlKHQpe2lmKHQmJnRbeUldKWZvcihsZXQgZSBvZiBPYmplY3QudmFsdWVzKHQpKUNjZShlKTtyZXR1cm4gdH1mdW5jdGlvbiBBY2UodCxlKXtsZXQgcj1uZXcgUHJveHkoe30se2RlbGV0ZVByb3BlcnR5Om8oKCk9PiExLCJkZWxldGVQcm9wZXJ0eSIpLGdldDpvKChuLGkpPT5TY2UobixpLHQsZXx8ciksImdldCIpLGdldE93blByb3BlcnR5RGVzY3JpcHRvcjpvKChuLGkpPT4oU2NlKG4saSx0LGV8fHIpLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixpKSksImdldE93blByb3BlcnR5RGVzY3JpcHRvciIpLGhhczpvKChuLGkpPT5pIGluIHQsImhhcyIpLG93bktleXM6bygoKT0+Wy4uLlJlZmxlY3Qub3duS2V5cyh0KSx5SV0sIm93bktleXMiKX0pO3JldHVybiByW3lJXT0hMCxyfWZ1bmN0aW9uIFNjZSh0LGUscixuKXtpZihlIGluIHQpe2lmKHRbZV1pbnN0YW5jZW9mIEVycm9yKXRocm93IG5ldyBFcnJvcigiQ29uc3RydWN0aW9uIGZhaWx1cmUuIFBsZWFzZSBtYWtlIHN1cmUgdGhhdCB5b3VyIGRlcGVuZGVuY2llcyBhcmUgY29uc3RydWN0YWJsZS4iLHtjYXVzZTp0W2VdfSk7aWYodFtlXT09PUVjZSl0aHJvdyBuZXcgRXJyb3IoJ0N5Y2xlIGRldGVjdGVkLiBQbGVhc2UgbWFrZSAiJytTdHJpbmcoZSkrJyIgbGF6eS4gU2VlIGh0dHBzOi8vbGFuZ2l1bS5vcmcvZG9jcy9jb25maWd1cmF0aW9uLXNlcnZpY2VzLyNyZXNvbHZpbmctY3ljbGljLWRlcGVuZGVuY2llcycpO3JldHVybiB0W2VdfWVsc2UgaWYoZSBpbiByKXtsZXQgaT1yW2VdO3RbZV09RWNlO3RyeXt0W2VdPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2kobik6QWNlKGksbil9Y2F0Y2goYSl7dGhyb3cgdFtlXT1hIGluc3RhbmNlb2YgRXJyb3I/YTp2b2lkIDAsYX1yZXR1cm4gdFtlXX1lbHNlIHJldHVybn1mdW5jdGlvbiBlRSh0LGUpe2lmKGUpe2ZvcihsZXRbcixuXW9mIE9iamVjdC5lbnRyaWVzKGUpKWlmKG4hPT12b2lkIDApe2xldCBpPXRbcl07aSE9PW51bGwmJm4hPT1udWxsJiZ0eXBlb2YgaT09Im9iamVjdCImJnR5cGVvZiBuPT0ib2JqZWN0Ij90W3JdPWVFKGksbik6dFtyXT1ufX1yZXR1cm4gdH12YXIgZ0kseUksRWNlLHZJPU0oKCk9PnsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKHQpe3QubWVyZ2U9KGUscik9PmVFKGVFKHt9LGUpLHIpfSkoZ0l8fChnST17fSkpO28oV2ksImluamVjdCIpO3lJPVN5bWJvbCgiaXNQcm94eSIpO28oQ2NlLCJlYWdlckxvYWQiKTtvKEFjZSwiX2luamVjdCIpO0VjZT1TeW1ib2woKTtvKFNjZSwiX3Jlc29sdmUiKTtvKGVFLCJfbWVyZ2UiKX0pO3ZhciBfY2U9TSgoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBMY2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtsSSgpO29JKCk7c0koKX0pO3ZhciBEY2U9TSgoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBOY2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtoUigpO0RjZSgpfSk7dmFyIFJjZT1NKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIE1jZT1NKCgpPT57InVzZSBzdHJpY3QiO2ZJKCk7eE0oKTtGaygpO3dNKCk7WTIoKTtlSSgpO1JjZSgpO1RNKCk7a00oKX0pO3ZhciBJY2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtQTSgpO0JNKCk7Rk0oKTtHTSgpO3pNKCk7JE0oKX0pO3ZhciBPY2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwSSgpO2prKCl9KTt2YXIgdEUsdm8seEk9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt0RT1jbGFzc3tzdGF0aWN7byh0aGlzLCJFbXB0eUZpbGVTeXN0ZW1Qcm92aWRlciIpfXJlYWRGaWxlKCl7dGhyb3cgbmV3IEVycm9yKCJObyBmaWxlIHN5c3RlbSBpcyBhdmFpbGFibGUuIil9YXN5bmMgcmVhZERpcmVjdG9yeSgpe3JldHVybltdfX0sdm89e2ZpbGVTeXN0ZW1Qcm92aWRlcjpvKCgpPT5uZXcgdEUsImZpbGVTeXN0ZW1Qcm92aWRlciIpfX0pO2Z1bmN0aW9uIEF6ZSgpe2xldCB0PVdpKHlvKHZvKSxDemUpLGU9V2koZ28oe3NoYXJlZDp0fSksU3plKTtyZXR1cm4gdC5TZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXIoZSksZX1mdW5jdGlvbiBnZih0KXt2YXIgZTtsZXQgcj1BemUoKSxuPXIuc2VyaWFsaXplci5Kc29uU2VyaWFsaXplci5kZXNlcmlhbGl6ZSh0KTtyZXR1cm4gci5zaGFyZWQud29ya3NwYWNlLkxhbmdpdW1Eb2N1bWVudEZhY3RvcnkuZnJvbU1vZGVsKG4sSHMucGFyc2UoYG1lbW9yeTovLyR7KGU9bi5uYW1lKSE9PW51bGwmJmUhPT12b2lkIDA/ZToiZ3JhbW1hciJ9LmxhbmdpdW1gKSksbn12YXIgU3plLEN6ZSxQY2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjttSSgpO3ZJKCk7QmMoKTt4SSgpO1VjKCk7U3plPXtHcmFtbWFyOm8oKCk9Pnt9LCJHcmFtbWFyIiksTGFuZ3VhZ2VNZXRhRGF0YTpvKCgpPT4oe2Nhc2VJbnNlbnNpdGl2ZTohMSxmaWxlRXh0ZW5zaW9uczpbIi5sYW5naXVtIl0sbGFuZ3VhZ2VJZDoibGFuZ2l1bSJ9KSwiTGFuZ3VhZ2VNZXRhRGF0YSIpfSxDemU9e0FzdFJlZmxlY3Rpb246bygoKT0+bmV3IHRnLCJBc3RSZWZsZWN0aW9uIil9O28oQXplLCJjcmVhdGVNaW5pbWFsR3JhbW1hclNlcnZpY2VzIik7byhnZiwibG9hZEdyYW1tYXJGcm9tSnNvbiIpfSk7dmFyICRyPXt9O3ZyKCRyLHtBc3RVdGlsczooKT0+elQsQmlNYXA6KCk9PkUwLENhbmNlbGxhdGlvbjooKT0+QXIsQ29udGV4dENhY2hlOigpPT5TMCxDc3RVdGlsczooKT0+QVQsRE9ORV9SRVNVTFQ6KCk9PnNzLERlZmVycmVkOigpPT5mcyxEaXNwb3NhYmxlOigpPT5DMCxEaXNwb3NhYmxlQ2FjaGU6KCk9PkdnLERvY3VtZW50Q2FjaGU6KCk9PnFrLEVNUFRZX1NUUkVBTTooKT0+cjIsRXJyb3JXaXRoTG9jYXRpb246KCk9PnQwLEdyYW1tYXJVdGlsczooKT0+V1QsTXVsdGlNYXA6KCk9PkhjLE9wZXJhdGlvbkNhbmNlbGxlZDooKT0+VmMsUmVkdWN0aW9uOigpPT5KbSxSZWdFeHBVdGlsczooKT0+VVQsU2ltcGxlQ2FjaGU6KCk9PmV4LFN0cmVhbUltcGw6KCk9PmZvLFRyZWVTdHJlYW1JbXBsOigpPT5QYyxVUkk6KCk9PkhzLFVyaVV0aWxzOigpPT5kcyxXb3Jrc3BhY2VDYWNoZTooKT0+JGcsYXNzZXJ0VW5yZWFjaGFibGU6KCk9PnVmLGRlbGF5TmV4dFRpY2s6KCk9Pk1NLGludGVycnVwdEFuZENoZWNrOigpPT5IaSxpc09wZXJhdGlvbkNhbmNlbGxlZDooKT0+bWYsbG9hZEdyYW1tYXJGcm9tSnNvbjooKT0+Z2Ysc2V0SW50ZXJydXB0aW9uUGVyaW9kOigpPT5sY2Usc3RhcnRDYW5jZWxhYmxlT3BlcmF0aW9uOigpPT5vY2Usc3RyZWFtOigpPT50bn0pO3ZhciBCY2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtYaygpO2NJKCk7U3IoJHIsdWkpO0ZnKCk7WE0oKTtfVCgpO1BjZSgpO25sKCk7JHMoKTtVYygpO29zKCk7cmwoKTt6bCgpO1ZsKCk7aWcoKX0pO3ZhciBGY2U9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtITSgpO2F4KCl9KTt2YXIgemNlPU0oKCk9PnsidXNlIHN0cmljdCI7V00oKTtZTSgpO3FNKCk7ak0oKTtCZygpO3hJKCk7S00oKTtkSSgpO1FNKCl9KTt2YXIga2E9e307dnIoa2Ese0Fic3RyYWN0QXN0UmVmbGVjdGlvbjooKT0+UWQsQWJzdHJhY3RDc3ROb2RlOigpPT5WMixBYnN0cmFjdExhbmdpdW1QYXJzZXI6KCk9PlUyLEFic3RyYWN0UGFyc2VyRXJyb3JNZXNzYWdlUHJvdmlkZXI6KCk9PkdrLEFic3RyYWN0VGhyZWFkZWRBc3luY1BhcnNlcjooKT0+dUksQXN0VXRpbHM6KCk9PnpULEJpTWFwOigpPT5FMCxDYW5jZWxsYXRpb246KCk9PkFyLENvbXBvc2l0ZUNzdE5vZGVJbXBsOigpPT5iMCxDb250ZXh0Q2FjaGU6KCk9PlMwLENzdE5vZGVCdWlsZGVyOigpPT4kMixDc3RVdGlsczooKT0+QVQsRE9ORV9SRVNVTFQ6KCk9PnNzLERhdGF0eXBlU3ltYm9sOigpPT56ayxEZWZhdWx0QXN0Tm9kZURlc2NyaXB0aW9uUHJvdmlkZXI6KCk9Pm94LERlZmF1bHRBc3ROb2RlTG9jYXRvcjooKT0+Y3gsRGVmYXVsdEFzeW5jUGFyc2VyOigpPT54eCxEZWZhdWx0Q29tbWVudFByb3ZpZGVyOigpPT52eCxEZWZhdWx0Q29uZmlndXJhdGlvblByb3ZpZGVyOigpPT51eCxEZWZhdWx0RG9jdW1lbnRCdWlsZGVyOigpPT5oeCxEZWZhdWx0RG9jdW1lbnRWYWxpZGF0b3I6KCk9PnN4LERlZmF1bHRIeWRyYXRvcjooKT0+d3gsRGVmYXVsdEluZGV4TWFuYWdlcjooKT0+ZngsRGVmYXVsdEpzb25TZXJpYWxpemVyOigpPT5yeCxEZWZhdWx0TGFuZ2l1bURvY3VtZW50RmFjdG9yeTooKT0+cTIsRGVmYXVsdExhbmdpdW1Eb2N1bWVudHM6KCk9PlgyLERlZmF1bHRMZXhlcjooKT0+cHgsRGVmYXVsdExpbmtlcjooKT0+ajIsRGVmYXVsdE5hbWVQcm92aWRlcjooKT0+SzIsRGVmYXVsdFJlZmVyZW5jZURlc2NyaXB0aW9uUHJvdmlkZXI6KCk9Pmx4LERlZmF1bHRSZWZlcmVuY2VzOigpPT5RMixEZWZhdWx0U2NvcGVDb21wdXRhdGlvbjooKT0+WjIsRGVmYXVsdFNjb3BlUHJvdmlkZXI6KCk9PnR4LERlZmF1bHRTZXJ2aWNlUmVnaXN0cnk6KCk9Pm54LERlZmF1bHRUb2tlbkJ1aWxkZXI6KCk9PlQwLERlZmF1bHRWYWx1ZUNvbnZlcnRlcjooKT0+azAsRGVmYXVsdFdvcmtzcGFjZUxvY2s6KCk9PmJ4LERlZmF1bHRXb3Jrc3BhY2VNYW5hZ2VyOigpPT5keCxEZWZlcnJlZDooKT0+ZnMsRGlzcG9zYWJsZTooKT0+QzAsRGlzcG9zYWJsZUNhY2hlOigpPT5HZyxEb2N1bWVudENhY2hlOigpPT5xayxEb2N1bWVudFN0YXRlOigpPT5UbixEb2N1bWVudFZhbGlkYXRvcjooKT0+UXUsRU1QVFlfU0NPUEU6KCk9PmZ6ZSxFTVBUWV9TVFJFQU06KCk9PnIyLEVtcHR5RmlsZVN5c3RlbTooKT0+dm8sRW1wdHlGaWxlU3lzdGVtUHJvdmlkZXI6KCk9PnRFLEVycm9yV2l0aExvY2F0aW9uOigpPT50MCxHcmFtbWFyQVNUOigpPT5vMixHcmFtbWFyVXRpbHM6KCk9PldULEpTRG9jRG9jdW1lbnRhdGlvblByb3ZpZGVyOigpPT55eCxMYW5naXVtQ29tcGxldGlvblBhcnNlcjooKT0+VzIsTGFuZ2l1bVBhcnNlcjooKT0+SDIsTGFuZ2l1bVBhcnNlckVycm9yTWVzc2FnZVByb3ZpZGVyOigpPT5SZyxMZWFmQ3N0Tm9kZUltcGw6KCk9PngwLE1hcFNjb3BlOigpPT5KMixNb2R1bGU6KCk9PmdJLE11bHRpTWFwOigpPT5IYyxPcGVyYXRpb25DYW5jZWxsZWQ6KCk9PlZjLFBhcnNlcldvcmtlcjooKT0+aEksUmVkdWN0aW9uOigpPT5KbSxSZWdFeHBVdGlsczooKT0+VVQsUm9vdENzdE5vZGVJbXBsOigpPT5OZyxTaW1wbGVDYWNoZTooKT0+ZXgsU3RyZWFtSW1wbDooKT0+Zm8sU3RyZWFtU2NvcGU6KCk9PnpnLFRleHREb2N1bWVudDooKT0+T2csVHJlZVN0cmVhbUltcGw6KCk9PlBjLFVSSTooKT0+SHMsVXJpVXRpbHM6KCk9PmRzLFZhbGlkYXRpb25DYXRlZ29yeTooKT0+VmcsVmFsaWRhdGlvblJlZ2lzdHJ5OigpPT5peCxWYWx1ZUNvbnZlcnRlcjooKT0+JGMsV29ya3NwYWNlQ2FjaGU6KCk9PiRnLGFzc2VydFVucmVhY2hhYmxlOigpPT51ZixjcmVhdGVDb21wbGV0aW9uUGFyc2VyOigpPT52TSxjcmVhdGVEZWZhdWx0Q29yZU1vZHVsZTooKT0+Z28sY3JlYXRlRGVmYXVsdFNoYXJlZENvcmVNb2R1bGU6KCk9PnlvLGNyZWF0ZUdyYW1tYXJDb25maWc6KCk9PnVSLGNyZWF0ZUxhbmdpdW1QYXJzZXI6KCk9PmJNLGRlbGF5TmV4dFRpY2s6KCk9Pk1NLGRpYWdub3N0aWNEYXRhOigpPT5LayxlYWdlckxvYWQ6KCk9PkNjZSxnZXREaWFnbm9zdGljUmFuZ2U6KCk9PmdjZSxpbmplY3Q6KCk9PldpLGludGVycnVwdEFuZENoZWNrOigpPT5IaSxpc0FzdE5vZGU6KCk9PnJpLGlzQXN0Tm9kZURlc2NyaXB0aW9uOigpPT5PRCxpc0FzdE5vZGVXaXRoQ29tbWVudDooKT0+Vk0saXNDb21wb3NpdGVDc3ROb2RlOigpPT5obyxpc0lNdWx0aU1vZGVMZXhlckRlZmluaXRpb246KCk9PkpNLGlzSlNEb2M6KCk9PmlJLGlzTGVhZkNzdE5vZGU6KCk9PmNmLGlzTGlua2luZ0Vycm9yOigpPT5aZCxpc05hbWVkOigpPT5wY2UsaXNPcGVyYXRpb25DYW5jZWxsZWQ6KCk9Pm1mLGlzUmVmZXJlbmNlOigpPT5UYSxpc1Jvb3RDc3ROb2RlOigpPT50Mixpc1Rva2VuVHlwZUFycmF5OigpPT55Y2UsaXNUb2tlblR5cGVEaWN0aW9uYXJ5OigpPT5aTSxsb2FkR3JhbW1hckZyb21Kc29uOigpPT5nZixwYXJzZUpTRG9jOigpPT5uSSxwcmVwYXJlTGFuZ2l1bVBhcnNlcjooKT0+ZWNlLHNldEludGVycnVwdGlvblBlcmlvZDooKT0+bGNlLHN0YXJ0Q2FuY2VsYWJsZU9wZXJhdGlvbjooKT0+b2NlLHN0cmVhbTooKT0+dG4sdG9EaWFnbm9zdGljU2V2ZXJpdHk6KCk9PlFrfSk7dmFyIFdjPU0oKCk9PnsidXNlIHN0cmljdCI7bUkoKTt2SSgpO1VNKCk7X2NlKCk7Wm8oKTtMY2UoKTtOY2UoKTtNY2UoKTtJY2UoKTtPY2UoKTtCY2UoKTtTcihrYSwkcik7RmNlKCk7emNlKCk7QmMoKX0pO2Z1bmN0aW9uIHFjZSh0KXtyZXR1cm4gSGwuaXNJbnN0YW5jZSh0LFljZSl9ZnVuY3Rpb24gWGNlKHQpe3JldHVybiBIbC5pc0luc3RhbmNlKHQsYkkpfWZ1bmN0aW9uIGpjZSh0KXtyZXR1cm4gSGwuaXNJbnN0YW5jZSh0LHdJKX1mdW5jdGlvbiBLY2UodCl7cmV0dXJuIEhsLmlzSW5zdGFuY2UodCxOemUpfWZ1bmN0aW9uIFFjZSh0KXtyZXR1cm4gSGwuaXNJbnN0YW5jZSh0LFRJKX1mdW5jdGlvbiBKY2UodCl7cmV0dXJuIEhsLmlzSW5zdGFuY2UodCxaY2UpfWZ1bmN0aW9uIGV1ZSh0KXtyZXR1cm4gSGwuaXNJbnN0YW5jZSh0LGtJKX1mdW5jdGlvbiBydWUodCl7cmV0dXJuIEhsLmlzSW5zdGFuY2UodCx0dWUpfWZ1bmN0aW9uIGl1ZSh0KXtyZXR1cm4gSGwuaXNJbnN0YW5jZSh0LG51ZSl9ZnVuY3Rpb24gc3VlKHQpe3JldHVybiBIbC5pc0luc3RhbmNlKHQsYXVlKX1mdW5jdGlvbiBsdWUodCl7cmV0dXJuIEhsLmlzSW5zdGFuY2UodCxvdWUpfXZhciBfemUsUnQsV2NlLFljZSxiSSxMemUsRHplLHdJLE56ZSxUSSxaY2Usa0ksdHVlLG51ZSxhdWUsb3VlLFJ6ZSxjdWUsSGwsR2NlLE16ZSwkY2UsSXplLFZjZSxPemUsVWNlLFB6ZSxIY2UsQnplLEZ6ZSx6emUsR3plLCR6ZSxWemUsV2wsRUksU0ksQ0ksQUksX0ksVXplLEh6ZSxXemUsWXplLFVnLEEwLGlsLHF6ZSxhbD1NKCgpPT57InVzZSBzdHJpY3QiO1djKCk7V2MoKTtXYygpO1djKCk7X3plPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxSdD1vKCh0LGUpPT5femUodCwibmFtZSIse3ZhbHVlOmUsY29uZmlndXJhYmxlOiEwfSksIl9fbmFtZSIpLFdjZT0iU3RhdGVtZW50IixZY2U9IkFyY2hpdGVjdHVyZSI7byhxY2UsImlzQXJjaGl0ZWN0dXJlIik7UnQocWNlLCJpc0FyY2hpdGVjdHVyZSIpO2JJPSJCcmFuY2giO28oWGNlLCJpc0JyYW5jaCIpO1J0KFhjZSwiaXNCcmFuY2giKTtMemU9IkNoZWNrb3V0IixEemU9IkNoZXJyeVBpY2tpbmciLHdJPSJDb21taXQiO28oamNlLCJpc0NvbW1pdCIpO1J0KGpjZSwiaXNDb21taXQiKTtOemU9IkNvbW1vbiI7byhLY2UsImlzQ29tbW9uIik7UnQoS2NlLCJpc0NvbW1vbiIpO1RJPSJHaXRHcmFwaCI7byhRY2UsImlzR2l0R3JhcGgiKTtSdChRY2UsImlzR2l0R3JhcGgiKTtaY2U9IkluZm8iO28oSmNlLCJpc0luZm8iKTtSdChKY2UsImlzSW5mbyIpO2tJPSJNZXJnZSI7byhldWUsImlzTWVyZ2UiKTtSdChldWUsImlzTWVyZ2UiKTt0dWU9IlBhY2tldCI7byhydWUsImlzUGFja2V0Iik7UnQocnVlLCJpc1BhY2tldCIpO251ZT0iUGFja2V0QmxvY2siO28oaXVlLCJpc1BhY2tldEJsb2NrIik7UnQoaXVlLCJpc1BhY2tldEJsb2NrIik7YXVlPSJQaWUiO28oc3VlLCJpc1BpZSIpO1J0KHN1ZSwiaXNQaWUiKTtvdWU9IlBpZVNlY3Rpb24iO28obHVlLCJpc1BpZVNlY3Rpb24iKTtSdChsdWUsImlzUGllU2VjdGlvbiIpO1J6ZT0iRGlyZWN0aW9uIixjdWU9Y2xhc3MgZXh0ZW5kcyBRZHtzdGF0aWN7byh0aGlzLCJNZXJtYWlkQXN0UmVmbGVjdGlvbiIpfXN0YXRpY3tSdCh0aGlzLCJNZXJtYWlkQXN0UmVmbGVjdGlvbiIpfWdldEFsbFR5cGVzKCl7cmV0dXJuWyJBcmNoaXRlY3R1cmUiLCJCcmFuY2giLCJDaGVja291dCIsIkNoZXJyeVBpY2tpbmciLCJDb21taXQiLCJDb21tb24iLCJEaXJlY3Rpb24iLCJFZGdlIiwiR2l0R3JhcGgiLCJHcm91cCIsIkluZm8iLCJKdW5jdGlvbiIsIk1lcmdlIiwiUGFja2V0IiwiUGFja2V0QmxvY2siLCJQaWUiLCJQaWVTZWN0aW9uIiwiU2VydmljZSIsIlN0YXRlbWVudCJdfWNvbXB1dGVJc1N1YnR5cGUodCxlKXtzd2l0Y2godCl7Y2FzZSBiSTpjYXNlIEx6ZTpjYXNlIER6ZTpjYXNlIHdJOmNhc2Uga0k6cmV0dXJuIHRoaXMuaXNTdWJ0eXBlKFdjZSxlKTtjYXNlIFJ6ZTpyZXR1cm4gdGhpcy5pc1N1YnR5cGUoVEksZSk7ZGVmYXVsdDpyZXR1cm4hMX19Z2V0UmVmZXJlbmNlVHlwZSh0KXtsZXQgZT1gJHt0LmNvbnRhaW5lci4kdHlwZX06JHt0LnByb3BlcnR5fWA7c3dpdGNoKGUpe2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGAke2V9IGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSBpZC5gKX19Z2V0VHlwZU1ldGFEYXRhKHQpe3N3aXRjaCh0KXtjYXNlIkFyY2hpdGVjdHVyZSI6cmV0dXJue25hbWU6IkFyY2hpdGVjdHVyZSIscHJvcGVydGllczpbe25hbWU6ImFjY0Rlc2NyIn0se25hbWU6ImFjY1RpdGxlIn0se25hbWU6ImVkZ2VzIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJncm91cHMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6Imp1bmN0aW9ucyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToic2VydmljZXMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6InRpdGxlIn1dfTtjYXNlIkJyYW5jaCI6cmV0dXJue25hbWU6IkJyYW5jaCIscHJvcGVydGllczpbe25hbWU6Im5hbWUifSx7bmFtZToib3JkZXIifV19O2Nhc2UiQ2hlY2tvdXQiOnJldHVybntuYW1lOiJDaGVja291dCIscHJvcGVydGllczpbe25hbWU6ImJyYW5jaCJ9XX07Y2FzZSJDaGVycnlQaWNraW5nIjpyZXR1cm57bmFtZToiQ2hlcnJ5UGlja2luZyIscHJvcGVydGllczpbe25hbWU6ImlkIn0se25hbWU6InBhcmVudCJ9LHtuYW1lOiJ0YWdzIixkZWZhdWx0VmFsdWU6W119XX07Y2FzZSJDb21taXQiOnJldHVybntuYW1lOiJDb21taXQiLHByb3BlcnRpZXM6W3tuYW1lOiJpZCJ9LHtuYW1lOiJtZXNzYWdlIn0se25hbWU6InRhZ3MiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6InR5cGUifV19O2Nhc2UiQ29tbW9uIjpyZXR1cm57bmFtZToiQ29tbW9uIixwcm9wZXJ0aWVzOlt7bmFtZToiYWNjRGVzY3IifSx7bmFtZToiYWNjVGl0bGUifSx7bmFtZToidGl0bGUifV19O2Nhc2UiRWRnZSI6cmV0dXJue25hbWU6IkVkZ2UiLHByb3BlcnRpZXM6W3tuYW1lOiJsaHNEaXIifSx7bmFtZToibGhzR3JvdXAiLGRlZmF1bHRWYWx1ZTohMX0se25hbWU6Imxoc0lkIn0se25hbWU6Imxoc0ludG8iLGRlZmF1bHRWYWx1ZTohMX0se25hbWU6InJoc0RpciJ9LHtuYW1lOiJyaHNHcm91cCIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToicmhzSWQifSx7bmFtZToicmhzSW50byIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToidGl0bGUifV19O2Nhc2UiR2l0R3JhcGgiOnJldHVybntuYW1lOiJHaXRHcmFwaCIscHJvcGVydGllczpbe25hbWU6ImFjY0Rlc2NyIn0se25hbWU6ImFjY1RpdGxlIn0se25hbWU6InN0YXRlbWVudHMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6InRpdGxlIn1dfTtjYXNlIkdyb3VwIjpyZXR1cm57bmFtZToiR3JvdXAiLHByb3BlcnRpZXM6W3tuYW1lOiJpY29uIn0se25hbWU6ImlkIn0se25hbWU6ImluIn0se25hbWU6InRpdGxlIn1dfTtjYXNlIkluZm8iOnJldHVybntuYW1lOiJJbmZvIixwcm9wZXJ0aWVzOlt7bmFtZToiYWNjRGVzY3IifSx7bmFtZToiYWNjVGl0bGUifSx7bmFtZToidGl0bGUifV19O2Nhc2UiSnVuY3Rpb24iOnJldHVybntuYW1lOiJKdW5jdGlvbiIscHJvcGVydGllczpbe25hbWU6ImlkIn0se25hbWU6ImluIn1dfTtjYXNlIk1lcmdlIjpyZXR1cm57bmFtZToiTWVyZ2UiLHByb3BlcnRpZXM6W3tuYW1lOiJicmFuY2gifSx7bmFtZToiaWQifSx7bmFtZToidGFncyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToidHlwZSJ9XX07Y2FzZSJQYWNrZXQiOnJldHVybntuYW1lOiJQYWNrZXQiLHByb3BlcnRpZXM6W3tuYW1lOiJhY2NEZXNjciJ9LHtuYW1lOiJhY2NUaXRsZSJ9LHtuYW1lOiJibG9ja3MiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6InRpdGxlIn1dfTtjYXNlIlBhY2tldEJsb2NrIjpyZXR1cm57bmFtZToiUGFja2V0QmxvY2siLHByb3BlcnRpZXM6W3tuYW1lOiJlbmQifSx7bmFtZToibGFiZWwifSx7bmFtZToic3RhcnQifV19O2Nhc2UiUGllIjpyZXR1cm57bmFtZToiUGllIixwcm9wZXJ0aWVzOlt7bmFtZToiYWNjRGVzY3IifSx7bmFtZToiYWNjVGl0bGUifSx7bmFtZToic2VjdGlvbnMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6InNob3dEYXRhIixkZWZhdWx0VmFsdWU6ITF9LHtuYW1lOiJ0aXRsZSJ9XX07Y2FzZSJQaWVTZWN0aW9uIjpyZXR1cm57bmFtZToiUGllU2VjdGlvbiIscHJvcGVydGllczpbe25hbWU6ImxhYmVsIn0se25hbWU6InZhbHVlIn1dfTtjYXNlIlNlcnZpY2UiOnJldHVybntuYW1lOiJTZXJ2aWNlIixwcm9wZXJ0aWVzOlt7bmFtZToiaWNvbiJ9LHtuYW1lOiJpY29uVGV4dCJ9LHtuYW1lOiJpZCJ9LHtuYW1lOiJpbiJ9LHtuYW1lOiJ0aXRsZSJ9XX07Y2FzZSJEaXJlY3Rpb24iOnJldHVybntuYW1lOiJEaXJlY3Rpb24iLHByb3BlcnRpZXM6W3tuYW1lOiJhY2NEZXNjciJ9LHtuYW1lOiJhY2NUaXRsZSJ9LHtuYW1lOiJkaXIifSx7bmFtZToic3RhdGVtZW50cyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToidGl0bGUifV19O2RlZmF1bHQ6cmV0dXJue25hbWU6dCxwcm9wZXJ0aWVzOltdfX19fSxIbD1uZXcgY3VlLE16ZT1SdCgoKT0+R2NlPz8oR2NlPWdmKCd7IiR0eXBlIjoiR3JhbW1hciIsImlzRGVjbGFyZWQiOnRydWUsIm5hbWUiOiJJbmZvIiwiaW1wb3J0cyI6W10sInJ1bGVzIjpbeyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiSW5mbyIsImVudHJ5Ijp0cnVlLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMyJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiaW5mbyJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMyJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJzaG93SW5mbyJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMyJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifV0sImNhcmRpbmFsaXR5IjoiPyJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMSJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6Ij8ifV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJUaXRsZUFuZEFjY2Vzc2liaWxpdGllcyIsImZyYWdtZW50Ijp0cnVlLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImFjY0Rlc2NyIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANCJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYWNjVGl0bGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A1In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ0aXRsZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDYifSwiYXJndW1lbnRzIjpbXX19XX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyIn0sImFyZ3VtZW50cyI6W119XSwiY2FyZGluYWxpdHkiOiIrIn0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IkVPTCIsImZyYWdtZW50Ijp0cnVlLCJkYXRhVHlwZSI6InN0cmluZyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMyJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IisifSx7IiR0eXBlIjoiRW5kT2ZGaWxlIn1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJORVdMSU5FIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXFxccj9cXFxcbi8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkFDQ19ERVNDUiIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qYWNjRGVzY3IoPzpbXFxcXHQgXSo6KFteXFxcXG5cXFxccl0qPyg/PSUlKXxbXlxcXFxuXFxcXHJdKil8XFxcXHMqeyhbXn1dKil9KS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkFDQ19USVRMRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qYWNjVGl0bGVbXFxcXHQgXSo6KD86W15cXFxcblxcXFxyXSo/KD89JSUpfFteXFxcXG5cXFxccl0qKS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IlRJVExFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSp0aXRsZSg/OltcXFxcdCBdW15cXFxcblxcXFxyXSo/KD89JSUpfFtcXFxcdCBdW15cXFxcblxcXFxyXSp8KS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiV0hJVEVTUEFDRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0rLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJZQU1MIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii8tLS1bXFxcXHQgXSpcXFxccj9cXFxcbig/OltcXFxcU1xcXFxzXSo/XFxcXHI/XFxcXG4pPy0tLSg/OlxcXFxyP1xcXFxufCg/IVxcXFxTKSkvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IkRJUkVDVElWRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qJSV7W1xcXFxTXFxcXHNdKj99JSUoPzpcXFxccj9cXFxcbnwoPyFcXFxcUykpLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJTSU5HTEVfTElORV9DT01NRU5UIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSolJVteXFxcXG5cXFxccl0qLyJ9LCJmcmFnbWVudCI6ZmFsc2V9XSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sImludGVyZmFjZXMiOlt7IiR0eXBlIjoiSW50ZXJmYWNlIiwibmFtZSI6IkNvbW1vbiIsImF0dHJpYnV0ZXMiOlt7IiR0eXBlIjoiVHlwZUF0dHJpYnV0ZSIsIm5hbWUiOiJhY2NEZXNjciIsImlzT3B0aW9uYWwiOnRydWUsInR5cGUiOnsiJHR5cGUiOiJTaW1wbGVUeXBlIiwicHJpbWl0aXZlVHlwZSI6InN0cmluZyJ9fSx7IiR0eXBlIjoiVHlwZUF0dHJpYnV0ZSIsIm5hbWUiOiJhY2NUaXRsZSIsImlzT3B0aW9uYWwiOnRydWUsInR5cGUiOnsiJHR5cGUiOiJTaW1wbGVUeXBlIiwicHJpbWl0aXZlVHlwZSI6InN0cmluZyJ9fSx7IiR0eXBlIjoiVHlwZUF0dHJpYnV0ZSIsIm5hbWUiOiJ0aXRsZSIsImlzT3B0aW9uYWwiOnRydWUsInR5cGUiOnsiJHR5cGUiOiJTaW1wbGVUeXBlIiwicHJpbWl0aXZlVHlwZSI6InN0cmluZyJ9fV0sInN1cGVyVHlwZXMiOltdfV0sInR5cGVzIjpbXSwidXNlZEdyYW1tYXJzIjpbXX0nKSksIkluZm9HcmFtbWFyIiksSXplPVJ0KCgpPT4kY2U/PygkY2U9Z2YoYHsiJHR5cGUiOiJHcmFtbWFyIiwiaXNEZWNsYXJlZCI6dHJ1ZSwibmFtZSI6IlBhY2tldCIsImltcG9ydHMiOltdLCJydWxlcyI6W3siJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IlBhY2tldCIsImVudHJ5Ijp0cnVlLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANiJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoicGFja2V0LWJldGEifSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANiJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDQifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYmxvY2tzIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEifSwiYXJndW1lbnRzIjpbXX0sImNhcmRpbmFsaXR5IjoiKiJ9XX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDYifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIrIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYmxvY2tzIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEifSwiYXJndW1lbnRzIjpbXX0sImNhcmRpbmFsaXR5IjoiKyJ9XX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A2In0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKiJ9XX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiUGFja2V0QmxvY2siLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InN0YXJ0Iiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMiJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiLSJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImVuZCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIifSwiYXJndW1lbnRzIjpbXX19XSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IjoifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJsYWJlbCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDMifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANSJ9LCJhcmd1bWVudHMiOltdfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiSU5UIiwidHlwZSI6eyIkdHlwZSI6IlJldHVyblR5cGUiLCJuYW1lIjoibnVtYmVyIn0sImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvMHxbMS05XVswLTldKi8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IlNUUklORyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvXFwiW15cXCJdKlxcInwnW14nXSonLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IlRpdGxlQW5kQWNjZXNzaWJpbGl0aWVzIiwiZnJhZ21lbnQiOnRydWUsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYWNjRGVzY3IiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A3In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJhY2NUaXRsZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDgifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InRpdGxlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAOSJ9LCJhcmd1bWVudHMiOltdfX1dfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDUifSwiYXJndW1lbnRzIjpbXX1dLCJjYXJkaW5hbGl0eSI6IisifSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiRU9MIiwiZnJhZ21lbnQiOnRydWUsImRhdGFUeXBlIjoic3RyaW5nIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A2In0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKyJ9LHsiJHR5cGUiOiJFbmRPZkZpbGUifV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6Ik5FV0xJTkUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcXFxyP1xcXFxuLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQUNDX0RFU0NSIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSphY2NEZXNjcig/OltcXFxcdCBdKjooW15cXFxcblxcXFxyXSo/KD89JSUpfFteXFxcXG5cXFxccl0qKXxcXFxccyp7KFtefV0qKX0pLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQUNDX1RJVExFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSphY2NUaXRsZVtcXFxcdCBdKjooPzpbXlxcXFxuXFxcXHJdKj8oPz0lJSl8W15cXFxcblxcXFxyXSopLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiVElUTEUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKnRpdGxlKD86W1xcXFx0IF1bXlxcXFxuXFxcXHJdKj8oPz0lJSl8W1xcXFx0IF1bXlxcXFxuXFxcXHJdKnwpLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJXSElURVNQQUNFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSsvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IllBTUwiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiLy0tLVtcXFxcdCBdKlxcXFxyP1xcXFxuKD86W1xcXFxTXFxcXHNdKj9cXFxccj9cXFxcbik/LS0tKD86XFxcXHI/XFxcXG58KD8hXFxcXFMpKS8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiRElSRUNUSVZFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSolJXtbXFxcXFNcXFxcc10qP30lJSg/OlxcXFxyP1xcXFxufCg/IVxcXFxTKSkvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IlNJTkdMRV9MSU5FX0NPTU1FTlQiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKiUlW15cXFxcblxcXFxyXSovIn0sImZyYWdtZW50IjpmYWxzZX1dLCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwiaW50ZXJmYWNlcyI6W3siJHR5cGUiOiJJbnRlcmZhY2UiLCJuYW1lIjoiQ29tbW9uIiwiYXR0cmlidXRlcyI6W3siJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6ImFjY0Rlc2NyIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19LHsiJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6ImFjY1RpdGxlIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19LHsiJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6InRpdGxlIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19XSwic3VwZXJUeXBlcyI6W119XSwidHlwZXMiOltdLCJ1c2VkR3JhbW1hcnMiOltdfWApKSwiUGFja2V0R3JhbW1hciIpLE96ZT1SdCgoKT0+VmNlPz8oVmNlPWdmKCd7IiR0eXBlIjoiR3JhbW1hciIsImlzRGVjbGFyZWQiOnRydWUsIm5hbWUiOiJQaWUiLCJpbXBvcnRzIjpbXSwicnVsZXMiOlt7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJQaWUiLCJlbnRyeSI6dHJ1ZSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDYifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIqIn0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InBpZSJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InNob3dEYXRhIiwib3BlcmF0b3IiOiI/PSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoic2hvd0RhdGEifSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDYifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIqIn0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A0In0sImFyZ3VtZW50cyI6W119LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InNlY3Rpb25zIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEifSwiYXJndW1lbnRzIjpbXX0sImNhcmRpbmFsaXR5IjoiKiJ9XX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDYifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIrIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoic2VjdGlvbnMiLCJvcGVyYXRvciI6Iis9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMSJ9LCJhcmd1bWVudHMiOltdfSwiY2FyZGluYWxpdHkiOiIrIn1dfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDYifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIqIn1dfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJQaWVTZWN0aW9uIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJsYWJlbCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiI6In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidmFsdWUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AzIn0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDUifSwiYXJndW1lbnRzIjpbXX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IlBJRV9TRUNUSU9OX0xBQkVMIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXCJbXlxcIl0rXFwiLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiUElFX1NFQ1RJT05fVkFMVUUiLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJudW1iZXIifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii8oMHxbMS05XVswLTldKikoXFxcXC5bMC05XSspPy8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJUaXRsZUFuZEFjY2Vzc2liaWxpdGllcyIsImZyYWdtZW50Ijp0cnVlLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImFjY0Rlc2NyIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANyJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYWNjVGl0bGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A4In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ0aXRsZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDkifSwiYXJndW1lbnRzIjpbXX19XX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A1In0sImFyZ3VtZW50cyI6W119XSwiY2FyZGluYWxpdHkiOiIrIn0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IkVPTCIsImZyYWdtZW50Ijp0cnVlLCJkYXRhVHlwZSI6InN0cmluZyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANiJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IisifSx7IiR0eXBlIjoiRW5kT2ZGaWxlIn1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJORVdMSU5FIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXFxccj9cXFxcbi8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkFDQ19ERVNDUiIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qYWNjRGVzY3IoPzpbXFxcXHQgXSo6KFteXFxcXG5cXFxccl0qPyg/PSUlKXxbXlxcXFxuXFxcXHJdKil8XFxcXHMqeyhbXn1dKil9KS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkFDQ19USVRMRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qYWNjVGl0bGVbXFxcXHQgXSo6KD86W15cXFxcblxcXFxyXSo/KD89JSUpfFteXFxcXG5cXFxccl0qKS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IlRJVExFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSp0aXRsZSg/OltcXFxcdCBdW15cXFxcblxcXFxyXSo/KD89JSUpfFtcXFxcdCBdW15cXFxcblxcXFxyXSp8KS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiV0hJVEVTUEFDRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0rLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJZQU1MIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii8tLS1bXFxcXHQgXSpcXFxccj9cXFxcbig/OltcXFxcU1xcXFxzXSo/XFxcXHI/XFxcXG4pPy0tLSg/OlxcXFxyP1xcXFxufCg/IVxcXFxTKSkvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IkRJUkVDVElWRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qJSV7W1xcXFxTXFxcXHNdKj99JSUoPzpcXFxccj9cXFxcbnwoPyFcXFxcUykpLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJTSU5HTEVfTElORV9DT01NRU5UIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSolJVteXFxcXG5cXFxccl0qLyJ9LCJmcmFnbWVudCI6ZmFsc2V9XSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sImludGVyZmFjZXMiOlt7IiR0eXBlIjoiSW50ZXJmYWNlIiwibmFtZSI6IkNvbW1vbiIsImF0dHJpYnV0ZXMiOlt7IiR0eXBlIjoiVHlwZUF0dHJpYnV0ZSIsIm5hbWUiOiJhY2NEZXNjciIsImlzT3B0aW9uYWwiOnRydWUsInR5cGUiOnsiJHR5cGUiOiJTaW1wbGVUeXBlIiwicHJpbWl0aXZlVHlwZSI6InN0cmluZyJ9fSx7IiR0eXBlIjoiVHlwZUF0dHJpYnV0ZSIsIm5hbWUiOiJhY2NUaXRsZSIsImlzT3B0aW9uYWwiOnRydWUsInR5cGUiOnsiJHR5cGUiOiJTaW1wbGVUeXBlIiwicHJpbWl0aXZlVHlwZSI6InN0cmluZyJ9fSx7IiR0eXBlIjoiVHlwZUF0dHJpYnV0ZSIsIm5hbWUiOiJ0aXRsZSIsImlzT3B0aW9uYWwiOnRydWUsInR5cGUiOnsiJHR5cGUiOiJTaW1wbGVUeXBlIiwicHJpbWl0aXZlVHlwZSI6InN0cmluZyJ9fV0sInN1cGVyVHlwZXMiOltdfV0sInR5cGVzIjpbXSwidXNlZEdyYW1tYXJzIjpbXX0nKSksIlBpZUdyYW1tYXIiKSxQemU9UnQoKCk9PlVjZT8/KFVjZT1nZigneyIkdHlwZSI6IkdyYW1tYXIiLCJpc0RlY2xhcmVkIjp0cnVlLCJuYW1lIjoiQXJjaGl0ZWN0dXJlIiwiaW1wb3J0cyI6W10sInJ1bGVzIjpbeyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiQXJjaGl0ZWN0dXJlIiwiZW50cnkiOnRydWUsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxOCJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiYXJjaGl0ZWN0dXJlLWJldGEifSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTgifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIqIn0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNiJ9LCJhcmd1bWVudHMiOltdfV19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxOCJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIqIn1dfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE4In0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKiJ9XX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiU3RhdGVtZW50IiwiZnJhZ21lbnQiOnRydWUsImRlZmluaXRpb24iOnsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Imdyb3VwcyIsIm9wZXJhdG9yIjoiKz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A1In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJzZXJ2aWNlcyIsIm9wZXJhdG9yIjoiKz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A2In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJqdW5jdGlvbnMiLCJvcGVyYXRvciI6Iis9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANyJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiZWRnZXMiLCJvcGVyYXRvciI6Iis9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAOCJ9LCJhcmd1bWVudHMiOltdfX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiTGVmdFBvcnQiLCJmcmFnbWVudCI6dHJ1ZSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiOiJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Imxoc0RpciIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDkifSwiYXJndW1lbnRzIjpbXX19XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IlJpZ2h0UG9ydCIsImZyYWdtZW50Ijp0cnVlLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InJoc0RpciIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDkifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiI6In1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiQXJyb3ciLCJmcmFnbWVudCI6dHJ1ZSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoibGhzSW50byIsIm9wZXJhdG9yIjoiPz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNSJ9LCJhcmd1bWVudHMiOltdfSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6Ii0tIn0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiLSJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InRpdGxlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTMifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiItIn1dfV19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InJoc0ludG8iLCJvcGVyYXRvciI6Ij89IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTUifSwiYXJndW1lbnRzIjpbXX0sImNhcmRpbmFsaXR5IjoiPyJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMyJ9LCJhcmd1bWVudHMiOltdfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJHcm91cCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6Imdyb3VwIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiaWQiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMCJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiaWNvbiIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEyIn0sImFyZ3VtZW50cyI6W119LCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ0aXRsZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEzIn0sImFyZ3VtZW50cyI6W119LCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJpbiJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImluIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTAifSwiYXJndW1lbnRzIjpbXX19XSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNyJ9LCJhcmd1bWVudHMiOltdfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IlNlcnZpY2UiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJzZXJ2aWNlIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiaWQiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMCJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiaWNvblRleHQiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMSJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiaWNvbiIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEyIn0sImFyZ3VtZW50cyI6W119fV0sImNhcmRpbmFsaXR5IjoiPyJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InRpdGxlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTMifSwiYXJndW1lbnRzIjpbXX0sImNhcmRpbmFsaXR5IjoiPyJ9LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6ImluIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiaW4iLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMCJ9LCJhcmd1bWVudHMiOltdfX1dLCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE3In0sImFyZ3VtZW50cyI6W119XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiSnVuY3Rpb24iLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJqdW5jdGlvbiJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImlkIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTAifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6ImluIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiaW4iLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMCJ9LCJhcmd1bWVudHMiOltdfX1dLCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE3In0sImFyZ3VtZW50cyI6W119XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiRWRnZSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoibGhzSWQiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMCJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoibGhzR3JvdXAiLCJvcGVyYXRvciI6Ij89IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTQifSwiYXJndW1lbnRzIjpbXX0sImNhcmRpbmFsaXR5IjoiPyJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANCJ9LCJhcmd1bWVudHMiOltdfSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJyaHNJZCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEwIn0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJyaHNHcm91cCIsIm9wZXJhdG9yIjoiPz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNCJ9LCJhcmd1bWVudHMiOltdfSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNyJ9LCJhcmd1bWVudHMiOltdfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQVJST1dfRElSRUNUSU9OIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlRlcm1pbmFsQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiVGVybWluYWxBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJUZXJtaW5hbEFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkNoYXJhY3RlclJhbmdlIiwibGVmdCI6eyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IkwifX0seyIkdHlwZSI6IkNoYXJhY3RlclJhbmdlIiwibGVmdCI6eyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IlIifX1dfSx7IiR0eXBlIjoiQ2hhcmFjdGVyUmFuZ2UiLCJsZWZ0Ijp7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiVCJ9fV19LHsiJHR5cGUiOiJDaGFyYWN0ZXJSYW5nZSIsImxlZnQiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJCIn19XX0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBUkNIX0lEIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHddKy8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkFSQ0hfVEVYVF9JQ09OIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXFxcKFxcIlteXFwiXStcXCJcXFxcKS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkFSQ0hfSUNPTiIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvXFxcXChbXFxcXHctOl0rXFxcXCkvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBUkNIX1RJVExFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXFxcW1tcXFxcdyBdK1xcXFxdLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQVJST1dfR1JPVVAiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcXFx7Z3JvdXBcXFxcfS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkFSUk9XX0lOVE8iLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiLzx8Pi8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJUaXRsZUFuZEFjY2Vzc2liaWxpdGllcyIsImZyYWdtZW50Ijp0cnVlLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImFjY0Rlc2NyIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTkifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImFjY1RpdGxlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjAifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InRpdGxlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjEifSwiYXJndW1lbnRzIjpbXX19XX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNyJ9LCJhcmd1bWVudHMiOltdfV0sImNhcmRpbmFsaXR5IjoiKyJ9LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJFT0wiLCJmcmFnbWVudCI6dHJ1ZSwiZGF0YVR5cGUiOiJzdHJpbmciLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE4In0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKyJ9LHsiJHR5cGUiOiJFbmRPZkZpbGUifV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6Ik5FV0xJTkUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcXFxyP1xcXFxuLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQUNDX0RFU0NSIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSphY2NEZXNjcig/OltcXFxcdCBdKjooW15cXFxcblxcXFxyXSo/KD89JSUpfFteXFxcXG5cXFxccl0qKXxcXFxccyp7KFtefV0qKX0pLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQUNDX1RJVExFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSphY2NUaXRsZVtcXFxcdCBdKjooPzpbXlxcXFxuXFxcXHJdKj8oPz0lJSl8W15cXFxcblxcXFxyXSopLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiVElUTEUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKnRpdGxlKD86W1xcXFx0IF1bXlxcXFxuXFxcXHJdKj8oPz0lJSl8W1xcXFx0IF1bXlxcXFxuXFxcXHJdKnwpLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJXSElURVNQQUNFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSsvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IllBTUwiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiLy0tLVtcXFxcdCBdKlxcXFxyP1xcXFxuKD86W1xcXFxTXFxcXHNdKj9cXFxccj9cXFxcbik/LS0tKD86XFxcXHI/XFxcXG58KD8hXFxcXFMpKS8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiRElSRUNUSVZFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSolJXtbXFxcXFNcXFxcc10qP30lJSg/OlxcXFxyP1xcXFxufCg/IVxcXFxTKSkvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IlNJTkdMRV9MSU5FX0NPTU1FTlQiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKiUlW15cXFxcblxcXFxyXSovIn0sImZyYWdtZW50IjpmYWxzZX1dLCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwiaW50ZXJmYWNlcyI6W3siJHR5cGUiOiJJbnRlcmZhY2UiLCJuYW1lIjoiQ29tbW9uIiwiYXR0cmlidXRlcyI6W3siJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6ImFjY0Rlc2NyIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19LHsiJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6ImFjY1RpdGxlIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19LHsiJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6InRpdGxlIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19XSwic3VwZXJUeXBlcyI6W119XSwidHlwZXMiOltdLCJ1c2VkR3JhbW1hcnMiOltdfScpKSwiQXJjaGl0ZWN0dXJlR3JhbW1hciIpLEJ6ZT1SdCgoKT0+SGNlPz8oSGNlPWdmKGB7IiR0eXBlIjoiR3JhbW1hciIsImlzRGVjbGFyZWQiOnRydWUsIm5hbWUiOiJHaXRHcmFwaCIsImludGVyZmFjZXMiOlt7IiR0eXBlIjoiSW50ZXJmYWNlIiwibmFtZSI6IkNvbW1vbiIsImF0dHJpYnV0ZXMiOlt7IiR0eXBlIjoiVHlwZUF0dHJpYnV0ZSIsIm5hbWUiOiJhY2NEZXNjciIsImlzT3B0aW9uYWwiOnRydWUsInR5cGUiOnsiJHR5cGUiOiJTaW1wbGVUeXBlIiwicHJpbWl0aXZlVHlwZSI6InN0cmluZyJ9fSx7IiR0eXBlIjoiVHlwZUF0dHJpYnV0ZSIsIm5hbWUiOiJhY2NUaXRsZSIsImlzT3B0aW9uYWwiOnRydWUsInR5cGUiOnsiJHR5cGUiOiJTaW1wbGVUeXBlIiwicHJpbWl0aXZlVHlwZSI6InN0cmluZyJ9fSx7IiR0eXBlIjoiVHlwZUF0dHJpYnV0ZSIsIm5hbWUiOiJ0aXRsZSIsImlzT3B0aW9uYWwiOnRydWUsInR5cGUiOnsiJHR5cGUiOiJTaW1wbGVUeXBlIiwicHJpbWl0aXZlVHlwZSI6InN0cmluZyJ9fV0sInN1cGVyVHlwZXMiOltdfV0sInJ1bGVzIjpbeyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiVGl0bGVBbmRBY2Nlc3NpYmlsaXRpZXMiLCJmcmFnbWVudCI6dHJ1ZSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJhY2NEZXNjciIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDMifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImFjY1RpdGxlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANCJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidGl0bGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A1In0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMSJ9LCJhcmd1bWVudHMiOltdfV0sImNhcmRpbmFsaXR5IjoiKyJ9LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJFT0wiLCJmcmFnbWVudCI6dHJ1ZSwiZGF0YVR5cGUiOiJzdHJpbmciLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIrIn0seyIkdHlwZSI6IkVuZE9mRmlsZSJ9XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiTkVXTElORSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvXFxcXHI/XFxcXG4vIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBQ0NfREVTQ1IiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKmFjY0Rlc2NyKD86W1xcXFx0IF0qOihbXlxcXFxuXFxcXHJdKj8oPz0lJSl8W15cXFxcblxcXFxyXSopfFxcXFxzKnsoW159XSopfSkvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBQ0NfVElUTEUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKmFjY1RpdGxlW1xcXFx0IF0qOig/OlteXFxcXG5cXFxccl0qPyg/PSUlKXxbXlxcXFxuXFxcXHJdKikvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJUSVRMRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qdGl0bGUoPzpbXFxcXHQgXVteXFxcXG5cXFxccl0qPyg/PSUlKXxbXFxcXHQgXVteXFxcXG5cXFxccl0qfCkvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IldISVRFU1BBQ0UiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKy8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiWUFNTCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvLS0tW1xcXFx0IF0qXFxcXHI/XFxcXG4oPzpbXFxcXFNcXFxcc10qP1xcXFxyP1xcXFxuKT8tLS0oPzpcXFxccj9cXFxcbnwoPyFcXFxcUykpLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJESVJFQ1RJVkUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKiUle1tcXFxcU1xcXFxzXSo/fSUlKD86XFxcXHI/XFxcXG58KD8hXFxcXFMpKS8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiU0lOR0xFX0xJTkVfQ09NTUVOVCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qJSVbXlxcXFxuXFxcXHJdKi8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJHaXRHcmFwaCIsImVudHJ5Ijp0cnVlLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMiJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiZ2l0R3JhcGgifSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJnaXRHcmFwaCJ9LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiI6In1dfSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiZ2l0R3JhcGg6In0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiZ2l0R3JhcGgifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEyIn0sImFyZ3VtZW50cyI6W119LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiI6In1dfV19LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMiJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMiJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDAifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoic3RhdGVtZW50cyIsIm9wZXJhdG9yIjoiKz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMSJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyIn0sImFyZ3VtZW50cyI6W119XSwiY2FyZGluYWxpdHkiOiIqIn1dfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJTdGF0ZW1lbnQiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEzIn0sImFyZ3VtZW50cyI6W119LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTQifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNSJ9LCJhcmd1bWVudHMiOltdfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE2In0sImFyZ3VtZW50cyI6W119LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTcifSwiYXJndW1lbnRzIjpbXX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJEaXJlY3Rpb24iLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJkaXIiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IkxSIn0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IlRCIn0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IkJUIn1dfX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiQ29tbWl0IiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiY29tbWl0In0seyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiaWQ6In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiaWQiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMCJ9LCJhcmd1bWVudHMiOltdfX1dfSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJtc2c6IiwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoibWVzc2FnZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIwIn0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InRhZzoifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ0YWdzIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIwIn0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InR5cGU6In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidHlwZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiTk9STUFMIn0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IlJFVkVSU0UifSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiSElHSExJR0hUIn1dfX1dfV0sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMSJ9LCJhcmd1bWVudHMiOltdfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IkJyYW5jaCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6ImJyYW5jaCJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Im5hbWUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxOSJ9LCJhcmd1bWVudHMiOltdfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIwIn0sImFyZ3VtZW50cyI6W119XX19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6Im9yZGVyOiJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Im9yZGVyIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTgifSwiYXJndW1lbnRzIjpbXX19XSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxIn0sImFyZ3VtZW50cyI6W119XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiTWVyZ2UiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJtZXJnZSJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImJyYW5jaCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE5In0sImFyZ3VtZW50cyI6W119LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjAifSwiYXJndW1lbnRzIjpbXX1dfX0seyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiaWQ6In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiaWQiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMCJ9LCJhcmd1bWVudHMiOltdfX1dfSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJ0YWc6In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidGFncyIsIm9wZXJhdG9yIjoiKz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMCJ9LCJhcmd1bWVudHMiOltdfX1dfSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJ0eXBlOiJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InR5cGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6Ik5PUk1BTCJ9LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJSRVZFUlNFIn0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IkhJR0hMSUdIVCJ9XX19XX1dLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEifSwiYXJndW1lbnRzIjpbXX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJDaGVja291dCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6ImNoZWNrb3V0In0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InN3aXRjaCJ9XX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYnJhbmNoIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTkifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMCJ9LCJhcmd1bWVudHMiOltdfV19fSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEifSwiYXJndW1lbnRzIjpbXX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJDaGVycnlQaWNraW5nIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiY2hlcnJ5LXBpY2sifSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJpZDoifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJpZCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIwIn0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InRhZzoifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ0YWdzIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIwIn0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InBhcmVudDoifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJwYXJlbnQiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMCJ9LCJhcmd1bWVudHMiOltdfX1dfV0sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMSJ9LCJhcmd1bWVudHMiOltdfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiSU5UIiwidHlwZSI6eyIkdHlwZSI6IlJldHVyblR5cGUiLCJuYW1lIjoibnVtYmVyIn0sImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvWzAtOV0rKD89XFxcXHMpLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiSUQiLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJzdHJpbmcifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXFxcdyhbLVxcXFwuL1xcXFx3XSpbLVxcXFx3XSk/LyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiU1RSSU5HIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXCJbXlxcIl0qXFwifCdbXiddKicvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX1dLCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwiaW1wb3J0cyI6W10sInR5cGVzIjpbXSwidXNlZEdyYW1tYXJzIjpbXX1gKSksIkdpdEdyYXBoR3JhbW1hciIpLEZ6ZT17bGFuZ3VhZ2VJZDoiaW5mbyIsZmlsZUV4dGVuc2lvbnM6WyIubW1kIiwiLm1lcm1haWQiXSxjYXNlSW5zZW5zaXRpdmU6ITF9LHp6ZT17bGFuZ3VhZ2VJZDoicGFja2V0IixmaWxlRXh0ZW5zaW9uczpbIi5tbWQiLCIubWVybWFpZCJdLGNhc2VJbnNlbnNpdGl2ZTohMX0sR3plPXtsYW5ndWFnZUlkOiJwaWUiLGZpbGVFeHRlbnNpb25zOlsiLm1tZCIsIi5tZXJtYWlkIl0sY2FzZUluc2Vuc2l0aXZlOiExfSwkemU9e2xhbmd1YWdlSWQ6ImFyY2hpdGVjdHVyZSIsZmlsZUV4dGVuc2lvbnM6WyIubW1kIiwiLm1lcm1haWQiXSxjYXNlSW5zZW5zaXRpdmU6ITF9LFZ6ZT17bGFuZ3VhZ2VJZDoiZ2l0R3JhcGgiLGZpbGVFeHRlbnNpb25zOlsiLm1tZCIsIi5tZXJtYWlkIl0sY2FzZUluc2Vuc2l0aXZlOiExfSxXbD17QXN0UmVmbGVjdGlvbjpSdCgoKT0+bmV3IGN1ZSwiQXN0UmVmbGVjdGlvbiIpfSxFST17R3JhbW1hcjpSdCgoKT0+TXplKCksIkdyYW1tYXIiKSxMYW5ndWFnZU1ldGFEYXRhOlJ0KCgpPT5GemUsIkxhbmd1YWdlTWV0YURhdGEiKSxwYXJzZXI6e319LFNJPXtHcmFtbWFyOlJ0KCgpPT5JemUoKSwiR3JhbW1hciIpLExhbmd1YWdlTWV0YURhdGE6UnQoKCk9Pnp6ZSwiTGFuZ3VhZ2VNZXRhRGF0YSIpLHBhcnNlcjp7fX0sQ0k9e0dyYW1tYXI6UnQoKCk9Pk96ZSgpLCJHcmFtbWFyIiksTGFuZ3VhZ2VNZXRhRGF0YTpSdCgoKT0+R3plLCJMYW5ndWFnZU1ldGFEYXRhIikscGFyc2VyOnt9fSxBST17R3JhbW1hcjpSdCgoKT0+UHplKCksIkdyYW1tYXIiKSxMYW5ndWFnZU1ldGFEYXRhOlJ0KCgpPT4kemUsIkxhbmd1YWdlTWV0YURhdGEiKSxwYXJzZXI6e319LF9JPXtHcmFtbWFyOlJ0KCgpPT5CemUoKSwiR3JhbW1hciIpLExhbmd1YWdlTWV0YURhdGE6UnQoKCk9PlZ6ZSwiTGFuZ3VhZ2VNZXRhRGF0YSIpLHBhcnNlcjp7fX0sVXplPS9hY2NEZXNjcig/OltcdCBdKjooW15cblxyXSopfFxzKnsoW159XSopfSkvLEh6ZT0vYWNjVGl0bGVbXHQgXSo6KFteXG5ccl0qKS8sV3plPS90aXRsZShbXHQgXVteXG5ccl0qfCkvLFl6ZT17QUNDX0RFU0NSOlV6ZSxBQ0NfVElUTEU6SHplLFRJVExFOld6ZX0sVWc9Y2xhc3MgZXh0ZW5kcyBrMHtzdGF0aWN7byh0aGlzLCJBYnN0cmFjdE1lcm1haWRWYWx1ZUNvbnZlcnRlciIpfXN0YXRpY3tSdCh0aGlzLCJBYnN0cmFjdE1lcm1haWRWYWx1ZUNvbnZlcnRlciIpfXJ1bkNvbnZlcnRlcih0LGUscil7bGV0IG49dGhpcy5ydW5Db21tb25Db252ZXJ0ZXIodCxlLHIpO3JldHVybiBuPT09dm9pZCAwJiYobj10aGlzLnJ1bkN1c3RvbUNvbnZlcnRlcih0LGUscikpLG49PT12b2lkIDA/c3VwZXIucnVuQ29udmVydGVyKHQsZSxyKTpufXJ1bkNvbW1vbkNvbnZlcnRlcih0LGUscil7bGV0IG49WXplW3QubmFtZV07aWYobj09PXZvaWQgMClyZXR1cm47bGV0IGk9bi5leGVjKGUpO2lmKGkhPT1udWxsKXtpZihpWzFdIT09dm9pZCAwKXJldHVybiBpWzFdLnRyaW0oKS5yZXBsYWNlKC9bXHQgXXsyLH0vZ20sIiAiKTtpZihpWzJdIT09dm9pZCAwKXJldHVybiBpWzJdLnJlcGxhY2UoL15ccyovZ20sIiIpLnJlcGxhY2UoL1xzKyQvZ20sIiIpLnJlcGxhY2UoL1tcdCBdezIsfS9nbSwiICIpLnJlcGxhY2UoL1tcblxyXXsyLH0vZ20sYApgKX19fSxBMD1jbGFzcyBleHRlbmRzIFVne3N0YXRpY3tvKHRoaXMsIkNvbW1vblZhbHVlQ29udmVydGVyIil9c3RhdGlje1J0KHRoaXMsIkNvbW1vblZhbHVlQ29udmVydGVyIil9cnVuQ3VzdG9tQ29udmVydGVyKHQsZSxyKXt9fSxpbD1jbGFzcyBleHRlbmRzIFQwe3N0YXRpY3tvKHRoaXMsIkFic3RyYWN0TWVybWFpZFRva2VuQnVpbGRlciIpfXN0YXRpY3tSdCh0aGlzLCJBYnN0cmFjdE1lcm1haWRUb2tlbkJ1aWxkZXIiKX1jb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMua2V5d29yZHM9bmV3IFNldCh0KX1idWlsZEtleXdvcmRUb2tlbnModCxlLHIpe2xldCBuPXN1cGVyLmJ1aWxkS2V5d29yZFRva2Vucyh0LGUscik7cmV0dXJuIG4uZm9yRWFjaChpPT57dGhpcy5rZXl3b3Jkcy5oYXMoaS5uYW1lKSYmaS5QQVRURVJOIT09dm9pZCAwJiYoaS5QQVRURVJOPW5ldyBSZWdFeHAoaS5QQVRURVJOLnRvU3RyaW5nKCkrIig/Oig/PSUlKXwoPyFcXFMpKSIpKX0pLG59fSxxemU9Y2xhc3MgZXh0ZW5kcyBpbHtzdGF0aWN7byh0aGlzLCJDb21tb25Ub2tlbkJ1aWxkZXIiKX1zdGF0aWN7UnQodGhpcywiQ29tbW9uVG9rZW5CdWlsZGVyIil9fX0pO2Z1bmN0aW9uIG5FKHQ9dm8pe2xldCBlPVdpKHlvKHQpLFdsKSxyPVdpKGdvKHtzaGFyZWQ6ZX0pLF9JLHJFKTtyZXR1cm4gZS5TZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXIocikse3NoYXJlZDplLEdpdEdyYXBoOnJ9fXZhciBYemUsckUsTEk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjthbCgpO1djKCk7WHplPWNsYXNzIGV4dGVuZHMgaWx7c3RhdGlje28odGhpcywiR2l0R3JhcGhUb2tlbkJ1aWxkZXIiKX1zdGF0aWN7UnQodGhpcywiR2l0R3JhcGhUb2tlbkJ1aWxkZXIiKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKFsiZ2l0R3JhcGgiXSl9fSxyRT17cGFyc2VyOntUb2tlbkJ1aWxkZXI6UnQoKCk9Pm5ldyBYemUsIlRva2VuQnVpbGRlciIpLFZhbHVlQ29udmVydGVyOlJ0KCgpPT5uZXcgQTAsIlZhbHVlQ29udmVydGVyIil9fTtvKG5FLCJjcmVhdGVHaXRHcmFwaFNlcnZpY2VzIik7UnQobkUsImNyZWF0ZUdpdEdyYXBoU2VydmljZXMiKX0pO2Z1bmN0aW9uIGFFKHQ9dm8pe2xldCBlPVdpKHlvKHQpLFdsKSxyPVdpKGdvKHtzaGFyZWQ6ZX0pLEVJLGlFKTtyZXR1cm4gZS5TZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXIocikse3NoYXJlZDplLEluZm86cn19dmFyIGp6ZSxpRSxEST1NKCgpPT57InVzZSBzdHJpY3QiO2FsKCk7V2MoKTtqemU9Y2xhc3MgZXh0ZW5kcyBpbHtzdGF0aWN7byh0aGlzLCJJbmZvVG9rZW5CdWlsZGVyIil9c3RhdGlje1J0KHRoaXMsIkluZm9Ub2tlbkJ1aWxkZXIiKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKFsiaW5mbyIsInNob3dJbmZvIl0pfX0saUU9e3BhcnNlcjp7VG9rZW5CdWlsZGVyOlJ0KCgpPT5uZXcganplLCJUb2tlbkJ1aWxkZXIiKSxWYWx1ZUNvbnZlcnRlcjpSdCgoKT0+bmV3IEEwLCJWYWx1ZUNvbnZlcnRlciIpfX07byhhRSwiY3JlYXRlSW5mb1NlcnZpY2VzIik7UnQoYUUsImNyZWF0ZUluZm9TZXJ2aWNlcyIpfSk7ZnVuY3Rpb24gb0UodD12byl7bGV0IGU9V2koeW8odCksV2wpLHI9V2koZ28oe3NoYXJlZDplfSksU0ksc0UpO3JldHVybiBlLlNlcnZpY2VSZWdpc3RyeS5yZWdpc3RlcihyKSx7c2hhcmVkOmUsUGFja2V0OnJ9fXZhciBLemUsc0UsTkk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjthbCgpO1djKCk7S3plPWNsYXNzIGV4dGVuZHMgaWx7c3RhdGlje28odGhpcywiUGFja2V0VG9rZW5CdWlsZGVyIil9c3RhdGlje1J0KHRoaXMsIlBhY2tldFRva2VuQnVpbGRlciIpfWNvbnN0cnVjdG9yKCl7c3VwZXIoWyJwYWNrZXQtYmV0YSJdKX19LHNFPXtwYXJzZXI6e1Rva2VuQnVpbGRlcjpSdCgoKT0+bmV3IEt6ZSwiVG9rZW5CdWlsZGVyIiksVmFsdWVDb252ZXJ0ZXI6UnQoKCk9Pm5ldyBBMCwiVmFsdWVDb252ZXJ0ZXIiKX19O28ob0UsImNyZWF0ZVBhY2tldFNlcnZpY2VzIik7UnQob0UsImNyZWF0ZVBhY2tldFNlcnZpY2VzIil9KTtmdW5jdGlvbiBjRSh0PXZvKXtsZXQgZT1XaSh5byh0KSxXbCkscj1XaShnbyh7c2hhcmVkOmV9KSxDSSxsRSk7cmV0dXJuIGUuU2VydmljZVJlZ2lzdHJ5LnJlZ2lzdGVyKHIpLHtzaGFyZWQ6ZSxQaWU6cn19dmFyIFF6ZSxaemUsbEUsUkk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjthbCgpO1djKCk7UXplPWNsYXNzIGV4dGVuZHMgaWx7c3RhdGlje28odGhpcywiUGllVG9rZW5CdWlsZGVyIil9c3RhdGlje1J0KHRoaXMsIlBpZVRva2VuQnVpbGRlciIpfWNvbnN0cnVjdG9yKCl7c3VwZXIoWyJwaWUiLCJzaG93RGF0YSJdKX19LFp6ZT1jbGFzcyBleHRlbmRzIFVne3N0YXRpY3tvKHRoaXMsIlBpZVZhbHVlQ29udmVydGVyIil9c3RhdGlje1J0KHRoaXMsIlBpZVZhbHVlQ29udmVydGVyIil9cnVuQ3VzdG9tQ29udmVydGVyKHQsZSxyKXtpZih0Lm5hbWU9PT0iUElFX1NFQ1RJT05fTEFCRUwiKXJldHVybiBlLnJlcGxhY2UoLyIvZywiIikudHJpbSgpfX0sbEU9e3BhcnNlcjp7VG9rZW5CdWlsZGVyOlJ0KCgpPT5uZXcgUXplLCJUb2tlbkJ1aWxkZXIiKSxWYWx1ZUNvbnZlcnRlcjpSdCgoKT0+bmV3IFp6ZSwiVmFsdWVDb252ZXJ0ZXIiKX19O28oY0UsImNyZWF0ZVBpZVNlcnZpY2VzIik7UnQoY0UsImNyZWF0ZVBpZVNlcnZpY2VzIil9KTtmdW5jdGlvbiBoRSh0PXZvKXtsZXQgZT1XaSh5byh0KSxXbCkscj1XaShnbyh7c2hhcmVkOmV9KSxBSSx1RSk7cmV0dXJuIGUuU2VydmljZVJlZ2lzdHJ5LnJlZ2lzdGVyKHIpLHtzaGFyZWQ6ZSxBcmNoaXRlY3R1cmU6cn19dmFyIEp6ZSxlR2UsdUUsTUk9TSgoKT0+eyJ1c2Ugc3RyaWN0IjthbCgpO1djKCk7SnplPWNsYXNzIGV4dGVuZHMgaWx7c3RhdGlje28odGhpcywiQXJjaGl0ZWN0dXJlVG9rZW5CdWlsZGVyIil9c3RhdGlje1J0KHRoaXMsIkFyY2hpdGVjdHVyZVRva2VuQnVpbGRlciIpfWNvbnN0cnVjdG9yKCl7c3VwZXIoWyJhcmNoaXRlY3R1cmUiXSl9fSxlR2U9Y2xhc3MgZXh0ZW5kcyBVZ3tzdGF0aWN7byh0aGlzLCJBcmNoaXRlY3R1cmVWYWx1ZUNvbnZlcnRlciIpfXN0YXRpY3tSdCh0aGlzLCJBcmNoaXRlY3R1cmVWYWx1ZUNvbnZlcnRlciIpfXJ1bkN1c3RvbUNvbnZlcnRlcih0LGUscil7aWYodC5uYW1lPT09IkFSQ0hfSUNPTiIpcmV0dXJuIGUucmVwbGFjZSgvWygpXS9nLCIiKS50cmltKCk7aWYodC5uYW1lPT09IkFSQ0hfVEVYVF9JQ09OIilyZXR1cm4gZS5yZXBsYWNlKC9bIigpXS9nLCIiKTtpZih0Lm5hbWU9PT0iQVJDSF9USVRMRSIpcmV0dXJuIGUucmVwbGFjZSgvW1tcXV0vZywiIikudHJpbSgpfX0sdUU9e3BhcnNlcjp7VG9rZW5CdWlsZGVyOlJ0KCgpPT5uZXcgSnplLCJUb2tlbkJ1aWxkZXIiKSxWYWx1ZUNvbnZlcnRlcjpSdCgoKT0+bmV3IGVHZSwiVmFsdWVDb252ZXJ0ZXIiKX19O28oaEUsImNyZWF0ZUFyY2hpdGVjdHVyZVNlcnZpY2VzIik7UnQoaEUsImNyZWF0ZUFyY2hpdGVjdHVyZVNlcnZpY2VzIil9KTt2YXIgdXVlPXt9O3ZyKHV1ZSx7SW5mb01vZHVsZTooKT0+aUUsY3JlYXRlSW5mb1NlcnZpY2VzOigpPT5hRX0pO3ZhciBodWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtESSgpO2FsKCl9KTt2YXIgZnVlPXt9O3ZyKGZ1ZSx7UGFja2V0TW9kdWxlOigpPT5zRSxjcmVhdGVQYWNrZXRTZXJ2aWNlczooKT0+b0V9KTt2YXIgZHVlPU0oKCk9PnsidXNlIHN0cmljdCI7TkkoKTthbCgpfSk7dmFyIHB1ZT17fTt2cihwdWUse1BpZU1vZHVsZTooKT0+bEUsY3JlYXRlUGllU2VydmljZXM6KCk9PmNFfSk7dmFyIG11ZT1NKCgpPT57InVzZSBzdHJpY3QiO1JJKCk7YWwoKX0pO3ZhciBndWU9e307dnIoZ3VlLHtBcmNoaXRlY3R1cmVNb2R1bGU6KCk9PnVFLGNyZWF0ZUFyY2hpdGVjdHVyZVNlcnZpY2VzOigpPT5oRX0pO3ZhciB5dWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtNSSgpO2FsKCl9KTt2YXIgdnVlPXt9O3ZyKHZ1ZSx7R2l0R3JhcGhNb2R1bGU6KCk9PnJFLGNyZWF0ZUdpdEdyYXBoU2VydmljZXM6KCk9Pm5FfSk7dmFyIHh1ZT1NKCgpPT57InVzZSBzdHJpY3QiO0xJKCk7YWwoKX0pO2FzeW5jIGZ1bmN0aW9uIFlsKHQsZSl7bGV0IHI9dEdlW3RdO2lmKCFyKXRocm93IG5ldyBFcnJvcihgVW5rbm93biBkaWFncmFtIHR5cGU6ICR7dH1gKTtfMFt0XXx8YXdhaXQgcigpO2xldCBpPV8wW3RdLnBhcnNlKGUpO2lmKGkubGV4ZXJFcnJvcnMubGVuZ3RoPjB8fGkucGFyc2VyRXJyb3JzLmxlbmd0aD4wKXRocm93IG5ldyByR2UoaSk7cmV0dXJuIGkudmFsdWV9dmFyIF8wLHRHZSxyR2UsSGc9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMSSgpO0RJKCk7TkkoKTtSSSgpO01JKCk7YWwoKTtfMD17fSx0R2U9e2luZm86UnQoYXN5bmMoKT0+e2xldHtjcmVhdGVJbmZvU2VydmljZXM6dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGh1ZSgpLHV1ZSkpLGU9dCgpLkluZm8ucGFyc2VyLkxhbmdpdW1QYXJzZXI7XzAuaW5mbz1lfSwiaW5mbyIpLHBhY2tldDpSdChhc3luYygpPT57bGV0e2NyZWF0ZVBhY2tldFNlcnZpY2VzOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihkdWUoKSxmdWUpKSxlPXQoKS5QYWNrZXQucGFyc2VyLkxhbmdpdW1QYXJzZXI7XzAucGFja2V0PWV9LCJwYWNrZXQiKSxwaWU6UnQoYXN5bmMoKT0+e2xldHtjcmVhdGVQaWVTZXJ2aWNlczp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4obXVlKCkscHVlKSksZT10KCkuUGllLnBhcnNlci5MYW5naXVtUGFyc2VyO18wLnBpZT1lfSwicGllIiksYXJjaGl0ZWN0dXJlOlJ0KGFzeW5jKCk9PntsZXR7Y3JlYXRlQXJjaGl0ZWN0dXJlU2VydmljZXM6dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHl1ZSgpLGd1ZSkpLGU9dCgpLkFyY2hpdGVjdHVyZS5wYXJzZXIuTGFuZ2l1bVBhcnNlcjtfMC5hcmNoaXRlY3R1cmU9ZX0sImFyY2hpdGVjdHVyZSIpLGdpdEdyYXBoOlJ0KGFzeW5jKCk9PntsZXR7Y3JlYXRlR2l0R3JhcGhTZXJ2aWNlczp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oeHVlKCksdnVlKSksZT10KCkuR2l0R3JhcGgucGFyc2VyLkxhbmdpdW1QYXJzZXI7XzAuZ2l0R3JhcGg9ZX0sImdpdEdyYXBoIil9O28oWWwsInBhcnNlIik7UnQoWWwsInBhcnNlIik7ckdlPWNsYXNzIGV4dGVuZHMgRXJyb3J7c3RhdGlje28odGhpcywiTWVybWFpZFBhcnNlRXJyb3IiKX1jb25zdHJ1Y3Rvcih0KXtsZXQgZT10LmxleGVyRXJyb3JzLm1hcChuPT5uLm1lc3NhZ2UpLmpvaW4oYApgKSxyPXQucGFyc2VyRXJyb3JzLm1hcChuPT5uLm1lc3NhZ2UpLmpvaW4oYApgKTtzdXBlcihgUGFyc2luZyBmYWlsZWQ6ICR7ZX0gJHtyfWApLHRoaXMucmVzdWx0PXR9c3RhdGlje1J0KHRoaXMsIk1lcm1haWRQYXJzZUVycm9yIil9fX0pO2Z1bmN0aW9uIHlmKHQsZSl7dC5hY2NEZXNjciYmZS5zZXRBY2NEZXNjcmlwdGlvbj8uKHQuYWNjRGVzY3IpLHQuYWNjVGl0bGUmJmUuc2V0QWNjVGl0bGU/Lih0LmFjY1RpdGxlKSx0LnRpdGxlJiZlLnNldERpYWdyYW1UaXRsZT8uKHQudGl0bGUpfXZhciBUeD1NKCgpPT57InVzZSBzdHJpY3QiO28oeWYsInBvcHVsYXRlQ29tbW9uRGIiKX0pO3ZhciBqcixmRT1NKCgpPT57InVzZSBzdHJpY3QiO2pyPXtOT1JNQUw6MCxSRVZFUlNFOjEsSElHSExJR0hUOjIsTUVSR0U6MyxDSEVSUllfUElDSzo0fX0pO3ZhciB2ZixkRT1NKCgpPT57InVzZSBzdHJpY3QiO3ZmPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuaW5pdD1lO3RoaXMucmVjb3Jkcz10aGlzLmluaXQoKX1zdGF0aWN7byh0aGlzLCJJbXBlcmF0aXZlU3RhdGUiKX1yZXNldCgpe3RoaXMucmVjb3Jkcz10aGlzLmluaXQoKX19fSk7ZnVuY3Rpb24gSUkoKXtyZXR1cm4gbjkoe2xlbmd0aDo3fSl9ZnVuY3Rpb24gaUdlKHQsZSl7bGV0IHI9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gdC5yZWR1Y2UoKG4saSk9PntsZXQgYT1lKGkpO3JldHVybiByW2FdfHwoclthXT0hMCxuLnB1c2goaSkpLG59LFtdKX1mdW5jdGlvbiBidWUodCxlLHIpe2xldCBuPXQuaW5kZXhPZihlKTtuPT09LTE/dC5wdXNoKHIpOnQuc3BsaWNlKG4sMSxyKX1mdW5jdGlvbiBUdWUodCl7bGV0IGU9dC5yZWR1Y2UoKGksYSk9Pmkuc2VxPmEuc2VxP2k6YSx0WzBdKSxyPSIiO3QuZm9yRWFjaChmdW5jdGlvbihpKXtpPT09ZT9yKz0iCSoiOnIrPSIJfCJ9KTtsZXQgbj1bcixlLmlkLGUuc2VxXTtmb3IobGV0IGkgaW4gVHQucmVjb3Jkcy5icmFuY2hlcylUdC5yZWNvcmRzLmJyYW5jaGVzLmdldChpKT09PWUuaWQmJm4ucHVzaChpKTtpZihZLmRlYnVnKG4uam9pbigiICIpKSxlLnBhcmVudHMmJmUucGFyZW50cy5sZW5ndGg9PTImJmUucGFyZW50c1swXSYmZS5wYXJlbnRzWzFdKXtsZXQgaT1UdC5yZWNvcmRzLmNvbW1pdHMuZ2V0KGUucGFyZW50c1swXSk7YnVlKHQsZSxpKSxlLnBhcmVudHNbMV0mJnQucHVzaChUdC5yZWNvcmRzLmNvbW1pdHMuZ2V0KGUucGFyZW50c1sxXSkpfWVsc2V7aWYoZS5wYXJlbnRzLmxlbmd0aD09MClyZXR1cm47aWYoZS5wYXJlbnRzWzBdKXtsZXQgaT1UdC5yZWNvcmRzLmNvbW1pdHMuZ2V0KGUucGFyZW50c1swXSk7YnVlKHQsZSxpKX19dD1pR2UodCxpPT5pLmlkKSxUdWUodCl9dmFyIG5HZSxMMCxUdCxhR2Usc0dlLG9HZSxsR2UsY0dlLHVHZSxoR2Usd3VlLGZHZSxkR2UscEdlLG1HZSxnR2Usa3VlLHlHZSx2R2UseEdlLHBFLE9JPU0oKCk9PnsidXNlIHN0cmljdCI7dXQoKTtocigpO1phKCk7ZnIoKTtBaSgpO2ZFKCk7ZEUoKTticygpO25HZT11ci5naXRHcmFwaCxMMD1vKCgpPT5Ecyh7Li4ubkdlLC4uLkNyKCkuZ2l0R3JhcGh9KSwiZ2V0Q29uZmlnIiksVHQ9bmV3IHZmKCgpPT57bGV0IHQ9TDAoKSxlPXQubWFpbkJyYW5jaE5hbWUscj10Lm1haW5CcmFuY2hPcmRlcjtyZXR1cm57bWFpbkJyYW5jaE5hbWU6ZSxjb21taXRzOm5ldyBNYXAsaGVhZDpudWxsLGJyYW5jaENvbmZpZzpuZXcgTWFwKFtbZSx7bmFtZTplLG9yZGVyOnJ9XV0pLGJyYW5jaGVzOm5ldyBNYXAoW1tlLG51bGxdXSksY3VyckJyYW5jaDplLGRpcmVjdGlvbjoiTFIiLHNlcTowLG9wdGlvbnM6e319fSk7byhJSSwiZ2V0SUQiKTtvKGlHZSwidW5pcUJ5Iik7YUdlPW8oZnVuY3Rpb24odCl7VHQucmVjb3Jkcy5kaXJlY3Rpb249dH0sInNldERpcmVjdGlvbiIpLHNHZT1vKGZ1bmN0aW9uKHQpe1kuZGVidWcoIm9wdGlvbnMgc3RyIix0KSx0PXQ/LnRyaW0oKSx0PXR8fCJ7fSI7dHJ5e1R0LnJlY29yZHMub3B0aW9ucz1KU09OLnBhcnNlKHQpfWNhdGNoKGUpe1kuZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgZ2l0R3JhcGggb3B0aW9ucyIsZS5tZXNzYWdlKX19LCJzZXRPcHRpb25zIiksb0dlPW8oZnVuY3Rpb24oKXtyZXR1cm4gVHQucmVjb3Jkcy5vcHRpb25zfSwiZ2V0T3B0aW9ucyIpLGxHZT1vKGZ1bmN0aW9uKHQpe2xldCBlPXQubXNnLHI9dC5pZCxuPXQudHlwZSxpPXQudGFncztZLmluZm8oImNvbW1pdCIsZSxyLG4saSksWS5kZWJ1ZygiRW50ZXJpbmcgY29tbWl0OiIsZSxyLG4saSk7bGV0IGE9TDAoKTtyPXFlLnNhbml0aXplVGV4dChyLGEpLGU9cWUuc2FuaXRpemVUZXh0KGUsYSksaT1pPy5tYXAobD0+cWUuc2FuaXRpemVUZXh0KGwsYSkpO2xldCBzPXtpZDpyfHxUdC5yZWNvcmRzLnNlcSsiLSIrSUkoKSxtZXNzYWdlOmUsc2VxOlR0LnJlY29yZHMuc2VxKyssdHlwZTpuPz9qci5OT1JNQUwsdGFnczppPz9bXSxwYXJlbnRzOlR0LnJlY29yZHMuaGVhZD09bnVsbD9bXTpbVHQucmVjb3Jkcy5oZWFkLmlkXSxicmFuY2g6VHQucmVjb3Jkcy5jdXJyQnJhbmNofTtUdC5yZWNvcmRzLmhlYWQ9cyxZLmluZm8oIm1haW4gYnJhbmNoIixhLm1haW5CcmFuY2hOYW1lKSxUdC5yZWNvcmRzLmNvbW1pdHMuc2V0KHMuaWQscyksVHQucmVjb3Jkcy5icmFuY2hlcy5zZXQoVHQucmVjb3Jkcy5jdXJyQnJhbmNoLHMuaWQpLFkuZGVidWcoImluIHB1c2hDb21taXQgIitzLmlkKX0sImNvbW1pdCIpLGNHZT1vKGZ1bmN0aW9uKHQpe2xldCBlPXQubmFtZSxyPXQub3JkZXI7aWYoZT1xZS5zYW5pdGl6ZVRleHQoZSxMMCgpKSxUdC5yZWNvcmRzLmJyYW5jaGVzLmhhcyhlKSl0aHJvdyBuZXcgRXJyb3IoYFRyeWluZyB0byBjcmVhdGUgYW4gZXhpc3RpbmcgYnJhbmNoLiAoSGVscDogRWl0aGVyIHVzZSBhIG5ldyBuYW1lIGlmIHlvdSB3YW50IGNyZWF0ZSBhIG5ldyBicmFuY2ggb3IgdHJ5IHVzaW5nICJjaGVja291dCAke2V9IilgKTtUdC5yZWNvcmRzLmJyYW5jaGVzLnNldChlLFR0LnJlY29yZHMuaGVhZCE9bnVsbD9UdC5yZWNvcmRzLmhlYWQuaWQ6bnVsbCksVHQucmVjb3Jkcy5icmFuY2hDb25maWcuc2V0KGUse25hbWU6ZSxvcmRlcjpyfSksd3VlKGUpLFkuZGVidWcoImluIGNyZWF0ZUJyYW5jaCIpfSwiYnJhbmNoIiksdUdlPW8odD0+e2xldCBlPXQuYnJhbmNoLHI9dC5pZCxuPXQudHlwZSxpPXQudGFncyxhPUwwKCk7ZT1xZS5zYW5pdGl6ZVRleHQoZSxhKSxyJiYocj1xZS5zYW5pdGl6ZVRleHQocixhKSk7bGV0IHM9VHQucmVjb3Jkcy5icmFuY2hlcy5nZXQoVHQucmVjb3Jkcy5jdXJyQnJhbmNoKSxsPVR0LnJlY29yZHMuYnJhbmNoZXMuZ2V0KGUpLHU9cz9UdC5yZWNvcmRzLmNvbW1pdHMuZ2V0KHMpOnZvaWQgMCxoPWw/VHQucmVjb3Jkcy5jb21taXRzLmdldChsKTp2b2lkIDA7aWYodSYmaCYmdS5icmFuY2g9PT1lKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IG1lcmdlIGJyYW5jaCAnJHtlfScgaW50byBpdHNlbGYuYCk7aWYoVHQucmVjb3Jkcy5jdXJyQnJhbmNoPT09ZSl7bGV0IHA9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQ2Fubm90IG1lcmdlIGEgYnJhbmNoIHRvIGl0c2VsZicpO3Rocm93IHAuaGFzaD17dGV4dDpgbWVyZ2UgJHtlfWAsdG9rZW46YG1lcmdlICR7ZX1gLGV4cGVjdGVkOlsiYnJhbmNoIGFiYyJdfSxwfWlmKHU9PT12b2lkIDB8fCF1KXtsZXQgcD1uZXcgRXJyb3IoYEluY29ycmVjdCB1c2FnZSBvZiAibWVyZ2UiLiBDdXJyZW50IGJyYW5jaCAoJHtUdC5yZWNvcmRzLmN1cnJCcmFuY2h9KWhhcyBubyBjb21taXRzYCk7dGhyb3cgcC5oYXNoPXt0ZXh0OmBtZXJnZSAke2V9YCx0b2tlbjpgbWVyZ2UgJHtlfWAsZXhwZWN0ZWQ6WyJjb21taXQiXX0scH1pZighVHQucmVjb3Jkcy5icmFuY2hlcy5oYXMoZSkpe2xldCBwPW5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mICJtZXJnZSIuIEJyYW5jaCB0byBiZSBtZXJnZWQgKCcrZSsiKSBkb2VzIG5vdCBleGlzdCIpO3Rocm93IHAuaGFzaD17dGV4dDpgbWVyZ2UgJHtlfWAsdG9rZW46YG1lcmdlICR7ZX1gLGV4cGVjdGVkOltgYnJhbmNoICR7ZX1gXX0scH1pZihoPT09dm9pZCAwfHwhaCl7bGV0IHA9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQnJhbmNoIHRvIGJlIG1lcmdlZCAoJytlKyIpIGhhcyBubyBjb21taXRzIik7dGhyb3cgcC5oYXNoPXt0ZXh0OmBtZXJnZSAke2V9YCx0b2tlbjpgbWVyZ2UgJHtlfWAsZXhwZWN0ZWQ6WyciY29tbWl0IiddfSxwfWlmKHU9PT1oKXtsZXQgcD1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAibWVyZ2UiLiBCb3RoIGJyYW5jaGVzIGhhdmUgc2FtZSBoZWFkJyk7dGhyb3cgcC5oYXNoPXt0ZXh0OmBtZXJnZSAke2V9YCx0b2tlbjpgbWVyZ2UgJHtlfWAsZXhwZWN0ZWQ6WyJicmFuY2ggYWJjIl19LHB9aWYociYmVHQucmVjb3Jkcy5jb21taXRzLmhhcyhyKSl7bGV0IHA9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQ29tbWl0IHdpdGggaWQ6JytyKyIgYWxyZWFkeSBleGlzdHMsIHVzZSBkaWZmZXJlbnQgY3VzdG9tIElkIik7dGhyb3cgcC5oYXNoPXt0ZXh0OmBtZXJnZSAke2V9ICR7cn0gJHtufSAke2k/LmpvaW4oIiAiKX1gLHRva2VuOmBtZXJnZSAke2V9ICR7cn0gJHtufSAke2k/LmpvaW4oIiAiKX1gLGV4cGVjdGVkOltgbWVyZ2UgJHtlfSAke3J9X1VOSVFVRSAke259ICR7aT8uam9pbigiICIpfWBdfSxwfWxldCBmPWx8fCIiLGQ9e2lkOnJ8fGAke1R0LnJlY29yZHMuc2VxfS0ke0lJKCl9YCxtZXNzYWdlOmBtZXJnZWQgYnJhbmNoICR7ZX0gaW50byAke1R0LnJlY29yZHMuY3VyckJyYW5jaH1gLHNlcTpUdC5yZWNvcmRzLnNlcSsrLHBhcmVudHM6VHQucmVjb3Jkcy5oZWFkPT1udWxsP1tdOltUdC5yZWNvcmRzLmhlYWQuaWQsZl0sYnJhbmNoOlR0LnJlY29yZHMuY3VyckJyYW5jaCx0eXBlOmpyLk1FUkdFLGN1c3RvbVR5cGU6bixjdXN0b21JZDohIXIsdGFnczppPz9bXX07VHQucmVjb3Jkcy5oZWFkPWQsVHQucmVjb3Jkcy5jb21taXRzLnNldChkLmlkLGQpLFR0LnJlY29yZHMuYnJhbmNoZXMuc2V0KFR0LnJlY29yZHMuY3VyckJyYW5jaCxkLmlkKSxZLmRlYnVnKFR0LnJlY29yZHMuYnJhbmNoZXMpLFkuZGVidWcoImluIG1lcmdlQnJhbmNoIil9LCJtZXJnZSIpLGhHZT1vKGZ1bmN0aW9uKHQpe2xldCBlPXQuaWQscj10LnRhcmdldElkLG49dC50YWdzLGk9dC5wYXJlbnQ7WS5kZWJ1ZygiRW50ZXJpbmcgY2hlcnJ5UGljazoiLGUscixuKTtsZXQgYT1MMCgpO2lmKGU9cWUuc2FuaXRpemVUZXh0KGUsYSkscj1xZS5zYW5pdGl6ZVRleHQocixhKSxuPW4/Lm1hcCh1PT5xZS5zYW5pdGl6ZVRleHQodSxhKSksaT1xZS5zYW5pdGl6ZVRleHQoaSxhKSwhZXx8IVR0LnJlY29yZHMuY29tbWl0cy5oYXMoZSkpe2xldCB1PW5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mICJjaGVycnlQaWNrIi4gU291cmNlIGNvbW1pdCBpZCBzaG91bGQgZXhpc3QgYW5kIHByb3ZpZGVkJyk7dGhyb3cgdS5oYXNoPXt0ZXh0OmBjaGVycnlQaWNrICR7ZX0gJHtyfWAsdG9rZW46YGNoZXJyeVBpY2sgJHtlfSAke3J9YCxleHBlY3RlZDpbImNoZXJyeS1waWNrIGFiYyJdfSx1fWxldCBzPVR0LnJlY29yZHMuY29tbWl0cy5nZXQoZSk7aWYocz09PXZvaWQgMHx8IXMpdGhyb3cgbmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgImNoZXJyeVBpY2siLiBTb3VyY2UgY29tbWl0IGlkIHNob3VsZCBleGlzdCBhbmQgcHJvdmlkZWQnKTtpZihpJiYhKEFycmF5LmlzQXJyYXkocy5wYXJlbnRzKSYmcy5wYXJlbnRzLmluY2x1ZGVzKGkpKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgb3BlcmF0aW9uOiBUaGUgc3BlY2lmaWVkIHBhcmVudCBjb21taXQgaXMgbm90IGFuIGltbWVkaWF0ZSBwYXJlbnQgb2YgdGhlIGNoZXJyeS1waWNrZWQgY29tbWl0LiIpO2xldCBsPXMuYnJhbmNoO2lmKHMudHlwZT09PWpyLk1FUkdFJiYhaSl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCB1c2FnZSBvZiBjaGVycnktcGljazogSWYgdGhlIHNvdXJjZSBjb21taXQgaXMgYSBtZXJnZSBjb21taXQsIGFuIGltbWVkaWF0ZSBwYXJlbnQgY29tbWl0IG11c3QgYmUgc3BlY2lmaWVkLiIpO2lmKCFyfHwhVHQucmVjb3Jkcy5jb21taXRzLmhhcyhyKSl7aWYobD09PVR0LnJlY29yZHMuY3VyckJyYW5jaCl7bGV0IGQ9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgImNoZXJyeVBpY2siLiBTb3VyY2UgY29tbWl0IGlzIGFscmVhZHkgb24gY3VycmVudCBicmFuY2gnKTt0aHJvdyBkLmhhc2g9e3RleHQ6YGNoZXJyeVBpY2sgJHtlfSAke3J9YCx0b2tlbjpgY2hlcnJ5UGljayAke2V9ICR7cn1gLGV4cGVjdGVkOlsiY2hlcnJ5LXBpY2sgYWJjIl19LGR9bGV0IHU9VHQucmVjb3Jkcy5icmFuY2hlcy5nZXQoVHQucmVjb3Jkcy5jdXJyQnJhbmNoKTtpZih1PT09dm9pZCAwfHwhdSl7bGV0IGQ9bmV3IEVycm9yKGBJbmNvcnJlY3QgdXNhZ2Ugb2YgImNoZXJyeS1waWNrIi4gQ3VycmVudCBicmFuY2ggKCR7VHQucmVjb3Jkcy5jdXJyQnJhbmNofSloYXMgbm8gY29tbWl0c2ApO3Rocm93IGQuaGFzaD17dGV4dDpgY2hlcnJ5UGljayAke2V9ICR7cn1gLHRva2VuOmBjaGVycnlQaWNrICR7ZX0gJHtyfWAsZXhwZWN0ZWQ6WyJjaGVycnktcGljayBhYmMiXX0sZH1sZXQgaD1UdC5yZWNvcmRzLmNvbW1pdHMuZ2V0KHUpO2lmKGg9PT12b2lkIDB8fCFoKXtsZXQgZD1uZXcgRXJyb3IoYEluY29ycmVjdCB1c2FnZSBvZiAiY2hlcnJ5LXBpY2siLiBDdXJyZW50IGJyYW5jaCAoJHtUdC5yZWNvcmRzLmN1cnJCcmFuY2h9KWhhcyBubyBjb21taXRzYCk7dGhyb3cgZC5oYXNoPXt0ZXh0OmBjaGVycnlQaWNrICR7ZX0gJHtyfWAsdG9rZW46YGNoZXJyeVBpY2sgJHtlfSAke3J9YCxleHBlY3RlZDpbImNoZXJyeS1waWNrIGFiYyJdfSxkfWxldCBmPXtpZDpUdC5yZWNvcmRzLnNlcSsiLSIrSUkoKSxtZXNzYWdlOmBjaGVycnktcGlja2VkICR7cz8ubWVzc2FnZX0gaW50byAke1R0LnJlY29yZHMuY3VyckJyYW5jaH1gLHNlcTpUdC5yZWNvcmRzLnNlcSsrLHBhcmVudHM6VHQucmVjb3Jkcy5oZWFkPT1udWxsP1tdOltUdC5yZWNvcmRzLmhlYWQuaWQscy5pZF0sYnJhbmNoOlR0LnJlY29yZHMuY3VyckJyYW5jaCx0eXBlOmpyLkNIRVJSWV9QSUNLLHRhZ3M6bj9uLmZpbHRlcihCb29sZWFuKTpbYGNoZXJyeS1waWNrOiR7cy5pZH0ke3MudHlwZT09PWpyLk1FUkdFP2B8cGFyZW50OiR7aX1gOiIifWBdfTtUdC5yZWNvcmRzLmhlYWQ9ZixUdC5yZWNvcmRzLmNvbW1pdHMuc2V0KGYuaWQsZiksVHQucmVjb3Jkcy5icmFuY2hlcy5zZXQoVHQucmVjb3Jkcy5jdXJyQnJhbmNoLGYuaWQpLFkuZGVidWcoVHQucmVjb3Jkcy5icmFuY2hlcyksWS5kZWJ1ZygiaW4gY2hlcnJ5UGljayIpfX0sImNoZXJyeVBpY2siKSx3dWU9byhmdW5jdGlvbih0KXtpZih0PXFlLnNhbml0aXplVGV4dCh0LEwwKCkpLFR0LnJlY29yZHMuYnJhbmNoZXMuaGFzKHQpKXtUdC5yZWNvcmRzLmN1cnJCcmFuY2g9dDtsZXQgZT1UdC5yZWNvcmRzLmJyYW5jaGVzLmdldChUdC5yZWNvcmRzLmN1cnJCcmFuY2gpO2U9PT12b2lkIDB8fCFlP1R0LnJlY29yZHMuaGVhZD1udWxsOlR0LnJlY29yZHMuaGVhZD1UdC5yZWNvcmRzLmNvbW1pdHMuZ2V0KGUpPz9udWxsfWVsc2V7bGV0IGU9bmV3IEVycm9yKGBUcnlpbmcgdG8gY2hlY2tvdXQgYnJhbmNoIHdoaWNoIGlzIG5vdCB5ZXQgY3JlYXRlZC4gKEhlbHAgdHJ5IHVzaW5nICJicmFuY2ggJHt0fSIpYCk7dGhyb3cgZS5oYXNoPXt0ZXh0OmBjaGVja291dCAke3R9YCx0b2tlbjpgY2hlY2tvdXQgJHt0fWAsZXhwZWN0ZWQ6W2BicmFuY2ggJHt0fWBdfSxlfX0sImNoZWNrb3V0Iik7byhidWUsInVwc2VydCIpO28oVHVlLCJwcmV0dHlQcmludENvbW1pdEhpc3RvcnkiKTtmR2U9byhmdW5jdGlvbigpe1kuZGVidWcoVHQucmVjb3Jkcy5jb21taXRzKTtsZXQgdD1rdWUoKVswXTtUdWUoW3RdKX0sInByZXR0eVByaW50IiksZEdlPW8oZnVuY3Rpb24oKXtUdC5yZXNldCgpLExyKCl9LCJjbGVhciIpLHBHZT1vKGZ1bmN0aW9uKCl7cmV0dXJuWy4uLlR0LnJlY29yZHMuYnJhbmNoQ29uZmlnLnZhbHVlcygpXS5tYXAoKGUscik9PmUub3JkZXIhPT1udWxsJiZlLm9yZGVyIT09dm9pZCAwP2U6ey4uLmUsb3JkZXI6cGFyc2VGbG9hdChgMC4ke3J9YCl9KS5zb3J0KChlLHIpPT4oZS5vcmRlcj8/MCktKHIub3JkZXI/PzApKS5tYXAoKHtuYW1lOmV9KT0+KHtuYW1lOmV9KSl9LCJnZXRCcmFuY2hlc0FzT2JqQXJyYXkiKSxtR2U9byhmdW5jdGlvbigpe3JldHVybiBUdC5yZWNvcmRzLmJyYW5jaGVzfSwiZ2V0QnJhbmNoZXMiKSxnR2U9byhmdW5jdGlvbigpe3JldHVybiBUdC5yZWNvcmRzLmNvbW1pdHN9LCJnZXRDb21taXRzIiksa3VlPW8oZnVuY3Rpb24oKXtsZXQgdD1bLi4uVHQucmVjb3Jkcy5jb21taXRzLnZhbHVlcygpXTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe1kuZGVidWcoZS5pZCl9KSx0LnNvcnQoKGUscik9PmUuc2VxLXIuc2VxKSx0fSwiZ2V0Q29tbWl0c0FycmF5IikseUdlPW8oZnVuY3Rpb24oKXtyZXR1cm4gVHQucmVjb3Jkcy5jdXJyQnJhbmNofSwiZ2V0Q3VycmVudEJyYW5jaCIpLHZHZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIFR0LnJlY29yZHMuZGlyZWN0aW9ufSwiZ2V0RGlyZWN0aW9uIikseEdlPW8oZnVuY3Rpb24oKXtyZXR1cm4gVHQucmVjb3Jkcy5oZWFkfSwiZ2V0SGVhZCIpLHBFPXtjb21taXRUeXBlOmpyLGdldENvbmZpZzpMMCxzZXREaXJlY3Rpb246YUdlLHNldE9wdGlvbnM6c0dlLGdldE9wdGlvbnM6b0dlLGNvbW1pdDpsR2UsYnJhbmNoOmNHZSxtZXJnZTp1R2UsY2hlcnJ5UGljazpoR2UsY2hlY2tvdXQ6d3VlLHByZXR0eVByaW50OmZHZSxjbGVhcjpkR2UsZ2V0QnJhbmNoZXNBc09iakFycmF5OnBHZSxnZXRCcmFuY2hlczptR2UsZ2V0Q29tbWl0czpnR2UsZ2V0Q29tbWl0c0FycmF5Omt1ZSxnZXRDdXJyZW50QnJhbmNoOnlHZSxnZXREaXJlY3Rpb246dkdlLGdldEhlYWQ6eEdlLHNldEFjY1RpdGxlOk1yLGdldEFjY1RpdGxlOkJyLGdldEFjY0Rlc2NyaXB0aW9uOnpyLHNldEFjY0Rlc2NyaXB0aW9uOkZyLHNldERpYWdyYW1UaXRsZTpjbixnZXREaWFncmFtVGl0bGU6SnJ9fSk7dmFyIGJHZSx3R2UsVEdlLGtHZSxFR2UsU0dlLENHZSxFdWUsU3VlPU0oKCk9PnsidXNlIHN0cmljdCI7SGcoKTt1dCgpO1R4KCk7T0koKTtmRSgpO2JHZT1vKCh0LGUpPT57eWYodCxlKSx0LmRpciYmZS5zZXREaXJlY3Rpb24odC5kaXIpO2ZvcihsZXQgciBvZiB0LnN0YXRlbWVudHMpd0dlKHIsZSl9LCJwb3B1bGF0ZSIpLHdHZT1vKCh0LGUpPT57bGV0IG49e0NvbW1pdDpvKGk9PmUuY29tbWl0KFRHZShpKSksIkNvbW1pdCIpLEJyYW5jaDpvKGk9PmUuYnJhbmNoKGtHZShpKSksIkJyYW5jaCIpLE1lcmdlOm8oaT0+ZS5tZXJnZShFR2UoaSkpLCJNZXJnZSIpLENoZWNrb3V0Om8oaT0+ZS5jaGVja291dChTR2UoaSkpLCJDaGVja291dCIpLENoZXJyeVBpY2tpbmc6byhpPT5lLmNoZXJyeVBpY2soQ0dlKGkpKSwiQ2hlcnJ5UGlja2luZyIpfVt0LiR0eXBlXTtuP24odCk6WS5lcnJvcihgVW5rbm93biBzdGF0ZW1lbnQgdHlwZTogJHt0LiR0eXBlfWApfSwicGFyc2VTdGF0ZW1lbnQiKSxUR2U9byh0PT4oe2lkOnQuaWQsbXNnOnQubWVzc2FnZT8/IiIsdHlwZTp0LnR5cGUhPT12b2lkIDA/anJbdC50eXBlXTpqci5OT1JNQUwsdGFnczp0LnRhZ3M/P3ZvaWQgMH0pLCJwYXJzZUNvbW1pdCIpLGtHZT1vKHQ9Pih7bmFtZTp0Lm5hbWUsb3JkZXI6dC5vcmRlcj8/MH0pLCJwYXJzZUJyYW5jaCIpLEVHZT1vKHQ9Pih7YnJhbmNoOnQuYnJhbmNoLGlkOnQuaWQ/PyIiLHR5cGU6dC50eXBlIT09dm9pZCAwP2pyW3QudHlwZV06dm9pZCAwLHRhZ3M6dC50YWdzPz92b2lkIDB9KSwicGFyc2VNZXJnZSIpLFNHZT1vKHQ9PnQuYnJhbmNoLCJwYXJzZUNoZWNrb3V0IiksQ0dlPW8odD0+KHtpZDp0LmlkLHRhcmdldElkOiIiLHRhZ3M6dC50YWdzPy5sZW5ndGg9PT0wP3ZvaWQgMDp0LnRhZ3MscGFyZW50OnQucGFyZW50fSksInBhcnNlQ2hlcnJ5UGlja2luZyIpLEV1ZT17cGFyc2U6byhhc3luYyB0PT57bGV0IGU9YXdhaXQgWWwoImdpdEdyYXBoIix0KTtZLmRlYnVnKGUpLGJHZShlLHBFKX0sInBhcnNlIil9fSk7dmFyIEFHZSxzbCxiZix3ZixZYyxadSxEMCxXcyxZcyxtRSxreCxnRSx4ZixScixfR2UsQXVlLF91ZSxMR2UsREdlLE5HZSxSR2UsTUdlLElHZSxPR2UsUEdlLEJHZSxGR2UsekdlLEdHZSxDdWUsJEdlLEV4LFZHZSxVR2UsSEdlLFdHZSxZR2UsTHVlLER1ZT1NKCgpPT57InVzZSBzdHJpY3QiO3ByKCk7VnQoKTt1dCgpO2hyKCk7ZkUoKTtBR2U9cGUoKSxzbD1BR2U/LmdpdEdyYXBoLGJmPTEwLHdmPTQwLFljPTQsWnU9MixEMD04LFdzPW5ldyBNYXAsWXM9bmV3IE1hcCxtRT0zMCxreD1uZXcgTWFwLGdFPVtdLHhmPTAsUnI9IkxSIixfR2U9bygoKT0+e1dzLmNsZWFyKCksWXMuY2xlYXIoKSxreC5jbGVhcigpLHhmPTAsZ0U9W10sUnI9IkxSIn0sImNsZWFyIiksQXVlPW8odD0+e2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7cmV0dXJuKHR5cGVvZiB0PT0ic3RyaW5nIj90LnNwbGl0KC9cXG58XG58PGJyXHMqXC8/Pi9naSk6dCkuZm9yRWFjaChuPT57bGV0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRzcGFuIik7aS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSxpLnNldEF0dHJpYnV0ZSgiZHkiLCIxZW0iKSxpLnNldEF0dHJpYnV0ZSgieCIsIjAiKSxpLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJyb3ciKSxpLnRleHRDb250ZW50PW4udHJpbSgpLGUuYXBwZW5kQ2hpbGQoaSl9KSxlfSwiZHJhd1RleHQiKSxfdWU9byh0PT57bGV0IGUscixuO3JldHVybiBScj09PSJCVCI/KHI9bygoaSxhKT0+aTw9YSwiY29tcGFyaXNvbkZ1bmMiKSxuPTEvMCk6KHI9bygoaSxhKT0+aT49YSwiY29tcGFyaXNvbkZ1bmMiKSxuPTApLHQuZm9yRWFjaChpPT57bGV0IGE9UnI9PT0iVEIifHxScj09IkJUIj9Zcy5nZXQoaSk/Lnk6WXMuZ2V0KGkpPy54O2EhPT12b2lkIDAmJnIoYSxuKSYmKGU9aSxuPWEpfSksZX0sImZpbmRDbG9zZXN0UGFyZW50IiksTEdlPW8odD0+e2xldCBlPSIiLHI9MS8wO3JldHVybiB0LmZvckVhY2gobj0+e2xldCBpPVlzLmdldChuKS55O2k8PXImJihlPW4scj1pKX0pLGV8fHZvaWQgMH0sImZpbmRDbG9zZXN0UGFyZW50QlQiKSxER2U9bygodCxlLHIpPT57bGV0IG49cixpPXIsYT1bXTt0LmZvckVhY2gocz0+e2xldCBsPWUuZ2V0KHMpO2lmKCFsKXRocm93IG5ldyBFcnJvcihgQ29tbWl0IG5vdCBmb3VuZCBmb3Iga2V5ICR7c31gKTtsLnBhcmVudHMubGVuZ3RoPyhuPVJHZShsKSxpPU1hdGgubWF4KG4saSkpOmEucHVzaChsKSxNR2UobCxuKX0pLG49aSxhLmZvckVhY2gocz0+e0lHZShzLG4scil9KSx0LmZvckVhY2gocz0+e2xldCBsPWUuZ2V0KHMpO2lmKGw/LnBhcmVudHMubGVuZ3RoKXtsZXQgdT1MR2UobC5wYXJlbnRzKTtuPVlzLmdldCh1KS55LXdmLG48PWkmJihpPW4pO2xldCBoPVdzLmdldChsLmJyYW5jaCkucG9zLGY9bi1iZjtZcy5zZXQobC5pZCx7eDpoLHk6Zn0pfX0pfSwic2V0UGFyYWxsZWxCVFBvcyIpLE5HZT1vKHQ9PntsZXQgZT1fdWUodC5wYXJlbnRzLmZpbHRlcihuPT5uIT09bnVsbCkpO2lmKCFlKXRocm93IG5ldyBFcnJvcihgQ2xvc2VzdCBwYXJlbnQgbm90IGZvdW5kIGZvciBjb21taXQgJHt0LmlkfWApO2xldCByPVlzLmdldChlKT8ueTtpZihyPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgQ2xvc2VzdCBwYXJlbnQgcG9zaXRpb24gbm90IGZvdW5kIGZvciBjb21taXQgJHt0LmlkfWApO3JldHVybiByfSwiZmluZENsb3Nlc3RQYXJlbnRQb3MiKSxSR2U9byh0PT5OR2UodCkrd2YsImNhbGN1bGF0ZUNvbW1pdFBvc2l0aW9uIiksTUdlPW8oKHQsZSk9PntsZXQgcj1Xcy5nZXQodC5icmFuY2gpO2lmKCFyKXRocm93IG5ldyBFcnJvcihgQnJhbmNoIG5vdCBmb3VuZCBmb3IgY29tbWl0ICR7dC5pZH1gKTtsZXQgbj1yLnBvcyxpPWUrYmY7cmV0dXJuIFlzLnNldCh0LmlkLHt4Om4seTppfSkse3g6bix5Oml9fSwic2V0Q29tbWl0UG9zaXRpb24iKSxJR2U9bygodCxlLHIpPT57bGV0IG49V3MuZ2V0KHQuYnJhbmNoKTtpZighbil0aHJvdyBuZXcgRXJyb3IoYEJyYW5jaCBub3QgZm91bmQgZm9yIGNvbW1pdCAke3QuaWR9YCk7bGV0IGk9ZStyLGE9bi5wb3M7WXMuc2V0KHQuaWQse3g6YSx5Oml9KX0sInNldFJvb3RQb3NpdGlvbiIpLE9HZT1vKCh0LGUscixuLGksYSk9PntpZihhPT09anIuSElHSExJR0hUKXQuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsci54LTEwKS5hdHRyKCJ5IixyLnktMTApLmF0dHIoIndpZHRoIiwyMCkuYXR0cigiaGVpZ2h0IiwyMCkuYXR0cigiY2xhc3MiLGBjb21taXQgJHtlLmlkfSBjb21taXQtaGlnaGxpZ2h0JHtpJUQwfSAke259LW91dGVyYCksdC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IixyLngtNikuYXR0cigieSIsci55LTYpLmF0dHIoIndpZHRoIiwxMikuYXR0cigiaGVpZ2h0IiwxMikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtlLmlkfSBjb21taXQke2klRDB9ICR7bn0taW5uZXJgKTtlbHNlIGlmKGE9PT1qci5DSEVSUllfUElDSyl0LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLHIueCkuYXR0cigiY3kiLHIueSkuYXR0cigiciIsMTApLmF0dHIoImNsYXNzIixgY29tbWl0ICR7ZS5pZH0gJHtufWApLHQuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsci54LTMpLmF0dHIoImN5IixyLnkrMikuYXR0cigiciIsMi43NSkuYXR0cigiZmlsbCIsIiNmZmYiKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke2UuaWR9ICR7bn1gKSx0LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLHIueCszKS5hdHRyKCJjeSIsci55KzIpLmF0dHIoInIiLDIuNzUpLmF0dHIoImZpbGwiLCIjZmZmIikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtlLmlkfSAke259YCksdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsci54KzMpLmF0dHIoInkxIixyLnkrMSkuYXR0cigieDIiLHIueCkuYXR0cigieTIiLHIueS01KS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtlLmlkfSAke259YCksdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsci54LTMpLmF0dHIoInkxIixyLnkrMSkuYXR0cigieDIiLHIueCkuYXR0cigieTIiLHIueS01KS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtlLmlkfSAke259YCk7ZWxzZXtsZXQgcz10LmFwcGVuZCgiY2lyY2xlIik7aWYocy5hdHRyKCJjeCIsci54KSxzLmF0dHIoImN5IixyLnkpLHMuYXR0cigiciIsZS50eXBlPT09anIuTUVSR0U/OToxMCkscy5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke2UuaWR9IGNvbW1pdCR7aSVEMH1gKSxhPT09anIuTUVSR0Upe2xldCBsPXQuYXBwZW5kKCJjaXJjbGUiKTtsLmF0dHIoImN4IixyLngpLGwuYXR0cigiY3kiLHIueSksbC5hdHRyKCJyIiw2KSxsLmF0dHIoImNsYXNzIixgY29tbWl0ICR7bn0gJHtlLmlkfSBjb21taXQke2klRDB9YCl9YT09PWpyLlJFVkVSU0UmJnQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsYE0gJHtyLngtNX0sJHtyLnktNX1MJHtyLngrNX0sJHtyLnkrNX1NJHtyLngtNX0sJHtyLnkrNX1MJHtyLngrNX0sJHtyLnktNX1gKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke259ICR7ZS5pZH0gY29tbWl0JHtpJUQwfWApfX0sImRyYXdDb21taXRCdWxsZXQiKSxQR2U9bygodCxlLHIsbik9PntpZihlLnR5cGUhPT1qci5DSEVSUllfUElDSyYmKGUuY3VzdG9tSWQmJmUudHlwZT09PWpyLk1FUkdFfHxlLnR5cGUhPT1qci5NRVJHRSkmJnNsPy5zaG93Q29tbWl0TGFiZWwpe2xldCBpPXQuYXBwZW5kKCJnIiksYT1pLmluc2VydCgicmVjdCIpLmF0dHIoImNsYXNzIiwiY29tbWl0LWxhYmVsLWJrZyIpLHM9aS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuKS5hdHRyKCJ5IixyLnkrMjUpLmF0dHIoImNsYXNzIiwiY29tbWl0LWxhYmVsIikudGV4dChlLmlkKSxsPXMubm9kZSgpPy5nZXRCQm94KCk7aWYobCYmKGEuYXR0cigieCIsci5wb3NXaXRoT2Zmc2V0LWwud2lkdGgvMi1adSkuYXR0cigieSIsci55KzEzLjUpLmF0dHIoIndpZHRoIixsLndpZHRoKzIqWnUpLmF0dHIoImhlaWdodCIsbC5oZWlnaHQrMipadSksUnI9PT0iVEIifHxScj09PSJCVCI/KGEuYXR0cigieCIsci54LShsLndpZHRoKzQqWWMrNSkpLmF0dHIoInkiLHIueS0xMikscy5hdHRyKCJ4IixyLngtKGwud2lkdGgrNCpZYykpLmF0dHIoInkiLHIueStsLmhlaWdodC0xMikpOnMuYXR0cigieCIsci5wb3NXaXRoT2Zmc2V0LWwud2lkdGgvMiksc2wucm90YXRlQ29tbWl0TGFiZWwpKWlmKFJyPT09IlRCInx8UnI9PT0iQlQiKXMuYXR0cigidHJhbnNmb3JtIiwicm90YXRlKC00NSwgIityLngrIiwgIityLnkrIikiKSxhLmF0dHIoInRyYW5zZm9ybSIsInJvdGF0ZSgtNDUsICIrci54KyIsICIrci55KyIpIik7ZWxzZXtsZXQgdT0tNy41LShsLndpZHRoKzEwKS8yNSo5LjUsaD0xMCtsLndpZHRoLzI1KjguNTtpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3UrIiwgIitoKyIpIHJvdGF0ZSgtNDUsICIrbisiLCAiK3IueSsiKSIpfX19LCJkcmF3Q29tbWl0TGFiZWwiKSxCR2U9bygodCxlLHIsbik9PntpZihlLnRhZ3MubGVuZ3RoPjApe2xldCBpPTAsYT0wLHM9MCxsPVtdO2ZvcihsZXQgdSBvZiBlLnRhZ3MucmV2ZXJzZSgpKXtsZXQgaD10Lmluc2VydCgicG9seWdvbiIpLGY9dC5hcHBlbmQoImNpcmNsZSIpLGQ9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJ5IixyLnktMTYtaSkuYXR0cigiY2xhc3MiLCJ0YWctbGFiZWwiKS50ZXh0KHUpLHA9ZC5ub2RlKCk/LmdldEJCb3goKTtpZighcCl0aHJvdyBuZXcgRXJyb3IoIlRhZyBiYm94IG5vdCBmb3VuZCIpO2E9TWF0aC5tYXgoYSxwLndpZHRoKSxzPU1hdGgubWF4KHMscC5oZWlnaHQpLGQuYXR0cigieCIsci5wb3NXaXRoT2Zmc2V0LXAud2lkdGgvMiksbC5wdXNoKHt0YWc6ZCxob2xlOmYscmVjdDpoLHlPZmZzZXQ6aX0pLGkrPTIwfWZvcihsZXR7dGFnOnUsaG9sZTpoLHJlY3Q6Zix5T2Zmc2V0OmR9b2YgbCl7bGV0IHA9cy8yLG09ci55LTE5LjItZDtpZihmLmF0dHIoImNsYXNzIiwidGFnLWxhYmVsLWJrZyIpLmF0dHIoInBvaW50cyIsYAogICAgICAke24tYS8yLVljLzJ9LCR7bStadX0gIAogICAgICAke24tYS8yLVljLzJ9LCR7bS1adX0KICAgICAgJHtyLnBvc1dpdGhPZmZzZXQtYS8yLVljfSwke20tcC1adX0KICAgICAgJHtyLnBvc1dpdGhPZmZzZXQrYS8yK1ljfSwke20tcC1adX0KICAgICAgJHtyLnBvc1dpdGhPZmZzZXQrYS8yK1ljfSwke20rcCtadX0KICAgICAgJHtyLnBvc1dpdGhPZmZzZXQtYS8yLVljfSwke20rcCtadX1gKSxoLmF0dHIoImN5IixtKS5hdHRyKCJjeCIsbi1hLzIrWWMvMikuYXR0cigiciIsMS41KS5hdHRyKCJjbGFzcyIsInRhZy1ob2xlIiksUnI9PT0iVEIifHxScj09PSJCVCIpe2xldCBnPW4rZDtmLmF0dHIoImNsYXNzIiwidGFnLWxhYmVsLWJrZyIpLmF0dHIoInBvaW50cyIsYAogICAgICAgICR7ci54fSwke2crMn0KICAgICAgICAke3IueH0sJHtnLTJ9CiAgICAgICAgJHtyLngrYmZ9LCR7Zy1wLTJ9CiAgICAgICAgJHtyLngrYmYrYSs0fSwke2ctcC0yfQogICAgICAgICR7ci54K2JmK2ErNH0sJHtnK3ArMn0KICAgICAgICAke3IueCtiZn0sJHtnK3ArMn1gKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMTIsMTIpIHJvdGF0ZSg0NSwgIityLngrIiwiK24rIikiKSxoLmF0dHIoImN4IixyLngrWWMvMikuYXR0cigiY3kiLGcpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxMiwxMikgcm90YXRlKDQ1LCAiK3IueCsiLCIrbisiKSIpLHUuYXR0cigieCIsci54KzUpLmF0dHIoInkiLGcrMykuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDE0LDE0KSByb3RhdGUoNDUsICIrci54KyIsIituKyIpIil9fX19LCJkcmF3Q29tbWl0VGFncyIpLEZHZT1vKHQ9Pntzd2l0Y2godC5jdXN0b21UeXBlPz90LnR5cGUpe2Nhc2UganIuTk9STUFMOnJldHVybiJjb21taXQtbm9ybWFsIjtjYXNlIGpyLlJFVkVSU0U6cmV0dXJuImNvbW1pdC1yZXZlcnNlIjtjYXNlIGpyLkhJR0hMSUdIVDpyZXR1cm4iY29tbWl0LWhpZ2hsaWdodCI7Y2FzZSBqci5NRVJHRTpyZXR1cm4iY29tbWl0LW1lcmdlIjtjYXNlIGpyLkNIRVJSWV9QSUNLOnJldHVybiJjb21taXQtY2hlcnJ5LXBpY2siO2RlZmF1bHQ6cmV0dXJuImNvbW1pdC1ub3JtYWwifX0sImdldENvbW1pdENsYXNzVHlwZSIpLHpHZT1vKCh0LGUscixuKT0+e2xldCBpPXt4OjAseTowfTtpZih0LnBhcmVudHMubGVuZ3RoPjApe2xldCBhPV91ZSh0LnBhcmVudHMpO2lmKGEpe2xldCBzPW4uZ2V0KGEpPz9pO3JldHVybiBlPT09IlRCIj9zLnkrd2Y6ZT09PSJCVCI/KG4uZ2V0KHQuaWQpPz9pKS55LXdmOnMueCt3Zn19ZWxzZSByZXR1cm4gZT09PSJUQiI/bUU6ZT09PSJCVCI/KG4uZ2V0KHQuaWQpPz9pKS55LXdmOjA7cmV0dXJuIDB9LCJjYWxjdWxhdGVQb3NpdGlvbiIpLEdHZT1vKCh0LGUscik9PntsZXQgbj1Scj09PSJCVCImJnI/ZTplK2JmLGk9UnI9PT0iVEIifHxScj09PSJCVCI/bjpXcy5nZXQodC5icmFuY2gpPy5wb3MsYT1Scj09PSJUQiJ8fFJyPT09IkJUIj9Xcy5nZXQodC5icmFuY2gpPy5wb3M6bjtpZihhPT09dm9pZCAwfHxpPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgUG9zaXRpb24gd2VyZSB1bmRlZmluZWQgZm9yIGNvbW1pdCAke3QuaWR9YCk7cmV0dXJue3g6YSx5OmkscG9zV2l0aE9mZnNldDpufX0sImdldENvbW1pdFBvc2l0aW9uIiksQ3VlPW8oKHQsZSxyKT0+e2lmKCFzbCl0aHJvdyBuZXcgRXJyb3IoIkdpdEdyYXBoIGNvbmZpZyBub3QgZm91bmQiKTtsZXQgbj10LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY29tbWl0LWJ1bGxldHMiKSxpPXQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjb21taXQtbGFiZWxzIiksYT1Scj09PSJUQiJ8fFJyPT09IkJUIj9tRTowLHM9Wy4uLmUua2V5cygpXSxsPXNsPy5wYXJhbGxlbENvbW1pdHM/PyExLHU9bygoZixkKT0+e2xldCBwPWUuZ2V0KGYpPy5zZXEsbT1lLmdldChkKT8uc2VxO3JldHVybiBwIT09dm9pZCAwJiZtIT09dm9pZCAwP3AtbTowfSwic29ydEtleXMiKSxoPXMuc29ydCh1KTtScj09PSJCVCImJihsJiZER2UoaCxlLGEpLGg9aC5yZXZlcnNlKCkpLGguZm9yRWFjaChmPT57bGV0IGQ9ZS5nZXQoZik7aWYoIWQpdGhyb3cgbmV3IEVycm9yKGBDb21taXQgbm90IGZvdW5kIGZvciBrZXkgJHtmfWApO2wmJihhPXpHZShkLFJyLGEsWXMpKTtsZXQgcD1HR2UoZCxhLGwpO2lmKHIpe2xldCBtPUZHZShkKSxnPWQuY3VzdG9tVHlwZT8/ZC50eXBlLHk9V3MuZ2V0KGQuYnJhbmNoKT8uaW5kZXg/PzA7T0dlKG4sZCxwLG0seSxnKSxQR2UoaSxkLHAsYSksQkdlKGksZCxwLGEpfVJyPT09IlRCInx8UnI9PT0iQlQiP1lzLnNldChkLmlkLHt4OnAueCx5OnAucG9zV2l0aE9mZnNldH0pOllzLnNldChkLmlkLHt4OnAucG9zV2l0aE9mZnNldCx5OnAueX0pLGE9UnI9PT0iQlQiJiZsP2Erd2Y6YSt3ZitiZixhPnhmJiYoeGY9YSl9KX0sImRyYXdDb21taXRzIiksJEdlPW8oKHQsZSxyLG4saSk9PntsZXQgcz0oUnI9PT0iVEIifHxScj09PSJCVCI/ci54PG4ueDpyLnk8bi55KT9lLmJyYW5jaDp0LmJyYW5jaCxsPW8oaD0+aC5icmFuY2g9PT1zLCJpc09uQnJhbmNoVG9HZXRDdXJ2ZSIpLHU9byhoPT5oLnNlcT50LnNlcSYmaC5zZXE8ZS5zZXEsImlzQmV0d2VlbkNvbW1pdHMiKTtyZXR1cm5bLi4uaS52YWx1ZXMoKV0uc29tZShoPT51KGgpJiZsKGgpKX0sInNob3VsZFJlcm91dGVBcnJvdyIpLEV4PW8oKHQsZSxyPTApPT57bGV0IG49dCtNYXRoLmFicyh0LWUpLzI7aWYocj41KXJldHVybiBuO2lmKGdFLmV2ZXJ5KHM9Pk1hdGguYWJzKHMtbik+PTEwKSlyZXR1cm4gZ0UucHVzaChuKSxuO2xldCBhPU1hdGguYWJzKHQtZSk7cmV0dXJuIEV4KHQsZS1hLzUscisxKX0sImZpbmRMYW5lIiksVkdlPW8oKHQsZSxyLG4pPT57bGV0IGk9WXMuZ2V0KGUuaWQpLGE9WXMuZ2V0KHIuaWQpO2lmKGk9PT12b2lkIDB8fGE9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBDb21taXQgcG9zaXRpb25zIG5vdCBmb3VuZCBmb3IgY29tbWl0cyAke2UuaWR9IGFuZCAke3IuaWR9YCk7bGV0IHM9JEdlKGUscixpLGEsbiksbD0iIix1PSIiLGg9MCxmPTAsZD1Xcy5nZXQoci5icmFuY2gpPy5pbmRleDtyLnR5cGU9PT1qci5NRVJHRSYmZS5pZCE9PXIucGFyZW50c1swXSYmKGQ9V3MuZ2V0KGUuYnJhbmNoKT8uaW5kZXgpO2xldCBwO2lmKHMpe2w9IkEgMTAgMTAsIDAsIDAsIDAsIix1PSJBIDEwIDEwLCAwLCAwLCAxLCIsaD0xMCxmPTEwO2xldCBtPWkueTxhLnk/RXgoaS55LGEueSk6RXgoYS55LGkueSksZz1pLng8YS54P0V4KGkueCxhLngpOkV4KGEueCxpLngpO1JyPT09IlRCIj9pLng8YS54P3A9YE0gJHtpLnh9ICR7aS55fSBMICR7Zy1ofSAke2kueX0gJHt1fSAke2d9ICR7aS55K2Z9IEwgJHtnfSAke2EueS1ofSAke2x9ICR7ZytmfSAke2EueX0gTCAke2EueH0gJHthLnl9YDooZD1Xcy5nZXQoZS5icmFuY2gpPy5pbmRleCxwPWBNICR7aS54fSAke2kueX0gTCAke2craH0gJHtpLnl9ICR7bH0gJHtnfSAke2kueStmfSBMICR7Z30gJHthLnktaH0gJHt1fSAke2ctZn0gJHthLnl9IEwgJHthLnh9ICR7YS55fWApOlJyPT09IkJUIj9pLng8YS54P3A9YE0gJHtpLnh9ICR7aS55fSBMICR7Zy1ofSAke2kueX0gJHtsfSAke2d9ICR7aS55LWZ9IEwgJHtnfSAke2EueStofSAke3V9ICR7ZytmfSAke2EueX0gTCAke2EueH0gJHthLnl9YDooZD1Xcy5nZXQoZS5icmFuY2gpPy5pbmRleCxwPWBNICR7aS54fSAke2kueX0gTCAke2craH0gJHtpLnl9ICR7dX0gJHtnfSAke2kueS1mfSBMICR7Z30gJHthLnkraH0gJHtsfSAke2ctZn0gJHthLnl9IEwgJHthLnh9ICR7YS55fWApOmkueTxhLnk/cD1gTSAke2kueH0gJHtpLnl9IEwgJHtpLnh9ICR7bS1ofSAke2x9ICR7aS54K2Z9ICR7bX0gTCAke2EueC1ofSAke219ICR7dX0gJHthLnh9ICR7bStmfSBMICR7YS54fSAke2EueX1gOihkPVdzLmdldChlLmJyYW5jaCk/LmluZGV4LHA9YE0gJHtpLnh9ICR7aS55fSBMICR7aS54fSAke20raH0gJHt1fSAke2kueCtmfSAke219IEwgJHthLngtaH0gJHttfSAke2x9ICR7YS54fSAke20tZn0gTCAke2EueH0gJHthLnl9YCl9ZWxzZSBsPSJBIDIwIDIwLCAwLCAwLCAwLCIsdT0iQSAyMCAyMCwgMCwgMCwgMSwiLGg9MjAsZj0yMCxScj09PSJUQiI/KGkueDxhLngmJihyLnR5cGU9PT1qci5NRVJHRSYmZS5pZCE9PXIucGFyZW50c1swXT9wPWBNICR7aS54fSAke2kueX0gTCAke2kueH0gJHthLnktaH0gJHtsfSAke2kueCtmfSAke2EueX0gTCAke2EueH0gJHthLnl9YDpwPWBNICR7aS54fSAke2kueX0gTCAke2EueC1ofSAke2kueX0gJHt1fSAke2EueH0gJHtpLnkrZn0gTCAke2EueH0gJHthLnl9YCksaS54PmEueCYmKGw9IkEgMjAgMjAsIDAsIDAsIDAsIix1PSJBIDIwIDIwLCAwLCAwLCAxLCIsaD0yMCxmPTIwLHIudHlwZT09PWpyLk1FUkdFJiZlLmlkIT09ci5wYXJlbnRzWzBdP3A9YE0gJHtpLnh9ICR7aS55fSBMICR7aS54fSAke2EueS1ofSAke3V9ICR7aS54LWZ9ICR7YS55fSBMICR7YS54fSAke2EueX1gOnA9YE0gJHtpLnh9ICR7aS55fSBMICR7YS54K2h9ICR7aS55fSAke2x9ICR7YS54fSAke2kueStmfSBMICR7YS54fSAke2EueX1gKSxpLng9PT1hLngmJihwPWBNICR7aS54fSAke2kueX0gTCAke2EueH0gJHthLnl9YCkpOlJyPT09IkJUIj8oaS54PGEueCYmKHIudHlwZT09PWpyLk1FUkdFJiZlLmlkIT09ci5wYXJlbnRzWzBdP3A9YE0gJHtpLnh9ICR7aS55fSBMICR7aS54fSAke2EueStofSAke3V9ICR7aS54K2Z9ICR7YS55fSBMICR7YS54fSAke2EueX1gOnA9YE0gJHtpLnh9ICR7aS55fSBMICR7YS54LWh9ICR7aS55fSAke2x9ICR7YS54fSAke2kueS1mfSBMICR7YS54fSAke2EueX1gKSxpLng+YS54JiYobD0iQSAyMCAyMCwgMCwgMCwgMCwiLHU9IkEgMjAgMjAsIDAsIDAsIDEsIixoPTIwLGY9MjAsci50eXBlPT09anIuTUVSR0UmJmUuaWQhPT1yLnBhcmVudHNbMF0/cD1gTSAke2kueH0gJHtpLnl9IEwgJHtpLnh9ICR7YS55K2h9ICR7bH0gJHtpLngtZn0gJHthLnl9IEwgJHthLnh9ICR7YS55fWA6cD1gTSAke2kueH0gJHtpLnl9IEwgJHthLngtaH0gJHtpLnl9ICR7bH0gJHthLnh9ICR7aS55LWZ9IEwgJHthLnh9ICR7YS55fWApLGkueD09PWEueCYmKHA9YE0gJHtpLnh9ICR7aS55fSBMICR7YS54fSAke2EueX1gKSk6KGkueTxhLnkmJihyLnR5cGU9PT1qci5NRVJHRSYmZS5pZCE9PXIucGFyZW50c1swXT9wPWBNICR7aS54fSAke2kueX0gTCAke2EueC1ofSAke2kueX0gJHt1fSAke2EueH0gJHtpLnkrZn0gTCAke2EueH0gJHthLnl9YDpwPWBNICR7aS54fSAke2kueX0gTCAke2kueH0gJHthLnktaH0gJHtsfSAke2kueCtmfSAke2EueX0gTCAke2EueH0gJHthLnl9YCksaS55PmEueSYmKHIudHlwZT09PWpyLk1FUkdFJiZlLmlkIT09ci5wYXJlbnRzWzBdP3A9YE0gJHtpLnh9ICR7aS55fSBMICR7YS54LWh9ICR7aS55fSAke2x9ICR7YS54fSAke2kueS1mfSBMICR7YS54fSAke2EueX1gOnA9YE0gJHtpLnh9ICR7aS55fSBMICR7aS54fSAke2EueStofSAke3V9ICR7aS54K2Z9ICR7YS55fSBMICR7YS54fSAke2EueX1gKSxpLnk9PT1hLnkmJihwPWBNICR7aS54fSAke2kueX0gTCAke2EueH0gJHthLnl9YCkpO2lmKHA9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJMaW5lIGRlZmluaXRpb24gbm90IGZvdW5kIik7dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixwKS5hdHRyKCJjbGFzcyIsImFycm93IGFycm93IitkJUQwKX0sImRyYXdBcnJvdyIpLFVHZT1vKCh0LGUpPT57bGV0IHI9dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNvbW1pdC1hcnJvd3MiKTtbLi4uZS5rZXlzKCldLmZvckVhY2gobj0+e2xldCBpPWUuZ2V0KG4pO2kucGFyZW50cyYmaS5wYXJlbnRzLmxlbmd0aD4wJiZpLnBhcmVudHMuZm9yRWFjaChhPT57VkdlKHIsZS5nZXQoYSksaSxlKX0pfSl9LCJkcmF3QXJyb3dzIiksSEdlPW8oKHQsZSk9PntsZXQgcj10LmFwcGVuZCgiZyIpO2UuZm9yRWFjaCgobixpKT0+e2xldCBhPWklRDAscz1Xcy5nZXQobi5uYW1lKT8ucG9zO2lmKHM9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBQb3NpdGlvbiBub3QgZm91bmQgZm9yIGJyYW5jaCAke24ubmFtZX1gKTtsZXQgbD1yLmFwcGVuZCgibGluZSIpO2wuYXR0cigieDEiLDApLGwuYXR0cigieTEiLHMpLGwuYXR0cigieDIiLHhmKSxsLmF0dHIoInkyIixzKSxsLmF0dHIoImNsYXNzIiwiYnJhbmNoIGJyYW5jaCIrYSksUnI9PT0iVEIiPyhsLmF0dHIoInkxIixtRSksbC5hdHRyKCJ4MSIscyksbC5hdHRyKCJ5MiIseGYpLGwuYXR0cigieDIiLHMpKTpScj09PSJCVCImJihsLmF0dHIoInkxIix4ZiksbC5hdHRyKCJ4MSIscyksbC5hdHRyKCJ5MiIsbUUpLGwuYXR0cigieDIiLHMpKSxnRS5wdXNoKHMpO2xldCB1PW4ubmFtZSxoPUF1ZSh1KSxmPXIuaW5zZXJ0KCJyZWN0IikscD1yLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiYnJhbmNoTGFiZWwiKS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIGJyYW5jaC1sYWJlbCIrYSk7cC5ub2RlKCkuYXBwZW5kQ2hpbGQoaCk7bGV0IG09aC5nZXRCQm94KCk7Zi5hdHRyKCJjbGFzcyIsImJyYW5jaExhYmVsQmtnIGxhYmVsIithKS5hdHRyKCJyeCIsNCkuYXR0cigicnkiLDQpLmF0dHIoIngiLC1tLndpZHRoLTQtKHNsPy5yb3RhdGVDb21taXRMYWJlbD09PSEwPzMwOjApKS5hdHRyKCJ5IiwtbS5oZWlnaHQvMis4KS5hdHRyKCJ3aWR0aCIsbS53aWR0aCsxOCkuYXR0cigiaGVpZ2h0IixtLmhlaWdodCs0KSxwLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKygtbS53aWR0aC0xNC0oc2w/LnJvdGF0ZUNvbW1pdExhYmVsPT09ITA/MzA6MCkpKyIsICIrKHMtbS5oZWlnaHQvMi0xKSsiKSIpLFJyPT09IlRCIj8oZi5hdHRyKCJ4IixzLW0ud2lkdGgvMi0xMCkuYXR0cigieSIsMCkscC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisocy1tLndpZHRoLzItNSkrIiwgMCkiKSk6UnI9PT0iQlQiPyhmLmF0dHIoIngiLHMtbS53aWR0aC8yLTEwKS5hdHRyKCJ5Iix4ZikscC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisocy1tLndpZHRoLzItNSkrIiwgIit4ZisiKSIpKTpmLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgtMTksICIrKHMtbS5oZWlnaHQvMikrIikiKX0pfSwiZHJhd0JyYW5jaGVzIiksV0dlPW8oZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gV3Muc2V0KHQse3BvczplLGluZGV4OnJ9KSxlKz01MCsoaT80MDowKSsoUnI9PT0iVEIifHxScj09PSJCVCI/bi53aWR0aC8yOjApLGV9LCJzZXRCcmFuY2hQb3NpdGlvbiIpLFlHZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe2lmKF9HZSgpLFkuZGVidWcoImluIGdpdGdyYXBoIHJlbmRlcmVyIix0K2AKYCwiaWQ6IixlLHIpLCFzbCl0aHJvdyBuZXcgRXJyb3IoIkdpdEdyYXBoIGNvbmZpZyBub3QgZm91bmQiKTtsZXQgaT1zbC5yb3RhdGVDb21taXRMYWJlbD8/ITEsYT1uLmRiO2t4PWEuZ2V0Q29tbWl0cygpO2xldCBzPWEuZ2V0QnJhbmNoZXNBc09iakFycmF5KCk7UnI9YS5nZXREaXJlY3Rpb24oKTtsZXQgbD1WZShgW2lkPSIke2V9Il1gKSx1PTA7cy5mb3JFYWNoKChoLGYpPT57bGV0IGQ9QXVlKGgubmFtZSkscD1sLmFwcGVuZCgiZyIpLG09cC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImJyYW5jaExhYmVsIiksZz1tLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwgYnJhbmNoLWxhYmVsIik7Zy5ub2RlKCk/LmFwcGVuZENoaWxkKGQpO2xldCB5PWQuZ2V0QkJveCgpO3U9V0dlKGgubmFtZSx1LGYseSxpKSxnLnJlbW92ZSgpLG0ucmVtb3ZlKCkscC5yZW1vdmUoKX0pLEN1ZShsLGt4LCExKSxzbC5zaG93QnJhbmNoZXMmJkhHZShsLHMpLFVHZShsLGt4KSxDdWUobCxreCwhMCksVXQuaW5zZXJ0VGl0bGUobCwiZ2l0VGl0bGVUZXh0IixzbC50aXRsZVRvcE1hcmdpbj8/MCxhLmdldERpYWdyYW1UaXRsZSgpKSxvNyh2b2lkIDAsbCxzbC5kaWFncmFtUGFkZGluZyxzbC51c2VNYXhXaWR0aCl9LCJkcmF3IiksTHVlPXtkcmF3OllHZX19KTt2YXIgcUdlLE51ZSxSdWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtxR2U9byh0PT5gCiAgLmNvbW1pdC1pZCwKICAuY29tbWl0LW1zZywKICAuYnJhbmNoLWxhYmVsIHsKICAgIGZpbGw6IGxpZ2h0Z3JleTsKICAgIGNvbG9yOiBsaWdodGdyZXk7CiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpOwogIH0KICAke1swLDEsMiwzLDQsNSw2LDddLm1hcChlPT5gCiAgICAgICAgLmJyYW5jaC1sYWJlbCR7ZX0geyBmaWxsOiAke3RbImdpdEJyYW5jaExhYmVsIitlXX07IH0KICAgICAgICAuY29tbWl0JHtlfSB7IHN0cm9rZTogJHt0WyJnaXQiK2VdfTsgZmlsbDogJHt0WyJnaXQiK2VdfTsgfQogICAgICAgIC5jb21taXQtaGlnaGxpZ2h0JHtlfSB7IHN0cm9rZTogJHt0WyJnaXRJbnYiK2VdfTsgZmlsbDogJHt0WyJnaXRJbnYiK2VdfTsgfQogICAgICAgIC5sYWJlbCR7ZX0gIHsgZmlsbDogJHt0WyJnaXQiK2VdfTsgfQogICAgICAgIC5hcnJvdyR7ZX0geyBzdHJva2U6ICR7dFsiZ2l0IitlXX07IH0KICAgICAgICBgKS5qb2luKGAKYCl9CgogIC5icmFuY2ggewogICAgc3Ryb2tlLXdpZHRoOiAxOwogICAgc3Ryb2tlOiAke3QubGluZUNvbG9yfTsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDI7CiAgfQogIC5jb21taXQtbGFiZWwgeyBmb250LXNpemU6ICR7dC5jb21taXRMYWJlbEZvbnRTaXplfTsgZmlsbDogJHt0LmNvbW1pdExhYmVsQ29sb3J9O30KICAuY29tbWl0LWxhYmVsLWJrZyB7IGZvbnQtc2l6ZTogJHt0LmNvbW1pdExhYmVsRm9udFNpemV9OyBmaWxsOiAke3QuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfTsgb3BhY2l0eTogMC41OyB9CiAgLnRhZy1sYWJlbCB7IGZvbnQtc2l6ZTogJHt0LnRhZ0xhYmVsRm9udFNpemV9OyBmaWxsOiAke3QudGFnTGFiZWxDb2xvcn07fQogIC50YWctbGFiZWwtYmtnIHsgZmlsbDogJHt0LnRhZ0xhYmVsQmFja2dyb3VuZH07IHN0cm9rZTogJHt0LnRhZ0xhYmVsQm9yZGVyfTsgfQogIC50YWctaG9sZSB7IGZpbGw6ICR7dC50ZXh0Q29sb3J9OyB9CgogIC5jb21taXQtbWVyZ2UgewogICAgc3Ryb2tlOiAke3QucHJpbWFyeUNvbG9yfTsKICAgIGZpbGw6ICR7dC5wcmltYXJ5Q29sb3J9OwogIH0KICAuY29tbWl0LXJldmVyc2UgewogICAgc3Ryb2tlOiAke3QucHJpbWFyeUNvbG9yfTsKICAgIGZpbGw6ICR7dC5wcmltYXJ5Q29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAzOwogIH0KICAuY29tbWl0LWhpZ2hsaWdodC1vdXRlciB7CiAgfQogIC5jb21taXQtaGlnaGxpZ2h0LWlubmVyIHsKICAgIHN0cm9rZTogJHt0LnByaW1hcnlDb2xvcn07CiAgICBmaWxsOiAke3QucHJpbWFyeUNvbG9yfTsKICB9CgogIC5hcnJvdyB7IHN0cm9rZS13aWR0aDogODsgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOyBmaWxsOiBub25lfQogIC5naXRUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7dC50ZXh0Q29sb3J9OwogIH0KYCwiZ2V0U3R5bGVzIiksTnVlPXFHZX0pO3ZhciBNdWU9e307dnIoTXVlLHtkaWFncmFtOigpPT5YR2V9KTt2YXIgWEdlLEl1ZT1NKCgpPT57InVzZSBzdHJpY3QiO1N1ZSgpO09JKCk7RHVlKCk7UnVlKCk7WEdlPXtwYXJzZXI6RXVlLGRiOnBFLHJlbmRlcmVyOkx1ZSxzdHlsZXM6TnVlfX0pO3ZhciBQSSxCdWUsRnVlPU0oKCk9PnsidXNlIHN0cmljdCI7UEk9ZnVuY3Rpb24oKXt2YXIgdD1vKGZ1bmN0aW9uKFIsQyxPLE4pe2ZvcihPPU98fHt9LE49Ui5sZW5ndGg7Ti0tO09bUltOXV09Qyk7cmV0dXJuIE99LCJvIiksZT1bNiw4LDEwLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMzLDM1LDM2LDM4LDQwXSxyPVsxLDI2XSxuPVsxLDI3XSxpPVsxLDI4XSxhPVsxLDI5XSxzPVsxLDMwXSxsPVsxLDMxXSx1PVsxLDMyXSxoPVsxLDMzXSxmPVsxLDM0XSxkPVsxLDldLHA9WzEsMTBdLG09WzEsMTFdLGc9WzEsMTJdLHk9WzEsMTNdLHY9WzEsMTRdLHg9WzEsMTVdLGI9WzEsMTZdLHc9WzEsMTldLF89WzEsMjBdLFQ9WzEsMjFdLEU9WzEsMjJdLEw9WzEsMjNdLFM9WzEsMjVdLEE9WzEsMzVdLEk9e3RyYWNlOm8oZnVuY3Rpb24oKXt9LCJ0cmFjZSIpLHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsZ2FudHQ6NCxkb2N1bWVudDo1LEVPRjo2LGxpbmU6NyxTUEFDRTo4LHN0YXRlbWVudDo5LE5MOjEwLHdlZWtkYXk6MTEsd2Vla2RheV9tb25kYXk6MTIsd2Vla2RheV90dWVzZGF5OjEzLHdlZWtkYXlfd2VkbmVzZGF5OjE0LHdlZWtkYXlfdGh1cnNkYXk6MTUsd2Vla2RheV9mcmlkYXk6MTYsd2Vla2RheV9zYXR1cmRheToxNyx3ZWVrZGF5X3N1bmRheToxOCx3ZWVrZW5kOjE5LHdlZWtlbmRfZnJpZGF5OjIwLHdlZWtlbmRfc2F0dXJkYXk6MjEsZGF0ZUZvcm1hdDoyMixpbmNsdXNpdmVFbmREYXRlczoyMyx0b3BBeGlzOjI0LGF4aXNGb3JtYXQ6MjUsdGlja0ludGVydmFsOjI2LGV4Y2x1ZGVzOjI3LGluY2x1ZGVzOjI4LHRvZGF5TWFya2VyOjI5LHRpdGxlOjMwLGFjY190aXRsZTozMSxhY2NfdGl0bGVfdmFsdWU6MzIsYWNjX2Rlc2NyOjMzLGFjY19kZXNjcl92YWx1ZTozNCxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjM1LHNlY3Rpb246MzYsY2xpY2tTdGF0ZW1lbnQ6MzcsdGFza1R4dDozOCx0YXNrRGF0YTozOSxjbGljazo0MCxjYWxsYmFja25hbWU6NDEsY2FsbGJhY2thcmdzOjQyLGhyZWY6NDMsY2xpY2tTdGF0ZW1lbnREZWJ1Zzo0NCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiZ2FudHQiLDY6IkVPRiIsODoiU1BBQ0UiLDEwOiJOTCIsMTI6IndlZWtkYXlfbW9uZGF5IiwxMzoid2Vla2RheV90dWVzZGF5IiwxNDoid2Vla2RheV93ZWRuZXNkYXkiLDE1OiJ3ZWVrZGF5X3RodXJzZGF5IiwxNjoid2Vla2RheV9mcmlkYXkiLDE3OiJ3ZWVrZGF5X3NhdHVyZGF5IiwxODoid2Vla2RheV9zdW5kYXkiLDIwOiJ3ZWVrZW5kX2ZyaWRheSIsMjE6IndlZWtlbmRfc2F0dXJkYXkiLDIyOiJkYXRlRm9ybWF0IiwyMzoiaW5jbHVzaXZlRW5kRGF0ZXMiLDI0OiJ0b3BBeGlzIiwyNToiYXhpc0Zvcm1hdCIsMjY6InRpY2tJbnRlcnZhbCIsMjc6ImV4Y2x1ZGVzIiwyODoiaW5jbHVkZXMiLDI5OiJ0b2RheU1hcmtlciIsMzA6InRpdGxlIiwzMToiYWNjX3RpdGxlIiwzMjoiYWNjX3RpdGxlX3ZhbHVlIiwzMzoiYWNjX2Rlc2NyIiwzNDoiYWNjX2Rlc2NyX3ZhbHVlIiwzNToiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMzY6InNlY3Rpb24iLDM4OiJ0YXNrVHh0IiwzOToidGFza0RhdGEiLDQwOiJjbGljayIsNDE6ImNhbGxiYWNrbmFtZSIsNDI6ImNhbGxiYWNrYXJncyIsNDM6ImhyZWYifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzUsMF0sWzUsMl0sWzcsMl0sWzcsMV0sWzcsMV0sWzcsMV0sWzExLDFdLFsxMSwxXSxbMTEsMV0sWzExLDFdLFsxMSwxXSxbMTEsMV0sWzExLDFdLFsxOSwxXSxbMTksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMl0sWzksMl0sWzksMV0sWzksMV0sWzksMV0sWzksMl0sWzM3LDJdLFszNywzXSxbMzcsM10sWzM3LDRdLFszNywzXSxbMzcsNF0sWzM3LDJdLFs0NCwyXSxbNDQsM10sWzQ0LDNdLFs0NCw0XSxbNDQsM10sWzQ0LDRdLFs0NCwyXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKEMsTyxOLFAsRixCLEcpe3ZhciB6PUIubGVuZ3RoLTE7c3dpdGNoKEYpe2Nhc2UgMTpyZXR1cm4gQlt6LTFdO2Nhc2UgMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzOkJbei0xXS5wdXNoKEJbel0pLHRoaXMuJD1CW3otMV07YnJlYWs7Y2FzZSA0OmNhc2UgNTp0aGlzLiQ9Qlt6XTticmVhaztjYXNlIDY6Y2FzZSA3OnRoaXMuJD1bXTticmVhaztjYXNlIDg6UC5zZXRXZWVrZGF5KCJtb25kYXkiKTticmVhaztjYXNlIDk6UC5zZXRXZWVrZGF5KCJ0dWVzZGF5Iik7YnJlYWs7Y2FzZSAxMDpQLnNldFdlZWtkYXkoIndlZG5lc2RheSIpO2JyZWFrO2Nhc2UgMTE6UC5zZXRXZWVrZGF5KCJ0aHVyc2RheSIpO2JyZWFrO2Nhc2UgMTI6UC5zZXRXZWVrZGF5KCJmcmlkYXkiKTticmVhaztjYXNlIDEzOlAuc2V0V2Vla2RheSgic2F0dXJkYXkiKTticmVhaztjYXNlIDE0OlAuc2V0V2Vla2RheSgic3VuZGF5Iik7YnJlYWs7Y2FzZSAxNTpQLnNldFdlZWtlbmQoImZyaWRheSIpO2JyZWFrO2Nhc2UgMTY6UC5zZXRXZWVrZW5kKCJzYXR1cmRheSIpO2JyZWFrO2Nhc2UgMTc6UC5zZXREYXRlRm9ybWF0KEJbel0uc3Vic3RyKDExKSksdGhpcy4kPUJbel0uc3Vic3RyKDExKTticmVhaztjYXNlIDE4OlAuZW5hYmxlSW5jbHVzaXZlRW5kRGF0ZXMoKSx0aGlzLiQ9Qlt6XS5zdWJzdHIoMTgpO2JyZWFrO2Nhc2UgMTk6UC5Ub3BBeGlzKCksdGhpcy4kPUJbel0uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgMjA6UC5zZXRBeGlzRm9ybWF0KEJbel0uc3Vic3RyKDExKSksdGhpcy4kPUJbel0uc3Vic3RyKDExKTticmVhaztjYXNlIDIxOlAuc2V0VGlja0ludGVydmFsKEJbel0uc3Vic3RyKDEzKSksdGhpcy4kPUJbel0uc3Vic3RyKDEzKTticmVhaztjYXNlIDIyOlAuc2V0RXhjbHVkZXMoQlt6XS5zdWJzdHIoOSkpLHRoaXMuJD1CW3pdLnN1YnN0cig5KTticmVhaztjYXNlIDIzOlAuc2V0SW5jbHVkZXMoQlt6XS5zdWJzdHIoOSkpLHRoaXMuJD1CW3pdLnN1YnN0cig5KTticmVhaztjYXNlIDI0OlAuc2V0VG9kYXlNYXJrZXIoQlt6XS5zdWJzdHIoMTIpKSx0aGlzLiQ9Qlt6XS5zdWJzdHIoMTIpO2JyZWFrO2Nhc2UgMjc6UC5zZXREaWFncmFtVGl0bGUoQlt6XS5zdWJzdHIoNikpLHRoaXMuJD1CW3pdLnN1YnN0cig2KTticmVhaztjYXNlIDI4OnRoaXMuJD1CW3pdLnRyaW0oKSxQLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAyOTpjYXNlIDMwOnRoaXMuJD1CW3pdLnRyaW0oKSxQLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAzMTpQLmFkZFNlY3Rpb24oQlt6XS5zdWJzdHIoOCkpLHRoaXMuJD1CW3pdLnN1YnN0cig4KTticmVhaztjYXNlIDMzOlAuYWRkVGFzayhCW3otMV0sQlt6XSksdGhpcy4kPSJ0YXNrIjticmVhaztjYXNlIDM0OnRoaXMuJD1CW3otMV0sUC5zZXRDbGlja0V2ZW50KEJbei0xXSxCW3pdLG51bGwpO2JyZWFrO2Nhc2UgMzU6dGhpcy4kPUJbei0yXSxQLnNldENsaWNrRXZlbnQoQlt6LTJdLEJbei0xXSxCW3pdKTticmVhaztjYXNlIDM2OnRoaXMuJD1CW3otMl0sUC5zZXRDbGlja0V2ZW50KEJbei0yXSxCW3otMV0sbnVsbCksUC5zZXRMaW5rKEJbei0yXSxCW3pdKTticmVhaztjYXNlIDM3OnRoaXMuJD1CW3otM10sUC5zZXRDbGlja0V2ZW50KEJbei0zXSxCW3otMl0sQlt6LTFdKSxQLnNldExpbmsoQlt6LTNdLEJbel0pO2JyZWFrO2Nhc2UgMzg6dGhpcy4kPUJbei0yXSxQLnNldENsaWNrRXZlbnQoQlt6LTJdLEJbel0sbnVsbCksUC5zZXRMaW5rKEJbei0yXSxCW3otMV0pO2JyZWFrO2Nhc2UgMzk6dGhpcy4kPUJbei0zXSxQLnNldENsaWNrRXZlbnQoQlt6LTNdLEJbei0xXSxCW3pdKSxQLnNldExpbmsoQlt6LTNdLEJbei0yXSk7YnJlYWs7Y2FzZSA0MDp0aGlzLiQ9Qlt6LTFdLFAuc2V0TGluayhCW3otMV0sQlt6XSk7YnJlYWs7Y2FzZSA0MTpjYXNlIDQ3OnRoaXMuJD1CW3otMV0rIiAiK0Jbel07YnJlYWs7Y2FzZSA0MjpjYXNlIDQzOmNhc2UgNDU6dGhpcy4kPUJbei0yXSsiICIrQlt6LTFdKyIgIitCW3pdO2JyZWFrO2Nhc2UgNDQ6Y2FzZSA0Njp0aGlzLiQ9Qlt6LTNdKyIgIitCW3otMl0rIiAiK0Jbei0xXSsiICIrQlt6XTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHQoZSxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6WzEsNl0sOTo3LDEwOlsxLDhdLDExOjE3LDEyOnIsMTM6biwxNDppLDE1OmEsMTY6cywxNzpsLDE4OnUsMTk6MTgsMjA6aCwyMTpmLDIyOmQsMjM6cCwyNDptLDI1OmcsMjY6eSwyNzp2LDI4OngsMjk6YiwzMDp3LDMxOl8sMzM6VCwzNTpFLDM2OkwsMzc6MjQsMzg6Uyw0MDpBfSx0KGUsWzIsN10sezE6WzIsMV19KSx0KGUsWzIsM10pLHs5OjM2LDExOjE3LDEyOnIsMTM6biwxNDppLDE1OmEsMTY6cywxNzpsLDE4OnUsMTk6MTgsMjA6aCwyMTpmLDIyOmQsMjM6cCwyNDptLDI1OmcsMjY6eSwyNzp2LDI4OngsMjk6YiwzMDp3LDMxOl8sMzM6VCwzNTpFLDM2OkwsMzc6MjQsMzg6Uyw0MDpBfSx0KGUsWzIsNV0pLHQoZSxbMiw2XSksdChlLFsyLDE3XSksdChlLFsyLDE4XSksdChlLFsyLDE5XSksdChlLFsyLDIwXSksdChlLFsyLDIxXSksdChlLFsyLDIyXSksdChlLFsyLDIzXSksdChlLFsyLDI0XSksdChlLFsyLDI1XSksdChlLFsyLDI2XSksdChlLFsyLDI3XSksezMyOlsxLDM3XX0sezM0OlsxLDM4XX0sdChlLFsyLDMwXSksdChlLFsyLDMxXSksdChlLFsyLDMyXSksezM5OlsxLDM5XX0sdChlLFsyLDhdKSx0KGUsWzIsOV0pLHQoZSxbMiwxMF0pLHQoZSxbMiwxMV0pLHQoZSxbMiwxMl0pLHQoZSxbMiwxM10pLHQoZSxbMiwxNF0pLHQoZSxbMiwxNV0pLHQoZSxbMiwxNl0pLHs0MTpbMSw0MF0sNDM6WzEsNDFdfSx0KGUsWzIsNF0pLHQoZSxbMiwyOF0pLHQoZSxbMiwyOV0pLHQoZSxbMiwzM10pLHQoZSxbMiwzNF0sezQyOlsxLDQyXSw0MzpbMSw0M119KSx0KGUsWzIsNDBdLHs0MTpbMSw0NF19KSx0KGUsWzIsMzVdLHs0MzpbMSw0NV19KSx0KGUsWzIsMzZdKSx0KGUsWzIsMzhdLHs0MjpbMSw0Nl19KSx0KGUsWzIsMzddKSx0KGUsWzIsMzldKV0sZGVmYXVsdEFjdGlvbnM6e30scGFyc2VFcnJvcjpvKGZ1bmN0aW9uKEMsTyl7aWYoTy5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKEMpO2Vsc2V7dmFyIE49bmV3IEVycm9yKEMpO3Rocm93IE4uaGFzaD1PLE59fSwicGFyc2VFcnJvciIpLHBhcnNlOm8oZnVuY3Rpb24oQyl7dmFyIE89dGhpcyxOPVswXSxQPVtdLEY9W251bGxdLEI9W10sRz10aGlzLnRhYmxlLHo9IiIsVz0wLFo9MCxqPTAsb2U9MixLPTEsZWU9Qi5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxKPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksSD17eXk6e319O2Zvcih2YXIgcSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LHEpJiYoSC55eVtxXT10aGlzLnl5W3FdKTtKLnNldElucHV0KEMsSC55eSksSC55eS5sZXhlcj1KLEgueXkucGFyc2VyPXRoaXMsdHlwZW9mIEoueXlsbG9jPiJ1IiYmKEoueXlsbG9jPXt9KTt2YXIgUT1KLnl5bGxvYztCLnB1c2goUSk7dmFyIGFlPUoub3B0aW9ucyYmSi5vcHRpb25zLnJhbmdlczt0eXBlb2YgSC55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1ILnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIHVlKGhlKXtOLmxlbmd0aD1OLmxlbmd0aC0yKmhlLEYubGVuZ3RoPUYubGVuZ3RoLWhlLEIubGVuZ3RoPUIubGVuZ3RoLWhlfW8odWUsInBvcFN0YWNrIik7ZnVuY3Rpb24gY2UoKXt2YXIgaGU7cmV0dXJuIGhlPVAucG9wKCl8fEoubGV4KCl8fEssdHlwZW9mIGhlIT0ibnVtYmVyIiYmKGhlIGluc3RhbmNlb2YgQXJyYXkmJihQPWhlLGhlPVAucG9wKCkpLGhlPU8uc3ltYm9sc19baGVdfHxoZSksaGV9byhjZSwibGV4Iik7Zm9yKHZhciB0ZSxOZSxzZSxrZSxSZSxDZSxQZT17fSxJZSwkZSx5ZSxYOzspe2lmKHNlPU5bTi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tzZV0/a2U9dGhpcy5kZWZhdWx0QWN0aW9uc1tzZV06KCh0ZT09PW51bGx8fHR5cGVvZiB0ZT4idSIpJiYodGU9Y2UoKSksa2U9R1tzZV0mJkdbc2VdW3RlXSksdHlwZW9mIGtlPiJ1Inx8IWtlLmxlbmd0aHx8IWtlWzBdKXt2YXIgZmU9IiI7WD1bXTtmb3IoSWUgaW4gR1tzZV0pdGhpcy50ZXJtaW5hbHNfW0llXSYmSWU+b2UmJlgucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0llXSsiJyIpO0ouc2hvd1Bvc2l0aW9uP2ZlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKFcrMSkrYDoKYCtKLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArWC5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW3RlXXx8dGUpKyInIjpmZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhXKzEpKyI6IFVuZXhwZWN0ZWQgIisodGU9PUs/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bdGVdfHx0ZSkrIiciKSx0aGlzLnBhcnNlRXJyb3IoZmUse3RleHQ6Si5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bdGVdfHx0ZSxsaW5lOkoueXlsaW5lbm8sbG9jOlEsZXhwZWN0ZWQ6WH0pfWlmKGtlWzBdaW5zdGFuY2VvZiBBcnJheSYma2UubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitzZSsiLCB0b2tlbjogIit0ZSk7c3dpdGNoKGtlWzBdKXtjYXNlIDE6Ti5wdXNoKHRlKSxGLnB1c2goSi55eXRleHQpLEIucHVzaChKLnl5bGxvYyksTi5wdXNoKGtlWzFdKSx0ZT1udWxsLE5lPyh0ZT1OZSxOZT1udWxsKTooWj1KLnl5bGVuZyx6PUoueXl0ZXh0LFc9Si55eWxpbmVubyxRPUoueXlsbG9jLGo+MCYmai0tKTticmVhaztjYXNlIDI6aWYoJGU9dGhpcy5wcm9kdWN0aW9uc19ba2VbMV1dWzFdLFBlLiQ9RltGLmxlbmd0aC0kZV0sUGUuXyQ9e2ZpcnN0X2xpbmU6QltCLmxlbmd0aC0oJGV8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpCW0IubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46QltCLmxlbmd0aC0oJGV8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46QltCLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sYWUmJihQZS5fJC5yYW5nZT1bQltCLmxlbmd0aC0oJGV8fDEpXS5yYW5nZVswXSxCW0IubGVuZ3RoLTFdLnJhbmdlWzFdXSksQ2U9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KFBlLFt6LFosVyxILnl5LGtlWzFdLEYsQl0uY29uY2F0KGVlKSksdHlwZW9mIENlPCJ1IilyZXR1cm4gQ2U7JGUmJihOPU4uc2xpY2UoMCwtMSokZSoyKSxGPUYuc2xpY2UoMCwtMSokZSksQj1CLnNsaWNlKDAsLTEqJGUpKSxOLnB1c2godGhpcy5wcm9kdWN0aW9uc19ba2VbMV1dWzBdKSxGLnB1c2goUGUuJCksQi5wdXNoKFBlLl8kKSx5ZT1HW05bTi5sZW5ndGgtMl1dW05bTi5sZW5ndGgtMV1dLE4ucHVzaCh5ZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LEQ9ZnVuY3Rpb24oKXt2YXIgUj17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKE8sTil7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihPLE4pO2Vsc2UgdGhyb3cgbmV3IEVycm9yKE8pfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24oQyxPKXtyZXR1cm4gdGhpcy55eT1PfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1DLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIEM9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPUMsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPUMsdGhpcy5tYXRjaGVkKz1DO3ZhciBPPUMubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBPPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxDfSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKEMpe3ZhciBPPUMubGVuZ3RoLE49Qy5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PUMrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLU8pLHRoaXMub2Zmc2V0LT1PO3ZhciBQPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLE4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1OLmxlbmd0aC0xKTt2YXIgRj10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46Tj8oTi5sZW5ndGg9PT1QLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrUFtQLmxlbmd0aC1OLmxlbmd0aF0ubGVuZ3RoLU5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1PfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W0ZbMF0sRlswXSt0aGlzLnl5bGVuZy1PXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24oQyl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKEMpKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBDPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oQy5sZW5ndGg+MjA/Ii4uLiI6IiIpK0Muc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgQz10aGlzLm1hdGNoO3JldHVybiBDLmxlbmd0aDwyMCYmKEMrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLUMubGVuZ3RoKSksKEMuc3Vic3RyKDAsMjApKyhDLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIEM9dGhpcy5wYXN0SW5wdXQoKSxPPW5ldyBBcnJheShDLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIEMrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK08rIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKEMsTyl7dmFyIE4sUCxGO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihGPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKEYueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksUD1DWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxQJiYodGhpcy55eWxpbmVubys9UC5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpQP1BbUC5sZW5ndGgtMV0ubGVuZ3RoLVBbUC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitDWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPUNbMF0sdGhpcy5tYXRjaCs9Q1swXSx0aGlzLm1hdGNoZXM9Qyx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShDWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1DWzBdLE49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsTyx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxOKXJldHVybiBOO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBCIGluIEYpdGhpc1tCXT1GW0JdO3JldHVybiExfXJldHVybiExfSwidGVzdF9tYXRjaCIpLG5leHQ6byhmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBDLE8sTixQO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIEY9dGhpcy5fY3VycmVudFJ1bGVzKCksQj0wO0I8Ri5sZW5ndGg7QisrKWlmKE49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tGW0JdXSksTiYmKCFPfHxOWzBdLmxlbmd0aD5PWzBdLmxlbmd0aCkpe2lmKE89TixQPUIsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoQz10aGlzLnRlc3RfbWF0Y2goTixGW0JdKSxDIT09ITEpcmV0dXJuIEM7aWYodGhpcy5fYmFja3RyYWNrKXtPPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIE8/KEM9dGhpcy50ZXN0X21hdGNoKE8sRltQXSksQyE9PSExP0M6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LCJuZXh0IiksbGV4Om8oZnVuY3Rpb24oKXt2YXIgTz10aGlzLm5leHQoKTtyZXR1cm4gT3x8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24oTyl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKE8pfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIE89dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gTz4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sInBvcFN0YXRlIiksX2N1cnJlbnRSdWxlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sIl9jdXJyZW50UnVsZXMiKSx0b3BTdGF0ZTpvKGZ1bmN0aW9uKE8pe3JldHVybiBPPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoT3x8MCksTz49MD90aGlzLmNvbmRpdGlvblN0YWNrW09dOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24oTyl7dGhpcy5iZWdpbihPKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKE8sTixQLEYpe3ZhciBCPUY7c3dpdGNoKFApe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSwib3Blbl9kaXJlY3RpdmUiO2JyZWFrO2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMzE7YnJlYWs7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSAzOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzMzticmVhaztjYXNlIDQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjticmVhaztjYXNlIDU6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgNjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA3OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDg6YnJlYWs7Y2FzZSA5OmJyZWFrO2Nhc2UgMTA6YnJlYWs7Y2FzZSAxMTpyZXR1cm4gMTA7Y2FzZSAxMjpicmVhaztjYXNlIDEzOmJyZWFrO2Nhc2UgMTQ6dGhpcy5iZWdpbigiaHJlZiIpO2JyZWFrO2Nhc2UgMTU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTY6cmV0dXJuIDQzO2Nhc2UgMTc6dGhpcy5iZWdpbigiY2FsbGJhY2tuYW1lIik7YnJlYWs7Y2FzZSAxODp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxOTp0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiY2FsbGJhY2thcmdzIik7YnJlYWs7Y2FzZSAyMDpyZXR1cm4gNDE7Y2FzZSAyMTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMjpyZXR1cm4gNDI7Y2FzZSAyMzp0aGlzLmJlZ2luKCJjbGljayIpO2JyZWFrO2Nhc2UgMjQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjU6cmV0dXJuIDQwO2Nhc2UgMjY6cmV0dXJuIDQ7Y2FzZSAyNzpyZXR1cm4gMjI7Y2FzZSAyODpyZXR1cm4gMjM7Y2FzZSAyOTpyZXR1cm4gMjQ7Y2FzZSAzMDpyZXR1cm4gMjU7Y2FzZSAzMTpyZXR1cm4gMjY7Y2FzZSAzMjpyZXR1cm4gMjg7Y2FzZSAzMzpyZXR1cm4gMjc7Y2FzZSAzNDpyZXR1cm4gMjk7Y2FzZSAzNTpyZXR1cm4gMTI7Y2FzZSAzNjpyZXR1cm4gMTM7Y2FzZSAzNzpyZXR1cm4gMTQ7Y2FzZSAzODpyZXR1cm4gMTU7Y2FzZSAzOTpyZXR1cm4gMTY7Y2FzZSA0MDpyZXR1cm4gMTc7Y2FzZSA0MTpyZXR1cm4gMTg7Y2FzZSA0MjpyZXR1cm4gMjA7Y2FzZSA0MzpyZXR1cm4gMjE7Y2FzZSA0NDpyZXR1cm4iZGF0ZSI7Y2FzZSA0NTpyZXR1cm4gMzA7Y2FzZSA0NjpyZXR1cm4iYWNjRGVzY3JpcHRpb24iO2Nhc2UgNDc6cmV0dXJuIDM2O2Nhc2UgNDg6cmV0dXJuIDM4O2Nhc2UgNDk6cmV0dXJuIDM5O2Nhc2UgNTA6cmV0dXJuIjoiO2Nhc2UgNTE6cmV0dXJuIDY7Y2FzZSA1MjpyZXR1cm4iSU5WQUxJRCJ9fSwiYW5vbnltb3VzIikscnVsZXM6Wy9eKD86JSVceykvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86JSUoPyFceykqW15cbl0qKS9pLC9eKD86W15cfV0lJSpbXlxuXSopL2ksL14oPzolJSpbXlxuXSpbXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86JVteXG5dKikvaSwvXig/OmhyZWZbXHNdK1siXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86Y2FsbFtcc10rKS9pLC9eKD86XChbXHNdKlwpKS9pLC9eKD86XCgpL2ksL14oPzpbXihdKikvaSwvXig/OlwpKS9pLC9eKD86W14pXSopL2ksL14oPzpjbGlja1tcc10rKS9pLC9eKD86W1xzXG5dKS9pLC9eKD86W15cc1xuXSopL2ksL14oPzpnYW50dFxiKS9pLC9eKD86ZGF0ZUZvcm1hdFxzW14jXG47XSspL2ksL14oPzppbmNsdXNpdmVFbmREYXRlc1xiKS9pLC9eKD86dG9wQXhpc1xiKS9pLC9eKD86YXhpc0Zvcm1hdFxzW14jXG47XSspL2ksL14oPzp0aWNrSW50ZXJ2YWxcc1teI1xuO10rKS9pLC9eKD86aW5jbHVkZXNcc1teI1xuO10rKS9pLC9eKD86ZXhjbHVkZXNcc1teI1xuO10rKS9pLC9eKD86dG9kYXlNYXJrZXJcc1teXG47XSspL2ksL14oPzp3ZWVrZGF5XHMrbW9uZGF5XGIpL2ksL14oPzp3ZWVrZGF5XHMrdHVlc2RheVxiKS9pLC9eKD86d2Vla2RheVxzK3dlZG5lc2RheVxiKS9pLC9eKD86d2Vla2RheVxzK3RodXJzZGF5XGIpL2ksL14oPzp3ZWVrZGF5XHMrZnJpZGF5XGIpL2ksL14oPzp3ZWVrZGF5XHMrc2F0dXJkYXlcYikvaSwvXig/OndlZWtkYXlccytzdW5kYXlcYikvaSwvXig/OndlZWtlbmRccytmcmlkYXlcYikvaSwvXig/OndlZWtlbmRccytzYXR1cmRheVxiKS9pLC9eKD86XGRcZFxkXGQtXGRcZC1cZFxkXGIpL2ksL14oPzp0aXRsZVxzW15cbl0rKS9pLC9eKD86YWNjRGVzY3JpcHRpb25cc1teI1xuO10rKS9pLC9eKD86c2VjdGlvblxzW15cbl0rKS9pLC9eKD86W146XG5dKykvaSwvXig/OjpbXiNcbjtdKykvaSwvXig/OjopL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzYsN10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls0XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzJdLGluY2x1c2l2ZTohMX0sY2FsbGJhY2thcmdzOntydWxlczpbMjEsMjJdLGluY2x1c2l2ZTohMX0sY2FsbGJhY2tuYW1lOntydWxlczpbMTgsMTksMjBdLGluY2x1c2l2ZTohMX0saHJlZjp7cnVsZXM6WzE1LDE2XSxpbmNsdXNpdmU6ITF9LGNsaWNrOntydWxlczpbMjQsMjVdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwzLDUsOCw5LDEwLDExLDEyLDEzLDE0LDE3LDIzLDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIFJ9KCk7SS5sZXhlcj1EO2Z1bmN0aW9uIGsoKXt0aGlzLnl5PXt9fXJldHVybiBvKGssIlBhcnNlciIpLGsucHJvdG90eXBlPUksSS5QYXJzZXI9ayxuZXcga30oKTtQSS5wYXJzZXI9UEk7QnVlPVBJfSk7dmFyIHp1ZT1FaSgoQkksRkkpPT57InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0LGUpe3R5cGVvZiBCST09Im9iamVjdCImJnR5cGVvZiBGSTwidSI/RkkuZXhwb3J0cz1lKCk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoZSk6KHQ9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHx8c2VsZikuZGF5anNfcGx1Z2luX2lzb1dlZWs9ZSgpfSkoQkksZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQ9ImRheSI7cmV0dXJuIGZ1bmN0aW9uKGUscixuKXt2YXIgaT1vKGZ1bmN0aW9uKGwpe3JldHVybiBsLmFkZCg0LWwuaXNvV2Vla2RheSgpLHQpfSwiYSIpLGE9ci5wcm90b3R5cGU7YS5pc29XZWVrWWVhcj1mdW5jdGlvbigpe3JldHVybiBpKHRoaXMpLnllYXIoKX0sYS5pc29XZWVrPWZ1bmN0aW9uKGwpe2lmKCF0aGlzLiR1dGlscygpLnUobCkpcmV0dXJuIHRoaXMuYWRkKDcqKGwtdGhpcy5pc29XZWVrKCkpLHQpO3ZhciB1LGgsZixkLHA9aSh0aGlzKSxtPSh1PXRoaXMuaXNvV2Vla1llYXIoKSxoPXRoaXMuJHUsZj0oaD9uLnV0YzpuKSgpLnllYXIodSkuc3RhcnRPZigieWVhciIpLGQ9NC1mLmlzb1dlZWtkYXkoKSxmLmlzb1dlZWtkYXkoKT40JiYoZCs9NyksZi5hZGQoZCx0KSk7cmV0dXJuIHAuZGlmZihtLCJ3ZWVrIikrMX0sYS5pc29XZWVrZGF5PWZ1bmN0aW9uKGwpe3JldHVybiB0aGlzLiR1dGlscygpLnUobCk/dGhpcy5kYXkoKXx8Nzp0aGlzLmRheSh0aGlzLmRheSgpJTc/bDpsLTcpfTt2YXIgcz1hLnN0YXJ0T2Y7YS5zdGFydE9mPWZ1bmN0aW9uKGwsdSl7dmFyIGg9dGhpcy4kdXRpbHMoKSxmPSEhaC51KHUpfHx1O3JldHVybiBoLnAobCk9PT0iaXNvd2VlayI/Zj90aGlzLmRhdGUodGhpcy5kYXRlKCktKHRoaXMuaXNvV2Vla2RheSgpLTEpKS5zdGFydE9mKCJkYXkiKTp0aGlzLmRhdGUodGhpcy5kYXRlKCktMS0odGhpcy5pc29XZWVrZGF5KCktMSkrNykuZW5kT2YoImRheSIpOnMuYmluZCh0aGlzKShsLHUpfX19KX0pO3ZhciBHdWU9RWkoKHpJLEdJKT0+eyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24odCxlKXt0eXBlb2Ygekk9PSJvYmplY3QiJiZ0eXBlb2YgR0k8InUiP0dJLmV4cG9ydHM9ZSgpOnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKGUpOih0PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR8fHNlbGYpLmRheWpzX3BsdWdpbl9jdXN0b21QYXJzZUZvcm1hdD1lKCl9KSh6SSxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD17TFRTOiJoOm1tOnNzIEEiLExUOiJoOm1tIEEiLEw6Ik1NL0REL1lZWVkiLExMOiJNTU1NIEQsIFlZWVkiLExMTDoiTU1NTSBELCBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQSJ9LGU9LyhcW1teW10qXF0pfChbLV86Ly4sKClcc10rKXwoQXxhfFF8WVlZWXxZWT98d3c/fE1NP00/TT98RG98REQ/fGhoP3xISD98bW0/fHNzP3xTezEsM318enxaWj8pL2cscj0vXGQvLG49L1xkXGQvLGk9L1xkXGQ/LyxhPS9cZCpbXi1fOi8sKClcc1xkXSsvLHM9e30sbD1vKGZ1bmN0aW9uKGcpe3JldHVybihnPStnKSsoZz42OD8xOTAwOjJlMyl9LCJhIiksdT1vKGZ1bmN0aW9uKGcpe3JldHVybiBmdW5jdGlvbih5KXt0aGlzW2ddPSt5fX0sImYiKSxoPVsvWystXVxkXGQ6PyhcZFxkKT98Wi8sZnVuY3Rpb24oZyl7KHRoaXMuem9uZXx8KHRoaXMuem9uZT17fSkpLm9mZnNldD1mdW5jdGlvbih5KXtpZigheXx8eT09PSJaIilyZXR1cm4gMDt2YXIgdj15Lm1hdGNoKC8oWystXXxcZFxkKS9nKSx4PTYwKnZbMV0rKCt2WzJdfHwwKTtyZXR1cm4geD09PTA/MDp2WzBdPT09IisiPy14Onh9KGcpfV0sZj1vKGZ1bmN0aW9uKGcpe3ZhciB5PXNbZ107cmV0dXJuIHkmJih5LmluZGV4T2Y/eTp5LnMuY29uY2F0KHkuZikpfSwidSIpLGQ9byhmdW5jdGlvbihnLHkpe3ZhciB2LHg9cy5tZXJpZGllbTtpZih4KXtmb3IodmFyIGI9MTtiPD0yNDtiKz0xKWlmKGcuaW5kZXhPZih4KGIsMCx5KSk+LTEpe3Y9Yj4xMjticmVha319ZWxzZSB2PWc9PT0oeT8icG0iOiJQTSIpO3JldHVybiB2fSwiZCIpLHA9e0E6W2EsZnVuY3Rpb24oZyl7dGhpcy5hZnRlcm5vb249ZChnLCExKX1dLGE6W2EsZnVuY3Rpb24oZyl7dGhpcy5hZnRlcm5vb249ZChnLCEwKX1dLFE6W3IsZnVuY3Rpb24oZyl7dGhpcy5tb250aD0zKihnLTEpKzF9XSxTOltyLGZ1bmN0aW9uKGcpe3RoaXMubWlsbGlzZWNvbmRzPTEwMCorZ31dLFNTOltuLGZ1bmN0aW9uKGcpe3RoaXMubWlsbGlzZWNvbmRzPTEwKitnfV0sU1NTOlsvXGR7M30vLGZ1bmN0aW9uKGcpe3RoaXMubWlsbGlzZWNvbmRzPStnfV0sczpbaSx1KCJzZWNvbmRzIildLHNzOltpLHUoInNlY29uZHMiKV0sbTpbaSx1KCJtaW51dGVzIildLG1tOltpLHUoIm1pbnV0ZXMiKV0sSDpbaSx1KCJob3VycyIpXSxoOltpLHUoImhvdXJzIildLEhIOltpLHUoImhvdXJzIildLGhoOltpLHUoImhvdXJzIildLEQ6W2ksdSgiZGF5IildLEREOltuLHUoImRheSIpXSxEbzpbYSxmdW5jdGlvbihnKXt2YXIgeT1zLm9yZGluYWwsdj1nLm1hdGNoKC9cZCsvKTtpZih0aGlzLmRheT12WzBdLHkpZm9yKHZhciB4PTE7eDw9MzE7eCs9MSl5KHgpLnJlcGxhY2UoL1xbfFxdL2csIiIpPT09ZyYmKHRoaXMuZGF5PXgpfV0sdzpbaSx1KCJ3ZWVrIildLHd3OltuLHUoIndlZWsiKV0sTTpbaSx1KCJtb250aCIpXSxNTTpbbix1KCJtb250aCIpXSxNTU06W2EsZnVuY3Rpb24oZyl7dmFyIHk9ZigibW9udGhzIiksdj0oZigibW9udGhzU2hvcnQiKXx8eS5tYXAoZnVuY3Rpb24oeCl7cmV0dXJuIHguc2xpY2UoMCwzKX0pKS5pbmRleE9mKGcpKzE7aWYodjwxKXRocm93IG5ldyBFcnJvcjt0aGlzLm1vbnRoPXYlMTJ8fHZ9XSxNTU1NOlthLGZ1bmN0aW9uKGcpe3ZhciB5PWYoIm1vbnRocyIpLmluZGV4T2YoZykrMTtpZih5PDEpdGhyb3cgbmV3IEVycm9yO3RoaXMubW9udGg9eSUxMnx8eX1dLFk6Wy9bKy1dP1xkKy8sdSgieWVhciIpXSxZWTpbbixmdW5jdGlvbihnKXt0aGlzLnllYXI9bChnKX1dLFlZWVk6Wy9cZHs0fS8sdSgieWVhciIpXSxaOmgsWlo6aH07ZnVuY3Rpb24gbShnKXt2YXIgeSx2O3k9Zyx2PXMmJnMuZm9ybWF0cztmb3IodmFyIHg9KGc9eS5yZXBsYWNlKC8oXFtbXlxdXStdKXwoTFRTP3xsezEsNH18THsxLDR9KS9nLGZ1bmN0aW9uKFMsQSxJKXt2YXIgRD1JJiZJLnRvVXBwZXJDYXNlKCk7cmV0dXJuIEF8fHZbSV18fHRbSV18fHZbRF0ucmVwbGFjZSgvKFxbW15cXV0rXSl8KE1NTU18TU18RER8ZGRkZCkvZyxmdW5jdGlvbihrLFIsQyl7cmV0dXJuIFJ8fEMuc2xpY2UoMSl9KX0pKS5tYXRjaChlKSxiPXgubGVuZ3RoLHc9MDt3PGI7dys9MSl7dmFyIF89eFt3XSxUPXBbX10sRT1UJiZUWzBdLEw9VCYmVFsxXTt4W3ddPUw/e3JlZ2V4OkUscGFyc2VyOkx9Ol8ucmVwbGFjZSgvXlxbfFxdJC9nLCIiKX1yZXR1cm4gZnVuY3Rpb24oUyl7Zm9yKHZhciBBPXt9LEk9MCxEPTA7STxiO0krPTEpe3ZhciBrPXhbSV07aWYodHlwZW9mIGs9PSJzdHJpbmciKUQrPWsubGVuZ3RoO2Vsc2V7dmFyIFI9ay5yZWdleCxDPWsucGFyc2VyLE89Uy5zbGljZShEKSxOPVIuZXhlYyhPKVswXTtDLmNhbGwoQSxOKSxTPVMucmVwbGFjZShOLCIiKX19cmV0dXJuIGZ1bmN0aW9uKFApe3ZhciBGPVAuYWZ0ZXJub29uO2lmKEYhPT12b2lkIDApe3ZhciBCPVAuaG91cnM7Rj9CPDEyJiYoUC5ob3Vycys9MTIpOkI9PT0xMiYmKFAuaG91cnM9MCksZGVsZXRlIFAuYWZ0ZXJub29ufX0oQSksQX19cmV0dXJuIG8obSwibCIpLGZ1bmN0aW9uKGcseSx2KXt2LnAuY3VzdG9tUGFyc2VGb3JtYXQ9ITAsZyYmZy5wYXJzZVR3b0RpZ2l0WWVhciYmKGw9Zy5wYXJzZVR3b0RpZ2l0WWVhcik7dmFyIHg9eS5wcm90b3R5cGUsYj14LnBhcnNlO3gucGFyc2U9ZnVuY3Rpb24odyl7dmFyIF89dy5kYXRlLFQ9dy51dGMsRT13LmFyZ3M7dGhpcy4kdT1UO3ZhciBMPUVbMV07aWYodHlwZW9mIEw9PSJzdHJpbmciKXt2YXIgUz1FWzJdPT09ITAsQT1FWzNdPT09ITAsST1TfHxBLEQ9RVsyXTtBJiYoRD1FWzJdKSxzPXRoaXMuJGxvY2FsZSgpLCFTJiZEJiYocz12LkxzW0RdKSx0aGlzLiRkPWZ1bmN0aW9uKE8sTixQLEYpe3RyeXtpZihbIngiLCJYIl0uaW5kZXhPZihOKT4tMSlyZXR1cm4gbmV3IERhdGUoKE49PT0iWCI/MWUzOjEpKk8pO3ZhciBCPW0oTikoTyksRz1CLnllYXIsej1CLm1vbnRoLFc9Qi5kYXksWj1CLmhvdXJzLGo9Qi5taW51dGVzLG9lPUIuc2Vjb25kcyxLPUIubWlsbGlzZWNvbmRzLGVlPUIuem9uZSxKPUIud2VlayxIPW5ldyBEYXRlLHE9V3x8KEd8fHo/MTpILmdldERhdGUoKSksUT1HfHxILmdldEZ1bGxZZWFyKCksYWU9MDtHJiYhenx8KGFlPXo+MD96LTE6SC5nZXRNb250aCgpKTt2YXIgdWUsY2U9Wnx8MCx0ZT1qfHwwLE5lPW9lfHwwLHNlPUt8fDA7cmV0dXJuIGVlP25ldyBEYXRlKERhdGUuVVRDKFEsYWUscSxjZSx0ZSxOZSxzZSs2MCplZS5vZmZzZXQqMWUzKSk6UD9uZXcgRGF0ZShEYXRlLlVUQyhRLGFlLHEsY2UsdGUsTmUsc2UpKToodWU9bmV3IERhdGUoUSxhZSxxLGNlLHRlLE5lLHNlKSxKJiYodWU9Rih1ZSkud2VlayhKKS50b0RhdGUoKSksdWUpfWNhdGNoe3JldHVybiBuZXcgRGF0ZSgiIil9fShfLEwsVCx2KSx0aGlzLmluaXQoKSxEJiZEIT09ITAmJih0aGlzLiRMPXRoaXMubG9jYWxlKEQpLiRMKSxJJiZfIT10aGlzLmZvcm1hdChMKSYmKHRoaXMuJGQ9bmV3IERhdGUoIiIpKSxzPXt9fWVsc2UgaWYoTCBpbnN0YW5jZW9mIEFycmF5KWZvcih2YXIgaz1MLmxlbmd0aCxSPTE7Ujw9aztSKz0xKXtFWzFdPUxbUi0xXTt2YXIgQz12LmFwcGx5KHRoaXMsRSk7aWYoQy5pc1ZhbGlkKCkpe3RoaXMuJGQ9Qy4kZCx0aGlzLiRMPUMuJEwsdGhpcy5pbml0KCk7YnJlYWt9Uj09PWsmJih0aGlzLiRkPW5ldyBEYXRlKCIiKSl9ZWxzZSBiLmNhbGwodGhpcyx3KX19fSl9KTt2YXIgJHVlPUVpKCgkSSxWSSk9PnsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKHQsZSl7dHlwZW9mICRJPT0ib2JqZWN0IiYmdHlwZW9mIFZJPCJ1Ij9WSS5leHBvcnRzPWUoKTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShlKToodD10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0fHxzZWxmKS5kYXlqc19wbHVnaW5fYWR2YW5jZWRGb3JtYXQ9ZSgpfSkoJEksZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5wcm90b3R5cGUsbj1yLmZvcm1hdDtyLmZvcm1hdD1mdW5jdGlvbihpKXt2YXIgYT10aGlzLHM9dGhpcy4kbG9jYWxlKCk7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBuLmJpbmQodGhpcykoaSk7dmFyIGw9dGhpcy4kdXRpbHMoKSx1PShpfHwiWVlZWS1NTS1ERFRISDptbTpzc1oiKS5yZXBsYWNlKC9cWyhbXlxdXSspXXxRfHdvfHd3fHd8V1d8V3x6enp8enxnZ2dnfEdHR0d8RG98WHx4fGt7MSwyfXxTL2csZnVuY3Rpb24oaCl7c3dpdGNoKGgpe2Nhc2UiUSI6cmV0dXJuIE1hdGguY2VpbCgoYS4kTSsxKS8zKTtjYXNlIkRvIjpyZXR1cm4gcy5vcmRpbmFsKGEuJEQpO2Nhc2UiZ2dnZyI6cmV0dXJuIGEud2Vla1llYXIoKTtjYXNlIkdHR0ciOnJldHVybiBhLmlzb1dlZWtZZWFyKCk7Y2FzZSJ3byI6cmV0dXJuIHMub3JkaW5hbChhLndlZWsoKSwiVyIpO2Nhc2UidyI6Y2FzZSJ3dyI6cmV0dXJuIGwucyhhLndlZWsoKSxoPT09InciPzE6MiwiMCIpO2Nhc2UiVyI6Y2FzZSJXVyI6cmV0dXJuIGwucyhhLmlzb1dlZWsoKSxoPT09IlciPzE6MiwiMCIpO2Nhc2UiayI6Y2FzZSJrayI6cmV0dXJuIGwucyhTdHJpbmcoYS4kSD09PTA/MjQ6YS4kSCksaD09PSJrIj8xOjIsIjAiKTtjYXNlIlgiOnJldHVybiBNYXRoLmZsb29yKGEuJGQuZ2V0VGltZSgpLzFlMyk7Y2FzZSJ4IjpyZXR1cm4gYS4kZC5nZXRUaW1lKCk7Y2FzZSJ6IjpyZXR1cm4iWyIrYS5vZmZzZXROYW1lKCkrIl0iO2Nhc2Uienp6IjpyZXR1cm4iWyIrYS5vZmZzZXROYW1lKCJsb25nIikrIl0iO2RlZmF1bHQ6cmV0dXJuIGh9fSk7cmV0dXJuIG4uYmluZCh0aGlzKSh1KX19fSl9KTtmdW5jdGlvbiBuaGUodCxlLHIpe2xldCBuPSEwO2Zvcig7bjspbj0hMSxyLmZvckVhY2goZnVuY3Rpb24oaSl7bGV0IGE9Il5cXHMqIitpKyJcXHMqJCIscz1uZXcgUmVnRXhwKGEpO3RbMF0ubWF0Y2gocykmJihlW2ldPSEwLHQuc2hpZnQoMSksbj0hMCl9KX12YXIgSHVlLHhvLFd1ZSxZdWUscXVlLFZ1ZSxxYyxZSSxxSSxYSSxTeCxDeCxqSSxLSSx4RSxZZyxRSSxYdWUsWkksQXgsSkksZU8sYkUsVUksWkdlLEpHZSxlJGUsdCRlLHIkZSxuJGUsaSRlLGEkZSxzJGUsbyRlLGwkZSxjJGUsdSRlLGgkZSxmJGUsZCRlLHAkZSxtJGUsZyRlLHkkZSx2JGUseCRlLGIkZSxqdWUsdyRlLFQkZSxrJGUsS3VlLEUkZSxISSxRdWUsWnVlLHlFLFdnLFMkZSxDJGUsV0ksdkUsWWksSnVlLEEkZSxOMCxfJGUsVXVlLEwkZSxlaGUsRCRlLHRoZSxOJGUsUiRlLHJoZSxpaGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIdWU9SmkoUXAoKSwxKSx4bz1KaShWYigpLDEpLFd1ZT1KaSh6dWUoKSwxKSxZdWU9SmkoR3VlKCksMSkscXVlPUppKCR1ZSgpLDEpO3V0KCk7VnQoKTtocigpO0FpKCk7eG8uZGVmYXVsdC5leHRlbmQoV3VlLmRlZmF1bHQpO3hvLmRlZmF1bHQuZXh0ZW5kKFl1ZS5kZWZhdWx0KTt4by5kZWZhdWx0LmV4dGVuZChxdWUuZGVmYXVsdCk7VnVlPXtmcmlkYXk6NSxzYXR1cmRheTo2fSxxYz0iIixZST0iIixYST0iIixTeD1bXSxDeD1bXSxqST1uZXcgTWFwLEtJPVtdLHhFPVtdLFlnPSIiLFFJPSIiLFh1ZT1bImFjdGl2ZSIsImRvbmUiLCJjcml0IiwibWlsZXN0b25lIl0sWkk9W10sQXg9ITEsSkk9ITEsZU89InN1bmRheSIsYkU9InNhdHVyZGF5IixVST0wLFpHZT1vKGZ1bmN0aW9uKCl7S0k9W10seEU9W10sWWc9IiIsWkk9W10seUU9MCxXST12b2lkIDAsdkU9dm9pZCAwLFlpPVtdLHFjPSIiLFlJPSIiLFFJPSIiLHFJPXZvaWQgMCxYST0iIixTeD1bXSxDeD1bXSxBeD0hMSxKST0hMSxVST0wLGpJPW5ldyBNYXAsTHIoKSxlTz0ic3VuZGF5IixiRT0ic2F0dXJkYXkifSwiY2xlYXIiKSxKR2U9byhmdW5jdGlvbih0KXtZST10fSwic2V0QXhpc0Zvcm1hdCIpLGUkZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIFlJfSwiZ2V0QXhpc0Zvcm1hdCIpLHQkZT1vKGZ1bmN0aW9uKHQpe3FJPXR9LCJzZXRUaWNrSW50ZXJ2YWwiKSxyJGU9byhmdW5jdGlvbigpe3JldHVybiBxSX0sImdldFRpY2tJbnRlcnZhbCIpLG4kZT1vKGZ1bmN0aW9uKHQpe1hJPXR9LCJzZXRUb2RheU1hcmtlciIpLGkkZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIFhJfSwiZ2V0VG9kYXlNYXJrZXIiKSxhJGU9byhmdW5jdGlvbih0KXtxYz10fSwic2V0RGF0ZUZvcm1hdCIpLHMkZT1vKGZ1bmN0aW9uKCl7QXg9ITB9LCJlbmFibGVJbmNsdXNpdmVFbmREYXRlcyIpLG8kZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIEF4fSwiZW5kRGF0ZXNBcmVJbmNsdXNpdmUiKSxsJGU9byhmdW5jdGlvbigpe0pJPSEwfSwiZW5hYmxlVG9wQXhpcyIpLGMkZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIEpJfSwidG9wQXhpc0VuYWJsZWQiKSx1JGU9byhmdW5jdGlvbih0KXtRST10fSwic2V0RGlzcGxheU1vZGUiKSxoJGU9byhmdW5jdGlvbigpe3JldHVybiBRSX0sImdldERpc3BsYXlNb2RlIiksZiRlPW8oZnVuY3Rpb24oKXtyZXR1cm4gcWN9LCJnZXREYXRlRm9ybWF0IiksZCRlPW8oZnVuY3Rpb24odCl7U3g9dC50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXHMsXSsvKX0sInNldEluY2x1ZGVzIikscCRlPW8oZnVuY3Rpb24oKXtyZXR1cm4gU3h9LCJnZXRJbmNsdWRlcyIpLG0kZT1vKGZ1bmN0aW9uKHQpe0N4PXQudG9Mb3dlckNhc2UoKS5zcGxpdCgvW1xzLF0rLyl9LCJzZXRFeGNsdWRlcyIpLGckZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIEN4fSwiZ2V0RXhjbHVkZXMiKSx5JGU9byhmdW5jdGlvbigpe3JldHVybiBqSX0sImdldExpbmtzIiksdiRlPW8oZnVuY3Rpb24odCl7WWc9dCxLSS5wdXNoKHQpfSwiYWRkU2VjdGlvbiIpLHgkZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIEtJfSwiZ2V0U2VjdGlvbnMiKSxiJGU9byhmdW5jdGlvbigpe2xldCB0PVV1ZSgpLGU9MTAscj0wO2Zvcig7IXQmJnI8ZTspdD1VdWUoKSxyKys7cmV0dXJuIHhFPVlpLHhFfSwiZ2V0VGFza3MiKSxqdWU9byhmdW5jdGlvbih0LGUscixuKXtyZXR1cm4gbi5pbmNsdWRlcyh0LmZvcm1hdChlLnRyaW0oKSkpPyExOnIuaW5jbHVkZXMoIndlZWtlbmRzIikmJih0Lmlzb1dlZWtkYXkoKT09PVZ1ZVtiRV18fHQuaXNvV2Vla2RheSgpPT09VnVlW2JFXSsxKXx8ci5pbmNsdWRlcyh0LmZvcm1hdCgiZGRkZCIpLnRvTG93ZXJDYXNlKCkpPyEwOnIuaW5jbHVkZXModC5mb3JtYXQoZS50cmltKCkpKX0sImlzSW52YWxpZERhdGUiKSx3JGU9byhmdW5jdGlvbih0KXtlTz10fSwic2V0V2Vla2RheSIpLFQkZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIGVPfSwiZ2V0V2Vla2RheSIpLGskZT1vKGZ1bmN0aW9uKHQpe2JFPXR9LCJzZXRXZWVrZW5kIiksS3VlPW8oZnVuY3Rpb24odCxlLHIsbil7aWYoIXIubGVuZ3RofHx0Lm1hbnVhbEVuZFRpbWUpcmV0dXJuO2xldCBpO3Quc3RhcnRUaW1lIGluc3RhbmNlb2YgRGF0ZT9pPSgwLHhvLmRlZmF1bHQpKHQuc3RhcnRUaW1lKTppPSgwLHhvLmRlZmF1bHQpKHQuc3RhcnRUaW1lLGUsITApLGk9aS5hZGQoMSwiZCIpO2xldCBhO3QuZW5kVGltZSBpbnN0YW5jZW9mIERhdGU/YT0oMCx4by5kZWZhdWx0KSh0LmVuZFRpbWUpOmE9KDAseG8uZGVmYXVsdCkodC5lbmRUaW1lLGUsITApO2xldFtzLGxdPUUkZShpLGEsZSxyLG4pO3QuZW5kVGltZT1zLnRvRGF0ZSgpLHQucmVuZGVyRW5kVGltZT1sfSwiY2hlY2tUYXNrRGF0ZXMiKSxFJGU9byhmdW5jdGlvbih0LGUscixuLGkpe2xldCBhPSExLHM9bnVsbDtmb3IoO3Q8PWU7KWF8fChzPWUudG9EYXRlKCkpLGE9anVlKHQscixuLGkpLGEmJihlPWUuYWRkKDEsImQiKSksdD10LmFkZCgxLCJkIik7cmV0dXJuW2Usc119LCJmaXhUYXNrRGF0ZXMiKSxIST1vKGZ1bmN0aW9uKHQsZSxyKXtyPXIudHJpbSgpO2xldCBpPS9eYWZ0ZXJccysoPzxpZHM+W1xkXHctIF0rKS8uZXhlYyhyKTtpZihpIT09bnVsbCl7bGV0IHM9bnVsbDtmb3IobGV0IHUgb2YgaS5ncm91cHMuaWRzLnNwbGl0KCIgIikpe2xldCBoPU4wKHUpO2ghPT12b2lkIDAmJighc3x8aC5lbmRUaW1lPnMuZW5kVGltZSkmJihzPWgpfWlmKHMpcmV0dXJuIHMuZW5kVGltZTtsZXQgbD1uZXcgRGF0ZTtyZXR1cm4gbC5zZXRIb3VycygwLDAsMCwwKSxsfWxldCBhPSgwLHhvLmRlZmF1bHQpKHIsZS50cmltKCksITApO2lmKGEuaXNWYWxpZCgpKXJldHVybiBhLnRvRGF0ZSgpO3tZLmRlYnVnKCJJbnZhbGlkIGRhdGU6IityKSxZLmRlYnVnKCJXaXRoIGRhdGUgZm9ybWF0OiIrZS50cmltKCkpO2xldCBzPW5ldyBEYXRlKHIpO2lmKHM9PT12b2lkIDB8fGlzTmFOKHMuZ2V0VGltZSgpKXx8cy5nZXRGdWxsWWVhcigpPC0xZTR8fHMuZ2V0RnVsbFllYXIoKT4xZTQpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRhdGU6IityKTtyZXR1cm4gc319LCJnZXRTdGFydERhdGUiKSxRdWU9byhmdW5jdGlvbih0KXtsZXQgZT0vXihcZCsoPzpcLlxkKyk/KShbTWRobXN3eV18bXMpJC8uZXhlYyh0LnRyaW0oKSk7cmV0dXJuIGUhPT1udWxsP1tOdW1iZXIucGFyc2VGbG9hdChlWzFdKSxlWzJdXTpbTmFOLCJtcyJdfSwicGFyc2VEdXJhdGlvbiIpLFp1ZT1vKGZ1bmN0aW9uKHQsZSxyLG49ITEpe3I9ci50cmltKCk7bGV0IGE9L151bnRpbFxzKyg/PGlkcz5bXGRcdy0gXSspLy5leGVjKHIpO2lmKGEhPT1udWxsKXtsZXQgZj1udWxsO2ZvcihsZXQgcCBvZiBhLmdyb3Vwcy5pZHMuc3BsaXQoIiAiKSl7bGV0IG09TjAocCk7bSE9PXZvaWQgMCYmKCFmfHxtLnN0YXJ0VGltZTxmLnN0YXJ0VGltZSkmJihmPW0pfWlmKGYpcmV0dXJuIGYuc3RhcnRUaW1lO2xldCBkPW5ldyBEYXRlO3JldHVybiBkLnNldEhvdXJzKDAsMCwwLDApLGR9bGV0IHM9KDAseG8uZGVmYXVsdCkocixlLnRyaW0oKSwhMCk7aWYocy5pc1ZhbGlkKCkpcmV0dXJuIG4mJihzPXMuYWRkKDEsImQiKSkscy50b0RhdGUoKTtsZXQgbD0oMCx4by5kZWZhdWx0KSh0KSxbdSxoXT1RdWUocik7aWYoIU51bWJlci5pc05hTih1KSl7bGV0IGY9bC5hZGQodSxoKTtmLmlzVmFsaWQoKSYmKGw9Zil9cmV0dXJuIGwudG9EYXRlKCl9LCJnZXRFbmREYXRlIikseUU9MCxXZz1vKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09dm9pZCAwPyh5RT15RSsxLCJ0YXNrIit5RSk6dH0sInBhcnNlSWQiKSxTJGU9byhmdW5jdGlvbih0LGUpe2xldCByO2Uuc3Vic3RyKDAsMSk9PT0iOiI/cj1lLnN1YnN0cigxLGUubGVuZ3RoKTpyPWU7bGV0IG49ci5zcGxpdCgiLCIpLGk9e307bmhlKG4saSxYdWUpO2ZvcihsZXQgcz0wO3M8bi5sZW5ndGg7cysrKW5bc109bltzXS50cmltKCk7bGV0IGE9IiI7c3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDE6aS5pZD1XZygpLGkuc3RhcnRUaW1lPXQuZW5kVGltZSxhPW5bMF07YnJlYWs7Y2FzZSAyOmkuaWQ9V2coKSxpLnN0YXJ0VGltZT1ISSh2b2lkIDAscWMsblswXSksYT1uWzFdO2JyZWFrO2Nhc2UgMzppLmlkPVdnKG5bMF0pLGkuc3RhcnRUaW1lPUhJKHZvaWQgMCxxYyxuWzFdKSxhPW5bMl07YnJlYWs7ZGVmYXVsdDp9cmV0dXJuIGEmJihpLmVuZFRpbWU9WnVlKGkuc3RhcnRUaW1lLHFjLGEsQXgpLGkubWFudWFsRW5kVGltZT0oMCx4by5kZWZhdWx0KShhLCJZWVlZLU1NLUREIiwhMCkuaXNWYWxpZCgpLEt1ZShpLHFjLEN4LFN4KSksaX0sImNvbXBpbGVEYXRhIiksQyRlPW8oZnVuY3Rpb24odCxlKXtsZXQgcjtlLnN1YnN0cigwLDEpPT09IjoiP3I9ZS5zdWJzdHIoMSxlLmxlbmd0aCk6cj1lO2xldCBuPXIuc3BsaXQoIiwiKSxpPXt9O25oZShuLGksWHVlKTtmb3IobGV0IGE9MDthPG4ubGVuZ3RoO2ErKyluW2FdPW5bYV0udHJpbSgpO3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAxOmkuaWQ9V2coKSxpLnN0YXJ0VGltZT17dHlwZToicHJldlRhc2tFbmQiLGlkOnR9LGkuZW5kVGltZT17ZGF0YTpuWzBdfTticmVhaztjYXNlIDI6aS5pZD1XZygpLGkuc3RhcnRUaW1lPXt0eXBlOiJnZXRTdGFydERhdGUiLHN0YXJ0RGF0YTpuWzBdfSxpLmVuZFRpbWU9e2RhdGE6blsxXX07YnJlYWs7Y2FzZSAzOmkuaWQ9V2coblswXSksaS5zdGFydFRpbWU9e3R5cGU6ImdldFN0YXJ0RGF0ZSIsc3RhcnREYXRhOm5bMV19LGkuZW5kVGltZT17ZGF0YTpuWzJdfTticmVhaztkZWZhdWx0On1yZXR1cm4gaX0sInBhcnNlRGF0YSIpLFlpPVtdLEp1ZT17fSxBJGU9byhmdW5jdGlvbih0LGUpe2xldCByPXtzZWN0aW9uOllnLHR5cGU6WWcscHJvY2Vzc2VkOiExLG1hbnVhbEVuZFRpbWU6ITEscmVuZGVyRW5kVGltZTpudWxsLHJhdzp7ZGF0YTplfSx0YXNrOnQsY2xhc3NlczpbXX0sbj1DJGUodkUsZSk7ci5yYXcuc3RhcnRUaW1lPW4uc3RhcnRUaW1lLHIucmF3LmVuZFRpbWU9bi5lbmRUaW1lLHIuaWQ9bi5pZCxyLnByZXZUYXNrSWQ9dkUsci5hY3RpdmU9bi5hY3RpdmUsci5kb25lPW4uZG9uZSxyLmNyaXQ9bi5jcml0LHIubWlsZXN0b25lPW4ubWlsZXN0b25lLHIub3JkZXI9VUksVUkrKztsZXQgaT1ZaS5wdXNoKHIpO3ZFPXIuaWQsSnVlW3IuaWRdPWktMX0sImFkZFRhc2siKSxOMD1vKGZ1bmN0aW9uKHQpe2xldCBlPUp1ZVt0XTtyZXR1cm4gWWlbZV19LCJmaW5kVGFza0J5SWQiKSxfJGU9byhmdW5jdGlvbih0LGUpe2xldCByPXtzZWN0aW9uOllnLHR5cGU6WWcsZGVzY3JpcHRpb246dCx0YXNrOnQsY2xhc3NlczpbXX0sbj1TJGUoV0ksZSk7ci5zdGFydFRpbWU9bi5zdGFydFRpbWUsci5lbmRUaW1lPW4uZW5kVGltZSxyLmlkPW4uaWQsci5hY3RpdmU9bi5hY3RpdmUsci5kb25lPW4uZG9uZSxyLmNyaXQ9bi5jcml0LHIubWlsZXN0b25lPW4ubWlsZXN0b25lLFdJPXIseEUucHVzaChyKX0sImFkZFRhc2tPcmciKSxVdWU9byhmdW5jdGlvbigpe2xldCB0PW8oZnVuY3Rpb24ocil7bGV0IG49WWlbcl0saT0iIjtzd2l0Y2goWWlbcl0ucmF3LnN0YXJ0VGltZS50eXBlKXtjYXNlInByZXZUYXNrRW5kIjp7bGV0IGE9TjAobi5wcmV2VGFza0lkKTtuLnN0YXJ0VGltZT1hLmVuZFRpbWU7YnJlYWt9Y2FzZSJnZXRTdGFydERhdGUiOmk9SEkodm9pZCAwLHFjLFlpW3JdLnJhdy5zdGFydFRpbWUuc3RhcnREYXRhKSxpJiYoWWlbcl0uc3RhcnRUaW1lPWkpO2JyZWFrfXJldHVybiBZaVtyXS5zdGFydFRpbWUmJihZaVtyXS5lbmRUaW1lPVp1ZShZaVtyXS5zdGFydFRpbWUscWMsWWlbcl0ucmF3LmVuZFRpbWUuZGF0YSxBeCksWWlbcl0uZW5kVGltZSYmKFlpW3JdLnByb2Nlc3NlZD0hMCxZaVtyXS5tYW51YWxFbmRUaW1lPSgwLHhvLmRlZmF1bHQpKFlpW3JdLnJhdy5lbmRUaW1lLmRhdGEsIllZWVktTU0tREQiLCEwKS5pc1ZhbGlkKCksS3VlKFlpW3JdLHFjLEN4LFN4KSkpLFlpW3JdLnByb2Nlc3NlZH0sImNvbXBpbGVUYXNrIiksZT0hMDtmb3IobGV0W3Isbl1vZiBZaS5lbnRyaWVzKCkpdChyKSxlPWUmJm4ucHJvY2Vzc2VkO3JldHVybiBlfSwiY29tcGlsZVRhc2tzIiksTCRlPW8oZnVuY3Rpb24odCxlKXtsZXQgcj1lO3BlKCkuc2VjdXJpdHlMZXZlbCE9PSJsb29zZSImJihyPSgwLEh1ZS5zYW5pdGl6ZVVybCkoZSkpLHQuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe04wKG4pIT09dm9pZCAwJiYodGhlKG4sKCk9Pnt3aW5kb3cub3BlbihyLCJfc2VsZiIpfSksakkuc2V0KG4scikpfSksZWhlKHQsImNsaWNrYWJsZSIpfSwic2V0TGluayIpLGVoZT1vKGZ1bmN0aW9uKHQsZSl7dC5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24ocil7bGV0IG49TjAocik7biE9PXZvaWQgMCYmbi5jbGFzc2VzLnB1c2goZSl9KX0sInNldENsYXNzIiksRCRlPW8oZnVuY3Rpb24odCxlLHIpe2lmKHBlKCkuc2VjdXJpdHlMZXZlbCE9PSJsb29zZSJ8fGU9PT12b2lkIDApcmV0dXJuO2xldCBuPVtdO2lmKHR5cGVvZiByPT0ic3RyaW5nIil7bj1yLnNwbGl0KC8sKD89KD86KD86W14iXSoiKXsyfSkqW14iXSokKS8pO2ZvcihsZXQgYT0wO2E8bi5sZW5ndGg7YSsrKXtsZXQgcz1uW2FdLnRyaW0oKTtzLnN0YXJ0c1dpdGgoJyInKSYmcy5lbmRzV2l0aCgnIicpJiYocz1zLnN1YnN0cigxLHMubGVuZ3RoLTIpKSxuW2FdPXN9fW4ubGVuZ3RoPT09MCYmbi5wdXNoKHQpLE4wKHQpIT09dm9pZCAwJiZ0aGUodCwoKT0+e1V0LnJ1bkZ1bmMoZSwuLi5uKX0pfSwic2V0Q2xpY2tGdW4iKSx0aGU9byhmdW5jdGlvbih0LGUpe1pJLnB1c2goZnVuY3Rpb24oKXtsZXQgcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbaWQ9IiR7dH0iXWApO3IhPT1udWxsJiZyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe2UoKX0pfSxmdW5jdGlvbigpe2xldCByPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD0iJHt0fS10ZXh0Il1gKTtyIT09bnVsbCYmci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXtlKCl9KX0pfSwicHVzaEZ1biIpLE4kZT1vKGZ1bmN0aW9uKHQsZSxyKXt0LnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihuKXtEJGUobixlLHIpfSksZWhlKHQsImNsaWNrYWJsZSIpfSwic2V0Q2xpY2tFdmVudCIpLFIkZT1vKGZ1bmN0aW9uKHQpe1pJLmZvckVhY2goZnVuY3Rpb24oZSl7ZSh0KX0pfSwiYmluZEZ1bmN0aW9ucyIpLHJoZT17Z2V0Q29uZmlnOm8oKCk9PnBlKCkuZ2FudHQsImdldENvbmZpZyIpLGNsZWFyOlpHZSxzZXREYXRlRm9ybWF0OmEkZSxnZXREYXRlRm9ybWF0OmYkZSxlbmFibGVJbmNsdXNpdmVFbmREYXRlczpzJGUsZW5kRGF0ZXNBcmVJbmNsdXNpdmU6byRlLGVuYWJsZVRvcEF4aXM6bCRlLHRvcEF4aXNFbmFibGVkOmMkZSxzZXRBeGlzRm9ybWF0OkpHZSxnZXRBeGlzRm9ybWF0OmUkZSxzZXRUaWNrSW50ZXJ2YWw6dCRlLGdldFRpY2tJbnRlcnZhbDpyJGUsc2V0VG9kYXlNYXJrZXI6biRlLGdldFRvZGF5TWFya2VyOmkkZSxzZXRBY2NUaXRsZTpNcixnZXRBY2NUaXRsZTpCcixzZXREaWFncmFtVGl0bGU6Y24sZ2V0RGlhZ3JhbVRpdGxlOkpyLHNldERpc3BsYXlNb2RlOnUkZSxnZXREaXNwbGF5TW9kZTpoJGUsc2V0QWNjRGVzY3JpcHRpb246RnIsZ2V0QWNjRGVzY3JpcHRpb246enIsYWRkU2VjdGlvbjp2JGUsZ2V0U2VjdGlvbnM6eCRlLGdldFRhc2tzOmIkZSxhZGRUYXNrOkEkZSxmaW5kVGFza0J5SWQ6TjAsYWRkVGFza09yZzpfJGUsc2V0SW5jbHVkZXM6ZCRlLGdldEluY2x1ZGVzOnAkZSxzZXRFeGNsdWRlczptJGUsZ2V0RXhjbHVkZXM6ZyRlLHNldENsaWNrRXZlbnQ6TiRlLHNldExpbms6TCRlLGdldExpbmtzOnkkZSxiaW5kRnVuY3Rpb25zOlIkZSxwYXJzZUR1cmF0aW9uOlF1ZSxpc0ludmFsaWREYXRlOmp1ZSxzZXRXZWVrZGF5OnckZSxnZXRXZWVrZGF5OlQkZSxzZXRXZWVrZW5kOmskZX07byhuaGUsImdldFRhc2tUYWdzIil9KTt2YXIgd0UsTSRlLGFoZSxJJGUsSnUsTyRlLHNoZSxvaGU9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt3RT1KaShWYigpLDEpO3V0KCk7cHIoKTtmcigpO1Z0KCk7YWkoKTtNJGU9byhmdW5jdGlvbigpe1kuZGVidWcoIlNvbWV0aGluZyBpcyBjYWxsaW5nLCBzZXRDb25mLCByZW1vdmUgdGhlIGNhbGwiKX0sInNldENvbmYiKSxhaGU9e21vbmRheTpOaCx0dWVzZGF5OlIzLHdlZG5lc2RheTpNMyx0aHVyc2RheTp4YyxmcmlkYXk6STMsc2F0dXJkYXk6TzMsc3VuZGF5OkFsfSxJJGU9bygodCxlKT0+e2xldCByPVsuLi50XS5tYXAoKCk9Pi0xLzApLG49Wy4uLnRdLnNvcnQoKGEscyk9PmEuc3RhcnRUaW1lLXMuc3RhcnRUaW1lfHxhLm9yZGVyLXMub3JkZXIpLGk9MDtmb3IobGV0IGEgb2Ygbilmb3IobGV0IHM9MDtzPHIubGVuZ3RoO3MrKylpZihhLnN0YXJ0VGltZT49cltzXSl7cltzXT1hLmVuZFRpbWUsYS5vcmRlcj1zK2Uscz5pJiYoaT1zKTticmVha31yZXR1cm4gaX0sImdldE1heEludGVyc2VjdGlvbnMiKSxPJGU9byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT1wZSgpLmdhbnR0LGE9cGUoKS5zZWN1cml0eUxldmVsLHM7YT09PSJzYW5kYm94IiYmKHM9VmUoIiNpIitlKSk7bGV0IGw9YT09PSJzYW5kYm94Ij9WZShzLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOlZlKCJib2R5IiksdT1hPT09InNhbmRib3giP3Mubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQsaD11LmdldEVsZW1lbnRCeUlkKGUpO0p1PWgucGFyZW50RWxlbWVudC5vZmZzZXRXaWR0aCxKdT09PXZvaWQgMCYmKEp1PTEyMDApLGkudXNlV2lkdGghPT12b2lkIDAmJihKdT1pLnVzZVdpZHRoKTtsZXQgZj1uLmRiLmdldFRhc2tzKCksZD1bXTtmb3IobGV0IFMgb2YgZilkLnB1c2goUy50eXBlKTtkPUwoZCk7bGV0IHA9e30sbT0yKmkudG9wUGFkZGluZztpZihuLmRiLmdldERpc3BsYXlNb2RlKCk9PT0iY29tcGFjdCJ8fGkuZGlzcGxheU1vZGU9PT0iY29tcGFjdCIpe2xldCBTPXt9O2ZvcihsZXQgSSBvZiBmKVNbSS5zZWN0aW9uXT09PXZvaWQgMD9TW0kuc2VjdGlvbl09W0ldOlNbSS5zZWN0aW9uXS5wdXNoKEkpO2xldCBBPTA7Zm9yKGxldCBJIG9mIE9iamVjdC5rZXlzKFMpKXtsZXQgRD1JJGUoU1tJXSxBKSsxO0ErPUQsbSs9RCooaS5iYXJIZWlnaHQraS5iYXJHYXApLHBbSV09RH19ZWxzZXttKz1mLmxlbmd0aCooaS5iYXJIZWlnaHQraS5iYXJHYXApO2ZvcihsZXQgUyBvZiBkKXBbU109Zi5maWx0ZXIoQT0+QS50eXBlPT09UykubGVuZ3RofWguc2V0QXR0cmlidXRlKCJ2aWV3Qm94IiwiMCAwICIrSnUrIiAiK20pO2xldCBnPWwuc2VsZWN0KGBbaWQ9IiR7ZX0iXWApLHk9RjMoKS5kb21haW4oW1U0KGYsZnVuY3Rpb24oUyl7cmV0dXJuIFMuc3RhcnRUaW1lfSksVjQoZixmdW5jdGlvbihTKXtyZXR1cm4gUy5lbmRUaW1lfSldKS5yYW5nZVJvdW5kKFswLEp1LWkubGVmdFBhZGRpbmctaS5yaWdodFBhZGRpbmddKTtmdW5jdGlvbiB2KFMsQSl7bGV0IEk9Uy5zdGFydFRpbWUsRD1BLnN0YXJ0VGltZSxrPTA7cmV0dXJuIEk+RD9rPTE6STxEJiYoaz0tMSksa31vKHYsInRhc2tDb21wYXJlIiksZi5zb3J0KHYpLHgoZixKdSxtKSxacihnLG0sSnUsaS51c2VNYXhXaWR0aCksZy5hcHBlbmQoInRleHQiKS50ZXh0KG4uZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpLmF0dHIoIngiLEp1LzIpLmF0dHIoInkiLGkudGl0bGVUb3BNYXJnaW4pLmF0dHIoImNsYXNzIiwidGl0bGVUZXh0Iik7ZnVuY3Rpb24geChTLEEsSSl7bGV0IEQ9aS5iYXJIZWlnaHQsaz1EK2kuYmFyR2FwLFI9aS50b3BQYWRkaW5nLEM9aS5sZWZ0UGFkZGluZyxPPUNsKCkuZG9tYWluKFswLGQubGVuZ3RoXSkucmFuZ2UoWyIjMDBCOUZBIiwiI0Y5NTAwMiJdKS5pbnRlcnBvbGF0ZSh6QSk7dyhrLFIsQyxBLEksUyxuLmRiLmdldEV4Y2x1ZGVzKCksbi5kYi5nZXRJbmNsdWRlcygpKSxfKEMsUixBLEkpLGIoUyxrLFIsQyxELE8sQSxJKSxUKGssUixDLEQsTyksRShDLFIsQSxJKX1vKHgsIm1ha2VHYW50dCIpO2Z1bmN0aW9uIGIoUyxBLEksRCxrLFIsQyl7bGV0IE49Wy4uLm5ldyBTZXQoUy5tYXAoRz0+Ry5vcmRlcikpXS5tYXAoRz0+Uy5maW5kKHo9Pnoub3JkZXI9PT1HKSk7Zy5hcHBlbmQoImciKS5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKE4pLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsMCkuYXR0cigieSIsZnVuY3Rpb24oRyx6KXtyZXR1cm4gej1HLm9yZGVyLHoqQStJLTJ9KS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24oKXtyZXR1cm4gQy1pLnJpZ2h0UGFkZGluZy8yfSkuYXR0cigiaGVpZ2h0IixBKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oRyl7Zm9yKGxldFt6LFddb2YgZC5lbnRyaWVzKCkpaWYoRy50eXBlPT09VylyZXR1cm4ic2VjdGlvbiBzZWN0aW9uIit6JWkubnVtYmVyU2VjdGlvblN0eWxlcztyZXR1cm4ic2VjdGlvbiBzZWN0aW9uMCJ9KTtsZXQgUD1nLmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoUykuZW50ZXIoKSxGPW4uZGIuZ2V0TGlua3MoKTtpZihQLmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIixmdW5jdGlvbihHKXtyZXR1cm4gRy5pZH0pLmF0dHIoInJ4IiwzKS5hdHRyKCJyeSIsMykuYXR0cigieCIsZnVuY3Rpb24oRyl7cmV0dXJuIEcubWlsZXN0b25lP3koRy5zdGFydFRpbWUpK0QrLjUqKHkoRy5lbmRUaW1lKS15KEcuc3RhcnRUaW1lKSktLjUqazp5KEcuc3RhcnRUaW1lKStEfSkuYXR0cigieSIsZnVuY3Rpb24oRyx6KXtyZXR1cm4gej1HLm9yZGVyLHoqQStJfSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKEcpe3JldHVybiBHLm1pbGVzdG9uZT9rOnkoRy5yZW5kZXJFbmRUaW1lfHxHLmVuZFRpbWUpLXkoRy5zdGFydFRpbWUpfSkuYXR0cigiaGVpZ2h0IixrKS5hdHRyKCJ0cmFuc2Zvcm0tb3JpZ2luIixmdW5jdGlvbihHLHope3JldHVybiB6PUcub3JkZXIsKHkoRy5zdGFydFRpbWUpK0QrLjUqKHkoRy5lbmRUaW1lKS15KEcuc3RhcnRUaW1lKSkpLnRvU3RyaW5nKCkrInB4ICIrKHoqQStJKy41KmspLnRvU3RyaW5nKCkrInB4In0pLmF0dHIoImNsYXNzIixmdW5jdGlvbihHKXtsZXQgej0idGFzayIsVz0iIjtHLmNsYXNzZXMubGVuZ3RoPjAmJihXPUcuY2xhc3Nlcy5qb2luKCIgIikpO2xldCBaPTA7Zm9yKGxldFtvZSxLXW9mIGQuZW50cmllcygpKUcudHlwZT09PUsmJihaPW9lJWkubnVtYmVyU2VjdGlvblN0eWxlcyk7bGV0IGo9IiI7cmV0dXJuIEcuYWN0aXZlP0cuY3JpdD9qKz0iIGFjdGl2ZUNyaXQiOmo9IiBhY3RpdmUiOkcuZG9uZT9HLmNyaXQ/aj0iIGRvbmVDcml0IjpqPSIgZG9uZSI6Ry5jcml0JiYoais9IiBjcml0Iiksai5sZW5ndGg9PT0wJiYoaj0iIHRhc2siKSxHLm1pbGVzdG9uZSYmKGo9IiBtaWxlc3RvbmUgIitqKSxqKz1aLGorPSIgIitXLHoran0pLFAuYXBwZW5kKCJ0ZXh0IikuYXR0cigiaWQiLGZ1bmN0aW9uKEcpe3JldHVybiBHLmlkKyItdGV4dCJ9KS50ZXh0KGZ1bmN0aW9uKEcpe3JldHVybiBHLnRhc2t9KS5hdHRyKCJmb250LXNpemUiLGkuZm9udFNpemUpLmF0dHIoIngiLGZ1bmN0aW9uKEcpe2xldCB6PXkoRy5zdGFydFRpbWUpLFc9eShHLnJlbmRlckVuZFRpbWV8fEcuZW5kVGltZSk7Ry5taWxlc3RvbmUmJih6Kz0uNSooeShHLmVuZFRpbWUpLXkoRy5zdGFydFRpbWUpKS0uNSprKSxHLm1pbGVzdG9uZSYmKFc9eitrKTtsZXQgWj10aGlzLmdldEJCb3goKS53aWR0aDtyZXR1cm4gWj5XLXo/VytaKzEuNSppLmxlZnRQYWRkaW5nPkM/eitELTU6VytEKzU6KFcteikvMit6K0R9KS5hdHRyKCJ5IixmdW5jdGlvbihHLHope3JldHVybiB6PUcub3JkZXIseipBK2kuYmFySGVpZ2h0LzIrKGkuZm9udFNpemUvMi0yKStJfSkuYXR0cigidGV4dC1oZWlnaHQiLGspLmF0dHIoImNsYXNzIixmdW5jdGlvbihHKXtsZXQgej15KEcuc3RhcnRUaW1lKSxXPXkoRy5lbmRUaW1lKTtHLm1pbGVzdG9uZSYmKFc9eitrKTtsZXQgWj10aGlzLmdldEJCb3goKS53aWR0aCxqPSIiO0cuY2xhc3Nlcy5sZW5ndGg+MCYmKGo9Ry5jbGFzc2VzLmpvaW4oIiAiKSk7bGV0IG9lPTA7Zm9yKGxldFtlZSxKXW9mIGQuZW50cmllcygpKUcudHlwZT09PUomJihvZT1lZSVpLm51bWJlclNlY3Rpb25TdHlsZXMpO2xldCBLPSIiO3JldHVybiBHLmFjdGl2ZSYmKEcuY3JpdD9LPSJhY3RpdmVDcml0VGV4dCIrb2U6Sz0iYWN0aXZlVGV4dCIrb2UpLEcuZG9uZT9HLmNyaXQ/Sz1LKyIgZG9uZUNyaXRUZXh0IitvZTpLPUsrIiBkb25lVGV4dCIrb2U6Ry5jcml0JiYoSz1LKyIgY3JpdFRleHQiK29lKSxHLm1pbGVzdG9uZSYmKEsrPSIgbWlsZXN0b25lVGV4dCIpLFo+Vy16P1crWisxLjUqaS5sZWZ0UGFkZGluZz5DP2orIiB0YXNrVGV4dE91dHNpZGVMZWZ0IHRhc2tUZXh0T3V0c2lkZSIrb2UrIiAiK0s6aisiIHRhc2tUZXh0T3V0c2lkZVJpZ2h0IHRhc2tUZXh0T3V0c2lkZSIrb2UrIiAiK0srIiB3aWR0aC0iK1o6aisiIHRhc2tUZXh0IHRhc2tUZXh0IitvZSsiICIrSysiIHdpZHRoLSIrWn0pLHBlKCkuc2VjdXJpdHlMZXZlbD09PSJzYW5kYm94Iil7bGV0IEc7Rz1WZSgiI2kiK2UpO2xldCB6PUcubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ7UC5maWx0ZXIoZnVuY3Rpb24oVyl7cmV0dXJuIEYuaGFzKFcuaWQpfSkuZWFjaChmdW5jdGlvbihXKXt2YXIgWj16LnF1ZXJ5U2VsZWN0b3IoIiMiK1cuaWQpLGo9ei5xdWVyeVNlbGVjdG9yKCIjIitXLmlkKyItdGV4dCIpO2xldCBvZT1aLnBhcmVudE5vZGU7dmFyIEs9ei5jcmVhdGVFbGVtZW50KCJhIik7Sy5zZXRBdHRyaWJ1dGUoInhsaW5rOmhyZWYiLEYuZ2V0KFcuaWQpKSxLLnNldEF0dHJpYnV0ZSgidGFyZ2V0IiwiX3RvcCIpLG9lLmFwcGVuZENoaWxkKEspLEsuYXBwZW5kQ2hpbGQoWiksSy5hcHBlbmRDaGlsZChqKX0pfX1vKGIsImRyYXdSZWN0cyIpO2Z1bmN0aW9uIHcoUyxBLEksRCxrLFIsQyxPKXtpZihDLmxlbmd0aD09PTAmJk8ubGVuZ3RoPT09MClyZXR1cm47bGV0IE4sUDtmb3IobGV0e3N0YXJ0VGltZTpaLGVuZFRpbWU6an1vZiBSKShOPT09dm9pZCAwfHxaPE4pJiYoTj1aKSwoUD09PXZvaWQgMHx8aj5QKSYmKFA9aik7aWYoIU58fCFQKXJldHVybjtpZigoMCx3RS5kZWZhdWx0KShQKS5kaWZmKCgwLHdFLmRlZmF1bHQpKE4pLCJ5ZWFyIik+NSl7WS53YXJuKCJUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBtaW4gYW5kIG1heCB0aW1lIGlzIG1vcmUgdGhhbiA1IHllYXJzLiBUaGlzIHdpbGwgY2F1c2UgcGVyZm9ybWFuY2UgaXNzdWVzLiBTa2lwcGluZyBkcmF3aW5nIGV4Y2x1ZGUgZGF5cy4iKTtyZXR1cm59bGV0IEY9bi5kYi5nZXREYXRlRm9ybWF0KCksQj1bXSxHPW51bGwsej0oMCx3RS5kZWZhdWx0KShOKTtmb3IoO3oudmFsdWVPZigpPD1QOyluLmRiLmlzSW52YWxpZERhdGUoeixGLEMsTyk/Rz9HLmVuZD16Okc9e3N0YXJ0OnosZW5kOnp9OkcmJihCLnB1c2goRyksRz1udWxsKSx6PXouYWRkKDEsImQiKTtnLmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoQikuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJpZCIsZnVuY3Rpb24oWil7cmV0dXJuImV4Y2x1ZGUtIitaLnN0YXJ0LmZvcm1hdCgiWVlZWS1NTS1ERCIpfSkuYXR0cigieCIsZnVuY3Rpb24oWil7cmV0dXJuIHkoWi5zdGFydCkrSX0pLmF0dHIoInkiLGkuZ3JpZExpbmVTdGFydFBhZGRpbmcpLmF0dHIoIndpZHRoIixmdW5jdGlvbihaKXtsZXQgaj1aLmVuZC5hZGQoMSwiZGF5Iik7cmV0dXJuIHkoaikteShaLnN0YXJ0KX0pLmF0dHIoImhlaWdodCIsay1BLWkuZ3JpZExpbmVTdGFydFBhZGRpbmcpLmF0dHIoInRyYW5zZm9ybS1vcmlnaW4iLGZ1bmN0aW9uKFosail7cmV0dXJuKHkoWi5zdGFydCkrSSsuNSooeShaLmVuZCkteShaLnN0YXJ0KSkpLnRvU3RyaW5nKCkrInB4ICIrKGoqUysuNSprKS50b1N0cmluZygpKyJweCJ9KS5hdHRyKCJjbGFzcyIsImV4Y2x1ZGUtcmFuZ2UiKX1vKHcsImRyYXdFeGNsdWRlRGF5cyIpO2Z1bmN0aW9uIF8oUyxBLEksRCl7bGV0IGs9YjcoeSkudGlja1NpemUoLUQrQStpLmdyaWRMaW5lU3RhcnRQYWRkaW5nKS50aWNrRm9ybWF0KGtkKG4uZGIuZ2V0QXhpc0Zvcm1hdCgpfHxpLmF4aXNGb3JtYXR8fCIlWS0lbS0lZCIpKSxDPS9eKFsxLTldXGQqKShtaWxsaXNlY29uZHxzZWNvbmR8bWludXRlfGhvdXJ8ZGF5fHdlZWt8bW9udGgpJC8uZXhlYyhuLmRiLmdldFRpY2tJbnRlcnZhbCgpfHxpLnRpY2tJbnRlcnZhbCk7aWYoQyE9PW51bGwpe2xldCBPPUNbMV0sTj1DWzJdLFA9bi5kYi5nZXRXZWVrZGF5KCl8fGkud2Vla2RheTtzd2l0Y2goTil7Y2FzZSJtaWxsaXNlY29uZCI6ay50aWNrcyh5Yy5ldmVyeShPKSk7YnJlYWs7Y2FzZSJzZWNvbmQiOmsudGlja3ModG8uZXZlcnkoTykpO2JyZWFrO2Nhc2UibWludXRlIjprLnRpY2tzKFN1LmV2ZXJ5KE8pKTticmVhaztjYXNlImhvdXIiOmsudGlja3MoQ3UuZXZlcnkoTykpO2JyZWFrO2Nhc2UiZGF5IjprLnRpY2tzKE9vLmV2ZXJ5KE8pKTticmVhaztjYXNlIndlZWsiOmsudGlja3MoYWhlW1BdLmV2ZXJ5KE8pKTticmVhaztjYXNlIm1vbnRoIjprLnRpY2tzKEF1LmV2ZXJ5KE8pKTticmVha319aWYoZy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImdyaWQiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitTKyIsICIrKEQtNTApKyIpIikuY2FsbChrKS5zZWxlY3RBbGwoInRleHQiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJmaWxsIiwiIzAwMCIpLmF0dHIoInN0cm9rZSIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJkeSIsIjFlbSIpLG4uZGIudG9wQXhpc0VuYWJsZWQoKXx8aS50b3BBeGlzKXtsZXQgTz14Nyh5KS50aWNrU2l6ZSgtRCtBK2kuZ3JpZExpbmVTdGFydFBhZGRpbmcpLnRpY2tGb3JtYXQoa2Qobi5kYi5nZXRBeGlzRm9ybWF0KCl8fGkuYXhpc0Zvcm1hdHx8IiVZLSVtLSVkIikpO2lmKEMhPT1udWxsKXtsZXQgTj1DWzFdLFA9Q1syXSxGPW4uZGIuZ2V0V2Vla2RheSgpfHxpLndlZWtkYXk7c3dpdGNoKFApe2Nhc2UibWlsbGlzZWNvbmQiOk8udGlja3MoeWMuZXZlcnkoTikpO2JyZWFrO2Nhc2Uic2Vjb25kIjpPLnRpY2tzKHRvLmV2ZXJ5KE4pKTticmVhaztjYXNlIm1pbnV0ZSI6Ty50aWNrcyhTdS5ldmVyeShOKSk7YnJlYWs7Y2FzZSJob3VyIjpPLnRpY2tzKEN1LmV2ZXJ5KE4pKTticmVhaztjYXNlImRheSI6Ty50aWNrcyhPby5ldmVyeShOKSk7YnJlYWs7Y2FzZSJ3ZWVrIjpPLnRpY2tzKGFoZVtGXS5ldmVyeShOKSk7YnJlYWs7Y2FzZSJtb250aCI6Ty50aWNrcyhBdS5ldmVyeShOKSk7YnJlYWt9fWcuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJncmlkIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrUysiLCAiK0ErIikiKS5jYWxsKE8pLnNlbGVjdEFsbCgidGV4dCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImZpbGwiLCIjMDAwIikuYXR0cigic3Ryb2tlIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApfX1vKF8sIm1ha2VHcmlkIik7ZnVuY3Rpb24gVChTLEEpe2xldCBJPTAsRD1PYmplY3Qua2V5cyhwKS5tYXAoaz0+W2sscFtrXV0pO2cuYXBwZW5kKCJnIikuc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YShEKS5lbnRlcigpLmFwcGVuZChmdW5jdGlvbihrKXtsZXQgUj1rWzBdLnNwbGl0KHFlLmxpbmVCcmVha1JlZ2V4KSxDPS0oUi5sZW5ndGgtMSkvMixPPXUuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTtPLnNldEF0dHJpYnV0ZSgiZHkiLEMrImVtIik7Zm9yKGxldFtOLFBdb2YgUi5lbnRyaWVzKCkpe2xldCBGPXUuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRzcGFuIik7Ri5zZXRBdHRyaWJ1dGUoImFsaWdubWVudC1iYXNlbGluZSIsImNlbnRyYWwiKSxGLnNldEF0dHJpYnV0ZSgieCIsIjEwIiksTj4wJiZGLnNldEF0dHJpYnV0ZSgiZHkiLCIxZW0iKSxGLnRleHRDb250ZW50PVAsTy5hcHBlbmRDaGlsZChGKX1yZXR1cm4gT30pLmF0dHIoIngiLDEwKS5hdHRyKCJ5IixmdW5jdGlvbihrLFIpe2lmKFI+MClmb3IobGV0IEM9MDtDPFI7QysrKXJldHVybiBJKz1EW1ItMV1bMV0sa1sxXSpTLzIrSSpTK0E7ZWxzZSByZXR1cm4ga1sxXSpTLzIrQX0pLmF0dHIoImZvbnQtc2l6ZSIsaS5zZWN0aW9uRm9udFNpemUpLmF0dHIoImNsYXNzIixmdW5jdGlvbihrKXtmb3IobGV0W1IsQ11vZiBkLmVudHJpZXMoKSlpZihrWzBdPT09QylyZXR1cm4ic2VjdGlvblRpdGxlIHNlY3Rpb25UaXRsZSIrUiVpLm51bWJlclNlY3Rpb25TdHlsZXM7cmV0dXJuInNlY3Rpb25UaXRsZSJ9KX1vKFQsInZlcnRMYWJlbHMiKTtmdW5jdGlvbiBFKFMsQSxJLEQpe2xldCBrPW4uZGIuZ2V0VG9kYXlNYXJrZXIoKTtpZihrPT09Im9mZiIpcmV0dXJuO2xldCBSPWcuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0b2RheSIpLEM9bmV3IERhdGUsTz1SLmFwcGVuZCgibGluZSIpO08uYXR0cigieDEiLHkoQykrUykuYXR0cigieDIiLHkoQykrUykuYXR0cigieTEiLGkudGl0bGVUb3BNYXJnaW4pLmF0dHIoInkyIixELWkudGl0bGVUb3BNYXJnaW4pLmF0dHIoImNsYXNzIiwidG9kYXkiKSxrIT09IiImJk8uYXR0cigic3R5bGUiLGsucmVwbGFjZSgvLC9nLCI7IikpfW8oRSwiZHJhd1RvZGF5Iik7ZnVuY3Rpb24gTChTKXtsZXQgQT17fSxJPVtdO2ZvcihsZXQgRD0wLGs9Uy5sZW5ndGg7RDxrOysrRClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQSxTW0RdKXx8KEFbU1tEXV09ITAsSS5wdXNoKFNbRF0pKTtyZXR1cm4gSX1vKEwsImNoZWNrVW5pcXVlIil9LCJkcmF3Iiksc2hlPXtzZXRDb25mOk0kZSxkcmF3Ok8kZX19KTt2YXIgUCRlLGxoZSxjaGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtQJGU9byh0PT5gCiAgLm1lcm1haWQtbWFpbi1mb250IHsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5LCAidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYpOwogIH0KCiAgLmV4Y2x1ZGUtcmFuZ2UgewogICAgZmlsbDogJHt0LmV4Y2x1ZGVCa2dDb2xvcn07CiAgfQoKICAuc2VjdGlvbiB7CiAgICBzdHJva2U6IG5vbmU7CiAgICBvcGFjaXR5OiAwLjI7CiAgfQoKICAuc2VjdGlvbjAgewogICAgZmlsbDogJHt0LnNlY3Rpb25Ca2dDb2xvcn07CiAgfQoKICAuc2VjdGlvbjIgewogICAgZmlsbDogJHt0LnNlY3Rpb25Ca2dDb2xvcjJ9OwogIH0KCiAgLnNlY3Rpb24xLAogIC5zZWN0aW9uMyB7CiAgICBmaWxsOiAke3QuYWx0U2VjdGlvbkJrZ0NvbG9yfTsKICAgIG9wYWNpdHk6IDAuMjsKICB9CgogIC5zZWN0aW9uVGl0bGUwIHsKICAgIGZpbGw6ICR7dC50aXRsZUNvbG9yfTsKICB9CgogIC5zZWN0aW9uVGl0bGUxIHsKICAgIGZpbGw6ICR7dC50aXRsZUNvbG9yfTsKICB9CgogIC5zZWN0aW9uVGl0bGUyIHsKICAgIGZpbGw6ICR7dC50aXRsZUNvbG9yfTsKICB9CgogIC5zZWN0aW9uVGl0bGUzIHsKICAgIGZpbGw6ICR7dC50aXRsZUNvbG9yfTsKICB9CgogIC5zZWN0aW9uVGl0bGUgewogICAgdGV4dC1hbmNob3I6IHN0YXJ0OwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHksICJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZik7CiAgfQoKCiAgLyogR3JpZCBhbmQgYXhpcyAqLwoKICAuZ3JpZCAudGljayB7CiAgICBzdHJva2U6ICR7dC5ncmlkQ29sb3J9OwogICAgb3BhY2l0eTogMC44OwogICAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzOwogIH0KCiAgLmdyaWQgLnRpY2sgdGV4dCB7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogICAgZmlsbDogJHt0LnRleHRDb2xvcn07CiAgfQoKICAuZ3JpZCBwYXRoIHsKICAgIHN0cm9rZS13aWR0aDogMDsKICB9CgoKICAvKiBUb2RheSBsaW5lICovCgogIC50b2RheSB7CiAgICBmaWxsOiBub25lOwogICAgc3Ryb2tlOiAke3QudG9kYXlMaW5lQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAycHg7CiAgfQoKCiAgLyogVGFzayBzdHlsaW5nICovCgogIC8qIERlZmF1bHQgdGFzayAqLwoKICAudGFzayB7CiAgICBzdHJva2Utd2lkdGg6IDI7CiAgfQoKICAudGFza1RleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5LCAidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYpOwogIH0KCiAgLnRhc2tUZXh0T3V0c2lkZVJpZ2h0IHsKICAgIGZpbGw6ICR7dC50YXNrVGV4dERhcmtDb2xvcn07CiAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSwgInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmKTsKICB9CgogIC50YXNrVGV4dE91dHNpZGVMZWZ0IHsKICAgIGZpbGw6ICR7dC50YXNrVGV4dERhcmtDb2xvcn07CiAgICB0ZXh0LWFuY2hvcjogZW5kOwogIH0KCgogIC8qIFNwZWNpYWwgY2FzZSBjbGlja2FibGUgKi8KCiAgLnRhc2suY2xpY2thYmxlIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKICB9CgogIC50YXNrVGV4dC5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZmlsbDogJHt0LnRhc2tUZXh0Q2xpY2thYmxlQ29sb3J9ICFpbXBvcnRhbnQ7CiAgICBmb250LXdlaWdodDogYm9sZDsKICB9CgogIC50YXNrVGV4dE91dHNpZGVMZWZ0LmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmaWxsOiAke3QudGFza1RleHRDbGlja2FibGVDb2xvcn0gIWltcG9ydGFudDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogIH0KCiAgLnRhc2tUZXh0T3V0c2lkZVJpZ2h0LmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmaWxsOiAke3QudGFza1RleHRDbGlja2FibGVDb2xvcn0gIWltcG9ydGFudDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogIH0KCgogIC8qIFNwZWNpZmljIHRhc2sgc2V0dGluZ3MgZm9yIHRoZSBzZWN0aW9ucyovCgogIC50YXNrVGV4dDAsCiAgLnRhc2tUZXh0MSwKICAudGFza1RleHQyLAogIC50YXNrVGV4dDMgewogICAgZmlsbDogJHt0LnRhc2tUZXh0Q29sb3J9OwogIH0KCiAgLnRhc2swLAogIC50YXNrMSwKICAudGFzazIsCiAgLnRhc2szIHsKICAgIGZpbGw6ICR7dC50YXNrQmtnQ29sb3J9OwogICAgc3Ryb2tlOiAke3QudGFza0JvcmRlckNvbG9yfTsKICB9CgogIC50YXNrVGV4dE91dHNpZGUwLAogIC50YXNrVGV4dE91dHNpZGUyCiAgewogICAgZmlsbDogJHt0LnRhc2tUZXh0T3V0c2lkZUNvbG9yfTsKICB9CgogIC50YXNrVGV4dE91dHNpZGUxLAogIC50YXNrVGV4dE91dHNpZGUzIHsKICAgIGZpbGw6ICR7dC50YXNrVGV4dE91dHNpZGVDb2xvcn07CiAgfQoKCiAgLyogQWN0aXZlIHRhc2sgKi8KCiAgLmFjdGl2ZTAsCiAgLmFjdGl2ZTEsCiAgLmFjdGl2ZTIsCiAgLmFjdGl2ZTMgewogICAgZmlsbDogJHt0LmFjdGl2ZVRhc2tCa2dDb2xvcn07CiAgICBzdHJva2U6ICR7dC5hY3RpdmVUYXNrQm9yZGVyQ29sb3J9OwogIH0KCiAgLmFjdGl2ZVRleHQwLAogIC5hY3RpdmVUZXh0MSwKICAuYWN0aXZlVGV4dDIsCiAgLmFjdGl2ZVRleHQzIHsKICAgIGZpbGw6ICR7dC50YXNrVGV4dERhcmtDb2xvcn0gIWltcG9ydGFudDsKICB9CgoKICAvKiBDb21wbGV0ZWQgdGFzayAqLwoKICAuZG9uZTAsCiAgLmRvbmUxLAogIC5kb25lMiwKICAuZG9uZTMgewogICAgc3Ryb2tlOiAke3QuZG9uZVRhc2tCb3JkZXJDb2xvcn07CiAgICBmaWxsOiAke3QuZG9uZVRhc2tCa2dDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDI7CiAgfQoKICAuZG9uZVRleHQwLAogIC5kb25lVGV4dDEsCiAgLmRvbmVUZXh0MiwKICAuZG9uZVRleHQzIHsKICAgIGZpbGw6ICR7dC50YXNrVGV4dERhcmtDb2xvcn0gIWltcG9ydGFudDsKICB9CgoKICAvKiBUYXNrcyBvbiB0aGUgY3JpdGljYWwgbGluZSAqLwoKICAuY3JpdDAsCiAgLmNyaXQxLAogIC5jcml0MiwKICAuY3JpdDMgewogICAgc3Ryb2tlOiAke3QuY3JpdEJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7dC5jcml0QmtnQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyOwogIH0KCiAgLmFjdGl2ZUNyaXQwLAogIC5hY3RpdmVDcml0MSwKICAuYWN0aXZlQ3JpdDIsCiAgLmFjdGl2ZUNyaXQzIHsKICAgIHN0cm9rZTogJHt0LmNyaXRCb3JkZXJDb2xvcn07CiAgICBmaWxsOiAke3QuYWN0aXZlVGFza0JrZ0NvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMjsKICB9CgogIC5kb25lQ3JpdDAsCiAgLmRvbmVDcml0MSwKICAuZG9uZUNyaXQyLAogIC5kb25lQ3JpdDMgewogICAgc3Ryb2tlOiAke3QuY3JpdEJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7dC5kb25lVGFza0JrZ0NvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMjsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlczsKICB9CgogIC5taWxlc3RvbmUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpIHNjYWxlKDAuOCwwLjgpOwogIH0KCiAgLm1pbGVzdG9uZVRleHQgewogICAgZm9udC1zdHlsZTogaXRhbGljOwogIH0KICAuZG9uZUNyaXRUZXh0MCwKICAuZG9uZUNyaXRUZXh0MSwKICAuZG9uZUNyaXRUZXh0MiwKICAuZG9uZUNyaXRUZXh0MyB7CiAgICBmaWxsOiAke3QudGFza1RleHREYXJrQ29sb3J9ICFpbXBvcnRhbnQ7CiAgfQoKICAuYWN0aXZlQ3JpdFRleHQwLAogIC5hY3RpdmVDcml0VGV4dDEsCiAgLmFjdGl2ZUNyaXRUZXh0MiwKICAuYWN0aXZlQ3JpdFRleHQzIHsKICAgIGZpbGw6ICR7dC50YXNrVGV4dERhcmtDb2xvcn0gIWltcG9ydGFudDsKICB9CgogIC50aXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7dC50aXRsZUNvbG9yfHx0LnRleHRDb2xvcn07CiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSwgInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmKTsKICB9CmAsImdldFN0eWxlcyIpLGxoZT1QJGV9KTt2YXIgdWhlPXt9O3ZyKHVoZSx7ZGlhZ3JhbTooKT0+QiRlfSk7dmFyIEIkZSxoaGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtGdWUoKTtpaGUoKTtvaGUoKTtjaGUoKTtCJGU9e3BhcnNlcjpCdWUsZGI6cmhlLHJlbmRlcmVyOnNoZSxzdHlsZXM6bGhlfX0pO3ZhciBwaGUsbWhlPU0oKCk9PnsidXNlIHN0cmljdCI7SGcoKTt1dCgpO3BoZT17cGFyc2U6byhhc3luYyB0PT57bGV0IGU9YXdhaXQgWWwoImluZm8iLHQpO1kuZGVidWcoZSl9LCJwYXJzZSIpfX0pO3ZhciBfeCx0Tz1NKCgpPT57X3g9IjExLjQuMCJ9KTt2YXIgViRlLFUkZSxnaGUseWhlPU0oKCk9PnsidXNlIHN0cmljdCI7dE8oKTtWJGU9e3ZlcnNpb246X3h9LFUkZT1vKCgpPT5WJGUudmVyc2lvbiwiZ2V0VmVyc2lvbiIpLGdoZT17Z2V0VmVyc2lvbjpVJGV9fSk7dmFyIFZhLGVoPU0oKCk9PnsidXNlIHN0cmljdCI7cHIoKTtWdCgpO1ZhPW8odD0+e2xldHtzZWN1cml0eUxldmVsOmV9PXBlKCkscj1WZSgiYm9keSIpO2lmKGU9PT0ic2FuZGJveCIpe2xldCBhPVZlKGAjaSR7dH1gKS5ub2RlKCk/LmNvbnRlbnREb2N1bWVudD8/ZG9jdW1lbnQ7cj1WZShhLmJvZHkpfXJldHVybiByLnNlbGVjdChgIyR7dH1gKX0sInNlbGVjdFN2Z0VsZW1lbnQiKX0pO3ZhciBIJGUsdmhlLHhoZT1NKCgpPT57InVzZSBzdHJpY3QiO3V0KCk7ZWgoKTthaSgpO0gkZT1vKCh0LGUscik9PntZLmRlYnVnKGByZW5kZXJpbmcgaW5mbyBkaWFncmFtCmArdCk7bGV0IG49VmEoZSk7WnIobiwxMDAsNDAwLCEwKSxuLmFwcGVuZCgiZyIpLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDEwMCkuYXR0cigieSIsNDApLmF0dHIoImNsYXNzIiwidmVyc2lvbiIpLmF0dHIoImZvbnQtc2l6ZSIsMzIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoYHYke3J9YCl9LCJkcmF3IiksdmhlPXtkcmF3OkgkZX19KTt2YXIgYmhlPXt9O3ZyKGJoZSx7ZGlhZ3JhbTooKT0+VyRlfSk7dmFyIFckZSx3aGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjttaGUoKTt5aGUoKTt4aGUoKTtXJGU9e3BhcnNlcjpwaGUsZGI6Z2hlLHJlbmRlcmVyOnZoZX19KTt2YXIgRWhlLHJPLFRFLG5PLFgkZSxqJGUsSyRlLFEkZSxaJGUsSiRlLGVWZSxrRSxpTz1NKCgpPT57InVzZSBzdHJpY3QiO3V0KCk7QWkoKTticygpO0VoZT11ci5waWUsck89e3NlY3Rpb25zOm5ldyBNYXAsc2hvd0RhdGE6ITEsY29uZmlnOkVoZX0sVEU9ck8uc2VjdGlvbnMsbk89ck8uc2hvd0RhdGEsWCRlPXN0cnVjdHVyZWRDbG9uZShFaGUpLGokZT1vKCgpPT5zdHJ1Y3R1cmVkQ2xvbmUoWCRlKSwiZ2V0Q29uZmlnIiksSyRlPW8oKCk9PntURT1uZXcgTWFwLG5PPXJPLnNob3dEYXRhLExyKCl9LCJjbGVhciIpLFEkZT1vKCh7bGFiZWw6dCx2YWx1ZTplfSk9PntURS5oYXModCl8fChURS5zZXQodCxlKSxZLmRlYnVnKGBhZGRlZCBuZXcgc2VjdGlvbjogJHt0fSwgd2l0aCB2YWx1ZTogJHtlfWApKX0sImFkZFNlY3Rpb24iKSxaJGU9bygoKT0+VEUsImdldFNlY3Rpb25zIiksSiRlPW8odD0+e25PPXR9LCJzZXRTaG93RGF0YSIpLGVWZT1vKCgpPT5uTywiZ2V0U2hvd0RhdGEiKSxrRT17Z2V0Q29uZmlnOmokZSxjbGVhcjpLJGUsc2V0RGlhZ3JhbVRpdGxlOmNuLGdldERpYWdyYW1UaXRsZTpKcixzZXRBY2NUaXRsZTpNcixnZXRBY2NUaXRsZTpCcixzZXRBY2NEZXNjcmlwdGlvbjpGcixnZXRBY2NEZXNjcmlwdGlvbjp6cixhZGRTZWN0aW9uOlEkZSxnZXRTZWN0aW9uczpaJGUsc2V0U2hvd0RhdGE6SiRlLGdldFNob3dEYXRhOmVWZX19KTt2YXIgdFZlLFNoZSxDaGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIZygpO3V0KCk7VHgoKTtpTygpO3RWZT1vKCh0LGUpPT57eWYodCxlKSxlLnNldFNob3dEYXRhKHQuc2hvd0RhdGEpLHQuc2VjdGlvbnMubWFwKGUuYWRkU2VjdGlvbil9LCJwb3B1bGF0ZURiIiksU2hlPXtwYXJzZTpvKGFzeW5jIHQ9PntsZXQgZT1hd2FpdCBZbCgicGllIix0KTtZLmRlYnVnKGUpLHRWZShlLGtFKX0sInBhcnNlIil9fSk7dmFyIHJWZSxBaGUsX2hlPU0oKCk9PnsidXNlIHN0cmljdCI7clZlPW8odD0+YAogIC5waWVDaXJjbGV7CiAgICBzdHJva2U6ICR7dC5waWVTdHJva2VDb2xvcn07CiAgICBzdHJva2Utd2lkdGggOiAke3QucGllU3Ryb2tlV2lkdGh9OwogICAgb3BhY2l0eSA6ICR7dC5waWVPcGFjaXR5fTsKICB9CiAgLnBpZU91dGVyQ2lyY2xlewogICAgc3Ryb2tlOiAke3QucGllT3V0ZXJTdHJva2VDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6ICR7dC5waWVPdXRlclN0cm9rZVdpZHRofTsKICAgIGZpbGw6IG5vbmU7CiAgfQogIC5waWVUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogJHt0LnBpZVRpdGxlVGV4dFNpemV9OwogICAgZmlsbDogJHt0LnBpZVRpdGxlVGV4dENvbG9yfTsKICAgIGZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX07CiAgfQogIC5zbGljZSB7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogICAgZmlsbDogJHt0LnBpZVNlY3Rpb25UZXh0Q29sb3J9OwogICAgZm9udC1zaXplOiR7dC5waWVTZWN0aW9uVGV4dFNpemV9OwogICAgLy8gZmlsbDogd2hpdGU7CiAgfQogIC5sZWdlbmQgdGV4dCB7CiAgICBmaWxsOiAke3QucGllTGVnZW5kVGV4dENvbG9yfTsKICAgIGZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6ICR7dC5waWVMZWdlbmRUZXh0U2l6ZX07CiAgfQpgLCJnZXRTdHlsZXMiKSxBaGU9clZlfSk7dmFyIG5WZSxpVmUsTGhlLERoZT1NKCgpPT57InVzZSBzdHJpY3QiO3ByKCk7VnQoKTt1dCgpO2VoKCk7YWkoKTtocigpO25WZT1vKHQ9PntsZXQgZT1bLi4udC5lbnRyaWVzKCldLm1hcChuPT4oe2xhYmVsOm5bMF0sdmFsdWU6blsxXX0pKS5zb3J0KChuLGkpPT5pLnZhbHVlLW4udmFsdWUpO3JldHVybiBIMygpLnZhbHVlKG49Pm4udmFsdWUpKGUpfSwiY3JlYXRlUGllQXJjcyIpLGlWZT1vKCh0LGUscixuKT0+e1kuZGVidWcoYHJlbmRlcmluZyBwaWUgY2hhcnQKYCt0KTtsZXQgaT1uLmRiLGE9cGUoKSxzPURzKGkuZ2V0Q29uZmlnKCksYS5waWUpLGw9NDAsdT0xOCxoPTQsZj00NTAsZD1mLHA9VmEoZSksbT1wLmFwcGVuZCgiZyIpO20uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZC8yKyIsIitmLzIrIikiKTtsZXR7dGhlbWVWYXJpYWJsZXM6Z309YSxbeV09SG8oZy5waWVPdXRlclN0cm9rZVdpZHRoKTt5Pz89MjtsZXQgdj1zLnRleHRQb3NpdGlvbix4PU1hdGgubWluKGQsZikvMi1sLGI9RGwoKS5pbm5lclJhZGl1cygwKS5vdXRlclJhZGl1cyh4KSx3PURsKCkuaW5uZXJSYWRpdXMoeCp2KS5vdXRlclJhZGl1cyh4KnYpO20uYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsMCkuYXR0cigiY3kiLDApLmF0dHIoInIiLHgreS8yKS5hdHRyKCJjbGFzcyIsInBpZU91dGVyQ2lyY2xlIik7bGV0IF89aS5nZXRTZWN0aW9ucygpLFQ9blZlKF8pLEU9W2cucGllMSxnLnBpZTIsZy5waWUzLGcucGllNCxnLnBpZTUsZy5waWU2LGcucGllNyxnLnBpZTgsZy5waWU5LGcucGllMTAsZy5waWUxMSxnLnBpZTEyXSxMPWt1KEUpO20uc2VsZWN0QWxsKCJteVNsaWNlcyIpLmRhdGEoVCkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixiKS5hdHRyKCJmaWxsIixrPT5MKGsuZGF0YS5sYWJlbCkpLmF0dHIoImNsYXNzIiwicGllQ2lyY2xlIik7bGV0IFM9MDtfLmZvckVhY2goaz0+e1MrPWt9KSxtLnNlbGVjdEFsbCgibXlTbGljZXMiKS5kYXRhKFQpLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikudGV4dChrPT4oay5kYXRhLnZhbHVlL1MqMTAwKS50b0ZpeGVkKDApKyIlIikuYXR0cigidHJhbnNmb3JtIixrPT4idHJhbnNsYXRlKCIrdy5jZW50cm9pZChrKSsiKSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImNsYXNzIiwic2xpY2UiKSxtLmFwcGVuZCgidGV4dCIpLnRleHQoaS5nZXREaWFncmFtVGl0bGUoKSkuYXR0cigieCIsMCkuYXR0cigieSIsLShmLTUwKS8yKS5hdHRyKCJjbGFzcyIsInBpZVRpdGxlVGV4dCIpO2xldCBBPW0uc2VsZWN0QWxsKCIubGVnZW5kIikuZGF0YShMLmRvbWFpbigpKS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGVnZW5kIikuYXR0cigidHJhbnNmb3JtIiwoayxSKT0+e2xldCBDPXUraCxPPUMqTC5kb21haW4oKS5sZW5ndGgvMixOPTEyKnUsUD1SKkMtTztyZXR1cm4idHJhbnNsYXRlKCIrTisiLCIrUCsiKSJ9KTtBLmFwcGVuZCgicmVjdCIpLmF0dHIoIndpZHRoIix1KS5hdHRyKCJoZWlnaHQiLHUpLnN0eWxlKCJmaWxsIixMKS5zdHlsZSgic3Ryb2tlIixMKSxBLmRhdGEoVCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsdStoKS5hdHRyKCJ5Iix1LWgpLnRleHQoaz0+e2xldHtsYWJlbDpSLHZhbHVlOkN9PWsuZGF0YTtyZXR1cm4gaS5nZXRTaG93RGF0YSgpP2Ake1J9IFske0N9XWA6Un0pO2xldCBJPU1hdGgubWF4KC4uLkEuc2VsZWN0QWxsKCJ0ZXh0Iikubm9kZXMoKS5tYXAoaz0+az8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg/PzApKSxEPWQrbCt1K2grSTtwLmF0dHIoInZpZXdCb3giLGAwIDAgJHtEfSAke2Z9YCksWnIocCxmLEQscy51c2VNYXhXaWR0aCl9LCJkcmF3IiksTGhlPXtkcmF3OmlWZX19KTt2YXIgTmhlPXt9O3ZyKE5oZSx7ZGlhZ3JhbTooKT0+YVZlfSk7dmFyIGFWZSxSaGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtDaGUoKTtpTygpO19oZSgpO0RoZSgpO2FWZT17cGFyc2VyOlNoZSxkYjprRSxyZW5kZXJlcjpMaGUsc3R5bGVzOkFoZX19KTt2YXIgYU8sT2hlLFBoZT1NKCgpPT57InVzZSBzdHJpY3QiO2FPPWZ1bmN0aW9uKCl7dmFyIHQ9byhmdW5jdGlvbihUZSxpZSxFZSxBZSl7Zm9yKEVlPUVlfHx7fSxBZT1UZS5sZW5ndGg7QWUtLTtFZVtUZVtBZV1dPWllKTtyZXR1cm4gRWV9LCJvIiksZT1bMSwzXSxyPVsxLDRdLG49WzEsNV0saT1bMSw2XSxhPVsxLDddLHM9WzEsNCw1LDEwLDEyLDEzLDE0LDE4LDI1LDM1LDM3LDM5LDQxLDQyLDQ4LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDYwLDYxLDYzLDY0LDY1LDY2LDY3XSxsPVsxLDQsNSwxMCwxMiwxMywxNCwxOCwyNSwyOCwzNSwzNywzOSw0MSw0Miw0OCw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2MSw2Myw2NCw2NSw2Niw2N10sdT1bNTUsNTYsNTddLGg9WzIsMzZdLGY9WzEsMzddLGQ9WzEsMzZdLHA9WzEsMzhdLG09WzEsMzVdLGc9WzEsNDNdLHk9WzEsNDFdLHY9WzEsMTRdLHg9WzEsMjNdLGI9WzEsMThdLHc9WzEsMTldLF89WzEsMjBdLFQ9WzEsMjFdLEU9WzEsMjJdLEw9WzEsMjRdLFM9WzEsMjVdLEE9WzEsMjZdLEk9WzEsMjddLEQ9WzEsMjhdLGs9WzEsMjldLFI9WzEsMzJdLEM9WzEsMzNdLE89WzEsMzRdLE49WzEsMzldLFA9WzEsNDBdLEY9WzEsNDJdLEI9WzEsNDRdLEc9WzEsNjJdLHo9WzEsNjFdLFc9WzQsNSw4LDEwLDEyLDEzLDE0LDE4LDQ0LDQ3LDQ5LDU1LDU2LDU3LDYzLDY0LDY1LDY2LDY3XSxaPVsxLDY1XSxqPVsxLDY2XSxvZT1bMSw2N10sSz1bMSw2OF0sZWU9WzEsNjldLEo9WzEsNzBdLEg9WzEsNzFdLHE9WzEsNzJdLFE9WzEsNzNdLGFlPVsxLDc0XSx1ZT1bMSw3NV0sY2U9WzEsNzZdLHRlPVs0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxOF0sTmU9WzEsOTBdLHNlPVsxLDkxXSxrZT1bMSw5Ml0sUmU9WzEsOTldLENlPVsxLDkzXSxQZT1bMSw5Nl0sSWU9WzEsOTRdLCRlPVsxLDk1XSx5ZT1bMSw5N10sWD1bMSw5OF0sZmU9WzEsMTAyXSxoZT1bMTAsNTUsNTYsNTddLGdlPVs0LDUsNiw4LDEwLDExLDEzLDE3LDE4LDE5LDIwLDU1LDU2LDU3XSxuZT17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsaWRTdHJpbmdUb2tlbjozLEFMUEhBOjQsTlVNOjUsTk9ERV9TVFJJTkc6NixET1dOOjcsTUlOVVM6OCxERUZBVUxUOjksQ09NTUE6MTAsQ09MT046MTEsQU1QOjEyLEJSS1Q6MTMsTVVMVDoxNCxVTklDT0RFX1RFWFQ6MTUsc3R5bGVDb21wb25lbnQ6MTYsVU5JVDoxNyxTUEFDRToxOCxTVFlMRToxOSxQQ1Q6MjAsaWRTdHJpbmc6MjEsc3R5bGU6MjIsc3R5bGVzT3B0OjIzLGNsYXNzRGVmU3RhdGVtZW50OjI0LENMQVNTREVGOjI1LHN0YXJ0OjI2LGVvbDoyNyxRVUFEUkFOVDoyOCxkb2N1bWVudDoyOSxsaW5lOjMwLHN0YXRlbWVudDozMSxheGlzRGV0YWlsczozMixxdWFkcmFudERldGFpbHM6MzMscG9pbnRzOjM0LHRpdGxlOjM1LHRpdGxlX3ZhbHVlOjM2LGFjY190aXRsZTozNyxhY2NfdGl0bGVfdmFsdWU6MzgsYWNjX2Rlc2NyOjM5LGFjY19kZXNjcl92YWx1ZTo0MCxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjQxLHNlY3Rpb246NDIsdGV4dDo0Myxwb2ludF9zdGFydDo0NCxwb2ludF94OjQ1LHBvaW50X3k6NDYsY2xhc3NfbmFtZTo0NywiWC1BWElTIjo0OCwiQVhJUy1URVhULURFTElNSVRFUiI6NDksIlktQVhJUyI6NTAsUVVBRFJBTlRfMTo1MSxRVUFEUkFOVF8yOjUyLFFVQURSQU5UXzM6NTMsUVVBRFJBTlRfNDo1NCxORVdMSU5FOjU1LFNFTUk6NTYsRU9GOjU3LGFscGhhTnVtVG9rZW46NTgsdGV4dE5vVGFnc1Rva2VuOjU5LFNUUjo2MCxNRF9TVFI6NjEsYWxwaGFOdW06NjIsUFVOQ1RVQVRJT046NjMsUExVUzo2NCxFUVVBTFM6NjUsRE9UOjY2LFVOREVSU0NPUkU6NjcsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IkFMUEhBIiw1OiJOVU0iLDY6Ik5PREVfU1RSSU5HIiw3OiJET1dOIiw4OiJNSU5VUyIsOToiREVGQVVMVCIsMTA6IkNPTU1BIiwxMToiQ09MT04iLDEyOiJBTVAiLDEzOiJCUktUIiwxNDoiTVVMVCIsMTU6IlVOSUNPREVfVEVYVCIsMTc6IlVOSVQiLDE4OiJTUEFDRSIsMTk6IlNUWUxFIiwyMDoiUENUIiwyNToiQ0xBU1NERUYiLDI4OiJRVUFEUkFOVCIsMzU6InRpdGxlIiwzNjoidGl0bGVfdmFsdWUiLDM3OiJhY2NfdGl0bGUiLDM4OiJhY2NfdGl0bGVfdmFsdWUiLDM5OiJhY2NfZGVzY3IiLDQwOiJhY2NfZGVzY3JfdmFsdWUiLDQxOiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiw0Mjoic2VjdGlvbiIsNDQ6InBvaW50X3N0YXJ0Iiw0NToicG9pbnRfeCIsNDY6InBvaW50X3kiLDQ3OiJjbGFzc19uYW1lIiw0ODoiWC1BWElTIiw0OToiQVhJUy1URVhULURFTElNSVRFUiIsNTA6IlktQVhJUyIsNTE6IlFVQURSQU5UXzEiLDUyOiJRVUFEUkFOVF8yIiw1MzoiUVVBRFJBTlRfMyIsNTQ6IlFVQURSQU5UXzQiLDU1OiJORVdMSU5FIiw1NjoiU0VNSSIsNTc6IkVPRiIsNjA6IlNUUiIsNjE6Ik1EX1NUUiIsNjM6IlBVTkNUVUFUSU9OIiw2NDoiUExVUyIsNjU6IkVRVUFMUyIsNjY6IkRPVCIsNjc6IlVOREVSU0NPUkUifSxwcm9kdWN0aW9uc186WzAsWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzE2LDFdLFsxNiwxXSxbMTYsMV0sWzE2LDFdLFsxNiwxXSxbMTYsMV0sWzE2LDFdLFsxNiwxXSxbMTYsMV0sWzE2LDFdLFsyMSwxXSxbMjEsMl0sWzIyLDFdLFsyMiwyXSxbMjMsMV0sWzIzLDNdLFsyNCw1XSxbMjYsMl0sWzI2LDJdLFsyNiwyXSxbMjksMF0sWzI5LDJdLFszMCwyXSxbMzEsMF0sWzMxLDFdLFszMSwyXSxbMzEsMV0sWzMxLDFdLFszMSwxXSxbMzEsMl0sWzMxLDJdLFszMSwyXSxbMzEsMV0sWzMxLDFdLFszNCw0XSxbMzQsNV0sWzM0LDVdLFszNCw2XSxbMzIsNF0sWzMyLDNdLFszMiwyXSxbMzIsNF0sWzMyLDNdLFszMiwyXSxbMzMsMl0sWzMzLDJdLFszMywyXSxbMzMsMl0sWzI3LDFdLFsyNywxXSxbMjcsMV0sWzQzLDFdLFs0MywyXSxbNDMsMV0sWzQzLDFdLFs2MiwxXSxbNjIsMl0sWzU4LDFdLFs1OCwxXSxbNTgsMV0sWzU4LDFdLFs1OCwxXSxbNTgsMV0sWzU4LDFdLFs1OCwxXSxbNTgsMV0sWzU4LDFdLFs1OCwxXSxbNTksMV0sWzU5LDFdLFs1OSwxXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKGllLEVlLEFlLEdlLEJlLG1lLEhlKXt2YXIgT2U9bWUubGVuZ3RoLTE7c3dpdGNoKEJlKXtjYXNlIDIzOnRoaXMuJD1tZVtPZV07YnJlYWs7Y2FzZSAyNDp0aGlzLiQ9bWVbT2UtMV0rIiIrbWVbT2VdO2JyZWFrO2Nhc2UgMjY6dGhpcy4kPW1lW09lLTFdK21lW09lXTticmVhaztjYXNlIDI3OnRoaXMuJD1bbWVbT2VdLnRyaW0oKV07YnJlYWs7Y2FzZSAyODptZVtPZS0yXS5wdXNoKG1lW09lXS50cmltKCkpLHRoaXMuJD1tZVtPZS0yXTticmVhaztjYXNlIDI5OnRoaXMuJD1tZVtPZS00XSxHZS5hZGRDbGFzcyhtZVtPZS0yXSxtZVtPZV0pO2JyZWFrO2Nhc2UgMzc6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNDI6dGhpcy4kPW1lW09lXS50cmltKCksR2Uuc2V0RGlhZ3JhbVRpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSA0Mzp0aGlzLiQ9bWVbT2VdLnRyaW0oKSxHZS5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgNDQ6Y2FzZSA0NTp0aGlzLiQ9bWVbT2VdLnRyaW0oKSxHZS5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgNDY6R2UuYWRkU2VjdGlvbihtZVtPZV0uc3Vic3RyKDgpKSx0aGlzLiQ9bWVbT2VdLnN1YnN0cig4KTticmVhaztjYXNlIDQ3OkdlLmFkZFBvaW50KG1lW09lLTNdLCIiLG1lW09lLTFdLG1lW09lXSxbXSk7YnJlYWs7Y2FzZSA0ODpHZS5hZGRQb2ludChtZVtPZS00XSxtZVtPZS0zXSxtZVtPZS0xXSxtZVtPZV0sW10pO2JyZWFrO2Nhc2UgNDk6R2UuYWRkUG9pbnQobWVbT2UtNF0sIiIsbWVbT2UtMl0sbWVbT2UtMV0sbWVbT2VdKTticmVhaztjYXNlIDUwOkdlLmFkZFBvaW50KG1lW09lLTVdLG1lW09lLTRdLG1lW09lLTJdLG1lW09lLTFdLG1lW09lXSk7YnJlYWs7Y2FzZSA1MTpHZS5zZXRYQXhpc0xlZnRUZXh0KG1lW09lLTJdKSxHZS5zZXRYQXhpc1JpZ2h0VGV4dChtZVtPZV0pO2JyZWFrO2Nhc2UgNTI6bWVbT2UtMV0udGV4dCs9IiBcdTI3RjYgIixHZS5zZXRYQXhpc0xlZnRUZXh0KG1lW09lLTFdKTticmVhaztjYXNlIDUzOkdlLnNldFhBeGlzTGVmdFRleHQobWVbT2VdKTticmVhaztjYXNlIDU0OkdlLnNldFlBeGlzQm90dG9tVGV4dChtZVtPZS0yXSksR2Uuc2V0WUF4aXNUb3BUZXh0KG1lW09lXSk7YnJlYWs7Y2FzZSA1NTptZVtPZS0xXS50ZXh0Kz0iIFx1MjdGNiAiLEdlLnNldFlBeGlzQm90dG9tVGV4dChtZVtPZS0xXSk7YnJlYWs7Y2FzZSA1NjpHZS5zZXRZQXhpc0JvdHRvbVRleHQobWVbT2VdKTticmVhaztjYXNlIDU3OkdlLnNldFF1YWRyYW50MVRleHQobWVbT2VdKTticmVhaztjYXNlIDU4OkdlLnNldFF1YWRyYW50MlRleHQobWVbT2VdKTticmVhaztjYXNlIDU5OkdlLnNldFF1YWRyYW50M1RleHQobWVbT2VdKTticmVhaztjYXNlIDYwOkdlLnNldFF1YWRyYW50NFRleHQobWVbT2VdKTticmVhaztjYXNlIDY0OnRoaXMuJD17dGV4dDptZVtPZV0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgNjU6dGhpcy4kPXt0ZXh0Om1lW09lLTFdLnRleHQrIiIrbWVbT2VdLHR5cGU6bWVbT2UtMV0udHlwZX07YnJlYWs7Y2FzZSA2Njp0aGlzLiQ9e3RleHQ6bWVbT2VdLHR5cGU6InRleHQifTticmVhaztjYXNlIDY3OnRoaXMuJD17dGV4dDptZVtPZV0sdHlwZToibWFya2Rvd24ifTticmVhaztjYXNlIDY4OnRoaXMuJD1tZVtPZV07YnJlYWs7Y2FzZSA2OTp0aGlzLiQ9bWVbT2UtMV0rIiIrbWVbT2VdO2JyZWFrfX0sImFub255bW91cyIpLHRhYmxlOlt7MTg6ZSwyNjoxLDI3OjIsMjg6ciw1NTpuLDU2OmksNTc6YX0sezE6WzNdfSx7MTg6ZSwyNjo4LDI3OjIsMjg6ciw1NTpuLDU2OmksNTc6YX0sezE4OmUsMjY6OSwyNzoyLDI4OnIsNTU6biw1NjppLDU3OmF9LHQocyxbMiwzM10sezI5OjEwfSksdChsLFsyLDYxXSksdChsLFsyLDYyXSksdChsLFsyLDYzXSksezE6WzIsMzBdfSx7MTpbMiwzMV19LHQodSxoLHszMDoxMSwzMToxMiwyNDoxMywzMjoxNSwzMzoxNiwzNDoxNyw0MzozMCw1ODozMSwxOlsyLDMyXSw0OmYsNTpkLDEwOnAsMTI6bSwxMzpnLDE0OnksMTg6diwyNTp4LDM1OmIsMzc6dywzOTpfLDQxOlQsNDI6RSw0ODpMLDUwOlMsNTE6QSw1MjpJLDUzOkQsNTQ6ayw2MDpSLDYxOkMsNjM6Tyw2NDpOLDY1OlAsNjY6Riw2NzpCfSksdChzLFsyLDM0XSksezI3OjQ1LDU1Om4sNTY6aSw1NzphfSx0KHUsWzIsMzddKSx0KHUsaCx7MjQ6MTMsMzI6MTUsMzM6MTYsMzQ6MTcsNDM6MzAsNTg6MzEsMzE6NDYsNDpmLDU6ZCwxMDpwLDEyOm0sMTM6ZywxNDp5LDE4OnYsMjU6eCwzNTpiLDM3OncsMzk6Xyw0MTpULDQyOkUsNDg6TCw1MDpTLDUxOkEsNTI6SSw1MzpELDU0OmssNjA6Uiw2MTpDLDYzOk8sNjQ6Tiw2NTpQLDY2OkYsNjc6Qn0pLHQodSxbMiwzOV0pLHQodSxbMiw0MF0pLHQodSxbMiw0MV0pLHszNjpbMSw0N119LHszODpbMSw0OF19LHs0MDpbMSw0OV19LHQodSxbMiw0NV0pLHQodSxbMiw0Nl0pLHsxODpbMSw1MF19LHs0OmYsNTpkLDEwOnAsMTI6bSwxMzpnLDE0OnksNDM6NTEsNTg6MzEsNjA6Uiw2MTpDLDYzOk8sNjQ6Tiw2NTpQLDY2OkYsNjc6Qn0sezQ6Ziw1OmQsMTA6cCwxMjptLDEzOmcsMTQ6eSw0Mzo1Miw1ODozMSw2MDpSLDYxOkMsNjM6Tyw2NDpOLDY1OlAsNjY6Riw2NzpCfSx7NDpmLDU6ZCwxMDpwLDEyOm0sMTM6ZywxNDp5LDQzOjUzLDU4OjMxLDYwOlIsNjE6Qyw2MzpPLDY0Ok4sNjU6UCw2NjpGLDY3OkJ9LHs0OmYsNTpkLDEwOnAsMTI6bSwxMzpnLDE0OnksNDM6NTQsNTg6MzEsNjA6Uiw2MTpDLDYzOk8sNjQ6Tiw2NTpQLDY2OkYsNjc6Qn0sezQ6Ziw1OmQsMTA6cCwxMjptLDEzOmcsMTQ6eSw0Mzo1NSw1ODozMSw2MDpSLDYxOkMsNjM6Tyw2NDpOLDY1OlAsNjY6Riw2NzpCfSx7NDpmLDU6ZCwxMDpwLDEyOm0sMTM6ZywxNDp5LDQzOjU2LDU4OjMxLDYwOlIsNjE6Qyw2MzpPLDY0Ok4sNjU6UCw2NjpGLDY3OkJ9LHs0OmYsNTpkLDg6RywxMDpwLDEyOm0sMTM6ZywxNDp5LDE4OnosNDQ6WzEsNTddLDQ3OlsxLDU4XSw1ODo2MCw1OTo1OSw2MzpPLDY0Ok4sNjU6UCw2NjpGLDY3OkJ9LHQoVyxbMiw2NF0pLHQoVyxbMiw2Nl0pLHQoVyxbMiw2N10pLHQoVyxbMiw3MF0pLHQoVyxbMiw3MV0pLHQoVyxbMiw3Ml0pLHQoVyxbMiw3M10pLHQoVyxbMiw3NF0pLHQoVyxbMiw3NV0pLHQoVyxbMiw3Nl0pLHQoVyxbMiw3N10pLHQoVyxbMiw3OF0pLHQoVyxbMiw3OV0pLHQoVyxbMiw4MF0pLHQocyxbMiwzNV0pLHQodSxbMiwzOF0pLHQodSxbMiw0Ml0pLHQodSxbMiw0M10pLHQodSxbMiw0NF0pLHszOjY0LDQ6Wiw1OmosNjpvZSw3OkssODplZSw5OkosMTA6SCwxMTpxLDEyOlEsMTM6YWUsMTQ6dWUsMTU6Y2UsMjE6NjN9LHQodSxbMiw1M10sezU5OjU5LDU4OjYwLDQ6Ziw1OmQsODpHLDEwOnAsMTI6bSwxMzpnLDE0OnksMTg6eiw0OTpbMSw3N10sNjM6Tyw2NDpOLDY1OlAsNjY6Riw2NzpCfSksdCh1LFsyLDU2XSx7NTk6NTksNTg6NjAsNDpmLDU6ZCw4OkcsMTA6cCwxMjptLDEzOmcsMTQ6eSwxODp6LDQ5OlsxLDc4XSw2MzpPLDY0Ok4sNjU6UCw2NjpGLDY3OkJ9KSx0KHUsWzIsNTddLHs1OTo1OSw1ODo2MCw0OmYsNTpkLDg6RywxMDpwLDEyOm0sMTM6ZywxNDp5LDE4OnosNjM6Tyw2NDpOLDY1OlAsNjY6Riw2NzpCfSksdCh1LFsyLDU4XSx7NTk6NTksNTg6NjAsNDpmLDU6ZCw4OkcsMTA6cCwxMjptLDEzOmcsMTQ6eSwxODp6LDYzOk8sNjQ6Tiw2NTpQLDY2OkYsNjc6Qn0pLHQodSxbMiw1OV0sezU5OjU5LDU4OjYwLDQ6Ziw1OmQsODpHLDEwOnAsMTI6bSwxMzpnLDE0OnksMTg6eiw2MzpPLDY0Ok4sNjU6UCw2NjpGLDY3OkJ9KSx0KHUsWzIsNjBdLHs1OTo1OSw1ODo2MCw0OmYsNTpkLDg6RywxMDpwLDEyOm0sMTM6ZywxNDp5LDE4OnosNjM6Tyw2NDpOLDY1OlAsNjY6Riw2NzpCfSksezQ1OlsxLDc5XX0sezQ0OlsxLDgwXX0sdChXLFsyLDY1XSksdChXLFsyLDgxXSksdChXLFsyLDgyXSksdChXLFsyLDgzXSksezM6ODIsNDpaLDU6aiw2Om9lLDc6Syw4OmVlLDk6SiwxMDpILDExOnEsMTI6USwxMzphZSwxNDp1ZSwxNTpjZSwxODpbMSw4MV19LHQodGUsWzIsMjNdKSx0KHRlLFsyLDFdKSx0KHRlLFsyLDJdKSx0KHRlLFsyLDNdKSx0KHRlLFsyLDRdKSx0KHRlLFsyLDVdKSx0KHRlLFsyLDZdKSx0KHRlLFsyLDddKSx0KHRlLFsyLDhdKSx0KHRlLFsyLDldKSx0KHRlLFsyLDEwXSksdCh0ZSxbMiwxMV0pLHQodGUsWzIsMTJdKSx0KHUsWzIsNTJdLHs1ODozMSw0Mzo4Myw0OmYsNTpkLDEwOnAsMTI6bSwxMzpnLDE0OnksNjA6Uiw2MTpDLDYzOk8sNjQ6Tiw2NTpQLDY2OkYsNjc6Qn0pLHQodSxbMiw1NV0sezU4OjMxLDQzOjg0LDQ6Ziw1OmQsMTA6cCwxMjptLDEzOmcsMTQ6eSw2MDpSLDYxOkMsNjM6Tyw2NDpOLDY1OlAsNjY6Riw2NzpCfSksezQ2OlsxLDg1XX0sezQ1OlsxLDg2XX0sezQ6TmUsNTpzZSw2OmtlLDg6UmUsMTE6Q2UsMTM6UGUsMTY6ODksMTc6SWUsMTg6JGUsMTk6eWUsMjA6WCwyMjo4OCwyMzo4N30sdCh0ZSxbMiwyNF0pLHQodSxbMiw1MV0sezU5OjU5LDU4OjYwLDQ6Ziw1OmQsODpHLDEwOnAsMTI6bSwxMzpnLDE0OnksMTg6eiw2MzpPLDY0Ok4sNjU6UCw2NjpGLDY3OkJ9KSx0KHUsWzIsNTRdLHs1OTo1OSw1ODo2MCw0OmYsNTpkLDg6RywxMDpwLDEyOm0sMTM6ZywxNDp5LDE4OnosNjM6Tyw2NDpOLDY1OlAsNjY6Riw2NzpCfSksdCh1LFsyLDQ3XSx7MjI6ODgsMTY6ODksMjM6MTAwLDQ6TmUsNTpzZSw2OmtlLDg6UmUsMTE6Q2UsMTM6UGUsMTc6SWUsMTg6JGUsMTk6eWUsMjA6WH0pLHs0NjpbMSwxMDFdfSx0KHUsWzIsMjldLHsxMDpmZX0pLHQoaGUsWzIsMjddLHsxNjoxMDMsNDpOZSw1OnNlLDY6a2UsODpSZSwxMTpDZSwxMzpQZSwxNzpJZSwxODokZSwxOTp5ZSwyMDpYfSksdChnZSxbMiwyNV0pLHQoZ2UsWzIsMTNdKSx0KGdlLFsyLDE0XSksdChnZSxbMiwxNV0pLHQoZ2UsWzIsMTZdKSx0KGdlLFsyLDE3XSksdChnZSxbMiwxOF0pLHQoZ2UsWzIsMTldKSx0KGdlLFsyLDIwXSksdChnZSxbMiwyMV0pLHQoZ2UsWzIsMjJdKSx0KHUsWzIsNDldLHsxMDpmZX0pLHQodSxbMiw0OF0sezIyOjg4LDE2Ojg5LDIzOjEwNCw0Ok5lLDU6c2UsNjprZSw4OlJlLDExOkNlLDEzOlBlLDE3OkllLDE4OiRlLDE5OnllLDIwOlh9KSx7NDpOZSw1OnNlLDY6a2UsODpSZSwxMTpDZSwxMzpQZSwxNjo4OSwxNzpJZSwxODokZSwxOTp5ZSwyMDpYLDIyOjEwNX0sdChnZSxbMiwyNl0pLHQodSxbMiw1MF0sezEwOmZlfSksdChoZSxbMiwyOF0sezE2OjEwMyw0Ok5lLDU6c2UsNjprZSw4OlJlLDExOkNlLDEzOlBlLDE3OkllLDE4OiRlLDE5OnllLDIwOlh9KV0sZGVmYXVsdEFjdGlvbnM6ezg6WzIsMzBdLDk6WzIsMzFdfSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oaWUsRWUpe2lmKEVlLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoaWUpO2Vsc2V7dmFyIEFlPW5ldyBFcnJvcihpZSk7dGhyb3cgQWUuaGFzaD1FZSxBZX19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihpZSl7dmFyIEVlPXRoaXMsQWU9WzBdLEdlPVtdLEJlPVtudWxsXSxtZT1bXSxIZT10aGlzLnRhYmxlLE9lPSIiLGV0PTAsYnQ9MCxrdD0wLHZ0PTIscnQ9MSx5dD1tZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxVZT1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHR0PXt5eTp7fX07Zm9yKHZhciBodCBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGh0KSYmKHR0Lnl5W2h0XT10aGlzLnl5W2h0XSk7VWUuc2V0SW5wdXQoaWUsdHQueXkpLHR0Lnl5LmxleGVyPVVlLHR0Lnl5LnBhcnNlcj10aGlzLHR5cGVvZiBVZS55eWxsb2M+InUiJiYoVWUueXlsbG9jPXt9KTt2YXIgRXQ9VWUueXlsbG9jO21lLnB1c2goRXQpO3ZhciBlcj1VZS5vcHRpb25zJiZVZS5vcHRpb25zLnJhbmdlczt0eXBlb2YgdHQueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9dHQueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gZHQoX3Ipe0FlLmxlbmd0aD1BZS5sZW5ndGgtMipfcixCZS5sZW5ndGg9QmUubGVuZ3RoLV9yLG1lLmxlbmd0aD1tZS5sZW5ndGgtX3J9byhkdCwicG9wU3RhY2siKTtmdW5jdGlvbiBKZSgpe3ZhciBfcjtyZXR1cm4gX3I9R2UucG9wKCl8fFVlLmxleCgpfHxydCx0eXBlb2YgX3IhPSJudW1iZXIiJiYoX3IgaW5zdGFuY2VvZiBBcnJheSYmKEdlPV9yLF9yPUdlLnBvcCgpKSxfcj1FZS5zeW1ib2xzX1tfcl18fF9yKSxfcn1vKEplLCJsZXgiKTtmb3IodmFyIGN0LEN0LHB0LEJ0LFRyLHlyLG9yPXt9LGxuLE9yLGlpLG1uOzspe2lmKHB0PUFlW0FlLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW3B0XT9CdD10aGlzLmRlZmF1bHRBY3Rpb25zW3B0XTooKGN0PT09bnVsbHx8dHlwZW9mIGN0PiJ1IikmJihjdD1KZSgpKSxCdD1IZVtwdF0mJkhlW3B0XVtjdF0pLHR5cGVvZiBCdD4idSJ8fCFCdC5sZW5ndGh8fCFCdFswXSl7dmFyIE9uPSIiO21uPVtdO2ZvcihsbiBpbiBIZVtwdF0pdGhpcy50ZXJtaW5hbHNfW2xuXSYmbG4+dnQmJm1uLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tsbl0rIiciKTtVZS5zaG93UG9zaXRpb24/T249IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoZXQrMSkrYDoKYCtVZS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK21uLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bY3RdfHxjdCkrIiciOk9uPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGV0KzEpKyI6IFVuZXhwZWN0ZWQgIisoY3Q9PXJ0PyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW2N0XXx8Y3QpKyInIiksdGhpcy5wYXJzZUVycm9yKE9uLHt0ZXh0OlVlLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tjdF18fGN0LGxpbmU6VWUueXlsaW5lbm8sbG9jOkV0LGV4cGVjdGVkOm1ufSl9aWYoQnRbMF1pbnN0YW5jZW9mIEFycmF5JiZCdC5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3B0KyIsIHRva2VuOiAiK2N0KTtzd2l0Y2goQnRbMF0pe2Nhc2UgMTpBZS5wdXNoKGN0KSxCZS5wdXNoKFVlLnl5dGV4dCksbWUucHVzaChVZS55eWxsb2MpLEFlLnB1c2goQnRbMV0pLGN0PW51bGwsQ3Q/KGN0PUN0LEN0PW51bGwpOihidD1VZS55eWxlbmcsT2U9VWUueXl0ZXh0LGV0PVVlLnl5bGluZW5vLEV0PVVlLnl5bGxvYyxrdD4wJiZrdC0tKTticmVhaztjYXNlIDI6aWYoT3I9dGhpcy5wcm9kdWN0aW9uc19bQnRbMV1dWzFdLG9yLiQ9QmVbQmUubGVuZ3RoLU9yXSxvci5fJD17Zmlyc3RfbGluZTptZVttZS5sZW5ndGgtKE9yfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6bWVbbWUubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46bWVbbWUubGVuZ3RoLShPcnx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjptZVttZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGVyJiYob3IuXyQucmFuZ2U9W21lW21lLmxlbmd0aC0oT3J8fDEpXS5yYW5nZVswXSxtZVttZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx5cj10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkob3IsW09lLGJ0LGV0LHR0Lnl5LEJ0WzFdLEJlLG1lXS5jb25jYXQoeXQpKSx0eXBlb2YgeXI8InUiKXJldHVybiB5cjtPciYmKEFlPUFlLnNsaWNlKDAsLTEqT3IqMiksQmU9QmUuc2xpY2UoMCwtMSpPciksbWU9bWUuc2xpY2UoMCwtMSpPcikpLEFlLnB1c2godGhpcy5wcm9kdWN0aW9uc19bQnRbMV1dWzBdKSxCZS5wdXNoKG9yLiQpLG1lLnB1c2gob3IuXyQpLGlpPUhlW0FlW0FlLmxlbmd0aC0yXV1bQWVbQWUubGVuZ3RoLTFdXSxBZS5wdXNoKGlpKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfSwicGFyc2UiKX0sdmU9ZnVuY3Rpb24oKXt2YXIgVGU9e0VPRjoxLHBhcnNlRXJyb3I6byhmdW5jdGlvbihFZSxBZSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihFZSxBZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoRWUpfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24oaWUsRWUpe3JldHVybiB0aGlzLnl5PUVlfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1pZSx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30sInNldElucHV0IiksaW5wdXQ6byhmdW5jdGlvbigpe3ZhciBpZT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9aWUsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPWllLHRoaXMubWF0Y2hlZCs9aWU7dmFyIEVlPWllLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gRWU/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLGllfSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKGllKXt2YXIgRWU9aWUubGVuZ3RoLEFlPWllLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9aWUrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLUVlKSx0aGlzLm9mZnNldC09RWU7dmFyIEdlPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLEFlLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09QWUubGVuZ3RoLTEpO3ZhciBCZT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46QWU/KEFlLmxlbmd0aD09PUdlLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrR2VbR2UubGVuZ3RoLUFlLmxlbmd0aF0ubGVuZ3RoLUFlWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tRWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bQmVbMF0sQmVbMF0rdGhpcy55eWxlbmctRWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sInVucHV0IiksbW9yZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30sIm1vcmUiKSxyZWplY3Q6byhmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sInJlamVjdCIpLGxlc3M6byhmdW5jdGlvbihpZSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKGllKSl9LCJsZXNzIikscGFzdElucHV0Om8oZnVuY3Rpb24oKXt2YXIgaWU9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihpZS5sZW5ndGg+MjA/Ii4uLiI6IiIpK2llLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSwicGFzdElucHV0IiksdXBjb21pbmdJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIGllPXRoaXMubWF0Y2g7cmV0dXJuIGllLmxlbmd0aDwyMCYmKGllKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1pZS5sZW5ndGgpKSwoaWUuc3Vic3RyKDAsMjApKyhpZS5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sInVwY29taW5nSW5wdXQiKSxzaG93UG9zaXRpb246byhmdW5jdGlvbigpe3ZhciBpZT10aGlzLnBhc3RJbnB1dCgpLEVlPW5ldyBBcnJheShpZS5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBpZSt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArRWUrIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKGllLEVlKXt2YXIgQWUsR2UsQmU7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKEJlPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKEJlLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLEdlPWllWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxHZSYmKHRoaXMueXlsaW5lbm8rPUdlLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOkdlP0dlW0dlLmxlbmd0aC0xXS5sZW5ndGgtR2VbR2UubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4raWVbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9aWVbMF0sdGhpcy5tYXRjaCs9aWVbMF0sdGhpcy5tYXRjaGVzPWllLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKGllWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1pZVswXSxBZT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxFZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxBZSlyZXR1cm4gQWU7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIG1lIGluIEJlKXRoaXNbbWVdPUJlW21lXTtyZXR1cm4hMX1yZXR1cm4hMX0sInRlc3RfbWF0Y2giKSxuZXh0Om8oZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgaWUsRWUsQWUsR2U7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgQmU9dGhpcy5fY3VycmVudFJ1bGVzKCksbWU9MDttZTxCZS5sZW5ndGg7bWUrKylpZihBZT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW0JlW21lXV0pLEFlJiYoIUVlfHxBZVswXS5sZW5ndGg+RWVbMF0ubGVuZ3RoKSl7aWYoRWU9QWUsR2U9bWUsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoaWU9dGhpcy50ZXN0X21hdGNoKEFlLEJlW21lXSksaWUhPT0hMSlyZXR1cm4gaWU7aWYodGhpcy5fYmFja3RyYWNrKXtFZT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBFZT8oaWU9dGhpcy50ZXN0X21hdGNoKEVlLEJlW0dlXSksaWUhPT0hMT9pZTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBFZT10aGlzLm5leHQoKTtyZXR1cm4gRWV8fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKEVlKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goRWUpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIEVlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIEVlPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24oRWUpe3JldHVybiBFZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKEVlfHwwKSxFZT49MD90aGlzLmNvbmRpdGlvblN0YWNrW0VlXToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKEVlKXt0aGlzLmJlZ2luKEVlKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKEVlLEFlLEdlLEJlKXt2YXIgbWU9QmU7c3dpdGNoKEdlKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpyZXR1cm4gNTU7Y2FzZSAzOmJyZWFrO2Nhc2UgNDpyZXR1cm4gdGhpcy5iZWdpbigidGl0bGUiKSwzNTticmVhaztjYXNlIDU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwidGl0bGVfdmFsdWUiO2JyZWFrO2Nhc2UgNjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMzc7YnJlYWs7Y2FzZSA3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSA4OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzOTticmVhaztjYXNlIDk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjticmVhaztjYXNlIDEwOnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDExOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEyOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDEzOnJldHVybiA0ODtjYXNlIDE0OnJldHVybiA1MDtjYXNlIDE1OnJldHVybiA0OTtjYXNlIDE2OnJldHVybiA1MTtjYXNlIDE3OnJldHVybiA1MjtjYXNlIDE4OnJldHVybiA1MztjYXNlIDE5OnJldHVybiA1NDtjYXNlIDIwOnJldHVybiAyNTtjYXNlIDIxOnRoaXMuYmVnaW4oIm1kX3N0cmluZyIpO2JyZWFrO2Nhc2UgMjI6cmV0dXJuIk1EX1NUUiI7Y2FzZSAyMzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNDp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDI1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI2OnJldHVybiJTVFIiO2Nhc2UgMjc6dGhpcy5iZWdpbigiY2xhc3NfbmFtZSIpO2JyZWFrO2Nhc2UgMjg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0NzticmVhaztjYXNlIDI5OnJldHVybiB0aGlzLmJlZ2luKCJwb2ludF9zdGFydCIpLDQ0O2JyZWFrO2Nhc2UgMzA6cmV0dXJuIHRoaXMuYmVnaW4oInBvaW50X3giKSw0NTticmVhaztjYXNlIDMxOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDMyOnRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJwb2ludF95Iik7YnJlYWs7Y2FzZSAzMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQ2O2JyZWFrO2Nhc2UgMzQ6cmV0dXJuIDI4O2Nhc2UgMzU6cmV0dXJuIDQ7Y2FzZSAzNjpyZXR1cm4gMTE7Y2FzZSAzNzpyZXR1cm4gNjQ7Y2FzZSAzODpyZXR1cm4gMTA7Y2FzZSAzOTpyZXR1cm4gNjU7Y2FzZSA0MDpyZXR1cm4gNjU7Y2FzZSA0MTpyZXR1cm4gMTQ7Y2FzZSA0MjpyZXR1cm4gMTM7Y2FzZSA0MzpyZXR1cm4gNjc7Y2FzZSA0NDpyZXR1cm4gNjY7Y2FzZSA0NTpyZXR1cm4gMTI7Y2FzZSA0NjpyZXR1cm4gODtjYXNlIDQ3OnJldHVybiA1O2Nhc2UgNDg6cmV0dXJuIDE4O2Nhc2UgNDk6cmV0dXJuIDU2O2Nhc2UgNTA6cmV0dXJuIDYzO2Nhc2UgNTE6cmV0dXJuIDU3fX0sImFub255bW91cyIpLHJ1bGVzOlsvXig/OiUlKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/OltcblxyXSspL2ksL14oPzolJVteXG5dKikvaSwvXig/OnRpdGxlXGIpL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OiAqeC1heGlzICopL2ksL14oPzogKnktYXhpcyAqKS9pLC9eKD86ICotLSs+ICopL2ksL14oPzogKnF1YWRyYW50LTEgKikvaSwvXig/OiAqcXVhZHJhbnQtMiAqKS9pLC9eKD86ICpxdWFkcmFudC0zICopL2ksL14oPzogKnF1YWRyYW50LTQgKikvaSwvXig/OmNsYXNzRGVmXGIpL2ksL14oPzpbIl1bYF0pL2ksL14oPzpbXmAiXSspL2ksL14oPzpbYF1bIl0pL2ksL14oPzpbIl0pL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKikvaSwvXig/Ojo6OikvaSwvXig/Ol5cdyspL2ksL14oPzpccyo6XHMqXFtccyopL2ksL14oPzooMSl8KDAoLlxkKyk/KSkvaSwvXig/OlxzKlxdICopL2ksL14oPzpccyosXHMqKS9pLC9eKD86KDEpfCgwKC5cZCspPykpL2ksL14oPzogKnF1YWRyYW50Q2hhcnQgKikvaSwvXig/OltBLVphLXpdKykvaSwvXig/OjopL2ksL14oPzpcKykvaSwvXig/OiwpL2ksL14oPzo9KS9pLC9eKD86PSkvaSwvXig/OlwqKS9pLC9eKD86IykvaSwvXig/OltcX10pL2ksL14oPzpcLikvaSwvXig/OiYpL2ksL14oPzotKS9pLC9eKD86WzAtOV0rKS9pLC9eKD86XHMpL2ksL14oPzo7KS9pLC9eKD86WyEiIyQlJicqKywtLmA/XFxfL10pL2ksL14oPzokKS9pXSxjb25kaXRpb25zOntjbGFzc19uYW1lOntydWxlczpbMjhdLGluY2x1c2l2ZTohMX0scG9pbnRfeTp7cnVsZXM6WzMzXSxpbmNsdXNpdmU6ITF9LHBvaW50X3g6e3J1bGVzOlszMl0saW5jbHVzaXZlOiExfSxwb2ludF9zdGFydDp7cnVsZXM6WzMwLDMxXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMSwxMl0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls5XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzddLGluY2x1c2l2ZTohMX0sdGl0bGU6e3J1bGVzOls1XSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6WzIyLDIzXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzI1LDI2XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNiw4LDEwLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDI0LDI3LDI5LDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIFRlfSgpO25lLmxleGVyPXZlO2Z1bmN0aW9uIFUoKXt0aGlzLnl5PXt9fXJldHVybiBvKFUsIlBhcnNlciIpLFUucHJvdG90eXBlPW5lLG5lLlBhcnNlcj1VLG5ldyBVfSgpO2FPLnBhcnNlcj1hTztPaGU9YU99KTt2YXIgcHMsRUUsQmhlPU0oKCk9PnsidXNlIHN0cmljdCI7cHIoKTticygpO3V0KCk7aTQoKTtwcz12cCgpLEVFPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jbGFzc2VzPW5ldyBNYXA7dGhpcy5jb25maWc9dGhpcy5nZXREZWZhdWx0Q29uZmlnKCksdGhpcy50aGVtZUNvbmZpZz10aGlzLmdldERlZmF1bHRUaGVtZUNvbmZpZygpLHRoaXMuZGF0YT10aGlzLmdldERlZmF1bHREYXRhKCl9c3RhdGlje28odGhpcywiUXVhZHJhbnRCdWlsZGVyIil9Z2V0RGVmYXVsdERhdGEoKXtyZXR1cm57dGl0bGVUZXh0OiIiLHF1YWRyYW50MVRleHQ6IiIscXVhZHJhbnQyVGV4dDoiIixxdWFkcmFudDNUZXh0OiIiLHF1YWRyYW50NFRleHQ6IiIseEF4aXNMZWZ0VGV4dDoiIix4QXhpc1JpZ2h0VGV4dDoiIix5QXhpc0JvdHRvbVRleHQ6IiIseUF4aXNUb3BUZXh0OiIiLHBvaW50czpbXX19Z2V0RGVmYXVsdENvbmZpZygpe3JldHVybntzaG93WEF4aXM6ITAsc2hvd1lBeGlzOiEwLHNob3dUaXRsZTohMCxjaGFydEhlaWdodDp1ci5xdWFkcmFudENoYXJ0Py5jaGFydFdpZHRofHw1MDAsY2hhcnRXaWR0aDp1ci5xdWFkcmFudENoYXJ0Py5jaGFydEhlaWdodHx8NTAwLHRpdGxlUGFkZGluZzp1ci5xdWFkcmFudENoYXJ0Py50aXRsZVBhZGRpbmd8fDEwLHRpdGxlRm9udFNpemU6dXIucXVhZHJhbnRDaGFydD8udGl0bGVGb250U2l6ZXx8MjAscXVhZHJhbnRQYWRkaW5nOnVyLnF1YWRyYW50Q2hhcnQ/LnF1YWRyYW50UGFkZGluZ3x8NSx4QXhpc0xhYmVsUGFkZGluZzp1ci5xdWFkcmFudENoYXJ0Py54QXhpc0xhYmVsUGFkZGluZ3x8NSx5QXhpc0xhYmVsUGFkZGluZzp1ci5xdWFkcmFudENoYXJ0Py55QXhpc0xhYmVsUGFkZGluZ3x8NSx4QXhpc0xhYmVsRm9udFNpemU6dXIucXVhZHJhbnRDaGFydD8ueEF4aXNMYWJlbEZvbnRTaXplfHwxNix5QXhpc0xhYmVsRm9udFNpemU6dXIucXVhZHJhbnRDaGFydD8ueUF4aXNMYWJlbEZvbnRTaXplfHwxNixxdWFkcmFudExhYmVsRm9udFNpemU6dXIucXVhZHJhbnRDaGFydD8ucXVhZHJhbnRMYWJlbEZvbnRTaXplfHwxNixxdWFkcmFudFRleHRUb3BQYWRkaW5nOnVyLnF1YWRyYW50Q2hhcnQ/LnF1YWRyYW50VGV4dFRvcFBhZGRpbmd8fDUscG9pbnRUZXh0UGFkZGluZzp1ci5xdWFkcmFudENoYXJ0Py5wb2ludFRleHRQYWRkaW5nfHw1LHBvaW50TGFiZWxGb250U2l6ZTp1ci5xdWFkcmFudENoYXJ0Py5wb2ludExhYmVsRm9udFNpemV8fDEyLHBvaW50UmFkaXVzOnVyLnF1YWRyYW50Q2hhcnQ/LnBvaW50UmFkaXVzfHw1LHhBeGlzUG9zaXRpb246dXIucXVhZHJhbnRDaGFydD8ueEF4aXNQb3NpdGlvbnx8InRvcCIseUF4aXNQb3NpdGlvbjp1ci5xdWFkcmFudENoYXJ0Py55QXhpc1Bvc2l0aW9ufHwibGVmdCIscXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZVdpZHRoOnVyLnF1YWRyYW50Q2hhcnQ/LnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aHx8MSxxdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGg6dXIucXVhZHJhbnRDaGFydD8ucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRofHwyfX1nZXREZWZhdWx0VGhlbWVDb25maWcoKXtyZXR1cm57cXVhZHJhbnQxRmlsbDpwcy5xdWFkcmFudDFGaWxsLHF1YWRyYW50MkZpbGw6cHMucXVhZHJhbnQyRmlsbCxxdWFkcmFudDNGaWxsOnBzLnF1YWRyYW50M0ZpbGwscXVhZHJhbnQ0RmlsbDpwcy5xdWFkcmFudDRGaWxsLHF1YWRyYW50MVRleHRGaWxsOnBzLnF1YWRyYW50MVRleHRGaWxsLHF1YWRyYW50MlRleHRGaWxsOnBzLnF1YWRyYW50MlRleHRGaWxsLHF1YWRyYW50M1RleHRGaWxsOnBzLnF1YWRyYW50M1RleHRGaWxsLHF1YWRyYW50NFRleHRGaWxsOnBzLnF1YWRyYW50NFRleHRGaWxsLHF1YWRyYW50UG9pbnRGaWxsOnBzLnF1YWRyYW50UG9pbnRGaWxsLHF1YWRyYW50UG9pbnRUZXh0RmlsbDpwcy5xdWFkcmFudFBvaW50VGV4dEZpbGwscXVhZHJhbnRYQXhpc1RleHRGaWxsOnBzLnF1YWRyYW50WEF4aXNUZXh0RmlsbCxxdWFkcmFudFlBeGlzVGV4dEZpbGw6cHMucXVhZHJhbnRZQXhpc1RleHRGaWxsLHF1YWRyYW50VGl0bGVGaWxsOnBzLnF1YWRyYW50VGl0bGVGaWxsLHF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsOnBzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsOnBzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfX1jbGVhcigpe3RoaXMuY29uZmlnPXRoaXMuZ2V0RGVmYXVsdENvbmZpZygpLHRoaXMudGhlbWVDb25maWc9dGhpcy5nZXREZWZhdWx0VGhlbWVDb25maWcoKSx0aGlzLmRhdGE9dGhpcy5nZXREZWZhdWx0RGF0YSgpLHRoaXMuY2xhc3Nlcz1uZXcgTWFwLFkuaW5mbygiY2xlYXIgY2FsbGVkIil9c2V0RGF0YShlKXt0aGlzLmRhdGE9ey4uLnRoaXMuZGF0YSwuLi5lfX1hZGRQb2ludHMoZSl7dGhpcy5kYXRhLnBvaW50cz1bLi4uZSwuLi50aGlzLmRhdGEucG9pbnRzXX1hZGRDbGFzcyhlLHIpe3RoaXMuY2xhc3Nlcy5zZXQoZSxyKX1zZXRDb25maWcoZSl7WS50cmFjZSgic2V0Q29uZmlnIGNhbGxlZCB3aXRoOiAiLGUpLHRoaXMuY29uZmlnPXsuLi50aGlzLmNvbmZpZywuLi5lfX1zZXRUaGVtZUNvbmZpZyhlKXtZLnRyYWNlKCJzZXRUaGVtZUNvbmZpZyBjYWxsZWQgd2l0aDogIixlKSx0aGlzLnRoZW1lQ29uZmlnPXsuLi50aGlzLnRoZW1lQ29uZmlnLC4uLmV9fWNhbGN1bGF0ZVNwYWNlKGUscixuLGkpe2xldCBhPXRoaXMuY29uZmlnLnhBeGlzTGFiZWxQYWRkaW5nKjIrdGhpcy5jb25maWcueEF4aXNMYWJlbEZvbnRTaXplLHM9e3RvcDplPT09InRvcCImJnI/YTowLGJvdHRvbTplPT09ImJvdHRvbSImJnI/YTowfSxsPXRoaXMuY29uZmlnLnlBeGlzTGFiZWxQYWRkaW5nKjIrdGhpcy5jb25maWcueUF4aXNMYWJlbEZvbnRTaXplLHU9e2xlZnQ6dGhpcy5jb25maWcueUF4aXNQb3NpdGlvbj09PSJsZWZ0IiYmbj9sOjAscmlnaHQ6dGhpcy5jb25maWcueUF4aXNQb3NpdGlvbj09PSJyaWdodCImJm4/bDowfSxoPXRoaXMuY29uZmlnLnRpdGxlRm9udFNpemUrdGhpcy5jb25maWcudGl0bGVQYWRkaW5nKjIsZj17dG9wOmk/aDowfSxkPXRoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZyt1LmxlZnQscD10aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcrcy50b3ArZi50b3AsbT10aGlzLmNvbmZpZy5jaGFydFdpZHRoLXRoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZyoyLXUubGVmdC11LnJpZ2h0LGc9dGhpcy5jb25maWcuY2hhcnRIZWlnaHQtdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nKjItcy50b3Atcy5ib3R0b20tZi50b3AseT1tLzIsdj1nLzI7cmV0dXJue3hBeGlzU3BhY2U6cyx5QXhpc1NwYWNlOnUsdGl0bGVTcGFjZTpmLHF1YWRyYW50U3BhY2U6e3F1YWRyYW50TGVmdDpkLHF1YWRyYW50VG9wOnAscXVhZHJhbnRXaWR0aDptLHF1YWRyYW50SGFsZldpZHRoOnkscXVhZHJhbnRIZWlnaHQ6ZyxxdWFkcmFudEhhbGZIZWlnaHQ6dn19fWdldEF4aXNMYWJlbHMoZSxyLG4saSl7bGV0e3F1YWRyYW50U3BhY2U6YSx0aXRsZVNwYWNlOnN9PWkse3F1YWRyYW50SGFsZkhlaWdodDpsLHF1YWRyYW50SGVpZ2h0OnUscXVhZHJhbnRMZWZ0OmgscXVhZHJhbnRIYWxmV2lkdGg6ZixxdWFkcmFudFRvcDpkLHF1YWRyYW50V2lkdGg6cH09YSxtPSEhdGhpcy5kYXRhLnhBeGlzUmlnaHRUZXh0LGc9ISF0aGlzLmRhdGEueUF4aXNUb3BUZXh0LHk9W107cmV0dXJuIHRoaXMuZGF0YS54QXhpc0xlZnRUZXh0JiZyJiZ5LnB1c2goe3RleHQ6dGhpcy5kYXRhLnhBeGlzTGVmdFRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50WEF4aXNUZXh0RmlsbCx4OmgrKG0/Zi8yOjApLHk6ZT09PSJ0b3AiP3RoaXMuY29uZmlnLnhBeGlzTGFiZWxQYWRkaW5nK3MudG9wOnRoaXMuY29uZmlnLnhBeGlzTGFiZWxQYWRkaW5nK2QrdSt0aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcsZm9udFNpemU6dGhpcy5jb25maWcueEF4aXNMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOm0/ImNlbnRlciI6ImxlZnQiLGhvcml6b250YWxQb3M6InRvcCIscm90YXRpb246MH0pLHRoaXMuZGF0YS54QXhpc1JpZ2h0VGV4dCYmciYmeS5wdXNoKHt0ZXh0OnRoaXMuZGF0YS54QXhpc1JpZ2h0VGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRYQXhpc1RleHRGaWxsLHg6aCtmKyhtP2YvMjowKSx5OmU9PT0idG9wIj90aGlzLmNvbmZpZy54QXhpc0xhYmVsUGFkZGluZytzLnRvcDp0aGlzLmNvbmZpZy54QXhpc0xhYmVsUGFkZGluZytkK3UrdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nLGZvbnRTaXplOnRoaXMuY29uZmlnLnhBeGlzTGFiZWxGb250U2l6ZSx2ZXJ0aWNhbFBvczptPyJjZW50ZXIiOiJsZWZ0Iixob3Jpem9udGFsUG9zOiJ0b3AiLHJvdGF0aW9uOjB9KSx0aGlzLmRhdGEueUF4aXNCb3R0b21UZXh0JiZuJiZ5LnB1c2goe3RleHQ6dGhpcy5kYXRhLnlBeGlzQm90dG9tVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRZQXhpc1RleHRGaWxsLHg6dGhpcy5jb25maWcueUF4aXNQb3NpdGlvbj09PSJsZWZ0Ij90aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZzp0aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZytoK3ArdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nLHk6ZCt1LShnP2wvMjowKSxmb250U2l6ZTp0aGlzLmNvbmZpZy55QXhpc0xhYmVsRm9udFNpemUsdmVydGljYWxQb3M6Zz8iY2VudGVyIjoibGVmdCIsaG9yaXpvbnRhbFBvczoidG9wIixyb3RhdGlvbjotOTB9KSx0aGlzLmRhdGEueUF4aXNUb3BUZXh0JiZuJiZ5LnB1c2goe3RleHQ6dGhpcy5kYXRhLnlBeGlzVG9wVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRZQXhpc1RleHRGaWxsLHg6dGhpcy5jb25maWcueUF4aXNQb3NpdGlvbj09PSJsZWZ0Ij90aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZzp0aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZytoK3ArdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nLHk6ZCtsLShnP2wvMjowKSxmb250U2l6ZTp0aGlzLmNvbmZpZy55QXhpc0xhYmVsRm9udFNpemUsdmVydGljYWxQb3M6Zz8iY2VudGVyIjoibGVmdCIsaG9yaXpvbnRhbFBvczoidG9wIixyb3RhdGlvbjotOTB9KSx5fWdldFF1YWRyYW50cyhlKXtsZXR7cXVhZHJhbnRTcGFjZTpyfT1lLHtxdWFkcmFudEhhbGZIZWlnaHQ6bixxdWFkcmFudExlZnQ6aSxxdWFkcmFudEhhbGZXaWR0aDphLHF1YWRyYW50VG9wOnN9PXIsbD1be3RleHQ6e3RleHQ6dGhpcy5kYXRhLnF1YWRyYW50MVRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50MVRleHRGaWxsLHg6MCx5OjAsZm9udFNpemU6dGhpcy5jb25maWcucXVhZHJhbnRMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOiJjZW50ZXIiLGhvcml6b250YWxQb3M6Im1pZGRsZSIscm90YXRpb246MH0seDppK2EseTpzLHdpZHRoOmEsaGVpZ2h0Om4sZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50MUZpbGx9LHt0ZXh0Ont0ZXh0OnRoaXMuZGF0YS5xdWFkcmFudDJUZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudDJUZXh0RmlsbCx4OjAseTowLGZvbnRTaXplOnRoaXMuY29uZmlnLnF1YWRyYW50TGFiZWxGb250U2l6ZSx2ZXJ0aWNhbFBvczoiY2VudGVyIixob3Jpem9udGFsUG9zOiJtaWRkbGUiLHJvdGF0aW9uOjB9LHg6aSx5OnMsd2lkdGg6YSxoZWlnaHQ6bixmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQyRmlsbH0se3RleHQ6e3RleHQ6dGhpcy5kYXRhLnF1YWRyYW50M1RleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50M1RleHRGaWxsLHg6MCx5OjAsZm9udFNpemU6dGhpcy5jb25maWcucXVhZHJhbnRMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOiJjZW50ZXIiLGhvcml6b250YWxQb3M6Im1pZGRsZSIscm90YXRpb246MH0seDppLHk6cytuLHdpZHRoOmEsaGVpZ2h0Om4sZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50M0ZpbGx9LHt0ZXh0Ont0ZXh0OnRoaXMuZGF0YS5xdWFkcmFudDRUZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudDRUZXh0RmlsbCx4OjAseTowLGZvbnRTaXplOnRoaXMuY29uZmlnLnF1YWRyYW50TGFiZWxGb250U2l6ZSx2ZXJ0aWNhbFBvczoiY2VudGVyIixob3Jpem9udGFsUG9zOiJtaWRkbGUiLHJvdGF0aW9uOjB9LHg6aSthLHk6cytuLHdpZHRoOmEsaGVpZ2h0Om4sZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50NEZpbGx9XTtmb3IobGV0IHUgb2YgbCl1LnRleHQueD11LngrdS53aWR0aC8yLHRoaXMuZGF0YS5wb2ludHMubGVuZ3RoPT09MD8odS50ZXh0Lnk9dS55K3UuaGVpZ2h0LzIsdS50ZXh0Lmhvcml6b250YWxQb3M9Im1pZGRsZSIpOih1LnRleHQueT11LnkrdGhpcy5jb25maWcucXVhZHJhbnRUZXh0VG9wUGFkZGluZyx1LnRleHQuaG9yaXpvbnRhbFBvcz0idG9wIik7cmV0dXJuIGx9Z2V0UXVhZHJhbnRQb2ludHMoZSl7bGV0e3F1YWRyYW50U3BhY2U6cn09ZSx7cXVhZHJhbnRIZWlnaHQ6bixxdWFkcmFudExlZnQ6aSxxdWFkcmFudFRvcDphLHF1YWRyYW50V2lkdGg6c309cixsPUNsKCkuZG9tYWluKFswLDFdKS5yYW5nZShbaSxzK2ldKSx1PUNsKCkuZG9tYWluKFswLDFdKS5yYW5nZShbbithLGFdKTtyZXR1cm4gdGhpcy5kYXRhLnBvaW50cy5tYXAoZj0+e2xldCBkPXRoaXMuY2xhc3Nlcy5nZXQoZi5jbGFzc05hbWUpO3JldHVybiBkJiYoZj17Li4uZCwuLi5mfSkse3g6bChmLngpLHk6dShmLnkpLGZpbGw6Zi5jb2xvcj8/dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFBvaW50RmlsbCxyYWRpdXM6Zi5yYWRpdXM/P3RoaXMuY29uZmlnLnBvaW50UmFkaXVzLHRleHQ6e3RleHQ6Zi50ZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFBvaW50VGV4dEZpbGwseDpsKGYueCkseTp1KGYueSkrdGhpcy5jb25maWcucG9pbnRUZXh0UGFkZGluZyx2ZXJ0aWNhbFBvczoiY2VudGVyIixob3Jpem9udGFsUG9zOiJ0b3AiLGZvbnRTaXplOnRoaXMuY29uZmlnLnBvaW50TGFiZWxGb250U2l6ZSxyb3RhdGlvbjowfSxzdHJva2VDb2xvcjpmLnN0cm9rZUNvbG9yPz90aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50UG9pbnRGaWxsLHN0cm9rZVdpZHRoOmYuc3Ryb2tlV2lkdGg/PyIwcHgifX0pfWdldEJvcmRlcnMoZSl7bGV0IHI9dGhpcy5jb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLzIse3F1YWRyYW50U3BhY2U6bn09ZSx7cXVhZHJhbnRIYWxmSGVpZ2h0OmkscXVhZHJhbnRIZWlnaHQ6YSxxdWFkcmFudExlZnQ6cyxxdWFkcmFudEhhbGZXaWR0aDpsLHF1YWRyYW50VG9wOnUscXVhZHJhbnRXaWR0aDpofT1uO3JldHVyblt7c3Ryb2tlRmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMuY29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCx4MTpzLXIseTE6dSx4MjpzK2grcix5Mjp1fSx7c3Ryb2tlRmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMuY29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCx4MTpzK2gseTE6dStyLHgyOnMraCx5Mjp1K2Etcn0se3N0cm9rZUZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxzdHJva2VXaWR0aDp0aGlzLmNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgseDE6cy1yLHkxOnUrYSx4MjpzK2grcix5Mjp1K2F9LHtzdHJva2VGaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5jb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLHgxOnMseTE6dStyLHgyOnMseTI6dSthLXJ9LHtzdHJva2VGaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5jb25maWcucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLHgxOnMrbCx5MTp1K3IseDI6cytsLHkyOnUrYS1yfSx7c3Ryb2tlRmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMuY29uZmlnLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCx4MTpzK3IseTE6dStpLHgyOnMraC1yLHkyOnUraX1dfWdldFRpdGxlKGUpe2lmKGUpcmV0dXJue3RleHQ6dGhpcy5kYXRhLnRpdGxlVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRUaXRsZUZpbGwsZm9udFNpemU6dGhpcy5jb25maWcudGl0bGVGb250U2l6ZSxob3Jpem9udGFsUG9zOiJ0b3AiLHZlcnRpY2FsUG9zOiJjZW50ZXIiLHJvdGF0aW9uOjAseTp0aGlzLmNvbmZpZy50aXRsZVBhZGRpbmcseDp0aGlzLmNvbmZpZy5jaGFydFdpZHRoLzJ9fWJ1aWxkKCl7bGV0IGU9dGhpcy5jb25maWcuc2hvd1hBeGlzJiYhISh0aGlzLmRhdGEueEF4aXNMZWZ0VGV4dHx8dGhpcy5kYXRhLnhBeGlzUmlnaHRUZXh0KSxyPXRoaXMuY29uZmlnLnNob3dZQXhpcyYmISEodGhpcy5kYXRhLnlBeGlzVG9wVGV4dHx8dGhpcy5kYXRhLnlBeGlzQm90dG9tVGV4dCksbj10aGlzLmNvbmZpZy5zaG93VGl0bGUmJiEhdGhpcy5kYXRhLnRpdGxlVGV4dCxpPXRoaXMuZGF0YS5wb2ludHMubGVuZ3RoPjA/ImJvdHRvbSI6dGhpcy5jb25maWcueEF4aXNQb3NpdGlvbixhPXRoaXMuY2FsY3VsYXRlU3BhY2UoaSxlLHIsbik7cmV0dXJue3BvaW50czp0aGlzLmdldFF1YWRyYW50UG9pbnRzKGEpLHF1YWRyYW50czp0aGlzLmdldFF1YWRyYW50cyhhKSxheGlzTGFiZWxzOnRoaXMuZ2V0QXhpc0xhYmVscyhpLGUscixhKSxib3JkZXJMaW5lczp0aGlzLmdldEJvcmRlcnMoYSksdGl0bGU6dGhpcy5nZXRUaXRsZShuKX19fX0pO2Z1bmN0aW9uIHNPKHQpe3JldHVybiEvXiM/KFtcZEEtRmEtZl17Nn18W1xkQS1GYS1mXXszfSkkLy50ZXN0KHQpfWZ1bmN0aW9uIEZoZSh0KXtyZXR1cm4hL15cZCskLy50ZXN0KHQpfWZ1bmN0aW9uIHpoZSh0KXtyZXR1cm4hL15cZCtweCQvLnRlc3QodCl9dmFyIFIwLEdoZT1NKCgpPT57InVzZSBzdHJpY3QiO1IwPWNsYXNzIGV4dGVuZHMgRXJyb3J7c3RhdGlje28odGhpcywiSW52YWxpZFN0eWxlRXJyb3IiKX1jb25zdHJ1Y3RvcihlLHIsbil7c3VwZXIoYHZhbHVlIGZvciAke2V9ICR7cn0gaXMgaW52YWxpZCwgcGxlYXNlIHVzZSBhIHZhbGlkICR7bn1gKSx0aGlzLm5hbWU9IkludmFsaWRTdHlsZUVycm9yIn19O28oc08sInZhbGlkYXRlSGV4Q29kZSIpO28oRmhlLCJ2YWxpZGF0ZU51bWJlciIpO28oemhlLCJ2YWxpZGF0ZVNpemVJblBpeGVscyIpfSk7ZnVuY3Rpb24gdGgodCl7cmV0dXJuIGtyKHQudHJpbSgpLGxWZSl9ZnVuY3Rpb24gY1ZlKHQpe0VhLnNldERhdGEoe3F1YWRyYW50MVRleHQ6dGgodC50ZXh0KX0pfWZ1bmN0aW9uIHVWZSh0KXtFYS5zZXREYXRhKHtxdWFkcmFudDJUZXh0OnRoKHQudGV4dCl9KX1mdW5jdGlvbiBoVmUodCl7RWEuc2V0RGF0YSh7cXVhZHJhbnQzVGV4dDp0aCh0LnRleHQpfSl9ZnVuY3Rpb24gZlZlKHQpe0VhLnNldERhdGEoe3F1YWRyYW50NFRleHQ6dGgodC50ZXh0KX0pfWZ1bmN0aW9uIGRWZSh0KXtFYS5zZXREYXRhKHt4QXhpc0xlZnRUZXh0OnRoKHQudGV4dCl9KX1mdW5jdGlvbiBwVmUodCl7RWEuc2V0RGF0YSh7eEF4aXNSaWdodFRleHQ6dGgodC50ZXh0KX0pfWZ1bmN0aW9uIG1WZSh0KXtFYS5zZXREYXRhKHt5QXhpc1RvcFRleHQ6dGgodC50ZXh0KX0pfWZ1bmN0aW9uIGdWZSh0KXtFYS5zZXREYXRhKHt5QXhpc0JvdHRvbVRleHQ6dGgodC50ZXh0KX0pfWZ1bmN0aW9uIG9PKHQpe2xldCBlPXt9O2ZvcihsZXQgciBvZiB0KXtsZXRbbixpXT1yLnRyaW0oKS5zcGxpdCgvXHMqOlxzKi8pO2lmKG49PT0icmFkaXVzIil7aWYoRmhlKGkpKXRocm93IG5ldyBSMChuLGksIm51bWJlciIpO2UucmFkaXVzPXBhcnNlSW50KGkpfWVsc2UgaWYobj09PSJjb2xvciIpe2lmKHNPKGkpKXRocm93IG5ldyBSMChuLGksImhleCBjb2RlIik7ZS5jb2xvcj1pfWVsc2UgaWYobj09PSJzdHJva2UtY29sb3IiKXtpZihzTyhpKSl0aHJvdyBuZXcgUjAobixpLCJoZXggY29kZSIpO2Uuc3Ryb2tlQ29sb3I9aX1lbHNlIGlmKG49PT0ic3Ryb2tlLXdpZHRoIil7aWYoemhlKGkpKXRocm93IG5ldyBSMChuLGksIm51bWJlciBvZiBwaXhlbHMgKGVnLiAxMHB4KSIpO2Uuc3Ryb2tlV2lkdGg9aX1lbHNlIHRocm93IG5ldyBFcnJvcihgc3R5bGUgbmFtZWQgJHtufSBpcyBub3Qgc3VwcG9ydGVkLmApfXJldHVybiBlfWZ1bmN0aW9uIHlWZSh0LGUscixuLGkpe2xldCBhPW9PKGkpO0VhLmFkZFBvaW50cyhbe3g6cix5Om4sdGV4dDp0aCh0LnRleHQpLGNsYXNzTmFtZTplLC4uLmF9XSl9ZnVuY3Rpb24gdlZlKHQsZSl7RWEuYWRkQ2xhc3ModCxvTyhlKSl9ZnVuY3Rpb24geFZlKHQpe0VhLnNldENvbmZpZyh7Y2hhcnRXaWR0aDp0fSl9ZnVuY3Rpb24gYlZlKHQpe0VhLnNldENvbmZpZyh7Y2hhcnRIZWlnaHQ6dH0pfWZ1bmN0aW9uIHdWZSgpe2xldCB0PXBlKCkse3RoZW1lVmFyaWFibGVzOmUscXVhZHJhbnRDaGFydDpyfT10O3JldHVybiByJiZFYS5zZXRDb25maWcociksRWEuc2V0VGhlbWVDb25maWcoe3F1YWRyYW50MUZpbGw6ZS5xdWFkcmFudDFGaWxsLHF1YWRyYW50MkZpbGw6ZS5xdWFkcmFudDJGaWxsLHF1YWRyYW50M0ZpbGw6ZS5xdWFkcmFudDNGaWxsLHF1YWRyYW50NEZpbGw6ZS5xdWFkcmFudDRGaWxsLHF1YWRyYW50MVRleHRGaWxsOmUucXVhZHJhbnQxVGV4dEZpbGwscXVhZHJhbnQyVGV4dEZpbGw6ZS5xdWFkcmFudDJUZXh0RmlsbCxxdWFkcmFudDNUZXh0RmlsbDplLnF1YWRyYW50M1RleHRGaWxsLHF1YWRyYW50NFRleHRGaWxsOmUucXVhZHJhbnQ0VGV4dEZpbGwscXVhZHJhbnRQb2ludEZpbGw6ZS5xdWFkcmFudFBvaW50RmlsbCxxdWFkcmFudFBvaW50VGV4dEZpbGw6ZS5xdWFkcmFudFBvaW50VGV4dEZpbGwscXVhZHJhbnRYQXhpc1RleHRGaWxsOmUucXVhZHJhbnRYQXhpc1RleHRGaWxsLHF1YWRyYW50WUF4aXNUZXh0RmlsbDplLnF1YWRyYW50WUF4aXNUZXh0RmlsbCxxdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbDplLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsOmUucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwscXVhZHJhbnRUaXRsZUZpbGw6ZS5xdWFkcmFudFRpdGxlRmlsbH0pLEVhLnNldERhdGEoe3RpdGxlVGV4dDpKcigpfSksRWEuYnVpbGQoKX12YXIgbFZlLEVhLFRWZSwkaGUsVmhlPU0oKCk9PnsidXNlIHN0cmljdCI7VnQoKTtmcigpO0FpKCk7QmhlKCk7R2hlKCk7bFZlPXBlKCk7byh0aCwidGV4dFNhbml0aXplciIpO0VhPW5ldyBFRTtvKGNWZSwic2V0UXVhZHJhbnQxVGV4dCIpO28odVZlLCJzZXRRdWFkcmFudDJUZXh0Iik7byhoVmUsInNldFF1YWRyYW50M1RleHQiKTtvKGZWZSwic2V0UXVhZHJhbnQ0VGV4dCIpO28oZFZlLCJzZXRYQXhpc0xlZnRUZXh0Iik7byhwVmUsInNldFhBeGlzUmlnaHRUZXh0Iik7byhtVmUsInNldFlBeGlzVG9wVGV4dCIpO28oZ1ZlLCJzZXRZQXhpc0JvdHRvbVRleHQiKTtvKG9PLCJwYXJzZVN0eWxlcyIpO28oeVZlLCJhZGRQb2ludCIpO28odlZlLCJhZGRDbGFzcyIpO28oeFZlLCJzZXRXaWR0aCIpO28oYlZlLCJzZXRIZWlnaHQiKTtvKHdWZSwiZ2V0UXVhZHJhbnREYXRhIik7VFZlPW8oZnVuY3Rpb24oKXtFYS5jbGVhcigpLExyKCl9LCJjbGVhciIpLCRoZT17c2V0V2lkdGg6eFZlLHNldEhlaWdodDpiVmUsc2V0UXVhZHJhbnQxVGV4dDpjVmUsc2V0UXVhZHJhbnQyVGV4dDp1VmUsc2V0UXVhZHJhbnQzVGV4dDpoVmUsc2V0UXVhZHJhbnQ0VGV4dDpmVmUsc2V0WEF4aXNMZWZ0VGV4dDpkVmUsc2V0WEF4aXNSaWdodFRleHQ6cFZlLHNldFlBeGlzVG9wVGV4dDptVmUsc2V0WUF4aXNCb3R0b21UZXh0OmdWZSxwYXJzZVN0eWxlczpvTyxhZGRQb2ludDp5VmUsYWRkQ2xhc3M6dlZlLGdldFF1YWRyYW50RGF0YTp3VmUsY2xlYXI6VFZlLHNldEFjY1RpdGxlOk1yLGdldEFjY1RpdGxlOkJyLHNldERpYWdyYW1UaXRsZTpjbixnZXREaWFncmFtVGl0bGU6SnIsZ2V0QWNjRGVzY3JpcHRpb246enIsc2V0QWNjRGVzY3JpcHRpb246RnJ9fSk7dmFyIGtWZSxVaGUsSGhlPU0oKCk9PnsidXNlIHN0cmljdCI7cHIoKTtWdCgpO3V0KCk7YWkoKTtrVmU9bygodCxlLHIsbik9PntmdW5jdGlvbiBpKFMpe3JldHVybiBTPT09InRvcCI/ImhhbmdpbmciOiJtaWRkbGUifW8oaSwiZ2V0RG9taW5hbnRCYXNlTGluZSIpO2Z1bmN0aW9uIGEoUyl7cmV0dXJuIFM9PT0ibGVmdCI/InN0YXJ0IjoibWlkZGxlIn1vKGEsImdldFRleHRBbmNob3IiKTtmdW5jdGlvbiBzKFMpe3JldHVybmB0cmFuc2xhdGUoJHtTLnh9LCAke1MueX0pIHJvdGF0ZSgke1Mucm90YXRpb258fDB9KWB9byhzLCJnZXRUcmFuc2Zvcm1hdGlvbiIpO2xldCBsPXBlKCk7WS5kZWJ1ZyhgUmVuZGVyaW5nIHF1YWRyYW50IGNoYXJ0CmArdCk7bGV0IHU9bC5zZWN1cml0eUxldmVsLGg7dT09PSJzYW5kYm94IiYmKGg9VmUoIiNpIitlKSk7bGV0IGQ9KHU9PT0ic2FuZGJveCI/VmUoaC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KTpWZSgiYm9keSIpKS5zZWxlY3QoYFtpZD0iJHtlfSJdYCkscD1kLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibWFpbiIpLG09bC5xdWFkcmFudENoYXJ0Py5jaGFydFdpZHRoPz81MDAsZz1sLnF1YWRyYW50Q2hhcnQ/LmNoYXJ0SGVpZ2h0Pz81MDA7WnIoZCxnLG0sbC5xdWFkcmFudENoYXJ0Py51c2VNYXhXaWR0aD8/ITApLGQuYXR0cigidmlld0JveCIsIjAgMCAiK20rIiAiK2cpLG4uZGIuc2V0SGVpZ2h0KGcpLG4uZGIuc2V0V2lkdGgobSk7bGV0IHk9bi5kYi5nZXRRdWFkcmFudERhdGEoKSx2PXAuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJxdWFkcmFudHMiKSx4PXAuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJib3JkZXIiKSxiPXAuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJkYXRhLXBvaW50cyIpLHc9cC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVscyIpLF89cC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRpdGxlIik7eS50aXRsZSYmXy5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJmaWxsIix5LnRpdGxlLmZpbGwpLmF0dHIoImZvbnQtc2l6ZSIseS50aXRsZS5mb250U2l6ZSkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLGkoeS50aXRsZS5ob3Jpem9udGFsUG9zKSkuYXR0cigidGV4dC1hbmNob3IiLGEoeS50aXRsZS52ZXJ0aWNhbFBvcykpLmF0dHIoInRyYW5zZm9ybSIscyh5LnRpdGxlKSkudGV4dCh5LnRpdGxlLnRleHQpLHkuYm9yZGVyTGluZXMmJnguc2VsZWN0QWxsKCJsaW5lIikuZGF0YSh5LmJvcmRlckxpbmVzKS5lbnRlcigpLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixTPT5TLngxKS5hdHRyKCJ5MSIsUz0+Uy55MSkuYXR0cigieDIiLFM9PlMueDIpLmF0dHIoInkyIixTPT5TLnkyKS5zdHlsZSgic3Ryb2tlIixTPT5TLnN0cm9rZUZpbGwpLnN0eWxlKCJzdHJva2Utd2lkdGgiLFM9PlMuc3Ryb2tlV2lkdGgpO2xldCBUPXYuc2VsZWN0QWxsKCJnLnF1YWRyYW50IikuZGF0YSh5LnF1YWRyYW50cykuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInF1YWRyYW50Iik7VC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IixTPT5TLngpLmF0dHIoInkiLFM9PlMueSkuYXR0cigid2lkdGgiLFM9PlMud2lkdGgpLmF0dHIoImhlaWdodCIsUz0+Uy5oZWlnaHQpLmF0dHIoImZpbGwiLFM9PlMuZmlsbCksVC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJmaWxsIixTPT5TLnRleHQuZmlsbCkuYXR0cigiZm9udC1zaXplIixTPT5TLnRleHQuZm9udFNpemUpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIixTPT5pKFMudGV4dC5ob3Jpem9udGFsUG9zKSkuYXR0cigidGV4dC1hbmNob3IiLFM9PmEoUy50ZXh0LnZlcnRpY2FsUG9zKSkuYXR0cigidHJhbnNmb3JtIixTPT5zKFMudGV4dCkpLnRleHQoUz0+Uy50ZXh0LnRleHQpLHcuc2VsZWN0QWxsKCJnLmxhYmVsIikuZGF0YSh5LmF4aXNMYWJlbHMpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnRleHQoUz0+Uy50ZXh0KS5hdHRyKCJmaWxsIixTPT5TLmZpbGwpLmF0dHIoImZvbnQtc2l6ZSIsUz0+Uy5mb250U2l6ZSkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLFM9PmkoUy5ob3Jpem9udGFsUG9zKSkuYXR0cigidGV4dC1hbmNob3IiLFM9PmEoUy52ZXJ0aWNhbFBvcykpLmF0dHIoInRyYW5zZm9ybSIsUz0+cyhTKSk7bGV0IEw9Yi5zZWxlY3RBbGwoImcuZGF0YS1wb2ludCIpLmRhdGEoeS5wb2ludHMpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJkYXRhLXBvaW50Iik7TC5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixTPT5TLngpLmF0dHIoImN5IixTPT5TLnkpLmF0dHIoInIiLFM9PlMucmFkaXVzKS5hdHRyKCJmaWxsIixTPT5TLmZpbGwpLmF0dHIoInN0cm9rZSIsUz0+Uy5zdHJva2VDb2xvcikuYXR0cigic3Ryb2tlLXdpZHRoIixTPT5TLnN0cm9rZVdpZHRoKSxMLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnRleHQoUz0+Uy50ZXh0LnRleHQpLmF0dHIoImZpbGwiLFM9PlMudGV4dC5maWxsKS5hdHRyKCJmb250LXNpemUiLFM9PlMudGV4dC5mb250U2l6ZSkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLFM9PmkoUy50ZXh0Lmhvcml6b250YWxQb3MpKS5hdHRyKCJ0ZXh0LWFuY2hvciIsUz0+YShTLnRleHQudmVydGljYWxQb3MpKS5hdHRyKCJ0cmFuc2Zvcm0iLFM9PnMoUy50ZXh0KSl9LCJkcmF3IiksVWhlPXtkcmF3OmtWZX19KTt2YXIgV2hlPXt9O3ZyKFdoZSx7ZGlhZ3JhbTooKT0+RVZlfSk7dmFyIEVWZSxZaGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtQaGUoKTtWaGUoKTtIaGUoKTtFVmU9e3BhcnNlcjpPaGUsZGI6JGhlLHJlbmRlcmVyOlVoZSxzdHlsZXM6bygoKT0+IiIsInN0eWxlcyIpfX0pO3ZhciBsTyxqaGUsS2hlPU0oKCk9PnsidXNlIHN0cmljdCI7bE89ZnVuY3Rpb24oKXt2YXIgdD1vKGZ1bmN0aW9uKE8sTixQLEYpe2ZvcihQPVB8fHt9LEY9Ty5sZW5ndGg7Ri0tO1BbT1tGXV09Tik7cmV0dXJuIFB9LCJvIiksZT1bMSwxMCwxMiwxNCwxNiwxOCwxOSwyMSwyM10scj1bMiw2XSxuPVsxLDNdLGk9WzEsNV0sYT1bMSw2XSxzPVsxLDddLGw9WzEsNSwxMCwxMiwxNCwxNiwxOCwxOSwyMSwyMywzNCwzNSwzNl0sdT1bMSwyNV0saD1bMSwyNl0sZj1bMSwyOF0sZD1bMSwyOV0scD1bMSwzMF0sbT1bMSwzMV0sZz1bMSwzMl0seT1bMSwzM10sdj1bMSwzNF0seD1bMSwzNV0sYj1bMSwzNl0sdz1bMSwzN10sXz1bMSw0M10sVD1bMSw0Ml0sRT1bMSw0N10sTD1bMSw1MF0sUz1bMSwxMCwxMiwxNCwxNiwxOCwxOSwyMSwyMywzNCwzNSwzNl0sQT1bMSwxMCwxMiwxNCwxNiwxOCwxOSwyMSwyMywyNCwyNiwyNywyOCwzNCwzNSwzNl0sST1bMSwxMCwxMiwxNCwxNiwxOCwxOSwyMSwyMywyNCwyNiwyNywyOCwzNCwzNSwzNiw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MF0sRD1bMSw2NF0saz17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6Myxlb2w6NCxYWUNIQVJUOjUsY2hhcnRDb25maWc6Nixkb2N1bWVudDo3LENIQVJUX09SSUVOVEFUSU9OOjgsc3RhdGVtZW50OjksdGl0bGU6MTAsdGV4dDoxMSxYX0FYSVM6MTIscGFyc2VYQXhpczoxMyxZX0FYSVM6MTQscGFyc2VZQXhpczoxNSxMSU5FOjE2LHBsb3REYXRhOjE3LEJBUjoxOCxhY2NfdGl0bGU6MTksYWNjX3RpdGxlX3ZhbHVlOjIwLGFjY19kZXNjcjoyMSxhY2NfZGVzY3JfdmFsdWU6MjIsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToyMyxTUVVBUkVfQlJBQ0VTX1NUQVJUOjI0LGNvbW1hU2VwYXJhdGVkTnVtYmVyczoyNSxTUVVBUkVfQlJBQ0VTX0VORDoyNixOVU1CRVJfV0lUSF9ERUNJTUFMOjI3LENPTU1BOjI4LHhBeGlzRGF0YToyOSxiYW5kRGF0YTozMCxBUlJPV19ERUxJTUlURVI6MzEsY29tbWFTZXBhcmF0ZWRUZXh0czozMix5QXhpc0RhdGE6MzMsTkVXTElORTozNCxTRU1JOjM1LEVPRjozNixhbHBoYU51bTozNyxTVFI6MzgsTURfU1RSOjM5LGFscGhhTnVtVG9rZW46NDAsQU1QOjQxLE5VTTo0MixBTFBIQTo0MyxQTFVTOjQ0LEVRVUFMUzo0NSxNVUxUOjQ2LERPVDo0NyxCUktUOjQ4LE1JTlVTOjQ5LFVOREVSU0NPUkU6NTAsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDU6IlhZQ0hBUlQiLDg6IkNIQVJUX09SSUVOVEFUSU9OIiwxMDoidGl0bGUiLDEyOiJYX0FYSVMiLDE0OiJZX0FYSVMiLDE2OiJMSU5FIiwxODoiQkFSIiwxOToiYWNjX3RpdGxlIiwyMDoiYWNjX3RpdGxlX3ZhbHVlIiwyMToiYWNjX2Rlc2NyIiwyMjoiYWNjX2Rlc2NyX3ZhbHVlIiwyMzoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMjQ6IlNRVUFSRV9CUkFDRVNfU1RBUlQiLDI2OiJTUVVBUkVfQlJBQ0VTX0VORCIsMjc6Ik5VTUJFUl9XSVRIX0RFQ0lNQUwiLDI4OiJDT01NQSIsMzE6IkFSUk9XX0RFTElNSVRFUiIsMzQ6Ik5FV0xJTkUiLDM1OiJTRU1JIiwzNjoiRU9GIiwzODoiU1RSIiwzOToiTURfU1RSIiw0MToiQU1QIiw0MjoiTlVNIiw0MzoiQUxQSEEiLDQ0OiJQTFVTIiw0NToiRVFVQUxTIiw0NjoiTVVMVCIsNDc6IkRPVCIsNDg6IkJSS1QiLDQ5OiJNSU5VUyIsNTA6IlVOREVSU0NPUkUifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzMsM10sWzMsMl0sWzMsMV0sWzYsMV0sWzcsMF0sWzcsMl0sWzksMl0sWzksMl0sWzksMl0sWzksMl0sWzksMl0sWzksM10sWzksMl0sWzksM10sWzksMl0sWzksMl0sWzksMV0sWzE3LDNdLFsyNSwzXSxbMjUsMV0sWzEzLDFdLFsxMywyXSxbMTMsMV0sWzI5LDFdLFsyOSwzXSxbMzAsM10sWzMyLDNdLFszMiwxXSxbMTUsMV0sWzE1LDJdLFsxNSwxXSxbMzMsM10sWzQsMV0sWzQsMV0sWzQsMV0sWzExLDFdLFsxMSwxXSxbMTEsMV0sWzM3LDFdLFszNywyXSxbNDAsMV0sWzQwLDFdLFs0MCwxXSxbNDAsMV0sWzQwLDFdLFs0MCwxXSxbNDAsMV0sWzQwLDFdLFs0MCwxXSxbNDAsMV1dLHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihOLFAsRixCLEcseixXKXt2YXIgWj16Lmxlbmd0aC0xO3N3aXRjaChHKXtjYXNlIDU6Qi5zZXRPcmllbnRhdGlvbih6W1pdKTticmVhaztjYXNlIDk6Qi5zZXREaWFncmFtVGl0bGUoeltaXS50ZXh0LnRyaW0oKSk7YnJlYWs7Y2FzZSAxMjpCLnNldExpbmVEYXRhKHt0ZXh0OiIiLHR5cGU6InRleHQifSx6W1pdKTticmVhaztjYXNlIDEzOkIuc2V0TGluZURhdGEoeltaLTFdLHpbWl0pO2JyZWFrO2Nhc2UgMTQ6Qi5zZXRCYXJEYXRhKHt0ZXh0OiIiLHR5cGU6InRleHQifSx6W1pdKTticmVhaztjYXNlIDE1OkIuc2V0QmFyRGF0YSh6W1otMV0seltaXSk7YnJlYWs7Y2FzZSAxNjp0aGlzLiQ9eltaXS50cmltKCksQi5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMTc6Y2FzZSAxODp0aGlzLiQ9eltaXS50cmltKCksQi5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMTk6dGhpcy4kPXpbWi0xXTticmVhaztjYXNlIDIwOnRoaXMuJD1bTnVtYmVyKHpbWi0yXSksLi4ueltaXV07YnJlYWs7Y2FzZSAyMTp0aGlzLiQ9W051bWJlcih6W1pdKV07YnJlYWs7Y2FzZSAyMjpCLnNldFhBeGlzVGl0bGUoeltaXSk7YnJlYWs7Y2FzZSAyMzpCLnNldFhBeGlzVGl0bGUoeltaLTFdKTticmVhaztjYXNlIDI0OkIuc2V0WEF4aXNUaXRsZSh7dHlwZToidGV4dCIsdGV4dDoiIn0pO2JyZWFrO2Nhc2UgMjU6Qi5zZXRYQXhpc0JhbmQoeltaXSk7YnJlYWs7Y2FzZSAyNjpCLnNldFhBeGlzUmFuZ2VEYXRhKE51bWJlcih6W1otMl0pLE51bWJlcih6W1pdKSk7YnJlYWs7Y2FzZSAyNzp0aGlzLiQ9eltaLTFdO2JyZWFrO2Nhc2UgMjg6dGhpcy4kPVt6W1otMl0sLi4ueltaXV07YnJlYWs7Y2FzZSAyOTp0aGlzLiQ9W3pbWl1dO2JyZWFrO2Nhc2UgMzA6Qi5zZXRZQXhpc1RpdGxlKHpbWl0pO2JyZWFrO2Nhc2UgMzE6Qi5zZXRZQXhpc1RpdGxlKHpbWi0xXSk7YnJlYWs7Y2FzZSAzMjpCLnNldFlBeGlzVGl0bGUoe3R5cGU6InRleHQiLHRleHQ6IiJ9KTticmVhaztjYXNlIDMzOkIuc2V0WUF4aXNSYW5nZURhdGEoTnVtYmVyKHpbWi0yXSksTnVtYmVyKHpbWl0pKTticmVhaztjYXNlIDM3OnRoaXMuJD17dGV4dDp6W1pdLHR5cGU6InRleHQifTticmVhaztjYXNlIDM4OnRoaXMuJD17dGV4dDp6W1pdLHR5cGU6InRleHQifTticmVhaztjYXNlIDM5OnRoaXMuJD17dGV4dDp6W1pdLHR5cGU6Im1hcmtkb3duIn07YnJlYWs7Y2FzZSA0MDp0aGlzLiQ9eltaXTticmVhaztjYXNlIDQxOnRoaXMuJD16W1otMV0rIiIreltaXTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbdChlLHIsezM6MSw0OjIsNzo0LDU6biwzNDppLDM1OmEsMzY6c30pLHsxOlszXX0sdChlLHIsezQ6Miw3OjQsMzo4LDU6biwzNDppLDM1OmEsMzY6c30pLHQoZSxyLHs0OjIsNzo0LDY6OSwzOjEwLDU6biw4OlsxLDExXSwzNDppLDM1OmEsMzY6c30pLHsxOlsyLDRdLDk6MTIsMTA6WzEsMTNdLDEyOlsxLDE0XSwxNDpbMSwxNV0sMTY6WzEsMTZdLDE4OlsxLDE3XSwxOTpbMSwxOF0sMjE6WzEsMTldLDIzOlsxLDIwXX0sdChsLFsyLDM0XSksdChsLFsyLDM1XSksdChsLFsyLDM2XSksezE6WzIsMV19LHQoZSxyLHs0OjIsNzo0LDM6MjEsNTpuLDM0OmksMzU6YSwzNjpzfSksezE6WzIsM119LHQobCxbMiw1XSksdChlLFsyLDddLHs0OjIyLDM0OmksMzU6YSwzNjpzfSksezExOjIzLDM3OjI0LDM4OnUsMzk6aCw0MDoyNyw0MTpmLDQyOmQsNDM6cCw0NDptLDQ1OmcsNDY6eSw0Nzp2LDQ4OngsNDk6Yiw1MDp3fSx7MTE6MzksMTM6MzgsMjQ6XywyNzpULDI5OjQwLDMwOjQxLDM3OjI0LDM4OnUsMzk6aCw0MDoyNyw0MTpmLDQyOmQsNDM6cCw0NDptLDQ1OmcsNDY6eSw0Nzp2LDQ4OngsNDk6Yiw1MDp3fSx7MTE6NDUsMTU6NDQsMjc6RSwzMzo0NiwzNzoyNCwzODp1LDM5OmgsNDA6MjcsNDE6Ziw0MjpkLDQzOnAsNDQ6bSw0NTpnLDQ2OnksNDc6diw0ODp4LDQ5OmIsNTA6d30sezExOjQ5LDE3OjQ4LDI0OkwsMzc6MjQsMzg6dSwzOTpoLDQwOjI3LDQxOmYsNDI6ZCw0MzpwLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOnd9LHsxMTo1MiwxNzo1MSwyNDpMLDM3OjI0LDM4OnUsMzk6aCw0MDoyNyw0MTpmLDQyOmQsNDM6cCw0NDptLDQ1OmcsNDY6eSw0Nzp2LDQ4OngsNDk6Yiw1MDp3fSx7MjA6WzEsNTNdfSx7MjI6WzEsNTRdfSx0KFMsWzIsMThdKSx7MTpbMiwyXX0sdChTLFsyLDhdKSx0KFMsWzIsOV0pLHQoQSxbMiwzN10sezQwOjU1LDQxOmYsNDI6ZCw0MzpwLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOnd9KSx0KEEsWzIsMzhdKSx0KEEsWzIsMzldKSx0KEksWzIsNDBdKSx0KEksWzIsNDJdKSx0KEksWzIsNDNdKSx0KEksWzIsNDRdKSx0KEksWzIsNDVdKSx0KEksWzIsNDZdKSx0KEksWzIsNDddKSx0KEksWzIsNDhdKSx0KEksWzIsNDldKSx0KEksWzIsNTBdKSx0KEksWzIsNTFdKSx0KFMsWzIsMTBdKSx0KFMsWzIsMjJdLHszMDo0MSwyOTo1NiwyNDpfLDI3OlR9KSx0KFMsWzIsMjRdKSx0KFMsWzIsMjVdKSx7MzE6WzEsNTddfSx7MTE6NTksMzI6NTgsMzc6MjQsMzg6dSwzOTpoLDQwOjI3LDQxOmYsNDI6ZCw0MzpwLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOnd9LHQoUyxbMiwxMV0pLHQoUyxbMiwzMF0sezMzOjYwLDI3OkV9KSx0KFMsWzIsMzJdKSx7MzE6WzEsNjFdfSx0KFMsWzIsMTJdKSx7MTc6NjIsMjQ6TH0sezI1OjYzLDI3OkR9LHQoUyxbMiwxNF0pLHsxNzo2NSwyNDpMfSx0KFMsWzIsMTZdKSx0KFMsWzIsMTddKSx0KEksWzIsNDFdKSx0KFMsWzIsMjNdKSx7Mjc6WzEsNjZdfSx7MjY6WzEsNjddfSx7MjY6WzIsMjldLDI4OlsxLDY4XX0sdChTLFsyLDMxXSksezI3OlsxLDY5XX0sdChTLFsyLDEzXSksezI2OlsxLDcwXX0sezI2OlsyLDIxXSwyODpbMSw3MV19LHQoUyxbMiwxNV0pLHQoUyxbMiwyNl0pLHQoUyxbMiwyN10pLHsxMTo1OSwzMjo3MiwzNzoyNCwzODp1LDM5OmgsNDA6MjcsNDE6Ziw0MjpkLDQzOnAsNDQ6bSw0NTpnLDQ2OnksNDc6diw0ODp4LDQ5OmIsNTA6d30sdChTLFsyLDMzXSksdChTLFsyLDE5XSksezI1OjczLDI3OkR9LHsyNjpbMiwyOF19LHsyNjpbMiwyMF19XSxkZWZhdWx0QWN0aW9uczp7ODpbMiwxXSwxMDpbMiwzXSwyMTpbMiwyXSw3MjpbMiwyOF0sNzM6WzIsMjBdfSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oTixQKXtpZihQLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoTik7ZWxzZXt2YXIgRj1uZXcgRXJyb3IoTik7dGhyb3cgRi5oYXNoPVAsRn19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihOKXt2YXIgUD10aGlzLEY9WzBdLEI9W10sRz1bbnVsbF0sej1bXSxXPXRoaXMudGFibGUsWj0iIixqPTAsb2U9MCxLPTAsZWU9MixKPTEsSD16LnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHE9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxRPXt5eTp7fX07Zm9yKHZhciBhZSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGFlKSYmKFEueXlbYWVdPXRoaXMueXlbYWVdKTtxLnNldElucHV0KE4sUS55eSksUS55eS5sZXhlcj1xLFEueXkucGFyc2VyPXRoaXMsdHlwZW9mIHEueXlsbG9jPiJ1IiYmKHEueXlsbG9jPXt9KTt2YXIgdWU9cS55eWxsb2M7ei5wdXNoKHVlKTt2YXIgY2U9cS5vcHRpb25zJiZxLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBRLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPVEueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gdGUobmUpe0YubGVuZ3RoPUYubGVuZ3RoLTIqbmUsRy5sZW5ndGg9Ry5sZW5ndGgtbmUsei5sZW5ndGg9ei5sZW5ndGgtbmV9byh0ZSwicG9wU3RhY2siKTtmdW5jdGlvbiBOZSgpe3ZhciBuZTtyZXR1cm4gbmU9Qi5wb3AoKXx8cS5sZXgoKXx8Six0eXBlb2YgbmUhPSJudW1iZXIiJiYobmUgaW5zdGFuY2VvZiBBcnJheSYmKEI9bmUsbmU9Qi5wb3AoKSksbmU9UC5zeW1ib2xzX1tuZV18fG5lKSxuZX1vKE5lLCJsZXgiKTtmb3IodmFyIHNlLGtlLFJlLENlLFBlLEllLCRlPXt9LHllLFgsZmUsaGU7Oyl7aWYoUmU9RltGLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW1JlXT9DZT10aGlzLmRlZmF1bHRBY3Rpb25zW1JlXTooKHNlPT09bnVsbHx8dHlwZW9mIHNlPiJ1IikmJihzZT1OZSgpKSxDZT1XW1JlXSYmV1tSZV1bc2VdKSx0eXBlb2YgQ2U+InUifHwhQ2UubGVuZ3RofHwhQ2VbMF0pe3ZhciBnZT0iIjtoZT1bXTtmb3IoeWUgaW4gV1tSZV0pdGhpcy50ZXJtaW5hbHNfW3llXSYmeWU+ZWUmJmhlLnB1c2goIiciK3RoaXMudGVybWluYWxzX1t5ZV0rIiciKTtxLnNob3dQb3NpdGlvbj9nZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhqKzEpK2A6CmArcS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK2hlLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bc2VdfHxzZSkrIiciOmdlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGorMSkrIjogVW5leHBlY3RlZCAiKyhzZT09Sj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tzZV18fHNlKSsiJyIpLHRoaXMucGFyc2VFcnJvcihnZSx7dGV4dDpxLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tzZV18fHNlLGxpbmU6cS55eWxpbmVubyxsb2M6dWUsZXhwZWN0ZWQ6aGV9KX1pZihDZVswXWluc3RhbmNlb2YgQXJyYXkmJkNlLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrUmUrIiwgdG9rZW46ICIrc2UpO3N3aXRjaChDZVswXSl7Y2FzZSAxOkYucHVzaChzZSksRy5wdXNoKHEueXl0ZXh0KSx6LnB1c2gocS55eWxsb2MpLEYucHVzaChDZVsxXSksc2U9bnVsbCxrZT8oc2U9a2Usa2U9bnVsbCk6KG9lPXEueXlsZW5nLFo9cS55eXRleHQsaj1xLnl5bGluZW5vLHVlPXEueXlsbG9jLEs+MCYmSy0tKTticmVhaztjYXNlIDI6aWYoWD10aGlzLnByb2R1Y3Rpb25zX1tDZVsxXV1bMV0sJGUuJD1HW0cubGVuZ3RoLVhdLCRlLl8kPXtmaXJzdF9saW5lOnpbei5sZW5ndGgtKFh8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTp6W3oubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46elt6Lmxlbmd0aC0oWHx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp6W3oubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxjZSYmKCRlLl8kLnJhbmdlPVt6W3oubGVuZ3RoLShYfHwxKV0ucmFuZ2VbMF0selt6Lmxlbmd0aC0xXS5yYW5nZVsxXV0pLEllPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseSgkZSxbWixvZSxqLFEueXksQ2VbMV0sRyx6XS5jb25jYXQoSCkpLHR5cGVvZiBJZTwidSIpcmV0dXJuIEllO1gmJihGPUYuc2xpY2UoMCwtMSpYKjIpLEc9Ry5zbGljZSgwLC0xKlgpLHo9ei5zbGljZSgwLC0xKlgpKSxGLnB1c2godGhpcy5wcm9kdWN0aW9uc19bQ2VbMV1dWzBdKSxHLnB1c2goJGUuJCksei5wdXNoKCRlLl8kKSxmZT1XW0ZbRi5sZW5ndGgtMl1dW0ZbRi5sZW5ndGgtMV1dLEYucHVzaChmZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LFI9ZnVuY3Rpb24oKXt2YXIgTz17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKFAsRil7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihQLEYpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKFApfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24oTixQKXtyZXR1cm4gdGhpcy55eT1QfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1OLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIE49dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPU4sdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPU4sdGhpcy5tYXRjaGVkKz1OO3ZhciBQPU4ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBQPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxOfSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKE4pe3ZhciBQPU4ubGVuZ3RoLEY9Ti5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PU4rdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLVApLHRoaXMub2Zmc2V0LT1QO3ZhciBCPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLEYubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1GLmxlbmd0aC0xKTt2YXIgRz10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46Rj8oRi5sZW5ndGg9PT1CLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrQltCLmxlbmd0aC1GLmxlbmd0aF0ubGVuZ3RoLUZbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1QfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W0dbMF0sR1swXSt0aGlzLnl5bGVuZy1QXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24oTil7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKE4pKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBOPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oTi5sZW5ndGg+MjA/Ii4uLiI6IiIpK04uc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgTj10aGlzLm1hdGNoO3JldHVybiBOLmxlbmd0aDwyMCYmKE4rPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLU4ubGVuZ3RoKSksKE4uc3Vic3RyKDAsMjApKyhOLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIE49dGhpcy5wYXN0SW5wdXQoKSxQPW5ldyBBcnJheShOLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIE4rdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK1ArIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKE4sUCl7dmFyIEYsQixHO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihHPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKEcueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksQj1OWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxCJiYodGhpcy55eWxpbmVubys9Qi5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpCP0JbQi5sZW5ndGgtMV0ubGVuZ3RoLUJbQi5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitOWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPU5bMF0sdGhpcy5tYXRjaCs9TlswXSx0aGlzLm1hdGNoZXM9Tix0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShOWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1OWzBdLEY9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsUCx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxGKXJldHVybiBGO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciB6IGluIEcpdGhpc1t6XT1HW3pdO3JldHVybiExfXJldHVybiExfSwidGVzdF9tYXRjaCIpLG5leHQ6byhmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBOLFAsRixCO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIEc9dGhpcy5fY3VycmVudFJ1bGVzKCksej0wO3o8Ry5sZW5ndGg7eisrKWlmKEY9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tHW3pdXSksRiYmKCFQfHxGWzBdLmxlbmd0aD5QWzBdLmxlbmd0aCkpe2lmKFA9RixCPXosdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoTj10aGlzLnRlc3RfbWF0Y2goRixHW3pdKSxOIT09ITEpcmV0dXJuIE47aWYodGhpcy5fYmFja3RyYWNrKXtQPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIFA/KE49dGhpcy50ZXN0X21hdGNoKFAsR1tCXSksTiE9PSExP046ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LCJuZXh0IiksbGV4Om8oZnVuY3Rpb24oKXt2YXIgUD10aGlzLm5leHQoKTtyZXR1cm4gUHx8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24oUCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKFApfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIFA9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gUD4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sInBvcFN0YXRlIiksX2N1cnJlbnRSdWxlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sIl9jdXJyZW50UnVsZXMiKSx0b3BTdGF0ZTpvKGZ1bmN0aW9uKFApe3JldHVybiBQPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoUHx8MCksUD49MD90aGlzLmNvbmRpdGlvblN0YWNrW1BdOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24oUCl7dGhpcy5iZWdpbihQKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKFAsRixCLEcpe3ZhciB6PUc7c3dpdGNoKEIpe2Nhc2UgMDpicmVhaztjYXNlIDE6YnJlYWs7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMzQ7YnJlYWs7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMzQ7YnJlYWs7Y2FzZSA0OnJldHVybiAzNDtjYXNlIDU6YnJlYWs7Y2FzZSA2OnJldHVybiAxMDtjYXNlIDc6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJhY2NfdGl0bGUiKSwxOTticmVhaztjYXNlIDg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjticmVhaztjYXNlIDk6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJhY2NfZGVzY3IiKSwyMTticmVhaztjYXNlIDEwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7YnJlYWs7Y2FzZSAxMTp0aGlzLnB1c2hTdGF0ZSgiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMTI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTM6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMTQ6cmV0dXJuIDU7Y2FzZSAxNTpyZXR1cm4gODtjYXNlIDE2OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiYXhpc19kYXRhIiksIlhfQVhJUyI7YnJlYWs7Y2FzZSAxNzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImF4aXNfZGF0YSIpLCJZX0FYSVMiO2JyZWFrO2Nhc2UgMTg6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJheGlzX2JhbmRfZGF0YSIpLDI0O2JyZWFrO2Nhc2UgMTk6cmV0dXJuIDMxO2Nhc2UgMjA6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJkYXRhIiksMTY7YnJlYWs7Y2FzZSAyMTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImRhdGEiKSwxODticmVhaztjYXNlIDIyOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiZGF0YV9pbm5lciIpLDI0O2JyZWFrO2Nhc2UgMjM6cmV0dXJuIDI3O2Nhc2UgMjQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwyNjticmVhaztjYXNlIDI1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI2OnRoaXMucHVzaFN0YXRlKCJzdHJpbmciKTticmVhaztjYXNlIDI3OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI4OnJldHVybiJTVFIiO2Nhc2UgMjk6cmV0dXJuIDI0O2Nhc2UgMzA6cmV0dXJuIDI2O2Nhc2UgMzE6cmV0dXJuIDQzO2Nhc2UgMzI6cmV0dXJuIkNPTE9OIjtjYXNlIDMzOnJldHVybiA0NDtjYXNlIDM0OnJldHVybiAyODtjYXNlIDM1OnJldHVybiA0NTtjYXNlIDM2OnJldHVybiA0NjtjYXNlIDM3OnJldHVybiA0ODtjYXNlIDM4OnJldHVybiA1MDtjYXNlIDM5OnJldHVybiA0NztjYXNlIDQwOnJldHVybiA0MTtjYXNlIDQxOnJldHVybiA0OTtjYXNlIDQyOnJldHVybiA0MjtjYXNlIDQzOmJyZWFrO2Nhc2UgNDQ6cmV0dXJuIDM1O2Nhc2UgNDU6cmV0dXJuIDM2fX0sImFub255bW91cyIpLHJ1bGVzOlsvXig/OiUlKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/Oihccj9cbikpL2ksL14oPzooXHI/XG4pKS9pLC9eKD86W1xuXHJdKykvaSwvXig/OiUlW15cbl0qKS9pLC9eKD86dGl0bGVcYikvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpceykvaSwvXig/OlteXH1dKikvaSwvXig/Onh5Y2hhcnQtYmV0YVxiKS9pLC9eKD86KD86dmVydGljYWx8aG9yaXpvbnRhbCkpL2ksL14oPzp4LWF4aXNcYikvaSwvXig/OnktYXhpc1xiKS9pLC9eKD86XFspL2ksL14oPzotLT4pL2ksL14oPzpsaW5lXGIpL2ksL14oPzpiYXJcYikvaSwvXig/OlxbKS9pLC9eKD86WystXT8oPzpcZCsoPzpcLlxkKyk/fFwuXGQrKSkvaSwvXig/OlxdKS9pLC9eKD86KD86YFwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHsgdGhpc1wucHVzaFN0YXRlXChtZF9zdHJpbmdcKTsgXH1cbjxtZF9zdHJpbmc+XChcPzpcKFw/IWAiXClcLlwpXCsgICAgICAgICAgICAgICAgICBceyByZXR1cm4gTURfU1RSOyBcfVxuPG1kX3N0cmluZz5cKFw/OmApKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpcWykvaSwvXig/OlxdKS9pLC9eKD86W0EtWmEtel0rKS9pLC9eKD86OikvaSwvXig/OlwrKS9pLC9eKD86LCkvaSwvXig/Oj0pL2ksL14oPzpcKikvaSwvXig/OiMpL2ksL14oPzpbXF9dKS9pLC9eKD86XC4pL2ksL14oPzomKS9pLC9eKD86LSkvaSwvXig/OlswLTldKykvaSwvXig/OlxzKykvaSwvXig/OjspL2ksL14oPzokKS9pXSxjb25kaXRpb25zOntkYXRhX2lubmVyOntydWxlczpbMCwxLDQsNSw2LDcsOSwxMSwxNCwxNSwxNiwxNywyMCwyMSwyMywyNCwyNSwyNiwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NV0saW5jbHVzaXZlOiEwfSxkYXRhOntydWxlczpbMCwxLDMsNCw1LDYsNyw5LDExLDE0LDE1LDE2LDE3LDIwLDIxLDIyLDI1LDI2LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1XSxpbmNsdXNpdmU6ITB9LGF4aXNfYmFuZF9kYXRhOntydWxlczpbMCwxLDQsNSw2LDcsOSwxMSwxNCwxNSwxNiwxNywyMCwyMSwyNCwyNSwyNiwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NV0saW5jbHVzaXZlOiEwfSxheGlzX2RhdGE6e3J1bGVzOlswLDEsMiw0LDUsNiw3LDksMTEsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjMsMjUsMjYsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDVdLGluY2x1c2l2ZTohMH0sYWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzEyLDEzXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzEwXSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzhdLGluY2x1c2l2ZTohMX0sdGl0bGU6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sbWRfc3RyaW5nOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzI3LDI4XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsNCw1LDYsNyw5LDExLDE0LDE1LDE2LDE3LDIwLDIxLDI1LDI2LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIE99KCk7ay5sZXhlcj1SO2Z1bmN0aW9uIEMoKXt0aGlzLnl5PXt9fXJldHVybiBvKEMsIlBhcnNlciIpLEMucHJvdG90eXBlPWssay5QYXJzZXI9QyxuZXcgQ30oKTtsTy5wYXJzZXI9bE87amhlPWxPfSk7ZnVuY3Rpb24gY08odCl7cmV0dXJuIHQudHlwZT09PSJiYXIifWZ1bmN0aW9uIFNFKHQpe3JldHVybiB0LnR5cGU9PT0iYmFuZCJ9ZnVuY3Rpb24gcWcodCl7cmV0dXJuIHQudHlwZT09PSJsaW5lYXIifXZhciBDRT1NKCgpPT57InVzZSBzdHJpY3QiO28oY08sImlzQmFyUGxvdCIpO28oU0UsImlzQmFuZEF4aXNEYXRhIik7byhxZywiaXNMaW5lYXJBeGlzRGF0YSIpfSk7dmFyIFhnLHVPPU0oKCk9PnsidXNlIHN0cmljdCI7UGwoKTtYZz1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLnBhcmVudEdyb3VwPWV9c3RhdGlje28odGhpcywiVGV4dERpbWVuc2lvbkNhbGN1bGF0b3JXaXRoRm9udCIpfWdldE1heERpbWVuc2lvbihlLHIpe2lmKCF0aGlzLnBhcmVudEdyb3VwKXJldHVybnt3aWR0aDplLnJlZHVjZSgoYSxzKT0+TWF0aC5tYXgocy5sZW5ndGgsYSksMCkqcixoZWlnaHQ6cn07bGV0IG49e3dpZHRoOjAsaGVpZ2h0OjB9LGk9dGhpcy5wYXJlbnRHcm91cC5hcHBlbmQoImciKS5hdHRyKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIikuYXR0cigiZm9udC1zaXplIixyKTtmb3IobGV0IGEgb2YgZSl7bGV0IHM9ZGooaSwxLGEpLGw9cz9zLndpZHRoOmEubGVuZ3RoKnIsdT1zP3MuaGVpZ2h0OnI7bi53aWR0aD1NYXRoLm1heChuLndpZHRoLGwpLG4uaGVpZ2h0PU1hdGgubWF4KG4uaGVpZ2h0LHUpfXJldHVybiBpLnJlbW92ZSgpLG59fX0pO3ZhciBqZyxoTz1NKCgpPT57InVzZSBzdHJpY3QiO2pnPWNsYXNze2NvbnN0cnVjdG9yKGUscixuLGkpe3RoaXMuYXhpc0NvbmZpZz1lO3RoaXMudGl0bGU9cjt0aGlzLnRleHREaW1lbnNpb25DYWxjdWxhdG9yPW47dGhpcy5heGlzVGhlbWVDb25maWc9aTt0aGlzLmJvdW5kaW5nUmVjdD17eDowLHk6MCx3aWR0aDowLGhlaWdodDowfTt0aGlzLmF4aXNQb3NpdGlvbj0ibGVmdCI7dGhpcy5zaG93VGl0bGU9ITE7dGhpcy5zaG93TGFiZWw9ITE7dGhpcy5zaG93VGljaz0hMTt0aGlzLnNob3dBeGlzTGluZT0hMTt0aGlzLm91dGVyUGFkZGluZz0wO3RoaXMudGl0bGVUZXh0SGVpZ2h0PTA7dGhpcy5sYWJlbFRleHRIZWlnaHQ9MDt0aGlzLnJhbmdlPVswLDEwXSx0aGlzLmJvdW5kaW5nUmVjdD17eDowLHk6MCx3aWR0aDowLGhlaWdodDowfSx0aGlzLmF4aXNQb3NpdGlvbj0ibGVmdCJ9c3RhdGlje28odGhpcywiQmFzZUF4aXMiKX1zZXRSYW5nZShlKXt0aGlzLnJhbmdlPWUsdGhpcy5heGlzUG9zaXRpb249PT0ibGVmdCJ8fHRoaXMuYXhpc1Bvc2l0aW9uPT09InJpZ2h0Ij90aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQ9ZVsxXS1lWzBdOnRoaXMuYm91bmRpbmdSZWN0LndpZHRoPWVbMV0tZVswXSx0aGlzLnJlY2FsY3VsYXRlU2NhbGUoKX1nZXRSYW5nZSgpe3JldHVyblt0aGlzLnJhbmdlWzBdK3RoaXMub3V0ZXJQYWRkaW5nLHRoaXMucmFuZ2VbMV0tdGhpcy5vdXRlclBhZGRpbmddfXNldEF4aXNQb3NpdGlvbihlKXt0aGlzLmF4aXNQb3NpdGlvbj1lLHRoaXMuc2V0UmFuZ2UodGhpcy5yYW5nZSl9Z2V0VGlja0Rpc3RhbmNlKCl7bGV0IGU9dGhpcy5nZXRSYW5nZSgpO3JldHVybiBNYXRoLmFicyhlWzBdLWVbMV0pL3RoaXMuZ2V0VGlja1ZhbHVlcygpLmxlbmd0aH1nZXRBeGlzT3V0ZXJQYWRkaW5nKCl7cmV0dXJuIHRoaXMub3V0ZXJQYWRkaW5nfWdldExhYmVsRGltZW5zaW9uKCl7cmV0dXJuIHRoaXMudGV4dERpbWVuc2lvbkNhbGN1bGF0b3IuZ2V0TWF4RGltZW5zaW9uKHRoaXMuZ2V0VGlja1ZhbHVlcygpLm1hcChlPT5lLnRvU3RyaW5nKCkpLHRoaXMuYXhpc0NvbmZpZy5sYWJlbEZvbnRTaXplKX1yZWNhbGN1bGF0ZU91dGVyUGFkZGluZ1RvRHJhd0Jhcigpey43KnRoaXMuZ2V0VGlja0Rpc3RhbmNlKCk+dGhpcy5vdXRlclBhZGRpbmcqMiYmKHRoaXMub3V0ZXJQYWRkaW5nPU1hdGguZmxvb3IoLjcqdGhpcy5nZXRUaWNrRGlzdGFuY2UoKS8yKSksdGhpcy5yZWNhbGN1bGF0ZVNjYWxlKCl9Y2FsY3VsYXRlU3BhY2VJZkRyYXduSG9yaXpvbnRhbGx5KGUpe2xldCByPWUuaGVpZ2h0O2lmKHRoaXMuYXhpc0NvbmZpZy5zaG93QXhpc0xpbmUmJnI+dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgmJihyLT10aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aCx0aGlzLnNob3dBeGlzTGluZT0hMCksdGhpcy5heGlzQ29uZmlnLnNob3dMYWJlbCl7bGV0IG49dGhpcy5nZXRMYWJlbERpbWVuc2lvbigpLGk9LjIqZS53aWR0aDt0aGlzLm91dGVyUGFkZGluZz1NYXRoLm1pbihuLndpZHRoLzIsaSk7bGV0IGE9bi5oZWlnaHQrdGhpcy5heGlzQ29uZmlnLmxhYmVsUGFkZGluZyoyO3RoaXMubGFiZWxUZXh0SGVpZ2h0PW4uaGVpZ2h0LGE8PXImJihyLT1hLHRoaXMuc2hvd0xhYmVsPSEwKX1pZih0aGlzLmF4aXNDb25maWcuc2hvd1RpY2smJnI+PXRoaXMuYXhpc0NvbmZpZy50aWNrTGVuZ3RoJiYodGhpcy5zaG93VGljaz0hMCxyLT10aGlzLmF4aXNDb25maWcudGlja0xlbmd0aCksdGhpcy5heGlzQ29uZmlnLnNob3dUaXRsZSYmdGhpcy50aXRsZSl7bGV0IG49dGhpcy50ZXh0RGltZW5zaW9uQ2FsY3VsYXRvci5nZXRNYXhEaW1lbnNpb24oW3RoaXMudGl0bGVdLHRoaXMuYXhpc0NvbmZpZy50aXRsZUZvbnRTaXplKSxpPW4uaGVpZ2h0K3RoaXMuYXhpc0NvbmZpZy50aXRsZVBhZGRpbmcqMjt0aGlzLnRpdGxlVGV4dEhlaWdodD1uLmhlaWdodCxpPD1yJiYoci09aSx0aGlzLnNob3dUaXRsZT0hMCl9dGhpcy5ib3VuZGluZ1JlY3Qud2lkdGg9ZS53aWR0aCx0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQ9ZS5oZWlnaHQtcn1jYWxjdWxhdGVTcGFjZUlmRHJhd25WZXJ0aWNhbChlKXtsZXQgcj1lLndpZHRoO2lmKHRoaXMuYXhpc0NvbmZpZy5zaG93QXhpc0xpbmUmJnI+dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgmJihyLT10aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aCx0aGlzLnNob3dBeGlzTGluZT0hMCksdGhpcy5heGlzQ29uZmlnLnNob3dMYWJlbCl7bGV0IG49dGhpcy5nZXRMYWJlbERpbWVuc2lvbigpLGk9LjIqZS5oZWlnaHQ7dGhpcy5vdXRlclBhZGRpbmc9TWF0aC5taW4obi5oZWlnaHQvMixpKTtsZXQgYT1uLndpZHRoK3RoaXMuYXhpc0NvbmZpZy5sYWJlbFBhZGRpbmcqMjthPD1yJiYoci09YSx0aGlzLnNob3dMYWJlbD0hMCl9aWYodGhpcy5heGlzQ29uZmlnLnNob3dUaWNrJiZyPj10aGlzLmF4aXNDb25maWcudGlja0xlbmd0aCYmKHRoaXMuc2hvd1RpY2s9ITAsci09dGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGgpLHRoaXMuYXhpc0NvbmZpZy5zaG93VGl0bGUmJnRoaXMudGl0bGUpe2xldCBuPXRoaXMudGV4dERpbWVuc2lvbkNhbGN1bGF0b3IuZ2V0TWF4RGltZW5zaW9uKFt0aGlzLnRpdGxlXSx0aGlzLmF4aXNDb25maWcudGl0bGVGb250U2l6ZSksaT1uLmhlaWdodCt0aGlzLmF4aXNDb25maWcudGl0bGVQYWRkaW5nKjI7dGhpcy50aXRsZVRleHRIZWlnaHQ9bi5oZWlnaHQsaTw9ciYmKHItPWksdGhpcy5zaG93VGl0bGU9ITApfXRoaXMuYm91bmRpbmdSZWN0LndpZHRoPWUud2lkdGgtcix0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQ9ZS5oZWlnaHR9Y2FsY3VsYXRlU3BhY2UoZSl7cmV0dXJuIHRoaXMuYXhpc1Bvc2l0aW9uPT09ImxlZnQifHx0aGlzLmF4aXNQb3NpdGlvbj09PSJyaWdodCI/dGhpcy5jYWxjdWxhdGVTcGFjZUlmRHJhd25WZXJ0aWNhbChlKTp0aGlzLmNhbGN1bGF0ZVNwYWNlSWZEcmF3bkhvcml6b250YWxseShlKSx0aGlzLnJlY2FsY3VsYXRlU2NhbGUoKSx7d2lkdGg6dGhpcy5ib3VuZGluZ1JlY3Qud2lkdGgsaGVpZ2h0OnRoaXMuYm91bmRpbmdSZWN0LmhlaWdodH19c2V0Qm91bmRpbmdCb3hYWShlKXt0aGlzLmJvdW5kaW5nUmVjdC54PWUueCx0aGlzLmJvdW5kaW5nUmVjdC55PWUueX1nZXREcmF3YWJsZUVsZW1lbnRzRm9yTGVmdEF4aXMoKXtsZXQgZT1bXTtpZih0aGlzLnNob3dBeGlzTGluZSl7bGV0IHI9dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aC10aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aC8yO2UucHVzaCh7dHlwZToicGF0aCIsZ3JvdXBUZXh0czpbImxlZnQtYXhpcyIsImF4aXNsLWxpbmUiXSxkYXRhOlt7cGF0aDpgTSAke3J9LCR7dGhpcy5ib3VuZGluZ1JlY3QueX0gTCAke3J9LCR7dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHR9IGAsc3Ryb2tlRmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5heGlzTGluZUNvbG9yLHN0cm9rZVdpZHRoOnRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRofV19KX1pZih0aGlzLnNob3dMYWJlbCYmZS5wdXNoKHt0eXBlOiJ0ZXh0Iixncm91cFRleHRzOlsibGVmdC1heGlzIiwibGFiZWwiXSxkYXRhOnRoaXMuZ2V0VGlja1ZhbHVlcygpLm1hcChyPT4oe3RleHQ6ci50b1N0cmluZygpLHg6dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aC0odGhpcy5zaG93TGFiZWw/dGhpcy5heGlzQ29uZmlnLmxhYmVsUGFkZGluZzowKS0odGhpcy5zaG93VGljaz90aGlzLmF4aXNDb25maWcudGlja0xlbmd0aDowKS0odGhpcy5zaG93QXhpc0xpbmU/dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGg6MCkseTp0aGlzLmdldFNjYWxlVmFsdWUociksZmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5sYWJlbENvbG9yLGZvbnRTaXplOnRoaXMuYXhpc0NvbmZpZy5sYWJlbEZvbnRTaXplLHJvdGF0aW9uOjAsdmVydGljYWxQb3M6Im1pZGRsZSIsaG9yaXpvbnRhbFBvczoicmlnaHQifSkpfSksdGhpcy5zaG93VGljayl7bGV0IHI9dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aC0odGhpcy5zaG93QXhpc0xpbmU/dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGg6MCk7ZS5wdXNoKHt0eXBlOiJwYXRoIixncm91cFRleHRzOlsibGVmdC1heGlzIiwidGlja3MiXSxkYXRhOnRoaXMuZ2V0VGlja1ZhbHVlcygpLm1hcChuPT4oe3BhdGg6YE0gJHtyfSwke3RoaXMuZ2V0U2NhbGVWYWx1ZShuKX0gTCAke3ItdGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGh9LCR7dGhpcy5nZXRTY2FsZVZhbHVlKG4pfWAsc3Ryb2tlRmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy50aWNrQ29sb3Isc3Ryb2tlV2lkdGg6dGhpcy5heGlzQ29uZmlnLnRpY2tXaWR0aH0pKX0pfXJldHVybiB0aGlzLnNob3dUaXRsZSYmZS5wdXNoKHt0eXBlOiJ0ZXh0Iixncm91cFRleHRzOlsibGVmdC1heGlzIiwidGl0bGUiXSxkYXRhOlt7dGV4dDp0aGlzLnRpdGxlLHg6dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmF4aXNDb25maWcudGl0bGVQYWRkaW5nLHk6dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQvMixmaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLnRpdGxlQ29sb3IsZm9udFNpemU6dGhpcy5heGlzQ29uZmlnLnRpdGxlRm9udFNpemUscm90YXRpb246MjcwLHZlcnRpY2FsUG9zOiJ0b3AiLGhvcml6b250YWxQb3M6ImNlbnRlciJ9XX0pLGV9Z2V0RHJhd2FibGVFbGVtZW50c0ZvckJvdHRvbUF4aXMoKXtsZXQgZT1bXTtpZih0aGlzLnNob3dBeGlzTGluZSl7bGV0IHI9dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aC8yO2UucHVzaCh7dHlwZToicGF0aCIsZ3JvdXBUZXh0czpbImJvdHRvbS1heGlzIiwiYXhpcy1saW5lIl0sZGF0YTpbe3BhdGg6YE0gJHt0aGlzLmJvdW5kaW5nUmVjdC54fSwke3J9IEwgJHt0aGlzLmJvdW5kaW5nUmVjdC54K3RoaXMuYm91bmRpbmdSZWN0LndpZHRofSwke3J9YCxzdHJva2VGaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLmF4aXNMaW5lQ29sb3Isc3Ryb2tlV2lkdGg6dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGh9XX0pfWlmKHRoaXMuc2hvd0xhYmVsJiZlLnB1c2goe3R5cGU6InRleHQiLGdyb3VwVGV4dHM6WyJib3R0b20tYXhpcyIsImxhYmVsIl0sZGF0YTp0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAocj0+KHt0ZXh0OnIudG9TdHJpbmcoKSx4OnRoaXMuZ2V0U2NhbGVWYWx1ZShyKSx5OnRoaXMuYm91bmRpbmdSZWN0LnkrdGhpcy5heGlzQ29uZmlnLmxhYmVsUGFkZGluZysodGhpcy5zaG93VGljaz90aGlzLmF4aXNDb25maWcudGlja0xlbmd0aDowKSsodGhpcy5zaG93QXhpc0xpbmU/dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGg6MCksZmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5sYWJlbENvbG9yLGZvbnRTaXplOnRoaXMuYXhpc0NvbmZpZy5sYWJlbEZvbnRTaXplLHJvdGF0aW9uOjAsdmVydGljYWxQb3M6InRvcCIsaG9yaXpvbnRhbFBvczoiY2VudGVyIn0pKX0pLHRoaXMuc2hvd1RpY2spe2xldCByPXRoaXMuYm91bmRpbmdSZWN0LnkrKHRoaXMuc2hvd0F4aXNMaW5lP3RoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoOjApO2UucHVzaCh7dHlwZToicGF0aCIsZ3JvdXBUZXh0czpbImJvdHRvbS1heGlzIiwidGlja3MiXSxkYXRhOnRoaXMuZ2V0VGlja1ZhbHVlcygpLm1hcChuPT4oe3BhdGg6YE0gJHt0aGlzLmdldFNjYWxlVmFsdWUobil9LCR7cn0gTCAke3RoaXMuZ2V0U2NhbGVWYWx1ZShuKX0sJHtyK3RoaXMuYXhpc0NvbmZpZy50aWNrTGVuZ3RofWAsc3Ryb2tlRmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy50aWNrQ29sb3Isc3Ryb2tlV2lkdGg6dGhpcy5heGlzQ29uZmlnLnRpY2tXaWR0aH0pKX0pfXJldHVybiB0aGlzLnNob3dUaXRsZSYmZS5wdXNoKHt0eXBlOiJ0ZXh0Iixncm91cFRleHRzOlsiYm90dG9tLWF4aXMiLCJ0aXRsZSJdLGRhdGE6W3t0ZXh0OnRoaXMudGl0bGUseDp0aGlzLnJhbmdlWzBdKyh0aGlzLnJhbmdlWzFdLXRoaXMucmFuZ2VbMF0pLzIseTp0aGlzLmJvdW5kaW5nUmVjdC55K3RoaXMuYm91bmRpbmdSZWN0LmhlaWdodC10aGlzLmF4aXNDb25maWcudGl0bGVQYWRkaW5nLXRoaXMudGl0bGVUZXh0SGVpZ2h0LGZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcudGl0bGVDb2xvcixmb250U2l6ZTp0aGlzLmF4aXNDb25maWcudGl0bGVGb250U2l6ZSxyb3RhdGlvbjowLHZlcnRpY2FsUG9zOiJ0b3AiLGhvcml6b250YWxQb3M6ImNlbnRlciJ9XX0pLGV9Z2V0RHJhd2FibGVFbGVtZW50c0ZvclRvcEF4aXMoKXtsZXQgZT1bXTtpZih0aGlzLnNob3dBeGlzTGluZSl7bGV0IHI9dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQtdGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgvMjtlLnB1c2goe3R5cGU6InBhdGgiLGdyb3VwVGV4dHM6WyJ0b3AtYXhpcyIsImF4aXMtbGluZSJdLGRhdGE6W3twYXRoOmBNICR7dGhpcy5ib3VuZGluZ1JlY3QueH0sJHtyfSBMICR7dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aH0sJHtyfWAsc3Ryb2tlRmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5heGlzTGluZUNvbG9yLHN0cm9rZVdpZHRoOnRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRofV19KX1pZih0aGlzLnNob3dMYWJlbCYmZS5wdXNoKHt0eXBlOiJ0ZXh0Iixncm91cFRleHRzOlsidG9wLWF4aXMiLCJsYWJlbCJdLGRhdGE6dGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKHI9Pih7dGV4dDpyLnRvU3RyaW5nKCkseDp0aGlzLmdldFNjYWxlVmFsdWUocikseTp0aGlzLmJvdW5kaW5nUmVjdC55Kyh0aGlzLnNob3dUaXRsZT90aGlzLnRpdGxlVGV4dEhlaWdodCt0aGlzLmF4aXNDb25maWcudGl0bGVQYWRkaW5nKjI6MCkrdGhpcy5heGlzQ29uZmlnLmxhYmVsUGFkZGluZyxmaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLmxhYmVsQ29sb3IsZm9udFNpemU6dGhpcy5heGlzQ29uZmlnLmxhYmVsRm9udFNpemUscm90YXRpb246MCx2ZXJ0aWNhbFBvczoidG9wIixob3Jpem9udGFsUG9zOiJjZW50ZXIifSkpfSksdGhpcy5zaG93VGljayl7bGV0IHI9dGhpcy5ib3VuZGluZ1JlY3QueTtlLnB1c2goe3R5cGU6InBhdGgiLGdyb3VwVGV4dHM6WyJ0b3AtYXhpcyIsInRpY2tzIl0sZGF0YTp0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAobj0+KHtwYXRoOmBNICR7dGhpcy5nZXRTY2FsZVZhbHVlKG4pfSwke3IrdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0LSh0aGlzLnNob3dBeGlzTGluZT90aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aDowKX0gTCAke3RoaXMuZ2V0U2NhbGVWYWx1ZShuKX0sJHtyK3RoaXMuYm91bmRpbmdSZWN0LmhlaWdodC10aGlzLmF4aXNDb25maWcudGlja0xlbmd0aC0odGhpcy5zaG93QXhpc0xpbmU/dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGg6MCl9YCxzdHJva2VGaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLnRpY2tDb2xvcixzdHJva2VXaWR0aDp0aGlzLmF4aXNDb25maWcudGlja1dpZHRofSkpfSl9cmV0dXJuIHRoaXMuc2hvd1RpdGxlJiZlLnB1c2goe3R5cGU6InRleHQiLGdyb3VwVGV4dHM6WyJ0b3AtYXhpcyIsInRpdGxlIl0sZGF0YTpbe3RleHQ6dGhpcy50aXRsZSx4OnRoaXMuYm91bmRpbmdSZWN0LngrdGhpcy5ib3VuZGluZ1JlY3Qud2lkdGgvMix5OnRoaXMuYm91bmRpbmdSZWN0LnkrdGhpcy5heGlzQ29uZmlnLnRpdGxlUGFkZGluZyxmaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLnRpdGxlQ29sb3IsZm9udFNpemU6dGhpcy5heGlzQ29uZmlnLnRpdGxlRm9udFNpemUscm90YXRpb246MCx2ZXJ0aWNhbFBvczoidG9wIixob3Jpem9udGFsUG9zOiJjZW50ZXIifV19KSxlfWdldERyYXdhYmxlRWxlbWVudHMoKXtpZih0aGlzLmF4aXNQb3NpdGlvbj09PSJsZWZ0IilyZXR1cm4gdGhpcy5nZXREcmF3YWJsZUVsZW1lbnRzRm9yTGVmdEF4aXMoKTtpZih0aGlzLmF4aXNQb3NpdGlvbj09PSJyaWdodCIpdGhyb3cgRXJyb3IoIkRyYXdpbmcgb2YgcmlnaHQgYXhpcyBpcyBub3QgaW1wbGVtZW50ZWQiKTtyZXR1cm4gdGhpcy5heGlzUG9zaXRpb249PT0iYm90dG9tIj90aGlzLmdldERyYXdhYmxlRWxlbWVudHNGb3JCb3R0b21BeGlzKCk6dGhpcy5heGlzUG9zaXRpb249PT0idG9wIj90aGlzLmdldERyYXdhYmxlRWxlbWVudHNGb3JUb3BBeGlzKCk6W119fX0pO3ZhciBBRSxRaGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwcigpO3V0KCk7aE8oKTtBRT1jbGFzcyBleHRlbmRzIGpne3N0YXRpY3tvKHRoaXMsIkJhbmRBeGlzIil9Y29uc3RydWN0b3IoZSxyLG4saSxhKXtzdXBlcihlLGksYSxyKSx0aGlzLmNhdGVnb3JpZXM9bix0aGlzLnNjYWxlPVZwKCkuZG9tYWluKHRoaXMuY2F0ZWdvcmllcykucmFuZ2UodGhpcy5nZXRSYW5nZSgpKX1zZXRSYW5nZShlKXtzdXBlci5zZXRSYW5nZShlKX1yZWNhbGN1bGF0ZVNjYWxlKCl7dGhpcy5zY2FsZT1WcCgpLmRvbWFpbih0aGlzLmNhdGVnb3JpZXMpLnJhbmdlKHRoaXMuZ2V0UmFuZ2UoKSkucGFkZGluZ0lubmVyKDEpLnBhZGRpbmdPdXRlcigwKS5hbGlnbiguNSksWS50cmFjZSgiQmFuZEF4aXMgYXhpcyBmaW5hbCBjYXRlZ29yaWVzLCByYW5nZTogIix0aGlzLmNhdGVnb3JpZXMsdGhpcy5nZXRSYW5nZSgpKX1nZXRUaWNrVmFsdWVzKCl7cmV0dXJuIHRoaXMuY2F0ZWdvcmllc31nZXRTY2FsZVZhbHVlKGUpe3JldHVybiB0aGlzLnNjYWxlKGUpPz90aGlzLmdldFJhbmdlKClbMF19fX0pO3ZhciBfRSxaaGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwcigpO2hPKCk7X0U9Y2xhc3MgZXh0ZW5kcyBqZ3tzdGF0aWN7byh0aGlzLCJMaW5lYXJBeGlzIil9Y29uc3RydWN0b3IoZSxyLG4saSxhKXtzdXBlcihlLGksYSxyKSx0aGlzLmRvbWFpbj1uLHRoaXMuc2NhbGU9Q2woKS5kb21haW4odGhpcy5kb21haW4pLnJhbmdlKHRoaXMuZ2V0UmFuZ2UoKSl9Z2V0VGlja1ZhbHVlcygpe3JldHVybiB0aGlzLnNjYWxlLnRpY2tzKCl9cmVjYWxjdWxhdGVTY2FsZSgpe2xldCBlPVsuLi50aGlzLmRvbWFpbl07dGhpcy5heGlzUG9zaXRpb249PT0ibGVmdCImJmUucmV2ZXJzZSgpLHRoaXMuc2NhbGU9Q2woKS5kb21haW4oZSkucmFuZ2UodGhpcy5nZXRSYW5nZSgpKX1nZXRTY2FsZVZhbHVlKGUpe3JldHVybiB0aGlzLnNjYWxlKGUpfX19KTtmdW5jdGlvbiBmTyh0LGUscixuKXtsZXQgaT1uZXcgWGcobik7cmV0dXJuIFNFKHQpP25ldyBBRShlLHIsdC5jYXRlZ29yaWVzLHQudGl0bGUsaSk6bmV3IF9FKGUscixbdC5taW4sdC5tYXhdLHQudGl0bGUsaSl9dmFyIEpoZT1NKCgpPT57InVzZSBzdHJpY3QiO0NFKCk7dU8oKTtRaGUoKTtaaGUoKTtvKGZPLCJnZXRBeGlzIil9KTtmdW5jdGlvbiBlZmUodCxlLHIsbil7bGV0IGk9bmV3IFhnKG4pO3JldHVybiBuZXcgZE8oaSx0LGUscil9dmFyIGRPLHRmZT1NKCgpPT57InVzZSBzdHJpY3QiO3VPKCk7ZE89Y2xhc3N7Y29uc3RydWN0b3IoZSxyLG4saSl7dGhpcy50ZXh0RGltZW5zaW9uQ2FsY3VsYXRvcj1lO3RoaXMuY2hhcnRDb25maWc9cjt0aGlzLmNoYXJ0RGF0YT1uO3RoaXMuY2hhcnRUaGVtZUNvbmZpZz1pO3RoaXMuYm91bmRpbmdSZWN0PXt4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuc2hvd0NoYXJ0VGl0bGU9ITF9c3RhdGlje28odGhpcywiQ2hhcnRUaXRsZSIpfXNldEJvdW5kaW5nQm94WFkoZSl7dGhpcy5ib3VuZGluZ1JlY3QueD1lLngsdGhpcy5ib3VuZGluZ1JlY3QueT1lLnl9Y2FsY3VsYXRlU3BhY2UoZSl7bGV0IHI9dGhpcy50ZXh0RGltZW5zaW9uQ2FsY3VsYXRvci5nZXRNYXhEaW1lbnNpb24oW3RoaXMuY2hhcnREYXRhLnRpdGxlXSx0aGlzLmNoYXJ0Q29uZmlnLnRpdGxlRm9udFNpemUpLG49TWF0aC5tYXgoci53aWR0aCxlLndpZHRoKSxpPXIuaGVpZ2h0KzIqdGhpcy5jaGFydENvbmZpZy50aXRsZVBhZGRpbmc7cmV0dXJuIHIud2lkdGg8PW4mJnIuaGVpZ2h0PD1pJiZ0aGlzLmNoYXJ0Q29uZmlnLnNob3dUaXRsZSYmdGhpcy5jaGFydERhdGEudGl0bGUmJih0aGlzLmJvdW5kaW5nUmVjdC53aWR0aD1uLHRoaXMuYm91bmRpbmdSZWN0LmhlaWdodD1pLHRoaXMuc2hvd0NoYXJ0VGl0bGU9ITApLHt3aWR0aDp0aGlzLmJvdW5kaW5nUmVjdC53aWR0aCxoZWlnaHQ6dGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0fX1nZXREcmF3YWJsZUVsZW1lbnRzKCl7bGV0IGU9W107cmV0dXJuIHRoaXMuc2hvd0NoYXJ0VGl0bGUmJmUucHVzaCh7Z3JvdXBUZXh0czpbImNoYXJ0LXRpdGxlIl0sdHlwZToidGV4dCIsZGF0YTpbe2ZvbnRTaXplOnRoaXMuY2hhcnRDb25maWcudGl0bGVGb250U2l6ZSx0ZXh0OnRoaXMuY2hhcnREYXRhLnRpdGxlLHZlcnRpY2FsUG9zOiJtaWRkbGUiLGhvcml6b250YWxQb3M6ImNlbnRlciIseDp0aGlzLmJvdW5kaW5nUmVjdC54K3RoaXMuYm91bmRpbmdSZWN0LndpZHRoLzIseTp0aGlzLmJvdW5kaW5nUmVjdC55K3RoaXMuYm91bmRpbmdSZWN0LmhlaWdodC8yLGZpbGw6dGhpcy5jaGFydFRoZW1lQ29uZmlnLnRpdGxlQ29sb3Iscm90YXRpb246MH1dfSksZX19O28oZWZlLCJnZXRDaGFydFRpdGxlQ29tcG9uZW50Iil9KTt2YXIgTEUscmZlPU0oKCk9PnsidXNlIHN0cmljdCI7cHIoKTtMRT1jbGFzc3tjb25zdHJ1Y3RvcihlLHIsbixpLGEpe3RoaXMucGxvdERhdGE9ZTt0aGlzLnhBeGlzPXI7dGhpcy55QXhpcz1uO3RoaXMub3JpZW50YXRpb249aTt0aGlzLnBsb3RJbmRleD1hfXN0YXRpY3tvKHRoaXMsIkxpbmVQbG90Iil9Z2V0RHJhd2FibGVFbGVtZW50KCl7bGV0IGU9dGhpcy5wbG90RGF0YS5kYXRhLm1hcChuPT5bdGhpcy54QXhpcy5nZXRTY2FsZVZhbHVlKG5bMF0pLHRoaXMueUF4aXMuZ2V0U2NhbGVWYWx1ZShuWzFdKV0pLHI7cmV0dXJuIHRoaXMub3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCI/cj1ucygpLnkobj0+blswXSkueChuPT5uWzFdKShlKTpyPW5zKCkueChuPT5uWzBdKS55KG49Pm5bMV0pKGUpLHI/W3tncm91cFRleHRzOlsicGxvdCIsYGxpbmUtcGxvdC0ke3RoaXMucGxvdEluZGV4fWBdLHR5cGU6InBhdGgiLGRhdGE6W3twYXRoOnIsc3Ryb2tlRmlsbDp0aGlzLnBsb3REYXRhLnN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5wbG90RGF0YS5zdHJva2VXaWR0aH1dfV06W119fX0pO3ZhciBERSxuZmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtERT1jbGFzc3tjb25zdHJ1Y3RvcihlLHIsbixpLGEscyl7dGhpcy5iYXJEYXRhPWU7dGhpcy5ib3VuZGluZ1JlY3Q9cjt0aGlzLnhBeGlzPW47dGhpcy55QXhpcz1pO3RoaXMub3JpZW50YXRpb249YTt0aGlzLnBsb3RJbmRleD1zfXN0YXRpY3tvKHRoaXMsIkJhclBsb3QiKX1nZXREcmF3YWJsZUVsZW1lbnQoKXtsZXQgZT10aGlzLmJhckRhdGEuZGF0YS5tYXAoYT0+W3RoaXMueEF4aXMuZ2V0U2NhbGVWYWx1ZShhWzBdKSx0aGlzLnlBeGlzLmdldFNjYWxlVmFsdWUoYVsxXSldKSxuPU1hdGgubWluKHRoaXMueEF4aXMuZ2V0QXhpc091dGVyUGFkZGluZygpKjIsdGhpcy54QXhpcy5nZXRUaWNrRGlzdGFuY2UoKSkqKDEtLjA1KSxpPW4vMjtyZXR1cm4gdGhpcy5vcmllbnRhdGlvbj09PSJob3Jpem9udGFsIj9be2dyb3VwVGV4dHM6WyJwbG90IixgYmFyLXBsb3QtJHt0aGlzLnBsb3RJbmRleH1gXSx0eXBlOiJyZWN0IixkYXRhOmUubWFwKGE9Pih7eDp0aGlzLmJvdW5kaW5nUmVjdC54LHk6YVswXS1pLGhlaWdodDpuLHdpZHRoOmFbMV0tdGhpcy5ib3VuZGluZ1JlY3QueCxmaWxsOnRoaXMuYmFyRGF0YS5maWxsLHN0cm9rZVdpZHRoOjAsc3Ryb2tlRmlsbDp0aGlzLmJhckRhdGEuZmlsbH0pKX1dOlt7Z3JvdXBUZXh0czpbInBsb3QiLGBiYXItcGxvdC0ke3RoaXMucGxvdEluZGV4fWBdLHR5cGU6InJlY3QiLGRhdGE6ZS5tYXAoYT0+KHt4OmFbMF0taSx5OmFbMV0sd2lkdGg6bixoZWlnaHQ6dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQtYVsxXSxmaWxsOnRoaXMuYmFyRGF0YS5maWxsLHN0cm9rZVdpZHRoOjAsc3Ryb2tlRmlsbDp0aGlzLmJhckRhdGEuZmlsbH0pKX1dfX19KTtmdW5jdGlvbiBpZmUodCxlLHIpe3JldHVybiBuZXcgcE8odCxlLHIpfXZhciBwTyxhZmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtyZmUoKTtuZmUoKTtwTz1jbGFzc3tjb25zdHJ1Y3RvcihlLHIsbil7dGhpcy5jaGFydENvbmZpZz1lO3RoaXMuY2hhcnREYXRhPXI7dGhpcy5jaGFydFRoZW1lQ29uZmlnPW47dGhpcy5ib3VuZGluZ1JlY3Q9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH19c3RhdGlje28odGhpcywiQmFzZVBsb3QiKX1zZXRBeGVzKGUscil7dGhpcy54QXhpcz1lLHRoaXMueUF4aXM9cn1zZXRCb3VuZGluZ0JveFhZKGUpe3RoaXMuYm91bmRpbmdSZWN0Lng9ZS54LHRoaXMuYm91bmRpbmdSZWN0Lnk9ZS55fWNhbGN1bGF0ZVNwYWNlKGUpe3JldHVybiB0aGlzLmJvdW5kaW5nUmVjdC53aWR0aD1lLndpZHRoLHRoaXMuYm91bmRpbmdSZWN0LmhlaWdodD1lLmhlaWdodCx7d2lkdGg6dGhpcy5ib3VuZGluZ1JlY3Qud2lkdGgsaGVpZ2h0OnRoaXMuYm91bmRpbmdSZWN0LmhlaWdodH19Z2V0RHJhd2FibGVFbGVtZW50cygpe2lmKCEodGhpcy54QXhpcyYmdGhpcy55QXhpcykpdGhyb3cgRXJyb3IoIkF4ZXMgbXVzdCBiZSBwYXNzZWQgdG8gcmVuZGVyIFBsb3RzIik7bGV0IGU9W107Zm9yKGxldFtyLG5db2YgdGhpcy5jaGFydERhdGEucGxvdHMuZW50cmllcygpKXN3aXRjaChuLnR5cGUpe2Nhc2UibGluZSI6e2xldCBpPW5ldyBMRShuLHRoaXMueEF4aXMsdGhpcy55QXhpcyx0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0T3JpZW50YXRpb24scik7ZS5wdXNoKC4uLmkuZ2V0RHJhd2FibGVFbGVtZW50KCkpfWJyZWFrO2Nhc2UiYmFyIjp7bGV0IGk9bmV3IERFKG4sdGhpcy5ib3VuZGluZ1JlY3QsdGhpcy54QXhpcyx0aGlzLnlBeGlzLHRoaXMuY2hhcnRDb25maWcuY2hhcnRPcmllbnRhdGlvbixyKTtlLnB1c2goLi4uaS5nZXREcmF3YWJsZUVsZW1lbnQoKSl9YnJlYWt9cmV0dXJuIGV9fTtvKGlmZSwiZ2V0UGxvdENvbXBvbmVudCIpfSk7dmFyIE5FLHNmZT1NKCgpPT57InVzZSBzdHJpY3QiO0poZSgpO3RmZSgpO2FmZSgpO0NFKCk7TkU9Y2xhc3N7Y29uc3RydWN0b3IoZSxyLG4saSl7dGhpcy5jaGFydENvbmZpZz1lO3RoaXMuY2hhcnREYXRhPXI7dGhpcy5jb21wb25lbnRTdG9yZT17dGl0bGU6ZWZlKGUscixuLGkpLHBsb3Q6aWZlKGUscixuKSx4QXhpczpmTyhyLnhBeGlzLGUueEF4aXMse3RpdGxlQ29sb3I6bi54QXhpc1RpdGxlQ29sb3IsbGFiZWxDb2xvcjpuLnhBeGlzTGFiZWxDb2xvcix0aWNrQ29sb3I6bi54QXhpc1RpY2tDb2xvcixheGlzTGluZUNvbG9yOm4ueEF4aXNMaW5lQ29sb3J9LGkpLHlBeGlzOmZPKHIueUF4aXMsZS55QXhpcyx7dGl0bGVDb2xvcjpuLnlBeGlzVGl0bGVDb2xvcixsYWJlbENvbG9yOm4ueUF4aXNMYWJlbENvbG9yLHRpY2tDb2xvcjpuLnlBeGlzVGlja0NvbG9yLGF4aXNMaW5lQ29sb3I6bi55QXhpc0xpbmVDb2xvcn0saSl9fXN0YXRpY3tvKHRoaXMsIk9yY2hlc3RyYXRvciIpfWNhbGN1bGF0ZVZlcnRpY2FsU3BhY2UoKXtsZXQgZT10aGlzLmNoYXJ0Q29uZmlnLndpZHRoLHI9dGhpcy5jaGFydENvbmZpZy5oZWlnaHQsbj0wLGk9MCxhPU1hdGguZmxvb3IoZSp0aGlzLmNoYXJ0Q29uZmlnLnBsb3RSZXNlcnZlZFNwYWNlUGVyY2VudC8xMDApLHM9TWF0aC5mbG9vcihyKnRoaXMuY2hhcnRDb25maWcucGxvdFJlc2VydmVkU3BhY2VQZXJjZW50LzEwMCksbD10aGlzLmNvbXBvbmVudFN0b3JlLnBsb3QuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOmEsaGVpZ2h0OnN9KTtlLT1sLndpZHRoLHItPWwuaGVpZ2h0LGw9dGhpcy5jb21wb25lbnRTdG9yZS50aXRsZS5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6dGhpcy5jaGFydENvbmZpZy53aWR0aCxoZWlnaHQ6cn0pLGk9bC5oZWlnaHQsci09bC5oZWlnaHQsdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRBeGlzUG9zaXRpb24oImJvdHRvbSIpLGw9dGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6ZSxoZWlnaHQ6cn0pLHItPWwuaGVpZ2h0LHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuc2V0QXhpc1Bvc2l0aW9uKCJsZWZ0IiksbD10aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDplLGhlaWdodDpyfSksbj1sLndpZHRoLGUtPWwud2lkdGgsZT4wJiYoYSs9ZSxlPTApLHI+MCYmKHMrPXIscj0wKSx0aGlzLmNvbXBvbmVudFN0b3JlLnBsb3QuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOmEsaGVpZ2h0OnN9KSx0aGlzLmNvbXBvbmVudFN0b3JlLnBsb3Quc2V0Qm91bmRpbmdCb3hYWSh7eDpuLHk6aX0pLHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuc2V0UmFuZ2UoW24sbithXSksdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRCb3VuZGluZ0JveFhZKHt4Om4seTppK3N9KSx0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLnNldFJhbmdlKFtpLGkrc10pLHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuc2V0Qm91bmRpbmdCb3hYWSh7eDowLHk6aX0pLHRoaXMuY2hhcnREYXRhLnBsb3RzLnNvbWUodT0+Y08odSkpJiZ0aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLnJlY2FsY3VsYXRlT3V0ZXJQYWRkaW5nVG9EcmF3QmFyKCl9Y2FsY3VsYXRlSG9yaXpvbnRhbFNwYWNlKCl7bGV0IGU9dGhpcy5jaGFydENvbmZpZy53aWR0aCxyPXRoaXMuY2hhcnRDb25maWcuaGVpZ2h0LG49MCxpPTAsYT0wLHM9TWF0aC5mbG9vcihlKnRoaXMuY2hhcnRDb25maWcucGxvdFJlc2VydmVkU3BhY2VQZXJjZW50LzEwMCksbD1NYXRoLmZsb29yKHIqdGhpcy5jaGFydENvbmZpZy5wbG90UmVzZXJ2ZWRTcGFjZVBlcmNlbnQvMTAwKSx1PXRoaXMuY29tcG9uZW50U3RvcmUucGxvdC5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6cyxoZWlnaHQ6bH0pO2UtPXUud2lkdGgsci09dS5oZWlnaHQsdT10aGlzLmNvbXBvbmVudFN0b3JlLnRpdGxlLmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDp0aGlzLmNoYXJ0Q29uZmlnLndpZHRoLGhlaWdodDpyfSksbj11LmhlaWdodCxyLT11LmhlaWdodCx0aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLnNldEF4aXNQb3NpdGlvbigibGVmdCIpLHU9dGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6ZSxoZWlnaHQ6cn0pLGUtPXUud2lkdGgsaT11LndpZHRoLHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuc2V0QXhpc1Bvc2l0aW9uKCJ0b3AiKSx1PXRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOmUsaGVpZ2h0OnJ9KSxyLT11LmhlaWdodCxhPW4rdS5oZWlnaHQsZT4wJiYocys9ZSxlPTApLHI+MCYmKGwrPXIscj0wKSx0aGlzLmNvbXBvbmVudFN0b3JlLnBsb3QuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOnMsaGVpZ2h0Omx9KSx0aGlzLmNvbXBvbmVudFN0b3JlLnBsb3Quc2V0Qm91bmRpbmdCb3hYWSh7eDppLHk6YX0pLHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuc2V0UmFuZ2UoW2ksaStzXSksdGhpcy5jb21wb25lbnRTdG9yZS55QXhpcy5zZXRCb3VuZGluZ0JveFhZKHt4OmkseTpufSksdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRSYW5nZShbYSxhK2xdKSx0aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLnNldEJvdW5kaW5nQm94WFkoe3g6MCx5OmF9KSx0aGlzLmNoYXJ0RGF0YS5wbG90cy5zb21lKGg9PmNPKGgpKSYmdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5yZWNhbGN1bGF0ZU91dGVyUGFkZGluZ1RvRHJhd0JhcigpfWNhbGN1bGF0ZVNwYWNlKCl7dGhpcy5jaGFydENvbmZpZy5jaGFydE9yaWVudGF0aW9uPT09Imhvcml6b250YWwiP3RoaXMuY2FsY3VsYXRlSG9yaXpvbnRhbFNwYWNlKCk6dGhpcy5jYWxjdWxhdGVWZXJ0aWNhbFNwYWNlKCl9Z2V0RHJhd2FibGVFbGVtZW50KCl7dGhpcy5jYWxjdWxhdGVTcGFjZSgpO2xldCBlPVtdO3RoaXMuY29tcG9uZW50U3RvcmUucGxvdC5zZXRBeGVzKHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMsdGhpcy5jb21wb25lbnRTdG9yZS55QXhpcyk7Zm9yKGxldCByIG9mIE9iamVjdC52YWx1ZXModGhpcy5jb21wb25lbnRTdG9yZSkpZS5wdXNoKC4uLnIuZ2V0RHJhd2FibGVFbGVtZW50cygpKTtyZXR1cm4gZX19fSk7dmFyIFJFLG9mZT1NKCgpPT57InVzZSBzdHJpY3QiO3NmZSgpO1JFPWNsYXNze3N0YXRpY3tvKHRoaXMsIlhZQ2hhcnRCdWlsZGVyIil9c3RhdGljIGJ1aWxkKGUscixuLGkpe3JldHVybiBuZXcgTkUoZSxyLG4saSkuZ2V0RHJhd2FibGVFbGVtZW50KCl9fX0pO2Z1bmN0aW9uIGNmZSgpe2xldCB0PXZwKCksZT1DcigpO3JldHVybiBEcyh0Lnh5Q2hhcnQsZS50aGVtZVZhcmlhYmxlcy54eUNoYXJ0KX1mdW5jdGlvbiB1ZmUoKXtsZXQgdD1DcigpO3JldHVybiBEcyh1ci54eUNoYXJ0LHQueHlDaGFydCl9ZnVuY3Rpb24gaGZlKCl7cmV0dXJue3lBeGlzOnt0eXBlOiJsaW5lYXIiLHRpdGxlOiIiLG1pbjoxLzAsbWF4Oi0xLzB9LHhBeGlzOnt0eXBlOiJiYW5kIix0aXRsZToiIixjYXRlZ29yaWVzOltdfSx0aXRsZToiIixwbG90czpbXX19ZnVuY3Rpb24geU8odCl7bGV0IGU9Q3IoKTtyZXR1cm4ga3IodC50cmltKCksZSl9ZnVuY3Rpb24gX1ZlKHQpe2xmZT10fWZ1bmN0aW9uIExWZSh0KXt0PT09Imhvcml6b250YWwiP0R4LmNoYXJ0T3JpZW50YXRpb249Imhvcml6b250YWwiOkR4LmNoYXJ0T3JpZW50YXRpb249InZlcnRpY2FsIn1mdW5jdGlvbiBEVmUodCl7aG4ueEF4aXMudGl0bGU9eU8odC50ZXh0KX1mdW5jdGlvbiBmZmUodCxlKXtobi54QXhpcz17dHlwZToibGluZWFyIix0aXRsZTpobi54QXhpcy50aXRsZSxtaW46dCxtYXg6ZX0sTUU9ITB9ZnVuY3Rpb24gTlZlKHQpe2huLnhBeGlzPXt0eXBlOiJiYW5kIix0aXRsZTpobi54QXhpcy50aXRsZSxjYXRlZ29yaWVzOnQubWFwKGU9PnlPKGUudGV4dCkpfSxNRT0hMH1mdW5jdGlvbiBSVmUodCl7aG4ueUF4aXMudGl0bGU9eU8odC50ZXh0KX1mdW5jdGlvbiBNVmUodCxlKXtobi55QXhpcz17dHlwZToibGluZWFyIix0aXRsZTpobi55QXhpcy50aXRsZSxtaW46dCxtYXg6ZX0sZ089ITB9ZnVuY3Rpb24gSVZlKHQpe2xldCBlPU1hdGgubWluKC4uLnQpLHI9TWF0aC5tYXgoLi4udCksbj1xZyhobi55QXhpcyk/aG4ueUF4aXMubWluOjEvMCxpPXFnKGhuLnlBeGlzKT9obi55QXhpcy5tYXg6LTEvMDtobi55QXhpcz17dHlwZToibGluZWFyIix0aXRsZTpobi55QXhpcy50aXRsZSxtaW46TWF0aC5taW4obixlKSxtYXg6TWF0aC5tYXgoaSxyKX19ZnVuY3Rpb24gZGZlKHQpe2xldCBlPVtdO2lmKHQubGVuZ3RoPT09MClyZXR1cm4gZTtpZighTUUpe2xldCByPXFnKGhuLnhBeGlzKT9obi54QXhpcy5taW46MS8wLG49cWcoaG4ueEF4aXMpP2huLnhBeGlzLm1heDotMS8wO2ZmZShNYXRoLm1pbihyLDEpLE1hdGgubWF4KG4sdC5sZW5ndGgpKX1pZihnT3x8SVZlKHQpLFNFKGhuLnhBeGlzKSYmKGU9aG4ueEF4aXMuY2F0ZWdvcmllcy5tYXAoKHIsbik9PltyLHRbbl1dKSkscWcoaG4ueEF4aXMpKXtsZXQgcj1obi54QXhpcy5taW4sbj1obi54QXhpcy5tYXgsaT0obi1yKS8odC5sZW5ndGgtMSksYT1bXTtmb3IobGV0IHM9cjtzPD1uO3MrPWkpYS5wdXNoKGAke3N9YCk7ZT1hLm1hcCgocyxsKT0+W3MsdFtsXV0pfXJldHVybiBlfWZ1bmN0aW9uIHBmZSh0KXtyZXR1cm4gbU9bdD09PTA/MDp0JW1PLmxlbmd0aF19ZnVuY3Rpb24gT1ZlKHQsZSl7bGV0IHI9ZGZlKGUpO2huLnBsb3RzLnB1c2goe3R5cGU6ImxpbmUiLHN0cm9rZUZpbGw6cGZlKEx4KSxzdHJva2VXaWR0aDoyLGRhdGE6cn0pLEx4Kyt9ZnVuY3Rpb24gUFZlKHQsZSl7bGV0IHI9ZGZlKGUpO2huLnBsb3RzLnB1c2goe3R5cGU6ImJhciIsZmlsbDpwZmUoTHgpLGRhdGE6cn0pLEx4Kyt9ZnVuY3Rpb24gQlZlKCl7aWYoaG4ucGxvdHMubGVuZ3RoPT09MCl0aHJvdyBFcnJvcigiTm8gUGxvdCB0byByZW5kZXIsIHBsZWFzZSBwcm92aWRlIGEgcGxvdCB3aXRoIHNvbWUgZGF0YSIpO3JldHVybiBobi50aXRsZT1KcigpLFJFLmJ1aWxkKER4LGhuLE54LGxmZSl9ZnVuY3Rpb24gRlZlKCl7cmV0dXJuIE54fWZ1bmN0aW9uIHpWZSgpe3JldHVybiBEeH12YXIgTHgsbGZlLER4LE54LGhuLG1PLE1FLGdPLEdWZSxtZmUsZ2ZlPU0oKCk9PnsidXNlIHN0cmljdCI7WmEoKTticygpO2k0KCk7aHIoKTtmcigpO0FpKCk7b2ZlKCk7Q0UoKTtMeD0wLER4PXVmZSgpLE54PWNmZSgpLGhuPWhmZSgpLG1PPU54LnBsb3RDb2xvclBhbGV0dGUuc3BsaXQoIiwiKS5tYXAodD0+dC50cmltKCkpLE1FPSExLGdPPSExO28oY2ZlLCJnZXRDaGFydERlZmF1bHRUaGVtZUNvbmZpZyIpO28odWZlLCJnZXRDaGFydERlZmF1bHRDb25maWciKTtvKGhmZSwiZ2V0Q2hhcnREZWZhdWx0RGF0YSIpO28oeU8sInRleHRTYW5pdGl6ZXIiKTtvKF9WZSwic2V0VG1wU1ZHRyIpO28oTFZlLCJzZXRPcmllbnRhdGlvbiIpO28oRFZlLCJzZXRYQXhpc1RpdGxlIik7byhmZmUsInNldFhBeGlzUmFuZ2VEYXRhIik7byhOVmUsInNldFhBeGlzQmFuZCIpO28oUlZlLCJzZXRZQXhpc1RpdGxlIik7byhNVmUsInNldFlBeGlzUmFuZ2VEYXRhIik7byhJVmUsInNldFlBeGlzUmFuZ2VGcm9tUGxvdERhdGEiKTtvKGRmZSwidHJhbnNmb3JtRGF0YVdpdGhvdXRDYXRlZ29yeSIpO28ocGZlLCJnZXRQbG90Q29sb3JGcm9tUGFsZXR0ZSIpO28oT1ZlLCJzZXRMaW5lRGF0YSIpO28oUFZlLCJzZXRCYXJEYXRhIik7byhCVmUsImdldERyYXdhYmxlRWxlbSIpO28oRlZlLCJnZXRDaGFydFRoZW1lQ29uZmlnIik7byh6VmUsImdldENoYXJ0Q29uZmlnIik7R1ZlPW8oZnVuY3Rpb24oKXtMcigpLEx4PTAsRHg9dWZlKCksaG49aGZlKCksTng9Y2ZlKCksbU89TngucGxvdENvbG9yUGFsZXR0ZS5zcGxpdCgiLCIpLm1hcCh0PT50LnRyaW0oKSksTUU9ITEsZ089ITF9LCJjbGVhciIpLG1mZT17Z2V0RHJhd2FibGVFbGVtOkJWZSxjbGVhcjpHVmUsc2V0QWNjVGl0bGU6TXIsZ2V0QWNjVGl0bGU6QnIsc2V0RGlhZ3JhbVRpdGxlOmNuLGdldERpYWdyYW1UaXRsZTpKcixnZXRBY2NEZXNjcmlwdGlvbjp6cixzZXRBY2NEZXNjcmlwdGlvbjpGcixzZXRPcmllbnRhdGlvbjpMVmUsc2V0WEF4aXNUaXRsZTpEVmUsc2V0WEF4aXNSYW5nZURhdGE6ZmZlLHNldFhBeGlzQmFuZDpOVmUsc2V0WUF4aXNUaXRsZTpSVmUsc2V0WUF4aXNSYW5nZURhdGE6TVZlLHNldExpbmVEYXRhOk9WZSxzZXRCYXJEYXRhOlBWZSxzZXRUbXBTVkdHOl9WZSxnZXRDaGFydFRoZW1lQ29uZmlnOkZWZSxnZXRDaGFydENvbmZpZzp6VmV9fSk7dmFyICRWZSx5ZmUsdmZlPU0oKCk9PnsidXNlIHN0cmljdCI7dXQoKTtlaCgpO2FpKCk7JFZlPW8oKHQsZSxyLG4pPT57bGV0IGk9bi5kYixhPWkuZ2V0Q2hhcnRUaGVtZUNvbmZpZygpLHM9aS5nZXRDaGFydENvbmZpZygpO2Z1bmN0aW9uIGwodil7cmV0dXJuIHY9PT0idG9wIj8idGV4dC1iZWZvcmUtZWRnZSI6Im1pZGRsZSJ9byhsLCJnZXREb21pbmFudEJhc2VMaW5lIik7ZnVuY3Rpb24gdSh2KXtyZXR1cm4gdj09PSJsZWZ0Ij8ic3RhcnQiOnY9PT0icmlnaHQiPyJlbmQiOiJtaWRkbGUifW8odSwiZ2V0VGV4dEFuY2hvciIpO2Z1bmN0aW9uIGgodil7cmV0dXJuYHRyYW5zbGF0ZSgke3YueH0sICR7di55fSkgcm90YXRlKCR7di5yb3RhdGlvbnx8MH0pYH1vKGgsImdldFRleHRUcmFuc2Zvcm1hdGlvbiIpLFkuZGVidWcoYFJlbmRlcmluZyB4eWNoYXJ0IGNoYXJ0CmArdCk7bGV0IGY9VmEoZSksZD1mLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibWFpbiIpLHA9ZC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ3aWR0aCIscy53aWR0aCkuYXR0cigiaGVpZ2h0IixzLmhlaWdodCkuYXR0cigiY2xhc3MiLCJiYWNrZ3JvdW5kIik7WnIoZixzLmhlaWdodCxzLndpZHRoLCEwKSxmLmF0dHIoInZpZXdCb3giLGAwIDAgJHtzLndpZHRofSAke3MuaGVpZ2h0fWApLHAuYXR0cigiZmlsbCIsYS5iYWNrZ3JvdW5kQ29sb3IpLGkuc2V0VG1wU1ZHRyhmLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibWVybWFpZC10bXAtZ3JvdXAiKSk7bGV0IG09aS5nZXREcmF3YWJsZUVsZW0oKSxnPXt9O2Z1bmN0aW9uIHkodil7bGV0IHg9ZCxiPSIiO2ZvcihsZXRbd11vZiB2LmVudHJpZXMoKSl7bGV0IF89ZDt3PjAmJmdbYl0mJihfPWdbYl0pLGIrPXZbd10seD1nW2JdLHh8fCh4PWdbYl09Xy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsdlt3XSkpfXJldHVybiB4fW8oeSwiZ2V0R3JvdXAiKTtmb3IobGV0IHYgb2YgbSl7aWYodi5kYXRhLmxlbmd0aD09PTApY29udGludWU7bGV0IHg9eSh2Lmdyb3VwVGV4dHMpO3N3aXRjaCh2LnR5cGUpe2Nhc2UicmVjdCI6eC5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKHYuZGF0YSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IixiPT5iLngpLmF0dHIoInkiLGI9PmIueSkuYXR0cigid2lkdGgiLGI9PmIud2lkdGgpLmF0dHIoImhlaWdodCIsYj0+Yi5oZWlnaHQpLmF0dHIoImZpbGwiLGI9PmIuZmlsbCkuYXR0cigic3Ryb2tlIixiPT5iLnN0cm9rZUZpbGwpLmF0dHIoInN0cm9rZS13aWR0aCIsYj0+Yi5zdHJva2VXaWR0aCk7YnJlYWs7Y2FzZSJ0ZXh0Ijp4LnNlbGVjdEFsbCgidGV4dCIpLmRhdGEodi5kYXRhKS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoImZpbGwiLGI9PmIuZmlsbCkuYXR0cigiZm9udC1zaXplIixiPT5iLmZvbnRTaXplKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsYj0+bChiLnZlcnRpY2FsUG9zKSkuYXR0cigidGV4dC1hbmNob3IiLGI9PnUoYi5ob3Jpem9udGFsUG9zKSkuYXR0cigidHJhbnNmb3JtIixiPT5oKGIpKS50ZXh0KGI9PmIudGV4dCk7YnJlYWs7Y2FzZSJwYXRoIjp4LnNlbGVjdEFsbCgicGF0aCIpLmRhdGEodi5kYXRhKS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGI9PmIucGF0aCkuYXR0cigiZmlsbCIsYj0+Yi5maWxsP2IuZmlsbDoibm9uZSIpLmF0dHIoInN0cm9rZSIsYj0+Yi5zdHJva2VGaWxsKS5hdHRyKCJzdHJva2Utd2lkdGgiLGI9PmIuc3Ryb2tlV2lkdGgpO2JyZWFrfX19LCJkcmF3IikseWZlPXtkcmF3OiRWZX19KTt2YXIgeGZlPXt9O3ZyKHhmZSx7ZGlhZ3JhbTooKT0+VlZlfSk7dmFyIFZWZSxiZmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtLaGUoKTtnZmUoKTt2ZmUoKTtWVmU9e3BhcnNlcjpqaGUsZGI6bWZlLHJlbmRlcmVyOnlmZX19KTt2YXIgdk8sa2ZlLEVmZT1NKCgpPT57InVzZSBzdHJpY3QiO3ZPPWZ1bmN0aW9uKCl7dmFyIHQ9byhmdW5jdGlvbihvZSxLLGVlLEope2ZvcihlZT1lZXx8e30sSj1vZS5sZW5ndGg7Si0tO2VlW29lW0pdXT1LKTtyZXR1cm4gZWV9LCJvIiksZT1bMSwzXSxyPVsxLDRdLG49WzEsNV0saT1bMSw2XSxhPVs1LDYsOCw5LDExLDEzLDMxLDMyLDMzLDM0LDM1LDM2LDQ0LDYyLDYzXSxzPVsxLDE4XSxsPVsyLDddLHU9WzEsMjJdLGg9WzEsMjNdLGY9WzEsMjRdLGQ9WzEsMjVdLHA9WzEsMjZdLG09WzEsMjddLGc9WzEsMjBdLHk9WzEsMjhdLHY9WzEsMjldLHg9WzYyLDYzXSxiPVs1LDgsOSwxMSwxMywzMSwzMiwzMywzNCwzNSwzNiw0NCw1MSw1Myw2Miw2M10sdz1bMSw0N10sXz1bMSw0OF0sVD1bMSw0OV0sRT1bMSw1MF0sTD1bMSw1MV0sUz1bMSw1Ml0sQT1bMSw1M10sST1bNTMsNTRdLEQ9WzEsNjRdLGs9WzEsNjBdLFI9WzEsNjFdLEM9WzEsNjJdLE89WzEsNjNdLE49WzEsNjVdLFA9WzEsNjldLEY9WzEsNzBdLEI9WzEsNjddLEc9WzEsNjhdLHo9WzUsOCw5LDExLDEzLDMxLDMyLDMzLDM0LDM1LDM2LDQ0LDYyLDYzXSxXPXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGRpcmVjdGl2ZTo0LE5FV0xJTkU6NSxSRDo2LGRpYWdyYW06NyxFT0Y6OCxhY2NfdGl0bGU6OSxhY2NfdGl0bGVfdmFsdWU6MTAsYWNjX2Rlc2NyOjExLGFjY19kZXNjcl92YWx1ZToxMixhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjEzLHJlcXVpcmVtZW50RGVmOjE0LGVsZW1lbnREZWY6MTUscmVsYXRpb25zaGlwRGVmOjE2LHJlcXVpcmVtZW50VHlwZToxNyxyZXF1aXJlbWVudE5hbWU6MTgsU1RSVUNUX1NUQVJUOjE5LHJlcXVpcmVtZW50Qm9keToyMCxJRDoyMSxDT0xPTlNFUDoyMixpZDoyMyxURVhUOjI0LHRleHQ6MjUsUklTSzoyNixyaXNrTGV2ZWw6MjcsVkVSSUZZTVRIRDoyOCx2ZXJpZnlUeXBlOjI5LFNUUlVDVF9TVE9QOjMwLFJFUVVJUkVNRU5UOjMxLEZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ6MzIsSU5URVJGQUNFX1JFUVVJUkVNRU5UOjMzLFBFUkZPUk1BTkNFX1JFUVVJUkVNRU5UOjM0LFBIWVNJQ0FMX1JFUVVJUkVNRU5UOjM1LERFU0lHTl9DT05TVFJBSU5UOjM2LExPV19SSVNLOjM3LE1FRF9SSVNLOjM4LEhJR0hfUklTSzozOSxWRVJJRllfQU5BTFlTSVM6NDAsVkVSSUZZX0RFTU9OU1RSQVRJT046NDEsVkVSSUZZX0lOU1BFQ1RJT046NDIsVkVSSUZZX1RFU1Q6NDMsRUxFTUVOVDo0NCxlbGVtZW50TmFtZTo0NSxlbGVtZW50Qm9keTo0NixUWVBFOjQ3LHR5cGU6NDgsRE9DUkVGOjQ5LHJlZjo1MCxFTkRfQVJST1dfTDo1MSxyZWxhdGlvbnNoaXA6NTIsTElORTo1MyxFTkRfQVJST1dfUjo1NCxDT05UQUlOUzo1NSxDT1BJRVM6NTYsREVSSVZFUzo1NyxTQVRJU0ZJRVM6NTgsVkVSSUZJRVM6NTksUkVGSU5FUzo2MCxUUkFDRVM6NjEsdW5xU3RyaW5nOjYyLHFTdHJpbmc6NjMsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDU6Ik5FV0xJTkUiLDY6IlJEIiw4OiJFT0YiLDk6ImFjY190aXRsZSIsMTA6ImFjY190aXRsZV92YWx1ZSIsMTE6ImFjY19kZXNjciIsMTI6ImFjY19kZXNjcl92YWx1ZSIsMTM6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDE5OiJTVFJVQ1RfU1RBUlQiLDIxOiJJRCIsMjI6IkNPTE9OU0VQIiwyNDoiVEVYVCIsMjY6IlJJU0siLDI4OiJWRVJJRllNVEhEIiwzMDoiU1RSVUNUX1NUT1AiLDMxOiJSRVFVSVJFTUVOVCIsMzI6IkZVTkNUSU9OQUxfUkVRVUlSRU1FTlQiLDMzOiJJTlRFUkZBQ0VfUkVRVUlSRU1FTlQiLDM0OiJQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVCIsMzU6IlBIWVNJQ0FMX1JFUVVJUkVNRU5UIiwzNjoiREVTSUdOX0NPTlNUUkFJTlQiLDM3OiJMT1dfUklTSyIsMzg6Ik1FRF9SSVNLIiwzOToiSElHSF9SSVNLIiw0MDoiVkVSSUZZX0FOQUxZU0lTIiw0MToiVkVSSUZZX0RFTU9OU1RSQVRJT04iLDQyOiJWRVJJRllfSU5TUEVDVElPTiIsNDM6IlZFUklGWV9URVNUIiw0NDoiRUxFTUVOVCIsNDc6IlRZUEUiLDQ5OiJET0NSRUYiLDUxOiJFTkRfQVJST1dfTCIsNTM6IkxJTkUiLDU0OiJFTkRfQVJST1dfUiIsNTU6IkNPTlRBSU5TIiw1NjoiQ09QSUVTIiw1NzoiREVSSVZFUyIsNTg6IlNBVElTRklFUyIsNTk6IlZFUklGSUVTIiw2MDoiUkVGSU5FUyIsNjE6IlRSQUNFUyIsNjI6InVucVN0cmluZyIsNjM6InFTdHJpbmcifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzMsMl0sWzMsNF0sWzQsMl0sWzQsMl0sWzQsMV0sWzcsMF0sWzcsMl0sWzcsMl0sWzcsMl0sWzcsMl0sWzcsMl0sWzE0LDVdLFsyMCw1XSxbMjAsNV0sWzIwLDVdLFsyMCw1XSxbMjAsMl0sWzIwLDFdLFsxNywxXSxbMTcsMV0sWzE3LDFdLFsxNywxXSxbMTcsMV0sWzE3LDFdLFsyNywxXSxbMjcsMV0sWzI3LDFdLFsyOSwxXSxbMjksMV0sWzI5LDFdLFsyOSwxXSxbMTUsNV0sWzQ2LDVdLFs0Niw1XSxbNDYsMl0sWzQ2LDFdLFsxNiw1XSxbMTYsNV0sWzUyLDFdLFs1MiwxXSxbNTIsMV0sWzUyLDFdLFs1MiwxXSxbNTIsMV0sWzUyLDFdLFsxOCwxXSxbMTgsMV0sWzIzLDFdLFsyMywxXSxbMjUsMV0sWzI1LDFdLFs0NSwxXSxbNDUsMV0sWzQ4LDFdLFs0OCwxXSxbNTAsMV0sWzUwLDFdXSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oSyxlZSxKLEgscSxRLGFlKXt2YXIgdWU9US5sZW5ndGgtMTtzd2l0Y2gocSl7Y2FzZSA0OnRoaXMuJD1RW3VlXS50cmltKCksSC5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgNTpjYXNlIDY6dGhpcy4kPVFbdWVdLnRyaW0oKSxILnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSA3OnRoaXMuJD1bXTticmVhaztjYXNlIDEzOkguYWRkUmVxdWlyZW1lbnQoUVt1ZS0zXSxRW3VlLTRdKTticmVhaztjYXNlIDE0Okguc2V0TmV3UmVxSWQoUVt1ZS0yXSk7YnJlYWs7Y2FzZSAxNTpILnNldE5ld1JlcVRleHQoUVt1ZS0yXSk7YnJlYWs7Y2FzZSAxNjpILnNldE5ld1JlcVJpc2soUVt1ZS0yXSk7YnJlYWs7Y2FzZSAxNzpILnNldE5ld1JlcVZlcmlmeU1ldGhvZChRW3VlLTJdKTticmVhaztjYXNlIDIwOnRoaXMuJD1ILlJlcXVpcmVtZW50VHlwZS5SRVFVSVJFTUVOVDticmVhaztjYXNlIDIxOnRoaXMuJD1ILlJlcXVpcmVtZW50VHlwZS5GVU5DVElPTkFMX1JFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjI6dGhpcy4kPUguUmVxdWlyZW1lbnRUeXBlLklOVEVSRkFDRV9SRVFVSVJFTUVOVDticmVhaztjYXNlIDIzOnRoaXMuJD1ILlJlcXVpcmVtZW50VHlwZS5QRVJGT1JNQU5DRV9SRVFVSVJFTUVOVDticmVhaztjYXNlIDI0OnRoaXMuJD1ILlJlcXVpcmVtZW50VHlwZS5QSFlTSUNBTF9SRVFVSVJFTUVOVDticmVhaztjYXNlIDI1OnRoaXMuJD1ILlJlcXVpcmVtZW50VHlwZS5ERVNJR05fQ09OU1RSQUlOVDticmVhaztjYXNlIDI2OnRoaXMuJD1ILlJpc2tMZXZlbC5MT1dfUklTSzticmVhaztjYXNlIDI3OnRoaXMuJD1ILlJpc2tMZXZlbC5NRURfUklTSzticmVhaztjYXNlIDI4OnRoaXMuJD1ILlJpc2tMZXZlbC5ISUdIX1JJU0s7YnJlYWs7Y2FzZSAyOTp0aGlzLiQ9SC5WZXJpZnlUeXBlLlZFUklGWV9BTkFMWVNJUzticmVhaztjYXNlIDMwOnRoaXMuJD1ILlZlcmlmeVR5cGUuVkVSSUZZX0RFTU9OU1RSQVRJT047YnJlYWs7Y2FzZSAzMTp0aGlzLiQ9SC5WZXJpZnlUeXBlLlZFUklGWV9JTlNQRUNUSU9OO2JyZWFrO2Nhc2UgMzI6dGhpcy4kPUguVmVyaWZ5VHlwZS5WRVJJRllfVEVTVDticmVhaztjYXNlIDMzOkguYWRkRWxlbWVudChRW3VlLTNdKTticmVhaztjYXNlIDM0Okguc2V0TmV3RWxlbWVudFR5cGUoUVt1ZS0yXSk7YnJlYWs7Y2FzZSAzNTpILnNldE5ld0VsZW1lbnREb2NSZWYoUVt1ZS0yXSk7YnJlYWs7Y2FzZSAzODpILmFkZFJlbGF0aW9uc2hpcChRW3VlLTJdLFFbdWVdLFFbdWUtNF0pO2JyZWFrO2Nhc2UgMzk6SC5hZGRSZWxhdGlvbnNoaXAoUVt1ZS0yXSxRW3VlLTRdLFFbdWVdKTticmVhaztjYXNlIDQwOnRoaXMuJD1ILlJlbGF0aW9uc2hpcHMuQ09OVEFJTlM7YnJlYWs7Y2FzZSA0MTp0aGlzLiQ9SC5SZWxhdGlvbnNoaXBzLkNPUElFUzticmVhaztjYXNlIDQyOnRoaXMuJD1ILlJlbGF0aW9uc2hpcHMuREVSSVZFUzticmVhaztjYXNlIDQzOnRoaXMuJD1ILlJlbGF0aW9uc2hpcHMuU0FUSVNGSUVTO2JyZWFrO2Nhc2UgNDQ6dGhpcy4kPUguUmVsYXRpb25zaGlwcy5WRVJJRklFUzticmVhaztjYXNlIDQ1OnRoaXMuJD1ILlJlbGF0aW9uc2hpcHMuUkVGSU5FUzticmVhaztjYXNlIDQ2OnRoaXMuJD1ILlJlbGF0aW9uc2hpcHMuVFJBQ0VTO2JyZWFrfX0sImFub255bW91cyIpLHRhYmxlOlt7MzoxLDQ6Miw2OmUsOTpyLDExOm4sMTM6aX0sezE6WzNdfSx7Mzo4LDQ6Miw1OlsxLDddLDY6ZSw5OnIsMTE6biwxMzppfSx7NTpbMSw5XX0sezEwOlsxLDEwXX0sezEyOlsxLDExXX0sdChhLFsyLDZdKSx7MzoxMiw0OjIsNjplLDk6ciwxMTpuLDEzOml9LHsxOlsyLDJdfSx7NDoxNyw1OnMsNzoxMyw4OmwsOTpyLDExOm4sMTM6aSwxNDoxNCwxNToxNSwxNjoxNiwxNzoxOSwyMzoyMSwzMTp1LDMyOmgsMzM6ZiwzNDpkLDM1OnAsMzY6bSw0NDpnLDYyOnksNjM6dn0sdChhLFsyLDRdKSx0KGEsWzIsNV0pLHsxOlsyLDFdfSx7ODpbMSwzMF19LHs0OjE3LDU6cyw3OjMxLDg6bCw5OnIsMTE6biwxMzppLDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE5LDIzOjIxLDMxOnUsMzI6aCwzMzpmLDM0OmQsMzU6cCwzNjptLDQ0OmcsNjI6eSw2Mzp2fSx7NDoxNyw1OnMsNzozMiw4OmwsOTpyLDExOm4sMTM6aSwxNDoxNCwxNToxNSwxNjoxNiwxNzoxOSwyMzoyMSwzMTp1LDMyOmgsMzM6ZiwzNDpkLDM1OnAsMzY6bSw0NDpnLDYyOnksNjM6dn0sezQ6MTcsNTpzLDc6MzMsODpsLDk6ciwxMTpuLDEzOmksMTQ6MTQsMTU6MTUsMTY6MTYsMTc6MTksMjM6MjEsMzE6dSwzMjpoLDMzOmYsMzQ6ZCwzNTpwLDM2Om0sNDQ6Zyw2Mjp5LDYzOnZ9LHs0OjE3LDU6cyw3OjM0LDg6bCw5OnIsMTE6biwxMzppLDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE5LDIzOjIxLDMxOnUsMzI6aCwzMzpmLDM0OmQsMzU6cCwzNjptLDQ0OmcsNjI6eSw2Mzp2fSx7NDoxNyw1OnMsNzozNSw4OmwsOTpyLDExOm4sMTM6aSwxNDoxNCwxNToxNSwxNjoxNiwxNzoxOSwyMzoyMSwzMTp1LDMyOmgsMzM6ZiwzNDpkLDM1OnAsMzY6bSw0NDpnLDYyOnksNjM6dn0sezE4OjM2LDYyOlsxLDM3XSw2MzpbMSwzOF19LHs0NTozOSw2MjpbMSw0MF0sNjM6WzEsNDFdfSx7NTE6WzEsNDJdLDUzOlsxLDQzXX0sdCh4LFsyLDIwXSksdCh4LFsyLDIxXSksdCh4LFsyLDIyXSksdCh4LFsyLDIzXSksdCh4LFsyLDI0XSksdCh4LFsyLDI1XSksdChiLFsyLDQ5XSksdChiLFsyLDUwXSksezE6WzIsM119LHs4OlsyLDhdfSx7ODpbMiw5XX0sezg6WzIsMTBdfSx7ODpbMiwxMV19LHs4OlsyLDEyXX0sezE5OlsxLDQ0XX0sezE5OlsyLDQ3XX0sezE5OlsyLDQ4XX0sezE5OlsxLDQ1XX0sezE5OlsyLDUzXX0sezE5OlsyLDU0XX0sezUyOjQ2LDU1OncsNTY6Xyw1NzpULDU4OkUsNTk6TCw2MDpTLDYxOkF9LHs1Mjo1NCw1NTp3LDU2Ol8sNTc6VCw1ODpFLDU5OkwsNjA6Uyw2MTpBfSx7NTpbMSw1NV19LHs1OlsxLDU2XX0sezUzOlsxLDU3XX0sdChJLFsyLDQwXSksdChJLFsyLDQxXSksdChJLFsyLDQyXSksdChJLFsyLDQzXSksdChJLFsyLDQ0XSksdChJLFsyLDQ1XSksdChJLFsyLDQ2XSksezU0OlsxLDU4XX0sezU6RCwyMDo1OSwyMTprLDI0OlIsMjY6QywyODpPLDMwOk59LHs1OlAsMzA6Riw0Njo2Niw0NzpCLDQ5Okd9LHsyMzo3MSw2Mjp5LDYzOnZ9LHsyMzo3Miw2Mjp5LDYzOnZ9LHQoeixbMiwxM10pLHsyMjpbMSw3M119LHsyMjpbMSw3NF19LHsyMjpbMSw3NV19LHsyMjpbMSw3Nl19LHs1OkQsMjA6NzcsMjE6aywyNDpSLDI2OkMsMjg6TywzMDpOfSx0KHosWzIsMTldKSx0KHosWzIsMzNdKSx7MjI6WzEsNzhdfSx7MjI6WzEsNzldfSx7NTpQLDMwOkYsNDY6ODAsNDc6Qiw0OTpHfSx0KHosWzIsMzddKSx0KHosWzIsMzhdKSx0KHosWzIsMzldKSx7MjM6ODEsNjI6eSw2Mzp2fSx7MjU6ODIsNjI6WzEsODNdLDYzOlsxLDg0XX0sezI3Ojg1LDM3OlsxLDg2XSwzODpbMSw4N10sMzk6WzEsODhdfSx7Mjk6ODksNDA6WzEsOTBdLDQxOlsxLDkxXSw0MjpbMSw5Ml0sNDM6WzEsOTNdfSx0KHosWzIsMThdKSx7NDg6OTQsNjI6WzEsOTVdLDYzOlsxLDk2XX0sezUwOjk3LDYyOlsxLDk4XSw2MzpbMSw5OV19LHQoeixbMiwzNl0pLHs1OlsxLDEwMF19LHs1OlsxLDEwMV19LHs1OlsyLDUxXX0sezU6WzIsNTJdfSx7NTpbMSwxMDJdfSx7NTpbMiwyNl19LHs1OlsyLDI3XX0sezU6WzIsMjhdfSx7NTpbMSwxMDNdfSx7NTpbMiwyOV19LHs1OlsyLDMwXX0sezU6WzIsMzFdfSx7NTpbMiwzMl19LHs1OlsxLDEwNF19LHs1OlsyLDU1XX0sezU6WzIsNTZdfSx7NTpbMSwxMDVdfSx7NTpbMiw1N119LHs1OlsyLDU4XX0sezU6RCwyMDoxMDYsMjE6aywyNDpSLDI2OkMsMjg6TywzMDpOfSx7NTpELDIwOjEwNywyMTprLDI0OlIsMjY6QywyODpPLDMwOk59LHs1OkQsMjA6MTA4LDIxOmssMjQ6UiwyNjpDLDI4Ok8sMzA6Tn0sezU6RCwyMDoxMDksMjE6aywyNDpSLDI2OkMsMjg6TywzMDpOfSx7NTpQLDMwOkYsNDY6MTEwLDQ3OkIsNDk6R30sezU6UCwzMDpGLDQ2OjExMSw0NzpCLDQ5Okd9LHQoeixbMiwxNF0pLHQoeixbMiwxNV0pLHQoeixbMiwxNl0pLHQoeixbMiwxN10pLHQoeixbMiwzNF0pLHQoeixbMiwzNV0pXSxkZWZhdWx0QWN0aW9uczp7ODpbMiwyXSwxMjpbMiwxXSwzMDpbMiwzXSwzMTpbMiw4XSwzMjpbMiw5XSwzMzpbMiwxMF0sMzQ6WzIsMTFdLDM1OlsyLDEyXSwzNzpbMiw0N10sMzg6WzIsNDhdLDQwOlsyLDUzXSw0MTpbMiw1NF0sODM6WzIsNTFdLDg0OlsyLDUyXSw4NjpbMiwyNl0sODc6WzIsMjddLDg4OlsyLDI4XSw5MDpbMiwyOV0sOTE6WzIsMzBdLDkyOlsyLDMxXSw5MzpbMiwzMl0sOTU6WzIsNTVdLDk2OlsyLDU2XSw5ODpbMiw1N10sOTk6WzIsNThdfSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oSyxlZSl7aWYoZWUucmVjb3ZlcmFibGUpdGhpcy50cmFjZShLKTtlbHNle3ZhciBKPW5ldyBFcnJvcihLKTt0aHJvdyBKLmhhc2g9ZWUsSn19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihLKXt2YXIgZWU9dGhpcyxKPVswXSxIPVtdLHE9W251bGxdLFE9W10sYWU9dGhpcy50YWJsZSx1ZT0iIixjZT0wLHRlPTAsTmU9MCxzZT0yLGtlPTEsUmU9US5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxDZT1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLFBlPXt5eTp7fX07Zm9yKHZhciBJZSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LEllKSYmKFBlLnl5W0llXT10aGlzLnl5W0llXSk7Q2Uuc2V0SW5wdXQoSyxQZS55eSksUGUueXkubGV4ZXI9Q2UsUGUueXkucGFyc2VyPXRoaXMsdHlwZW9mIENlLnl5bGxvYz4idSImJihDZS55eWxsb2M9e30pO3ZhciAkZT1DZS55eWxsb2M7US5wdXNoKCRlKTt2YXIgeWU9Q2Uub3B0aW9ucyYmQ2Uub3B0aW9ucy5yYW5nZXM7dHlwZW9mIFBlLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPVBlLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIFgoSGUpe0oubGVuZ3RoPUoubGVuZ3RoLTIqSGUscS5sZW5ndGg9cS5sZW5ndGgtSGUsUS5sZW5ndGg9US5sZW5ndGgtSGV9byhYLCJwb3BTdGFjayIpO2Z1bmN0aW9uIGZlKCl7dmFyIEhlO3JldHVybiBIZT1ILnBvcCgpfHxDZS5sZXgoKXx8a2UsdHlwZW9mIEhlIT0ibnVtYmVyIiYmKEhlIGluc3RhbmNlb2YgQXJyYXkmJihIPUhlLEhlPUgucG9wKCkpLEhlPWVlLnN5bWJvbHNfW0hlXXx8SGUpLEhlfW8oZmUsImxleCIpO2Zvcih2YXIgaGUsZ2UsbmUsdmUsVSxUZSxpZT17fSxFZSxBZSxHZSxCZTs7KXtpZihuZT1KW0oubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbbmVdP3ZlPXRoaXMuZGVmYXVsdEFjdGlvbnNbbmVdOigoaGU9PT1udWxsfHx0eXBlb2YgaGU+InUiKSYmKGhlPWZlKCkpLHZlPWFlW25lXSYmYWVbbmVdW2hlXSksdHlwZW9mIHZlPiJ1Inx8IXZlLmxlbmd0aHx8IXZlWzBdKXt2YXIgbWU9IiI7QmU9W107Zm9yKEVlIGluIGFlW25lXSl0aGlzLnRlcm1pbmFsc19bRWVdJiZFZT5zZSYmQmUucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0VlXSsiJyIpO0NlLnNob3dQb3NpdGlvbj9tZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjZSsxKStgOgpgK0NlLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArQmUuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1toZV18fGhlKSsiJyI6bWU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoY2UrMSkrIjogVW5leHBlY3RlZCAiKyhoZT09a2U/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19baGVdfHxoZSkrIiciKSx0aGlzLnBhcnNlRXJyb3IobWUse3RleHQ6Q2UubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW2hlXXx8aGUsbGluZTpDZS55eWxpbmVubyxsb2M6JGUsZXhwZWN0ZWQ6QmV9KX1pZih2ZVswXWluc3RhbmNlb2YgQXJyYXkmJnZlLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrbmUrIiwgdG9rZW46ICIraGUpO3N3aXRjaCh2ZVswXSl7Y2FzZSAxOkoucHVzaChoZSkscS5wdXNoKENlLnl5dGV4dCksUS5wdXNoKENlLnl5bGxvYyksSi5wdXNoKHZlWzFdKSxoZT1udWxsLGdlPyhoZT1nZSxnZT1udWxsKToodGU9Q2UueXlsZW5nLHVlPUNlLnl5dGV4dCxjZT1DZS55eWxpbmVubywkZT1DZS55eWxsb2MsTmU+MCYmTmUtLSk7YnJlYWs7Y2FzZSAyOmlmKEFlPXRoaXMucHJvZHVjdGlvbnNfW3ZlWzFdXVsxXSxpZS4kPXFbcS5sZW5ndGgtQWVdLGllLl8kPXtmaXJzdF9saW5lOlFbUS5sZW5ndGgtKEFlfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6UVtRLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOlFbUS5sZW5ndGgtKEFlfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOlFbUS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LHllJiYoaWUuXyQucmFuZ2U9W1FbUS5sZW5ndGgtKEFlfHwxKV0ucmFuZ2VbMF0sUVtRLmxlbmd0aC0xXS5yYW5nZVsxXV0pLFRlPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShpZSxbdWUsdGUsY2UsUGUueXksdmVbMV0scSxRXS5jb25jYXQoUmUpKSx0eXBlb2YgVGU8InUiKXJldHVybiBUZTtBZSYmKEo9Si5zbGljZSgwLC0xKkFlKjIpLHE9cS5zbGljZSgwLC0xKkFlKSxRPVEuc2xpY2UoMCwtMSpBZSkpLEoucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t2ZVsxXV1bMF0pLHEucHVzaChpZS4kKSxRLnB1c2goaWUuXyQpLEdlPWFlW0pbSi5sZW5ndGgtMl1dW0pbSi5sZW5ndGgtMV1dLEoucHVzaChHZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LFo9ZnVuY3Rpb24oKXt2YXIgb2U9e0VPRjoxLHBhcnNlRXJyb3I6byhmdW5jdGlvbihlZSxKKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKGVlLEopO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGVlKX0sInBhcnNlRXJyb3IiKSxzZXRJbnB1dDpvKGZ1bmN0aW9uKEssZWUpe3JldHVybiB0aGlzLnl5PWVlfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1LLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIEs9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPUssdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPUssdGhpcy5tYXRjaGVkKz1LO3ZhciBlZT1LLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gZWU/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLEt9LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24oSyl7dmFyIGVlPUsubGVuZ3RoLEo9Sy5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PUsrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWVlKSx0aGlzLm9mZnNldC09ZWU7dmFyIEg9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksSi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPUoubGVuZ3RoLTEpO3ZhciBxPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpKPyhKLmxlbmd0aD09PUgubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStIW0gubGVuZ3RoLUoubGVuZ3RoXS5sZW5ndGgtSlswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWVlfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3FbMF0scVswXSt0aGlzLnl5bGVuZy1lZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSwidW5wdXQiKSxtb3JlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSwibW9yZSIpLHJlamVjdDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSwicmVqZWN0IiksbGVzczpvKGZ1bmN0aW9uKEspe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShLKSl9LCJsZXNzIikscGFzdElucHV0Om8oZnVuY3Rpb24oKXt2YXIgSz10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKEsubGVuZ3RoPjIwPyIuLi4iOiIiKStLLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSwicGFzdElucHV0IiksdXBjb21pbmdJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIEs9dGhpcy5tYXRjaDtyZXR1cm4gSy5sZW5ndGg8MjAmJihLKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1LLmxlbmd0aCkpLChLLnN1YnN0cigwLDIwKSsoSy5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sInVwY29taW5nSW5wdXQiKSxzaG93UG9zaXRpb246byhmdW5jdGlvbigpe3ZhciBLPXRoaXMucGFzdElucHV0KCksZWU9bmV3IEFycmF5KEsubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gSyt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArZWUrIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKEssZWUpe3ZhciBKLEgscTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYocT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihxLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLEg9S1swXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksSCYmKHRoaXMueXlsaW5lbm8rPUgubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46SD9IW0gubGVuZ3RoLTFdLmxlbmd0aC1IW0gubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rS1swXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1LWzBdLHRoaXMubWF0Y2grPUtbMF0sdGhpcy5tYXRjaGVzPUssdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoS1swXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9S1swXSxKPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGVlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLEopcmV0dXJuIEo7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIFEgaW4gcSl0aGlzW1FdPXFbUV07cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIEssZWUsSixIO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIHE9dGhpcy5fY3VycmVudFJ1bGVzKCksUT0wO1E8cS5sZW5ndGg7USsrKWlmKEo9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1txW1FdXSksSiYmKCFlZXx8SlswXS5sZW5ndGg+ZWVbMF0ubGVuZ3RoKSl7aWYoZWU9SixIPVEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoSz10aGlzLnRlc3RfbWF0Y2goSixxW1FdKSxLIT09ITEpcmV0dXJuIEs7aWYodGhpcy5fYmFja3RyYWNrKXtlZT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlZT8oSz10aGlzLnRlc3RfbWF0Y2goZWUscVtIXSksSyE9PSExP0s6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LCJuZXh0IiksbGV4Om8oZnVuY3Rpb24oKXt2YXIgZWU9dGhpcy5uZXh0KCk7cmV0dXJuIGVlfHx0aGlzLmxleCgpfSwibGV4IiksYmVnaW46byhmdW5jdGlvbihlZSl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKGVlKX0sImJlZ2luIikscG9wU3RhdGU6byhmdW5jdGlvbigpe3ZhciBlZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBlZT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sInBvcFN0YXRlIiksX2N1cnJlbnRSdWxlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sIl9jdXJyZW50UnVsZXMiKSx0b3BTdGF0ZTpvKGZ1bmN0aW9uKGVlKXtyZXR1cm4gZWU9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhlZXx8MCksZWU+PTA/dGhpcy5jb25kaXRpb25TdGFja1tlZV06IklOSVRJQUwifSwidG9wU3RhdGUiKSxwdXNoU3RhdGU6byhmdW5jdGlvbihlZSl7dGhpcy5iZWdpbihlZSl9LCJwdXNoU3RhdGUiKSxzdGF0ZVN0YWNrU2l6ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSwic3RhdGVTdGFja1NpemUiKSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihlZSxKLEgscSl7dmFyIFE9cTtzd2l0Y2goSCl7Y2FzZSAwOnJldHVybiJ0aXRsZSI7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSw5O2JyZWFrO2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2JyZWFrO2Nhc2UgMzpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMTE7YnJlYWs7Y2FzZSA0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7YnJlYWs7Y2FzZSA1OnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDY6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNzpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSA4OnJldHVybiA1O2Nhc2UgOTpicmVhaztjYXNlIDEwOmJyZWFrO2Nhc2UgMTE6YnJlYWs7Y2FzZSAxMjpyZXR1cm4gODtjYXNlIDEzOnJldHVybiA2O2Nhc2UgMTQ6cmV0dXJuIDE5O2Nhc2UgMTU6cmV0dXJuIDMwO2Nhc2UgMTY6cmV0dXJuIDIyO2Nhc2UgMTc6cmV0dXJuIDIxO2Nhc2UgMTg6cmV0dXJuIDI0O2Nhc2UgMTk6cmV0dXJuIDI2O2Nhc2UgMjA6cmV0dXJuIDI4O2Nhc2UgMjE6cmV0dXJuIDMxO2Nhc2UgMjI6cmV0dXJuIDMyO2Nhc2UgMjM6cmV0dXJuIDMzO2Nhc2UgMjQ6cmV0dXJuIDM0O2Nhc2UgMjU6cmV0dXJuIDM1O2Nhc2UgMjY6cmV0dXJuIDM2O2Nhc2UgMjc6cmV0dXJuIDM3O2Nhc2UgMjg6cmV0dXJuIDM4O2Nhc2UgMjk6cmV0dXJuIDM5O2Nhc2UgMzA6cmV0dXJuIDQwO2Nhc2UgMzE6cmV0dXJuIDQxO2Nhc2UgMzI6cmV0dXJuIDQyO2Nhc2UgMzM6cmV0dXJuIDQzO2Nhc2UgMzQ6cmV0dXJuIDQ0O2Nhc2UgMzU6cmV0dXJuIDU1O2Nhc2UgMzY6cmV0dXJuIDU2O2Nhc2UgMzc6cmV0dXJuIDU3O2Nhc2UgMzg6cmV0dXJuIDU4O2Nhc2UgMzk6cmV0dXJuIDU5O2Nhc2UgNDA6cmV0dXJuIDYwO2Nhc2UgNDE6cmV0dXJuIDYxO2Nhc2UgNDI6cmV0dXJuIDQ3O2Nhc2UgNDM6cmV0dXJuIDQ5O2Nhc2UgNDQ6cmV0dXJuIDUxO2Nhc2UgNDU6cmV0dXJuIDU0O2Nhc2UgNDY6cmV0dXJuIDUzO2Nhc2UgNDc6dGhpcy5iZWdpbigic3RyaW5nIik7YnJlYWs7Y2FzZSA0ODp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA0OTpyZXR1cm4icVN0cmluZyI7Y2FzZSA1MDpyZXR1cm4gSi55eXRleHQ9Si55eXRleHQudHJpbSgpLDYyO2JyZWFrfX0sImFub255bW91cyIpLHJ1bGVzOlsvXig/OnRpdGxlXHNbXiNcbjtdKykvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86KFxyP1xuKSspL2ksL14oPzpccyspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JVteXG5dKikvaSwvXig/OiQpL2ksL14oPzpyZXF1aXJlbWVudERpYWdyYW1cYikvaSwvXig/Olx7KS9pLC9eKD86XH0pL2ksL14oPzo6KS9pLC9eKD86aWRcYikvaSwvXig/OnRleHRcYikvaSwvXig/OnJpc2tcYikvaSwvXig/OnZlcmlmeU1ldGhvZFxiKS9pLC9eKD86cmVxdWlyZW1lbnRcYikvaSwvXig/OmZ1bmN0aW9uYWxSZXF1aXJlbWVudFxiKS9pLC9eKD86aW50ZXJmYWNlUmVxdWlyZW1lbnRcYikvaSwvXig/OnBlcmZvcm1hbmNlUmVxdWlyZW1lbnRcYikvaSwvXig/OnBoeXNpY2FsUmVxdWlyZW1lbnRcYikvaSwvXig/OmRlc2lnbkNvbnN0cmFpbnRcYikvaSwvXig/Omxvd1xiKS9pLC9eKD86bWVkaXVtXGIpL2ksL14oPzpoaWdoXGIpL2ksL14oPzphbmFseXNpc1xiKS9pLC9eKD86ZGVtb25zdHJhdGlvblxiKS9pLC9eKD86aW5zcGVjdGlvblxiKS9pLC9eKD86dGVzdFxiKS9pLC9eKD86ZWxlbWVudFxiKS9pLC9eKD86Y29udGFpbnNcYikvaSwvXig/OmNvcGllc1xiKS9pLC9eKD86ZGVyaXZlc1xiKS9pLC9eKD86c2F0aXNmaWVzXGIpL2ksL14oPzp2ZXJpZmllc1xiKS9pLC9eKD86cmVmaW5lc1xiKS9pLC9eKD86dHJhY2VzXGIpL2ksL14oPzp0eXBlXGIpL2ksL14oPzpkb2NyZWZcYikvaSwvXig/OjwtKS9pLC9eKD86LT4pL2ksL14oPzotKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXHddW15cclxuXHtcPFw+XC1cPV0qKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbNiw3XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzRdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbMl0saW5jbHVzaXZlOiExfSx1bnFTdHJpbmc6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sdG9rZW46e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbNDgsNDldLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwzLDUsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDUwXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIG9lfSgpO1cubGV4ZXI9WjtmdW5jdGlvbiBqKCl7dGhpcy55eT17fX1yZXR1cm4gbyhqLCJQYXJzZXIiKSxqLnByb3RvdHlwZT1XLFcuUGFyc2VyPWosbmV3IGp9KCk7dk8ucGFyc2VyPXZPO2tmZT12T30pO3ZhciB4TyxxcyxSeCxUZixNeCxZVmUscVZlLFhWZSxqVmUsS1ZlLFFWZSxaVmUsSlZlLGVVZSx0VWUsclVlLG5VZSxpVWUsYVVlLHNVZSxvVWUsbFVlLFNmZSxDZmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWdCgpO3V0KCk7QWkoKTt4Tz1bXSxxcz17fSxSeD1uZXcgTWFwLFRmPXt9LE14PW5ldyBNYXAsWVZlPXtSRVFVSVJFTUVOVDoiUmVxdWlyZW1lbnQiLEZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ6IkZ1bmN0aW9uYWwgUmVxdWlyZW1lbnQiLElOVEVSRkFDRV9SRVFVSVJFTUVOVDoiSW50ZXJmYWNlIFJlcXVpcmVtZW50IixQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVDoiUGVyZm9ybWFuY2UgUmVxdWlyZW1lbnQiLFBIWVNJQ0FMX1JFUVVJUkVNRU5UOiJQaHlzaWNhbCBSZXF1aXJlbWVudCIsREVTSUdOX0NPTlNUUkFJTlQ6IkRlc2lnbiBDb25zdHJhaW50In0scVZlPXtMT1dfUklTSzoiTG93IixNRURfUklTSzoiTWVkaXVtIixISUdIX1JJU0s6IkhpZ2gifSxYVmU9e1ZFUklGWV9BTkFMWVNJUzoiQW5hbHlzaXMiLFZFUklGWV9ERU1PTlNUUkFUSU9OOiJEZW1vbnN0cmF0aW9uIixWRVJJRllfSU5TUEVDVElPTjoiSW5zcGVjdGlvbiIsVkVSSUZZX1RFU1Q6IlRlc3QifSxqVmU9e0NPTlRBSU5TOiJjb250YWlucyIsQ09QSUVTOiJjb3BpZXMiLERFUklWRVM6ImRlcml2ZXMiLFNBVElTRklFUzoic2F0aXNmaWVzIixWRVJJRklFUzoidmVyaWZpZXMiLFJFRklORVM6InJlZmluZXMiLFRSQUNFUzoidHJhY2VzIn0sS1ZlPW8oKHQsZSk9PihSeC5oYXModCl8fFJ4LnNldCh0LHtuYW1lOnQsdHlwZTplLGlkOnFzLmlkLHRleHQ6cXMudGV4dCxyaXNrOnFzLnJpc2ssdmVyaWZ5TWV0aG9kOnFzLnZlcmlmeU1ldGhvZH0pLHFzPXt9LFJ4LmdldCh0KSksImFkZFJlcXVpcmVtZW50IiksUVZlPW8oKCk9PlJ4LCJnZXRSZXF1aXJlbWVudHMiKSxaVmU9byh0PT57cXMhPT12b2lkIDAmJihxcy5pZD10KX0sInNldE5ld1JlcUlkIiksSlZlPW8odD0+e3FzIT09dm9pZCAwJiYocXMudGV4dD10KX0sInNldE5ld1JlcVRleHQiKSxlVWU9byh0PT57cXMhPT12b2lkIDAmJihxcy5yaXNrPXQpfSwic2V0TmV3UmVxUmlzayIpLHRVZT1vKHQ9PntxcyE9PXZvaWQgMCYmKHFzLnZlcmlmeU1ldGhvZD10KX0sInNldE5ld1JlcVZlcmlmeU1ldGhvZCIpLHJVZT1vKHQ9PihNeC5oYXModCl8fChNeC5zZXQodCx7bmFtZTp0LHR5cGU6VGYudHlwZSxkb2NSZWY6VGYuZG9jUmVmfSksWS5pbmZvKCJBZGRlZCBuZXcgcmVxdWlyZW1lbnQ6ICIsdCkpLFRmPXt9LE14LmdldCh0KSksImFkZEVsZW1lbnQiKSxuVWU9bygoKT0+TXgsImdldEVsZW1lbnRzIiksaVVlPW8odD0+e1RmIT09dm9pZCAwJiYoVGYudHlwZT10KX0sInNldE5ld0VsZW1lbnRUeXBlIiksYVVlPW8odD0+e1RmIT09dm9pZCAwJiYoVGYuZG9jUmVmPXQpfSwic2V0TmV3RWxlbWVudERvY1JlZiIpLHNVZT1vKCh0LGUscik9Pnt4Ty5wdXNoKHt0eXBlOnQsc3JjOmUsZHN0OnJ9KX0sImFkZFJlbGF0aW9uc2hpcCIpLG9VZT1vKCgpPT54TywiZ2V0UmVsYXRpb25zaGlwcyIpLGxVZT1vKCgpPT57eE89W10scXM9e30sUng9bmV3IE1hcCxUZj17fSxNeD1uZXcgTWFwLExyKCl9LCJjbGVhciIpLFNmZT17UmVxdWlyZW1lbnRUeXBlOllWZSxSaXNrTGV2ZWw6cVZlLFZlcmlmeVR5cGU6WFZlLFJlbGF0aW9uc2hpcHM6alZlLGdldENvbmZpZzpvKCgpPT5wZSgpLnJlcSwiZ2V0Q29uZmlnIiksYWRkUmVxdWlyZW1lbnQ6S1ZlLGdldFJlcXVpcmVtZW50czpRVmUsc2V0TmV3UmVxSWQ6WlZlLHNldE5ld1JlcVRleHQ6SlZlLHNldE5ld1JlcVJpc2s6ZVVlLHNldE5ld1JlcVZlcmlmeU1ldGhvZDp0VWUsc2V0QWNjVGl0bGU6TXIsZ2V0QWNjVGl0bGU6QnIsc2V0QWNjRGVzY3JpcHRpb246RnIsZ2V0QWNjRGVzY3JpcHRpb246enIsYWRkRWxlbWVudDpyVWUsZ2V0RWxlbWVudHM6blVlLHNldE5ld0VsZW1lbnRUeXBlOmlVZSxzZXROZXdFbGVtZW50RG9jUmVmOmFVZSxhZGRSZWxhdGlvbnNoaXA6c1VlLGdldFJlbGF0aW9uc2hpcHM6b1VlLGNsZWFyOmxVZX19KTt2YXIgY1VlLEFmZSxfZmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtjVWU9byh0PT5gCgogIG1hcmtlciB7CiAgICBmaWxsOiAke3QucmVsYXRpb25Db2xvcn07CiAgICBzdHJva2U6ICR7dC5yZWxhdGlvbkNvbG9yfTsKICB9CgogIG1hcmtlci5jcm9zcyB7CiAgICBzdHJva2U6ICR7dC5saW5lQ29sb3J9OwogIH0KCiAgc3ZnIHsKICAgIGZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6ICR7dC5mb250U2l6ZX07CiAgfQoKICAucmVxQm94IHsKICAgIGZpbGw6ICR7dC5yZXF1aXJlbWVudEJhY2tncm91bmR9OwogICAgZmlsbC1vcGFjaXR5OiAxLjA7CiAgICBzdHJva2U6ICR7dC5yZXF1aXJlbWVudEJvcmRlckNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogJHt0LnJlcXVpcmVtZW50Qm9yZGVyU2l6ZX07CiAgfQogIAogIC5yZXFUaXRsZSwgLnJlcUxhYmVsewogICAgZmlsbDogICR7dC5yZXF1aXJlbWVudFRleHRDb2xvcn07CiAgfQogIC5yZXFMYWJlbEJveCB7CiAgICBmaWxsOiAke3QucmVsYXRpb25MYWJlbEJhY2tncm91bmR9OwogICAgZmlsbC1vcGFjaXR5OiAxLjA7CiAgfQoKICAucmVxLXRpdGxlLWxpbmUgewogICAgc3Ryb2tlOiAke3QucmVxdWlyZW1lbnRCb3JkZXJDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6ICR7dC5yZXF1aXJlbWVudEJvcmRlclNpemV9OwogIH0KICAucmVsYXRpb25zaGlwTGluZSB7CiAgICBzdHJva2U6ICR7dC5yZWxhdGlvbkNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMTsKICB9CiAgLnJlbGF0aW9uc2hpcExhYmVsIHsKICAgIGZpbGw6ICR7dC5yZWxhdGlvbkxhYmVsQ29sb3J9OwogIH0KCmAsImdldFN0eWxlcyIpLEFmZT1jVWV9KTt2YXIgYk8sdVVlLHdPLExmZT1NKCgpPT57InVzZSBzdHJpY3QiO2JPPXtDT05UQUlOUzoiY29udGFpbnMiLEFSUk9XOiJhcnJvdyJ9LHVVZT1vKCh0LGUpPT57bGV0IHI9dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixiTy5DT05UQUlOUysiX2xpbmVfZW5kaW5nIikuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsZS5saW5lX2hlaWdodC8yKS5hdHRyKCJtYXJrZXJXaWR0aCIsZS5saW5lX2hlaWdodCkuYXR0cigibWFya2VySGVpZ2h0IixlLmxpbmVfaGVpZ2h0KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJnIik7ci5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoImN5IixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInIiLGUubGluZV9oZWlnaHQvMikuYXR0cigiZmlsbCIsIm5vbmUiKSxyLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIiwwKS5hdHRyKCJ4MiIsZS5saW5lX2hlaWdodCkuYXR0cigieTEiLGUubGluZV9oZWlnaHQvMikuYXR0cigieTIiLGUubGluZV9oZWlnaHQvMikuYXR0cigic3Ryb2tlLXdpZHRoIiwxKSxyLmFwcGVuZCgibGluZSIpLmF0dHIoInkxIiwwKS5hdHRyKCJ5MiIsZS5saW5lX2hlaWdodCkuYXR0cigieDEiLGUubGluZV9oZWlnaHQvMikuYXR0cigieDIiLGUubGluZV9oZWlnaHQvMikuYXR0cigic3Ryb2tlLXdpZHRoIiwxKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGJPLkFSUk9XKyJfbGluZV9lbmRpbmciKS5hdHRyKCJyZWZYIixlLmxpbmVfaGVpZ2h0KS5hdHRyKCJyZWZZIiwuNSplLmxpbmVfaGVpZ2h0KS5hdHRyKCJtYXJrZXJXaWR0aCIsZS5saW5lX2hlaWdodCkuYXR0cigibWFya2VySGVpZ2h0IixlLmxpbmVfaGVpZ2h0KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsYE0wLDAKICAgICAgTCR7ZS5saW5lX2hlaWdodH0sJHtlLmxpbmVfaGVpZ2h0LzJ9CiAgICAgIE0ke2UubGluZV9oZWlnaHR9LCR7ZS5saW5lX2hlaWdodC8yfQogICAgICBMMCwke2UubGluZV9oZWlnaHR9YCkuYXR0cigic3Ryb2tlLXdpZHRoIiwxKX0sImluc2VydExpbmVFbmRpbmdzIiksd089e1JlcU1hcmtlcnM6Yk8saW5zZXJ0TGluZUVuZGluZ3M6dVVlfX0pO3ZhciBoaSxEZmUsTmZlLFJmZSxNZmUsaFVlLGZVZSxkVWUscFVlLG1VZSxnVWUsS2cseVVlLElmZSxPZmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwcigpO1F2KCk7R3MoKTtWdCgpO3V0KCk7YWkoKTtmcigpO0xmZSgpO2hpPXt9LERmZT0wLE5mZT1vKCh0LGUpPT50Lmluc2VydCgicmVjdCIsIiMiK2UpLmF0dHIoImNsYXNzIiwicmVxIHJlcUJveCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoIndpZHRoIixoaS5yZWN0X21pbl93aWR0aCsicHgiKS5hdHRyKCJoZWlnaHQiLGhpLnJlY3RfbWluX2hlaWdodCsicHgiKSwibmV3UmVjdE5vZGUiKSxSZmU9bygodCxlLHIpPT57bGV0IG49aGkucmVjdF9taW5fd2lkdGgvMixpPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJyZXEgcmVxTGFiZWwgcmVxVGl0bGUiKS5hdHRyKCJpZCIsZSkuYXR0cigieCIsbikuYXR0cigieSIsaGkucmVjdF9wYWRkaW5nKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImhhbmdpbmciKSxhPTA7ci5mb3JFYWNoKGg9PnthPT0wP2kuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieCIsaGkucmVjdF9taW5fd2lkdGgvMikuYXR0cigiZHkiLDApLnRleHQoaCk6aS5hcHBlbmQoInRzcGFuIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ4IixoaS5yZWN0X21pbl93aWR0aC8yKS5hdHRyKCJkeSIsaGkubGluZV9oZWlnaHQqLjc1KS50ZXh0KGgpLGErK30pO2xldCBzPTEuNSpoaS5yZWN0X3BhZGRpbmcsbD1hKmhpLmxpbmVfaGVpZ2h0Ki43NSx1PXMrbDtyZXR1cm4gdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsInJlcS10aXRsZS1saW5lIikuYXR0cigieDEiLCIwIikuYXR0cigieDIiLGhpLnJlY3RfbWluX3dpZHRoKS5hdHRyKCJ5MSIsdSkuYXR0cigieTIiLHUpLHt0aXRsZU5vZGU6aSx5OnV9fSwibmV3VGl0bGVOb2RlIiksTWZlPW8oKHQsZSxyLG4pPT57bGV0IGk9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInJlcSByZXFMYWJlbCIpLmF0dHIoImlkIixlKS5hdHRyKCJ4IixoaS5yZWN0X3BhZGRpbmcpLmF0dHIoInkiLG4pLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiaGFuZ2luZyIpLGE9MCxzPTMwLGw9W107cmV0dXJuIHIuZm9yRWFjaCh1PT57bGV0IGg9dS5sZW5ndGg7Zm9yKDtoPnMmJmE8Mzspe2xldCBmPXUuc3Vic3RyaW5nKDAscyk7dT11LnN1YnN0cmluZyhzLHUubGVuZ3RoKSxoPXUubGVuZ3RoLGxbbC5sZW5ndGhdPWYsYSsrfWlmKGE9PTMpe2xldCBmPWxbbC5sZW5ndGgtMV07bFtsLmxlbmd0aC0xXT1mLnN1YnN0cmluZygwLGYubGVuZ3RoLTQpKyIuLi4ifWVsc2UgbFtsLmxlbmd0aF09dTthPTB9KSxsLmZvckVhY2godT0+e2kuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLGhpLnJlY3RfcGFkZGluZykuYXR0cigiZHkiLGhpLmxpbmVfaGVpZ2h0KS50ZXh0KHUpfSksaX0sIm5ld0JvZHlOb2RlIiksaFVlPW8oKHQsZSxyLG4pPT57bGV0IGk9ZS5ub2RlKCkuZ2V0VG90YWxMZW5ndGgoKSxhPWUubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoaSouNSkscz0icmVsIitEZmU7RGZlKys7bGV0IHU9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInJlcSByZWxhdGlvbnNoaXBMYWJlbCIpLmF0dHIoImlkIixzKS5hdHRyKCJ4IixhLngpLmF0dHIoInkiLGEueSkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnRleHQobikubm9kZSgpLmdldEJCb3goKTt0Lmluc2VydCgicmVjdCIsIiMiK3MpLmF0dHIoImNsYXNzIiwicmVxIHJlcUxhYmVsQm94IikuYXR0cigieCIsYS54LXUud2lkdGgvMikuYXR0cigieSIsYS55LXUuaGVpZ2h0LzIpLmF0dHIoIndpZHRoIix1LndpZHRoKS5hdHRyKCJoZWlnaHQiLHUuaGVpZ2h0KS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJmaWxsLW9wYWNpdHkiLCI4NSUiKX0sImFkZEVkZ2VMYWJlbCIpLGZVZT1vKGZ1bmN0aW9uKHQsZSxyLG4saSl7bGV0IGE9ci5lZGdlKEtnKGUuc3JjKSxLZyhlLmRzdCkpLHM9bnMoKS54KGZ1bmN0aW9uKHUpe3JldHVybiB1Lnh9KS55KGZ1bmN0aW9uKHUpe3JldHVybiB1Lnl9KSxsPXQuaW5zZXJ0KCJwYXRoIiwiIyIrbikuYXR0cigiY2xhc3MiLCJlciByZWxhdGlvbnNoaXBMaW5lIikuYXR0cigiZCIscyhhLnBvaW50cykpLmF0dHIoImZpbGwiLCJub25lIik7ZS50eXBlPT1pLmRiLlJlbGF0aW9uc2hpcHMuQ09OVEFJTlM/bC5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitxZS5nZXRVcmwoaGkuYXJyb3dNYXJrZXJBYnNvbHV0ZSkrIiMiK2UudHlwZSsiX2xpbmVfZW5kaW5nKSIpOihsLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLCIxMCw3IiksbC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrcWUuZ2V0VXJsKGhpLmFycm93TWFya2VyQWJzb2x1dGUpKyIjIit3Ty5SZXFNYXJrZXJzLkFSUk9XKyJfbGluZV9lbmRpbmcpIikpLGhVZSh0LGwsaGksYDw8JHtlLnR5cGV9Pj5gKX0sImRyYXdSZWxhdGlvbnNoaXBGcm9tTGF5b3V0IiksZFVlPW8oKHQsZSxyKT0+e3QuZm9yRWFjaCgobixpKT0+e2k9S2coaSksWS5pbmZvKCJBZGRlZCBuZXcgcmVxdWlyZW1lbnQ6ICIsaSk7bGV0IGE9ci5hcHBlbmQoImciKS5hdHRyKCJpZCIsaSkscz0icmVxLSIraSxsPU5mZShhLHMpLHU9W10saD1SZmUoYSxpKyJfdGl0bGUiLFtgPDwke24udHlwZX0+PmAsYCR7bi5uYW1lfWBdKTt1LnB1c2goaC50aXRsZU5vZGUpO2xldCBmPU1mZShhLGkrIl9ib2R5IixbYElkOiAke24uaWR9YCxgVGV4dDogJHtuLnRleHR9YCxgUmlzazogJHtuLnJpc2t9YCxgVmVyaWZpY2F0aW9uOiAke24udmVyaWZ5TWV0aG9kfWBdLGgueSk7dS5wdXNoKGYpO2xldCBkPWwubm9kZSgpLmdldEJCb3goKTtlLnNldE5vZGUoaSx7d2lkdGg6ZC53aWR0aCxoZWlnaHQ6ZC5oZWlnaHQsc2hhcGU6InJlY3QiLGlkOml9KX0pfSwiZHJhd1JlcXMiKSxwVWU9bygodCxlLHIpPT57dC5mb3JFYWNoKChuLGkpPT57bGV0IGE9S2coaSkscz1yLmFwcGVuZCgiZyIpLmF0dHIoImlkIixhKSxsPSJlbGVtZW50LSIrYSx1PU5mZShzLGwpLGg9W10sZj1SZmUocyxsKyJfdGl0bGUiLFsiPDxFbGVtZW50Pj4iLGAke2l9YF0pO2gucHVzaChmLnRpdGxlTm9kZSk7bGV0IGQ9TWZlKHMsbCsiX2JvZHkiLFtgVHlwZTogJHtuLnR5cGV8fCJOb3QgU3BlY2lmaWVkIn1gLGBEb2MgUmVmOiAke24uZG9jUmVmfHwiTm9uZSJ9YF0sZi55KTtoLnB1c2goZCk7bGV0IHA9dS5ub2RlKCkuZ2V0QkJveCgpO2Uuc2V0Tm9kZShhLHt3aWR0aDpwLndpZHRoLGhlaWdodDpwLmhlaWdodCxzaGFwZToicmVjdCIsaWQ6YX0pfSl9LCJkcmF3RWxlbWVudHMiKSxtVWU9bygodCxlKT0+KHQuZm9yRWFjaChmdW5jdGlvbihyKXtsZXQgbj1LZyhyLnNyYyksaT1LZyhyLmRzdCk7ZS5zZXRFZGdlKG4saSx7cmVsYXRpb25zaGlwOnJ9KX0pLHQpLCJhZGRSZWxhdGlvbnNoaXBzIiksZ1VlPW8oZnVuY3Rpb24odCxlKXtlLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihyKXtyIT09dm9pZCAwJiZlLm5vZGUocikhPT12b2lkIDAmJih0LnNlbGVjdCgiIyIrciksdC5zZWxlY3QoIiMiK3IpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhlLm5vZGUocikueC1lLm5vZGUocikud2lkdGgvMikrIiwiKyhlLm5vZGUocikueS1lLm5vZGUocikuaGVpZ2h0LzIpKyIgKSIpKX0pfSwiYWRqdXN0RW50aXRpZXMiKSxLZz1vKHQ9PnQucmVwbGFjZSgvXHMvZywiIikucmVwbGFjZSgvXC4vZywiXyIpLCJlbGVtZW50U3RyaW5nIikseVVlPW8oKHQsZSxyLG4pPT57aGk9cGUoKS5yZXF1aXJlbWVudDtsZXQgaT1oaS5zZWN1cml0eUxldmVsLGE7aT09PSJzYW5kYm94IiYmKGE9VmUoIiNpIitlKSk7bGV0IGw9KGk9PT0ic2FuZGJveCI/VmUoYS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KTpWZSgiYm9keSIpKS5zZWxlY3QoYFtpZD0nJHtlfSddYCk7d08uaW5zZXJ0TGluZUVuZGluZ3MobCxoaSk7bGV0IHU9bmV3IElyKHttdWx0aWdyYXBoOiExLGNvbXBvdW5kOiExLGRpcmVjdGVkOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6aGkubGF5b3V0RGlyZWN0aW9uLG1hcmdpbng6MjAsbWFyZ2lueToyMCxub2Rlc2VwOjEwMCxlZGdlc2VwOjEwMCxyYW5rc2VwOjEwMH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pLGg9bi5kYi5nZXRSZXF1aXJlbWVudHMoKSxmPW4uZGIuZ2V0RWxlbWVudHMoKSxkPW4uZGIuZ2V0UmVsYXRpb25zaGlwcygpO2RVZShoLHUsbCkscFVlKGYsdSxsKSxtVWUoZCx1KSxHdSh1KSxnVWUobCx1KSxkLmZvckVhY2goZnVuY3Rpb24odil7ZlVlKGwsdix1LGUsbil9KTtsZXQgcD1oaS5yZWN0X3BhZGRpbmcsbT1sLm5vZGUoKS5nZXRCQm94KCksZz1tLndpZHRoK3AqMix5PW0uaGVpZ2h0K3AqMjtacihsLHksZyxoaS51c2VNYXhXaWR0aCksbC5hdHRyKCJ2aWV3Qm94IixgJHttLngtcH0gJHttLnktcH0gJHtnfSAke3l9YCl9LCJkcmF3IiksSWZlPXtkcmF3OnlVZX19KTt2YXIgUGZlPXt9O3ZyKFBmZSx7ZGlhZ3JhbTooKT0+dlVlfSk7dmFyIHZVZSxCZmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtFZmUoKTtDZmUoKTtfZmUoKTtPZmUoKTt2VWU9e3BhcnNlcjprZmUsZGI6U2ZlLHJlbmRlcmVyOklmZSxzdHlsZXM6QWZlfX0pO3ZhciBUTyxHZmUsJGZlPU0oKCk9PnsidXNlIHN0cmljdCI7VE89ZnVuY3Rpb24oKXt2YXIgdD1vKGZ1bmN0aW9uKEgscSxRLGFlKXtmb3IoUT1RfHx7fSxhZT1ILmxlbmd0aDthZS0tO1FbSFthZV1dPXEpO3JldHVybiBRfSwibyIpLGU9WzEsMl0scj1bMSwzXSxuPVsxLDRdLGk9WzIsNF0sYT1bMSw5XSxzPVsxLDExXSxsPVsxLDEzXSx1PVsxLDE0XSxoPVsxLDE2XSxmPVsxLDE3XSxkPVsxLDE4XSxwPVsxLDI0XSxtPVsxLDI1XSxnPVsxLDI2XSx5PVsxLDI3XSx2PVsxLDI4XSx4PVsxLDI5XSxiPVsxLDMwXSx3PVsxLDMxXSxfPVsxLDMyXSxUPVsxLDMzXSxFPVsxLDM0XSxMPVsxLDM1XSxTPVsxLDM2XSxBPVsxLDM3XSxJPVsxLDM4XSxEPVsxLDM5XSxrPVsxLDQxXSxSPVsxLDQyXSxDPVsxLDQzXSxPPVsxLDQ0XSxOPVsxLDQ1XSxQPVsxLDQ2XSxGPVsxLDQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw0Nyw0OCw0OSw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sQj1bNCw1LDE2LDUwLDUyLDUzXSxHPVs0LDUsMTMsMTQsMTYsMTgsMjEsMjMsMjksMzAsMzEsMzMsMzUsMzYsMzcsMzgsMzksNDEsNDMsNDQsNDYsNTAsNTIsNTMsNTQsNTksNjAsNjEsNjIsNzBdLHo9WzQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw0OSw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sVz1bNCw1LDEzLDE0LDE2LDE4LDIxLDIzLDI5LDMwLDMxLDMzLDM1LDM2LDM3LDM4LDM5LDQxLDQzLDQ0LDQ2LDQ4LDUwLDUyLDUzLDU0LDU5LDYwLDYxLDYyLDcwXSxaPVs0LDUsMTMsMTQsMTYsMTgsMjEsMjMsMjksMzAsMzEsMzMsMzUsMzYsMzcsMzgsMzksNDEsNDMsNDQsNDYsNDcsNTAsNTIsNTMsNTQsNTksNjAsNjEsNjIsNzBdLGo9WzY4LDY5LDcwXSxvZT1bMSwxMjJdLEs9e3RyYWNlOm8oZnVuY3Rpb24oKXt9LCJ0cmFjZSIpLHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsU1BBQ0U6NCxORVdMSU5FOjUsU0Q6Nixkb2N1bWVudDo3LGxpbmU6OCxzdGF0ZW1lbnQ6OSxib3hfc2VjdGlvbjoxMCxib3hfbGluZToxMSxwYXJ0aWNpcGFudF9zdGF0ZW1lbnQ6MTIsY3JlYXRlOjEzLGJveDoxNCxyZXN0T2ZMaW5lOjE1LGVuZDoxNixzaWduYWw6MTcsYXV0b251bWJlcjoxOCxOVU06MTksb2ZmOjIwLGFjdGl2YXRlOjIxLGFjdG9yOjIyLGRlYWN0aXZhdGU6MjMsbm90ZV9zdGF0ZW1lbnQ6MjQsbGlua3Nfc3RhdGVtZW50OjI1LGxpbmtfc3RhdGVtZW50OjI2LHByb3BlcnRpZXNfc3RhdGVtZW50OjI3LGRldGFpbHNfc3RhdGVtZW50OjI4LHRpdGxlOjI5LGxlZ2FjeV90aXRsZTozMCxhY2NfdGl0bGU6MzEsYWNjX3RpdGxlX3ZhbHVlOjMyLGFjY19kZXNjcjozMyxhY2NfZGVzY3JfdmFsdWU6MzQsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZTozNSxsb29wOjM2LHJlY3Q6Mzcsb3B0OjM4LGFsdDozOSxlbHNlX3NlY3Rpb25zOjQwLHBhcjo0MSxwYXJfc2VjdGlvbnM6NDIscGFyX292ZXI6NDMsY3JpdGljYWw6NDQsb3B0aW9uX3NlY3Rpb25zOjQ1LGJyZWFrOjQ2LG9wdGlvbjo0NyxhbmQ6NDgsZWxzZTo0OSxwYXJ0aWNpcGFudDo1MCxBUzo1MSxwYXJ0aWNpcGFudF9hY3Rvcjo1MixkZXN0cm95OjUzLG5vdGU6NTQscGxhY2VtZW50OjU1LHRleHQyOjU2LG92ZXI6NTcsYWN0b3JfcGFpcjo1OCxsaW5rczo1OSxsaW5rOjYwLHByb3BlcnRpZXM6NjEsZGV0YWlsczo2MixzcGFjZUxpc3Q6NjMsIiwiOjY0LGxlZnRfb2Y6NjUscmlnaHRfb2Y6NjYsc2lnbmFsdHlwZTo2NywiKyI6NjgsIi0iOjY5LEFDVE9SOjcwLFNPTElEX09QRU5fQVJST1c6NzEsRE9UVEVEX09QRU5fQVJST1c6NzIsU09MSURfQVJST1c6NzMsQklESVJFQ1RJT05BTF9TT0xJRF9BUlJPVzo3NCxET1RURURfQVJST1c6NzUsQklESVJFQ1RJT05BTF9ET1RURURfQVJST1c6NzYsU09MSURfQ1JPU1M6NzcsRE9UVEVEX0NST1NTOjc4LFNPTElEX1BPSU5UOjc5LERPVFRFRF9QT0lOVDo4MCxUWFQ6ODEsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IlNQQUNFIiw1OiJORVdMSU5FIiw2OiJTRCIsMTM6ImNyZWF0ZSIsMTQ6ImJveCIsMTU6InJlc3RPZkxpbmUiLDE2OiJlbmQiLDE4OiJhdXRvbnVtYmVyIiwxOToiTlVNIiwyMDoib2ZmIiwyMToiYWN0aXZhdGUiLDIzOiJkZWFjdGl2YXRlIiwyOToidGl0bGUiLDMwOiJsZWdhY3lfdGl0bGUiLDMxOiJhY2NfdGl0bGUiLDMyOiJhY2NfdGl0bGVfdmFsdWUiLDMzOiJhY2NfZGVzY3IiLDM0OiJhY2NfZGVzY3JfdmFsdWUiLDM1OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwzNjoibG9vcCIsMzc6InJlY3QiLDM4OiJvcHQiLDM5OiJhbHQiLDQxOiJwYXIiLDQzOiJwYXJfb3ZlciIsNDQ6ImNyaXRpY2FsIiw0NjoiYnJlYWsiLDQ3OiJvcHRpb24iLDQ4OiJhbmQiLDQ5OiJlbHNlIiw1MDoicGFydGljaXBhbnQiLDUxOiJBUyIsNTI6InBhcnRpY2lwYW50X2FjdG9yIiw1MzoiZGVzdHJveSIsNTQ6Im5vdGUiLDU3OiJvdmVyIiw1OToibGlua3MiLDYwOiJsaW5rIiw2MToicHJvcGVydGllcyIsNjI6ImRldGFpbHMiLDY0OiIsIiw2NToibGVmdF9vZiIsNjY6InJpZ2h0X29mIiw2ODoiKyIsNjk6Ii0iLDcwOiJBQ1RPUiIsNzE6IlNPTElEX09QRU5fQVJST1ciLDcyOiJET1RURURfT1BFTl9BUlJPVyIsNzM6IlNPTElEX0FSUk9XIiw3NDoiQklESVJFQ1RJT05BTF9TT0xJRF9BUlJPVyIsNzU6IkRPVFRFRF9BUlJPVyIsNzY6IkJJRElSRUNUSU9OQUxfRE9UVEVEX0FSUk9XIiw3NzoiU09MSURfQ1JPU1MiLDc4OiJET1RURURfQ1JPU1MiLDc5OiJTT0xJRF9QT0lOVCIsODA6IkRPVFRFRF9QT0lOVCIsODE6IlRYVCJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywyXSxbMywyXSxbNywwXSxbNywyXSxbOCwyXSxbOCwxXSxbOCwxXSxbMTAsMF0sWzEwLDJdLFsxMSwyXSxbMTEsMV0sWzExLDFdLFs5LDFdLFs5LDJdLFs5LDRdLFs5LDJdLFs5LDRdLFs5LDNdLFs5LDNdLFs5LDJdLFs5LDNdLFs5LDNdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs5LDRdLFs0NSwxXSxbNDUsNF0sWzQyLDFdLFs0Miw0XSxbNDAsMV0sWzQwLDRdLFsxMiw1XSxbMTIsM10sWzEyLDVdLFsxMiwzXSxbMTIsM10sWzI0LDRdLFsyNCw0XSxbMjUsM10sWzI2LDNdLFsyNywzXSxbMjgsM10sWzYzLDJdLFs2MywxXSxbNTgsM10sWzU4LDFdLFs1NSwxXSxbNTUsMV0sWzE3LDVdLFsxNyw1XSxbMTcsNF0sWzIyLDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbNTYsMV1dLHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihxLFEsYWUsdWUsY2UsdGUsTmUpe3ZhciBzZT10ZS5sZW5ndGgtMTtzd2l0Y2goY2Upe2Nhc2UgMzpyZXR1cm4gdWUuYXBwbHkodGVbc2VdKSx0ZVtzZV07YnJlYWs7Y2FzZSA0OmNhc2UgOTp0aGlzLiQ9W107YnJlYWs7Y2FzZSA1OmNhc2UgMTA6dGVbc2UtMV0ucHVzaCh0ZVtzZV0pLHRoaXMuJD10ZVtzZS0xXTticmVhaztjYXNlIDY6Y2FzZSA3OmNhc2UgMTE6Y2FzZSAxMjp0aGlzLiQ9dGVbc2VdO2JyZWFrO2Nhc2UgODpjYXNlIDEzOnRoaXMuJD1bXTticmVhaztjYXNlIDE1OnRlW3NlXS50eXBlPSJjcmVhdGVQYXJ0aWNpcGFudCIsdGhpcy4kPXRlW3NlXTticmVhaztjYXNlIDE2OnRlW3NlLTFdLnVuc2hpZnQoe3R5cGU6ImJveFN0YXJ0Iixib3hEYXRhOnVlLnBhcnNlQm94RGF0YSh0ZVtzZS0yXSl9KSx0ZVtzZS0xXS5wdXNoKHt0eXBlOiJib3hFbmQiLGJveFRleHQ6dGVbc2UtMl19KSx0aGlzLiQ9dGVbc2UtMV07YnJlYWs7Y2FzZSAxODp0aGlzLiQ9e3R5cGU6InNlcXVlbmNlSW5kZXgiLHNlcXVlbmNlSW5kZXg6TnVtYmVyKHRlW3NlLTJdKSxzZXF1ZW5jZUluZGV4U3RlcDpOdW1iZXIodGVbc2UtMV0pLHNlcXVlbmNlVmlzaWJsZTohMCxzaWduYWxUeXBlOnVlLkxJTkVUWVBFLkFVVE9OVU1CRVJ9O2JyZWFrO2Nhc2UgMTk6dGhpcy4kPXt0eXBlOiJzZXF1ZW5jZUluZGV4IixzZXF1ZW5jZUluZGV4Ok51bWJlcih0ZVtzZS0xXSksc2VxdWVuY2VJbmRleFN0ZXA6MSxzZXF1ZW5jZVZpc2libGU6ITAsc2lnbmFsVHlwZTp1ZS5MSU5FVFlQRS5BVVRPTlVNQkVSfTticmVhaztjYXNlIDIwOnRoaXMuJD17dHlwZToic2VxdWVuY2VJbmRleCIsc2VxdWVuY2VWaXNpYmxlOiExLHNpZ25hbFR5cGU6dWUuTElORVRZUEUuQVVUT05VTUJFUn07YnJlYWs7Y2FzZSAyMTp0aGlzLiQ9e3R5cGU6InNlcXVlbmNlSW5kZXgiLHNlcXVlbmNlVmlzaWJsZTohMCxzaWduYWxUeXBlOnVlLkxJTkVUWVBFLkFVVE9OVU1CRVJ9O2JyZWFrO2Nhc2UgMjI6dGhpcy4kPXt0eXBlOiJhY3RpdmVTdGFydCIsc2lnbmFsVHlwZTp1ZS5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQsYWN0b3I6dGVbc2UtMV0uYWN0b3J9O2JyZWFrO2Nhc2UgMjM6dGhpcy4kPXt0eXBlOiJhY3RpdmVFbmQiLHNpZ25hbFR5cGU6dWUuTElORVRZUEUuQUNUSVZFX0VORCxhY3Rvcjp0ZVtzZS0xXS5hY3Rvcn07YnJlYWs7Y2FzZSAyOTp1ZS5zZXREaWFncmFtVGl0bGUodGVbc2VdLnN1YnN0cmluZyg2KSksdGhpcy4kPXRlW3NlXS5zdWJzdHJpbmcoNik7YnJlYWs7Y2FzZSAzMDp1ZS5zZXREaWFncmFtVGl0bGUodGVbc2VdLnN1YnN0cmluZyg3KSksdGhpcy4kPXRlW3NlXS5zdWJzdHJpbmcoNyk7YnJlYWs7Y2FzZSAzMTp0aGlzLiQ9dGVbc2VdLnRyaW0oKSx1ZS5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMzI6Y2FzZSAzMzp0aGlzLiQ9dGVbc2VdLnRyaW0oKSx1ZS5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMzQ6dGVbc2UtMV0udW5zaGlmdCh7dHlwZToibG9vcFN0YXJ0Iixsb29wVGV4dDp1ZS5wYXJzZU1lc3NhZ2UodGVbc2UtMl0pLHNpZ25hbFR5cGU6dWUuTElORVRZUEUuTE9PUF9TVEFSVH0pLHRlW3NlLTFdLnB1c2goe3R5cGU6Imxvb3BFbmQiLGxvb3BUZXh0OnRlW3NlLTJdLHNpZ25hbFR5cGU6dWUuTElORVRZUEUuTE9PUF9FTkR9KSx0aGlzLiQ9dGVbc2UtMV07YnJlYWs7Y2FzZSAzNTp0ZVtzZS0xXS51bnNoaWZ0KHt0eXBlOiJyZWN0U3RhcnQiLGNvbG9yOnVlLnBhcnNlTWVzc2FnZSh0ZVtzZS0yXSksc2lnbmFsVHlwZTp1ZS5MSU5FVFlQRS5SRUNUX1NUQVJUfSksdGVbc2UtMV0ucHVzaCh7dHlwZToicmVjdEVuZCIsY29sb3I6dWUucGFyc2VNZXNzYWdlKHRlW3NlLTJdKSxzaWduYWxUeXBlOnVlLkxJTkVUWVBFLlJFQ1RfRU5EfSksdGhpcy4kPXRlW3NlLTFdO2JyZWFrO2Nhc2UgMzY6dGVbc2UtMV0udW5zaGlmdCh7dHlwZToib3B0U3RhcnQiLG9wdFRleHQ6dWUucGFyc2VNZXNzYWdlKHRlW3NlLTJdKSxzaWduYWxUeXBlOnVlLkxJTkVUWVBFLk9QVF9TVEFSVH0pLHRlW3NlLTFdLnB1c2goe3R5cGU6Im9wdEVuZCIsb3B0VGV4dDp1ZS5wYXJzZU1lc3NhZ2UodGVbc2UtMl0pLHNpZ25hbFR5cGU6dWUuTElORVRZUEUuT1BUX0VORH0pLHRoaXMuJD10ZVtzZS0xXTticmVhaztjYXNlIDM3OnRlW3NlLTFdLnVuc2hpZnQoe3R5cGU6ImFsdFN0YXJ0IixhbHRUZXh0OnVlLnBhcnNlTWVzc2FnZSh0ZVtzZS0yXSksc2lnbmFsVHlwZTp1ZS5MSU5FVFlQRS5BTFRfU1RBUlR9KSx0ZVtzZS0xXS5wdXNoKHt0eXBlOiJhbHRFbmQiLHNpZ25hbFR5cGU6dWUuTElORVRZUEUuQUxUX0VORH0pLHRoaXMuJD10ZVtzZS0xXTticmVhaztjYXNlIDM4OnRlW3NlLTFdLnVuc2hpZnQoe3R5cGU6InBhclN0YXJ0IixwYXJUZXh0OnVlLnBhcnNlTWVzc2FnZSh0ZVtzZS0yXSksc2lnbmFsVHlwZTp1ZS5MSU5FVFlQRS5QQVJfU1RBUlR9KSx0ZVtzZS0xXS5wdXNoKHt0eXBlOiJwYXJFbmQiLHNpZ25hbFR5cGU6dWUuTElORVRZUEUuUEFSX0VORH0pLHRoaXMuJD10ZVtzZS0xXTticmVhaztjYXNlIDM5OnRlW3NlLTFdLnVuc2hpZnQoe3R5cGU6InBhclN0YXJ0IixwYXJUZXh0OnVlLnBhcnNlTWVzc2FnZSh0ZVtzZS0yXSksc2lnbmFsVHlwZTp1ZS5MSU5FVFlQRS5QQVJfT1ZFUl9TVEFSVH0pLHRlW3NlLTFdLnB1c2goe3R5cGU6InBhckVuZCIsc2lnbmFsVHlwZTp1ZS5MSU5FVFlQRS5QQVJfRU5EfSksdGhpcy4kPXRlW3NlLTFdO2JyZWFrO2Nhc2UgNDA6dGVbc2UtMV0udW5zaGlmdCh7dHlwZToiY3JpdGljYWxTdGFydCIsY3JpdGljYWxUZXh0OnVlLnBhcnNlTWVzc2FnZSh0ZVtzZS0yXSksc2lnbmFsVHlwZTp1ZS5MSU5FVFlQRS5DUklUSUNBTF9TVEFSVH0pLHRlW3NlLTFdLnB1c2goe3R5cGU6ImNyaXRpY2FsRW5kIixzaWduYWxUeXBlOnVlLkxJTkVUWVBFLkNSSVRJQ0FMX0VORH0pLHRoaXMuJD10ZVtzZS0xXTticmVhaztjYXNlIDQxOnRlW3NlLTFdLnVuc2hpZnQoe3R5cGU6ImJyZWFrU3RhcnQiLGJyZWFrVGV4dDp1ZS5wYXJzZU1lc3NhZ2UodGVbc2UtMl0pLHNpZ25hbFR5cGU6dWUuTElORVRZUEUuQlJFQUtfU1RBUlR9KSx0ZVtzZS0xXS5wdXNoKHt0eXBlOiJicmVha0VuZCIsb3B0VGV4dDp1ZS5wYXJzZU1lc3NhZ2UodGVbc2UtMl0pLHNpZ25hbFR5cGU6dWUuTElORVRZUEUuQlJFQUtfRU5EfSksdGhpcy4kPXRlW3NlLTFdO2JyZWFrO2Nhc2UgNDM6dGhpcy4kPXRlW3NlLTNdLmNvbmNhdChbe3R5cGU6Im9wdGlvbiIsb3B0aW9uVGV4dDp1ZS5wYXJzZU1lc3NhZ2UodGVbc2UtMV0pLHNpZ25hbFR5cGU6dWUuTElORVRZUEUuQ1JJVElDQUxfT1BUSU9OfSx0ZVtzZV1dKTticmVhaztjYXNlIDQ1OnRoaXMuJD10ZVtzZS0zXS5jb25jYXQoW3t0eXBlOiJhbmQiLHBhclRleHQ6dWUucGFyc2VNZXNzYWdlKHRlW3NlLTFdKSxzaWduYWxUeXBlOnVlLkxJTkVUWVBFLlBBUl9BTkR9LHRlW3NlXV0pO2JyZWFrO2Nhc2UgNDc6dGhpcy4kPXRlW3NlLTNdLmNvbmNhdChbe3R5cGU6ImVsc2UiLGFsdFRleHQ6dWUucGFyc2VNZXNzYWdlKHRlW3NlLTFdKSxzaWduYWxUeXBlOnVlLkxJTkVUWVBFLkFMVF9FTFNFfSx0ZVtzZV1dKTticmVhaztjYXNlIDQ4OnRlW3NlLTNdLmRyYXc9InBhcnRpY2lwYW50Iix0ZVtzZS0zXS50eXBlPSJhZGRQYXJ0aWNpcGFudCIsdGVbc2UtM10uZGVzY3JpcHRpb249dWUucGFyc2VNZXNzYWdlKHRlW3NlLTFdKSx0aGlzLiQ9dGVbc2UtM107YnJlYWs7Y2FzZSA0OTp0ZVtzZS0xXS5kcmF3PSJwYXJ0aWNpcGFudCIsdGVbc2UtMV0udHlwZT0iYWRkUGFydGljaXBhbnQiLHRoaXMuJD10ZVtzZS0xXTticmVhaztjYXNlIDUwOnRlW3NlLTNdLmRyYXc9ImFjdG9yIix0ZVtzZS0zXS50eXBlPSJhZGRQYXJ0aWNpcGFudCIsdGVbc2UtM10uZGVzY3JpcHRpb249dWUucGFyc2VNZXNzYWdlKHRlW3NlLTFdKSx0aGlzLiQ9dGVbc2UtM107YnJlYWs7Y2FzZSA1MTp0ZVtzZS0xXS5kcmF3PSJhY3RvciIsdGVbc2UtMV0udHlwZT0iYWRkUGFydGljaXBhbnQiLHRoaXMuJD10ZVtzZS0xXTticmVhaztjYXNlIDUyOnRlW3NlLTFdLnR5cGU9ImRlc3Ryb3lQYXJ0aWNpcGFudCIsdGhpcy4kPXRlW3NlLTFdO2JyZWFrO2Nhc2UgNTM6dGhpcy4kPVt0ZVtzZS0xXSx7dHlwZToiYWRkTm90ZSIscGxhY2VtZW50OnRlW3NlLTJdLGFjdG9yOnRlW3NlLTFdLmFjdG9yLHRleHQ6dGVbc2VdfV07YnJlYWs7Y2FzZSA1NDp0ZVtzZS0yXT1bXS5jb25jYXQodGVbc2UtMV0sdGVbc2UtMV0pLnNsaWNlKDAsMiksdGVbc2UtMl1bMF09dGVbc2UtMl1bMF0uYWN0b3IsdGVbc2UtMl1bMV09dGVbc2UtMl1bMV0uYWN0b3IsdGhpcy4kPVt0ZVtzZS0xXSx7dHlwZToiYWRkTm90ZSIscGxhY2VtZW50OnVlLlBMQUNFTUVOVC5PVkVSLGFjdG9yOnRlW3NlLTJdLnNsaWNlKDAsMiksdGV4dDp0ZVtzZV19XTticmVhaztjYXNlIDU1OnRoaXMuJD1bdGVbc2UtMV0se3R5cGU6ImFkZExpbmtzIixhY3Rvcjp0ZVtzZS0xXS5hY3Rvcix0ZXh0OnRlW3NlXX1dO2JyZWFrO2Nhc2UgNTY6dGhpcy4kPVt0ZVtzZS0xXSx7dHlwZToiYWRkQUxpbmsiLGFjdG9yOnRlW3NlLTFdLmFjdG9yLHRleHQ6dGVbc2VdfV07YnJlYWs7Y2FzZSA1Nzp0aGlzLiQ9W3RlW3NlLTFdLHt0eXBlOiJhZGRQcm9wZXJ0aWVzIixhY3Rvcjp0ZVtzZS0xXS5hY3Rvcix0ZXh0OnRlW3NlXX1dO2JyZWFrO2Nhc2UgNTg6dGhpcy4kPVt0ZVtzZS0xXSx7dHlwZToiYWRkRGV0YWlscyIsYWN0b3I6dGVbc2UtMV0uYWN0b3IsdGV4dDp0ZVtzZV19XTticmVhaztjYXNlIDYxOnRoaXMuJD1bdGVbc2UtMl0sdGVbc2VdXTticmVhaztjYXNlIDYyOnRoaXMuJD10ZVtzZV07YnJlYWs7Y2FzZSA2Mzp0aGlzLiQ9dWUuUExBQ0VNRU5ULkxFRlRPRjticmVhaztjYXNlIDY0OnRoaXMuJD11ZS5QTEFDRU1FTlQuUklHSFRPRjticmVhaztjYXNlIDY1OnRoaXMuJD1bdGVbc2UtNF0sdGVbc2UtMV0se3R5cGU6ImFkZE1lc3NhZ2UiLGZyb206dGVbc2UtNF0uYWN0b3IsdG86dGVbc2UtMV0uYWN0b3Isc2lnbmFsVHlwZTp0ZVtzZS0zXSxtc2c6dGVbc2VdLGFjdGl2YXRlOiEwfSx7dHlwZToiYWN0aXZlU3RhcnQiLHNpZ25hbFR5cGU6dWUuTElORVRZUEUuQUNUSVZFX1NUQVJULGFjdG9yOnRlW3NlLTFdLmFjdG9yfV07YnJlYWs7Y2FzZSA2Njp0aGlzLiQ9W3RlW3NlLTRdLHRlW3NlLTFdLHt0eXBlOiJhZGRNZXNzYWdlIixmcm9tOnRlW3NlLTRdLmFjdG9yLHRvOnRlW3NlLTFdLmFjdG9yLHNpZ25hbFR5cGU6dGVbc2UtM10sbXNnOnRlW3NlXX0se3R5cGU6ImFjdGl2ZUVuZCIsc2lnbmFsVHlwZTp1ZS5MSU5FVFlQRS5BQ1RJVkVfRU5ELGFjdG9yOnRlW3NlLTRdLmFjdG9yfV07YnJlYWs7Y2FzZSA2Nzp0aGlzLiQ9W3RlW3NlLTNdLHRlW3NlLTFdLHt0eXBlOiJhZGRNZXNzYWdlIixmcm9tOnRlW3NlLTNdLmFjdG9yLHRvOnRlW3NlLTFdLmFjdG9yLHNpZ25hbFR5cGU6dGVbc2UtMl0sbXNnOnRlW3NlXX1dO2JyZWFrO2Nhc2UgNjg6dGhpcy4kPXt0eXBlOiJhZGRQYXJ0aWNpcGFudCIsYWN0b3I6dGVbc2VdfTticmVhaztjYXNlIDY5OnRoaXMuJD11ZS5MSU5FVFlQRS5TT0xJRF9PUEVOO2JyZWFrO2Nhc2UgNzA6dGhpcy4kPXVlLkxJTkVUWVBFLkRPVFRFRF9PUEVOO2JyZWFrO2Nhc2UgNzE6dGhpcy4kPXVlLkxJTkVUWVBFLlNPTElEO2JyZWFrO2Nhc2UgNzI6dGhpcy4kPXVlLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfU09MSUQ7YnJlYWs7Y2FzZSA3Mzp0aGlzLiQ9dWUuTElORVRZUEUuRE9UVEVEO2JyZWFrO2Nhc2UgNzQ6dGhpcy4kPXVlLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfRE9UVEVEO2JyZWFrO2Nhc2UgNzU6dGhpcy4kPXVlLkxJTkVUWVBFLlNPTElEX0NST1NTO2JyZWFrO2Nhc2UgNzY6dGhpcy4kPXVlLkxJTkVUWVBFLkRPVFRFRF9DUk9TUzticmVhaztjYXNlIDc3OnRoaXMuJD11ZS5MSU5FVFlQRS5TT0xJRF9QT0lOVDticmVhaztjYXNlIDc4OnRoaXMuJD11ZS5MSU5FVFlQRS5ET1RURURfUE9JTlQ7YnJlYWs7Y2FzZSA3OTp0aGlzLiQ9dWUucGFyc2VNZXNzYWdlKHRlW3NlXS50cmltKCkuc3Vic3RyaW5nKDEpKTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OmUsNTpyLDY6bn0sezE6WzNdfSx7Mzo1LDQ6ZSw1OnIsNjpufSx7Mzo2LDQ6ZSw1OnIsNjpufSx0KFsxLDQsNSwxMywxNCwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0saSx7Nzo3fSksezE6WzIsMV19LHsxOlsyLDJdfSx7MTpbMiwzXSw0OmEsNTpzLDg6OCw5OjEwLDEyOjEyLDEzOmwsMTQ6dSwxNzoxNSwxODpoLDIxOmYsMjI6NDAsMjM6ZCwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpwLDMwOm0sMzE6ZywzMzp5LDM1OnYsMzY6eCwzNzpiLDM4OncsMzk6Xyw0MTpULDQzOkUsNDQ6TCw0NjpTLDUwOkEsNTI6SSw1MzpELDU0OmssNTk6Uiw2MDpDLDYxOk8sNjI6Tiw3MDpQfSx0KEYsWzIsNV0pLHs5OjQ3LDEyOjEyLDEzOmwsMTQ6dSwxNzoxNSwxODpoLDIxOmYsMjI6NDAsMjM6ZCwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpwLDMwOm0sMzE6ZywzMzp5LDM1OnYsMzY6eCwzNzpiLDM4OncsMzk6Xyw0MTpULDQzOkUsNDQ6TCw0NjpTLDUwOkEsNTI6SSw1MzpELDU0OmssNTk6Uiw2MDpDLDYxOk8sNjI6Tiw3MDpQfSx0KEYsWzIsN10pLHQoRixbMiw4XSksdChGLFsyLDE0XSksezEyOjQ4LDUwOkEsNTI6SSw1MzpEfSx7MTU6WzEsNDldfSx7NTpbMSw1MF19LHs1OlsxLDUzXSwxOTpbMSw1MV0sMjA6WzEsNTJdfSx7MjI6NTQsNzA6UH0sezIyOjU1LDcwOlB9LHs1OlsxLDU2XX0sezU6WzEsNTddfSx7NTpbMSw1OF19LHs1OlsxLDU5XX0sezU6WzEsNjBdfSx0KEYsWzIsMjldKSx0KEYsWzIsMzBdKSx7MzI6WzEsNjFdfSx7MzQ6WzEsNjJdfSx0KEYsWzIsMzNdKSx7MTU6WzEsNjNdfSx7MTU6WzEsNjRdfSx7MTU6WzEsNjVdfSx7MTU6WzEsNjZdfSx7MTU6WzEsNjddfSx7MTU6WzEsNjhdfSx7MTU6WzEsNjldfSx7MTU6WzEsNzBdfSx7MjI6NzEsNzA6UH0sezIyOjcyLDcwOlB9LHsyMjo3Myw3MDpQfSx7Njc6NzQsNzE6WzEsNzVdLDcyOlsxLDc2XSw3MzpbMSw3N10sNzQ6WzEsNzhdLDc1OlsxLDc5XSw3NjpbMSw4MF0sNzc6WzEsODFdLDc4OlsxLDgyXSw3OTpbMSw4M10sODA6WzEsODRdfSx7NTU6ODUsNTc6WzEsODZdLDY1OlsxLDg3XSw2NjpbMSw4OF19LHsyMjo4OSw3MDpQfSx7MjI6OTAsNzA6UH0sezIyOjkxLDcwOlB9LHsyMjo5Miw3MDpQfSx0KFs1LDUxLDY0LDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxXSxbMiw2OF0pLHQoRixbMiw2XSksdChGLFsyLDE1XSksdChCLFsyLDldLHsxMDo5M30pLHQoRixbMiwxN10pLHs1OlsxLDk1XSwxOTpbMSw5NF19LHs1OlsxLDk2XX0sdChGLFsyLDIxXSksezU6WzEsOTddfSx7NTpbMSw5OF19LHQoRixbMiwyNF0pLHQoRixbMiwyNV0pLHQoRixbMiwyNl0pLHQoRixbMiwyN10pLHQoRixbMiwyOF0pLHQoRixbMiwzMV0pLHQoRixbMiwzMl0pLHQoRyxpLHs3Ojk5fSksdChHLGksezc6MTAwfSksdChHLGksezc6MTAxfSksdCh6LGksezQwOjEwMiw3OjEwM30pLHQoVyxpLHs0MjoxMDQsNzoxMDV9KSx0KFcsaSx7NzoxMDUsNDI6MTA2fSksdChaLGksezQ1OjEwNyw3OjEwOH0pLHQoRyxpLHs3OjEwOX0pLHs1OlsxLDExMV0sNTE6WzEsMTEwXX0sezU6WzEsMTEzXSw1MTpbMSwxMTJdfSx7NTpbMSwxMTRdfSx7MjI6MTE3LDY4OlsxLDExNV0sNjk6WzEsMTE2XSw3MDpQfSx0KGosWzIsNjldKSx0KGosWzIsNzBdKSx0KGosWzIsNzFdKSx0KGosWzIsNzJdKSx0KGosWzIsNzNdKSx0KGosWzIsNzRdKSx0KGosWzIsNzVdKSx0KGosWzIsNzZdKSx0KGosWzIsNzddKSx0KGosWzIsNzhdKSx7MjI6MTE4LDcwOlB9LHsyMjoxMjAsNTg6MTE5LDcwOlB9LHs3MDpbMiw2M119LHs3MDpbMiw2NF19LHs1NjoxMjEsODE6b2V9LHs1NjoxMjMsODE6b2V9LHs1NjoxMjQsODE6b2V9LHs1NjoxMjUsODE6b2V9LHs0OlsxLDEyOF0sNTpbMSwxMzBdLDExOjEyNywxMjoxMjksMTY6WzEsMTI2XSw1MDpBLDUyOkksNTM6RH0sezU6WzEsMTMxXX0sdChGLFsyLDE5XSksdChGLFsyLDIwXSksdChGLFsyLDIyXSksdChGLFsyLDIzXSksezQ6YSw1OnMsODo4LDk6MTAsMTI6MTIsMTM6bCwxNDp1LDE2OlsxLDEzMl0sMTc6MTUsMTg6aCwyMTpmLDIyOjQwLDIzOmQsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6cCwzMDptLDMxOmcsMzM6eSwzNTp2LDM2OngsMzc6YiwzODp3LDM5Ol8sNDE6VCw0MzpFLDQ0OkwsNDY6Uyw1MDpBLDUyOkksNTM6RCw1NDprLDU5OlIsNjA6Qyw2MTpPLDYyOk4sNzA6UH0sezQ6YSw1OnMsODo4LDk6MTAsMTI6MTIsMTM6bCwxNDp1LDE2OlsxLDEzM10sMTc6MTUsMTg6aCwyMTpmLDIyOjQwLDIzOmQsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6cCwzMDptLDMxOmcsMzM6eSwzNTp2LDM2OngsMzc6YiwzODp3LDM5Ol8sNDE6VCw0MzpFLDQ0OkwsNDY6Uyw1MDpBLDUyOkksNTM6RCw1NDprLDU5OlIsNjA6Qyw2MTpPLDYyOk4sNzA6UH0sezQ6YSw1OnMsODo4LDk6MTAsMTI6MTIsMTM6bCwxNDp1LDE2OlsxLDEzNF0sMTc6MTUsMTg6aCwyMTpmLDIyOjQwLDIzOmQsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6cCwzMDptLDMxOmcsMzM6eSwzNTp2LDM2OngsMzc6YiwzODp3LDM5Ol8sNDE6VCw0MzpFLDQ0OkwsNDY6Uyw1MDpBLDUyOkksNTM6RCw1NDprLDU5OlIsNjA6Qyw2MTpPLDYyOk4sNzA6UH0sezE2OlsxLDEzNV19LHs0OmEsNTpzLDg6OCw5OjEwLDEyOjEyLDEzOmwsMTQ6dSwxNjpbMiw0Nl0sMTc6MTUsMTg6aCwyMTpmLDIyOjQwLDIzOmQsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6cCwzMDptLDMxOmcsMzM6eSwzNTp2LDM2OngsMzc6YiwzODp3LDM5Ol8sNDE6VCw0MzpFLDQ0OkwsNDY6Uyw0OTpbMSwxMzZdLDUwOkEsNTI6SSw1MzpELDU0OmssNTk6Uiw2MDpDLDYxOk8sNjI6Tiw3MDpQfSx7MTY6WzEsMTM3XX0sezQ6YSw1OnMsODo4LDk6MTAsMTI6MTIsMTM6bCwxNDp1LDE2OlsyLDQ0XSwxNzoxNSwxODpoLDIxOmYsMjI6NDAsMjM6ZCwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpwLDMwOm0sMzE6ZywzMzp5LDM1OnYsMzY6eCwzNzpiLDM4OncsMzk6Xyw0MTpULDQzOkUsNDQ6TCw0NjpTLDQ4OlsxLDEzOF0sNTA6QSw1MjpJLDUzOkQsNTQ6ayw1OTpSLDYwOkMsNjE6Tyw2MjpOLDcwOlB9LHsxNjpbMSwxMzldfSx7MTY6WzEsMTQwXX0sezQ6YSw1OnMsODo4LDk6MTAsMTI6MTIsMTM6bCwxNDp1LDE2OlsyLDQyXSwxNzoxNSwxODpoLDIxOmYsMjI6NDAsMjM6ZCwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpwLDMwOm0sMzE6ZywzMzp5LDM1OnYsMzY6eCwzNzpiLDM4OncsMzk6Xyw0MTpULDQzOkUsNDQ6TCw0NjpTLDQ3OlsxLDE0MV0sNTA6QSw1MjpJLDUzOkQsNTQ6ayw1OTpSLDYwOkMsNjE6Tyw2MjpOLDcwOlB9LHs0OmEsNTpzLDg6OCw5OjEwLDEyOjEyLDEzOmwsMTQ6dSwxNjpbMSwxNDJdLDE3OjE1LDE4OmgsMjE6ZiwyMjo0MCwyMzpkLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OnAsMzA6bSwzMTpnLDMzOnksMzU6diwzNjp4LDM3OmIsMzg6dywzOTpfLDQxOlQsNDM6RSw0NDpMLDQ2OlMsNTA6QSw1MjpJLDUzOkQsNTQ6ayw1OTpSLDYwOkMsNjE6Tyw2MjpOLDcwOlB9LHsxNTpbMSwxNDNdfSx0KEYsWzIsNDldKSx7MTU6WzEsMTQ0XX0sdChGLFsyLDUxXSksdChGLFsyLDUyXSksezIyOjE0NSw3MDpQfSx7MjI6MTQ2LDcwOlB9LHs1NjoxNDcsODE6b2V9LHs1NjoxNDgsODE6b2V9LHs1NjoxNDksODE6b2V9LHs2NDpbMSwxNTBdLDgxOlsyLDYyXX0sezU6WzIsNTVdfSx7NTpbMiw3OV19LHs1OlsyLDU2XX0sezU6WzIsNTddfSx7NTpbMiw1OF19LHQoRixbMiwxNl0pLHQoQixbMiwxMF0pLHsxMjoxNTEsNTA6QSw1MjpJLDUzOkR9LHQoQixbMiwxMl0pLHQoQixbMiwxM10pLHQoRixbMiwxOF0pLHQoRixbMiwzNF0pLHQoRixbMiwzNV0pLHQoRixbMiwzNl0pLHQoRixbMiwzN10pLHsxNTpbMSwxNTJdfSx0KEYsWzIsMzhdKSx7MTU6WzEsMTUzXX0sdChGLFsyLDM5XSksdChGLFsyLDQwXSksezE1OlsxLDE1NF19LHQoRixbMiw0MV0pLHs1OlsxLDE1NV19LHs1OlsxLDE1Nl19LHs1NjoxNTcsODE6b2V9LHs1NjoxNTgsODE6b2V9LHs1OlsyLDY3XX0sezU6WzIsNTNdfSx7NTpbMiw1NF19LHsyMjoxNTksNzA6UH0sdChCLFsyLDExXSksdCh6LGksezc6MTAzLDQwOjE2MH0pLHQoVyxpLHs3OjEwNSw0MjoxNjF9KSx0KFosaSx7NzoxMDgsNDU6MTYyfSksdChGLFsyLDQ4XSksdChGLFsyLDUwXSksezU6WzIsNjVdfSx7NTpbMiw2Nl19LHs4MTpbMiw2MV19LHsxNjpbMiw0N119LHsxNjpbMiw0NV19LHsxNjpbMiw0M119XSxkZWZhdWx0QWN0aW9uczp7NTpbMiwxXSw2OlsyLDJdLDg3OlsyLDYzXSw4ODpbMiw2NF0sMTIxOlsyLDU1XSwxMjI6WzIsNzldLDEyMzpbMiw1Nl0sMTI0OlsyLDU3XSwxMjU6WzIsNThdLDE0NzpbMiw2N10sMTQ4OlsyLDUzXSwxNDk6WzIsNTRdLDE1NzpbMiw2NV0sMTU4OlsyLDY2XSwxNTk6WzIsNjFdLDE2MDpbMiw0N10sMTYxOlsyLDQ1XSwxNjI6WzIsNDNdfSxwYXJzZUVycm9yOm8oZnVuY3Rpb24ocSxRKXtpZihRLnJlY292ZXJhYmxlKXRoaXMudHJhY2UocSk7ZWxzZXt2YXIgYWU9bmV3IEVycm9yKHEpO3Rocm93IGFlLmhhc2g9USxhZX19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihxKXt2YXIgUT10aGlzLGFlPVswXSx1ZT1bXSxjZT1bbnVsbF0sdGU9W10sTmU9dGhpcy50YWJsZSxzZT0iIixrZT0wLFJlPTAsQ2U9MCxQZT0yLEllPTEsJGU9dGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkseWU9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxYPXt5eTp7fX07Zm9yKHZhciBmZSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGZlKSYmKFgueXlbZmVdPXRoaXMueXlbZmVdKTt5ZS5zZXRJbnB1dChxLFgueXkpLFgueXkubGV4ZXI9eWUsWC55eS5wYXJzZXI9dGhpcyx0eXBlb2YgeWUueXlsbG9jPiJ1IiYmKHllLnl5bGxvYz17fSk7dmFyIGhlPXllLnl5bGxvYzt0ZS5wdXNoKGhlKTt2YXIgZ2U9eWUub3B0aW9ucyYmeWUub3B0aW9ucy5yYW5nZXM7dHlwZW9mIFgueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9WC55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBuZShrdCl7YWUubGVuZ3RoPWFlLmxlbmd0aC0yKmt0LGNlLmxlbmd0aD1jZS5sZW5ndGgta3QsdGUubGVuZ3RoPXRlLmxlbmd0aC1rdH1vKG5lLCJwb3BTdGFjayIpO2Z1bmN0aW9uIHZlKCl7dmFyIGt0O3JldHVybiBrdD11ZS5wb3AoKXx8eWUubGV4KCl8fEllLHR5cGVvZiBrdCE9Im51bWJlciImJihrdCBpbnN0YW5jZW9mIEFycmF5JiYodWU9a3Qsa3Q9dWUucG9wKCkpLGt0PVEuc3ltYm9sc19ba3RdfHxrdCksa3R9byh2ZSwibGV4Iik7Zm9yKHZhciBVLFRlLGllLEVlLEFlLEdlLEJlPXt9LG1lLEhlLE9lLGV0Ozspe2lmKGllPWFlW2FlLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2llXT9FZT10aGlzLmRlZmF1bHRBY3Rpb25zW2llXTooKFU9PT1udWxsfHx0eXBlb2YgVT4idSIpJiYoVT12ZSgpKSxFZT1OZVtpZV0mJk5lW2llXVtVXSksdHlwZW9mIEVlPiJ1Inx8IUVlLmxlbmd0aHx8IUVlWzBdKXt2YXIgYnQ9IiI7ZXQ9W107Zm9yKG1lIGluIE5lW2llXSl0aGlzLnRlcm1pbmFsc19bbWVdJiZtZT5QZSYmZXQucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW21lXSsiJyIpO3llLnNob3dQb3NpdGlvbj9idD0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhrZSsxKStgOgpgK3llLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArZXQuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tVXXx8VSkrIiciOmJ0PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGtlKzEpKyI6IFVuZXhwZWN0ZWQgIisoVT09SWU/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bVV18fFUpKyInIiksdGhpcy5wYXJzZUVycm9yKGJ0LHt0ZXh0OnllLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tVXXx8VSxsaW5lOnllLnl5bGluZW5vLGxvYzpoZSxleHBlY3RlZDpldH0pfWlmKEVlWzBdaW5zdGFuY2VvZiBBcnJheSYmRWUubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitpZSsiLCB0b2tlbjogIitVKTtzd2l0Y2goRWVbMF0pe2Nhc2UgMTphZS5wdXNoKFUpLGNlLnB1c2goeWUueXl0ZXh0KSx0ZS5wdXNoKHllLnl5bGxvYyksYWUucHVzaChFZVsxXSksVT1udWxsLFRlPyhVPVRlLFRlPW51bGwpOihSZT15ZS55eWxlbmcsc2U9eWUueXl0ZXh0LGtlPXllLnl5bGluZW5vLGhlPXllLnl5bGxvYyxDZT4wJiZDZS0tKTticmVhaztjYXNlIDI6aWYoSGU9dGhpcy5wcm9kdWN0aW9uc19bRWVbMV1dWzFdLEJlLiQ9Y2VbY2UubGVuZ3RoLUhlXSxCZS5fJD17Zmlyc3RfbGluZTp0ZVt0ZS5sZW5ndGgtKEhlfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6dGVbdGUubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGVbdGUubGVuZ3RoLShIZXx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0ZVt0ZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGdlJiYoQmUuXyQucmFuZ2U9W3RlW3RlLmxlbmd0aC0oSGV8fDEpXS5yYW5nZVswXSx0ZVt0ZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxHZT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoQmUsW3NlLFJlLGtlLFgueXksRWVbMV0sY2UsdGVdLmNvbmNhdCgkZSkpLHR5cGVvZiBHZTwidSIpcmV0dXJuIEdlO0hlJiYoYWU9YWUuc2xpY2UoMCwtMSpIZSoyKSxjZT1jZS5zbGljZSgwLC0xKkhlKSx0ZT10ZS5zbGljZSgwLC0xKkhlKSksYWUucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tFZVsxXV1bMF0pLGNlLnB1c2goQmUuJCksdGUucHVzaChCZS5fJCksT2U9TmVbYWVbYWUubGVuZ3RoLTJdXVthZVthZS5sZW5ndGgtMV1dLGFlLnB1c2goT2UpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9LCJwYXJzZSIpfSxlZT1mdW5jdGlvbigpe3ZhciBIPXtFT0Y6MSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oUSxhZSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihRLGFlKTtlbHNlIHRocm93IG5ldyBFcnJvcihRKX0sInBhcnNlRXJyb3IiKSxzZXRJbnB1dDpvKGZ1bmN0aW9uKHEsUSl7cmV0dXJuIHRoaXMueXk9UXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9cSx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30sInNldElucHV0IiksaW5wdXQ6byhmdW5jdGlvbigpe3ZhciBxPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1xLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1xLHRoaXMubWF0Y2hlZCs9cTt2YXIgUT1xLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gUT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSkscX0sImlucHV0IiksdW5wdXQ6byhmdW5jdGlvbihxKXt2YXIgUT1xLmxlbmd0aCxhZT1xLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9cSt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtUSksdGhpcy5vZmZzZXQtPVE7dmFyIHVlPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLGFlLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09YWUubGVuZ3RoLTEpO3ZhciBjZT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YWU/KGFlLmxlbmd0aD09PXVlLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrdWVbdWUubGVuZ3RoLWFlLmxlbmd0aF0ubGVuZ3RoLWFlWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tUX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtjZVswXSxjZVswXSt0aGlzLnl5bGVuZy1RXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24ocSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHEpKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBxPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4ocS5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Euc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgcT10aGlzLm1hdGNoO3JldHVybiBxLmxlbmd0aDwyMCYmKHErPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXEubGVuZ3RoKSksKHEuc3Vic3RyKDAsMjApKyhxLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIHE9dGhpcy5wYXN0SW5wdXQoKSxRPW5ldyBBcnJheShxLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHErdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK1ErIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKHEsUSl7dmFyIGFlLHVlLGNlO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihjZT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihjZS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSx1ZT1xWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSx1ZSYmKHRoaXMueXlsaW5lbm8rPXVlLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnVlP3VlW3VlLmxlbmd0aC0xXS5sZW5ndGgtdWVbdWUubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rcVswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1xWzBdLHRoaXMubWF0Y2grPXFbMF0sdGhpcy5tYXRjaGVzPXEsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UocVswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9cVswXSxhZT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxRLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLGFlKXJldHVybiBhZTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgdGUgaW4gY2UpdGhpc1t0ZV09Y2VbdGVdO3JldHVybiExfXJldHVybiExfSwidGVzdF9tYXRjaCIpLG5leHQ6byhmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBxLFEsYWUsdWU7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgY2U9dGhpcy5fY3VycmVudFJ1bGVzKCksdGU9MDt0ZTxjZS5sZW5ndGg7dGUrKylpZihhZT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2NlW3RlXV0pLGFlJiYoIVF8fGFlWzBdLmxlbmd0aD5RWzBdLmxlbmd0aCkpe2lmKFE9YWUsdWU9dGUsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYocT10aGlzLnRlc3RfbWF0Y2goYWUsY2VbdGVdKSxxIT09ITEpcmV0dXJuIHE7aWYodGhpcy5fYmFja3RyYWNrKXtRPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIFE/KHE9dGhpcy50ZXN0X21hdGNoKFEsY2VbdWVdKSxxIT09ITE/cTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBRPXRoaXMubmV4dCgpO3JldHVybiBRfHx0aGlzLmxleCgpfSwibGV4IiksYmVnaW46byhmdW5jdGlvbihRKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goUSl9LCJiZWdpbiIpLHBvcFN0YXRlOm8oZnVuY3Rpb24oKXt2YXIgUT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBRPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24oUSl7cmV0dXJuIFE9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhRfHwwKSxRPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbUV06IklOSVRJQUwifSwidG9wU3RhdGUiKSxwdXNoU3RhdGU6byhmdW5jdGlvbihRKXt0aGlzLmJlZ2luKFEpfSwicHVzaFN0YXRlIiksc3RhdGVTdGFja1NpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sInN0YXRlU3RhY2tTaXplIiksb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oUSxhZSx1ZSxjZSl7dmFyIHRlPWNlO3N3aXRjaCh1ZSl7Y2FzZSAwOnJldHVybiA1O2Nhc2UgMTpicmVhaztjYXNlIDI6YnJlYWs7Y2FzZSAzOmJyZWFrO2Nhc2UgNDpicmVhaztjYXNlIDU6YnJlYWs7Y2FzZSA2OnJldHVybiAxOTtjYXNlIDc6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwxNDticmVhaztjYXNlIDg6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksNTA7YnJlYWs7Y2FzZSA5OnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDUyO2JyZWFrO2Nhc2UgMTA6cmV0dXJuIDEzO2Nhc2UgMTE6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksNTM7YnJlYWs7Y2FzZSAxMjpyZXR1cm4gYWUueXl0ZXh0PWFlLnl5dGV4dC50cmltKCksdGhpcy5iZWdpbigiQUxJQVMiKSw3MDticmVhaztjYXNlIDEzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oIkxJTkUiKSw1MTticmVhaztjYXNlIDE0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDU7YnJlYWs7Y2FzZSAxNTpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDM2O2JyZWFrO2Nhc2UgMTY6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwzNzticmVhaztjYXNlIDE3OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMzg7YnJlYWs7Y2FzZSAxODpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDM5O2JyZWFrO2Nhc2UgMTk6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0OTticmVhaztjYXNlIDIwOnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDE7YnJlYWs7Y2FzZSAyMTpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQzO2JyZWFrO2Nhc2UgMjI6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0ODticmVhaztjYXNlIDIzOnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDQ7YnJlYWs7Y2FzZSAyNDpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQ3O2JyZWFrO2Nhc2UgMjU6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0NjticmVhaztjYXNlIDI2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTU7YnJlYWs7Y2FzZSAyNzpyZXR1cm4gMTY7Y2FzZSAyODpyZXR1cm4gNjU7Y2FzZSAyOTpyZXR1cm4gNjY7Y2FzZSAzMDpyZXR1cm4gNTk7Y2FzZSAzMTpyZXR1cm4gNjA7Y2FzZSAzMjpyZXR1cm4gNjE7Y2FzZSAzMzpyZXR1cm4gNjI7Y2FzZSAzNDpyZXR1cm4gNTc7Y2FzZSAzNTpyZXR1cm4gNTQ7Y2FzZSAzNjpyZXR1cm4gdGhpcy5iZWdpbigiSUQiKSwyMTticmVhaztjYXNlIDM3OnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDIzO2JyZWFrO2Nhc2UgMzg6cmV0dXJuIDI5O2Nhc2UgMzk6cmV0dXJuIDMwO2Nhc2UgNDA6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDMxO2JyZWFrO2Nhc2UgNDE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjticmVhaztjYXNlIDQyOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzMzticmVhaztjYXNlIDQzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7YnJlYWs7Y2FzZSA0NDp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSA0NTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA0NjpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSA0NzpyZXR1cm4gNjtjYXNlIDQ4OnJldHVybiAxODtjYXNlIDQ5OnJldHVybiAyMDtjYXNlIDUwOnJldHVybiA2NDtjYXNlIDUxOnJldHVybiA1O2Nhc2UgNTI6cmV0dXJuIGFlLnl5dGV4dD1hZS55eXRleHQudHJpbSgpLDcwO2JyZWFrO2Nhc2UgNTM6cmV0dXJuIDczO2Nhc2UgNTQ6cmV0dXJuIDc0O2Nhc2UgNTU6cmV0dXJuIDc1O2Nhc2UgNTY6cmV0dXJuIDc2O2Nhc2UgNTc6cmV0dXJuIDcxO2Nhc2UgNTg6cmV0dXJuIDcyO2Nhc2UgNTk6cmV0dXJuIDc3O2Nhc2UgNjA6cmV0dXJuIDc4O2Nhc2UgNjE6cmV0dXJuIDc5O2Nhc2UgNjI6cmV0dXJuIDgwO2Nhc2UgNjM6cmV0dXJuIDgxO2Nhc2UgNjQ6cmV0dXJuIDY4O2Nhc2UgNjU6cmV0dXJuIDY5O2Nhc2UgNjY6cmV0dXJuIDU7Y2FzZSA2NzpyZXR1cm4iSU5WQUxJRCJ9fSwiYW5vbnltb3VzIikscnVsZXM6Wy9eKD86W1xuXSspL2ksL14oPzpccyspL2ksL14oPzooKD8hXG4pXHMpKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/OlswLTldKyg/PVsgXG5dKykpL2ksL14oPzpib3hcYikvaSwvXig/OnBhcnRpY2lwYW50XGIpL2ksL14oPzphY3RvclxiKS9pLC9eKD86Y3JlYXRlXGIpL2ksL14oPzpkZXN0cm95XGIpL2ksL14oPzpbXlw8LT5cLT46XG4sO10rPyhbXC1dKlteXDwtPlwtPjpcbiw7XSs/KSo/KD89KCg/IVxuKVxzKSthcyg/IVxuKVxzfFsjXG47XXwkKSkvaSwvXig/OmFzXGIpL2ksL14oPzooPzopKS9pLC9eKD86bG9vcFxiKS9pLC9eKD86cmVjdFxiKS9pLC9eKD86b3B0XGIpL2ksL14oPzphbHRcYikvaSwvXig/OmVsc2VcYikvaSwvXig/OnBhclxiKS9pLC9eKD86cGFyX292ZXJcYikvaSwvXig/OmFuZFxiKS9pLC9eKD86Y3JpdGljYWxcYikvaSwvXig/Om9wdGlvblxiKS9pLC9eKD86YnJlYWtcYikvaSwvXig/Oig/Ols6XT8oPzpubyk/d3JhcCk/W14jXG47XSopL2ksL14oPzplbmRcYikvaSwvXig/OmxlZnQgb2ZcYikvaSwvXig/OnJpZ2h0IG9mXGIpL2ksL14oPzpsaW5rc1xiKS9pLC9eKD86bGlua1xiKS9pLC9eKD86cHJvcGVydGllc1xiKS9pLC9eKD86ZGV0YWlsc1xiKS9pLC9eKD86b3ZlclxiKS9pLC9eKD86bm90ZVxiKS9pLC9eKD86YWN0aXZhdGVcYikvaSwvXig/OmRlYWN0aXZhdGVcYikvaSwvXig/OnRpdGxlXHNbXiNcbjtdKykvaSwvXig/OnRpdGxlOlxzW14jXG47XSspL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OnNlcXVlbmNlRGlhZ3JhbVxiKS9pLC9eKD86YXV0b251bWJlclxiKS9pLC9eKD86b2ZmXGIpL2ksL14oPzosKS9pLC9eKD86OykvaSwvXig/OlteXCtcPC0+XC0+OlxuLDtdKygoPyEoLXh8LS14fC1cKXwtLVwpKSlbXC1dKlteXCtcPC0+XC0+OlxuLDtdKykqKS9pLC9eKD86LT4+KS9pLC9eKD86PDwtPj4pL2ksL14oPzotLT4+KS9pLC9eKD86PDwtLT4+KS9pLC9eKD86LT4pL2ksL14oPzotLT4pL2ksL14oPzotW3hdKS9pLC9eKD86LS1beF0pL2ksL14oPzotW1wpXSkvaSwvXig/Oi0tW1wpXSkvaSwvXig/OjooPzooPzpubyk/d3JhcCk/W14jXG47XSspL2ksL14oPzpcKykvaSwvXig/Oi0pL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzQ1LDQ2XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzQzXSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzQxXSxpbmNsdXNpdmU6ITF9LElEOntydWxlczpbMiwzLDEyXSxpbmNsdXNpdmU6ITF9LEFMSUFTOntydWxlczpbMiwzLDEzLDE0XSxpbmNsdXNpdmU6ITF9LExJTkU6e3J1bGVzOlsyLDMsMjZdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwzLDQsNSw2LDcsOCw5LDEwLDExLDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQyLDQ0LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIEh9KCk7Sy5sZXhlcj1lZTtmdW5jdGlvbiBKKCl7dGhpcy55eT17fX1yZXR1cm4gbyhKLCJQYXJzZXIiKSxKLnByb3RvdHlwZT1LLEsuUGFyc2VyPUosbmV3IEp9KCk7VE8ucGFyc2VyPVRPO0dmZT1UT30pO2Z1bmN0aW9uIEVPKHQsZSl7aWYodC5saW5rcz09bnVsbCl0LmxpbmtzPWU7ZWxzZSBmb3IobGV0IHIgaW4gZSl0LmxpbmtzW3JdPWVbcl19ZnVuY3Rpb24gWWZlKHQsZSl7aWYodC5wcm9wZXJ0aWVzPT1udWxsKXQucHJvcGVydGllcz1lO2Vsc2UgZm9yKGxldCByIGluIGUpdC5wcm9wZXJ0aWVzW3JdPWVbcl19ZnVuY3Rpb24gVVVlKCl7JHQucmVjb3Jkcy5jdXJyZW50Qm94PXZvaWQgMH12YXIgJHQsVFVlLGtPLGtVZSxFVWUsd2ksU1VlLENVZSxBVWUsX1VlLExVZSxEVWUsTlVlLE94LFJVZSxNVWUsSVVlLE9VZSxQVWUsVmZlLE0wLEJVZSxGVWUselVlLEl4LEdVZSwkVWUsVWZlLEhmZSxWVWUsV2ZlLHFmZSxIVWUsWGZlLFNPLGpmZT1NKCgpPT57InVzZSBzdHJpY3QiO1Z0KCk7dXQoKTtkRSgpO2ZyKCk7QWkoKTskdD1uZXcgdmYoKCk9Pih7cHJldkFjdG9yOnZvaWQgMCxhY3RvcnM6bmV3IE1hcCxjcmVhdGVkQWN0b3JzOm5ldyBNYXAsZGVzdHJveWVkQWN0b3JzOm5ldyBNYXAsYm94ZXM6W10sbWVzc2FnZXM6W10sbm90ZXM6W10sc2VxdWVuY2VOdW1iZXJzRW5hYmxlZDohMSx3cmFwRW5hYmxlZDp2b2lkIDAsY3VycmVudEJveDp2b2lkIDAsbGFzdENyZWF0ZWQ6dm9pZCAwLGxhc3REZXN0cm95ZWQ6dm9pZCAwfSkpLFRVZT1vKGZ1bmN0aW9uKHQpeyR0LnJlY29yZHMuYm94ZXMucHVzaCh7bmFtZTp0LnRleHQsd3JhcDp0LndyYXA/P00wKCksZmlsbDp0LmNvbG9yLGFjdG9yS2V5czpbXX0pLCR0LnJlY29yZHMuY3VycmVudEJveD0kdC5yZWNvcmRzLmJveGVzLnNsaWNlKC0xKVswXX0sImFkZEJveCIpLGtPPW8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9JHQucmVjb3Jkcy5jdXJyZW50Qm94LGE9JHQucmVjb3Jkcy5hY3RvcnMuZ2V0KHQpO2lmKGEpe2lmKCR0LnJlY29yZHMuY3VycmVudEJveCYmYS5ib3gmJiR0LnJlY29yZHMuY3VycmVudEJveCE9PWEuYm94KXRocm93IG5ldyBFcnJvcihgQSBzYW1lIHBhcnRpY2lwYW50IHNob3VsZCBvbmx5IGJlIGRlZmluZWQgaW4gb25lIEJveDogJHthLm5hbWV9IGNhbid0IGJlIGluICcke2EuYm94Lm5hbWV9JyBhbmQgaW4gJyR7JHQucmVjb3Jkcy5jdXJyZW50Qm94Lm5hbWV9JyBhdCB0aGUgc2FtZSB0aW1lLmApO2lmKGk9YS5ib3g/YS5ib3g6JHQucmVjb3Jkcy5jdXJyZW50Qm94LGEuYm94PWksYSYmZT09PWEubmFtZSYmcj09bnVsbClyZXR1cm59aWYocj8udGV4dD09bnVsbCYmKHI9e3RleHQ6ZSx0eXBlOm59KSwobj09bnVsbHx8ci50ZXh0PT1udWxsKSYmKHI9e3RleHQ6ZSx0eXBlOm59KSwkdC5yZWNvcmRzLmFjdG9ycy5zZXQodCx7Ym94OmksbmFtZTplLGRlc2NyaXB0aW9uOnIudGV4dCx3cmFwOnIud3JhcD8/TTAoKSxwcmV2QWN0b3I6JHQucmVjb3Jkcy5wcmV2QWN0b3IsbGlua3M6e30scHJvcGVydGllczp7fSxhY3RvckNudDpudWxsLHJlY3REYXRhOm51bGwsdHlwZTpuPz8icGFydGljaXBhbnQifSksJHQucmVjb3Jkcy5wcmV2QWN0b3Ipe2xldCBzPSR0LnJlY29yZHMuYWN0b3JzLmdldCgkdC5yZWNvcmRzLnByZXZBY3Rvcik7cyYmKHMubmV4dEFjdG9yPXQpfSR0LnJlY29yZHMuY3VycmVudEJveCYmJHQucmVjb3Jkcy5jdXJyZW50Qm94LmFjdG9yS2V5cy5wdXNoKHQpLCR0LnJlY29yZHMucHJldkFjdG9yPXR9LCJhZGRBY3RvciIpLGtVZT1vKHQ9PntsZXQgZSxyPTA7aWYoIXQpcmV0dXJuIDA7Zm9yKGU9MDtlPCR0LnJlY29yZHMubWVzc2FnZXMubGVuZ3RoO2UrKykkdC5yZWNvcmRzLm1lc3NhZ2VzW2VdLnR5cGU9PT1JeC5BQ1RJVkVfU1RBUlQmJiR0LnJlY29yZHMubWVzc2FnZXNbZV0uZnJvbT09PXQmJnIrKywkdC5yZWNvcmRzLm1lc3NhZ2VzW2VdLnR5cGU9PT1JeC5BQ1RJVkVfRU5EJiYkdC5yZWNvcmRzLm1lc3NhZ2VzW2VdLmZyb209PT10JiZyLS07cmV0dXJuIHJ9LCJhY3RpdmF0aW9uQ291bnQiKSxFVWU9byhmdW5jdGlvbih0LGUscixuKXskdC5yZWNvcmRzLm1lc3NhZ2VzLnB1c2goe2Zyb206dCx0bzplLG1lc3NhZ2U6ci50ZXh0LHdyYXA6ci53cmFwPz9NMCgpLGFuc3dlcjpufSl9LCJhZGRNZXNzYWdlIiksd2k9byhmdW5jdGlvbih0LGUscixuLGk9ITEpe2lmKG49PT1JeC5BQ1RJVkVfRU5EJiZrVWUodD8/IiIpPDEpe2xldCBzPW5ldyBFcnJvcigiVHJ5aW5nIHRvIGluYWN0aXZhdGUgYW4gaW5hY3RpdmUgcGFydGljaXBhbnQgKCIrdCsiKSIpO3Rocm93IHMuaGFzaD17dGV4dDoiLT4+LSIsdG9rZW46Ii0+Pi0iLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsiJ0FDVElWRV9QQVJUSUNJUEFOVCciXX0sc31yZXR1cm4gJHQucmVjb3Jkcy5tZXNzYWdlcy5wdXNoKHtmcm9tOnQsdG86ZSxtZXNzYWdlOnI/LnRleHQ/PyIiLHdyYXA6cj8ud3JhcD8/TTAoKSx0eXBlOm4sYWN0aXZhdGU6aX0pLCEwfSwiYWRkU2lnbmFsIiksU1VlPW8oZnVuY3Rpb24oKXtyZXR1cm4gJHQucmVjb3Jkcy5ib3hlcy5sZW5ndGg+MH0sImhhc0F0TGVhc3RPbmVCb3giKSxDVWU9byhmdW5jdGlvbigpe3JldHVybiAkdC5yZWNvcmRzLmJveGVzLnNvbWUodD0+dC5uYW1lKX0sImhhc0F0TGVhc3RPbmVCb3hXaXRoVGl0bGUiKSxBVWU9byhmdW5jdGlvbigpe3JldHVybiAkdC5yZWNvcmRzLm1lc3NhZ2VzfSwiZ2V0TWVzc2FnZXMiKSxfVWU9byhmdW5jdGlvbigpe3JldHVybiAkdC5yZWNvcmRzLmJveGVzfSwiZ2V0Qm94ZXMiKSxMVWU9byhmdW5jdGlvbigpe3JldHVybiAkdC5yZWNvcmRzLmFjdG9yc30sImdldEFjdG9ycyIpLERVZT1vKGZ1bmN0aW9uKCl7cmV0dXJuICR0LnJlY29yZHMuY3JlYXRlZEFjdG9yc30sImdldENyZWF0ZWRBY3RvcnMiKSxOVWU9byhmdW5jdGlvbigpe3JldHVybiAkdC5yZWNvcmRzLmRlc3Ryb3llZEFjdG9yc30sImdldERlc3Ryb3llZEFjdG9ycyIpLE94PW8oZnVuY3Rpb24odCl7cmV0dXJuICR0LnJlY29yZHMuYWN0b3JzLmdldCh0KX0sImdldEFjdG9yIiksUlVlPW8oZnVuY3Rpb24oKXtyZXR1cm5bLi4uJHQucmVjb3Jkcy5hY3RvcnMua2V5cygpXX0sImdldEFjdG9yS2V5cyIpLE1VZT1vKGZ1bmN0aW9uKCl7JHQucmVjb3Jkcy5zZXF1ZW5jZU51bWJlcnNFbmFibGVkPSEwfSwiZW5hYmxlU2VxdWVuY2VOdW1iZXJzIiksSVVlPW8oZnVuY3Rpb24oKXskdC5yZWNvcmRzLnNlcXVlbmNlTnVtYmVyc0VuYWJsZWQ9ITF9LCJkaXNhYmxlU2VxdWVuY2VOdW1iZXJzIiksT1VlPW8oKCk9PiR0LnJlY29yZHMuc2VxdWVuY2VOdW1iZXJzRW5hYmxlZCwic2hvd1NlcXVlbmNlTnVtYmVycyIpLFBVZT1vKGZ1bmN0aW9uKHQpeyR0LnJlY29yZHMud3JhcEVuYWJsZWQ9dH0sInNldFdyYXAiKSxWZmU9byh0PT57aWYodD09PXZvaWQgMClyZXR1cm57fTt0PXQudHJpbSgpO2xldCBlPS9eOj93cmFwOi8uZXhlYyh0KSE9PW51bGw/ITA6L146P25vd3JhcDovLmV4ZWModCkhPT1udWxsPyExOnZvaWQgMDtyZXR1cm57Y2xlYW5lZFRleHQ6KGU9PT12b2lkIDA/dDp0LnJlcGxhY2UoL146Pyg/Om5vKT93cmFwOi8sIiIpKS50cmltKCksd3JhcDplfX0sImV4dHJhY3RXcmFwIiksTTA9bygoKT0+JHQucmVjb3Jkcy53cmFwRW5hYmxlZCE9PXZvaWQgMD8kdC5yZWNvcmRzLndyYXBFbmFibGVkOnBlKCkuc2VxdWVuY2U/LndyYXA/PyExLCJhdXRvV3JhcCIpLEJVZT1vKGZ1bmN0aW9uKCl7JHQucmVzZXQoKSxMcigpfSwiY2xlYXIiKSxGVWU9byhmdW5jdGlvbih0KXtsZXQgZT10LnRyaW0oKSx7d3JhcDpyLGNsZWFuZWRUZXh0Om59PVZmZShlKSxpPXt0ZXh0Om4sd3JhcDpyfTtyZXR1cm4gWS5kZWJ1ZyhgcGFyc2VNZXNzYWdlOiAke0pTT04uc3RyaW5naWZ5KGkpfWApLGl9LCJwYXJzZU1lc3NhZ2UiKSx6VWU9byhmdW5jdGlvbih0KXtsZXQgZT0vXigoPzpyZ2JhP3xoc2xhPylccypcKC4qXCl8XHcqKSguKikkLy5leGVjKHQpLHI9ZT8uWzFdP2VbMV0udHJpbSgpOiJ0cmFuc3BhcmVudCIsbj1lPy5bMl0/ZVsyXS50cmltKCk6dm9pZCAwO2lmKHdpbmRvdz8uQ1NTKXdpbmRvdy5DU1Muc3VwcG9ydHMoImNvbG9yIixyKXx8KHI9InRyYW5zcGFyZW50IixuPXQudHJpbSgpKTtlbHNle2xldCBzPW5ldyBPcHRpb24oKS5zdHlsZTtzLmNvbG9yPXIscy5jb2xvciE9PXImJihyPSJ0cmFuc3BhcmVudCIsbj10LnRyaW0oKSl9bGV0e3dyYXA6aSxjbGVhbmVkVGV4dDphfT1WZmUobik7cmV0dXJue3RleHQ6YT9rcihhLHBlKCkpOnZvaWQgMCxjb2xvcjpyLHdyYXA6aX19LCJwYXJzZUJveERhdGEiKSxJeD17U09MSUQ6MCxET1RURUQ6MSxOT1RFOjIsU09MSURfQ1JPU1M6MyxET1RURURfQ1JPU1M6NCxTT0xJRF9PUEVOOjUsRE9UVEVEX09QRU46NixMT09QX1NUQVJUOjEwLExPT1BfRU5EOjExLEFMVF9TVEFSVDoxMixBTFRfRUxTRToxMyxBTFRfRU5EOjE0LE9QVF9TVEFSVDoxNSxPUFRfRU5EOjE2LEFDVElWRV9TVEFSVDoxNyxBQ1RJVkVfRU5EOjE4LFBBUl9TVEFSVDoxOSxQQVJfQU5EOjIwLFBBUl9FTkQ6MjEsUkVDVF9TVEFSVDoyMixSRUNUX0VORDoyMyxTT0xJRF9QT0lOVDoyNCxET1RURURfUE9JTlQ6MjUsQVVUT05VTUJFUjoyNixDUklUSUNBTF9TVEFSVDoyNyxDUklUSUNBTF9PUFRJT046MjgsQ1JJVElDQUxfRU5EOjI5LEJSRUFLX1NUQVJUOjMwLEJSRUFLX0VORDozMSxQQVJfT1ZFUl9TVEFSVDozMixCSURJUkVDVElPTkFMX1NPTElEOjMzLEJJRElSRUNUSU9OQUxfRE9UVEVEOjM0fSxHVWU9e0ZJTExFRDowLE9QRU46MX0sJFVlPXtMRUZUT0Y6MCxSSUdIVE9GOjEsT1ZFUjoyfSxVZmU9byhmdW5jdGlvbih0LGUscil7bGV0IG49e2FjdG9yOnQscGxhY2VtZW50OmUsbWVzc2FnZTpyLnRleHQsd3JhcDpyLndyYXA/P00wKCl9LGk9W10uY29uY2F0KHQsdCk7JHQucmVjb3Jkcy5ub3Rlcy5wdXNoKG4pLCR0LnJlY29yZHMubWVzc2FnZXMucHVzaCh7ZnJvbTppWzBdLHRvOmlbMV0sbWVzc2FnZTpyLnRleHQsd3JhcDpyLndyYXA/P00wKCksdHlwZTpJeC5OT1RFLHBsYWNlbWVudDplfSl9LCJhZGROb3RlIiksSGZlPW8oZnVuY3Rpb24odCxlKXtsZXQgcj1PeCh0KTt0cnl7bGV0IG49a3IoZS50ZXh0LHBlKCkpO249bi5yZXBsYWNlKC8mYW1wOy9nLCImIiksbj1uLnJlcGxhY2UoLyZlcXVhbHM7L2csIj0iKTtsZXQgaT1KU09OLnBhcnNlKG4pO0VPKHIsaSl9Y2F0Y2gobil7WS5lcnJvcigiZXJyb3Igd2hpbGUgcGFyc2luZyBhY3RvciBsaW5rIHRleHQiLG4pfX0sImFkZExpbmtzIiksVlVlPW8oZnVuY3Rpb24odCxlKXtsZXQgcj1PeCh0KTt0cnl7bGV0IG49e30saT1rcihlLnRleHQscGUoKSksYT1pLmluZGV4T2YoIkAiKTtpPWkucmVwbGFjZSgvJmFtcDsvZywiJiIpLGk9aS5yZXBsYWNlKC8mZXF1YWxzOy9nLCI9Iik7bGV0IHM9aS5zbGljZSgwLGEtMSkudHJpbSgpLGw9aS5zbGljZShhKzEpLnRyaW0oKTtuW3NdPWwsRU8ocixuKX1jYXRjaChuKXtZLmVycm9yKCJlcnJvciB3aGlsZSBwYXJzaW5nIGFjdG9yIGxpbmsgdGV4dCIsbil9fSwiYWRkQUxpbmsiKTtvKEVPLCJpbnNlcnRMaW5rcyIpO1dmZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9T3godCk7dHJ5e2xldCBuPWtyKGUudGV4dCxwZSgpKSxpPUpTT04ucGFyc2Uobik7WWZlKHIsaSl9Y2F0Y2gobil7WS5lcnJvcigiZXJyb3Igd2hpbGUgcGFyc2luZyBhY3RvciBwcm9wZXJ0aWVzIHRleHQiLG4pfX0sImFkZFByb3BlcnRpZXMiKTtvKFlmZSwiaW5zZXJ0UHJvcGVydGllcyIpO28oVVVlLCJib3hFbmQiKTtxZmU9byhmdW5jdGlvbih0LGUpe2xldCByPU94KHQpLG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZS50ZXh0KTt0cnl7bGV0IGk9bi5pbm5lckhUTUwsYT1KU09OLnBhcnNlKGkpO2EucHJvcGVydGllcyYmWWZlKHIsYS5wcm9wZXJ0aWVzKSxhLmxpbmtzJiZFTyhyLGEubGlua3MpfWNhdGNoKGkpe1kuZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgZGV0YWlscyB0ZXh0IixpKX19LCJhZGREZXRhaWxzIiksSFVlPW8oZnVuY3Rpb24odCxlKXtpZih0Py5wcm9wZXJ0aWVzIT09dm9pZCAwKXJldHVybiB0LnByb3BlcnRpZXNbZV19LCJnZXRBY3RvclByb3BlcnR5IiksWGZlPW8oZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSl0LmZvckVhY2goZnVuY3Rpb24oZSl7WGZlKGUpfSk7ZWxzZSBzd2l0Y2godC50eXBlKXtjYXNlInNlcXVlbmNlSW5kZXgiOiR0LnJlY29yZHMubWVzc2FnZXMucHVzaCh7ZnJvbTp2b2lkIDAsdG86dm9pZCAwLG1lc3NhZ2U6e3N0YXJ0OnQuc2VxdWVuY2VJbmRleCxzdGVwOnQuc2VxdWVuY2VJbmRleFN0ZXAsdmlzaWJsZTp0LnNlcXVlbmNlVmlzaWJsZX0sd3JhcDohMSx0eXBlOnQuc2lnbmFsVHlwZX0pO2JyZWFrO2Nhc2UiYWRkUGFydGljaXBhbnQiOmtPKHQuYWN0b3IsdC5hY3Rvcix0LmRlc2NyaXB0aW9uLHQuZHJhdyk7YnJlYWs7Y2FzZSJjcmVhdGVQYXJ0aWNpcGFudCI6aWYoJHQucmVjb3Jkcy5hY3RvcnMuaGFzKHQuYWN0b3IpKXRocm93IG5ldyBFcnJvcigiSXQgaXMgbm90IHBvc3NpYmxlIHRvIGhhdmUgYWN0b3JzIHdpdGggdGhlIHNhbWUgaWQsIGV2ZW4gaWYgb25lIGlzIGRlc3Ryb3llZCBiZWZvcmUgdGhlIG5leHQgaXMgY3JlYXRlZC4gVXNlICdBUycgYWxpYXNlcyB0byBzaW11bGF0ZSB0aGUgYmVoYXZpb3IiKTskdC5yZWNvcmRzLmxhc3RDcmVhdGVkPXQuYWN0b3Isa08odC5hY3Rvcix0LmFjdG9yLHQuZGVzY3JpcHRpb24sdC5kcmF3KSwkdC5yZWNvcmRzLmNyZWF0ZWRBY3RvcnMuc2V0KHQuYWN0b3IsJHQucmVjb3Jkcy5tZXNzYWdlcy5sZW5ndGgpO2JyZWFrO2Nhc2UiZGVzdHJveVBhcnRpY2lwYW50IjokdC5yZWNvcmRzLmxhc3REZXN0cm95ZWQ9dC5hY3RvciwkdC5yZWNvcmRzLmRlc3Ryb3llZEFjdG9ycy5zZXQodC5hY3RvciwkdC5yZWNvcmRzLm1lc3NhZ2VzLmxlbmd0aCk7YnJlYWs7Y2FzZSJhY3RpdmVTdGFydCI6d2kodC5hY3Rvcix2b2lkIDAsdm9pZCAwLHQuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJhY3RpdmVFbmQiOndpKHQuYWN0b3Isdm9pZCAwLHZvaWQgMCx0LnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYWRkTm90ZSI6VWZlKHQuYWN0b3IsdC5wbGFjZW1lbnQsdC50ZXh0KTticmVhaztjYXNlImFkZExpbmtzIjpIZmUodC5hY3Rvcix0LnRleHQpO2JyZWFrO2Nhc2UiYWRkQUxpbmsiOlZVZSh0LmFjdG9yLHQudGV4dCk7YnJlYWs7Y2FzZSJhZGRQcm9wZXJ0aWVzIjpXZmUodC5hY3Rvcix0LnRleHQpO2JyZWFrO2Nhc2UiYWRkRGV0YWlscyI6cWZlKHQuYWN0b3IsdC50ZXh0KTticmVhaztjYXNlImFkZE1lc3NhZ2UiOmlmKCR0LnJlY29yZHMubGFzdENyZWF0ZWQpe2lmKHQudG8hPT0kdC5yZWNvcmRzLmxhc3RDcmVhdGVkKXRocm93IG5ldyBFcnJvcigiVGhlIGNyZWF0ZWQgcGFydGljaXBhbnQgIiskdC5yZWNvcmRzLmxhc3RDcmVhdGVkLm5hbWUrIiBkb2VzIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgY3JlYXRpbmcgbWVzc2FnZSBhZnRlciBpdHMgZGVjbGFyYXRpb24uIFBsZWFzZSBjaGVjayB0aGUgc2VxdWVuY2UgZGlhZ3JhbS4iKTskdC5yZWNvcmRzLmxhc3RDcmVhdGVkPXZvaWQgMH1lbHNlIGlmKCR0LnJlY29yZHMubGFzdERlc3Ryb3llZCl7aWYodC50byE9PSR0LnJlY29yZHMubGFzdERlc3Ryb3llZCYmdC5mcm9tIT09JHQucmVjb3Jkcy5sYXN0RGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiVGhlIGRlc3Ryb3llZCBwYXJ0aWNpcGFudCAiKyR0LnJlY29yZHMubGFzdERlc3Ryb3llZC5uYW1lKyIgZG9lcyBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGRlc3Ryb3lpbmcgbWVzc2FnZSBhZnRlciBpdHMgZGVjbGFyYXRpb24uIFBsZWFzZSBjaGVjayB0aGUgc2VxdWVuY2UgZGlhZ3JhbS4iKTskdC5yZWNvcmRzLmxhc3REZXN0cm95ZWQ9dm9pZCAwfXdpKHQuZnJvbSx0LnRvLHQubXNnLHQuc2lnbmFsVHlwZSx0LmFjdGl2YXRlKTticmVhaztjYXNlImJveFN0YXJ0IjpUVWUodC5ib3hEYXRhKTticmVhaztjYXNlImJveEVuZCI6VVVlKCk7YnJlYWs7Y2FzZSJsb29wU3RhcnQiOndpKHZvaWQgMCx2b2lkIDAsdC5sb29wVGV4dCx0LnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UibG9vcEVuZCI6d2kodm9pZCAwLHZvaWQgMCx2b2lkIDAsdC5zaWduYWxUeXBlKTticmVhaztjYXNlInJlY3RTdGFydCI6d2kodm9pZCAwLHZvaWQgMCx0LmNvbG9yLHQuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJyZWN0RW5kIjp3aSh2b2lkIDAsdm9pZCAwLHZvaWQgMCx0LnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2Uib3B0U3RhcnQiOndpKHZvaWQgMCx2b2lkIDAsdC5vcHRUZXh0LHQuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJvcHRFbmQiOndpKHZvaWQgMCx2b2lkIDAsdm9pZCAwLHQuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJhbHRTdGFydCI6d2kodm9pZCAwLHZvaWQgMCx0LmFsdFRleHQsdC5zaWduYWxUeXBlKTticmVhaztjYXNlImVsc2UiOndpKHZvaWQgMCx2b2lkIDAsdC5hbHRUZXh0LHQuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJhbHRFbmQiOndpKHZvaWQgMCx2b2lkIDAsdm9pZCAwLHQuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJzZXRBY2NUaXRsZSI6TXIodC50ZXh0KTticmVhaztjYXNlInBhclN0YXJ0Ijp3aSh2b2lkIDAsdm9pZCAwLHQucGFyVGV4dCx0LnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYW5kIjp3aSh2b2lkIDAsdm9pZCAwLHQucGFyVGV4dCx0LnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UicGFyRW5kIjp3aSh2b2lkIDAsdm9pZCAwLHZvaWQgMCx0LnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiY3JpdGljYWxTdGFydCI6d2kodm9pZCAwLHZvaWQgMCx0LmNyaXRpY2FsVGV4dCx0LnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2Uib3B0aW9uIjp3aSh2b2lkIDAsdm9pZCAwLHQub3B0aW9uVGV4dCx0LnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiY3JpdGljYWxFbmQiOndpKHZvaWQgMCx2b2lkIDAsdm9pZCAwLHQuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJicmVha1N0YXJ0Ijp3aSh2b2lkIDAsdm9pZCAwLHQuYnJlYWtUZXh0LHQuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJicmVha0VuZCI6d2kodm9pZCAwLHZvaWQgMCx2b2lkIDAsdC5zaWduYWxUeXBlKTticmVha319LCJhcHBseSIpLFNPPXthZGRBY3RvcjprTyxhZGRNZXNzYWdlOkVVZSxhZGRTaWduYWw6d2ksYWRkTGlua3M6SGZlLGFkZERldGFpbHM6cWZlLGFkZFByb3BlcnRpZXM6V2ZlLGF1dG9XcmFwOk0wLHNldFdyYXA6UFVlLGVuYWJsZVNlcXVlbmNlTnVtYmVyczpNVWUsZGlzYWJsZVNlcXVlbmNlTnVtYmVyczpJVWUsc2hvd1NlcXVlbmNlTnVtYmVyczpPVWUsZ2V0TWVzc2FnZXM6QVVlLGdldEFjdG9yczpMVWUsZ2V0Q3JlYXRlZEFjdG9yczpEVWUsZ2V0RGVzdHJveWVkQWN0b3JzOk5VZSxnZXRBY3RvcjpPeCxnZXRBY3RvcktleXM6UlVlLGdldEFjdG9yUHJvcGVydHk6SFVlLGdldEFjY1RpdGxlOkJyLGdldEJveGVzOl9VZSxnZXREaWFncmFtVGl0bGU6SnIsc2V0RGlhZ3JhbVRpdGxlOmNuLGdldENvbmZpZzpvKCgpPT5wZSgpLnNlcXVlbmNlLCJnZXRDb25maWciKSxjbGVhcjpCVWUscGFyc2VNZXNzYWdlOkZVZSxwYXJzZUJveERhdGE6elVlLExJTkVUWVBFOkl4LEFSUk9XVFlQRTpHVWUsUExBQ0VNRU5UOiRVZSxhZGROb3RlOlVmZSxzZXRBY2NUaXRsZTpNcixhcHBseTpYZmUsc2V0QWNjRGVzY3JpcHRpb246RnIsZ2V0QWNjRGVzY3JpcHRpb246enIsaGFzQXRMZWFzdE9uZUJveDpTVWUsaGFzQXRMZWFzdE9uZUJveFdpdGhUaXRsZTpDVWV9fSk7dmFyIFdVZSxLZmUsUWZlPU0oKCk9PnsidXNlIHN0cmljdCI7V1VlPW8odD0+YC5hY3RvciB7CiAgICBzdHJva2U6ICR7dC5hY3RvckJvcmRlcn07CiAgICBmaWxsOiAke3QuYWN0b3JCa2d9OwogIH0KCiAgdGV4dC5hY3RvciA+IHRzcGFuIHsKICAgIGZpbGw6ICR7dC5hY3RvclRleHRDb2xvcn07CiAgICBzdHJva2U6IG5vbmU7CiAgfQoKICAuYWN0b3ItbGluZSB7CiAgICBzdHJva2U6ICR7dC5hY3RvckxpbmVDb2xvcn07CiAgfQoKICAubWVzc2FnZUxpbmUwIHsKICAgIHN0cm9rZS13aWR0aDogMS41OwogICAgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsKICAgIHN0cm9rZTogJHt0LnNpZ25hbENvbG9yfTsKICB9CgogIC5tZXNzYWdlTGluZTEgewogICAgc3Ryb2tlLXdpZHRoOiAxLjU7CiAgICBzdHJva2UtZGFzaGFycmF5OiAyLCAyOwogICAgc3Ryb2tlOiAke3Quc2lnbmFsQ29sb3J9OwogIH0KCiAgI2Fycm93aGVhZCBwYXRoIHsKICAgIGZpbGw6ICR7dC5zaWduYWxDb2xvcn07CiAgICBzdHJva2U6ICR7dC5zaWduYWxDb2xvcn07CiAgfQoKICAuc2VxdWVuY2VOdW1iZXIgewogICAgZmlsbDogJHt0LnNlcXVlbmNlTnVtYmVyQ29sb3J9OwogIH0KCiAgI3NlcXVlbmNlbnVtYmVyIHsKICAgIGZpbGw6ICR7dC5zaWduYWxDb2xvcn07CiAgfQoKICAjY3Jvc3NoZWFkIHBhdGggewogICAgZmlsbDogJHt0LnNpZ25hbENvbG9yfTsKICAgIHN0cm9rZTogJHt0LnNpZ25hbENvbG9yfTsKICB9CgogIC5tZXNzYWdlVGV4dCB7CiAgICBmaWxsOiAke3Quc2lnbmFsVGV4dENvbG9yfTsKICAgIHN0cm9rZTogbm9uZTsKICB9CgogIC5sYWJlbEJveCB7CiAgICBzdHJva2U6ICR7dC5sYWJlbEJveEJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7dC5sYWJlbEJveEJrZ0NvbG9yfTsKICB9CgogIC5sYWJlbFRleHQsIC5sYWJlbFRleHQgPiB0c3BhbiB7CiAgICBmaWxsOiAke3QubGFiZWxUZXh0Q29sb3J9OwogICAgc3Ryb2tlOiBub25lOwogIH0KCiAgLmxvb3BUZXh0LCAubG9vcFRleHQgPiB0c3BhbiB7CiAgICBmaWxsOiAke3QubG9vcFRleHRDb2xvcn07CiAgICBzdHJva2U6IG5vbmU7CiAgfQoKICAubG9vcExpbmUgewogICAgc3Ryb2tlLXdpZHRoOiAycHg7CiAgICBzdHJva2UtZGFzaGFycmF5OiAyLCAyOwogICAgc3Ryb2tlOiAke3QubGFiZWxCb3hCb3JkZXJDb2xvcn07CiAgICBmaWxsOiAke3QubGFiZWxCb3hCb3JkZXJDb2xvcn07CiAgfQoKICAubm90ZSB7CiAgICAvL3N0cm9rZTogI2RlY2M5MzsKICAgIHN0cm9rZTogJHt0Lm5vdGVCb3JkZXJDb2xvcn07CiAgICBmaWxsOiAke3Qubm90ZUJrZ0NvbG9yfTsKICB9CgogIC5ub3RlVGV4dCwgLm5vdGVUZXh0ID4gdHNwYW4gewogICAgZmlsbDogJHt0Lm5vdGVUZXh0Q29sb3J9OwogICAgc3Ryb2tlOiBub25lOwogIH0KCiAgLmFjdGl2YXRpb24wIHsKICAgIGZpbGw6ICR7dC5hY3RpdmF0aW9uQmtnQ29sb3J9OwogICAgc3Ryb2tlOiAke3QuYWN0aXZhdGlvbkJvcmRlckNvbG9yfTsKICB9CgogIC5hY3RpdmF0aW9uMSB7CiAgICBmaWxsOiAke3QuYWN0aXZhdGlvbkJrZ0NvbG9yfTsKICAgIHN0cm9rZTogJHt0LmFjdGl2YXRpb25Cb3JkZXJDb2xvcn07CiAgfQoKICAuYWN0aXZhdGlvbjIgewogICAgZmlsbDogJHt0LmFjdGl2YXRpb25Ca2dDb2xvcn07CiAgICBzdHJva2U6ICR7dC5hY3RpdmF0aW9uQm9yZGVyQ29sb3J9OwogIH0KCiAgLmFjdG9yUG9wdXBNZW51IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB9CgogIC5hY3RvclBvcHVwTWVudVBhbmVsIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGZpbGw6ICR7dC5hY3RvckJrZ307CiAgICBib3gtc2hhZG93OiAwcHggOHB4IDE2cHggMHB4IHJnYmEoMCwwLDAsMC4yKTsKICAgIGZpbHRlcjogZHJvcC1zaGFkb3coM3B4IDVweCAycHggcmdiKDAgMCAwIC8gMC40KSk7Cn0KICAuYWN0b3ItbWFuIGxpbmUgewogICAgc3Ryb2tlOiAke3QuYWN0b3JCb3JkZXJ9OwogICAgZmlsbDogJHt0LmFjdG9yQmtnfTsKICB9CiAgLmFjdG9yLW1hbiBjaXJjbGUsIGxpbmUgewogICAgc3Ryb2tlOiAke3QuYWN0b3JCb3JkZXJ9OwogICAgZmlsbDogJHt0LmFjdG9yQmtnfTsKICAgIHN0cm9rZS13aWR0aDogMnB4OwogIH0KYCwiZ2V0U3R5bGVzIiksS2ZlPVdVZX0pO3ZhciBDTyxrZixKZmUsZWRlLFlVZSxaZmUsQU8scVVlLFhVZSxQeCxJMCx0ZGUsWGMsX08salVlLEtVZSxRVWUsWlVlLEpVZSxlSGUsdEhlLHJkZSxySGUsbkhlLGlIZSxhSGUsc0hlLG9IZSxsSGUsbmRlLGNIZSxMTyx1SGUsZmksaWRlPU0oKCk9PnsidXNlIHN0cmljdCI7ZnIoKTtsdigpO2hyKCk7Q089SmkoUXAoKSwxKTtaYSgpO2tmPTE4KjIsSmZlPSJhY3Rvci10b3AiLGVkZT0iYWN0b3ItYm90dG9tIixZVWU9ImFjdG9yLWJveCIsWmZlPSJhY3Rvci1tYW4iLEFPPW8oZnVuY3Rpb24odCxlKXtyZXR1cm4gU2QodCxlKX0sImRyYXdSZWN0IikscVVlPW8oZnVuY3Rpb24odCxlLHIsbixpKXtpZihlLmxpbmtzPT09dm9pZCAwfHxlLmxpbmtzPT09bnVsbHx8T2JqZWN0LmtleXMoZS5saW5rcykubGVuZ3RoPT09MClyZXR1cm57aGVpZ2h0OjAsd2lkdGg6MH07bGV0IGE9ZS5saW5rcyxzPWUuYWN0b3JDbnQsbD1lLnJlY3REYXRhO3ZhciB1PSJub25lIjtpJiYodT0iYmxvY2sgIWltcG9ydGFudCIpO2xldCBoPXQuYXBwZW5kKCJnIik7aC5hdHRyKCJpZCIsImFjdG9yIitzKyJfcG9wdXAiKSxoLmF0dHIoImNsYXNzIiwiYWN0b3JQb3B1cE1lbnUiKSxoLmF0dHIoImRpc3BsYXkiLHUpO3ZhciBmPSIiO2wuY2xhc3MhPT12b2lkIDAmJihmPSIgIitsLmNsYXNzKTtsZXQgZD1sLndpZHRoPnI/bC53aWR0aDpyLHA9aC5hcHBlbmQoInJlY3QiKTtpZihwLmF0dHIoImNsYXNzIiwiYWN0b3JQb3B1cE1lbnVQYW5lbCIrZikscC5hdHRyKCJ4IixsLngpLHAuYXR0cigieSIsbC5oZWlnaHQpLHAuYXR0cigiZmlsbCIsbC5maWxsKSxwLmF0dHIoInN0cm9rZSIsbC5zdHJva2UpLHAuYXR0cigid2lkdGgiLGQpLHAuYXR0cigiaGVpZ2h0IixsLmhlaWdodCkscC5hdHRyKCJyeCIsbC5yeCkscC5hdHRyKCJyeSIsbC5yeSksYSE9bnVsbCl7dmFyIG09MjA7Zm9yKGxldCB2IGluIGEpe3ZhciBnPWguYXBwZW5kKCJhIikseT0oMCxDTy5zYW5pdGl6ZVVybCkoYVt2XSk7Zy5hdHRyKCJ4bGluazpocmVmIix5KSxnLmF0dHIoInRhcmdldCIsIl9ibGFuayIpLHVIZShuKSh2LGcsbC54KzEwLGwuaGVpZ2h0K20sZCwyMCx7Y2xhc3M6ImFjdG9yIn0sbiksbSs9MzB9fXJldHVybiBwLmF0dHIoImhlaWdodCIsbSkse2hlaWdodDpsLmhlaWdodCttLHdpZHRoOmR9fSwiZHJhd1BvcHVwIiksWFVlPW8oZnVuY3Rpb24odCl7cmV0dXJuInZhciBwdSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCciK3QrIicpOyBpZiAocHUgIT0gbnVsbCkgeyBwdS5zdHlsZS5kaXNwbGF5ID0gcHUuc3R5bGUuZGlzcGxheSA9PSAnYmxvY2snID8gJ25vbmUnIDogJ2Jsb2NrJzsgfSJ9LCJwb3B1cE1lbnVUb2dnbGUiKSxQeD1vKGFzeW5jIGZ1bmN0aW9uKHQsZSxyPW51bGwpe2xldCBuPXQuYXBwZW5kKCJmb3JlaWduT2JqZWN0IiksaT1hd2FpdCBiaChlLnRleHQsQ3IoKSkscz1uLmFwcGVuZCgieGh0bWw6ZGl2IikuYXR0cigic3R5bGUiLCJ3aWR0aDogZml0LWNvbnRlbnQ7IikuYXR0cigieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIikuaHRtbChpKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYobi5hdHRyKCJoZWlnaHQiLE1hdGgucm91bmQocy5oZWlnaHQpKS5hdHRyKCJ3aWR0aCIsTWF0aC5yb3VuZChzLndpZHRoKSksZS5jbGFzcz09PSJub3RlVGV4dCIpe2xldCBsPXQubm9kZSgpLmZpcnN0Q2hpbGQ7bC5zZXRBdHRyaWJ1dGUoImhlaWdodCIscy5oZWlnaHQrMiplLnRleHRNYXJnaW4pO2xldCB1PWwuZ2V0QkJveCgpO24uYXR0cigieCIsTWF0aC5yb3VuZCh1LngrdS53aWR0aC8yLXMud2lkdGgvMikpLmF0dHIoInkiLE1hdGgucm91bmQodS55K3UuaGVpZ2h0LzItcy5oZWlnaHQvMikpfWVsc2UgaWYocil7bGV0e3N0YXJ0eDpsLHN0b3B4OnUsc3RhcnR5Omh9PXI7aWYobD51KXtsZXQgZj1sO2w9dSx1PWZ9bi5hdHRyKCJ4IixNYXRoLnJvdW5kKGwrTWF0aC5hYnMobC11KS8yLXMud2lkdGgvMikpLGUuY2xhc3M9PT0ibG9vcFRleHQiP24uYXR0cigieSIsTWF0aC5yb3VuZChoKSk6bi5hdHRyKCJ5IixNYXRoLnJvdW5kKGgtcy5oZWlnaHQpKX1yZXR1cm5bbl19LCJkcmF3S2F0ZXgiKSxJMD1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9MCxuPTAsaT1lLnRleHQuc3BsaXQocWUubGluZUJyZWFrUmVnZXgpLFthLHNdPUhvKGUuZm9udFNpemUpLGw9W10sdT0wLGg9bygoKT0+ZS55LCJ5ZnVuYyIpO2lmKGUudmFsaWduIT09dm9pZCAwJiZlLnRleHRNYXJnaW4hPT12b2lkIDAmJmUudGV4dE1hcmdpbj4wKXN3aXRjaChlLnZhbGlnbil7Y2FzZSJ0b3AiOmNhc2Uic3RhcnQiOmg9bygoKT0+TWF0aC5yb3VuZChlLnkrZS50ZXh0TWFyZ2luKSwieWZ1bmMiKTticmVhaztjYXNlIm1pZGRsZSI6Y2FzZSJjZW50ZXIiOmg9bygoKT0+TWF0aC5yb3VuZChlLnkrKHIrbitlLnRleHRNYXJnaW4pLzIpLCJ5ZnVuYyIpO2JyZWFrO2Nhc2UiYm90dG9tIjpjYXNlImVuZCI6aD1vKCgpPT5NYXRoLnJvdW5kKGUueSsocituKzIqZS50ZXh0TWFyZ2luKS1lLnRleHRNYXJnaW4pLCJ5ZnVuYyIpO2JyZWFrfWlmKGUuYW5jaG9yIT09dm9pZCAwJiZlLnRleHRNYXJnaW4hPT12b2lkIDAmJmUud2lkdGghPT12b2lkIDApc3dpdGNoKGUuYW5jaG9yKXtjYXNlImxlZnQiOmNhc2Uic3RhcnQiOmUueD1NYXRoLnJvdW5kKGUueCtlLnRleHRNYXJnaW4pLGUuYW5jaG9yPSJzdGFydCIsZS5kb21pbmFudEJhc2VsaW5lPSJtaWRkbGUiLGUuYWxpZ25tZW50QmFzZWxpbmU9Im1pZGRsZSI7YnJlYWs7Y2FzZSJtaWRkbGUiOmNhc2UiY2VudGVyIjplLng9TWF0aC5yb3VuZChlLngrZS53aWR0aC8yKSxlLmFuY2hvcj0ibWlkZGxlIixlLmRvbWluYW50QmFzZWxpbmU9Im1pZGRsZSIsZS5hbGlnbm1lbnRCYXNlbGluZT0ibWlkZGxlIjticmVhaztjYXNlInJpZ2h0IjpjYXNlImVuZCI6ZS54PU1hdGgucm91bmQoZS54K2Uud2lkdGgtZS50ZXh0TWFyZ2luKSxlLmFuY2hvcj0iZW5kIixlLmRvbWluYW50QmFzZWxpbmU9Im1pZGRsZSIsZS5hbGlnbm1lbnRCYXNlbGluZT0ibWlkZGxlIjticmVha31mb3IobGV0W2YsZF1vZiBpLmVudHJpZXMoKSl7ZS50ZXh0TWFyZ2luIT09dm9pZCAwJiZlLnRleHRNYXJnaW49PT0wJiZhIT09dm9pZCAwJiYodT1mKmEpO2xldCBwPXQuYXBwZW5kKCJ0ZXh0Iik7cC5hdHRyKCJ4IixlLngpLHAuYXR0cigieSIsaCgpKSxlLmFuY2hvciE9PXZvaWQgMCYmcC5hdHRyKCJ0ZXh0LWFuY2hvciIsZS5hbmNob3IpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIixlLmRvbWluYW50QmFzZWxpbmUpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsZS5hbGlnbm1lbnRCYXNlbGluZSksZS5mb250RmFtaWx5IT09dm9pZCAwJiZwLnN0eWxlKCJmb250LWZhbWlseSIsZS5mb250RmFtaWx5KSxzIT09dm9pZCAwJiZwLnN0eWxlKCJmb250LXNpemUiLHMpLGUuZm9udFdlaWdodCE9PXZvaWQgMCYmcC5zdHlsZSgiZm9udC13ZWlnaHQiLGUuZm9udFdlaWdodCksZS5maWxsIT09dm9pZCAwJiZwLmF0dHIoImZpbGwiLGUuZmlsbCksZS5jbGFzcyE9PXZvaWQgMCYmcC5hdHRyKCJjbGFzcyIsZS5jbGFzcyksZS5keSE9PXZvaWQgMD9wLmF0dHIoImR5IixlLmR5KTp1IT09MCYmcC5hdHRyKCJkeSIsdSk7bGV0IG09ZHx8Wl87aWYoZS50c3Bhbil7bGV0IGc9cC5hcHBlbmQoInRzcGFuIik7Zy5hdHRyKCJ4IixlLngpLGUuZmlsbCE9PXZvaWQgMCYmZy5hdHRyKCJmaWxsIixlLmZpbGwpLGcudGV4dChtKX1lbHNlIHAudGV4dChtKTtlLnZhbGlnbiE9PXZvaWQgMCYmZS50ZXh0TWFyZ2luIT09dm9pZCAwJiZlLnRleHRNYXJnaW4+MCYmKG4rPShwLl9ncm91cHN8fHApWzBdWzBdLmdldEJCb3goKS5oZWlnaHQscj1uKSxsLnB1c2gocCl9cmV0dXJuIGx9LCJkcmF3VGV4dCIpLHRkZT1vKGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihpLGEscyxsLHUpe3JldHVybiBpKyIsIithKyIgIisoaStzKSsiLCIrYSsiICIrKGkrcykrIiwiKyhhK2wtdSkrIiAiKyhpK3MtdSoxLjIpKyIsIisoYStsKSsiICIraSsiLCIrKGErbCl9byhyLCJnZW5Qb2ludHMiKTtsZXQgbj10LmFwcGVuZCgicG9seWdvbiIpO3JldHVybiBuLmF0dHIoInBvaW50cyIscihlLngsZS55LGUud2lkdGgsZS5oZWlnaHQsNykpLG4uYXR0cigiY2xhc3MiLCJsYWJlbEJveCIpLGUueT1lLnkrZS5oZWlnaHQvMixJMCh0LGUpLG59LCJkcmF3TGFiZWwiKSxYYz0tMSxfTz1vKCh0LGUscixuKT0+e3Quc2VsZWN0JiZyLmZvckVhY2goaT0+e2xldCBhPWUuZ2V0KGkpLHM9dC5zZWxlY3QoIiNhY3RvciIrYS5hY3RvckNudCk7IW4ubWlycm9yQWN0b3JzJiZhLnN0b3B5P3MuYXR0cigieTIiLGEuc3RvcHkrYS5oZWlnaHQvMik6bi5taXJyb3JBY3RvcnMmJnMuYXR0cigieTIiLGEuc3RvcHkpfSl9LCJmaXhMaWZlTGluZUhlaWdodHMiKSxqVWU9byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT1uP2Uuc3RvcHk6ZS5zdGFydHksYT1lLngrZS53aWR0aC8yLHM9aStlLmhlaWdodCxsPXQuYXBwZW5kKCJnIikubG93ZXIoKTt2YXIgdT1sO258fChYYysrLE9iamVjdC5rZXlzKGUubGlua3N8fHt9KS5sZW5ndGgmJiFyLmZvcmNlTWVudXMmJnUuYXR0cigib25jbGljayIsWFVlKGBhY3RvciR7WGN9X3BvcHVwYCkpLmF0dHIoImN1cnNvciIsInBvaW50ZXIiKSx1LmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwiYWN0b3IiK1hjKS5hdHRyKCJ4MSIsYSkuYXR0cigieTEiLHMpLmF0dHIoIngyIixhKS5hdHRyKCJ5MiIsMmUzKS5hdHRyKCJjbGFzcyIsImFjdG9yLWxpbmUgMjAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41cHgiKS5hdHRyKCJzdHJva2UiLCIjOTk5IikuYXR0cigibmFtZSIsZS5uYW1lKSx1PWwuYXBwZW5kKCJnIiksZS5hY3RvckNudD1YYyxlLmxpbmtzIT1udWxsJiZ1LmF0dHIoImlkIiwicm9vdC0iK1hjKSk7bGV0IGg9TmwoKTt2YXIgZj0iYWN0b3IiO2UucHJvcGVydGllcz8uY2xhc3M/Zj1lLnByb3BlcnRpZXMuY2xhc3M6aC5maWxsPSIjZWFlYWVhIixuP2YrPWAgJHtlZGV9YDpmKz1gICR7SmZlfWAsaC54PWUueCxoLnk9aSxoLndpZHRoPWUud2lkdGgsaC5oZWlnaHQ9ZS5oZWlnaHQsaC5jbGFzcz1mLGgucng9MyxoLnJ5PTMsaC5uYW1lPWUubmFtZTtsZXQgZD1BTyh1LGgpO2lmKGUucmVjdERhdGE9aCxlLnByb3BlcnRpZXM/Lmljb24pe2xldCBtPWUucHJvcGVydGllcy5pY29uLnRyaW0oKTttLmNoYXJBdCgwKT09PSJAIj9MWSh1LGgueCtoLndpZHRoLTIwLGgueSsxMCxtLnN1YnN0cigxKSk6X1kodSxoLngraC53aWR0aC0yMCxoLnkrMTAsbSl9TE8ocix5aShlLmRlc2NyaXB0aW9uKSkoZS5kZXNjcmlwdGlvbix1LGgueCxoLnksaC53aWR0aCxoLmhlaWdodCx7Y2xhc3M6YGFjdG9yICR7WVVlfWB9LHIpO2xldCBwPWUuaGVpZ2h0O2lmKGQubm9kZSl7bGV0IG09ZC5ub2RlKCkuZ2V0QkJveCgpO2UuaGVpZ2h0PW0uaGVpZ2h0LHA9bS5oZWlnaHR9cmV0dXJuIHB9LCJkcmF3QWN0b3JUeXBlUGFydGljaXBhbnQiKSxLVWU9byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT1uP2Uuc3RvcHk6ZS5zdGFydHksYT1lLngrZS53aWR0aC8yLHM9aSs4MCxsPXQuYXBwZW5kKCJnIikubG93ZXIoKTtufHwoWGMrKyxsLmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwiYWN0b3IiK1hjKS5hdHRyKCJ4MSIsYSkuYXR0cigieTEiLHMpLmF0dHIoIngyIixhKS5hdHRyKCJ5MiIsMmUzKS5hdHRyKCJjbGFzcyIsImFjdG9yLWxpbmUgMjAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41cHgiKS5hdHRyKCJzdHJva2UiLCIjOTk5IikuYXR0cigibmFtZSIsZS5uYW1lKSxlLmFjdG9yQ250PVhjKTtsZXQgdT10LmFwcGVuZCgiZyIpLGg9WmZlO24/aCs9YCAke2VkZX1gOmgrPWAgJHtKZmV9YCx1LmF0dHIoImNsYXNzIixoKSx1LmF0dHIoIm5hbWUiLGUubmFtZSk7bGV0IGY9TmwoKTtmLng9ZS54LGYueT1pLGYuZmlsbD0iI2VhZWFlYSIsZi53aWR0aD1lLndpZHRoLGYuaGVpZ2h0PWUuaGVpZ2h0LGYuY2xhc3M9ImFjdG9yIixmLnJ4PTMsZi5yeT0zLHUuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJhY3Rvci1tYW4tdG9yc28iK1hjKS5hdHRyKCJ4MSIsYSkuYXR0cigieTEiLGkrMjUpLmF0dHIoIngyIixhKS5hdHRyKCJ5MiIsaSs0NSksdS5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsImFjdG9yLW1hbi1hcm1zIitYYykuYXR0cigieDEiLGEta2YvMikuYXR0cigieTEiLGkrMzMpLmF0dHIoIngyIixhK2tmLzIpLmF0dHIoInkyIixpKzMzKSx1LmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixhLWtmLzIpLmF0dHIoInkxIixpKzYwKS5hdHRyKCJ4MiIsYSkuYXR0cigieTIiLGkrNDUpLHUuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLGEpLmF0dHIoInkxIixpKzQ1KS5hdHRyKCJ4MiIsYStrZi8yLTIpLmF0dHIoInkyIixpKzYwKTtsZXQgZD11LmFwcGVuZCgiY2lyY2xlIik7ZC5hdHRyKCJjeCIsZS54K2Uud2lkdGgvMiksZC5hdHRyKCJjeSIsaSsxMCksZC5hdHRyKCJyIiwxNSksZC5hdHRyKCJ3aWR0aCIsZS53aWR0aCksZC5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0KTtsZXQgcD11Lm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIGUuaGVpZ2h0PXAuaGVpZ2h0LExPKHIseWkoZS5kZXNjcmlwdGlvbikpKGUuZGVzY3JpcHRpb24sdSxmLngsZi55KzM1LGYud2lkdGgsZi5oZWlnaHQse2NsYXNzOmBhY3RvciAke1pmZX1gfSxyKSxlLmhlaWdodH0sImRyYXdBY3RvclR5cGVBY3RvciIpLFFVZT1vKGFzeW5jIGZ1bmN0aW9uKHQsZSxyLG4pe3N3aXRjaChlLnR5cGUpe2Nhc2UiYWN0b3IiOnJldHVybiBhd2FpdCBLVWUodCxlLHIsbik7Y2FzZSJwYXJ0aWNpcGFudCI6cmV0dXJuIGF3YWl0IGpVZSh0LGUscixuKX19LCJkcmF3QWN0b3IiKSxaVWU9byhmdW5jdGlvbih0LGUscil7bGV0IGk9dC5hcHBlbmQoImciKTtyZGUoaSxlKSxlLm5hbWUmJkxPKHIpKGUubmFtZSxpLGUueCxlLnkrKGUudGV4dE1heEhlaWdodHx8MCkvMixlLndpZHRoLDAse2NsYXNzOiJ0ZXh0In0sciksaS5sb3dlcigpfSwiZHJhd0JveCIpLEpVZT1vKGZ1bmN0aW9uKHQpe3JldHVybiB0LmFwcGVuZCgiZyIpfSwiYW5jaG9yRWxlbWVudCIpLGVIZT1vKGZ1bmN0aW9uKHQsZSxyLG4saSl7bGV0IGE9TmwoKSxzPWUuYW5jaG9yZWQ7YS54PWUuc3RhcnR4LGEueT1lLnN0YXJ0eSxhLmNsYXNzPSJhY3RpdmF0aW9uIitpJTMsYS53aWR0aD1lLnN0b3B4LWUuc3RhcnR4LGEuaGVpZ2h0PXItZS5zdGFydHksQU8ocyxhKX0sImRyYXdBY3RpdmF0aW9uIiksdEhlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7bGV0e2JveE1hcmdpbjppLGJveFRleHRNYXJnaW46YSxsYWJlbEJveEhlaWdodDpzLGxhYmVsQm94V2lkdGg6bCxtZXNzYWdlRm9udEZhbWlseTp1LG1lc3NhZ2VGb250U2l6ZTpoLG1lc3NhZ2VGb250V2VpZ2h0OmZ9PW4sZD10LmFwcGVuZCgiZyIpLHA9byhmdW5jdGlvbih5LHYseCxiKXtyZXR1cm4gZC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIseSkuYXR0cigieTEiLHYpLmF0dHIoIngyIix4KS5hdHRyKCJ5MiIsYikuYXR0cigiY2xhc3MiLCJsb29wTGluZSIpfSwiZHJhd0xvb3BMaW5lIik7cChlLnN0YXJ0eCxlLnN0YXJ0eSxlLnN0b3B4LGUuc3RhcnR5KSxwKGUuc3RvcHgsZS5zdGFydHksZS5zdG9weCxlLnN0b3B5KSxwKGUuc3RhcnR4LGUuc3RvcHksZS5zdG9weCxlLnN0b3B5KSxwKGUuc3RhcnR4LGUuc3RhcnR5LGUuc3RhcnR4LGUuc3RvcHkpLGUuc2VjdGlvbnMhPT12b2lkIDAmJmUuc2VjdGlvbnMuZm9yRWFjaChmdW5jdGlvbih5KXtwKGUuc3RhcnR4LHkueSxlLnN0b3B4LHkueSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzLCAzIil9KTtsZXQgbT1vdigpO20udGV4dD1yLG0ueD1lLnN0YXJ0eCxtLnk9ZS5zdGFydHksbS5mb250RmFtaWx5PXUsbS5mb250U2l6ZT1oLG0uZm9udFdlaWdodD1mLG0uYW5jaG9yPSJtaWRkbGUiLG0udmFsaWduPSJtaWRkbGUiLG0udHNwYW49ITEsbS53aWR0aD1sfHw1MCxtLmhlaWdodD1zfHwyMCxtLnRleHRNYXJnaW49YSxtLmNsYXNzPSJsYWJlbFRleHQiLHRkZShkLG0pLG09bmRlKCksbS50ZXh0PWUudGl0bGUsbS54PWUuc3RhcnR4K2wvMisoZS5zdG9weC1lLnN0YXJ0eCkvMixtLnk9ZS5zdGFydHkraSthLG0uYW5jaG9yPSJtaWRkbGUiLG0udmFsaWduPSJtaWRkbGUiLG0udGV4dE1hcmdpbj1hLG0uY2xhc3M9Imxvb3BUZXh0IixtLmZvbnRGYW1pbHk9dSxtLmZvbnRTaXplPWgsbS5mb250V2VpZ2h0PWYsbS53cmFwPSEwO2xldCBnPXlpKG0udGV4dCk/YXdhaXQgUHgoZCxtLGUpOkkwKGQsbSk7aWYoZS5zZWN0aW9uVGl0bGVzIT09dm9pZCAwKXtmb3IobGV0W3ksdl1vZiBPYmplY3QuZW50cmllcyhlLnNlY3Rpb25UaXRsZXMpKWlmKHYubWVzc2FnZSl7bS50ZXh0PXYubWVzc2FnZSxtLng9ZS5zdGFydHgrKGUuc3RvcHgtZS5zdGFydHgpLzIsbS55PWUuc2VjdGlvbnNbeV0ueStpK2EsbS5jbGFzcz0ibG9vcFRleHQiLG0uYW5jaG9yPSJtaWRkbGUiLG0udmFsaWduPSJtaWRkbGUiLG0udHNwYW49ITEsbS5mb250RmFtaWx5PXUsbS5mb250U2l6ZT1oLG0uZm9udFdlaWdodD1mLG0ud3JhcD1lLndyYXAseWkobS50ZXh0KT8oZS5zdGFydHk9ZS5zZWN0aW9uc1t5XS55LGF3YWl0IFB4KGQsbSxlKSk6STAoZCxtKTtsZXQgeD1NYXRoLnJvdW5kKGcubWFwKGI9PihiLl9ncm91cHN8fGIpWzBdWzBdLmdldEJCb3goKS5oZWlnaHQpLnJlZHVjZSgoYix3KT0+Yit3KSk7ZS5zZWN0aW9uc1t5XS5oZWlnaHQrPXgtKGkrYSl9fXJldHVybiBlLmhlaWdodD1NYXRoLnJvdW5kKGUuc3RvcHktZS5zdGFydHkpLGR9LCJkcmF3TG9vcCIpLHJkZT1vKGZ1bmN0aW9uKHQsZSl7aTUodCxlKX0sImRyYXdCYWNrZ3JvdW5kUmVjdCIpLHJIZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJzeW1ib2wiKS5hdHRyKCJpZCIsImRhdGFiYXNlIikuYXR0cigiZmlsbC1ydWxlIiwiZXZlbm9kZCIpLmF0dHIoImNsaXAtcnVsZSIsImV2ZW5vZGQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTEyLjI1OC4wMDFsLjI1Ni4wMDQuMjU1LjAwNS4yNTMuMDA4LjI1MS4wMS4yNDkuMDEyLjI0Ny4wMTUuMjQ2LjAxNi4yNDIuMDE5LjI0MS4wMi4yMzkuMDIzLjIzNi4wMjQuMjMzLjAyNy4yMzEuMDI4LjIyOS4wMzEuMjI1LjAzMi4yMjMuMDM0LjIyLjAzNi4yMTcuMDM4LjIxNC4wNC4yMTEuMDQxLjIwOC4wNDMuMjA1LjA0NS4yMDEuMDQ2LjE5OC4wNDguMTk0LjA1LjE5MS4wNTEuMTg3LjA1My4xODMuMDU0LjE4LjA1Ni4xNzUuMDU3LjE3Mi4wNTkuMTY4LjA2LjE2My4wNjEuMTYuMDYzLjE1NS4wNjQuMTUuMDY2LjA3NC4wMzMuMDczLjAzMy4wNzEuMDM0LjA3LjAzNC4wNjkuMDM1LjA2OC4wMzUuMDY3LjAzNS4wNjYuMDM1LjA2NC4wMzYuMDY0LjAzNi4wNjIuMDM2LjA2LjAzNi4wNi4wMzcuMDU4LjAzNy4wNTguMDM3LjA1NS4wMzguMDU1LjAzOC4wNTMuMDM4LjA1Mi4wMzguMDUxLjAzOS4wNS4wMzkuMDQ4LjAzOS4wNDcuMDM5LjA0NS4wNC4wNDQuMDQuMDQzLjA0LjA0MS4wNC4wNC4wNDEuMDM5LjA0MS4wMzcuMDQxLjAzNi4wNDEuMDM0LjA0MS4wMzMuMDQyLjAzMi4wNDIuMDMuMDQyLjAyOS4wNDIuMDI3LjA0Mi4wMjYuMDQzLjAyNC4wNDMuMDIzLjA0My4wMjEuMDQzLjAyLjA0My4wMTguMDQ0LjAxNy4wNDMuMDE1LjA0NC4wMTMuMDQ0LjAxMi4wNDQuMDExLjA0NS4wMDkuMDQ0LjAwNy4wNDUuMDA2LjA0NS4wMDQuMDQ1LjAwMi4wNDUuMDAxLjA0NXYxN2wtLjAwMS4wNDUtLjAwMi4wNDUtLjAwNC4wNDUtLjAwNi4wNDUtLjAwNy4wNDUtLjAwOS4wNDQtLjAxMS4wNDUtLjAxMi4wNDQtLjAxMy4wNDQtLjAxNS4wNDQtLjAxNy4wNDMtLjAxOC4wNDQtLjAyLjA0My0uMDIxLjA0My0uMDIzLjA0My0uMDI0LjA0My0uMDI2LjA0My0uMDI3LjA0Mi0uMDI5LjA0Mi0uMDMuMDQyLS4wMzIuMDQyLS4wMzMuMDQyLS4wMzQuMDQxLS4wMzYuMDQxLS4wMzcuMDQxLS4wMzkuMDQxLS4wNC4wNDEtLjA0MS4wNC0uMDQzLjA0LS4wNDQuMDQtLjA0NS4wNC0uMDQ3LjAzOS0uMDQ4LjAzOS0uMDUuMDM5LS4wNTEuMDM5LS4wNTIuMDM4LS4wNTMuMDM4LS4wNTUuMDM4LS4wNTUuMDM4LS4wNTguMDM3LS4wNTguMDM3LS4wNi4wMzctLjA2LjAzNi0uMDYyLjAzNi0uMDY0LjAzNi0uMDY0LjAzNi0uMDY2LjAzNS0uMDY3LjAzNS0uMDY4LjAzNS0uMDY5LjAzNS0uMDcuMDM0LS4wNzEuMDM0LS4wNzMuMDMzLS4wNzQuMDMzLS4xNS4wNjYtLjE1NS4wNjQtLjE2LjA2My0uMTYzLjA2MS0uMTY4LjA2LS4xNzIuMDU5LS4xNzUuMDU3LS4xOC4wNTYtLjE4My4wNTQtLjE4Ny4wNTMtLjE5MS4wNTEtLjE5NC4wNS0uMTk4LjA0OC0uMjAxLjA0Ni0uMjA1LjA0NS0uMjA4LjA0My0uMjExLjA0MS0uMjE0LjA0LS4yMTcuMDM4LS4yMi4wMzYtLjIyMy4wMzQtLjIyNS4wMzItLjIyOS4wMzEtLjIzMS4wMjgtLjIzMy4wMjctLjIzNi4wMjQtLjIzOS4wMjMtLjI0MS4wMi0uMjQyLjAxOS0uMjQ2LjAxNi0uMjQ3LjAxNS0uMjQ5LjAxMi0uMjUxLjAxLS4yNTMuMDA4LS4yNTUuMDA1LS4yNTYuMDA0LS4yNTguMDAxLS4yNTgtLjAwMS0uMjU2LS4wMDQtLjI1NS0uMDA1LS4yNTMtLjAwOC0uMjUxLS4wMS0uMjQ5LS4wMTItLjI0Ny0uMDE1LS4yNDUtLjAxNi0uMjQzLS4wMTktLjI0MS0uMDItLjIzOC0uMDIzLS4yMzYtLjAyNC0uMjM0LS4wMjctLjIzMS0uMDI4LS4yMjgtLjAzMS0uMjI2LS4wMzItLjIyMy0uMDM0LS4yMi0uMDM2LS4yMTctLjAzOC0uMjE0LS4wNC0uMjExLS4wNDEtLjIwOC0uMDQzLS4yMDQtLjA0NS0uMjAxLS4wNDYtLjE5OC0uMDQ4LS4xOTUtLjA1LS4xOS0uMDUxLS4xODctLjA1My0uMTg0LS4wNTQtLjE3OS0uMDU2LS4xNzYtLjA1Ny0uMTcyLS4wNTktLjE2Ny0uMDYtLjE2NC0uMDYxLS4xNTktLjA2My0uMTU1LS4wNjQtLjE1MS0uMDY2LS4wNzQtLjAzMy0uMDcyLS4wMzMtLjA3Mi0uMDM0LS4wNy0uMDM0LS4wNjktLjAzNS0uMDY4LS4wMzUtLjA2Ny0uMDM1LS4wNjYtLjAzNS0uMDY0LS4wMzYtLjA2My0uMDM2LS4wNjItLjAzNi0uMDYxLS4wMzYtLjA2LS4wMzctLjA1OC0uMDM3LS4wNTctLjAzNy0uMDU2LS4wMzgtLjA1NS0uMDM4LS4wNTMtLjAzOC0uMDUyLS4wMzgtLjA1MS0uMDM5LS4wNDktLjAzOS0uMDQ5LS4wMzktLjA0Ni0uMDM5LS4wNDYtLjA0LS4wNDQtLjA0LS4wNDMtLjA0LS4wNDEtLjA0LS4wNC0uMDQxLS4wMzktLjA0MS0uMDM3LS4wNDEtLjAzNi0uMDQxLS4wMzQtLjA0MS0uMDMzLS4wNDItLjAzMi0uMDQyLS4wMy0uMDQyLS4wMjktLjA0Mi0uMDI3LS4wNDItLjAyNi0uMDQzLS4wMjQtLjA0My0uMDIzLS4wNDMtLjAyMS0uMDQzLS4wMi0uMDQzLS4wMTgtLjA0NC0uMDE3LS4wNDMtLjAxNS0uMDQ0LS4wMTMtLjA0NC0uMDEyLS4wNDQtLjAxMS0uMDQ1LS4wMDktLjA0NC0uMDA3LS4wNDUtLjAwNi0uMDQ1LS4wMDQtLjA0NS0uMDAyLS4wNDUtLjAwMS0uMDQ1di0xN2wuMDAxLS4wNDUuMDAyLS4wNDUuMDA0LS4wNDUuMDA2LS4wNDUuMDA3LS4wNDUuMDA5LS4wNDQuMDExLS4wNDUuMDEyLS4wNDQuMDEzLS4wNDQuMDE1LS4wNDQuMDE3LS4wNDMuMDE4LS4wNDQuMDItLjA0My4wMjEtLjA0My4wMjMtLjA0My4wMjQtLjA0My4wMjYtLjA0My4wMjctLjA0Mi4wMjktLjA0Mi4wMy0uMDQyLjAzMi0uMDQyLjAzMy0uMDQyLjAzNC0uMDQxLjAzNi0uMDQxLjAzNy0uMDQxLjAzOS0uMDQxLjA0LS4wNDEuMDQxLS4wNC4wNDMtLjA0LjA0NC0uMDQuMDQ2LS4wNC4wNDYtLjAzOS4wNDktLjAzOS4wNDktLjAzOS4wNTEtLjAzOS4wNTItLjAzOC4wNTMtLjAzOC4wNTUtLjAzOC4wNTYtLjAzOC4wNTctLjAzNy4wNTgtLjAzNy4wNi0uMDM3LjA2MS0uMDM2LjA2Mi0uMDM2LjA2My0uMDM2LjA2NC0uMDM2LjA2Ni0uMDM1LjA2Ny0uMDM1LjA2OC0uMDM1LjA2OS0uMDM1LjA3LS4wMzQuMDcyLS4wMzQuMDcyLS4wMzMuMDc0LS4wMzMuMTUxLS4wNjYuMTU1LS4wNjQuMTU5LS4wNjMuMTY0LS4wNjEuMTY3LS4wNi4xNzItLjA1OS4xNzYtLjA1Ny4xNzktLjA1Ni4xODQtLjA1NC4xODctLjA1My4xOS0uMDUxLjE5NS0uMDUuMTk4LS4wNDguMjAxLS4wNDYuMjA0LS4wNDUuMjA4LS4wNDMuMjExLS4wNDEuMjE0LS4wNC4yMTctLjAzOC4yMi0uMDM2LjIyMy0uMDM0LjIyNi0uMDMyLjIyOC0uMDMxLjIzMS0uMDI4LjIzNC0uMDI3LjIzNi0uMDI0LjIzOC0uMDIzLjI0MS0uMDIuMjQzLS4wMTkuMjQ1LS4wMTYuMjQ3LS4wMTUuMjQ5LS4wMTIuMjUxLS4wMS4yNTMtLjAwOC4yNTUtLjAwNS4yNTYtLjAwNC4yNTgtLjAwMS4yNTguMDAxem0tOS4yNTggMjAuNDk5di4wMWwuMDAxLjAyMS4wMDMuMDIxLjAwNC4wMjIuMDA1LjAyMS4wMDYuMDIyLjAwNy4wMjIuMDA5LjAyMy4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyMy4wMTYuMDI0LjAxNy4wMjMuMDE4LjAyNC4wMTkuMDI0LjAyMS4wMjQuMDIyLjAyNS4wMjMuMDI0LjAyNC4wMjUuMDUyLjA0OS4wNTYuMDUuMDYxLjA1MS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUxLjA3OS4wNTIuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUxLjEwNS4wNTIuMTEuMDUyLjExNC4wNTEuMTE5LjA1MS4xMjMuMDUxLjEyNy4wNS4xMzEuMDUuMTM1LjA1LjEzOS4wNDguMTQ0LjA0OS4xNDcuMDQ3LjE1Mi4wNDcuMTU1LjA0Ny4xNi4wNDUuMTYzLjA0NS4xNjcuMDQzLjE3MS4wNDMuMTc2LjA0MS4xNzguMDQxLjE4My4wMzkuMTg3LjAzOS4xOS4wMzcuMTk0LjAzNS4xOTcuMDM1LjIwMi4wMzMuMjA0LjAzMS4yMDkuMDMuMjEyLjAyOS4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIxLjIzLjAyLjIzMy4wMTguMjM2LjAxNi4yNC4wMTUuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA1LjI1Ni4wMDQuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDA0LjI1NC0uMDA1LjI1LS4wMDguMjQ3LS4wMTEuMjQ0LS4wMTIuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMjEuMjI2LS4wMjEuMjI0LS4wMjQuMjItLjAyNi4yMTYtLjAyNy4yMTItLjAyOC4yMS0uMDMxLjIwNS0uMDMxLjIwMi0uMDM0LjE5OC0uMDM0LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDQuMTc5LS4wNC4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ2LjE1NS0uMDQ2LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ5LjEzOS0uMDQ5LjEzNi0uMDUuMTMxLS4wNS4xMjYtLjA1LjEyMy0uMDUxLjExOC0uMDUyLjExNC0uMDUxLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTMuMDgzLS4wNTEuMDc5LS4wNTIuMDc0LS4wNTIuMDctLjA1MS4wNjUtLjA1MS4wNi0uMDUxLjA1Ni0uMDUuMDUxLS4wNS4wMjMtLjAyNC4wMjMtLjAyNS4wMjEtLjAyNC4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDI0LjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjMuMDEtLjAyMi4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xMjdsLS4wNzcuMDU1LS4wOC4wNTMtLjA4My4wNTQtLjA4NS4wNTMtLjA4Ny4wNTItLjA5LjA1Mi0uMDkzLjA1MS0uMDk1LjA1LS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ5LS4xMDUuMDQ4LS4xMDYuMDQ3LS4xMDkuMDQ3LS4xMTEuMDQ2LS4xMTQuMDQ1LS4xMTUuMDQ1LS4xMTguMDQ0LS4xMi4wNDMtLjEyMi4wNDItLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDQtLjEzMi4wMzgtLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzctLjEzOS4wMzUtLjE0Mi4wMzUtLjE0My4wMzQtLjE0NC4wMzMtLjE0Ny4wMzItLjE0OC4wMzEtLjE1LjAzLS4xNTEuMDMtLjE1My4wMjktLjE1NC4wMjctLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjUtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjItLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxMS0uMTc4LjAxLS4xNzkuMDA4LS4xNzkuMDA4LS4xODEuMDA2LS4xODIuMDA1LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAyaC0uMzdsLS4xODQtLjAwMi0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNS0uMTgxLS4wMDYtLjE3OS0uMDA4LS4xNzktLjAwOC0uMTc4LS4wMS0uMTc2LS4wMTEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjItLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjUtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjctLjE1My0uMDI5LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMxLS4xNDYtLjAzMi0uMTQ1LS4wMzMtLjE0My0uMDM0LS4xNDEtLjAzNS0uMTQtLjAzNS0uMTM3LS4wMzctLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzgtLjEzLS4wNC0uMTI4LS4wNC0uMTI2LS4wNDEtLjEyNC0uMDQyLS4xMjItLjA0Mi0uMTItLjA0NC0uMTE3LS4wNDMtLjExNi0uMDQ1LS4xMTMtLjA0NS0uMTEyLS4wNDYtLjEwOS0uMDQ3LS4xMDYtLjA0Ny0uMTA1LS4wNDgtLjEwMi0uMDQ5LS4xLS4wNDktLjA5Ny0uMDUtLjA5NS0uMDUtLjA5My0uMDUyLS4wOS0uMDUxLS4wODctLjA1Mi0uMDg1LS4wNTMtLjA4My0uMDU0LS4wOC0uMDU0LS4wNzctLjA1NHY0LjEyN3ptMC01LjY1NHYuMDExbC4wMDEuMDIxLjAwMy4wMjEuMDA0LjAyMS4wMDUuMDIyLjAwNi4wMjIuMDA3LjAyMi4wMDkuMDIyLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDI0LjAxNi4wMjMuMDE3LjAyNC4wMTguMDI0LjAxOS4wMjQuMDIxLjAyNC4wMjIuMDI0LjAyMy4wMjUuMDI0LjAyNC4wNTIuMDUuMDU2LjA1LjA2MS4wNS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUyLjA3OS4wNTEuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUyLjEwNS4wNTIuMTEuMDUxLjExNC4wNTEuMTE5LjA1Mi4xMjMuMDUuMTI3LjA1MS4xMzEuMDUuMTM1LjA0OS4xMzkuMDQ5LjE0NC4wNDguMTQ3LjA0OC4xNTIuMDQ3LjE1NS4wNDYuMTYuMDQ1LjE2My4wNDUuMTY3LjA0NC4xNzEuMDQyLjE3Ni4wNDIuMTc4LjA0LjE4My4wNC4xODcuMDM4LjE5LjAzNy4xOTQuMDM2LjE5Ny4wMzQuMjAyLjAzMy4yMDQuMDMyLjIwOS4wMy4yMTIuMDI4LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjIuMjMuMDIuMjMzLjAxOC4yMzYuMDE2LjI0LjAxNC4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDYuMjU2LjAwMy4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDMuMjU0LS4wMDYuMjUtLjAwOC4yNDctLjAxLjI0NC0uMDEyLjI0MS0uMDE1LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIuMjI2LS4wMjIuMjI0LS4wMjQuMjItLjAyNS4yMTYtLjAyNy4yMTItLjAyOS4yMS0uMDMuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzUuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wMzkuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0NS4xNTUtLjA0Ny4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OC4xMzktLjA1LjEzNi0uMDQ5LjEzMS0uMDUuMTI2LS4wNTEuMTIzLS4wNTEuMTE4LS4wNTEuMTE0LS4wNTIuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1MS4wNy0uMDUyLjA2NS0uMDUxLjA2LS4wNS4wNTYtLjA1MS4wNTEtLjA0OS4wMjMtLjAyNS4wMjMtLjAyNC4wMjEtLjAyNS4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDIzLjAxMy0uMDI0LjAxMi0uMDIyLjAxLS4wMjMuMDEtLjAyMy4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMS4wMDQtLjAyMi4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xMzlsLS4wNzcuMDU0LS4wOC4wNTQtLjA4My4wNTQtLjA4NS4wNTItLjA4Ny4wNTMtLjA5LjA1MS0uMDkzLjA1MS0uMDk1LjA1MS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OS0uMTA1LjA0OC0uMTA2LjA0Ny0uMTA5LjA0Ny0uMTExLjA0Ni0uMTE0LjA0NS0uMTE1LjA0NC0uMTE4LjA0NC0uMTIuMDQ0LS4xMjIuMDQyLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjAzOS0uMTMyLjAzOS0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNi0uMTM5LjAzNi0uMTQyLjAzNS0uMTQzLjAzMy0uMTQ0LjAzMy0uMTQ3LjAzMy0uMTQ4LjAzMS0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOC0uMTU0LjAyOC0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNS0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMi0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDExLS4xNzguMDA5LS4xNzkuMDA5LS4xNzkuMDA3LS4xODEuMDA3LS4xODIuMDA1LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAyaC0uMzdsLS4xODQtLjAwMi0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNS0uMTgxLS4wMDctLjE3OS0uMDA3LS4xNzktLjAwOS0uMTc4LS4wMDktLjE3Ni0uMDExLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIyLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI1LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI4LS4xNTMtLjAyOC0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMS0uMTQ2LS4wMzMtLjE0NS0uMDMzLS4xNDMtLjAzMy0uMTQxLS4wMzUtLjE0LS4wMzYtLjEzNy0uMDM2LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM5LS4xMy0uMDM5LS4xMjgtLjA0LS4xMjYtLjA0MS0uMTI0LS4wNDItLjEyMi0uMDQzLS4xMi0uMDQzLS4xMTctLjA0NC0uMTE2LS4wNDQtLjExMy0uMDQ2LS4xMTItLjA0Ni0uMTA5LS4wNDYtLjEwNi0uMDQ3LS4xMDUtLjA0OC0uMTAyLS4wNDktLjEtLjA0OS0uMDk3LS4wNS0uMDk1LS4wNTEtLjA5My0uMDUxLS4wOS0uMDUxLS4wODctLjA1My0uMDg1LS4wNTItLjA4My0uMDU0LS4wOC0uMDU0LS4wNzctLjA1NHY0LjEzOXptMC01LjY2NnYuMDExbC4wMDEuMDIuMDAzLjAyMi4wMDQuMDIxLjAwNS4wMjIuMDA2LjAyMS4wMDcuMDIyLjAwOS4wMjMuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjMuMDE2LjAyNC4wMTcuMDI0LjAxOC4wMjMuMDE5LjAyNC4wMjEuMDI1LjAyMi4wMjQuMDIzLjAyNC4wMjQuMDI1LjA1Mi4wNS4wNTYuMDUuMDYxLjA1LjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTIuMDc5LjA1MS4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTIuMTA1LjA1MS4xMS4wNTIuMTE0LjA1MS4xMTkuMDUxLjEyMy4wNTEuMTI3LjA1LjEzMS4wNS4xMzUuMDUuMTM5LjA0OS4xNDQuMDQ4LjE0Ny4wNDguMTUyLjA0Ny4xNTUuMDQ2LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDMuMTcxLjA0My4xNzYuMDQyLjE3OC4wNC4xODMuMDQuMTg3LjAzOC4xOS4wMzcuMTk0LjAzNi4xOTcuMDM0LjIwMi4wMzMuMjA0LjAzMi4yMDkuMDMuMjEyLjAyOC4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIxLjIzLjAyLjIzMy4wMTguMjM2LjAxNy4yNC4wMTQuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA2LjI1Ni4wMDMuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDAzLjI1NC0uMDA2LjI1LS4wMDguMjQ3LS4wMS4yNDQtLjAxMy4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyLjIyNi0uMDIyLjIyNC0uMDI0LjIyLS4wMjUuMjE2LS4wMjcuMjEyLS4wMjkuMjEtLjAzLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM1LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDM5LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDUuMTU1LS4wNDcuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDkuMTM5LS4wNDkuMTM2LS4wNDkuMTMxLS4wNTEuMTI2LS4wNS4xMjMtLjA1MS4xMTgtLjA1Mi4xMTQtLjA1MS4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUyLjA3LS4wNTEuMDY1LS4wNTEuMDYtLjA1MS4wNTYtLjA1LjA1MS0uMDQ5LjAyMy0uMDI1LjAyMy0uMDI1LjAyMS0uMDI0LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjQuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMi4wMS0uMDIzLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxdi00LjE1M2wtLjA3Ny4wNTQtLjA4LjA1NC0uMDgzLjA1My0uMDg1LjA1My0uMDg3LjA1My0uMDkuMDUxLS4wOTMuMDUxLS4wOTUuMDUxLS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ4LS4xMDUuMDQ4LS4xMDYuMDQ4LS4xMDkuMDQ2LS4xMTEuMDQ2LS4xMTQuMDQ2LS4xMTUuMDQ0LS4xMTguMDQ0LS4xMi4wNDMtLjEyMi4wNDMtLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDM5LS4xMzIuMDM5LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM2LS4xMzkuMDM2LS4xNDIuMDM0LS4xNDMuMDM0LS4xNDQuMDMzLS4xNDcuMDMyLS4xNDguMDMyLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI4LS4xNTQuMDI4LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI0LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIzLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMS0uMTc4LjAxLS4xNzkuMDA5LS4xNzkuMDA3LS4xODEuMDA2LS4xODIuMDA2LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAxLS4xODUuMDAxLS4xODUtLjAwMS0uMTg0LS4wMDEtLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDYtLjE4MS0uMDA2LS4xNzktLjAwNy0uMTc5LS4wMDktLjE3OC0uMDEtLjE3Ni0uMDEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjMtLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjQtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjgtLjE1My0uMDI4LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMyLS4xNDYtLjAzMi0uMTQ1LS4wMzMtLjE0My0uMDM0LS4xNDEtLjAzNC0uMTQtLjAzNi0uMTM3LS4wMzYtLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzktLjEzLS4wMzktLjEyOC0uMDQxLS4xMjYtLjA0MS0uMTI0LS4wNDEtLjEyMi0uMDQzLS4xMi0uMDQzLS4xMTctLjA0NC0uMTE2LS4wNDQtLjExMy0uMDQ2LS4xMTItLjA0Ni0uMTA5LS4wNDYtLjEwNi0uMDQ4LS4xMDUtLjA0OC0uMTAyLS4wNDgtLjEtLjA1LS4wOTctLjA0OS0uMDk1LS4wNTEtLjA5My0uMDUxLS4wOS0uMDUyLS4wODctLjA1Mi0uMDg1LS4wNTMtLjA4My0uMDUzLS4wOC0uMDU0LS4wNzctLjA1NHY0LjE1M3ptOC43NC04LjE3OWwtLjI1Ny4wMDQtLjI1NC4wMDUtLjI1LjAwOC0uMjQ3LjAxMS0uMjQ0LjAxMi0uMjQxLjAxNC0uMjM3LjAxNi0uMjMzLjAxOC0uMjMxLjAyMS0uMjI2LjAyMi0uMjI0LjAyMy0uMjIuMDI2LS4yMTYuMDI3LS4yMTIuMDI4LS4yMS4wMzEtLjIwNS4wMzItLjIwMi4wMzMtLjE5OC4wMzQtLjE5NC4wMzYtLjE5MS4wMzgtLjE4Ny4wMzgtLjE4My4wNC0uMTc5LjA0MS0uMTc1LjA0Mi0uMTcyLjA0My0uMTY4LjA0My0uMTYzLjA0NS0uMTYuMDQ2LS4xNTUuMDQ2LS4xNTIuMDQ4LS4xNDguMDQ4LS4xNDMuMDQ4LS4xMzkuMDQ5LS4xMzYuMDUtLjEzMS4wNS0uMTI2LjA1MS0uMTIzLjA1MS0uMTE4LjA1MS0uMTE0LjA1Mi0uMTEuMDUyLS4xMDYuMDUyLS4xMDEuMDUyLS4wOTYuMDUyLS4wOTIuMDUyLS4wODguMDUyLS4wODMuMDUyLS4wNzkuMDUyLS4wNzQuMDUxLS4wNy4wNTItLjA2NS4wNTEtLjA2LjA1LS4wNTYuMDUtLjA1MS4wNS0uMDIzLjAyNS0uMDIzLjAyNC0uMDIxLjAyNC0uMDIuMDI1LS4wMTkuMDI0LS4wMTguMDI0LS4wMTcuMDIzLS4wMTUuMDI0LS4wMTQuMDIzLS4wMTMuMDIzLS4wMTIuMDIzLS4wMS4wMjMtLjAxLjAyMi0uMDA4LjAyMi0uMDA2LjAyMy0uMDA2LjAyMS0uMDA0LjAyMi0uMDA0LjAyMS0uMDAxLjAyMS0uMDAxLjAyMS4wMDEuMDIxLjAwMS4wMjEuMDA0LjAyMS4wMDQuMDIyLjAwNi4wMjEuMDA2LjAyMy4wMDguMDIyLjAxLjAyMi4wMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNC4wMjMuMDE1LjAyNC4wMTcuMDIzLjAxOC4wMjQuMDE5LjAyNC4wMi4wMjUuMDIxLjAyNC4wMjMuMDI0LjAyMy4wMjUuMDUxLjA1LjA1Ni4wNS4wNi4wNS4wNjUuMDUxLjA3LjA1Mi4wNzQuMDUxLjA3OS4wNTIuMDgzLjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk2LjA1Mi4xMDEuMDUyLjEwNi4wNTIuMTEuMDUyLjExNC4wNTIuMTE4LjA1MS4xMjMuMDUxLjEyNi4wNTEuMTMxLjA1LjEzNi4wNS4xMzkuMDQ5LjE0My4wNDguMTQ4LjA0OC4xNTIuMDQ4LjE1NS4wNDYuMTYuMDQ2LjE2My4wNDUuMTY4LjA0My4xNzIuMDQzLjE3NS4wNDIuMTc5LjA0MS4xODMuMDQuMTg3LjAzOC4xOTEuMDM4LjE5NC4wMzYuMTk4LjAzNC4yMDIuMDMzLjIwNS4wMzIuMjEuMDMxLjIxMi4wMjguMjE2LjAyNy4yMi4wMjYuMjI0LjAyMy4yMjYuMDIyLjIzMS4wMjEuMjMzLjAxOC4yMzcuMDE2LjI0MS4wMTQuMjQ0LjAxMi4yNDcuMDExLjI1LjAwOC4yNTQuMDA1LjI1Ny4wMDQuMjYuMDAxLjI2LS4wMDEuMjU3LS4wMDQuMjU0LS4wMDUuMjUtLjAwOC4yNDctLjAxMS4yNDQtLjAxMi4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyMS4yMjYtLjAyMi4yMjQtLjAyMy4yMi0uMDI2LjIxNi0uMDI3LjIxMi0uMDI4LjIxLS4wMzEuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzQuMTk0LS4wMzYuMTkxLS4wMzguMTg3LS4wMzguMTgzLS4wNC4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0My4xNjMtLjA0NS4xNi0uMDQ2LjE1NS0uMDQ2LjE1Mi0uMDQ4LjE0OC0uMDQ4LjE0My0uMDQ4LjEzOS0uMDQ5LjEzNi0uMDUuMTMxLS4wNS4xMjYtLjA1MS4xMjMtLjA1MS4xMTgtLjA1MS4xMTQtLjA1Mi4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUxLjA3LS4wNTIuMDY1LS4wNTEuMDYtLjA1LjA1Ni0uMDUuMDUxLS4wNS4wMjMtLjAyNS4wMjMtLjAyNC4wMjEtLjAyNC4wMi0uMDI1LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDIzLjAxNS0uMDI0LjAxNC0uMDIzLjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjMuMDEtLjAyMi4wMDgtLjAyMi4wMDYtLjAyMy4wMDYtLjAyMS4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMS0uMDAxLS4wMjEtLjAwMS0uMDIxLS4wMDQtLjAyMS0uMDA0LS4wMjItLjAwNi0uMDIxLS4wMDYtLjAyMy0uMDA4LS4wMjItLjAxLS4wMjItLjAxLS4wMjMtLjAxMi0uMDIzLS4wMTMtLjAyMy0uMDE0LS4wMjMtLjAxNS0uMDI0LS4wMTctLjAyMy0uMDE4LS4wMjQtLjAxOS0uMDI0LS4wMi0uMDI1LS4wMjEtLjAyNC0uMDIzLS4wMjQtLjAyMy0uMDI1LS4wNTEtLjA1LS4wNTYtLjA1LS4wNi0uMDUtLjA2NS0uMDUxLS4wNy0uMDUyLS4wNzQtLjA1MS0uMDc5LS4wNTItLjA4My0uMDUyLS4wODgtLjA1Mi0uMDkyLS4wNTItLjA5Ni0uMDUyLS4xMDEtLjA1Mi0uMTA2LS4wNTItLjExLS4wNTItLjExNC0uMDUyLS4xMTgtLjA1MS0uMTIzLS4wNTEtLjEyNi0uMDUxLS4xMzEtLjA1LS4xMzYtLjA1LS4xMzktLjA0OS0uMTQzLS4wNDgtLjE0OC0uMDQ4LS4xNTItLjA0OC0uMTU1LS4wNDYtLjE2LS4wNDYtLjE2My0uMDQ1LS4xNjgtLjA0My0uMTcyLS4wNDMtLjE3NS0uMDQyLS4xNzktLjA0MS0uMTgzLS4wNC0uMTg3LS4wMzgtLjE5MS0uMDM4LS4xOTQtLjAzNi0uMTk4LS4wMzQtLjIwMi0uMDMzLS4yMDUtLjAzMi0uMjEtLjAzMS0uMjEyLS4wMjgtLjIxNi0uMDI3LS4yMi0uMDI2LS4yMjQtLjAyMy0uMjI2LS4wMjItLjIzMS0uMDIxLS4yMzMtLjAxOC0uMjM3LS4wMTYtLjI0MS0uMDE0LS4yNDQtLjAxMi0uMjQ3LS4wMTEtLjI1LS4wMDgtLjI1NC0uMDA1LS4yNTctLjAwNC0uMjYtLjAwMS0uMjYuMDAxeiIpfSwiaW5zZXJ0RGF0YWJhc2VJY29uIiksbkhlPW8oZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiY29tcHV0ZXIiKS5hdHRyKCJ3aWR0aCIsIjI0IikuYXR0cigiaGVpZ2h0IiwiMjQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTIgMnYxM2gyMHYtMTNoLTIwem0xOCAxMWgtMTZ2LTloMTZ2OXptLTEwLjIyOCA2bC40NjYtMWgzLjUyNGwuNDY3IDFoLTQuNDU3em0xNC4yMjggM2gtMjRsMi02aDIuMTA0bC0xLjMzIDRoMTguNDVsLTEuMjk3LTRoMi4wNzNsMiA2em0tNS0xMGgtMTR2LTdoMTR2N3oiKX0sImluc2VydENvbXB1dGVySWNvbiIpLGlIZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJzeW1ib2wiKS5hdHRyKCJpZCIsImNsb2NrIikuYXR0cigid2lkdGgiLCIyNCIpLmF0dHIoImhlaWdodCIsIjI0IikuYXBwZW5kKCJwYXRoIikuYXR0cigidHJhbnNmb3JtIiwic2NhbGUoLjUpIikuYXR0cigiZCIsIk0xMiAyYzUuNTE0IDAgMTAgNC40ODYgMTAgMTBzLTQuNDg2IDEwLTEwIDEwLTEwLTQuNDg2LTEwLTEwIDQuNDg2LTEwIDEwLTEwem0wLTJjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJzNS4zNzMgMTIgMTIgMTIgMTItNS4zNzMgMTItMTItNS4zNzMtMTItMTItMTJ6bTUuODQ4IDEyLjQ1OWMuMjAyLjAzOC4yMDIuMzMzLjAwMS4zNzItMS45MDcuMzYxLTYuMDQ1IDEuMTExLTYuNTQ3IDEuMTExLS43MTkgMC0xLjMwMS0uNTgyLTEuMzAxLTEuMzAxIDAtLjUxMi43Ny01LjQ0NyAxLjEyNS03LjQ0NS4wMzQtLjE5Mi4zMTItLjE4MS4zNDMuMDE0bC45ODUgNi4yMzggNS4zOTQgMS4wMTF6Iil9LCJpbnNlcnRDbG9ja0ljb24iKSxhSGU9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw3LjkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTIpLmF0dHIoIm1hcmtlckhlaWdodCIsMTIpLmF0dHIoIm9yaWVudCIsImF1dG8tc3RhcnQtcmV2ZXJzZSIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIC0xIDAgTCAxMCA1IEwgMCAxMCB6Iil9LCJpbnNlcnRBcnJvd0hlYWQiKSxzSGU9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJmaWxsZWQtaGVhZCIpLmF0dHIoInJlZlgiLDE1LjUpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LCJpbnNlcnRBcnJvd0ZpbGxlZEhlYWQiKSxvSGU9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJzZXF1ZW5jZW51bWJlciIpLmF0dHIoInJlZlgiLDE1KS5hdHRyKCJyZWZZIiwxNSkuYXR0cigibWFya2VyV2lkdGgiLDYwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsMTUpLmF0dHIoImN5IiwxNSkuYXR0cigiciIsNil9LCJpbnNlcnRTZXF1ZW5jZU51bWJlciIpLGxIZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImNyb3NzaGVhZCIpLmF0dHIoIm1hcmtlcldpZHRoIiwxNSkuYXR0cigibWFya2VySGVpZ2h0Iiw4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXR0cigicmVmWCIsNCkuYXR0cigicmVmWSIsNC41KS5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAwMDAiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjAsIDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHQiKS5hdHRyKCJkIiwiTSAxLDIgTCA2LDcgTSA2LDIgTCAxLDciKX0sImluc2VydEFycm93Q3Jvc3NIZWFkIiksbmRlPW8oZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCxmaWxsOnZvaWQgMCxhbmNob3I6dm9pZCAwLHN0eWxlOiIjNjY2Iix3aWR0aDp2b2lkIDAsaGVpZ2h0OnZvaWQgMCx0ZXh0TWFyZ2luOjAscng6MCxyeTowLHRzcGFuOiEwLHZhbGlnbjp2b2lkIDB9fSwiZ2V0VGV4dE9iaiIpLGNIZT1vKGZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsZmlsbDoiI0VERjJBRSIsc3Ryb2tlOiIjNjY2Iix3aWR0aDoxMDAsYW5jaG9yOiJzdGFydCIsaGVpZ2h0OjEwMCxyeDowLHJ5OjB9fSwiZ2V0Tm90ZVJlY3QiKSxMTz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoYSxzLGwsdSxoLGYsZCl7bGV0IHA9cy5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixsK2gvMikuYXR0cigieSIsdStmLzIrNSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChhKTtpKHAsZCl9byh0LCJieVRleHQiKTtmdW5jdGlvbiBlKGEscyxsLHUsaCxmLGQscCl7bGV0e2FjdG9yRm9udFNpemU6bSxhY3RvckZvbnRGYW1pbHk6ZyxhY3RvckZvbnRXZWlnaHQ6eX09cCxbdix4XT1IbyhtKSxiPWEuc3BsaXQocWUubGluZUJyZWFrUmVnZXgpO2ZvcihsZXQgdz0wO3c8Yi5sZW5ndGg7dysrKXtsZXQgXz13KnYtdiooYi5sZW5ndGgtMSkvMixUPXMuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbCtoLzIpLmF0dHIoInkiLHUpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJmb250LXNpemUiLHgpLnN0eWxlKCJmb250LXdlaWdodCIseSkuc3R5bGUoImZvbnQtZmFtaWx5IixnKTtULmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixsK2gvMikuYXR0cigiZHkiLF8pLnRleHQoYlt3XSksVC5hdHRyKCJ5Iix1K2YvMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLGkoVCxkKX19byhlLCJieVRzcGFuIik7ZnVuY3Rpb24gcihhLHMsbCx1LGgsZixkLHApe2xldCBtPXMuYXBwZW5kKCJzd2l0Y2giKSx5PW0uYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsbCkuYXR0cigieSIsdSkuYXR0cigid2lkdGgiLGgpLmF0dHIoImhlaWdodCIsZikuYXBwZW5kKCJ4aHRtbDpkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlIikuc3R5bGUoImhlaWdodCIsIjEwMCUiKS5zdHlsZSgid2lkdGgiLCIxMDAlIik7eS5hcHBlbmQoImRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikuc3R5bGUoInZlcnRpY2FsLWFsaWduIiwibWlkZGxlIikudGV4dChhKSxlKGEsbSxsLHUsaCxmLGQscCksaSh5LGQpfW8ociwiYnlGbyIpO2FzeW5jIGZ1bmN0aW9uIG4oYSxzLGwsdSxoLGYsZCxwKXtsZXQgbT1hd2FpdCBzZChhLENyKCkpLGc9cy5hcHBlbmQoInN3aXRjaCIpLHY9Zy5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixsK2gvMi1tLndpZHRoLzIpLmF0dHIoInkiLHUrZi8yLW0uaGVpZ2h0LzIpLmF0dHIoIndpZHRoIixtLndpZHRoKS5hdHRyKCJoZWlnaHQiLG0uaGVpZ2h0KS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO3YuYXBwZW5kKCJkaXYiKS5zdHlsZSgidGV4dC1hbGlnbiIsImNlbnRlciIpLnN0eWxlKCJ2ZXJ0aWNhbC1hbGlnbiIsIm1pZGRsZSIpLmh0bWwoYXdhaXQgYmgoYSxDcigpKSksZShhLGcsbCx1LGgsZixkLHApLGkodixkKX1vKG4sImJ5S2F0ZXgiKTtmdW5jdGlvbiBpKGEscyl7Zm9yKGxldCBsIGluIHMpcy5oYXNPd25Qcm9wZXJ0eShsKSYmYS5hdHRyKGwsc1tsXSl9cmV0dXJuIG8oaSwiX3NldFRleHRBdHRycyIpLGZ1bmN0aW9uKGEscz0hMSl7cmV0dXJuIHM/bjphLnRleHRQbGFjZW1lbnQ9PT0iZm8iP3I6YS50ZXh0UGxhY2VtZW50PT09Im9sZCI/dDplfX0oKSx1SGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGksYSxzLGwsdSxoLGYpe2xldCBkPWEuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIscykuYXR0cigieSIsbCkuc3R5bGUoInRleHQtYW5jaG9yIiwic3RhcnQiKS50ZXh0KGkpO24oZCxmKX1vKHQsImJ5VGV4dCIpO2Z1bmN0aW9uIGUoaSxhLHMsbCx1LGgsZixkKXtsZXR7YWN0b3JGb250U2l6ZTpwLGFjdG9yRm9udEZhbWlseTptLGFjdG9yRm9udFdlaWdodDpnfT1kLHk9aS5zcGxpdChxZS5saW5lQnJlYWtSZWdleCk7Zm9yKGxldCB2PTA7djx5Lmxlbmd0aDt2Kyspe2xldCB4PXYqcC1wKih5Lmxlbmd0aC0xKS8yLGI9YS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixzKS5hdHRyKCJ5IixsKS5zdHlsZSgidGV4dC1hbmNob3IiLCJzdGFydCIpLnN0eWxlKCJmb250LXNpemUiLHApLnN0eWxlKCJmb250LXdlaWdodCIsZykuc3R5bGUoImZvbnQtZmFtaWx5IixtKTtiLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixzKS5hdHRyKCJkeSIseCkudGV4dCh5W3ZdKSxiLmF0dHIoInkiLGwraC8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImNlbnRyYWwiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIiksbihiLGYpfX1vKGUsImJ5VHNwYW4iKTtmdW5jdGlvbiByKGksYSxzLGwsdSxoLGYsZCl7bGV0IHA9YS5hcHBlbmQoInN3aXRjaCIpLGc9cC5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixzKS5hdHRyKCJ5IixsKS5hdHRyKCJ3aWR0aCIsdSkuYXR0cigiaGVpZ2h0IixoKS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTtnLmFwcGVuZCgiZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KGkpLGUoaSxwLHMsbCx1LGgsZixkKSxuKGcsZil9byhyLCJieUZvIik7ZnVuY3Rpb24gbihpLGEpe2ZvcihsZXQgcyBpbiBhKWEuaGFzT3duUHJvcGVydHkocykmJmkuYXR0cihzLGFbc10pfXJldHVybiBvKG4sIl9zZXRUZXh0QXR0cnMiKSxmdW5jdGlvbihpKXtyZXR1cm4gaS50ZXh0UGxhY2VtZW50PT09ImZvIj9yOmkudGV4dFBsYWNlbWVudD09PSJvbGQiP3Q6ZX19KCksZmk9e2RyYXdSZWN0OkFPLGRyYXdUZXh0OkkwLGRyYXdMYWJlbDp0ZGUsZHJhd0FjdG9yOlFVZSxkcmF3Qm94OlpVZSxkcmF3UG9wdXA6cVVlLGFuY2hvckVsZW1lbnQ6SlVlLGRyYXdBY3RpdmF0aW9uOmVIZSxkcmF3TG9vcDp0SGUsZHJhd0JhY2tncm91bmRSZWN0OnJkZSxpbnNlcnRBcnJvd0hlYWQ6YUhlLGluc2VydEFycm93RmlsbGVkSGVhZDpzSGUsaW5zZXJ0U2VxdWVuY2VOdW1iZXI6b0hlLGluc2VydEFycm93Q3Jvc3NIZWFkOmxIZSxpbnNlcnREYXRhYmFzZUljb246ckhlLGluc2VydENvbXB1dGVySWNvbjpuSGUsaW5zZXJ0Q2xvY2tJY29uOmlIZSxnZXRUZXh0T2JqOm5kZSxnZXROb3RlUmVjdDpjSGUsZml4TGlmZUxpbmVIZWlnaHRzOl9PLHNhbml0aXplVXJsOkNPLnNhbml0aXplVXJsfX0pO2FzeW5jIGZ1bmN0aW9uIGZIZSh0LGUpe250LmJ1bXBWZXJ0aWNhbFBvcygxMCk7bGV0e3N0YXJ0eDpyLHN0b3B4Om4sbWVzc2FnZTppfT1lLGE9cWUuc3BsaXRCcmVha3MoaSkubGVuZ3RoLHM9eWkoaSksbD1zP2F3YWl0IHNkKGkscGUoKSk6VXQuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoaSxPMChEZSkpO2lmKCFzKXtsZXQgZD1sLmhlaWdodC9hO2UuaGVpZ2h0Kz1kLG50LmJ1bXBWZXJ0aWNhbFBvcyhkKX1sZXQgdSxoPWwuaGVpZ2h0LTEwLGY9bC53aWR0aDtpZihyPT09bil7dT1udC5nZXRWZXJ0aWNhbFBvcygpK2gsRGUucmlnaHRBbmdsZXN8fChoKz1EZS5ib3hNYXJnaW4sdT1udC5nZXRWZXJ0aWNhbFBvcygpK2gpLGgrPTMwO2xldCBkPXFlLmdldE1heChmLzIsRGUud2lkdGgvMik7bnQuaW5zZXJ0KHItZCxudC5nZXRWZXJ0aWNhbFBvcygpLTEwK2gsbitkLG50LmdldFZlcnRpY2FsUG9zKCkrMzAraCl9ZWxzZSBoKz1EZS5ib3hNYXJnaW4sdT1udC5nZXRWZXJ0aWNhbFBvcygpK2gsbnQuaW5zZXJ0KHIsdS0xMCxuLHUpO3JldHVybiBudC5idW1wVmVydGljYWxQb3MoaCksZS5oZWlnaHQrPWgsZS5zdG9weT1lLnN0YXJ0eStlLmhlaWdodCxudC5pbnNlcnQoZS5mcm9tQm91bmRzLGUuc3RhcnR5LGUudG9Cb3VuZHMsZS5zdG9weSksdX1mdW5jdGlvbiBqYyh0LGUscixuLGkpe250LmJ1bXBWZXJ0aWNhbFBvcyhyKTtsZXQgYT1uO2lmKGUuaWQmJmUubWVzc2FnZSYmdFtlLmlkXSl7bGV0IHM9dFtlLmlkXS53aWR0aCxsPU8wKERlKTtlLm1lc3NhZ2U9VXQud3JhcExhYmVsKGBbJHtlLm1lc3NhZ2V9XWAscy0yKkRlLndyYXBQYWRkaW5nLGwpLGUud2lkdGg9cyxlLndyYXA9ITA7bGV0IHU9VXQuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoZS5tZXNzYWdlLGwpLGg9cWUuZ2V0TWF4KHUuaGVpZ2h0LERlLmxhYmVsQm94SGVpZ2h0KTthPW4raCxZLmRlYnVnKGAke2h9IC0gJHtlLm1lc3NhZ2V9YCl9aShlKSxudC5idW1wVmVydGljYWxQb3MoYSl9ZnVuY3Rpb24gbUhlKHQsZSxyLG4saSxhLHMpe2Z1bmN0aW9uIGwoaCxmKXtoLng8aS5nZXQodC5mcm9tKS54PyhudC5pbnNlcnQoZS5zdG9weC1mLGUuc3RhcnR5LGUuc3RhcnR4LGUuc3RvcHkraC5oZWlnaHQvMitEZS5ub3RlTWFyZ2luKSxlLnN0b3B4PWUuc3RvcHgrZik6KG50Lmluc2VydChlLnN0YXJ0eCxlLnN0YXJ0eSxlLnN0b3B4K2YsZS5zdG9weStoLmhlaWdodC8yK0RlLm5vdGVNYXJnaW4pLGUuc3RvcHg9ZS5zdG9weC1mKX1vKGwsInJlY2VpdmVyQWRqdXN0bWVudCIpO2Z1bmN0aW9uIHUoaCxmKXtoLng8aS5nZXQodC50bykueD8obnQuaW5zZXJ0KGUuc3RhcnR4LWYsZS5zdGFydHksZS5zdG9weCxlLnN0b3B5K2guaGVpZ2h0LzIrRGUubm90ZU1hcmdpbiksZS5zdGFydHg9ZS5zdGFydHgrZik6KG50Lmluc2VydChlLnN0b3B4LGUuc3RhcnR5LGUuc3RhcnR4K2YsZS5zdG9weStoLmhlaWdodC8yK0RlLm5vdGVNYXJnaW4pLGUuc3RhcnR4PWUuc3RhcnR4LWYpfWlmKG8odSwic2VuZGVyQWRqdXN0bWVudCIpLGEuZ2V0KHQudG8pPT1uKXtsZXQgaD1pLmdldCh0LnRvKSxmPWgudHlwZT09ImFjdG9yIj9rZi8yKzM6aC53aWR0aC8yKzM7bChoLGYpLGguc3RhcnR5PXItaC5oZWlnaHQvMixudC5idW1wVmVydGljYWxQb3MoaC5oZWlnaHQvMil9ZWxzZSBpZihzLmdldCh0LmZyb20pPT1uKXtsZXQgaD1pLmdldCh0LmZyb20pO2lmKERlLm1pcnJvckFjdG9ycyl7bGV0IGY9aC50eXBlPT0iYWN0b3IiP2tmLzI6aC53aWR0aC8yO3UoaCxmKX1oLnN0b3B5PXItaC5oZWlnaHQvMixudC5idW1wVmVydGljYWxQb3MoaC5oZWlnaHQvMil9ZWxzZSBpZihzLmdldCh0LnRvKT09bil7bGV0IGg9aS5nZXQodC50byk7aWYoRGUubWlycm9yQWN0b3JzKXtsZXQgZj1oLnR5cGU9PSJhY3RvciI/a2YvMiszOmgud2lkdGgvMiszO2woaCxmKX1oLnN0b3B5PXItaC5oZWlnaHQvMixudC5idW1wVmVydGljYWxQb3MoaC5oZWlnaHQvMil9fWFzeW5jIGZ1bmN0aW9uIHlIZSh0LGUscil7bGV0IG49e307Zm9yKGxldCBpIG9mIGUpaWYodC5nZXQoaS50bykmJnQuZ2V0KGkuZnJvbSkpe2xldCBhPXQuZ2V0KGkudG8pO2lmKGkucGxhY2VtZW50PT09ci5kYi5QTEFDRU1FTlQuTEVGVE9GJiYhYS5wcmV2QWN0b3J8fGkucGxhY2VtZW50PT09ci5kYi5QTEFDRU1FTlQuUklHSFRPRiYmIWEubmV4dEFjdG9yKWNvbnRpbnVlO2xldCBzPWkucGxhY2VtZW50IT09dm9pZCAwLGw9IXMsdT1zP1FnKERlKTpPMChEZSksaD1pLndyYXA/VXQud3JhcExhYmVsKGkubWVzc2FnZSxEZS53aWR0aC0yKkRlLndyYXBQYWRkaW5nLHUpOmkubWVzc2FnZSxkPSh5aShoKT9hd2FpdCBzZChpLm1lc3NhZ2UscGUoKSk6VXQuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoaCx1KSkud2lkdGgrMipEZS53cmFwUGFkZGluZztsJiZpLmZyb209PT1hLm5leHRBY3Rvcj9uW2kudG9dPXFlLmdldE1heChuW2kudG9dfHwwLGQpOmwmJmkuZnJvbT09PWEucHJldkFjdG9yP25baS5mcm9tXT1xZS5nZXRNYXgobltpLmZyb21dfHwwLGQpOmwmJmkuZnJvbT09PWkudG8/KG5baS5mcm9tXT1xZS5nZXRNYXgobltpLmZyb21dfHwwLGQvMiksbltpLnRvXT1xZS5nZXRNYXgobltpLnRvXXx8MCxkLzIpKTppLnBsYWNlbWVudD09PXIuZGIuUExBQ0VNRU5ULlJJR0hUT0Y/bltpLmZyb21dPXFlLmdldE1heChuW2kuZnJvbV18fDAsZCk6aS5wbGFjZW1lbnQ9PT1yLmRiLlBMQUNFTUVOVC5MRUZUT0Y/blthLnByZXZBY3Rvcl09cWUuZ2V0TWF4KG5bYS5wcmV2QWN0b3JdfHwwLGQpOmkucGxhY2VtZW50PT09ci5kYi5QTEFDRU1FTlQuT1ZFUiYmKGEucHJldkFjdG9yJiYoblthLnByZXZBY3Rvcl09cWUuZ2V0TWF4KG5bYS5wcmV2QWN0b3JdfHwwLGQvMikpLGEubmV4dEFjdG9yJiYobltpLmZyb21dPXFlLmdldE1heChuW2kuZnJvbV18fDAsZC8yKSkpfXJldHVybiBZLmRlYnVnKCJtYXhNZXNzYWdlV2lkdGhQZXJBY3RvcjoiLG4pLG59YXN5bmMgZnVuY3Rpb24geEhlKHQsZSxyKXtsZXQgbj0wO2ZvcihsZXQgYSBvZiB0LmtleXMoKSl7bGV0IHM9dC5nZXQoYSk7cy53cmFwJiYocy5kZXNjcmlwdGlvbj1VdC53cmFwTGFiZWwocy5kZXNjcmlwdGlvbixEZS53aWR0aC0yKkRlLndyYXBQYWRkaW5nLERPKERlKSkpO2xldCBsPXlpKHMuZGVzY3JpcHRpb24pP2F3YWl0IHNkKHMuZGVzY3JpcHRpb24scGUoKSk6VXQuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMocy5kZXNjcmlwdGlvbixETyhEZSkpO3Mud2lkdGg9cy53cmFwP0RlLndpZHRoOnFlLmdldE1heChEZS53aWR0aCxsLndpZHRoKzIqRGUud3JhcFBhZGRpbmcpLHMuaGVpZ2h0PXMud3JhcD9xZS5nZXRNYXgobC5oZWlnaHQsRGUuaGVpZ2h0KTpEZS5oZWlnaHQsbj1xZS5nZXRNYXgobixzLmhlaWdodCl9Zm9yKGxldCBhIGluIGUpe2xldCBzPXQuZ2V0KGEpO2lmKCFzKWNvbnRpbnVlO2xldCBsPXQuZ2V0KHMubmV4dEFjdG9yKTtpZighbCl7bGV0IGQ9ZVthXStEZS5hY3Rvck1hcmdpbi1zLndpZHRoLzI7cy5tYXJnaW49cWUuZ2V0TWF4KGQsRGUuYWN0b3JNYXJnaW4pO2NvbnRpbnVlfWxldCBoPWVbYV0rRGUuYWN0b3JNYXJnaW4tcy53aWR0aC8yLWwud2lkdGgvMjtzLm1hcmdpbj1xZS5nZXRNYXgoaCxEZS5hY3Rvck1hcmdpbil9bGV0IGk9MDtyZXR1cm4gci5mb3JFYWNoKGE9PntsZXQgcz1PMChEZSksbD1hLmFjdG9yS2V5cy5yZWR1Y2UoKGYsZCk9PmYrPXQuZ2V0KGQpLndpZHRoKyh0LmdldChkKS5tYXJnaW58fDApLDApO2wtPTIqRGUuYm94VGV4dE1hcmdpbixhLndyYXAmJihhLm5hbWU9VXQud3JhcExhYmVsKGEubmFtZSxsLTIqRGUud3JhcFBhZGRpbmcscykpO2xldCB1PVV0LmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGEubmFtZSxzKTtpPXFlLmdldE1heCh1LmhlaWdodCxpKTtsZXQgaD1xZS5nZXRNYXgobCx1LndpZHRoKzIqRGUud3JhcFBhZGRpbmcpO2lmKGEubWFyZ2luPURlLmJveFRleHRNYXJnaW4sbDxoKXtsZXQgZj0oaC1sKS8yO2EubWFyZ2luKz1mfX0pLHIuZm9yRWFjaChhPT5hLnRleHRNYXhIZWlnaHQ9aSkscWUuZ2V0TWF4KG4sRGUuaGVpZ2h0KX12YXIgRGUsbnQsaEhlLE8wLFFnLERPLGRIZSxwSGUsTk8sc2RlLG9kZSxJRSxhZGUsZ0hlLHZIZSxiSGUsd0hlLFRIZSxsZGUsY2RlPU0oKCk9PnsidXNlIHN0cmljdCI7cHIoKTtpZGUoKTt1dCgpO2ZyKCk7bHYoKTtWdCgpO2dwKCk7aHIoKTthaSgpO0RlPXt9LG50PXtkYXRhOntzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdmVydGljYWxQb3M6MCxzZXF1ZW5jZUl0ZW1zOltdLGFjdGl2YXRpb25zOltdLG1vZGVsczp7Z2V0SGVpZ2h0Om8oZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXguYXBwbHkobnVsbCx0aGlzLmFjdG9ycy5sZW5ndGg9PT0wP1swXTp0aGlzLmFjdG9ycy5tYXAodD0+dC5oZWlnaHR8fDApKSsodGhpcy5sb29wcy5sZW5ndGg9PT0wPzA6dGhpcy5sb29wcy5tYXAodD0+dC5oZWlnaHR8fDApLnJlZHVjZSgodCxlKT0+dCtlKSkrKHRoaXMubWVzc2FnZXMubGVuZ3RoPT09MD8wOnRoaXMubWVzc2FnZXMubWFwKHQ9PnQuaGVpZ2h0fHwwKS5yZWR1Y2UoKHQsZSk9PnQrZSkpKyh0aGlzLm5vdGVzLmxlbmd0aD09PTA/MDp0aGlzLm5vdGVzLm1hcCh0PT50LmhlaWdodHx8MCkucmVkdWNlKCh0LGUpPT50K2UpKX0sImdldEhlaWdodCIpLGNsZWFyOm8oZnVuY3Rpb24oKXt0aGlzLmFjdG9ycz1bXSx0aGlzLmJveGVzPVtdLHRoaXMubG9vcHM9W10sdGhpcy5tZXNzYWdlcz1bXSx0aGlzLm5vdGVzPVtdfSwiY2xlYXIiKSxhZGRCb3g6byhmdW5jdGlvbih0KXt0aGlzLmJveGVzLnB1c2godCl9LCJhZGRCb3giKSxhZGRBY3RvcjpvKGZ1bmN0aW9uKHQpe3RoaXMuYWN0b3JzLnB1c2godCl9LCJhZGRBY3RvciIpLGFkZExvb3A6byhmdW5jdGlvbih0KXt0aGlzLmxvb3BzLnB1c2godCl9LCJhZGRMb29wIiksYWRkTWVzc2FnZTpvKGZ1bmN0aW9uKHQpe3RoaXMubWVzc2FnZXMucHVzaCh0KX0sImFkZE1lc3NhZ2UiKSxhZGROb3RlOm8oZnVuY3Rpb24odCl7dGhpcy5ub3Rlcy5wdXNoKHQpfSwiYWRkTm90ZSIpLGxhc3RBY3RvcjpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0b3JzW3RoaXMuYWN0b3JzLmxlbmd0aC0xXX0sImxhc3RBY3RvciIpLGxhc3RMb29wOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb29wc1t0aGlzLmxvb3BzLmxlbmd0aC0xXX0sImxhc3RMb29wIiksbGFzdE1lc3NhZ2U6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VzW3RoaXMubWVzc2FnZXMubGVuZ3RoLTFdfSwibGFzdE1lc3NhZ2UiKSxsYXN0Tm90ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm90ZXNbdGhpcy5ub3Rlcy5sZW5ndGgtMV19LCJsYXN0Tm90ZSIpLGFjdG9yczpbXSxib3hlczpbXSxsb29wczpbXSxtZXNzYWdlczpbXSxub3RlczpbXX0saW5pdDpvKGZ1bmN0aW9uKCl7dGhpcy5zZXF1ZW5jZUl0ZW1zPVtdLHRoaXMuYWN0aXZhdGlvbnM9W10sdGhpcy5tb2RlbHMuY2xlYXIoKSx0aGlzLmRhdGE9e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwfSx0aGlzLnZlcnRpY2FsUG9zPTAsb2RlKHBlKCkpfSwiaW5pdCIpLHVwZGF0ZVZhbDpvKGZ1bmN0aW9uKHQsZSxyLG4pe3RbZV09PT12b2lkIDA/dFtlXT1yOnRbZV09bihyLHRbZV0pfSwidXBkYXRlVmFsIiksdXBkYXRlQm91bmRzOm8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9dGhpcyxhPTA7ZnVuY3Rpb24gcyhsKXtyZXR1cm4gbyhmdW5jdGlvbihoKXthKys7bGV0IGY9aS5zZXF1ZW5jZUl0ZW1zLmxlbmd0aC1hKzE7aS51cGRhdGVWYWwoaCwic3RhcnR5IixlLWYqRGUuYm94TWFyZ2luLE1hdGgubWluKSxpLnVwZGF0ZVZhbChoLCJzdG9weSIsbitmKkRlLmJveE1hcmdpbixNYXRoLm1heCksaS51cGRhdGVWYWwobnQuZGF0YSwic3RhcnR4Iix0LWYqRGUuYm94TWFyZ2luLE1hdGgubWluKSxpLnVwZGF0ZVZhbChudC5kYXRhLCJzdG9weCIscitmKkRlLmJveE1hcmdpbixNYXRoLm1heCksbCE9PSJhY3RpdmF0aW9uIiYmKGkudXBkYXRlVmFsKGgsInN0YXJ0eCIsdC1mKkRlLmJveE1hcmdpbixNYXRoLm1pbiksaS51cGRhdGVWYWwoaCwic3RvcHgiLHIrZipEZS5ib3hNYXJnaW4sTWF0aC5tYXgpLGkudXBkYXRlVmFsKG50LmRhdGEsInN0YXJ0eSIsZS1mKkRlLmJveE1hcmdpbixNYXRoLm1pbiksaS51cGRhdGVWYWwobnQuZGF0YSwic3RvcHkiLG4rZipEZS5ib3hNYXJnaW4sTWF0aC5tYXgpKX0sInVwZGF0ZUl0ZW1Cb3VuZHMiKX1vKHMsInVwZGF0ZUZuIiksdGhpcy5zZXF1ZW5jZUl0ZW1zLmZvckVhY2gocygpKSx0aGlzLmFjdGl2YXRpb25zLmZvckVhY2gocygiYWN0aXZhdGlvbiIpKX0sInVwZGF0ZUJvdW5kcyIpLGluc2VydDpvKGZ1bmN0aW9uKHQsZSxyLG4pe2xldCBpPXFlLmdldE1pbih0LHIpLGE9cWUuZ2V0TWF4KHQscikscz1xZS5nZXRNaW4oZSxuKSxsPXFlLmdldE1heChlLG4pO3RoaXMudXBkYXRlVmFsKG50LmRhdGEsInN0YXJ0eCIsaSxNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwobnQuZGF0YSwic3RhcnR5IixzLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChudC5kYXRhLCJzdG9weCIsYSxNYXRoLm1heCksdGhpcy51cGRhdGVWYWwobnQuZGF0YSwic3RvcHkiLGwsTWF0aC5tYXgpLHRoaXMudXBkYXRlQm91bmRzKGkscyxhLGwpfSwiaW5zZXJ0IiksbmV3QWN0aXZhdGlvbjpvKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1yLmdldCh0LmZyb20pLGk9SUUodC5mcm9tKS5sZW5ndGh8fDAsYT1uLngrbi53aWR0aC8yKyhpLTEpKkRlLmFjdGl2YXRpb25XaWR0aC8yO3RoaXMuYWN0aXZhdGlvbnMucHVzaCh7c3RhcnR4OmEsc3RhcnR5OnRoaXMudmVydGljYWxQb3MrMixzdG9weDphK0RlLmFjdGl2YXRpb25XaWR0aCxzdG9weTp2b2lkIDAsYWN0b3I6dC5mcm9tLGFuY2hvcmVkOmZpLmFuY2hvckVsZW1lbnQoZSl9KX0sIm5ld0FjdGl2YXRpb24iKSxlbmRBY3RpdmF0aW9uOm8oZnVuY3Rpb24odCl7bGV0IGU9dGhpcy5hY3RpdmF0aW9ucy5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIHIuYWN0b3J9KS5sYXN0SW5kZXhPZih0LmZyb20pO3JldHVybiB0aGlzLmFjdGl2YXRpb25zLnNwbGljZShlLDEpWzBdfSwiZW5kQWN0aXZhdGlvbiIpLGNyZWF0ZUxvb3A6byhmdW5jdGlvbih0PXttZXNzYWdlOnZvaWQgMCx3cmFwOiExLHdpZHRoOnZvaWQgMH0sZSl7cmV0dXJue3N0YXJ0eDp2b2lkIDAsc3RhcnR5OnRoaXMudmVydGljYWxQb3Msc3RvcHg6dm9pZCAwLHN0b3B5OnZvaWQgMCx0aXRsZTp0Lm1lc3NhZ2Usd3JhcDp0LndyYXAsd2lkdGg6dC53aWR0aCxoZWlnaHQ6MCxmaWxsOmV9fSwiY3JlYXRlTG9vcCIpLG5ld0xvb3A6byhmdW5jdGlvbih0PXttZXNzYWdlOnZvaWQgMCx3cmFwOiExLHdpZHRoOnZvaWQgMH0sZSl7dGhpcy5zZXF1ZW5jZUl0ZW1zLnB1c2godGhpcy5jcmVhdGVMb29wKHQsZSkpfSwibmV3TG9vcCIpLGVuZExvb3A6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlcXVlbmNlSXRlbXMucG9wKCl9LCJlbmRMb29wIiksaXNMb29wT3ZlcmxhcDpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VxdWVuY2VJdGVtcy5sZW5ndGg/dGhpcy5zZXF1ZW5jZUl0ZW1zW3RoaXMuc2VxdWVuY2VJdGVtcy5sZW5ndGgtMV0ub3ZlcmxhcDohMX0sImlzTG9vcE92ZXJsYXAiKSxhZGRTZWN0aW9uVG9Mb29wOm8oZnVuY3Rpb24odCl7bGV0IGU9dGhpcy5zZXF1ZW5jZUl0ZW1zLnBvcCgpO2Uuc2VjdGlvbnM9ZS5zZWN0aW9uc3x8W10sZS5zZWN0aW9uVGl0bGVzPWUuc2VjdGlvblRpdGxlc3x8W10sZS5zZWN0aW9ucy5wdXNoKHt5Om50LmdldFZlcnRpY2FsUG9zKCksaGVpZ2h0OjB9KSxlLnNlY3Rpb25UaXRsZXMucHVzaCh0KSx0aGlzLnNlcXVlbmNlSXRlbXMucHVzaChlKX0sImFkZFNlY3Rpb25Ub0xvb3AiKSxzYXZlVmVydGljYWxQb3M6byhmdW5jdGlvbigpe3RoaXMuaXNMb29wT3ZlcmxhcCgpJiYodGhpcy5zYXZlZFZlcnRpY2FsUG9zPXRoaXMudmVydGljYWxQb3MpfSwic2F2ZVZlcnRpY2FsUG9zIikscmVzZXRWZXJ0aWNhbFBvczpvKGZ1bmN0aW9uKCl7dGhpcy5pc0xvb3BPdmVybGFwKCkmJih0aGlzLnZlcnRpY2FsUG9zPXRoaXMuc2F2ZWRWZXJ0aWNhbFBvcyl9LCJyZXNldFZlcnRpY2FsUG9zIiksYnVtcFZlcnRpY2FsUG9zOm8oZnVuY3Rpb24odCl7dGhpcy52ZXJ0aWNhbFBvcz10aGlzLnZlcnRpY2FsUG9zK3QsdGhpcy5kYXRhLnN0b3B5PXFlLmdldE1heCh0aGlzLmRhdGEuc3RvcHksdGhpcy52ZXJ0aWNhbFBvcyl9LCJidW1wVmVydGljYWxQb3MiKSxnZXRWZXJ0aWNhbFBvczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmVydGljYWxQb3N9LCJnZXRWZXJ0aWNhbFBvcyIpLGdldEJvdW5kczpvKGZ1bmN0aW9uKCl7cmV0dXJue2JvdW5kczp0aGlzLmRhdGEsbW9kZWxzOnRoaXMubW9kZWxzfX0sImdldEJvdW5kcyIpfSxoSGU9byhhc3luYyBmdW5jdGlvbih0LGUpe250LmJ1bXBWZXJ0aWNhbFBvcyhEZS5ib3hNYXJnaW4pLGUuaGVpZ2h0PURlLmJveE1hcmdpbixlLnN0YXJ0eT1udC5nZXRWZXJ0aWNhbFBvcygpO2xldCByPU5sKCk7ci54PWUuc3RhcnR4LHIueT1lLnN0YXJ0eSxyLndpZHRoPWUud2lkdGh8fERlLndpZHRoLHIuY2xhc3M9Im5vdGUiO2xldCBuPXQuYXBwZW5kKCJnIiksaT1maS5kcmF3UmVjdChuLHIpLGE9b3YoKTthLng9ZS5zdGFydHgsYS55PWUuc3RhcnR5LGEud2lkdGg9ci53aWR0aCxhLmR5PSIxZW0iLGEudGV4dD1lLm1lc3NhZ2UsYS5jbGFzcz0ibm90ZVRleHQiLGEuZm9udEZhbWlseT1EZS5ub3RlRm9udEZhbWlseSxhLmZvbnRTaXplPURlLm5vdGVGb250U2l6ZSxhLmZvbnRXZWlnaHQ9RGUubm90ZUZvbnRXZWlnaHQsYS5hbmNob3I9RGUubm90ZUFsaWduLGEudGV4dE1hcmdpbj1EZS5ub3RlTWFyZ2luLGEudmFsaWduPSJjZW50ZXIiO2xldCBzPXlpKGEudGV4dCk/YXdhaXQgUHgobixhKTpJMChuLGEpLGw9TWF0aC5yb3VuZChzLm1hcCh1PT4odS5fZ3JvdXBzfHx1KVswXVswXS5nZXRCQm94KCkuaGVpZ2h0KS5yZWR1Y2UoKHUsaCk9PnUraCkpO2kuYXR0cigiaGVpZ2h0IixsKzIqRGUubm90ZU1hcmdpbiksZS5oZWlnaHQrPWwrMipEZS5ub3RlTWFyZ2luLG50LmJ1bXBWZXJ0aWNhbFBvcyhsKzIqRGUubm90ZU1hcmdpbiksZS5zdG9weT1lLnN0YXJ0eStsKzIqRGUubm90ZU1hcmdpbixlLnN0b3B4PWUuc3RhcnR4K3Iud2lkdGgsbnQuaW5zZXJ0KGUuc3RhcnR4LGUuc3RhcnR5LGUuc3RvcHgsZS5zdG9weSksbnQubW9kZWxzLmFkZE5vdGUoZSl9LCJkcmF3Tm90ZSIpLE8wPW8odD0+KHtmb250RmFtaWx5OnQubWVzc2FnZUZvbnRGYW1pbHksZm9udFNpemU6dC5tZXNzYWdlRm9udFNpemUsZm9udFdlaWdodDp0Lm1lc3NhZ2VGb250V2VpZ2h0fSksIm1lc3NhZ2VGb250IiksUWc9byh0PT4oe2ZvbnRGYW1pbHk6dC5ub3RlRm9udEZhbWlseSxmb250U2l6ZTp0Lm5vdGVGb250U2l6ZSxmb250V2VpZ2h0OnQubm90ZUZvbnRXZWlnaHR9KSwibm90ZUZvbnQiKSxETz1vKHQ9Pih7Zm9udEZhbWlseTp0LmFjdG9yRm9udEZhbWlseSxmb250U2l6ZTp0LmFjdG9yRm9udFNpemUsZm9udFdlaWdodDp0LmFjdG9yRm9udFdlaWdodH0pLCJhY3RvckZvbnQiKTtvKGZIZSwiYm91bmRNZXNzYWdlIik7ZEhlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7bGV0e3N0YXJ0eDppLHN0b3B4OmEsc3RhcnR5OnMsbWVzc2FnZTpsLHR5cGU6dSxzZXF1ZW5jZUluZGV4Omgsc2VxdWVuY2VWaXNpYmxlOmZ9PWUsZD1VdC5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhsLE8wKERlKSkscD1vdigpO3AueD1pLHAueT1zKzEwLHAud2lkdGg9YS1pLHAuY2xhc3M9Im1lc3NhZ2VUZXh0IixwLmR5PSIxZW0iLHAudGV4dD1sLHAuZm9udEZhbWlseT1EZS5tZXNzYWdlRm9udEZhbWlseSxwLmZvbnRTaXplPURlLm1lc3NhZ2VGb250U2l6ZSxwLmZvbnRXZWlnaHQ9RGUubWVzc2FnZUZvbnRXZWlnaHQscC5hbmNob3I9RGUubWVzc2FnZUFsaWduLHAudmFsaWduPSJjZW50ZXIiLHAudGV4dE1hcmdpbj1EZS53cmFwUGFkZGluZyxwLnRzcGFuPSExLHlpKHAudGV4dCk/YXdhaXQgUHgodCxwLHtzdGFydHg6aSxzdG9weDphLHN0YXJ0eTpyfSk6STAodCxwKTtsZXQgbT1kLndpZHRoLGc7aT09PWE/RGUucmlnaHRBbmdsZXM/Zz10LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGBNICAke2l9LCR7cn0gSCAke2krcWUuZ2V0TWF4KERlLndpZHRoLzIsbS8yKX0gViAke3IrMjV9IEggJHtpfWApOmc9dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAiK2krIiwiK3IrIiBDICIrKGkrNjApKyIsIisoci0xMCkrIiAiKyhpKzYwKSsiLCIrKHIrMzApKyIgIitpKyIsIisocisyMCkpOihnPXQuYXBwZW5kKCJsaW5lIiksZy5hdHRyKCJ4MSIsaSksZy5hdHRyKCJ5MSIsciksZy5hdHRyKCJ4MiIsYSksZy5hdHRyKCJ5MiIscikpLHU9PT1uLmRiLkxJTkVUWVBFLkRPVFRFRHx8dT09PW4uZGIuTElORVRZUEUuRE9UVEVEX0NST1NTfHx1PT09bi5kYi5MSU5FVFlQRS5ET1RURURfUE9JTlR8fHU9PT1uLmRiLkxJTkVUWVBFLkRPVFRFRF9PUEVOfHx1PT09bi5kYi5MSU5FVFlQRS5CSURJUkVDVElPTkFMX0RPVFRFRD8oZy5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjMsIDMiKSxnLmF0dHIoImNsYXNzIiwibWVzc2FnZUxpbmUxIikpOmcuYXR0cigiY2xhc3MiLCJtZXNzYWdlTGluZTAiKTtsZXQgeT0iIjtEZS5hcnJvd01hcmtlckFic29sdXRlJiYoeT13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCx5PXkucmVwbGFjZSgvXCgvZywiXFwoIikseT15LnJlcGxhY2UoL1wpL2csIlxcKSIpKSxnLmF0dHIoInN0cm9rZS13aWR0aCIsMiksZy5hdHRyKCJzdHJva2UiLCJub25lIiksZy5zdHlsZSgiZmlsbCIsIm5vbmUiKSwodT09PW4uZGIuTElORVRZUEUuU09MSUR8fHU9PT1uLmRiLkxJTkVUWVBFLkRPVFRFRCkmJmcuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3krIiNhcnJvd2hlYWQpIiksKHU9PT1uLmRiLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfU09MSUR8fHU9PT1uLmRiLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfRE9UVEVEKSYmKGcuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIreSsiI2Fycm93aGVhZCkiKSxnLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIit5KyIjYXJyb3doZWFkKSIpKSwodT09PW4uZGIuTElORVRZUEUuU09MSURfUE9JTlR8fHU9PT1uLmRiLkxJTkVUWVBFLkRPVFRFRF9QT0lOVCkmJmcuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3krIiNmaWxsZWQtaGVhZCkiKSwodT09PW4uZGIuTElORVRZUEUuU09MSURfQ1JPU1N8fHU9PT1uLmRiLkxJTkVUWVBFLkRPVFRFRF9DUk9TUykmJmcuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3krIiNjcm9zc2hlYWQpIiksKGZ8fERlLnNob3dTZXF1ZW5jZU51bWJlcnMpJiYoZy5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIit5KyIjc2VxdWVuY2VudW1iZXIpIiksdC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixpKS5hdHRyKCJ5IixyKzQpLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoImZvbnQtc2l6ZSIsIjEycHgiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImNsYXNzIiwic2VxdWVuY2VOdW1iZXIiKS50ZXh0KGgpKX0sImRyYXdNZXNzYWdlIikscEhlPW8oZnVuY3Rpb24odCxlLHIsbixpLGEscyl7bGV0IGw9MCx1PTAsaCxmPTA7Zm9yKGxldCBkIG9mIG4pe2xldCBwPWUuZ2V0KGQpLG09cC5ib3g7aCYmaCE9bSYmKHN8fG50Lm1vZGVscy5hZGRCb3goaCksdSs9RGUuYm94TWFyZ2luK2gubWFyZ2luKSxtJiZtIT1oJiYoc3x8KG0ueD1sK3UsbS55PWkpLHUrPW0ubWFyZ2luKSxwLndpZHRoPXAud2lkdGh8fERlLndpZHRoLHAuaGVpZ2h0PXFlLmdldE1heChwLmhlaWdodHx8RGUuaGVpZ2h0LERlLmhlaWdodCkscC5tYXJnaW49cC5tYXJnaW58fERlLmFjdG9yTWFyZ2luLGY9cWUuZ2V0TWF4KGYscC5oZWlnaHQpLHIuZ2V0KHAubmFtZSkmJih1Kz1wLndpZHRoLzIpLHAueD1sK3UscC5zdGFydHk9bnQuZ2V0VmVydGljYWxQb3MoKSxudC5pbnNlcnQocC54LGkscC54K3Aud2lkdGgscC5oZWlnaHQpLGwrPXAud2lkdGgrdSxwLmJveCYmKHAuYm94LndpZHRoPWwrbS5tYXJnaW4tcC5ib3gueCksdT1wLm1hcmdpbixoPXAuYm94LG50Lm1vZGVscy5hZGRBY3RvcihwKX1oJiYhcyYmbnQubW9kZWxzLmFkZEJveChoKSxudC5idW1wVmVydGljYWxQb3MoZil9LCJhZGRBY3RvclJlbmRlcmluZ0RhdGEiKSxOTz1vKGFzeW5jIGZ1bmN0aW9uKHQsZSxyLG4pe2lmKG4pe2xldCBpPTA7bnQuYnVtcFZlcnRpY2FsUG9zKERlLmJveE1hcmdpbioyKTtmb3IobGV0IGEgb2Ygcil7bGV0IHM9ZS5nZXQoYSk7cy5zdG9weXx8KHMuc3RvcHk9bnQuZ2V0VmVydGljYWxQb3MoKSk7bGV0IGw9YXdhaXQgZmkuZHJhd0FjdG9yKHQscyxEZSwhMCk7aT1xZS5nZXRNYXgoaSxsKX1udC5idW1wVmVydGljYWxQb3MoaStEZS5ib3hNYXJnaW4pfWVsc2UgZm9yKGxldCBpIG9mIHIpe2xldCBhPWUuZ2V0KGkpO2F3YWl0IGZpLmRyYXdBY3Rvcih0LGEsRGUsITEpfX0sImRyYXdBY3RvcnMiKSxzZGU9byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT0wLGE9MDtmb3IobGV0IHMgb2Ygcil7bGV0IGw9ZS5nZXQocyksdT12SGUobCksaD1maS5kcmF3UG9wdXAodCxsLHUsRGUsRGUuZm9yY2VNZW51cyxuKTtoLmhlaWdodD5pJiYoaT1oLmhlaWdodCksaC53aWR0aCtsLng+YSYmKGE9aC53aWR0aCtsLngpfXJldHVybnttYXhIZWlnaHQ6aSxtYXhXaWR0aDphfX0sImRyYXdBY3RvcnNQb3B1cCIpLG9kZT1vKGZ1bmN0aW9uKHQpe1ZuKERlLHQpLHQuZm9udEZhbWlseSYmKERlLmFjdG9yRm9udEZhbWlseT1EZS5ub3RlRm9udEZhbWlseT1EZS5tZXNzYWdlRm9udEZhbWlseT10LmZvbnRGYW1pbHkpLHQuZm9udFNpemUmJihEZS5hY3RvckZvbnRTaXplPURlLm5vdGVGb250U2l6ZT1EZS5tZXNzYWdlRm9udFNpemU9dC5mb250U2l6ZSksdC5mb250V2VpZ2h0JiYoRGUuYWN0b3JGb250V2VpZ2h0PURlLm5vdGVGb250V2VpZ2h0PURlLm1lc3NhZ2VGb250V2VpZ2h0PXQuZm9udFdlaWdodCl9LCJzZXRDb25mIiksSUU9byhmdW5jdGlvbih0KXtyZXR1cm4gbnQuYWN0aXZhdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFjdG9yPT09dH0pfSwiYWN0b3JBY3RpdmF0aW9ucyIpLGFkZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9ZS5nZXQodCksbj1JRSh0KSxpPW4ucmVkdWNlKGZ1bmN0aW9uKHMsbCl7cmV0dXJuIHFlLmdldE1pbihzLGwuc3RhcnR4KX0sci54K3Iud2lkdGgvMi0xKSxhPW4ucmVkdWNlKGZ1bmN0aW9uKHMsbCl7cmV0dXJuIHFlLmdldE1heChzLGwuc3RvcHgpfSxyLngrci53aWR0aC8yKzEpO3JldHVybltpLGFdfSwiYWN0aXZhdGlvbkJvdW5kcyIpO28oamMsImFkanVzdExvb3BIZWlnaHRGb3JXcmFwIik7byhtSGUsImFkanVzdENyZWF0ZWREZXN0cm95ZWREYXRhIik7Z0hlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7bGV0e3NlY3VyaXR5TGV2ZWw6aSxzZXF1ZW5jZTphfT1wZSgpO0RlPWE7bGV0IHM7aT09PSJzYW5kYm94IiYmKHM9VmUoIiNpIitlKSk7bGV0IGw9aT09PSJzYW5kYm94Ij9WZShzLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOlZlKCJib2R5IiksdT1pPT09InNhbmRib3giP3Mubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQ7bnQuaW5pdCgpLFkuZGVidWcobi5kYik7bGV0IGg9aT09PSJzYW5kYm94Ij9sLnNlbGVjdChgW2lkPSIke2V9Il1gKTpWZShgW2lkPSIke2V9Il1gKSxmPW4uZGIuZ2V0QWN0b3JzKCksZD1uLmRiLmdldENyZWF0ZWRBY3RvcnMoKSxwPW4uZGIuZ2V0RGVzdHJveWVkQWN0b3JzKCksbT1uLmRiLmdldEJveGVzKCksZz1uLmRiLmdldEFjdG9yS2V5cygpLHk9bi5kYi5nZXRNZXNzYWdlcygpLHY9bi5kYi5nZXREaWFncmFtVGl0bGUoKSx4PW4uZGIuaGFzQXRMZWFzdE9uZUJveCgpLGI9bi5kYi5oYXNBdExlYXN0T25lQm94V2l0aFRpdGxlKCksdz1hd2FpdCB5SGUoZix5LG4pO2lmKERlLmhlaWdodD1hd2FpdCB4SGUoZix3LG0pLGZpLmluc2VydENvbXB1dGVySWNvbihoKSxmaS5pbnNlcnREYXRhYmFzZUljb24oaCksZmkuaW5zZXJ0Q2xvY2tJY29uKGgpLHgmJihudC5idW1wVmVydGljYWxQb3MoRGUuYm94TWFyZ2luKSxiJiZudC5idW1wVmVydGljYWxQb3MobVswXS50ZXh0TWF4SGVpZ2h0KSksRGUuaGlkZVVudXNlZFBhcnRpY2lwYW50cz09PSEwKXtsZXQgRj1uZXcgU2V0O3kuZm9yRWFjaChCPT57Ri5hZGQoQi5mcm9tKSxGLmFkZChCLnRvKX0pLGc9Zy5maWx0ZXIoQj0+Ri5oYXMoQikpfXBIZShoLGYsZCxnLDAseSwhMSk7bGV0IF89YXdhaXQgVEhlKHksZix3LG4pO2ZpLmluc2VydEFycm93SGVhZChoKSxmaS5pbnNlcnRBcnJvd0Nyb3NzSGVhZChoKSxmaS5pbnNlcnRBcnJvd0ZpbGxlZEhlYWQoaCksZmkuaW5zZXJ0U2VxdWVuY2VOdW1iZXIoaCk7ZnVuY3Rpb24gVChGLEIpe2xldCBHPW50LmVuZEFjdGl2YXRpb24oRik7Ry5zdGFydHkrMTg+QiYmKEcuc3RhcnR5PUItNixCKz0xMiksZmkuZHJhd0FjdGl2YXRpb24oaCxHLEIsRGUsSUUoRi5mcm9tKS5sZW5ndGgpLG50Lmluc2VydChHLnN0YXJ0eCxCLTEwLEcuc3RvcHgsQil9byhULCJhY3RpdmVFbmQiKTtsZXQgRT0xLEw9MSxTPVtdLEE9W10sST0wO2ZvcihsZXQgRiBvZiB5KXtsZXQgQixHLHo7c3dpdGNoKEYudHlwZSl7Y2FzZSBuLmRiLkxJTkVUWVBFLk5PVEU6bnQucmVzZXRWZXJ0aWNhbFBvcygpLEc9Ri5ub3RlTW9kZWwsYXdhaXQgaEhlKGgsRyk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkFDVElWRV9TVEFSVDpudC5uZXdBY3RpdmF0aW9uKEYsaCxmKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuQUNUSVZFX0VORDpUKEYsbnQuZ2V0VmVydGljYWxQb3MoKSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkxPT1BfU1RBUlQ6amMoXyxGLERlLmJveE1hcmdpbixEZS5ib3hNYXJnaW4rRGUuYm94VGV4dE1hcmdpbixXPT5udC5uZXdMb29wKFcpKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuTE9PUF9FTkQ6Qj1udC5lbmRMb29wKCksYXdhaXQgZmkuZHJhd0xvb3AoaCxCLCJsb29wIixEZSksbnQuYnVtcFZlcnRpY2FsUG9zKEIuc3RvcHktbnQuZ2V0VmVydGljYWxQb3MoKSksbnQubW9kZWxzLmFkZExvb3AoQik7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLlJFQ1RfU1RBUlQ6amMoXyxGLERlLmJveE1hcmdpbixEZS5ib3hNYXJnaW4sVz0+bnQubmV3TG9vcCh2b2lkIDAsVy5tZXNzYWdlKSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLlJFQ1RfRU5EOkI9bnQuZW5kTG9vcCgpLEEucHVzaChCKSxudC5tb2RlbHMuYWRkTG9vcChCKSxudC5idW1wVmVydGljYWxQb3MoQi5zdG9weS1udC5nZXRWZXJ0aWNhbFBvcygpKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuT1BUX1NUQVJUOmpjKF8sRixEZS5ib3hNYXJnaW4sRGUuYm94TWFyZ2luK0RlLmJveFRleHRNYXJnaW4sVz0+bnQubmV3TG9vcChXKSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLk9QVF9FTkQ6Qj1udC5lbmRMb29wKCksYXdhaXQgZmkuZHJhd0xvb3AoaCxCLCJvcHQiLERlKSxudC5idW1wVmVydGljYWxQb3MoQi5zdG9weS1udC5nZXRWZXJ0aWNhbFBvcygpKSxudC5tb2RlbHMuYWRkTG9vcChCKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuQUxUX1NUQVJUOmpjKF8sRixEZS5ib3hNYXJnaW4sRGUuYm94TWFyZ2luK0RlLmJveFRleHRNYXJnaW4sVz0+bnQubmV3TG9vcChXKSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkFMVF9FTFNFOmpjKF8sRixEZS5ib3hNYXJnaW4rRGUuYm94VGV4dE1hcmdpbixEZS5ib3hNYXJnaW4sVz0+bnQuYWRkU2VjdGlvblRvTG9vcChXKSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkFMVF9FTkQ6Qj1udC5lbmRMb29wKCksYXdhaXQgZmkuZHJhd0xvb3AoaCxCLCJhbHQiLERlKSxudC5idW1wVmVydGljYWxQb3MoQi5zdG9weS1udC5nZXRWZXJ0aWNhbFBvcygpKSxudC5tb2RlbHMuYWRkTG9vcChCKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuUEFSX1NUQVJUOmNhc2Ugbi5kYi5MSU5FVFlQRS5QQVJfT1ZFUl9TVEFSVDpqYyhfLEYsRGUuYm94TWFyZ2luLERlLmJveE1hcmdpbitEZS5ib3hUZXh0TWFyZ2luLFc9Pm50Lm5ld0xvb3AoVykpLG50LnNhdmVWZXJ0aWNhbFBvcygpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5QQVJfQU5EOmpjKF8sRixEZS5ib3hNYXJnaW4rRGUuYm94VGV4dE1hcmdpbixEZS5ib3hNYXJnaW4sVz0+bnQuYWRkU2VjdGlvblRvTG9vcChXKSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLlBBUl9FTkQ6Qj1udC5lbmRMb29wKCksYXdhaXQgZmkuZHJhd0xvb3AoaCxCLCJwYXIiLERlKSxudC5idW1wVmVydGljYWxQb3MoQi5zdG9weS1udC5nZXRWZXJ0aWNhbFBvcygpKSxudC5tb2RlbHMuYWRkTG9vcChCKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuQVVUT05VTUJFUjpFPUYubWVzc2FnZS5zdGFydHx8RSxMPUYubWVzc2FnZS5zdGVwfHxMLEYubWVzc2FnZS52aXNpYmxlP24uZGIuZW5hYmxlU2VxdWVuY2VOdW1iZXJzKCk6bi5kYi5kaXNhYmxlU2VxdWVuY2VOdW1iZXJzKCk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkNSSVRJQ0FMX1NUQVJUOmpjKF8sRixEZS5ib3hNYXJnaW4sRGUuYm94TWFyZ2luK0RlLmJveFRleHRNYXJnaW4sVz0+bnQubmV3TG9vcChXKSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkNSSVRJQ0FMX09QVElPTjpqYyhfLEYsRGUuYm94TWFyZ2luK0RlLmJveFRleHRNYXJnaW4sRGUuYm94TWFyZ2luLFc9Pm50LmFkZFNlY3Rpb25Ub0xvb3AoVykpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5DUklUSUNBTF9FTkQ6Qj1udC5lbmRMb29wKCksYXdhaXQgZmkuZHJhd0xvb3AoaCxCLCJjcml0aWNhbCIsRGUpLG50LmJ1bXBWZXJ0aWNhbFBvcyhCLnN0b3B5LW50LmdldFZlcnRpY2FsUG9zKCkpLG50Lm1vZGVscy5hZGRMb29wKEIpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5CUkVBS19TVEFSVDpqYyhfLEYsRGUuYm94TWFyZ2luLERlLmJveE1hcmdpbitEZS5ib3hUZXh0TWFyZ2luLFc9Pm50Lm5ld0xvb3AoVykpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5CUkVBS19FTkQ6Qj1udC5lbmRMb29wKCksYXdhaXQgZmkuZHJhd0xvb3AoaCxCLCJicmVhayIsRGUpLG50LmJ1bXBWZXJ0aWNhbFBvcyhCLnN0b3B5LW50LmdldFZlcnRpY2FsUG9zKCkpLG50Lm1vZGVscy5hZGRMb29wKEIpO2JyZWFrO2RlZmF1bHQ6dHJ5e3o9Ri5tc2dNb2RlbCx6LnN0YXJ0eT1udC5nZXRWZXJ0aWNhbFBvcygpLHouc2VxdWVuY2VJbmRleD1FLHouc2VxdWVuY2VWaXNpYmxlPW4uZGIuc2hvd1NlcXVlbmNlTnVtYmVycygpO2xldCBXPWF3YWl0IGZIZShoLHopO21IZShGLHosVyxJLGYsZCxwKSxTLnB1c2goe21lc3NhZ2VNb2RlbDp6LGxpbmVTdGFydFk6V30pLG50Lm1vZGVscy5hZGRNZXNzYWdlKHopfWNhdGNoKFcpe1kuZXJyb3IoImVycm9yIHdoaWxlIGRyYXdpbmcgbWVzc2FnZSIsVyl9fVtuLmRiLkxJTkVUWVBFLlNPTElEX09QRU4sbi5kYi5MSU5FVFlQRS5ET1RURURfT1BFTixuLmRiLkxJTkVUWVBFLlNPTElELG4uZGIuTElORVRZUEUuRE9UVEVELG4uZGIuTElORVRZUEUuU09MSURfQ1JPU1Msbi5kYi5MSU5FVFlQRS5ET1RURURfQ1JPU1Msbi5kYi5MSU5FVFlQRS5TT0xJRF9QT0lOVCxuLmRiLkxJTkVUWVBFLkRPVFRFRF9QT0lOVCxuLmRiLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfU09MSUQsbi5kYi5MSU5FVFlQRS5CSURJUkVDVElPTkFMX0RPVFRFRF0uaW5jbHVkZXMoRi50eXBlKSYmKEU9RStMKSxJKyt9WS5kZWJ1ZygiY3JlYXRlZEFjdG9ycyIsZCksWS5kZWJ1ZygiZGVzdHJveWVkQWN0b3JzIixwKSxhd2FpdCBOTyhoLGYsZywhMSk7Zm9yKGxldCBGIG9mIFMpYXdhaXQgZEhlKGgsRi5tZXNzYWdlTW9kZWwsRi5saW5lU3RhcnRZLG4pO0RlLm1pcnJvckFjdG9ycyYmYXdhaXQgTk8oaCxmLGcsITApLEEuZm9yRWFjaChGPT5maS5kcmF3QmFja2dyb3VuZFJlY3QoaCxGKSksX08oaCxmLGcsRGUpO2ZvcihsZXQgRiBvZiBudC5tb2RlbHMuYm94ZXMpRi5oZWlnaHQ9bnQuZ2V0VmVydGljYWxQb3MoKS1GLnksbnQuaW5zZXJ0KEYueCxGLnksRi54K0Yud2lkdGgsRi5oZWlnaHQpLEYuc3RhcnR4PUYueCxGLnN0YXJ0eT1GLnksRi5zdG9weD1GLnN0YXJ0eCtGLndpZHRoLEYuc3RvcHk9Ri5zdGFydHkrRi5oZWlnaHQsRi5zdHJva2U9InJnYigwLDAsMCwgMC41KSIsZmkuZHJhd0JveChoLEYsRGUpO3gmJm50LmJ1bXBWZXJ0aWNhbFBvcyhEZS5ib3hNYXJnaW4pO2xldCBEPXNkZShoLGYsZyx1KSx7Ym91bmRzOmt9PW50LmdldEJvdW5kcygpO2suc3RhcnR4PT09dm9pZCAwJiYoay5zdGFydHg9MCksay5zdGFydHk9PT12b2lkIDAmJihrLnN0YXJ0eT0wKSxrLnN0b3B4PT09dm9pZCAwJiYoay5zdG9weD0wKSxrLnN0b3B5PT09dm9pZCAwJiYoay5zdG9weT0wKTtsZXQgUj1rLnN0b3B5LWsuc3RhcnR5O1I8RC5tYXhIZWlnaHQmJihSPUQubWF4SGVpZ2h0KTtsZXQgQz1SKzIqRGUuZGlhZ3JhbU1hcmdpblk7RGUubWlycm9yQWN0b3JzJiYoQz1DLURlLmJveE1hcmdpbitEZS5ib3R0b21NYXJnaW5BZGopO2xldCBPPWsuc3RvcHgtay5zdGFydHg7TzxELm1heFdpZHRoJiYoTz1ELm1heFdpZHRoKTtsZXQgTj1PKzIqRGUuZGlhZ3JhbU1hcmdpblg7diYmaC5hcHBlbmQoInRleHQiKS50ZXh0KHYpLmF0dHIoIngiLChrLnN0b3B4LWsuc3RhcnR4KS8yLTIqRGUuZGlhZ3JhbU1hcmdpblgpLmF0dHIoInkiLC0yNSksWnIoaCxDLE4sRGUudXNlTWF4V2lkdGgpO2xldCBQPXY/NDA6MDtoLmF0dHIoInZpZXdCb3giLGsuc3RhcnR4LURlLmRpYWdyYW1NYXJnaW5YKyIgLSIrKERlLmRpYWdyYW1NYXJnaW5ZK1ApKyIgIitOKyIgIisoQytQKSksWS5kZWJ1ZygibW9kZWxzOiIsbnQubW9kZWxzKX0sImRyYXciKTtvKHlIZSwiZ2V0TWF4TWVzc2FnZVdpZHRoUGVyQWN0b3IiKTt2SGU9byhmdW5jdGlvbih0KXtsZXQgZT0wLHI9RE8oRGUpO2ZvcihsZXQgbiBpbiB0LmxpbmtzKXtsZXQgYT1VdC5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhuLHIpLndpZHRoKzIqRGUud3JhcFBhZGRpbmcrMipEZS5ib3hNYXJnaW47ZTxhJiYoZT1hKX1yZXR1cm4gZX0sImdldFJlcXVpcmVkUG9wdXBXaWR0aCIpO28oeEhlLCJjYWxjdWxhdGVBY3Rvck1hcmdpbnMiKTtiSGU9byhhc3luYyBmdW5jdGlvbih0LGUscil7bGV0IG49ZS5nZXQodC5mcm9tKSxpPWUuZ2V0KHQudG8pLGE9bi54LHM9aS54LGw9dC53cmFwJiZ0Lm1lc3NhZ2UsdT15aSh0Lm1lc3NhZ2UpP2F3YWl0IHNkKHQubWVzc2FnZSxwZSgpKTpVdC5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhsP1V0LndyYXBMYWJlbCh0Lm1lc3NhZ2UsRGUud2lkdGgsUWcoRGUpKTp0Lm1lc3NhZ2UsUWcoRGUpKSxoPXt3aWR0aDpsP0RlLndpZHRoOnFlLmdldE1heChEZS53aWR0aCx1LndpZHRoKzIqRGUubm90ZU1hcmdpbiksaGVpZ2h0OjAsc3RhcnR4Om4ueCxzdG9weDowLHN0YXJ0eTowLHN0b3B5OjAsbWVzc2FnZTp0Lm1lc3NhZ2V9O3JldHVybiB0LnBsYWNlbWVudD09PXIuZGIuUExBQ0VNRU5ULlJJR0hUT0Y/KGgud2lkdGg9bD9xZS5nZXRNYXgoRGUud2lkdGgsdS53aWR0aCk6cWUuZ2V0TWF4KG4ud2lkdGgvMitpLndpZHRoLzIsdS53aWR0aCsyKkRlLm5vdGVNYXJnaW4pLGguc3RhcnR4PWErKG4ud2lkdGgrRGUuYWN0b3JNYXJnaW4pLzIpOnQucGxhY2VtZW50PT09ci5kYi5QTEFDRU1FTlQuTEVGVE9GPyhoLndpZHRoPWw/cWUuZ2V0TWF4KERlLndpZHRoLHUud2lkdGgrMipEZS5ub3RlTWFyZ2luKTpxZS5nZXRNYXgobi53aWR0aC8yK2kud2lkdGgvMix1LndpZHRoKzIqRGUubm90ZU1hcmdpbiksaC5zdGFydHg9YS1oLndpZHRoKyhuLndpZHRoLURlLmFjdG9yTWFyZ2luKS8yKTp0LnRvPT09dC5mcm9tPyh1PVV0LmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGw/VXQud3JhcExhYmVsKHQubWVzc2FnZSxxZS5nZXRNYXgoRGUud2lkdGgsbi53aWR0aCksUWcoRGUpKTp0Lm1lc3NhZ2UsUWcoRGUpKSxoLndpZHRoPWw/cWUuZ2V0TWF4KERlLndpZHRoLG4ud2lkdGgpOnFlLmdldE1heChuLndpZHRoLERlLndpZHRoLHUud2lkdGgrMipEZS5ub3RlTWFyZ2luKSxoLnN0YXJ0eD1hKyhuLndpZHRoLWgud2lkdGgpLzIpOihoLndpZHRoPU1hdGguYWJzKGErbi53aWR0aC8yLShzK2kud2lkdGgvMikpK0RlLmFjdG9yTWFyZ2luLGguc3RhcnR4PWE8cz9hK24ud2lkdGgvMi1EZS5hY3Rvck1hcmdpbi8yOnMraS53aWR0aC8yLURlLmFjdG9yTWFyZ2luLzIpLGwmJihoLm1lc3NhZ2U9VXQud3JhcExhYmVsKHQubWVzc2FnZSxoLndpZHRoLTIqRGUud3JhcFBhZGRpbmcsUWcoRGUpKSksWS5kZWJ1ZyhgTk06WyR7aC5zdGFydHh9LCR7aC5zdG9weH0sJHtoLnN0YXJ0eX0sJHtoLnN0b3B5fToke2gud2lkdGh9LCR7aC5oZWlnaHR9PSR7dC5tZXNzYWdlfV1gKSxofSwiYnVpbGROb3RlTW9kZWwiKSx3SGU9byhmdW5jdGlvbih0LGUscil7aWYoIVtyLmRiLkxJTkVUWVBFLlNPTElEX09QRU4sci5kYi5MSU5FVFlQRS5ET1RURURfT1BFTixyLmRiLkxJTkVUWVBFLlNPTElELHIuZGIuTElORVRZUEUuRE9UVEVELHIuZGIuTElORVRZUEUuU09MSURfQ1JPU1Msci5kYi5MSU5FVFlQRS5ET1RURURfQ1JPU1Msci5kYi5MSU5FVFlQRS5TT0xJRF9QT0lOVCxyLmRiLkxJTkVUWVBFLkRPVFRFRF9QT0lOVCxyLmRiLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfU09MSUQsci5kYi5MSU5FVFlQRS5CSURJUkVDVElPTkFMX0RPVFRFRF0uaW5jbHVkZXModC50eXBlKSlyZXR1cm57fTtsZXRbbixpXT1hZGUodC5mcm9tLGUpLFthLHNdPWFkZSh0LnRvLGUpLGw9bjw9YSx1PWw/aTpuLGg9bD9hOnMsZj1NYXRoLmFicyhhLXMpPjIsZD1vKHk9Pmw/LXk6eSwiYWRqdXN0VmFsdWUiKTt0LmZyb209PT10LnRvP2g9dToodC5hY3RpdmF0ZSYmIWYmJihoKz1kKERlLmFjdGl2YXRpb25XaWR0aC8yLTEpKSxbci5kYi5MSU5FVFlQRS5TT0xJRF9PUEVOLHIuZGIuTElORVRZUEUuRE9UVEVEX09QRU5dLmluY2x1ZGVzKHQudHlwZSl8fChoKz1kKDMpKSxbci5kYi5MSU5FVFlQRS5CSURJUkVDVElPTkFMX1NPTElELHIuZGIuTElORVRZUEUuQklESVJFQ1RJT05BTF9ET1RURURdLmluY2x1ZGVzKHQudHlwZSkmJih1LT1kKDMpKSk7bGV0IHA9W24saSxhLHNdLG09TWF0aC5hYnModS1oKTt0LndyYXAmJnQubWVzc2FnZSYmKHQubWVzc2FnZT1VdC53cmFwTGFiZWwodC5tZXNzYWdlLHFlLmdldE1heChtKzIqRGUud3JhcFBhZGRpbmcsRGUud2lkdGgpLE8wKERlKSkpO2xldCBnPVV0LmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKHQubWVzc2FnZSxPMChEZSkpO3JldHVybnt3aWR0aDpxZS5nZXRNYXgodC53cmFwPzA6Zy53aWR0aCsyKkRlLndyYXBQYWRkaW5nLG0rMipEZS53cmFwUGFkZGluZyxEZS53aWR0aCksaGVpZ2h0OjAsc3RhcnR4OnUsc3RvcHg6aCxzdGFydHk6MCxzdG9weTowLG1lc3NhZ2U6dC5tZXNzYWdlLHR5cGU6dC50eXBlLHdyYXA6dC53cmFwLGZyb21Cb3VuZHM6TWF0aC5taW4uYXBwbHkobnVsbCxwKSx0b0JvdW5kczpNYXRoLm1heC5hcHBseShudWxsLHApfX0sImJ1aWxkTWVzc2FnZU1vZGVsIiksVEhlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9e30sYT1bXSxzLGwsdTtmb3IobGV0IGggb2YgdCl7c3dpdGNoKGguaWQ9VXQucmFuZG9tKHtsZW5ndGg6MTB9KSxoLnR5cGUpe2Nhc2Ugbi5kYi5MSU5FVFlQRS5MT09QX1NUQVJUOmNhc2Ugbi5kYi5MSU5FVFlQRS5BTFRfU1RBUlQ6Y2FzZSBuLmRiLkxJTkVUWVBFLk9QVF9TVEFSVDpjYXNlIG4uZGIuTElORVRZUEUuUEFSX1NUQVJUOmNhc2Ugbi5kYi5MSU5FVFlQRS5QQVJfT1ZFUl9TVEFSVDpjYXNlIG4uZGIuTElORVRZUEUuQ1JJVElDQUxfU1RBUlQ6Y2FzZSBuLmRiLkxJTkVUWVBFLkJSRUFLX1NUQVJUOmEucHVzaCh7aWQ6aC5pZCxtc2c6aC5tZXNzYWdlLGZyb206TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsdG86TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsd2lkdGg6MH0pO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5BTFRfRUxTRTpjYXNlIG4uZGIuTElORVRZUEUuUEFSX0FORDpjYXNlIG4uZGIuTElORVRZUEUuQ1JJVElDQUxfT1BUSU9OOmgubWVzc2FnZSYmKHM9YS5wb3AoKSxpW3MuaWRdPXMsaVtoLmlkXT1zLGEucHVzaChzKSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkxPT1BfRU5EOmNhc2Ugbi5kYi5MSU5FVFlQRS5BTFRfRU5EOmNhc2Ugbi5kYi5MSU5FVFlQRS5PUFRfRU5EOmNhc2Ugbi5kYi5MSU5FVFlQRS5QQVJfRU5EOmNhc2Ugbi5kYi5MSU5FVFlQRS5DUklUSUNBTF9FTkQ6Y2FzZSBuLmRiLkxJTkVUWVBFLkJSRUFLX0VORDpzPWEucG9wKCksaVtzLmlkXT1zO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQ6e2xldCBkPWUuZ2V0KGguZnJvbT9oLmZyb206aC50by5hY3RvcikscD1JRShoLmZyb20/aC5mcm9tOmgudG8uYWN0b3IpLmxlbmd0aCxtPWQueCtkLndpZHRoLzIrKHAtMSkqRGUuYWN0aXZhdGlvbldpZHRoLzIsZz17c3RhcnR4Om0sc3RvcHg6bStEZS5hY3RpdmF0aW9uV2lkdGgsYWN0b3I6aC5mcm9tLGVuYWJsZWQ6ITB9O250LmFjdGl2YXRpb25zLnB1c2goZyl9YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkFDVElWRV9FTkQ6e2xldCBkPW50LmFjdGl2YXRpb25zLm1hcChwPT5wLmFjdG9yKS5sYXN0SW5kZXhPZihoLmZyb20pO250LmFjdGl2YXRpb25zLnNwbGljZShkLDEpLnNwbGljZSgwLDEpfWJyZWFrfWgucGxhY2VtZW50IT09dm9pZCAwPyhsPWF3YWl0IGJIZShoLGUsbiksaC5ub3RlTW9kZWw9bCxhLmZvckVhY2goZD0+e3M9ZCxzLmZyb209cWUuZ2V0TWluKHMuZnJvbSxsLnN0YXJ0eCkscy50bz1xZS5nZXRNYXgocy50byxsLnN0YXJ0eCtsLndpZHRoKSxzLndpZHRoPXFlLmdldE1heChzLndpZHRoLE1hdGguYWJzKHMuZnJvbS1zLnRvKSktRGUubGFiZWxCb3hXaWR0aH0pKToodT13SGUoaCxlLG4pLGgubXNnTW9kZWw9dSx1LnN0YXJ0eCYmdS5zdG9weCYmYS5sZW5ndGg+MCYmYS5mb3JFYWNoKGQ9PntpZihzPWQsdS5zdGFydHg9PT11LnN0b3B4KXtsZXQgcD1lLmdldChoLmZyb20pLG09ZS5nZXQoaC50byk7cy5mcm9tPXFlLmdldE1pbihwLngtdS53aWR0aC8yLHAueC1wLndpZHRoLzIscy5mcm9tKSxzLnRvPXFlLmdldE1heChtLngrdS53aWR0aC8yLG0ueCtwLndpZHRoLzIscy50bykscy53aWR0aD1xZS5nZXRNYXgocy53aWR0aCxNYXRoLmFicyhzLnRvLXMuZnJvbSkpLURlLmxhYmVsQm94V2lkdGh9ZWxzZSBzLmZyb209cWUuZ2V0TWluKHUuc3RhcnR4LHMuZnJvbSkscy50bz1xZS5nZXRNYXgodS5zdG9weCxzLnRvKSxzLndpZHRoPXFlLmdldE1heChzLndpZHRoLHUud2lkdGgpLURlLmxhYmVsQm94V2lkdGh9KSl9cmV0dXJuIG50LmFjdGl2YXRpb25zPVtdLFkuZGVidWcoIkxvb3AgdHlwZSB3aWR0aHM6IixpKSxpfSwiY2FsY3VsYXRlTG9vcEJvdW5kcyIpLGxkZT17Ym91bmRzOm50LGRyYXdBY3RvcnM6Tk8sZHJhd0FjdG9yc1BvcHVwOnNkZSxzZXRDb25mOm9kZSxkcmF3OmdIZX19KTt2YXIgdWRlPXt9O3ZyKHVkZSx7ZGlhZ3JhbTooKT0+a0hlfSk7dmFyIGtIZSxoZGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjskZmUoKTtqZmUoKTtRZmUoKTtjZGUoKTtrSGU9e3BhcnNlcjpHZmUsZGI6U08scmVuZGVyZXI6bGRlLHN0eWxlczpLZmUsaW5pdDpvKCh7d3JhcDp0fSk9PntTTy5zZXRXcmFwKHQpfSwiaW5pdCIpfX0pO3ZhciBSTyxPRSxNTz1NKCgpPT57InVzZSBzdHJpY3QiO1JPPWZ1bmN0aW9uKCl7dmFyIHQ9byhmdW5jdGlvbihYLGZlLGhlLGdlKXtmb3IoaGU9aGV8fHt9LGdlPVgubGVuZ3RoO2dlLS07aGVbWFtnZV1dPWZlKTtyZXR1cm4gaGV9LCJvIiksZT1bMSwxOF0scj1bMSwxOV0sbj1bMSwyMF0saT1bMSw0MV0sYT1bMSw0Ml0scz1bMSwyNl0sbD1bMSwyNF0sdT1bMSwyNV0saD1bMSwzMl0sZj1bMSwzM10sZD1bMSwzNF0scD1bMSw0NV0sbT1bMSwzNV0sZz1bMSwzNl0seT1bMSwzN10sdj1bMSwzOF0seD1bMSwyN10sYj1bMSwyOF0sdz1bMSwyOV0sXz1bMSwzMF0sVD1bMSwzMV0sRT1bMSw0NF0sTD1bMSw0Nl0sUz1bMSw0M10sQT1bMSw0N10sST1bMSw5XSxEPVsxLDgsOV0saz1bMSw1OF0sUj1bMSw1OV0sQz1bMSw2MF0sTz1bMSw2MV0sTj1bMSw2Ml0sUD1bMSw2M10sRj1bMSw2NF0sQj1bMSw4LDksNDFdLEc9WzEsNzZdLHo9WzEsOCw5LDEyLDEzLDIyLDM5LDQxLDQ0LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDc3LDc5XSxXPVsxLDgsOSwxMiwxMywxNywyMCwyMiwzOSw0MSw0NCw0OCw1OCw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Nyw3OSw4NCw5OSwxMDEsMTAyXSxaPVsxMyw1OCw4NCw5OSwxMDEsMTAyXSxqPVsxMyw1OCw3MSw3Miw4NCw5OSwxMDEsMTAyXSxvZT1bMTMsNTgsNjYsNjcsNjgsNjksNzAsODQsOTksMTAxLDEwMl0sSz1bMSw5OF0sZWU9WzEsMTE1XSxKPVsxLDEwN10sSD1bMSwxMTNdLHE9WzEsMTA4XSxRPVsxLDEwOV0sYWU9WzEsMTEwXSx1ZT1bMSwxMTFdLGNlPVsxLDExMl0sdGU9WzEsMTE0XSxOZT1bMjIsNTgsNTksODAsODQsODUsODYsODcsODgsODldLHNlPVsxLDgsOSwzOSw0MSw0NF0sa2U9WzEsOCw5LDIyXSxSZT1bMSwxNDNdLENlPVsxLDgsOSw1OV0sUGU9WzEsOCw5LDIyLDU4LDU5LDgwLDg0LDg1LDg2LDg3LDg4LDg5XSxJZT17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxtZXJtYWlkRG9jOjQsc3RhdGVtZW50czo1LGdyYXBoQ29uZmlnOjYsQ0xBU1NfRElBR1JBTTo3LE5FV0xJTkU6OCxFT0Y6OSxzdGF0ZW1lbnQ6MTAsY2xhc3NMYWJlbDoxMSxTUVM6MTIsU1RSOjEzLFNRRToxNCxuYW1lc3BhY2VOYW1lOjE1LGFscGhhTnVtVG9rZW46MTYsRE9UOjE3LGNsYXNzTmFtZToxOCxjbGFzc0xpdGVyYWxOYW1lOjE5LEdFTkVSSUNUWVBFOjIwLHJlbGF0aW9uU3RhdGVtZW50OjIxLExBQkVMOjIyLG5hbWVzcGFjZVN0YXRlbWVudDoyMyxjbGFzc1N0YXRlbWVudDoyNCxtZW1iZXJTdGF0ZW1lbnQ6MjUsYW5ub3RhdGlvblN0YXRlbWVudDoyNixjbGlja1N0YXRlbWVudDoyNyxzdHlsZVN0YXRlbWVudDoyOCxjc3NDbGFzc1N0YXRlbWVudDoyOSxub3RlU3RhdGVtZW50OjMwLGNsYXNzRGVmU3RhdGVtZW50OjMxLGRpcmVjdGlvbjozMixhY2NfdGl0bGU6MzMsYWNjX3RpdGxlX3ZhbHVlOjM0LGFjY19kZXNjcjozNSxhY2NfZGVzY3JfdmFsdWU6MzYsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZTozNyxuYW1lc3BhY2VJZGVudGlmaWVyOjM4LFNUUlVDVF9TVEFSVDozOSxjbGFzc1N0YXRlbWVudHM6NDAsU1RSVUNUX1NUT1A6NDEsTkFNRVNQQUNFOjQyLGNsYXNzSWRlbnRpZmllcjo0MyxTVFlMRV9TRVBBUkFUT1I6NDQsbWVtYmVyczo0NSxDTEFTUzo0NixBTk5PVEFUSU9OX1NUQVJUOjQ3LEFOTk9UQVRJT05fRU5EOjQ4LE1FTUJFUjo0OSxTRVBBUkFUT1I6NTAscmVsYXRpb246NTEsTk9URV9GT1I6NTIsbm90ZVRleHQ6NTMsTk9URTo1NCxDTEFTU0RFRjo1NSxjbGFzc0xpc3Q6NTYsc3R5bGVzT3B0OjU3LEFMUEhBOjU4LENPTU1BOjU5LGRpcmVjdGlvbl90Yjo2MCxkaXJlY3Rpb25fYnQ6NjEsZGlyZWN0aW9uX3JsOjYyLGRpcmVjdGlvbl9scjo2MyxyZWxhdGlvblR5cGU6NjQsbGluZVR5cGU6NjUsQUdHUkVHQVRJT046NjYsRVhURU5TSU9OOjY3LENPTVBPU0lUSU9OOjY4LERFUEVOREVOQ1k6NjksTE9MTElQT1A6NzAsTElORTo3MSxET1RURURfTElORTo3MixDQUxMQkFDSzo3MyxMSU5LOjc0LExJTktfVEFSR0VUOjc1LENMSUNLOjc2LENBTExCQUNLX05BTUU6NzcsQ0FMTEJBQ0tfQVJHUzo3OCxIUkVGOjc5LFNUWUxFOjgwLENTU0NMQVNTOjgxLHN0eWxlOjgyLHN0eWxlQ29tcG9uZW50OjgzLE5VTTo4NCxDT0xPTjo4NSxVTklUOjg2LFNQQUNFOjg3LEJSS1Q6ODgsUENUOjg5LGNvbW1lbnRUb2tlbjo5MCx0ZXh0VG9rZW46OTEsZ3JhcGhDb2RlVG9rZW5zOjkyLHRleHROb1RhZ3NUb2tlbjo5MyxUQUdTVEFSVDo5NCxUQUdFTkQ6OTUsIj09Ijo5NiwiLS0iOjk3LERFRkFVTFQ6OTgsTUlOVVM6OTksa2V5d29yZHM6MTAwLFVOSUNPREVfVEVYVDoxMDEsQlFVT1RFX1NUUjoxMDIsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDc6IkNMQVNTX0RJQUdSQU0iLDg6Ik5FV0xJTkUiLDk6IkVPRiIsMTI6IlNRUyIsMTM6IlNUUiIsMTQ6IlNRRSIsMTc6IkRPVCIsMjA6IkdFTkVSSUNUWVBFIiwyMjoiTEFCRUwiLDMzOiJhY2NfdGl0bGUiLDM0OiJhY2NfdGl0bGVfdmFsdWUiLDM1OiJhY2NfZGVzY3IiLDM2OiJhY2NfZGVzY3JfdmFsdWUiLDM3OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwzOToiU1RSVUNUX1NUQVJUIiw0MToiU1RSVUNUX1NUT1AiLDQyOiJOQU1FU1BBQ0UiLDQ0OiJTVFlMRV9TRVBBUkFUT1IiLDQ2OiJDTEFTUyIsNDc6IkFOTk9UQVRJT05fU1RBUlQiLDQ4OiJBTk5PVEFUSU9OX0VORCIsNDk6Ik1FTUJFUiIsNTA6IlNFUEFSQVRPUiIsNTI6Ik5PVEVfRk9SIiw1NDoiTk9URSIsNTU6IkNMQVNTREVGIiw1ODoiQUxQSEEiLDU5OiJDT01NQSIsNjA6ImRpcmVjdGlvbl90YiIsNjE6ImRpcmVjdGlvbl9idCIsNjI6ImRpcmVjdGlvbl9ybCIsNjM6ImRpcmVjdGlvbl9sciIsNjY6IkFHR1JFR0FUSU9OIiw2NzoiRVhURU5TSU9OIiw2ODoiQ09NUE9TSVRJT04iLDY5OiJERVBFTkRFTkNZIiw3MDoiTE9MTElQT1AiLDcxOiJMSU5FIiw3MjoiRE9UVEVEX0xJTkUiLDczOiJDQUxMQkFDSyIsNzQ6IkxJTksiLDc1OiJMSU5LX1RBUkdFVCIsNzY6IkNMSUNLIiw3NzoiQ0FMTEJBQ0tfTkFNRSIsNzg6IkNBTExCQUNLX0FSR1MiLDc5OiJIUkVGIiw4MDoiU1RZTEUiLDgxOiJDU1NDTEFTUyIsODQ6Ik5VTSIsODU6IkNPTE9OIiw4NjoiVU5JVCIsODc6IlNQQUNFIiw4ODoiQlJLVCIsODk6IlBDVCIsOTI6ImdyYXBoQ29kZVRva2VucyIsOTQ6IlRBR1NUQVJUIiw5NToiVEFHRU5EIiw5NjoiPT0iLDk3OiItLSIsOTg6IkRFRkFVTFQiLDk5OiJNSU5VUyIsMTAwOiJrZXl3b3JkcyIsMTAxOiJVTklDT0RFX1RFWFQiLDEwMjoiQlFVT1RFX1NUUiJ9LHByb2R1Y3Rpb25zXzpbMCxbMywxXSxbMywxXSxbNCwxXSxbNiw0XSxbNSwxXSxbNSwyXSxbNSwzXSxbMTEsM10sWzE1LDFdLFsxNSwzXSxbMTUsMl0sWzE4LDFdLFsxOCwzXSxbMTgsMV0sWzE4LDJdLFsxOCwyXSxbMTgsMl0sWzEwLDFdLFsxMCwyXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDJdLFsxMCwyXSxbMTAsMV0sWzIzLDRdLFsyMyw1XSxbMzgsMl0sWzQwLDFdLFs0MCwyXSxbNDAsM10sWzI0LDFdLFsyNCwzXSxbMjQsNF0sWzI0LDZdLFs0MywyXSxbNDMsM10sWzI2LDRdLFs0NSwxXSxbNDUsMl0sWzI1LDFdLFsyNSwyXSxbMjUsMV0sWzI1LDFdLFsyMSwzXSxbMjEsNF0sWzIxLDRdLFsyMSw1XSxbMzAsM10sWzMwLDJdLFszMSwzXSxbNTYsMV0sWzU2LDNdLFszMiwxXSxbMzIsMV0sWzMyLDFdLFszMiwxXSxbNTEsM10sWzUxLDJdLFs1MSwyXSxbNTEsMV0sWzY0LDFdLFs2NCwxXSxbNjQsMV0sWzY0LDFdLFs2NCwxXSxbNjUsMV0sWzY1LDFdLFsyNywzXSxbMjcsNF0sWzI3LDNdLFsyNyw0XSxbMjcsNF0sWzI3LDVdLFsyNywzXSxbMjcsNF0sWzI3LDRdLFsyNyw1XSxbMjcsNF0sWzI3LDVdLFsyNyw1XSxbMjcsNl0sWzI4LDNdLFsyOSwzXSxbNTcsMV0sWzU3LDNdLFs4MiwxXSxbODIsMl0sWzgzLDFdLFs4MywxXSxbODMsMV0sWzgzLDFdLFs4MywxXSxbODMsMV0sWzgzLDFdLFs4MywxXSxbODMsMV0sWzkwLDFdLFs5MCwxXSxbOTEsMV0sWzkxLDFdLFs5MSwxXSxbOTEsMV0sWzkxLDFdLFs5MSwxXSxbOTEsMV0sWzkzLDFdLFs5MywxXSxbOTMsMV0sWzkzLDFdLFsxNiwxXSxbMTYsMV0sWzE2LDFdLFsxNiwxXSxbMTksMV0sWzUzLDFdXSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oZmUsaGUsZ2UsbmUsdmUsVSxUZSl7dmFyIGllPVUubGVuZ3RoLTE7c3dpdGNoKHZlKXtjYXNlIDg6dGhpcy4kPVVbaWUtMV07YnJlYWs7Y2FzZSA5OmNhc2UgMTI6Y2FzZSAxNDp0aGlzLiQ9VVtpZV07YnJlYWs7Y2FzZSAxMDpjYXNlIDEzOnRoaXMuJD1VW2llLTJdKyIuIitVW2llXTticmVhaztjYXNlIDExOmNhc2UgMTU6dGhpcy4kPVVbaWUtMV0rVVtpZV07YnJlYWs7Y2FzZSAxNjpjYXNlIDE3OnRoaXMuJD1VW2llLTFdKyJ+IitVW2llXSsifiI7YnJlYWs7Y2FzZSAxODpuZS5hZGRSZWxhdGlvbihVW2llXSk7YnJlYWs7Y2FzZSAxOTpVW2llLTFdLnRpdGxlPW5lLmNsZWFudXBMYWJlbChVW2llXSksbmUuYWRkUmVsYXRpb24oVVtpZS0xXSk7YnJlYWs7Y2FzZSAzMDp0aGlzLiQ9VVtpZV0udHJpbSgpLG5lLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAzMTpjYXNlIDMyOnRoaXMuJD1VW2llXS50cmltKCksbmUuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDMzOm5lLmFkZENsYXNzZXNUb05hbWVzcGFjZShVW2llLTNdLFVbaWUtMV0pO2JyZWFrO2Nhc2UgMzQ6bmUuYWRkQ2xhc3Nlc1RvTmFtZXNwYWNlKFVbaWUtNF0sVVtpZS0xXSk7YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9VVtpZV0sbmUuYWRkTmFtZXNwYWNlKFVbaWVdKTticmVhaztjYXNlIDM2OnRoaXMuJD1bVVtpZV1dO2JyZWFrO2Nhc2UgMzc6dGhpcy4kPVtVW2llLTFdXTticmVhaztjYXNlIDM4OlVbaWVdLnVuc2hpZnQoVVtpZS0yXSksdGhpcy4kPVVbaWVdO2JyZWFrO2Nhc2UgNDA6bmUuc2V0Q3NzQ2xhc3MoVVtpZS0yXSxVW2llXSk7YnJlYWs7Y2FzZSA0MTpuZS5hZGRNZW1iZXJzKFVbaWUtM10sVVtpZS0xXSk7YnJlYWs7Y2FzZSA0MjpuZS5zZXRDc3NDbGFzcyhVW2llLTVdLFVbaWUtM10pLG5lLmFkZE1lbWJlcnMoVVtpZS01XSxVW2llLTFdKTticmVhaztjYXNlIDQzOnRoaXMuJD1VW2llXSxuZS5hZGRDbGFzcyhVW2llXSk7YnJlYWs7Y2FzZSA0NDp0aGlzLiQ9VVtpZS0xXSxuZS5hZGRDbGFzcyhVW2llLTFdKSxuZS5zZXRDbGFzc0xhYmVsKFVbaWUtMV0sVVtpZV0pO2JyZWFrO2Nhc2UgNDU6bmUuYWRkQW5ub3RhdGlvbihVW2llXSxVW2llLTJdKTticmVhaztjYXNlIDQ2OmNhc2UgNTk6dGhpcy4kPVtVW2llXV07YnJlYWs7Y2FzZSA0NzpVW2llXS5wdXNoKFVbaWUtMV0pLHRoaXMuJD1VW2llXTticmVhaztjYXNlIDQ4OmJyZWFrO2Nhc2UgNDk6bmUuYWRkTWVtYmVyKFVbaWUtMV0sbmUuY2xlYW51cExhYmVsKFVbaWVdKSk7YnJlYWs7Y2FzZSA1MDpicmVhaztjYXNlIDUxOmJyZWFrO2Nhc2UgNTI6dGhpcy4kPXtpZDE6VVtpZS0yXSxpZDI6VVtpZV0scmVsYXRpb246VVtpZS0xXSxyZWxhdGlvblRpdGxlMToibm9uZSIscmVsYXRpb25UaXRsZTI6Im5vbmUifTticmVhaztjYXNlIDUzOnRoaXMuJD17aWQxOlVbaWUtM10saWQyOlVbaWVdLHJlbGF0aW9uOlVbaWUtMV0scmVsYXRpb25UaXRsZTE6VVtpZS0yXSxyZWxhdGlvblRpdGxlMjoibm9uZSJ9O2JyZWFrO2Nhc2UgNTQ6dGhpcy4kPXtpZDE6VVtpZS0zXSxpZDI6VVtpZV0scmVsYXRpb246VVtpZS0yXSxyZWxhdGlvblRpdGxlMToibm9uZSIscmVsYXRpb25UaXRsZTI6VVtpZS0xXX07YnJlYWs7Y2FzZSA1NTp0aGlzLiQ9e2lkMTpVW2llLTRdLGlkMjpVW2llXSxyZWxhdGlvbjpVW2llLTJdLHJlbGF0aW9uVGl0bGUxOlVbaWUtM10scmVsYXRpb25UaXRsZTI6VVtpZS0xXX07YnJlYWs7Y2FzZSA1NjpuZS5hZGROb3RlKFVbaWVdLFVbaWUtMV0pO2JyZWFrO2Nhc2UgNTc6bmUuYWRkTm90ZShVW2llXSk7YnJlYWs7Y2FzZSA1ODp0aGlzLiQ9VVtpZS0yXSxuZS5kZWZpbmVDbGFzcyhVW2llLTFdLFVbaWVdKTticmVhaztjYXNlIDYwOnRoaXMuJD1VW2llLTJdLmNvbmNhdChbVVtpZV1dKTticmVhaztjYXNlIDYxOm5lLnNldERpcmVjdGlvbigiVEIiKTticmVhaztjYXNlIDYyOm5lLnNldERpcmVjdGlvbigiQlQiKTticmVhaztjYXNlIDYzOm5lLnNldERpcmVjdGlvbigiUkwiKTticmVhaztjYXNlIDY0Om5lLnNldERpcmVjdGlvbigiTFIiKTticmVhaztjYXNlIDY1OnRoaXMuJD17dHlwZTE6VVtpZS0yXSx0eXBlMjpVW2llXSxsaW5lVHlwZTpVW2llLTFdfTticmVhaztjYXNlIDY2OnRoaXMuJD17dHlwZTE6Im5vbmUiLHR5cGUyOlVbaWVdLGxpbmVUeXBlOlVbaWUtMV19O2JyZWFrO2Nhc2UgNjc6dGhpcy4kPXt0eXBlMTpVW2llLTFdLHR5cGUyOiJub25lIixsaW5lVHlwZTpVW2llXX07YnJlYWs7Y2FzZSA2ODp0aGlzLiQ9e3R5cGUxOiJub25lIix0eXBlMjoibm9uZSIsbGluZVR5cGU6VVtpZV19O2JyZWFrO2Nhc2UgNjk6dGhpcy4kPW5lLnJlbGF0aW9uVHlwZS5BR0dSRUdBVElPTjticmVhaztjYXNlIDcwOnRoaXMuJD1uZS5yZWxhdGlvblR5cGUuRVhURU5TSU9OO2JyZWFrO2Nhc2UgNzE6dGhpcy4kPW5lLnJlbGF0aW9uVHlwZS5DT01QT1NJVElPTjticmVhaztjYXNlIDcyOnRoaXMuJD1uZS5yZWxhdGlvblR5cGUuREVQRU5ERU5DWTticmVhaztjYXNlIDczOnRoaXMuJD1uZS5yZWxhdGlvblR5cGUuTE9MTElQT1A7YnJlYWs7Y2FzZSA3NDp0aGlzLiQ9bmUubGluZVR5cGUuTElORTticmVhaztjYXNlIDc1OnRoaXMuJD1uZS5saW5lVHlwZS5ET1RURURfTElORTticmVhaztjYXNlIDc2OmNhc2UgODI6dGhpcy4kPVVbaWUtMl0sbmUuc2V0Q2xpY2tFdmVudChVW2llLTFdLFVbaWVdKTticmVhaztjYXNlIDc3OmNhc2UgODM6dGhpcy4kPVVbaWUtM10sbmUuc2V0Q2xpY2tFdmVudChVW2llLTJdLFVbaWUtMV0pLG5lLnNldFRvb2x0aXAoVVtpZS0yXSxVW2llXSk7YnJlYWs7Y2FzZSA3ODp0aGlzLiQ9VVtpZS0yXSxuZS5zZXRMaW5rKFVbaWUtMV0sVVtpZV0pO2JyZWFrO2Nhc2UgNzk6dGhpcy4kPVVbaWUtM10sbmUuc2V0TGluayhVW2llLTJdLFVbaWUtMV0sVVtpZV0pO2JyZWFrO2Nhc2UgODA6dGhpcy4kPVVbaWUtM10sbmUuc2V0TGluayhVW2llLTJdLFVbaWUtMV0pLG5lLnNldFRvb2x0aXAoVVtpZS0yXSxVW2llXSk7YnJlYWs7Y2FzZSA4MTp0aGlzLiQ9VVtpZS00XSxuZS5zZXRMaW5rKFVbaWUtM10sVVtpZS0yXSxVW2llXSksbmUuc2V0VG9vbHRpcChVW2llLTNdLFVbaWUtMV0pO2JyZWFrO2Nhc2UgODQ6dGhpcy4kPVVbaWUtM10sbmUuc2V0Q2xpY2tFdmVudChVW2llLTJdLFVbaWUtMV0sVVtpZV0pO2JyZWFrO2Nhc2UgODU6dGhpcy4kPVVbaWUtNF0sbmUuc2V0Q2xpY2tFdmVudChVW2llLTNdLFVbaWUtMl0sVVtpZS0xXSksbmUuc2V0VG9vbHRpcChVW2llLTNdLFVbaWVdKTticmVhaztjYXNlIDg2OnRoaXMuJD1VW2llLTNdLG5lLnNldExpbmsoVVtpZS0yXSxVW2llXSk7YnJlYWs7Y2FzZSA4Nzp0aGlzLiQ9VVtpZS00XSxuZS5zZXRMaW5rKFVbaWUtM10sVVtpZS0xXSxVW2llXSk7YnJlYWs7Y2FzZSA4ODp0aGlzLiQ9VVtpZS00XSxuZS5zZXRMaW5rKFVbaWUtM10sVVtpZS0xXSksbmUuc2V0VG9vbHRpcChVW2llLTNdLFVbaWVdKTticmVhaztjYXNlIDg5OnRoaXMuJD1VW2llLTVdLG5lLnNldExpbmsoVVtpZS00XSxVW2llLTJdLFVbaWVdKSxuZS5zZXRUb29sdGlwKFVbaWUtNF0sVVtpZS0xXSk7YnJlYWs7Y2FzZSA5MDp0aGlzLiQ9VVtpZS0yXSxuZS5zZXRDc3NTdHlsZShVW2llLTFdLFVbaWVdKTticmVhaztjYXNlIDkxOm5lLnNldENzc0NsYXNzKFVbaWUtMV0sVVtpZV0pO2JyZWFrO2Nhc2UgOTI6dGhpcy4kPVtVW2llXV07YnJlYWs7Y2FzZSA5MzpVW2llLTJdLnB1c2goVVtpZV0pLHRoaXMuJD1VW2llLTJdO2JyZWFrO2Nhc2UgOTU6dGhpcy4kPVVbaWUtMV0rVVtpZV07YnJlYWt9fSwiYW5vbnltb3VzIiksdGFibGU6W3szOjEsNDoyLDU6Myw2OjQsNzpbMSw2XSwxMDo1LDE2OjM5LDE4OjIxLDE5OjQwLDIxOjcsMjM6OCwyNDo5LDI1OjEwLDI2OjExLDI3OjEyLDI4OjEzLDI5OjE0LDMwOjE1LDMxOjE2LDMyOjE3LDMzOmUsMzU6ciwzNzpuLDM4OjIyLDQyOmksNDM6MjMsNDY6YSw0NzpzLDQ5OmwsNTA6dSw1MjpoLDU0OmYsNTU6ZCw1ODpwLDYwOm0sNjE6Zyw2Mjp5LDYzOnYsNzM6eCw3NDpiLDc2OncsODA6Xyw4MTpULDg0OkUsOTk6TCwxMDE6UywxMDI6QX0sezE6WzNdfSx7MTpbMiwxXX0sezE6WzIsMl19LHsxOlsyLDNdfSx0KEksWzIsNV0sezg6WzEsNDhdfSksezg6WzEsNDldfSx0KEQsWzIsMThdLHsyMjpbMSw1MF19KSx0KEQsWzIsMjBdKSx0KEQsWzIsMjFdKSx0KEQsWzIsMjJdKSx0KEQsWzIsMjNdKSx0KEQsWzIsMjRdKSx0KEQsWzIsMjVdKSx0KEQsWzIsMjZdKSx0KEQsWzIsMjddKSx0KEQsWzIsMjhdKSx0KEQsWzIsMjldKSx7MzQ6WzEsNTFdfSx7MzY6WzEsNTJdfSx0KEQsWzIsMzJdKSx0KEQsWzIsNDhdLHs1MTo1Myw2NDo1Niw2NTo1NywxMzpbMSw1NF0sMjI6WzEsNTVdLDY2OmssNjc6Uiw2ODpDLDY5Ok8sNzA6Tiw3MTpQLDcyOkZ9KSx7Mzk6WzEsNjVdfSx0KEIsWzIsMzldLHszOTpbMSw2N10sNDQ6WzEsNjZdfSksdChELFsyLDUwXSksdChELFsyLDUxXSksezE2OjY4LDU4OnAsODQ6RSw5OTpMLDEwMTpTfSx7MTY6MzksMTg6NjksMTk6NDAsNTg6cCw4NDpFLDk5OkwsMTAxOlMsMTAyOkF9LHsxNjozOSwxODo3MCwxOTo0MCw1ODpwLDg0OkUsOTk6TCwxMDE6UywxMDI6QX0sezE2OjM5LDE4OjcxLDE5OjQwLDU4OnAsODQ6RSw5OTpMLDEwMTpTLDEwMjpBfSx7NTg6WzEsNzJdfSx7MTM6WzEsNzNdfSx7MTY6MzksMTg6NzQsMTk6NDAsNTg6cCw4NDpFLDk5OkwsMTAxOlMsMTAyOkF9LHsxMzpHLDUzOjc1fSx7NTY6NzcsNTg6WzEsNzhdfSx0KEQsWzIsNjFdKSx0KEQsWzIsNjJdKSx0KEQsWzIsNjNdKSx0KEQsWzIsNjRdKSx0KHosWzIsMTJdLHsxNjozOSwxOTo0MCwxODo4MCwxNzpbMSw3OV0sMjA6WzEsODFdLDU4OnAsODQ6RSw5OTpMLDEwMTpTLDEwMjpBfSksdCh6LFsyLDE0XSx7MjA6WzEsODJdfSksezE1OjgzLDE2Ojg0LDU4OnAsODQ6RSw5OTpMLDEwMTpTfSx7MTY6MzksMTg6ODUsMTk6NDAsNTg6cCw4NDpFLDk5OkwsMTAxOlMsMTAyOkF9LHQoVyxbMiwxMThdKSx0KFcsWzIsMTE5XSksdChXLFsyLDEyMF0pLHQoVyxbMiwxMjFdKSx0KFsxLDgsOSwxMiwxMywyMCwyMiwzOSw0MSw0NCw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Nyw3OV0sWzIsMTIyXSksdChJLFsyLDZdLHsxMDo1LDIxOjcsMjM6OCwyNDo5LDI1OjEwLDI2OjExLDI3OjEyLDI4OjEzLDI5OjE0LDMwOjE1LDMxOjE2LDMyOjE3LDE4OjIxLDM4OjIyLDQzOjIzLDE2OjM5LDE5OjQwLDU6ODYsMzM6ZSwzNTpyLDM3Om4sNDI6aSw0NjphLDQ3OnMsNDk6bCw1MDp1LDUyOmgsNTQ6Ziw1NTpkLDU4OnAsNjA6bSw2MTpnLDYyOnksNjM6diw3Mzp4LDc0OmIsNzY6dyw4MDpfLDgxOlQsODQ6RSw5OTpMLDEwMTpTLDEwMjpBfSksezU6ODcsMTA6NSwxNjozOSwxODoyMSwxOTo0MCwyMTo3LDIzOjgsMjQ6OSwyNToxMCwyNjoxMSwyNzoxMiwyODoxMywyOToxNCwzMDoxNSwzMToxNiwzMjoxNywzMzplLDM1OnIsMzc6biwzODoyMiw0MjppLDQzOjIzLDQ2OmEsNDc6cyw0OTpsLDUwOnUsNTI6aCw1NDpmLDU1OmQsNTg6cCw2MDptLDYxOmcsNjI6eSw2Mzp2LDczOngsNzQ6Yiw3Njp3LDgwOl8sODE6VCw4NDpFLDk5OkwsMTAxOlMsMTAyOkF9LHQoRCxbMiwxOV0pLHQoRCxbMiwzMF0pLHQoRCxbMiwzMV0pLHsxMzpbMSw4OV0sMTY6MzksMTg6ODgsMTk6NDAsNTg6cCw4NDpFLDk5OkwsMTAxOlMsMTAyOkF9LHs1MTo5MCw2NDo1Niw2NTo1Nyw2NjprLDY3OlIsNjg6Qyw2OTpPLDcwOk4sNzE6UCw3MjpGfSx0KEQsWzIsNDldKSx7NjU6OTEsNzE6UCw3MjpGfSx0KFosWzIsNjhdLHs2NDo5Miw2NjprLDY3OlIsNjg6Qyw2OTpPLDcwOk59KSx0KGosWzIsNjldKSx0KGosWzIsNzBdKSx0KGosWzIsNzFdKSx0KGosWzIsNzJdKSx0KGosWzIsNzNdKSx0KG9lLFsyLDc0XSksdChvZSxbMiw3NV0pLHs4OlsxLDk0XSwyNDo5NSw0MDo5Myw0MzoyMyw0NjphfSx7MTY6OTYsNTg6cCw4NDpFLDk5OkwsMTAxOlN9LHs0NTo5Nyw0OTpLfSx7NDg6WzEsOTldfSx7MTM6WzEsMTAwXX0sezEzOlsxLDEwMV19LHs3NzpbMSwxMDJdLDc5OlsxLDEwM119LHsyMjplZSw1NzoxMDQsNTg6Siw4MDpILDgyOjEwNSw4MzoxMDYsODQ6cSw4NTpRLDg2OmFlLDg3OnVlLDg4OmNlLDg5OnRlfSx7NTg6WzEsMTE2XX0sezEzOkcsNTM6MTE3fSx0KEQsWzIsNTddKSx0KEQsWzIsMTIzXSksezIyOmVlLDU3OjExOCw1ODpKLDU5OlsxLDExOV0sODA6SCw4MjoxMDUsODM6MTA2LDg0OnEsODU6USw4NjphZSw4Nzp1ZSw4ODpjZSw4OTp0ZX0sdChOZSxbMiw1OV0pLHsxNjozOSwxODoxMjAsMTk6NDAsNTg6cCw4NDpFLDk5OkwsMTAxOlMsMTAyOkF9LHQoeixbMiwxNV0pLHQoeixbMiwxNl0pLHQoeixbMiwxN10pLHszOTpbMiwzNV19LHsxNToxMjIsMTY6ODQsMTc6WzEsMTIxXSwzOTpbMiw5XSw1ODpwLDg0OkUsOTk6TCwxMDE6U30sdChzZSxbMiw0M10sezExOjEyMywxMjpbMSwxMjRdfSksdChJLFsyLDddKSx7OTpbMSwxMjVdfSx0KGtlLFsyLDUyXSksezE2OjM5LDE4OjEyNiwxOTo0MCw1ODpwLDg0OkUsOTk6TCwxMDE6UywxMDI6QX0sezEzOlsxLDEyOF0sMTY6MzksMTg6MTI3LDE5OjQwLDU4OnAsODQ6RSw5OTpMLDEwMTpTLDEwMjpBfSx0KFosWzIsNjddLHs2NDoxMjksNjY6ayw2NzpSLDY4OkMsNjk6Tyw3MDpOfSksdChaLFsyLDY2XSksezQxOlsxLDEzMF19LHsyNDo5NSw0MDoxMzEsNDM6MjMsNDY6YX0sezg6WzEsMTMyXSw0MTpbMiwzNl19LHQoQixbMiw0MF0sezM5OlsxLDEzM119KSx7NDE6WzEsMTM0XX0sezQxOlsyLDQ2XSw0NToxMzUsNDk6S30sezE2OjM5LDE4OjEzNiwxOTo0MCw1ODpwLDg0OkUsOTk6TCwxMDE6UywxMDI6QX0sdChELFsyLDc2XSx7MTM6WzEsMTM3XX0pLHQoRCxbMiw3OF0sezEzOlsxLDEzOV0sNzU6WzEsMTM4XX0pLHQoRCxbMiw4Ml0sezEzOlsxLDE0MF0sNzg6WzEsMTQxXX0pLHsxMzpbMSwxNDJdfSx0KEQsWzIsOTBdLHs1OTpSZX0pLHQoQ2UsWzIsOTJdLHs4MzoxNDQsMjI6ZWUsNTg6Siw4MDpILDg0OnEsODU6USw4NjphZSw4Nzp1ZSw4ODpjZSw4OTp0ZX0pLHQoUGUsWzIsOTRdKSx0KFBlLFsyLDk2XSksdChQZSxbMiw5N10pLHQoUGUsWzIsOThdKSx0KFBlLFsyLDk5XSksdChQZSxbMiwxMDBdKSx0KFBlLFsyLDEwMV0pLHQoUGUsWzIsMTAyXSksdChQZSxbMiwxMDNdKSx0KFBlLFsyLDEwNF0pLHQoRCxbMiw5MV0pLHQoRCxbMiw1Nl0pLHQoRCxbMiw1OF0sezU5OlJlfSksezU4OlsxLDE0NV19LHQoeixbMiwxM10pLHsxNToxNDYsMTY6ODQsNTg6cCw4NDpFLDk5OkwsMTAxOlN9LHszOTpbMiwxMV19LHQoc2UsWzIsNDRdKSx7MTM6WzEsMTQ3XX0sezE6WzIsNF19LHQoa2UsWzIsNTRdKSx0KGtlLFsyLDUzXSksezE2OjM5LDE4OjE0OCwxOTo0MCw1ODpwLDg0OkUsOTk6TCwxMDE6UywxMDI6QX0sdChaLFsyLDY1XSksdChELFsyLDMzXSksezQxOlsxLDE0OV19LHsyNDo5NSw0MDoxNTAsNDE6WzIsMzddLDQzOjIzLDQ2OmF9LHs0NToxNTEsNDk6S30sdChCLFsyLDQxXSksezQxOlsyLDQ3XX0sdChELFsyLDQ1XSksdChELFsyLDc3XSksdChELFsyLDc5XSksdChELFsyLDgwXSx7NzU6WzEsMTUyXX0pLHQoRCxbMiw4M10pLHQoRCxbMiw4NF0sezEzOlsxLDE1M119KSx0KEQsWzIsODZdLHsxMzpbMSwxNTVdLDc1OlsxLDE1NF19KSx7MjI6ZWUsNTg6Siw4MDpILDgyOjE1Niw4MzoxMDYsODQ6cSw4NTpRLDg2OmFlLDg3OnVlLDg4OmNlLDg5OnRlfSx0KFBlLFsyLDk1XSksdChOZSxbMiw2MF0pLHszOTpbMiwxMF19LHsxNDpbMSwxNTddfSx0KGtlLFsyLDU1XSksdChELFsyLDM0XSksezQxOlsyLDM4XX0sezQxOlsxLDE1OF19LHQoRCxbMiw4MV0pLHQoRCxbMiw4NV0pLHQoRCxbMiw4N10pLHQoRCxbMiw4OF0sezc1OlsxLDE1OV19KSx0KENlLFsyLDkzXSx7ODM6MTQ0LDIyOmVlLDU4OkosODA6SCw4NDpxLDg1OlEsODY6YWUsODc6dWUsODg6Y2UsODk6dGV9KSx0KHNlLFsyLDhdKSx0KEIsWzIsNDJdKSx0KEQsWzIsODldKV0sZGVmYXVsdEFjdGlvbnM6ezI6WzIsMV0sMzpbMiwyXSw0OlsyLDNdLDgzOlsyLDM1XSwxMjI6WzIsMTFdLDEyNTpbMiw0XSwxMzU6WzIsNDddLDE0NjpbMiwxMF0sMTUwOlsyLDM4XX0scGFyc2VFcnJvcjpvKGZ1bmN0aW9uKGZlLGhlKXtpZihoZS5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKGZlKTtlbHNle3ZhciBnZT1uZXcgRXJyb3IoZmUpO3Rocm93IGdlLmhhc2g9aGUsZ2V9fSwicGFyc2VFcnJvciIpLHBhcnNlOm8oZnVuY3Rpb24oZmUpe3ZhciBoZT10aGlzLGdlPVswXSxuZT1bXSx2ZT1bbnVsbF0sVT1bXSxUZT10aGlzLnRhYmxlLGllPSIiLEVlPTAsQWU9MCxHZT0wLEJlPTIsbWU9MSxIZT1VLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLE9lPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksZXQ9e3l5Ont9fTtmb3IodmFyIGJ0IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksYnQpJiYoZXQueXlbYnRdPXRoaXMueXlbYnRdKTtPZS5zZXRJbnB1dChmZSxldC55eSksZXQueXkubGV4ZXI9T2UsZXQueXkucGFyc2VyPXRoaXMsdHlwZW9mIE9lLnl5bGxvYz4idSImJihPZS55eWxsb2M9e30pO3ZhciBrdD1PZS55eWxsb2M7VS5wdXNoKGt0KTt2YXIgdnQ9T2Uub3B0aW9ucyYmT2Uub3B0aW9ucy5yYW5nZXM7dHlwZW9mIGV0Lnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPWV0Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIHJ0KHlyKXtnZS5sZW5ndGg9Z2UubGVuZ3RoLTIqeXIsdmUubGVuZ3RoPXZlLmxlbmd0aC15cixVLmxlbmd0aD1VLmxlbmd0aC15cn1vKHJ0LCJwb3BTdGFjayIpO2Z1bmN0aW9uIHl0KCl7dmFyIHlyO3JldHVybiB5cj1uZS5wb3AoKXx8T2UubGV4KCl8fG1lLHR5cGVvZiB5ciE9Im51bWJlciImJih5ciBpbnN0YW5jZW9mIEFycmF5JiYobmU9eXIseXI9bmUucG9wKCkpLHlyPWhlLnN5bWJvbHNfW3lyXXx8eXIpLHlyfW8oeXQsImxleCIpO2Zvcih2YXIgVWUsdHQsaHQsRXQsZXIsZHQsSmU9e30sY3QsQ3QscHQsQnQ7Oyl7aWYoaHQ9Z2VbZ2UubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbaHRdP0V0PXRoaXMuZGVmYXVsdEFjdGlvbnNbaHRdOigoVWU9PT1udWxsfHx0eXBlb2YgVWU+InUiKSYmKFVlPXl0KCkpLEV0PVRlW2h0XSYmVGVbaHRdW1VlXSksdHlwZW9mIEV0PiJ1Inx8IUV0Lmxlbmd0aHx8IUV0WzBdKXt2YXIgVHI9IiI7QnQ9W107Zm9yKGN0IGluIFRlW2h0XSl0aGlzLnRlcm1pbmFsc19bY3RdJiZjdD5CZSYmQnQucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW2N0XSsiJyIpO09lLnNob3dQb3NpdGlvbj9Ucj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhFZSsxKStgOgpgK09lLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArQnQuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tVZV18fFVlKSsiJyI6VHI9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoRWUrMSkrIjogVW5leHBlY3RlZCAiKyhVZT09bWU/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bVWVdfHxVZSkrIiciKSx0aGlzLnBhcnNlRXJyb3IoVHIse3RleHQ6T2UubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW1VlXXx8VWUsbGluZTpPZS55eWxpbmVubyxsb2M6a3QsZXhwZWN0ZWQ6QnR9KX1pZihFdFswXWluc3RhbmNlb2YgQXJyYXkmJkV0Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIraHQrIiwgdG9rZW46ICIrVWUpO3N3aXRjaChFdFswXSl7Y2FzZSAxOmdlLnB1c2goVWUpLHZlLnB1c2goT2UueXl0ZXh0KSxVLnB1c2goT2UueXlsbG9jKSxnZS5wdXNoKEV0WzFdKSxVZT1udWxsLHR0PyhVZT10dCx0dD1udWxsKTooQWU9T2UueXlsZW5nLGllPU9lLnl5dGV4dCxFZT1PZS55eWxpbmVubyxrdD1PZS55eWxsb2MsR2U+MCYmR2UtLSk7YnJlYWs7Y2FzZSAyOmlmKEN0PXRoaXMucHJvZHVjdGlvbnNfW0V0WzFdXVsxXSxKZS4kPXZlW3ZlLmxlbmd0aC1DdF0sSmUuXyQ9e2ZpcnN0X2xpbmU6VVtVLmxlbmd0aC0oQ3R8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpVW1UubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46VVtVLmxlbmd0aC0oQ3R8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46VVtVLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sdnQmJihKZS5fJC5yYW5nZT1bVVtVLmxlbmd0aC0oQ3R8fDEpXS5yYW5nZVswXSxVW1UubGVuZ3RoLTFdLnJhbmdlWzFdXSksZHQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KEplLFtpZSxBZSxFZSxldC55eSxFdFsxXSx2ZSxVXS5jb25jYXQoSGUpKSx0eXBlb2YgZHQ8InUiKXJldHVybiBkdDtDdCYmKGdlPWdlLnNsaWNlKDAsLTEqQ3QqMiksdmU9dmUuc2xpY2UoMCwtMSpDdCksVT1VLnNsaWNlKDAsLTEqQ3QpKSxnZS5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW0V0WzFdXVswXSksdmUucHVzaChKZS4kKSxVLnB1c2goSmUuXyQpLHB0PVRlW2dlW2dlLmxlbmd0aC0yXV1bZ2VbZ2UubGVuZ3RoLTFdXSxnZS5wdXNoKHB0KTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfSwicGFyc2UiKX0sJGU9ZnVuY3Rpb24oKXt2YXIgWD17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKGhlLGdlKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKGhlLGdlKTtlbHNlIHRocm93IG5ldyBFcnJvcihoZSl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbihmZSxoZSl7cmV0dXJuIHRoaXMueXk9aGV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PWZlLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIGZlPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1mZSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9ZmUsdGhpcy5tYXRjaGVkKz1mZTt2YXIgaGU9ZmUubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBoZT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksZmV9LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24oZmUpe3ZhciBoZT1mZS5sZW5ndGgsZ2U9ZmUuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1mZSt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtaGUpLHRoaXMub2Zmc2V0LT1oZTt2YXIgbmU9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksZ2UubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1nZS5sZW5ndGgtMSk7dmFyIHZlPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpnZT8oZ2UubGVuZ3RoPT09bmUubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStuZVtuZS5sZW5ndGgtZ2UubGVuZ3RoXS5sZW5ndGgtZ2VbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1oZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt2ZVswXSx2ZVswXSt0aGlzLnl5bGVuZy1oZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSwidW5wdXQiKSxtb3JlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSwibW9yZSIpLHJlamVjdDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSwicmVqZWN0IiksbGVzczpvKGZ1bmN0aW9uKGZlKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoZmUpKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBmZT10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKGZlLmxlbmd0aD4yMD8iLi4uIjoiIikrZmUuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgZmU9dGhpcy5tYXRjaDtyZXR1cm4gZmUubGVuZ3RoPDIwJiYoZmUrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLWZlLmxlbmd0aCkpLChmZS5zdWJzdHIoMCwyMCkrKGZlLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIGZlPXRoaXMucGFzdElucHV0KCksaGU9bmV3IEFycmF5KGZlLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIGZlK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtoZSsiXiJ9LCJzaG93UG9zaXRpb24iKSx0ZXN0X21hdGNoOm8oZnVuY3Rpb24oZmUsaGUpe3ZhciBnZSxuZSx2ZTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYodmU9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodmUueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksbmU9ZmVbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLG5lJiYodGhpcy55eWxpbmVubys9bmUubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46bmU/bmVbbmUubGVuZ3RoLTFdLmxlbmd0aC1uZVtuZS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitmZVswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1mZVswXSx0aGlzLm1hdGNoKz1mZVswXSx0aGlzLm1hdGNoZXM9ZmUsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoZmVbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPWZlWzBdLGdlPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGhlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLGdlKXJldHVybiBnZTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgVSBpbiB2ZSl0aGlzW1VdPXZlW1VdO3JldHVybiExfXJldHVybiExfSwidGVzdF9tYXRjaCIpLG5leHQ6byhmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBmZSxoZSxnZSxuZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciB2ZT10aGlzLl9jdXJyZW50UnVsZXMoKSxVPTA7VTx2ZS5sZW5ndGg7VSsrKWlmKGdlPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbdmVbVV1dKSxnZSYmKCFoZXx8Z2VbMF0ubGVuZ3RoPmhlWzBdLmxlbmd0aCkpe2lmKGhlPWdlLG5lPVUsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoZmU9dGhpcy50ZXN0X21hdGNoKGdlLHZlW1VdKSxmZSE9PSExKXJldHVybiBmZTtpZih0aGlzLl9iYWNrdHJhY2spe2hlPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGhlPyhmZT10aGlzLnRlc3RfbWF0Y2goaGUsdmVbbmVdKSxmZSE9PSExP2ZlOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSwibmV4dCIpLGxleDpvKGZ1bmN0aW9uKCl7dmFyIGhlPXRoaXMubmV4dCgpO3JldHVybiBoZXx8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24oaGUpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChoZSl9LCJiZWdpbiIpLHBvcFN0YXRlOm8oZnVuY3Rpb24oKXt2YXIgaGU9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gaGU+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LCJwb3BTdGF0ZSIpLF9jdXJyZW50UnVsZXM6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LCJfY3VycmVudFJ1bGVzIiksdG9wU3RhdGU6byhmdW5jdGlvbihoZSl7cmV0dXJuIGhlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoaGV8fDApLGhlPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbaGVdOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24oaGUpe3RoaXMuYmVnaW4oaGUpfSwicHVzaFN0YXRlIiksc3RhdGVTdGFja1NpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sInN0YXRlU3RhY2tTaXplIiksb3B0aW9uczp7fSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oaGUsZ2UsbmUsdmUpe3ZhciBVPXZlO3N3aXRjaChuZSl7Y2FzZSAwOnJldHVybiA2MDtjYXNlIDE6cmV0dXJuIDYxO2Nhc2UgMjpyZXR1cm4gNjI7Y2FzZSAzOnJldHVybiA2MztjYXNlIDQ6YnJlYWs7Y2FzZSA1OmJyZWFrO2Nhc2UgNjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMzM7YnJlYWs7Y2FzZSA3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSA4OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzNTticmVhaztjYXNlIDk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjticmVhaztjYXNlIDEwOnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDExOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEyOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDEzOnJldHVybiA4O2Nhc2UgMTQ6YnJlYWs7Y2FzZSAxNTpyZXR1cm4gNztjYXNlIDE2OnJldHVybiA3O2Nhc2UgMTc6cmV0dXJuIkVER0VfU1RBVEUiO2Nhc2UgMTg6dGhpcy5iZWdpbigiY2FsbGJhY2tfbmFtZSIpO2JyZWFrO2Nhc2UgMTk6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjA6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImNhbGxiYWNrX2FyZ3MiKTticmVhaztjYXNlIDIxOnJldHVybiA3NztjYXNlIDIyOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDIzOnJldHVybiA3ODtjYXNlIDI0OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI1OnJldHVybiJTVFIiO2Nhc2UgMjY6dGhpcy5iZWdpbigic3RyaW5nIik7YnJlYWs7Y2FzZSAyNzpyZXR1cm4gODA7Y2FzZSAyODpyZXR1cm4gNTU7Y2FzZSAyOTpyZXR1cm4gdGhpcy5iZWdpbigibmFtZXNwYWNlIiksNDI7YnJlYWs7Y2FzZSAzMDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDg7YnJlYWs7Y2FzZSAzMTpicmVhaztjYXNlIDMyOnJldHVybiB0aGlzLmJlZ2luKCJuYW1lc3BhY2UtYm9keSIpLDM5O2JyZWFrO2Nhc2UgMzM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0MTticmVhaztjYXNlIDM0OnJldHVybiJFT0ZfSU5fU1RSVUNUIjtjYXNlIDM1OnJldHVybiA4O2Nhc2UgMzY6YnJlYWs7Y2FzZSAzNzpyZXR1cm4iRURHRV9TVEFURSI7Y2FzZSAzODpyZXR1cm4gdGhpcy5iZWdpbigiY2xhc3MiKSw0NjticmVhaztjYXNlIDM5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksODticmVhaztjYXNlIDQwOmJyZWFrO2Nhc2UgNDE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksNDE7YnJlYWs7Y2FzZSA0MjpyZXR1cm4gdGhpcy5iZWdpbigiY2xhc3MtYm9keSIpLDM5O2JyZWFrO2Nhc2UgNDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0MTticmVhaztjYXNlIDQ0OnJldHVybiJFT0ZfSU5fU1RSVUNUIjtjYXNlIDQ1OnJldHVybiJFREdFX1NUQVRFIjtjYXNlIDQ2OnJldHVybiJPUEVOX0lOX1NUUlVDVCI7Y2FzZSA0NzpicmVhaztjYXNlIDQ4OnJldHVybiJNRU1CRVIiO2Nhc2UgNDk6cmV0dXJuIDgxO2Nhc2UgNTA6cmV0dXJuIDczO2Nhc2UgNTE6cmV0dXJuIDc0O2Nhc2UgNTI6cmV0dXJuIDc2O2Nhc2UgNTM6cmV0dXJuIDUyO2Nhc2UgNTQ6cmV0dXJuIDU0O2Nhc2UgNTU6cmV0dXJuIDQ3O2Nhc2UgNTY6cmV0dXJuIDQ4O2Nhc2UgNTc6cmV0dXJuIDc5O2Nhc2UgNTg6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNTk6cmV0dXJuIkdFTkVSSUNUWVBFIjtjYXNlIDYwOnRoaXMuYmVnaW4oImdlbmVyaWMiKTticmVhaztjYXNlIDYxOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDYyOnJldHVybiJCUVVPVEVfU1RSIjtjYXNlIDYzOnRoaXMuYmVnaW4oImJxc3RyaW5nIik7YnJlYWs7Y2FzZSA2NDpyZXR1cm4gNzU7Y2FzZSA2NTpyZXR1cm4gNzU7Y2FzZSA2NjpyZXR1cm4gNzU7Y2FzZSA2NzpyZXR1cm4gNzU7Y2FzZSA2ODpyZXR1cm4gNjc7Y2FzZSA2OTpyZXR1cm4gNjc7Y2FzZSA3MDpyZXR1cm4gNjk7Y2FzZSA3MTpyZXR1cm4gNjk7Y2FzZSA3MjpyZXR1cm4gNjg7Y2FzZSA3MzpyZXR1cm4gNjY7Y2FzZSA3NDpyZXR1cm4gNzA7Y2FzZSA3NTpyZXR1cm4gNzE7Y2FzZSA3NjpyZXR1cm4gNzI7Y2FzZSA3NzpyZXR1cm4gMjI7Y2FzZSA3ODpyZXR1cm4gNDQ7Y2FzZSA3OTpyZXR1cm4gOTk7Y2FzZSA4MDpyZXR1cm4gMTc7Y2FzZSA4MTpyZXR1cm4iUExVUyI7Y2FzZSA4MjpyZXR1cm4gODU7Y2FzZSA4MzpyZXR1cm4gNTk7Y2FzZSA4NDpyZXR1cm4gODg7Y2FzZSA4NTpyZXR1cm4gODg7Y2FzZSA4NjpyZXR1cm4gODk7Y2FzZSA4NzpyZXR1cm4iRVFVQUxTIjtjYXNlIDg4OnJldHVybiJFUVVBTFMiO2Nhc2UgODk6cmV0dXJuIDU4O2Nhc2UgOTA6cmV0dXJuIDEyO2Nhc2UgOTE6cmV0dXJuIDE0O2Nhc2UgOTI6cmV0dXJuIlBVTkNUVUFUSU9OIjtjYXNlIDkzOnJldHVybiA4NDtjYXNlIDk0OnJldHVybiAxMDE7Y2FzZSA5NTpyZXR1cm4gODc7Y2FzZSA5NjpyZXR1cm4gODc7Y2FzZSA5NzpyZXR1cm4gOX19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK1JMW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS8sL14oPzolJSg/IVx7KSpbXlxuXSooXHI/XG4/KSspLywvXig/OiUlW15cbl0qKFxyP1xuKSopLywvXig/OmFjY1RpdGxlXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKjpccyopLywvXig/Oig/IVxufHwpKlteXG5dKikvLC9eKD86YWNjRGVzY3Jccypce1xzKikvLC9eKD86W1x9XSkvLC9eKD86W15cfV0qKS8sL14oPzpccyooXHI/XG4pKykvLC9eKD86XHMrKS8sL14oPzpjbGFzc0RpYWdyYW0tdjJcYikvLC9eKD86Y2xhc3NEaWFncmFtXGIpLywvXig/OlxbXCpcXSkvLC9eKD86Y2FsbFtcc10rKS8sL14oPzpcKFtcc10qXCkpLywvXig/OlwoKS8sL14oPzpbXihdKikvLC9eKD86XCkpLywvXig/OlteKV0qKS8sL14oPzpbIl0pLywvXig/OlteIl0qKS8sL14oPzpbIl0pLywvXig/OnN0eWxlXGIpLywvXig/OmNsYXNzRGVmXGIpLywvXig/Om5hbWVzcGFjZVxiKS8sL14oPzpccyooXHI/XG4pKykvLC9eKD86XHMrKS8sL14oPzpbe10pLywvXig/Olt9XSkvLC9eKD86JCkvLC9eKD86XHMqKFxyP1xuKSspLywvXig/OlxzKykvLC9eKD86XFtcKlxdKS8sL14oPzpjbGFzc1xiKS8sL14oPzpccyooXHI/XG4pKykvLC9eKD86XHMrKS8sL14oPzpbfV0pLywvXig/Olt7XSkvLC9eKD86W31dKS8sL14oPzokKS8sL14oPzpcW1wqXF0pLywvXig/Olt7XSkvLC9eKD86W1xuXSkvLC9eKD86W157fVxuXSopLywvXig/OmNzc0NsYXNzXGIpLywvXig/OmNhbGxiYWNrXGIpLywvXig/OmxpbmtcYikvLC9eKD86Y2xpY2tcYikvLC9eKD86bm90ZSBmb3JcYikvLC9eKD86bm90ZVxiKS8sL14oPzo8PCkvLC9eKD86Pj4pLywvXig/OmhyZWZcYikvLC9eKD86W35dKS8sL14oPzpbXn5dKikvLC9eKD86fikvLC9eKD86W2BdKS8sL14oPzpbXmBdKykvLC9eKD86W2BdKS8sL14oPzpfc2VsZlxiKS8sL14oPzpfYmxhbmtcYikvLC9eKD86X3BhcmVudFxiKS8sL14oPzpfdG9wXGIpLywvXig/OlxzKjxcfCkvLC9eKD86XHMqXHw+KS8sL14oPzpccyo+KS8sL14oPzpccyo8KS8sL14oPzpccypcKikvLC9eKD86XHMqb1xiKS8sL14oPzpccypcKFwpKS8sL14oPzotLSkvLC9eKD86XC5cLikvLC9eKD86OnsxfVteOlxuO10rKS8sL14oPzo6ezN9KS8sL14oPzotKS8sL14oPzpcLikvLC9eKD86XCspLywvXig/OjopLywvXig/OiwpLywvXig/OiMpLywvXig/OiMpLywvXig/OiUpLywvXig/Oj0pLywvXig/Oj0pLywvXig/Olx3KykvLC9eKD86XFspLywvXig/OlxdKS8sL14oPzpbISIjJCUmJyorLC0uYD9cXC9dKS8sL14oPzpbMC05XSspLywvXig/OltcdTAwQUFcdTAwQjVcdTAwQkFcdTAwQzAtXHUwMEQ2XHUwMEQ4LVx1MDBGNl18W1x1MDBGOC1cdTAyQzFcdTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1MDJFQ1x1MDJFRVx1MDM3MC1cdTAzNzRcdTAzNzZcdTAzNzddfFtcdTAzN0EtXHUwMzdEXHUwMzg2XHUwMzg4LVx1MDM4QVx1MDM4Q1x1MDM4RS1cdTAzQTFcdTAzQTMtXHUwM0Y1XXxbXHUwM0Y3LVx1MDQ4MVx1MDQ4QS1cdTA1MjdcdTA1MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDVEMC1cdTA1RUFdfFtcdTA1RjAtXHUwNUYyXHUwNjIwLVx1MDY0QVx1MDY2RVx1MDY2Rlx1MDY3MS1cdTA2RDNcdTA2RDVcdTA2RTVcdTA2RTZcdTA2RUVdfFtcdTA2RUZcdTA2RkEtXHUwNkZDXHUwNkZGXHUwNzEwXHUwNzEyLVx1MDcyRlx1MDc0RC1cdTA3QTVcdTA3QjFcdTA3Q0EtXHUwN0VBXXxbXHUwN0Y0XHUwN0Y1XHUwN0ZBXHUwODAwLVx1MDgxNVx1MDgxQVx1MDgyNFx1MDgyOFx1MDg0MC1cdTA4NThcdTA4QTBdfFtcdTA4QTItXHUwOEFDXHUwOTA0LVx1MDkzOVx1MDkzRFx1MDk1MFx1MDk1OC1cdTA5NjFcdTA5NzEtXHUwOTc3XXxbXHUwOTc5LVx1MDk3Rlx1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFBLVx1MDlCMFx1MDlCMl18W1x1MDlCNi1cdTA5QjlcdTA5QkRcdTA5Q0VcdTA5RENcdTA5RERcdTA5REYtXHUwOUUxXHUwOUYwXHUwOUYxXHUwQTA1LVx1MEEwQV18W1x1MEEwRlx1MEExMFx1MEExMy1cdTBBMjhcdTBBMkEtXHUwQTMwXHUwQTMyXHUwQTMzXHUwQTM1XHUwQTM2XHUwQTM4XHUwQTM5XXxbXHUwQTU5LVx1MEE1Q1x1MEE1RVx1MEE3Mi1cdTBBNzRcdTBBODUtXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThdfFtcdTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCRFx1MEFEMFx1MEFFMFx1MEFFMVx1MEIwNS1cdTBCMENdfFtcdTBCMEZcdTBCMTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0RcdTBCNUNdfFtcdTBCNURcdTBCNUYtXHUwQjYxXHUwQjcxXHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XXxbXHUwQjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjlcdTBCRDBdfFtcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzMzXHUwQzM1LVx1MEMzOVx1MEMzRF18W1x1MEM1OFx1MEM1OVx1MEM2MFx1MEM2MVx1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNdfFtcdTBDQjUtXHUwQ0I5XHUwQ0JEXHUwQ0RFXHUwQ0UwXHUwQ0UxXHUwQ0YxXHUwQ0YyXHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBdfFtcdTBEMTItXHUwRDNBXHUwRDNEXHUwRDRFXHUwRDYwXHUwRDYxXHUwRDdBLVx1MEQ3Rlx1MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXXxbXHUwREIzLVx1MERCQlx1MERCRFx1MERDMC1cdTBEQzZcdTBFMDEtXHUwRTMwXHUwRTMyXHUwRTMzXHUwRTQwLVx1MEU0Nlx1MEU4MV18W1x1MEU4Mlx1MEU4NFx1MEU4N1x1MEU4OFx1MEU4QVx1MEU4RFx1MEU5NC1cdTBFOTdcdTBFOTktXHUwRTlGXHUwRUExLVx1MEVBM118W1x1MEVBNVx1MEVBN1x1MEVBQVx1MEVBQlx1MEVBRC1cdTBFQjBcdTBFQjJcdTBFQjNcdTBFQkRcdTBFQzAtXHUwRUM0XHUwRUM2XXxbXHUwRURDLVx1MEVERlx1MEYwMFx1MEY0MC1cdTBGNDdcdTBGNDktXHUwRjZDXHUwRjg4LVx1MEY4Q1x1MTAwMC1cdTEwMkFdfFtcdTEwM0ZcdTEwNTAtXHUxMDU1XHUxMDVBLVx1MTA1RFx1MTA2MVx1MTA2NVx1MTA2Nlx1MTA2RS1cdTEwNzBcdTEwNzUtXHUxMDgxXXxbXHUxMDhFXHUxMEEwLVx1MTBDNVx1MTBDN1x1MTBDRFx1MTBEMC1cdTEwRkFcdTEwRkMtXHUxMjQ4XHUxMjRBLVx1MTI0RF18W1x1MTI1MC1cdTEyNTZcdTEyNThcdTEyNUEtXHUxMjVEXHUxMjYwLVx1MTI4OFx1MTI4QS1cdTEyOERcdTEyOTAtXHUxMkIwXXxbXHUxMkIyLVx1MTJCNVx1MTJCOC1cdTEyQkVcdTEyQzBcdTEyQzItXHUxMkM1XHUxMkM4LVx1MTJENlx1MTJEOC1cdTEzMTBdfFtcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1QVx1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y0XHUxNDAxLVx1MTY2Q118W1x1MTY2Ri1cdTE2N0ZcdTE2ODEtXHUxNjlBXHUxNkEwLVx1MTZFQVx1MTcwMC1cdTE3MENcdTE3MEUtXHUxNzExXXxbXHUxNzIwLVx1MTczMVx1MTc0MC1cdTE3NTFcdTE3NjAtXHUxNzZDXHUxNzZFLVx1MTc3MFx1MTc4MC1cdTE3QjNcdTE3RDddfFtcdTE3RENcdTE4MjAtXHUxODc3XHUxODgwLVx1MThBOFx1MThBQVx1MThCMC1cdTE4RjVcdTE5MDAtXHUxOTFDXXxbXHUxOTUwLVx1MTk2RFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOUFCXHUxOUMxLVx1MTlDN1x1MUEwMC1cdTFBMTZdfFtcdTFBMjAtXHUxQTU0XHUxQUE3XHUxQjA1LVx1MUIzM1x1MUI0NS1cdTFCNEJcdTFCODMtXHUxQkEwXHUxQkFFXHUxQkFGXXxbXHUxQkJBLVx1MUJFNVx1MUMwMC1cdTFDMjNcdTFDNEQtXHUxQzRGXHUxQzVBLVx1MUM3RFx1MUNFOS1cdTFDRUNdfFtcdTFDRUUtXHUxQ0YxXHUxQ0Y1XHUxQ0Y2XHUxRDAwLVx1MURCRlx1MUUwMC1cdTFGMTVcdTFGMTgtXHUxRjFEXXxbXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RF18W1x1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXXxbXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjA3MVx1MjA3Rl18W1x1MjA5MC1cdTIwOUNcdTIxMDJcdTIxMDdcdTIxMEEtXHUyMTEzXHUyMTE1XHUyMTE5LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEyOF18W1x1MjEyQS1cdTIxMkRcdTIxMkYtXHUyMTM5XHUyMTNDLVx1MjEzRlx1MjE0NS1cdTIxNDlcdTIxNEVcdTIxODNcdTIxODRdfFtcdTJDMDAtXHUyQzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0VFXHUyQ0YyXHUyQ0YzXXxbXHUyRDAwLVx1MkQyNVx1MkQyN1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEODAtXHUyRDk2XHUyREEwLVx1MkRBNl18W1x1MkRBOC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJEQzZcdTJEQzgtXHUyRENFXXxbXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTJFMkZcdTMwMDVcdTMwMDZcdTMwMzEtXHUzMDM1XHUzMDNCXHUzMDNDXXxbXHUzMDQxLVx1MzA5Nlx1MzA5RC1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkRdfFtcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZDQ118W1x1QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MUZcdUE2MkFcdUE2MkJdfFtcdUE2NDAtXHVBNjZFXHVBNjdGLVx1QTY5N1x1QTZBMC1cdUE2RTVcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OF18W1x1QTc4Qi1cdUE3OEVcdUE3OTAtXHVBNzkzXHVBN0EwLVx1QTdBQVx1QTdGOC1cdUE4MDFcdUE4MDMtXHVBODA1XXxbXHVBODA3LVx1QTgwQVx1QTgwQy1cdUE4MjJcdUE4NDAtXHVBODczXHVBODgyLVx1QThCM1x1QThGMi1cdUE4RjdcdUE4RkJdfFtcdUE5MEEtXHVBOTI1XHVBOTMwLVx1QTk0Nlx1QTk2MC1cdUE5N0NcdUE5ODQtXHVBOUIyXHVBOUNGXHVBQTAwLVx1QUEyOF18W1x1QUE0MC1cdUFBNDJcdUFBNDQtXHVBQTRCXHVBQTYwLVx1QUE3Nlx1QUE3QVx1QUE4MC1cdUFBQUZcdUFBQjFcdUFBQjVdfFtcdUFBQjZcdUFBQjktXHVBQUJEXHVBQUMwXHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUFcdUFBRjItXHVBQUY0XXxbXHVBQjAxLVx1QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIyOC1cdUFCMkVdfFtcdUFCQzAtXHVBQkUyXHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkE2RF18W1x1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkIxRFx1RkIxRi1cdUZCMjhcdUZCMkEtXHVGQjM2XXxbXHVGQjM4LVx1RkIzQ1x1RkIzRVx1RkI0MFx1RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXXxbXHVGRDUwLVx1RkQ4Rlx1RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZFRkNdfFtcdUZGMjEtXHVGRjNBXHVGRjQxLVx1RkY1QVx1RkY2Ni1cdUZGQkVcdUZGQzItXHVGRkM3XHVGRkNBLVx1RkZDRl18W1x1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXSkvLC9eKD86XHMpLywvXig/OlxzKS8sL14oPzokKS9dLGNvbmRpdGlvbnM6eyJuYW1lc3BhY2UtYm9keSI6e3J1bGVzOlsyNiwzMywzNCwzNSwzNiwzNywzOCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5N10saW5jbHVzaXZlOiExfSxuYW1lc3BhY2U6e3J1bGVzOlsyNiwyOSwzMCwzMSwzMiw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5N10saW5jbHVzaXZlOiExfSwiY2xhc3MtYm9keSI6e3J1bGVzOlsyNiw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5N10saW5jbHVzaXZlOiExfSxjbGFzczp7cnVsZXM6WzI2LDM5LDQwLDQxLDQyLDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDYwLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk3XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMSwxMiwyNiw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5N10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls5LDI2LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDYwLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk3XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzcsMjYsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjAsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTddLGluY2x1c2l2ZTohMX0sY2FsbGJhY2tfYXJnczp7cnVsZXM6WzIyLDIzLDI2LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDYwLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk3XSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrX25hbWU6e3J1bGVzOlsxOSwyMCwyMSwyNiw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5N10saW5jbHVzaXZlOiExfSxocmVmOntydWxlczpbMjYsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjAsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTddLGluY2x1c2l2ZTohMX0sc3RydWN0OntydWxlczpbMjYsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjAsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTddLGluY2x1c2l2ZTohMX0sZ2VuZXJpYzp7cnVsZXM6WzI2LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk3XSxpbmNsdXNpdmU6ITF9LGJxc3RyaW5nOntydWxlczpbMjYsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTddLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbMjQsMjUsMjYsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjAsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTddLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDYsOCwxMCwxMywxNCwxNSwxNiwxNywxOCwyNiwyNywyOCwyOSwzOCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5N10saW5jbHVzaXZlOiEwfX19O3JldHVybiBYfSgpO0llLmxleGVyPSRlO2Z1bmN0aW9uIHllKCl7dGhpcy55eT17fX1yZXR1cm4gbyh5ZSwiUGFyc2VyIikseWUucHJvdG90eXBlPUllLEllLlBhcnNlcj15ZSxuZXcgeWV9KCk7Uk8ucGFyc2VyPVJPO09FPVJPfSk7dmFyIHBkZSxCeCxtZGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWdCgpO2ZyKCk7cGRlPVsiIyIsIisiLCJ+IiwiLSIsIiJdLEJ4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkNsYXNzTWVtYmVyIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLm1lbWJlclR5cGU9cix0aGlzLnZpc2liaWxpdHk9IiIsdGhpcy5jbGFzc2lmaWVyPSIiLHRoaXMudGV4dD0iIjtsZXQgbj1rcihlLHBlKCkpO3RoaXMucGFyc2VNZW1iZXIobil9Z2V0RGlzcGxheURldGFpbHMoKXtsZXQgZT10aGlzLnZpc2liaWxpdHkreXUodGhpcy5pZCk7dGhpcy5tZW1iZXJUeXBlPT09Im1ldGhvZCImJihlKz1gKCR7eXUodGhpcy5wYXJhbWV0ZXJzLnRyaW0oKSl9KWAsdGhpcy5yZXR1cm5UeXBlJiYoZSs9IiA6ICIreXUodGhpcy5yZXR1cm5UeXBlKSkpLGU9ZS50cmltKCk7bGV0IHI9dGhpcy5wYXJzZUNsYXNzaWZpZXIoKTtyZXR1cm57ZGlzcGxheVRleHQ6ZSxjc3NTdHlsZTpyfX1wYXJzZU1lbWJlcihlKXtsZXQgcj0iIjtpZih0aGlzLm1lbWJlclR5cGU9PT0ibWV0aG9kIil7bGV0IGE9LyhbIyt+LV0pPyguKylcKCguKilcKShbXHMkKl0pPyguKikoWyQqXSk/Ly5leGVjKGUpO2lmKGEpe2xldCBzPWFbMV0/YVsxXS50cmltKCk6IiI7aWYocGRlLmluY2x1ZGVzKHMpJiYodGhpcy52aXNpYmlsaXR5PXMpLHRoaXMuaWQ9YVsyXSx0aGlzLnBhcmFtZXRlcnM9YVszXT9hWzNdLnRyaW0oKToiIixyPWFbNF0/YVs0XS50cmltKCk6IiIsdGhpcy5yZXR1cm5UeXBlPWFbNV0/YVs1XS50cmltKCk6IiIscj09PSIiKXtsZXQgbD10aGlzLnJldHVyblR5cGUuc3Vic3RyaW5nKHRoaXMucmV0dXJuVHlwZS5sZW5ndGgtMSk7L1skKl0vLmV4ZWMobCkmJihyPWwsdGhpcy5yZXR1cm5UeXBlPXRoaXMucmV0dXJuVHlwZS5zdWJzdHJpbmcoMCx0aGlzLnJldHVyblR5cGUubGVuZ3RoLTEpKX19fWVsc2V7bGV0IGk9ZS5sZW5ndGgsYT1lLnN1YnN0cmluZygwLDEpLHM9ZS5zdWJzdHJpbmcoaS0xKTtwZGUuaW5jbHVkZXMoYSkmJih0aGlzLnZpc2liaWxpdHk9YSksL1skKl0vLmV4ZWMocykmJihyPXMpLHRoaXMuaWQ9ZS5zdWJzdHJpbmcodGhpcy52aXNpYmlsaXR5PT09IiI/MDoxLHI9PT0iIj9pOmktMSl9dGhpcy5jbGFzc2lmaWVyPXIsdGhpcy5pZD10aGlzLmlkLnN0YXJ0c1dpdGgoIiAiKT8iICIrdGhpcy5pZC50cmltKCk6dGhpcy5pZC50cmltKCk7bGV0IG49YCR7dGhpcy52aXNpYmlsaXR5PyJcXCIrdGhpcy52aXNpYmlsaXR5OiIifSR7eXUodGhpcy5pZCl9JHt0aGlzLm1lbWJlclR5cGU9PT0ibWV0aG9kIj9gKCR7eXUodGhpcy5wYXJhbWV0ZXJzKX0pJHt0aGlzLnJldHVyblR5cGU/IiA6ICIreXUodGhpcy5yZXR1cm5UeXBlKToiIn1gOiIifWA7dGhpcy50ZXh0PW4ucmVwbGFjZUFsbCgiPCIsIiZsdDsiKS5yZXBsYWNlQWxsKCI+IiwiJmd0OyIpLHRoaXMudGV4dC5zdGFydHNXaXRoKCJcXCZsdDsiKSYmKHRoaXMudGV4dD10aGlzLnRleHQucmVwbGFjZSgiXFwmbHQ7IiwifiIpKX1wYXJzZUNsYXNzaWZpZXIoKXtzd2l0Y2godGhpcy5jbGFzc2lmaWVyKXtjYXNlIioiOnJldHVybiJmb250LXN0eWxlOml0YWxpYzsiO2Nhc2UiJCI6cmV0dXJuInRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7IjtkZWZhdWx0OnJldHVybiIifX19fSk7ZnVuY3Rpb24geGRlKHQpe2xldCBlO3N3aXRjaCh0KXtjYXNlIDA6ZT0iYWdncmVnYXRpb24iO2JyZWFrO2Nhc2UgMTplPSJleHRlbnNpb24iO2JyZWFrO2Nhc2UgMjplPSJjb21wb3NpdGlvbiI7YnJlYWs7Y2FzZSAzOmU9ImRlcGVuZGVuY3kiO2JyZWFrO2Nhc2UgNDplPSJsb2xsaXBvcCI7YnJlYWs7ZGVmYXVsdDplPSJub25lIn1yZXR1cm4gZX12YXIgUEUsQkUsTm4sZ2RlLEZ4LEpnLHlkZSxxbCxJTyx6eCxQMCxCMCxBSGUsWmcsdmRlLGJkZSxfSGUsTEhlLERIZSxOSGUsUkhlLE1IZSxJSGUsd2RlLE9IZSxQSGUsQkhlLE9PLEZIZSx6SGUsR0hlLCRIZSxWSGUsVUhlLEhIZSxXSGUsRWYsVGRlLFBPLGtkZSxZSGUscUhlLFhIZSxqSGUsS0hlLFFIZSxaSGUsZTEsQk89TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwcigpO3V0KCk7VnQoKTtmcigpO2hyKCk7QWkoKTttZGUoKTtQRT0iY2xhc3NJZC0iLEJFPVtdLE5uPW5ldyBNYXAsZ2RlPW5ldyBNYXAsRng9W10sSmc9W10seWRlPTAscWw9bmV3IE1hcCxJTz0wLHp4PVtdLFAwPW8odD0+cWUuc2FuaXRpemVUZXh0KHQscGUoKSksInNhbml0aXplVGV4dCIpLEIwPW8oZnVuY3Rpb24odCl7bGV0IGU9cWUuc2FuaXRpemVUZXh0KHQscGUoKSkscj0iIixuPWU7aWYoZS5pbmRleE9mKCJ+Iik+MCl7bGV0IGk9ZS5zcGxpdCgifiIpO249UDAoaVswXSkscj1QMChpWzFdKX1yZXR1cm57Y2xhc3NOYW1lOm4sdHlwZTpyfX0sInNwbGl0Q2xhc3NOYW1lQW5kVHlwZSIpLEFIZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9cWUuc2FuaXRpemVUZXh0KHQscGUoKSk7ZSYmKGU9UDAoZSkpO2xldHtjbGFzc05hbWU6bn09QjAocik7Tm4uZ2V0KG4pLmxhYmVsPWUsTm4uZ2V0KG4pLnRleHQ9YCR7ZX0ke05uLmdldChuKS50eXBlP2A8JHtObi5nZXQobikudHlwZX0+YDoiIn1gfSwic2V0Q2xhc3NMYWJlbCIpLFpnPW8oZnVuY3Rpb24odCl7bGV0IGU9cWUuc2FuaXRpemVUZXh0KHQscGUoKSkse2NsYXNzTmFtZTpyLHR5cGU6bn09QjAoZSk7aWYoTm4uaGFzKHIpKXJldHVybjtsZXQgaT1xZS5zYW5pdGl6ZVRleHQocixwZSgpKTtObi5zZXQoaSx7aWQ6aSx0eXBlOm4sbGFiZWw6aSx0ZXh0OmAke2l9JHtuP2AmbHQ7JHtufSZndDtgOiIifWAsc2hhcGU6ImNsYXNzQm94Iixjc3NDbGFzc2VzOiJkZWZhdWx0IixtZXRob2RzOltdLG1lbWJlcnM6W10sYW5ub3RhdGlvbnM6W10sc3R5bGVzOltdLGRvbUlkOlBFK2krIi0iK3lkZX0pLHlkZSsrfSwiYWRkQ2xhc3MiKSx2ZGU9byhmdW5jdGlvbih0LGUpe2xldCByPXtpZDpgaW50ZXJmYWNlJHtKZy5sZW5ndGh9YCxsYWJlbDp0LGNsYXNzSWQ6ZX07SmcucHVzaChyKX0sImFkZEludGVyZmFjZSIpLGJkZT1vKGZ1bmN0aW9uKHQpe2xldCBlPXFlLnNhbml0aXplVGV4dCh0LHBlKCkpO2lmKE5uLmhhcyhlKSlyZXR1cm4gTm4uZ2V0KGUpLmRvbUlkO3Rocm93IG5ldyBFcnJvcigiQ2xhc3Mgbm90IGZvdW5kOiAiK2UpfSwibG9va1VwRG9tSWQiKSxfSGU9byhmdW5jdGlvbigpe0JFPVtdLE5uPW5ldyBNYXAsRng9W10sSmc9W10seng9W10sengucHVzaChUZGUpLHFsPW5ldyBNYXAsSU89MCxQTz0iVEIiLExyKCl9LCJjbGVhciIpLExIZT1vKGZ1bmN0aW9uKHQpe3JldHVybiBObi5nZXQodCl9LCJnZXRDbGFzcyIpLERIZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIE5ufSwiZ2V0Q2xhc3NlcyIpLE5IZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIEJFfSwiZ2V0UmVsYXRpb25zIiksUkhlPW8oZnVuY3Rpb24oKXtyZXR1cm4gRnh9LCJnZXROb3RlcyIpLE1IZT1vKGZ1bmN0aW9uKHQpe1kuZGVidWcoIkFkZGluZyByZWxhdGlvbjogIitKU09OLnN0cmluZ2lmeSh0KSk7bGV0IGU9W0VmLkxPTExJUE9QLEVmLkFHR1JFR0FUSU9OLEVmLkNPTVBPU0lUSU9OLEVmLkRFUEVOREVOQ1ksRWYuRVhURU5TSU9OXTt0LnJlbGF0aW9uLnR5cGUxPT09RWYuTE9MTElQT1AmJiFlLmluY2x1ZGVzKHQucmVsYXRpb24udHlwZTIpPyhaZyh0LmlkMiksdmRlKHQuaWQxLHQuaWQyKSx0LmlkMT1gaW50ZXJmYWNlJHtKZy5sZW5ndGgtMX1gKTp0LnJlbGF0aW9uLnR5cGUyPT09RWYuTE9MTElQT1AmJiFlLmluY2x1ZGVzKHQucmVsYXRpb24udHlwZTEpPyhaZyh0LmlkMSksdmRlKHQuaWQyLHQuaWQxKSx0LmlkMj1gaW50ZXJmYWNlJHtKZy5sZW5ndGgtMX1gKTooWmcodC5pZDEpLFpnKHQuaWQyKSksdC5pZDE9QjAodC5pZDEpLmNsYXNzTmFtZSx0LmlkMj1CMCh0LmlkMikuY2xhc3NOYW1lLHQucmVsYXRpb25UaXRsZTE9cWUuc2FuaXRpemVUZXh0KHQucmVsYXRpb25UaXRsZTEudHJpbSgpLHBlKCkpLHQucmVsYXRpb25UaXRsZTI9cWUuc2FuaXRpemVUZXh0KHQucmVsYXRpb25UaXRsZTIudHJpbSgpLHBlKCkpLEJFLnB1c2godCl9LCJhZGRSZWxhdGlvbiIpLElIZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9QjAodCkuY2xhc3NOYW1lO05uLmdldChyKS5hbm5vdGF0aW9ucy5wdXNoKGUpfSwiYWRkQW5ub3RhdGlvbiIpLHdkZT1vKGZ1bmN0aW9uKHQsZSl7WmcodCk7bGV0IHI9QjAodCkuY2xhc3NOYW1lLG49Tm4uZ2V0KHIpO2lmKHR5cGVvZiBlPT0ic3RyaW5nIil7bGV0IGk9ZS50cmltKCk7aS5zdGFydHNXaXRoKCI8PCIpJiZpLmVuZHNXaXRoKCI+PiIpP24uYW5ub3RhdGlvbnMucHVzaChQMChpLnN1YnN0cmluZygyLGkubGVuZ3RoLTIpKSk6aS5pbmRleE9mKCIpIik+MD9uLm1ldGhvZHMucHVzaChuZXcgQngoaSwibWV0aG9kIikpOmkmJm4ubWVtYmVycy5wdXNoKG5ldyBCeChpLCJhdHRyaWJ1dGUiKSl9fSwiYWRkTWVtYmVyIiksT0hlPW8oZnVuY3Rpb24odCxlKXtBcnJheS5pc0FycmF5KGUpJiYoZS5yZXZlcnNlKCksZS5mb3JFYWNoKHI9PndkZSh0LHIpKSl9LCJhZGRNZW1iZXJzIiksUEhlPW8oZnVuY3Rpb24odCxlKXtsZXQgcj17aWQ6YG5vdGUke0Z4Lmxlbmd0aH1gLGNsYXNzOmUsdGV4dDp0fTtGeC5wdXNoKHIpfSwiYWRkTm90ZSIpLEJIZT1vKGZ1bmN0aW9uKHQpe3JldHVybiB0LnN0YXJ0c1dpdGgoIjoiKSYmKHQ9dC5zdWJzdHJpbmcoMSkpLFAwKHQudHJpbSgpKX0sImNsZWFudXBMYWJlbCIpLE9PPW8oZnVuY3Rpb24odCxlKXt0LnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihyKXtsZXQgbj1yOy9cZC8uZXhlYyhyWzBdKSYmKG49UEUrbik7bGV0IGk9Tm4uZ2V0KG4pO2kmJihpLmNzc0NsYXNzZXMrPSIgIitlKX0pfSwic2V0Q3NzQ2xhc3MiKSxGSGU9byhmdW5jdGlvbih0LGUpe2ZvcihsZXQgciBvZiB0KXtsZXQgbj1nZGUuZ2V0KHIpO249PT12b2lkIDAmJihuPXtpZDpyLHN0eWxlczpbXSx0ZXh0U3R5bGVzOltdfSxnZGUuc2V0KHIsbikpLGUmJmUuZm9yRWFjaChmdW5jdGlvbihpKXtpZigvY29sb3IvLmV4ZWMoaSkpe2xldCBhPWkucmVwbGFjZSgiZmlsbCIsImJnRmlsbCIpO24udGV4dFN0eWxlcy5wdXNoKGEpfW4uc3R5bGVzLnB1c2goaSl9KSxObi5mb3JFYWNoKGk9PntpLmNzc0NsYXNzZXMuaW5jbHVkZXMocikmJmkuc3R5bGVzLnB1c2goLi4uZS5mbGF0TWFwKGE9PmEuc3BsaXQoIiwiKSkpfSl9fSwiZGVmaW5lQ2xhc3MiKSx6SGU9byhmdW5jdGlvbih0LGUpe3Quc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2UhPT12b2lkIDAmJihObi5nZXQocikudG9vbHRpcD1QMChlKSl9KX0sInNldFRvb2x0aXAiKSxHSGU9byhmdW5jdGlvbih0LGUpe3JldHVybiBlJiZxbC5oYXMoZSk/cWwuZ2V0KGUpLmNsYXNzZXMuZ2V0KHQpLnRvb2x0aXA6Tm4uZ2V0KHQpLnRvb2x0aXB9LCJnZXRUb29sdGlwIiksJEhlPW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPXBlKCk7dC5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24oaSl7bGV0IGE9aTsvXGQvLmV4ZWMoaVswXSkmJihhPVBFK2EpO2xldCBzPU5uLmdldChhKTtzJiYocy5saW5rPVV0LmZvcm1hdFVybChlLG4pLG4uc2VjdXJpdHlMZXZlbD09PSJzYW5kYm94Ij9zLmxpbmtUYXJnZXQ9Il90b3AiOnR5cGVvZiByPT0ic3RyaW5nIj9zLmxpbmtUYXJnZXQ9UDAocik6cy5saW5rVGFyZ2V0PSJfYmxhbmsiKX0pLE9PKHQsImNsaWNrYWJsZSIpfSwic2V0TGluayIpLFZIZT1vKGZ1bmN0aW9uKHQsZSxyKXt0LnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihuKXtVSGUobixlLHIpLE5uLmdldChuKS5oYXZlQ2FsbGJhY2s9ITB9KSxPTyh0LCJjbGlja2FibGUiKX0sInNldENsaWNrRXZlbnQiKSxVSGU9byhmdW5jdGlvbih0LGUscil7bGV0IG49cWUuc2FuaXRpemVUZXh0KHQscGUoKSk7aWYocGUoKS5zZWN1cml0eUxldmVsIT09Imxvb3NlInx8ZT09PXZvaWQgMClyZXR1cm47bGV0IGE9bjtpZihObi5oYXMoYSkpe2xldCBzPWJkZShhKSxsPVtdO2lmKHR5cGVvZiByPT0ic3RyaW5nIil7bD1yLnNwbGl0KC8sKD89KD86KD86W14iXSoiKXsyfSkqW14iXSokKS8pO2ZvcihsZXQgdT0wO3U8bC5sZW5ndGg7dSsrKXtsZXQgaD1sW3VdLnRyaW0oKTtoLnN0YXJ0c1dpdGgoJyInKSYmaC5lbmRzV2l0aCgnIicpJiYoaD1oLnN1YnN0cigxLGgubGVuZ3RoLTIpKSxsW3VdPWh9fWwubGVuZ3RoPT09MCYmbC5wdXNoKHMpLHp4LnB1c2goZnVuY3Rpb24oKXtsZXQgdT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbaWQ9IiR7c30iXWApO3UhPT1udWxsJiZ1LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe1V0LnJ1bkZ1bmMoZSwuLi5sKX0sITEpfSl9fSwic2V0Q2xpY2tGdW5jIiksSEhlPW8oZnVuY3Rpb24odCl7enguZm9yRWFjaChmdW5jdGlvbihlKXtlKHQpfSl9LCJiaW5kRnVuY3Rpb25zIiksV0hlPXtMSU5FOjAsRE9UVEVEX0xJTkU6MX0sRWY9e0FHR1JFR0FUSU9OOjAsRVhURU5TSU9OOjEsQ09NUE9TSVRJT046MixERVBFTkRFTkNZOjMsTE9MTElQT1A6NH0sVGRlPW8oZnVuY3Rpb24odCl7bGV0IGU9VmUoIi5tZXJtYWlkVG9vbHRpcCIpOyhlLl9ncm91cHN8fGUpWzBdWzBdPT09bnVsbCYmKGU9VmUoImJvZHkiKS5hcHBlbmQoImRpdiIpLmF0dHIoImNsYXNzIiwibWVybWFpZFRvb2x0aXAiKS5zdHlsZSgib3BhY2l0eSIsMCkpLFZlKHQpLnNlbGVjdCgic3ZnIikuc2VsZWN0QWxsKCJnLm5vZGUiKS5vbigibW91c2VvdmVyIixmdW5jdGlvbigpe2xldCBpPVZlKHRoaXMpO2lmKGkuYXR0cigidGl0bGUiKT09PW51bGwpcmV0dXJuO2xldCBzPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMjAwKS5zdHlsZSgib3BhY2l0eSIsIi45IiksZS50ZXh0KGkuYXR0cigidGl0bGUiKSkuc3R5bGUoImxlZnQiLHdpbmRvdy5zY3JvbGxYK3MubGVmdCsocy5yaWdodC1zLmxlZnQpLzIrInB4Iikuc3R5bGUoInRvcCIsd2luZG93LnNjcm9sbFkrcy50b3AtMTQrZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ArInB4IiksZS5odG1sKGUuaHRtbCgpLnJlcGxhY2UoLyZsdDticlwvJmd0Oy9nLCI8YnIvPiIpKSxpLmNsYXNzZWQoImhvdmVyIiwhMCl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7ZS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5zdHlsZSgib3BhY2l0eSIsMCksVmUodGhpcykuY2xhc3NlZCgiaG92ZXIiLCExKX0pfSwic2V0dXBUb29sVGlwcyIpO3p4LnB1c2goVGRlKTtQTz0iVEIiLGtkZT1vKCgpPT5QTywiZ2V0RGlyZWN0aW9uIiksWUhlPW8odD0+e1BPPXR9LCJzZXREaXJlY3Rpb24iKSxxSGU9byhmdW5jdGlvbih0KXtxbC5oYXModCl8fChxbC5zZXQodCx7aWQ6dCxjbGFzc2VzOm5ldyBNYXAsY2hpbGRyZW46e30sZG9tSWQ6UEUrdCsiLSIrSU99KSxJTysrKX0sImFkZE5hbWVzcGFjZSIpLFhIZT1vKGZ1bmN0aW9uKHQpe3JldHVybiBxbC5nZXQodCl9LCJnZXROYW1lc3BhY2UiKSxqSGU9byhmdW5jdGlvbigpe3JldHVybiBxbH0sImdldE5hbWVzcGFjZXMiKSxLSGU9byhmdW5jdGlvbih0LGUpe2lmKHFsLmhhcyh0KSlmb3IobGV0IHIgb2YgZSl7bGV0e2NsYXNzTmFtZTpufT1CMChyKTtObi5nZXQobikucGFyZW50PXQscWwuZ2V0KHQpLmNsYXNzZXMuc2V0KG4sTm4uZ2V0KG4pKX19LCJhZGRDbGFzc2VzVG9OYW1lc3BhY2UiKSxRSGU9byhmdW5jdGlvbih0LGUpe2xldCByPU5uLmdldCh0KTtpZighKCFlfHwhcikpZm9yKGxldCBuIG9mIGUpbi5pbmNsdWRlcygiLCIpP3Iuc3R5bGVzLnB1c2goLi4ubi5zcGxpdCgiLCIpKTpyLnN0eWxlcy5wdXNoKG4pfSwic2V0Q3NzU3R5bGUiKTtvKHhkZSwiZ2V0QXJyb3dNYXJrZXIiKTtaSGU9bygoKT0+e2xldCB0PVtdLGU9W10scj1wZSgpO2ZvcihsZXQgaSBvZiBxbC5rZXlzKCkpe2xldCBhPXFsLmdldChpKTtpZihhKXtsZXQgcz17aWQ6YS5pZCxsYWJlbDphLmlkLGlzR3JvdXA6ITAscGFkZGluZzpyLmNsYXNzLnBhZGRpbmc/PzE2LHNoYXBlOiJyZWN0Iixjc3NTdHlsZXM6WyJmaWxsOiBub25lIiwic3Ryb2tlOiBibGFjayJdLGxvb2s6ci5sb29rfTt0LnB1c2gocyl9fWZvcihsZXQgaSBvZiBObi5rZXlzKCkpe2xldCBhPU5uLmdldChpKTtpZihhKXtsZXQgcz1hO3MucGFyZW50SWQ9YS5wYXJlbnQscy5sb29rPXIubG9vayx0LnB1c2gocyl9fWxldCBuPTA7Zm9yKGxldCBpIG9mIEZ4KXtuKys7bGV0IGE9e2lkOmkuaWQsbGFiZWw6aS50ZXh0LGlzR3JvdXA6ITEsc2hhcGU6Im5vdGUiLHBhZGRpbmc6ci5jbGFzcy5wYWRkaW5nPz82LGNzc1N0eWxlczpbInRleHQtYWxpZ246IGxlZnQiLCJ3aGl0ZS1zcGFjZTogbm93cmFwIixgZmlsbDogJHtyLnRoZW1lVmFyaWFibGVzLm5vdGVCa2dDb2xvcn1gLGBzdHJva2U6ICR7ci50aGVtZVZhcmlhYmxlcy5ub3RlQm9yZGVyQ29sb3J9YF0sbG9vazpyLmxvb2t9O3QucHVzaChhKTtsZXQgcz1Obi5nZXQoaS5jbGFzcyk/LmlkPz8iIjtpZihzKXtsZXQgbD17aWQ6YGVkZ2VOb3RlJHtufWAsc3RhcnQ6aS5pZCxlbmQ6cyx0eXBlOiJub3JtYWwiLHRoaWNrbmVzczoibm9ybWFsIixjbGFzc2VzOiJyZWxhdGlvbiIsYXJyb3dUeXBlU3RhcnQ6Im5vbmUiLGFycm93VHlwZUVuZDoibm9uZSIsYXJyb3doZWFkU3R5bGU6IiIsbGFiZWxTdHlsZTpbIiJdLHN0eWxlOlsiZmlsbDogbm9uZSJdLHBhdHRlcm46ImRvdHRlZCIsbG9vazpyLmxvb2t9O2UucHVzaChsKX19Zm9yKGxldCBpIG9mIEpnKXtsZXQgYT17aWQ6aS5pZCxsYWJlbDppLmxhYmVsLGlzR3JvdXA6ITEsc2hhcGU6InJlY3QiLGNzc1N0eWxlczpbIm9wYWNpdHk6IDA7Il0sbG9vazpyLmxvb2t9O3QucHVzaChhKX1uPTA7Zm9yKGxldCBpIG9mIEJFKXtuKys7bGV0IGE9e2lkOkM1KGkuaWQxLGkuaWQyLHtwcmVmaXg6ImlkIixjb3VudGVyOm59KSxzdGFydDppLmlkMSxlbmQ6aS5pZDIsdHlwZToibm9ybWFsIixsYWJlbDppLnRpdGxlLGxhYmVscG9zOiJjIix0aGlja25lc3M6Im5vcm1hbCIsY2xhc3NlczoicmVsYXRpb24iLGFycm93VHlwZVN0YXJ0OnhkZShpLnJlbGF0aW9uLnR5cGUxKSxhcnJvd1R5cGVFbmQ6eGRlKGkucmVsYXRpb24udHlwZTIpLHN0YXJ0TGFiZWxSaWdodDppLnJlbGF0aW9uVGl0bGUxPT09Im5vbmUiPyIiOmkucmVsYXRpb25UaXRsZTEsZW5kTGFiZWxMZWZ0OmkucmVsYXRpb25UaXRsZTI9PT0ibm9uZSI/IiI6aS5yZWxhdGlvblRpdGxlMixhcnJvd2hlYWRTdHlsZToiIixsYWJlbFN0eWxlOlsiZGlzcGxheTogaW5saW5lLWJsb2NrIl0sc3R5bGU6aS5zdHlsZXx8IiIscGF0dGVybjppLnJlbGF0aW9uLmxpbmVUeXBlPT0xPyJkYXNoZWQiOiJzb2xpZCIsbG9vazpyLmxvb2t9O2UucHVzaChhKX1yZXR1cm57bm9kZXM6dCxlZGdlczplLG90aGVyOnt9LGNvbmZpZzpyLGRpcmVjdGlvbjprZGUoKX19LCJnZXREYXRhIiksZTE9e3NldEFjY1RpdGxlOk1yLGdldEFjY1RpdGxlOkJyLGdldEFjY0Rlc2NyaXB0aW9uOnpyLHNldEFjY0Rlc2NyaXB0aW9uOkZyLGdldENvbmZpZzpvKCgpPT5wZSgpLmNsYXNzLCJnZXRDb25maWciKSxhZGRDbGFzczpaZyxiaW5kRnVuY3Rpb25zOkhIZSxjbGVhcjpfSGUsZ2V0Q2xhc3M6TEhlLGdldENsYXNzZXM6REhlLGdldE5vdGVzOlJIZSxhZGRBbm5vdGF0aW9uOklIZSxhZGROb3RlOlBIZSxnZXRSZWxhdGlvbnM6TkhlLGFkZFJlbGF0aW9uOk1IZSxnZXREaXJlY3Rpb246a2RlLHNldERpcmVjdGlvbjpZSGUsYWRkTWVtYmVyOndkZSxhZGRNZW1iZXJzOk9IZSxjbGVhbnVwTGFiZWw6QkhlLGxpbmVUeXBlOldIZSxyZWxhdGlvblR5cGU6RWYsc2V0Q2xpY2tFdmVudDpWSGUsc2V0Q3NzQ2xhc3M6T08sZGVmaW5lQ2xhc3M6RkhlLHNldExpbms6JEhlLGdldFRvb2x0aXA6R0hlLHNldFRvb2x0aXA6ekhlLGxvb2tVcERvbUlkOmJkZSxzZXREaWFncmFtVGl0bGU6Y24sZ2V0RGlhZ3JhbVRpdGxlOkpyLHNldENsYXNzTGFiZWw6QUhlLGFkZE5hbWVzcGFjZTpxSGUsYWRkQ2xhc3Nlc1RvTmFtZXNwYWNlOktIZSxnZXROYW1lc3BhY2U6WEhlLGdldE5hbWVzcGFjZXM6akhlLHNldENzc1N0eWxlOlFIZSxnZXREYXRhOlpIZX19KTt2YXIgSkhlLEZFLEZPPU0oKCk9PnsidXNlIHN0cmljdCI7SkhlPW8odD0+YGcuY2xhc3NHcm91cCB0ZXh0IHsKICBmaWxsOiAke3Qubm9kZUJvcmRlcnx8dC5jbGFzc1RleHR9OwogIHN0cm9rZTogbm9uZTsKICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogIGZvbnQtc2l6ZTogMTBweDsKCiAgLnRpdGxlIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkZXI7CiAgfQoKfQoKLm5vZGVMYWJlbCwgLmVkZ2VMYWJlbCB7CiAgY29sb3I6ICR7dC5jbGFzc1RleHR9Owp9Ci5lZGdlTGFiZWwgLmxhYmVsIHJlY3QgewogIGZpbGw6ICR7dC5tYWluQmtnfTsKfQoubGFiZWwgdGV4dCB7CiAgZmlsbDogJHt0LmNsYXNzVGV4dH07Cn0KCi5sYWJlbEJrZyB7CiAgYmFja2dyb3VuZDogJHt0Lm1haW5Ca2d9Owp9Ci5lZGdlTGFiZWwgLmxhYmVsIHNwYW4gewogIGJhY2tncm91bmQ6ICR7dC5tYWluQmtnfTsKfQoKLmNsYXNzVGl0bGUgewogIGZvbnQtd2VpZ2h0OiBib2xkZXI7Cn0KLm5vZGUgcmVjdCwKICAubm9kZSBjaXJjbGUsCiAgLm5vZGUgZWxsaXBzZSwKICAubm9kZSBwb2x5Z29uLAogIC5ub2RlIHBhdGggewogICAgZmlsbDogJHt0Lm1haW5Ca2d9OwogICAgc3Ryb2tlOiAke3Qubm9kZUJvcmRlcn07CiAgICBzdHJva2Utd2lkdGg6IDFweDsKICB9CgoKLmRpdmlkZXIgewogIHN0cm9rZTogJHt0Lm5vZGVCb3JkZXJ9OwogIHN0cm9rZS13aWR0aDogMTsKfQoKZy5jbGlja2FibGUgewogIGN1cnNvcjogcG9pbnRlcjsKfQoKZy5jbGFzc0dyb3VwIHJlY3QgewogIGZpbGw6ICR7dC5tYWluQmtnfTsKICBzdHJva2U6ICR7dC5ub2RlQm9yZGVyfTsKfQoKZy5jbGFzc0dyb3VwIGxpbmUgewogIHN0cm9rZTogJHt0Lm5vZGVCb3JkZXJ9OwogIHN0cm9rZS13aWR0aDogMTsKfQoKLmNsYXNzTGFiZWwgLmJveCB7CiAgc3Ryb2tlOiBub25lOwogIHN0cm9rZS13aWR0aDogMDsKICBmaWxsOiAke3QubWFpbkJrZ307CiAgb3BhY2l0eTogMC41Owp9CgouY2xhc3NMYWJlbCAubGFiZWwgewogIGZpbGw6ICR7dC5ub2RlQm9yZGVyfTsKICBmb250LXNpemU6IDEwcHg7Cn0KCi5yZWxhdGlvbiB7CiAgc3Ryb2tlOiAke3QubGluZUNvbG9yfTsKICBzdHJva2Utd2lkdGg6IDE7CiAgZmlsbDogbm9uZTsKfQoKLmRhc2hlZC1saW5lewogIHN0cm9rZS1kYXNoYXJyYXk6IDM7Cn0KCi5kb3R0ZWQtbGluZXsKICBzdHJva2UtZGFzaGFycmF5OiAxIDI7Cn0KCiNjb21wb3NpdGlvblN0YXJ0LCAuY29tcG9zaXRpb24gewogIGZpbGw6ICR7dC5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2NvbXBvc2l0aW9uRW5kLCAuY29tcG9zaXRpb24gewogIGZpbGw6ICR7dC5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2RlcGVuZGVuY3lTdGFydCwgLmRlcGVuZGVuY3kgewogIGZpbGw6ICR7dC5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2RlcGVuZGVuY3lTdGFydCwgLmRlcGVuZGVuY3kgewogIGZpbGw6ICR7dC5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2V4dGVuc2lvblN0YXJ0LCAuZXh0ZW5zaW9uIHsKICBmaWxsOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogIHN0cm9rZTogJHt0LmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNleHRlbnNpb25FbmQsIC5leHRlbnNpb24gewogIGZpbGw6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2FnZ3JlZ2F0aW9uU3RhcnQsIC5hZ2dyZWdhdGlvbiB7CiAgZmlsbDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICBzdHJva2U6ICR7dC5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojYWdncmVnYXRpb25FbmQsIC5hZ2dyZWdhdGlvbiB7CiAgZmlsbDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICBzdHJva2U6ICR7dC5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojbG9sbGlwb3BTdGFydCwgLmxvbGxpcG9wIHsKICBmaWxsOiAke3QubWFpbkJrZ30gIWltcG9ydGFudDsKICBzdHJva2U6ICR7dC5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojbG9sbGlwb3BFbmQsIC5sb2xsaXBvcCB7CiAgZmlsbDogJHt0Lm1haW5Ca2d9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKLmVkZ2VUZXJtaW5hbHMgewogIGZvbnQtc2l6ZTogMTFweDsKICBsaW5lLWhlaWdodDogaW5pdGlhbDsKfQoKLmNsYXNzVGl0bGVUZXh0IHsKICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogIGZvbnQtc2l6ZTogMThweDsKICBmaWxsOiAke3QudGV4dENvbG9yfTsKfQpgLCJnZXRTdHlsZXMiKSxGRT1KSGV9KTt2YXIgZVdlLHRXZSxyV2UsekUsek89TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWdCgpO3V0KCk7b3coKTtKdigpO1RUKCk7aHIoKTtlV2U9bygodCxlPSJUQiIpPT57aWYoIXQuZG9jKXJldHVybiBlO2xldCByPWU7Zm9yKGxldCBuIG9mIHQuZG9jKW4uc3RtdD09PSJkaXIiJiYocj1uLnZhbHVlKTtyZXR1cm4gcn0sImdldERpciIpLHRXZT1vKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZGIuZ2V0Q2xhc3NlcygpfSwiZ2V0Q2xhc3NlcyIpLHJXZT1vKGFzeW5jIGZ1bmN0aW9uKHQsZSxyLG4pe1kuaW5mbygiUkVGMDoiKSxZLmluZm8oIkRyYXdpbmcgY2xhc3MgZGlhZ3JhbSAodjMpIixlKTtsZXR7c2VjdXJpdHlMZXZlbDppLHN0YXRlOmEsbGF5b3V0OnN9PXBlKCksbD1uLmRiLmdldERhdGEoKSx1PUFtKGUsaSk7bC50eXBlPW4udHlwZSxsLmxheW91dEFsZ29yaXRobT13VChzKSxsLm5vZGVTcGFjaW5nPWE/Lm5vZGVTcGFjaW5nfHw1MCxsLnJhbmtTcGFjaW5nPWE/LnJhbmtTcGFjaW5nfHw1MCxsLm1hcmtlcnM9WyJhZ2dyZWdhdGlvbiIsImV4dGVuc2lvbiIsImNvbXBvc2l0aW9uIiwiZGVwZW5kZW5jeSIsImxvbGxpcG9wIl0sbC5kaWFncmFtSWQ9ZSxhd2FpdCBRbShsLHUpO2xldCBoPTg7VXQuaW5zZXJ0VGl0bGUodSwiY2xhc3NEaWFncmFtVGl0bGVUZXh0IixhPy50aXRsZVRvcE1hcmdpbj8/MjUsbi5kYi5nZXREaWFncmFtVGl0bGUoKSksWm0odSxoLCJjbGFzc0RpYWdyYW0iLGE/LnVzZU1heFdpZHRoPz8hMCl9LCJkcmF3IiksekU9e2dldENsYXNzZXM6dFdlLGRyYXc6cldlLGdldERpcjplV2V9fSk7dmFyIEVkZT17fTt2cihFZGUse2RpYWdyYW06KCk9Pm5XZX0pO3ZhciBuV2UsU2RlPU0oKCk9PnsidXNlIHN0cmljdCI7TU8oKTtCTygpO0ZPKCk7ek8oKTtuV2U9e3BhcnNlcjpPRSxkYjplMSxyZW5kZXJlcjp6RSxzdHlsZXM6RkUsaW5pdDpvKHQ9Pnt0LmNsYXNzfHwodC5jbGFzcz17fSksdC5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPXQuYXJyb3dNYXJrZXJBYnNvbHV0ZSxlMS5jbGVhcigpfSwiaW5pdCIpfX0pO3ZhciBfZGU9e307dnIoX2RlLHtkaWFncmFtOigpPT5vV2V9KTt2YXIgb1dlLExkZT1NKCgpPT57InVzZSBzdHJpY3QiO01PKCk7Qk8oKTtGTygpO3pPKCk7b1dlPXtwYXJzZXI6T0UsZGI6ZTEscmVuZGVyZXI6ekUsc3R5bGVzOkZFLGluaXQ6byh0PT57dC5jbGFzc3x8KHQuY2xhc3M9e30pLHQuY2xhc3MuYXJyb3dNYXJrZXJBYnNvbHV0ZT10LmFycm93TWFya2VyQWJzb2x1dGUsZTEuY2xlYXIoKX0sImluaXQiKX19KTt2YXIgR08sR0UsJE89TSgoKT0+eyJ1c2Ugc3RyaWN0IjtHTz1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oRixCLEcseil7Zm9yKEc9R3x8e30sej1GLmxlbmd0aDt6LS07R1tGW3pdXT1CKTtyZXR1cm4gR30sIm8iKSxlPVsxLDJdLHI9WzEsM10sbj1bMSw0XSxpPVsyLDRdLGE9WzEsOV0scz1bMSwxMV0sbD1bMSwxNl0sdT1bMSwxN10saD1bMSwxOF0sZj1bMSwxOV0sZD1bMSwzMl0scD1bMSwyMF0sbT1bMSwyMV0sZz1bMSwyMl0seT1bMSwyM10sdj1bMSwyNF0seD1bMSwyNl0sYj1bMSwyN10sdz1bMSwyOF0sXz1bMSwyOV0sVD1bMSwzMF0sRT1bMSwzMV0sTD1bMSwzNF0sUz1bMSwzNV0sQT1bMSwzNl0sST1bMSwzN10sRD1bMSwzM10saz1bMSw0LDUsMTYsMTcsMTksMjEsMjIsMjQsMjUsMjYsMjcsMjgsMjksMzMsMzUsMzcsMzgsNDIsNDUsNDgsNDksNTAsNTEsNTRdLFI9WzEsNCw1LDE0LDE1LDE2LDE3LDE5LDIxLDIyLDI0LDI1LDI2LDI3LDI4LDI5LDMzLDM1LDM3LDM4LDQyLDQ1LDQ4LDQ5LDUwLDUxLDU0XSxDPVs0LDUsMTYsMTcsMTksMjEsMjIsMjQsMjUsMjYsMjcsMjgsMjksMzMsMzUsMzcsMzgsNDIsNDUsNDgsNDksNTAsNTEsNTRdLE89e3RyYWNlOm8oZnVuY3Rpb24oKXt9LCJ0cmFjZSIpLHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsU1BBQ0U6NCxOTDo1LFNEOjYsZG9jdW1lbnQ6NyxsaW5lOjgsc3RhdGVtZW50OjksY2xhc3NEZWZTdGF0ZW1lbnQ6MTAsc3R5bGVTdGF0ZW1lbnQ6MTEsY3NzQ2xhc3NTdGF0ZW1lbnQ6MTIsaWRTdGF0ZW1lbnQ6MTMsREVTQ1I6MTQsIi0tPiI6MTUsSElERV9FTVBUWToxNixzY2FsZToxNyxXSURUSDoxOCxDT01QT1NJVF9TVEFURToxOSxTVFJVQ1RfU1RBUlQ6MjAsU1RSVUNUX1NUT1A6MjEsU1RBVEVfREVTQ1I6MjIsQVM6MjMsSUQ6MjQsRk9SSzoyNSxKT0lOOjI2LENIT0lDRToyNyxDT05DVVJSRU5UOjI4LG5vdGU6Mjksbm90ZVBvc2l0aW9uOjMwLE5PVEVfVEVYVDozMSxkaXJlY3Rpb246MzIsYWNjX3RpdGxlOjMzLGFjY190aXRsZV92YWx1ZTozNCxhY2NfZGVzY3I6MzUsYWNjX2Rlc2NyX3ZhbHVlOjM2LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MzcsY2xhc3NEZWY6MzgsQ0xBU1NERUZfSUQ6MzksQ0xBU1NERUZfU1RZTEVPUFRTOjQwLERFRkFVTFQ6NDEsc3R5bGU6NDIsU1RZTEVfSURTOjQzLFNUWUxFREVGX1NUWUxFT1BUUzo0NCxjbGFzczo0NSxDTEFTU0VOVElUWV9JRFM6NDYsU1RZTEVDTEFTUzo0NyxkaXJlY3Rpb25fdGI6NDgsZGlyZWN0aW9uX2J0OjQ5LGRpcmVjdGlvbl9ybDo1MCxkaXJlY3Rpb25fbHI6NTEsZW9sOjUyLCI7Ijo1MyxFREdFX1NUQVRFOjU0LFNUWUxFX1NFUEFSQVRPUjo1NSxsZWZ0X29mOjU2LHJpZ2h0X29mOjU3LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJTUEFDRSIsNToiTkwiLDY6IlNEIiwxNDoiREVTQ1IiLDE1OiItLT4iLDE2OiJISURFX0VNUFRZIiwxNzoic2NhbGUiLDE4OiJXSURUSCIsMTk6IkNPTVBPU0lUX1NUQVRFIiwyMDoiU1RSVUNUX1NUQVJUIiwyMToiU1RSVUNUX1NUT1AiLDIyOiJTVEFURV9ERVNDUiIsMjM6IkFTIiwyNDoiSUQiLDI1OiJGT1JLIiwyNjoiSk9JTiIsMjc6IkNIT0lDRSIsMjg6IkNPTkNVUlJFTlQiLDI5OiJub3RlIiwzMToiTk9URV9URVhUIiwzMzoiYWNjX3RpdGxlIiwzNDoiYWNjX3RpdGxlX3ZhbHVlIiwzNToiYWNjX2Rlc2NyIiwzNjoiYWNjX2Rlc2NyX3ZhbHVlIiwzNzoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMzg6ImNsYXNzRGVmIiwzOToiQ0xBU1NERUZfSUQiLDQwOiJDTEFTU0RFRl9TVFlMRU9QVFMiLDQxOiJERUZBVUxUIiw0Mjoic3R5bGUiLDQzOiJTVFlMRV9JRFMiLDQ0OiJTVFlMRURFRl9TVFlMRU9QVFMiLDQ1OiJjbGFzcyIsNDY6IkNMQVNTRU5USVRZX0lEUyIsNDc6IlNUWUxFQ0xBU1MiLDQ4OiJkaXJlY3Rpb25fdGIiLDQ5OiJkaXJlY3Rpb25fYnQiLDUwOiJkaXJlY3Rpb25fcmwiLDUxOiJkaXJlY3Rpb25fbHIiLDUzOiI7Iiw1NDoiRURHRV9TVEFURSIsNTU6IlNUWUxFX1NFUEFSQVRPUiIsNTY6ImxlZnRfb2YiLDU3OiJyaWdodF9vZiJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywyXSxbMywyXSxbNywwXSxbNywyXSxbOCwyXSxbOCwxXSxbOCwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwyXSxbOSwzXSxbOSw0XSxbOSwxXSxbOSwyXSxbOSwxXSxbOSw0XSxbOSwzXSxbOSw2XSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSw0XSxbOSw0XSxbOSwxXSxbOSwyXSxbOSwyXSxbOSwxXSxbMTAsM10sWzEwLDNdLFsxMSwzXSxbMTIsM10sWzMyLDFdLFszMiwxXSxbMzIsMV0sWzMyLDFdLFs1MiwxXSxbNTIsMV0sWzEzLDFdLFsxMywxXSxbMTMsM10sWzEzLDNdLFszMCwxXSxbMzAsMV1dLHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihCLEcseixXLFosaixvZSl7dmFyIEs9ai5sZW5ndGgtMTtzd2l0Y2goWil7Y2FzZSAzOnJldHVybiBXLnNldFJvb3REb2MoaltLXSksaltLXTticmVhaztjYXNlIDQ6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNTpqW0tdIT0ibmwiJiYoaltLLTFdLnB1c2goaltLXSksdGhpcy4kPWpbSy0xXSk7YnJlYWs7Y2FzZSA2OmNhc2UgNzp0aGlzLiQ9altLXTticmVhaztjYXNlIDg6dGhpcy4kPSJubCI7YnJlYWs7Y2FzZSAxMjp0aGlzLiQ9altLXTticmVhaztjYXNlIDEzOmxldCBxPWpbSy0xXTtxLmRlc2NyaXB0aW9uPVcudHJpbUNvbG9uKGpbS10pLHRoaXMuJD1xO2JyZWFrO2Nhc2UgMTQ6dGhpcy4kPXtzdG10OiJyZWxhdGlvbiIsc3RhdGUxOmpbSy0yXSxzdGF0ZTI6altLXX07YnJlYWs7Y2FzZSAxNTpsZXQgUT1XLnRyaW1Db2xvbihqW0tdKTt0aGlzLiQ9e3N0bXQ6InJlbGF0aW9uIixzdGF0ZTE6altLLTNdLHN0YXRlMjpqW0stMV0sZGVzY3JpcHRpb246UX07YnJlYWs7Y2FzZSAxOTp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpqW0stM10sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiIsZG9jOmpbSy0xXX07YnJlYWs7Y2FzZSAyMDp2YXIgZWU9altLXSxKPWpbSy0yXS50cmltKCk7aWYoaltLXS5tYXRjaCgiOiIpKXt2YXIgSD1qW0tdLnNwbGl0KCI6Iik7ZWU9SFswXSxKPVtKLEhbMV1dfXRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmVlLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOkp9O2JyZWFrO2Nhc2UgMjE6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6altLLTNdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOmpbSy01XSxkb2M6altLLTFdfTticmVhaztjYXNlIDIyOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmpbS10sdHlwZToiZm9yayJ9O2JyZWFrO2Nhc2UgMjM6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6altLXSx0eXBlOiJqb2luIn07YnJlYWs7Y2FzZSAyNDp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpqW0tdLHR5cGU6ImNob2ljZSJ9O2JyZWFrO2Nhc2UgMjU6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6Vy5nZXREaXZpZGVySWQoKSx0eXBlOiJkaXZpZGVyIn07YnJlYWs7Y2FzZSAyNjp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpqW0stMV0udHJpbSgpLG5vdGU6e3Bvc2l0aW9uOmpbSy0yXS50cmltKCksdGV4dDpqW0tdLnRyaW0oKX19O2JyZWFrO2Nhc2UgMjk6dGhpcy4kPWpbS10udHJpbSgpLFcuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDMwOmNhc2UgMzE6dGhpcy4kPWpbS10udHJpbSgpLFcuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDMyOmNhc2UgMzM6dGhpcy4kPXtzdG10OiJjbGFzc0RlZiIsaWQ6altLLTFdLnRyaW0oKSxjbGFzc2VzOmpbS10udHJpbSgpfTticmVhaztjYXNlIDM0OnRoaXMuJD17c3RtdDoic3R5bGUiLGlkOmpbSy0xXS50cmltKCksc3R5bGVDbGFzczpqW0tdLnRyaW0oKX07YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9e3N0bXQ6ImFwcGx5Q2xhc3MiLGlkOmpbSy0xXS50cmltKCksc3R5bGVDbGFzczpqW0tdLnRyaW0oKX07YnJlYWs7Y2FzZSAzNjpXLnNldERpcmVjdGlvbigiVEIiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlRCIn07YnJlYWs7Y2FzZSAzNzpXLnNldERpcmVjdGlvbigiQlQiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IkJUIn07YnJlYWs7Y2FzZSAzODpXLnNldERpcmVjdGlvbigiUkwiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlJMIn07YnJlYWs7Y2FzZSAzOTpXLnNldERpcmVjdGlvbigiTFIiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IkxSIn07YnJlYWs7Y2FzZSA0MjpjYXNlIDQzOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmpbS10udHJpbSgpLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifTticmVhaztjYXNlIDQ0OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmpbSy0yXS50cmltKCksY2xhc3NlczpbaltLXS50cmltKCldLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifTticmVhaztjYXNlIDQ1OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmpbSy0yXS50cmltKCksY2xhc3NlczpbaltLXS50cmltKCldLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OmUsNTpyLDY6bn0sezE6WzNdfSx7Mzo1LDQ6ZSw1OnIsNjpufSx7Mzo2LDQ6ZSw1OnIsNjpufSx0KFsxLDQsNSwxNiwxNywxOSwyMiwyNCwyNSwyNiwyNywyOCwyOSwzMywzNSwzNywzOCw0Miw0NSw0OCw0OSw1MCw1MSw1NF0saSx7Nzo3fSksezE6WzIsMV19LHsxOlsyLDJdfSx7MTpbMiwzXSw0OmEsNTpzLDg6OCw5OjEwLDEwOjEyLDExOjEzLDEyOjE0LDEzOjE1LDE2OmwsMTc6dSwxOTpoLDIyOmYsMjQ6ZCwyNTpwLDI2Om0sMjc6ZywyODp5LDI5OnYsMzI6MjUsMzM6eCwzNTpiLDM3OncsMzg6Xyw0MjpULDQ1OkUsNDg6TCw0OTpTLDUwOkEsNTE6SSw1NDpEfSx0KGssWzIsNV0pLHs5OjM4LDEwOjEyLDExOjEzLDEyOjE0LDEzOjE1LDE2OmwsMTc6dSwxOTpoLDIyOmYsMjQ6ZCwyNTpwLDI2Om0sMjc6ZywyODp5LDI5OnYsMzI6MjUsMzM6eCwzNTpiLDM3OncsMzg6Xyw0MjpULDQ1OkUsNDg6TCw0OTpTLDUwOkEsNTE6SSw1NDpEfSx0KGssWzIsN10pLHQoayxbMiw4XSksdChrLFsyLDldKSx0KGssWzIsMTBdKSx0KGssWzIsMTFdKSx0KGssWzIsMTJdLHsxNDpbMSwzOV0sMTU6WzEsNDBdfSksdChrLFsyLDE2XSksezE4OlsxLDQxXX0sdChrLFsyLDE4XSx7MjA6WzEsNDJdfSksezIzOlsxLDQzXX0sdChrLFsyLDIyXSksdChrLFsyLDIzXSksdChrLFsyLDI0XSksdChrLFsyLDI1XSksezMwOjQ0LDMxOlsxLDQ1XSw1NjpbMSw0Nl0sNTc6WzEsNDddfSx0KGssWzIsMjhdKSx7MzQ6WzEsNDhdfSx7MzY6WzEsNDldfSx0KGssWzIsMzFdKSx7Mzk6WzEsNTBdLDQxOlsxLDUxXX0sezQzOlsxLDUyXX0sezQ2OlsxLDUzXX0sdChSLFsyLDQyXSx7NTU6WzEsNTRdfSksdChSLFsyLDQzXSx7NTU6WzEsNTVdfSksdChrLFsyLDM2XSksdChrLFsyLDM3XSksdChrLFsyLDM4XSksdChrLFsyLDM5XSksdChrLFsyLDZdKSx0KGssWzIsMTNdKSx7MTM6NTYsMjQ6ZCw1NDpEfSx0KGssWzIsMTddKSx0KEMsaSx7Nzo1N30pLHsyNDpbMSw1OF19LHsyNDpbMSw1OV19LHsyMzpbMSw2MF19LHsyNDpbMiw0Nl19LHsyNDpbMiw0N119LHQoayxbMiwyOV0pLHQoayxbMiwzMF0pLHs0MDpbMSw2MV19LHs0MDpbMSw2Ml19LHs0NDpbMSw2M119LHs0NzpbMSw2NF19LHsyNDpbMSw2NV19LHsyNDpbMSw2Nl19LHQoayxbMiwxNF0sezE0OlsxLDY3XX0pLHs0OmEsNTpzLDg6OCw5OjEwLDEwOjEyLDExOjEzLDEyOjE0LDEzOjE1LDE2OmwsMTc6dSwxOTpoLDIxOlsxLDY4XSwyMjpmLDI0OmQsMjU6cCwyNjptLDI3OmcsMjg6eSwyOTp2LDMyOjI1LDMzOngsMzU6YiwzNzp3LDM4Ol8sNDI6VCw0NTpFLDQ4OkwsNDk6Uyw1MDpBLDUxOkksNTQ6RH0sdChrLFsyLDIwXSx7MjA6WzEsNjldfSksezMxOlsxLDcwXX0sezI0OlsxLDcxXX0sdChrLFsyLDMyXSksdChrLFsyLDMzXSksdChrLFsyLDM0XSksdChrLFsyLDM1XSksdChSLFsyLDQ0XSksdChSLFsyLDQ1XSksdChrLFsyLDE1XSksdChrLFsyLDE5XSksdChDLGksezc6NzJ9KSx0KGssWzIsMjZdKSx0KGssWzIsMjddKSx7NDphLDU6cyw4OjgsOToxMCwxMDoxMiwxMToxMywxMjoxNCwxMzoxNSwxNjpsLDE3OnUsMTk6aCwyMTpbMSw3M10sMjI6ZiwyNDpkLDI1OnAsMjY6bSwyNzpnLDI4OnksMjk6diwzMjoyNSwzMzp4LDM1OmIsMzc6dywzODpfLDQyOlQsNDU6RSw0ODpMLDQ5OlMsNTA6QSw1MTpJLDU0OkR9LHQoayxbMiwyMV0pXSxkZWZhdWx0QWN0aW9uczp7NTpbMiwxXSw2OlsyLDJdLDQ2OlsyLDQ2XSw0NzpbMiw0N119LHBhcnNlRXJyb3I6byhmdW5jdGlvbihCLEcpe2lmKEcucmVjb3ZlcmFibGUpdGhpcy50cmFjZShCKTtlbHNle3ZhciB6PW5ldyBFcnJvcihCKTt0aHJvdyB6Lmhhc2g9Ryx6fX0sInBhcnNlRXJyb3IiKSxwYXJzZTpvKGZ1bmN0aW9uKEIpe3ZhciBHPXRoaXMsej1bMF0sVz1bXSxaPVtudWxsXSxqPVtdLG9lPXRoaXMudGFibGUsSz0iIixlZT0wLEo9MCxIPTAscT0yLFE9MSxhZT1qLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHVlPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksY2U9e3l5Ont9fTtmb3IodmFyIHRlIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksdGUpJiYoY2UueXlbdGVdPXRoaXMueXlbdGVdKTt1ZS5zZXRJbnB1dChCLGNlLnl5KSxjZS55eS5sZXhlcj11ZSxjZS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgdWUueXlsbG9jPiJ1IiYmKHVlLnl5bGxvYz17fSk7dmFyIE5lPXVlLnl5bGxvYztqLnB1c2goTmUpO3ZhciBzZT11ZS5vcHRpb25zJiZ1ZS5vcHRpb25zLnJhbmdlczt0eXBlb2YgY2UueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9Y2UueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24ga2UoVGUpe3oubGVuZ3RoPXoubGVuZ3RoLTIqVGUsWi5sZW5ndGg9Wi5sZW5ndGgtVGUsai5sZW5ndGg9ai5sZW5ndGgtVGV9byhrZSwicG9wU3RhY2siKTtmdW5jdGlvbiBSZSgpe3ZhciBUZTtyZXR1cm4gVGU9Vy5wb3AoKXx8dWUubGV4KCl8fFEsdHlwZW9mIFRlIT0ibnVtYmVyIiYmKFRlIGluc3RhbmNlb2YgQXJyYXkmJihXPVRlLFRlPVcucG9wKCkpLFRlPUcuc3ltYm9sc19bVGVdfHxUZSksVGV9byhSZSwibGV4Iik7Zm9yKHZhciBDZSxQZSxJZSwkZSx5ZSxYLGZlPXt9LGhlLGdlLG5lLHZlOzspe2lmKEllPXpbei5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tJZV0/JGU9dGhpcy5kZWZhdWx0QWN0aW9uc1tJZV06KChDZT09PW51bGx8fHR5cGVvZiBDZT4idSIpJiYoQ2U9UmUoKSksJGU9b2VbSWVdJiZvZVtJZV1bQ2VdKSx0eXBlb2YgJGU+InUifHwhJGUubGVuZ3RofHwhJGVbMF0pe3ZhciBVPSIiO3ZlPVtdO2ZvcihoZSBpbiBvZVtJZV0pdGhpcy50ZXJtaW5hbHNfW2hlXSYmaGU+cSYmdmUucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW2hlXSsiJyIpO3VlLnNob3dQb3NpdGlvbj9VPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGVlKzEpK2A6CmArdWUuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCt2ZS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW0NlXXx8Q2UpKyInIjpVPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGVlKzEpKyI6IFVuZXhwZWN0ZWQgIisoQ2U9PVE/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bQ2VdfHxDZSkrIiciKSx0aGlzLnBhcnNlRXJyb3IoVSx7dGV4dDp1ZS5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bQ2VdfHxDZSxsaW5lOnVlLnl5bGluZW5vLGxvYzpOZSxleHBlY3RlZDp2ZX0pfWlmKCRlWzBdaW5zdGFuY2VvZiBBcnJheSYmJGUubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitJZSsiLCB0b2tlbjogIitDZSk7c3dpdGNoKCRlWzBdKXtjYXNlIDE6ei5wdXNoKENlKSxaLnB1c2godWUueXl0ZXh0KSxqLnB1c2godWUueXlsbG9jKSx6LnB1c2goJGVbMV0pLENlPW51bGwsUGU/KENlPVBlLFBlPW51bGwpOihKPXVlLnl5bGVuZyxLPXVlLnl5dGV4dCxlZT11ZS55eWxpbmVubyxOZT11ZS55eWxsb2MsSD4wJiZILS0pO2JyZWFrO2Nhc2UgMjppZihnZT10aGlzLnByb2R1Y3Rpb25zX1skZVsxXV1bMV0sZmUuJD1aW1oubGVuZ3RoLWdlXSxmZS5fJD17Zmlyc3RfbGluZTpqW2oubGVuZ3RoLShnZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmpbai5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpqW2oubGVuZ3RoLShnZXx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpqW2oubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxzZSYmKGZlLl8kLnJhbmdlPVtqW2oubGVuZ3RoLShnZXx8MSldLnJhbmdlWzBdLGpbai5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxYPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShmZSxbSyxKLGVlLGNlLnl5LCRlWzFdLFosal0uY29uY2F0KGFlKSksdHlwZW9mIFg8InUiKXJldHVybiBYO2dlJiYoej16LnNsaWNlKDAsLTEqZ2UqMiksWj1aLnNsaWNlKDAsLTEqZ2UpLGo9ai5zbGljZSgwLC0xKmdlKSksei5wdXNoKHRoaXMucHJvZHVjdGlvbnNfWyRlWzFdXVswXSksWi5wdXNoKGZlLiQpLGoucHVzaChmZS5fJCksbmU9b2Vbelt6Lmxlbmd0aC0yXV1belt6Lmxlbmd0aC0xXV0sei5wdXNoKG5lKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfSwicGFyc2UiKX0sTj1mdW5jdGlvbigpe3ZhciBGPXtFT0Y6MSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oRyx6KXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKEcseik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoRyl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbihCLEcpe3JldHVybiB0aGlzLnl5PUd8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PUIsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LCJzZXRJbnB1dCIpLGlucHV0Om8oZnVuY3Rpb24oKXt2YXIgQj10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9Qix0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9Qix0aGlzLm1hdGNoZWQrPUI7dmFyIEc9Qi5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIEc/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLEJ9LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24oQil7dmFyIEc9Qi5sZW5ndGgsej1CLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9Qit0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtRyksdGhpcy5vZmZzZXQtPUc7dmFyIFc9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksei5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPXoubGVuZ3RoLTEpO3ZhciBaPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp6Pyh6Lmxlbmd0aD09PVcubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStXW1cubGVuZ3RoLXoubGVuZ3RoXS5sZW5ndGgtelswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLUd9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bWlswXSxaWzBdK3RoaXMueXlsZW5nLUddKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sInVucHV0IiksbW9yZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30sIm1vcmUiKSxyZWplY3Q6byhmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sInJlamVjdCIpLGxlc3M6byhmdW5jdGlvbihCKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoQikpfSwibGVzcyIpLHBhc3RJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIEI9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihCLmxlbmd0aD4yMD8iLi4uIjoiIikrQi5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sInBhc3RJbnB1dCIpLHVwY29taW5nSW5wdXQ6byhmdW5jdGlvbigpe3ZhciBCPXRoaXMubWF0Y2g7cmV0dXJuIEIubGVuZ3RoPDIwJiYoQis9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtQi5sZW5ndGgpKSwoQi5zdWJzdHIoMCwyMCkrKEIubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LCJ1cGNvbWluZ0lucHV0Iiksc2hvd1Bvc2l0aW9uOm8oZnVuY3Rpb24oKXt2YXIgQj10aGlzLnBhc3RJbnB1dCgpLEc9bmV3IEFycmF5KEIubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gQit0aGlzLnVwY29taW5nSW5wdXQoKStgCmArRysiXiJ9LCJzaG93UG9zaXRpb24iKSx0ZXN0X21hdGNoOm8oZnVuY3Rpb24oQixHKXt2YXIgeixXLFo7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKFo9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoWi55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxXPUJbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLFcmJih0aGlzLnl5bGluZW5vKz1XLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOlc/V1tXLmxlbmd0aC0xXS5sZW5ndGgtV1tXLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK0JbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9QlswXSx0aGlzLm1hdGNoKz1CWzBdLHRoaXMubWF0Y2hlcz1CLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKEJbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPUJbMF0sej10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxHLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLHopcmV0dXJuIHo7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGogaW4gWil0aGlzW2pdPVpbal07cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIEIsRyx6LFc7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgWj10aGlzLl9jdXJyZW50UnVsZXMoKSxqPTA7ajxaLmxlbmd0aDtqKyspaWYoej10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW1pbal1dKSx6JiYoIUd8fHpbMF0ubGVuZ3RoPkdbMF0ubGVuZ3RoKSl7aWYoRz16LFc9aix0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihCPXRoaXMudGVzdF9tYXRjaCh6LFpbal0pLEIhPT0hMSlyZXR1cm4gQjtpZih0aGlzLl9iYWNrdHJhY2spe0c9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gRz8oQj10aGlzLnRlc3RfbWF0Y2goRyxaW1ddKSxCIT09ITE/QjohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBHPXRoaXMubmV4dCgpO3JldHVybiBHfHx0aGlzLmxleCgpfSwibGV4IiksYmVnaW46byhmdW5jdGlvbihHKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goRyl9LCJiZWdpbiIpLHBvcFN0YXRlOm8oZnVuY3Rpb24oKXt2YXIgRz10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBHPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24oRyl7cmV0dXJuIEc9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhHfHwwKSxHPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbR106IklOSVRJQUwifSwidG9wU3RhdGUiKSxwdXNoU3RhdGU6byhmdW5jdGlvbihHKXt0aGlzLmJlZ2luKEcpfSwicHVzaFN0YXRlIiksc3RhdGVTdGFja1NpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sInN0YXRlU3RhY2tTaXplIiksb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oRyx6LFcsWil7dmFyIGo9Wjtzd2l0Y2goVyl7Y2FzZSAwOnJldHVybiA0MTtjYXNlIDE6cmV0dXJuIDQ4O2Nhc2UgMjpyZXR1cm4gNDk7Y2FzZSAzOnJldHVybiA1MDtjYXNlIDQ6cmV0dXJuIDUxO2Nhc2UgNTpicmVhaztjYXNlIDY6YnJlYWs7Y2FzZSA3OnJldHVybiA1O2Nhc2UgODpicmVhaztjYXNlIDk6YnJlYWs7Y2FzZSAxMDpicmVhaztjYXNlIDExOmJyZWFrO2Nhc2UgMTI6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJTQ0FMRSIpLDE3O2JyZWFrO2Nhc2UgMTM6cmV0dXJuIDE4O2Nhc2UgMTQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTU6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDMzO2JyZWFrO2Nhc2UgMTY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjticmVhaztjYXNlIDE3OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzNTticmVhaztjYXNlIDE4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7YnJlYWs7Y2FzZSAxOTp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAyMDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMTpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAyMjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIkNMQVNTREVGIiksMzg7YnJlYWs7Y2FzZSAyMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJDTEFTU0RFRklEIiksIkRFRkFVTFRfQ0xBU1NERUZfSUQiO2JyZWFrO2Nhc2UgMjQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiQ0xBU1NERUZJRCIpLDM5O2JyZWFrO2Nhc2UgMjU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0MDticmVhaztjYXNlIDI2OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiQ0xBU1MiKSw0NTticmVhaztjYXNlIDI3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkNMQVNTX1NUWUxFIiksNDY7YnJlYWs7Y2FzZSAyODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQ3O2JyZWFrO2Nhc2UgMjk6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJTVFlMRSIpLDQyO2JyZWFrO2Nhc2UgMzA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiU1RZTEVERUZfU1RZTEVTIiksNDM7YnJlYWs7Y2FzZSAzMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQ0O2JyZWFrO2Nhc2UgMzI6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJTQ0FMRSIpLDE3O2JyZWFrO2Nhc2UgMzM6cmV0dXJuIDE4O2Nhc2UgMzQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzU6dGhpcy5wdXNoU3RhdGUoIlNUQVRFIik7YnJlYWs7Y2FzZSAzNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHoueXl0ZXh0PXoueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyNTticmVhaztjYXNlIDM3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksei55eXRleHQ9ei55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDI2O2JyZWFrO2Nhc2UgMzg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx6Lnl5dGV4dD16Lnl5dGV4dC5zbGljZSgwLC0xMCkudHJpbSgpLDI3O2JyZWFrO2Nhc2UgMzk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx6Lnl5dGV4dD16Lnl5dGV4dC5zbGljZSgwLC04KS50cmltKCksMjU7YnJlYWs7Y2FzZSA0MDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHoueXl0ZXh0PXoueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyNjticmVhaztjYXNlIDQxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksei55eXRleHQ9ei55eXRleHQuc2xpY2UoMCwtMTApLnRyaW0oKSwyNzticmVhaztjYXNlIDQyOnJldHVybiA0ODtjYXNlIDQzOnJldHVybiA0OTtjYXNlIDQ0OnJldHVybiA1MDtjYXNlIDQ1OnJldHVybiA1MTtjYXNlIDQ2OnRoaXMucHVzaFN0YXRlKCJTVEFURV9TVFJJTkciKTticmVhaztjYXNlIDQ3OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiU1RBVEVfSUQiKSwiQVMiO2JyZWFrO2Nhc2UgNDg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiSUQiO2JyZWFrO2Nhc2UgNDk6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNTA6cmV0dXJuIlNUQVRFX0RFU0NSIjtjYXNlIDUxOnJldHVybiAxOTtjYXNlIDUyOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDUzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoInN0cnVjdCIpLDIwO2JyZWFrO2Nhc2UgNTQ6YnJlYWs7Y2FzZSA1NTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDIxO2JyZWFrO2Nhc2UgNTY6YnJlYWs7Y2FzZSA1NzpyZXR1cm4gdGhpcy5iZWdpbigiTk9URSIpLDI5O2JyZWFrO2Nhc2UgNTg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiTk9URV9JRCIpLDU2O2JyZWFrO2Nhc2UgNTk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiTk9URV9JRCIpLDU3O2JyZWFrO2Nhc2UgNjA6dGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJGTE9BVElOR19OT1RFIik7YnJlYWs7Y2FzZSA2MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJGTE9BVElOR19OT1RFX0lEIiksIkFTIjticmVhaztjYXNlIDYyOmJyZWFrO2Nhc2UgNjM6cmV0dXJuIk5PVEVfVEVYVCI7Y2FzZSA2NDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJJRCI7YnJlYWs7Y2FzZSA2NTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJOT1RFX1RFWFQiKSwyNDticmVhaztjYXNlIDY2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksei55eXRleHQ9ei55eXRleHQuc3Vic3RyKDIpLnRyaW0oKSwzMTticmVhaztjYXNlIDY3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksei55eXRleHQ9ei55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDMxO2JyZWFrO2Nhc2UgNjg6cmV0dXJuIDY7Y2FzZSA2OTpyZXR1cm4gNjtjYXNlIDcwOnJldHVybiAxNjtjYXNlIDcxOnJldHVybiA1NDtjYXNlIDcyOnJldHVybiAyNDtjYXNlIDczOnJldHVybiB6Lnl5dGV4dD16Lnl5dGV4dC50cmltKCksMTQ7YnJlYWs7Y2FzZSA3NDpyZXR1cm4gMTU7Y2FzZSA3NTpyZXR1cm4gMjg7Y2FzZSA3NjpyZXR1cm4gNTU7Y2FzZSA3NzpyZXR1cm4gNTtjYXNlIDc4OnJldHVybiJJTlZBTElEIn19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzpkZWZhdWx0XGIpL2ksL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS9pLC9eKD86JSUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86W1xuXSspL2ksL14oPzpbXHNdKykvaSwvXig/OigoPyFcbilccykrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OiVbXlxuXSopL2ksL14oPzpzY2FsZVxzKykvaSwvXig/OlxkKykvaSwvXig/OlxzK3dpZHRoXGIpL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OmNsYXNzRGVmXHMrKS9pLC9eKD86REVGQVVMVFxzKykvaSwvXig/Olx3K1xzKykvaSwvXig/OlteXG5dKikvaSwvXig/OmNsYXNzXHMrKS9pLC9eKD86KFx3KykrKCgsXHMqXHcrKSopKS9pLC9eKD86W15cbl0qKS9pLC9eKD86c3R5bGVccyspL2ksL14oPzpbXHcsXStccyspL2ksL14oPzpbXlxuXSopL2ksL14oPzpzY2FsZVxzKykvaSwvXig/OlxkKykvaSwvXig/OlxzK3dpZHRoXGIpL2ksL14oPzpzdGF0ZVxzKykvaSwvXig/Oi4qPDxmb3JrPj4pL2ksL14oPzouKjw8am9pbj4+KS9pLC9eKD86Lio8PGNob2ljZT4+KS9pLC9eKD86LipcW1xbZm9ya1xdXF0pL2ksL14oPzouKlxbXFtqb2luXF1cXSkvaSwvXig/Oi4qXFtcW2Nob2ljZVxdXF0pL2ksL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS9pLC9eKD86WyJdKS9pLC9eKD86XHMqYXNccyspL2ksL14oPzpbXlxuXHtdKikvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86W15cblxzXHtdKykvaSwvXig/OlxuKS9pLC9eKD86XHspL2ksL14oPzolJSg/IVx7KVteXG5dKikvaSwvXig/Olx9KS9pLC9eKD86W1xuXSkvaSwvXig/Om5vdGVccyspL2ksL14oPzpsZWZ0IG9mXGIpL2ksL14oPzpyaWdodCBvZlxiKS9pLC9eKD86IikvaSwvXig/OlxzKmFzXHMqKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXlxuXSopL2ksL14oPzpccypbXjpcblxzXC1dKykvaSwvXig/OlxzKjpbXjpcbjtdKykvaSwvXig/Oltcc1xTXSo/ZW5kIG5vdGVcYikvaSwvXig/OnN0YXRlRGlhZ3JhbVxzKykvaSwvXig/OnN0YXRlRGlhZ3JhbS12MlxzKykvaSwvXig/OmhpZGUgZW1wdHkgZGVzY3JpcHRpb25cYikvaSwvXig/OlxbXCpcXSkvaSwvXig/OlteOlxuXHNcLVx7XSspL2ksL14oPzpccyo6W146XG47XSspL2ksL14oPzotLT4pL2ksL14oPzotLSkvaSwvXig/Ojo6OikvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOntMSU5FOntydWxlczpbOSwxMF0saW5jbHVzaXZlOiExfSxzdHJ1Y3Q6e3J1bGVzOls5LDEwLDIyLDI2LDI5LDM1LDQyLDQzLDQ0LDQ1LDU0LDU1LDU2LDU3LDcxLDcyLDczLDc0LDc1XSxpbmNsdXNpdmU6ITF9LEZMT0FUSU5HX05PVEVfSUQ6e3J1bGVzOls2NF0saW5jbHVzaXZlOiExfSxGTE9BVElOR19OT1RFOntydWxlczpbNjEsNjIsNjNdLGluY2x1c2l2ZTohMX0sTk9URV9URVhUOntydWxlczpbNjYsNjddLGluY2x1c2l2ZTohMX0sTk9URV9JRDp7cnVsZXM6WzY1XSxpbmNsdXNpdmU6ITF9LE5PVEU6e3J1bGVzOls1OCw1OSw2MF0saW5jbHVzaXZlOiExfSxTVFlMRURFRl9TVFlMRU9QVFM6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sU1RZTEVERUZfU1RZTEVTOntydWxlczpbMzFdLGluY2x1c2l2ZTohMX0sU1RZTEVfSURTOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LFNUWUxFOntydWxlczpbMzBdLGluY2x1c2l2ZTohMX0sQ0xBU1NfU1RZTEU6e3J1bGVzOlsyOF0saW5jbHVzaXZlOiExfSxDTEFTUzp7cnVsZXM6WzI3XSxpbmNsdXNpdmU6ITF9LENMQVNTREVGSUQ6e3J1bGVzOlsyNV0saW5jbHVzaXZlOiExfSxDTEFTU0RFRjp7cnVsZXM6WzIzLDI0XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsyMCwyMV0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOlsxOF0saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOlsxNl0saW5jbHVzaXZlOiExfSxTQ0FMRTp7cnVsZXM6WzEzLDE0LDMzLDM0XSxpbmNsdXNpdmU6ITF9LEFMSUFTOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LFNUQVRFX0lEOntydWxlczpbNDhdLGluY2x1c2l2ZTohMX0sU1RBVEVfU1RSSU5HOntydWxlczpbNDksNTBdLGluY2x1c2l2ZTohMX0sRk9SS19TVEFURTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxTVEFURTp7cnVsZXM6WzksMTAsMzYsMzcsMzgsMzksNDAsNDEsNDYsNDcsNTEsNTIsNTNdLGluY2x1c2l2ZTohMX0sSUQ6e3J1bGVzOls5LDEwXSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNSw2LDcsOCwxMCwxMSwxMiwxNSwxNywxOSwyMiwyNiwyOSwzMiwzNSw1Myw1Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3Niw3Nyw3OF0saW5jbHVzaXZlOiEwfX19O3JldHVybiBGfSgpO08ubGV4ZXI9TjtmdW5jdGlvbiBQKCl7dGhpcy55eT17fX1yZXR1cm4gbyhQLCJQYXJzZXIiKSxQLnByb3RvdHlwZT1PLE8uUGFyc2VyPVAsbmV3IFB9KCk7R08ucGFyc2VyPUdPO0dFPUdPfSk7dmFyIFJkZSwkRSx0MSxHeCxNZGUsSWRlLE9kZSxGMCxWRSxWTyxVTyxITyxXTyxZTyxVRSxIRSxQZGUsQmRlLHFPLFhPLEZkZSx6ZGUscjEsaFdlLEdkZSxqTyxmV2UsZFdlLCRkZSxWZGUscFdlLFVkZSxtV2UsSGRlLEtPLFFPLFdkZSxXRSxZZGUsWk8sWUU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtSZGU9IkxSIiwkRT0iVEIiLHQxPSJzdGF0ZSIsR3g9InJlbGF0aW9uIixNZGU9ImNsYXNzRGVmIixJZGU9InN0eWxlIixPZGU9ImFwcGx5Q2xhc3MiLEYwPSJkZWZhdWx0IixWRT0iZGl2aWRlciIsVk89ImZpbGw6bm9uZSIsVU89ImZpbGw6ICMzMzMiLEhPPSJjIixXTz0idGV4dCIsWU89Im5vcm1hbCIsVUU9InJlY3QiLEhFPSJyZWN0V2l0aFRpdGxlIixQZGU9InN0YXRlU3RhcnQiLEJkZT0ic3RhdGVFbmQiLHFPPSJkaXZpZGVyIixYTz0icm91bmRlZFdpdGhUaXRsZSIsRmRlPSJub3RlIix6ZGU9Im5vdGVHcm91cCIscjE9InN0YXRlZGlhZ3JhbSIsaFdlPSJzdGF0ZSIsR2RlPWAke3IxfS0ke2hXZX1gLGpPPSJ0cmFuc2l0aW9uIixmV2U9Im5vdGUiLGRXZT0ibm90ZS1lZGdlIiwkZGU9YCR7ak99ICR7ZFdlfWAsVmRlPWAke3IxfS0ke2ZXZX1gLHBXZT0iY2x1c3RlciIsVWRlPWAke3IxfS0ke3BXZX1gLG1XZT0iY2x1c3Rlci1hbHQiLEhkZT1gJHtyMX0tJHttV2V9YCxLTz0icGFyZW50IixRTz0ibm90ZSIsV2RlPSJzdGF0ZSIsV0U9Ii0tLS0iLFlkZT1gJHtXRX0ke1FPfWAsWk89YCR7V0V9JHtLT31gfSk7ZnVuY3Rpb24gSk8odD0iIixlPTAscj0iIixuPVdFKXtsZXQgaT1yIT09bnVsbCYmci5sZW5ndGg+MD9gJHtufSR7cn1gOiIiO3JldHVybmAke1dkZX0tJHt0fSR7aX0tJHtlfWB9ZnVuY3Rpb24gcUUodCxlLHIpe2lmKCFlLmlkfHxlLmlkPT09Ijwvam9pbj48L2Zvcms+Inx8ZS5pZD09PSI8L2Nob2ljZT4iKXJldHVybjtlLmNzc0NsYXNzZXMmJihBcnJheS5pc0FycmF5KGUuY3NzQ29tcGlsZWRTdHlsZXMpfHwoZS5jc3NDb21waWxlZFN0eWxlcz1bXSksZS5jc3NDbGFzc2VzLnNwbGl0KCIgIikuZm9yRWFjaChpPT57aWYoci5nZXQoaSkpe2xldCBhPXIuZ2V0KGkpO2UuY3NzQ29tcGlsZWRTdHlsZXM9Wy4uLmUuY3NzQ29tcGlsZWRTdHlsZXMsLi4uYS5zdHlsZXNdfX0pKTtsZXQgbj10LmZpbmQoaT0+aS5pZD09PWUuaWQpO24/T2JqZWN0LmFzc2lnbihuLGUpOnQucHVzaChlKX1mdW5jdGlvbiB5V2UodCl7cmV0dXJuIHQ/LmNsYXNzZXM/LmpvaW4oIiAiKT8/IiJ9ZnVuY3Rpb24gdldlKHQpe3JldHVybiB0Py5zdHlsZXM/P1tdfXZhciBYRSxTZixnV2UscWRlLG4xLFhkZSxqZGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWdCgpO3V0KCk7ZnIoKTtZRSgpO1hFPW5ldyBNYXAsU2Y9MDtvKEpPLCJzdGF0ZURvbUlkIik7Z1dlPW8oKHQsZSxyLG4saSxhLHMsbCk9PntZLnRyYWNlKCJpdGVtcyIsZSksZS5mb3JFYWNoKHU9Pntzd2l0Y2godS5zdG10KXtjYXNlIHQxOm4xKHQsdSxyLG4saSxhLHMsbCk7YnJlYWs7Y2FzZSBGMDpuMSh0LHUscixuLGksYSxzLGwpO2JyZWFrO2Nhc2UgR3g6e24xKHQsdS5zdGF0ZTEscixuLGksYSxzLGwpLG4xKHQsdS5zdGF0ZTIscixuLGksYSxzLGwpO2xldCBoPXtpZDoiZWRnZSIrU2Ysc3RhcnQ6dS5zdGF0ZTEuaWQsZW5kOnUuc3RhdGUyLmlkLGFycm93aGVhZDoibm9ybWFsIixhcnJvd1R5cGVFbmQ6ImFycm93X2JhcmIiLHN0eWxlOlZPLGxhYmVsU3R5bGU6IiIsbGFiZWw6cWUuc2FuaXRpemVUZXh0KHUuZGVzY3JpcHRpb24scGUoKSksYXJyb3doZWFkU3R5bGU6VU8sbGFiZWxwb3M6SE8sbGFiZWxUeXBlOldPLHRoaWNrbmVzczpZTyxjbGFzc2VzOmpPLGxvb2s6c307aS5wdXNoKGgpLFNmKyt9YnJlYWt9fSl9LCJzZXR1cERvYyIpLHFkZT1vKCh0LGU9JEUpPT57bGV0IHI9ZTtpZih0LmRvYylmb3IobGV0IG4gb2YgdC5kb2Mpbi5zdG10PT09ImRpciImJihyPW4udmFsdWUpO3JldHVybiByfSwiZ2V0RGlyIik7byhxRSwiaW5zZXJ0T3JVcGRhdGVOb2RlIik7byh5V2UsImdldENsYXNzZXNGcm9tRGJJbmZvIik7byh2V2UsImdldFN0eWxlc0Zyb21EYkluZm8iKTtuMT1vKCh0LGUscixuLGksYSxzLGwpPT57bGV0IHU9ZS5pZCxoPXIuZ2V0KHUpLGY9eVdlKGgpLGQ9dldlKGgpO2lmKFkuaW5mbygiZGF0YUZldGNoZXIgcGFyc2VkSXRlbSIsZSxoLGQpLHUhPT0icm9vdCIpe2xldCBwPVVFO2Uuc3RhcnQ9PT0hMD9wPVBkZTplLnN0YXJ0PT09ITEmJihwPUJkZSksZS50eXBlIT09RjAmJihwPWUudHlwZSksWEUuZ2V0KHUpfHxYRS5zZXQodSx7aWQ6dSxzaGFwZTpwLGRlc2NyaXB0aW9uOnFlLnNhbml0aXplVGV4dCh1LHBlKCkpLGNzc0NsYXNzZXM6YCR7Zn0gJHtHZGV9YCxjc3NTdHlsZXM6ZH0pO2xldCBtPVhFLmdldCh1KTtlLmRlc2NyaXB0aW9uJiYoQXJyYXkuaXNBcnJheShtLmRlc2NyaXB0aW9uKT8obS5zaGFwZT1IRSxtLmRlc2NyaXB0aW9uLnB1c2goZS5kZXNjcmlwdGlvbikpOm0uZGVzY3JpcHRpb24/Lmxlbmd0aD4wPyhtLnNoYXBlPUhFLG0uZGVzY3JpcHRpb249PT11P20uZGVzY3JpcHRpb249W2UuZGVzY3JpcHRpb25dOm0uZGVzY3JpcHRpb249W20uZGVzY3JpcHRpb24sZS5kZXNjcmlwdGlvbl0pOihtLnNoYXBlPVVFLG0uZGVzY3JpcHRpb249ZS5kZXNjcmlwdGlvbiksbS5kZXNjcmlwdGlvbj1xZS5zYW5pdGl6ZVRleHRPckFycmF5KG0uZGVzY3JpcHRpb24scGUoKSkpLG0uZGVzY3JpcHRpb24/Lmxlbmd0aD09PTEmJm0uc2hhcGU9PT1IRSYmKG0udHlwZT09PSJncm91cCI/bS5zaGFwZT1YTzptLnNoYXBlPVVFKSwhbS50eXBlJiZlLmRvYyYmKFkuaW5mbygiU2V0dGluZyBjbHVzdGVyIGZvciBYQ1giLHUscWRlKGUpKSxtLnR5cGU9Imdyb3VwIixtLmlzR3JvdXA9ITAsbS5kaXI9cWRlKGUpLG0uc2hhcGU9ZS50eXBlPT09VkU/cU86WE8sbS5jc3NDbGFzc2VzPWAke20uY3NzQ2xhc3Nlc30gJHtVZGV9ICR7YT9IZGU6IiJ9YCk7bGV0IGc9e2xhYmVsU3R5bGU6IiIsc2hhcGU6bS5zaGFwZSxsYWJlbDptLmRlc2NyaXB0aW9uLGNzc0NsYXNzZXM6bS5jc3NDbGFzc2VzLGNzc0NvbXBpbGVkU3R5bGVzOltdLGNzc1N0eWxlczptLmNzc1N0eWxlcyxpZDp1LGRpcjptLmRpcixkb21JZDpKTyh1LFNmKSx0eXBlOm0udHlwZSxpc0dyb3VwOm0udHlwZT09PSJncm91cCIscGFkZGluZzo4LHJ4OjEwLHJ5OjEwLGxvb2s6c307aWYoZy5zaGFwZT09PXFPJiYoZy5sYWJlbD0iIiksdCYmdC5pZCE9PSJyb290IiYmKFkudHJhY2UoIlNldHRpbmcgbm9kZSAiLHUsIiB0byBiZSBjaGlsZCBvZiBpdHMgcGFyZW50ICIsdC5pZCksZy5wYXJlbnRJZD10LmlkKSxnLmNlbnRlckxhYmVsPSEwLGUubm90ZSl7bGV0IHk9e2xhYmVsU3R5bGU6IiIsc2hhcGU6RmRlLGxhYmVsOmUubm90ZS50ZXh0LGNzc0NsYXNzZXM6VmRlLGNzc1N0eWxlczpbXSxjc3NDb21waWxlc1N0eWxlczpbXSxpZDp1K1lkZSsiLSIrU2YsZG9tSWQ6Sk8odSxTZixRTyksdHlwZTptLnR5cGUsaXNHcm91cDptLnR5cGU9PT0iZ3JvdXAiLHBhZGRpbmc6cGUoKS5mbG93Y2hhcnQucGFkZGluZyxsb29rOnMscG9zaXRpb246ZS5ub3RlLnBvc2l0aW9ufSx2PXUrWk8seD17bGFiZWxTdHlsZToiIixzaGFwZTp6ZGUsbGFiZWw6ZS5ub3RlLnRleHQsY3NzQ2xhc3NlczptLmNzc0NsYXNzZXMsY3NzU3R5bGVzOltdLGlkOnUrWk8sZG9tSWQ6Sk8odSxTZixLTyksdHlwZToiZ3JvdXAiLGlzR3JvdXA6ITAscGFkZGluZzoxNixsb29rOnMscG9zaXRpb246ZS5ub3RlLnBvc2l0aW9ufTtTZisrLHguaWQ9dix5LnBhcmVudElkPXYscUUobix4LGwpLHFFKG4seSxsKSxxRShuLGcsbCk7bGV0IGI9dSx3PXkuaWQ7ZS5ub3RlLnBvc2l0aW9uPT09ImxlZnQgb2YiJiYoYj15LmlkLHc9dSksaS5wdXNoKHtpZDpiKyItIit3LHN0YXJ0OmIsZW5kOncsYXJyb3doZWFkOiJub25lIixhcnJvd1R5cGVFbmQ6IiIsc3R5bGU6Vk8sbGFiZWxTdHlsZToiIixjbGFzc2VzOiRkZSxhcnJvd2hlYWRTdHlsZTpVTyxsYWJlbHBvczpITyxsYWJlbFR5cGU6V08sdGhpY2tuZXNzOllPLGxvb2s6c30pfWVsc2UgcUUobixnLGwpfWUuZG9jJiYoWS50cmFjZSgiQWRkaW5nIG5vZGVzIGNoaWxkcmVuICIpLGdXZShlLGUuZG9jLHIsbixpLCFhLHMsbCkpfSwiZGF0YUZldGNoZXIiKSxYZGU9bygoKT0+e1hFLmNsZWFyKCksU2Y9MH0sInJlc2V0Iil9KTt2YXIgZVAseFdlLGJXZSxLZGUsdFA9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWdCgpO3V0KCk7b3coKTtKdigpO1RUKCk7aHIoKTtZRSgpO2VQPW8oKHQsZT0kRSk9PntpZighdC5kb2MpcmV0dXJuIGU7bGV0IHI9ZTtmb3IobGV0IG4gb2YgdC5kb2Mpbi5zdG10PT09ImRpciImJihyPW4udmFsdWUpO3JldHVybiByfSwiZ2V0RGlyIikseFdlPW8oZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kYi5leHRyYWN0KGUuZGIuZ2V0Um9vdERvY1YyKCkpLGUuZGIuZ2V0Q2xhc3NlcygpfSwiZ2V0Q2xhc3NlcyIpLGJXZT1vKGFzeW5jIGZ1bmN0aW9uKHQsZSxyLG4pe1kuaW5mbygiUkVGMDoiKSxZLmluZm8oIkRyYXdpbmcgc3RhdGUgZGlhZ3JhbSAodjIpIixlKTtsZXR7c2VjdXJpdHlMZXZlbDppLHN0YXRlOmEsbGF5b3V0OnN9PXBlKCk7bi5kYi5leHRyYWN0KG4uZGIuZ2V0Um9vdERvY1YyKCkpO2xldCBsPW4uZGIuZ2V0RGF0YSgpLHU9QW0oZSxpKTtsLnR5cGU9bi50eXBlLGwubGF5b3V0QWxnb3JpdGhtPXMsbC5ub2RlU3BhY2luZz1hPy5ub2RlU3BhY2luZ3x8NTAsbC5yYW5rU3BhY2luZz1hPy5yYW5rU3BhY2luZ3x8NTAsbC5tYXJrZXJzPVsiYmFyYiJdLGwuZGlhZ3JhbUlkPWUsYXdhaXQgUW0obCx1KTtsZXQgaD04O1V0Lmluc2VydFRpdGxlKHUsInN0YXRlZGlhZ3JhbVRpdGxlVGV4dCIsYT8udGl0bGVUb3BNYXJnaW4/PzI1LG4uZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpLFptKHUsaCxyMSxhPy51c2VNYXhXaWR0aD8/ITApfSwiZHJhdyIpLEtkZT17Z2V0Q2xhc3Nlczp4V2UsZHJhdzpiV2UsZ2V0RGlyOmVQfX0pO2Z1bmN0aW9uIG4wZSgpe3JldHVybiBuZXcgTWFwfWZ1bmN0aW9uIHJQKHQ9IiIpe2xldCBlPXQ7cmV0dXJuIHQ9PT1hUCYmKCR4KyssZT1gJHtlMGV9JHskeH1gKSxlfWZ1bmN0aW9uIG5QKHQ9IiIsZT1GMCl7cmV0dXJuIHQ9PT1hUD9lMGU6ZX1mdW5jdGlvbiBEV2UodD0iIil7bGV0IGU9dDtyZXR1cm4gdD09PXQwZSYmKCR4KyssZT1gJHtyMGV9JHskeH1gKSxlfWZ1bmN0aW9uIE5XZSh0PSIiLGU9RjApe3JldHVybiB0PT09dDBlP3IwZTplfWZ1bmN0aW9uIFJXZSh0LGUscil7bGV0IG49clAodC5pZC50cmltKCkpLGk9blAodC5pZC50cmltKCksdC50eXBlKSxhPXJQKGUuaWQudHJpbSgpKSxzPW5QKGUuaWQudHJpbSgpLGUudHlwZSk7Q2YobixpLHQuZG9jLHQuZGVzY3JpcHRpb24sdC5ub3RlLHQuY2xhc3Nlcyx0LnN0eWxlcyx0LnRleHRTdHlsZXMpLENmKGEscyxlLmRvYyxlLmRlc2NyaXB0aW9uLGUubm90ZSxlLmNsYXNzZXMsZS5zdHlsZXMsZS50ZXh0U3R5bGVzKSxYcy5yZWxhdGlvbnMucHVzaCh7aWQxOm4saWQyOmEscmVsYXRpb25UaXRsZTpxZS5zYW5pdGl6ZVRleHQocixwZSgpKX0pfXZhciBhUCxlMGUsdDBlLHIwZSxRZGUsWmRlLHdXZSxUV2UsUUUsc1AsaTBlLFpFLGkxLGEwZSxKRSxYcywkeCxKZGUsa1dlLEVXZSxqRSxTV2UsQ1dlLEtFLG9QLEFXZSxDZixzMGUsejAsbzBlLF9XZSxMV2UsbDBlLGlQLE1XZSxJV2UsYzBlLE9XZSxsUCxQV2UsQldlLEZXZSx6V2UsR1dlLCRXZSxvbCxlNj1NKCgpPT57InVzZSBzdHJpY3QiO3V0KCk7aHIoKTtmcigpO1Z0KCk7QWkoKTtqZGUoKTt0UCgpO1lFKCk7YVA9IlsqXSIsZTBlPSJzdGFydCIsdDBlPWFQLHIwZT0iZW5kIixRZGU9ImNvbG9yIixaZGU9ImZpbGwiLHdXZT0iYmdGaWxsIixUV2U9IiwiO28objBlLCJuZXdDbGFzc2VzTGlzdCIpO1FFPVtdLHNQPVtdLGkwZT1SZGUsWkU9W10saTE9bjBlKCksYTBlPW8oKCk9Pih7cmVsYXRpb25zOltdLHN0YXRlczpuZXcgTWFwLGRvY3VtZW50czp7fX0pLCJuZXdEb2MiKSxKRT17cm9vdDphMGUoKX0sWHM9SkUucm9vdCwkeD0wLEpkZT0wLGtXZT17TElORTowLERPVFRFRF9MSU5FOjF9LEVXZT17QUdHUkVHQVRJT046MCxFWFRFTlNJT046MSxDT01QT1NJVElPTjoyLERFUEVOREVOQ1k6M30sakU9byh0PT5KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQpKSwiY2xvbmUiKSxTV2U9byh0PT57WS5pbmZvKCJTZXR0aW5nIHJvb3QgZG9jIix0KSxaRT10fSwic2V0Um9vdERvYyIpLENXZT1vKCgpPT5aRSwiZ2V0Um9vdERvYyIpLEtFPW8oKHQsZSxyKT0+e2lmKGUuc3RtdD09PUd4KUtFKHQsZS5zdGF0ZTEsITApLEtFKHQsZS5zdGF0ZTIsITEpO2Vsc2UgaWYoZS5zdG10PT09dDEmJihlLmlkPT09IlsqXSI/KGUuaWQ9cj90LmlkKyJfc3RhcnQiOnQuaWQrIl9lbmQiLGUuc3RhcnQ9cik6ZS5pZD1lLmlkLnRyaW0oKSksZS5kb2Mpe2xldCBuPVtdLGk9W10sYTtmb3IoYT0wO2E8ZS5kb2MubGVuZ3RoO2ErKylpZihlLmRvY1thXS50eXBlPT09VkUpe2xldCBzPWpFKGUuZG9jW2FdKTtzLmRvYz1qRShpKSxuLnB1c2gocyksaT1bXX1lbHNlIGkucHVzaChlLmRvY1thXSk7aWYobi5sZW5ndGg+MCYmaS5sZW5ndGg+MCl7bGV0IHM9e3N0bXQ6dDEsaWQ6cjkoKSx0eXBlOiJkaXZpZGVyIixkb2M6akUoaSl9O24ucHVzaChqRShzKSksZS5kb2M9bn1lLmRvYy5mb3JFYWNoKHM9PktFKGUscywhMCkpfX0sImRvY1RyYW5zbGF0b3IiKSxvUD1vKCgpPT4oS0Uoe2lkOiJyb290In0se2lkOiJyb290Iixkb2M6WkV9LCEwKSx7aWQ6InJvb3QiLGRvYzpaRX0pLCJnZXRSb290RG9jVjIiKSxBV2U9byh0PT57bGV0IGU7dC5kb2M/ZT10LmRvYzplPXQsWS5pbmZvKGUpLHMwZSghMCksWS5pbmZvKCJFeHRyYWN0IGluaXRpYWwgZG9jdW1lbnQ6IixlKSxlLmZvckVhY2goYT0+e3N3aXRjaChZLndhcm4oIlN0YXRlbWVudCIsYS5zdG10KSxhLnN0bXQpe2Nhc2UgdDE6Q2YoYS5pZC50cmltKCksYS50eXBlLGEuZG9jLGEuZGVzY3JpcHRpb24sYS5ub3RlLGEuY2xhc3NlcyxhLnN0eWxlcyxhLnRleHRTdHlsZXMpO2JyZWFrO2Nhc2UgR3g6bDBlKGEuc3RhdGUxLGEuc3RhdGUyLGEuZGVzY3JpcHRpb24pO2JyZWFrO2Nhc2UgTWRlOmMwZShhLmlkLnRyaW0oKSxhLmNsYXNzZXMpO2JyZWFrO2Nhc2UgSWRlOntsZXQgcz1hLmlkLnRyaW0oKS5zcGxpdCgiLCIpLGw9YS5zdHlsZUNsYXNzLnNwbGl0KCIsIik7cy5mb3JFYWNoKHU9PntsZXQgaD16MCh1KTtpZihoPT09dm9pZCAwKXtsZXQgZj11LnRyaW0oKTtDZihmKSxoPXowKGYpfWguc3R5bGVzPWwubWFwKGY9PmYucmVwbGFjZSgvOy9nLCIiKT8udHJpbSgpKX0pfWJyZWFrO2Nhc2UgT2RlOmxQKGEuaWQudHJpbSgpLGEuc3R5bGVDbGFzcyk7YnJlYWt9fSk7bGV0IHI9bzBlKCksaT1wZSgpLmxvb2s7WGRlKCksbjEodm9pZCAwLG9QKCkscixRRSxzUCwhMCxpLGkxKSxRRS5mb3JFYWNoKGE9PntpZihBcnJheS5pc0FycmF5KGEubGFiZWwpKXtpZihhLmRlc2NyaXB0aW9uPWEubGFiZWwuc2xpY2UoMSksYS5pc0dyb3VwJiZhLmRlc2NyaXB0aW9uLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcigiR3JvdXAgbm9kZXMgY2FuIG9ubHkgaGF2ZSBsYWJlbC4gUmVtb3ZlIHRoZSBhZGRpdGlvbmFsIGRlc2NyaXB0aW9uIGZvciBub2RlIFsiK2EuaWQrIl0iKTthLmxhYmVsPWEubGFiZWxbMF19fSl9LCJleHRyYWN0IiksQ2Y9byhmdW5jdGlvbih0LGU9RjAscj1udWxsLG49bnVsbCxpPW51bGwsYT1udWxsLHM9bnVsbCxsPW51bGwpe2xldCB1PXQ/LnRyaW0oKTtpZihYcy5zdGF0ZXMuaGFzKHUpPyhYcy5zdGF0ZXMuZ2V0KHUpLmRvY3x8KFhzLnN0YXRlcy5nZXQodSkuZG9jPXIpLFhzLnN0YXRlcy5nZXQodSkudHlwZXx8KFhzLnN0YXRlcy5nZXQodSkudHlwZT1lKSk6KFkuaW5mbygiQWRkaW5nIHN0YXRlICIsdSxuKSxYcy5zdGF0ZXMuc2V0KHUse2lkOnUsZGVzY3JpcHRpb25zOltdLHR5cGU6ZSxkb2M6cixub3RlOmksY2xhc3NlczpbXSxzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0pKSxuJiYoWS5pbmZvKCJTZXR0aW5nIHN0YXRlIGRlc2NyaXB0aW9uIix1LG4pLHR5cGVvZiBuPT0ic3RyaW5nIiYmaVAodSxuLnRyaW0oKSksdHlwZW9mIG49PSJvYmplY3QiJiZuLmZvckVhY2goaD0+aVAodSxoLnRyaW0oKSkpKSxpKXtsZXQgaD1Ycy5zdGF0ZXMuZ2V0KHUpO2gubm90ZT1pLGgubm90ZS50ZXh0PXFlLnNhbml0aXplVGV4dChoLm5vdGUudGV4dCxwZSgpKX1hJiYoWS5pbmZvKCJTZXR0aW5nIHN0YXRlIGNsYXNzZXMiLHUsYSksKHR5cGVvZiBhPT0ic3RyaW5nIj9bYV06YSkuZm9yRWFjaChmPT5sUCh1LGYudHJpbSgpKSkpLHMmJihZLmluZm8oIlNldHRpbmcgc3RhdGUgc3R5bGVzIix1LHMpLCh0eXBlb2Ygcz09InN0cmluZyI/W3NdOnMpLmZvckVhY2goZj0+UFdlKHUsZi50cmltKCkpKSksbCYmKFkuaW5mbygiU2V0dGluZyBzdGF0ZSBzdHlsZXMiLHUscyksKHR5cGVvZiBsPT0ic3RyaW5nIj9bbF06bCkuZm9yRWFjaChmPT5CV2UodSxmLnRyaW0oKSkpKX0sImFkZFN0YXRlIiksczBlPW8oZnVuY3Rpb24odCl7UUU9W10sc1A9W10sSkU9e3Jvb3Q6YTBlKCl9LFhzPUpFLnJvb3QsJHg9MCxpMT1uMGUoKSx0fHxMcigpfSwiY2xlYXIiKSx6MD1vKGZ1bmN0aW9uKHQpe3JldHVybiBYcy5zdGF0ZXMuZ2V0KHQpfSwiZ2V0U3RhdGUiKSxvMGU9byhmdW5jdGlvbigpe3JldHVybiBYcy5zdGF0ZXN9LCJnZXRTdGF0ZXMiKSxfV2U9byhmdW5jdGlvbigpe1kuaW5mbygiRG9jdW1lbnRzID0gIixKRSl9LCJsb2dEb2N1bWVudHMiKSxMV2U9byhmdW5jdGlvbigpe3JldHVybiBYcy5yZWxhdGlvbnN9LCJnZXRSZWxhdGlvbnMiKTtvKHJQLCJzdGFydElkSWZOZWVkZWQiKTtvKG5QLCJzdGFydFR5cGVJZk5lZWRlZCIpO28oRFdlLCJlbmRJZElmTmVlZGVkIik7byhOV2UsImVuZFR5cGVJZk5lZWRlZCIpO28oUldlLCJhZGRSZWxhdGlvbk9ianMiKTtsMGU9byhmdW5jdGlvbih0LGUscil7aWYodHlwZW9mIHQ9PSJvYmplY3QiKVJXZSh0LGUscik7ZWxzZXtsZXQgbj1yUCh0LnRyaW0oKSksaT1uUCh0KSxhPURXZShlLnRyaW0oKSkscz1OV2UoZSk7Q2YobixpKSxDZihhLHMpLFhzLnJlbGF0aW9ucy5wdXNoKHtpZDE6bixpZDI6YSx0aXRsZTpxZS5zYW5pdGl6ZVRleHQocixwZSgpKX0pfX0sImFkZFJlbGF0aW9uIiksaVA9byhmdW5jdGlvbih0LGUpe2xldCByPVhzLnN0YXRlcy5nZXQodCksbj1lLnN0YXJ0c1dpdGgoIjoiKT9lLnJlcGxhY2UoIjoiLCIiKS50cmltKCk6ZTtyLmRlc2NyaXB0aW9ucy5wdXNoKHFlLnNhbml0aXplVGV4dChuLHBlKCkpKX0sImFkZERlc2NyaXB0aW9uIiksTVdlPW8oZnVuY3Rpb24odCl7cmV0dXJuIHQuc3Vic3RyaW5nKDAsMSk9PT0iOiI/dC5zdWJzdHIoMikudHJpbSgpOnQudHJpbSgpfSwiY2xlYW51cExhYmVsIiksSVdlPW8oKCk9PihKZGUrKywiZGl2aWRlci1pZC0iK0pkZSksImdldERpdmlkZXJJZCIpLGMwZT1vKGZ1bmN0aW9uKHQsZT0iIil7aTEuaGFzKHQpfHxpMS5zZXQodCx7aWQ6dCxzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0pO2xldCByPWkxLmdldCh0KTtlPy5zcGxpdChUV2UpLmZvckVhY2gobj0+e2xldCBpPW4ucmVwbGFjZSgvKFteO10qKTsvLCIkMSIpLnRyaW0oKTtpZihSZWdFeHAoUWRlKS5leGVjKG4pKXtsZXQgcz1pLnJlcGxhY2UoWmRlLHdXZSkucmVwbGFjZShRZGUsWmRlKTtyLnRleHRTdHlsZXMucHVzaChzKX1yLnN0eWxlcy5wdXNoKGkpfSl9LCJhZGRTdHlsZUNsYXNzIiksT1dlPW8oZnVuY3Rpb24oKXtyZXR1cm4gaTF9LCJnZXRDbGFzc2VzIiksbFA9byhmdW5jdGlvbih0LGUpe3Quc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2xldCBuPXowKHIpO2lmKG49PT12b2lkIDApe2xldCBpPXIudHJpbSgpO0NmKGkpLG49ejAoaSl9bi5jbGFzc2VzLnB1c2goZSl9KX0sInNldENzc0NsYXNzIiksUFdlPW8oZnVuY3Rpb24odCxlKXtsZXQgcj16MCh0KTtyIT09dm9pZCAwJiZyLnN0eWxlcy5wdXNoKGUpfSwic2V0U3R5bGUiKSxCV2U9byhmdW5jdGlvbih0LGUpe2xldCByPXowKHQpO3IhPT12b2lkIDAmJnIudGV4dFN0eWxlcy5wdXNoKGUpfSwic2V0VGV4dFN0eWxlIiksRldlPW8oKCk9PmkwZSwiZ2V0RGlyZWN0aW9uIikseldlPW8odD0+e2kwZT10fSwic2V0RGlyZWN0aW9uIiksR1dlPW8odD0+dCYmdFswXT09PSI6Ij90LnN1YnN0cigxKS50cmltKCk6dC50cmltKCksInRyaW1Db2xvbiIpLCRXZT1vKCgpPT57bGV0IHQ9cGUoKTtyZXR1cm57bm9kZXM6UUUsZWRnZXM6c1Asb3RoZXI6e30sY29uZmlnOnQsZGlyZWN0aW9uOmVQKG9QKCkpfX0sImdldERhdGEiKSxvbD17Z2V0Q29uZmlnOm8oKCk9PnBlKCkuc3RhdGUsImdldENvbmZpZyIpLGdldERhdGE6JFdlLGFkZFN0YXRlOkNmLGNsZWFyOnMwZSxnZXRTdGF0ZTp6MCxnZXRTdGF0ZXM6bzBlLGdldFJlbGF0aW9uczpMV2UsZ2V0Q2xhc3NlczpPV2UsZ2V0RGlyZWN0aW9uOkZXZSxhZGRSZWxhdGlvbjpsMGUsZ2V0RGl2aWRlcklkOklXZSxzZXREaXJlY3Rpb246eldlLGNsZWFudXBMYWJlbDpNV2UsbGluZVR5cGU6a1dlLHJlbGF0aW9uVHlwZTpFV2UsbG9nRG9jdW1lbnRzOl9XZSxnZXRSb290RG9jOkNXZSxzZXRSb290RG9jOlNXZSxnZXRSb290RG9jVjI6b1AsZXh0cmFjdDpBV2UsdHJpbUNvbG9uOkdXZSxnZXRBY2NUaXRsZTpCcixzZXRBY2NUaXRsZTpNcixnZXRBY2NEZXNjcmlwdGlvbjp6cixzZXRBY2NEZXNjcmlwdGlvbjpGcixhZGRTdHlsZUNsYXNzOmMwZSxzZXRDc3NDbGFzczpsUCxhZGREZXNjcmlwdGlvbjppUCxzZXREaWFncmFtVGl0bGU6Y24sZ2V0RGlhZ3JhbVRpdGxlOkpyfX0pO3ZhciBWV2UsdDYsY1A9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWV2U9byh0PT5gCmRlZnMgI3N0YXRlZGlhZ3JhbS1iYXJiRW5kIHsKICAgIGZpbGw6ICR7dC50cmFuc2l0aW9uQ29sb3J9OwogICAgc3Ryb2tlOiAke3QudHJhbnNpdGlvbkNvbG9yfTsKICB9Cmcuc3RhdGVHcm91cCB0ZXh0IHsKICBmaWxsOiAke3Qubm9kZUJvcmRlcn07CiAgc3Ryb2tlOiBub25lOwogIGZvbnQtc2l6ZTogMTBweDsKfQpnLnN0YXRlR3JvdXAgdGV4dCB7CiAgZmlsbDogJHt0LnRleHRDb2xvcn07CiAgc3Ryb2tlOiBub25lOwogIGZvbnQtc2l6ZTogMTBweDsKCn0KZy5zdGF0ZUdyb3VwIC5zdGF0ZS10aXRsZSB7CiAgZm9udC13ZWlnaHQ6IGJvbGRlcjsKICBmaWxsOiAke3Quc3RhdGVMYWJlbENvbG9yfTsKfQoKZy5zdGF0ZUdyb3VwIHJlY3QgewogIGZpbGw6ICR7dC5tYWluQmtnfTsKICBzdHJva2U6ICR7dC5ub2RlQm9yZGVyfTsKfQoKZy5zdGF0ZUdyb3VwIGxpbmUgewogIHN0cm9rZTogJHt0LmxpbmVDb2xvcn07CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgoudHJhbnNpdGlvbiB7CiAgc3Ryb2tlOiAke3QudHJhbnNpdGlvbkNvbG9yfTsKICBzdHJva2Utd2lkdGg6IDE7CiAgZmlsbDogbm9uZTsKfQoKLnN0YXRlR3JvdXAgLmNvbXBvc2l0IHsKICBmaWxsOiAke3QuYmFja2dyb3VuZH07CiAgYm9yZGVyLWJvdHRvbTogMXB4Cn0KCi5zdGF0ZUdyb3VwIC5hbHQtY29tcG9zaXQgewogIGZpbGw6ICNlMGUwZTA7CiAgYm9yZGVyLWJvdHRvbTogMXB4Cn0KCi5zdGF0ZS1ub3RlIHsKICBzdHJva2U6ICR7dC5ub3RlQm9yZGVyQ29sb3J9OwogIGZpbGw6ICR7dC5ub3RlQmtnQ29sb3J9OwoKICB0ZXh0IHsKICAgIGZpbGw6ICR7dC5ub3RlVGV4dENvbG9yfTsKICAgIHN0cm9rZTogbm9uZTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICB9Cn0KCi5zdGF0ZUxhYmVsIC5ib3ggewogIHN0cm9rZTogbm9uZTsKICBzdHJva2Utd2lkdGg6IDA7CiAgZmlsbDogJHt0Lm1haW5Ca2d9OwogIG9wYWNpdHk6IDAuNTsKfQoKLmVkZ2VMYWJlbCAubGFiZWwgcmVjdCB7CiAgZmlsbDogJHt0LmxhYmVsQmFja2dyb3VuZENvbG9yfTsKICBvcGFjaXR5OiAwLjU7Cn0KLmVkZ2VMYWJlbCB7CiAgYmFja2dyb3VuZC1jb2xvcjogJHt0LmVkZ2VMYWJlbEJhY2tncm91bmR9OwogIHAgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHt0LmVkZ2VMYWJlbEJhY2tncm91bmR9OwogIH0KICByZWN0IHsKICAgIG9wYWNpdHk6IDAuNTsKICAgIGJhY2tncm91bmQtY29sb3I6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgIGZpbGw6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICB9CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9Ci5lZGdlTGFiZWwgLmxhYmVsIHRleHQgewogIGZpbGw6ICR7dC50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dC50ZXJ0aWFyeVRleHRDb2xvcn07Cn0KLmxhYmVsIGRpdiAuZWRnZUxhYmVsIHsKICBjb2xvcjogJHt0LnRyYW5zaXRpb25MYWJlbENvbG9yfHx0LnRlcnRpYXJ5VGV4dENvbG9yfTsKfQoKLnN0YXRlTGFiZWwgdGV4dCB7CiAgZmlsbDogJHt0LnN0YXRlTGFiZWxDb2xvcn07CiAgZm9udC1zaXplOiAxMHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9Cgoubm9kZSBjaXJjbGUuc3RhdGUtc3RhcnQgewogIGZpbGw6ICR7dC5zcGVjaWFsU3RhdGVDb2xvcn07CiAgc3Ryb2tlOiAke3Quc3BlY2lhbFN0YXRlQ29sb3J9Owp9Cgoubm9kZSAuZm9yay1qb2luIHsKICBmaWxsOiAke3Quc3BlY2lhbFN0YXRlQ29sb3J9OwogIHN0cm9rZTogJHt0LnNwZWNpYWxTdGF0ZUNvbG9yfTsKfQoKLm5vZGUgY2lyY2xlLnN0YXRlLWVuZCB7CiAgZmlsbDogJHt0LmlubmVyRW5kQmFja2dyb3VuZH07CiAgc3Ryb2tlOiAke3QuYmFja2dyb3VuZH07CiAgc3Ryb2tlLXdpZHRoOiAxLjUKfQouZW5kLXN0YXRlLWlubmVyIHsKICBmaWxsOiAke3QuY29tcG9zaXRlQmFja2dyb3VuZHx8dC5iYWNrZ3JvdW5kfTsKICAvLyBzdHJva2U6ICR7dC5iYWNrZ3JvdW5kfTsKICBzdHJva2Utd2lkdGg6IDEuNQp9Cgoubm9kZSByZWN0IHsKICBmaWxsOiAke3Quc3RhdGVCa2d8fHQubWFpbkJrZ307CiAgc3Ryb2tlOiAke3Quc3RhdGVCb3JkZXJ8fHQubm9kZUJvcmRlcn07CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KLm5vZGUgcG9seWdvbiB7CiAgZmlsbDogJHt0Lm1haW5Ca2d9OwogIHN0cm9rZTogJHt0LnN0YXRlQm9yZGVyfHx0Lm5vZGVCb3JkZXJ9OzsKICBzdHJva2Utd2lkdGg6IDFweDsKfQojc3RhdGVkaWFncmFtLWJhcmJFbmQgewogIGZpbGw6ICR7dC5saW5lQ29sb3J9Owp9Cgouc3RhdGVkaWFncmFtLWNsdXN0ZXIgcmVjdCB7CiAgZmlsbDogJHt0LmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZH07CiAgc3Ryb2tlOiAke3Quc3RhdGVCb3JkZXJ8fHQubm9kZUJvcmRlcn07CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KCi5jbHVzdGVyLWxhYmVsLCAubm9kZUxhYmVsIHsKICBjb2xvcjogJHt0LnN0YXRlTGFiZWxDb2xvcn07CiAgLy8gbGluZS1oZWlnaHQ6IDE7Cn0KCi5zdGF0ZWRpYWdyYW0tY2x1c3RlciByZWN0Lm91dGVyIHsKICByeDogNXB4OwogIHJ5OiA1cHg7Cn0KLnN0YXRlZGlhZ3JhbS1zdGF0ZSAuZGl2aWRlciB7CiAgc3Ryb2tlOiAke3Quc3RhdGVCb3JkZXJ8fHQubm9kZUJvcmRlcn07Cn0KCi5zdGF0ZWRpYWdyYW0tc3RhdGUgLnRpdGxlLXN0YXRlIHsKICByeDogNXB4OwogIHJ5OiA1cHg7Cn0KLnN0YXRlZGlhZ3JhbS1jbHVzdGVyLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIC5pbm5lciB7CiAgZmlsbDogJHt0LmNvbXBvc2l0ZUJhY2tncm91bmR8fHQuYmFja2dyb3VuZH07Cn0KLnN0YXRlZGlhZ3JhbS1jbHVzdGVyLnN0YXRlZGlhZ3JhbS1jbHVzdGVyLWFsdCAuaW5uZXIgewogIGZpbGw6ICR7dC5hbHRCYWNrZ3JvdW5kP3QuYWx0QmFja2dyb3VuZDoiI2VmZWZlZiJ9Owp9Cgouc3RhdGVkaWFncmFtLWNsdXN0ZXIgLmlubmVyIHsKICByeDowOwogIHJ5OjA7Cn0KCi5zdGF0ZWRpYWdyYW0tc3RhdGUgcmVjdC5iYXNpYyB7CiAgcng6IDVweDsKICByeTogNXB4Owp9Ci5zdGF0ZWRpYWdyYW0tc3RhdGUgcmVjdC5kaXZpZGVyIHsKICBzdHJva2UtZGFzaGFycmF5OiAxMCwxMDsKICBmaWxsOiAke3QuYWx0QmFja2dyb3VuZD90LmFsdEJhY2tncm91bmQ6IiNlZmVmZWYifTsKfQoKLm5vdGUtZWRnZSB7CiAgc3Ryb2tlLWRhc2hhcnJheTogNTsKfQoKLnN0YXRlZGlhZ3JhbS1ub3RlIHJlY3QgewogIGZpbGw6ICR7dC5ub3RlQmtnQ29sb3J9OwogIHN0cm9rZTogJHt0Lm5vdGVCb3JkZXJDb2xvcn07CiAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgcng6IDA7CiAgcnk6IDA7Cn0KLnN0YXRlZGlhZ3JhbS1ub3RlIHJlY3QgewogIGZpbGw6ICR7dC5ub3RlQmtnQ29sb3J9OwogIHN0cm9rZTogJHt0Lm5vdGVCb3JkZXJDb2xvcn07CiAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgcng6IDA7CiAgcnk6IDA7Cn0KCi5zdGF0ZWRpYWdyYW0tbm90ZSB0ZXh0IHsKICBmaWxsOiAke3Qubm90ZVRleHRDb2xvcn07Cn0KCi5zdGF0ZWRpYWdyYW0tbm90ZSAubm9kZUxhYmVsIHsKICBjb2xvcjogJHt0Lm5vdGVUZXh0Q29sb3J9Owp9Ci5zdGF0ZWRpYWdyYW0gLmVkZ2VMYWJlbCB7CiAgY29sb3I6IHJlZDsgLy8gJHt0Lm5vdGVUZXh0Q29sb3J9Owp9CgojZGVwZW5kZW5jeVN0YXJ0LCAjZGVwZW5kZW5jeUVuZCB7CiAgZmlsbDogJHt0LmxpbmVDb2xvcn07CiAgc3Ryb2tlOiAke3QubGluZUNvbG9yfTsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCi5zdGF0ZWRpYWdyYW1UaXRsZVRleHQgewogIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgZm9udC1zaXplOiAxOHB4OwogIGZpbGw6ICR7dC50ZXh0Q29sb3J9Owp9CmAsImdldFN0eWxlcyIpLHQ2PVZXZX0pO3ZhciB1UCxVV2UsSFdlLHUwZSxXV2UsaDBlLGYwZT1NKCgpPT57InVzZSBzdHJpY3QiO3VQPXt9LFVXZT1vKCh0LGUpPT57dVBbdF09ZX0sInNldCIpLEhXZT1vKHQ9PnVQW3RdLCJnZXQiKSx1MGU9bygoKT0+T2JqZWN0LmtleXModVApLCJrZXlzIiksV1dlPW8oKCk9PnUwZSgpLmxlbmd0aCwic2l6ZSIpLGgwZT17Z2V0OkhXZSxzZXQ6VVdlLGtleXM6dTBlLHNpemU6V1dlfX0pO3ZhciBZV2UscVdlLFhXZSxqV2UscDBlLEtXZSxRV2UsWldlLEpXZSxoUCxkMGUsbTBlLGcwZT1NKCgpPT57InVzZSBzdHJpY3QiO3ByKCk7ZjBlKCk7ZTYoKTtocigpO2ZyKCk7VnQoKTt1dCgpO1lXZT1vKHQ9PnQuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsInN0YXJ0LXN0YXRlIikuYXR0cigiciIscGUoKS5zdGF0ZS5zaXplVW5pdCkuYXR0cigiY3giLHBlKCkuc3RhdGUucGFkZGluZytwZSgpLnN0YXRlLnNpemVVbml0KS5hdHRyKCJjeSIscGUoKS5zdGF0ZS5wYWRkaW5nK3BlKCkuc3RhdGUuc2l6ZVVuaXQpLCJkcmF3U3RhcnRTdGF0ZSIpLHFXZT1vKHQ9PnQuYXBwZW5kKCJsaW5lIikuc3R5bGUoInN0cm9rZSIsImdyZXkiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjMiKS5hdHRyKCJ4MSIscGUoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4MiIscGUoKS5zdGF0ZS50ZXh0SGVpZ2h0KjIpLmF0dHIoInkxIiwwKS5hdHRyKCJ5MiIsMCksImRyYXdEaXZpZGVyIiksWFdlPW8oKHQsZSk9PntsZXQgcj10LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDIqcGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixwZSgpLnN0YXRlLnRleHRIZWlnaHQrMipwZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoImZvbnQtc2l6ZSIscGUoKS5zdGF0ZS5mb250U2l6ZSkuYXR0cigiY2xhc3MiLCJzdGF0ZS10aXRsZSIpLnRleHQoZS5pZCksbj1yLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIHQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIscGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixwZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIixuLndpZHRoKzIqcGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLG4uaGVpZ2h0KzIqcGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJyeCIscGUoKS5zdGF0ZS5yYWRpdXMpLHJ9LCJkcmF3U2ltcGxlU3RhdGUiKSxqV2U9bygodCxlKT0+e2xldCByPW8oZnVuY3Rpb24ocCxtLGcpe2xldCB5PXAuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLDIqcGUoKS5zdGF0ZS5wYWRkaW5nKS50ZXh0KG0pO2d8fHkuYXR0cigiZHkiLHBlKCkuc3RhdGUudGV4dEhlaWdodCl9LCJhZGRUc3BhbiIpLGk9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwyKnBlKCkuc3RhdGUucGFkZGluZykuYXR0cigieSIscGUoKS5zdGF0ZS50ZXh0SGVpZ2h0KzEuMypwZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoImZvbnQtc2l6ZSIscGUoKS5zdGF0ZS5mb250U2l6ZSkuYXR0cigiY2xhc3MiLCJzdGF0ZS10aXRsZSIpLnRleHQoZS5kZXNjcmlwdGlvbnNbMF0pLm5vZGUoKS5nZXRCQm94KCksYT1pLmhlaWdodCxzPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIscGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixhK3BlKCkuc3RhdGUucGFkZGluZyouNCtwZSgpLnN0YXRlLmRpdmlkZXJNYXJnaW4rcGUoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJjbGFzcyIsInN0YXRlLWRlc2NyaXB0aW9uIiksbD0hMCx1PSEwO2UuZGVzY3JpcHRpb25zLmZvckVhY2goZnVuY3Rpb24ocCl7bHx8KHIocyxwLHUpLHU9ITEpLGw9ITF9KTtsZXQgaD10LmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixwZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkxIixwZSgpLnN0YXRlLnBhZGRpbmcrYStwZSgpLnN0YXRlLmRpdmlkZXJNYXJnaW4vMikuYXR0cigieTIiLHBlKCkuc3RhdGUucGFkZGluZythK3BlKCkuc3RhdGUuZGl2aWRlck1hcmdpbi8yKS5hdHRyKCJjbGFzcyIsImRlc2NyLWRpdmlkZXIiKSxmPXMubm9kZSgpLmdldEJCb3goKSxkPU1hdGgubWF4KGYud2lkdGgsaS53aWR0aCk7cmV0dXJuIGguYXR0cigieDIiLGQrMypwZSgpLnN0YXRlLnBhZGRpbmcpLHQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIscGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixwZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIixkKzIqcGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLGYuaGVpZ2h0K2ErMipwZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInJ4IixwZSgpLnN0YXRlLnJhZGl1cyksdH0sImRyYXdEZXNjclN0YXRlIikscDBlPW8oKHQsZSxyKT0+e2xldCBuPXBlKCkuc3RhdGUucGFkZGluZyxpPTIqcGUoKS5zdGF0ZS5wYWRkaW5nLGE9dC5ub2RlKCkuZ2V0QkJveCgpLHM9YS53aWR0aCxsPWEueCx1PXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIscGUoKS5zdGF0ZS50aXRsZVNoaWZ0KS5hdHRyKCJmb250LXNpemUiLHBlKCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KGUuaWQpLGY9dS5ub2RlKCkuZ2V0QkJveCgpLndpZHRoK2ksZD1NYXRoLm1heChmLHMpO2Q9PT1zJiYoZD1kK2kpO2xldCBwLG09dC5ub2RlKCkuZ2V0QkJveCgpO2UuZG9jLHA9bC1uLGY+cyYmKHA9KHMtZCkvMituKSxNYXRoLmFicyhsLW0ueCk8biYmZj5zJiYocD1sLShmLXMpLzIpO2xldCBnPTEtcGUoKS5zdGF0ZS50ZXh0SGVpZ2h0O3JldHVybiB0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLHApLmF0dHIoInkiLGcpLmF0dHIoImNsYXNzIixyPyJhbHQtY29tcG9zaXQiOiJjb21wb3NpdCIpLmF0dHIoIndpZHRoIixkKS5hdHRyKCJoZWlnaHQiLG0uaGVpZ2h0K3BlKCkuc3RhdGUudGV4dEhlaWdodCtwZSgpLnN0YXRlLnRpdGxlU2hpZnQrMSkuYXR0cigicngiLCIwIiksdS5hdHRyKCJ4IixwK24pLGY8PXMmJnUuYXR0cigieCIsbCsoZC1pKS8yLWYvMituKSx0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLHApLmF0dHIoInkiLHBlKCkuc3RhdGUudGl0bGVTaGlmdC1wZSgpLnN0YXRlLnRleHRIZWlnaHQtcGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsZCkuYXR0cigiaGVpZ2h0IixwZSgpLnN0YXRlLnRleHRIZWlnaHQqMykuYXR0cigicngiLHBlKCkuc3RhdGUucmFkaXVzKSx0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLHApLmF0dHIoInkiLHBlKCkuc3RhdGUudGl0bGVTaGlmdC1wZSgpLnN0YXRlLnRleHRIZWlnaHQtcGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsZCkuYXR0cigiaGVpZ2h0IixtLmhlaWdodCszKzIqcGUoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJyeCIscGUoKS5zdGF0ZS5yYWRpdXMpLHR9LCJhZGRUaXRsZUFuZEJveCIpLEtXZT1vKHQ9Pih0LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY2xhc3MiLCJlbmQtc3RhdGUtb3V0ZXIiKS5hdHRyKCJyIixwZSgpLnN0YXRlLnNpemVVbml0K3BlKCkuc3RhdGUubWluaVBhZGRpbmcpLmF0dHIoImN4IixwZSgpLnN0YXRlLnBhZGRpbmcrcGUoKS5zdGF0ZS5zaXplVW5pdCtwZSgpLnN0YXRlLm1pbmlQYWRkaW5nKS5hdHRyKCJjeSIscGUoKS5zdGF0ZS5wYWRkaW5nK3BlKCkuc3RhdGUuc2l6ZVVuaXQrcGUoKS5zdGF0ZS5taW5pUGFkZGluZyksdC5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImNsYXNzIiwiZW5kLXN0YXRlLWlubmVyIikuYXR0cigiciIscGUoKS5zdGF0ZS5zaXplVW5pdCkuYXR0cigiY3giLHBlKCkuc3RhdGUucGFkZGluZytwZSgpLnN0YXRlLnNpemVVbml0KzIpLmF0dHIoImN5IixwZSgpLnN0YXRlLnBhZGRpbmcrcGUoKS5zdGF0ZS5zaXplVW5pdCsyKSksImRyYXdFbmRTdGF0ZSIpLFFXZT1vKCh0LGUpPT57bGV0IHI9cGUoKS5zdGF0ZS5mb3JrV2lkdGgsbj1wZSgpLnN0YXRlLmZvcmtIZWlnaHQ7aWYoZS5wYXJlbnRJZCl7bGV0IGk9cjtyPW4sbj1pfXJldHVybiB0LmFwcGVuZCgicmVjdCIpLnN0eWxlKCJzdHJva2UiLCJibGFjayIpLnN0eWxlKCJmaWxsIiwiYmxhY2siKS5hdHRyKCJ3aWR0aCIscikuYXR0cigiaGVpZ2h0IixuKS5hdHRyKCJ4IixwZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLHBlKCkuc3RhdGUucGFkZGluZyl9LCJkcmF3Rm9ya0pvaW5TdGF0ZSIpLFpXZT1vKCh0LGUscixuKT0+e2xldCBpPTAsYT1uLmFwcGVuZCgidGV4dCIpO2Euc3R5bGUoInRleHQtYW5jaG9yIiwic3RhcnQiKSxhLmF0dHIoImNsYXNzIiwibm90ZVRleHQiKTtsZXQgcz10LnJlcGxhY2UoL1xyXG4vZywiPGJyLz4iKTtzPXMucmVwbGFjZSgvXG4vZywiPGJyLz4iKTtsZXQgbD1zLnNwbGl0KHFlLmxpbmVCcmVha1JlZ2V4KSx1PTEuMjUqcGUoKS5zdGF0ZS5ub3RlTWFyZ2luO2ZvcihsZXQgaCBvZiBsKXtsZXQgZj1oLnRyaW0oKTtpZihmLmxlbmd0aD4wKXtsZXQgZD1hLmFwcGVuZCgidHNwYW4iKTtpZihkLnRleHQoZiksdT09PTApe2xldCBwPWQubm9kZSgpLmdldEJCb3goKTt1Kz1wLmhlaWdodH1pKz11LGQuYXR0cigieCIsZStwZSgpLnN0YXRlLm5vdGVNYXJnaW4pLGQuYXR0cigieSIscitpKzEuMjUqcGUoKS5zdGF0ZS5ub3RlTWFyZ2luKX19cmV0dXJue3RleHRXaWR0aDphLm5vZGUoKS5nZXRCQm94KCkud2lkdGgsdGV4dEhlaWdodDppfX0sIl9kcmF3TG9uZ1RleHQiKSxKV2U9bygodCxlKT0+e2UuYXR0cigiY2xhc3MiLCJzdGF0ZS1ub3RlIik7bGV0IHI9ZS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixwZSgpLnN0YXRlLnBhZGRpbmcpLG49ZS5hcHBlbmQoImciKSx7dGV4dFdpZHRoOmksdGV4dEhlaWdodDphfT1aV2UodCwwLDAsbik7cmV0dXJuIHIuYXR0cigiaGVpZ2h0IixhKzIqcGUoKS5zdGF0ZS5ub3RlTWFyZ2luKSxyLmF0dHIoIndpZHRoIixpK3BlKCkuc3RhdGUubm90ZU1hcmdpbioyKSxyfSwiZHJhd05vdGUiKSxoUD1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9ZS5pZCxuPXtpZDpyLGxhYmVsOmUuaWQsd2lkdGg6MCxoZWlnaHQ6MH0saT10LmFwcGVuZCgiZyIpLmF0dHIoImlkIixyKS5hdHRyKCJjbGFzcyIsInN0YXRlR3JvdXAiKTtlLnR5cGU9PT0ic3RhcnQiJiZZV2UoaSksZS50eXBlPT09ImVuZCImJktXZShpKSwoZS50eXBlPT09ImZvcmsifHxlLnR5cGU9PT0iam9pbiIpJiZRV2UoaSxlKSxlLnR5cGU9PT0ibm90ZSImJkpXZShlLm5vdGUudGV4dCxpKSxlLnR5cGU9PT0iZGl2aWRlciImJnFXZShpKSxlLnR5cGU9PT0iZGVmYXVsdCImJmUuZGVzY3JpcHRpb25zLmxlbmd0aD09PTAmJlhXZShpLGUpLGUudHlwZT09PSJkZWZhdWx0IiYmZS5kZXNjcmlwdGlvbnMubGVuZ3RoPjAmJmpXZShpLGUpO2xldCBhPWkubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gbi53aWR0aD1hLndpZHRoKzIqcGUoKS5zdGF0ZS5wYWRkaW5nLG4uaGVpZ2h0PWEuaGVpZ2h0KzIqcGUoKS5zdGF0ZS5wYWRkaW5nLGgwZS5zZXQocixuKSxufSwiZHJhd1N0YXRlIiksZDBlPTAsbTBlPW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPW8oZnVuY3Rpb24odSl7c3dpdGNoKHUpe2Nhc2Ugb2wucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OOnJldHVybiJhZ2dyZWdhdGlvbiI7Y2FzZSBvbC5yZWxhdGlvblR5cGUuRVhURU5TSU9OOnJldHVybiJleHRlbnNpb24iO2Nhc2Ugb2wucmVsYXRpb25UeXBlLkNPTVBPU0lUSU9OOnJldHVybiJjb21wb3NpdGlvbiI7Y2FzZSBvbC5yZWxhdGlvblR5cGUuREVQRU5ERU5DWTpyZXR1cm4iZGVwZW5kZW5jeSJ9fSwiZ2V0UmVsYXRpb25UeXBlIik7ZS5wb2ludHM9ZS5wb2ludHMuZmlsdGVyKHU9PiFOdW1iZXIuaXNOYU4odS55KSk7bGV0IGk9ZS5wb2ludHMsYT1ucygpLngoZnVuY3Rpb24odSl7cmV0dXJuIHUueH0pLnkoZnVuY3Rpb24odSl7cmV0dXJuIHUueX0pLmN1cnZlKFBvKSxzPXQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsYShpKSkuYXR0cigiaWQiLCJlZGdlIitkMGUpLmF0dHIoImNsYXNzIiwidHJhbnNpdGlvbiIpLGw9IiI7aWYocGUoKS5zdGF0ZS5hcnJvd01hcmtlckFic29sdXRlJiYobD13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCxsPWwucmVwbGFjZSgvXCgvZywiXFwoIiksbD1sLnJlcGxhY2UoL1wpL2csIlxcKSIpKSxzLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitsKyIjIituKG9sLnJlbGF0aW9uVHlwZS5ERVBFTkRFTkNZKSsiRW5kKSIpLHIudGl0bGUhPT12b2lkIDApe2xldCB1PXQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJzdGF0ZUxhYmVsIikse3g6aCx5OmZ9PVV0LmNhbGNMYWJlbFBvc2l0aW9uKGUucG9pbnRzKSxkPXFlLmdldFJvd3Moci50aXRsZSkscD0wLG09W10sZz0wLHk9MDtmb3IobGV0IGI9MDtiPD1kLmxlbmd0aDtiKyspe2xldCB3PXUuYXBwZW5kKCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KGRbYl0pLmF0dHIoIngiLGgpLmF0dHIoInkiLGYrcCksXz13Lm5vZGUoKS5nZXRCQm94KCk7Zz1NYXRoLm1heChnLF8ud2lkdGgpLHk9TWF0aC5taW4oeSxfLngpLFkuaW5mbyhfLngsaCxmK3ApLHA9PT0wJiYocD13Lm5vZGUoKS5nZXRCQm94KCkuaGVpZ2h0LFkuaW5mbygiVGl0bGUgaGVpZ2h0IixwLGYpKSxtLnB1c2godyl9bGV0IHY9cCpkLmxlbmd0aDtpZihkLmxlbmd0aD4xKXtsZXQgYj0oZC5sZW5ndGgtMSkqcCouNTttLmZvckVhY2goKHcsXyk9PncuYXR0cigieSIsZitfKnAtYikpLHY9cCpkLmxlbmd0aH1sZXQgeD11Lm5vZGUoKS5nZXRCQm94KCk7dS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJjbGFzcyIsImJveCIpLmF0dHIoIngiLGgtZy8yLXBlKCkuc3RhdGUucGFkZGluZy8yKS5hdHRyKCJ5IixmLXYvMi1wZSgpLnN0YXRlLnBhZGRpbmcvMi0zLjUpLmF0dHIoIndpZHRoIixnK3BlKCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0Iix2K3BlKCkuc3RhdGUucGFkZGluZyksWS5pbmZvKHgpfWQwZSsrfSwiZHJhd0VkZ2UiKX0pO3ZhciBibyxmUCxlWWUsdFllLHJZZSxuWWUseTBlLHYwZSx4MGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwcigpO1F2KCk7R3MoKTt1dCgpO2ZyKCk7ZzBlKCk7VnQoKTthaSgpO2ZQPXt9LGVZZT1vKGZ1bmN0aW9uKCl7fSwic2V0Q29uZiIpLHRZZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImRlcGVuZGVuY3lFbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTksNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX0sImluc2VydE1hcmtlcnMiKSxyWWU9byhmdW5jdGlvbih0LGUscixuKXtibz1wZSgpLnN0YXRlO2xldCBpPXBlKCkuc2VjdXJpdHlMZXZlbCxhO2k9PT0ic2FuZGJveCImJihhPVZlKCIjaSIrZSkpO2xldCBzPWk9PT0ic2FuZGJveCI/VmUoYS5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KTpWZSgiYm9keSIpLGw9aT09PSJzYW5kYm94Ij9hLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50OmRvY3VtZW50O1kuZGVidWcoIlJlbmRlcmluZyBkaWFncmFtICIrdCk7bGV0IHU9cy5zZWxlY3QoYFtpZD0nJHtlfSddYCk7dFllKHUpO2xldCBoPW4uZGIuZ2V0Um9vdERvYygpO3kwZShoLHUsdm9pZCAwLCExLHMsbCxuKTtsZXQgZj1iby5wYWRkaW5nLGQ9dS5ub2RlKCkuZ2V0QkJveCgpLHA9ZC53aWR0aCtmKjIsbT1kLmhlaWdodCtmKjIsZz1wKjEuNzU7WnIodSxtLGcsYm8udXNlTWF4V2lkdGgpLHUuYXR0cigidmlld0JveCIsYCR7ZC54LWJvLnBhZGRpbmd9ICAke2QueS1iby5wYWRkaW5nfSBgK3ArIiAiK20pfSwiZHJhdyIpLG5ZZT1vKHQ9PnQ/dC5sZW5ndGgqYm8uZm9udFNpemVGYWN0b3I6MSwiZ2V0TGFiZWxXaWR0aCIpLHkwZT1vKCh0LGUscixuLGksYSxzKT0+e2xldCBsPW5ldyBJcih7Y29tcG91bmQ6ITAsbXVsdGlncmFwaDohMH0pLHUsaD0hMDtmb3IodT0wO3U8dC5sZW5ndGg7dSsrKWlmKHRbdV0uc3RtdD09PSJyZWxhdGlvbiIpe2g9ITE7YnJlYWt9cj9sLnNldEdyYXBoKHtyYW5rZGlyOiJMUiIsbXVsdGlncmFwaDohMCxjb21wb3VuZDohMCxyYW5rZXI6InRpZ2h0LXRyZWUiLHJhbmtzZXA6aD8xOmJvLmVkZ2VMZW5ndGhGYWN0b3Isbm9kZVNlcDpoPzE6NTAsaXNNdWx0aUdyYXBoOiEwfSk6bC5zZXRHcmFwaCh7cmFua2RpcjoiVEIiLG11bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITAscmFua3NlcDpoPzE6Ym8uZWRnZUxlbmd0aEZhY3Rvcixub2RlU2VwOmg/MTo1MCxyYW5rZXI6InRpZ2h0LXRyZWUiLGlzTXVsdGlHcmFwaDohMH0pLGwuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpe3JldHVybnt9fSkscy5kYi5leHRyYWN0KHQpO2xldCBmPXMuZGIuZ2V0U3RhdGVzKCksZD1zLmRiLmdldFJlbGF0aW9ucygpLHA9T2JqZWN0LmtleXMoZiksbT0hMDtmb3IobGV0IGIgb2YgcCl7bGV0IHc9ZltiXTtyJiYody5wYXJlbnRJZD1yKTtsZXQgXztpZih3LmRvYyl7bGV0IFQ9ZS5hcHBlbmQoImciKS5hdHRyKCJpZCIsdy5pZCkuYXR0cigiY2xhc3MiLCJzdGF0ZUdyb3VwIik7aWYoXz15MGUody5kb2MsVCx3LmlkLCFuLGksYSxzKSxtKXtUPXAwZShULHcsbik7bGV0IEU9VC5ub2RlKCkuZ2V0QkJveCgpO18ud2lkdGg9RS53aWR0aCxfLmhlaWdodD1FLmhlaWdodCtiby5wYWRkaW5nLzIsZlBbdy5pZF09e3k6Ym8uY29tcG9zaXRUaXRsZVNpemV9fWVsc2V7bGV0IEU9VC5ub2RlKCkuZ2V0QkJveCgpO18ud2lkdGg9RS53aWR0aCxfLmhlaWdodD1FLmhlaWdodH19ZWxzZSBfPWhQKGUsdyxsKTtpZih3Lm5vdGUpe2xldCBUPXtkZXNjcmlwdGlvbnM6W10saWQ6dy5pZCsiLW5vdGUiLG5vdGU6dy5ub3RlLHR5cGU6Im5vdGUifSxFPWhQKGUsVCxsKTt3Lm5vdGUucG9zaXRpb249PT0ibGVmdCBvZiI/KGwuc2V0Tm9kZShfLmlkKyItbm90ZSIsRSksbC5zZXROb2RlKF8uaWQsXykpOihsLnNldE5vZGUoXy5pZCxfKSxsLnNldE5vZGUoXy5pZCsiLW5vdGUiLEUpKSxsLnNldFBhcmVudChfLmlkLF8uaWQrIi1ncm91cCIpLGwuc2V0UGFyZW50KF8uaWQrIi1ub3RlIixfLmlkKyItZ3JvdXAiKX1lbHNlIGwuc2V0Tm9kZShfLmlkLF8pfVkuZGVidWcoIkNvdW50PSIsbC5ub2RlQ291bnQoKSxsKTtsZXQgZz0wO2QuZm9yRWFjaChmdW5jdGlvbihiKXtnKyssWS5kZWJ1ZygiU2V0dGluZyBlZGdlIixiKSxsLnNldEVkZ2UoYi5pZDEsYi5pZDIse3JlbGF0aW9uOmIsd2lkdGg6blllKGIudGl0bGUpLGhlaWdodDpiby5sYWJlbEhlaWdodCpxZS5nZXRSb3dzKGIudGl0bGUpLmxlbmd0aCxsYWJlbHBvczoiYyJ9LCJpZCIrZyl9KSxHdShsKSxZLmRlYnVnKCJHcmFwaCBhZnRlciBsYXlvdXQiLGwubm9kZXMoKSk7bGV0IHk9ZS5ub2RlKCk7bC5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24oYil7YiE9PXZvaWQgMCYmbC5ub2RlKGIpIT09dm9pZCAwPyhZLndhcm4oIk5vZGUgIitiKyI6ICIrSlNPTi5zdHJpbmdpZnkobC5ub2RlKGIpKSksaS5zZWxlY3QoIiMiK3kuaWQrIiAjIitiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisobC5ub2RlKGIpLngtbC5ub2RlKGIpLndpZHRoLzIpKyIsIisobC5ub2RlKGIpLnkrKGZQW2JdP2ZQW2JdLnk6MCktbC5ub2RlKGIpLmhlaWdodC8yKSsiICkiKSxpLnNlbGVjdCgiIyIreS5pZCsiICMiK2IpLmF0dHIoImRhdGEteC1zaGlmdCIsbC5ub2RlKGIpLngtbC5ub2RlKGIpLndpZHRoLzIpLGEucXVlcnlTZWxlY3RvckFsbCgiIyIreS5pZCsiICMiK2IrIiAuZGl2aWRlciIpLmZvckVhY2goXz0+e2xldCBUPV8ucGFyZW50RWxlbWVudCxFPTAsTD0wO1QmJihULnBhcmVudEVsZW1lbnQmJihFPVQucGFyZW50RWxlbWVudC5nZXRCQm94KCkud2lkdGgpLEw9cGFyc2VJbnQoVC5nZXRBdHRyaWJ1dGUoImRhdGEteC1zaGlmdCIpLDEwKSxOdW1iZXIuaXNOYU4oTCkmJihMPTApKSxfLnNldEF0dHJpYnV0ZSgieDEiLDAtTCs4KSxfLnNldEF0dHJpYnV0ZSgieDIiLEUtTC04KX0pKTpZLmRlYnVnKCJObyBOb2RlICIrYisiOiAiK0pTT04uc3RyaW5naWZ5KGwubm9kZShiKSkpfSk7bGV0IHY9eS5nZXRCQm94KCk7bC5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24oYil7YiE9PXZvaWQgMCYmbC5lZGdlKGIpIT09dm9pZCAwJiYoWS5kZWJ1ZygiRWRnZSAiK2IudisiIC0+ICIrYi53KyI6ICIrSlNPTi5zdHJpbmdpZnkobC5lZGdlKGIpKSksbTBlKGUsbC5lZGdlKGIpLGwuZWRnZShiKS5yZWxhdGlvbikpfSksdj15LmdldEJCb3goKTtsZXQgeD17aWQ6cnx8InJvb3QiLGxhYmVsOnJ8fCJyb290Iix3aWR0aDowLGhlaWdodDowfTtyZXR1cm4geC53aWR0aD12LndpZHRoKzIqYm8ucGFkZGluZyx4LmhlaWdodD12LmhlaWdodCsyKmJvLnBhZGRpbmcsWS5kZWJ1ZygiRG9jIHJlbmRlcmVkIix4LGwpLHh9LCJyZW5kZXJEb2MiKSx2MGU9e3NldENvbmY6ZVllLGRyYXc6clllfX0pO3ZhciBiMGU9e307dnIoYjBlLHtkaWFncmFtOigpPT5pWWV9KTt2YXIgaVllLHcwZT1NKCgpPT57InVzZSBzdHJpY3QiOyRPKCk7ZTYoKTtjUCgpO3gwZSgpO2lZZT17cGFyc2VyOkdFLGRiOm9sLHJlbmRlcmVyOnYwZSxzdHlsZXM6dDYsaW5pdDpvKHQ9Pnt0LnN0YXRlfHwodC5zdGF0ZT17fSksdC5zdGF0ZS5hcnJvd01hcmtlckFic29sdXRlPXQuYXJyb3dNYXJrZXJBYnNvbHV0ZSxvbC5jbGVhcigpfSwiaW5pdCIpfX0pO3ZhciBFMGU9e307dnIoRTBlLHtkaWFncmFtOigpPT5sWWV9KTt2YXIgbFllLFMwZT1NKCgpPT57InVzZSBzdHJpY3QiOyRPKCk7ZTYoKTtjUCgpO3RQKCk7bFllPXtwYXJzZXI6R0UsZGI6b2wscmVuZGVyZXI6S2RlLHN0eWxlczp0Nixpbml0Om8odD0+e3Quc3RhdGV8fCh0LnN0YXRlPXt9KSx0LnN0YXRlLmFycm93TWFya2VyQWJzb2x1dGU9dC5hcnJvd01hcmtlckFic29sdXRlLG9sLmNsZWFyKCl9LCJpbml0Iil9fSk7dmFyIGRQLF8wZSxMMGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtkUD1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oZCxwLG0sZyl7Zm9yKG09bXx8e30sZz1kLmxlbmd0aDtnLS07bVtkW2ddXT1wKTtyZXR1cm4gbX0sIm8iKSxlPVs2LDgsMTAsMTEsMTIsMTQsMTYsMTcsMThdLHI9WzEsOV0sbj1bMSwxMF0saT1bMSwxMV0sYT1bMSwxMl0scz1bMSwxM10sbD1bMSwxNF0sdT17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6Myxqb3VybmV5OjQsZG9jdW1lbnQ6NSxFT0Y6NixsaW5lOjcsU1BBQ0U6OCxzdGF0ZW1lbnQ6OSxORVdMSU5FOjEwLHRpdGxlOjExLGFjY190aXRsZToxMixhY2NfdGl0bGVfdmFsdWU6MTMsYWNjX2Rlc2NyOjE0LGFjY19kZXNjcl92YWx1ZToxNSxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjE2LHNlY3Rpb246MTcsdGFza05hbWU6MTgsdGFza0RhdGE6MTksJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6ImpvdXJuZXkiLDY6IkVPRiIsODoiU1BBQ0UiLDEwOiJORVdMSU5FIiwxMToidGl0bGUiLDEyOiJhY2NfdGl0bGUiLDEzOiJhY2NfdGl0bGVfdmFsdWUiLDE0OiJhY2NfZGVzY3IiLDE1OiJhY2NfZGVzY3JfdmFsdWUiLDE2OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwxNzoic2VjdGlvbiIsMTg6InRhc2tOYW1lIiwxOToidGFza0RhdGEifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzUsMF0sWzUsMl0sWzcsMl0sWzcsMV0sWzcsMV0sWzcsMV0sWzksMV0sWzksMl0sWzksMl0sWzksMV0sWzksMV0sWzksMl1dLHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihwLG0sZyx5LHYseCxiKXt2YXIgdz14Lmxlbmd0aC0xO3N3aXRjaCh2KXtjYXNlIDE6cmV0dXJuIHhbdy0xXTtjYXNlIDI6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMzp4W3ctMV0ucHVzaCh4W3ddKSx0aGlzLiQ9eFt3LTFdO2JyZWFrO2Nhc2UgNDpjYXNlIDU6dGhpcy4kPXhbd107YnJlYWs7Y2FzZSA2OmNhc2UgNzp0aGlzLiQ9W107YnJlYWs7Y2FzZSA4Onkuc2V0RGlhZ3JhbVRpdGxlKHhbd10uc3Vic3RyKDYpKSx0aGlzLiQ9eFt3XS5zdWJzdHIoNik7YnJlYWs7Y2FzZSA5OnRoaXMuJD14W3ddLnRyaW0oKSx5LnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMDpjYXNlIDExOnRoaXMuJD14W3ddLnRyaW0oKSx5LnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMjp5LmFkZFNlY3Rpb24oeFt3XS5zdWJzdHIoOCkpLHRoaXMuJD14W3ddLnN1YnN0cig4KTticmVhaztjYXNlIDEzOnkuYWRkVGFzayh4W3ctMV0seFt3XSksdGhpcy4kPSJ0YXNrIjticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHQoZSxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6WzEsNl0sOTo3LDEwOlsxLDhdLDExOnIsMTI6biwxNDppLDE2OmEsMTc6cywxODpsfSx0KGUsWzIsN10sezE6WzIsMV19KSx0KGUsWzIsM10pLHs5OjE1LDExOnIsMTI6biwxNDppLDE2OmEsMTc6cywxODpsfSx0KGUsWzIsNV0pLHQoZSxbMiw2XSksdChlLFsyLDhdKSx7MTM6WzEsMTZdfSx7MTU6WzEsMTddfSx0KGUsWzIsMTFdKSx0KGUsWzIsMTJdKSx7MTk6WzEsMThdfSx0KGUsWzIsNF0pLHQoZSxbMiw5XSksdChlLFsyLDEwXSksdChlLFsyLDEzXSldLGRlZmF1bHRBY3Rpb25zOnt9LHBhcnNlRXJyb3I6byhmdW5jdGlvbihwLG0pe2lmKG0ucmVjb3ZlcmFibGUpdGhpcy50cmFjZShwKTtlbHNle3ZhciBnPW5ldyBFcnJvcihwKTt0aHJvdyBnLmhhc2g9bSxnfX0sInBhcnNlRXJyb3IiKSxwYXJzZTpvKGZ1bmN0aW9uKHApe3ZhciBtPXRoaXMsZz1bMF0seT1bXSx2PVtudWxsXSx4PVtdLGI9dGhpcy50YWJsZSx3PSIiLF89MCxUPTAsRT0wLEw9MixTPTEsQT14LnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLEk9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxEPXt5eTp7fX07Zm9yKHZhciBrIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksaykmJihELnl5W2tdPXRoaXMueXlba10pO0kuc2V0SW5wdXQocCxELnl5KSxELnl5LmxleGVyPUksRC55eS5wYXJzZXI9dGhpcyx0eXBlb2YgSS55eWxsb2M+InUiJiYoSS55eWxsb2M9e30pO3ZhciBSPUkueXlsbG9jO3gucHVzaChSKTt2YXIgQz1JLm9wdGlvbnMmJkkub3B0aW9ucy5yYW5nZXM7dHlwZW9mIEQueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9RC55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBPKEgpe2cubGVuZ3RoPWcubGVuZ3RoLTIqSCx2Lmxlbmd0aD12Lmxlbmd0aC1ILHgubGVuZ3RoPXgubGVuZ3RoLUh9byhPLCJwb3BTdGFjayIpO2Z1bmN0aW9uIE4oKXt2YXIgSDtyZXR1cm4gSD15LnBvcCgpfHxJLmxleCgpfHxTLHR5cGVvZiBIIT0ibnVtYmVyIiYmKEggaW5zdGFuY2VvZiBBcnJheSYmKHk9SCxIPXkucG9wKCkpLEg9bS5zeW1ib2xzX1tIXXx8SCksSH1vKE4sImxleCIpO2Zvcih2YXIgUCxGLEIsRyx6LFcsWj17fSxqLG9lLEssZWU7Oyl7aWYoQj1nW2cubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbQl0/Rz10aGlzLmRlZmF1bHRBY3Rpb25zW0JdOigoUD09PW51bGx8fHR5cGVvZiBQPiJ1IikmJihQPU4oKSksRz1iW0JdJiZiW0JdW1BdKSx0eXBlb2YgRz4idSJ8fCFHLmxlbmd0aHx8IUdbMF0pe3ZhciBKPSIiO2VlPVtdO2ZvcihqIGluIGJbQl0pdGhpcy50ZXJtaW5hbHNfW2pdJiZqPkwmJmVlLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tqXSsiJyIpO0kuc2hvd1Bvc2l0aW9uP0o9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoXysxKStgOgpgK0kuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtlZS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW1BdfHxQKSsiJyI6Sj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhfKzEpKyI6IFVuZXhwZWN0ZWQgIisoUD09Uz8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tQXXx8UCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoSix7dGV4dDpJLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tQXXx8UCxsaW5lOkkueXlsaW5lbm8sbG9jOlIsZXhwZWN0ZWQ6ZWV9KX1pZihHWzBdaW5zdGFuY2VvZiBBcnJheSYmRy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK0IrIiwgdG9rZW46ICIrUCk7c3dpdGNoKEdbMF0pe2Nhc2UgMTpnLnB1c2goUCksdi5wdXNoKEkueXl0ZXh0KSx4LnB1c2goSS55eWxsb2MpLGcucHVzaChHWzFdKSxQPW51bGwsRj8oUD1GLEY9bnVsbCk6KFQ9SS55eWxlbmcsdz1JLnl5dGV4dCxfPUkueXlsaW5lbm8sUj1JLnl5bGxvYyxFPjAmJkUtLSk7YnJlYWs7Y2FzZSAyOmlmKG9lPXRoaXMucHJvZHVjdGlvbnNfW0dbMV1dWzFdLFouJD12W3YubGVuZ3RoLW9lXSxaLl8kPXtmaXJzdF9saW5lOnhbeC5sZW5ndGgtKG9lfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6eFt4Lmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnhbeC5sZW5ndGgtKG9lfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnhbeC5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LEMmJihaLl8kLnJhbmdlPVt4W3gubGVuZ3RoLShvZXx8MSldLnJhbmdlWzBdLHhbeC5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxXPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShaLFt3LFQsXyxELnl5LEdbMV0sdix4XS5jb25jYXQoQSkpLHR5cGVvZiBXPCJ1IilyZXR1cm4gVztvZSYmKGc9Zy5zbGljZSgwLC0xKm9lKjIpLHY9di5zbGljZSgwLC0xKm9lKSx4PXguc2xpY2UoMCwtMSpvZSkpLGcucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tHWzFdXVswXSksdi5wdXNoKFouJCkseC5wdXNoKFouXyQpLEs9YltnW2cubGVuZ3RoLTJdXVtnW2cubGVuZ3RoLTFdXSxnLnB1c2goSyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LGg9ZnVuY3Rpb24oKXt2YXIgZD17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKG0sZyl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihtLGcpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKG0pfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24ocCxtKXtyZXR1cm4gdGhpcy55eT1tfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1wLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIHA9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPXAsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXAsdGhpcy5tYXRjaGVkKz1wO3ZhciBtPXAubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBtPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxwfSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKHApe3ZhciBtPXAubGVuZ3RoLGc9cC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXArdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLW0pLHRoaXMub2Zmc2V0LT1tO3ZhciB5PXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLGcubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1nLmxlbmd0aC0xKTt2YXIgdj10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46Zz8oZy5sZW5ndGg9PT15Lmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkreVt5Lmxlbmd0aC1nLmxlbmd0aF0ubGVuZ3RoLWdbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1tfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3ZbMF0sdlswXSt0aGlzLnl5bGVuZy1tXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24ocCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHApKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBwPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4ocC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Auc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgcD10aGlzLm1hdGNoO3JldHVybiBwLmxlbmd0aDwyMCYmKHArPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXAubGVuZ3RoKSksKHAuc3Vic3RyKDAsMjApKyhwLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIHA9dGhpcy5wYXN0SW5wdXQoKSxtPW5ldyBBcnJheShwLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHArdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK20rIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKHAsbSl7dmFyIGcseSx2O2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJih2PXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHYueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSkseT1wWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSx5JiYodGhpcy55eWxpbmVubys9eS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjp5P3lbeS5sZW5ndGgtMV0ubGVuZ3RoLXlbeS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitwWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXBbMF0sdGhpcy5tYXRjaCs9cFswXSx0aGlzLm1hdGNoZXM9cCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShwWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1wWzBdLGc9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsbSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxnKXJldHVybiBnO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciB4IGluIHYpdGhpc1t4XT12W3hdO3JldHVybiExfXJldHVybiExfSwidGVzdF9tYXRjaCIpLG5leHQ6byhmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBwLG0sZyx5O3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIHY9dGhpcy5fY3VycmVudFJ1bGVzKCkseD0wO3g8di5sZW5ndGg7eCsrKWlmKGc9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1t2W3hdXSksZyYmKCFtfHxnWzBdLmxlbmd0aD5tWzBdLmxlbmd0aCkpe2lmKG09Zyx5PXgsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYocD10aGlzLnRlc3RfbWF0Y2goZyx2W3hdKSxwIT09ITEpcmV0dXJuIHA7aWYodGhpcy5fYmFja3RyYWNrKXttPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIG0/KHA9dGhpcy50ZXN0X21hdGNoKG0sdlt5XSkscCE9PSExP3A6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LCJuZXh0IiksbGV4Om8oZnVuY3Rpb24oKXt2YXIgbT10aGlzLm5leHQoKTtyZXR1cm4gbXx8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24obSl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKG0pfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIG09dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gbT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sInBvcFN0YXRlIiksX2N1cnJlbnRSdWxlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sIl9jdXJyZW50UnVsZXMiKSx0b3BTdGF0ZTpvKGZ1bmN0aW9uKG0pe3JldHVybiBtPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMobXx8MCksbT49MD90aGlzLmNvbmRpdGlvblN0YWNrW21dOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24obSl7dGhpcy5iZWdpbihtKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKG0sZyx5LHYpe3ZhciB4PXY7c3dpdGNoKHkpe2Nhc2UgMDpicmVhaztjYXNlIDE6YnJlYWs7Y2FzZSAyOnJldHVybiAxMDtjYXNlIDM6YnJlYWs7Y2FzZSA0OmJyZWFrO2Nhc2UgNTpyZXR1cm4gNDtjYXNlIDY6cmV0dXJuIDExO2Nhc2UgNzpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMTI7YnJlYWs7Y2FzZSA4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSA5OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwxNDticmVhaztjYXNlIDEwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7YnJlYWs7Y2FzZSAxMTp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAxMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMzpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAxNDpyZXR1cm4gMTc7Y2FzZSAxNTpyZXR1cm4gMTg7Y2FzZSAxNjpyZXR1cm4gMTk7Y2FzZSAxNzpyZXR1cm4iOiI7Y2FzZSAxODpyZXR1cm4gNjtjYXNlIDE5OnJldHVybiJJTlZBTElEIn19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzolKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OmpvdXJuZXlcYikvaSwvXig/OnRpdGxlXHNbXiNcbjtdKykvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86c2VjdGlvblxzW14jOlxuO10rKS9pLC9eKD86W14jOlxuO10rKS9pLC9eKD86OlteI1xuO10rKS9pLC9eKD86OikvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMTIsMTNdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbMTBdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbOF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw3LDksMTEsMTQsMTUsMTYsMTcsMTgsMTldLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gZH0oKTt1LmxleGVyPWg7ZnVuY3Rpb24gZigpe3RoaXMueXk9e319cmV0dXJuIG8oZiwiUGFyc2VyIiksZi5wcm90b3R5cGU9dSx1LlBhcnNlcj1mLG5ldyBmfSgpO2RQLnBhcnNlcj1kUDtfMGU9ZFB9KTt2YXIgYTEscFAsVngsVXgsZlllLGRZZSxwWWUsbVllLGdZZSx5WWUsdlllLEQwZSx4WWUsbVAsTjBlPU0oKCk9PnsidXNlIHN0cmljdCI7VnQoKTtBaSgpO2ExPSIiLHBQPVtdLFZ4PVtdLFV4PVtdLGZZZT1vKGZ1bmN0aW9uKCl7cFAubGVuZ3RoPTAsVngubGVuZ3RoPTAsYTE9IiIsVXgubGVuZ3RoPTAsTHIoKX0sImNsZWFyIiksZFllPW8oZnVuY3Rpb24odCl7YTE9dCxwUC5wdXNoKHQpfSwiYWRkU2VjdGlvbiIpLHBZZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIHBQfSwiZ2V0U2VjdGlvbnMiKSxtWWU9byhmdW5jdGlvbigpe2xldCB0PUQwZSgpLGU9MTAwLHI9MDtmb3IoOyF0JiZyPGU7KXQ9RDBlKCkscisrO3JldHVybiBWeC5wdXNoKC4uLlV4KSxWeH0sImdldFRhc2tzIiksZ1llPW8oZnVuY3Rpb24oKXtsZXQgdD1bXTtyZXR1cm4gVnguZm9yRWFjaChyPT57ci5wZW9wbGUmJnQucHVzaCguLi5yLnBlb3BsZSl9KSxbLi4ubmV3IFNldCh0KV0uc29ydCgpfSwidXBkYXRlQWN0b3JzIikseVllPW8oZnVuY3Rpb24odCxlKXtsZXQgcj1lLnN1YnN0cigxKS5zcGxpdCgiOiIpLG49MCxpPVtdO3IubGVuZ3RoPT09MT8obj1OdW1iZXIoclswXSksaT1bXSk6KG49TnVtYmVyKHJbMF0pLGk9clsxXS5zcGxpdCgiLCIpKTtsZXQgYT1pLm1hcChsPT5sLnRyaW0oKSkscz17c2VjdGlvbjphMSx0eXBlOmExLHBlb3BsZTphLHRhc2s6dCxzY29yZTpufTtVeC5wdXNoKHMpfSwiYWRkVGFzayIpLHZZZT1vKGZ1bmN0aW9uKHQpe2xldCBlPXtzZWN0aW9uOmExLHR5cGU6YTEsZGVzY3JpcHRpb246dCx0YXNrOnQsY2xhc3NlczpbXX07VngucHVzaChlKX0sImFkZFRhc2tPcmciKSxEMGU9byhmdW5jdGlvbigpe2xldCB0PW8oZnVuY3Rpb24ocil7cmV0dXJuIFV4W3JdLnByb2Nlc3NlZH0sImNvbXBpbGVUYXNrIiksZT0hMDtmb3IobGV0W3Isbl1vZiBVeC5lbnRyaWVzKCkpdChyKSxlPWUmJm4ucHJvY2Vzc2VkO3JldHVybiBlfSwiY29tcGlsZVRhc2tzIikseFllPW8oZnVuY3Rpb24oKXtyZXR1cm4gZ1llKCl9LCJnZXRBY3RvcnMiKSxtUD17Z2V0Q29uZmlnOm8oKCk9PnBlKCkuam91cm5leSwiZ2V0Q29uZmlnIiksY2xlYXI6ZlllLHNldERpYWdyYW1UaXRsZTpjbixnZXREaWFncmFtVGl0bGU6SnIsc2V0QWNjVGl0bGU6TXIsZ2V0QWNjVGl0bGU6QnIsc2V0QWNjRGVzY3JpcHRpb246RnIsZ2V0QWNjRGVzY3JpcHRpb246enIsYWRkU2VjdGlvbjpkWWUsZ2V0U2VjdGlvbnM6cFllLGdldFRhc2tzOm1ZZSxhZGRUYXNrOnlZZSxhZGRUYXNrT3JnOnZZZSxnZXRBY3RvcnM6eFllfX0pO3ZhciBiWWUsUjBlLE0wZT1NKCgpPT57InVzZSBzdHJpY3QiO2JZZT1vKHQ9PmAubGFiZWwgewogICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTsKICAgIGNvbG9yOiAke3QudGV4dENvbG9yfTsKICB9CiAgLm1vdXRoIHsKICAgIHN0cm9rZTogIzY2NjsKICB9CgogIGxpbmUgewogICAgc3Ryb2tlOiAke3QudGV4dENvbG9yfQogIH0KCiAgLmxlZ2VuZCB7CiAgICBmaWxsOiAke3QudGV4dENvbG9yfTsKICB9CgogIC5sYWJlbCB0ZXh0IHsKICAgIGZpbGw6ICMzMzM7CiAgfQogIC5sYWJlbCB7CiAgICBjb2xvcjogJHt0LnRleHRDb2xvcn0KICB9CgogIC5mYWNlIHsKICAgICR7dC5mYWNlQ29sb3I/YGZpbGw6ICR7dC5mYWNlQ29sb3J9YDoiZmlsbDogI0ZGRjhEQyJ9OwogICAgc3Ryb2tlOiAjOTk5OwogIH0KCiAgLm5vZGUgcmVjdCwKICAubm9kZSBjaXJjbGUsCiAgLm5vZGUgZWxsaXBzZSwKICAubm9kZSBwb2x5Z29uLAogIC5ub2RlIHBhdGggewogICAgZmlsbDogJHt0Lm1haW5Ca2d9OwogICAgc3Ryb2tlOiAke3Qubm9kZUJvcmRlcn07CiAgICBzdHJva2Utd2lkdGg6IDFweDsKICB9CgogIC5ub2RlIC5sYWJlbCB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQogIC5ub2RlLmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgfQoKICAuYXJyb3doZWFkUGF0aCB7CiAgICBmaWxsOiAke3QuYXJyb3doZWFkQ29sb3J9OwogIH0KCiAgLmVkZ2VQYXRoIC5wYXRoIHsKICAgIHN0cm9rZTogJHt0LmxpbmVDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDEuNXB4OwogIH0KCiAgLmZsb3djaGFydC1saW5rIHsKICAgIHN0cm9rZTogJHt0LmxpbmVDb2xvcn07CiAgICBmaWxsOiBub25lOwogIH0KCiAgLmVkZ2VMYWJlbCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3QuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICByZWN0IHsKICAgICAgb3BhY2l0eTogMC41OwogICAgfQogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KCiAgLmNsdXN0ZXIgcmVjdCB7CiAgfQoKICAuY2x1c3RlciB0ZXh0IHsKICAgIGZpbGw6ICR7dC50aXRsZUNvbG9yfTsKICB9CgogIGRpdi5tZXJtYWlkVG9vbHRpcCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBtYXgtd2lkdGg6IDIwMHB4OwogICAgcGFkZGluZzogMnB4OwogICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGJhY2tncm91bmQ6ICR7dC50ZXJ0aWFyeUNvbG9yfTsKICAgIGJvcmRlcjogMXB4IHNvbGlkICR7dC5ib3JkZXIyfTsKICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgei1pbmRleDogMTAwOwogIH0KCiAgLnRhc2stdHlwZS0wLCAuc2VjdGlvbi10eXBlLTAgIHsKICAgICR7dC5maWxsVHlwZTA/YGZpbGw6ICR7dC5maWxsVHlwZTB9YDoiIn07CiAgfQogIC50YXNrLXR5cGUtMSwgLnNlY3Rpb24tdHlwZS0xICB7CiAgICAke3QuZmlsbFR5cGUwP2BmaWxsOiAke3QuZmlsbFR5cGUxfWA6IiJ9OwogIH0KICAudGFzay10eXBlLTIsIC5zZWN0aW9uLXR5cGUtMiAgewogICAgJHt0LmZpbGxUeXBlMD9gZmlsbDogJHt0LmZpbGxUeXBlMn1gOiIifTsKICB9CiAgLnRhc2stdHlwZS0zLCAuc2VjdGlvbi10eXBlLTMgIHsKICAgICR7dC5maWxsVHlwZTA/YGZpbGw6ICR7dC5maWxsVHlwZTN9YDoiIn07CiAgfQogIC50YXNrLXR5cGUtNCwgLnNlY3Rpb24tdHlwZS00ICB7CiAgICAke3QuZmlsbFR5cGUwP2BmaWxsOiAke3QuZmlsbFR5cGU0fWA6IiJ9OwogIH0KICAudGFzay10eXBlLTUsIC5zZWN0aW9uLXR5cGUtNSAgewogICAgJHt0LmZpbGxUeXBlMD9gZmlsbDogJHt0LmZpbGxUeXBlNX1gOiIifTsKICB9CiAgLnRhc2stdHlwZS02LCAuc2VjdGlvbi10eXBlLTYgIHsKICAgICR7dC5maWxsVHlwZTA/YGZpbGw6ICR7dC5maWxsVHlwZTZ9YDoiIn07CiAgfQogIC50YXNrLXR5cGUtNywgLnNlY3Rpb24tdHlwZS03ICB7CiAgICAke3QuZmlsbFR5cGUwP2BmaWxsOiAke3QuZmlsbFR5cGU3fWA6IiJ9OwogIH0KCiAgLmFjdG9yLTAgewogICAgJHt0LmFjdG9yMD9gZmlsbDogJHt0LmFjdG9yMH1gOiIifTsKICB9CiAgLmFjdG9yLTEgewogICAgJHt0LmFjdG9yMT9gZmlsbDogJHt0LmFjdG9yMX1gOiIifTsKICB9CiAgLmFjdG9yLTIgewogICAgJHt0LmFjdG9yMj9gZmlsbDogJHt0LmFjdG9yMn1gOiIifTsKICB9CiAgLmFjdG9yLTMgewogICAgJHt0LmFjdG9yMz9gZmlsbDogJHt0LmFjdG9yM31gOiIifTsKICB9CiAgLmFjdG9yLTQgewogICAgJHt0LmFjdG9yND9gZmlsbDogJHt0LmFjdG9yNH1gOiIifTsKICB9CiAgLmFjdG9yLTUgewogICAgJHt0LmFjdG9yNT9gZmlsbDogJHt0LmFjdG9yNX1gOiIifTsKICB9CmAsImdldFN0eWxlcyIpLFIwZT1iWWV9KTt2YXIgZ1Asd1llLE8wZSxQMGUsVFllLGtZZSxJMGUsRVllLFNZZSxCMGUsQ1llLHMxLEYwZT1NKCgpPT57InVzZSBzdHJpY3QiO3ByKCk7bHYoKTtnUD1vKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFNkKHQsZSl9LCJkcmF3UmVjdCIpLHdZZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IG49dC5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixlLmN4KS5hdHRyKCJjeSIsZS5jeSkuYXR0cigiY2xhc3MiLCJmYWNlIikuYXR0cigiciIsMTUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigib3ZlcmZsb3ciLCJ2aXNpYmxlIiksaT10LmFwcGVuZCgiZyIpO2kuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsZS5jeC0xNS8zKS5hdHRyKCJjeSIsZS5jeS0xNS8zKS5hdHRyKCJyIiwxLjUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigiZmlsbCIsIiM2NjYiKS5hdHRyKCJzdHJva2UiLCIjNjY2IiksaS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixlLmN4KzE1LzMpLmF0dHIoImN5IixlLmN5LTE1LzMpLmF0dHIoInIiLDEuNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJmaWxsIiwiIzY2NiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKTtmdW5jdGlvbiBhKHUpe2xldCBoPURsKCkuc3RhcnRBbmdsZShNYXRoLlBJLzIpLmVuZEFuZ2xlKDMqKE1hdGguUEkvMikpLmlubmVyUmFkaXVzKDcuNSkub3V0ZXJSYWRpdXMoNi44MTgxODE4MTgxODE4MTc1KTt1LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJkIixoKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitlLmN4KyIsIisoZS5jeSsyKSsiKSIpfW8oYSwic21pbGUiKTtmdW5jdGlvbiBzKHUpe2xldCBoPURsKCkuc3RhcnRBbmdsZSgzKk1hdGguUEkvMikuZW5kQW5nbGUoNSooTWF0aC5QSS8yKSkuaW5uZXJSYWRpdXMoNy41KS5vdXRlclJhZGl1cyg2LjgxODE4MTgxODE4MTgxNzUpO3UuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoImQiLGgpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2UuY3grIiwiKyhlLmN5KzcpKyIpIil9byhzLCJzYWQiKTtmdW5jdGlvbiBsKHUpe3UuYXBwZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoInN0cm9rZSIsMikuYXR0cigieDEiLGUuY3gtNSkuYXR0cigieTEiLGUuY3krNykuYXR0cigieDIiLGUuY3grNSkuYXR0cigieTIiLGUuY3krNykuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKX1yZXR1cm4gbyhsLCJhbWJpdmFsZW50IiksZS5zY29yZT4zP2EoaSk6ZS5zY29yZTwzP3MoaSk6bChpKSxufSwiZHJhd0ZhY2UiKSxPMGU9byhmdW5jdGlvbih0LGUpe2xldCByPXQuYXBwZW5kKCJjaXJjbGUiKTtyZXR1cm4gci5hdHRyKCJjeCIsZS5jeCksci5hdHRyKCJjeSIsZS5jeSksci5hdHRyKCJjbGFzcyIsImFjdG9yLSIrZS5wb3MpLHIuYXR0cigiZmlsbCIsZS5maWxsKSxyLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLHIuYXR0cigiciIsZS5yKSxyLmNsYXNzIT09dm9pZCAwJiZyLmF0dHIoImNsYXNzIixyLmNsYXNzKSxlLnRpdGxlIT09dm9pZCAwJiZyLmFwcGVuZCgidGl0bGUiKS50ZXh0KGUudGl0bGUpLHJ9LCJkcmF3Q2lyY2xlIiksUDBlPW8oZnVuY3Rpb24odCxlKXtyZXR1cm4gQVkodCxlKX0sImRyYXdUZXh0IiksVFllPW8oZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKGksYSxzLGwsdSl7cmV0dXJuIGkrIiwiK2ErIiAiKyhpK3MpKyIsIithKyIgIisoaStzKSsiLCIrKGErbC11KSsiICIrKGkrcy11KjEuMikrIiwiKyhhK2wpKyIgIitpKyIsIisoYStsKX1vKHIsImdlblBvaW50cyIpO2xldCBuPXQuYXBwZW5kKCJwb2x5Z29uIik7bi5hdHRyKCJwb2ludHMiLHIoZS54LGUueSw1MCwyMCw3KSksbi5hdHRyKCJjbGFzcyIsImxhYmVsQm94IiksZS55PWUueStlLmxhYmVsTWFyZ2luLGUueD1lLngrLjUqZS5sYWJlbE1hcmdpbixQMGUodCxlKX0sImRyYXdMYWJlbCIpLGtZZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj10LmFwcGVuZCgiZyIpLGk9TmwoKTtpLng9ZS54LGkueT1lLnksaS5maWxsPWUuZmlsbCxpLndpZHRoPXIud2lkdGgqZS50YXNrQ291bnQrci5kaWFncmFtTWFyZ2luWCooZS50YXNrQ291bnQtMSksaS5oZWlnaHQ9ci5oZWlnaHQsaS5jbGFzcz0iam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS0iK2UubnVtLGkucng9MyxpLnJ5PTMsZ1AobixpKSxCMGUocikoZS50ZXh0LG4saS54LGkueSxpLndpZHRoLGkuaGVpZ2h0LHtjbGFzczoiam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS0iK2UubnVtfSxyLGUuY29sb3VyKX0sImRyYXdTZWN0aW9uIiksSTBlPS0xLEVZZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1lLngrci53aWR0aC8yLGk9dC5hcHBlbmQoImciKTtJMGUrKztsZXQgYT0zMDArNSozMDtpLmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwidGFzayIrSTBlKS5hdHRyKCJ4MSIsbikuYXR0cigieTEiLGUueSkuYXR0cigieDIiLG4pLmF0dHIoInkyIixhKS5hdHRyKCJjbGFzcyIsInRhc2stbGluZSIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLCI0IDIiKS5hdHRyKCJzdHJva2UiLCIjNjY2Iiksd1llKGkse2N4Om4sY3k6MzAwKyg1LWUuc2NvcmUpKjMwLHNjb3JlOmUuc2NvcmV9KTtsZXQgcz1ObCgpO3MueD1lLngscy55PWUueSxzLmZpbGw9ZS5maWxsLHMud2lkdGg9ci53aWR0aCxzLmhlaWdodD1yLmhlaWdodCxzLmNsYXNzPSJ0YXNrIHRhc2stdHlwZS0iK2UubnVtLHMucng9MyxzLnJ5PTMsZ1AoaSxzKTtsZXQgbD1lLngrMTQ7ZS5wZW9wbGUuZm9yRWFjaCh1PT57bGV0IGg9ZS5hY3RvcnNbdV0uY29sb3IsZj17Y3g6bCxjeTplLnkscjo3LGZpbGw6aCxzdHJva2U6IiMwMDAiLHRpdGxlOnUscG9zOmUuYWN0b3JzW3VdLnBvc2l0aW9ufTtPMGUoaSxmKSxsKz0xMH0pLEIwZShyKShlLnRhc2ssaSxzLngscy55LHMud2lkdGgscy5oZWlnaHQse2NsYXNzOiJ0YXNrIn0scixlLmNvbG91cil9LCJkcmF3VGFzayIpLFNZZT1vKGZ1bmN0aW9uKHQsZSl7aTUodCxlKX0sImRyYXdCYWNrZ3JvdW5kUmVjdCIpLEIwZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoaSxhLHMsbCx1LGgsZixkKXtsZXQgcD1hLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLHMrdS8yKS5hdHRyKCJ5IixsK2gvMis1KS5zdHlsZSgiZm9udC1jb2xvciIsZCkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChpKTtuKHAsZil9byh0LCJieVRleHQiKTtmdW5jdGlvbiBlKGksYSxzLGwsdSxoLGYsZCxwKXtsZXR7dGFza0ZvbnRTaXplOm0sdGFza0ZvbnRGYW1pbHk6Z309ZCx5PWkuc3BsaXQoLzxiclxzKlwvPz4vZ2kpO2ZvcihsZXQgdj0wO3Y8eS5sZW5ndGg7disrKXtsZXQgeD12Km0tbSooeS5sZW5ndGgtMSkvMixiPWEuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIscyt1LzIpLmF0dHIoInkiLGwpLmF0dHIoImZpbGwiLHApLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJmb250LXNpemUiLG0pLnN0eWxlKCJmb250LWZhbWlseSIsZyk7Yi5hcHBlbmQoInRzcGFuIikuYXR0cigieCIscyt1LzIpLmF0dHIoImR5Iix4KS50ZXh0KHlbdl0pLGIuYXR0cigieSIsbCtoLzIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsImNlbnRyYWwiKSxuKGIsZil9fW8oZSwiYnlUc3BhbiIpO2Z1bmN0aW9uIHIoaSxhLHMsbCx1LGgsZixkKXtsZXQgcD1hLmFwcGVuZCgic3dpdGNoIiksZz1wLmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoIngiLHMpLmF0dHIoInkiLGwpLmF0dHIoIndpZHRoIix1KS5hdHRyKCJoZWlnaHQiLGgpLmF0dHIoInBvc2l0aW9uIiwiZml4ZWQiKS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTtnLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikuc3R5bGUoInZlcnRpY2FsLWFsaWduIiwibWlkZGxlIikudGV4dChpKSxlKGkscCxzLGwsdSxoLGYsZCksbihnLGYpfW8ociwiYnlGbyIpO2Z1bmN0aW9uIG4oaSxhKXtmb3IobGV0IHMgaW4gYSlzIGluIGEmJmkuYXR0cihzLGFbc10pfXJldHVybiBvKG4sIl9zZXRUZXh0QXR0cnMiKSxmdW5jdGlvbihpKXtyZXR1cm4gaS50ZXh0UGxhY2VtZW50PT09ImZvIj9yOmkudGV4dFBsYWNlbWVudD09PSJvbGQiP3Q6ZX19KCksQ1llPW8oZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiYXJyb3doZWFkIikuYXR0cigicmVmWCIsNSkuYXR0cigicmVmWSIsMikuYXR0cigibWFya2VyV2lkdGgiLDYpLmF0dHIoIm1hcmtlckhlaWdodCIsNCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAsMCBWIDQgTDYsMiBaIil9LCJpbml0R3JhcGhpY3MiKSxzMT17ZHJhd1JlY3Q6Z1AsZHJhd0NpcmNsZTpPMGUsZHJhd1NlY3Rpb246a1llLGRyYXdUZXh0OlAwZSxkcmF3TGFiZWw6VFllLGRyYXdUYXNrOkVZZSxkcmF3QmFja2dyb3VuZFJlY3Q6U1llLGluaXRHcmFwaGljczpDWWV9fSk7ZnVuY3Rpb24gX1llKHQpe2xldCBlPXBlKCkuam91cm5leSxyPTYwO09iamVjdC5rZXlzKHJoKS5mb3JFYWNoKG49PntsZXQgaT1yaFtuXS5jb2xvcixhPXtjeDoyMCxjeTpyLHI6NyxmaWxsOmksc3Ryb2tlOiIjMDAwIixwb3M6cmhbbl0ucG9zaXRpb259O3MxLmRyYXdDaXJjbGUodCxhKTtsZXQgcz17eDo0MCx5OnIrNyxmaWxsOiIjNjY2Iix0ZXh0Om4sdGV4dE1hcmdpbjplLmJveFRleHRNYXJnaW58NX07czEuZHJhd1RleHQodCxzKSxyKz0yMH0pfXZhciBBWWUscmgscjYsRzAsTFllLGxsLHlQLHowZSxEWWUsdlAsRzBlPU0oKCk9PnsidXNlIHN0cmljdCI7cHIoKTtGMGUoKTtWdCgpO2FpKCk7QVllPW8oZnVuY3Rpb24odCl7T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihyKXtyNltyXT10W3JdfSl9LCJzZXRDb25mIikscmg9e307byhfWWUsImRyYXdBY3RvckxlZ2VuZCIpO3I2PXBlKCkuam91cm5leSxHMD1yNi5sZWZ0TWFyZ2luLExZZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe2xldCBpPXBlKCkuam91cm5leSxhPXBlKCkuc2VjdXJpdHlMZXZlbCxzO2E9PT0ic2FuZGJveCImJihzPVZlKCIjaSIrZSkpO2xldCBsPWE9PT0ic2FuZGJveCI/VmUocy5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KTpWZSgiYm9keSIpO2xsLmluaXQoKTtsZXQgdT1sLnNlbGVjdCgiIyIrZSk7czEuaW5pdEdyYXBoaWNzKHUpO2xldCBoPW4uZGIuZ2V0VGFza3MoKSxmPW4uZGIuZ2V0RGlhZ3JhbVRpdGxlKCksZD1uLmRiLmdldEFjdG9ycygpO2ZvcihsZXQgeCBpbiByaClkZWxldGUgcmhbeF07bGV0IHA9MDtkLmZvckVhY2goeD0+e3JoW3hdPXtjb2xvcjppLmFjdG9yQ29sb3Vyc1twJWkuYWN0b3JDb2xvdXJzLmxlbmd0aF0scG9zaXRpb246cH0scCsrfSksX1llKHUpLGxsLmluc2VydCgwLDAsRzAsT2JqZWN0LmtleXMocmgpLmxlbmd0aCo1MCksRFllKHUsaCwwKTtsZXQgbT1sbC5nZXRCb3VuZHMoKTtmJiZ1LmFwcGVuZCgidGV4dCIpLnRleHQoZikuYXR0cigieCIsRzApLmF0dHIoImZvbnQtc2l6ZSIsIjRleCIpLmF0dHIoImZvbnQtd2VpZ2h0IiwiYm9sZCIpLmF0dHIoInkiLDI1KTtsZXQgZz1tLnN0b3B5LW0uc3RhcnR5KzIqaS5kaWFncmFtTWFyZ2luWSx5PUcwK20uc3RvcHgrMippLmRpYWdyYW1NYXJnaW5YO1pyKHUsZyx5LGkudXNlTWF4V2lkdGgpLHUuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLEcwKS5hdHRyKCJ5MSIsaS5oZWlnaHQqNCkuYXR0cigieDIiLHktRzAtNCkuYXR0cigieTIiLGkuaGVpZ2h0KjQpLmF0dHIoInN0cm9rZS13aWR0aCIsNCkuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCNhcnJvd2hlYWQpIik7bGV0IHY9Zj83MDowO3UuYXR0cigidmlld0JveCIsYCR7bS5zdGFydHh9IC0yNSAke3l9ICR7Zyt2fWApLHUuYXR0cigicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaW5ZTWluIG1lZXQiKSx1LmF0dHIoImhlaWdodCIsZyt2KzI1KX0sImRyYXciKSxsbD17ZGF0YTp7c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDB9LHZlcnRpY2FsUG9zOjAsc2VxdWVuY2VJdGVtczpbXSxpbml0Om8oZnVuY3Rpb24oKXt0aGlzLnNlcXVlbmNlSXRlbXM9W10sdGhpcy5kYXRhPXtzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdGhpcy52ZXJ0aWNhbFBvcz0wfSwiaW5pdCIpLHVwZGF0ZVZhbDpvKGZ1bmN0aW9uKHQsZSxyLG4pe3RbZV09PT12b2lkIDA/dFtlXT1yOnRbZV09bihyLHRbZV0pfSwidXBkYXRlVmFsIiksdXBkYXRlQm91bmRzOm8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9cGUoKS5qb3VybmV5LGE9dGhpcyxzPTA7ZnVuY3Rpb24gbCh1KXtyZXR1cm4gbyhmdW5jdGlvbihmKXtzKys7bGV0IGQ9YS5zZXF1ZW5jZUl0ZW1zLmxlbmd0aC1zKzE7YS51cGRhdGVWYWwoZiwic3RhcnR5IixlLWQqaS5ib3hNYXJnaW4sTWF0aC5taW4pLGEudXBkYXRlVmFsKGYsInN0b3B5IixuK2QqaS5ib3hNYXJnaW4sTWF0aC5tYXgpLGEudXBkYXRlVmFsKGxsLmRhdGEsInN0YXJ0eCIsdC1kKmkuYm94TWFyZ2luLE1hdGgubWluKSxhLnVwZGF0ZVZhbChsbC5kYXRhLCJzdG9weCIscitkKmkuYm94TWFyZ2luLE1hdGgubWF4KSx1IT09ImFjdGl2YXRpb24iJiYoYS51cGRhdGVWYWwoZiwic3RhcnR4Iix0LWQqaS5ib3hNYXJnaW4sTWF0aC5taW4pLGEudXBkYXRlVmFsKGYsInN0b3B4IixyK2QqaS5ib3hNYXJnaW4sTWF0aC5tYXgpLGEudXBkYXRlVmFsKGxsLmRhdGEsInN0YXJ0eSIsZS1kKmkuYm94TWFyZ2luLE1hdGgubWluKSxhLnVwZGF0ZVZhbChsbC5kYXRhLCJzdG9weSIsbitkKmkuYm94TWFyZ2luLE1hdGgubWF4KSl9LCJ1cGRhdGVJdGVtQm91bmRzIil9byhsLCJ1cGRhdGVGbiIpLHRoaXMuc2VxdWVuY2VJdGVtcy5mb3JFYWNoKGwoKSl9LCJ1cGRhdGVCb3VuZHMiKSxpbnNlcnQ6byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT1NYXRoLm1pbih0LHIpLGE9TWF0aC5tYXgodCxyKSxzPU1hdGgubWluKGUsbiksbD1NYXRoLm1heChlLG4pO3RoaXMudXBkYXRlVmFsKGxsLmRhdGEsInN0YXJ0eCIsaSxNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwobGwuZGF0YSwic3RhcnR5IixzLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChsbC5kYXRhLCJzdG9weCIsYSxNYXRoLm1heCksdGhpcy51cGRhdGVWYWwobGwuZGF0YSwic3RvcHkiLGwsTWF0aC5tYXgpLHRoaXMudXBkYXRlQm91bmRzKGkscyxhLGwpfSwiaW5zZXJ0IiksYnVtcFZlcnRpY2FsUG9zOm8oZnVuY3Rpb24odCl7dGhpcy52ZXJ0aWNhbFBvcz10aGlzLnZlcnRpY2FsUG9zK3QsdGhpcy5kYXRhLnN0b3B5PXRoaXMudmVydGljYWxQb3N9LCJidW1wVmVydGljYWxQb3MiKSxnZXRWZXJ0aWNhbFBvczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmVydGljYWxQb3N9LCJnZXRWZXJ0aWNhbFBvcyIpLGdldEJvdW5kczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YX0sImdldEJvdW5kcyIpfSx5UD1yNi5zZWN0aW9uRmlsbHMsejBlPXI2LnNlY3Rpb25Db2xvdXJzLERZZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1wZSgpLmpvdXJuZXksaT0iIixhPW4uaGVpZ2h0KjIrbi5kaWFncmFtTWFyZ2luWSxzPXIrYSxsPTAsdT0iI0NDQyIsaD0iYmxhY2siLGY9MDtmb3IobGV0W2QscF1vZiBlLmVudHJpZXMoKSl7aWYoaSE9PXAuc2VjdGlvbil7dT15UFtsJXlQLmxlbmd0aF0sZj1sJXlQLmxlbmd0aCxoPXowZVtsJXowZS5sZW5ndGhdO2xldCBnPTAseT1wLnNlY3Rpb247Zm9yKGxldCB4PWQ7eDxlLmxlbmd0aCYmZVt4XS5zZWN0aW9uPT15O3grKylnPWcrMTtsZXQgdj17eDpkKm4udGFza01hcmdpbitkKm4ud2lkdGgrRzAseTo1MCx0ZXh0OnAuc2VjdGlvbixmaWxsOnUsbnVtOmYsY29sb3VyOmgsdGFza0NvdW50Omd9O3MxLmRyYXdTZWN0aW9uKHQsdixuKSxpPXAuc2VjdGlvbixsKyt9bGV0IG09cC5wZW9wbGUucmVkdWNlKChnLHkpPT4ocmhbeV0mJihnW3ldPXJoW3ldKSxnKSx7fSk7cC54PWQqbi50YXNrTWFyZ2luK2Qqbi53aWR0aCtHMCxwLnk9cyxwLndpZHRoPW4uZGlhZ3JhbU1hcmdpblgscC5oZWlnaHQ9bi5kaWFncmFtTWFyZ2luWSxwLmNvbG91cj1oLHAuZmlsbD11LHAubnVtPWYscC5hY3RvcnM9bSxzMS5kcmF3VGFzayh0LHAsbiksbGwuaW5zZXJ0KHAueCxwLnkscC54K3Aud2lkdGgrbi50YXNrTWFyZ2luLDMwMCs1KjMwKX19LCJkcmF3VGFza3MiKSx2UD17c2V0Q29uZjpBWWUsZHJhdzpMWWV9fSk7dmFyICQwZT17fTt2cigkMGUse2RpYWdyYW06KCk9Pk5ZZX0pO3ZhciBOWWUsVjBlPU0oKCk9PnsidXNlIHN0cmljdCI7TDBlKCk7TjBlKCk7TTBlKCk7RzBlKCk7TlllPXtwYXJzZXI6XzBlLGRiOm1QLHJlbmRlcmVyOnZQLHN0eWxlczpSMGUsaW5pdDpvKHQ9Pnt2UC5zZXRDb25mKHQuam91cm5leSksbVAuY2xlYXIoKX0sImluaXQiKX19KTt2YXIgYlAsajBlLEswZT1NKCgpPT57InVzZSBzdHJpY3QiO2JQPWZ1bmN0aW9uKCl7dmFyIHQ9byhmdW5jdGlvbihwLG0sZyx5KXtmb3IoZz1nfHx7fSx5PXAubGVuZ3RoO3ktLTtnW3BbeV1dPW0pO3JldHVybiBnfSwibyIpLGU9WzYsOCwxMCwxMSwxMiwxNCwxNiwxNywyMCwyMV0scj1bMSw5XSxuPVsxLDEwXSxpPVsxLDExXSxhPVsxLDEyXSxzPVsxLDEzXSxsPVsxLDE2XSx1PVsxLDE3XSxoPXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLHRpbWVsaW5lOjQsZG9jdW1lbnQ6NSxFT0Y6NixsaW5lOjcsU1BBQ0U6OCxzdGF0ZW1lbnQ6OSxORVdMSU5FOjEwLHRpdGxlOjExLGFjY190aXRsZToxMixhY2NfdGl0bGVfdmFsdWU6MTMsYWNjX2Rlc2NyOjE0LGFjY19kZXNjcl92YWx1ZToxNSxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjE2LHNlY3Rpb246MTcscGVyaW9kX3N0YXRlbWVudDoxOCxldmVudF9zdGF0ZW1lbnQ6MTkscGVyaW9kOjIwLGV2ZW50OjIxLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJ0aW1lbGluZSIsNjoiRU9GIiw4OiJTUEFDRSIsMTA6Ik5FV0xJTkUiLDExOiJ0aXRsZSIsMTI6ImFjY190aXRsZSIsMTM6ImFjY190aXRsZV92YWx1ZSIsMTQ6ImFjY19kZXNjciIsMTU6ImFjY19kZXNjcl92YWx1ZSIsMTY6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDE3OiJzZWN0aW9uIiwyMDoicGVyaW9kIiwyMToiZXZlbnQifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzUsMF0sWzUsMl0sWzcsMl0sWzcsMV0sWzcsMV0sWzcsMV0sWzksMV0sWzksMl0sWzksMl0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzE4LDFdLFsxOSwxXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKG0sZyx5LHYseCxiLHcpe3ZhciBfPWIubGVuZ3RoLTE7c3dpdGNoKHgpe2Nhc2UgMTpyZXR1cm4gYltfLTFdO2Nhc2UgMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzOmJbXy0xXS5wdXNoKGJbX10pLHRoaXMuJD1iW18tMV07YnJlYWs7Y2FzZSA0OmNhc2UgNTp0aGlzLiQ9YltfXTticmVhaztjYXNlIDY6Y2FzZSA3OnRoaXMuJD1bXTticmVhaztjYXNlIDg6di5nZXRDb21tb25EYigpLnNldERpYWdyYW1UaXRsZShiW19dLnN1YnN0cig2KSksdGhpcy4kPWJbX10uc3Vic3RyKDYpO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9YltfXS50cmltKCksdi5nZXRDb21tb25EYigpLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMDpjYXNlIDExOnRoaXMuJD1iW19dLnRyaW0oKSx2LmdldENvbW1vbkRiKCkuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDEyOnYuYWRkU2VjdGlvbihiW19dLnN1YnN0cig4KSksdGhpcy4kPWJbX10uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgMTU6di5hZGRUYXNrKGJbX10sMCwiIiksdGhpcy4kPWJbX107YnJlYWs7Y2FzZSAxNjp2LmFkZEV2ZW50KGJbX10uc3Vic3RyKDIpKSx0aGlzLiQ9YltfXTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHQoZSxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6WzEsNl0sOTo3LDEwOlsxLDhdLDExOnIsMTI6biwxNDppLDE2OmEsMTc6cywxODoxNCwxOToxNSwyMDpsLDIxOnV9LHQoZSxbMiw3XSx7MTpbMiwxXX0pLHQoZSxbMiwzXSksezk6MTgsMTE6ciwxMjpuLDE0OmksMTY6YSwxNzpzLDE4OjE0LDE5OjE1LDIwOmwsMjE6dX0sdChlLFsyLDVdKSx0KGUsWzIsNl0pLHQoZSxbMiw4XSksezEzOlsxLDE5XX0sezE1OlsxLDIwXX0sdChlLFsyLDExXSksdChlLFsyLDEyXSksdChlLFsyLDEzXSksdChlLFsyLDE0XSksdChlLFsyLDE1XSksdChlLFsyLDE2XSksdChlLFsyLDRdKSx0KGUsWzIsOV0pLHQoZSxbMiwxMF0pXSxkZWZhdWx0QWN0aW9uczp7fSxwYXJzZUVycm9yOm8oZnVuY3Rpb24obSxnKXtpZihnLnJlY292ZXJhYmxlKXRoaXMudHJhY2UobSk7ZWxzZXt2YXIgeT1uZXcgRXJyb3IobSk7dGhyb3cgeS5oYXNoPWcseX19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihtKXt2YXIgZz10aGlzLHk9WzBdLHY9W10seD1bbnVsbF0sYj1bXSx3PXRoaXMudGFibGUsXz0iIixUPTAsRT0wLEw9MCxTPTIsQT0xLEk9Yi5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxEPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksaz17eXk6e319O2Zvcih2YXIgUiBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LFIpJiYoay55eVtSXT10aGlzLnl5W1JdKTtELnNldElucHV0KG0say55eSksay55eS5sZXhlcj1ELGsueXkucGFyc2VyPXRoaXMsdHlwZW9mIEQueXlsbG9jPiJ1IiYmKEQueXlsbG9jPXt9KTt2YXIgQz1ELnl5bGxvYztiLnB1c2goQyk7dmFyIE89RC5vcHRpb25zJiZELm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBrLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPWsueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gTihxKXt5Lmxlbmd0aD15Lmxlbmd0aC0yKnEseC5sZW5ndGg9eC5sZW5ndGgtcSxiLmxlbmd0aD1iLmxlbmd0aC1xfW8oTiwicG9wU3RhY2siKTtmdW5jdGlvbiBQKCl7dmFyIHE7cmV0dXJuIHE9di5wb3AoKXx8RC5sZXgoKXx8QSx0eXBlb2YgcSE9Im51bWJlciImJihxIGluc3RhbmNlb2YgQXJyYXkmJih2PXEscT12LnBvcCgpKSxxPWcuc3ltYm9sc19bcV18fHEpLHF9byhQLCJsZXgiKTtmb3IodmFyIEYsQixHLHosVyxaLGo9e30sb2UsSyxlZSxKOzspe2lmKEc9eVt5Lmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW0ddP3o9dGhpcy5kZWZhdWx0QWN0aW9uc1tHXTooKEY9PT1udWxsfHx0eXBlb2YgRj4idSIpJiYoRj1QKCkpLHo9d1tHXSYmd1tHXVtGXSksdHlwZW9mIHo+InUifHwhei5sZW5ndGh8fCF6WzBdKXt2YXIgSD0iIjtKPVtdO2ZvcihvZSBpbiB3W0ddKXRoaXMudGVybWluYWxzX1tvZV0mJm9lPlMmJkoucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW29lXSsiJyIpO0Quc2hvd1Bvc2l0aW9uP0g9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoVCsxKStgOgpgK0Quc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtKLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bRl18fEYpKyInIjpIPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKFQrMSkrIjogVW5leHBlY3RlZCAiKyhGPT1BPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW0ZdfHxGKSsiJyIpLHRoaXMucGFyc2VFcnJvcihILHt0ZXh0OkQubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW0ZdfHxGLGxpbmU6RC55eWxpbmVubyxsb2M6QyxleHBlY3RlZDpKfSl9aWYoelswXWluc3RhbmNlb2YgQXJyYXkmJnoubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitHKyIsIHRva2VuOiAiK0YpO3N3aXRjaCh6WzBdKXtjYXNlIDE6eS5wdXNoKEYpLHgucHVzaChELnl5dGV4dCksYi5wdXNoKEQueXlsbG9jKSx5LnB1c2goelsxXSksRj1udWxsLEI/KEY9QixCPW51bGwpOihFPUQueXlsZW5nLF89RC55eXRleHQsVD1ELnl5bGluZW5vLEM9RC55eWxsb2MsTD4wJiZMLS0pO2JyZWFrO2Nhc2UgMjppZihLPXRoaXMucHJvZHVjdGlvbnNfW3pbMV1dWzFdLGouJD14W3gubGVuZ3RoLUtdLGouXyQ9e2ZpcnN0X2xpbmU6YltiLmxlbmd0aC0oS3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmJbYi5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpiW2IubGVuZ3RoLShLfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmJbYi5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LE8mJihqLl8kLnJhbmdlPVtiW2IubGVuZ3RoLShLfHwxKV0ucmFuZ2VbMF0sYltiLmxlbmd0aC0xXS5yYW5nZVsxXV0pLFo9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KGosW18sRSxULGsueXkselsxXSx4LGJdLmNvbmNhdChJKSksdHlwZW9mIFo8InUiKXJldHVybiBaO0smJih5PXkuc2xpY2UoMCwtMSpLKjIpLHg9eC5zbGljZSgwLC0xKkspLGI9Yi5zbGljZSgwLC0xKkspKSx5LnB1c2godGhpcy5wcm9kdWN0aW9uc19belsxXV1bMF0pLHgucHVzaChqLiQpLGIucHVzaChqLl8kKSxlZT13W3lbeS5sZW5ndGgtMl1dW3lbeS5sZW5ndGgtMV1dLHkucHVzaChlZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LGY9ZnVuY3Rpb24oKXt2YXIgcD17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKGcseSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihnLHkpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGcpfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24obSxnKXtyZXR1cm4gdGhpcy55eT1nfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1tLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIG09dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPW0sdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPW0sdGhpcy5tYXRjaGVkKz1tO3ZhciBnPW0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBnPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxtfSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKG0pe3ZhciBnPW0ubGVuZ3RoLHk9bS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PW0rdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWcpLHRoaXMub2Zmc2V0LT1nO3ZhciB2PXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLHkubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT15Lmxlbmd0aC0xKTt2YXIgeD10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46eT8oeS5sZW5ndGg9PT12Lmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrdlt2Lmxlbmd0aC15Lmxlbmd0aF0ubGVuZ3RoLXlbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1nfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3hbMF0seFswXSt0aGlzLnl5bGVuZy1nXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24obSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKG0pKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBtPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4obS5sZW5ndGg+MjA/Ii4uLiI6IiIpK20uc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgbT10aGlzLm1hdGNoO3JldHVybiBtLmxlbmd0aDwyMCYmKG0rPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLW0ubGVuZ3RoKSksKG0uc3Vic3RyKDAsMjApKyhtLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIG09dGhpcy5wYXN0SW5wdXQoKSxnPW5ldyBBcnJheShtLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIG0rdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK2crIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKG0sZyl7dmFyIHksdix4O2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJih4PXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHgueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksdj1tWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSx2JiYodGhpcy55eWxpbmVubys9di5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjp2P3Zbdi5sZW5ndGgtMV0ubGVuZ3RoLXZbdi5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbittWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPW1bMF0sdGhpcy5tYXRjaCs9bVswXSx0aGlzLm1hdGNoZXM9bSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShtWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1tWzBdLHk9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZyx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSx5KXJldHVybiB5O2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBiIGluIHgpdGhpc1tiXT14W2JdO3JldHVybiExfXJldHVybiExfSwidGVzdF9tYXRjaCIpLG5leHQ6byhmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBtLGcseSx2O3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIHg9dGhpcy5fY3VycmVudFJ1bGVzKCksYj0wO2I8eC5sZW5ndGg7YisrKWlmKHk9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1t4W2JdXSkseSYmKCFnfHx5WzBdLmxlbmd0aD5nWzBdLmxlbmd0aCkpe2lmKGc9eSx2PWIsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYobT10aGlzLnRlc3RfbWF0Y2goeSx4W2JdKSxtIT09ITEpcmV0dXJuIG07aWYodGhpcy5fYmFja3RyYWNrKXtnPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGc/KG09dGhpcy50ZXN0X21hdGNoKGcseFt2XSksbSE9PSExP206ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LCJuZXh0IiksbGV4Om8oZnVuY3Rpb24oKXt2YXIgZz10aGlzLm5leHQoKTtyZXR1cm4gZ3x8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24oZyl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKGcpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gZz4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sInBvcFN0YXRlIiksX2N1cnJlbnRSdWxlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sIl9jdXJyZW50UnVsZXMiKSx0b3BTdGF0ZTpvKGZ1bmN0aW9uKGcpe3JldHVybiBnPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoZ3x8MCksZz49MD90aGlzLmNvbmRpdGlvblN0YWNrW2ddOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24oZyl7dGhpcy5iZWdpbihnKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKGcseSx2LHgpe3ZhciBiPXg7c3dpdGNoKHYpe2Nhc2UgMDpicmVhaztjYXNlIDE6YnJlYWs7Y2FzZSAyOnJldHVybiAxMDtjYXNlIDM6YnJlYWs7Y2FzZSA0OmJyZWFrO2Nhc2UgNTpyZXR1cm4gNDtjYXNlIDY6cmV0dXJuIDExO2Nhc2UgNzpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMTI7YnJlYWs7Y2FzZSA4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSA5OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwxNDticmVhaztjYXNlIDEwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7YnJlYWs7Y2FzZSAxMTp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAxMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMzpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAxNDpyZXR1cm4gMTc7Y2FzZSAxNTpyZXR1cm4gMjE7Y2FzZSAxNjpyZXR1cm4gMjA7Y2FzZSAxNzpyZXR1cm4gNjtjYXNlIDE4OnJldHVybiJJTlZBTElEIn19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzolKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OnRpbWVsaW5lXGIpL2ksL14oPzp0aXRsZVxzW15cbl0rKS9pLC9eKD86YWNjVGl0bGVccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccypce1xzKikvaSwvXig/OltcfV0pL2ksL14oPzpbXlx9XSopL2ksL14oPzpzZWN0aW9uXHNbXjpcbl0rKS9pLC9eKD86OlxzW146XG5dKykvaSwvXig/OlteIzpcbl0rKS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e2FjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMiwxM10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOlsxMF0saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOls4XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNSw2LDcsOSwxMSwxNCwxNSwxNiwxNywxOF0saW5jbHVzaXZlOiEwfX19O3JldHVybiBwfSgpO2gubGV4ZXI9ZjtmdW5jdGlvbiBkKCl7dGhpcy55eT17fX1yZXR1cm4gbyhkLCJQYXJzZXIiKSxkLnByb3RvdHlwZT1oLGguUGFyc2VyPWQsbmV3IGR9KCk7YlAucGFyc2VyPWJQO2owZT1iUH0pO3ZhciBUUD17fTt2cihUUCx7YWRkRXZlbnQ6KCk9PmFwZSxhZGRTZWN0aW9uOigpPT50cGUsYWRkVGFzazooKT0+aXBlLGFkZFRhc2tPcmc6KCk9PnNwZSxjbGVhcjooKT0+ZXBlLGRlZmF1bHQ6KCk9PkdZZSxnZXRDb21tb25EYjooKT0+SjBlLGdldFNlY3Rpb25zOigpPT5ycGUsZ2V0VGFza3M6KCk9Pm5wZX0pO3ZhciBvMSxaMGUsd1AsbjYsbDEsSjBlLGVwZSx0cGUscnBlLG5wZSxpcGUsYXBlLHNwZSxRMGUsR1llLG9wZT1NKCgpPT57InVzZSBzdHJpY3QiO0FpKCk7bzE9IiIsWjBlPTAsd1A9W10sbjY9W10sbDE9W10sSjBlPW8oKCk9Pnh5LCJnZXRDb21tb25EYiIpLGVwZT1vKGZ1bmN0aW9uKCl7d1AubGVuZ3RoPTAsbjYubGVuZ3RoPTAsbzE9IiIsbDEubGVuZ3RoPTAsTHIoKX0sImNsZWFyIiksdHBlPW8oZnVuY3Rpb24odCl7bzE9dCx3UC5wdXNoKHQpfSwiYWRkU2VjdGlvbiIpLHJwZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIHdQfSwiZ2V0U2VjdGlvbnMiKSxucGU9byhmdW5jdGlvbigpe2xldCB0PVEwZSgpLGU9MTAwLHI9MDtmb3IoOyF0JiZyPGU7KXQ9UTBlKCkscisrO3JldHVybiBuNi5wdXNoKC4uLmwxKSxuNn0sImdldFRhc2tzIiksaXBlPW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPXtpZDpaMGUrKyxzZWN0aW9uOm8xLHR5cGU6bzEsdGFzazp0LHNjb3JlOmV8fDAsZXZlbnRzOnI/W3JdOltdfTtsMS5wdXNoKG4pfSwiYWRkVGFzayIpLGFwZT1vKGZ1bmN0aW9uKHQpe2wxLmZpbmQocj0+ci5pZD09PVowZS0xKS5ldmVudHMucHVzaCh0KX0sImFkZEV2ZW50Iiksc3BlPW8oZnVuY3Rpb24odCl7bGV0IGU9e3NlY3Rpb246bzEsdHlwZTpvMSxkZXNjcmlwdGlvbjp0LHRhc2s6dCxjbGFzc2VzOltdfTtuNi5wdXNoKGUpfSwiYWRkVGFza09yZyIpLFEwZT1vKGZ1bmN0aW9uKCl7bGV0IHQ9byhmdW5jdGlvbihyKXtyZXR1cm4gbDFbcl0ucHJvY2Vzc2VkfSwiY29tcGlsZVRhc2siKSxlPSEwO2ZvcihsZXRbcixuXW9mIGwxLmVudHJpZXMoKSl0KHIpLGU9ZSYmbi5wcm9jZXNzZWQ7cmV0dXJuIGV9LCJjb21waWxlVGFza3MiKSxHWWU9e2NsZWFyOmVwZSxnZXRDb21tb25EYjpKMGUsYWRkU2VjdGlvbjp0cGUsZ2V0U2VjdGlvbnM6cnBlLGdldFRhc2tzOm5wZSxhZGRUYXNrOmlwZSxhZGRUYXNrT3JnOnNwZSxhZGRFdmVudDphcGV9fSk7ZnVuY3Rpb24gaHBlKHQsZSl7dC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9VmUodGhpcyksbj1yLnRleHQoKS5zcGxpdCgvKFxzK3w8YnI+KS8pLnJldmVyc2UoKSxpLGE9W10scz0xLjEsbD1yLmF0dHIoInkiKSx1PXBhcnNlRmxvYXQoci5hdHRyKCJkeSIpKSxoPXIudGV4dChudWxsKS5hcHBlbmQoInRzcGFuIikuYXR0cigieCIsMCkuYXR0cigieSIsbCkuYXR0cigiZHkiLHUrImVtIik7Zm9yKGxldCBmPTA7ZjxuLmxlbmd0aDtmKyspaT1uW24ubGVuZ3RoLTEtZl0sYS5wdXNoKGkpLGgudGV4dChhLmpvaW4oIiAiKS50cmltKCkpLChoLm5vZGUoKS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKT5lfHxpPT09Ijxicj4iKSYmKGEucG9wKCksaC50ZXh0KGEuam9pbigiICIpLnRyaW0oKSksaT09PSI8YnI+Ij9hPVsiIl06YT1baV0saD1yLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixsKS5hdHRyKCJkeSIscysiZW0iKS50ZXh0KGkpKX0pfXZhciAkWWUsaTYsVlllLFVZZSxjcGUsSFllLFdZZSxscGUsWVllLHFZZSxYWWUsa1AsdXBlLGpZZSxLWWUsUVllLFpZZSxBZixmcGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtwcigpOyRZZT0xMixpNj1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9dC5hcHBlbmQoInJlY3QiKTtyZXR1cm4gci5hdHRyKCJ4IixlLngpLHIuYXR0cigieSIsZS55KSxyLmF0dHIoImZpbGwiLGUuZmlsbCksci5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKSxyLmF0dHIoIndpZHRoIixlLndpZHRoKSxyLmF0dHIoImhlaWdodCIsZS5oZWlnaHQpLHIuYXR0cigicngiLGUucngpLHIuYXR0cigicnkiLGUucnkpLGUuY2xhc3MhPT12b2lkIDAmJnIuYXR0cigiY2xhc3MiLGUuY2xhc3MpLHJ9LCJkcmF3UmVjdCIpLFZZZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IG49dC5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixlLmN4KS5hdHRyKCJjeSIsZS5jeSkuYXR0cigiY2xhc3MiLCJmYWNlIikuYXR0cigiciIsMTUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigib3ZlcmZsb3ciLCJ2aXNpYmxlIiksaT10LmFwcGVuZCgiZyIpO2kuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsZS5jeC0xNS8zKS5hdHRyKCJjeSIsZS5jeS0xNS8zKS5hdHRyKCJyIiwxLjUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigiZmlsbCIsIiM2NjYiKS5hdHRyKCJzdHJva2UiLCIjNjY2IiksaS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixlLmN4KzE1LzMpLmF0dHIoImN5IixlLmN5LTE1LzMpLmF0dHIoInIiLDEuNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJmaWxsIiwiIzY2NiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKTtmdW5jdGlvbiBhKHUpe2xldCBoPURsKCkuc3RhcnRBbmdsZShNYXRoLlBJLzIpLmVuZEFuZ2xlKDMqKE1hdGguUEkvMikpLmlubmVyUmFkaXVzKDcuNSkub3V0ZXJSYWRpdXMoNi44MTgxODE4MTgxODE4MTc1KTt1LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJkIixoKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitlLmN4KyIsIisoZS5jeSsyKSsiKSIpfW8oYSwic21pbGUiKTtmdW5jdGlvbiBzKHUpe2xldCBoPURsKCkuc3RhcnRBbmdsZSgzKk1hdGguUEkvMikuZW5kQW5nbGUoNSooTWF0aC5QSS8yKSkuaW5uZXJSYWRpdXMoNy41KS5vdXRlclJhZGl1cyg2LjgxODE4MTgxODE4MTgxNzUpO3UuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoImQiLGgpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2UuY3grIiwiKyhlLmN5KzcpKyIpIil9byhzLCJzYWQiKTtmdW5jdGlvbiBsKHUpe3UuYXBwZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoInN0cm9rZSIsMikuYXR0cigieDEiLGUuY3gtNSkuYXR0cigieTEiLGUuY3krNykuYXR0cigieDIiLGUuY3grNSkuYXR0cigieTIiLGUuY3krNykuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKX1yZXR1cm4gbyhsLCJhbWJpdmFsZW50IiksZS5zY29yZT4zP2EoaSk6ZS5zY29yZTwzP3MoaSk6bChpKSxufSwiZHJhd0ZhY2UiKSxVWWU9byhmdW5jdGlvbih0LGUpe2xldCByPXQuYXBwZW5kKCJjaXJjbGUiKTtyZXR1cm4gci5hdHRyKCJjeCIsZS5jeCksci5hdHRyKCJjeSIsZS5jeSksci5hdHRyKCJjbGFzcyIsImFjdG9yLSIrZS5wb3MpLHIuYXR0cigiZmlsbCIsZS5maWxsKSxyLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLHIuYXR0cigiciIsZS5yKSxyLmNsYXNzIT09dm9pZCAwJiZyLmF0dHIoImNsYXNzIixyLmNsYXNzKSxlLnRpdGxlIT09dm9pZCAwJiZyLmFwcGVuZCgidGl0bGUiKS50ZXh0KGUudGl0bGUpLHJ9LCJkcmF3Q2lyY2xlIiksY3BlPW8oZnVuY3Rpb24odCxlKXtsZXQgcj1lLnRleHQucmVwbGFjZSgvPGJyXHMqXC8/Pi9naSwiICIpLG49dC5hcHBlbmQoInRleHQiKTtuLmF0dHIoIngiLGUueCksbi5hdHRyKCJ5IixlLnkpLG4uYXR0cigiY2xhc3MiLCJsZWdlbmQiKSxuLnN0eWxlKCJ0ZXh0LWFuY2hvciIsZS5hbmNob3IpLGUuY2xhc3MhPT12b2lkIDAmJm4uYXR0cigiY2xhc3MiLGUuY2xhc3MpO2xldCBpPW4uYXBwZW5kKCJ0c3BhbiIpO3JldHVybiBpLmF0dHIoIngiLGUueCtlLnRleHRNYXJnaW4qMiksaS50ZXh0KHIpLG59LCJkcmF3VGV4dCIpLEhZZT1vKGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihpLGEscyxsLHUpe3JldHVybiBpKyIsIithKyIgIisoaStzKSsiLCIrYSsiICIrKGkrcykrIiwiKyhhK2wtdSkrIiAiKyhpK3MtdSoxLjIpKyIsIisoYStsKSsiICIraSsiLCIrKGErbCl9byhyLCJnZW5Qb2ludHMiKTtsZXQgbj10LmFwcGVuZCgicG9seWdvbiIpO24uYXR0cigicG9pbnRzIixyKGUueCxlLnksNTAsMjAsNykpLG4uYXR0cigiY2xhc3MiLCJsYWJlbEJveCIpLGUueT1lLnkrZS5sYWJlbE1hcmdpbixlLng9ZS54Ky41KmUubGFiZWxNYXJnaW4sY3BlKHQsZSl9LCJkcmF3TGFiZWwiKSxXWWU9byhmdW5jdGlvbih0LGUscil7bGV0IG49dC5hcHBlbmQoImciKSxpPWtQKCk7aS54PWUueCxpLnk9ZS55LGkuZmlsbD1lLmZpbGwsaS53aWR0aD1yLndpZHRoLGkuaGVpZ2h0PXIuaGVpZ2h0LGkuY2xhc3M9ImpvdXJuZXktc2VjdGlvbiBzZWN0aW9uLXR5cGUtIitlLm51bSxpLnJ4PTMsaS5yeT0zLGk2KG4saSksdXBlKHIpKGUudGV4dCxuLGkueCxpLnksaS53aWR0aCxpLmhlaWdodCx7Y2xhc3M6ImpvdXJuZXktc2VjdGlvbiBzZWN0aW9uLXR5cGUtIitlLm51bX0scixlLmNvbG91cil9LCJkcmF3U2VjdGlvbiIpLGxwZT0tMSxZWWU9byhmdW5jdGlvbih0LGUscil7bGV0IG49ZS54K3Iud2lkdGgvMixpPXQuYXBwZW5kKCJnIik7bHBlKys7bGV0IGE9MzAwKzUqMzA7aS5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsInRhc2siK2xwZSkuYXR0cigieDEiLG4pLmF0dHIoInkxIixlLnkpLmF0dHIoIngyIixuKS5hdHRyKCJ5MiIsYSkuYXR0cigiY2xhc3MiLCJ0YXNrLWxpbmUiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJzdHJva2UtZGFzaGFycmF5IiwiNCAyIikuYXR0cigic3Ryb2tlIiwiIzY2NiIpLFZZZShpLHtjeDpuLGN5OjMwMCsoNS1lLnNjb3JlKSozMCxzY29yZTplLnNjb3JlfSk7bGV0IHM9a1AoKTtzLng9ZS54LHMueT1lLnkscy5maWxsPWUuZmlsbCxzLndpZHRoPXIud2lkdGgscy5oZWlnaHQ9ci5oZWlnaHQscy5jbGFzcz0idGFzayB0YXNrLXR5cGUtIitlLm51bSxzLnJ4PTMscy5yeT0zLGk2KGkscyksdXBlKHIpKGUudGFzayxpLHMueCxzLnkscy53aWR0aCxzLmhlaWdodCx7Y2xhc3M6InRhc2sifSxyLGUuY29sb3VyKX0sImRyYXdUYXNrIikscVllPW8oZnVuY3Rpb24odCxlKXtpNih0LHt4OmUuc3RhcnR4LHk6ZS5zdGFydHksd2lkdGg6ZS5zdG9weC1lLnN0YXJ0eCxoZWlnaHQ6ZS5zdG9weS1lLnN0YXJ0eSxmaWxsOmUuZmlsbCxjbGFzczoicmVjdCJ9KS5sb3dlcigpfSwiZHJhd0JhY2tncm91bmRSZWN0IiksWFllPW8oZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCxmaWxsOnZvaWQgMCwidGV4dC1hbmNob3IiOiJzdGFydCIsd2lkdGg6MTAwLGhlaWdodDoxMDAsdGV4dE1hcmdpbjowLHJ4OjAscnk6MH19LCJnZXRUZXh0T2JqIiksa1A9byhmdW5jdGlvbigpe3JldHVybnt4OjAseTowLHdpZHRoOjEwMCxhbmNob3I6InN0YXJ0IixoZWlnaHQ6MTAwLHJ4OjAscnk6MH19LCJnZXROb3RlUmVjdCIpLHVwZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoaSxhLHMsbCx1LGgsZixkKXtsZXQgcD1hLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLHMrdS8yKS5hdHRyKCJ5IixsK2gvMis1KS5zdHlsZSgiZm9udC1jb2xvciIsZCkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChpKTtuKHAsZil9byh0LCJieVRleHQiKTtmdW5jdGlvbiBlKGksYSxzLGwsdSxoLGYsZCxwKXtsZXR7dGFza0ZvbnRTaXplOm0sdGFza0ZvbnRGYW1pbHk6Z309ZCx5PWkuc3BsaXQoLzxiclxzKlwvPz4vZ2kpO2ZvcihsZXQgdj0wO3Y8eS5sZW5ndGg7disrKXtsZXQgeD12Km0tbSooeS5sZW5ndGgtMSkvMixiPWEuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIscyt1LzIpLmF0dHIoInkiLGwpLmF0dHIoImZpbGwiLHApLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJmb250LXNpemUiLG0pLnN0eWxlKCJmb250LWZhbWlseSIsZyk7Yi5hcHBlbmQoInRzcGFuIikuYXR0cigieCIscyt1LzIpLmF0dHIoImR5Iix4KS50ZXh0KHlbdl0pLGIuYXR0cigieSIsbCtoLzIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsImNlbnRyYWwiKSxuKGIsZil9fW8oZSwiYnlUc3BhbiIpO2Z1bmN0aW9uIHIoaSxhLHMsbCx1LGgsZixkKXtsZXQgcD1hLmFwcGVuZCgic3dpdGNoIiksZz1wLmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoIngiLHMpLmF0dHIoInkiLGwpLmF0dHIoIndpZHRoIix1KS5hdHRyKCJoZWlnaHQiLGgpLmF0dHIoInBvc2l0aW9uIiwiZml4ZWQiKS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTtnLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikuc3R5bGUoInZlcnRpY2FsLWFsaWduIiwibWlkZGxlIikudGV4dChpKSxlKGkscCxzLGwsdSxoLGYsZCksbihnLGYpfW8ociwiYnlGbyIpO2Z1bmN0aW9uIG4oaSxhKXtmb3IobGV0IHMgaW4gYSlzIGluIGEmJmkuYXR0cihzLGFbc10pfXJldHVybiBvKG4sIl9zZXRUZXh0QXR0cnMiKSxmdW5jdGlvbihpKXtyZXR1cm4gaS50ZXh0UGxhY2VtZW50PT09ImZvIj9yOmkudGV4dFBsYWNlbWVudD09PSJvbGQiP3Q6ZX19KCksalllPW8oZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiYXJyb3doZWFkIikuYXR0cigicmVmWCIsNSkuYXR0cigicmVmWSIsMikuYXR0cigibWFya2VyV2lkdGgiLDYpLmF0dHIoIm1hcmtlckhlaWdodCIsNCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAsMCBWIDQgTDYsMiBaIil9LCJpbml0R3JhcGhpY3MiKTtvKGhwZSwid3JhcCIpO0tZZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe2xldCBpPXIlJFllLTEsYT10LmFwcGVuZCgiZyIpO2Uuc2VjdGlvbj1pLGEuYXR0cigiY2xhc3MiLChlLmNsYXNzP2UuY2xhc3MrIiAiOiIiKSsidGltZWxpbmUtbm9kZSAiKygic2VjdGlvbi0iK2kpKTtsZXQgcz1hLmFwcGVuZCgiZyIpLGw9YS5hcHBlbmQoImciKSxoPWwuYXBwZW5kKCJ0ZXh0IikudGV4dChlLmRlc2NyKS5hdHRyKCJkeSIsIjFlbSIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5jYWxsKGhwZSxlLndpZHRoKS5ub2RlKCkuZ2V0QkJveCgpLGY9bi5mb250U2l6ZT8ucmVwbGFjZT9uLmZvbnRTaXplLnJlcGxhY2UoInB4IiwiIik6bi5mb250U2l6ZTtyZXR1cm4gZS5oZWlnaHQ9aC5oZWlnaHQrZioxLjEqLjUrZS5wYWRkaW5nLGUuaGVpZ2h0PU1hdGgubWF4KGUuaGVpZ2h0LGUubWF4SGVpZ2h0KSxlLndpZHRoPWUud2lkdGgrMiplLnBhZGRpbmcsbC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitlLndpZHRoLzIrIiwgIitlLnBhZGRpbmcvMisiKSIpLFpZZShzLGUsaSxuKSxlfSwiZHJhd05vZGUiKSxRWWU9byhmdW5jdGlvbih0LGUscil7bGV0IG49dC5hcHBlbmQoImciKSxhPW4uYXBwZW5kKCJ0ZXh0IikudGV4dChlLmRlc2NyKS5hdHRyKCJkeSIsIjFlbSIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5jYWxsKGhwZSxlLndpZHRoKS5ub2RlKCkuZ2V0QkJveCgpLHM9ci5mb250U2l6ZT8ucmVwbGFjZT9yLmZvbnRTaXplLnJlcGxhY2UoInB4IiwiIik6ci5mb250U2l6ZTtyZXR1cm4gbi5yZW1vdmUoKSxhLmhlaWdodCtzKjEuMSouNStlLnBhZGRpbmd9LCJnZXRWaXJ0dWFsTm9kZUhlaWdodCIpLFpZZT1vKGZ1bmN0aW9uKHQsZSxyKXt0LmFwcGVuZCgicGF0aCIpLmF0dHIoImlkIiwibm9kZS0iK2UuaWQpLmF0dHIoImNsYXNzIiwibm9kZS1ia2cgbm9kZS0iK2UudHlwZSkuYXR0cigiZCIsYE0wICR7ZS5oZWlnaHQtNX0gdiR7LWUuaGVpZ2h0KzIqNX0gcTAsLTUgNSwtNSBoJHtlLndpZHRoLTIqNX0gcTUsMCA1LDUgdiR7ZS5oZWlnaHQtNX0gSDAgWmApLHQuYXBwZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLCJub2RlLWxpbmUtIityKS5hdHRyKCJ4MSIsMCkuYXR0cigieTEiLGUuaGVpZ2h0KS5hdHRyKCJ4MiIsZS53aWR0aCkuYXR0cigieTIiLGUuaGVpZ2h0KX0sImRlZmF1bHRCa2ciKSxBZj17ZHJhd1JlY3Q6aTYsZHJhd0NpcmNsZTpVWWUsZHJhd1NlY3Rpb246V1llLGRyYXdUZXh0OmNwZSxkcmF3TGFiZWw6SFllLGRyYXdUYXNrOllZZSxkcmF3QmFja2dyb3VuZFJlY3Q6cVllLGdldFRleHRPYmo6WFllLGdldE5vdGVSZWN0OmtQLGluaXRHcmFwaGljczpqWWUsZHJhd05vZGU6S1llLGdldFZpcnR1YWxOb2RlSGVpZ2h0OlFZZX19KTt2YXIgSlllLGRwZSxlcWUscHBlLG1wZT1NKCgpPT57InVzZSBzdHJpY3QiO3ByKCk7ZnBlKCk7dXQoKTtWdCgpO2FpKCk7SlllPW8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9cGUoKSxhPWkubGVmdE1hcmdpbj8/NTA7WS5kZWJ1ZygidGltZWxpbmUiLG4uZGIpO2xldCBzPWkuc2VjdXJpdHlMZXZlbCxsO3M9PT0ic2FuZGJveCImJihsPVZlKCIjaSIrZSkpO2xldCBoPShzPT09InNhbmRib3giP1ZlKGwubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSk6VmUoImJvZHkiKSkuc2VsZWN0KCIjIitlKTtoLmFwcGVuZCgiZyIpO2xldCBmPW4uZGIuZ2V0VGFza3MoKSxkPW4uZGIuZ2V0Q29tbW9uRGIoKS5nZXREaWFncmFtVGl0bGUoKTtZLmRlYnVnKCJ0YXNrIixmKSxBZi5pbml0R3JhcGhpY3MoaCk7bGV0IHA9bi5kYi5nZXRTZWN0aW9ucygpO1kuZGVidWcoInNlY3Rpb25zIixwKTtsZXQgbT0wLGc9MCx5PTAsdj0wLHg9NTArYSxiPTUwO3Y9NTA7bGV0IHc9MCxfPSEwO3AuZm9yRWFjaChmdW5jdGlvbihBKXtsZXQgST17bnVtYmVyOncsZGVzY3I6QSxzZWN0aW9uOncsd2lkdGg6MTUwLHBhZGRpbmc6MjAsbWF4SGVpZ2h0Om19LEQ9QWYuZ2V0VmlydHVhbE5vZGVIZWlnaHQoaCxJLGkpO1kuZGVidWcoInNlY3Rpb25IZWlnaHQgYmVmb3JlIGRyYXciLEQpLG09TWF0aC5tYXgobSxEKzIwKX0pO2xldCBUPTAsRT0wO1kuZGVidWcoInRhc2tzLmxlbmd0aCIsZi5sZW5ndGgpO2ZvcihsZXRbQSxJXW9mIGYuZW50cmllcygpKXtsZXQgRD17bnVtYmVyOkEsZGVzY3I6SSxzZWN0aW9uOkkuc2VjdGlvbix3aWR0aDoxNTAscGFkZGluZzoyMCxtYXhIZWlnaHQ6Z30saz1BZi5nZXRWaXJ0dWFsTm9kZUhlaWdodChoLEQsaSk7WS5kZWJ1ZygidGFza0hlaWdodCBiZWZvcmUgZHJhdyIsayksZz1NYXRoLm1heChnLGsrMjApLFQ9TWF0aC5tYXgoVCxJLmV2ZW50cy5sZW5ndGgpO2xldCBSPTA7Zm9yKGxldCBDIG9mIEkuZXZlbnRzKXtsZXQgTz17ZGVzY3I6QyxzZWN0aW9uOkkuc2VjdGlvbixudW1iZXI6SS5zZWN0aW9uLHdpZHRoOjE1MCxwYWRkaW5nOjIwLG1heEhlaWdodDo1MH07Uis9QWYuZ2V0VmlydHVhbE5vZGVIZWlnaHQoaCxPLGkpfUU9TWF0aC5tYXgoRSxSKX1ZLmRlYnVnKCJtYXhTZWN0aW9uSGVpZ2h0IGJlZm9yZSBkcmF3IixtKSxZLmRlYnVnKCJtYXhUYXNrSGVpZ2h0IGJlZm9yZSBkcmF3IixnKSxwJiZwLmxlbmd0aD4wP3AuZm9yRWFjaChBPT57bGV0IEk9Zi5maWx0ZXIoQz0+Qy5zZWN0aW9uPT09QSksRD17bnVtYmVyOncsZGVzY3I6QSxzZWN0aW9uOncsd2lkdGg6MjAwKk1hdGgubWF4KEkubGVuZ3RoLDEpLTUwLHBhZGRpbmc6MjAsbWF4SGVpZ2h0Om19O1kuZGVidWcoInNlY3Rpb25Ob2RlIixEKTtsZXQgaz1oLmFwcGVuZCgiZyIpLFI9QWYuZHJhd05vZGUoayxELHcsaSk7WS5kZWJ1Zygic2VjdGlvbk5vZGUgb3V0cHV0IixSKSxrLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3h9LCAke3Z9KWApLGIrPW0rNTAsSS5sZW5ndGg+MCYmZHBlKGgsSSx3LHgsYixnLGksVCxFLG0sITEpLHgrPTIwMCpNYXRoLm1heChJLmxlbmd0aCwxKSxiPXYsdysrfSk6KF89ITEsZHBlKGgsZix3LHgsYixnLGksVCxFLG0sITApKTtsZXQgTD1oLm5vZGUoKS5nZXRCQm94KCk7WS5kZWJ1ZygiYm91bmRzIixMKSxkJiZoLmFwcGVuZCgidGV4dCIpLnRleHQoZCkuYXR0cigieCIsTC53aWR0aC8yLWEpLmF0dHIoImZvbnQtc2l6ZSIsIjRleCIpLmF0dHIoImZvbnQtd2VpZ2h0IiwiYm9sZCIpLmF0dHIoInkiLDIwKSx5PV8/bStnKzE1MDpnKzEwMCxoLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGluZVdyYXBwZXIiKS5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsYSkuYXR0cigieTEiLHkpLmF0dHIoIngyIixMLndpZHRoKzMqYSkuYXR0cigieTIiLHkpLmF0dHIoInN0cm9rZS13aWR0aCIsNCkuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCNhcnJvd2hlYWQpIiksSW8odm9pZCAwLGgsaS50aW1lbGluZT8ucGFkZGluZz8/NTAsaS50aW1lbGluZT8udXNlTWF4V2lkdGg/PyExKX0sImRyYXciKSxkcGU9byhmdW5jdGlvbih0LGUscixuLGksYSxzLGwsdSxoLGYpe2ZvcihsZXQgZCBvZiBlKXtsZXQgcD17ZGVzY3I6ZC50YXNrLHNlY3Rpb246cixudW1iZXI6cix3aWR0aDoxNTAscGFkZGluZzoyMCxtYXhIZWlnaHQ6YX07WS5kZWJ1ZygidGFza05vZGUiLHApO2xldCBtPXQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0YXNrV3JhcHBlciIpLHk9QWYuZHJhd05vZGUobSxwLHIscykuaGVpZ2h0O2lmKFkuZGVidWcoInRhc2tIZWlnaHQgYWZ0ZXIgZHJhdyIseSksbS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtufSwgJHtpfSlgKSxhPU1hdGgubWF4KGEseSksZC5ldmVudHMpe2xldCB2PXQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsaW5lV3JhcHBlciIpLHg9YTtpKz0xMDAseD14K2VxZSh0LGQuZXZlbnRzLHIsbixpLHMpLGktPTEwMCx2LmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixuKzE5MC8yKS5hdHRyKCJ5MSIsaSthKS5hdHRyKCJ4MiIsbisxOTAvMikuYXR0cigieTIiLGkrYSsoZj9hOmgpK3UrMTIwKS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigibWFya2VyLWVuZCIsInVybCgjYXJyb3doZWFkKSIpLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLCI1LDUiKX1uPW4rMjAwLGYmJiFzLnRpbWVsaW5lPy5kaXNhYmxlTXVsdGljb2xvciYmcisrfWk9aS0xMH0sImRyYXdUYXNrcyIpLGVxZT1vKGZ1bmN0aW9uKHQsZSxyLG4saSxhKXtsZXQgcz0wLGw9aTtpPWkrMTAwO2ZvcihsZXQgdSBvZiBlKXtsZXQgaD17ZGVzY3I6dSxzZWN0aW9uOnIsbnVtYmVyOnIsd2lkdGg6MTUwLHBhZGRpbmc6MjAsbWF4SGVpZ2h0OjUwfTtZLmRlYnVnKCJldmVudE5vZGUiLGgpO2xldCBmPXQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJldmVudFdyYXBwZXIiKSxwPUFmLmRyYXdOb2RlKGYsaCxyLGEpLmhlaWdodDtzPXMrcCxmLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke259LCAke2l9KWApLGk9aSsxMCtwfXJldHVybiBpPWwsc30sImRyYXdFdmVudHMiKSxwcGU9e3NldENvbmY6bygoKT0+e30sInNldENvbmYiKSxkcmF3OkpZZX19KTt2YXIgdHFlLHJxZSxncGUseXBlPU0oKCk9PnsidXNlIHN0cmljdCI7TG8oKTt0cWU9byh0PT57bGV0IGU9IiI7Zm9yKGxldCByPTA7cjx0LlRIRU1FX0NPTE9SX0xJTUlUO3IrKyl0WyJsaW5lQ29sb3IiK3JdPXRbImxpbmVDb2xvciIrcl18fHRbImNTY2FsZUludiIrcl0sZmEodFsibGluZUNvbG9yIityXSk/dFsibGluZUNvbG9yIityXT1fdCh0WyJsaW5lQ29sb3IiK3JdLDIwKTp0WyJsaW5lQ29sb3IiK3JdPUl0KHRbImxpbmVDb2xvciIrcl0sMjApO2ZvcihsZXQgcj0wO3I8dC5USEVNRV9DT0xPUl9MSU1JVDtyKyspe2xldCBuPSIiKygxNy0zKnIpO2UrPWAKICAgIC5zZWN0aW9uLSR7ci0xfSByZWN0LCAuc2VjdGlvbi0ke3ItMX0gcGF0aCwgLnNlY3Rpb24tJHtyLTF9IGNpcmNsZSwgLnNlY3Rpb24tJHtyLTF9IHBhdGggIHsKICAgICAgZmlsbDogJHt0WyJjU2NhbGUiK3JdfTsKICAgIH0KICAgIC5zZWN0aW9uLSR7ci0xfSB0ZXh0IHsKICAgICBmaWxsOiAke3RbImNTY2FsZUxhYmVsIityXX07CiAgICB9CiAgICAubm9kZS1pY29uLSR7ci0xfSB7CiAgICAgIGZvbnQtc2l6ZTogNDBweDsKICAgICAgY29sb3I6ICR7dFsiY1NjYWxlTGFiZWwiK3JdfTsKICAgIH0KICAgIC5zZWN0aW9uLWVkZ2UtJHtyLTF9ewogICAgICBzdHJva2U6ICR7dFsiY1NjYWxlIityXX07CiAgICB9CiAgICAuZWRnZS1kZXB0aC0ke3ItMX17CiAgICAgIHN0cm9rZS13aWR0aDogJHtufTsKICAgIH0KICAgIC5zZWN0aW9uLSR7ci0xfSBsaW5lIHsKICAgICAgc3Ryb2tlOiAke3RbImNTY2FsZUludiIrcl19IDsKICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgfQoKICAgIC5saW5lV3JhcHBlciBsaW5lewogICAgICBzdHJva2U6ICR7dFsiY1NjYWxlTGFiZWwiK3JdfSA7CiAgICB9CgogICAgLmRpc2FibGVkLCAuZGlzYWJsZWQgY2lyY2xlLCAuZGlzYWJsZWQgdGV4dCB7CiAgICAgIGZpbGw6IGxpZ2h0Z3JheTsKICAgIH0KICAgIC5kaXNhYmxlZCB0ZXh0IHsKICAgICAgZmlsbDogI2VmZWZlZjsKICAgIH0KICAgIGB9cmV0dXJuIGV9LCJnZW5TZWN0aW9ucyIpLHJxZT1vKHQ9PmAKICAuZWRnZSB7CiAgICBzdHJva2Utd2lkdGg6IDM7CiAgfQogICR7dHFlKHQpfQogIC5zZWN0aW9uLXJvb3QgcmVjdCwgLnNlY3Rpb24tcm9vdCBwYXRoLCAuc2VjdGlvbi1yb290IGNpcmNsZSAgewogICAgZmlsbDogJHt0LmdpdDB9OwogIH0KICAuc2VjdGlvbi1yb290IHRleHQgewogICAgZmlsbDogJHt0LmdpdEJyYW5jaExhYmVsMH07CiAgfQogIC5pY29uLWNvbnRhaW5lciB7CiAgICBoZWlnaHQ6MTAwJTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgfQogIC5lZGdlIHsKICAgIGZpbGw6IG5vbmU7CiAgfQogIC5ldmVudFdyYXBwZXIgIHsKICAgZmlsdGVyOiBicmlnaHRuZXNzKDEyMCUpOwogIH0KYCwiZ2V0U3R5bGVzIiksZ3BlPXJxZX0pO3ZhciB2cGU9e307dnIodnBlLHtkaWFncmFtOigpPT5ucWV9KTt2YXIgbnFlLHhwZT1NKCgpPT57InVzZSBzdHJpY3QiO0swZSgpO29wZSgpO21wZSgpO3lwZSgpO25xZT17ZGI6VFAscmVuZGVyZXI6cHBlLHBhcnNlcjpqMGUsc3R5bGVzOmdwZX19KTt2YXIgRVAsVHBlLGtwZT1NKCgpPT57InVzZSBzdHJpY3QiO0VQPWZ1bmN0aW9uKCl7dmFyIHQ9byhmdW5jdGlvbihfLFQsRSxMKXtmb3IoRT1FfHx7fSxMPV8ubGVuZ3RoO0wtLTtFW19bTF1dPVQpO3JldHVybiBFfSwibyIpLGU9WzEsNF0scj1bMSwxM10sbj1bMSwxMl0saT1bMSwxNV0sYT1bMSwxNl0scz1bMSwyMF0sbD1bMSwxOV0sdT1bNiw3LDhdLGg9WzEsMjZdLGY9WzEsMjRdLGQ9WzEsMjVdLHA9WzYsNywxMV0sbT1bMSw2LDEzLDE1LDE2LDE5LDIyXSxnPVsxLDMzXSx5PVsxLDM0XSx2PVsxLDYsNywxMSwxMywxNSwxNiwxOSwyMl0seD17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxtaW5kTWFwOjQsc3BhY2VMaW5lczo1LFNQQUNFTElORTo2LE5MOjcsTUlORE1BUDo4LGRvY3VtZW50Ojksc3RvcDoxMCxFT0Y6MTEsc3RhdGVtZW50OjEyLFNQQUNFTElTVDoxMyxub2RlOjE0LElDT046MTUsQ0xBU1M6MTYsbm9kZVdpdGhJZDoxNyxub2RlV2l0aG91dElkOjE4LE5PREVfRFNUQVJUOjE5LE5PREVfREVTQ1I6MjAsTk9ERV9ERU5EOjIxLE5PREVfSUQ6MjIsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDY6IlNQQUNFTElORSIsNzoiTkwiLDg6Ik1JTkRNQVAiLDExOiJFT0YiLDEzOiJTUEFDRUxJU1QiLDE1OiJJQ09OIiwxNjoiQ0xBU1MiLDE5OiJOT0RFX0RTVEFSVCIsMjA6Ik5PREVfREVTQ1IiLDIxOiJOT0RFX0RFTkQiLDIyOiJOT0RFX0lEIn0scHJvZHVjdGlvbnNfOlswLFszLDFdLFszLDJdLFs1LDFdLFs1LDJdLFs1LDJdLFs0LDJdLFs0LDNdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwyXSxbMTAsMl0sWzksM10sWzksMl0sWzEyLDJdLFsxMiwyXSxbMTIsMl0sWzEyLDFdLFsxMiwxXSxbMTIsMV0sWzEyLDFdLFsxMiwxXSxbMTQsMV0sWzE0LDFdLFsxOCwzXSxbMTcsMV0sWzE3LDRdXSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oVCxFLEwsUyxBLEksRCl7dmFyIGs9SS5sZW5ndGgtMTtzd2l0Y2goQSl7Y2FzZSA2OmNhc2UgNzpyZXR1cm4gUztjYXNlIDg6Uy5nZXRMb2dnZXIoKS50cmFjZSgiU3RvcCBOTCAiKTticmVhaztjYXNlIDk6Uy5nZXRMb2dnZXIoKS50cmFjZSgiU3RvcCBFT0YgIik7YnJlYWs7Y2FzZSAxMTpTLmdldExvZ2dlcigpLnRyYWNlKCJTdG9wIE5MMiAiKTticmVhaztjYXNlIDEyOlMuZ2V0TG9nZ2VyKCkudHJhY2UoIlN0b3AgRU9GMiAiKTticmVhaztjYXNlIDE1OlMuZ2V0TG9nZ2VyKCkuaW5mbygiTm9kZTogIixJW2tdLmlkKSxTLmFkZE5vZGUoSVtrLTFdLmxlbmd0aCxJW2tdLmlkLElba10uZGVzY3IsSVtrXS50eXBlKTticmVhaztjYXNlIDE2OlMuZ2V0TG9nZ2VyKCkudHJhY2UoIkljb246ICIsSVtrXSksUy5kZWNvcmF0ZU5vZGUoe2ljb246SVtrXX0pO2JyZWFrO2Nhc2UgMTc6Y2FzZSAyMTpTLmRlY29yYXRlTm9kZSh7Y2xhc3M6SVtrXX0pO2JyZWFrO2Nhc2UgMTg6Uy5nZXRMb2dnZXIoKS50cmFjZSgiU1BBQ0VMSVNUIik7YnJlYWs7Y2FzZSAxOTpTLmdldExvZ2dlcigpLnRyYWNlKCJOb2RlOiAiLElba10uaWQpLFMuYWRkTm9kZSgwLElba10uaWQsSVtrXS5kZXNjcixJW2tdLnR5cGUpO2JyZWFrO2Nhc2UgMjA6Uy5kZWNvcmF0ZU5vZGUoe2ljb246SVtrXX0pO2JyZWFrO2Nhc2UgMjU6Uy5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBmb3VuZCAuLiIsSVtrLTJdKSx0aGlzLiQ9e2lkOklbay0xXSxkZXNjcjpJW2stMV0sdHlwZTpTLmdldFR5cGUoSVtrLTJdLElba10pfTticmVhaztjYXNlIDI2OnRoaXMuJD17aWQ6SVtrXSxkZXNjcjpJW2tdLHR5cGU6Uy5ub2RlVHlwZS5ERUZBVUxUfTticmVhaztjYXNlIDI3OlMuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZm91bmQgLi4iLElbay0zXSksdGhpcy4kPXtpZDpJW2stM10sZGVzY3I6SVtrLTFdLHR5cGU6Uy5nZXRUeXBlKElbay0yXSxJW2tdKX07YnJlYWt9fSwiYW5vbnltb3VzIiksdGFibGU6W3szOjEsNDoyLDU6Myw2OlsxLDVdLDg6ZX0sezE6WzNdfSx7MTpbMiwxXX0sezQ6Niw2OlsxLDddLDc6WzEsOF0sODplfSx7NjpyLDc6WzEsMTBdLDk6OSwxMjoxMSwxMzpuLDE0OjE0LDE1OmksMTY6YSwxNzoxNywxODoxOCwxOTpzLDIyOmx9LHQodSxbMiwzXSksezE6WzIsMl19LHQodSxbMiw0XSksdCh1LFsyLDVdKSx7MTpbMiw2XSw2OnIsMTI6MjEsMTM6biwxNDoxNCwxNTppLDE2OmEsMTc6MTcsMTg6MTgsMTk6cywyMjpsfSx7NjpyLDk6MjIsMTI6MTEsMTM6biwxNDoxNCwxNTppLDE2OmEsMTc6MTcsMTg6MTgsMTk6cywyMjpsfSx7NjpoLDc6ZiwxMDoyMywxMTpkfSx0KHAsWzIsMjJdLHsxNzoxNywxODoxOCwxNDoyNywxNTpbMSwyOF0sMTY6WzEsMjldLDE5OnMsMjI6bH0pLHQocCxbMiwxOF0pLHQocCxbMiwxOV0pLHQocCxbMiwyMF0pLHQocCxbMiwyMV0pLHQocCxbMiwyM10pLHQocCxbMiwyNF0pLHQocCxbMiwyNl0sezE5OlsxLDMwXX0pLHsyMDpbMSwzMV19LHs2OmgsNzpmLDEwOjMyLDExOmR9LHsxOlsyLDddLDY6ciwxMjoyMSwxMzpuLDE0OjE0LDE1OmksMTY6YSwxNzoxNywxODoxOCwxOTpzLDIyOmx9LHQobSxbMiwxNF0sezc6ZywxMTp5fSksdCh2LFsyLDhdKSx0KHYsWzIsOV0pLHQodixbMiwxMF0pLHQocCxbMiwxNV0pLHQocCxbMiwxNl0pLHQocCxbMiwxN10pLHsyMDpbMSwzNV19LHsyMTpbMSwzNl19LHQobSxbMiwxM10sezc6ZywxMTp5fSksdCh2LFsyLDExXSksdCh2LFsyLDEyXSksezIxOlsxLDM3XX0sdChwLFsyLDI1XSksdChwLFsyLDI3XSldLGRlZmF1bHRBY3Rpb25zOnsyOlsyLDFdLDY6WzIsMl19LHBhcnNlRXJyb3I6byhmdW5jdGlvbihULEUpe2lmKEUucmVjb3ZlcmFibGUpdGhpcy50cmFjZShUKTtlbHNle3ZhciBMPW5ldyBFcnJvcihUKTt0aHJvdyBMLmhhc2g9RSxMfX0sInBhcnNlRXJyb3IiKSxwYXJzZTpvKGZ1bmN0aW9uKFQpe3ZhciBFPXRoaXMsTD1bMF0sUz1bXSxBPVtudWxsXSxJPVtdLEQ9dGhpcy50YWJsZSxrPSIiLFI9MCxDPTAsTz0wLE49MixQPTEsRj1JLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLEI9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxHPXt5eTp7fX07Zm9yKHZhciB6IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXkseikmJihHLnl5W3pdPXRoaXMueXlbel0pO0Iuc2V0SW5wdXQoVCxHLnl5KSxHLnl5LmxleGVyPUIsRy55eS5wYXJzZXI9dGhpcyx0eXBlb2YgQi55eWxsb2M+InUiJiYoQi55eWxsb2M9e30pO3ZhciBXPUIueXlsbG9jO0kucHVzaChXKTt2YXIgWj1CLm9wdGlvbnMmJkIub3B0aW9ucy5yYW5nZXM7dHlwZW9mIEcueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9Ry55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBqKGtlKXtMLmxlbmd0aD1MLmxlbmd0aC0yKmtlLEEubGVuZ3RoPUEubGVuZ3RoLWtlLEkubGVuZ3RoPUkubGVuZ3RoLWtlfW8oaiwicG9wU3RhY2siKTtmdW5jdGlvbiBvZSgpe3ZhciBrZTtyZXR1cm4ga2U9Uy5wb3AoKXx8Qi5sZXgoKXx8UCx0eXBlb2Yga2UhPSJudW1iZXIiJiYoa2UgaW5zdGFuY2VvZiBBcnJheSYmKFM9a2Usa2U9Uy5wb3AoKSksa2U9RS5zeW1ib2xzX1trZV18fGtlKSxrZX1vKG9lLCJsZXgiKTtmb3IodmFyIEssZWUsSixILHEsUSxhZT17fSx1ZSxjZSx0ZSxOZTs7KXtpZihKPUxbTC5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tKXT9IPXRoaXMuZGVmYXVsdEFjdGlvbnNbSl06KChLPT09bnVsbHx8dHlwZW9mIEs+InUiKSYmKEs9b2UoKSksSD1EW0pdJiZEW0pdW0tdKSx0eXBlb2YgSD4idSJ8fCFILmxlbmd0aHx8IUhbMF0pe3ZhciBzZT0iIjtOZT1bXTtmb3IodWUgaW4gRFtKXSl0aGlzLnRlcm1pbmFsc19bdWVdJiZ1ZT5OJiZOZS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bdWVdKyInIik7Qi5zaG93UG9zaXRpb24/c2U9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoUisxKStgOgpgK0Iuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtOZS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW0tdfHxLKSsiJyI6c2U9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoUisxKSsiOiBVbmV4cGVjdGVkICIrKEs9PVA/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bS118fEspKyInIiksdGhpcy5wYXJzZUVycm9yKHNlLHt0ZXh0OkIubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW0tdfHxLLGxpbmU6Qi55eWxpbmVubyxsb2M6VyxleHBlY3RlZDpOZX0pfWlmKEhbMF1pbnN0YW5jZW9mIEFycmF5JiZILmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrSisiLCB0b2tlbjogIitLKTtzd2l0Y2goSFswXSl7Y2FzZSAxOkwucHVzaChLKSxBLnB1c2goQi55eXRleHQpLEkucHVzaChCLnl5bGxvYyksTC5wdXNoKEhbMV0pLEs9bnVsbCxlZT8oSz1lZSxlZT1udWxsKTooQz1CLnl5bGVuZyxrPUIueXl0ZXh0LFI9Qi55eWxpbmVubyxXPUIueXlsbG9jLE8+MCYmTy0tKTticmVhaztjYXNlIDI6aWYoY2U9dGhpcy5wcm9kdWN0aW9uc19bSFsxXV1bMV0sYWUuJD1BW0EubGVuZ3RoLWNlXSxhZS5fJD17Zmlyc3RfbGluZTpJW0kubGVuZ3RoLShjZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOklbSS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpJW0kubGVuZ3RoLShjZXx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpJW0kubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxaJiYoYWUuXyQucmFuZ2U9W0lbSS5sZW5ndGgtKGNlfHwxKV0ucmFuZ2VbMF0sSVtJLmxlbmd0aC0xXS5yYW5nZVsxXV0pLFE9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KGFlLFtrLEMsUixHLnl5LEhbMV0sQSxJXS5jb25jYXQoRikpLHR5cGVvZiBRPCJ1IilyZXR1cm4gUTtjZSYmKEw9TC5zbGljZSgwLC0xKmNlKjIpLEE9QS5zbGljZSgwLC0xKmNlKSxJPUkuc2xpY2UoMCwtMSpjZSkpLEwucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tIWzFdXVswXSksQS5wdXNoKGFlLiQpLEkucHVzaChhZS5fJCksdGU9RFtMW0wubGVuZ3RoLTJdXVtMW0wubGVuZ3RoLTFdXSxMLnB1c2godGUpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9LCJwYXJzZSIpfSxiPWZ1bmN0aW9uKCl7dmFyIF89e0VPRjoxLHBhcnNlRXJyb3I6byhmdW5jdGlvbihFLEwpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoRSxMKTtlbHNlIHRocm93IG5ldyBFcnJvcihFKX0sInBhcnNlRXJyb3IiKSxzZXRJbnB1dDpvKGZ1bmN0aW9uKFQsRSl7cmV0dXJuIHRoaXMueXk9RXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9VCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30sInNldElucHV0IiksaW5wdXQ6byhmdW5jdGlvbigpe3ZhciBUPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1ULHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1ULHRoaXMubWF0Y2hlZCs9VDt2YXIgRT1ULm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gRT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksVH0sImlucHV0IiksdW5wdXQ6byhmdW5jdGlvbihUKXt2YXIgRT1ULmxlbmd0aCxMPVQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1UK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1FKSx0aGlzLm9mZnNldC09RTt2YXIgUz10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxMLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09TC5sZW5ndGgtMSk7dmFyIEE9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOkw/KEwubGVuZ3RoPT09Uy5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK1NbUy5sZW5ndGgtTC5sZW5ndGhdLmxlbmd0aC1MWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tRX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtBWzBdLEFbMF0rdGhpcy55eWxlbmctRV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSwidW5wdXQiKSxtb3JlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSwibW9yZSIpLHJlamVjdDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSwicmVqZWN0IiksbGVzczpvKGZ1bmN0aW9uKFQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShUKSl9LCJsZXNzIikscGFzdElucHV0Om8oZnVuY3Rpb24oKXt2YXIgVD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKFQubGVuZ3RoPjIwPyIuLi4iOiIiKStULnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSwicGFzdElucHV0IiksdXBjb21pbmdJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIFQ9dGhpcy5tYXRjaDtyZXR1cm4gVC5sZW5ndGg8MjAmJihUKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1ULmxlbmd0aCkpLChULnN1YnN0cigwLDIwKSsoVC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sInVwY29taW5nSW5wdXQiKSxzaG93UG9zaXRpb246byhmdW5jdGlvbigpe3ZhciBUPXRoaXMucGFzdElucHV0KCksRT1uZXcgQXJyYXkoVC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBUK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtFKyJeIn0sInNob3dQb3NpdGlvbiIpLHRlc3RfbWF0Y2g6byhmdW5jdGlvbihULEUpe3ZhciBMLFMsQTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoQT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihBLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLFM9VFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksUyYmKHRoaXMueXlsaW5lbm8rPVMubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46Uz9TW1MubGVuZ3RoLTFdLmxlbmd0aC1TW1MubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rVFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1UWzBdLHRoaXMubWF0Y2grPVRbMF0sdGhpcy5tYXRjaGVzPVQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoVFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9VFswXSxMPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLEUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksTClyZXR1cm4gTDtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgSSBpbiBBKXRoaXNbSV09QVtJXTtyZXR1cm4hMX1yZXR1cm4hMX0sInRlc3RfbWF0Y2giKSxuZXh0Om8oZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgVCxFLEwsUzt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBBPXRoaXMuX2N1cnJlbnRSdWxlcygpLEk9MDtJPEEubGVuZ3RoO0krKylpZihMPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbQVtJXV0pLEwmJighRXx8TFswXS5sZW5ndGg+RVswXS5sZW5ndGgpKXtpZihFPUwsUz1JLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKFQ9dGhpcy50ZXN0X21hdGNoKEwsQVtJXSksVCE9PSExKXJldHVybiBUO2lmKHRoaXMuX2JhY2t0cmFjayl7RT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBFPyhUPXRoaXMudGVzdF9tYXRjaChFLEFbU10pLFQhPT0hMT9UOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSwibmV4dCIpLGxleDpvKGZ1bmN0aW9uKCl7dmFyIEU9dGhpcy5uZXh0KCk7cmV0dXJuIEV8fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKEUpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChFKX0sImJlZ2luIikscG9wU3RhdGU6byhmdW5jdGlvbigpe3ZhciBFPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIEU+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LCJwb3BTdGF0ZSIpLF9jdXJyZW50UnVsZXM6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LCJfY3VycmVudFJ1bGVzIiksdG9wU3RhdGU6byhmdW5jdGlvbihFKXtyZXR1cm4gRT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKEV8fDApLEU+PTA/dGhpcy5jb25kaXRpb25TdGFja1tFXToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKEUpe3RoaXMuYmVnaW4oRSl9LCJwdXNoU3RhdGUiKSxzdGF0ZVN0YWNrU2l6ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSwic3RhdGVTdGFja1NpemUiKSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihFLEwsUyxBKXt2YXIgST1BO3N3aXRjaChTKXtjYXNlIDA6cmV0dXJuIEUuZ2V0TG9nZ2VyKCkudHJhY2UoIkZvdW5kIGNvbW1lbnQiLEwueXl0ZXh0KSw2O2JyZWFrO2Nhc2UgMTpyZXR1cm4gODtjYXNlIDI6dGhpcy5iZWdpbigiQ0xBU1MiKTticmVhaztjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNjticmVhaztjYXNlIDQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNTpFLmdldExvZ2dlcigpLnRyYWNlKCJCZWdpbiBpY29uIiksdGhpcy5iZWdpbigiSUNPTiIpO2JyZWFrO2Nhc2UgNjpyZXR1cm4gRS5nZXRMb2dnZXIoKS50cmFjZSgiU1BBQ0VMSU5FIiksNjticmVhaztjYXNlIDc6cmV0dXJuIDc7Y2FzZSA4OnJldHVybiAxNTtjYXNlIDk6RS5nZXRMb2dnZXIoKS50cmFjZSgiZW5kIGljb24iKSx0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMDpyZXR1cm4gRS5nZXRMb2dnZXIoKS50cmFjZSgiRXhwbG9kaW5nIG5vZGUiKSx0aGlzLmJlZ2luKCJOT0RFIiksMTk7YnJlYWs7Y2FzZSAxMTpyZXR1cm4gRS5nZXRMb2dnZXIoKS50cmFjZSgiQ2xvdWQiKSx0aGlzLmJlZ2luKCJOT0RFIiksMTk7YnJlYWs7Y2FzZSAxMjpyZXR1cm4gRS5nZXRMb2dnZXIoKS50cmFjZSgiRXhwbG9zaW9uIEJhbmciKSx0aGlzLmJlZ2luKCJOT0RFIiksMTk7YnJlYWs7Y2FzZSAxMzpyZXR1cm4gRS5nZXRMb2dnZXIoKS50cmFjZSgiQ2xvdWQgQmFuZyIpLHRoaXMuYmVnaW4oIk5PREUiKSwxOTticmVhaztjYXNlIDE0OnJldHVybiB0aGlzLmJlZ2luKCJOT0RFIiksMTk7YnJlYWs7Y2FzZSAxNTpyZXR1cm4gdGhpcy5iZWdpbigiTk9ERSIpLDE5O2JyZWFrO2Nhc2UgMTY6cmV0dXJuIHRoaXMuYmVnaW4oIk5PREUiKSwxOTticmVhaztjYXNlIDE3OnJldHVybiB0aGlzLmJlZ2luKCJOT0RFIiksMTk7YnJlYWs7Y2FzZSAxODpyZXR1cm4gMTM7Y2FzZSAxOTpyZXR1cm4gMjI7Y2FzZSAyMDpyZXR1cm4gMTE7Y2FzZSAyMTp0aGlzLmJlZ2luKCJOU1RSMiIpO2JyZWFrO2Nhc2UgMjI6cmV0dXJuIk5PREVfREVTQ1IiO2Nhc2UgMjM6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjQ6RS5nZXRMb2dnZXIoKS50cmFjZSgiU3RhcnRpbmcgTlNUUiIpLHRoaXMuYmVnaW4oIk5TVFIiKTticmVhaztjYXNlIDI1OnJldHVybiBFLmdldExvZ2dlcigpLnRyYWNlKCJkZXNjcmlwdGlvbjoiLEwueXl0ZXh0KSwiTk9ERV9ERVNDUiI7YnJlYWs7Y2FzZSAyNjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICkpIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAyODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICkiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDI5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksRS5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgLi4uIixMLnl5dGV4dCksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzMDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgtIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgtIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzNTpyZXR1cm4gRS5nZXRMb2dnZXIoKS50cmFjZSgiTG9uZyBkZXNjcmlwdGlvbjoiLEwueXl0ZXh0KSwyMDticmVhaztjYXNlIDM2OnJldHVybiBFLmdldExvZ2dlcigpLnRyYWNlKCJMb25nIGRlc2NyaXB0aW9uOiIsTC55eXRleHQpLDIwO2JyZWFrfX0sImFub255bW91cyIpLHJ1bGVzOlsvXig/OlxzKiUlLiopL2ksL14oPzptaW5kbWFwXGIpL2ksL14oPzo6OjopL2ksL14oPzouKykvaSwvXig/OlxuKS9pLC9eKD86OjppY29uXCgpL2ksL14oPzpbXHNdK1tcbl0pL2ksL14oPzpbXG5dKykvaSwvXig/OlteXCldKykvaSwvXig/OlwpKS9pLC9eKD86LVwpKS9pLC9eKD86XCgtKS9pLC9eKD86XClcKSkvaSwvXig/OlwpKS9pLC9eKD86XChcKCkvaSwvXig/Olx7XHspL2ksL14oPzpcKCkvaSwvXig/OlxbKS9pLC9eKD86W1xzXSspL2ksL14oPzpbXlwoXFtcblwpXHtcfV0rKS9pLC9eKD86JCkvaSwvXig/OlsiXVtgXSkvaSwvXig/OlteYCJdKykvaSwvXig/OltgXVsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0rKS9pLC9eKD86WyJdKS9pLC9eKD86W1wpXVwpKS9pLC9eKD86W1wpXSkvaSwvXig/OltcXV0pL2ksL14oPzpcfVx9KS9pLC9eKD86XCgtKS9pLC9eKD86LVwpKS9pLC9eKD86XChcKCkvaSwvXig/OlwoKS9pLC9eKD86W15cKVxdXChcfV0rKS9pLC9eKD86LisoPyFcKFwoKSkvaV0sY29uZGl0aW9uczp7Q0xBU1M6e3J1bGVzOlszLDRdLGluY2x1c2l2ZTohMX0sSUNPTjp7cnVsZXM6WzgsOV0saW5jbHVzaXZlOiExfSxOU1RSMjp7cnVsZXM6WzIyLDIzXSxpbmNsdXNpdmU6ITF9LE5TVFI6e3J1bGVzOlsyNSwyNl0saW5jbHVzaXZlOiExfSxOT0RFOntydWxlczpbMjEsMjQsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzZdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDUsNiw3LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIF99KCk7eC5sZXhlcj1iO2Z1bmN0aW9uIHcoKXt0aGlzLnl5PXt9fXJldHVybiBvKHcsIlBhcnNlciIpLHcucHJvdG90eXBlPXgseC5QYXJzZXI9dyxuZXcgd30oKTtFUC5wYXJzZXI9RVA7VHBlPUVQfSk7dmFyIFhsLEVwZSxTUCxvcWUsbHFlLGNxZSx1cWUscWksaHFlLGZxZSxkcWUscHFlLG1xZSxncWUseXFlLFNwZSxDcGU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWdCgpO2ZyKCk7dXQoKTticygpO1hsPVtdLEVwZT0wLFNQPXt9LG9xZT1vKCgpPT57WGw9W10sRXBlPTAsU1A9e319LCJjbGVhciIpLGxxZT1vKGZ1bmN0aW9uKHQpe2ZvcihsZXQgZT1YbC5sZW5ndGgtMTtlPj0wO2UtLSlpZihYbFtlXS5sZXZlbDx0KXJldHVybiBYbFtlXTtyZXR1cm4gbnVsbH0sImdldFBhcmVudCIpLGNxZT1vKCgpPT5YbC5sZW5ndGg+MD9YbFswXTpudWxsLCJnZXRNaW5kbWFwIiksdXFlPW8oKHQsZSxyLG4pPT57WS5pbmZvKCJhZGROb2RlIix0LGUscixuKTtsZXQgaT1wZSgpLGE9aS5taW5kbWFwPy5wYWRkaW5nPz91ci5taW5kbWFwLnBhZGRpbmc7c3dpdGNoKG4pe2Nhc2UgcWkuUk9VTkRFRF9SRUNUOmNhc2UgcWkuUkVDVDpjYXNlIHFpLkhFWEFHT046YSo9Mn1sZXQgcz17aWQ6RXBlKyssbm9kZUlkOmtyKGUsaSksbGV2ZWw6dCxkZXNjcjprcihyLGkpLHR5cGU6bixjaGlsZHJlbjpbXSx3aWR0aDppLm1pbmRtYXA/Lm1heE5vZGVXaWR0aD8/dXIubWluZG1hcC5tYXhOb2RlV2lkdGgscGFkZGluZzphfSxsPWxxZSh0KTtpZihsKWwuY2hpbGRyZW4ucHVzaChzKSxYbC5wdXNoKHMpO2Vsc2UgaWYoWGwubGVuZ3RoPT09MClYbC5wdXNoKHMpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCdUaGVyZSBjYW4gYmUgb25seSBvbmUgcm9vdC4gTm8gcGFyZW50IGNvdWxkIGJlIGZvdW5kIGZvciAoIicrcy5kZXNjcisnIiknKX0sImFkZE5vZGUiKSxxaT17REVGQVVMVDowLE5PX0JPUkRFUjowLFJPVU5ERURfUkVDVDoxLFJFQ1Q6MixDSVJDTEU6MyxDTE9VRDo0LEJBTkc6NSxIRVhBR09OOjZ9LGhxZT1vKCh0LGUpPT57c3dpdGNoKFkuZGVidWcoIkluIGdldCB0eXBlIix0LGUpLHQpe2Nhc2UiWyI6cmV0dXJuIHFpLlJFQ1Q7Y2FzZSIoIjpyZXR1cm4gZT09PSIpIj9xaS5ST1VOREVEX1JFQ1Q6cWkuQ0xPVUQ7Y2FzZSIoKCI6cmV0dXJuIHFpLkNJUkNMRTtjYXNlIikiOnJldHVybiBxaS5DTE9VRDtjYXNlIikpIjpyZXR1cm4gcWkuQkFORztjYXNlInt7IjpyZXR1cm4gcWkuSEVYQUdPTjtkZWZhdWx0OnJldHVybiBxaS5ERUZBVUxUfX0sImdldFR5cGUiKSxmcWU9bygodCxlKT0+e1NQW3RdPWV9LCJzZXRFbGVtZW50Rm9ySWQiKSxkcWU9byh0PT57aWYoIXQpcmV0dXJuO2xldCBlPXBlKCkscj1YbFtYbC5sZW5ndGgtMV07dC5pY29uJiYoci5pY29uPWtyKHQuaWNvbixlKSksdC5jbGFzcyYmKHIuY2xhc3M9a3IodC5jbGFzcyxlKSl9LCJkZWNvcmF0ZU5vZGUiKSxwcWU9byh0PT57c3dpdGNoKHQpe2Nhc2UgcWkuREVGQVVMVDpyZXR1cm4ibm8tYm9yZGVyIjtjYXNlIHFpLlJFQ1Q6cmV0dXJuInJlY3QiO2Nhc2UgcWkuUk9VTkRFRF9SRUNUOnJldHVybiJyb3VuZGVkLXJlY3QiO2Nhc2UgcWkuQ0lSQ0xFOnJldHVybiJjaXJjbGUiO2Nhc2UgcWkuQ0xPVUQ6cmV0dXJuImNsb3VkIjtjYXNlIHFpLkJBTkc6cmV0dXJuImJhbmciO2Nhc2UgcWkuSEVYQUdPTjpyZXR1cm4iaGV4Z29uIjtkZWZhdWx0OnJldHVybiJuby1ib3JkZXIifX0sInR5cGUyU3RyIiksbXFlPW8oKCk9PlksImdldExvZ2dlciIpLGdxZT1vKHQ9PlNQW3RdLCJnZXRFbGVtZW50QnlJZCIpLHlxZT17Y2xlYXI6b3FlLGFkZE5vZGU6dXFlLGdldE1pbmRtYXA6Y3FlLG5vZGVUeXBlOnFpLGdldFR5cGU6aHFlLHNldEVsZW1lbnRGb3JJZDpmcWUsZGVjb3JhdGVOb2RlOmRxZSx0eXBlMlN0cjpwcWUsZ2V0TG9nZ2VyOm1xZSxnZXRFbGVtZW50QnlJZDpncWV9LFNwZT15cWV9KTtmdW5jdGlvbiBLaSh0KXsiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2YiO3JldHVybiBLaT10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZ0eXBlb2YgU3ltYm9sLml0ZXJhdG9yPT0ic3ltYm9sIj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZ0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sS2kodCl9ZnVuY3Rpb24gdEIodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBBcGUodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1mdW5jdGlvbiByQih0LGUscil7cmV0dXJuIGUmJkFwZSh0LnByb3RvdHlwZSxlKSxyJiZBcGUodCxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fWZ1bmN0aW9uICRtZSh0LGUscil7cmV0dXJuIGUgaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtlXT1yLHR9ZnVuY3Rpb24gamwodCxlKXtyZXR1cm4gdnFlKHQpfHx4cWUodCxlKXx8Vm1lKHQsZSl8fGJxZSgpfWZ1bmN0aW9uIHZxZSh0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fWZ1bmN0aW9uIHhxZSh0LGUpe3ZhciByPXQ9PW51bGw/bnVsbDp0eXBlb2YgU3ltYm9sPCJ1IiYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYociE9bnVsbCl7dmFyIG49W10saT0hMCxhPSExLHMsbDt0cnl7Zm9yKHI9ci5jYWxsKHQpOyEoaT0ocz1yLm5leHQoKSkuZG9uZSkmJihuLnB1c2gocy52YWx1ZSksIShlJiZuLmxlbmd0aD09PWUpKTtpPSEwKTt9Y2F0Y2godSl7YT0hMCxsPXV9ZmluYWxseXt0cnl7IWkmJnIucmV0dXJuIT1udWxsJiZyLnJldHVybigpfWZpbmFsbHl7aWYoYSl0aHJvdyBsfX1yZXR1cm4gbn19ZnVuY3Rpb24gVm1lKHQsZSl7aWYodCl7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXJldHVybiBfcGUodCxlKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7aWYocj09PSJPYmplY3QiJiZ0LmNvbnN0cnVjdG9yJiYocj10LmNvbnN0cnVjdG9yLm5hbWUpLHI9PT0iTWFwInx8cj09PSJTZXQiKXJldHVybiBBcnJheS5mcm9tKHQpO2lmKHI9PT0iQXJndW1lbnRzInx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QocikpcmV0dXJuIF9wZSh0LGUpfX1mdW5jdGlvbiBfcGUodCxlKXsoZT09bnVsbHx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBicWUoKXt0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLgpJbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCl9ZnVuY3Rpb24gVW1lKHQsZSl7dmFyIHI9dHlwZW9mIFN5bWJvbDwidSImJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1WbWUodCkpfHxlJiZ0JiZ0eXBlb2YgdC5sZW5ndGg9PSJudW1iZXIiKXtyJiYodD1yKTt2YXIgbj0wLGk9byhmdW5jdGlvbigpe30sIkYiKTtyZXR1cm57czppLG46byhmdW5jdGlvbigpe3JldHVybiBuPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtuKytdfX0sIm4iKSxlOm8oZnVuY3Rpb24odSl7dGhyb3cgdX0sImUiKSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS4KSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApfXZhciBhPSEwLHM9ITEsbDtyZXR1cm57czpvKGZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LCJzIiksbjpvKGZ1bmN0aW9uKCl7dmFyIHU9ci5uZXh0KCk7cmV0dXJuIGE9dS5kb25lLHV9LCJuIiksZTpvKGZ1bmN0aW9uKHUpe3M9ITAsbD11fSwiZSIpLGY6byhmdW5jdGlvbigpe3RyeXshYSYmci5yZXR1cm4hPW51bGwmJnIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGx9fSwiZiIpfX1mdW5jdGlvbiBIcWUodCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIHQhPW51bGwmJihlPT0ib2JqZWN0Inx8ZT09ImZ1bmN0aW9uIil9ZnVuY3Rpb24gV3FlKHQsZSl7cmV0dXJuIGU9e2V4cG9ydHM6e319LHQoZSxlLmV4cG9ydHMpLGUuZXhwb3J0c31mdW5jdGlvbiBacWUodCl7Zm9yKHZhciBlPXQubGVuZ3RoO2UtLSYmUXFlLnRlc3QodC5jaGFyQXQoZSkpOyk7cmV0dXJuIGV9ZnVuY3Rpb24gdFhlKHQpe3JldHVybiB0JiZ0LnNsaWNlKDAsSnFlKHQpKzEpLnJlcGxhY2UoZVhlLCIiKX1mdW5jdGlvbiBzWGUodCl7dmFyIGU9aVhlLmNhbGwodCxIeCkscj10W0h4XTt0cnl7dFtIeF09dm9pZCAwO3ZhciBuPSEwfWNhdGNoe312YXIgaT1hWGUuY2FsbCh0KTtyZXR1cm4gbiYmKGU/dFtIeF09cjpkZWxldGUgdFtIeF0pLGl9ZnVuY3Rpb24gdVhlKHQpe3JldHVybiBjWGUuY2FsbCh0KX1mdW5jdGlvbiBwWGUodCl7cmV0dXJuIHQ9PW51bGw/dD09PXZvaWQgMD9kWGU6ZlhlOk5wZSYmTnBlIGluIE9iamVjdCh0KT9vWGUodCk6aFhlKHQpfWZ1bmN0aW9uIG1YZSh0KXtyZXR1cm4gdCE9bnVsbCYmdHlwZW9mIHQ9PSJvYmplY3QifWZ1bmN0aW9uIHZYZSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJzeW1ib2wifHxnWGUodCkmJlptZSh0KT09eVhlfWZ1bmN0aW9uIGtYZSh0KXtpZih0eXBlb2YgdD09Im51bWJlciIpcmV0dXJuIHQ7aWYobWIodCkpcmV0dXJuIFJwZTtpZihYMCh0KSl7dmFyIGU9dHlwZW9mIHQudmFsdWVPZj09ImZ1bmN0aW9uIj90LnZhbHVlT2YoKTp0O3Q9WDAoZSk/ZSsiIjplfWlmKHR5cGVvZiB0IT0ic3RyaW5nIilyZXR1cm4gdD09PTA/dDordDt0PXJYZSh0KTt2YXIgcj1iWGUudGVzdCh0KTtyZXR1cm4gcnx8d1hlLnRlc3QodCk/VFhlKHQuc2xpY2UoMikscj8yOjgpOnhYZS50ZXN0KHQpP1JwZTordH1mdW5jdGlvbiBBWGUodCxlLHIpe3ZhciBuLGksYSxzLGwsdSxoPTAsZj0hMSxkPSExLHA9ITA7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihFWGUpO2U9TXBlKGUpfHwwLFgwKHIpJiYoZj0hIXIubGVhZGluZyxkPSJtYXhXYWl0ImluIHIsYT1kP1NYZShNcGUoci5tYXhXYWl0KXx8MCxlKTphLHA9InRyYWlsaW5nImluIHI/ISFyLnRyYWlsaW5nOnApO2Z1bmN0aW9uIG0oRSl7dmFyIEw9bixTPWk7cmV0dXJuIG49aT12b2lkIDAsaD1FLHM9dC5hcHBseShTLEwpLHN9byhtLCJpbnZva2VGdW5jIik7ZnVuY3Rpb24gZyhFKXtyZXR1cm4gaD1FLGw9c2V0VGltZW91dCh4LGUpLGY/bShFKTpzfW8oZywibGVhZGluZ0VkZ2UiKTtmdW5jdGlvbiB5KEUpe3ZhciBMPUUtdSxTPUUtaCxBPWUtTDtyZXR1cm4gZD9DWGUoQSxhLVMpOkF9byh5LCJyZW1haW5pbmdXYWl0Iik7ZnVuY3Rpb24gdihFKXt2YXIgTD1FLXUsUz1FLWg7cmV0dXJuIHU9PT12b2lkIDB8fEw+PWV8fEw8MHx8ZCYmUz49YX1vKHYsInNob3VsZEludm9rZSIpO2Z1bmN0aW9uIHgoKXt2YXIgRT1DUCgpO2lmKHYoRSkpcmV0dXJuIGIoRSk7bD1zZXRUaW1lb3V0KHgseShFKSl9byh4LCJ0aW1lckV4cGlyZWQiKTtmdW5jdGlvbiBiKEUpe3JldHVybiBsPXZvaWQgMCxwJiZuP20oRSk6KG49aT12b2lkIDAscyl9byhiLCJ0cmFpbGluZ0VkZ2UiKTtmdW5jdGlvbiB3KCl7bCE9PXZvaWQgMCYmY2xlYXJUaW1lb3V0KGwpLGg9MCxuPXU9aT1sPXZvaWQgMH1vKHcsImNhbmNlbCIpO2Z1bmN0aW9uIF8oKXtyZXR1cm4gbD09PXZvaWQgMD9zOmIoQ1AoKSl9byhfLCJmbHVzaCIpO2Z1bmN0aW9uIFQoKXt2YXIgRT1DUCgpLEw9dihFKTtpZihuPWFyZ3VtZW50cyxpPXRoaXMsdT1FLEwpe2lmKGw9PT12b2lkIDApcmV0dXJuIGcodSk7aWYoZClyZXR1cm4gY2xlYXJUaW1lb3V0KGwpLGw9c2V0VGltZW91dCh4LGUpLG0odSl9cmV0dXJuIGw9PT12b2lkIDAmJihsPXNldFRpbWVvdXQoeCxlKSksc31yZXR1cm4gbyhULCJkZWJvdW5jZWQiKSxULmNhbmNlbD13LFQuZmx1c2g9XyxUfWZ1bmN0aW9uIFY2KHQsZSxyLG4saSxhKXt2YXIgcztyZXR1cm4gbmkodCk/cz10OnM9azFbdF18fGsxLmV1Y2xpZGVhbixlPT09MCYmbmkodCk/cyhpLGEpOnMoZSxyLG4saSxhKX1mdW5jdGlvbiB4S2UodCxlKXtpZihVNih0KSlyZXR1cm4hMTt2YXIgcj10eXBlb2YgdDtyZXR1cm4gcj09Im51bWJlciJ8fHI9PSJzeW1ib2wifHxyPT0iYm9vbGVhbiJ8fHQ9PW51bGx8fG1iKHQpPyEwOnZLZS50ZXN0KHQpfHwheUtlLnRlc3QodCl8fGUhPW51bGwmJnQgaW4gT2JqZWN0KGUpfWZ1bmN0aW9uIFNLZSh0KXtpZighWDAodCkpcmV0dXJuITE7dmFyIGU9Wm1lKHQpO3JldHVybiBlPT1US2V8fGU9PWtLZXx8ZT09d0tlfHxlPT1FS2V9ZnVuY3Rpb24gX0tlKHQpe3JldHVybiEhSnBlJiZKcGUgaW4gdH1mdW5jdGlvbiBSS2UodCl7aWYodCE9bnVsbCl7dHJ5e3JldHVybiBOS2UuY2FsbCh0KX1jYXRjaHt9dHJ5e3JldHVybiB0KyIifWNhdGNoe319cmV0dXJuIiJ9ZnVuY3Rpb24gJEtlKHQpe2lmKCFYMCh0KXx8TEtlKHQpKXJldHVybiExO3ZhciBlPUNLZSh0KT9HS2U6T0tlO3JldHVybiBlLnRlc3QoTUtlKHQpKX1mdW5jdGlvbiBVS2UodCxlKXtyZXR1cm4gdD8uW2VdfWZ1bmN0aW9uIFdLZSh0LGUpe3ZhciByPUhLZSh0LGUpO3JldHVybiBWS2Uocik/cjp2b2lkIDB9ZnVuY3Rpb24gcUtlKCl7dGhpcy5fX2RhdGFfXz1sYj9sYihudWxsKTp7fSx0aGlzLnNpemU9MH1mdW5jdGlvbiBqS2UodCl7dmFyIGU9dGhpcy5oYXModCkmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW3RdO3JldHVybiB0aGlzLnNpemUtPWU/MTowLGV9ZnVuY3Rpb24gZVFlKHQpe3ZhciBlPXRoaXMuX19kYXRhX187aWYobGIpe3ZhciByPWVbdF07cmV0dXJuIHI9PT1RS2U/dm9pZCAwOnJ9cmV0dXJuIEpLZS5jYWxsKGUsdCk/ZVt0XTp2b2lkIDB9ZnVuY3Rpb24gaVFlKHQpe3ZhciBlPXRoaXMuX19kYXRhX187cmV0dXJuIGxiP2VbdF0hPT12b2lkIDA6blFlLmNhbGwoZSx0KX1mdW5jdGlvbiBvUWUodCxlKXt2YXIgcj10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKHQpPzA6MSxyW3RdPWxiJiZlPT09dm9pZCAwP3NRZTplLHRoaXN9ZnVuY3Rpb24gQTEodCl7dmFyIGU9LTEscj10PT1udWxsPzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8cjspe3ZhciBuPXRbZV07dGhpcy5zZXQoblswXSxuWzFdKX19ZnVuY3Rpb24gY1FlKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH1mdW5jdGlvbiBoUWUodCxlKXtyZXR1cm4gdD09PWV8fHQhPT10JiZlIT09ZX1mdW5jdGlvbiBmUWUodCxlKXtmb3IodmFyIHI9dC5sZW5ndGg7ci0tOylpZihrZ2UodFtyXVswXSxlKSlyZXR1cm4gcjtyZXR1cm4tMX1mdW5jdGlvbiBtUWUodCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxyPUg2KGUsdCk7aWYocjwwKXJldHVybiExO3ZhciBuPWUubGVuZ3RoLTE7cmV0dXJuIHI9PW4/ZS5wb3AoKTpwUWUuY2FsbChlLHIsMSksLS10aGlzLnNpemUsITB9ZnVuY3Rpb24geVFlKHQpe3ZhciBlPXRoaXMuX19kYXRhX18scj1INihlLHQpO3JldHVybiByPDA/dm9pZCAwOmVbcl1bMV19ZnVuY3Rpb24geFFlKHQpe3JldHVybiBINih0aGlzLl9fZGF0YV9fLHQpPi0xfWZ1bmN0aW9uIHdRZSh0LGUpe3ZhciByPXRoaXMuX19kYXRhX18sbj1INihyLHQpO3JldHVybiBuPDA/KCsrdGhpcy5zaXplLHIucHVzaChbdCxlXSkpOnJbbl1bMV09ZSx0aGlzfWZ1bmN0aW9uIF8xKHQpe3ZhciBlPS0xLHI9dD09bnVsbD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPHI7KXt2YXIgbj10W2VdO3RoaXMuc2V0KG5bMF0sblsxXSl9fWZ1bmN0aW9uIENRZSgpe3RoaXMuc2l6ZT0wLHRoaXMuX19kYXRhX189e2hhc2g6bmV3IGVtZSxtYXA6bmV3KFNRZXx8a1FlKSxzdHJpbmc6bmV3IGVtZX19ZnVuY3Rpb24gX1FlKHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybiBlPT0ic3RyaW5nInx8ZT09Im51bWJlciJ8fGU9PSJzeW1ib2wifHxlPT0iYm9vbGVhbiI/dCE9PSJfX3Byb3RvX18iOnQ9PT1udWxsfWZ1bmN0aW9uIERRZSh0LGUpe3ZhciByPXQuX19kYXRhX187cmV0dXJuIExRZShlKT9yW3R5cGVvZiBlPT0ic3RyaW5nIj8ic3RyaW5nIjoiaGFzaCJdOnIubWFwfWZ1bmN0aW9uIE5RZSh0KXt2YXIgZT1XNih0aGlzLHQpLmRlbGV0ZSh0KTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfWZ1bmN0aW9uIE1RZSh0KXtyZXR1cm4gVzYodGhpcyx0KS5nZXQodCl9ZnVuY3Rpb24gT1FlKHQpe3JldHVybiBXNih0aGlzLHQpLmhhcyh0KX1mdW5jdGlvbiBCUWUodCxlKXt2YXIgcj1XNih0aGlzLHQpLG49ci5zaXplO3JldHVybiByLnNldCh0LGUpLHRoaXMuc2l6ZSs9ci5zaXplPT1uPzA6MSx0aGlzfWZ1bmN0aW9uIEwxKHQpe3ZhciBlPS0xLHI9dD09bnVsbD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPHI7KXt2YXIgbj10W2VdO3RoaXMuc2V0KG5bMF0sblsxXSl9fWZ1bmN0aW9uIGRCKHQsZSl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiJ8fGUhPW51bGwmJnR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoelFlKTt2YXIgcj1vKGZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzLGk9ZT9lLmFwcGx5KHRoaXMsbik6blswXSxhPXIuY2FjaGU7aWYoYS5oYXMoaSkpcmV0dXJuIGEuZ2V0KGkpO3ZhciBzPXQuYXBwbHkodGhpcyxuKTtyZXR1cm4gci5jYWNoZT1hLnNldChpLHMpfHxhLHN9LCJtZW1vaXplZCIpO3JldHVybiByLmNhY2hlPW5ldyhkQi5DYWNoZXx8RWdlKSxyfWZ1bmN0aW9uIFZRZSh0KXt2YXIgZT1HUWUodCxmdW5jdGlvbihuKXtyZXR1cm4gci5zaXplPT09JFFlJiZyLmNsZWFyKCksbn0pLHI9ZS5jYWNoZTtyZXR1cm4gZX1mdW5jdGlvbiBxUWUodCxlKXtmb3IodmFyIHI9LTEsbj10PT1udWxsPzA6dC5sZW5ndGgsaT1BcnJheShuKTsrK3I8bjspaVtyXT1lKHRbcl0scix0KTtyZXR1cm4gaX1mdW5jdGlvbiBBZ2UodCl7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXJldHVybiB0O2lmKFU2KHQpKXJldHVybiBDZ2UodCxBZ2UpKyIiO2lmKG1iKHQpKXJldHVybiBybWU/cm1lLmNhbGwodCk6IiI7dmFyIGU9dCsiIjtyZXR1cm4gZT09IjAiJiYxL3Q9PS1YUWU/Ii0wIjplfWZ1bmN0aW9uIEtRZSh0KXtyZXR1cm4gdD09bnVsbD8iIjpqUWUodCl9ZnVuY3Rpb24gUVFlKHQsZSl7cmV0dXJuIFU2KHQpP3Q6YktlKHQsZSk/W3RdOlNnZShfZ2UodCkpfWZ1bmN0aW9uIEpRZSh0KXtpZih0eXBlb2YgdD09InN0cmluZyJ8fG1iKHQpKXJldHVybiB0O3ZhciBlPXQrIiI7cmV0dXJuIGU9PSIwIiYmMS90PT0tWlFlPyItMCI6ZX1mdW5jdGlvbiBlWmUodCxlKXtlPUxnZShlLHQpO2Zvcih2YXIgcj0wLG49ZS5sZW5ndGg7dCE9bnVsbCYmcjxuOyl0PXRbcEIoZVtyKytdKV07cmV0dXJuIHImJnI9PW4/dDp2b2lkIDB9ZnVuY3Rpb24gclplKHQsZSxyKXt2YXIgbj10PT1udWxsP3ZvaWQgMDp0WmUodCxlKTtyZXR1cm4gbj09PXZvaWQgMD9yOm59ZnVuY3Rpb24gYVplKHQsZSxyKXtlPT0iX19wcm90b19fIiYmbm1lP25tZSh0LGUse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOnIsd3JpdGFibGU6ITB9KTp0W2VdPXJ9ZnVuY3Rpb24gY1plKHQsZSxyKXt2YXIgbj10W2VdOyghKGxaZS5jYWxsKHQsZSkmJmtnZShuLHIpKXx8cj09PXZvaWQgMCYmIShlIGluIHQpKSYmc1plKHQsZSxyKX1mdW5jdGlvbiBkWmUodCxlKXt2YXIgcj10eXBlb2YgdDtyZXR1cm4gZT1lPz9oWmUsISFlJiYocj09Im51bWJlciJ8fHIhPSJzeW1ib2wiJiZmWmUudGVzdCh0KSkmJnQ+LTEmJnQlMT09MCYmdDxlfWZ1bmN0aW9uIG1aZSh0LGUscixuKXtpZighWDAodCkpcmV0dXJuIHQ7ZT1MZ2UoZSx0KTtmb3IodmFyIGk9LTEsYT1lLmxlbmd0aCxzPWEtMSxsPXQ7bCE9bnVsbCYmKytpPGE7KXt2YXIgdT1wQihlW2ldKSxoPXI7aWYodT09PSJfX3Byb3RvX18ifHx1PT09ImNvbnN0cnVjdG9yInx8dT09PSJwcm90b3R5cGUiKXJldHVybiB0O2lmKGkhPXMpe3ZhciBmPWxbdV07aD1uP24oZix1LGwpOnZvaWQgMCxoPT09dm9pZCAwJiYoaD1YMChmKT9mOnBaZShlW2krMV0pP1tdOnt9KX11WmUobCx1LGgpLGw9bFt1XX1yZXR1cm4gdH1mdW5jdGlvbiB5WmUodCxlLHIpe3JldHVybiB0PT1udWxsP3Q6Z1plKHQsZSxyKX1mdW5jdGlvbiB4WmUodCxlKXt2YXIgcj0tMSxuPXQubGVuZ3RoO2ZvcihlfHwoZT1BcnJheShuKSk7KytyPG47KWVbcl09dFtyXTtyZXR1cm4gZX1mdW5jdGlvbiB3WmUodCl7cmV0dXJuIFU2KHQpP0NnZSh0LHBCKTptYih0KT9bdF06YlplKFNnZShfZ2UodCkpKX1mdW5jdGlvbiBnQih0LGUscixuKXtmb3IodmFyIGk9W10sYT1uZXcgUzEscz10LmN5KCksbD1zLmhhc0NvbXBvdW5kTm9kZXMoKSx1PTA7dTx0Lmxlbmd0aDt1Kyspe3ZhciBoPXRbdV07cj9pLnB1c2goaCk6bCYmbihpLGEsaCl9Zm9yKDtpLmxlbmd0aD4wOyl7dmFyIGY9aS5zaGlmdCgpO2UoZiksYS5hZGQoZi5pZCgpKSxsJiZuKGksYSxmKX1yZXR1cm4gdH1mdW5jdGlvbiBOZ2UodCxlLHIpe2lmKHIuaXNQYXJlbnQoKSlmb3IodmFyIG49ci5fcHJpdmF0ZS5jaGlsZHJlbixpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPW5baV07ZS5oYXMoYS5pZCgpKXx8dC5wdXNoKGEpfX1mdW5jdGlvbiBSZ2UodCxlLHIpe2lmKHIuaXNDaGlsZCgpKXt2YXIgbj1yLl9wcml2YXRlLnBhcmVudDtlLmhhcyhuLmlkKCkpfHx0LnB1c2gobil9fWZ1bmN0aW9uIEdaZSh0LGUscil7UmdlKHQsZSxyKSxOZ2UodCxlLHIpfWZ1bmN0aW9uIFJQKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj10aGlzO2lmKGU9PT12b2lkIDAmJihlPSEwKSxyLmxlbmd0aCE9PTApaWYoci5pc05vZGUoKSYmIXIucmVtb3ZlZCgpKXtmb3IodmFyIG49MCxpPXJbMF0sYT1pLl9wcml2YXRlLmVkZ2VzLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9YVtzXTshZSYmbC5pc0xvb3AoKXx8KG4rPXQoaSxsKSl9cmV0dXJuIG59ZWxzZSByZXR1cm59fWZ1bmN0aW9uIHUxKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe2Zvcih2YXIgbixpPXRoaXMubm9kZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV0sbD1zW3RdKHIpO2whPT12b2lkIDAmJihuPT09dm9pZCAwfHxlKGwsbikpJiYobj1sKX1yZXR1cm4gbn19ZnVuY3Rpb24gcXgoKXtyZXR1cm4hMX1mdW5jdGlvbiBmNigpe3JldHVybiEwfWZ1bmN0aW9uIHE2KCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTphSmUsZT1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxyPTA7cjxjbWUubGVuZ3RoO3IrKyl7dmFyIG49Y21lW3JdO3RoaXNbbl09dFtuXXx8JGdlW25dfXRoaXMuY29udGV4dD1lfHx0aGlzLmNvbnRleHQsdGhpcy5saXN0ZW5lcnM9W10sdGhpcy5lbWl0dGluZz0wfWZ1bmN0aW9uIFlnZSh0LGUscil7dmFyIG49ci5fcHJpdmF0ZSxpPW4uc3R5bGVDYWNoZT1uLnN0eWxlQ2FjaGV8fFtdLGE7cmV0dXJuKGE9aVt0XSkhPW51bGx8fChhPWlbdF09ZShyKSksYX1mdW5jdGlvbiBYNih0LGUpe3JldHVybiB0PWowKHQpLG8oZnVuY3Rpb24obil7cmV0dXJuIFlnZSh0LGUsbil9LCJjYWNoZWRTdHlsZUZ1bmN0aW9uIil9ZnVuY3Rpb24gajYodCxlKXt0PWowKHQpO3ZhciByPW8oZnVuY3Rpb24oaSl7cmV0dXJuIGUuY2FsbChpKX0sInNlbGZGbiIpO3JldHVybiBvKGZ1bmN0aW9uKCl7dmFyIGk9dGhpc1swXTtpZihpKXJldHVybiBZZ2UodCxyLGkpfSwiY2FjaGVkUHJvdG90eXBlU3R5bGVGdW5jdGlvbiIpfWZ1bmN0aW9uIElQKHQsZSl7dmFyIHI9dC5fcHJpdmF0ZSxuPXIuZGF0YS5wYXJlbnQ/dC5wYXJlbnRzKCk6bnVsbDtpZihuKWZvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgYT1uW2ldO2lmKCFlKGEpKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIHlCKHQpe3ZhciBlPXQub2sscj10LmVkZ2VPa1ZpYU5vZGV8fHQub2ssbj10LnBhcmVudE9rfHx0Lm9rO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPXRoaXMuY3koKTtpZighaS5zdHlsZUVuYWJsZWQoKSlyZXR1cm4hMDt2YXIgYT10aGlzWzBdLHM9aS5oYXNDb21wb3VuZE5vZGVzKCk7aWYoYSl7dmFyIGw9YS5fcHJpdmF0ZTtpZighZShhKSlyZXR1cm4hMTtpZihhLmlzTm9kZSgpKXJldHVybiFzfHxJUChhLG4pO3ZhciB1PWwuc291cmNlLGg9bC50YXJnZXQ7cmV0dXJuIHIodSkmJighc3x8SVAodSxyKSkmJih1PT09aHx8cihoKSYmKCFzfHxJUChoLHIpKSl9fX1mdW5jdGlvbiBobWUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLHI9W107aWYoZS5sZW5ndGg9PT0yKXt2YXIgbj1lWzBdLGk9ZVsxXTt0aGlzLm9uKHQuZXZlbnQsbixpKX1lbHNlIGlmKGUubGVuZ3RoPT09MSYmbmkoZVswXSkpe3ZhciBhPWVbMF07dGhpcy5vbih0LmV2ZW50LGEpfWVsc2UgaWYoZS5sZW5ndGg9PT0wfHxlLmxlbmd0aD09PTEmJmtuKGVbMF0pKXtmb3IodmFyIHM9ZS5sZW5ndGg9PT0xP2VbMF06bnVsbCxsPTA7bDx0aGlzLmxlbmd0aDtsKyspe3ZhciB1PXRoaXNbbF0saD0hdC5hYmxlRmllbGR8fHUuX3ByaXZhdGVbdC5hYmxlRmllbGRdLGY9dS5fcHJpdmF0ZVt0LmZpZWxkXSE9dC52YWx1ZTtpZih0Lm92ZXJyaWRlQWJsZSl7dmFyIGQ9dC5vdmVycmlkZUFibGUodSk7aWYoZCE9PXZvaWQgMCYmKGg9ZCwhZCkpcmV0dXJuIHRoaXN9aCYmKHUuX3ByaXZhdGVbdC5maWVsZF09dC52YWx1ZSxmJiZyLnB1c2godSkpfXZhciBwPXRoaXMuc3Bhd24ocik7cC51cGRhdGVTdHlsZSgpLHAuZW1pdCh0LmV2ZW50KSxzJiZwLmVtaXQocyl9cmV0dXJuIHRoaXN9fWZ1bmN0aW9uIE4xKHQpe01mW3QuZmllbGRdPWZ1bmN0aW9uKCl7dmFyIGU9dGhpc1swXTtpZihlKXtpZih0Lm92ZXJyaWRlRmllbGQpe3ZhciByPXQub3ZlcnJpZGVGaWVsZChlKTtpZihyIT09dm9pZCAwKXJldHVybiByfXJldHVybiBlLl9wcml2YXRlW3QuZmllbGRdfX0sTWZbdC5vbl09aG1lKHtldmVudDp0Lm9uLGZpZWxkOnQuZmllbGQsYWJsZUZpZWxkOnQuYWJsZUZpZWxkLG92ZXJyaWRlQWJsZTp0Lm92ZXJyaWRlQWJsZSx2YWx1ZTohMH0pLE1mW3Qub2ZmXT1obWUoe2V2ZW50OnQub2ZmLGZpZWxkOnQuZmllbGQsYWJsZUZpZWxkOnQuYWJsZUZpZWxkLG92ZXJyaWRlQWJsZTp0Lm92ZXJyaWRlQWJsZSx2YWx1ZTohMX0pfWZ1bmN0aW9uIG1tZSh0KXtyZXR1cm4gbyhmdW5jdGlvbihyKXtmb3IodmFyIG49W10saT0wO2k8dGhpcy5sZW5ndGg7aSsrKXt2YXIgYT10aGlzW2ldLHM9YS5fcHJpdmF0ZVt0LmF0dHJdO3MmJm4ucHVzaChzKX1yZXR1cm4gdGhpcy5zcGF3bihuLCEwKS5maWx0ZXIocil9LCJzb3VyY2VJbXBsIil9ZnVuY3Rpb24gZ21lKHQpe3JldHVybiBvKGZ1bmN0aW9uKHIpe3ZhciBuPVtdLGk9dGhpcy5fcHJpdmF0ZS5jeSxhPXR8fHt9O1p0KHIpJiYocj1pLiQocikpO2Zvcih2YXIgcz0wO3M8ci5sZW5ndGg7cysrKWZvcih2YXIgbD1yW3NdLl9wcml2YXRlLmVkZ2VzLHU9MDt1PGwubGVuZ3RoO3UrKyl7dmFyIGg9bFt1XSxmPWguX3ByaXZhdGUuZGF0YSxkPXRoaXMuaGFzRWxlbWVudFdpdGhJZChmLnNvdXJjZSkmJnIuaGFzRWxlbWVudFdpdGhJZChmLnRhcmdldCkscD1yLmhhc0VsZW1lbnRXaXRoSWQoZi5zb3VyY2UpJiZ0aGlzLmhhc0VsZW1lbnRXaXRoSWQoZi50YXJnZXQpLG09ZHx8cDttJiYoKGEudGhpc0lzU3JjfHxhLnRoaXNJc1RndCkmJihhLnRoaXNJc1NyYyYmIWR8fGEudGhpc0lzVGd0JiYhcCl8fG4ucHVzaChoKSl9cmV0dXJuIHRoaXMuc3Bhd24obiwhMCl9LCJlZGdlc1dpdGhJbXBsIil9ZnVuY3Rpb24geW1lKHQpe3ZhciBlPXtjb2RpcmVjdGVkOiExfTtyZXR1cm4gdD1pcih7fSxlLHQpLG8oZnVuY3Rpb24obil7Zm9yKHZhciBpPVtdLGE9dGhpcy5lZGdlcygpLHM9dCxsPTA7bDxhLmxlbmd0aDtsKyspZm9yKHZhciB1PWFbbF0saD11Ll9wcml2YXRlLGY9aC5zb3VyY2UsZD1mLl9wcml2YXRlLmRhdGEuaWQscD1oLmRhdGEudGFyZ2V0LG09Zi5fcHJpdmF0ZS5lZGdlcyxnPTA7ZzxtLmxlbmd0aDtnKyspe3ZhciB5PW1bZ10sdj15Ll9wcml2YXRlLmRhdGEseD12LnRhcmdldCxiPXYuc291cmNlLHc9eD09PXAmJmI9PT1kLF89ZD09PXgmJnA9PT1iOyhzLmNvZGlyZWN0ZWQmJnd8fCFzLmNvZGlyZWN0ZWQmJih3fHxfKSkmJmkucHVzaCh5KX1yZXR1cm4gdGhpcy5zcGF3bihpLCEwKS5maWx0ZXIobil9LCJwYXJhbGxlbEVkZ2VzSW1wbCIpfWZ1bmN0aW9uIGdKZSh0LGUscixuKXt2YXIgaT00LGE9LjAwMSxzPTFlLTcsbD0xMCx1PTExLGg9MS8odS0xKSxmPXR5cGVvZiBGbG9hdDMyQXJyYXk8InUiO2lmKGFyZ3VtZW50cy5sZW5ndGghPT00KXJldHVybiExO2Zvcih2YXIgZD0wO2Q8NDsrK2QpaWYodHlwZW9mIGFyZ3VtZW50c1tkXSE9Im51bWJlciJ8fGlzTmFOKGFyZ3VtZW50c1tkXSl8fCFpc0Zpbml0ZShhcmd1bWVudHNbZF0pKXJldHVybiExO3Q9TWF0aC5taW4odCwxKSxyPU1hdGgubWluKHIsMSksdD1NYXRoLm1heCh0LDApLHI9TWF0aC5tYXgociwwKTt2YXIgcD1mP25ldyBGbG9hdDMyQXJyYXkodSk6bmV3IEFycmF5KHUpO2Z1bmN0aW9uIG0oSSxEKXtyZXR1cm4gMS0zKkQrMypJfW8obSwiQSIpO2Z1bmN0aW9uIGcoSSxEKXtyZXR1cm4gMypELTYqSX1vKGcsIkIiKTtmdW5jdGlvbiB5KEkpe3JldHVybiAzKkl9byh5LCJDIik7ZnVuY3Rpb24gdihJLEQsayl7cmV0dXJuKChtKEQsaykqSStnKEQsaykpKkkreShEKSkqSX1vKHYsImNhbGNCZXppZXIiKTtmdW5jdGlvbiB4KEksRCxrKXtyZXR1cm4gMyptKEQsaykqSSpJKzIqZyhELGspKkkreShEKX1vKHgsImdldFNsb3BlIik7ZnVuY3Rpb24gYihJLEQpe2Zvcih2YXIgaz0wO2s8aTsrK2spe3ZhciBSPXgoRCx0LHIpO2lmKFI9PT0wKXJldHVybiBEO3ZhciBDPXYoRCx0LHIpLUk7RC09Qy9SfXJldHVybiBEfW8oYiwibmV3dG9uUmFwaHNvbkl0ZXJhdGUiKTtmdW5jdGlvbiB3KCl7Zm9yKHZhciBJPTA7STx1OysrSSlwW0ldPXYoSSpoLHQscil9byh3LCJjYWxjU2FtcGxlVmFsdWVzIik7ZnVuY3Rpb24gXyhJLEQsayl7dmFyIFIsQyxPPTA7ZG8gQz1EKyhrLUQpLzIsUj12KEMsdCxyKS1JLFI+MD9rPUM6RD1DO3doaWxlKE1hdGguYWJzKFIpPnMmJisrTzxsKTtyZXR1cm4gQ31vKF8sImJpbmFyeVN1YmRpdmlkZSIpO2Z1bmN0aW9uIFQoSSl7Zm9yKHZhciBEPTAsaz0xLFI9dS0xO2shPT1SJiZwW2tdPD1JOysraylEKz1oOy0tazt2YXIgQz0oSS1wW2tdKS8ocFtrKzFdLXBba10pLE89RCtDKmgsTj14KE8sdCxyKTtyZXR1cm4gTj49YT9iKEksTyk6Tj09PTA/TzpfKEksRCxEK2gpfW8oVCwiZ2V0VEZvclgiKTt2YXIgRT0hMTtmdW5jdGlvbiBMKCl7RT0hMCwodCE9PWV8fHIhPT1uKSYmdygpfW8oTCwicHJlY29tcHV0ZSIpO3ZhciBTPW8oZnVuY3Rpb24oRCl7cmV0dXJuIEV8fEwoKSx0PT09ZSYmcj09PW4/RDpEPT09MD8wOkQ9PT0xPzE6dihUKEQpLGUsbil9LCJmIik7Uy5nZXRDb250cm9sUG9pbnRzPWZ1bmN0aW9uKCl7cmV0dXJuW3t4OnQseTplfSx7eDpyLHk6bn1dfTt2YXIgQT0iZ2VuZXJhdGVCZXppZXIoIitbdCxlLHIsbl0rIikiO3JldHVybiBTLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEF9LFN9ZnVuY3Rpb24gdm1lKHQsZSxyLG4saSl7aWYobj09PTF8fGU9PT1yKXJldHVybiByO3ZhciBhPWkoZSxyLG4pO3JldHVybiB0PT1udWxsfHwoKHQucm91bmRWYWx1ZXx8dC5jb2xvcikmJihhPU1hdGgucm91bmQoYSkpLHQubWluIT09dm9pZCAwJiYoYT1NYXRoLm1heChhLHQubWluKSksdC5tYXghPT12b2lkIDAmJihhPU1hdGgubWluKGEsdC5tYXgpKSksYX1mdW5jdGlvbiB4bWUodCxlKXtyZXR1cm4gdC5wZlZhbHVlIT1udWxsfHx0LnZhbHVlIT1udWxsP3QucGZWYWx1ZSE9bnVsbCYmKGU9PW51bGx8fGUudHlwZS51bml0cyE9PSIlIik/dC5wZlZhbHVlOnQudmFsdWU6dH1mdW5jdGlvbiBoMSh0LGUscixuLGkpe3ZhciBhPWkhPW51bGw/aS50eXBlOm51bGw7cjwwP3I9MDpyPjEmJihyPTEpO3ZhciBzPXhtZSh0LGkpLGw9eG1lKGUsaSk7aWYoeHQocykmJnh0KGwpKXJldHVybiB2bWUoYSxzLGwscixuKTtpZihrbihzKSYma24obCkpe2Zvcih2YXIgdT1bXSxoPTA7aDxsLmxlbmd0aDtoKyspe3ZhciBmPXNbaF0sZD1sW2hdO2lmKGYhPW51bGwmJmQhPW51bGwpe3ZhciBwPXZtZShhLGYsZCxyLG4pO3UucHVzaChwKX1lbHNlIHUucHVzaChkKX1yZXR1cm4gdX19ZnVuY3Rpb24gdkplKHQsZSxyLG4pe3ZhciBpPSFuLGE9dC5fcHJpdmF0ZSxzPWUuX3ByaXZhdGUsbD1zLmVhc2luZyx1PXMuc3RhcnRUaW1lLGg9bj90OnQuY3koKSxmPWguc3R5bGUoKTtpZighcy5lYXNpbmdJbXBsKWlmKGw9PW51bGwpcy5lYXNpbmdJbXBsPXc2LmxpbmVhcjtlbHNle3ZhciBkO2lmKFp0KGwpKXt2YXIgcD1mLnBhcnNlKCJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiIsbCk7ZD1wLnZhbHVlfWVsc2UgZD1sO3ZhciBtLGc7WnQoZCk/KG09ZCxnPVtdKToobT1kWzFdLGc9ZC5zbGljZSgyKS5tYXAoZnVuY3Rpb24oQil7cmV0dXJuK0J9KSksZy5sZW5ndGg+MD8obT09PSJzcHJpbmciJiZnLnB1c2gocy5kdXJhdGlvbikscy5lYXNpbmdJbXBsPXc2W21dLmFwcGx5KG51bGwsZykpOnMuZWFzaW5nSW1wbD13NlttXX12YXIgeT1zLmVhc2luZ0ltcGwsdjtpZihzLmR1cmF0aW9uPT09MD92PTE6dj0oci11KS9zLmR1cmF0aW9uLHMuYXBwbHlpbmcmJih2PXMucHJvZ3Jlc3MpLHY8MD92PTA6dj4xJiYodj0xKSxzLmRlbGF5PT1udWxsKXt2YXIgeD1zLnN0YXJ0UG9zaXRpb24sYj1zLnBvc2l0aW9uO2lmKGImJmkmJiF0LmxvY2tlZCgpKXt2YXIgdz17fTtYeCh4LngsYi54KSYmKHcueD1oMSh4LngsYi54LHYseSkpLFh4KHgueSxiLnkpJiYody55PWgxKHgueSxiLnksdix5KSksdC5wb3NpdGlvbih3KX12YXIgXz1zLnN0YXJ0UGFuLFQ9cy5wYW4sRT1hLnBhbixMPVQhPW51bGwmJm47TCYmKFh4KF8ueCxULngpJiYoRS54PWgxKF8ueCxULngsdix5KSksWHgoXy55LFQueSkmJihFLnk9aDEoXy55LFQueSx2LHkpKSx0LmVtaXQoInBhbiIpKTt2YXIgUz1zLnN0YXJ0Wm9vbSxBPXMuem9vbSxJPUEhPW51bGwmJm47SSYmKFh4KFMsQSkmJihhLnpvb209c2IoYS5taW5ab29tLGgxKFMsQSx2LHkpLGEubWF4Wm9vbSkpLHQuZW1pdCgiem9vbSIpKSwoTHx8SSkmJnQuZW1pdCgidmlld3BvcnQiKTt2YXIgRD1zLnN0eWxlO2lmKEQmJkQubGVuZ3RoPjAmJmkpe2Zvcih2YXIgaz0wO2s8RC5sZW5ndGg7aysrKXt2YXIgUj1EW2tdLEM9Ui5uYW1lLE89UixOPXMuc3RhcnRTdHlsZVtDXSxQPWYucHJvcGVydGllc1tOLm5hbWVdLEY9aDEoTixPLHYseSxQKTtmLm92ZXJyaWRlQnlwYXNzKHQsQyxGKX10LmVtaXQoInN0eWxlIil9fXJldHVybiBzLnByb2dyZXNzPXYsdn1mdW5jdGlvbiBYeCh0LGUpe3JldHVybiB0PT1udWxsfHxlPT1udWxsPyExOnh0KHQpJiZ4dChlKT8hMDohISh0JiZlKX1mdW5jdGlvbiB4SmUodCxlLHIsbil7dmFyIGk9ZS5fcHJpdmF0ZTtpLnN0YXJ0ZWQ9ITAsaS5zdGFydFRpbWU9ci1pLnByb2dyZXNzKmkuZHVyYXRpb259ZnVuY3Rpb24gYm1lKHQsZSl7dmFyIHI9ZS5fcHJpdmF0ZS5hbmlFbGVzLG49W107ZnVuY3Rpb24gaShmLGQpe3ZhciBwPWYuX3ByaXZhdGUsbT1wLmFuaW1hdGlvbi5jdXJyZW50LGc9cC5hbmltYXRpb24ucXVldWUseT0hMTtpZihtLmxlbmd0aD09PTApe3ZhciB2PWcuc2hpZnQoKTt2JiZtLnB1c2godil9Zm9yKHZhciB4PW8oZnVuY3Rpb24oRSl7Zm9yKHZhciBMPUUubGVuZ3RoLTE7TD49MDtMLS0pe3ZhciBTPUVbTF07UygpfUUuc3BsaWNlKDAsRS5sZW5ndGgpfSwiY2FsbGJhY2tzIiksYj1tLmxlbmd0aC0xO2I+PTA7Yi0tKXt2YXIgdz1tW2JdLF89dy5fcHJpdmF0ZTtpZihfLnN0b3BwZWQpe20uc3BsaWNlKGIsMSksXy5ob29rZWQ9ITEsXy5wbGF5aW5nPSExLF8uc3RhcnRlZD0hMSx4KF8uZnJhbWVzKTtjb250aW51ZX0hXy5wbGF5aW5nJiYhXy5hcHBseWluZ3x8KF8ucGxheWluZyYmXy5hcHBseWluZyYmKF8uYXBwbHlpbmc9ITEpLF8uc3RhcnRlZHx8eEplKGYsdyx0KSx2SmUoZix3LHQsZCksXy5hcHBseWluZyYmKF8uYXBwbHlpbmc9ITEpLHgoXy5mcmFtZXMpLF8uc3RlcCE9bnVsbCYmXy5zdGVwKHQpLHcuY29tcGxldGVkKCkmJihtLnNwbGljZShiLDEpLF8uaG9va2VkPSExLF8ucGxheWluZz0hMSxfLnN0YXJ0ZWQ9ITEseChfLmNvbXBsZXRlcykpLHk9ITApfXJldHVybiFkJiZtLmxlbmd0aD09PTAmJmcubGVuZ3RoPT09MCYmbi5wdXNoKGYpLHl9byhpLCJzdGVwT25lIik7Zm9yKHZhciBhPSExLHM9MDtzPHIubGVuZ3RoO3MrKyl7dmFyIGw9cltzXSx1PWkobCk7YT1hfHx1fXZhciBoPWkoZSwhMCk7KGF8fGgpJiYoci5sZW5ndGg+MD9lLm5vdGlmeSgiZHJhdyIscik6ZS5ub3RpZnkoImRyYXciKSksci51bm1lcmdlKG4pLGUuZW1pdCgic3RlcCIpfWZ1bmN0aW9uIFhnZSh0KXt0aGlzLm9wdGlvbnM9aXIoe30sQUplLF9KZSx0KX1mdW5jdGlvbiBqZ2UodCl7dGhpcy5vcHRpb25zPWlyKHt9LExKZSx0KX1mdW5jdGlvbiBLZ2UodCl7dGhpcy5vcHRpb25zPWlyKHt9LERKZSx0KX1mdW5jdGlvbiBaNih0KXt0aGlzLm9wdGlvbnM9aXIoe30sTkplLHQpLHRoaXMub3B0aW9ucy5sYXlvdXQ9dGhpczt2YXIgZT10aGlzLm9wdGlvbnMuZWxlcy5ub2RlcygpLHI9dGhpcy5vcHRpb25zLmVsZXMuZWRnZXMoKSxuPXIuZmlsdGVyKGZ1bmN0aW9uKGkpe3ZhciBhPWkuc291cmNlKCkuZGF0YSgiaWQiKSxzPWkudGFyZ2V0KCkuZGF0YSgiaWQiKSxsPWUuc29tZShmdW5jdGlvbihoKXtyZXR1cm4gaC5kYXRhKCJpZCIpPT09YX0pLHU9ZS5zb21lKGZ1bmN0aW9uKGgpe3JldHVybiBoLmRhdGEoImlkIik9PT1zfSk7cmV0dXJuIWx8fCF1fSk7dGhpcy5vcHRpb25zLmVsZXM9dGhpcy5vcHRpb25zLmVsZXMubm90KG4pfWZ1bmN0aW9uIFpnZSh0KXt0aGlzLm9wdGlvbnM9aXIoe30sWEplLHQpfWZ1bmN0aW9uIGJCKHQpe3RoaXMub3B0aW9ucz1pcih7fSxqSmUsdCl9ZnVuY3Rpb24gSmdlKHQpe3RoaXMub3B0aW9ucz1pcih7fSxLSmUsdCl9ZnVuY3Rpb24gZTFlKHQpe3RoaXMub3B0aW9ucz1pcih7fSxRSmUsdCl9ZnVuY3Rpb24gdDFlKHQpe3RoaXMub3B0aW9ucz10LHRoaXMubm90aWZpY2F0aW9ucz0wfWZ1bmN0aW9uIGkxZSh0LGUpe2UucmFkaXVzPT09MD90LmxpbmVUbyhlLmN4LGUuY3kpOnQuYXJjKGUuY3gsZS5jeSxlLnJhZGl1cyxlLnN0YXJ0QW5nbGUsZS5lbmRBbmdsZSxlLmNvdW50ZXJDbG9ja3dpc2UpfWZ1bmN0aW9uIFRCKHQsZSxyLG4pe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMDtyZXR1cm4gbj09PTB8fGUucmFkaXVzPT09MD97Y3g6ZS54LGN5OmUueSxyYWRpdXM6MCxzdGFydFg6ZS54LHN0YXJ0WTplLnksc3RvcFg6ZS54LHN0b3BZOmUueSxzdGFydEFuZ2xlOnZvaWQgMCxlbmRBbmdsZTp2b2lkIDAsY291bnRlckNsb2Nrd2lzZTp2b2lkIDB9OihlZXQodCxlLHIsbixpKSx7Y3g6cVAsY3k6WFAscmFkaXVzOlcwLHN0YXJ0WDpyMWUsc3RhcnRZOm4xZSxzdG9wWDpqUCxzdG9wWTpLUCxzdGFydEFuZ2xlOlFjLmFuZytNYXRoLlBJLzIqWTAsZW5kQW5nbGU6Y2wuYW5nLU1hdGguUEkvMipZMCxjb3VudGVyQ2xvY2t3aXNlOkU2fSl9ZnVuY3Rpb24gYTFlKHQpe3ZhciBlPVtdO2lmKHQhPW51bGwpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cis9Mil7dmFyIG49dFtyXSxpPXRbcisxXTtlLnB1c2goe3g6bix5Oml9KX1yZXR1cm4gZX19ZnVuY3Rpb24gdGV0KHQsZSxyKXtmb3IodmFyIG49byhmdW5jdGlvbihoLGYsZCxwKXtyZXR1cm4gbGEoaCxmLGQscCl9LCJxYmV6aWVyQXQkMSIpLGk9ZS5fcHJpdmF0ZSxhPWkucnN0eWxlLmJlemllclB0cyxzPTA7czx0LmJlemllclByb2pQY3RzLmxlbmd0aDtzKyspe3ZhciBsPXQuYmV6aWVyUHJvalBjdHNbc107YS5wdXNoKHt4Om4oclswXSxyWzJdLHJbNF0sbCkseTpuKHJbMV0sclszXSxyWzVdLGwpfSl9fWZ1bmN0aW9uIElldCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO3QubGluZVRvKG4ueCxuLnkpfX1mdW5jdGlvbiBPZXQodCxlLHIpe2Zvcih2YXIgbixpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBhPWVbaV07aT09PTAmJihuPWEpLHQubGluZVRvKGEueCxhLnkpfXQucXVhZHJhdGljQ3VydmVUbyhyLngsci55LG4ueCxuLnkpfWZ1bmN0aW9uIEJtZSh0LGUscil7dC5iZWdpblBhdGgmJnQuYmVnaW5QYXRoKCk7Zm9yKHZhciBuPWUsaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgYT1uW2ldO3QubGluZVRvKGEueCxhLnkpfXZhciBzPXIsbD1yWzBdO3QubW92ZVRvKGwueCxsLnkpO2Zvcih2YXIgaT0xO2k8cy5sZW5ndGg7aSsrKXt2YXIgYT1zW2ldO3QubGluZVRvKGEueCxhLnkpfXQuY2xvc2VQYXRoJiZ0LmNsb3NlUGF0aCgpfWZ1bmN0aW9uIFBldCh0LGUscixuLGkpe3QuYmVnaW5QYXRoJiZ0LmJlZ2luUGF0aCgpLHQuYXJjKHIsbixpLDAsTWF0aC5QSSoyLCExKTt2YXIgYT1lLHM9YVswXTt0Lm1vdmVUbyhzLngscy55KTtmb3IodmFyIGw9MDtsPGEubGVuZ3RoO2wrKyl7dmFyIHU9YVtsXTt0LmxpbmVUbyh1LngsdS55KX10LmNsb3NlUGF0aCYmdC5jbG9zZVBhdGgoKX1mdW5jdGlvbiBCZXQodCxlLHIsbil7dC5hcmMoZSxyLG4sMCxNYXRoLlBJKjIsITEpfWZ1bmN0aW9uIEZQKHQsZSxyLG4saSl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOjUscz1hcmd1bWVudHMubGVuZ3RoPjY/YXJndW1lbnRzWzZdOnZvaWQgMDt0LmJlZ2luUGF0aCgpLHQubW92ZVRvKGUrYSxyKSx0LmxpbmVUbyhlK24tYSxyKSx0LnF1YWRyYXRpY0N1cnZlVG8oZStuLHIsZStuLHIrYSksdC5saW5lVG8oZStuLHIraS1hKSx0LnF1YWRyYXRpY0N1cnZlVG8oZStuLHIraSxlK24tYSxyK2kpLHQubGluZVRvKGUrYSxyK2kpLHQucXVhZHJhdGljQ3VydmVUbyhlLHIraSxlLHIraS1hKSx0LmxpbmVUbyhlLHIrYSksdC5xdWFkcmF0aWNDdXJ2ZVRvKGUscixlK2EsciksdC5jbG9zZVBhdGgoKSxzP3Quc3Ryb2tlKCk6dC5maWxsKCl9ZnVuY3Rpb24gSGV0KHQsZSl7Zm9yKHZhciByPWF0b2IodCksbj1uZXcgQXJyYXlCdWZmZXIoci5sZW5ndGgpLGk9bmV3IFVpbnQ4QXJyYXkobiksYT0wO2E8ci5sZW5ndGg7YSsrKWlbYV09ci5jaGFyQ29kZUF0KGEpO3JldHVybiBuZXcgQmxvYihbbl0se3R5cGU6ZX0pfWZ1bmN0aW9uIEdtZSh0KXt2YXIgZT10LmluZGV4T2YoIiwiKTtyZXR1cm4gdC5zdWJzdHIoZSsxKX1mdW5jdGlvbiB2MWUodCxlLHIpe3ZhciBuPW8oZnVuY3Rpb24oKXtyZXR1cm4gZS50b0RhdGFVUkwocix0LnF1YWxpdHkpfSwiZ2V0QjY0VXJpIik7c3dpdGNoKHQub3V0cHV0KXtjYXNlImJsb2ItcHJvbWlzZSI6cmV0dXJuIG5ldyBDMShmdW5jdGlvbihpLGEpe3RyeXtlLnRvQmxvYihmdW5jdGlvbihzKXtzIT1udWxsP2kocyk6YShuZXcgRXJyb3IoImBjYW52YXMudG9CbG9iKClgIHNlbnQgYSBudWxsIHZhbHVlIGluIGl0cyBjYWxsYmFjayIpKX0scix0LnF1YWxpdHkpfWNhdGNoKHMpe2Eocyl9fSk7Y2FzZSJibG9iIjpyZXR1cm4gSGV0KEdtZShuKCkpLHIpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gR21lKG4oKSk7Y2FzZSJiYXNlNjR1cmkiOmRlZmF1bHQ6cmV0dXJuIG4oKX19ZnVuY3Rpb24gYjFlKHQpe3ZhciBlPXRoaXMscj1lLmN5LndpbmRvdygpLG49ci5kb2N1bWVudDtlLmRhdGE9e2NhbnZhc2VzOm5ldyBBcnJheShLci5DQU5WQVNfTEFZRVJTKSxjb250ZXh0czpuZXcgQXJyYXkoS3IuQ0FOVkFTX0xBWUVSUyksY2FudmFzTmVlZHNSZWRyYXc6bmV3IEFycmF5KEtyLkNBTlZBU19MQVlFUlMpLGJ1ZmZlckNhbnZhc2VzOm5ldyBBcnJheShLci5CVUZGRVJfQ09VTlQpLGJ1ZmZlckNvbnRleHRzOm5ldyBBcnJheShLci5DQU5WQVNfTEFZRVJTKX07dmFyIGk9Ii13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsYT0icmdiYSgwLDAsMCwwKSI7ZS5kYXRhLmNhbnZhc0NvbnRhaW5lcj1uLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3ZhciBzPWUuZGF0YS5jYW52YXNDb250YWluZXIuc3R5bGU7ZS5kYXRhLmNhbnZhc0NvbnRhaW5lci5zdHlsZVtpXT1hLHMucG9zaXRpb249InJlbGF0aXZlIixzLnpJbmRleD0iMCIscy5vdmVyZmxvdz0iaGlkZGVuIjt2YXIgbD10LmN5LmNvbnRhaW5lcigpO2wuYXBwZW5kQ2hpbGQoZS5kYXRhLmNhbnZhc0NvbnRhaW5lciksbC5zdHlsZVtpXT1hO3ZhciB1PXsiLXdlYmtpdC11c2VyLXNlbGVjdCI6Im5vbmUiLCItbW96LXVzZXItc2VsZWN0IjoiLW1vei1ub25lIiwidXNlci1zZWxlY3QiOiJub25lIiwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIjoicmdiYSgwLDAsMCwwKSIsIm91dGxpbmUtc3R5bGUiOiJub25lIn07RHFlKCkmJih1WyItbXMtdG91Y2gtYWN0aW9uIl09Im5vbmUiLHVbInRvdWNoLWFjdGlvbiJdPSJub25lIik7Zm9yKHZhciBoPTA7aDxLci5DQU5WQVNfTEFZRVJTO2grKyl7dmFyIGY9ZS5kYXRhLmNhbnZhc2VzW2hdPW4uY3JlYXRlRWxlbWVudCgiY2FudmFzIik7ZS5kYXRhLmNvbnRleHRzW2hdPWYuZ2V0Q29udGV4dCgiMmQiKSxPYmplY3Qua2V5cyh1KS5mb3JFYWNoKGZ1bmN0aW9uKEope2Yuc3R5bGVbSl09dVtKXX0pLGYuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixmLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsImxheWVyIitoKSxmLnN0eWxlLnpJbmRleD1TdHJpbmcoS3IuQ0FOVkFTX0xBWUVSUy1oKSxlLmRhdGEuY2FudmFzQ29udGFpbmVyLmFwcGVuZENoaWxkKGYpLGUuZGF0YS5jYW52YXNOZWVkc1JlZHJhd1toXT0hMX1lLmRhdGEudG9wQ2FudmFzPWUuZGF0YS5jYW52YXNlc1swXSxlLmRhdGEuY2FudmFzZXNbS3IuTk9ERV0uc2V0QXR0cmlidXRlKCJkYXRhLWlkIiwibGF5ZXIiK0tyLk5PREUrIi1ub2RlIiksZS5kYXRhLmNhbnZhc2VzW0tyLlNFTEVDVF9CT1hdLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsImxheWVyIitLci5TRUxFQ1RfQk9YKyItc2VsZWN0Ym94IiksZS5kYXRhLmNhbnZhc2VzW0tyLkRSQUddLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsImxheWVyIitLci5EUkFHKyItZHJhZyIpO2Zvcih2YXIgaD0wO2g8S3IuQlVGRkVSX0NPVU5UO2grKyllLmRhdGEuYnVmZmVyQ2FudmFzZXNbaF09bi5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxlLmRhdGEuYnVmZmVyQ29udGV4dHNbaF09ZS5kYXRhLmJ1ZmZlckNhbnZhc2VzW2hdLmdldENvbnRleHQoIjJkIiksZS5kYXRhLmJ1ZmZlckNhbnZhc2VzW2hdLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZS5kYXRhLmJ1ZmZlckNhbnZhc2VzW2hdLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsImJ1ZmZlciIraCksZS5kYXRhLmJ1ZmZlckNhbnZhc2VzW2hdLnN0eWxlLnpJbmRleD1TdHJpbmcoLWgtMSksZS5kYXRhLmJ1ZmZlckNhbnZhc2VzW2hdLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiI7ZS5wYXRoc0VuYWJsZWQ9ITA7dmFyIGQ9S3MoKSxwPW8oZnVuY3Rpb24oSCl7cmV0dXJue3g6KEgueDErSC54MikvMix5OihILnkxK0gueTIpLzJ9fSwiZ2V0Qm94Q2VudGVyIiksbT1vKGZ1bmN0aW9uKEgpe3JldHVybnt4Oi1ILncvMix5Oi1ILmgvMn19LCJnZXRDZW50ZXJPZmZzZXQiKSxnPW8oZnVuY3Rpb24oSCl7dmFyIHE9SFswXS5fcHJpdmF0ZSxRPXEub2xkQmFja2dyb3VuZFRpbWVzdGFtcD09PXEuYmFja2dyb3VuZFRpbWVzdGFtcDtyZXR1cm4hUX0sImJhY2tncm91bmRUaW1lc3RhbXBIYXNDaGFuZ2VkIikseT1vKGZ1bmN0aW9uKEgpe3JldHVybiBIWzBdLl9wcml2YXRlLm5vZGVLZXl9LCJnZXRTdHlsZUtleSIpLHY9byhmdW5jdGlvbihIKXtyZXR1cm4gSFswXS5fcHJpdmF0ZS5sYWJlbFN0eWxlS2V5fSwiZ2V0TGFiZWxLZXkiKSx4PW8oZnVuY3Rpb24oSCl7cmV0dXJuIEhbMF0uX3ByaXZhdGUuc291cmNlTGFiZWxTdHlsZUtleX0sImdldFNvdXJjZUxhYmVsS2V5IiksYj1vKGZ1bmN0aW9uKEgpe3JldHVybiBIWzBdLl9wcml2YXRlLnRhcmdldExhYmVsU3R5bGVLZXl9LCJnZXRUYXJnZXRMYWJlbEtleSIpLHc9byhmdW5jdGlvbihILHEsUSxhZSx1ZSl7cmV0dXJuIGUuZHJhd0VsZW1lbnQoSCxxLFEsITEsITEsdWUpfSwiZHJhd0VsZW1lbnQiKSxfPW8oZnVuY3Rpb24oSCxxLFEsYWUsdWUpe3JldHVybiBlLmRyYXdFbGVtZW50VGV4dChILHEsUSxhZSwibWFpbiIsdWUpfSwiZHJhd0xhYmVsIiksVD1vKGZ1bmN0aW9uKEgscSxRLGFlLHVlKXtyZXR1cm4gZS5kcmF3RWxlbWVudFRleHQoSCxxLFEsYWUsInNvdXJjZSIsdWUpfSwiZHJhd1NvdXJjZUxhYmVsIiksRT1vKGZ1bmN0aW9uKEgscSxRLGFlLHVlKXtyZXR1cm4gZS5kcmF3RWxlbWVudFRleHQoSCxxLFEsYWUsInRhcmdldCIsdWUpfSwiZHJhd1RhcmdldExhYmVsIiksTD1vKGZ1bmN0aW9uKEgpe3JldHVybiBILmJvdW5kaW5nQm94KCksSFswXS5fcHJpdmF0ZS5ib2R5Qm91bmRzfSwiZ2V0RWxlbWVudEJveCIpLFM9byhmdW5jdGlvbihIKXtyZXR1cm4gSC5ib3VuZGluZ0JveCgpLEhbMF0uX3ByaXZhdGUubGFiZWxCb3VuZHMubWFpbnx8ZH0sImdldExhYmVsQm94IiksQT1vKGZ1bmN0aW9uKEgpe3JldHVybiBILmJvdW5kaW5nQm94KCksSFswXS5fcHJpdmF0ZS5sYWJlbEJvdW5kcy5zb3VyY2V8fGR9LCJnZXRTb3VyY2VMYWJlbEJveCIpLEk9byhmdW5jdGlvbihIKXtyZXR1cm4gSC5ib3VuZGluZ0JveCgpLEhbMF0uX3ByaXZhdGUubGFiZWxCb3VuZHMudGFyZ2V0fHxkfSwiZ2V0VGFyZ2V0TGFiZWxCb3giKSxEPW8oZnVuY3Rpb24oSCxxKXtyZXR1cm4gcX0sImlzTGFiZWxWaXNpYmxlQXRTY2FsZSIpLGs9byhmdW5jdGlvbihIKXtyZXR1cm4gcChMKEgpKX0sImdldEVsZW1lbnRSb3RhdGlvblBvaW50IiksUj1vKGZ1bmN0aW9uKEgscSxRKXt2YXIgYWU9SD9IKyItIjoiIjtyZXR1cm57eDpxLngrUS5wc3R5bGUoYWUrInRleHQtbWFyZ2luLXgiKS5wZlZhbHVlLHk6cS55K1EucHN0eWxlKGFlKyJ0ZXh0LW1hcmdpbi15IikucGZWYWx1ZX19LCJhZGRUZXh0TWFyZ2luIiksQz1vKGZ1bmN0aW9uKEgscSxRKXt2YXIgYWU9SFswXS5fcHJpdmF0ZS5yc2NyYXRjaDtyZXR1cm57eDphZVtxXSx5OmFlW1FdfX0sImdldFJzUHQiKSxPPW8oZnVuY3Rpb24oSCl7cmV0dXJuIFIoIiIsQyhILCJsYWJlbFgiLCJsYWJlbFkiKSxIKX0sImdldExhYmVsUm90YXRpb25Qb2ludCIpLE49byhmdW5jdGlvbihIKXtyZXR1cm4gUigic291cmNlIixDKEgsInNvdXJjZUxhYmVsWCIsInNvdXJjZUxhYmVsWSIpLEgpfSwiZ2V0U291cmNlTGFiZWxSb3RhdGlvblBvaW50IiksUD1vKGZ1bmN0aW9uKEgpe3JldHVybiBSKCJ0YXJnZXQiLEMoSCwidGFyZ2V0TGFiZWxYIiwidGFyZ2V0TGFiZWxZIiksSCl9LCJnZXRUYXJnZXRMYWJlbFJvdGF0aW9uUG9pbnQiKSxGPW8oZnVuY3Rpb24oSCl7cmV0dXJuIG0oTChIKSl9LCJnZXRFbGVtZW50Um90YXRpb25PZmZzZXQiKSxCPW8oZnVuY3Rpb24oSCl7cmV0dXJuIG0oQShIKSl9LCJnZXRTb3VyY2VMYWJlbFJvdGF0aW9uT2Zmc2V0IiksRz1vKGZ1bmN0aW9uKEgpe3JldHVybiBtKEkoSCkpfSwiZ2V0VGFyZ2V0TGFiZWxSb3RhdGlvbk9mZnNldCIpLHo9byhmdW5jdGlvbihIKXt2YXIgcT1TKEgpLFE9bShTKEgpKTtpZihILmlzTm9kZSgpKXtzd2l0Y2goSC5wc3R5bGUoInRleHQtaGFsaWduIikudmFsdWUpe2Nhc2UibGVmdCI6US54PS1xLnc7YnJlYWs7Y2FzZSJyaWdodCI6US54PTA7YnJlYWt9c3dpdGNoKEgucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLnZhbHVlKXtjYXNlInRvcCI6US55PS1xLmg7YnJlYWs7Y2FzZSJib3R0b20iOlEueT0wO2JyZWFrfX1yZXR1cm4gUX0sImdldExhYmVsUm90YXRpb25PZmZzZXQiKSxXPWUuZGF0YS5lbGVUeHJDYWNoZT1uZXcgSngoZSx7Z2V0S2V5OnksZG9lc0VsZUludmFsaWRhdGVLZXk6ZyxkcmF3RWxlbWVudDp3LGdldEJvdW5kaW5nQm94OkwsZ2V0Um90YXRpb25Qb2ludDprLGdldFJvdGF0aW9uT2Zmc2V0OkYsYWxsb3dFZGdlVHhyQ2FjaGluZzohMSxhbGxvd1BhcmVudFR4ckNhY2hpbmc6ITF9KSxaPWUuZGF0YS5sYmxUeHJDYWNoZT1uZXcgSngoZSx7Z2V0S2V5OnYsZHJhd0VsZW1lbnQ6XyxnZXRCb3VuZGluZ0JveDpTLGdldFJvdGF0aW9uUG9pbnQ6TyxnZXRSb3RhdGlvbk9mZnNldDp6LGlzVmlzaWJsZTpEfSksaj1lLmRhdGEuc2xiVHhyQ2FjaGU9bmV3IEp4KGUse2dldEtleTp4LGRyYXdFbGVtZW50OlQsZ2V0Qm91bmRpbmdCb3g6QSxnZXRSb3RhdGlvblBvaW50Ok4sZ2V0Um90YXRpb25PZmZzZXQ6Qixpc1Zpc2libGU6RH0pLG9lPWUuZGF0YS50bGJUeHJDYWNoZT1uZXcgSngoZSx7Z2V0S2V5OmIsZHJhd0VsZW1lbnQ6RSxnZXRCb3VuZGluZ0JveDpJLGdldFJvdGF0aW9uUG9pbnQ6UCxnZXRSb3RhdGlvbk9mZnNldDpHLGlzVmlzaWJsZTpEfSksSz1lLmRhdGEubHlyVHhyQ2FjaGU9bmV3IGQxZShlKTtlLm9uVXBkYXRlRWxlQ2FsY3MobyhmdW5jdGlvbihILHEpe1cuaW52YWxpZGF0ZUVsZW1lbnRzKHEpLFouaW52YWxpZGF0ZUVsZW1lbnRzKHEpLGouaW52YWxpZGF0ZUVsZW1lbnRzKHEpLG9lLmludmFsaWRhdGVFbGVtZW50cyhxKSxLLmludmFsaWRhdGVFbGVtZW50cyhxKTtmb3IodmFyIFE9MDtRPHEubGVuZ3RoO1ErKyl7dmFyIGFlPXFbUV0uX3ByaXZhdGU7YWUub2xkQmFja2dyb3VuZFRpbWVzdGFtcD1hZS5iYWNrZ3JvdW5kVGltZXN0YW1wfX0sImludmFsaWRhdGVUZXh0dXJlQ2FjaGVzIikpO3ZhciBlZT1vKGZ1bmN0aW9uKEgpe2Zvcih2YXIgcT0wO3E8SC5sZW5ndGg7cSsrKUsuZW5xdWV1ZUVsZW1lbnRSZWZpbmVtZW50KEhbcV0uZWxlKX0sInJlZmluZUluTGF5ZXJzIik7Vy5vbkRlcXVldWUoZWUpLFoub25EZXF1ZXVlKGVlKSxqLm9uRGVxdWV1ZShlZSksb2Uub25EZXF1ZXVlKGVlKX1mdW5jdGlvbiBrMWUodCxlLHIpe3ZhciBuPXIsaT1vKGZ1bmN0aW9uKFMpe29uKCJDYW4gbm90IHJlZ2lzdGVyIGAiK2UrImAgZm9yIGAiK3QrImAgc2luY2UgYCIrUysiYCBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcHJvdG90eXBlIGFuZCBjYW4gbm90IGJlIG92ZXJyaWRkZW4iKX0sIm92ZXJyaWRlRXJyIik7aWYodD09PSJjb3JlIil7aWYoZmIucHJvdG90eXBlW2VdKXJldHVybiBpKGUpO2ZiLnByb3RvdHlwZVtlXT1yfWVsc2UgaWYodD09PSJjb2xsZWN0aW9uIil7aWYoQWEucHJvdG90eXBlW2VdKXJldHVybiBpKGUpO0FhLnByb3RvdHlwZVtlXT1yfWVsc2UgaWYodD09PSJsYXlvdXQiKXtmb3IodmFyIGE9byhmdW5jdGlvbihTKXt0aGlzLm9wdGlvbnM9UyxyLmNhbGwodGhpcyxTKSxVcih0aGlzLl9wcml2YXRlKXx8KHRoaXMuX3ByaXZhdGU9e30pLHRoaXMuX3ByaXZhdGUuY3k9Uy5jeSx0aGlzLl9wcml2YXRlLmxpc3RlbmVycz1bXSx0aGlzLmNyZWF0ZUVtaXR0ZXIoKX0sIkxheW91dCIpLHM9YS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShyLnByb3RvdHlwZSksbD1bXSx1PTA7dTxsLmxlbmd0aDt1Kyspe3ZhciBoPWxbdV07c1toXT1zW2hdfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfX1zLnN0YXJ0JiYhcy5ydW4/cy5ydW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydCgpLHRoaXN9OiFzLnN0YXJ0JiZzLnJ1biYmKHMuc3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ydW4oKSx0aGlzfSk7dmFyIGY9ci5wcm90b3R5cGUuc3RvcDtzLnN0b3A9ZnVuY3Rpb24oKXt2YXIgTD10aGlzLm9wdGlvbnM7aWYoTCYmTC5hbmltYXRlKXt2YXIgUz10aGlzLmFuaW1hdGlvbnM7aWYoUylmb3IodmFyIEE9MDtBPFMubGVuZ3RoO0ErKylTW0FdLnN0b3AoKX1yZXR1cm4gZj9mLmNhbGwodGhpcyk6dGhpcy5lbWl0KCJsYXlvdXRzdG9wIiksdGhpc30scy5kZXN0cm95fHwocy5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxzLmN5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuY3l9O3ZhciBkPW8oZnVuY3Rpb24oUyl7cmV0dXJuIFMuX3ByaXZhdGUuY3l9LCJnZXRDeSIpLHA9e2FkZEV2ZW50RmllbGRzOm8oZnVuY3Rpb24oUyxBKXtBLmxheW91dD1TLEEuY3k9ZChTKSxBLnRhcmdldD1TfSwiYWRkRXZlbnRGaWVsZHMiKSxidWJibGU6byhmdW5jdGlvbigpe3JldHVybiEwfSwiYnViYmxlIikscGFyZW50Om8oZnVuY3Rpb24oUyl7cmV0dXJuIGQoUyl9LCJwYXJlbnQiKX07aXIocyx7Y3JlYXRlRW1pdHRlcjpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZW1pdHRlcj1uZXcgcTYocCx0aGlzKSx0aGlzfSwiY3JlYXRlRW1pdHRlciIpLGVtaXR0ZXI6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmVtaXR0ZXJ9LCJlbWl0dGVyIiksb246byhmdW5jdGlvbihTLEEpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbihTLEEpLHRoaXN9LCJvbiIpLG9uZTpvKGZ1bmN0aW9uKFMsQSl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLm9uZShTLEEpLHRoaXN9LCJvbmUiKSxvbmNlOm8oZnVuY3Rpb24oUyxBKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkub25lKFMsQSksdGhpc30sIm9uY2UiKSxyZW1vdmVMaXN0ZW5lcjpvKGZ1bmN0aW9uKFMsQSl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLnJlbW92ZUxpc3RlbmVyKFMsQSksdGhpc30sInJlbW92ZUxpc3RlbmVyIikscmVtb3ZlQWxsTGlzdGVuZXJzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpc30sInJlbW92ZUFsbExpc3RlbmVycyIpLGVtaXQ6byhmdW5jdGlvbihTLEEpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5lbWl0KFMsQSksdGhpc30sImVtaXQiKX0pLHNuLmV2ZW50QWxpYXNlc09uKHMpLG49YX1lbHNlIGlmKHQ9PT0icmVuZGVyZXIiJiZlIT09Im51bGwiJiZlIT09ImJhc2UiKXt2YXIgbT1FMWUoInJlbmRlcmVyIiwiYmFzZSIpLGc9bS5wcm90b3R5cGUseT1yLHY9ci5wcm90b3R5cGUseD1vKGZ1bmN0aW9uKCl7bS5hcHBseSh0aGlzLGFyZ3VtZW50cykseS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LCJSZW5kZXJlciIpLGI9eC5wcm90b3R5cGU7Zm9yKHZhciB3IGluIGcpe3ZhciBfPWdbd10sVD12W3ddIT1udWxsO2lmKFQpcmV0dXJuIGkodyk7Ylt3XT1ffWZvcih2YXIgRSBpbiB2KWJbRV09dltFXTtnLmNsaWVudEZ1bmN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKEwpe2JbTF09YltMXXx8ZnVuY3Rpb24oKXtkaSgiUmVuZGVyZXIgZG9lcyBub3QgaW1wbGVtZW50IGByZW5kZXJlci4iK0wrIigpYCBvbiBpdHMgcHJvdG90eXBlIil9fSksbj14fWVsc2UgaWYodD09PSJfX3Byb3RvX18ifHx0PT09ImNvbnN0cnVjdG9yInx8dD09PSJwcm90b3R5cGUiKXJldHVybiBkaSh0KyIgaXMgYW4gaWxsZWdhbCB0eXBlIHRvIGJlIHJlZ2lzdGVyZWQsIHBvc3NpYmx5IGxlYWQgdG8gcHJvdG90eXBlIHBvbGx1dGlvbnMiKTtyZXR1cm4gam1lKHttYXA6dzFlLGtleXM6W3QsZV0sdmFsdWU6bn0pfWZ1bmN0aW9uIEUxZSh0LGUpe3JldHVybiBLbWUoe21hcDp3MWUsa2V5czpbdCxlXX0pfWZ1bmN0aW9uIGpldCh0LGUscixuLGkpe3JldHVybiBqbWUoe21hcDpUMWUsa2V5czpbdCxlLHIsbl0sdmFsdWU6aX0pfWZ1bmN0aW9uIEtldCh0LGUscixuKXtyZXR1cm4gS21lKHttYXA6VDFlLGtleXM6W3QsZSxyLG5dfSl9dmFyIFhpLExwZSx3cWUsSG1lLFRxZSxrcWUsZGIsWnQsbmksa24sVXIsRXFlLHh0LFNxZSxDNix3byxwYixXbWUsbkIsWW1lLENxZSxJZixBcWUsX3FlLExxZSxEcWUscmIsaUIsQjYscW1lLERwZSxqaSxOcWUsUnFlLE1xZSxJcWUsT3FlLFBxZSxYbWUsQnFlLGlyLEZxZSx6cWUsR3FlLCRxZSxWcWUsVXFlLGptZSxLbWUsWDAsangsWXFlLHFxZSxYcWUsanFlLEY2LEtxZSxDUCxRcWUsSnFlLGVYZSxyWGUsblhlLHcxLFFtZSxpWGUsYVhlLEh4LG9YZSxsWGUsY1hlLGhYZSxmWGUsZFhlLE5wZSxabWUsZ1hlLHlYZSxtYixScGUseFhlLGJYZSx3WGUsVFhlLE1wZSxFWGUsU1hlLENYZSx6NixBUCxKbWUsX1hlLEE2LGloLHAxLGVnZSxLeCx0Z2UsbmIsaWIsTFhlLF9mLGE2LERYZSxqMCxyZ2UsTlhlLElwZSxSWGUsTVhlLGFCLG5nZSxfNixPcGUsc0IsZGksaWdlLG9uLElYZSxaYyxPWGUsYWdlLFBYZSxzZ2UsX2EsT2Ysb0IsQlhlLFFsLERmLEZYZSxKYyx6WGUsR1hlLFMxLEc2LFBwZSxhYiwkWGUsZ2IsVlhlLFVYZSxIWGUsV1hlLFlYZSxxWGUsWFhlLGpYZSxLWGUsUVhlLFpYZSxfUCxKWGUsZWplLCQ2LG9nZSxtMSx0amUscmplLG5qZSxpamUsYWplLHM2LGxCLGxnZSxLMCxVMCxzamUsbGEseTEsb2plLHNiLEtzLGxqZSxjamUsdWplLGNnZSxoamUseTYsdjYsQnBlLGNCLFQxLGZqZSx1Z2UsaGdlLGRqZSxwamUsbWplLGdqZSx5amUsdmplLGpzLGFoLHhqZSxMNixENixiamUscTAsUXgsTFAsTmYsb2Isd2plLG82LG1zLGZnZSx6UCxRMCxkZ2UsdUIsVGplLEdQLGtqZSxFamUsRnBlLHYxLHpwZSx4MSxTamUsJFAsQ2plLEFqZSxfamUsTGplLHBnZSxEamUsTmplLFJqZSxNamUsSWplLE9qZSxQamUsR3BlLEJqZSxGamUsbWdlLCRwZSxWcGUsemplLEdqZSxXeCxrMSwkamUsaEIsTjYsRFAsZ2dlLHlnZSxWamUsVWplLEhqZSxVcGUsSHBlLFdqZSxZamUscWplLFhqZSxqamUsV3BlLEtqZSxRamUsWmplLEpqZSxZcGUsbDYsZUtlLHRLZSxxcGUscktlLG5LZSxpS2UsYUtlLHNLZSxvS2UsWHBlLGxLZSxqcGUsY0tlLHVLZSxoS2UsYzYsZktlLHU2LGRLZSx2Z2UseGdlLGJnZSx3Z2Usc2gsS3BlLFRnZSxRcGUsWnBlLHBLZSxDMSxWUCxaMCxtS2UsZ0tlLFU2LHlLZSx2S2UsYktlLHdLZSxUS2Usa0tlLEVLZSxDS2UsQUtlLE5QLEpwZSxMS2UsREtlLE5LZSxNS2UsSUtlLE9LZSxQS2UsQktlLEZLZSx6S2UsR0tlLFZLZSxIS2UsZkIsWUtlLGxiLFhLZSxLS2UsUUtlLFpLZSxKS2UsdFFlLHJRZSxuUWUsYVFlLHNRZSxsUWUsZW1lLHVRZSxrZ2UsSDYsZFFlLHBRZSxnUWUsdlFlLGJRZSxUUWUsa1FlLEVRZSxTUWUsQVFlLExRZSxXNixSUWUsSVFlLFBRZSxGUWUsRWdlLHpRZSxHUWUsJFFlLFVRZSxIUWUsV1FlLFlRZSxTZ2UsQ2dlLFhRZSx0bWUscm1lLGpRZSxfZ2UsTGdlLFpRZSxwQix0WmUsblplLGlaZSxubWUsc1plLG9aZSxsWmUsdVplLGhaZSxmWmUscFplLGdaZSx2WmUsYlplLFRaZSxrWmUsRVplLHNuLFNaZSx4NixWcixwbixNdCxVUCxDWmUsQVplLF9aZSxjMSxMZixIUCxMWmUsRFplLE5aZSxSWmUsTVplLERnZSxJWmUsT1plLG1CLFBaZSxwaSwkbixCWmUsRlplLHpaZSxQZixCZixSZixobCxFMSxjYixNZ2UsJFplLFk2LFpsLElnZSxPZ2UsaW1lLFZaZSxiMSx6Zix1bCxLbCxIMCxZeCxoNixNUCxVWmUsSFplLFBnZSxCZ2UsYW1lLHViLHNtZSxvbWUsV1plLFp4LHliLEZnZSxZWmUscVplLFhaZSxqWmUsS1plLFFaZSxaWmUsSlplLGVKZSxsbWUsdEplLHJKZSxuSmUsemdlLEdnZSxpSmUsJGdlLGNtZSxhSmUsRmYsVmdlLHVtZSxzSmUsb0plLGQ2LFVnZSxIZ2UsUXIsbEplLFdnZSxSNixjSmUsdUplLGI2LENhLEQxLGhKZSxmSmUsZEplLHBKZSxNZixIYSxmbWUsZG1lLHBtZSxBYSxNbixtSmUseUplLFJuLHc2LGJKZSx3SmUscDYscWdlLFdQLFQ2LFRKZSxrSmUsWVAsazYsWWEsZWIsRUplLHZiLHZCLGV1LEs2LHhCLFNhLFE2LFVhLFdhLFNKZSxDSmUsSjAsaGIsZmIsTTYsQUplLF9KZSxmMSx3bWUsTEplLERKZSxPUCxOSmUsUkplLE1KZSxJSmUsT0plLFBKZSxRZ2UsQkplLEZKZSx6SmUsVG1lLEdKZSwkSmUsSTYsVkplLFVKZSxISmUsV0plLFlKZSxxSmUsa21lLFhKZSxqSmUsS0plLFFKZSxaSmUsRW1lLFNtZSx3Qix0cCxPNixxUCxYUCxRYyxjbCxDbWUsQW1lLFkwLEU2LG5oLCQwLFcwLEtjLGQxLG02LHIxZSxuMWUsalAsS1AsX21lLExtZSxKSmUsZWV0LHFhLHhiLGtCLHR1LHMxZSxvMWUscmV0LGwxZSxEbWUsTm1lLEo2LGVTLGMxZSx1MWUsUjEsb2gsYmIsUm1lLG5ldCxoMWUsTTEsUFAsZjFlLGlldCxNbWUsZzYsUzYsUVAsYWV0LHNldCxvZXQsY2V0LHVldCxoZXQsZmV0LGRldCxwZXQsbWV0LGdldCx5ZXQsdmV0LHhldCxnMSxiZXQsSngsUWksd2V0LHRiLFA2LFRldCxrZXQsRWV0LENldCxBZXQsX2V0LExldCxEZXQsSW1lLE5ldCxSZXQsZDFlLExhLE9tZSxNZXQscDFlLFBtZSxydSxGZXQsemV0LEdldCwkZXQsVmV0LEJQLGxoLG0xZSxFQixycCxJMSxnMWUsVG8sVWV0LEdmLEZtZSx6bWUsWlAsSlAseTFlLFYwLHdiLHgxZSxXZXQsS3IsWWV0LHFldCxYZXQsdzFlLFQxZSxlQixTMWUsZXAsUWV0LGZsLFNCPU0oKCk9PnsidXNlIHN0cmljdCI7byhLaSwiX3R5cGVvZiIpO28odEIsIl9jbGFzc0NhbGxDaGVjayIpO28oQXBlLCJfZGVmaW5lUHJvcGVydGllcyIpO28ockIsIl9jcmVhdGVDbGFzcyIpO28oJG1lLCJfZGVmaW5lUHJvcGVydHkkMSIpO28oamwsIl9zbGljZWRUb0FycmF5Iik7byh2cWUsIl9hcnJheVdpdGhIb2xlcyIpO28oeHFlLCJfaXRlcmFibGVUb0FycmF5TGltaXQiKTtvKFZtZSwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5Iik7byhfcGUsIl9hcnJheUxpa2VUb0FycmF5Iik7byhicWUsIl9ub25JdGVyYWJsZVJlc3QiKTtvKFVtZSwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiKTtYaT10eXBlb2Ygd2luZG93PiJ1Ij9udWxsOndpbmRvdyxMcGU9WGk/WGkubmF2aWdhdG9yOm51bGw7WGkmJlhpLmRvY3VtZW50O3dxZT1LaSgiIiksSG1lPUtpKHt9KSxUcWU9S2koZnVuY3Rpb24oKXt9KSxrcWU9dHlwZW9mIEhUTUxFbGVtZW50PiJ1Ij8idW5kZWZpbmVkIjpLaShIVE1MRWxlbWVudCksZGI9byhmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5pbnN0YW5jZVN0cmluZyYmbmkoZS5pbnN0YW5jZVN0cmluZyk/ZS5pbnN0YW5jZVN0cmluZygpOm51bGx9LCJpbnN0YW5jZVN0ciIpLFp0PW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGwmJktpKGUpPT13cWV9LCJzdHJpbmciKSxuaT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlIT1udWxsJiZLaShlKT09PVRxZX0sImZuIiksa249byhmdW5jdGlvbihlKXtyZXR1cm4hd28oZSkmJihBcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXkoZSk6ZSE9bnVsbCYmZSBpbnN0YW5jZW9mIEFycmF5KX0sImFycmF5IiksVXI9byhmdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbCYmS2koZSk9PT1IbWUmJiFrbihlKSYmZS5jb25zdHJ1Y3Rvcj09PU9iamVjdH0sInBsYWluT2JqZWN0IiksRXFlPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGwmJktpKGUpPT09SG1lfSwib2JqZWN0IikseHQ9byhmdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbCYmS2koZSk9PT1LaSgxKSYmIWlzTmFOKGUpfSwibnVtYmVyIiksU3FlPW8oZnVuY3Rpb24oZSl7cmV0dXJuIHh0KGUpJiZNYXRoLmZsb29yKGUpPT09ZX0sImludGVnZXIiKSxDNj1vKGZ1bmN0aW9uKGUpe2lmKGtxZSE9PSJ1bmRlZmluZWQiKXJldHVybiBlIT1udWxsJiZlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnR9LCJodG1sRWxlbWVudCIpLHdvPW8oZnVuY3Rpb24oZSl7cmV0dXJuIHBiKGUpfHxXbWUoZSl9LCJlbGVtZW50T3JDb2xsZWN0aW9uIikscGI9byhmdW5jdGlvbihlKXtyZXR1cm4gZGIoZSk9PT0iY29sbGVjdGlvbiImJmUuX3ByaXZhdGUuc2luZ2xlfSwiZWxlbWVudCIpLFdtZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBkYihlKT09PSJjb2xsZWN0aW9uIiYmIWUuX3ByaXZhdGUuc2luZ2xlfSwiY29sbGVjdGlvbiIpLG5CPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGRiKGUpPT09ImNvcmUifSwiY29yZSIpLFltZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBkYihlKT09PSJzdHlsZXNoZWV0In0sInN0eWxlc2hlZXQiKSxDcWU9byhmdW5jdGlvbihlKXtyZXR1cm4gZGIoZSk9PT0iZXZlbnQifSwiZXZlbnQiKSxJZj1vKGZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsPyEwOiEhKGU9PT0iInx8ZS5tYXRjaCgvXlxzKyQvKSl9LCJlbXB0eVN0cmluZyIpLEFxZT1vKGZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgSFRNTEVsZW1lbnQ+InUiPyExOmUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH0sImRvbUVsZW1lbnQiKSxfcWU9byhmdW5jdGlvbihlKXtyZXR1cm4gVXIoZSkmJnh0KGUueDEpJiZ4dChlLngyKSYmeHQoZS55MSkmJnh0KGUueTIpfSwiYm91bmRpbmdCb3giKSxMcWU9byhmdW5jdGlvbihlKXtyZXR1cm4gRXFlKGUpJiZuaShlLnRoZW4pfSwicHJvbWlzZSIpLERxZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIExwZSYmTHBlLnVzZXJBZ2VudC5tYXRjaCgvbXNpZXx0cmlkZW50fGVkZ2UvaSl9LCJtcyIpLHJiPW8oZnVuY3Rpb24oZSxyKXtyfHwocj1vKGZ1bmN0aW9uKCl7aWYoYXJndW1lbnRzLmxlbmd0aD09PTEpcmV0dXJuIGFyZ3VtZW50c1swXTtpZihhcmd1bWVudHMubGVuZ3RoPT09MClyZXR1cm4idW5kZWZpbmVkIjtmb3IodmFyIGE9W10scz0wO3M8YXJndW1lbnRzLmxlbmd0aDtzKyspYS5wdXNoKGFyZ3VtZW50c1tzXSk7cmV0dXJuIGEuam9pbigiJCIpfSwia2V5Rm4iKSk7dmFyIG49byhmdW5jdGlvbiBpKCl7dmFyIGE9dGhpcyxzPWFyZ3VtZW50cyxsLHU9ci5hcHBseShhLHMpLGg9aS5jYWNoZTtyZXR1cm4obD1oW3VdKXx8KGw9aFt1XT1lLmFwcGx5KGEscykpLGx9LCJtZW1vaXplZEZuIik7cmV0dXJuIG4uY2FjaGU9e30sbn0sIm1lbW9pemUiKSxpQj1yYihmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC8oW0EtWl0pL2csZnVuY3Rpb24oZSl7cmV0dXJuIi0iK2UudG9Mb3dlckNhc2UoKX0pfSksQjY9cmIoZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvKC1cdykvZyxmdW5jdGlvbihlKXtyZXR1cm4gZVsxXS50b1VwcGVyQ2FzZSgpfSl9KSxxbWU9cmIoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlWzBdLnRvVXBwZXJDYXNlKCkrZS5zdWJzdHJpbmcoMSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrIiQiK2V9KSxEcGU9byhmdW5jdGlvbihlKXtyZXR1cm4gSWYoZSk/ZTplLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc3Vic3RyaW5nKDEpfSwiY2FwaXRhbGl6ZSIpLGppPSIoPzpbLStdPyg/Oig/OlxcZCt8XFxkKlxcLlxcZCspKD86W0VlXVsrLV0/XFxkKyk/KSkiLE5xZT0icmdiW2FdP1xcKCgiK2ppKyJbJV0/KVxccyosXFxzKigiK2ppKyJbJV0/KVxccyosXFxzKigiK2ppKyJbJV0/KSg/OlxccyosXFxzKigiK2ppKyIpKT9cXCkiLFJxZT0icmdiW2FdP1xcKCg/OiIramkrIlslXT8pXFxzKixcXHMqKD86IitqaSsiWyVdPylcXHMqLFxccyooPzoiK2ppKyJbJV0/KSg/OlxccyosXFxzKig/OiIramkrIikpP1xcKSIsTXFlPSJoc2xbYV0/XFwoKCIramkrIilcXHMqLFxccyooIitqaSsiWyVdKVxccyosXFxzKigiK2ppKyJbJV0pKD86XFxzKixcXHMqKCIramkrIikpP1xcKSIsSXFlPSJoc2xbYV0/XFwoKD86IitqaSsiKVxccyosXFxzKig/OiIramkrIlslXSlcXHMqLFxccyooPzoiK2ppKyJbJV0pKD86XFxzKixcXHMqKD86IitqaSsiKSk/XFwpIixPcWU9IlxcI1swLTlhLWZBLUZdezN9IixQcWU9IlxcI1swLTlhLWZBLUZdezZ9IixYbWU9byhmdW5jdGlvbihlLHIpe3JldHVybiBlPHI/LTE6ZT5yPzE6MH0sImFzY2VuZGluZyIpLEJxZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuLTEqWG1lKGUscil9LCJkZXNjZW5kaW5nIiksaXI9T2JqZWN0LmFzc2lnbiE9bnVsbD9PYmplY3QuYXNzaWduLmJpbmQoT2JqZWN0KTpmdW5jdGlvbih0KXtmb3IodmFyIGU9YXJndW1lbnRzLHI9MTtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtpZihuIT1udWxsKWZvcih2YXIgaT1PYmplY3Qua2V5cyhuKSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV07dFtzXT1uW3NdfX1yZXR1cm4gdH0sRnFlPW8oZnVuY3Rpb24oZSl7aWYoISghKGUubGVuZ3RoPT09NHx8ZS5sZW5ndGg9PT03KXx8ZVswXSE9PSIjIikpe3ZhciByPWUubGVuZ3RoPT09NCxuLGksYSxzPTE2O3JldHVybiByPyhuPXBhcnNlSW50KGVbMV0rZVsxXSxzKSxpPXBhcnNlSW50KGVbMl0rZVsyXSxzKSxhPXBhcnNlSW50KGVbM10rZVszXSxzKSk6KG49cGFyc2VJbnQoZVsxXStlWzJdLHMpLGk9cGFyc2VJbnQoZVszXStlWzRdLHMpLGE9cGFyc2VJbnQoZVs1XStlWzZdLHMpKSxbbixpLGFdfX0sImhleDJ0dXBsZSIpLHpxZT1vKGZ1bmN0aW9uKGUpe3ZhciByLG4saSxhLHMsbCx1LGg7ZnVuY3Rpb24gZihnLHksdil7cmV0dXJuIHY8MCYmKHYrPTEpLHY+MSYmKHYtPTEpLHY8MS82P2crKHktZykqNip2OnY8MS8yP3k6djwyLzM/ZysoeS1nKSooMi8zLXYpKjY6Z31vKGYsImh1ZTJyZ2IiKTt2YXIgZD1uZXcgUmVnRXhwKCJeIitNcWUrIiQiKS5leGVjKGUpO2lmKGQpe2lmKG49cGFyc2VJbnQoZFsxXSksbjwwP249KDM2MC0gLTEqbiUzNjApJTM2MDpuPjM2MCYmKG49biUzNjApLG4vPTM2MCxpPXBhcnNlRmxvYXQoZFsyXSksaTwwfHxpPjEwMHx8KGk9aS8xMDAsYT1wYXJzZUZsb2F0KGRbM10pLGE8MHx8YT4xMDApfHwoYT1hLzEwMCxzPWRbNF0scyE9PXZvaWQgMCYmKHM9cGFyc2VGbG9hdChzKSxzPDB8fHM+MSkpKXJldHVybjtpZihpPT09MClsPXU9aD1NYXRoLnJvdW5kKGEqMjU1KTtlbHNle3ZhciBwPWE8LjU/YSooMStpKTphK2ktYSppLG09MiphLXA7bD1NYXRoLnJvdW5kKDI1NSpmKG0scCxuKzEvMykpLHU9TWF0aC5yb3VuZCgyNTUqZihtLHAsbikpLGg9TWF0aC5yb3VuZCgyNTUqZihtLHAsbi0xLzMpKX1yPVtsLHUsaCxzXX1yZXR1cm4gcn0sImhzbDJ0dXBsZSIpLEdxZT1vKGZ1bmN0aW9uKGUpe3ZhciByLG49bmV3IFJlZ0V4cCgiXiIrTnFlKyIkIikuZXhlYyhlKTtpZihuKXtyPVtdO2Zvcih2YXIgaT1bXSxhPTE7YTw9MzthKyspe3ZhciBzPW5bYV07aWYoc1tzLmxlbmd0aC0xXT09PSIlIiYmKGlbYV09ITApLHM9cGFyc2VGbG9hdChzKSxpW2FdJiYocz1zLzEwMCoyNTUpLHM8MHx8cz4yNTUpcmV0dXJuO3IucHVzaChNYXRoLmZsb29yKHMpKX12YXIgbD1pWzFdfHxpWzJdfHxpWzNdLHU9aVsxXSYmaVsyXSYmaVszXTtpZihsJiYhdSlyZXR1cm47dmFyIGg9bls0XTtpZihoIT09dm9pZCAwKXtpZihoPXBhcnNlRmxvYXQoaCksaDwwfHxoPjEpcmV0dXJuO3IucHVzaChoKX19cmV0dXJuIHJ9LCJyZ2IydHVwbGUiKSwkcWU9byhmdW5jdGlvbihlKXtyZXR1cm4gVXFlW2UudG9Mb3dlckNhc2UoKV19LCJjb2xvcm5hbWUydHVwbGUiKSxWcWU9byhmdW5jdGlvbihlKXtyZXR1cm4oa24oZSk/ZTpudWxsKXx8JHFlKGUpfHxGcWUoZSl8fEdxZShlKXx8enFlKGUpfSwiY29sb3IydHVwbGUiKSxVcWU9e3RyYW5zcGFyZW50OlswLDAsMCwwXSxhbGljZWJsdWU6WzI0MCwyNDgsMjU1XSxhbnRpcXVld2hpdGU6WzI1MCwyMzUsMjE1XSxhcXVhOlswLDI1NSwyNTVdLGFxdWFtYXJpbmU6WzEyNywyNTUsMjEyXSxhenVyZTpbMjQwLDI1NSwyNTVdLGJlaWdlOlsyNDUsMjQ1LDIyMF0sYmlzcXVlOlsyNTUsMjI4LDE5Nl0sYmxhY2s6WzAsMCwwXSxibGFuY2hlZGFsbW9uZDpbMjU1LDIzNSwyMDVdLGJsdWU6WzAsMCwyNTVdLGJsdWV2aW9sZXQ6WzEzOCw0MywyMjZdLGJyb3duOlsxNjUsNDIsNDJdLGJ1cmx5d29vZDpbMjIyLDE4NCwxMzVdLGNhZGV0Ymx1ZTpbOTUsMTU4LDE2MF0sY2hhcnRyZXVzZTpbMTI3LDI1NSwwXSxjaG9jb2xhdGU6WzIxMCwxMDUsMzBdLGNvcmFsOlsyNTUsMTI3LDgwXSxjb3JuZmxvd2VyYmx1ZTpbMTAwLDE0OSwyMzddLGNvcm5zaWxrOlsyNTUsMjQ4LDIyMF0sY3JpbXNvbjpbMjIwLDIwLDYwXSxjeWFuOlswLDI1NSwyNTVdLGRhcmtibHVlOlswLDAsMTM5XSxkYXJrY3lhbjpbMCwxMzksMTM5XSxkYXJrZ29sZGVucm9kOlsxODQsMTM0LDExXSxkYXJrZ3JheTpbMTY5LDE2OSwxNjldLGRhcmtncmVlbjpbMCwxMDAsMF0sZGFya2dyZXk6WzE2OSwxNjksMTY5XSxkYXJra2hha2k6WzE4OSwxODMsMTA3XSxkYXJrbWFnZW50YTpbMTM5LDAsMTM5XSxkYXJrb2xpdmVncmVlbjpbODUsMTA3LDQ3XSxkYXJrb3JhbmdlOlsyNTUsMTQwLDBdLGRhcmtvcmNoaWQ6WzE1Myw1MCwyMDRdLGRhcmtyZWQ6WzEzOSwwLDBdLGRhcmtzYWxtb246WzIzMywxNTAsMTIyXSxkYXJrc2VhZ3JlZW46WzE0MywxODgsMTQzXSxkYXJrc2xhdGVibHVlOls3Miw2MSwxMzldLGRhcmtzbGF0ZWdyYXk6WzQ3LDc5LDc5XSxkYXJrc2xhdGVncmV5Ols0Nyw3OSw3OV0sZGFya3R1cnF1b2lzZTpbMCwyMDYsMjA5XSxkYXJrdmlvbGV0OlsxNDgsMCwyMTFdLGRlZXBwaW5rOlsyNTUsMjAsMTQ3XSxkZWVwc2t5Ymx1ZTpbMCwxOTEsMjU1XSxkaW1ncmF5OlsxMDUsMTA1LDEwNV0sZGltZ3JleTpbMTA1LDEwNSwxMDVdLGRvZGdlcmJsdWU6WzMwLDE0NCwyNTVdLGZpcmVicmljazpbMTc4LDM0LDM0XSxmbG9yYWx3aGl0ZTpbMjU1LDI1MCwyNDBdLGZvcmVzdGdyZWVuOlszNCwxMzksMzRdLGZ1Y2hzaWE6WzI1NSwwLDI1NV0sZ2FpbnNib3JvOlsyMjAsMjIwLDIyMF0sZ2hvc3R3aGl0ZTpbMjQ4LDI0OCwyNTVdLGdvbGQ6WzI1NSwyMTUsMF0sZ29sZGVucm9kOlsyMTgsMTY1LDMyXSxncmF5OlsxMjgsMTI4LDEyOF0sZ3JleTpbMTI4LDEyOCwxMjhdLGdyZWVuOlswLDEyOCwwXSxncmVlbnllbGxvdzpbMTczLDI1NSw0N10saG9uZXlkZXc6WzI0MCwyNTUsMjQwXSxob3RwaW5rOlsyNTUsMTA1LDE4MF0saW5kaWFucmVkOlsyMDUsOTIsOTJdLGluZGlnbzpbNzUsMCwxMzBdLGl2b3J5OlsyNTUsMjU1LDI0MF0sa2hha2k6WzI0MCwyMzAsMTQwXSxsYXZlbmRlcjpbMjMwLDIzMCwyNTBdLGxhdmVuZGVyYmx1c2g6WzI1NSwyNDAsMjQ1XSxsYXduZ3JlZW46WzEyNCwyNTIsMF0sbGVtb25jaGlmZm9uOlsyNTUsMjUwLDIwNV0sbGlnaHRibHVlOlsxNzMsMjE2LDIzMF0sbGlnaHRjb3JhbDpbMjQwLDEyOCwxMjhdLGxpZ2h0Y3lhbjpbMjI0LDI1NSwyNTVdLGxpZ2h0Z29sZGVucm9keWVsbG93OlsyNTAsMjUwLDIxMF0sbGlnaHRncmF5OlsyMTEsMjExLDIxMV0sbGlnaHRncmVlbjpbMTQ0LDIzOCwxNDRdLGxpZ2h0Z3JleTpbMjExLDIxMSwyMTFdLGxpZ2h0cGluazpbMjU1LDE4MiwxOTNdLGxpZ2h0c2FsbW9uOlsyNTUsMTYwLDEyMl0sbGlnaHRzZWFncmVlbjpbMzIsMTc4LDE3MF0sbGlnaHRza3libHVlOlsxMzUsMjA2LDI1MF0sbGlnaHRzbGF0ZWdyYXk6WzExOSwxMzYsMTUzXSxsaWdodHNsYXRlZ3JleTpbMTE5LDEzNiwxNTNdLGxpZ2h0c3RlZWxibHVlOlsxNzYsMTk2LDIyMl0sbGlnaHR5ZWxsb3c6WzI1NSwyNTUsMjI0XSxsaW1lOlswLDI1NSwwXSxsaW1lZ3JlZW46WzUwLDIwNSw1MF0sbGluZW46WzI1MCwyNDAsMjMwXSxtYWdlbnRhOlsyNTUsMCwyNTVdLG1hcm9vbjpbMTI4LDAsMF0sbWVkaXVtYXF1YW1hcmluZTpbMTAyLDIwNSwxNzBdLG1lZGl1bWJsdWU6WzAsMCwyMDVdLG1lZGl1bW9yY2hpZDpbMTg2LDg1LDIxMV0sbWVkaXVtcHVycGxlOlsxNDcsMTEyLDIxOV0sbWVkaXVtc2VhZ3JlZW46WzYwLDE3OSwxMTNdLG1lZGl1bXNsYXRlYmx1ZTpbMTIzLDEwNCwyMzhdLG1lZGl1bXNwcmluZ2dyZWVuOlswLDI1MCwxNTRdLG1lZGl1bXR1cnF1b2lzZTpbNzIsMjA5LDIwNF0sbWVkaXVtdmlvbGV0cmVkOlsxOTksMjEsMTMzXSxtaWRuaWdodGJsdWU6WzI1LDI1LDExMl0sbWludGNyZWFtOlsyNDUsMjU1LDI1MF0sbWlzdHlyb3NlOlsyNTUsMjI4LDIyNV0sbW9jY2FzaW46WzI1NSwyMjgsMTgxXSxuYXZham93aGl0ZTpbMjU1LDIyMiwxNzNdLG5hdnk6WzAsMCwxMjhdLG9sZGxhY2U6WzI1MywyNDUsMjMwXSxvbGl2ZTpbMTI4LDEyOCwwXSxvbGl2ZWRyYWI6WzEwNywxNDIsMzVdLG9yYW5nZTpbMjU1LDE2NSwwXSxvcmFuZ2VyZWQ6WzI1NSw2OSwwXSxvcmNoaWQ6WzIxOCwxMTIsMjE0XSxwYWxlZ29sZGVucm9kOlsyMzgsMjMyLDE3MF0scGFsZWdyZWVuOlsxNTIsMjUxLDE1Ml0scGFsZXR1cnF1b2lzZTpbMTc1LDIzOCwyMzhdLHBhbGV2aW9sZXRyZWQ6WzIxOSwxMTIsMTQ3XSxwYXBheWF3aGlwOlsyNTUsMjM5LDIxM10scGVhY2hwdWZmOlsyNTUsMjE4LDE4NV0scGVydTpbMjA1LDEzMyw2M10scGluazpbMjU1LDE5MiwyMDNdLHBsdW06WzIyMSwxNjAsMjIxXSxwb3dkZXJibHVlOlsxNzYsMjI0LDIzMF0scHVycGxlOlsxMjgsMCwxMjhdLHJlZDpbMjU1LDAsMF0scm9zeWJyb3duOlsxODgsMTQzLDE0M10scm95YWxibHVlOls2NSwxMDUsMjI1XSxzYWRkbGVicm93bjpbMTM5LDY5LDE5XSxzYWxtb246WzI1MCwxMjgsMTE0XSxzYW5keWJyb3duOlsyNDQsMTY0LDk2XSxzZWFncmVlbjpbNDYsMTM5LDg3XSxzZWFzaGVsbDpbMjU1LDI0NSwyMzhdLHNpZW5uYTpbMTYwLDgyLDQ1XSxzaWx2ZXI6WzE5MiwxOTIsMTkyXSxza3libHVlOlsxMzUsMjA2LDIzNV0sc2xhdGVibHVlOlsxMDYsOTAsMjA1XSxzbGF0ZWdyYXk6WzExMiwxMjgsMTQ0XSxzbGF0ZWdyZXk6WzExMiwxMjgsMTQ0XSxzbm93OlsyNTUsMjUwLDI1MF0sc3ByaW5nZ3JlZW46WzAsMjU1LDEyN10sc3RlZWxibHVlOls3MCwxMzAsMTgwXSx0YW46WzIxMCwxODAsMTQwXSx0ZWFsOlswLDEyOCwxMjhdLHRoaXN0bGU6WzIxNiwxOTEsMjE2XSx0b21hdG86WzI1NSw5OSw3MV0sdHVycXVvaXNlOls2NCwyMjQsMjA4XSx2aW9sZXQ6WzIzOCwxMzAsMjM4XSx3aGVhdDpbMjQ1LDIyMiwxNzldLHdoaXRlOlsyNTUsMjU1LDI1NV0sd2hpdGVzbW9rZTpbMjQ1LDI0NSwyNDVdLHllbGxvdzpbMjU1LDI1NSwwXSx5ZWxsb3dncmVlbjpbMTU0LDIwNSw1MF19LGptZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1lLm1hcCxuPWUua2V5cyxpPW4ubGVuZ3RoLGE9MDthPGk7YSsrKXt2YXIgcz1uW2FdO2lmKFVyKHMpKXRocm93IEVycm9yKCJUcmllZCB0byBzZXQgbWFwIHdpdGggb2JqZWN0IGtleSIpO2E8bi5sZW5ndGgtMT8ocltzXT09bnVsbCYmKHJbc109e30pLHI9cltzXSk6cltzXT1lLnZhbHVlfX0sInNldE1hcCIpLEttZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1lLm1hcCxuPWUua2V5cyxpPW4ubGVuZ3RoLGE9MDthPGk7YSsrKXt2YXIgcz1uW2FdO2lmKFVyKHMpKXRocm93IEVycm9yKCJUcmllZCB0byBnZXQgbWFwIHdpdGggb2JqZWN0IGtleSIpO2lmKHI9cltzXSxyPT1udWxsKXJldHVybiByfXJldHVybiByfSwiZ2V0TWFwIik7byhIcWUsImlzT2JqZWN0Iik7WDA9SHFlLGp4PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6e307byhXcWUsImNyZWF0ZUNvbW1vbmpzTW9kdWxlIik7WXFlPXR5cGVvZiBqeD09Im9iamVjdCImJmp4JiZqeC5PYmplY3Q9PT1PYmplY3QmJmp4LHFxZT1ZcWUsWHFlPXR5cGVvZiBzZWxmPT0ib2JqZWN0IiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsanFlPXFxZXx8WHFlfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLEY2PWpxZSxLcWU9byhmdW5jdGlvbigpe3JldHVybiBGNi5EYXRlLm5vdygpfSwibm93IiksQ1A9S3FlLFFxZT0vXHMvO28oWnFlLCJ0cmltbWVkRW5kSW5kZXgiKTtKcWU9WnFlLGVYZT0vXlxzKy87byh0WGUsImJhc2VUcmltIik7clhlPXRYZSxuWGU9RjYuU3ltYm9sLHcxPW5YZSxRbWU9T2JqZWN0LnByb3RvdHlwZSxpWGU9UW1lLmhhc093blByb3BlcnR5LGFYZT1RbWUudG9TdHJpbmcsSHg9dzE/dzEudG9TdHJpbmdUYWc6dm9pZCAwO28oc1hlLCJnZXRSYXdUYWciKTtvWGU9c1hlLGxYZT1PYmplY3QucHJvdG90eXBlLGNYZT1sWGUudG9TdHJpbmc7byh1WGUsIm9iamVjdFRvU3RyaW5nIik7aFhlPXVYZSxmWGU9IltvYmplY3QgTnVsbF0iLGRYZT0iW29iamVjdCBVbmRlZmluZWRdIixOcGU9dzE/dzEudG9TdHJpbmdUYWc6dm9pZCAwO28ocFhlLCJiYXNlR2V0VGFnIik7Wm1lPXBYZTtvKG1YZSwiaXNPYmplY3RMaWtlIik7Z1hlPW1YZSx5WGU9IltvYmplY3QgU3ltYm9sXSI7byh2WGUsImlzU3ltYm9sIik7bWI9dlhlLFJwZT1OYU4seFhlPS9eWy0rXTB4WzAtOWEtZl0rJC9pLGJYZT0vXjBiWzAxXSskL2ksd1hlPS9eMG9bMC03XSskL2ksVFhlPXBhcnNlSW50O28oa1hlLCJ0b051bWJlciIpO01wZT1rWGUsRVhlPSJFeHBlY3RlZCBhIGZ1bmN0aW9uIixTWGU9TWF0aC5tYXgsQ1hlPU1hdGgubWluO28oQVhlLCJkZWJvdW5jZSIpO3o2PUFYZSxBUD1YaT9YaS5wZXJmb3JtYW5jZTpudWxsLEptZT1BUCYmQVAubm93P2Z1bmN0aW9uKCl7cmV0dXJuIEFQLm5vdygpfTpmdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpfSxfWGU9ZnVuY3Rpb24oKXtpZihYaSl7aWYoWGkucmVxdWVzdEFuaW1hdGlvbkZyYW1lKXJldHVybiBmdW5jdGlvbih0KXtYaS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodCl9O2lmKFhpLm1velJlcXVlc3RBbmltYXRpb25GcmFtZSlyZXR1cm4gZnVuY3Rpb24odCl7WGkubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpfTtpZihYaS53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUpcmV0dXJuIGZ1bmN0aW9uKHQpe1hpLndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSh0KX07aWYoWGkubXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUpcmV0dXJuIGZ1bmN0aW9uKHQpe1hpLm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpfX1yZXR1cm4gZnVuY3Rpb24odCl7dCYmc2V0VGltZW91dChmdW5jdGlvbigpe3QoSm1lKCkpfSwxZTMvNjApfX0oKSxBNj1vKGZ1bmN0aW9uKGUpe3JldHVybiBfWGUoZSl9LCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiKSxpaD1KbWUscDE9OTI2MSxlZ2U9NjU1OTksS3g9NTM4MSx0Z2U9byhmdW5jdGlvbihlKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnAxLG49cixpO2k9ZS5uZXh0KCksIWkuZG9uZTspbj1uKmVnZStpLnZhbHVlfDA7cmV0dXJuIG59LCJoYXNoSXRlcmFibGVJbnRzIiksbmI9byhmdW5jdGlvbihlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06cDE7cmV0dXJuIHIqZWdlK2V8MH0sImhhc2hJbnQiKSxpYj1vKGZ1bmN0aW9uKGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpLeDtyZXR1cm4ocjw8NSkrcitlfDB9LCJoYXNoSW50QWx0IiksTFhlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZSoyMDk3MTUyK3J9LCJjb21iaW5lSGFzaGVzIiksX2Y9byhmdW5jdGlvbihlKXtyZXR1cm4gZVswXSoyMDk3MTUyK2VbMV19LCJjb21iaW5lSGFzaGVzQXJyYXkiKSxhNj1vKGZ1bmN0aW9uKGUscil7cmV0dXJuW25iKGVbMF0sclswXSksaWIoZVsxXSxyWzFdKV19LCJoYXNoQXJyYXlzIiksRFhlPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj17dmFsdWU6MCxkb25lOiExfSxpPTAsYT1lLmxlbmd0aCxzPXtuZXh0Om8oZnVuY3Rpb24oKXtyZXR1cm4gaTxhP24udmFsdWU9ZVtpKytdOm4uZG9uZT0hMCxufSwibmV4dCIpfTtyZXR1cm4gdGdlKHMscil9LCJoYXNoSW50c0FycmF5IiksajA9byhmdW5jdGlvbihlLHIpe3ZhciBuPXt2YWx1ZTowLGRvbmU6ITF9LGk9MCxhPWUubGVuZ3RoLHM9e25leHQ6byhmdW5jdGlvbigpe3JldHVybiBpPGE/bi52YWx1ZT1lLmNoYXJDb2RlQXQoaSsrKTpuLmRvbmU9ITAsbn0sIm5leHQiKX07cmV0dXJuIHRnZShzLHIpfSwiaGFzaFN0cmluZyIpLHJnZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIE5YZShhcmd1bWVudHMpfSwiaGFzaFN0cmluZ3MiKSxOWGU9byhmdW5jdGlvbihlKXtmb3IodmFyIHIsbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dO249PT0wP3I9ajAoaSk6cj1qMChpLHIpfXJldHVybiByfSwiaGFzaFN0cmluZ3NBcnJheSIpLElwZT0hMCxSWGU9Y29uc29sZS53YXJuIT1udWxsLE1YZT1jb25zb2xlLnRyYWNlIT1udWxsLGFCPU51bWJlci5NQVhfU0FGRV9JTlRFR0VSfHw5MDA3MTk5MjU0NzQwOTkxLG5nZT1vKGZ1bmN0aW9uKCl7cmV0dXJuITB9LCJ0cnVlaWZ5IiksXzY9byhmdW5jdGlvbigpe3JldHVybiExfSwiZmFsc2lmeSIpLE9wZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIDB9LCJ6ZXJvaWZ5Iiksc0I9byhmdW5jdGlvbigpe30sIm5vb3AiKSxkaT1vKGZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcihlKX0sImVycm9yIiksaWdlPW8oZnVuY3Rpb24oZSl7aWYoZSE9PXZvaWQgMClJcGU9ISFlO2Vsc2UgcmV0dXJuIElwZX0sIndhcm5pbmdzIiksb249byhmdW5jdGlvbihlKXtpZ2UoKSYmKFJYZT9jb25zb2xlLndhcm4oZSk6KGNvbnNvbGUubG9nKGUpLE1YZSYmY29uc29sZS50cmFjZSgpKSl9LCJ3YXJuIiksSVhlPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGlyKHt9LGUpfSwiY2xvbmUiKSxaYz1vKGZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsP2U6a24oZSk/ZS5zbGljZSgpOlVyKGUpP0lYZShlKTplfSwiY29weSIpLE9YZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNsaWNlKCl9LCJjb3B5QXJyYXkiKSxhZ2U9byhmdW5jdGlvbihlLHIpe2ZvcihyPWU9IiI7ZSsrPDM2O3IrPWUqNTEmNTI/KGVeMTU/OF5NYXRoLnJhbmRvbSgpKihlXjIwPzE2OjQpOjQpLnRvU3RyaW5nKDE2KToiLSIpO3JldHVybiByfSwidXVpZCIpLFBYZT17fSxzZ2U9byhmdW5jdGlvbigpe3JldHVybiBQWGV9LCJzdGF0aWNFbXB0eU9iamVjdCIpLF9hPW8oZnVuY3Rpb24oZSl7dmFyIHI9T2JqZWN0LmtleXMoZSk7cmV0dXJuIGZ1bmN0aW9uKG4pe2Zvcih2YXIgaT17fSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBzPXJbYV0sbD1uPy5bc107aVtzXT1sPT09dm9pZCAwP2Vbc106bH1yZXR1cm4gaX19LCJkZWZhdWx0cyIpLE9mPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1lLmxlbmd0aC0xO2k+PTAmJiEoZVtpXT09PXImJihlLnNwbGljZShpLDEpLG4pKTtpLS0pO30sInJlbW92ZUZyb21BcnJheSIpLG9CPW8oZnVuY3Rpb24oZSl7ZS5zcGxpY2UoMCxlLmxlbmd0aCl9LCJjbGVhckFycmF5IiksQlhlPW8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtlLnB1c2goaSl9fSwicHVzaCIpLFFsPW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiBuJiYocj1xbWUobixyKSksZVtyXX0sImdldFByZWZpeGVkUHJvcGVydHkiKSxEZj1vKGZ1bmN0aW9uKGUscixuLGkpe24mJihyPXFtZShuLHIpKSxlW3JdPWl9LCJzZXRQcmVmaXhlZFByb3BlcnR5IiksRlhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RCKHRoaXMsdCksdGhpcy5fb2JqPXt9fXJldHVybiBvKHQsIk9iamVjdE1hcCIpLHJCKHQsW3trZXk6InNldCIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3JldHVybiB0aGlzLl9vYmpbcl09bix0aGlzfSwic2V0Iil9LHtrZXk6ImRlbGV0ZSIsdmFsdWU6byhmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fb2JqW3JdPXZvaWQgMCx0aGlzfSwiX2RlbGV0ZSIpfSx7a2V5OiJjbGVhciIsdmFsdWU6byhmdW5jdGlvbigpe3RoaXMuX29iaj17fX0sImNsZWFyIil9LHtrZXk6ImhhcyIsdmFsdWU6byhmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fb2JqW3JdIT09dm9pZCAwfSwiaGFzIil9LHtrZXk6ImdldCIsdmFsdWU6byhmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fb2JqW3JdfSwiZ2V0Iil9XSksdH0oKSxKYz10eXBlb2YgTWFwPCJ1Ij9NYXA6RlhlLHpYZT0idW5kZWZpbmVkIixHWGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe2lmKHRCKHRoaXMsdCksdGhpcy5fb2JqPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5zaXplPTAsZSE9bnVsbCl7dmFyIHI7ZS5pbnN0YW5jZVN0cmluZyE9bnVsbCYmZS5pbnN0YW5jZVN0cmluZygpPT09dGhpcy5pbnN0YW5jZVN0cmluZygpP3I9ZS50b0FycmF5KCk6cj1lO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXRoaXMuYWRkKHJbbl0pfX1yZXR1cm4gbyh0LCJPYmplY3RTZXQiKSxyQih0LFt7a2V5OiJpbnN0YW5jZVN0cmluZyIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiJzZXQifSwiaW5zdGFuY2VTdHJpbmciKX0se2tleToiYWRkIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX29iajtuW3JdIT09MSYmKG5bcl09MSx0aGlzLnNpemUrKyl9LCJhZGQiKX0se2tleToiZGVsZXRlIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX29iajtuW3JdPT09MSYmKG5bcl09MCx0aGlzLnNpemUtLSl9LCJfZGVsZXRlIil9LHtrZXk6ImNsZWFyIix2YWx1ZTpvKGZ1bmN0aW9uKCl7dGhpcy5fb2JqPU9iamVjdC5jcmVhdGUobnVsbCl9LCJjbGVhciIpfSx7a2V5OiJoYXMiLHZhbHVlOm8oZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX29ialtyXT09PTF9LCJoYXMiKX0se2tleToidG9BcnJheSIsdmFsdWU6byhmdW5jdGlvbigpe3ZhciByPXRoaXM7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX29iaikuZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiByLmhhcyhuKX0pfSwidG9BcnJheSIpfSx7a2V5OiJmb3JFYWNoIix2YWx1ZTpvKGZ1bmN0aW9uKHIsbil7cmV0dXJuIHRoaXMudG9BcnJheSgpLmZvckVhY2gocixuKX0sImZvckVhY2giKX1dKSx0fSgpLFMxPSh0eXBlb2YgU2V0PiJ1Ij8idW5kZWZpbmVkIjpLaShTZXQpKSE9PXpYZT9TZXQ6R1hlLEc2PW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITA7aWYoZT09PXZvaWQgMHx8cj09PXZvaWQgMHx8IW5CKGUpKXtkaSgiQW4gZWxlbWVudCBtdXN0IGhhdmUgYSBjb3JlIHJlZmVyZW5jZSBhbmQgcGFyYW1ldGVycyBzZXQiKTtyZXR1cm59dmFyIGk9ci5ncm91cDtpZihpPT1udWxsJiYoci5kYXRhJiZyLmRhdGEuc291cmNlIT1udWxsJiZyLmRhdGEudGFyZ2V0IT1udWxsP2k9ImVkZ2VzIjppPSJub2RlcyIpLGkhPT0ibm9kZXMiJiZpIT09ImVkZ2VzIil7ZGkoIkFuIGVsZW1lbnQgbXVzdCBiZSBvZiB0eXBlIGBub2Rlc2Agb3IgYGVkZ2VzYDsgeW91IHNwZWNpZmllZCBgIitpKyJgIik7cmV0dXJufXRoaXMubGVuZ3RoPTEsdGhpc1swXT10aGlzO3ZhciBhPXRoaXMuX3ByaXZhdGU9e2N5OmUsc2luZ2xlOiEwLGRhdGE6ci5kYXRhfHx7fSxwb3NpdGlvbjpyLnBvc2l0aW9ufHx7eDowLHk6MH0sYXV0b1dpZHRoOnZvaWQgMCxhdXRvSGVpZ2h0OnZvaWQgMCxhdXRvUGFkZGluZzp2b2lkIDAsY29tcG91bmRCb3VuZHNDbGVhbjohMSxsaXN0ZW5lcnM6W10sZ3JvdXA6aSxzdHlsZTp7fSxyc3R5bGU6e30sc3R5bGVDeHRzOltdLHN0eWxlS2V5czp7fSxyZW1vdmVkOiEwLHNlbGVjdGVkOiEhci5zZWxlY3RlZCxzZWxlY3RhYmxlOnIuc2VsZWN0YWJsZT09PXZvaWQgMD8hMDohIXIuc2VsZWN0YWJsZSxsb2NrZWQ6ISFyLmxvY2tlZCxncmFiYmVkOiExLGdyYWJiYWJsZTpyLmdyYWJiYWJsZT09PXZvaWQgMD8hMDohIXIuZ3JhYmJhYmxlLHBhbm5hYmxlOnIucGFubmFibGU9PT12b2lkIDA/aT09PSJlZGdlcyI6ISFyLnBhbm5hYmxlLGFjdGl2ZTohMSxjbGFzc2VzOm5ldyBTMSxhbmltYXRpb246e2N1cnJlbnQ6W10scXVldWU6W119LHJzY3JhdGNoOnt9LHNjcmF0Y2g6ci5zY3JhdGNofHx7fSxlZGdlczpbXSxjaGlsZHJlbjpbXSxwYXJlbnQ6ci5wYXJlbnQmJnIucGFyZW50LmlzTm9kZSgpP3IucGFyZW50Om51bGwsdHJhdmVyc2FsQ2FjaGU6e30sYmFja2dyb3VuZGluZzohMSxiYkNhY2hlOm51bGwsYmJDYWNoZVNoaWZ0Ont4OjAseTowfSxib2R5Qm91bmRzOm51bGwsb3ZlcmxheUJvdW5kczpudWxsLGxhYmVsQm91bmRzOnthbGw6bnVsbCxzb3VyY2U6bnVsbCx0YXJnZXQ6bnVsbCxtYWluOm51bGx9LGFycm93Qm91bmRzOntzb3VyY2U6bnVsbCx0YXJnZXQ6bnVsbCwibWlkLXNvdXJjZSI6bnVsbCwibWlkLXRhcmdldCI6bnVsbH19O2lmKGEucG9zaXRpb24ueD09bnVsbCYmKGEucG9zaXRpb24ueD0wKSxhLnBvc2l0aW9uLnk9PW51bGwmJihhLnBvc2l0aW9uLnk9MCksci5yZW5kZXJlZFBvc2l0aW9uKXt2YXIgcz1yLnJlbmRlcmVkUG9zaXRpb24sbD1lLnBhbigpLHU9ZS56b29tKCk7YS5wb3NpdGlvbj17eDoocy54LWwueCkvdSx5OihzLnktbC55KS91fX12YXIgaD1bXTtrbihyLmNsYXNzZXMpP2g9ci5jbGFzc2VzOlp0KHIuY2xhc3NlcykmJihoPXIuY2xhc3Nlcy5zcGxpdCgvXHMrLykpO2Zvcih2YXIgZj0wLGQ9aC5sZW5ndGg7ZjxkO2YrKyl7dmFyIHA9aFtmXTshcHx8cD09PSIifHxhLmNsYXNzZXMuYWRkKHApfXRoaXMuY3JlYXRlRW1pdHRlcigpO3ZhciBtPXIuc3R5bGV8fHIuY3NzO20mJihvbigiU2V0dGluZyBhIGBzdHlsZWAgYnlwYXNzIGF0IGVsZW1lbnQgY3JlYXRpb24gc2hvdWxkIGJlIGRvbmUgb25seSB3aGVuIGFic29sdXRlbHkgbmVjZXNzYXJ5LiAgVHJ5IHRvIHVzZSB0aGUgc3R5bGVzaGVldCBpbnN0ZWFkLiIpLHRoaXMuc3R5bGUobSkpLChuPT09dm9pZCAwfHxuKSYmdGhpcy5yZXN0b3JlKCl9LCJFbGVtZW50IiksUHBlPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGU9e2JmczplLmJmc3x8IWUuZGZzLGRmczplLmRmc3x8IWUuYmZzfSxvKGZ1bmN0aW9uKG4saSxhKXt2YXIgcztVcihuKSYmIXdvKG4pJiYocz1uLG49cy5yb290c3x8cy5yb290LGk9cy52aXNpdCxhPXMuZGlyZWN0ZWQpLGE9YXJndW1lbnRzLmxlbmd0aD09PTImJiFuaShpKT9pOmEsaT1uaShpKT9pOmZ1bmN0aW9uKCl7fTtmb3IodmFyIGw9dGhpcy5fcHJpdmF0ZS5jeSx1PW49WnQobik/dGhpcy5maWx0ZXIobik6bixoPVtdLGY9W10sZD17fSxwPXt9LG09e30sZz0wLHksdj10aGlzLmJ5R3JvdXAoKSx4PXYubm9kZXMsYj12LmVkZ2VzLHc9MDt3PHUubGVuZ3RoO3crKyl7dmFyIF89dVt3XSxUPV8uaWQoKTtfLmlzTm9kZSgpJiYoaC51bnNoaWZ0KF8pLGUuYmZzJiYobVtUXT0hMCxmLnB1c2goXykpLHBbVF09MCl9Zm9yKHZhciBFPW8oZnVuY3Rpb24oKXt2YXIgUj1lLmJmcz9oLnNoaWZ0KCk6aC5wb3AoKSxDPVIuaWQoKTtpZihlLmRmcyl7aWYobVtDXSlyZXR1cm4iY29udGludWUiO21bQ109ITAsZi5wdXNoKFIpfXZhciBPPXBbQ10sTj1kW0NdLFA9TiE9bnVsbD9OLnNvdXJjZSgpOm51bGwsRj1OIT1udWxsP04udGFyZ2V0KCk6bnVsbCxCPU49PW51bGw/dm9pZCAwOlIuc2FtZShQKT9GWzBdOlBbMF0sRz12b2lkIDA7aWYoRz1pKFIsTixCLGcrKyxPKSxHPT09ITApcmV0dXJuIHk9UiwiYnJlYWsiO2lmKEc9PT0hMSlyZXR1cm4iYnJlYWsiO2Zvcih2YXIgej1SLmNvbm5lY3RlZEVkZ2VzKCkuZmlsdGVyKGZ1bmN0aW9uKEspe3JldHVybighYXx8Sy5zb3VyY2UoKS5zYW1lKFIpKSYmYi5oYXMoSyl9KSxXPTA7Vzx6Lmxlbmd0aDtXKyspe3ZhciBaPXpbV10saj1aLmNvbm5lY3RlZE5vZGVzKCkuZmlsdGVyKGZ1bmN0aW9uKEspe3JldHVybiFLLnNhbWUoUikmJnguaGFzKEspfSksb2U9ai5pZCgpO2oubGVuZ3RoIT09MCYmIW1bb2VdJiYoaj1qWzBdLGgucHVzaChqKSxlLmJmcyYmKG1bb2VdPSEwLGYucHVzaChqKSksZFtvZV09WixwW29lXT1wW0NdKzEpfX0sIl9sb29wIik7aC5sZW5ndGghPT0wOyl7dmFyIEw9RSgpO2lmKEwhPT0iY29udGludWUiJiZMPT09ImJyZWFrIilicmVha31mb3IodmFyIFM9bC5jb2xsZWN0aW9uKCksQT0wO0E8Zi5sZW5ndGg7QSsrKXt2YXIgST1mW0FdLEQ9ZFtJLmlkKCldO0QhPW51bGwmJlMucHVzaChEKSxTLnB1c2goSSl9cmV0dXJue3BhdGg6bC5jb2xsZWN0aW9uKFMpLGZvdW5kOmwuY29sbGVjdGlvbih5KX19LCJzZWFyY2hGbiIpfSwiZGVmaW5lU2VhcmNoIiksYWI9e2JyZWFkdGhGaXJzdFNlYXJjaDpQcGUoe2JmczohMH0pLGRlcHRoRmlyc3RTZWFyY2g6UHBlKHtkZnM6ITB9KX07YWIuYmZzPWFiLmJyZWFkdGhGaXJzdFNlYXJjaDthYi5kZnM9YWIuZGVwdGhGaXJzdFNlYXJjaDskWGU9V3FlKGZ1bmN0aW9uKHQsZSl7KGZ1bmN0aW9uKCl7dmFyIHIsbixpLGEscyxsLHUsaCxmLGQscCxtLGcseSx2O2k9TWF0aC5mbG9vcixkPU1hdGgubWluLG49byhmdW5jdGlvbih4LGIpe3JldHVybiB4PGI/LTE6eD5iPzE6MH0sImRlZmF1bHRDbXAiKSxmPW8oZnVuY3Rpb24oeCxiLHcsXyxUKXt2YXIgRTtpZih3PT1udWxsJiYodz0wKSxUPT1udWxsJiYoVD1uKSx3PDApdGhyb3cgbmV3IEVycm9yKCJsbyBtdXN0IGJlIG5vbi1uZWdhdGl2ZSIpO2ZvcihfPT1udWxsJiYoXz14Lmxlbmd0aCk7dzxfOylFPWkoKHcrXykvMiksVChiLHhbRV0pPDA/Xz1FOnc9RSsxO3JldHVybltdLnNwbGljZS5hcHBseSh4LFt3LHctd10uY29uY2F0KGIpKSxifSwiaW5zb3J0IiksbD1vKGZ1bmN0aW9uKHgsYix3KXtyZXR1cm4gdz09bnVsbCYmKHc9bikseC5wdXNoKGIpLHkoeCwwLHgubGVuZ3RoLTEsdyl9LCJoZWFwcHVzaCIpLHM9byhmdW5jdGlvbih4LGIpe3ZhciB3LF87cmV0dXJuIGI9PW51bGwmJihiPW4pLHc9eC5wb3AoKSx4Lmxlbmd0aD8oXz14WzBdLHhbMF09dyx2KHgsMCxiKSk6Xz13LF99LCJoZWFwcG9wIiksaD1vKGZ1bmN0aW9uKHgsYix3KXt2YXIgXztyZXR1cm4gdz09bnVsbCYmKHc9biksXz14WzBdLHhbMF09Yix2KHgsMCx3KSxffSwiaGVhcHJlcGxhY2UiKSx1PW8oZnVuY3Rpb24oeCxiLHcpe3ZhciBfO3JldHVybiB3PT1udWxsJiYodz1uKSx4Lmxlbmd0aCYmdyh4WzBdLGIpPDAmJihfPVt4WzBdLGJdLGI9X1swXSx4WzBdPV9bMV0sdih4LDAsdykpLGJ9LCJoZWFwcHVzaHBvcCIpLGE9byhmdW5jdGlvbih4LGIpe3ZhciB3LF8sVCxFLEwsUztmb3IoYj09bnVsbCYmKGI9biksRT1mdW5jdGlvbigpe1M9W107Zm9yKHZhciBBPTAsST1pKHgubGVuZ3RoLzIpOzA8PUk/QTxJOkE+STswPD1JP0ErKzpBLS0pUy5wdXNoKEEpO3JldHVybiBTfS5hcHBseSh0aGlzKS5yZXZlcnNlKCksTD1bXSxfPTAsVD1FLmxlbmd0aDtfPFQ7XysrKXc9RVtfXSxMLnB1c2godih4LHcsYikpO3JldHVybiBMfSwiaGVhcGlmeSIpLGc9byhmdW5jdGlvbih4LGIsdyl7dmFyIF87aWYodz09bnVsbCYmKHc9biksXz14LmluZGV4T2YoYiksXyE9PS0xKXJldHVybiB5KHgsMCxfLHcpLHYoeCxfLHcpfSwidXBkYXRlSXRlbSIpLHA9byhmdW5jdGlvbih4LGIsdyl7dmFyIF8sVCxFLEwsUztpZih3PT1udWxsJiYodz1uKSxUPXguc2xpY2UoMCxiKSwhVC5sZW5ndGgpcmV0dXJuIFQ7Zm9yKGEoVCx3KSxTPXguc2xpY2UoYiksRT0wLEw9Uy5sZW5ndGg7RTxMO0UrKylfPVNbRV0sdShULF8sdyk7cmV0dXJuIFQuc29ydCh3KS5yZXZlcnNlKCl9LCJubGFyZ2VzdCIpLG09byhmdW5jdGlvbih4LGIsdyl7dmFyIF8sVCxFLEwsUyxBLEksRCxrO2lmKHc9PW51bGwmJih3PW4pLGIqMTA8PXgubGVuZ3RoKXtpZihFPXguc2xpY2UoMCxiKS5zb3J0KHcpLCFFLmxlbmd0aClyZXR1cm4gRTtmb3IoVD1FW0UubGVuZ3RoLTFdLEk9eC5zbGljZShiKSxMPTAsQT1JLmxlbmd0aDtMPEE7TCsrKV89SVtMXSx3KF8sVCk8MCYmKGYoRSxfLDAsbnVsbCx3KSxFLnBvcCgpLFQ9RVtFLmxlbmd0aC0xXSk7cmV0dXJuIEV9Zm9yKGEoeCx3KSxrPVtdLFM9MCxEPWQoYix4Lmxlbmd0aCk7MDw9RD9TPEQ6Uz5EOzA8PUQ/KytTOi0tUylrLnB1c2gocyh4LHcpKTtyZXR1cm4ga30sIm5zbWFsbGVzdCIpLHk9byhmdW5jdGlvbih4LGIsdyxfKXt2YXIgVCxFLEw7Zm9yKF89PW51bGwmJihfPW4pLFQ9eFt3XTt3PmI7KXtpZihMPXctMT4+MSxFPXhbTF0sXyhULEUpPDApe3hbd109RSx3PUw7Y29udGludWV9YnJlYWt9cmV0dXJuIHhbd109VH0sIl9zaWZ0ZG93biIpLHY9byhmdW5jdGlvbih4LGIsdyl7dmFyIF8sVCxFLEwsUztmb3Iodz09bnVsbCYmKHc9biksVD14Lmxlbmd0aCxTPWIsRT14W2JdLF89MipiKzE7XzxUOylMPV8rMSxMPFQmJiEodyh4W19dLHhbTF0pPDApJiYoXz1MKSx4W2JdPXhbX10sYj1fLF89MipiKzE7cmV0dXJuIHhbYl09RSx5KHgsUyxiLHcpfSwiX3NpZnR1cCIpLHI9ZnVuY3Rpb24oKXt4LnB1c2g9bCx4LnBvcD1zLHgucmVwbGFjZT1oLHgucHVzaHBvcD11LHguaGVhcGlmeT1hLHgudXBkYXRlSXRlbT1nLHgubmxhcmdlc3Q9cCx4Lm5zbWFsbGVzdD1tO2Z1bmN0aW9uIHgoYil7dGhpcy5jbXA9Yj8/bix0aGlzLm5vZGVzPVtdfXJldHVybiBvKHgsIkhlYXAiKSx4LnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGIpe3JldHVybiBsKHRoaXMubm9kZXMsYix0aGlzLmNtcCl9LHgucHJvdG90eXBlLnBvcD1mdW5jdGlvbigpe3JldHVybiBzKHRoaXMubm9kZXMsdGhpcy5jbXApfSx4LnByb3RvdHlwZS5wZWVrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXNbMF19LHgucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLm5vZGVzLmluZGV4T2YoYikhPT0tMX0seC5wcm90b3R5cGUucmVwbGFjZT1mdW5jdGlvbihiKXtyZXR1cm4gaCh0aGlzLm5vZGVzLGIsdGhpcy5jbXApfSx4LnByb3RvdHlwZS5wdXNocG9wPWZ1bmN0aW9uKGIpe3JldHVybiB1KHRoaXMubm9kZXMsYix0aGlzLmNtcCl9LHgucHJvdG90eXBlLmhlYXBpZnk9ZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzLm5vZGVzLHRoaXMuY21wKX0seC5wcm90b3R5cGUudXBkYXRlSXRlbT1mdW5jdGlvbihiKXtyZXR1cm4gZyh0aGlzLm5vZGVzLGIsdGhpcy5jbXApfSx4LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzPVtdfSx4LnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzLmxlbmd0aD09PTB9LHgucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2Rlcy5sZW5ndGh9LHgucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGI7cmV0dXJuIGI9bmV3IHgsYi5ub2Rlcz10aGlzLm5vZGVzLnNsaWNlKDApLGJ9LHgucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2Rlcy5zbGljZSgwKX0seC5wcm90b3R5cGUuaW5zZXJ0PXgucHJvdG90eXBlLnB1c2gseC5wcm90b3R5cGUudG9wPXgucHJvdG90eXBlLnBlZWsseC5wcm90b3R5cGUuZnJvbnQ9eC5wcm90b3R5cGUucGVlayx4LnByb3RvdHlwZS5oYXM9eC5wcm90b3R5cGUuY29udGFpbnMseC5wcm90b3R5cGUuY29weT14LnByb3RvdHlwZS5jbG9uZSx4fSgpLGZ1bmN0aW9uKHgsYil7cmV0dXJuIHQuZXhwb3J0cz1iKCl9KHRoaXMsZnVuY3Rpb24oKXtyZXR1cm4gcn0pfSkuY2FsbChqeCl9KSxnYj0kWGUsVlhlPV9hKHtyb290Om51bGwsd2VpZ2h0Om8oZnVuY3Rpb24oZSl7cmV0dXJuIDF9LCJ3ZWlnaHQiKSxkaXJlY3RlZDohMX0pLFVYZT17ZGlqa3N0cmE6byhmdW5jdGlvbihlKXtpZighVXIoZSkpe3ZhciByPWFyZ3VtZW50cztlPXtyb290OnJbMF0sd2VpZ2h0OnJbMV0sZGlyZWN0ZWQ6clsyXX19dmFyIG49VlhlKGUpLGk9bi5yb290LGE9bi53ZWlnaHQscz1uLmRpcmVjdGVkLGw9dGhpcyx1PWEsaD1adChpKT90aGlzLmZpbHRlcihpKVswXTppWzBdLGY9e30sZD17fSxwPXt9LG09dGhpcy5ieUdyb3VwKCksZz1tLm5vZGVzLHk9bS5lZGdlczt5LnVubWVyZ2VCeShmdW5jdGlvbihPKXtyZXR1cm4gTy5pc0xvb3AoKX0pO2Zvcih2YXIgdj1vKGZ1bmN0aW9uKE4pe3JldHVybiBmW04uaWQoKV19LCJnZXREaXN0IikseD1vKGZ1bmN0aW9uKE4sUCl7ZltOLmlkKCldPVAsYi51cGRhdGVJdGVtKE4pfSwic2V0RGlzdCIpLGI9bmV3IGdiKGZ1bmN0aW9uKE8sTil7cmV0dXJuIHYoTyktdihOKX0pLHc9MDt3PGcubGVuZ3RoO3crKyl7dmFyIF89Z1t3XTtmW18uaWQoKV09Xy5zYW1lKGgpPzA6MS8wLGIucHVzaChfKX1mb3IodmFyIFQ9byhmdW5jdGlvbihOLFApe2Zvcih2YXIgRj0ocz9OLmVkZ2VzVG8oUCk6Ti5lZGdlc1dpdGgoUCkpLmludGVyc2VjdCh5KSxCPTEvMCxHLHo9MDt6PEYubGVuZ3RoO3orKyl7dmFyIFc9Rlt6XSxaPXUoVyk7KFo8Qnx8IUcpJiYoQj1aLEc9Vyl9cmV0dXJue2VkZ2U6RyxkaXN0OkJ9fSwiZGlzdEJldHdlZW4iKTtiLnNpemUoKT4wOyl7dmFyIEU9Yi5wb3AoKSxMPXYoRSksUz1FLmlkKCk7aWYocFtTXT1MLEwhPT0xLzApZm9yKHZhciBBPUUubmVpZ2hib3Job29kKCkuaW50ZXJzZWN0KGcpLEk9MDtJPEEubGVuZ3RoO0krKyl7dmFyIEQ9QVtJXSxrPUQuaWQoKSxSPVQoRSxEKSxDPUwrUi5kaXN0O0M8dihEKSYmKHgoRCxDKSxkW2tdPXtub2RlOkUsZWRnZTpSLmVkZ2V9KX19cmV0dXJue2Rpc3RhbmNlVG86byhmdW5jdGlvbihOKXt2YXIgUD1adChOKT9nLmZpbHRlcihOKVswXTpOWzBdO3JldHVybiBwW1AuaWQoKV19LCJkaXN0YW5jZVRvIikscGF0aFRvOm8oZnVuY3Rpb24oTil7dmFyIFA9WnQoTik/Zy5maWx0ZXIoTilbMF06TlswXSxGPVtdLEI9UCxHPUIuaWQoKTtpZihQLmxlbmd0aD4wKWZvcihGLnVuc2hpZnQoUCk7ZFtHXTspe3ZhciB6PWRbR107Ri51bnNoaWZ0KHouZWRnZSksRi51bnNoaWZ0KHoubm9kZSksQj16Lm5vZGUsRz1CLmlkKCl9cmV0dXJuIGwuc3Bhd24oRil9LCJwYXRoVG8iKX19LCJkaWprc3RyYSIpfSxIWGU9e2tydXNrYWw6byhmdW5jdGlvbihlKXtlPWV8fGZ1bmN0aW9uKHcpe3JldHVybiAxfTtmb3IodmFyIHI9dGhpcy5ieUdyb3VwKCksbj1yLm5vZGVzLGk9ci5lZGdlcyxhPW4ubGVuZ3RoLHM9bmV3IEFycmF5KGEpLGw9bix1PW8oZnVuY3Rpb24oXyl7Zm9yKHZhciBUPTA7VDxzLmxlbmd0aDtUKyspe3ZhciBFPXNbVF07aWYoRS5oYXMoXykpcmV0dXJuIFR9fSwiZmluZFNldEluZGV4IiksaD0wO2g8YTtoKyspc1toXT10aGlzLnNwYXduKG5baF0pO2Zvcih2YXIgZj1pLnNvcnQoZnVuY3Rpb24odyxfKXtyZXR1cm4gZSh3KS1lKF8pfSksZD0wO2Q8Zi5sZW5ndGg7ZCsrKXt2YXIgcD1mW2RdLG09cC5zb3VyY2UoKVswXSxnPXAudGFyZ2V0KClbMF0seT11KG0pLHY9dShnKSx4PXNbeV0sYj1zW3ZdO3khPT12JiYobC5tZXJnZShwKSx4Lm1lcmdlKGIpLHMuc3BsaWNlKHYsMSkpfXJldHVybiBsfSwia3J1c2thbCIpfSxXWGU9X2Eoe3Jvb3Q6bnVsbCxnb2FsOm51bGwsd2VpZ2h0Om8oZnVuY3Rpb24oZSl7cmV0dXJuIDF9LCJ3ZWlnaHQiKSxoZXVyaXN0aWM6byhmdW5jdGlvbihlKXtyZXR1cm4gMH0sImhldXJpc3RpYyIpLGRpcmVjdGVkOiExfSksWVhlPXthU3RhcjpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuY3koKSxuPVdYZShlKSxpPW4ucm9vdCxhPW4uZ29hbCxzPW4uaGV1cmlzdGljLGw9bi5kaXJlY3RlZCx1PW4ud2VpZ2h0O2k9ci5jb2xsZWN0aW9uKGkpWzBdLGE9ci5jb2xsZWN0aW9uKGEpWzBdO3ZhciBoPWkuaWQoKSxmPWEuaWQoKSxkPXt9LHA9e30sbT17fSxnPW5ldyBnYihmdW5jdGlvbihHLHope3JldHVybiBwW0cuaWQoKV0tcFt6LmlkKCldfSkseT1uZXcgUzEsdj17fSx4PXt9LGI9byhmdW5jdGlvbih6LFcpe2cucHVzaCh6KSx5LmFkZChXKX0sImFkZFRvT3BlblNldCIpLHcsXyxUPW8oZnVuY3Rpb24oKXt3PWcucG9wKCksXz13LmlkKCkseS5kZWxldGUoXyl9LCJwb3BGcm9tT3BlblNldCIpLEU9byhmdW5jdGlvbih6KXtyZXR1cm4geS5oYXMoeil9LCJpc0luT3BlblNldCIpO2IoaSxoKSxkW2hdPTAscFtoXT1zKGkpO2Zvcih2YXIgTD0wO2cuc2l6ZSgpPjA7KXtpZihUKCksTCsrLF89PT1mKXtmb3IodmFyIFM9W10sQT1hLEk9ZixEPXhbSV07Uy51bnNoaWZ0KEEpLEQhPW51bGwmJlMudW5zaGlmdChEKSxBPXZbSV0sQSE9bnVsbDspST1BLmlkKCksRD14W0ldO3JldHVybntmb3VuZDohMCxkaXN0YW5jZTpkW19dLHBhdGg6dGhpcy5zcGF3bihTKSxzdGVwczpMfX1tW19dPSEwO2Zvcih2YXIgaz13Ll9wcml2YXRlLmVkZ2VzLFI9MDtSPGsubGVuZ3RoO1IrKyl7dmFyIEM9a1tSXTtpZih0aGlzLmhhc0VsZW1lbnRXaXRoSWQoQy5pZCgpKSYmIShsJiZDLmRhdGEoInNvdXJjZSIpIT09Xykpe3ZhciBPPUMuc291cmNlKCksTj1DLnRhcmdldCgpLFA9Ty5pZCgpIT09Xz9POk4sRj1QLmlkKCk7aWYodGhpcy5oYXNFbGVtZW50V2l0aElkKEYpJiYhbVtGXSl7dmFyIEI9ZFtfXSt1KEMpO2lmKCFFKEYpKXtkW0ZdPUIscFtGXT1CK3MoUCksYihQLEYpLHZbRl09dyx4W0ZdPUM7Y29udGludWV9QjxkW0ZdJiYoZFtGXT1CLHBbRl09QitzKFApLHZbRl09dyx4W0ZdPUMpfX19fXJldHVybntmb3VuZDohMSxkaXN0YW5jZTp2b2lkIDAscGF0aDp2b2lkIDAsc3RlcHM6TH19LCJhU3RhciIpfSxxWGU9X2Eoe3dlaWdodDpvKGZ1bmN0aW9uKGUpe3JldHVybiAxfSwid2VpZ2h0IiksZGlyZWN0ZWQ6ITF9KSxYWGU9e2Zsb3lkV2Fyc2hhbGw6byhmdW5jdGlvbihlKXtmb3IodmFyIHI9dGhpcy5jeSgpLG49cVhlKGUpLGk9bi53ZWlnaHQsYT1uLmRpcmVjdGVkLHM9aSxsPXRoaXMuYnlHcm91cCgpLHU9bC5ub2RlcyxoPWwuZWRnZXMsZj11Lmxlbmd0aCxkPWYqZixwPW8oZnVuY3Rpb24oWil7cmV0dXJuIHUuaW5kZXhPZihaKX0sImluZGV4T2YiKSxtPW8oZnVuY3Rpb24oWil7cmV0dXJuIHVbWl19LCJhdEluZGV4IiksZz1uZXcgQXJyYXkoZCkseT0wO3k8ZDt5Kyspe3ZhciB2PXklZix4PSh5LXYpL2Y7eD09PXY/Z1t5XT0wOmdbeV09MS8wfWZvcih2YXIgYj1uZXcgQXJyYXkoZCksdz1uZXcgQXJyYXkoZCksXz0wO188aC5sZW5ndGg7XysrKXt2YXIgVD1oW19dLEU9VC5zb3VyY2UoKVswXSxMPVQudGFyZ2V0KClbMF07aWYoRSE9PUwpe3ZhciBTPXAoRSksQT1wKEwpLEk9UypmK0EsRD1zKFQpO2lmKGdbSV0+RCYmKGdbSV09RCxiW0ldPUEsd1tJXT1UKSwhYSl7dmFyIGs9QSpmK1M7IWEmJmdba10+RCYmKGdba109RCxiW2tdPVMsd1trXT1UKX19fWZvcih2YXIgUj0wO1I8ZjtSKyspZm9yKHZhciBDPTA7QzxmO0MrKylmb3IodmFyIE89QypmK1IsTj0wO048ZjtOKyspe3ZhciBQPUMqZitOLEY9UipmK047Z1tPXStnW0ZdPGdbUF0mJihnW1BdPWdbT10rZ1tGXSxiW1BdPWJbT10pfXZhciBCPW8oZnVuY3Rpb24oWil7cmV0dXJuKFp0KFopP3IuZmlsdGVyKFopOlopWzBdfSwiZ2V0QXJnRWxlIiksRz1vKGZ1bmN0aW9uKFope3JldHVybiBwKEIoWikpfSwiaW5kZXhPZkFyZ0VsZSIpLHo9e2Rpc3RhbmNlOm8oZnVuY3Rpb24oWixqKXt2YXIgb2U9RyhaKSxLPUcoaik7cmV0dXJuIGdbb2UqZitLXX0sImRpc3RhbmNlIikscGF0aDpvKGZ1bmN0aW9uKFosail7dmFyIG9lPUcoWiksSz1HKGopLGVlPW0ob2UpO2lmKG9lPT09SylyZXR1cm4gZWUuY29sbGVjdGlvbigpO2lmKGJbb2UqZitLXT09bnVsbClyZXR1cm4gci5jb2xsZWN0aW9uKCk7dmFyIEo9ci5jb2xsZWN0aW9uKCksSD1vZSxxO2ZvcihKLm1lcmdlKGVlKTtvZSE9PUs7KUg9b2Usb2U9YltvZSpmK0tdLHE9d1tIKmYrb2VdLEoubWVyZ2UocSksSi5tZXJnZShtKG9lKSk7cmV0dXJuIEp9LCJwYXRoIil9O3JldHVybiB6fSwiZmxveWRXYXJzaGFsbCIpfSxqWGU9X2Eoe3dlaWdodDpvKGZ1bmN0aW9uKGUpe3JldHVybiAxfSwid2VpZ2h0IiksZGlyZWN0ZWQ6ITEscm9vdDpudWxsfSksS1hlPXtiZWxsbWFuRm9yZDpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMsbj1qWGUoZSksaT1uLndlaWdodCxhPW4uZGlyZWN0ZWQscz1uLnJvb3QsbD1pLHU9dGhpcyxoPXRoaXMuY3koKSxmPXRoaXMuYnlHcm91cCgpLGQ9Zi5lZGdlcyxwPWYubm9kZXMsbT1wLmxlbmd0aCxnPW5ldyBKYyx5PSExLHY9W107cz1oLmNvbGxlY3Rpb24ocylbMF0sZC51bm1lcmdlQnkoZnVuY3Rpb24oc2Upe3JldHVybiBzZS5pc0xvb3AoKX0pO2Zvcih2YXIgeD1kLmxlbmd0aCxiPW8oZnVuY3Rpb24oa2Upe3ZhciBSZT1nLmdldChrZS5pZCgpKTtyZXR1cm4gUmV8fChSZT17fSxnLnNldChrZS5pZCgpLFJlKSksUmV9LCJnZXRJbmZvIiksdz1vKGZ1bmN0aW9uKGtlKXtyZXR1cm4oWnQoa2UpP2guJChrZSk6a2UpWzBdfSwiZ2V0Tm9kZUZyb21UbyIpLF89byhmdW5jdGlvbihrZSl7cmV0dXJuIGIodyhrZSkpLmRpc3R9LCJkaXN0YW5jZVRvIiksVD1vKGZ1bmN0aW9uKGtlKXtmb3IodmFyIFJlPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpzLENlPXcoa2UpLFBlPVtdLEllPUNlOzspe2lmKEllPT1udWxsKXJldHVybiByLnNwYXduKCk7dmFyICRlPWIoSWUpLHllPSRlLmVkZ2UsWD0kZS5wcmVkO2lmKFBlLnVuc2hpZnQoSWVbMF0pLEllLnNhbWUoUmUpJiZQZS5sZW5ndGg+MClicmVhazt5ZSE9bnVsbCYmUGUudW5zaGlmdCh5ZSksSWU9WH1yZXR1cm4gdS5zcGF3bihQZSl9LCJwYXRoVG8iKSxFPTA7RTxtO0UrKyl7dmFyIEw9cFtFXSxTPWIoTCk7TC5zYW1lKHMpP1MuZGlzdD0wOlMuZGlzdD0xLzAsUy5wcmVkPW51bGwsUy5lZGdlPW51bGx9Zm9yKHZhciBBPSExLEk9byhmdW5jdGlvbihrZSxSZSxDZSxQZSxJZSwkZSl7dmFyIHllPVBlLmRpc3QrJGU7eWU8SWUuZGlzdCYmIUNlLnNhbWUoUGUuZWRnZSkmJihJZS5kaXN0PXllLEllLnByZWQ9a2UsSWUuZWRnZT1DZSxBPSEwKX0sImNoZWNrRm9yRWRnZVJlcGxhY2VtZW50IiksRD0xO0Q8bTtEKyspe0E9ITE7Zm9yKHZhciBrPTA7azx4O2srKyl7dmFyIFI9ZFtrXSxDPVIuc291cmNlKCksTz1SLnRhcmdldCgpLE49bChSKSxQPWIoQyksRj1iKE8pO0koQyxPLFIsUCxGLE4pLGF8fEkoTyxDLFIsRixQLE4pfWlmKCFBKWJyZWFrfWlmKEEpZm9yKHZhciBCPVtdLEc9MDtHPHg7RysrKXt2YXIgej1kW0ddLFc9ei5zb3VyY2UoKSxaPXoudGFyZ2V0KCksaj1sKHopLG9lPWIoVykuZGlzdCxLPWIoWikuZGlzdDtpZihvZStqPEt8fCFhJiZLK2o8b2UpaWYoeXx8KG9uKCJHcmFwaCBjb250YWlucyBhIG5lZ2F0aXZlIHdlaWdodCBjeWNsZSBmb3IgQmVsbG1hbi1Gb3JkIikseT0hMCksZS5maW5kTmVnYXRpdmVXZWlnaHRDeWNsZXMhPT0hMSl7dmFyIGVlPVtdO29lK2o8SyYmZWUucHVzaChXKSwhYSYmSytqPG9lJiZlZS5wdXNoKFopO2Zvcih2YXIgSj1lZS5sZW5ndGgsSD0wO0g8SjtIKyspe3ZhciBxPWVlW0hdLFE9W3FdO1EucHVzaChiKHEpLmVkZ2UpO2Zvcih2YXIgYWU9YihxKS5wcmVkO1EuaW5kZXhPZihhZSk9PT0tMTspUS5wdXNoKGFlKSxRLnB1c2goYihhZSkuZWRnZSksYWU9YihhZSkucHJlZDtRPVEuc2xpY2UoUS5pbmRleE9mKGFlKSk7Zm9yKHZhciB1ZT1RWzBdLmlkKCksY2U9MCx0ZT0yO3RlPFEubGVuZ3RoO3RlKz0yKVFbdGVdLmlkKCk8dWUmJih1ZT1RW3RlXS5pZCgpLGNlPXRlKTtRPVEuc2xpY2UoY2UpLmNvbmNhdChRLnNsaWNlKDAsY2UpKSxRLnB1c2goUVswXSk7dmFyIE5lPVEubWFwKGZ1bmN0aW9uKHNlKXtyZXR1cm4gc2UuaWQoKX0pLmpvaW4oIiwiKTtCLmluZGV4T2YoTmUpPT09LTEmJih2LnB1c2godS5zcGF3bihRKSksQi5wdXNoKE5lKSl9fWVsc2UgYnJlYWt9cmV0dXJue2Rpc3RhbmNlVG86XyxwYXRoVG86VCxoYXNOZWdhdGl2ZVdlaWdodEN5Y2xlOnksbmVnYXRpdmVXZWlnaHRDeWNsZXM6dn19LCJiZWxsbWFuRm9yZCIpfSxRWGU9TWF0aC5zcXJ0KDIpLFpYZT1vKGZ1bmN0aW9uKGUscixuKXtuLmxlbmd0aD09PTAmJmRpKCJLYXJnZXItU3RlaW4gbXVzdCBiZSBydW4gb24gYSBjb25uZWN0ZWQgKHN1YilncmFwaCIpO2Zvcih2YXIgaT1uW2VdLGE9aVsxXSxzPWlbMl0sbD1yW2FdLHU9cltzXSxoPW4sZj1oLmxlbmd0aC0xO2Y+PTA7Zi0tKXt2YXIgZD1oW2ZdLHA9ZFsxXSxtPWRbMl07KHJbcF09PT1sJiZyW21dPT09dXx8cltwXT09PXUmJnJbbV09PT1sKSYmaC5zcGxpY2UoZiwxKX1mb3IodmFyIGc9MDtnPGgubGVuZ3RoO2crKyl7dmFyIHk9aFtnXTt5WzFdPT09dT8oaFtnXT15LnNsaWNlKCksaFtnXVsxXT1sKTp5WzJdPT09dSYmKGhbZ109eS5zbGljZSgpLGhbZ11bMl09bCl9Zm9yKHZhciB2PTA7djxyLmxlbmd0aDt2Kyspclt2XT09PXUmJihyW3ZdPWwpO3JldHVybiBofSwiY29sbGFwc2UiKSxfUD1vKGZ1bmN0aW9uKGUscixuLGkpe2Zvcig7bj5pOyl7dmFyIGE9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnIubGVuZ3RoKTtyPVpYZShhLGUsciksbi0tfXJldHVybiByfSwiY29udHJhY3RVbnRpbCIpLEpYZT17a2FyZ2VyU3RlaW46byhmdW5jdGlvbigpe3ZhciBlPXRoaXMscj10aGlzLmJ5R3JvdXAoKSxuPXIubm9kZXMsaT1yLmVkZ2VzO2kudW5tZXJnZUJ5KGZ1bmN0aW9uKEYpe3JldHVybiBGLmlzTG9vcCgpfSk7dmFyIGE9bi5sZW5ndGgscz1pLmxlbmd0aCxsPU1hdGguY2VpbChNYXRoLnBvdyhNYXRoLmxvZyhhKS9NYXRoLkxOMiwyKSksdT1NYXRoLmZsb29yKGEvUVhlKTtpZihhPDIpe2RpKCJBdCBsZWFzdCAyIG5vZGVzIGFyZSByZXF1aXJlZCBmb3IgS2FyZ2VyLVN0ZWluIGFsZ29yaXRobSIpO3JldHVybn1mb3IodmFyIGg9W10sZj0wO2Y8cztmKyspe3ZhciBkPWlbZl07aC5wdXNoKFtmLG4uaW5kZXhPZihkLnNvdXJjZSgpKSxuLmluZGV4T2YoZC50YXJnZXQoKSldKX1mb3IodmFyIHA9MS8wLG09W10sZz1uZXcgQXJyYXkoYSkseT1uZXcgQXJyYXkoYSksdj1uZXcgQXJyYXkoYSkseD1vKGZ1bmN0aW9uKEIsRyl7Zm9yKHZhciB6PTA7ejxhO3orKylHW3pdPUJbel19LCJjb3B5Tm9kZXNNYXAiKSxiPTA7Yjw9bDtiKyspe2Zvcih2YXIgdz0wO3c8YTt3KyspeVt3XT13O3ZhciBfPV9QKHksaC5zbGljZSgpLGEsdSksVD1fLnNsaWNlKCk7eCh5LHYpO3ZhciBFPV9QKHksXyx1LDIpLEw9X1AodixULHUsMik7RS5sZW5ndGg8PUwubGVuZ3RoJiZFLmxlbmd0aDxwPyhwPUUubGVuZ3RoLG09RSx4KHksZykpOkwubGVuZ3RoPD1FLmxlbmd0aCYmTC5sZW5ndGg8cCYmKHA9TC5sZW5ndGgsbT1MLHgodixnKSl9Zm9yKHZhciBTPXRoaXMuc3Bhd24obS5tYXAoZnVuY3Rpb24oRil7cmV0dXJuIGlbRlswXV19KSksQT10aGlzLnNwYXduKCksST10aGlzLnNwYXduKCksRD1nWzBdLGs9MDtrPGcubGVuZ3RoO2srKyl7dmFyIFI9Z1trXSxDPW5ba107Uj09PUQ/QS5tZXJnZShDKTpJLm1lcmdlKEMpfXZhciBPPW8oZnVuY3Rpb24oQil7dmFyIEc9ZS5zcGF3bigpO3JldHVybiBCLmZvckVhY2goZnVuY3Rpb24oeil7Ry5tZXJnZSh6KSx6LmNvbm5lY3RlZEVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihXKXtlLmNvbnRhaW5zKFcpJiYhUy5jb250YWlucyhXKSYmRy5tZXJnZShXKX0pfSksR30sImNvbnN0cnVjdENvbXBvbmVudCIpLE49W08oQSksTyhJKV0sUD17Y3V0OlMsY29tcG9uZW50czpOLHBhcnRpdGlvbjE6QSxwYXJ0aXRpb24yOkl9O3JldHVybiBQfSwia2FyZ2VyU3RlaW4iKX0sZWplPW8oZnVuY3Rpb24oZSl7cmV0dXJue3g6ZS54LHk6ZS55fX0sImNvcHlQb3NpdGlvbiIpLCQ2PW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybnt4OmUueCpyK24ueCx5OmUueSpyK24ueX19LCJtb2RlbFRvUmVuZGVyZWRQb3NpdGlvbiIpLG9nZT1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm57eDooZS54LW4ueCkvcix5OihlLnktbi55KS9yfX0sInJlbmRlcmVkVG9Nb2RlbFBvc2l0aW9uIiksbTE9byhmdW5jdGlvbihlKXtyZXR1cm57eDplWzBdLHk6ZVsxXX19LCJhcnJheTJwb2ludCIpLHRqZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06MCxuPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTplLmxlbmd0aCxpPTEvMCxhPXI7YTxuO2ErKyl7dmFyIHM9ZVthXTtpc0Zpbml0ZShzKSYmKGk9TWF0aC5taW4ocyxpKSl9cmV0dXJuIGl9LCJtaW4iKSxyamU9byhmdW5jdGlvbihlKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjAsbj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ZS5sZW5ndGgsaT0tMS8wLGE9cjthPG47YSsrKXt2YXIgcz1lW2FdO2lzRmluaXRlKHMpJiYoaT1NYXRoLm1heChzLGkpKX1yZXR1cm4gaX0sIm1heCIpLG5qZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06MCxuPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTplLmxlbmd0aCxpPTAsYT0wLHM9cjtzPG47cysrKXt2YXIgbD1lW3NdO2lzRmluaXRlKGwpJiYoaSs9bCxhKyspfXJldHVybiBpL2F9LCJtZWFuIiksaWplPW8oZnVuY3Rpb24oZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjAsbj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ZS5sZW5ndGgsaT1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITAsYT1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06ITAscz1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06ITA7aT9lPWUuc2xpY2UocixuKToobjxlLmxlbmd0aCYmZS5zcGxpY2UobixlLmxlbmd0aC1uKSxyPjAmJmUuc3BsaWNlKDAscikpO2Zvcih2YXIgbD0wLHU9ZS5sZW5ndGgtMTt1Pj0wO3UtLSl7dmFyIGg9ZVt1XTtzP2lzRmluaXRlKGgpfHwoZVt1XT0tMS8wLGwrKyk6ZS5zcGxpY2UodSwxKX1hJiZlLnNvcnQoZnVuY3Rpb24ocCxtKXtyZXR1cm4gcC1tfSk7dmFyIGY9ZS5sZW5ndGgsZD1NYXRoLmZsb29yKGYvMik7cmV0dXJuIGYlMiE9PTA/ZVtkKzErbF06KGVbZC0xK2xdK2VbZCtsXSkvMn0sIm1lZGlhbiIpLGFqZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLlBJKmUvMTgwfSwiZGVnMnJhZCIpLHM2PW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gTWF0aC5hdGFuMihyLGUpLU1hdGguUEkvMn0sImdldEFuZ2xlRnJvbURpc3AiKSxsQj1NYXRoLmxvZzJ8fGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9NYXRoLmxvZygyKX0sbGdlPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD8xOmU8MD8tMTowfSwic2lnbnVtIiksSzA9byhmdW5jdGlvbihlLHIpe3JldHVybiBNYXRoLnNxcnQoVTAoZSxyKSl9LCJkaXN0IiksVTA9byhmdW5jdGlvbihlLHIpe3ZhciBuPXIueC1lLngsaT1yLnktZS55O3JldHVybiBuKm4raSppfSwic3FkaXN0Iiksc2plPW8oZnVuY3Rpb24oZSl7Zm9yKHZhciByPWUubGVuZ3RoLG49MCxpPTA7aTxyO2krKyluKz1lW2ldO2Zvcih2YXIgYT0wO2E8cjthKyspZVthXT1lW2FdL247cmV0dXJuIGV9LCJpblBsYWNlU3VtTm9ybWFsaXplIiksbGE9byhmdW5jdGlvbihlLHIsbixpKXtyZXR1cm4oMS1pKSooMS1pKSplKzIqKDEtaSkqaSpyK2kqaSpufSwicWJlemllckF0IikseTE9byhmdW5jdGlvbihlLHIsbixpKXtyZXR1cm57eDpsYShlLngsci54LG4ueCxpKSx5OmxhKGUueSxyLnksbi55LGkpfX0sInFiZXppZXJQdEF0Iiksb2plPW8oZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9e3g6ci54LWUueCx5OnIueS1lLnl9LHM9SzAoZSxyKSxsPXt4OmEueC9zLHk6YS55L3N9O3JldHVybiBuPW4/PzAsaT1pPz9uKnMse3g6ZS54K2wueCppLHk6ZS55K2wueSppfX0sImxpbmVBdCIpLHNiPW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiBNYXRoLm1heChlLE1hdGgubWluKG4scikpfSwiYm91bmQiKSxLcz1vKGZ1bmN0aW9uKGUpe2lmKGU9PW51bGwpcmV0dXJue3gxOjEvMCx5MToxLzAseDI6LTEvMCx5MjotMS8wLHc6MCxoOjB9O2lmKGUueDEhPW51bGwmJmUueTEhPW51bGwpe2lmKGUueDIhPW51bGwmJmUueTIhPW51bGwmJmUueDI+PWUueDEmJmUueTI+PWUueTEpcmV0dXJue3gxOmUueDEseTE6ZS55MSx4MjplLngyLHkyOmUueTIsdzplLngyLWUueDEsaDplLnkyLWUueTF9O2lmKGUudyE9bnVsbCYmZS5oIT1udWxsJiZlLnc+PTAmJmUuaD49MClyZXR1cm57eDE6ZS54MSx5MTplLnkxLHgyOmUueDErZS53LHkyOmUueTErZS5oLHc6ZS53LGg6ZS5ofX19LCJtYWtlQm91bmRpbmdCb3giKSxsamU9byhmdW5jdGlvbihlKXtyZXR1cm57eDE6ZS54MSx4MjplLngyLHc6ZS53LHkxOmUueTEseTI6ZS55MixoOmUuaH19LCJjb3B5Qm91bmRpbmdCb3giKSxjamU9byhmdW5jdGlvbihlKXtlLngxPTEvMCxlLnkxPTEvMCxlLngyPS0xLzAsZS55Mj0tMS8wLGUudz0wLGUuaD0wfSwiY2xlYXJCb3VuZGluZ0JveCIpLHVqZT1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm57eDE6ZS54MStyLHgyOmUueDIrcix5MTplLnkxK24seTI6ZS55MituLHc6ZS53LGg6ZS5ofX0sInNoaWZ0Qm91bmRpbmdCb3giKSxjZ2U9byhmdW5jdGlvbihlLHIpe2UueDE9TWF0aC5taW4oZS54MSxyLngxKSxlLngyPU1hdGgubWF4KGUueDIsci54MiksZS53PWUueDItZS54MSxlLnkxPU1hdGgubWluKGUueTEsci55MSksZS55Mj1NYXRoLm1heChlLnkyLHIueTIpLGUuaD1lLnkyLWUueTF9LCJ1cGRhdGVCb3VuZGluZ0JveCIpLGhqZT1vKGZ1bmN0aW9uKGUscixuKXtlLngxPU1hdGgubWluKGUueDEsciksZS54Mj1NYXRoLm1heChlLngyLHIpLGUudz1lLngyLWUueDEsZS55MT1NYXRoLm1pbihlLnkxLG4pLGUueTI9TWF0aC5tYXgoZS55MixuKSxlLmg9ZS55Mi1lLnkxfSwiZXhwYW5kQm91bmRpbmdCb3hCeVBvaW50IikseTY9byhmdW5jdGlvbihlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06MDtyZXR1cm4gZS54MS09cixlLngyKz1yLGUueTEtPXIsZS55Mis9cixlLnc9ZS54Mi1lLngxLGUuaD1lLnkyLWUueTEsZX0sImV4cGFuZEJvdW5kaW5nQm94IiksdjY9byhmdW5jdGlvbihlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06WzBdLG4saSxhLHM7aWYoci5sZW5ndGg9PT0xKW49aT1hPXM9clswXTtlbHNlIGlmKHIubGVuZ3RoPT09MiluPWE9clswXSxzPWk9clsxXTtlbHNlIGlmKHIubGVuZ3RoPT09NCl7dmFyIGw9amwociw0KTtuPWxbMF0saT1sWzFdLGE9bFsyXSxzPWxbM119cmV0dXJuIGUueDEtPXMsZS54Mis9aSxlLnkxLT1uLGUueTIrPWEsZS53PWUueDItZS54MSxlLmg9ZS55Mi1lLnkxLGV9LCJleHBhbmRCb3VuZGluZ0JveFNpZGVzIiksQnBlPW8oZnVuY3Rpb24oZSxyKXtlLngxPXIueDEsZS55MT1yLnkxLGUueDI9ci54MixlLnkyPXIueTIsZS53PWUueDItZS54MSxlLmg9ZS55Mi1lLnkxfSwiYXNzaWduQm91bmRpbmdCb3giKSxjQj1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIShlLngxPnIueDJ8fHIueDE+ZS54Mnx8ZS54MjxyLngxfHxyLngyPGUueDF8fGUueTI8ci55MXx8ci55MjxlLnkxfHxlLnkxPnIueTJ8fHIueTE+ZS55Mil9LCJib3VuZGluZ0JveGVzSW50ZXJzZWN0IiksVDE9byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIGUueDE8PXImJnI8PWUueDImJmUueTE8PW4mJm48PWUueTJ9LCJpbkJvdW5kaW5nQm94IiksZmplPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gVDEoZSxyLngsci55KX0sInBvaW50SW5Cb3VuZGluZ0JveCIpLHVnZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIFQxKGUsci54MSxyLnkxKSYmVDEoZSxyLngyLHIueTIpfSwiYm91bmRpbmdCb3hJbkJvdW5kaW5nQm94IiksaGdlPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCl7dmFyIHU9YXJndW1lbnRzLmxlbmd0aD43JiZhcmd1bWVudHNbN10hPT12b2lkIDA/YXJndW1lbnRzWzddOiJhdXRvIixoPXU9PT0iYXV0byI/UTAoYSxzKTp1LGY9YS8yLGQ9cy8yO2g9TWF0aC5taW4oaCxmLGQpO3ZhciBwPWghPT1mLG09aCE9PWQsZztpZihwKXt2YXIgeT1uLWYraC1sLHY9aS1kLWwseD1uK2YtaCtsLGI9djtpZihnPU5mKGUscixuLGkseSx2LHgsYiwhMSksZy5sZW5ndGg+MClyZXR1cm4gZ31pZihtKXt2YXIgdz1uK2YrbCxfPWktZCtoLWwsVD13LEU9aStkLWgrbDtpZihnPU5mKGUscixuLGksdyxfLFQsRSwhMSksZy5sZW5ndGg+MClyZXR1cm4gZ31pZihwKXt2YXIgTD1uLWYraC1sLFM9aStkK2wsQT1uK2YtaCtsLEk9UztpZihnPU5mKGUscixuLGksTCxTLEEsSSwhMSksZy5sZW5ndGg+MClyZXR1cm4gZ31pZihtKXt2YXIgRD1uLWYtbCxrPWktZCtoLWwsUj1ELEM9aStkLWgrbDtpZihnPU5mKGUscixuLGksRCxrLFIsQywhMSksZy5sZW5ndGg+MClyZXR1cm4gZ312YXIgTzt7dmFyIE49bi1mK2gsUD1pLWQraDtpZihPPVF4KGUscixuLGksTixQLGgrbCksTy5sZW5ndGg+MCYmT1swXTw9TiYmT1sxXTw9UClyZXR1cm5bT1swXSxPWzFdXX17dmFyIEY9bitmLWgsQj1pLWQraDtpZihPPVF4KGUscixuLGksRixCLGgrbCksTy5sZW5ndGg+MCYmT1swXT49RiYmT1sxXTw9QilyZXR1cm5bT1swXSxPWzFdXX17dmFyIEc9bitmLWgsej1pK2QtaDtpZihPPVF4KGUscixuLGksRyx6LGgrbCksTy5sZW5ndGg+MCYmT1swXT49RyYmT1sxXT49eilyZXR1cm5bT1swXSxPWzFdXX17dmFyIFc9bi1mK2gsWj1pK2QtaDtpZihPPVF4KGUscixuLGksVyxaLGgrbCksTy5sZW5ndGg+MCYmT1swXTw9VyYmT1sxXT49WilyZXR1cm5bT1swXSxPWzFdXX1yZXR1cm5bXX0sInJvdW5kUmVjdGFuZ2xlSW50ZXJzZWN0TGluZSIpLGRqZT1vKGZ1bmN0aW9uKGUscixuLGksYSxzLGwpe3ZhciB1PWwsaD1NYXRoLm1pbihuLGEpLGY9TWF0aC5tYXgobixhKSxkPU1hdGgubWluKGkscykscD1NYXRoLm1heChpLHMpO3JldHVybiBoLXU8PWUmJmU8PWYrdSYmZC11PD1yJiZyPD1wK3V9LCJpbkxpbmVWaWNpbml0eSIpLHBqZT1vKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSxoKXt2YXIgZj17eDE6TWF0aC5taW4obixsLGEpLWgseDI6TWF0aC5tYXgobixsLGEpK2gseTE6TWF0aC5taW4oaSx1LHMpLWgseTI6TWF0aC5tYXgoaSx1LHMpK2h9O3JldHVybiEoZTxmLngxfHxlPmYueDJ8fHI8Zi55MXx8cj5mLnkyKX0sImluQmV6aWVyVmljaW5pdHkiKSxtamU9byhmdW5jdGlvbihlLHIsbixpKXtuLT1pO3ZhciBhPXIqci00KmUqbjtpZihhPDApcmV0dXJuW107dmFyIHM9TWF0aC5zcXJ0KGEpLGw9MiplLHU9KC1yK3MpL2wsaD0oLXItcykvbDtyZXR1cm5bdSxoXX0sInNvbHZlUXVhZHJhdGljIiksZ2plPW8oZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgcz0xZS01O2U9PT0wJiYoZT1zKSxyLz1lLG4vPWUsaS89ZTt2YXIgbCx1LGgsZixkLHAsbSxnO2lmKHU9KDMqbi1yKnIpLzksaD0tKDI3KmkpK3IqKDkqbi0yKihyKnIpKSxoLz01NCxsPXUqdSp1K2gqaCxhWzFdPTAsbT1yLzMsbD4wKXtkPWgrTWF0aC5zcXJ0KGwpLGQ9ZDwwPy1NYXRoLnBvdygtZCwxLzMpOk1hdGgucG93KGQsMS8zKSxwPWgtTWF0aC5zcXJ0KGwpLHA9cDwwPy1NYXRoLnBvdygtcCwxLzMpOk1hdGgucG93KHAsMS8zKSxhWzBdPS1tK2QrcCxtKz0oZCtwKS8yLGFbNF09YVsyXT0tbSxtPU1hdGguc3FydCgzKSooLXArZCkvMixhWzNdPW0sYVs1XT0tbTtyZXR1cm59aWYoYVs1XT1hWzNdPTAsbD09PTApe2c9aDwwPy1NYXRoLnBvdygtaCwxLzMpOk1hdGgucG93KGgsMS8zKSxhWzBdPS1tKzIqZyxhWzRdPWFbMl09LShnK20pO3JldHVybn11PS11LGY9dSp1KnUsZj1NYXRoLmFjb3MoaC9NYXRoLnNxcnQoZikpLGc9MipNYXRoLnNxcnQodSksYVswXT0tbStnKk1hdGguY29zKGYvMyksYVsyXT0tbStnKk1hdGguY29zKChmKzIqTWF0aC5QSSkvMyksYVs0XT0tbStnKk1hdGguY29zKChmKzQqTWF0aC5QSSkvMyl9LCJzb2x2ZUN1YmljIikseWplPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1KXt2YXIgaD0xKm4qbi00Km4qYSsyKm4qbCs0KmEqYS00KmEqbCtsKmwraSppLTQqaSpzKzIqaSp1KzQqcypzLTQqcyp1K3UqdSxmPTEqOSpuKmEtMypuKm4tMypuKmwtNiphKmErMyphKmwrOSppKnMtMyppKmktMyppKnUtNipzKnMrMypzKnUsZD0xKjMqbipuLTYqbiphK24qbC1uKmUrMiphKmErMiphKmUtbCplKzMqaSppLTYqaSpzK2kqdS1pKnIrMipzKnMrMipzKnItdSpyLHA9MSpuKmEtbipuK24qZS1hKmUraSpzLWkqaStpKnItcypyLG09W107Z2plKGgsZixkLHAsbSk7Zm9yKHZhciBnPTFlLTcseT1bXSx2PTA7djw2O3YrPTIpTWF0aC5hYnMobVt2KzFdKTxnJiZtW3ZdPj0wJiZtW3ZdPD0xJiZ5LnB1c2gobVt2XSk7eS5wdXNoKDEpLHkucHVzaCgwKTtmb3IodmFyIHg9LTEsYix3LF8sVD0wO1Q8eS5sZW5ndGg7VCsrKWI9TWF0aC5wb3coMS15W1RdLDIpKm4rMiooMS15W1RdKSp5W1RdKmEreVtUXSp5W1RdKmwsdz1NYXRoLnBvdygxLXlbVF0sMikqaSsyKigxLXlbVF0pKnlbVF0qcyt5W1RdKnlbVF0qdSxfPU1hdGgucG93KGItZSwyKStNYXRoLnBvdyh3LXIsMikseD49MD9fPHgmJih4PV8pOng9XztyZXR1cm4geH0sInNxZGlzdFRvUXVhZHJhdGljQmV6aWVyIiksdmplPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMpe3ZhciBsPVtlLW4sci1pXSx1PVthLW4scy1pXSxoPXVbMF0qdVswXSt1WzFdKnVbMV0sZj1sWzBdKmxbMF0rbFsxXSpsWzFdLGQ9bFswXSp1WzBdK2xbMV0qdVsxXSxwPWQqZC9oO3JldHVybiBkPDA/ZjpwPmg/KGUtYSkqKGUtYSkrKHItcykqKHItcyk6Zi1wfSwic3FkaXN0VG9GaW5pdGVMaW5lIiksanM9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpLGEscyxsLHUsaD0wLGY9MDtmPG4ubGVuZ3RoLzI7ZisrKWlmKGk9bltmKjJdLGE9bltmKjIrMV0sZisxPG4ubGVuZ3RoLzI/KHM9blsoZisxKSoyXSxsPW5bKGYrMSkqMisxXSk6KHM9blsoZisxLW4ubGVuZ3RoLzIpKjJdLGw9blsoZisxLW4ubGVuZ3RoLzIpKjIrMV0pLCEoaT09ZSYmcz09ZSkpaWYoaT49ZSYmZT49c3x8aTw9ZSYmZTw9cyl1PShlLWkpLyhzLWkpKihsLWEpK2EsdT5yJiZoKys7ZWxzZSBjb250aW51ZTtyZXR1cm4gaCUyIT09MH0sInBvaW50SW5zaWRlUG9seWdvblBvaW50cyIpLGFoPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1LGgpe3ZhciBmPW5ldyBBcnJheShuLmxlbmd0aCksZDt1WzBdIT1udWxsPyhkPU1hdGguYXRhbih1WzFdL3VbMF0pLHVbMF08MD9kPWQrTWF0aC5QSS8yOmQ9LWQtTWF0aC5QSS8yKTpkPXU7Zm9yKHZhciBwPU1hdGguY29zKC1kKSxtPU1hdGguc2luKC1kKSxnPTA7ZzxmLmxlbmd0aC8yO2crKylmW2cqMl09cy8yKihuW2cqMl0qcC1uW2cqMisxXSptKSxmW2cqMisxXT1sLzIqKG5bZyoyKzFdKnArbltnKjJdKm0pLGZbZyoyXSs9aSxmW2cqMisxXSs9YTt2YXIgeTtpZihoPjApe3ZhciB2PUQ2KGYsLWgpO3k9TDYodil9ZWxzZSB5PWY7cmV0dXJuIGpzKGUscix5KX0sInBvaW50SW5zaWRlUG9seWdvbiIpLHhqZT1vKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSl7Zm9yKHZhciBoPW5ldyBBcnJheShuLmxlbmd0aCoyKSxmPTA7Zjx1Lmxlbmd0aDtmKyspe3ZhciBkPXVbZl07aFtmKjQrMF09ZC5zdGFydFgsaFtmKjQrMV09ZC5zdGFydFksaFtmKjQrMl09ZC5zdG9wWCxoW2YqNCszXT1kLnN0b3BZO3ZhciBwPU1hdGgucG93KGQuY3gtZSwyKStNYXRoLnBvdyhkLmN5LXIsMik7aWYocDw9TWF0aC5wb3coZC5yYWRpdXMsMikpcmV0dXJuITB9cmV0dXJuIGpzKGUscixoKX0sInBvaW50SW5zaWRlUm91bmRQb2x5Z29uIiksTDY9byhmdW5jdGlvbihlKXtmb3IodmFyIHI9bmV3IEFycmF5KGUubGVuZ3RoLzIpLG4saSxhLHMsbCx1LGgsZixkPTA7ZDxlLmxlbmd0aC80O2QrKyl7bj1lW2QqNF0saT1lW2QqNCsxXSxhPWVbZCo0KzJdLHM9ZVtkKjQrM10sZDxlLmxlbmd0aC80LTE/KGw9ZVsoZCsxKSo0XSx1PWVbKGQrMSkqNCsxXSxoPWVbKGQrMSkqNCsyXSxmPWVbKGQrMSkqNCszXSk6KGw9ZVswXSx1PWVbMV0saD1lWzJdLGY9ZVszXSk7dmFyIHA9TmYobixpLGEscyxsLHUsaCxmLCEwKTtyW2QqMl09cFswXSxyW2QqMisxXT1wWzFdfXJldHVybiByfSwiam9pbkxpbmVzIiksRDY9byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1uZXcgQXJyYXkoZS5sZW5ndGgqMiksaSxhLHMsbCx1PTA7dTxlLmxlbmd0aC8yO3UrKyl7aT1lW3UqMl0sYT1lW3UqMisxXSx1PGUubGVuZ3RoLzItMT8ocz1lWyh1KzEpKjJdLGw9ZVsodSsxKSoyKzFdKToocz1lWzBdLGw9ZVsxXSk7dmFyIGg9bC1hLGY9LShzLWkpLGQ9TWF0aC5zcXJ0KGgqaCtmKmYpLHA9aC9kLG09Zi9kO25bdSo0XT1pK3AqcixuW3UqNCsxXT1hK20qcixuW3UqNCsyXT1zK3AqcixuW3UqNCszXT1sK20qcn1yZXR1cm4gbn0sImV4cGFuZFBvbHlnb24iKSxiamU9byhmdW5jdGlvbihlLHIsbixpLGEscyl7dmFyIGw9bi1lLHU9aS1yO2wvPWEsdS89czt2YXIgaD1NYXRoLnNxcnQobCpsK3UqdSksZj1oLTE7aWYoZjwwKXJldHVybltdO3ZhciBkPWYvaDtyZXR1cm5bKG4tZSkqZCtlLChpLXIpKmQrcl19LCJpbnRlcnNlY3RMaW5lRWxsaXBzZSIpLHEwPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCl7cmV0dXJuIGUtPWEsci09cyxlLz1uLzIrbCxyLz1pLzIrbCxlKmUrcipyPD0xfSwiY2hlY2tJbkVsbGlwc2UiKSxReD1vKGZ1bmN0aW9uKGUscixuLGksYSxzLGwpe3ZhciB1PVtuLWUsaS1yXSxoPVtlLWEsci1zXSxmPXVbMF0qdVswXSt1WzFdKnVbMV0sZD0yKihoWzBdKnVbMF0raFsxXSp1WzFdKSxwPWhbMF0qaFswXStoWzFdKmhbMV0tbCpsLG09ZCpkLTQqZipwO2lmKG08MClyZXR1cm5bXTt2YXIgZz0oLWQrTWF0aC5zcXJ0KG0pKS8oMipmKSx5PSgtZC1NYXRoLnNxcnQobSkpLygyKmYpLHY9TWF0aC5taW4oZyx5KSx4PU1hdGgubWF4KGcseSksYj1bXTtpZih2Pj0wJiZ2PD0xJiZiLnB1c2godikseD49MCYmeDw9MSYmYi5wdXNoKHgpLGIubGVuZ3RoPT09MClyZXR1cm5bXTt2YXIgdz1iWzBdKnVbMF0rZSxfPWJbMF0qdVsxXStyO2lmKGIubGVuZ3RoPjEpe2lmKGJbMF09PWJbMV0pcmV0dXJuW3csX107dmFyIFQ9YlsxXSp1WzBdK2UsRT1iWzFdKnVbMV0rcjtyZXR1cm5bdyxfLFQsRV19ZWxzZSByZXR1cm5bdyxfXX0sImludGVyc2VjdExpbmVDaXJjbGUiKSxMUD1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gcjw9ZSYmZTw9bnx8bjw9ZSYmZTw9cj9lOmU8PXImJnI8PW58fG48PXImJnI8PWU/cjpufSwibWlkT2ZUaHJlZSIpLE5mPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1LGgpe3ZhciBmPWUtYSxkPW4tZSxwPWwtYSxtPXItcyxnPWktcix5PXUtcyx2PXAqbS15KmYseD1kKm0tZypmLGI9eSpkLXAqZztpZihiIT09MCl7dmFyIHc9di9iLF89eC9iLFQ9LjAwMSxFPTAtVCxMPTErVDtyZXR1cm4gRTw9dyYmdzw9TCYmRTw9XyYmXzw9TD9bZSt3KmQscit3KmddOmg/W2UrdypkLHIrdypnXTpbXX1lbHNlIHJldHVybiB2PT09MHx8eD09PTA/TFAoZSxuLGwpPT09bD9bbCx1XTpMUChlLG4sYSk9PT1hP1thLHNdOkxQKGEsbCxuKT09PW4/W24saV06W106W119LCJmaW5pdGVMaW5lc0ludGVyc2VjdCIpLG9iPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1KXt2YXIgaD1bXSxmLGQ9bmV3IEFycmF5KG4ubGVuZ3RoKSxwPSEwO3M9PW51bGwmJihwPSExKTt2YXIgbTtpZihwKXtmb3IodmFyIGc9MDtnPGQubGVuZ3RoLzI7ZysrKWRbZyoyXT1uW2cqMl0qcytpLGRbZyoyKzFdPW5bZyoyKzFdKmwrYTtpZih1PjApe3ZhciB5PUQ2KGQsLXUpO209TDYoeSl9ZWxzZSBtPWR9ZWxzZSBtPW47Zm9yKHZhciB2LHgsYix3LF89MDtfPG0ubGVuZ3RoLzI7XysrKXY9bVtfKjJdLHg9bVtfKjIrMV0sXzxtLmxlbmd0aC8yLTE/KGI9bVsoXysxKSoyXSx3PW1bKF8rMSkqMisxXSk6KGI9bVswXSx3PW1bMV0pLGY9TmYoZSxyLGksYSx2LHgsYix3KSxmLmxlbmd0aCE9PTAmJmgucHVzaChmWzBdLGZbMV0pO3JldHVybiBofSwicG9seWdvbkludGVyc2VjdExpbmUiKSx3amU9byhmdW5jdGlvbihlLHIsbixpLGEscyxsLHUsaCl7dmFyIGY9W10sZCxwPW5ldyBBcnJheShuLmxlbmd0aCoyKTtoLmZvckVhY2goZnVuY3Rpb24oYix3KXt3PT09MD8ocFtwLmxlbmd0aC0yXT1iLnN0YXJ0WCxwW3AubGVuZ3RoLTFdPWIuc3RhcnRZKToocFt3KjQtMl09Yi5zdGFydFgscFt3KjQtMV09Yi5zdGFydFkpLHBbdyo0XT1iLnN0b3BYLHBbdyo0KzFdPWIuc3RvcFksZD1ReChlLHIsaSxhLGIuY3gsYi5jeSxiLnJhZGl1cyksZC5sZW5ndGghPT0wJiZmLnB1c2goZFswXSxkWzFdKX0pO2Zvcih2YXIgbT0wO208cC5sZW5ndGgvNDttKyspZD1OZihlLHIsaSxhLHBbbSo0XSxwW20qNCsxXSxwW20qNCsyXSxwW20qNCszXSwhMSksZC5sZW5ndGghPT0wJiZmLnB1c2goZFswXSxkWzFdKTtpZihmLmxlbmd0aD4yKXtmb3IodmFyIGc9W2ZbMF0sZlsxXV0seT1NYXRoLnBvdyhnWzBdLWUsMikrTWF0aC5wb3coZ1sxXS1yLDIpLHY9MTt2PGYubGVuZ3RoLzI7disrKXt2YXIgeD1NYXRoLnBvdyhmW3YqMl0tZSwyKStNYXRoLnBvdyhmW3YqMisxXS1yLDIpO3g8PXkmJihnWzBdPWZbdioyXSxnWzFdPWZbdioyKzFdLHk9eCl9cmV0dXJuIGd9cmV0dXJuIGZ9LCJyb3VuZFBvbHlnb25JbnRlcnNlY3RMaW5lIiksbzY9byhmdW5jdGlvbihlLHIsbil7dmFyIGk9W2VbMF0tclswXSxlWzFdLXJbMV1dLGE9TWF0aC5zcXJ0KGlbMF0qaVswXStpWzFdKmlbMV0pLHM9KGEtbikvYTtyZXR1cm4gczwwJiYocz0xZS01KSxbclswXStzKmlbMF0sclsxXStzKmlbMV1dfSwic2hvcnRlbkludGVyc2VjdGlvbiIpLG1zPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj16UChlLHIpO3JldHVybiBuPWZnZShuKSxufSwiZ2VuZXJhdGVVbml0TmdvblBvaW50c0ZpdFRvU3F1YXJlIiksZmdlPW8oZnVuY3Rpb24oZSl7Zm9yKHZhciByLG4saT1lLmxlbmd0aC8yLGE9MS8wLHM9MS8wLGw9LTEvMCx1PS0xLzAsaD0wO2g8aTtoKyspcj1lWzIqaF0sbj1lWzIqaCsxXSxhPU1hdGgubWluKGEsciksbD1NYXRoLm1heChsLHIpLHM9TWF0aC5taW4ocyxuKSx1PU1hdGgubWF4KHUsbik7Zm9yKHZhciBmPTIvKGwtYSksZD0yLyh1LXMpLHA9MDtwPGk7cCsrKXI9ZVsyKnBdPWVbMipwXSpmLG49ZVsyKnArMV09ZVsyKnArMV0qZCxhPU1hdGgubWluKGEsciksbD1NYXRoLm1heChsLHIpLHM9TWF0aC5taW4ocyxuKSx1PU1hdGgubWF4KHUsbik7aWYoczwtMSlmb3IodmFyIG09MDttPGk7bSsrKW49ZVsyKm0rMV09ZVsyKm0rMV0rKC0xLXMpO3JldHVybiBlfSwiZml0UG9seWdvblRvU3F1YXJlIikselA9byhmdW5jdGlvbihlLHIpe3ZhciBuPTEvZSoyKk1hdGguUEksaT1lJTI9PT0wP01hdGguUEkvMituLzI6TWF0aC5QSS8yO2krPXI7Zm9yKHZhciBhPW5ldyBBcnJheShlKjIpLHMsbD0wO2w8ZTtsKyspcz1sKm4raSxhWzIqbF09TWF0aC5jb3MocyksYVsyKmwrMV09TWF0aC5zaW4oLXMpO3JldHVybiBhfSwiZ2VuZXJhdGVVbml0TmdvblBvaW50cyIpLFEwPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gTWF0aC5taW4oZS80LHIvNCw4KX0sImdldFJvdW5kUmVjdGFuZ2xlUmFkaXVzIiksZGdlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gTWF0aC5taW4oZS8xMCxyLzEwLDgpfSwiZ2V0Um91bmRQb2x5Z29uUmFkaXVzIiksdUI9byhmdW5jdGlvbigpe3JldHVybiA4fSwiZ2V0Q3V0UmVjdGFuZ2xlQ29ybmVyTGVuZ3RoIiksVGplPW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybltlLTIqcituLDIqKHItZSksZV19LCJiZXppZXJQdHNUb1F1YWRDb2VmZiIpLEdQPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm57aGVpZ2h0T2Zmc2V0Ok1hdGgubWluKDE1LC4wNSpyKSx3aWR0aE9mZnNldDpNYXRoLm1pbigxMDAsLjI1KmUpLGN0cmxQdE9mZnNldFBjdDouMDV9fSwiZ2V0QmFycmVsQ3VydmVDb25zdGFudHMiKSxramU9X2Eoe2RhbXBpbmdGYWN0b3I6LjgscHJlY2lzaW9uOjFlLTYsaXRlcmF0aW9uczoyMDAsd2VpZ2h0Om8oZnVuY3Rpb24oZSl7cmV0dXJuIDF9LCJ3ZWlnaHQiKX0pLEVqZT17cGFnZVJhbms6byhmdW5jdGlvbihlKXtmb3IodmFyIHI9a2plKGUpLG49ci5kYW1waW5nRmFjdG9yLGk9ci5wcmVjaXNpb24sYT1yLml0ZXJhdGlvbnMscz1yLndlaWdodCxsPXRoaXMuX3ByaXZhdGUuY3ksdT10aGlzLmJ5R3JvdXAoKSxoPXUubm9kZXMsZj11LmVkZ2VzLGQ9aC5sZW5ndGgscD1kKmQsbT1mLmxlbmd0aCxnPW5ldyBBcnJheShwKSx5PW5ldyBBcnJheShkKSx2PSgxLW4pL2QseD0wO3g8ZDt4Kyspe2Zvcih2YXIgYj0wO2I8ZDtiKyspe3ZhciB3PXgqZCtiO2dbd109MH15W3hdPTB9Zm9yKHZhciBfPTA7XzxtO18rKyl7dmFyIFQ9ZltfXSxFPVQuZGF0YSgic291cmNlIiksTD1ULmRhdGEoInRhcmdldCIpO2lmKEUhPT1MKXt2YXIgUz1oLmluZGV4T2ZJZChFKSxBPWguaW5kZXhPZklkKEwpLEk9cyhUKSxEPUEqZCtTO2dbRF0rPUkseVtTXSs9SX19Zm9yKHZhciBrPTEvZCt2LFI9MDtSPGQ7UisrKWlmKHlbUl09PT0wKWZvcih2YXIgQz0wO0M8ZDtDKyspe3ZhciBPPUMqZCtSO2dbT109a31lbHNlIGZvcih2YXIgTj0wO048ZDtOKyspe3ZhciBQPU4qZCtSO2dbUF09Z1tQXS95W1JdK3Z9Zm9yKHZhciBGPW5ldyBBcnJheShkKSxCPW5ldyBBcnJheShkKSxHLHo9MDt6PGQ7eisrKUZbel09MTtmb3IodmFyIFc9MDtXPGE7VysrKXtmb3IodmFyIFo9MDtaPGQ7WisrKUJbWl09MDtmb3IodmFyIGo9MDtqPGQ7aisrKWZvcih2YXIgb2U9MDtvZTxkO29lKyspe3ZhciBLPWoqZCtvZTtCW2pdKz1nW0tdKkZbb2VdfXNqZShCKSxHPUYsRj1CLEI9Rztmb3IodmFyIGVlPTAsSj0wO0o8ZDtKKyspe3ZhciBIPUdbSl0tRltKXTtlZSs9SCpIfWlmKGVlPGkpYnJlYWt9dmFyIHE9e3Jhbms6byhmdW5jdGlvbihhZSl7cmV0dXJuIGFlPWwuY29sbGVjdGlvbihhZSlbMF0sRltoLmluZGV4T2YoYWUpXX0sInJhbmsiKX07cmV0dXJuIHF9LCJwYWdlUmFuayIpfSxGcGU9X2Eoe3Jvb3Q6bnVsbCx3ZWlnaHQ6byhmdW5jdGlvbihlKXtyZXR1cm4gMX0sIndlaWdodCIpLGRpcmVjdGVkOiExLGFscGhhOjB9KSx2MT17ZGVncmVlQ2VudHJhbGl0eU5vcm1hbGl6ZWQ6byhmdW5jdGlvbihlKXtlPUZwZShlKTt2YXIgcj10aGlzLmN5KCksbj10aGlzLm5vZGVzKCksaT1uLmxlbmd0aDtpZihlLmRpcmVjdGVkKXtmb3IodmFyIGY9e30sZD17fSxwPTAsbT0wLGc9MDtnPGk7ZysrKXt2YXIgeT1uW2ddLHY9eS5pZCgpO2Uucm9vdD15O3ZhciB4PXRoaXMuZGVncmVlQ2VudHJhbGl0eShlKTtwPHguaW5kZWdyZWUmJihwPXguaW5kZWdyZWUpLG08eC5vdXRkZWdyZWUmJihtPXgub3V0ZGVncmVlKSxmW3ZdPXguaW5kZWdyZWUsZFt2XT14Lm91dGRlZ3JlZX1yZXR1cm57aW5kZWdyZWU6byhmdW5jdGlvbih3KXtyZXR1cm4gcD09MD8wOihadCh3KSYmKHc9ci5maWx0ZXIodykpLGZbdy5pZCgpXS9wKX0sImluZGVncmVlIiksb3V0ZGVncmVlOm8oZnVuY3Rpb24odyl7cmV0dXJuIG09PT0wPzA6KFp0KHcpJiYodz1yLmZpbHRlcih3KSksZFt3LmlkKCldL20pfSwib3V0ZGVncmVlIil9fWVsc2V7Zm9yKHZhciBhPXt9LHM9MCxsPTA7bDxpO2wrKyl7dmFyIHU9bltsXTtlLnJvb3Q9dTt2YXIgaD10aGlzLmRlZ3JlZUNlbnRyYWxpdHkoZSk7czxoLmRlZ3JlZSYmKHM9aC5kZWdyZWUpLGFbdS5pZCgpXT1oLmRlZ3JlZX1yZXR1cm57ZGVncmVlOm8oZnVuY3Rpb24odyl7cmV0dXJuIHM9PT0wPzA6KFp0KHcpJiYodz1yLmZpbHRlcih3KSksYVt3LmlkKCldL3MpfSwiZGVncmVlIil9fX0sImRlZ3JlZUNlbnRyYWxpdHlOb3JtYWxpemVkIiksZGVncmVlQ2VudHJhbGl0eTpvKGZ1bmN0aW9uKGUpe2U9RnBlKGUpO3ZhciByPXRoaXMuY3koKSxuPXRoaXMsaT1lLGE9aS5yb290LHM9aS53ZWlnaHQsbD1pLmRpcmVjdGVkLHU9aS5hbHBoYTtpZihhPXIuY29sbGVjdGlvbihhKVswXSxsKXtmb3IodmFyIG09YS5jb25uZWN0ZWRFZGdlcygpLGc9bS5maWx0ZXIoZnVuY3Rpb24oRSl7cmV0dXJuIEUudGFyZ2V0KCkuc2FtZShhKSYmbi5oYXMoRSl9KSx5PW0uZmlsdGVyKGZ1bmN0aW9uKEUpe3JldHVybiBFLnNvdXJjZSgpLnNhbWUoYSkmJm4uaGFzKEUpfSksdj1nLmxlbmd0aCx4PXkubGVuZ3RoLGI9MCx3PTAsXz0wO188Zy5sZW5ndGg7XysrKWIrPXMoZ1tfXSk7Zm9yKHZhciBUPTA7VDx5Lmxlbmd0aDtUKyspdys9cyh5W1RdKTtyZXR1cm57aW5kZWdyZWU6TWF0aC5wb3codiwxLXUpKk1hdGgucG93KGIsdSksb3V0ZGVncmVlOk1hdGgucG93KHgsMS11KSpNYXRoLnBvdyh3LHUpfX1lbHNle2Zvcih2YXIgaD1hLmNvbm5lY3RlZEVkZ2VzKCkuaW50ZXJzZWN0aW9uKG4pLGY9aC5sZW5ndGgsZD0wLHA9MDtwPGgubGVuZ3RoO3ArKylkKz1zKGhbcF0pO3JldHVybntkZWdyZWU6TWF0aC5wb3coZiwxLXUpKk1hdGgucG93KGQsdSl9fX0sImRlZ3JlZUNlbnRyYWxpdHkiKX07djEuZGM9djEuZGVncmVlQ2VudHJhbGl0eTt2MS5kY249djEuZGVncmVlQ2VudHJhbGl0eU5vcm1hbGlzZWQ9djEuZGVncmVlQ2VudHJhbGl0eU5vcm1hbGl6ZWQ7enBlPV9hKHtoYXJtb25pYzohMCx3ZWlnaHQ6byhmdW5jdGlvbigpe3JldHVybiAxfSwid2VpZ2h0IiksZGlyZWN0ZWQ6ITEscm9vdDpudWxsfSkseDE9e2Nsb3NlbmVzc0NlbnRyYWxpdHlOb3JtYWxpemVkOm8oZnVuY3Rpb24oZSl7Zm9yKHZhciByPXpwZShlKSxuPXIuaGFybW9uaWMsaT1yLndlaWdodCxhPXIuZGlyZWN0ZWQscz10aGlzLmN5KCksbD17fSx1PTAsaD10aGlzLm5vZGVzKCksZj10aGlzLmZsb3lkV2Fyc2hhbGwoe3dlaWdodDppLGRpcmVjdGVkOmF9KSxkPTA7ZDxoLmxlbmd0aDtkKyspe2Zvcih2YXIgcD0wLG09aFtkXSxnPTA7ZzxoLmxlbmd0aDtnKyspaWYoZCE9PWcpe3ZhciB5PWYuZGlzdGFuY2UobSxoW2ddKTtuP3ArPTEveTpwKz15fW58fChwPTEvcCksdTxwJiYodT1wKSxsW20uaWQoKV09cH1yZXR1cm57Y2xvc2VuZXNzOm8oZnVuY3Rpb24oeCl7cmV0dXJuIHU9PTA/MDooWnQoeCk/eD1zLmZpbHRlcih4KVswXS5pZCgpOng9eC5pZCgpLGxbeF0vdSl9LCJjbG9zZW5lc3MiKX19LCJjbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXplZCIpLGNsb3NlbmVzc0NlbnRyYWxpdHk6byhmdW5jdGlvbihlKXt2YXIgcj16cGUoZSksbj1yLnJvb3QsaT1yLndlaWdodCxhPXIuZGlyZWN0ZWQscz1yLmhhcm1vbmljO249dGhpcy5maWx0ZXIobilbMF07Zm9yKHZhciBsPXRoaXMuZGlqa3N0cmEoe3Jvb3Q6bix3ZWlnaHQ6aSxkaXJlY3RlZDphfSksdT0wLGg9dGhpcy5ub2RlcygpLGY9MDtmPGgubGVuZ3RoO2YrKyl7dmFyIGQ9aFtmXTtpZighZC5zYW1lKG4pKXt2YXIgcD1sLmRpc3RhbmNlVG8oZCk7cz91Kz0xL3A6dSs9cH19cmV0dXJuIHM/dToxL3V9LCJjbG9zZW5lc3NDZW50cmFsaXR5Iil9O3gxLmNjPXgxLmNsb3NlbmVzc0NlbnRyYWxpdHk7eDEuY2NuPXgxLmNsb3NlbmVzc0NlbnRyYWxpdHlOb3JtYWxpc2VkPXgxLmNsb3NlbmVzc0NlbnRyYWxpdHlOb3JtYWxpemVkO1NqZT1fYSh7d2VpZ2h0Om51bGwsZGlyZWN0ZWQ6ITF9KSwkUD17YmV0d2Vlbm5lc3NDZW50cmFsaXR5Om8oZnVuY3Rpb24oZSl7Zm9yKHZhciByPVNqZShlKSxuPXIuZGlyZWN0ZWQsaT1yLndlaWdodCxhPWkhPW51bGwscz10aGlzLmN5KCksbD10aGlzLm5vZGVzKCksdT17fSxoPXt9LGY9MCxkPXtzZXQ6byhmdW5jdGlvbih3LF8pe2hbd109XyxfPmYmJihmPV8pfSwic2V0IiksZ2V0Om8oZnVuY3Rpb24odyl7cmV0dXJuIGhbd119LCJnZXQiKX0scD0wO3A8bC5sZW5ndGg7cCsrKXt2YXIgbT1sW3BdLGc9bS5pZCgpO24/dVtnXT1tLm91dGdvZXJzKCkubm9kZXMoKTp1W2ddPW0ub3Blbk5laWdoYm9yaG9vZCgpLm5vZGVzKCksZC5zZXQoZywwKX1mb3IodmFyIHk9byhmdW5jdGlvbih3KXtmb3IodmFyIF89bFt3XS5pZCgpLFQ9W10sRT17fSxMPXt9LFM9e30sQT1uZXcgZ2IoZnVuY3Rpb24ob2UsSyl7cmV0dXJuIFNbb2VdLVNbS119KSxJPTA7STxsLmxlbmd0aDtJKyspe3ZhciBEPWxbSV0uaWQoKTtFW0RdPVtdLExbRF09MCxTW0RdPTEvMH1mb3IoTFtfXT0xLFNbX109MCxBLnB1c2goXyk7IUEuZW1wdHkoKTspe3ZhciBrPUEucG9wKCk7aWYoVC5wdXNoKGspLGEpZm9yKHZhciBSPTA7Ujx1W2tdLmxlbmd0aDtSKyspe3ZhciBDPXVba11bUl0sTz1zLmdldEVsZW1lbnRCeUlkKGspLE49dm9pZCAwO08uZWRnZXNUbyhDKS5sZW5ndGg+MD9OPU8uZWRnZXNUbyhDKVswXTpOPUMuZWRnZXNUbyhPKVswXTt2YXIgUD1pKE4pO0M9Qy5pZCgpLFNbQ10+U1trXStQJiYoU1tDXT1TW2tdK1AsQS5ub2Rlcy5pbmRleE9mKEMpPDA/QS5wdXNoKEMpOkEudXBkYXRlSXRlbShDKSxMW0NdPTAsRVtDXT1bXSksU1tDXT09U1trXStQJiYoTFtDXT1MW0NdK0xba10sRVtDXS5wdXNoKGspKX1lbHNlIGZvcih2YXIgRj0wO0Y8dVtrXS5sZW5ndGg7RisrKXt2YXIgQj11W2tdW0ZdLmlkKCk7U1tCXT09MS8wJiYoQS5wdXNoKEIpLFNbQl09U1trXSsxKSxTW0JdPT1TW2tdKzEmJihMW0JdPUxbQl0rTFtrXSxFW0JdLnB1c2goaykpfX1mb3IodmFyIEc9e30sej0wO3o8bC5sZW5ndGg7eisrKUdbbFt6XS5pZCgpXT0wO2Zvcig7VC5sZW5ndGg+MDspe2Zvcih2YXIgVz1ULnBvcCgpLFo9MDtaPEVbV10ubGVuZ3RoO1orKyl7dmFyIGo9RVtXXVtaXTtHW2pdPUdbal0rTFtqXS9MW1ddKigxK0dbV10pfVchPWxbd10uaWQoKSYmZC5zZXQoVyxkLmdldChXKStHW1ddKX19LCJfbG9vcCIpLHY9MDt2PGwubGVuZ3RoO3YrKyl5KHYpO3ZhciB4PXtiZXR3ZWVubmVzczpvKGZ1bmN0aW9uKHcpe3ZhciBfPXMuY29sbGVjdGlvbih3KS5pZCgpO3JldHVybiBkLmdldChfKX0sImJldHdlZW5uZXNzIiksYmV0d2Vlbm5lc3NOb3JtYWxpemVkOm8oZnVuY3Rpb24odyl7aWYoZj09MClyZXR1cm4gMDt2YXIgXz1zLmNvbGxlY3Rpb24odykuaWQoKTtyZXR1cm4gZC5nZXQoXykvZn0sImJldHdlZW5uZXNzTm9ybWFsaXplZCIpfTtyZXR1cm4geC5iZXR3ZWVubmVzc05vcm1hbGlzZWQ9eC5iZXR3ZWVubmVzc05vcm1hbGl6ZWQseH0sImJldHdlZW5uZXNzQ2VudHJhbGl0eSIpfTskUC5iYz0kUC5iZXR3ZWVubmVzc0NlbnRyYWxpdHk7Q2plPV9hKHtleHBhbmRGYWN0b3I6MixpbmZsYXRlRmFjdG9yOjIsbXVsdEZhY3RvcjoxLG1heEl0ZXJhdGlvbnM6MjAsYXR0cmlidXRlczpbZnVuY3Rpb24odCl7cmV0dXJuIDF9XX0pLEFqZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBDamUoZSl9LCJzZXRPcHRpb25zIiksX2plPW8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MCxpPTA7aTxyLmxlbmd0aDtpKyspbis9cltpXShlKTtyZXR1cm4gbn0sImdldFNpbWlsYXJpdHkiKSxMamU9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPTA7aTxyO2krKyllW2kqcitpXT1ufSwiYWRkTG9vcHMiKSxwZ2U9byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbixpPTA7aTxyO2krKyl7bj0wO2Zvcih2YXIgYT0wO2E8cjthKyspbis9ZVthKnIraV07Zm9yKHZhciBzPTA7czxyO3MrKyllW3MqcitpXT1lW3MqcitpXS9ufX0sIm5vcm1hbGl6ZSIpLERqZT1vKGZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGk9bmV3IEFycmF5KG4qbiksYT0wO2E8bjthKyspe2Zvcih2YXIgcz0wO3M8bjtzKyspaVthKm4rc109MDtmb3IodmFyIGw9MDtsPG47bCsrKWZvcih2YXIgdT0wO3U8bjt1KyspaVthKm4rdV0rPWVbYSpuK2xdKnJbbCpuK3VdfXJldHVybiBpfSwibW11bHQiKSxOamU9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPWUuc2xpY2UoMCksYT0xO2E8bjthKyspZT1EamUoZSxpLHIpO3JldHVybiBlfSwiZXhwYW5kIiksUmplPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1uZXcgQXJyYXkocipyKSxhPTA7YTxyKnI7YSsrKWlbYV09TWF0aC5wb3coZVthXSxuKTtyZXR1cm4gcGdlKGksciksaX0sImluZmxhdGUiKSxNamU9byhmdW5jdGlvbihlLHIsbixpKXtmb3IodmFyIGE9MDthPG47YSsrKXt2YXIgcz1NYXRoLnJvdW5kKGVbYV0qTWF0aC5wb3coMTAsaSkpL01hdGgucG93KDEwLGkpLGw9TWF0aC5yb3VuZChyW2FdKk1hdGgucG93KDEwLGkpKS9NYXRoLnBvdygxMCxpKTtpZihzIT09bClyZXR1cm4hMX1yZXR1cm4hMH0sImhhc0NvbnZlcmdlZCIpLElqZT1vKGZ1bmN0aW9uKGUscixuLGkpe2Zvcih2YXIgYT1bXSxzPTA7czxyO3MrKyl7Zm9yKHZhciBsPVtdLHU9MDt1PHI7dSsrKU1hdGgucm91bmQoZVtzKnIrdV0qMWUzKS8xZTM+MCYmbC5wdXNoKG5bdV0pO2wubGVuZ3RoIT09MCYmYS5wdXNoKGkuY29sbGVjdGlvbihsKSl9cmV0dXJuIGF9LCJhc3NpZ24iKSxPamU9byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKCFyW25dfHxlW25dLmlkKCkhPT1yW25dLmlkKCkpcmV0dXJuITE7cmV0dXJuITB9LCJpc0R1cGxpY2F0ZSIpLFBqZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWZvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXIhPW4mJk9qZShlW3JdLGVbbl0pJiZlLnNwbGljZShuLDEpO3JldHVybiBlfSwicmVtb3ZlRHVwbGljYXRlcyIpLEdwZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj10aGlzLm5vZGVzKCksbj10aGlzLmVkZ2VzKCksaT10aGlzLmN5KCksYT1BamUoZSkscz17fSxsPTA7bDxyLmxlbmd0aDtsKyspc1tyW2xdLmlkKCldPWw7Zm9yKHZhciB1PXIubGVuZ3RoLGg9dSp1LGY9bmV3IEFycmF5KGgpLGQscD0wO3A8aDtwKyspZltwXT0wO2Zvcih2YXIgbT0wO208bi5sZW5ndGg7bSsrKXt2YXIgZz1uW21dLHk9c1tnLnNvdXJjZSgpLmlkKCldLHY9c1tnLnRhcmdldCgpLmlkKCldLHg9X2plKGcsYS5hdHRyaWJ1dGVzKTtmW3kqdSt2XSs9eCxmW3YqdSt5XSs9eH1MamUoZix1LGEubXVsdEZhY3RvcikscGdlKGYsdSk7Zm9yKHZhciBiPSEwLHc9MDtiJiZ3PGEubWF4SXRlcmF0aW9uczspYj0hMSxkPU5qZShmLHUsYS5leHBhbmRGYWN0b3IpLGY9UmplKGQsdSxhLmluZmxhdGVGYWN0b3IpLE1qZShmLGQsaCw0KXx8KGI9ITApLHcrKzt2YXIgXz1JamUoZix1LHIsaSk7cmV0dXJuIF89UGplKF8pLF99LCJtYXJrb3ZDbHVzdGVyaW5nIiksQmplPXttYXJrb3ZDbHVzdGVyaW5nOkdwZSxtY2w6R3BlfSxGamU9byhmdW5jdGlvbihlKXtyZXR1cm4gZX0sImlkZW50aXR5IiksbWdlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gTWF0aC5hYnMoci1lKX0sImFic0RpZmYiKSwkcGU9byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIGUrbWdlKHIsbil9LCJhZGRBYnNEaWZmIiksVnBlPW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlK01hdGgucG93KG4tciwyKX0sImFkZFNxdWFyZWREaWZmIiksemplPW8oZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguc3FydChlKX0sInNxcnQiKSxHamU9byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIE1hdGgubWF4KGUsbWdlKHIsbikpfSwibWF4QWJzRGlmZiIpLFd4PW8oZnVuY3Rpb24oZSxyLG4saSxhKXtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOkZqZSxsPWksdSxoLGY9MDtmPGU7ZisrKXU9cihmKSxoPW4oZiksbD1hKGwsdSxoKTtyZXR1cm4gcyhsKX0sImdldERpc3RhbmNlIiksazE9e2V1Y2xpZGVhbjpvKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZT49Mj9XeChlLHIsbiwwLFZwZSx6amUpOld4KGUscixuLDAsJHBlKX0sImV1Y2xpZGVhbiIpLHNxdWFyZWRFdWNsaWRlYW46byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIFd4KGUscixuLDAsVnBlKX0sInNxdWFyZWRFdWNsaWRlYW4iKSxtYW5oYXR0YW46byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIFd4KGUscixuLDAsJHBlKX0sIm1hbmhhdHRhbiIpLG1heDpvKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gV3goZSxyLG4sLTEvMCxHamUpfSwibWF4Iil9O2sxWyJzcXVhcmVkLWV1Y2xpZGVhbiJdPWsxLnNxdWFyZWRFdWNsaWRlYW47azEuc3F1YXJlZGV1Y2xpZGVhbj1rMS5zcXVhcmVkRXVjbGlkZWFuO28oVjYsImNsdXN0ZXJpbmdEaXN0YW5jZSIpOyRqZT1fYSh7azoyLG06MixzZW5zaXRpdml0eVRocmVzaG9sZDoxZS00LGRpc3RhbmNlOiJldWNsaWRlYW4iLG1heEl0ZXJhdGlvbnM6MTAsYXR0cmlidXRlczpbXSx0ZXN0TW9kZTohMSx0ZXN0Q2VudHJvaWRzOm51bGx9KSxoQj1vKGZ1bmN0aW9uKGUpe3JldHVybiAkamUoZSl9LCJzZXRPcHRpb25zIiksTjY9byhmdW5jdGlvbihlLHIsbixpLGEpe3ZhciBzPWEhPT0ia01lZG9pZHMiLGw9cz9mdW5jdGlvbihkKXtyZXR1cm4gbltkXX06ZnVuY3Rpb24oZCl7cmV0dXJuIGlbZF0obil9LHU9byhmdW5jdGlvbihwKXtyZXR1cm4gaVtwXShyKX0sImdldFEiKSxoPW4sZj1yO3JldHVybiBWNihlLGkubGVuZ3RoLGwsdSxoLGYpfSwiZ2V0RGlzdCIpLERQPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1uLmxlbmd0aCxhPW5ldyBBcnJheShpKSxzPW5ldyBBcnJheShpKSxsPW5ldyBBcnJheShyKSx1PW51bGwsaD0wO2g8aTtoKyspYVtoXT1lLm1pbihuW2hdKS52YWx1ZSxzW2hdPWUubWF4KG5baF0pLnZhbHVlO2Zvcih2YXIgZj0wO2Y8cjtmKyspe3U9W107Zm9yKHZhciBkPTA7ZDxpO2QrKyl1W2RdPU1hdGgucmFuZG9tKCkqKHNbZF0tYVtkXSkrYVtkXTtsW2ZdPXV9cmV0dXJuIGx9LCJyYW5kb21DZW50cm9pZHMiKSxnZ2U9byhmdW5jdGlvbihlLHIsbixpLGEpe2Zvcih2YXIgcz0xLzAsbD0wLHU9MDt1PHIubGVuZ3RoO3UrKyl7dmFyIGg9TjYobixlLHJbdV0saSxhKTtoPHMmJihzPWgsbD11KX1yZXR1cm4gbH0sImNsYXNzaWZ5IikseWdlPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1bXSxhPW51bGwscz0wO3M8ci5sZW5ndGg7cysrKWE9cltzXSxuW2EuaWQoKV09PT1lJiZpLnB1c2goYSk7cmV0dXJuIGl9LCJidWlsZENsdXN0ZXIiKSxWamU9byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIE1hdGguYWJzKHItZSk8PW59LCJoYXZlVmFsdWVzQ29udmVyZ2VkIiksVWplPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKWZvcih2YXIgYT0wO2E8ZVtpXS5sZW5ndGg7YSsrKXt2YXIgcz1NYXRoLmFicyhlW2ldW2FdLXJbaV1bYV0pO2lmKHM+bilyZXR1cm4hMX1yZXR1cm4hMH0sImhhdmVNYXRyaWNlc0NvbnZlcmdlZCIpLEhqZT1vKGZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGk9MDtpPG47aSsrKWlmKGU9PT1yW2ldKXJldHVybiEwO3JldHVybiExfSwic2VlbkJlZm9yZSIpLFVwZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49bmV3IEFycmF5KHIpO2lmKGUubGVuZ3RoPDUwKWZvcih2YXIgaT0wO2k8cjtpKyspe2Zvcih2YXIgYT1lW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSplLmxlbmd0aCldO0hqZShhLG4saSk7KWE9ZVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqZS5sZW5ndGgpXTtuW2ldPWF9ZWxzZSBmb3IodmFyIHM9MDtzPHI7cysrKW5bc109ZVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqZS5sZW5ndGgpXTtyZXR1cm4gbn0sInJhbmRvbU1lZG9pZHMiKSxIcGU9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPTAsYT0wO2E8ci5sZW5ndGg7YSsrKWkrPU42KCJtYW5oYXR0YW4iLHJbYV0sZSxuLCJrTWVkb2lkcyIpO3JldHVybiBpfSwiZmluZENvc3QiKSxXamU9byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLmN5KCksbj10aGlzLm5vZGVzKCksaT1udWxsLGE9aEIoZSkscz1uZXcgQXJyYXkoYS5rKSxsPXt9LHU7YS50ZXN0TW9kZT90eXBlb2YgYS50ZXN0Q2VudHJvaWRzPT0ibnVtYmVyIj8oYS50ZXN0Q2VudHJvaWRzLHU9RFAobixhLmssYS5hdHRyaWJ1dGVzKSk6S2koYS50ZXN0Q2VudHJvaWRzKT09PSJvYmplY3QiP3U9YS50ZXN0Q2VudHJvaWRzOnU9RFAobixhLmssYS5hdHRyaWJ1dGVzKTp1PURQKG4sYS5rLGEuYXR0cmlidXRlcyk7Zm9yKHZhciBoPSEwLGY9MDtoJiZmPGEubWF4SXRlcmF0aW9uczspe2Zvcih2YXIgZD0wO2Q8bi5sZW5ndGg7ZCsrKWk9bltkXSxsW2kuaWQoKV09Z2dlKGksdSxhLmRpc3RhbmNlLGEuYXR0cmlidXRlcywia01lYW5zIik7aD0hMTtmb3IodmFyIHA9MDtwPGEuaztwKyspe3ZhciBtPXlnZShwLG4sbCk7aWYobS5sZW5ndGghPT0wKXtmb3IodmFyIGc9YS5hdHRyaWJ1dGVzLmxlbmd0aCx5PXVbcF0sdj1uZXcgQXJyYXkoZykseD1uZXcgQXJyYXkoZyksYj0wO2I8ZztiKyspe3hbYl09MDtmb3IodmFyIHc9MDt3PG0ubGVuZ3RoO3crKylpPW1bd10seFtiXSs9YS5hdHRyaWJ1dGVzW2JdKGkpO3ZbYl09eFtiXS9tLmxlbmd0aCxWamUodltiXSx5W2JdLGEuc2Vuc2l0aXZpdHlUaHJlc2hvbGQpfHwoaD0hMCl9dVtwXT12LHNbcF09ci5jb2xsZWN0aW9uKG0pfX1mKyt9cmV0dXJuIHN9LCJrTWVhbnMiKSxZamU9byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLmN5KCksbj10aGlzLm5vZGVzKCksaT1udWxsLGE9aEIoZSkscz1uZXcgQXJyYXkoYS5rKSxsLHU9e30saCxmPW5ldyBBcnJheShhLmspO2EudGVzdE1vZGU/dHlwZW9mIGEudGVzdENlbnRyb2lkcz09Im51bWJlciJ8fChLaShhLnRlc3RDZW50cm9pZHMpPT09Im9iamVjdCI/bD1hLnRlc3RDZW50cm9pZHM6bD1VcGUobixhLmspKTpsPVVwZShuLGEuayk7Zm9yKHZhciBkPSEwLHA9MDtkJiZwPGEubWF4SXRlcmF0aW9uczspe2Zvcih2YXIgbT0wO208bi5sZW5ndGg7bSsrKWk9blttXSx1W2kuaWQoKV09Z2dlKGksbCxhLmRpc3RhbmNlLGEuYXR0cmlidXRlcywia01lZG9pZHMiKTtkPSExO2Zvcih2YXIgZz0wO2c8bC5sZW5ndGg7ZysrKXt2YXIgeT15Z2UoZyxuLHUpO2lmKHkubGVuZ3RoIT09MCl7ZltnXT1IcGUobFtnXSx5LGEuYXR0cmlidXRlcyk7Zm9yKHZhciB2PTA7djx5Lmxlbmd0aDt2KyspaD1IcGUoeVt2XSx5LGEuYXR0cmlidXRlcyksaDxmW2ddJiYoZltnXT1oLGxbZ109eVt2XSxkPSEwKTtzW2ddPXIuY29sbGVjdGlvbih5KX19cCsrfXJldHVybiBzfSwia01lZG9pZHMiKSxxamU9byhmdW5jdGlvbihlLHIsbixpLGEpe2Zvcih2YXIgcyxsLHU9MDt1PHIubGVuZ3RoO3UrKylmb3IodmFyIGg9MDtoPGUubGVuZ3RoO2grKylpW3VdW2hdPU1hdGgucG93KG5bdV1baF0sYS5tKTtmb3IodmFyIGY9MDtmPGUubGVuZ3RoO2YrKylmb3IodmFyIGQ9MDtkPGEuYXR0cmlidXRlcy5sZW5ndGg7ZCsrKXtzPTAsbD0wO2Zvcih2YXIgcD0wO3A8ci5sZW5ndGg7cCsrKXMrPWlbcF1bZl0qYS5hdHRyaWJ1dGVzW2RdKHJbcF0pLGwrPWlbcF1bZl07ZVtmXVtkXT1zL2x9fSwidXBkYXRlQ2VudHJvaWRzIiksWGplPW8oZnVuY3Rpb24oZSxyLG4saSxhKXtmb3IodmFyIHM9MDtzPGUubGVuZ3RoO3MrKylyW3NdPWVbc10uc2xpY2UoKTtmb3IodmFyIGwsdSxoLGY9Mi8oYS5tLTEpLGQ9MDtkPG4ubGVuZ3RoO2QrKylmb3IodmFyIHA9MDtwPGkubGVuZ3RoO3ArKyl7bD0wO2Zvcih2YXIgbT0wO208bi5sZW5ndGg7bSsrKXU9TjYoYS5kaXN0YW5jZSxpW3BdLG5bZF0sYS5hdHRyaWJ1dGVzLCJjbWVhbnMiKSxoPU42KGEuZGlzdGFuY2UsaVtwXSxuW21dLGEuYXR0cmlidXRlcywiY21lYW5zIiksbCs9TWF0aC5wb3codS9oLGYpO2VbcF1bZF09MS9sfX0sInVwZGF0ZU1lbWJlcnNoaXAiKSxqamU9byhmdW5jdGlvbihlLHIsbixpKXtmb3IodmFyIGE9bmV3IEFycmF5KG4uaykscz0wO3M8YS5sZW5ndGg7cysrKWFbc109W107Zm9yKHZhciBsLHUsaD0wO2g8ci5sZW5ndGg7aCsrKXtsPS0xLzAsdT0tMTtmb3IodmFyIGY9MDtmPHJbMF0ubGVuZ3RoO2YrKylyW2hdW2ZdPmwmJihsPXJbaF1bZl0sdT1mKTthW3VdLnB1c2goZVtoXSl9Zm9yKHZhciBkPTA7ZDxhLmxlbmd0aDtkKyspYVtkXT1pLmNvbGxlY3Rpb24oYVtkXSk7cmV0dXJuIGF9LCJhc3NpZ24iKSxXcGU9byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLmN5KCksbj10aGlzLm5vZGVzKCksaT1oQihlKSxhLHMsbCx1LGg7dT1uZXcgQXJyYXkobi5sZW5ndGgpO2Zvcih2YXIgZj0wO2Y8bi5sZW5ndGg7ZisrKXVbZl09bmV3IEFycmF5KGkuayk7bD1uZXcgQXJyYXkobi5sZW5ndGgpO2Zvcih2YXIgZD0wO2Q8bi5sZW5ndGg7ZCsrKWxbZF09bmV3IEFycmF5KGkuayk7Zm9yKHZhciBwPTA7cDxuLmxlbmd0aDtwKyspe2Zvcih2YXIgbT0wLGc9MDtnPGkuaztnKyspbFtwXVtnXT1NYXRoLnJhbmRvbSgpLG0rPWxbcF1bZ107Zm9yKHZhciB5PTA7eTxpLms7eSsrKWxbcF1beV09bFtwXVt5XS9tfXM9bmV3IEFycmF5KGkuayk7Zm9yKHZhciB2PTA7djxpLms7disrKXNbdl09bmV3IEFycmF5KGkuYXR0cmlidXRlcy5sZW5ndGgpO2g9bmV3IEFycmF5KG4ubGVuZ3RoKTtmb3IodmFyIHg9MDt4PG4ubGVuZ3RoO3grKyloW3hdPW5ldyBBcnJheShpLmspO2Zvcih2YXIgYj0hMCx3PTA7YiYmdzxpLm1heEl0ZXJhdGlvbnM7KWI9ITEscWplKHMsbixsLGgsaSksWGplKGwsdSxzLG4saSksVWplKGwsdSxpLnNlbnNpdGl2aXR5VGhyZXNob2xkKXx8KGI9ITApLHcrKztyZXR1cm4gYT1qamUobixsLGkscikse2NsdXN0ZXJzOmEsZGVncmVlT2ZNZW1iZXJzaGlwOmx9fSwiZnV6enlDTWVhbnMiKSxLamU9e2tNZWFuczpXamUsa01lZG9pZHM6WWplLGZ1enp5Q01lYW5zOldwZSxmY206V3BlfSxRamU9X2Eoe2Rpc3RhbmNlOiJldWNsaWRlYW4iLGxpbmthZ2U6Im1pbiIsbW9kZToidGhyZXNob2xkIix0aHJlc2hvbGQ6MS8wLGFkZERlbmRyb2dyYW06ITEsZGVuZHJvZ3JhbURlcHRoOjAsYXR0cmlidXRlczpbXX0pLFpqZT17c2luZ2xlOiJtaW4iLGNvbXBsZXRlOiJtYXgifSxKamU9byhmdW5jdGlvbihlKXt2YXIgcj1RamUoZSksbj1aamVbci5saW5rYWdlXTtyZXR1cm4gbiE9bnVsbCYmKHIubGlua2FnZT1uKSxyfSwic2V0T3B0aW9ucyIpLFlwZT1vKGZ1bmN0aW9uKGUscixuLGksYSl7Zm9yKHZhciBzPTAsbD0xLzAsdSxoPWEuYXR0cmlidXRlcyxmPW8oZnVuY3Rpb24oQSxJKXtyZXR1cm4gVjYoYS5kaXN0YW5jZSxoLmxlbmd0aCxmdW5jdGlvbihEKXtyZXR1cm4gaFtEXShBKX0sZnVuY3Rpb24oRCl7cmV0dXJuIGhbRF0oSSl9LEEsSSl9LCJnZXREaXN0IiksZD0wO2Q8ZS5sZW5ndGg7ZCsrKXt2YXIgcD1lW2RdLmtleSxtPW5bcF1baVtwXV07bTxsJiYocz1wLGw9bSl9aWYoYS5tb2RlPT09InRocmVzaG9sZCImJmw+PWEudGhyZXNob2xkfHxhLm1vZGU9PT0iZGVuZHJvZ3JhbSImJmUubGVuZ3RoPT09MSlyZXR1cm4hMTt2YXIgZz1yW3NdLHk9cltpW3NdXSx2O2EubW9kZT09PSJkZW5kcm9ncmFtIj92PXtsZWZ0OmcscmlnaHQ6eSxrZXk6Zy5rZXl9OnY9e3ZhbHVlOmcudmFsdWUuY29uY2F0KHkudmFsdWUpLGtleTpnLmtleX0sZVtnLmluZGV4XT12LGUuc3BsaWNlKHkuaW5kZXgsMSkscltnLmtleV09djtmb3IodmFyIHg9MDt4PGUubGVuZ3RoO3grKyl7dmFyIGI9ZVt4XTtnLmtleT09PWIua2V5P3U9MS8wOmEubGlua2FnZT09PSJtaW4iPyh1PW5bZy5rZXldW2Iua2V5XSxuW2cua2V5XVtiLmtleV0+blt5LmtleV1bYi5rZXldJiYodT1uW3kua2V5XVtiLmtleV0pKTphLmxpbmthZ2U9PT0ibWF4Ij8odT1uW2cua2V5XVtiLmtleV0sbltnLmtleV1bYi5rZXldPG5beS5rZXldW2Iua2V5XSYmKHU9blt5LmtleV1bYi5rZXldKSk6YS5saW5rYWdlPT09Im1lYW4iP3U9KG5bZy5rZXldW2Iua2V5XSpnLnNpemUrblt5LmtleV1bYi5rZXldKnkuc2l6ZSkvKGcuc2l6ZSt5LnNpemUpOmEubW9kZT09PSJkZW5kcm9ncmFtIj91PWYoYi52YWx1ZSxnLnZhbHVlKTp1PWYoYi52YWx1ZVswXSxnLnZhbHVlWzBdKSxuW2cua2V5XVtiLmtleV09bltiLmtleV1bZy5rZXldPXV9Zm9yKHZhciB3PTA7dzxlLmxlbmd0aDt3Kyspe3ZhciBfPWVbd10ua2V5O2lmKGlbX109PT1nLmtleXx8aVtfXT09PXkua2V5KXtmb3IodmFyIFQ9XyxFPTA7RTxlLmxlbmd0aDtFKyspe3ZhciBMPWVbRV0ua2V5O25bX11bTF08bltfXVtUXSYmKFQ9TCl9aVtfXT1UfWVbd10uaW5kZXg9d31yZXR1cm4gZy5rZXk9eS5rZXk9Zy5pbmRleD15LmluZGV4PW51bGwsITB9LCJtZXJnZUNsb3Nlc3QiKSxsNj1vKGZ1bmN0aW9uIHQoZSxyLG4pe2UmJihlLnZhbHVlP3IucHVzaChlLnZhbHVlKTooZS5sZWZ0JiZ0KGUubGVmdCxyKSxlLnJpZ2h0JiZ0KGUucmlnaHQscikpKX0sImdldEFsbENoaWxkcmVuIiksZUtlPW8oZnVuY3Rpb24gdChlLHIpe2lmKCFlKXJldHVybiIiO2lmKGUubGVmdCYmZS5yaWdodCl7dmFyIG49dChlLmxlZnQsciksaT10KGUucmlnaHQsciksYT1yLmFkZCh7Z3JvdXA6Im5vZGVzIixkYXRhOntpZDpuKyIsIitpfX0pO3JldHVybiByLmFkZCh7Z3JvdXA6ImVkZ2VzIixkYXRhOntzb3VyY2U6bix0YXJnZXQ6YS5pZCgpfX0pLHIuYWRkKHtncm91cDoiZWRnZXMiLGRhdGE6e3NvdXJjZTppLHRhcmdldDphLmlkKCl9fSksYS5pZCgpfWVsc2UgaWYoZS52YWx1ZSlyZXR1cm4gZS52YWx1ZS5pZCgpfSwiYnVpbGREZW5kcm9ncmFtIiksdEtlPW8oZnVuY3Rpb24gdChlLHIsbil7aWYoIWUpcmV0dXJuW107dmFyIGk9W10sYT1bXSxzPVtdO3JldHVybiByPT09MD8oZS5sZWZ0JiZsNihlLmxlZnQsaSksZS5yaWdodCYmbDYoZS5yaWdodCxhKSxzPWkuY29uY2F0KGEpLFtuLmNvbGxlY3Rpb24ocyldKTpyPT09MT9lLnZhbHVlP1tuLmNvbGxlY3Rpb24oZS52YWx1ZSldOihlLmxlZnQmJmw2KGUubGVmdCxpKSxlLnJpZ2h0JiZsNihlLnJpZ2h0LGEpLFtuLmNvbGxlY3Rpb24oaSksbi5jb2xsZWN0aW9uKGEpXSk6ZS52YWx1ZT9bbi5jb2xsZWN0aW9uKGUudmFsdWUpXTooZS5sZWZ0JiYoaT10KGUubGVmdCxyLTEsbikpLGUucmlnaHQmJihhPXQoZS5yaWdodCxyLTEsbikpLGkuY29uY2F0KGEpKX0sImJ1aWxkQ2x1c3RlcnNGcm9tVHJlZSIpLHFwZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj10aGlzLmN5KCksbj10aGlzLm5vZGVzKCksaT1KamUoZSksYT1pLmF0dHJpYnV0ZXMscz1vKGZ1bmN0aW9uKHcsXyl7cmV0dXJuIFY2KGkuZGlzdGFuY2UsYS5sZW5ndGgsZnVuY3Rpb24oVCl7cmV0dXJuIGFbVF0odyl9LGZ1bmN0aW9uKFQpe3JldHVybiBhW1RdKF8pfSx3LF8pfSwiZ2V0RGlzdCIpLGw9W10sdT1bXSxoPVtdLGY9W10sZD0wO2Q8bi5sZW5ndGg7ZCsrKXt2YXIgcD17dmFsdWU6aS5tb2RlPT09ImRlbmRyb2dyYW0iP25bZF06W25bZF1dLGtleTpkLGluZGV4OmR9O2xbZF09cCxmW2RdPXAsdVtkXT1bXSxoW2RdPTB9Zm9yKHZhciBtPTA7bTxsLmxlbmd0aDttKyspZm9yKHZhciBnPTA7Zzw9bTtnKyspe3ZhciB5PXZvaWQgMDtpLm1vZGU9PT0iZGVuZHJvZ3JhbSI/eT1tPT09Zz8xLzA6cyhsW21dLnZhbHVlLGxbZ10udmFsdWUpOnk9bT09PWc/MS8wOnMobFttXS52YWx1ZVswXSxsW2ddLnZhbHVlWzBdKSx1W21dW2ddPXksdVtnXVttXT15LHk8dVttXVtoW21dXSYmKGhbbV09Zyl9Zm9yKHZhciB2PVlwZShsLGYsdSxoLGkpO3Y7KXY9WXBlKGwsZix1LGgsaSk7dmFyIHg7cmV0dXJuIGkubW9kZT09PSJkZW5kcm9ncmFtIj8oeD10S2UobFswXSxpLmRlbmRyb2dyYW1EZXB0aCxyKSxpLmFkZERlbmRyb2dyYW0mJmVLZShsWzBdLHIpKTooeD1uZXcgQXJyYXkobC5sZW5ndGgpLGwuZm9yRWFjaChmdW5jdGlvbihiLHcpe2Iua2V5PWIuaW5kZXg9bnVsbCx4W3ddPXIuY29sbGVjdGlvbihiLnZhbHVlKX0pKSx4fSwiaGllcmFyY2hpY2FsQ2x1c3RlcmluZyIpLHJLZT17aGllcmFyY2hpY2FsQ2x1c3RlcmluZzpxcGUsaGNhOnFwZX0sbktlPV9hKHtkaXN0YW5jZToiZXVjbGlkZWFuIixwcmVmZXJlbmNlOiJtZWRpYW4iLGRhbXBpbmc6LjgsbWF4SXRlcmF0aW9uczoxZTMsbWluSXRlcmF0aW9uczoxMDAsYXR0cmlidXRlczpbXX0pLGlLZT1vKGZ1bmN0aW9uKGUpe3ZhciByPWUuZGFtcGluZyxuPWUucHJlZmVyZW5jZTsuNTw9ciYmcjwxfHxkaSgiRGFtcGluZyBtdXN0IHJhbmdlIG9uIFswLjUsIDEpLiAgR290OiAiLmNvbmNhdChyKSk7dmFyIGk9WyJtZWRpYW4iLCJtZWFuIiwibWluIiwibWF4Il07cmV0dXJuIGkuc29tZShmdW5jdGlvbihhKXtyZXR1cm4gYT09PW59KXx8eHQobil8fGRpKCJQcmVmZXJlbmNlIG11c3QgYmUgb25lIG9mIFsiLmNvbmNhdChpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4iJyIuY29uY2F0KGEsIiciKX0pLmpvaW4oIiwgIiksIl0gb3IgYSBudW1iZXIuICBHb3Q6ICIpLmNvbmNhdChuKSksbktlKGUpfSwic2V0T3B0aW9ucyIpLGFLZT1vKGZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPW8oZnVuY3Rpb24obCx1KXtyZXR1cm4gaVt1XShsKX0sImF0dHIiKTtyZXR1cm4tVjYoZSxpLmxlbmd0aCxmdW5jdGlvbihzKXtyZXR1cm4gYShyLHMpfSxmdW5jdGlvbihzKXtyZXR1cm4gYShuLHMpfSxyLG4pfSwiZ2V0U2ltaWxhcml0eSIpLHNLZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49bnVsbDtyZXR1cm4gcj09PSJtZWRpYW4iP249aWplKGUpOnI9PT0ibWVhbiI/bj1uamUoZSk6cj09PSJtaW4iP249dGplKGUpOnI9PT0ibWF4Ij9uPXJqZShlKTpuPXIsbn0sImdldFByZWZlcmVuY2UiKSxvS2U9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPVtdLGE9MDthPGU7YSsrKXJbYSplK2FdK25bYSplK2FdPjAmJmkucHVzaChhKTtyZXR1cm4gaX0sImZpbmRFeGVtcGxhcnMiKSxYcGU9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPVtdLGE9MDthPGU7YSsrKXtmb3IodmFyIHM9LTEsbD0tMS8wLHU9MDt1PG4ubGVuZ3RoO3UrKyl7dmFyIGg9blt1XTtyW2EqZStoXT5sJiYocz1oLGw9clthKmUraF0pfXM+MCYmaS5wdXNoKHMpfWZvcih2YXIgZj0wO2Y8bi5sZW5ndGg7ZisrKWlbbltmXV09bltmXTtyZXR1cm4gaX0sImFzc2lnbkNsdXN0ZXJzIiksbEtlPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1YcGUoZSxyLG4pLGE9MDthPG4ubGVuZ3RoO2ErKyl7Zm9yKHZhciBzPVtdLGw9MDtsPGkubGVuZ3RoO2wrKylpW2xdPT09blthXSYmcy5wdXNoKGwpO2Zvcih2YXIgdT0tMSxoPS0xLzAsZj0wO2Y8cy5sZW5ndGg7ZisrKXtmb3IodmFyIGQ9MCxwPTA7cDxzLmxlbmd0aDtwKyspZCs9cltzW3BdKmUrc1tmXV07ZD5oJiYodT1mLGg9ZCl9blthXT1zW3VdfXJldHVybiBpPVhwZShlLHIsbiksaX0sImFzc2lnbiIpLGpwZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj10aGlzLmN5KCksbj10aGlzLm5vZGVzKCksaT1pS2UoZSksYT17fSxzPTA7czxuLmxlbmd0aDtzKyspYVtuW3NdLmlkKCldPXM7dmFyIGwsdSxoLGYsZCxwO2w9bi5sZW5ndGgsdT1sKmwsaD1uZXcgQXJyYXkodSk7Zm9yKHZhciBtPTA7bTx1O20rKyloW21dPS0xLzA7Zm9yKHZhciBnPTA7ZzxsO2crKylmb3IodmFyIHk9MDt5PGw7eSsrKWchPT15JiYoaFtnKmwreV09YUtlKGkuZGlzdGFuY2UsbltnXSxuW3ldLGkuYXR0cmlidXRlcykpO2Y9c0tlKGgsaS5wcmVmZXJlbmNlKTtmb3IodmFyIHY9MDt2PGw7disrKWhbdipsK3ZdPWY7ZD1uZXcgQXJyYXkodSk7Zm9yKHZhciB4PTA7eDx1O3grKylkW3hdPTA7cD1uZXcgQXJyYXkodSk7Zm9yKHZhciBiPTA7Yjx1O2IrKylwW2JdPTA7Zm9yKHZhciB3PW5ldyBBcnJheShsKSxfPW5ldyBBcnJheShsKSxUPW5ldyBBcnJheShsKSxFPTA7RTxsO0UrKyl3W0VdPTAsX1tFXT0wLFRbRV09MDtmb3IodmFyIEw9bmV3IEFycmF5KGwqaS5taW5JdGVyYXRpb25zKSxTPTA7UzxMLmxlbmd0aDtTKyspTFtTXT0wO3ZhciBBO2ZvcihBPTA7QTxpLm1heEl0ZXJhdGlvbnM7QSsrKXtmb3IodmFyIEk9MDtJPGw7SSsrKXtmb3IodmFyIEQ9LTEvMCxrPS0xLzAsUj0tMSxDPTAsTz0wO088bDtPKyspd1tPXT1kW0kqbCtPXSxDPXBbSSpsK09dK2hbSSpsK09dLEM+PUQ/KGs9RCxEPUMsUj1PKTpDPmsmJihrPUMpO2Zvcih2YXIgTj0wO048bDtOKyspZFtJKmwrTl09KDEtaS5kYW1waW5nKSooaFtJKmwrTl0tRCkraS5kYW1waW5nKndbTl07ZFtJKmwrUl09KDEtaS5kYW1waW5nKSooaFtJKmwrUl0taykraS5kYW1waW5nKndbUl19Zm9yKHZhciBQPTA7UDxsO1ArKyl7Zm9yKHZhciBGPTAsQj0wO0I8bDtCKyspd1tCXT1wW0IqbCtQXSxfW0JdPU1hdGgubWF4KDAsZFtCKmwrUF0pLEYrPV9bQl07Ri09X1tQXSxfW1BdPWRbUCpsK1BdLEYrPV9bUF07Zm9yKHZhciBHPTA7RzxsO0crKylwW0cqbCtQXT0oMS1pLmRhbXBpbmcpKk1hdGgubWluKDAsRi1fW0ddKStpLmRhbXBpbmcqd1tHXTtwW1AqbCtQXT0oMS1pLmRhbXBpbmcpKihGLV9bUF0pK2kuZGFtcGluZyp3W1BdfWZvcih2YXIgej0wLFc9MDtXPGw7VysrKXt2YXIgWj1wW1cqbCtXXStkW1cqbCtXXT4wPzE6MDtMW0ElaS5taW5JdGVyYXRpb25zKmwrV109Wix6Kz1afWlmKHo+MCYmKEE+PWkubWluSXRlcmF0aW9ucy0xfHxBPT1pLm1heEl0ZXJhdGlvbnMtMSkpe2Zvcih2YXIgaj0wLG9lPTA7b2U8bDtvZSsrKXtUW29lXT0wO2Zvcih2YXIgSz0wO0s8aS5taW5JdGVyYXRpb25zO0srKylUW29lXSs9TFtLKmwrb2VdOyhUW29lXT09PTB8fFRbb2VdPT09aS5taW5JdGVyYXRpb25zKSYmaisrfWlmKGo9PT1sKWJyZWFrfX1mb3IodmFyIGVlPW9LZShsLGQscCksSj1sS2UobCxoLGVlKSxIPXt9LHE9MDtxPGVlLmxlbmd0aDtxKyspSFtlZVtxXV09W107Zm9yKHZhciBRPTA7UTxuLmxlbmd0aDtRKyspe3ZhciBhZT1hW25bUV0uaWQoKV0sdWU9SlthZV07dWUhPW51bGwmJkhbdWVdLnB1c2gobltRXSl9Zm9yKHZhciBjZT1uZXcgQXJyYXkoZWUubGVuZ3RoKSx0ZT0wO3RlPGVlLmxlbmd0aDt0ZSsrKWNlW3RlXT1yLmNvbGxlY3Rpb24oSFtlZVt0ZV1dKTtyZXR1cm4gY2V9LCJhZmZpbml0eVByb3BhZ2F0aW9uIiksY0tlPXthZmZpbml0eVByb3BhZ2F0aW9uOmpwZSxhcDpqcGV9LHVLZT1fYSh7cm9vdDp2b2lkIDAsZGlyZWN0ZWQ6ITF9KSxoS2U9e2hpZXJob2x6ZXI6byhmdW5jdGlvbihlKXtpZighVXIoZSkpe3ZhciByPWFyZ3VtZW50cztlPXtyb290OnJbMF0sZGlyZWN0ZWQ6clsxXX19dmFyIG49dUtlKGUpLGk9bi5yb290LGE9bi5kaXJlY3RlZCxzPXRoaXMsbD0hMSx1LGgsZjtpJiYoZj1adChpKT90aGlzLmZpbHRlcihpKVswXS5pZCgpOmlbMF0uaWQoKSk7dmFyIGQ9e30scD17fTthP3MuZm9yRWFjaChmdW5jdGlvbihiKXt2YXIgdz1iLmlkKCk7aWYoYi5pc05vZGUoKSl7dmFyIF89Yi5pbmRlZ3JlZSghMCksVD1iLm91dGRlZ3JlZSghMCksRT1fLVQsTD1ULV87RT09MT91P2w9ITA6dT13Okw9PTE/aD9sPSEwOmg9dzooTD4xfHxFPjEpJiYobD0hMCksZFt3XT1bXSxiLm91dGdvZXJzKCkuZm9yRWFjaChmdW5jdGlvbihTKXtTLmlzRWRnZSgpJiZkW3ddLnB1c2goUy5pZCgpKX0pfWVsc2UgcFt3XT1bdm9pZCAwLGIudGFyZ2V0KCkuaWQoKV19KTpzLmZvckVhY2goZnVuY3Rpb24oYil7dmFyIHc9Yi5pZCgpO2lmKGIuaXNOb2RlKCkpe3ZhciBfPWIuZGVncmVlKCEwKTtfJTImJih1P2g/bD0hMDpoPXc6dT13KSxkW3ddPVtdLGIuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKFQpe3JldHVybiBkW3ddLnB1c2goVC5pZCgpKX0pfWVsc2UgcFt3XT1bYi5zb3VyY2UoKS5pZCgpLGIudGFyZ2V0KCkuaWQoKV19KTt2YXIgbT17Zm91bmQ6ITEsdHJhaWw6dm9pZCAwfTtpZihsKXJldHVybiBtO2lmKGgmJnUpaWYoYSl7aWYoZiYmaCE9ZilyZXR1cm4gbTtmPWh9ZWxzZXtpZihmJiZoIT1mJiZ1IT1mKXJldHVybiBtO2Z8fChmPWgpfWVsc2UgZnx8KGY9c1swXS5pZCgpKTt2YXIgZz1vKGZ1bmN0aW9uKHcpe2Zvcih2YXIgXz13LFQ9W3ddLEUsTCxTO2RbX10ubGVuZ3RoOylFPWRbX10uc2hpZnQoKSxMPXBbRV1bMF0sUz1wW0VdWzFdLF8hPVM/KGRbU109ZFtTXS5maWx0ZXIoZnVuY3Rpb24oQSl7cmV0dXJuIEEhPUV9KSxfPVMpOiFhJiZfIT1MJiYoZFtMXT1kW0xdLmZpbHRlcihmdW5jdGlvbihBKXtyZXR1cm4gQSE9RX0pLF89TCksVC51bnNoaWZ0KEUpLFQudW5zaGlmdChfKTtyZXR1cm4gVH0sIndhbGsiKSx5PVtdLHY9W107Zm9yKHY9ZyhmKTt2Lmxlbmd0aCE9MTspZFt2WzBdXS5sZW5ndGg9PTA/KHkudW5zaGlmdChzLmdldEVsZW1lbnRCeUlkKHYuc2hpZnQoKSkpLHkudW5zaGlmdChzLmdldEVsZW1lbnRCeUlkKHYuc2hpZnQoKSkpKTp2PWcodi5zaGlmdCgpKS5jb25jYXQodik7eS51bnNoaWZ0KHMuZ2V0RWxlbWVudEJ5SWQodi5zaGlmdCgpKSk7Zm9yKHZhciB4IGluIGQpaWYoZFt4XS5sZW5ndGgpcmV0dXJuIG07cmV0dXJuIG0uZm91bmQ9ITAsbS50cmFpbD10aGlzLnNwYXduKHksITApLG19LCJoaWVyaG9semVyIil9LGM2PW8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9e30sbj0wLGk9MCxhPVtdLHM9W10sbD17fSx1PW8oZnVuY3Rpb24ocCxtKXtmb3IodmFyIGc9cy5sZW5ndGgtMSx5PVtdLHY9ZS5zcGF3bigpO3NbZ10ueCE9cHx8c1tnXS55IT1tOyl5LnB1c2gocy5wb3AoKS5lZGdlKSxnLS07eS5wdXNoKHMucG9wKCkuZWRnZSkseS5mb3JFYWNoKGZ1bmN0aW9uKHgpe3ZhciBiPXguY29ubmVjdGVkTm9kZXMoKS5pbnRlcnNlY3Rpb24oZSk7di5tZXJnZSh4KSxiLmZvckVhY2goZnVuY3Rpb24odyl7dmFyIF89dy5pZCgpLFQ9dy5jb25uZWN0ZWRFZGdlcygpLmludGVyc2VjdGlvbihlKTt2Lm1lcmdlKHcpLHJbX10uY3V0VmVydGV4P3YubWVyZ2UoVC5maWx0ZXIoZnVuY3Rpb24oRSl7cmV0dXJuIEUuaXNMb29wKCl9KSk6di5tZXJnZShUKX0pfSksYS5wdXNoKHYpfSwiYnVpbGRDb21wb25lbnQiKSxoPW8oZnVuY3Rpb24gZChwLG0sZyl7cD09PWcmJihpKz0xKSxyW21dPXtpZDpuLGxvdzpuKyssY3V0VmVydGV4OiExfTt2YXIgeT1lLmdldEVsZW1lbnRCeUlkKG0pLmNvbm5lY3RlZEVkZ2VzKCkuaW50ZXJzZWN0aW9uKGUpO2lmKHkuc2l6ZSgpPT09MClhLnB1c2goZS5zcGF3bihlLmdldEVsZW1lbnRCeUlkKG0pKSk7ZWxzZXt2YXIgdix4LGIsdzt5LmZvckVhY2goZnVuY3Rpb24oXyl7dj1fLnNvdXJjZSgpLmlkKCkseD1fLnRhcmdldCgpLmlkKCksYj12PT09bT94OnYsYiE9PWcmJih3PV8uaWQoKSxsW3ddfHwobFt3XT0hMCxzLnB1c2goe3g6bSx5OmIsZWRnZTpffSkpLGIgaW4gcj9yW21dLmxvdz1NYXRoLm1pbihyW21dLmxvdyxyW2JdLmlkKTooZChwLGIsbSksclttXS5sb3c9TWF0aC5taW4oclttXS5sb3cscltiXS5sb3cpLHJbbV0uaWQ8PXJbYl0ubG93JiYoclttXS5jdXRWZXJ0ZXg9ITAsdShtLGIpKSkpfSl9fSwiYmljb25uZWN0ZWRTZWFyY2giKTtlLmZvckVhY2goZnVuY3Rpb24oZCl7aWYoZC5pc05vZGUoKSl7dmFyIHA9ZC5pZCgpO3AgaW4gcnx8KGk9MCxoKHAscCkscltwXS5jdXRWZXJ0ZXg9aT4xKX19KTt2YXIgZj1PYmplY3Qua2V5cyhyKS5maWx0ZXIoZnVuY3Rpb24oZCl7cmV0dXJuIHJbZF0uY3V0VmVydGV4fSkubWFwKGZ1bmN0aW9uKGQpe3JldHVybiBlLmdldEVsZW1lbnRCeUlkKGQpfSk7cmV0dXJue2N1dDplLnNwYXduKGYpLGNvbXBvbmVudHM6YX19LCJob3Bjcm9mdFRhcmphbkJpY29ubmVjdGVkIiksZktlPXtob3Bjcm9mdFRhcmphbkJpY29ubmVjdGVkOmM2LGh0YmM6YzYsaHRiOmM2LGhvcGNyb2Z0VGFyamFuQmljb25uZWN0ZWRDb21wb25lbnRzOmM2fSx1Nj1vKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPXt9LG49MCxpPVtdLGE9W10scz1lLnNwYXduKGUpLGw9byhmdW5jdGlvbiB1KGgpe2EucHVzaChoKSxyW2hdPXtpbmRleDpuLGxvdzpuKyssZXhwbG9yZWQ6ITF9O3ZhciBmPWUuZ2V0RWxlbWVudEJ5SWQoaCkuY29ubmVjdGVkRWRnZXMoKS5pbnRlcnNlY3Rpb24oZSk7aWYoZi5mb3JFYWNoKGZ1bmN0aW9uKHkpe3ZhciB2PXkudGFyZ2V0KCkuaWQoKTt2IT09aCYmKHYgaW4gcnx8dSh2KSxyW3ZdLmV4cGxvcmVkfHwocltoXS5sb3c9TWF0aC5taW4ocltoXS5sb3csclt2XS5sb3cpKSl9KSxyW2hdLmluZGV4PT09cltoXS5sb3cpe2Zvcih2YXIgZD1lLnNwYXduKCk7Oyl7dmFyIHA9YS5wb3AoKTtpZihkLm1lcmdlKGUuZ2V0RWxlbWVudEJ5SWQocCkpLHJbcF0ubG93PXJbaF0uaW5kZXgscltwXS5leHBsb3JlZD0hMCxwPT09aClicmVha312YXIgbT1kLmVkZ2VzV2l0aChkKSxnPWQubWVyZ2UobSk7aS5wdXNoKGcpLHM9cy5kaWZmZXJlbmNlKGcpfX0sInN0cm9uZ2x5Q29ubmVjdGVkU2VhcmNoIik7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbih1KXtpZih1LmlzTm9kZSgpKXt2YXIgaD11LmlkKCk7aCBpbiByfHxsKGgpfX0pLHtjdXQ6cyxjb21wb25lbnRzOml9fSwidGFyamFuU3Ryb25nbHlDb25uZWN0ZWQiKSxkS2U9e3RhcmphblN0cm9uZ2x5Q29ubmVjdGVkOnU2LHRzYzp1Nix0c2NjOnU2LHRhcmphblN0cm9uZ2x5Q29ubmVjdGVkQ29tcG9uZW50czp1Nn0sdmdlPXt9O1thYixVWGUsSFhlLFlYZSxYWGUsS1hlLEpYZSxFamUsdjEseDEsJFAsQmplLEtqZSxyS2UsY0tlLGhLZSxmS2UsZEtlXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lyKHZnZSx0KX0pO3hnZT0wLGJnZT0xLHdnZT0yLHNoPW8oZnVuY3Rpb24gdChlKXtpZighKHRoaXMgaW5zdGFuY2VvZiB0KSlyZXR1cm4gbmV3IHQoZSk7dGhpcy5pZD0iVGhlbmFibGUvMS4wLjciLHRoaXMuc3RhdGU9eGdlLHRoaXMuZnVsZmlsbFZhbHVlPXZvaWQgMCx0aGlzLnJlamVjdFJlYXNvbj12b2lkIDAsdGhpcy5vbkZ1bGZpbGxlZD1bXSx0aGlzLm9uUmVqZWN0ZWQ9W10sdGhpcy5wcm94eT17dGhlbjp0aGlzLnRoZW4uYmluZCh0aGlzKX0sdHlwZW9mIGU9PSJmdW5jdGlvbiImJmUuY2FsbCh0aGlzLHRoaXMuZnVsZmlsbC5iaW5kKHRoaXMpLHRoaXMucmVqZWN0LmJpbmQodGhpcykpfSwiYXBpIik7c2gucHJvdG90eXBlPXtmdWxmaWxsOm8oZnVuY3Rpb24oZSl7cmV0dXJuIEtwZSh0aGlzLGJnZSwiZnVsZmlsbFZhbHVlIixlKX0sImZ1bGZpbGwiKSxyZWplY3Q6byhmdW5jdGlvbihlKXtyZXR1cm4gS3BlKHRoaXMsd2dlLCJyZWplY3RSZWFzb24iLGUpfSwicmVqZWN0IiksdGhlbjpvKGZ1bmN0aW9uKGUscil7dmFyIG49dGhpcyxpPW5ldyBzaDtyZXR1cm4gbi5vbkZ1bGZpbGxlZC5wdXNoKFpwZShlLGksImZ1bGZpbGwiKSksbi5vblJlamVjdGVkLnB1c2goWnBlKHIsaSwicmVqZWN0IikpLFRnZShuKSxpLnByb3h5fSwidGhlbiIpfTtLcGU9byhmdW5jdGlvbihlLHIsbixpKXtyZXR1cm4gZS5zdGF0ZT09PXhnZSYmKGUuc3RhdGU9cixlW25dPWksVGdlKGUpKSxlfSwiZGVsaXZlciIpLFRnZT1vKGZ1bmN0aW9uKGUpe2Uuc3RhdGU9PT1iZ2U/UXBlKGUsIm9uRnVsZmlsbGVkIixlLmZ1bGZpbGxWYWx1ZSk6ZS5zdGF0ZT09PXdnZSYmUXBlKGUsIm9uUmVqZWN0ZWQiLGUucmVqZWN0UmVhc29uKX0sImV4ZWN1dGUiKSxRcGU9byhmdW5jdGlvbihlLHIsbil7aWYoZVtyXS5sZW5ndGghPT0wKXt2YXIgaT1lW3JdO2Vbcl09W107dmFyIGE9byhmdW5jdGlvbigpe2Zvcih2YXIgbD0wO2w8aS5sZW5ndGg7bCsrKWlbbF0obil9LCJmdW5jIik7dHlwZW9mIHNldEltbWVkaWF0ZT09ImZ1bmN0aW9uIj9zZXRJbW1lZGlhdGUoYSk6c2V0VGltZW91dChhLDApfX0sImV4ZWN1dGVfaGFuZGxlcnMiKSxacGU9byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXJbbl0uY2FsbChyLGkpO2Vsc2V7dmFyIGE7dHJ5e2E9ZShpKX1jYXRjaChzKXtyLnJlamVjdChzKTtyZXR1cm59cEtlKHIsYSl9fX0sInJlc29sdmVyIikscEtlPW8oZnVuY3Rpb24gdChlLHIpe2lmKGU9PT1yfHxlLnByb3h5PT09cil7ZS5yZWplY3QobmV3IFR5cGVFcnJvcigiY2Fubm90IHJlc29sdmUgcHJvbWlzZSB3aXRoIGl0c2VsZiIpKTtyZXR1cm59dmFyIG47aWYoS2kocik9PT0ib2JqZWN0IiYmciE9PW51bGx8fHR5cGVvZiByPT0iZnVuY3Rpb24iKXRyeXtuPXIudGhlbn1jYXRjaChhKXtlLnJlamVjdChhKTtyZXR1cm59aWYodHlwZW9mIG49PSJmdW5jdGlvbiIpe3ZhciBpPSExO3RyeXtuLmNhbGwocixmdW5jdGlvbihhKXtpfHwoaT0hMCxhPT09cj9lLnJlamVjdChuZXcgVHlwZUVycm9yKCJjaXJjdWxhciB0aGVuYWJsZSBjaGFpbiIpKTp0KGUsYSkpfSxmdW5jdGlvbihhKXtpfHwoaT0hMCxlLnJlamVjdChhKSl9KX1jYXRjaChhKXtpfHxlLnJlamVjdChhKX1yZXR1cm59ZS5mdWxmaWxsKHIpfSwicmVzb2x2ZSIpO3NoLmFsbD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHNoKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPW5ldyBBcnJheSh0Lmxlbmd0aCksaT0wLGE9byhmdW5jdGlvbih1LGgpe25bdV09aCxpKyssaT09PXQubGVuZ3RoJiZlKG4pfSwiZnVsZmlsbCIpLHM9MDtzPHQubGVuZ3RoO3MrKykoZnVuY3Rpb24obCl7dmFyIHU9dFtsXSxoPXUhPW51bGwmJnUudGhlbiE9bnVsbDtpZihoKXUudGhlbihmdW5jdGlvbihkKXthKGwsZCl9LGZ1bmN0aW9uKGQpe3IoZCl9KTtlbHNle3ZhciBmPXU7YShsLGYpfX0pKHMpfSl9O3NoLnJlc29sdmU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBzaChmdW5jdGlvbihlLHIpe2UodCl9KX07c2gucmVqZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgc2goZnVuY3Rpb24oZSxyKXtyKHQpfSl9O0MxPXR5cGVvZiBQcm9taXNlPCJ1Ij9Qcm9taXNlOnNoLFZQPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPW5CKGUpLGE9IWkscz10aGlzLl9wcml2YXRlPWlyKHtkdXJhdGlvbjoxZTN9LHIsbik7aWYocy50YXJnZXQ9ZSxzLnN0eWxlPXMuc3R5bGV8fHMuY3NzLHMuc3RhcnRlZD0hMSxzLnBsYXlpbmc9ITEscy5ob29rZWQ9ITEscy5hcHBseWluZz0hMSxzLnByb2dyZXNzPTAscy5jb21wbGV0ZXM9W10scy5mcmFtZXM9W10scy5jb21wbGV0ZSYmbmkocy5jb21wbGV0ZSkmJnMuY29tcGxldGVzLnB1c2gocy5jb21wbGV0ZSksYSl7dmFyIGw9ZS5wb3NpdGlvbigpO3Muc3RhcnRQb3NpdGlvbj1zLnN0YXJ0UG9zaXRpb258fHt4OmwueCx5OmwueX0scy5zdGFydFN0eWxlPXMuc3RhcnRTdHlsZXx8ZS5jeSgpLnN0eWxlKCkuZ2V0QW5pbWF0aW9uU3RhcnRTdHlsZShlLHMuc3R5bGUpfWlmKGkpe3ZhciB1PWUucGFuKCk7cy5zdGFydFBhbj17eDp1LngseTp1Lnl9LHMuc3RhcnRab29tPWUuem9vbSgpfXRoaXMubGVuZ3RoPTEsdGhpc1swXT10aGlzfSwiQW5pbWF0aW9uIiksWjA9VlAucHJvdG90eXBlO2lyKFowLHtpbnN0YW5jZVN0cmluZzpvKGZ1bmN0aW9uKCl7cmV0dXJuImFuaW1hdGlvbiJ9LCJpbnN0YW5jZVN0cmluZyIpLGhvb2s6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByaXZhdGU7aWYoIWUuaG9va2VkKXt2YXIgcixuPWUudGFyZ2V0Ll9wcml2YXRlLmFuaW1hdGlvbjtlLnF1ZXVlP3I9bi5xdWV1ZTpyPW4uY3VycmVudCxyLnB1c2godGhpcyksd28oZS50YXJnZXQpJiZlLnRhcmdldC5jeSgpLmFkZFRvQW5pbWF0aW9uUG9vbChlLnRhcmdldCksZS5ob29rZWQ9ITB9cmV0dXJuIHRoaXN9LCJob29rIikscGxheTpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZS5wcm9ncmVzcz09PTEmJihlLnByb2dyZXNzPTApLGUucGxheWluZz0hMCxlLnN0YXJ0ZWQ9ITEsZS5zdG9wcGVkPSExLHRoaXMuaG9vaygpLHRoaXN9LCJwbGF5IikscGxheWluZzpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUucGxheWluZ30sInBsYXlpbmciKSxhcHBseTpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZS5hcHBseWluZz0hMCxlLnN0YXJ0ZWQ9ITEsZS5zdG9wcGVkPSExLHRoaXMuaG9vaygpLHRoaXN9LCJhcHBseSIpLGFwcGx5aW5nOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5hcHBseWluZ30sImFwcGx5aW5nIikscGF1c2U6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByaXZhdGU7cmV0dXJuIGUucGxheWluZz0hMSxlLnN0YXJ0ZWQ9ITEsdGhpc30sInBhdXNlIiksc3RvcDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZS5wbGF5aW5nPSExLGUuc3RhcnRlZD0hMSxlLnN0b3BwZWQ9ITAsdGhpc30sInN0b3AiKSxyZXdpbmQ6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb2dyZXNzKDApfSwicmV3aW5kIiksZmFzdGZvcndhcmQ6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb2dyZXNzKDEpfSwiZmFzdGZvcndhcmQiKSx0aW1lOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZT09PXZvaWQgMD9yLnByb2dyZXNzKnIuZHVyYXRpb246dGhpcy5wcm9ncmVzcyhlL3IuZHVyYXRpb24pfSwidGltZSIpLHByb2dyZXNzOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZSxuPXIucGxheWluZztyZXR1cm4gZT09PXZvaWQgMD9yLnByb2dyZXNzOihuJiZ0aGlzLnBhdXNlKCksci5wcm9ncmVzcz1lLHIuc3RhcnRlZD0hMSxuJiZ0aGlzLnBsYXkoKSx0aGlzKX0sInByb2dyZXNzIiksY29tcGxldGVkOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5wcm9ncmVzcz09PTF9LCJjb21wbGV0ZWQiKSxyZXZlcnNlOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wcml2YXRlLHI9ZS5wbGF5aW5nO3ImJnRoaXMucGF1c2UoKSxlLnByb2dyZXNzPTEtZS5wcm9ncmVzcyxlLnN0YXJ0ZWQ9ITE7dmFyIG49byhmdW5jdGlvbihoLGYpe3ZhciBkPWVbaF07ZCE9bnVsbCYmKGVbaF09ZVtmXSxlW2ZdPWQpfSwic3dhcCIpO2lmKG4oInpvb20iLCJzdGFydFpvb20iKSxuKCJwYW4iLCJzdGFydFBhbiIpLG4oInBvc2l0aW9uIiwic3RhcnRQb3NpdGlvbiIpLGUuc3R5bGUpZm9yKHZhciBpPTA7aTxlLnN0eWxlLmxlbmd0aDtpKyspe3ZhciBhPWUuc3R5bGVbaV0scz1hLm5hbWUsbD1lLnN0YXJ0U3R5bGVbc107ZS5zdGFydFN0eWxlW3NdPWEsZS5zdHlsZVtpXT1sfXJldHVybiByJiZ0aGlzLnBsYXkoKSx0aGlzfSwicmV2ZXJzZSIpLHByb21pc2U6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlLG47c3dpdGNoKGUpe2Nhc2UiZnJhbWUiOm49ci5mcmFtZXM7YnJlYWs7ZGVmYXVsdDpjYXNlImNvbXBsZXRlIjpjYXNlImNvbXBsZXRlZCI6bj1yLmNvbXBsZXRlc31yZXR1cm4gbmV3IEMxKGZ1bmN0aW9uKGksYSl7bi5wdXNoKGZ1bmN0aW9uKCl7aSgpfSl9KX0sInByb21pc2UiKX0pO1owLmNvbXBsZXRlPVowLmNvbXBsZXRlZDtaMC5ydW49WjAucGxheTtaMC5ydW5uaW5nPVowLnBsYXlpbmc7bUtlPXthbmltYXRlZDpvKGZ1bmN0aW9uKCl7cmV0dXJuIG8oZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49ci5sZW5ndGghPT12b2lkIDAsaT1uP3I6W3JdLGE9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcztpZighYS5zdHlsZUVuYWJsZWQoKSlyZXR1cm4hMTt2YXIgcz1pWzBdO2lmKHMpcmV0dXJuIHMuX3ByaXZhdGUuYW5pbWF0aW9uLmN1cnJlbnQubGVuZ3RoPjB9LCJhbmltYXRlZEltcGwiKX0sImFuaW1hdGVkIiksY2xlYXJRdWV1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIG8oZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49ci5sZW5ndGghPT12b2lkIDAsaT1uP3I6W3JdLGE9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcztpZighYS5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpcztmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGw9aVtzXTtsLl9wcml2YXRlLmFuaW1hdGlvbi5xdWV1ZT1bXX1yZXR1cm4gdGhpc30sImNsZWFyUXVldWVJbXBsIil9LCJjbGVhclF1ZXVlIiksZGVsYXk6byhmdW5jdGlvbigpe3JldHVybiBvKGZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcztyZXR1cm4gaS5zdHlsZUVuYWJsZWQoKT90aGlzLmFuaW1hdGUoe2RlbGF5OnIsZHVyYXRpb246cixjb21wbGV0ZTpufSk6dGhpc30sImRlbGF5SW1wbCIpfSwiZGVsYXkiKSxkZWxheUFuaW1hdGlvbjpvKGZ1bmN0aW9uKCl7cmV0dXJuIG8oZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl9wcml2YXRlLmN5fHx0aGlzO3JldHVybiBpLnN0eWxlRW5hYmxlZCgpP3RoaXMuYW5pbWF0aW9uKHtkZWxheTpyLGR1cmF0aW9uOnIsY29tcGxldGU6bn0pOnRoaXN9LCJkZWxheUFuaW1hdGlvbkltcGwiKX0sImRlbGF5QW5pbWF0aW9uIiksYW5pbWF0aW9uOm8oZnVuY3Rpb24oKXtyZXR1cm4gbyhmdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsYT1pLmxlbmd0aCE9PXZvaWQgMCxzPWE/aTpbaV0sbD10aGlzLl9wcml2YXRlLmN5fHx0aGlzLHU9IWEsaD0hdTtpZighbC5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpczt2YXIgZj1sLnN0eWxlKCk7cj1pcih7fSxyLG4pO3ZhciBkPU9iamVjdC5rZXlzKHIpLmxlbmd0aD09PTA7aWYoZClyZXR1cm4gbmV3IFZQKHNbMF0scik7c3dpdGNoKHIuZHVyYXRpb249PT12b2lkIDAmJihyLmR1cmF0aW9uPTQwMCksci5kdXJhdGlvbil7Y2FzZSJzbG93IjpyLmR1cmF0aW9uPTYwMDticmVhaztjYXNlImZhc3QiOnIuZHVyYXRpb249MjAwO2JyZWFrfWlmKGgmJihyLnN0eWxlPWYuZ2V0UHJvcHNMaXN0KHIuc3R5bGV8fHIuY3NzKSxyLmNzcz12b2lkIDApLGgmJnIucmVuZGVyZWRQb3NpdGlvbiE9bnVsbCl7dmFyIHA9ci5yZW5kZXJlZFBvc2l0aW9uLG09bC5wYW4oKSxnPWwuem9vbSgpO3IucG9zaXRpb249b2dlKHAsZyxtKX1pZih1JiZyLnBhbkJ5IT1udWxsKXt2YXIgeT1yLnBhbkJ5LHY9bC5wYW4oKTtyLnBhbj17eDp2LngreS54LHk6di55K3kueX19dmFyIHg9ci5jZW50ZXJ8fHIuY2VudHJlO2lmKHUmJnghPW51bGwpe3ZhciBiPWwuZ2V0Q2VudGVyUGFuKHguZWxlcyxyLnpvb20pO2IhPW51bGwmJihyLnBhbj1iKX1pZih1JiZyLmZpdCE9bnVsbCl7dmFyIHc9ci5maXQsXz1sLmdldEZpdFZpZXdwb3J0KHcuZWxlc3x8dy5ib3VuZGluZ0JveCx3LnBhZGRpbmcpO18hPW51bGwmJihyLnBhbj1fLnBhbixyLnpvb209Xy56b29tKX1pZih1JiZVcihyLnpvb20pKXt2YXIgVD1sLmdldFpvb21lZFZpZXdwb3J0KHIuem9vbSk7VCE9bnVsbD8oVC56b29tZWQmJihyLnpvb209VC56b29tKSxULnBhbm5lZCYmKHIucGFuPVQucGFuKSk6ci56b29tPW51bGx9cmV0dXJuIG5ldyBWUChzWzBdLHIpfSwiYW5pbWF0aW9uSW1wbCIpfSwiYW5pbWF0aW9uIiksYW5pbWF0ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIG8oZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLGE9aS5sZW5ndGghPT12b2lkIDAscz1hP2k6W2ldLGw9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcztpZighbC5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpcztuJiYocj1pcih7fSxyLG4pKTtmb3IodmFyIHU9MDt1PHMubGVuZ3RoO3UrKyl7dmFyIGg9c1t1XSxmPWguYW5pbWF0ZWQoKSYmKHIucXVldWU9PT12b2lkIDB8fHIucXVldWUpLGQ9aC5hbmltYXRpb24ocixmP3txdWV1ZTohMH06dm9pZCAwKTtkLnBsYXkoKX1yZXR1cm4gdGhpc30sImFuaW1hdGVJbXBsIil9LCJhbmltYXRlIiksc3RvcDpvKGZ1bmN0aW9uKCl7cmV0dXJuIG8oZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLGE9aS5sZW5ndGghPT12b2lkIDAscz1hP2k6W2ldLGw9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcztpZighbC5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpcztmb3IodmFyIHU9MDt1PHMubGVuZ3RoO3UrKyl7Zm9yKHZhciBoPXNbdV0sZj1oLl9wcml2YXRlLGQ9Zi5hbmltYXRpb24uY3VycmVudCxwPTA7cDxkLmxlbmd0aDtwKyspe3ZhciBtPWRbcF0sZz1tLl9wcml2YXRlO24mJihnLmR1cmF0aW9uPTApfXImJihmLmFuaW1hdGlvbi5xdWV1ZT1bXSksbnx8KGYuYW5pbWF0aW9uLmN1cnJlbnQ9W10pfXJldHVybiBsLm5vdGlmeSgiZHJhdyIpLHRoaXN9LCJzdG9wSW1wbCIpfSwic3RvcCIpfSxnS2U9QXJyYXkuaXNBcnJheSxVNj1nS2UseUtlPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLHZLZT0vXlx3KiQvO28oeEtlLCJpc0tleSIpO2JLZT14S2Usd0tlPSJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIixUS2U9IltvYmplY3QgRnVuY3Rpb25dIixrS2U9IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIixFS2U9IltvYmplY3QgUHJveHldIjtvKFNLZSwiaXNGdW5jdGlvbiIpO0NLZT1TS2UsQUtlPUY2WyJfX2NvcmUtanNfc2hhcmVkX18iXSxOUD1BS2UsSnBlPWZ1bmN0aW9uKCl7dmFyIHQ9L1teLl0rJC8uZXhlYyhOUCYmTlAua2V5cyYmTlAua2V5cy5JRV9QUk9UT3x8IiIpO3JldHVybiB0PyJTeW1ib2woc3JjKV8xLiIrdDoiIn0oKTtvKF9LZSwiaXNNYXNrZWQiKTtMS2U9X0tlLERLZT1GdW5jdGlvbi5wcm90b3R5cGUsTktlPURLZS50b1N0cmluZztvKFJLZSwidG9Tb3VyY2UiKTtNS2U9UktlLElLZT0vW1xcXiQuKis/KClbXF17fXxdL2csT0tlPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLFBLZT1GdW5jdGlvbi5wcm90b3R5cGUsQktlPU9iamVjdC5wcm90b3R5cGUsRktlPVBLZS50b1N0cmluZyx6S2U9QktlLmhhc093blByb3BlcnR5LEdLZT1SZWdFeHAoIl4iK0ZLZS5jYWxsKHpLZSkucmVwbGFjZShJS2UsIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIik7bygkS2UsImJhc2VJc05hdGl2ZSIpO1ZLZT0kS2U7byhVS2UsImdldFZhbHVlJDEiKTtIS2U9VUtlO28oV0tlLCJnZXROYXRpdmUiKTtmQj1XS2UsWUtlPWZCKE9iamVjdCwiY3JlYXRlIiksbGI9WUtlO28ocUtlLCJoYXNoQ2xlYXIiKTtYS2U9cUtlO28oaktlLCJoYXNoRGVsZXRlIik7S0tlPWpLZSxRS2U9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLFpLZT1PYmplY3QucHJvdG90eXBlLEpLZT1aS2UuaGFzT3duUHJvcGVydHk7byhlUWUsImhhc2hHZXQiKTt0UWU9ZVFlLHJRZT1PYmplY3QucHJvdG90eXBlLG5RZT1yUWUuaGFzT3duUHJvcGVydHk7byhpUWUsImhhc2hIYXMiKTthUWU9aVFlLHNRZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7byhvUWUsImhhc2hTZXQiKTtsUWU9b1FlO28oQTEsIkhhc2giKTtBMS5wcm90b3R5cGUuY2xlYXI9WEtlO0ExLnByb3RvdHlwZS5kZWxldGU9S0tlO0ExLnByb3RvdHlwZS5nZXQ9dFFlO0ExLnByb3RvdHlwZS5oYXM9YVFlO0ExLnByb3RvdHlwZS5zZXQ9bFFlO2VtZT1BMTtvKGNRZSwibGlzdENhY2hlQ2xlYXIiKTt1UWU9Y1FlO28oaFFlLCJlcSIpO2tnZT1oUWU7byhmUWUsImFzc29jSW5kZXhPZiIpO0g2PWZRZSxkUWU9QXJyYXkucHJvdG90eXBlLHBRZT1kUWUuc3BsaWNlO28obVFlLCJsaXN0Q2FjaGVEZWxldGUiKTtnUWU9bVFlO28oeVFlLCJsaXN0Q2FjaGVHZXQiKTt2UWU9eVFlO28oeFFlLCJsaXN0Q2FjaGVIYXMiKTtiUWU9eFFlO28od1FlLCJsaXN0Q2FjaGVTZXQiKTtUUWU9d1FlO28oXzEsIkxpc3RDYWNoZSIpO18xLnByb3RvdHlwZS5jbGVhcj11UWU7XzEucHJvdG90eXBlLmRlbGV0ZT1nUWU7XzEucHJvdG90eXBlLmdldD12UWU7XzEucHJvdG90eXBlLmhhcz1iUWU7XzEucHJvdG90eXBlLnNldD1UUWU7a1FlPV8xLEVRZT1mQihGNiwiTWFwIiksU1FlPUVRZTtvKENRZSwibWFwQ2FjaGVDbGVhciIpO0FRZT1DUWU7byhfUWUsImlzS2V5YWJsZSIpO0xRZT1fUWU7byhEUWUsImdldE1hcERhdGEiKTtXNj1EUWU7byhOUWUsIm1hcENhY2hlRGVsZXRlIik7UlFlPU5RZTtvKE1RZSwibWFwQ2FjaGVHZXQiKTtJUWU9TVFlO28oT1FlLCJtYXBDYWNoZUhhcyIpO1BRZT1PUWU7byhCUWUsIm1hcENhY2hlU2V0Iik7RlFlPUJRZTtvKEwxLCJNYXBDYWNoZSIpO0wxLnByb3RvdHlwZS5jbGVhcj1BUWU7TDEucHJvdG90eXBlLmRlbGV0ZT1SUWU7TDEucHJvdG90eXBlLmdldD1JUWU7TDEucHJvdG90eXBlLmhhcz1QUWU7TDEucHJvdG90eXBlLnNldD1GUWU7RWdlPUwxLHpRZT0iRXhwZWN0ZWQgYSBmdW5jdGlvbiI7byhkQiwibWVtb2l6ZSIpO2RCLkNhY2hlPUVnZTtHUWU9ZEIsJFFlPTUwMDtvKFZRZSwibWVtb2l6ZUNhcHBlZCIpO1VRZT1WUWUsSFFlPS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLFdRZT0vXFwoXFwpPy9nLFlRZT1VUWUoZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIHQuY2hhckNvZGVBdCgwKT09PTQ2JiZlLnB1c2goIiIpLHQucmVwbGFjZShIUWUsZnVuY3Rpb24ocixuLGksYSl7ZS5wdXNoKGk/YS5yZXBsYWNlKFdRZSwiJDEiKTpufHxyKX0pLGV9KSxTZ2U9WVFlO28ocVFlLCJhcnJheU1hcCIpO0NnZT1xUWUsWFFlPTEvMCx0bWU9dzE/dzEucHJvdG90eXBlOnZvaWQgMCxybWU9dG1lP3RtZS50b1N0cmluZzp2b2lkIDA7byhBZ2UsImJhc2VUb1N0cmluZyIpO2pRZT1BZ2U7byhLUWUsInRvU3RyaW5nJDEiKTtfZ2U9S1FlO28oUVFlLCJjYXN0UGF0aCIpO0xnZT1RUWUsWlFlPTEvMDtvKEpRZSwidG9LZXkiKTtwQj1KUWU7byhlWmUsImJhc2VHZXQiKTt0WmU9ZVplO28oclplLCJnZXQiKTtuWmU9clplLGlaZT1mdW5jdGlvbigpe3RyeXt2YXIgdD1mQihPYmplY3QsImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIHQoe30sIiIse30pLHR9Y2F0Y2h7fX0oKSxubWU9aVplO28oYVplLCJiYXNlQXNzaWduVmFsdWUiKTtzWmU9YVplLG9aZT1PYmplY3QucHJvdG90eXBlLGxaZT1vWmUuaGFzT3duUHJvcGVydHk7byhjWmUsImFzc2lnblZhbHVlIik7dVplPWNaZSxoWmU9OTAwNzE5OTI1NDc0MDk5MSxmWmU9L14oPzowfFsxLTldXGQqKSQvO28oZFplLCJpc0luZGV4Iik7cFplPWRaZTtvKG1aZSwiYmFzZVNldCIpO2daZT1tWmU7byh5WmUsInNldCIpO3ZaZT15WmU7byh4WmUsImNvcHlBcnJheSIpO2JaZT14WmU7byh3WmUsInRvUGF0aCIpO1RaZT13WmUsa1plPXtkYXRhOm8oZnVuY3Rpb24oZSl7dmFyIHI9e2ZpZWxkOiJkYXRhIixiaW5kaW5nRXZlbnQ6ImRhdGEiLGFsbG93QmluZGluZzohMSxhbGxvd1NldHRpbmc6ITEsYWxsb3dHZXR0aW5nOiExLHNldHRpbmdFdmVudDoiZGF0YSIsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITEsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsaW1tdXRhYmxlS2V5czp7fSx1cGRhdGVTdHlsZTohMSxiZWZvcmVHZXQ6byhmdW5jdGlvbihpKXt9LCJiZWZvcmVHZXQiKSxiZWZvcmVTZXQ6byhmdW5jdGlvbihpLGEpe30sImJlZm9yZVNldCIpLG9uU2V0Om8oZnVuY3Rpb24oaSl7fSwib25TZXQiKSxjYW5TZXQ6byhmdW5jdGlvbihpKXtyZXR1cm4hMH0sImNhblNldCIpfTtyZXR1cm4gZT1pcih7fSxyLGUpLG8oZnVuY3Rpb24oaSxhKXt2YXIgcz1lLGw9dGhpcyx1PWwubGVuZ3RoIT09dm9pZCAwLGg9dT9sOltsXSxmPXU/bFswXTpsO2lmKFp0KGkpKXt2YXIgZD1pLmluZGV4T2YoIi4iKSE9PS0xLHA9ZCYmVFplKGkpO2lmKHMuYWxsb3dHZXR0aW5nJiZhPT09dm9pZCAwKXt2YXIgbTtyZXR1cm4gZiYmKHMuYmVmb3JlR2V0KGYpLHAmJmYuX3ByaXZhdGVbcy5maWVsZF1baV09PT12b2lkIDA/bT1uWmUoZi5fcHJpdmF0ZVtzLmZpZWxkXSxwKTptPWYuX3ByaXZhdGVbcy5maWVsZF1baV0pLG19ZWxzZSBpZihzLmFsbG93U2V0dGluZyYmYSE9PXZvaWQgMCl7dmFyIGc9IXMuaW1tdXRhYmxlS2V5c1tpXTtpZihnKXt2YXIgeT0kbWUoe30saSxhKTtzLmJlZm9yZVNldChsLHkpO2Zvcih2YXIgdj0wLHg9aC5sZW5ndGg7djx4O3YrKyl7dmFyIGI9aFt2XTtzLmNhblNldChiKSYmKHAmJmYuX3ByaXZhdGVbcy5maWVsZF1baV09PT12b2lkIDA/dlplKGIuX3ByaXZhdGVbcy5maWVsZF0scCxhKTpiLl9wcml2YXRlW3MuZmllbGRdW2ldPWEpfXMudXBkYXRlU3R5bGUmJmwudXBkYXRlU3R5bGUoKSxzLm9uU2V0KGwpLHMuc2V0dGluZ1RyaWdnZXJzRXZlbnQmJmxbcy50cmlnZ2VyRm5OYW1lXShzLnNldHRpbmdFdmVudCl9fX1lbHNlIGlmKHMuYWxsb3dTZXR0aW5nJiZVcihpKSl7dmFyIHc9aSxfLFQsRT1PYmplY3Qua2V5cyh3KTtzLmJlZm9yZVNldChsLHcpO2Zvcih2YXIgTD0wO0w8RS5sZW5ndGg7TCsrKXtfPUVbTF0sVD13W19dO3ZhciBTPSFzLmltbXV0YWJsZUtleXNbX107aWYoUylmb3IodmFyIEE9MDtBPGgubGVuZ3RoO0ErKyl7dmFyIEk9aFtBXTtzLmNhblNldChJKSYmKEkuX3ByaXZhdGVbcy5maWVsZF1bX109VCl9fXMudXBkYXRlU3R5bGUmJmwudXBkYXRlU3R5bGUoKSxzLm9uU2V0KGwpLHMuc2V0dGluZ1RyaWdnZXJzRXZlbnQmJmxbcy50cmlnZ2VyRm5OYW1lXShzLnNldHRpbmdFdmVudCl9ZWxzZSBpZihzLmFsbG93QmluZGluZyYmbmkoaSkpe3ZhciBEPWk7bC5vbihzLmJpbmRpbmdFdmVudCxEKX1lbHNlIGlmKHMuYWxsb3dHZXR0aW5nJiZpPT09dm9pZCAwKXt2YXIgaztyZXR1cm4gZiYmKHMuYmVmb3JlR2V0KGYpLGs9Zi5fcHJpdmF0ZVtzLmZpZWxkXSksa31yZXR1cm4gbH0sImRhdGFJbXBsIil9LCJkYXRhIikscmVtb3ZlRGF0YTpvKGZ1bmN0aW9uKGUpe3ZhciByPXtmaWVsZDoiZGF0YSIsZXZlbnQ6ImRhdGEiLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLHRyaWdnZXJFdmVudDohMSxpbW11dGFibGVLZXlzOnt9fTtyZXR1cm4gZT1pcih7fSxyLGUpLG8oZnVuY3Rpb24oaSl7dmFyIGE9ZSxzPXRoaXMsbD1zLmxlbmd0aCE9PXZvaWQgMCx1PWw/czpbc107aWYoWnQoaSkpe2Zvcih2YXIgaD1pLnNwbGl0KC9ccysvKSxmPWgubGVuZ3RoLGQ9MDtkPGY7ZCsrKXt2YXIgcD1oW2RdO2lmKCFJZihwKSl7dmFyIG09IWEuaW1tdXRhYmxlS2V5c1twXTtpZihtKWZvcih2YXIgZz0wLHk9dS5sZW5ndGg7Zzx5O2crKyl1W2ddLl9wcml2YXRlW2EuZmllbGRdW3BdPXZvaWQgMH19YS50cmlnZ2VyRXZlbnQmJnNbYS50cmlnZ2VyRm5OYW1lXShhLmV2ZW50KX1lbHNlIGlmKGk9PT12b2lkIDApe2Zvcih2YXIgdj0wLHg9dS5sZW5ndGg7djx4O3YrKylmb3IodmFyIGI9dVt2XS5fcHJpdmF0ZVthLmZpZWxkXSx3PU9iamVjdC5rZXlzKGIpLF89MDtfPHcubGVuZ3RoO18rKyl7dmFyIFQ9d1tfXSxFPSFhLmltbXV0YWJsZUtleXNbVF07RSYmKGJbVF09dm9pZCAwKX1hLnRyaWdnZXJFdmVudCYmc1thLnRyaWdnZXJGbk5hbWVdKGEuZXZlbnQpfXJldHVybiBzfSwicmVtb3ZlRGF0YUltcGwiKX0sInJlbW92ZURhdGEiKX0sRVplPXtldmVudEFsaWFzZXNPbjpvKGZ1bmN0aW9uKGUpe3ZhciByPWU7ci5hZGRMaXN0ZW5lcj1yLmxpc3Rlbj1yLmJpbmQ9ci5vbixyLnVubGlzdGVuPXIudW5iaW5kPXIub2ZmPXIucmVtb3ZlTGlzdGVuZXIsci50cmlnZ2VyPXIuZW1pdCxyLnBvbj1yLnByb21pc2VPbj1mdW5jdGlvbihuLGkpe3ZhciBhPXRoaXMscz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIG5ldyBDMShmdW5jdGlvbihsLHUpe3ZhciBoPW8oZnVuY3Rpb24obSl7YS5vZmYuYXBwbHkoYSxkKSxsKG0pfSwiY2FsbGJhY2siKSxmPXMuY29uY2F0KFtoXSksZD1mLmNvbmNhdChbXSk7YS5vbi5hcHBseShhLGYpfSl9fSwiZXZlbnRBbGlhc2VzT24iKX0sc249e307W21LZSxrWmUsRVplXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lyKHNuLHQpfSk7U1plPXthbmltYXRlOnNuLmFuaW1hdGUoKSxhbmltYXRpb246c24uYW5pbWF0aW9uKCksYW5pbWF0ZWQ6c24uYW5pbWF0ZWQoKSxjbGVhclF1ZXVlOnNuLmNsZWFyUXVldWUoKSxkZWxheTpzbi5kZWxheSgpLGRlbGF5QW5pbWF0aW9uOnNuLmRlbGF5QW5pbWF0aW9uKCksc3RvcDpzbi5zdG9wKCl9LHg2PXtjbGFzc2VzOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcztpZihlPT09dm9pZCAwKXt2YXIgbj1bXTtyZXR1cm4gclswXS5fcHJpdmF0ZS5jbGFzc2VzLmZvckVhY2goZnVuY3Rpb24oZyl7cmV0dXJuIG4ucHVzaChnKX0pLG59ZWxzZSBrbihlKXx8KGU9KGV8fCIiKS5tYXRjaCgvXFMrL2cpfHxbXSk7Zm9yKHZhciBpPVtdLGE9bmV3IFMxKGUpLHM9MDtzPHIubGVuZ3RoO3MrKyl7Zm9yKHZhciBsPXJbc10sdT1sLl9wcml2YXRlLGg9dS5jbGFzc2VzLGY9ITEsZD0wO2Q8ZS5sZW5ndGg7ZCsrKXt2YXIgcD1lW2RdLG09aC5oYXMocCk7aWYoIW0pe2Y9ITA7YnJlYWt9fWZ8fChmPWguc2l6ZSE9PWUubGVuZ3RoKSxmJiYodS5jbGFzc2VzPWEsaS5wdXNoKGwpKX1yZXR1cm4gaS5sZW5ndGg+MCYmdGhpcy5zcGF3bihpKS51cGRhdGVTdHlsZSgpLmVtaXQoImNsYXNzIikscn0sImNsYXNzZXMiKSxhZGRDbGFzczpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRvZ2dsZUNsYXNzKGUsITApfSwiYWRkQ2xhc3MiKSxoYXNDbGFzczpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXNbMF07cmV0dXJuIHIhPW51bGwmJnIuX3ByaXZhdGUuY2xhc3Nlcy5oYXMoZSl9LCJoYXNDbGFzcyIpLHRvZ2dsZUNsYXNzOm8oZnVuY3Rpb24oZSxyKXtrbihlKXx8KGU9ZS5tYXRjaCgvXFMrL2cpfHxbXSk7Zm9yKHZhciBuPXRoaXMsaT1yPT09dm9pZCAwLGE9W10scz0wLGw9bi5sZW5ndGg7czxsO3MrKylmb3IodmFyIHU9bltzXSxoPXUuX3ByaXZhdGUuY2xhc3NlcyxmPSExLGQ9MDtkPGUubGVuZ3RoO2QrKyl7dmFyIHA9ZVtkXSxtPWguaGFzKHApLGc9ITE7cnx8aSYmIW0/KGguYWRkKHApLGc9ITApOighcnx8aSYmbSkmJihoLmRlbGV0ZShwKSxnPSEwKSwhZiYmZyYmKGEucHVzaCh1KSxmPSEwKX1yZXR1cm4gYS5sZW5ndGg+MCYmdGhpcy5zcGF3bihhKS51cGRhdGVTdHlsZSgpLmVtaXQoImNsYXNzIiksbn0sInRvZ2dsZUNsYXNzIikscmVtb3ZlQ2xhc3M6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50b2dnbGVDbGFzcyhlLCExKX0sInJlbW92ZUNsYXNzIiksZmxhc2hDbGFzczpvKGZ1bmN0aW9uKGUscil7dmFyIG49dGhpcztpZihyPT1udWxsKXI9MjUwO2Vsc2UgaWYocj09PTApcmV0dXJuIG47cmV0dXJuIG4uYWRkQ2xhc3MoZSksc2V0VGltZW91dChmdW5jdGlvbigpe24ucmVtb3ZlQ2xhc3MoZSl9LHIpLG59LCJmbGFzaENsYXNzIil9O3g2LmNsYXNzTmFtZT14Ni5jbGFzc05hbWVzPXg2LmNsYXNzZXM7VnI9e21ldGFDaGFyOiJbXFwhXFxcIlxcI1xcJFxcJVxcJlxcJ1xcKFxcKVxcKlxcK1xcLFxcLlxcL1xcOlxcO1xcPFxcPVxcPlxcP1xcQFxcW1xcXVxcXlxcYFxce1xcfFxcfVxcfl0iLGNvbXBhcmF0b3JPcDoiPXxcXCE9fD58Pj18PHw8PXxcXCQ9fFxcXj18XFwqPSIsYm9vbE9wOiJcXD98XFwhfFxcXiIsc3RyaW5nOmAiKD86XFxcXCJ8W14iXSkqInwnKD86XFxcXCd8W14nXSkqJ2AsbnVtYmVyOmppLG1ldGE6ImRlZ3JlZXxpbmRlZ3JlZXxvdXRkZWdyZWUiLHNlcGFyYXRvcjoiXFxzKixcXHMqIixkZXNjZW5kYW50OiJcXHMrIixjaGlsZDoiXFxzKz5cXHMrIixzdWJqZWN0OiJcXCQiLGdyb3VwOiJub2RlfGVkZ2V8XFwqIixkaXJlY3RlZEVkZ2U6IlxccystPlxccysiLHVuZGlyZWN0ZWRFZGdlOiJcXHMrPC0+XFxzKyJ9O1ZyLnZhcmlhYmxlPSIoPzpbXFx3LS5dfCg/OlxcXFwiK1ZyLm1ldGFDaGFyKyIpKSsiO1ZyLmNsYXNzTmFtZT0iKD86W1xcdy1dfCg/OlxcXFwiK1ZyLm1ldGFDaGFyKyIpKSsiO1ZyLnZhbHVlPVZyLnN0cmluZysifCIrVnIubnVtYmVyO1ZyLmlkPVZyLnZhcmlhYmxlOyhmdW5jdGlvbigpe3ZhciB0LGUscjtmb3IodD1Wci5jb21wYXJhdG9yT3Auc3BsaXQoInwiKSxyPTA7cjx0Lmxlbmd0aDtyKyspZT10W3JdLFZyLmNvbXBhcmF0b3JPcCs9InxAIitlO2Zvcih0PVZyLmNvbXBhcmF0b3JPcC5zcGxpdCgifCIpLHI9MDtyPHQubGVuZ3RoO3IrKyllPXRbcl0sIShlLmluZGV4T2YoIiEiKT49MCkmJmUhPT0iPSImJihWci5jb21wYXJhdG9yT3ArPSJ8XFwhIitlKX0pKCk7cG49byhmdW5jdGlvbigpe3JldHVybntjaGVja3M6W119fSwibmV3UXVlcnkiKSxNdD17R1JPVVA6MCxDT0xMRUNUSU9OOjEsRklMVEVSOjIsREFUQV9DT01QQVJFOjMsREFUQV9FWElTVDo0LERBVEFfQk9PTDo1LE1FVEFfQ09NUEFSRTo2LFNUQVRFOjcsSUQ6OCxDTEFTUzo5LFVORElSRUNURURfRURHRToxMCxESVJFQ1RFRF9FREdFOjExLE5PREVfU09VUkNFOjEyLE5PREVfVEFSR0VUOjEzLE5PREVfTkVJR0hCT1I6MTQsQ0hJTEQ6MTUsREVTQ0VOREFOVDoxNixQQVJFTlQ6MTcsQU5DRVNUT1I6MTgsQ09NUE9VTkRfU1BMSVQ6MTksVFJVRToyMH0sVVA9W3tzZWxlY3RvcjoiOnNlbGVjdGVkIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2VsZWN0ZWQoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6dW5zZWxlY3RlZCIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiFlLnNlbGVjdGVkKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOnNlbGVjdGFibGUiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5zZWxlY3RhYmxlKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOnVuc2VsZWN0YWJsZSIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiFlLnNlbGVjdGFibGUoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6bG9ja2VkIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUubG9ja2VkKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOnVubG9ja2VkIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIWUubG9ja2VkKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOnZpc2libGUiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS52aXNpYmxlKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOmhpZGRlbiIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiFlLnZpc2libGUoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6dHJhbnNwYXJlbnQiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS50cmFuc3BhcmVudCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpncmFiYmVkIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ3JhYmJlZCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpmcmVlIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIWUuZ3JhYmJlZCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpyZW1vdmVkIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVtb3ZlZCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjppbnNpZGUiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4hZS5yZW1vdmVkKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOmdyYWJiYWJsZSIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmdyYWJiYWJsZSgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6Ijp1bmdyYWJiYWJsZSIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiFlLmdyYWJiYWJsZSgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjphbmltYXRlZCIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFuaW1hdGVkKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOnVuYW5pbWF0ZWQiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4hZS5hbmltYXRlZCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpwYXJlbnQiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5pc1BhcmVudCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpjaGlsZGxlc3MiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5pc0NoaWxkbGVzcygpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpjaGlsZCIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzQ2hpbGQoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6b3JwaGFuIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNPcnBoYW4oKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6bm9ub3JwaGFuIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNDaGlsZCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6Ijpjb21wb3VuZCIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzTm9kZSgpP2UuaXNQYXJlbnQoKTplLnNvdXJjZSgpLmlzUGFyZW50KCl8fGUudGFyZ2V0KCkuaXNQYXJlbnQoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6bG9vcCIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzTG9vcCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpzaW1wbGUiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5pc1NpbXBsZSgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjphY3RpdmUiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5hY3RpdmUoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6aW5hY3RpdmUiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4hZS5hY3RpdmUoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6YmFja2dyb3VuZGluZyIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmJhY2tncm91bmRpbmcoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6bm9uYmFja2dyb3VuZGluZyIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiFlLmJhY2tncm91bmRpbmcoKX0sIm1hdGNoZXMiKX1dLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gQnFlKHQuc2VsZWN0b3IsZS5zZWxlY3Rvcil9KSxDWmU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sZSxyPTA7cjxVUC5sZW5ndGg7cisrKWU9VVBbcl0sdFtlLnNlbGVjdG9yXT1lLm1hdGNoZXM7cmV0dXJuIHR9KCksQVplPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gQ1plW2VdKHIpfSwic3RhdGVTZWxlY3Rvck1hdGNoZXMiKSxfWmU9IigiK1VQLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zZWxlY3Rvcn0pLmpvaW4oInwiKSsiKSIsYzE9byhmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKG5ldyBSZWdFeHAoIlxcXFwoIitWci5tZXRhQ2hhcisiKSIsImciKSxmdW5jdGlvbihyLG4pe3JldHVybiBufSl9LCJjbGVhbk1ldGFDaGFycyIpLExmPW8oZnVuY3Rpb24oZSxyLG4pe2VbZS5sZW5ndGgtMV09bn0sInJlcGxhY2VMYXN0UXVlcnkiKSxIUD1be25hbWU6Imdyb3VwIixxdWVyeTohMCxyZWdleDoiKCIrVnIuZ3JvdXArIikiLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWpsKG4sMSksYT1pWzBdO3IuY2hlY2tzLnB1c2goe3R5cGU6TXQuR1JPVVAsdmFsdWU6YT09PSIqIj9hOmErInMifSl9LCJwb3B1bGF0ZSIpfSx7bmFtZToic3RhdGUiLHF1ZXJ5OiEwLHJlZ2V4Ol9aZSxwb3B1bGF0ZTpvKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1qbChuLDEpLGE9aVswXTtyLmNoZWNrcy5wdXNoKHt0eXBlOk10LlNUQVRFLHZhbHVlOmF9KX0sInBvcHVsYXRlIil9LHtuYW1lOiJpZCIscXVlcnk6ITAscmVnZXg6IlxcIygiK1ZyLmlkKyIpIixwb3B1bGF0ZTpvKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1qbChuLDEpLGE9aVswXTtyLmNoZWNrcy5wdXNoKHt0eXBlOk10LklELHZhbHVlOmMxKGEpfSl9LCJwb3B1bGF0ZSIpfSx7bmFtZToiY2xhc3NOYW1lIixxdWVyeTohMCxyZWdleDoiXFwuKCIrVnIuY2xhc3NOYW1lKyIpIixwb3B1bGF0ZTpvKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1qbChuLDEpLGE9aVswXTtyLmNoZWNrcy5wdXNoKHt0eXBlOk10LkNMQVNTLHZhbHVlOmMxKGEpfSl9LCJwb3B1bGF0ZSIpfSx7bmFtZToiZGF0YUV4aXN0cyIscXVlcnk6ITAscmVnZXg6IlxcW1xccyooIitWci52YXJpYWJsZSsiKVxccypcXF0iLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWpsKG4sMSksYT1pWzBdO3IuY2hlY2tzLnB1c2goe3R5cGU6TXQuREFUQV9FWElTVCxmaWVsZDpjMShhKX0pfSwicG9wdWxhdGUiKX0se25hbWU6ImRhdGFDb21wYXJlIixxdWVyeTohMCxyZWdleDoiXFxbXFxzKigiK1ZyLnZhcmlhYmxlKyIpXFxzKigiK1ZyLmNvbXBhcmF0b3JPcCsiKVxccyooIitWci52YWx1ZSsiKVxccypcXF0iLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWpsKG4sMyksYT1pWzBdLHM9aVsxXSxsPWlbMl0sdT1uZXcgUmVnRXhwKCJeIitWci5zdHJpbmcrIiQiKS5leGVjKGwpIT1udWxsO3U/bD1sLnN1YnN0cmluZygxLGwubGVuZ3RoLTEpOmw9cGFyc2VGbG9hdChsKSxyLmNoZWNrcy5wdXNoKHt0eXBlOk10LkRBVEFfQ09NUEFSRSxmaWVsZDpjMShhKSxvcGVyYXRvcjpzLHZhbHVlOmx9KX0sInBvcHVsYXRlIil9LHtuYW1lOiJkYXRhQm9vbCIscXVlcnk6ITAscmVnZXg6IlxcW1xccyooIitWci5ib29sT3ArIilcXHMqKCIrVnIudmFyaWFibGUrIilcXHMqXFxdIixwb3B1bGF0ZTpvKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1qbChuLDIpLGE9aVswXSxzPWlbMV07ci5jaGVja3MucHVzaCh7dHlwZTpNdC5EQVRBX0JPT0wsZmllbGQ6YzEocyksb3BlcmF0b3I6YX0pfSwicG9wdWxhdGUiKX0se25hbWU6Im1ldGFDb21wYXJlIixxdWVyeTohMCxyZWdleDoiXFxbXFxbXFxzKigiK1ZyLm1ldGErIilcXHMqKCIrVnIuY29tcGFyYXRvck9wKyIpXFxzKigiK1ZyLm51bWJlcisiKVxccypcXF1cXF0iLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWpsKG4sMyksYT1pWzBdLHM9aVsxXSxsPWlbMl07ci5jaGVja3MucHVzaCh7dHlwZTpNdC5NRVRBX0NPTVBBUkUsZmllbGQ6YzEoYSksb3BlcmF0b3I6cyx2YWx1ZTpwYXJzZUZsb2F0KGwpfSl9LCJwb3B1bGF0ZSIpfSx7bmFtZToibmV4dFF1ZXJ5IixzZXBhcmF0b3I6ITAscmVnZXg6VnIuc2VwYXJhdG9yLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyKXt2YXIgbj1lLmN1cnJlbnRTdWJqZWN0LGk9ZS5lZGdlQ291bnQsYT1lLmNvbXBvdW5kQ291bnQscz1lW2UubGVuZ3RoLTFdO24hPW51bGwmJihzLnN1YmplY3Q9bixlLmN1cnJlbnRTdWJqZWN0PW51bGwpLHMuZWRnZUNvdW50PWkscy5jb21wb3VuZENvdW50PWEsZS5lZGdlQ291bnQ9MCxlLmNvbXBvdW5kQ291bnQ9MDt2YXIgbD1lW2UubGVuZ3RoKytdPXBuKCk7cmV0dXJuIGx9LCJwb3B1bGF0ZSIpfSx7bmFtZToiZGlyZWN0ZWRFZGdlIixzZXBhcmF0b3I6ITAscmVnZXg6VnIuZGlyZWN0ZWRFZGdlLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyKXtpZihlLmN1cnJlbnRTdWJqZWN0PT1udWxsKXt2YXIgbj1wbigpLGk9cixhPXBuKCk7cmV0dXJuIG4uY2hlY2tzLnB1c2goe3R5cGU6TXQuRElSRUNURURfRURHRSxzb3VyY2U6aSx0YXJnZXQ6YX0pLExmKGUscixuKSxlLmVkZ2VDb3VudCsrLGF9ZWxzZXt2YXIgcz1wbigpLGw9cix1PXBuKCk7cmV0dXJuIHMuY2hlY2tzLnB1c2goe3R5cGU6TXQuTk9ERV9TT1VSQ0Usc291cmNlOmwsdGFyZ2V0OnV9KSxMZihlLHIscyksZS5lZGdlQ291bnQrKyx1fX0sInBvcHVsYXRlIil9LHtuYW1lOiJ1bmRpcmVjdGVkRWRnZSIsc2VwYXJhdG9yOiEwLHJlZ2V4OlZyLnVuZGlyZWN0ZWRFZGdlLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyKXtpZihlLmN1cnJlbnRTdWJqZWN0PT1udWxsKXt2YXIgbj1wbigpLGk9cixhPXBuKCk7cmV0dXJuIG4uY2hlY2tzLnB1c2goe3R5cGU6TXQuVU5ESVJFQ1RFRF9FREdFLG5vZGVzOltpLGFdfSksTGYoZSxyLG4pLGUuZWRnZUNvdW50KyssYX1lbHNle3ZhciBzPXBuKCksbD1yLHU9cG4oKTtyZXR1cm4gcy5jaGVja3MucHVzaCh7dHlwZTpNdC5OT0RFX05FSUdIQk9SLG5vZGU6bCxuZWlnaGJvcjp1fSksTGYoZSxyLHMpLHV9fSwicG9wdWxhdGUiKX0se25hbWU6ImNoaWxkIixzZXBhcmF0b3I6ITAscmVnZXg6VnIuY2hpbGQscG9wdWxhdGU6byhmdW5jdGlvbihlLHIpe2lmKGUuY3VycmVudFN1YmplY3Q9PW51bGwpe3ZhciBuPXBuKCksaT1wbigpLGE9ZVtlLmxlbmd0aC0xXTtyZXR1cm4gbi5jaGVja3MucHVzaCh7dHlwZTpNdC5DSElMRCxwYXJlbnQ6YSxjaGlsZDppfSksTGYoZSxyLG4pLGUuY29tcG91bmRDb3VudCsrLGl9ZWxzZSBpZihlLmN1cnJlbnRTdWJqZWN0PT09cil7dmFyIHM9cG4oKSxsPWVbZS5sZW5ndGgtMV0sdT1wbigpLGg9cG4oKSxmPXBuKCksZD1wbigpO3JldHVybiBzLmNoZWNrcy5wdXNoKHt0eXBlOk10LkNPTVBPVU5EX1NQTElULGxlZnQ6bCxyaWdodDp1LHN1YmplY3Q6aH0pLGguY2hlY2tzPXIuY2hlY2tzLHIuY2hlY2tzPVt7dHlwZTpNdC5UUlVFfV0sZC5jaGVja3MucHVzaCh7dHlwZTpNdC5UUlVFfSksdS5jaGVja3MucHVzaCh7dHlwZTpNdC5QQVJFTlQscGFyZW50OmQsY2hpbGQ6Zn0pLExmKGUsbCxzKSxlLmN1cnJlbnRTdWJqZWN0PWgsZS5jb21wb3VuZENvdW50KyssZn1lbHNle3ZhciBwPXBuKCksbT1wbigpLGc9W3t0eXBlOk10LlBBUkVOVCxwYXJlbnQ6cCxjaGlsZDptfV07cmV0dXJuIHAuY2hlY2tzPXIuY2hlY2tzLHIuY2hlY2tzPWcsZS5jb21wb3VuZENvdW50KyssbX19LCJwb3B1bGF0ZSIpfSx7bmFtZToiZGVzY2VuZGFudCIsc2VwYXJhdG9yOiEwLHJlZ2V4OlZyLmRlc2NlbmRhbnQscG9wdWxhdGU6byhmdW5jdGlvbihlLHIpe2lmKGUuY3VycmVudFN1YmplY3Q9PW51bGwpe3ZhciBuPXBuKCksaT1wbigpLGE9ZVtlLmxlbmd0aC0xXTtyZXR1cm4gbi5jaGVja3MucHVzaCh7dHlwZTpNdC5ERVNDRU5EQU5ULGFuY2VzdG9yOmEsZGVzY2VuZGFudDppfSksTGYoZSxyLG4pLGUuY29tcG91bmRDb3VudCsrLGl9ZWxzZSBpZihlLmN1cnJlbnRTdWJqZWN0PT09cil7dmFyIHM9cG4oKSxsPWVbZS5sZW5ndGgtMV0sdT1wbigpLGg9cG4oKSxmPXBuKCksZD1wbigpO3JldHVybiBzLmNoZWNrcy5wdXNoKHt0eXBlOk10LkNPTVBPVU5EX1NQTElULGxlZnQ6bCxyaWdodDp1LHN1YmplY3Q6aH0pLGguY2hlY2tzPXIuY2hlY2tzLHIuY2hlY2tzPVt7dHlwZTpNdC5UUlVFfV0sZC5jaGVja3MucHVzaCh7dHlwZTpNdC5UUlVFfSksdS5jaGVja3MucHVzaCh7dHlwZTpNdC5BTkNFU1RPUixhbmNlc3RvcjpkLGRlc2NlbmRhbnQ6Zn0pLExmKGUsbCxzKSxlLmN1cnJlbnRTdWJqZWN0PWgsZS5jb21wb3VuZENvdW50KyssZn1lbHNle3ZhciBwPXBuKCksbT1wbigpLGc9W3t0eXBlOk10LkFOQ0VTVE9SLGFuY2VzdG9yOnAsZGVzY2VuZGFudDptfV07cmV0dXJuIHAuY2hlY2tzPXIuY2hlY2tzLHIuY2hlY2tzPWcsZS5jb21wb3VuZENvdW50KyssbX19LCJwb3B1bGF0ZSIpfSx7bmFtZToic3ViamVjdCIsbW9kaWZpZXI6ITAscmVnZXg6VnIuc3ViamVjdCxwb3B1bGF0ZTpvKGZ1bmN0aW9uKGUscil7aWYoZS5jdXJyZW50U3ViamVjdCE9bnVsbCYmZS5jdXJyZW50U3ViamVjdCE9PXIpcmV0dXJuIG9uKCJSZWRlZmluaXRpb24gb2Ygc3ViamVjdCBpbiBzZWxlY3RvciBgIitlLnRvU3RyaW5nKCkrImAiKSwhMTtlLmN1cnJlbnRTdWJqZWN0PXI7dmFyIG49ZVtlLmxlbmd0aC0xXSxpPW4uY2hlY2tzWzBdLGE9aT09bnVsbD9udWxsOmkudHlwZTthPT09TXQuRElSRUNURURfRURHRT9pLnR5cGU9TXQuTk9ERV9UQVJHRVQ6YT09PU10LlVORElSRUNURURfRURHRSYmKGkudHlwZT1NdC5OT0RFX05FSUdIQk9SLGkubm9kZT1pLm5vZGVzWzFdLGkubmVpZ2hib3I9aS5ub2Rlc1swXSxpLm5vZGVzPW51bGwpfSwicG9wdWxhdGUiKX1dO0hQLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQucmVnZXhPYmo9bmV3IFJlZ0V4cCgiXiIrdC5yZWdleCl9KTtMWmU9byhmdW5jdGlvbihlKXtmb3IodmFyIHIsbixpLGE9MDthPEhQLmxlbmd0aDthKyspe3ZhciBzPUhQW2FdLGw9cy5uYW1lLHU9ZS5tYXRjaChzLnJlZ2V4T2JqKTtpZih1IT1udWxsKXtuPXUscj1zLGk9bDt2YXIgaD11WzBdO2U9ZS5zdWJzdHJpbmcoaC5sZW5ndGgpO2JyZWFrfX1yZXR1cm57ZXhwcjpyLG1hdGNoOm4sbmFtZTppLHJlbWFpbmluZzplfX0sImNvbnN1bWVFeHByIiksRFplPW8oZnVuY3Rpb24oZSl7dmFyIHI9ZS5tYXRjaCgvXlxzKy8pO2lmKHIpe3ZhciBuPXJbMF07ZT1lLnN1YnN0cmluZyhuLmxlbmd0aCl9cmV0dXJuIGV9LCJjb25zdW1lV2hpdGVzcGFjZSIpLE5aZT1vKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMsbj1yLmlucHV0VGV4dD1lLGk9clswXT1wbigpO2ZvcihyLmxlbmd0aD0xLG49RFplKG4pOzspe3ZhciBhPUxaZShuKTtpZihhLmV4cHI9PW51bGwpcmV0dXJuIG9uKCJUaGUgc2VsZWN0b3IgYCIrZSsiYGlzIGludmFsaWQiKSwhMTt2YXIgcz1hLm1hdGNoLnNsaWNlKDEpLGw9YS5leHByLnBvcHVsYXRlKHIsaSxzKTtpZihsPT09ITEpcmV0dXJuITE7aWYobCE9bnVsbCYmKGk9bCksbj1hLnJlbWFpbmluZyxuLm1hdGNoKC9eXHMqJC8pKWJyZWFrfXZhciB1PXJbci5sZW5ndGgtMV07ci5jdXJyZW50U3ViamVjdCE9bnVsbCYmKHUuc3ViamVjdD1yLmN1cnJlbnRTdWJqZWN0KSx1LmVkZ2VDb3VudD1yLmVkZ2VDb3VudCx1LmNvbXBvdW5kQ291bnQ9ci5jb21wb3VuZENvdW50O2Zvcih2YXIgaD0wO2g8ci5sZW5ndGg7aCsrKXt2YXIgZj1yW2hdO2lmKGYuY29tcG91bmRDb3VudD4wJiZmLmVkZ2VDb3VudD4wKXJldHVybiBvbigiVGhlIHNlbGVjdG9yIGAiK2UrImAgaXMgaW52YWxpZCBiZWNhdXNlIGl0IHVzZXMgYm90aCBhIGNvbXBvdW5kIHNlbGVjdG9yIGFuZCBhbiBlZGdlIHNlbGVjdG9yIiksITE7aWYoZi5lZGdlQ291bnQ+MSlyZXR1cm4gb24oIlRoZSBzZWxlY3RvciBgIitlKyJgIGlzIGludmFsaWQgYmVjYXVzZSBpdCB1c2VzIG11bHRpcGxlIGVkZ2Ugc2VsZWN0b3JzIiksITE7Zi5lZGdlQ291bnQ9PT0xJiZvbigiVGhlIHNlbGVjdG9yIGAiK2UrImAgaXMgZGVwcmVjYXRlZC4gIEVkZ2Ugc2VsZWN0b3JzIGRvIG5vdCB0YWtlIGVmZmVjdCBvbiBjaGFuZ2VzIHRvIHNvdXJjZSBhbmQgdGFyZ2V0IG5vZGVzIGFmdGVyIGFuIGVkZ2UgaXMgYWRkZWQsIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiAgVXNlIGEgY2xhc3Mgb3IgZGF0YSBzZWxlY3RvciBvbiBlZGdlcyBpbnN0ZWFkLCB1cGRhdGluZyB0aGUgY2xhc3Mgb3IgZGF0YSBvZiBhbiBlZGdlIHdoZW4geW91ciBhcHAgZGV0ZWN0cyBhIGNoYW5nZSBpbiBzb3VyY2Ugb3IgdGFyZ2V0IG5vZGVzLiIpfXJldHVybiEwfSwicGFyc2UiKSxSWmU9byhmdW5jdGlvbigpe2lmKHRoaXMudG9TdHJpbmdDYWNoZSE9bnVsbClyZXR1cm4gdGhpcy50b1N0cmluZ0NhY2hlO2Zvcih2YXIgZT1vKGZ1bmN0aW9uKGYpe3JldHVybiBmPz8iIn0sImNsZWFuIikscj1vKGZ1bmN0aW9uKGYpe3JldHVybiBadChmKT8nIicrZisnIic6ZShmKX0sImNsZWFuVmFsIiksbj1vKGZ1bmN0aW9uKGYpe3JldHVybiIgIitmKyIgIn0sInNwYWNlIiksaT1vKGZ1bmN0aW9uKGYsZCl7dmFyIHA9Zi50eXBlLG09Zi52YWx1ZTtzd2l0Y2gocCl7Y2FzZSBNdC5HUk9VUDp7dmFyIGc9ZShtKTtyZXR1cm4gZy5zdWJzdHJpbmcoMCxnLmxlbmd0aC0xKX1jYXNlIE10LkRBVEFfQ09NUEFSRTp7dmFyIHk9Zi5maWVsZCx2PWYub3BlcmF0b3I7cmV0dXJuIlsiK3krbihlKHYpKStyKG0pKyJdIn1jYXNlIE10LkRBVEFfQk9PTDp7dmFyIHg9Zi5vcGVyYXRvcixiPWYuZmllbGQ7cmV0dXJuIlsiK2UoeCkrYisiXSJ9Y2FzZSBNdC5EQVRBX0VYSVNUOnt2YXIgdz1mLmZpZWxkO3JldHVybiJbIit3KyJdIn1jYXNlIE10Lk1FVEFfQ09NUEFSRTp7dmFyIF89Zi5vcGVyYXRvcixUPWYuZmllbGQ7cmV0dXJuIltbIitUK24oZShfKSkrcihtKSsiXV0ifWNhc2UgTXQuU1RBVEU6cmV0dXJuIG07Y2FzZSBNdC5JRDpyZXR1cm4iIyIrbTtjYXNlIE10LkNMQVNTOnJldHVybiIuIittO2Nhc2UgTXQuUEFSRU5UOmNhc2UgTXQuQ0hJTEQ6cmV0dXJuIGEoZi5wYXJlbnQsZCkrbigiPiIpK2EoZi5jaGlsZCxkKTtjYXNlIE10LkFOQ0VTVE9SOmNhc2UgTXQuREVTQ0VOREFOVDpyZXR1cm4gYShmLmFuY2VzdG9yLGQpKyIgIithKGYuZGVzY2VuZGFudCxkKTtjYXNlIE10LkNPTVBPVU5EX1NQTElUOnt2YXIgRT1hKGYubGVmdCxkKSxMPWEoZi5zdWJqZWN0LGQpLFM9YShmLnJpZ2h0LGQpO3JldHVybiBFKyhFLmxlbmd0aD4wPyIgIjoiIikrTCtTfWNhc2UgTXQuVFJVRTpyZXR1cm4iIn19LCJjaGVja1RvU3RyaW5nIiksYT1vKGZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYuY2hlY2tzLnJlZHVjZShmdW5jdGlvbihwLG0sZyl7cmV0dXJuIHArKGQ9PT1mJiZnPT09MD8iJCI6IiIpK2kobSxkKX0sIiIpfSwicXVlcnlUb1N0cmluZyIpLHM9IiIsbD0wO2w8dGhpcy5sZW5ndGg7bCsrKXt2YXIgdT10aGlzW2xdO3MrPWEodSx1LnN1YmplY3QpLHRoaXMubGVuZ3RoPjEmJmw8dGhpcy5sZW5ndGgtMSYmKHMrPSIsICIpfXJldHVybiB0aGlzLnRvU3RyaW5nQ2FjaGU9cyxzfSwidG9TdHJpbmciKSxNWmU9e3BhcnNlOk5aZSx0b1N0cmluZzpSWmV9LERnZT1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaSxhPVp0KGUpLHM9eHQoZSksbD1adChuKSx1LGgsZj0hMSxkPSExLHA9ITE7c3dpdGNoKHIuaW5kZXhPZigiISIpPj0wJiYocj1yLnJlcGxhY2UoIiEiLCIiKSxkPSEwKSxyLmluZGV4T2YoIkAiKT49MCYmKHI9ci5yZXBsYWNlKCJAIiwiIiksZj0hMCksKGF8fGx8fGYpJiYodT0hYSYmIXM/IiI6IiIrZSxoPSIiK24pLGYmJihlPXU9dS50b0xvd2VyQ2FzZSgpLG49aD1oLnRvTG93ZXJDYXNlKCkpLHIpe2Nhc2UiKj0iOmk9dS5pbmRleE9mKGgpPj0wO2JyZWFrO2Nhc2UiJD0iOmk9dS5pbmRleE9mKGgsdS5sZW5ndGgtaC5sZW5ndGgpPj0wO2JyZWFrO2Nhc2UiXj0iOmk9dS5pbmRleE9mKGgpPT09MDticmVhaztjYXNlIj0iOmk9ZT09PW47YnJlYWs7Y2FzZSI+IjpwPSEwLGk9ZT5uO2JyZWFrO2Nhc2UiPj0iOnA9ITAsaT1lPj1uO2JyZWFrO2Nhc2UiPCI6cD0hMCxpPWU8bjticmVhaztjYXNlIjw9IjpwPSEwLGk9ZTw9bjticmVhaztkZWZhdWx0Omk9ITE7YnJlYWt9cmV0dXJuIGQmJihlIT1udWxsfHwhcCkmJihpPSFpKSxpfSwidmFsQ21wIiksSVplPW8oZnVuY3Rpb24oZSxyKXtzd2l0Y2gocil7Y2FzZSI/IjpyZXR1cm4hIWU7Y2FzZSIhIjpyZXR1cm4hZTtjYXNlIl4iOnJldHVybiBlPT09dm9pZCAwfX0sImJvb2xDbXAiKSxPWmU9byhmdW5jdGlvbihlKXtyZXR1cm4gZSE9PXZvaWQgMH0sImV4aXN0Q21wIiksbUI9byhmdW5jdGlvbihlLHIpe3JldHVybiBlLmRhdGEocil9LCJkYXRhIiksUFplPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZVtyXSgpfSwibWV0YSIpLHBpPVtdLCRuPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZS5jaGVja3MuZXZlcnkoZnVuY3Rpb24obil7cmV0dXJuIHBpW24udHlwZV0obixyKX0pfSwibWF0Y2hlcyIpO3BpW010LkdST1VQXT1mdW5jdGlvbih0LGUpe3ZhciByPXQudmFsdWU7cmV0dXJuIHI9PT0iKiJ8fHI9PT1lLmdyb3VwKCl9O3BpW010LlNUQVRFXT1mdW5jdGlvbih0LGUpe3ZhciByPXQudmFsdWU7cmV0dXJuIEFaZShyLGUpfTtwaVtNdC5JRF09ZnVuY3Rpb24odCxlKXt2YXIgcj10LnZhbHVlO3JldHVybiBlLmlkKCk9PT1yfTtwaVtNdC5DTEFTU109ZnVuY3Rpb24odCxlKXt2YXIgcj10LnZhbHVlO3JldHVybiBlLmhhc0NsYXNzKHIpfTtwaVtNdC5NRVRBX0NPTVBBUkVdPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5maWVsZCxuPXQub3BlcmF0b3IsaT10LnZhbHVlO3JldHVybiBEZ2UoUFplKGUsciksbixpKX07cGlbTXQuREFUQV9DT01QQVJFXT1mdW5jdGlvbih0LGUpe3ZhciByPXQuZmllbGQsbj10Lm9wZXJhdG9yLGk9dC52YWx1ZTtyZXR1cm4gRGdlKG1CKGUsciksbixpKX07cGlbTXQuREFUQV9CT09MXT1mdW5jdGlvbih0LGUpe3ZhciByPXQuZmllbGQsbj10Lm9wZXJhdG9yO3JldHVybiBJWmUobUIoZSxyKSxuKX07cGlbTXQuREFUQV9FWElTVF09ZnVuY3Rpb24odCxlKXt2YXIgcj10LmZpZWxkO3JldHVybiB0Lm9wZXJhdG9yLE9aZShtQihlLHIpKX07cGlbTXQuVU5ESVJFQ1RFRF9FREdFXT1mdW5jdGlvbih0LGUpe3ZhciByPXQubm9kZXNbMF0sbj10Lm5vZGVzWzFdLGk9ZS5zb3VyY2UoKSxhPWUudGFyZ2V0KCk7cmV0dXJuICRuKHIsaSkmJiRuKG4sYSl8fCRuKG4saSkmJiRuKHIsYSl9O3BpW010Lk5PREVfTkVJR0hCT1JdPWZ1bmN0aW9uKHQsZSl7cmV0dXJuICRuKHQubm9kZSxlKSYmZS5uZWlnaGJvcmhvb2QoKS5zb21lKGZ1bmN0aW9uKHIpe3JldHVybiByLmlzTm9kZSgpJiYkbih0Lm5laWdoYm9yLHIpfSl9O3BpW010LkRJUkVDVEVEX0VER0VdPWZ1bmN0aW9uKHQsZSl7cmV0dXJuICRuKHQuc291cmNlLGUuc291cmNlKCkpJiYkbih0LnRhcmdldCxlLnRhcmdldCgpKX07cGlbTXQuTk9ERV9TT1VSQ0VdPWZ1bmN0aW9uKHQsZSl7cmV0dXJuICRuKHQuc291cmNlLGUpJiZlLm91dGdvZXJzKCkuc29tZShmdW5jdGlvbihyKXtyZXR1cm4gci5pc05vZGUoKSYmJG4odC50YXJnZXQscil9KX07cGlbTXQuTk9ERV9UQVJHRVRdPWZ1bmN0aW9uKHQsZSl7cmV0dXJuICRuKHQudGFyZ2V0LGUpJiZlLmluY29tZXJzKCkuc29tZShmdW5jdGlvbihyKXtyZXR1cm4gci5pc05vZGUoKSYmJG4odC5zb3VyY2Uscil9KX07cGlbTXQuQ0hJTERdPWZ1bmN0aW9uKHQsZSl7cmV0dXJuICRuKHQuY2hpbGQsZSkmJiRuKHQucGFyZW50LGUucGFyZW50KCkpfTtwaVtNdC5QQVJFTlRdPWZ1bmN0aW9uKHQsZSl7cmV0dXJuICRuKHQucGFyZW50LGUpJiZlLmNoaWxkcmVuKCkuc29tZShmdW5jdGlvbihyKXtyZXR1cm4gJG4odC5jaGlsZCxyKX0pfTtwaVtNdC5ERVNDRU5EQU5UXT1mdW5jdGlvbih0LGUpe3JldHVybiAkbih0LmRlc2NlbmRhbnQsZSkmJmUuYW5jZXN0b3JzKCkuc29tZShmdW5jdGlvbihyKXtyZXR1cm4gJG4odC5hbmNlc3RvcixyKX0pfTtwaVtNdC5BTkNFU1RPUl09ZnVuY3Rpb24odCxlKXtyZXR1cm4gJG4odC5hbmNlc3RvcixlKSYmZS5kZXNjZW5kYW50cygpLnNvbWUoZnVuY3Rpb24ocil7cmV0dXJuICRuKHQuZGVzY2VuZGFudCxyKX0pfTtwaVtNdC5DT01QT1VORF9TUExJVF09ZnVuY3Rpb24odCxlKXtyZXR1cm4gJG4odC5zdWJqZWN0LGUpJiYkbih0LmxlZnQsZSkmJiRuKHQucmlnaHQsZSl9O3BpW010LlRSVUVdPWZ1bmN0aW9uKCl7cmV0dXJuITB9O3BpW010LkNPTExFQ1RJT05dPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC52YWx1ZTtyZXR1cm4gci5oYXMoZSl9O3BpW010LkZJTFRFUl09ZnVuY3Rpb24odCxlKXt2YXIgcj10LnZhbHVlO3JldHVybiByKGUpfTtCWmU9byhmdW5jdGlvbihlKXt2YXIgcj10aGlzO2lmKHIubGVuZ3RoPT09MSYmclswXS5jaGVja3MubGVuZ3RoPT09MSYmclswXS5jaGVja3NbMF0udHlwZT09PU10LklEKXJldHVybiBlLmdldEVsZW1lbnRCeUlkKHJbMF0uY2hlY2tzWzBdLnZhbHVlKS5jb2xsZWN0aW9uKCk7dmFyIG49byhmdW5jdGlvbihhKXtmb3IodmFyIHM9MDtzPHIubGVuZ3RoO3MrKyl7dmFyIGw9cltzXTtpZigkbihsLGEpKXJldHVybiEwfXJldHVybiExfSwic2VsZWN0b3JGdW5jdGlvbiIpO3JldHVybiByLnRleHQoKT09bnVsbCYmKG49byhmdW5jdGlvbigpe3JldHVybiEwfSwic2VsZWN0b3JGdW5jdGlvbiIpKSxlLmZpbHRlcihuKX0sImZpbHRlciIpLEZaZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj10aGlzLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtpZigkbihpLGUpKXJldHVybiEwfXJldHVybiExfSwibWF0Y2hlcyIpLHpaZT17bWF0Y2hlczpGWmUsZmlsdGVyOkJaZX0sUGY9byhmdW5jdGlvbihlKXt0aGlzLmlucHV0VGV4dD1lLHRoaXMuY3VycmVudFN1YmplY3Q9bnVsbCx0aGlzLmNvbXBvdW5kQ291bnQ9MCx0aGlzLmVkZ2VDb3VudD0wLHRoaXMubGVuZ3RoPTAsZT09bnVsbHx8WnQoZSkmJmUubWF0Y2goL15ccyokLyl8fCh3byhlKT90aGlzLmFkZFF1ZXJ5KHtjaGVja3M6W3t0eXBlOk10LkNPTExFQ1RJT04sdmFsdWU6ZS5jb2xsZWN0aW9uKCl9XX0pOm5pKGUpP3RoaXMuYWRkUXVlcnkoe2NoZWNrczpbe3R5cGU6TXQuRklMVEVSLHZhbHVlOmV9XX0pOlp0KGUpP3RoaXMucGFyc2UoZSl8fCh0aGlzLmludmFsaWQ9ITApOmRpKCJBIHNlbGVjdG9yIG11c3QgYmUgY3JlYXRlZCBmcm9tIGEgc3RyaW5nOyBmb3VuZCAiKSl9LCJTZWxlY3RvciIpLEJmPVBmLnByb3RvdHlwZTtbTVplLHpaZV0uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gaXIoQmYsdCl9KTtCZi50ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5wdXRUZXh0fTtCZi5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofTtCZi5lcT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpc1t0XX07QmYuc2FtZVRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIXRoaXMuaW52YWxpZCYmIXQuaW52YWxpZCYmdGhpcy50ZXh0KCk9PT10LnRleHQoKX07QmYuYWRkUXVlcnk9ZnVuY3Rpb24odCl7dGhpc1t0aGlzLmxlbmd0aCsrXT10fTtCZi5zZWxlY3Rvcj1CZi50b1N0cmluZztSZj17YWxsQXJlOm8oZnVuY3Rpb24oZSl7dmFyIHI9bmV3IFBmKGUpO3JldHVybiB0aGlzLmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiByLm1hdGNoZXMobil9KX0sImFsbEFyZSIpLGlzOm8oZnVuY3Rpb24oZSl7dmFyIHI9bmV3IFBmKGUpO3JldHVybiB0aGlzLnNvbWUoZnVuY3Rpb24obil7cmV0dXJuIHIubWF0Y2hlcyhuKX0pfSwiaXMiKSxzb21lOm8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MDtuPHRoaXMubGVuZ3RoO24rKyl7dmFyIGk9cj9lLmFwcGx5KHIsW3RoaXNbbl0sbix0aGlzXSk6ZSh0aGlzW25dLG4sdGhpcyk7aWYoaSlyZXR1cm4hMH1yZXR1cm4hMX0sInNvbWUiKSxldmVyeTpvKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPTA7bjx0aGlzLmxlbmd0aDtuKyspe3ZhciBpPXI/ZS5hcHBseShyLFt0aGlzW25dLG4sdGhpc10pOmUodGhpc1tuXSxuLHRoaXMpO2lmKCFpKXJldHVybiExfXJldHVybiEwfSwiZXZlcnkiKSxzYW1lOm8oZnVuY3Rpb24oZSl7aWYodGhpcz09PWUpcmV0dXJuITA7ZT10aGlzLmN5KCkuY29sbGVjdGlvbihlKTt2YXIgcj10aGlzLmxlbmd0aCxuPWUubGVuZ3RoO3JldHVybiByIT09bj8hMTpyPT09MT90aGlzWzBdPT09ZVswXTp0aGlzLmV2ZXJ5KGZ1bmN0aW9uKGkpe3JldHVybiBlLmhhc0VsZW1lbnRXaXRoSWQoaS5pZCgpKX0pfSwic2FtZSIpLGFueVNhbWU6byhmdW5jdGlvbihlKXtyZXR1cm4gZT10aGlzLmN5KCkuY29sbGVjdGlvbihlKSx0aGlzLnNvbWUoZnVuY3Rpb24ocil7cmV0dXJuIGUuaGFzRWxlbWVudFdpdGhJZChyLmlkKCkpfSl9LCJhbnlTYW1lIiksYWxsQXJlTmVpZ2hib3JzOm8oZnVuY3Rpb24oZSl7ZT10aGlzLmN5KCkuY29sbGVjdGlvbihlKTt2YXIgcj10aGlzLm5laWdoYm9yaG9vZCgpO3JldHVybiBlLmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiByLmhhc0VsZW1lbnRXaXRoSWQobi5pZCgpKX0pfSwiYWxsQXJlTmVpZ2hib3JzIiksY29udGFpbnM6byhmdW5jdGlvbihlKXtlPXRoaXMuY3koKS5jb2xsZWN0aW9uKGUpO3ZhciByPXRoaXM7cmV0dXJuIGUuZXZlcnkoZnVuY3Rpb24obil7cmV0dXJuIHIuaGFzRWxlbWVudFdpdGhJZChuLmlkKCkpfSl9LCJjb250YWlucyIpfTtSZi5hbGxBcmVOZWlnaGJvdXJzPVJmLmFsbEFyZU5laWdoYm9ycztSZi5oYXM9UmYuY29udGFpbnM7UmYuZXF1YWw9UmYuZXF1YWxzPVJmLnNhbWU7aGw9byhmdW5jdGlvbihlLHIpe3JldHVybiBvKGZ1bmN0aW9uKGksYSxzLGwpe3ZhciB1PWksaD10aGlzLGY7aWYodT09bnVsbD9mPSIiOndvKHUpJiZ1Lmxlbmd0aD09PTEmJihmPXUuaWQoKSksaC5sZW5ndGg9PT0xJiZmKXt2YXIgZD1oWzBdLl9wcml2YXRlLHA9ZC50cmF2ZXJzYWxDYWNoZT1kLnRyYXZlcnNhbENhY2hlfHx7fSxtPXBbcl09cFtyXXx8W10sZz1qMChmKSx5PW1bZ107cmV0dXJuIHl8fChtW2ddPWUuY2FsbChoLGksYSxzLGwpKX1lbHNlIHJldHVybiBlLmNhbGwoaCxpLGEscyxsKX0sInRyYXZlcnNhbENhY2hlIil9LCJjYWNoZSIpLEUxPXtwYXJlbnQ6byhmdW5jdGlvbihlKXt2YXIgcj1bXTtpZih0aGlzLmxlbmd0aD09PTEpe3ZhciBuPXRoaXNbMF0uX3ByaXZhdGUucGFyZW50O2lmKG4pcmV0dXJuIG59Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aDtpKyspe3ZhciBhPXRoaXNbaV0scz1hLl9wcml2YXRlLnBhcmVudDtzJiZyLnB1c2gocyl9cmV0dXJuIHRoaXMuc3Bhd24ociwhMCkuZmlsdGVyKGUpfSwicGFyZW50IikscGFyZW50czpvKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1bXSxuPXRoaXMucGFyZW50KCk7bi5ub25lbXB0eSgpOyl7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPW5baV07ci5wdXNoKGEpfW49bi5wYXJlbnQoKX1yZXR1cm4gdGhpcy5zcGF3bihyLCEwKS5maWx0ZXIoZSl9LCJwYXJlbnRzIiksY29tbW9uQW5jZXN0b3JzOm8oZnVuY3Rpb24oZSl7Zm9yKHZhciByLG49MDtuPHRoaXMubGVuZ3RoO24rKyl7dmFyIGk9dGhpc1tuXSxhPWkucGFyZW50cygpO3I9cnx8YSxyPXIuaW50ZXJzZWN0KGEpfXJldHVybiByLmZpbHRlcihlKX0sImNvbW1vbkFuY2VzdG9ycyIpLG9ycGhhbnM6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zdGRGaWx0ZXIoZnVuY3Rpb24ocil7cmV0dXJuIHIuaXNPcnBoYW4oKX0pLmZpbHRlcihlKX0sIm9ycGhhbnMiKSxub25vcnBoYW5zOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc3RkRmlsdGVyKGZ1bmN0aW9uKHIpe3JldHVybiByLmlzQ2hpbGQoKX0pLmZpbHRlcihlKX0sIm5vbm9ycGhhbnMiKSxjaGlsZHJlbjpobChmdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0wO3I8dGhpcy5sZW5ndGg7cisrKWZvcih2YXIgbj10aGlzW3JdLGk9bi5fcHJpdmF0ZS5jaGlsZHJlbixhPTA7YTxpLmxlbmd0aDthKyspZS5wdXNoKGlbYV0pO3JldHVybiB0aGlzLnNwYXduKGUsITApLmZpbHRlcih0KX0sImNoaWxkcmVuIiksc2libGluZ3M6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5jaGlsZHJlbigpLm5vdCh0aGlzKS5maWx0ZXIoZSl9LCJzaWJsaW5ncyIpLGlzUGFyZW50Om8oZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO2lmKGUpcmV0dXJuIGUuaXNOb2RlKCkmJmUuX3ByaXZhdGUuY2hpbGRyZW4ubGVuZ3RoIT09MH0sImlzUGFyZW50IiksaXNDaGlsZGxlc3M6byhmdW5jdGlvbigpe3ZhciBlPXRoaXNbMF07aWYoZSlyZXR1cm4gZS5pc05vZGUoKSYmZS5fcHJpdmF0ZS5jaGlsZHJlbi5sZW5ndGg9PT0wfSwiaXNDaGlsZGxlc3MiKSxpc0NoaWxkOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO2lmKGUpcmV0dXJuIGUuaXNOb2RlKCkmJmUuX3ByaXZhdGUucGFyZW50IT1udWxsfSwiaXNDaGlsZCIpLGlzT3JwaGFuOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO2lmKGUpcmV0dXJuIGUuaXNOb2RlKCkmJmUuX3ByaXZhdGUucGFyZW50PT1udWxsfSwiaXNPcnBoYW4iKSxkZXNjZW5kYW50czpvKGZ1bmN0aW9uKGUpe3ZhciByPVtdO2Z1bmN0aW9uIG4oaSl7Zm9yKHZhciBhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV07ci5wdXNoKHMpLHMuY2hpbGRyZW4oKS5ub25lbXB0eSgpJiZuKHMuY2hpbGRyZW4oKSl9fXJldHVybiBvKG4sImFkZCIpLG4odGhpcy5jaGlsZHJlbigpKSx0aGlzLnNwYXduKHIsITApLmZpbHRlcihlKX0sImRlc2NlbmRhbnRzIil9O28oZ0IsImZvckVhY2hDb21wb3VuZCIpO28oTmdlLCJhZGRDaGlsZHJlbiIpO0UxLmZvckVhY2hEb3duPWZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMDtyZXR1cm4gZ0IodGhpcyx0LGUsTmdlKX07byhSZ2UsImFkZFBhcmVudCIpO0UxLmZvckVhY2hVcD1mdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7cmV0dXJuIGdCKHRoaXMsdCxlLFJnZSl9O28oR1plLCJhZGRQYXJlbnRBbmRDaGlsZHJlbiIpO0UxLmZvckVhY2hVcEFuZERvd249ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwO3JldHVybiBnQih0aGlzLHQsZSxHWmUpfTtFMS5hbmNlc3RvcnM9RTEucGFyZW50cztjYj1NZ2U9e2RhdGE6c24uZGF0YSh7ZmllbGQ6ImRhdGEiLGJpbmRpbmdFdmVudDoiZGF0YSIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6ImRhdGEiLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLGFsbG93R2V0dGluZzohMCxpbW11dGFibGVLZXlzOntpZDohMCxzb3VyY2U6ITAsdGFyZ2V0OiEwLHBhcmVudDohMH0sdXBkYXRlU3R5bGU6ITB9KSxyZW1vdmVEYXRhOnNuLnJlbW92ZURhdGEoe2ZpZWxkOiJkYXRhIixldmVudDoiZGF0YSIsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsdHJpZ2dlckV2ZW50OiEwLGltbXV0YWJsZUtleXM6e2lkOiEwLHNvdXJjZTohMCx0YXJnZXQ6ITAscGFyZW50OiEwfSx1cGRhdGVTdHlsZTohMH0pLHNjcmF0Y2g6c24uZGF0YSh7ZmllbGQ6InNjcmF0Y2giLGJpbmRpbmdFdmVudDoic2NyYXRjaCIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6InNjcmF0Y2giLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLGFsbG93R2V0dGluZzohMCx1cGRhdGVTdHlsZTohMH0pLHJlbW92ZVNjcmF0Y2g6c24ucmVtb3ZlRGF0YSh7ZmllbGQ6InNjcmF0Y2giLGV2ZW50OiJzY3JhdGNoIix0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIix0cmlnZ2VyRXZlbnQ6ITAsdXBkYXRlU3R5bGU6ITB9KSxyc2NyYXRjaDpzbi5kYXRhKHtmaWVsZDoicnNjcmF0Y2giLGFsbG93QmluZGluZzohMSxhbGxvd1NldHRpbmc6ITAsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITEsYWxsb3dHZXR0aW5nOiEwfSkscmVtb3ZlUnNjcmF0Y2g6c24ucmVtb3ZlRGF0YSh7ZmllbGQ6InJzY3JhdGNoIix0cmlnZ2VyRXZlbnQ6ITF9KSxpZDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpc1swXTtpZihlKXJldHVybiBlLl9wcml2YXRlLmRhdGEuaWR9LCJpZCIpfTtjYi5hdHRyPWNiLmRhdGE7Y2IucmVtb3ZlQXR0cj1jYi5yZW1vdmVEYXRhOyRaZT1NZ2UsWTY9e307byhSUCwiZGVmaW5lRGVncmVlRnVuY3Rpb24iKTtpcihZNix7ZGVncmVlOlJQKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc291cmNlKCkuc2FtZShlLnRhcmdldCgpKT8yOjF9KSxpbmRlZ3JlZTpSUChmdW5jdGlvbih0LGUpe3JldHVybiBlLnRhcmdldCgpLnNhbWUodCk/MTowfSksb3V0ZGVncmVlOlJQKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc291cmNlKCkuc2FtZSh0KT8xOjB9KX0pO28odTEsImRlZmluZURlZ3JlZUJvdW5kc0Z1bmN0aW9uIik7aXIoWTYse21pbkRlZ3JlZTp1MSgiZGVncmVlIixmdW5jdGlvbih0LGUpe3JldHVybiB0PGV9KSxtYXhEZWdyZWU6dTEoImRlZ3JlZSIsZnVuY3Rpb24odCxlKXtyZXR1cm4gdD5lfSksbWluSW5kZWdyZWU6dTEoImluZGVncmVlIixmdW5jdGlvbih0LGUpe3JldHVybiB0PGV9KSxtYXhJbmRlZ3JlZTp1MSgiaW5kZWdyZWUiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+ZX0pLG1pbk91dGRlZ3JlZTp1MSgib3V0ZGVncmVlIixmdW5jdGlvbih0LGUpe3JldHVybiB0PGV9KSxtYXhPdXRkZWdyZWU6dTEoIm91dGRlZ3JlZSIsZnVuY3Rpb24odCxlKXtyZXR1cm4gdD5lfSl9KTtpcihZNix7dG90YWxEZWdyZWU6byhmdW5jdGlvbihlKXtmb3IodmFyIHI9MCxuPXRoaXMubm9kZXMoKSxpPTA7aTxuLmxlbmd0aDtpKyspcis9bltpXS5kZWdyZWUoZSk7cmV0dXJuIHJ9LCJ0b3RhbERlZ3JlZSIpfSk7T2dlPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT1lW2ldO2lmKCFhLmxvY2tlZCgpKXt2YXIgcz1hLl9wcml2YXRlLnBvc2l0aW9uLGw9e3g6ci54IT1udWxsP3IueC1zLng6MCx5OnIueSE9bnVsbD9yLnktcy55OjB9O2EuaXNQYXJlbnQoKSYmIShsLng9PT0wJiZsLnk9PT0wKSYmYS5jaGlsZHJlbigpLnNoaWZ0KGwsbiksYS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKX19fSwiYmVmb3JlUG9zaXRpb25TZXQiKSxpbWU9e2ZpZWxkOiJwb3NpdGlvbiIsYmluZGluZ0V2ZW50OiJwb3NpdGlvbiIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6InBvc2l0aW9uIixzZXR0aW5nVHJpZ2dlcnNFdmVudDohMCx0cmlnZ2VyRm5OYW1lOiJlbWl0QW5kTm90aWZ5IixhbGxvd0dldHRpbmc6ITAsdmFsaWRLZXlzOlsieCIsInkiXSxiZWZvcmVHZXQ6byhmdW5jdGlvbihlKXtlLnVwZGF0ZUNvbXBvdW5kQm91bmRzKCl9LCJiZWZvcmVHZXQiKSxiZWZvcmVTZXQ6byhmdW5jdGlvbihlLHIpe09nZShlLHIsITEpfSwiYmVmb3JlU2V0Iiksb25TZXQ6byhmdW5jdGlvbihlKXtlLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpfSwib25TZXQiKSxjYW5TZXQ6byhmdW5jdGlvbihlKXtyZXR1cm4hZS5sb2NrZWQoKX0sImNhblNldCIpfTtabD1JZ2U9e3Bvc2l0aW9uOnNuLmRhdGEoaW1lKSxzaWxlbnRQb3NpdGlvbjpzbi5kYXRhKGlyKHt9LGltZSx7YWxsb3dCaW5kaW5nOiExLGFsbG93U2V0dGluZzohMCxzZXR0aW5nVHJpZ2dlcnNFdmVudDohMSxhbGxvd0dldHRpbmc6ITEsYmVmb3JlU2V0Om8oZnVuY3Rpb24oZSxyKXtPZ2UoZSxyLCEwKX0sImJlZm9yZVNldCIpLG9uU2V0Om8oZnVuY3Rpb24oZSl7ZS5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKX0sIm9uU2V0Iil9KSkscG9zaXRpb25zOm8oZnVuY3Rpb24oZSxyKXtpZihVcihlKSlyP3RoaXMuc2lsZW50UG9zaXRpb24oZSk6dGhpcy5wb3NpdGlvbihlKTtlbHNlIGlmKG5pKGUpKXt2YXIgbj1lLGk9dGhpcy5jeSgpO2kuc3RhcnRCYXRjaCgpO2Zvcih2YXIgYT0wO2E8dGhpcy5sZW5ndGg7YSsrKXt2YXIgcz10aGlzW2FdLGw9dm9pZCAwOyhsPW4ocyxhKSkmJihyP3Muc2lsZW50UG9zaXRpb24obCk6cy5wb3NpdGlvbihsKSl9aS5lbmRCYXRjaCgpfXJldHVybiB0aGlzfSwicG9zaXRpb25zIiksc2lsZW50UG9zaXRpb25zOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucG9zaXRpb25zKGUsITApfSwic2lsZW50UG9zaXRpb25zIiksc2hpZnQ6byhmdW5jdGlvbihlLHIsbil7dmFyIGk7aWYoVXIoZSk/KGk9e3g6eHQoZS54KT9lLng6MCx5Onh0KGUueSk/ZS55OjB9LG49cik6WnQoZSkmJnh0KHIpJiYoaT17eDowLHk6MH0saVtlXT1yKSxpIT1udWxsKXt2YXIgYT10aGlzLmN5KCk7YS5zdGFydEJhdGNoKCk7Zm9yKHZhciBzPTA7czx0aGlzLmxlbmd0aDtzKyspe3ZhciBsPXRoaXNbc107aWYoIShhLmhhc0NvbXBvdW5kTm9kZXMoKSYmbC5pc0NoaWxkKCkmJmwuYW5jZXN0b3JzKCkuYW55U2FtZSh0aGlzKSkpe3ZhciB1PWwucG9zaXRpb24oKSxoPXt4OnUueCtpLngseTp1LnkraS55fTtuP2wuc2lsZW50UG9zaXRpb24oaCk6bC5wb3NpdGlvbihoKX19YS5lbmRCYXRjaCgpfXJldHVybiB0aGlzfSwic2hpZnQiKSxzaWxlbnRTaGlmdDpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIFVyKGUpP3RoaXMuc2hpZnQoZSwhMCk6WnQoZSkmJnh0KHIpJiZ0aGlzLnNoaWZ0KGUsciwhMCksdGhpc30sInNpbGVudFNoaWZ0IikscmVuZGVyZWRQb3NpdGlvbjpvKGZ1bmN0aW9uKGUscil7dmFyIG49dGhpc1swXSxpPXRoaXMuY3koKSxhPWkuem9vbSgpLHM9aS5wYW4oKSxsPVVyKGUpP2U6dm9pZCAwLHU9bCE9PXZvaWQgMHx8ciE9PXZvaWQgMCYmWnQoZSk7aWYobiYmbi5pc05vZGUoKSlpZih1KWZvcih2YXIgaD0wO2g8dGhpcy5sZW5ndGg7aCsrKXt2YXIgZj10aGlzW2hdO3IhPT12b2lkIDA/Zi5wb3NpdGlvbihlLChyLXNbZV0pL2EpOmwhPT12b2lkIDAmJmYucG9zaXRpb24ob2dlKGwsYSxzKSl9ZWxzZXt2YXIgZD1uLnBvc2l0aW9uKCk7cmV0dXJuIGw9JDYoZCxhLHMpLGU9PT12b2lkIDA/bDpsW2VdfWVsc2UgaWYoIXUpcmV0dXJuO3JldHVybiB0aGlzfSwicmVuZGVyZWRQb3NpdGlvbiIpLHJlbGF0aXZlUG9zaXRpb246byhmdW5jdGlvbihlLHIpe3ZhciBuPXRoaXNbMF0saT10aGlzLmN5KCksYT1VcihlKT9lOnZvaWQgMCxzPWEhPT12b2lkIDB8fHIhPT12b2lkIDAmJlp0KGUpLGw9aS5oYXNDb21wb3VuZE5vZGVzKCk7aWYobiYmbi5pc05vZGUoKSlpZihzKWZvcih2YXIgdT0wO3U8dGhpcy5sZW5ndGg7dSsrKXt2YXIgaD10aGlzW3VdLGY9bD9oLnBhcmVudCgpOm51bGwsZD1mJiZmLmxlbmd0aD4wLHA9ZDtkJiYoZj1mWzBdKTt2YXIgbT1wP2YucG9zaXRpb24oKTp7eDowLHk6MH07ciE9PXZvaWQgMD9oLnBvc2l0aW9uKGUscittW2VdKTphIT09dm9pZCAwJiZoLnBvc2l0aW9uKHt4OmEueCttLngseTphLnkrbS55fSl9ZWxzZXt2YXIgZz1uLnBvc2l0aW9uKCkseT1sP24ucGFyZW50KCk6bnVsbCx2PXkmJnkubGVuZ3RoPjAseD12O3YmJih5PXlbMF0pO3ZhciBiPXg/eS5wb3NpdGlvbigpOnt4OjAseTowfTtyZXR1cm4gYT17eDpnLngtYi54LHk6Zy55LWIueX0sZT09PXZvaWQgMD9hOmFbZV19ZWxzZSBpZighcylyZXR1cm47cmV0dXJuIHRoaXN9LCJyZWxhdGl2ZVBvc2l0aW9uIil9O1psLm1vZGVsUG9zaXRpb249WmwucG9pbnQ9WmwucG9zaXRpb247WmwubW9kZWxQb3NpdGlvbnM9WmwucG9pbnRzPVpsLnBvc2l0aW9ucztabC5yZW5kZXJlZFBvaW50PVpsLnJlbmRlcmVkUG9zaXRpb247WmwucmVsYXRpdmVQb2ludD1abC5yZWxhdGl2ZVBvc2l0aW9uO1ZaZT1JZ2U7YjE9emY9e307emYucmVuZGVyZWRCb3VuZGluZ0JveD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmJvdW5kaW5nQm94KHQpLHI9dGhpcy5jeSgpLG49ci56b29tKCksaT1yLnBhbigpLGE9ZS54MSpuK2kueCxzPWUueDIqbitpLngsbD1lLnkxKm4raS55LHU9ZS55MipuK2kueTtyZXR1cm57eDE6YSx4MjpzLHkxOmwseTI6dSx3OnMtYSxoOnUtbH19O3pmLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZT1mdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMSxlPXRoaXMuY3koKTtyZXR1cm4hZS5zdHlsZUVuYWJsZWQoKXx8IWUuaGFzQ29tcG91bmROb2RlcygpP3RoaXM6KHRoaXMuZm9yRWFjaFVwKGZ1bmN0aW9uKHIpe2lmKHIuaXNQYXJlbnQoKSl7dmFyIG49ci5fcHJpdmF0ZTtuLmNvbXBvdW5kQm91bmRzQ2xlYW49ITEsbi5iYkNhY2hlPW51bGwsdHx8ci5lbWl0QW5kTm90aWZ5KCJib3VuZHMiKX19KSx0aGlzKX07emYudXBkYXRlQ29tcG91bmRCb3VuZHM9ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06ITEsZT10aGlzLmN5KCk7aWYoIWUuc3R5bGVFbmFibGVkKCl8fCFlLmhhc0NvbXBvdW5kTm9kZXMoKSlyZXR1cm4gdGhpcztpZighdCYmZS5iYXRjaGluZygpKXJldHVybiB0aGlzO2Z1bmN0aW9uIHIocyl7aWYoIXMuaXNQYXJlbnQoKSlyZXR1cm47dmFyIGw9cy5fcHJpdmF0ZSx1PXMuY2hpbGRyZW4oKSxoPXMucHN0eWxlKCJjb21wb3VuZC1zaXppbmctd3J0LWxhYmVscyIpLnZhbHVlPT09ImluY2x1ZGUiLGY9e3dpZHRoOnt2YWw6cy5wc3R5bGUoIm1pbi13aWR0aCIpLnBmVmFsdWUsbGVmdDpzLnBzdHlsZSgibWluLXdpZHRoLWJpYXMtbGVmdCIpLHJpZ2h0OnMucHN0eWxlKCJtaW4td2lkdGgtYmlhcy1yaWdodCIpfSxoZWlnaHQ6e3ZhbDpzLnBzdHlsZSgibWluLWhlaWdodCIpLnBmVmFsdWUsdG9wOnMucHN0eWxlKCJtaW4taGVpZ2h0LWJpYXMtdG9wIiksYm90dG9tOnMucHN0eWxlKCJtaW4taGVpZ2h0LWJpYXMtYm90dG9tIil9fSxkPXUuYm91bmRpbmdCb3goe2luY2x1ZGVMYWJlbHM6aCxpbmNsdWRlT3ZlcmxheXM6ITEsdXNlQ2FjaGU6ITF9KSxwPWwucG9zaXRpb247KGQudz09PTB8fGQuaD09PTApJiYoZD17dzpzLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLGg6cy5wc3R5bGUoImhlaWdodCIpLnBmVmFsdWV9LGQueDE9cC54LWQudy8yLGQueDI9cC54K2Qudy8yLGQueTE9cC55LWQuaC8yLGQueTI9cC55K2QuaC8yKTtmdW5jdGlvbiBtKEEsSSxEKXt2YXIgaz0wLFI9MCxDPUkrRDtyZXR1cm4gQT4wJiZDPjAmJihrPUkvQypBLFI9RC9DKkEpLHtiaWFzRGlmZjprLGJpYXNDb21wbGVtZW50RGlmZjpSfX1vKG0sImNvbXB1dGVCaWFzVmFsdWVzIik7ZnVuY3Rpb24gZyhBLEksRCxrKXtpZihELnVuaXRzPT09IiUiKXN3aXRjaChrKXtjYXNlIndpZHRoIjpyZXR1cm4gQT4wP0QucGZWYWx1ZSpBOjA7Y2FzZSJoZWlnaHQiOnJldHVybiBJPjA/RC5wZlZhbHVlKkk6MDtjYXNlImF2ZXJhZ2UiOnJldHVybiBBPjAmJkk+MD9ELnBmVmFsdWUqKEErSSkvMjowO2Nhc2UibWluIjpyZXR1cm4gQT4wJiZJPjA/QT5JP0QucGZWYWx1ZSpJOkQucGZWYWx1ZSpBOjA7Y2FzZSJtYXgiOnJldHVybiBBPjAmJkk+MD9BPkk/RC5wZlZhbHVlKkE6RC5wZlZhbHVlKkk6MDtkZWZhdWx0OnJldHVybiAwfWVsc2UgcmV0dXJuIEQudW5pdHM9PT0icHgiP0QucGZWYWx1ZTowfW8oZywiY29tcHV0ZVBhZGRpbmdWYWx1ZXMiKTt2YXIgeT1mLndpZHRoLmxlZnQudmFsdWU7Zi53aWR0aC5sZWZ0LnVuaXRzPT09InB4IiYmZi53aWR0aC52YWw+MCYmKHk9eSoxMDAvZi53aWR0aC52YWwpO3ZhciB2PWYud2lkdGgucmlnaHQudmFsdWU7Zi53aWR0aC5yaWdodC51bml0cz09PSJweCImJmYud2lkdGgudmFsPjAmJih2PXYqMTAwL2Yud2lkdGgudmFsKTt2YXIgeD1mLmhlaWdodC50b3AudmFsdWU7Zi5oZWlnaHQudG9wLnVuaXRzPT09InB4IiYmZi5oZWlnaHQudmFsPjAmJih4PXgqMTAwL2YuaGVpZ2h0LnZhbCk7dmFyIGI9Zi5oZWlnaHQuYm90dG9tLnZhbHVlO2YuaGVpZ2h0LmJvdHRvbS51bml0cz09PSJweCImJmYuaGVpZ2h0LnZhbD4wJiYoYj1iKjEwMC9mLmhlaWdodC52YWwpO3ZhciB3PW0oZi53aWR0aC52YWwtZC53LHksdiksXz13LmJpYXNEaWZmLFQ9dy5iaWFzQ29tcGxlbWVudERpZmYsRT1tKGYuaGVpZ2h0LnZhbC1kLmgseCxiKSxMPUUuYmlhc0RpZmYsUz1FLmJpYXNDb21wbGVtZW50RGlmZjtsLmF1dG9QYWRkaW5nPWcoZC53LGQuaCxzLnBzdHlsZSgicGFkZGluZyIpLHMucHN0eWxlKCJwYWRkaW5nLXJlbGF0aXZlLXRvIikudmFsdWUpLGwuYXV0b1dpZHRoPU1hdGgubWF4KGQudyxmLndpZHRoLnZhbCkscC54PSgtXytkLngxK2QueDIrVCkvMixsLmF1dG9IZWlnaHQ9TWF0aC5tYXgoZC5oLGYuaGVpZ2h0LnZhbCkscC55PSgtTCtkLnkxK2QueTIrUykvMn1vKHIsInVwZGF0ZSIpO2Zvcih2YXIgbj0wO248dGhpcy5sZW5ndGg7bisrKXt2YXIgaT10aGlzW25dLGE9aS5fcHJpdmF0ZTsoIWEuY29tcG91bmRCb3VuZHNDbGVhbnx8dCkmJihyKGkpLGUuYmF0Y2hpbmcoKXx8KGEuY29tcG91bmRCb3VuZHNDbGVhbj0hMCkpfXJldHVybiB0aGlzfTt1bD1vKGZ1bmN0aW9uKGUpe3JldHVybiBlPT09MS8wfHxlPT09LTEvMD8wOmV9LCJub25pbmYiKSxLbD1vKGZ1bmN0aW9uKGUscixuLGksYSl7aS1yPT09MHx8YS1uPT09MHx8cj09bnVsbHx8bj09bnVsbHx8aT09bnVsbHx8YT09bnVsbHx8KGUueDE9cjxlLngxP3I6ZS54MSxlLngyPWk+ZS54Mj9pOmUueDIsZS55MT1uPGUueTE/bjplLnkxLGUueTI9YT5lLnkyP2E6ZS55MixlLnc9ZS54Mi1lLngxLGUuaD1lLnkyLWUueTEpfSwidXBkYXRlQm91bmRzIiksSDA9byhmdW5jdGlvbihlLHIpe3JldHVybiByPT1udWxsP2U6S2woZSxyLngxLHIueTEsci54MixyLnkyKX0sInVwZGF0ZUJvdW5kc0Zyb21Cb3giKSxZeD1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gUWwoZSxyLG4pfSwicHJlZml4ZWRQcm9wZXJ0eSIpLGg2PW8oZnVuY3Rpb24oZSxyLG4pe2lmKCFyLmN5KCkuaGVhZGxlc3MoKSl7dmFyIGk9ci5fcHJpdmF0ZSxhPWkucnN0eWxlLHM9YS5hcnJvd1dpZHRoLzIsbD1yLnBzdHlsZShuKyItYXJyb3ctc2hhcGUiKS52YWx1ZSx1LGg7aWYobCE9PSJub25lIil7bj09PSJzb3VyY2UiPyh1PWEuc3JjWCxoPWEuc3JjWSk6bj09PSJ0YXJnZXQiPyh1PWEudGd0WCxoPWEudGd0WSk6KHU9YS5taWRYLGg9YS5taWRZKTt2YXIgZj1pLmFycm93Qm91bmRzPWkuYXJyb3dCb3VuZHN8fHt9LGQ9ZltuXT1mW25dfHx7fTtkLngxPXUtcyxkLnkxPWgtcyxkLngyPXUrcyxkLnkyPWgrcyxkLnc9ZC54Mi1kLngxLGQuaD1kLnkyLWQueTEseTYoZCwxKSxLbChlLGQueDEsZC55MSxkLngyLGQueTIpfX19LCJ1cGRhdGVCb3VuZHNGcm9tQXJyb3ciKSxNUD1vKGZ1bmN0aW9uKGUscixuKXtpZighci5jeSgpLmhlYWRsZXNzKCkpe3ZhciBpO24/aT1uKyItIjppPSIiO3ZhciBhPXIuX3ByaXZhdGUscz1hLnJzdHlsZSxsPXIucHN0eWxlKGkrImxhYmVsIikuc3RyVmFsdWU7aWYobCl7dmFyIHU9ci5wc3R5bGUoInRleHQtaGFsaWduIiksaD1yLnBzdHlsZSgidGV4dC12YWxpZ24iKSxmPVl4KHMsImxhYmVsV2lkdGgiLG4pLGQ9WXgocywibGFiZWxIZWlnaHQiLG4pLHA9WXgocywibGFiZWxYIixuKSxtPVl4KHMsImxhYmVsWSIsbiksZz1yLnBzdHlsZShpKyJ0ZXh0LW1hcmdpbi14IikucGZWYWx1ZSx5PXIucHN0eWxlKGkrInRleHQtbWFyZ2luLXkiKS5wZlZhbHVlLHY9ci5pc0VkZ2UoKSx4PXIucHN0eWxlKGkrInRleHQtcm90YXRpb24iKSxiPXIucHN0eWxlKCJ0ZXh0LW91dGxpbmUtd2lkdGgiKS5wZlZhbHVlLHc9ci5wc3R5bGUoInRleHQtYm9yZGVyLXdpZHRoIikucGZWYWx1ZSxfPXcvMixUPXIucHN0eWxlKCJ0ZXh0LWJhY2tncm91bmQtcGFkZGluZyIpLnBmVmFsdWUsRT0yLEw9ZCxTPWYsQT1TLzIsST1MLzIsRCxrLFIsQztpZih2KUQ9cC1BLGs9cCtBLFI9bS1JLEM9bStJO2Vsc2V7c3dpdGNoKHUudmFsdWUpe2Nhc2UibGVmdCI6RD1wLVMsaz1wO2JyZWFrO2Nhc2UiY2VudGVyIjpEPXAtQSxrPXArQTticmVhaztjYXNlInJpZ2h0IjpEPXAsaz1wK1M7YnJlYWt9c3dpdGNoKGgudmFsdWUpe2Nhc2UidG9wIjpSPW0tTCxDPW07YnJlYWs7Y2FzZSJjZW50ZXIiOlI9bS1JLEM9bStJO2JyZWFrO2Nhc2UiYm90dG9tIjpSPW0sQz1tK0w7YnJlYWt9fUQrPWctTWF0aC5tYXgoYixfKS1ULUUsays9ZytNYXRoLm1heChiLF8pK1QrRSxSKz15LU1hdGgubWF4KGIsXyktVC1FLEMrPXkrTWF0aC5tYXgoYixfKStUK0U7dmFyIE89bnx8Im1haW4iLE49YS5sYWJlbEJvdW5kcyxQPU5bT109TltPXXx8e307UC54MT1ELFAueTE9UixQLngyPWssUC55Mj1DLFAudz1rLUQsUC5oPUMtUjt2YXIgRj12JiZ4LnN0clZhbHVlPT09ImF1dG9yb3RhdGUiLEI9eC5wZlZhbHVlIT1udWxsJiZ4LnBmVmFsdWUhPT0wO2lmKEZ8fEIpe3ZhciBHPUY/WXgoYS5yc3R5bGUsImxhYmVsQW5nbGUiLG4pOngucGZWYWx1ZSx6PU1hdGguY29zKEcpLFc9TWF0aC5zaW4oRyksWj0oRCtrKS8yLGo9KFIrQykvMjtpZighdil7c3dpdGNoKHUudmFsdWUpe2Nhc2UibGVmdCI6Wj1rO2JyZWFrO2Nhc2UicmlnaHQiOlo9RDticmVha31zd2l0Y2goaC52YWx1ZSl7Y2FzZSJ0b3AiOmo9QzticmVhaztjYXNlImJvdHRvbSI6aj1SO2JyZWFrfX12YXIgb2U9byhmdW5jdGlvbih1ZSxjZSl7cmV0dXJuIHVlPXVlLVosY2U9Y2Utaix7eDp1ZSp6LWNlKlcrWix5OnVlKlcrY2UqeitqfX0sInJvdGF0ZSIpLEs9b2UoRCxSKSxlZT1vZShELEMpLEo9b2UoayxSKSxIPW9lKGssQyk7RD1NYXRoLm1pbihLLngsZWUueCxKLngsSC54KSxrPU1hdGgubWF4KEsueCxlZS54LEoueCxILngpLFI9TWF0aC5taW4oSy55LGVlLnksSi55LEgueSksQz1NYXRoLm1heChLLnksZWUueSxKLnksSC55KX12YXIgcT1PKyJSb3QiLFE9TltxXT1OW3FdfHx7fTtRLngxPUQsUS55MT1SLFEueDI9ayxRLnkyPUMsUS53PWstRCxRLmg9Qy1SLEtsKGUsRCxSLGssQyksS2woYS5sYWJlbEJvdW5kcy5hbGwsRCxSLGssQyl9cmV0dXJuIGV9fSwidXBkYXRlQm91bmRzRnJvbUxhYmVsIiksVVplPW8oZnVuY3Rpb24oZSxyKXtpZighci5jeSgpLmhlYWRsZXNzKCkpe3ZhciBuPXIucHN0eWxlKCJvdXRsaW5lLW9wYWNpdHkiKS52YWx1ZSxpPXIucHN0eWxlKCJvdXRsaW5lLXdpZHRoIikudmFsdWU7aWYobj4wJiZpPjApe3ZhciBhPXIucHN0eWxlKCJvdXRsaW5lLW9mZnNldCIpLnZhbHVlLHM9ci5wc3R5bGUoInNoYXBlIikudmFsdWUsbD1pK2EsdT0oZS53K2wqMikvZS53LGg9KGUuaCtsKjIpL2UuaCxmPTAsZD0wO1siZGlhbW9uZCIsInBlbnRhZ29uIiwicm91bmQtdHJpYW5nbGUiXS5pbmNsdWRlcyhzKT8odT0oZS53K2wqMi40KS9lLncsZD0tbC8zLjYpOlsiY29uY2F2ZS1oZXhhZ29uIiwicmhvbWJvaWQiLCJyaWdodC1yaG9tYm9pZCJdLmluY2x1ZGVzKHMpP3U9KGUudytsKjIuNCkvZS53OnM9PT0ic3RhciI/KHU9KGUudytsKjIuOCkvZS53LGg9KGUuaCtsKjIuNikvZS5oLGQ9LWwvMy44KTpzPT09InRyaWFuZ2xlIj8odT0oZS53K2wqMi44KS9lLncsaD0oZS5oK2wqMi40KS9lLmgsZD0tbC8xLjQpOnM9PT0idmVlIiYmKHU9KGUudytsKjQuNCkvZS53LGg9KGUuaCtsKjMuOCkvZS5oLGQ9LWwqLjUpO3ZhciBwPWUuaCpoLWUuaCxtPWUudyp1LWUudztpZih2NihlLFtNYXRoLmNlaWwocC8yKSxNYXRoLmNlaWwobS8yKV0pLGYhPTB8fGQhPT0wKXt2YXIgZz11amUoZSxmLGQpO2NnZShlLGcpfX19fSwidXBkYXRlQm91bmRzRnJvbU91dGxpbmUiKSxIWmU9byhmdW5jdGlvbihlLHIpe3ZhciBuPWUuX3ByaXZhdGUuY3ksaT1uLnN0eWxlRW5hYmxlZCgpLGE9bi5oZWFkbGVzcygpLHM9S3MoKSxsPWUuX3ByaXZhdGUsdT1lLmlzTm9kZSgpLGg9ZS5pc0VkZ2UoKSxmLGQscCxtLGcseSx2PWwucnN0eWxlLHg9dSYmaT9lLnBzdHlsZSgiYm91bmRzLWV4cGFuc2lvbiIpLnBmVmFsdWU6WzBdLGI9byhmdW5jdGlvbihOZSl7cmV0dXJuIE5lLnBzdHlsZSgiZGlzcGxheSIpLnZhbHVlIT09Im5vbmUifSwiaXNEaXNwbGF5ZWQiKSx3PSFpfHxiKGUpJiYoIWh8fGIoZS5zb3VyY2UoKSkmJmIoZS50YXJnZXQoKSkpO2lmKHcpe3ZhciBfPTAsVD0wO2kmJnIuaW5jbHVkZU92ZXJsYXlzJiYoXz1lLnBzdHlsZSgib3ZlcmxheS1vcGFjaXR5IikudmFsdWUsXyE9PTAmJihUPWUucHN0eWxlKCJvdmVybGF5LXBhZGRpbmciKS52YWx1ZSkpO3ZhciBFPTAsTD0wO2kmJnIuaW5jbHVkZVVuZGVybGF5cyYmKEU9ZS5wc3R5bGUoInVuZGVybGF5LW9wYWNpdHkiKS52YWx1ZSxFIT09MCYmKEw9ZS5wc3R5bGUoInVuZGVybGF5LXBhZGRpbmciKS52YWx1ZSkpO3ZhciBTPU1hdGgubWF4KFQsTCksQT0wLEk9MDtpZihpJiYoQT1lLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLEk9QS8yKSx1JiZyLmluY2x1ZGVOb2Rlcyl7dmFyIEQ9ZS5wb3NpdGlvbigpO2c9RC54LHk9RC55O3ZhciBrPWUub3V0ZXJXaWR0aCgpLFI9ay8yLEM9ZS5vdXRlckhlaWdodCgpLE89Qy8yO2Y9Zy1SLGQ9ZytSLHA9eS1PLG09eStPLEtsKHMsZixwLGQsbSksaSYmci5pbmNsdWRlT3V0bGluZXMmJlVaZShzLGUpfWVsc2UgaWYoaCYmci5pbmNsdWRlRWRnZXMpaWYoaSYmIWEpe3ZhciBOPWUucHN0eWxlKCJjdXJ2ZS1zdHlsZSIpLnN0clZhbHVlO2lmKGY9TWF0aC5taW4odi5zcmNYLHYubWlkWCx2LnRndFgpLGQ9TWF0aC5tYXgodi5zcmNYLHYubWlkWCx2LnRndFgpLHA9TWF0aC5taW4odi5zcmNZLHYubWlkWSx2LnRndFkpLG09TWF0aC5tYXgodi5zcmNZLHYubWlkWSx2LnRndFkpLGYtPUksZCs9SSxwLT1JLG0rPUksS2wocyxmLHAsZCxtKSxOPT09ImhheXN0YWNrIil7dmFyIFA9di5oYXlzdGFja1B0cztpZihQJiZQLmxlbmd0aD09PTIpe2lmKGY9UFswXS54LHA9UFswXS55LGQ9UFsxXS54LG09UFsxXS55LGY+ZCl7dmFyIEY9ZjtmPWQsZD1GfWlmKHA+bSl7dmFyIEI9cDtwPW0sbT1CfUtsKHMsZi1JLHAtSSxkK0ksbStJKX19ZWxzZSBpZihOPT09ImJlemllciJ8fE49PT0idW5idW5kbGVkLWJlemllciJ8fE4uZW5kc1dpdGgoInNlZ21lbnRzIil8fE4uZW5kc1dpdGgoInRheGkiKSl7dmFyIEc7c3dpdGNoKE4pe2Nhc2UiYmV6aWVyIjpjYXNlInVuYnVuZGxlZC1iZXppZXIiOkc9di5iZXppZXJQdHM7YnJlYWs7Y2FzZSJzZWdtZW50cyI6Y2FzZSJ0YXhpIjpjYXNlInJvdW5kLXNlZ21lbnRzIjpjYXNlInJvdW5kLXRheGkiOkc9di5saW5lUHRzO2JyZWFrfWlmKEchPW51bGwpZm9yKHZhciB6PTA7ejxHLmxlbmd0aDt6Kyspe3ZhciBXPUdbel07Zj1XLngtSSxkPVcueCtJLHA9Vy55LUksbT1XLnkrSSxLbChzLGYscCxkLG0pfX19ZWxzZXt2YXIgWj1lLnNvdXJjZSgpLGo9Wi5wb3NpdGlvbigpLG9lPWUudGFyZ2V0KCksSz1vZS5wb3NpdGlvbigpO2lmKGY9ai54LGQ9Sy54LHA9ai55LG09Sy55LGY+ZCl7dmFyIGVlPWY7Zj1kLGQ9ZWV9aWYocD5tKXt2YXIgSj1wO3A9bSxtPUp9Zi09SSxkKz1JLHAtPUksbSs9SSxLbChzLGYscCxkLG0pfWlmKGkmJnIuaW5jbHVkZUVkZ2VzJiZoJiYoaDYocyxlLCJtaWQtc291cmNlIiksaDYocyxlLCJtaWQtdGFyZ2V0IiksaDYocyxlLCJzb3VyY2UiKSxoNihzLGUsInRhcmdldCIpKSxpKXt2YXIgSD1lLnBzdHlsZSgiZ2hvc3QiKS52YWx1ZT09PSJ5ZXMiO2lmKEgpe3ZhciBxPWUucHN0eWxlKCJnaG9zdC1vZmZzZXQteCIpLnBmVmFsdWUsUT1lLnBzdHlsZSgiZ2hvc3Qtb2Zmc2V0LXkiKS5wZlZhbHVlO0tsKHMscy54MStxLHMueTErUSxzLngyK3Escy55MitRKX19dmFyIGFlPWwuYm9keUJvdW5kcz1sLmJvZHlCb3VuZHN8fHt9O0JwZShhZSxzKSx2NihhZSx4KSx5NihhZSwxKSxpJiYoZj1zLngxLGQ9cy54MixwPXMueTEsbT1zLnkyLEtsKHMsZi1TLHAtUyxkK1MsbStTKSk7dmFyIHVlPWwub3ZlcmxheUJvdW5kcz1sLm92ZXJsYXlCb3VuZHN8fHt9O0JwZSh1ZSxzKSx2Nih1ZSx4KSx5Nih1ZSwxKTt2YXIgY2U9bC5sYWJlbEJvdW5kcz1sLmxhYmVsQm91bmRzfHx7fTtjZS5hbGwhPW51bGw/Y2plKGNlLmFsbCk6Y2UuYWxsPUtzKCksaSYmci5pbmNsdWRlTGFiZWxzJiYoci5pbmNsdWRlTWFpbkxhYmVscyYmTVAocyxlLG51bGwpLGgmJihyLmluY2x1ZGVTb3VyY2VMYWJlbHMmJk1QKHMsZSwic291cmNlIiksci5pbmNsdWRlVGFyZ2V0TGFiZWxzJiZNUChzLGUsInRhcmdldCIpKSl9cmV0dXJuIHMueDE9dWwocy54MSkscy55MT11bChzLnkxKSxzLngyPXVsKHMueDIpLHMueTI9dWwocy55Mikscy53PXVsKHMueDItcy54MSkscy5oPXVsKHMueTItcy55MSkscy53PjAmJnMuaD4wJiZ3JiYodjYocyx4KSx5NihzLDEpKSxzfSwiYm91bmRpbmdCb3hJbXBsIiksUGdlPW8oZnVuY3Rpb24oZSl7dmFyIHI9MCxuPW8oZnVuY3Rpb24ocyl7cmV0dXJuKHM/MTowKTw8cisrfSwidGYiKSxpPTA7cmV0dXJuIGkrPW4oZS5pbmN1ZGVOb2RlcyksaSs9bihlLmluY2x1ZGVFZGdlcyksaSs9bihlLmluY2x1ZGVMYWJlbHMpLGkrPW4oZS5pbmNsdWRlTWFpbkxhYmVscyksaSs9bihlLmluY2x1ZGVTb3VyY2VMYWJlbHMpLGkrPW4oZS5pbmNsdWRlVGFyZ2V0TGFiZWxzKSxpKz1uKGUuaW5jbHVkZU92ZXJsYXlzKSxpKz1uKGUuaW5jbHVkZU91dGxpbmVzKSxpfSwiZ2V0S2V5IiksQmdlPW8oZnVuY3Rpb24oZSl7aWYoZS5pc0VkZ2UoKSl7dmFyIHI9ZS5zb3VyY2UoKS5wb3NpdGlvbigpLG49ZS50YXJnZXQoKS5wb3NpdGlvbigpLGk9byhmdW5jdGlvbihzKXtyZXR1cm4gTWF0aC5yb3VuZChzKX0sInIiKTtyZXR1cm4gRFhlKFtpKHIueCksaShyLnkpLGkobi54KSxpKG4ueSldKX1lbHNlIHJldHVybiAwfSwiZ2V0Qm91bmRpbmdCb3hQb3NLZXkiKSxhbWU9byhmdW5jdGlvbihlLHIpe3ZhciBuPWUuX3ByaXZhdGUsaSxhPWUuaXNFZGdlKCkscz1yPT1udWxsP3NtZTpQZ2UociksbD1zPT09c21lLHU9QmdlKGUpLGg9bi5iYkNhY2hlUG9zS2V5PT09dSxmPXIudXNlQ2FjaGUmJmgsZD1vKGZ1bmN0aW9uKHkpe3JldHVybiB5Ll9wcml2YXRlLmJiQ2FjaGU9PW51bGx8fHkuX3ByaXZhdGUuc3R5bGVEaXJ0eX0sImlzRGlydHkiKSxwPSFmfHxkKGUpfHxhJiZkKGUuc291cmNlKCkpfHxkKGUudGFyZ2V0KCkpO2lmKHA/KGh8fGUucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKGYpLGk9SFplKGUsdWIpLG4uYmJDYWNoZT1pLG4uYmJDYWNoZVBvc0tleT11KTppPW4uYmJDYWNoZSwhbCl7dmFyIG09ZS5pc05vZGUoKTtpPUtzKCksKHIuaW5jbHVkZU5vZGVzJiZtfHxyLmluY2x1ZGVFZGdlcyYmIW0pJiYoci5pbmNsdWRlT3ZlcmxheXM/SDAoaSxuLm92ZXJsYXlCb3VuZHMpOkgwKGksbi5ib2R5Qm91bmRzKSksci5pbmNsdWRlTGFiZWxzJiYoci5pbmNsdWRlTWFpbkxhYmVscyYmKCFhfHxyLmluY2x1ZGVTb3VyY2VMYWJlbHMmJnIuaW5jbHVkZVRhcmdldExhYmVscyk/SDAoaSxuLmxhYmVsQm91bmRzLmFsbCk6KHIuaW5jbHVkZU1haW5MYWJlbHMmJkgwKGksbi5sYWJlbEJvdW5kcy5tYWluUm90KSxyLmluY2x1ZGVTb3VyY2VMYWJlbHMmJkgwKGksbi5sYWJlbEJvdW5kcy5zb3VyY2VSb3QpLHIuaW5jbHVkZVRhcmdldExhYmVscyYmSDAoaSxuLmxhYmVsQm91bmRzLnRhcmdldFJvdCkpKSxpLnc9aS54Mi1pLngxLGkuaD1pLnkyLWkueTF9cmV0dXJuIGl9LCJjYWNoZWRCb3VuZGluZ0JveEltcGwiKSx1Yj17aW5jbHVkZU5vZGVzOiEwLGluY2x1ZGVFZGdlczohMCxpbmNsdWRlTGFiZWxzOiEwLGluY2x1ZGVNYWluTGFiZWxzOiEwLGluY2x1ZGVTb3VyY2VMYWJlbHM6ITAsaW5jbHVkZVRhcmdldExhYmVsczohMCxpbmNsdWRlT3ZlcmxheXM6ITAsaW5jbHVkZVVuZGVybGF5czohMCxpbmNsdWRlT3V0bGluZXM6ITAsdXNlQ2FjaGU6ITB9LHNtZT1QZ2UodWIpLG9tZT1fYSh1Yik7emYuYm91bmRpbmdCb3g9ZnVuY3Rpb24odCl7dmFyIGU7aWYodGhpcy5sZW5ndGg9PT0xJiZ0aGlzWzBdLl9wcml2YXRlLmJiQ2FjaGUhPW51bGwmJiF0aGlzWzBdLl9wcml2YXRlLnN0eWxlRGlydHkmJih0PT09dm9pZCAwfHx0LnVzZUNhY2hlPT09dm9pZCAwfHx0LnVzZUNhY2hlPT09ITApKXQ9PT12b2lkIDA/dD11Yjp0PW9tZSh0KSxlPWFtZSh0aGlzWzBdLHQpO2Vsc2V7ZT1LcygpLHQ9dHx8dWI7dmFyIHI9b21lKHQpLG49dGhpcyxpPW4uY3koKSxhPWkuc3R5bGVFbmFibGVkKCk7aWYoYSlmb3IodmFyIHM9MDtzPG4ubGVuZ3RoO3MrKyl7dmFyIGw9bltzXSx1PWwuX3ByaXZhdGUsaD1CZ2UobCksZj11LmJiQ2FjaGVQb3NLZXk9PT1oLGQ9ci51c2VDYWNoZSYmZiYmIXUuc3R5bGVEaXJ0eTtsLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZShkKX10aGlzLnVwZGF0ZUNvbXBvdW5kQm91bmRzKCF0LnVzZUNhY2hlKTtmb3IodmFyIHA9MDtwPG4ubGVuZ3RoO3ArKyl7dmFyIG09bltwXTtIMChlLGFtZShtLHIpKX19cmV0dXJuIGUueDE9dWwoZS54MSksZS55MT11bChlLnkxKSxlLngyPXVsKGUueDIpLGUueTI9dWwoZS55MiksZS53PXVsKGUueDItZS54MSksZS5oPXVsKGUueTItZS55MSksZX07emYuZGlydHlCb3VuZGluZ0JveENhY2hlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDx0aGlzLmxlbmd0aDt0Kyspe3ZhciBlPXRoaXNbdF0uX3ByaXZhdGU7ZS5iYkNhY2hlPW51bGwsZS5iYkNhY2hlUG9zS2V5PW51bGwsZS5ib2R5Qm91bmRzPW51bGwsZS5vdmVybGF5Qm91bmRzPW51bGwsZS5sYWJlbEJvdW5kcy5hbGw9bnVsbCxlLmxhYmVsQm91bmRzLnNvdXJjZT1udWxsLGUubGFiZWxCb3VuZHMudGFyZ2V0PW51bGwsZS5sYWJlbEJvdW5kcy5tYWluPW51bGwsZS5sYWJlbEJvdW5kcy5zb3VyY2VSb3Q9bnVsbCxlLmxhYmVsQm91bmRzLnRhcmdldFJvdD1udWxsLGUubGFiZWxCb3VuZHMubWFpblJvdD1udWxsLGUuYXJyb3dCb3VuZHMuc291cmNlPW51bGwsZS5hcnJvd0JvdW5kcy50YXJnZXQ9bnVsbCxlLmFycm93Qm91bmRzWyJtaWQtc291cmNlIl09bnVsbCxlLmFycm93Qm91bmRzWyJtaWQtdGFyZ2V0Il09bnVsbH1yZXR1cm4gdGhpcy5lbWl0QW5kTm90aWZ5KCJib3VuZHMiKSx0aGlzfTt6Zi5ib3VuZGluZ0JveEF0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubm9kZXMoKSxyPXRoaXMuY3koKSxuPXIuaGFzQ29tcG91bmROb2RlcygpLGk9ci5jb2xsZWN0aW9uKCk7aWYobiYmKGk9ZS5maWx0ZXIoZnVuY3Rpb24oaCl7cmV0dXJuIGguaXNQYXJlbnQoKX0pLGU9ZS5ub3QoaSkpLFVyKHQpKXt2YXIgYT10O3Q9byhmdW5jdGlvbigpe3JldHVybiBhfSwiZm4iKX12YXIgcz1vKGZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYuX3ByaXZhdGUuYmJBdE9sZFBvcz10KGYsZCl9LCJzdG9yZU9sZFBvcyIpLGw9byhmdW5jdGlvbihmKXtyZXR1cm4gZi5fcHJpdmF0ZS5iYkF0T2xkUG9zfSwiZ2V0T2xkUG9zIik7ci5zdGFydEJhdGNoKCksZS5mb3JFYWNoKHMpLnNpbGVudFBvc2l0aW9ucyh0KSxuJiYoaS5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKSxpLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLGkudXBkYXRlQ29tcG91bmRCb3VuZHMoITApKTt2YXIgdT1samUodGhpcy5ib3VuZGluZ0JveCh7dXNlQ2FjaGU6ITF9KSk7cmV0dXJuIGUuc2lsZW50UG9zaXRpb25zKGwpLG4mJihpLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpLGkuZGlydHlCb3VuZGluZ0JveENhY2hlKCksaS51cGRhdGVDb21wb3VuZEJvdW5kcyghMCkpLHIuZW5kQmF0Y2goKSx1fTtiMS5ib3VuZGluZ2JveD1iMS5iYj1iMS5ib3VuZGluZ0JveDtiMS5yZW5kZXJlZEJvdW5kaW5nYm94PWIxLnJlbmRlcmVkQm91bmRpbmdCb3g7V1plPXpmO1p4PXliPXt9O0ZnZT1vKGZ1bmN0aW9uKGUpe2UudXBwZXJjYXNlTmFtZT1EcGUoZS5uYW1lKSxlLmF1dG9OYW1lPSJhdXRvIitlLnVwcGVyY2FzZU5hbWUsZS5sYWJlbE5hbWU9ImxhYmVsIitlLnVwcGVyY2FzZU5hbWUsZS5vdXRlck5hbWU9Im91dGVyIitlLnVwcGVyY2FzZU5hbWUsZS51cHBlcmNhc2VPdXRlck5hbWU9RHBlKGUub3V0ZXJOYW1lKSxaeFtlLm5hbWVdPW8oZnVuY3Rpb24oKXt2YXIgbj10aGlzWzBdLGk9bi5fcHJpdmF0ZSxhPWkuY3kscz1hLl9wcml2YXRlLnN0eWxlRW5hYmxlZDtpZihuKWlmKHMpe2lmKG4uaXNQYXJlbnQoKSlyZXR1cm4gbi51cGRhdGVDb21wb3VuZEJvdW5kcygpLGlbZS5hdXRvTmFtZV18fDA7dmFyIGw9bi5wc3R5bGUoZS5uYW1lKTtzd2l0Y2gobC5zdHJWYWx1ZSl7Y2FzZSJsYWJlbCI6cmV0dXJuIG4ucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKCksaS5yc3R5bGVbZS5sYWJlbE5hbWVdfHwwO2RlZmF1bHQ6cmV0dXJuIGwucGZWYWx1ZX19ZWxzZSByZXR1cm4gMX0sImRpbUltcGwiKSxaeFsib3V0ZXIiK2UudXBwZXJjYXNlTmFtZV09byhmdW5jdGlvbigpe3ZhciBuPXRoaXNbMF0saT1uLl9wcml2YXRlLGE9aS5jeSxzPWEuX3ByaXZhdGUuc3R5bGVFbmFibGVkO2lmKG4paWYocyl7dmFyIGw9bltlLm5hbWVdKCksdT1uLnBzdHlsZSgiYm9yZGVyLXdpZHRoIikucGZWYWx1ZSxoPTIqbi5wYWRkaW5nKCk7cmV0dXJuIGwrdStofWVsc2UgcmV0dXJuIDF9LCJvdXRlckRpbUltcGwiKSxaeFsicmVuZGVyZWQiK2UudXBwZXJjYXNlTmFtZV09byhmdW5jdGlvbigpe3ZhciBuPXRoaXNbMF07aWYobil7dmFyIGk9bltlLm5hbWVdKCk7cmV0dXJuIGkqdGhpcy5jeSgpLnpvb20oKX19LCJyZW5kZXJlZERpbUltcGwiKSxaeFsicmVuZGVyZWQiK2UudXBwZXJjYXNlT3V0ZXJOYW1lXT1vKGZ1bmN0aW9uKCl7dmFyIG49dGhpc1swXTtpZihuKXt2YXIgaT1uW2Uub3V0ZXJOYW1lXSgpO3JldHVybiBpKnRoaXMuY3koKS56b29tKCl9fSwicmVuZGVyZWRPdXRlckRpbUltcGwiKX0sImRlZmluZURpbUZucyIpO0ZnZSh7bmFtZToid2lkdGgifSk7RmdlKHtuYW1lOiJoZWlnaHQifSk7eWIucGFkZGluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXNbMF0sZT10Ll9wcml2YXRlO3JldHVybiB0LmlzUGFyZW50KCk/KHQudXBkYXRlQ29tcG91bmRCb3VuZHMoKSxlLmF1dG9QYWRkaW5nIT09dm9pZCAwP2UuYXV0b1BhZGRpbmc6dC5wc3R5bGUoInBhZGRpbmciKS5wZlZhbHVlKTp0LnBzdHlsZSgicGFkZGluZyIpLnBmVmFsdWV9O3liLnBhZGRlZEhlaWdodD1mdW5jdGlvbigpe3ZhciB0PXRoaXNbMF07cmV0dXJuIHQuaGVpZ2h0KCkrMip0LnBhZGRpbmcoKX07eWIucGFkZGVkV2lkdGg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzWzBdO3JldHVybiB0LndpZHRoKCkrMip0LnBhZGRpbmcoKX07WVplPXliLHFaZT1vKGZ1bmN0aW9uKGUscil7aWYoZS5pc0VkZ2UoKSlyZXR1cm4gcihlKX0sImlmRWRnZSIpLFhaZT1vKGZ1bmN0aW9uKGUscil7aWYoZS5pc0VkZ2UoKSl7dmFyIG49ZS5jeSgpO3JldHVybiAkNihyKGUpLG4uem9vbSgpLG4ucGFuKCkpfX0sImlmRWRnZVJlbmRlcmVkUG9zaXRpb24iKSxqWmU9byhmdW5jdGlvbihlLHIpe2lmKGUuaXNFZGdlKCkpe3ZhciBuPWUuY3koKSxpPW4ucGFuKCksYT1uLnpvb20oKTtyZXR1cm4gcihlKS5tYXAoZnVuY3Rpb24ocyl7cmV0dXJuICQ2KHMsYSxpKX0pfX0sImlmRWRnZVJlbmRlcmVkUG9zaXRpb25zIiksS1plPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVuZGVyZXIoKS5nZXRDb250cm9sUG9pbnRzKGUpfSwiY29udHJvbFBvaW50cyIpLFFaZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlbmRlcmVyKCkuZ2V0U2VnbWVudFBvaW50cyhlKX0sInNlZ21lbnRQb2ludHMiKSxaWmU9byhmdW5jdGlvbihlKXtyZXR1cm4gZS5yZW5kZXJlcigpLmdldFNvdXJjZUVuZHBvaW50KGUpfSwic291cmNlRW5kcG9pbnQiKSxKWmU9byhmdW5jdGlvbihlKXtyZXR1cm4gZS5yZW5kZXJlcigpLmdldFRhcmdldEVuZHBvaW50KGUpfSwidGFyZ2V0RW5kcG9pbnQiKSxlSmU9byhmdW5jdGlvbihlKXtyZXR1cm4gZS5yZW5kZXJlcigpLmdldEVkZ2VNaWRwb2ludChlKX0sIm1pZHBvaW50IiksbG1lPXtjb250cm9sUG9pbnRzOntnZXQ6S1plLG11bHQ6ITB9LHNlZ21lbnRQb2ludHM6e2dldDpRWmUsbXVsdDohMH0sc291cmNlRW5kcG9pbnQ6e2dldDpaWmV9LHRhcmdldEVuZHBvaW50OntnZXQ6SlplfSxtaWRwb2ludDp7Z2V0OmVKZX19LHRKZT1vKGZ1bmN0aW9uKGUpe3JldHVybiJyZW5kZXJlZCIrZVswXS50b1VwcGVyQ2FzZSgpK2Uuc3Vic3RyKDEpfSwicmVuZGVyZWROYW1lIiksckplPU9iamVjdC5rZXlzKGxtZSkucmVkdWNlKGZ1bmN0aW9uKHQsZSl7dmFyIHI9bG1lW2VdLG49dEplKGUpO3JldHVybiB0W2VdPWZ1bmN0aW9uKCl7cmV0dXJuIHFaZSh0aGlzLHIuZ2V0KX0sci5tdWx0P3Rbbl09ZnVuY3Rpb24oKXtyZXR1cm4galplKHRoaXMsci5nZXQpfTp0W25dPWZ1bmN0aW9uKCl7cmV0dXJuIFhaZSh0aGlzLHIuZ2V0KX0sdH0se30pLG5KZT1pcih7fSxWWmUsV1plLFlaZSxySmUpO3pnZT1vKGZ1bmN0aW9uKGUscil7dGhpcy5yZWN5Y2xlKGUscil9LCJFdmVudCIpO28ocXgsInJldHVybkZhbHNlIik7byhmNiwicmV0dXJuVHJ1ZSIpO3pnZS5wcm90b3R5cGU9e2luc3RhbmNlU3RyaW5nOm8oZnVuY3Rpb24oKXtyZXR1cm4iZXZlbnQifSwiaW5zdGFuY2VTdHJpbmciKSxyZWN5Y2xlOm8oZnVuY3Rpb24oZSxyKXtpZih0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPXRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9cXgsZSE9bnVsbCYmZS5wcmV2ZW50RGVmYXVsdD8odGhpcy50eXBlPWUudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1lLmRlZmF1bHRQcmV2ZW50ZWQ/ZjY6cXgpOmUhPW51bGwmJmUudHlwZT9yPWU6dGhpcy50eXBlPWUsciE9bnVsbCYmKHRoaXMub3JpZ2luYWxFdmVudD1yLm9yaWdpbmFsRXZlbnQsdGhpcy50eXBlPXIudHlwZSE9bnVsbD9yLnR5cGU6dGhpcy50eXBlLHRoaXMuY3k9ci5jeSx0aGlzLnRhcmdldD1yLnRhcmdldCx0aGlzLnBvc2l0aW9uPXIucG9zaXRpb24sdGhpcy5yZW5kZXJlZFBvc2l0aW9uPXIucmVuZGVyZWRQb3NpdGlvbix0aGlzLm5hbWVzcGFjZT1yLm5hbWVzcGFjZSx0aGlzLmxheW91dD1yLmxheW91dCksdGhpcy5jeSE9bnVsbCYmdGhpcy5wb3NpdGlvbiE9bnVsbCYmdGhpcy5yZW5kZXJlZFBvc2l0aW9uPT1udWxsKXt2YXIgbj10aGlzLnBvc2l0aW9uLGk9dGhpcy5jeS56b29tKCksYT10aGlzLmN5LnBhbigpO3RoaXMucmVuZGVyZWRQb3NpdGlvbj17eDpuLngqaSthLngseTpuLnkqaSthLnl9fXRoaXMudGltZVN0YW1wPWUmJmUudGltZVN0YW1wfHxEYXRlLm5vdygpfSwicmVjeWNsZSIpLHByZXZlbnREZWZhdWx0Om8oZnVuY3Rpb24oKXt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1mNjt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7ZSYmZS5wcmV2ZW50RGVmYXVsdCYmZS5wcmV2ZW50RGVmYXVsdCgpfSwicHJldmVudERlZmF1bHQiKSxzdG9wUHJvcGFnYXRpb246byhmdW5jdGlvbigpe3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9ZjY7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O2UmJmUuc3RvcFByb3BhZ2F0aW9uJiZlLnN0b3BQcm9wYWdhdGlvbigpfSwic3RvcFByb3BhZ2F0aW9uIiksc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOm8oZnVuY3Rpb24oKXt0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPWY2LHRoaXMuc3RvcFByb3BhZ2F0aW9uKCl9LCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iKSxpc0RlZmF1bHRQcmV2ZW50ZWQ6cXgsaXNQcm9wYWdhdGlvblN0b3BwZWQ6cXgsaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6cXh9O0dnZT0vXihbXi5dKykoXC4oPzpbXi5dKykpPyQvLGlKZT0iLioiLCRnZT17cXVhbGlmaWVyQ29tcGFyZTpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIGU9PT1yfSwicXVhbGlmaWVyQ29tcGFyZSIpLGV2ZW50TWF0Y2hlczpvKGZ1bmN0aW9uKCl7cmV0dXJuITB9LCJldmVudE1hdGNoZXMiKSxhZGRFdmVudEZpZWxkczpvKGZ1bmN0aW9uKCl7fSwiYWRkRXZlbnRGaWVsZHMiKSxjYWxsYmFja0NvbnRleHQ6byhmdW5jdGlvbihlKXtyZXR1cm4gZX0sImNhbGxiYWNrQ29udGV4dCIpLGJlZm9yZUVtaXQ6byhmdW5jdGlvbigpe30sImJlZm9yZUVtaXQiKSxhZnRlckVtaXQ6byhmdW5jdGlvbigpe30sImFmdGVyRW1pdCIpLGJ1YmJsZTpvKGZ1bmN0aW9uKCl7cmV0dXJuITF9LCJidWJibGUiKSxwYXJlbnQ6byhmdW5jdGlvbigpe3JldHVybiBudWxsfSwicGFyZW50IiksY29udGV4dDpudWxsfSxjbWU9T2JqZWN0LmtleXMoJGdlKSxhSmU9e307byhxNiwiRW1pdHRlciIpO0ZmPXE2LnByb3RvdHlwZSxWZ2U9byhmdW5jdGlvbihlLHIsbixpLGEscyxsKXtuaShpKSYmKGE9aSxpPW51bGwpLGwmJihzPT1udWxsP3M9bDpzPWlyKHt9LHMsbCkpO2Zvcih2YXIgdT1rbihuKT9uOm4uc3BsaXQoL1xzKy8pLGg9MDtoPHUubGVuZ3RoO2grKyl7dmFyIGY9dVtoXTtpZighSWYoZikpe3ZhciBkPWYubWF0Y2goR2dlKTtpZihkKXt2YXIgcD1kWzFdLG09ZFsyXT9kWzJdOm51bGwsZz1yKGUsZixwLG0saSxhLHMpO2lmKGc9PT0hMSlicmVha319fX0sImZvckVhY2hFdmVudCIpLHVtZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIGUuYWRkRXZlbnRGaWVsZHMoZS5jb250ZXh0LHIpLG5ldyB6Z2Uoci50eXBlLHIpfSwibWFrZUV2ZW50T2JqIiksc0plPW8oZnVuY3Rpb24oZSxyLG4pe2lmKENxZShuKSl7cihlLG4pO3JldHVybn1lbHNlIGlmKFVyKG4pKXtyKGUsdW1lKGUsbikpO3JldHVybn1mb3IodmFyIGk9a24obik/bjpuLnNwbGl0KC9ccysvKSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV07aWYoIUlmKHMpKXt2YXIgbD1zLm1hdGNoKEdnZSk7aWYobCl7dmFyIHU9bFsxXSxoPWxbMl0/bFsyXTpudWxsLGY9dW1lKGUse3R5cGU6dSxuYW1lc3BhY2U6aCx0YXJnZXQ6ZS5jb250ZXh0fSk7cihlLGYpfX19fSwiZm9yRWFjaEV2ZW50T2JqIik7RmYub249RmYuYWRkTGlzdGVuZXI9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gVmdlKHRoaXMsZnVuY3Rpb24oYSxzLGwsdSxoLGYsZCl7bmkoZikmJmEubGlzdGVuZXJzLnB1c2goe2V2ZW50OnMsY2FsbGJhY2s6Zix0eXBlOmwsbmFtZXNwYWNlOnUscXVhbGlmaWVyOmgsY29uZjpkfSl9LHQsZSxyLG4saSksdGhpc307RmYub25lPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLm9uKHQsZSxyLG4se29uZTohMH0pfTtGZi5yZW1vdmVMaXN0ZW5lcj1GZi5vZmY9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpczt0aGlzLmVtaXR0aW5nIT09MCYmKHRoaXMubGlzdGVuZXJzPU9YZSh0aGlzLmxpc3RlbmVycykpO2Zvcih2YXIgYT10aGlzLmxpc3RlbmVycyxzPW8oZnVuY3Rpb24oaCl7dmFyIGY9YVtoXTtWZ2UoaSxmdW5jdGlvbihkLHAsbSxnLHksdil7aWYoKGYudHlwZT09PW18fHQ9PT0iKiIpJiYoIWcmJmYubmFtZXNwYWNlIT09Ii4qInx8Zi5uYW1lc3BhY2U9PT1nKSYmKCF5fHxkLnF1YWxpZmllckNvbXBhcmUoZi5xdWFsaWZpZXIseSkpJiYoIXZ8fGYuY2FsbGJhY2s9PT12KSlyZXR1cm4gYS5zcGxpY2UoaCwxKSwhMX0sdCxlLHIsbil9LCJfbG9vcCIpLGw9YS5sZW5ndGgtMTtsPj0wO2wtLSlzKGwpO3JldHVybiB0aGlzfTtGZi5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW1vdmVMaXN0ZW5lcigiKiIpfTtGZi5lbWl0PUZmLnRyaWdnZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGlzdGVuZXJzLGk9bi5sZW5ndGg7cmV0dXJuIHRoaXMuZW1pdHRpbmcrKyxrbihlKXx8KGU9W2VdKSxzSmUodGhpcyxmdW5jdGlvbihhLHMpe3IhPW51bGwmJihuPVt7ZXZlbnQ6cy5ldmVudCx0eXBlOnMudHlwZSxuYW1lc3BhY2U6cy5uYW1lc3BhY2UsY2FsbGJhY2s6cn1dLGk9bi5sZW5ndGgpO2Zvcih2YXIgbD1vKGZ1bmN0aW9uKGYpe3ZhciBkPW5bZl07aWYoZC50eXBlPT09cy50eXBlJiYoIWQubmFtZXNwYWNlfHxkLm5hbWVzcGFjZT09PXMubmFtZXNwYWNlfHxkLm5hbWVzcGFjZT09PWlKZSkmJmEuZXZlbnRNYXRjaGVzKGEuY29udGV4dCxkLHMpKXt2YXIgcD1bc107ZSE9bnVsbCYmQlhlKHAsZSksYS5iZWZvcmVFbWl0KGEuY29udGV4dCxkLHMpLGQuY29uZiYmZC5jb25mLm9uZSYmKGEubGlzdGVuZXJzPWEubGlzdGVuZXJzLmZpbHRlcihmdW5jdGlvbih5KXtyZXR1cm4geSE9PWR9KSk7dmFyIG09YS5jYWxsYmFja0NvbnRleHQoYS5jb250ZXh0LGQscyksZz1kLmNhbGxiYWNrLmFwcGx5KG0scCk7YS5hZnRlckVtaXQoYS5jb250ZXh0LGQscyksZz09PSExJiYocy5zdG9wUHJvcGFnYXRpb24oKSxzLnByZXZlbnREZWZhdWx0KCkpfX0sIl9sb29wMiIpLHU9MDt1PGk7dSsrKWwodSk7YS5idWJibGUoYS5jb250ZXh0KSYmIXMuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSYmYS5wYXJlbnQoYS5jb250ZXh0KS5lbWl0KHMsZSl9LHQpLHRoaXMuZW1pdHRpbmctLSx0aGlzfTtvSmU9e3F1YWxpZmllckNvbXBhcmU6byhmdW5jdGlvbihlLHIpe3JldHVybiBlPT1udWxsfHxyPT1udWxsP2U9PW51bGwmJnI9PW51bGw6ZS5zYW1lVGV4dChyKX0sInF1YWxpZmllckNvbXBhcmUiKSxldmVudE1hdGNoZXM6byhmdW5jdGlvbihlLHIsbil7dmFyIGk9ci5xdWFsaWZpZXI7cmV0dXJuIGkhPW51bGw/ZSE9PW4udGFyZ2V0JiZwYihuLnRhcmdldCkmJmkubWF0Y2hlcyhuLnRhcmdldCk6ITB9LCJldmVudE1hdGNoZXMiKSxhZGRFdmVudEZpZWxkczpvKGZ1bmN0aW9uKGUscil7ci5jeT1lLmN5KCksci50YXJnZXQ9ZX0sImFkZEV2ZW50RmllbGRzIiksY2FsbGJhY2tDb250ZXh0Om8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiByLnF1YWxpZmllciE9bnVsbD9uLnRhcmdldDplfSwiY2FsbGJhY2tDb250ZXh0IiksYmVmb3JlRW1pdDpvKGZ1bmN0aW9uKGUscil7ci5jb25mJiZyLmNvbmYub25jZSYmci5jb25mLm9uY2VDb2xsZWN0aW9uLnJlbW92ZUxpc3RlbmVyKHIuZXZlbnQsci5xdWFsaWZpZXIsci5jYWxsYmFjayl9LCJiZWZvcmVFbWl0IiksYnViYmxlOm8oZnVuY3Rpb24oKXtyZXR1cm4hMH0sImJ1YmJsZSIpLHBhcmVudDpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzQ2hpbGQoKT9lLnBhcmVudCgpOmUuY3koKX0sInBhcmVudCIpfSxkNj1vKGZ1bmN0aW9uKGUpe3JldHVybiBadChlKT9uZXcgUGYoZSk6ZX0sImFyZ1NlbGVjdG9yIiksVWdlPXtjcmVhdGVFbWl0dGVyOm8oZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIHI9dGhpc1tlXSxuPXIuX3ByaXZhdGU7bi5lbWl0dGVyfHwobi5lbWl0dGVyPW5ldyBxNihvSmUscikpfXJldHVybiB0aGlzfSwiY3JlYXRlRW1pdHRlciIpLGVtaXR0ZXI6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmVtaXR0ZXJ9LCJlbWl0dGVyIiksb246byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPWQ2KHIpLGE9MDthPHRoaXMubGVuZ3RoO2ErKyl7dmFyIHM9dGhpc1thXTtzLmVtaXR0ZXIoKS5vbihlLGksbil9cmV0dXJuIHRoaXN9LCJvbiIpLHJlbW92ZUxpc3RlbmVyOm8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1kNihyKSxhPTA7YTx0aGlzLmxlbmd0aDthKyspe3ZhciBzPXRoaXNbYV07cy5lbWl0dGVyKCkucmVtb3ZlTGlzdGVuZXIoZSxpLG4pfXJldHVybiB0aGlzfSwicmVtb3ZlTGlzdGVuZXIiKSxyZW1vdmVBbGxMaXN0ZW5lcnM6byhmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzW2VdO3IuZW1pdHRlcigpLnJlbW92ZUFsbExpc3RlbmVycygpfXJldHVybiB0aGlzfSwicmVtb3ZlQWxsTGlzdGVuZXJzIiksb25lOm8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1kNihyKSxhPTA7YTx0aGlzLmxlbmd0aDthKyspe3ZhciBzPXRoaXNbYV07cy5lbWl0dGVyKCkub25lKGUsaSxuKX1yZXR1cm4gdGhpc30sIm9uZSIpLG9uY2U6byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPWQ2KHIpLGE9MDthPHRoaXMubGVuZ3RoO2ErKyl7dmFyIHM9dGhpc1thXTtzLmVtaXR0ZXIoKS5vbihlLGksbix7b25jZTohMCxvbmNlQ29sbGVjdGlvbjp0aGlzfSl9fSwib25jZSIpLGVtaXQ6byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0wO248dGhpcy5sZW5ndGg7bisrKXt2YXIgaT10aGlzW25dO2kuZW1pdHRlcigpLmVtaXQoZSxyKX1yZXR1cm4gdGhpc30sImVtaXQiKSxlbWl0QW5kTm90aWZ5Om8oZnVuY3Rpb24oZSxyKXtpZih0aGlzLmxlbmd0aCE9PTApcmV0dXJuIHRoaXMuY3koKS5ub3RpZnkoZSx0aGlzKSx0aGlzLmVtaXQoZSxyKSx0aGlzfSwiZW1pdEFuZE5vdGlmeSIpfTtzbi5ldmVudEFsaWFzZXNPbihVZ2UpO0hnZT17bm9kZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24ocil7cmV0dXJuIHIuaXNOb2RlKCl9KS5maWx0ZXIoZSl9LCJub2RlcyIpLGVkZ2VzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKHIpe3JldHVybiByLmlzRWRnZSgpfSkuZmlsdGVyKGUpfSwiZWRnZXMiKSxieUdyb3VwOm8oZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5zcGF3bigpLHI9dGhpcy5zcGF3bigpLG49MDtuPHRoaXMubGVuZ3RoO24rKyl7dmFyIGk9dGhpc1tuXTtpLmlzTm9kZSgpP2UucHVzaChpKTpyLnB1c2goaSl9cmV0dXJue25vZGVzOmUsZWRnZXM6cn19LCJieUdyb3VwIiksZmlsdGVyOm8oZnVuY3Rpb24oZSxyKXtpZihlPT09dm9pZCAwKXJldHVybiB0aGlzO2lmKFp0KGUpfHx3byhlKSlyZXR1cm4gbmV3IFBmKGUpLmZpbHRlcih0aGlzKTtpZihuaShlKSl7Zm9yKHZhciBuPXRoaXMuc3Bhd24oKSxpPXRoaXMsYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgcz1pW2FdLGw9cj9lLmFwcGx5KHIsW3MsYSxpXSk6ZShzLGEsaSk7bCYmbi5wdXNoKHMpfXJldHVybiBufXJldHVybiB0aGlzLnNwYXduKCl9LCJmaWx0ZXIiKSxub3Q6byhmdW5jdGlvbihlKXtpZihlKXtadChlKSYmKGU9dGhpcy5maWx0ZXIoZSkpO2Zvcih2YXIgcj10aGlzLnNwYXduKCksbj0wO248dGhpcy5sZW5ndGg7bisrKXt2YXIgaT10aGlzW25dLGE9ZS5oYXMoaSk7YXx8ci5wdXNoKGkpfXJldHVybiByfWVsc2UgcmV0dXJuIHRoaXN9LCJub3QiKSxhYnNvbHV0ZUNvbXBsZW1lbnQ6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3koKTtyZXR1cm4gZS5tdXRhYmxlRWxlbWVudHMoKS5ub3QodGhpcyl9LCJhYnNvbHV0ZUNvbXBsZW1lbnQiKSxpbnRlcnNlY3Q6byhmdW5jdGlvbihlKXtpZihadChlKSl7dmFyIHI9ZTtyZXR1cm4gdGhpcy5maWx0ZXIocil9Zm9yKHZhciBuPXRoaXMuc3Bhd24oKSxpPXRoaXMsYT1lLHM9dGhpcy5sZW5ndGg8ZS5sZW5ndGgsbD1zP2k6YSx1PXM/YTppLGg9MDtoPGwubGVuZ3RoO2grKyl7dmFyIGY9bFtoXTt1LmhhcyhmKSYmbi5wdXNoKGYpfXJldHVybiBufSwiaW50ZXJzZWN0IikseG9yOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZS5jeTtadChlKSYmKGU9ci4kKGUpKTt2YXIgbj10aGlzLnNwYXduKCksaT10aGlzLGE9ZSxzPW8oZnVuY3Rpb24odSxoKXtmb3IodmFyIGY9MDtmPHUubGVuZ3RoO2YrKyl7dmFyIGQ9dVtmXSxwPWQuX3ByaXZhdGUuZGF0YS5pZCxtPWguaGFzRWxlbWVudFdpdGhJZChwKTttfHxuLnB1c2goZCl9fSwiYWRkIik7cmV0dXJuIHMoaSxhKSxzKGEsaSksbn0sInhvciIpLGRpZmY6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlLmN5O1p0KGUpJiYoZT1yLiQoZSkpO3ZhciBuPXRoaXMuc3Bhd24oKSxpPXRoaXMuc3Bhd24oKSxhPXRoaXMuc3Bhd24oKSxzPXRoaXMsbD1lLHU9byhmdW5jdGlvbihmLGQscCl7Zm9yKHZhciBtPTA7bTxmLmxlbmd0aDttKyspe3ZhciBnPWZbbV0seT1nLl9wcml2YXRlLmRhdGEuaWQsdj1kLmhhc0VsZW1lbnRXaXRoSWQoeSk7dj9hLm1lcmdlKGcpOnAucHVzaChnKX19LCJhZGQiKTtyZXR1cm4gdShzLGwsbiksdShsLHMsaSkse2xlZnQ6bixyaWdodDppLGJvdGg6YX19LCJkaWZmIiksYWRkOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZS5jeTtpZighZSlyZXR1cm4gdGhpcztpZihadChlKSl7dmFyIG49ZTtlPXIubXV0YWJsZUVsZW1lbnRzKCkuZmlsdGVyKG4pfWZvcih2YXIgaT10aGlzLnNwYXduU2VsZigpLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIHM9ZVthXSxsPSF0aGlzLmhhcyhzKTtsJiZpLnB1c2gocyl9cmV0dXJuIGl9LCJhZGQiKSxtZXJnZTpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3ByaXZhdGUsbj1yLmN5O2lmKCFlKXJldHVybiB0aGlzO2lmKGUmJlp0KGUpKXt2YXIgaT1lO2U9bi5tdXRhYmxlRWxlbWVudHMoKS5maWx0ZXIoaSl9Zm9yKHZhciBhPXIubWFwLHM9MDtzPGUubGVuZ3RoO3MrKyl7dmFyIGw9ZVtzXSx1PWwuX3ByaXZhdGUuZGF0YS5pZCxoPSFhLmhhcyh1KTtpZihoKXt2YXIgZj10aGlzLmxlbmd0aCsrO3RoaXNbZl09bCxhLnNldCh1LHtlbGU6bCxpbmRleDpmfSl9fXJldHVybiB0aGlzfSwibWVyZ2UiKSx1bm1lcmdlQXQ6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzW2VdLG49ci5pZCgpLGk9dGhpcy5fcHJpdmF0ZSxhPWkubWFwO3RoaXNbZV09dm9pZCAwLGEuZGVsZXRlKG4pO3ZhciBzPWU9PT10aGlzLmxlbmd0aC0xO2lmKHRoaXMubGVuZ3RoPjEmJiFzKXt2YXIgbD10aGlzLmxlbmd0aC0xLHU9dGhpc1tsXSxoPXUuX3ByaXZhdGUuZGF0YS5pZDt0aGlzW2xdPXZvaWQgMCx0aGlzW2VdPXUsYS5zZXQoaCx7ZWxlOnUsaW5kZXg6ZX0pfXJldHVybiB0aGlzLmxlbmd0aC0tLHRoaXN9LCJ1bm1lcmdlQXQiKSx1bm1lcmdlT25lOm8oZnVuY3Rpb24oZSl7ZT1lWzBdO3ZhciByPXRoaXMuX3ByaXZhdGUsbj1lLl9wcml2YXRlLmRhdGEuaWQsaT1yLm1hcCxhPWkuZ2V0KG4pO2lmKCFhKXJldHVybiB0aGlzO3ZhciBzPWEuaW5kZXg7cmV0dXJuIHRoaXMudW5tZXJnZUF0KHMpLHRoaXN9LCJ1bm1lcmdlT25lIiksdW5tZXJnZTpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3ByaXZhdGUuY3k7aWYoIWUpcmV0dXJuIHRoaXM7aWYoZSYmWnQoZSkpe3ZhciBuPWU7ZT1yLm11dGFibGVFbGVtZW50cygpLmZpbHRlcihuKX1mb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl0aGlzLnVubWVyZ2VPbmUoZVtpXSk7cmV0dXJuIHRoaXN9LCJ1bm1lcmdlIiksdW5tZXJnZUJ5Om8oZnVuY3Rpb24oZSl7Zm9yKHZhciByPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBuPXRoaXNbcl07ZShuKSYmdGhpcy51bm1lcmdlQXQocil9cmV0dXJuIHRoaXN9LCJ1bm1lcmdlQnkiKSxtYXA6byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1bXSxpPXRoaXMsYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgcz1pW2FdLGw9cj9lLmFwcGx5KHIsW3MsYSxpXSk6ZShzLGEsaSk7bi5wdXNoKGwpfXJldHVybiBufSwibWFwIikscmVkdWNlOm8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49cixpPXRoaXMsYT0wO2E8aS5sZW5ndGg7YSsrKW49ZShuLGlbYV0sYSxpKTtyZXR1cm4gbn0sInJlZHVjZSIpLG1heDpvKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPS0xLzAsaSxhPXRoaXMscz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdLHU9cj9lLmFwcGx5KHIsW2wscyxhXSk6ZShsLHMsYSk7dT5uJiYobj11LGk9bCl9cmV0dXJue3ZhbHVlOm4sZWxlOml9fSwibWF4IiksbWluOm8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MS8wLGksYT10aGlzLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9YVtzXSx1PXI/ZS5hcHBseShyLFtsLHMsYV0pOmUobCxzLGEpO3U8biYmKG49dSxpPWwpfXJldHVybnt2YWx1ZTpuLGVsZTppfX0sIm1pbiIpfSxRcj1IZ2U7UXIudT1RclsifCJdPVFyWyIrIl09UXIudW5pb249UXIub3I9UXIuYWRkO1FyWyJcXCJdPVFyWyIhIl09UXJbIi0iXT1Rci5kaWZmZXJlbmNlPVFyLnJlbGF0aXZlQ29tcGxlbWVudD1Rci5zdWJ0cmFjdD1Rci5ub3Q7UXIubj1RclsiJiJdPVFyWyIuIl09UXIuYW5kPVFyLmludGVyc2VjdGlvbj1Rci5pbnRlcnNlY3Q7UXJbIl4iXT1RclsiKCspIl09UXJbIigtKSJdPVFyLnN5bW1ldHJpY0RpZmZlcmVuY2U9UXIuc3ltZGlmZj1Rci54b3I7UXIuZm5GaWx0ZXI9UXIuZmlsdGVyRm49UXIuc3RkRmlsdGVyPVFyLmZpbHRlcjtRci5jb21wbGVtZW50PVFyLmFic2NvbXA9UXIuYWJzb2x1dGVDb21wbGVtZW50O2xKZT17aXNOb2RlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncm91cCgpPT09Im5vZGVzIn0sImlzTm9kZSIpLGlzRWRnZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JvdXAoKT09PSJlZGdlcyJ9LCJpc0VkZ2UiKSxpc0xvb3A6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzRWRnZSgpJiZ0aGlzLnNvdXJjZSgpWzBdPT09dGhpcy50YXJnZXQoKVswXX0sImlzTG9vcCIpLGlzU2ltcGxlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0VkZ2UoKSYmdGhpcy5zb3VyY2UoKVswXSE9PXRoaXMudGFyZ2V0KClbMF19LCJpc1NpbXBsZSIpLGdyb3VwOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO2lmKGUpcmV0dXJuIGUuX3ByaXZhdGUuZ3JvdXB9LCJncm91cCIpfSxXZ2U9byhmdW5jdGlvbihlLHIpe3ZhciBuPWUuY3koKSxpPW4uaGFzQ29tcG91bmROb2RlcygpO2Z1bmN0aW9uIGEoZil7dmFyIGQ9Zi5wc3R5bGUoInotY29tcG91bmQtZGVwdGgiKTtyZXR1cm4gZC52YWx1ZT09PSJhdXRvIj9pP2YuekRlcHRoKCk6MDpkLnZhbHVlPT09ImJvdHRvbSI/LTE6ZC52YWx1ZT09PSJ0b3AiP2FCOjB9byhhLCJnZXREZXB0aCIpO3ZhciBzPWEoZSktYShyKTtpZihzIT09MClyZXR1cm4gcztmdW5jdGlvbiBsKGYpe3ZhciBkPWYucHN0eWxlKCJ6LWluZGV4LWNvbXBhcmUiKTtyZXR1cm4gZC52YWx1ZT09PSJhdXRvIiYmZi5pc05vZGUoKT8xOjB9byhsLCJnZXRFbGVEZXB0aCIpO3ZhciB1PWwoZSktbChyKTtpZih1IT09MClyZXR1cm4gdTt2YXIgaD1lLnBzdHlsZSgiei1pbmRleCIpLnZhbHVlLXIucHN0eWxlKCJ6LWluZGV4IikudmFsdWU7cmV0dXJuIGghPT0wP2g6ZS5wb29sSW5kZXgoKS1yLnBvb2xJbmRleCgpfSwiekluZGV4U29ydCIpLFI2PXtmb3JFYWNoOm8oZnVuY3Rpb24oZSxyKXtpZihuaShlKSlmb3IodmFyIG49dGhpcy5sZW5ndGgsaT0wO2k8bjtpKyspe3ZhciBhPXRoaXNbaV0scz1yP2UuYXBwbHkocixbYSxpLHRoaXNdKTplKGEsaSx0aGlzKTtpZihzPT09ITEpYnJlYWt9cmV0dXJuIHRoaXN9LCJmb3JFYWNoIiksdG9BcnJheTpvKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHI9MDtyPHRoaXMubGVuZ3RoO3IrKyllLnB1c2godGhpc1tyXSk7cmV0dXJuIGV9LCJ0b0FycmF5Iiksc2xpY2U6byhmdW5jdGlvbihlLHIpe3ZhciBuPVtdLGk9dGhpcy5sZW5ndGg7cj09bnVsbCYmKHI9aSksZT09bnVsbCYmKGU9MCksZTwwJiYoZT1pK2UpLHI8MCYmKHI9aStyKTtmb3IodmFyIGE9ZTthPj0wJiZhPHImJmE8aTthKyspbi5wdXNoKHRoaXNbYV0pO3JldHVybiB0aGlzLnNwYXduKG4pfSwic2xpY2UiKSxzaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LCJzaXplIiksZXE6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpc1tlXXx8dGhpcy5zcGF3bigpfSwiZXEiKSxmaXJzdDpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbMF18fHRoaXMuc3Bhd24oKX0sImZpcnN0IiksbGFzdDpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbdGhpcy5sZW5ndGgtMV18fHRoaXMuc3Bhd24oKX0sImxhc3QiKSxlbXB0eTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RoPT09MH0sImVtcHR5Iiksbm9uZW1wdHk6byhmdW5jdGlvbigpe3JldHVybiF0aGlzLmVtcHR5KCl9LCJub25lbXB0eSIpLHNvcnQ6byhmdW5jdGlvbihlKXtpZighbmkoZSkpcmV0dXJuIHRoaXM7dmFyIHI9dGhpcy50b0FycmF5KCkuc29ydChlKTtyZXR1cm4gdGhpcy5zcGF3bihyKX0sInNvcnQiKSxzb3J0QnlaSW5kZXg6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLnNvcnQoV2dlKX0sInNvcnRCeVpJbmRleCIpLHpEZXB0aDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpc1swXTtpZihlKXt2YXIgcj1lLl9wcml2YXRlLG49ci5ncm91cDtpZihuPT09Im5vZGVzIil7dmFyIGk9ci5kYXRhLnBhcmVudD9lLnBhcmVudHMoKS5zaXplKCk6MDtyZXR1cm4gZS5pc1BhcmVudCgpP2k6YUItMX1lbHNle3ZhciBhPXIuc291cmNlLHM9ci50YXJnZXQsbD1hLnpEZXB0aCgpLHU9cy56RGVwdGgoKTtyZXR1cm4gTWF0aC5tYXgobCx1LDApfX19LCJ6RGVwdGgiKX07UjYuZWFjaD1SNi5mb3JFYWNoO2NKZT1vKGZ1bmN0aW9uKCl7dmFyIGU9InVuZGVmaW5lZCIscj0odHlwZW9mIFN5bWJvbD4idSI/InVuZGVmaW5lZCI6S2koU3ltYm9sKSkhPWUmJktpKFN5bWJvbC5pdGVyYXRvcikhPWU7ciYmKFI2W1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXt2YXIgbj10aGlzLGk9e3ZhbHVlOnZvaWQgMCxkb25lOiExfSxhPTAscz10aGlzLmxlbmd0aDtyZXR1cm4gJG1lKHtuZXh0Om8oZnVuY3Rpb24oKXtyZXR1cm4gYTxzP2kudmFsdWU9blthKytdOihpLnZhbHVlPXZvaWQgMCxpLmRvbmU9ITApLGl9LCJuZXh0Iil9LFN5bWJvbC5pdGVyYXRvcixmdW5jdGlvbigpe3JldHVybiB0aGlzfSl9KX0sImRlZmluZVN5bWJvbEl0ZXJhdG9yIik7Y0plKCk7dUplPV9hKHtub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITF9KSxiNj17bGF5b3V0RGltZW5zaW9uczpvKGZ1bmN0aW9uKGUpe2U9dUplKGUpO3ZhciByO2lmKCF0aGlzLnRha2VzVXBTcGFjZSgpKXI9e3c6MCxoOjB9O2Vsc2UgaWYoZS5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHMpe3ZhciBuPXRoaXMuYm91bmRpbmdCb3goKTtyPXt3Om4udyxoOm4uaH19ZWxzZSByPXt3OnRoaXMub3V0ZXJXaWR0aCgpLGg6dGhpcy5vdXRlckhlaWdodCgpfTtyZXR1cm4oci53PT09MHx8ci5oPT09MCkmJihyLnc9ci5oPTEpLHJ9LCJsYXlvdXREaW1lbnNpb25zIiksbGF5b3V0UG9zaXRpb25zOm8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXRoaXMubm9kZXMoKS5maWx0ZXIoZnVuY3Rpb24oVCl7cmV0dXJuIVQuaXNQYXJlbnQoKX0pLGE9dGhpcy5jeSgpLHM9ci5lbGVzLGw9byhmdW5jdGlvbihFKXtyZXR1cm4gRS5pZCgpfSwiZ2V0TWVtb2l6ZUtleSIpLHU9cmIobixsKTtlLmVtaXQoe3R5cGU6ImxheW91dHN0YXJ0IixsYXlvdXQ6ZX0pLGUuYW5pbWF0aW9ucz1bXTt2YXIgaD1vKGZ1bmN0aW9uKEUsTCxTKXt2YXIgQT17eDpMLngxK0wudy8yLHk6TC55MStMLmgvMn0sST17eDooUy54LUEueCkqRSx5OihTLnktQS55KSpFfTtyZXR1cm57eDpBLngrSS54LHk6QS55K0kueX19LCJjYWxjdWxhdGVTcGFjaW5nIiksZj1yLnNwYWNpbmdGYWN0b3ImJnIuc3BhY2luZ0ZhY3RvciE9PTEsZD1vKGZ1bmN0aW9uKCl7aWYoIWYpcmV0dXJuIG51bGw7Zm9yKHZhciBFPUtzKCksTD0wO0w8aS5sZW5ndGg7TCsrKXt2YXIgUz1pW0xdLEE9dShTLEwpO2hqZShFLEEueCxBLnkpfXJldHVybiBFfSwic3BhY2luZ0JiIikscD1kKCksbT1yYihmdW5jdGlvbihULEUpe3ZhciBMPXUoVCxFKTtpZihmKXt2YXIgUz1NYXRoLmFicyhyLnNwYWNpbmdGYWN0b3IpO0w9aChTLHAsTCl9cmV0dXJuIHIudHJhbnNmb3JtIT1udWxsJiYoTD1yLnRyYW5zZm9ybShULEwpKSxMfSxsKTtpZihyLmFuaW1hdGUpe2Zvcih2YXIgZz0wO2c8aS5sZW5ndGg7ZysrKXt2YXIgeT1pW2ddLHY9bSh5LGcpLHg9ci5hbmltYXRlRmlsdGVyPT1udWxsfHxyLmFuaW1hdGVGaWx0ZXIoeSxnKTtpZih4KXt2YXIgYj15LmFuaW1hdGlvbih7cG9zaXRpb246dixkdXJhdGlvbjpyLmFuaW1hdGlvbkR1cmF0aW9uLGVhc2luZzpyLmFuaW1hdGlvbkVhc2luZ30pO2UuYW5pbWF0aW9ucy5wdXNoKGIpfWVsc2UgeS5wb3NpdGlvbih2KX1pZihyLmZpdCl7dmFyIHc9YS5hbmltYXRpb24oe2ZpdDp7Ym91bmRpbmdCb3g6cy5ib3VuZGluZ0JveEF0KG0pLHBhZGRpbmc6ci5wYWRkaW5nfSxkdXJhdGlvbjpyLmFuaW1hdGlvbkR1cmF0aW9uLGVhc2luZzpyLmFuaW1hdGlvbkVhc2luZ30pO2UuYW5pbWF0aW9ucy5wdXNoKHcpfWVsc2UgaWYoci56b29tIT09dm9pZCAwJiZyLnBhbiE9PXZvaWQgMCl7dmFyIF89YS5hbmltYXRpb24oe3pvb206ci56b29tLHBhbjpyLnBhbixkdXJhdGlvbjpyLmFuaW1hdGlvbkR1cmF0aW9uLGVhc2luZzpyLmFuaW1hdGlvbkVhc2luZ30pO2UuYW5pbWF0aW9ucy5wdXNoKF8pfWUuYW5pbWF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKFQpe3JldHVybiBULnBsYXkoKX0pLGUub25lKCJsYXlvdXRyZWFkeSIsci5yZWFkeSksZS5lbWl0KHt0eXBlOiJsYXlvdXRyZWFkeSIsbGF5b3V0OmV9KSxDMS5hbGwoZS5hbmltYXRpb25zLm1hcChmdW5jdGlvbihUKXtyZXR1cm4gVC5wcm9taXNlKCl9KSkudGhlbihmdW5jdGlvbigpe2Uub25lKCJsYXlvdXRzdG9wIixyLnN0b3ApLGUuZW1pdCh7dHlwZToibGF5b3V0c3RvcCIsbGF5b3V0OmV9KX0pfWVsc2UgaS5wb3NpdGlvbnMobSksci5maXQmJmEuZml0KHIuZWxlcyxyLnBhZGRpbmcpLHIuem9vbSE9bnVsbCYmYS56b29tKHIuem9vbSksci5wYW4mJmEucGFuKHIucGFuKSxlLm9uZSgibGF5b3V0cmVhZHkiLHIucmVhZHkpLGUuZW1pdCh7dHlwZToibGF5b3V0cmVhZHkiLGxheW91dDplfSksZS5vbmUoImxheW91dHN0b3AiLHIuc3RvcCksZS5lbWl0KHt0eXBlOiJsYXlvdXRzdG9wIixsYXlvdXQ6ZX0pO3JldHVybiB0aGlzfSwibGF5b3V0UG9zaXRpb25zIiksbGF5b3V0Om8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5jeSgpO3JldHVybiByLm1ha2VMYXlvdXQoaXIoe30sZSx7ZWxlczp0aGlzfSkpfSwibGF5b3V0Iil9O2I2LmNyZWF0ZUxheW91dD1iNi5tYWtlTGF5b3V0PWI2LmxheW91dDtvKFlnZSwic3R5bGVDYWNoZSIpO28oWDYsImNhY2hlU3R5bGVGdW5jdGlvbiIpO28oajYsImNhY2hlUHJvdG90eXBlU3R5bGVGdW5jdGlvbiIpO0NhPXtyZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGU6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLmN5KCksbj1yLnJlbmRlcmVyKCksaT1yLnN0eWxlRW5hYmxlZCgpO3JldHVybiBuJiZpJiZuLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh0aGlzLGUpLHRoaXN9LCJyZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUiKSxkaXJ0eVN0eWxlQ2FjaGU6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3koKSxyPW8oZnVuY3Rpb24oYSl7cmV0dXJuIGEuX3ByaXZhdGUuc3R5bGVDYWNoZT1udWxsfSwiZGlydHkiKTtpZihlLmhhc0NvbXBvdW5kTm9kZXMoKSl7dmFyIG47bj10aGlzLnNwYXduU2VsZigpLm1lcmdlKHRoaXMuZGVzY2VuZGFudHMoKSkubWVyZ2UodGhpcy5wYXJlbnRzKCkpLG4ubWVyZ2Uobi5jb25uZWN0ZWRFZGdlcygpKSxuLmZvckVhY2gocil9ZWxzZSB0aGlzLmZvckVhY2goZnVuY3Rpb24oaSl7cihpKSxpLmNvbm5lY3RlZEVkZ2VzKCkuZm9yRWFjaChyKX0pO3JldHVybiB0aGlzfSwiZGlydHlTdHlsZUNhY2hlIiksdXBkYXRlU3R5bGU6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlLmN5O2lmKCFyLnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO2lmKHIuYmF0Y2hpbmcoKSl7dmFyIG49ci5fcHJpdmF0ZS5iYXRjaFN0eWxlRWxlcztyZXR1cm4gbi5tZXJnZSh0aGlzKSx0aGlzfXZhciBpPXIuaGFzQ29tcG91bmROb2RlcygpLGE9dGhpcztlPSEhKGV8fGU9PT12b2lkIDApLGkmJihhPXRoaXMuc3Bhd25TZWxmKCkubWVyZ2UodGhpcy5kZXNjZW5kYW50cygpKS5tZXJnZSh0aGlzLnBhcmVudHMoKSkpO3ZhciBzPWE7cmV0dXJuIGU/cy5lbWl0QW5kTm90aWZ5KCJzdHlsZSIpOnMuZW1pdCgic3R5bGUiKSxhLmZvckVhY2goZnVuY3Rpb24obCl7cmV0dXJuIGwuX3ByaXZhdGUuc3R5bGVEaXJ0eT0hMH0pLHRoaXN9LCJ1cGRhdGVTdHlsZSIpLGNsZWFuU3R5bGU6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3koKTtpZihlLnN0eWxlRW5hYmxlZCgpKWZvcih2YXIgcj0wO3I8dGhpcy5sZW5ndGg7cisrKXt2YXIgbj10aGlzW3JdO24uX3ByaXZhdGUuc3R5bGVEaXJ0eSYmKG4uX3ByaXZhdGUuc3R5bGVEaXJ0eT0hMSxlLnN0eWxlKCkuYXBwbHkobikpfX0sImNsZWFuU3R5bGUiKSxwYXJzZWRTdHlsZTpvKGZ1bmN0aW9uKGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMCxuPXRoaXNbMF0saT1uLmN5KCk7aWYoaS5zdHlsZUVuYWJsZWQoKSYmbil7dGhpcy5jbGVhblN0eWxlKCk7dmFyIGE9bi5fcHJpdmF0ZS5zdHlsZVtlXTtyZXR1cm4gYT8/KHI/aS5zdHlsZSgpLmdldERlZmF1bHRQcm9wZXJ0eShlKTpudWxsKX19LCJwYXJzZWRTdHlsZSIpLG51bWVyaWNTdHlsZTpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXNbMF07aWYoci5jeSgpLnN0eWxlRW5hYmxlZCgpJiZyKXt2YXIgbj1yLnBzdHlsZShlKTtyZXR1cm4gbi5wZlZhbHVlIT09dm9pZCAwP24ucGZWYWx1ZTpuLnZhbHVlfX0sIm51bWVyaWNTdHlsZSIpLG51bWVyaWNTdHlsZVVuaXRzOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpc1swXTtpZihyLmN5KCkuc3R5bGVFbmFibGVkKCkmJnIpcmV0dXJuIHIucHN0eWxlKGUpLnVuaXRzfSwibnVtZXJpY1N0eWxlVW5pdHMiKSxyZW5kZXJlZFN0eWxlOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5jeSgpO2lmKCFyLnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO3ZhciBuPXRoaXNbMF07aWYobilyZXR1cm4gci5zdHlsZSgpLmdldFJlbmRlcmVkU3R5bGUobixlKX0sInJlbmRlcmVkU3R5bGUiKSxzdHlsZTpvKGZ1bmN0aW9uKGUscil7dmFyIG49dGhpcy5jeSgpO2lmKCFuLnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO3ZhciBpPSExLGE9bi5zdHlsZSgpO2lmKFVyKGUpKXt2YXIgcz1lO2EuYXBwbHlCeXBhc3ModGhpcyxzLGkpLHRoaXMuZW1pdEFuZE5vdGlmeSgic3R5bGUiKX1lbHNlIGlmKFp0KGUpKWlmKHI9PT12b2lkIDApe3ZhciBsPXRoaXNbMF07cmV0dXJuIGw/YS5nZXRTdHlsZVByb3BlcnR5VmFsdWUobCxlKTp2b2lkIDB9ZWxzZSBhLmFwcGx5QnlwYXNzKHRoaXMsZSxyLGkpLHRoaXMuZW1pdEFuZE5vdGlmeSgic3R5bGUiKTtlbHNlIGlmKGU9PT12b2lkIDApe3ZhciB1PXRoaXNbMF07cmV0dXJuIHU/YS5nZXRSYXdTdHlsZSh1KTp2b2lkIDB9cmV0dXJuIHRoaXN9LCJzdHlsZSIpLHJlbW92ZVN0eWxlOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5jeSgpO2lmKCFyLnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO3ZhciBuPSExLGk9ci5zdHlsZSgpLGE9dGhpcztpZihlPT09dm9pZCAwKWZvcih2YXIgcz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdO2kucmVtb3ZlQWxsQnlwYXNzZXMobCxuKX1lbHNle2U9ZS5zcGxpdCgvXHMrLyk7Zm9yKHZhciB1PTA7dTxhLmxlbmd0aDt1Kyspe3ZhciBoPWFbdV07aS5yZW1vdmVCeXBhc3NlcyhoLGUsbil9fXJldHVybiB0aGlzLmVtaXRBbmROb3RpZnkoInN0eWxlIiksdGhpc30sInJlbW92ZVN0eWxlIiksc2hvdzpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3NzKCJkaXNwbGF5IiwiZWxlbWVudCIpLHRoaXN9LCJzaG93IiksaGlkZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3NzKCJkaXNwbGF5Iiwibm9uZSIpLHRoaXN9LCJoaWRlIiksZWZmZWN0aXZlT3BhY2l0eTpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jeSgpO2lmKCFlLnN0eWxlRW5hYmxlZCgpKXJldHVybiAxO3ZhciByPWUuaGFzQ29tcG91bmROb2RlcygpLG49dGhpc1swXTtpZihuKXt2YXIgaT1uLl9wcml2YXRlLGE9bi5wc3R5bGUoIm9wYWNpdHkiKS52YWx1ZTtpZighcilyZXR1cm4gYTt2YXIgcz1pLmRhdGEucGFyZW50P24ucGFyZW50cygpOm51bGw7aWYocylmb3IodmFyIGw9MDtsPHMubGVuZ3RoO2wrKyl7dmFyIHU9c1tsXSxoPXUucHN0eWxlKCJvcGFjaXR5IikudmFsdWU7YT1oKmF9cmV0dXJuIGF9fSwiZWZmZWN0aXZlT3BhY2l0eSIpLHRyYW5zcGFyZW50Om8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLmN5KCk7aWYoIWUuc3R5bGVFbmFibGVkKCkpcmV0dXJuITE7dmFyIHI9dGhpc1swXSxuPXIuY3koKS5oYXNDb21wb3VuZE5vZGVzKCk7aWYocilyZXR1cm4gbj9yLmVmZmVjdGl2ZU9wYWNpdHkoKT09PTA6ci5wc3R5bGUoIm9wYWNpdHkiKS52YWx1ZT09PTB9LCJ0cmFuc3BhcmVudCIpLGJhY2tncm91bmRpbmc6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3koKTtpZighZS5zdHlsZUVuYWJsZWQoKSlyZXR1cm4hMTt2YXIgcj10aGlzWzBdO3JldHVybiEhci5fcHJpdmF0ZS5iYWNrZ3JvdW5kaW5nfSwiYmFja2dyb3VuZGluZyIpfTtvKElQLCJjaGVja0NvbXBvdW5kIik7byh5QiwiZGVmaW5lRGVyaXZlZFN0YXRlRnVuY3Rpb24iKTtEMT1YNigiZWxlVGFrZXNVcFNwYWNlIixmdW5jdGlvbih0KXtyZXR1cm4gdC5wc3R5bGUoImRpc3BsYXkiKS52YWx1ZT09PSJlbGVtZW50IiYmdC53aWR0aCgpIT09MCYmKHQuaXNOb2RlKCk/dC5oZWlnaHQoKSE9PTA6ITApfSk7Q2EudGFrZXNVcFNwYWNlPWo2KCJ0YWtlc1VwU3BhY2UiLHlCKHtvazpEMX0pKTtoSmU9WDYoImVsZUludGVyYWN0aXZlIixmdW5jdGlvbih0KXtyZXR1cm4gdC5wc3R5bGUoImV2ZW50cyIpLnZhbHVlPT09InllcyImJnQucHN0eWxlKCJ2aXNpYmlsaXR5IikudmFsdWU9PT0idmlzaWJsZSImJkQxKHQpfSksZkplPVg2KCJwYXJlbnRJbnRlcmFjdGl2ZSIsZnVuY3Rpb24odCl7cmV0dXJuIHQucHN0eWxlKCJ2aXNpYmlsaXR5IikudmFsdWU9PT0idmlzaWJsZSImJkQxKHQpfSk7Q2EuaW50ZXJhY3RpdmU9ajYoImludGVyYWN0aXZlIix5Qih7b2s6aEplLHBhcmVudE9rOmZKZSxlZGdlT2tWaWFOb2RlOkQxfSkpO0NhLm5vbmludGVyYWN0aXZlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpc1swXTtpZih0KXJldHVybiF0LmludGVyYWN0aXZlKCl9O2RKZT1YNigiZWxlVmlzaWJsZSIsZnVuY3Rpb24odCl7cmV0dXJuIHQucHN0eWxlKCJ2aXNpYmlsaXR5IikudmFsdWU9PT0idmlzaWJsZSImJnQucHN0eWxlKCJvcGFjaXR5IikucGZWYWx1ZSE9PTAmJkQxKHQpfSkscEplPUQxO0NhLnZpc2libGU9ajYoInZpc2libGUiLHlCKHtvazpkSmUsZWRnZU9rVmlhTm9kZTpwSmV9KSk7Q2EuaGlkZGVuPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpc1swXTtpZih0KXJldHVybiF0LnZpc2libGUoKX07Q2EuaXNCdW5kbGVkQmV6aWVyPWo2KCJpc0J1bmRsZWRCZXppZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3koKS5zdHlsZUVuYWJsZWQoKT8hdGhpcy5yZW1vdmVkKCkmJnRoaXMucHN0eWxlKCJjdXJ2ZS1zdHlsZSIpLnZhbHVlPT09ImJlemllciImJnRoaXMudGFrZXNVcFNwYWNlKCk6ITF9KTtDYS5ieXBhc3M9Q2EuY3NzPUNhLnN0eWxlO0NhLnJlbmRlcmVkQ3NzPUNhLnJlbmRlcmVkU3R5bGU7Q2EucmVtb3ZlQnlwYXNzPUNhLnJlbW92ZUNzcz1DYS5yZW1vdmVTdHlsZTtDYS5wc3R5bGU9Q2EucGFyc2VkU3R5bGU7TWY9e307byhobWUsImRlZmluZVN3aXRjaEZ1bmN0aW9uIik7byhOMSwiZGVmaW5lU3dpdGNoU2V0Iik7TjEoe2ZpZWxkOiJsb2NrZWQiLG92ZXJyaWRlRmllbGQ6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5jeSgpLmF1dG9sb2NrKCk/ITA6dm9pZCAwfSwib3ZlcnJpZGVGaWVsZCIpLG9uOiJsb2NrIixvZmY6InVubG9jayJ9KTtOMSh7ZmllbGQ6ImdyYWJiYWJsZSIsb3ZlcnJpZGVGaWVsZDpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmN5KCkuYXV0b3VuZ3JhYmlmeSgpfHxlLnBhbm5hYmxlKCk/ITE6dm9pZCAwfSwib3ZlcnJpZGVGaWVsZCIpLG9uOiJncmFiaWZ5IixvZmY6InVuZ3JhYmlmeSJ9KTtOMSh7ZmllbGQ6InNlbGVjdGVkIixhYmxlRmllbGQ6InNlbGVjdGFibGUiLG92ZXJyaWRlQWJsZTpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmN5KCkuYXV0b3Vuc2VsZWN0aWZ5KCk/ITE6dm9pZCAwfSwib3ZlcnJpZGVBYmxlIiksb246InNlbGVjdCIsb2ZmOiJ1bnNlbGVjdCJ9KTtOMSh7ZmllbGQ6InNlbGVjdGFibGUiLG92ZXJyaWRlRmllbGQ6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5jeSgpLmF1dG91bnNlbGVjdGlmeSgpPyExOnZvaWQgMH0sIm92ZXJyaWRlRmllbGQiKSxvbjoic2VsZWN0aWZ5IixvZmY6InVuc2VsZWN0aWZ5In0pO01mLmRlc2VsZWN0PU1mLnVuc2VsZWN0O01mLmdyYWJiZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzWzBdO2lmKHQpcmV0dXJuIHQuX3ByaXZhdGUuZ3JhYmJlZH07TjEoe2ZpZWxkOiJhY3RpdmUiLG9uOiJhY3RpdmF0ZSIsb2ZmOiJ1bmFjdGl2YXRlIn0pO04xKHtmaWVsZDoicGFubmFibGUiLG9uOiJwYW5pZnkiLG9mZjoidW5wYW5pZnkifSk7TWYuaW5hY3RpdmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzWzBdO2lmKHQpcmV0dXJuIXQuX3ByaXZhdGUuYWN0aXZlfTtIYT17fSxmbWU9byhmdW5jdGlvbihlKXtyZXR1cm4gbyhmdW5jdGlvbihuKXtmb3IodmFyIGk9dGhpcyxhPVtdLHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGw9aVtzXTtpZihsLmlzTm9kZSgpKXtmb3IodmFyIHU9ITEsaD1sLmNvbm5lY3RlZEVkZ2VzKCksZj0wO2Y8aC5sZW5ndGg7ZisrKXt2YXIgZD1oW2ZdLHA9ZC5zb3VyY2UoKSxtPWQudGFyZ2V0KCk7aWYoZS5ub0luY29taW5nRWRnZXMmJm09PT1sJiZwIT09bHx8ZS5ub091dGdvaW5nRWRnZXMmJnA9PT1sJiZtIT09bCl7dT0hMDticmVha319dXx8YS5wdXNoKGwpfX1yZXR1cm4gdGhpcy5zcGF3bihhLCEwKS5maWx0ZXIobil9LCJkYWdFeHRyZW1pdHlJbXBsIil9LCJkZWZpbmVEYWdFeHRyZW1pdHkiKSxkbWU9byhmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24ocil7Zm9yKHZhciBuPXRoaXMsaT1bXSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBzPW5bYV07aWYocy5pc05vZGUoKSlmb3IodmFyIGw9cy5jb25uZWN0ZWRFZGdlcygpLHU9MDt1PGwubGVuZ3RoO3UrKyl7dmFyIGg9bFt1XSxmPWguc291cmNlKCksZD1oLnRhcmdldCgpO2Uub3V0Z29pbmcmJmY9PT1zPyhpLnB1c2goaCksaS5wdXNoKGQpKTplLmluY29taW5nJiZkPT09cyYmKGkucHVzaChoKSxpLnB1c2goZikpfX1yZXR1cm4gdGhpcy5zcGF3bihpLCEwKS5maWx0ZXIocil9fSwiZGVmaW5lRGFnT25lSG9wIikscG1lPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe2Zvcih2YXIgbj10aGlzLGk9W10sYT17fTs7KXt2YXIgcz1lLm91dGdvaW5nP24ub3V0Z29lcnMoKTpuLmluY29tZXJzKCk7aWYocy5sZW5ndGg9PT0wKWJyZWFrO2Zvcih2YXIgbD0hMSx1PTA7dTxzLmxlbmd0aDt1Kyspe3ZhciBoPXNbdV0sZj1oLmlkKCk7YVtmXXx8KGFbZl09ITAsaS5wdXNoKGgpLGw9ITApfWlmKCFsKWJyZWFrO249c31yZXR1cm4gdGhpcy5zcGF3bihpLCEwKS5maWx0ZXIocil9fSwiZGVmaW5lRGFnQWxsSG9wcyIpO0hhLmNsZWFyVHJhdmVyc2FsQ2FjaGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PHRoaXMubGVuZ3RoO3QrKyl0aGlzW3RdLl9wcml2YXRlLnRyYXZlcnNhbENhY2hlPW51bGx9O2lyKEhhLHtyb290czpmbWUoe25vSW5jb21pbmdFZGdlczohMH0pLGxlYXZlczpmbWUoe25vT3V0Z29pbmdFZGdlczohMH0pLG91dGdvZXJzOmhsKGRtZSh7b3V0Z29pbmc6ITB9KSwib3V0Z29lcnMiKSxzdWNjZXNzb3JzOnBtZSh7b3V0Z29pbmc6ITB9KSxpbmNvbWVyczpobChkbWUoe2luY29taW5nOiEwfSksImluY29tZXJzIikscHJlZGVjZXNzb3JzOnBtZSh7aW5jb21pbmc6ITB9KX0pO2lyKEhhLHtuZWlnaGJvcmhvb2Q6aGwoZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9dGhpcy5ub2RlcygpLG49MDtuPHIubGVuZ3RoO24rKylmb3IodmFyIGk9cltuXSxhPWkuY29ubmVjdGVkRWRnZXMoKSxzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc10sdT1sLnNvdXJjZSgpLGg9bC50YXJnZXQoKSxmPWk9PT11P2g6dTtmLmxlbmd0aD4wJiZlLnB1c2goZlswXSksZS5wdXNoKGxbMF0pfXJldHVybiB0aGlzLnNwYXduKGUsITApLmZpbHRlcih0KX0sIm5laWdoYm9yaG9vZCIpLGNsb3NlZE5laWdoYm9yaG9vZDpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm5laWdoYm9yaG9vZCgpLmFkZCh0aGlzKS5maWx0ZXIoZSl9LCJjbG9zZWROZWlnaGJvcmhvb2QiKSxvcGVuTmVpZ2hib3Job29kOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubmVpZ2hib3Job29kKGUpfSwib3Blbk5laWdoYm9yaG9vZCIpfSk7SGEubmVpZ2hib3VyaG9vZD1IYS5uZWlnaGJvcmhvb2Q7SGEuY2xvc2VkTmVpZ2hib3VyaG9vZD1IYS5jbG9zZWROZWlnaGJvcmhvb2Q7SGEub3Blbk5laWdoYm91cmhvb2Q9SGEub3Blbk5laWdoYm9yaG9vZDtpcihIYSx7c291cmNlOmhsKG8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpc1swXSxuO3JldHVybiByJiYobj1yLl9wcml2YXRlLnNvdXJjZXx8ci5jeSgpLmNvbGxlY3Rpb24oKSksbiYmZT9uLmZpbHRlcihlKTpufSwic291cmNlSW1wbCIpLCJzb3VyY2UiKSx0YXJnZXQ6aGwobyhmdW5jdGlvbihlKXt2YXIgcj10aGlzWzBdLG47cmV0dXJuIHImJihuPXIuX3ByaXZhdGUudGFyZ2V0fHxyLmN5KCkuY29sbGVjdGlvbigpKSxuJiZlP24uZmlsdGVyKGUpOm59LCJ0YXJnZXRJbXBsIiksInRhcmdldCIpLHNvdXJjZXM6bW1lKHthdHRyOiJzb3VyY2UifSksdGFyZ2V0czptbWUoe2F0dHI6InRhcmdldCJ9KX0pO28obW1lLCJkZWZpbmVTb3VyY2VGdW5jdGlvbiIpO2lyKEhhLHtlZGdlc1dpdGg6aGwoZ21lKCksImVkZ2VzV2l0aCIpLGVkZ2VzVG86aGwoZ21lKHt0aGlzSXNTcmM6ITB9KSwiZWRnZXNUbyIpfSk7byhnbWUsImRlZmluZUVkZ2VzV2l0aEZ1bmN0aW9uIik7aXIoSGEse2Nvbm5lY3RlZEVkZ2VzOmhsKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPXRoaXMsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2lmKGkuaXNOb2RlKCkpZm9yKHZhciBhPWkuX3ByaXZhdGUuZWRnZXMscz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdO2UucHVzaChsKX19cmV0dXJuIHRoaXMuc3Bhd24oZSwhMCkuZmlsdGVyKHQpfSwiY29ubmVjdGVkRWRnZXMiKSxjb25uZWN0ZWROb2RlczpobChmdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj10aGlzLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtpLmlzRWRnZSgpJiYoZS5wdXNoKGkuc291cmNlKClbMF0pLGUucHVzaChpLnRhcmdldCgpWzBdKSl9cmV0dXJuIHRoaXMuc3Bhd24oZSwhMCkuZmlsdGVyKHQpfSwiY29ubmVjdGVkTm9kZXMiKSxwYXJhbGxlbEVkZ2VzOmhsKHltZSgpLCJwYXJhbGxlbEVkZ2VzIiksY29kaXJlY3RlZEVkZ2VzOmhsKHltZSh7Y29kaXJlY3RlZDohMH0pLCJjb2RpcmVjdGVkRWRnZXMiKX0pO28oeW1lLCJkZWZpbmVQYXJhbGxlbEVkZ2VzRnVuY3Rpb24iKTtpcihIYSx7Y29tcG9uZW50czpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMsbj1yLmN5KCksaT1uLmNvbGxlY3Rpb24oKSxhPWU9PW51bGw/ci5ub2RlcygpOmUubm9kZXMoKSxzPVtdO2UhPW51bGwmJmEuZW1wdHkoKSYmKGE9ZS5zb3VyY2VzKCkpO3ZhciBsPW8oZnVuY3Rpb24oZixkKXtpLm1lcmdlKGYpLGEudW5tZXJnZShmKSxkLm1lcmdlKGYpfSwidmlzaXRJbkNvbXBvbmVudCIpO2lmKGEuZW1wdHkoKSlyZXR1cm4gci5zcGF3bigpO3ZhciB1PW8oZnVuY3Rpb24oKXt2YXIgZj1uLmNvbGxlY3Rpb24oKTtzLnB1c2goZik7dmFyIGQ9YVswXTtsKGQsZiksci5iZnMoe2RpcmVjdGVkOiExLHJvb3RzOmQsdmlzaXQ6byhmdW5jdGlvbihtKXtyZXR1cm4gbChtLGYpfSwidmlzaXQiKX0pLGYuZm9yRWFjaChmdW5jdGlvbihwKXtwLmNvbm5lY3RlZEVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihtKXtyLmhhcyhtKSYmZi5oYXMobS5zb3VyY2UoKSkmJmYuaGFzKG0udGFyZ2V0KCkpJiZmLm1lcmdlKG0pfSl9KX0sIl9sb29wIik7ZG8gdSgpO3doaWxlKGEubGVuZ3RoPjApO3JldHVybiBzfSwiY29tcG9uZW50cyIpLGNvbXBvbmVudDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpc1swXTtyZXR1cm4gZS5jeSgpLm11dGFibGVFbGVtZW50cygpLmNvbXBvbmVudHMoZSlbMF19LCJjb21wb25lbnQiKX0pO0hhLmNvbXBvbmVudHNPZj1IYS5jb21wb25lbnRzO0FhPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITEsaT1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITE7aWYoZT09PXZvaWQgMCl7ZGkoIkEgY29sbGVjdGlvbiBtdXN0IGhhdmUgYSByZWZlcmVuY2UgdG8gdGhlIGNvcmUiKTtyZXR1cm59dmFyIGE9bmV3IEpjLHM9ITE7aWYoIXIpcj1bXTtlbHNlIGlmKHIubGVuZ3RoPjAmJlVyKHJbMF0pJiYhcGIoclswXSkpe3M9ITA7Zm9yKHZhciBsPVtdLHU9bmV3IFMxLGg9MCxmPXIubGVuZ3RoO2g8ZjtoKyspe3ZhciBkPXJbaF07ZC5kYXRhPT1udWxsJiYoZC5kYXRhPXt9KTt2YXIgcD1kLmRhdGE7aWYocC5pZD09bnVsbClwLmlkPWFnZSgpO2Vsc2UgaWYoZS5oYXNFbGVtZW50V2l0aElkKHAuaWQpfHx1LmhhcyhwLmlkKSljb250aW51ZTt2YXIgbT1uZXcgRzYoZSxkLCExKTtsLnB1c2gobSksdS5hZGQocC5pZCl9cj1sfXRoaXMubGVuZ3RoPTA7Zm9yKHZhciBnPTAseT1yLmxlbmd0aDtnPHk7ZysrKXt2YXIgdj1yW2ddWzBdO2lmKHYhPW51bGwpe3ZhciB4PXYuX3ByaXZhdGUuZGF0YS5pZDsoIW58fCFhLmhhcyh4KSkmJihuJiZhLnNldCh4LHtpbmRleDp0aGlzLmxlbmd0aCxlbGU6dn0pLHRoaXNbdGhpcy5sZW5ndGhdPXYsdGhpcy5sZW5ndGgrKyl9fXRoaXMuX3ByaXZhdGU9e2VsZXM6dGhpcyxjeTplLGdldCBtYXAoKXtyZXR1cm4gdGhpcy5sYXp5TWFwPT1udWxsJiZ0aGlzLnJlYnVpbGRNYXAoKSx0aGlzLmxhenlNYXB9LHNldCBtYXAoYil7dGhpcy5sYXp5TWFwPWJ9LHJlYnVpbGRNYXA6byhmdW5jdGlvbigpe2Zvcih2YXIgdz10aGlzLmxhenlNYXA9bmV3IEpjLF89dGhpcy5lbGVzLFQ9MDtUPF8ubGVuZ3RoO1QrKyl7dmFyIEU9X1tUXTt3LnNldChFLmlkKCkse2luZGV4OlQsZWxlOkV9KX19LCJyZWJ1aWxkTWFwIil9LG4mJih0aGlzLl9wcml2YXRlLm1hcD1hKSxzJiYhaSYmdGhpcy5yZXN0b3JlKCl9LCJDb2xsZWN0aW9uIiksTW49RzYucHJvdG90eXBlPUFhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEFycmF5LnByb3RvdHlwZSk7TW4uaW5zdGFuY2VTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iY29sbGVjdGlvbiJ9O01uLnNwYXduPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBBYSh0aGlzLmN5KCksdCxlKX07TW4uc3Bhd25TZWxmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3Bhd24odGhpcyl9O01uLmN5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuY3l9O01uLnJlbmRlcmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuY3kucmVuZGVyZXIoKX07TW4uZWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzWzBdfTtNbi5jb2xsZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIFdtZSh0aGlzKT90aGlzOm5ldyBBYSh0aGlzLl9wcml2YXRlLmN5LFt0aGlzXSl9O01uLnVuaXF1ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgQWEodGhpcy5fcHJpdmF0ZS5jeSx0aGlzLCEwKX07TW4uaGFzRWxlbWVudFdpdGhJZD1mdW5jdGlvbih0KXtyZXR1cm4gdD0iIit0LHRoaXMuX3ByaXZhdGUubWFwLmhhcyh0KX07TW4uZ2V0RWxlbWVudEJ5SWQ9ZnVuY3Rpb24odCl7dD0iIit0O3ZhciBlPXRoaXMuX3ByaXZhdGUuY3kscj10aGlzLl9wcml2YXRlLm1hcC5nZXQodCk7cmV0dXJuIHI/ci5lbGU6bmV3IEFhKGUpfTtNbi4kaWQ9TW4uZ2V0RWxlbWVudEJ5SWQ7TW4ucG9vbEluZGV4PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcHJpdmF0ZS5jeSxlPXQuX3ByaXZhdGUuZWxlbWVudHMscj10aGlzWzBdLl9wcml2YXRlLmRhdGEuaWQ7cmV0dXJuIGUuX3ByaXZhdGUubWFwLmdldChyKS5pbmRleH07TW4uaW5kZXhPZj1mdW5jdGlvbih0KXt2YXIgZT10WzBdLl9wcml2YXRlLmRhdGEuaWQ7cmV0dXJuIHRoaXMuX3ByaXZhdGUubWFwLmdldChlKS5pbmRleH07TW4uaW5kZXhPZklkPWZ1bmN0aW9uKHQpe3JldHVybiB0PSIiK3QsdGhpcy5fcHJpdmF0ZS5tYXAuZ2V0KHQpLmluZGV4fTtNbi5qc29uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZWxlbWVudCgpLHI9dGhpcy5jeSgpO2lmKGU9PW51bGwmJnQpcmV0dXJuIHRoaXM7aWYoZSE9bnVsbCl7dmFyIG49ZS5fcHJpdmF0ZTtpZihVcih0KSl7aWYoci5zdGFydEJhdGNoKCksdC5kYXRhKXtlLmRhdGEodC5kYXRhKTt2YXIgaT1uLmRhdGE7aWYoZS5pc0VkZ2UoKSl7dmFyIGE9ITEscz17fSxsPXQuZGF0YS5zb3VyY2UsdT10LmRhdGEudGFyZ2V0O2whPW51bGwmJmwhPWkuc291cmNlJiYocy5zb3VyY2U9IiIrbCxhPSEwKSx1IT1udWxsJiZ1IT1pLnRhcmdldCYmKHMudGFyZ2V0PSIiK3UsYT0hMCksYSYmKGU9ZS5tb3ZlKHMpKX1lbHNle3ZhciBoPSJwYXJlbnQiaW4gdC5kYXRhLGY9dC5kYXRhLnBhcmVudDtoJiYoZiE9bnVsbHx8aS5wYXJlbnQhPW51bGwpJiZmIT1pLnBhcmVudCYmKGY9PT12b2lkIDAmJihmPW51bGwpLGYhPW51bGwmJihmPSIiK2YpLGU9ZS5tb3ZlKHtwYXJlbnQ6Zn0pKX19dC5wb3NpdGlvbiYmZS5wb3NpdGlvbih0LnBvc2l0aW9uKTt2YXIgZD1vKGZ1bmN0aW9uKHksdix4KXt2YXIgYj10W3ldO2IhPW51bGwmJmIhPT1uW3ldJiYoYj9lW3ZdKCk6ZVt4XSgpKX0sImNoZWNrU3dpdGNoIik7cmV0dXJuIGQoInJlbW92ZWQiLCJyZW1vdmUiLCJyZXN0b3JlIiksZCgic2VsZWN0ZWQiLCJzZWxlY3QiLCJ1bnNlbGVjdCIpLGQoInNlbGVjdGFibGUiLCJzZWxlY3RpZnkiLCJ1bnNlbGVjdGlmeSIpLGQoImxvY2tlZCIsImxvY2siLCJ1bmxvY2siKSxkKCJncmFiYmFibGUiLCJncmFiaWZ5IiwidW5ncmFiaWZ5IiksZCgicGFubmFibGUiLCJwYW5pZnkiLCJ1bnBhbmlmeSIpLHQuY2xhc3NlcyE9bnVsbCYmZS5jbGFzc2VzKHQuY2xhc3Nlcyksci5lbmRCYXRjaCgpLHRoaXN9ZWxzZSBpZih0PT09dm9pZCAwKXt2YXIgcD17ZGF0YTpaYyhuLmRhdGEpLHBvc2l0aW9uOlpjKG4ucG9zaXRpb24pLGdyb3VwOm4uZ3JvdXAscmVtb3ZlZDpuLnJlbW92ZWQsc2VsZWN0ZWQ6bi5zZWxlY3RlZCxzZWxlY3RhYmxlOm4uc2VsZWN0YWJsZSxsb2NrZWQ6bi5sb2NrZWQsZ3JhYmJhYmxlOm4uZ3JhYmJhYmxlLHBhbm5hYmxlOm4ucGFubmFibGUsY2xhc3NlczpudWxsfTtwLmNsYXNzZXM9IiI7dmFyIG09MDtyZXR1cm4gbi5jbGFzc2VzLmZvckVhY2goZnVuY3Rpb24oZyl7cmV0dXJuIHAuY2xhc3Nlcys9bSsrPT09MD9nOiIgIitnfSkscH19fTtNbi5qc29ucz1mdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTx0aGlzLmxlbmd0aDtlKyspe3ZhciByPXRoaXNbZV0sbj1yLmpzb24oKTt0LnB1c2gobil9cmV0dXJuIHR9O01uLmNsb25lPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuY3koKSxlPVtdLHI9MDtyPHRoaXMubGVuZ3RoO3IrKyl7dmFyIG49dGhpc1tyXSxpPW4uanNvbigpLGE9bmV3IEc2KHQsaSwhMSk7ZS5wdXNoKGEpfXJldHVybiBuZXcgQWEodCxlKX07TW4uY29weT1Nbi5jbG9uZTtNbi5yZXN0b3JlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMCxlPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMCxyPXRoaXMsbj1yLmN5KCksaT1uLl9wcml2YXRlLGE9W10scz1bXSxsLHU9MCxoPXIubGVuZ3RoO3U8aDt1Kyspe3ZhciBmPXJbdV07ZSYmIWYucmVtb3ZlZCgpfHwoZi5pc05vZGUoKT9hLnB1c2goZik6cy5wdXNoKGYpKX1sPWEuY29uY2F0KHMpO3ZhciBkLHA9byhmdW5jdGlvbigpe2wuc3BsaWNlKGQsMSksZC0tfSwicmVtb3ZlRnJvbUVsZW1lbnRzIik7Zm9yKGQ9MDtkPGwubGVuZ3RoO2QrKyl7dmFyIG09bFtkXSxnPW0uX3ByaXZhdGUseT1nLmRhdGE7aWYobS5jbGVhclRyYXZlcnNhbENhY2hlKCksISghZSYmIWcucmVtb3ZlZCkpe2lmKHkuaWQ9PT12b2lkIDApeS5pZD1hZ2UoKTtlbHNlIGlmKHh0KHkuaWQpKXkuaWQ9IiIreS5pZDtlbHNlIGlmKElmKHkuaWQpfHwhWnQoeS5pZCkpe2RpKCJDYW4gbm90IGNyZWF0ZSBlbGVtZW50IHdpdGggaW52YWxpZCBzdHJpbmcgSUQgYCIreS5pZCsiYCIpLHAoKTtjb250aW51ZX1lbHNlIGlmKG4uaGFzRWxlbWVudFdpdGhJZCh5LmlkKSl7ZGkoIkNhbiBub3QgY3JlYXRlIHNlY29uZCBlbGVtZW50IHdpdGggSUQgYCIreS5pZCsiYCIpLHAoKTtjb250aW51ZX19dmFyIHY9eS5pZDtpZihtLmlzTm9kZSgpKXt2YXIgeD1nLnBvc2l0aW9uO3gueD09bnVsbCYmKHgueD0wKSx4Lnk9PW51bGwmJih4Lnk9MCl9aWYobS5pc0VkZ2UoKSl7Zm9yKHZhciBiPW0sdz1bInNvdXJjZSIsInRhcmdldCJdLF89dy5sZW5ndGgsVD0hMSxFPTA7RTxfO0UrKyl7dmFyIEw9d1tFXSxTPXlbTF07eHQoUykmJihTPXlbTF09IiIreVtMXSksUz09bnVsbHx8Uz09PSIiPyhkaSgiQ2FuIG5vdCBjcmVhdGUgZWRnZSBgIit2KyJgIHdpdGggdW5zcGVjaWZpZWQgIitMKSxUPSEwKTpuLmhhc0VsZW1lbnRXaXRoSWQoUyl8fChkaSgiQ2FuIG5vdCBjcmVhdGUgZWRnZSBgIit2KyJgIHdpdGggbm9uZXhpc3RhbnQgIitMKyIgYCIrUysiYCIpLFQ9ITApfWlmKFQpe3AoKTtjb250aW51ZX12YXIgQT1uLmdldEVsZW1lbnRCeUlkKHkuc291cmNlKSxJPW4uZ2V0RWxlbWVudEJ5SWQoeS50YXJnZXQpO0Euc2FtZShJKT9BLl9wcml2YXRlLmVkZ2VzLnB1c2goYik6KEEuX3ByaXZhdGUuZWRnZXMucHVzaChiKSxJLl9wcml2YXRlLmVkZ2VzLnB1c2goYikpLGIuX3ByaXZhdGUuc291cmNlPUEsYi5fcHJpdmF0ZS50YXJnZXQ9SX1nLm1hcD1uZXcgSmMsZy5tYXAuc2V0KHYse2VsZTptLGluZGV4OjB9KSxnLnJlbW92ZWQ9ITEsZSYmbi5hZGRUb1Bvb2wobSl9Zm9yKHZhciBEPTA7RDxhLmxlbmd0aDtEKyspe3ZhciBrPWFbRF0sUj1rLl9wcml2YXRlLmRhdGE7eHQoUi5wYXJlbnQpJiYoUi5wYXJlbnQ9IiIrUi5wYXJlbnQpO3ZhciBDPVIucGFyZW50LE89QyE9bnVsbDtpZihPfHxrLl9wcml2YXRlLnBhcmVudCl7dmFyIE49ay5fcHJpdmF0ZS5wYXJlbnQ/bi5jb2xsZWN0aW9uKCkubWVyZ2Uoay5fcHJpdmF0ZS5wYXJlbnQpOm4uZ2V0RWxlbWVudEJ5SWQoQyk7aWYoTi5lbXB0eSgpKVIucGFyZW50PXZvaWQgMDtlbHNlIGlmKE5bMF0ucmVtb3ZlZCgpKW9uKCJOb2RlIGFkZGVkIHdpdGggbWlzc2luZyBwYXJlbnQsIHJlZmVyZW5jZSB0byBwYXJlbnQgcmVtb3ZlZCIpLFIucGFyZW50PXZvaWQgMCxrLl9wcml2YXRlLnBhcmVudD1udWxsO2Vsc2V7Zm9yKHZhciBQPSExLEY9TjshRi5lbXB0eSgpOyl7aWYoay5zYW1lKEYpKXtQPSEwLFIucGFyZW50PXZvaWQgMDticmVha31GPUYucGFyZW50KCl9UHx8KE5bMF0uX3ByaXZhdGUuY2hpbGRyZW4ucHVzaChrKSxrLl9wcml2YXRlLnBhcmVudD1OWzBdLGkuaGFzQ29tcG91bmROb2Rlcz0hMCl9fX1pZihsLmxlbmd0aD4wKXtmb3IodmFyIEI9bC5sZW5ndGg9PT1yLmxlbmd0aD9yOm5ldyBBYShuLGwpLEc9MDtHPEIubGVuZ3RoO0crKyl7dmFyIHo9QltHXTt6LmlzTm9kZSgpfHwoei5wYXJhbGxlbEVkZ2VzKCkuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpLHouc291cmNlKCkuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpLHoudGFyZ2V0KCkuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpKX12YXIgVztpLmhhc0NvbXBvdW5kTm9kZXM/Vz1uLmNvbGxlY3Rpb24oKS5tZXJnZShCKS5tZXJnZShCLmNvbm5lY3RlZE5vZGVzKCkpLm1lcmdlKEIucGFyZW50KCkpOlc9QixXLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLnVwZGF0ZVN0eWxlKHQpLHQ/Qi5lbWl0QW5kTm90aWZ5KCJhZGQiKTplJiZCLmVtaXQoImFkZCIpfXJldHVybiByfTtNbi5yZW1vdmVkPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpc1swXTtyZXR1cm4gdCYmdC5fcHJpdmF0ZS5yZW1vdmVkfTtNbi5pbnNpZGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzWzBdO3JldHVybiB0JiYhdC5fcHJpdmF0ZS5yZW1vdmVkfTtNbi5yZW1vdmU9ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06ITAsZT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITAscj10aGlzLG49W10saT17fSxhPXIuX3ByaXZhdGUuY3k7ZnVuY3Rpb24gcyhDKXtmb3IodmFyIE89Qy5fcHJpdmF0ZS5lZGdlcyxOPTA7TjxPLmxlbmd0aDtOKyspdShPW05dKX1vKHMsImFkZENvbm5lY3RlZEVkZ2VzIik7ZnVuY3Rpb24gbChDKXtmb3IodmFyIE89Qy5fcHJpdmF0ZS5jaGlsZHJlbixOPTA7TjxPLmxlbmd0aDtOKyspdShPW05dKX1vKGwsImFkZENoaWxkcmVuIik7ZnVuY3Rpb24gdShDKXt2YXIgTz1pW0MuaWQoKV07ZSYmQy5yZW1vdmVkKCl8fE98fChpW0MuaWQoKV09ITAsQy5pc05vZGUoKT8obi5wdXNoKEMpLHMoQyksbChDKSk6bi51bnNoaWZ0KEMpKX1vKHUsImFkZCIpO2Zvcih2YXIgaD0wLGY9ci5sZW5ndGg7aDxmO2grKyl7dmFyIGQ9cltoXTt1KGQpfWZ1bmN0aW9uIHAoQyxPKXt2YXIgTj1DLl9wcml2YXRlLmVkZ2VzO09mKE4sTyksQy5jbGVhclRyYXZlcnNhbENhY2hlKCl9byhwLCJyZW1vdmVFZGdlUmVmIik7ZnVuY3Rpb24gbShDKXtDLmNsZWFyVHJhdmVyc2FsQ2FjaGUoKX1vKG0sInJlbW92ZVBhcmFsbGVsUmVmIik7dmFyIGc9W107Zy5pZHM9e307ZnVuY3Rpb24geShDLE8pe089T1swXSxDPUNbMF07dmFyIE49Qy5fcHJpdmF0ZS5jaGlsZHJlbixQPUMuaWQoKTtPZihOLE8pLE8uX3ByaXZhdGUucGFyZW50PW51bGwsZy5pZHNbUF18fChnLmlkc1tQXT0hMCxnLnB1c2goQykpfW8oeSwicmVtb3ZlQ2hpbGRSZWYiKSxyLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpLGUmJmEucmVtb3ZlRnJvbVBvb2wobik7Zm9yKHZhciB2PTA7djxuLmxlbmd0aDt2Kyspe3ZhciB4PW5bdl07aWYoeC5pc0VkZ2UoKSl7dmFyIGI9eC5zb3VyY2UoKVswXSx3PXgudGFyZ2V0KClbMF07cChiLHgpLHAodyx4KTtmb3IodmFyIF89eC5wYXJhbGxlbEVkZ2VzKCksVD0wO1Q8Xy5sZW5ndGg7VCsrKXt2YXIgRT1fW1RdO20oRSksRS5pc0J1bmRsZWRCZXppZXIoKSYmRS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKX19ZWxzZXt2YXIgTD14LnBhcmVudCgpO0wubGVuZ3RoIT09MCYmeShMLHgpfWUmJih4Ll9wcml2YXRlLnJlbW92ZWQ9ITApfXZhciBTPWEuX3ByaXZhdGUuZWxlbWVudHM7YS5fcHJpdmF0ZS5oYXNDb21wb3VuZE5vZGVzPSExO2Zvcih2YXIgQT0wO0E8Uy5sZW5ndGg7QSsrKXt2YXIgST1TW0FdO2lmKEkuaXNQYXJlbnQoKSl7YS5fcHJpdmF0ZS5oYXNDb21wb3VuZE5vZGVzPSEwO2JyZWFrfX12YXIgRD1uZXcgQWEodGhpcy5jeSgpLG4pO0Quc2l6ZSgpPjAmJih0P0QuZW1pdEFuZE5vdGlmeSgicmVtb3ZlIik6ZSYmRC5lbWl0KCJyZW1vdmUiKSk7Zm9yKHZhciBrPTA7azxnLmxlbmd0aDtrKyspe3ZhciBSPWdba107KCFlfHwhUi5yZW1vdmVkKCkpJiZSLnVwZGF0ZVN0eWxlKCl9cmV0dXJuIER9O01uLm1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcHJpdmF0ZS5jeSxyPXRoaXMsbj0hMSxpPSExLGE9byhmdW5jdGlvbihnKXtyZXR1cm4gZz09bnVsbD9nOiIiK2d9LCJ0b1N0cmluZyIpO2lmKHQuc291cmNlIT09dm9pZCAwfHx0LnRhcmdldCE9PXZvaWQgMCl7dmFyIHM9YSh0LnNvdXJjZSksbD1hKHQudGFyZ2V0KSx1PXMhPW51bGwmJmUuaGFzRWxlbWVudFdpdGhJZChzKSxoPWwhPW51bGwmJmUuaGFzRWxlbWVudFdpdGhJZChsKTsodXx8aCkmJihlLmJhdGNoKGZ1bmN0aW9uKCl7ci5yZW1vdmUobixpKSxyLmVtaXRBbmROb3RpZnkoIm1vdmVvdXQiKTtmb3IodmFyIG09MDttPHIubGVuZ3RoO20rKyl7dmFyIGc9clttXSx5PWcuX3ByaXZhdGUuZGF0YTtnLmlzRWRnZSgpJiYodSYmKHkuc291cmNlPXMpLGgmJih5LnRhcmdldD1sKSl9ci5yZXN0b3JlKG4saSl9KSxyLmVtaXRBbmROb3RpZnkoIm1vdmUiKSl9ZWxzZSBpZih0LnBhcmVudCE9PXZvaWQgMCl7dmFyIGY9YSh0LnBhcmVudCksZD1mPT09bnVsbHx8ZS5oYXNFbGVtZW50V2l0aElkKGYpO2lmKGQpe3ZhciBwPWY9PT1udWxsP3ZvaWQgMDpmO2UuYmF0Y2goZnVuY3Rpb24oKXt2YXIgbT1yLnJlbW92ZShuLGkpO20uZW1pdEFuZE5vdGlmeSgibW92ZW91dCIpO2Zvcih2YXIgZz0wO2c8ci5sZW5ndGg7ZysrKXt2YXIgeT1yW2ddLHY9eS5fcHJpdmF0ZS5kYXRhO3kuaXNOb2RlKCkmJih2LnBhcmVudD1wKX1tLnJlc3RvcmUobixpKX0pLHIuZW1pdEFuZE5vdGlmeSgibW92ZSIpfX1yZXR1cm4gdGhpc307W3ZnZSxTWmUseDYsUmYsRTEsJFplLFk2LG5KZSxVZ2UsSGdlLGxKZSxSNixiNixDYSxNZixIYV0uZm9yRWFjaChmdW5jdGlvbih0KXtpcihNbix0KX0pO21KZT17YWRkOm8oZnVuY3Rpb24oZSl7dmFyIHIsbj10aGlzO2lmKHdvKGUpKXt2YXIgaT1lO2lmKGkuX3ByaXZhdGUuY3k9PT1uKXI9aS5yZXN0b3JlKCk7ZWxzZXtmb3IodmFyIGE9W10scz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgbD1pW3NdO2EucHVzaChsLmpzb24oKSl9cj1uZXcgQWEobixhKX19ZWxzZSBpZihrbihlKSl7dmFyIHU9ZTtyPW5ldyBBYShuLHUpfWVsc2UgaWYoVXIoZSkmJihrbihlLm5vZGVzKXx8a24oZS5lZGdlcykpKXtmb3IodmFyIGg9ZSxmPVtdLGQ9WyJub2RlcyIsImVkZ2VzIl0scD0wLG09ZC5sZW5ndGg7cDxtO3ArKyl7dmFyIGc9ZFtwXSx5PWhbZ107aWYoa24oeSkpZm9yKHZhciB2PTAseD15Lmxlbmd0aDt2PHg7disrKXt2YXIgYj1pcih7Z3JvdXA6Z30seVt2XSk7Zi5wdXNoKGIpfX1yPW5ldyBBYShuLGYpfWVsc2V7dmFyIHc9ZTtyPW5ldyBHNihuLHcpLmNvbGxlY3Rpb24oKX1yZXR1cm4gcn0sImFkZCIpLHJlbW92ZTpvKGZ1bmN0aW9uKGUpe2lmKCF3byhlKSl7aWYoWnQoZSkpe3ZhciByPWU7ZT10aGlzLiQocil9fXJldHVybiBlLnJlbW92ZSgpfSwicmVtb3ZlIil9O28oZ0plLCJnZW5lcmF0ZUN1YmljQmV6aWVyIik7eUplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChuKXtyZXR1cm4tbi50ZW5zaW9uKm4ueC1uLmZyaWN0aW9uKm4udn1vKHQsInNwcmluZ0FjY2VsZXJhdGlvbkZvclN0YXRlIik7ZnVuY3Rpb24gZShuLGksYSl7dmFyIHM9e3g6bi54K2EuZHgqaSx2Om4udithLmR2KmksdGVuc2lvbjpuLnRlbnNpb24sZnJpY3Rpb246bi5mcmljdGlvbn07cmV0dXJue2R4OnMudixkdjp0KHMpfX1vKGUsInNwcmluZ0V2YWx1YXRlU3RhdGVXaXRoRGVyaXZhdGl2ZSIpO2Z1bmN0aW9uIHIobixpKXt2YXIgYT17ZHg6bi52LGR2OnQobil9LHM9ZShuLGkqLjUsYSksbD1lKG4saSouNSxzKSx1PWUobixpLGwpLGg9MS82KihhLmR4KzIqKHMuZHgrbC5keCkrdS5keCksZj0xLzYqKGEuZHYrMioocy5kditsLmR2KSt1LmR2KTtyZXR1cm4gbi54PW4ueCtoKmksbi52PW4uditmKmksbn1yZXR1cm4gbyhyLCJzcHJpbmdJbnRlZ3JhdGVTdGF0ZSIpLG8oZnVuY3Rpb24gbihpLGEscyl7dmFyIGw9e3g6LTEsdjowLHRlbnNpb246bnVsbCxmcmljdGlvbjpudWxsfSx1PVswXSxoPTAsZj0xLzFlNCxkPTE2LzFlMyxwLG0sZztmb3IoaT1wYXJzZUZsb2F0KGkpfHw1MDAsYT1wYXJzZUZsb2F0KGEpfHwyMCxzPXN8fG51bGwsbC50ZW5zaW9uPWksbC5mcmljdGlvbj1hLHA9cyE9PW51bGwscD8oaD1uKGksYSksbT1oL3MqZCk6bT1kO2c9cihnfHxsLG0pLHUucHVzaCgxK2cueCksaCs9MTYsTWF0aC5hYnMoZy54KT5mJiZNYXRoLmFicyhnLnYpPmY7KTtyZXR1cm4gcD9mdW5jdGlvbih5KXtyZXR1cm4gdVt5Kih1Lmxlbmd0aC0xKXwwXX06aH0sInNwcmluZ1JLNEZhY3RvcnkiKX0oKSxSbj1vKGZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPWdKZShlLHIsbixpKTtyZXR1cm4gZnVuY3Rpb24ocyxsLHUpe3JldHVybiBzKyhsLXMpKmEodSl9fSwiY3ViaWNCZXppZXIiKSx3Nj17bGluZWFyOm8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlKyhyLWUpKm59LCJsaW5lYXIiKSxlYXNlOlJuKC4yNSwuMSwuMjUsMSksImVhc2UtaW4iOlJuKC40MiwwLDEsMSksImVhc2Utb3V0IjpSbigwLDAsLjU4LDEpLCJlYXNlLWluLW91dCI6Um4oLjQyLDAsLjU4LDEpLCJlYXNlLWluLXNpbmUiOlJuKC40NywwLC43NDUsLjcxNSksImVhc2Utb3V0LXNpbmUiOlJuKC4zOSwuNTc1LC41NjUsMSksImVhc2UtaW4tb3V0LXNpbmUiOlJuKC40NDUsLjA1LC41NSwuOTUpLCJlYXNlLWluLXF1YWQiOlJuKC41NSwuMDg1LC42OCwuNTMpLCJlYXNlLW91dC1xdWFkIjpSbiguMjUsLjQ2LC40NSwuOTQpLCJlYXNlLWluLW91dC1xdWFkIjpSbiguNDU1LC4wMywuNTE1LC45NTUpLCJlYXNlLWluLWN1YmljIjpSbiguNTUsLjA1NSwuNjc1LC4xOSksImVhc2Utb3V0LWN1YmljIjpSbiguMjE1LC42MSwuMzU1LDEpLCJlYXNlLWluLW91dC1jdWJpYyI6Um4oLjY0NSwuMDQ1LC4zNTUsMSksImVhc2UtaW4tcXVhcnQiOlJuKC44OTUsLjAzLC42ODUsLjIyKSwiZWFzZS1vdXQtcXVhcnQiOlJuKC4xNjUsLjg0LC40NCwxKSwiZWFzZS1pbi1vdXQtcXVhcnQiOlJuKC43NywwLC4xNzUsMSksImVhc2UtaW4tcXVpbnQiOlJuKC43NTUsLjA1LC44NTUsLjA2KSwiZWFzZS1vdXQtcXVpbnQiOlJuKC4yMywxLC4zMiwxKSwiZWFzZS1pbi1vdXQtcXVpbnQiOlJuKC44NiwwLC4wNywxKSwiZWFzZS1pbi1leHBvIjpSbiguOTUsLjA1LC43OTUsLjAzNSksImVhc2Utb3V0LWV4cG8iOlJuKC4xOSwxLC4yMiwxKSwiZWFzZS1pbi1vdXQtZXhwbyI6Um4oMSwwLDAsMSksImVhc2UtaW4tY2lyYyI6Um4oLjYsLjA0LC45OCwuMzM1KSwiZWFzZS1vdXQtY2lyYyI6Um4oLjA3NSwuODIsLjE2NSwxKSwiZWFzZS1pbi1vdXQtY2lyYyI6Um4oLjc4NSwuMTM1LC4xNSwuODYpLHNwcmluZzpvKGZ1bmN0aW9uKGUscixuKXtpZihuPT09MClyZXR1cm4gdzYubGluZWFyO3ZhciBpPXlKZShlLHIsbik7cmV0dXJuIGZ1bmN0aW9uKGEscyxsKXtyZXR1cm4gYSsocy1hKSppKGwpfX0sInNwcmluZyIpLCJjdWJpYy1iZXppZXIiOlJufTtvKHZtZSwiZ2V0RWFzZWRWYWx1ZSIpO28oeG1lLCJnZXRWYWx1ZSIpO28oaDEsImVhc2UiKTtvKHZKZSwic3RlcCQxIik7byhYeCwidmFsaWQiKTtvKHhKZSwic3RhcnRBbmltYXRpb24iKTtvKGJtZSwic3RlcEFsbCIpO2JKZT17YW5pbWF0ZTpzbi5hbmltYXRlKCksYW5pbWF0aW9uOnNuLmFuaW1hdGlvbigpLGFuaW1hdGVkOnNuLmFuaW1hdGVkKCksY2xlYXJRdWV1ZTpzbi5jbGVhclF1ZXVlKCksZGVsYXk6c24uZGVsYXkoKSxkZWxheUFuaW1hdGlvbjpzbi5kZWxheUFuaW1hdGlvbigpLHN0b3A6c24uc3RvcCgpLGFkZFRvQW5pbWF0aW9uUG9vbDpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7ci5zdHlsZUVuYWJsZWQoKSYmci5fcHJpdmF0ZS5hbmlFbGVzLm1lcmdlKGUpfSwiYWRkVG9BbmltYXRpb25Qb29sIiksc3RvcEFuaW1hdGlvbkxvb3A6byhmdW5jdGlvbigpe3RoaXMuX3ByaXZhdGUuYW5pbWF0aW9uc1J1bm5pbmc9ITF9LCJzdG9wQW5pbWF0aW9uTG9vcCIpLHN0YXJ0QW5pbWF0aW9uTG9vcDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZihlLl9wcml2YXRlLmFuaW1hdGlvbnNSdW5uaW5nPSEwLCFlLnN0eWxlRW5hYmxlZCgpKXJldHVybjtmdW5jdGlvbiByKCl7ZS5fcHJpdmF0ZS5hbmltYXRpb25zUnVubmluZyYmQTYobyhmdW5jdGlvbihhKXtibWUoYSxlKSxyKCl9LCJhbmltYXRpb25TdGVwIikpfW8ociwiaGVhZGxlc3NTdGVwIik7dmFyIG49ZS5yZW5kZXJlcigpO24mJm4uYmVmb3JlUmVuZGVyP24uYmVmb3JlUmVuZGVyKG8oZnVuY3Rpb24oYSxzKXtibWUocyxlKX0sInJlbmRlcmVyQW5pbWF0aW9uU3RlcCIpLG4uYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5hbmltYXRpb25zKTpyKCl9LCJzdGFydEFuaW1hdGlvbkxvb3AiKX0sd0plPXtxdWFsaWZpZXJDb21wYXJlOm8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZT09bnVsbHx8cj09bnVsbD9lPT1udWxsJiZyPT1udWxsOmUuc2FtZVRleHQocil9LCJxdWFsaWZpZXJDb21wYXJlIiksZXZlbnRNYXRjaGVzOm8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXIucXVhbGlmaWVyO3JldHVybiBpIT1udWxsP2UhPT1uLnRhcmdldCYmcGIobi50YXJnZXQpJiZpLm1hdGNoZXMobi50YXJnZXQpOiEwfSwiZXZlbnRNYXRjaGVzIiksYWRkRXZlbnRGaWVsZHM6byhmdW5jdGlvbihlLHIpe3IuY3k9ZSxyLnRhcmdldD1lfSwiYWRkRXZlbnRGaWVsZHMiKSxjYWxsYmFja0NvbnRleHQ6byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIHIucXVhbGlmaWVyIT1udWxsP24udGFyZ2V0OmV9LCJjYWxsYmFja0NvbnRleHQiKX0scDY9byhmdW5jdGlvbihlKXtyZXR1cm4gWnQoZSk/bmV3IFBmKGUpOmV9LCJhcmdTZWxlY3RvciIpLHFnZT17Y3JlYXRlRW1pdHRlcjpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZS5lbWl0dGVyfHwoZS5lbWl0dGVyPW5ldyBxNih3SmUsdGhpcykpLHRoaXN9LCJjcmVhdGVFbWl0dGVyIiksZW1pdHRlcjpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZW1pdHRlcn0sImVtaXR0ZXIiKSxvbjpvKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkub24oZSxwNihyKSxuKSx0aGlzfSwib24iKSxyZW1vdmVMaXN0ZW5lcjpvKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkucmVtb3ZlTGlzdGVuZXIoZSxwNihyKSxuKSx0aGlzfSwicmVtb3ZlTGlzdGVuZXIiKSxyZW1vdmVBbGxMaXN0ZW5lcnM6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVBbGxMaXN0ZW5lcnMoKSx0aGlzfSwicmVtb3ZlQWxsTGlzdGVuZXJzIiksb25lOm8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbmUoZSxwNihyKSxuKSx0aGlzfSwib25lIiksb25jZTpvKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkub25lKGUscDYociksbiksdGhpc30sIm9uY2UiKSxlbWl0Om8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkuZW1pdChlLHIpLHRoaXN9LCJlbWl0IiksZW1pdEFuZE5vdGlmeTpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIHRoaXMuZW1pdChlKSx0aGlzLm5vdGlmeShlLHIpLHRoaXN9LCJlbWl0QW5kTm90aWZ5Iil9O3NuLmV2ZW50QWxpYXNlc09uKHFnZSk7V1A9e3BuZzpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3ByaXZhdGUucmVuZGVyZXI7cmV0dXJuIGU9ZXx8e30sci5wbmcoZSl9LCJwbmciKSxqcGc6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlLnJlbmRlcmVyO3JldHVybiBlPWV8fHt9LGUuYmc9ZS5iZ3x8IiNmZmYiLHIuanBnKGUpfSwianBnIil9O1dQLmpwZWc9V1AuanBnO1Q2PXtsYXlvdXQ6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzO2lmKGU9PW51bGwpe2RpKCJMYXlvdXQgb3B0aW9ucyBtdXN0IGJlIHNwZWNpZmllZCB0byBtYWtlIGEgbGF5b3V0Iik7cmV0dXJufWlmKGUubmFtZT09bnVsbCl7ZGkoIkEgYG5hbWVgIG11c3QgYmUgc3BlY2lmaWVkIHRvIG1ha2UgYSBsYXlvdXQiKTtyZXR1cm59dmFyIG49ZS5uYW1lLGk9ci5leHRlbnNpb24oImxheW91dCIsbik7aWYoaT09bnVsbCl7ZGkoIk5vIHN1Y2ggbGF5b3V0IGAiK24rImAgZm91bmQuICBEaWQgeW91IGZvcmdldCB0byBpbXBvcnQgaXQgYW5kIGBjeXRvc2NhcGUudXNlKClgIGl0PyIpO3JldHVybn12YXIgYTtadChlLmVsZXMpP2E9ci4kKGUuZWxlcyk6YT1lLmVsZXMhPW51bGw/ZS5lbGVzOnIuJCgpO3ZhciBzPW5ldyBpKGlyKHt9LGUse2N5OnIsZWxlczphfSkpO3JldHVybiBzfSwibGF5b3V0Iil9O1Q2LmNyZWF0ZUxheW91dD1UNi5tYWtlTGF5b3V0PVQ2LmxheW91dDtUSmU9e25vdGlmeTpvKGZ1bmN0aW9uKGUscil7dmFyIG49dGhpcy5fcHJpdmF0ZTtpZih0aGlzLmJhdGNoaW5nKCkpe24uYmF0Y2hOb3RpZmljYXRpb25zPW4uYmF0Y2hOb3RpZmljYXRpb25zfHx7fTt2YXIgaT1uLmJhdGNoTm90aWZpY2F0aW9uc1tlXT1uLmJhdGNoTm90aWZpY2F0aW9uc1tlXXx8dGhpcy5jb2xsZWN0aW9uKCk7ciE9bnVsbCYmaS5tZXJnZShyKTtyZXR1cm59aWYobi5ub3RpZmljYXRpb25zRW5hYmxlZCl7dmFyIGE9dGhpcy5yZW5kZXJlcigpO3RoaXMuZGVzdHJveWVkKCl8fCFhfHxhLm5vdGlmeShlLHIpfX0sIm5vdGlmeSIpLG5vdGlmaWNhdGlvbnM6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlO3JldHVybiBlPT09dm9pZCAwP3Iubm90aWZpY2F0aW9uc0VuYWJsZWQ6KHIubm90aWZpY2F0aW9uc0VuYWJsZWQ9ISFlLHRoaXMpfSwibm90aWZpY2F0aW9ucyIpLG5vTm90aWZpY2F0aW9uczpvKGZ1bmN0aW9uKGUpe3RoaXMubm90aWZpY2F0aW9ucyghMSksZSgpLHRoaXMubm90aWZpY2F0aW9ucyghMCl9LCJub05vdGlmaWNhdGlvbnMiKSxiYXRjaGluZzpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuYmF0Y2hDb3VudD4wfSwiYmF0Y2hpbmciKSxzdGFydEJhdGNoOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wcml2YXRlO3JldHVybiBlLmJhdGNoQ291bnQ9PW51bGwmJihlLmJhdGNoQ291bnQ9MCksZS5iYXRjaENvdW50PT09MCYmKGUuYmF0Y2hTdHlsZUVsZXM9dGhpcy5jb2xsZWN0aW9uKCksZS5iYXRjaE5vdGlmaWNhdGlvbnM9e30pLGUuYmF0Y2hDb3VudCsrLHRoaXN9LCJzdGFydEJhdGNoIiksZW5kQmF0Y2g6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByaXZhdGU7aWYoZS5iYXRjaENvdW50PT09MClyZXR1cm4gdGhpcztpZihlLmJhdGNoQ291bnQtLSxlLmJhdGNoQ291bnQ9PT0wKXtlLmJhdGNoU3R5bGVFbGVzLnVwZGF0ZVN0eWxlKCk7dmFyIHI9dGhpcy5yZW5kZXJlcigpO09iamVjdC5rZXlzKGUuYmF0Y2hOb3RpZmljYXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBpPWUuYmF0Y2hOb3RpZmljYXRpb25zW25dO2kuZW1wdHkoKT9yLm5vdGlmeShuKTpyLm5vdGlmeShuLGkpfSl9cmV0dXJuIHRoaXN9LCJlbmRCYXRjaCIpLGJhdGNoOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc3RhcnRCYXRjaCgpLGUoKSx0aGlzLmVuZEJhdGNoKCksdGhpc30sImJhdGNoIiksYmF0Y2hEYXRhOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcztyZXR1cm4gdGhpcy5iYXRjaChmdW5jdGlvbigpe2Zvcih2YXIgbj1PYmplY3Qua2V5cyhlKSxpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPW5baV0scz1lW2FdLGw9ci5nZXRFbGVtZW50QnlJZChhKTtsLmRhdGEocyl9fSl9LCJiYXRjaERhdGEiKX0sa0plPV9hKHtoaWRlRWRnZXNPblZpZXdwb3J0OiExLHRleHR1cmVPblZpZXdwb3J0OiExLG1vdGlvbkJsdXI6ITEsbW90aW9uQmx1ck9wYWNpdHk6LjA1LHBpeGVsUmF0aW86dm9pZCAwLGRlc2t0b3BUYXBUaHJlc2hvbGQ6NCx0b3VjaFRhcFRocmVzaG9sZDo4LHdoZWVsU2Vuc2l0aXZpdHk6MSxkZWJ1ZzohMSxzaG93RnBzOiExfSksWVA9e3JlbmRlclRvOm8oZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9dGhpcy5fcHJpdmF0ZS5yZW5kZXJlcjtyZXR1cm4gYS5yZW5kZXJUbyhlLHIsbixpKSx0aGlzfSwicmVuZGVyVG8iKSxyZW5kZXJlcjpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUucmVuZGVyZXJ9LCJyZW5kZXJlciIpLGZvcmNlUmVuZGVyOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3RpZnkoImRyYXciKSx0aGlzfSwiZm9yY2VSZW5kZXIiKSxyZXNpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmludmFsaWRhdGVTaXplKCksdGhpcy5lbWl0QW5kTm90aWZ5KCJyZXNpemUiKSx0aGlzfSwicmVzaXplIiksaW5pdFJlbmRlcmVyOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcyxuPXIuZXh0ZW5zaW9uKCJyZW5kZXJlciIsZS5uYW1lKTtpZihuPT1udWxsKXtkaSgiQ2FuIG5vdCBpbml0aWFsaXNlOiBObyBzdWNoIHJlbmRlcmVyIGAiLmNvbmNhdChlLm5hbWUsImAgZm91bmQuIERpZCB5b3UgZm9yZ2V0IHRvIGltcG9ydCBpdCBhbmQgYGN5dG9zY2FwZS51c2UoKWAgaXQ/IikpO3JldHVybn1lLndoZWVsU2Vuc2l0aXZpdHkhPT12b2lkIDAmJm9uKCJZb3UgaGF2ZSBzZXQgYSBjdXN0b20gd2hlZWwgc2Vuc2l0aXZpdHkuICBUaGlzIHdpbGwgbWFrZSB5b3VyIGFwcCB6b29tIHVubmF0dXJhbGx5IHdoZW4gdXNpbmcgbWFpbnN0cmVhbSBtaWNlLiAgWW91IHNob3VsZCBjaGFuZ2UgdGhpcyB2YWx1ZSBmcm9tIHRoZSBkZWZhdWx0IG9ubHkgaWYgeW91IGNhbiBndWFyYW50ZWUgdGhhdCBhbGwgeW91ciB1c2VycyB3aWxsIHVzZSB0aGUgc2FtZSBoYXJkd2FyZSBhbmQgT1MgY29uZmlndXJhdGlvbiBhcyB5b3VyIGN1cnJlbnQgbWFjaGluZS4iKTt2YXIgaT1rSmUoZSk7aS5jeT1yLHIuX3ByaXZhdGUucmVuZGVyZXI9bmV3IG4oaSksdGhpcy5ub3RpZnkoImluaXQiKX0sImluaXRSZW5kZXJlciIpLGRlc3Ryb3lSZW5kZXJlcjpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcztlLm5vdGlmeSgiZGVzdHJveSIpO3ZhciByPWUuY29udGFpbmVyKCk7aWYocilmb3Ioci5fY3lyZWc9bnVsbDtyLmNoaWxkTm9kZXMubGVuZ3RoPjA7KXIucmVtb3ZlQ2hpbGQoci5jaGlsZE5vZGVzWzBdKTtlLl9wcml2YXRlLnJlbmRlcmVyPW51bGwsZS5tdXRhYmxlRWxlbWVudHMoKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBpPW4uX3ByaXZhdGU7aS5yc2NyYXRjaD17fSxpLnJzdHlsZT17fSxpLmFuaW1hdGlvbi5jdXJyZW50PVtdLGkuYW5pbWF0aW9uLnF1ZXVlPVtdfSl9LCJkZXN0cm95UmVuZGVyZXIiKSxvblJlbmRlcjpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9uKCJyZW5kZXIiLGUpfSwib25SZW5kZXIiKSxvZmZSZW5kZXI6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vZmYoInJlbmRlciIsZSl9LCJvZmZSZW5kZXIiKX07WVAuaW52YWxpZGF0ZURpbWVuc2lvbnM9WVAucmVzaXplO2s2PXtjb2xsZWN0aW9uOm8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gWnQoZSk/dGhpcy4kKGUpOndvKGUpP2UuY29sbGVjdGlvbigpOmtuKGUpPyhyfHwocj17fSksbmV3IEFhKHRoaXMsZSxyLnVuaXF1ZSxyLnJlbW92ZWQpKTpuZXcgQWEodGhpcyl9LCJjb2xsZWN0aW9uIiksbm9kZXM6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLiQoZnVuY3Rpb24obil7cmV0dXJuIG4uaXNOb2RlKCl9KTtyZXR1cm4gZT9yLmZpbHRlcihlKTpyfSwibm9kZXMiKSxlZGdlczpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuJChmdW5jdGlvbihuKXtyZXR1cm4gbi5pc0VkZ2UoKX0pO3JldHVybiBlP3IuZmlsdGVyKGUpOnJ9LCJlZGdlcyIpLCQ6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlLmVsZW1lbnRzO3JldHVybiBlP3IuZmlsdGVyKGUpOnIuc3Bhd25TZWxmKCl9LCIkIiksbXV0YWJsZUVsZW1lbnRzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbGVtZW50c30sIm11dGFibGVFbGVtZW50cyIpfTtrNi5lbGVtZW50cz1rNi5maWx0ZXI9azYuJDtZYT17fSxlYj0idCIsRUplPSJmIjtZYS5hcHBseT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxyPWUuX3ByaXZhdGUsbj1yLmN5LGk9bi5jb2xsZWN0aW9uKCksYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgcz10W2FdLGw9ZS5nZXRDb250ZXh0TWV0YShzKTtpZighbC5lbXB0eSl7dmFyIHU9ZS5nZXRDb250ZXh0U3R5bGUobCksaD1lLmFwcGx5Q29udGV4dFN0eWxlKGwsdSxzKTtzLl9wcml2YXRlLmFwcGxpZWRJbml0U3R5bGU/ZS51cGRhdGVUcmFuc2l0aW9ucyhzLGguZGlmZlByb3BzKTpzLl9wcml2YXRlLmFwcGxpZWRJbml0U3R5bGU9ITA7dmFyIGY9ZS51cGRhdGVTdHlsZUhpbnRzKHMpO2YmJmkucHVzaChzKX19cmV0dXJuIGl9O1lhLmdldFByb3BlcnRpZXNEaWZmPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuX3ByaXZhdGUucHJvcERpZmZzPXIuX3ByaXZhdGUucHJvcERpZmZzfHx7fSxpPXQrIi0iK2UsYT1uW2ldO2lmKGEpcmV0dXJuIGE7Zm9yKHZhciBzPVtdLGw9e30sdT0wO3U8ci5sZW5ndGg7dSsrKXt2YXIgaD1yW3VdLGY9dFt1XT09PWViLGQ9ZVt1XT09PWViLHA9ZiE9PWQsbT1oLm1hcHBlZFByb3BlcnRpZXMubGVuZ3RoPjA7aWYocHx8ZCYmbSl7dmFyIGc9dm9pZCAwO3AmJm18fHA/Zz1oLnByb3BlcnRpZXM6bSYmKGc9aC5tYXBwZWRQcm9wZXJ0aWVzKTtmb3IodmFyIHk9MDt5PGcubGVuZ3RoO3krKyl7Zm9yKHZhciB2PWdbeV0seD12Lm5hbWUsYj0hMSx3PXUrMTt3PHIubGVuZ3RoO3crKyl7dmFyIF89clt3XSxUPWVbd109PT1lYjtpZihUJiYoYj1fLnByb3BlcnRpZXNbdi5uYW1lXSE9bnVsbCxiKSlicmVha30hbFt4XSYmIWImJihsW3hdPSEwLHMucHVzaCh4KSl9fX1yZXR1cm4gbltpXT1zLHN9O1lhLmdldENvbnRleHRNZXRhPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLHI9IiIsbixpPXQuX3ByaXZhdGUuc3R5bGVDeHRLZXl8fCIiLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIHM9ZVthXSxsPXMuc2VsZWN0b3ImJnMuc2VsZWN0b3IubWF0Y2hlcyh0KTtsP3IrPWViOnIrPUVKZX1yZXR1cm4gbj1lLmdldFByb3BlcnRpZXNEaWZmKGksciksdC5fcHJpdmF0ZS5zdHlsZUN4dEtleT1yLHtrZXk6cixkaWZmUHJvcE5hbWVzOm4sZW1wdHk6bi5sZW5ndGg9PT0wfX07WWEuZ2V0Q29udGV4dFN0eWxlPWZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5LHI9dGhpcyxuPXRoaXMuX3ByaXZhdGUuY29udGV4dFN0eWxlcz10aGlzLl9wcml2YXRlLmNvbnRleHRTdHlsZXN8fHt9O2lmKG5bZV0pcmV0dXJuIG5bZV07Zm9yKHZhciBpPXtfcHJpdmF0ZTp7a2V5OmV9fSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBzPXJbYV0sbD1lW2FdPT09ZWI7aWYobClmb3IodmFyIHU9MDt1PHMucHJvcGVydGllcy5sZW5ndGg7dSsrKXt2YXIgaD1zLnByb3BlcnRpZXNbdV07aVtoLm5hbWVdPWh9fXJldHVybiBuW2VdPWksaX07WWEuYXBwbHlDb250ZXh0U3R5bGU9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj10aGlzLGk9dC5kaWZmUHJvcE5hbWVzLGE9e30scz1uLnR5cGVzLGw9MDtsPGkubGVuZ3RoO2wrKyl7dmFyIHU9aVtsXSxoPWVbdV0sZj1yLnBzdHlsZSh1KTtpZighaClpZihmKWYuYnlwYXNzP2g9e25hbWU6dSxkZWxldGVCeXBhc3NlZDohMH06aD17bmFtZTp1LGRlbGV0ZTohMH07ZWxzZSBjb250aW51ZTtpZihmIT09aCl7aWYoaC5tYXBwZWQ9PT1zLmZuJiZmIT1udWxsJiZmLm1hcHBpbmchPW51bGwmJmYubWFwcGluZy52YWx1ZT09PWgudmFsdWUpe3ZhciBkPWYubWFwcGluZyxwPWQuZm5WYWx1ZT1oLnZhbHVlKHIpO2lmKHA9PT1kLnByZXZGblZhbHVlKWNvbnRpbnVlfXZhciBtPWFbdV09e3ByZXY6Zn07bi5hcHBseVBhcnNlZFByb3BlcnR5KHIsaCksbS5uZXh0PXIucHN0eWxlKHUpLG0ubmV4dCYmbS5uZXh0LmJ5cGFzcyYmKG0ubmV4dD1tLm5leHQuYnlwYXNzZWQpfX1yZXR1cm57ZGlmZlByb3BzOmF9fTtZYS51cGRhdGVTdHlsZUhpbnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX3ByaXZhdGUscj10aGlzLG49ci5wcm9wZXJ0eUdyb3VwTmFtZXMsaT1yLnByb3BlcnR5R3JvdXBLZXlzLGE9byhmdW5jdGlvbihRLGFlLHVlKXtyZXR1cm4gci5nZXRQcm9wZXJ0aWVzSGFzaChRLGFlLHVlKX0sInByb3BIYXNoIikscz1lLnN0eWxlS2V5O2lmKHQucmVtb3ZlZCgpKXJldHVybiExO3ZhciBsPWUuZ3JvdXA9PT0ibm9kZXMiLHU9dC5fcHJpdmF0ZS5zdHlsZTtuPU9iamVjdC5rZXlzKHUpO2Zvcih2YXIgaD0wO2g8aS5sZW5ndGg7aCsrKXt2YXIgZj1pW2hdO2Uuc3R5bGVLZXlzW2ZdPVtwMSxLeF19Zm9yKHZhciBkPW8oZnVuY3Rpb24oUSxhZSl7cmV0dXJuIGUuc3R5bGVLZXlzW2FlXVswXT1uYihRLGUuc3R5bGVLZXlzW2FlXVswXSl9LCJ1cGRhdGVHcktleTEiKSxwPW8oZnVuY3Rpb24oUSxhZSl7cmV0dXJuIGUuc3R5bGVLZXlzW2FlXVsxXT1pYihRLGUuc3R5bGVLZXlzW2FlXVsxXSl9LCJ1cGRhdGVHcktleTIiKSxtPW8oZnVuY3Rpb24oUSxhZSl7ZChRLGFlKSxwKFEsYWUpfSwidXBkYXRlR3JLZXkiKSxnPW8oZnVuY3Rpb24oUSxhZSl7Zm9yKHZhciB1ZT0wO3VlPFEubGVuZ3RoO3VlKyspe3ZhciBjZT1RLmNoYXJDb2RlQXQodWUpO2QoY2UsYWUpLHAoY2UsYWUpfX0sInVwZGF0ZUdyS2V5V1N0ciIpLHk9MmU5LHY9byhmdW5jdGlvbihRKXtyZXR1cm4tMTI4PFEmJlE8MTI4JiZNYXRoLmZsb29yKFEpIT09UT95LShRKjEwMjR8MCk6UX0sImNsZWFuTnVtIikseD0wO3g8bi5sZW5ndGg7eCsrKXt2YXIgYj1uW3hdLHc9dVtiXTtpZih3IT1udWxsKXt2YXIgXz10aGlzLnByb3BlcnRpZXNbYl0sVD1fLnR5cGUsRT1fLmdyb3VwS2V5LEw9dm9pZCAwO18uaGFzaE92ZXJyaWRlIT1udWxsP0w9Xy5oYXNoT3ZlcnJpZGUodCx3KTp3LnBmVmFsdWUhPW51bGwmJihMPXcucGZWYWx1ZSk7dmFyIFM9Xy5lbnVtcz09bnVsbD93LnZhbHVlOm51bGwsQT1MIT1udWxsLEk9UyE9bnVsbCxEPUF8fEksaz13LnVuaXRzO2lmKFQubnVtYmVyJiZEJiYhVC5tdWx0aXBsZSl7dmFyIFI9QT9MOlM7bSh2KFIpLEUpLCFBJiZrIT1udWxsJiZnKGssRSl9ZWxzZSBnKHcuc3RyVmFsdWUsRSl9fWZvcih2YXIgQz1bcDEsS3hdLE89MDtPPGkubGVuZ3RoO08rKyl7dmFyIE49aVtPXSxQPWUuc3R5bGVLZXlzW05dO0NbMF09bmIoUFswXSxDWzBdKSxDWzFdPWliKFBbMV0sQ1sxXSl9ZS5zdHlsZUtleT1MWGUoQ1swXSxDWzFdKTt2YXIgRj1lLnN0eWxlS2V5cztlLmxhYmVsRGltc0tleT1fZihGLmxhYmVsRGltZW5zaW9ucyk7dmFyIEI9YSh0LFsibGFiZWwiXSxGLmxhYmVsRGltZW5zaW9ucyk7aWYoZS5sYWJlbEtleT1fZihCKSxlLmxhYmVsU3R5bGVLZXk9X2YoYTYoRi5jb21tb25MYWJlbCxCKSksIWwpe3ZhciBHPWEodCxbInNvdXJjZS1sYWJlbCJdLEYubGFiZWxEaW1lbnNpb25zKTtlLnNvdXJjZUxhYmVsS2V5PV9mKEcpLGUuc291cmNlTGFiZWxTdHlsZUtleT1fZihhNihGLmNvbW1vbkxhYmVsLEcpKTt2YXIgej1hKHQsWyJ0YXJnZXQtbGFiZWwiXSxGLmxhYmVsRGltZW5zaW9ucyk7ZS50YXJnZXRMYWJlbEtleT1fZih6KSxlLnRhcmdldExhYmVsU3R5bGVLZXk9X2YoYTYoRi5jb21tb25MYWJlbCx6KSl9aWYobCl7dmFyIFc9ZS5zdHlsZUtleXMsWj1XLm5vZGVCb2R5LGo9Vy5ub2RlQm9yZGVyLG9lPVcubm9kZU91dGxpbmUsSz1XLmJhY2tncm91bmRJbWFnZSxlZT1XLmNvbXBvdW5kLEo9Vy5waWUsSD1bWixqLG9lLEssZWUsSl0uZmlsdGVyKGZ1bmN0aW9uKHEpe3JldHVybiBxIT1udWxsfSkucmVkdWNlKGE2LFtwMSxLeF0pO2Uubm9kZUtleT1fZihIKSxlLmhhc1BpZT1KIT1udWxsJiZKWzBdIT09cDEmJkpbMV0hPT1LeH1yZXR1cm4gcyE9PWUuc3R5bGVLZXl9O1lhLmNsZWFyU3R5bGVIaW50cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9wcml2YXRlO2Uuc3R5bGVDeHRLZXk9IiIsZS5zdHlsZUtleXM9e30sZS5zdHlsZUtleT1udWxsLGUubGFiZWxLZXk9bnVsbCxlLmxhYmVsU3R5bGVLZXk9bnVsbCxlLnNvdXJjZUxhYmVsS2V5PW51bGwsZS5zb3VyY2VMYWJlbFN0eWxlS2V5PW51bGwsZS50YXJnZXRMYWJlbEtleT1udWxsLGUudGFyZ2V0TGFiZWxTdHlsZUtleT1udWxsLGUubm9kZUtleT1udWxsLGUuaGFzUGllPW51bGx9O1lhLmFwcGx5UGFyc2VkUHJvcGVydHk9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49ZSxpPXQuX3ByaXZhdGUuc3R5bGUsYSxzPXIudHlwZXMsbD1yLnByb3BlcnRpZXNbbi5uYW1lXS50eXBlLHU9bi5ieXBhc3MsaD1pW24ubmFtZV0sZj1oJiZoLmJ5cGFzcyxkPXQuX3ByaXZhdGUscD0ibWFwcGluZyIsbT1vKGZ1bmN0aW9uKFope3JldHVybiBaPT1udWxsP251bGw6Wi5wZlZhbHVlIT1udWxsP1oucGZWYWx1ZTpaLnZhbHVlfSwiZ2V0VmFsIiksZz1vKGZ1bmN0aW9uKCl7dmFyIFo9bShoKSxqPW0obik7ci5jaGVja1RyaWdnZXJzKHQsbi5uYW1lLFosail9LCJjaGVja1RyaWdnZXJzIik7aWYoZS5uYW1lPT09ImN1cnZlLXN0eWxlIiYmdC5pc0VkZ2UoKSYmKGUudmFsdWUhPT0iYmV6aWVyIiYmdC5pc0xvb3AoKXx8ZS52YWx1ZT09PSJoYXlzdGFjayImJih0LnNvdXJjZSgpLmlzUGFyZW50KCl8fHQudGFyZ2V0KCkuaXNQYXJlbnQoKSkpJiYobj1lPXRoaXMucGFyc2UoZS5uYW1lLCJiZXppZXIiLHUpKSxuLmRlbGV0ZSlyZXR1cm4gaVtuLm5hbWVdPXZvaWQgMCxnKCksITA7aWYobi5kZWxldGVCeXBhc3NlZClyZXR1cm4gaD9oLmJ5cGFzcz8oaC5ieXBhc3NlZD12b2lkIDAsZygpLCEwKTohMTooZygpLCEwKTtpZihuLmRlbGV0ZUJ5cGFzcylyZXR1cm4gaD9oLmJ5cGFzcz8oaVtuLm5hbWVdPWguYnlwYXNzZWQsZygpLCEwKTohMTooZygpLCEwKTt2YXIgeT1vKGZ1bmN0aW9uKCl7b24oIkRvIG5vdCBhc3NpZ24gbWFwcGluZ3MgdG8gZWxlbWVudHMgd2l0aG91dCBjb3JyZXNwb25kaW5nIGRhdGEgKGkuZS4gZWxlIGAiK3QuaWQoKSsiYCBoYXMgbm8gbWFwcGluZyBmb3IgcHJvcGVydHkgYCIrbi5uYW1lKyJgIHdpdGggZGF0YSBmaWVsZCBgIituLmZpZWxkKyJgKTsgdHJ5IGEgYFsiK24uZmllbGQrIl1gIHNlbGVjdG9yIHRvIGxpbWl0IHNjb3BlIHRvIGVsZW1lbnRzIHdpdGggYCIrbi5maWVsZCsiYCBkZWZpbmVkIil9LCJwcmludE1hcHBpbmdFcnIiKTtzd2l0Y2gobi5tYXBwZWQpe2Nhc2Ugcy5tYXBEYXRhOntmb3IodmFyIHY9bi5maWVsZC5zcGxpdCgiLiIpLHg9ZC5kYXRhLGI9MDtiPHYubGVuZ3RoJiZ4O2IrKyl7dmFyIHc9dltiXTt4PXhbd119aWYoeD09bnVsbClyZXR1cm4geSgpLCExO3ZhciBfO2lmKHh0KHgpKXt2YXIgVD1uLmZpZWxkTWF4LW4uZmllbGRNaW47VD09PTA/Xz0wOl89KHgtbi5maWVsZE1pbikvVH1lbHNlIHJldHVybiBvbigiRG8gbm90IHVzZSBjb250aW51b3VzIG1hcHBlcnMgd2l0aG91dCBzcGVjaWZ5aW5nIG51bWVyaWMgZGF0YSAoaS5lLiBgIituLmZpZWxkKyI6ICIreCsiYCBmb3IgYCIrdC5pZCgpKyJgIGlzIG5vbi1udW1lcmljKSIpLCExO2lmKF88MD9fPTA6Xz4xJiYoXz0xKSxsLmNvbG9yKXt2YXIgRT1uLnZhbHVlTWluWzBdLEw9bi52YWx1ZU1heFswXSxTPW4udmFsdWVNaW5bMV0sQT1uLnZhbHVlTWF4WzFdLEk9bi52YWx1ZU1pblsyXSxEPW4udmFsdWVNYXhbMl0saz1uLnZhbHVlTWluWzNdPT1udWxsPzE6bi52YWx1ZU1pblszXSxSPW4udmFsdWVNYXhbM109PW51bGw/MTpuLnZhbHVlTWF4WzNdLEM9W01hdGgucm91bmQoRSsoTC1FKSpfKSxNYXRoLnJvdW5kKFMrKEEtUykqXyksTWF0aC5yb3VuZChJKyhELUkpKl8pLE1hdGgucm91bmQoaysoUi1rKSpfKV07YT17YnlwYXNzOm4uYnlwYXNzLG5hbWU6bi5uYW1lLHZhbHVlOkMsc3RyVmFsdWU6InJnYigiK0NbMF0rIiwgIitDWzFdKyIsICIrQ1syXSsiKSJ9fWVsc2UgaWYobC5udW1iZXIpe3ZhciBPPW4udmFsdWVNaW4rKG4udmFsdWVNYXgtbi52YWx1ZU1pbikqXzthPXRoaXMucGFyc2Uobi5uYW1lLE8sbi5ieXBhc3MscCl9ZWxzZSByZXR1cm4hMTtpZighYSlyZXR1cm4geSgpLCExO2EubWFwcGluZz1uLG49YTticmVha31jYXNlIHMuZGF0YTp7Zm9yKHZhciBOPW4uZmllbGQuc3BsaXQoIi4iKSxQPWQuZGF0YSxGPTA7RjxOLmxlbmd0aCYmUDtGKyspe3ZhciBCPU5bRl07UD1QW0JdfWlmKFAhPW51bGwmJihhPXRoaXMucGFyc2Uobi5uYW1lLFAsbi5ieXBhc3MscCkpLCFhKXJldHVybiB5KCksITE7YS5tYXBwaW5nPW4sbj1hO2JyZWFrfWNhc2Ugcy5mbjp7dmFyIEc9bi52YWx1ZSx6PW4uZm5WYWx1ZSE9bnVsbD9uLmZuVmFsdWU6Ryh0KTtpZihuLnByZXZGblZhbHVlPXosej09bnVsbClyZXR1cm4gb24oIkN1c3RvbSBmdW5jdGlvbiBtYXBwZXJzIG1heSBub3QgcmV0dXJuIG51bGwgKGkuZS4gYCIrbi5uYW1lKyJgIGZvciBlbGUgYCIrdC5pZCgpKyJgIGlzIG51bGwpIiksITE7aWYoYT10aGlzLnBhcnNlKG4ubmFtZSx6LG4uYnlwYXNzLHApLCFhKXJldHVybiBvbigiQ3VzdG9tIGZ1bmN0aW9uIG1hcHBlcnMgbWF5IG5vdCByZXR1cm4gaW52YWxpZCB2YWx1ZXMgZm9yIHRoZSBwcm9wZXJ0eSB0eXBlIChpLmUuIGAiK24ubmFtZSsiYCBmb3IgZWxlIGAiK3QuaWQoKSsiYCBpcyBpbnZhbGlkKSIpLCExO2EubWFwcGluZz1aYyhuKSxuPWE7YnJlYWt9Y2FzZSB2b2lkIDA6YnJlYWs7ZGVmYXVsdDpyZXR1cm4hMX1yZXR1cm4gdT8oZj9uLmJ5cGFzc2VkPWguYnlwYXNzZWQ6bi5ieXBhc3NlZD1oLGlbbi5uYW1lXT1uKTpmP2guYnlwYXNzZWQ9bjppW24ubmFtZV09bixnKCksITB9O1lhLmNsZWFuRWxlbWVudHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtpZih0aGlzLmNsZWFyU3R5bGVIaW50cyhuKSxuLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpLG4uZGlydHlCb3VuZGluZ0JveENhY2hlKCksIWUpbi5fcHJpdmF0ZS5zdHlsZT17fTtlbHNlIGZvcih2YXIgaT1uLl9wcml2YXRlLnN0eWxlLGE9T2JqZWN0LmtleXMoaSkscz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdLHU9aVtsXTt1IT1udWxsJiYodS5ieXBhc3M/dS5ieXBhc3NlZD1udWxsOmlbbF09bnVsbCl9fX07WWEudXBkYXRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcHJpdmF0ZS5jeSxlPXQubXV0YWJsZUVsZW1lbnRzKCk7ZS51cGRhdGVTdHlsZSgpfTtZYS51cGRhdGVUcmFuc2l0aW9ucz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj10Ll9wcml2YXRlLGk9dC5wc3R5bGUoInRyYW5zaXRpb24tcHJvcGVydHkiKS52YWx1ZSxhPXQucHN0eWxlKCJ0cmFuc2l0aW9uLWR1cmF0aW9uIikucGZWYWx1ZSxzPXQucHN0eWxlKCJ0cmFuc2l0aW9uLWRlbGF5IikucGZWYWx1ZTtpZihpLmxlbmd0aD4wJiZhPjApe2Zvcih2YXIgbD17fSx1PSExLGg9MDtoPGkubGVuZ3RoO2grKyl7dmFyIGY9aVtoXSxkPXQucHN0eWxlKGYpLHA9ZVtmXTtpZihwKXt2YXIgbT1wLnByZXYsZz1tLHk9cC5uZXh0IT1udWxsP3AubmV4dDpkLHY9ITEseD12b2lkIDAsYj0xZS02O2cmJih4dChnLnBmVmFsdWUpJiZ4dCh5LnBmVmFsdWUpPyh2PXkucGZWYWx1ZS1nLnBmVmFsdWUseD1nLnBmVmFsdWUrYip2KTp4dChnLnZhbHVlKSYmeHQoeS52YWx1ZSk/KHY9eS52YWx1ZS1nLnZhbHVlLHg9Zy52YWx1ZStiKnYpOmtuKGcudmFsdWUpJiZrbih5LnZhbHVlKSYmKHY9Zy52YWx1ZVswXSE9PXkudmFsdWVbMF18fGcudmFsdWVbMV0hPT15LnZhbHVlWzFdfHxnLnZhbHVlWzJdIT09eS52YWx1ZVsyXSx4PWcuc3RyVmFsdWUpLHYmJihsW2ZdPXkuc3RyVmFsdWUsdGhpcy5hcHBseUJ5cGFzcyh0LGYseCksdT0hMCkpfX1pZighdSlyZXR1cm47bi50cmFuc2l0aW9uaW5nPSEwLG5ldyBDMShmdW5jdGlvbih3KXtzPjA/dC5kZWxheUFuaW1hdGlvbihzKS5wbGF5KCkucHJvbWlzZSgpLnRoZW4odyk6dygpfSkudGhlbihmdW5jdGlvbigpe3JldHVybiB0LmFuaW1hdGlvbih7c3R5bGU6bCxkdXJhdGlvbjphLGVhc2luZzp0LnBzdHlsZSgidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iKS52YWx1ZSxxdWV1ZTohMX0pLnBsYXkoKS5wcm9taXNlKCl9KS50aGVuKGZ1bmN0aW9uKCl7ci5yZW1vdmVCeXBhc3Nlcyh0LGkpLHQuZW1pdEFuZE5vdGlmeSgic3R5bGUiKSxuLnRyYW5zaXRpb25pbmc9ITF9KX1lbHNlIG4udHJhbnNpdGlvbmluZyYmKHRoaXMucmVtb3ZlQnlwYXNzZXModCxpKSx0LmVtaXRBbmROb3RpZnkoInN0eWxlIiksbi50cmFuc2l0aW9uaW5nPSExKX07WWEuY2hlY2tUcmlnZ2VyPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgcz10aGlzLnByb3BlcnRpZXNbZV0sbD1pKHMpO2whPW51bGwmJmwocixuKSYmYShzKX07WWEuY2hlY2taT3JkZXJUcmlnZ2VyPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXM7dGhpcy5jaGVja1RyaWdnZXIodCxlLHIsbixmdW5jdGlvbihhKXtyZXR1cm4gYS50cmlnZ2Vyc1pPcmRlcn0sZnVuY3Rpb24oKXtpLl9wcml2YXRlLmN5Lm5vdGlmeSgiem9yZGVyIix0KX0pfTtZYS5jaGVja0JvdW5kc1RyaWdnZXI9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5jaGVja1RyaWdnZXIodCxlLHIsbixmdW5jdGlvbihpKXtyZXR1cm4gaS50cmlnZ2Vyc0JvdW5kc30sZnVuY3Rpb24oaSl7dC5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKSx0LmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLGkudHJpZ2dlcnNCb3VuZHNPZlBhcmFsbGVsQmV6aWVycyYmZT09PSJjdXJ2ZS1zdHlsZSImJihyPT09ImJlemllciJ8fG49PT0iYmV6aWVyIikmJnQucGFyYWxsZWxFZGdlcygpLmZvckVhY2goZnVuY3Rpb24oYSl7YS5pc0J1bmRsZWRCZXppZXIoKSYmYS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKX0pLGkudHJpZ2dlcnNCb3VuZHNPZkNvbm5lY3RlZEVkZ2VzJiZlPT09ImRpc3BsYXkiJiYocj09PSJub25lInx8bj09PSJub25lIikmJnQuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EuZGlydHlCb3VuZGluZ0JveENhY2hlKCl9KX0pfTtZYS5jaGVja1RyaWdnZXJzPWZ1bmN0aW9uKHQsZSxyLG4pe3QuZGlydHlTdHlsZUNhY2hlKCksdGhpcy5jaGVja1pPcmRlclRyaWdnZXIodCxlLHIsbiksdGhpcy5jaGVja0JvdW5kc1RyaWdnZXIodCxlLHIsbil9O3ZiPXt9O3ZiLmFwcGx5QnlwYXNzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMsYT1bXSxzPSEwO2lmKGU9PT0iKiJ8fGU9PT0iKioiKXtpZihyIT09dm9pZCAwKWZvcih2YXIgbD0wO2w8aS5wcm9wZXJ0aWVzLmxlbmd0aDtsKyspe3ZhciB1PWkucHJvcGVydGllc1tsXSxoPXUubmFtZSxmPXRoaXMucGFyc2UoaCxyLCEwKTtmJiZhLnB1c2goZil9fWVsc2UgaWYoWnQoZSkpe3ZhciBkPXRoaXMucGFyc2UoZSxyLCEwKTtkJiZhLnB1c2goZCl9ZWxzZSBpZihVcihlKSl7dmFyIHA9ZTtuPXI7Zm9yKHZhciBtPU9iamVjdC5rZXlzKHApLGc9MDtnPG0ubGVuZ3RoO2crKyl7dmFyIHk9bVtnXSx2PXBbeV07aWYodj09PXZvaWQgMCYmKHY9cFtCNih5KV0pLHYhPT12b2lkIDApe3ZhciB4PXRoaXMucGFyc2UoeSx2LCEwKTt4JiZhLnB1c2goeCl9fX1lbHNlIHJldHVybiExO2lmKGEubGVuZ3RoPT09MClyZXR1cm4hMTtmb3IodmFyIGI9ITEsdz0wO3c8dC5sZW5ndGg7dysrKXtmb3IodmFyIF89dFt3XSxUPXt9LEU9dm9pZCAwLEw9MDtMPGEubGVuZ3RoO0wrKyl7dmFyIFM9YVtMXTtpZihuKXt2YXIgQT1fLnBzdHlsZShTLm5hbWUpO0U9VFtTLm5hbWVdPXtwcmV2OkF9fWI9dGhpcy5hcHBseVBhcnNlZFByb3BlcnR5KF8sWmMoUykpfHxiLG4mJihFLm5leHQ9Xy5wc3R5bGUoUy5uYW1lKSl9YiYmdGhpcy51cGRhdGVTdHlsZUhpbnRzKF8pLG4mJnRoaXMudXBkYXRlVHJhbnNpdGlvbnMoXyxULHMpfXJldHVybiBifTt2Yi5vdmVycmlkZUJ5cGFzcz1mdW5jdGlvbih0LGUscil7ZT1pQihlKTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXSxhPWkuX3ByaXZhdGUuc3R5bGVbZV0scz10aGlzLnByb3BlcnRpZXNbZV0udHlwZSxsPXMuY29sb3IsdT1zLm11dGlwbGUsaD1hP2EucGZWYWx1ZSE9bnVsbD9hLnBmVmFsdWU6YS52YWx1ZTpudWxsOyFhfHwhYS5ieXBhc3M/dGhpcy5hcHBseUJ5cGFzcyhpLGUscik6KGEudmFsdWU9cixhLnBmVmFsdWUhPW51bGwmJihhLnBmVmFsdWU9ciksbD9hLnN0clZhbHVlPSJyZ2IoIityLmpvaW4oIiwiKSsiKSI6dT9hLnN0clZhbHVlPXIuam9pbigiICIpOmEuc3RyVmFsdWU9IiIrcix0aGlzLnVwZGF0ZVN0eWxlSGludHMoaSkpLHRoaXMuY2hlY2tUcmlnZ2VycyhpLGUsaCxyKX19O3ZiLnJlbW92ZUFsbEJ5cGFzc2VzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucmVtb3ZlQnlwYXNzZXModCx0aGlzLnByb3BlcnR5TmFtZXMsZSl9O3ZiLnJlbW92ZUJ5cGFzc2VzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49ITAsaT0wO2k8dC5sZW5ndGg7aSsrKXtmb3IodmFyIGE9dFtpXSxzPXt9LGw9MDtsPGUubGVuZ3RoO2wrKyl7dmFyIHU9ZVtsXSxoPXRoaXMucHJvcGVydGllc1t1XSxmPWEucHN0eWxlKGgubmFtZSk7aWYoISghZnx8IWYuYnlwYXNzKSl7dmFyIGQ9IiIscD10aGlzLnBhcnNlKHUsZCwhMCksbT1zW2gubmFtZV09e3ByZXY6Zn07dGhpcy5hcHBseVBhcnNlZFByb3BlcnR5KGEscCksbS5uZXh0PWEucHN0eWxlKGgubmFtZSl9fXRoaXMudXBkYXRlU3R5bGVIaW50cyhhKSxyJiZ0aGlzLnVwZGF0ZVRyYW5zaXRpb25zKGEscyxuKX19O3ZCPXt9O3ZCLmdldEVtU2l6ZUluUGl4ZWxzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb250YWluZXJDc3MoImZvbnQtc2l6ZSIpO3JldHVybiB0IT1udWxsP3BhcnNlRmxvYXQodCk6MX07dkIuY29udGFpbmVyQ3NzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ByaXZhdGUuY3kscj1lLmNvbnRhaW5lcigpLG49ZS53aW5kb3coKTtpZihuJiZyJiZuLmdldENvbXB1dGVkU3R5bGUpcmV0dXJuIG4uZ2V0Q29tcHV0ZWRTdHlsZShyKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfTtldT17fTtldS5nZXRSZW5kZXJlZFN0eWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/dGhpcy5nZXRTdHlsZVByb3BlcnR5VmFsdWUodCxlLCEwKTp0aGlzLmdldFJhd1N0eWxlKHQsITApfTtldS5nZXRSYXdTdHlsZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXM7aWYodD10WzBdLHQpe2Zvcih2YXIgbj17fSxpPTA7aTxyLnByb3BlcnRpZXMubGVuZ3RoO2krKyl7dmFyIGE9ci5wcm9wZXJ0aWVzW2ldLHM9ci5nZXRTdHlsZVByb3BlcnR5VmFsdWUodCxhLm5hbWUsZSk7cyE9bnVsbCYmKG5bYS5uYW1lXT1zLG5bQjYoYS5uYW1lKV09cyl9cmV0dXJuIG59fTtldS5nZXRJbmRleGVkU3R5bGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5wc3R5bGUoZSlbcl1bbl07cmV0dXJuIGk/P3QuY3koKS5zdHlsZSgpLmdldERlZmF1bHRQcm9wZXJ0eShlKVtyXVswXX07ZXUuZ2V0U3R5bGVQcm9wZXJ0eVZhbHVlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzO2lmKHQ9dFswXSx0KXt2YXIgaT1uLnByb3BlcnRpZXNbZV07aS5hbGlhcyYmKGk9aS5wb2ludHNUbyk7dmFyIGE9aS50eXBlLHM9dC5wc3R5bGUoaS5uYW1lKTtpZihzKXt2YXIgbD1zLnZhbHVlLHU9cy51bml0cyxoPXMuc3RyVmFsdWU7aWYociYmYS5udW1iZXImJmwhPW51bGwmJnh0KGwpKXt2YXIgZj10LmN5KCkuem9vbSgpLGQ9byhmdW5jdGlvbih2KXtyZXR1cm4gdipmfSwiZ2V0UmVuZGVyZWRWYWx1ZSIpLHA9byhmdW5jdGlvbih2LHgpe3JldHVybiBkKHYpK3h9LCJnZXRWYWx1ZVN0cmluZ1dpdGhVbml0cyIpLG09a24obCksZz1tP3UuZXZlcnkoZnVuY3Rpb24oeSl7cmV0dXJuIHkhPW51bGx9KTp1IT1udWxsO3JldHVybiBnP20/bC5tYXAoZnVuY3Rpb24oeSx2KXtyZXR1cm4gcCh5LHVbdl0pfSkuam9pbigiICIpOnAobCx1KTptP2wubWFwKGZ1bmN0aW9uKHkpe3JldHVybiBadCh5KT95OiIiK2QoeSl9KS5qb2luKCIgIik6IiIrZChsKX1lbHNlIGlmKGghPW51bGwpcmV0dXJuIGh9cmV0dXJuIG51bGx9fTtldS5nZXRBbmltYXRpb25TdGFydFN0eWxlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXt9LG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZVtuXSxhPWkubmFtZSxzPXQucHN0eWxlKGEpO3MhPT12b2lkIDAmJihVcihzKT9zPXRoaXMucGFyc2UoYSxzLnN0clZhbHVlKTpzPXRoaXMucGFyc2UoYSxzKSkscyYmKHJbYV09cyl9cmV0dXJuIHJ9O2V1LmdldFByb3BzTGlzdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9W10sbj10LGk9ZS5wcm9wZXJ0aWVzO2lmKG4pZm9yKHZhciBhPU9iamVjdC5rZXlzKG4pLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9YVtzXSx1PW5bbF0saD1pW2xdfHxpW2lCKGwpXSxmPXRoaXMucGFyc2UoaC5uYW1lLHUpO2YmJnIucHVzaChmKX1yZXR1cm4gcn07ZXUuZ2V0Tm9uRGVmYXVsdFByb3BlcnRpZXNIYXNoPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yLnNsaWNlKCksaSxhLHMsbCx1LGg7Zm9yKHU9MDt1PGUubGVuZ3RoO3UrKylpZihpPWVbdV0sYT10LnBzdHlsZShpLCExKSxhIT1udWxsKWlmKGEucGZWYWx1ZSE9bnVsbCluWzBdPW5iKGwsblswXSksblsxXT1pYihsLG5bMV0pO2Vsc2UgZm9yKHM9YS5zdHJWYWx1ZSxoPTA7aDxzLmxlbmd0aDtoKyspbD1zLmNoYXJDb2RlQXQoaCksblswXT1uYihsLG5bMF0pLG5bMV09aWIobCxuWzFdKTtyZXR1cm4gbn07ZXUuZ2V0UHJvcGVydGllc0hhc2g9ZXUuZ2V0Tm9uRGVmYXVsdFByb3BlcnRpZXNIYXNoO0s2PXt9O0s2LmFwcGVuZEZyb21Kc29uPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXSxpPW4uc2VsZWN0b3IsYT1uLnN0eWxlfHxuLmNzcyxzPU9iamVjdC5rZXlzKGEpO2Uuc2VsZWN0b3IoaSk7Zm9yKHZhciBsPTA7bDxzLmxlbmd0aDtsKyspe3ZhciB1PXNbbF0saD1hW3VdO2UuY3NzKHUsaCl9fXJldHVybiBlfTtLNi5mcm9tSnNvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBlLnJlc2V0VG9EZWZhdWx0KCksZS5hcHBlbmRGcm9tSnNvbih0KSxlfTtLNi5qc29uPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9dGhpcy5kZWZhdWx0TGVuZ3RoO2U8dGhpcy5sZW5ndGg7ZSsrKXtmb3IodmFyIHI9dGhpc1tlXSxuPXIuc2VsZWN0b3IsaT1yLnByb3BlcnRpZXMsYT17fSxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBsPWlbc107YVtsLm5hbWVdPWwuc3RyVmFsdWV9dC5wdXNoKHtzZWxlY3RvcjpuP24udG9TdHJpbmcoKToiY29yZSIsc3R5bGU6YX0pfXJldHVybiB0fTt4Qj17fTt4Qi5hcHBlbmRGcm9tU3RyaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj10aGlzLG49IiIrdCxpLGEscztuPW4ucmVwbGFjZSgvWy9dWypdKFxzfC4pKz9bKl1bL10vZywiIik7ZnVuY3Rpb24gbCgpe24ubGVuZ3RoPmkubGVuZ3RoP249bi5zdWJzdHIoaS5sZW5ndGgpOm49IiJ9byhsLCJyZW1vdmVTZWxBbmRCbG9ja0Zyb21SZW1haW5pbmciKTtmdW5jdGlvbiB1KCl7YS5sZW5ndGg+cy5sZW5ndGg/YT1hLnN1YnN0cihzLmxlbmd0aCk6YT0iIn1mb3Iobyh1LCJyZW1vdmVQcm9wQW5kVmFsRnJvbVJlbSIpOzspe3ZhciBoPW4ubWF0Y2goL15ccyokLyk7aWYoaClicmVhazt2YXIgZj1uLm1hdGNoKC9eXHMqKCg/Oi58XHMpKz8pXHMqXHsoKD86LnxccykrPylcfS8pO2lmKCFmKXtvbigiSGFsdGluZyBzdHlsZXNoZWV0IHBhcnNpbmc6IFN0cmluZyBzdHlsZXNoZWV0IGNvbnRhaW5zIG1vcmUgdG8gcGFyc2UgYnV0IG5vIHNlbGVjdG9yIGFuZCBibG9jayBmb3VuZCBpbjogIituKTticmVha31pPWZbMF07dmFyIGQ9ZlsxXTtpZihkIT09ImNvcmUiKXt2YXIgcD1uZXcgUGYoZCk7aWYocC5pbnZhbGlkKXtvbigiU2tpcHBpbmcgcGFyc2luZyBvZiBibG9jazogSW52YWxpZCBzZWxlY3RvciBmb3VuZCBpbiBzdHJpbmcgc3R5bGVzaGVldDogIitkKSxsKCk7Y29udGludWV9fXZhciBtPWZbMl0sZz0hMTthPW07Zm9yKHZhciB5PVtdOzspe3ZhciB2PWEubWF0Y2goL15ccyokLyk7aWYodilicmVhazt2YXIgeD1hLm1hdGNoKC9eXHMqKC4rPylccyo6XHMqKC4rPykoPzpccyo7fFxzKiQpLyk7aWYoIXgpe29uKCJTa2lwcGluZyBwYXJzaW5nIG9mIGJsb2NrOiBJbnZhbGlkIGZvcm1hdHRpbmcgb2Ygc3R5bGUgcHJvcGVydHkgYW5kIHZhbHVlIGRlZmluaXRpb25zIGZvdW5kIGluOiIrbSksZz0hMDticmVha31zPXhbMF07dmFyIGI9eFsxXSx3PXhbMl0sXz1lLnByb3BlcnRpZXNbYl07aWYoIV8pe29uKCJTa2lwcGluZyBwcm9wZXJ0eTogSW52YWxpZCBwcm9wZXJ0eSBuYW1lIGluOiAiK3MpLHUoKTtjb250aW51ZX12YXIgVD1yLnBhcnNlKGIsdyk7aWYoIVQpe29uKCJTa2lwcGluZyBwcm9wZXJ0eTogSW52YWxpZCBwcm9wZXJ0eSBkZWZpbml0aW9uIGluOiAiK3MpLHUoKTtjb250aW51ZX15LnB1c2goe25hbWU6Yix2YWw6d30pLHUoKX1pZihnKXtsKCk7YnJlYWt9ci5zZWxlY3RvcihkKTtmb3IodmFyIEU9MDtFPHkubGVuZ3RoO0UrKyl7dmFyIEw9eVtFXTtyLmNzcyhMLm5hbWUsTC52YWwpfWwoKX1yZXR1cm4gcn07eEIuZnJvbVN0cmluZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBlLnJlc2V0VG9EZWZhdWx0KCksZS5hcHBlbmRGcm9tU3RyaW5nKHQpLGV9O1NhPXt9OyhmdW5jdGlvbigpe3ZhciB0PWppLGU9UnFlLHI9SXFlLG49T3FlLGk9UHFlLGE9byhmdW5jdGlvbihIKXtyZXR1cm4iXiIrSCsiXFxzKlxcKFxccyooW1xcd1xcLl0rKVxccypcXCkkIn0sImRhdGEiKSxzPW8oZnVuY3Rpb24oSCl7dmFyIHE9dCsifFxcdyt8IitlKyJ8IityKyJ8IituKyJ8IitpO3JldHVybiJeIitIKyJcXHMqXFwoKFtcXHdcXC5dKylcXHMqXFwsXFxzKigiK3QrIilcXHMqXFwsXFxzKigiK3QrIilcXHMqLFxccyooIitxKyIpXFxzKlxcLFxccyooIitxKyIpXFwpJCJ9LCJtYXBEYXRhIiksbD1bYF51cmxcXHMqXFwoXFxzKlsnIl0/KC4rPylbJyJdP1xccypcXCkkYCwiXihub25lKSQiLCJeKC4rKSQiXTtTYS50eXBlcz17dGltZTp7bnVtYmVyOiEwLG1pbjowLHVuaXRzOiJzfG1zIixpbXBsaWNpdFVuaXRzOiJtcyJ9LHBlcmNlbnQ6e251bWJlcjohMCxtaW46MCxtYXg6MTAwLHVuaXRzOiIlIixpbXBsaWNpdFVuaXRzOiIlIn0scGVyY2VudGFnZXM6e251bWJlcjohMCxtaW46MCxtYXg6MTAwLHVuaXRzOiIlIixpbXBsaWNpdFVuaXRzOiIlIixtdWx0aXBsZTohMH0semVyb09uZU51bWJlcjp7bnVtYmVyOiEwLG1pbjowLG1heDoxLHVuaXRsZXNzOiEwfSx6ZXJvT25lTnVtYmVyczp7bnVtYmVyOiEwLG1pbjowLG1heDoxLHVuaXRsZXNzOiEwLG11bHRpcGxlOiEwfSxuT25lT25lTnVtYmVyOntudW1iZXI6ITAsbWluOi0xLG1heDoxLHVuaXRsZXNzOiEwfSxub25OZWdhdGl2ZUludDp7bnVtYmVyOiEwLG1pbjowLGludGVnZXI6ITAsdW5pdGxlc3M6ITB9LG5vbk5lZ2F0aXZlTnVtYmVyOntudW1iZXI6ITAsbWluOjAsdW5pdGxlc3M6ITB9LHBvc2l0aW9uOntlbnVtczpbInBhcmVudCIsIm9yaWdpbiJdfSxub2RlU2l6ZTp7bnVtYmVyOiEwLG1pbjowLGVudW1zOlsibGFiZWwiXX0sbnVtYmVyOntudW1iZXI6ITAsdW5pdGxlc3M6ITB9LG51bWJlcnM6e251bWJlcjohMCx1bml0bGVzczohMCxtdWx0aXBsZTohMH0scG9zaXRpdmVOdW1iZXI6e251bWJlcjohMCx1bml0bGVzczohMCxtaW46MCxzdHJpY3RNaW46ITB9LHNpemU6e251bWJlcjohMCxtaW46MH0sYmlkaXJlY3Rpb25hbFNpemU6e251bWJlcjohMH0sYmlkaXJlY3Rpb25hbFNpemVNYXliZVBlcmNlbnQ6e251bWJlcjohMCxhbGxvd1BlcmNlbnQ6ITB9LGJpZGlyZWN0aW9uYWxTaXplczp7bnVtYmVyOiEwLG11bHRpcGxlOiEwfSxzaXplTWF5YmVQZXJjZW50OntudW1iZXI6ITAsbWluOjAsYWxsb3dQZXJjZW50OiEwfSxheGlzRGlyZWN0aW9uOntlbnVtczpbImhvcml6b250YWwiLCJsZWZ0d2FyZCIsInJpZ2h0d2FyZCIsInZlcnRpY2FsIiwidXB3YXJkIiwiZG93bndhcmQiLCJhdXRvIl19LHBhZGRpbmdSZWxhdGl2ZVRvOntlbnVtczpbIndpZHRoIiwiaGVpZ2h0IiwiYXZlcmFnZSIsIm1pbiIsIm1heCJdfSxiZ1dIOntudW1iZXI6ITAsbWluOjAsYWxsb3dQZXJjZW50OiEwLGVudW1zOlsiYXV0byJdLG11bHRpcGxlOiEwfSxiZ1Bvczp7bnVtYmVyOiEwLGFsbG93UGVyY2VudDohMCxtdWx0aXBsZTohMH0sYmdSZWxhdGl2ZVRvOntlbnVtczpbImlubmVyIiwiaW5jbHVkZS1wYWRkaW5nIl0sbXVsdGlwbGU6ITB9LGJnUmVwZWF0OntlbnVtczpbInJlcGVhdCIsInJlcGVhdC14IiwicmVwZWF0LXkiLCJuby1yZXBlYXQiXSxtdWx0aXBsZTohMH0sYmdGaXQ6e2VudW1zOlsibm9uZSIsImNvbnRhaW4iLCJjb3ZlciJdLG11bHRpcGxlOiEwfSxiZ0Nyb3NzT3JpZ2luOntlbnVtczpbImFub255bW91cyIsInVzZS1jcmVkZW50aWFscyIsIm51bGwiXSxtdWx0aXBsZTohMH0sYmdDbGlwOntlbnVtczpbIm5vbmUiLCJub2RlIl0sbXVsdGlwbGU6ITB9LGJnQ29udGFpbm1lbnQ6e2VudW1zOlsiaW5zaWRlIiwib3ZlciJdLG11bHRpcGxlOiEwfSxjb2xvcjp7Y29sb3I6ITB9LGNvbG9yczp7Y29sb3I6ITAsbXVsdGlwbGU6ITB9LGZpbGw6e2VudW1zOlsic29saWQiLCJsaW5lYXItZ3JhZGllbnQiLCJyYWRpYWwtZ3JhZGllbnQiXX0sYm9vbDp7ZW51bXM6WyJ5ZXMiLCJubyJdfSxib29sczp7ZW51bXM6WyJ5ZXMiLCJubyJdLG11bHRpcGxlOiEwfSxsaW5lU3R5bGU6e2VudW1zOlsic29saWQiLCJkb3R0ZWQiLCJkYXNoZWQiXX0sbGluZUNhcDp7ZW51bXM6WyJidXR0Iiwicm91bmQiLCJzcXVhcmUiXX0sbGluZVBvc2l0aW9uOntlbnVtczpbImNlbnRlciIsImluc2lkZSIsIm91dHNpZGUiXX0sbGluZUpvaW46e2VudW1zOlsicm91bmQiLCJiZXZlbCIsIm1pdGVyIl19LGJvcmRlclN0eWxlOntlbnVtczpbInNvbGlkIiwiZG90dGVkIiwiZGFzaGVkIiwiZG91YmxlIl19LGN1cnZlU3R5bGU6e2VudW1zOlsiYmV6aWVyIiwidW5idW5kbGVkLWJlemllciIsImhheXN0YWNrIiwic2VnbWVudHMiLCJzdHJhaWdodCIsInN0cmFpZ2h0LXRyaWFuZ2xlIiwidGF4aSIsInJvdW5kLXNlZ21lbnRzIiwicm91bmQtdGF4aSJdfSxyYWRpdXNUeXBlOntlbnVtczpbImFyYy1yYWRpdXMiLCJpbmZsdWVuY2UtcmFkaXVzIl0sbXVsdGlwbGU6ITB9LGZvbnRGYW1pbHk6e3JlZ2V4OideKFtcXHctIFxcIl0rKD86XFxzKixcXHMqW1xcdy0gXFwiXSspKikkJ30sZm9udFN0eWxlOntlbnVtczpbIml0YWxpYyIsIm5vcm1hbCIsIm9ibGlxdWUiXX0sZm9udFdlaWdodDp7ZW51bXM6WyJub3JtYWwiLCJib2xkIiwiYm9sZGVyIiwibGlnaHRlciIsIjEwMCIsIjIwMCIsIjMwMCIsIjQwMCIsIjUwMCIsIjYwMCIsIjgwMCIsIjkwMCIsMTAwLDIwMCwzMDAsNDAwLDUwMCw2MDAsNzAwLDgwMCw5MDBdfSx0ZXh0RGVjb3JhdGlvbjp7ZW51bXM6WyJub25lIiwidW5kZXJsaW5lIiwib3ZlcmxpbmUiLCJsaW5lLXRocm91Z2giXX0sdGV4dFRyYW5zZm9ybTp7ZW51bXM6WyJub25lIiwidXBwZXJjYXNlIiwibG93ZXJjYXNlIl19LHRleHRXcmFwOntlbnVtczpbIm5vbmUiLCJ3cmFwIiwiZWxsaXBzaXMiXX0sdGV4dE92ZXJmbG93V3JhcDp7ZW51bXM6WyJ3aGl0ZXNwYWNlIiwiYW55d2hlcmUiXX0sdGV4dEJhY2tncm91bmRTaGFwZTp7ZW51bXM6WyJyZWN0YW5nbGUiLCJyb3VuZHJlY3RhbmdsZSIsInJvdW5kLXJlY3RhbmdsZSJdfSxub2RlU2hhcGU6e2VudW1zOlsicmVjdGFuZ2xlIiwicm91bmRyZWN0YW5nbGUiLCJyb3VuZC1yZWN0YW5nbGUiLCJjdXRyZWN0YW5nbGUiLCJjdXQtcmVjdGFuZ2xlIiwiYm90dG9tcm91bmRyZWN0YW5nbGUiLCJib3R0b20tcm91bmQtcmVjdGFuZ2xlIiwiYmFycmVsIiwiZWxsaXBzZSIsInRyaWFuZ2xlIiwicm91bmQtdHJpYW5nbGUiLCJzcXVhcmUiLCJwZW50YWdvbiIsInJvdW5kLXBlbnRhZ29uIiwiaGV4YWdvbiIsInJvdW5kLWhleGFnb24iLCJjb25jYXZlaGV4YWdvbiIsImNvbmNhdmUtaGV4YWdvbiIsImhlcHRhZ29uIiwicm91bmQtaGVwdGFnb24iLCJvY3RhZ29uIiwicm91bmQtb2N0YWdvbiIsInRhZyIsInJvdW5kLXRhZyIsInN0YXIiLCJkaWFtb25kIiwicm91bmQtZGlhbW9uZCIsInZlZSIsInJob21ib2lkIiwicmlnaHQtcmhvbWJvaWQiLCJwb2x5Z29uIl19LG92ZXJsYXlTaGFwZTp7ZW51bXM6WyJyb3VuZHJlY3RhbmdsZSIsInJvdW5kLXJlY3RhbmdsZSIsImVsbGlwc2UiXX0sY29ybmVyUmFkaXVzOntudW1iZXI6ITAsbWluOjAsdW5pdHM6InB4fGVtIixpbXBsaWNpdFVuaXRzOiJweCIsZW51bXM6WyJhdXRvIl19LGNvbXBvdW5kSW5jbHVkZUxhYmVsczp7ZW51bXM6WyJpbmNsdWRlIiwiZXhjbHVkZSJdfSxhcnJvd1NoYXBlOntlbnVtczpbInRlZSIsInRyaWFuZ2xlIiwidHJpYW5nbGUtdGVlIiwiY2lyY2xlLXRyaWFuZ2xlIiwidHJpYW5nbGUtY3Jvc3MiLCJ0cmlhbmdsZS1iYWNrY3VydmUiLCJ2ZWUiLCJzcXVhcmUiLCJjaXJjbGUiLCJkaWFtb25kIiwiY2hldnJvbiIsIm5vbmUiXX0sYXJyb3dGaWxsOntlbnVtczpbImZpbGxlZCIsImhvbGxvdyJdfSxhcnJvd1dpZHRoOntudW1iZXI6ITAsdW5pdHM6IiV8cHh8ZW0iLGltcGxpY2l0VW5pdHM6InB4IixlbnVtczpbIm1hdGNoLWxpbmUiXX0sZGlzcGxheTp7ZW51bXM6WyJlbGVtZW50Iiwibm9uZSJdfSx2aXNpYmlsaXR5OntlbnVtczpbImhpZGRlbiIsInZpc2libGUiXX0sekNvbXBvdW5kRGVwdGg6e2VudW1zOlsiYm90dG9tIiwib3JwaGFuIiwiYXV0byIsInRvcCJdfSx6SW5kZXhDb21wYXJlOntlbnVtczpbImF1dG8iLCJtYW51YWwiXX0sdmFsaWduOntlbnVtczpbInRvcCIsImNlbnRlciIsImJvdHRvbSJdfSxoYWxpZ246e2VudW1zOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il19LGp1c3RpZmljYXRpb246e2VudW1zOlsibGVmdCIsImNlbnRlciIsInJpZ2h0IiwiYXV0byJdfSx0ZXh0OntzdHJpbmc6ITB9LGRhdGE6e21hcHBpbmc6ITAscmVnZXg6YSgiZGF0YSIpfSxsYXlvdXREYXRhOnttYXBwaW5nOiEwLHJlZ2V4OmEoImxheW91dERhdGEiKX0sc2NyYXRjaDp7bWFwcGluZzohMCxyZWdleDphKCJzY3JhdGNoIil9LG1hcERhdGE6e21hcHBpbmc6ITAscmVnZXg6cygibWFwRGF0YSIpfSxtYXBMYXlvdXREYXRhOnttYXBwaW5nOiEwLHJlZ2V4OnMoIm1hcExheW91dERhdGEiKX0sbWFwU2NyYXRjaDp7bWFwcGluZzohMCxyZWdleDpzKCJtYXBTY3JhdGNoIil9LGZuOnttYXBwaW5nOiEwLGZuOiEwfSx1cmw6e3JlZ2V4ZXM6bCxzaW5nbGVSZWdleE1hdGNoVmFsdWU6ITB9LHVybHM6e3JlZ2V4ZXM6bCxzaW5nbGVSZWdleE1hdGNoVmFsdWU6ITAsbXVsdGlwbGU6ITB9LHByb3BMaXN0Ontwcm9wTGlzdDohMH0sYW5nbGU6e251bWJlcjohMCx1bml0czoiZGVnfHJhZCIsaW1wbGljaXRVbml0czoicmFkIn0sdGV4dFJvdGF0aW9uOntudW1iZXI6ITAsdW5pdHM6ImRlZ3xyYWQiLGltcGxpY2l0VW5pdHM6InJhZCIsZW51bXM6WyJub25lIiwiYXV0b3JvdGF0ZSJdfSxwb2x5Z29uUG9pbnRMaXN0OntudW1iZXI6ITAsbXVsdGlwbGU6ITAsZXZlbk11bHRpcGxlOiEwLG1pbjotMSxtYXg6MSx1bml0bGVzczohMH0sZWRnZURpc3RhbmNlczp7ZW51bXM6WyJpbnRlcnNlY3Rpb24iLCJub2RlLXBvc2l0aW9uIiwiZW5kcG9pbnRzIl19LGVkZ2VFbmRwb2ludDp7bnVtYmVyOiEwLG11bHRpcGxlOiEwLHVuaXRzOiIlfHB4fGVtfGRlZ3xyYWQiLGltcGxpY2l0VW5pdHM6InB4IixlbnVtczpbImluc2lkZS10by1ub2RlIiwib3V0c2lkZS10by1ub2RlIiwib3V0c2lkZS10by1ub2RlLW9yLWxhYmVsIiwib3V0c2lkZS10by1saW5lIiwib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIl0sc2luZ2xlRW51bTohMCx2YWxpZGF0ZTpvKGZ1bmN0aW9uKEgscSl7c3dpdGNoKEgubGVuZ3RoKXtjYXNlIDI6cmV0dXJuIHFbMF0hPT0iZGVnIiYmcVswXSE9PSJyYWQiJiZxWzFdIT09ImRlZyImJnFbMV0hPT0icmFkIjtjYXNlIDE6cmV0dXJuIFp0KEhbMF0pfHxxWzBdPT09ImRlZyJ8fHFbMF09PT0icmFkIjtkZWZhdWx0OnJldHVybiExfX0sInZhbGlkYXRlIil9LGVhc2luZzp7cmVnZXhlczpbIl4oc3ByaW5nKVxccypcXChcXHMqKCIrdCsiKVxccyosXFxzKigiK3QrIilcXHMqXFwpJCIsIl4oY3ViaWMtYmV6aWVyKVxccypcXChcXHMqKCIrdCsiKVxccyosXFxzKigiK3QrIilcXHMqLFxccyooIit0KyIpXFxzKixcXHMqKCIrdCsiKVxccypcXCkkIl0sZW51bXM6WyJsaW5lYXIiLCJlYXNlIiwiZWFzZS1pbiIsImVhc2Utb3V0IiwiZWFzZS1pbi1vdXQiLCJlYXNlLWluLXNpbmUiLCJlYXNlLW91dC1zaW5lIiwiZWFzZS1pbi1vdXQtc2luZSIsImVhc2UtaW4tcXVhZCIsImVhc2Utb3V0LXF1YWQiLCJlYXNlLWluLW91dC1xdWFkIiwiZWFzZS1pbi1jdWJpYyIsImVhc2Utb3V0LWN1YmljIiwiZWFzZS1pbi1vdXQtY3ViaWMiLCJlYXNlLWluLXF1YXJ0IiwiZWFzZS1vdXQtcXVhcnQiLCJlYXNlLWluLW91dC1xdWFydCIsImVhc2UtaW4tcXVpbnQiLCJlYXNlLW91dC1xdWludCIsImVhc2UtaW4tb3V0LXF1aW50IiwiZWFzZS1pbi1leHBvIiwiZWFzZS1vdXQtZXhwbyIsImVhc2UtaW4tb3V0LWV4cG8iLCJlYXNlLWluLWNpcmMiLCJlYXNlLW91dC1jaXJjIiwiZWFzZS1pbi1vdXQtY2lyYyJdfSxncmFkaWVudERpcmVjdGlvbjp7ZW51bXM6WyJ0by1ib3R0b20iLCJ0by10b3AiLCJ0by1sZWZ0IiwidG8tcmlnaHQiLCJ0by1ib3R0b20tcmlnaHQiLCJ0by1ib3R0b20tbGVmdCIsInRvLXRvcC1yaWdodCIsInRvLXRvcC1sZWZ0IiwidG8tcmlnaHQtYm90dG9tIiwidG8tbGVmdC1ib3R0b20iLCJ0by1yaWdodC10b3AiLCJ0by1sZWZ0LXRvcCJdfSxib3VuZHNFeHBhbnNpb246e251bWJlcjohMCxtdWx0aXBsZTohMCxtaW46MCx2YWxpZGF0ZTpvKGZ1bmN0aW9uKEgpe3ZhciBxPUgubGVuZ3RoO3JldHVybiBxPT09MXx8cT09PTJ8fHE9PT00fSwidmFsaWRhdGUiKX19O3ZhciB1PXt6ZXJvTm9uWmVybzpvKGZ1bmN0aW9uKEgscSl7cmV0dXJuKEg9PW51bGx8fHE9PW51bGwpJiZIIT09cXx8SD09MCYmcSE9MD8hMDpIIT0wJiZxPT0wfSwiemVyb05vblplcm8iKSxhbnk6byhmdW5jdGlvbihILHEpe3JldHVybiBIIT1xfSwiYW55IiksZW1wdHlOb25FbXB0eTpvKGZ1bmN0aW9uKEgscSl7dmFyIFE9SWYoSCksYWU9SWYocSk7cmV0dXJuIFEmJiFhZXx8IVEmJmFlfSwiZW1wdHlOb25FbXB0eSIpfSxoPVNhLnR5cGVzLGY9W3tuYW1lOiJsYWJlbCIsdHlwZTpoLnRleHQsdHJpZ2dlcnNCb3VuZHM6dS5hbnksdHJpZ2dlcnNaT3JkZXI6dS5lbXB0eU5vbkVtcHR5fSx7bmFtZToidGV4dC1yb3RhdGlvbiIsdHlwZTpoLnRleHRSb3RhdGlvbix0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRleHQtbWFyZ2luLXgiLHR5cGU6aC5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRleHQtbWFyZ2luLXkiLHR5cGU6aC5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX1dLGQ9W3tuYW1lOiJzb3VyY2UtbGFiZWwiLHR5cGU6aC50ZXh0LHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToic291cmNlLXRleHQtcm90YXRpb24iLHR5cGU6aC50ZXh0Um90YXRpb24sdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJzb3VyY2UtdGV4dC1tYXJnaW4teCIsdHlwZTpoLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToic291cmNlLXRleHQtbWFyZ2luLXkiLHR5cGU6aC5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InNvdXJjZS10ZXh0LW9mZnNldCIsdHlwZTpoLnNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9XSxwPVt7bmFtZToidGFyZ2V0LWxhYmVsIix0eXBlOmgudGV4dCx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRhcmdldC10ZXh0LXJvdGF0aW9uIix0eXBlOmgudGV4dFJvdGF0aW9uLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGFyZ2V0LXRleHQtbWFyZ2luLXgiLHR5cGU6aC5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRhcmdldC10ZXh0LW1hcmdpbi15Iix0eXBlOmguYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0YXJnZXQtdGV4dC1vZmZzZXQiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fV0sbT1be25hbWU6ImZvbnQtZmFtaWx5Iix0eXBlOmguZm9udEZhbWlseSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImZvbnQtc3R5bGUiLHR5cGU6aC5mb250U3R5bGUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJmb250LXdlaWdodCIsdHlwZTpoLmZvbnRXZWlnaHQsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJmb250LXNpemUiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGV4dC10cmFuc2Zvcm0iLHR5cGU6aC50ZXh0VHJhbnNmb3JtLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGV4dC13cmFwIix0eXBlOmgudGV4dFdyYXAsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0ZXh0LW92ZXJmbG93LXdyYXAiLHR5cGU6aC50ZXh0T3ZlcmZsb3dXcmFwLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGV4dC1tYXgtd2lkdGgiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGV4dC1vdXRsaW5lLXdpZHRoIix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImxpbmUtaGVpZ2h0Iix0eXBlOmgucG9zaXRpdmVOdW1iZXIsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9XSxnPVt7bmFtZToidGV4dC12YWxpZ24iLHR5cGU6aC52YWxpZ24sdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0ZXh0LWhhbGlnbiIsdHlwZTpoLmhhbGlnbix0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImNvbG9yIix0eXBlOmguY29sb3J9LHtuYW1lOiJ0ZXh0LW91dGxpbmUtY29sb3IiLHR5cGU6aC5jb2xvcn0se25hbWU6InRleHQtb3V0bGluZS1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcn0se25hbWU6InRleHQtYmFja2dyb3VuZC1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToidGV4dC1iYWNrZ3JvdW5kLW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyfSx7bmFtZToidGV4dC1iYWNrZ3JvdW5kLXBhZGRpbmciLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGV4dC1ib3JkZXItb3BhY2l0eSIsdHlwZTpoLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJ0ZXh0LWJvcmRlci1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToidGV4dC1ib3JkZXItd2lkdGgiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGV4dC1ib3JkZXItc3R5bGUiLHR5cGU6aC5ib3JkZXJTdHlsZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRleHQtYmFja2dyb3VuZC1zaGFwZSIsdHlwZTpoLnRleHRCYWNrZ3JvdW5kU2hhcGUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0ZXh0LWp1c3RpZmljYXRpb24iLHR5cGU6aC5qdXN0aWZpY2F0aW9ufV0seT1be25hbWU6ImV2ZW50cyIsdHlwZTpoLmJvb2wsdHJpZ2dlcnNaT3JkZXI6dS5hbnl9LHtuYW1lOiJ0ZXh0LWV2ZW50cyIsdHlwZTpoLmJvb2wsdHJpZ2dlcnNaT3JkZXI6dS5hbnl9XSx2PVt7bmFtZToiZGlzcGxheSIsdHlwZTpoLmRpc3BsYXksdHJpZ2dlcnNaT3JkZXI6dS5hbnksdHJpZ2dlcnNCb3VuZHM6dS5hbnksdHJpZ2dlcnNCb3VuZHNPZkNvbm5lY3RlZEVkZ2VzOiEwfSx7bmFtZToidmlzaWJpbGl0eSIsdHlwZTpoLnZpc2liaWxpdHksdHJpZ2dlcnNaT3JkZXI6dS5hbnl9LHtuYW1lOiJvcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcix0cmlnZ2Vyc1pPcmRlcjp1Lnplcm9Ob25aZXJvfSx7bmFtZToidGV4dC1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcn0se25hbWU6Im1pbi16b29tZWQtZm9udC1zaXplIix0eXBlOmguc2l6ZX0se25hbWU6InotY29tcG91bmQtZGVwdGgiLHR5cGU6aC56Q29tcG91bmREZXB0aCx0cmlnZ2Vyc1pPcmRlcjp1LmFueX0se25hbWU6InotaW5kZXgtY29tcGFyZSIsdHlwZTpoLnpJbmRleENvbXBhcmUsdHJpZ2dlcnNaT3JkZXI6dS5hbnl9LHtuYW1lOiJ6LWluZGV4Iix0eXBlOmgubnVtYmVyLHRyaWdnZXJzWk9yZGVyOnUuYW55fV0seD1be25hbWU6Im92ZXJsYXktcGFkZGluZyIsdHlwZTpoLnNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJvdmVybGF5LWNvbG9yIix0eXBlOmguY29sb3J9LHtuYW1lOiJvdmVybGF5LW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyLHRyaWdnZXJzQm91bmRzOnUuemVyb05vblplcm99LHtuYW1lOiJvdmVybGF5LXNoYXBlIix0eXBlOmgub3ZlcmxheVNoYXBlLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToib3ZlcmxheS1jb3JuZXItcmFkaXVzIix0eXBlOmguY29ybmVyUmFkaXVzfV0sYj1be25hbWU6InVuZGVybGF5LXBhZGRpbmciLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidW5kZXJsYXktY29sb3IiLHR5cGU6aC5jb2xvcn0se25hbWU6InVuZGVybGF5LW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyLHRyaWdnZXJzQm91bmRzOnUuemVyb05vblplcm99LHtuYW1lOiJ1bmRlcmxheS1zaGFwZSIsdHlwZTpoLm92ZXJsYXlTaGFwZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InVuZGVybGF5LWNvcm5lci1yYWRpdXMiLHR5cGU6aC5jb3JuZXJSYWRpdXN9XSx3PVt7bmFtZToidHJhbnNpdGlvbi1wcm9wZXJ0eSIsdHlwZTpoLnByb3BMaXN0fSx7bmFtZToidHJhbnNpdGlvbi1kdXJhdGlvbiIsdHlwZTpoLnRpbWV9LHtuYW1lOiJ0cmFuc2l0aW9uLWRlbGF5Iix0eXBlOmgudGltZX0se25hbWU6InRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uIix0eXBlOmguZWFzaW5nfV0sXz1vKGZ1bmN0aW9uKEgscSl7cmV0dXJuIHEudmFsdWU9PT0ibGFiZWwiPy1ILnBvb2xJbmRleCgpOnEucGZWYWx1ZX0sIm5vZGVTaXplSGFzaE92ZXJyaWRlIiksVD1be25hbWU6ImhlaWdodCIsdHlwZTpoLm5vZGVTaXplLHRyaWdnZXJzQm91bmRzOnUuYW55LGhhc2hPdmVycmlkZTpffSx7bmFtZToid2lkdGgiLHR5cGU6aC5ub2RlU2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueSxoYXNoT3ZlcnJpZGU6X30se25hbWU6InNoYXBlIix0eXBlOmgubm9kZVNoYXBlLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToic2hhcGUtcG9seWdvbi1wb2ludHMiLHR5cGU6aC5wb2x5Z29uUG9pbnRMaXN0LHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToiY29ybmVyLXJhZGl1cyIsdHlwZTpoLmNvcm5lclJhZGl1c30se25hbWU6ImJhY2tncm91bmQtY29sb3IiLHR5cGU6aC5jb2xvcn0se25hbWU6ImJhY2tncm91bmQtZmlsbCIsdHlwZTpoLmZpbGx9LHtuYW1lOiJiYWNrZ3JvdW5kLW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyfSx7bmFtZToiYmFja2dyb3VuZC1ibGFja2VuIix0eXBlOmgubk9uZU9uZU51bWJlcn0se25hbWU6ImJhY2tncm91bmQtZ3JhZGllbnQtc3RvcC1jb2xvcnMiLHR5cGU6aC5jb2xvcnN9LHtuYW1lOiJiYWNrZ3JvdW5kLWdyYWRpZW50LXN0b3AtcG9zaXRpb25zIix0eXBlOmgucGVyY2VudGFnZXN9LHtuYW1lOiJiYWNrZ3JvdW5kLWdyYWRpZW50LWRpcmVjdGlvbiIsdHlwZTpoLmdyYWRpZW50RGlyZWN0aW9ufSx7bmFtZToicGFkZGluZyIsdHlwZTpoLnNpemVNYXliZVBlcmNlbnQsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJwYWRkaW5nLXJlbGF0aXZlLXRvIix0eXBlOmgucGFkZGluZ1JlbGF0aXZlVG8sdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJib3VuZHMtZXhwYW5zaW9uIix0eXBlOmguYm91bmRzRXhwYW5zaW9uLHRyaWdnZXJzQm91bmRzOnUuYW55fV0sRT1be25hbWU6ImJvcmRlci1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToiYm9yZGVyLW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyfSx7bmFtZToiYm9yZGVyLXdpZHRoIix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImJvcmRlci1zdHlsZSIsdHlwZTpoLmJvcmRlclN0eWxlfSx7bmFtZToiYm9yZGVyLWNhcCIsdHlwZTpoLmxpbmVDYXB9LHtuYW1lOiJib3JkZXItam9pbiIsdHlwZTpoLmxpbmVKb2lufSx7bmFtZToiYm9yZGVyLWRhc2gtcGF0dGVybiIsdHlwZTpoLm51bWJlcnN9LHtuYW1lOiJib3JkZXItZGFzaC1vZmZzZXQiLHR5cGU6aC5udW1iZXJ9LHtuYW1lOiJib3JkZXItcG9zaXRpb24iLHR5cGU6aC5saW5lUG9zaXRpb259XSxMPVt7bmFtZToib3V0bGluZS1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToib3V0bGluZS1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcn0se25hbWU6Im91dGxpbmUtd2lkdGgiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToib3V0bGluZS1zdHlsZSIsdHlwZTpoLmJvcmRlclN0eWxlfSx7bmFtZToib3V0bGluZS1vZmZzZXQiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fV0sUz1be25hbWU6ImJhY2tncm91bmQtaW1hZ2UiLHR5cGU6aC51cmxzfSx7bmFtZToiYmFja2dyb3VuZC1pbWFnZS1jcm9zc29yaWdpbiIsdHlwZTpoLmJnQ3Jvc3NPcmlnaW59LHtuYW1lOiJiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyc30se25hbWU6ImJhY2tncm91bmQtaW1hZ2UtY29udGFpbm1lbnQiLHR5cGU6aC5iZ0NvbnRhaW5tZW50fSx7bmFtZToiYmFja2dyb3VuZC1pbWFnZS1zbW9vdGhpbmciLHR5cGU6aC5ib29sc30se25hbWU6ImJhY2tncm91bmQtcG9zaXRpb24teCIsdHlwZTpoLmJnUG9zfSx7bmFtZToiYmFja2dyb3VuZC1wb3NpdGlvbi15Iix0eXBlOmguYmdQb3N9LHtuYW1lOiJiYWNrZ3JvdW5kLXdpZHRoLXJlbGF0aXZlLXRvIix0eXBlOmguYmdSZWxhdGl2ZVRvfSx7bmFtZToiYmFja2dyb3VuZC1oZWlnaHQtcmVsYXRpdmUtdG8iLHR5cGU6aC5iZ1JlbGF0aXZlVG99LHtuYW1lOiJiYWNrZ3JvdW5kLXJlcGVhdCIsdHlwZTpoLmJnUmVwZWF0fSx7bmFtZToiYmFja2dyb3VuZC1maXQiLHR5cGU6aC5iZ0ZpdH0se25hbWU6ImJhY2tncm91bmQtY2xpcCIsdHlwZTpoLmJnQ2xpcH0se25hbWU6ImJhY2tncm91bmQtd2lkdGgiLHR5cGU6aC5iZ1dIfSx7bmFtZToiYmFja2dyb3VuZC1oZWlnaHQiLHR5cGU6aC5iZ1dIfSx7bmFtZToiYmFja2dyb3VuZC1vZmZzZXQteCIsdHlwZTpoLmJnUG9zfSx7bmFtZToiYmFja2dyb3VuZC1vZmZzZXQteSIsdHlwZTpoLmJnUG9zfV0sQT1be25hbWU6InBvc2l0aW9uIix0eXBlOmgucG9zaXRpb24sdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJjb21wb3VuZC1zaXppbmctd3J0LWxhYmVscyIsdHlwZTpoLmNvbXBvdW5kSW5jbHVkZUxhYmVscyx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6Im1pbi13aWR0aCIsdHlwZTpoLnNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJtaW4td2lkdGgtYmlhcy1sZWZ0Iix0eXBlOmguc2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6Im1pbi13aWR0aC1iaWFzLXJpZ2h0Iix0eXBlOmguc2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6Im1pbi1oZWlnaHQiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToibWluLWhlaWdodC1iaWFzLXRvcCIsdHlwZTpoLnNpemVNYXliZVBlcmNlbnQsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJtaW4taGVpZ2h0LWJpYXMtYm90dG9tIix0eXBlOmguc2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczp1LmFueX1dLEk9W3tuYW1lOiJsaW5lLXN0eWxlIix0eXBlOmgubGluZVN0eWxlfSx7bmFtZToibGluZS1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToibGluZS1maWxsIix0eXBlOmguZmlsbH0se25hbWU6ImxpbmUtY2FwIix0eXBlOmgubGluZUNhcH0se25hbWU6ImxpbmUtb3BhY2l0eSIsdHlwZTpoLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJsaW5lLWRhc2gtcGF0dGVybiIsdHlwZTpoLm51bWJlcnN9LHtuYW1lOiJsaW5lLWRhc2gtb2Zmc2V0Iix0eXBlOmgubnVtYmVyfSx7bmFtZToibGluZS1vdXRsaW5lLXdpZHRoIix0eXBlOmguc2l6ZX0se25hbWU6ImxpbmUtb3V0bGluZS1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToibGluZS1ncmFkaWVudC1zdG9wLWNvbG9ycyIsdHlwZTpoLmNvbG9yc30se25hbWU6ImxpbmUtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiLHR5cGU6aC5wZXJjZW50YWdlc30se25hbWU6ImN1cnZlLXN0eWxlIix0eXBlOmguY3VydmVTdHlsZSx0cmlnZ2Vyc0JvdW5kczp1LmFueSx0cmlnZ2Vyc0JvdW5kc09mUGFyYWxsZWxCZXppZXJzOiEwfSx7bmFtZToiaGF5c3RhY2stcmFkaXVzIix0eXBlOmguemVyb09uZU51bWJlcix0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InNvdXJjZS1lbmRwb2ludCIsdHlwZTpoLmVkZ2VFbmRwb2ludCx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRhcmdldC1lbmRwb2ludCIsdHlwZTpoLmVkZ2VFbmRwb2ludCx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzIix0eXBlOmguYmlkaXJlY3Rpb25hbFNpemVzLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToiY29udHJvbC1wb2ludC13ZWlnaHRzIix0eXBlOmgubnVtYmVycyx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InNlZ21lbnQtZGlzdGFuY2VzIix0eXBlOmguYmlkaXJlY3Rpb25hbFNpemVzLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToic2VnbWVudC13ZWlnaHRzIix0eXBlOmgubnVtYmVycyx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InNlZ21lbnQtcmFkaWkiLHR5cGU6aC5udW1iZXJzLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToicmFkaXVzLXR5cGUiLHR5cGU6aC5yYWRpdXNUeXBlLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGF4aS10dXJuIix0eXBlOmguYmlkaXJlY3Rpb25hbFNpemVNYXliZVBlcmNlbnQsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0YXhpLXR1cm4tbWluLWRpc3RhbmNlIix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRheGktZGlyZWN0aW9uIix0eXBlOmguYXhpc0RpcmVjdGlvbix0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRheGktcmFkaXVzIix0eXBlOmgubnVtYmVyLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToiZWRnZS1kaXN0YW5jZXMiLHR5cGU6aC5lZGdlRGlzdGFuY2VzLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToiYXJyb3ctc2NhbGUiLHR5cGU6aC5wb3NpdGl2ZU51bWJlcix0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6Imxvb3AtZGlyZWN0aW9uIix0eXBlOmguYW5nbGUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJsb29wLXN3ZWVwIix0eXBlOmguYW5nbGUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJzb3VyY2UtZGlzdGFuY2UtZnJvbS1ub2RlIix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRhcmdldC1kaXN0YW5jZS1mcm9tLW5vZGUiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fV0sRD1be25hbWU6Imdob3N0Iix0eXBlOmguYm9vbCx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6Imdob3N0LW9mZnNldC14Iix0eXBlOmguYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJnaG9zdC1vZmZzZXQteSIsdHlwZTpoLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToiZ2hvc3Qtb3BhY2l0eSIsdHlwZTpoLnplcm9PbmVOdW1iZXJ9XSxrPVt7bmFtZToic2VsZWN0aW9uLWJveC1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToic2VsZWN0aW9uLWJveC1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcn0se25hbWU6InNlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yIix0eXBlOmguY29sb3J9LHtuYW1lOiJzZWxlY3Rpb24tYm94LWJvcmRlci13aWR0aCIsdHlwZTpoLnNpemV9LHtuYW1lOiJhY3RpdmUtYmctY29sb3IiLHR5cGU6aC5jb2xvcn0se25hbWU6ImFjdGl2ZS1iZy1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcn0se25hbWU6ImFjdGl2ZS1iZy1zaXplIix0eXBlOmguc2l6ZX0se25hbWU6Im91dHNpZGUtdGV4dHVyZS1iZy1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToib3V0c2lkZS10ZXh0dXJlLWJnLW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyfV0sUj1bXTtTYS5waWVCYWNrZ3JvdW5kTj0xNixSLnB1c2goe25hbWU6InBpZS1zaXplIix0eXBlOmguc2l6ZU1heWJlUGVyY2VudH0pO2Zvcih2YXIgQz0xO0M8PVNhLnBpZUJhY2tncm91bmROO0MrKylSLnB1c2goe25hbWU6InBpZS0iK0MrIi1iYWNrZ3JvdW5kLWNvbG9yIix0eXBlOmguY29sb3J9KSxSLnB1c2goe25hbWU6InBpZS0iK0MrIi1iYWNrZ3JvdW5kLXNpemUiLHR5cGU6aC5wZXJjZW50fSksUi5wdXNoKHtuYW1lOiJwaWUtIitDKyItYmFja2dyb3VuZC1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcn0pO3ZhciBPPVtdLE49U2EuYXJyb3dQcmVmaXhlcz1bInNvdXJjZSIsIm1pZC1zb3VyY2UiLCJ0YXJnZXQiLCJtaWQtdGFyZ2V0Il07W3tuYW1lOiJhcnJvdy1zaGFwZSIsdHlwZTpoLmFycm93U2hhcGUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJhcnJvdy1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToiYXJyb3ctZmlsbCIsdHlwZTpoLmFycm93RmlsbH0se25hbWU6ImFycm93LXdpZHRoIix0eXBlOmguYXJyb3dXaWR0aH1dLmZvckVhY2goZnVuY3Rpb24oSil7Ti5mb3JFYWNoKGZ1bmN0aW9uKEgpe3ZhciBxPUgrIi0iK0oubmFtZSxRPUoudHlwZSxhZT1KLnRyaWdnZXJzQm91bmRzO08ucHVzaCh7bmFtZTpxLHR5cGU6USx0cmlnZ2Vyc0JvdW5kczphZX0pfSl9LHt9KTt2YXIgUD1TYS5wcm9wZXJ0aWVzPVtdLmNvbmNhdCh5LHcsdix4LGIsRCxnLG0sZixkLHAsVCxFLEwsUyxSLEEsSSxPLGspLEY9U2EucHJvcGVydHlHcm91cHM9e2JlaGF2aW9yOnksdHJhbnNpdGlvbjp3LHZpc2liaWxpdHk6dixvdmVybGF5OngsdW5kZXJsYXk6YixnaG9zdDpELGNvbW1vbkxhYmVsOmcsbGFiZWxEaW1lbnNpb25zOm0sbWFpbkxhYmVsOmYsc291cmNlTGFiZWw6ZCx0YXJnZXRMYWJlbDpwLG5vZGVCb2R5OlQsbm9kZUJvcmRlcjpFLG5vZGVPdXRsaW5lOkwsYmFja2dyb3VuZEltYWdlOlMscGllOlIsY29tcG91bmQ6QSxlZGdlTGluZTpJLGVkZ2VBcnJvdzpPLGNvcmU6a30sQj1TYS5wcm9wZXJ0eUdyb3VwTmFtZXM9e30sRz1TYS5wcm9wZXJ0eUdyb3VwS2V5cz1PYmplY3Qua2V5cyhGKTtHLmZvckVhY2goZnVuY3Rpb24oSil7QltKXT1GW0pdLm1hcChmdW5jdGlvbihIKXtyZXR1cm4gSC5uYW1lfSksRltKXS5mb3JFYWNoKGZ1bmN0aW9uKEgpe3JldHVybiBILmdyb3VwS2V5PUp9KX0pO3ZhciB6PVNhLmFsaWFzZXM9W3tuYW1lOiJjb250ZW50Iixwb2ludHNUbzoibGFiZWwifSx7bmFtZToiY29udHJvbC1wb2ludC1kaXN0YW5jZSIscG9pbnRzVG86ImNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzIn0se25hbWU6ImNvbnRyb2wtcG9pbnQtd2VpZ2h0Iixwb2ludHNUbzoiY29udHJvbC1wb2ludC13ZWlnaHRzIn0se25hbWU6InNlZ21lbnQtZGlzdGFuY2UiLHBvaW50c1RvOiJzZWdtZW50LWRpc3RhbmNlcyJ9LHtuYW1lOiJzZWdtZW50LXdlaWdodCIscG9pbnRzVG86InNlZ21lbnQtd2VpZ2h0cyJ9LHtuYW1lOiJzZWdtZW50LXJhZGl1cyIscG9pbnRzVG86InNlZ21lbnQtcmFkaWkifSx7bmFtZToiZWRnZS10ZXh0LXJvdGF0aW9uIixwb2ludHNUbzoidGV4dC1yb3RhdGlvbiJ9LHtuYW1lOiJwYWRkaW5nLWxlZnQiLHBvaW50c1RvOiJwYWRkaW5nIn0se25hbWU6InBhZGRpbmctcmlnaHQiLHBvaW50c1RvOiJwYWRkaW5nIn0se25hbWU6InBhZGRpbmctdG9wIixwb2ludHNUbzoicGFkZGluZyJ9LHtuYW1lOiJwYWRkaW5nLWJvdHRvbSIscG9pbnRzVG86InBhZGRpbmcifV07U2EucHJvcGVydHlOYW1lcz1QLm1hcChmdW5jdGlvbihKKXtyZXR1cm4gSi5uYW1lfSk7Zm9yKHZhciBXPTA7VzxQLmxlbmd0aDtXKyspe3ZhciBaPVBbV107UFtaLm5hbWVdPVp9Zm9yKHZhciBqPTA7ajx6Lmxlbmd0aDtqKyspe3ZhciBvZT16W2pdLEs9UFtvZS5wb2ludHNUb10sZWU9e25hbWU6b2UubmFtZSxhbGlhczohMCxwb2ludHNUbzpLfTtQLnB1c2goZWUpLFBbb2UubmFtZV09ZWV9fSkoKTtTYS5nZXREZWZhdWx0UHJvcGVydHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoKVt0XX07U2EuZ2V0RGVmYXVsdFByb3BlcnRpZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wcml2YXRlO2lmKHQuZGVmYXVsdFByb3BlcnRpZXMhPW51bGwpcmV0dXJuIHQuZGVmYXVsdFByb3BlcnRpZXM7Zm9yKHZhciBlPWlyKHsic2VsZWN0aW9uLWJveC1jb2xvciI6IiNkZGQiLCJzZWxlY3Rpb24tYm94LW9wYWNpdHkiOi42NSwic2VsZWN0aW9uLWJveC1ib3JkZXItY29sb3IiOiIjYWFhIiwic2VsZWN0aW9uLWJveC1ib3JkZXItd2lkdGgiOjEsImFjdGl2ZS1iZy1jb2xvciI6ImJsYWNrIiwiYWN0aXZlLWJnLW9wYWNpdHkiOi4xNSwiYWN0aXZlLWJnLXNpemUiOjMwLCJvdXRzaWRlLXRleHR1cmUtYmctY29sb3IiOiIjMDAwIiwib3V0c2lkZS10ZXh0dXJlLWJnLW9wYWNpdHkiOi4xMjUsZXZlbnRzOiJ5ZXMiLCJ0ZXh0LWV2ZW50cyI6Im5vIiwidGV4dC12YWxpZ24iOiJ0b3AiLCJ0ZXh0LWhhbGlnbiI6ImNlbnRlciIsInRleHQtanVzdGlmaWNhdGlvbiI6ImF1dG8iLCJsaW5lLWhlaWdodCI6MSxjb2xvcjoiIzAwMCIsInRleHQtb3V0bGluZS1jb2xvciI6IiMwMDAiLCJ0ZXh0LW91dGxpbmUtd2lkdGgiOjAsInRleHQtb3V0bGluZS1vcGFjaXR5IjoxLCJ0ZXh0LW9wYWNpdHkiOjEsInRleHQtZGVjb3JhdGlvbiI6Im5vbmUiLCJ0ZXh0LXRyYW5zZm9ybSI6Im5vbmUiLCJ0ZXh0LXdyYXAiOiJub25lIiwidGV4dC1vdmVyZmxvdy13cmFwIjoid2hpdGVzcGFjZSIsInRleHQtbWF4LXdpZHRoIjo5OTk5LCJ0ZXh0LWJhY2tncm91bmQtY29sb3IiOiIjMDAwIiwidGV4dC1iYWNrZ3JvdW5kLW9wYWNpdHkiOjAsInRleHQtYmFja2dyb3VuZC1zaGFwZSI6InJlY3RhbmdsZSIsInRleHQtYmFja2dyb3VuZC1wYWRkaW5nIjowLCJ0ZXh0LWJvcmRlci1vcGFjaXR5IjowLCJ0ZXh0LWJvcmRlci13aWR0aCI6MCwidGV4dC1ib3JkZXItc3R5bGUiOiJzb2xpZCIsInRleHQtYm9yZGVyLWNvbG9yIjoiIzAwMCIsImZvbnQtZmFtaWx5IjoiSGVsdmV0aWNhIE5ldWUsIEhlbHZldGljYSwgc2Fucy1zZXJpZiIsImZvbnQtc3R5bGUiOiJub3JtYWwiLCJmb250LXdlaWdodCI6Im5vcm1hbCIsImZvbnQtc2l6ZSI6MTYsIm1pbi16b29tZWQtZm9udC1zaXplIjowLCJ0ZXh0LXJvdGF0aW9uIjoibm9uZSIsInNvdXJjZS10ZXh0LXJvdGF0aW9uIjoibm9uZSIsInRhcmdldC10ZXh0LXJvdGF0aW9uIjoibm9uZSIsdmlzaWJpbGl0eToidmlzaWJsZSIsZGlzcGxheToiZWxlbWVudCIsb3BhY2l0eToxLCJ6LWNvbXBvdW5kLWRlcHRoIjoiYXV0byIsInotaW5kZXgtY29tcGFyZSI6ImF1dG8iLCJ6LWluZGV4IjowLGxhYmVsOiIiLCJ0ZXh0LW1hcmdpbi14IjowLCJ0ZXh0LW1hcmdpbi15IjowLCJzb3VyY2UtbGFiZWwiOiIiLCJzb3VyY2UtdGV4dC1vZmZzZXQiOjAsInNvdXJjZS10ZXh0LW1hcmdpbi14IjowLCJzb3VyY2UtdGV4dC1tYXJnaW4teSI6MCwidGFyZ2V0LWxhYmVsIjoiIiwidGFyZ2V0LXRleHQtb2Zmc2V0IjowLCJ0YXJnZXQtdGV4dC1tYXJnaW4teCI6MCwidGFyZ2V0LXRleHQtbWFyZ2luLXkiOjAsIm92ZXJsYXktb3BhY2l0eSI6MCwib3ZlcmxheS1jb2xvciI6IiMwMDAiLCJvdmVybGF5LXBhZGRpbmciOjEwLCJvdmVybGF5LXNoYXBlIjoicm91bmQtcmVjdGFuZ2xlIiwib3ZlcmxheS1jb3JuZXItcmFkaXVzIjoiYXV0byIsInVuZGVybGF5LW9wYWNpdHkiOjAsInVuZGVybGF5LWNvbG9yIjoiIzAwMCIsInVuZGVybGF5LXBhZGRpbmciOjEwLCJ1bmRlcmxheS1zaGFwZSI6InJvdW5kLXJlY3RhbmdsZSIsInVuZGVybGF5LWNvcm5lci1yYWRpdXMiOiJhdXRvIiwidHJhbnNpdGlvbi1wcm9wZXJ0eSI6Im5vbmUiLCJ0cmFuc2l0aW9uLWR1cmF0aW9uIjowLCJ0cmFuc2l0aW9uLWRlbGF5IjowLCJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiI6ImxpbmVhciIsImJhY2tncm91bmQtYmxhY2tlbiI6MCwiYmFja2dyb3VuZC1jb2xvciI6IiM5OTkiLCJiYWNrZ3JvdW5kLWZpbGwiOiJzb2xpZCIsImJhY2tncm91bmQtb3BhY2l0eSI6MSwiYmFja2dyb3VuZC1pbWFnZSI6Im5vbmUiLCJiYWNrZ3JvdW5kLWltYWdlLWNyb3Nzb3JpZ2luIjoiYW5vbnltb3VzIiwiYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5IjoxLCJiYWNrZ3JvdW5kLWltYWdlLWNvbnRhaW5tZW50IjoiaW5zaWRlIiwiYmFja2dyb3VuZC1pbWFnZS1zbW9vdGhpbmciOiJ5ZXMiLCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXgiOiI1MCUiLCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXkiOiI1MCUiLCJiYWNrZ3JvdW5kLW9mZnNldC14IjowLCJiYWNrZ3JvdW5kLW9mZnNldC15IjowLCJiYWNrZ3JvdW5kLXdpZHRoLXJlbGF0aXZlLXRvIjoiaW5jbHVkZS1wYWRkaW5nIiwiYmFja2dyb3VuZC1oZWlnaHQtcmVsYXRpdmUtdG8iOiJpbmNsdWRlLXBhZGRpbmciLCJiYWNrZ3JvdW5kLXJlcGVhdCI6Im5vLXJlcGVhdCIsImJhY2tncm91bmQtZml0Ijoibm9uZSIsImJhY2tncm91bmQtY2xpcCI6Im5vZGUiLCJiYWNrZ3JvdW5kLXdpZHRoIjoiYXV0byIsImJhY2tncm91bmQtaGVpZ2h0IjoiYXV0byIsImJvcmRlci1jb2xvciI6IiMwMDAiLCJib3JkZXItb3BhY2l0eSI6MSwiYm9yZGVyLXdpZHRoIjowLCJib3JkZXItc3R5bGUiOiJzb2xpZCIsImJvcmRlci1kYXNoLXBhdHRlcm4iOls0LDJdLCJib3JkZXItZGFzaC1vZmZzZXQiOjAsImJvcmRlci1jYXAiOiJidXR0IiwiYm9yZGVyLWpvaW4iOiJtaXRlciIsImJvcmRlci1wb3NpdGlvbiI6ImNlbnRlciIsIm91dGxpbmUtY29sb3IiOiIjOTk5Iiwib3V0bGluZS1vcGFjaXR5IjoxLCJvdXRsaW5lLXdpZHRoIjowLCJvdXRsaW5lLW9mZnNldCI6MCwib3V0bGluZS1zdHlsZSI6InNvbGlkIixoZWlnaHQ6MzAsd2lkdGg6MzAsc2hhcGU6ImVsbGlwc2UiLCJzaGFwZS1wb2x5Z29uLXBvaW50cyI6Ii0xLCAtMSwgICAxLCAtMSwgICAxLCAxLCAgIC0xLCAxIiwiY29ybmVyLXJhZGl1cyI6ImF1dG8iLCJib3VuZHMtZXhwYW5zaW9uIjowLCJiYWNrZ3JvdW5kLWdyYWRpZW50LWRpcmVjdGlvbiI6InRvLWJvdHRvbSIsImJhY2tncm91bmQtZ3JhZGllbnQtc3RvcC1jb2xvcnMiOiIjOTk5IiwiYmFja2dyb3VuZC1ncmFkaWVudC1zdG9wLXBvc2l0aW9ucyI6IjAlIixnaG9zdDoibm8iLCJnaG9zdC1vZmZzZXQteSI6MCwiZ2hvc3Qtb2Zmc2V0LXgiOjAsImdob3N0LW9wYWNpdHkiOjAscGFkZGluZzowLCJwYWRkaW5nLXJlbGF0aXZlLXRvIjoid2lkdGgiLHBvc2l0aW9uOiJvcmlnaW4iLCJjb21wb3VuZC1zaXppbmctd3J0LWxhYmVscyI6ImluY2x1ZGUiLCJtaW4td2lkdGgiOjAsIm1pbi13aWR0aC1iaWFzLWxlZnQiOjAsIm1pbi13aWR0aC1iaWFzLXJpZ2h0IjowLCJtaW4taGVpZ2h0IjowLCJtaW4taGVpZ2h0LWJpYXMtdG9wIjowLCJtaW4taGVpZ2h0LWJpYXMtYm90dG9tIjowfSx7InBpZS1zaXplIjoiMTAwJSJ9LFt7bmFtZToicGllLXt7aX19LWJhY2tncm91bmQtY29sb3IiLHZhbHVlOiJibGFjayJ9LHtuYW1lOiJwaWUte3tpfX0tYmFja2dyb3VuZC1zaXplIix2YWx1ZToiMCUifSx7bmFtZToicGllLXt7aX19LWJhY2tncm91bmQtb3BhY2l0eSIsdmFsdWU6MX1dLnJlZHVjZShmdW5jdGlvbih1LGgpe2Zvcih2YXIgZj0xO2Y8PVNhLnBpZUJhY2tncm91bmROO2YrKyl7dmFyIGQ9aC5uYW1lLnJlcGxhY2UoInt7aX19IixmKSxwPWgudmFsdWU7dVtkXT1wfXJldHVybiB1fSx7fSkseyJsaW5lLXN0eWxlIjoic29saWQiLCJsaW5lLWNvbG9yIjoiIzk5OSIsImxpbmUtZmlsbCI6InNvbGlkIiwibGluZS1jYXAiOiJidXR0IiwibGluZS1vcGFjaXR5IjoxLCJsaW5lLW91dGxpbmUtd2lkdGgiOjAsImxpbmUtb3V0bGluZS1jb2xvciI6IiMwMDAiLCJsaW5lLWdyYWRpZW50LXN0b3AtY29sb3JzIjoiIzk5OSIsImxpbmUtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiOiIwJSIsImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIjo0MCwiY29udHJvbC1wb2ludC13ZWlnaHRzIjouNSwic2VnbWVudC13ZWlnaHRzIjouNSwic2VnbWVudC1kaXN0YW5jZXMiOjIwLCJzZWdtZW50LXJhZGlpIjoxNSwicmFkaXVzLXR5cGUiOiJhcmMtcmFkaXVzIiwidGF4aS10dXJuIjoiNTAlIiwidGF4aS1yYWRpdXMiOjE1LCJ0YXhpLXR1cm4tbWluLWRpc3RhbmNlIjoxMCwidGF4aS1kaXJlY3Rpb24iOiJhdXRvIiwiZWRnZS1kaXN0YW5jZXMiOiJpbnRlcnNlY3Rpb24iLCJjdXJ2ZS1zdHlsZSI6ImhheXN0YWNrIiwiaGF5c3RhY2stcmFkaXVzIjowLCJhcnJvdy1zY2FsZSI6MSwibG9vcC1kaXJlY3Rpb24iOiItNDVkZWciLCJsb29wLXN3ZWVwIjoiLTkwZGVnIiwic291cmNlLWRpc3RhbmNlLWZyb20tbm9kZSI6MCwidGFyZ2V0LWRpc3RhbmNlLWZyb20tbm9kZSI6MCwic291cmNlLWVuZHBvaW50Ijoib3V0c2lkZS10by1ub2RlIiwidGFyZ2V0LWVuZHBvaW50Ijoib3V0c2lkZS10by1ub2RlIiwibGluZS1kYXNoLXBhdHRlcm4iOls2LDNdLCJsaW5lLWRhc2gtb2Zmc2V0IjowfSxbe25hbWU6ImFycm93LXNoYXBlIix2YWx1ZToibm9uZSJ9LHtuYW1lOiJhcnJvdy1jb2xvciIsdmFsdWU6IiM5OTkifSx7bmFtZToiYXJyb3ctZmlsbCIsdmFsdWU6ImZpbGxlZCJ9LHtuYW1lOiJhcnJvdy13aWR0aCIsdmFsdWU6MX1dLnJlZHVjZShmdW5jdGlvbih1LGgpe3JldHVybiBTYS5hcnJvd1ByZWZpeGVzLmZvckVhY2goZnVuY3Rpb24oZil7dmFyIGQ9ZisiLSIraC5uYW1lLHA9aC52YWx1ZTt1W2RdPXB9KSx1fSx7fSkpLHI9e30sbj0wO248dGhpcy5wcm9wZXJ0aWVzLmxlbmd0aDtuKyspe3ZhciBpPXRoaXMucHJvcGVydGllc1tuXTtpZighaS5wb2ludHNUbyl7dmFyIGE9aS5uYW1lLHM9ZVthXSxsPXRoaXMucGFyc2UoYSxzKTtyW2FdPWx9fXJldHVybiB0LmRlZmF1bHRQcm9wZXJ0aWVzPXIsdC5kZWZhdWx0UHJvcGVydGllc307U2EuYWRkRGVmYXVsdFN0eWxlc2hlZXQ9ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdG9yKCI6cGFyZW50IikuY3NzKHtzaGFwZToicmVjdGFuZ2xlIixwYWRkaW5nOjEwLCJiYWNrZ3JvdW5kLWNvbG9yIjoiI2VlZSIsImJvcmRlci1jb2xvciI6IiNjY2MiLCJib3JkZXItd2lkdGgiOjF9KS5zZWxlY3RvcigiZWRnZSIpLmNzcyh7d2lkdGg6M30pLnNlbGVjdG9yKCI6bG9vcCIpLmNzcyh7ImN1cnZlLXN0eWxlIjoiYmV6aWVyIn0pLnNlbGVjdG9yKCJlZGdlOmNvbXBvdW5kIikuY3NzKHsiY3VydmUtc3R5bGUiOiJiZXppZXIiLCJzb3VyY2UtZW5kcG9pbnQiOiJvdXRzaWRlLXRvLWxpbmUiLCJ0YXJnZXQtZW5kcG9pbnQiOiJvdXRzaWRlLXRvLWxpbmUifSkuc2VsZWN0b3IoIjpzZWxlY3RlZCIpLmNzcyh7ImJhY2tncm91bmQtY29sb3IiOiIjMDE2OUQ5IiwibGluZS1jb2xvciI6IiMwMTY5RDkiLCJzb3VyY2UtYXJyb3ctY29sb3IiOiIjMDE2OUQ5IiwidGFyZ2V0LWFycm93LWNvbG9yIjoiIzAxNjlEOSIsIm1pZC1zb3VyY2UtYXJyb3ctY29sb3IiOiIjMDE2OUQ5IiwibWlkLXRhcmdldC1hcnJvdy1jb2xvciI6IiMwMTY5RDkifSkuc2VsZWN0b3IoIjpwYXJlbnQ6c2VsZWN0ZWQiKS5jc3MoeyJiYWNrZ3JvdW5kLWNvbG9yIjoiI0NDRTFGOSIsImJvcmRlci1jb2xvciI6IiNhZWM4ZTUifSkuc2VsZWN0b3IoIjphY3RpdmUiKS5jc3MoeyJvdmVybGF5LWNvbG9yIjoiYmxhY2siLCJvdmVybGF5LXBhZGRpbmciOjEwLCJvdmVybGF5LW9wYWNpdHkiOi4yNX0pLHRoaXMuZGVmYXVsdExlbmd0aD10aGlzLmxlbmd0aH07UTY9e307UTYucGFyc2U9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcztpZihuaShlKSlyZXR1cm4gaS5wYXJzZUltcGxXYXJuKHQsZSxyLG4pO3ZhciBhPW49PT0ibWFwcGluZyJ8fG49PT0hMHx8bj09PSExfHxuPT1udWxsPyJkb250Y2FyZSI6bixzPXI/InQiOiJmIixsPSIiK2UsdT1yZ2UodCxsLHMsYSksaD1pLnByb3BDYWNoZT1pLnByb3BDYWNoZXx8W10sZjtyZXR1cm4oZj1oW3VdKXx8KGY9aFt1XT1pLnBhcnNlSW1wbFdhcm4odCxlLHIsbikpLChyfHxuPT09Im1hcHBpbmciKSYmKGY9WmMoZiksZiYmKGYudmFsdWU9WmMoZi52YWx1ZSkpKSxmfTtRNi5wYXJzZUltcGxXYXJuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMucGFyc2VJbXBsKHQsZSxyLG4pO3JldHVybiFpJiZlIT1udWxsJiZvbigiVGhlIHN0eWxlIHByb3BlcnR5IGAiLmNvbmNhdCh0LCI6ICIpLmNvbmNhdChlLCJgIGlzIGludmFsaWQiKSksaSYmKGkubmFtZT09PSJ3aWR0aCJ8fGkubmFtZT09PSJoZWlnaHQiKSYmZT09PSJsYWJlbCImJm9uKCJUaGUgc3R5bGUgdmFsdWUgb2YgYGxhYmVsYCBpcyBkZXByZWNhdGVkIGZvciBgIitpLm5hbWUrImAiKSxpfTtRNi5wYXJzZUltcGw9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpczt0PWlCKHQpO3ZhciBhPWkucHJvcGVydGllc1t0XSxzPWUsbD1pLnR5cGVzO2lmKCFhfHxlPT09dm9pZCAwKXJldHVybiBudWxsO2EuYWxpYXMmJihhPWEucG9pbnRzVG8sdD1hLm5hbWUpO3ZhciB1PVp0KGUpO3UmJihlPWUudHJpbSgpKTt2YXIgaD1hLnR5cGU7aWYoIWgpcmV0dXJuIG51bGw7aWYociYmKGU9PT0iInx8ZT09PW51bGwpKXJldHVybntuYW1lOnQsdmFsdWU6ZSxieXBhc3M6ITAsZGVsZXRlQnlwYXNzOiEwfTtpZihuaShlKSlyZXR1cm57bmFtZTp0LHZhbHVlOmUsc3RyVmFsdWU6ImZuIixtYXBwZWQ6bC5mbixieXBhc3M6cn07dmFyIGYsZDtpZighKCF1fHxufHxlLmxlbmd0aDw3fHxlWzFdIT09ImEiKSl7aWYoZS5sZW5ndGg+PTcmJmVbMF09PT0iZCImJihmPW5ldyBSZWdFeHAobC5kYXRhLnJlZ2V4KS5leGVjKGUpKSl7aWYocilyZXR1cm4hMTt2YXIgcD1sLmRhdGE7cmV0dXJue25hbWU6dCx2YWx1ZTpmLHN0clZhbHVlOiIiK2UsbWFwcGVkOnAsZmllbGQ6ZlsxXSxieXBhc3M6cn19ZWxzZSBpZihlLmxlbmd0aD49MTAmJmVbMF09PT0ibSImJihkPW5ldyBSZWdFeHAobC5tYXBEYXRhLnJlZ2V4KS5leGVjKGUpKSl7aWYocnx8aC5tdWx0aXBsZSlyZXR1cm4hMTt2YXIgbT1sLm1hcERhdGE7aWYoIShoLmNvbG9yfHxoLm51bWJlcikpcmV0dXJuITE7dmFyIGc9dGhpcy5wYXJzZSh0LGRbNF0pO2lmKCFnfHxnLm1hcHBlZClyZXR1cm4hMTt2YXIgeT10aGlzLnBhcnNlKHQsZFs1XSk7aWYoIXl8fHkubWFwcGVkKXJldHVybiExO2lmKGcucGZWYWx1ZT09PXkucGZWYWx1ZXx8Zy5zdHJWYWx1ZT09PXkuc3RyVmFsdWUpcmV0dXJuIG9uKCJgIit0KyI6ICIrZSsiYCBpcyBub3QgYSB2YWxpZCBtYXBwZXIgYmVjYXVzZSB0aGUgb3V0cHV0IHJhbmdlIGlzIHplcm87IGNvbnZlcnRpbmcgdG8gYCIrdCsiOiAiK2cuc3RyVmFsdWUrImAiKSx0aGlzLnBhcnNlKHQsZy5zdHJWYWx1ZSk7aWYoaC5jb2xvcil7dmFyIHY9Zy52YWx1ZSx4PXkudmFsdWUsYj12WzBdPT09eFswXSYmdlsxXT09PXhbMV0mJnZbMl09PT14WzJdJiYodlszXT09PXhbM118fCh2WzNdPT1udWxsfHx2WzNdPT09MSkmJih4WzNdPT1udWxsfHx4WzNdPT09MSkpO2lmKGIpcmV0dXJuITF9cmV0dXJue25hbWU6dCx2YWx1ZTpkLHN0clZhbHVlOiIiK2UsbWFwcGVkOm0sZmllbGQ6ZFsxXSxmaWVsZE1pbjpwYXJzZUZsb2F0KGRbMl0pLGZpZWxkTWF4OnBhcnNlRmxvYXQoZFszXSksdmFsdWVNaW46Zy52YWx1ZSx2YWx1ZU1heDp5LnZhbHVlLGJ5cGFzczpyfX19aWYoaC5tdWx0aXBsZSYmbiE9PSJtdWx0aXBsZSIpe3ZhciB3O2lmKHU/dz1lLnNwbGl0KC9ccysvKTprbihlKT93PWU6dz1bZV0saC5ldmVuTXVsdGlwbGUmJncubGVuZ3RoJTIhPT0wKXJldHVybiBudWxsO2Zvcih2YXIgXz1bXSxUPVtdLEU9W10sTD0iIixTPSExLEE9MDtBPHcubGVuZ3RoO0ErKyl7dmFyIEk9aS5wYXJzZSh0LHdbQV0sciwibXVsdGlwbGUiKTtTPVN8fFp0KEkudmFsdWUpLF8ucHVzaChJLnZhbHVlKSxFLnB1c2goSS5wZlZhbHVlIT1udWxsP0kucGZWYWx1ZTpJLnZhbHVlKSxULnB1c2goSS51bml0cyksTCs9KEE+MD8iICI6IiIpK0kuc3RyVmFsdWV9cmV0dXJuIGgudmFsaWRhdGUmJiFoLnZhbGlkYXRlKF8sVCk/bnVsbDpoLnNpbmdsZUVudW0mJlM/Xy5sZW5ndGg9PT0xJiZadChfWzBdKT97bmFtZTp0LHZhbHVlOl9bMF0sc3RyVmFsdWU6X1swXSxieXBhc3M6cn06bnVsbDp7bmFtZTp0LHZhbHVlOl8scGZWYWx1ZTpFLHN0clZhbHVlOkwsYnlwYXNzOnIsdW5pdHM6VH19dmFyIEQ9byhmdW5jdGlvbigpe2Zvcih2YXIgSD0wO0g8aC5lbnVtcy5sZW5ndGg7SCsrKXt2YXIgcT1oLmVudW1zW0hdO2lmKHE9PT1lKXJldHVybntuYW1lOnQsdmFsdWU6ZSxzdHJWYWx1ZToiIitlLGJ5cGFzczpyfX1yZXR1cm4gbnVsbH0sImNoZWNrRW51bXMiKTtpZihoLm51bWJlcil7dmFyIGssUj0icHgiO2lmKGgudW5pdHMmJihrPWgudW5pdHMpLGguaW1wbGljaXRVbml0cyYmKFI9aC5pbXBsaWNpdFVuaXRzKSwhaC51bml0bGVzcylpZih1KXt2YXIgQz0icHh8ZW0iKyhoLmFsbG93UGVyY2VudD8ifFxcJSI6IiIpO2smJihDPWspO3ZhciBPPWUubWF0Y2goIl4oIitqaSsiKSgiK0MrIik/JCIpO08mJihlPU9bMV0saz1PWzJdfHxSKX1lbHNlKCFrfHxoLmltcGxpY2l0VW5pdHMpJiYoaz1SKTtpZihlPXBhcnNlRmxvYXQoZSksaXNOYU4oZSkmJmguZW51bXM9PT12b2lkIDApcmV0dXJuIG51bGw7aWYoaXNOYU4oZSkmJmguZW51bXMhPT12b2lkIDApcmV0dXJuIGU9cyxEKCk7aWYoaC5pbnRlZ2VyJiYhU3FlKGUpfHxoLm1pbiE9PXZvaWQgMCYmKGU8aC5taW58fGguc3RyaWN0TWluJiZlPT09aC5taW4pfHxoLm1heCE9PXZvaWQgMCYmKGU+aC5tYXh8fGguc3RyaWN0TWF4JiZlPT09aC5tYXgpKXJldHVybiBudWxsO3ZhciBOPXtuYW1lOnQsdmFsdWU6ZSxzdHJWYWx1ZToiIitlKyhrfHwiIiksdW5pdHM6ayxieXBhc3M6cn07cmV0dXJuIGgudW5pdGxlc3N8fGshPT0icHgiJiZrIT09ImVtIj9OLnBmVmFsdWU9ZTpOLnBmVmFsdWU9az09PSJweCJ8fCFrP2U6dGhpcy5nZXRFbVNpemVJblBpeGVscygpKmUsKGs9PT0ibXMifHxrPT09InMiKSYmKE4ucGZWYWx1ZT1rPT09Im1zIj9lOjFlMyplKSwoaz09PSJkZWcifHxrPT09InJhZCIpJiYoTi5wZlZhbHVlPWs9PT0icmFkIj9lOmFqZShlKSksaz09PSIlIiYmKE4ucGZWYWx1ZT1lLzEwMCksTn1lbHNlIGlmKGgucHJvcExpc3Qpe3ZhciBQPVtdLEY9IiIrZTtpZihGIT09Im5vbmUiKXtmb3IodmFyIEI9Ri5zcGxpdCgvXHMqLFxzKnxccysvKSxHPTA7RzxCLmxlbmd0aDtHKyspe3ZhciB6PUJbR10udHJpbSgpO2kucHJvcGVydGllc1t6XT9QLnB1c2goeik6b24oImAiK3orImAgaXMgbm90IGEgdmFsaWQgcHJvcGVydHkgbmFtZSIpfWlmKFAubGVuZ3RoPT09MClyZXR1cm4gbnVsbH1yZXR1cm57bmFtZTp0LHZhbHVlOlAsc3RyVmFsdWU6UC5sZW5ndGg9PT0wPyJub25lIjpQLmpvaW4oIiAiKSxieXBhc3M6cn19ZWxzZSBpZihoLmNvbG9yKXt2YXIgVz1WcWUoZSk7cmV0dXJuIFc/e25hbWU6dCx2YWx1ZTpXLHBmVmFsdWU6VyxzdHJWYWx1ZToicmdiKCIrV1swXSsiLCIrV1sxXSsiLCIrV1syXSsiKSIsYnlwYXNzOnJ9Om51bGx9ZWxzZSBpZihoLnJlZ2V4fHxoLnJlZ2V4ZXMpe2lmKGguZW51bXMpe3ZhciBaPUQoKTtpZihaKXJldHVybiBafWZvcih2YXIgaj1oLnJlZ2V4ZXM/aC5yZWdleGVzOltoLnJlZ2V4XSxvZT0wO29lPGoubGVuZ3RoO29lKyspe3ZhciBLPW5ldyBSZWdFeHAoaltvZV0pLGVlPUsuZXhlYyhlKTtpZihlZSlyZXR1cm57bmFtZTp0LHZhbHVlOmguc2luZ2xlUmVnZXhNYXRjaFZhbHVlP2VlWzFdOmVlLHN0clZhbHVlOiIiK2UsYnlwYXNzOnJ9fXJldHVybiBudWxsfWVsc2UgcmV0dXJuIGguc3RyaW5nP3tuYW1lOnQsdmFsdWU6IiIrZSxzdHJWYWx1ZToiIitlLGJ5cGFzczpyfTpoLmVudW1zP0QoKTpudWxsfTtVYT1vKGZ1bmN0aW9uIHQoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgdCkpcmV0dXJuIG5ldyB0KGUpO2lmKCFuQihlKSl7ZGkoIkEgc3R5bGUgbXVzdCBoYXZlIGEgY29yZSByZWZlcmVuY2UiKTtyZXR1cm59dGhpcy5fcHJpdmF0ZT17Y3k6ZSxjb3JlU3R5bGU6e319LHRoaXMubGVuZ3RoPTAsdGhpcy5yZXNldFRvRGVmYXVsdCgpfSwiU3R5bGUiKSxXYT1VYS5wcm90b3R5cGU7V2EuaW5zdGFuY2VTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4ic3R5bGUifTtXYS5jbGVhcj1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9wcml2YXRlLGU9dC5jeSxyPWUuZWxlbWVudHMoKSxuPTA7bjx0aGlzLmxlbmd0aDtuKyspdGhpc1tuXT12b2lkIDA7cmV0dXJuIHRoaXMubGVuZ3RoPTAsdC5jb250ZXh0U3R5bGVzPXt9LHQucHJvcERpZmZzPXt9LHRoaXMuY2xlYW5FbGVtZW50cyhyLCEwKSxyLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIGE9aVswXS5fcHJpdmF0ZTthLnN0eWxlRGlydHk9ITAsYS5hcHBsaWVkSW5pdFN0eWxlPSExfSksdGhpc307V2EucmVzZXRUb0RlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGVhcigpLHRoaXMuYWRkRGVmYXVsdFN0eWxlc2hlZXQoKSx0aGlzfTtXYS5jb3JlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wcml2YXRlLmNvcmVTdHlsZVt0XXx8dGhpcy5nZXREZWZhdWx0UHJvcGVydHkodCl9O1dhLnNlbGVjdG9yPWZ1bmN0aW9uKHQpe3ZhciBlPXQ9PT0iY29yZSI/bnVsbDpuZXcgUGYodCkscj10aGlzLmxlbmd0aCsrO3JldHVybiB0aGlzW3JdPXtzZWxlY3RvcjplLHByb3BlcnRpZXM6W10sbWFwcGVkUHJvcGVydGllczpbXSxpbmRleDpyfSx0aGlzfTtXYS5jc3M9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9YXJndW1lbnRzO2lmKGUubGVuZ3RoPT09MSlmb3IodmFyIHI9ZVswXSxuPTA7bjx0LnByb3BlcnRpZXMubGVuZ3RoO24rKyl7dmFyIGk9dC5wcm9wZXJ0aWVzW25dLGE9cltpLm5hbWVdO2E9PT12b2lkIDAmJihhPXJbQjYoaS5uYW1lKV0pLGEhPT12b2lkIDAmJnRoaXMuY3NzUnVsZShpLm5hbWUsYSl9ZWxzZSBlLmxlbmd0aD09PTImJnRoaXMuY3NzUnVsZShlWzBdLGVbMV0pO3JldHVybiB0aGlzfTtXYS5zdHlsZT1XYS5jc3M7V2EuY3NzUnVsZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMucGFyc2UodCxlKTtpZihyKXt2YXIgbj10aGlzLmxlbmd0aC0xO3RoaXNbbl0ucHJvcGVydGllcy5wdXNoKHIpLHRoaXNbbl0ucHJvcGVydGllc1tyLm5hbWVdPXIsci5uYW1lLm1hdGNoKC9waWUtKFxkKyktYmFja2dyb3VuZC1zaXplLykmJnIudmFsdWUmJih0aGlzLl9wcml2YXRlLmhhc1BpZT0hMCksci5tYXBwZWQmJnRoaXNbbl0ubWFwcGVkUHJvcGVydGllcy5wdXNoKHIpO3ZhciBpPSF0aGlzW25dLnNlbGVjdG9yO2kmJih0aGlzLl9wcml2YXRlLmNvcmVTdHlsZVtyLm5hbWVdPXIpfXJldHVybiB0aGlzfTtXYS5hcHBlbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFltZSh0KT90LmFwcGVuZFRvU3R5bGUodGhpcyk6a24odCk/dGhpcy5hcHBlbmRGcm9tSnNvbih0KTpadCh0KSYmdGhpcy5hcHBlbmRGcm9tU3RyaW5nKHQpLHRoaXN9O1VhLmZyb21Kc29uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IFVhKHQpO3JldHVybiByLmZyb21Kc29uKGUpLHJ9O1VhLmZyb21TdHJpbmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IFVhKHQpLmZyb21TdHJpbmcoZSl9O1tZYSx2Yix2QixldSxLNix4QixTYSxRNl0uZm9yRWFjaChmdW5jdGlvbih0KXtpcihXYSx0KX0pO1VhLnR5cGVzPVdhLnR5cGVzO1VhLnByb3BlcnRpZXM9V2EucHJvcGVydGllcztVYS5wcm9wZXJ0eUdyb3Vwcz1XYS5wcm9wZXJ0eUdyb3VwcztVYS5wcm9wZXJ0eUdyb3VwTmFtZXM9V2EucHJvcGVydHlHcm91cE5hbWVzO1VhLnByb3BlcnR5R3JvdXBLZXlzPVdhLnByb3BlcnR5R3JvdXBLZXlzO1NKZT17c3R5bGU6byhmdW5jdGlvbihlKXtpZihlKXt2YXIgcj10aGlzLnNldFN0eWxlKGUpO3IudXBkYXRlKCl9cmV0dXJuIHRoaXMuX3ByaXZhdGUuc3R5bGV9LCJzdHlsZSIpLHNldFN0eWxlOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gWW1lKGUpP3Iuc3R5bGU9ZS5nZW5lcmF0ZVN0eWxlKHRoaXMpOmtuKGUpP3Iuc3R5bGU9VWEuZnJvbUpzb24odGhpcyxlKTpadChlKT9yLnN0eWxlPVVhLmZyb21TdHJpbmcodGhpcyxlKTpyLnN0eWxlPVVhKHRoaXMpLHIuc3R5bGV9LCJzZXRTdHlsZSIpLHVwZGF0ZVN0eWxlOm8oZnVuY3Rpb24oKXt0aGlzLm11dGFibGVFbGVtZW50cygpLnVwZGF0ZVN0eWxlKCl9LCJ1cGRhdGVTdHlsZSIpfSxDSmU9InNpbmdsZSIsSjA9e2F1dG9sb2NrOm8oZnVuY3Rpb24oZSl7aWYoZSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLmF1dG9sb2NrPSEhZTtlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLmF1dG9sb2NrO3JldHVybiB0aGlzfSwiYXV0b2xvY2siKSxhdXRvdW5ncmFiaWZ5Om8oZnVuY3Rpb24oZSl7aWYoZSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLmF1dG91bmdyYWJpZnk9ISFlO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUuYXV0b3VuZ3JhYmlmeTtyZXR1cm4gdGhpc30sImF1dG91bmdyYWJpZnkiKSxhdXRvdW5zZWxlY3RpZnk6byhmdW5jdGlvbihlKXtpZihlIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUuYXV0b3Vuc2VsZWN0aWZ5PSEhZTtlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLmF1dG91bnNlbGVjdGlmeTtyZXR1cm4gdGhpc30sImF1dG91bnNlbGVjdGlmeSIpLHNlbGVjdGlvblR5cGU6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlO2lmKHIuc2VsZWN0aW9uVHlwZT09bnVsbCYmKHIuc2VsZWN0aW9uVHlwZT1DSmUpLGUhPT12b2lkIDApKGU9PT0iYWRkaXRpdmUifHxlPT09InNpbmdsZSIpJiYoci5zZWxlY3Rpb25UeXBlPWUpO2Vsc2UgcmV0dXJuIHIuc2VsZWN0aW9uVHlwZTtyZXR1cm4gdGhpc30sInNlbGVjdGlvblR5cGUiKSxwYW5uaW5nRW5hYmxlZDpvKGZ1bmN0aW9uKGUpe2lmKGUhPT12b2lkIDApdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZD0hIWU7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZDtyZXR1cm4gdGhpc30sInBhbm5pbmdFbmFibGVkIiksdXNlclBhbm5pbmdFbmFibGVkOm8oZnVuY3Rpb24oZSl7aWYoZSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLnVzZXJQYW5uaW5nRW5hYmxlZD0hIWU7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS51c2VyUGFubmluZ0VuYWJsZWQ7cmV0dXJuIHRoaXN9LCJ1c2VyUGFubmluZ0VuYWJsZWQiKSx6b29taW5nRW5hYmxlZDpvKGZ1bmN0aW9uKGUpe2lmKGUhPT12b2lkIDApdGhpcy5fcHJpdmF0ZS56b29taW5nRW5hYmxlZD0hIWU7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS56b29taW5nRW5hYmxlZDtyZXR1cm4gdGhpc30sInpvb21pbmdFbmFibGVkIiksdXNlclpvb21pbmdFbmFibGVkOm8oZnVuY3Rpb24oZSl7aWYoZSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLnVzZXJab29taW5nRW5hYmxlZD0hIWU7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS51c2VyWm9vbWluZ0VuYWJsZWQ7cmV0dXJuIHRoaXN9LCJ1c2VyWm9vbWluZ0VuYWJsZWQiKSxib3hTZWxlY3Rpb25FbmFibGVkOm8oZnVuY3Rpb24oZSl7aWYoZSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLmJveFNlbGVjdGlvbkVuYWJsZWQ9ISFlO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUuYm94U2VsZWN0aW9uRW5hYmxlZDtyZXR1cm4gdGhpc30sImJveFNlbGVjdGlvbkVuYWJsZWQiKSxwYW46byhmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cyxyPXRoaXMuX3ByaXZhdGUucGFuLG4saSxhLHMsbDtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gcjtjYXNlIDE6aWYoWnQoZVswXSkpcmV0dXJuIG49ZVswXSxyW25dO2lmKFVyKGVbMF0pKXtpZighdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZClyZXR1cm4gdGhpczthPWVbMF0scz1hLngsbD1hLnkseHQocykmJihyLng9cykseHQobCkmJihyLnk9bCksdGhpcy5lbWl0KCJwYW4gdmlld3BvcnQiKX1icmVhaztjYXNlIDI6aWYoIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQpcmV0dXJuIHRoaXM7bj1lWzBdLGk9ZVsxXSwobj09PSJ4Inx8bj09PSJ5IikmJnh0KGkpJiYocltuXT1pKSx0aGlzLmVtaXQoInBhbiB2aWV3cG9ydCIpO2JyZWFrfXJldHVybiB0aGlzLm5vdGlmeSgidmlld3BvcnQiKSx0aGlzfSwicGFuIikscGFuQnk6byhmdW5jdGlvbihlLHIpe3ZhciBuPWFyZ3VtZW50cyxpPXRoaXMuX3ByaXZhdGUucGFuLGEscyxsLHUsaDtpZighdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZClyZXR1cm4gdGhpcztzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMTpVcihlKSYmKGw9blswXSx1PWwueCxoPWwueSx4dCh1KSYmKGkueCs9dSkseHQoaCkmJihpLnkrPWgpLHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0IikpO2JyZWFrO2Nhc2UgMjphPWUscz1yLChhPT09IngifHxhPT09InkiKSYmeHQocykmJihpW2FdKz1zKSx0aGlzLmVtaXQoInBhbiB2aWV3cG9ydCIpO2JyZWFrfXJldHVybiB0aGlzLm5vdGlmeSgidmlld3BvcnQiKSx0aGlzfSwicGFuQnkiKSxmaXQ6byhmdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMuZ2V0Rml0Vmlld3BvcnQoZSxyKTtpZihuKXt2YXIgaT10aGlzLl9wcml2YXRlO2kuem9vbT1uLnpvb20saS5wYW49bi5wYW4sdGhpcy5lbWl0KCJwYW4gem9vbSB2aWV3cG9ydCIpLHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpfXJldHVybiB0aGlzfSwiZml0IiksZ2V0Rml0Vmlld3BvcnQ6byhmdW5jdGlvbihlLHIpe2lmKHh0KGUpJiZyPT09dm9pZCAwJiYocj1lLGU9dm9pZCAwKSwhKCF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkfHwhdGhpcy5fcHJpdmF0ZS56b29taW5nRW5hYmxlZCkpe3ZhciBuO2lmKFp0KGUpKXt2YXIgaT1lO2U9dGhpcy4kKGkpfWVsc2UgaWYoX3FlKGUpKXt2YXIgYT1lO249e3gxOmEueDEseTE6YS55MSx4MjphLngyLHkyOmEueTJ9LG4udz1uLngyLW4ueDEsbi5oPW4ueTItbi55MX1lbHNlIHdvKGUpfHwoZT10aGlzLm11dGFibGVFbGVtZW50cygpKTtpZighKHdvKGUpJiZlLmVtcHR5KCkpKXtuPW58fGUuYm91bmRpbmdCb3goKTt2YXIgcz10aGlzLndpZHRoKCksbD10aGlzLmhlaWdodCgpLHU7aWYocj14dChyKT9yOjAsIWlzTmFOKHMpJiYhaXNOYU4obCkmJnM+MCYmbD4wJiYhaXNOYU4obi53KSYmIWlzTmFOKG4uaCkmJm4udz4wJiZuLmg+MCl7dT1NYXRoLm1pbigocy0yKnIpL24udywobC0yKnIpL24uaCksdT11PnRoaXMuX3ByaXZhdGUubWF4Wm9vbT90aGlzLl9wcml2YXRlLm1heFpvb206dSx1PXU8dGhpcy5fcHJpdmF0ZS5taW5ab29tP3RoaXMuX3ByaXZhdGUubWluWm9vbTp1O3ZhciBoPXt4OihzLXUqKG4ueDErbi54MikpLzIseToobC11KihuLnkxK24ueTIpKS8yfTtyZXR1cm57em9vbTp1LHBhbjpofX19fX0sImdldEZpdFZpZXdwb3J0Iiksem9vbVJhbmdlOm8oZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLl9wcml2YXRlO2lmKHI9PW51bGwpe3ZhciBpPWU7ZT1pLm1pbixyPWkubWF4fXJldHVybiB4dChlKSYmeHQocikmJmU8PXI/KG4ubWluWm9vbT1lLG4ubWF4Wm9vbT1yKTp4dChlKSYmcj09PXZvaWQgMCYmZTw9bi5tYXhab29tP24ubWluWm9vbT1lOnh0KHIpJiZlPT09dm9pZCAwJiZyPj1uLm1pblpvb20mJihuLm1heFpvb209ciksdGhpc30sInpvb21SYW5nZSIpLG1pblpvb206byhmdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMD90aGlzLl9wcml2YXRlLm1pblpvb206dGhpcy56b29tUmFuZ2Uoe21pbjplfSl9LCJtaW5ab29tIiksbWF4Wm9vbTpvKGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwP3RoaXMuX3ByaXZhdGUubWF4Wm9vbTp0aGlzLnpvb21SYW5nZSh7bWF4OmV9KX0sIm1heFpvb20iKSxnZXRab29tZWRWaWV3cG9ydDpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3ByaXZhdGUsbj1yLnBhbixpPXIuem9vbSxhLHMsbD0hMTtpZihyLnpvb21pbmdFbmFibGVkfHwobD0hMCkseHQoZSk/cz1lOlVyKGUpJiYocz1lLmxldmVsLGUucG9zaXRpb24hPW51bGw/YT0kNihlLnBvc2l0aW9uLGksbik6ZS5yZW5kZXJlZFBvc2l0aW9uIT1udWxsJiYoYT1lLnJlbmRlcmVkUG9zaXRpb24pLGEhPW51bGwmJiFyLnBhbm5pbmdFbmFibGVkJiYobD0hMCkpLHM9cz5yLm1heFpvb20/ci5tYXhab29tOnMscz1zPHIubWluWm9vbT9yLm1pblpvb206cyxsfHwheHQocyl8fHM9PT1pfHxhIT1udWxsJiYoIXh0KGEueCl8fCF4dChhLnkpKSlyZXR1cm4gbnVsbDtpZihhIT1udWxsKXt2YXIgdT1uLGg9aSxmPXMsZD17eDotZi9oKihhLngtdS54KSthLngseTotZi9oKihhLnktdS55KSthLnl9O3JldHVybnt6b29tZWQ6ITAscGFubmVkOiEwLHpvb206ZixwYW46ZH19ZWxzZSByZXR1cm57em9vbWVkOiEwLHBhbm5lZDohMSx6b29tOnMscGFuOm59fSwiZ2V0Wm9vbWVkVmlld3BvcnQiKSx6b29tOm8oZnVuY3Rpb24oZSl7aWYoZT09PXZvaWQgMClyZXR1cm4gdGhpcy5fcHJpdmF0ZS56b29tO3ZhciByPXRoaXMuZ2V0Wm9vbWVkVmlld3BvcnQoZSksbj10aGlzLl9wcml2YXRlO3JldHVybiByPT1udWxsfHwhci56b29tZWQ/dGhpczoobi56b29tPXIuem9vbSxyLnBhbm5lZCYmKG4ucGFuLng9ci5wYW4ueCxuLnBhbi55PXIucGFuLnkpLHRoaXMuZW1pdCgiem9vbSIrKHIucGFubmVkPyIgcGFuIjoiIikrIiB2aWV3cG9ydCIpLHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpLHRoaXMpfSwiem9vbSIpLHZpZXdwb3J0Om8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZSxuPSEwLGk9ITAsYT1bXSxzPSExLGw9ITE7aWYoIWUpcmV0dXJuIHRoaXM7aWYoeHQoZS56b29tKXx8KG49ITEpLFVyKGUucGFuKXx8KGk9ITEpLCFuJiYhaSlyZXR1cm4gdGhpcztpZihuKXt2YXIgdT1lLnpvb207dTxyLm1pblpvb218fHU+ci5tYXhab29tfHwhci56b29taW5nRW5hYmxlZD9zPSEwOihyLnpvb209dSxhLnB1c2goInpvb20iKSl9aWYoaSYmKCFzfHwhZS5jYW5jZWxPbkZhaWxlZFpvb20pJiZyLnBhbm5pbmdFbmFibGVkKXt2YXIgaD1lLnBhbjt4dChoLngpJiYoci5wYW4ueD1oLngsbD0hMSkseHQoaC55KSYmKHIucGFuLnk9aC55LGw9ITEpLGx8fGEucHVzaCgicGFuIil9cmV0dXJuIGEubGVuZ3RoPjAmJihhLnB1c2goInZpZXdwb3J0IiksdGhpcy5lbWl0KGEuam9pbigiICIpKSx0aGlzLm5vdGlmeSgidmlld3BvcnQiKSksdGhpc30sInZpZXdwb3J0IiksY2VudGVyOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5nZXRDZW50ZXJQYW4oZSk7cmV0dXJuIHImJih0aGlzLl9wcml2YXRlLnBhbj1yLHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0IiksdGhpcy5ub3RpZnkoInZpZXdwb3J0IikpLHRoaXN9LCJjZW50ZXIiKSxnZXRDZW50ZXJQYW46byhmdW5jdGlvbihlLHIpe2lmKHRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQpe2lmKFp0KGUpKXt2YXIgbj1lO2U9dGhpcy5tdXRhYmxlRWxlbWVudHMoKS5maWx0ZXIobil9ZWxzZSB3byhlKXx8KGU9dGhpcy5tdXRhYmxlRWxlbWVudHMoKSk7aWYoZS5sZW5ndGghPT0wKXt2YXIgaT1lLmJvdW5kaW5nQm94KCksYT10aGlzLndpZHRoKCkscz10aGlzLmhlaWdodCgpO3I9cj09PXZvaWQgMD90aGlzLl9wcml2YXRlLnpvb206cjt2YXIgbD17eDooYS1yKihpLngxK2kueDIpKS8yLHk6KHMtciooaS55MStpLnkyKSkvMn07cmV0dXJuIGx9fX0sImdldENlbnRlclBhbiIpLHJlc2V0Om8oZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZHx8IXRoaXMuX3ByaXZhdGUuem9vbWluZ0VuYWJsZWQ/dGhpczoodGhpcy52aWV3cG9ydCh7cGFuOnt4OjAseTowfSx6b29tOjF9KSx0aGlzKX0sInJlc2V0IiksaW52YWxpZGF0ZVNpemU6byhmdW5jdGlvbigpe3RoaXMuX3ByaXZhdGUuc2l6ZUNhY2hlPW51bGx9LCJpbnZhbGlkYXRlU2l6ZSIpLHNpemU6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByaXZhdGUscj1lLmNvbnRhaW5lcixuPXRoaXM7cmV0dXJuIGUuc2l6ZUNhY2hlPWUuc2l6ZUNhY2hlfHwocj9mdW5jdGlvbigpe3ZhciBpPW4ud2luZG93KCkuZ2V0Q29tcHV0ZWRTdHlsZShyKSxhPW8oZnVuY3Rpb24obCl7cmV0dXJuIHBhcnNlRmxvYXQoaS5nZXRQcm9wZXJ0eVZhbHVlKGwpKX0sInZhbCIpO3JldHVybnt3aWR0aDpyLmNsaWVudFdpZHRoLWEoInBhZGRpbmctbGVmdCIpLWEoInBhZGRpbmctcmlnaHQiKSxoZWlnaHQ6ci5jbGllbnRIZWlnaHQtYSgicGFkZGluZy10b3AiKS1hKCJwYWRkaW5nLWJvdHRvbSIpfX0oKTp7d2lkdGg6MSxoZWlnaHQ6MX0pfSwic2l6ZSIpLHdpZHRoOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplKCkud2lkdGh9LCJ3aWR0aCIpLGhlaWdodDpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZSgpLmhlaWdodH0sImhlaWdodCIpLGV4dGVudDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZS5wYW4scj10aGlzLl9wcml2YXRlLnpvb20sbj10aGlzLnJlbmRlcmVkRXh0ZW50KCksaT17eDE6KG4ueDEtZS54KS9yLHgyOihuLngyLWUueCkvcix5MToobi55MS1lLnkpL3IseTI6KG4ueTItZS55KS9yfTtyZXR1cm4gaS53PWkueDItaS54MSxpLmg9aS55Mi1pLnkxLGl9LCJleHRlbnQiKSxyZW5kZXJlZEV4dGVudDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy53aWR0aCgpLHI9dGhpcy5oZWlnaHQoKTtyZXR1cm57eDE6MCx5MTowLHgyOmUseTI6cix3OmUsaDpyfX0sInJlbmRlcmVkRXh0ZW50IiksbXVsdGlDbGlja0RlYm91bmNlVGltZTpvKGZ1bmN0aW9uKGUpe2lmKGUpdGhpcy5fcHJpdmF0ZS5tdWx0aUNsaWNrRGVib3VuY2VUaW1lPWU7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS5tdWx0aUNsaWNrRGVib3VuY2VUaW1lO3JldHVybiB0aGlzfSwibXVsdGlDbGlja0RlYm91bmNlVGltZSIpfTtKMC5jZW50cmU9SjAuY2VudGVyO0owLmF1dG9sb2NrTm9kZXM9SjAuYXV0b2xvY2s7SjAuYXV0b3VuZ3JhYmlmeU5vZGVzPUowLmF1dG91bmdyYWJpZnk7aGI9e2RhdGE6c24uZGF0YSh7ZmllbGQ6ImRhdGEiLGJpbmRpbmdFdmVudDoiZGF0YSIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6ImRhdGEiLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLGFsbG93R2V0dGluZzohMCx1cGRhdGVTdHlsZTohMH0pLHJlbW92ZURhdGE6c24ucmVtb3ZlRGF0YSh7ZmllbGQ6ImRhdGEiLGV2ZW50OiJkYXRhIix0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIix0cmlnZ2VyRXZlbnQ6ITAsdXBkYXRlU3R5bGU6ITB9KSxzY3JhdGNoOnNuLmRhdGEoe2ZpZWxkOiJzY3JhdGNoIixiaW5kaW5nRXZlbnQ6InNjcmF0Y2giLGFsbG93QmluZGluZzohMCxhbGxvd1NldHRpbmc6ITAsc2V0dGluZ0V2ZW50OiJzY3JhdGNoIixzZXR0aW5nVHJpZ2dlcnNFdmVudDohMCx0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIixhbGxvd0dldHRpbmc6ITAsdXBkYXRlU3R5bGU6ITB9KSxyZW1vdmVTY3JhdGNoOnNuLnJlbW92ZURhdGEoe2ZpZWxkOiJzY3JhdGNoIixldmVudDoic2NyYXRjaCIsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsdHJpZ2dlckV2ZW50OiEwLHVwZGF0ZVN0eWxlOiEwfSl9O2hiLmF0dHI9aGIuZGF0YTtoYi5yZW1vdmVBdHRyPWhiLnJlbW92ZURhdGE7ZmI9byhmdW5jdGlvbihlKXt2YXIgcj10aGlzO2U9aXIoe30sZSk7dmFyIG49ZS5jb250YWluZXI7biYmIUM2KG4pJiZDNihuWzBdKSYmKG49blswXSk7dmFyIGk9bj9uLl9jeXJlZzpudWxsO2k9aXx8e30saSYmaS5jeSYmKGkuY3kuZGVzdHJveSgpLGk9e30pO3ZhciBhPWkucmVhZGllcz1pLnJlYWRpZXN8fFtdO24mJihuLl9jeXJlZz1pKSxpLmN5PXI7dmFyIHM9WGkhPT12b2lkIDAmJm4hPT12b2lkIDAmJiFlLmhlYWRsZXNzLGw9ZTtsLmxheW91dD1pcih7bmFtZTpzPyJncmlkIjoibnVsbCJ9LGwubGF5b3V0KSxsLnJlbmRlcmVyPWlyKHtuYW1lOnM/ImNhbnZhcyI6Im51bGwifSxsLnJlbmRlcmVyKTt2YXIgdT1vKGZ1bmN0aW9uKGcseSx2KXtyZXR1cm4geSE9PXZvaWQgMD95OnYhPT12b2lkIDA/djpnfSwiZGVmVmFsIiksaD10aGlzLl9wcml2YXRlPXtjb250YWluZXI6bixyZWFkeTohMSxvcHRpb25zOmwsZWxlbWVudHM6bmV3IEFhKHRoaXMpLGxpc3RlbmVyczpbXSxhbmlFbGVzOm5ldyBBYSh0aGlzKSxkYXRhOmwuZGF0YXx8e30sc2NyYXRjaDp7fSxsYXlvdXQ6bnVsbCxyZW5kZXJlcjpudWxsLGRlc3Ryb3llZDohMSxub3RpZmljYXRpb25zRW5hYmxlZDohMCxtaW5ab29tOjFlLTUwLG1heFpvb206MWU1MCx6b29taW5nRW5hYmxlZDp1KCEwLGwuem9vbWluZ0VuYWJsZWQpLHVzZXJab29taW5nRW5hYmxlZDp1KCEwLGwudXNlclpvb21pbmdFbmFibGVkKSxwYW5uaW5nRW5hYmxlZDp1KCEwLGwucGFubmluZ0VuYWJsZWQpLHVzZXJQYW5uaW5nRW5hYmxlZDp1KCEwLGwudXNlclBhbm5pbmdFbmFibGVkKSxib3hTZWxlY3Rpb25FbmFibGVkOnUoITAsbC5ib3hTZWxlY3Rpb25FbmFibGVkKSxhdXRvbG9jazp1KCExLGwuYXV0b2xvY2ssbC5hdXRvbG9ja05vZGVzKSxhdXRvdW5ncmFiaWZ5OnUoITEsbC5hdXRvdW5ncmFiaWZ5LGwuYXV0b3VuZ3JhYmlmeU5vZGVzKSxhdXRvdW5zZWxlY3RpZnk6dSghMSxsLmF1dG91bnNlbGVjdGlmeSksc3R5bGVFbmFibGVkOmwuc3R5bGVFbmFibGVkPT09dm9pZCAwP3M6bC5zdHlsZUVuYWJsZWQsem9vbTp4dChsLnpvb20pP2wuem9vbToxLHBhbjp7eDpVcihsLnBhbikmJnh0KGwucGFuLngpP2wucGFuLng6MCx5OlVyKGwucGFuKSYmeHQobC5wYW4ueSk/bC5wYW4ueTowfSxhbmltYXRpb246e2N1cnJlbnQ6W10scXVldWU6W119LGhhc0NvbXBvdW5kTm9kZXM6ITEsbXVsdGlDbGlja0RlYm91bmNlVGltZTp1KDI1MCxsLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUpfTt0aGlzLmNyZWF0ZUVtaXR0ZXIoKSx0aGlzLnNlbGVjdGlvblR5cGUobC5zZWxlY3Rpb25UeXBlKSx0aGlzLnpvb21SYW5nZSh7bWluOmwubWluWm9vbSxtYXg6bC5tYXhab29tfSk7dmFyIGY9byhmdW5jdGlvbihnLHkpe3ZhciB2PWcuc29tZShMcWUpO2lmKHYpcmV0dXJuIEMxLmFsbChnKS50aGVuKHkpO3koZyl9LCJsb2FkRXh0RGF0YSIpO2guc3R5bGVFbmFibGVkJiZyLnNldFN0eWxlKFtdKTt2YXIgZD1pcih7fSxsLGwucmVuZGVyZXIpO3IuaW5pdFJlbmRlcmVyKGQpO3ZhciBwPW8oZnVuY3Rpb24oZyx5LHYpe3Iubm90aWZpY2F0aW9ucyghMSk7dmFyIHg9ci5tdXRhYmxlRWxlbWVudHMoKTt4Lmxlbmd0aD4wJiZ4LnJlbW92ZSgpLGchPW51bGwmJihVcihnKXx8a24oZykpJiZyLmFkZChnKSxyLm9uZSgibGF5b3V0cmVhZHkiLGZ1bmN0aW9uKHcpe3Iubm90aWZpY2F0aW9ucyghMCksci5lbWl0KHcpLHIub25lKCJsb2FkIix5KSxyLmVtaXRBbmROb3RpZnkoImxvYWQiKX0pLm9uZSgibGF5b3V0c3RvcCIsZnVuY3Rpb24oKXtyLm9uZSgiZG9uZSIsdiksci5lbWl0KCJkb25lIil9KTt2YXIgYj1pcih7fSxyLl9wcml2YXRlLm9wdGlvbnMubGF5b3V0KTtiLmVsZXM9ci5lbGVtZW50cygpLHIubGF5b3V0KGIpLnJ1bigpfSwic2V0RWxlc0FuZExheW91dCIpO2YoW2wuc3R5bGUsbC5lbGVtZW50c10sZnVuY3Rpb24obSl7dmFyIGc9bVswXSx5PW1bMV07aC5zdHlsZUVuYWJsZWQmJnIuc3R5bGUoKS5hcHBlbmQoZykscCh5LGZ1bmN0aW9uKCl7ci5zdGFydEFuaW1hdGlvbkxvb3AoKSxoLnJlYWR5PSEwLG5pKGwucmVhZHkpJiZyLm9uKCJyZWFkeSIsbC5yZWFkeSk7Zm9yKHZhciB2PTA7djxhLmxlbmd0aDt2Kyspe3ZhciB4PWFbdl07ci5vbigicmVhZHkiLHgpfWkmJihpLnJlYWRpZXM9W10pLHIuZW1pdCgicmVhZHkiKX0sbC5kb25lKX0pfSwiQ29yZSIpLE02PWZiLnByb3RvdHlwZTtpcihNNix7aW5zdGFuY2VTdHJpbmc6byhmdW5jdGlvbigpe3JldHVybiJjb3JlIn0sImluc3RhbmNlU3RyaW5nIiksaXNSZWFkeTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUucmVhZHl9LCJpc1JlYWR5IiksZGVzdHJveWVkOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5kZXN0cm95ZWR9LCJkZXN0cm95ZWQiKSxyZWFkeTpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmlzUmVhZHkoKT90aGlzLmVtaXR0ZXIoKS5lbWl0KCJyZWFkeSIsW10sZSk6dGhpcy5vbigicmVhZHkiLGUpLHRoaXN9LCJyZWFkeSIpLGRlc3Ryb3k6byhmdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYoIWUuZGVzdHJveWVkKCkpcmV0dXJuIGUuc3RvcEFuaW1hdGlvbkxvb3AoKSxlLmRlc3Ryb3lSZW5kZXJlcigpLHRoaXMuZW1pdCgiZGVzdHJveSIpLGUuX3ByaXZhdGUuZGVzdHJveWVkPSEwLGV9LCJkZXN0cm95IiksaGFzRWxlbWVudFdpdGhJZDpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzLmhhc0VsZW1lbnRXaXRoSWQoZSl9LCJoYXNFbGVtZW50V2l0aElkIiksZ2V0RWxlbWVudEJ5SWQ6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbGVtZW50cy5nZXRFbGVtZW50QnlJZChlKX0sImdldEVsZW1lbnRCeUlkIiksaGFzQ29tcG91bmROb2RlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuaGFzQ29tcG91bmROb2Rlc30sImhhc0NvbXBvdW5kTm9kZXMiKSxoZWFkbGVzczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUucmVuZGVyZXIuaXNIZWFkbGVzcygpfSwiaGVhZGxlc3MiKSxzdHlsZUVuYWJsZWQ6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLnN0eWxlRW5hYmxlZH0sInN0eWxlRW5hYmxlZCIpLGFkZFRvUG9vbDpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzLm1lcmdlKGUpLHRoaXN9LCJhZGRUb1Bvb2wiKSxyZW1vdmVGcm9tUG9vbDpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzLnVubWVyZ2UoZSksdGhpc30sInJlbW92ZUZyb21Qb29sIiksY29udGFpbmVyOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5jb250YWluZXJ8fG51bGx9LCJjb250YWluZXIiKSx3aW5kb3c6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByaXZhdGUuY29udGFpbmVyO2lmKGU9PW51bGwpcmV0dXJuIFhpO3ZhciByPXRoaXMuX3ByaXZhdGUuY29udGFpbmVyLm93bmVyRG9jdW1lbnQ7cmV0dXJuIHI9PT12b2lkIDB8fHI9PW51bGw/WGk6ci5kZWZhdWx0Vmlld3x8WGl9LCJ3aW5kb3ciKSxtb3VudDpvKGZ1bmN0aW9uKGUpe2lmKGUhPW51bGwpe3ZhciByPXRoaXMsbj1yLl9wcml2YXRlLGk9bi5vcHRpb25zO3JldHVybiFDNihlKSYmQzYoZVswXSkmJihlPWVbMF0pLHIuc3RvcEFuaW1hdGlvbkxvb3AoKSxyLmRlc3Ryb3lSZW5kZXJlcigpLG4uY29udGFpbmVyPWUsbi5zdHlsZUVuYWJsZWQ9ITAsci5pbnZhbGlkYXRlU2l6ZSgpLHIuaW5pdFJlbmRlcmVyKGlyKHt9LGksaS5yZW5kZXJlcix7bmFtZTppLnJlbmRlcmVyLm5hbWU9PT0ibnVsbCI/ImNhbnZhcyI6aS5yZW5kZXJlci5uYW1lfSkpLHIuc3RhcnRBbmltYXRpb25Mb29wKCksci5zdHlsZShpLnN0eWxlKSxyLmVtaXQoIm1vdW50Iikscn19LCJtb3VudCIpLHVubW91bnQ6byhmdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIGUuc3RvcEFuaW1hdGlvbkxvb3AoKSxlLmRlc3Ryb3lSZW5kZXJlcigpLGUuaW5pdFJlbmRlcmVyKHtuYW1lOiJudWxsIn0pLGUuZW1pdCgidW5tb3VudCIpLGV9LCJ1bm1vdW50Iiksb3B0aW9uczpvKGZ1bmN0aW9uKCl7cmV0dXJuIFpjKHRoaXMuX3ByaXZhdGUub3B0aW9ucyl9LCJvcHRpb25zIiksanNvbjpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMsbj1yLl9wcml2YXRlLGk9ci5tdXRhYmxlRWxlbWVudHMoKSxhPW8oZnVuY3Rpb24oXyl7cmV0dXJuIHIuZ2V0RWxlbWVudEJ5SWQoXy5pZCgpKX0sImdldEZyZXNoUmVmIik7aWYoVXIoZSkpe2lmKHIuc3RhcnRCYXRjaCgpLGUuZWxlbWVudHMpe3ZhciBzPXt9LGw9byhmdW5jdGlvbihfLFQpe2Zvcih2YXIgRT1bXSxMPVtdLFM9MDtTPF8ubGVuZ3RoO1MrKyl7dmFyIEE9X1tTXTtpZighQS5kYXRhLmlkKXtvbigiY3kuanNvbigpIGNhbm5vdCBoYW5kbGUgZWxlbWVudHMgd2l0aG91dCBhbiBJRCBhdHRyaWJ1dGUiKTtjb250aW51ZX12YXIgST0iIitBLmRhdGEuaWQsRD1yLmdldEVsZW1lbnRCeUlkKEkpO3NbSV09ITAsRC5sZW5ndGghPT0wP0wucHVzaCh7ZWxlOkQsanNvbjpBfSk6KFQmJihBLmdyb3VwPVQpLEUucHVzaChBKSl9ci5hZGQoRSk7Zm9yKHZhciBrPTA7azxMLmxlbmd0aDtrKyspe3ZhciBSPUxba10sQz1SLmVsZSxPPVIuanNvbjtDLmpzb24oTyl9fSwidXBkYXRlRWxlcyIpO2lmKGtuKGUuZWxlbWVudHMpKWwoZS5lbGVtZW50cyk7ZWxzZSBmb3IodmFyIHU9WyJub2RlcyIsImVkZ2VzIl0saD0wO2g8dS5sZW5ndGg7aCsrKXt2YXIgZj11W2hdLGQ9ZS5lbGVtZW50c1tmXTtrbihkKSYmbChkLGYpfXZhciBwPXIuY29sbGVjdGlvbigpO2kuZmlsdGVyKGZ1bmN0aW9uKHcpe3JldHVybiFzW3cuaWQoKV19KS5mb3JFYWNoKGZ1bmN0aW9uKHcpe3cuaXNQYXJlbnQoKT9wLm1lcmdlKHcpOncucmVtb3ZlKCl9KSxwLmZvckVhY2goZnVuY3Rpb24odyl7cmV0dXJuIHcuY2hpbGRyZW4oKS5tb3ZlKHtwYXJlbnQ6bnVsbH0pfSkscC5mb3JFYWNoKGZ1bmN0aW9uKHcpe3JldHVybiBhKHcpLnJlbW92ZSgpfSl9ZS5zdHlsZSYmci5zdHlsZShlLnN0eWxlKSxlLnpvb20hPW51bGwmJmUuem9vbSE9PW4uem9vbSYmci56b29tKGUuem9vbSksZS5wYW4mJihlLnBhbi54IT09bi5wYW4ueHx8ZS5wYW4ueSE9PW4ucGFuLnkpJiZyLnBhbihlLnBhbiksZS5kYXRhJiZyLmRhdGEoZS5kYXRhKTtmb3IodmFyIG09WyJtaW5ab29tIiwibWF4Wm9vbSIsInpvb21pbmdFbmFibGVkIiwidXNlclpvb21pbmdFbmFibGVkIiwicGFubmluZ0VuYWJsZWQiLCJ1c2VyUGFubmluZ0VuYWJsZWQiLCJib3hTZWxlY3Rpb25FbmFibGVkIiwiYXV0b2xvY2siLCJhdXRvdW5ncmFiaWZ5IiwiYXV0b3Vuc2VsZWN0aWZ5IiwibXVsdGlDbGlja0RlYm91bmNlVGltZSJdLGc9MDtnPG0ubGVuZ3RoO2crKyl7dmFyIHk9bVtnXTtlW3ldIT1udWxsJiZyW3ldKGVbeV0pfXJldHVybiByLmVuZEJhdGNoKCksdGhpc31lbHNle3ZhciB2PSEhZSx4PXt9O3Y/eC5lbGVtZW50cz10aGlzLmVsZW1lbnRzKCkubWFwKGZ1bmN0aW9uKHcpe3JldHVybiB3Lmpzb24oKX0pOih4LmVsZW1lbnRzPXt9LGkuZm9yRWFjaChmdW5jdGlvbih3KXt2YXIgXz13Lmdyb3VwKCk7eC5lbGVtZW50c1tfXXx8KHguZWxlbWVudHNbX109W10pLHguZWxlbWVudHNbX10ucHVzaCh3Lmpzb24oKSl9KSksdGhpcy5fcHJpdmF0ZS5zdHlsZUVuYWJsZWQmJih4LnN0eWxlPXIuc3R5bGUoKS5qc29uKCkpLHguZGF0YT1aYyhyLmRhdGEoKSk7dmFyIGI9bi5vcHRpb25zO3JldHVybiB4Lnpvb21pbmdFbmFibGVkPW4uem9vbWluZ0VuYWJsZWQseC51c2VyWm9vbWluZ0VuYWJsZWQ9bi51c2VyWm9vbWluZ0VuYWJsZWQseC56b29tPW4uem9vbSx4Lm1pblpvb209bi5taW5ab29tLHgubWF4Wm9vbT1uLm1heFpvb20seC5wYW5uaW5nRW5hYmxlZD1uLnBhbm5pbmdFbmFibGVkLHgudXNlclBhbm5pbmdFbmFibGVkPW4udXNlclBhbm5pbmdFbmFibGVkLHgucGFuPVpjKG4ucGFuKSx4LmJveFNlbGVjdGlvbkVuYWJsZWQ9bi5ib3hTZWxlY3Rpb25FbmFibGVkLHgucmVuZGVyZXI9WmMoYi5yZW5kZXJlcikseC5oaWRlRWRnZXNPblZpZXdwb3J0PWIuaGlkZUVkZ2VzT25WaWV3cG9ydCx4LnRleHR1cmVPblZpZXdwb3J0PWIudGV4dHVyZU9uVmlld3BvcnQseC53aGVlbFNlbnNpdGl2aXR5PWIud2hlZWxTZW5zaXRpdml0eSx4Lm1vdGlvbkJsdXI9Yi5tb3Rpb25CbHVyLHgubXVsdGlDbGlja0RlYm91bmNlVGltZT1iLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUseH19LCJqc29uIil9KTtNNi4kaWQ9TTYuZ2V0RWxlbWVudEJ5SWQ7W21KZSxiSmUscWdlLFdQLFQ2LFRKZSxZUCxrNixTSmUsSjAsaGJdLmZvckVhY2goZnVuY3Rpb24odCl7aXIoTTYsdCl9KTtBSmU9e2ZpdDohMCxkaXJlY3RlZDohMSxwYWRkaW5nOjMwLGNpcmNsZTohMSxncmlkOiExLHNwYWNpbmdGYWN0b3I6MS43NSxib3VuZGluZ0JveDp2b2lkIDAsYXZvaWRPdmVybGFwOiEwLG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMSxyb290czp2b2lkIDAsZGVwdGhTb3J0OnZvaWQgMCxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6byhmdW5jdGlvbihlLHIpe3JldHVybiEwfSwiYW5pbWF0ZUZpbHRlciIpLHJlYWR5OnZvaWQgMCxzdG9wOnZvaWQgMCx0cmFuc2Zvcm06byhmdW5jdGlvbihlLHIpe3JldHVybiByfSwidHJhbnNmb3JtIil9LF9KZT17bWF4aW1hbDohMSxhY3ljbGljOiExfSxmMT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNjcmF0Y2goImJyZWFkdGhmaXJzdCIpfSwiZ2V0SW5mbyIpLHdtZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIGUuc2NyYXRjaCgiYnJlYWR0aGZpcnN0IixyKX0sInNldEluZm8iKTtvKFhnZSwiQnJlYWR0aEZpcnN0TGF5b3V0Iik7WGdlLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsZT10LHI9dC5jeSxuPWUuZWxlcyxpPW4ubm9kZXMoKS5maWx0ZXIoZnVuY3Rpb24oY2Upe3JldHVybiFjZS5pc1BhcmVudCgpfSksYT1uLHM9ZS5kaXJlY3RlZCxsPWUuYWN5Y2xpY3x8ZS5tYXhpbWFsfHxlLm1heGltYWxBZGp1c3RtZW50cz4wLHU9S3MoZS5ib3VuZGluZ0JveD9lLmJvdW5kaW5nQm94Ont4MTowLHkxOjAsdzpyLndpZHRoKCksaDpyLmhlaWdodCgpfSksaDtpZih3byhlLnJvb3RzKSloPWUucm9vdHM7ZWxzZSBpZihrbihlLnJvb3RzKSl7Zm9yKHZhciBmPVtdLGQ9MDtkPGUucm9vdHMubGVuZ3RoO2QrKyl7dmFyIHA9ZS5yb290c1tkXSxtPXIuZ2V0RWxlbWVudEJ5SWQocCk7Zi5wdXNoKG0pfWg9ci5jb2xsZWN0aW9uKGYpfWVsc2UgaWYoWnQoZS5yb290cykpaD1yLiQoZS5yb290cyk7ZWxzZSBpZihzKWg9aS5yb290cygpO2Vsc2V7dmFyIGc9bi5jb21wb25lbnRzKCk7aD1yLmNvbGxlY3Rpb24oKTtmb3IodmFyIHk9byhmdW5jdGlvbih0ZSl7dmFyIE5lPWdbdGVdLHNlPU5lLm1heERlZ3JlZSghMSksa2U9TmUuZmlsdGVyKGZ1bmN0aW9uKFJlKXtyZXR1cm4gUmUuZGVncmVlKCExKT09PXNlfSk7aD1oLmFkZChrZSl9LCJfbG9vcCIpLHY9MDt2PGcubGVuZ3RoO3YrKyl5KHYpfXZhciB4PVtdLGI9e30sdz1vKGZ1bmN0aW9uKHRlLE5lKXt4W05lXT09bnVsbCYmKHhbTmVdPVtdKTt2YXIgc2U9eFtOZV0ubGVuZ3RoO3hbTmVdLnB1c2godGUpLHdtZSh0ZSx7aW5kZXg6c2UsZGVwdGg6TmV9KX0sImFkZFRvRGVwdGgiKSxfPW8oZnVuY3Rpb24odGUsTmUpe3ZhciBzZT1mMSh0ZSksa2U9c2UuZGVwdGgsUmU9c2UuaW5kZXg7eFtrZV1bUmVdPW51bGwsdyh0ZSxOZSl9LCJjaGFuZ2VEZXB0aCIpO2EuYmZzKHtyb290czpoLGRpcmVjdGVkOmUuZGlyZWN0ZWQsdmlzaXQ6byhmdW5jdGlvbih0ZSxOZSxzZSxrZSxSZSl7dmFyIENlPXRlWzBdLFBlPUNlLmlkKCk7dyhDZSxSZSksYltQZV09ITB9LCJ2aXNpdCIpfSk7Zm9yKHZhciBUPVtdLEU9MDtFPGkubGVuZ3RoO0UrKyl7dmFyIEw9aVtFXTtiW0wuaWQoKV18fFQucHVzaChMKX12YXIgUz1vKGZ1bmN0aW9uKHRlKXtmb3IodmFyIE5lPXhbdGVdLHNlPTA7c2U8TmUubGVuZ3RoO3NlKyspe3ZhciBrZT1OZVtzZV07aWYoa2U9PW51bGwpe05lLnNwbGljZShzZSwxKSxzZS0tO2NvbnRpbnVlfXdtZShrZSx7ZGVwdGg6dGUsaW5kZXg6c2V9KX19LCJhc3NpZ25EZXB0aHNBdCIpLEE9byhmdW5jdGlvbigpe2Zvcih2YXIgdGU9MDt0ZTx4Lmxlbmd0aDt0ZSsrKVModGUpfSwiYXNzaWduRGVwdGhzIiksST1vKGZ1bmN0aW9uKHRlLE5lKXtmb3IodmFyIHNlPWYxKHRlKSxrZT10ZS5pbmNvbWVycygpLmZpbHRlcihmdW5jdGlvbihYKXtyZXR1cm4gWC5pc05vZGUoKSYmbi5oYXMoWCl9KSxSZT0tMSxDZT10ZS5pZCgpLFBlPTA7UGU8a2UubGVuZ3RoO1BlKyspe3ZhciBJZT1rZVtQZV0sJGU9ZjEoSWUpO1JlPU1hdGgubWF4KFJlLCRlLmRlcHRoKX1pZihzZS5kZXB0aDw9UmUpe2lmKCFlLmFjeWNsaWMmJk5lW0NlXSlyZXR1cm4gbnVsbDt2YXIgeWU9UmUrMTtyZXR1cm4gXyh0ZSx5ZSksTmVbQ2VdPXllLCEwfXJldHVybiExfSwiYWRqdXN0TWF4aW1hbGx5Iik7aWYocyYmbCl7dmFyIEQ9W10saz17fSxSPW8oZnVuY3Rpb24odGUpe3JldHVybiBELnB1c2godGUpfSwiZW5xdWV1ZSIpLEM9byhmdW5jdGlvbigpe3JldHVybiBELnNoaWZ0KCl9LCJkZXF1ZXVlIik7Zm9yKGkuZm9yRWFjaChmdW5jdGlvbihjZSl7cmV0dXJuIEQucHVzaChjZSl9KTtELmxlbmd0aD4wOyl7dmFyIE89QygpLE49SShPLGspO2lmKE4pTy5vdXRnb2VycygpLmZpbHRlcihmdW5jdGlvbihjZSl7cmV0dXJuIGNlLmlzTm9kZSgpJiZuLmhhcyhjZSl9KS5mb3JFYWNoKFIpO2Vsc2UgaWYoTj09PW51bGwpe29uKCJEZXRlY3RlZCBkb3VibGUgbWF4aW1hbCBzaGlmdCBmb3Igbm9kZSBgIitPLmlkKCkrImAuICBCYWlsaW5nIG1heGltYWwgYWRqdXN0bWVudCBkdWUgdG8gY3ljbGUuICBVc2UgYG9wdGlvbnMubWF4aW1hbDogdHJ1ZWAgb25seSBvbiBEQUdzLiIpO2JyZWFrfX19QSgpO3ZhciBQPTA7aWYoZS5hdm9pZE92ZXJsYXApZm9yKHZhciBGPTA7RjxpLmxlbmd0aDtGKyspe3ZhciBCPWlbRl0sRz1CLmxheW91dERpbWVuc2lvbnMoZSksej1HLncsVz1HLmg7UD1NYXRoLm1heChQLHosVyl9dmFyIFo9e30saj1vKGZ1bmN0aW9uKHRlKXtpZihaW3RlLmlkKCldKXJldHVybiBaW3RlLmlkKCldO2Zvcih2YXIgTmU9ZjEodGUpLmRlcHRoLHNlPXRlLm5laWdoYm9yaG9vZCgpLGtlPTAsUmU9MCxDZT0wO0NlPHNlLmxlbmd0aDtDZSsrKXt2YXIgUGU9c2VbQ2VdO2lmKCEoUGUuaXNFZGdlKCl8fFBlLmlzUGFyZW50KCl8fCFpLmhhcyhQZSkpKXt2YXIgSWU9ZjEoUGUpO2lmKEllIT1udWxsKXt2YXIgJGU9SWUuaW5kZXgseWU9SWUuZGVwdGg7aWYoISgkZT09bnVsbHx8eWU9PW51bGwpKXt2YXIgWD14W3llXS5sZW5ndGg7eWU8TmUmJihrZSs9JGUvWCxSZSsrKX19fX1yZXR1cm4gUmU9TWF0aC5tYXgoMSxSZSksa2U9a2UvUmUsUmU9PT0wJiYoa2U9MCksWlt0ZS5pZCgpXT1rZSxrZX0sImdldFdlaWdodGVkUGVyY2VudCIpLG9lPW8oZnVuY3Rpb24odGUsTmUpe3ZhciBzZT1qKHRlKSxrZT1qKE5lKSxSZT1zZS1rZTtyZXR1cm4gUmU9PT0wP1htZSh0ZS5pZCgpLE5lLmlkKCkpOlJlfSwic29ydEZuIik7ZS5kZXB0aFNvcnQhPT12b2lkIDAmJihvZT1lLmRlcHRoU29ydCk7Zm9yKHZhciBLPTA7Szx4Lmxlbmd0aDtLKyspeFtLXS5zb3J0KG9lKSxTKEspO2Zvcih2YXIgZWU9W10sSj0wO0o8VC5sZW5ndGg7SisrKWVlLnB1c2goVFtKXSk7eC51bnNoaWZ0KGVlKSxBKCk7Zm9yKHZhciBIPTAscT0wO3E8eC5sZW5ndGg7cSsrKUg9TWF0aC5tYXgoeFtxXS5sZW5ndGgsSCk7dmFyIFE9e3g6dS54MSt1LncvMix5OnUueDErdS5oLzJ9LGFlPXgucmVkdWNlKGZ1bmN0aW9uKGNlLHRlKXtyZXR1cm4gTWF0aC5tYXgoY2UsdGUubGVuZ3RoKX0sMCksdWU9byhmdW5jdGlvbih0ZSl7dmFyIE5lPWYxKHRlKSxzZT1OZS5kZXB0aCxrZT1OZS5pbmRleCxSZT14W3NlXS5sZW5ndGgsQ2U9TWF0aC5tYXgodS53LygoZS5ncmlkP2FlOlJlKSsxKSxQKSxQZT1NYXRoLm1heCh1LmgvKHgubGVuZ3RoKzEpLFApLEllPU1hdGgubWluKHUudy8yL3gubGVuZ3RoLHUuaC8yL3gubGVuZ3RoKTtpZihJZT1NYXRoLm1heChJZSxQKSxlLmNpcmNsZSl7dmFyIHllPUllKnNlK0llLSh4Lmxlbmd0aD4wJiZ4WzBdLmxlbmd0aDw9Mz9JZS8yOjApLFg9MipNYXRoLlBJL3hbc2VdLmxlbmd0aCprZTtyZXR1cm4gc2U9PT0wJiZ4WzBdLmxlbmd0aD09PTEmJih5ZT0xKSx7eDpRLngreWUqTWF0aC5jb3MoWCkseTpRLnkreWUqTWF0aC5zaW4oWCl9fWVsc2V7dmFyICRlPXt4OlEueCsoa2UrMS0oUmUrMSkvMikqQ2UseTooc2UrMSkqUGV9O3JldHVybiAkZX19LCJnZXRQb3NpdGlvbiIpO3JldHVybiBuLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsZSx1ZSksdGhpc307TEplPXtmaXQ6ITAscGFkZGluZzozMCxib3VuZGluZ0JveDp2b2lkIDAsYXZvaWRPdmVybGFwOiEwLG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMSxzcGFjaW5nRmFjdG9yOnZvaWQgMCxyYWRpdXM6dm9pZCAwLHN0YXJ0QW5nbGU6My8yKk1hdGguUEksc3dlZXA6dm9pZCAwLGNsb2Nrd2lzZTohMCxzb3J0OnZvaWQgMCxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6byhmdW5jdGlvbihlLHIpe3JldHVybiEwfSwiYW5pbWF0ZUZpbHRlciIpLHJlYWR5OnZvaWQgMCxzdG9wOnZvaWQgMCx0cmFuc2Zvcm06byhmdW5jdGlvbihlLHIpe3JldHVybiByfSwidHJhbnNmb3JtIil9O28oamdlLCJDaXJjbGVMYXlvdXQiKTtqZ2UucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucyxlPXQscj10LmN5LG49ZS5lbGVzLGk9ZS5jb3VudGVyY2xvY2t3aXNlIT09dm9pZCAwPyFlLmNvdW50ZXJjbG9ja3dpc2U6ZS5jbG9ja3dpc2UsYT1uLm5vZGVzKCkubm90KCI6cGFyZW50Iik7ZS5zb3J0JiYoYT1hLnNvcnQoZS5zb3J0KSk7Zm9yKHZhciBzPUtzKGUuYm91bmRpbmdCb3g/ZS5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6ci53aWR0aCgpLGg6ci5oZWlnaHQoKX0pLGw9e3g6cy54MStzLncvMix5OnMueTErcy5oLzJ9LHU9ZS5zd2VlcD09PXZvaWQgMD8yKk1hdGguUEktMipNYXRoLlBJL2EubGVuZ3RoOmUuc3dlZXAsaD11L01hdGgubWF4KDEsYS5sZW5ndGgtMSksZixkPTAscD0wO3A8YS5sZW5ndGg7cCsrKXt2YXIgbT1hW3BdLGc9bS5sYXlvdXREaW1lbnNpb25zKGUpLHk9Zy53LHY9Zy5oO2Q9TWF0aC5tYXgoZCx5LHYpfWlmKHh0KGUucmFkaXVzKT9mPWUucmFkaXVzOmEubGVuZ3RoPD0xP2Y9MDpmPU1hdGgubWluKHMuaCxzLncpLzItZCxhLmxlbmd0aD4xJiZlLmF2b2lkT3ZlcmxhcCl7ZCo9MS43NTt2YXIgeD1NYXRoLmNvcyhoKS1NYXRoLmNvcygwKSxiPU1hdGguc2luKGgpLU1hdGguc2luKDApLHc9TWF0aC5zcXJ0KGQqZC8oeCp4K2IqYikpO2Y9TWF0aC5tYXgodyxmKX12YXIgXz1vKGZ1bmN0aW9uKEUsTCl7dmFyIFM9ZS5zdGFydEFuZ2xlK0wqaCooaT8xOi0xKSxBPWYqTWF0aC5jb3MoUyksST1mKk1hdGguc2luKFMpLEQ9e3g6bC54K0EseTpsLnkrSX07cmV0dXJuIER9LCJnZXRQb3MiKTtyZXR1cm4gbi5ub2RlcygpLmxheW91dFBvc2l0aW9ucyh0aGlzLGUsXyksdGhpc307REplPXtmaXQ6ITAscGFkZGluZzozMCxzdGFydEFuZ2xlOjMvMipNYXRoLlBJLHN3ZWVwOnZvaWQgMCxjbG9ja3dpc2U6ITAsZXF1aWRpc3RhbnQ6ITEsbWluTm9kZVNwYWNpbmc6MTAsYm91bmRpbmdCb3g6dm9pZCAwLGF2b2lkT3ZlcmxhcDohMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEsaGVpZ2h0OnZvaWQgMCx3aWR0aDp2b2lkIDAsc3BhY2luZ0ZhY3Rvcjp2b2lkIDAsY29uY2VudHJpYzpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRlZ3JlZSgpfSwiY29uY2VudHJpYyIpLGxldmVsV2lkdGg6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXhEZWdyZWUoKS80fSwibGV2ZWxXaWR0aCIpLGFuaW1hdGU6ITEsYW5pbWF0aW9uRHVyYXRpb246NTAwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpvKGZ1bmN0aW9uKGUscil7cmV0dXJuITB9LCJhbmltYXRlRmlsdGVyIikscmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIHJ9LCJ0cmFuc2Zvcm0iKX07byhLZ2UsIkNvbmNlbnRyaWNMYXlvdXQiKTtLZ2UucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLm9wdGlvbnMsZT10LHI9ZS5jb3VudGVyY2xvY2t3aXNlIT09dm9pZCAwPyFlLmNvdW50ZXJjbG9ja3dpc2U6ZS5jbG9ja3dpc2Usbj10LmN5LGk9ZS5lbGVzLGE9aS5ub2RlcygpLm5vdCgiOnBhcmVudCIpLHM9S3MoZS5ib3VuZGluZ0JveD9lLmJvdW5kaW5nQm94Ont4MTowLHkxOjAsdzpuLndpZHRoKCksaDpuLmhlaWdodCgpfSksbD17eDpzLngxK3Mudy8yLHk6cy55MStzLmgvMn0sdT1bXSxoPTAsZj0wO2Y8YS5sZW5ndGg7ZisrKXt2YXIgZD1hW2ZdLHA9dm9pZCAwO3A9ZS5jb25jZW50cmljKGQpLHUucHVzaCh7dmFsdWU6cCxub2RlOmR9KSxkLl9wcml2YXRlLnNjcmF0Y2guY29uY2VudHJpYz1wfWEudXBkYXRlU3R5bGUoKTtmb3IodmFyIG09MDttPGEubGVuZ3RoO20rKyl7dmFyIGc9YVttXSx5PWcubGF5b3V0RGltZW5zaW9ucyhlKTtoPU1hdGgubWF4KGgseS53LHkuaCl9dS5zb3J0KGZ1bmN0aW9uKGNlLHRlKXtyZXR1cm4gdGUudmFsdWUtY2UudmFsdWV9KTtmb3IodmFyIHY9ZS5sZXZlbFdpZHRoKGEpLHg9W1tdXSxiPXhbMF0sdz0wO3c8dS5sZW5ndGg7dysrKXt2YXIgXz11W3ddO2lmKGIubGVuZ3RoPjApe3ZhciBUPU1hdGguYWJzKGJbMF0udmFsdWUtXy52YWx1ZSk7VD49diYmKGI9W10seC5wdXNoKGIpKX1iLnB1c2goXyl9dmFyIEU9aCtlLm1pbk5vZGVTcGFjaW5nO2lmKCFlLmF2b2lkT3ZlcmxhcCl7dmFyIEw9eC5sZW5ndGg+MCYmeFswXS5sZW5ndGg+MSxTPU1hdGgubWluKHMudyxzLmgpLzItRSxBPVMvKHgubGVuZ3RoK0w/MTowKTtFPU1hdGgubWluKEUsQSl9Zm9yKHZhciBJPTAsRD0wO0Q8eC5sZW5ndGg7RCsrKXt2YXIgaz14W0RdLFI9ZS5zd2VlcD09PXZvaWQgMD8yKk1hdGguUEktMipNYXRoLlBJL2subGVuZ3RoOmUuc3dlZXAsQz1rLmRUaGV0YT1SL01hdGgubWF4KDEsay5sZW5ndGgtMSk7aWYoay5sZW5ndGg+MSYmZS5hdm9pZE92ZXJsYXApe3ZhciBPPU1hdGguY29zKEMpLU1hdGguY29zKDApLE49TWF0aC5zaW4oQyktTWF0aC5zaW4oMCksUD1NYXRoLnNxcnQoRSpFLyhPKk8rTipOKSk7ST1NYXRoLm1heChQLEkpfWsucj1JLEkrPUV9aWYoZS5lcXVpZGlzdGFudCl7Zm9yKHZhciBGPTAsQj0wLEc9MDtHPHgubGVuZ3RoO0crKyl7dmFyIHo9eFtHXSxXPXouci1CO0Y9TWF0aC5tYXgoRixXKX1CPTA7Zm9yKHZhciBaPTA7Wjx4Lmxlbmd0aDtaKyspe3ZhciBqPXhbWl07Wj09PTAmJihCPWouciksai5yPUIsQis9Rn19Zm9yKHZhciBvZT17fSxLPTA7Szx4Lmxlbmd0aDtLKyspZm9yKHZhciBlZT14W0tdLEo9ZWUuZFRoZXRhLEg9ZWUucixxPTA7cTxlZS5sZW5ndGg7cSsrKXt2YXIgUT1lZVtxXSxhZT1lLnN0YXJ0QW5nbGUrKHI/MTotMSkqSipxLHVlPXt4OmwueCtIKk1hdGguY29zKGFlKSx5OmwueStIKk1hdGguc2luKGFlKX07b2VbUS5ub2RlLmlkKCldPXVlfXJldHVybiBpLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsZSxmdW5jdGlvbihjZSl7dmFyIHRlPWNlLmlkKCk7cmV0dXJuIG9lW3RlXX0pLHRoaXN9O05KZT17cmVhZHk6byhmdW5jdGlvbigpe30sInJlYWR5Iiksc3RvcDpvKGZ1bmN0aW9uKCl7fSwic3RvcCIpLGFuaW1hdGU6ITAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRpb25EdXJhdGlvbjp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpvKGZ1bmN0aW9uKGUscil7cmV0dXJuITB9LCJhbmltYXRlRmlsdGVyIiksYW5pbWF0aW9uVGhyZXNob2xkOjI1MCxyZWZyZXNoOjIwLGZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEscmFuZG9taXplOiExLGNvbXBvbmVudFNwYWNpbmc6NDAsbm9kZVJlcHVsc2lvbjpvKGZ1bmN0aW9uKGUpe3JldHVybiAyMDQ4fSwibm9kZVJlcHVsc2lvbiIpLG5vZGVPdmVybGFwOjQsaWRlYWxFZGdlTGVuZ3RoOm8oZnVuY3Rpb24oZSl7cmV0dXJuIDMyfSwiaWRlYWxFZGdlTGVuZ3RoIiksZWRnZUVsYXN0aWNpdHk6byhmdW5jdGlvbihlKXtyZXR1cm4gMzJ9LCJlZGdlRWxhc3RpY2l0eSIpLG5lc3RpbmdGYWN0b3I6MS4yLGdyYXZpdHk6MSxudW1JdGVyOjFlMyxpbml0aWFsVGVtcDoxZTMsY29vbGluZ0ZhY3RvcjouOTksbWluVGVtcDoxfTtvKFo2LCJDb3NlTGF5b3V0Iik7WjYucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucyxlPXQuY3kscj10aGlzO3Iuc3RvcHBlZD0hMSwodC5hbmltYXRlPT09ITB8fHQuYW5pbWF0ZT09PSExKSYmci5lbWl0KHt0eXBlOiJsYXlvdXRzdGFydCIsbGF5b3V0OnJ9KSx0LmRlYnVnPT09ITA/T1A9ITA6T1A9ITE7dmFyIG49UkplKGUscix0KTtPUCYmT0plKG4pLHQucmFuZG9taXplJiZQSmUobik7dmFyIGk9aWgoKSxhPW8oZnVuY3Rpb24oKXtCSmUobixlLHQpLHQuZml0PT09ITAmJmUuZml0KHQucGFkZGluZyl9LCJyZWZyZXNoIikscz1vKGZ1bmN0aW9uKHApe3JldHVybiEoci5zdG9wcGVkfHxwPj10Lm51bUl0ZXJ8fChGSmUobix0KSxuLnRlbXBlcmF0dXJlPW4udGVtcGVyYXR1cmUqdC5jb29saW5nRmFjdG9yLG4udGVtcGVyYXR1cmU8dC5taW5UZW1wKSl9LCJtYWluTG9vcCIpLGw9byhmdW5jdGlvbigpe2lmKHQuYW5pbWF0ZT09PSEwfHx0LmFuaW1hdGU9PT0hMSlhKCksci5vbmUoImxheW91dHN0b3AiLHQuc3RvcCksci5lbWl0KHt0eXBlOiJsYXlvdXRzdG9wIixsYXlvdXQ6cn0pO2Vsc2V7dmFyIHA9dC5lbGVzLm5vZGVzKCksbT1RZ2Uobix0LHApO3AubGF5b3V0UG9zaXRpb25zKHIsdCxtKX19LCJkb25lIiksdT0wLGg9ITA7aWYodC5hbmltYXRlPT09ITApe3ZhciBmPW8oZnVuY3Rpb24gZCgpe2Zvcih2YXIgcD0wO2gmJnA8dC5yZWZyZXNoOyloPXModSksdSsrLHArKztpZighaClrbWUobix0KSxsKCk7ZWxzZXt2YXIgbT1paCgpO20taT49dC5hbmltYXRpb25UaHJlc2hvbGQmJmEoKSxBNihkKX19LCJmcmFtZSIpO2YoKX1lbHNle2Zvcig7aDspaD1zKHUpLHUrKztrbWUobix0KSxsKCl9cmV0dXJuIHRoaXN9O1o2LnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RvcHBlZD0hMCx0aGlzLnRocmVhZCYmdGhpcy50aHJlYWQuc3RvcCgpLHRoaXMuZW1pdCgibGF5b3V0c3RvcCIpLHRoaXN9O1o2LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGhyZWFkJiZ0aGlzLnRocmVhZC5zdG9wKCksdGhpc307UkplPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1uLmVsZXMuZWRnZXMoKSxhPW4uZWxlcy5ub2RlcygpLHM9S3Mobi5ib3VuZGluZ0JveD9uLmJvdW5kaW5nQm94Ont4MTowLHkxOjAsdzplLndpZHRoKCksaDplLmhlaWdodCgpfSksbD17aXNDb21wb3VuZDplLmhhc0NvbXBvdW5kTm9kZXMoKSxsYXlvdXROb2RlczpbXSxpZFRvSW5kZXg6e30sbm9kZVNpemU6YS5zaXplKCksZ3JhcGhTZXQ6W10saW5kZXhUb0dyYXBoOltdLGxheW91dEVkZ2VzOltdLGVkZ2VTaXplOmkuc2l6ZSgpLHRlbXBlcmF0dXJlOm4uaW5pdGlhbFRlbXAsY2xpZW50V2lkdGg6cy53LGNsaWVudEhlaWdodDpzLmgsYm91bmRpbmdCb3g6c30sdT1uLmVsZXMuY29tcG9uZW50cygpLGg9e30sZj0wO2Y8dS5sZW5ndGg7ZisrKWZvcih2YXIgZD11W2ZdLHA9MDtwPGQubGVuZ3RoO3ArKyl7dmFyIG09ZFtwXTtoW20uaWQoKV09Zn1mb3IodmFyIGY9MDtmPGwubm9kZVNpemU7ZisrKXt2YXIgZz1hW2ZdLHk9Zy5sYXlvdXREaW1lbnNpb25zKG4pLHY9e307di5pc0xvY2tlZD1nLmxvY2tlZCgpLHYuaWQ9Zy5kYXRhKCJpZCIpLHYucGFyZW50SWQ9Zy5kYXRhKCJwYXJlbnQiKSx2LmNtcHRJZD1oW2cuaWQoKV0sdi5jaGlsZHJlbj1bXSx2LnBvc2l0aW9uWD1nLnBvc2l0aW9uKCJ4Iiksdi5wb3NpdGlvblk9Zy5wb3NpdGlvbigieSIpLHYub2Zmc2V0WD0wLHYub2Zmc2V0WT0wLHYuaGVpZ2h0PXkudyx2LndpZHRoPXkuaCx2Lm1heFg9di5wb3NpdGlvblgrdi53aWR0aC8yLHYubWluWD12LnBvc2l0aW9uWC12LndpZHRoLzIsdi5tYXhZPXYucG9zaXRpb25ZK3YuaGVpZ2h0LzIsdi5taW5ZPXYucG9zaXRpb25ZLXYuaGVpZ2h0LzIsdi5wYWRMZWZ0PXBhcnNlRmxvYXQoZy5zdHlsZSgicGFkZGluZyIpKSx2LnBhZFJpZ2h0PXBhcnNlRmxvYXQoZy5zdHlsZSgicGFkZGluZyIpKSx2LnBhZFRvcD1wYXJzZUZsb2F0KGcuc3R5bGUoInBhZGRpbmciKSksdi5wYWRCb3R0b209cGFyc2VGbG9hdChnLnN0eWxlKCJwYWRkaW5nIikpLHYubm9kZVJlcHVsc2lvbj1uaShuLm5vZGVSZXB1bHNpb24pP24ubm9kZVJlcHVsc2lvbihnKTpuLm5vZGVSZXB1bHNpb24sbC5sYXlvdXROb2Rlcy5wdXNoKHYpLGwuaWRUb0luZGV4W3YuaWRdPWZ9Zm9yKHZhciB4PVtdLGI9MCx3PS0xLF89W10sZj0wO2Y8bC5ub2RlU2l6ZTtmKyspe3ZhciBnPWwubGF5b3V0Tm9kZXNbZl0sVD1nLnBhcmVudElkO1QhPW51bGw/bC5sYXlvdXROb2Rlc1tsLmlkVG9JbmRleFtUXV0uY2hpbGRyZW4ucHVzaChnLmlkKTooeFsrK3ddPWcuaWQsXy5wdXNoKGcuaWQpKX1mb3IobC5ncmFwaFNldC5wdXNoKF8pO2I8PXc7KXt2YXIgRT14W2IrK10sTD1sLmlkVG9JbmRleFtFXSxtPWwubGF5b3V0Tm9kZXNbTF0sUz1tLmNoaWxkcmVuO2lmKFMubGVuZ3RoPjApe2wuZ3JhcGhTZXQucHVzaChTKTtmb3IodmFyIGY9MDtmPFMubGVuZ3RoO2YrKyl4Wysrd109U1tmXX19Zm9yKHZhciBmPTA7ZjxsLmdyYXBoU2V0Lmxlbmd0aDtmKyspZm9yKHZhciBBPWwuZ3JhcGhTZXRbZl0scD0wO3A8QS5sZW5ndGg7cCsrKXt2YXIgST1sLmlkVG9JbmRleFtBW3BdXTtsLmluZGV4VG9HcmFwaFtJXT1mfWZvcih2YXIgZj0wO2Y8bC5lZGdlU2l6ZTtmKyspe3ZhciBEPWlbZl0saz17fTtrLmlkPUQuZGF0YSgiaWQiKSxrLnNvdXJjZUlkPUQuZGF0YSgic291cmNlIiksay50YXJnZXRJZD1ELmRhdGEoInRhcmdldCIpO3ZhciBSPW5pKG4uaWRlYWxFZGdlTGVuZ3RoKT9uLmlkZWFsRWRnZUxlbmd0aChEKTpuLmlkZWFsRWRnZUxlbmd0aCxDPW5pKG4uZWRnZUVsYXN0aWNpdHkpP24uZWRnZUVsYXN0aWNpdHkoRCk6bi5lZGdlRWxhc3RpY2l0eSxPPWwuaWRUb0luZGV4W2suc291cmNlSWRdLE49bC5pZFRvSW5kZXhbay50YXJnZXRJZF0sUD1sLmluZGV4VG9HcmFwaFtPXSxGPWwuaW5kZXhUb0dyYXBoW05dO2lmKFAhPUYpe2Zvcih2YXIgQj1NSmUoay5zb3VyY2VJZCxrLnRhcmdldElkLGwpLEc9bC5ncmFwaFNldFtCXSx6PTAsdj1sLmxheW91dE5vZGVzW09dO0cuaW5kZXhPZih2LmlkKT09PS0xOyl2PWwubGF5b3V0Tm9kZXNbbC5pZFRvSW5kZXhbdi5wYXJlbnRJZF1dLHorKztmb3Iodj1sLmxheW91dE5vZGVzW05dO0cuaW5kZXhPZih2LmlkKT09PS0xOyl2PWwubGF5b3V0Tm9kZXNbbC5pZFRvSW5kZXhbdi5wYXJlbnRJZF1dLHorKztSKj16Km4ubmVzdGluZ0ZhY3Rvcn1rLmlkZWFsTGVuZ3RoPVIsay5lbGFzdGljaXR5PUMsbC5sYXlvdXRFZGdlcy5wdXNoKGspfXJldHVybiBsfSwiY3JlYXRlTGF5b3V0SW5mbyIpLE1KZT1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1JSmUoZSxyLDAsbik7cmV0dXJuIDI+aS5jb3VudD8wOmkuZ3JhcGh9LCJmaW5kTENBIiksSUplPW8oZnVuY3Rpb24gdChlLHIsbixpKXt2YXIgYT1pLmdyYXBoU2V0W25dO2lmKC0xPGEuaW5kZXhPZihlKSYmLTE8YS5pbmRleE9mKHIpKXJldHVybntjb3VudDoyLGdyYXBoOm59O2Zvcih2YXIgcz0wLGw9MDtsPGEubGVuZ3RoO2wrKyl7dmFyIHU9YVtsXSxoPWkuaWRUb0luZGV4W3VdLGY9aS5sYXlvdXROb2Rlc1toXS5jaGlsZHJlbjtpZihmLmxlbmd0aCE9PTApe3ZhciBkPWkuaW5kZXhUb0dyYXBoW2kuaWRUb0luZGV4W2ZbMF1dXSxwPXQoZSxyLGQsaSk7aWYocC5jb3VudCE9PTApaWYocC5jb3VudD09PTEpe2lmKHMrKyxzPT09MilicmVha31lbHNlIHJldHVybiBwfX1yZXR1cm57Y291bnQ6cyxncmFwaDpufX0sImZpbmRMQ0FfYXV4IiksUEplPW8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49ZS5jbGllbnRXaWR0aCxpPWUuY2xpZW50SGVpZ2h0LGE9MDthPGUubm9kZVNpemU7YSsrKXt2YXIgcz1lLmxheW91dE5vZGVzW2FdO3MuY2hpbGRyZW4ubGVuZ3RoPT09MCYmIXMuaXNMb2NrZWQmJihzLnBvc2l0aW9uWD1NYXRoLnJhbmRvbSgpKm4scy5wb3NpdGlvblk9TWF0aC5yYW5kb20oKSppKX19LCJyYW5kb21pemVQb3NpdGlvbnMiKSxRZ2U9byhmdW5jdGlvbihlLHIsbil7dmFyIGk9ZS5ib3VuZGluZ0JveCxhPXt4MToxLzAseDI6LTEvMCx5MToxLzAseTI6LTEvMH07cmV0dXJuIHIuYm91bmRpbmdCb3gmJihuLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGw9ZS5sYXlvdXROb2Rlc1tlLmlkVG9JbmRleFtzLmRhdGEoImlkIildXTthLngxPU1hdGgubWluKGEueDEsbC5wb3NpdGlvblgpLGEueDI9TWF0aC5tYXgoYS54MixsLnBvc2l0aW9uWCksYS55MT1NYXRoLm1pbihhLnkxLGwucG9zaXRpb25ZKSxhLnkyPU1hdGgubWF4KGEueTIsbC5wb3NpdGlvblkpfSksYS53PWEueDItYS54MSxhLmg9YS55Mi1hLnkxKSxmdW5jdGlvbihzLGwpe3ZhciB1PWUubGF5b3V0Tm9kZXNbZS5pZFRvSW5kZXhbcy5kYXRhKCJpZCIpXV07aWYoci5ib3VuZGluZ0JveCl7dmFyIGg9KHUucG9zaXRpb25YLWEueDEpL2EudyxmPSh1LnBvc2l0aW9uWS1hLnkxKS9hLmg7cmV0dXJue3g6aS54MStoKmkudyx5OmkueTErZippLmh9fWVsc2UgcmV0dXJue3g6dS5wb3NpdGlvblgseTp1LnBvc2l0aW9uWX19fSwiZ2V0U2NhbGVJbkJvdW5kc0ZuIiksQkplPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPW4ubGF5b3V0LGE9bi5lbGVzLm5vZGVzKCkscz1RZ2UoZSxuLGEpO2EucG9zaXRpb25zKHMpLGUucmVhZHkhPT0hMCYmKGUucmVhZHk9ITAsaS5vbmUoImxheW91dHJlYWR5IixuLnJlYWR5KSxpLmVtaXQoe3R5cGU6ImxheW91dHJlYWR5IixsYXlvdXQ6dGhpc30pKX0sInJlZnJlc2hQb3NpdGlvbnMiKSxGSmU9byhmdW5jdGlvbihlLHIsbil7ekplKGUsciksVkplKGUpLFVKZShlLHIpLEhKZShlKSxXSmUoZSl9LCJzdGVwIiksekplPW8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MDtuPGUuZ3JhcGhTZXQubGVuZ3RoO24rKylmb3IodmFyIGk9ZS5ncmFwaFNldFtuXSxhPWkubGVuZ3RoLHM9MDtzPGE7cysrKWZvcih2YXIgbD1lLmxheW91dE5vZGVzW2UuaWRUb0luZGV4W2lbc11dXSx1PXMrMTt1PGE7dSsrKXt2YXIgaD1lLmxheW91dE5vZGVzW2UuaWRUb0luZGV4W2lbdV1dXTtHSmUobCxoLGUscil9fSwiY2FsY3VsYXRlTm9kZUZvcmNlcyIpLFRtZT1vKGZ1bmN0aW9uKGUpe3JldHVybi1lKzIqZSpNYXRoLnJhbmRvbSgpfSwicmFuZG9tRGlzdGFuY2UiKSxHSmU9byhmdW5jdGlvbihlLHIsbixpKXt2YXIgYT1lLmNtcHRJZCxzPXIuY21wdElkO2lmKCEoYSE9PXMmJiFuLmlzQ29tcG91bmQpKXt2YXIgbD1yLnBvc2l0aW9uWC1lLnBvc2l0aW9uWCx1PXIucG9zaXRpb25ZLWUucG9zaXRpb25ZLGg9MTtsPT09MCYmdT09PTAmJihsPVRtZShoKSx1PVRtZShoKSk7dmFyIGY9JEplKGUscixsLHUpO2lmKGY+MCl2YXIgZD1pLm5vZGVPdmVybGFwKmYscD1NYXRoLnNxcnQobCpsK3UqdSksbT1kKmwvcCxnPWQqdS9wO2Vsc2UgdmFyIHk9STYoZSxsLHUpLHY9STYociwtMSpsLC0xKnUpLHg9di54LXkueCxiPXYueS15Lnksdz14KngrYipiLHA9TWF0aC5zcXJ0KHcpLGQ9KGUubm9kZVJlcHVsc2lvbityLm5vZGVSZXB1bHNpb24pL3csbT1kKngvcCxnPWQqYi9wO2UuaXNMb2NrZWR8fChlLm9mZnNldFgtPW0sZS5vZmZzZXRZLT1nKSxyLmlzTG9ja2VkfHwoci5vZmZzZXRYKz1tLHIub2Zmc2V0WSs9Zyl9fSwibm9kZVJlcHVsc2lvbiIpLCRKZT1vKGZ1bmN0aW9uKGUscixuLGkpe2lmKG4+MCl2YXIgYT1lLm1heFgtci5taW5YO2Vsc2UgdmFyIGE9ci5tYXhYLWUubWluWDtpZihpPjApdmFyIHM9ZS5tYXhZLXIubWluWTtlbHNlIHZhciBzPXIubWF4WS1lLm1pblk7cmV0dXJuIGE+PTAmJnM+PTA/TWF0aC5zcXJ0KGEqYStzKnMpOjB9LCJub2Rlc092ZXJsYXAiKSxJNj1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1lLnBvc2l0aW9uWCxhPWUucG9zaXRpb25ZLHM9ZS5oZWlnaHR8fDEsbD1lLndpZHRofHwxLHU9bi9yLGg9cy9sLGY9e307cmV0dXJuIHI9PT0wJiYwPG58fHI9PT0wJiYwPm4/KGYueD1pLGYueT1hK3MvMixmKTowPHImJi0xKmg8PXUmJnU8PWg/KGYueD1pK2wvMixmLnk9YStsKm4vMi9yLGYpOjA+ciYmLTEqaDw9dSYmdTw9aD8oZi54PWktbC8yLGYueT1hLWwqbi8yL3IsZik6MDxuJiYodTw9LTEqaHx8dT49aCk/KGYueD1pK3Mqci8yL24sZi55PWErcy8yLGYpOigwPm4mJih1PD0tMSpofHx1Pj1oKSYmKGYueD1pLXMqci8yL24sZi55PWEtcy8yKSxmKX0sImZpbmRDbGlwcGluZ1BvaW50IiksVkplPW8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MDtuPGUuZWRnZVNpemU7bisrKXt2YXIgaT1lLmxheW91dEVkZ2VzW25dLGE9ZS5pZFRvSW5kZXhbaS5zb3VyY2VJZF0scz1lLmxheW91dE5vZGVzW2FdLGw9ZS5pZFRvSW5kZXhbaS50YXJnZXRJZF0sdT1lLmxheW91dE5vZGVzW2xdLGg9dS5wb3NpdGlvblgtcy5wb3NpdGlvblgsZj11LnBvc2l0aW9uWS1zLnBvc2l0aW9uWTtpZighKGg9PT0wJiZmPT09MCkpe3ZhciBkPUk2KHMsaCxmKSxwPUk2KHUsLTEqaCwtMSpmKSxtPXAueC1kLngsZz1wLnktZC55LHk9TWF0aC5zcXJ0KG0qbStnKmcpLHY9TWF0aC5wb3coaS5pZGVhbExlbmd0aC15LDIpL2kuZWxhc3RpY2l0eTtpZih5IT09MCl2YXIgeD12Km0veSxiPXYqZy95O2Vsc2UgdmFyIHg9MCxiPTA7cy5pc0xvY2tlZHx8KHMub2Zmc2V0WCs9eCxzLm9mZnNldFkrPWIpLHUuaXNMb2NrZWR8fCh1Lm9mZnNldFgtPXgsdS5vZmZzZXRZLT1iKX19fSwiY2FsY3VsYXRlRWRnZUZvcmNlcyIpLFVKZT1vKGZ1bmN0aW9uKGUscil7aWYoci5ncmF2aXR5IT09MClmb3IodmFyIG49MSxpPTA7aTxlLmdyYXBoU2V0Lmxlbmd0aDtpKyspe3ZhciBhPWUuZ3JhcGhTZXRbaV0scz1hLmxlbmd0aDtpZihpPT09MCl2YXIgbD1lLmNsaWVudEhlaWdodC8yLHU9ZS5jbGllbnRXaWR0aC8yO2Vsc2UgdmFyIGg9ZS5sYXlvdXROb2Rlc1tlLmlkVG9JbmRleFthWzBdXV0sZj1lLmxheW91dE5vZGVzW2UuaWRUb0luZGV4W2gucGFyZW50SWRdXSxsPWYucG9zaXRpb25YLHU9Zi5wb3NpdGlvblk7Zm9yKHZhciBkPTA7ZDxzO2QrKyl7dmFyIHA9ZS5sYXlvdXROb2Rlc1tlLmlkVG9JbmRleFthW2RdXV07aWYoIXAuaXNMb2NrZWQpe3ZhciBtPWwtcC5wb3NpdGlvblgsZz11LXAucG9zaXRpb25ZLHk9TWF0aC5zcXJ0KG0qbStnKmcpO2lmKHk+bil7dmFyIHY9ci5ncmF2aXR5Km0veSx4PXIuZ3Jhdml0eSpnL3k7cC5vZmZzZXRYKz12LHAub2Zmc2V0WSs9eH19fX19LCJjYWxjdWxhdGVHcmF2aXR5Rm9yY2VzIiksSEplPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1bXSxpPTAsYT0tMTtmb3Iobi5wdXNoLmFwcGx5KG4sZS5ncmFwaFNldFswXSksYSs9ZS5ncmFwaFNldFswXS5sZW5ndGg7aTw9YTspe3ZhciBzPW5baSsrXSxsPWUuaWRUb0luZGV4W3NdLHU9ZS5sYXlvdXROb2Rlc1tsXSxoPXUuY2hpbGRyZW47aWYoMDxoLmxlbmd0aCYmIXUuaXNMb2NrZWQpe2Zvcih2YXIgZj11Lm9mZnNldFgsZD11Lm9mZnNldFkscD0wO3A8aC5sZW5ndGg7cCsrKXt2YXIgbT1lLmxheW91dE5vZGVzW2UuaWRUb0luZGV4W2hbcF1dXTttLm9mZnNldFgrPWYsbS5vZmZzZXRZKz1kLG5bKythXT1oW3BdfXUub2Zmc2V0WD0wLHUub2Zmc2V0WT0wfX19LCJwcm9wYWdhdGVGb3JjZXMiKSxXSmU9byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0wO248ZS5ub2RlU2l6ZTtuKyspe3ZhciBpPWUubGF5b3V0Tm9kZXNbbl07MDxpLmNoaWxkcmVuLmxlbmd0aCYmKGkubWF4WD12b2lkIDAsaS5taW5YPXZvaWQgMCxpLm1heFk9dm9pZCAwLGkubWluWT12b2lkIDApfWZvcih2YXIgbj0wO248ZS5ub2RlU2l6ZTtuKyspe3ZhciBpPWUubGF5b3V0Tm9kZXNbbl07aWYoISgwPGkuY2hpbGRyZW4ubGVuZ3RofHxpLmlzTG9ja2VkKSl7dmFyIGE9WUplKGkub2Zmc2V0WCxpLm9mZnNldFksZS50ZW1wZXJhdHVyZSk7aS5wb3NpdGlvblgrPWEueCxpLnBvc2l0aW9uWSs9YS55LGkub2Zmc2V0WD0wLGkub2Zmc2V0WT0wLGkubWluWD1pLnBvc2l0aW9uWC1pLndpZHRoLGkubWF4WD1pLnBvc2l0aW9uWCtpLndpZHRoLGkubWluWT1pLnBvc2l0aW9uWS1pLmhlaWdodCxpLm1heFk9aS5wb3NpdGlvblkraS5oZWlnaHQscUplKGksZSl9fWZvcih2YXIgbj0wO248ZS5ub2RlU2l6ZTtuKyspe3ZhciBpPWUubGF5b3V0Tm9kZXNbbl07MDxpLmNoaWxkcmVuLmxlbmd0aCYmIWkuaXNMb2NrZWQmJihpLnBvc2l0aW9uWD0oaS5tYXhYK2kubWluWCkvMixpLnBvc2l0aW9uWT0oaS5tYXhZK2kubWluWSkvMixpLndpZHRoPWkubWF4WC1pLm1pblgsaS5oZWlnaHQ9aS5tYXhZLWkubWluWSl9fSwidXBkYXRlUG9zaXRpb25zIiksWUplPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPU1hdGguc3FydChlKmUrcipyKTtpZihpPm4pdmFyIGE9e3g6biplL2kseTpuKnIvaX07ZWxzZSB2YXIgYT17eDplLHk6cn07cmV0dXJuIGF9LCJsaW1pdEZvcmNlIikscUplPW8oZnVuY3Rpb24gdChlLHIpe3ZhciBuPWUucGFyZW50SWQ7aWYobiE9bnVsbCl7dmFyIGk9ci5sYXlvdXROb2Rlc1tyLmlkVG9JbmRleFtuXV0sYT0hMTtpZigoaS5tYXhYPT1udWxsfHxlLm1heFgraS5wYWRSaWdodD5pLm1heFgpJiYoaS5tYXhYPWUubWF4WCtpLnBhZFJpZ2h0LGE9ITApLChpLm1pblg9PW51bGx8fGUubWluWC1pLnBhZExlZnQ8aS5taW5YKSYmKGkubWluWD1lLm1pblgtaS5wYWRMZWZ0LGE9ITApLChpLm1heFk9PW51bGx8fGUubWF4WStpLnBhZEJvdHRvbT5pLm1heFkpJiYoaS5tYXhZPWUubWF4WStpLnBhZEJvdHRvbSxhPSEwKSwoaS5taW5ZPT1udWxsfHxlLm1pblktaS5wYWRUb3A8aS5taW5ZKSYmKGkubWluWT1lLm1pblktaS5wYWRUb3AsYT0hMCksYSlyZXR1cm4gdChpLHIpfX0sInVwZGF0ZUFuY2VzdHJ5Qm91bmRhcmllcyIpLGttZT1vKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPWUubGF5b3V0Tm9kZXMsaT1bXSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBzPW5bYV0sbD1zLmNtcHRJZCx1PWlbbF09aVtsXXx8W107dS5wdXNoKHMpfWZvcih2YXIgaD0wLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIGY9aVthXTtpZihmKXtmLngxPTEvMCxmLngyPS0xLzAsZi55MT0xLzAsZi55Mj0tMS8wO2Zvcih2YXIgZD0wO2Q8Zi5sZW5ndGg7ZCsrKXt2YXIgcD1mW2RdO2YueDE9TWF0aC5taW4oZi54MSxwLnBvc2l0aW9uWC1wLndpZHRoLzIpLGYueDI9TWF0aC5tYXgoZi54MixwLnBvc2l0aW9uWCtwLndpZHRoLzIpLGYueTE9TWF0aC5taW4oZi55MSxwLnBvc2l0aW9uWS1wLmhlaWdodC8yKSxmLnkyPU1hdGgubWF4KGYueTIscC5wb3NpdGlvblkrcC5oZWlnaHQvMil9Zi53PWYueDItZi54MSxmLmg9Zi55Mi1mLnkxLGgrPWYudypmLmh9fWkuc29ydChmdW5jdGlvbihiLHcpe3JldHVybiB3Lncqdy5oLWIudypiLmh9KTtmb3IodmFyIG09MCxnPTAseT0wLHY9MCx4PU1hdGguc3FydChoKSplLmNsaWVudFdpZHRoL2UuY2xpZW50SGVpZ2h0LGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIGY9aVthXTtpZihmKXtmb3IodmFyIGQ9MDtkPGYubGVuZ3RoO2QrKyl7dmFyIHA9ZltkXTtwLmlzTG9ja2VkfHwocC5wb3NpdGlvblgrPW0tZi54MSxwLnBvc2l0aW9uWSs9Zy1mLnkxKX1tKz1mLncrci5jb21wb25lbnRTcGFjaW5nLHkrPWYudytyLmNvbXBvbmVudFNwYWNpbmcsdj1NYXRoLm1heCh2LGYuaCkseT54JiYoZys9dityLmNvbXBvbmVudFNwYWNpbmcsbT0wLHk9MCx2PTApfX19LCJzZXBhcmF0ZUNvbXBvbmVudHMiKSxYSmU9e2ZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxhdm9pZE92ZXJsYXA6ITAsYXZvaWRPdmVybGFwUGFkZGluZzoxMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEsc3BhY2luZ0ZhY3Rvcjp2b2lkIDAsY29uZGVuc2U6ITEscm93czp2b2lkIDAsY29sczp2b2lkIDAscG9zaXRpb246byhmdW5jdGlvbihlKXt9LCJwb3NpdGlvbiIpLHNvcnQ6dm9pZCAwLGFuaW1hdGU6ITEsYW5pbWF0aW9uRHVyYXRpb246NTAwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpvKGZ1bmN0aW9uKGUscil7cmV0dXJuITB9LCJhbmltYXRlRmlsdGVyIikscmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIHJ9LCJ0cmFuc2Zvcm0iKX07byhaZ2UsIkdyaWRMYXlvdXQiKTtaZ2UucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucyxlPXQscj10LmN5LG49ZS5lbGVzLGk9bi5ub2RlcygpLm5vdCgiOnBhcmVudCIpO2Uuc29ydCYmKGk9aS5zb3J0KGUuc29ydCkpO3ZhciBhPUtzKGUuYm91bmRpbmdCb3g/ZS5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6ci53aWR0aCgpLGg6ci5oZWlnaHQoKX0pO2lmKGEuaD09PTB8fGEudz09PTApbi5ub2RlcygpLmxheW91dFBvc2l0aW9ucyh0aGlzLGUsZnVuY3Rpb24oWil7cmV0dXJue3g6YS54MSx5OmEueTF9fSk7ZWxzZXt2YXIgcz1pLnNpemUoKSxsPU1hdGguc3FydChzKmEuaC9hLncpLHU9TWF0aC5yb3VuZChsKSxoPU1hdGgucm91bmQoYS53L2EuaCpsKSxmPW8oZnVuY3Rpb24oail7aWYoaj09bnVsbClyZXR1cm4gTWF0aC5taW4odSxoKTt2YXIgb2U9TWF0aC5taW4odSxoKTtvZT09dT91PWo6aD1qfSwic21hbGwiKSxkPW8oZnVuY3Rpb24oail7aWYoaj09bnVsbClyZXR1cm4gTWF0aC5tYXgodSxoKTt2YXIgb2U9TWF0aC5tYXgodSxoKTtvZT09dT91PWo6aD1qfSwibGFyZ2UiKSxwPWUucm93cyxtPWUuY29scyE9bnVsbD9lLmNvbHM6ZS5jb2x1bW5zO2lmKHAhPW51bGwmJm0hPW51bGwpdT1wLGg9bTtlbHNlIGlmKHAhPW51bGwmJm09PW51bGwpdT1wLGg9TWF0aC5jZWlsKHMvdSk7ZWxzZSBpZihwPT1udWxsJiZtIT1udWxsKWg9bSx1PU1hdGguY2VpbChzL2gpO2Vsc2UgaWYoaCp1PnMpe3ZhciBnPWYoKSx5PWQoKTsoZy0xKSp5Pj1zP2YoZy0xKTooeS0xKSpnPj1zJiZkKHktMSl9ZWxzZSBmb3IoO2gqdTxzOyl7dmFyIHY9ZigpLHg9ZCgpOyh4KzEpKnY+PXM/ZCh4KzEpOmYodisxKX12YXIgYj1hLncvaCx3PWEuaC91O2lmKGUuY29uZGVuc2UmJihiPTAsdz0wKSxlLmF2b2lkT3ZlcmxhcClmb3IodmFyIF89MDtfPGkubGVuZ3RoO18rKyl7dmFyIFQ9aVtfXSxFPVQuX3ByaXZhdGUucG9zaXRpb247KEUueD09bnVsbHx8RS55PT1udWxsKSYmKEUueD0wLEUueT0wKTt2YXIgTD1ULmxheW91dERpbWVuc2lvbnMoZSksUz1lLmF2b2lkT3ZlcmxhcFBhZGRpbmcsQT1MLncrUyxJPUwuaCtTO2I9TWF0aC5tYXgoYixBKSx3PU1hdGgubWF4KHcsSSl9Zm9yKHZhciBEPXt9LGs9byhmdW5jdGlvbihqLG9lKXtyZXR1cm4hIURbImMtIitqKyItIitvZV19LCJ1c2VkIiksUj1vKGZ1bmN0aW9uKGosb2Upe0RbImMtIitqKyItIitvZV09ITB9LCJ1c2UiKSxDPTAsTz0wLE49byhmdW5jdGlvbigpe08rKyxPPj1oJiYoTz0wLEMrKyl9LCJtb3ZlVG9OZXh0Q2VsbCIpLFA9e30sRj0wO0Y8aS5sZW5ndGg7RisrKXt2YXIgQj1pW0ZdLEc9ZS5wb3NpdGlvbihCKTtpZihHJiYoRy5yb3chPT12b2lkIDB8fEcuY29sIT09dm9pZCAwKSl7dmFyIHo9e3JvdzpHLnJvdyxjb2w6Ry5jb2x9O2lmKHouY29sPT09dm9pZCAwKWZvcih6LmNvbD0wO2soei5yb3csei5jb2wpOyl6LmNvbCsrO2Vsc2UgaWYoei5yb3c9PT12b2lkIDApZm9yKHoucm93PTA7ayh6LnJvdyx6LmNvbCk7KXoucm93Kys7UFtCLmlkKCldPXosUih6LnJvdyx6LmNvbCl9fXZhciBXPW8oZnVuY3Rpb24oaixvZSl7dmFyIEssZWU7aWYoai5sb2NrZWQoKXx8ai5pc1BhcmVudCgpKXJldHVybiExO3ZhciBKPVBbai5pZCgpXTtpZihKKUs9Si5jb2wqYitiLzIrYS54MSxlZT1KLnJvdyp3K3cvMithLnkxO2Vsc2V7Zm9yKDtrKEMsTyk7KU4oKTtLPU8qYitiLzIrYS54MSxlZT1DKncrdy8yK2EueTEsUihDLE8pLE4oKX1yZXR1cm57eDpLLHk6ZWV9fSwiZ2V0UG9zIik7aS5sYXlvdXRQb3NpdGlvbnModGhpcyxlLFcpfXJldHVybiB0aGlzfTtqSmU9e3JlYWR5Om8oZnVuY3Rpb24oKXt9LCJyZWFkeSIpLHN0b3A6byhmdW5jdGlvbigpe30sInN0b3AiKX07byhiQiwiTnVsbExheW91dCIpO2JCLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsZT10LmVsZXMscj10aGlzO3JldHVybiB0LmN5LHIuZW1pdCgibGF5b3V0c3RhcnQiKSxlLm5vZGVzKCkucG9zaXRpb25zKGZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjB9fSksci5vbmUoImxheW91dHJlYWR5Iix0LnJlYWR5KSxyLmVtaXQoImxheW91dHJlYWR5Iiksci5vbmUoImxheW91dHN0b3AiLHQuc3RvcCksci5lbWl0KCJsYXlvdXRzdG9wIiksdGhpc307YkIucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307S0plPXtwb3NpdGlvbnM6dm9pZCAwLHpvb206dm9pZCAwLHBhbjp2b2lkIDAsZml0OiEwLHBhZGRpbmc6MzAsc3BhY2luZ0ZhY3Rvcjp2b2lkIDAsYW5pbWF0ZTohMSxhbmltYXRpb25EdXJhdGlvbjo1MDAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRlRmlsdGVyOm8oZnVuY3Rpb24oZSxyKXtyZXR1cm4hMH0sImFuaW1hdGVGaWx0ZXIiKSxyZWFkeTp2b2lkIDAsc3RvcDp2b2lkIDAsdHJhbnNmb3JtOm8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gcn0sInRyYW5zZm9ybSIpfTtvKEpnZSwiUHJlc2V0TGF5b3V0Iik7SmdlLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsZT10LmVsZXMscj1lLm5vZGVzKCksbj1uaSh0LnBvc2l0aW9ucyk7ZnVuY3Rpb24gaShhKXtpZih0LnBvc2l0aW9ucz09bnVsbClyZXR1cm4gZWplKGEucG9zaXRpb24oKSk7aWYobilyZXR1cm4gdC5wb3NpdGlvbnMoYSk7dmFyIHM9dC5wb3NpdGlvbnNbYS5fcHJpdmF0ZS5kYXRhLmlkXTtyZXR1cm4gcz8/bnVsbH1yZXR1cm4gbyhpLCJnZXRQb3NpdGlvbiIpLHIubGF5b3V0UG9zaXRpb25zKHRoaXMsdCxmdW5jdGlvbihhLHMpe3ZhciBsPWkoYSk7cmV0dXJuIGEubG9ja2VkKCl8fGw9PW51bGw/ITE6bH0pLHRoaXN9O1FKZT17Zml0OiEwLHBhZGRpbmc6MzAsYm91bmRpbmdCb3g6dm9pZCAwLGFuaW1hdGU6ITEsYW5pbWF0aW9uRHVyYXRpb246NTAwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpvKGZ1bmN0aW9uKGUscil7cmV0dXJuITB9LCJhbmltYXRlRmlsdGVyIikscmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIHJ9LCJ0cmFuc2Zvcm0iKX07byhlMWUsIlJhbmRvbUxheW91dCIpO2UxZS5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLGU9dC5jeSxyPXQuZWxlcyxuPUtzKHQuYm91bmRpbmdCb3g/dC5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6ZS53aWR0aCgpLGg6ZS5oZWlnaHQoKX0pLGk9byhmdW5jdGlvbihzLGwpe3JldHVybnt4Om4ueDErTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpKm4udykseTpuLnkxK01hdGgucm91bmQoTWF0aC5yYW5kb20oKSpuLmgpfX0sImdldFBvcyIpO3JldHVybiByLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsdCxpKSx0aGlzfTtaSmU9W3tuYW1lOiJicmVhZHRoZmlyc3QiLGltcGw6WGdlfSx7bmFtZToiY2lyY2xlIixpbXBsOmpnZX0se25hbWU6ImNvbmNlbnRyaWMiLGltcGw6S2dlfSx7bmFtZToiY29zZSIsaW1wbDpaNn0se25hbWU6ImdyaWQiLGltcGw6WmdlfSx7bmFtZToibnVsbCIsaW1wbDpiQn0se25hbWU6InByZXNldCIsaW1wbDpKZ2V9LHtuYW1lOiJyYW5kb20iLGltcGw6ZTFlfV07byh0MWUsIk51bGxSZW5kZXJlciIpO0VtZT1vKGZ1bmN0aW9uKCl7fSwibm9vcCIpLFNtZT1vKGZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJBIGhlYWRsZXNzIGluc3RhbmNlIGNhbiBub3QgcmVuZGVyIGltYWdlcyIpfSwidGhyb3dJbWdFcnIiKTt0MWUucHJvdG90eXBlPXtyZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGU6RW1lLG5vdGlmeTpvKGZ1bmN0aW9uKCl7dGhpcy5ub3RpZmljYXRpb25zKyt9LCJub3RpZnkiKSxpbml0OkVtZSxpc0hlYWRsZXNzOm8oZnVuY3Rpb24oKXtyZXR1cm4hMH0sImlzSGVhZGxlc3MiKSxwbmc6U21lLGpwZzpTbWV9O3dCPXt9O3dCLmFycm93U2hhcGVXaWR0aD0uMzt3Qi5yZWdpc3RlckFycm93U2hhcGVzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5hcnJvd1NoYXBlcz17fSxlPXRoaXMscj1vKGZ1bmN0aW9uKGgsZixkLHAsbSxnLHkpe3ZhciB2PW0ueC1kLzIteSx4PW0ueCtkLzIreSxiPW0ueS1kLzIteSx3PW0ueStkLzIreSxfPXY8PWgmJmg8PXgmJmI8PWYmJmY8PXc7cmV0dXJuIF99LCJiYkNvbGxpZGUiKSxuPW8oZnVuY3Rpb24oaCxmLGQscCxtKXt2YXIgZz1oKk1hdGguY29zKHApLWYqTWF0aC5zaW4ocCkseT1oKk1hdGguc2luKHApK2YqTWF0aC5jb3MocCksdj1nKmQseD15KmQsYj12K20ueCx3PXgrbS55O3JldHVybnt4OmIseTp3fX0sInRyYW5zZm9ybSIpLGk9byhmdW5jdGlvbihoLGYsZCxwKXtmb3IodmFyIG09W10sZz0wO2c8aC5sZW5ndGg7Zys9Mil7dmFyIHk9aFtnXSx2PWhbZysxXTttLnB1c2gobih5LHYsZixkLHApKX1yZXR1cm4gbX0sInRyYW5zZm9ybVBvaW50cyIpLGE9byhmdW5jdGlvbihoKXtmb3IodmFyIGY9W10sZD0wO2Q8aC5sZW5ndGg7ZCsrKXt2YXIgcD1oW2RdO2YucHVzaChwLngscC55KX1yZXR1cm4gZn0sInBvaW50c1RvQXJyIikscz1vKGZ1bmN0aW9uKGgpe3JldHVybiBoLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlKmgucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnBmVmFsdWUqMn0sInN0YW5kYXJkR2FwIiksbD1vKGZ1bmN0aW9uKGgsZil7WnQoZikmJihmPXRbZl0pLHRbaF09aXIoe25hbWU6aCxwb2ludHM6Wy0uMTUsLS4zLC4xNSwtLjMsLjE1LC4zLC0uMTUsLjNdLGNvbGxpZGU6byhmdW5jdGlvbihwLG0sZyx5LHYseCl7dmFyIGI9YShpKHRoaXMucG9pbnRzLGcrMip4LHksdikpLHc9anMocCxtLGIpO3JldHVybiB3fSwiY29sbGlkZSIpLHJvdWdoQ29sbGlkZTpyLGRyYXc6byhmdW5jdGlvbihwLG0sZyx5KXt2YXIgdj1pKHRoaXMucG9pbnRzLG0sZyx5KTtlLmFycm93U2hhcGVJbXBsKCJwb2x5Z29uIikocCx2KX0sImRyYXciKSxzcGFjaW5nOm8oZnVuY3Rpb24ocCl7cmV0dXJuIDB9LCJzcGFjaW5nIiksZ2FwOnN9LGYpfSwiZGVmaW5lQXJyb3dTaGFwZSIpO2woIm5vbmUiLHtjb2xsaWRlOl82LHJvdWdoQ29sbGlkZTpfNixkcmF3OnNCLHNwYWNpbmc6T3BlLGdhcDpPcGV9KSxsKCJ0cmlhbmdsZSIse3BvaW50czpbLS4xNSwtLjMsMCwwLC4xNSwtLjNdfSksbCgiYXJyb3ciLCJ0cmlhbmdsZSIpLGwoInRyaWFuZ2xlLWJhY2tjdXJ2ZSIse3BvaW50czp0LnRyaWFuZ2xlLnBvaW50cyxjb250cm9sUG9pbnQ6WzAsLS4xNV0scm91Z2hDb2xsaWRlOnIsZHJhdzpvKGZ1bmN0aW9uKGgsZixkLHAsbSl7dmFyIGc9aSh0aGlzLnBvaW50cyxmLGQscCkseT10aGlzLmNvbnRyb2xQb2ludCx2PW4oeVswXSx5WzFdLGYsZCxwKTtlLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoaCxnLHYpfSwiZHJhdyIpLGdhcDpvKGZ1bmN0aW9uKGgpe3JldHVybiBzKGgpKi44fSwiZ2FwIil9KSxsKCJ0cmlhbmdsZS10ZWUiLHtwb2ludHM6WzAsMCwuMTUsLS4zLC0uMTUsLS4zLDAsMF0scG9pbnRzVGVlOlstLjE1LC0uNCwtLjE1LC0uNSwuMTUsLS41LC4xNSwtLjRdLGNvbGxpZGU6byhmdW5jdGlvbihoLGYsZCxwLG0sZyx5KXt2YXIgdj1hKGkodGhpcy5wb2ludHMsZCsyKnkscCxtKSkseD1hKGkodGhpcy5wb2ludHNUZWUsZCsyKnkscCxtKSksYj1qcyhoLGYsdil8fGpzKGgsZix4KTtyZXR1cm4gYn0sImNvbGxpZGUiKSxkcmF3Om8oZnVuY3Rpb24oaCxmLGQscCxtKXt2YXIgZz1pKHRoaXMucG9pbnRzLGYsZCxwKSx5PWkodGhpcy5wb2ludHNUZWUsZixkLHApO2UuYXJyb3dTaGFwZUltcGwodGhpcy5uYW1lKShoLGcseSl9LCJkcmF3Iil9KSxsKCJjaXJjbGUtdHJpYW5nbGUiLHtyYWRpdXM6LjE1LHBvaW50c1RyOlswLC0uMTUsLjE1LC0uNDUsLS4xNSwtLjQ1LDAsLS4xNV0sY29sbGlkZTpvKGZ1bmN0aW9uKGgsZixkLHAsbSxnLHkpe3ZhciB2PW0seD1NYXRoLnBvdyh2LngtaCwyKStNYXRoLnBvdyh2LnktZiwyKTw9TWF0aC5wb3coKGQrMip5KSp0aGlzLnJhZGl1cywyKSxiPWEoaSh0aGlzLnBvaW50cyxkKzIqeSxwLG0pKTtyZXR1cm4ganMoaCxmLGIpfHx4fSwiY29sbGlkZSIpLGRyYXc6byhmdW5jdGlvbihoLGYsZCxwLG0pe3ZhciBnPWkodGhpcy5wb2ludHNUcixmLGQscCk7ZS5hcnJvd1NoYXBlSW1wbCh0aGlzLm5hbWUpKGgsZyxwLngscC55LHRoaXMucmFkaXVzKmYpfSwiZHJhdyIpLHNwYWNpbmc6byhmdW5jdGlvbihoKXtyZXR1cm4gZS5nZXRBcnJvd1dpZHRoKGgucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsaC5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUpKnRoaXMucmFkaXVzfSwic3BhY2luZyIpfSksbCgidHJpYW5nbGUtY3Jvc3MiLHtwb2ludHM6WzAsMCwuMTUsLS4zLC0uMTUsLS4zLDAsMF0sYmFzZUNyb3NzTGluZVB0czpbLS4xNSwtLjQsLS4xNSwtLjQsLjE1LC0uNCwuMTUsLS40XSxjcm9zc0xpbmVQdHM6byhmdW5jdGlvbihoLGYpe3ZhciBkPXRoaXMuYmFzZUNyb3NzTGluZVB0cy5zbGljZSgpLHA9Zi9oLG09MyxnPTU7cmV0dXJuIGRbbV09ZFttXS1wLGRbZ109ZFtnXS1wLGR9LCJjcm9zc0xpbmVQdHMiKSxjb2xsaWRlOm8oZnVuY3Rpb24oaCxmLGQscCxtLGcseSl7dmFyIHY9YShpKHRoaXMucG9pbnRzLGQrMip5LHAsbSkpLHg9YShpKHRoaXMuY3Jvc3NMaW5lUHRzKGQsZyksZCsyKnkscCxtKSksYj1qcyhoLGYsdil8fGpzKGgsZix4KTtyZXR1cm4gYn0sImNvbGxpZGUiKSxkcmF3Om8oZnVuY3Rpb24oaCxmLGQscCxtKXt2YXIgZz1pKHRoaXMucG9pbnRzLGYsZCxwKSx5PWkodGhpcy5jcm9zc0xpbmVQdHMoZixtKSxmLGQscCk7ZS5hcnJvd1NoYXBlSW1wbCh0aGlzLm5hbWUpKGgsZyx5KX0sImRyYXciKX0pLGwoInZlZSIse3BvaW50czpbLS4xNSwtLjMsMCwwLC4xNSwtLjMsMCwtLjE1XSxnYXA6byhmdW5jdGlvbihoKXtyZXR1cm4gcyhoKSouNTI1fSwiZ2FwIil9KSxsKCJjaXJjbGUiLHtyYWRpdXM6LjE1LGNvbGxpZGU6byhmdW5jdGlvbihoLGYsZCxwLG0sZyx5KXt2YXIgdj1tLHg9TWF0aC5wb3codi54LWgsMikrTWF0aC5wb3codi55LWYsMik8PU1hdGgucG93KChkKzIqeSkqdGhpcy5yYWRpdXMsMik7cmV0dXJuIHh9LCJjb2xsaWRlIiksZHJhdzpvKGZ1bmN0aW9uKGgsZixkLHAsbSl7ZS5hcnJvd1NoYXBlSW1wbCh0aGlzLm5hbWUpKGgscC54LHAueSx0aGlzLnJhZGl1cypmKX0sImRyYXciKSxzcGFjaW5nOm8oZnVuY3Rpb24oaCl7cmV0dXJuIGUuZ2V0QXJyb3dXaWR0aChoLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLGgucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlKSp0aGlzLnJhZGl1c30sInNwYWNpbmciKX0pLGwoInRlZSIse3BvaW50czpbLS4xNSwwLC0uMTUsLS4xLC4xNSwtLjEsLjE1LDBdLHNwYWNpbmc6byhmdW5jdGlvbihoKXtyZXR1cm4gMX0sInNwYWNpbmciKSxnYXA6byhmdW5jdGlvbihoKXtyZXR1cm4gMX0sImdhcCIpfSksbCgic3F1YXJlIix7cG9pbnRzOlstLjE1LDAsLjE1LDAsLjE1LC0uMywtLjE1LC0uM119KSxsKCJkaWFtb25kIix7cG9pbnRzOlstLjE1LC0uMTUsMCwtLjMsLjE1LC0uMTUsMCwwXSxnYXA6byhmdW5jdGlvbihoKXtyZXR1cm4gaC5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSpoLnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZX0sImdhcCIpfSksbCgiY2hldnJvbiIse3BvaW50czpbMCwwLC0uMTUsLS4xNSwtLjEsLS4yLDAsLS4xLC4xLC0uMiwuMTUsLS4xNV0sZ2FwOm8oZnVuY3Rpb24oaCl7cmV0dXJuIC45NSpoLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlKmgucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlfSwiZ2FwIil9KX07dHA9e307dHAucHJvamVjdEludG9WaWV3cG9ydD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuY3ksbj10aGlzLmZpbmRDb250YWluZXJDbGllbnRDb29yZHMoKSxpPW5bMF0sYT1uWzFdLHM9bls0XSxsPXIucGFuKCksdT1yLnpvb20oKSxoPSgodC1pKS9zLWwueCkvdSxmPSgoZS1hKS9zLWwueSkvdTtyZXR1cm5baCxmXX07dHAuZmluZENvbnRhaW5lckNsaWVudENvb3Jkcz1mdW5jdGlvbigpe2lmKHRoaXMuY29udGFpbmVyQkIpcmV0dXJuIHRoaXMuY29udGFpbmVyQkI7dmFyIHQ9dGhpcy5jb250YWluZXIsZT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHI9dGhpcy5jeS53aW5kb3coKS5nZXRDb21wdXRlZFN0eWxlKHQpLG49byhmdW5jdGlvbih4KXtyZXR1cm4gcGFyc2VGbG9hdChyLmdldFByb3BlcnR5VmFsdWUoeCkpfSwic3R5bGVWYWx1ZSIpLGk9e2xlZnQ6bigicGFkZGluZy1sZWZ0IikscmlnaHQ6bigicGFkZGluZy1yaWdodCIpLHRvcDpuKCJwYWRkaW5nLXRvcCIpLGJvdHRvbTpuKCJwYWRkaW5nLWJvdHRvbSIpfSxhPXtsZWZ0Om4oImJvcmRlci1sZWZ0LXdpZHRoIikscmlnaHQ6bigiYm9yZGVyLXJpZ2h0LXdpZHRoIiksdG9wOm4oImJvcmRlci10b3Atd2lkdGgiKSxib3R0b206bigiYm9yZGVyLWJvdHRvbS13aWR0aCIpfSxzPXQuY2xpZW50V2lkdGgsbD10LmNsaWVudEhlaWdodCx1PWkubGVmdCtpLnJpZ2h0LGg9aS50b3AraS5ib3R0b20sZj1hLmxlZnQrYS5yaWdodCxkPWUud2lkdGgvKHMrZikscD1zLXUsbT1sLWgsZz1lLmxlZnQraS5sZWZ0K2EubGVmdCx5PWUudG9wK2kudG9wK2EudG9wO3JldHVybiB0aGlzLmNvbnRhaW5lckJCPVtnLHkscCxtLGRdfTt0cC5pbnZhbGlkYXRlQ29udGFpbmVyQ2xpZW50Q29vcmRzQ2FjaGU9ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5lckJCPW51bGx9O3RwLmZpbmROZWFyZXN0RWxlbWVudD1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdGhpcy5maW5kTmVhcmVzdEVsZW1lbnRzKHQsZSxyLG4pWzBdfTt0cC5maW5kTmVhcmVzdEVsZW1lbnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMsYT10aGlzLHM9YS5nZXRDYWNoZWRaU29ydGVkRWxlcygpLGw9W10sdT1hLmN5Lnpvb20oKSxoPWEuY3kuaGFzQ29tcG91bmROb2RlcygpLGY9KG4/MjQ6OCkvdSxkPShuPzg6MikvdSxwPShuPzg6MikvdSxtPTEvMCxnLHk7ciYmKHM9cy5pbnRlcmFjdGl2ZSk7ZnVuY3Rpb24gdihMLFMpe2lmKEwuaXNOb2RlKCkpe2lmKHkpcmV0dXJuO3k9TCxsLnB1c2goTCl9aWYoTC5pc0VkZ2UoKSYmKFM9PW51bGx8fFM8bSkpaWYoZyl7aWYoZy5wc3R5bGUoInotY29tcG91bmQtZGVwdGgiKS52YWx1ZT09PUwucHN0eWxlKCJ6LWNvbXBvdW5kLWRlcHRoIikudmFsdWUmJmcucHN0eWxlKCJ6LWNvbXBvdW5kLWRlcHRoIikudmFsdWU9PT1MLnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpLnZhbHVlKXtmb3IodmFyIEE9MDtBPGwubGVuZ3RoO0ErKylpZihsW0FdLmlzRWRnZSgpKXtsW0FdPUwsZz1MLG09Uz8/bTticmVha319fWVsc2UgbC5wdXNoKEwpLGc9TCxtPVM/P219byh2LCJhZGRFbGUiKTtmdW5jdGlvbiB4KEwpe3ZhciBTPUwub3V0ZXJXaWR0aCgpKzIqZCxBPUwub3V0ZXJIZWlnaHQoKSsyKmQsST1TLzIsRD1BLzIsaz1MLnBvc2l0aW9uKCksUj1MLnBzdHlsZSgiY29ybmVyLXJhZGl1cyIpLnZhbHVlPT09ImF1dG8iPyJhdXRvIjpMLnBzdHlsZSgiY29ybmVyLXJhZGl1cyIpLnBmVmFsdWUsQz1MLl9wcml2YXRlLnJzY3JhdGNoO2lmKGsueC1JPD10JiZ0PD1rLngrSSYmay55LUQ8PWUmJmU8PWsueStEKXt2YXIgTz1hLm5vZGVTaGFwZXNbaS5nZXROb2RlU2hhcGUoTCldO2lmKE8uY2hlY2tQb2ludCh0LGUsMCxTLEEsay54LGsueSxSLEMpKXJldHVybiB2KEwsMCksITB9fW8oeCwiY2hlY2tOb2RlIik7ZnVuY3Rpb24gYihMKXt2YXIgUz1MLl9wcml2YXRlLEE9Uy5yc2NyYXRjaCxJPUwucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsRD1MLnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZSxrPUkvMitmLFI9ayprLEM9ayoyLEY9Uy5zb3VyY2UsQj1TLnRhcmdldCxPO2lmKEEuZWRnZVR5cGU9PT0ic2VnbWVudHMifHxBLmVkZ2VUeXBlPT09InN0cmFpZ2h0Inx8QS5lZGdlVHlwZT09PSJoYXlzdGFjayIpe2Zvcih2YXIgTj1BLmFsbHB0cyxQPTA7UCszPE4ubGVuZ3RoO1ArPTIpaWYoZGplKHQsZSxOW1BdLE5bUCsxXSxOW1ArMl0sTltQKzNdLEMpJiZSPihPPXZqZSh0LGUsTltQXSxOW1ArMV0sTltQKzJdLE5bUCszXSkpKXJldHVybiB2KEwsTyksITB9ZWxzZSBpZihBLmVkZ2VUeXBlPT09ImJlemllciJ8fEEuZWRnZVR5cGU9PT0ibXVsdGliZXppZXIifHxBLmVkZ2VUeXBlPT09InNlbGYifHxBLmVkZ2VUeXBlPT09ImNvbXBvdW5kIil7Zm9yKHZhciBOPUEuYWxscHRzLFA9MDtQKzU8QS5hbGxwdHMubGVuZ3RoO1ArPTQpaWYocGplKHQsZSxOW1BdLE5bUCsxXSxOW1ArMl0sTltQKzNdLE5bUCs0XSxOW1ArNV0sQykmJlI+KE89eWplKHQsZSxOW1BdLE5bUCsxXSxOW1ArMl0sTltQKzNdLE5bUCs0XSxOW1ArNV0pKSlyZXR1cm4gdihMLE8pLCEwfWZvcih2YXIgRj1GfHxTLnNvdXJjZSxCPUJ8fFMudGFyZ2V0LEc9aS5nZXRBcnJvd1dpZHRoKEksRCksej1be25hbWU6InNvdXJjZSIseDpBLmFycm93U3RhcnRYLHk6QS5hcnJvd1N0YXJ0WSxhbmdsZTpBLnNyY0Fycm93QW5nbGV9LHtuYW1lOiJ0YXJnZXQiLHg6QS5hcnJvd0VuZFgseTpBLmFycm93RW5kWSxhbmdsZTpBLnRndEFycm93QW5nbGV9LHtuYW1lOiJtaWQtc291cmNlIix4OkEubWlkWCx5OkEubWlkWSxhbmdsZTpBLm1pZHNyY0Fycm93QW5nbGV9LHtuYW1lOiJtaWQtdGFyZ2V0Iix4OkEubWlkWCx5OkEubWlkWSxhbmdsZTpBLm1pZHRndEFycm93QW5nbGV9XSxQPTA7UDx6Lmxlbmd0aDtQKyspe3ZhciBXPXpbUF0sWj1hLmFycm93U2hhcGVzW0wucHN0eWxlKFcubmFtZSsiLWFycm93LXNoYXBlIikudmFsdWVdLGo9TC5wc3R5bGUoIndpZHRoIikucGZWYWx1ZTtpZihaLnJvdWdoQ29sbGlkZSh0LGUsRyxXLmFuZ2xlLHt4OlcueCx5OlcueX0saixmKSYmWi5jb2xsaWRlKHQsZSxHLFcuYW5nbGUse3g6Vy54LHk6Vy55fSxqLGYpKXJldHVybiB2KEwpLCEwfWgmJmwubGVuZ3RoPjAmJih4KEYpLHgoQikpfW8oYiwiY2hlY2tFZGdlIik7ZnVuY3Rpb24gdyhMLFMsQSl7cmV0dXJuIFFsKEwsUyxBKX1vKHcsInByZXByb3AiKTtmdW5jdGlvbiBfKEwsUyl7dmFyIEE9TC5fcHJpdmF0ZSxJPXAsRDtTP0Q9UysiLSI6RD0iIixMLmJvdW5kaW5nQm94KCk7dmFyIGs9QS5sYWJlbEJvdW5kc1tTfHwibWFpbiJdLFI9TC5wc3R5bGUoRCsibGFiZWwiKS52YWx1ZSxDPUwucHN0eWxlKCJ0ZXh0LWV2ZW50cyIpLnN0clZhbHVlPT09InllcyI7aWYoISghQ3x8IVIpKXt2YXIgTz13KEEucnNjcmF0Y2gsImxhYmVsWCIsUyksTj13KEEucnNjcmF0Y2gsImxhYmVsWSIsUyksUD13KEEucnNjcmF0Y2gsImxhYmVsQW5nbGUiLFMpLEY9TC5wc3R5bGUoRCsidGV4dC1tYXJnaW4teCIpLnBmVmFsdWUsQj1MLnBzdHlsZShEKyJ0ZXh0LW1hcmdpbi15IikucGZWYWx1ZSxHPWsueDEtSS1GLHo9ay54MitJLUYsVz1rLnkxLUktQixaPWsueTIrSS1CO2lmKFApe3ZhciBqPU1hdGguY29zKFApLG9lPU1hdGguc2luKFApLEs9byhmdW5jdGlvbih1ZSxjZSl7cmV0dXJuIHVlPXVlLU8sY2U9Y2UtTix7eDp1ZSpqLWNlKm9lK08seTp1ZSpvZStjZSpqK059fSwicm90YXRlIiksZWU9SyhHLFcpLEo9SyhHLFopLEg9Syh6LFcpLHE9Syh6LFopLFE9W2VlLngrRixlZS55K0IsSC54K0YsSC55K0IscS54K0YscS55K0IsSi54K0YsSi55K0JdO2lmKGpzKHQsZSxRKSlyZXR1cm4gdihMKSwhMH1lbHNlIGlmKFQxKGssdCxlKSlyZXR1cm4gdihMKSwhMH19byhfLCJjaGVja0xhYmVsIik7Zm9yKHZhciBUPXMubGVuZ3RoLTE7VD49MDtULS0pe3ZhciBFPXNbVF07RS5pc05vZGUoKT94KEUpfHxfKEUpOmIoRSl8fF8oRSl8fF8oRSwic291cmNlIil8fF8oRSwidGFyZ2V0Iil9cmV0dXJuIGx9O3RwLmdldEFsbEluQm94PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuZ2V0Q2FjaGVkWlNvcnRlZEVsZXMoKS5pbnRlcmFjdGl2ZSxhPVtdLHM9TWF0aC5taW4odCxyKSxsPU1hdGgubWF4KHQsciksdT1NYXRoLm1pbihlLG4pLGg9TWF0aC5tYXgoZSxuKTt0PXMscj1sLGU9dSxuPWg7Zm9yKHZhciBmPUtzKHt4MTp0LHkxOmUseDI6cix5MjpufSksZD0wO2Q8aS5sZW5ndGg7ZCsrKXt2YXIgcD1pW2RdO2lmKHAuaXNOb2RlKCkpe3ZhciBtPXAsZz1tLmJvdW5kaW5nQm94KHtpbmNsdWRlTm9kZXM6ITAsaW5jbHVkZUVkZ2VzOiExLGluY2x1ZGVMYWJlbHM6ITF9KTtjQihmLGcpJiYhdWdlKGcsZikmJmEucHVzaChtKX1lbHNle3ZhciB5PXAsdj15Ll9wcml2YXRlLHg9di5yc2NyYXRjaDtpZih4LnN0YXJ0WCE9bnVsbCYmeC5zdGFydFkhPW51bGwmJiFUMShmLHguc3RhcnRYLHguc3RhcnRZKXx8eC5lbmRYIT1udWxsJiZ4LmVuZFkhPW51bGwmJiFUMShmLHguZW5kWCx4LmVuZFkpKWNvbnRpbnVlO2lmKHguZWRnZVR5cGU9PT0iYmV6aWVyInx8eC5lZGdlVHlwZT09PSJtdWx0aWJlemllciJ8fHguZWRnZVR5cGU9PT0ic2VsZiJ8fHguZWRnZVR5cGU9PT0iY29tcG91bmQifHx4LmVkZ2VUeXBlPT09InNlZ21lbnRzInx8eC5lZGdlVHlwZT09PSJoYXlzdGFjayIpe2Zvcih2YXIgYj12LnJzdHlsZS5iZXppZXJQdHN8fHYucnN0eWxlLmxpbmVQdHN8fHYucnN0eWxlLmhheXN0YWNrUHRzLHc9ITAsXz0wO188Yi5sZW5ndGg7XysrKWlmKCFmamUoZixiW19dKSl7dz0hMTticmVha313JiZhLnB1c2goeSl9ZWxzZSh4LmVkZ2VUeXBlPT09ImhheXN0YWNrInx8eC5lZGdlVHlwZT09PSJzdHJhaWdodCIpJiZhLnB1c2goeSl9fXJldHVybiBhfTtPNj17fTtPNi5jYWxjdWxhdGVBcnJvd0FuZ2xlcz1mdW5jdGlvbih0KXt2YXIgZT10Ll9wcml2YXRlLnJzY3JhdGNoLHI9ZS5lZGdlVHlwZT09PSJoYXlzdGFjayIsbj1lLmVkZ2VUeXBlPT09ImJlemllciIsaT1lLmVkZ2VUeXBlPT09Im11bHRpYmV6aWVyIixhPWUuZWRnZVR5cGU9PT0ic2VnbWVudHMiLHM9ZS5lZGdlVHlwZT09PSJjb21wb3VuZCIsbD1lLmVkZ2VUeXBlPT09InNlbGYiLHUsaCxmLGQscCxtLHgsYjtpZihyPyhmPWUuaGF5c3RhY2tQdHNbMF0sZD1lLmhheXN0YWNrUHRzWzFdLHA9ZS5oYXlzdGFja1B0c1syXSxtPWUuaGF5c3RhY2tQdHNbM10pOihmPWUuYXJyb3dTdGFydFgsZD1lLmFycm93U3RhcnRZLHA9ZS5hcnJvd0VuZFgsbT1lLmFycm93RW5kWSkseD1lLm1pZFgsYj1lLm1pZFksYSl1PWYtZS5zZWdwdHNbMF0saD1kLWUuc2VncHRzWzFdO2Vsc2UgaWYoaXx8c3x8bHx8bil7dmFyIGc9ZS5hbGxwdHMseT1sYShnWzBdLGdbMl0sZ1s0XSwuMSksdj1sYShnWzFdLGdbM10sZ1s1XSwuMSk7dT1mLXksaD1kLXZ9ZWxzZSB1PWYteCxoPWQtYjtlLnNyY0Fycm93QW5nbGU9czYodSxoKTt2YXIgeD1lLm1pZFgsYj1lLm1pZFk7aWYociYmKHg9KGYrcCkvMixiPShkK20pLzIpLHU9cC1mLGg9bS1kLGEpe3ZhciBnPWUuYWxscHRzO2lmKGcubGVuZ3RoLzIlMj09PTApe3ZhciB3PWcubGVuZ3RoLzIsXz13LTI7dT1nW3ddLWdbX10saD1nW3crMV0tZ1tfKzFdfWVsc2UgaWYoZS5pc1JvdW5kKXU9ZS5taWRWZWN0b3JbMV0saD0tZS5taWRWZWN0b3JbMF07ZWxzZXt2YXIgdz1nLmxlbmd0aC8yLTEsXz13LTI7dT1nW3ddLWdbX10saD1nW3crMV0tZ1tfKzFdfX1lbHNlIGlmKGl8fHN8fGwpe3ZhciBnPWUuYWxscHRzLFQ9ZS5jdHJscHRzLEUsTCxTLEE7aWYoVC5sZW5ndGgvMiUyPT09MCl7dmFyIEk9Zy5sZW5ndGgvMi0xLEQ9SSsyLGs9RCsyO0U9bGEoZ1tJXSxnW0RdLGdba10sMCksTD1sYShnW0krMV0sZ1tEKzFdLGdbaysxXSwwKSxTPWxhKGdbSV0sZ1tEXSxnW2tdLDFlLTQpLEE9bGEoZ1tJKzFdLGdbRCsxXSxnW2srMV0sMWUtNCl9ZWxzZXt2YXIgRD1nLmxlbmd0aC8yLTEsST1ELTIsaz1EKzI7RT1sYShnW0ldLGdbRF0sZ1trXSwuNDk5OSksTD1sYShnW0krMV0sZ1tEKzFdLGdbaysxXSwuNDk5OSksUz1sYShnW0ldLGdbRF0sZ1trXSwuNSksQT1sYShnW0krMV0sZ1tEKzFdLGdbaysxXSwuNSl9dT1TLUUsaD1BLUx9aWYoZS5taWR0Z3RBcnJvd0FuZ2xlPXM2KHUsaCksZS5taWREaXNwWD11LGUubWlkRGlzcFk9aCx1Kj0tMSxoKj0tMSxhKXt2YXIgZz1lLmFsbHB0cztpZihnLmxlbmd0aC8yJTIhPT0wKXtpZighZS5pc1JvdW5kKXt2YXIgdz1nLmxlbmd0aC8yLTEsUj13KzI7dT0tKGdbUl0tZ1t3XSksaD0tKGdbUisxXS1nW3crMV0pfX19aWYoZS5taWRzcmNBcnJvd0FuZ2xlPXM2KHUsaCksYSl1PXAtZS5zZWdwdHNbZS5zZWdwdHMubGVuZ3RoLTJdLGg9bS1lLnNlZ3B0c1tlLnNlZ3B0cy5sZW5ndGgtMV07ZWxzZSBpZihpfHxzfHxsfHxuKXt2YXIgZz1lLmFsbHB0cyxDPWcubGVuZ3RoLHk9bGEoZ1tDLTZdLGdbQy00XSxnW0MtMl0sLjkpLHY9bGEoZ1tDLTVdLGdbQy0zXSxnW0MtMV0sLjkpO3U9cC15LGg9bS12fWVsc2UgdT1wLXgsaD1tLWI7ZS50Z3RBcnJvd0FuZ2xlPXM2KHUsaCl9O082LmdldEFycm93V2lkdGg9TzYuZ2V0QXJyb3dIZWlnaHQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmFycm93V2lkdGhDYWNoZT10aGlzLmFycm93V2lkdGhDYWNoZXx8e30sbj1yW3QrIiwgIitlXTtyZXR1cm4gbnx8KG49TWF0aC5tYXgoTWF0aC5wb3codCoxMy4zNywuOSksMjkpKmUsclt0KyIsICIrZV09bixuKX07UWM9e30sY2w9e30sTG1lPW8oZnVuY3Rpb24oZSxyLG4pe24ueD1yLngtZS54LG4ueT1yLnktZS55LG4ubGVuPU1hdGguc3FydChuLngqbi54K24ueSpuLnkpLG4ubng9bi54L24ubGVuLG4ubnk9bi55L24ubGVuLG4uYW5nPU1hdGguYXRhbjIobi5ueSxuLm54KX0sImFzVmVjIiksSkplPW8oZnVuY3Rpb24oZSxyKXtyLng9ZS54Ki0xLHIueT1lLnkqLTEsci5ueD1lLm54Ki0xLHIubnk9ZS5ueSotMSxyLmFuZz1lLmFuZz4wPy0oTWF0aC5QSS1lLmFuZyk6TWF0aC5QSStlLmFuZ30sImludmVydFZlYyIpLGVldD1vKGZ1bmN0aW9uKGUscixuLGksYSl7aWYoZSE9PV9tZT9MbWUocixlLFFjKTpKSmUoY2wsUWMpLExtZShyLG4sY2wpLENtZT1RYy5ueCpjbC5ueS1RYy5ueSpjbC5ueCxBbWU9UWMubngqY2wubngtUWMubnkqLWNsLm55LG5oPU1hdGguYXNpbihNYXRoLm1heCgtMSxNYXRoLm1pbigxLENtZSkpKSxNYXRoLmFicyhuaCk8MWUtNil7cVA9ci54LFhQPXIueSxXMD1kMT0wO3JldHVybn1ZMD0xLEU2PSExLEFtZTwwP25oPDA/bmg9TWF0aC5QSStuaDoobmg9TWF0aC5QSS1uaCxZMD0tMSxFNj0hMCk6bmg+MCYmKFkwPS0xLEU2PSEwKSxyLnJhZGl1cyE9PXZvaWQgMD9kMT1yLnJhZGl1czpkMT1pLCQwPW5oLzIsbTY9TWF0aC5taW4oUWMubGVuLzIsY2wubGVuLzIpLGE/KEtjPU1hdGguYWJzKE1hdGguY29zKCQwKSpkMS9NYXRoLnNpbigkMCkpLEtjPm02PyhLYz1tNixXMD1NYXRoLmFicyhLYypNYXRoLnNpbigkMCkvTWF0aC5jb3MoJDApKSk6VzA9ZDEpOihLYz1NYXRoLm1pbihtNixkMSksVzA9TWF0aC5hYnMoS2MqTWF0aC5zaW4oJDApL01hdGguY29zKCQwKSkpLGpQPXIueCtjbC5ueCpLYyxLUD1yLnkrY2wubnkqS2MscVA9alAtY2wubnkqVzAqWTAsWFA9S1ArY2wubngqVzAqWTAscjFlPXIueCtRYy5ueCpLYyxuMWU9ci55K1FjLm55KktjLF9tZT1yfSwiY2FsY0Nvcm5lckFyYyIpO28oaTFlLCJkcmF3UHJlcGFyZWRSb3VuZENvcm5lciIpO28oVEIsImdldFJvdW5kQ29ybmVyIik7cWE9e307cWEuZmluZE1pZHB0UHRzRXRjPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5wb3NQdHMsbj1lLmludGVyc2VjdGlvblB0cyxpPWUudmVjdG9yTm9ybUludmVyc2UsYSxzPXQucHN0eWxlKCJzb3VyY2UtZW5kcG9pbnQiKSxsPXQucHN0eWxlKCJ0YXJnZXQtZW5kcG9pbnQiKSx1PXMudW5pdHMhPW51bGwmJmwudW5pdHMhPW51bGwsaD1vKGZ1bmN0aW9uKFQsRSxMLFMpe3ZhciBBPVMtRSxJPUwtVCxEPU1hdGguc3FydChJKkkrQSpBKTtyZXR1cm57eDotQS9ELHk6SS9EfX0sInJlY2FsY1ZlY3Rvck5vcm1JbnZlcnNlIiksZj10LnBzdHlsZSgiZWRnZS1kaXN0YW5jZXMiKS52YWx1ZTtzd2l0Y2goZil7Y2FzZSJub2RlLXBvc2l0aW9uIjphPXI7YnJlYWs7Y2FzZSJpbnRlcnNlY3Rpb24iOmE9bjticmVhaztjYXNlImVuZHBvaW50cyI6e2lmKHUpe3ZhciBkPXRoaXMubWFudWFsRW5kcHRUb1B4KHQuc291cmNlKClbMF0scykscD1qbChkLDIpLG09cFswXSxnPXBbMV0seT10aGlzLm1hbnVhbEVuZHB0VG9QeCh0LnRhcmdldCgpWzBdLGwpLHY9amwoeSwyKSx4PXZbMF0sYj12WzFdLHc9e3gxOm0seTE6Zyx4Mjp4LHkyOmJ9O2k9aChtLGcseCxiKSxhPXd9ZWxzZSBvbigiRWRnZSAiLmNvbmNhdCh0LmlkKCksIiBoYXMgZWRnZS1kaXN0YW5jZXM6ZW5kcG9pbnRzIHNwZWNpZmllZCB3aXRob3V0IG1hbnVhbCBlbmRwb2ludHMgc3BlY2lmaWVkIHZpYSBzb3VyY2UtZW5kcG9pbnQgYW5kIHRhcmdldC1lbmRwb2ludC4gIEZhbGxpbmcgYmFjayBvbiBlZGdlLWRpc3RhbmNlczppbnRlcnNlY3Rpb24gKGRlZmF1bHQpLiIpKSxhPW47YnJlYWt9fXJldHVybnttaWRwdFB0czphLHZlY3Rvck5vcm1JbnZlcnNlOml9fTtxYS5maW5kSGF5c3RhY2tQb2ludHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciByPXRbZV0sbj1yLl9wcml2YXRlLGk9bi5yc2NyYXRjaDtpZighaS5oYXlzdGFjayl7dmFyIGE9TWF0aC5yYW5kb20oKSoyKk1hdGguUEk7aS5zb3VyY2U9e3g6TWF0aC5jb3MoYSkseTpNYXRoLnNpbihhKX0sYT1NYXRoLnJhbmRvbSgpKjIqTWF0aC5QSSxpLnRhcmdldD17eDpNYXRoLmNvcyhhKSx5Ok1hdGguc2luKGEpfX12YXIgcz1uLnNvdXJjZSxsPW4udGFyZ2V0LHU9cy5wb3NpdGlvbigpLGg9bC5wb3NpdGlvbigpLGY9cy53aWR0aCgpLGQ9bC53aWR0aCgpLHA9cy5oZWlnaHQoKSxtPWwuaGVpZ2h0KCksZz1yLnBzdHlsZSgiaGF5c3RhY2stcmFkaXVzIikudmFsdWUseT1nLzI7aS5oYXlzdGFja1B0cz1pLmFsbHB0cz1baS5zb3VyY2UueCpmKnkrdS54LGkuc291cmNlLnkqcCp5K3UueSxpLnRhcmdldC54KmQqeStoLngsaS50YXJnZXQueSptKnkraC55XSxpLm1pZFg9KGkuYWxscHRzWzBdK2kuYWxscHRzWzJdKS8yLGkubWlkWT0oaS5hbGxwdHNbMV0raS5hbGxwdHNbM10pLzIsaS5lZGdlVHlwZT0iaGF5c3RhY2siLGkuaGF5c3RhY2s9ITAsdGhpcy5zdG9yZUVkZ2VQcm9qZWN0aW9ucyhyKSx0aGlzLmNhbGN1bGF0ZUFycm93QW5nbGVzKHIpLHRoaXMucmVjYWxjdWxhdGVFZGdlTGFiZWxQcm9qZWN0aW9ucyhyKSx0aGlzLmNhbGN1bGF0ZUxhYmVsQW5nbGVzKHIpfX07cWEuZmluZFNlZ21lbnRzUG9pbnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fcHJpdmF0ZS5yc2NyYXRjaCxuPXQucHN0eWxlKCJzZWdtZW50LXdlaWdodHMiKSxpPXQucHN0eWxlKCJzZWdtZW50LWRpc3RhbmNlcyIpLGE9dC5wc3R5bGUoInNlZ21lbnQtcmFkaWkiKSxzPXQucHN0eWxlKCJyYWRpdXMtdHlwZSIpLGw9TWF0aC5taW4obi5wZlZhbHVlLmxlbmd0aCxpLnBmVmFsdWUubGVuZ3RoKSx1PWEucGZWYWx1ZVthLnBmVmFsdWUubGVuZ3RoLTFdLGg9cy5wZlZhbHVlW3MucGZWYWx1ZS5sZW5ndGgtMV07ci5lZGdlVHlwZT0ic2VnbWVudHMiLHIuc2VncHRzPVtdLHIucmFkaWk9W10sci5pc0FyY1JhZGl1cz1bXTtmb3IodmFyIGY9MDtmPGw7ZisrKXt2YXIgZD1uLnBmVmFsdWVbZl0scD1pLnBmVmFsdWVbZl0sbT0xLWQsZz1kLHk9dGhpcy5maW5kTWlkcHRQdHNFdGModCxlKSx2PXkubWlkcHRQdHMseD15LnZlY3Rvck5vcm1JbnZlcnNlLGI9e3g6di54MSptK3YueDIqZyx5OnYueTEqbSt2LnkyKmd9O3Iuc2VncHRzLnB1c2goYi54K3gueCpwLGIueSt4LnkqcCksci5yYWRpaS5wdXNoKGEucGZWYWx1ZVtmXSE9PXZvaWQgMD9hLnBmVmFsdWVbZl06dSksci5pc0FyY1JhZGl1cy5wdXNoKChzLnBmVmFsdWVbZl0hPT12b2lkIDA/cy5wZlZhbHVlW2ZdOmgpPT09ImFyYy1yYWRpdXMiKX19O3FhLmZpbmRMb29wUG9pbnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuX3ByaXZhdGUucnNjcmF0Y2gsYT1lLmRpckNvdW50cyxzPWUuc3JjUG9zLGw9dC5wc3R5bGUoImNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzIiksdT1sP2wucGZWYWx1ZVswXTp2b2lkIDAsaD10LnBzdHlsZSgibG9vcC1kaXJlY3Rpb24iKS5wZlZhbHVlLGY9dC5wc3R5bGUoImxvb3Atc3dlZXAiKS5wZlZhbHVlLGQ9dC5wc3R5bGUoImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIikucGZWYWx1ZTtpLmVkZ2VUeXBlPSJzZWxmIjt2YXIgcD1yLG09ZDtuJiYocD0wLG09dSk7dmFyIGc9aC1NYXRoLlBJLzIseT1nLWYvMix2PWcrZi8yLHg9aCsiXyIrZjtwPWFbeF09PT12b2lkIDA/YVt4XT0wOisrYVt4XSxpLmN0cmxwdHM9W3MueCtNYXRoLmNvcyh5KSoxLjQqbSoocC8zKzEpLHMueStNYXRoLnNpbih5KSoxLjQqbSoocC8zKzEpLHMueCtNYXRoLmNvcyh2KSoxLjQqbSoocC8zKzEpLHMueStNYXRoLnNpbih2KSoxLjQqbSoocC8zKzEpXX07cWEuZmluZENvbXBvdW5kTG9vcFBvaW50cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10Ll9wcml2YXRlLnJzY3JhdGNoO2kuZWRnZVR5cGU9ImNvbXBvdW5kIjt2YXIgYT1lLnNyY1BvcyxzPWUudGd0UG9zLGw9ZS5zcmNXLHU9ZS5zcmNILGg9ZS50Z3RXLGY9ZS50Z3RILGQ9dC5wc3R5bGUoImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIikucGZWYWx1ZSxwPXQucHN0eWxlKCJjb250cm9sLXBvaW50LWRpc3RhbmNlcyIpLG09cD9wLnBmVmFsdWVbMF06dm9pZCAwLGc9cix5PWQ7biYmKGc9MCx5PW0pO3ZhciB2PTUwLHg9e3g6YS54LWwvMix5OmEueS11LzJ9LGI9e3g6cy54LWgvMix5OnMueS1mLzJ9LHc9e3g6TWF0aC5taW4oeC54LGIueCkseTpNYXRoLm1pbih4LnksYi55KX0sXz0uNSxUPU1hdGgubWF4KF8sTWF0aC5sb2cobCouMDEpKSxFPU1hdGgubWF4KF8sTWF0aC5sb2coaCouMDEpKTtpLmN0cmxwdHM9W3cueCx3LnktKDErTWF0aC5wb3codiwxLjEyKS8xMDApKnkqKGcvMysxKSpULHcueC0oMStNYXRoLnBvdyh2LDEuMTIpLzEwMCkqeSooZy8zKzEpKkUsdy55XX07cWEuZmluZFN0cmFpZ2h0RWRnZVBvaW50cz1mdW5jdGlvbih0KXt0Ll9wcml2YXRlLnJzY3JhdGNoLmVkZ2VUeXBlPSJzdHJhaWdodCJ9O3FhLmZpbmRCZXppZXJQb2ludHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10Ll9wcml2YXRlLnJzY3JhdGNoLHM9dC5wc3R5bGUoImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIikucGZWYWx1ZSxsPXQucHN0eWxlKCJjb250cm9sLXBvaW50LWRpc3RhbmNlcyIpLHU9dC5wc3R5bGUoImNvbnRyb2wtcG9pbnQtd2VpZ2h0cyIpLGg9bCYmdT9NYXRoLm1pbihsLnZhbHVlLmxlbmd0aCx1LnZhbHVlLmxlbmd0aCk6MSxmPWw/bC5wZlZhbHVlWzBdOnZvaWQgMCxkPXUudmFsdWVbMF0scD1uO2EuZWRnZVR5cGU9cD8ibXVsdGliZXppZXIiOiJiZXppZXIiLGEuY3RybHB0cz1bXTtmb3IodmFyIG09MDttPGg7bSsrKXt2YXIgZz0oLjUtZS5lbGVzLmxlbmd0aC8yK3IpKnMqKGk/LTE6MSkseT12b2lkIDAsdj1sZ2UoZyk7cCYmKGY9bD9sLnBmVmFsdWVbbV06cyxkPXUudmFsdWVbbV0pLG4/eT1mOnk9ZiE9PXZvaWQgMD92KmY6dm9pZCAwO3ZhciB4PXkhPT12b2lkIDA/eTpnLGI9MS1kLHc9ZCxfPXRoaXMuZmluZE1pZHB0UHRzRXRjKHQsZSksVD1fLm1pZHB0UHRzLEU9Xy52ZWN0b3JOb3JtSW52ZXJzZSxMPXt4OlQueDEqYitULngyKncseTpULnkxKmIrVC55Mip3fTthLmN0cmxwdHMucHVzaChMLngrRS54KngsTC55K0UueSp4KX19O3FhLmZpbmRUYXhpUG9pbnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fcHJpdmF0ZS5yc2NyYXRjaDtyLmVkZ2VUeXBlPSJzZWdtZW50cyI7dmFyIG49InZlcnRpY2FsIixpPSJob3Jpem9udGFsIixhPSJsZWZ0d2FyZCIscz0icmlnaHR3YXJkIixsPSJkb3dud2FyZCIsdT0idXB3YXJkIixoPSJhdXRvIixmPWUucG9zUHRzLGQ9ZS5zcmNXLHA9ZS5zcmNILG09ZS50Z3RXLGc9ZS50Z3RILHk9dC5wc3R5bGUoImVkZ2UtZGlzdGFuY2VzIikudmFsdWUsdj15IT09Im5vZGUtcG9zaXRpb24iLHg9dC5wc3R5bGUoInRheGktZGlyZWN0aW9uIikudmFsdWUsYj14LHc9dC5wc3R5bGUoInRheGktdHVybiIpLF89dy51bml0cz09PSIlIixUPXcucGZWYWx1ZSxFPVQ8MCxMPXQucHN0eWxlKCJ0YXhpLXR1cm4tbWluLWRpc3RhbmNlIikucGZWYWx1ZSxTPXY/KGQrbSkvMjowLEE9dj8ocCtnKS8yOjAsST1mLngyLWYueDEsRD1mLnkyLWYueTEsaz1vKGZ1bmN0aW9uKGllLEVlKXtyZXR1cm4gaWU+MD9NYXRoLm1heChpZS1FZSwwKTpNYXRoLm1pbihpZStFZSwwKX0sInN1YkRXSCIpLFI9ayhJLFMpLEM9ayhELEEpLE89ITE7Yj09PWg/eD1NYXRoLmFicyhSKT5NYXRoLmFicyhDKT9pOm46Yj09PXV8fGI9PT1sPyh4PW4sTz0hMCk6KGI9PT1hfHxiPT09cykmJih4PWksTz0hMCk7dmFyIE49eD09PW4sUD1OP0M6UixGPU4/RDpJLEI9bGdlKEYpLEc9ITE7IShPJiYoX3x8RSkpJiYoYj09PWwmJkY8MHx8Yj09PXUmJkY+MHx8Yj09PWEmJkY+MHx8Yj09PXMmJkY8MCkmJihCKj0tMSxQPUIqTWF0aC5hYnMoUCksRz0hMCk7dmFyIHo7aWYoXyl7dmFyIFc9VDwwPzErVDpUO3o9VypQfWVsc2V7dmFyIFo9VDwwP1A6MDt6PVorVCpCfXZhciBqPW8oZnVuY3Rpb24oaWUpe3JldHVybiBNYXRoLmFicyhpZSk8THx8TWF0aC5hYnMoaWUpPj1NYXRoLmFicyhQKX0sImdldElzVG9vQ2xvc2UiKSxvZT1qKHopLEs9aihNYXRoLmFicyhQKS1NYXRoLmFicyh6KSksZWU9b2V8fEs7aWYoZWUmJiFHKWlmKE4pe3ZhciBKPU1hdGguYWJzKEYpPD1wLzIsSD1NYXRoLmFicyhJKTw9bS8yO2lmKEope3ZhciBxPShmLngxK2YueDIpLzIsUT1mLnkxLGFlPWYueTI7ci5zZWdwdHM9W3EsUSxxLGFlXX1lbHNlIGlmKEgpe3ZhciB1ZT0oZi55MStmLnkyKS8yLGNlPWYueDEsdGU9Zi54MjtyLnNlZ3B0cz1bY2UsdWUsdGUsdWVdfWVsc2Ugci5zZWdwdHM9W2YueDEsZi55Ml19ZWxzZXt2YXIgTmU9TWF0aC5hYnMoRik8PWQvMixzZT1NYXRoLmFicyhEKTw9Zy8yO2lmKE5lKXt2YXIga2U9KGYueTErZi55MikvMixSZT1mLngxLENlPWYueDI7ci5zZWdwdHM9W1JlLGtlLENlLGtlXX1lbHNlIGlmKHNlKXt2YXIgUGU9KGYueDErZi54MikvMixJZT1mLnkxLCRlPWYueTI7ci5zZWdwdHM9W1BlLEllLFBlLCRlXX1lbHNlIHIuc2VncHRzPVtmLngyLGYueTFdfWVsc2UgaWYoTil7dmFyIHllPWYueTEreisodj9wLzIqQjowKSxYPWYueDEsZmU9Zi54MjtyLnNlZ3B0cz1bWCx5ZSxmZSx5ZV19ZWxzZXt2YXIgaGU9Zi54MSt6Kyh2P2QvMipCOjApLGdlPWYueTEsbmU9Zi55MjtyLnNlZ3B0cz1baGUsZ2UsaGUsbmVdfWlmKHIuaXNSb3VuZCl7dmFyIHZlPXQucHN0eWxlKCJ0YXhpLXJhZGl1cyIpLnZhbHVlLFU9dC5wc3R5bGUoInJhZGl1cy10eXBlIikudmFsdWVbMF09PT0iYXJjLXJhZGl1cyI7ci5yYWRpaT1uZXcgQXJyYXkoci5zZWdwdHMubGVuZ3RoLzIpLmZpbGwodmUpLHIuaXNBcmNSYWRpdXM9bmV3IEFycmF5KHIuc2VncHRzLmxlbmd0aC8yKS5maWxsKFUpfX07cWEudHJ5VG9Db3JyZWN0SW52YWxpZFBvaW50cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX3ByaXZhdGUucnNjcmF0Y2g7aWYoci5lZGdlVHlwZT09PSJiZXppZXIiKXt2YXIgbj1lLnNyY1BvcyxpPWUudGd0UG9zLGE9ZS5zcmNXLHM9ZS5zcmNILGw9ZS50Z3RXLHU9ZS50Z3RILGg9ZS5zcmNTaGFwZSxmPWUudGd0U2hhcGUsZD1lLnNyY0Nvcm5lclJhZGl1cyxwPWUudGd0Q29ybmVyUmFkaXVzLG09ZS5zcmNScyxnPWUudGd0UnMseT0heHQoci5zdGFydFgpfHwheHQoci5zdGFydFkpLHY9IXh0KHIuYXJyb3dTdGFydFgpfHwheHQoci5hcnJvd1N0YXJ0WSkseD0heHQoci5lbmRYKXx8IXh0KHIuZW5kWSksYj0heHQoci5hcnJvd0VuZFgpfHwheHQoci5hcnJvd0VuZFkpLHc9MyxfPXRoaXMuZ2V0QXJyb3dXaWR0aCh0LnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLHQucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlKSp0aGlzLmFycm93U2hhcGVXaWR0aCxUPXcqXyxFPUswKHt4OnIuY3RybHB0c1swXSx5OnIuY3RybHB0c1sxXX0se3g6ci5zdGFydFgseTpyLnN0YXJ0WX0pLEw9RTxULFM9SzAoe3g6ci5jdHJscHRzWzBdLHk6ci5jdHJscHRzWzFdfSx7eDpyLmVuZFgseTpyLmVuZFl9KSxBPVM8VCxJPSExO2lmKHl8fHZ8fEwpe0k9ITA7dmFyIEQ9e3g6ci5jdHJscHRzWzBdLW4ueCx5OnIuY3RybHB0c1sxXS1uLnl9LGs9TWF0aC5zcXJ0KEQueCpELngrRC55KkQueSksUj17eDpELngvayx5OkQueS9rfSxDPU1hdGgubWF4KGEscyksTz17eDpyLmN0cmxwdHNbMF0rUi54KjIqQyx5OnIuY3RybHB0c1sxXStSLnkqMipDfSxOPWguaW50ZXJzZWN0TGluZShuLngsbi55LGEscyxPLngsTy55LDAsZCxtKTtMPyhyLmN0cmxwdHNbMF09ci5jdHJscHRzWzBdK1IueCooVC1FKSxyLmN0cmxwdHNbMV09ci5jdHJscHRzWzFdK1IueSooVC1FKSk6KHIuY3RybHB0c1swXT1OWzBdK1IueCpULHIuY3RybHB0c1sxXT1OWzFdK1IueSpUKX1pZih4fHxifHxBKXtJPSEwO3ZhciBQPXt4OnIuY3RybHB0c1swXS1pLngseTpyLmN0cmxwdHNbMV0taS55fSxGPU1hdGguc3FydChQLngqUC54K1AueSpQLnkpLEI9e3g6UC54L0YseTpQLnkvRn0sRz1NYXRoLm1heChhLHMpLHo9e3g6ci5jdHJscHRzWzBdK0IueCoyKkcseTpyLmN0cmxwdHNbMV0rQi55KjIqR30sVz1mLmludGVyc2VjdExpbmUoaS54LGkueSxsLHUsei54LHoueSwwLHAsZyk7QT8oci5jdHJscHRzWzBdPXIuY3RybHB0c1swXStCLngqKFQtUyksci5jdHJscHRzWzFdPXIuY3RybHB0c1sxXStCLnkqKFQtUykpOihyLmN0cmxwdHNbMF09V1swXStCLngqVCxyLmN0cmxwdHNbMV09V1sxXStCLnkqVCl9SSYmdGhpcy5maW5kRW5kcG9pbnRzKHQpfX07cWEuc3RvcmVBbGxwdHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fcHJpdmF0ZS5yc2NyYXRjaDtpZihlLmVkZ2VUeXBlPT09Im11bHRpYmV6aWVyInx8ZS5lZGdlVHlwZT09PSJiZXppZXIifHxlLmVkZ2VUeXBlPT09InNlbGYifHxlLmVkZ2VUeXBlPT09ImNvbXBvdW5kIil7ZS5hbGxwdHM9W10sZS5hbGxwdHMucHVzaChlLnN0YXJ0WCxlLnN0YXJ0WSk7Zm9yKHZhciByPTA7cisxPGUuY3RybHB0cy5sZW5ndGg7cis9MillLmFsbHB0cy5wdXNoKGUuY3RybHB0c1tyXSxlLmN0cmxwdHNbcisxXSksciszPGUuY3RybHB0cy5sZW5ndGgmJmUuYWxscHRzLnB1c2goKGUuY3RybHB0c1tyXStlLmN0cmxwdHNbcisyXSkvMiwoZS5jdHJscHRzW3IrMV0rZS5jdHJscHRzW3IrM10pLzIpO2UuYWxscHRzLnB1c2goZS5lbmRYLGUuZW5kWSk7dmFyIG4saTtlLmN0cmxwdHMubGVuZ3RoLzIlMj09PTA/KG49ZS5hbGxwdHMubGVuZ3RoLzItMSxlLm1pZFg9ZS5hbGxwdHNbbl0sZS5taWRZPWUuYWxscHRzW24rMV0pOihuPWUuYWxscHRzLmxlbmd0aC8yLTMsaT0uNSxlLm1pZFg9bGEoZS5hbGxwdHNbbl0sZS5hbGxwdHNbbisyXSxlLmFsbHB0c1tuKzRdLGkpLGUubWlkWT1sYShlLmFsbHB0c1tuKzFdLGUuYWxscHRzW24rM10sZS5hbGxwdHNbbis1XSxpKSl9ZWxzZSBpZihlLmVkZ2VUeXBlPT09InN0cmFpZ2h0IillLmFsbHB0cz1bZS5zdGFydFgsZS5zdGFydFksZS5lbmRYLGUuZW5kWV0sZS5taWRYPShlLnN0YXJ0WCtlLmVuZFgrZS5hcnJvd1N0YXJ0WCtlLmFycm93RW5kWCkvNCxlLm1pZFk9KGUuc3RhcnRZK2UuZW5kWStlLmFycm93U3RhcnRZK2UuYXJyb3dFbmRZKS80O2Vsc2UgaWYoZS5lZGdlVHlwZT09PSJzZWdtZW50cyIpe2lmKGUuYWxscHRzPVtdLGUuYWxscHRzLnB1c2goZS5zdGFydFgsZS5zdGFydFkpLGUuYWxscHRzLnB1c2guYXBwbHkoZS5hbGxwdHMsZS5zZWdwdHMpLGUuYWxscHRzLnB1c2goZS5lbmRYLGUuZW5kWSksZS5pc1JvdW5kKXtlLnJvdW5kQ29ybmVycz1bXTtmb3IodmFyIGE9MjthKzM8ZS5hbGxwdHMubGVuZ3RoO2ErPTIpe3ZhciBzPWUucmFkaWlbYS8yLTFdLGw9ZS5pc0FyY1JhZGl1c1thLzItMV07ZS5yb3VuZENvcm5lcnMucHVzaChUQih7eDplLmFsbHB0c1thLTJdLHk6ZS5hbGxwdHNbYS0xXX0se3g6ZS5hbGxwdHNbYV0seTplLmFsbHB0c1thKzFdLHJhZGl1czpzfSx7eDplLmFsbHB0c1thKzJdLHk6ZS5hbGxwdHNbYSszXX0scyxsKSl9fWlmKGUuc2VncHRzLmxlbmd0aCU0PT09MCl7dmFyIHU9ZS5zZWdwdHMubGVuZ3RoLzIsaD11LTI7ZS5taWRYPShlLnNlZ3B0c1toXStlLnNlZ3B0c1t1XSkvMixlLm1pZFk9KGUuc2VncHRzW2grMV0rZS5zZWdwdHNbdSsxXSkvMn1lbHNle3ZhciBmPWUuc2VncHRzLmxlbmd0aC8yLTE7aWYoIWUuaXNSb3VuZCllLm1pZFg9ZS5zZWdwdHNbZl0sZS5taWRZPWUuc2VncHRzW2YrMV07ZWxzZXt2YXIgZD17eDplLnNlZ3B0c1tmXSx5OmUuc2VncHRzW2YrMV19LHA9ZS5yb3VuZENvcm5lcnNbZi8yXSxtPVtkLngtcC5jeCxkLnktcC5jeV0sZz1wLnJhZGl1cy9NYXRoLnNxcnQoTWF0aC5wb3cobVswXSwyKStNYXRoLnBvdyhtWzFdLDIpKTttPW0ubWFwKGZ1bmN0aW9uKHkpe3JldHVybiB5Kmd9KSxlLm1pZFg9cC5jeCttWzBdLGUubWlkWT1wLmN5K21bMV0sZS5taWRWZWN0b3I9bX19fX07cWEuY2hlY2tGb3JJbnZhbGlkRWRnZVdhcm5pbmc9ZnVuY3Rpb24odCl7dmFyIGU9dFswXS5fcHJpdmF0ZS5yc2NyYXRjaDtlLm5vZGVzT3ZlcmxhcHx8eHQoZS5zdGFydFgpJiZ4dChlLnN0YXJ0WSkmJnh0KGUuZW5kWCkmJnh0KGUuZW5kWSk/ZS5sb2dnZWRFcnI9ITE6ZS5sb2dnZWRFcnJ8fChlLmxvZ2dlZEVycj0hMCxvbigiRWRnZSBgIit0LmlkKCkrImAgaGFzIGludmFsaWQgZW5kcG9pbnRzIGFuZCBzbyBpdCBpcyBpbXBvc3NpYmxlIHRvIGRyYXcuICBBZGp1c3QgeW91ciBlZGdlIHN0eWxlIChlLmcuIGNvbnRyb2wgcG9pbnRzKSBhY2NvcmRpbmdseSBvciB1c2UgYW4gYWx0ZXJuYXRpdmUgZWRnZSB0eXBlLiAgVGhpcyBpcyBleHBlY3RlZCBiZWhhdmlvdXIgd2hlbiB0aGUgc291cmNlIG5vZGUgYW5kIHRoZSB0YXJnZXQgbm9kZSBvdmVybGFwLiIpKX07cWEuZmluZEVkZ2VDb250cm9sUG9pbnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoISghdHx8dC5sZW5ndGg9PT0wKSl7Zm9yKHZhciByPXRoaXMsbj1yLmN5LGk9bi5oYXNDb21wb3VuZE5vZGVzKCksYT17bWFwOm5ldyBKYyxnZXQ6byhmdW5jdGlvbihMKXt2YXIgUz10aGlzLm1hcC5nZXQoTFswXSk7cmV0dXJuIFMhPW51bGw/Uy5nZXQoTFsxXSk6bnVsbH0sImdldCIpLHNldDpvKGZ1bmN0aW9uKEwsUyl7dmFyIEE9dGhpcy5tYXAuZ2V0KExbMF0pO0E9PW51bGwmJihBPW5ldyBKYyx0aGlzLm1hcC5zZXQoTFswXSxBKSksQS5zZXQoTFsxXSxTKX0sInNldCIpfSxzPVtdLGw9W10sdT0wO3U8dC5sZW5ndGg7dSsrKXt2YXIgaD10W3VdLGY9aC5fcHJpdmF0ZSxkPWgucHN0eWxlKCJjdXJ2ZS1zdHlsZSIpLnZhbHVlO2lmKCEoaC5yZW1vdmVkKCl8fCFoLnRha2VzVXBTcGFjZSgpKSl7aWYoZD09PSJoYXlzdGFjayIpe2wucHVzaChoKTtjb250aW51ZX12YXIgcD1kPT09InVuYnVuZGxlZC1iZXppZXIifHxkLmVuZHNXaXRoKCJzZWdtZW50cyIpfHxkPT09InN0cmFpZ2h0Inx8ZD09PSJzdHJhaWdodC10cmlhbmdsZSJ8fGQuZW5kc1dpdGgoInRheGkiKSxtPWQ9PT0idW5idW5kbGVkLWJlemllciJ8fGQ9PT0iYmV6aWVyIixnPWYuc291cmNlLHk9Zi50YXJnZXQsdj1nLnBvb2xJbmRleCgpLHg9eS5wb29sSW5kZXgoKSxiPVt2LHhdLnNvcnQoKSx3PWEuZ2V0KGIpO3c9PW51bGwmJih3PXtlbGVzOltdfSxhLnNldChiLHcpLHMucHVzaChiKSksdy5lbGVzLnB1c2goaCkscCYmKHcuaGFzVW5idW5kbGVkPSEwKSxtJiYody5oYXNCZXppZXI9ITApfX1mb3IodmFyIF89byhmdW5jdGlvbihMKXt2YXIgUz1zW0xdLEE9YS5nZXQoUyksST12b2lkIDA7aWYoIUEuaGFzVW5idW5kbGVkKXt2YXIgRD1BLmVsZXNbMF0ucGFyYWxsZWxFZGdlcygpLmZpbHRlcihmdW5jdGlvbihoZSl7cmV0dXJuIGhlLmlzQnVuZGxlZEJlemllcigpfSk7b0IoQS5lbGVzKSxELmZvckVhY2goZnVuY3Rpb24oaGUpe3JldHVybiBBLmVsZXMucHVzaChoZSl9KSxBLmVsZXMuc29ydChmdW5jdGlvbihoZSxnZSl7cmV0dXJuIGhlLnBvb2xJbmRleCgpLWdlLnBvb2xJbmRleCgpfSl9dmFyIGs9QS5lbGVzWzBdLFI9ay5zb3VyY2UoKSxDPWsudGFyZ2V0KCk7aWYoUi5wb29sSW5kZXgoKT5DLnBvb2xJbmRleCgpKXt2YXIgTz1SO1I9QyxDPU99dmFyIE49QS5zcmNQb3M9Ui5wb3NpdGlvbigpLFA9QS50Z3RQb3M9Qy5wb3NpdGlvbigpLEY9QS5zcmNXPVIub3V0ZXJXaWR0aCgpLEI9QS5zcmNIPVIub3V0ZXJIZWlnaHQoKSxHPUEudGd0Vz1DLm91dGVyV2lkdGgoKSx6PUEudGd0SD1DLm91dGVySGVpZ2h0KCksVz1BLnNyY1NoYXBlPXIubm9kZVNoYXBlc1tlLmdldE5vZGVTaGFwZShSKV0sWj1BLnRndFNoYXBlPXIubm9kZVNoYXBlc1tlLmdldE5vZGVTaGFwZShDKV0saj1BLnNyY0Nvcm5lclJhZGl1cz1SLnBzdHlsZSgiY29ybmVyLXJhZGl1cyIpLnZhbHVlPT09ImF1dG8iPyJhdXRvIjpSLnBzdHlsZSgiY29ybmVyLXJhZGl1cyIpLnBmVmFsdWUsb2U9QS50Z3RDb3JuZXJSYWRpdXM9Qy5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS52YWx1ZT09PSJhdXRvIj8iYXV0byI6Qy5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS5wZlZhbHVlLEs9QS50Z3RScz1DLl9wcml2YXRlLnJzY3JhdGNoLGVlPUEuc3JjUnM9Ui5fcHJpdmF0ZS5yc2NyYXRjaDtBLmRpckNvdW50cz17bm9ydGg6MCx3ZXN0OjAsc291dGg6MCxlYXN0OjAsbm9ydGh3ZXN0OjAsc291dGh3ZXN0OjAsbm9ydGhlYXN0OjAsc291dGhlYXN0OjB9O2Zvcih2YXIgSj0wO0o8QS5lbGVzLmxlbmd0aDtKKyspe3ZhciBIPUEuZWxlc1tKXSxxPUhbMF0uX3ByaXZhdGUucnNjcmF0Y2gsUT1ILnBzdHlsZSgiY3VydmUtc3R5bGUiKS52YWx1ZSxhZT1RPT09InVuYnVuZGxlZC1iZXppZXIifHxRLmVuZHNXaXRoKCJzZWdtZW50cyIpfHxRLmVuZHNXaXRoKCJ0YXhpIiksdWU9IVIuc2FtZShILnNvdXJjZSgpKTtpZighQS5jYWxjdWxhdGVkSW50ZXJzZWN0aW9uJiZSIT09QyYmKEEuaGFzQmV6aWVyfHxBLmhhc1VuYnVuZGxlZCkpe0EuY2FsY3VsYXRlZEludGVyc2VjdGlvbj0hMDt2YXIgY2U9Vy5pbnRlcnNlY3RMaW5lKE4ueCxOLnksRixCLFAueCxQLnksMCxqLGVlKSx0ZT1BLnNyY0ludG49Y2UsTmU9Wi5pbnRlcnNlY3RMaW5lKFAueCxQLnksRyx6LE4ueCxOLnksMCxvZSxLKSxzZT1BLnRndEludG49TmUsa2U9QS5pbnRlcnNlY3Rpb25QdHM9e3gxOmNlWzBdLHgyOk5lWzBdLHkxOmNlWzFdLHkyOk5lWzFdfSxSZT1BLnBvc1B0cz17eDE6Ti54LHgyOlAueCx5MTpOLnkseTI6UC55fSxDZT1OZVsxXS1jZVsxXSxQZT1OZVswXS1jZVswXSxJZT1NYXRoLnNxcnQoUGUqUGUrQ2UqQ2UpLCRlPUEudmVjdG9yPXt4OlBlLHk6Q2V9LHllPUEudmVjdG9yTm9ybT17eDokZS54L0llLHk6JGUueS9JZX0sWD17eDoteWUueSx5OnllLnh9O0Eubm9kZXNPdmVybGFwPSF4dChJZSl8fFouY2hlY2tQb2ludChjZVswXSxjZVsxXSwwLEcseixQLngsUC55LG9lLEspfHxXLmNoZWNrUG9pbnQoTmVbMF0sTmVbMV0sMCxGLEIsTi54LE4ueSxqLGVlKSxBLnZlY3Rvck5vcm1JbnZlcnNlPVgsST17bm9kZXNPdmVybGFwOkEubm9kZXNPdmVybGFwLGRpckNvdW50czpBLmRpckNvdW50cyxjYWxjdWxhdGVkSW50ZXJzZWN0aW9uOiEwLGhhc0JlemllcjpBLmhhc0JlemllcixoYXNVbmJ1bmRsZWQ6QS5oYXNVbmJ1bmRsZWQsZWxlczpBLmVsZXMsc3JjUG9zOlAsdGd0UG9zOk4sc3JjVzpHLHNyY0g6eix0Z3RXOkYsdGd0SDpCLHNyY0ludG46c2UsdGd0SW50bjp0ZSxzcmNTaGFwZTpaLHRndFNoYXBlOlcscG9zUHRzOnt4MTpSZS54Mix5MTpSZS55Mix4MjpSZS54MSx5MjpSZS55MX0saW50ZXJzZWN0aW9uUHRzOnt4MTprZS54Mix5MTprZS55Mix4MjprZS54MSx5MjprZS55MX0sdmVjdG9yOnt4Oi0kZS54LHk6LSRlLnl9LHZlY3Rvck5vcm06e3g6LXllLngseToteWUueX0sdmVjdG9yTm9ybUludmVyc2U6e3g6LVgueCx5Oi1YLnl9fX12YXIgZmU9dWU/STpBO3Eubm9kZXNPdmVybGFwPWZlLm5vZGVzT3ZlcmxhcCxxLnNyY0ludG49ZmUuc3JjSW50bixxLnRndEludG49ZmUudGd0SW50bixxLmlzUm91bmQ9US5zdGFydHNXaXRoKCJyb3VuZCIpLGkmJihSLmlzUGFyZW50KCl8fFIuaXNDaGlsZCgpfHxDLmlzUGFyZW50KCl8fEMuaXNDaGlsZCgpKSYmKFIucGFyZW50cygpLmFueVNhbWUoQyl8fEMucGFyZW50cygpLmFueVNhbWUoUil8fFIuc2FtZShDKSYmUi5pc1BhcmVudCgpKT9lLmZpbmRDb21wb3VuZExvb3BQb2ludHMoSCxmZSxKLGFlKTpSPT09Qz9lLmZpbmRMb29wUG9pbnRzKEgsZmUsSixhZSk6US5lbmRzV2l0aCgic2VnbWVudHMiKT9lLmZpbmRTZWdtZW50c1BvaW50cyhILGZlKTpRLmVuZHNXaXRoKCJ0YXhpIik/ZS5maW5kVGF4aVBvaW50cyhILGZlKTpRPT09InN0cmFpZ2h0Inx8IWFlJiZBLmVsZXMubGVuZ3RoJTI9PT0xJiZKPT09TWF0aC5mbG9vcihBLmVsZXMubGVuZ3RoLzIpP2UuZmluZFN0cmFpZ2h0RWRnZVBvaW50cyhIKTplLmZpbmRCZXppZXJQb2ludHMoSCxmZSxKLGFlLHVlKSxlLmZpbmRFbmRwb2ludHMoSCksZS50cnlUb0NvcnJlY3RJbnZhbGlkUG9pbnRzKEgsZmUpLGUuY2hlY2tGb3JJbnZhbGlkRWRnZVdhcm5pbmcoSCksZS5zdG9yZUFsbHB0cyhIKSxlLnN0b3JlRWRnZVByb2plY3Rpb25zKEgpLGUuY2FsY3VsYXRlQXJyb3dBbmdsZXMoSCksZS5yZWNhbGN1bGF0ZUVkZ2VMYWJlbFByb2plY3Rpb25zKEgpLGUuY2FsY3VsYXRlTGFiZWxBbmdsZXMoSCl9fSwiX2xvb3AiKSxUPTA7VDxzLmxlbmd0aDtUKyspXyhUKTt0aGlzLmZpbmRIYXlzdGFja1BvaW50cyhsKX19O28oYTFlLCJnZXRQdHMiKTtxYS5nZXRTZWdtZW50UG9pbnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0uX3ByaXZhdGUucnNjcmF0Y2gscj1lLmVkZ2VUeXBlO2lmKHI9PT0ic2VnbWVudHMiKXJldHVybiB0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh0KSxhMWUoZS5zZWdwdHMpfTtxYS5nZXRDb250cm9sUG9pbnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0uX3ByaXZhdGUucnNjcmF0Y2gscj1lLmVkZ2VUeXBlO2lmKHI9PT0iYmV6aWVyInx8cj09PSJtdWx0aWJlemllciJ8fHI9PT0ic2VsZiJ8fHI9PT0iY29tcG91bmQiKXJldHVybiB0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh0KSxhMWUoZS5jdHJscHRzKX07cWEuZ2V0RWRnZU1pZHBvaW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0uX3ByaXZhdGUucnNjcmF0Y2g7cmV0dXJuIHRoaXMucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKHQpLHt4OmUubWlkWCx5OmUubWlkWX19O3hiPXt9O3hiLm1hbnVhbEVuZHB0VG9QeD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj10LnBvc2l0aW9uKCksaT10Lm91dGVyV2lkdGgoKSxhPXQub3V0ZXJIZWlnaHQoKSxzPXQuX3ByaXZhdGUucnNjcmF0Y2g7aWYoZS52YWx1ZS5sZW5ndGg9PT0yKXt2YXIgbD1bZS5wZlZhbHVlWzBdLGUucGZWYWx1ZVsxXV07cmV0dXJuIGUudW5pdHNbMF09PT0iJSImJihsWzBdPWxbMF0qaSksZS51bml0c1sxXT09PSIlIiYmKGxbMV09bFsxXSphKSxsWzBdKz1uLngsbFsxXSs9bi55LGx9ZWxzZXt2YXIgdT1lLnBmVmFsdWVbMF07dT0tTWF0aC5QSS8yK3U7dmFyIGg9MipNYXRoLm1heChpLGEpLGY9W24ueCtNYXRoLmNvcyh1KSpoLG4ueStNYXRoLnNpbih1KSpoXTtyZXR1cm4gci5ub2RlU2hhcGVzW3RoaXMuZ2V0Tm9kZVNoYXBlKHQpXS5pbnRlcnNlY3RMaW5lKG4ueCxuLnksaSxhLGZbMF0sZlsxXSwwLHQucHN0eWxlKCJjb3JuZXItcmFkaXVzIikudmFsdWU9PT0iYXV0byI/ImF1dG8iOnQucHN0eWxlKCJjb3JuZXItcmFkaXVzIikucGZWYWx1ZSxzKX19O3hiLmZpbmRFbmRwb2ludHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyLG49dC5zb3VyY2UoKVswXSxpPXQudGFyZ2V0KClbMF0sYT1uLnBvc2l0aW9uKCkscz1pLnBvc2l0aW9uKCksbD10LnBzdHlsZSgidGFyZ2V0LWFycm93LXNoYXBlIikudmFsdWUsdT10LnBzdHlsZSgic291cmNlLWFycm93LXNoYXBlIikudmFsdWUsaD10LnBzdHlsZSgidGFyZ2V0LWRpc3RhbmNlLWZyb20tbm9kZSIpLnBmVmFsdWUsZj10LnBzdHlsZSgic291cmNlLWRpc3RhbmNlLWZyb20tbm9kZSIpLnBmVmFsdWUsZD1uLl9wcml2YXRlLnJzY3JhdGNoLHA9aS5fcHJpdmF0ZS5yc2NyYXRjaCxtPXQucHN0eWxlKCJjdXJ2ZS1zdHlsZSIpLnZhbHVlLGc9dC5fcHJpdmF0ZS5yc2NyYXRjaCx5PWcuZWRnZVR5cGUsdj1tPT09InRheGkiLHg9eT09PSJzZWxmInx8eT09PSJjb21wb3VuZCIsYj15PT09ImJlemllciJ8fHk9PT0ibXVsdGliZXppZXIifHx4LHc9eSE9PSJiZXppZXIiLF89eT09PSJzdHJhaWdodCJ8fHk9PT0ic2VnbWVudHMiLFQ9eT09PSJzZWdtZW50cyIsRT1ifHx3fHxfLEw9eHx8dixTPXQucHN0eWxlKCJzb3VyY2UtZW5kcG9pbnQiKSxBPUw/Im91dHNpZGUtdG8tbm9kZSI6Uy52YWx1ZSxJPW4ucHN0eWxlKCJjb3JuZXItcmFkaXVzIikudmFsdWU9PT0iYXV0byI/ImF1dG8iOm4ucHN0eWxlKCJjb3JuZXItcmFkaXVzIikucGZWYWx1ZSxEPXQucHN0eWxlKCJ0YXJnZXQtZW5kcG9pbnQiKSxrPUw/Im91dHNpZGUtdG8tbm9kZSI6RC52YWx1ZSxSPWkucHN0eWxlKCJjb3JuZXItcmFkaXVzIikudmFsdWU9PT0iYXV0byI/ImF1dG8iOmkucHN0eWxlKCJjb3JuZXItcmFkaXVzIikucGZWYWx1ZTtnLnNyY01hbkVuZHB0PVMsZy50Z3RNYW5FbmRwdD1EO3ZhciBDLE8sTixQO2lmKGIpe3ZhciBGPVtnLmN0cmxwdHNbMF0sZy5jdHJscHRzWzFdXSxCPXc/W2cuY3RybHB0c1tnLmN0cmxwdHMubGVuZ3RoLTJdLGcuY3RybHB0c1tnLmN0cmxwdHMubGVuZ3RoLTFdXTpGO0M9QixPPUZ9ZWxzZSBpZihfKXt2YXIgRz1UP2cuc2VncHRzLnNsaWNlKDAsMik6W3MueCxzLnldLHo9VD9nLnNlZ3B0cy5zbGljZShnLnNlZ3B0cy5sZW5ndGgtMik6W2EueCxhLnldO0M9eixPPUd9aWYoaz09PSJpbnNpZGUtdG8tbm9kZSIpcj1bcy54LHMueV07ZWxzZSBpZihELnVuaXRzKXI9dGhpcy5tYW51YWxFbmRwdFRvUHgoaSxEKTtlbHNlIGlmKGs9PT0ib3V0c2lkZS10by1saW5lIilyPWcudGd0SW50bjtlbHNlIGlmKGs9PT0ib3V0c2lkZS10by1ub2RlInx8az09PSJvdXRzaWRlLXRvLW5vZGUtb3ItbGFiZWwiP049Qzooaz09PSJvdXRzaWRlLXRvLWxpbmUifHxrPT09Im91dHNpZGUtdG8tbGluZS1vci1sYWJlbCIpJiYoTj1bYS54LGEueV0pLHI9ZS5ub2RlU2hhcGVzW3RoaXMuZ2V0Tm9kZVNoYXBlKGkpXS5pbnRlcnNlY3RMaW5lKHMueCxzLnksaS5vdXRlcldpZHRoKCksaS5vdXRlckhlaWdodCgpLE5bMF0sTlsxXSwwLFIscCksaz09PSJvdXRzaWRlLXRvLW5vZGUtb3ItbGFiZWwifHxrPT09Im91dHNpZGUtdG8tbGluZS1vci1sYWJlbCIpe3ZhciBXPWkuX3ByaXZhdGUucnNjcmF0Y2gsWj1XLmxhYmVsV2lkdGgsaj1XLmxhYmVsSGVpZ2h0LG9lPVcubGFiZWxYLEs9Vy5sYWJlbFksZWU9Wi8yLEo9ai8yLEg9aS5wc3R5bGUoInRleHQtdmFsaWduIikudmFsdWU7SD09PSJ0b3AiP0stPUo6SD09PSJib3R0b20iJiYoSys9Sik7dmFyIHE9aS5wc3R5bGUoInRleHQtaGFsaWduIikudmFsdWU7cT09PSJsZWZ0Ij9vZS09ZWU6cT09PSJyaWdodCImJihvZSs9ZWUpO3ZhciBRPW9iKE5bMF0sTlsxXSxbb2UtZWUsSy1KLG9lK2VlLEstSixvZStlZSxLK0osb2UtZWUsSytKXSxzLngscy55KTtpZihRLmxlbmd0aD4wKXt2YXIgYWU9YSx1ZT1VMChhZSxtMShyKSksY2U9VTAoYWUsbTEoUSkpLHRlPXVlO2lmKGNlPHVlJiYocj1RLHRlPWNlKSxRLmxlbmd0aD4yKXt2YXIgTmU9VTAoYWUse3g6UVsyXSx5OlFbM119KTtOZTx0ZSYmKHI9W1FbMl0sUVszXV0pfX19dmFyIHNlPW82KHIsQyxlLmFycm93U2hhcGVzW2xdLnNwYWNpbmcodCkraCksa2U9bzYocixDLGUuYXJyb3dTaGFwZXNbbF0uZ2FwKHQpK2gpO2lmKGcuZW5kWD1rZVswXSxnLmVuZFk9a2VbMV0sZy5hcnJvd0VuZFg9c2VbMF0sZy5hcnJvd0VuZFk9c2VbMV0sQT09PSJpbnNpZGUtdG8tbm9kZSIpcj1bYS54LGEueV07ZWxzZSBpZihTLnVuaXRzKXI9dGhpcy5tYW51YWxFbmRwdFRvUHgobixTKTtlbHNlIGlmKEE9PT0ib3V0c2lkZS10by1saW5lIilyPWcuc3JjSW50bjtlbHNlIGlmKEE9PT0ib3V0c2lkZS10by1ub2RlInx8QT09PSJvdXRzaWRlLXRvLW5vZGUtb3ItbGFiZWwiP1A9TzooQT09PSJvdXRzaWRlLXRvLWxpbmUifHxBPT09Im91dHNpZGUtdG8tbGluZS1vci1sYWJlbCIpJiYoUD1bcy54LHMueV0pLHI9ZS5ub2RlU2hhcGVzW3RoaXMuZ2V0Tm9kZVNoYXBlKG4pXS5pbnRlcnNlY3RMaW5lKGEueCxhLnksbi5vdXRlcldpZHRoKCksbi5vdXRlckhlaWdodCgpLFBbMF0sUFsxXSwwLEksZCksQT09PSJvdXRzaWRlLXRvLW5vZGUtb3ItbGFiZWwifHxBPT09Im91dHNpZGUtdG8tbGluZS1vci1sYWJlbCIpe3ZhciBSZT1uLl9wcml2YXRlLnJzY3JhdGNoLENlPVJlLmxhYmVsV2lkdGgsUGU9UmUubGFiZWxIZWlnaHQsSWU9UmUubGFiZWxYLCRlPVJlLmxhYmVsWSx5ZT1DZS8yLFg9UGUvMixmZT1uLnBzdHlsZSgidGV4dC12YWxpZ24iKS52YWx1ZTtmZT09PSJ0b3AiPyRlLT1YOmZlPT09ImJvdHRvbSImJigkZSs9WCk7dmFyIGhlPW4ucHN0eWxlKCJ0ZXh0LWhhbGlnbiIpLnZhbHVlO2hlPT09ImxlZnQiP0llLT15ZTpoZT09PSJyaWdodCImJihJZSs9eWUpO3ZhciBnZT1vYihQWzBdLFBbMV0sW0llLXllLCRlLVgsSWUreWUsJGUtWCxJZSt5ZSwkZStYLEllLXllLCRlK1hdLGEueCxhLnkpO2lmKGdlLmxlbmd0aD4wKXt2YXIgbmU9cyx2ZT1VMChuZSxtMShyKSksVT1VMChuZSxtMShnZSkpLFRlPXZlO2lmKFU8dmUmJihyPVtnZVswXSxnZVsxXV0sVGU9VSksZ2UubGVuZ3RoPjIpe3ZhciBpZT1VMChuZSx7eDpnZVsyXSx5OmdlWzNdfSk7aWU8VGUmJihyPVtnZVsyXSxnZVszXV0pfX19dmFyIEVlPW82KHIsTyxlLmFycm93U2hhcGVzW3VdLnNwYWNpbmcodCkrZiksQWU9bzYocixPLGUuYXJyb3dTaGFwZXNbdV0uZ2FwKHQpK2YpO2cuc3RhcnRYPUFlWzBdLGcuc3RhcnRZPUFlWzFdLGcuYXJyb3dTdGFydFg9RWVbMF0sZy5hcnJvd1N0YXJ0WT1FZVsxXSxFJiYoIXh0KGcuc3RhcnRYKXx8IXh0KGcuc3RhcnRZKXx8IXh0KGcuZW5kWCl8fCF4dChnLmVuZFkpP2cuYmFkTGluZT0hMDpnLmJhZExpbmU9ITEpfTt4Yi5nZXRTb3VyY2VFbmRwb2ludD1mdW5jdGlvbih0KXt2YXIgZT10WzBdLl9wcml2YXRlLnJzY3JhdGNoO3N3aXRjaCh0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh0KSxlLmVkZ2VUeXBlKXtjYXNlImhheXN0YWNrIjpyZXR1cm57eDplLmhheXN0YWNrUHRzWzBdLHk6ZS5oYXlzdGFja1B0c1sxXX07ZGVmYXVsdDpyZXR1cm57eDplLmFycm93U3RhcnRYLHk6ZS5hcnJvd1N0YXJ0WX19fTt4Yi5nZXRUYXJnZXRFbmRwb2ludD1mdW5jdGlvbih0KXt2YXIgZT10WzBdLl9wcml2YXRlLnJzY3JhdGNoO3N3aXRjaCh0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh0KSxlLmVkZ2VUeXBlKXtjYXNlImhheXN0YWNrIjpyZXR1cm57eDplLmhheXN0YWNrUHRzWzJdLHk6ZS5oYXlzdGFja1B0c1szXX07ZGVmYXVsdDpyZXR1cm57eDplLmFycm93RW5kWCx5OmUuYXJyb3dFbmRZfX19O2tCPXt9O28odGV0LCJwdXNoQmV6aWVyUHRzIik7a0Iuc3RvcmVFZGdlUHJvamVjdGlvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fcHJpdmF0ZSxyPWUucnNjcmF0Y2gsbj1yLmVkZ2VUeXBlO2lmKGUucnN0eWxlLmJlemllclB0cz1udWxsLGUucnN0eWxlLmxpbmVQdHM9bnVsbCxlLnJzdHlsZS5oYXlzdGFja1B0cz1udWxsLG49PT0ibXVsdGliZXppZXIifHxuPT09ImJlemllciJ8fG49PT0ic2VsZiJ8fG49PT0iY29tcG91bmQiKXtlLnJzdHlsZS5iZXppZXJQdHM9W107Zm9yKHZhciBpPTA7aSs1PHIuYWxscHRzLmxlbmd0aDtpKz00KXRldCh0aGlzLHQsci5hbGxwdHMuc2xpY2UoaSxpKzYpKX1lbHNlIGlmKG49PT0ic2VnbWVudHMiKWZvcih2YXIgYT1lLnJzdHlsZS5saW5lUHRzPVtdLGk9MDtpKzE8ci5hbGxwdHMubGVuZ3RoO2krPTIpYS5wdXNoKHt4OnIuYWxscHRzW2ldLHk6ci5hbGxwdHNbaSsxXX0pO2Vsc2UgaWYobj09PSJoYXlzdGFjayIpe3ZhciBzPXIuaGF5c3RhY2tQdHM7ZS5yc3R5bGUuaGF5c3RhY2tQdHM9W3t4OnNbMF0seTpzWzFdfSx7eDpzWzJdLHk6c1szXX1dfWUucnN0eWxlLmFycm93V2lkdGg9dGhpcy5nZXRBcnJvd1dpZHRoKHQucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsdC5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUpKnRoaXMuYXJyb3dTaGFwZVdpZHRofTtrQi5yZWNhbGN1bGF0ZUVkZ2VQcm9qZWN0aW9ucz1mdW5jdGlvbih0KXt0aGlzLmZpbmRFZGdlQ29udHJvbFBvaW50cyh0KX07dHU9e307dHUucmVjYWxjdWxhdGVOb2RlTGFiZWxQcm9qZWN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXQucHN0eWxlKCJsYWJlbCIpLnN0clZhbHVlO2lmKCFJZihlKSl7dmFyIHIsbixpPXQuX3ByaXZhdGUsYT10LndpZHRoKCkscz10LmhlaWdodCgpLGw9dC5wYWRkaW5nKCksdT10LnBvc2l0aW9uKCksaD10LnBzdHlsZSgidGV4dC1oYWxpZ24iKS5zdHJWYWx1ZSxmPXQucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLnN0clZhbHVlLGQ9aS5yc2NyYXRjaCxwPWkucnN0eWxlO3N3aXRjaChoKXtjYXNlImxlZnQiOnI9dS54LWEvMi1sO2JyZWFrO2Nhc2UicmlnaHQiOnI9dS54K2EvMitsO2JyZWFrO2RlZmF1bHQ6cj11Lnh9c3dpdGNoKGYpe2Nhc2UidG9wIjpuPXUueS1zLzItbDticmVhaztjYXNlImJvdHRvbSI6bj11Lnkrcy8yK2w7YnJlYWs7ZGVmYXVsdDpuPXUueX1kLmxhYmVsWD1yLGQubGFiZWxZPW4scC5sYWJlbFg9cixwLmxhYmVsWT1uLHRoaXMuY2FsY3VsYXRlTGFiZWxBbmdsZXModCksdGhpcy5hcHBseUxhYmVsRGltZW5zaW9ucyh0KX19O3MxZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49TWF0aC5hdGFuKHIvZSk7cmV0dXJuIGU9PT0wJiZuPDAmJihuPW4qLTEpLG59LCJsaW5lQW5nbGVGcm9tRGVsdGEiKSxvMWU9byhmdW5jdGlvbihlLHIpe3ZhciBuPXIueC1lLngsaT1yLnktZS55O3JldHVybiBzMWUobixpKX0sImxpbmVBbmdsZSIpLHJldD1vKGZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXNiKDAsaS0uMDAxLDEpLHM9c2IoMCxpKy4wMDEsMSksbD15MShlLHIsbixhKSx1PXkxKGUscixuLHMpO3JldHVybiBvMWUobCx1KX0sImJlemllckFuZ2xlIik7dHUucmVjYWxjdWxhdGVFZGdlTGFiZWxQcm9qZWN0aW9ucz1mdW5jdGlvbih0KXt2YXIgZSxyPXQuX3ByaXZhdGUsbj1yLnJzY3JhdGNoLGk9dGhpcyxhPXttaWQ6dC5wc3R5bGUoImxhYmVsIikuc3RyVmFsdWUsc291cmNlOnQucHN0eWxlKCJzb3VyY2UtbGFiZWwiKS5zdHJWYWx1ZSx0YXJnZXQ6dC5wc3R5bGUoInRhcmdldC1sYWJlbCIpLnN0clZhbHVlfTtpZihhLm1pZHx8YS5zb3VyY2V8fGEudGFyZ2V0KXtlPXt4Om4ubWlkWCx5Om4ubWlkWX07dmFyIHM9byhmdW5jdGlvbihkLHAsbSl7RGYoci5yc2NyYXRjaCxkLHAsbSksRGYoci5yc3R5bGUsZCxwLG0pfSwic2V0UnMiKTtzKCJsYWJlbFgiLG51bGwsZS54KSxzKCJsYWJlbFkiLG51bGwsZS55KTt2YXIgbD1zMWUobi5taWREaXNwWCxuLm1pZERpc3BZKTtzKCJsYWJlbEF1dG9BbmdsZSIsbnVsbCxsKTt2YXIgdT1vKGZ1bmN0aW9uIGYoKXtpZihmLmNhY2hlKXJldHVybiBmLmNhY2hlO2Zvcih2YXIgZD1bXSxwPTA7cCs1PG4uYWxscHRzLmxlbmd0aDtwKz00KXt2YXIgbT17eDpuLmFsbHB0c1twXSx5Om4uYWxscHRzW3ArMV19LGc9e3g6bi5hbGxwdHNbcCsyXSx5Om4uYWxscHRzW3ArM119LHk9e3g6bi5hbGxwdHNbcCs0XSx5Om4uYWxscHRzW3ArNV19O2QucHVzaCh7cDA6bSxwMTpnLHAyOnksc3RhcnREaXN0OjAsbGVuZ3RoOjAsc2VnbWVudHM6W119KX12YXIgdj1yLnJzdHlsZS5iZXppZXJQdHMseD1pLmJlemllclByb2pQY3RzLmxlbmd0aDtmdW5jdGlvbiBiKEwsUyxBLEksRCl7dmFyIGs9SzAoUyxBKSxSPUwuc2VnbWVudHNbTC5zZWdtZW50cy5sZW5ndGgtMV0sQz17cDA6UyxwMTpBLHQwOkksdDE6RCxzdGFydERpc3Q6Uj9SLnN0YXJ0RGlzdCtSLmxlbmd0aDowLGxlbmd0aDprfTtMLnNlZ21lbnRzLnB1c2goQyksTC5sZW5ndGgrPWt9byhiLCJhZGRTZWdtZW50Iik7Zm9yKHZhciB3PTA7dzxkLmxlbmd0aDt3Kyspe3ZhciBfPWRbd10sVD1kW3ctMV07VCYmKF8uc3RhcnREaXN0PVQuc3RhcnREaXN0K1QubGVuZ3RoKSxiKF8sXy5wMCx2W3cqeF0sMCxpLmJlemllclByb2pQY3RzWzBdKTtmb3IodmFyIEU9MDtFPHgtMTtFKyspYihfLHZbdyp4K0VdLHZbdyp4K0UrMV0saS5iZXppZXJQcm9qUGN0c1tFXSxpLmJlemllclByb2pQY3RzW0UrMV0pO2IoXyx2W3cqeCt4LTFdLF8ucDIsaS5iZXppZXJQcm9qUGN0c1t4LTFdLDEpfXJldHVybiBmLmNhY2hlPWR9LCJjcmVhdGVDb250cm9sUG9pbnRJbmZvIiksaD1vKGZ1bmN0aW9uKGQpe3ZhciBwLG09ZD09PSJzb3VyY2UiO2lmKGFbZF0pe3ZhciBnPXQucHN0eWxlKGQrIi10ZXh0LW9mZnNldCIpLnBmVmFsdWU7c3dpdGNoKG4uZWRnZVR5cGUpe2Nhc2Uic2VsZiI6Y2FzZSJjb21wb3VuZCI6Y2FzZSJiZXppZXIiOmNhc2UibXVsdGliZXppZXIiOntmb3IodmFyIHk9dSgpLHYseD0wLGI9MCx3PTA7dzx5Lmxlbmd0aDt3Kyspe2Zvcih2YXIgXz15W20/dzp5Lmxlbmd0aC0xLXddLFQ9MDtUPF8uc2VnbWVudHMubGVuZ3RoO1QrKyl7dmFyIEU9Xy5zZWdtZW50c1ttP1Q6Xy5zZWdtZW50cy5sZW5ndGgtMS1UXSxMPXc9PT15Lmxlbmd0aC0xJiZUPT09Xy5zZWdtZW50cy5sZW5ndGgtMTtpZih4PWIsYis9RS5sZW5ndGgsYj49Z3x8TCl7dj17Y3A6XyxzZWdtZW50OkV9O2JyZWFrfX1pZih2KWJyZWFrfXZhciBTPXYuY3AsQT12LnNlZ21lbnQsST0oZy14KS9BLmxlbmd0aCxEPUEudDEtQS50MCxrPW0/QS50MCtEKkk6QS50MS1EKkk7az1zYigwLGssMSksZT15MShTLnAwLFMucDEsUy5wMixrKSxwPXJldChTLnAwLFMucDEsUy5wMixrKTticmVha31jYXNlInN0cmFpZ2h0IjpjYXNlInNlZ21lbnRzIjpjYXNlImhheXN0YWNrIjp7Zm9yKHZhciBSPTAsQyxPLE4sUCxGPW4uYWxscHRzLmxlbmd0aCxCPTA7QiszPEYmJihtPyhOPXt4Om4uYWxscHRzW0JdLHk6bi5hbGxwdHNbQisxXX0sUD17eDpuLmFsbHB0c1tCKzJdLHk6bi5hbGxwdHNbQiszXX0pOihOPXt4Om4uYWxscHRzW0YtMi1CXSx5Om4uYWxscHRzW0YtMS1CXX0sUD17eDpuLmFsbHB0c1tGLTQtQl0seTpuLmFsbHB0c1tGLTMtQl19KSxDPUswKE4sUCksTz1SLFIrPUMsIShSPj1nKSk7Qis9Mik7dmFyIEc9Zy1PLHo9Ry9DO3o9c2IoMCx6LDEpLGU9b2plKE4sUCx6KSxwPW8xZShOLFApO2JyZWFrfX1zKCJsYWJlbFgiLGQsZS54KSxzKCJsYWJlbFkiLGQsZS55KSxzKCJsYWJlbEF1dG9BbmdsZSIsZCxwKX19LCJjYWxjdWxhdGVFbmRQcm9qZWN0aW9uIik7aCgic291cmNlIiksaCgidGFyZ2V0IiksdGhpcy5hcHBseUxhYmVsRGltZW5zaW9ucyh0KX19O3R1LmFwcGx5TGFiZWxEaW1lbnNpb25zPWZ1bmN0aW9uKHQpe3RoaXMuYXBwbHlQcmVmaXhlZExhYmVsRGltZW5zaW9ucyh0KSx0LmlzRWRnZSgpJiYodGhpcy5hcHBseVByZWZpeGVkTGFiZWxEaW1lbnNpb25zKHQsInNvdXJjZSIpLHRoaXMuYXBwbHlQcmVmaXhlZExhYmVsRGltZW5zaW9ucyh0LCJ0YXJnZXQiKSl9O3R1LmFwcGx5UHJlZml4ZWRMYWJlbERpbWVuc2lvbnM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9wcml2YXRlLG49dGhpcy5nZXRMYWJlbFRleHQodCxlKSxpPXRoaXMuY2FsY3VsYXRlTGFiZWxEaW1lbnNpb25zKHQsbiksYT10LnBzdHlsZSgibGluZS1oZWlnaHQiKS5wZlZhbHVlLHM9dC5wc3R5bGUoInRleHQtd3JhcCIpLnN0clZhbHVlLGw9UWwoci5yc2NyYXRjaCwibGFiZWxXcmFwQ2FjaGVkTGluZXMiLGUpfHxbXSx1PXMhPT0id3JhcCI/MTpNYXRoLm1heChsLmxlbmd0aCwxKSxoPWkuaGVpZ2h0L3UsZj1oKmEsZD1pLndpZHRoLHA9aS5oZWlnaHQrKHUtMSkqKGEtMSkqaDtEZihyLnJzdHlsZSwibGFiZWxXaWR0aCIsZSxkKSxEZihyLnJzY3JhdGNoLCJsYWJlbFdpZHRoIixlLGQpLERmKHIucnN0eWxlLCJsYWJlbEhlaWdodCIsZSxwKSxEZihyLnJzY3JhdGNoLCJsYWJlbEhlaWdodCIsZSxwKSxEZihyLnJzY3JhdGNoLCJsYWJlbExpbmVIZWlnaHQiLGUsZil9O3R1LmdldExhYmVsVGV4dD1mdW5jdGlvbih0LGUpe3ZhciByPXQuX3ByaXZhdGUsbj1lP2UrIi0iOiIiLGk9dC5wc3R5bGUobisibGFiZWwiKS5zdHJWYWx1ZSxhPXQucHN0eWxlKCJ0ZXh0LXRyYW5zZm9ybSIpLnZhbHVlLHM9byhmdW5jdGlvbihaLGope3JldHVybiBqPyhEZihyLnJzY3JhdGNoLFosZSxqKSxqKTpRbChyLnJzY3JhdGNoLFosZSl9LCJyc2NyYXRjaCIpO2lmKCFpKXJldHVybiIiO2E9PSJub25lInx8KGE9PSJ1cHBlcmNhc2UiP2k9aS50b1VwcGVyQ2FzZSgpOmE9PSJsb3dlcmNhc2UiJiYoaT1pLnRvTG93ZXJDYXNlKCkpKTt2YXIgbD10LnBzdHlsZSgidGV4dC13cmFwIikudmFsdWU7aWYobD09PSJ3cmFwIil7dmFyIHU9cygibGFiZWxLZXkiKTtpZih1IT1udWxsJiZzKCJsYWJlbFdyYXBLZXkiKT09PXUpcmV0dXJuIHMoImxhYmVsV3JhcENhY2hlZFRleHQiKTtmb3IodmFyIGg9Ilx1MjAwQiIsZj1pLnNwbGl0KGAKYCksZD10LnBzdHlsZSgidGV4dC1tYXgtd2lkdGgiKS5wZlZhbHVlLHA9dC5wc3R5bGUoInRleHQtb3ZlcmZsb3ctd3JhcCIpLnZhbHVlLG09cD09PSJhbnl3aGVyZSIsZz1bXSx5PS9bXHNcdTIwMGJdK3wkL2csdj0wO3Y8Zi5sZW5ndGg7disrKXt2YXIgeD1mW3ZdLGI9dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnModCx4KSx3PWIud2lkdGg7aWYobSl7dmFyIF89eC5zcGxpdCgiIikuam9pbihoKTt4PV99aWYodz5kKXt2YXIgVD14Lm1hdGNoQWxsKHkpLEU9IiIsTD0wLFM9VW1lKFQpLEE7dHJ5e2ZvcihTLnMoKTshKEE9Uy5uKCkpLmRvbmU7KXt2YXIgST1BLnZhbHVlLEQ9SVswXSxrPXguc3Vic3RyaW5nKEwsSS5pbmRleCk7TD1JLmluZGV4K0QubGVuZ3RoO3ZhciBSPUUubGVuZ3RoPT09MD9rOkUraytELEM9dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnModCxSKSxPPUMud2lkdGg7Tzw9ZD9FKz1rK0Q6KEUmJmcucHVzaChFKSxFPWsrRCl9fWNhdGNoKFcpe1MuZShXKX1maW5hbGx5e1MuZigpfUUubWF0Y2goL15bXHNcdTIwMGJdKyQvKXx8Zy5wdXNoKEUpfWVsc2UgZy5wdXNoKHgpfXMoImxhYmVsV3JhcENhY2hlZExpbmVzIixnKSxpPXMoImxhYmVsV3JhcENhY2hlZFRleHQiLGcuam9pbihgCmApKSxzKCJsYWJlbFdyYXBLZXkiLHUpfWVsc2UgaWYobD09PSJlbGxpcHNpcyIpe3ZhciBOPXQucHN0eWxlKCJ0ZXh0LW1heC13aWR0aCIpLnBmVmFsdWUsUD0iIixGPSJcdTIwMjYiLEI9ITE7aWYodGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnModCxpKS53aWR0aDxOKXJldHVybiBpO2Zvcih2YXIgRz0wO0c8aS5sZW5ndGg7RysrKXt2YXIgej10aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyh0LFAraVtHXStGKS53aWR0aDtpZih6Pk4pYnJlYWs7UCs9aVtHXSxHPT09aS5sZW5ndGgtMSYmKEI9ITApfXJldHVybiBCfHwoUCs9RiksUH1yZXR1cm4gaX07dHUuZ2V0TGFiZWxKdXN0aWZpY2F0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXQucHN0eWxlKCJ0ZXh0LWp1c3RpZmljYXRpb24iKS5zdHJWYWx1ZSxyPXQucHN0eWxlKCJ0ZXh0LWhhbGlnbiIpLnN0clZhbHVlO2lmKGU9PT0iYXV0byIpaWYodC5pc05vZGUoKSlzd2l0Y2gocil7Y2FzZSJsZWZ0IjpyZXR1cm4icmlnaHQiO2Nhc2UicmlnaHQiOnJldHVybiJsZWZ0IjtkZWZhdWx0OnJldHVybiJjZW50ZXIifWVsc2UgcmV0dXJuImNlbnRlciI7ZWxzZSByZXR1cm4gZX07dHUuY2FsY3VsYXRlTGFiZWxEaW1lbnNpb25zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuY3kud2luZG93KCksaT1uLmRvY3VtZW50LGE9ajAoZSx0Ll9wcml2YXRlLmxhYmVsRGltc0tleSkscz1yLmxhYmVsRGltQ2FjaGV8fChyLmxhYmVsRGltQ2FjaGU9W10pLGw9c1thXTtpZihsIT1udWxsKXJldHVybiBsO3ZhciB1PTAsaD10LnBzdHlsZSgiZm9udC1zdHlsZSIpLnN0clZhbHVlLGY9dC5wc3R5bGUoImZvbnQtc2l6ZSIpLnBmVmFsdWUsZD10LnBzdHlsZSgiZm9udC1mYW1pbHkiKS5zdHJWYWx1ZSxwPXQucHN0eWxlKCJmb250LXdlaWdodCIpLnN0clZhbHVlLG09dGhpcy5sYWJlbENhbGNDYW52YXMsZz10aGlzLmxhYmVsQ2FsY0NhbnZhc0NvbnRleHQ7aWYoIW0pe209dGhpcy5sYWJlbENhbGNDYW52YXM9aS5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxnPXRoaXMubGFiZWxDYWxjQ2FudmFzQ29udGV4dD1tLmdldENvbnRleHQoIjJkIik7dmFyIHk9bS5zdHlsZTt5LnBvc2l0aW9uPSJhYnNvbHV0ZSIseS5sZWZ0PSItOTk5OXB4Iix5LnRvcD0iLTk5OTlweCIseS56SW5kZXg9Ii0xIix5LnZpc2liaWxpdHk9ImhpZGRlbiIseS5wb2ludGVyRXZlbnRzPSJub25lIn1nLmZvbnQ9IiIuY29uY2F0KGgsIiAiKS5jb25jYXQocCwiICIpLmNvbmNhdChmLCJweCAiKS5jb25jYXQoZCk7Zm9yKHZhciB2PTAseD0wLGI9ZS5zcGxpdChgCmApLHc9MDt3PGIubGVuZ3RoO3crKyl7dmFyIF89Ylt3XSxUPWcubWVhc3VyZVRleHQoXyksRT1NYXRoLmNlaWwoVC53aWR0aCksTD1mO3Y9TWF0aC5tYXgoRSx2KSx4Kz1MfXJldHVybiB2Kz11LHgrPXUsc1thXT17d2lkdGg6dixoZWlnaHQ6eH19O3R1LmNhbGN1bGF0ZUxhYmVsQW5nbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9wcml2YXRlLG49ci5yc2NyYXRjaCxpPXQuaXNFZGdlKCksYT1lP2UrIi0iOiIiLHM9dC5wc3R5bGUoYSsidGV4dC1yb3RhdGlvbiIpLGw9cy5zdHJWYWx1ZTtyZXR1cm4gbD09PSJub25lIj8wOmkmJmw9PT0iYXV0b3JvdGF0ZSI/bi5sYWJlbEF1dG9BbmdsZTpsPT09ImF1dG9yb3RhdGUiPzA6cy5wZlZhbHVlfTt0dS5jYWxjdWxhdGVMYWJlbEFuZ2xlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9dC5pc0VkZ2UoKSxuPXQuX3ByaXZhdGUsaT1uLnJzY3JhdGNoO2kubGFiZWxBbmdsZT1lLmNhbGN1bGF0ZUxhYmVsQW5nbGUodCksciYmKGkuc291cmNlTGFiZWxBbmdsZT1lLmNhbGN1bGF0ZUxhYmVsQW5nbGUodCwic291cmNlIiksaS50YXJnZXRMYWJlbEFuZ2xlPWUuY2FsY3VsYXRlTGFiZWxBbmdsZSh0LCJ0YXJnZXQiKSl9O2wxZT17fSxEbWU9MjgsTm1lPSExO2wxZS5nZXROb2RlU2hhcGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPXQucHN0eWxlKCJzaGFwZSIpLnZhbHVlO2lmKHI9PT0iY3V0cmVjdGFuZ2xlIiYmKHQud2lkdGgoKTxEbWV8fHQuaGVpZ2h0KCk8RG1lKSlyZXR1cm4gTm1lfHwob24oIlRoZSBgY3V0cmVjdGFuZ2xlYCBub2RlIHNoYXBlIGNhbiBub3QgYmUgdXNlZCBhdCBzbWFsbCBzaXplcyBzbyBgcmVjdGFuZ2xlYCBpcyB1c2VkIGluc3RlYWQiKSxObWU9ITApLCJyZWN0YW5nbGUiO2lmKHQuaXNQYXJlbnQoKSlyZXR1cm4gcj09PSJyZWN0YW5nbGUifHxyPT09InJvdW5kcmVjdGFuZ2xlInx8cj09PSJyb3VuZC1yZWN0YW5nbGUifHxyPT09ImN1dHJlY3RhbmdsZSJ8fHI9PT0iY3V0LXJlY3RhbmdsZSJ8fHI9PT0iYmFycmVsIj9yOiJyZWN0YW5nbGUiO2lmKHI9PT0icG9seWdvbiIpe3ZhciBuPXQucHN0eWxlKCJzaGFwZS1wb2x5Z29uLXBvaW50cyIpLnZhbHVlO3JldHVybiBlLm5vZGVTaGFwZXMubWFrZVBvbHlnb24obikubmFtZX1yZXR1cm4gcn07SjY9e307SjYucmVnaXN0ZXJDYWxjdWxhdGlvbkxpc3RlbmVycz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY3ksZT10LmNvbGxlY3Rpb24oKSxyPXRoaXMsbj1vKGZ1bmN0aW9uKHMpe3ZhciBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMDtpZihlLm1lcmdlKHMpLGwpZm9yKHZhciB1PTA7dTxzLmxlbmd0aDt1Kyspe3ZhciBoPXNbdV0sZj1oLl9wcml2YXRlLGQ9Zi5yc3R5bGU7ZC5jbGVhbj0hMSxkLmNsZWFuQ29ubmVjdGVkPSExfX0sImVucXVldWUiKTtyLmJpbmRlcih0KS5vbigiYm91bmRzLiogZGlydHkuKiIsbyhmdW5jdGlvbihzKXt2YXIgbD1zLnRhcmdldDtuKGwpfSwib25EaXJ0eUJvdW5kcyIpKS5vbigic3R5bGUuKiBiYWNrZ3JvdW5kLioiLG8oZnVuY3Rpb24ocyl7dmFyIGw9cy50YXJnZXQ7bihsLCExKX0sIm9uRGlydHlTdHlsZSIpKTt2YXIgaT1vKGZ1bmN0aW9uKHMpe2lmKHMpe3ZhciBsPXIub25VcGRhdGVFbGVDYWxjc0ZucztlLmNsZWFuU3R5bGUoKTtmb3IodmFyIHU9MDt1PGUubGVuZ3RoO3UrKyl7dmFyIGg9ZVt1XSxmPWguX3ByaXZhdGUucnN0eWxlO2guaXNOb2RlKCkmJiFmLmNsZWFuQ29ubmVjdGVkJiYobihoLmNvbm5lY3RlZEVkZ2VzKCkpLGYuY2xlYW5Db25uZWN0ZWQ9ITApfWlmKGwpZm9yKHZhciBkPTA7ZDxsLmxlbmd0aDtkKyspe3ZhciBwPWxbZF07cChzLGUpfXIucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKGUpLGU9dC5jb2xsZWN0aW9uKCl9fSwidXBkYXRlRWxlQ2FsY3MiKTtyLmZsdXNoUmVuZGVyZWRTdHlsZVF1ZXVlPWZ1bmN0aW9uKCl7aSghMCl9LHIuYmVmb3JlUmVuZGVyKGksci5iZWZvcmVSZW5kZXJQcmlvcml0aWVzLmVsZUNhbGNzKX07SjYub25VcGRhdGVFbGVDYWxjcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm9uVXBkYXRlRWxlQ2FsY3NGbnM9dGhpcy5vblVwZGF0ZUVsZUNhbGNzRm5zfHxbXTtlLnB1c2godCl9O0o2LnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZT1mdW5jdGlvbih0LGUpe3ZhciByPW8oZnVuY3Rpb24oXyl7cmV0dXJuIF8uX3ByaXZhdGUucnN0eWxlLmNsZWFuQ29ubmVjdGVkfSwiaXNDbGVhbkNvbm5lY3RlZCIpLG49W10saT1bXTtpZighdGhpcy5kZXN0cm95ZWQpe2U9PT12b2lkIDAmJihlPSEwKTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIHM9dFthXSxsPXMuX3ByaXZhdGUsdT1sLnJzdHlsZTtzLmlzRWRnZSgpJiYoIXIocy5zb3VyY2UoKSl8fCFyKHMudGFyZ2V0KCkpKSYmKHUuY2xlYW49ITEpLCEoZSYmdS5jbGVhbnx8cy5yZW1vdmVkKCkpJiZzLnBzdHlsZSgiZGlzcGxheSIpLnZhbHVlIT09Im5vbmUiJiYobC5ncm91cD09PSJub2RlcyI/aS5wdXNoKHMpOm4ucHVzaChzKSx1LmNsZWFuPSEwKX1mb3IodmFyIGg9MDtoPGkubGVuZ3RoO2grKyl7dmFyIGY9aVtoXSxkPWYuX3ByaXZhdGUscD1kLnJzdHlsZSxtPWYucG9zaXRpb24oKTt0aGlzLnJlY2FsY3VsYXRlTm9kZUxhYmVsUHJvamVjdGlvbihmKSxwLm5vZGVYPW0ueCxwLm5vZGVZPW0ueSxwLm5vZGVXPWYucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUscC5ub2RlSD1mLnBzdHlsZSgiaGVpZ2h0IikucGZWYWx1ZX10aGlzLnJlY2FsY3VsYXRlRWRnZVByb2plY3Rpb25zKG4pO2Zvcih2YXIgZz0wO2c8bi5sZW5ndGg7ZysrKXt2YXIgeT1uW2ddLHY9eS5fcHJpdmF0ZSx4PXYucnN0eWxlLGI9di5yc2NyYXRjaDt4LnNyY1g9Yi5hcnJvd1N0YXJ0WCx4LnNyY1k9Yi5hcnJvd1N0YXJ0WSx4LnRndFg9Yi5hcnJvd0VuZFgseC50Z3RZPWIuYXJyb3dFbmRZLHgubWlkWD1iLm1pZFgseC5taWRZPWIubWlkWSx4LmxhYmVsQW5nbGU9Yi5sYWJlbEFuZ2xlLHguc291cmNlTGFiZWxBbmdsZT1iLnNvdXJjZUxhYmVsQW5nbGUseC50YXJnZXRMYWJlbEFuZ2xlPWIudGFyZ2V0TGFiZWxBbmdsZX19fTtlUz17fTtlUy51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY2FjaGVkWlNvcnRlZEVsZXM7aWYodCl7dC5kcmFnPVtdLHQubm9uZHJhZz1bXTtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdLGk9bi5fcHJpdmF0ZS5yc2NyYXRjaDtuLmdyYWJiZWQoKSYmIW4uaXNQYXJlbnQoKT9lLnB1c2gobik6aS5pbkRyYWdMYXllcj90LmRyYWcucHVzaChuKTp0Lm5vbmRyYWcucHVzaChuKX1mb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTt0LmRyYWcucHVzaChuKX19fTtlUy5pbnZhbGlkYXRlQ2FjaGVkWlNvcnRlZEVsZXM9ZnVuY3Rpb24oKXt0aGlzLmNhY2hlZFpTb3J0ZWRFbGVzPW51bGx9O2VTLmdldENhY2hlZFpTb3J0ZWRFbGVzPWZ1bmN0aW9uKHQpe2lmKHR8fCF0aGlzLmNhY2hlZFpTb3J0ZWRFbGVzKXt2YXIgZT10aGlzLmN5Lm11dGFibGVFbGVtZW50cygpLnRvQXJyYXkoKTtlLnNvcnQoV2dlKSxlLmludGVyYWN0aXZlPWUuZmlsdGVyKGZ1bmN0aW9uKHIpe3JldHVybiByLmludGVyYWN0aXZlKCl9KSx0aGlzLmNhY2hlZFpTb3J0ZWRFbGVzPWUsdGhpcy51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcygpfWVsc2UgZT10aGlzLmNhY2hlZFpTb3J0ZWRFbGVzO3JldHVybiBlfTtjMWU9e307W3RwLE82LHFhLHhiLGtCLHR1LGwxZSxKNixlU10uZm9yRWFjaChmdW5jdGlvbih0KXtpcihjMWUsdCl9KTt1MWU9e307dTFlLmdldENhY2hlZEltYWdlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLGk9bi5pbWFnZUNhY2hlPW4uaW1hZ2VDYWNoZXx8e30sYT1pW3RdO2lmKGEpcmV0dXJuIGEuaW1hZ2UuY29tcGxldGV8fGEuaW1hZ2UuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsciksYS5pbWFnZTthPWlbdF09aVt0XXx8e307dmFyIHM9YS5pbWFnZT1uZXcgSW1hZ2U7cy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixyKSxzLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbigpe3MuZXJyb3I9ITB9KTt2YXIgbD0iZGF0YToiLHU9dC5zdWJzdHJpbmcoMCxsLmxlbmd0aCkudG9Mb3dlckNhc2UoKT09PWw7cmV0dXJuIHV8fChlPWU9PT0ibnVsbCI/bnVsbDplLHMuY3Jvc3NPcmlnaW49ZSkscy5zcmM9dCxzfTtSMT17fTtSMS5yZWdpc3RlckJpbmRpbmc9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cyxbMV0pLGE9dGhpcy5iaW5kZXIodCk7cmV0dXJuIGEub24uYXBwbHkoYSxpKX07UjEuYmluZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1lLmN5LndpbmRvdygpLG49dD09PXJ8fHQ9PT1yLmRvY3VtZW50fHx0PT09ci5kb2N1bWVudC5ib2R5fHxBcWUodCk7aWYoZS5zdXBwb3J0c1Bhc3NpdmVFdmVudHM9PW51bGwpe3ZhciBpPSExO3RyeXt2YXIgYT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6byhmdW5jdGlvbigpe3JldHVybiBpPSEwLCEwfSwiZ2V0Iil9KTtyLmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsYSl9Y2F0Y2h7fWUuc3VwcG9ydHNQYXNzaXZlRXZlbnRzPWl9dmFyIHM9byhmdW5jdGlvbih1LGgsZil7dmFyIGQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gbiYmZS5zdXBwb3J0c1Bhc3NpdmVFdmVudHMmJihkWzJdPXtjYXB0dXJlOmY/PyExLHBhc3NpdmU6ITEsb25jZTohMX0pLGUuYmluZGluZ3MucHVzaCh7dGFyZ2V0OnQsYXJnczpkfSksKHQuYWRkRXZlbnRMaXN0ZW5lcnx8dC5vbikuYXBwbHkodCxkKSx0aGlzfSwib24iKTtyZXR1cm57b246cyxhZGRFdmVudExpc3RlbmVyOnMsYWRkTGlzdGVuZXI6cyxiaW5kOnN9fTtSMS5ub2RlSXNEcmFnZ2FibGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuaXNOb2RlKCkmJiF0LmxvY2tlZCgpJiZ0LmdyYWJiYWJsZSgpfTtSMS5ub2RlSXNHcmFiYmFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubm9kZUlzRHJhZ2dhYmxlKHQpJiZ0LmludGVyYWN0aXZlKCl9O1IxLmxvYWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dC5jeS53aW5kb3coKSxyPW8oZnVuY3Rpb24oWCl7cmV0dXJuIFguc2VsZWN0ZWQoKX0sImlzU2VsZWN0ZWQiKSxuPW8oZnVuY3Rpb24oWCxmZSxoZSxnZSl7WD09bnVsbCYmKFg9dC5jeSk7Zm9yKHZhciBuZT0wO25lPGZlLmxlbmd0aDtuZSsrKXt2YXIgdmU9ZmVbbmVdO1guZW1pdCh7b3JpZ2luYWxFdmVudDpoZSx0eXBlOnZlLHBvc2l0aW9uOmdlfSl9fSwidHJpZ2dlckV2ZW50cyIpLGk9byhmdW5jdGlvbihYKXtyZXR1cm4gWC5zaGlmdEtleXx8WC5tZXRhS2V5fHxYLmN0cmxLZXl9LCJpc011bHRTZWxLZXlEb3duIiksYT1vKGZ1bmN0aW9uKFgsZmUpe3ZhciBoZT0hMDtpZih0LmN5Lmhhc0NvbXBvdW5kTm9kZXMoKSYmWCYmWC5wYW5uYWJsZSgpKWZvcih2YXIgZ2U9MDtmZSYmZ2U8ZmUubGVuZ3RoO2dlKyspe3ZhciBYPWZlW2dlXTtpZihYLmlzTm9kZSgpJiZYLmlzUGFyZW50KCkmJiFYLnBhbm5hYmxlKCkpe2hlPSExO2JyZWFrfX1lbHNlIGhlPSEwO3JldHVybiBoZX0sImFsbG93UGFubmluZ1Bhc3N0aHJvdWdoIikscz1vKGZ1bmN0aW9uKFgpe1hbMF0uX3ByaXZhdGUuZ3JhYmJlZD0hMH0sInNldEdyYWJiZWQiKSxsPW8oZnVuY3Rpb24oWCl7WFswXS5fcHJpdmF0ZS5ncmFiYmVkPSExfSwic2V0RnJlZWQiKSx1PW8oZnVuY3Rpb24oWCl7WFswXS5fcHJpdmF0ZS5yc2NyYXRjaC5pbkRyYWdMYXllcj0hMH0sInNldEluRHJhZ0xheWVyIiksaD1vKGZ1bmN0aW9uKFgpe1hbMF0uX3ByaXZhdGUucnNjcmF0Y2guaW5EcmFnTGF5ZXI9ITF9LCJzZXRPdXREcmFnTGF5ZXIiKSxmPW8oZnVuY3Rpb24oWCl7WFswXS5fcHJpdmF0ZS5yc2NyYXRjaC5pc0dyYWJUYXJnZXQ9ITB9LCJzZXRHcmFiVGFyZ2V0IiksZD1vKGZ1bmN0aW9uKFgpe1hbMF0uX3ByaXZhdGUucnNjcmF0Y2guaXNHcmFiVGFyZ2V0PSExfSwicmVtb3ZlR3JhYlRhcmdldCIpLHA9byhmdW5jdGlvbihYLGZlKXt2YXIgaGU9ZmUuYWRkVG9MaXN0LGdlPWhlLmhhcyhYKTshZ2UmJlguZ3JhYmJhYmxlKCkmJiFYLmxvY2tlZCgpJiYoaGUubWVyZ2UoWCkscyhYKSl9LCJhZGRUb0RyYWdMaXN0IiksbT1vKGZ1bmN0aW9uKFgsZmUpe2lmKFguY3koKS5oYXNDb21wb3VuZE5vZGVzKCkmJiEoZmUuaW5EcmFnTGF5ZXI9PW51bGwmJmZlLmFkZFRvTGlzdD09bnVsbCkpe3ZhciBoZT1YLmRlc2NlbmRhbnRzKCk7ZmUuaW5EcmFnTGF5ZXImJihoZS5mb3JFYWNoKHUpLGhlLmNvbm5lY3RlZEVkZ2VzKCkuZm9yRWFjaCh1KSksZmUuYWRkVG9MaXN0JiZwKGhlLGZlKX19LCJhZGREZXNjZW5kYW50c1RvRHJhZyIpLGc9byhmdW5jdGlvbihYLGZlKXtmZT1mZXx8e307dmFyIGhlPVguY3koKS5oYXNDb21wb3VuZE5vZGVzKCk7ZmUuaW5EcmFnTGF5ZXImJihYLmZvckVhY2godSksWC5uZWlnaGJvcmhvb2QoKS5zdGRGaWx0ZXIoZnVuY3Rpb24oZ2Upe3JldHVybiFoZXx8Z2UuaXNFZGdlKCl9KS5mb3JFYWNoKHUpKSxmZS5hZGRUb0xpc3QmJlguZm9yRWFjaChmdW5jdGlvbihnZSl7cChnZSxmZSl9KSxtKFgsZmUpLHgoWCx7aW5EcmFnTGF5ZXI6ZmUuaW5EcmFnTGF5ZXJ9KSx0LnVwZGF0ZUNhY2hlZEdyYWJiZWRFbGVzKCl9LCJhZGROb2Rlc1RvRHJhZyIpLHk9Zyx2PW8oZnVuY3Rpb24oWCl7WCYmKHQuZ2V0Q2FjaGVkWlNvcnRlZEVsZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGZlKXtsKGZlKSxoKGZlKSxkKGZlKX0pLHQudXBkYXRlQ2FjaGVkR3JhYmJlZEVsZXMoKSl9LCJmcmVlRHJhZ2dlZEVsZW1lbnRzIikseD1vKGZ1bmN0aW9uKFgsZmUpe2lmKCEoZmUuaW5EcmFnTGF5ZXI9PW51bGwmJmZlLmFkZFRvTGlzdD09bnVsbCkmJlguY3koKS5oYXNDb21wb3VuZE5vZGVzKCkpe3ZhciBoZT1YLmFuY2VzdG9ycygpLm9ycGhhbnMoKTtpZighaGUuc2FtZShYKSl7dmFyIGdlPWhlLmRlc2NlbmRhbnRzKCkuc3Bhd25TZWxmKCkubWVyZ2UoaGUpLnVubWVyZ2UoWCkudW5tZXJnZShYLmRlc2NlbmRhbnRzKCkpLG5lPWdlLmNvbm5lY3RlZEVkZ2VzKCk7ZmUuaW5EcmFnTGF5ZXImJihuZS5mb3JFYWNoKHUpLGdlLmZvckVhY2godSkpLGZlLmFkZFRvTGlzdCYmZ2UuZm9yRWFjaChmdW5jdGlvbih2ZSl7cCh2ZSxmZSl9KX19fSwidXBkYXRlQW5jZXN0b3JzSW5EcmFnTGF5ZXIiKSxiPW8oZnVuY3Rpb24oKXtkb2N1bWVudC5hY3RpdmVFbGVtZW50IT1udWxsJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIhPW51bGwmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpfSwiYmx1ckFjdGl2ZURvbUVsZW1lbnQiKSx3PXR5cGVvZiBNdXRhdGlvbk9ic2VydmVyPCJ1IixfPXR5cGVvZiBSZXNpemVPYnNlcnZlcjwidSI7dz8odC5yZW1vdmVPYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbih5ZSl7Zm9yKHZhciBYPTA7WDx5ZS5sZW5ndGg7WCsrKXt2YXIgZmU9eWVbWF0saGU9ZmUucmVtb3ZlZE5vZGVzO2lmKGhlKWZvcih2YXIgZ2U9MDtnZTxoZS5sZW5ndGg7Z2UrKyl7dmFyIG5lPWhlW2dlXTtpZihuZT09PXQuY29udGFpbmVyKXt0LmRlc3Ryb3koKTticmVha319fX0pLHQuY29udGFpbmVyLnBhcmVudE5vZGUmJnQucmVtb3ZlT2JzZXJ2ZXIub2JzZXJ2ZSh0LmNvbnRhaW5lci5wYXJlbnROb2RlLHtjaGlsZExpc3Q6ITB9KSk6dC5yZWdpc3RlckJpbmRpbmcodC5jb250YWluZXIsIkRPTU5vZGVSZW1vdmVkIixmdW5jdGlvbih5ZSl7dC5kZXN0cm95KCl9KTt2YXIgVD16NihmdW5jdGlvbigpe3QuY3kucmVzaXplKCl9LDEwMCk7dyYmKHQuc3R5bGVPYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcihUKSx0LnN0eWxlT2JzZXJ2ZXIub2JzZXJ2ZSh0LmNvbnRhaW5lcix7YXR0cmlidXRlczohMH0pKSx0LnJlZ2lzdGVyQmluZGluZyhlLCJyZXNpemUiLFQpLF8mJih0LnJlc2l6ZU9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcihUKSx0LnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodC5jb250YWluZXIpKTt2YXIgRT1vKGZ1bmN0aW9uKFgsZmUpe2Zvcig7WCE9bnVsbDspZmUoWCksWD1YLnBhcmVudE5vZGV9LCJmb3JFYWNoVXAiKSxMPW8oZnVuY3Rpb24oKXt0LmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZSgpfSwiaW52YWxpZGF0ZUNvb3JkcyIpO0UodC5jb250YWluZXIsZnVuY3Rpb24oeWUpe3QucmVnaXN0ZXJCaW5kaW5nKHllLCJ0cmFuc2l0aW9uZW5kIixMKSx0LnJlZ2lzdGVyQmluZGluZyh5ZSwiYW5pbWF0aW9uZW5kIixMKSx0LnJlZ2lzdGVyQmluZGluZyh5ZSwic2Nyb2xsIixMKX0pLHQucmVnaXN0ZXJCaW5kaW5nKHQuY29udGFpbmVyLCJjb250ZXh0bWVudSIsZnVuY3Rpb24oeWUpe3llLnByZXZlbnREZWZhdWx0KCl9KTt2YXIgUz1vKGZ1bmN0aW9uKCl7cmV0dXJuIHQuc2VsZWN0aW9uWzRdIT09MH0sImluQm94U2VsZWN0aW9uIiksQT1vKGZ1bmN0aW9uKFgpe2Zvcih2YXIgZmU9dC5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzKCksaGU9ZmVbMF0sZ2U9ZmVbMV0sbmU9ZmVbMl0sdmU9ZmVbM10sVT1YLnRvdWNoZXM/WC50b3VjaGVzOltYXSxUZT0hMSxpZT0wO2llPFUubGVuZ3RoO2llKyspe3ZhciBFZT1VW2llXTtpZihoZTw9RWUuY2xpZW50WCYmRWUuY2xpZW50WDw9aGUrbmUmJmdlPD1FZS5jbGllbnRZJiZFZS5jbGllbnRZPD1nZSt2ZSl7VGU9ITA7YnJlYWt9fWlmKCFUZSlyZXR1cm4hMTtmb3IodmFyIEFlPXQuY29udGFpbmVyLEdlPVgudGFyZ2V0LEJlPUdlLnBhcmVudE5vZGUsbWU9ITE7QmU7KXtpZihCZT09PUFlKXttZT0hMDticmVha31CZT1CZS5wYXJlbnROb2RlfXJldHVybiEhbWV9LCJldmVudEluQ29udGFpbmVyIik7dC5yZWdpc3RlckJpbmRpbmcodC5jb250YWluZXIsIm1vdXNlZG93biIsbyhmdW5jdGlvbihYKXtpZihBKFgpJiYhKHQuaG92ZXJEYXRhLndoaWNoPT09MSYmWC53aGljaCE9PTEpKXtYLnByZXZlbnREZWZhdWx0KCksYigpLHQuaG92ZXJEYXRhLmNhcHR1cmU9ITAsdC5ob3ZlckRhdGEud2hpY2g9WC53aGljaDt2YXIgZmU9dC5jeSxoZT1bWC5jbGllbnRYLFguY2xpZW50WV0sZ2U9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KGhlWzBdLGhlWzFdKSxuZT10LnNlbGVjdGlvbix2ZT10LmZpbmROZWFyZXN0RWxlbWVudHMoZ2VbMF0sZ2VbMV0sITAsITEpLFU9dmVbMF0sVGU9dC5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50czt0LmhvdmVyRGF0YS5tZG93blBvcz1nZSx0LmhvdmVyRGF0YS5tZG93bkdQb3M9aGU7dmFyIGllPW8oZnVuY3Rpb24oKXt0LmhvdmVyRGF0YS50YXBob2xkQ2FuY2VsbGVkPSExLGNsZWFyVGltZW91dCh0LmhvdmVyRGF0YS50YXBob2xkVGltZW91dCksdC5ob3ZlckRhdGEudGFwaG9sZFRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2lmKCF0LmhvdmVyRGF0YS50YXBob2xkQ2FuY2VsbGVkKXt2YXIgSGU9dC5ob3ZlckRhdGEuZG93bjtIZT9IZS5lbWl0KHtvcmlnaW5hbEV2ZW50OlgsdHlwZToidGFwaG9sZCIscG9zaXRpb246e3g6Z2VbMF0seTpnZVsxXX19KTpmZS5lbWl0KHtvcmlnaW5hbEV2ZW50OlgsdHlwZToidGFwaG9sZCIscG9zaXRpb246e3g6Z2VbMF0seTpnZVsxXX19KX19LHQudGFwaG9sZER1cmF0aW9uKX0sImNoZWNrRm9yVGFwaG9sZCIpO2lmKFgud2hpY2g9PTMpe3QuaG92ZXJEYXRhLmN4dFN0YXJ0ZWQ9ITA7dmFyIEVlPXtvcmlnaW5hbEV2ZW50OlgsdHlwZToiY3h0dGFwc3RhcnQiLHBvc2l0aW9uOnt4OmdlWzBdLHk6Z2VbMV19fTtVPyhVLmFjdGl2YXRlKCksVS5lbWl0KEVlKSx0LmhvdmVyRGF0YS5kb3duPVUpOmZlLmVtaXQoRWUpLHQuaG92ZXJEYXRhLmRvd25UaW1lPW5ldyBEYXRlKCkuZ2V0VGltZSgpLHQuaG92ZXJEYXRhLmN4dERyYWdnZWQ9ITF9ZWxzZSBpZihYLndoaWNoPT0xKXtVJiZVLmFjdGl2YXRlKCk7e2lmKFUhPW51bGwmJnQubm9kZUlzR3JhYmJhYmxlKFUpKXt2YXIgQWU9byhmdW5jdGlvbihIZSl7cmV0dXJue29yaWdpbmFsRXZlbnQ6WCx0eXBlOkhlLHBvc2l0aW9uOnt4OmdlWzBdLHk6Z2VbMV19fX0sIm1ha2VFdmVudCIpLEdlPW8oZnVuY3Rpb24oSGUpe0hlLmVtaXQoQWUoImdyYWIiKSl9LCJ0cmlnZ2VyR3JhYiIpO2lmKGYoVSksIVUuc2VsZWN0ZWQoKSlUZT10LmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzPWZlLmNvbGxlY3Rpb24oKSx5KFUse2FkZFRvTGlzdDpUZX0pLFUuZW1pdChBZSgiZ3JhYm9uIikpLmVtaXQoQWUoImdyYWIiKSk7ZWxzZXtUZT10LmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzPWZlLmNvbGxlY3Rpb24oKTt2YXIgQmU9ZmUuJChmdW5jdGlvbihtZSl7cmV0dXJuIG1lLmlzTm9kZSgpJiZtZS5zZWxlY3RlZCgpJiZ0Lm5vZGVJc0dyYWJiYWJsZShtZSl9KTtnKEJlLHthZGRUb0xpc3Q6VGV9KSxVLmVtaXQoQWUoImdyYWJvbiIpKSxCZS5mb3JFYWNoKEdlKX10LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx0LnJlZHJhd0hpbnQoImRyYWciLCEwKX10LmhvdmVyRGF0YS5kb3duPVUsdC5ob3ZlckRhdGEuZG93bnM9dmUsdC5ob3ZlckRhdGEuZG93blRpbWU9bmV3IERhdGUoKS5nZXRUaW1lKCl9bihVLFsibW91c2Vkb3duIiwidGFwc3RhcnQiLCJ2bW91c2Vkb3duIl0sWCx7eDpnZVswXSx5OmdlWzFdfSksVT09bnVsbD8obmVbNF09MSx0LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249e3g6Z2VbMF0seTpnZVsxXX0sdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx0LnJlZHJhdygpKTpVLnBhbm5hYmxlKCkmJihuZVs0XT0xKSxpZSgpfW5lWzBdPW5lWzJdPWdlWzBdLG5lWzFdPW5lWzNdPWdlWzFdfX0sIm1vdXNlZG93bkhhbmRsZXIiKSwhMSksdC5yZWdpc3RlckJpbmRpbmcoZSwibW91c2Vtb3ZlIixvKGZ1bmN0aW9uKFgpe3ZhciBmZT10LmhvdmVyRGF0YS5jYXB0dXJlO2lmKCEoIWZlJiYhQShYKSkpe3ZhciBoZT0hMSxnZT10LmN5LG5lPWdlLnpvb20oKSx2ZT1bWC5jbGllbnRYLFguY2xpZW50WV0sVT10LnByb2plY3RJbnRvVmlld3BvcnQodmVbMF0sdmVbMV0pLFRlPXQuaG92ZXJEYXRhLm1kb3duUG9zLGllPXQuaG92ZXJEYXRhLm1kb3duR1BvcyxFZT10LnNlbGVjdGlvbixBZT1udWxsOyF0LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMmJiF0LmhvdmVyRGF0YS5kcmFnZ2luZyYmIXQuaG92ZXJEYXRhLnNlbGVjdGluZyYmKEFlPXQuZmluZE5lYXJlc3RFbGVtZW50KFVbMF0sVVsxXSwhMCwhMSkpO3ZhciBHZT10LmhvdmVyRGF0YS5sYXN0LEJlPXQuaG92ZXJEYXRhLmRvd24sbWU9W1VbMF0tRWVbMl0sVVsxXS1FZVszXV0sSGU9dC5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50cyxPZTtpZihpZSl7dmFyIGV0PXZlWzBdLWllWzBdLGJ0PWV0KmV0LGt0PXZlWzFdLWllWzFdLHZ0PWt0Kmt0LHJ0PWJ0K3Z0O3QuaG92ZXJEYXRhLmlzT3ZlclRocmVzaG9sZERyYWc9T2U9cnQ+PXQuZGVza3RvcFRhcFRocmVzaG9sZDJ9dmFyIHl0PWkoWCk7T2UmJih0LmhvdmVyRGF0YS50YXBob2xkQ2FuY2VsbGVkPSEwKTt2YXIgVWU9byhmdW5jdGlvbigpe3ZhciBCdD10LmhvdmVyRGF0YS5kcmFnRGVsdGE9dC5ob3ZlckRhdGEuZHJhZ0RlbHRhfHxbXTtCdC5sZW5ndGg9PT0wPyhCdC5wdXNoKG1lWzBdKSxCdC5wdXNoKG1lWzFdKSk6KEJ0WzBdKz1tZVswXSxCdFsxXSs9bWVbMV0pfSwidXBkYXRlRHJhZ0RlbHRhIik7aGU9ITAsbihBZSxbIm1vdXNlbW92ZSIsInZtb3VzZW1vdmUiLCJ0YXBkcmFnIl0sWCx7eDpVWzBdLHk6VVsxXX0pO3ZhciB0dD1vKGZ1bmN0aW9uKCl7dC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx0LmhvdmVyRGF0YS5zZWxlY3Rpbmd8fGdlLmVtaXQoe29yaWdpbmFsRXZlbnQ6WCx0eXBlOiJib3hzdGFydCIscG9zaXRpb246e3g6VVswXSx5OlVbMV19fSksRWVbNF09MSx0LmhvdmVyRGF0YS5zZWxlY3Rpbmc9ITAsdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx0LnJlZHJhdygpfSwiZ29JbnRvQm94TW9kZSIpO2lmKHQuaG92ZXJEYXRhLndoaWNoPT09Myl7aWYoT2Upe3ZhciBodD17b3JpZ2luYWxFdmVudDpYLHR5cGU6ImN4dGRyYWciLHBvc2l0aW9uOnt4OlVbMF0seTpVWzFdfX07QmU/QmUuZW1pdChodCk6Z2UuZW1pdChodCksdC5ob3ZlckRhdGEuY3h0RHJhZ2dlZD0hMCwoIXQuaG92ZXJEYXRhLmN4dE92ZXJ8fEFlIT09dC5ob3ZlckRhdGEuY3h0T3ZlcikmJih0LmhvdmVyRGF0YS5jeHRPdmVyJiZ0LmhvdmVyRGF0YS5jeHRPdmVyLmVtaXQoe29yaWdpbmFsRXZlbnQ6WCx0eXBlOiJjeHRkcmFnb3V0Iixwb3NpdGlvbjp7eDpVWzBdLHk6VVsxXX19KSx0LmhvdmVyRGF0YS5jeHRPdmVyPUFlLEFlJiZBZS5lbWl0KHtvcmlnaW5hbEV2ZW50OlgsdHlwZToiY3h0ZHJhZ292ZXIiLHBvc2l0aW9uOnt4OlVbMF0seTpVWzFdfX0pKX19ZWxzZSBpZih0LmhvdmVyRGF0YS5kcmFnZ2luZyl7aWYoaGU9ITAsZ2UucGFubmluZ0VuYWJsZWQoKSYmZ2UudXNlclBhbm5pbmdFbmFibGVkKCkpe3ZhciBFdDtpZih0LmhvdmVyRGF0YS5qdXN0U3RhcnRlZFBhbil7dmFyIGVyPXQuaG92ZXJEYXRhLm1kb3duUG9zO0V0PXt4OihVWzBdLWVyWzBdKSpuZSx5OihVWzFdLWVyWzFdKSpuZX0sdC5ob3ZlckRhdGEuanVzdFN0YXJ0ZWRQYW49ITF9ZWxzZSBFdD17eDptZVswXSpuZSx5Om1lWzFdKm5lfTtnZS5wYW5CeShFdCksZ2UuZW1pdCgiZHJhZ3BhbiIpLHQuaG92ZXJEYXRhLmRyYWdnZWQ9ITB9VT10LnByb2plY3RJbnRvVmlld3BvcnQoWC5jbGllbnRYLFguY2xpZW50WSl9ZWxzZSBpZihFZVs0XT09MSYmKEJlPT1udWxsfHxCZS5wYW5uYWJsZSgpKSl7aWYoT2Upe2lmKCF0LmhvdmVyRGF0YS5kcmFnZ2luZyYmZ2UuYm94U2VsZWN0aW9uRW5hYmxlZCgpJiYoeXR8fCFnZS5wYW5uaW5nRW5hYmxlZCgpfHwhZ2UudXNlclBhbm5pbmdFbmFibGVkKCkpKXR0KCk7ZWxzZSBpZighdC5ob3ZlckRhdGEuc2VsZWN0aW5nJiZnZS5wYW5uaW5nRW5hYmxlZCgpJiZnZS51c2VyUGFubmluZ0VuYWJsZWQoKSl7dmFyIGR0PWEoQmUsdC5ob3ZlckRhdGEuZG93bnMpO2R0JiYodC5ob3ZlckRhdGEuZHJhZ2dpbmc9ITAsdC5ob3ZlckRhdGEuanVzdFN0YXJ0ZWRQYW49ITAsRWVbNF09MCx0LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249bTEoVGUpLHQucmVkcmF3SGludCgic2VsZWN0IiwhMCksdC5yZWRyYXcoKSl9QmUmJkJlLnBhbm5hYmxlKCkmJkJlLmFjdGl2ZSgpJiZCZS51bmFjdGl2YXRlKCl9fWVsc2V7aWYoQmUmJkJlLnBhbm5hYmxlKCkmJkJlLmFjdGl2ZSgpJiZCZS51bmFjdGl2YXRlKCksKCFCZXx8IUJlLmdyYWJiZWQoKSkmJkFlIT1HZSYmKEdlJiZuKEdlLFsibW91c2VvdXQiLCJ0YXBkcmFnb3V0Il0sWCx7eDpVWzBdLHk6VVsxXX0pLEFlJiZuKEFlLFsibW91c2VvdmVyIiwidGFwZHJhZ292ZXIiXSxYLHt4OlVbMF0seTpVWzFdfSksdC5ob3ZlckRhdGEubGFzdD1BZSksQmUpaWYoT2Upe2lmKGdlLmJveFNlbGVjdGlvbkVuYWJsZWQoKSYmeXQpQmUmJkJlLmdyYWJiZWQoKSYmKHYoSGUpLEJlLmVtaXQoImZyZWVvbiIpLEhlLmVtaXQoImZyZWUiKSx0LmRyYWdEYXRhLmRpZERyYWcmJihCZS5lbWl0KCJkcmFnZnJlZW9uIiksSGUuZW1pdCgiZHJhZ2ZyZWUiKSkpLHR0KCk7ZWxzZSBpZihCZSYmQmUuZ3JhYmJlZCgpJiZ0Lm5vZGVJc0RyYWdnYWJsZShCZSkpe3ZhciBKZT0hdC5kcmFnRGF0YS5kaWREcmFnO0plJiZ0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx0LmRyYWdEYXRhLmRpZERyYWc9ITAsdC5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzfHxnKEhlLHtpbkRyYWdMYXllcjohMH0pO3ZhciBjdD17eDowLHk6MH07aWYoeHQobWVbMF0pJiZ4dChtZVsxXSkmJihjdC54Kz1tZVswXSxjdC55Kz1tZVsxXSxKZSkpe3ZhciBDdD10LmhvdmVyRGF0YS5kcmFnRGVsdGE7Q3QmJnh0KEN0WzBdKSYmeHQoQ3RbMV0pJiYoY3QueCs9Q3RbMF0sY3QueSs9Q3RbMV0pfXQuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcz0hMCxIZS5zaWxlbnRTaGlmdChjdCkuZW1pdCgicG9zaXRpb24gZHJhZyIpLHQucmVkcmF3SGludCgiZHJhZyIsITApLHQucmVkcmF3KCl9fWVsc2UgVWUoKTtoZT0hMH1pZihFZVsyXT1VWzBdLEVlWzNdPVVbMV0saGUpcmV0dXJuIFguc3RvcFByb3BhZ2F0aW9uJiZYLnN0b3BQcm9wYWdhdGlvbigpLFgucHJldmVudERlZmF1bHQmJlgucHJldmVudERlZmF1bHQoKSwhMX19LCJtb3VzZW1vdmVIYW5kbGVyIiksITEpO3ZhciBJLEQsazt0LnJlZ2lzdGVyQmluZGluZyhlLCJtb3VzZXVwIixvKGZ1bmN0aW9uKFgpe2lmKCEodC5ob3ZlckRhdGEud2hpY2g9PT0xJiZYLndoaWNoIT09MSYmdC5ob3ZlckRhdGEuY2FwdHVyZSkpe3ZhciBmZT10LmhvdmVyRGF0YS5jYXB0dXJlO2lmKGZlKXt0LmhvdmVyRGF0YS5jYXB0dXJlPSExO3ZhciBoZT10LmN5LGdlPXQucHJvamVjdEludG9WaWV3cG9ydChYLmNsaWVudFgsWC5jbGllbnRZKSxuZT10LnNlbGVjdGlvbix2ZT10LmZpbmROZWFyZXN0RWxlbWVudChnZVswXSxnZVsxXSwhMCwhMSksVT10LmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzLFRlPXQuaG92ZXJEYXRhLmRvd24saWU9aShYKTtpZih0LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb24mJih0LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHQucmVkcmF3KCkpLHQuaG92ZXJEYXRhLnRhcGhvbGRDYW5jZWxsZWQ9ITAsdC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCxUZSYmVGUudW5hY3RpdmF0ZSgpLHQuaG92ZXJEYXRhLndoaWNoPT09Myl7dmFyIEVlPXtvcmlnaW5hbEV2ZW50OlgsdHlwZToiY3h0dGFwZW5kIixwb3NpdGlvbjp7eDpnZVswXSx5OmdlWzFdfX07aWYoVGU/VGUuZW1pdChFZSk6aGUuZW1pdChFZSksIXQuaG92ZXJEYXRhLmN4dERyYWdnZWQpe3ZhciBBZT17b3JpZ2luYWxFdmVudDpYLHR5cGU6ImN4dHRhcCIscG9zaXRpb246e3g6Z2VbMF0seTpnZVsxXX19O1RlP1RlLmVtaXQoQWUpOmhlLmVtaXQoQWUpfXQuaG92ZXJEYXRhLmN4dERyYWdnZWQ9ITEsdC5ob3ZlckRhdGEud2hpY2g9bnVsbH1lbHNlIGlmKHQuaG92ZXJEYXRhLndoaWNoPT09MSl7aWYobih2ZSxbIm1vdXNldXAiLCJ0YXBlbmQiLCJ2bW91c2V1cCJdLFgse3g6Z2VbMF0seTpnZVsxXX0pLCF0LmRyYWdEYXRhLmRpZERyYWcmJiF0LmhvdmVyRGF0YS5kcmFnZ2VkJiYhdC5ob3ZlckRhdGEuc2VsZWN0aW5nJiYhdC5ob3ZlckRhdGEuaXNPdmVyVGhyZXNob2xkRHJhZyYmKG4oVGUsWyJjbGljayIsInRhcCIsInZjbGljayJdLFgse3g6Z2VbMF0seTpnZVsxXX0pLEQ9ITEsWC50aW1lU3RhbXAtazw9aGUubXVsdGlDbGlja0RlYm91bmNlVGltZSgpPyhJJiZjbGVhclRpbWVvdXQoSSksRD0hMCxrPW51bGwsbihUZSxbImRibGNsaWNrIiwiZGJsdGFwIiwidmRibGNsaWNrIl0sWCx7eDpnZVswXSx5OmdlWzFdfSkpOihJPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtEfHxuKFRlLFsib25lY2xpY2siLCJvbmV0YXAiLCJ2b25lY2xpY2siXSxYLHt4OmdlWzBdLHk6Z2VbMV19KX0saGUubXVsdGlDbGlja0RlYm91bmNlVGltZSgpKSxrPVgudGltZVN0YW1wKSksVGU9PW51bGwmJiF0LmRyYWdEYXRhLmRpZERyYWcmJiF0LmhvdmVyRGF0YS5zZWxlY3RpbmcmJiF0LmhvdmVyRGF0YS5kcmFnZ2VkJiYhaShYKSYmKGhlLiQocikudW5zZWxlY3QoWyJ0YXB1bnNlbGVjdCJdKSxVLmxlbmd0aD4wJiZ0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx0LmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzPVU9aGUuY29sbGVjdGlvbigpKSx2ZT09VGUmJiF0LmRyYWdEYXRhLmRpZERyYWcmJiF0LmhvdmVyRGF0YS5zZWxlY3RpbmcmJnZlIT1udWxsJiZ2ZS5fcHJpdmF0ZS5zZWxlY3RhYmxlJiYodC5ob3ZlckRhdGEuZHJhZ2dpbmd8fChoZS5zZWxlY3Rpb25UeXBlKCk9PT0iYWRkaXRpdmUifHxpZT92ZS5zZWxlY3RlZCgpP3ZlLnVuc2VsZWN0KFsidGFwdW5zZWxlY3QiXSk6dmUuc2VsZWN0KFsidGFwc2VsZWN0Il0pOmllfHwoaGUuJChyKS51bm1lcmdlKHZlKS51bnNlbGVjdChbInRhcHVuc2VsZWN0Il0pLHZlLnNlbGVjdChbInRhcHNlbGVjdCJdKSkpLHQucmVkcmF3SGludCgiZWxlcyIsITApKSx0LmhvdmVyRGF0YS5zZWxlY3Rpbmcpe3ZhciBHZT1oZS5jb2xsZWN0aW9uKHQuZ2V0QWxsSW5Cb3gobmVbMF0sbmVbMV0sbmVbMl0sbmVbM10pKTt0LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLEdlLmxlbmd0aD4wJiZ0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSxoZS5lbWl0KHt0eXBlOiJib3hlbmQiLG9yaWdpbmFsRXZlbnQ6WCxwb3NpdGlvbjp7eDpnZVswXSx5OmdlWzFdfX0pO3ZhciBCZT1vKGZ1bmN0aW9uKE9lKXtyZXR1cm4gT2Uuc2VsZWN0YWJsZSgpJiYhT2Uuc2VsZWN0ZWQoKX0sImVsZVdvdWxkQmVTZWxlY3RlZCIpO2hlLnNlbGVjdGlvblR5cGUoKT09PSJhZGRpdGl2ZSJ8fGllfHxoZS4kKHIpLnVubWVyZ2UoR2UpLnVuc2VsZWN0KCksR2UuZW1pdCgiYm94Iikuc3RkRmlsdGVyKEJlKS5zZWxlY3QoKS5lbWl0KCJib3hzZWxlY3QiKSx0LnJlZHJhdygpfWlmKHQuaG92ZXJEYXRhLmRyYWdnaW5nJiYodC5ob3ZlckRhdGEuZHJhZ2dpbmc9ITEsdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx0LnJlZHJhdygpKSwhbmVbNF0pe3QucmVkcmF3SGludCgiZHJhZyIsITApLHQucmVkcmF3SGludCgiZWxlcyIsITApO3ZhciBtZT1UZSYmVGUuZ3JhYmJlZCgpO3YoVSksbWUmJihUZS5lbWl0KCJmcmVlb24iKSxVLmVtaXQoImZyZWUiKSx0LmRyYWdEYXRhLmRpZERyYWcmJihUZS5lbWl0KCJkcmFnZnJlZW9uIiksVS5lbWl0KCJkcmFnZnJlZSIpKSl9fW5lWzRdPTAsdC5ob3ZlckRhdGEuZG93bj1udWxsLHQuaG92ZXJEYXRhLmN4dFN0YXJ0ZWQ9ITEsdC5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzPSExLHQuaG92ZXJEYXRhLnNlbGVjdGluZz0hMSx0LmhvdmVyRGF0YS5pc092ZXJUaHJlc2hvbGREcmFnPSExLHQuZHJhZ0RhdGEuZGlkRHJhZz0hMSx0LmhvdmVyRGF0YS5kcmFnZ2VkPSExLHQuaG92ZXJEYXRhLmRyYWdEZWx0YT1bXSx0LmhvdmVyRGF0YS5tZG93blBvcz1udWxsLHQuaG92ZXJEYXRhLm1kb3duR1Bvcz1udWxsLHQuaG92ZXJEYXRhLndoaWNoPW51bGx9fX0sIm1vdXNldXBIYW5kbGVyIiksITEpO3ZhciBSPW8oZnVuY3Rpb24oWCl7aWYoIXQuc2Nyb2xsaW5nUGFnZSl7dmFyIGZlPXQuY3ksaGU9ZmUuem9vbSgpLGdlPWZlLnBhbigpLG5lPXQucHJvamVjdEludG9WaWV3cG9ydChYLmNsaWVudFgsWC5jbGllbnRZKSx2ZT1bbmVbMF0qaGUrZ2UueCxuZVsxXSpoZStnZS55XTtpZih0LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXN8fHQuaG92ZXJEYXRhLmRyYWdnaW5nfHx0LmhvdmVyRGF0YS5jeHRTdGFydGVkfHxTKCkpe1gucHJldmVudERlZmF1bHQoKTtyZXR1cm59aWYoZmUucGFubmluZ0VuYWJsZWQoKSYmZmUudXNlclBhbm5pbmdFbmFibGVkKCkmJmZlLnpvb21pbmdFbmFibGVkKCkmJmZlLnVzZXJab29taW5nRW5hYmxlZCgpKXtYLnByZXZlbnREZWZhdWx0KCksdC5kYXRhLndoZWVsWm9vbWluZz0hMCxjbGVhclRpbWVvdXQodC5kYXRhLndoZWVsVGltZW91dCksdC5kYXRhLndoZWVsVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5kYXRhLndoZWVsWm9vbWluZz0hMSx0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx0LnJlZHJhdygpfSwxNTApO3ZhciBVO1guZGVsdGFZIT1udWxsP1U9WC5kZWx0YVkvLTI1MDpYLndoZWVsRGVsdGFZIT1udWxsP1U9WC53aGVlbERlbHRhWS8xZTM6VT1YLndoZWVsRGVsdGEvMWUzLFU9VSp0LndoZWVsU2Vuc2l0aXZpdHk7dmFyIFRlPVguZGVsdGFNb2RlPT09MTtUZSYmKFUqPTMzKTt2YXIgaWU9ZmUuem9vbSgpKk1hdGgucG93KDEwLFUpO1gudHlwZT09PSJnZXN0dXJlY2hhbmdlIiYmKGllPXQuZ2VzdHVyZVN0YXJ0Wm9vbSpYLnNjYWxlKSxmZS56b29tKHtsZXZlbDppZSxyZW5kZXJlZFBvc2l0aW9uOnt4OnZlWzBdLHk6dmVbMV19fSksZmUuZW1pdChYLnR5cGU9PT0iZ2VzdHVyZWNoYW5nZSI/InBpbmNoem9vbSI6InNjcm9sbHpvb20iKX19fSwid2hlZWxIYW5kbGVyIik7dC5yZWdpc3RlckJpbmRpbmcodC5jb250YWluZXIsIndoZWVsIixSLCEwKSx0LnJlZ2lzdGVyQmluZGluZyhlLCJzY3JvbGwiLG8oZnVuY3Rpb24oWCl7dC5zY3JvbGxpbmdQYWdlPSEwLGNsZWFyVGltZW91dCh0LnNjcm9sbGluZ1BhZ2VUaW1lb3V0KSx0LnNjcm9sbGluZ1BhZ2VUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LnNjcm9sbGluZ1BhZ2U9ITF9LDI1MCl9LCJzY3JvbGxIYW5kbGVyIiksITApLHQucmVnaXN0ZXJCaW5kaW5nKHQuY29udGFpbmVyLCJnZXN0dXJlc3RhcnQiLG8oZnVuY3Rpb24oWCl7dC5nZXN0dXJlU3RhcnRab29tPXQuY3kuem9vbSgpLHQuaGFzVG91Y2hTdGFydGVkfHxYLnByZXZlbnREZWZhdWx0KCl9LCJnZXN0dXJlU3RhcnRIYW5kbGVyIiksITApLHQucmVnaXN0ZXJCaW5kaW5nKHQuY29udGFpbmVyLCJnZXN0dXJlY2hhbmdlIixmdW5jdGlvbih5ZSl7dC5oYXNUb3VjaFN0YXJ0ZWR8fFIoeWUpfSwhMCksdC5yZWdpc3RlckJpbmRpbmcodC5jb250YWluZXIsIm1vdXNlb3V0IixvKGZ1bmN0aW9uKFgpe3ZhciBmZT10LnByb2plY3RJbnRvVmlld3BvcnQoWC5jbGllbnRYLFguY2xpZW50WSk7dC5jeS5lbWl0KHtvcmlnaW5hbEV2ZW50OlgsdHlwZToibW91c2VvdXQiLHBvc2l0aW9uOnt4OmZlWzBdLHk6ZmVbMV19fSl9LCJtb3VzZU91dEhhbmRsZXIiKSwhMSksdC5yZWdpc3RlckJpbmRpbmcodC5jb250YWluZXIsIm1vdXNlb3ZlciIsbyhmdW5jdGlvbihYKXt2YXIgZmU9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KFguY2xpZW50WCxYLmNsaWVudFkpO3QuY3kuZW1pdCh7b3JpZ2luYWxFdmVudDpYLHR5cGU6Im1vdXNlb3ZlciIscG9zaXRpb246e3g6ZmVbMF0seTpmZVsxXX19KX0sIm1vdXNlT3ZlckhhbmRsZXIiKSwhMSk7dmFyIEMsTyxOLFAsRixCLEcseixXLFosaixvZSxLLGVlPW8oZnVuY3Rpb24oWCxmZSxoZSxnZSl7cmV0dXJuIE1hdGguc3FydCgoaGUtWCkqKGhlLVgpKyhnZS1mZSkqKGdlLWZlKSl9LCJkaXN0YW5jZSIpLEo9byhmdW5jdGlvbihYLGZlLGhlLGdlKXtyZXR1cm4oaGUtWCkqKGhlLVgpKyhnZS1mZSkqKGdlLWZlKX0sImRpc3RhbmNlU3EiKSxIO3QucmVnaXN0ZXJCaW5kaW5nKHQuY29udGFpbmVyLCJ0b3VjaHN0YXJ0IixIPW8oZnVuY3Rpb24oWCl7aWYodC5oYXNUb3VjaFN0YXJ0ZWQ9ITAsISFBKFgpKXtiKCksdC50b3VjaERhdGEuY2FwdHVyZT0hMCx0LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwO3ZhciBmZT10LmN5LGhlPXQudG91Y2hEYXRhLm5vdyxnZT10LnRvdWNoRGF0YS5lYXJsaWVyO2lmKFgudG91Y2hlc1swXSl7dmFyIG5lPXQucHJvamVjdEludG9WaWV3cG9ydChYLnRvdWNoZXNbMF0uY2xpZW50WCxYLnRvdWNoZXNbMF0uY2xpZW50WSk7aGVbMF09bmVbMF0saGVbMV09bmVbMV19aWYoWC50b3VjaGVzWzFdKXt2YXIgbmU9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KFgudG91Y2hlc1sxXS5jbGllbnRYLFgudG91Y2hlc1sxXS5jbGllbnRZKTtoZVsyXT1uZVswXSxoZVszXT1uZVsxXX1pZihYLnRvdWNoZXNbMl0pe3ZhciBuZT10LnByb2plY3RJbnRvVmlld3BvcnQoWC50b3VjaGVzWzJdLmNsaWVudFgsWC50b3VjaGVzWzJdLmNsaWVudFkpO2hlWzRdPW5lWzBdLGhlWzVdPW5lWzFdfWlmKFgudG91Y2hlc1sxXSl7dC50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZD0hMCx2KHQuZHJhZ0RhdGEudG91Y2hEcmFnRWxlcyk7dmFyIHZlPXQuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpO1c9dmVbMF0sWj12ZVsxXSxqPXZlWzJdLG9lPXZlWzNdLEM9WC50b3VjaGVzWzBdLmNsaWVudFgtVyxPPVgudG91Y2hlc1swXS5jbGllbnRZLVosTj1YLnRvdWNoZXNbMV0uY2xpZW50WC1XLFA9WC50b3VjaGVzWzFdLmNsaWVudFktWixLPTA8PUMmJkM8PWomJjA8PU4mJk48PWomJjA8PU8mJk88PW9lJiYwPD1QJiZQPD1vZTt2YXIgVT1mZS5wYW4oKSxUZT1mZS56b29tKCk7Rj1lZShDLE8sTixQKSxCPUooQyxPLE4sUCksRz1bKEMrTikvMiwoTytQKS8yXSx6PVsoR1swXS1VLngpL1RlLChHWzFdLVUueSkvVGVdO3ZhciBpZT0yMDAsRWU9aWUqaWU7aWYoQjxFZSYmIVgudG91Y2hlc1syXSl7dmFyIEFlPXQuZmluZE5lYXJlc3RFbGVtZW50KGhlWzBdLGhlWzFdLCEwLCEwKSxHZT10LmZpbmROZWFyZXN0RWxlbWVudChoZVsyXSxoZVszXSwhMCwhMCk7QWUmJkFlLmlzTm9kZSgpPyhBZS5hY3RpdmF0ZSgpLmVtaXQoe29yaWdpbmFsRXZlbnQ6WCx0eXBlOiJjeHR0YXBzdGFydCIscG9zaXRpb246e3g6aGVbMF0seTpoZVsxXX19KSx0LnRvdWNoRGF0YS5zdGFydD1BZSk6R2UmJkdlLmlzTm9kZSgpPyhHZS5hY3RpdmF0ZSgpLmVtaXQoe29yaWdpbmFsRXZlbnQ6WCx0eXBlOiJjeHR0YXBzdGFydCIscG9zaXRpb246e3g6aGVbMF0seTpoZVsxXX19KSx0LnRvdWNoRGF0YS5zdGFydD1HZSk6ZmUuZW1pdCh7b3JpZ2luYWxFdmVudDpYLHR5cGU6ImN4dHRhcHN0YXJ0Iixwb3NpdGlvbjp7eDpoZVswXSx5OmhlWzFdfX0pLHQudG91Y2hEYXRhLnN0YXJ0JiYodC50b3VjaERhdGEuc3RhcnQuX3ByaXZhdGUuZ3JhYmJlZD0hMSksdC50b3VjaERhdGEuY3h0PSEwLHQudG91Y2hEYXRhLmN4dERyYWdnZWQ9ITEsdC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx0LnJlZHJhdygpO3JldHVybn19aWYoWC50b3VjaGVzWzJdKWZlLmJveFNlbGVjdGlvbkVuYWJsZWQoKSYmWC5wcmV2ZW50RGVmYXVsdCgpO2Vsc2UgaWYoIVgudG91Y2hlc1sxXSl7aWYoWC50b3VjaGVzWzBdKXt2YXIgQmU9dC5maW5kTmVhcmVzdEVsZW1lbnRzKGhlWzBdLGhlWzFdLCEwLCEwKSxtZT1CZVswXTtpZihtZSE9bnVsbCYmKG1lLmFjdGl2YXRlKCksdC50b3VjaERhdGEuc3RhcnQ9bWUsdC50b3VjaERhdGEuc3RhcnRzPUJlLHQubm9kZUlzR3JhYmJhYmxlKG1lKSkpe3ZhciBIZT10LmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXM9ZmUuY29sbGVjdGlvbigpLE9lPW51bGw7dC5yZWRyYXdIaW50KCJlbGVzIiwhMCksdC5yZWRyYXdIaW50KCJkcmFnIiwhMCksbWUuc2VsZWN0ZWQoKT8oT2U9ZmUuJChmdW5jdGlvbihydCl7cmV0dXJuIHJ0LnNlbGVjdGVkKCkmJnQubm9kZUlzR3JhYmJhYmxlKHJ0KX0pLGcoT2Use2FkZFRvTGlzdDpIZX0pKTp5KG1lLHthZGRUb0xpc3Q6SGV9KSxmKG1lKTt2YXIgZXQ9byhmdW5jdGlvbih5dCl7cmV0dXJue29yaWdpbmFsRXZlbnQ6WCx0eXBlOnl0LHBvc2l0aW9uOnt4OmhlWzBdLHk6aGVbMV19fX0sIm1ha2VFdmVudCIpO21lLmVtaXQoZXQoImdyYWJvbiIpKSxPZT9PZS5mb3JFYWNoKGZ1bmN0aW9uKHJ0KXtydC5lbWl0KGV0KCJncmFiIikpfSk6bWUuZW1pdChldCgiZ3JhYiIpKX1uKG1lLFsidG91Y2hzdGFydCIsInRhcHN0YXJ0Iiwidm1vdXNlZG93biJdLFgse3g6aGVbMF0seTpoZVsxXX0pLG1lPT1udWxsJiYodC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXt4Om5lWzBdLHk6bmVbMV19LHQucmVkcmF3SGludCgic2VsZWN0IiwhMCksdC5yZWRyYXcoKSksdC50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZD0hMSx0LnRvdWNoRGF0YS5zaW5nbGVUb3VjaFN0YXJ0VGltZT0rbmV3IERhdGUsY2xlYXJUaW1lb3V0KHQudG91Y2hEYXRhLnRhcGhvbGRUaW1lb3V0KSx0LnRvdWNoRGF0YS50YXBob2xkVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZD09PSExJiYhdC5waW5jaGluZyYmIXQudG91Y2hEYXRhLnNlbGVjdGluZyYmbih0LnRvdWNoRGF0YS5zdGFydCxbInRhcGhvbGQiXSxYLHt4OmhlWzBdLHk6aGVbMV19KX0sdC50YXBob2xkRHVyYXRpb24pfX1pZihYLnRvdWNoZXMubGVuZ3RoPj0xKXtmb3IodmFyIGJ0PXQudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb249W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxrdD0wO2t0PGhlLmxlbmd0aDtrdCsrKWJ0W2t0XT1nZVtrdF09aGVba3RdO3ZhciB2dD1YLnRvdWNoZXNbMF07dC50b3VjaERhdGEuc3RhcnRHUG9zaXRpb249W3Z0LmNsaWVudFgsdnQuY2xpZW50WV19fX0sInRvdWNoc3RhcnRIYW5kbGVyIiksITEpO3ZhciBxO3QucmVnaXN0ZXJCaW5kaW5nKGUsInRvdWNobW92ZSIscT1vKGZ1bmN0aW9uKFgpe3ZhciBmZT10LnRvdWNoRGF0YS5jYXB0dXJlO2lmKCEoIWZlJiYhQShYKSkpe3ZhciBoZT10LnNlbGVjdGlvbixnZT10LmN5LG5lPXQudG91Y2hEYXRhLm5vdyx2ZT10LnRvdWNoRGF0YS5lYXJsaWVyLFU9Z2Uuem9vbSgpO2lmKFgudG91Y2hlc1swXSl7dmFyIFRlPXQucHJvamVjdEludG9WaWV3cG9ydChYLnRvdWNoZXNbMF0uY2xpZW50WCxYLnRvdWNoZXNbMF0uY2xpZW50WSk7bmVbMF09VGVbMF0sbmVbMV09VGVbMV19aWYoWC50b3VjaGVzWzFdKXt2YXIgVGU9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KFgudG91Y2hlc1sxXS5jbGllbnRYLFgudG91Y2hlc1sxXS5jbGllbnRZKTtuZVsyXT1UZVswXSxuZVszXT1UZVsxXX1pZihYLnRvdWNoZXNbMl0pe3ZhciBUZT10LnByb2plY3RJbnRvVmlld3BvcnQoWC50b3VjaGVzWzJdLmNsaWVudFgsWC50b3VjaGVzWzJdLmNsaWVudFkpO25lWzRdPVRlWzBdLG5lWzVdPVRlWzFdfXZhciBpZT10LnRvdWNoRGF0YS5zdGFydEdQb3NpdGlvbixFZTtpZihmZSYmWC50b3VjaGVzWzBdJiZpZSl7Zm9yKHZhciBBZT1bXSxHZT0wO0dlPG5lLmxlbmd0aDtHZSsrKUFlW0dlXT1uZVtHZV0tdmVbR2VdO3ZhciBCZT1YLnRvdWNoZXNbMF0uY2xpZW50WC1pZVswXSxtZT1CZSpCZSxIZT1YLnRvdWNoZXNbMF0uY2xpZW50WS1pZVsxXSxPZT1IZSpIZSxldD1tZStPZTtFZT1ldD49dC50b3VjaFRhcFRocmVzaG9sZDJ9aWYoZmUmJnQudG91Y2hEYXRhLmN4dCl7WC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBidD1YLnRvdWNoZXNbMF0uY2xpZW50WC1XLGt0PVgudG91Y2hlc1swXS5jbGllbnRZLVosdnQ9WC50b3VjaGVzWzFdLmNsaWVudFgtVyxydD1YLnRvdWNoZXNbMV0uY2xpZW50WS1aLHl0PUooYnQsa3QsdnQscnQpLFVlPXl0L0IsdHQ9MTUwLGh0PXR0KnR0LEV0PTEuNSxlcj1FdCpFdDtpZihVZT49ZXJ8fHl0Pj1odCl7dC50b3VjaERhdGEuY3h0PSExLHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAsdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTt2YXIgZHQ9e29yaWdpbmFsRXZlbnQ6WCx0eXBlOiJjeHR0YXBlbmQiLHBvc2l0aW9uOnt4Om5lWzBdLHk6bmVbMV19fTt0LnRvdWNoRGF0YS5zdGFydD8odC50b3VjaERhdGEuc3RhcnQudW5hY3RpdmF0ZSgpLmVtaXQoZHQpLHQudG91Y2hEYXRhLnN0YXJ0PW51bGwpOmdlLmVtaXQoZHQpfX1pZihmZSYmdC50b3VjaERhdGEuY3h0KXt2YXIgZHQ9e29yaWdpbmFsRXZlbnQ6WCx0eXBlOiJjeHRkcmFnIixwb3NpdGlvbjp7eDpuZVswXSx5Om5lWzFdfX07dC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx0LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHQudG91Y2hEYXRhLnN0YXJ0P3QudG91Y2hEYXRhLnN0YXJ0LmVtaXQoZHQpOmdlLmVtaXQoZHQpLHQudG91Y2hEYXRhLnN0YXJ0JiYodC50b3VjaERhdGEuc3RhcnQuX3ByaXZhdGUuZ3JhYmJlZD0hMSksdC50b3VjaERhdGEuY3h0RHJhZ2dlZD0hMDt2YXIgSmU9dC5maW5kTmVhcmVzdEVsZW1lbnQobmVbMF0sbmVbMV0sITAsITApOyghdC50b3VjaERhdGEuY3h0T3Zlcnx8SmUhPT10LnRvdWNoRGF0YS5jeHRPdmVyKSYmKHQudG91Y2hEYXRhLmN4dE92ZXImJnQudG91Y2hEYXRhLmN4dE92ZXIuZW1pdCh7b3JpZ2luYWxFdmVudDpYLHR5cGU6ImN4dGRyYWdvdXQiLHBvc2l0aW9uOnt4Om5lWzBdLHk6bmVbMV19fSksdC50b3VjaERhdGEuY3h0T3Zlcj1KZSxKZSYmSmUuZW1pdCh7b3JpZ2luYWxFdmVudDpYLHR5cGU6ImN4dGRyYWdvdmVyIixwb3NpdGlvbjp7eDpuZVswXSx5Om5lWzFdfX0pKX1lbHNlIGlmKGZlJiZYLnRvdWNoZXNbMl0mJmdlLmJveFNlbGVjdGlvbkVuYWJsZWQoKSlYLnByZXZlbnREZWZhdWx0KCksdC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx0aGlzLmxhc3RUaHJlZVRvdWNoPStuZXcgRGF0ZSx0LnRvdWNoRGF0YS5zZWxlY3Rpbmd8fGdlLmVtaXQoe29yaWdpbmFsRXZlbnQ6WCx0eXBlOiJib3hzdGFydCIscG9zaXRpb246e3g6bmVbMF0seTpuZVsxXX19KSx0LnRvdWNoRGF0YS5zZWxlY3Rpbmc9ITAsdC50b3VjaERhdGEuZGlkU2VsZWN0PSEwLGhlWzRdPTEsIWhlfHxoZS5sZW5ndGg9PT0wfHxoZVswXT09PXZvaWQgMD8oaGVbMF09KG5lWzBdK25lWzJdK25lWzRdKS8zLGhlWzFdPShuZVsxXStuZVszXStuZVs1XSkvMyxoZVsyXT0obmVbMF0rbmVbMl0rbmVbNF0pLzMrMSxoZVszXT0obmVbMV0rbmVbM10rbmVbNV0pLzMrMSk6KGhlWzJdPShuZVswXStuZVsyXStuZVs0XSkvMyxoZVszXT0obmVbMV0rbmVbM10rbmVbNV0pLzMpLHQucmVkcmF3SGludCgic2VsZWN0IiwhMCksdC5yZWRyYXcoKTtlbHNlIGlmKGZlJiZYLnRvdWNoZXNbMV0mJiF0LnRvdWNoRGF0YS5kaWRTZWxlY3QmJmdlLnpvb21pbmdFbmFibGVkKCkmJmdlLnBhbm5pbmdFbmFibGVkKCkmJmdlLnVzZXJab29taW5nRW5hYmxlZCgpJiZnZS51c2VyUGFubmluZ0VuYWJsZWQoKSl7WC5wcmV2ZW50RGVmYXVsdCgpLHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAsdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTt2YXIgY3Q9dC5kcmFnRGF0YS50b3VjaERyYWdFbGVzO2lmKGN0KXt0LnJlZHJhd0hpbnQoImRyYWciLCEwKTtmb3IodmFyIEN0PTA7Q3Q8Y3QubGVuZ3RoO0N0Kyspe3ZhciBwdD1jdFtDdF0uX3ByaXZhdGU7cHQuZ3JhYmJlZD0hMSxwdC5yc2NyYXRjaC5pbkRyYWdMYXllcj0hMX19dmFyIEJ0PXQudG91Y2hEYXRhLnN0YXJ0LGJ0PVgudG91Y2hlc1swXS5jbGllbnRYLVcsa3Q9WC50b3VjaGVzWzBdLmNsaWVudFktWix2dD1YLnRvdWNoZXNbMV0uY2xpZW50WC1XLHJ0PVgudG91Y2hlc1sxXS5jbGllbnRZLVosVHI9ZWUoYnQsa3QsdnQscnQpLHlyPVRyL0Y7aWYoSyl7dmFyIG9yPWJ0LUMsbG49a3QtTyxPcj12dC1OLGlpPXJ0LVAsbW49KG9yK09yKS8yLE9uPShsbitpaSkvMixfcj1nZS56b29tKCksbWk9X3IqeXIsdnM9Z2UucGFuKCksUG49elswXSpfcit2cy54LFNvPXpbMV0qX3IrdnMueSxnbD17eDotbWkvX3IqKFBuLXZzLngtbW4pK1BuLHk6LW1pL19yKihTby12cy55LU9uKStTb307aWYoQnQmJkJ0LmFjdGl2ZSgpKXt2YXIgY3Q9dC5kcmFnRGF0YS50b3VjaERyYWdFbGVzO3YoY3QpLHQucmVkcmF3SGludCgiZHJhZyIsITApLHQucmVkcmF3SGludCgiZWxlcyIsITApLEJ0LnVuYWN0aXZhdGUoKS5lbWl0KCJmcmVlb24iKSxjdC5lbWl0KCJmcmVlIiksdC5kcmFnRGF0YS5kaWREcmFnJiYoQnQuZW1pdCgiZHJhZ2ZyZWVvbiIpLGN0LmVtaXQoImRyYWdmcmVlIikpfWdlLnZpZXdwb3J0KHt6b29tOm1pLHBhbjpnbCxjYW5jZWxPbkZhaWxlZFpvb206ITB9KSxnZS5lbWl0KCJwaW5jaHpvb20iKSxGPVRyLEM9YnQsTz1rdCxOPXZ0LFA9cnQsdC5waW5jaGluZz0hMH1pZihYLnRvdWNoZXNbMF0pe3ZhciBUZT10LnByb2plY3RJbnRvVmlld3BvcnQoWC50b3VjaGVzWzBdLmNsaWVudFgsWC50b3VjaGVzWzBdLmNsaWVudFkpO25lWzBdPVRlWzBdLG5lWzFdPVRlWzFdfWlmKFgudG91Y2hlc1sxXSl7dmFyIFRlPXQucHJvamVjdEludG9WaWV3cG9ydChYLnRvdWNoZXNbMV0uY2xpZW50WCxYLnRvdWNoZXNbMV0uY2xpZW50WSk7bmVbMl09VGVbMF0sbmVbM109VGVbMV19aWYoWC50b3VjaGVzWzJdKXt2YXIgVGU9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KFgudG91Y2hlc1syXS5jbGllbnRYLFgudG91Y2hlc1syXS5jbGllbnRZKTtuZVs0XT1UZVswXSxuZVs1XT1UZVsxXX19ZWxzZSBpZihYLnRvdWNoZXNbMF0mJiF0LnRvdWNoRGF0YS5kaWRTZWxlY3Qpe3ZhciBCbj10LnRvdWNoRGF0YS5zdGFydCxraT10LnRvdWNoRGF0YS5sYXN0LEplO2lmKCF0LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMmJiF0LnN3aXBlUGFubmluZyYmKEplPXQuZmluZE5lYXJlc3RFbGVtZW50KG5lWzBdLG5lWzFdLCEwLCEwKSksZmUmJkJuIT1udWxsJiZYLnByZXZlbnREZWZhdWx0KCksZmUmJkJuIT1udWxsJiZ0Lm5vZGVJc0RyYWdnYWJsZShCbikpaWYoRWUpe3ZhciBjdD10LmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXMsQXQ9IXQuZHJhZ0RhdGEuZGlkRHJhZztBdCYmZyhjdCx7aW5EcmFnTGF5ZXI6ITB9KSx0LmRyYWdEYXRhLmRpZERyYWc9ITA7dmFyIFB0PXt4OjAseTowfTtpZih4dChBZVswXSkmJnh0KEFlWzFdKSYmKFB0LngrPUFlWzBdLFB0LnkrPUFlWzFdLEF0KSl7dC5yZWRyYXdIaW50KCJlbGVzIiwhMCk7dmFyIHd0PXQudG91Y2hEYXRhLmRyYWdEZWx0YTt3dCYmeHQod3RbMF0pJiZ4dCh3dFsxXSkmJihQdC54Kz13dFswXSxQdC55Kz13dFsxXSl9dC5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzPSEwLGN0LnNpbGVudFNoaWZ0KFB0KS5lbWl0KCJwb3NpdGlvbiBkcmFnIiksdC5yZWRyYXdIaW50KCJkcmFnIiwhMCksdC50b3VjaERhdGEuc3RhcnRQb3NpdGlvblswXT09dmVbMF0mJnQudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb25bMV09PXZlWzFdJiZ0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx0LnJlZHJhdygpfWVsc2V7dmFyIHd0PXQudG91Y2hEYXRhLmRyYWdEZWx0YT10LnRvdWNoRGF0YS5kcmFnRGVsdGF8fFtdO3d0Lmxlbmd0aD09PTA/KHd0LnB1c2goQWVbMF0pLHd0LnB1c2goQWVbMV0pKTood3RbMF0rPUFlWzBdLHd0WzFdKz1BZVsxXSl9aWYobihCbnx8SmUsWyJ0b3VjaG1vdmUiLCJ0YXBkcmFnIiwidm1vdXNlbW92ZSJdLFgse3g6bmVbMF0seTpuZVsxXX0pLCghQm58fCFCbi5ncmFiYmVkKCkpJiZKZSE9a2kmJihraSYma2kuZW1pdCh7b3JpZ2luYWxFdmVudDpYLHR5cGU6InRhcGRyYWdvdXQiLHBvc2l0aW9uOnt4Om5lWzBdLHk6bmVbMV19fSksSmUmJkplLmVtaXQoe29yaWdpbmFsRXZlbnQ6WCx0eXBlOiJ0YXBkcmFnb3ZlciIscG9zaXRpb246e3g6bmVbMF0seTpuZVsxXX19KSksdC50b3VjaERhdGEubGFzdD1KZSxmZSlmb3IodmFyIEN0PTA7Q3Q8bmUubGVuZ3RoO0N0KyspbmVbQ3RdJiZ0LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uW0N0XSYmRWUmJih0LnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkPSEwKTtpZihmZSYmKEJuPT1udWxsfHxCbi5wYW5uYWJsZSgpKSYmZ2UucGFubmluZ0VuYWJsZWQoKSYmZ2UudXNlclBhbm5pbmdFbmFibGVkKCkpe3ZhciBXZT1hKEJuLHQudG91Y2hEYXRhLnN0YXJ0cyk7V2UmJihYLnByZXZlbnREZWZhdWx0KCksdC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9ufHwodC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPW0xKHQudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb24pKSx0LnN3aXBlUGFubmluZz8oZ2UucGFuQnkoe3g6QWVbMF0qVSx5OkFlWzFdKlV9KSxnZS5lbWl0KCJkcmFncGFuIikpOkVlJiYodC5zd2lwZVBhbm5pbmc9ITAsZ2UucGFuQnkoe3g6QmUqVSx5OkhlKlV9KSxnZS5lbWl0KCJkcmFncGFuIiksQm4mJihCbi51bmFjdGl2YXRlKCksdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx0LnRvdWNoRGF0YS5zdGFydD1udWxsKSkpO3ZhciBUZT10LnByb2plY3RJbnRvVmlld3BvcnQoWC50b3VjaGVzWzBdLmNsaWVudFgsWC50b3VjaGVzWzBdLmNsaWVudFkpO25lWzBdPVRlWzBdLG5lWzFdPVRlWzFdfX1mb3IodmFyIEdlPTA7R2U8bmUubGVuZ3RoO0dlKyspdmVbR2VdPW5lW0dlXTtmZSYmWC50b3VjaGVzLmxlbmd0aD4wJiYhdC5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzJiYhdC5zd2lwZVBhbm5pbmcmJnQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbiE9bnVsbCYmKHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAsdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx0LnJlZHJhdygpKX19LCJ0b3VjaG1vdmVIYW5kbGVyIiksITEpO3ZhciBRO3QucmVnaXN0ZXJCaW5kaW5nKGUsInRvdWNoY2FuY2VsIixRPW8oZnVuY3Rpb24oWCl7dmFyIGZlPXQudG91Y2hEYXRhLnN0YXJ0O3QudG91Y2hEYXRhLmNhcHR1cmU9ITEsZmUmJmZlLnVuYWN0aXZhdGUoKX0sInRvdWNoY2FuY2VsSGFuZGxlciIpKTt2YXIgYWUsdWUsY2UsdGU7aWYodC5yZWdpc3RlckJpbmRpbmcoZSwidG91Y2hlbmQiLGFlPW8oZnVuY3Rpb24oWCl7dmFyIGZlPXQudG91Y2hEYXRhLnN0YXJ0LGhlPXQudG91Y2hEYXRhLmNhcHR1cmU7aWYoaGUpWC50b3VjaGVzLmxlbmd0aD09PTAmJih0LnRvdWNoRGF0YS5jYXB0dXJlPSExKSxYLnByZXZlbnREZWZhdWx0KCk7ZWxzZSByZXR1cm47dmFyIGdlPXQuc2VsZWN0aW9uO3Quc3dpcGVQYW5uaW5nPSExLHQuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcz0hMTt2YXIgbmU9dC5jeSx2ZT1uZS56b29tKCksVT10LnRvdWNoRGF0YS5ub3csVGU9dC50b3VjaERhdGEuZWFybGllcjtpZihYLnRvdWNoZXNbMF0pe3ZhciBpZT10LnByb2plY3RJbnRvVmlld3BvcnQoWC50b3VjaGVzWzBdLmNsaWVudFgsWC50b3VjaGVzWzBdLmNsaWVudFkpO1VbMF09aWVbMF0sVVsxXT1pZVsxXX1pZihYLnRvdWNoZXNbMV0pe3ZhciBpZT10LnByb2plY3RJbnRvVmlld3BvcnQoWC50b3VjaGVzWzFdLmNsaWVudFgsWC50b3VjaGVzWzFdLmNsaWVudFkpO1VbMl09aWVbMF0sVVszXT1pZVsxXX1pZihYLnRvdWNoZXNbMl0pe3ZhciBpZT10LnByb2plY3RJbnRvVmlld3BvcnQoWC50b3VjaGVzWzJdLmNsaWVudFgsWC50b3VjaGVzWzJdLmNsaWVudFkpO1VbNF09aWVbMF0sVVs1XT1pZVsxXX1mZSYmZmUudW5hY3RpdmF0ZSgpO3ZhciBFZTtpZih0LnRvdWNoRGF0YS5jeHQpe2lmKEVlPXtvcmlnaW5hbEV2ZW50OlgsdHlwZToiY3h0dGFwZW5kIixwb3NpdGlvbjp7eDpVWzBdLHk6VVsxXX19LGZlP2ZlLmVtaXQoRWUpOm5lLmVtaXQoRWUpLCF0LnRvdWNoRGF0YS5jeHREcmFnZ2VkKXt2YXIgQWU9e29yaWdpbmFsRXZlbnQ6WCx0eXBlOiJjeHR0YXAiLHBvc2l0aW9uOnt4OlVbMF0seTpVWzFdfX07ZmU/ZmUuZW1pdChBZSk6bmUuZW1pdChBZSl9dC50b3VjaERhdGEuc3RhcnQmJih0LnRvdWNoRGF0YS5zdGFydC5fcHJpdmF0ZS5ncmFiYmVkPSExKSx0LnRvdWNoRGF0YS5jeHQ9ITEsdC50b3VjaERhdGEuc3RhcnQ9bnVsbCx0LnJlZHJhdygpO3JldHVybn1pZighWC50b3VjaGVzWzJdJiZuZS5ib3hTZWxlY3Rpb25FbmFibGVkKCkmJnQudG91Y2hEYXRhLnNlbGVjdGluZyl7dC50b3VjaERhdGEuc2VsZWN0aW5nPSExO3ZhciBHZT1uZS5jb2xsZWN0aW9uKHQuZ2V0QWxsSW5Cb3goZ2VbMF0sZ2VbMV0sZ2VbMl0sZ2VbM10pKTtnZVswXT12b2lkIDAsZ2VbMV09dm9pZCAwLGdlWzJdPXZvaWQgMCxnZVszXT12b2lkIDAsZ2VbNF09MCx0LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLG5lLmVtaXQoe3R5cGU6ImJveGVuZCIsb3JpZ2luYWxFdmVudDpYLHBvc2l0aW9uOnt4OlVbMF0seTpVWzFdfX0pO3ZhciBCZT1vKGZ1bmN0aW9uKGh0KXtyZXR1cm4gaHQuc2VsZWN0YWJsZSgpJiYhaHQuc2VsZWN0ZWQoKX0sImVsZVdvdWxkQmVTZWxlY3RlZCIpO0dlLmVtaXQoImJveCIpLnN0ZEZpbHRlcihCZSkuc2VsZWN0KCkuZW1pdCgiYm94c2VsZWN0IiksR2Uubm9uZW1wdHkoKSYmdC5yZWRyYXdIaW50KCJlbGVzIiwhMCksdC5yZWRyYXcoKX1pZihmZT8udW5hY3RpdmF0ZSgpLFgudG91Y2hlc1syXSl0LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLHQucmVkcmF3SGludCgic2VsZWN0IiwhMCk7ZWxzZSBpZighWC50b3VjaGVzWzFdKXtpZighWC50b3VjaGVzWzBdKXtpZighWC50b3VjaGVzWzBdKXt0LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLHQucmVkcmF3SGludCgic2VsZWN0IiwhMCk7dmFyIG1lPXQuZHJhZ0RhdGEudG91Y2hEcmFnRWxlcztpZihmZSE9bnVsbCl7dmFyIEhlPWZlLl9wcml2YXRlLmdyYWJiZWQ7dihtZSksdC5yZWRyYXdIaW50KCJkcmFnIiwhMCksdC5yZWRyYXdIaW50KCJlbGVzIiwhMCksSGUmJihmZS5lbWl0KCJmcmVlb24iKSxtZS5lbWl0KCJmcmVlIiksdC5kcmFnRGF0YS5kaWREcmFnJiYoZmUuZW1pdCgiZHJhZ2ZyZWVvbiIpLG1lLmVtaXQoImRyYWdmcmVlIikpKSxuKGZlLFsidG91Y2hlbmQiLCJ0YXBlbmQiLCJ2bW91c2V1cCIsInRhcGRyYWdvdXQiXSxYLHt4OlVbMF0seTpVWzFdfSksZmUudW5hY3RpdmF0ZSgpLHQudG91Y2hEYXRhLnN0YXJ0PW51bGx9ZWxzZXt2YXIgT2U9dC5maW5kTmVhcmVzdEVsZW1lbnQoVVswXSxVWzFdLCEwLCEwKTtuKE9lLFsidG91Y2hlbmQiLCJ0YXBlbmQiLCJ2bW91c2V1cCIsInRhcGRyYWdvdXQiXSxYLHt4OlVbMF0seTpVWzFdfSl9dmFyIGV0PXQudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb25bMF0tVVswXSxidD1ldCpldCxrdD10LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uWzFdLVVbMV0sdnQ9a3Qqa3QscnQ9YnQrdnQseXQ9cnQqdmUqdmU7dC50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZHx8KGZlfHxuZS4kKCI6c2VsZWN0ZWQiKS51bnNlbGVjdChbInRhcHVuc2VsZWN0Il0pLG4oZmUsWyJ0YXAiLCJ2Y2xpY2siXSxYLHt4OlVbMF0seTpVWzFdfSksdWU9ITEsWC50aW1lU3RhbXAtdGU8PW5lLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKT8oY2UmJmNsZWFyVGltZW91dChjZSksdWU9ITAsdGU9bnVsbCxuKGZlLFsiZGJsdGFwIiwidmRibGNsaWNrIl0sWCx7eDpVWzBdLHk6VVsxXX0pKTooY2U9c2V0VGltZW91dChmdW5jdGlvbigpe3VlfHxuKGZlLFsib25ldGFwIiwidm9uZWNsaWNrIl0sWCx7eDpVWzBdLHk6VVsxXX0pfSxuZS5tdWx0aUNsaWNrRGVib3VuY2VUaW1lKCkpLHRlPVgudGltZVN0YW1wKSksZmUhPW51bGwmJiF0LmRyYWdEYXRhLmRpZERyYWcmJmZlLl9wcml2YXRlLnNlbGVjdGFibGUmJnl0PHQudG91Y2hUYXBUaHJlc2hvbGQyJiYhdC5waW5jaGluZyYmKG5lLnNlbGVjdGlvblR5cGUoKT09PSJzaW5nbGUiPyhuZS4kKHIpLnVubWVyZ2UoZmUpLnVuc2VsZWN0KFsidGFwdW5zZWxlY3QiXSksZmUuc2VsZWN0KFsidGFwc2VsZWN0Il0pKTpmZS5zZWxlY3RlZCgpP2ZlLnVuc2VsZWN0KFsidGFwdW5zZWxlY3QiXSk6ZmUuc2VsZWN0KFsidGFwc2VsZWN0Il0pLHQucmVkcmF3SGludCgiZWxlcyIsITApKSx0LnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkPSEwfX19Zm9yKHZhciBVZT0wO1VlPFUubGVuZ3RoO1VlKyspVGVbVWVdPVVbVWVdO3QuZHJhZ0RhdGEuZGlkRHJhZz0hMSxYLnRvdWNoZXMubGVuZ3RoPT09MCYmKHQudG91Y2hEYXRhLmRyYWdEZWx0YT1bXSx0LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uPVtudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sdC50b3VjaERhdGEuc3RhcnRHUG9zaXRpb249bnVsbCx0LnRvdWNoRGF0YS5kaWRTZWxlY3Q9ITEpLFgudG91Y2hlcy5sZW5ndGg8MiYmKFgudG91Y2hlcy5sZW5ndGg9PT0xJiYodC50b3VjaERhdGEuc3RhcnRHUG9zaXRpb249W1gudG91Y2hlc1swXS5jbGllbnRYLFgudG91Y2hlc1swXS5jbGllbnRZXSksdC5waW5jaGluZz0hMSx0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx0LnJlZHJhdygpKX0sInRvdWNoZW5kSGFuZGxlciIpLCExKSx0eXBlb2YgVG91Y2hFdmVudD4idSIpe3ZhciBOZT1bXSxzZT1vKGZ1bmN0aW9uKFgpe3JldHVybntjbGllbnRYOlguY2xpZW50WCxjbGllbnRZOlguY2xpZW50WSxmb3JjZToxLGlkZW50aWZpZXI6WC5wb2ludGVySWQscGFnZVg6WC5wYWdlWCxwYWdlWTpYLnBhZ2VZLHJhZGl1c1g6WC53aWR0aC8yLHJhZGl1c1k6WC5oZWlnaHQvMixzY3JlZW5YOlguc2NyZWVuWCxzY3JlZW5ZOlguc2NyZWVuWSx0YXJnZXQ6WC50YXJnZXR9fSwibWFrZVRvdWNoIiksa2U9byhmdW5jdGlvbihYKXtyZXR1cm57ZXZlbnQ6WCx0b3VjaDpzZShYKX19LCJtYWtlUG9pbnRlciIpLFJlPW8oZnVuY3Rpb24oWCl7TmUucHVzaChrZShYKSl9LCJhZGRQb2ludGVyIiksQ2U9byhmdW5jdGlvbihYKXtmb3IodmFyIGZlPTA7ZmU8TmUubGVuZ3RoO2ZlKyspe3ZhciBoZT1OZVtmZV07aWYoaGUuZXZlbnQucG9pbnRlcklkPT09WC5wb2ludGVySWQpe05lLnNwbGljZShmZSwxKTtyZXR1cm59fX0sInJlbW92ZVBvaW50ZXIiKSxQZT1vKGZ1bmN0aW9uKFgpe3ZhciBmZT1OZS5maWx0ZXIoZnVuY3Rpb24oaGUpe3JldHVybiBoZS5ldmVudC5wb2ludGVySWQ9PT1YLnBvaW50ZXJJZH0pWzBdO2ZlLmV2ZW50PVgsZmUudG91Y2g9c2UoWCl9LCJ1cGRhdGVQb2ludGVyIiksSWU9byhmdW5jdGlvbihYKXtYLnRvdWNoZXM9TmUubWFwKGZ1bmN0aW9uKGZlKXtyZXR1cm4gZmUudG91Y2h9KX0sImFkZFRvdWNoZXNUb0V2ZW50IiksJGU9byhmdW5jdGlvbihYKXtyZXR1cm4gWC5wb2ludGVyVHlwZT09PSJtb3VzZSJ8fFgucG9pbnRlclR5cGU9PT00fSwicG9pbnRlcklzTW91c2UiKTt0LnJlZ2lzdGVyQmluZGluZyh0LmNvbnRhaW5lciwicG9pbnRlcmRvd24iLGZ1bmN0aW9uKHllKXskZSh5ZSl8fCh5ZS5wcmV2ZW50RGVmYXVsdCgpLFJlKHllKSxJZSh5ZSksSCh5ZSkpfSksdC5yZWdpc3RlckJpbmRpbmcodC5jb250YWluZXIsInBvaW50ZXJ1cCIsZnVuY3Rpb24oeWUpeyRlKHllKXx8KENlKHllKSxJZSh5ZSksYWUoeWUpKX0pLHQucmVnaXN0ZXJCaW5kaW5nKHQuY29udGFpbmVyLCJwb2ludGVyY2FuY2VsIixmdW5jdGlvbih5ZSl7JGUoeWUpfHwoQ2UoeWUpLEllKHllKSxRKHllKSl9KSx0LnJlZ2lzdGVyQmluZGluZyh0LmNvbnRhaW5lciwicG9pbnRlcm1vdmUiLGZ1bmN0aW9uKHllKXskZSh5ZSl8fCh5ZS5wcmV2ZW50RGVmYXVsdCgpLFBlKHllKSxJZSh5ZSkscSh5ZSkpfSl9fTtvaD17fTtvaC5nZW5lcmF0ZVBvbHlnb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzW3RdPXtyZW5kZXJlcjp0aGlzLG5hbWU6dCxwb2ludHM6ZSxkcmF3Om8oZnVuY3Rpb24obixpLGEscyxsLHUpe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCgicG9seWdvbiIsbixpLGEscyxsLHRoaXMucG9pbnRzKX0sImRyYXciKSxpbnRlcnNlY3RMaW5lOm8oZnVuY3Rpb24obixpLGEscyxsLHUsaCxmKXtyZXR1cm4gb2IobCx1LHRoaXMucG9pbnRzLG4saSxhLzIscy8yLGgpfSwiaW50ZXJzZWN0TGluZSIpLGNoZWNrUG9pbnQ6byhmdW5jdGlvbihuLGksYSxzLGwsdSxoLGYpe3JldHVybiBhaChuLGksdGhpcy5wb2ludHMsdSxoLHMsbCxbMCwtMV0sYSl9LCJjaGVja1BvaW50Iil9fTtvaC5nZW5lcmF0ZUVsbGlwc2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzLmVsbGlwc2U9e3JlbmRlcmVyOnRoaXMsbmFtZToiZWxsaXBzZSIsZHJhdzpvKGZ1bmN0aW9uKGUscixuLGksYSxzKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLGUscixuLGksYSl9LCJkcmF3IiksaW50ZXJzZWN0TGluZTpvKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSl7cmV0dXJuIGJqZShhLHMsZSxyLG4vMitsLGkvMitsKX0sImludGVyc2VjdExpbmUiKSxjaGVja1BvaW50Om8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1KXtyZXR1cm4gcTAoZSxyLGksYSxzLGwsbil9LCJjaGVja1BvaW50Iil9fTtvaC5nZW5lcmF0ZVJvdW5kUG9seWdvbj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLm5vZGVTaGFwZXNbdF09e3JlbmRlcmVyOnRoaXMsbmFtZTp0LHBvaW50czplLGdldE9yQ3JlYXRlQ29ybmVyczpvKGZ1bmN0aW9uKG4saSxhLHMsbCx1LGgpe2lmKHVbaF0hPT12b2lkIDAmJnVbaCsiLWN4Il09PT1uJiZ1W2grIi1jeSJdPT09aSlyZXR1cm4gdVtoXTt1W2hdPW5ldyBBcnJheShlLmxlbmd0aC8yKSx1W2grIi1jeCJdPW4sdVtoKyItY3kiXT1pO3ZhciBmPWEvMixkPXMvMjtsPWw9PT0iYXV0byI/ZGdlKGEscyk6bDtmb3IodmFyIHA9bmV3IEFycmF5KGUubGVuZ3RoLzIpLG09MDttPGUubGVuZ3RoLzI7bSsrKXBbbV09e3g6bitmKmVbbSoyXSx5OmkrZCplW20qMisxXX07dmFyIGcseSx2LHgsYj1wLmxlbmd0aDtmb3IoeT1wW2ItMV0sZz0wO2c8YjtnKyspdj1wW2clYl0seD1wWyhnKzEpJWJdLHVbaF1bZ109VEIoeSx2LHgsbCkseT12LHY9eDtyZXR1cm4gdVtoXX0sImdldE9yQ3JlYXRlQ29ybmVycyIpLGRyYXc6byhmdW5jdGlvbihuLGksYSxzLGwsdSxoKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwoInJvdW5kLXBvbHlnb24iLG4saSxhLHMsbCx0aGlzLnBvaW50cyx0aGlzLmdldE9yQ3JlYXRlQ29ybmVycyhpLGEscyxsLHUsaCwiZHJhd0Nvcm5lcnMiKSl9LCJkcmF3IiksaW50ZXJzZWN0TGluZTpvKGZ1bmN0aW9uKG4saSxhLHMsbCx1LGgsZixkKXtyZXR1cm4gd2plKGwsdSx0aGlzLnBvaW50cyxuLGksYSxzLGgsdGhpcy5nZXRPckNyZWF0ZUNvcm5lcnMobixpLGEscyxmLGQsImNvcm5lcnMiKSl9LCJpbnRlcnNlY3RMaW5lIiksY2hlY2tQb2ludDpvKGZ1bmN0aW9uKG4saSxhLHMsbCx1LGgsZixkKXtyZXR1cm4geGplKG4saSx0aGlzLnBvaW50cyx1LGgscyxsLHRoaXMuZ2V0T3JDcmVhdGVDb3JuZXJzKHUsaCxzLGwsZixkLCJjb3JuZXJzIikpfSwiY2hlY2tQb2ludCIpfX07b2guZ2VuZXJhdGVSb3VuZFJlY3RhbmdsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVTaGFwZXNbInJvdW5kLXJlY3RhbmdsZSJdPXRoaXMubm9kZVNoYXBlcy5yb3VuZHJlY3RhbmdsZT17cmVuZGVyZXI6dGhpcyxuYW1lOiJyb3VuZC1yZWN0YW5nbGUiLHBvaW50czptcyg0LDApLGRyYXc6byhmdW5jdGlvbihlLHIsbixpLGEscyl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKHRoaXMubmFtZSxlLHIsbixpLGEsdGhpcy5wb2ludHMscyl9LCJkcmF3IiksaW50ZXJzZWN0TGluZTpvKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSl7cmV0dXJuIGhnZShhLHMsZSxyLG4saSxsLHUpfSwiaW50ZXJzZWN0TGluZSIpLGNoZWNrUG9pbnQ6byhmdW5jdGlvbihlLHIsbixpLGEscyxsLHUpe3ZhciBoPWkvMixmPWEvMjt1PXU9PT0iYXV0byI/UTAoaSxhKTp1LHU9TWF0aC5taW4oaCxmLHUpO3ZhciBkPXUqMjtyZXR1cm4hIShhaChlLHIsdGhpcy5wb2ludHMscyxsLGksYS1kLFswLC0xXSxuKXx8YWgoZSxyLHRoaXMucG9pbnRzLHMsbCxpLWQsYSxbMCwtMV0sbil8fHEwKGUscixkLGQscy1oK3UsbC1mK3Usbil8fHEwKGUscixkLGQscytoLXUsbC1mK3Usbil8fHEwKGUscixkLGQscytoLXUsbCtmLXUsbil8fHEwKGUscixkLGQscy1oK3UsbCtmLXUsbikpfSwiY2hlY2tQb2ludCIpfX07b2guZ2VuZXJhdGVDdXRSZWN0YW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzWyJjdXQtcmVjdGFuZ2xlIl09dGhpcy5ub2RlU2hhcGVzLmN1dHJlY3RhbmdsZT17cmVuZGVyZXI6dGhpcyxuYW1lOiJjdXQtcmVjdGFuZ2xlIixjb3JuZXJMZW5ndGg6dUIoKSxwb2ludHM6bXMoNCwwKSxkcmF3Om8oZnVuY3Rpb24oZSxyLG4saSxhLHMpe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCh0aGlzLm5hbWUsZSxyLG4saSxhLG51bGwscyl9LCJkcmF3IiksZ2VuZXJhdGVDdXRUcmlhbmdsZVB0czpvKGZ1bmN0aW9uKGUscixuLGksYSl7dmFyIHM9YT09PSJhdXRvIj90aGlzLmNvcm5lckxlbmd0aDphLGw9ci8yLHU9ZS8yLGg9bi11LGY9bit1LGQ9aS1sLHA9aStsO3JldHVybnt0b3BMZWZ0OltoLGQrcyxoK3MsZCxoK3MsZCtzXSx0b3BSaWdodDpbZi1zLGQsZixkK3MsZi1zLGQrc10sYm90dG9tUmlnaHQ6W2YscC1zLGYtcyxwLGYtcyxwLXNdLGJvdHRvbUxlZnQ6W2grcyxwLGgscC1zLGgrcyxwLXNdfX0sImdlbmVyYXRlQ3V0VHJpYW5nbGVQdHMiKSxpbnRlcnNlY3RMaW5lOm8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1KXt2YXIgaD10aGlzLmdlbmVyYXRlQ3V0VHJpYW5nbGVQdHMobisyKmwsaSsyKmwsZSxyLHUpLGY9W10uY29uY2F0LmFwcGx5KFtdLFtoLnRvcExlZnQuc3BsaWNlKDAsNCksaC50b3BSaWdodC5zcGxpY2UoMCw0KSxoLmJvdHRvbVJpZ2h0LnNwbGljZSgwLDQpLGguYm90dG9tTGVmdC5zcGxpY2UoMCw0KV0pO3JldHVybiBvYihhLHMsZixlLHIpfSwiaW50ZXJzZWN0TGluZSIpLGNoZWNrUG9pbnQ6byhmdW5jdGlvbihlLHIsbixpLGEscyxsLHUpe3ZhciBoPXU9PT0iYXV0byI/dGhpcy5jb3JuZXJMZW5ndGg6dTtpZihhaChlLHIsdGhpcy5wb2ludHMscyxsLGksYS0yKmgsWzAsLTFdLG4pfHxhaChlLHIsdGhpcy5wb2ludHMscyxsLGktMipoLGEsWzAsLTFdLG4pKXJldHVybiEwO3ZhciBmPXRoaXMuZ2VuZXJhdGVDdXRUcmlhbmdsZVB0cyhpLGEscyxsKTtyZXR1cm4ganMoZSxyLGYudG9wTGVmdCl8fGpzKGUscixmLnRvcFJpZ2h0KXx8anMoZSxyLGYuYm90dG9tUmlnaHQpfHxqcyhlLHIsZi5ib3R0b21MZWZ0KX0sImNoZWNrUG9pbnQiKX19O29oLmdlbmVyYXRlQmFycmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVNoYXBlcy5iYXJyZWw9e3JlbmRlcmVyOnRoaXMsbmFtZToiYmFycmVsIixwb2ludHM6bXMoNCwwKSxkcmF3Om8oZnVuY3Rpb24oZSxyLG4saSxhLHMpe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCh0aGlzLm5hbWUsZSxyLG4saSxhKX0sImRyYXciKSxpbnRlcnNlY3RMaW5lOm8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1KXt2YXIgaD0uMTUsZj0uNSxkPS44NSxwPXRoaXMuZ2VuZXJhdGVCYXJyZWxCZXppZXJQdHMobisyKmwsaSsyKmwsZSxyKSxtPW8oZnVuY3Rpb24odil7dmFyIHg9eTEoe3g6dlswXSx5OnZbMV19LHt4OnZbMl0seTp2WzNdfSx7eDp2WzRdLHk6dls1XX0saCksYj15MSh7eDp2WzBdLHk6dlsxXX0se3g6dlsyXSx5OnZbM119LHt4OnZbNF0seTp2WzVdfSxmKSx3PXkxKHt4OnZbMF0seTp2WzFdfSx7eDp2WzJdLHk6dlszXX0se3g6dls0XSx5OnZbNV19LGQpO3JldHVyblt2WzBdLHZbMV0seC54LHgueSxiLngsYi55LHcueCx3Lnksdls0XSx2WzVdXX0sImFwcHJveGltYXRlQmFycmVsQ3VydmVQdHMiKSxnPVtdLmNvbmNhdChtKHAudG9wTGVmdCksbShwLnRvcFJpZ2h0KSxtKHAuYm90dG9tUmlnaHQpLG0ocC5ib3R0b21MZWZ0KSk7cmV0dXJuIG9iKGEscyxnLGUscil9LCJpbnRlcnNlY3RMaW5lIiksZ2VuZXJhdGVCYXJyZWxCZXppZXJQdHM6byhmdW5jdGlvbihlLHIsbixpKXt2YXIgYT1yLzIscz1lLzIsbD1uLXMsdT1uK3MsaD1pLWEsZj1pK2EsZD1HUChlLHIpLHA9ZC5oZWlnaHRPZmZzZXQsbT1kLndpZHRoT2Zmc2V0LGc9ZC5jdHJsUHRPZmZzZXRQY3QqZSx5PXt0b3BMZWZ0OltsLGgrcCxsK2csaCxsK20saF0sdG9wUmlnaHQ6W3UtbSxoLHUtZyxoLHUsaCtwXSxib3R0b21SaWdodDpbdSxmLXAsdS1nLGYsdS1tLGZdLGJvdHRvbUxlZnQ6W2wrbSxmLGwrZyxmLGwsZi1wXX07cmV0dXJuIHkudG9wTGVmdC5pc1RvcD0hMCx5LnRvcFJpZ2h0LmlzVG9wPSEwLHkuYm90dG9tTGVmdC5pc0JvdHRvbT0hMCx5LmJvdHRvbVJpZ2h0LmlzQm90dG9tPSEwLHl9LCJnZW5lcmF0ZUJhcnJlbEJlemllclB0cyIpLGNoZWNrUG9pbnQ6byhmdW5jdGlvbihlLHIsbixpLGEscyxsLHUpe3ZhciBoPUdQKGksYSksZj1oLmhlaWdodE9mZnNldCxkPWgud2lkdGhPZmZzZXQ7aWYoYWgoZSxyLHRoaXMucG9pbnRzLHMsbCxpLGEtMipmLFswLC0xXSxuKXx8YWgoZSxyLHRoaXMucG9pbnRzLHMsbCxpLTIqZCxhLFswLC0xXSxuKSlyZXR1cm4hMDtmb3IodmFyIHA9dGhpcy5nZW5lcmF0ZUJhcnJlbEJlemllclB0cyhpLGEscyxsKSxtPW8oZnVuY3Rpb24oUyxBLEkpe3ZhciBEPUlbNF0saz1JWzJdLFI9SVswXSxDPUlbNV0sTz1JWzFdLE49TWF0aC5taW4oRCxSKSxQPU1hdGgubWF4KEQsUiksRj1NYXRoLm1pbihDLE8pLEI9TWF0aC5tYXgoQyxPKTtpZihOPD1TJiZTPD1QJiZGPD1BJiZBPD1CKXt2YXIgRz1UamUoRCxrLFIpLHo9bWplKEdbMF0sR1sxXSxHWzJdLFMpLFc9ei5maWx0ZXIoZnVuY3Rpb24oWil7cmV0dXJuIDA8PVomJlo8PTF9KTtpZihXLmxlbmd0aD4wKXJldHVybiBXWzBdfXJldHVybiBudWxsfSwiZ2V0Q3VydmVUIiksZz1PYmplY3Qua2V5cyhwKSx5PTA7eTxnLmxlbmd0aDt5Kyspe3ZhciB2PWdbeV0seD1wW3ZdLGI9bShlLHIseCk7aWYoYiE9bnVsbCl7dmFyIHc9eFs1XSxfPXhbM10sVD14WzFdLEU9bGEodyxfLFQsYik7aWYoeC5pc1RvcCYmRTw9cnx8eC5pc0JvdHRvbSYmcjw9RSlyZXR1cm4hMH19cmV0dXJuITF9LCJjaGVja1BvaW50Iil9fTtvaC5nZW5lcmF0ZUJvdHRvbVJvdW5kcmVjdGFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVNoYXBlc1siYm90dG9tLXJvdW5kLXJlY3RhbmdsZSJdPXRoaXMubm9kZVNoYXBlcy5ib3R0b21yb3VuZHJlY3RhbmdsZT17cmVuZGVyZXI6dGhpcyxuYW1lOiJib3R0b20tcm91bmQtcmVjdGFuZ2xlIixwb2ludHM6bXMoNCwwKSxkcmF3Om8oZnVuY3Rpb24oZSxyLG4saSxhLHMpe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCh0aGlzLm5hbWUsZSxyLG4saSxhLHRoaXMucG9pbnRzLHMpfSwiZHJhdyIpLGludGVyc2VjdExpbmU6byhmdW5jdGlvbihlLHIsbixpLGEscyxsLHUpe3ZhciBoPWUtKG4vMitsKSxmPXItKGkvMitsKSxkPWYscD1lKyhuLzIrbCksbT1OZihhLHMsZSxyLGgsZixwLGQsITEpO3JldHVybiBtLmxlbmd0aD4wP206aGdlKGEscyxlLHIsbixpLGwsdSl9LCJpbnRlcnNlY3RMaW5lIiksY2hlY2tQb2ludDpvKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSl7dT11PT09ImF1dG8iP1EwKGksYSk6dTt2YXIgaD0yKnU7aWYoYWgoZSxyLHRoaXMucG9pbnRzLHMsbCxpLGEtaCxbMCwtMV0sbil8fGFoKGUscix0aGlzLnBvaW50cyxzLGwsaS1oLGEsWzAsLTFdLG4pKXJldHVybiEwO3ZhciBmPWkvMisyKm4sZD1hLzIrMipuLHA9W3MtZixsLWQscy1mLGwscytmLGwscytmLGwtZF07cmV0dXJuISEoanMoZSxyLHApfHxxMChlLHIsaCxoLHMraS8yLXUsbCthLzItdSxuKXx8cTAoZSxyLGgsaCxzLWkvMit1LGwrYS8yLXUsbikpfSwiY2hlY2tQb2ludCIpfX07b2gucmVnaXN0ZXJOb2RlU2hhcGVzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5ub2RlU2hhcGVzPXt9LGU9dGhpczt0aGlzLmdlbmVyYXRlRWxsaXBzZSgpLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJ0cmlhbmdsZSIsbXMoMywwKSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtdHJpYW5nbGUiLG1zKDMsMCkpLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJyZWN0YW5nbGUiLG1zKDQsMCkpLHQuc3F1YXJlPXQucmVjdGFuZ2xlLHRoaXMuZ2VuZXJhdGVSb3VuZFJlY3RhbmdsZSgpLHRoaXMuZ2VuZXJhdGVDdXRSZWN0YW5nbGUoKSx0aGlzLmdlbmVyYXRlQmFycmVsKCksdGhpcy5nZW5lcmF0ZUJvdHRvbVJvdW5kcmVjdGFuZ2xlKCk7e3ZhciByPVswLDEsMSwwLDAsLTEsLTEsMF07dGhpcy5nZW5lcmF0ZVBvbHlnb24oImRpYW1vbmQiLHIpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLWRpYW1vbmQiLHIpfXRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJwZW50YWdvbiIsbXMoNSwwKSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtcGVudGFnb24iLG1zKDUsMCkpLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJoZXhhZ29uIixtcyg2LDApKSx0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCJyb3VuZC1oZXhhZ29uIixtcyg2LDApKSx0aGlzLmdlbmVyYXRlUG9seWdvbigiaGVwdGFnb24iLG1zKDcsMCkpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLWhlcHRhZ29uIixtcyg3LDApKSx0aGlzLmdlbmVyYXRlUG9seWdvbigib2N0YWdvbiIsbXMoOCwwKSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtb2N0YWdvbiIsbXMoOCwwKSk7dmFyIG49bmV3IEFycmF5KDIwKTt7dmFyIGk9elAoNSwwKSxhPXpQKDUsTWF0aC5QSS81KSxzPS41KigzLU1hdGguc3FydCg1KSk7cyo9MS41Nztmb3IodmFyIGw9MDtsPGEubGVuZ3RoLzI7bCsrKWFbbCoyXSo9cyxhW2wqMisxXSo9cztmb3IodmFyIGw9MDtsPDIwLzQ7bCsrKW5bbCo0XT1pW2wqMl0sbltsKjQrMV09aVtsKjIrMV0sbltsKjQrMl09YVtsKjJdLG5bbCo0KzNdPWFbbCoyKzFdfW49ZmdlKG4pLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJzdGFyIixuKSx0aGlzLmdlbmVyYXRlUG9seWdvbigidmVlIixbLTEsLTEsMCwtLjMzMywxLC0xLDAsMV0pLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJyaG9tYm9pZCIsWy0xLC0xLC4zMzMsLTEsMSwxLC0uMzMzLDFdKSx0aGlzLmdlbmVyYXRlUG9seWdvbigicmlnaHQtcmhvbWJvaWQiLFstLjMzMywtMSwxLC0xLC4zMzMsMSwtMSwxXSksdGhpcy5ub2RlU2hhcGVzLmNvbmNhdmVoZXhhZ29uPXRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJjb25jYXZlLWhleGFnb24iLFstMSwtLjk1LC0uNzUsMCwtMSwuOTUsMSwuOTUsLjc1LDAsMSwtLjk1XSk7e3ZhciB1PVstMSwtMSwuMjUsLTEsMSwwLC4yNSwxLC0xLDFdO3RoaXMuZ2VuZXJhdGVQb2x5Z29uKCJ0YWciLHUpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLXRhZyIsdSl9dC5tYWtlUG9seWdvbj1mdW5jdGlvbihoKXt2YXIgZj1oLmpvaW4oIiQiKSxkPSJwb2x5Z29uLSIrZixwO3JldHVybihwPXRoaXNbZF0pP3A6ZS5nZW5lcmF0ZVBvbHlnb24oZCxoKX19O2JiPXt9O2JiLnRpbWVUb1JlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlZHJhd1RvdGFsVGltZS90aGlzLnJlZHJhd0NvdW50fTtiYi5yZWRyYXc9ZnVuY3Rpb24odCl7dD10fHxzZ2UoKTt2YXIgZT10aGlzO2UuYXZlcmFnZVJlZHJhd1RpbWU9PT12b2lkIDAmJihlLmF2ZXJhZ2VSZWRyYXdUaW1lPTApLGUubGFzdFJlZHJhd1RpbWU9PT12b2lkIDAmJihlLmxhc3RSZWRyYXdUaW1lPTApLGUubGFzdERyYXdUaW1lPT09dm9pZCAwJiYoZS5sYXN0RHJhd1RpbWU9MCksZS5yZXF1ZXN0ZWRGcmFtZT0hMCxlLnJlbmRlck9wdGlvbnM9dH07YmIuYmVmb3JlUmVuZGVyPWZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMuZGVzdHJveWVkKXtlPT1udWxsJiZkaSgiUHJpb3JpdHkgaXMgbm90IG9wdGlvbmFsIGZvciBiZWZvcmVSZW5kZXIiKTt2YXIgcj10aGlzLmJlZm9yZVJlbmRlckNhbGxiYWNrcztyLnB1c2goe2ZuOnQscHJpb3JpdHk6ZX0pLHIuc29ydChmdW5jdGlvbihuLGkpe3JldHVybiBpLnByaW9yaXR5LW4ucHJpb3JpdHl9KX19O1JtZT1vKGZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGk9ZS5iZWZvcmVSZW5kZXJDYWxsYmFja3MsYT0wO2E8aS5sZW5ndGg7YSsrKWlbYV0uZm4ocixuKX0sImJlZm9yZVJlbmRlckNhbGxiYWNrcyIpO2JiLnN0YXJ0UmVuZGVyTG9vcD1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10LmN5O2lmKCF0LnJlbmRlckxvb3BTdGFydGVkKXt0LnJlbmRlckxvb3BTdGFydGVkPSEwO3ZhciByPW8oZnVuY3Rpb24gbihpKXtpZighdC5kZXN0cm95ZWQpe2lmKCFlLmJhdGNoaW5nKCkpaWYodC5yZXF1ZXN0ZWRGcmFtZSYmIXQuc2tpcEZyYW1lKXtSbWUodCwhMCxpKTt2YXIgYT1paCgpO3QucmVuZGVyKHQucmVuZGVyT3B0aW9ucyk7dmFyIHM9dC5sYXN0RHJhd1RpbWU9aWgoKTt0LmF2ZXJhZ2VSZWRyYXdUaW1lPT09dm9pZCAwJiYodC5hdmVyYWdlUmVkcmF3VGltZT1zLWEpLHQucmVkcmF3Q291bnQ9PT12b2lkIDAmJih0LnJlZHJhd0NvdW50PTApLHQucmVkcmF3Q291bnQrKyx0LnJlZHJhd1RvdGFsVGltZT09PXZvaWQgMCYmKHQucmVkcmF3VG90YWxUaW1lPTApO3ZhciBsPXMtYTt0LnJlZHJhd1RvdGFsVGltZSs9bCx0Lmxhc3RSZWRyYXdUaW1lPWwsdC5hdmVyYWdlUmVkcmF3VGltZT10LmF2ZXJhZ2VSZWRyYXdUaW1lLzIrbC8yLHQucmVxdWVzdGVkRnJhbWU9ITF9ZWxzZSBSbWUodCwhMSxpKTt0LnNraXBGcmFtZT0hMSxBNihuKX19LCJyZW5kZXJGbiIpO0E2KHIpfX07bmV0PW8oZnVuY3Rpb24oZSl7dGhpcy5pbml0KGUpfSwiQmFzZVJlbmRlcmVyIiksaDFlPW5ldCxNMT1oMWUucHJvdG90eXBlO00xLmNsaWVudEZ1bmN0aW9ucz1bInJlZHJhd0hpbnQiLCJyZW5kZXIiLCJyZW5kZXJUbyIsIm1hdGNoQ2FudmFzU2l6ZSIsIm5vZGVTaGFwZUltcGwiLCJhcnJvd1NoYXBlSW1wbCJdO00xLmluaXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztlLm9wdGlvbnM9dCxlLmN5PXQuY3k7dmFyIHI9ZS5jb250YWluZXI9dC5jeS5jb250YWluZXIoKSxuPWUuY3kud2luZG93KCk7aWYobil7dmFyIGk9bi5kb2N1bWVudCxhPWkuaGVhZCxzPSJfX19fX19fX19fY3l0b3NjYXBlX3N0eWxlc2hlZXQiLGw9Il9fX19fX19fX19jeXRvc2NhcGVfY29udGFpbmVyIix1PWkuZ2V0RWxlbWVudEJ5SWQocykhPW51bGw7aWYoci5jbGFzc05hbWUuaW5kZXhPZihsKTwwJiYoci5jbGFzc05hbWU9KHIuY2xhc3NOYW1lfHwiIikrIiAiK2wpLCF1KXt2YXIgaD1pLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7aC5pZD1zLGgudGV4dENvbnRlbnQ9Ii4iK2wrIiB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgfSIsYS5pbnNlcnRCZWZvcmUoaCxhLmNoaWxkcmVuWzBdKX12YXIgZj1uLmdldENvbXB1dGVkU3R5bGUociksZD1mLmdldFByb3BlcnR5VmFsdWUoInBvc2l0aW9uIik7ZD09PSJzdGF0aWMiJiZvbigiQSBDeXRvc2NhcGUgY29udGFpbmVyIGhhcyBzdHlsZSBwb3NpdGlvbjpzdGF0aWMgYW5kIHNvIGNhbiBub3QgdXNlIFVJIGV4dGVuc2lvbnMgcHJvcGVybHkiKX1lLnNlbGVjdGlvbj1bdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLDBdLGUuYmV6aWVyUHJvalBjdHM9Wy4wNSwuMjI1LC40LC41LC42LC43NzUsLjk1XSxlLmhvdmVyRGF0YT17ZG93bjpudWxsLGxhc3Q6bnVsbCxkb3duVGltZTpudWxsLHRyaWdnZXJNb2RlOm51bGwsZHJhZ2dpbmc6ITEsaW5pdGlhbFBhbjpbbnVsbCxudWxsXSxjYXB0dXJlOiExfSxlLmRyYWdEYXRhPXtwb3NzaWJsZURyYWdFbGVtZW50czpbXX0sZS50b3VjaERhdGE9e3N0YXJ0Om51bGwsY2FwdHVyZTohMSxzdGFydFBvc2l0aW9uOltudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sc2luZ2xlVG91Y2hTdGFydFRpbWU6bnVsbCxzaW5nbGVUb3VjaE1vdmVkOiEwLG5vdzpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLGVhcmxpZXI6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXX0sZS5yZWRyYXdzPTAsZS5zaG93RnBzPXQuc2hvd0ZwcyxlLmRlYnVnPXQuZGVidWcsZS5oaWRlRWRnZXNPblZpZXdwb3J0PXQuaGlkZUVkZ2VzT25WaWV3cG9ydCxlLnRleHR1cmVPblZpZXdwb3J0PXQudGV4dHVyZU9uVmlld3BvcnQsZS53aGVlbFNlbnNpdGl2aXR5PXQud2hlZWxTZW5zaXRpdml0eSxlLm1vdGlvbkJsdXJFbmFibGVkPXQubW90aW9uQmx1cixlLmZvcmNlZFBpeGVsUmF0aW89eHQodC5waXhlbFJhdGlvKT90LnBpeGVsUmF0aW86bnVsbCxlLm1vdGlvbkJsdXI9dC5tb3Rpb25CbHVyLGUubW90aW9uQmx1ck9wYWNpdHk9dC5tb3Rpb25CbHVyT3BhY2l0eSxlLm1vdGlvbkJsdXJUcmFuc3BhcmVuY3k9MS1lLm1vdGlvbkJsdXJPcGFjaXR5LGUubW90aW9uQmx1clB4UmF0aW89MSxlLm1iUHhSQmx1cnJ5PTEsZS5taW5NYkxvd1F1YWxGcmFtZXM9NCxlLmZ1bGxRdWFsaXR5TWI9ITEsZS5jbGVhcmVkRm9yTW90aW9uQmx1cj1bXSxlLmRlc2t0b3BUYXBUaHJlc2hvbGQ9dC5kZXNrdG9wVGFwVGhyZXNob2xkLGUuZGVza3RvcFRhcFRocmVzaG9sZDI9dC5kZXNrdG9wVGFwVGhyZXNob2xkKnQuZGVza3RvcFRhcFRocmVzaG9sZCxlLnRvdWNoVGFwVGhyZXNob2xkPXQudG91Y2hUYXBUaHJlc2hvbGQsZS50b3VjaFRhcFRocmVzaG9sZDI9dC50b3VjaFRhcFRocmVzaG9sZCp0LnRvdWNoVGFwVGhyZXNob2xkLGUudGFwaG9sZER1cmF0aW9uPTUwMCxlLmJpbmRpbmdzPVtdLGUuYmVmb3JlUmVuZGVyQ2FsbGJhY2tzPVtdLGUuYmVmb3JlUmVuZGVyUHJpb3JpdGllcz17YW5pbWF0aW9uczo0MDAsZWxlQ2FsY3M6MzAwLGVsZVR4ckRlcToyMDAsbHlyVHhyRGVxOjE1MCxseXJUeHJTa2lwOjEwMH0sZS5yZWdpc3Rlck5vZGVTaGFwZXMoKSxlLnJlZ2lzdGVyQXJyb3dTaGFwZXMoKSxlLnJlZ2lzdGVyQ2FsY3VsYXRpb25MaXN0ZW5lcnMoKX07TTEubm90aWZ5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuY3k7aWYoIXRoaXMuZGVzdHJveWVkKXtpZih0PT09ImluaXQiKXtyLmxvYWQoKTtyZXR1cm59aWYodD09PSJkZXN0cm95Iil7ci5kZXN0cm95KCk7cmV0dXJufSh0PT09ImFkZCJ8fHQ9PT0icmVtb3ZlInx8dD09PSJtb3ZlIiYmbi5oYXNDb21wb3VuZE5vZGVzKCl8fHQ9PT0ibG9hZCJ8fHQ9PT0iem9yZGVyInx8dD09PSJtb3VudCIpJiZyLmludmFsaWRhdGVDYWNoZWRaU29ydGVkRWxlcygpLHQ9PT0idmlld3BvcnQiJiZyLnJlZHJhd0hpbnQoInNlbGVjdCIsITApLCh0PT09ImxvYWQifHx0PT09InJlc2l6ZSJ8fHQ9PT0ibW91bnQiKSYmKHIuaW52YWxpZGF0ZUNvbnRhaW5lckNsaWVudENvb3Jkc0NhY2hlKCksci5tYXRjaENhbnZhc1NpemUoci5jb250YWluZXIpKSxyLnJlZHJhd0hpbnQoImVsZXMiLCEwKSxyLnJlZHJhd0hpbnQoImRyYWciLCEwKSx0aGlzLnN0YXJ0UmVuZGVyTG9vcCgpLHRoaXMucmVkcmF3KCl9fTtNMS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0LmRlc3Ryb3llZD0hMCx0LmN5LnN0b3BBbmltYXRpb25Mb29wKCk7Zm9yKHZhciBlPTA7ZTx0LmJpbmRpbmdzLmxlbmd0aDtlKyspe3ZhciByPXQuYmluZGluZ3NbZV0sbj1yLGk9bi50YXJnZXQ7KGkub2ZmfHxpLnJlbW92ZUV2ZW50TGlzdGVuZXIpLmFwcGx5KGksbi5hcmdzKX1pZih0LmJpbmRpbmdzPVtdLHQuYmVmb3JlUmVuZGVyQ2FsbGJhY2tzPVtdLHQub25VcGRhdGVFbGVDYWxjc0Zucz1bXSx0LnJlbW92ZU9ic2VydmVyJiZ0LnJlbW92ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0LnN0eWxlT2JzZXJ2ZXImJnQuc3R5bGVPYnNlcnZlci5kaXNjb25uZWN0KCksdC5yZXNpemVPYnNlcnZlciYmdC5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCksdC5sYWJlbENhbGNEaXYpdHJ5e2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodC5sYWJlbENhbGNEaXYpfWNhdGNoe319O00xLmlzSGVhZGxlc3M9ZnVuY3Rpb24oKXtyZXR1cm4hMX07W3dCLGMxZSx1MWUsUjEsb2gsYmJdLmZvckVhY2goZnVuY3Rpb24odCl7aXIoTTEsdCl9KTtQUD0xZTMvNjAsZjFlPXtzZXR1cERlcXVldWVpbmc6byhmdW5jdGlvbihlKXtyZXR1cm4gbyhmdW5jdGlvbigpe3ZhciBuPXRoaXMsaT10aGlzLnJlbmRlcmVyO2lmKCFuLmRlcXVldWVpbmdTZXR1cCl7bi5kZXF1ZXVlaW5nU2V0dXA9ITA7dmFyIGE9ejYoZnVuY3Rpb24oKXtpLnJlZHJhd0hpbnQoImVsZXMiLCEwKSxpLnJlZHJhd0hpbnQoImRyYWciLCEwKSxpLnJlZHJhdygpfSxlLmRlcVJlZHJhd1RocmVzaG9sZCkscz1vKGZ1bmN0aW9uKGgsZil7dmFyIGQ9aWgoKSxwPWkuYXZlcmFnZVJlZHJhd1RpbWUsbT1pLmxhc3RSZWRyYXdUaW1lLGc9W10seT1pLmN5LmV4dGVudCgpLHY9aS5nZXRQaXhlbFJhdGlvKCk7Zm9yKGh8fGkuZmx1c2hSZW5kZXJlZFN0eWxlUXVldWUoKTs7KXt2YXIgeD1paCgpLGI9eC1kLHc9eC1mO2lmKG08UFApe3ZhciBfPVBQLShoP3A6MCk7aWYodz49ZS5kZXFGYXN0Q29zdCpfKWJyZWFrfWVsc2UgaWYoaCl7aWYoYj49ZS5kZXFDb3N0Km18fGI+PWUuZGVxQXZnQ29zdCpwKWJyZWFrfWVsc2UgaWYodz49ZS5kZXFOb0RyYXdDb3N0KlBQKWJyZWFrO3ZhciBUPWUuZGVxKG4sdix5KTtpZihULmxlbmd0aD4wKWZvcih2YXIgRT0wO0U8VC5sZW5ndGg7RSsrKWcucHVzaChUW0VdKTtlbHNlIGJyZWFrfWcubGVuZ3RoPjAmJihlLm9uRGVxZChuLGcpLCFoJiZlLnNob3VsZFJlZHJhdyhuLGcsdix5KSYmYSgpKX0sImRlcXVldWUiKSxsPWUucHJpb3JpdHl8fHNCO2kuYmVmb3JlUmVuZGVyKHMsbChuKSl9fSwic2V0dXBEZXF1ZXVlaW5nSW1wbCIpfSwic2V0dXBEZXF1ZXVlaW5nIil9LGlldD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOl82O3RCKHRoaXMsdCksdGhpcy5pZHNCeUtleT1uZXcgSmMsdGhpcy5rZXlGb3JJZD1uZXcgSmMsdGhpcy5jYWNoZXNCeUx2bD1uZXcgSmMsdGhpcy5sdmxzPVtdLHRoaXMuZ2V0S2V5PWUsdGhpcy5kb2VzRWxlSW52YWxpZGF0ZUtleT1yfXJldHVybiBvKHQsIkVsZW1lbnRUZXh0dXJlQ2FjaGVMb29rdXAiKSxyQih0LFt7a2V5OiJnZXRJZHNGb3IiLHZhbHVlOm8oZnVuY3Rpb24ocil7cj09bnVsbCYmZGkoIkNhbiBub3QgZ2V0IGlkIGxpc3QgZm9yIG51bGwga2V5Iik7dmFyIG49dGhpcy5pZHNCeUtleSxpPXRoaXMuaWRzQnlLZXkuZ2V0KHIpO3JldHVybiBpfHwoaT1uZXcgUzEsbi5zZXQocixpKSksaX0sImdldElkc0ZvciIpfSx7a2V5OiJhZGRJZEZvcktleSIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3IhPW51bGwmJnRoaXMuZ2V0SWRzRm9yKHIpLmFkZChuKX0sImFkZElkRm9yS2V5Iil9LHtrZXk6ImRlbGV0ZUlkRm9yS2V5Iix2YWx1ZTpvKGZ1bmN0aW9uKHIsbil7ciE9bnVsbCYmdGhpcy5nZXRJZHNGb3IocikuZGVsZXRlKG4pfSwiZGVsZXRlSWRGb3JLZXkiKX0se2tleToiZ2V0TnVtYmVyT2ZJZHNGb3JLZXkiLHZhbHVlOm8oZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/MDp0aGlzLmdldElkc0ZvcihyKS5zaXplfSwiZ2V0TnVtYmVyT2ZJZHNGb3JLZXkiKX0se2tleToidXBkYXRlS2V5TWFwcGluZ0ZvciIsdmFsdWU6byhmdW5jdGlvbihyKXt2YXIgbj1yLmlkKCksaT10aGlzLmtleUZvcklkLmdldChuKSxhPXRoaXMuZ2V0S2V5KHIpO3RoaXMuZGVsZXRlSWRGb3JLZXkoaSxuKSx0aGlzLmFkZElkRm9yS2V5KGEsbiksdGhpcy5rZXlGb3JJZC5zZXQobixhKX0sInVwZGF0ZUtleU1hcHBpbmdGb3IiKX0se2tleToiZGVsZXRlS2V5TWFwcGluZ0ZvciIsdmFsdWU6byhmdW5jdGlvbihyKXt2YXIgbj1yLmlkKCksaT10aGlzLmtleUZvcklkLmdldChuKTt0aGlzLmRlbGV0ZUlkRm9yS2V5KGksbiksdGhpcy5rZXlGb3JJZC5kZWxldGUobil9LCJkZWxldGVLZXlNYXBwaW5nRm9yIil9LHtrZXk6ImtleUhhc0NoYW5nZWRGb3IiLHZhbHVlOm8oZnVuY3Rpb24ocil7dmFyIG49ci5pZCgpLGk9dGhpcy5rZXlGb3JJZC5nZXQobiksYT10aGlzLmdldEtleShyKTtyZXR1cm4gaSE9PWF9LCJrZXlIYXNDaGFuZ2VkRm9yIil9LHtrZXk6ImlzSW52YWxpZCIsdmFsdWU6byhmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5rZXlIYXNDaGFuZ2VkRm9yKHIpfHx0aGlzLmRvZXNFbGVJbnZhbGlkYXRlS2V5KHIpfSwiaXNJbnZhbGlkIil9LHtrZXk6ImdldENhY2hlc0F0Iix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuY2FjaGVzQnlMdmwsaT10aGlzLmx2bHMsYT1uLmdldChyKTtyZXR1cm4gYXx8KGE9bmV3IEpjLG4uc2V0KHIsYSksaS5wdXNoKHIpKSxhfSwiZ2V0Q2FjaGVzQXQiKX0se2tleToiZ2V0Q2FjaGUiLHZhbHVlOm8oZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5nZXRDYWNoZXNBdChuKS5nZXQocil9LCJnZXRDYWNoZSIpfSx7a2V5OiJnZXQiLHZhbHVlOm8oZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLmdldEtleShyKSxhPXRoaXMuZ2V0Q2FjaGUoaSxuKTtyZXR1cm4gYSE9bnVsbCYmdGhpcy51cGRhdGVLZXlNYXBwaW5nRm9yKHIpLGF9LCJnZXQiKX0se2tleToiZ2V0Rm9yQ2FjaGVkS2V5Iix2YWx1ZTpvKGZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5rZXlGb3JJZC5nZXQoci5pZCgpKSxhPXRoaXMuZ2V0Q2FjaGUoaSxuKTtyZXR1cm4gYX0sImdldEZvckNhY2hlZEtleSIpfSx7a2V5OiJoYXNDYWNoZSIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3JldHVybiB0aGlzLmdldENhY2hlc0F0KG4pLmhhcyhyKX0sImhhc0NhY2hlIil9LHtrZXk6ImhhcyIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuZ2V0S2V5KHIpO3JldHVybiB0aGlzLmhhc0NhY2hlKGksbil9LCJoYXMiKX0se2tleToic2V0Q2FjaGUiLHZhbHVlOm8oZnVuY3Rpb24ocixuLGkpe2kua2V5PXIsdGhpcy5nZXRDYWNoZXNBdChuKS5zZXQocixpKX0sInNldENhY2hlIil9LHtrZXk6InNldCIsdmFsdWU6byhmdW5jdGlvbihyLG4saSl7dmFyIGE9dGhpcy5nZXRLZXkocik7dGhpcy5zZXRDYWNoZShhLG4saSksdGhpcy51cGRhdGVLZXlNYXBwaW5nRm9yKHIpfSwic2V0Iil9LHtrZXk6ImRlbGV0ZUNhY2hlIix2YWx1ZTpvKGZ1bmN0aW9uKHIsbil7dGhpcy5nZXRDYWNoZXNBdChuKS5kZWxldGUocil9LCJkZWxldGVDYWNoZSIpfSx7a2V5OiJkZWxldGUiLHZhbHVlOm8oZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLmdldEtleShyKTt0aGlzLmRlbGV0ZUNhY2hlKGksbil9LCJfZGVsZXRlIil9LHtrZXk6ImludmFsaWRhdGVLZXkiLHZhbHVlOm8oZnVuY3Rpb24ocil7dmFyIG49dGhpczt0aGlzLmx2bHMuZm9yRWFjaChmdW5jdGlvbihpKXtyZXR1cm4gbi5kZWxldGVDYWNoZShyLGkpfSl9LCJpbnZhbGlkYXRlS2V5Iil9LHtrZXk6ImludmFsaWRhdGUiLHZhbHVlOm8oZnVuY3Rpb24ocil7dmFyIG49ci5pZCgpLGk9dGhpcy5rZXlGb3JJZC5nZXQobik7dGhpcy5kZWxldGVLZXlNYXBwaW5nRm9yKHIpO3ZhciBhPXRoaXMuZG9lc0VsZUludmFsaWRhdGVLZXkocik7cmV0dXJuIGEmJnRoaXMuaW52YWxpZGF0ZUtleShpKSxhfHx0aGlzLmdldE51bWJlck9mSWRzRm9yS2V5KGkpPT09MH0sImludmFsaWRhdGUiKX1dKSx0fSgpLE1tZT0yNSxnNj01MCxTNj0tNCxRUD0zLGFldD03Ljk5LHNldD04LG9ldD0xMDI0LGNldD0xMDI0LHVldD0xMDI0LGhldD0uMixmZXQ9LjgsZGV0PTEwLHBldD0uMTUsbWV0PS4xLGdldD0uOSx5ZXQ9LjksdmV0PTEwMCx4ZXQ9MSxnMT17ZGVxdWV1ZToiZGVxdWV1ZSIsZG93bnNjYWxlOiJkb3duc2NhbGUiLGhpZ2hRdWFsaXR5OiJoaWdoUXVhbGl0eSJ9LGJldD1fYSh7Z2V0S2V5Om51bGwsZG9lc0VsZUludmFsaWRhdGVLZXk6XzYsZHJhd0VsZW1lbnQ6bnVsbCxnZXRCb3VuZGluZ0JveDpudWxsLGdldFJvdGF0aW9uUG9pbnQ6bnVsbCxnZXRSb3RhdGlvbk9mZnNldDpudWxsLGlzVmlzaWJsZTpuZ2UsYWxsb3dFZGdlVHhyQ2FjaGluZzohMCxhbGxvd1BhcmVudFR4ckNhY2hpbmc6ITB9KSxKeD1vKGZ1bmN0aW9uKGUscil7dmFyIG49dGhpcztuLnJlbmRlcmVyPWUsbi5vbkRlcXVldWVzPVtdO3ZhciBpPWJldChyKTtpcihuLGkpLG4ubG9va3VwPW5ldyBpZXQoaS5nZXRLZXksaS5kb2VzRWxlSW52YWxpZGF0ZUtleSksbi5zZXR1cERlcXVldWVpbmcoKX0sIkVsZW1lbnRUZXh0dXJlQ2FjaGUiKSxRaT1KeC5wcm90b3R5cGU7UWkucmVhc29ucz1nMTtRaS5nZXRUZXh0dXJlUXVldWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gZS5lbGVJbWdDYWNoZXM9ZS5lbGVJbWdDYWNoZXN8fHt9LGUuZWxlSW1nQ2FjaGVzW3RdPWUuZWxlSW1nQ2FjaGVzW3RdfHxbXX07UWkuZ2V0UmV0aXJlZFRleHR1cmVRdWV1ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5lbGVJbWdDYWNoZXMucmV0aXJlZD1lLmVsZUltZ0NhY2hlcy5yZXRpcmVkfHx7fSxuPXJbdF09clt0XXx8W107cmV0dXJuIG59O1FpLmdldEVsZW1lbnRRdWV1ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10LmVsZUNhY2hlUXVldWU9dC5lbGVDYWNoZVF1ZXVlfHxuZXcgZ2IoZnVuY3Rpb24ocixuKXtyZXR1cm4gbi5yZXFzLXIucmVxc30pO3JldHVybiBlfTtRaS5nZXRFbGVtZW50S2V5VG9RdWV1ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10LmVsZUtleVRvQ2FjaGVRdWV1ZT10LmVsZUtleVRvQ2FjaGVRdWV1ZXx8e307cmV0dXJuIGV9O1FpLmdldEVsZW1lbnQ9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10aGlzLHM9dGhpcy5yZW5kZXJlcixsPXMuY3kuem9vbSgpLHU9dGhpcy5sb29rdXA7aWYoIWV8fGUudz09PTB8fGUuaD09PTB8fGlzTmFOKGUudyl8fGlzTmFOKGUuaCl8fCF0LnZpc2libGUoKXx8dC5yZW1vdmVkKCl8fCFhLmFsbG93RWRnZVR4ckNhY2hpbmcmJnQuaXNFZGdlKCl8fCFhLmFsbG93UGFyZW50VHhyQ2FjaGluZyYmdC5pc1BhcmVudCgpKXJldHVybiBudWxsO2lmKG49PW51bGwmJihuPU1hdGguY2VpbChsQihsKnIpKSksbjxTNiluPVM2O2Vsc2UgaWYobD49YWV0fHxuPlFQKXJldHVybiBudWxsO3ZhciBoPU1hdGgucG93KDIsbiksZj1lLmgqaCxkPWUudypoLHA9cy5lbGVUZXh0QmlnZ2VyVGhhbk1pbih0LGgpO2lmKCF0aGlzLmlzVmlzaWJsZSh0LHApKXJldHVybiBudWxsO3ZhciBtPXUuZ2V0KHQsbik7aWYobSYmbS5pbnZhbGlkYXRlZCYmKG0uaW52YWxpZGF0ZWQ9ITEsbS50ZXh0dXJlLmludmFsaWRhdGVkV2lkdGgtPW0ud2lkdGgpLG0pcmV0dXJuIG07dmFyIGc7aWYoZjw9TW1lP2c9TW1lOmY8PWc2P2c9ZzY6Zz1NYXRoLmNlaWwoZi9nNikqZzYsZj51ZXR8fGQ+Y2V0KXJldHVybiBudWxsO3ZhciB5PWEuZ2V0VGV4dHVyZVF1ZXVlKGcpLHY9eVt5Lmxlbmd0aC0yXSx4PW8oZnVuY3Rpb24oKXtyZXR1cm4gYS5yZWN5Y2xlVGV4dHVyZShnLGQpfHxhLmFkZFRleHR1cmUoZyxkKX0sImFkZE5ld1R4ciIpO3Z8fCh2PXlbeS5sZW5ndGgtMV0pLHZ8fCh2PXgoKSksdi53aWR0aC12LnVzZWRXaWR0aDxkJiYodj14KCkpO2Zvcih2YXIgYj1vKGZ1bmN0aW9uKE4pe3JldHVybiBOJiZOLnNjYWxlZExhYmVsU2hvd249PT1wfSwic2NhbGFibGVGcm9tIiksdz1pJiZpPT09ZzEuZGVxdWV1ZSxfPWkmJmk9PT1nMS5oaWdoUXVhbGl0eSxUPWkmJmk9PT1nMS5kb3duc2NhbGUsRSxMPW4rMTtMPD1RUDtMKyspe3ZhciBTPXUuZ2V0KHQsTCk7aWYoUyl7RT1TO2JyZWFrfX12YXIgQT1FJiZFLmxldmVsPT09bisxP0U6bnVsbCxJPW8oZnVuY3Rpb24oKXt2LmNvbnRleHQuZHJhd0ltYWdlKEEudGV4dHVyZS5jYW52YXMsQS54LDAsQS53aWR0aCxBLmhlaWdodCx2LnVzZWRXaWR0aCwwLGQsZil9LCJkb3duc2NhbGUiKTtpZih2LmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSx2LmNvbnRleHQuY2xlYXJSZWN0KHYudXNlZFdpZHRoLDAsZCxnKSxiKEEpKUkoKTtlbHNlIGlmKGIoRSkpaWYoXyl7Zm9yKHZhciBEPUUubGV2ZWw7RD5uO0QtLSlBPWEuZ2V0RWxlbWVudCh0LGUscixELGcxLmRvd25zY2FsZSk7SSgpfWVsc2UgcmV0dXJuIGEucXVldWVFbGVtZW50KHQsRS5sZXZlbC0xKSxFO2Vsc2V7dmFyIGs7aWYoIXcmJiFfJiYhVClmb3IodmFyIFI9bi0xO1I+PVM2O1ItLSl7dmFyIEM9dS5nZXQodCxSKTtpZihDKXtrPUM7YnJlYWt9fWlmKGIoaykpcmV0dXJuIGEucXVldWVFbGVtZW50KHQsbiksazt2LmNvbnRleHQudHJhbnNsYXRlKHYudXNlZFdpZHRoLDApLHYuY29udGV4dC5zY2FsZShoLGgpLHRoaXMuZHJhd0VsZW1lbnQodi5jb250ZXh0LHQsZSxwLCExKSx2LmNvbnRleHQuc2NhbGUoMS9oLDEvaCksdi5jb250ZXh0LnRyYW5zbGF0ZSgtdi51c2VkV2lkdGgsMCl9cmV0dXJuIG09e3g6di51c2VkV2lkdGgsdGV4dHVyZTp2LGxldmVsOm4sc2NhbGU6aCx3aWR0aDpkLGhlaWdodDpmLHNjYWxlZExhYmVsU2hvd246cH0sdi51c2VkV2lkdGgrPU1hdGguY2VpbChkK3NldCksdi5lbGVDYWNoZXMucHVzaChtKSx1LnNldCh0LG4sbSksYS5jaGVja1RleHR1cmVGdWxsbmVzcyh2KSxtfTtRaS5pbnZhbGlkYXRlRWxlbWVudHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy5pbnZhbGlkYXRlRWxlbWVudCh0W2VdKX07UWkuaW52YWxpZGF0ZUVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUubG9va3VwLG49W10saT1yLmlzSW52YWxpZCh0KTtpZihpKXtmb3IodmFyIGE9UzY7YTw9UVA7YSsrKXt2YXIgcz1yLmdldEZvckNhY2hlZEtleSh0LGEpO3MmJm4ucHVzaChzKX12YXIgbD1yLmludmFsaWRhdGUodCk7aWYobClmb3IodmFyIHU9MDt1PG4ubGVuZ3RoO3UrKyl7dmFyIGg9blt1XSxmPWgudGV4dHVyZTtmLmludmFsaWRhdGVkV2lkdGgrPWgud2lkdGgsaC5pbnZhbGlkYXRlZD0hMCxlLmNoZWNrVGV4dHVyZVV0aWxpdHkoZil9ZS5yZW1vdmVGcm9tUXVldWUodCl9fTtRaS5jaGVja1RleHR1cmVVdGlsaXR5PWZ1bmN0aW9uKHQpe3QuaW52YWxpZGF0ZWRXaWR0aD49aGV0KnQud2lkdGgmJnRoaXMucmV0aXJlVGV4dHVyZSh0KX07UWkuY2hlY2tUZXh0dXJlRnVsbG5lc3M9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUuZ2V0VGV4dHVyZVF1ZXVlKHQuaGVpZ2h0KTt0LnVzZWRXaWR0aC90LndpZHRoPmZldCYmdC5mdWxsbmVzc0NoZWNrcz49ZGV0P09mKHIsdCk6dC5mdWxsbmVzc0NoZWNrcysrfTtRaS5yZXRpcmVUZXh0dXJlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj10LmhlaWdodCxuPWUuZ2V0VGV4dHVyZVF1ZXVlKHIpLGk9dGhpcy5sb29rdXA7T2Yobix0KSx0LnJldGlyZWQ9ITA7Zm9yKHZhciBhPXQuZWxlQ2FjaGVzLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9YVtzXTtpLmRlbGV0ZUNhY2hlKGwua2V5LGwubGV2ZWwpfW9CKGEpO3ZhciB1PWUuZ2V0UmV0aXJlZFRleHR1cmVRdWV1ZShyKTt1LnB1c2godCl9O1FpLmFkZFRleHR1cmU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49ci5nZXRUZXh0dXJlUXVldWUodCksaT17fTtyZXR1cm4gbi5wdXNoKGkpLGkuZWxlQ2FjaGVzPVtdLGkuaGVpZ2h0PXQsaS53aWR0aD1NYXRoLm1heChvZXQsZSksaS51c2VkV2lkdGg9MCxpLmludmFsaWRhdGVkV2lkdGg9MCxpLmZ1bGxuZXNzQ2hlY2tzPTAsaS5jYW52YXM9ci5yZW5kZXJlci5tYWtlT2Zmc2NyZWVuQ2FudmFzKGkud2lkdGgsaS5oZWlnaHQpLGkuY29udGV4dD1pLmNhbnZhcy5nZXRDb250ZXh0KCIyZCIpLGl9O1FpLnJlY3ljbGVUZXh0dXJlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMsbj1yLmdldFRleHR1cmVRdWV1ZSh0KSxpPXIuZ2V0UmV0aXJlZFRleHR1cmVRdWV1ZSh0KSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV07aWYocy53aWR0aD49ZSlyZXR1cm4gcy5yZXRpcmVkPSExLHMudXNlZFdpZHRoPTAscy5pbnZhbGlkYXRlZFdpZHRoPTAscy5mdWxsbmVzc0NoZWNrcz0wLG9CKHMuZWxlQ2FjaGVzKSxzLmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxzLmNvbnRleHQuY2xlYXJSZWN0KDAsMCxzLndpZHRoLHMuaGVpZ2h0KSxPZihpLHMpLG4ucHVzaChzKSxzfX07UWkucXVldWVFbGVtZW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuZ2V0RWxlbWVudFF1ZXVlKCksaT1yLmdldEVsZW1lbnRLZXlUb1F1ZXVlKCksYT10aGlzLmdldEtleSh0KSxzPWlbYV07aWYocylzLmxldmVsPU1hdGgubWF4KHMubGV2ZWwsZSkscy5lbGVzLm1lcmdlKHQpLHMucmVxcysrLG4udXBkYXRlSXRlbShzKTtlbHNle3ZhciBsPXtlbGVzOnQuc3Bhd24oKS5tZXJnZSh0KSxsZXZlbDplLHJlcXM6MSxrZXk6YX07bi5wdXNoKGwpLGlbYV09bH19O1FpLmRlcXVldWU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMscj1lLmdldEVsZW1lbnRRdWV1ZSgpLG49ZS5nZXRFbGVtZW50S2V5VG9RdWV1ZSgpLGk9W10sYT1lLmxvb2t1cCxzPTA7czx4ZXQmJnIuc2l6ZSgpPjA7cysrKXt2YXIgbD1yLnBvcCgpLHU9bC5rZXksaD1sLmVsZXNbMF0sZj1hLmhhc0NhY2hlKGgsbC5sZXZlbCk7aWYoblt1XT1udWxsLGYpY29udGludWU7aS5wdXNoKGwpO3ZhciBkPWUuZ2V0Qm91bmRpbmdCb3goaCk7ZS5nZXRFbGVtZW50KGgsZCx0LGwubGV2ZWwsZzEuZGVxdWV1ZSl9cmV0dXJuIGl9O1FpLnJlbW92ZUZyb21RdWV1ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5nZXRFbGVtZW50UXVldWUoKSxuPWUuZ2V0RWxlbWVudEtleVRvUXVldWUoKSxpPXRoaXMuZ2V0S2V5KHQpLGE9bltpXTthIT1udWxsJiYoYS5lbGVzLmxlbmd0aD09PTE/KGEucmVxcz1hQixyLnVwZGF0ZUl0ZW0oYSksci5wb3AoKSxuW2ldPW51bGwpOmEuZWxlcy51bm1lcmdlKHQpKX07UWkub25EZXF1ZXVlPWZ1bmN0aW9uKHQpe3RoaXMub25EZXF1ZXVlcy5wdXNoKHQpfTtRaS5vZmZEZXF1ZXVlPWZ1bmN0aW9uKHQpe09mKHRoaXMub25EZXF1ZXVlcyx0KX07UWkuc2V0dXBEZXF1ZXVlaW5nPWYxZS5zZXR1cERlcXVldWVpbmcoe2RlcVJlZHJhd1RocmVzaG9sZDp2ZXQsZGVxQ29zdDpwZXQsZGVxQXZnQ29zdDptZXQsZGVxTm9EcmF3Q29zdDpnZXQsZGVxRmFzdENvc3Q6eWV0LGRlcTpvKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZS5kZXF1ZXVlKHIsbil9LCJkZXEiKSxvbkRlcWQ6byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0wO248ZS5vbkRlcXVldWVzLmxlbmd0aDtuKyspe3ZhciBpPWUub25EZXF1ZXVlc1tuXTtpKHIpfX0sIm9uRGVxZCIpLHNob3VsZFJlZHJhdzpvKGZ1bmN0aW9uKGUscixuLGkpe2Zvcih2YXIgYT0wO2E8ci5sZW5ndGg7YSsrKWZvcih2YXIgcz1yW2FdLmVsZXMsbD0wO2w8cy5sZW5ndGg7bCsrKXt2YXIgdT1zW2xdLmJvdW5kaW5nQm94KCk7aWYoY0IodSxpKSlyZXR1cm4hMH1yZXR1cm4hMX0sInNob3VsZFJlZHJhdyIpLHByaW9yaXR5Om8oZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVuZGVyZXIuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5lbGVUeHJEZXF9LCJwcmlvcml0eSIpfSk7d2V0PTEsdGI9LTQsUDY9MixUZXQ9My45OSxrZXQ9NTAsRWV0PTUwLENldD0uMTUsQWV0PS4xLF9ldD0uOSxMZXQ9LjksRGV0PTEsSW1lPTI1MCxOZXQ9NGUzKjRlMyxSZXQ9ITAsZDFlPW8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcyxuPXIucmVuZGVyZXI9ZSxpPW4uY3k7ci5sYXllcnNCeUxldmVsPXt9LHIuZmlyc3RHZXQ9ITAsci5sYXN0SW52YWxpZGF0aW9uVGltZT1paCgpLTIqSW1lLHIuc2tpcHBpbmc9ITEsci5lbGVUeHJEZXFzPWkuY29sbGVjdGlvbigpLHIuc2NoZWR1bGVFbGVtZW50UmVmaW5lbWVudD16NihmdW5jdGlvbigpe3IucmVmaW5lRWxlbWVudFRleHR1cmVzKHIuZWxlVHhyRGVxcyksci5lbGVUeHJEZXFzLnVubWVyZ2Uoci5lbGVUeHJEZXFzKX0sRWV0KSxuLmJlZm9yZVJlbmRlcihmdW5jdGlvbihzLGwpe2wtci5sYXN0SW52YWxpZGF0aW9uVGltZTw9SW1lP3Iuc2tpcHBpbmc9ITA6ci5za2lwcGluZz0hMX0sbi5iZWZvcmVSZW5kZXJQcmlvcml0aWVzLmx5clR4clNraXApO3ZhciBhPW8oZnVuY3Rpb24obCx1KXtyZXR1cm4gdS5yZXFzLWwucmVxc30sInFTb3J0Iik7ci5sYXllcnNRdWV1ZT1uZXcgZ2IoYSksci5zZXR1cERlcXVldWVpbmcoKX0sIkxheWVyZWRUZXh0dXJlQ2FjaGUiKSxMYT1kMWUucHJvdG90eXBlLE9tZT0wLE1ldD1NYXRoLnBvdygyLDUzKS0xO0xhLm1ha2VMYXllcj1mdW5jdGlvbih0LGUpe3ZhciByPU1hdGgucG93KDIsZSksbj1NYXRoLmNlaWwodC53KnIpLGk9TWF0aC5jZWlsKHQuaCpyKSxhPXRoaXMucmVuZGVyZXIubWFrZU9mZnNjcmVlbkNhbnZhcyhuLGkpLHM9e2lkOk9tZT0rK09tZSVNZXQsYmI6dCxsZXZlbDplLHdpZHRoOm4saGVpZ2h0OmksY2FudmFzOmEsY29udGV4dDphLmdldENvbnRleHQoIjJkIiksZWxlczpbXSxlbGVzUXVldWU6W10scmVxczowfSxsPXMuY29udGV4dCx1PS1zLmJiLngxLGg9LXMuYmIueTE7cmV0dXJuIGwuc2NhbGUocixyKSxsLnRyYW5zbGF0ZSh1LGgpLHN9O0xhLmdldExheWVycz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcyxpPW4ucmVuZGVyZXIsYT1pLmN5LHM9YS56b29tKCksbD1uLmZpcnN0R2V0O2lmKG4uZmlyc3RHZXQ9ITEscj09bnVsbCl7aWYocj1NYXRoLmNlaWwobEIocyplKSkscjx0YilyPXRiO2Vsc2UgaWYocz49VGV0fHxyPlA2KXJldHVybiBudWxsfW4udmFsaWRhdGVMYXllcnNFbGVzT3JkZXJpbmcocix0KTt2YXIgdT1uLmxheWVyc0J5TGV2ZWwsaD1NYXRoLnBvdygyLHIpLGY9dVtyXT11W3JdfHxbXSxkLHA9bi5sZXZlbElzQ29tcGxldGUocix0KSxtLGc9byhmdW5jdGlvbigpe3ZhciBJPW8oZnVuY3Rpb24oTyl7aWYobi52YWxpZGF0ZUxheWVyc0VsZXNPcmRlcmluZyhPLHQpLG4ubGV2ZWxJc0NvbXBsZXRlKE8sdCkpcmV0dXJuIG09dVtPXSwhMH0sImNhblVzZUFzVG1wTHZsIiksRD1vKGZ1bmN0aW9uKE8pe2lmKCFtKWZvcih2YXIgTj1yK087dGI8PU4mJk48PVA2JiYhSShOKTtOKz1PKTt9LCJjaGVja0x2bHMiKTtEKDEpLEQoLTEpO2Zvcih2YXIgaz1mLmxlbmd0aC0xO2s+PTA7ay0tKXt2YXIgUj1mW2tdO1IuaW52YWxpZCYmT2YoZixSKX19LCJjaGVja1RlbXBMZXZlbHMiKTtpZighcClnKCk7ZWxzZSByZXR1cm4gZjt2YXIgeT1vKGZ1bmN0aW9uKCl7aWYoIWQpe2Q9S3MoKTtmb3IodmFyIEk9MDtJPHQubGVuZ3RoO0krKyljZ2UoZCx0W0ldLmJvdW5kaW5nQm94KCkpfXJldHVybiBkfSwiZ2V0QmIiKSx2PW8oZnVuY3Rpb24oSSl7ST1JfHx7fTt2YXIgRD1JLmFmdGVyO3koKTt2YXIgaz1kLncqaCooZC5oKmgpO2lmKGs+TmV0KXJldHVybiBudWxsO3ZhciBSPW4ubWFrZUxheWVyKGQscik7aWYoRCE9bnVsbCl7dmFyIEM9Zi5pbmRleE9mKEQpKzE7Zi5zcGxpY2UoQywwLFIpfWVsc2UoSS5pbnNlcnQ9PT12b2lkIDB8fEkuaW5zZXJ0KSYmZi51bnNoaWZ0KFIpO3JldHVybiBSfSwibWFrZUxheWVyIik7aWYobi5za2lwcGluZyYmIWwpcmV0dXJuIG51bGw7Zm9yKHZhciB4PW51bGwsYj10Lmxlbmd0aC93ZXQsdz0hbCxfPTA7Xzx0Lmxlbmd0aDtfKyspe3ZhciBUPXRbX10sRT1ULl9wcml2YXRlLnJzY3JhdGNoLEw9RS5pbWdMYXllckNhY2hlcz1FLmltZ0xheWVyQ2FjaGVzfHx7fSxTPUxbcl07aWYoUyl7eD1TO2NvbnRpbnVlfWlmKCgheHx8eC5lbGVzLmxlbmd0aD49Ynx8IXVnZSh4LmJiLFQuYm91bmRpbmdCb3goKSkpJiYoeD12KHtpbnNlcnQ6ITAsYWZ0ZXI6eH0pLCF4KSlyZXR1cm4gbnVsbDttfHx3P24ucXVldWVMYXllcih4LFQpOm4uZHJhd0VsZUluTGF5ZXIoeCxULHIsZSkseC5lbGVzLnB1c2goVCksTFtyXT14fXJldHVybiBtfHwodz9udWxsOmYpfTtMYS5nZXRFbGVMZXZlbEZvckxheWVyTGV2ZWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdH07TGEuZHJhd0VsZUluTGF5ZXI9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcyxhPXRoaXMucmVuZGVyZXIscz10LmNvbnRleHQsbD1lLmJvdW5kaW5nQm94KCk7bC53PT09MHx8bC5oPT09MHx8IWUudmlzaWJsZSgpfHwocj1pLmdldEVsZUxldmVsRm9yTGF5ZXJMZXZlbChyLG4pLGEuc2V0SW1nU21vb3RoaW5nKHMsITEpLGEuZHJhd0NhY2hlZEVsZW1lbnQocyxlLG51bGwsbnVsbCxyLFJldCksYS5zZXRJbWdTbW9vdGhpbmcocywhMCkpfTtMYS5sZXZlbElzQ29tcGxldGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49ci5sYXllcnNCeUxldmVsW3RdO2lmKCFufHxuLmxlbmd0aD09PTApcmV0dXJuITE7Zm9yKHZhciBpPTAsYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgcz1uW2FdO2lmKHMucmVxcz4wfHxzLmludmFsaWQpcmV0dXJuITE7aSs9cy5lbGVzLmxlbmd0aH1yZXR1cm4gaT09PWUubGVuZ3RofTtMYS52YWxpZGF0ZUxheWVyc0VsZXNPcmRlcmluZz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGF5ZXJzQnlMZXZlbFt0XTtpZihyKWZvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXtmb3IodmFyIGk9cltuXSxhPS0xLHM9MDtzPGUubGVuZ3RoO3MrKylpZihpLmVsZXNbMF09PT1lW3NdKXthPXM7YnJlYWt9aWYoYTwwKXt0aGlzLmludmFsaWRhdGVMYXllcihpKTtjb250aW51ZX1mb3IodmFyIGw9YSxzPTA7czxpLmVsZXMubGVuZ3RoO3MrKylpZihpLmVsZXNbc10hPT1lW2wrc10pe3RoaXMuaW52YWxpZGF0ZUxheWVyKGkpO2JyZWFrfX19O0xhLnVwZGF0ZUVsZW1lbnRzSW5MYXllcnM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcyxuPXBiKHRbMF0pLGk9MDtpPHQubGVuZ3RoO2krKylmb3IodmFyIGE9bj9udWxsOnRbaV0scz1uP3RbaV06dFtpXS5lbGUsbD1zLl9wcml2YXRlLnJzY3JhdGNoLHU9bC5pbWdMYXllckNhY2hlcz1sLmltZ0xheWVyQ2FjaGVzfHx7fSxoPXRiO2g8PVA2O2grKyl7dmFyIGY9dVtoXTtmJiYoYSYmci5nZXRFbGVMZXZlbEZvckxheWVyTGV2ZWwoZi5sZXZlbCkhPT1hLmxldmVsfHxlKGYscyxhKSl9fTtMYS5oYXZlTGF5ZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT0hMSxyPXRiO3I8PVA2O3IrKyl7dmFyIG49dC5sYXllcnNCeUxldmVsW3JdO2lmKG4mJm4ubGVuZ3RoPjApe2U9ITA7YnJlYWt9fXJldHVybiBlfTtMYS5pbnZhbGlkYXRlRWxlbWVudHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0Lmxlbmd0aCE9PTAmJihlLmxhc3RJbnZhbGlkYXRpb25UaW1lPWloKCksISh0Lmxlbmd0aD09PTB8fCFlLmhhdmVMYXllcnMoKSkmJmUudXBkYXRlRWxlbWVudHNJbkxheWVycyh0LG8oZnVuY3Rpb24obixpLGEpe2UuaW52YWxpZGF0ZUxheWVyKG4pfSwiaW52YWxBc3NvY0xheWVycyIpKSl9O0xhLmludmFsaWRhdGVMYXllcj1mdW5jdGlvbih0KXtpZih0aGlzLmxhc3RJbnZhbGlkYXRpb25UaW1lPWloKCksIXQuaW52YWxpZCl7dmFyIGU9dC5sZXZlbCxyPXQuZWxlcyxuPXRoaXMubGF5ZXJzQnlMZXZlbFtlXTtPZihuLHQpLHQuZWxlc1F1ZXVlPVtdLHQuaW52YWxpZD0hMCx0LnJlcGxhY2VtZW50JiYodC5yZXBsYWNlbWVudC5pbnZhbGlkPSEwKTtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXS5fcHJpdmF0ZS5yc2NyYXRjaC5pbWdMYXllckNhY2hlczthJiYoYVtlXT1udWxsKX19fTtMYS5yZWZpbmVFbGVtZW50VGV4dHVyZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztlLnVwZGF0ZUVsZW1lbnRzSW5MYXllcnModCxvKGZ1bmN0aW9uKG4saSxhKXt2YXIgcz1uLnJlcGxhY2VtZW50O2lmKHN8fChzPW4ucmVwbGFjZW1lbnQ9ZS5tYWtlTGF5ZXIobi5iYixuLmxldmVsKSxzLnJlcGxhY2VzPW4scy5lbGVzPW4uZWxlcyksIXMucmVxcylmb3IodmFyIGw9MDtsPHMuZWxlcy5sZW5ndGg7bCsrKWUucXVldWVMYXllcihzLHMuZWxlc1tsXSl9LCJyZWZpbmVFYWNoRWxlIikpfTtMYS5lbnF1ZXVlRWxlbWVudFJlZmluZW1lbnQ9ZnVuY3Rpb24odCl7dGhpcy5lbGVUeHJEZXFzLm1lcmdlKHQpLHRoaXMuc2NoZWR1bGVFbGVtZW50UmVmaW5lbWVudCgpfTtMYS5xdWV1ZUxheWVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIubGF5ZXJzUXVldWUsaT10LmVsZXNRdWV1ZSxhPWkuaGFzSWQ9aS5oYXNJZHx8e307aWYoIXQucmVwbGFjZW1lbnQpe2lmKGUpe2lmKGFbZS5pZCgpXSlyZXR1cm47aS5wdXNoKGUpLGFbZS5pZCgpXT0hMH10LnJlcXM/KHQucmVxcysrLG4udXBkYXRlSXRlbSh0KSk6KHQucmVxcz0xLG4ucHVzaCh0KSl9fTtMYS5kZXF1ZXVlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLHI9ZS5sYXllcnNRdWV1ZSxuPVtdLGk9MDtpPERldCYmci5zaXplKCkhPT0wOyl7dmFyIGE9ci5wZWVrKCk7aWYoYS5yZXBsYWNlbWVudCl7ci5wb3AoKTtjb250aW51ZX1pZihhLnJlcGxhY2VzJiZhIT09YS5yZXBsYWNlcy5yZXBsYWNlbWVudCl7ci5wb3AoKTtjb250aW51ZX1pZihhLmludmFsaWQpe3IucG9wKCk7Y29udGludWV9dmFyIHM9YS5lbGVzUXVldWUuc2hpZnQoKTtzJiYoZS5kcmF3RWxlSW5MYXllcihhLHMsYS5sZXZlbCx0KSxpKyspLG4ubGVuZ3RoPT09MCYmbi5wdXNoKCEwKSxhLmVsZXNRdWV1ZS5sZW5ndGg9PT0wJiYoci5wb3AoKSxhLnJlcXM9MCxhLnJlcGxhY2VzJiZlLmFwcGx5TGF5ZXJSZXBsYWNlbWVudChhKSxlLnJlcXVlc3RSZWRyYXcoKSl9cmV0dXJuIG59O0xhLmFwcGx5TGF5ZXJSZXBsYWNlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5sYXllcnNCeUxldmVsW3QubGV2ZWxdLG49dC5yZXBsYWNlcyxpPXIuaW5kZXhPZihuKTtpZighKGk8MHx8bi5pbnZhbGlkKSl7cltpXT10O2Zvcih2YXIgYT0wO2E8dC5lbGVzLmxlbmd0aDthKyspe3ZhciBzPXQuZWxlc1thXS5fcHJpdmF0ZSxsPXMuaW1nTGF5ZXJDYWNoZXM9cy5pbWdMYXllckNhY2hlc3x8e307bCYmKGxbdC5sZXZlbF09dCl9ZS5yZXF1ZXN0UmVkcmF3KCl9fTtMYS5yZXF1ZXN0UmVkcmF3PXo2KGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yZW5kZXJlcjt0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx0LnJlZHJhd0hpbnQoImRyYWciLCEwKSx0LnJlZHJhdygpfSwxMDApO0xhLnNldHVwRGVxdWV1ZWluZz1mMWUuc2V0dXBEZXF1ZXVlaW5nKHtkZXFSZWRyYXdUaHJlc2hvbGQ6a2V0LGRlcUNvc3Q6Q2V0LGRlcUF2Z0Nvc3Q6QWV0LGRlcU5vRHJhd0Nvc3Q6X2V0LGRlcUZhc3RDb3N0OkxldCxkZXE6byhmdW5jdGlvbihlLHIpe3JldHVybiBlLmRlcXVldWUocil9LCJkZXEiKSxvbkRlcWQ6c0Isc2hvdWxkUmVkcmF3Om5nZSxwcmlvcml0eTpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlbmRlcmVyLmJlZm9yZVJlbmRlclByaW9yaXRpZXMubHlyVHhyRGVxfSwicHJpb3JpdHkiKX0pO3AxZT17fTtvKElldCwicG9seWdvbiIpO28oT2V0LCJ0cmlhbmdsZUJhY2tjdXJ2ZSIpO28oQm1lLCJ0cmlhbmdsZVRlZSIpO28oUGV0LCJjaXJjbGVUcmlhbmdsZSIpO28oQmV0LCJjaXJjbGUiKTtwMWUuYXJyb3dTaGFwZUltcGw9ZnVuY3Rpb24odCl7cmV0dXJuKFBtZXx8KFBtZT17cG9seWdvbjpJZXQsInRyaWFuZ2xlLWJhY2tjdXJ2ZSI6T2V0LCJ0cmlhbmdsZS10ZWUiOkJtZSwiY2lyY2xlLXRyaWFuZ2xlIjpQZXQsInRyaWFuZ2xlLWNyb3NzIjpCbWUsY2lyY2xlOkJldH0pKVt0XX07cnU9e307cnUuZHJhd0VsZW1lbnQ9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBzPXRoaXM7ZS5pc05vZGUoKT9zLmRyYXdOb2RlKHQsZSxyLG4saSxhKTpzLmRyYXdFZGdlKHQsZSxyLG4saSxhKX07cnUuZHJhd0VsZW1lbnRPdmVybGF5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcztlLmlzTm9kZSgpP3IuZHJhd05vZGVPdmVybGF5KHQsZSk6ci5kcmF3RWRnZU92ZXJsYXkodCxlKX07cnUuZHJhd0VsZW1lbnRVbmRlcmxheT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXM7ZS5pc05vZGUoKT9yLmRyYXdOb2RlVW5kZXJsYXkodCxlKTpyLmRyYXdFZGdlVW5kZXJsYXkodCxlKX07cnUuZHJhd0NhY2hlZEVsZW1lbnRQb3J0aW9uPWZ1bmN0aW9uKHQsZSxyLG4saSxhLHMsbCl7dmFyIHU9dGhpcyxoPXIuZ2V0Qm91bmRpbmdCb3goZSk7aWYoIShoLnc9PT0wfHxoLmg9PT0wKSl7dmFyIGY9ci5nZXRFbGVtZW50KGUsaCxuLGksYSk7aWYoZiE9bnVsbCl7dmFyIGQ9bCh1LGUpO2lmKGQ9PT0wKXJldHVybjt2YXIgcD1zKHUsZSksbT1oLngxLGc9aC55MSx5PWgudyx2PWguaCx4LGIsdyxfLFQ7aWYocCE9PTApe3ZhciBFPXIuZ2V0Um90YXRpb25Qb2ludChlKTt3PUUueCxfPUUueSx0LnRyYW5zbGF0ZSh3LF8pLHQucm90YXRlKHApLFQ9dS5nZXRJbWdTbW9vdGhpbmcodCksVHx8dS5zZXRJbWdTbW9vdGhpbmcodCwhMCk7dmFyIEw9ci5nZXRSb3RhdGlvbk9mZnNldChlKTt4PUwueCxiPUwueX1lbHNlIHg9bSxiPWc7dmFyIFM7ZCE9PTEmJihTPXQuZ2xvYmFsQWxwaGEsdC5nbG9iYWxBbHBoYT1TKmQpLHQuZHJhd0ltYWdlKGYudGV4dHVyZS5jYW52YXMsZi54LDAsZi53aWR0aCxmLmhlaWdodCx4LGIseSx2KSxkIT09MSYmKHQuZ2xvYmFsQWxwaGE9UykscCE9PTAmJih0LnJvdGF0ZSgtcCksdC50cmFuc2xhdGUoLXcsLV8pLFR8fHUuc2V0SW1nU21vb3RoaW5nKHQsITEpKX1lbHNlIHIuZHJhd0VsZW1lbnQodCxlKX19O0ZldD1vKGZ1bmN0aW9uKCl7cmV0dXJuIDB9LCJnZXRaZXJvUm90YXRpb24iKSx6ZXQ9byhmdW5jdGlvbihlLHIpe3JldHVybiBlLmdldFRleHRBbmdsZShyLG51bGwpfSwiZ2V0TGFiZWxSb3RhdGlvbiIpLEdldD1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIGUuZ2V0VGV4dEFuZ2xlKHIsInNvdXJjZSIpfSwiZ2V0U291cmNlTGFiZWxSb3RhdGlvbiIpLCRldD1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIGUuZ2V0VGV4dEFuZ2xlKHIsInRhcmdldCIpfSwiZ2V0VGFyZ2V0TGFiZWxSb3RhdGlvbiIpLFZldD1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIHIuZWZmZWN0aXZlT3BhY2l0eSgpfSwiZ2V0T3BhY2l0eSIpLEJQPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gci5wc3R5bGUoInRleHQtb3BhY2l0eSIpLnBmVmFsdWUqci5lZmZlY3RpdmVPcGFjaXR5KCl9LCJnZXRUZXh0T3BhY2l0eSIpO3J1LmRyYXdDYWNoZWRFbGVtZW50PWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgcz10aGlzLGw9cy5kYXRhLHU9bC5lbGVUeHJDYWNoZSxoPWwubGJsVHhyQ2FjaGUsZj1sLnNsYlR4ckNhY2hlLGQ9bC50bGJUeHJDYWNoZSxwPWUuYm91bmRpbmdCb3goKSxtPWE9PT0hMD91LnJlYXNvbnMuaGlnaFF1YWxpdHk6bnVsbDtpZighKHAudz09PTB8fHAuaD09PTB8fCFlLnZpc2libGUoKSkmJighbnx8Y0IocCxuKSkpe3ZhciBnPWUuaXNFZGdlKCkseT1lLmVsZW1lbnQoKS5fcHJpdmF0ZS5yc2NyYXRjaC5iYWRMaW5lO3MuZHJhd0VsZW1lbnRVbmRlcmxheSh0LGUpLHMuZHJhd0NhY2hlZEVsZW1lbnRQb3J0aW9uKHQsZSx1LHIsaSxtLEZldCxWZXQpLCghZ3x8IXkpJiZzLmRyYXdDYWNoZWRFbGVtZW50UG9ydGlvbih0LGUsaCxyLGksbSx6ZXQsQlApLGcmJiF5JiYocy5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24odCxlLGYscixpLG0sR2V0LEJQKSxzLmRyYXdDYWNoZWRFbGVtZW50UG9ydGlvbih0LGUsZCxyLGksbSwkZXQsQlApKSxzLmRyYXdFbGVtZW50T3ZlcmxheSh0LGUpfX07cnUuZHJhd0VsZW1lbnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMsbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dO3IuZHJhd0VsZW1lbnQodCxpKX19O3J1LmRyYXdDYWNoZWRFbGVtZW50cz1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9dGhpcyxhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBzPWVbYV07aS5kcmF3Q2FjaGVkRWxlbWVudCh0LHMscixuKX19O3J1LmRyYXdDYWNoZWROb2Rlcz1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9dGhpcyxhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBzPWVbYV07cy5pc05vZGUoKSYmaS5kcmF3Q2FjaGVkRWxlbWVudCh0LHMscixuKX19O3J1LmRyYXdMYXllcmVkRWxlbWVudHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcyxhPWkuZGF0YS5seXJUeHJDYWNoZS5nZXRMYXllcnMoZSxyKTtpZihhKWZvcih2YXIgcz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdLHU9bC5iYjt1Lnc9PT0wfHx1Lmg9PT0wfHx0LmRyYXdJbWFnZShsLmNhbnZhcyx1LngxLHUueTEsdS53LHUuaCl9ZWxzZSBpLmRyYXdDYWNoZWRFbGVtZW50cyh0LGUscixuKX07bGg9e307bGguZHJhd0VkZ2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMCxpPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMCxhPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTohMCxzPXRoaXMsbD1lLl9wcml2YXRlLnJzY3JhdGNoO2lmKCEoYSYmIWUudmlzaWJsZSgpKSYmIShsLmJhZExpbmV8fGwuYWxscHRzPT1udWxsfHxpc05hTihsLmFsbHB0c1swXSkpKXt2YXIgdTtyJiYodT1yLHQudHJhbnNsYXRlKC11LngxLC11LnkxKSk7dmFyIGg9YT9lLnBzdHlsZSgib3BhY2l0eSIpLnZhbHVlOjEsZj1hP2UucHN0eWxlKCJsaW5lLW9wYWNpdHkiKS52YWx1ZToxLGQ9ZS5wc3R5bGUoImN1cnZlLXN0eWxlIikudmFsdWUscD1lLnBzdHlsZSgibGluZS1zdHlsZSIpLnZhbHVlLG09ZS5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSxnPWUucHN0eWxlKCJsaW5lLWNhcCIpLnZhbHVlLHk9ZS5wc3R5bGUoImxpbmUtb3V0bGluZS13aWR0aCIpLnZhbHVlLHY9ZS5wc3R5bGUoImxpbmUtb3V0bGluZS1jb2xvciIpLnZhbHVlLHg9aCpmLGI9aCpmLHc9byhmdW5jdGlvbigpe3ZhciBPPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTp4O2Q9PT0ic3RyYWlnaHQtdHJpYW5nbGUiPyhzLmVsZVN0cm9rZVN0eWxlKHQsZSxPKSxzLmRyYXdFZGdlVHJpYW5nbGVQYXRoKGUsdCxsLmFsbHB0cykpOih0LmxpbmVXaWR0aD1tLHQubGluZUNhcD1nLHMuZWxlU3Ryb2tlU3R5bGUodCxlLE8pLHMuZHJhd0VkZ2VQYXRoKGUsdCxsLmFsbHB0cyxwKSx0LmxpbmVDYXA9ImJ1dHQiKX0sImRyYXdMaW5lIiksXz1vKGZ1bmN0aW9uKCl7dmFyIE89YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOng7aWYodC5saW5lV2lkdGg9bSt5LHQubGluZUNhcD1nLHk+MClzLmNvbG9yU3Ryb2tlU3R5bGUodCx2WzBdLHZbMV0sdlsyXSxPKTtlbHNle3QubGluZUNhcD0iYnV0dCI7cmV0dXJufWQ9PT0ic3RyYWlnaHQtdHJpYW5nbGUiP3MuZHJhd0VkZ2VUcmlhbmdsZVBhdGgoZSx0LGwuYWxscHRzKToocy5kcmF3RWRnZVBhdGgoZSx0LGwuYWxscHRzLHApLHQubGluZUNhcD0iYnV0dCIpfSwiZHJhd0xpbmVPdXRsaW5lIiksVD1vKGZ1bmN0aW9uKCl7aSYmcy5kcmF3RWRnZU92ZXJsYXkodCxlKX0sImRyYXdPdmVybGF5IiksRT1vKGZ1bmN0aW9uKCl7aSYmcy5kcmF3RWRnZVVuZGVybGF5KHQsZSl9LCJkcmF3VW5kZXJsYXkiKSxMPW8oZnVuY3Rpb24oKXt2YXIgTz1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06YjtzLmRyYXdBcnJvd2hlYWRzKHQsZSxPKX0sImRyYXdBcnJvd3MiKSxTPW8oZnVuY3Rpb24oKXtzLmRyYXdFbGVtZW50VGV4dCh0LGUsbnVsbCxuKX0sImRyYXdUZXh0Iik7dC5saW5lSm9pbj0icm91bmQiO3ZhciBBPWUucHN0eWxlKCJnaG9zdCIpLnZhbHVlPT09InllcyI7aWYoQSl7dmFyIEk9ZS5wc3R5bGUoImdob3N0LW9mZnNldC14IikucGZWYWx1ZSxEPWUucHN0eWxlKCJnaG9zdC1vZmZzZXQteSIpLnBmVmFsdWUsaz1lLnBzdHlsZSgiZ2hvc3Qtb3BhY2l0eSIpLnZhbHVlLFI9eCprO3QudHJhbnNsYXRlKEksRCksdyhSKSxMKFIpLHQudHJhbnNsYXRlKC1JLC1EKX1lbHNlIF8oKTtFKCksdygpLEwoKSxUKCksUygpLHImJnQudHJhbnNsYXRlKHUueDEsdS55MSl9fTttMWU9byhmdW5jdGlvbihlKXtpZighWyJvdmVybGF5IiwidW5kZXJsYXkiXS5pbmNsdWRlcyhlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RhdGUiKTtyZXR1cm4gZnVuY3Rpb24ocixuKXtpZihuLnZpc2libGUoKSl7dmFyIGk9bi5wc3R5bGUoIiIuY29uY2F0KGUsIi1vcGFjaXR5IikpLnZhbHVlO2lmKGkhPT0wKXt2YXIgYT10aGlzLHM9YS51c2VQYXRocygpLGw9bi5fcHJpdmF0ZS5yc2NyYXRjaCx1PW4ucHN0eWxlKCIiLmNvbmNhdChlLCItcGFkZGluZyIpKS5wZlZhbHVlLGg9Mip1LGY9bi5wc3R5bGUoIiIuY29uY2F0KGUsIi1jb2xvciIpKS52YWx1ZTtyLmxpbmVXaWR0aD1oLGwuZWRnZVR5cGU9PT0ic2VsZiImJiFzP3IubGluZUNhcD0iYnV0dCI6ci5saW5lQ2FwPSJyb3VuZCIsYS5jb2xvclN0cm9rZVN0eWxlKHIsZlswXSxmWzFdLGZbMl0saSksYS5kcmF3RWRnZVBhdGgobixyLGwuYWxscHRzLCJzb2xpZCIpfX19fSwiZHJhd0VkZ2VPdmVybGF5VW5kZXJsYXkiKTtsaC5kcmF3RWRnZU92ZXJsYXk9bTFlKCJvdmVybGF5Iik7bGguZHJhd0VkZ2VVbmRlcmxheT1tMWUoInVuZGVybGF5Iik7bGguZHJhd0VkZ2VQYXRoPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuX3ByaXZhdGUucnNjcmF0Y2gsYT1lLHMsbD0hMSx1PXRoaXMudXNlUGF0aHMoKSxoPXQucHN0eWxlKCJsaW5lLWRhc2gtcGF0dGVybiIpLnBmVmFsdWUsZj10LnBzdHlsZSgibGluZS1kYXNoLW9mZnNldCIpLnBmVmFsdWU7aWYodSl7dmFyIGQ9ci5qb2luKCIkIikscD1pLnBhdGhDYWNoZUtleSYmaS5wYXRoQ2FjaGVLZXk9PT1kO3A/KHM9ZT1pLnBhdGhDYWNoZSxsPSEwKToocz1lPW5ldyBQYXRoMkQsaS5wYXRoQ2FjaGVLZXk9ZCxpLnBhdGhDYWNoZT1zKX1pZihhLnNldExpbmVEYXNoKXN3aXRjaChuKXtjYXNlImRvdHRlZCI6YS5zZXRMaW5lRGFzaChbMSwxXSk7YnJlYWs7Y2FzZSJkYXNoZWQiOmEuc2V0TGluZURhc2goaCksYS5saW5lRGFzaE9mZnNldD1mO2JyZWFrO2Nhc2Uic29saWQiOmEuc2V0TGluZURhc2goW10pO2JyZWFrfWlmKCFsJiYhaS5iYWRMaW5lKXN3aXRjaChlLmJlZ2luUGF0aCYmZS5iZWdpblBhdGgoKSxlLm1vdmVUbyhyWzBdLHJbMV0pLGkuZWRnZVR5cGUpe2Nhc2UiYmV6aWVyIjpjYXNlInNlbGYiOmNhc2UiY29tcG91bmQiOmNhc2UibXVsdGliZXppZXIiOmZvcih2YXIgbT0yO20rMzxyLmxlbmd0aDttKz00KWUucXVhZHJhdGljQ3VydmVUbyhyW21dLHJbbSsxXSxyW20rMl0sclttKzNdKTticmVhaztjYXNlInN0cmFpZ2h0IjpjYXNlImhheXN0YWNrIjpmb3IodmFyIGc9MjtnKzE8ci5sZW5ndGg7Zys9MillLmxpbmVUbyhyW2ddLHJbZysxXSk7YnJlYWs7Y2FzZSJzZWdtZW50cyI6aWYoaS5pc1JvdW5kKXt2YXIgeT1VbWUoaS5yb3VuZENvcm5lcnMpLHY7dHJ5e2Zvcih5LnMoKTshKHY9eS5uKCkpLmRvbmU7KXt2YXIgeD12LnZhbHVlO2kxZShlLHgpfX1jYXRjaCh3KXt5LmUodyl9ZmluYWxseXt5LmYoKX1lLmxpbmVUbyhyW3IubGVuZ3RoLTJdLHJbci5sZW5ndGgtMV0pfWVsc2UgZm9yKHZhciBiPTI7YisxPHIubGVuZ3RoO2IrPTIpZS5saW5lVG8ocltiXSxyW2IrMV0pO2JyZWFrfWU9YSx1P2Uuc3Ryb2tlKHMpOmUuc3Ryb2tlKCksZS5zZXRMaW5lRGFzaCYmZS5zZXRMaW5lRGFzaChbXSl9O2xoLmRyYXdFZGdlVHJpYW5nbGVQYXRoPWZ1bmN0aW9uKHQsZSxyKXtlLmZpbGxTdHlsZT1lLnN0cm9rZVN0eWxlO2Zvcih2YXIgbj10LnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLGk9MDtpKzE8ci5sZW5ndGg7aSs9Mil7dmFyIGE9W3JbaSsyXS1yW2ldLHJbaSszXS1yW2krMV1dLHM9TWF0aC5zcXJ0KGFbMF0qYVswXSthWzFdKmFbMV0pLGw9W2FbMV0vcywtYVswXS9zXSx1PVtsWzBdKm4vMixsWzFdKm4vMl07ZS5iZWdpblBhdGgoKSxlLm1vdmVUbyhyW2ldLXVbMF0scltpKzFdLXVbMV0pLGUubGluZVRvKHJbaV0rdVswXSxyW2krMV0rdVsxXSksZS5saW5lVG8ocltpKzJdLHJbaSszXSksZS5jbG9zZVBhdGgoKSxlLmZpbGwoKX19O2xoLmRyYXdBcnJvd2hlYWRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLl9wcml2YXRlLnJzY3JhdGNoLGk9bi5lZGdlVHlwZT09PSJoYXlzdGFjayI7aXx8dGhpcy5kcmF3QXJyb3doZWFkKHQsZSwic291cmNlIixuLmFycm93U3RhcnRYLG4uYXJyb3dTdGFydFksbi5zcmNBcnJvd0FuZ2xlLHIpLHRoaXMuZHJhd0Fycm93aGVhZCh0LGUsIm1pZC10YXJnZXQiLG4ubWlkWCxuLm1pZFksbi5taWR0Z3RBcnJvd0FuZ2xlLHIpLHRoaXMuZHJhd0Fycm93aGVhZCh0LGUsIm1pZC1zb3VyY2UiLG4ubWlkWCxuLm1pZFksbi5taWRzcmNBcnJvd0FuZ2xlLHIpLGl8fHRoaXMuZHJhd0Fycm93aGVhZCh0LGUsInRhcmdldCIsbi5hcnJvd0VuZFgsbi5hcnJvd0VuZFksbi50Z3RBcnJvd0FuZ2xlLHIpfTtsaC5kcmF3QXJyb3doZWFkPWZ1bmN0aW9uKHQsZSxyLG4saSxhLHMpe2lmKCEoaXNOYU4obil8fG49PW51bGx8fGlzTmFOKGkpfHxpPT1udWxsfHxpc05hTihhKXx8YT09bnVsbCkpe3ZhciBsPXRoaXMsdT1lLnBzdHlsZShyKyItYXJyb3ctc2hhcGUiKS52YWx1ZTtpZih1IT09Im5vbmUiKXt2YXIgaD1lLnBzdHlsZShyKyItYXJyb3ctZmlsbCIpLnZhbHVlPT09ImhvbGxvdyI/ImJvdGgiOiJmaWxsZWQiLGY9ZS5wc3R5bGUocisiLWFycm93LWZpbGwiKS52YWx1ZSxkPWUucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUscD1lLnBzdHlsZShyKyItYXJyb3ctd2lkdGgiKSxtPXAudmFsdWU9PT0ibWF0Y2gtbGluZSI/ZDpwLnBmVmFsdWU7cC51bml0cz09PSIlIiYmKG0qPWQpO3ZhciBnPWUucHN0eWxlKCJvcGFjaXR5IikudmFsdWU7cz09PXZvaWQgMCYmKHM9Zyk7dmFyIHk9dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247KHMhPT0xfHxmPT09ImhvbGxvdyIpJiYodC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW91dCIsbC5jb2xvckZpbGxTdHlsZSh0LDI1NSwyNTUsMjU1LDEpLGwuY29sb3JTdHJva2VTdHlsZSh0LDI1NSwyNTUsMjU1LDEpLGwuZHJhd0Fycm93U2hhcGUoZSx0LGgsZCx1LG0sbixpLGEpLHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPXkpO3ZhciB2PWUucHN0eWxlKHIrIi1hcnJvdy1jb2xvciIpLnZhbHVlO2wuY29sb3JGaWxsU3R5bGUodCx2WzBdLHZbMV0sdlsyXSxzKSxsLmNvbG9yU3Ryb2tlU3R5bGUodCx2WzBdLHZbMV0sdlsyXSxzKSxsLmRyYXdBcnJvd1NoYXBlKGUsdCxmLGQsdSxtLG4saSxhKX19fTtsaC5kcmF3QXJyb3dTaGFwZT1mdW5jdGlvbih0LGUscixuLGksYSxzLGwsdSl7dmFyIGg9dGhpcyxmPXRoaXMudXNlUGF0aHMoKSYmaSE9PSJ0cmlhbmdsZS1jcm9zcyIsZD0hMSxwLG09ZSxnPXt4OnMseTpsfSx5PXQucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlLHY9dGhpcy5nZXRBcnJvd1dpZHRoKG4seSkseD1oLmFycm93U2hhcGVzW2ldO2lmKGYpe3ZhciBiPWguYXJyb3dQYXRoQ2FjaGU9aC5hcnJvd1BhdGhDYWNoZXx8W10sdz1qMChpKSxfPWJbd107XyE9bnVsbD8ocD1lPV8sZD0hMCk6KHA9ZT1uZXcgUGF0aDJELGJbd109cCl9ZHx8KGUuYmVnaW5QYXRoJiZlLmJlZ2luUGF0aCgpLGY/eC5kcmF3KGUsMSwwLHt4OjAseTowfSwxKTp4LmRyYXcoZSx2LHUsZyxuKSxlLmNsb3NlUGF0aCYmZS5jbG9zZVBhdGgoKSksZT1tLGYmJihlLnRyYW5zbGF0ZShzLGwpLGUucm90YXRlKHUpLGUuc2NhbGUodix2KSksKHI9PT0iZmlsbGVkInx8cj09PSJib3RoIikmJihmP2UuZmlsbChwKTplLmZpbGwoKSksKHI9PT0iaG9sbG93Inx8cj09PSJib3RoIikmJihlLmxpbmVXaWR0aD1hLyhmP3Y6MSksZS5saW5lSm9pbj0ibWl0ZXIiLGY/ZS5zdHJva2UocCk6ZS5zdHJva2UoKSksZiYmKGUuc2NhbGUoMS92LDEvdiksZS5yb3RhdGUoLXUpLGUudHJhbnNsYXRlKC1zLC1sKSl9O0VCPXt9O0VCLnNhZmVEcmF3SW1hZ2U9ZnVuY3Rpb24odCxlLHIsbixpLGEscyxsLHUsaCl7aWYoIShpPD0wfHxhPD0wfHx1PD0wfHxoPD0wKSl0cnl7dC5kcmF3SW1hZ2UoZSxyLG4saSxhLHMsbCx1LGgpfWNhdGNoKGYpe29uKGYpfX07RUIuZHJhd0luc2NyaWJlZEltYWdlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dGhpcyxzPXIucG9zaXRpb24oKSxsPXMueCx1PXMueSxoPXIuY3koKS5zdHlsZSgpLGY9aC5nZXRJbmRleGVkU3R5bGUuYmluZChoKSxkPWYociwiYmFja2dyb3VuZC1maXQiLCJ2YWx1ZSIsbikscD1mKHIsImJhY2tncm91bmQtcmVwZWF0IiwidmFsdWUiLG4pLG09ci53aWR0aCgpLGc9ci5oZWlnaHQoKSx5PXIucGFkZGluZygpKjIsdj1tKyhmKHIsImJhY2tncm91bmQtd2lkdGgtcmVsYXRpdmUtdG8iLCJ2YWx1ZSIsbik9PT0iaW5uZXIiPzA6eSkseD1nKyhmKHIsImJhY2tncm91bmQtaGVpZ2h0LXJlbGF0aXZlLXRvIiwidmFsdWUiLG4pPT09ImlubmVyIj8wOnkpLGI9ci5fcHJpdmF0ZS5yc2NyYXRjaCx3PWYociwiYmFja2dyb3VuZC1jbGlwIiwidmFsdWUiLG4pLF89dz09PSJub2RlIixUPWYociwiYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5IiwidmFsdWUiLG4pKmksRT1mKHIsImJhY2tncm91bmQtaW1hZ2Utc21vb3RoaW5nIiwidmFsdWUiLG4pLEw9ci5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS52YWx1ZTtMIT09ImF1dG8iJiYoTD1yLnBzdHlsZSgiY29ybmVyLXJhZGl1cyIpLnBmVmFsdWUpO3ZhciBTPWUud2lkdGh8fGUuY2FjaGVkVyxBPWUuaGVpZ2h0fHxlLmNhY2hlZEg7KFM9PW51bGx8fEE9PW51bGwpJiYoZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKSxTPWUuY2FjaGVkVz1lLndpZHRofHxlLm9mZnNldFdpZHRoLEE9ZS5jYWNoZWRIPWUuaGVpZ2h0fHxlLm9mZnNldEhlaWdodCxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGUpKTt2YXIgST1TLEQ9QTtpZihmKHIsImJhY2tncm91bmQtd2lkdGgiLCJ2YWx1ZSIsbikhPT0iYXV0byImJihmKHIsImJhY2tncm91bmQtd2lkdGgiLCJ1bml0cyIsbik9PT0iJSI/ST1mKHIsImJhY2tncm91bmQtd2lkdGgiLCJwZlZhbHVlIixuKSp2Okk9ZihyLCJiYWNrZ3JvdW5kLXdpZHRoIiwicGZWYWx1ZSIsbikpLGYociwiYmFja2dyb3VuZC1oZWlnaHQiLCJ2YWx1ZSIsbikhPT0iYXV0byImJihmKHIsImJhY2tncm91bmQtaGVpZ2h0IiwidW5pdHMiLG4pPT09IiUiP0Q9ZihyLCJiYWNrZ3JvdW5kLWhlaWdodCIsInBmVmFsdWUiLG4pKng6RD1mKHIsImJhY2tncm91bmQtaGVpZ2h0IiwicGZWYWx1ZSIsbikpLCEoST09PTB8fEQ9PT0wKSl7aWYoZD09PSJjb250YWluIil7dmFyIGs9TWF0aC5taW4odi9JLHgvRCk7SSo9ayxEKj1rfWVsc2UgaWYoZD09PSJjb3ZlciIpe3ZhciBrPU1hdGgubWF4KHYvSSx4L0QpO0kqPWssRCo9a312YXIgUj1sLXYvMixDPWYociwiYmFja2dyb3VuZC1wb3NpdGlvbi14IiwidW5pdHMiLG4pLE89ZihyLCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXgiLCJwZlZhbHVlIixuKTtDPT09IiUiP1IrPSh2LUkpKk86Uis9Tzt2YXIgTj1mKHIsImJhY2tncm91bmQtb2Zmc2V0LXgiLCJ1bml0cyIsbiksUD1mKHIsImJhY2tncm91bmQtb2Zmc2V0LXgiLCJwZlZhbHVlIixuKTtOPT09IiUiP1IrPSh2LUkpKlA6Uis9UDt2YXIgRj11LXgvMixCPWYociwiYmFja2dyb3VuZC1wb3NpdGlvbi15IiwidW5pdHMiLG4pLEc9ZihyLCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXkiLCJwZlZhbHVlIixuKTtCPT09IiUiP0YrPSh4LUQpKkc6Ris9Rzt2YXIgej1mKHIsImJhY2tncm91bmQtb2Zmc2V0LXkiLCJ1bml0cyIsbiksVz1mKHIsImJhY2tncm91bmQtb2Zmc2V0LXkiLCJwZlZhbHVlIixuKTt6PT09IiUiP0YrPSh4LUQpKlc6Ris9VyxiLnBhdGhDYWNoZSYmKFItPWwsRi09dSxsPTAsdT0wKTt2YXIgWj10Lmdsb2JhbEFscGhhO3QuZ2xvYmFsQWxwaGE9VDt2YXIgaj1hLmdldEltZ1Ntb290aGluZyh0KSxvZT0hMTtpZihFPT09Im5vIiYmaj8oYS5zZXRJbWdTbW9vdGhpbmcodCwhMSksb2U9ITApOkU9PT0ieWVzIiYmIWomJihhLnNldEltZ1Ntb290aGluZyh0LCEwKSxvZT0hMCkscD09PSJuby1yZXBlYXQiKV8mJih0LnNhdmUoKSxiLnBhdGhDYWNoZT90LmNsaXAoYi5wYXRoQ2FjaGUpOihhLm5vZGVTaGFwZXNbYS5nZXROb2RlU2hhcGUocildLmRyYXcodCxsLHUsdix4LEwsYiksdC5jbGlwKCkpKSxhLnNhZmVEcmF3SW1hZ2UodCxlLDAsMCxTLEEsUixGLEksRCksXyYmdC5yZXN0b3JlKCk7ZWxzZXt2YXIgSz10LmNyZWF0ZVBhdHRlcm4oZSxwKTt0LmZpbGxTdHlsZT1LLGEubm9kZVNoYXBlc1thLmdldE5vZGVTaGFwZShyKV0uZHJhdyh0LGwsdSx2LHgsTCxiKSx0LnRyYW5zbGF0ZShSLEYpLHQuZmlsbCgpLHQudHJhbnNsYXRlKC1SLC1GKX10Lmdsb2JhbEFscGhhPVosb2UmJmEuc2V0SW1nU21vb3RoaW5nKHQsail9fTtycD17fTtycC5lbGVUZXh0QmlnZ2VyVGhhbk1pbj1mdW5jdGlvbih0LGUpe2lmKCFlKXt2YXIgcj10LmN5KCkuem9vbSgpLG49dGhpcy5nZXRQaXhlbFJhdGlvKCksaT1NYXRoLmNlaWwobEIocipuKSk7ZT1NYXRoLnBvdygyLGkpfXZhciBhPXQucHN0eWxlKCJmb250LXNpemUiKS5wZlZhbHVlKmUscz10LnBzdHlsZSgibWluLXpvb21lZC1mb250LXNpemUiKS5wZlZhbHVlO3JldHVybiEoYTxzKX07cnAuZHJhd0VsZW1lbnRUZXh0PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiEwLHM9dGhpcztpZihuPT1udWxsKXtpZihhJiYhcy5lbGVUZXh0QmlnZ2VyVGhhbk1pbihlKSlyZXR1cm59ZWxzZSBpZihuPT09ITEpcmV0dXJuO2lmKGUuaXNOb2RlKCkpe3ZhciBsPWUucHN0eWxlKCJsYWJlbCIpO2lmKCFsfHwhbC52YWx1ZSlyZXR1cm47dmFyIHU9cy5nZXRMYWJlbEp1c3RpZmljYXRpb24oZSk7dC50ZXh0QWxpZ249dSx0LnRleHRCYXNlbGluZT0iYm90dG9tIn1lbHNle3ZhciBoPWUuZWxlbWVudCgpLl9wcml2YXRlLnJzY3JhdGNoLmJhZExpbmUsZj1lLnBzdHlsZSgibGFiZWwiKSxkPWUucHN0eWxlKCJzb3VyY2UtbGFiZWwiKSxwPWUucHN0eWxlKCJ0YXJnZXQtbGFiZWwiKTtpZihofHwoIWZ8fCFmLnZhbHVlKSYmKCFkfHwhZC52YWx1ZSkmJighcHx8IXAudmFsdWUpKXJldHVybjt0LnRleHRBbGlnbj0iY2VudGVyIix0LnRleHRCYXNlbGluZT0iYm90dG9tIn12YXIgbT0hcixnO3ImJihnPXIsdC50cmFuc2xhdGUoLWcueDEsLWcueTEpKSxpPT1udWxsPyhzLmRyYXdUZXh0KHQsZSxudWxsLG0sYSksZS5pc0VkZ2UoKSYmKHMuZHJhd1RleHQodCxlLCJzb3VyY2UiLG0sYSkscy5kcmF3VGV4dCh0LGUsInRhcmdldCIsbSxhKSkpOnMuZHJhd1RleHQodCxlLGksbSxhKSxyJiZ0LnRyYW5zbGF0ZShnLngxLGcueTEpfTtycC5nZXRGb250Q2FjaGU9ZnVuY3Rpb24odCl7dmFyIGU7dGhpcy5mb250Q2FjaGVzPXRoaXMuZm9udENhY2hlc3x8W107Zm9yKHZhciByPTA7cjx0aGlzLmZvbnRDYWNoZXMubGVuZ3RoO3IrKylpZihlPXRoaXMuZm9udENhY2hlc1tyXSxlLmNvbnRleHQ9PT10KXJldHVybiBlO3JldHVybiBlPXtjb250ZXh0OnR9LHRoaXMuZm9udENhY2hlcy5wdXNoKGUpLGV9O3JwLnNldHVwVGV4dFN0eWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiEwLG49ZS5wc3R5bGUoImZvbnQtc3R5bGUiKS5zdHJWYWx1ZSxpPWUucHN0eWxlKCJmb250LXNpemUiKS5wZlZhbHVlKyJweCIsYT1lLnBzdHlsZSgiZm9udC1mYW1pbHkiKS5zdHJWYWx1ZSxzPWUucHN0eWxlKCJmb250LXdlaWdodCIpLnN0clZhbHVlLGw9cj9lLmVmZmVjdGl2ZU9wYWNpdHkoKSplLnBzdHlsZSgidGV4dC1vcGFjaXR5IikudmFsdWU6MSx1PWUucHN0eWxlKCJ0ZXh0LW91dGxpbmUtb3BhY2l0eSIpLnZhbHVlKmwsaD1lLnBzdHlsZSgiY29sb3IiKS52YWx1ZSxmPWUucHN0eWxlKCJ0ZXh0LW91dGxpbmUtY29sb3IiKS52YWx1ZTt0LmZvbnQ9bisiICIrcysiICIraSsiICIrYSx0LmxpbmVKb2luPSJyb3VuZCIsdGhpcy5jb2xvckZpbGxTdHlsZSh0LGhbMF0saFsxXSxoWzJdLGwpLHRoaXMuY29sb3JTdHJva2VTdHlsZSh0LGZbMF0sZlsxXSxmWzJdLHUpfTtvKEZQLCJyb3VuZFJlY3QiKTtycC5nZXRUZXh0QW5nbGU9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQuX3ByaXZhdGUsaT1uLnJzY3JhdGNoLGE9ZT9lKyItIjoiIixzPXQucHN0eWxlKGErInRleHQtcm90YXRpb24iKSxsPVFsKGksImxhYmVsQW5nbGUiLGUpO3JldHVybiBzLnN0clZhbHVlPT09ImF1dG9yb3RhdGUiP3I9dC5pc0VkZ2UoKT9sOjA6cy5zdHJWYWx1ZT09PSJub25lIj9yPTA6cj1zLnBmVmFsdWUscn07cnAuZHJhd1RleHQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMCxpPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMCxhPWUuX3ByaXZhdGUscz1hLnJzY3JhdGNoLGw9aT9lLmVmZmVjdGl2ZU9wYWNpdHkoKToxO2lmKCEoaSYmKGw9PT0wfHxlLnBzdHlsZSgidGV4dC1vcGFjaXR5IikudmFsdWU9PT0wKSkpe3I9PT0ibWFpbiImJihyPW51bGwpO3ZhciB1PVFsKHMsImxhYmVsWCIsciksaD1RbChzLCJsYWJlbFkiLHIpLGYsZCxwPXRoaXMuZ2V0TGFiZWxUZXh0KGUscik7aWYocCE9bnVsbCYmcCE9PSIiJiYhaXNOYU4odSkmJiFpc05hTihoKSl7dGhpcy5zZXR1cFRleHRTdHlsZSh0LGUsaSk7dmFyIG09cj9yKyItIjoiIixnPVFsKHMsImxhYmVsV2lkdGgiLHIpLHk9UWwocywibGFiZWxIZWlnaHQiLHIpLHY9ZS5wc3R5bGUobSsidGV4dC1tYXJnaW4teCIpLnBmVmFsdWUseD1lLnBzdHlsZShtKyJ0ZXh0LW1hcmdpbi15IikucGZWYWx1ZSxiPWUuaXNFZGdlKCksdz1lLnBzdHlsZSgidGV4dC1oYWxpZ24iKS52YWx1ZSxfPWUucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLnZhbHVlO2ImJih3PSJjZW50ZXIiLF89ImNlbnRlciIpLHUrPXYsaCs9eDt2YXIgVDtzd2l0Y2gobj9UPXRoaXMuZ2V0VGV4dEFuZ2xlKGUscik6VD0wLFQhPT0wJiYoZj11LGQ9aCx0LnRyYW5zbGF0ZShmLGQpLHQucm90YXRlKFQpLHU9MCxoPTApLF8pe2Nhc2UidG9wIjpicmVhaztjYXNlImNlbnRlciI6aCs9eS8yO2JyZWFrO2Nhc2UiYm90dG9tIjpoKz15O2JyZWFrfXZhciBFPWUucHN0eWxlKCJ0ZXh0LWJhY2tncm91bmQtb3BhY2l0eSIpLnZhbHVlLEw9ZS5wc3R5bGUoInRleHQtYm9yZGVyLW9wYWNpdHkiKS52YWx1ZSxTPWUucHN0eWxlKCJ0ZXh0LWJvcmRlci13aWR0aCIpLnBmVmFsdWUsQT1lLnBzdHlsZSgidGV4dC1iYWNrZ3JvdW5kLXBhZGRpbmciKS5wZlZhbHVlLEk9ZS5wc3R5bGUoInRleHQtYmFja2dyb3VuZC1zaGFwZSIpLnN0clZhbHVlLEQ9SS5pbmRleE9mKCJyb3VuZCIpPT09MCxrPTI7aWYoRT4wfHxTPjAmJkw+MCl7dmFyIFI9dS1BO3N3aXRjaCh3KXtjYXNlImxlZnQiOlItPWc7YnJlYWs7Y2FzZSJjZW50ZXIiOlItPWcvMjticmVha312YXIgQz1oLXktQSxPPWcrMipBLE49eSsyKkE7aWYoRT4wKXt2YXIgUD10LmZpbGxTdHlsZSxGPWUucHN0eWxlKCJ0ZXh0LWJhY2tncm91bmQtY29sb3IiKS52YWx1ZTt0LmZpbGxTdHlsZT0icmdiYSgiK0ZbMF0rIiwiK0ZbMV0rIiwiK0ZbMl0rIiwiK0UqbCsiKSIsRD9GUCh0LFIsQyxPLE4sayk6dC5maWxsUmVjdChSLEMsTyxOKSx0LmZpbGxTdHlsZT1QfWlmKFM+MCYmTD4wKXt2YXIgQj10LnN0cm9rZVN0eWxlLEc9dC5saW5lV2lkdGgsej1lLnBzdHlsZSgidGV4dC1ib3JkZXItY29sb3IiKS52YWx1ZSxXPWUucHN0eWxlKCJ0ZXh0LWJvcmRlci1zdHlsZSIpLnZhbHVlO2lmKHQuc3Ryb2tlU3R5bGU9InJnYmEoIit6WzBdKyIsIit6WzFdKyIsIit6WzJdKyIsIitMKmwrIikiLHQubGluZVdpZHRoPVMsdC5zZXRMaW5lRGFzaClzd2l0Y2goVyl7Y2FzZSJkb3R0ZWQiOnQuc2V0TGluZURhc2goWzEsMV0pO2JyZWFrO2Nhc2UiZGFzaGVkIjp0LnNldExpbmVEYXNoKFs0LDJdKTticmVhaztjYXNlImRvdWJsZSI6dC5saW5lV2lkdGg9Uy80LHQuc2V0TGluZURhc2goW10pO2JyZWFrO2Nhc2Uic29saWQiOnQuc2V0TGluZURhc2goW10pO2JyZWFrfWlmKEQ/RlAodCxSLEMsTyxOLGssInN0cm9rZSIpOnQuc3Ryb2tlUmVjdChSLEMsTyxOKSxXPT09ImRvdWJsZSIpe3ZhciBaPVMvMjtEP0ZQKHQsUitaLEMrWixPLVoqMixOLVoqMixrLCJzdHJva2UiKTp0LnN0cm9rZVJlY3QoUitaLEMrWixPLVoqMixOLVoqMil9dC5zZXRMaW5lRGFzaCYmdC5zZXRMaW5lRGFzaChbXSksdC5saW5lV2lkdGg9Ryx0LnN0cm9rZVN0eWxlPUJ9fXZhciBqPTIqZS5wc3R5bGUoInRleHQtb3V0bGluZS13aWR0aCIpLnBmVmFsdWU7aWYoaj4wJiYodC5saW5lV2lkdGg9aiksZS5wc3R5bGUoInRleHQtd3JhcCIpLnZhbHVlPT09IndyYXAiKXt2YXIgb2U9UWwocywibGFiZWxXcmFwQ2FjaGVkTGluZXMiLHIpLEs9UWwocywibGFiZWxMaW5lSGVpZ2h0IixyKSxlZT1nLzIsSj10aGlzLmdldExhYmVsSnVzdGlmaWNhdGlvbihlKTtzd2l0Y2goSj09PSJhdXRvInx8KHc9PT0ibGVmdCI/Sj09PSJsZWZ0Ij91Kz0tZzpKPT09ImNlbnRlciImJih1Kz0tZWUpOnc9PT0iY2VudGVyIj9KPT09ImxlZnQiP3UrPS1lZTpKPT09InJpZ2h0IiYmKHUrPWVlKTp3PT09InJpZ2h0IiYmKEo9PT0iY2VudGVyIj91Kz1lZTpKPT09InJpZ2h0IiYmKHUrPWcpKSksXyl7Y2FzZSJ0b3AiOmgtPShvZS5sZW5ndGgtMSkqSzticmVhaztjYXNlImNlbnRlciI6Y2FzZSJib3R0b20iOmgtPShvZS5sZW5ndGgtMSkqSzticmVha31mb3IodmFyIEg9MDtIPG9lLmxlbmd0aDtIKyspaj4wJiZ0LnN0cm9rZVRleHQob2VbSF0sdSxoKSx0LmZpbGxUZXh0KG9lW0hdLHUsaCksaCs9S31lbHNlIGo+MCYmdC5zdHJva2VUZXh0KHAsdSxoKSx0LmZpbGxUZXh0KHAsdSxoKTtUIT09MCYmKHQucm90YXRlKC1UKSx0LnRyYW5zbGF0ZSgtZiwtZCkpfX19O0kxPXt9O0kxLmRyYXdOb2RlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITAsaT1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06ITAsYT1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06ITAscz10aGlzLGwsdSxoPWUuX3ByaXZhdGUsZj1oLnJzY3JhdGNoLGQ9ZS5wb3NpdGlvbigpO2lmKCEoIXh0KGQueCl8fCF4dChkLnkpKSYmIShhJiYhZS52aXNpYmxlKCkpKXt2YXIgcD1hP2UuZWZmZWN0aXZlT3BhY2l0eSgpOjEsbT1zLnVzZVBhdGhzKCksZyx5PSExLHY9ZS5wYWRkaW5nKCk7bD1lLndpZHRoKCkrMip2LHU9ZS5oZWlnaHQoKSsyKnY7dmFyIHg7ciYmKHg9cix0LnRyYW5zbGF0ZSgteC54MSwteC55MSkpO2Zvcih2YXIgYj1lLnBzdHlsZSgiYmFja2dyb3VuZC1pbWFnZSIpLHc9Yi52YWx1ZSxfPW5ldyBBcnJheSh3Lmxlbmd0aCksVD1uZXcgQXJyYXkody5sZW5ndGgpLEU9MCxMPTA7TDx3Lmxlbmd0aDtMKyspe3ZhciBTPXdbTF0sQT1fW0xdPVMhPW51bGwmJlMhPT0ibm9uZSI7aWYoQSl7dmFyIEk9ZS5jeSgpLnN0eWxlKCkuZ2V0SW5kZXhlZFN0eWxlKGUsImJhY2tncm91bmQtaW1hZ2UtY3Jvc3NvcmlnaW4iLCJ2YWx1ZSIsTCk7RSsrLFRbTF09cy5nZXRDYWNoZWRJbWFnZShTLEksZnVuY3Rpb24oKXtoLmJhY2tncm91bmRUaW1lc3RhbXA9RGF0ZS5ub3coKSxlLmVtaXRBbmROb3RpZnkoImJhY2tncm91bmQiKX0pfX12YXIgRD1lLnBzdHlsZSgiYmFja2dyb3VuZC1ibGFja2VuIikudmFsdWUsaz1lLnBzdHlsZSgiYm9yZGVyLXdpZHRoIikucGZWYWx1ZSxSPWUucHN0eWxlKCJiYWNrZ3JvdW5kLW9wYWNpdHkiKS52YWx1ZSpwLEM9ZS5wc3R5bGUoImJvcmRlci1jb2xvciIpLnZhbHVlLE89ZS5wc3R5bGUoImJvcmRlci1zdHlsZSIpLnZhbHVlLE49ZS5wc3R5bGUoImJvcmRlci1qb2luIikudmFsdWUsUD1lLnBzdHlsZSgiYm9yZGVyLWNhcCIpLnZhbHVlLEY9ZS5wc3R5bGUoImJvcmRlci1wb3NpdGlvbiIpLnZhbHVlLEI9ZS5wc3R5bGUoImJvcmRlci1kYXNoLXBhdHRlcm4iKS5wZlZhbHVlLEc9ZS5wc3R5bGUoImJvcmRlci1kYXNoLW9mZnNldCIpLnBmVmFsdWUsej1lLnBzdHlsZSgiYm9yZGVyLW9wYWNpdHkiKS52YWx1ZSpwLFc9ZS5wc3R5bGUoIm91dGxpbmUtd2lkdGgiKS5wZlZhbHVlLFo9ZS5wc3R5bGUoIm91dGxpbmUtY29sb3IiKS52YWx1ZSxqPWUucHN0eWxlKCJvdXRsaW5lLXN0eWxlIikudmFsdWUsb2U9ZS5wc3R5bGUoIm91dGxpbmUtb3BhY2l0eSIpLnZhbHVlKnAsSz1lLnBzdHlsZSgib3V0bGluZS1vZmZzZXQiKS52YWx1ZSxlZT1lLnBzdHlsZSgiY29ybmVyLXJhZGl1cyIpLnZhbHVlO2VlIT09ImF1dG8iJiYoZWU9ZS5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS5wZlZhbHVlKTt2YXIgSj1vKGZ1bmN0aW9uKCl7dmFyIHZlPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpSO3MuZWxlRmlsbFN0eWxlKHQsZSx2ZSl9LCJzZXR1cFNoYXBlQ29sb3IiKSxIPW8oZnVuY3Rpb24oKXt2YXIgdmU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOno7cy5jb2xvclN0cm9rZVN0eWxlKHQsQ1swXSxDWzFdLENbMl0sdmUpfSwic2V0dXBCb3JkZXJDb2xvciIpLHE9byhmdW5jdGlvbigpe3ZhciB2ZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06b2U7cy5jb2xvclN0cm9rZVN0eWxlKHQsWlswXSxaWzFdLFpbMl0sdmUpfSwic2V0dXBPdXRsaW5lQ29sb3IiKSxRPW8oZnVuY3Rpb24odmUsVSxUZSxpZSl7dmFyIEVlPXMubm9kZVBhdGhDYWNoZT1zLm5vZGVQYXRoQ2FjaGV8fFtdLEFlPXJnZShUZT09PSJwb2x5Z29uIj9UZSsiLCIraWUuam9pbigiLCIpOlRlLCIiK1UsIiIrdmUsIiIrZWUpLEdlPUVlW0FlXSxCZSxtZT0hMTtyZXR1cm4gR2UhPW51bGw/KEJlPUdlLG1lPSEwLGYucGF0aENhY2hlPUJlKTooQmU9bmV3IFBhdGgyRCxFZVtBZV09Zi5wYXRoQ2FjaGU9QmUpLHtwYXRoOkJlLGNhY2hlSGl0Om1lfX0sImdldFBhdGgiKSxhZT1lLnBzdHlsZSgic2hhcGUiKS5zdHJWYWx1ZSx1ZT1lLnBzdHlsZSgic2hhcGUtcG9seWdvbi1wb2ludHMiKS5wZlZhbHVlO2lmKG0pe3QudHJhbnNsYXRlKGQueCxkLnkpO3ZhciBjZT1RKGwsdSxhZSx1ZSk7Zz1jZS5wYXRoLHk9Y2UuY2FjaGVIaXR9dmFyIHRlPW8oZnVuY3Rpb24oKXtpZigheSl7dmFyIHZlPWQ7bSYmKHZlPXt4OjAseTowfSkscy5ub2RlU2hhcGVzW3MuZ2V0Tm9kZVNoYXBlKGUpXS5kcmF3KGd8fHQsdmUueCx2ZS55LGwsdSxlZSxmKX1tP3QuZmlsbChnKTp0LmZpbGwoKX0sImRyYXdTaGFwZSIpLE5lPW8oZnVuY3Rpb24oKXtmb3IodmFyIHZlPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpwLFU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwLFRlPWguYmFja2dyb3VuZGluZyxpZT0wLEVlPTA7RWU8VC5sZW5ndGg7RWUrKyl7dmFyIEFlPWUuY3koKS5zdHlsZSgpLmdldEluZGV4ZWRTdHlsZShlLCJiYWNrZ3JvdW5kLWltYWdlLWNvbnRhaW5tZW50IiwidmFsdWUiLEVlKTtpZihVJiZBZT09PSJvdmVyInx8IVUmJkFlPT09Imluc2lkZSIpe2llKys7Y29udGludWV9X1tFZV0mJlRbRWVdLmNvbXBsZXRlJiYhVFtFZV0uZXJyb3ImJihpZSsrLHMuZHJhd0luc2NyaWJlZEltYWdlKHQsVFtFZV0sZSxFZSx2ZSkpfWguYmFja2dyb3VuZGluZz1pZSE9PUUsVGUhPT1oLmJhY2tncm91bmRpbmcmJmUudXBkYXRlU3R5bGUoITEpfSwiZHJhd0ltYWdlcyIpLHNlPW8oZnVuY3Rpb24oKXt2YXIgdmU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiExLFU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnA7cy5oYXNQaWUoZSkmJihzLmRyYXdQaWUodCxlLFUpLHZlJiYobXx8cy5ub2RlU2hhcGVzW3MuZ2V0Tm9kZVNoYXBlKGUpXS5kcmF3KHQsZC54LGQueSxsLHUsZWUsZikpKX0sImRyYXdQaWUiKSxrZT1vKGZ1bmN0aW9uKCl7dmFyIHZlPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpwLFU9KEQ+MD9EOi1EKSp2ZSxUZT1EPjA/MDoyNTU7RCE9PTAmJihzLmNvbG9yRmlsbFN0eWxlKHQsVGUsVGUsVGUsVSksbT90LmZpbGwoZyk6dC5maWxsKCkpfSwiZGFya2VuIiksUmU9byhmdW5jdGlvbigpe2lmKGs+MCl7aWYodC5saW5lV2lkdGg9ayx0LmxpbmVDYXA9UCx0LmxpbmVKb2luPU4sdC5zZXRMaW5lRGFzaClzd2l0Y2goTyl7Y2FzZSJkb3R0ZWQiOnQuc2V0TGluZURhc2goWzEsMV0pO2JyZWFrO2Nhc2UiZGFzaGVkIjp0LnNldExpbmVEYXNoKEIpLHQubGluZURhc2hPZmZzZXQ9RzticmVhaztjYXNlInNvbGlkIjpjYXNlImRvdWJsZSI6dC5zZXRMaW5lRGFzaChbXSk7YnJlYWt9aWYoRiE9PSJjZW50ZXIiKXtpZih0LnNhdmUoKSx0LmxpbmVXaWR0aCo9MixGPT09Imluc2lkZSIpbT90LmNsaXAoZyk6dC5jbGlwKCk7ZWxzZXt2YXIgdmU9bmV3IFBhdGgyRDt2ZS5yZWN0KC1sLzItaywtdS8yLWssbCsyKmssdSsyKmspLHZlLmFkZFBhdGgoZyksdC5jbGlwKHZlLCJldmVub2RkIil9bT90LnN0cm9rZShnKTp0LnN0cm9rZSgpLHQucmVzdG9yZSgpfWVsc2UgbT90LnN0cm9rZShnKTp0LnN0cm9rZSgpO2lmKE89PT0iZG91YmxlIil7dC5saW5lV2lkdGg9ay8zO3ZhciBVPXQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uO3QuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJkZXN0aW5hdGlvbi1vdXQiLG0/dC5zdHJva2UoZyk6dC5zdHJva2UoKSx0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1VfXQuc2V0TGluZURhc2gmJnQuc2V0TGluZURhc2goW10pfX0sImRyYXdCb3JkZXIiKSxDZT1vKGZ1bmN0aW9uKCl7aWYoVz4wKXtpZih0LmxpbmVXaWR0aD1XLHQubGluZUNhcD0iYnV0dCIsdC5zZXRMaW5lRGFzaClzd2l0Y2goail7Y2FzZSJkb3R0ZWQiOnQuc2V0TGluZURhc2goWzEsMV0pO2JyZWFrO2Nhc2UiZGFzaGVkIjp0LnNldExpbmVEYXNoKFs0LDJdKTticmVhaztjYXNlInNvbGlkIjpjYXNlImRvdWJsZSI6dC5zZXRMaW5lRGFzaChbXSk7YnJlYWt9dmFyIHZlPWQ7bSYmKHZlPXt4OjAseTowfSk7dmFyIFU9cy5nZXROb2RlU2hhcGUoZSksVGU9aztGPT09Imluc2lkZSImJihUZT0wKSxGPT09Im91dHNpZGUiJiYoVGUqPTIpO3ZhciBpZT0obCtUZSsoVytLKSkvbCxFZT0odStUZSsoVytLKSkvdSxBZT1sKmllLEdlPXUqRWUsQmU9cy5ub2RlU2hhcGVzW1VdLnBvaW50cyxtZTtpZihtKXt2YXIgSGU9UShBZSxHZSxVLEJlKTttZT1IZS5wYXRofWlmKFU9PT0iZWxsaXBzZSIpcy5kcmF3RWxsaXBzZVBhdGgobWV8fHQsdmUueCx2ZS55LEFlLEdlKTtlbHNlIGlmKFsicm91bmQtZGlhbW9uZCIsInJvdW5kLWhlcHRhZ29uIiwicm91bmQtaGV4YWdvbiIsInJvdW5kLW9jdGFnb24iLCJyb3VuZC1wZW50YWdvbiIsInJvdW5kLXBvbHlnb24iLCJyb3VuZC10cmlhbmdsZSIsInJvdW5kLXRhZyJdLmluY2x1ZGVzKFUpKXt2YXIgT2U9MCxldD0wLGJ0PTA7VT09PSJyb3VuZC1kaWFtb25kIj9PZT0oVGUrSytXKSoxLjQ6VT09PSJyb3VuZC1oZXB0YWdvbiI/KE9lPShUZStLK1cpKjEuMDc1LGJ0PS0oVGUvMitLK1cpLzM1KTpVPT09InJvdW5kLWhleGFnb24iP09lPShUZStLK1cpKjEuMTI6VT09PSJyb3VuZC1wZW50YWdvbiI/KE9lPShUZStLK1cpKjEuMTMsYnQ9LShUZS8yK0srVykvMTUpOlU9PT0icm91bmQtdGFnIj8oT2U9KFRlK0srVykqMS4xMixldD0oVGUvMitXK0spKi4wNyk6VT09PSJyb3VuZC10cmlhbmdsZSImJihPZT0oVGUrSytXKSooTWF0aC5QSS8yKSxidD0tKFRlK0svMitXKS9NYXRoLlBJKSxPZSE9PTAmJihpZT0obCtPZSkvbCxBZT1sKmllLFsicm91bmQtaGV4YWdvbiIsInJvdW5kLXRhZyJdLmluY2x1ZGVzKFUpfHwoRWU9KHUrT2UpL3UsR2U9dSpFZSkpLGVlPWVlPT09ImF1dG8iP2RnZShBZSxHZSk6ZWU7Zm9yKHZhciBrdD1BZS8yLHZ0PUdlLzIscnQ9ZWUrKFRlK1crSykvMix5dD1uZXcgQXJyYXkoQmUubGVuZ3RoLzIpLFVlPW5ldyBBcnJheShCZS5sZW5ndGgvMiksdHQ9MDt0dDxCZS5sZW5ndGgvMjt0dCsrKXl0W3R0XT17eDp2ZS54K2V0K2t0KkJlW3R0KjJdLHk6dmUueStidCt2dCpCZVt0dCoyKzFdfTt2YXIgaHQsRXQsZXIsZHQsSmU9eXQubGVuZ3RoO2ZvcihFdD15dFtKZS0xXSxodD0wO2h0PEplO2h0KyspZXI9eXRbaHQlSmVdLGR0PXl0WyhodCsxKSVKZV0sVWVbaHRdPVRCKEV0LGVyLGR0LHJ0KSxFdD1lcixlcj1kdDtzLmRyYXdSb3VuZFBvbHlnb25QYXRoKG1lfHx0LHZlLngrZXQsdmUueStidCxsKmllLHUqRWUsQmUsVWUpfWVsc2UgaWYoWyJyb3VuZHJlY3RhbmdsZSIsInJvdW5kLXJlY3RhbmdsZSJdLmluY2x1ZGVzKFUpKWVlPWVlPT09ImF1dG8iP1EwKEFlLEdlKTplZSxzLmRyYXdSb3VuZFJlY3RhbmdsZVBhdGgobWV8fHQsdmUueCx2ZS55LEFlLEdlLGVlKyhUZStXK0spLzIpO2Vsc2UgaWYoWyJjdXRyZWN0YW5nbGUiLCJjdXQtcmVjdGFuZ2xlIl0uaW5jbHVkZXMoVSkpZWU9ZWU9PT0iYXV0byI/dUIoKTplZSxzLmRyYXdDdXRSZWN0YW5nbGVQYXRoKG1lfHx0LHZlLngsdmUueSxBZSxHZSxudWxsLGVlKyhUZStXK0spLzQpO2Vsc2UgaWYoWyJib3R0b21yb3VuZHJlY3RhbmdsZSIsImJvdHRvbS1yb3VuZC1yZWN0YW5nbGUiXS5pbmNsdWRlcyhVKSllZT1lZT09PSJhdXRvIj9RMChBZSxHZSk6ZWUscy5kcmF3Qm90dG9tUm91bmRSZWN0YW5nbGVQYXRoKG1lfHx0LHZlLngsdmUueSxBZSxHZSxlZSsoVGUrVytLKS8yKTtlbHNlIGlmKFU9PT0iYmFycmVsIilzLmRyYXdCYXJyZWxQYXRoKG1lfHx0LHZlLngsdmUueSxBZSxHZSk7ZWxzZSBpZihVLnN0YXJ0c1dpdGgoInBvbHlnb24iKXx8WyJyaG9tYm9pZCIsInJpZ2h0LXJob21ib2lkIiwicm91bmQtdGFnIiwidGFnIiwidmVlIl0uaW5jbHVkZXMoVSkpe3ZhciBjdD0oVGUrVytLKS9sO0JlPUw2KEQ2KEJlLGN0KSkscy5kcmF3UG9seWdvblBhdGgobWV8fHQsdmUueCx2ZS55LGwsdSxCZSl9ZWxzZXt2YXIgQ3Q9KFRlK1crSykvbDtCZT1MNihENihCZSwtQ3QpKSxzLmRyYXdQb2x5Z29uUGF0aChtZXx8dCx2ZS54LHZlLnksbCx1LEJlKX1pZihtP3Quc3Ryb2tlKG1lKTp0LnN0cm9rZSgpLGo9PT0iZG91YmxlIil7dC5saW5lV2lkdGg9VGUvMzt2YXIgcHQ9dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW91dCIsbT90LnN0cm9rZShtZSk6dC5zdHJva2UoKSx0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1wdH10LnNldExpbmVEYXNoJiZ0LnNldExpbmVEYXNoKFtdKX19LCJkcmF3T3V0bGluZSIpLFBlPW8oZnVuY3Rpb24oKXtpJiZzLmRyYXdOb2RlT3ZlcmxheSh0LGUsZCxsLHUpfSwiZHJhd092ZXJsYXkiKSxJZT1vKGZ1bmN0aW9uKCl7aSYmcy5kcmF3Tm9kZVVuZGVybGF5KHQsZSxkLGwsdSl9LCJkcmF3VW5kZXJsYXkiKSwkZT1vKGZ1bmN0aW9uKCl7cy5kcmF3RWxlbWVudFRleHQodCxlLG51bGwsbil9LCJkcmF3VGV4dCIpLHllPWUucHN0eWxlKCJnaG9zdCIpLnZhbHVlPT09InllcyI7aWYoeWUpe3ZhciBYPWUucHN0eWxlKCJnaG9zdC1vZmZzZXQteCIpLnBmVmFsdWUsZmU9ZS5wc3R5bGUoImdob3N0LW9mZnNldC15IikucGZWYWx1ZSxoZT1lLnBzdHlsZSgiZ2hvc3Qtb3BhY2l0eSIpLnZhbHVlLGdlPWhlKnA7dC50cmFuc2xhdGUoWCxmZSkscSgpLENlKCksSihoZSpSKSx0ZSgpLE5lKGdlLCEwKSxIKGhlKnopLFJlKCksc2UoRCE9PTB8fGshPT0wKSxOZShnZSwhMSksa2UoZ2UpLHQudHJhbnNsYXRlKC1YLC1mZSl9bSYmdC50cmFuc2xhdGUoLWQueCwtZC55KSxJZSgpLG0mJnQudHJhbnNsYXRlKGQueCxkLnkpLHEoKSxDZSgpLEooKSx0ZSgpLE5lKHAsITApLEgoKSxSZSgpLHNlKEQhPT0wfHxrIT09MCksTmUocCwhMSksa2UoKSxtJiZ0LnRyYW5zbGF0ZSgtZC54LC1kLnkpLCRlKCksUGUoKSxyJiZ0LnRyYW5zbGF0ZSh4LngxLHgueTEpfX07ZzFlPW8oZnVuY3Rpb24oZSl7aWYoIVsib3ZlcmxheSIsInVuZGVybGF5Il0uaW5jbHVkZXMoZSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0YXRlIik7cmV0dXJuIGZ1bmN0aW9uKHIsbixpLGEscyl7dmFyIGw9dGhpcztpZihuLnZpc2libGUoKSl7dmFyIHU9bi5wc3R5bGUoIiIuY29uY2F0KGUsIi1wYWRkaW5nIikpLnBmVmFsdWUsaD1uLnBzdHlsZSgiIi5jb25jYXQoZSwiLW9wYWNpdHkiKSkudmFsdWUsZj1uLnBzdHlsZSgiIi5jb25jYXQoZSwiLWNvbG9yIikpLnZhbHVlLGQ9bi5wc3R5bGUoIiIuY29uY2F0KGUsIi1zaGFwZSIpKS52YWx1ZSxwPW4ucHN0eWxlKCIiLmNvbmNhdChlLCItY29ybmVyLXJhZGl1cyIpKS52YWx1ZTtpZihoPjApe2lmKGk9aXx8bi5wb3NpdGlvbigpLGE9PW51bGx8fHM9PW51bGwpe3ZhciBtPW4ucGFkZGluZygpO2E9bi53aWR0aCgpKzIqbSxzPW4uaGVpZ2h0KCkrMiptfWwuY29sb3JGaWxsU3R5bGUocixmWzBdLGZbMV0sZlsyXSxoKSxsLm5vZGVTaGFwZXNbZF0uZHJhdyhyLGkueCxpLnksYSt1KjIscyt1KjIscCksci5maWxsKCl9fX19LCJkcmF3Tm9kZU92ZXJsYXlVbmRlcmxheSIpO0kxLmRyYXdOb2RlT3ZlcmxheT1nMWUoIm92ZXJsYXkiKTtJMS5kcmF3Tm9kZVVuZGVybGF5PWcxZSgidW5kZXJsYXkiKTtJMS5oYXNQaWU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9dFswXSx0Ll9wcml2YXRlLmhhc1BpZX07STEuZHJhd1BpZT1mdW5jdGlvbih0LGUscixuKXtlPWVbMF0sbj1ufHxlLnBvc2l0aW9uKCk7dmFyIGk9ZS5jeSgpLnN0eWxlKCksYT1lLnBzdHlsZSgicGllLXNpemUiKSxzPW4ueCxsPW4ueSx1PWUud2lkdGgoKSxoPWUuaGVpZ2h0KCksZj1NYXRoLm1pbih1LGgpLzIsZD0wLHA9dGhpcy51c2VQYXRocygpO3AmJihzPTAsbD0wKSxhLnVuaXRzPT09IiUiP2Y9ZiphLnBmVmFsdWU6YS5wZlZhbHVlIT09dm9pZCAwJiYoZj1hLnBmVmFsdWUvMik7Zm9yKHZhciBtPTE7bTw9aS5waWVCYWNrZ3JvdW5kTjttKyspe3ZhciBnPWUucHN0eWxlKCJwaWUtIittKyItYmFja2dyb3VuZC1zaXplIikudmFsdWUseT1lLnBzdHlsZSgicGllLSIrbSsiLWJhY2tncm91bmQtY29sb3IiKS52YWx1ZSx2PWUucHN0eWxlKCJwaWUtIittKyItYmFja2dyb3VuZC1vcGFjaXR5IikudmFsdWUqcix4PWcvMTAwO3grZD4xJiYoeD0xLWQpO3ZhciBiPTEuNSpNYXRoLlBJKzIqTWF0aC5QSSpkLHc9MipNYXRoLlBJKngsXz1iK3c7Zz09PTB8fGQ+PTF8fGQreD4xfHwodC5iZWdpblBhdGgoKSx0Lm1vdmVUbyhzLGwpLHQuYXJjKHMsbCxmLGIsXyksdC5jbG9zZVBhdGgoKSx0aGlzLmNvbG9yRmlsbFN0eWxlKHQseVswXSx5WzFdLHlbMl0sdiksdC5maWxsKCksZCs9eCl9fTtUbz17fSxVZXQ9MTAwO1RvLmdldFBpeGVsUmF0aW89ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRhdGEuY29udGV4dHNbMF07aWYodGhpcy5mb3JjZWRQaXhlbFJhdGlvIT1udWxsKXJldHVybiB0aGlzLmZvcmNlZFBpeGVsUmF0aW87dmFyIGU9dGhpcy5jeS53aW5kb3coKSxyPXQuYmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8dC53ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx0Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHQubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx0Lm9CYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx0LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW98fDE7cmV0dXJuKGUuZGV2aWNlUGl4ZWxSYXRpb3x8MSkvcn07VG8ucGFpbnRDYWNoZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5wYWludENhY2hlcz10aGlzLnBhaW50Q2FjaGVzfHxbXSxyPSEwLG4saT0wO2k8ZS5sZW5ndGg7aSsrKWlmKG49ZVtpXSxuLmNvbnRleHQ9PT10KXtyPSExO2JyZWFrfXJldHVybiByJiYobj17Y29udGV4dDp0fSxlLnB1c2gobikpLG59O1RvLmNyZWF0ZUdyYWRpZW50U3R5bGVGb3I9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSxzPXRoaXMudXNlUGF0aHMoKSxsPXIucHN0eWxlKGUrIi1ncmFkaWVudC1zdG9wLWNvbG9ycyIpLnZhbHVlLHU9ci5wc3R5bGUoZSsiLWdyYWRpZW50LXN0b3AtcG9zaXRpb25zIikucGZWYWx1ZTtpZihuPT09InJhZGlhbC1ncmFkaWVudCIpaWYoci5pc0VkZ2UoKSl7dmFyIGg9ci5zb3VyY2VFbmRwb2ludCgpLGY9ci50YXJnZXRFbmRwb2ludCgpLGQ9ci5taWRwb2ludCgpLHA9SzAoaCxkKSxtPUswKGYsZCk7YT10LmNyZWF0ZVJhZGlhbEdyYWRpZW50KGQueCxkLnksMCxkLngsZC55LE1hdGgubWF4KHAsbSkpfWVsc2V7dmFyIGc9cz97eDowLHk6MH06ci5wb3NpdGlvbigpLHk9ci5wYWRkZWRXaWR0aCgpLHY9ci5wYWRkZWRIZWlnaHQoKTthPXQuY3JlYXRlUmFkaWFsR3JhZGllbnQoZy54LGcueSwwLGcueCxnLnksTWF0aC5tYXgoeSx2KSl9ZWxzZSBpZihyLmlzRWRnZSgpKXt2YXIgeD1yLnNvdXJjZUVuZHBvaW50KCksYj1yLnRhcmdldEVuZHBvaW50KCk7YT10LmNyZWF0ZUxpbmVhckdyYWRpZW50KHgueCx4LnksYi54LGIueSl9ZWxzZXt2YXIgdz1zP3t4OjAseTowfTpyLnBvc2l0aW9uKCksXz1yLnBhZGRlZFdpZHRoKCksVD1yLnBhZGRlZEhlaWdodCgpLEU9Xy8yLEw9VC8yLFM9ci5wc3R5bGUoImJhY2tncm91bmQtZ3JhZGllbnQtZGlyZWN0aW9uIikudmFsdWU7c3dpdGNoKFMpe2Nhc2UidG8tYm90dG9tIjphPXQuY3JlYXRlTGluZWFyR3JhZGllbnQody54LHcueS1MLHcueCx3LnkrTCk7YnJlYWs7Y2FzZSJ0by10b3AiOmE9dC5jcmVhdGVMaW5lYXJHcmFkaWVudCh3Lngsdy55K0wsdy54LHcueS1MKTticmVhaztjYXNlInRvLWxlZnQiOmE9dC5jcmVhdGVMaW5lYXJHcmFkaWVudCh3LngrRSx3Lnksdy54LUUsdy55KTticmVhaztjYXNlInRvLXJpZ2h0IjphPXQuY3JlYXRlTGluZWFyR3JhZGllbnQody54LUUsdy55LHcueCtFLHcueSk7YnJlYWs7Y2FzZSJ0by1ib3R0b20tcmlnaHQiOmNhc2UidG8tcmlnaHQtYm90dG9tIjphPXQuY3JlYXRlTGluZWFyR3JhZGllbnQody54LUUsdy55LUwsdy54K0Usdy55K0wpO2JyZWFrO2Nhc2UidG8tdG9wLXJpZ2h0IjpjYXNlInRvLXJpZ2h0LXRvcCI6YT10LmNyZWF0ZUxpbmVhckdyYWRpZW50KHcueC1FLHcueStMLHcueCtFLHcueS1MKTticmVhaztjYXNlInRvLWJvdHRvbS1sZWZ0IjpjYXNlInRvLWxlZnQtYm90dG9tIjphPXQuY3JlYXRlTGluZWFyR3JhZGllbnQody54K0Usdy55LUwsdy54LUUsdy55K0wpO2JyZWFrO2Nhc2UidG8tdG9wLWxlZnQiOmNhc2UidG8tbGVmdC10b3AiOmE9dC5jcmVhdGVMaW5lYXJHcmFkaWVudCh3LngrRSx3LnkrTCx3LngtRSx3LnktTCk7YnJlYWt9fWlmKCFhKXJldHVybiBudWxsO2Zvcih2YXIgQT11Lmxlbmd0aD09PWwubGVuZ3RoLEk9bC5sZW5ndGgsRD0wO0Q8STtEKyspYS5hZGRDb2xvclN0b3AoQT91W0RdOkQvKEktMSksInJnYmEoIitsW0RdWzBdKyIsIitsW0RdWzFdKyIsIitsW0RdWzJdKyIsIitpKyIpIik7cmV0dXJuIGF9O1RvLmdyYWRpZW50RmlsbFN0eWxlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuY3JlYXRlR3JhZGllbnRTdHlsZUZvcih0LCJiYWNrZ3JvdW5kIixlLHIsbik7aWYoIWkpcmV0dXJuIG51bGw7dC5maWxsU3R5bGU9aX07VG8uY29sb3JGaWxsU3R5bGU9ZnVuY3Rpb24odCxlLHIsbixpKXt0LmZpbGxTdHlsZT0icmdiYSgiK2UrIiwiK3IrIiwiK24rIiwiK2krIikifTtUby5lbGVGaWxsU3R5bGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUucHN0eWxlKCJiYWNrZ3JvdW5kLWZpbGwiKS52YWx1ZTtpZihuPT09ImxpbmVhci1ncmFkaWVudCJ8fG49PT0icmFkaWFsLWdyYWRpZW50Iil0aGlzLmdyYWRpZW50RmlsbFN0eWxlKHQsZSxuLHIpO2Vsc2V7dmFyIGk9ZS5wc3R5bGUoImJhY2tncm91bmQtY29sb3IiKS52YWx1ZTt0aGlzLmNvbG9yRmlsbFN0eWxlKHQsaVswXSxpWzFdLGlbMl0scil9fTtUby5ncmFkaWVudFN0cm9rZVN0eWxlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuY3JlYXRlR3JhZGllbnRTdHlsZUZvcih0LCJsaW5lIixlLHIsbik7aWYoIWkpcmV0dXJuIG51bGw7dC5zdHJva2VTdHlsZT1pfTtUby5jb2xvclN0cm9rZVN0eWxlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dC5zdHJva2VTdHlsZT0icmdiYSgiK2UrIiwiK3IrIiwiK24rIiwiK2krIikifTtUby5lbGVTdHJva2VTdHlsZT1mdW5jdGlvbih0LGUscil7dmFyIG49ZS5wc3R5bGUoImxpbmUtZmlsbCIpLnZhbHVlO2lmKG49PT0ibGluZWFyLWdyYWRpZW50Inx8bj09PSJyYWRpYWwtZ3JhZGllbnQiKXRoaXMuZ3JhZGllbnRTdHJva2VTdHlsZSh0LGUsbixyKTtlbHNle3ZhciBpPWUucHN0eWxlKCJsaW5lLWNvbG9yIikudmFsdWU7dGhpcy5jb2xvclN0cm9rZVN0eWxlKHQsaVswXSxpWzFdLGlbMl0scil9fTtUby5tYXRjaENhbnZhc1NpemU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUuZGF0YSxuPWUuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLGk9blsyXSxhPW5bM10scz1lLmdldFBpeGVsUmF0aW8oKSxsPWUubW90aW9uQmx1clB4UmF0aW87KHQ9PT1lLmRhdGEuYnVmZmVyQ2FudmFzZXNbZS5NT1RJT05CTFVSX0JVRkZFUl9OT0RFXXx8dD09PWUuZGF0YS5idWZmZXJDYW52YXNlc1tlLk1PVElPTkJMVVJfQlVGRkVSX0RSQUddKSYmKHM9bCk7dmFyIHU9aSpzLGg9YSpzLGY7aWYoISh1PT09ZS5jYW52YXNXaWR0aCYmaD09PWUuY2FudmFzSGVpZ2h0KSl7ZS5mb250Q2FjaGVzPW51bGw7dmFyIGQ9ci5jYW52YXNDb250YWluZXI7ZC5zdHlsZS53aWR0aD1pKyJweCIsZC5zdHlsZS5oZWlnaHQ9YSsicHgiO2Zvcih2YXIgcD0wO3A8ZS5DQU5WQVNfTEFZRVJTO3ArKylmPXIuY2FudmFzZXNbcF0sZi53aWR0aD11LGYuaGVpZ2h0PWgsZi5zdHlsZS53aWR0aD1pKyJweCIsZi5zdHlsZS5oZWlnaHQ9YSsicHgiO2Zvcih2YXIgcD0wO3A8ZS5CVUZGRVJfQ09VTlQ7cCsrKWY9ci5idWZmZXJDYW52YXNlc1twXSxmLndpZHRoPXUsZi5oZWlnaHQ9aCxmLnN0eWxlLndpZHRoPWkrInB4IixmLnN0eWxlLmhlaWdodD1hKyJweCI7ZS50ZXh0dXJlTXVsdD0xLHM8PTEmJihmPXIuYnVmZmVyQ2FudmFzZXNbZS5URVhUVVJFX0JVRkZFUl0sZS50ZXh0dXJlTXVsdD0yLGYud2lkdGg9dSplLnRleHR1cmVNdWx0LGYuaGVpZ2h0PWgqZS50ZXh0dXJlTXVsdCksZS5jYW52YXNXaWR0aD11LGUuY2FudmFzSGVpZ2h0PWh9fTtUby5yZW5kZXJUbz1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlbmRlcih7Zm9yY2VkQ29udGV4dDp0LGZvcmNlZFpvb206ZSxmb3JjZWRQYW46cixkcmF3QWxsTGF5ZXJzOiEwLGZvcmNlZFB4UmF0aW86bn0pfTtUby5yZW5kZXI9ZnVuY3Rpb24odCl7dD10fHxzZ2UoKTt2YXIgZT10LmZvcmNlZENvbnRleHQscj10LmRyYXdBbGxMYXllcnMsbj10LmRyYXdPbmx5Tm9kZUxheWVyLGk9dC5mb3JjZWRab29tLGE9dC5mb3JjZWRQYW4scz10aGlzLGw9dC5mb3JjZWRQeFJhdGlvPT09dm9pZCAwP3RoaXMuZ2V0UGl4ZWxSYXRpbygpOnQuZm9yY2VkUHhSYXRpbyx1PXMuY3ksaD1zLmRhdGEsZj1oLmNhbnZhc05lZWRzUmVkcmF3LGQ9cy50ZXh0dXJlT25WaWV3cG9ydCYmIWUmJihzLnBpbmNoaW5nfHxzLmhvdmVyRGF0YS5kcmFnZ2luZ3x8cy5zd2lwZVBhbm5pbmd8fHMuZGF0YS53aGVlbFpvb21pbmcpLHA9dC5tb3Rpb25CbHVyIT09dm9pZCAwP3QubW90aW9uQmx1cjpzLm1vdGlvbkJsdXIsbT1zLm1vdGlvbkJsdXJQeFJhdGlvLGc9dS5oYXNDb21wb3VuZE5vZGVzKCkseT1zLmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMsdj0hIShzLmhvdmVyRGF0YS5zZWxlY3Rpbmd8fHMudG91Y2hEYXRhLnNlbGVjdGluZyk7cD1wJiYhZSYmcy5tb3Rpb25CbHVyRW5hYmxlZCYmIXY7dmFyIHg9cDtlfHwocy5wcmV2UHhSYXRpbyE9PWwmJihzLmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZSgpLHMubWF0Y2hDYW52YXNTaXplKHMuY29udGFpbmVyKSxzLnJlZHJhd0hpbnQoImVsZXMiLCEwKSxzLnJlZHJhd0hpbnQoImRyYWciLCEwKSkscy5wcmV2UHhSYXRpbz1sKSwhZSYmcy5tb3Rpb25CbHVyVGltZW91dCYmY2xlYXJUaW1lb3V0KHMubW90aW9uQmx1clRpbWVvdXQpLHAmJihzLm1iRnJhbWVzPT1udWxsJiYocy5tYkZyYW1lcz0wKSxzLm1iRnJhbWVzKysscy5tYkZyYW1lczwzJiYoeD0hMSkscy5tYkZyYW1lcz5zLm1pbk1iTG93UXVhbEZyYW1lcyYmKHMubW90aW9uQmx1clB4UmF0aW89cy5tYlB4UkJsdXJyeSkpLHMuY2xlYXJpbmdNb3Rpb25CbHVyJiYocy5tb3Rpb25CbHVyUHhSYXRpbz0xKSxzLnRleHR1cmVEcmF3TGFzdEZyYW1lJiYhZCYmKGZbcy5OT0RFXT0hMCxmW3MuU0VMRUNUX0JPWF09ITApO3ZhciBiPXUuc3R5bGUoKSx3PXUuem9vbSgpLF89aSE9PXZvaWQgMD9pOncsVD11LnBhbigpLEU9e3g6VC54LHk6VC55fSxMPXt6b29tOncscGFuOnt4OlQueCx5OlQueX19LFM9cy5wcmV2Vmlld3BvcnQsQT1TPT09dm9pZCAwfHxMLnpvb20hPT1TLnpvb218fEwucGFuLnghPT1TLnBhbi54fHxMLnBhbi55IT09Uy5wYW4ueTshQSYmISh5JiYhZykmJihzLm1vdGlvbkJsdXJQeFJhdGlvPTEpLGEmJihFPWEpLF8qPWwsRS54Kj1sLEUueSo9bDt2YXIgST1zLmdldENhY2hlZFpTb3J0ZWRFbGVzKCk7ZnVuY3Rpb24gRChjZSx0ZSxOZSxzZSxrZSl7dmFyIFJlPWNlLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbjtjZS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW91dCIscy5jb2xvckZpbGxTdHlsZShjZSwyNTUsMjU1LDI1NSxzLm1vdGlvbkJsdXJUcmFuc3BhcmVuY3kpLGNlLmZpbGxSZWN0KHRlLE5lLHNlLGtlKSxjZS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249UmV9byhELCJtYmNsZWFyIik7ZnVuY3Rpb24gayhjZSx0ZSl7dmFyIE5lLHNlLGtlLFJlOyFzLmNsZWFyaW5nTW90aW9uQmx1ciYmKGNlPT09aC5idWZmZXJDb250ZXh0c1tzLk1PVElPTkJMVVJfQlVGRkVSX05PREVdfHxjZT09PWguYnVmZmVyQ29udGV4dHNbcy5NT1RJT05CTFVSX0JVRkZFUl9EUkFHXSk/KE5lPXt4OlQueCptLHk6VC55Km19LHNlPXcqbSxrZT1zLmNhbnZhc1dpZHRoKm0sUmU9cy5jYW52YXNIZWlnaHQqbSk6KE5lPUUsc2U9XyxrZT1zLmNhbnZhc1dpZHRoLFJlPXMuY2FudmFzSGVpZ2h0KSxjZS5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHRlPT09Im1vdGlvbkJsdXIiP0QoY2UsMCwwLGtlLFJlKTohZSYmKHRlPT09dm9pZCAwfHx0ZSkmJmNlLmNsZWFyUmVjdCgwLDAsa2UsUmUpLHJ8fChjZS50cmFuc2xhdGUoTmUueCxOZS55KSxjZS5zY2FsZShzZSxzZSkpLGEmJmNlLnRyYW5zbGF0ZShhLngsYS55KSxpJiZjZS5zY2FsZShpLGkpfWlmKG8oaywic2V0Q29udGV4dFRyYW5zZm9ybSIpLGR8fChzLnRleHR1cmVEcmF3TGFzdEZyYW1lPSExKSxkKXtpZihzLnRleHR1cmVEcmF3TGFzdEZyYW1lPSEwLCFzLnRleHR1cmVDYWNoZSl7cy50ZXh0dXJlQ2FjaGU9e30scy50ZXh0dXJlQ2FjaGUuYmI9dS5tdXRhYmxlRWxlbWVudHMoKS5ib3VuZGluZ0JveCgpLHMudGV4dHVyZUNhY2hlLnRleHR1cmU9cy5kYXRhLmJ1ZmZlckNhbnZhc2VzW3MuVEVYVFVSRV9CVUZGRVJdO3ZhciBSPXMuZGF0YS5idWZmZXJDb250ZXh0c1tzLlRFWFRVUkVfQlVGRkVSXTtSLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksUi5jbGVhclJlY3QoMCwwLHMuY2FudmFzV2lkdGgqcy50ZXh0dXJlTXVsdCxzLmNhbnZhc0hlaWdodCpzLnRleHR1cmVNdWx0KSxzLnJlbmRlcih7Zm9yY2VkQ29udGV4dDpSLGRyYXdPbmx5Tm9kZUxheWVyOiEwLGZvcmNlZFB4UmF0aW86bCpzLnRleHR1cmVNdWx0fSk7dmFyIEw9cy50ZXh0dXJlQ2FjaGUudmlld3BvcnQ9e3pvb206dS56b29tKCkscGFuOnUucGFuKCksd2lkdGg6cy5jYW52YXNXaWR0aCxoZWlnaHQ6cy5jYW52YXNIZWlnaHR9O0wubXBhbj17eDooMC1MLnBhbi54KS9MLnpvb20seTooMC1MLnBhbi55KS9MLnpvb219fWZbcy5EUkFHXT0hMSxmW3MuTk9ERV09ITE7dmFyIEM9aC5jb250ZXh0c1tzLk5PREVdLE89cy50ZXh0dXJlQ2FjaGUudGV4dHVyZSxMPXMudGV4dHVyZUNhY2hlLnZpZXdwb3J0O0Muc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxwP0QoQywwLDAsTC53aWR0aCxMLmhlaWdodCk6Qy5jbGVhclJlY3QoMCwwLEwud2lkdGgsTC5oZWlnaHQpO3ZhciBOPWIuY29yZSgib3V0c2lkZS10ZXh0dXJlLWJnLWNvbG9yIikudmFsdWUsUD1iLmNvcmUoIm91dHNpZGUtdGV4dHVyZS1iZy1vcGFjaXR5IikudmFsdWU7cy5jb2xvckZpbGxTdHlsZShDLE5bMF0sTlsxXSxOWzJdLFApLEMuZmlsbFJlY3QoMCwwLEwud2lkdGgsTC5oZWlnaHQpO3ZhciB3PXUuem9vbSgpO2soQywhMSksQy5jbGVhclJlY3QoTC5tcGFuLngsTC5tcGFuLnksTC53aWR0aC9MLnpvb20vbCxMLmhlaWdodC9MLnpvb20vbCksQy5kcmF3SW1hZ2UoTyxMLm1wYW4ueCxMLm1wYW4ueSxMLndpZHRoL0wuem9vbS9sLEwuaGVpZ2h0L0wuem9vbS9sKX1lbHNlIHMudGV4dHVyZU9uVmlld3BvcnQmJiFlJiYocy50ZXh0dXJlQ2FjaGU9bnVsbCk7dmFyIEY9dS5leHRlbnQoKSxCPXMucGluY2hpbmd8fHMuaG92ZXJEYXRhLmRyYWdnaW5nfHxzLnN3aXBlUGFubmluZ3x8cy5kYXRhLndoZWVsWm9vbWluZ3x8cy5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzfHxzLmN5LmFuaW1hdGVkKCksRz1zLmhpZGVFZGdlc09uVmlld3BvcnQmJkIsej1bXTtpZih6W3MuTk9ERV09IWZbcy5OT0RFXSYmcCYmIXMuY2xlYXJlZEZvck1vdGlvbkJsdXJbcy5OT0RFXXx8cy5jbGVhcmluZ01vdGlvbkJsdXIseltzLk5PREVdJiYocy5jbGVhcmVkRm9yTW90aW9uQmx1cltzLk5PREVdPSEwKSx6W3MuRFJBR109IWZbcy5EUkFHXSYmcCYmIXMuY2xlYXJlZEZvck1vdGlvbkJsdXJbcy5EUkFHXXx8cy5jbGVhcmluZ01vdGlvbkJsdXIseltzLkRSQUddJiYocy5jbGVhcmVkRm9yTW90aW9uQmx1cltzLkRSQUddPSEwKSxmW3MuTk9ERV18fHJ8fG58fHpbcy5OT0RFXSl7dmFyIFc9cCYmIXpbcy5OT0RFXSYmbSE9PTEsQz1lfHwoVz9zLmRhdGEuYnVmZmVyQ29udGV4dHNbcy5NT1RJT05CTFVSX0JVRkZFUl9OT0RFXTpoLmNvbnRleHRzW3MuTk9ERV0pLFo9cCYmIVc/Im1vdGlvbkJsdXIiOnZvaWQgMDtrKEMsWiksRz9zLmRyYXdDYWNoZWROb2RlcyhDLEkubm9uZHJhZyxsLEYpOnMuZHJhd0xheWVyZWRFbGVtZW50cyhDLEkubm9uZHJhZyxsLEYpLHMuZGVidWcmJnMuZHJhd0RlYnVnUG9pbnRzKEMsSS5ub25kcmFnKSwhciYmIXAmJihmW3MuTk9ERV09ITEpfWlmKCFuJiYoZltzLkRSQUddfHxyfHx6W3MuRFJBR10pKXt2YXIgVz1wJiYheltzLkRSQUddJiZtIT09MSxDPWV8fChXP3MuZGF0YS5idWZmZXJDb250ZXh0c1tzLk1PVElPTkJMVVJfQlVGRkVSX0RSQUddOmguY29udGV4dHNbcy5EUkFHXSk7ayhDLHAmJiFXPyJtb3Rpb25CbHVyIjp2b2lkIDApLEc/cy5kcmF3Q2FjaGVkTm9kZXMoQyxJLmRyYWcsbCxGKTpzLmRyYXdDYWNoZWRFbGVtZW50cyhDLEkuZHJhZyxsLEYpLHMuZGVidWcmJnMuZHJhd0RlYnVnUG9pbnRzKEMsSS5kcmFnKSwhciYmIXAmJihmW3MuRFJBR109ITEpfWlmKHMuc2hvd0Zwc3x8IW4mJmZbcy5TRUxFQ1RfQk9YXSYmIXIpe3ZhciBDPWV8fGguY29udGV4dHNbcy5TRUxFQ1RfQk9YXTtpZihrKEMpLHMuc2VsZWN0aW9uWzRdPT0xJiYocy5ob3ZlckRhdGEuc2VsZWN0aW5nfHxzLnRvdWNoRGF0YS5zZWxlY3RpbmcpKXt2YXIgdz1zLmN5Lnpvb20oKSxqPWIuY29yZSgic2VsZWN0aW9uLWJveC1ib3JkZXItd2lkdGgiKS52YWx1ZS93O0MubGluZVdpZHRoPWosQy5maWxsU3R5bGU9InJnYmEoIitiLmNvcmUoInNlbGVjdGlvbi1ib3gtY29sb3IiKS52YWx1ZVswXSsiLCIrYi5jb3JlKCJzZWxlY3Rpb24tYm94LWNvbG9yIikudmFsdWVbMV0rIiwiK2IuY29yZSgic2VsZWN0aW9uLWJveC1jb2xvciIpLnZhbHVlWzJdKyIsIitiLmNvcmUoInNlbGVjdGlvbi1ib3gtb3BhY2l0eSIpLnZhbHVlKyIpIixDLmZpbGxSZWN0KHMuc2VsZWN0aW9uWzBdLHMuc2VsZWN0aW9uWzFdLHMuc2VsZWN0aW9uWzJdLXMuc2VsZWN0aW9uWzBdLHMuc2VsZWN0aW9uWzNdLXMuc2VsZWN0aW9uWzFdKSxqPjAmJihDLnN0cm9rZVN0eWxlPSJyZ2JhKCIrYi5jb3JlKCJzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvciIpLnZhbHVlWzBdKyIsIitiLmNvcmUoInNlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yIikudmFsdWVbMV0rIiwiK2IuY29yZSgic2VsZWN0aW9uLWJveC1ib3JkZXItY29sb3IiKS52YWx1ZVsyXSsiLCIrYi5jb3JlKCJzZWxlY3Rpb24tYm94LW9wYWNpdHkiKS52YWx1ZSsiKSIsQy5zdHJva2VSZWN0KHMuc2VsZWN0aW9uWzBdLHMuc2VsZWN0aW9uWzFdLHMuc2VsZWN0aW9uWzJdLXMuc2VsZWN0aW9uWzBdLHMuc2VsZWN0aW9uWzNdLXMuc2VsZWN0aW9uWzFdKSl9aWYoaC5iZ0FjdGl2ZVBvc2lzdGlvbiYmIXMuaG92ZXJEYXRhLnNlbGVjdGluZyl7dmFyIHc9cy5jeS56b29tKCksb2U9aC5iZ0FjdGl2ZVBvc2lzdGlvbjtDLmZpbGxTdHlsZT0icmdiYSgiK2IuY29yZSgiYWN0aXZlLWJnLWNvbG9yIikudmFsdWVbMF0rIiwiK2IuY29yZSgiYWN0aXZlLWJnLWNvbG9yIikudmFsdWVbMV0rIiwiK2IuY29yZSgiYWN0aXZlLWJnLWNvbG9yIikudmFsdWVbMl0rIiwiK2IuY29yZSgiYWN0aXZlLWJnLW9wYWNpdHkiKS52YWx1ZSsiKSIsQy5iZWdpblBhdGgoKSxDLmFyYyhvZS54LG9lLnksYi5jb3JlKCJhY3RpdmUtYmctc2l6ZSIpLnBmVmFsdWUvdywwLDIqTWF0aC5QSSksQy5maWxsKCl9dmFyIEs9cy5sYXN0UmVkcmF3VGltZTtpZihzLnNob3dGcHMmJkspe0s9TWF0aC5yb3VuZChLKTt2YXIgZWU9TWF0aC5yb3VuZCgxZTMvSyk7Qy5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLEMuZmlsbFN0eWxlPSJyZ2JhKDI1NSwgMCwgMCwgMC43NSkiLEMuc3Ryb2tlU3R5bGU9InJnYmEoMjU1LCAwLCAwLCAwLjc1KSIsQy5saW5lV2lkdGg9MSxDLmZpbGxUZXh0KCIxIGZyYW1lID0gIitLKyIgbXMgPSAiK2VlKyIgZnBzIiwwLDIwKTt2YXIgSj02MDtDLnN0cm9rZVJlY3QoMCwzMCwyNTAsMjApLEMuZmlsbFJlY3QoMCwzMCwyNTAqTWF0aC5taW4oZWUvSiwxKSwyMCl9cnx8KGZbcy5TRUxFQ1RfQk9YXT0hMSl9aWYocCYmbSE9PTEpe3ZhciBIPWguY29udGV4dHNbcy5OT0RFXSxxPXMuZGF0YS5idWZmZXJDYW52YXNlc1tzLk1PVElPTkJMVVJfQlVGRkVSX05PREVdLFE9aC5jb250ZXh0c1tzLkRSQUddLGFlPXMuZGF0YS5idWZmZXJDYW52YXNlc1tzLk1PVElPTkJMVVJfQlVGRkVSX0RSQUddLHVlPW8oZnVuY3Rpb24odGUsTmUsc2Upe3RlLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksc2V8fCF4P3RlLmNsZWFyUmVjdCgwLDAscy5jYW52YXNXaWR0aCxzLmNhbnZhc0hlaWdodCk6RCh0ZSwwLDAscy5jYW52YXNXaWR0aCxzLmNhbnZhc0hlaWdodCk7dmFyIGtlPW07dGUuZHJhd0ltYWdlKE5lLDAsMCxzLmNhbnZhc1dpZHRoKmtlLHMuY2FudmFzSGVpZ2h0KmtlLDAsMCxzLmNhbnZhc1dpZHRoLHMuY2FudmFzSGVpZ2h0KX0sImRyYXdNb3Rpb25CbHVyIik7KGZbcy5OT0RFXXx8eltzLk5PREVdKSYmKHVlKEgscSx6W3MuTk9ERV0pLGZbcy5OT0RFXT0hMSksKGZbcy5EUkFHXXx8eltzLkRSQUddKSYmKHVlKFEsYWUseltzLkRSQUddKSxmW3MuRFJBR109ITEpfXMucHJldlZpZXdwb3J0PUwscy5jbGVhcmluZ01vdGlvbkJsdXImJihzLmNsZWFyaW5nTW90aW9uQmx1cj0hMSxzLm1vdGlvbkJsdXJDbGVhcmVkPSEwLHMubW90aW9uQmx1cj0hMCkscCYmKHMubW90aW9uQmx1clRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe3MubW90aW9uQmx1clRpbWVvdXQ9bnVsbCxzLmNsZWFyZWRGb3JNb3Rpb25CbHVyW3MuTk9ERV09ITEscy5jbGVhcmVkRm9yTW90aW9uQmx1cltzLkRSQUddPSExLHMubW90aW9uQmx1cj0hMSxzLmNsZWFyaW5nTW90aW9uQmx1cj0hZCxzLm1iRnJhbWVzPTAsZltzLk5PREVdPSEwLGZbcy5EUkFHXT0hMCxzLnJlZHJhdygpfSxVZXQpKSxlfHx1LmVtaXQoInJlbmRlciIpfTtHZj17fTtHZi5kcmF3UG9seWdvblBhdGg9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBzPW4vMixsPWkvMjt0LmJlZ2luUGF0aCYmdC5iZWdpblBhdGgoKSx0Lm1vdmVUbyhlK3MqYVswXSxyK2wqYVsxXSk7Zm9yKHZhciB1PTE7dTxhLmxlbmd0aC8yO3UrKyl0LmxpbmVUbyhlK3MqYVt1KjJdLHIrbCphW3UqMisxXSk7dC5jbG9zZVBhdGgoKX07R2YuZHJhd1JvdW5kUG9seWdvblBhdGg9ZnVuY3Rpb24odCxlLHIsbixpLGEscyl7cy5mb3JFYWNoKGZ1bmN0aW9uKGwpe3JldHVybiBpMWUodCxsKX0pLHQuY2xvc2VQYXRoKCl9O0dmLmRyYXdSb3VuZFJlY3RhbmdsZVBhdGg9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBzPW4vMixsPWkvMix1PWE9PT0iYXV0byI/UTAobixpKTpNYXRoLm1pbihhLGwscyk7dC5iZWdpblBhdGgmJnQuYmVnaW5QYXRoKCksdC5tb3ZlVG8oZSxyLWwpLHQuYXJjVG8oZStzLHItbCxlK3Mscix1KSx0LmFyY1RvKGUrcyxyK2wsZSxyK2wsdSksdC5hcmNUbyhlLXMscitsLGUtcyxyLHUpLHQuYXJjVG8oZS1zLHItbCxlLHItbCx1KSx0LmxpbmVUbyhlLHItbCksdC5jbG9zZVBhdGgoKX07R2YuZHJhd0JvdHRvbVJvdW5kUmVjdGFuZ2xlUGF0aD1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIHM9bi8yLGw9aS8yLHU9YT09PSJhdXRvIj9RMChuLGkpOmE7dC5iZWdpblBhdGgmJnQuYmVnaW5QYXRoKCksdC5tb3ZlVG8oZSxyLWwpLHQubGluZVRvKGUrcyxyLWwpLHQubGluZVRvKGUrcyxyKSx0LmFyY1RvKGUrcyxyK2wsZSxyK2wsdSksdC5hcmNUbyhlLXMscitsLGUtcyxyLHUpLHQubGluZVRvKGUtcyxyLWwpLHQubGluZVRvKGUsci1sKSx0LmNsb3NlUGF0aCgpfTtHZi5kcmF3Q3V0UmVjdGFuZ2xlUGF0aD1mdW5jdGlvbih0LGUscixuLGksYSxzKXt2YXIgbD1uLzIsdT1pLzIsaD1zPT09ImF1dG8iP3VCKCk6czt0LmJlZ2luUGF0aCYmdC5iZWdpblBhdGgoKSx0Lm1vdmVUbyhlLWwraCxyLXUpLHQubGluZVRvKGUrbC1oLHItdSksdC5saW5lVG8oZStsLHItdStoKSx0LmxpbmVUbyhlK2wscit1LWgpLHQubGluZVRvKGUrbC1oLHIrdSksdC5saW5lVG8oZS1sK2gscit1KSx0LmxpbmVUbyhlLWwscit1LWgpLHQubGluZVRvKGUtbCxyLXUraCksdC5jbG9zZVBhdGgoKX07R2YuZHJhd0JhcnJlbFBhdGg9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1uLzIscz1pLzIsbD1lLWEsdT1lK2EsaD1yLXMsZj1yK3MsZD1HUChuLGkpLHA9ZC53aWR0aE9mZnNldCxtPWQuaGVpZ2h0T2Zmc2V0LGc9ZC5jdHJsUHRPZmZzZXRQY3QqcDt0LmJlZ2luUGF0aCYmdC5iZWdpblBhdGgoKSx0Lm1vdmVUbyhsLGgrbSksdC5saW5lVG8obCxmLW0pLHQucXVhZHJhdGljQ3VydmVUbyhsK2csZixsK3AsZiksdC5saW5lVG8odS1wLGYpLHQucXVhZHJhdGljQ3VydmVUbyh1LWcsZix1LGYtbSksdC5saW5lVG8odSxoK20pLHQucXVhZHJhdGljQ3VydmVUbyh1LWcsaCx1LXAsaCksdC5saW5lVG8obCtwLGgpLHQucXVhZHJhdGljQ3VydmVUbyhsK2csaCxsLGgrbSksdC5jbG9zZVBhdGgoKX07Rm1lPU1hdGguc2luKDApLHptZT1NYXRoLmNvcygwKSxaUD17fSxKUD17fSx5MWU9TWF0aC5QSS80MDtmb3IoVjA9MCpNYXRoLlBJO1YwPDIqTWF0aC5QSTtWMCs9eTFlKVpQW1YwXT1NYXRoLnNpbihWMCksSlBbVjBdPU1hdGguY29zKFYwKTtHZi5kcmF3RWxsaXBzZVBhdGg9ZnVuY3Rpb24odCxlLHIsbixpKXtpZih0LmJlZ2luUGF0aCYmdC5iZWdpblBhdGgoKSx0LmVsbGlwc2UpdC5lbGxpcHNlKGUscixuLzIsaS8yLDAsMCwyKk1hdGguUEkpO2Vsc2UgZm9yKHZhciBhLHMsbD1uLzIsdT1pLzIsaD0wKk1hdGguUEk7aDwyKk1hdGguUEk7aCs9eTFlKWE9ZS1sKlpQW2hdKkZtZStsKkpQW2hdKnptZSxzPXIrdSpKUFtoXSpGbWUrdSpaUFtoXSp6bWUsaD09PTA/dC5tb3ZlVG8oYSxzKTp0LmxpbmVUbyhhLHMpO3QuY2xvc2VQYXRoKCl9O3diPXt9O3diLmNyZWF0ZUJ1ZmZlcj1mdW5jdGlvbih0LGUpe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybiByLndpZHRoPXQsci5oZWlnaHQ9ZSxbcixyLmdldENvbnRleHQoIjJkIildfTt3Yi5idWZmZXJDYW52YXNJbWFnZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN5LHI9ZS5tdXRhYmxlRWxlbWVudHMoKSxuPXIuYm91bmRpbmdCb3goKSxpPXRoaXMuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLGE9dC5mdWxsP01hdGguY2VpbChuLncpOmlbMl0scz10LmZ1bGw/TWF0aC5jZWlsKG4uaCk6aVszXSxsPXh0KHQubWF4V2lkdGgpfHx4dCh0Lm1heEhlaWdodCksdT10aGlzLmdldFBpeGVsUmF0aW8oKSxoPTE7aWYodC5zY2FsZSE9PXZvaWQgMClhKj10LnNjYWxlLHMqPXQuc2NhbGUsaD10LnNjYWxlO2Vsc2UgaWYobCl7dmFyIGY9MS8wLGQ9MS8wO3h0KHQubWF4V2lkdGgpJiYoZj1oKnQubWF4V2lkdGgvYSkseHQodC5tYXhIZWlnaHQpJiYoZD1oKnQubWF4SGVpZ2h0L3MpLGg9TWF0aC5taW4oZixkKSxhKj1oLHMqPWh9bHx8KGEqPXUscyo9dSxoKj11KTt2YXIgcD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtwLndpZHRoPWEscC5oZWlnaHQ9cyxwLnN0eWxlLndpZHRoPWErInB4IixwLnN0eWxlLmhlaWdodD1zKyJweCI7dmFyIG09cC5nZXRDb250ZXh0KCIyZCIpO2lmKGE+MCYmcz4wKXttLmNsZWFyUmVjdCgwLDAsYSxzKSxtLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0ic291cmNlLW92ZXIiO3ZhciBnPXRoaXMuZ2V0Q2FjaGVkWlNvcnRlZEVsZXMoKTtpZih0LmZ1bGwpbS50cmFuc2xhdGUoLW4ueDEqaCwtbi55MSpoKSxtLnNjYWxlKGgsaCksdGhpcy5kcmF3RWxlbWVudHMobSxnKSxtLnNjYWxlKDEvaCwxL2gpLG0udHJhbnNsYXRlKG4ueDEqaCxuLnkxKmgpO2Vsc2V7dmFyIHk9ZS5wYW4oKSx2PXt4OnkueCpoLHk6eS55Kmh9O2gqPWUuem9vbSgpLG0udHJhbnNsYXRlKHYueCx2LnkpLG0uc2NhbGUoaCxoKSx0aGlzLmRyYXdFbGVtZW50cyhtLGcpLG0uc2NhbGUoMS9oLDEvaCksbS50cmFuc2xhdGUoLXYueCwtdi55KX10LmJnJiYobS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW92ZXIiLG0uZmlsbFN0eWxlPXQuYmcsbS5yZWN0KDAsMCxhLHMpLG0uZmlsbCgpKX1yZXR1cm4gcH07byhIZXQsImI2NFRvQmxvYiIpO28oR21lLCJiNjRVcmlUb0I2NCIpO28odjFlLCJvdXRwdXQiKTt3Yi5wbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHYxZSh0LHRoaXMuYnVmZmVyQ2FudmFzSW1hZ2UodCksImltYWdlL3BuZyIpfTt3Yi5qcGc9ZnVuY3Rpb24odCl7cmV0dXJuIHYxZSh0LHRoaXMuYnVmZmVyQ2FudmFzSW1hZ2UodCksImltYWdlL2pwZWciKX07eDFlPXt9O3gxZS5ub2RlU2hhcGVJbXBsPWZ1bmN0aW9uKHQsZSxyLG4saSxhLHMsbCl7c3dpdGNoKHQpe2Nhc2UiZWxsaXBzZSI6cmV0dXJuIHRoaXMuZHJhd0VsbGlwc2VQYXRoKGUscixuLGksYSk7Y2FzZSJwb2x5Z29uIjpyZXR1cm4gdGhpcy5kcmF3UG9seWdvblBhdGgoZSxyLG4saSxhLHMpO2Nhc2Uicm91bmQtcG9seWdvbiI6cmV0dXJuIHRoaXMuZHJhd1JvdW5kUG9seWdvblBhdGgoZSxyLG4saSxhLHMsbCk7Y2FzZSJyb3VuZHJlY3RhbmdsZSI6Y2FzZSJyb3VuZC1yZWN0YW5nbGUiOnJldHVybiB0aGlzLmRyYXdSb3VuZFJlY3RhbmdsZVBhdGgoZSxyLG4saSxhLGwpO2Nhc2UiY3V0cmVjdGFuZ2xlIjpjYXNlImN1dC1yZWN0YW5nbGUiOnJldHVybiB0aGlzLmRyYXdDdXRSZWN0YW5nbGVQYXRoKGUscixuLGksYSxzLGwpO2Nhc2UiYm90dG9tcm91bmRyZWN0YW5nbGUiOmNhc2UiYm90dG9tLXJvdW5kLXJlY3RhbmdsZSI6cmV0dXJuIHRoaXMuZHJhd0JvdHRvbVJvdW5kUmVjdGFuZ2xlUGF0aChlLHIsbixpLGEsbCk7Y2FzZSJiYXJyZWwiOnJldHVybiB0aGlzLmRyYXdCYXJyZWxQYXRoKGUscixuLGksYSl9fTtXZXQ9YjFlLEtyPWIxZS5wcm90b3R5cGU7S3IuQ0FOVkFTX0xBWUVSUz0zO0tyLlNFTEVDVF9CT1g9MDtLci5EUkFHPTE7S3IuTk9ERT0yO0tyLkJVRkZFUl9DT1VOVD0zO0tyLlRFWFRVUkVfQlVGRkVSPTA7S3IuTU9USU9OQkxVUl9CVUZGRVJfTk9ERT0xO0tyLk1PVElPTkJMVVJfQlVGRkVSX0RSQUc9MjtvKGIxZSwiQ2FudmFzUmVuZGVyZXIiKTtLci5yZWRyYXdIaW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcztzd2l0Y2godCl7Y2FzZSJlbGVzIjpyLmRhdGEuY2FudmFzTmVlZHNSZWRyYXdbS3IuTk9ERV09ZTticmVhaztjYXNlImRyYWciOnIuZGF0YS5jYW52YXNOZWVkc1JlZHJhd1tLci5EUkFHXT1lO2JyZWFrO2Nhc2Uic2VsZWN0IjpyLmRhdGEuY2FudmFzTmVlZHNSZWRyYXdbS3IuU0VMRUNUX0JPWF09ZTticmVha319O1lldD10eXBlb2YgUGF0aDJEPCJ1IjtLci5wYXRoMmRFbmFibGVkPWZ1bmN0aW9uKHQpe2lmKHQ9PT12b2lkIDApcmV0dXJuIHRoaXMucGF0aHNFbmFibGVkO3RoaXMucGF0aHNFbmFibGVkPSEhdH07S3IudXNlUGF0aHM9ZnVuY3Rpb24oKXtyZXR1cm4gWWV0JiZ0aGlzLnBhdGhzRW5hYmxlZH07S3Iuc2V0SW1nU21vb3RoaW5nPWZ1bmN0aW9uKHQsZSl7dC5pbWFnZVNtb290aGluZ0VuYWJsZWQhPW51bGw/dC5pbWFnZVNtb290aGluZ0VuYWJsZWQ9ZToodC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQ9ZSx0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZD1lLHQubXNJbWFnZVNtb290aGluZ0VuYWJsZWQ9ZSl9O0tyLmdldEltZ1Ntb290aGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdC5pbWFnZVNtb290aGluZ0VuYWJsZWQhPW51bGw/dC5pbWFnZVNtb290aGluZ0VuYWJsZWQ6dC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWR8fHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkfHx0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkfTtLci5tYWtlT2Zmc2NyZWVuQ2FudmFzPWZ1bmN0aW9uKHQsZSl7dmFyIHI7aWYoKHR5cGVvZiBPZmZzY3JlZW5DYW52YXM+InUiPyJ1bmRlZmluZWQiOktpKE9mZnNjcmVlbkNhbnZhcykpIT09InVuZGVmaW5lZCIpcj1uZXcgT2Zmc2NyZWVuQ2FudmFzKHQsZSk7ZWxzZXt2YXIgbj10aGlzLmN5LndpbmRvdygpLGk9bi5kb2N1bWVudDtyPWkuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksci53aWR0aD10LHIuaGVpZ2h0PWV9cmV0dXJuIHJ9O1twMWUscnUsbGgsRUIscnAsSTEsVG8sR2Ysd2IseDFlXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lyKEtyLHQpfSk7cWV0PVt7bmFtZToibnVsbCIsaW1wbDp0MWV9LHtuYW1lOiJiYXNlIixpbXBsOmgxZX0se25hbWU6ImNhbnZhcyIsaW1wbDpXZXR9XSxYZXQ9W3t0eXBlOiJsYXlvdXQiLGV4dGVuc2lvbnM6WkplfSx7dHlwZToicmVuZGVyZXIiLGV4dGVuc2lvbnM6cWV0fV0sdzFlPXt9LFQxZT17fTtvKGsxZSwic2V0RXh0ZW5zaW9uIik7byhFMWUsImdldEV4dGVuc2lvbiIpO28oamV0LCJzZXRNb2R1bGUiKTtvKEtldCwiZ2V0TW9kdWxlIik7ZUI9byhmdW5jdGlvbigpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0yKXJldHVybiBFMWUuYXBwbHkobnVsbCxhcmd1bWVudHMpO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0zKXJldHVybiBrMWUuYXBwbHkobnVsbCxhcmd1bWVudHMpO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT00KXJldHVybiBLZXQuYXBwbHkobnVsbCxhcmd1bWVudHMpO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT01KXJldHVybiBqZXQuYXBwbHkobnVsbCxhcmd1bWVudHMpO2RpKCJJbnZhbGlkIGV4dGVuc2lvbiBhY2Nlc3Mgc3ludGF4Iil9LCJleHRlbnNpb24iKTtmYi5wcm90b3R5cGUuZXh0ZW5zaW9uPWVCO1hldC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZXh0ZW5zaW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2sxZSh0LnR5cGUsZS5uYW1lLGUuaW1wbCl9KX0pO1MxZT1vKGZ1bmN0aW9uIHQoKXtpZighKHRoaXMgaW5zdGFuY2VvZiB0KSlyZXR1cm4gbmV3IHQ7dGhpcy5sZW5ndGg9MH0sIlN0eWxlc2hlZXQiKSxlcD1TMWUucHJvdG90eXBlO2VwLmluc3RhbmNlU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuInN0eWxlc2hlZXQifTtlcC5zZWxlY3Rvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxlbmd0aCsrO3JldHVybiB0aGlzW2VdPXtzZWxlY3Rvcjp0LHByb3BlcnRpZXM6W119LHRoaXN9O2VwLmNzcz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoLTE7aWYoWnQodCkpdGhpc1tyXS5wcm9wZXJ0aWVzLnB1c2goe25hbWU6dCx2YWx1ZTplfSk7ZWxzZSBpZihVcih0KSlmb3IodmFyIG49dCxpPU9iamVjdC5rZXlzKG4pLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIHM9aVthXSxsPW5bc107aWYobCE9bnVsbCl7dmFyIHU9VWEucHJvcGVydGllc1tzXXx8VWEucHJvcGVydGllc1tCNihzKV07aWYodSE9bnVsbCl7dmFyIGg9dS5uYW1lLGY9bDt0aGlzW3JdLnByb3BlcnRpZXMucHVzaCh7bmFtZTpoLHZhbHVlOmZ9KX19fXJldHVybiB0aGlzfTtlcC5zdHlsZT1lcC5jc3M7ZXAuZ2VuZXJhdGVTdHlsZT1mdW5jdGlvbih0KXt2YXIgZT1uZXcgVWEodCk7cmV0dXJuIHRoaXMuYXBwZW5kVG9TdHlsZShlKX07ZXAuYXBwZW5kVG9TdHlsZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIHI9dGhpc1tlXSxuPXIuc2VsZWN0b3IsaT1yLnByb3BlcnRpZXM7dC5zZWxlY3RvcihuKTtmb3IodmFyIGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIHM9aVthXTt0LmNzcyhzLm5hbWUscy52YWx1ZSl9fXJldHVybiB0fTtRZXQ9IjMuMzAuMiIsZmw9byhmdW5jdGlvbihlKXtpZihlPT09dm9pZCAwJiYoZT17fSksVXIoZSkpcmV0dXJuIG5ldyBmYihlKTtpZihadChlKSlyZXR1cm4gZUIuYXBwbHkoZUIsYXJndW1lbnRzKX0sImN5dG9zY2FwZSIpO2ZsLnVzZT1mdW5jdGlvbih0KXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIGUudW5zaGlmdChmbCksdC5hcHBseShudWxsLGUpLHRoaXN9O2ZsLndhcm5pbmdzPWZ1bmN0aW9uKHQpe3JldHVybiBpZ2UodCl9O2ZsLnZlcnNpb249UWV0O2ZsLnN0eWxlc2hlZXQ9ZmwuU3R5bGVzaGVldD1TMWV9KTt2YXIgQUI9RWkoKFRiLENCKT0+eyJ1c2Ugc3RyaWN0IjtvKGZ1bmN0aW9uKGUscil7dHlwZW9mIFRiPT0ib2JqZWN0IiYmdHlwZW9mIENCPT0ib2JqZWN0Ij9DQi5leHBvcnRzPXIoKTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShbXSxyKTp0eXBlb2YgVGI9PSJvYmplY3QiP1RiLmxheW91dEJhc2U9cigpOmUubGF5b3V0QmFzZT1yKCl9LCJ3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIpKFRiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Z1bmN0aW9uIHIobil7aWYoZVtuXSlyZXR1cm4gZVtuXS5leHBvcnRzO3ZhciBpPWVbbl09e2k6bixsOiExLGV4cG9ydHM6e319O3JldHVybiB0W25dLmNhbGwoaS5leHBvcnRzLGksaS5leHBvcnRzLHIpLGkubD0hMCxpLmV4cG9ydHN9cmV0dXJuIG8ociwiX193ZWJwYWNrX3JlcXVpcmVfXyIpLHIubT10LHIuYz1lLHIuaT1mdW5jdGlvbihuKXtyZXR1cm4gbn0sci5kPWZ1bmN0aW9uKG4saSxhKXtyLm8obixpKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KG4saSx7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0OmF9KX0sci5uPWZ1bmN0aW9uKG4pe3ZhciBpPW4mJm4uX19lc01vZHVsZT9vKGZ1bmN0aW9uKCl7cmV0dXJuIG4uZGVmYXVsdH0sImdldERlZmF1bHQiKTpvKGZ1bmN0aW9uKCl7cmV0dXJuIG59LCJnZXRNb2R1bGVFeHBvcnRzIik7cmV0dXJuIHIuZChpLCJhIixpKSxpfSxyLm89ZnVuY3Rpb24obixpKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4saSl9LHIucD0iIixyKHIucz0yNil9KFtmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt9byhuLCJMYXlvdXRDb25zdGFudHMiKSxuLlFVQUxJVFk9MSxuLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRD0hMSxuLkRFRkFVTFRfSU5DUkVNRU5UQUw9ITEsbi5ERUZBVUxUX0FOSU1BVElPTl9PTl9MQVlPVVQ9ITAsbi5ERUZBVUxUX0FOSU1BVElPTl9EVVJJTkdfTEFZT1VUPSExLG4uREVGQVVMVF9BTklNQVRJT05fUEVSSU9EPTUwLG4uREVGQVVMVF9VTklGT1JNX0xFQUZfTk9ERV9TSVpFUz0hMSxuLkRFRkFVTFRfR1JBUEhfTUFSR0lOPTE1LG4uTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTPSExLG4uU0lNUExFX05PREVfU0laRT00MCxuLlNJTVBMRV9OT0RFX0hBTEZfU0laRT1uLlNJTVBMRV9OT0RFX1NJWkUvMixuLkVNUFRZX0NPTVBPVU5EX05PREVfU0laRT00MCxuLk1JTl9FREdFX0xFTkdUSD0xLG4uV09STERfQk9VTkRBUlk9MWU2LG4uSU5JVElBTF9XT1JMRF9CT1VOREFSWT1uLldPUkxEX0JPVU5EQVJZLzFlMyxuLldPUkxEX0NFTlRFUl9YPTEyMDAsbi5XT1JMRF9DRU5URVJfWT05MDAsdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigyKSxpPXIoOCksYT1yKDkpO2Z1bmN0aW9uIHModSxoLGYpe24uY2FsbCh0aGlzLGYpLHRoaXMuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0PSExLHRoaXMudkdyYXBoT2JqZWN0PWYsdGhpcy5iZW5kcG9pbnRzPVtdLHRoaXMuc291cmNlPXUsdGhpcy50YXJnZXQ9aH1vKHMsIkxFZGdlIikscy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSk7Zm9yKHZhciBsIGluIG4pc1tsXT1uW2xdO3MucHJvdG90eXBlLmdldFNvdXJjZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNvdXJjZX0scy5wcm90b3R5cGUuZ2V0VGFyZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFyZ2V0fSxzLnByb3RvdHlwZS5pc0ludGVyR3JhcGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0ludGVyR3JhcGh9LHMucHJvdG90eXBlLmdldExlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0scy5wcm90b3R5cGUuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0fSxzLnByb3RvdHlwZS5nZXRCZW5kcG9pbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYmVuZHBvaW50c30scy5wcm90b3R5cGUuZ2V0TGNhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGNhfSxzLnByb3RvdHlwZS5nZXRTb3VyY2VJbkxjYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNvdXJjZUluTGNhfSxzLnByb3RvdHlwZS5nZXRUYXJnZXRJbkxjYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRhcmdldEluTGNhfSxzLnByb3RvdHlwZS5nZXRPdGhlckVuZD1mdW5jdGlvbih1KXtpZih0aGlzLnNvdXJjZT09PXUpcmV0dXJuIHRoaXMudGFyZ2V0O2lmKHRoaXMudGFyZ2V0PT09dSlyZXR1cm4gdGhpcy5zb3VyY2U7dGhyb3ciTm9kZSBpcyBub3QgaW5jaWRlbnQgd2l0aCB0aGlzIGVkZ2UifSxzLnByb3RvdHlwZS5nZXRPdGhlckVuZEluR3JhcGg9ZnVuY3Rpb24odSxoKXtmb3IodmFyIGY9dGhpcy5nZXRPdGhlckVuZCh1KSxkPWguZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0Um9vdCgpOzspe2lmKGYuZ2V0T3duZXIoKT09aClyZXR1cm4gZjtpZihmLmdldE93bmVyKCk9PWQpYnJlYWs7Zj1mLmdldE93bmVyKCkuZ2V0UGFyZW50KCl9cmV0dXJuIG51bGx9LHMucHJvdG90eXBlLnVwZGF0ZUxlbmd0aD1mdW5jdGlvbigpe3ZhciB1PW5ldyBBcnJheSg0KTt0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldD1pLmdldEludGVyc2VjdGlvbih0aGlzLnRhcmdldC5nZXRSZWN0KCksdGhpcy5zb3VyY2UuZ2V0UmVjdCgpLHUpLHRoaXMuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0fHwodGhpcy5sZW5ndGhYPXVbMF0tdVsyXSx0aGlzLmxlbmd0aFk9dVsxXS11WzNdLE1hdGguYWJzKHRoaXMubGVuZ3RoWCk8MSYmKHRoaXMubGVuZ3RoWD1hLnNpZ24odGhpcy5sZW5ndGhYKSksTWF0aC5hYnModGhpcy5sZW5ndGhZKTwxJiYodGhpcy5sZW5ndGhZPWEuc2lnbih0aGlzLmxlbmd0aFkpKSx0aGlzLmxlbmd0aD1NYXRoLnNxcnQodGhpcy5sZW5ndGhYKnRoaXMubGVuZ3RoWCt0aGlzLmxlbmd0aFkqdGhpcy5sZW5ndGhZKSl9LHMucHJvdG90eXBlLnVwZGF0ZUxlbmd0aFNpbXBsZT1mdW5jdGlvbigpe3RoaXMubGVuZ3RoWD10aGlzLnRhcmdldC5nZXRDZW50ZXJYKCktdGhpcy5zb3VyY2UuZ2V0Q2VudGVyWCgpLHRoaXMubGVuZ3RoWT10aGlzLnRhcmdldC5nZXRDZW50ZXJZKCktdGhpcy5zb3VyY2UuZ2V0Q2VudGVyWSgpLE1hdGguYWJzKHRoaXMubGVuZ3RoWCk8MSYmKHRoaXMubGVuZ3RoWD1hLnNpZ24odGhpcy5sZW5ndGhYKSksTWF0aC5hYnModGhpcy5sZW5ndGhZKTwxJiYodGhpcy5sZW5ndGhZPWEuc2lnbih0aGlzLmxlbmd0aFkpKSx0aGlzLmxlbmd0aD1NYXRoLnNxcnQodGhpcy5sZW5ndGhYKnRoaXMubGVuZ3RoWCt0aGlzLmxlbmd0aFkqdGhpcy5sZW5ndGhZKX0sdC5leHBvcnRzPXN9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihpKXt0aGlzLnZHcmFwaE9iamVjdD1pfW8obiwiTEdyYXBoT2JqZWN0IiksdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigyKSxpPXIoMTApLGE9cigxMykscz1yKDApLGw9cigxNiksdT1yKDQpO2Z1bmN0aW9uIGgoZCxwLG0sZyl7bT09bnVsbCYmZz09bnVsbCYmKGc9cCksbi5jYWxsKHRoaXMsZyksZC5ncmFwaE1hbmFnZXIhPW51bGwmJihkPWQuZ3JhcGhNYW5hZ2VyKSx0aGlzLmVzdGltYXRlZFNpemU9aS5NSU5fVkFMVUUsdGhpcy5pbmNsdXNpb25UcmVlRGVwdGg9aS5NQVhfVkFMVUUsdGhpcy52R3JhcGhPYmplY3Q9Zyx0aGlzLmVkZ2VzPVtdLHRoaXMuZ3JhcGhNYW5hZ2VyPWQsbSE9bnVsbCYmcCE9bnVsbD90aGlzLnJlY3Q9bmV3IGEocC54LHAueSxtLndpZHRoLG0uaGVpZ2h0KTp0aGlzLnJlY3Q9bmV3IGF9byhoLCJMTm9kZSIpLGgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpO2Zvcih2YXIgZiBpbiBuKWhbZl09bltmXTtoLnByb3RvdHlwZS5nZXRFZGdlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzfSxoLnByb3RvdHlwZS5nZXRDaGlsZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkfSxoLnByb3RvdHlwZS5nZXRPd25lcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyfSxoLnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3Qud2lkdGh9LGgucHJvdG90eXBlLnNldFdpZHRoPWZ1bmN0aW9uKGQpe3RoaXMucmVjdC53aWR0aD1kfSxoLnByb3RvdHlwZS5nZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LmhlaWdodH0saC5wcm90b3R5cGUuc2V0SGVpZ2h0PWZ1bmN0aW9uKGQpe3RoaXMucmVjdC5oZWlnaHQ9ZH0saC5wcm90b3R5cGUuZ2V0Q2VudGVyWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueCt0aGlzLnJlY3Qud2lkdGgvMn0saC5wcm90b3R5cGUuZ2V0Q2VudGVyWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueSt0aGlzLnJlY3QuaGVpZ2h0LzJ9LGgucHJvdG90eXBlLmdldENlbnRlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgdSh0aGlzLnJlY3QueCt0aGlzLnJlY3Qud2lkdGgvMix0aGlzLnJlY3QueSt0aGlzLnJlY3QuaGVpZ2h0LzIpfSxoLnByb3RvdHlwZS5nZXRMb2NhdGlvbj1mdW5jdGlvbigpe3JldHVybiBuZXcgdSh0aGlzLnJlY3QueCx0aGlzLnJlY3QueSl9LGgucHJvdG90eXBlLmdldFJlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0fSxoLnByb3RvdHlwZS5nZXREaWFnb25hbD1mdW5jdGlvbigpe3JldHVybiBNYXRoLnNxcnQodGhpcy5yZWN0LndpZHRoKnRoaXMucmVjdC53aWR0aCt0aGlzLnJlY3QuaGVpZ2h0KnRoaXMucmVjdC5oZWlnaHQpfSxoLnByb3RvdHlwZS5nZXRIYWxmVGhlRGlhZ29uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMucmVjdC5oZWlnaHQqdGhpcy5yZWN0LmhlaWdodCt0aGlzLnJlY3Qud2lkdGgqdGhpcy5yZWN0LndpZHRoKS8yfSxoLnByb3RvdHlwZS5zZXRSZWN0PWZ1bmN0aW9uKGQscCl7dGhpcy5yZWN0Lng9ZC54LHRoaXMucmVjdC55PWQueSx0aGlzLnJlY3Qud2lkdGg9cC53aWR0aCx0aGlzLnJlY3QuaGVpZ2h0PXAuaGVpZ2h0fSxoLnByb3RvdHlwZS5zZXRDZW50ZXI9ZnVuY3Rpb24oZCxwKXt0aGlzLnJlY3QueD1kLXRoaXMucmVjdC53aWR0aC8yLHRoaXMucmVjdC55PXAtdGhpcy5yZWN0LmhlaWdodC8yfSxoLnByb3RvdHlwZS5zZXRMb2NhdGlvbj1mdW5jdGlvbihkLHApe3RoaXMucmVjdC54PWQsdGhpcy5yZWN0Lnk9cH0saC5wcm90b3R5cGUubW92ZUJ5PWZ1bmN0aW9uKGQscCl7dGhpcy5yZWN0LngrPWQsdGhpcy5yZWN0LnkrPXB9LGgucHJvdG90eXBlLmdldEVkZ2VMaXN0VG9Ob2RlPWZ1bmN0aW9uKGQpe3ZhciBwPVtdLG0sZz10aGlzO3JldHVybiBnLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oeSl7aWYoeS50YXJnZXQ9PWQpe2lmKHkuc291cmNlIT1nKXRocm93IkluY29ycmVjdCBlZGdlIHNvdXJjZSEiO3AucHVzaCh5KX19KSxwfSxoLnByb3RvdHlwZS5nZXRFZGdlc0JldHdlZW49ZnVuY3Rpb24oZCl7dmFyIHA9W10sbSxnPXRoaXM7cmV0dXJuIGcuZWRnZXMuZm9yRWFjaChmdW5jdGlvbih5KXtpZighKHkuc291cmNlPT1nfHx5LnRhcmdldD09ZykpdGhyb3ciSW5jb3JyZWN0IGVkZ2Ugc291cmNlIGFuZC9vciB0YXJnZXQiOyh5LnRhcmdldD09ZHx8eS5zb3VyY2U9PWQpJiZwLnB1c2goeSl9KSxwfSxoLnByb3RvdHlwZS5nZXROZWlnaGJvcnNMaXN0PWZ1bmN0aW9uKCl7dmFyIGQ9bmV3IFNldCxwPXRoaXM7cmV0dXJuIHAuZWRnZXMuZm9yRWFjaChmdW5jdGlvbihtKXtpZihtLnNvdXJjZT09cClkLmFkZChtLnRhcmdldCk7ZWxzZXtpZihtLnRhcmdldCE9cCl0aHJvdyJJbmNvcnJlY3QgaW5jaWRlbmN5ISI7ZC5hZGQobS5zb3VyY2UpfX0pLGR9LGgucHJvdG90eXBlLndpdGhDaGlsZHJlbj1mdW5jdGlvbigpe3ZhciBkPW5ldyBTZXQscCxtO2lmKGQuYWRkKHRoaXMpLHRoaXMuY2hpbGQhPW51bGwpZm9yKHZhciBnPXRoaXMuY2hpbGQuZ2V0Tm9kZXMoKSx5PTA7eTxnLmxlbmd0aDt5KyspcD1nW3ldLG09cC53aXRoQ2hpbGRyZW4oKSxtLmZvckVhY2goZnVuY3Rpb24odil7ZC5hZGQodil9KTtyZXR1cm4gZH0saC5wcm90b3R5cGUuZ2V0Tm9PZkNoaWxkcmVuPWZ1bmN0aW9uKCl7dmFyIGQ9MCxwO2lmKHRoaXMuY2hpbGQ9PW51bGwpZD0xO2Vsc2UgZm9yKHZhciBtPXRoaXMuY2hpbGQuZ2V0Tm9kZXMoKSxnPTA7ZzxtLmxlbmd0aDtnKyspcD1tW2ddLGQrPXAuZ2V0Tm9PZkNoaWxkcmVuKCk7cmV0dXJuIGQ9PTAmJihkPTEpLGR9LGgucHJvdG90eXBlLmdldEVzdGltYXRlZFNpemU9ZnVuY3Rpb24oKXtpZih0aGlzLmVzdGltYXRlZFNpemU9PWkuTUlOX1ZBTFVFKXRocm93ImFzc2VydCBmYWlsZWQiO3JldHVybiB0aGlzLmVzdGltYXRlZFNpemV9LGgucHJvdG90eXBlLmNhbGNFc3RpbWF0ZWRTaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGQ9PW51bGw/dGhpcy5lc3RpbWF0ZWRTaXplPSh0aGlzLnJlY3Qud2lkdGgrdGhpcy5yZWN0LmhlaWdodCkvMjoodGhpcy5lc3RpbWF0ZWRTaXplPXRoaXMuY2hpbGQuY2FsY0VzdGltYXRlZFNpemUoKSx0aGlzLnJlY3Qud2lkdGg9dGhpcy5lc3RpbWF0ZWRTaXplLHRoaXMucmVjdC5oZWlnaHQ9dGhpcy5lc3RpbWF0ZWRTaXplLHRoaXMuZXN0aW1hdGVkU2l6ZSl9LGgucHJvdG90eXBlLnNjYXR0ZXI9ZnVuY3Rpb24oKXt2YXIgZCxwLG09LXMuSU5JVElBTF9XT1JMRF9CT1VOREFSWSxnPXMuSU5JVElBTF9XT1JMRF9CT1VOREFSWTtkPXMuV09STERfQ0VOVEVSX1grbC5uZXh0RG91YmxlKCkqKGctbSkrbTt2YXIgeT0tcy5JTklUSUFMX1dPUkxEX0JPVU5EQVJZLHY9cy5JTklUSUFMX1dPUkxEX0JPVU5EQVJZO3A9cy5XT1JMRF9DRU5URVJfWStsLm5leHREb3VibGUoKSoodi15KSt5LHRoaXMucmVjdC54PWQsdGhpcy5yZWN0Lnk9cH0saC5wcm90b3R5cGUudXBkYXRlQm91bmRzPWZ1bmN0aW9uKCl7aWYodGhpcy5nZXRDaGlsZCgpPT1udWxsKXRocm93ImFzc2VydCBmYWlsZWQiO2lmKHRoaXMuZ2V0Q2hpbGQoKS5nZXROb2RlcygpLmxlbmd0aCE9MCl7dmFyIGQ9dGhpcy5nZXRDaGlsZCgpO2lmKGQudXBkYXRlQm91bmRzKCEwKSx0aGlzLnJlY3QueD1kLmdldExlZnQoKSx0aGlzLnJlY3QueT1kLmdldFRvcCgpLHRoaXMuc2V0V2lkdGgoZC5nZXRSaWdodCgpLWQuZ2V0TGVmdCgpKSx0aGlzLnNldEhlaWdodChkLmdldEJvdHRvbSgpLWQuZ2V0VG9wKCkpLHMuTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTKXt2YXIgcD1kLmdldFJpZ2h0KCktZC5nZXRMZWZ0KCksbT1kLmdldEJvdHRvbSgpLWQuZ2V0VG9wKCk7dGhpcy5sYWJlbFdpZHRoPnAmJih0aGlzLnJlY3QueC09KHRoaXMubGFiZWxXaWR0aC1wKS8yLHRoaXMuc2V0V2lkdGgodGhpcy5sYWJlbFdpZHRoKSksdGhpcy5sYWJlbEhlaWdodD5tJiYodGhpcy5sYWJlbFBvcz09ImNlbnRlciI/dGhpcy5yZWN0LnktPSh0aGlzLmxhYmVsSGVpZ2h0LW0pLzI6dGhpcy5sYWJlbFBvcz09InRvcCImJih0aGlzLnJlY3QueS09dGhpcy5sYWJlbEhlaWdodC1tKSx0aGlzLnNldEhlaWdodCh0aGlzLmxhYmVsSGVpZ2h0KSl9fX0saC5wcm90b3R5cGUuZ2V0SW5jbHVzaW9uVHJlZURlcHRoPWZ1bmN0aW9uKCl7aWYodGhpcy5pbmNsdXNpb25UcmVlRGVwdGg9PWkuTUFYX1ZBTFVFKXRocm93ImFzc2VydCBmYWlsZWQiO3JldHVybiB0aGlzLmluY2x1c2lvblRyZWVEZXB0aH0saC5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGQpe3ZhciBwPXRoaXMucmVjdC54O3A+cy5XT1JMRF9CT1VOREFSWT9wPXMuV09STERfQk9VTkRBUlk6cDwtcy5XT1JMRF9CT1VOREFSWSYmKHA9LXMuV09STERfQk9VTkRBUlkpO3ZhciBtPXRoaXMucmVjdC55O20+cy5XT1JMRF9CT1VOREFSWT9tPXMuV09STERfQk9VTkRBUlk6bTwtcy5XT1JMRF9CT1VOREFSWSYmKG09LXMuV09STERfQk9VTkRBUlkpO3ZhciBnPW5ldyB1KHAsbSkseT1kLmludmVyc2VUcmFuc2Zvcm1Qb2ludChnKTt0aGlzLnNldExvY2F0aW9uKHkueCx5LnkpfSxoLnByb3RvdHlwZS5nZXRMZWZ0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC54fSxoLnByb3RvdHlwZS5nZXRSaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueCt0aGlzLnJlY3Qud2lkdGh9LGgucHJvdG90eXBlLmdldFRvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueX0saC5wcm90b3R5cGUuZ2V0Qm90dG9tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC55K3RoaXMucmVjdC5oZWlnaHR9LGgucHJvdG90eXBlLmdldFBhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyPT1udWxsP251bGw6dGhpcy5vd25lci5nZXRQYXJlbnQoKX0sdC5leHBvcnRzPWh9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihpLGEpe2k9PW51bGwmJmE9PW51bGw/KHRoaXMueD0wLHRoaXMueT0wKToodGhpcy54PWksdGhpcy55PWEpfW8obiwiUG9pbnREIiksbi5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnh9LG4ucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55fSxuLnByb3RvdHlwZS5zZXRYPWZ1bmN0aW9uKGkpe3RoaXMueD1pfSxuLnByb3RvdHlwZS5zZXRZPWZ1bmN0aW9uKGkpe3RoaXMueT1pfSxuLnByb3RvdHlwZS5nZXREaWZmZXJlbmNlPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcgRGltZW5zaW9uRCh0aGlzLngtaS54LHRoaXMueS1pLnkpfSxuLnByb3RvdHlwZS5nZXRDb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMueCx0aGlzLnkpfSxuLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMueCs9aS53aWR0aCx0aGlzLnkrPWkuaGVpZ2h0LHRoaXN9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMiksaT1yKDEwKSxhPXIoMCkscz1yKDYpLGw9cigzKSx1PXIoMSksaD1yKDEzKSxmPXIoMTIpLGQ9cigxMSk7ZnVuY3Rpb24gcChnLHksdil7bi5jYWxsKHRoaXMsdiksdGhpcy5lc3RpbWF0ZWRTaXplPWkuTUlOX1ZBTFVFLHRoaXMubWFyZ2luPWEuREVGQVVMVF9HUkFQSF9NQVJHSU4sdGhpcy5lZGdlcz1bXSx0aGlzLm5vZGVzPVtdLHRoaXMuaXNDb25uZWN0ZWQ9ITEsdGhpcy5wYXJlbnQ9Zyx5IT1udWxsJiZ5IGluc3RhbmNlb2Ygcz90aGlzLmdyYXBoTWFuYWdlcj15OnkhPW51bGwmJnkgaW5zdGFuY2VvZiBMYXlvdXQmJih0aGlzLmdyYXBoTWFuYWdlcj15LmdyYXBoTWFuYWdlcil9byhwLCJMR3JhcGgiKSxwLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKTtmb3IodmFyIG0gaW4gbilwW21dPW5bbV07cC5wcm90b3R5cGUuZ2V0Tm9kZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2Rlc30scC5wcm90b3R5cGUuZ2V0RWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlc30scC5wcm90b3R5cGUuZ2V0R3JhcGhNYW5hZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyfSxwLnByb3RvdHlwZS5nZXRQYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnR9LHAucHJvdG90eXBlLmdldExlZnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZWZ0fSxwLnByb3RvdHlwZS5nZXRSaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJpZ2h0fSxwLnByb3RvdHlwZS5nZXRUb3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b3B9LHAucHJvdG90eXBlLmdldEJvdHRvbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJvdHRvbX0scC5wcm90b3R5cGUuaXNDb25uZWN0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0Nvbm5lY3RlZH0scC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcseSx2KXtpZih5PT1udWxsJiZ2PT1udWxsKXt2YXIgeD1nO2lmKHRoaXMuZ3JhcGhNYW5hZ2VyPT1udWxsKXRocm93IkdyYXBoIGhhcyBubyBncmFwaCBtZ3IhIjtpZih0aGlzLmdldE5vZGVzKCkuaW5kZXhPZih4KT4tMSl0aHJvdyJOb2RlIGFscmVhZHkgaW4gZ3JhcGghIjtyZXR1cm4geC5vd25lcj10aGlzLHRoaXMuZ2V0Tm9kZXMoKS5wdXNoKHgpLHh9ZWxzZXt2YXIgYj1nO2lmKCEodGhpcy5nZXROb2RlcygpLmluZGV4T2YoeSk+LTEmJnRoaXMuZ2V0Tm9kZXMoKS5pbmRleE9mKHYpPi0xKSl0aHJvdyJTb3VyY2Ugb3IgdGFyZ2V0IG5vdCBpbiBncmFwaCEiO2lmKCEoeS5vd25lcj09di5vd25lciYmeS5vd25lcj09dGhpcykpdGhyb3ciQm90aCBvd25lcnMgbXVzdCBiZSB0aGlzIGdyYXBoISI7cmV0dXJuIHkub3duZXIhPXYub3duZXI/bnVsbDooYi5zb3VyY2U9eSxiLnRhcmdldD12LGIuaXNJbnRlckdyYXBoPSExLHRoaXMuZ2V0RWRnZXMoKS5wdXNoKGIpLHkuZWRnZXMucHVzaChiKSx2IT15JiZ2LmVkZ2VzLnB1c2goYiksYil9fSxwLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oZyl7dmFyIHk9ZztpZihnIGluc3RhbmNlb2YgbCl7aWYoeT09bnVsbCl0aHJvdyJOb2RlIGlzIG51bGwhIjtpZighKHkub3duZXIhPW51bGwmJnkub3duZXI9PXRoaXMpKXRocm93Ik93bmVyIGdyYXBoIGlzIGludmFsaWQhIjtpZih0aGlzLmdyYXBoTWFuYWdlcj09bnVsbCl0aHJvdyJPd25lciBncmFwaCBtYW5hZ2VyIGlzIGludmFsaWQhIjtmb3IodmFyIHY9eS5lZGdlcy5zbGljZSgpLHgsYj12Lmxlbmd0aCx3PTA7dzxiO3crKyl4PXZbd10seC5pc0ludGVyR3JhcGg/dGhpcy5ncmFwaE1hbmFnZXIucmVtb3ZlKHgpOnguc291cmNlLm93bmVyLnJlbW92ZSh4KTt2YXIgXz10aGlzLm5vZGVzLmluZGV4T2YoeSk7aWYoXz09LTEpdGhyb3ciTm9kZSBub3QgaW4gb3duZXIgbm9kZSBsaXN0ISI7dGhpcy5ub2Rlcy5zcGxpY2UoXywxKX1lbHNlIGlmKGcgaW5zdGFuY2VvZiB1KXt2YXIgeD1nO2lmKHg9PW51bGwpdGhyb3ciRWRnZSBpcyBudWxsISI7aWYoISh4LnNvdXJjZSE9bnVsbCYmeC50YXJnZXQhPW51bGwpKXRocm93IlNvdXJjZSBhbmQvb3IgdGFyZ2V0IGlzIG51bGwhIjtpZighKHguc291cmNlLm93bmVyIT1udWxsJiZ4LnRhcmdldC5vd25lciE9bnVsbCYmeC5zb3VyY2Uub3duZXI9PXRoaXMmJngudGFyZ2V0Lm93bmVyPT10aGlzKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBvd25lciBpcyBpbnZhbGlkISI7dmFyIFQ9eC5zb3VyY2UuZWRnZXMuaW5kZXhPZih4KSxFPXgudGFyZ2V0LmVkZ2VzLmluZGV4T2YoeCk7aWYoIShUPi0xJiZFPi0xKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBkb2Vzbid0IGtub3cgdGhpcyBlZGdlISI7eC5zb3VyY2UuZWRnZXMuc3BsaWNlKFQsMSkseC50YXJnZXQhPXguc291cmNlJiZ4LnRhcmdldC5lZGdlcy5zcGxpY2UoRSwxKTt2YXIgXz14LnNvdXJjZS5vd25lci5nZXRFZGdlcygpLmluZGV4T2YoeCk7aWYoXz09LTEpdGhyb3ciTm90IGluIG93bmVyJ3MgZWRnZSBsaXN0ISI7eC5zb3VyY2Uub3duZXIuZ2V0RWRnZXMoKS5zcGxpY2UoXywxKX19LHAucHJvdG90eXBlLnVwZGF0ZUxlZnRUb3A9ZnVuY3Rpb24oKXtmb3IodmFyIGc9aS5NQVhfVkFMVUUseT1pLk1BWF9WQUxVRSx2LHgsYix3PXRoaXMuZ2V0Tm9kZXMoKSxfPXcubGVuZ3RoLFQ9MDtUPF87VCsrKXt2YXIgRT13W1RdO3Y9RS5nZXRUb3AoKSx4PUUuZ2V0TGVmdCgpLGc+diYmKGc9dikseT54JiYoeT14KX1yZXR1cm4gZz09aS5NQVhfVkFMVUU/bnVsbDood1swXS5nZXRQYXJlbnQoKS5wYWRkaW5nTGVmdCE9bnVsbD9iPXdbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQ6Yj10aGlzLm1hcmdpbix0aGlzLmxlZnQ9eS1iLHRoaXMudG9wPWctYixuZXcgZih0aGlzLmxlZnQsdGhpcy50b3ApKX0scC5wcm90b3R5cGUudXBkYXRlQm91bmRzPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1pLk1BWF9WQUxVRSx2PS1pLk1BWF9WQUxVRSx4PWkuTUFYX1ZBTFVFLGI9LWkuTUFYX1ZBTFVFLHcsXyxULEUsTCxTPXRoaXMubm9kZXMsQT1TLmxlbmd0aCxJPTA7STxBO0krKyl7dmFyIEQ9U1tJXTtnJiZELmNoaWxkIT1udWxsJiZELnVwZGF0ZUJvdW5kcygpLHc9RC5nZXRMZWZ0KCksXz1ELmdldFJpZ2h0KCksVD1ELmdldFRvcCgpLEU9RC5nZXRCb3R0b20oKSx5PncmJih5PXcpLHY8XyYmKHY9XykseD5UJiYoeD1UKSxiPEUmJihiPUUpfXZhciBrPW5ldyBoKHkseCx2LXksYi14KTt5PT1pLk1BWF9WQUxVRSYmKHRoaXMubGVmdD10aGlzLnBhcmVudC5nZXRMZWZ0KCksdGhpcy5yaWdodD10aGlzLnBhcmVudC5nZXRSaWdodCgpLHRoaXMudG9wPXRoaXMucGFyZW50LmdldFRvcCgpLHRoaXMuYm90dG9tPXRoaXMucGFyZW50LmdldEJvdHRvbSgpKSxTWzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0IT1udWxsP0w9U1swXS5nZXRQYXJlbnQoKS5wYWRkaW5nTGVmdDpMPXRoaXMubWFyZ2luLHRoaXMubGVmdD1rLngtTCx0aGlzLnJpZ2h0PWsueCtrLndpZHRoK0wsdGhpcy50b3A9ay55LUwsdGhpcy5ib3R0b209ay55K2suaGVpZ2h0K0x9LHAuY2FsY3VsYXRlQm91bmRzPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1pLk1BWF9WQUxVRSx2PS1pLk1BWF9WQUxVRSx4PWkuTUFYX1ZBTFVFLGI9LWkuTUFYX1ZBTFVFLHcsXyxULEUsTD1nLmxlbmd0aCxTPTA7UzxMO1MrKyl7dmFyIEE9Z1tTXTt3PUEuZ2V0TGVmdCgpLF89QS5nZXRSaWdodCgpLFQ9QS5nZXRUb3AoKSxFPUEuZ2V0Qm90dG9tKCkseT53JiYoeT13KSx2PF8mJih2PV8pLHg+VCYmKHg9VCksYjxFJiYoYj1FKX12YXIgST1uZXcgaCh5LHgsdi15LGIteCk7cmV0dXJuIEl9LHAucHJvdG90eXBlLmdldEluY2x1c2lvblRyZWVEZXB0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzPT10aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCk/MTp0aGlzLnBhcmVudC5nZXRJbmNsdXNpb25UcmVlRGVwdGgoKX0scC5wcm90b3R5cGUuZ2V0RXN0aW1hdGVkU2l6ZT1mdW5jdGlvbigpe2lmKHRoaXMuZXN0aW1hdGVkU2l6ZT09aS5NSU5fVkFMVUUpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7cmV0dXJuIHRoaXMuZXN0aW1hdGVkU2l6ZX0scC5wcm90b3R5cGUuY2FsY0VzdGltYXRlZFNpemU9ZnVuY3Rpb24oKXtmb3IodmFyIGc9MCx5PXRoaXMubm9kZXMsdj15Lmxlbmd0aCx4PTA7eDx2O3grKyl7dmFyIGI9eVt4XTtnKz1iLmNhbGNFc3RpbWF0ZWRTaXplKCl9cmV0dXJuIGc9PTA/dGhpcy5lc3RpbWF0ZWRTaXplPWEuRU1QVFlfQ09NUE9VTkRfTk9ERV9TSVpFOnRoaXMuZXN0aW1hdGVkU2l6ZT1nL01hdGguc3FydCh0aGlzLm5vZGVzLmxlbmd0aCksdGhpcy5lc3RpbWF0ZWRTaXplfSxwLnByb3RvdHlwZS51cGRhdGVDb25uZWN0ZWQ9ZnVuY3Rpb24oKXt2YXIgZz10aGlzO2lmKHRoaXMubm9kZXMubGVuZ3RoPT0wKXt0aGlzLmlzQ29ubmVjdGVkPSEwO3JldHVybn12YXIgeT1uZXcgZCx2PW5ldyBTZXQseD10aGlzLm5vZGVzWzBdLGIsdyxfPXgud2l0aENoaWxkcmVuKCk7Zm9yKF8uZm9yRWFjaChmdW5jdGlvbihJKXt5LnB1c2goSSksdi5hZGQoSSl9KTt5Lmxlbmd0aCE9PTA7KXt4PXkuc2hpZnQoKSxiPXguZ2V0RWRnZXMoKTtmb3IodmFyIFQ9Yi5sZW5ndGgsRT0wO0U8VDtFKyspe3ZhciBMPWJbRV07aWYodz1MLmdldE90aGVyRW5kSW5HcmFwaCh4LHRoaXMpLHchPW51bGwmJiF2Lmhhcyh3KSl7dmFyIFM9dy53aXRoQ2hpbGRyZW4oKTtTLmZvckVhY2goZnVuY3Rpb24oSSl7eS5wdXNoKEkpLHYuYWRkKEkpfSl9fX1pZih0aGlzLmlzQ29ubmVjdGVkPSExLHYuc2l6ZT49dGhpcy5ub2Rlcy5sZW5ndGgpe3ZhciBBPTA7di5mb3JFYWNoKGZ1bmN0aW9uKEkpe0kub3duZXI9PWcmJkErK30pLEE9PXRoaXMubm9kZXMubGVuZ3RoJiYodGhpcy5pc0Nvbm5lY3RlZD0hMCl9fSx0LmV4cG9ydHM9cH0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPXIoMSk7ZnVuY3Rpb24gYShzKXtuPXIoNSksdGhpcy5sYXlvdXQ9cyx0aGlzLmdyYXBocz1bXSx0aGlzLmVkZ2VzPVtdfW8oYSwiTEdyYXBoTWFuYWdlciIpLGEucHJvdG90eXBlLmFkZFJvb3Q9ZnVuY3Rpb24oKXt2YXIgcz10aGlzLmxheW91dC5uZXdHcmFwaCgpLGw9dGhpcy5sYXlvdXQubmV3Tm9kZShudWxsKSx1PXRoaXMuYWRkKHMsbCk7cmV0dXJuIHRoaXMuc2V0Um9vdEdyYXBoKHUpLHRoaXMucm9vdEdyYXBofSxhLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocyxsLHUsaCxmKXtpZih1PT1udWxsJiZoPT1udWxsJiZmPT1udWxsKXtpZihzPT1udWxsKXRocm93IkdyYXBoIGlzIG51bGwhIjtpZihsPT1udWxsKXRocm93IlBhcmVudCBub2RlIGlzIG51bGwhIjtpZih0aGlzLmdyYXBocy5pbmRleE9mKHMpPi0xKXRocm93IkdyYXBoIGFscmVhZHkgaW4gdGhpcyBncmFwaCBtZ3IhIjtpZih0aGlzLmdyYXBocy5wdXNoKHMpLHMucGFyZW50IT1udWxsKXRocm93IkFscmVhZHkgaGFzIGEgcGFyZW50ISI7aWYobC5jaGlsZCE9bnVsbCl0aHJvdyJBbHJlYWR5IGhhcyBhIGNoaWxkISI7cmV0dXJuIHMucGFyZW50PWwsbC5jaGlsZD1zLHN9ZWxzZXtmPXUsaD1sLHU9czt2YXIgZD1oLmdldE93bmVyKCkscD1mLmdldE93bmVyKCk7aWYoIShkIT1udWxsJiZkLmdldEdyYXBoTWFuYWdlcigpPT10aGlzKSl0aHJvdyJTb3VyY2Ugbm90IGluIHRoaXMgZ3JhcGggbWdyISI7aWYoIShwIT1udWxsJiZwLmdldEdyYXBoTWFuYWdlcigpPT10aGlzKSl0aHJvdyJUYXJnZXQgbm90IGluIHRoaXMgZ3JhcGggbWdyISI7aWYoZD09cClyZXR1cm4gdS5pc0ludGVyR3JhcGg9ITEsZC5hZGQodSxoLGYpO2lmKHUuaXNJbnRlckdyYXBoPSEwLHUuc291cmNlPWgsdS50YXJnZXQ9Zix0aGlzLmVkZ2VzLmluZGV4T2YodSk+LTEpdGhyb3ciRWRnZSBhbHJlYWR5IGluIGludGVyLWdyYXBoIGVkZ2UgbGlzdCEiO2lmKHRoaXMuZWRnZXMucHVzaCh1KSwhKHUuc291cmNlIT1udWxsJiZ1LnRhcmdldCE9bnVsbCkpdGhyb3ciRWRnZSBzb3VyY2UgYW5kL29yIHRhcmdldCBpcyBudWxsISI7aWYoISh1LnNvdXJjZS5lZGdlcy5pbmRleE9mKHUpPT0tMSYmdS50YXJnZXQuZWRnZXMuaW5kZXhPZih1KT09LTEpKXRocm93IkVkZ2UgYWxyZWFkeSBpbiBzb3VyY2UgYW5kL29yIHRhcmdldCBpbmNpZGVuY3kgbGlzdCEiO3JldHVybiB1LnNvdXJjZS5lZGdlcy5wdXNoKHUpLHUudGFyZ2V0LmVkZ2VzLnB1c2godSksdX19LGEucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihzKXtpZihzIGluc3RhbmNlb2Ygbil7dmFyIGw9cztpZihsLmdldEdyYXBoTWFuYWdlcigpIT10aGlzKXRocm93IkdyYXBoIG5vdCBpbiB0aGlzIGdyYXBoIG1nciI7aWYoIShsPT10aGlzLnJvb3RHcmFwaHx8bC5wYXJlbnQhPW51bGwmJmwucGFyZW50LmdyYXBoTWFuYWdlcj09dGhpcykpdGhyb3ciSW52YWxpZCBwYXJlbnQgbm9kZSEiO3ZhciB1PVtdO3U9dS5jb25jYXQobC5nZXRFZGdlcygpKTtmb3IodmFyIGgsZj11Lmxlbmd0aCxkPTA7ZDxmO2QrKyloPXVbZF0sbC5yZW1vdmUoaCk7dmFyIHA9W107cD1wLmNvbmNhdChsLmdldE5vZGVzKCkpO3ZhciBtO2Y9cC5sZW5ndGg7Zm9yKHZhciBkPTA7ZDxmO2QrKyltPXBbZF0sbC5yZW1vdmUobSk7bD09dGhpcy5yb290R3JhcGgmJnRoaXMuc2V0Um9vdEdyYXBoKG51bGwpO3ZhciBnPXRoaXMuZ3JhcGhzLmluZGV4T2YobCk7dGhpcy5ncmFwaHMuc3BsaWNlKGcsMSksbC5wYXJlbnQ9bnVsbH1lbHNlIGlmKHMgaW5zdGFuY2VvZiBpKXtpZihoPXMsaD09bnVsbCl0aHJvdyJFZGdlIGlzIG51bGwhIjtpZighaC5pc0ludGVyR3JhcGgpdGhyb3ciTm90IGFuIGludGVyLWdyYXBoIGVkZ2UhIjtpZighKGguc291cmNlIT1udWxsJiZoLnRhcmdldCE9bnVsbCkpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgaXMgbnVsbCEiO2lmKCEoaC5zb3VyY2UuZWRnZXMuaW5kZXhPZihoKSE9LTEmJmgudGFyZ2V0LmVkZ2VzLmluZGV4T2YoaCkhPS0xKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBkb2Vzbid0IGtub3cgdGhpcyBlZGdlISI7dmFyIGc9aC5zb3VyY2UuZWRnZXMuaW5kZXhPZihoKTtpZihoLnNvdXJjZS5lZGdlcy5zcGxpY2UoZywxKSxnPWgudGFyZ2V0LmVkZ2VzLmluZGV4T2YoaCksaC50YXJnZXQuZWRnZXMuc3BsaWNlKGcsMSksIShoLnNvdXJjZS5vd25lciE9bnVsbCYmaC5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkhPW51bGwpKXRocm93IkVkZ2Ugb3duZXIgZ3JhcGggb3Igb3duZXIgZ3JhcGggbWFuYWdlciBpcyBudWxsISI7aWYoaC5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkuZWRnZXMuaW5kZXhPZihoKT09LTEpdGhyb3ciTm90IGluIG93bmVyIGdyYXBoIG1hbmFnZXIncyBlZGdlIGxpc3QhIjt2YXIgZz1oLnNvdXJjZS5vd25lci5nZXRHcmFwaE1hbmFnZXIoKS5lZGdlcy5pbmRleE9mKGgpO2guc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpLmVkZ2VzLnNwbGljZShnLDEpfX0sYS5wcm90b3R5cGUudXBkYXRlQm91bmRzPWZ1bmN0aW9uKCl7dGhpcy5yb290R3JhcGgudXBkYXRlQm91bmRzKCEwKX0sYS5wcm90b3R5cGUuZ2V0R3JhcGhzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhzfSxhLnByb3RvdHlwZS5nZXRBbGxOb2Rlcz1mdW5jdGlvbigpe2lmKHRoaXMuYWxsTm9kZXM9PW51bGwpe2Zvcih2YXIgcz1bXSxsPXRoaXMuZ2V0R3JhcGhzKCksdT1sLmxlbmd0aCxoPTA7aDx1O2grKylzPXMuY29uY2F0KGxbaF0uZ2V0Tm9kZXMoKSk7dGhpcy5hbGxOb2Rlcz1zfXJldHVybiB0aGlzLmFsbE5vZGVzfSxhLnByb3RvdHlwZS5yZXNldEFsbE5vZGVzPWZ1bmN0aW9uKCl7dGhpcy5hbGxOb2Rlcz1udWxsfSxhLnByb3RvdHlwZS5yZXNldEFsbEVkZ2VzPWZ1bmN0aW9uKCl7dGhpcy5hbGxFZGdlcz1udWxsfSxhLnByb3RvdHlwZS5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKCl7dGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbj1udWxsfSxhLnByb3RvdHlwZS5nZXRBbGxFZGdlcz1mdW5jdGlvbigpe2lmKHRoaXMuYWxsRWRnZXM9PW51bGwpe2Zvcih2YXIgcz1bXSxsPXRoaXMuZ2V0R3JhcGhzKCksdT1sLmxlbmd0aCxoPTA7aDxsLmxlbmd0aDtoKyspcz1zLmNvbmNhdChsW2hdLmdldEVkZ2VzKCkpO3M9cy5jb25jYXQodGhpcy5lZGdlcyksdGhpcy5hbGxFZGdlcz1zfXJldHVybiB0aGlzLmFsbEVkZ2VzfSxhLnByb3RvdHlwZS5nZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9ufSxhLnByb3RvdHlwZS5zZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbj1mdW5jdGlvbihzKXtpZih0aGlzLmFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uIT1udWxsKXRocm93ImFzc2VydCBmYWlsZWQiO3RoaXMuYWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249c30sYS5wcm90b3R5cGUuZ2V0Um9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3RHcmFwaH0sYS5wcm90b3R5cGUuc2V0Um9vdEdyYXBoPWZ1bmN0aW9uKHMpe2lmKHMuZ2V0R3JhcGhNYW5hZ2VyKCkhPXRoaXMpdGhyb3ciUm9vdCBub3QgaW4gdGhpcyBncmFwaCBtZ3IhIjt0aGlzLnJvb3RHcmFwaD1zLHMucGFyZW50PT1udWxsJiYocy5wYXJlbnQ9dGhpcy5sYXlvdXQubmV3Tm9kZSgiUm9vdCBub2RlIikpfSxhLnByb3RvdHlwZS5nZXRMYXlvdXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXlvdXR9LGEucHJvdG90eXBlLmlzT25lQW5jZXN0b3JPZk90aGVyPWZ1bmN0aW9uKHMsbCl7aWYoIShzIT1udWxsJiZsIT1udWxsKSl0aHJvdyJhc3NlcnQgZmFpbGVkIjtpZihzPT1sKXJldHVybiEwO3ZhciB1PXMuZ2V0T3duZXIoKSxoO2Rve2lmKGg9dS5nZXRQYXJlbnQoKSxoPT1udWxsKWJyZWFrO2lmKGg9PWwpcmV0dXJuITA7aWYodT1oLmdldE93bmVyKCksdT09bnVsbClicmVha313aGlsZSghMCk7dT1sLmdldE93bmVyKCk7ZG97aWYoaD11LmdldFBhcmVudCgpLGg9PW51bGwpYnJlYWs7aWYoaD09cylyZXR1cm4hMDtpZih1PWguZ2V0T3duZXIoKSx1PT1udWxsKWJyZWFrfXdoaWxlKCEwKTtyZXR1cm4hMX0sYS5wcm90b3R5cGUuY2FsY0xvd2VzdENvbW1vbkFuY2VzdG9ycz1mdW5jdGlvbigpe2Zvcih2YXIgcyxsLHUsaCxmLGQ9dGhpcy5nZXRBbGxFZGdlcygpLHA9ZC5sZW5ndGgsbT0wO208cDttKyspe2lmKHM9ZFttXSxsPXMuc291cmNlLHU9cy50YXJnZXQscy5sY2E9bnVsbCxzLnNvdXJjZUluTGNhPWwscy50YXJnZXRJbkxjYT11LGw9PXUpe3MubGNhPWwuZ2V0T3duZXIoKTtjb250aW51ZX1mb3IoaD1sLmdldE93bmVyKCk7cy5sY2E9PW51bGw7KXtmb3Iocy50YXJnZXRJbkxjYT11LGY9dS5nZXRPd25lcigpO3MubGNhPT1udWxsOyl7aWYoZj09aCl7cy5sY2E9ZjticmVha31pZihmPT10aGlzLnJvb3RHcmFwaClicmVhaztpZihzLmxjYSE9bnVsbCl0aHJvdyJhc3NlcnQgZmFpbGVkIjtzLnRhcmdldEluTGNhPWYuZ2V0UGFyZW50KCksZj1zLnRhcmdldEluTGNhLmdldE93bmVyKCl9aWYoaD09dGhpcy5yb290R3JhcGgpYnJlYWs7cy5sY2E9PW51bGwmJihzLnNvdXJjZUluTGNhPWguZ2V0UGFyZW50KCksaD1zLnNvdXJjZUluTGNhLmdldE93bmVyKCkpfWlmKHMubGNhPT1udWxsKXRocm93ImFzc2VydCBmYWlsZWQifX0sYS5wcm90b3R5cGUuY2FsY0xvd2VzdENvbW1vbkFuY2VzdG9yPWZ1bmN0aW9uKHMsbCl7aWYocz09bClyZXR1cm4gcy5nZXRPd25lcigpO3ZhciB1PXMuZ2V0T3duZXIoKTtkb3tpZih1PT1udWxsKWJyZWFrO3ZhciBoPWwuZ2V0T3duZXIoKTtkb3tpZihoPT1udWxsKWJyZWFrO2lmKGg9PXUpcmV0dXJuIGg7aD1oLmdldFBhcmVudCgpLmdldE93bmVyKCl9d2hpbGUoITApO3U9dS5nZXRQYXJlbnQoKS5nZXRPd25lcigpfXdoaWxlKCEwKTtyZXR1cm4gdX0sYS5wcm90b3R5cGUuY2FsY0luY2x1c2lvblRyZWVEZXB0aHM9ZnVuY3Rpb24ocyxsKXtzPT1udWxsJiZsPT1udWxsJiYocz10aGlzLnJvb3RHcmFwaCxsPTEpO2Zvcih2YXIgdSxoPXMuZ2V0Tm9kZXMoKSxmPWgubGVuZ3RoLGQ9MDtkPGY7ZCsrKXU9aFtkXSx1LmluY2x1c2lvblRyZWVEZXB0aD1sLHUuY2hpbGQhPW51bGwmJnRoaXMuY2FsY0luY2x1c2lvblRyZWVEZXB0aHModS5jaGlsZCxsKzEpfSxhLnByb3RvdHlwZS5pbmNsdWRlc0ludmFsaWRFZGdlPWZ1bmN0aW9uKCl7Zm9yKHZhciBzLGw9dGhpcy5lZGdlcy5sZW5ndGgsdT0wO3U8bDt1KyspaWYocz10aGlzLmVkZ2VzW3VdLHRoaXMuaXNPbmVBbmNlc3Rvck9mT3RoZXIocy5zb3VyY2Uscy50YXJnZXQpKXJldHVybiEwO3JldHVybiExfSx0LmV4cG9ydHM9YX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDApO2Z1bmN0aW9uIGkoKXt9byhpLCJGRExheW91dENvbnN0YW50cyIpO2Zvcih2YXIgYSBpbiBuKWlbYV09blthXTtpLk1BWF9JVEVSQVRJT05TPTI1MDAsaS5ERUZBVUxUX0VER0VfTEVOR1RIPTUwLGkuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEg9LjQ1LGkuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEg9NDUwMCxpLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSD0uNCxpLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSD0xLGkuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj0zLjgsaS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SPTEuNSxpLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OPSEwLGkuREVGQVVMVF9VU0VfU01BUlRfUkVQVUxTSU9OX1JBTkdFX0NBTENVTEFUSU9OPSEwLGkuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTD0uMyxpLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1I9LjMzLGkuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUPTFlMyxpLkFEQVBUQVRJT05fVVBQRVJfTk9ERV9MSU1JVD01ZTMsaS5NQVhfTk9ERV9ESVNQTEFDRU1FTlRfSU5DUkVNRU5UQUw9MTAwLGkuTUFYX05PREVfRElTUExBQ0VNRU5UPWkuTUFYX05PREVfRElTUExBQ0VNRU5UX0lOQ1JFTUVOVEFMKjMsaS5NSU5fUkVQVUxTSU9OX0RJU1Q9aS5ERUZBVUxUX0VER0VfTEVOR1RILzEwLGkuQ09OVkVSR0VOQ0VfQ0hFQ0tfUEVSSU9EPTEwMCxpLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1I9LjEsaS5NSU5fRURHRV9MRU5HVEg9MSxpLkdSSURfQ0FMQ1VMQVRJT05fQ0hFQ0tfUEVSSU9EPTEwLHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTIpO2Z1bmN0aW9uIGkoKXt9byhpLCJJR2VvbWV0cnkiKSxpLmNhbGNTZXBhcmF0aW9uQW1vdW50PWZ1bmN0aW9uKGEscyxsLHUpe2lmKCFhLmludGVyc2VjdHMocykpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7dmFyIGg9bmV3IEFycmF5KDIpO3RoaXMuZGVjaWRlRGlyZWN0aW9uc0Zvck92ZXJsYXBwaW5nTm9kZXMoYSxzLGgpLGxbMF09TWF0aC5taW4oYS5nZXRSaWdodCgpLHMuZ2V0UmlnaHQoKSktTWF0aC5tYXgoYS54LHMueCksbFsxXT1NYXRoLm1pbihhLmdldEJvdHRvbSgpLHMuZ2V0Qm90dG9tKCkpLU1hdGgubWF4KGEueSxzLnkpLGEuZ2V0WCgpPD1zLmdldFgoKSYmYS5nZXRSaWdodCgpPj1zLmdldFJpZ2h0KCk/bFswXSs9TWF0aC5taW4ocy5nZXRYKCktYS5nZXRYKCksYS5nZXRSaWdodCgpLXMuZ2V0UmlnaHQoKSk6cy5nZXRYKCk8PWEuZ2V0WCgpJiZzLmdldFJpZ2h0KCk+PWEuZ2V0UmlnaHQoKSYmKGxbMF0rPU1hdGgubWluKGEuZ2V0WCgpLXMuZ2V0WCgpLHMuZ2V0UmlnaHQoKS1hLmdldFJpZ2h0KCkpKSxhLmdldFkoKTw9cy5nZXRZKCkmJmEuZ2V0Qm90dG9tKCk+PXMuZ2V0Qm90dG9tKCk/bFsxXSs9TWF0aC5taW4ocy5nZXRZKCktYS5nZXRZKCksYS5nZXRCb3R0b20oKS1zLmdldEJvdHRvbSgpKTpzLmdldFkoKTw9YS5nZXRZKCkmJnMuZ2V0Qm90dG9tKCk+PWEuZ2V0Qm90dG9tKCkmJihsWzFdKz1NYXRoLm1pbihhLmdldFkoKS1zLmdldFkoKSxzLmdldEJvdHRvbSgpLWEuZ2V0Qm90dG9tKCkpKTt2YXIgZj1NYXRoLmFicygocy5nZXRDZW50ZXJZKCktYS5nZXRDZW50ZXJZKCkpLyhzLmdldENlbnRlclgoKS1hLmdldENlbnRlclgoKSkpO3MuZ2V0Q2VudGVyWSgpPT09YS5nZXRDZW50ZXJZKCkmJnMuZ2V0Q2VudGVyWCgpPT09YS5nZXRDZW50ZXJYKCkmJihmPTEpO3ZhciBkPWYqbFswXSxwPWxbMV0vZjtsWzBdPHA/cD1sWzBdOmQ9bFsxXSxsWzBdPS0xKmhbMF0qKHAvMit1KSxsWzFdPS0xKmhbMV0qKGQvMit1KX0saS5kZWNpZGVEaXJlY3Rpb25zRm9yT3ZlcmxhcHBpbmdOb2Rlcz1mdW5jdGlvbihhLHMsbCl7YS5nZXRDZW50ZXJYKCk8cy5nZXRDZW50ZXJYKCk/bFswXT0tMTpsWzBdPTEsYS5nZXRDZW50ZXJZKCk8cy5nZXRDZW50ZXJZKCk/bFsxXT0tMTpsWzFdPTF9LGkuZ2V0SW50ZXJzZWN0aW9uMj1mdW5jdGlvbihhLHMsbCl7dmFyIHU9YS5nZXRDZW50ZXJYKCksaD1hLmdldENlbnRlclkoKSxmPXMuZ2V0Q2VudGVyWCgpLGQ9cy5nZXRDZW50ZXJZKCk7aWYoYS5pbnRlcnNlY3RzKHMpKXJldHVybiBsWzBdPXUsbFsxXT1oLGxbMl09ZixsWzNdPWQsITA7dmFyIHA9YS5nZXRYKCksbT1hLmdldFkoKSxnPWEuZ2V0UmlnaHQoKSx5PWEuZ2V0WCgpLHY9YS5nZXRCb3R0b20oKSx4PWEuZ2V0UmlnaHQoKSxiPWEuZ2V0V2lkdGhIYWxmKCksdz1hLmdldEhlaWdodEhhbGYoKSxfPXMuZ2V0WCgpLFQ9cy5nZXRZKCksRT1zLmdldFJpZ2h0KCksTD1zLmdldFgoKSxTPXMuZ2V0Qm90dG9tKCksQT1zLmdldFJpZ2h0KCksST1zLmdldFdpZHRoSGFsZigpLEQ9cy5nZXRIZWlnaHRIYWxmKCksaz0hMSxSPSExO2lmKHU9PT1mKXtpZihoPmQpcmV0dXJuIGxbMF09dSxsWzFdPW0sbFsyXT1mLGxbM109UywhMTtpZihoPGQpcmV0dXJuIGxbMF09dSxsWzFdPXYsbFsyXT1mLGxbM109VCwhMX1lbHNlIGlmKGg9PT1kKXtpZih1PmYpcmV0dXJuIGxbMF09cCxsWzFdPWgsbFsyXT1FLGxbM109ZCwhMTtpZih1PGYpcmV0dXJuIGxbMF09ZyxsWzFdPWgsbFsyXT1fLGxbM109ZCwhMX1lbHNle3ZhciBDPWEuaGVpZ2h0L2Eud2lkdGgsTz1zLmhlaWdodC9zLndpZHRoLE49KGQtaCkvKGYtdSksUD12b2lkIDAsRj12b2lkIDAsQj12b2lkIDAsRz12b2lkIDAsej12b2lkIDAsVz12b2lkIDA7aWYoLUM9PT1OP3U+Zj8obFswXT15LGxbMV09dixrPSEwKToobFswXT1nLGxbMV09bSxrPSEwKTpDPT09TiYmKHU+Zj8obFswXT1wLGxbMV09bSxrPSEwKToobFswXT14LGxbMV09dixrPSEwKSksLU89PT1OP2Y+dT8obFsyXT1MLGxbM109UyxSPSEwKToobFsyXT1FLGxbM109VCxSPSEwKTpPPT09TiYmKGY+dT8obFsyXT1fLGxbM109VCxSPSEwKToobFsyXT1BLGxbM109UyxSPSEwKSksayYmUilyZXR1cm4hMTtpZih1PmY/aD5kPyhQPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oQyxOLDQpLEY9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihPLE4sMikpOihQPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLUMsTiwzKSxGPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLU8sTiwxKSk6aD5kPyhQPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLUMsTiwxKSxGPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLU8sTiwzKSk6KFA9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihDLE4sMiksRj10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKE8sTiw0KSksIWspc3dpdGNoKFApe2Nhc2UgMTpHPW0sQj11Ky13L04sbFswXT1CLGxbMV09RzticmVhaztjYXNlIDI6Qj14LEc9aCtiKk4sbFswXT1CLGxbMV09RzticmVhaztjYXNlIDM6Rz12LEI9dSt3L04sbFswXT1CLGxbMV09RzticmVhaztjYXNlIDQ6Qj15LEc9aCstYipOLGxbMF09QixsWzFdPUc7YnJlYWt9aWYoIVIpc3dpdGNoKEYpe2Nhc2UgMTpXPVQsej1mKy1EL04sbFsyXT16LGxbM109VzticmVhaztjYXNlIDI6ej1BLFc9ZCtJKk4sbFsyXT16LGxbM109VzticmVhaztjYXNlIDM6Vz1TLHo9ZitEL04sbFsyXT16LGxbM109VzticmVhaztjYXNlIDQ6ej1MLFc9ZCstSSpOLGxbMl09eixsWzNdPVc7YnJlYWt9fXJldHVybiExfSxpLmdldENhcmRpbmFsRGlyZWN0aW9uPWZ1bmN0aW9uKGEscyxsKXtyZXR1cm4gYT5zP2w6MStsJTR9LGkuZ2V0SW50ZXJzZWN0aW9uPWZ1bmN0aW9uKGEscyxsLHUpe2lmKHU9PW51bGwpcmV0dXJuIHRoaXMuZ2V0SW50ZXJzZWN0aW9uMihhLHMsbCk7dmFyIGg9YS54LGY9YS55LGQ9cy54LHA9cy55LG09bC54LGc9bC55LHk9dS54LHY9dS55LHg9dm9pZCAwLGI9dm9pZCAwLHc9dm9pZCAwLF89dm9pZCAwLFQ9dm9pZCAwLEU9dm9pZCAwLEw9dm9pZCAwLFM9dm9pZCAwLEE9dm9pZCAwO3JldHVybiB3PXAtZixUPWgtZCxMPWQqZi1oKnAsXz12LWcsRT1tLXksUz15KmctbSp2LEE9dypFLV8qVCxBPT09MD9udWxsOih4PShUKlMtRSpMKS9BLGI9KF8qTC13KlMpL0EsbmV3IG4oeCxiKSl9LGkuYW5nbGVPZlZlY3Rvcj1mdW5jdGlvbihhLHMsbCx1KXt2YXIgaD12b2lkIDA7cmV0dXJuIGEhPT1sPyhoPU1hdGguYXRhbigodS1zKS8obC1hKSksbDxhP2grPU1hdGguUEk6dTxzJiYoaCs9dGhpcy5UV09fUEkpKTp1PHM/aD10aGlzLk9ORV9BTkRfSEFMRl9QSTpoPXRoaXMuSEFMRl9QSSxofSxpLmRvSW50ZXJzZWN0PWZ1bmN0aW9uKGEscyxsLHUpe3ZhciBoPWEueCxmPWEueSxkPXMueCxwPXMueSxtPWwueCxnPWwueSx5PXUueCx2PXUueSx4PShkLWgpKih2LWcpLSh5LW0pKihwLWYpO2lmKHg9PT0wKXJldHVybiExO3ZhciBiPSgodi1nKSooeS1oKSsobS15KSoodi1mKSkveCx3PSgoZi1wKSooeS1oKSsoZC1oKSoodi1mKSkveDtyZXR1cm4gMDxiJiZiPDEmJjA8dyYmdzwxfSxpLkhBTEZfUEk9LjUqTWF0aC5QSSxpLk9ORV9BTkRfSEFMRl9QST0xLjUqTWF0aC5QSSxpLlRXT19QST0yKk1hdGguUEksaS5USFJFRV9QST0zKk1hdGguUEksdC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe31vKG4sIklNYXRoIiksbi5zaWduPWZ1bmN0aW9uKGkpe3JldHVybiBpPjA/MTppPDA/LTE6MH0sbi5mbG9vcj1mdW5jdGlvbihpKXtyZXR1cm4gaTwwP01hdGguY2VpbChpKTpNYXRoLmZsb29yKGkpfSxuLmNlaWw9ZnVuY3Rpb24oaSl7cmV0dXJuIGk8MD9NYXRoLmZsb29yKGkpOk1hdGguY2VpbChpKX0sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe31vKG4sIkludGVnZXIiKSxuLk1BWF9WQUxVRT0yMTQ3NDgzNjQ3LG4uTUlOX1ZBTFVFPS0yMTQ3NDgzNjQ4LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaChmLGQpe2Zvcih2YXIgcD0wO3A8ZC5sZW5ndGg7cCsrKXt2YXIgbT1kW3BdO20uZW51bWVyYWJsZT1tLmVudW1lcmFibGV8fCExLG0uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBtJiYobS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsbS5rZXksbSl9fXJldHVybiBvKGgsImRlZmluZVByb3BlcnRpZXMiKSxmdW5jdGlvbihmLGQscCl7cmV0dXJuIGQmJmgoZi5wcm90b3R5cGUsZCkscCYmaChmLHApLGZ9fSgpO2Z1bmN0aW9uIGkoaCxmKXtpZighKGggaW5zdGFuY2VvZiBmKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1vKGksIl9jbGFzc0NhbGxDaGVjayIpO3ZhciBhPW8oZnVuY3Rpb24oZil7cmV0dXJue3ZhbHVlOmYsbmV4dDpudWxsLHByZXY6bnVsbH19LCJub2RlRnJvbSIpLHM9byhmdW5jdGlvbihmLGQscCxtKXtyZXR1cm4gZiE9PW51bGw/Zi5uZXh0PWQ6bS5oZWFkPWQscCE9PW51bGw/cC5wcmV2PWQ6bS50YWlsPWQsZC5wcmV2PWYsZC5uZXh0PXAsbS5sZW5ndGgrKyxkfSwiYWRkIiksbD1vKGZ1bmN0aW9uKGYsZCl7dmFyIHA9Zi5wcmV2LG09Zi5uZXh0O3JldHVybiBwIT09bnVsbD9wLm5leHQ9bTpkLmhlYWQ9bSxtIT09bnVsbD9tLnByZXY9cDpkLnRhaWw9cCxmLnByZXY9Zi5uZXh0PW51bGwsZC5sZW5ndGgtLSxmfSwiX3JlbW92ZSIpLHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBoKGYpe3ZhciBkPXRoaXM7aSh0aGlzLGgpLHRoaXMubGVuZ3RoPTAsdGhpcy5oZWFkPW51bGwsdGhpcy50YWlsPW51bGwsZj8uZm9yRWFjaChmdW5jdGlvbihwKXtyZXR1cm4gZC5wdXNoKHApfSl9cmV0dXJuIG8oaCwiTGlua2VkTGlzdCIpLG4oaCxbe2tleToic2l6ZSIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0sInNpemUiKX0se2tleToiaW5zZXJ0QmVmb3JlIix2YWx1ZTpvKGZ1bmN0aW9uKGQscCl7cmV0dXJuIHMocC5wcmV2LGEoZCkscCx0aGlzKX0sImluc2VydEJlZm9yZSIpfSx7a2V5OiJpbnNlcnRBZnRlciIsdmFsdWU6byhmdW5jdGlvbihkLHApe3JldHVybiBzKHAsYShkKSxwLm5leHQsdGhpcyl9LCJpbnNlcnRBZnRlciIpfSx7a2V5OiJpbnNlcnROb2RlQmVmb3JlIix2YWx1ZTpvKGZ1bmN0aW9uKGQscCl7cmV0dXJuIHMocC5wcmV2LGQscCx0aGlzKX0sImluc2VydE5vZGVCZWZvcmUiKX0se2tleToiaW5zZXJ0Tm9kZUFmdGVyIix2YWx1ZTpvKGZ1bmN0aW9uKGQscCl7cmV0dXJuIHMocCxkLHAubmV4dCx0aGlzKX0sImluc2VydE5vZGVBZnRlciIpfSx7a2V5OiJwdXNoIix2YWx1ZTpvKGZ1bmN0aW9uKGQpe3JldHVybiBzKHRoaXMudGFpbCxhKGQpLG51bGwsdGhpcyl9LCJwdXNoIil9LHtrZXk6InVuc2hpZnQiLHZhbHVlOm8oZnVuY3Rpb24oZCl7cmV0dXJuIHMobnVsbCxhKGQpLHRoaXMuaGVhZCx0aGlzKX0sInVuc2hpZnQiKX0se2tleToicmVtb3ZlIix2YWx1ZTpvKGZ1bmN0aW9uKGQpe3JldHVybiBsKGQsdGhpcyl9LCJyZW1vdmUiKX0se2tleToicG9wIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcy50YWlsLHRoaXMpLnZhbHVlfSwicG9wIil9LHtrZXk6InBvcE5vZGUiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzLnRhaWwsdGhpcyl9LCJwb3BOb2RlIil9LHtrZXk6InNoaWZ0Iix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcy5oZWFkLHRoaXMpLnZhbHVlfSwic2hpZnQiKX0se2tleToic2hpZnROb2RlIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcy5oZWFkLHRoaXMpfSwic2hpZnROb2RlIil9LHtrZXk6ImdldF9vYmplY3RfYXQiLHZhbHVlOm8oZnVuY3Rpb24oZCl7aWYoZDw9dGhpcy5sZW5ndGgoKSl7Zm9yKHZhciBwPTEsbT10aGlzLmhlYWQ7cDxkOyltPW0ubmV4dCxwKys7cmV0dXJuIG0udmFsdWV9fSwiZ2V0X29iamVjdF9hdCIpfSx7a2V5OiJzZXRfb2JqZWN0X2F0Iix2YWx1ZTpvKGZ1bmN0aW9uKGQscCl7aWYoZDw9dGhpcy5sZW5ndGgoKSl7Zm9yKHZhciBtPTEsZz10aGlzLmhlYWQ7bTxkOylnPWcubmV4dCxtKys7Zy52YWx1ZT1wfX0sInNldF9vYmplY3RfYXQiKX1dKSxofSgpO3QuZXhwb3J0cz11fSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oaSxhLHMpe3RoaXMueD1udWxsLHRoaXMueT1udWxsLGk9PW51bGwmJmE9PW51bGwmJnM9PW51bGw/KHRoaXMueD0wLHRoaXMueT0wKTp0eXBlb2YgaT09Im51bWJlciImJnR5cGVvZiBhPT0ibnVtYmVyIiYmcz09bnVsbD8odGhpcy54PWksdGhpcy55PWEpOmkuY29uc3RydWN0b3IubmFtZT09IlBvaW50IiYmYT09bnVsbCYmcz09bnVsbCYmKHM9aSx0aGlzLng9cy54LHRoaXMueT1zLnkpfW8obiwiUG9pbnQiKSxuLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueH0sbi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnl9LG4ucHJvdG90eXBlLmdldExvY2F0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMueCx0aGlzLnkpfSxuLnByb3RvdHlwZS5zZXRMb2NhdGlvbj1mdW5jdGlvbihpLGEscyl7aS5jb25zdHJ1Y3Rvci5uYW1lPT0iUG9pbnQiJiZhPT1udWxsJiZzPT1udWxsPyhzPWksdGhpcy5zZXRMb2NhdGlvbihzLngscy55KSk6dHlwZW9mIGk9PSJudW1iZXIiJiZ0eXBlb2YgYT09Im51bWJlciImJnM9PW51bGwmJihwYXJzZUludChpKT09aSYmcGFyc2VJbnQoYSk9PWE/dGhpcy5tb3ZlKGksYSk6KHRoaXMueD1NYXRoLmZsb29yKGkrLjUpLHRoaXMueT1NYXRoLmZsb29yKGErLjUpKSl9LG4ucHJvdG90eXBlLm1vdmU9ZnVuY3Rpb24oaSxhKXt0aGlzLng9aSx0aGlzLnk9YX0sbi5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGksYSl7dGhpcy54Kz1pLHRoaXMueSs9YX0sbi5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGkpe2lmKGkuY29uc3RydWN0b3IubmFtZT09IlBvaW50Iil7dmFyIGE9aTtyZXR1cm4gdGhpcy54PT1hLngmJnRoaXMueT09YS55fXJldHVybiB0aGlzPT1pfSxuLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBuZXcgbigpLmNvbnN0cnVjdG9yLm5hbWUrIlt4PSIrdGhpcy54KyIseT0iK3RoaXMueSsiXSJ9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oaSxhLHMsbCl7dGhpcy54PTAsdGhpcy55PTAsdGhpcy53aWR0aD0wLHRoaXMuaGVpZ2h0PTAsaSE9bnVsbCYmYSE9bnVsbCYmcyE9bnVsbCYmbCE9bnVsbCYmKHRoaXMueD1pLHRoaXMueT1hLHRoaXMud2lkdGg9cyx0aGlzLmhlaWdodD1sKX1vKG4sIlJlY3RhbmdsZUQiKSxuLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueH0sbi5wcm90b3R5cGUuc2V0WD1mdW5jdGlvbihpKXt0aGlzLng9aX0sbi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnl9LG4ucHJvdG90eXBlLnNldFk9ZnVuY3Rpb24oaSl7dGhpcy55PWl9LG4ucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2lkdGh9LG4ucHJvdG90eXBlLnNldFdpZHRoPWZ1bmN0aW9uKGkpe3RoaXMud2lkdGg9aX0sbi5wcm90b3R5cGUuZ2V0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVpZ2h0fSxuLnByb3RvdHlwZS5zZXRIZWlnaHQ9ZnVuY3Rpb24oaSl7dGhpcy5oZWlnaHQ9aX0sbi5wcm90b3R5cGUuZ2V0UmlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54K3RoaXMud2lkdGh9LG4ucHJvdG90eXBlLmdldEJvdHRvbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkrdGhpcy5oZWlnaHR9LG4ucHJvdG90eXBlLmludGVyc2VjdHM9ZnVuY3Rpb24oaSl7cmV0dXJuISh0aGlzLmdldFJpZ2h0KCk8aS54fHx0aGlzLmdldEJvdHRvbSgpPGkueXx8aS5nZXRSaWdodCgpPHRoaXMueHx8aS5nZXRCb3R0b20oKTx0aGlzLnkpfSxuLnByb3RvdHlwZS5nZXRDZW50ZXJYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueCt0aGlzLndpZHRoLzJ9LG4ucHJvdG90eXBlLmdldE1pblg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYKCl9LG4ucHJvdG90eXBlLmdldE1heFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYKCkrdGhpcy53aWR0aH0sbi5wcm90b3R5cGUuZ2V0Q2VudGVyWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkrdGhpcy5oZWlnaHQvMn0sbi5wcm90b3R5cGUuZ2V0TWluWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFkoKX0sbi5wcm90b3R5cGUuZ2V0TWF4WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFkoKSt0aGlzLmhlaWdodH0sbi5wcm90b3R5cGUuZ2V0V2lkdGhIYWxmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2lkdGgvMn0sbi5wcm90b3R5cGUuZ2V0SGVpZ2h0SGFsZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhlaWdodC8yfSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZ0eXBlb2YgU3ltYm9sLml0ZXJhdG9yPT0ic3ltYm9sIj9mdW5jdGlvbihhKXtyZXR1cm4gdHlwZW9mIGF9OmZ1bmN0aW9uKGEpe3JldHVybiBhJiZ0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZhLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZhIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgYX07ZnVuY3Rpb24gaSgpe31vKGksIlVuaXF1ZUlER2VuZXJldG9yIiksaS5sYXN0SUQ9MCxpLmNyZWF0ZUlEPWZ1bmN0aW9uKGEpe3JldHVybiBpLmlzUHJpbWl0aXZlKGEpP2E6KGEudW5pcXVlSUQhPW51bGx8fChhLnVuaXF1ZUlEPWkuZ2V0U3RyaW5nKCksaS5sYXN0SUQrKyksYS51bmlxdWVJRCl9LGkuZ2V0U3RyaW5nPWZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsJiYoYT1pLmxhc3RJRCksIk9iamVjdCMiK2F9LGkuaXNQcmltaXRpdmU9ZnVuY3Rpb24oYSl7dmFyIHM9dHlwZW9mIGE+InUiPyJ1bmRlZmluZWQiOm4oYSk7cmV0dXJuIGE9PW51bGx8fHMhPSJvYmplY3QiJiZzIT0iZnVuY3Rpb24ifSx0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKG0pe2lmKEFycmF5LmlzQXJyYXkobSkpe2Zvcih2YXIgZz0wLHk9QXJyYXkobS5sZW5ndGgpO2c8bS5sZW5ndGg7ZysrKXlbZ109bVtnXTtyZXR1cm4geX1lbHNlIHJldHVybiBBcnJheS5mcm9tKG0pfW8obiwiX3RvQ29uc3VtYWJsZUFycmF5Iik7dmFyIGk9cigwKSxhPXIoNikscz1yKDMpLGw9cigxKSx1PXIoNSksaD1yKDQpLGY9cigxNyksZD1yKDI3KTtmdW5jdGlvbiBwKG0pe2QuY2FsbCh0aGlzKSx0aGlzLmxheW91dFF1YWxpdHk9aS5RVUFMSVRZLHRoaXMuY3JlYXRlQmVuZHNBc05lZWRlZD1pLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRCx0aGlzLmluY3JlbWVudGFsPWkuREVGQVVMVF9JTkNSRU1FTlRBTCx0aGlzLmFuaW1hdGlvbk9uTGF5b3V0PWkuREVGQVVMVF9BTklNQVRJT05fT05fTEFZT1VULHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0PWkuREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVCx0aGlzLmFuaW1hdGlvblBlcmlvZD1pLkRFRkFVTFRfQU5JTUFUSU9OX1BFUklPRCx0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzPWkuREVGQVVMVF9VTklGT1JNX0xFQUZfTk9ERV9TSVpFUyx0aGlzLmVkZ2VUb0R1bW15Tm9kZXM9bmV3IE1hcCx0aGlzLmdyYXBoTWFuYWdlcj1uZXcgYSh0aGlzKSx0aGlzLmlzTGF5b3V0RmluaXNoZWQ9ITEsdGhpcy5pc1N1YkxheW91dD0hMSx0aGlzLmlzUmVtb3RlVXNlPSExLG0hPW51bGwmJih0aGlzLmlzUmVtb3RlVXNlPW0pfW8ocCwiTGF5b3V0IikscC5SQU5ET01fU0VFRD0xLHAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLHAucHJvdG90eXBlLmdldEdyYXBoTWFuYWdlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcn0scC5wcm90b3R5cGUuZ2V0QWxsTm9kZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKX0scC5wcm90b3R5cGUuZ2V0QWxsRWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsRWRnZXMoKX0scC5wcm90b3R5cGUuZ2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKX0scC5wcm90b3R5cGUubmV3R3JhcGhNYW5hZ2VyPWZ1bmN0aW9uKCl7dmFyIG09bmV3IGEodGhpcyk7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyPW0sbX0scC5wcm90b3R5cGUubmV3R3JhcGg9ZnVuY3Rpb24obSl7cmV0dXJuIG5ldyB1KG51bGwsdGhpcy5ncmFwaE1hbmFnZXIsbSl9LHAucHJvdG90eXBlLm5ld05vZGU9ZnVuY3Rpb24obSl7cmV0dXJuIG5ldyBzKHRoaXMuZ3JhcGhNYW5hZ2VyLG0pfSxwLnByb3RvdHlwZS5uZXdFZGdlPWZ1bmN0aW9uKG0pe3JldHVybiBuZXcgbChudWxsLG51bGwsbSl9LHAucHJvdG90eXBlLmNoZWNrTGF5b3V0U3VjY2Vzcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCk9PW51bGx8fHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXROb2RlcygpLmxlbmd0aD09MHx8dGhpcy5ncmFwaE1hbmFnZXIuaW5jbHVkZXNJbnZhbGlkRWRnZSgpfSxwLnByb3RvdHlwZS5ydW5MYXlvdXQ9ZnVuY3Rpb24oKXt0aGlzLmlzTGF5b3V0RmluaXNoZWQ9ITEsdGhpcy50aWxpbmdQcmVMYXlvdXQmJnRoaXMudGlsaW5nUHJlTGF5b3V0KCksdGhpcy5pbml0UGFyYW1ldGVycygpO3ZhciBtO3JldHVybiB0aGlzLmNoZWNrTGF5b3V0U3VjY2VzcygpP209ITE6bT10aGlzLmxheW91dCgpLGkuQU5JTUFURT09PSJkdXJpbmciPyExOihtJiYodGhpcy5pc1N1YkxheW91dHx8dGhpcy5kb1Bvc3RMYXlvdXQoKSksdGhpcy50aWxpbmdQb3N0TGF5b3V0JiZ0aGlzLnRpbGluZ1Bvc3RMYXlvdXQoKSx0aGlzLmlzTGF5b3V0RmluaXNoZWQ9ITAsbSl9LHAucHJvdG90eXBlLmRvUG9zdExheW91dD1mdW5jdGlvbigpe3RoaXMuaW5jcmVtZW50YWx8fHRoaXMudHJhbnNmb3JtKCksdGhpcy51cGRhdGUoKX0scC5wcm90b3R5cGUudXBkYXRlMj1mdW5jdGlvbigpe2lmKHRoaXMuY3JlYXRlQmVuZHNBc05lZWRlZCYmKHRoaXMuY3JlYXRlQmVuZHBvaW50c0Zyb21EdW1teU5vZGVzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxFZGdlcygpKSwhdGhpcy5pc1JlbW90ZVVzZSl7Zm9yKHZhciBtLGc9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsRWRnZXMoKSx5PTA7eTxnLmxlbmd0aDt5KyspbT1nW3ldO2Zvcih2YXIgdix4PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXROb2RlcygpLHk9MDt5PHgubGVuZ3RoO3krKyl2PXhbeV07dGhpcy51cGRhdGUodGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpKX19LHAucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihtKXtpZihtPT1udWxsKXRoaXMudXBkYXRlMigpO2Vsc2UgaWYobSBpbnN0YW5jZW9mIHMpe3ZhciBnPW07aWYoZy5nZXRDaGlsZCgpIT1udWxsKWZvcih2YXIgeT1nLmdldENoaWxkKCkuZ2V0Tm9kZXMoKSx2PTA7djx5Lmxlbmd0aDt2KyspdXBkYXRlKHlbdl0pO2lmKGcudkdyYXBoT2JqZWN0IT1udWxsKXt2YXIgeD1nLnZHcmFwaE9iamVjdDt4LnVwZGF0ZShnKX19ZWxzZSBpZihtIGluc3RhbmNlb2YgbCl7dmFyIGI9bTtpZihiLnZHcmFwaE9iamVjdCE9bnVsbCl7dmFyIHc9Yi52R3JhcGhPYmplY3Q7dy51cGRhdGUoYil9fWVsc2UgaWYobSBpbnN0YW5jZW9mIHUpe3ZhciBfPW07aWYoXy52R3JhcGhPYmplY3QhPW51bGwpe3ZhciBUPV8udkdyYXBoT2JqZWN0O1QudXBkYXRlKF8pfX19LHAucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7dGhpcy5pc1N1YkxheW91dHx8KHRoaXMubGF5b3V0UXVhbGl0eT1pLlFVQUxJVFksdGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQ9aS5ERUZBVUxUX0FOSU1BVElPTl9EVVJJTkdfTEFZT1VULHRoaXMuYW5pbWF0aW9uUGVyaW9kPWkuREVGQVVMVF9BTklNQVRJT05fUEVSSU9ELHRoaXMuYW5pbWF0aW9uT25MYXlvdXQ9aS5ERUZBVUxUX0FOSU1BVElPTl9PTl9MQVlPVVQsdGhpcy5pbmNyZW1lbnRhbD1pLkRFRkFVTFRfSU5DUkVNRU5UQUwsdGhpcy5jcmVhdGVCZW5kc0FzTmVlZGVkPWkuREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVELHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXM9aS5ERUZBVUxUX1VOSUZPUk1fTEVBRl9OT0RFX1NJWkVTKSx0aGlzLmFuaW1hdGlvbkR1cmluZ0xheW91dCYmKHRoaXMuYW5pbWF0aW9uT25MYXlvdXQ9ITEpfSxwLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24obSl7aWYobT09bnVsbCl0aGlzLnRyYW5zZm9ybShuZXcgaCgwLDApKTtlbHNle3ZhciBnPW5ldyBmLHk9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLnVwZGF0ZUxlZnRUb3AoKTtpZih5IT1udWxsKXtnLnNldFdvcmxkT3JnWChtLngpLGcuc2V0V29ybGRPcmdZKG0ueSksZy5zZXREZXZpY2VPcmdYKHkueCksZy5zZXREZXZpY2VPcmdZKHkueSk7Zm9yKHZhciB2PXRoaXMuZ2V0QWxsTm9kZXMoKSx4LGI9MDtiPHYubGVuZ3RoO2IrKyl4PXZbYl0seC50cmFuc2Zvcm0oZyl9fX0scC5wcm90b3R5cGUucG9zaXRpb25Ob2Rlc1JhbmRvbWx5PWZ1bmN0aW9uKG0pe2lmKG09PW51bGwpdGhpcy5wb3NpdGlvbk5vZGVzUmFuZG9tbHkodGhpcy5nZXRHcmFwaE1hbmFnZXIoKS5nZXRSb290KCkpLHRoaXMuZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0Um9vdCgpLnVwZGF0ZUJvdW5kcyghMCk7ZWxzZSBmb3IodmFyIGcseSx2PW0uZ2V0Tm9kZXMoKSx4PTA7eDx2Lmxlbmd0aDt4KyspZz12W3hdLHk9Zy5nZXRDaGlsZCgpLHk9PW51bGx8fHkuZ2V0Tm9kZXMoKS5sZW5ndGg9PTA/Zy5zY2F0dGVyKCk6KHRoaXMucG9zaXRpb25Ob2Rlc1JhbmRvbWx5KHkpLGcudXBkYXRlQm91bmRzKCkpfSxwLnByb3RvdHlwZS5nZXRGbGF0Rm9yZXN0PWZ1bmN0aW9uKCl7Zm9yKHZhciBtPVtdLGc9ITAseT10aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKSx2PSEwLHg9MDt4PHkubGVuZ3RoO3grKyl5W3hdLmdldENoaWxkKCkhPW51bGwmJih2PSExKTtpZighdilyZXR1cm4gbTt2YXIgYj1uZXcgU2V0LHc9W10sXz1uZXcgTWFwLFQ9W107Zm9yKFQ9VC5jb25jYXQoeSk7VC5sZW5ndGg+MCYmZzspe2Zvcih3LnB1c2goVFswXSk7dy5sZW5ndGg+MCYmZzspe3ZhciBFPXdbMF07dy5zcGxpY2UoMCwxKSxiLmFkZChFKTtmb3IodmFyIEw9RS5nZXRFZGdlcygpLHg9MDt4PEwubGVuZ3RoO3grKyl7dmFyIFM9TFt4XS5nZXRPdGhlckVuZChFKTtpZihfLmdldChFKSE9UylpZighYi5oYXMoUykpdy5wdXNoKFMpLF8uc2V0KFMsRSk7ZWxzZXtnPSExO2JyZWFrfX19aWYoIWcpbT1bXTtlbHNle3ZhciBBPVtdLmNvbmNhdChuKGIpKTttLnB1c2goQSk7Zm9yKHZhciB4PTA7eDxBLmxlbmd0aDt4Kyspe3ZhciBJPUFbeF0sRD1ULmluZGV4T2YoSSk7RD4tMSYmVC5zcGxpY2UoRCwxKX1iPW5ldyBTZXQsXz1uZXcgTWFwfX1yZXR1cm4gbX0scC5wcm90b3R5cGUuY3JlYXRlRHVtbXlOb2Rlc0ZvckJlbmRwb2ludHM9ZnVuY3Rpb24obSl7Zm9yKHZhciBnPVtdLHk9bS5zb3VyY2Usdj10aGlzLmdyYXBoTWFuYWdlci5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3IobS5zb3VyY2UsbS50YXJnZXQpLHg9MDt4PG0uYmVuZHBvaW50cy5sZW5ndGg7eCsrKXt2YXIgYj10aGlzLm5ld05vZGUobnVsbCk7Yi5zZXRSZWN0KG5ldyBQb2ludCgwLDApLG5ldyBEaW1lbnNpb24oMSwxKSksdi5hZGQoYik7dmFyIHc9dGhpcy5uZXdFZGdlKG51bGwpO3RoaXMuZ3JhcGhNYW5hZ2VyLmFkZCh3LHksYiksZy5hZGQoYikseT1ifXZhciB3PXRoaXMubmV3RWRnZShudWxsKTtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuYWRkKHcseSxtLnRhcmdldCksdGhpcy5lZGdlVG9EdW1teU5vZGVzLnNldChtLGcpLG0uaXNJbnRlckdyYXBoKCk/dGhpcy5ncmFwaE1hbmFnZXIucmVtb3ZlKG0pOnYucmVtb3ZlKG0pLGd9LHAucHJvdG90eXBlLmNyZWF0ZUJlbmRwb2ludHNGcm9tRHVtbXlOb2Rlcz1mdW5jdGlvbigpe3ZhciBtPVtdO209bS5jb25jYXQodGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsRWRnZXMoKSksbT1bXS5jb25jYXQobih0aGlzLmVkZ2VUb0R1bW15Tm9kZXMua2V5cygpKSkuY29uY2F0KG0pO2Zvcih2YXIgZz0wO2c8bS5sZW5ndGg7ZysrKXt2YXIgeT1tW2ddO2lmKHkuYmVuZHBvaW50cy5sZW5ndGg+MCl7Zm9yKHZhciB2PXRoaXMuZWRnZVRvRHVtbXlOb2Rlcy5nZXQoeSkseD0wO3g8di5sZW5ndGg7eCsrKXt2YXIgYj12W3hdLHc9bmV3IGgoYi5nZXRDZW50ZXJYKCksYi5nZXRDZW50ZXJZKCkpLF89eS5iZW5kcG9pbnRzLmdldCh4KTtfLng9dy54LF8ueT13LnksYi5nZXRPd25lcigpLnJlbW92ZShiKX10aGlzLmdyYXBoTWFuYWdlci5hZGQoeSx5LnNvdXJjZSx5LnRhcmdldCl9fX0scC50cmFuc2Zvcm09ZnVuY3Rpb24obSxnLHksdil7aWYoeSE9bnVsbCYmdiE9bnVsbCl7dmFyIHg9ZztpZihtPD01MCl7dmFyIGI9Zy95O3gtPShnLWIpLzUwKig1MC1tKX1lbHNle3ZhciB3PWcqdjt4Kz0ody1nKS81MCoobS01MCl9cmV0dXJuIHh9ZWxzZXt2YXIgXyxUO3JldHVybiBtPD01MD8oXz05KmcvNTAwLFQ9Zy8xMCk6KF89OSpnLzUwLFQ9LTgqZyksXyptK1R9fSxwLmZpbmRDZW50ZXJPZlRyZWU9ZnVuY3Rpb24obSl7dmFyIGc9W107Zz1nLmNvbmNhdChtKTt2YXIgeT1bXSx2PW5ldyBNYXAseD0hMSxiPW51bGw7KGcubGVuZ3RoPT0xfHxnLmxlbmd0aD09MikmJih4PSEwLGI9Z1swXSk7Zm9yKHZhciB3PTA7dzxnLmxlbmd0aDt3Kyspe3ZhciBfPWdbd10sVD1fLmdldE5laWdoYm9yc0xpc3QoKS5zaXplO3Yuc2V0KF8sXy5nZXROZWlnaGJvcnNMaXN0KCkuc2l6ZSksVD09MSYmeS5wdXNoKF8pfXZhciBFPVtdO2ZvcihFPUUuY29uY2F0KHkpOyF4Oyl7dmFyIEw9W107TD1MLmNvbmNhdChFKSxFPVtdO2Zvcih2YXIgdz0wO3c8Zy5sZW5ndGg7dysrKXt2YXIgXz1nW3ddLFM9Zy5pbmRleE9mKF8pO1M+PTAmJmcuc3BsaWNlKFMsMSk7dmFyIEE9Xy5nZXROZWlnaGJvcnNMaXN0KCk7QS5mb3JFYWNoKGZ1bmN0aW9uKGspe2lmKHkuaW5kZXhPZihrKTwwKXt2YXIgUj12LmdldChrKSxDPVItMTtDPT0xJiZFLnB1c2goayksdi5zZXQoayxDKX19KX15PXkuY29uY2F0KEUpLChnLmxlbmd0aD09MXx8Zy5sZW5ndGg9PTIpJiYoeD0hMCxiPWdbMF0pfXJldHVybiBifSxwLnByb3RvdHlwZS5zZXRHcmFwaE1hbmFnZXI9ZnVuY3Rpb24obSl7dGhpcy5ncmFwaE1hbmFnZXI9bX0sdC5leHBvcnRzPXB9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe31vKG4sIlJhbmRvbVNlZWQiKSxuLnNlZWQ9MSxuLng9MCxuLm5leHREb3VibGU9ZnVuY3Rpb24oKXtyZXR1cm4gbi54PU1hdGguc2luKG4uc2VlZCsrKSoxZTQsbi54LU1hdGguZmxvb3Iobi54KX0sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cig0KTtmdW5jdGlvbiBpKGEscyl7dGhpcy5sd29ybGRPcmdYPTAsdGhpcy5sd29ybGRPcmdZPTAsdGhpcy5sZGV2aWNlT3JnWD0wLHRoaXMubGRldmljZU9yZ1k9MCx0aGlzLmx3b3JsZEV4dFg9MSx0aGlzLmx3b3JsZEV4dFk9MSx0aGlzLmxkZXZpY2VFeHRYPTEsdGhpcy5sZGV2aWNlRXh0WT0xfW8oaSwiVHJhbnNmb3JtIiksaS5wcm90b3R5cGUuZ2V0V29ybGRPcmdYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubHdvcmxkT3JnWH0saS5wcm90b3R5cGUuc2V0V29ybGRPcmdYPWZ1bmN0aW9uKGEpe3RoaXMubHdvcmxkT3JnWD1hfSxpLnByb3RvdHlwZS5nZXRXb3JsZE9yZ1k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sd29ybGRPcmdZfSxpLnByb3RvdHlwZS5zZXRXb3JsZE9yZ1k9ZnVuY3Rpb24oYSl7dGhpcy5sd29ybGRPcmdZPWF9LGkucHJvdG90eXBlLmdldFdvcmxkRXh0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmx3b3JsZEV4dFh9LGkucHJvdG90eXBlLnNldFdvcmxkRXh0WD1mdW5jdGlvbihhKXt0aGlzLmx3b3JsZEV4dFg9YX0saS5wcm90b3R5cGUuZ2V0V29ybGRFeHRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubHdvcmxkRXh0WX0saS5wcm90b3R5cGUuc2V0V29ybGRFeHRZPWZ1bmN0aW9uKGEpe3RoaXMubHdvcmxkRXh0WT1hfSxpLnByb3RvdHlwZS5nZXREZXZpY2VPcmdYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGRldmljZU9yZ1h9LGkucHJvdG90eXBlLnNldERldmljZU9yZ1g9ZnVuY3Rpb24oYSl7dGhpcy5sZGV2aWNlT3JnWD1hfSxpLnByb3RvdHlwZS5nZXREZXZpY2VPcmdZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGRldmljZU9yZ1l9LGkucHJvdG90eXBlLnNldERldmljZU9yZ1k9ZnVuY3Rpb24oYSl7dGhpcy5sZGV2aWNlT3JnWT1hfSxpLnByb3RvdHlwZS5nZXREZXZpY2VFeHRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGRldmljZUV4dFh9LGkucHJvdG90eXBlLnNldERldmljZUV4dFg9ZnVuY3Rpb24oYSl7dGhpcy5sZGV2aWNlRXh0WD1hfSxpLnByb3RvdHlwZS5nZXREZXZpY2VFeHRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGRldmljZUV4dFl9LGkucHJvdG90eXBlLnNldERldmljZUV4dFk9ZnVuY3Rpb24oYSl7dGhpcy5sZGV2aWNlRXh0WT1hfSxpLnByb3RvdHlwZS50cmFuc2Zvcm1YPWZ1bmN0aW9uKGEpe3ZhciBzPTAsbD10aGlzLmx3b3JsZEV4dFg7cmV0dXJuIGwhPTAmJihzPXRoaXMubGRldmljZU9yZ1grKGEtdGhpcy5sd29ybGRPcmdYKSp0aGlzLmxkZXZpY2VFeHRYL2wpLHN9LGkucHJvdG90eXBlLnRyYW5zZm9ybVk9ZnVuY3Rpb24oYSl7dmFyIHM9MCxsPXRoaXMubHdvcmxkRXh0WTtyZXR1cm4gbCE9MCYmKHM9dGhpcy5sZGV2aWNlT3JnWSsoYS10aGlzLmx3b3JsZE9yZ1kpKnRoaXMubGRldmljZUV4dFkvbCksc30saS5wcm90b3R5cGUuaW52ZXJzZVRyYW5zZm9ybVg9ZnVuY3Rpb24oYSl7dmFyIHM9MCxsPXRoaXMubGRldmljZUV4dFg7cmV0dXJuIGwhPTAmJihzPXRoaXMubHdvcmxkT3JnWCsoYS10aGlzLmxkZXZpY2VPcmdYKSp0aGlzLmx3b3JsZEV4dFgvbCksc30saS5wcm90b3R5cGUuaW52ZXJzZVRyYW5zZm9ybVk9ZnVuY3Rpb24oYSl7dmFyIHM9MCxsPXRoaXMubGRldmljZUV4dFk7cmV0dXJuIGwhPTAmJihzPXRoaXMubHdvcmxkT3JnWSsoYS10aGlzLmxkZXZpY2VPcmdZKSp0aGlzLmx3b3JsZEV4dFkvbCksc30saS5wcm90b3R5cGUuaW52ZXJzZVRyYW5zZm9ybVBvaW50PWZ1bmN0aW9uKGEpe3ZhciBzPW5ldyBuKHRoaXMuaW52ZXJzZVRyYW5zZm9ybVgoYS54KSx0aGlzLmludmVyc2VUcmFuc2Zvcm1ZKGEueSkpO3JldHVybiBzfSx0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGQpe2lmKEFycmF5LmlzQXJyYXkoZCkpe2Zvcih2YXIgcD0wLG09QXJyYXkoZC5sZW5ndGgpO3A8ZC5sZW5ndGg7cCsrKW1bcF09ZFtwXTtyZXR1cm4gbX1lbHNlIHJldHVybiBBcnJheS5mcm9tKGQpfW8obiwiX3RvQ29uc3VtYWJsZUFycmF5Iik7dmFyIGk9cigxNSksYT1yKDcpLHM9cigwKSxsPXIoOCksdT1yKDkpO2Z1bmN0aW9uIGgoKXtpLmNhbGwodGhpcyksdGhpcy51c2VTbWFydElkZWFsRWRnZUxlbmd0aENhbGN1bGF0aW9uPWEuREVGQVVMVF9VU0VfU01BUlRfSURFQUxfRURHRV9MRU5HVEhfQ0FMQ1VMQVRJT04sdGhpcy5pZGVhbEVkZ2VMZW5ndGg9YS5ERUZBVUxUX0VER0VfTEVOR1RILHRoaXMuc3ByaW5nQ29uc3RhbnQ9YS5ERUZBVUxUX1NQUklOR19TVFJFTkdUSCx0aGlzLnJlcHVsc2lvbkNvbnN0YW50PWEuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEgsdGhpcy5ncmF2aXR5Q29uc3RhbnQ9YS5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEgsdGhpcy5jb21wb3VuZEdyYXZpdHlDb25zdGFudD1hLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSCx0aGlzLmdyYXZpdHlSYW5nZUZhY3Rvcj1hLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1IsdGhpcy5jb21wb3VuZEdyYXZpdHlSYW5nZUZhY3Rvcj1hLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1IsdGhpcy5kaXNwbGFjZW1lbnRUaHJlc2hvbGRQZXJOb2RlPTMqYS5ERUZBVUxUX0VER0VfTEVOR1RILzEwMCx0aGlzLmNvb2xpbmdGYWN0b3I9YS5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMLHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3I9YS5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMLHRoaXMudG90YWxEaXNwbGFjZW1lbnQ9MCx0aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50PTAsdGhpcy5tYXhJdGVyYXRpb25zPWEuTUFYX0lURVJBVElPTlN9byhoLCJGRExheW91dCIpLGgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpO2Zvcih2YXIgZiBpbiBpKWhbZl09aVtmXTtoLnByb3RvdHlwZS5pbml0UGFyYW1ldGVycz1mdW5jdGlvbigpe2kucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzLmNhbGwodGhpcyxhcmd1bWVudHMpLHRoaXMudG90YWxJdGVyYXRpb25zPTAsdGhpcy5ub3RBbmltYXRlZEl0ZXJhdGlvbnM9MCx0aGlzLnVzZUZSR3JpZFZhcmlhbnQ9YS5ERUZBVUxUX1VTRV9TTUFSVF9SRVBVTFNJT05fUkFOR0VfQ0FMQ1VMQVRJT04sdGhpcy5ncmlkPVtdfSxoLnByb3RvdHlwZS5jYWxjSWRlYWxFZGdlTGVuZ3Rocz1mdW5jdGlvbigpe2Zvcih2YXIgZCxwLG0sZyx5LHYseD10aGlzLmdldEdyYXBoTWFuYWdlcigpLmdldEFsbEVkZ2VzKCksYj0wO2I8eC5sZW5ndGg7YisrKWQ9eFtiXSxkLmlkZWFsTGVuZ3RoPXRoaXMuaWRlYWxFZGdlTGVuZ3RoLGQuaXNJbnRlckdyYXBoJiYobT1kLmdldFNvdXJjZSgpLGc9ZC5nZXRUYXJnZXQoKSx5PWQuZ2V0U291cmNlSW5MY2EoKS5nZXRFc3RpbWF0ZWRTaXplKCksdj1kLmdldFRhcmdldEluTGNhKCkuZ2V0RXN0aW1hdGVkU2l6ZSgpLHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbiYmKGQuaWRlYWxMZW5ndGgrPXkrdi0yKnMuU0lNUExFX05PREVfU0laRSkscD1kLmdldExjYSgpLmdldEluY2x1c2lvblRyZWVEZXB0aCgpLGQuaWRlYWxMZW5ndGgrPWEuREVGQVVMVF9FREdFX0xFTkdUSCphLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1IqKG0uZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCkrZy5nZXRJbmNsdXNpb25UcmVlRGVwdGgoKS0yKnApKX0saC5wcm90b3R5cGUuaW5pdFNwcmluZ0VtYmVkZGVyPWZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5nZXRBbGxOb2RlcygpLmxlbmd0aDt0aGlzLmluY3JlbWVudGFsPyhkPmEuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUJiYodGhpcy5jb29saW5nRmFjdG9yPU1hdGgubWF4KHRoaXMuY29vbGluZ0ZhY3RvciphLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1IsdGhpcy5jb29saW5nRmFjdG9yLShkLWEuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKS8oYS5BREFQVEFUSU9OX1VQUEVSX05PREVfTElNSVQtYS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpKnRoaXMuY29vbGluZ0ZhY3RvciooMS1hLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1IpKSksdGhpcy5tYXhOb2RlRGlzcGxhY2VtZW50PWEuTUFYX05PREVfRElTUExBQ0VNRU5UX0lOQ1JFTUVOVEFMKTooZD5hLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVD90aGlzLmNvb2xpbmdGYWN0b3I9TWF0aC5tYXgoYS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SLDEtKGQtYS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpLyhhLkFEQVBUQVRJT05fVVBQRVJfTk9ERV9MSU1JVC1hLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCkqKDEtYS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SKSk6dGhpcy5jb29saW5nRmFjdG9yPTEsdGhpcy5pbml0aWFsQ29vbGluZ0ZhY3Rvcj10aGlzLmNvb2xpbmdGYWN0b3IsdGhpcy5tYXhOb2RlRGlzcGxhY2VtZW50PWEuTUFYX05PREVfRElTUExBQ0VNRU5UKSx0aGlzLm1heEl0ZXJhdGlvbnM9TWF0aC5tYXgodGhpcy5nZXRBbGxOb2RlcygpLmxlbmd0aCo1LHRoaXMubWF4SXRlcmF0aW9ucyksdGhpcy50b3RhbERpc3BsYWNlbWVudFRocmVzaG9sZD10aGlzLmRpc3BsYWNlbWVudFRocmVzaG9sZFBlck5vZGUqdGhpcy5nZXRBbGxOb2RlcygpLmxlbmd0aCx0aGlzLnJlcHVsc2lvblJhbmdlPXRoaXMuY2FsY1JlcHVsc2lvblJhbmdlKCl9LGgucHJvdG90eXBlLmNhbGNTcHJpbmdGb3JjZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGQ9dGhpcy5nZXRBbGxFZGdlcygpLHAsbT0wO208ZC5sZW5ndGg7bSsrKXA9ZFttXSx0aGlzLmNhbGNTcHJpbmdGb3JjZShwLHAuaWRlYWxMZW5ndGgpfSxoLnByb3RvdHlwZS5jYWxjUmVwdWxzaW9uRm9yY2VzPWZ1bmN0aW9uKCl7dmFyIGQ9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiEwLHA9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExLG0sZyx5LHYseD10aGlzLmdldEFsbE5vZGVzKCksYjtpZih0aGlzLnVzZUZSR3JpZFZhcmlhbnQpZm9yKHRoaXMudG90YWxJdGVyYXRpb25zJWEuR1JJRF9DQUxDVUxBVElPTl9DSEVDS19QRVJJT0Q9PTEmJmQmJnRoaXMudXBkYXRlR3JpZCgpLGI9bmV3IFNldCxtPTA7bTx4Lmxlbmd0aDttKyspeT14W21dLHRoaXMuY2FsY3VsYXRlUmVwdWxzaW9uRm9yY2VPZkFOb2RlKHksYixkLHApLGIuYWRkKHkpO2Vsc2UgZm9yKG09MDttPHgubGVuZ3RoO20rKylmb3IoeT14W21dLGc9bSsxO2c8eC5sZW5ndGg7ZysrKXY9eFtnXSx5LmdldE93bmVyKCk9PXYuZ2V0T3duZXIoKSYmdGhpcy5jYWxjUmVwdWxzaW9uRm9yY2UoeSx2KX0saC5wcm90b3R5cGUuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGQscD10aGlzLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCksbT0wO208cC5sZW5ndGg7bSsrKWQ9cFttXSx0aGlzLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2UoZCl9LGgucHJvdG90eXBlLm1vdmVOb2Rlcz1mdW5jdGlvbigpe2Zvcih2YXIgZD10aGlzLmdldEFsbE5vZGVzKCkscCxtPTA7bTxkLmxlbmd0aDttKyspcD1kW21dLHAubW92ZSgpfSxoLnByb3RvdHlwZS5jYWxjU3ByaW5nRm9yY2U9ZnVuY3Rpb24oZCxwKXt2YXIgbT1kLmdldFNvdXJjZSgpLGc9ZC5nZXRUYXJnZXQoKSx5LHYseCxiO2lmKHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXMmJm0uZ2V0Q2hpbGQoKT09bnVsbCYmZy5nZXRDaGlsZCgpPT1udWxsKWQudXBkYXRlTGVuZ3RoU2ltcGxlKCk7ZWxzZSBpZihkLnVwZGF0ZUxlbmd0aCgpLGQuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0KXJldHVybjt5PWQuZ2V0TGVuZ3RoKCkseSE9MCYmKHY9dGhpcy5zcHJpbmdDb25zdGFudCooeS1wKSx4PXYqKGQubGVuZ3RoWC95KSxiPXYqKGQubGVuZ3RoWS95KSxtLnNwcmluZ0ZvcmNlWCs9eCxtLnNwcmluZ0ZvcmNlWSs9YixnLnNwcmluZ0ZvcmNlWC09eCxnLnNwcmluZ0ZvcmNlWS09Yil9LGgucHJvdG90eXBlLmNhbGNSZXB1bHNpb25Gb3JjZT1mdW5jdGlvbihkLHApe3ZhciBtPWQuZ2V0UmVjdCgpLGc9cC5nZXRSZWN0KCkseT1uZXcgQXJyYXkoMiksdj1uZXcgQXJyYXkoNCkseCxiLHcsXyxULEUsTDtpZihtLmludGVyc2VjdHMoZykpe2wuY2FsY1NlcGFyYXRpb25BbW91bnQobSxnLHksYS5ERUZBVUxUX0VER0VfTEVOR1RILzIpLEU9Mip5WzBdLEw9Mip5WzFdO3ZhciBTPWQubm9PZkNoaWxkcmVuKnAubm9PZkNoaWxkcmVuLyhkLm5vT2ZDaGlsZHJlbitwLm5vT2ZDaGlsZHJlbik7ZC5yZXB1bHNpb25Gb3JjZVgtPVMqRSxkLnJlcHVsc2lvbkZvcmNlWS09UypMLHAucmVwdWxzaW9uRm9yY2VYKz1TKkUscC5yZXB1bHNpb25Gb3JjZVkrPVMqTH1lbHNlIHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXMmJmQuZ2V0Q2hpbGQoKT09bnVsbCYmcC5nZXRDaGlsZCgpPT1udWxsPyh4PWcuZ2V0Q2VudGVyWCgpLW0uZ2V0Q2VudGVyWCgpLGI9Zy5nZXRDZW50ZXJZKCktbS5nZXRDZW50ZXJZKCkpOihsLmdldEludGVyc2VjdGlvbihtLGcsdikseD12WzJdLXZbMF0sYj12WzNdLXZbMV0pLE1hdGguYWJzKHgpPGEuTUlOX1JFUFVMU0lPTl9ESVNUJiYoeD11LnNpZ24oeCkqYS5NSU5fUkVQVUxTSU9OX0RJU1QpLE1hdGguYWJzKGIpPGEuTUlOX1JFUFVMU0lPTl9ESVNUJiYoYj11LnNpZ24oYikqYS5NSU5fUkVQVUxTSU9OX0RJU1QpLHc9eCp4K2IqYixfPU1hdGguc3FydCh3KSxUPXRoaXMucmVwdWxzaW9uQ29uc3RhbnQqZC5ub09mQ2hpbGRyZW4qcC5ub09mQ2hpbGRyZW4vdyxFPVQqeC9fLEw9VCpiL18sZC5yZXB1bHNpb25Gb3JjZVgtPUUsZC5yZXB1bHNpb25Gb3JjZVktPUwscC5yZXB1bHNpb25Gb3JjZVgrPUUscC5yZXB1bHNpb25Gb3JjZVkrPUx9LGgucHJvdG90eXBlLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2U9ZnVuY3Rpb24oZCl7dmFyIHAsbSxnLHksdix4LGIsdztwPWQuZ2V0T3duZXIoKSxtPShwLmdldFJpZ2h0KCkrcC5nZXRMZWZ0KCkpLzIsZz0ocC5nZXRUb3AoKStwLmdldEJvdHRvbSgpKS8yLHk9ZC5nZXRDZW50ZXJYKCktbSx2PWQuZ2V0Q2VudGVyWSgpLWcseD1NYXRoLmFicyh5KStkLmdldFdpZHRoKCkvMixiPU1hdGguYWJzKHYpK2QuZ2V0SGVpZ2h0KCkvMixkLmdldE93bmVyKCk9PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKT8odz1wLmdldEVzdGltYXRlZFNpemUoKSp0aGlzLmdyYXZpdHlSYW5nZUZhY3RvciwoeD53fHxiPncpJiYoZC5ncmF2aXRhdGlvbkZvcmNlWD0tdGhpcy5ncmF2aXR5Q29uc3RhbnQqeSxkLmdyYXZpdGF0aW9uRm9yY2VZPS10aGlzLmdyYXZpdHlDb25zdGFudCp2KSk6KHc9cC5nZXRFc3RpbWF0ZWRTaXplKCkqdGhpcy5jb21wb3VuZEdyYXZpdHlSYW5nZUZhY3RvciwoeD53fHxiPncpJiYoZC5ncmF2aXRhdGlvbkZvcmNlWD0tdGhpcy5ncmF2aXR5Q29uc3RhbnQqeSp0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50LGQuZ3Jhdml0YXRpb25Gb3JjZVk9LXRoaXMuZ3Jhdml0eUNvbnN0YW50KnYqdGhpcy5jb21wb3VuZEdyYXZpdHlDb25zdGFudCkpfSxoLnByb3RvdHlwZS5pc0NvbnZlcmdlZD1mdW5jdGlvbigpe3ZhciBkLHA9ITE7cmV0dXJuIHRoaXMudG90YWxJdGVyYXRpb25zPnRoaXMubWF4SXRlcmF0aW9ucy8zJiYocD1NYXRoLmFicyh0aGlzLnRvdGFsRGlzcGxhY2VtZW50LXRoaXMub2xkVG90YWxEaXNwbGFjZW1lbnQpPDIpLGQ9dGhpcy50b3RhbERpc3BsYWNlbWVudDx0aGlzLnRvdGFsRGlzcGxhY2VtZW50VGhyZXNob2xkLHRoaXMub2xkVG90YWxEaXNwbGFjZW1lbnQ9dGhpcy50b3RhbERpc3BsYWNlbWVudCxkfHxwfSxoLnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKCl7dGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQmJiF0aGlzLmlzU3ViTGF5b3V0JiYodGhpcy5ub3RBbmltYXRlZEl0ZXJhdGlvbnM9PXRoaXMuYW5pbWF0aW9uUGVyaW9kPyh0aGlzLnVwZGF0ZSgpLHRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zPTApOnRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zKyspfSxoLnByb3RvdHlwZS5jYWxjTm9PZkNoaWxkcmVuRm9yQWxsTm9kZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGQscD10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLG09MDttPHAubGVuZ3RoO20rKylkPXBbbV0sZC5ub09mQ2hpbGRyZW49ZC5nZXROb09mQ2hpbGRyZW4oKX0saC5wcm90b3R5cGUuY2FsY0dyaWQ9ZnVuY3Rpb24oZCl7dmFyIHA9MCxtPTA7cD1wYXJzZUludChNYXRoLmNlaWwoKGQuZ2V0UmlnaHQoKS1kLmdldExlZnQoKSkvdGhpcy5yZXB1bHNpb25SYW5nZSkpLG09cGFyc2VJbnQoTWF0aC5jZWlsKChkLmdldEJvdHRvbSgpLWQuZ2V0VG9wKCkpL3RoaXMucmVwdWxzaW9uUmFuZ2UpKTtmb3IodmFyIGc9bmV3IEFycmF5KHApLHk9MDt5PHA7eSsrKWdbeV09bmV3IEFycmF5KG0pO2Zvcih2YXIgeT0wO3k8cDt5KyspZm9yKHZhciB2PTA7djxtO3YrKylnW3ldW3ZdPW5ldyBBcnJheTtyZXR1cm4gZ30saC5wcm90b3R5cGUuYWRkTm9kZVRvR3JpZD1mdW5jdGlvbihkLHAsbSl7dmFyIGc9MCx5PTAsdj0wLHg9MDtnPXBhcnNlSW50KE1hdGguZmxvb3IoKGQuZ2V0UmVjdCgpLngtcCkvdGhpcy5yZXB1bHNpb25SYW5nZSkpLHk9cGFyc2VJbnQoTWF0aC5mbG9vcigoZC5nZXRSZWN0KCkud2lkdGgrZC5nZXRSZWN0KCkueC1wKS90aGlzLnJlcHVsc2lvblJhbmdlKSksdj1wYXJzZUludChNYXRoLmZsb29yKChkLmdldFJlY3QoKS55LW0pL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSx4PXBhcnNlSW50KE1hdGguZmxvb3IoKGQuZ2V0UmVjdCgpLmhlaWdodCtkLmdldFJlY3QoKS55LW0pL3RoaXMucmVwdWxzaW9uUmFuZ2UpKTtmb3IodmFyIGI9ZztiPD15O2IrKylmb3IodmFyIHc9djt3PD14O3crKyl0aGlzLmdyaWRbYl1bd10ucHVzaChkKSxkLnNldEdyaWRDb29yZGluYXRlcyhnLHksdix4KX0saC5wcm90b3R5cGUudXBkYXRlR3JpZD1mdW5jdGlvbigpe3ZhciBkLHAsbT10aGlzLmdldEFsbE5vZGVzKCk7Zm9yKHRoaXMuZ3JpZD10aGlzLmNhbGNHcmlkKHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKSksZD0wO2Q8bS5sZW5ndGg7ZCsrKXA9bVtkXSx0aGlzLmFkZE5vZGVUb0dyaWQocCx0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0TGVmdCgpLHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXRUb3AoKSl9LGgucHJvdG90eXBlLmNhbGN1bGF0ZVJlcHVsc2lvbkZvcmNlT2ZBTm9kZT1mdW5jdGlvbihkLHAsbSxnKXtpZih0aGlzLnRvdGFsSXRlcmF0aW9ucyVhLkdSSURfQ0FMQ1VMQVRJT05fQ0hFQ0tfUEVSSU9EPT0xJiZtfHxnKXt2YXIgeT1uZXcgU2V0O2Quc3Vycm91bmRpbmc9bmV3IEFycmF5O2Zvcih2YXIgdix4PXRoaXMuZ3JpZCxiPWQuc3RhcnRYLTE7YjxkLmZpbmlzaFgrMjtiKyspZm9yKHZhciB3PWQuc3RhcnRZLTE7dzxkLmZpbmlzaFkrMjt3KyspaWYoIShiPDB8fHc8MHx8Yj49eC5sZW5ndGh8fHc+PXhbMF0ubGVuZ3RoKSl7Zm9yKHZhciBfPTA7Xzx4W2JdW3ddLmxlbmd0aDtfKyspaWYodj14W2JdW3ddW19dLCEoZC5nZXRPd25lcigpIT12LmdldE93bmVyKCl8fGQ9PXYpJiYhcC5oYXModikmJiF5Lmhhcyh2KSl7dmFyIFQ9TWF0aC5hYnMoZC5nZXRDZW50ZXJYKCktdi5nZXRDZW50ZXJYKCkpLShkLmdldFdpZHRoKCkvMit2LmdldFdpZHRoKCkvMiksRT1NYXRoLmFicyhkLmdldENlbnRlclkoKS12LmdldENlbnRlclkoKSktKGQuZ2V0SGVpZ2h0KCkvMit2LmdldEhlaWdodCgpLzIpO1Q8PXRoaXMucmVwdWxzaW9uUmFuZ2UmJkU8PXRoaXMucmVwdWxzaW9uUmFuZ2UmJnkuYWRkKHYpfX1kLnN1cnJvdW5kaW5nPVtdLmNvbmNhdChuKHkpKX1mb3IoYj0wO2I8ZC5zdXJyb3VuZGluZy5sZW5ndGg7YisrKXRoaXMuY2FsY1JlcHVsc2lvbkZvcmNlKGQsZC5zdXJyb3VuZGluZ1tiXSl9LGgucHJvdG90eXBlLmNhbGNSZXB1bHNpb25SYW5nZT1mdW5jdGlvbigpe3JldHVybiAwfSx0LmV4cG9ydHM9aH0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEpLGk9cig3KTtmdW5jdGlvbiBhKGwsdSxoKXtuLmNhbGwodGhpcyxsLHUsaCksdGhpcy5pZGVhbExlbmd0aD1pLkRFRkFVTFRfRURHRV9MRU5HVEh9byhhLCJGRExheW91dEVkZ2UiKSxhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKTtmb3IodmFyIHMgaW4gbilhW3NdPW5bc107dC5leHBvcnRzPWF9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigzKTtmdW5jdGlvbiBpKHMsbCx1LGgpe24uY2FsbCh0aGlzLHMsbCx1LGgpLHRoaXMuc3ByaW5nRm9yY2VYPTAsdGhpcy5zcHJpbmdGb3JjZVk9MCx0aGlzLnJlcHVsc2lvbkZvcmNlWD0wLHRoaXMucmVwdWxzaW9uRm9yY2VZPTAsdGhpcy5ncmF2aXRhdGlvbkZvcmNlWD0wLHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVk9MCx0aGlzLmRpc3BsYWNlbWVudFg9MCx0aGlzLmRpc3BsYWNlbWVudFk9MCx0aGlzLnN0YXJ0WD0wLHRoaXMuZmluaXNoWD0wLHRoaXMuc3RhcnRZPTAsdGhpcy5maW5pc2hZPTAsdGhpcy5zdXJyb3VuZGluZz1bXX1vKGksIkZETGF5b3V0Tm9kZSIpLGkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpO2Zvcih2YXIgYSBpbiBuKWlbYV09blthXTtpLnByb3RvdHlwZS5zZXRHcmlkQ29vcmRpbmF0ZXM9ZnVuY3Rpb24ocyxsLHUsaCl7dGhpcy5zdGFydFg9cyx0aGlzLmZpbmlzaFg9bCx0aGlzLnN0YXJ0WT11LHRoaXMuZmluaXNoWT1ofSx0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGksYSl7dGhpcy53aWR0aD0wLHRoaXMuaGVpZ2h0PTAsaSE9PW51bGwmJmEhPT1udWxsJiYodGhpcy5oZWlnaHQ9YSx0aGlzLndpZHRoPWkpfW8obiwiRGltZW5zaW9uRCIpLG4ucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2lkdGh9LG4ucHJvdG90eXBlLnNldFdpZHRoPWZ1bmN0aW9uKGkpe3RoaXMud2lkdGg9aX0sbi5wcm90b3R5cGUuZ2V0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVpZ2h0fSxuLnByb3RvdHlwZS5zZXRIZWlnaHQ9ZnVuY3Rpb24oaSl7dGhpcy5oZWlnaHQ9aX0sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxNCk7ZnVuY3Rpb24gaSgpe3RoaXMubWFwPXt9LHRoaXMua2V5cz1bXX1vKGksIkhhc2hNYXAiKSxpLnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24oYSxzKXt2YXIgbD1uLmNyZWF0ZUlEKGEpO3RoaXMuY29udGFpbnMobCl8fCh0aGlzLm1hcFtsXT1zLHRoaXMua2V5cy5wdXNoKGEpKX0saS5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oYSl7dmFyIHM9bi5jcmVhdGVJRChhKTtyZXR1cm4gdGhpcy5tYXBbYV0hPW51bGx9LGkucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXt2YXIgcz1uLmNyZWF0ZUlEKGEpO3JldHVybiB0aGlzLm1hcFtzXX0saS5wcm90b3R5cGUua2V5U2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua2V5c30sdC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxNCk7ZnVuY3Rpb24gaSgpe3RoaXMuc2V0PXt9fW8oaSwiSGFzaFNldCIpLGkucHJvdG90eXBlLmFkZD1mdW5jdGlvbihhKXt2YXIgcz1uLmNyZWF0ZUlEKGEpO3RoaXMuY29udGFpbnMocyl8fCh0aGlzLnNldFtzXT1hKX0saS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGEpe2RlbGV0ZSB0aGlzLnNldFtuLmNyZWF0ZUlEKGEpXX0saS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnNldD17fX0saS5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuc2V0W24uY3JlYXRlSUQoYSldPT1hfSxpLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZSgpPT09MH0saS5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLnNldCkubGVuZ3RofSxpLnByb3RvdHlwZS5hZGRBbGxUbz1mdW5jdGlvbihhKXtmb3IodmFyIHM9T2JqZWN0LmtleXModGhpcy5zZXQpLGw9cy5sZW5ndGgsdT0wO3U8bDt1KyspYS5wdXNoKHRoaXMuc2V0W3NbdV1dKX0saS5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLnNldCkubGVuZ3RofSxpLnByb3RvdHlwZS5hZGRBbGw9ZnVuY3Rpb24oYSl7Zm9yKHZhciBzPWEubGVuZ3RoLGw9MDtsPHM7bCsrKXt2YXIgdT1hW2xdO3RoaXMuYWRkKHUpfX0sdC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKHUsaCl7Zm9yKHZhciBmPTA7ZjxoLmxlbmd0aDtmKyspe3ZhciBkPWhbZl07ZC5lbnVtZXJhYmxlPWQuZW51bWVyYWJsZXx8ITEsZC5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGQmJihkLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodSxkLmtleSxkKX19cmV0dXJuIG8obCwiZGVmaW5lUHJvcGVydGllcyIpLGZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gaCYmbCh1LnByb3RvdHlwZSxoKSxmJiZsKHUsZiksdX19KCk7ZnVuY3Rpb24gaShsLHUpe2lmKCEobCBpbnN0YW5jZW9mIHUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfW8oaSwiX2NsYXNzQ2FsbENoZWNrIik7dmFyIGE9cigxMSkscz1mdW5jdGlvbigpe2Z1bmN0aW9uIGwodSxoKXtpKHRoaXMsbCksKGghPT1udWxsfHxoIT09dm9pZCAwKSYmKHRoaXMuY29tcGFyZUZ1bmN0aW9uPXRoaXMuX2RlZmF1bHRDb21wYXJlRnVuY3Rpb24pO3ZhciBmPXZvaWQgMDt1IGluc3RhbmNlb2YgYT9mPXUuc2l6ZSgpOmY9dS5sZW5ndGgsdGhpcy5fcXVpY2tzb3J0KHUsMCxmLTEpfXJldHVybiBvKGwsIlF1aWNrc29ydCIpLG4obCxbe2tleToiX3F1aWNrc29ydCIsdmFsdWU6byhmdW5jdGlvbihoLGYsZCl7aWYoZjxkKXt2YXIgcD10aGlzLl9wYXJ0aXRpb24oaCxmLGQpO3RoaXMuX3F1aWNrc29ydChoLGYscCksdGhpcy5fcXVpY2tzb3J0KGgscCsxLGQpfX0sIl9xdWlja3NvcnQiKX0se2tleToiX3BhcnRpdGlvbiIsdmFsdWU6byhmdW5jdGlvbihoLGYsZCl7Zm9yKHZhciBwPXRoaXMuX2dldChoLGYpLG09ZixnPWQ7Oyl7Zm9yKDt0aGlzLmNvbXBhcmVGdW5jdGlvbihwLHRoaXMuX2dldChoLGcpKTspZy0tO2Zvcig7dGhpcy5jb21wYXJlRnVuY3Rpb24odGhpcy5fZ2V0KGgsbSkscCk7KW0rKztpZihtPGcpdGhpcy5fc3dhcChoLG0sZyksbSsrLGctLTtlbHNlIHJldHVybiBnfX0sIl9wYXJ0aXRpb24iKX0se2tleToiX2dldCIsdmFsdWU6byhmdW5jdGlvbihoLGYpe3JldHVybiBoIGluc3RhbmNlb2YgYT9oLmdldF9vYmplY3RfYXQoZik6aFtmXX0sIl9nZXQiKX0se2tleToiX3NldCIsdmFsdWU6byhmdW5jdGlvbihoLGYsZCl7aCBpbnN0YW5jZW9mIGE/aC5zZXRfb2JqZWN0X2F0KGYsZCk6aFtmXT1kfSwiX3NldCIpfSx7a2V5OiJfc3dhcCIsdmFsdWU6byhmdW5jdGlvbihoLGYsZCl7dmFyIHA9dGhpcy5fZ2V0KGgsZik7dGhpcy5fc2V0KGgsZix0aGlzLl9nZXQoaCxkKSksdGhpcy5fc2V0KGgsZCxwKX0sIl9zd2FwIil9LHtrZXk6Il9kZWZhdWx0Q29tcGFyZUZ1bmN0aW9uIix2YWx1ZTpvKGZ1bmN0aW9uKGgsZil7cmV0dXJuIGY+aH0sIl9kZWZhdWx0Q29tcGFyZUZ1bmN0aW9uIil9XSksbH0oKTt0LmV4cG9ydHM9c30sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHMobCx1KXtmb3IodmFyIGg9MDtoPHUubGVuZ3RoO2grKyl7dmFyIGY9dVtoXTtmLmVudW1lcmFibGU9Zi5lbnVtZXJhYmxlfHwhMSxmLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZiYmKGYud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGYua2V5LGYpfX1yZXR1cm4gbyhzLCJkZWZpbmVQcm9wZXJ0aWVzIiksZnVuY3Rpb24obCx1LGgpe3JldHVybiB1JiZzKGwucHJvdG90eXBlLHUpLGgmJnMobCxoKSxsfX0oKTtmdW5jdGlvbiBpKHMsbCl7aWYoIShzIGluc3RhbmNlb2YgbCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9byhpLCJfY2xhc3NDYWxsQ2hlY2siKTt2YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHMobCx1KXt2YXIgaD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06MSxmPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTotMSxkPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTotMTtpKHRoaXMscyksdGhpcy5zZXF1ZW5jZTE9bCx0aGlzLnNlcXVlbmNlMj11LHRoaXMubWF0Y2hfc2NvcmU9aCx0aGlzLm1pc21hdGNoX3BlbmFsdHk9Zix0aGlzLmdhcF9wZW5hbHR5PWQsdGhpcy5pTWF4PWwubGVuZ3RoKzEsdGhpcy5qTWF4PXUubGVuZ3RoKzEsdGhpcy5ncmlkPW5ldyBBcnJheSh0aGlzLmlNYXgpO2Zvcih2YXIgcD0wO3A8dGhpcy5pTWF4O3ArKyl7dGhpcy5ncmlkW3BdPW5ldyBBcnJheSh0aGlzLmpNYXgpO2Zvcih2YXIgbT0wO208dGhpcy5qTWF4O20rKyl0aGlzLmdyaWRbcF1bbV09MH10aGlzLnRyYWNlYmFja0dyaWQ9bmV3IEFycmF5KHRoaXMuaU1heCk7Zm9yKHZhciBnPTA7Zzx0aGlzLmlNYXg7ZysrKXt0aGlzLnRyYWNlYmFja0dyaWRbZ109bmV3IEFycmF5KHRoaXMuak1heCk7Zm9yKHZhciB5PTA7eTx0aGlzLmpNYXg7eSsrKXRoaXMudHJhY2ViYWNrR3JpZFtnXVt5XT1bbnVsbCxudWxsLG51bGxdfXRoaXMuYWxpZ25tZW50cz1bXSx0aGlzLnNjb3JlPS0xLHRoaXMuY29tcHV0ZUdyaWRzKCl9cmV0dXJuIG8ocywiTmVlZGxlbWFuV3Vuc2NoIiksbihzLFt7a2V5OiJnZXRTY29yZSIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLnNjb3JlfSwiZ2V0U2NvcmUiKX0se2tleToiZ2V0QWxpZ25tZW50cyIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmFsaWdubWVudHN9LCJnZXRBbGlnbm1lbnRzIil9LHtrZXk6ImNvbXB1dGVHcmlkcyIsdmFsdWU6byhmdW5jdGlvbigpe2Zvcih2YXIgdT0xO3U8dGhpcy5qTWF4O3UrKyl0aGlzLmdyaWRbMF1bdV09dGhpcy5ncmlkWzBdW3UtMV0rdGhpcy5nYXBfcGVuYWx0eSx0aGlzLnRyYWNlYmFja0dyaWRbMF1bdV09WyExLCExLCEwXTtmb3IodmFyIGg9MTtoPHRoaXMuaU1heDtoKyspdGhpcy5ncmlkW2hdWzBdPXRoaXMuZ3JpZFtoLTFdWzBdK3RoaXMuZ2FwX3BlbmFsdHksdGhpcy50cmFjZWJhY2tHcmlkW2hdWzBdPVshMSwhMCwhMV07Zm9yKHZhciBmPTE7Zjx0aGlzLmlNYXg7ZisrKWZvcih2YXIgZD0xO2Q8dGhpcy5qTWF4O2QrKyl7dmFyIHA9dm9pZCAwO3RoaXMuc2VxdWVuY2UxW2YtMV09PT10aGlzLnNlcXVlbmNlMltkLTFdP3A9dGhpcy5ncmlkW2YtMV1bZC0xXSt0aGlzLm1hdGNoX3Njb3JlOnA9dGhpcy5ncmlkW2YtMV1bZC0xXSt0aGlzLm1pc21hdGNoX3BlbmFsdHk7dmFyIG09dGhpcy5ncmlkW2YtMV1bZF0rdGhpcy5nYXBfcGVuYWx0eSxnPXRoaXMuZ3JpZFtmXVtkLTFdK3RoaXMuZ2FwX3BlbmFsdHkseT1bcCxtLGddLHY9dGhpcy5hcnJheUFsbE1heEluZGV4ZXMoeSk7dGhpcy5ncmlkW2ZdW2RdPXlbdlswXV0sdGhpcy50cmFjZWJhY2tHcmlkW2ZdW2RdPVt2LmluY2x1ZGVzKDApLHYuaW5jbHVkZXMoMSksdi5pbmNsdWRlcygyKV19dGhpcy5zY29yZT10aGlzLmdyaWRbdGhpcy5pTWF4LTFdW3RoaXMuak1heC0xXX0sImNvbXB1dGVHcmlkcyIpfSx7a2V5OiJhbGlnbm1lbnRUcmFjZWJhY2siLHZhbHVlOm8oZnVuY3Rpb24oKXt2YXIgdT1bXTtmb3IodS5wdXNoKHtwb3M6W3RoaXMuc2VxdWVuY2UxLmxlbmd0aCx0aGlzLnNlcXVlbmNlMi5sZW5ndGhdLHNlcTE6IiIsc2VxMjoiIn0pO3VbMF07KXt2YXIgaD11WzBdLGY9dGhpcy50cmFjZWJhY2tHcmlkW2gucG9zWzBdXVtoLnBvc1sxXV07ZlswXSYmdS5wdXNoKHtwb3M6W2gucG9zWzBdLTEsaC5wb3NbMV0tMV0sc2VxMTp0aGlzLnNlcXVlbmNlMVtoLnBvc1swXS0xXStoLnNlcTEsc2VxMjp0aGlzLnNlcXVlbmNlMltoLnBvc1sxXS0xXStoLnNlcTJ9KSxmWzFdJiZ1LnB1c2goe3BvczpbaC5wb3NbMF0tMSxoLnBvc1sxXV0sc2VxMTp0aGlzLnNlcXVlbmNlMVtoLnBvc1swXS0xXStoLnNlcTEsc2VxMjoiLSIraC5zZXEyfSksZlsyXSYmdS5wdXNoKHtwb3M6W2gucG9zWzBdLGgucG9zWzFdLTFdLHNlcTE6Ii0iK2guc2VxMSxzZXEyOnRoaXMuc2VxdWVuY2UyW2gucG9zWzFdLTFdK2guc2VxMn0pLGgucG9zWzBdPT09MCYmaC5wb3NbMV09PT0wJiZ0aGlzLmFsaWdubWVudHMucHVzaCh7c2VxdWVuY2UxOmguc2VxMSxzZXF1ZW5jZTI6aC5zZXEyfSksdS5zaGlmdCgpfXJldHVybiB0aGlzLmFsaWdubWVudHN9LCJhbGlnbm1lbnRUcmFjZWJhY2siKX0se2tleToiZ2V0QWxsSW5kZXhlcyIsdmFsdWU6byhmdW5jdGlvbih1LGgpe2Zvcih2YXIgZj1bXSxkPS0xOyhkPXUuaW5kZXhPZihoLGQrMSkpIT09LTE7KWYucHVzaChkKTtyZXR1cm4gZn0sImdldEFsbEluZGV4ZXMiKX0se2tleToiYXJyYXlBbGxNYXhJbmRleGVzIix2YWx1ZTpvKGZ1bmN0aW9uKHUpe3JldHVybiB0aGlzLmdldEFsbEluZGV4ZXModSxNYXRoLm1heC5hcHBseShudWxsLHUpKX0sImFycmF5QWxsTWF4SW5kZXhlcyIpfV0pLHN9KCk7dC5leHBvcnRzPWF9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49byhmdW5jdGlvbigpe30sImxheW91dEJhc2UiKTtuLkZETGF5b3V0PXIoMTgpLG4uRkRMYXlvdXRDb25zdGFudHM9cig3KSxuLkZETGF5b3V0RWRnZT1yKDE5KSxuLkZETGF5b3V0Tm9kZT1yKDIwKSxuLkRpbWVuc2lvbkQ9cigyMSksbi5IYXNoTWFwPXIoMjIpLG4uSGFzaFNldD1yKDIzKSxuLklHZW9tZXRyeT1yKDgpLG4uSU1hdGg9cig5KSxuLkludGVnZXI9cigxMCksbi5Qb2ludD1yKDEyKSxuLlBvaW50RD1yKDQpLG4uUmFuZG9tU2VlZD1yKDE2KSxuLlJlY3RhbmdsZUQ9cigxMyksbi5UcmFuc2Zvcm09cigxNyksbi5VbmlxdWVJREdlbmVyZXRvcj1yKDE0KSxuLlF1aWNrc29ydD1yKDI0KSxuLkxpbmtlZExpc3Q9cigxMSksbi5MR3JhcGhPYmplY3Q9cigyKSxuLkxHcmFwaD1yKDUpLG4uTEVkZ2U9cigxKSxuLkxHcmFwaE1hbmFnZXI9cig2KSxuLkxOb2RlPXIoMyksbi5MYXlvdXQ9cigxNSksbi5MYXlvdXRDb25zdGFudHM9cigwKSxuLk5lZWRsZW1hbld1bnNjaD1yKDI1KSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7dGhpcy5saXN0ZW5lcnM9W119byhuLCJFbWl0dGVyIik7dmFyIGk9bi5wcm90b3R5cGU7aS5hZGRMaXN0ZW5lcj1mdW5jdGlvbihhLHMpe3RoaXMubGlzdGVuZXJzLnB1c2goe2V2ZW50OmEsY2FsbGJhY2s6c30pfSxpLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKGEscyl7Zm9yKHZhciBsPXRoaXMubGlzdGVuZXJzLmxlbmd0aDtsPj0wO2wtLSl7dmFyIHU9dGhpcy5saXN0ZW5lcnNbbF07dS5ldmVudD09PWEmJnUuY2FsbGJhY2s9PT1zJiZ0aGlzLmxpc3RlbmVycy5zcGxpY2UobCwxKX19LGkuZW1pdD1mdW5jdGlvbihhLHMpe2Zvcih2YXIgbD0wO2w8dGhpcy5saXN0ZW5lcnMubGVuZ3RoO2wrKyl7dmFyIHU9dGhpcy5saXN0ZW5lcnNbbF07YT09PXUuZXZlbnQmJnUuY2FsbGJhY2socyl9fSx0LmV4cG9ydHM9bn1dKX0pfSk7dmFyIExCPUVpKChrYixfQik9PnsidXNlIHN0cmljdCI7byhmdW5jdGlvbihlLHIpe3R5cGVvZiBrYj09Im9iamVjdCImJnR5cGVvZiBfQj09Im9iamVjdCI/X0IuZXhwb3J0cz1yKEFCKCkpOnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKFsibGF5b3V0LWJhc2UiXSxyKTp0eXBlb2Yga2I9PSJvYmplY3QiP2tiLmNvc2VCYXNlPXIoQUIoKSk6ZS5jb3NlQmFzZT1yKGUubGF5b3V0QmFzZSl9LCJ3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIpKGtiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj17fTtmdW5jdGlvbiBuKGkpe2lmKHJbaV0pcmV0dXJuIHJbaV0uZXhwb3J0czt2YXIgYT1yW2ldPXtpLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIGVbaV0uY2FsbChhLmV4cG9ydHMsYSxhLmV4cG9ydHMsbiksYS5sPSEwLGEuZXhwb3J0c31yZXR1cm4gbyhuLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiksbi5tPWUsbi5jPXIsbi5pPWZ1bmN0aW9uKGkpe3JldHVybiBpfSxuLmQ9ZnVuY3Rpb24oaSxhLHMpe24ubyhpLGEpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxhLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6c30pfSxuLm49ZnVuY3Rpb24oaSl7dmFyIGE9aSYmaS5fX2VzTW9kdWxlP28oZnVuY3Rpb24oKXtyZXR1cm4gaS5kZWZhdWx0fSwiZ2V0RGVmYXVsdCIpOm8oZnVuY3Rpb24oKXtyZXR1cm4gaX0sImdldE1vZHVsZUV4cG9ydHMiKTtyZXR1cm4gbi5kKGEsImEiLGEpLGF9LG4ubz1mdW5jdGlvbihpLGEpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxhKX0sbi5wPSIiLG4obi5zPTcpfShbZnVuY3Rpb24oZSxyKXtlLmV4cG9ydHM9dH0sZnVuY3Rpb24oZSxyLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKDApLkZETGF5b3V0Q29uc3RhbnRzO2Z1bmN0aW9uIGEoKXt9byhhLCJDb1NFQ29uc3RhbnRzIik7Zm9yKHZhciBzIGluIGkpYVtzXT1pW3NdO2EuREVGQVVMVF9VU0VfTVVMVElfTEVWRUxfU0NBTElORz0hMSxhLkRFRkFVTFRfUkFESUFMX1NFUEFSQVRJT049aS5ERUZBVUxUX0VER0VfTEVOR1RILGEuREVGQVVMVF9DT01QT05FTlRfU0VQRVJBVElPTj02MCxhLlRJTEU9ITAsYS5USUxJTkdfUEFERElOR19WRVJUSUNBTD0xMCxhLlRJTElOR19QQURESU5HX0hPUklaT05UQUw9MTAsYS5UUkVFX1JFRFVDVElPTl9PTl9JTkNSRU1FTlRBTD0hMSxlLmV4cG9ydHM9YX0sZnVuY3Rpb24oZSxyLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKDApLkZETGF5b3V0RWRnZTtmdW5jdGlvbiBhKGwsdSxoKXtpLmNhbGwodGhpcyxsLHUsaCl9byhhLCJDb1NFRWRnZSIpLGEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpO2Zvcih2YXIgcyBpbiBpKWFbc109aVtzXTtlLmV4cG9ydHM9YX0sZnVuY3Rpb24oZSxyLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKDApLkxHcmFwaDtmdW5jdGlvbiBhKGwsdSxoKXtpLmNhbGwodGhpcyxsLHUsaCl9byhhLCJDb1NFR3JhcGgiKSxhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKTtmb3IodmFyIHMgaW4gaSlhW3NdPWlbc107ZS5leHBvcnRzPWF9LGZ1bmN0aW9uKGUscixuKXsidXNlIHN0cmljdCI7dmFyIGk9bigwKS5MR3JhcGhNYW5hZ2VyO2Z1bmN0aW9uIGEobCl7aS5jYWxsKHRoaXMsbCl9byhhLCJDb1NFR3JhcGhNYW5hZ2VyIiksYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSk7Zm9yKHZhciBzIGluIGkpYVtzXT1pW3NdO2UuZXhwb3J0cz1hfSxmdW5jdGlvbihlLHIsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oMCkuRkRMYXlvdXROb2RlLGE9bigwKS5JTWF0aDtmdW5jdGlvbiBzKHUsaCxmLGQpe2kuY2FsbCh0aGlzLHUsaCxmLGQpfW8ocywiQ29TRU5vZGUiKSxzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKTtmb3IodmFyIGwgaW4gaSlzW2xdPWlbbF07cy5wcm90b3R5cGUubW92ZT1mdW5jdGlvbigpe3ZhciB1PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldExheW91dCgpO3RoaXMuZGlzcGxhY2VtZW50WD11LmNvb2xpbmdGYWN0b3IqKHRoaXMuc3ByaW5nRm9yY2VYK3RoaXMucmVwdWxzaW9uRm9yY2VYK3RoaXMuZ3Jhdml0YXRpb25Gb3JjZVgpL3RoaXMubm9PZkNoaWxkcmVuLHRoaXMuZGlzcGxhY2VtZW50WT11LmNvb2xpbmdGYWN0b3IqKHRoaXMuc3ByaW5nRm9yY2VZK3RoaXMucmVwdWxzaW9uRm9yY2VZK3RoaXMuZ3Jhdml0YXRpb25Gb3JjZVkpL3RoaXMubm9PZkNoaWxkcmVuLE1hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WCk+dS5jb29saW5nRmFjdG9yKnUubWF4Tm9kZURpc3BsYWNlbWVudCYmKHRoaXMuZGlzcGxhY2VtZW50WD11LmNvb2xpbmdGYWN0b3IqdS5tYXhOb2RlRGlzcGxhY2VtZW50KmEuc2lnbih0aGlzLmRpc3BsYWNlbWVudFgpKSxNYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFkpPnUuY29vbGluZ0ZhY3Rvcip1Lm1heE5vZGVEaXNwbGFjZW1lbnQmJih0aGlzLmRpc3BsYWNlbWVudFk9dS5jb29saW5nRmFjdG9yKnUubWF4Tm9kZURpc3BsYWNlbWVudCphLnNpZ24odGhpcy5kaXNwbGFjZW1lbnRZKSksdGhpcy5jaGlsZD09bnVsbD90aGlzLm1vdmVCeSh0aGlzLmRpc3BsYWNlbWVudFgsdGhpcy5kaXNwbGFjZW1lbnRZKTp0aGlzLmNoaWxkLmdldE5vZGVzKCkubGVuZ3RoPT0wP3RoaXMubW92ZUJ5KHRoaXMuZGlzcGxhY2VtZW50WCx0aGlzLmRpc3BsYWNlbWVudFkpOnRoaXMucHJvcG9nYXRlRGlzcGxhY2VtZW50VG9DaGlsZHJlbih0aGlzLmRpc3BsYWNlbWVudFgsdGhpcy5kaXNwbGFjZW1lbnRZKSx1LnRvdGFsRGlzcGxhY2VtZW50Kz1NYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFgpK01hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WSksdGhpcy5zcHJpbmdGb3JjZVg9MCx0aGlzLnNwcmluZ0ZvcmNlWT0wLHRoaXMucmVwdWxzaW9uRm9yY2VYPTAsdGhpcy5yZXB1bHNpb25Gb3JjZVk9MCx0aGlzLmdyYXZpdGF0aW9uRm9yY2VYPTAsdGhpcy5ncmF2aXRhdGlvbkZvcmNlWT0wLHRoaXMuZGlzcGxhY2VtZW50WD0wLHRoaXMuZGlzcGxhY2VtZW50WT0wfSxzLnByb3RvdHlwZS5wcm9wb2dhdGVEaXNwbGFjZW1lbnRUb0NoaWxkcmVuPWZ1bmN0aW9uKHUsaCl7Zm9yKHZhciBmPXRoaXMuZ2V0Q2hpbGQoKS5nZXROb2RlcygpLGQscD0wO3A8Zi5sZW5ndGg7cCsrKWQ9ZltwXSxkLmdldENoaWxkKCk9PW51bGw/KGQubW92ZUJ5KHUsaCksZC5kaXNwbGFjZW1lbnRYKz11LGQuZGlzcGxhY2VtZW50WSs9aCk6ZC5wcm9wb2dhdGVEaXNwbGFjZW1lbnRUb0NoaWxkcmVuKHUsaCl9LHMucHJvdG90eXBlLnNldFByZWQxPWZ1bmN0aW9uKHUpe3RoaXMucHJlZDE9dX0scy5wcm90b3R5cGUuZ2V0UHJlZDE9ZnVuY3Rpb24oKXtyZXR1cm4gcHJlZDF9LHMucHJvdG90eXBlLmdldFByZWQyPWZ1bmN0aW9uKCl7cmV0dXJuIHByZWQyfSxzLnByb3RvdHlwZS5zZXROZXh0PWZ1bmN0aW9uKHUpe3RoaXMubmV4dD11fSxzLnByb3RvdHlwZS5nZXROZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIG5leHR9LHMucHJvdG90eXBlLnNldFByb2Nlc3NlZD1mdW5jdGlvbih1KXt0aGlzLnByb2Nlc3NlZD11fSxzLnByb3RvdHlwZS5pc1Byb2Nlc3NlZD1mdW5jdGlvbigpe3JldHVybiBwcm9jZXNzZWR9LGUuZXhwb3J0cz1zfSxmdW5jdGlvbihlLHIsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oMCkuRkRMYXlvdXQsYT1uKDQpLHM9bigzKSxsPW4oNSksdT1uKDIpLGg9bigxKSxmPW4oMCkuRkRMYXlvdXRDb25zdGFudHMsZD1uKDApLkxheW91dENvbnN0YW50cyxwPW4oMCkuUG9pbnQsbT1uKDApLlBvaW50RCxnPW4oMCkuTGF5b3V0LHk9bigwKS5JbnRlZ2VyLHY9bigwKS5JR2VvbWV0cnkseD1uKDApLkxHcmFwaCxiPW4oMCkuVHJhbnNmb3JtO2Z1bmN0aW9uIHcoKXtpLmNhbGwodGhpcyksdGhpcy50b0JlVGlsZWQ9e319byh3LCJDb1NFTGF5b3V0Iiksdy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSk7Zm9yKHZhciBfIGluIGkpd1tfXT1pW19dO3cucHJvdG90eXBlLm5ld0dyYXBoTWFuYWdlcj1mdW5jdGlvbigpe3ZhciBUPW5ldyBhKHRoaXMpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcj1ULFR9LHcucHJvdG90eXBlLm5ld0dyYXBoPWZ1bmN0aW9uKFQpe3JldHVybiBuZXcgcyhudWxsLHRoaXMuZ3JhcGhNYW5hZ2VyLFQpfSx3LnByb3RvdHlwZS5uZXdOb2RlPWZ1bmN0aW9uKFQpe3JldHVybiBuZXcgbCh0aGlzLmdyYXBoTWFuYWdlcixUKX0sdy5wcm90b3R5cGUubmV3RWRnZT1mdW5jdGlvbihUKXtyZXR1cm4gbmV3IHUobnVsbCxudWxsLFQpfSx3LnByb3RvdHlwZS5pbml0UGFyYW1ldGVycz1mdW5jdGlvbigpe2kucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzLmNhbGwodGhpcyxhcmd1bWVudHMpLHRoaXMuaXNTdWJMYXlvdXR8fChoLkRFRkFVTFRfRURHRV9MRU5HVEg8MTA/dGhpcy5pZGVhbEVkZ2VMZW5ndGg9MTA6dGhpcy5pZGVhbEVkZ2VMZW5ndGg9aC5ERUZBVUxUX0VER0VfTEVOR1RILHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbj1oLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OLHRoaXMuc3ByaW5nQ29uc3RhbnQ9Zi5ERUZBVUxUX1NQUklOR19TVFJFTkdUSCx0aGlzLnJlcHVsc2lvbkNvbnN0YW50PWYuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEgsdGhpcy5ncmF2aXR5Q29uc3RhbnQ9Zi5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEgsdGhpcy5jb21wb3VuZEdyYXZpdHlDb25zdGFudD1mLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSCx0aGlzLmdyYXZpdHlSYW5nZUZhY3Rvcj1mLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1IsdGhpcy5jb21wb3VuZEdyYXZpdHlSYW5nZUZhY3Rvcj1mLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1IsdGhpcy5wcnVuZWROb2Rlc0FsbD1bXSx0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucz0wLHRoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zPTAsdGhpcy5pc1RyZWVHcm93aW5nPSExLHRoaXMuaXNHcm93dGhGaW5pc2hlZD0hMSx0aGlzLmNvb2xpbmdDeWNsZT0wLHRoaXMubWF4Q29vbGluZ0N5Y2xlPXRoaXMubWF4SXRlcmF0aW9ucy9mLkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRCx0aGlzLmZpbmFsVGVtcGVyYXR1cmU9Zi5DT05WRVJHRU5DRV9DSEVDS19QRVJJT0QvdGhpcy5tYXhJdGVyYXRpb25zLHRoaXMuY29vbGluZ0FkanVzdGVyPTEpfSx3LnByb3RvdHlwZS5sYXlvdXQ9ZnVuY3Rpb24oKXt2YXIgVD1kLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRDtyZXR1cm4gVCYmKHRoaXMuY3JlYXRlQmVuZHBvaW50cygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKSksdGhpcy5sZXZlbD0wLHRoaXMuY2xhc3NpY0xheW91dCgpfSx3LnByb3RvdHlwZS5jbGFzc2ljTGF5b3V0PWZ1bmN0aW9uKCl7aWYodGhpcy5ub2Rlc1dpdGhHcmF2aXR5PXRoaXMuY2FsY3VsYXRlTm9kZXNUb0FwcGx5R3Jhdml0YXRpb25UbygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKHRoaXMubm9kZXNXaXRoR3Jhdml0eSksdGhpcy5jYWxjTm9PZkNoaWxkcmVuRm9yQWxsTm9kZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3JzKCksdGhpcy5ncmFwaE1hbmFnZXIuY2FsY0luY2x1c2lvblRyZWVEZXB0aHMoKSx0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuY2FsY0VzdGltYXRlZFNpemUoKSx0aGlzLmNhbGNJZGVhbEVkZ2VMZW5ndGhzKCksdGhpcy5pbmNyZW1lbnRhbCl7aWYoaC5UUkVFX1JFRFVDVElPTl9PTl9JTkNSRU1FTlRBTCl7dGhpcy5yZWR1Y2VUcmVlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKTt2YXIgRT1uZXcgU2V0KHRoaXMuZ2V0QWxsTm9kZXMoKSksTD10aGlzLm5vZGVzV2l0aEdyYXZpdHkuZmlsdGVyKGZ1bmN0aW9uKEkpe3JldHVybiBFLmhhcyhJKX0pO3RoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKEwpfX1lbHNle3ZhciBUPXRoaXMuZ2V0RmxhdEZvcmVzdCgpO2lmKFQubGVuZ3RoPjApdGhpcy5wb3NpdGlvbk5vZGVzUmFkaWFsbHkoVCk7ZWxzZXt0aGlzLnJlZHVjZVRyZWVzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpO3ZhciBFPW5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKSxMPXRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24oUyl7cmV0dXJuIEUuaGFzKFMpfSk7dGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oTCksdGhpcy5wb3NpdGlvbk5vZGVzUmFuZG9tbHkoKX19cmV0dXJuIHRoaXMuaW5pdFNwcmluZ0VtYmVkZGVyKCksdGhpcy5ydW5TcHJpbmdFbWJlZGRlcigpLCEwfSx3LnByb3RvdHlwZS50aWNrPWZ1bmN0aW9uKCl7aWYodGhpcy50b3RhbEl0ZXJhdGlvbnMrKyx0aGlzLnRvdGFsSXRlcmF0aW9ucz09PXRoaXMubWF4SXRlcmF0aW9ucyYmIXRoaXMuaXNUcmVlR3Jvd2luZyYmIXRoaXMuaXNHcm93dGhGaW5pc2hlZClpZih0aGlzLnBydW5lZE5vZGVzQWxsLmxlbmd0aD4wKXRoaXMuaXNUcmVlR3Jvd2luZz0hMDtlbHNlIHJldHVybiEwO2lmKHRoaXMudG90YWxJdGVyYXRpb25zJWYuQ09OVkVSR0VOQ0VfQ0hFQ0tfUEVSSU9EPT0wJiYhdGhpcy5pc1RyZWVHcm93aW5nJiYhdGhpcy5pc0dyb3d0aEZpbmlzaGVkKXtpZih0aGlzLmlzQ29udmVyZ2VkKCkpaWYodGhpcy5wcnVuZWROb2Rlc0FsbC5sZW5ndGg+MCl0aGlzLmlzVHJlZUdyb3dpbmc9ITA7ZWxzZSByZXR1cm4hMDt0aGlzLmNvb2xpbmdDeWNsZSsrLHRoaXMubGF5b3V0UXVhbGl0eT09MD90aGlzLmNvb2xpbmdBZGp1c3Rlcj10aGlzLmNvb2xpbmdDeWNsZTp0aGlzLmxheW91dFF1YWxpdHk9PTEmJih0aGlzLmNvb2xpbmdBZGp1c3Rlcj10aGlzLmNvb2xpbmdDeWNsZS8zKSx0aGlzLmNvb2xpbmdGYWN0b3I9TWF0aC5tYXgodGhpcy5pbml0aWFsQ29vbGluZ0ZhY3Rvci1NYXRoLnBvdyh0aGlzLmNvb2xpbmdDeWNsZSxNYXRoLmxvZygxMDAqKHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3ItdGhpcy5maW5hbFRlbXBlcmF0dXJlKSkvTWF0aC5sb2codGhpcy5tYXhDb29saW5nQ3ljbGUpKS8xMDAqdGhpcy5jb29saW5nQWRqdXN0ZXIsdGhpcy5maW5hbFRlbXBlcmF0dXJlKSx0aGlzLmFuaW1hdGlvblBlcmlvZD1NYXRoLmNlaWwodGhpcy5pbml0aWFsQW5pbWF0aW9uUGVyaW9kKk1hdGguc3FydCh0aGlzLmNvb2xpbmdGYWN0b3IpKX1pZih0aGlzLmlzVHJlZUdyb3dpbmcpe2lmKHRoaXMuZ3Jvd1RyZWVJdGVyYXRpb25zJTEwPT0wKWlmKHRoaXMucHJ1bmVkTm9kZXNBbGwubGVuZ3RoPjApe3RoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpLHRoaXMudXBkYXRlR3JpZCgpLHRoaXMuZ3Jvd1RyZWUodGhpcy5wcnVuZWROb2Rlc0FsbCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpO3ZhciBUPW5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKSxFPXRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24oQSl7cmV0dXJuIFQuaGFzKEEpfSk7dGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oRSksdGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCksdGhpcy51cGRhdGVHcmlkKCksdGhpcy5jb29saW5nRmFjdG9yPWYuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTH1lbHNlIHRoaXMuaXNUcmVlR3Jvd2luZz0hMSx0aGlzLmlzR3Jvd3RoRmluaXNoZWQ9ITA7dGhpcy5ncm93VHJlZUl0ZXJhdGlvbnMrK31pZih0aGlzLmlzR3Jvd3RoRmluaXNoZWQpe2lmKHRoaXMuaXNDb252ZXJnZWQoKSlyZXR1cm4hMDt0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucyUxMD09MCYmKHRoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpLHRoaXMudXBkYXRlR3JpZCgpKSx0aGlzLmNvb2xpbmdGYWN0b3I9Zi5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMKigoMTAwLXRoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zKS8xMDApLHRoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zKyt9dmFyIEw9IXRoaXMuaXNUcmVlR3Jvd2luZyYmIXRoaXMuaXNHcm93dGhGaW5pc2hlZCxTPXRoaXMuZ3Jvd1RyZWVJdGVyYXRpb25zJTEwPT0xJiZ0aGlzLmlzVHJlZUdyb3dpbmd8fHRoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zJTEwPT0xJiZ0aGlzLmlzR3Jvd3RoRmluaXNoZWQ7cmV0dXJuIHRoaXMudG90YWxEaXNwbGFjZW1lbnQ9MCx0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKSx0aGlzLmNhbGNTcHJpbmdGb3JjZXMoKSx0aGlzLmNhbGNSZXB1bHNpb25Gb3JjZXMoTCxTKSx0aGlzLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2VzKCksdGhpcy5tb3ZlTm9kZXMoKSx0aGlzLmFuaW1hdGUoKSwhMX0sdy5wcm90b3R5cGUuZ2V0UG9zaXRpb25zRGF0YT1mdW5jdGlvbigpe2Zvcih2YXIgVD10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLEU9e30sTD0wO0w8VC5sZW5ndGg7TCsrKXt2YXIgUz1UW0xdLnJlY3QsQT1UW0xdLmlkO0VbQV09e2lkOkEseDpTLmdldENlbnRlclgoKSx5OlMuZ2V0Q2VudGVyWSgpLHc6Uy53aWR0aCxoOlMuaGVpZ2h0fX1yZXR1cm4gRX0sdy5wcm90b3R5cGUucnVuU3ByaW5nRW1iZWRkZXI9ZnVuY3Rpb24oKXt0aGlzLmluaXRpYWxBbmltYXRpb25QZXJpb2Q9MjUsdGhpcy5hbmltYXRpb25QZXJpb2Q9dGhpcy5pbml0aWFsQW5pbWF0aW9uUGVyaW9kO3ZhciBUPSExO2lmKGYuQU5JTUFURT09PSJkdXJpbmciKXRoaXMuZW1pdCgibGF5b3V0c3RhcnRlZCIpO2Vsc2V7Zm9yKDshVDspVD10aGlzLnRpY2soKTt0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKX19LHcucHJvdG90eXBlLmNhbGN1bGF0ZU5vZGVzVG9BcHBseUdyYXZpdGF0aW9uVG89ZnVuY3Rpb24oKXt2YXIgVD1bXSxFLEw9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0R3JhcGhzKCksUz1MLmxlbmd0aCxBO2ZvcihBPTA7QTxTO0ErKylFPUxbQV0sRS51cGRhdGVDb25uZWN0ZWQoKSxFLmlzQ29ubmVjdGVkfHwoVD1ULmNvbmNhdChFLmdldE5vZGVzKCkpKTtyZXR1cm4gVH0sdy5wcm90b3R5cGUuY3JlYXRlQmVuZHBvaW50cz1mdW5jdGlvbigpe3ZhciBUPVtdO1Q9VC5jb25jYXQodGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsRWRnZXMoKSk7dmFyIEU9bmV3IFNldCxMO2ZvcihMPTA7TDxULmxlbmd0aDtMKyspe3ZhciBTPVRbTF07aWYoIUUuaGFzKFMpKXt2YXIgQT1TLmdldFNvdXJjZSgpLEk9Uy5nZXRUYXJnZXQoKTtpZihBPT1JKVMuZ2V0QmVuZHBvaW50cygpLnB1c2gobmV3IG0pLFMuZ2V0QmVuZHBvaW50cygpLnB1c2gobmV3IG0pLHRoaXMuY3JlYXRlRHVtbXlOb2Rlc0ZvckJlbmRwb2ludHMoUyksRS5hZGQoUyk7ZWxzZXt2YXIgRD1bXTtpZihEPUQuY29uY2F0KEEuZ2V0RWRnZUxpc3RUb05vZGUoSSkpLEQ9RC5jb25jYXQoSS5nZXRFZGdlTGlzdFRvTm9kZShBKSksIUUuaGFzKERbMF0pKXtpZihELmxlbmd0aD4xKXt2YXIgaztmb3Ioaz0wO2s8RC5sZW5ndGg7aysrKXt2YXIgUj1EW2tdO1IuZ2V0QmVuZHBvaW50cygpLnB1c2gobmV3IG0pLHRoaXMuY3JlYXRlRHVtbXlOb2Rlc0ZvckJlbmRwb2ludHMoUil9fUQuZm9yRWFjaChmdW5jdGlvbihDKXtFLmFkZChDKX0pfX19aWYoRS5zaXplPT1ULmxlbmd0aClicmVha319LHcucHJvdG90eXBlLnBvc2l0aW9uTm9kZXNSYWRpYWxseT1mdW5jdGlvbihUKXtmb3IodmFyIEU9bmV3IHAoMCwwKSxMPU1hdGguY2VpbChNYXRoLnNxcnQoVC5sZW5ndGgpKSxTPTAsQT0wLEk9MCxEPW5ldyBtKDAsMCksaz0wO2s8VC5sZW5ndGg7aysrKXtrJUw9PTAmJihJPTAsQT1TLGshPTAmJihBKz1oLkRFRkFVTFRfQ09NUE9ORU5UX1NFUEVSQVRJT04pLFM9MCk7dmFyIFI9VFtrXSxDPWcuZmluZENlbnRlck9mVHJlZShSKTtFLng9SSxFLnk9QSxEPXcucmFkaWFsTGF5b3V0KFIsQyxFKSxELnk+UyYmKFM9TWF0aC5mbG9vcihELnkpKSxJPU1hdGguZmxvb3IoRC54K2guREVGQVVMVF9DT01QT05FTlRfU0VQRVJBVElPTil9dGhpcy50cmFuc2Zvcm0obmV3IG0oZC5XT1JMRF9DRU5URVJfWC1ELngvMixkLldPUkxEX0NFTlRFUl9ZLUQueS8yKSl9LHcucmFkaWFsTGF5b3V0PWZ1bmN0aW9uKFQsRSxMKXt2YXIgUz1NYXRoLm1heCh0aGlzLm1heERpYWdvbmFsSW5UcmVlKFQpLGguREVGQVVMVF9SQURJQUxfU0VQQVJBVElPTik7dy5icmFuY2hSYWRpYWxMYXlvdXQoRSxudWxsLDAsMzU5LDAsUyk7dmFyIEE9eC5jYWxjdWxhdGVCb3VuZHMoVCksST1uZXcgYjtJLnNldERldmljZU9yZ1goQS5nZXRNaW5YKCkpLEkuc2V0RGV2aWNlT3JnWShBLmdldE1pblkoKSksSS5zZXRXb3JsZE9yZ1goTC54KSxJLnNldFdvcmxkT3JnWShMLnkpO2Zvcih2YXIgRD0wO0Q8VC5sZW5ndGg7RCsrKXt2YXIgaz1UW0RdO2sudHJhbnNmb3JtKEkpfXZhciBSPW5ldyBtKEEuZ2V0TWF4WCgpLEEuZ2V0TWF4WSgpKTtyZXR1cm4gSS5pbnZlcnNlVHJhbnNmb3JtUG9pbnQoUil9LHcuYnJhbmNoUmFkaWFsTGF5b3V0PWZ1bmN0aW9uKFQsRSxMLFMsQSxJKXt2YXIgRD0oUy1MKzEpLzI7RDwwJiYoRCs9MTgwKTt2YXIgaz0oRCtMKSUzNjAsUj1rKnYuVFdPX1BJLzM2MCxDPU1hdGguY29zKFIpLE89QSpNYXRoLmNvcyhSKSxOPUEqTWF0aC5zaW4oUik7VC5zZXRDZW50ZXIoTyxOKTt2YXIgUD1bXTtQPVAuY29uY2F0KFQuZ2V0RWRnZXMoKSk7dmFyIEY9UC5sZW5ndGg7RSE9bnVsbCYmRi0tO2Zvcih2YXIgQj0wLEc9UC5sZW5ndGgseixXPVQuZ2V0RWRnZXNCZXR3ZWVuKEUpO1cubGVuZ3RoPjE7KXt2YXIgWj1XWzBdO1cuc3BsaWNlKDAsMSk7dmFyIGo9UC5pbmRleE9mKFopO2o+PTAmJlAuc3BsaWNlKGosMSksRy0tLEYtLX1FIT1udWxsP3o9KFAuaW5kZXhPZihXWzBdKSsxKSVHOno9MDtmb3IodmFyIG9lPU1hdGguYWJzKFMtTCkvRixLPXo7QiE9RjtLPSsrSyVHKXt2YXIgZWU9UFtLXS5nZXRPdGhlckVuZChUKTtpZihlZSE9RSl7dmFyIEo9KEwrQipvZSklMzYwLEg9KEorb2UpJTM2MDt3LmJyYW5jaFJhZGlhbExheW91dChlZSxULEosSCxBK0ksSSksQisrfX19LHcubWF4RGlhZ29uYWxJblRyZWU9ZnVuY3Rpb24oVCl7Zm9yKHZhciBFPXkuTUlOX1ZBTFVFLEw9MDtMPFQubGVuZ3RoO0wrKyl7dmFyIFM9VFtMXSxBPVMuZ2V0RGlhZ29uYWwoKTtBPkUmJihFPUEpfXJldHVybiBFfSx3LnByb3RvdHlwZS5jYWxjUmVwdWxzaW9uUmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gMioodGhpcy5sZXZlbCsxKSp0aGlzLmlkZWFsRWRnZUxlbmd0aH0sdy5wcm90b3R5cGUuZ3JvdXBaZXJvRGVncmVlTWVtYmVycz1mdW5jdGlvbigpe3ZhciBUPXRoaXMsRT17fTt0aGlzLm1lbWJlckdyb3Vwcz17fSx0aGlzLmlkVG9EdW1teU5vZGU9e307Zm9yKHZhciBMPVtdLFM9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKSxBPTA7QTxTLmxlbmd0aDtBKyspe3ZhciBJPVNbQV0sRD1JLmdldFBhcmVudCgpO3RoaXMuZ2V0Tm9kZURlZ3JlZVdpdGhDaGlsZHJlbihJKT09PTAmJihELmlkPT1udWxsfHwhdGhpcy5nZXRUb0JlVGlsZWQoRCkpJiZMLnB1c2goSSl9Zm9yKHZhciBBPTA7QTxMLmxlbmd0aDtBKyspe3ZhciBJPUxbQV0saz1JLmdldFBhcmVudCgpLmlkO3R5cGVvZiBFW2tdPiJ1IiYmKEVba109W10pLEVba109RVtrXS5jb25jYXQoSSl9T2JqZWN0LmtleXMoRSkuZm9yRWFjaChmdW5jdGlvbihSKXtpZihFW1JdLmxlbmd0aD4xKXt2YXIgQz0iRHVtbXlDb21wb3VuZF8iK1I7VC5tZW1iZXJHcm91cHNbQ109RVtSXTt2YXIgTz1FW1JdWzBdLmdldFBhcmVudCgpLE49bmV3IGwoVC5ncmFwaE1hbmFnZXIpO04uaWQ9QyxOLnBhZGRpbmdMZWZ0PU8ucGFkZGluZ0xlZnR8fDAsTi5wYWRkaW5nUmlnaHQ9Ty5wYWRkaW5nUmlnaHR8fDAsTi5wYWRkaW5nQm90dG9tPU8ucGFkZGluZ0JvdHRvbXx8MCxOLnBhZGRpbmdUb3A9Ty5wYWRkaW5nVG9wfHwwLFQuaWRUb0R1bW15Tm9kZVtDXT1OO3ZhciBQPVQuZ2V0R3JhcGhNYW5hZ2VyKCkuYWRkKFQubmV3R3JhcGgoKSxOKSxGPU8uZ2V0Q2hpbGQoKTtGLmFkZChOKTtmb3IodmFyIEI9MDtCPEVbUl0ubGVuZ3RoO0IrKyl7dmFyIEc9RVtSXVtCXTtGLnJlbW92ZShHKSxQLmFkZChHKX19fSl9LHcucHJvdG90eXBlLmNsZWFyQ29tcG91bmRzPWZ1bmN0aW9uKCl7dmFyIFQ9e30sRT17fTt0aGlzLnBlcmZvcm1ERlNPbkNvbXBvdW5kcygpO2Zvcih2YXIgTD0wO0w8dGhpcy5jb21wb3VuZE9yZGVyLmxlbmd0aDtMKyspRVt0aGlzLmNvbXBvdW5kT3JkZXJbTF0uaWRdPXRoaXMuY29tcG91bmRPcmRlcltMXSxUW3RoaXMuY29tcG91bmRPcmRlcltMXS5pZF09W10uY29uY2F0KHRoaXMuY29tcG91bmRPcmRlcltMXS5nZXRDaGlsZCgpLmdldE5vZGVzKCkpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlbW92ZSh0aGlzLmNvbXBvdW5kT3JkZXJbTF0uZ2V0Q2hpbGQoKSksdGhpcy5jb21wb3VuZE9yZGVyW0xdLmNoaWxkPW51bGw7dGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2RlcygpLHRoaXMudGlsZUNvbXBvdW5kTWVtYmVycyhULEUpfSx3LnByb3RvdHlwZS5jbGVhclplcm9EZWdyZWVNZW1iZXJzPWZ1bmN0aW9uKCl7dmFyIFQ9dGhpcyxFPXRoaXMudGlsZWRaZXJvRGVncmVlUGFjaz1bXTtPYmplY3Qua2V5cyh0aGlzLm1lbWJlckdyb3VwcykuZm9yRWFjaChmdW5jdGlvbihMKXt2YXIgUz1ULmlkVG9EdW1teU5vZGVbTF07RVtMXT1ULnRpbGVOb2RlcyhULm1lbWJlckdyb3Vwc1tMXSxTLnBhZGRpbmdMZWZ0K1MucGFkZGluZ1JpZ2h0KSxTLnJlY3Qud2lkdGg9RVtMXS53aWR0aCxTLnJlY3QuaGVpZ2h0PUVbTF0uaGVpZ2h0fSl9LHcucHJvdG90eXBlLnJlcG9wdWxhdGVDb21wb3VuZHM9ZnVuY3Rpb24oKXtmb3IodmFyIFQ9dGhpcy5jb21wb3VuZE9yZGVyLmxlbmd0aC0xO1Q+PTA7VC0tKXt2YXIgRT10aGlzLmNvbXBvdW5kT3JkZXJbVF0sTD1FLmlkLFM9RS5wYWRkaW5nTGVmdCxBPUUucGFkZGluZ1RvcDt0aGlzLmFkanVzdExvY2F0aW9ucyh0aGlzLnRpbGVkTWVtYmVyUGFja1tMXSxFLnJlY3QueCxFLnJlY3QueSxTLEEpfX0sdy5wcm90b3R5cGUucmVwb3B1bGF0ZVplcm9EZWdyZWVNZW1iZXJzPWZ1bmN0aW9uKCl7dmFyIFQ9dGhpcyxFPXRoaXMudGlsZWRaZXJvRGVncmVlUGFjaztPYmplY3Qua2V5cyhFKS5mb3JFYWNoKGZ1bmN0aW9uKEwpe3ZhciBTPVQuaWRUb0R1bW15Tm9kZVtMXSxBPVMucGFkZGluZ0xlZnQsST1TLnBhZGRpbmdUb3A7VC5hZGp1c3RMb2NhdGlvbnMoRVtMXSxTLnJlY3QueCxTLnJlY3QueSxBLEkpfSl9LHcucHJvdG90eXBlLmdldFRvQmVUaWxlZD1mdW5jdGlvbihUKXt2YXIgRT1ULmlkO2lmKHRoaXMudG9CZVRpbGVkW0VdIT1udWxsKXJldHVybiB0aGlzLnRvQmVUaWxlZFtFXTt2YXIgTD1ULmdldENoaWxkKCk7aWYoTD09bnVsbClyZXR1cm4gdGhpcy50b0JlVGlsZWRbRV09ITEsITE7Zm9yKHZhciBTPUwuZ2V0Tm9kZXMoKSxBPTA7QTxTLmxlbmd0aDtBKyspe3ZhciBJPVNbQV07aWYodGhpcy5nZXROb2RlRGVncmVlKEkpPjApcmV0dXJuIHRoaXMudG9CZVRpbGVkW0VdPSExLCExO2lmKEkuZ2V0Q2hpbGQoKT09bnVsbCl7dGhpcy50b0JlVGlsZWRbSS5pZF09ITE7Y29udGludWV9aWYoIXRoaXMuZ2V0VG9CZVRpbGVkKEkpKXJldHVybiB0aGlzLnRvQmVUaWxlZFtFXT0hMSwhMX1yZXR1cm4gdGhpcy50b0JlVGlsZWRbRV09ITAsITB9LHcucHJvdG90eXBlLmdldE5vZGVEZWdyZWU9ZnVuY3Rpb24oVCl7Zm9yKHZhciBFPVQuaWQsTD1ULmdldEVkZ2VzKCksUz0wLEE9MDtBPEwubGVuZ3RoO0ErKyl7dmFyIEk9TFtBXTtJLmdldFNvdXJjZSgpLmlkIT09SS5nZXRUYXJnZXQoKS5pZCYmKFM9UysxKX1yZXR1cm4gU30sdy5wcm90b3R5cGUuZ2V0Tm9kZURlZ3JlZVdpdGhDaGlsZHJlbj1mdW5jdGlvbihUKXt2YXIgRT10aGlzLmdldE5vZGVEZWdyZWUoVCk7aWYoVC5nZXRDaGlsZCgpPT1udWxsKXJldHVybiBFO2Zvcih2YXIgTD1ULmdldENoaWxkKCkuZ2V0Tm9kZXMoKSxTPTA7UzxMLmxlbmd0aDtTKyspe3ZhciBBPUxbU107RSs9dGhpcy5nZXROb2RlRGVncmVlV2l0aENoaWxkcmVuKEEpfXJldHVybiBFfSx3LnByb3RvdHlwZS5wZXJmb3JtREZTT25Db21wb3VuZHM9ZnVuY3Rpb24oKXt0aGlzLmNvbXBvdW5kT3JkZXI9W10sdGhpcy5maWxsQ29tcGV4T3JkZXJCeURGUyh0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKSl9LHcucHJvdG90eXBlLmZpbGxDb21wZXhPcmRlckJ5REZTPWZ1bmN0aW9uKFQpe2Zvcih2YXIgRT0wO0U8VC5sZW5ndGg7RSsrKXt2YXIgTD1UW0VdO0wuZ2V0Q2hpbGQoKSE9bnVsbCYmdGhpcy5maWxsQ29tcGV4T3JkZXJCeURGUyhMLmdldENoaWxkKCkuZ2V0Tm9kZXMoKSksdGhpcy5nZXRUb0JlVGlsZWQoTCkmJnRoaXMuY29tcG91bmRPcmRlci5wdXNoKEwpfX0sdy5wcm90b3R5cGUuYWRqdXN0TG9jYXRpb25zPWZ1bmN0aW9uKFQsRSxMLFMsQSl7RSs9UyxMKz1BO2Zvcih2YXIgST1FLEQ9MDtEPFQucm93cy5sZW5ndGg7RCsrKXt2YXIgaz1ULnJvd3NbRF07RT1JO2Zvcih2YXIgUj0wLEM9MDtDPGsubGVuZ3RoO0MrKyl7dmFyIE89a1tDXTtPLnJlY3QueD1FLE8ucmVjdC55PUwsRSs9Ty5yZWN0LndpZHRoK1QuaG9yaXpvbnRhbFBhZGRpbmcsTy5yZWN0LmhlaWdodD5SJiYoUj1PLnJlY3QuaGVpZ2h0KX1MKz1SK1QudmVydGljYWxQYWRkaW5nfX0sdy5wcm90b3R5cGUudGlsZUNvbXBvdW5kTWVtYmVycz1mdW5jdGlvbihULEUpe3ZhciBMPXRoaXM7dGhpcy50aWxlZE1lbWJlclBhY2s9W10sT2JqZWN0LmtleXMoVCkuZm9yRWFjaChmdW5jdGlvbihTKXt2YXIgQT1FW1NdO0wudGlsZWRNZW1iZXJQYWNrW1NdPUwudGlsZU5vZGVzKFRbU10sQS5wYWRkaW5nTGVmdCtBLnBhZGRpbmdSaWdodCksQS5yZWN0LndpZHRoPUwudGlsZWRNZW1iZXJQYWNrW1NdLndpZHRoLEEucmVjdC5oZWlnaHQ9TC50aWxlZE1lbWJlclBhY2tbU10uaGVpZ2h0fSl9LHcucHJvdG90eXBlLnRpbGVOb2Rlcz1mdW5jdGlvbihULEUpe3ZhciBMPWguVElMSU5HX1BBRERJTkdfVkVSVElDQUwsUz1oLlRJTElOR19QQURESU5HX0hPUklaT05UQUwsQT17cm93czpbXSxyb3dXaWR0aDpbXSxyb3dIZWlnaHQ6W10sd2lkdGg6MCxoZWlnaHQ6RSx2ZXJ0aWNhbFBhZGRpbmc6TCxob3Jpem9udGFsUGFkZGluZzpTfTtULnNvcnQoZnVuY3Rpb24oayxSKXtyZXR1cm4gay5yZWN0LndpZHRoKmsucmVjdC5oZWlnaHQ+Ui5yZWN0LndpZHRoKlIucmVjdC5oZWlnaHQ/LTE6ay5yZWN0LndpZHRoKmsucmVjdC5oZWlnaHQ8Ui5yZWN0LndpZHRoKlIucmVjdC5oZWlnaHQ/MTowfSk7Zm9yKHZhciBJPTA7STxULmxlbmd0aDtJKyspe3ZhciBEPVRbSV07QS5yb3dzLmxlbmd0aD09MD90aGlzLmluc2VydE5vZGVUb1JvdyhBLEQsMCxFKTp0aGlzLmNhbkFkZEhvcml6b250YWwoQSxELnJlY3Qud2lkdGgsRC5yZWN0LmhlaWdodCk/dGhpcy5pbnNlcnROb2RlVG9Sb3coQSxELHRoaXMuZ2V0U2hvcnRlc3RSb3dJbmRleChBKSxFKTp0aGlzLmluc2VydE5vZGVUb1JvdyhBLEQsQS5yb3dzLmxlbmd0aCxFKSx0aGlzLnNoaWZ0VG9MYXN0Um93KEEpfXJldHVybiBBfSx3LnByb3RvdHlwZS5pbnNlcnROb2RlVG9Sb3c9ZnVuY3Rpb24oVCxFLEwsUyl7dmFyIEE9UztpZihMPT1ULnJvd3MubGVuZ3RoKXt2YXIgST1bXTtULnJvd3MucHVzaChJKSxULnJvd1dpZHRoLnB1c2goQSksVC5yb3dIZWlnaHQucHVzaCgwKX12YXIgRD1ULnJvd1dpZHRoW0xdK0UucmVjdC53aWR0aDtULnJvd3NbTF0ubGVuZ3RoPjAmJihEKz1ULmhvcml6b250YWxQYWRkaW5nKSxULnJvd1dpZHRoW0xdPUQsVC53aWR0aDxEJiYoVC53aWR0aD1EKTt2YXIgaz1FLnJlY3QuaGVpZ2h0O0w+MCYmKGsrPVQudmVydGljYWxQYWRkaW5nKTt2YXIgUj0wO2s+VC5yb3dIZWlnaHRbTF0mJihSPVQucm93SGVpZ2h0W0xdLFQucm93SGVpZ2h0W0xdPWssUj1ULnJvd0hlaWdodFtMXS1SKSxULmhlaWdodCs9UixULnJvd3NbTF0ucHVzaChFKX0sdy5wcm90b3R5cGUuZ2V0U2hvcnRlc3RSb3dJbmRleD1mdW5jdGlvbihUKXtmb3IodmFyIEU9LTEsTD1OdW1iZXIuTUFYX1ZBTFVFLFM9MDtTPFQucm93cy5sZW5ndGg7UysrKVQucm93V2lkdGhbU108TCYmKEU9UyxMPVQucm93V2lkdGhbU10pO3JldHVybiBFfSx3LnByb3RvdHlwZS5nZXRMb25nZXN0Um93SW5kZXg9ZnVuY3Rpb24oVCl7Zm9yKHZhciBFPS0xLEw9TnVtYmVyLk1JTl9WQUxVRSxTPTA7UzxULnJvd3MubGVuZ3RoO1MrKylULnJvd1dpZHRoW1NdPkwmJihFPVMsTD1ULnJvd1dpZHRoW1NdKTtyZXR1cm4gRX0sdy5wcm90b3R5cGUuY2FuQWRkSG9yaXpvbnRhbD1mdW5jdGlvbihULEUsTCl7dmFyIFM9dGhpcy5nZXRTaG9ydGVzdFJvd0luZGV4KFQpO2lmKFM8MClyZXR1cm4hMDt2YXIgQT1ULnJvd1dpZHRoW1NdO2lmKEErVC5ob3Jpem9udGFsUGFkZGluZytFPD1ULndpZHRoKXJldHVybiEwO3ZhciBJPTA7VC5yb3dIZWlnaHRbU108TCYmUz4wJiYoST1MK1QudmVydGljYWxQYWRkaW5nLVQucm93SGVpZ2h0W1NdKTt2YXIgRDtULndpZHRoLUE+PUUrVC5ob3Jpem9udGFsUGFkZGluZz9EPShULmhlaWdodCtJKS8oQStFK1QuaG9yaXpvbnRhbFBhZGRpbmcpOkQ9KFQuaGVpZ2h0K0kpL1Qud2lkdGgsST1MK1QudmVydGljYWxQYWRkaW5nO3ZhciBrO3JldHVybiBULndpZHRoPEU/az0oVC5oZWlnaHQrSSkvRTprPShULmhlaWdodCtJKS9ULndpZHRoLGs8MSYmKGs9MS9rKSxEPDEmJihEPTEvRCksRDxrfSx3LnByb3RvdHlwZS5zaGlmdFRvTGFzdFJvdz1mdW5jdGlvbihUKXt2YXIgRT10aGlzLmdldExvbmdlc3RSb3dJbmRleChUKSxMPVQucm93V2lkdGgubGVuZ3RoLTEsUz1ULnJvd3NbRV0sQT1TW1MubGVuZ3RoLTFdLEk9QS53aWR0aCtULmhvcml6b250YWxQYWRkaW5nO2lmKFQud2lkdGgtVC5yb3dXaWR0aFtMXT5JJiZFIT1MKXtTLnNwbGljZSgtMSwxKSxULnJvd3NbTF0ucHVzaChBKSxULnJvd1dpZHRoW0VdPVQucm93V2lkdGhbRV0tSSxULnJvd1dpZHRoW0xdPVQucm93V2lkdGhbTF0rSSxULndpZHRoPVQucm93V2lkdGhbaW5zdGFuY2UuZ2V0TG9uZ2VzdFJvd0luZGV4KFQpXTtmb3IodmFyIEQ9TnVtYmVyLk1JTl9WQUxVRSxrPTA7azxTLmxlbmd0aDtrKyspU1trXS5oZWlnaHQ+RCYmKEQ9U1trXS5oZWlnaHQpO0U+MCYmKEQrPVQudmVydGljYWxQYWRkaW5nKTt2YXIgUj1ULnJvd0hlaWdodFtFXStULnJvd0hlaWdodFtMXTtULnJvd0hlaWdodFtFXT1ELFQucm93SGVpZ2h0W0xdPEEuaGVpZ2h0K1QudmVydGljYWxQYWRkaW5nJiYoVC5yb3dIZWlnaHRbTF09QS5oZWlnaHQrVC52ZXJ0aWNhbFBhZGRpbmcpO3ZhciBDPVQucm93SGVpZ2h0W0VdK1Qucm93SGVpZ2h0W0xdO1QuaGVpZ2h0Kz1DLVIsdGhpcy5zaGlmdFRvTGFzdFJvdyhUKX19LHcucHJvdG90eXBlLnRpbGluZ1ByZUxheW91dD1mdW5jdGlvbigpe2guVElMRSYmKHRoaXMuZ3JvdXBaZXJvRGVncmVlTWVtYmVycygpLHRoaXMuY2xlYXJDb21wb3VuZHMoKSx0aGlzLmNsZWFyWmVyb0RlZ3JlZU1lbWJlcnMoKSl9LHcucHJvdG90eXBlLnRpbGluZ1Bvc3RMYXlvdXQ9ZnVuY3Rpb24oKXtoLlRJTEUmJih0aGlzLnJlcG9wdWxhdGVaZXJvRGVncmVlTWVtYmVycygpLHRoaXMucmVwb3B1bGF0ZUNvbXBvdW5kcygpKX0sdy5wcm90b3R5cGUucmVkdWNlVHJlZXM9ZnVuY3Rpb24oKXtmb3IodmFyIFQ9W10sRT0hMCxMO0U7KXt2YXIgUz10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLEE9W107RT0hMTtmb3IodmFyIEk9MDtJPFMubGVuZ3RoO0krKylMPVNbSV0sTC5nZXRFZGdlcygpLmxlbmd0aD09MSYmIUwuZ2V0RWRnZXMoKVswXS5pc0ludGVyR3JhcGgmJkwuZ2V0Q2hpbGQoKT09bnVsbCYmKEEucHVzaChbTCxMLmdldEVkZ2VzKClbMF0sTC5nZXRPd25lcigpXSksRT0hMCk7aWYoRT09ITApe2Zvcih2YXIgRD1bXSxrPTA7azxBLmxlbmd0aDtrKyspQVtrXVswXS5nZXRFZGdlcygpLmxlbmd0aD09MSYmKEQucHVzaChBW2tdKSxBW2tdWzBdLmdldE93bmVyKCkucmVtb3ZlKEFba11bMF0pKTtULnB1c2goRCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKX19dGhpcy5wcnVuZWROb2Rlc0FsbD1UfSx3LnByb3RvdHlwZS5ncm93VHJlZT1mdW5jdGlvbihUKXtmb3IodmFyIEU9VC5sZW5ndGgsTD1UW0UtMV0sUyxBPTA7QTxMLmxlbmd0aDtBKyspUz1MW0FdLHRoaXMuZmluZFBsYWNlZm9yUHJ1bmVkTm9kZShTKSxTWzJdLmFkZChTWzBdKSxTWzJdLmFkZChTWzFdLFNbMV0uc291cmNlLFNbMV0udGFyZ2V0KTtULnNwbGljZShULmxlbmd0aC0xLDEpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbEVkZ2VzKCl9LHcucHJvdG90eXBlLmZpbmRQbGFjZWZvclBydW5lZE5vZGU9ZnVuY3Rpb24oVCl7dmFyIEUsTCxTPVRbMF07Uz09VFsxXS5zb3VyY2U/TD1UWzFdLnRhcmdldDpMPVRbMV0uc291cmNlO3ZhciBBPUwuc3RhcnRYLEk9TC5maW5pc2hYLEQ9TC5zdGFydFksaz1MLmZpbmlzaFksUj0wLEM9MCxPPTAsTj0wLFA9W1IsTyxDLE5dO2lmKEQ+MClmb3IodmFyIEY9QTtGPD1JO0YrKylQWzBdKz10aGlzLmdyaWRbRl1bRC0xXS5sZW5ndGgrdGhpcy5ncmlkW0ZdW0RdLmxlbmd0aC0xO2lmKEk8dGhpcy5ncmlkLmxlbmd0aC0xKWZvcih2YXIgRj1EO0Y8PWs7RisrKVBbMV0rPXRoaXMuZ3JpZFtJKzFdW0ZdLmxlbmd0aCt0aGlzLmdyaWRbSV1bRl0ubGVuZ3RoLTE7aWYoazx0aGlzLmdyaWRbMF0ubGVuZ3RoLTEpZm9yKHZhciBGPUE7Rjw9STtGKyspUFsyXSs9dGhpcy5ncmlkW0ZdW2srMV0ubGVuZ3RoK3RoaXMuZ3JpZFtGXVtrXS5sZW5ndGgtMTtpZihBPjApZm9yKHZhciBGPUQ7Rjw9aztGKyspUFszXSs9dGhpcy5ncmlkW0EtMV1bRl0ubGVuZ3RoK3RoaXMuZ3JpZFtBXVtGXS5sZW5ndGgtMTtmb3IodmFyIEI9eS5NQVhfVkFMVUUsRyx6LFc9MDtXPFAubGVuZ3RoO1crKylQW1ddPEI/KEI9UFtXXSxHPTEsej1XKTpQW1ddPT1CJiZHKys7aWYoRz09MyYmQj09MClQWzBdPT0wJiZQWzFdPT0wJiZQWzJdPT0wP0U9MTpQWzBdPT0wJiZQWzFdPT0wJiZQWzNdPT0wP0U9MDpQWzBdPT0wJiZQWzJdPT0wJiZQWzNdPT0wP0U9MzpQWzFdPT0wJiZQWzJdPT0wJiZQWzNdPT0wJiYoRT0yKTtlbHNlIGlmKEc9PTImJkI9PTApe3ZhciBaPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoyKTtQWzBdPT0wJiZQWzFdPT0wP1o9PTA/RT0wOkU9MTpQWzBdPT0wJiZQWzJdPT0wP1o9PTA/RT0wOkU9MjpQWzBdPT0wJiZQWzNdPT0wP1o9PTA/RT0wOkU9MzpQWzFdPT0wJiZQWzJdPT0wP1o9PTA/RT0xOkU9MjpQWzFdPT0wJiZQWzNdPT0wP1o9PTA/RT0xOkU9MzpaPT0wP0U9MjpFPTN9ZWxzZSBpZihHPT00JiZCPT0wKXt2YXIgWj1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqNCk7RT1afWVsc2UgRT16O0U9PTA/Uy5zZXRDZW50ZXIoTC5nZXRDZW50ZXJYKCksTC5nZXRDZW50ZXJZKCktTC5nZXRIZWlnaHQoKS8yLWYuREVGQVVMVF9FREdFX0xFTkdUSC1TLmdldEhlaWdodCgpLzIpOkU9PTE/Uy5zZXRDZW50ZXIoTC5nZXRDZW50ZXJYKCkrTC5nZXRXaWR0aCgpLzIrZi5ERUZBVUxUX0VER0VfTEVOR1RIK1MuZ2V0V2lkdGgoKS8yLEwuZ2V0Q2VudGVyWSgpKTpFPT0yP1Muc2V0Q2VudGVyKEwuZ2V0Q2VudGVyWCgpLEwuZ2V0Q2VudGVyWSgpK0wuZ2V0SGVpZ2h0KCkvMitmLkRFRkFVTFRfRURHRV9MRU5HVEgrUy5nZXRIZWlnaHQoKS8yKTpTLnNldENlbnRlcihMLmdldENlbnRlclgoKS1MLmdldFdpZHRoKCkvMi1mLkRFRkFVTFRfRURHRV9MRU5HVEgtUy5nZXRXaWR0aCgpLzIsTC5nZXRDZW50ZXJZKCkpfSxlLmV4cG9ydHM9d30sZnVuY3Rpb24oZSxyLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT17fTtpLmxheW91dEJhc2U9bigwKSxpLkNvU0VDb25zdGFudHM9bigxKSxpLkNvU0VFZGdlPW4oMiksaS5Db1NFR3JhcGg9bigzKSxpLkNvU0VHcmFwaE1hbmFnZXI9big0KSxpLkNvU0VMYXlvdXQ9big2KSxpLkNvU0VOb2RlPW4oNSksZS5leHBvcnRzPWl9XSl9KX0pO3ZhciBDMWU9RWkoKEViLERCKT0+eyJ1c2Ugc3RyaWN0IjtvKGZ1bmN0aW9uKGUscil7dHlwZW9mIEViPT0ib2JqZWN0IiYmdHlwZW9mIERCPT0ib2JqZWN0Ij9EQi5leHBvcnRzPXIoTEIoKSk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoWyJjb3NlLWJhc2UiXSxyKTp0eXBlb2YgRWI9PSJvYmplY3QiP0ViLmN5dG9zY2FwZUNvc2VCaWxrZW50PXIoTEIoKSk6ZS5jeXRvc2NhcGVDb3NlQmlsa2VudD1yKGUuY29zZUJhc2UpfSwid2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iKShFYixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9e307ZnVuY3Rpb24gbihpKXtpZihyW2ldKXJldHVybiByW2ldLmV4cG9ydHM7dmFyIGE9cltpXT17aSxsOiExLGV4cG9ydHM6e319O3JldHVybiBlW2ldLmNhbGwoYS5leHBvcnRzLGEsYS5leHBvcnRzLG4pLGEubD0hMCxhLmV4cG9ydHN9cmV0dXJuIG8obiwiX193ZWJwYWNrX3JlcXVpcmVfXyIpLG4ubT1lLG4uYz1yLG4uaT1mdW5jdGlvbihpKXtyZXR1cm4gaX0sbi5kPWZ1bmN0aW9uKGksYSxzKXtuLm8oaSxhKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGksYSx7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0OnN9KX0sbi5uPWZ1bmN0aW9uKGkpe3ZhciBhPWkmJmkuX19lc01vZHVsZT9vKGZ1bmN0aW9uKCl7cmV0dXJuIGkuZGVmYXVsdH0sImdldERlZmF1bHQiKTpvKGZ1bmN0aW9uKCl7cmV0dXJuIGl9LCJnZXRNb2R1bGVFeHBvcnRzIik7cmV0dXJuIG4uZChhLCJhIixhKSxhfSxuLm89ZnVuY3Rpb24oaSxhKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGksYSl9LG4ucD0iIixuKG4ucz0xKX0oW2Z1bmN0aW9uKGUscil7ZS5leHBvcnRzPXR9LGZ1bmN0aW9uKGUscixuKXsidXNlIHN0cmljdCI7dmFyIGk9bigwKS5sYXlvdXRCYXNlLkxheW91dENvbnN0YW50cyxhPW4oMCkubGF5b3V0QmFzZS5GRExheW91dENvbnN0YW50cyxzPW4oMCkuQ29TRUNvbnN0YW50cyxsPW4oMCkuQ29TRUxheW91dCx1PW4oMCkuQ29TRU5vZGUsaD1uKDApLmxheW91dEJhc2UuUG9pbnRELGY9bigwKS5sYXlvdXRCYXNlLkRpbWVuc2lvbkQsZD17cmVhZHk6byhmdW5jdGlvbigpe30sInJlYWR5Iiksc3RvcDpvKGZ1bmN0aW9uKCl7fSwic3RvcCIpLHF1YWxpdHk6ImRlZmF1bHQiLG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMSxyZWZyZXNoOjMwLGZpdDohMCxwYWRkaW5nOjEwLHJhbmRvbWl6ZTohMCxub2RlUmVwdWxzaW9uOjQ1MDAsaWRlYWxFZGdlTGVuZ3RoOjUwLGVkZ2VFbGFzdGljaXR5Oi40NSxuZXN0aW5nRmFjdG9yOi4xLGdyYXZpdHk6LjI1LG51bUl0ZXI6MjUwMCx0aWxlOiEwLGFuaW1hdGU6ImVuZCIsYW5pbWF0aW9uRHVyYXRpb246NTAwLHRpbGluZ1BhZGRpbmdWZXJ0aWNhbDoxMCx0aWxpbmdQYWRkaW5nSG9yaXpvbnRhbDoxMCxncmF2aXR5UmFuZ2VDb21wb3VuZDoxLjUsZ3Jhdml0eUNvbXBvdW5kOjEsZ3Jhdml0eVJhbmdlOjMuOCxpbml0aWFsRW5lcmd5T25JbmNyZW1lbnRhbDouNX07ZnVuY3Rpb24gcCh2LHgpe3ZhciBiPXt9O2Zvcih2YXIgdyBpbiB2KWJbd109dlt3XTtmb3IodmFyIHcgaW4geCliW3ddPXhbd107cmV0dXJuIGJ9byhwLCJleHRlbmQiKTtmdW5jdGlvbiBtKHYpe3RoaXMub3B0aW9ucz1wKGQsdiksZyh0aGlzLm9wdGlvbnMpfW8obSwiX0NvU0VMYXlvdXQiKTt2YXIgZz1vKGZ1bmN0aW9uKHgpe3gubm9kZVJlcHVsc2lvbiE9bnVsbCYmKHMuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEg9YS5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSD14Lm5vZGVSZXB1bHNpb24pLHguaWRlYWxFZGdlTGVuZ3RoIT1udWxsJiYocy5ERUZBVUxUX0VER0VfTEVOR1RIPWEuREVGQVVMVF9FREdFX0xFTkdUSD14LmlkZWFsRWRnZUxlbmd0aCkseC5lZGdlRWxhc3RpY2l0eSE9bnVsbCYmKHMuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEg9YS5ERUZBVUxUX1NQUklOR19TVFJFTkdUSD14LmVkZ2VFbGFzdGljaXR5KSx4Lm5lc3RpbmdGYWN0b3IhPW51bGwmJihzLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1I9YS5QRVJfTEVWRUxfSURFQUxfRURHRV9MRU5HVEhfRkFDVE9SPXgubmVzdGluZ0ZhY3RvcikseC5ncmF2aXR5IT1udWxsJiYocy5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEg9YS5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEg9eC5ncmF2aXR5KSx4Lm51bUl0ZXIhPW51bGwmJihzLk1BWF9JVEVSQVRJT05TPWEuTUFYX0lURVJBVElPTlM9eC5udW1JdGVyKSx4LmdyYXZpdHlSYW5nZSE9bnVsbCYmKHMuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj1hLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1I9eC5ncmF2aXR5UmFuZ2UpLHguZ3Jhdml0eUNvbXBvdW5kIT1udWxsJiYocy5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEg9YS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEg9eC5ncmF2aXR5Q29tcG91bmQpLHguZ3Jhdml0eVJhbmdlQ29tcG91bmQhPW51bGwmJihzLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1I9YS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SPXguZ3Jhdml0eVJhbmdlQ29tcG91bmQpLHguaW5pdGlhbEVuZXJneU9uSW5jcmVtZW50YWwhPW51bGwmJihzLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUw9YS5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMPXguaW5pdGlhbEVuZXJneU9uSW5jcmVtZW50YWwpLHgucXVhbGl0eT09ImRyYWZ0Ij9pLlFVQUxJVFk9MDp4LnF1YWxpdHk9PSJwcm9vZiI/aS5RVUFMSVRZPTI6aS5RVUFMSVRZPTEscy5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFM9YS5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFM9aS5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFM9eC5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHMscy5ERUZBVUxUX0lOQ1JFTUVOVEFMPWEuREVGQVVMVF9JTkNSRU1FTlRBTD1pLkRFRkFVTFRfSU5DUkVNRU5UQUw9IXgucmFuZG9taXplLHMuQU5JTUFURT1hLkFOSU1BVEU9aS5BTklNQVRFPXguYW5pbWF0ZSxzLlRJTEU9eC50aWxlLHMuVElMSU5HX1BBRERJTkdfVkVSVElDQUw9dHlwZW9mIHgudGlsaW5nUGFkZGluZ1ZlcnRpY2FsPT0iZnVuY3Rpb24iP3gudGlsaW5nUGFkZGluZ1ZlcnRpY2FsLmNhbGwoKTp4LnRpbGluZ1BhZGRpbmdWZXJ0aWNhbCxzLlRJTElOR19QQURESU5HX0hPUklaT05UQUw9dHlwZW9mIHgudGlsaW5nUGFkZGluZ0hvcml6b250YWw9PSJmdW5jdGlvbiI/eC50aWxpbmdQYWRkaW5nSG9yaXpvbnRhbC5jYWxsKCk6eC50aWxpbmdQYWRkaW5nSG9yaXpvbnRhbH0sImdldFVzZXJPcHRpb25zIik7bS5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIHYseCxiPXRoaXMub3B0aW9ucyx3PXRoaXMuaWRUb0xOb2RlPXt9LF89dGhpcy5sYXlvdXQ9bmV3IGwsVD10aGlzO1Quc3RvcHBlZD0hMSx0aGlzLmN5PXRoaXMub3B0aW9ucy5jeSx0aGlzLmN5LnRyaWdnZXIoe3R5cGU6ImxheW91dHN0YXJ0IixsYXlvdXQ6dGhpc30pO3ZhciBFPV8ubmV3R3JhcGhNYW5hZ2VyKCk7dGhpcy5nbT1FO3ZhciBMPXRoaXMub3B0aW9ucy5lbGVzLm5vZGVzKCksUz10aGlzLm9wdGlvbnMuZWxlcy5lZGdlcygpO3RoaXMucm9vdD1FLmFkZFJvb3QoKSx0aGlzLnByb2Nlc3NDaGlsZHJlbkxpc3QodGhpcy5yb290LHRoaXMuZ2V0VG9wTW9zdE5vZGVzKEwpLF8pO2Zvcih2YXIgQT0wO0E8Uy5sZW5ndGg7QSsrKXt2YXIgST1TW0FdLEQ9dGhpcy5pZFRvTE5vZGVbSS5kYXRhKCJzb3VyY2UiKV0saz10aGlzLmlkVG9MTm9kZVtJLmRhdGEoInRhcmdldCIpXTtpZihEIT09ayYmRC5nZXRFZGdlc0JldHdlZW4oaykubGVuZ3RoPT0wKXt2YXIgUj1FLmFkZChfLm5ld0VkZ2UoKSxELGspO1IuaWQ9SS5pZCgpfX12YXIgQz1vKGZ1bmN0aW9uKFAsRil7dHlwZW9mIFA9PSJudW1iZXIiJiYoUD1GKTt2YXIgQj1QLmRhdGEoImlkIiksRz1ULmlkVG9MTm9kZVtCXTtyZXR1cm57eDpHLmdldFJlY3QoKS5nZXRDZW50ZXJYKCkseTpHLmdldFJlY3QoKS5nZXRDZW50ZXJZKCl9fSwiZ2V0UG9zaXRpb25zIiksTz1vKGZ1bmN0aW9uIE4oKXtmb3IodmFyIFA9byhmdW5jdGlvbigpe2IuZml0JiZiLmN5LmZpdChiLmVsZXMsYi5wYWRkaW5nKSx2fHwodj0hMCxULmN5Lm9uZSgibGF5b3V0cmVhZHkiLGIucmVhZHkpLFQuY3kudHJpZ2dlcih7dHlwZToibGF5b3V0cmVhZHkiLGxheW91dDpUfSkpfSwiYWZ0ZXJSZXBvc2l0aW9uIiksRj1ULm9wdGlvbnMucmVmcmVzaCxCLEc9MDtHPEYmJiFCO0crKylCPVQuc3RvcHBlZHx8VC5sYXlvdXQudGljaygpO2lmKEIpe18uY2hlY2tMYXlvdXRTdWNjZXNzKCkmJiFfLmlzU3ViTGF5b3V0JiZfLmRvUG9zdExheW91dCgpLF8udGlsaW5nUG9zdExheW91dCYmXy50aWxpbmdQb3N0TGF5b3V0KCksXy5pc0xheW91dEZpbmlzaGVkPSEwLFQub3B0aW9ucy5lbGVzLm5vZGVzKCkucG9zaXRpb25zKEMpLFAoKSxULmN5Lm9uZSgibGF5b3V0c3RvcCIsVC5vcHRpb25zLnN0b3ApLFQuY3kudHJpZ2dlcih7dHlwZToibGF5b3V0c3RvcCIsbGF5b3V0OlR9KSx4JiZjYW5jZWxBbmltYXRpb25GcmFtZSh4KSx2PSExO3JldHVybn12YXIgej1ULmxheW91dC5nZXRQb3NpdGlvbnNEYXRhKCk7Yi5lbGVzLm5vZGVzKCkucG9zaXRpb25zKGZ1bmN0aW9uKFcsWil7aWYodHlwZW9mIFc9PSJudW1iZXIiJiYoVz1aKSwhVy5pc1BhcmVudCgpKXtmb3IodmFyIGo9Vy5pZCgpLG9lPXpbal0sSz1XO29lPT1udWxsJiYob2U9eltLLmRhdGEoInBhcmVudCIpXXx8elsiRHVtbXlDb21wb3VuZF8iK0suZGF0YSgicGFyZW50IildLHpbal09b2UsSz1LLnBhcmVudCgpWzBdLEshPW51bGwpOyk7cmV0dXJuIG9lIT1udWxsP3t4Om9lLngseTpvZS55fTp7eDpXLnBvc2l0aW9uKCJ4IikseTpXLnBvc2l0aW9uKCJ5Iil9fX0pLFAoKSx4PXJlcXVlc3RBbmltYXRpb25GcmFtZShOKX0sIml0ZXJhdGVBbmltYXRlZCIpO3JldHVybiBfLmFkZExpc3RlbmVyKCJsYXlvdXRzdGFydGVkIixmdW5jdGlvbigpe1Qub3B0aW9ucy5hbmltYXRlPT09ImR1cmluZyImJih4PXJlcXVlc3RBbmltYXRpb25GcmFtZShPKSl9KSxfLnJ1bkxheW91dCgpLHRoaXMub3B0aW9ucy5hbmltYXRlIT09ImR1cmluZyImJihULm9wdGlvbnMuZWxlcy5ub2RlcygpLm5vdCgiOnBhcmVudCIpLmxheW91dFBvc2l0aW9ucyhULFQub3B0aW9ucyxDKSx2PSExKSx0aGlzfSxtLnByb3RvdHlwZS5nZXRUb3BNb3N0Tm9kZXM9ZnVuY3Rpb24odil7Zm9yKHZhciB4PXt9LGI9MDtiPHYubGVuZ3RoO2IrKyl4W3ZbYl0uaWQoKV09ITA7dmFyIHc9di5maWx0ZXIoZnVuY3Rpb24oXyxUKXt0eXBlb2YgXz09Im51bWJlciImJihfPVQpO2Zvcih2YXIgRT1fLnBhcmVudCgpWzBdO0UhPW51bGw7KXtpZih4W0UuaWQoKV0pcmV0dXJuITE7RT1FLnBhcmVudCgpWzBdfXJldHVybiEwfSk7cmV0dXJuIHd9LG0ucHJvdG90eXBlLnByb2Nlc3NDaGlsZHJlbkxpc3Q9ZnVuY3Rpb24odix4LGIpe2Zvcih2YXIgdz14Lmxlbmd0aCxfPTA7Xzx3O18rKyl7dmFyIFQ9eFtfXSxFPVQuY2hpbGRyZW4oKSxMLFM9VC5sYXlvdXREaW1lbnNpb25zKHtub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6dGhpcy5vcHRpb25zLm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsc30pO2lmKFQub3V0ZXJXaWR0aCgpIT1udWxsJiZULm91dGVySGVpZ2h0KCkhPW51bGw/TD12LmFkZChuZXcgdShiLmdyYXBoTWFuYWdlcixuZXcgaChULnBvc2l0aW9uKCJ4IiktUy53LzIsVC5wb3NpdGlvbigieSIpLVMuaC8yKSxuZXcgZihwYXJzZUZsb2F0KFMudykscGFyc2VGbG9hdChTLmgpKSkpOkw9di5hZGQobmV3IHUodGhpcy5ncmFwaE1hbmFnZXIpKSxMLmlkPVQuZGF0YSgiaWQiKSxMLnBhZGRpbmdMZWZ0PXBhcnNlSW50KFQuY3NzKCJwYWRkaW5nIikpLEwucGFkZGluZ1RvcD1wYXJzZUludChULmNzcygicGFkZGluZyIpKSxMLnBhZGRpbmdSaWdodD1wYXJzZUludChULmNzcygicGFkZGluZyIpKSxMLnBhZGRpbmdCb3R0b209cGFyc2VJbnQoVC5jc3MoInBhZGRpbmciKSksdGhpcy5vcHRpb25zLm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVscyYmVC5pc1BhcmVudCgpKXt2YXIgQT1ULmJvdW5kaW5nQm94KHtpbmNsdWRlTGFiZWxzOiEwLGluY2x1ZGVOb2RlczohMX0pLncsST1ULmJvdW5kaW5nQm94KHtpbmNsdWRlTGFiZWxzOiEwLGluY2x1ZGVOb2RlczohMX0pLmgsRD1ULmNzcygidGV4dC1oYWxpZ24iKTtMLmxhYmVsV2lkdGg9QSxMLmxhYmVsSGVpZ2h0PUksTC5sYWJlbFBvcz1EfWlmKHRoaXMuaWRUb0xOb2RlW1QuZGF0YSgiaWQiKV09TCxpc05hTihMLnJlY3QueCkmJihMLnJlY3QueD0wKSxpc05hTihMLnJlY3QueSkmJihMLnJlY3QueT0wKSxFIT1udWxsJiZFLmxlbmd0aD4wKXt2YXIgaztrPWIuZ2V0R3JhcGhNYW5hZ2VyKCkuYWRkKGIubmV3R3JhcGgoKSxMKSx0aGlzLnByb2Nlc3NDaGlsZHJlbkxpc3QoayxFLGIpfX19LG0ucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdG9wcGVkPSEwLHRoaXN9O3ZhciB5PW8oZnVuY3Rpb24oeCl7eCgibGF5b3V0IiwiY29zZS1iaWxrZW50IixtKX0sInJlZ2lzdGVyIik7dHlwZW9mIGN5dG9zY2FwZTwidSImJnkoY3l0b3NjYXBlKSxlLmV4cG9ydHM9eX1dKX0pfSk7ZnVuY3Rpb24gaXR0KHQsZSxyLG4saSl7cmV0dXJuIHQuaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIixuLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS54KyIsIithLnl9KS5qb2luKCIgIikpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhpLndpZHRoLWUpLzIrIiwgIityKyIpIil9dmFyIFpldCxKZXQsZXR0LHR0dCxydHQsbnR0LGF0dCxzdHQsQTFlLF8xZSxMMWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtQbCgpO2hyKCk7WmV0PTEyLEpldD1vKGZ1bmN0aW9uKHQsZSxyLG4pe2UuYXBwZW5kKCJwYXRoIikuYXR0cigiaWQiLCJub2RlLSIrci5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrdC50eXBlMlN0cihyLnR5cGUpKS5hdHRyKCJkIixgTTAgJHtyLmhlaWdodC01fSB2JHstci5oZWlnaHQrMio1fSBxMCwtNSA1LC01IGgke3Iud2lkdGgtMio1fSBxNSwwIDUsNSB2JHtyLmhlaWdodC01fSBIMCBaYCksZS5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsIm5vZGUtbGluZS0iK24pLmF0dHIoIngxIiwwKS5hdHRyKCJ5MSIsci5oZWlnaHQpLmF0dHIoIngyIixyLndpZHRoKS5hdHRyKCJ5MiIsci5oZWlnaHQpfSwiZGVmYXVsdEJrZyIpLGV0dD1vKGZ1bmN0aW9uKHQsZSxyKXtlLmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIiwibm9kZS0iK3IuaWQpLmF0dHIoImNsYXNzIiwibm9kZS1ia2cgbm9kZS0iK3QudHlwZTJTdHIoci50eXBlKSkuYXR0cigiaGVpZ2h0IixyLmhlaWdodCkuYXR0cigid2lkdGgiLHIud2lkdGgpfSwicmVjdEJrZyIpLHR0dD1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1yLndpZHRoLGk9ci5oZWlnaHQsYT0uMTUqbixzPS4yNSpuLGw9LjM1Km4sdT0uMipuO2UuYXBwZW5kKCJwYXRoIikuYXR0cigiaWQiLCJub2RlLSIrci5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrdC50eXBlMlN0cihyLnR5cGUpKS5hdHRyKCJkIixgTTAgMCBhJHthfSwke2F9IDAgMCwxICR7biouMjV9LCR7LTEqbiouMX0KICAgICAgYSR7bH0sJHtsfSAxIDAsMSAke24qLjR9LCR7LTEqbiouMX0KICAgICAgYSR7c30sJHtzfSAxIDAsMSAke24qLjM1fSwkezEqbiouMn0KCiAgICAgIGEke2F9LCR7YX0gMSAwLDEgJHtuKi4xNX0sJHsxKmkqLjM1fQogICAgICBhJHt1fSwke3V9IDEgMCwxICR7LTEqbiouMTV9LCR7MSppKi42NX0KCiAgICAgIGEke3N9LCR7YX0gMSAwLDEgJHstMSpuKi4yNX0sJHtuKi4xNX0KICAgICAgYSR7bH0sJHtsfSAxIDAsMSAkey0xKm4qLjV9LDAKICAgICAgYSR7YX0sJHthfSAxIDAsMSAkey0xKm4qLjI1fSwkey0xKm4qLjE1fQoKICAgICAgYSR7YX0sJHthfSAxIDAsMSAkey0xKm4qLjF9LCR7LTEqaSouMzV9CiAgICAgIGEke3V9LCR7dX0gMSAwLDEgJHtuKi4xfSwkey0xKmkqLjY1fQoKICAgIEgwIFYwIFpgKX0sImNsb3VkQmtnIikscnR0PW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPXIud2lkdGgsaT1yLmhlaWdodCxhPS4xNSpuO2UuYXBwZW5kKCJwYXRoIikuYXR0cigiaWQiLCJub2RlLSIrci5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrdC50eXBlMlN0cihyLnR5cGUpKS5hdHRyKCJkIixgTTAgMCBhJHthfSwke2F9IDEgMCwwICR7biouMjV9LCR7LTEqaSouMX0KICAgICAgYSR7YX0sJHthfSAxIDAsMCAke24qLjI1fSwwCiAgICAgIGEke2F9LCR7YX0gMSAwLDAgJHtuKi4yNX0sMAogICAgICBhJHthfSwke2F9IDEgMCwwICR7biouMjV9LCR7MSppKi4xfQoKICAgICAgYSR7YX0sJHthfSAxIDAsMCAke24qLjE1fSwkezEqaSouMzN9CiAgICAgIGEke2EqLjh9LCR7YSouOH0gMSAwLDAgMCwkezEqaSouMzR9CiAgICAgIGEke2F9LCR7YX0gMSAwLDAgJHstMSpuKi4xNX0sJHsxKmkqLjMzfQoKICAgICAgYSR7YX0sJHthfSAxIDAsMCAkey0xKm4qLjI1fSwke2kqLjE1fQogICAgICBhJHthfSwke2F9IDEgMCwwICR7LTEqbiouMjV9LDAKICAgICAgYSR7YX0sJHthfSAxIDAsMCAkey0xKm4qLjI1fSwwCiAgICAgIGEke2F9LCR7YX0gMSAwLDAgJHstMSpuKi4yNX0sJHstMSppKi4xNX0KCiAgICAgIGEke2F9LCR7YX0gMSAwLDAgJHstMSpuKi4xfSwkey0xKmkqLjMzfQogICAgICBhJHthKi44fSwke2EqLjh9IDEgMCwwIDAsJHstMSppKi4zNH0KICAgICAgYSR7YX0sJHthfSAxIDAsMCAke24qLjF9LCR7LTEqaSouMzN9CgogICAgSDAgVjAgWmApfSwiYmFuZ0JrZyIpLG50dD1vKGZ1bmN0aW9uKHQsZSxyKXtlLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiaWQiLCJub2RlLSIrci5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrdC50eXBlMlN0cihyLnR5cGUpKS5hdHRyKCJyIixyLndpZHRoLzIpfSwiY2lyY2xlQmtnIik7byhpdHQsImluc2VydFBvbHlnb25TaGFwZSIpO2F0dD1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1yLmhlaWdodCxhPW4vNCxzPXIud2lkdGgtci5wYWRkaW5nKzIqYSxsPVt7eDphLHk6MH0se3g6cy1hLHk6MH0se3g6cyx5Oi1uLzJ9LHt4OnMtYSx5Oi1ufSx7eDphLHk6LW59LHt4OjAseTotbi8yfV07aXR0KGUscyxuLGwscil9LCJoZXhhZ29uQmtnIiksc3R0PW8oZnVuY3Rpb24odCxlLHIpe2UuYXBwZW5kKCJyZWN0IikuYXR0cigiaWQiLCJub2RlLSIrci5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrdC50eXBlMlN0cihyLnR5cGUpKS5hdHRyKCJoZWlnaHQiLHIuaGVpZ2h0KS5hdHRyKCJyeCIsci5wYWRkaW5nKS5hdHRyKCJyeSIsci5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsci53aWR0aCl9LCJyb3VuZGVkUmVjdEJrZyIpLEExZT1vKGFzeW5jIGZ1bmN0aW9uKHQsZSxyLG4saSl7bGV0IGE9aS5odG1sTGFiZWxzLHM9biUoWmV0LTEpLGw9ZS5hcHBlbmQoImciKTtyLnNlY3Rpb249cztsZXQgdT0ic2VjdGlvbi0iK3M7czwwJiYodSs9IiBzZWN0aW9uLXJvb3QiKSxsLmF0dHIoImNsYXNzIiwoci5jbGFzcz9yLmNsYXNzKyIgIjoiIikrIm1pbmRtYXAtbm9kZSAiK3UpO2xldCBoPWwuYXBwZW5kKCJnIiksZj1sLmFwcGVuZCgiZyIpLGQ9ci5kZXNjci5yZXBsYWNlKC8oPGJyXC8qPikvZyxgCmApO2F3YWl0IExpKGYsZCx7dXNlSHRtbExhYmVsczphLHdpZHRoOnIud2lkdGgsY2xhc3NlczoibWluZG1hcC1ub2RlLWxhYmVsIn0saSksYXx8Zi5hdHRyKCJkeSIsIjFlbSIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKTtsZXQgcD1mLm5vZGUoKS5nZXRCQm94KCksW21dPUhvKGkuZm9udFNpemUpO2lmKHIuaGVpZ2h0PXAuaGVpZ2h0K20qMS4xKi41K3IucGFkZGluZyxyLndpZHRoPXAud2lkdGgrMipyLnBhZGRpbmcsci5pY29uKWlmKHIudHlwZT09PXQubm9kZVR5cGUuQ0lSQ0xFKXIuaGVpZ2h0Kz01MCxyLndpZHRoKz01MCxsLmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoImhlaWdodCIsIjUwcHgiKS5hdHRyKCJ3aWR0aCIsci53aWR0aCkuYXR0cigic3R5bGUiLCJ0ZXh0LWFsaWduOiBjZW50ZXI7IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImljb24tY29udGFpbmVyIikuYXBwZW5kKCJpIikuYXR0cigiY2xhc3MiLCJub2RlLWljb24tIitzKyIgIityLmljb24pLGYuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrci53aWR0aC8yKyIsICIrKHIuaGVpZ2h0LzItMS41KnIucGFkZGluZykrIikiKTtlbHNle3Iud2lkdGgrPTUwO2xldCBnPXIuaGVpZ2h0O3IuaGVpZ2h0PU1hdGgubWF4KGcsNjApO2xldCB5PU1hdGguYWJzKHIuaGVpZ2h0LWcpO2wuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigid2lkdGgiLCI2MHB4IikuYXR0cigiaGVpZ2h0IixyLmhlaWdodCkuYXR0cigic3R5bGUiLCJ0ZXh0LWFsaWduOiBjZW50ZXI7bWFyZ2luLXRvcDoiK3kvMisicHg7IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImljb24tY29udGFpbmVyIikuYXBwZW5kKCJpIikuYXR0cigiY2xhc3MiLCJub2RlLWljb24tIitzKyIgIityLmljb24pLGYuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKDI1K3Iud2lkdGgvMikrIiwgIisoeS8yK3IucGFkZGluZy8yKSsiKSIpfWVsc2UgaWYoYSl7bGV0IGc9KHIud2lkdGgtcC53aWR0aCkvMix5PShyLmhlaWdodC1wLmhlaWdodCkvMjtmLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2crIiwgIit5KyIpIil9ZWxzZXtsZXQgZz1yLndpZHRoLzIseT1yLnBhZGRpbmcvMjtmLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2crIiwgIit5KyIpIil9c3dpdGNoKHIudHlwZSl7Y2FzZSB0Lm5vZGVUeXBlLkRFRkFVTFQ6SmV0KHQsaCxyLHMpO2JyZWFrO2Nhc2UgdC5ub2RlVHlwZS5ST1VOREVEX1JFQ1Q6c3R0KHQsaCxyLHMpO2JyZWFrO2Nhc2UgdC5ub2RlVHlwZS5SRUNUOmV0dCh0LGgscixzKTticmVhaztjYXNlIHQubm9kZVR5cGUuQ0lSQ0xFOmguYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrci53aWR0aC8yKyIsICIrICtyLmhlaWdodC8yKyIpIiksbnR0KHQsaCxyLHMpO2JyZWFrO2Nhc2UgdC5ub2RlVHlwZS5DTE9VRDp0dHQodCxoLHIscyk7YnJlYWs7Y2FzZSB0Lm5vZGVUeXBlLkJBTkc6cnR0KHQsaCxyLHMpO2JyZWFrO2Nhc2UgdC5ub2RlVHlwZS5IRVhBR09OOmF0dCh0LGgscixzKTticmVha31yZXR1cm4gdC5zZXRFbGVtZW50Rm9ySWQoci5pZCxsKSxyLmhlaWdodH0sImRyYXdOb2RlIiksXzFlPW8oZnVuY3Rpb24odCxlKXtsZXQgcj10LmdldEVsZW1lbnRCeUlkKGUuaWQpLG49ZS54fHwwLGk9ZS55fHwwO3IuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbisiLCIraSsiKSIpfSwicG9zaXRpb25Ob2RlIil9KTthc3luYyBmdW5jdGlvbiBOMWUodCxlLHIsbixpKXthd2FpdCBBMWUodCxlLHIsbixpKSxyLmNoaWxkcmVuJiZhd2FpdCBQcm9taXNlLmFsbChyLmNoaWxkcmVuLm1hcCgoYSxzKT0+TjFlKHQsZSxhLG48MD9zOm4saSkpKX1mdW5jdGlvbiBvdHQodCxlKXtlLmVkZ2VzKCkubWFwKChyLG4pPT57bGV0IGk9ci5kYXRhKCk7aWYoclswXS5fcHJpdmF0ZS5ib2R5Qm91bmRzKXtsZXQgYT1yWzBdLl9wcml2YXRlLnJzY3JhdGNoO1kudHJhY2UoIkVkZ2U6ICIsbixpKSx0Lmluc2VydCgicGF0aCIpLmF0dHIoImQiLGBNICR7YS5zdGFydFh9LCR7YS5zdGFydFl9IEwgJHthLm1pZFh9LCR7YS5taWRZfSBMJHthLmVuZFh9LCR7YS5lbmRZfSBgKS5hdHRyKCJjbGFzcyIsImVkZ2Ugc2VjdGlvbi1lZGdlLSIraS5zZWN0aW9uKyIgZWRnZS1kZXB0aC0iK2kuZGVwdGgpfX0pfWZ1bmN0aW9uIFIxZSh0LGUscixuKXtlLmFkZCh7Z3JvdXA6Im5vZGVzIixkYXRhOntpZDp0LmlkLnRvU3RyaW5nKCksbGFiZWxUZXh0OnQuZGVzY3IsaGVpZ2h0OnQuaGVpZ2h0LHdpZHRoOnQud2lkdGgsbGV2ZWw6bixub2RlSWQ6dC5pZCxwYWRkaW5nOnQucGFkZGluZyx0eXBlOnQudHlwZX0scG9zaXRpb246e3g6dC54LHk6dC55fX0pLHQuY2hpbGRyZW4mJnQuY2hpbGRyZW4uZm9yRWFjaChpPT57UjFlKGksZSxyLG4rMSksZS5hZGQoe2dyb3VwOiJlZGdlcyIsZGF0YTp7aWQ6YCR7dC5pZH1fJHtpLmlkfWAsc291cmNlOnQuaWQsdGFyZ2V0OmkuaWQsZGVwdGg6bixzZWN0aW9uOmkuc2VjdGlvbn19KX0pfWZ1bmN0aW9uIGx0dCh0LGUpe3JldHVybiBuZXcgUHJvbWlzZShyPT57bGV0IG49VmUoImJvZHkiKS5hcHBlbmQoImRpdiIpLmF0dHIoImlkIiwiY3kiKS5hdHRyKCJzdHlsZSIsImRpc3BsYXk6bm9uZSIpLGk9Zmwoe2NvbnRhaW5lcjpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY3kiKSxzdHlsZTpbe3NlbGVjdG9yOiJlZGdlIixzdHlsZTp7ImN1cnZlLXN0eWxlIjoiYmV6aWVyIn19XX0pO24ucmVtb3ZlKCksUjFlKHQsaSxlLDApLGkubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EubGF5b3V0RGltZW5zaW9ucz0oKT0+e2xldCBzPWEuZGF0YSgpO3JldHVybnt3OnMud2lkdGgsaDpzLmhlaWdodH19fSksaS5sYXlvdXQoe25hbWU6ImNvc2UtYmlsa2VudCIscXVhbGl0eToicHJvb2YiLHN0eWxlRW5hYmxlZDohMSxhbmltYXRlOiExfSkucnVuKCksaS5yZWFkeShhPT57WS5pbmZvKCJSZWFkeSIsYSkscihpKX0pfSl9ZnVuY3Rpb24gY3R0KHQsZSl7ZS5ub2RlcygpLm1hcCgocixuKT0+e2xldCBpPXIuZGF0YSgpO2kueD1yLnBvc2l0aW9uKCkueCxpLnk9ci5wb3NpdGlvbigpLnksXzFlKHQsaSk7bGV0IGE9dC5nZXRFbGVtZW50QnlJZChpLm5vZGVJZCk7WS5pbmZvKCJJZDoiLG4sIlBvc2l0aW9uOiAoIixyLnBvc2l0aW9uKCkueCwiLCAiLHIucG9zaXRpb24oKS55LCIpIixpKSxhLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3IucG9zaXRpb24oKS54LWkud2lkdGgvMn0sICR7ci5wb3NpdGlvbigpLnktaS5oZWlnaHQvMn0pYCksYS5hdHRyKCJhdHRyIixgYXBhLSR7bn0pYCl9KX12YXIgRDFlLHV0dCxNMWUsSTFlPU0oKCk9PnsidXNlIHN0cmljdCI7U0IoKTtEMWU9SmkoQzFlKCksMSk7cHIoKTtWdCgpO3V0KCk7ZWgoKTthaSgpO0wxZSgpO2JzKCk7ZmwudXNlKEQxZS5kZWZhdWx0KTtvKE4xZSwiZHJhd05vZGVzIik7byhvdHQsImRyYXdFZGdlcyIpO28oUjFlLCJhZGROb2RlcyIpO28obHR0LCJsYXlvdXRNaW5kbWFwIik7byhjdHQsInBvc2l0aW9uTm9kZXMiKTt1dHQ9byhhc3luYyh0LGUscixuKT0+e1kuZGVidWcoYFJlbmRlcmluZyBtaW5kbWFwIGRpYWdyYW0KYCt0KTtsZXQgaT1uLmRiLGE9aS5nZXRNaW5kbWFwKCk7aWYoIWEpcmV0dXJuO2xldCBzPXBlKCk7cy5odG1sTGFiZWxzPSExO2xldCBsPVZhKGUpLHU9bC5hcHBlbmQoImciKTt1LmF0dHIoImNsYXNzIiwibWluZG1hcC1lZGdlcyIpO2xldCBoPWwuYXBwZW5kKCJnIik7aC5hdHRyKCJjbGFzcyIsIm1pbmRtYXAtbm9kZXMiKSxhd2FpdCBOMWUoaSxoLGEsLTEscyk7bGV0IGY9YXdhaXQgbHR0KGEscyk7b3R0KHUsZiksY3R0KGksZiksSW8odm9pZCAwLGwscy5taW5kbWFwPy5wYWRkaW5nPz91ci5taW5kbWFwLnBhZGRpbmcscy5taW5kbWFwPy51c2VNYXhXaWR0aD8/dXIubWluZG1hcC51c2VNYXhXaWR0aCl9LCJkcmF3IiksTTFlPXtkcmF3OnV0dH19KTt2YXIgaHR0LGZ0dCxPMWUsUDFlPU0oKCk9PnsidXNlIHN0cmljdCI7TG8oKTtodHQ9byh0PT57bGV0IGU9IiI7Zm9yKGxldCByPTA7cjx0LlRIRU1FX0NPTE9SX0xJTUlUO3IrKyl0WyJsaW5lQ29sb3IiK3JdPXRbImxpbmVDb2xvciIrcl18fHRbImNTY2FsZUludiIrcl0sZmEodFsibGluZUNvbG9yIityXSk/dFsibGluZUNvbG9yIityXT1fdCh0WyJsaW5lQ29sb3IiK3JdLDIwKTp0WyJsaW5lQ29sb3IiK3JdPUl0KHRbImxpbmVDb2xvciIrcl0sMjApO2ZvcihsZXQgcj0wO3I8dC5USEVNRV9DT0xPUl9MSU1JVDtyKyspe2xldCBuPSIiKygxNy0zKnIpO2UrPWAKICAgIC5zZWN0aW9uLSR7ci0xfSByZWN0LCAuc2VjdGlvbi0ke3ItMX0gcGF0aCwgLnNlY3Rpb24tJHtyLTF9IGNpcmNsZSwgLnNlY3Rpb24tJHtyLTF9IHBvbHlnb24sIC5zZWN0aW9uLSR7ci0xfSBwYXRoICB7CiAgICAgIGZpbGw6ICR7dFsiY1NjYWxlIityXX07CiAgICB9CiAgICAuc2VjdGlvbi0ke3ItMX0gdGV4dCB7CiAgICAgZmlsbDogJHt0WyJjU2NhbGVMYWJlbCIrcl19OwogICAgfQogICAgLm5vZGUtaWNvbi0ke3ItMX0gewogICAgICBmb250LXNpemU6IDQwcHg7CiAgICAgIGNvbG9yOiAke3RbImNTY2FsZUxhYmVsIityXX07CiAgICB9CiAgICAuc2VjdGlvbi1lZGdlLSR7ci0xfXsKICAgICAgc3Ryb2tlOiAke3RbImNTY2FsZSIrcl19OwogICAgfQogICAgLmVkZ2UtZGVwdGgtJHtyLTF9ewogICAgICBzdHJva2Utd2lkdGg6ICR7bn07CiAgICB9CiAgICAuc2VjdGlvbi0ke3ItMX0gbGluZSB7CiAgICAgIHN0cm9rZTogJHt0WyJjU2NhbGVJbnYiK3JdfSA7CiAgICAgIHN0cm9rZS13aWR0aDogMzsKICAgIH0KCiAgICAuZGlzYWJsZWQsIC5kaXNhYmxlZCBjaXJjbGUsIC5kaXNhYmxlZCB0ZXh0IHsKICAgICAgZmlsbDogbGlnaHRncmF5OwogICAgfQogICAgLmRpc2FibGVkIHRleHQgewogICAgICBmaWxsOiAjZWZlZmVmOwogICAgfQogICAgYH1yZXR1cm4gZX0sImdlblNlY3Rpb25zIiksZnR0PW8odD0+YAogIC5lZGdlIHsKICAgIHN0cm9rZS13aWR0aDogMzsKICB9CiAgJHtodHQodCl9CiAgLnNlY3Rpb24tcm9vdCByZWN0LCAuc2VjdGlvbi1yb290IHBhdGgsIC5zZWN0aW9uLXJvb3QgY2lyY2xlLCAuc2VjdGlvbi1yb290IHBvbHlnb24gIHsKICAgIGZpbGw6ICR7dC5naXQwfTsKICB9CiAgLnNlY3Rpb24tcm9vdCB0ZXh0IHsKICAgIGZpbGw6ICR7dC5naXRCcmFuY2hMYWJlbDB9OwogIH0KICAuaWNvbi1jb250YWluZXIgewogICAgaGVpZ2h0OjEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogIH0KICAuZWRnZSB7CiAgICBmaWxsOiBub25lOwogIH0KICAubWluZG1hcC1ub2RlLWxhYmVsIHsKICAgIGR5OiAxZW07CiAgICBhbGlnbm1lbnQtYmFzZWxpbmU6IG1pZGRsZTsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBkb21pbmFudC1iYXNlbGluZTogbWlkZGxlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KYCwiZ2V0U3R5bGVzIiksTzFlPWZ0dH0pO3ZhciBCMWU9e307dnIoQjFlLHtkaWFncmFtOigpPT5kdHR9KTt2YXIgZHR0LEYxZT1NKCgpPT57InVzZSBzdHJpY3QiO2twZSgpO0NwZSgpO0kxZSgpO1AxZSgpO2R0dD17ZGI6U3BlLHJlbmRlcmVyOk0xZSxwYXJzZXI6VHBlLHN0eWxlczpPMWV9fSk7dmFyIE5CLCQxZSxWMWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtOQj1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oTCxTLEEsSSl7Zm9yKEE9QXx8e30sST1MLmxlbmd0aDtJLS07QVtMW0ldXT1TKTtyZXR1cm4gQX0sIm8iKSxlPVsxLDRdLHI9WzEsMTNdLG49WzEsMTJdLGk9WzEsMTVdLGE9WzEsMTZdLHM9WzEsMjBdLGw9WzEsMTldLHU9WzYsNyw4XSxoPVsxLDI2XSxmPVsxLDI0XSxkPVsxLDI1XSxwPVs2LDcsMTFdLG09WzEsMzFdLGc9WzYsNywxMSwyNF0seT1bMSw2LDEzLDE2LDE3LDIwLDIzXSx2PVsxLDM1XSx4PVsxLDM2XSxiPVsxLDYsNywxMSwxMywxNiwxNywyMCwyM10sdz1bMSwzOF0sXz17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxtaW5kTWFwOjQsc3BhY2VMaW5lczo1LFNQQUNFTElORTo2LE5MOjcsS0FOQkFOOjgsZG9jdW1lbnQ6OSxzdG9wOjEwLEVPRjoxMSxzdGF0ZW1lbnQ6MTIsU1BBQ0VMSVNUOjEzLG5vZGU6MTQsc2hhcGVEYXRhOjE1LElDT046MTYsQ0xBU1M6MTcsbm9kZVdpdGhJZDoxOCxub2RlV2l0aG91dElkOjE5LE5PREVfRFNUQVJUOjIwLE5PREVfREVTQ1I6MjEsTk9ERV9ERU5EOjIyLE5PREVfSUQ6MjMsU0hBUEVfREFUQToyNCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNjoiU1BBQ0VMSU5FIiw3OiJOTCIsODoiS0FOQkFOIiwxMToiRU9GIiwxMzoiU1BBQ0VMSVNUIiwxNjoiSUNPTiIsMTc6IkNMQVNTIiwyMDoiTk9ERV9EU1RBUlQiLDIxOiJOT0RFX0RFU0NSIiwyMjoiTk9ERV9ERU5EIiwyMzoiTk9ERV9JRCIsMjQ6IlNIQVBFX0RBVEEifSxwcm9kdWN0aW9uc186WzAsWzMsMV0sWzMsMl0sWzUsMV0sWzUsMl0sWzUsMl0sWzQsMl0sWzQsM10sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDJdLFsxMCwyXSxbOSwzXSxbOSwyXSxbMTIsM10sWzEyLDJdLFsxMiwyXSxbMTIsMl0sWzEyLDFdLFsxMiwyXSxbMTIsMV0sWzEyLDFdLFsxMiwxXSxbMTIsMV0sWzE0LDFdLFsxNCwxXSxbMTksM10sWzE4LDFdLFsxOCw0XSxbMTUsMl0sWzE1LDFdXSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oUyxBLEksRCxrLFIsQyl7dmFyIE89Ui5sZW5ndGgtMTtzd2l0Y2goayl7Y2FzZSA2OmNhc2UgNzpyZXR1cm4gRDtjYXNlIDg6RC5nZXRMb2dnZXIoKS50cmFjZSgiU3RvcCBOTCAiKTticmVhaztjYXNlIDk6RC5nZXRMb2dnZXIoKS50cmFjZSgiU3RvcCBFT0YgIik7YnJlYWs7Y2FzZSAxMTpELmdldExvZ2dlcigpLnRyYWNlKCJTdG9wIE5MMiAiKTticmVhaztjYXNlIDEyOkQuZ2V0TG9nZ2VyKCkudHJhY2UoIlN0b3AgRU9GMiAiKTticmVhaztjYXNlIDE1OkQuZ2V0TG9nZ2VyKCkuaW5mbygiTm9kZTogIixSW08tMV0uaWQpLEQuYWRkTm9kZShSW08tMl0ubGVuZ3RoLFJbTy0xXS5pZCxSW08tMV0uZGVzY3IsUltPLTFdLnR5cGUsUltPXSk7YnJlYWs7Y2FzZSAxNjpELmdldExvZ2dlcigpLmluZm8oIk5vZGU6ICIsUltPXS5pZCksRC5hZGROb2RlKFJbTy0xXS5sZW5ndGgsUltPXS5pZCxSW09dLmRlc2NyLFJbT10udHlwZSk7YnJlYWs7Y2FzZSAxNzpELmdldExvZ2dlcigpLnRyYWNlKCJJY29uOiAiLFJbT10pLEQuZGVjb3JhdGVOb2RlKHtpY29uOlJbT119KTticmVhaztjYXNlIDE4OmNhc2UgMjM6RC5kZWNvcmF0ZU5vZGUoe2NsYXNzOlJbT119KTticmVhaztjYXNlIDE5OkQuZ2V0TG9nZ2VyKCkudHJhY2UoIlNQQUNFTElTVCIpO2JyZWFrO2Nhc2UgMjA6RC5nZXRMb2dnZXIoKS50cmFjZSgiTm9kZTogIixSW08tMV0uaWQpLEQuYWRkTm9kZSgwLFJbTy0xXS5pZCxSW08tMV0uZGVzY3IsUltPLTFdLnR5cGUsUltPXSk7YnJlYWs7Y2FzZSAyMTpELmdldExvZ2dlcigpLnRyYWNlKCJOb2RlOiAiLFJbT10uaWQpLEQuYWRkTm9kZSgwLFJbT10uaWQsUltPXS5kZXNjcixSW09dLnR5cGUpO2JyZWFrO2Nhc2UgMjI6RC5kZWNvcmF0ZU5vZGUoe2ljb246UltPXX0pO2JyZWFrO2Nhc2UgMjc6RC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBmb3VuZCAuLiIsUltPLTJdKSx0aGlzLiQ9e2lkOlJbTy0xXSxkZXNjcjpSW08tMV0sdHlwZTpELmdldFR5cGUoUltPLTJdLFJbT10pfTticmVhaztjYXNlIDI4OnRoaXMuJD17aWQ6UltPXSxkZXNjcjpSW09dLHR5cGU6MH07YnJlYWs7Y2FzZSAyOTpELmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGZvdW5kIC4uIixSW08tM10pLHRoaXMuJD17aWQ6UltPLTNdLGRlc2NyOlJbTy0xXSx0eXBlOkQuZ2V0VHlwZShSW08tMl0sUltPXSl9O2JyZWFrO2Nhc2UgMzA6dGhpcy4kPVJbTy0xXStSW09dO2JyZWFrO2Nhc2UgMzE6dGhpcy4kPVJbT107YnJlYWt9fSwiYW5vbnltb3VzIiksdGFibGU6W3szOjEsNDoyLDU6Myw2OlsxLDVdLDg6ZX0sezE6WzNdfSx7MTpbMiwxXX0sezQ6Niw2OlsxLDddLDc6WzEsOF0sODplfSx7NjpyLDc6WzEsMTBdLDk6OSwxMjoxMSwxMzpuLDE0OjE0LDE2OmksMTc6YSwxODoxNywxOToxOCwyMDpzLDIzOmx9LHQodSxbMiwzXSksezE6WzIsMl19LHQodSxbMiw0XSksdCh1LFsyLDVdKSx7MTpbMiw2XSw2OnIsMTI6MjEsMTM6biwxNDoxNCwxNjppLDE3OmEsMTg6MTcsMTk6MTgsMjA6cywyMzpsfSx7NjpyLDk6MjIsMTI6MTEsMTM6biwxNDoxNCwxNjppLDE3OmEsMTg6MTcsMTk6MTgsMjA6cywyMzpsfSx7NjpoLDc6ZiwxMDoyMywxMTpkfSx0KHAsWzIsMjRdLHsxODoxNywxOToxOCwxNDoyNywxNjpbMSwyOF0sMTc6WzEsMjldLDIwOnMsMjM6bH0pLHQocCxbMiwxOV0pLHQocCxbMiwyMV0sezE1OjMwLDI0Om19KSx0KHAsWzIsMjJdKSx0KHAsWzIsMjNdKSx0KGcsWzIsMjVdKSx0KGcsWzIsMjZdKSx0KGcsWzIsMjhdLHsyMDpbMSwzMl19KSx7MjE6WzEsMzNdfSx7NjpoLDc6ZiwxMDozNCwxMTpkfSx7MTpbMiw3XSw2OnIsMTI6MjEsMTM6biwxNDoxNCwxNjppLDE3OmEsMTg6MTcsMTk6MTgsMjA6cywyMzpsfSx0KHksWzIsMTRdLHs3OnYsMTE6eH0pLHQoYixbMiw4XSksdChiLFsyLDldKSx0KGIsWzIsMTBdKSx0KHAsWzIsMTZdLHsxNTozNywyNDptfSksdChwLFsyLDE3XSksdChwLFsyLDE4XSksdChwLFsyLDIwXSx7MjQ6d30pLHQoZyxbMiwzMV0pLHsyMTpbMSwzOV19LHsyMjpbMSw0MF19LHQoeSxbMiwxM10sezc6diwxMTp4fSksdChiLFsyLDExXSksdChiLFsyLDEyXSksdChwLFsyLDE1XSx7MjQ6d30pLHQoZyxbMiwzMF0pLHsyMjpbMSw0MV19LHQoZyxbMiwyN10pLHQoZyxbMiwyOV0pXSxkZWZhdWx0QWN0aW9uczp7MjpbMiwxXSw2OlsyLDJdfSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oUyxBKXtpZihBLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoUyk7ZWxzZXt2YXIgST1uZXcgRXJyb3IoUyk7dGhyb3cgSS5oYXNoPUEsSX19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihTKXt2YXIgQT10aGlzLEk9WzBdLEQ9W10saz1bbnVsbF0sUj1bXSxDPXRoaXMudGFibGUsTz0iIixOPTAsUD0wLEY9MCxCPTIsRz0xLHo9Ui5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxXPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksWj17eXk6e319O2Zvcih2YXIgaiBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGopJiYoWi55eVtqXT10aGlzLnl5W2pdKTtXLnNldElucHV0KFMsWi55eSksWi55eS5sZXhlcj1XLFoueXkucGFyc2VyPXRoaXMsdHlwZW9mIFcueXlsbG9jPiJ1IiYmKFcueXlsbG9jPXt9KTt2YXIgb2U9Vy55eWxsb2M7Ui5wdXNoKG9lKTt2YXIgSz1XLm9wdGlvbnMmJlcub3B0aW9ucy5yYW5nZXM7dHlwZW9mIFoueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9Wi55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBlZShQZSl7SS5sZW5ndGg9SS5sZW5ndGgtMipQZSxrLmxlbmd0aD1rLmxlbmd0aC1QZSxSLmxlbmd0aD1SLmxlbmd0aC1QZX1vKGVlLCJwb3BTdGFjayIpO2Z1bmN0aW9uIEooKXt2YXIgUGU7cmV0dXJuIFBlPUQucG9wKCl8fFcubGV4KCl8fEcsdHlwZW9mIFBlIT0ibnVtYmVyIiYmKFBlIGluc3RhbmNlb2YgQXJyYXkmJihEPVBlLFBlPUQucG9wKCkpLFBlPUEuc3ltYm9sc19bUGVdfHxQZSksUGV9byhKLCJsZXgiKTtmb3IodmFyIEgscSxRLGFlLHVlLGNlLHRlPXt9LE5lLHNlLGtlLFJlOzspe2lmKFE9SVtJLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW1FdP2FlPXRoaXMuZGVmYXVsdEFjdGlvbnNbUV06KChIPT09bnVsbHx8dHlwZW9mIEg+InUiKSYmKEg9SigpKSxhZT1DW1FdJiZDW1FdW0hdKSx0eXBlb2YgYWU+InUifHwhYWUubGVuZ3RofHwhYWVbMF0pe3ZhciBDZT0iIjtSZT1bXTtmb3IoTmUgaW4gQ1tRXSl0aGlzLnRlcm1pbmFsc19bTmVdJiZOZT5CJiZSZS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bTmVdKyInIik7Vy5zaG93UG9zaXRpb24/Q2U9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoTisxKStgOgpgK1cuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtSZS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW0hdfHxIKSsiJyI6Q2U9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoTisxKSsiOiBVbmV4cGVjdGVkICIrKEg9PUc/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bSF18fEgpKyInIiksdGhpcy5wYXJzZUVycm9yKENlLHt0ZXh0OlcubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW0hdfHxILGxpbmU6Vy55eWxpbmVubyxsb2M6b2UsZXhwZWN0ZWQ6UmV9KX1pZihhZVswXWluc3RhbmNlb2YgQXJyYXkmJmFlLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrUSsiLCB0b2tlbjogIitIKTtzd2l0Y2goYWVbMF0pe2Nhc2UgMTpJLnB1c2goSCksay5wdXNoKFcueXl0ZXh0KSxSLnB1c2goVy55eWxsb2MpLEkucHVzaChhZVsxXSksSD1udWxsLHE/KEg9cSxxPW51bGwpOihQPVcueXlsZW5nLE89Vy55eXRleHQsTj1XLnl5bGluZW5vLG9lPVcueXlsbG9jLEY+MCYmRi0tKTticmVhaztjYXNlIDI6aWYoc2U9dGhpcy5wcm9kdWN0aW9uc19bYWVbMV1dWzFdLHRlLiQ9a1trLmxlbmd0aC1zZV0sdGUuXyQ9e2ZpcnN0X2xpbmU6UltSLmxlbmd0aC0oc2V8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpSW1IubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46UltSLmxlbmd0aC0oc2V8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46UltSLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sSyYmKHRlLl8kLnJhbmdlPVtSW1IubGVuZ3RoLShzZXx8MSldLnJhbmdlWzBdLFJbUi5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxjZT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkodGUsW08sUCxOLFoueXksYWVbMV0sayxSXS5jb25jYXQoeikpLHR5cGVvZiBjZTwidSIpcmV0dXJuIGNlO3NlJiYoST1JLnNsaWNlKDAsLTEqc2UqMiksaz1rLnNsaWNlKDAsLTEqc2UpLFI9Ui5zbGljZSgwLC0xKnNlKSksSS5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2FlWzFdXVswXSksay5wdXNoKHRlLiQpLFIucHVzaCh0ZS5fJCksa2U9Q1tJW0kubGVuZ3RoLTJdXVtJW0kubGVuZ3RoLTFdXSxJLnB1c2goa2UpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9LCJwYXJzZSIpfSxUPWZ1bmN0aW9uKCl7dmFyIEw9e0VPRjoxLHBhcnNlRXJyb3I6byhmdW5jdGlvbihBLEkpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoQSxJKTtlbHNlIHRocm93IG5ldyBFcnJvcihBKX0sInBhcnNlRXJyb3IiKSxzZXRJbnB1dDpvKGZ1bmN0aW9uKFMsQSl7cmV0dXJuIHRoaXMueXk9QXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9Uyx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30sInNldElucHV0IiksaW5wdXQ6byhmdW5jdGlvbigpe3ZhciBTPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1TLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1TLHRoaXMubWF0Y2hlZCs9Uzt2YXIgQT1TLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gQT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksU30sImlucHV0IiksdW5wdXQ6byhmdW5jdGlvbihTKXt2YXIgQT1TLmxlbmd0aCxJPVMuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1TK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1BKSx0aGlzLm9mZnNldC09QTt2YXIgRD10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxJLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09SS5sZW5ndGgtMSk7dmFyIGs9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOkk/KEkubGVuZ3RoPT09RC5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK0RbRC5sZW5ndGgtSS5sZW5ndGhdLmxlbmd0aC1JWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tQX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtrWzBdLGtbMF0rdGhpcy55eWxlbmctQV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSwidW5wdXQiKSxtb3JlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSwibW9yZSIpLHJlamVjdDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSwicmVqZWN0IiksbGVzczpvKGZ1bmN0aW9uKFMpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShTKSl9LCJsZXNzIikscGFzdElucHV0Om8oZnVuY3Rpb24oKXt2YXIgUz10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKFMubGVuZ3RoPjIwPyIuLi4iOiIiKStTLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSwicGFzdElucHV0IiksdXBjb21pbmdJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIFM9dGhpcy5tYXRjaDtyZXR1cm4gUy5sZW5ndGg8MjAmJihTKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1TLmxlbmd0aCkpLChTLnN1YnN0cigwLDIwKSsoUy5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sInVwY29taW5nSW5wdXQiKSxzaG93UG9zaXRpb246byhmdW5jdGlvbigpe3ZhciBTPXRoaXMucGFzdElucHV0KCksQT1uZXcgQXJyYXkoUy5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBTK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtBKyJeIn0sInNob3dQb3NpdGlvbiIpLHRlc3RfbWF0Y2g6byhmdW5jdGlvbihTLEEpe3ZhciBJLEQsaztpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaz17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihrLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLEQ9U1swXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksRCYmKHRoaXMueXlsaW5lbm8rPUQubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46RD9EW0QubGVuZ3RoLTFdLmxlbmd0aC1EW0QubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rU1swXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1TWzBdLHRoaXMubWF0Y2grPVNbMF0sdGhpcy5tYXRjaGVzPVMsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoU1swXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9U1swXSxJPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLEEsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksSSlyZXR1cm4gSTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgUiBpbiBrKXRoaXNbUl09a1tSXTtyZXR1cm4hMX1yZXR1cm4hMX0sInRlc3RfbWF0Y2giKSxuZXh0Om8oZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgUyxBLEksRDt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBrPXRoaXMuX2N1cnJlbnRSdWxlcygpLFI9MDtSPGsubGVuZ3RoO1IrKylpZihJPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNba1tSXV0pLEkmJighQXx8SVswXS5sZW5ndGg+QVswXS5sZW5ndGgpKXtpZihBPUksRD1SLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKFM9dGhpcy50ZXN0X21hdGNoKEksa1tSXSksUyE9PSExKXJldHVybiBTO2lmKHRoaXMuX2JhY2t0cmFjayl7QT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBBPyhTPXRoaXMudGVzdF9tYXRjaChBLGtbRF0pLFMhPT0hMT9TOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSwibmV4dCIpLGxleDpvKGZ1bmN0aW9uKCl7dmFyIEE9dGhpcy5uZXh0KCk7cmV0dXJuIEF8fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKEEpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChBKX0sImJlZ2luIikscG9wU3RhdGU6byhmdW5jdGlvbigpe3ZhciBBPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIEE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LCJwb3BTdGF0ZSIpLF9jdXJyZW50UnVsZXM6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LCJfY3VycmVudFJ1bGVzIiksdG9wU3RhdGU6byhmdW5jdGlvbihBKXtyZXR1cm4gQT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKEF8fDApLEE+PTA/dGhpcy5jb25kaXRpb25TdGFja1tBXToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKEEpe3RoaXMuYmVnaW4oQSl9LCJwdXNoU3RhdGUiKSxzdGF0ZVN0YWNrU2l6ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSwic3RhdGVTdGFja1NpemUiKSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihBLEksRCxrKXt2YXIgUj1rO3N3aXRjaChEKXtjYXNlIDA6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJzaGFwZURhdGEiKSxJLnl5dGV4dD0iIiwyNDticmVhaztjYXNlIDE6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJzaGFwZURhdGFTdHIiKSwyNDticmVhaztjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwyNDticmVhaztjYXNlIDM6bGV0IEM9L1xuXHMqL2c7cmV0dXJuIEkueXl0ZXh0PUkueXl0ZXh0LnJlcGxhY2UoQywiPGJyLz4iKSwyNDticmVhaztjYXNlIDQ6cmV0dXJuIDI0O2Nhc2UgNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA2OnJldHVybiBBLmdldExvZ2dlcigpLnRyYWNlKCJGb3VuZCBjb21tZW50IixJLnl5dGV4dCksNjticmVhaztjYXNlIDc6cmV0dXJuIDg7Y2FzZSA4OnRoaXMuYmVnaW4oIkNMQVNTIik7YnJlYWs7Y2FzZSA5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTc7YnJlYWs7Y2FzZSAxMDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMTpBLmdldExvZ2dlcigpLnRyYWNlKCJCZWdpbiBpY29uIiksdGhpcy5iZWdpbigiSUNPTiIpO2JyZWFrO2Nhc2UgMTI6cmV0dXJuIEEuZ2V0TG9nZ2VyKCkudHJhY2UoIlNQQUNFTElORSIpLDY7YnJlYWs7Y2FzZSAxMzpyZXR1cm4gNztjYXNlIDE0OnJldHVybiAxNjtjYXNlIDE1OkEuZ2V0TG9nZ2VyKCkudHJhY2UoImVuZCBpY29uIiksdGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTY6cmV0dXJuIEEuZ2V0TG9nZ2VyKCkudHJhY2UoIkV4cGxvZGluZyBub2RlIiksdGhpcy5iZWdpbigiTk9ERSIpLDIwO2JyZWFrO2Nhc2UgMTc6cmV0dXJuIEEuZ2V0TG9nZ2VyKCkudHJhY2UoIkNsb3VkIiksdGhpcy5iZWdpbigiTk9ERSIpLDIwO2JyZWFrO2Nhc2UgMTg6cmV0dXJuIEEuZ2V0TG9nZ2VyKCkudHJhY2UoIkV4cGxvc2lvbiBCYW5nIiksdGhpcy5iZWdpbigiTk9ERSIpLDIwO2JyZWFrO2Nhc2UgMTk6cmV0dXJuIEEuZ2V0TG9nZ2VyKCkudHJhY2UoIkNsb3VkIEJhbmciKSx0aGlzLmJlZ2luKCJOT0RFIiksMjA7YnJlYWs7Y2FzZSAyMDpyZXR1cm4gdGhpcy5iZWdpbigiTk9ERSIpLDIwO2JyZWFrO2Nhc2UgMjE6cmV0dXJuIHRoaXMuYmVnaW4oIk5PREUiKSwyMDticmVhaztjYXNlIDIyOnJldHVybiB0aGlzLmJlZ2luKCJOT0RFIiksMjA7YnJlYWs7Y2FzZSAyMzpyZXR1cm4gdGhpcy5iZWdpbigiTk9ERSIpLDIwO2JyZWFrO2Nhc2UgMjQ6cmV0dXJuIDEzO2Nhc2UgMjU6cmV0dXJuIDIzO2Nhc2UgMjY6cmV0dXJuIDExO2Nhc2UgMjc6dGhpcy5iZWdpbigiTlNUUjIiKTticmVhaztjYXNlIDI4OnJldHVybiJOT0RFX0RFU0NSIjtjYXNlIDI5OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDMwOkEuZ2V0TG9nZ2VyKCkudHJhY2UoIlN0YXJ0aW5nIE5TVFIiKSx0aGlzLmJlZ2luKCJOU1RSIik7YnJlYWs7Y2FzZSAzMTpyZXR1cm4gQS5nZXRMb2dnZXIoKS50cmFjZSgiZGVzY3JpcHRpb246IixJLnl5dGV4dCksIk5PREVfREVTQ1IiO2JyZWFrO2Nhc2UgMzI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxBLmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCApKSIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgMzQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxBLmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCApIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzNTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEEuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kIC4uLiIsSS55eXRleHQpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgMzY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxBLmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCAoKCIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgMzc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxBLmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCAoLSIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgMzg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxBLmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCAoLSIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgMzk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxBLmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCAoKCIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgNDA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxBLmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCAoKCIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgNDE6cmV0dXJuIEEuZ2V0TG9nZ2VyKCkudHJhY2UoIkxvbmcgZGVzY3JpcHRpb246IixJLnl5dGV4dCksMjE7YnJlYWs7Y2FzZSA0MjpyZXR1cm4gQS5nZXRMb2dnZXIoKS50cmFjZSgiTG9uZyBkZXNjcmlwdGlvbjoiLEkueXl0ZXh0KSwyMTticmVha319LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzpAXHspL2ksL14oPzpbIl0pL2ksL14oPzpbIl0pL2ksL14oPzpbXlwiXSspL2ksL14oPzpbXn1eIl0rKS9pLC9eKD86XH0pL2ksL14oPzpccyolJS4qKS9pLC9eKD86a2FuYmFuXGIpL2ksL14oPzo6OjopL2ksL14oPzouKykvaSwvXig/OlxuKS9pLC9eKD86OjppY29uXCgpL2ksL14oPzpbXHNdK1tcbl0pL2ksL14oPzpbXG5dKykvaSwvXig/OlteXCldKykvaSwvXig/OlwpKS9pLC9eKD86LVwpKS9pLC9eKD86XCgtKS9pLC9eKD86XClcKSkvaSwvXig/OlwpKS9pLC9eKD86XChcKCkvaSwvXig/Olx7XHspL2ksL14oPzpcKCkvaSwvXig/OlxbKS9pLC9eKD86W1xzXSspL2ksL14oPzpbXlwoXFtcblwpXHtcfUBdKykvaSwvXig/OiQpL2ksL14oPzpbIl1bYF0pL2ksL14oPzpbXmAiXSspL2ksL14oPzpbYF1bIl0pL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKykvaSwvXig/OlsiXSkvaSwvXig/OltcKV1cKSkvaSwvXig/OltcKV0pL2ksL14oPzpbXF1dKS9pLC9eKD86XH1cfSkvaSwvXig/OlwoLSkvaSwvXig/Oi1cKSkvaSwvXig/OlwoXCgpL2ksL14oPzpcKCkvaSwvXig/OlteXClcXVwoXH1dKykvaSwvXig/Oi4rKD8hXChcKCkpL2ldLGNvbmRpdGlvbnM6e3NoYXBlRGF0YUVuZEJyYWNrZXQ6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sc2hhcGVEYXRhU3RyOntydWxlczpbMiwzXSxpbmNsdXNpdmU6ITF9LHNoYXBlRGF0YTp7cnVsZXM6WzEsNCw1XSxpbmNsdXNpdmU6ITF9LENMQVNTOntydWxlczpbOSwxMF0saW5jbHVzaXZlOiExfSxJQ09OOntydWxlczpbMTQsMTVdLGluY2x1c2l2ZTohMX0sTlNUUjI6e3J1bGVzOlsyOCwyOV0saW5jbHVzaXZlOiExfSxOU1RSOntydWxlczpbMzEsMzJdLGluY2x1c2l2ZTohMX0sTk9ERTp7cnVsZXM6WzI3LDMwLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyXSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDYsNyw4LDExLDEyLDEzLDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIEx9KCk7Xy5sZXhlcj1UO2Z1bmN0aW9uIEUoKXt0aGlzLnl5PXt9fXJldHVybiBvKEUsIlBhcnNlciIpLEUucHJvdG90eXBlPV8sXy5QYXJzZXI9RSxuZXcgRX0oKTtOQi5wYXJzZXI9TkI7JDFlPU5CfSk7dmFyIGRsLE1CLFJCLElCLHl0dCx2dHQsVTFlLHh0dCxidHQsWmksd3R0LFR0dCxrdHQsRXR0LFN0dCxDdHQsQXR0LEgxZSxXMWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWdCgpO2ZyKCk7dXQoKTticygpO2V3KCk7ZGw9W10sTUI9W10sUkI9MCxJQj17fSx5dHQ9bygoKT0+e2RsPVtdLE1CPVtdLFJCPTAsSUI9e319LCJjbGVhciIpLHZ0dD1vKHQ9PntpZihkbC5sZW5ndGg9PT0wKXJldHVybiBudWxsO2xldCBlPWRsWzBdLmxldmVsLHI9bnVsbDtmb3IobGV0IG49ZGwubGVuZ3RoLTE7bj49MDtuLS0paWYoZGxbbl0ubGV2ZWw9PT1lJiYhciYmKHI9ZGxbbl0pLGRsW25dLmxldmVsPGUpdGhyb3cgbmV3IEVycm9yKCdJdGVtcyB3aXRob3V0IHNlY3Rpb24gZGV0ZWN0ZWQsIGZvdW5kIHNlY3Rpb24gKCInK2RsW25dLmxhYmVsKyciKScpO3JldHVybiB0PT09cj8ubGV2ZWw/bnVsbDpyfSwiZ2V0U2VjdGlvbiIpLFUxZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIE1CfSwiZ2V0U2VjdGlvbnMiKSx4dHQ9byhmdW5jdGlvbigpe2xldCB0PVtdLGU9W10scj1VMWUoKSxuPXBlKCk7Zm9yKGxldCBpIG9mIHIpe2xldCBhPXtpZDppLmlkLGxhYmVsOmtyKGkubGFiZWw/PyIiLG4pLGlzR3JvdXA6ITAsdGlja2V0OmkudGlja2V0LHNoYXBlOiJrYW5iYW5TZWN0aW9uIixsZXZlbDppLmxldmVsLGxvb2s6bi5sb29rfTtlLnB1c2goYSk7bGV0IHM9ZGwuZmlsdGVyKGw9PmwucGFyZW50SWQ9PT1pLmlkKTtmb3IobGV0IGwgb2Ygcyl7bGV0IHU9e2lkOmwuaWQscGFyZW50SWQ6aS5pZCxsYWJlbDprcihsLmxhYmVsPz8iIixuKSxpc0dyb3VwOiExLHRpY2tldDpsPy50aWNrZXQscHJpb3JpdHk6bD8ucHJpb3JpdHksYXNzaWduZWQ6bD8uYXNzaWduZWQsaWNvbjpsPy5pY29uLHNoYXBlOiJrYW5iYW5JdGVtIixsZXZlbDpsLmxldmVsLHJ4OjUscnk6NSxjc3NTdHlsZXM6WyJ0ZXh0LWFsaWduOiBsZWZ0Il19O2UucHVzaCh1KX19cmV0dXJue25vZGVzOmUsZWRnZXM6dCxvdGhlcjp7fSxjb25maWc6cGUoKX19LCJnZXREYXRhIiksYnR0PW8oKHQsZSxyLG4saSk9PntsZXQgYT1wZSgpLHM9YS5taW5kbWFwPy5wYWRkaW5nPz91ci5taW5kbWFwLnBhZGRpbmc7c3dpdGNoKG4pe2Nhc2UgWmkuUk9VTkRFRF9SRUNUOmNhc2UgWmkuUkVDVDpjYXNlIFppLkhFWEFHT046cyo9Mn1sZXQgbD17aWQ6a3IoZSxhKXx8ImtibiIrUkIrKyxsZXZlbDp0LGxhYmVsOmtyKHIsYSksd2lkdGg6YS5taW5kbWFwPy5tYXhOb2RlV2lkdGg/P3VyLm1pbmRtYXAubWF4Tm9kZVdpZHRoLHBhZGRpbmc6cyxpc0dyb3VwOiExfTtpZihpIT09dm9pZCAwKXtsZXQgaDtpLmluY2x1ZGVzKGAKYCk/aD1pK2AKYDpoPWB7CmAraStgCn1gO2xldCBmPVNtKGgse3NjaGVtYTpFbX0pO2lmKGYuc2hhcGUmJihmLnNoYXBlIT09Zi5zaGFwZS50b0xvd2VyQ2FzZSgpfHxmLnNoYXBlLmluY2x1ZGVzKCJfIikpKXRocm93IG5ldyBFcnJvcihgTm8gc3VjaCBzaGFwZTogJHtmLnNoYXBlfS4gU2hhcGUgbmFtZXMgc2hvdWxkIGJlIGxvd2VyY2FzZS5gKTtmPy5zaGFwZSYmZi5zaGFwZT09PSJrYW5iYW5JdGVtIiYmKGwuc2hhcGU9Zj8uc2hhcGUpLGY/LmxhYmVsJiYobC5sYWJlbD1mPy5sYWJlbCksZj8uaWNvbiYmKGwuaWNvbj1mPy5pY29uKSxmPy5hc3NpZ25lZCYmKGwuYXNzaWduZWQ9Zj8uYXNzaWduZWQpLGY/LnRpY2tldCYmKGwudGlja2V0PWY/LnRpY2tldCksZj8ucHJpb3JpdHkmJihsLnByaW9yaXR5PWY/LnByaW9yaXR5KX1sZXQgdT12dHQodCk7dT9sLnBhcmVudElkPXUuaWR8fCJrYm4iK1JCKys6TUIucHVzaChsKSxkbC5wdXNoKGwpfSwiYWRkTm9kZSIpLFppPXtERUZBVUxUOjAsTk9fQk9SREVSOjAsUk9VTkRFRF9SRUNUOjEsUkVDVDoyLENJUkNMRTozLENMT1VEOjQsQkFORzo1LEhFWEFHT046Nn0sd3R0PW8oKHQsZSk9Pntzd2l0Y2goWS5kZWJ1ZygiSW4gZ2V0IHR5cGUiLHQsZSksdCl7Y2FzZSJbIjpyZXR1cm4gWmkuUkVDVDtjYXNlIigiOnJldHVybiBlPT09IikiP1ppLlJPVU5ERURfUkVDVDpaaS5DTE9VRDtjYXNlIigoIjpyZXR1cm4gWmkuQ0lSQ0xFO2Nhc2UiKSI6cmV0dXJuIFppLkNMT1VEO2Nhc2UiKSkiOnJldHVybiBaaS5CQU5HO2Nhc2Uie3siOnJldHVybiBaaS5IRVhBR09OO2RlZmF1bHQ6cmV0dXJuIFppLkRFRkFVTFR9fSwiZ2V0VHlwZSIpLFR0dD1vKCh0LGUpPT57SUJbdF09ZX0sInNldEVsZW1lbnRGb3JJZCIpLGt0dD1vKHQ9PntpZighdClyZXR1cm47bGV0IGU9cGUoKSxyPWRsW2RsLmxlbmd0aC0xXTt0Lmljb24mJihyLmljb249a3IodC5pY29uLGUpKSx0LmNsYXNzJiYoci5jc3NDbGFzc2VzPWtyKHQuY2xhc3MsZSkpfSwiZGVjb3JhdGVOb2RlIiksRXR0PW8odD0+e3N3aXRjaCh0KXtjYXNlIFppLkRFRkFVTFQ6cmV0dXJuIm5vLWJvcmRlciI7Y2FzZSBaaS5SRUNUOnJldHVybiJyZWN0IjtjYXNlIFppLlJPVU5ERURfUkVDVDpyZXR1cm4icm91bmRlZC1yZWN0IjtjYXNlIFppLkNJUkNMRTpyZXR1cm4iY2lyY2xlIjtjYXNlIFppLkNMT1VEOnJldHVybiJjbG91ZCI7Y2FzZSBaaS5CQU5HOnJldHVybiJiYW5nIjtjYXNlIFppLkhFWEFHT046cmV0dXJuImhleGdvbiI7ZGVmYXVsdDpyZXR1cm4ibm8tYm9yZGVyIn19LCJ0eXBlMlN0ciIpLFN0dD1vKCgpPT5ZLCJnZXRMb2dnZXIiKSxDdHQ9byh0PT5JQlt0XSwiZ2V0RWxlbWVudEJ5SWQiKSxBdHQ9e2NsZWFyOnl0dCxhZGROb2RlOmJ0dCxnZXRTZWN0aW9uczpVMWUsZ2V0RGF0YTp4dHQsbm9kZVR5cGU6WmksZ2V0VHlwZTp3dHQsc2V0RWxlbWVudEZvcklkOlR0dCxkZWNvcmF0ZU5vZGU6a3R0LHR5cGUyU3RyOkV0dCxnZXRMb2dnZXI6U3R0LGdldEVsZW1lbnRCeUlkOkN0dH0sSDFlPUF0dH0pO3ZhciBfdHQsWTFlLHExZT1NKCgpPT57InVzZSBzdHJpY3QiO1Z0KCk7dXQoKTtlaCgpO2FpKCk7YnMoKTtsdygpO3Z3KCk7X3R0PW8oYXN5bmModCxlLHIsbik9PntZLmRlYnVnKGBSZW5kZXJpbmcga2FuYmFuIGRpYWdyYW0KYCt0KTtsZXQgYT1uLmRiLmdldERhdGEoKSxzPXBlKCk7cy5odG1sTGFiZWxzPSExO2xldCBsPVZhKGUpLHU9bC5hcHBlbmQoImciKTt1LmF0dHIoImNsYXNzIiwic2VjdGlvbnMiKTtsZXQgaD1sLmFwcGVuZCgiZyIpO2guYXR0cigiY2xhc3MiLCJpdGVtcyIpO2xldCBmPWEubm9kZXMuZmlsdGVyKHY9PnYuaXNHcm91cCksZD0wLHA9MTAsbT1bXSxnPTI1O2ZvcihsZXQgdiBvZiBmKXtsZXQgeD1zPy5rYW5iYW4/LnNlY3Rpb25XaWR0aHx8MjAwO2Q9ZCsxLHYueD14KmQrKGQtMSkqcC8yLHYud2lkdGg9eCx2Lnk9MCx2LmhlaWdodD14KjMsdi5yeD01LHYucnk9NSx2LmNzc0NsYXNzZXM9di5jc3NDbGFzc2VzKyIgc2VjdGlvbi0iK2Q7bGV0IGI9YXdhaXQgX20odSx2KTtnPU1hdGgubWF4KGcsYj8ubGFiZWxCQm94Py5oZWlnaHQpLG0ucHVzaChiKX1sZXQgeT0wO2ZvcihsZXQgdiBvZiBmKXtsZXQgeD1tW3ldO3k9eSsxO2xldCBiPXM/LmthbmJhbj8uc2VjdGlvbldpZHRofHwyMDAsdz0tYiozLzIrZyxfPXcsVD1hLm5vZGVzLmZpbHRlcihTPT5TLnBhcmVudElkPT09di5pZCk7Zm9yKGxldCBTIG9mIFQpe2lmKFMuaXNHcm91cCl0aHJvdyBuZXcgRXJyb3IoIkdyb3VwcyB3aXRoaW4gZ3JvdXBzIGFyZSBub3QgYWxsb3dlZCBpbiBLYW5iYW4gZGlhZ3JhbXMiKTtTLng9di54LFMud2lkdGg9Yi0xLjUqcDtsZXQgST0oYXdhaXQgTG0oaCxTLHtjb25maWc6c30pKS5ub2RlKCkuZ2V0QkJveCgpO1MueT1fK0kuaGVpZ2h0LzIsYXdhaXQgVXYoUyksXz1TLnkrSS5oZWlnaHQvMitwLzJ9bGV0IEU9eC5jbHVzdGVyLnNlbGVjdCgicmVjdCIpLEw9TWF0aC5tYXgoXy13KzMqcCw1MCkrKGctMjUpO0UuYXR0cigiaGVpZ2h0IixMKX1Jbyh2b2lkIDAsbCxzLm1pbmRtYXA/LnBhZGRpbmc/P3VyLmthbmJhbi5wYWRkaW5nLHMubWluZG1hcD8udXNlTWF4V2lkdGg/P3VyLmthbmJhbi51c2VNYXhXaWR0aCl9LCJkcmF3IiksWTFlPXtkcmF3Ol90dH19KTt2YXIgTHR0LER0dCxYMWUsajFlPU0oKCk9PnsidXNlIHN0cmljdCI7TG8oKTtMdHQ9byh0PT57bGV0IGU9IiI7Zm9yKGxldCBuPTA7bjx0LlRIRU1FX0NPTE9SX0xJTUlUO24rKyl0WyJsaW5lQ29sb3IiK25dPXRbImxpbmVDb2xvciIrbl18fHRbImNTY2FsZUludiIrbl0sZmEodFsibGluZUNvbG9yIituXSk/dFsibGluZUNvbG9yIituXT1fdCh0WyJsaW5lQ29sb3IiK25dLDIwKTp0WyJsaW5lQ29sb3IiK25dPUl0KHRbImxpbmVDb2xvciIrbl0sMjApO2xldCByPW8oKG4saSk9PnQuZGFya01vZGU/SXQobixpKTpfdChuLGkpLCJhZGp1c3RlciIpO2ZvcihsZXQgbj0wO248dC5USEVNRV9DT0xPUl9MSU1JVDtuKyspe2xldCBpPSIiKygxNy0zKm4pO2UrPWAKICAgIC5zZWN0aW9uLSR7bi0xfSByZWN0LCAuc2VjdGlvbi0ke24tMX0gcGF0aCwgLnNlY3Rpb24tJHtuLTF9IGNpcmNsZSwgLnNlY3Rpb24tJHtuLTF9IHBvbHlnb24sIC5zZWN0aW9uLSR7bi0xfSBwYXRoICB7CiAgICAgIGZpbGw6ICR7cih0WyJjU2NhbGUiK25dLDEwKX07CiAgICAgIHN0cm9rZTogJHtyKHRbImNTY2FsZSIrbl0sMTApfTsKCiAgICB9CiAgICAuc2VjdGlvbi0ke24tMX0gdGV4dCB7CiAgICAgZmlsbDogJHt0WyJjU2NhbGVMYWJlbCIrbl19OwogICAgfQogICAgLm5vZGUtaWNvbi0ke24tMX0gewogICAgICBmb250LXNpemU6IDQwcHg7CiAgICAgIGNvbG9yOiAke3RbImNTY2FsZUxhYmVsIituXX07CiAgICB9CiAgICAuc2VjdGlvbi1lZGdlLSR7bi0xfXsKICAgICAgc3Ryb2tlOiAke3RbImNTY2FsZSIrbl19OwogICAgfQogICAgLmVkZ2UtZGVwdGgtJHtuLTF9ewogICAgICBzdHJva2Utd2lkdGg6ICR7aX07CiAgICB9CiAgICAuc2VjdGlvbi0ke24tMX0gbGluZSB7CiAgICAgIHN0cm9rZTogJHt0WyJjU2NhbGVJbnYiK25dfSA7CiAgICAgIHN0cm9rZS13aWR0aDogMzsKICAgIH0KCiAgICAuZGlzYWJsZWQsIC5kaXNhYmxlZCBjaXJjbGUsIC5kaXNhYmxlZCB0ZXh0IHsKICAgICAgZmlsbDogbGlnaHRncmF5OwogICAgfQogICAgLmRpc2FibGVkIHRleHQgewogICAgICBmaWxsOiAjZWZlZmVmOwogICAgfQoKICAubm9kZSByZWN0LAogIC5ub2RlIGNpcmNsZSwKICAubm9kZSBlbGxpcHNlLAogIC5ub2RlIHBvbHlnb24sCiAgLm5vZGUgcGF0aCB7CiAgICBmaWxsOiAke3QuYmFja2dyb3VuZH07CiAgICBzdHJva2U6ICR7dC5ub2RlQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCiAgLmthbmJhbi10aWNrZXQtbGluayB7CiAgICBmaWxsOiAke3QuYmFja2dyb3VuZH07CiAgICBzdHJva2U6ICR7dC5ub2RlQm9yZGVyfTsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogIH0KICAgIGB9cmV0dXJuIGV9LCJnZW5TZWN0aW9ucyIpLER0dD1vKHQ9PmAKICAuZWRnZSB7CiAgICBzdHJva2Utd2lkdGg6IDM7CiAgfQogICR7THR0KHQpfQogIC5zZWN0aW9uLXJvb3QgcmVjdCwgLnNlY3Rpb24tcm9vdCBwYXRoLCAuc2VjdGlvbi1yb290IGNpcmNsZSwgLnNlY3Rpb24tcm9vdCBwb2x5Z29uICB7CiAgICBmaWxsOiAke3QuZ2l0MH07CiAgfQogIC5zZWN0aW9uLXJvb3QgdGV4dCB7CiAgICBmaWxsOiAke3QuZ2l0QnJhbmNoTGFiZWwwfTsKICB9CiAgLmljb24tY29udGFpbmVyIHsKICAgIGhlaWdodDoxMDAlOwogICAgZGlzcGxheTogZmxleDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICB9CiAgLmVkZ2UgewogICAgZmlsbDogbm9uZTsKICB9CiAgLmNsdXN0ZXItbGFiZWwsIC5sYWJlbCB7CiAgICBjb2xvcjogJHt0LnRleHRDb2xvcn07CiAgICBmaWxsOiAke3QudGV4dENvbG9yfTsKICAgIH0KICAua2FuYmFuLWxhYmVsIHsKICAgIGR5OiAxZW07CiAgICBhbGlnbm1lbnQtYmFzZWxpbmU6IG1pZGRsZTsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBkb21pbmFudC1iYXNlbGluZTogbWlkZGxlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KYCwiZ2V0U3R5bGVzIiksWDFlPUR0dH0pO3ZhciBLMWU9e307dnIoSzFlLHtkaWFncmFtOigpPT5OdHR9KTt2YXIgTnR0LFExZT1NKCgpPT57InVzZSBzdHJpY3QiO1YxZSgpO1cxZSgpO3ExZSgpO2oxZSgpO050dD17ZGI6SDFlLHJlbmRlcmVyOlkxZSxwYXJzZXI6JDFlLHN0eWxlczpYMWV9fSk7dmFyIE9CLFNiLGV5ZT1NKCgpPT57InVzZSBzdHJpY3QiO09CPWZ1bmN0aW9uKCl7dmFyIHQ9byhmdW5jdGlvbihsLHUsaCxmKXtmb3IoaD1ofHx7fSxmPWwubGVuZ3RoO2YtLTtoW2xbZl1dPXUpO3JldHVybiBofSwibyIpLGU9WzEsOV0scj1bMSwxMF0sbj1bMSw1LDEwLDEyXSxpPXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLFNBTktFWTo0LE5FV0xJTkU6NSxjc3Y6NixvcHRfZW9mOjcscmVjb3JkOjgsY3N2X3RhaWw6OSxFT0Y6MTAsImZpZWxkW3NvdXJjZV0iOjExLENPTU1BOjEyLCJmaWVsZFt0YXJnZXRdIjoxMywiZmllbGRbdmFsdWVdIjoxNCxmaWVsZDoxNSxlc2NhcGVkOjE2LG5vbl9lc2NhcGVkOjE3LERRVU9URToxOCxFU0NBUEVEX1RFWFQ6MTksTk9OX0VTQ0FQRURfVEVYVDoyMCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiU0FOS0VZIiw1OiJORVdMSU5FIiwxMDoiRU9GIiwxMToiZmllbGRbc291cmNlXSIsMTI6IkNPTU1BIiwxMzoiZmllbGRbdGFyZ2V0XSIsMTQ6ImZpZWxkW3ZhbHVlXSIsMTg6IkRRVU9URSIsMTk6IkVTQ0FQRURfVEVYVCIsMjA6Ik5PTl9FU0NBUEVEX1RFWFQifSxwcm9kdWN0aW9uc186WzAsWzMsNF0sWzYsMl0sWzksMl0sWzksMF0sWzcsMV0sWzcsMF0sWzgsNV0sWzE1LDFdLFsxNSwxXSxbMTYsM10sWzE3LDFdXSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24odSxoLGYsZCxwLG0sZyl7dmFyIHk9bS5sZW5ndGgtMTtzd2l0Y2gocCl7Y2FzZSA3OmxldCB2PWQuZmluZE9yQ3JlYXRlTm9kZShtW3ktNF0udHJpbSgpLnJlcGxhY2VBbGwoJyIiJywnIicpKSx4PWQuZmluZE9yQ3JlYXRlTm9kZShtW3ktMl0udHJpbSgpLnJlcGxhY2VBbGwoJyIiJywnIicpKSxiPXBhcnNlRmxvYXQobVt5XS50cmltKCkpO2QuYWRkTGluayh2LHgsYik7YnJlYWs7Y2FzZSA4OmNhc2UgOTpjYXNlIDExOnRoaXMuJD1tW3ldO2JyZWFrO2Nhc2UgMTA6dGhpcy4kPW1beS0xXTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHs1OlsxLDNdfSx7Njo0LDg6NSwxNTo2LDE2OjcsMTc6OCwxODplLDIwOnJ9LHsxOlsyLDZdLDc6MTEsMTA6WzEsMTJdfSx0KHIsWzIsNF0sezk6MTMsNTpbMSwxNF19KSx7MTI6WzEsMTVdfSx0KG4sWzIsOF0pLHQobixbMiw5XSksezE5OlsxLDE2XX0sdChuLFsyLDExXSksezE6WzIsMV19LHsxOlsyLDVdfSx0KHIsWzIsMl0pLHs2OjE3LDg6NSwxNTo2LDE2OjcsMTc6OCwxODplLDIwOnJ9LHsxNToxOCwxNjo3LDE3OjgsMTg6ZSwyMDpyfSx7MTg6WzEsMTldfSx0KHIsWzIsM10pLHsxMjpbMSwyMF19LHQobixbMiwxMF0pLHsxNToyMSwxNjo3LDE3OjgsMTg6ZSwyMDpyfSx0KFsxLDUsMTBdLFsyLDddKV0sZGVmYXVsdEFjdGlvbnM6ezExOlsyLDFdLDEyOlsyLDVdfSxwYXJzZUVycm9yOm8oZnVuY3Rpb24odSxoKXtpZihoLnJlY292ZXJhYmxlKXRoaXMudHJhY2UodSk7ZWxzZXt2YXIgZj1uZXcgRXJyb3IodSk7dGhyb3cgZi5oYXNoPWgsZn19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbih1KXt2YXIgaD10aGlzLGY9WzBdLGQ9W10scD1bbnVsbF0sbT1bXSxnPXRoaXMudGFibGUseT0iIix2PTAseD0wLGI9MCx3PTIsXz0xLFQ9bS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxFPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksTD17eXk6e319O2Zvcih2YXIgUyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LFMpJiYoTC55eVtTXT10aGlzLnl5W1NdKTtFLnNldElucHV0KHUsTC55eSksTC55eS5sZXhlcj1FLEwueXkucGFyc2VyPXRoaXMsdHlwZW9mIEUueXlsbG9jPiJ1IiYmKEUueXlsbG9jPXt9KTt2YXIgQT1FLnl5bGxvYzttLnB1c2goQSk7dmFyIEk9RS5vcHRpb25zJiZFLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBMLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPUwueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gRChvZSl7Zi5sZW5ndGg9Zi5sZW5ndGgtMipvZSxwLmxlbmd0aD1wLmxlbmd0aC1vZSxtLmxlbmd0aD1tLmxlbmd0aC1vZX1vKEQsInBvcFN0YWNrIik7ZnVuY3Rpb24gaygpe3ZhciBvZTtyZXR1cm4gb2U9ZC5wb3AoKXx8RS5sZXgoKXx8Xyx0eXBlb2Ygb2UhPSJudW1iZXIiJiYob2UgaW5zdGFuY2VvZiBBcnJheSYmKGQ9b2Usb2U9ZC5wb3AoKSksb2U9aC5zeW1ib2xzX1tvZV18fG9lKSxvZX1vKGssImxleCIpO2Zvcih2YXIgUixDLE8sTixQLEYsQj17fSxHLHosVyxaOzspe2lmKE89ZltmLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW09dP049dGhpcy5kZWZhdWx0QWN0aW9uc1tPXTooKFI9PT1udWxsfHx0eXBlb2YgUj4idSIpJiYoUj1rKCkpLE49Z1tPXSYmZ1tPXVtSXSksdHlwZW9mIE4+InUifHwhTi5sZW5ndGh8fCFOWzBdKXt2YXIgaj0iIjtaPVtdO2ZvcihHIGluIGdbT10pdGhpcy50ZXJtaW5hbHNfW0ddJiZHPncmJloucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0ddKyInIik7RS5zaG93UG9zaXRpb24/aj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh2KzEpK2A6CmArRS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK1ouam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tSXXx8UikrIiciOmo9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisodisxKSsiOiBVbmV4cGVjdGVkICIrKFI9PV8/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bUl18fFIpKyInIiksdGhpcy5wYXJzZUVycm9yKGose3RleHQ6RS5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bUl18fFIsbGluZTpFLnl5bGluZW5vLGxvYzpBLGV4cGVjdGVkOlp9KX1pZihOWzBdaW5zdGFuY2VvZiBBcnJheSYmTi5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK08rIiwgdG9rZW46ICIrUik7c3dpdGNoKE5bMF0pe2Nhc2UgMTpmLnB1c2goUikscC5wdXNoKEUueXl0ZXh0KSxtLnB1c2goRS55eWxsb2MpLGYucHVzaChOWzFdKSxSPW51bGwsQz8oUj1DLEM9bnVsbCk6KHg9RS55eWxlbmcseT1FLnl5dGV4dCx2PUUueXlsaW5lbm8sQT1FLnl5bGxvYyxiPjAmJmItLSk7YnJlYWs7Y2FzZSAyOmlmKHo9dGhpcy5wcm9kdWN0aW9uc19bTlsxXV1bMV0sQi4kPXBbcC5sZW5ndGgtel0sQi5fJD17Zmlyc3RfbGluZTptW20ubGVuZ3RoLSh6fHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6bVttLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOm1bbS5sZW5ndGgtKHp8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bVttLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sSSYmKEIuXyQucmFuZ2U9W21bbS5sZW5ndGgtKHp8fDEpXS5yYW5nZVswXSxtW20ubGVuZ3RoLTFdLnJhbmdlWzFdXSksRj10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoQixbeSx4LHYsTC55eSxOWzFdLHAsbV0uY29uY2F0KFQpKSx0eXBlb2YgRjwidSIpcmV0dXJuIEY7eiYmKGY9Zi5zbGljZSgwLC0xKnoqMikscD1wLnNsaWNlKDAsLTEqeiksbT1tLnNsaWNlKDAsLTEqeikpLGYucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tOWzFdXVswXSkscC5wdXNoKEIuJCksbS5wdXNoKEIuXyQpLFc9Z1tmW2YubGVuZ3RoLTJdXVtmW2YubGVuZ3RoLTFdXSxmLnB1c2goVyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LGE9ZnVuY3Rpb24oKXt2YXIgbD17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKGgsZil7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihoLGYpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGgpfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24odSxoKXtyZXR1cm4gdGhpcy55eT1ofHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD11LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIHU9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPXUsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXUsdGhpcy5tYXRjaGVkKz11O3ZhciBoPXUubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBoPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx1fSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKHUpe3ZhciBoPXUubGVuZ3RoLGY9dS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXUrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWgpLHRoaXMub2Zmc2V0LT1oO3ZhciBkPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLGYubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1mLmxlbmd0aC0xKTt2YXIgcD10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46Zj8oZi5sZW5ndGg9PT1kLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrZFtkLmxlbmd0aC1mLmxlbmd0aF0ubGVuZ3RoLWZbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1ofSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3BbMF0scFswXSt0aGlzLnl5bGVuZy1oXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24odSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHUpKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciB1PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odS5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Uuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgdT10aGlzLm1hdGNoO3JldHVybiB1Lmxlbmd0aDwyMCYmKHUrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXUubGVuZ3RoKSksKHUuc3Vic3RyKDAsMjApKyh1Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIHU9dGhpcy5wYXN0SW5wdXQoKSxoPW5ldyBBcnJheSh1Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHUrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK2grIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKHUsaCl7dmFyIGYsZCxwO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihwPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHAueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksZD11WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxkJiYodGhpcy55eWxpbmVubys9ZC5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpkP2RbZC5sZW5ndGgtMV0ubGVuZ3RoLWRbZC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit1WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXVbMF0sdGhpcy5tYXRjaCs9dVswXSx0aGlzLm1hdGNoZXM9dSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh1WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz11WzBdLGY9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsaCx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxmKXJldHVybiBmO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBtIGluIHApdGhpc1ttXT1wW21dO3JldHVybiExfXJldHVybiExfSwidGVzdF9tYXRjaCIpLG5leHQ6byhmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciB1LGgsZixkO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIHA9dGhpcy5fY3VycmVudFJ1bGVzKCksbT0wO208cC5sZW5ndGg7bSsrKWlmKGY9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1twW21dXSksZiYmKCFofHxmWzBdLmxlbmd0aD5oWzBdLmxlbmd0aCkpe2lmKGg9ZixkPW0sdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYodT10aGlzLnRlc3RfbWF0Y2goZixwW21dKSx1IT09ITEpcmV0dXJuIHU7aWYodGhpcy5fYmFja3RyYWNrKXtoPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGg/KHU9dGhpcy50ZXN0X21hdGNoKGgscFtkXSksdSE9PSExP3U6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LCJuZXh0IiksbGV4Om8oZnVuY3Rpb24oKXt2YXIgaD10aGlzLm5leHQoKTtyZXR1cm4gaHx8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24oaCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKGgpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIGg9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gaD4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sInBvcFN0YXRlIiksX2N1cnJlbnRSdWxlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sIl9jdXJyZW50UnVsZXMiKSx0b3BTdGF0ZTpvKGZ1bmN0aW9uKGgpe3JldHVybiBoPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoaHx8MCksaD49MD90aGlzLmNvbmRpdGlvblN0YWNrW2hdOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24oaCl7dGhpcy5iZWdpbihoKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKGgsZixkLHApe3ZhciBtPXA7c3dpdGNoKGQpe2Nhc2UgMDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImNzdiIpLDQ7YnJlYWs7Y2FzZSAxOnJldHVybiAxMDtjYXNlIDI6cmV0dXJuIDU7Y2FzZSAzOnJldHVybiAxMjtjYXNlIDQ6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJlc2NhcGVkX3RleHQiKSwxODticmVhaztjYXNlIDU6cmV0dXJuIDIwO2Nhc2UgNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgiZXNjYXBlZF90ZXh0IiksMTg7YnJlYWs7Y2FzZSA3OnJldHVybiAxOX19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzpzYW5rZXktYmV0YVxiKS9pLC9eKD86JCkvaSwvXig/OigoXHUwMDBEXHUwMDBBKXwoXHUwMDBBKSkpL2ksL14oPzooXHUwMDJDKSkvaSwvXig/OihcdTAwMjIpKS9pLC9eKD86KFtcdTAwMjAtXHUwMDIxXHUwMDIzLVx1MDAyQlx1MDAyRC1cdTAwN0VdKSopL2ksL14oPzooXHUwMDIyKSg/IShcdTAwMjIpKSkvaSwvXig/OigoW1x1MDAyMC1cdTAwMjFcdTAwMjMtXHUwMDJCXHUwMDJELVx1MDA3RV0pfChcdTAwMkMpfChcdTAwMEQpfChcdTAwMEEpfChcdTAwMjIpKFx1MDAyMikpKikvaV0sY29uZGl0aW9uczp7Y3N2OntydWxlczpbMSwyLDMsNCw1LDYsN10saW5jbHVzaXZlOiExfSxlc2NhcGVkX3RleHQ6e3J1bGVzOls2LDddLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDYsN10saW5jbHVzaXZlOiEwfX19O3JldHVybiBsfSgpO2kubGV4ZXI9YTtmdW5jdGlvbiBzKCl7dGhpcy55eT17fX1yZXR1cm4gbyhzLCJQYXJzZXIiKSxzLnByb3RvdHlwZT1pLGkuUGFyc2VyPXMsbmV3IHN9KCk7T0IucGFyc2VyPU9CO1NiPU9CfSk7dmFyIHJTLG5TLHRTLE90dCxQQixQdHQsQkIsQnR0LEZ0dCx6dHQsR3R0LHR5ZSxyeWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtWdCgpO2ZyKCk7QWkoKTtyUz1bXSxuUz1bXSx0Uz1uZXcgTWFwLE90dD1vKCgpPT57clM9W10sblM9W10sdFM9bmV3IE1hcCxMcigpfSwiY2xlYXIiKSxQQj1jbGFzc3tjb25zdHJ1Y3RvcihlLHIsbj0wKXt0aGlzLnNvdXJjZT1lO3RoaXMudGFyZ2V0PXI7dGhpcy52YWx1ZT1ufXN0YXRpY3tvKHRoaXMsIlNhbmtleUxpbmsiKX19LFB0dD1vKCh0LGUscik9PntyUy5wdXNoKG5ldyBQQih0LGUscikpfSwiYWRkTGluayIpLEJCPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuSUQ9ZX1zdGF0aWN7byh0aGlzLCJTYW5rZXlOb2RlIil9fSxCdHQ9byh0PT57dD1xZS5zYW5pdGl6ZVRleHQodCxwZSgpKTtsZXQgZT10Uy5nZXQodCk7cmV0dXJuIGU9PT12b2lkIDAmJihlPW5ldyBCQih0KSx0Uy5zZXQodCxlKSxuUy5wdXNoKGUpKSxlfSwiZmluZE9yQ3JlYXRlTm9kZSIpLEZ0dD1vKCgpPT5uUywiZ2V0Tm9kZXMiKSx6dHQ9bygoKT0+clMsImdldExpbmtzIiksR3R0PW8oKCk9Pih7bm9kZXM6blMubWFwKHQ9Pih7aWQ6dC5JRH0pKSxsaW5rczpyUy5tYXAodD0+KHtzb3VyY2U6dC5zb3VyY2UuSUQsdGFyZ2V0OnQudGFyZ2V0LklELHZhbHVlOnQudmFsdWV9KSl9KSwiZ2V0R3JhcGgiKSx0eWU9e25vZGVzTWFwOnRTLGdldENvbmZpZzpvKCgpPT5wZSgpLnNhbmtleSwiZ2V0Q29uZmlnIiksZ2V0Tm9kZXM6RnR0LGdldExpbmtzOnp0dCxnZXRHcmFwaDpHdHQsYWRkTGluazpQdHQsZmluZE9yQ3JlYXRlTm9kZTpCdHQsZ2V0QWNjVGl0bGU6QnIsc2V0QWNjVGl0bGU6TXIsZ2V0QWNjRGVzY3JpcHRpb246enIsc2V0QWNjRGVzY3JpcHRpb246RnIsZ2V0RGlhZ3JhbVRpdGxlOkpyLHNldERpYWdyYW1UaXRsZTpjbixjbGVhcjpPdHR9fSk7ZnVuY3Rpb24gQ2IodCxlKXtsZXQgcjtpZihlPT09dm9pZCAwKWZvcihsZXQgbiBvZiB0KW4hPW51bGwmJihyPG58fHI9PT12b2lkIDAmJm4+PW4pJiYocj1uKTtlbHNle2xldCBuPS0xO2ZvcihsZXQgaSBvZiB0KShpPWUoaSwrK24sdCkpIT1udWxsJiYocjxpfHxyPT09dm9pZCAwJiZpPj1pKSYmKHI9aSl9cmV0dXJuIHJ9dmFyIG55ZT1NKCgpPT57InVzZSBzdHJpY3QiO28oQ2IsIm1heCIpfSk7ZnVuY3Rpb24gTzEodCxlKXtsZXQgcjtpZihlPT09dm9pZCAwKWZvcihsZXQgbiBvZiB0KW4hPW51bGwmJihyPm58fHI9PT12b2lkIDAmJm4+PW4pJiYocj1uKTtlbHNle2xldCBuPS0xO2ZvcihsZXQgaSBvZiB0KShpPWUoaSwrK24sdCkpIT1udWxsJiYocj5pfHxyPT09dm9pZCAwJiZpPj1pKSYmKHI9aSl9cmV0dXJuIHJ9dmFyIGl5ZT1NKCgpPT57InVzZSBzdHJpY3QiO28oTzEsIm1pbiIpfSk7ZnVuY3Rpb24gUDEodCxlKXtsZXQgcj0wO2lmKGU9PT12b2lkIDApZm9yKGxldCBuIG9mIHQpKG49K24pJiYocis9bik7ZWxzZXtsZXQgbj0tMTtmb3IobGV0IGkgb2YgdCkoaT0rZShpLCsrbix0KSkmJihyKz1pKX1yZXR1cm4gcn12YXIgYXllPU0oKCk9PnsidXNlIHN0cmljdCI7byhQMSwic3VtIil9KTt2YXIgRkI9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtueWUoKTtpeWUoKTtheWUoKX0pO2Z1bmN0aW9uICR0dCh0KXtyZXR1cm4gdC50YXJnZXQuZGVwdGh9ZnVuY3Rpb24gekIodCl7cmV0dXJuIHQuZGVwdGh9ZnVuY3Rpb24gR0IodCxlKXtyZXR1cm4gZS0xLXQuaGVpZ2h0fWZ1bmN0aW9uIEFiKHQsZSl7cmV0dXJuIHQuc291cmNlTGlua3MubGVuZ3RoP3QuZGVwdGg6ZS0xfWZ1bmN0aW9uICRCKHQpe3JldHVybiB0LnRhcmdldExpbmtzLmxlbmd0aD90LmRlcHRoOnQuc291cmNlTGlua3MubGVuZ3RoP08xKHQuc291cmNlTGlua3MsJHR0KS0xOjB9dmFyIFZCPU0oKCk9PnsidXNlIHN0cmljdCI7RkIoKTtvKCR0dCwidGFyZ2V0RGVwdGgiKTtvKHpCLCJsZWZ0Iik7byhHQiwicmlnaHQiKTtvKEFiLCJqdXN0aWZ5Iik7bygkQiwiY2VudGVyIil9KTtmdW5jdGlvbiBCMSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19dmFyIHN5ZT1NKCgpPT57InVzZSBzdHJpY3QiO28oQjEsImNvbnN0YW50Iil9KTtmdW5jdGlvbiBveWUodCxlKXtyZXR1cm4gaVModC5zb3VyY2UsZS5zb3VyY2UpfHx0LmluZGV4LWUuaW5kZXh9ZnVuY3Rpb24gbHllKHQsZSl7cmV0dXJuIGlTKHQudGFyZ2V0LGUudGFyZ2V0KXx8dC5pbmRleC1lLmluZGV4fWZ1bmN0aW9uIGlTKHQsZSl7cmV0dXJuIHQueTAtZS55MH1mdW5jdGlvbiBVQih0KXtyZXR1cm4gdC52YWx1ZX1mdW5jdGlvbiBWdHQodCl7cmV0dXJuIHQuaW5kZXh9ZnVuY3Rpb24gVXR0KHQpe3JldHVybiB0Lm5vZGVzfWZ1bmN0aW9uIEh0dCh0KXtyZXR1cm4gdC5saW5rc31mdW5jdGlvbiBjeWUodCxlKXtsZXQgcj10LmdldChlKTtpZighcil0aHJvdyBuZXcgRXJyb3IoIm1pc3Npbmc6ICIrZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gdXllKHtub2Rlczp0fSl7Zm9yKGxldCBlIG9mIHQpe2xldCByPWUueTAsbj1yO2ZvcihsZXQgaSBvZiBlLnNvdXJjZUxpbmtzKWkueTA9citpLndpZHRoLzIscis9aS53aWR0aDtmb3IobGV0IGkgb2YgZS50YXJnZXRMaW5rcylpLnkxPW4raS53aWR0aC8yLG4rPWkud2lkdGh9fWZ1bmN0aW9uIGFTKCl7bGV0IHQ9MCxlPTAscj0xLG49MSxpPTI0LGE9OCxzLGw9VnR0LHU9QWIsaCxmLGQ9VXR0LHA9SHR0LG09NjtmdW5jdGlvbiBnKCl7bGV0IE89e25vZGVzOmQuYXBwbHkobnVsbCxhcmd1bWVudHMpLGxpbmtzOnAuYXBwbHkobnVsbCxhcmd1bWVudHMpfTtyZXR1cm4geShPKSx2KE8pLHgoTyksYihPKSxUKE8pLHV5ZShPKSxPfW8oZywic2Fua2V5IiksZy51cGRhdGU9ZnVuY3Rpb24oTyl7cmV0dXJuIHV5ZShPKSxPfSxnLm5vZGVJZD1mdW5jdGlvbihPKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD10eXBlb2YgTz09ImZ1bmN0aW9uIj9POkIxKE8pLGcpOmx9LGcubm9kZUFsaWduPWZ1bmN0aW9uKE8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXR5cGVvZiBPPT0iZnVuY3Rpb24iP086QjEoTyksZyk6dX0sZy5ub2RlU29ydD1mdW5jdGlvbihPKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1PLGcpOmh9LGcubm9kZVdpZHRoPWZ1bmN0aW9uKE8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPStPLGcpOml9LGcubm9kZVBhZGRpbmc9ZnVuY3Rpb24oTyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9cz0rTyxnKTphfSxnLm5vZGVzPWZ1bmN0aW9uKE8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPXR5cGVvZiBPPT0iZnVuY3Rpb24iP086QjEoTyksZyk6ZH0sZy5saW5rcz1mdW5jdGlvbihPKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD10eXBlb2YgTz09ImZ1bmN0aW9uIj9POkIxKE8pLGcpOnB9LGcubGlua1NvcnQ9ZnVuY3Rpb24oTyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9TyxnKTpmfSxnLnNpemU9ZnVuY3Rpb24oTyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZT0wLHI9K09bMF0sbj0rT1sxXSxnKTpbci10LG4tZV19LGcuZXh0ZW50PWZ1bmN0aW9uKE8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStPWzBdWzBdLHI9K09bMV1bMF0sZT0rT1swXVsxXSxuPStPWzFdWzFdLGcpOltbdCxlXSxbcixuXV19LGcuaXRlcmF0aW9ucz1mdW5jdGlvbihPKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0rTyxnKTptfTtmdW5jdGlvbiB5KHtub2RlczpPLGxpbmtzOk59KXtmb3IobGV0W0YsQl1vZiBPLmVudHJpZXMoKSlCLmluZGV4PUYsQi5zb3VyY2VMaW5rcz1bXSxCLnRhcmdldExpbmtzPVtdO2xldCBQPW5ldyBNYXAoTy5tYXAoKEYsQik9PltsKEYsQixPKSxGXSkpO2ZvcihsZXRbRixCXW9mIE4uZW50cmllcygpKXtCLmluZGV4PUY7bGV0e3NvdXJjZTpHLHRhcmdldDp6fT1CO3R5cGVvZiBHIT0ib2JqZWN0IiYmKEc9Qi5zb3VyY2U9Y3llKFAsRykpLHR5cGVvZiB6IT0ib2JqZWN0IiYmKHo9Qi50YXJnZXQ9Y3llKFAseikpLEcuc291cmNlTGlua3MucHVzaChCKSx6LnRhcmdldExpbmtzLnB1c2goQil9aWYoZiE9bnVsbClmb3IobGV0e3NvdXJjZUxpbmtzOkYsdGFyZ2V0TGlua3M6Qn1vZiBPKUYuc29ydChmKSxCLnNvcnQoZil9byh5LCJjb21wdXRlTm9kZUxpbmtzIik7ZnVuY3Rpb24gdih7bm9kZXM6T30pe2ZvcihsZXQgTiBvZiBPKU4udmFsdWU9Ti5maXhlZFZhbHVlPT09dm9pZCAwP01hdGgubWF4KFAxKE4uc291cmNlTGlua3MsVUIpLFAxKE4udGFyZ2V0TGlua3MsVUIpKTpOLmZpeGVkVmFsdWV9byh2LCJjb21wdXRlTm9kZVZhbHVlcyIpO2Z1bmN0aW9uIHgoe25vZGVzOk99KXtsZXQgTj1PLmxlbmd0aCxQPW5ldyBTZXQoTyksRj1uZXcgU2V0LEI9MDtmb3IoO1Auc2l6ZTspe2ZvcihsZXQgRyBvZiBQKXtHLmRlcHRoPUI7Zm9yKGxldHt0YXJnZXQ6en1vZiBHLnNvdXJjZUxpbmtzKUYuYWRkKHopfWlmKCsrQj5OKXRocm93IG5ldyBFcnJvcigiY2lyY3VsYXIgbGluayIpO1A9RixGPW5ldyBTZXR9fW8oeCwiY29tcHV0ZU5vZGVEZXB0aHMiKTtmdW5jdGlvbiBiKHtub2RlczpPfSl7bGV0IE49Ty5sZW5ndGgsUD1uZXcgU2V0KE8pLEY9bmV3IFNldCxCPTA7Zm9yKDtQLnNpemU7KXtmb3IobGV0IEcgb2YgUCl7Ry5oZWlnaHQ9Qjtmb3IobGV0e3NvdXJjZTp6fW9mIEcudGFyZ2V0TGlua3MpRi5hZGQoeil9aWYoKytCPk4pdGhyb3cgbmV3IEVycm9yKCJjaXJjdWxhciBsaW5rIik7UD1GLEY9bmV3IFNldH19byhiLCJjb21wdXRlTm9kZUhlaWdodHMiKTtmdW5jdGlvbiB3KHtub2RlczpPfSl7bGV0IE49Q2IoTyxCPT5CLmRlcHRoKSsxLFA9KHItdC1pKS8oTi0xKSxGPW5ldyBBcnJheShOKTtmb3IobGV0IEIgb2YgTyl7bGV0IEc9TWF0aC5tYXgoMCxNYXRoLm1pbihOLTEsTWF0aC5mbG9vcih1LmNhbGwobnVsbCxCLE4pKSkpO0IubGF5ZXI9RyxCLngwPXQrRypQLEIueDE9Qi54MCtpLEZbR10/RltHXS5wdXNoKEIpOkZbR109W0JdfWlmKGgpZm9yKGxldCBCIG9mIEYpQi5zb3J0KGgpO3JldHVybiBGfW8odywiY29tcHV0ZU5vZGVMYXllcnMiKTtmdW5jdGlvbiBfKE8pe2xldCBOPU8xKE8sUD0+KG4tZS0oUC5sZW5ndGgtMSkqcykvUDEoUCxVQikpO2ZvcihsZXQgUCBvZiBPKXtsZXQgRj1lO2ZvcihsZXQgQiBvZiBQKXtCLnkwPUYsQi55MT1GK0IudmFsdWUqTixGPUIueTErcztmb3IobGV0IEcgb2YgQi5zb3VyY2VMaW5rcylHLndpZHRoPUcudmFsdWUqTn1GPShuLUYrcykvKFAubGVuZ3RoKzEpO2ZvcihsZXQgQj0wO0I8UC5sZW5ndGg7KytCKXtsZXQgRz1QW0JdO0cueTArPUYqKEIrMSksRy55MSs9RiooQisxKX1rKFApfX1vKF8sImluaXRpYWxpemVOb2RlQnJlYWR0aHMiKTtmdW5jdGlvbiBUKE8pe2xldCBOPXcoTyk7cz1NYXRoLm1pbihhLChuLWUpLyhDYihOLFA9PlAubGVuZ3RoKS0xKSksXyhOKTtmb3IobGV0IFA9MDtQPG07KytQKXtsZXQgRj1NYXRoLnBvdyguOTksUCksQj1NYXRoLm1heCgxLUYsKFArMSkvbSk7TChOLEYsQiksRShOLEYsQil9fW8oVCwiY29tcHV0ZU5vZGVCcmVhZHRocyIpO2Z1bmN0aW9uIEUoTyxOLFApe2ZvcihsZXQgRj0xLEI9Ty5sZW5ndGg7RjxCOysrRil7bGV0IEc9T1tGXTtmb3IobGV0IHogb2YgRyl7bGV0IFc9MCxaPTA7Zm9yKGxldHtzb3VyY2U6b2UsdmFsdWU6S31vZiB6LnRhcmdldExpbmtzKXtsZXQgZWU9Syooei5sYXllci1vZS5sYXllcik7Vys9UihvZSx6KSplZSxaKz1lZX1pZighKFo+MCkpY29udGludWU7bGV0IGo9KFcvWi16LnkwKSpOO3oueTArPWosei55MSs9aixEKHopfWg9PT12b2lkIDAmJkcuc29ydChpUyksUyhHLFApfX1vKEUsInJlbGF4TGVmdFRvUmlnaHQiKTtmdW5jdGlvbiBMKE8sTixQKXtmb3IobGV0IEY9Ty5sZW5ndGgsQj1GLTI7Qj49MDstLUIpe2xldCBHPU9bQl07Zm9yKGxldCB6IG9mIEcpe2xldCBXPTAsWj0wO2ZvcihsZXR7dGFyZ2V0Om9lLHZhbHVlOkt9b2Ygei5zb3VyY2VMaW5rcyl7bGV0IGVlPUsqKG9lLmxheWVyLXoubGF5ZXIpO1crPUMoeixvZSkqZWUsWis9ZWV9aWYoIShaPjApKWNvbnRpbnVlO2xldCBqPShXL1otei55MCkqTjt6LnkwKz1qLHoueTErPWosRCh6KX1oPT09dm9pZCAwJiZHLnNvcnQoaVMpLFMoRyxQKX19byhMLCJyZWxheFJpZ2h0VG9MZWZ0Iik7ZnVuY3Rpb24gUyhPLE4pe2xldCBQPU8ubGVuZ3RoPj4xLEY9T1tQXTtJKE8sRi55MC1zLFAtMSxOKSxBKE8sRi55MStzLFArMSxOKSxJKE8sbixPLmxlbmd0aC0xLE4pLEEoTyxlLDAsTil9byhTLCJyZXNvbHZlQ29sbGlzaW9ucyIpO2Z1bmN0aW9uIEEoTyxOLFAsRil7Zm9yKDtQPE8ubGVuZ3RoOysrUCl7bGV0IEI9T1tQXSxHPShOLUIueTApKkY7Rz4xZS02JiYoQi55MCs9RyxCLnkxKz1HKSxOPUIueTErc319byhBLCJyZXNvbHZlQ29sbGlzaW9uc1RvcFRvQm90dG9tIik7ZnVuY3Rpb24gSShPLE4sUCxGKXtmb3IoO1A+PTA7LS1QKXtsZXQgQj1PW1BdLEc9KEIueTEtTikqRjtHPjFlLTYmJihCLnkwLT1HLEIueTEtPUcpLE49Qi55MC1zfX1vKEksInJlc29sdmVDb2xsaXNpb25zQm90dG9tVG9Ub3AiKTtmdW5jdGlvbiBEKHtzb3VyY2VMaW5rczpPLHRhcmdldExpbmtzOk59KXtpZihmPT09dm9pZCAwKXtmb3IobGV0e3NvdXJjZTp7c291cmNlTGlua3M6UH19b2YgTilQLnNvcnQobHllKTtmb3IobGV0e3RhcmdldDp7dGFyZ2V0TGlua3M6UH19b2YgTylQLnNvcnQob3llKX19byhELCJyZW9yZGVyTm9kZUxpbmtzIik7ZnVuY3Rpb24gayhPKXtpZihmPT09dm9pZCAwKWZvcihsZXR7c291cmNlTGlua3M6Tix0YXJnZXRMaW5rczpQfW9mIE8pTi5zb3J0KGx5ZSksUC5zb3J0KG95ZSl9byhrLCJyZW9yZGVyTGlua3MiKTtmdW5jdGlvbiBSKE8sTil7bGV0IFA9Ty55MC0oTy5zb3VyY2VMaW5rcy5sZW5ndGgtMSkqcy8yO2ZvcihsZXR7dGFyZ2V0OkYsd2lkdGg6Qn1vZiBPLnNvdXJjZUxpbmtzKXtpZihGPT09TilicmVhaztQKz1CK3N9Zm9yKGxldHtzb3VyY2U6Rix3aWR0aDpCfW9mIE4udGFyZ2V0TGlua3Mpe2lmKEY9PT1PKWJyZWFrO1AtPUJ9cmV0dXJuIFB9byhSLCJ0YXJnZXRUb3AiKTtmdW5jdGlvbiBDKE8sTil7bGV0IFA9Ti55MC0oTi50YXJnZXRMaW5rcy5sZW5ndGgtMSkqcy8yO2ZvcihsZXR7c291cmNlOkYsd2lkdGg6Qn1vZiBOLnRhcmdldExpbmtzKXtpZihGPT09TylicmVhaztQKz1CK3N9Zm9yKGxldHt0YXJnZXQ6Rix3aWR0aDpCfW9mIE8uc291cmNlTGlua3Mpe2lmKEY9PT1OKWJyZWFrO1AtPUJ9cmV0dXJuIFB9cmV0dXJuIG8oQywic291cmNlVG9wIiksZ312YXIgaHllPU0oKCk9PnsidXNlIHN0cmljdCI7RkIoKTtWQigpO3N5ZSgpO28ob3llLCJhc2NlbmRpbmdTb3VyY2VCcmVhZHRoIik7byhseWUsImFzY2VuZGluZ1RhcmdldEJyZWFkdGgiKTtvKGlTLCJhc2NlbmRpbmdCcmVhZHRoIik7byhVQiwidmFsdWUiKTtvKFZ0dCwiZGVmYXVsdElkIik7byhVdHQsImRlZmF1bHROb2RlcyIpO28oSHR0LCJkZWZhdWx0TGlua3MiKTtvKGN5ZSwiZmluZCIpO28odXllLCJjb21wdXRlTGlua0JyZWFkdGhzIik7byhhUywiU2Fua2V5Iil9KTtmdW5jdGlvbiBZQigpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIGZ5ZSgpe3JldHVybiBuZXcgWUJ9dmFyIEhCLFdCLG5wLFd0dCxxQixkeWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtIQj1NYXRoLlBJLFdCPTIqSEIsbnA9MWUtNixXdHQ9V0ItbnA7byhZQiwiUGF0aCIpO28oZnllLCJwYXRoIik7WUIucHJvdG90eXBlPWZ5ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOllCLG1vdmVUbzpvKGZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKX0sIm1vdmVUbyIpLGNsb3NlUGF0aDpvKGZ1bmN0aW9uKCl7dGhpcy5feDEhPT1udWxsJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSwiY2xvc2VQYXRoIiksbGluZVRvOm8oZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJMIisodGhpcy5feDE9K3QpKyIsIisodGhpcy5feTE9K2UpfSwibGluZVRvIikscXVhZHJhdGljQ3VydmVUbzpvKGZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuXys9IlEiKyArdCsiLCIrICtlKyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K24pfSwicXVhZHJhdGljQ3VydmVUbyIpLGJlemllckN1cnZlVG86byhmdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5fKz0iQyIrICt0KyIsIisgK2UrIiwiKyArcisiLCIrICtuKyIsIisodGhpcy5feDE9K2kpKyIsIisodGhpcy5feTE9K2EpfSwiYmV6aWVyQ3VydmVUbyIpLGFyY1RvOm8oZnVuY3Rpb24odCxlLHIsbixpKXt0PSt0LGU9K2Uscj0rcixuPStuLGk9K2k7dmFyIGE9dGhpcy5feDEscz10aGlzLl95MSxsPXItdCx1PW4tZSxoPWEtdCxmPXMtZSxkPWgqaCtmKmY7aWYoaTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK2kpO2lmKHRoaXMuX3gxPT09bnVsbCl0aGlzLl8rPSJNIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1lKTtlbHNlIGlmKGQ+bnApaWYoIShNYXRoLmFicyhmKmwtdSpoKT5ucCl8fCFpKXRoaXMuXys9IkwiKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpO2Vsc2V7dmFyIHA9ci1hLG09bi1zLGc9bCpsK3UqdSx5PXAqcCttKm0sdj1NYXRoLnNxcnQoZykseD1NYXRoLnNxcnQoZCksYj1pKk1hdGgudGFuKChIQi1NYXRoLmFjb3MoKGcrZC15KS8oMip2KngpKSkvMiksdz1iL3gsXz1iL3Y7TWF0aC5hYnMody0xKT5ucCYmKHRoaXMuXys9IkwiKyh0K3cqaCkrIiwiKyhlK3cqZikpLHRoaXMuXys9IkEiK2krIiwiK2krIiwwLDAsIisgKyhmKnA+aCptKSsiLCIrKHRoaXMuX3gxPXQrXypsKSsiLCIrKHRoaXMuX3kxPWUrXyp1KX19LCJhcmNUbyIpLGFyYzpvKGZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0PSt0LGU9K2Uscj0rcixhPSEhYTt2YXIgcz1yKk1hdGguY29zKG4pLGw9cipNYXRoLnNpbihuKSx1PXQrcyxoPWUrbCxmPTFeYSxkPWE/bi1pOmktbjtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK3UrIiwiK2g6KE1hdGguYWJzKHRoaXMuX3gxLXUpPm5wfHxNYXRoLmFicyh0aGlzLl95MS1oKT5ucCkmJih0aGlzLl8rPSJMIit1KyIsIitoKSxyJiYoZDwwJiYoZD1kJVdCK1dCKSxkPld0dD90aGlzLl8rPSJBIityKyIsIityKyIsMCwxLCIrZisiLCIrKHQtcykrIiwiKyhlLWwpKyJBIityKyIsIityKyIsMCwxLCIrZisiLCIrKHRoaXMuX3gxPXUpKyIsIisodGhpcy5feTE9aCk6ZD5ucCYmKHRoaXMuXys9IkEiK3IrIiwiK3IrIiwwLCIrICsoZD49SEIpKyIsIitmKyIsIisodGhpcy5feDE9dCtyKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPWUrcipNYXRoLnNpbihpKSkpKX0sImFyYyIpLHJlY3Q6byhmdW5jdGlvbih0LGUscixuKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2UpKyJoIisgK3IrInYiKyArbisiaCIrLXIrIloifSwicmVjdCIpLHRvU3RyaW5nOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffSwidG9TdHJpbmciKX07cUI9ZnllfSk7dmFyIHB5ZT1NKCgpPT57InVzZSBzdHJpY3QiO2R5ZSgpfSk7ZnVuY3Rpb24gc1ModCl7cmV0dXJuIG8oZnVuY3Rpb24oKXtyZXR1cm4gdH0sImNvbnN0YW50Iil9dmFyIG15ZT1NKCgpPT57InVzZSBzdHJpY3QiO28oc1MsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGd5ZSh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiB5eWUodCl7cmV0dXJuIHRbMV19dmFyIHZ5ZT1NKCgpPT57InVzZSBzdHJpY3QiO28oZ3llLCJ4Iik7byh5eWUsInkiKX0pO3ZhciB4eWUsYnllPU0oKCk9PnsidXNlIHN0cmljdCI7eHllPUFycmF5LnByb3RvdHlwZS5zbGljZX0pO2Z1bmN0aW9uIFl0dCh0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gcXR0KHQpe3JldHVybiB0LnRhcmdldH1mdW5jdGlvbiBYdHQodCl7dmFyIGU9WXR0LHI9cXR0LG49Z3llLGk9eXllLGE9bnVsbDtmdW5jdGlvbiBzKCl7dmFyIGwsdT14eWUuY2FsbChhcmd1bWVudHMpLGg9ZS5hcHBseSh0aGlzLHUpLGY9ci5hcHBseSh0aGlzLHUpO2lmKGF8fChhPWw9cUIoKSksdChhLCtuLmFwcGx5KHRoaXMsKHVbMF09aCx1KSksK2kuYXBwbHkodGhpcyx1KSwrbi5hcHBseSh0aGlzLCh1WzBdPWYsdSkpLCtpLmFwcGx5KHRoaXMsdSkpLGwpcmV0dXJuIGE9bnVsbCxsKyIifHxudWxsfXJldHVybiBvKHMsImxpbmsiKSxzLnNvdXJjZT1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1sLHMpOmV9LHMudGFyZ2V0PWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWwscyk6cn0scy54PWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6c1MoK2wpLHMpOm59LHMueT1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOnNTKCtsKSxzKTppfSxzLmNvbnRleHQ9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bD8/bnVsbCxzKTphfSxzfWZ1bmN0aW9uIGp0dCh0LGUscixuLGkpe3QubW92ZVRvKGUsciksdC5iZXppZXJDdXJ2ZVRvKGU9KGUrbikvMixyLGUsaSxuLGkpfWZ1bmN0aW9uIFhCKCl7cmV0dXJuIFh0dChqdHQpfXZhciB3eWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtweWUoKTtieWUoKTtteWUoKTt2eWUoKTtvKFl0dCwibGlua1NvdXJjZSIpO28ocXR0LCJsaW5rVGFyZ2V0Iik7byhYdHQsImxpbmsiKTtvKGp0dCwiY3VydmVIb3Jpem9udGFsIik7byhYQiwibGlua0hvcml6b250YWwiKX0pO3ZhciBUeWU9TSgoKT0+eyJ1c2Ugc3RyaWN0Ijt3eWUoKX0pO2Z1bmN0aW9uIEt0dCh0KXtyZXR1cm5bdC5zb3VyY2UueDEsdC55MF19ZnVuY3Rpb24gUXR0KHQpe3JldHVyblt0LnRhcmdldC54MCx0LnkxXX1mdW5jdGlvbiBvUygpe3JldHVybiBYQigpLnNvdXJjZShLdHQpLnRhcmdldChRdHQpfXZhciBreWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtUeWUoKTtvKEt0dCwiaG9yaXpvbnRhbFNvdXJjZSIpO28oUXR0LCJob3Jpem9udGFsVGFyZ2V0Iik7byhvUywiZGVmYXVsdCIpfSk7dmFyIEV5ZT1NKCgpPT57InVzZSBzdHJpY3QiO2h5ZSgpO1ZCKCk7a3llKCl9KTt2YXIgX2IsU3llPU0oKCk9PnsidXNlIHN0cmljdCI7X2I9Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJVaWQiKX1zdGF0aWN7dGhpcy5jb3VudD0wfXN0YXRpYyBuZXh0KGUpe3JldHVybiBuZXcgdChlKyArK3QuY291bnQpfWNvbnN0cnVjdG9yKGUpe3RoaXMuaWQ9ZSx0aGlzLmhyZWY9YCMke2V9YH10b1N0cmluZygpe3JldHVybiJ1cmwoIit0aGlzLmhyZWYrIikifX19KTt2YXIgWnR0LEp0dCxDeWUsQXllPU0oKCk9PnsidXNlIHN0cmljdCI7VnQoKTtwcigpO0V5ZSgpO2FpKCk7U3llKCk7WnR0PXtsZWZ0OnpCLHJpZ2h0OkdCLGNlbnRlcjokQixqdXN0aWZ5OkFifSxKdHQ9byhmdW5jdGlvbih0LGUscixuKXtsZXR7c2VjdXJpdHlMZXZlbDppLHNhbmtleTphfT1wZSgpLHM9QjQuc2Fua2V5LGw7aT09PSJzYW5kYm94IiYmKGw9VmUoIiNpIitlKSk7bGV0IHU9aT09PSJzYW5kYm94Ij9WZShsLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOlZlKCJib2R5IiksaD1pPT09InNhbmRib3giP3Uuc2VsZWN0KGBbaWQ9IiR7ZX0iXWApOlZlKGBbaWQ9IiR7ZX0iXWApLGY9YT8ud2lkdGg/P3Mud2lkdGgsZD1hPy5oZWlnaHQ/P3Mud2lkdGgscD1hPy51c2VNYXhXaWR0aD8/cy51c2VNYXhXaWR0aCxtPWE/Lm5vZGVBbGlnbm1lbnQ/P3Mubm9kZUFsaWdubWVudCxnPWE/LnByZWZpeD8/cy5wcmVmaXgseT1hPy5zdWZmaXg/P3Muc3VmZml4LHY9YT8uc2hvd1ZhbHVlcz8/cy5zaG93VmFsdWVzLHg9bi5kYi5nZXRHcmFwaCgpLGI9WnR0W21dO2FTKCkubm9kZUlkKEk9PkkuaWQpLm5vZGVXaWR0aCgxMCkubm9kZVBhZGRpbmcoMTArKHY/MTU6MCkpLm5vZGVBbGlnbihiKS5leHRlbnQoW1swLDBdLFtmLGRdXSkoeCk7bGV0IFQ9a3UoZV8pO2guYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJub2RlcyIpLnNlbGVjdEFsbCgiLm5vZGUiKS5kYXRhKHgubm9kZXMpLmpvaW4oImciKS5hdHRyKCJjbGFzcyIsIm5vZGUiKS5hdHRyKCJpZCIsST0+KEkudWlkPV9iLm5leHQoIm5vZGUtIikpLmlkKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEkpe3JldHVybiJ0cmFuc2xhdGUoIitJLngwKyIsIitJLnkwKyIpIn0pLmF0dHIoIngiLEk9PkkueDApLmF0dHIoInkiLEk9PkkueTApLmFwcGVuZCgicmVjdCIpLmF0dHIoImhlaWdodCIsST0+SS55MS1JLnkwKS5hdHRyKCJ3aWR0aCIsST0+SS54MS1JLngwKS5hdHRyKCJmaWxsIixJPT5UKEkuaWQpKTtsZXQgRT1vKCh7aWQ6SSx2YWx1ZTpEfSk9PnY/YCR7SX0KJHtnfSR7TWF0aC5yb3VuZChEKjEwMCkvMTAwfSR7eX1gOkksImdldFRleHQiKTtoLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZS1sYWJlbHMiKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJmb250LXNpemUiLDE0KS5zZWxlY3RBbGwoInRleHQiKS5kYXRhKHgubm9kZXMpLmpvaW4oInRleHQiKS5hdHRyKCJ4IixJPT5JLngwPGYvMj9JLngxKzY6SS54MC02KS5hdHRyKCJ5IixJPT4oSS55MStJLnkwKS8yKS5hdHRyKCJkeSIsYCR7dj8iMCI6IjAuMzUifWVtYCkuYXR0cigidGV4dC1hbmNob3IiLEk9PkkueDA8Zi8yPyJzdGFydCI6ImVuZCIpLnRleHQoRSk7bGV0IEw9aC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxpbmtzIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsLjUpLnNlbGVjdEFsbCgiLmxpbmsiKS5kYXRhKHgubGlua3MpLmpvaW4oImciKS5hdHRyKCJjbGFzcyIsImxpbmsiKS5zdHlsZSgibWl4LWJsZW5kLW1vZGUiLCJtdWx0aXBseSIpLFM9YT8ubGlua0NvbG9yPz8iZ3JhZGllbnQiO2lmKFM9PT0iZ3JhZGllbnQiKXtsZXQgST1MLmFwcGVuZCgibGluZWFyR3JhZGllbnQiKS5hdHRyKCJpZCIsRD0+KEQudWlkPV9iLm5leHQoImxpbmVhckdyYWRpZW50LSIpKS5pZCkuYXR0cigiZ3JhZGllbnRVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigieDEiLEQ9PkQuc291cmNlLngxKS5hdHRyKCJ4MiIsRD0+RC50YXJnZXQueDApO0kuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IiwiMCUiKS5hdHRyKCJzdG9wLWNvbG9yIixEPT5UKEQuc291cmNlLmlkKSksSS5hcHBlbmQoInN0b3AiKS5hdHRyKCJvZmZzZXQiLCIxMDAlIikuYXR0cigic3RvcC1jb2xvciIsRD0+VChELnRhcmdldC5pZCkpfWxldCBBO3N3aXRjaChTKXtjYXNlImdyYWRpZW50IjpBPW8oST0+SS51aWQsImNvbG9yaW5nIik7YnJlYWs7Y2FzZSJzb3VyY2UiOkE9byhJPT5UKEkuc291cmNlLmlkKSwiY29sb3JpbmciKTticmVhaztjYXNlInRhcmdldCI6QT1vKEk9PlQoSS50YXJnZXQuaWQpLCJjb2xvcmluZyIpO2JyZWFrO2RlZmF1bHQ6QT1TfUwuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsb1MoKSkuYXR0cigic3Ryb2tlIixBKS5hdHRyKCJzdHJva2Utd2lkdGgiLEk9Pk1hdGgubWF4KDEsSS53aWR0aCkpLElvKHZvaWQgMCxoLDAscCl9LCJkcmF3IiksQ3llPXtkcmF3Okp0dH19KTt2YXIgX3llLEx5ZT1NKCgpPT57InVzZSBzdHJpY3QiO195ZT1vKHQ9PnQucmVwbGFjZUFsbCgvXlteXFNcblxyXSt8W15cU1xuXHJdKyQvZywiIikucmVwbGFjZUFsbCgvKFtcblxyXSkrL2csYApgKS50cmltKCksInByZXBhcmVUZXh0Rm9yUGFyc2luZyIpfSk7dmFyIER5ZT17fTt2cihEeWUse2RpYWdyYW06KCk9PnRydH0pO3ZhciBlcnQsdHJ0LE55ZT1NKCgpPT57InVzZSBzdHJpY3QiO2V5ZSgpO3J5ZSgpO0F5ZSgpO0x5ZSgpO2VydD1TYi5wYXJzZS5iaW5kKFNiKTtTYi5wYXJzZT10PT5lcnQoX3llKHQpKTt0cnQ9e3BhcnNlcjpTYixkYjp0eWUscmVuZGVyZXI6Q3llfX0pO3ZhciBJeWUsakIsYXJ0LHNydCxvcnQsbHJ0LGNydCwkZixLQj1NKCgpPT57InVzZSBzdHJpY3QiO1phKCk7YnMoKTtocigpO0FpKCk7SXllPXtwYWNrZXQ6W119LGpCPXN0cnVjdHVyZWRDbG9uZShJeWUpLGFydD11ci5wYWNrZXQsc3J0PW8oKCk9PntsZXQgdD1Ecyh7Li4uYXJ0LC4uLkNyKCkucGFja2V0fSk7cmV0dXJuIHQuc2hvd0JpdHMmJih0LnBhZGRpbmdZKz0xMCksdH0sImdldENvbmZpZyIpLG9ydD1vKCgpPT5qQi5wYWNrZXQsImdldFBhY2tldCIpLGxydD1vKHQ9Pnt0Lmxlbmd0aD4wJiZqQi5wYWNrZXQucHVzaCh0KX0sInB1c2hXb3JkIiksY3J0PW8oKCk9PntMcigpLGpCPXN0cnVjdHVyZWRDbG9uZShJeWUpfSwiY2xlYXIiKSwkZj17cHVzaFdvcmQ6bHJ0LGdldFBhY2tldDpvcnQsZ2V0Q29uZmlnOnNydCxjbGVhcjpjcnQsc2V0QWNjVGl0bGU6TXIsZ2V0QWNjVGl0bGU6QnIsc2V0RGlhZ3JhbVRpdGxlOmNuLGdldERpYWdyYW1UaXRsZTpKcixnZXRBY2NEZXNjcmlwdGlvbjp6cixzZXRBY2NEZXNjcmlwdGlvbjpGcn19KTt2YXIgdXJ0LGhydCxmcnQsT3llLFB5ZT1NKCgpPT57InVzZSBzdHJpY3QiO0hnKCk7dXQoKTtUeCgpO0tCKCk7dXJ0PTFlNCxocnQ9byh0PT57eWYodCwkZik7bGV0IGU9LTEscj1bXSxuPTEse2JpdHNQZXJSb3c6aX09JGYuZ2V0Q29uZmlnKCk7Zm9yKGxldHtzdGFydDphLGVuZDpzLGxhYmVsOmx9b2YgdC5ibG9ja3Mpe2lmKHMmJnM8YSl0aHJvdyBuZXcgRXJyb3IoYFBhY2tldCBibG9jayAke2F9IC0gJHtzfSBpcyBpbnZhbGlkLiBFbmQgbXVzdCBiZSBncmVhdGVyIHRoYW4gc3RhcnQuYCk7aWYoYSE9PWUrMSl0aHJvdyBuZXcgRXJyb3IoYFBhY2tldCBibG9jayAke2F9IC0gJHtzPz9hfSBpcyBub3QgY29udGlndW91cy4gSXQgc2hvdWxkIHN0YXJ0IGZyb20gJHtlKzF9LmApO2ZvcihlPXM/P2EsWS5kZWJ1ZyhgUGFja2V0IGJsb2NrICR7YX0gLSAke2V9IHdpdGggbGFiZWwgJHtsfWApO3IubGVuZ3RoPD1pKzEmJiRmLmdldFBhY2tldCgpLmxlbmd0aDx1cnQ7KXtsZXRbdSxoXT1mcnQoe3N0YXJ0OmEsZW5kOnMsbGFiZWw6bH0sbixpKTtpZihyLnB1c2godSksdS5lbmQrMT09PW4qaSYmKCRmLnB1c2hXb3JkKHIpLHI9W10sbisrKSwhaClicmVhazsoe3N0YXJ0OmEsZW5kOnMsbGFiZWw6bH09aCl9fSRmLnB1c2hXb3JkKHIpfSwicG9wdWxhdGUiKSxmcnQ9bygodCxlLHIpPT57aWYodC5lbmQ9PT12b2lkIDAmJih0LmVuZD10LnN0YXJ0KSx0LnN0YXJ0PnQuZW5kKXRocm93IG5ldyBFcnJvcihgQmxvY2sgc3RhcnQgJHt0LnN0YXJ0fSBpcyBncmVhdGVyIHRoYW4gYmxvY2sgZW5kICR7dC5lbmR9LmApO3JldHVybiB0LmVuZCsxPD1lKnI/W3Qsdm9pZCAwXTpbe3N0YXJ0OnQuc3RhcnQsZW5kOmUqci0xLGxhYmVsOnQubGFiZWx9LHtzdGFydDplKnIsZW5kOnQuZW5kLGxhYmVsOnQubGFiZWx9XX0sImdldE5leHRGaXR0aW5nQmxvY2siKSxPeWU9e3BhcnNlOm8oYXN5bmMgdD0+e2xldCBlPWF3YWl0IFlsKCJwYWNrZXQiLHQpO1kuZGVidWcoZSksaHJ0KGUpfSwicGFyc2UiKX19KTt2YXIgZHJ0LHBydCxCeWUsRnllPU0oKCk9PnsidXNlIHN0cmljdCI7ZWgoKTthaSgpO2RydD1vKCh0LGUscixuKT0+e2xldCBpPW4uZGIsYT1pLmdldENvbmZpZygpLHtyb3dIZWlnaHQ6cyxwYWRkaW5nWTpsLGJpdFdpZHRoOnUsYml0c1BlclJvdzpofT1hLGY9aS5nZXRQYWNrZXQoKSxkPWkuZ2V0RGlhZ3JhbVRpdGxlKCkscD1zK2wsbT1wKihmLmxlbmd0aCsxKS0oZD8wOnMpLGc9dSpoKzIseT1WYShlKTt5LmF0dHIoInZpZXdib3giLGAwIDAgJHtnfSAke219YCksWnIoeSxtLGcsYS51c2VNYXhXaWR0aCk7Zm9yKGxldFt2LHhdb2YgZi5lbnRyaWVzKCkpcHJ0KHkseCx2LGEpO3kuYXBwZW5kKCJ0ZXh0IikudGV4dChkKS5hdHRyKCJ4IixnLzIpLmF0dHIoInkiLG0tcC8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiY2xhc3MiLCJwYWNrZXRUaXRsZSIpfSwiZHJhdyIpLHBydD1vKCh0LGUscix7cm93SGVpZ2h0Om4scGFkZGluZ1g6aSxwYWRkaW5nWTphLGJpdFdpZHRoOnMsYml0c1BlclJvdzpsLHNob3dCaXRzOnV9KT0+e2xldCBoPXQuYXBwZW5kKCJnIiksZj1yKihuK2EpK2E7Zm9yKGxldCBkIG9mIGUpe2xldCBwPWQuc3RhcnQlbCpzKzEsbT0oZC5lbmQtZC5zdGFydCsxKSpzLWk7aWYoaC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IixwKS5hdHRyKCJ5IixmKS5hdHRyKCJ3aWR0aCIsbSkuYXR0cigiaGVpZ2h0IixuKS5hdHRyKCJjbGFzcyIsInBhY2tldEJsb2NrIiksaC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixwK20vMikuYXR0cigieSIsZituLzIpLmF0dHIoImNsYXNzIiwicGFja2V0TGFiZWwiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChkLmxhYmVsKSwhdSljb250aW51ZTtsZXQgZz1kLmVuZD09PWQuc3RhcnQseT1mLTI7aC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixwKyhnP20vMjowKSkuYXR0cigieSIseSkuYXR0cigiY2xhc3MiLCJwYWNrZXRCeXRlIHN0YXJ0IikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJhdXRvIikuYXR0cigidGV4dC1hbmNob3IiLGc/Im1pZGRsZSI6InN0YXJ0IikudGV4dChkLnN0YXJ0KSxnfHxoLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLHArbSkuYXR0cigieSIseSkuYXR0cigiY2xhc3MiLCJwYWNrZXRCeXRlIGVuZCIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiYXV0byIpLmF0dHIoInRleHQtYW5jaG9yIiwiZW5kIikudGV4dChkLmVuZCl9fSwiZHJhd1dvcmQiKSxCeWU9e2RyYXc6ZHJ0fX0pO3ZhciBtcnQsenllLEd5ZT1NKCgpPT57InVzZSBzdHJpY3QiO2hyKCk7bXJ0PXtieXRlRm9udFNpemU6IjEwcHgiLHN0YXJ0Qnl0ZUNvbG9yOiJibGFjayIsZW5kQnl0ZUNvbG9yOiJibGFjayIsbGFiZWxDb2xvcjoiYmxhY2siLGxhYmVsRm9udFNpemU6IjEycHgiLHRpdGxlQ29sb3I6ImJsYWNrIix0aXRsZUZvbnRTaXplOiIxNHB4IixibG9ja1N0cm9rZUNvbG9yOiJibGFjayIsYmxvY2tTdHJva2VXaWR0aDoiMSIsYmxvY2tGaWxsQ29sb3I6IiNlZmVmZWYifSx6eWU9bygoe3BhY2tldDp0fT17fSk9PntsZXQgZT1EcyhtcnQsdCk7cmV0dXJuYAoJLnBhY2tldEJ5dGUgewoJCWZvbnQtc2l6ZTogJHtlLmJ5dGVGb250U2l6ZX07Cgl9CgkucGFja2V0Qnl0ZS5zdGFydCB7CgkJZmlsbDogJHtlLnN0YXJ0Qnl0ZUNvbG9yfTsKCX0KCS5wYWNrZXRCeXRlLmVuZCB7CgkJZmlsbDogJHtlLmVuZEJ5dGVDb2xvcn07Cgl9CgkucGFja2V0TGFiZWwgewoJCWZpbGw6ICR7ZS5sYWJlbENvbG9yfTsKCQlmb250LXNpemU6ICR7ZS5sYWJlbEZvbnRTaXplfTsKCX0KCS5wYWNrZXRUaXRsZSB7CgkJZmlsbDogJHtlLnRpdGxlQ29sb3J9OwoJCWZvbnQtc2l6ZTogJHtlLnRpdGxlRm9udFNpemV9OwoJfQoJLnBhY2tldEJsb2NrIHsKCQlzdHJva2U6ICR7ZS5ibG9ja1N0cm9rZUNvbG9yfTsKCQlzdHJva2Utd2lkdGg6ICR7ZS5ibG9ja1N0cm9rZVdpZHRofTsKCQlmaWxsOiAke2UuYmxvY2tGaWxsQ29sb3J9OwoJfQoJYH0sInN0eWxlcyIpfSk7dmFyICR5ZT17fTt2cigkeWUse2RpYWdyYW06KCk9PmdydH0pO3ZhciBncnQsVnllPU0oKCk9PnsidXNlIHN0cmljdCI7S0IoKTtQeWUoKTtGeWUoKTtHeWUoKTtncnQ9e3BhcnNlcjpPeWUsZGI6JGYscmVuZGVyZXI6QnllLHN0eWxlczp6eWV9fSk7dmFyIFFCLFd5ZSxZeWU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtRQj1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24odyxfLFQsRSl7Zm9yKFQ9VHx8e30sRT13Lmxlbmd0aDtFLS07VFt3W0VdXT1fKTtyZXR1cm4gVH0sIm8iKSxlPVsxLDddLHI9WzEsMTNdLG49WzEsMTRdLGk9WzEsMTVdLGE9WzEsMTldLHM9WzEsMTZdLGw9WzEsMTddLHU9WzEsMThdLGg9WzgsMzBdLGY9WzgsMjEsMjgsMjksMzAsMzEsMzIsNDAsNDQsNDddLGQ9WzEsMjNdLHA9WzEsMjRdLG09WzgsMTUsMTYsMjEsMjgsMjksMzAsMzEsMzIsNDAsNDQsNDddLGc9WzgsMTUsMTYsMjEsMjcsMjgsMjksMzAsMzEsMzIsNDAsNDQsNDddLHk9WzEsNDldLHY9e3RyYWNlOm8oZnVuY3Rpb24oKXt9LCJ0cmFjZSIpLHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHNwYWNlTGluZXM6MyxTUEFDRUxJTkU6NCxOTDo1LHNlcGFyYXRvcjo2LFNQQUNFOjcsRU9GOjgsc3RhcnQ6OSxCTE9DS19ESUFHUkFNX0tFWToxMCxkb2N1bWVudDoxMSxzdG9wOjEyLHN0YXRlbWVudDoxMyxsaW5rOjE0LExJTks6MTUsU1RBUlRfTElOSzoxNixMSU5LX0xBQkVMOjE3LFNUUjoxOCxub2RlU3RhdGVtZW50OjE5LGNvbHVtbnNTdGF0ZW1lbnQ6MjAsU1BBQ0VfQkxPQ0s6MjEsYmxvY2tTdGF0ZW1lbnQ6MjIsY2xhc3NEZWZTdGF0ZW1lbnQ6MjMsY3NzQ2xhc3NTdGF0ZW1lbnQ6MjQsc3R5bGVTdGF0ZW1lbnQ6MjUsbm9kZToyNixTSVpFOjI3LENPTFVNTlM6MjgsImlkLWJsb2NrIjoyOSxlbmQ6MzAsYmxvY2s6MzEsTk9ERV9JRDozMixub2RlU2hhcGVOTGFiZWw6MzMsZGlyTGlzdDozNCxESVI6MzUsTk9ERV9EU1RBUlQ6MzYsTk9ERV9ERU5EOjM3LEJMT0NLX0FSUk9XX1NUQVJUOjM4LEJMT0NLX0FSUk9XX0VORDozOSxjbGFzc0RlZjo0MCxDTEFTU0RFRl9JRDo0MSxDTEFTU0RFRl9TVFlMRU9QVFM6NDIsREVGQVVMVDo0MyxjbGFzczo0NCxDTEFTU0VOVElUWV9JRFM6NDUsU1RZTEVDTEFTUzo0NixzdHlsZTo0NyxTVFlMRV9FTlRJVFlfSURTOjQ4LFNUWUxFX0RFRklOSVRJT05fREFUQTo0OSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiU1BBQ0VMSU5FIiw1OiJOTCIsNzoiU1BBQ0UiLDg6IkVPRiIsMTA6IkJMT0NLX0RJQUdSQU1fS0VZIiwxNToiTElOSyIsMTY6IlNUQVJUX0xJTksiLDE3OiJMSU5LX0xBQkVMIiwxODoiU1RSIiwyMToiU1BBQ0VfQkxPQ0siLDI3OiJTSVpFIiwyODoiQ09MVU1OUyIsMjk6ImlkLWJsb2NrIiwzMDoiZW5kIiwzMToiYmxvY2siLDMyOiJOT0RFX0lEIiwzNToiRElSIiwzNjoiTk9ERV9EU1RBUlQiLDM3OiJOT0RFX0RFTkQiLDM4OiJCTE9DS19BUlJPV19TVEFSVCIsMzk6IkJMT0NLX0FSUk9XX0VORCIsNDA6ImNsYXNzRGVmIiw0MToiQ0xBU1NERUZfSUQiLDQyOiJDTEFTU0RFRl9TVFlMRU9QVFMiLDQzOiJERUZBVUxUIiw0NDoiY2xhc3MiLDQ1OiJDTEFTU0VOVElUWV9JRFMiLDQ2OiJTVFlMRUNMQVNTIiw0Nzoic3R5bGUiLDQ4OiJTVFlMRV9FTlRJVFlfSURTIiw0OToiU1RZTEVfREVGSU5JVElPTl9EQVRBIn0scHJvZHVjdGlvbnNfOlswLFszLDFdLFszLDJdLFszLDJdLFs2LDFdLFs2LDFdLFs2LDFdLFs5LDNdLFsxMiwxXSxbMTIsMV0sWzEyLDJdLFsxMiwyXSxbMTEsMV0sWzExLDJdLFsxNCwxXSxbMTQsNF0sWzEzLDFdLFsxMywxXSxbMTMsMV0sWzEzLDFdLFsxMywxXSxbMTMsMV0sWzEzLDFdLFsxOSwzXSxbMTksMl0sWzE5LDFdLFsyMCwxXSxbMjIsNF0sWzIyLDNdLFsyNiwxXSxbMjYsMl0sWzM0LDFdLFszNCwyXSxbMzMsM10sWzMzLDRdLFsyMywzXSxbMjMsM10sWzI0LDNdLFsyNSwzXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKF8sVCxFLEwsUyxBLEkpe3ZhciBEPUEubGVuZ3RoLTE7c3dpdGNoKFMpe2Nhc2UgNDpMLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBzZXBhcmF0b3IgKE5MKSAiKTticmVhaztjYXNlIDU6TC5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogc2VwYXJhdG9yIChTcGFjZSkgIik7YnJlYWs7Y2FzZSA2OkwuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IHNlcGFyYXRvciAoRU9GKSAiKTticmVhaztjYXNlIDc6TC5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogaGllcmFyY2h5OiAiLEFbRC0xXSksTC5zZXRIaWVyYXJjaHkoQVtELTFdKTticmVhaztjYXNlIDg6TC5nZXRMb2dnZXIoKS5kZWJ1ZygiU3RvcCBOTCAiKTticmVhaztjYXNlIDk6TC5nZXRMb2dnZXIoKS5kZWJ1ZygiU3RvcCBFT0YgIik7YnJlYWs7Y2FzZSAxMDpMLmdldExvZ2dlcigpLmRlYnVnKCJTdG9wIE5MMiAiKTticmVhaztjYXNlIDExOkwuZ2V0TG9nZ2VyKCkuZGVidWcoIlN0b3AgRU9GMiAiKTticmVhaztjYXNlIDEyOkwuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IHN0YXRlbWVudDogIixBW0RdKSx0eXBlb2YgQVtEXS5sZW5ndGg9PSJudW1iZXIiP3RoaXMuJD1BW0RdOnRoaXMuJD1bQVtEXV07YnJlYWs7Y2FzZSAxMzpMLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBzdGF0ZW1lbnQgIzI6ICIsQVtELTFdKSx0aGlzLiQ9W0FbRC0xXV0uY29uY2F0KEFbRF0pO2JyZWFrO2Nhc2UgMTQ6TC5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogbGluazogIixBW0RdLF8pLHRoaXMuJD17ZWRnZVR5cGVTdHI6QVtEXSxsYWJlbDoiIn07YnJlYWs7Y2FzZSAxNTpMLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBMQUJFTCBsaW5rOiAiLEFbRC0zXSxBW0QtMV0sQVtEXSksdGhpcy4kPXtlZGdlVHlwZVN0cjpBW0RdLGxhYmVsOkFbRC0xXX07YnJlYWs7Y2FzZSAxODpsZXQgaz1wYXJzZUludChBW0RdKSxSPUwuZ2VuZXJhdGVJZCgpO3RoaXMuJD17aWQ6Uix0eXBlOiJzcGFjZSIsbGFiZWw6IiIsd2lkdGg6ayxjaGlsZHJlbjpbXX07YnJlYWs7Y2FzZSAyMzpMLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiAobm9kZVN0YXRlbWVudCBsaW5rIG5vZGUpICIsQVtELTJdLEFbRC0xXSxBW0RdLCIgdHlwZXN0cjogIixBW0QtMV0uZWRnZVR5cGVTdHIpO2xldCBDPUwuZWRnZVN0clRvRWRnZURhdGEoQVtELTFdLmVkZ2VUeXBlU3RyKTt0aGlzLiQ9W3tpZDpBW0QtMl0uaWQsbGFiZWw6QVtELTJdLmxhYmVsLHR5cGU6QVtELTJdLnR5cGUsZGlyZWN0aW9uczpBW0QtMl0uZGlyZWN0aW9uc30se2lkOkFbRC0yXS5pZCsiLSIrQVtEXS5pZCxzdGFydDpBW0QtMl0uaWQsZW5kOkFbRF0uaWQsbGFiZWw6QVtELTFdLmxhYmVsLHR5cGU6ImVkZ2UiLGRpcmVjdGlvbnM6QVtEXS5kaXJlY3Rpb25zLGFycm93VHlwZUVuZDpDLGFycm93VHlwZVN0YXJ0OiJhcnJvd19vcGVuIn0se2lkOkFbRF0uaWQsbGFiZWw6QVtEXS5sYWJlbCx0eXBlOkwudHlwZVN0cjJUeXBlKEFbRF0udHlwZVN0ciksZGlyZWN0aW9uczpBW0RdLmRpcmVjdGlvbnN9XTticmVhaztjYXNlIDI0OkwuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IG5vZGVTdGF0ZW1lbnQgKGFiYzg4IG5vZGUgc2l6ZSkgIixBW0QtMV0sQVtEXSksdGhpcy4kPXtpZDpBW0QtMV0uaWQsbGFiZWw6QVtELTFdLmxhYmVsLHR5cGU6TC50eXBlU3RyMlR5cGUoQVtELTFdLnR5cGVTdHIpLGRpcmVjdGlvbnM6QVtELTFdLmRpcmVjdGlvbnMsd2lkdGhJbkNvbHVtbnM6cGFyc2VJbnQoQVtEXSwxMCl9O2JyZWFrO2Nhc2UgMjU6TC5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogbm9kZVN0YXRlbWVudCAobm9kZSkgIixBW0RdKSx0aGlzLiQ9e2lkOkFbRF0uaWQsbGFiZWw6QVtEXS5sYWJlbCx0eXBlOkwudHlwZVN0cjJUeXBlKEFbRF0udHlwZVN0ciksZGlyZWN0aW9uczpBW0RdLmRpcmVjdGlvbnMsd2lkdGhJbkNvbHVtbnM6MX07YnJlYWs7Y2FzZSAyNjpMLmdldExvZ2dlcigpLmRlYnVnKCJBUEExMjMiLHRoaXM/dGhpczoibmEiKSxMLmdldExvZ2dlcigpLmRlYnVnKCJDT0xVTU5TOiAiLEFbRF0pLHRoaXMuJD17dHlwZToiY29sdW1uLXNldHRpbmciLGNvbHVtbnM6QVtEXT09PSJhdXRvIj8tMTpwYXJzZUludChBW0RdKX07YnJlYWs7Y2FzZSAyNzpMLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBpZC1ibG9jayBzdGF0ZW1lbnQgOiAiLEFbRC0yXSxBW0QtMV0pO2xldCBPPUwuZ2VuZXJhdGVJZCgpO3RoaXMuJD17Li4uQVtELTJdLHR5cGU6ImNvbXBvc2l0ZSIsY2hpbGRyZW46QVtELTFdfTticmVhaztjYXNlIDI4OkwuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IGJsb2NrU3RhdGVtZW50IDogIixBW0QtMl0sQVtELTFdLEFbRF0pO2xldCBOPUwuZ2VuZXJhdGVJZCgpO3RoaXMuJD17aWQ6Tix0eXBlOiJjb21wb3NpdGUiLGxhYmVsOiIiLGNoaWxkcmVuOkFbRC0xXX07YnJlYWs7Y2FzZSAyOTpMLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBub2RlIChOT0RFX0lEIHNlcGFyYXRvcik6ICIsQVtEXSksdGhpcy4kPXtpZDpBW0RdfTticmVhaztjYXNlIDMwOkwuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IG5vZGUgKE5PREVfSUQgbm9kZVNoYXBlTkxhYmVsIHNlcGFyYXRvcik6ICIsQVtELTFdLEFbRF0pLHRoaXMuJD17aWQ6QVtELTFdLGxhYmVsOkFbRF0ubGFiZWwsdHlwZVN0cjpBW0RdLnR5cGVTdHIsZGlyZWN0aW9uczpBW0RdLmRpcmVjdGlvbnN9O2JyZWFrO2Nhc2UgMzE6TC5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogZGlyTGlzdDogIixBW0RdKSx0aGlzLiQ9W0FbRF1dO2JyZWFrO2Nhc2UgMzI6TC5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogZGlyTGlzdDogIixBW0QtMV0sQVtEXSksdGhpcy4kPVtBW0QtMV1dLmNvbmNhdChBW0RdKTticmVhaztjYXNlIDMzOkwuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IG5vZGVTaGFwZU5MYWJlbDogIixBW0QtMl0sQVtELTFdLEFbRF0pLHRoaXMuJD17dHlwZVN0cjpBW0QtMl0rQVtEXSxsYWJlbDpBW0QtMV19O2JyZWFrO2Nhc2UgMzQ6TC5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogQkxPQ0tfQVJST1cgbm9kZVNoYXBlTkxhYmVsOiAiLEFbRC0zXSxBW0QtMl0sIiAjMzoiLEFbRC0xXSxBW0RdKSx0aGlzLiQ9e3R5cGVTdHI6QVtELTNdK0FbRF0sbGFiZWw6QVtELTJdLGRpcmVjdGlvbnM6QVtELTFdfTticmVhaztjYXNlIDM1OmNhc2UgMzY6dGhpcy4kPXt0eXBlOiJjbGFzc0RlZiIsaWQ6QVtELTFdLnRyaW0oKSxjc3M6QVtEXS50cmltKCl9O2JyZWFrO2Nhc2UgMzc6dGhpcy4kPXt0eXBlOiJhcHBseUNsYXNzIixpZDpBW0QtMV0udHJpbSgpLHN0eWxlQ2xhc3M6QVtEXS50cmltKCl9O2JyZWFrO2Nhc2UgMzg6dGhpcy4kPXt0eXBlOiJhcHBseVN0eWxlcyIsaWQ6QVtELTFdLnRyaW0oKSxzdHlsZXNTdHI6QVtEXS50cmltKCl9O2JyZWFrfX0sImFub255bW91cyIpLHRhYmxlOlt7OToxLDEwOlsxLDJdfSx7MTpbM119LHsxMTozLDEzOjQsMTk6NSwyMDo2LDIxOmUsMjI6OCwyMzo5LDI0OjEwLDI1OjExLDI2OjEyLDI4OnIsMjk6biwzMTppLDMyOmEsNDA6cyw0NDpsLDQ3OnV9LHs4OlsxLDIwXX0sdChoLFsyLDEyXSx7MTM6NCwxOTo1LDIwOjYsMjI6OCwyMzo5LDI0OjEwLDI1OjExLDI2OjEyLDExOjIxLDIxOmUsMjg6ciwyOTpuLDMxOmksMzI6YSw0MDpzLDQ0OmwsNDc6dX0pLHQoZixbMiwxNl0sezE0OjIyLDE1OmQsMTY6cH0pLHQoZixbMiwxN10pLHQoZixbMiwxOF0pLHQoZixbMiwxOV0pLHQoZixbMiwyMF0pLHQoZixbMiwyMV0pLHQoZixbMiwyMl0pLHQobSxbMiwyNV0sezI3OlsxLDI1XX0pLHQoZixbMiwyNl0pLHsxOToyNiwyNjoxMiwzMjphfSx7MTE6MjcsMTM6NCwxOTo1LDIwOjYsMjE6ZSwyMjo4LDIzOjksMjQ6MTAsMjU6MTEsMjY6MTIsMjg6ciwyOTpuLDMxOmksMzI6YSw0MDpzLDQ0OmwsNDc6dX0sezQxOlsxLDI4XSw0MzpbMSwyOV19LHs0NTpbMSwzMF19LHs0ODpbMSwzMV19LHQoZyxbMiwyOV0sezMzOjMyLDM2OlsxLDMzXSwzODpbMSwzNF19KSx7MTpbMiw3XX0sdChoLFsyLDEzXSksezI2OjM1LDMyOmF9LHszMjpbMiwxNF19LHsxNzpbMSwzNl19LHQobSxbMiwyNF0pLHsxMTozNywxMzo0LDE0OjIyLDE1OmQsMTY6cCwxOTo1LDIwOjYsMjE6ZSwyMjo4LDIzOjksMjQ6MTAsMjU6MTEsMjY6MTIsMjg6ciwyOTpuLDMxOmksMzI6YSw0MDpzLDQ0OmwsNDc6dX0sezMwOlsxLDM4XX0sezQyOlsxLDM5XX0sezQyOlsxLDQwXX0sezQ2OlsxLDQxXX0sezQ5OlsxLDQyXX0sdChnLFsyLDMwXSksezE4OlsxLDQzXX0sezE4OlsxLDQ0XX0sdChtLFsyLDIzXSksezE4OlsxLDQ1XX0sezMwOlsxLDQ2XX0sdChmLFsyLDI4XSksdChmLFsyLDM1XSksdChmLFsyLDM2XSksdChmLFsyLDM3XSksdChmLFsyLDM4XSksezM3OlsxLDQ3XX0sezM0OjQ4LDM1Onl9LHsxNTpbMSw1MF19LHQoZixbMiwyN10pLHQoZyxbMiwzM10pLHszOTpbMSw1MV19LHszNDo1MiwzNTp5LDM5OlsyLDMxXX0sezMyOlsyLDE1XX0sdChnLFsyLDM0XSksezM5OlsyLDMyXX1dLGRlZmF1bHRBY3Rpb25zOnsyMDpbMiw3XSwyMzpbMiwxNF0sNTA6WzIsMTVdLDUyOlsyLDMyXX0scGFyc2VFcnJvcjpvKGZ1bmN0aW9uKF8sVCl7aWYoVC5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKF8pO2Vsc2V7dmFyIEU9bmV3IEVycm9yKF8pO3Rocm93IEUuaGFzaD1ULEV9fSwicGFyc2VFcnJvciIpLHBhcnNlOm8oZnVuY3Rpb24oXyl7dmFyIFQ9dGhpcyxFPVswXSxMPVtdLFM9W251bGxdLEE9W10sST10aGlzLnRhYmxlLEQ9IiIsaz0wLFI9MCxDPTAsTz0yLE49MSxQPUEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksRj1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLEI9e3l5Ont9fTtmb3IodmFyIEcgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxHKSYmKEIueXlbR109dGhpcy55eVtHXSk7Ri5zZXRJbnB1dChfLEIueXkpLEIueXkubGV4ZXI9RixCLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBGLnl5bGxvYz4idSImJihGLnl5bGxvYz17fSk7dmFyIHo9Ri55eWxsb2M7QS5wdXNoKHopO3ZhciBXPUYub3B0aW9ucyYmRi5vcHRpb25zLnJhbmdlczt0eXBlb2YgQi55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1CLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIFooc2Upe0UubGVuZ3RoPUUubGVuZ3RoLTIqc2UsUy5sZW5ndGg9Uy5sZW5ndGgtc2UsQS5sZW5ndGg9QS5sZW5ndGgtc2V9byhaLCJwb3BTdGFjayIpO2Z1bmN0aW9uIGooKXt2YXIgc2U7cmV0dXJuIHNlPUwucG9wKCl8fEYubGV4KCl8fE4sdHlwZW9mIHNlIT0ibnVtYmVyIiYmKHNlIGluc3RhbmNlb2YgQXJyYXkmJihMPXNlLHNlPUwucG9wKCkpLHNlPVQuc3ltYm9sc19bc2VdfHxzZSksc2V9byhqLCJsZXgiKTtmb3IodmFyIG9lLEssZWUsSixILHEsUT17fSxhZSx1ZSxjZSx0ZTs7KXtpZihlZT1FW0UubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbZWVdP0o9dGhpcy5kZWZhdWx0QWN0aW9uc1tlZV06KChvZT09PW51bGx8fHR5cGVvZiBvZT4idSIpJiYob2U9aigpKSxKPUlbZWVdJiZJW2VlXVtvZV0pLHR5cGVvZiBKPiJ1Inx8IUoubGVuZ3RofHwhSlswXSl7dmFyIE5lPSIiO3RlPVtdO2ZvcihhZSBpbiBJW2VlXSl0aGlzLnRlcm1pbmFsc19bYWVdJiZhZT5PJiZ0ZS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bYWVdKyInIik7Ri5zaG93UG9zaXRpb24/TmU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoaysxKStgOgpgK0Yuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCt0ZS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW29lXXx8b2UpKyInIjpOZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhrKzEpKyI6IFVuZXhwZWN0ZWQgIisob2U9PU4/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bb2VdfHxvZSkrIiciKSx0aGlzLnBhcnNlRXJyb3IoTmUse3RleHQ6Ri5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bb2VdfHxvZSxsaW5lOkYueXlsaW5lbm8sbG9jOnosZXhwZWN0ZWQ6dGV9KX1pZihKWzBdaW5zdGFuY2VvZiBBcnJheSYmSi5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2VlKyIsIHRva2VuOiAiK29lKTtzd2l0Y2goSlswXSl7Y2FzZSAxOkUucHVzaChvZSksUy5wdXNoKEYueXl0ZXh0KSxBLnB1c2goRi55eWxsb2MpLEUucHVzaChKWzFdKSxvZT1udWxsLEs/KG9lPUssSz1udWxsKTooUj1GLnl5bGVuZyxEPUYueXl0ZXh0LGs9Ri55eWxpbmVubyx6PUYueXlsbG9jLEM+MCYmQy0tKTticmVhaztjYXNlIDI6aWYodWU9dGhpcy5wcm9kdWN0aW9uc19bSlsxXV1bMV0sUS4kPVNbUy5sZW5ndGgtdWVdLFEuXyQ9e2ZpcnN0X2xpbmU6QVtBLmxlbmd0aC0odWV8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpBW0EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46QVtBLmxlbmd0aC0odWV8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46QVtBLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sVyYmKFEuXyQucmFuZ2U9W0FbQS5sZW5ndGgtKHVlfHwxKV0ucmFuZ2VbMF0sQVtBLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHE9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KFEsW0QsUixrLEIueXksSlsxXSxTLEFdLmNvbmNhdChQKSksdHlwZW9mIHE8InUiKXJldHVybiBxO3VlJiYoRT1FLnNsaWNlKDAsLTEqdWUqMiksUz1TLnNsaWNlKDAsLTEqdWUpLEE9QS5zbGljZSgwLC0xKnVlKSksRS5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW0pbMV1dWzBdKSxTLnB1c2goUS4kKSxBLnB1c2goUS5fJCksY2U9SVtFW0UubGVuZ3RoLTJdXVtFW0UubGVuZ3RoLTFdXSxFLnB1c2goY2UpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9LCJwYXJzZSIpfSx4PWZ1bmN0aW9uKCl7dmFyIHc9e0VPRjoxLHBhcnNlRXJyb3I6byhmdW5jdGlvbihULEUpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoVCxFKTtlbHNlIHRocm93IG5ldyBFcnJvcihUKX0sInBhcnNlRXJyb3IiKSxzZXRJbnB1dDpvKGZ1bmN0aW9uKF8sVCl7cmV0dXJuIHRoaXMueXk9VHx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9Xyx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30sInNldElucHV0IiksaW5wdXQ6byhmdW5jdGlvbigpe3ZhciBfPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1fLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1fLHRoaXMubWF0Y2hlZCs9Xzt2YXIgVD1fLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gVD8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksX30sImlucHV0IiksdW5wdXQ6byhmdW5jdGlvbihfKXt2YXIgVD1fLmxlbmd0aCxFPV8uc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1fK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1UKSx0aGlzLm9mZnNldC09VDt2YXIgTD10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxFLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09RS5sZW5ndGgtMSk7dmFyIFM9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOkU/KEUubGVuZ3RoPT09TC5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK0xbTC5sZW5ndGgtRS5sZW5ndGhdLmxlbmd0aC1FWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tVH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtTWzBdLFNbMF0rdGhpcy55eWxlbmctVF0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSwidW5wdXQiKSxtb3JlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSwibW9yZSIpLHJlamVjdDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSwicmVqZWN0IiksbGVzczpvKGZ1bmN0aW9uKF8pe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShfKSl9LCJsZXNzIikscGFzdElucHV0Om8oZnVuY3Rpb24oKXt2YXIgXz10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKF8ubGVuZ3RoPjIwPyIuLi4iOiIiKStfLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSwicGFzdElucHV0IiksdXBjb21pbmdJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIF89dGhpcy5tYXRjaDtyZXR1cm4gXy5sZW5ndGg8MjAmJihfKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1fLmxlbmd0aCkpLChfLnN1YnN0cigwLDIwKSsoXy5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sInVwY29taW5nSW5wdXQiKSxzaG93UG9zaXRpb246byhmdW5jdGlvbigpe3ZhciBfPXRoaXMucGFzdElucHV0KCksVD1uZXcgQXJyYXkoXy5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBfK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtUKyJeIn0sInNob3dQb3NpdGlvbiIpLHRlc3RfbWF0Y2g6byhmdW5jdGlvbihfLFQpe3ZhciBFLEwsUztpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoUz17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihTLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLEw9X1swXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksTCYmKHRoaXMueXlsaW5lbm8rPUwubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46TD9MW0wubGVuZ3RoLTFdLmxlbmd0aC1MW0wubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rX1swXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1fWzBdLHRoaXMubWF0Y2grPV9bMF0sdGhpcy5tYXRjaGVzPV8sdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoX1swXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9X1swXSxFPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLFQsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksRSlyZXR1cm4gRTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgQSBpbiBTKXRoaXNbQV09U1tBXTtyZXR1cm4hMX1yZXR1cm4hMX0sInRlc3RfbWF0Y2giKSxuZXh0Om8oZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgXyxULEUsTDt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBTPXRoaXMuX2N1cnJlbnRSdWxlcygpLEE9MDtBPFMubGVuZ3RoO0ErKylpZihFPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbU1tBXV0pLEUmJighVHx8RVswXS5sZW5ndGg+VFswXS5sZW5ndGgpKXtpZihUPUUsTD1BLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKF89dGhpcy50ZXN0X21hdGNoKEUsU1tBXSksXyE9PSExKXJldHVybiBfO2lmKHRoaXMuX2JhY2t0cmFjayl7VD0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBUPyhfPXRoaXMudGVzdF9tYXRjaChULFNbTF0pLF8hPT0hMT9fOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSwibmV4dCIpLGxleDpvKGZ1bmN0aW9uKCl7dmFyIFQ9dGhpcy5uZXh0KCk7cmV0dXJuIFR8fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKFQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChUKX0sImJlZ2luIikscG9wU3RhdGU6byhmdW5jdGlvbigpe3ZhciBUPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIFQ+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LCJwb3BTdGF0ZSIpLF9jdXJyZW50UnVsZXM6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LCJfY3VycmVudFJ1bGVzIiksdG9wU3RhdGU6byhmdW5jdGlvbihUKXtyZXR1cm4gVD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKFR8fDApLFQ+PTA/dGhpcy5jb25kaXRpb25TdGFja1tUXToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKFQpe3RoaXMuYmVnaW4oVCl9LCJwdXNoU3RhdGUiKSxzdGF0ZVN0YWNrU2l6ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSwic3RhdGVTdGFja1NpemUiKSxvcHRpb25zOnt9LHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihULEUsTCxTKXt2YXIgQT1TO3N3aXRjaChMKXtjYXNlIDA6cmV0dXJuIDEwO2Nhc2UgMTpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiRm91bmQgc3BhY2UtYmxvY2siKSwzMTticmVhaztjYXNlIDI6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkZvdW5kIG5sLWJsb2NrIiksMzE7YnJlYWs7Y2FzZSAzOnJldHVybiBULmdldExvZ2dlcigpLmRlYnVnKCJGb3VuZCBzcGFjZS1ibG9jayIpLDI5O2JyZWFrO2Nhc2UgNDpULmdldExvZ2dlcigpLmRlYnVnKCIuIixFLnl5dGV4dCk7YnJlYWs7Y2FzZSA1OlQuZ2V0TG9nZ2VyKCkuZGVidWcoIl8iLEUueXl0ZXh0KTticmVhaztjYXNlIDY6cmV0dXJuIDU7Y2FzZSA3OnJldHVybiBFLnl5dGV4dD0tMSwyODticmVhaztjYXNlIDg6cmV0dXJuIEUueXl0ZXh0PUUueXl0ZXh0LnJlcGxhY2UoL2NvbHVtbnNccysvLCIiKSxULmdldExvZ2dlcigpLmRlYnVnKCJDT0xVTU5TIChMRVgpIixFLnl5dGV4dCksMjg7YnJlYWs7Y2FzZSA5OnRoaXMucHVzaFN0YXRlKCJtZF9zdHJpbmciKTticmVhaztjYXNlIDEwOnJldHVybiJNRF9TVFIiO2Nhc2UgMTE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTI6dGhpcy5wdXNoU3RhdGUoInN0cmluZyIpO2JyZWFrO2Nhc2UgMTM6VC5nZXRMb2dnZXIoKS5kZWJ1ZygiTEVYOiBQT1BQSU5HIFNUUjoiLEUueXl0ZXh0KSx0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNDpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTEVYOiBTVFIgZW5kOiIsRS55eXRleHQpLCJTVFIiO2JyZWFrO2Nhc2UgMTU6cmV0dXJuIEUueXl0ZXh0PUUueXl0ZXh0LnJlcGxhY2UoL3NwYWNlXDovLCIiKSxULmdldExvZ2dlcigpLmRlYnVnKCJTUEFDRSBOVU0gKExFWCkiLEUueXl0ZXh0KSwyMTticmVhaztjYXNlIDE2OnJldHVybiBFLnl5dGV4dD0iMSIsVC5nZXRMb2dnZXIoKS5kZWJ1ZygiQ09MVU1OUyAoTEVYKSIsRS55eXRleHQpLDIxO2JyZWFrO2Nhc2UgMTc6cmV0dXJuIDQzO2Nhc2UgMTg6cmV0dXJuIkxJTktTVFlMRSI7Y2FzZSAxOTpyZXR1cm4iSU5URVJQT0xBVEUiO2Nhc2UgMjA6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJDTEFTU0RFRiIpLDQwO2JyZWFrO2Nhc2UgMjE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiQ0xBU1NERUZJRCIpLCJERUZBVUxUX0NMQVNTREVGX0lEIjticmVhaztjYXNlIDIyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkNMQVNTREVGSUQiKSw0MTticmVhaztjYXNlIDIzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNDI7YnJlYWs7Y2FzZSAyNDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIkNMQVNTIiksNDQ7YnJlYWs7Y2FzZSAyNTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJDTEFTU19TVFlMRSIpLDQ1O2JyZWFrO2Nhc2UgMjY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0NjticmVhaztjYXNlIDI3OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiU1RZTEVfU1RNTlQiKSw0NzticmVhaztjYXNlIDI4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIlNUWUxFX0RFRklOSVRJT04iKSw0ODticmVhaztjYXNlIDI5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNDk7YnJlYWs7Y2FzZSAzMDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImFjY190aXRsZSIpLCJhY2NfdGl0bGUiO2JyZWFrO2Nhc2UgMzE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjticmVhaztjYXNlIDMyOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiYWNjX2Rlc2NyIiksImFjY19kZXNjciI7YnJlYWs7Y2FzZSAzMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2JyZWFrO2Nhc2UgMzQ6dGhpcy5wdXNoU3RhdGUoImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDM1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDM2OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDM3OnJldHVybiAzMDtjYXNlIDM4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiAoKCIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgMzk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA0MDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogKSkiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDQxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiAoKCIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgNDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA0MzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogKC0iKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDQ0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiAtKSIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgNDU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA0NjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogXV0iKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDQ3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiAoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA0ODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogXSkiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDQ5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiAvXSIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgNTA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IC9dIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA1MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogKV0iKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDUyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiApIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA1MzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogXT4iKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDU0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBdIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA1NTpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YTogLSkiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNTY6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6ICgtIiksdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjticmVhaztjYXNlIDU3OnJldHVybiBULmdldExvZ2dlcigpLmRlYnVnKCJMZXhhOiApKSIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA1ODpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YTogKSIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA1OTpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiAoKCgiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNjA6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6ICkiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNjE6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6ICkiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNjI6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6ICkiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNjM6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGM6ID4iKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNjQ6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6IChbIiksdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjticmVhaztjYXNlIDY1OnJldHVybiBULmdldExvZ2dlcigpLmRlYnVnKCJMZXhhOiApIiksdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjticmVhaztjYXNlIDY2OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNjc6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA2ODpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjticmVhaztjYXNlIDY5OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNzA6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA3MTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjticmVhaztjYXNlIDcyOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNzM6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6IFsiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNzQ6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJCTE9DS19BUlJPVyIpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxFWCBBUlIgU1RBUlQiKSwzODticmVhaztjYXNlIDc1OnJldHVybiBULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IE5PREVfSUQiLEUueXl0ZXh0KSwzMjticmVhaztjYXNlIDc2OnJldHVybiBULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IEVPRiIsRS55eXRleHQpLDg7YnJlYWs7Y2FzZSA3Nzp0aGlzLnB1c2hTdGF0ZSgibWRfc3RyaW5nIik7YnJlYWs7Y2FzZSA3ODp0aGlzLnB1c2hTdGF0ZSgibWRfc3RyaW5nIik7YnJlYWs7Y2FzZSA3OTpyZXR1cm4iTk9ERV9ERVNDUiI7Y2FzZSA4MDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA4MTpULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IFN0YXJ0aW5nIHN0cmluZyIpLHRoaXMucHVzaFN0YXRlKCJzdHJpbmciKTticmVhaztjYXNlIDgyOlQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxFWCBBUlI6IFN0YXJ0aW5nIHN0cmluZyIpLHRoaXMucHVzaFN0YXRlKCJzdHJpbmciKTticmVhaztjYXNlIDgzOnJldHVybiBULmdldExvZ2dlcigpLmRlYnVnKCJMRVg6IE5PREVfREVTQ1I6IixFLnl5dGV4dCksIk5PREVfREVTQ1IiO2JyZWFrO2Nhc2UgODQ6VC5nZXRMb2dnZXIoKS5kZWJ1ZygiTEVYIFBPUFBJTkciKSx0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA4NTpULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ID0+QkFFIiksdGhpcy5wdXNoU3RhdGUoIkFSUk9XX0RJUiIpO2JyZWFrO2Nhc2UgODY6cmV0dXJuIEUueXl0ZXh0PUUueXl0ZXh0LnJlcGxhY2UoL14sXHMqLywiIiksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4IChyaWdodCk6IGRpcjoiLEUueXl0ZXh0KSwiRElSIjticmVhaztjYXNlIDg3OnJldHVybiBFLnl5dGV4dD1FLnl5dGV4dC5yZXBsYWNlKC9eLFxzKi8sIiIpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleCAobGVmdCk6IixFLnl5dGV4dCksIkRJUiI7YnJlYWs7Y2FzZSA4ODpyZXR1cm4gRS55eXRleHQ9RS55eXRleHQucmVwbGFjZSgvXixccyovLCIiKSxULmdldExvZ2dlcigpLmRlYnVnKCJMZXggKHgpOiIsRS55eXRleHQpLCJESVIiO2JyZWFrO2Nhc2UgODk6cmV0dXJuIEUueXl0ZXh0PUUueXl0ZXh0LnJlcGxhY2UoL14sXHMqLywiIiksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4ICh5KToiLEUueXl0ZXh0KSwiRElSIjticmVhaztjYXNlIDkwOnJldHVybiBFLnl5dGV4dD1FLnl5dGV4dC5yZXBsYWNlKC9eLFxzKi8sIiIpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleCAodXApOiIsRS55eXRleHQpLCJESVIiO2JyZWFrO2Nhc2UgOTE6cmV0dXJuIEUueXl0ZXh0PUUueXl0ZXh0LnJlcGxhY2UoL14sXHMqLywiIiksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4IChkb3duKToiLEUueXl0ZXh0KSwiRElSIjticmVhaztjYXNlIDkyOnJldHVybiBFLnl5dGV4dD0iXT4iLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleCAoQVJST1dfRElSIGVuZCk6IixFLnl5dGV4dCksdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSwiQkxPQ0tfQVJST1dfRU5EIjticmVhaztjYXNlIDkzOnJldHVybiBULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IExJTksiLCIjIitFLnl5dGV4dCsiIyIpLDE1O2JyZWFrO2Nhc2UgOTQ6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogTElOSyIsRS55eXRleHQpLDE1O2JyZWFrO2Nhc2UgOTU6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogTElOSyIsRS55eXRleHQpLDE1O2JyZWFrO2Nhc2UgOTY6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogTElOSyIsRS55eXRleHQpLDE1O2JyZWFrO2Nhc2UgOTc6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogU1RBUlRfTElOSyIsRS55eXRleHQpLHRoaXMucHVzaFN0YXRlKCJMTEFCRUwiKSwxNjticmVhaztjYXNlIDk4OnJldHVybiBULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IFNUQVJUX0xJTksiLEUueXl0ZXh0KSx0aGlzLnB1c2hTdGF0ZSgiTExBQkVMIiksMTY7YnJlYWs7Y2FzZSA5OTpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBTVEFSVF9MSU5LIixFLnl5dGV4dCksdGhpcy5wdXNoU3RhdGUoIkxMQUJFTCIpLDE2O2JyZWFrO2Nhc2UgMTAwOnRoaXMucHVzaFN0YXRlKCJtZF9zdHJpbmciKTticmVhaztjYXNlIDEwMTpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBTdGFydGluZyBzdHJpbmciKSx0aGlzLnB1c2hTdGF0ZSgic3RyaW5nIiksIkxJTktfTEFCRUwiO2JyZWFrO2Nhc2UgMTAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBMSU5LIiwiIyIrRS55eXRleHQrIiMiKSwxNTticmVhaztjYXNlIDEwMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogTElOSyIsRS55eXRleHQpLDE1O2JyZWFrO2Nhc2UgMTA0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBMSU5LIixFLnl5dGV4dCksMTU7YnJlYWs7Y2FzZSAxMDU6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogQ09MT04iLEUueXl0ZXh0KSxFLnl5dGV4dD1FLnl5dGV4dC5zbGljZSgxKSwyNzticmVha319LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzpibG9jay1iZXRhXGIpLywvXig/OmJsb2NrXHMrKS8sL14oPzpibG9ja1xuKykvLC9eKD86YmxvY2s6KS8sL14oPzpbXHNdKykvLC9eKD86W1xuXSspLywvXig/OigoXHUwMDBEXHUwMDBBKXwoXHUwMDBBKSkpLywvXig/OmNvbHVtbnNccythdXRvXGIpLywvXig/OmNvbHVtbnNccytbXGRdKykvLC9eKD86WyJdW2BdKS8sL14oPzpbXmAiXSspLywvXig/OltgXVsiXSkvLC9eKD86WyJdKS8sL14oPzpbIl0pLywvXig/OlteIl0qKS8sL14oPzpzcGFjZVs6XVxkKykvLC9eKD86c3BhY2VcYikvLC9eKD86ZGVmYXVsdFxiKS8sL14oPzpsaW5rU3R5bGVcYikvLC9eKD86aW50ZXJwb2xhdGVcYikvLC9eKD86Y2xhc3NEZWZccyspLywvXig/OkRFRkFVTFRccyspLywvXig/Olx3K1xzKykvLC9eKD86W15cbl0qKS8sL14oPzpjbGFzc1xzKykvLC9eKD86KFx3KykrKCgsXHMqXHcrKSopKS8sL14oPzpbXlxuXSopLywvXig/OnN0eWxlXHMrKS8sL14oPzooXHcrKSsoKCxccypcdyspKikpLywvXig/OlteXG5dKikvLC9eKD86YWNjVGl0bGVccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKlx7XHMqKS8sL14oPzpbXH1dKS8sL14oPzpbXlx9XSopLywvXig/OmVuZFxiXHMqKS8sL14oPzpcKFwoXCgpLywvXig/OlwpXClcKSkvLC9eKD86W1wpXVwpKS8sL14oPzpcfVx9KS8sL14oPzpcfSkvLC9eKD86XCgtKS8sL14oPzotXCkpLywvXig/OlwoXCgpLywvXig/OlxdXF0pLywvXig/OlwoKS8sL14oPzpcXVwpKS8sL14oPzpcXFxdKS8sL14oPzpcL1xdKS8sL14oPzpcKVxdKS8sL14oPzpbXCldKS8sL14oPzpcXT4pLywvXig/OltcXV0pLywvXig/Oi1cKSkvLC9eKD86XCgtKS8sL14oPzpcKVwpKS8sL14oPzpcKSkvLC9eKD86XChcKFwoKS8sL14oPzpcKFwoKS8sL14oPzpce1x7KS8sL14oPzpceykvLC9eKD86PikvLC9eKD86XChcWykvLC9eKD86XCgpLywvXig/OlxbXFspLywvXig/OlxbXHwpLywvXig/OlxbXCgpLywvXig/OlwpXClcKSkvLC9eKD86XFtcXCkvLC9eKD86XFtcLykvLC9eKD86XFtcXCkvLC9eKD86XFspLywvXig/OjxcWykvLC9eKD86W15cKFxbXG5cLVwpXHtcfVxzXDxcPjpdKykvLC9eKD86JCkvLC9eKD86WyJdW2BdKS8sL14oPzpbIl1bYF0pLywvXig/OlteYCJdKykvLC9eKD86W2BdWyJdKS8sL14oPzpbIl0pLywvXig/OlsiXSkvLC9eKD86W14iXSspLywvXig/OlsiXSkvLC9eKD86XF0+XHMqXCgpLywvXig/Oiw/XHMqcmlnaHRccyopLywvXig/Oiw/XHMqbGVmdFxzKikvLC9eKD86LD9ccyp4XHMqKS8sL14oPzosP1xzKnlccyopLywvXig/Oiw/XHMqdXBccyopLywvXig/Oiw/XHMqZG93blxzKikvLC9eKD86XClccyopLywvXig/OlxzKlt4bzxdPy0tK1steG8+XVxzKikvLC9eKD86XHMqW3hvPF0/PT0rWz14bz5dXHMqKS8sL14oPzpccypbeG88XT8tP1wuKy1beG8+XT9ccyopLywvXig/OlxzKn5+W1x+XStccyopLywvXig/OlxzKlt4bzxdPy0tXHMqKS8sL14oPzpccypbeG88XT89PVxzKikvLC9eKD86XHMqW3hvPF0/LVwuXHMqKS8sL14oPzpbIl1bYF0pLywvXig/OlsiXSkvLC9eKD86XHMqW3hvPF0/LS0rWy14bz5dXHMqKS8sL14oPzpccypbeG88XT89PStbPXhvPl1ccyopLywvXig/OlxzKlt4bzxdPy0/XC4rLVt4bz5dP1xzKikvLC9eKD86OlxkKykvXSxjb25kaXRpb25zOntTVFlMRV9ERUZJTklUSU9OOntydWxlczpbMjldLGluY2x1c2l2ZTohMX0sU1RZTEVfU1RNTlQ6e3J1bGVzOlsyOF0saW5jbHVzaXZlOiExfSxDTEFTU0RFRklEOntydWxlczpbMjNdLGluY2x1c2l2ZTohMX0sQ0xBU1NERUY6e3J1bGVzOlsyMSwyMl0saW5jbHVzaXZlOiExfSxDTEFTU19TVFlMRTp7cnVsZXM6WzI2XSxpbmNsdXNpdmU6ITF9LENMQVNTOntydWxlczpbMjVdLGluY2x1c2l2ZTohMX0sTExBQkVMOntydWxlczpbMTAwLDEwMSwxMDIsMTAzLDEwNF0saW5jbHVzaXZlOiExfSxBUlJPV19ESVI6e3J1bGVzOls4Niw4Nyw4OCw4OSw5MCw5MSw5Ml0saW5jbHVzaXZlOiExfSxCTE9DS19BUlJPVzp7cnVsZXM6Wzc3LDgyLDg1XSxpbmNsdXNpdmU6ITF9LE5PREU6e3J1bGVzOlszOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw3OCw4MV0saW5jbHVzaXZlOiExfSxtZF9zdHJpbmc6e3J1bGVzOlsxMCwxMSw3OSw4MF0saW5jbHVzaXZlOiExfSxzcGFjZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlsxMywxNCw4Myw4NF0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMzUsMzZdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbMzNdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbMzFdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDYsNyw4LDksMTIsMTUsMTYsMTcsMTgsMTksMjAsMjQsMjcsMzAsMzIsMzQsMzcsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTA1XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIHd9KCk7di5sZXhlcj14O2Z1bmN0aW9uIGIoKXt0aGlzLnl5PXt9fXJldHVybiBvKGIsIlBhcnNlciIpLGIucHJvdG90eXBlPXYsdi5QYXJzZXI9YixuZXcgYn0oKTtRQi5wYXJzZXI9UUI7V3llPVFCfSk7ZnVuY3Rpb24gQ3J0KHQpe3N3aXRjaChZLmRlYnVnKCJ0eXBlU3RyMlR5cGUiLHQpLHQpe2Nhc2UiW10iOnJldHVybiJzcXVhcmUiO2Nhc2UiKCkiOnJldHVybiBZLmRlYnVnKCJ3ZSBoYXZlIGEgcm91bmQiKSwicm91bmQiO2Nhc2UiKCgpKSI6cmV0dXJuImNpcmNsZSI7Y2FzZSI+XSI6cmV0dXJuInJlY3RfbGVmdF9pbnZfYXJyb3ciO2Nhc2Uie30iOnJldHVybiJkaWFtb25kIjtjYXNlInt7fX0iOnJldHVybiJoZXhhZ29uIjtjYXNlIihbXSkiOnJldHVybiJzdGFkaXVtIjtjYXNlIltbXV0iOnJldHVybiJzdWJyb3V0aW5lIjtjYXNlIlsoKV0iOnJldHVybiJjeWxpbmRlciI7Y2FzZSIoKCgpKSkiOnJldHVybiJkb3VibGVjaXJjbGUiO2Nhc2UiWy8vXSI6cmV0dXJuImxlYW5fcmlnaHQiO2Nhc2UiW1xcXFxdIjpyZXR1cm4ibGVhbl9sZWZ0IjtjYXNlIlsvXFxdIjpyZXR1cm4idHJhcGV6b2lkIjtjYXNlIltcXC9dIjpyZXR1cm4iaW52X3RyYXBlem9pZCI7Y2FzZSI8W10+IjpyZXR1cm4iYmxvY2tfYXJyb3ciO2RlZmF1bHQ6cmV0dXJuIm5hIn19ZnVuY3Rpb24gQXJ0KHQpe3N3aXRjaChZLmRlYnVnKCJ0eXBlU3RyMlR5cGUiLHQpLHQpe2Nhc2UiPT0iOnJldHVybiJ0aGljayI7ZGVmYXVsdDpyZXR1cm4ibm9ybWFsIn19ZnVuY3Rpb24gX3J0KHQpe3N3aXRjaCh0LnRyaW0oKSl7Y2FzZSItLXgiOnJldHVybiJhcnJvd19jcm9zcyI7Y2FzZSItLW8iOnJldHVybiJhcnJvd19jaXJjbGUiO2RlZmF1bHQ6cmV0dXJuImFycm93X3BvaW50In19dmFyIEpsLEpCLFpCLHF5ZSxYeWUseHJ0LEt5ZSxicnQsbFMsd3J0LFRydCxrcnQsRXJ0LFF5ZSxlRixMYixTcnQsanllLExydCxEcnQsTnJ0LFJydCxNcnQsSXJ0LE9ydCxQcnQsQnJ0LEZydCx6cnQsWnllLEp5ZT1NKCgpPT57InVzZSBzdHJpY3QiO0FMKCk7WmEoKTtWdCgpO3V0KCk7ZnIoKTtBaSgpO0psPW5ldyBNYXAsSkI9W10sWkI9bmV3IE1hcCxxeWU9ImNvbG9yIixYeWU9ImZpbGwiLHhydD0iYmdGaWxsIixLeWU9IiwiLGJydD1wZSgpLGxTPW5ldyBNYXAsd3J0PW8odD0+cWUuc2FuaXRpemVUZXh0KHQsYnJ0KSwic2FuaXRpemVUZXh0IiksVHJ0PW8oZnVuY3Rpb24odCxlPSIiKXtsZXQgcj1sUy5nZXQodCk7cnx8KHI9e2lkOnQsc3R5bGVzOltdLHRleHRTdHlsZXM6W119LGxTLnNldCh0LHIpKSxlPy5zcGxpdChLeWUpLmZvckVhY2gobj0+e2xldCBpPW4ucmVwbGFjZSgvKFteO10qKTsvLCIkMSIpLnRyaW0oKTtpZihSZWdFeHAocXllKS5leGVjKG4pKXtsZXQgcz1pLnJlcGxhY2UoWHllLHhydCkucmVwbGFjZShxeWUsWHllKTtyLnRleHRTdHlsZXMucHVzaChzKX1yLnN0eWxlcy5wdXNoKGkpfSl9LCJhZGRTdHlsZUNsYXNzIiksa3J0PW8oZnVuY3Rpb24odCxlPSIiKXtsZXQgcj1KbC5nZXQodCk7ZSE9bnVsbCYmKHIuc3R5bGVzPWUuc3BsaXQoS3llKSl9LCJhZGRTdHlsZTJOb2RlIiksRXJ0PW8oZnVuY3Rpb24odCxlKXt0LnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihyKXtsZXQgbj1KbC5nZXQocik7aWYobj09PXZvaWQgMCl7bGV0IGk9ci50cmltKCk7bj17aWQ6aSx0eXBlOiJuYSIsY2hpbGRyZW46W119LEpsLnNldChpLG4pfW4uY2xhc3Nlc3x8KG4uY2xhc3Nlcz1bXSksbi5jbGFzc2VzLnB1c2goZSl9KX0sInNldENzc0NsYXNzIiksUXllPW8oKHQsZSk9PntsZXQgcj10LmZsYXQoKSxuPVtdO2ZvcihsZXQgaSBvZiByKXtpZihpLmxhYmVsJiYoaS5sYWJlbD13cnQoaS5sYWJlbCkpLGkudHlwZT09PSJjbGFzc0RlZiIpe1RydChpLmlkLGkuY3NzKTtjb250aW51ZX1pZihpLnR5cGU9PT0iYXBwbHlDbGFzcyIpe0VydChpLmlkLGk/LnN0eWxlQ2xhc3M/PyIiKTtjb250aW51ZX1pZihpLnR5cGU9PT0iYXBwbHlTdHlsZXMiKXtpPy5zdHlsZXNTdHImJmtydChpLmlkLGk/LnN0eWxlc1N0cik7Y29udGludWV9aWYoaS50eXBlPT09ImNvbHVtbi1zZXR0aW5nIillLmNvbHVtbnM9aS5jb2x1bW5zPz8tMTtlbHNlIGlmKGkudHlwZT09PSJlZGdlIil7bGV0IGE9KFpCLmdldChpLmlkKT8/MCkrMTtaQi5zZXQoaS5pZCxhKSxpLmlkPWErIi0iK2kuaWQsSkIucHVzaChpKX1lbHNle2kubGFiZWx8fChpLnR5cGU9PT0iY29tcG9zaXRlIj9pLmxhYmVsPSIiOmkubGFiZWw9aS5pZCk7bGV0IGE9SmwuZ2V0KGkuaWQpO2lmKGE9PT12b2lkIDA/Smwuc2V0KGkuaWQsaSk6KGkudHlwZSE9PSJuYSImJihhLnR5cGU9aS50eXBlKSxpLmxhYmVsIT09aS5pZCYmKGEubGFiZWw9aS5sYWJlbCkpLGkuY2hpbGRyZW4mJlF5ZShpLmNoaWxkcmVuLGkpLGkudHlwZT09PSJzcGFjZSIpe2xldCBzPWkud2lkdGg/PzE7Zm9yKGxldCBsPTA7bDxzO2wrKyl7bGV0IHU9cm4oaSk7dS5pZD11LmlkKyItIitsLEpsLnNldCh1LmlkLHUpLG4ucHVzaCh1KX19ZWxzZSBhPT09dm9pZCAwJiZuLnB1c2goaSl9fWUuY2hpbGRyZW49bn0sInBvcHVsYXRlQmxvY2tEYXRhYmFzZSIpLGVGPVtdLExiPXtpZDoicm9vdCIsdHlwZToiY29tcG9zaXRlIixjaGlsZHJlbjpbXSxjb2x1bW5zOi0xfSxTcnQ9bygoKT0+e1kuZGVidWcoIkNsZWFyIGNhbGxlZCIpLExyKCksTGI9e2lkOiJyb290Iix0eXBlOiJjb21wb3NpdGUiLGNoaWxkcmVuOltdLGNvbHVtbnM6LTF9LEpsPW5ldyBNYXAoW1sicm9vdCIsTGJdXSksZUY9W10sbFM9bmV3IE1hcCxKQj1bXSxaQj1uZXcgTWFwfSwiY2xlYXIiKTtvKENydCwidHlwZVN0cjJUeXBlIik7byhBcnQsImVkZ2VUeXBlU3RyMlR5cGUiKTtvKF9ydCwiZWRnZVN0clRvRWRnZURhdGEiKTtqeWU9MCxMcnQ9bygoKT0+KGp5ZSsrLCJpZC0iK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDEyKSsiLSIranllKSwiZ2VuZXJhdGVJZCIpLERydD1vKHQ9PntMYi5jaGlsZHJlbj10LFF5ZSh0LExiKSxlRj1MYi5jaGlsZHJlbn0sInNldEhpZXJhcmNoeSIpLE5ydD1vKHQ9PntsZXQgZT1KbC5nZXQodCk7cmV0dXJuIGU/ZS5jb2x1bW5zP2UuY29sdW1uczplLmNoaWxkcmVuP2UuY2hpbGRyZW4ubGVuZ3RoOi0xOi0xfSwiZ2V0Q29sdW1ucyIpLFJydD1vKCgpPT5bLi4uSmwudmFsdWVzKCldLCJnZXRCbG9ja3NGbGF0IiksTXJ0PW8oKCk9PmVGfHxbXSwiZ2V0QmxvY2tzIiksSXJ0PW8oKCk9PkpCLCJnZXRFZGdlcyIpLE9ydD1vKHQ9PkpsLmdldCh0KSwiZ2V0QmxvY2siKSxQcnQ9byh0PT57Smwuc2V0KHQuaWQsdCl9LCJzZXRCbG9jayIpLEJydD1vKCgpPT5jb25zb2xlLCJnZXRMb2dnZXIiKSxGcnQ9byhmdW5jdGlvbigpe3JldHVybiBsU30sImdldENsYXNzZXMiKSx6cnQ9e2dldENvbmZpZzpvKCgpPT5DcigpLmJsb2NrLCJnZXRDb25maWciKSx0eXBlU3RyMlR5cGU6Q3J0LGVkZ2VUeXBlU3RyMlR5cGU6QXJ0LGVkZ2VTdHJUb0VkZ2VEYXRhOl9ydCxnZXRMb2dnZXI6QnJ0LGdldEJsb2Nrc0ZsYXQ6UnJ0LGdldEJsb2NrczpNcnQsZ2V0RWRnZXM6SXJ0LHNldEhpZXJhcmNoeTpEcnQsZ2V0QmxvY2s6T3J0LHNldEJsb2NrOlBydCxnZXRDb2x1bW5zOk5ydCxnZXRDbGFzc2VzOkZydCxjbGVhcjpTcnQsZ2VuZXJhdGVJZDpMcnR9LFp5ZT16cnR9KTt2YXIgY1MsR3J0LGV2ZSx0dmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtMbygpO2NTPW8oKHQsZSk9PntsZXQgcj1heSxuPXIodCwiciIpLGk9cih0LCJnIiksYT1yKHQsImIiKTtyZXR1cm4gWnMobixpLGEsZSl9LCJmYWRlIiksR3J0PW8odD0+YC5sYWJlbCB7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogICAgY29sb3I6ICR7dC5ub2RlVGV4dENvbG9yfHx0LnRleHRDb2xvcn07CiAgfQogIC5jbHVzdGVyLWxhYmVsIHRleHQgewogICAgZmlsbDogJHt0LnRpdGxlQ29sb3J9OwogIH0KICAuY2x1c3Rlci1sYWJlbCBzcGFuLHAgewogICAgY29sb3I6ICR7dC50aXRsZUNvbG9yfTsKICB9CgoKCiAgLmxhYmVsIHRleHQsc3BhbixwIHsKICAgIGZpbGw6ICR7dC5ub2RlVGV4dENvbG9yfHx0LnRleHRDb2xvcn07CiAgICBjb2xvcjogJHt0Lm5vZGVUZXh0Q29sb3J8fHQudGV4dENvbG9yfTsKICB9CgogIC5ub2RlIHJlY3QsCiAgLm5vZGUgY2lyY2xlLAogIC5ub2RlIGVsbGlwc2UsCiAgLm5vZGUgcG9seWdvbiwKICAubm9kZSBwYXRoIHsKICAgIGZpbGw6ICR7dC5tYWluQmtnfTsKICAgIHN0cm9rZTogJHt0Lm5vZGVCb3JkZXJ9OwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQogIC5mbG93Y2hhcnQtbGFiZWwgdGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogIH0KICAvLyAuZmxvd2NoYXJ0LWxhYmVsIC50ZXh0LW91dGVyLXRzcGFuIHsKICAvLyAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgLy8gfQogIC8vIC5mbG93Y2hhcnQtbGFiZWwgLnRleHQtaW5uZXItdHNwYW4gewogIC8vICAgdGV4dC1hbmNob3I6IHN0YXJ0OwogIC8vIH0KCiAgLm5vZGUgLmxhYmVsIHsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICB9CiAgLm5vZGUuY2xpY2thYmxlIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKICB9CgogIC5hcnJvd2hlYWRQYXRoIHsKICAgIGZpbGw6ICR7dC5hcnJvd2hlYWRDb2xvcn07CiAgfQoKICAuZWRnZVBhdGggLnBhdGggewogICAgc3Ryb2tlOiAke3QubGluZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMi4wcHg7CiAgfQoKICAuZmxvd2NoYXJ0LWxpbmsgewogICAgc3Ryb2tlOiAke3QubGluZUNvbG9yfTsKICAgIGZpbGw6IG5vbmU7CiAgfQoKICAuZWRnZUxhYmVsIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgIHJlY3QgewogICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgICAgZmlsbDogJHt0LmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgfQogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KCiAgLyogRm9yIGh0bWwgbGFiZWxzIG9ubHkgKi8KICAubGFiZWxCa2cgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHtjUyh0LmVkZ2VMYWJlbEJhY2tncm91bmQsLjUpfTsKICAgIC8vIGJhY2tncm91bmQtY29sb3I6CiAgfQoKICAubm9kZSAuY2x1c3RlciB7CiAgICAvLyBmaWxsOiAke2NTKHQubWFpbkJrZywuNSl9OwogICAgZmlsbDogJHtjUyh0LmNsdXN0ZXJCa2csLjUpfTsKICAgIHN0cm9rZTogJHtjUyh0LmNsdXN0ZXJCb3JkZXIsLjIpfTsKICAgIGJveC1zaGFkb3c6IHJnYmEoNTAsIDUwLCA5MywgMC4yNSkgMHB4IDEzcHggMjdweCAtNXB4LCByZ2JhKDAsIDAsIDAsIDAuMykgMHB4IDhweCAxNnB4IC04cHg7CiAgICBzdHJva2Utd2lkdGg6IDFweDsKICB9CgogIC5jbHVzdGVyIHRleHQgewogICAgZmlsbDogJHt0LnRpdGxlQ29sb3J9OwogIH0KCiAgLmNsdXN0ZXIgc3BhbixwIHsKICAgIGNvbG9yOiAke3QudGl0bGVDb2xvcn07CiAgfQogIC8qIC5jbHVzdGVyIGRpdiB7CiAgICBjb2xvcjogJHt0LnRpdGxlQ29sb3J9OwogIH0gKi8KCiAgZGl2Lm1lcm1haWRUb29sdGlwIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG1heC13aWR0aDogMjAwcHg7CiAgICBwYWRkaW5nOiAycHg7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgYmFja2dyb3VuZDogJHt0LnRlcnRpYXJ5Q29sb3J9OwogICAgYm9yZGVyOiAxcHggc29saWQgJHt0LmJvcmRlcjJ9OwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB6LWluZGV4OiAxMDA7CiAgfQoKICAuZmxvd2NoYXJ0VGl0bGVUZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBmb250LXNpemU6IDE4cHg7CiAgICBmaWxsOiAke3QudGV4dENvbG9yfTsKICB9CmAsImdldFN0eWxlcyIpLGV2ZT1HcnR9KTt2YXIgJHJ0LFZydCxVcnQsSHJ0LFdydCxZcnQscXJ0LFhydCxqcnQsS3J0LFFydCxydmUsbnZlPU0oKCk9PnsidXNlIHN0cmljdCI7dXQoKTskcnQ9bygodCxlLHIsbik9PntlLmZvckVhY2goaT0+e1FydFtpXSh0LHIsbil9KX0sImluc2VydE1hcmtlcnMiKSxWcnQ9bygodCxlLHIpPT57WS50cmFjZSgiTWFraW5nIG1hcmtlcnMgZm9yICIsciksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItZXh0ZW5zaW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBleHRlbnNpb24gIitlKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDcgTDE4LDEzIFYgMSBaIiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItZXh0ZW5zaW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZXh0ZW5zaW9uICIrZSkuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIFYgMTMgTDE4LDcgWiIpfSwiZXh0ZW5zaW9uIiksVXJ0PW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWNvbXBvc2l0aW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjb21wb3NpdGlvbiAiK2UpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1jb21wb3NpdGlvbkVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNvbXBvc2l0aW9uICIrZSkuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpfSwiY29tcG9zaXRpb24iKSxIcnQ9bygodCxlLHIpPT57dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItYWdncmVnYXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGFnZ3JlZ2F0aW9uICIrZSkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWFnZ3JlZ2F0aW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgYWdncmVnYXRpb24gIitlKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIil9LCJhZ2dyZWdhdGlvbiIpLFdydD1vKCh0LGUscik9Pnt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1kZXBlbmRlbmN5U3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBkZXBlbmRlbmN5ICIrZSkuYXR0cigicmVmWCIsNikuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSA1LDcgTDksMTMgTDEsNyBMOSwxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1kZXBlbmRlbmN5RW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZGVwZW5kZW5jeSAiK2UpLmF0dHIoInJlZlgiLDEzKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSwiZGVwZW5kZW5jeSIpLFlydD1vKCh0LGUscik9Pnt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1sb2xsaXBvcFN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgbG9sbGlwb3AgIitlKS5hdHRyKCJyZWZYIiwxMykuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigiZmlsbCIsInRyYW5zcGFyZW50IikuYXR0cigiY3giLDcpLmF0dHIoImN5Iiw3KS5hdHRyKCJyIiw2KSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1sb2xsaXBvcEVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGxvbGxpcG9wICIrZSkuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigiZmlsbCIsInRyYW5zcGFyZW50IikuYXR0cigiY3giLDcpLmF0dHIoImN5Iiw3KS5hdHRyKCJyIiw2KX0sImxvbGxpcG9wIikscXJ0PW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLXBvaW50RW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsNikuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksdC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItcG9pbnRTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDQuNSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgNSBMIDEwIDEwIEwgMTAgMCB6IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpfSwicG9pbnQiKSxYcnQ9bygodCxlLHIpPT57dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItY2lyY2xlRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsMTEpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwiNSIpLmF0dHIoImN5IiwiNSIpLmF0dHIoInIiLCI1IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpLHQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWNpcmNsZVN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsLTEpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwiNSIpLmF0dHIoImN5IiwiNSIpLmF0dHIoInIiLCI1IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpfSwiY2lyY2xlIiksanJ0PW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWNyb3NzRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY3Jvc3MgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDExIDExIikuYXR0cigicmVmWCIsMTIpLmF0dHIoInJlZlkiLDUuMikuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsMSBsIDksOSBNIDEwLDEgbCAtOSw5IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwyKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpLHQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWNyb3NzU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjcm9zcyAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTEgMTEiKS5hdHRyKCJyZWZYIiwtMSkuYXR0cigicmVmWSIsNS4yKS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIGwgOSw5IE0gMTAsMSBsIC05LDkiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LCJjcm9zcyIpLEtydD1vKCh0LGUscik9Pnt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1iYXJiRW5kIikuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwxNCkuYXR0cigibWFya2VyVW5pdHMiLCJzdHJva2VXaWR0aCIpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOSw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSwiYmFyYiIpLFFydD17ZXh0ZW5zaW9uOlZydCxjb21wb3NpdGlvbjpVcnQsYWdncmVnYXRpb246SHJ0LGRlcGVuZGVuY3k6V3J0LGxvbGxpcG9wOllydCxwb2ludDpxcnQsY2lyY2xlOlhydCxjcm9zczpqcnQsYmFyYjpLcnR9LHJ2ZT0kcnR9KTtmdW5jdGlvbiBacnQodCxlKXtpZih0PT09MHx8IU51bWJlci5pc0ludGVnZXIodCkpdGhyb3cgbmV3IEVycm9yKCJDb2x1bW5zIG11c3QgYmUgYW4gaW50ZWdlciAhPT0gMC4iKTtpZihlPDB8fCFOdW1iZXIuaXNJbnRlZ2VyKGUpKXRocm93IG5ldyBFcnJvcigiUG9zaXRpb24gbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLiIrZSk7aWYodDwwKXJldHVybntweDplLHB5OjB9O2lmKHQ9PT0xKXJldHVybntweDowLHB5OmV9O2xldCByPWUldCxuPU1hdGguZmxvb3IoZS90KTtyZXR1cm57cHg6cixweTpufX1mdW5jdGlvbiB0Rih0LGUscj0wLG49MCl7WS5kZWJ1Zygic2V0QmxvY2tTaXplcyBhYmM5NSAoc3RhcnQpIix0LmlkLHQ/LnNpemU/LngsImJsb2NrIHdpZHRoID0iLHQ/LnNpemUsInNpZWJsaW5nV2lkdGgiLHIpLHQ/LnNpemU/LndpZHRofHwodC5zaXplPXt3aWR0aDpyLGhlaWdodDpuLHg6MCx5OjB9KTtsZXQgaT0wLGE9MDtpZih0LmNoaWxkcmVuPy5sZW5ndGg+MCl7Zm9yKGxldCBtIG9mIHQuY2hpbGRyZW4pdEYobSxlKTtsZXQgcz1KcnQodCk7aT1zLndpZHRoLGE9cy5oZWlnaHQsWS5kZWJ1Zygic2V0QmxvY2tTaXplcyBhYmM5NSBtYXhXaWR0aCBvZiIsdC5pZCwiOnMgY2hpbGRyZW4gaXMgIixpLGEpO2ZvcihsZXQgbSBvZiB0LmNoaWxkcmVuKW0uc2l6ZSYmKFkuZGVidWcoYGFiYzk1IFNldHRpbmcgc2l6ZSBvZiBjaGlsZHJlbiBvZiAke3QuaWR9IGlkPSR7bS5pZH0gJHtpfSAke2F9ICR7SlNPTi5zdHJpbmdpZnkobS5zaXplKX1gKSxtLnNpemUud2lkdGg9aSoobS53aWR0aEluQ29sdW1ucz8/MSkrVGkqKChtLndpZHRoSW5Db2x1bW5zPz8xKS0xKSxtLnNpemUuaGVpZ2h0PWEsbS5zaXplLng9MCxtLnNpemUueT0wLFkuZGVidWcoYGFiYzk1IHVwZGF0aW5nIHNpemUgb2YgJHt0LmlkfSBjaGlsZHJlbiBjaGlsZDoke20uaWR9IG1heFdpZHRoOiR7aX0gbWF4SGVpZ2h0OiR7YX1gKSk7Zm9yKGxldCBtIG9mIHQuY2hpbGRyZW4pdEYobSxlLGksYSk7bGV0IGw9dC5jb2x1bW5zPz8tMSx1PTA7Zm9yKGxldCBtIG9mIHQuY2hpbGRyZW4pdSs9bS53aWR0aEluQ29sdW1ucz8/MTtsZXQgaD10LmNoaWxkcmVuLmxlbmd0aDtsPjAmJmw8dSYmKGg9bCk7bGV0IGY9TWF0aC5jZWlsKHUvaCksZD1oKihpK1RpKStUaSxwPWYqKGErVGkpK1RpO2lmKGQ8cil7WS5kZWJ1ZyhgRGV0ZWN0ZWQgdG8gc21hbGwgc2llYmxpbmc6IGFiYzk1ICR7dC5pZH0gc2llYmxpbmdXaWR0aCAke3J9IHNpZWJsaW5nSGVpZ2h0ICR7bn0gd2lkdGggJHtkfWApLGQ9cixwPW47bGV0IG09KHItaCpUaS1UaSkvaCxnPShuLWYqVGktVGkpL2Y7WS5kZWJ1ZygiU2l6ZSBpbmRhdGEgYWJjODgiLHQuaWQsImNoaWxkV2lkdGgiLG0sIm1heFdpZHRoIixpKSxZLmRlYnVnKCJTaXplIGluZGF0YSBhYmM4OCIsdC5pZCwiY2hpbGRIZWlnaHQiLGcsIm1heEhlaWdodCIsYSksWS5kZWJ1ZygiU2l6ZSBpbmRhdGEgYWJjODggeFNpemUiLGgsInBhZGRpbmciLFRpKTtmb3IobGV0IHkgb2YgdC5jaGlsZHJlbil5LnNpemUmJih5LnNpemUud2lkdGg9bSx5LnNpemUuaGVpZ2h0PWcseS5zaXplLng9MCx5LnNpemUueT0wKX1pZihZLmRlYnVnKGBhYmM5NSAoZmluYWxlIGNhbGMpICR7dC5pZH0geFNpemUgJHtofSB5U2l6ZSAke2Z9IGNvbHVtbnMgJHtsfSR7dC5jaGlsZHJlbi5sZW5ndGh9IHdpZHRoPSR7TWF0aC5tYXgoZCx0LnNpemU/LndpZHRofHwwKX1gKSxkPCh0Py5zaXplPy53aWR0aHx8MCkpe2Q9dD8uc2l6ZT8ud2lkdGh8fDA7bGV0IG09bD4wP01hdGgubWluKHQuY2hpbGRyZW4ubGVuZ3RoLGwpOnQuY2hpbGRyZW4ubGVuZ3RoO2lmKG0+MCl7bGV0IGc9KGQtbSpUaS1UaSkvbTtZLmRlYnVnKCJhYmM5NSAoZ3Jvd2luZyB0byBmaXQpIHdpZHRoIix0LmlkLGQsdC5zaXplPy53aWR0aCxnKTtmb3IobGV0IHkgb2YgdC5jaGlsZHJlbil5LnNpemUmJih5LnNpemUud2lkdGg9Zyl9fXQuc2l6ZT17d2lkdGg6ZCxoZWlnaHQ6cCx4OjAseTowfX1ZLmRlYnVnKCJzZXRCbG9ja1NpemVzIGFiYzk0IChkb25lKSIsdC5pZCx0Py5zaXplPy54LHQ/LnNpemU/LndpZHRoLHQ/LnNpemU/LnksdD8uc2l6ZT8uaGVpZ2h0KX1mdW5jdGlvbiBpdmUodCxlKXtZLmRlYnVnKGBhYmM4NSBsYXlvdXQgYmxvY2tzICg9PmxheW91dEJsb2NrcykgJHt0LmlkfSB4OiAke3Q/LnNpemU/Lnh9IHk6ICR7dD8uc2l6ZT8ueX0gd2lkdGg6ICR7dD8uc2l6ZT8ud2lkdGh9YCk7bGV0IHI9dC5jb2x1bW5zPz8tMTtpZihZLmRlYnVnKCJsYXlvdXRCbG9ja3MgY29sdW1ucyBhYmM5NSIsdC5pZCwiPT4iLHIsdCksdC5jaGlsZHJlbiYmdC5jaGlsZHJlbi5sZW5ndGg+MCl7bGV0IG49dD8uY2hpbGRyZW5bMF0/LnNpemU/LndpZHRoPz8wLGk9dC5jaGlsZHJlbi5sZW5ndGgqbisodC5jaGlsZHJlbi5sZW5ndGgtMSkqVGk7WS5kZWJ1Zygid2lkdGhPZkNoaWxkcmVuIDg4IixpLCJwb3NYIik7bGV0IGE9MDtZLmRlYnVnKCJhYmM5MSBibG9jaz8uc2l6ZT8ueCIsdC5pZCx0Py5zaXplPy54KTtsZXQgcz10Py5zaXplPy54P3Q/LnNpemU/LngrKC10Py5zaXplPy53aWR0aC8yfHwwKTotVGksbD0wO2ZvcihsZXQgdSBvZiB0LmNoaWxkcmVuKXtsZXQgaD10O2lmKCF1LnNpemUpY29udGludWU7bGV0e3dpZHRoOmYsaGVpZ2h0OmR9PXUuc2l6ZSx7cHg6cCxweTptfT1acnQocixhKTtpZihtIT1sJiYobD1tLHM9dD8uc2l6ZT8ueD90Py5zaXplPy54KygtdD8uc2l6ZT8ud2lkdGgvMnx8MCk6LVRpLFkuZGVidWcoIk5ldyByb3cgaW4gbGF5b3V0IGZvciBibG9jayIsdC5pZCwiIGFuZCBjaGlsZCAiLHUuaWQsbCkpLFkuZGVidWcoYGFiYzg5IGxheW91dCBibG9ja3MgKGNoaWxkKSBpZDogJHt1LmlkfSBQb3M6ICR7YX0gKHB4LCBweSkgJHtwfSwke219ICgke2g/LnNpemU/Lnh9LCR7aD8uc2l6ZT8ueX0pIHBhcmVudDogJHtoLmlkfSB3aWR0aDogJHtmfSR7VGl9YCksaC5zaXplKXtsZXQgZz1mLzI7dS5zaXplLng9cytUaStnLFkuZGVidWcoYGFiYzkxIGxheW91dCBibG9ja3MgKGNhbGMpIHB4LCBweWlkOiR7dS5pZH0gc3RhcnRpbmdQb3M9WCR7c30gbmV3IHN0YXJ0aW5nUG9zWCR7dS5zaXplLnh9ICR7Z30gcGFkZGluZz0ke1RpfSB3aWR0aD0ke2Z9IGhhbGZXaWR0aD0ke2d9ID0+IHg6JHt1LnNpemUueH0geToke3Uuc2l6ZS55fSAke3Uud2lkdGhJbkNvbHVtbnN9ICh3aWR0aCAqIChjaGlsZD8udyB8fCAxKSkgLyAyICR7ZioodT8ud2lkdGhJbkNvbHVtbnM/PzEpLzJ9YCkscz11LnNpemUueCtnLHUuc2l6ZS55PWguc2l6ZS55LWguc2l6ZS5oZWlnaHQvMittKihkK1RpKStkLzIrVGksWS5kZWJ1ZyhgYWJjODggbGF5b3V0IGJsb2NrcyAoY2FsYykgcHgsIHB5aWQ6JHt1LmlkfXN0YXJ0aW5nUG9zWCR7c30ke1RpfSR7Z309Png6JHt1LnNpemUueH15OiR7dS5zaXplLnl9JHt1LndpZHRoSW5Db2x1bW5zfSh3aWR0aCAqIChjaGlsZD8udyB8fCAxKSkgLyAyJHtmKih1Py53aWR0aEluQ29sdW1ucz8/MSkvMn1gKX11LmNoaWxkcmVuJiZpdmUodSxlKSxhKz11Py53aWR0aEluQ29sdW1ucz8/MSxZLmRlYnVnKCJhYmM4OCBjb2x1bW5zUG9zIix1LGEpfX1ZLmRlYnVnKGBsYXlvdXQgYmxvY2tzICg8PT1sYXlvdXRCbG9ja3MpICR7dC5pZH0geDogJHt0Py5zaXplPy54fSB5OiAke3Q/LnNpemU/Lnl9IHdpZHRoOiAke3Q/LnNpemU/LndpZHRofWApfWZ1bmN0aW9uIGF2ZSh0LHttaW5YOmUsbWluWTpyLG1heFg6bixtYXhZOml9PXttaW5YOjAsbWluWTowLG1heFg6MCxtYXhZOjB9KXtpZih0LnNpemUmJnQuaWQhPT0icm9vdCIpe2xldHt4OmEseTpzLHdpZHRoOmwsaGVpZ2h0OnV9PXQuc2l6ZTthLWwvMjxlJiYoZT1hLWwvMikscy11LzI8ciYmKHI9cy11LzIpLGErbC8yPm4mJihuPWErbC8yKSxzK3UvMj5pJiYoaT1zK3UvMil9aWYodC5jaGlsZHJlbilmb3IobGV0IGEgb2YgdC5jaGlsZHJlbikoe21pblg6ZSxtaW5ZOnIsbWF4WDpuLG1heFk6aX09YXZlKGEse21pblg6ZSxtaW5ZOnIsbWF4WDpuLG1heFk6aX0pKTtyZXR1cm57bWluWDplLG1pblk6cixtYXhYOm4sbWF4WTppfX1mdW5jdGlvbiBzdmUodCl7bGV0IGU9dC5nZXRCbG9jaygicm9vdCIpO2lmKCFlKXJldHVybjt0RihlLHQsMCwwKSxpdmUoZSx0KSxZLmRlYnVnKCJnZXRCbG9ja3MiLEpTT04uc3RyaW5naWZ5KGUsbnVsbCwyKSk7bGV0e21pblg6cixtaW5ZOm4sbWF4WDppLG1heFk6YX09YXZlKGUpLHM9YS1uLGw9aS1yO3JldHVybnt4OnIseTpuLHdpZHRoOmwsaGVpZ2h0OnN9fXZhciBUaSxKcnQsb3ZlPU0oKCk9PnsidXNlIHN0cmljdCI7dXQoKTtWdCgpO1RpPXBlKCk/LmJsb2NrPy5wYWRkaW5nPz84O28oWnJ0LCJjYWxjdWxhdGVCbG9ja1Bvc2l0aW9uIik7SnJ0PW8odD0+e2xldCBlPTAscj0wO2ZvcihsZXQgbiBvZiB0LmNoaWxkcmVuKXtsZXR7d2lkdGg6aSxoZWlnaHQ6YSx4OnMseTpsfT1uLnNpemU/P3t3aWR0aDowLGhlaWdodDowLHg6MCx5OjB9O1kuZGVidWcoImdldE1heENoaWxkU2l6ZSBhYmM5NSBjaGlsZDoiLG4uaWQsIndpZHRoOiIsaSwiaGVpZ2h0OiIsYSwieDoiLHMsInk6IixsLG4udHlwZSksbi50eXBlIT09InNwYWNlIiYmKGk+ZSYmKGU9aS8odC53aWR0aEluQ29sdW1ucz8/MSkpLGE+ciYmKHI9YSkpfXJldHVybnt3aWR0aDplLGhlaWdodDpyfX0sImdldE1heENoaWxkU2l6ZSIpO28odEYsInNldEJsb2NrU2l6ZXMiKTtvKGl2ZSwibGF5b3V0QmxvY2tzIik7byhhdmUsImZpbmRCb3VuZHMiKTtvKHN2ZSwibGF5b3V0Iil9KTtmdW5jdGlvbiBsdmUodCxlKXtlJiZ0LmF0dHIoInN0eWxlIixlKX1mdW5jdGlvbiBlbnQodCl7bGV0IGU9VmUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImZvcmVpZ25PYmplY3QiKSkscj1lLmFwcGVuZCgieGh0bWw6ZGl2Iiksbj10LmxhYmVsLGk9dC5pc05vZGU/Im5vZGVMYWJlbCI6ImVkZ2VMYWJlbCIsYT1yLmFwcGVuZCgic3BhbiIpO3JldHVybiBhLmh0bWwobiksbHZlKGEsdC5sYWJlbFN0eWxlKSxhLmF0dHIoImNsYXNzIixpKSxsdmUocix0LmxhYmVsU3R5bGUpLHIuc3R5bGUoImRpc3BsYXkiLCJpbmxpbmUtYmxvY2siKSxyLnN0eWxlKCJ3aGl0ZS1zcGFjZSIsIm5vd3JhcCIpLHIuYXR0cigieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiksZS5ub2RlKCl9dmFyIHRudCxncyx1Uz1NKCgpPT57InVzZSBzdHJpY3QiO3ByKCk7dXQoKTtWdCgpO2ZyKCk7aHIoKTtQbCgpO28obHZlLCJhcHBseVN0eWxlIik7byhlbnQsImFkZEh0bWxMYWJlbCIpO3RudD1vKCh0LGUscixuKT0+e2xldCBpPXR8fCIiO2lmKHR5cGVvZiBpPT0ib2JqZWN0IiYmKGk9aVswXSkseHIocGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2k9aS5yZXBsYWNlKC9cXG58XG4vZywiPGJyIC8+IiksWS5kZWJ1ZygidmVydGV4VGV4dCIraSk7bGV0IGE9e2lzTm9kZTpuLGxhYmVsOnc5KE1hKGkpKSxsYWJlbFN0eWxlOmUucmVwbGFjZSgiZmlsbDoiLCJjb2xvcjoiKX07cmV0dXJuIGVudChhKX1lbHNle2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7YS5zZXRBdHRyaWJ1dGUoInN0eWxlIixlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpO2xldCBzPVtdO3R5cGVvZiBpPT0ic3RyaW5nIj9zPWkuc3BsaXQoL1xcbnxcbnw8YnJccypcLz8+L2dpKTpBcnJheS5pc0FycmF5KGkpP3M9aTpzPVtdO2ZvcihsZXQgbCBvZiBzKXtsZXQgdT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTt1LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLHUuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLHUuc2V0QXR0cmlidXRlKCJ4IiwiMCIpLHI/dS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwidGl0bGUtcm93Iik6dS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwicm93IiksdS50ZXh0Q29udGVudD1sLnRyaW0oKSxhLmFwcGVuZENoaWxkKHUpfXJldHVybiBhfX0sImNyZWF0ZUxhYmVsIiksZ3M9dG50fSk7dmFyIHV2ZSxybnQsY3ZlLGh2ZT1NKCgpPT57InVzZSBzdHJpY3QiO3V0KCk7dXZlPW8oKHQsZSxyLG4saSk9PntlLmFycm93VHlwZVN0YXJ0JiZjdmUodCwic3RhcnQiLGUuYXJyb3dUeXBlU3RhcnQscixuLGkpLGUuYXJyb3dUeXBlRW5kJiZjdmUodCwiZW5kIixlLmFycm93VHlwZUVuZCxyLG4saSl9LCJhZGRFZGdlTWFya2VycyIpLHJudD17YXJyb3dfY3Jvc3M6ImNyb3NzIixhcnJvd19wb2ludDoicG9pbnQiLGFycm93X2JhcmI6ImJhcmIiLGFycm93X2NpcmNsZToiY2lyY2xlIixhZ2dyZWdhdGlvbjoiYWdncmVnYXRpb24iLGV4dGVuc2lvbjoiZXh0ZW5zaW9uIixjb21wb3NpdGlvbjoiY29tcG9zaXRpb24iLGRlcGVuZGVuY3k6ImRlcGVuZGVuY3kiLGxvbGxpcG9wOiJsb2xsaXBvcCJ9LGN2ZT1vKCh0LGUscixuLGksYSk9PntsZXQgcz1ybnRbcl07aWYoIXMpe1kud2FybihgVW5rbm93biBhcnJvdyB0eXBlOiAke3J9YCk7cmV0dXJufWxldCBsPWU9PT0ic3RhcnQiPyJTdGFydCI6IkVuZCI7dC5hdHRyKGBtYXJrZXItJHtlfWAsYHVybCgke259IyR7aX1fJHthfS0ke3N9JHtsfSlgKX0sImFkZEVkZ2VNYXJrZXIiKX0pO2Z1bmN0aW9uIGhTKHQsZSl7cGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscyYmdCYmKHQuc3R5bGUud2lkdGg9ZS5sZW5ndGgqOSsicHgiLHQuc3R5bGUuaGVpZ2h0PSIxMnB4Iil9dmFyIHJGLFhhLGR2ZSxwdmUsbm50LGludCxmdmUsbXZlLGd2ZT1NKCgpPT57InVzZSBzdHJpY3QiO3V0KCk7dVMoKTtQbCgpO3ByKCk7VnQoKTtocigpO2ZyKCk7dUwoKTskdigpO2h2ZSgpO3JGPXt9LFhhPXt9LGR2ZT1vKCh0LGUpPT57bGV0IHI9cGUoKSxuPXhyKHIuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpLGk9ZS5sYWJlbFR5cGU9PT0ibWFya2Rvd24iP0xpKHQsZS5sYWJlbCx7c3R5bGU6ZS5sYWJlbFN0eWxlLHVzZUh0bWxMYWJlbHM6bixhZGRTdmdCYWNrZ3JvdW5kOiEwfSxyKTpncyhlLmxhYmVsLGUubGFiZWxTdHlsZSksYT10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZUxhYmVsIikscz1hLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKTtzLm5vZGUoKS5hcHBlbmRDaGlsZChpKTtsZXQgbD1pLmdldEJCb3goKTtpZihuKXtsZXQgaD1pLmNoaWxkcmVuWzBdLGY9VmUoaSk7bD1oLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGYuYXR0cigid2lkdGgiLGwud2lkdGgpLGYuYXR0cigiaGVpZ2h0IixsLmhlaWdodCl9cy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistbC53aWR0aC8yKyIsICIrLWwuaGVpZ2h0LzIrIikiKSxyRltlLmlkXT1hLGUud2lkdGg9bC53aWR0aCxlLmhlaWdodD1sLmhlaWdodDtsZXQgdTtpZihlLnN0YXJ0TGFiZWxMZWZ0KXtsZXQgaD1ncyhlLnN0YXJ0TGFiZWxMZWZ0LGUubGFiZWxTdHlsZSksZj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLGQ9Zi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7dT1kLm5vZGUoKS5hcHBlbmRDaGlsZChoKTtsZXQgcD1oLmdldEJCb3goKTtkLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1wLndpZHRoLzIrIiwgIistcC5oZWlnaHQvMisiKSIpLFhhW2UuaWRdfHwoWGFbZS5pZF09e30pLFhhW2UuaWRdLnN0YXJ0TGVmdD1mLGhTKHUsZS5zdGFydExhYmVsTGVmdCl9aWYoZS5zdGFydExhYmVsUmlnaHQpe2xldCBoPWdzKGUuc3RhcnRMYWJlbFJpZ2h0LGUubGFiZWxTdHlsZSksZj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLGQ9Zi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7dT1mLm5vZGUoKS5hcHBlbmRDaGlsZChoKSxkLm5vZGUoKS5hcHBlbmRDaGlsZChoKTtsZXQgcD1oLmdldEJCb3goKTtkLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1wLndpZHRoLzIrIiwgIistcC5oZWlnaHQvMisiKSIpLFhhW2UuaWRdfHwoWGFbZS5pZF09e30pLFhhW2UuaWRdLnN0YXJ0UmlnaHQ9ZixoUyh1LGUuc3RhcnRMYWJlbFJpZ2h0KX1pZihlLmVuZExhYmVsTGVmdCl7bGV0IGg9Z3MoZS5lbmRMYWJlbExlZnQsZS5sYWJlbFN0eWxlKSxmPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksZD1mLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTt1PWQubm9kZSgpLmFwcGVuZENoaWxkKGgpO2xldCBwPWguZ2V0QkJveCgpO2QuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXAud2lkdGgvMisiLCAiKy1wLmhlaWdodC8yKyIpIiksZi5ub2RlKCkuYXBwZW5kQ2hpbGQoaCksWGFbZS5pZF18fChYYVtlLmlkXT17fSksWGFbZS5pZF0uZW5kTGVmdD1mLGhTKHUsZS5lbmRMYWJlbExlZnQpfWlmKGUuZW5kTGFiZWxSaWdodCl7bGV0IGg9Z3MoZS5lbmRMYWJlbFJpZ2h0LGUubGFiZWxTdHlsZSksZj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLGQ9Zi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7dT1kLm5vZGUoKS5hcHBlbmRDaGlsZChoKTtsZXQgcD1oLmdldEJCb3goKTtkLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1wLndpZHRoLzIrIiwgIistcC5oZWlnaHQvMisiKSIpLGYubm9kZSgpLmFwcGVuZENoaWxkKGgpLFhhW2UuaWRdfHwoWGFbZS5pZF09e30pLFhhW2UuaWRdLmVuZFJpZ2h0PWYsaFModSxlLmVuZExhYmVsUmlnaHQpfXJldHVybiBpfSwiaW5zZXJ0RWRnZUxhYmVsIik7byhoUywic2V0VGVybWluYWxXaWR0aCIpO3B2ZT1vKCh0LGUpPT57WS5kZWJ1ZygiTW92aW5nIGxhYmVsIGFiYzg4ICIsdC5pZCx0LmxhYmVsLHJGW3QuaWRdLGUpO2xldCByPWUudXBkYXRlZFBhdGg/ZS51cGRhdGVkUGF0aDplLm9yaWdpbmFsUGF0aCxuPXBlKCkse3N1YkdyYXBoVGl0bGVUb3RhbE1hcmdpbjppfT1GdShuKTtpZih0LmxhYmVsKXtsZXQgYT1yRlt0LmlkXSxzPXQueCxsPXQueTtpZihyKXtsZXQgdT1VdC5jYWxjTGFiZWxQb3NpdGlvbihyKTtZLmRlYnVnKCJNb3ZpbmcgbGFiZWwgIit0LmxhYmVsKyIgZnJvbSAoIixzLCIsIixsLCIpIHRvICgiLHUueCwiLCIsdS55LCIpIGFiYzg4IiksZS51cGRhdGVkUGF0aCYmKHM9dS54LGw9dS55KX1hLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3N9LCAke2wraS8yfSlgKX1pZih0LnN0YXJ0TGFiZWxMZWZ0KXtsZXQgYT1YYVt0LmlkXS5zdGFydExlZnQscz10LngsbD10Lnk7aWYocil7bGV0IHU9VXQuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbih0LmFycm93VHlwZVN0YXJ0PzEwOjAsInN0YXJ0X2xlZnQiLHIpO3M9dS54LGw9dS55fWEuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7c30sICR7bH0pYCl9aWYodC5zdGFydExhYmVsUmlnaHQpe2xldCBhPVhhW3QuaWRdLnN0YXJ0UmlnaHQscz10LngsbD10Lnk7aWYocil7bGV0IHU9VXQuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbih0LmFycm93VHlwZVN0YXJ0PzEwOjAsInN0YXJ0X3JpZ2h0IixyKTtzPXUueCxsPXUueX1hLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3N9LCAke2x9KWApfWlmKHQuZW5kTGFiZWxMZWZ0KXtsZXQgYT1YYVt0LmlkXS5lbmRMZWZ0LHM9dC54LGw9dC55O2lmKHIpe2xldCB1PVV0LmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24odC5hcnJvd1R5cGVFbmQ/MTA6MCwiZW5kX2xlZnQiLHIpO3M9dS54LGw9dS55fWEuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7c30sICR7bH0pYCl9aWYodC5lbmRMYWJlbFJpZ2h0KXtsZXQgYT1YYVt0LmlkXS5lbmRSaWdodCxzPXQueCxsPXQueTtpZihyKXtsZXQgdT1VdC5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKHQuYXJyb3dUeXBlRW5kPzEwOjAsImVuZF9yaWdodCIscik7cz11LngsbD11Lnl9YS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtzfSwgJHtsfSlgKX19LCJwb3NpdGlvbkVkZ2VMYWJlbCIpLG5udD1vKCh0LGUpPT57bGV0IHI9dC54LG49dC55LGk9TWF0aC5hYnMoZS54LXIpLGE9TWF0aC5hYnMoZS55LW4pLHM9dC53aWR0aC8yLGw9dC5oZWlnaHQvMjtyZXR1cm4gaT49c3x8YT49bH0sIm91dHNpZGVOb2RlIiksaW50PW8oKHQsZSxyKT0+e1kuZGVidWcoYGludGVyc2VjdGlvbiBjYWxjIGFiYzg5OgogIG91dHNpZGVQb2ludDogJHtKU09OLnN0cmluZ2lmeShlKX0KICBpbnNpZGVQb2ludCA6ICR7SlNPTi5zdHJpbmdpZnkocil9CiAgbm9kZSAgICAgICAgOiB4OiR7dC54fSB5OiR7dC55fSB3OiR7dC53aWR0aH0gaDoke3QuaGVpZ2h0fWApO2xldCBuPXQueCxpPXQueSxhPU1hdGguYWJzKG4tci54KSxzPXQud2lkdGgvMixsPXIueDxlLng/cy1hOnMrYSx1PXQuaGVpZ2h0LzIsaD1NYXRoLmFicyhlLnktci55KSxmPU1hdGguYWJzKGUueC1yLngpO2lmKE1hdGguYWJzKGktZS55KSpzPk1hdGguYWJzKG4tZS54KSp1KXtsZXQgZD1yLnk8ZS55P2UueS11LWk6aS11LWUueTtsPWYqZC9oO2xldCBwPXt4OnIueDxlLng/ci54K2w6ci54LWYrbCx5OnIueTxlLnk/ci55K2gtZDpyLnktaCtkfTtyZXR1cm4gbD09PTAmJihwLng9ZS54LHAueT1lLnkpLGY9PT0wJiYocC54PWUueCksaD09PTAmJihwLnk9ZS55KSxZLmRlYnVnKGBhYmM4OSB0b3BwL2JvdHQgY2FsYywgUSAke2h9LCBxICR7ZH0sIFIgJHtmfSwgciAke2x9YCxwKSxwfWVsc2V7ci54PGUueD9sPWUueC1zLW46bD1uLXMtZS54O2xldCBkPWgqbC9mLHA9ci54PGUueD9yLngrZi1sOnIueC1mK2wsbT1yLnk8ZS55P3IueStkOnIueS1kO3JldHVybiBZLmRlYnVnKGBzaWRlcyBjYWxjIGFiYzg5LCBRICR7aH0sIHEgJHtkfSwgUiAke2Z9LCByICR7bH1gLHtfeDpwLF95Om19KSxsPT09MCYmKHA9ZS54LG09ZS55KSxmPT09MCYmKHA9ZS54KSxoPT09MCYmKG09ZS55KSx7eDpwLHk6bX19fSwiaW50ZXJzZWN0aW9uIiksZnZlPW8oKHQsZSk9PntZLmRlYnVnKCJhYmM4OCBjdXRQYXRoQXRJbnRlcnNlY3QiLHQsZSk7bGV0IHI9W10sbj10WzBdLGk9ITE7cmV0dXJuIHQuZm9yRWFjaChhPT57aWYoIW5udChlLGEpJiYhaSl7bGV0IHM9aW50KGUsbixhKSxsPSExO3IuZm9yRWFjaCh1PT57bD1sfHx1Lng9PT1zLngmJnUueT09PXMueX0pLHIuc29tZSh1PT51Lng9PT1zLngmJnUueT09PXMueSl8fHIucHVzaChzKSxpPSEwfWVsc2Ugbj1hLGl8fHIucHVzaChhKX0pLHJ9LCJjdXRQYXRoQXRJbnRlcnNlY3QiKSxtdmU9byhmdW5jdGlvbih0LGUscixuLGksYSxzKXtsZXQgbD1yLnBvaW50cztZLmRlYnVnKCJhYmM4OCBJbnNlcnRFZGdlOiBlZGdlPSIsciwiZT0iLGUpO2xldCB1PSExLGg9YS5ub2RlKGUudik7dmFyIGY9YS5ub2RlKGUudyk7Zj8uaW50ZXJzZWN0JiZoPy5pbnRlcnNlY3QmJihsPWwuc2xpY2UoMSxyLnBvaW50cy5sZW5ndGgtMSksbC51bnNoaWZ0KGguaW50ZXJzZWN0KGxbMF0pKSxsLnB1c2goZi5pbnRlcnNlY3QobFtsLmxlbmd0aC0xXSkpKSxyLnRvQ2x1c3RlciYmKFkuZGVidWcoInRvIGNsdXN0ZXIgYWJjODgiLG5bci50b0NsdXN0ZXJdKSxsPWZ2ZShyLnBvaW50cyxuW3IudG9DbHVzdGVyXS5ub2RlKSx1PSEwKSxyLmZyb21DbHVzdGVyJiYoWS5kZWJ1ZygiZnJvbSBjbHVzdGVyIGFiYzg4IixuW3IuZnJvbUNsdXN0ZXJdKSxsPWZ2ZShsLnJldmVyc2UoKSxuW3IuZnJvbUNsdXN0ZXJdLm5vZGUpLnJldmVyc2UoKSx1PSEwKTtsZXQgZD1sLmZpbHRlcihfPT4hTnVtYmVyLmlzTmFOKF8ueSkpLHA9UG87ci5jdXJ2ZSYmKGk9PT0iZ3JhcGgifHxpPT09ImZsb3djaGFydCIpJiYocD1yLmN1cnZlKTtsZXR7eDptLHk6Z309dXcocikseT1ucygpLngobSkueShnKS5jdXJ2ZShwKSx2O3N3aXRjaChyLnRoaWNrbmVzcyl7Y2FzZSJub3JtYWwiOnY9ImVkZ2UtdGhpY2tuZXNzLW5vcm1hbCI7YnJlYWs7Y2FzZSJ0aGljayI6dj0iZWRnZS10aGlja25lc3MtdGhpY2siO2JyZWFrO2Nhc2UiaW52aXNpYmxlIjp2PSJlZGdlLXRoaWNrbmVzcy10aGljayI7YnJlYWs7ZGVmYXVsdDp2PSIifXN3aXRjaChyLnBhdHRlcm4pe2Nhc2Uic29saWQiOnYrPSIgZWRnZS1wYXR0ZXJuLXNvbGlkIjticmVhaztjYXNlImRvdHRlZCI6dis9IiBlZGdlLXBhdHRlcm4tZG90dGVkIjticmVhaztjYXNlImRhc2hlZCI6dis9IiBlZGdlLXBhdHRlcm4tZGFzaGVkIjticmVha31sZXQgeD10LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHkoZCkpLmF0dHIoImlkIixyLmlkKS5hdHRyKCJjbGFzcyIsIiAiK3YrKHIuY2xhc3Nlcz8iICIrci5jbGFzc2VzOiIiKSkuYXR0cigic3R5bGUiLHIuc3R5bGUpLGI9IiI7KHBlKCkuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGV8fHBlKCkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZSkmJihiPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoLGI9Yi5yZXBsYWNlKC9cKC9nLCJcXCgiKSxiPWIucmVwbGFjZSgvXCkvZywiXFwpIikpLHV2ZSh4LHIsYixzLGkpO2xldCB3PXt9O3JldHVybiB1JiYody51cGRhdGVkUGF0aD1sKSx3Lm9yaWdpbmFsUGF0aD1yLnBvaW50cyx3fSwiaW5zZXJ0RWRnZSIpfSk7dmFyIGFudCx5dmUsdnZlPU0oKCk9PnsidXNlIHN0cmljdCI7YW50PW8odD0+e2xldCBlPW5ldyBTZXQ7Zm9yKGxldCByIG9mIHQpc3dpdGNoKHIpe2Nhc2UieCI6ZS5hZGQoInJpZ2h0IiksZS5hZGQoImxlZnQiKTticmVhaztjYXNlInkiOmUuYWRkKCJ1cCIpLGUuYWRkKCJkb3duIik7YnJlYWs7ZGVmYXVsdDplLmFkZChyKTticmVha31yZXR1cm4gZX0sImV4cGFuZEFuZERlZHVwbGljYXRlRGlyZWN0aW9ucyIpLHl2ZT1vKCh0LGUscik9PntsZXQgbj1hbnQodCksaT0yLGE9ZS5oZWlnaHQrMipyLnBhZGRpbmcscz1hL2ksbD1lLndpZHRoKzIqcytyLnBhZGRpbmcsdT1yLnBhZGRpbmcvMjtyZXR1cm4gbi5oYXMoInJpZ2h0IikmJm4uaGFzKCJsZWZ0IikmJm4uaGFzKCJ1cCIpJiZuLmhhcygiZG93biIpP1t7eDowLHk6MH0se3g6cyx5OjB9LHt4OmwvMix5OjIqdX0se3g6bC1zLHk6MH0se3g6bCx5OjB9LHt4OmwseTotYS8zfSx7eDpsKzIqdSx5Oi1hLzJ9LHt4OmwseTotMiphLzN9LHt4OmwseTotYX0se3g6bC1zLHk6LWF9LHt4OmwvMix5Oi1hLTIqdX0se3g6cyx5Oi1hfSx7eDowLHk6LWF9LHt4OjAseTotMiphLzN9LHt4Oi0yKnUseTotYS8yfSx7eDowLHk6LWEvM31dOm4uaGFzKCJyaWdodCIpJiZuLmhhcygibGVmdCIpJiZuLmhhcygidXAiKT9be3g6cyx5OjB9LHt4Omwtcyx5OjB9LHt4OmwseTotYS8yfSx7eDpsLXMseTotYX0se3g6cyx5Oi1hfSx7eDowLHk6LWEvMn1dOm4uaGFzKCJyaWdodCIpJiZuLmhhcygibGVmdCIpJiZuLmhhcygiZG93biIpP1t7eDowLHk6MH0se3g6cyx5Oi1hfSx7eDpsLXMseTotYX0se3g6bCx5OjB9XTpuLmhhcygicmlnaHQiKSYmbi5oYXMoInVwIikmJm4uaGFzKCJkb3duIik/W3t4OjAseTowfSx7eDpsLHk6LXN9LHt4OmwseTotYStzfSx7eDowLHk6LWF9XTpuLmhhcygibGVmdCIpJiZuLmhhcygidXAiKSYmbi5oYXMoImRvd24iKT9be3g6bCx5OjB9LHt4OjAseTotc30se3g6MCx5Oi1hK3N9LHt4OmwseTotYX1dOm4uaGFzKCJyaWdodCIpJiZuLmhhcygibGVmdCIpP1t7eDpzLHk6MH0se3g6cyx5Oi11fSx7eDpsLXMseTotdX0se3g6bC1zLHk6MH0se3g6bCx5Oi1hLzJ9LHt4Omwtcyx5Oi1hfSx7eDpsLXMseTotYSt1fSx7eDpzLHk6LWErdX0se3g6cyx5Oi1hfSx7eDowLHk6LWEvMn1dOm4uaGFzKCJ1cCIpJiZuLmhhcygiZG93biIpP1t7eDpsLzIseTowfSx7eDowLHk6LXV9LHt4OnMseTotdX0se3g6cyx5Oi1hK3V9LHt4OjAseTotYSt1fSx7eDpsLzIseTotYX0se3g6bCx5Oi1hK3V9LHt4Omwtcyx5Oi1hK3V9LHt4Omwtcyx5Oi11fSx7eDpsLHk6LXV9XTpuLmhhcygicmlnaHQiKSYmbi5oYXMoInVwIik/W3t4OjAseTowfSx7eDpsLHk6LXN9LHt4OjAseTotYX1dOm4uaGFzKCJyaWdodCIpJiZuLmhhcygiZG93biIpP1t7eDowLHk6MH0se3g6bCx5OjB9LHt4OjAseTotYX1dOm4uaGFzKCJsZWZ0IikmJm4uaGFzKCJ1cCIpP1t7eDpsLHk6MH0se3g6MCx5Oi1zfSx7eDpsLHk6LWF9XTpuLmhhcygibGVmdCIpJiZuLmhhcygiZG93biIpP1t7eDpsLHk6MH0se3g6MCx5OjB9LHt4OmwseTotYX1dOm4uaGFzKCJyaWdodCIpP1t7eDpzLHk6LXV9LHt4OnMseTotdX0se3g6bC1zLHk6LXV9LHt4Omwtcyx5OjB9LHt4OmwseTotYS8yfSx7eDpsLXMseTotYX0se3g6bC1zLHk6LWErdX0se3g6cyx5Oi1hK3V9LHt4OnMseTotYSt1fV06bi5oYXMoImxlZnQiKT9be3g6cyx5OjB9LHt4OnMseTotdX0se3g6bC1zLHk6LXV9LHt4Omwtcyx5Oi1hK3V9LHt4OnMseTotYSt1fSx7eDpzLHk6LWF9LHt4OjAseTotYS8yfV06bi5oYXMoInVwIik/W3t4OnMseTotdX0se3g6cyx5Oi1hK3V9LHt4OjAseTotYSt1fSx7eDpsLzIseTotYX0se3g6bCx5Oi1hK3V9LHt4Omwtcyx5Oi1hK3V9LHt4Omwtcyx5Oi11fV06bi5oYXMoImRvd24iKT9be3g6bC8yLHk6MH0se3g6MCx5Oi11fSx7eDpzLHk6LXV9LHt4OnMseTotYSt1fSx7eDpsLXMseTotYSt1fSx7eDpsLXMseTotdX0se3g6bCx5Oi11fV06W3t4OjAseTowfV19LCJnZXRBcnJvd1BvaW50cyIpfSk7ZnVuY3Rpb24gc250KHQsZSl7cmV0dXJuIHQuaW50ZXJzZWN0KGUpfXZhciB4dmUsYnZlPU0oKCk9PnsidXNlIHN0cmljdCI7byhzbnQsImludGVyc2VjdE5vZGUiKTt4dmU9c250fSk7ZnVuY3Rpb24gb250KHQsZSxyLG4pe3ZhciBpPXQueCxhPXQueSxzPWktbi54LGw9YS1uLnksdT1NYXRoLnNxcnQoZSplKmwqbCtyKnIqcypzKSxoPU1hdGguYWJzKGUqcipzL3UpO24ueDxpJiYoaD0taCk7dmFyIGY9TWF0aC5hYnMoZSpyKmwvdSk7cmV0dXJuIG4ueTxhJiYoZj0tZikse3g6aStoLHk6YStmfX12YXIgZlMsbkY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtvKG9udCwiaW50ZXJzZWN0RWxsaXBzZSIpO2ZTPW9udH0pO2Z1bmN0aW9uIGxudCh0LGUscil7cmV0dXJuIGZTKHQsZSxlLHIpfXZhciB3dmUsVHZlPU0oKCk9PnsidXNlIHN0cmljdCI7bkYoKTtvKGxudCwiaW50ZXJzZWN0Q2lyY2xlIik7d3ZlPWxudH0pO2Z1bmN0aW9uIGNudCh0LGUscixuKXt2YXIgaSxhLHMsbCx1LGgsZixkLHAsbSxnLHksdix4LGI7aWYoaT1lLnktdC55LHM9dC54LWUueCx1PWUueCp0LnktdC54KmUueSxwPWkqci54K3Mqci55K3UsbT1pKm4ueCtzKm4ueSt1LCEocCE9PTAmJm0hPT0wJiZrdmUocCxtKSkmJihhPW4ueS1yLnksbD1yLngtbi54LGg9bi54KnIueS1yLngqbi55LGY9YSp0LngrbCp0LnkraCxkPWEqZS54K2wqZS55K2gsIShmIT09MCYmZCE9PTAmJmt2ZShmLGQpKSYmKGc9aSpsLWEqcyxnIT09MCkpKXJldHVybiB5PU1hdGguYWJzKGcvMiksdj1zKmgtbCp1LHg9djwwPyh2LXkpL2c6KHYreSkvZyx2PWEqdS1pKmgsYj12PDA/KHYteSkvZzoodit5KS9nLHt4LHk6Yn19ZnVuY3Rpb24ga3ZlKHQsZSl7cmV0dXJuIHQqZT4wfXZhciBFdmUsU3ZlPU0oKCk9PnsidXNlIHN0cmljdCI7byhjbnQsImludGVyc2VjdExpbmUiKTtvKGt2ZSwic2FtZVNpZ24iKTtFdmU9Y250fSk7ZnVuY3Rpb24gdW50KHQsZSxyKXt2YXIgbj10LngsaT10LnksYT1bXSxzPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxsPU51bWJlci5QT1NJVElWRV9JTkZJTklUWTt0eXBlb2YgZS5mb3JFYWNoPT0iZnVuY3Rpb24iP2UuZm9yRWFjaChmdW5jdGlvbihnKXtzPU1hdGgubWluKHMsZy54KSxsPU1hdGgubWluKGwsZy55KX0pOihzPU1hdGgubWluKHMsZS54KSxsPU1hdGgubWluKGwsZS55KSk7Zm9yKHZhciB1PW4tdC53aWR0aC8yLXMsaD1pLXQuaGVpZ2h0LzItbCxmPTA7ZjxlLmxlbmd0aDtmKyspe3ZhciBkPWVbZl0scD1lW2Y8ZS5sZW5ndGgtMT9mKzE6MF0sbT1FdmUodCxyLHt4OnUrZC54LHk6aCtkLnl9LHt4OnUrcC54LHk6aCtwLnl9KTttJiZhLnB1c2gobSl9cmV0dXJuIGEubGVuZ3RoPyhhLmxlbmd0aD4xJiZhLnNvcnQoZnVuY3Rpb24oZyx5KXt2YXIgdj1nLngtci54LHg9Zy55LXIueSxiPU1hdGguc3FydCh2KnYreCp4KSx3PXkueC1yLngsXz15Lnktci55LFQ9TWF0aC5zcXJ0KHcqdytfKl8pO3JldHVybiBiPFQ/LTE6Yj09PVQ/MDoxfSksYVswXSk6dH12YXIgQ3ZlLEF2ZT1NKCgpPT57InVzZSBzdHJpY3QiO1N2ZSgpO0N2ZT11bnQ7byh1bnQsImludGVyc2VjdFBvbHlnb24iKX0pO3ZhciBobnQsX3ZlLEx2ZT1NKCgpPT57InVzZSBzdHJpY3QiO2hudD1vKCh0LGUpPT57dmFyIHI9dC54LG49dC55LGk9ZS54LXIsYT1lLnktbixzPXQud2lkdGgvMixsPXQuaGVpZ2h0LzIsdSxoO3JldHVybiBNYXRoLmFicyhhKSpzPk1hdGguYWJzKGkpKmw/KGE8MCYmKGw9LWwpLHU9YT09PTA/MDpsKmkvYSxoPWwpOihpPDAmJihzPS1zKSx1PXMsaD1pPT09MD8wOnMqYS9pKSx7eDpyK3UseTpuK2h9fSwiaW50ZXJzZWN0UmVjdCIpLF92ZT1obnR9KTt2YXIgSW4saUY9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtidmUoKTtUdmUoKTtuRigpO0F2ZSgpO0x2ZSgpO0luPXtub2RlOnh2ZSxjaXJjbGU6d3ZlLGVsbGlwc2U6ZlMscG9seWdvbjpDdmUscmVjdDpfdmV9fSk7ZnVuY3Rpb24gZWModCxlLHIsbil7cmV0dXJuIHQuaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIixuLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS54KyIsIitpLnl9KS5qb2luKCIgIikpLmF0dHIoImNsYXNzIiwibGFiZWwtY29udGFpbmVyIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWUvMisiLCIrci8yKyIpIil9dmFyIFJpLGpuLGFGPU0oKCk9PnsidXNlIHN0cmljdCI7dVMoKTtQbCgpO1Z0KCk7cHIoKTtmcigpO2hyKCk7Umk9byhhc3luYyh0LGUscixuKT0+e2xldCBpPXBlKCksYSxzPWUudXNlSHRtbExhYmVsc3x8eHIoaS5mbG93Y2hhcnQuaHRtbExhYmVscyk7cj9hPXI6YT0ibm9kZSBkZWZhdWx0IjtsZXQgbD10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixhKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksdT1sLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKS5hdHRyKCJzdHlsZSIsZS5sYWJlbFN0eWxlKSxoO2UubGFiZWxUZXh0PT09dm9pZCAwP2g9IiI6aD10eXBlb2YgZS5sYWJlbFRleHQ9PSJzdHJpbmciP2UubGFiZWxUZXh0OmUubGFiZWxUZXh0WzBdO2xldCBmPXUubm9kZSgpLGQ7ZS5sYWJlbFR5cGU9PT0ibWFya2Rvd24iP2Q9TGkodSxrcihNYShoKSxpKSx7dXNlSHRtbExhYmVsczpzLHdpZHRoOmUud2lkdGh8fGkuZmxvd2NoYXJ0LndyYXBwaW5nV2lkdGgsY2xhc3NlczoibWFya2Rvd24tbm9kZS1sYWJlbCJ9LGkpOmQ9Zi5hcHBlbmRDaGlsZChncyhrcihNYShoKSxpKSxlLmxhYmVsU3R5bGUsITEsbikpO2xldCBwPWQuZ2V0QkJveCgpLG09ZS5wYWRkaW5nLzI7aWYoeHIoaS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2xldCBnPWQuY2hpbGRyZW5bMF0seT1WZShkKSx2PWcuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImltZyIpO2lmKHYpe2xldCB4PWgucmVwbGFjZSgvPGltZ1tePl0qPi9nLCIiKS50cmltKCk9PT0iIjthd2FpdCBQcm9taXNlLmFsbChbLi4udl0ubWFwKGI9Pm5ldyBQcm9taXNlKHc9PntmdW5jdGlvbiBfKCl7aWYoYi5zdHlsZS5kaXNwbGF5PSJmbGV4IixiLnN0eWxlLmZsZXhEaXJlY3Rpb249ImNvbHVtbiIseCl7bGV0IFQ9aS5mb250U2l6ZT9pLmZvbnRTaXplOndpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmZvbnRTaXplLEw9cGFyc2VJbnQoVCwxMCkqNSsicHgiO2Iuc3R5bGUubWluV2lkdGg9TCxiLnN0eWxlLm1heFdpZHRoPUx9ZWxzZSBiLnN0eWxlLndpZHRoPSIxMDAlIjt3KGIpfW8oXywic2V0dXBJbWFnZSIpLHNldFRpbWVvdXQoKCk9PntiLmNvbXBsZXRlJiZfKCl9KSxiLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixfKSxiLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLF8pfSkpKX1wPWcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkseS5hdHRyKCJ3aWR0aCIscC53aWR0aCkseS5hdHRyKCJoZWlnaHQiLHAuaGVpZ2h0KX1yZXR1cm4gcz91LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1wLndpZHRoLzIrIiwgIistcC5oZWlnaHQvMisiKSIpOnUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsICIrLXAuaGVpZ2h0LzIrIikiKSxlLmNlbnRlckxhYmVsJiZ1LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1wLndpZHRoLzIrIiwgIistcC5oZWlnaHQvMisiKSIpLHUuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikse3NoYXBlU3ZnOmwsYmJveDpwLGhhbGZQYWRkaW5nOm0sbGFiZWw6dX19LCJsYWJlbEhlbHBlciIpLGpuPW8oKHQsZSk9PntsZXQgcj1lLm5vZGUoKS5nZXRCQm94KCk7dC53aWR0aD1yLndpZHRoLHQuaGVpZ2h0PXIuaGVpZ2h0fSwidXBkYXRlTm9kZUJvdW5kcyIpO28oZWMsImluc2VydFBvbHlnb25TaGFwZSIpfSk7dmFyIGZudCxEdmUsTnZlPU0oKCk9PnsidXNlIHN0cmljdCI7YUYoKTt1dCgpO1Z0KCk7aUYoKTtmbnQ9byhhc3luYyh0LGUpPT57ZS51c2VIdG1sTGFiZWxzfHxwZSgpLmZsb3djaGFydC5odG1sTGFiZWxzfHwoZS5jZW50ZXJMYWJlbD0hMCk7bGV0e3NoYXBlU3ZnOm4sYmJveDppLGhhbGZQYWRkaW5nOmF9PWF3YWl0IFJpKHQsZSwibm9kZSAiK2UuY2xhc3NlcywhMCk7WS5pbmZvKCJDbGFzc2VzID0gIixlLmNsYXNzZXMpO2xldCBzPW4uaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHMuYXR0cigicngiLGUucngpLmF0dHIoInJ5IixlLnJ5KS5hdHRyKCJ4IiwtaS53aWR0aC8yLWEpLmF0dHIoInkiLC1pLmhlaWdodC8yLWEpLmF0dHIoIndpZHRoIixpLndpZHRoK2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixpLmhlaWdodCtlLnBhZGRpbmcpLGpuKGUscyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24obCl7cmV0dXJuIEluLnJlY3QoZSxsKX0sbn0sIm5vdGUiKSxEdmU9Zm50fSk7ZnVuY3Rpb24gc0YodCxlLHIsbil7bGV0IGk9W10sYT1vKGw9PntpLnB1c2gobCwwKX0sImFkZEJvcmRlciIpLHM9byhsPT57aS5wdXNoKDAsbCl9LCJza2lwQm9yZGVyIik7ZS5pbmNsdWRlcygidCIpPyhZLmRlYnVnKCJhZGQgdG9wIGJvcmRlciIpLGEocikpOnMociksZS5pbmNsdWRlcygiciIpPyhZLmRlYnVnKCJhZGQgcmlnaHQgYm9yZGVyIiksYShuKSk6cyhuKSxlLmluY2x1ZGVzKCJiIik/KFkuZGVidWcoImFkZCBib3R0b20gYm9yZGVyIiksYShyKSk6cyhyKSxlLmluY2x1ZGVzKCJsIik/KFkuZGVidWcoImFkZCBsZWZ0IGJvcmRlciIpLGEobikpOnMobiksdC5hdHRyKCJzdHJva2UtZGFzaGFycmF5IixpLmpvaW4oIiAiKSl9dmFyIFJ2ZSxrbyxNdmUsZG50LHBudCxtbnQsZ250LHludCx2bnQseG50LGJudCx3bnQsVG50LGtudCxFbnQsU250LENudCxBbnQsX250LExudCxEbnQsTm50LEl2ZSxSbnQsTW50LE92ZSxkUyxvRixQdmUsQnZlPU0oKCk9PnsidXNlIHN0cmljdCI7cHIoKTtWdCgpO2ZyKCk7dXQoKTt2dmUoKTt1UygpO2lGKCk7TnZlKCk7YUYoKTtSdmU9byh0PT50PyIgIit0OiIiLCJmb3JtYXRDbGFzcyIpLGtvPW8oKHQsZSk9PmAke2V8fCJub2RlIGRlZmF1bHQifSR7UnZlKHQuY2xhc3Nlcyl9ICR7UnZlKHQuY2xhc3MpfWAsImdldENsYXNzZXNGcm9tTm9kZSIpLE12ZT1vKGFzeW5jKHQsZSk9PntsZXR7c2hhcGVTdmc6cixiYm94Om59PWF3YWl0IFJpKHQsZSxrbyhlLHZvaWQgMCksITApLGk9bi53aWR0aCtlLnBhZGRpbmcsYT1uLmhlaWdodCtlLnBhZGRpbmcscz1pK2EsbD1be3g6cy8yLHk6MH0se3g6cyx5Oi1zLzJ9LHt4OnMvMix5Oi1zfSx7eDowLHk6LXMvMn1dO1kuaW5mbygiUXVlc3Rpb24gbWFpbiAoQ2lyY2xlKSIpO2xldCB1PWVjKHIscyxzLGwpO3JldHVybiB1LmF0dHIoInN0eWxlIixlLnN0eWxlKSxqbihlLHUpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGgpe3JldHVybiBZLndhcm4oIkludGVyc2VjdCBjYWxsZWQiKSxJbi5wb2x5Z29uKGUsbCxoKX0scn0sInF1ZXN0aW9uIiksZG50PW8oKHQsZSk9PntsZXQgcj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLG49MjgsaT1be3g6MCx5Om4vMn0se3g6bi8yLHk6MH0se3g6MCx5Oi1uLzJ9LHt4Oi1uLzIseTowfV07cmV0dXJuIHIuaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIixpLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gcy54KyIsIitzLnl9KS5qb2luKCIgIikpLmF0dHIoImNsYXNzIiwic3RhdGUtc3RhcnQiKS5hdHRyKCJyIiw3KS5hdHRyKCJ3aWR0aCIsMjgpLmF0dHIoImhlaWdodCIsMjgpLGUud2lkdGg9MjgsZS5oZWlnaHQ9MjgsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24ocyl7cmV0dXJuIEluLmNpcmNsZShlLDE0LHMpfSxyfSwiY2hvaWNlIikscG50PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bn09YXdhaXQgUmkodCxlLGtvKGUsdm9pZCAwKSwhMCksaT00LGE9bi5oZWlnaHQrZS5wYWRkaW5nLHM9YS9pLGw9bi53aWR0aCsyKnMrZS5wYWRkaW5nLHU9W3t4OnMseTowfSx7eDpsLXMseTowfSx7eDpsLHk6LWEvMn0se3g6bC1zLHk6LWF9LHt4OnMseTotYX0se3g6MCx5Oi1hLzJ9XSxoPWVjKHIsbCxhLHUpO3JldHVybiBoLmF0dHIoInN0eWxlIixlLnN0eWxlKSxqbihlLGgpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGYpe3JldHVybiBJbi5wb2x5Z29uKGUsdSxmKX0scn0sImhleGFnb24iKSxtbnQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpufT1hd2FpdCBSaSh0LGUsdm9pZCAwLCEwKSxpPTIsYT1uLmhlaWdodCsyKmUucGFkZGluZyxzPWEvaSxsPW4ud2lkdGgrMipzK2UucGFkZGluZyx1PXl2ZShlLmRpcmVjdGlvbnMsbixlKSxoPWVjKHIsbCxhLHUpO3JldHVybiBoLmF0dHIoInN0eWxlIixlLnN0eWxlKSxqbihlLGgpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGYpe3JldHVybiBJbi5wb2x5Z29uKGUsdSxmKX0scn0sImJsb2NrX2Fycm93IiksZ250PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bn09YXdhaXQgUmkodCxlLGtvKGUsdm9pZCAwKSwhMCksaT1uLndpZHRoK2UucGFkZGluZyxhPW4uaGVpZ2h0K2UucGFkZGluZyxzPVt7eDotYS8yLHk6MH0se3g6aSx5OjB9LHt4OmkseTotYX0se3g6LWEvMix5Oi1hfSx7eDowLHk6LWEvMn1dO3JldHVybiBlYyhyLGksYSxzKS5hdHRyKCJzdHlsZSIsZS5zdHlsZSksZS53aWR0aD1pK2EsZS5oZWlnaHQ9YSxlLmludGVyc2VjdD1mdW5jdGlvbih1KXtyZXR1cm4gSW4ucG9seWdvbihlLHMsdSl9LHJ9LCJyZWN0X2xlZnRfaW52X2Fycm93IikseW50PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bn09YXdhaXQgUmkodCxlLGtvKGUpLCEwKSxpPW4ud2lkdGgrZS5wYWRkaW5nLGE9bi5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4Oi0yKmEvNix5OjB9LHt4OmktYS82LHk6MH0se3g6aSsyKmEvNix5Oi1hfSx7eDphLzYseTotYX1dLGw9ZWMocixpLGEscyk7cmV0dXJuIGwuYXR0cigic3R5bGUiLGUuc3R5bGUpLGpuKGUsbCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odSl7cmV0dXJuIEluLnBvbHlnb24oZSxzLHUpfSxyfSwibGVhbl9yaWdodCIpLHZudD1vKGFzeW5jKHQsZSk9PntsZXR7c2hhcGVTdmc6cixiYm94Om59PWF3YWl0IFJpKHQsZSxrbyhlLHZvaWQgMCksITApLGk9bi53aWR0aCtlLnBhZGRpbmcsYT1uLmhlaWdodCtlLnBhZGRpbmcscz1be3g6MiphLzYseTowfSx7eDppK2EvNix5OjB9LHt4OmktMiphLzYseTotYX0se3g6LWEvNix5Oi1hfV0sbD1lYyhyLGksYSxzKTtyZXR1cm4gbC5hdHRyKCJzdHlsZSIsZS5zdHlsZSksam4oZSxsKSxlLmludGVyc2VjdD1mdW5jdGlvbih1KXtyZXR1cm4gSW4ucG9seWdvbihlLHMsdSl9LHJ9LCJsZWFuX2xlZnQiKSx4bnQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpufT1hd2FpdCBSaSh0LGUsa28oZSx2b2lkIDApLCEwKSxpPW4ud2lkdGgrZS5wYWRkaW5nLGE9bi5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4Oi0yKmEvNix5OjB9LHt4OmkrMiphLzYseTowfSx7eDppLWEvNix5Oi1hfSx7eDphLzYseTotYX1dLGw9ZWMocixpLGEscyk7cmV0dXJuIGwuYXR0cigic3R5bGUiLGUuc3R5bGUpLGpuKGUsbCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odSl7cmV0dXJuIEluLnBvbHlnb24oZSxzLHUpfSxyfSwidHJhcGV6b2lkIiksYm50PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bn09YXdhaXQgUmkodCxlLGtvKGUsdm9pZCAwKSwhMCksaT1uLndpZHRoK2UucGFkZGluZyxhPW4uaGVpZ2h0K2UucGFkZGluZyxzPVt7eDphLzYseTowfSx7eDppLWEvNix5OjB9LHt4OmkrMiphLzYseTotYX0se3g6LTIqYS82LHk6LWF9XSxsPWVjKHIsaSxhLHMpO3JldHVybiBsLmF0dHIoInN0eWxlIixlLnN0eWxlKSxqbihlLGwpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHUpe3JldHVybiBJbi5wb2x5Z29uKGUscyx1KX0scn0sImludl90cmFwZXpvaWQiKSx3bnQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpufT1hd2FpdCBSaSh0LGUsa28oZSx2b2lkIDApLCEwKSxpPW4ud2lkdGgrZS5wYWRkaW5nLGE9bi5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4OjAseTowfSx7eDppK2EvMix5OjB9LHt4OmkseTotYS8yfSx7eDppK2EvMix5Oi1hfSx7eDowLHk6LWF9XSxsPWVjKHIsaSxhLHMpO3JldHVybiBsLmF0dHIoInN0eWxlIixlLnN0eWxlKSxqbihlLGwpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHUpe3JldHVybiBJbi5wb2x5Z29uKGUscyx1KX0scn0sInJlY3RfcmlnaHRfaW52X2Fycm93IiksVG50PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bn09YXdhaXQgUmkodCxlLGtvKGUsdm9pZCAwKSwhMCksaT1uLndpZHRoK2UucGFkZGluZyxhPWkvMixzPWEvKDIuNStpLzUwKSxsPW4uaGVpZ2h0K3MrZS5wYWRkaW5nLHU9Ik0gMCwiK3MrIiBhICIrYSsiLCIrcysiIDAsMCwwICIraSsiIDAgYSAiK2ErIiwiK3MrIiAwLDAsMCAiKy1pKyIgMCBsIDAsIitsKyIgYSAiK2ErIiwiK3MrIiAwLDAsMCAiK2krIiAwIGwgMCwiKy1sLGg9ci5hdHRyKCJsYWJlbC1vZmZzZXQteSIscykuaW5zZXJ0KCJwYXRoIiwiOmZpcnN0LWNoaWxkIikuYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoImQiLHUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1pLzIrIiwiKy0obC8yK3MpKyIpIik7cmV0dXJuIGpuKGUsaCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oZil7bGV0IGQ9SW4ucmVjdChlLGYpLHA9ZC54LWUueDtpZihhIT0wJiYoTWF0aC5hYnMocCk8ZS53aWR0aC8yfHxNYXRoLmFicyhwKT09ZS53aWR0aC8yJiZNYXRoLmFicyhkLnktZS55KT5lLmhlaWdodC8yLXMpKXtsZXQgbT1zKnMqKDEtcCpwLyhhKmEpKTttIT0wJiYobT1NYXRoLnNxcnQobSkpLG09cy1tLGYueS1lLnk+MCYmKG09LW0pLGQueSs9bX1yZXR1cm4gZH0scn0sImN5bGluZGVyIiksa250PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bixoYWxmUGFkZGluZzppfT1hd2FpdCBSaSh0LGUsIm5vZGUgIitlLmNsYXNzZXMrIiAiK2UuY2xhc3MsITApLGE9ci5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxzPWUucG9zaXRpb25lZD9lLndpZHRoOm4ud2lkdGgrZS5wYWRkaW5nLGw9ZS5wb3NpdGlvbmVkP2UuaGVpZ2h0Om4uaGVpZ2h0K2UucGFkZGluZyx1PWUucG9zaXRpb25lZD8tcy8yOi1uLndpZHRoLzItaSxoPWUucG9zaXRpb25lZD8tbC8yOi1uLmhlaWdodC8yLWk7aWYoYS5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoIngiLHUpLmF0dHIoInkiLGgpLmF0dHIoIndpZHRoIixzKS5hdHRyKCJoZWlnaHQiLGwpLGUucHJvcHMpe2xldCBmPW5ldyBTZXQoT2JqZWN0LmtleXMoZS5wcm9wcykpO2UucHJvcHMuYm9yZGVycyYmKHNGKGEsZS5wcm9wcy5ib3JkZXJzLHMsbCksZi5kZWxldGUoImJvcmRlcnMiKSksZi5mb3JFYWNoKGQ9PntZLndhcm4oYFVua25vd24gbm9kZSBwcm9wZXJ0eSAke2R9YCl9KX1yZXR1cm4gam4oZSxhKSxlLmludGVyc2VjdD1mdW5jdGlvbihmKXtyZXR1cm4gSW4ucmVjdChlLGYpfSxyfSwicmVjdCIpLEVudD1vKGFzeW5jKHQsZSk9PntsZXR7c2hhcGVTdmc6cixiYm94Om4saGFsZlBhZGRpbmc6aX09YXdhaXQgUmkodCxlLCJub2RlICIrZS5jbGFzc2VzLCEwKSxhPXIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikscz1lLnBvc2l0aW9uZWQ/ZS53aWR0aDpuLndpZHRoK2UucGFkZGluZyxsPWUucG9zaXRpb25lZD9lLmhlaWdodDpuLmhlaWdodCtlLnBhZGRpbmcsdT1lLnBvc2l0aW9uZWQ/LXMvMjotbi53aWR0aC8yLWksaD1lLnBvc2l0aW9uZWQ/LWwvMjotbi5oZWlnaHQvMi1pO2lmKGEuYXR0cigiY2xhc3MiLCJiYXNpYyBjbHVzdGVyIGNvbXBvc2l0ZSBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIsZS5zdHlsZSkuYXR0cigicngiLGUucngpLmF0dHIoInJ5IixlLnJ5KS5hdHRyKCJ4Iix1KS5hdHRyKCJ5IixoKS5hdHRyKCJ3aWR0aCIscykuYXR0cigiaGVpZ2h0IixsKSxlLnByb3BzKXtsZXQgZj1uZXcgU2V0KE9iamVjdC5rZXlzKGUucHJvcHMpKTtlLnByb3BzLmJvcmRlcnMmJihzRihhLGUucHJvcHMuYm9yZGVycyxzLGwpLGYuZGVsZXRlKCJib3JkZXJzIikpLGYuZm9yRWFjaChkPT57WS53YXJuKGBVbmtub3duIG5vZGUgcHJvcGVydHkgJHtkfWApfSl9cmV0dXJuIGpuKGUsYSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oZil7cmV0dXJuIEluLnJlY3QoZSxmKX0scn0sImNvbXBvc2l0ZSIpLFNudD1vKGFzeW5jKHQsZSk9PntsZXR7c2hhcGVTdmc6cn09YXdhaXQgUmkodCxlLCJsYWJlbCIsITApO1kudHJhY2UoIkNsYXNzZXMgPSAiLGUuY2xhc3MpO2xldCBuPXIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksaT0wLGE9MDtpZihuLmF0dHIoIndpZHRoIixpKS5hdHRyKCJoZWlnaHQiLGEpLHIuYXR0cigiY2xhc3MiLCJsYWJlbCBlZGdlTGFiZWwiKSxlLnByb3BzKXtsZXQgcz1uZXcgU2V0KE9iamVjdC5rZXlzKGUucHJvcHMpKTtlLnByb3BzLmJvcmRlcnMmJihzRihuLGUucHJvcHMuYm9yZGVycyxpLGEpLHMuZGVsZXRlKCJib3JkZXJzIikpLHMuZm9yRWFjaChsPT57WS53YXJuKGBVbmtub3duIG5vZGUgcHJvcGVydHkgJHtsfWApfSl9cmV0dXJuIGpuKGUsbiksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24ocyl7cmV0dXJuIEluLnJlY3QoZSxzKX0scn0sImxhYmVsUmVjdCIpO28oc0YsImFwcGx5Tm9kZVByb3BlcnR5Qm9yZGVycyIpO0NudD1vKCh0LGUpPT57bGV0IHI7ZS5jbGFzc2VzP3I9Im5vZGUgIitlLmNsYXNzZXM6cj0ibm9kZSBkZWZhdWx0IjtsZXQgbj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixyKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksaT1uLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGE9bi5pbnNlcnQoImxpbmUiKSxzPW4uaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLGw9ZS5sYWJlbFRleHQuZmxhdD9lLmxhYmVsVGV4dC5mbGF0KCk6ZS5sYWJlbFRleHQsdT0iIjt0eXBlb2YgbD09Im9iamVjdCI/dT1sWzBdOnU9bCxZLmluZm8oIkxhYmVsIHRleHQgYWJjNzkiLHUsbCx0eXBlb2YgbD09Im9iamVjdCIpO2xldCBoPXMubm9kZSgpLmFwcGVuZENoaWxkKGdzKHUsZS5sYWJlbFN0eWxlLCEwLCEwKSksZj17d2lkdGg6MCxoZWlnaHQ6MH07aWYoeHIocGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2xldCB5PWguY2hpbGRyZW5bMF0sdj1WZShoKTtmPXkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdi5hdHRyKCJ3aWR0aCIsZi53aWR0aCksdi5hdHRyKCJoZWlnaHQiLGYuaGVpZ2h0KX1ZLmluZm8oIlRleHQgMiIsbCk7bGV0IGQ9bC5zbGljZSgxLGwubGVuZ3RoKSxwPWguZ2V0QkJveCgpLG09cy5ub2RlKCkuYXBwZW5kQ2hpbGQoZ3MoZC5qb2luP2Quam9pbigiPGJyLz4iKTpkLGUubGFiZWxTdHlsZSwhMCwhMCkpO2lmKHhyKHBlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtsZXQgeT1tLmNoaWxkcmVuWzBdLHY9VmUobSk7Zj15LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHYuYXR0cigid2lkdGgiLGYud2lkdGgpLHYuYXR0cigiaGVpZ2h0IixmLmhlaWdodCl9bGV0IGc9ZS5wYWRkaW5nLzI7cmV0dXJuIFZlKG0pLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoZi53aWR0aD5wLndpZHRoPzA6KHAud2lkdGgtZi53aWR0aCkvMikrIiwgIisocC5oZWlnaHQrZys1KSsiKSIpLFZlKGgpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoZi53aWR0aDxwLndpZHRoPzA6LShwLndpZHRoLWYud2lkdGgpLzIpKyIsIDApIiksZj1zLm5vZGUoKS5nZXRCQm94KCkscy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistZi53aWR0aC8yKyIsICIrKC1mLmhlaWdodC8yLWcrMykrIikiKSxpLmF0dHIoImNsYXNzIiwib3V0ZXIgdGl0bGUtc3RhdGUiKS5hdHRyKCJ4IiwtZi53aWR0aC8yLWcpLmF0dHIoInkiLC1mLmhlaWdodC8yLWcpLmF0dHIoIndpZHRoIixmLndpZHRoK2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixmLmhlaWdodCtlLnBhZGRpbmcpLGEuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1mLndpZHRoLzItZykuYXR0cigieDIiLGYud2lkdGgvMitnKS5hdHRyKCJ5MSIsLWYuaGVpZ2h0LzItZytwLmhlaWdodCtnKS5hdHRyKCJ5MiIsLWYuaGVpZ2h0LzItZytwLmhlaWdodCtnKSxqbihlLGkpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHkpe3JldHVybiBJbi5yZWN0KGUseSl9LG59LCJyZWN0V2l0aFRpdGxlIiksQW50PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bn09YXdhaXQgUmkodCxlLGtvKGUsdm9pZCAwKSwhMCksaT1uLmhlaWdodCtlLnBhZGRpbmcsYT1uLndpZHRoK2kvNCtlLnBhZGRpbmcscz1yLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsaS8yKS5hdHRyKCJyeSIsaS8yKS5hdHRyKCJ4IiwtYS8yKS5hdHRyKCJ5IiwtaS8yKS5hdHRyKCJ3aWR0aCIsYSkuYXR0cigiaGVpZ2h0IixpKTtyZXR1cm4gam4oZSxzKSxlLmludGVyc2VjdD1mdW5jdGlvbihsKXtyZXR1cm4gSW4ucmVjdChlLGwpfSxyfSwic3RhZGl1bSIpLF9udD1vKGFzeW5jKHQsZSk9PntsZXR7c2hhcGVTdmc6cixiYm94Om4saGFsZlBhZGRpbmc6aX09YXdhaXQgUmkodCxlLGtvKGUsdm9pZCAwKSwhMCksYT1yLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIGEuYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoInJ4IixlLnJ4KS5hdHRyKCJyeSIsZS5yeSkuYXR0cigiciIsbi53aWR0aC8yK2kpLmF0dHIoIndpZHRoIixuLndpZHRoK2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixuLmhlaWdodCtlLnBhZGRpbmcpLFkuaW5mbygiQ2lyY2xlIG1haW4iKSxqbihlLGEpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHMpe3JldHVybiBZLmluZm8oIkNpcmNsZSBpbnRlcnNlY3QiLGUsbi53aWR0aC8yK2kscyksSW4uY2lyY2xlKGUsbi53aWR0aC8yK2kscyl9LHJ9LCJjaXJjbGUiKSxMbnQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpuLGhhbGZQYWRkaW5nOml9PWF3YWl0IFJpKHQsZSxrbyhlLHZvaWQgMCksITApLGE9NSxzPXIuaW5zZXJ0KCJnIiwiOmZpcnN0LWNoaWxkIiksbD1zLmluc2VydCgiY2lyY2xlIiksdT1zLmluc2VydCgiY2lyY2xlIik7cmV0dXJuIHMuYXR0cigiY2xhc3MiLGUuY2xhc3MpLGwuYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoInJ4IixlLnJ4KS5hdHRyKCJyeSIsZS5yeSkuYXR0cigiciIsbi53aWR0aC8yK2krYSkuYXR0cigid2lkdGgiLG4ud2lkdGgrZS5wYWRkaW5nK2EqMikuYXR0cigiaGVpZ2h0IixuLmhlaWdodCtlLnBhZGRpbmcrYSoyKSx1LmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoInIiLG4ud2lkdGgvMitpKS5hdHRyKCJ3aWR0aCIsbi53aWR0aCtlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsbi5oZWlnaHQrZS5wYWRkaW5nKSxZLmluZm8oIkRvdWJsZUNpcmNsZSBtYWluIiksam4oZSxsKSxlLmludGVyc2VjdD1mdW5jdGlvbihoKXtyZXR1cm4gWS5pbmZvKCJEb3VibGVDaXJjbGUgaW50ZXJzZWN0IixlLG4ud2lkdGgvMitpK2EsaCksSW4uY2lyY2xlKGUsbi53aWR0aC8yK2krYSxoKX0scn0sImRvdWJsZWNpcmNsZSIpLERudD1vKGFzeW5jKHQsZSk9PntsZXR7c2hhcGVTdmc6cixiYm94Om59PWF3YWl0IFJpKHQsZSxrbyhlLHZvaWQgMCksITApLGk9bi53aWR0aCtlLnBhZGRpbmcsYT1uLmhlaWdodCtlLnBhZGRpbmcscz1be3g6MCx5OjB9LHt4OmkseTowfSx7eDppLHk6LWF9LHt4OjAseTotYX0se3g6MCx5OjB9LHt4Oi04LHk6MH0se3g6aSs4LHk6MH0se3g6aSs4LHk6LWF9LHt4Oi04LHk6LWF9LHt4Oi04LHk6MH1dLGw9ZWMocixpLGEscyk7cmV0dXJuIGwuYXR0cigic3R5bGUiLGUuc3R5bGUpLGpuKGUsbCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odSl7cmV0dXJuIEluLnBvbHlnb24oZSxzLHUpfSxyfSwic3Vicm91dGluZSIpLE5udD1vKCh0LGUpPT57bGV0IHI9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxuPXIuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gbi5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDE0KS5hdHRyKCJoZWlnaHQiLDE0KSxqbihlLG4pLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGkpe3JldHVybiBJbi5jaXJjbGUoZSw3LGkpfSxyfSwic3RhcnQiKSxJdmU9bygodCxlLHIpPT57bGV0IG49dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxpPTcwLGE9MTA7cj09PSJMUiImJihpPTEwLGE9NzApO2xldCBzPW4uYXBwZW5kKCJyZWN0IikuYXR0cigieCIsLTEqaS8yKS5hdHRyKCJ5IiwtMSphLzIpLmF0dHIoIndpZHRoIixpKS5hdHRyKCJoZWlnaHQiLGEpLmF0dHIoImNsYXNzIiwiZm9yay1qb2luIik7cmV0dXJuIGpuKGUscyksZS5oZWlnaHQ9ZS5oZWlnaHQrZS5wYWRkaW5nLzIsZS53aWR0aD1lLndpZHRoK2UucGFkZGluZy8yLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGwpe3JldHVybiBJbi5yZWN0KGUsbCl9LG59LCJmb3JrSm9pbiIpLFJudD1vKCh0LGUpPT57bGV0IHI9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxuPXIuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKSxpPXIuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gaS5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDE0KS5hdHRyKCJoZWlnaHQiLDE0KSxuLmF0dHIoImNsYXNzIiwic3RhdGUtZW5kIikuYXR0cigiciIsNSkuYXR0cigid2lkdGgiLDEwKS5hdHRyKCJoZWlnaHQiLDEwKSxqbihlLGkpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGEpe3JldHVybiBJbi5jaXJjbGUoZSw3LGEpfSxyfSwiZW5kIiksTW50PW8oKHQsZSk9PntsZXQgcj1lLnBhZGRpbmcvMixuPTQsaT04LGE7ZS5jbGFzc2VzP2E9Im5vZGUgIitlLmNsYXNzZXM6YT0ibm9kZSBkZWZhdWx0IjtsZXQgcz10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixhKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksbD1zLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHU9cy5pbnNlcnQoImxpbmUiKSxoPXMuaW5zZXJ0KCJsaW5lIiksZj0wLGQ9bixwPXMuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLG09MCxnPWUuY2xhc3NEYXRhLmFubm90YXRpb25zPy5bMF0seT1lLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXT8iXHhBQiIrZS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0rIlx4QkIiOiIiLHY9cC5ub2RlKCkuYXBwZW5kQ2hpbGQoZ3MoeSxlLmxhYmVsU3R5bGUsITAsITApKSx4PXYuZ2V0QkJveCgpO2lmKHhyKHBlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtsZXQgUz12LmNoaWxkcmVuWzBdLEE9VmUodik7eD1TLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEEuYXR0cigid2lkdGgiLHgud2lkdGgpLEEuYXR0cigiaGVpZ2h0Iix4LmhlaWdodCl9ZS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0mJihkKz14LmhlaWdodCtuLGYrPXgud2lkdGgpO2xldCBiPWUuY2xhc3NEYXRhLmxhYmVsO2UuY2xhc3NEYXRhLnR5cGUhPT12b2lkIDAmJmUuY2xhc3NEYXRhLnR5cGUhPT0iIiYmKHBlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHM/Yis9IiZsdDsiK2UuY2xhc3NEYXRhLnR5cGUrIiZndDsiOmIrPSI8IitlLmNsYXNzRGF0YS50eXBlKyI+Iik7bGV0IHc9cC5ub2RlKCkuYXBwZW5kQ2hpbGQoZ3MoYixlLmxhYmVsU3R5bGUsITAsITApKTtWZSh3KS5hdHRyKCJjbGFzcyIsImNsYXNzVGl0bGUiKTtsZXQgXz13LmdldEJCb3goKTtpZih4cihwZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7bGV0IFM9dy5jaGlsZHJlblswXSxBPVZlKHcpO189Uy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxBLmF0dHIoIndpZHRoIixfLndpZHRoKSxBLmF0dHIoImhlaWdodCIsXy5oZWlnaHQpfWQrPV8uaGVpZ2h0K24sXy53aWR0aD5mJiYoZj1fLndpZHRoKTtsZXQgVD1bXTtlLmNsYXNzRGF0YS5tZW1iZXJzLmZvckVhY2goUz0+e2xldCBBPVMuZ2V0RGlzcGxheURldGFpbHMoKSxJPUEuZGlzcGxheVRleHQ7cGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscyYmKEk9SS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKSk7bGV0IEQ9cC5ub2RlKCkuYXBwZW5kQ2hpbGQoZ3MoSSxBLmNzc1N0eWxlP0EuY3NzU3R5bGU6ZS5sYWJlbFN0eWxlLCEwLCEwKSksaz1ELmdldEJCb3goKTtpZih4cihwZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7bGV0IFI9RC5jaGlsZHJlblswXSxDPVZlKEQpO2s9Ui5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxDLmF0dHIoIndpZHRoIixrLndpZHRoKSxDLmF0dHIoImhlaWdodCIsay5oZWlnaHQpfWsud2lkdGg+ZiYmKGY9ay53aWR0aCksZCs9ay5oZWlnaHQrbixULnB1c2goRCl9KSxkKz1pO2xldCBFPVtdO2lmKGUuY2xhc3NEYXRhLm1ldGhvZHMuZm9yRWFjaChTPT57bGV0IEE9Uy5nZXREaXNwbGF5RGV0YWlscygpLEk9QS5kaXNwbGF5VGV4dDtwZSgpLmZsb3djaGFydC5odG1sTGFiZWxzJiYoST1JLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpKTtsZXQgRD1wLm5vZGUoKS5hcHBlbmRDaGlsZChncyhJLEEuY3NzU3R5bGU/QS5jc3NTdHlsZTplLmxhYmVsU3R5bGUsITAsITApKSxrPUQuZ2V0QkJveCgpO2lmKHhyKHBlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtsZXQgUj1ELmNoaWxkcmVuWzBdLEM9VmUoRCk7az1SLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEMuYXR0cigid2lkdGgiLGsud2lkdGgpLEMuYXR0cigiaGVpZ2h0IixrLmhlaWdodCl9ay53aWR0aD5mJiYoZj1rLndpZHRoKSxkKz1rLmhlaWdodCtuLEUucHVzaChEKX0pLGQrPWksZyl7bGV0IFM9KGYteC53aWR0aCkvMjtWZSh2KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKC0xKmYvMitTKSsiLCAiKy0xKmQvMisiKSIpLG09eC5oZWlnaHQrbn1sZXQgTD0oZi1fLndpZHRoKS8yO3JldHVybiBWZSh3KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKC0xKmYvMitMKSsiLCAiKygtMSpkLzIrbSkrIikiKSxtKz1fLmhlaWdodCtuLHUuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1mLzItcikuYXR0cigieDIiLGYvMityKS5hdHRyKCJ5MSIsLWQvMi1yK2krbSkuYXR0cigieTIiLC1kLzItcitpK20pLG0rPWksVC5mb3JFYWNoKFM9PntWZShTKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrLWYvMisiLCAiKygtMSpkLzIrbStpLzIpKyIpIik7bGV0IEE9Uz8uZ2V0QkJveCgpO20rPShBPy5oZWlnaHQ/PzApK259KSxtKz1pLGguYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1mLzItcikuYXR0cigieDIiLGYvMityKS5hdHRyKCJ5MSIsLWQvMi1yK2krbSkuYXR0cigieTIiLC1kLzItcitpK20pLG0rPWksRS5mb3JFYWNoKFM9PntWZShTKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrLWYvMisiLCAiKygtMSpkLzIrbSkrIikiKTtsZXQgQT1TPy5nZXRCQm94KCk7bSs9KEE/LmhlaWdodD8/MCkrbn0pLGwuYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoImNsYXNzIiwib3V0ZXIgdGl0bGUtc3RhdGUiKS5hdHRyKCJ4IiwtZi8yLXIpLmF0dHIoInkiLC0oZC8yKS1yKS5hdHRyKCJ3aWR0aCIsZitlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsZCtlLnBhZGRpbmcpLGpuKGUsbCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oUyl7cmV0dXJuIEluLnJlY3QoZSxTKX0sc30sImNsYXNzX2JveCIpLE92ZT17cmhvbWJ1czpNdmUsY29tcG9zaXRlOkVudCxxdWVzdGlvbjpNdmUscmVjdDprbnQsbGFiZWxSZWN0OlNudCxyZWN0V2l0aFRpdGxlOkNudCxjaG9pY2U6ZG50LGNpcmNsZTpfbnQsZG91YmxlY2lyY2xlOkxudCxzdGFkaXVtOkFudCxoZXhhZ29uOnBudCxibG9ja19hcnJvdzptbnQscmVjdF9sZWZ0X2ludl9hcnJvdzpnbnQsbGVhbl9yaWdodDp5bnQsbGVhbl9sZWZ0OnZudCx0cmFwZXpvaWQ6eG50LGludl90cmFwZXpvaWQ6Ym50LHJlY3RfcmlnaHRfaW52X2Fycm93OndudCxjeWxpbmRlcjpUbnQsc3RhcnQ6Tm50LGVuZDpSbnQsbm90ZTpEdmUsc3Vicm91dGluZTpEbnQsZm9yazpJdmUsam9pbjpJdmUsY2xhc3NfYm94Ok1udH0sZFM9e30sb0Y9byhhc3luYyh0LGUscik9PntsZXQgbixpO2lmKGUubGluayl7bGV0IGE7cGUoKS5zZWN1cml0eUxldmVsPT09InNhbmRib3giP2E9Il90b3AiOmUubGlua1RhcmdldCYmKGE9ZS5saW5rVGFyZ2V0fHwiX2JsYW5rIiksbj10Lmluc2VydCgic3ZnOmEiKS5hdHRyKCJ4bGluazpocmVmIixlLmxpbmspLmF0dHIoInRhcmdldCIsYSksaT1hd2FpdCBPdmVbZS5zaGFwZV0obixlLHIpfWVsc2UgaT1hd2FpdCBPdmVbZS5zaGFwZV0odCxlLHIpLG49aTtyZXR1cm4gZS50b29sdGlwJiZpLmF0dHIoInRpdGxlIixlLnRvb2x0aXApLGUuY2xhc3MmJmkuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQgIitlLmNsYXNzKSxkU1tlLmlkXT1uLGUuaGF2ZUNhbGxiYWNrJiZkU1tlLmlkXS5hdHRyKCJjbGFzcyIsZFNbZS5pZF0uYXR0cigiY2xhc3MiKSsiIGNsaWNrYWJsZSIpLG59LCJpbnNlcnROb2RlIiksUHZlPW8odD0+e2xldCBlPWRTW3QuaWRdO1kudHJhY2UoIlRyYW5zZm9ybWluZyBub2RlIix0LmRpZmYsdCwidHJhbnNsYXRlKCIrKHQueC10LndpZHRoLzItNSkrIiwgIit0LndpZHRoLzIrIikiKTtsZXQgcj04LG49dC5kaWZmfHwwO3JldHVybiB0LmNsdXN0ZXJOb2RlP2UuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHQueCtuLXQud2lkdGgvMikrIiwgIisodC55LXQuaGVpZ2h0LzItcikrIikiKTplLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QueCsiLCAiK3QueSsiKSIpLG59LCJwb3NpdGlvbk5vZGUiKX0pO2Z1bmN0aW9uIEZ2ZSh0LGUscj0hMSl7bGV0IG49dCxpPSJkZWZhdWx0Ijsobj8uY2xhc3Nlcz8ubGVuZ3RofHwwKT4wJiYoaT0obj8uY2xhc3Nlcz8/W10pLmpvaW4oIiAiKSksaT1pKyIgZmxvd2NoYXJ0LWxhYmVsIjtsZXQgYT0wLHM9IiIsbDtzd2l0Y2gobi50eXBlKXtjYXNlInJvdW5kIjphPTUscz0icmVjdCI7YnJlYWs7Y2FzZSJjb21wb3NpdGUiOmE9MCxzPSJjb21wb3NpdGUiLGw9MDticmVhaztjYXNlInNxdWFyZSI6cz0icmVjdCI7YnJlYWs7Y2FzZSJkaWFtb25kIjpzPSJxdWVzdGlvbiI7YnJlYWs7Y2FzZSJoZXhhZ29uIjpzPSJoZXhhZ29uIjticmVhaztjYXNlImJsb2NrX2Fycm93IjpzPSJibG9ja19hcnJvdyI7YnJlYWs7Y2FzZSJvZGQiOnM9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UibGVhbl9yaWdodCI6cz0ibGVhbl9yaWdodCI7YnJlYWs7Y2FzZSJsZWFuX2xlZnQiOnM9ImxlYW5fbGVmdCI7YnJlYWs7Y2FzZSJ0cmFwZXpvaWQiOnM9InRyYXBlem9pZCI7YnJlYWs7Y2FzZSJpbnZfdHJhcGV6b2lkIjpzPSJpbnZfdHJhcGV6b2lkIjticmVhaztjYXNlInJlY3RfbGVmdF9pbnZfYXJyb3ciOnM9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UiY2lyY2xlIjpzPSJjaXJjbGUiO2JyZWFrO2Nhc2UiZWxsaXBzZSI6cz0iZWxsaXBzZSI7YnJlYWs7Y2FzZSJzdGFkaXVtIjpzPSJzdGFkaXVtIjticmVhaztjYXNlInN1YnJvdXRpbmUiOnM9InN1YnJvdXRpbmUiO2JyZWFrO2Nhc2UiY3lsaW5kZXIiOnM9ImN5bGluZGVyIjticmVhaztjYXNlImdyb3VwIjpzPSJyZWN0IjticmVhaztjYXNlImRvdWJsZWNpcmNsZSI6cz0iZG91YmxlY2lyY2xlIjticmVhaztkZWZhdWx0OnM9InJlY3QifWxldCB1PXQ5KG4/LnN0eWxlcz8/W10pLGg9bi5sYWJlbCxmPW4uc2l6ZT8/e3dpZHRoOjAsaGVpZ2h0OjAseDowLHk6MH07cmV0dXJue2xhYmVsU3R5bGU6dS5sYWJlbFN0eWxlLHNoYXBlOnMsbGFiZWxUZXh0Omgscng6YSxyeTphLGNsYXNzOmksc3R5bGU6dS5zdHlsZSxpZDpuLmlkLGRpcmVjdGlvbnM6bi5kaXJlY3Rpb25zLHdpZHRoOmYud2lkdGgsaGVpZ2h0OmYuaGVpZ2h0LHg6Zi54LHk6Zi55LHBvc2l0aW9uZWQ6cixpbnRlcnNlY3Q6dm9pZCAwLHR5cGU6bi50eXBlLHBhZGRpbmc6bD8/Q3IoKT8uYmxvY2s/LnBhZGRpbmc/PzB9fWFzeW5jIGZ1bmN0aW9uIEludCh0LGUscil7bGV0IG49RnZlKGUsciwhMSk7aWYobi50eXBlPT09Imdyb3VwIilyZXR1cm47bGV0IGk9Q3IoKSxhPWF3YWl0IG9GKHQsbix7Y29uZmlnOml9KSxzPWEubm9kZSgpLmdldEJCb3goKSxsPXIuZ2V0QmxvY2sobi5pZCk7bC5zaXplPXt3aWR0aDpzLndpZHRoLGhlaWdodDpzLmhlaWdodCx4OjAseTowLG5vZGU6YX0sci5zZXRCbG9jayhsKSxhLnJlbW92ZSgpfWFzeW5jIGZ1bmN0aW9uIE9udCh0LGUscil7bGV0IG49RnZlKGUsciwhMCk7aWYoci5nZXRCbG9jayhuLmlkKS50eXBlIT09InNwYWNlIil7bGV0IGE9Q3IoKTthd2FpdCBvRih0LG4se2NvbmZpZzphfSksZS5pbnRlcnNlY3Q9bj8uaW50ZXJzZWN0LFB2ZShuKX19YXN5bmMgZnVuY3Rpb24gbEYodCxlLHIsbil7Zm9yKGxldCBpIG9mIGUpYXdhaXQgbih0LGksciksaS5jaGlsZHJlbiYmYXdhaXQgbEYodCxpLmNoaWxkcmVuLHIsbil9YXN5bmMgZnVuY3Rpb24genZlKHQsZSxyKXthd2FpdCBsRih0LGUscixJbnQpfWFzeW5jIGZ1bmN0aW9uIEd2ZSh0LGUscil7YXdhaXQgbEYodCxlLHIsT250KX1hc3luYyBmdW5jdGlvbiAkdmUodCxlLHIsbixpKXtsZXQgYT1uZXcgSXIoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KTthLnNldEdyYXBoKHtyYW5rZGlyOiJUQiIsbm9kZXNlcDoxMCxyYW5rc2VwOjEwLG1hcmdpbng6OCxtYXJnaW55Ojh9KTtmb3IobGV0IHMgb2YgcilzLnNpemUmJmEuc2V0Tm9kZShzLmlkLHt3aWR0aDpzLnNpemUud2lkdGgsaGVpZ2h0OnMuc2l6ZS5oZWlnaHQsaW50ZXJzZWN0OnMuaW50ZXJzZWN0fSk7Zm9yKGxldCBzIG9mIGUpaWYocy5zdGFydCYmcy5lbmQpe2xldCBsPW4uZ2V0QmxvY2socy5zdGFydCksdT1uLmdldEJsb2NrKHMuZW5kKTtpZihsPy5zaXplJiZ1Py5zaXplKXtsZXQgaD1sLnNpemUsZj11LnNpemUsZD1be3g6aC54LHk6aC55fSx7eDpoLngrKGYueC1oLngpLzIseTpoLnkrKGYueS1oLnkpLzJ9LHt4OmYueCx5OmYueX1dO212ZSh0LHt2OnMuc3RhcnQsdzpzLmVuZCxuYW1lOnMuaWR9LHsuLi5zLGFycm93VHlwZUVuZDpzLmFycm93VHlwZUVuZCxhcnJvd1R5cGVTdGFydDpzLmFycm93VHlwZVN0YXJ0LHBvaW50czpkLGNsYXNzZXM6ImVkZ2UtdGhpY2tuZXNzLW5vcm1hbCBlZGdlLXBhdHRlcm4tc29saWQgZmxvd2NoYXJ0LWxpbmsgTFMtYTEgTEUtYjEifSx2b2lkIDAsImJsb2NrIixhLGkpLHMubGFiZWwmJihhd2FpdCBkdmUodCx7Li4ucyxsYWJlbDpzLmxhYmVsLGxhYmVsU3R5bGU6InN0cm9rZTogIzMzMzsgc3Ryb2tlLXdpZHRoOiAxLjVweDtmaWxsOm5vbmU7IixhcnJvd1R5cGVFbmQ6cy5hcnJvd1R5cGVFbmQsYXJyb3dUeXBlU3RhcnQ6cy5hcnJvd1R5cGVTdGFydCxwb2ludHM6ZCxjbGFzc2VzOiJlZGdlLXRoaWNrbmVzcy1ub3JtYWwgZWRnZS1wYXR0ZXJuLXNvbGlkIGZsb3djaGFydC1saW5rIExTLWExIExFLWIxIn0pLHB2ZSh7Li4ucyx4OmRbMV0ueCx5OmRbMV0ueX0se29yaWdpbmFsUGF0aDpkfSkpfX19dmFyIFZ2ZT1NKCgpPT57InVzZSBzdHJpY3QiO0dzKCk7WmEoKTtndmUoKTtCdmUoKTtocigpO28oRnZlLCJnZXROb2RlRnJvbUJsb2NrIik7byhJbnQsImNhbGN1bGF0ZUJsb2NrU2l6ZSIpO28oT250LCJpbnNlcnRCbG9ja1Bvc2l0aW9uZWQiKTtvKGxGLCJwZXJmb3JtT3BlcmF0aW9ucyIpO28oenZlLCJjYWxjdWxhdGVCbG9ja1NpemVzIik7byhHdmUsImluc2VydEJsb2NrcyIpO28oJHZlLCJpbnNlcnRFZGdlcyIpfSk7dmFyIFBudCxCbnQsVXZlLEh2ZT1NKCgpPT57InVzZSBzdHJpY3QiO3ByKCk7WmEoKTtudmUoKTt1dCgpO2FpKCk7b3ZlKCk7VnZlKCk7UG50PW8oZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kYi5nZXRDbGFzc2VzKCl9LCJnZXRDbGFzc2VzIiksQm50PW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7bGV0e3NlY3VyaXR5TGV2ZWw6aSxibG9jazphfT1DcigpLHM9bi5kYixsO2k9PT0ic2FuZGJveCImJihsPVZlKCIjaSIrZSkpO2xldCB1PWk9PT0ic2FuZGJveCI/VmUobC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KTpWZSgiYm9keSIpLGg9aT09PSJzYW5kYm94Ij91LnNlbGVjdChgW2lkPSIke2V9Il1gKTpWZShgW2lkPSIke2V9Il1gKTtydmUoaCxbInBvaW50IiwiY2lyY2xlIiwiY3Jvc3MiXSxuLnR5cGUsZSk7bGV0IGQ9cy5nZXRCbG9ja3MoKSxwPXMuZ2V0QmxvY2tzRmxhdCgpLG09cy5nZXRFZGdlcygpLGc9aC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImJsb2NrIik7YXdhaXQgenZlKGcsZCxzKTtsZXQgeT1zdmUocyk7aWYoYXdhaXQgR3ZlKGcsZCxzKSxhd2FpdCAkdmUoZyxtLHAscyxlKSx5KXtsZXQgdj15LHg9TWF0aC5tYXgoMSxNYXRoLnJvdW5kKC4xMjUqKHYud2lkdGgvdi5oZWlnaHQpKSksYj12LmhlaWdodCt4KzEwLHc9di53aWR0aCsxMCx7dXNlTWF4V2lkdGg6X309YTtacihoLGIsdywhIV8pLFkuZGVidWcoIkhlcmUgQm91bmRzIix5LHYpLGguYXR0cigidmlld0JveCIsYCR7di54LTV9ICR7di55LTV9ICR7di53aWR0aCsxMH0gJHt2LmhlaWdodCsxMH1gKX19LCJkcmF3IiksVXZlPXtkcmF3OkJudCxnZXRDbGFzc2VzOlBudH19KTt2YXIgV3ZlPXt9O3ZyKFd2ZSx7ZGlhZ3JhbTooKT0+Rm50fSk7dmFyIEZudCxZdmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtZeWUoKTtKeWUoKTt0dmUoKTtIdmUoKTtGbnQ9e3BhcnNlcjpXeWUsZGI6WnllLHJlbmRlcmVyOlV2ZSxzdHlsZXM6ZXZlfX0pO3ZhciBjRix1RixEYixqdmUsaEYseXMsbnUscFMsS3ZlLFZudCxOYixRdmUsWnZlLEp2ZSxlMmUsbVMsVmYsZ1M9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtjRj17TDoibGVmdCIsUjoicmlnaHQiLFQ6InRvcCIsQjoiYm90dG9tIn0sdUY9e0w6byh0PT5gJHt0fSwke3QvMn0gMCwke3R9IDAsMGAsIkwiKSxSOm8odD0+YDAsJHt0LzJ9ICR7dH0sMCAke3R9LCR7dH1gLCJSIiksVDpvKHQ9PmAwLDAgJHt0fSwwICR7dC8yfSwke3R9YCwiVCIpLEI6byh0PT5gJHt0LzJ9LDAgJHt0fSwke3R9IDAsJHt0fWAsIkIiKX0sRGI9e0w6bygodCxlKT0+dC1lKzIsIkwiKSxSOm8oKHQsZSk9PnQtMiwiUiIpLFQ6bygodCxlKT0+dC1lKzIsIlQiKSxCOm8oKHQsZSk9PnQtMiwiQiIpfSxqdmU9byhmdW5jdGlvbih0KXtyZXR1cm4geXModCk/dD09PSJMIj8iUiI6IkwiOnQ9PT0iVCI/IkIiOiJUIn0sImdldE9wcG9zaXRlQXJjaGl0ZWN0dXJlRGlyZWN0aW9uIiksaEY9byhmdW5jdGlvbih0KXtsZXQgZT10O3JldHVybiBlPT09IkwifHxlPT09IlIifHxlPT09IlQifHxlPT09IkIifSwiaXNBcmNoaXRlY3R1cmVEaXJlY3Rpb24iKSx5cz1vKGZ1bmN0aW9uKHQpe2xldCBlPXQ7cmV0dXJuIGU9PT0iTCJ8fGU9PT0iUiJ9LCJpc0FyY2hpdGVjdHVyZURpcmVjdGlvblgiKSxudT1vKGZ1bmN0aW9uKHQpe2xldCBlPXQ7cmV0dXJuIGU9PT0iVCJ8fGU9PT0iQiJ9LCJpc0FyY2hpdGVjdHVyZURpcmVjdGlvblkiKSxwUz1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9eXModCkmJm51KGUpLG49bnUodCkmJnlzKGUpO3JldHVybiByfHxufSwiaXNBcmNoaXRlY3R1cmVEaXJlY3Rpb25YWSIpLEt2ZT1vKGZ1bmN0aW9uKHQpe2xldCBlPXRbMF0scj10WzFdLG49eXMoZSkmJm51KHIpLGk9bnUoZSkmJnlzKHIpO3JldHVybiBufHxpfSwiaXNBcmNoaXRlY3R1cmVQYWlyWFkiKSxWbnQ9byhmdW5jdGlvbih0KXtyZXR1cm4gdCE9PSJMTCImJnQhPT0iUlIiJiZ0IT09IlRUIiYmdCE9PSJCQiJ9LCJpc1ZhbGlkQXJjaGl0ZWN0dXJlRGlyZWN0aW9uUGFpciIpLE5iPW8oZnVuY3Rpb24odCxlKXtsZXQgcj1gJHt0fSR7ZX1gO3JldHVybiBWbnQocik/cjp2b2lkIDB9LCJnZXRBcmNoaXRlY3R1cmVEaXJlY3Rpb25QYWlyIiksUXZlPW8oZnVuY3Rpb24oW3QsZV0scil7bGV0IG49clswXSxpPXJbMV07cmV0dXJuIHlzKG4pP251KGkpP1t0KyhuPT09IkwiPy0xOjEpLGUrKGk9PT0iVCI/MTotMSldOlt0KyhuPT09IkwiPy0xOjEpLGVdOnlzKGkpP1t0KyhpPT09IkwiPzE6LTEpLGUrKG49PT0iVCI/MTotMSldOlt0LGUrKG49PT0iVCI/MTotMSldfSwic2hpZnRQb3NpdGlvbkJ5QXJjaGl0ZWN0dXJlRGlyZWN0aW9uUGFpciIpLFp2ZT1vKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09IkxUInx8dD09PSJUTCI/WzEsMV06dD09PSJCTCJ8fHQ9PT0iTEIiP1sxLC0xXTp0PT09IkJSInx8dD09PSJSQiI/Wy0xLC0xXTpbLTEsMV19LCJnZXRBcmNoaXRlY3R1cmVEaXJlY3Rpb25YWUZhY3RvcnMiKSxKdmU9byhmdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlPT09InNlcnZpY2UifSwiaXNBcmNoaXRlY3R1cmVTZXJ2aWNlIiksZTJlPW8oZnVuY3Rpb24odCl7cmV0dXJuIHQudHlwZT09PSJqdW5jdGlvbiJ9LCJpc0FyY2hpdGVjdHVyZUp1bmN0aW9uIiksbVM9byh0PT50LmRhdGEoKSwiZWRnZURhdGEiKSxWZj1vKHQ9PnQuZGF0YSgpLCJub2RlRGF0YSIpfSk7ZnVuY3Rpb24gTWkodCl7bGV0IGU9cGUoKS5hcmNoaXRlY3R1cmU7cmV0dXJuIGU/Llt0XT9lW3RdOnQyZVt0XX12YXIgdDJlLG1yLFVudCxIbnQsV250LFludCxxbnQsWG50LGpudCxLbnQsUW50LFpudCxKbnQsZWl0LHRpdCxyaXQsaXAsUmI9TSgoKT0+eyJ1c2Ugc3RyaWN0IjticygpO1Z0KCk7ZEUoKTtBaSgpO2dTKCk7dDJlPXVyLmFyY2hpdGVjdHVyZSxtcj1uZXcgdmYoKCk9Pih7bm9kZXM6e30sZ3JvdXBzOnt9LGVkZ2VzOltdLHJlZ2lzdGVyZWRJZHM6e30sY29uZmlnOnQyZSxkYXRhU3RydWN0dXJlczp2b2lkIDAsZWxlbWVudHM6e319KSksVW50PW8oKCk9Pnttci5yZXNldCgpLExyKCl9LCJjbGVhciIpLEhudD1vKGZ1bmN0aW9uKHtpZDp0LGljb246ZSxpbjpyLHRpdGxlOm4saWNvblRleHQ6aX0pe2lmKG1yLnJlY29yZHMucmVnaXN0ZXJlZElkc1t0XSE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBzZXJ2aWNlIGlkIFske3R9XSBpcyBhbHJlYWR5IGluIHVzZSBieSBhbm90aGVyICR7bXIucmVjb3Jkcy5yZWdpc3RlcmVkSWRzW3RdfWApO2lmKHIhPT12b2lkIDApe2lmKHQ9PT1yKXRocm93IG5ldyBFcnJvcihgVGhlIHNlcnZpY2UgWyR7dH1dIGNhbm5vdCBiZSBwbGFjZWQgd2l0aGluIGl0c2VsZmApO2lmKG1yLnJlY29yZHMucmVnaXN0ZXJlZElkc1tyXT09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBzZXJ2aWNlIFske3R9XSdzIHBhcmVudCBkb2VzIG5vdCBleGlzdC4gUGxlYXNlIG1ha2Ugc3VyZSB0aGUgcGFyZW50IGlzIGNyZWF0ZWQgYmVmb3JlIHRoaXMgc2VydmljZWApO2lmKG1yLnJlY29yZHMucmVnaXN0ZXJlZElkc1tyXT09PSJub2RlIil0aHJvdyBuZXcgRXJyb3IoYFRoZSBzZXJ2aWNlIFske3R9XSdzIHBhcmVudCBpcyBub3QgYSBncm91cGApfW1yLnJlY29yZHMucmVnaXN0ZXJlZElkc1t0XT0ibm9kZSIsbXIucmVjb3Jkcy5ub2Rlc1t0XT17aWQ6dCx0eXBlOiJzZXJ2aWNlIixpY29uOmUsaWNvblRleHQ6aSx0aXRsZTpuLGVkZ2VzOltdLGluOnJ9fSwiYWRkU2VydmljZSIpLFdudD1vKCgpPT5PYmplY3QudmFsdWVzKG1yLnJlY29yZHMubm9kZXMpLmZpbHRlcihKdmUpLCJnZXRTZXJ2aWNlcyIpLFludD1vKGZ1bmN0aW9uKHtpZDp0LGluOmV9KXttci5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbdF09Im5vZGUiLG1yLnJlY29yZHMubm9kZXNbdF09e2lkOnQsdHlwZToianVuY3Rpb24iLGVkZ2VzOltdLGluOmV9fSwiYWRkSnVuY3Rpb24iKSxxbnQ9bygoKT0+T2JqZWN0LnZhbHVlcyhtci5yZWNvcmRzLm5vZGVzKS5maWx0ZXIoZTJlKSwiZ2V0SnVuY3Rpb25zIiksWG50PW8oKCk9Pk9iamVjdC52YWx1ZXMobXIucmVjb3Jkcy5ub2RlcyksImdldE5vZGVzIiksam50PW8odD0+bXIucmVjb3Jkcy5ub2Rlc1t0XSwiZ2V0Tm9kZSIpLEtudD1vKGZ1bmN0aW9uKHtpZDp0LGljb246ZSxpbjpyLHRpdGxlOm59KXtpZihtci5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbdF0hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgZ3JvdXAgaWQgWyR7dH1dIGlzIGFscmVhZHkgaW4gdXNlIGJ5IGFub3RoZXIgJHttci5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbdF19YCk7aWYociE9PXZvaWQgMCl7aWYodD09PXIpdGhyb3cgbmV3IEVycm9yKGBUaGUgZ3JvdXAgWyR7dH1dIGNhbm5vdCBiZSBwbGFjZWQgd2l0aGluIGl0c2VsZmApO2lmKG1yLnJlY29yZHMucmVnaXN0ZXJlZElkc1tyXT09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBncm91cCBbJHt0fV0ncyBwYXJlbnQgZG9lcyBub3QgZXhpc3QuIFBsZWFzZSBtYWtlIHN1cmUgdGhlIHBhcmVudCBpcyBjcmVhdGVkIGJlZm9yZSB0aGlzIGdyb3VwYCk7aWYobXIucmVjb3Jkcy5yZWdpc3RlcmVkSWRzW3JdPT09Im5vZGUiKXRocm93IG5ldyBFcnJvcihgVGhlIGdyb3VwIFske3R9XSdzIHBhcmVudCBpcyBub3QgYSBncm91cGApfW1yLnJlY29yZHMucmVnaXN0ZXJlZElkc1t0XT0iZ3JvdXAiLG1yLnJlY29yZHMuZ3JvdXBzW3RdPXtpZDp0LGljb246ZSx0aXRsZTpuLGluOnJ9fSwiYWRkR3JvdXAiKSxRbnQ9bygoKT0+T2JqZWN0LnZhbHVlcyhtci5yZWNvcmRzLmdyb3VwcyksImdldEdyb3VwcyIpLFpudD1vKGZ1bmN0aW9uKHtsaHNJZDp0LHJoc0lkOmUsbGhzRGlyOnIscmhzRGlyOm4sbGhzSW50bzppLHJoc0ludG86YSxsaHNHcm91cDpzLHJoc0dyb3VwOmwsdGl0bGU6dX0pe2lmKCFoRihyKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlyZWN0aW9uIGdpdmVuIGZvciBsZWZ0IGhhbmQgc2lkZSBvZiBlZGdlICR7dH0tLSR7ZX0uIEV4cGVjdGVkIChMLFIsVCxCKSBnb3QgJHtyfWApO2lmKCFoRihuKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlyZWN0aW9uIGdpdmVuIGZvciByaWdodCBoYW5kIHNpZGUgb2YgZWRnZSAke3R9LS0ke2V9LiBFeHBlY3RlZCAoTCxSLFQsQikgZ290ICR7bn1gKTtpZihtci5yZWNvcmRzLm5vZGVzW3RdPT09dm9pZCAwJiZtci5yZWNvcmRzLmdyb3Vwc1t0XT09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBsZWZ0LWhhbmQgaWQgWyR7dH1dIGRvZXMgbm90IHlldCBleGlzdC4gUGxlYXNlIGNyZWF0ZSB0aGUgc2VydmljZS9ncm91cCBiZWZvcmUgZGVjbGFyaW5nIGFuIGVkZ2UgdG8gaXQuYCk7aWYobXIucmVjb3Jkcy5ub2Rlc1tlXT09PXZvaWQgMCYmbXIucmVjb3Jkcy5ncm91cHNbdF09PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgcmlnaHQtaGFuZCBpZCBbJHtlfV0gZG9lcyBub3QgeWV0IGV4aXN0LiBQbGVhc2UgY3JlYXRlIHRoZSBzZXJ2aWNlL2dyb3VwIGJlZm9yZSBkZWNsYXJpbmcgYW4gZWRnZSB0byBpdC5gKTtsZXQgaD1tci5yZWNvcmRzLm5vZGVzW3RdLmluLGY9bXIucmVjb3Jkcy5ub2Rlc1tlXS5pbjtpZihzJiZoJiZmJiZoPT1mKXRocm93IG5ldyBFcnJvcihgVGhlIGxlZnQtaGFuZCBpZCBbJHt0fV0gaXMgbW9kaWZpZWQgdG8gdHJhdmVyc2UgdGhlIGdyb3VwIGJvdW5kYXJ5LCBidXQgdGhlIGVkZ2UgZG9lcyBub3QgcGFzcyB0aHJvdWdoIHR3byBncm91cHMuYCk7aWYobCYmaCYmZiYmaD09Zil0aHJvdyBuZXcgRXJyb3IoYFRoZSByaWdodC1oYW5kIGlkIFske2V9XSBpcyBtb2RpZmllZCB0byB0cmF2ZXJzZSB0aGUgZ3JvdXAgYm91bmRhcnksIGJ1dCB0aGUgZWRnZSBkb2VzIG5vdCBwYXNzIHRocm91Z2ggdHdvIGdyb3Vwcy5gKTtsZXQgZD17bGhzSWQ6dCxsaHNEaXI6cixsaHNJbnRvOmksbGhzR3JvdXA6cyxyaHNJZDplLHJoc0RpcjpuLHJoc0ludG86YSxyaHNHcm91cDpsLHRpdGxlOnV9O21yLnJlY29yZHMuZWRnZXMucHVzaChkKSxtci5yZWNvcmRzLm5vZGVzW3RdJiZtci5yZWNvcmRzLm5vZGVzW2VdJiYobXIucmVjb3Jkcy5ub2Rlc1t0XS5lZGdlcy5wdXNoKG1yLnJlY29yZHMuZWRnZXNbbXIucmVjb3Jkcy5lZGdlcy5sZW5ndGgtMV0pLG1yLnJlY29yZHMubm9kZXNbZV0uZWRnZXMucHVzaChtci5yZWNvcmRzLmVkZ2VzW21yLnJlY29yZHMuZWRnZXMubGVuZ3RoLTFdKSl9LCJhZGRFZGdlIiksSm50PW8oKCk9Pm1yLnJlY29yZHMuZWRnZXMsImdldEVkZ2VzIiksZWl0PW8oKCk9PntpZihtci5yZWNvcmRzLmRhdGFTdHJ1Y3R1cmVzPT09dm9pZCAwKXtsZXQgdD1PYmplY3QuZW50cmllcyhtci5yZWNvcmRzLm5vZGVzKS5yZWR1Y2UoKHMsW2wsdV0pPT4oc1tsXT11LmVkZ2VzLnJlZHVjZSgoaCxmKT0+e2lmKGYubGhzSWQ9PT1sKXtsZXQgZD1OYihmLmxoc0RpcixmLnJoc0Rpcik7ZCYmKGhbZF09Zi5yaHNJZCl9ZWxzZXtsZXQgZD1OYihmLnJoc0RpcixmLmxoc0Rpcik7ZCYmKGhbZF09Zi5saHNJZCl9cmV0dXJuIGh9LHt9KSxzKSx7fSksZT1PYmplY3Qua2V5cyh0KVswXSxyPXtbZV06MX0sbj1PYmplY3Qua2V5cyh0KS5yZWR1Y2UoKHMsbCk9Pmw9PT1lP3M6ey4uLnMsW2xdOjF9LHt9KSxpPW8ocz0+e2xldCBsPXtbc106WzAsMF19LHU9W3NdO2Zvcig7dS5sZW5ndGg+MDspe2xldCBoPXUuc2hpZnQoKTtpZihoKXtyW2hdPTEsZGVsZXRlIG5baF07bGV0IGY9dFtoXSxbZCxwXT1sW2hdO09iamVjdC5lbnRyaWVzKGYpLmZvckVhY2goKFttLGddKT0+e3JbZ118fChsW2ddPVF2ZShbZCxwXSxtKSx1LnB1c2goZykpfSl9fXJldHVybiBsfSwiQkZTIiksYT1baShlKV07Zm9yKDtPYmplY3Qua2V5cyhuKS5sZW5ndGg+MDspYS5wdXNoKGkoT2JqZWN0LmtleXMobilbMF0pKTttci5yZWNvcmRzLmRhdGFTdHJ1Y3R1cmVzPXthZGpMaXN0OnQsc3BhdGlhbE1hcHM6YX19cmV0dXJuIG1yLnJlY29yZHMuZGF0YVN0cnVjdHVyZXN9LCJnZXREYXRhU3RydWN0dXJlcyIpLHRpdD1vKCh0LGUpPT57bXIucmVjb3Jkcy5lbGVtZW50c1t0XT1lfSwic2V0RWxlbWVudEZvcklkIikscml0PW8odD0+bXIucmVjb3Jkcy5lbGVtZW50c1t0XSwiZ2V0RWxlbWVudEJ5SWQiKSxpcD17Y2xlYXI6VW50LHNldERpYWdyYW1UaXRsZTpjbixnZXREaWFncmFtVGl0bGU6SnIsc2V0QWNjVGl0bGU6TXIsZ2V0QWNjVGl0bGU6QnIsc2V0QWNjRGVzY3JpcHRpb246RnIsZ2V0QWNjRGVzY3JpcHRpb246enIsYWRkU2VydmljZTpIbnQsZ2V0U2VydmljZXM6V250LGFkZEp1bmN0aW9uOlludCxnZXRKdW5jdGlvbnM6cW50LGdldE5vZGVzOlhudCxnZXROb2RlOmpudCxhZGRHcm91cDpLbnQsZ2V0R3JvdXBzOlFudCxhZGRFZGdlOlpudCxnZXRFZGdlczpKbnQsc2V0RWxlbWVudEZvcklkOnRpdCxnZXRFbGVtZW50QnlJZDpyaXQsZ2V0RGF0YVN0cnVjdHVyZXM6ZWl0fTtvKE1pLCJnZXRDb25maWdGaWVsZCIpfSk7dmFyIG5pdCxyMmUsbjJlPU0oKCk9PnsidXNlIHN0cmljdCI7SGcoKTt1dCgpO1R4KCk7UmIoKTtuaXQ9bygodCxlKT0+e3lmKHQsZSksdC5ncm91cHMubWFwKGUuYWRkR3JvdXApLHQuc2VydmljZXMubWFwKHI9PmUuYWRkU2VydmljZSh7Li4ucix0eXBlOiJzZXJ2aWNlIn0pKSx0Lmp1bmN0aW9ucy5tYXAocj0+ZS5hZGRKdW5jdGlvbih7Li4ucix0eXBlOiJqdW5jdGlvbiJ9KSksdC5lZGdlcy5tYXAoZS5hZGRFZGdlKX0sInBvcHVsYXRlRGIiKSxyMmU9e3BhcnNlOm8oYXN5bmMgdD0+e2xldCBlPWF3YWl0IFlsKCJhcmNoaXRlY3R1cmUiLHQpO1kuZGVidWcoZSksbml0KGUsaXApfSwicGFyc2UiKX19KTt2YXIgaWl0LGkyZSxhMmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtpaXQ9byh0PT5gCiAgLmVkZ2UgewogICAgc3Ryb2tlLXdpZHRoOiAke3QuYXJjaEVkZ2VXaWR0aH07CiAgICBzdHJva2U6ICR7dC5hcmNoRWRnZUNvbG9yfTsKICAgIGZpbGw6IG5vbmU7CiAgfQoKICAuYXJyb3cgewogICAgZmlsbDogJHt0LmFyY2hFZGdlQXJyb3dDb2xvcn07CiAgfQoKICAubm9kZS1ia2cgewogICAgZmlsbDogbm9uZTsKICAgIHN0cm9rZTogJHt0LmFyY2hHcm91cEJvcmRlckNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogJHt0LmFyY2hHcm91cEJvcmRlcldpZHRofTsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDg7CiAgfQogIC5ub2RlLWljb24tdGV4dCB7CiAgICBkaXNwbGF5OiBmbGV4OyAKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgfQogIAogIC5ub2RlLWljb24tdGV4dCA+IGRpdiB7CiAgICBjb2xvcjogI2ZmZjsKICAgIG1hcmdpbjogMXB4OwogICAgaGVpZ2h0OiBmaXQtY29udGVudDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsKICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7CiAgfQpgLCJnZXRTdHlsZXMiKSxpMmU9aWl0fSk7dmFyIGRGPUVpKChNYixmRik9PnsidXNlIHN0cmljdCI7byhmdW5jdGlvbihlLHIpe3R5cGVvZiBNYj09Im9iamVjdCImJnR5cGVvZiBmRj09Im9iamVjdCI/ZkYuZXhwb3J0cz1yKCk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoW10scik6dHlwZW9mIE1iPT0ib2JqZWN0Ij9NYi5sYXlvdXRCYXNlPXIoKTplLmxheW91dEJhc2U9cigpfSwid2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iKShNYixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiByKG4pe2lmKGVbbl0pcmV0dXJuIGVbbl0uZXhwb3J0czt2YXIgaT1lW25dPXtpOm4sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gdFtuXS5jYWxsKGkuZXhwb3J0cyxpLGkuZXhwb3J0cyxyKSxpLmw9ITAsaS5leHBvcnRzfXJldHVybiBvKHIsIl9fd2VicGFja19yZXF1aXJlX18iKSxyLm09dCxyLmM9ZSxyLmk9ZnVuY3Rpb24obil7cmV0dXJuIG59LHIuZD1mdW5jdGlvbihuLGksYSl7ci5vKG4saSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGkse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDphfSl9LHIubj1mdW5jdGlvbihuKXt2YXIgaT1uJiZuLl9fZXNNb2R1bGU/byhmdW5jdGlvbigpe3JldHVybiBuLmRlZmF1bHR9LCJnZXREZWZhdWx0Iik6byhmdW5jdGlvbigpe3JldHVybiBufSwiZ2V0TW9kdWxlRXhwb3J0cyIpO3JldHVybiByLmQoaSwiYSIsaSksaX0sci5vPWZ1bmN0aW9uKG4saSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLGkpfSxyLnA9IiIscihyLnM9MjgpfShbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7fW8obiwiTGF5b3V0Q29uc3RhbnRzIiksbi5RVUFMSVRZPTEsbi5ERUZBVUxUX0NSRUFURV9CRU5EU19BU19ORUVERUQ9ITEsbi5ERUZBVUxUX0lOQ1JFTUVOVEFMPSExLG4uREVGQVVMVF9BTklNQVRJT05fT05fTEFZT1VUPSEwLG4uREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVD0hMSxuLkRFRkFVTFRfQU5JTUFUSU9OX1BFUklPRD01MCxuLkRFRkFVTFRfVU5JRk9STV9MRUFGX05PREVfU0laRVM9ITEsbi5ERUZBVUxUX0dSQVBIX01BUkdJTj0xNSxuLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz0hMSxuLlNJTVBMRV9OT0RFX1NJWkU9NDAsbi5TSU1QTEVfTk9ERV9IQUxGX1NJWkU9bi5TSU1QTEVfTk9ERV9TSVpFLzIsbi5FTVBUWV9DT01QT1VORF9OT0RFX1NJWkU9NDAsbi5NSU5fRURHRV9MRU5HVEg9MSxuLldPUkxEX0JPVU5EQVJZPTFlNixuLklOSVRJQUxfV09STERfQk9VTkRBUlk9bi5XT1JMRF9CT1VOREFSWS8xZTMsbi5XT1JMRF9DRU5URVJfWD0xMjAwLG4uV09STERfQ0VOVEVSX1k9OTAwLHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMiksaT1yKDgpLGE9cig5KTtmdW5jdGlvbiBzKHUsaCxmKXtuLmNhbGwodGhpcyxmKSx0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldD0hMSx0aGlzLnZHcmFwaE9iamVjdD1mLHRoaXMuYmVuZHBvaW50cz1bXSx0aGlzLnNvdXJjZT11LHRoaXMudGFyZ2V0PWh9byhzLCJMRWRnZSIpLHMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpO2Zvcih2YXIgbCBpbiBuKXNbbF09bltsXTtzLnByb3RvdHlwZS5nZXRTb3VyY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zb3VyY2V9LHMucHJvdG90eXBlLmdldFRhcmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRhcmdldH0scy5wcm90b3R5cGUuaXNJbnRlckdyYXBoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbnRlckdyYXBofSxzLnByb3RvdHlwZS5nZXRMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LHMucHJvdG90eXBlLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldH0scy5wcm90b3R5cGUuZ2V0QmVuZHBvaW50cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJlbmRwb2ludHN9LHMucHJvdG90eXBlLmdldExjYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxjYX0scy5wcm90b3R5cGUuZ2V0U291cmNlSW5MY2E9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zb3VyY2VJbkxjYX0scy5wcm90b3R5cGUuZ2V0VGFyZ2V0SW5MY2E9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YXJnZXRJbkxjYX0scy5wcm90b3R5cGUuZ2V0T3RoZXJFbmQ9ZnVuY3Rpb24odSl7aWYodGhpcy5zb3VyY2U9PT11KXJldHVybiB0aGlzLnRhcmdldDtpZih0aGlzLnRhcmdldD09PXUpcmV0dXJuIHRoaXMuc291cmNlO3Rocm93Ik5vZGUgaXMgbm90IGluY2lkZW50IHdpdGggdGhpcyBlZGdlIn0scy5wcm90b3R5cGUuZ2V0T3RoZXJFbmRJbkdyYXBoPWZ1bmN0aW9uKHUsaCl7Zm9yKHZhciBmPXRoaXMuZ2V0T3RoZXJFbmQodSksZD1oLmdldEdyYXBoTWFuYWdlcigpLmdldFJvb3QoKTs7KXtpZihmLmdldE93bmVyKCk9PWgpcmV0dXJuIGY7aWYoZi5nZXRPd25lcigpPT1kKWJyZWFrO2Y9Zi5nZXRPd25lcigpLmdldFBhcmVudCgpfXJldHVybiBudWxsfSxzLnByb3RvdHlwZS51cGRhdGVMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgdT1uZXcgQXJyYXkoNCk7dGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQ9aS5nZXRJbnRlcnNlY3Rpb24odGhpcy50YXJnZXQuZ2V0UmVjdCgpLHRoaXMuc291cmNlLmdldFJlY3QoKSx1KSx0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldHx8KHRoaXMubGVuZ3RoWD11WzBdLXVbMl0sdGhpcy5sZW5ndGhZPXVbMV0tdVszXSxNYXRoLmFicyh0aGlzLmxlbmd0aFgpPDEmJih0aGlzLmxlbmd0aFg9YS5zaWduKHRoaXMubGVuZ3RoWCkpLE1hdGguYWJzKHRoaXMubGVuZ3RoWSk8MSYmKHRoaXMubGVuZ3RoWT1hLnNpZ24odGhpcy5sZW5ndGhZKSksdGhpcy5sZW5ndGg9TWF0aC5zcXJ0KHRoaXMubGVuZ3RoWCp0aGlzLmxlbmd0aFgrdGhpcy5sZW5ndGhZKnRoaXMubGVuZ3RoWSkpfSxzLnByb3RvdHlwZS51cGRhdGVMZW5ndGhTaW1wbGU9ZnVuY3Rpb24oKXt0aGlzLmxlbmd0aFg9dGhpcy50YXJnZXQuZ2V0Q2VudGVyWCgpLXRoaXMuc291cmNlLmdldENlbnRlclgoKSx0aGlzLmxlbmd0aFk9dGhpcy50YXJnZXQuZ2V0Q2VudGVyWSgpLXRoaXMuc291cmNlLmdldENlbnRlclkoKSxNYXRoLmFicyh0aGlzLmxlbmd0aFgpPDEmJih0aGlzLmxlbmd0aFg9YS5zaWduKHRoaXMubGVuZ3RoWCkpLE1hdGguYWJzKHRoaXMubGVuZ3RoWSk8MSYmKHRoaXMubGVuZ3RoWT1hLnNpZ24odGhpcy5sZW5ndGhZKSksdGhpcy5sZW5ndGg9TWF0aC5zcXJ0KHRoaXMubGVuZ3RoWCp0aGlzLmxlbmd0aFgrdGhpcy5sZW5ndGhZKnRoaXMubGVuZ3RoWSl9LHQuZXhwb3J0cz1zfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oaSl7dGhpcy52R3JhcGhPYmplY3Q9aX1vKG4sIkxHcmFwaE9iamVjdCIpLHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMiksaT1yKDEwKSxhPXIoMTMpLHM9cigwKSxsPXIoMTYpLHU9cig1KTtmdW5jdGlvbiBoKGQscCxtLGcpe209PW51bGwmJmc9PW51bGwmJihnPXApLG4uY2FsbCh0aGlzLGcpLGQuZ3JhcGhNYW5hZ2VyIT1udWxsJiYoZD1kLmdyYXBoTWFuYWdlciksdGhpcy5lc3RpbWF0ZWRTaXplPWkuTUlOX1ZBTFVFLHRoaXMuaW5jbHVzaW9uVHJlZURlcHRoPWkuTUFYX1ZBTFVFLHRoaXMudkdyYXBoT2JqZWN0PWcsdGhpcy5lZGdlcz1bXSx0aGlzLmdyYXBoTWFuYWdlcj1kLG0hPW51bGwmJnAhPW51bGw/dGhpcy5yZWN0PW5ldyBhKHAueCxwLnksbS53aWR0aCxtLmhlaWdodCk6dGhpcy5yZWN0PW5ldyBhfW8oaCwiTE5vZGUiKSxoLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKTtmb3IodmFyIGYgaW4gbiloW2ZdPW5bZl07aC5wcm90b3R5cGUuZ2V0RWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlc30saC5wcm90b3R5cGUuZ2V0Q2hpbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZH0saC5wcm90b3R5cGUuZ2V0T3duZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lcn0saC5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LndpZHRofSxoLnByb3RvdHlwZS5zZXRXaWR0aD1mdW5jdGlvbihkKXt0aGlzLnJlY3Qud2lkdGg9ZH0saC5wcm90b3R5cGUuZ2V0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC5oZWlnaHR9LGgucHJvdG90eXBlLnNldEhlaWdodD1mdW5jdGlvbihkKXt0aGlzLnJlY3QuaGVpZ2h0PWR9LGgucHJvdG90eXBlLmdldENlbnRlclg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LngrdGhpcy5yZWN0LndpZHRoLzJ9LGgucHJvdG90eXBlLmdldENlbnRlclk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LnkrdGhpcy5yZWN0LmhlaWdodC8yfSxoLnByb3RvdHlwZS5nZXRDZW50ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHUodGhpcy5yZWN0LngrdGhpcy5yZWN0LndpZHRoLzIsdGhpcy5yZWN0LnkrdGhpcy5yZWN0LmhlaWdodC8yKX0saC5wcm90b3R5cGUuZ2V0TG9jYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHUodGhpcy5yZWN0LngsdGhpcy5yZWN0LnkpfSxoLnByb3RvdHlwZS5nZXRSZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdH0saC5wcm90b3R5cGUuZ2V0RGlhZ29uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMucmVjdC53aWR0aCp0aGlzLnJlY3Qud2lkdGgrdGhpcy5yZWN0LmhlaWdodCp0aGlzLnJlY3QuaGVpZ2h0KX0saC5wcm90b3R5cGUuZ2V0SGFsZlRoZURpYWdvbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLnJlY3QuaGVpZ2h0KnRoaXMucmVjdC5oZWlnaHQrdGhpcy5yZWN0LndpZHRoKnRoaXMucmVjdC53aWR0aCkvMn0saC5wcm90b3R5cGUuc2V0UmVjdD1mdW5jdGlvbihkLHApe3RoaXMucmVjdC54PWQueCx0aGlzLnJlY3QueT1kLnksdGhpcy5yZWN0LndpZHRoPXAud2lkdGgsdGhpcy5yZWN0LmhlaWdodD1wLmhlaWdodH0saC5wcm90b3R5cGUuc2V0Q2VudGVyPWZ1bmN0aW9uKGQscCl7dGhpcy5yZWN0Lng9ZC10aGlzLnJlY3Qud2lkdGgvMix0aGlzLnJlY3QueT1wLXRoaXMucmVjdC5oZWlnaHQvMn0saC5wcm90b3R5cGUuc2V0TG9jYXRpb249ZnVuY3Rpb24oZCxwKXt0aGlzLnJlY3QueD1kLHRoaXMucmVjdC55PXB9LGgucHJvdG90eXBlLm1vdmVCeT1mdW5jdGlvbihkLHApe3RoaXMucmVjdC54Kz1kLHRoaXMucmVjdC55Kz1wfSxoLnByb3RvdHlwZS5nZXRFZGdlTGlzdFRvTm9kZT1mdW5jdGlvbihkKXt2YXIgcD1bXSxtLGc9dGhpcztyZXR1cm4gZy5lZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKHkpe2lmKHkudGFyZ2V0PT1kKXtpZih5LnNvdXJjZSE9Zyl0aHJvdyJJbmNvcnJlY3QgZWRnZSBzb3VyY2UhIjtwLnB1c2goeSl9fSkscH0saC5wcm90b3R5cGUuZ2V0RWRnZXNCZXR3ZWVuPWZ1bmN0aW9uKGQpe3ZhciBwPVtdLG0sZz10aGlzO3JldHVybiBnLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oeSl7aWYoISh5LnNvdXJjZT09Z3x8eS50YXJnZXQ9PWcpKXRocm93IkluY29ycmVjdCBlZGdlIHNvdXJjZSBhbmQvb3IgdGFyZ2V0IjsoeS50YXJnZXQ9PWR8fHkuc291cmNlPT1kKSYmcC5wdXNoKHkpfSkscH0saC5wcm90b3R5cGUuZ2V0TmVpZ2hib3JzTGlzdD1mdW5jdGlvbigpe3ZhciBkPW5ldyBTZXQscD10aGlzO3JldHVybiBwLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24obSl7aWYobS5zb3VyY2U9PXApZC5hZGQobS50YXJnZXQpO2Vsc2V7aWYobS50YXJnZXQhPXApdGhyb3ciSW5jb3JyZWN0IGluY2lkZW5jeSEiO2QuYWRkKG0uc291cmNlKX19KSxkfSxoLnByb3RvdHlwZS53aXRoQ2hpbGRyZW49ZnVuY3Rpb24oKXt2YXIgZD1uZXcgU2V0LHAsbTtpZihkLmFkZCh0aGlzKSx0aGlzLmNoaWxkIT1udWxsKWZvcih2YXIgZz10aGlzLmNoaWxkLmdldE5vZGVzKCkseT0wO3k8Zy5sZW5ndGg7eSsrKXA9Z1t5XSxtPXAud2l0aENoaWxkcmVuKCksbS5mb3JFYWNoKGZ1bmN0aW9uKHYpe2QuYWRkKHYpfSk7cmV0dXJuIGR9LGgucHJvdG90eXBlLmdldE5vT2ZDaGlsZHJlbj1mdW5jdGlvbigpe3ZhciBkPTAscDtpZih0aGlzLmNoaWxkPT1udWxsKWQ9MTtlbHNlIGZvcih2YXIgbT10aGlzLmNoaWxkLmdldE5vZGVzKCksZz0wO2c8bS5sZW5ndGg7ZysrKXA9bVtnXSxkKz1wLmdldE5vT2ZDaGlsZHJlbigpO3JldHVybiBkPT0wJiYoZD0xKSxkfSxoLnByb3RvdHlwZS5nZXRFc3RpbWF0ZWRTaXplPWZ1bmN0aW9uKCl7aWYodGhpcy5lc3RpbWF0ZWRTaXplPT1pLk1JTl9WQUxVRSl0aHJvdyJhc3NlcnQgZmFpbGVkIjtyZXR1cm4gdGhpcy5lc3RpbWF0ZWRTaXplfSxoLnByb3RvdHlwZS5jYWxjRXN0aW1hdGVkU2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkPT1udWxsP3RoaXMuZXN0aW1hdGVkU2l6ZT0odGhpcy5yZWN0LndpZHRoK3RoaXMucmVjdC5oZWlnaHQpLzI6KHRoaXMuZXN0aW1hdGVkU2l6ZT10aGlzLmNoaWxkLmNhbGNFc3RpbWF0ZWRTaXplKCksdGhpcy5yZWN0LndpZHRoPXRoaXMuZXN0aW1hdGVkU2l6ZSx0aGlzLnJlY3QuaGVpZ2h0PXRoaXMuZXN0aW1hdGVkU2l6ZSx0aGlzLmVzdGltYXRlZFNpemUpfSxoLnByb3RvdHlwZS5zY2F0dGVyPWZ1bmN0aW9uKCl7dmFyIGQscCxtPS1zLklOSVRJQUxfV09STERfQk9VTkRBUlksZz1zLklOSVRJQUxfV09STERfQk9VTkRBUlk7ZD1zLldPUkxEX0NFTlRFUl9YK2wubmV4dERvdWJsZSgpKihnLW0pK207dmFyIHk9LXMuSU5JVElBTF9XT1JMRF9CT1VOREFSWSx2PXMuSU5JVElBTF9XT1JMRF9CT1VOREFSWTtwPXMuV09STERfQ0VOVEVSX1krbC5uZXh0RG91YmxlKCkqKHYteSkreSx0aGlzLnJlY3QueD1kLHRoaXMucmVjdC55PXB9LGgucHJvdG90eXBlLnVwZGF0ZUJvdW5kcz1mdW5jdGlvbigpe2lmKHRoaXMuZ2V0Q2hpbGQoKT09bnVsbCl0aHJvdyJhc3NlcnQgZmFpbGVkIjtpZih0aGlzLmdldENoaWxkKCkuZ2V0Tm9kZXMoKS5sZW5ndGghPTApe3ZhciBkPXRoaXMuZ2V0Q2hpbGQoKTtpZihkLnVwZGF0ZUJvdW5kcyghMCksdGhpcy5yZWN0Lng9ZC5nZXRMZWZ0KCksdGhpcy5yZWN0Lnk9ZC5nZXRUb3AoKSx0aGlzLnNldFdpZHRoKGQuZ2V0UmlnaHQoKS1kLmdldExlZnQoKSksdGhpcy5zZXRIZWlnaHQoZC5nZXRCb3R0b20oKS1kLmdldFRvcCgpKSxzLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUyl7dmFyIHA9ZC5nZXRSaWdodCgpLWQuZ2V0TGVmdCgpLG09ZC5nZXRCb3R0b20oKS1kLmdldFRvcCgpO3RoaXMubGFiZWxXaWR0aCYmKHRoaXMubGFiZWxQb3NIb3Jpem9udGFsPT0ibGVmdCI/KHRoaXMucmVjdC54LT10aGlzLmxhYmVsV2lkdGgsdGhpcy5zZXRXaWR0aChwK3RoaXMubGFiZWxXaWR0aCkpOnRoaXMubGFiZWxQb3NIb3Jpem9udGFsPT0iY2VudGVyIiYmdGhpcy5sYWJlbFdpZHRoPnA/KHRoaXMucmVjdC54LT0odGhpcy5sYWJlbFdpZHRoLXApLzIsdGhpcy5zZXRXaWR0aCh0aGlzLmxhYmVsV2lkdGgpKTp0aGlzLmxhYmVsUG9zSG9yaXpvbnRhbD09InJpZ2h0IiYmdGhpcy5zZXRXaWR0aChwK3RoaXMubGFiZWxXaWR0aCkpLHRoaXMubGFiZWxIZWlnaHQmJih0aGlzLmxhYmVsUG9zVmVydGljYWw9PSJ0b3AiPyh0aGlzLnJlY3QueS09dGhpcy5sYWJlbEhlaWdodCx0aGlzLnNldEhlaWdodChtK3RoaXMubGFiZWxIZWlnaHQpKTp0aGlzLmxhYmVsUG9zVmVydGljYWw9PSJjZW50ZXIiJiZ0aGlzLmxhYmVsSGVpZ2h0Pm0/KHRoaXMucmVjdC55LT0odGhpcy5sYWJlbEhlaWdodC1tKS8yLHRoaXMuc2V0SGVpZ2h0KHRoaXMubGFiZWxIZWlnaHQpKTp0aGlzLmxhYmVsUG9zVmVydGljYWw9PSJib3R0b20iJiZ0aGlzLnNldEhlaWdodChtK3RoaXMubGFiZWxIZWlnaHQpKX19fSxoLnByb3RvdHlwZS5nZXRJbmNsdXNpb25UcmVlRGVwdGg9ZnVuY3Rpb24oKXtpZih0aGlzLmluY2x1c2lvblRyZWVEZXB0aD09aS5NQVhfVkFMVUUpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7cmV0dXJuIHRoaXMuaW5jbHVzaW9uVHJlZURlcHRofSxoLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZCl7dmFyIHA9dGhpcy5yZWN0Lng7cD5zLldPUkxEX0JPVU5EQVJZP3A9cy5XT1JMRF9CT1VOREFSWTpwPC1zLldPUkxEX0JPVU5EQVJZJiYocD0tcy5XT1JMRF9CT1VOREFSWSk7dmFyIG09dGhpcy5yZWN0Lnk7bT5zLldPUkxEX0JPVU5EQVJZP209cy5XT1JMRF9CT1VOREFSWTptPC1zLldPUkxEX0JPVU5EQVJZJiYobT0tcy5XT1JMRF9CT1VOREFSWSk7dmFyIGc9bmV3IHUocCxtKSx5PWQuaW52ZXJzZVRyYW5zZm9ybVBvaW50KGcpO3RoaXMuc2V0TG9jYXRpb24oeS54LHkueSl9LGgucHJvdG90eXBlLmdldExlZnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0Lnh9LGgucHJvdG90eXBlLmdldFJpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC54K3RoaXMucmVjdC53aWR0aH0saC5wcm90b3R5cGUuZ2V0VG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC55fSxoLnByb3RvdHlwZS5nZXRCb3R0b209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LnkrdGhpcy5yZWN0LmhlaWdodH0saC5wcm90b3R5cGUuZ2V0UGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXI9PW51bGw/bnVsbDp0aGlzLm93bmVyLmdldFBhcmVudCgpfSx0LmV4cG9ydHM9aH0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDApO2Z1bmN0aW9uIGkoKXt9byhpLCJGRExheW91dENvbnN0YW50cyIpO2Zvcih2YXIgYSBpbiBuKWlbYV09blthXTtpLk1BWF9JVEVSQVRJT05TPTI1MDAsaS5ERUZBVUxUX0VER0VfTEVOR1RIPTUwLGkuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEg9LjQ1LGkuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEg9NDUwMCxpLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSD0uNCxpLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSD0xLGkuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj0zLjgsaS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SPTEuNSxpLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OPSEwLGkuREVGQVVMVF9VU0VfU01BUlRfUkVQVUxTSU9OX1JBTkdFX0NBTENVTEFUSU9OPSEwLGkuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTD0uMyxpLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1I9LjMzLGkuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUPTFlMyxpLkFEQVBUQVRJT05fVVBQRVJfTk9ERV9MSU1JVD01ZTMsaS5NQVhfTk9ERV9ESVNQTEFDRU1FTlRfSU5DUkVNRU5UQUw9MTAwLGkuTUFYX05PREVfRElTUExBQ0VNRU5UPWkuTUFYX05PREVfRElTUExBQ0VNRU5UX0lOQ1JFTUVOVEFMKjMsaS5NSU5fUkVQVUxTSU9OX0RJU1Q9aS5ERUZBVUxUX0VER0VfTEVOR1RILzEwLGkuQ09OVkVSR0VOQ0VfQ0hFQ0tfUEVSSU9EPTEwMCxpLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1I9LjEsaS5NSU5fRURHRV9MRU5HVEg9MSxpLkdSSURfQ0FMQ1VMQVRJT05fQ0hFQ0tfUEVSSU9EPTEwLHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oaSxhKXtpPT1udWxsJiZhPT1udWxsPyh0aGlzLng9MCx0aGlzLnk9MCk6KHRoaXMueD1pLHRoaXMueT1hKX1vKG4sIlBvaW50RCIpLG4ucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54fSxuLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueX0sbi5wcm90b3R5cGUuc2V0WD1mdW5jdGlvbihpKXt0aGlzLng9aX0sbi5wcm90b3R5cGUuc2V0WT1mdW5jdGlvbihpKXt0aGlzLnk9aX0sbi5wcm90b3R5cGUuZ2V0RGlmZmVyZW5jZT1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IERpbWVuc2lvbkQodGhpcy54LWkueCx0aGlzLnktaS55KX0sbi5wcm90b3R5cGUuZ2V0Q29weT1mdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLngsdGhpcy55KX0sbi5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLngrPWkud2lkdGgsdGhpcy55Kz1pLmhlaWdodCx0aGlzfSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDIpLGk9cigxMCksYT1yKDApLHM9cig3KSxsPXIoMyksdT1yKDEpLGg9cigxMyksZj1yKDEyKSxkPXIoMTEpO2Z1bmN0aW9uIHAoZyx5LHYpe24uY2FsbCh0aGlzLHYpLHRoaXMuZXN0aW1hdGVkU2l6ZT1pLk1JTl9WQUxVRSx0aGlzLm1hcmdpbj1hLkRFRkFVTFRfR1JBUEhfTUFSR0lOLHRoaXMuZWRnZXM9W10sdGhpcy5ub2Rlcz1bXSx0aGlzLmlzQ29ubmVjdGVkPSExLHRoaXMucGFyZW50PWcseSE9bnVsbCYmeSBpbnN0YW5jZW9mIHM/dGhpcy5ncmFwaE1hbmFnZXI9eTp5IT1udWxsJiZ5IGluc3RhbmNlb2YgTGF5b3V0JiYodGhpcy5ncmFwaE1hbmFnZXI9eS5ncmFwaE1hbmFnZXIpfW8ocCwiTEdyYXBoIikscC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSk7Zm9yKHZhciBtIGluIG4pcFttXT1uW21dO3AucHJvdG90eXBlLmdldE5vZGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXN9LHAucHJvdG90eXBlLmdldEVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXN9LHAucHJvdG90eXBlLmdldEdyYXBoTWFuYWdlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcn0scC5wcm90b3R5cGUuZ2V0UGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50fSxwLnByb3RvdHlwZS5nZXRMZWZ0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVmdH0scC5wcm90b3R5cGUuZ2V0UmlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yaWdodH0scC5wcm90b3R5cGUuZ2V0VG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9wfSxwLnByb3RvdHlwZS5nZXRCb3R0b209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ib3R0b219LHAucHJvdG90eXBlLmlzQ29ubmVjdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNDb25uZWN0ZWR9LHAucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnLHksdil7aWYoeT09bnVsbCYmdj09bnVsbCl7dmFyIHg9ZztpZih0aGlzLmdyYXBoTWFuYWdlcj09bnVsbCl0aHJvdyJHcmFwaCBoYXMgbm8gZ3JhcGggbWdyISI7aWYodGhpcy5nZXROb2RlcygpLmluZGV4T2YoeCk+LTEpdGhyb3ciTm9kZSBhbHJlYWR5IGluIGdyYXBoISI7cmV0dXJuIHgub3duZXI9dGhpcyx0aGlzLmdldE5vZGVzKCkucHVzaCh4KSx4fWVsc2V7dmFyIGI9ZztpZighKHRoaXMuZ2V0Tm9kZXMoKS5pbmRleE9mKHkpPi0xJiZ0aGlzLmdldE5vZGVzKCkuaW5kZXhPZih2KT4tMSkpdGhyb3ciU291cmNlIG9yIHRhcmdldCBub3QgaW4gZ3JhcGghIjtpZighKHkub3duZXI9PXYub3duZXImJnkub3duZXI9PXRoaXMpKXRocm93IkJvdGggb3duZXJzIG11c3QgYmUgdGhpcyBncmFwaCEiO3JldHVybiB5Lm93bmVyIT12Lm93bmVyP251bGw6KGIuc291cmNlPXksYi50YXJnZXQ9dixiLmlzSW50ZXJHcmFwaD0hMSx0aGlzLmdldEVkZ2VzKCkucHVzaChiKSx5LmVkZ2VzLnB1c2goYiksdiE9eSYmdi5lZGdlcy5wdXNoKGIpLGIpfX0scC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGcpe3ZhciB5PWc7aWYoZyBpbnN0YW5jZW9mIGwpe2lmKHk9PW51bGwpdGhyb3ciTm9kZSBpcyBudWxsISI7aWYoISh5Lm93bmVyIT1udWxsJiZ5Lm93bmVyPT10aGlzKSl0aHJvdyJPd25lciBncmFwaCBpcyBpbnZhbGlkISI7aWYodGhpcy5ncmFwaE1hbmFnZXI9PW51bGwpdGhyb3ciT3duZXIgZ3JhcGggbWFuYWdlciBpcyBpbnZhbGlkISI7Zm9yKHZhciB2PXkuZWRnZXMuc2xpY2UoKSx4LGI9di5sZW5ndGgsdz0wO3c8Yjt3KyspeD12W3ddLHguaXNJbnRlckdyYXBoP3RoaXMuZ3JhcGhNYW5hZ2VyLnJlbW92ZSh4KTp4LnNvdXJjZS5vd25lci5yZW1vdmUoeCk7dmFyIF89dGhpcy5ub2Rlcy5pbmRleE9mKHkpO2lmKF89PS0xKXRocm93Ik5vZGUgbm90IGluIG93bmVyIG5vZGUgbGlzdCEiO3RoaXMubm9kZXMuc3BsaWNlKF8sMSl9ZWxzZSBpZihnIGluc3RhbmNlb2YgdSl7dmFyIHg9ZztpZih4PT1udWxsKXRocm93IkVkZ2UgaXMgbnVsbCEiO2lmKCEoeC5zb3VyY2UhPW51bGwmJngudGFyZ2V0IT1udWxsKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBpcyBudWxsISI7aWYoISh4LnNvdXJjZS5vd25lciE9bnVsbCYmeC50YXJnZXQub3duZXIhPW51bGwmJnguc291cmNlLm93bmVyPT10aGlzJiZ4LnRhcmdldC5vd25lcj09dGhpcykpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgb3duZXIgaXMgaW52YWxpZCEiO3ZhciBUPXguc291cmNlLmVkZ2VzLmluZGV4T2YoeCksRT14LnRhcmdldC5lZGdlcy5pbmRleE9mKHgpO2lmKCEoVD4tMSYmRT4tMSkpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgZG9lc24ndCBrbm93IHRoaXMgZWRnZSEiO3guc291cmNlLmVkZ2VzLnNwbGljZShULDEpLHgudGFyZ2V0IT14LnNvdXJjZSYmeC50YXJnZXQuZWRnZXMuc3BsaWNlKEUsMSk7dmFyIF89eC5zb3VyY2Uub3duZXIuZ2V0RWRnZXMoKS5pbmRleE9mKHgpO2lmKF89PS0xKXRocm93Ik5vdCBpbiBvd25lcidzIGVkZ2UgbGlzdCEiO3guc291cmNlLm93bmVyLmdldEVkZ2VzKCkuc3BsaWNlKF8sMSl9fSxwLnByb3RvdHlwZS51cGRhdGVMZWZ0VG9wPWZ1bmN0aW9uKCl7Zm9yKHZhciBnPWkuTUFYX1ZBTFVFLHk9aS5NQVhfVkFMVUUsdix4LGIsdz10aGlzLmdldE5vZGVzKCksXz13Lmxlbmd0aCxUPTA7VDxfO1QrKyl7dmFyIEU9d1tUXTt2PUUuZ2V0VG9wKCkseD1FLmdldExlZnQoKSxnPnYmJihnPXYpLHk+eCYmKHk9eCl9cmV0dXJuIGc9PWkuTUFYX1ZBTFVFP251bGw6KHdbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQhPW51bGw/Yj13WzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0OmI9dGhpcy5tYXJnaW4sdGhpcy5sZWZ0PXktYix0aGlzLnRvcD1nLWIsbmV3IGYodGhpcy5sZWZ0LHRoaXMudG9wKSl9LHAucHJvdG90eXBlLnVwZGF0ZUJvdW5kcz1mdW5jdGlvbihnKXtmb3IodmFyIHk9aS5NQVhfVkFMVUUsdj0taS5NQVhfVkFMVUUseD1pLk1BWF9WQUxVRSxiPS1pLk1BWF9WQUxVRSx3LF8sVCxFLEwsUz10aGlzLm5vZGVzLEE9Uy5sZW5ndGgsST0wO0k8QTtJKyspe3ZhciBEPVNbSV07ZyYmRC5jaGlsZCE9bnVsbCYmRC51cGRhdGVCb3VuZHMoKSx3PUQuZ2V0TGVmdCgpLF89RC5nZXRSaWdodCgpLFQ9RC5nZXRUb3AoKSxFPUQuZ2V0Qm90dG9tKCkseT53JiYoeT13KSx2PF8mJih2PV8pLHg+VCYmKHg9VCksYjxFJiYoYj1FKX12YXIgaz1uZXcgaCh5LHgsdi15LGIteCk7eT09aS5NQVhfVkFMVUUmJih0aGlzLmxlZnQ9dGhpcy5wYXJlbnQuZ2V0TGVmdCgpLHRoaXMucmlnaHQ9dGhpcy5wYXJlbnQuZ2V0UmlnaHQoKSx0aGlzLnRvcD10aGlzLnBhcmVudC5nZXRUb3AoKSx0aGlzLmJvdHRvbT10aGlzLnBhcmVudC5nZXRCb3R0b20oKSksU1swXS5nZXRQYXJlbnQoKS5wYWRkaW5nTGVmdCE9bnVsbD9MPVNbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQ6TD10aGlzLm1hcmdpbix0aGlzLmxlZnQ9ay54LUwsdGhpcy5yaWdodD1rLngray53aWR0aCtMLHRoaXMudG9wPWsueS1MLHRoaXMuYm90dG9tPWsueStrLmhlaWdodCtMfSxwLmNhbGN1bGF0ZUJvdW5kcz1mdW5jdGlvbihnKXtmb3IodmFyIHk9aS5NQVhfVkFMVUUsdj0taS5NQVhfVkFMVUUseD1pLk1BWF9WQUxVRSxiPS1pLk1BWF9WQUxVRSx3LF8sVCxFLEw9Zy5sZW5ndGgsUz0wO1M8TDtTKyspe3ZhciBBPWdbU107dz1BLmdldExlZnQoKSxfPUEuZ2V0UmlnaHQoKSxUPUEuZ2V0VG9wKCksRT1BLmdldEJvdHRvbSgpLHk+dyYmKHk9dyksdjxfJiYodj1fKSx4PlQmJih4PVQpLGI8RSYmKGI9RSl9dmFyIEk9bmV3IGgoeSx4LHYteSxiLXgpO3JldHVybiBJfSxwLnByb3RvdHlwZS5nZXRJbmNsdXNpb25UcmVlRGVwdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcz09dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpPzE6dGhpcy5wYXJlbnQuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCl9LHAucHJvdG90eXBlLmdldEVzdGltYXRlZFNpemU9ZnVuY3Rpb24oKXtpZih0aGlzLmVzdGltYXRlZFNpemU9PWkuTUlOX1ZBTFVFKXRocm93ImFzc2VydCBmYWlsZWQiO3JldHVybiB0aGlzLmVzdGltYXRlZFNpemV9LHAucHJvdG90eXBlLmNhbGNFc3RpbWF0ZWRTaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciBnPTAseT10aGlzLm5vZGVzLHY9eS5sZW5ndGgseD0wO3g8djt4Kyspe3ZhciBiPXlbeF07Zys9Yi5jYWxjRXN0aW1hdGVkU2l6ZSgpfXJldHVybiBnPT0wP3RoaXMuZXN0aW1hdGVkU2l6ZT1hLkVNUFRZX0NPTVBPVU5EX05PREVfU0laRTp0aGlzLmVzdGltYXRlZFNpemU9Zy9NYXRoLnNxcnQodGhpcy5ub2Rlcy5sZW5ndGgpLHRoaXMuZXN0aW1hdGVkU2l6ZX0scC5wcm90b3R5cGUudXBkYXRlQ29ubmVjdGVkPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcztpZih0aGlzLm5vZGVzLmxlbmd0aD09MCl7dGhpcy5pc0Nvbm5lY3RlZD0hMDtyZXR1cm59dmFyIHk9bmV3IGQsdj1uZXcgU2V0LHg9dGhpcy5ub2Rlc1swXSxiLHcsXz14LndpdGhDaGlsZHJlbigpO2ZvcihfLmZvckVhY2goZnVuY3Rpb24oSSl7eS5wdXNoKEkpLHYuYWRkKEkpfSk7eS5sZW5ndGghPT0wOyl7eD15LnNoaWZ0KCksYj14LmdldEVkZ2VzKCk7Zm9yKHZhciBUPWIubGVuZ3RoLEU9MDtFPFQ7RSsrKXt2YXIgTD1iW0VdO2lmKHc9TC5nZXRPdGhlckVuZEluR3JhcGgoeCx0aGlzKSx3IT1udWxsJiYhdi5oYXModykpe3ZhciBTPXcud2l0aENoaWxkcmVuKCk7Uy5mb3JFYWNoKGZ1bmN0aW9uKEkpe3kucHVzaChJKSx2LmFkZChJKX0pfX19aWYodGhpcy5pc0Nvbm5lY3RlZD0hMSx2LnNpemU+PXRoaXMubm9kZXMubGVuZ3RoKXt2YXIgQT0wO3YuZm9yRWFjaChmdW5jdGlvbihJKXtJLm93bmVyPT1nJiZBKyt9KSxBPT10aGlzLm5vZGVzLmxlbmd0aCYmKHRoaXMuaXNDb25uZWN0ZWQ9ITApfX0sdC5leHBvcnRzPXB9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT1yKDEpO2Z1bmN0aW9uIGEocyl7bj1yKDYpLHRoaXMubGF5b3V0PXMsdGhpcy5ncmFwaHM9W10sdGhpcy5lZGdlcz1bXX1vKGEsIkxHcmFwaE1hbmFnZXIiKSxhLnByb3RvdHlwZS5hZGRSb290PWZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5sYXlvdXQubmV3R3JhcGgoKSxsPXRoaXMubGF5b3V0Lm5ld05vZGUobnVsbCksdT10aGlzLmFkZChzLGwpO3JldHVybiB0aGlzLnNldFJvb3RHcmFwaCh1KSx0aGlzLnJvb3RHcmFwaH0sYS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHMsbCx1LGgsZil7aWYodT09bnVsbCYmaD09bnVsbCYmZj09bnVsbCl7aWYocz09bnVsbCl0aHJvdyJHcmFwaCBpcyBudWxsISI7aWYobD09bnVsbCl0aHJvdyJQYXJlbnQgbm9kZSBpcyBudWxsISI7aWYodGhpcy5ncmFwaHMuaW5kZXhPZihzKT4tMSl0aHJvdyJHcmFwaCBhbHJlYWR5IGluIHRoaXMgZ3JhcGggbWdyISI7aWYodGhpcy5ncmFwaHMucHVzaChzKSxzLnBhcmVudCE9bnVsbCl0aHJvdyJBbHJlYWR5IGhhcyBhIHBhcmVudCEiO2lmKGwuY2hpbGQhPW51bGwpdGhyb3ciQWxyZWFkeSBoYXMgYSBjaGlsZCEiO3JldHVybiBzLnBhcmVudD1sLGwuY2hpbGQ9cyxzfWVsc2V7Zj11LGg9bCx1PXM7dmFyIGQ9aC5nZXRPd25lcigpLHA9Zi5nZXRPd25lcigpO2lmKCEoZCE9bnVsbCYmZC5nZXRHcmFwaE1hbmFnZXIoKT09dGhpcykpdGhyb3ciU291cmNlIG5vdCBpbiB0aGlzIGdyYXBoIG1nciEiO2lmKCEocCE9bnVsbCYmcC5nZXRHcmFwaE1hbmFnZXIoKT09dGhpcykpdGhyb3ciVGFyZ2V0IG5vdCBpbiB0aGlzIGdyYXBoIG1nciEiO2lmKGQ9PXApcmV0dXJuIHUuaXNJbnRlckdyYXBoPSExLGQuYWRkKHUsaCxmKTtpZih1LmlzSW50ZXJHcmFwaD0hMCx1LnNvdXJjZT1oLHUudGFyZ2V0PWYsdGhpcy5lZGdlcy5pbmRleE9mKHUpPi0xKXRocm93IkVkZ2UgYWxyZWFkeSBpbiBpbnRlci1ncmFwaCBlZGdlIGxpc3QhIjtpZih0aGlzLmVkZ2VzLnB1c2godSksISh1LnNvdXJjZSE9bnVsbCYmdS50YXJnZXQhPW51bGwpKXRocm93IkVkZ2Ugc291cmNlIGFuZC9vciB0YXJnZXQgaXMgbnVsbCEiO2lmKCEodS5zb3VyY2UuZWRnZXMuaW5kZXhPZih1KT09LTEmJnUudGFyZ2V0LmVkZ2VzLmluZGV4T2YodSk9PS0xKSl0aHJvdyJFZGdlIGFscmVhZHkgaW4gc291cmNlIGFuZC9vciB0YXJnZXQgaW5jaWRlbmN5IGxpc3QhIjtyZXR1cm4gdS5zb3VyY2UuZWRnZXMucHVzaCh1KSx1LnRhcmdldC5lZGdlcy5wdXNoKHUpLHV9fSxhLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24ocyl7aWYocyBpbnN0YW5jZW9mIG4pe3ZhciBsPXM7aWYobC5nZXRHcmFwaE1hbmFnZXIoKSE9dGhpcyl0aHJvdyJHcmFwaCBub3QgaW4gdGhpcyBncmFwaCBtZ3IiO2lmKCEobD09dGhpcy5yb290R3JhcGh8fGwucGFyZW50IT1udWxsJiZsLnBhcmVudC5ncmFwaE1hbmFnZXI9PXRoaXMpKXRocm93IkludmFsaWQgcGFyZW50IG5vZGUhIjt2YXIgdT1bXTt1PXUuY29uY2F0KGwuZ2V0RWRnZXMoKSk7Zm9yKHZhciBoLGY9dS5sZW5ndGgsZD0wO2Q8ZjtkKyspaD11W2RdLGwucmVtb3ZlKGgpO3ZhciBwPVtdO3A9cC5jb25jYXQobC5nZXROb2RlcygpKTt2YXIgbTtmPXAubGVuZ3RoO2Zvcih2YXIgZD0wO2Q8ZjtkKyspbT1wW2RdLGwucmVtb3ZlKG0pO2w9PXRoaXMucm9vdEdyYXBoJiZ0aGlzLnNldFJvb3RHcmFwaChudWxsKTt2YXIgZz10aGlzLmdyYXBocy5pbmRleE9mKGwpO3RoaXMuZ3JhcGhzLnNwbGljZShnLDEpLGwucGFyZW50PW51bGx9ZWxzZSBpZihzIGluc3RhbmNlb2YgaSl7aWYoaD1zLGg9PW51bGwpdGhyb3ciRWRnZSBpcyBudWxsISI7aWYoIWguaXNJbnRlckdyYXBoKXRocm93Ik5vdCBhbiBpbnRlci1ncmFwaCBlZGdlISI7aWYoIShoLnNvdXJjZSE9bnVsbCYmaC50YXJnZXQhPW51bGwpKXRocm93IlNvdXJjZSBhbmQvb3IgdGFyZ2V0IGlzIG51bGwhIjtpZighKGguc291cmNlLmVkZ2VzLmluZGV4T2YoaCkhPS0xJiZoLnRhcmdldC5lZGdlcy5pbmRleE9mKGgpIT0tMSkpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgZG9lc24ndCBrbm93IHRoaXMgZWRnZSEiO3ZhciBnPWguc291cmNlLmVkZ2VzLmluZGV4T2YoaCk7aWYoaC5zb3VyY2UuZWRnZXMuc3BsaWNlKGcsMSksZz1oLnRhcmdldC5lZGdlcy5pbmRleE9mKGgpLGgudGFyZ2V0LmVkZ2VzLnNwbGljZShnLDEpLCEoaC5zb3VyY2Uub3duZXIhPW51bGwmJmguc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpIT1udWxsKSl0aHJvdyJFZGdlIG93bmVyIGdyYXBoIG9yIG93bmVyIGdyYXBoIG1hbmFnZXIgaXMgbnVsbCEiO2lmKGguc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpLmVkZ2VzLmluZGV4T2YoaCk9PS0xKXRocm93Ik5vdCBpbiBvd25lciBncmFwaCBtYW5hZ2VyJ3MgZWRnZSBsaXN0ISI7dmFyIGc9aC5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkuZWRnZXMuaW5kZXhPZihoKTtoLnNvdXJjZS5vd25lci5nZXRHcmFwaE1hbmFnZXIoKS5lZGdlcy5zcGxpY2UoZywxKX19LGEucHJvdG90eXBlLnVwZGF0ZUJvdW5kcz1mdW5jdGlvbigpe3RoaXMucm9vdEdyYXBoLnVwZGF0ZUJvdW5kcyghMCl9LGEucHJvdG90eXBlLmdldEdyYXBocz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoc30sYS5wcm90b3R5cGUuZ2V0QWxsTm9kZXM9ZnVuY3Rpb24oKXtpZih0aGlzLmFsbE5vZGVzPT1udWxsKXtmb3IodmFyIHM9W10sbD10aGlzLmdldEdyYXBocygpLHU9bC5sZW5ndGgsaD0wO2g8dTtoKyspcz1zLmNvbmNhdChsW2hdLmdldE5vZGVzKCkpO3RoaXMuYWxsTm9kZXM9c31yZXR1cm4gdGhpcy5hbGxOb2Rlc30sYS5wcm90b3R5cGUucmVzZXRBbGxOb2Rlcz1mdW5jdGlvbigpe3RoaXMuYWxsTm9kZXM9bnVsbH0sYS5wcm90b3R5cGUucmVzZXRBbGxFZGdlcz1mdW5jdGlvbigpe3RoaXMuYWxsRWRnZXM9bnVsbH0sYS5wcm90b3R5cGUucmVzZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbj1mdW5jdGlvbigpe3RoaXMuYWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249bnVsbH0sYS5wcm90b3R5cGUuZ2V0QWxsRWRnZXM9ZnVuY3Rpb24oKXtpZih0aGlzLmFsbEVkZ2VzPT1udWxsKXtmb3IodmFyIHM9W10sbD10aGlzLmdldEdyYXBocygpLHU9bC5sZW5ndGgsaD0wO2g8bC5sZW5ndGg7aCsrKXM9cy5jb25jYXQobFtoXS5nZXRFZGdlcygpKTtzPXMuY29uY2F0KHRoaXMuZWRnZXMpLHRoaXMuYWxsRWRnZXM9c31yZXR1cm4gdGhpcy5hbGxFZGdlc30sYS5wcm90b3R5cGUuZ2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbn0sYS5wcm90b3R5cGUuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249ZnVuY3Rpb24ocyl7aWYodGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbiE9bnVsbCl0aHJvdyJhc3NlcnQgZmFpbGVkIjt0aGlzLmFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPXN9LGEucHJvdG90eXBlLmdldFJvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290R3JhcGh9LGEucHJvdG90eXBlLnNldFJvb3RHcmFwaD1mdW5jdGlvbihzKXtpZihzLmdldEdyYXBoTWFuYWdlcigpIT10aGlzKXRocm93IlJvb3Qgbm90IGluIHRoaXMgZ3JhcGggbWdyISI7dGhpcy5yb290R3JhcGg9cyxzLnBhcmVudD09bnVsbCYmKHMucGFyZW50PXRoaXMubGF5b3V0Lm5ld05vZGUoIlJvb3Qgbm9kZSIpKX0sYS5wcm90b3R5cGUuZ2V0TGF5b3V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF5b3V0fSxhLnByb3RvdHlwZS5pc09uZUFuY2VzdG9yT2ZPdGhlcj1mdW5jdGlvbihzLGwpe2lmKCEocyE9bnVsbCYmbCE9bnVsbCkpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7aWYocz09bClyZXR1cm4hMDt2YXIgdT1zLmdldE93bmVyKCksaDtkb3tpZihoPXUuZ2V0UGFyZW50KCksaD09bnVsbClicmVhaztpZihoPT1sKXJldHVybiEwO2lmKHU9aC5nZXRPd25lcigpLHU9PW51bGwpYnJlYWt9d2hpbGUoITApO3U9bC5nZXRPd25lcigpO2Rve2lmKGg9dS5nZXRQYXJlbnQoKSxoPT1udWxsKWJyZWFrO2lmKGg9PXMpcmV0dXJuITA7aWYodT1oLmdldE93bmVyKCksdT09bnVsbClicmVha313aGlsZSghMCk7cmV0dXJuITF9LGEucHJvdG90eXBlLmNhbGNMb3dlc3RDb21tb25BbmNlc3RvcnM9ZnVuY3Rpb24oKXtmb3IodmFyIHMsbCx1LGgsZixkPXRoaXMuZ2V0QWxsRWRnZXMoKSxwPWQubGVuZ3RoLG09MDttPHA7bSsrKXtpZihzPWRbbV0sbD1zLnNvdXJjZSx1PXMudGFyZ2V0LHMubGNhPW51bGwscy5zb3VyY2VJbkxjYT1sLHMudGFyZ2V0SW5MY2E9dSxsPT11KXtzLmxjYT1sLmdldE93bmVyKCk7Y29udGludWV9Zm9yKGg9bC5nZXRPd25lcigpO3MubGNhPT1udWxsOyl7Zm9yKHMudGFyZ2V0SW5MY2E9dSxmPXUuZ2V0T3duZXIoKTtzLmxjYT09bnVsbDspe2lmKGY9PWgpe3MubGNhPWY7YnJlYWt9aWYoZj09dGhpcy5yb290R3JhcGgpYnJlYWs7aWYocy5sY2EhPW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7cy50YXJnZXRJbkxjYT1mLmdldFBhcmVudCgpLGY9cy50YXJnZXRJbkxjYS5nZXRPd25lcigpfWlmKGg9PXRoaXMucm9vdEdyYXBoKWJyZWFrO3MubGNhPT1udWxsJiYocy5zb3VyY2VJbkxjYT1oLmdldFBhcmVudCgpLGg9cy5zb3VyY2VJbkxjYS5nZXRPd25lcigpKX1pZihzLmxjYT09bnVsbCl0aHJvdyJhc3NlcnQgZmFpbGVkIn19LGEucHJvdG90eXBlLmNhbGNMb3dlc3RDb21tb25BbmNlc3Rvcj1mdW5jdGlvbihzLGwpe2lmKHM9PWwpcmV0dXJuIHMuZ2V0T3duZXIoKTt2YXIgdT1zLmdldE93bmVyKCk7ZG97aWYodT09bnVsbClicmVhazt2YXIgaD1sLmdldE93bmVyKCk7ZG97aWYoaD09bnVsbClicmVhaztpZihoPT11KXJldHVybiBoO2g9aC5nZXRQYXJlbnQoKS5nZXRPd25lcigpfXdoaWxlKCEwKTt1PXUuZ2V0UGFyZW50KCkuZ2V0T3duZXIoKX13aGlsZSghMCk7cmV0dXJuIHV9LGEucHJvdG90eXBlLmNhbGNJbmNsdXNpb25UcmVlRGVwdGhzPWZ1bmN0aW9uKHMsbCl7cz09bnVsbCYmbD09bnVsbCYmKHM9dGhpcy5yb290R3JhcGgsbD0xKTtmb3IodmFyIHUsaD1zLmdldE5vZGVzKCksZj1oLmxlbmd0aCxkPTA7ZDxmO2QrKyl1PWhbZF0sdS5pbmNsdXNpb25UcmVlRGVwdGg9bCx1LmNoaWxkIT1udWxsJiZ0aGlzLmNhbGNJbmNsdXNpb25UcmVlRGVwdGhzKHUuY2hpbGQsbCsxKX0sYS5wcm90b3R5cGUuaW5jbHVkZXNJbnZhbGlkRWRnZT1mdW5jdGlvbigpe2Zvcih2YXIgcyxsPVtdLHU9dGhpcy5lZGdlcy5sZW5ndGgsaD0wO2g8dTtoKyspcz10aGlzLmVkZ2VzW2hdLHRoaXMuaXNPbmVBbmNlc3Rvck9mT3RoZXIocy5zb3VyY2Uscy50YXJnZXQpJiZsLnB1c2gocyk7Zm9yKHZhciBoPTA7aDxsLmxlbmd0aDtoKyspdGhpcy5yZW1vdmUobFtoXSk7cmV0dXJuITF9LHQuZXhwb3J0cz1hfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTIpO2Z1bmN0aW9uIGkoKXt9byhpLCJJR2VvbWV0cnkiKSxpLmNhbGNTZXBhcmF0aW9uQW1vdW50PWZ1bmN0aW9uKGEscyxsLHUpe2lmKCFhLmludGVyc2VjdHMocykpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7dmFyIGg9bmV3IEFycmF5KDIpO3RoaXMuZGVjaWRlRGlyZWN0aW9uc0Zvck92ZXJsYXBwaW5nTm9kZXMoYSxzLGgpLGxbMF09TWF0aC5taW4oYS5nZXRSaWdodCgpLHMuZ2V0UmlnaHQoKSktTWF0aC5tYXgoYS54LHMueCksbFsxXT1NYXRoLm1pbihhLmdldEJvdHRvbSgpLHMuZ2V0Qm90dG9tKCkpLU1hdGgubWF4KGEueSxzLnkpLGEuZ2V0WCgpPD1zLmdldFgoKSYmYS5nZXRSaWdodCgpPj1zLmdldFJpZ2h0KCk/bFswXSs9TWF0aC5taW4ocy5nZXRYKCktYS5nZXRYKCksYS5nZXRSaWdodCgpLXMuZ2V0UmlnaHQoKSk6cy5nZXRYKCk8PWEuZ2V0WCgpJiZzLmdldFJpZ2h0KCk+PWEuZ2V0UmlnaHQoKSYmKGxbMF0rPU1hdGgubWluKGEuZ2V0WCgpLXMuZ2V0WCgpLHMuZ2V0UmlnaHQoKS1hLmdldFJpZ2h0KCkpKSxhLmdldFkoKTw9cy5nZXRZKCkmJmEuZ2V0Qm90dG9tKCk+PXMuZ2V0Qm90dG9tKCk/bFsxXSs9TWF0aC5taW4ocy5nZXRZKCktYS5nZXRZKCksYS5nZXRCb3R0b20oKS1zLmdldEJvdHRvbSgpKTpzLmdldFkoKTw9YS5nZXRZKCkmJnMuZ2V0Qm90dG9tKCk+PWEuZ2V0Qm90dG9tKCkmJihsWzFdKz1NYXRoLm1pbihhLmdldFkoKS1zLmdldFkoKSxzLmdldEJvdHRvbSgpLWEuZ2V0Qm90dG9tKCkpKTt2YXIgZj1NYXRoLmFicygocy5nZXRDZW50ZXJZKCktYS5nZXRDZW50ZXJZKCkpLyhzLmdldENlbnRlclgoKS1hLmdldENlbnRlclgoKSkpO3MuZ2V0Q2VudGVyWSgpPT09YS5nZXRDZW50ZXJZKCkmJnMuZ2V0Q2VudGVyWCgpPT09YS5nZXRDZW50ZXJYKCkmJihmPTEpO3ZhciBkPWYqbFswXSxwPWxbMV0vZjtsWzBdPHA/cD1sWzBdOmQ9bFsxXSxsWzBdPS0xKmhbMF0qKHAvMit1KSxsWzFdPS0xKmhbMV0qKGQvMit1KX0saS5kZWNpZGVEaXJlY3Rpb25zRm9yT3ZlcmxhcHBpbmdOb2Rlcz1mdW5jdGlvbihhLHMsbCl7YS5nZXRDZW50ZXJYKCk8cy5nZXRDZW50ZXJYKCk/bFswXT0tMTpsWzBdPTEsYS5nZXRDZW50ZXJZKCk8cy5nZXRDZW50ZXJZKCk/bFsxXT0tMTpsWzFdPTF9LGkuZ2V0SW50ZXJzZWN0aW9uMj1mdW5jdGlvbihhLHMsbCl7dmFyIHU9YS5nZXRDZW50ZXJYKCksaD1hLmdldENlbnRlclkoKSxmPXMuZ2V0Q2VudGVyWCgpLGQ9cy5nZXRDZW50ZXJZKCk7aWYoYS5pbnRlcnNlY3RzKHMpKXJldHVybiBsWzBdPXUsbFsxXT1oLGxbMl09ZixsWzNdPWQsITA7dmFyIHA9YS5nZXRYKCksbT1hLmdldFkoKSxnPWEuZ2V0UmlnaHQoKSx5PWEuZ2V0WCgpLHY9YS5nZXRCb3R0b20oKSx4PWEuZ2V0UmlnaHQoKSxiPWEuZ2V0V2lkdGhIYWxmKCksdz1hLmdldEhlaWdodEhhbGYoKSxfPXMuZ2V0WCgpLFQ9cy5nZXRZKCksRT1zLmdldFJpZ2h0KCksTD1zLmdldFgoKSxTPXMuZ2V0Qm90dG9tKCksQT1zLmdldFJpZ2h0KCksST1zLmdldFdpZHRoSGFsZigpLEQ9cy5nZXRIZWlnaHRIYWxmKCksaz0hMSxSPSExO2lmKHU9PT1mKXtpZihoPmQpcmV0dXJuIGxbMF09dSxsWzFdPW0sbFsyXT1mLGxbM109UywhMTtpZihoPGQpcmV0dXJuIGxbMF09dSxsWzFdPXYsbFsyXT1mLGxbM109VCwhMX1lbHNlIGlmKGg9PT1kKXtpZih1PmYpcmV0dXJuIGxbMF09cCxsWzFdPWgsbFsyXT1FLGxbM109ZCwhMTtpZih1PGYpcmV0dXJuIGxbMF09ZyxsWzFdPWgsbFsyXT1fLGxbM109ZCwhMX1lbHNle3ZhciBDPWEuaGVpZ2h0L2Eud2lkdGgsTz1zLmhlaWdodC9zLndpZHRoLE49KGQtaCkvKGYtdSksUD12b2lkIDAsRj12b2lkIDAsQj12b2lkIDAsRz12b2lkIDAsej12b2lkIDAsVz12b2lkIDA7aWYoLUM9PT1OP3U+Zj8obFswXT15LGxbMV09dixrPSEwKToobFswXT1nLGxbMV09bSxrPSEwKTpDPT09TiYmKHU+Zj8obFswXT1wLGxbMV09bSxrPSEwKToobFswXT14LGxbMV09dixrPSEwKSksLU89PT1OP2Y+dT8obFsyXT1MLGxbM109UyxSPSEwKToobFsyXT1FLGxbM109VCxSPSEwKTpPPT09TiYmKGY+dT8obFsyXT1fLGxbM109VCxSPSEwKToobFsyXT1BLGxbM109UyxSPSEwKSksayYmUilyZXR1cm4hMTtpZih1PmY/aD5kPyhQPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oQyxOLDQpLEY9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihPLE4sMikpOihQPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLUMsTiwzKSxGPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLU8sTiwxKSk6aD5kPyhQPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLUMsTiwxKSxGPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLU8sTiwzKSk6KFA9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihDLE4sMiksRj10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKE8sTiw0KSksIWspc3dpdGNoKFApe2Nhc2UgMTpHPW0sQj11Ky13L04sbFswXT1CLGxbMV09RzticmVhaztjYXNlIDI6Qj14LEc9aCtiKk4sbFswXT1CLGxbMV09RzticmVhaztjYXNlIDM6Rz12LEI9dSt3L04sbFswXT1CLGxbMV09RzticmVhaztjYXNlIDQ6Qj15LEc9aCstYipOLGxbMF09QixsWzFdPUc7YnJlYWt9aWYoIVIpc3dpdGNoKEYpe2Nhc2UgMTpXPVQsej1mKy1EL04sbFsyXT16LGxbM109VzticmVhaztjYXNlIDI6ej1BLFc9ZCtJKk4sbFsyXT16LGxbM109VzticmVhaztjYXNlIDM6Vz1TLHo9ZitEL04sbFsyXT16LGxbM109VzticmVhaztjYXNlIDQ6ej1MLFc9ZCstSSpOLGxbMl09eixsWzNdPVc7YnJlYWt9fXJldHVybiExfSxpLmdldENhcmRpbmFsRGlyZWN0aW9uPWZ1bmN0aW9uKGEscyxsKXtyZXR1cm4gYT5zP2w6MStsJTR9LGkuZ2V0SW50ZXJzZWN0aW9uPWZ1bmN0aW9uKGEscyxsLHUpe2lmKHU9PW51bGwpcmV0dXJuIHRoaXMuZ2V0SW50ZXJzZWN0aW9uMihhLHMsbCk7dmFyIGg9YS54LGY9YS55LGQ9cy54LHA9cy55LG09bC54LGc9bC55LHk9dS54LHY9dS55LHg9dm9pZCAwLGI9dm9pZCAwLHc9dm9pZCAwLF89dm9pZCAwLFQ9dm9pZCAwLEU9dm9pZCAwLEw9dm9pZCAwLFM9dm9pZCAwLEE9dm9pZCAwO3JldHVybiB3PXAtZixUPWgtZCxMPWQqZi1oKnAsXz12LWcsRT1tLXksUz15KmctbSp2LEE9dypFLV8qVCxBPT09MD9udWxsOih4PShUKlMtRSpMKS9BLGI9KF8qTC13KlMpL0EsbmV3IG4oeCxiKSl9LGkuYW5nbGVPZlZlY3Rvcj1mdW5jdGlvbihhLHMsbCx1KXt2YXIgaD12b2lkIDA7cmV0dXJuIGEhPT1sPyhoPU1hdGguYXRhbigodS1zKS8obC1hKSksbDxhP2grPU1hdGguUEk6dTxzJiYoaCs9dGhpcy5UV09fUEkpKTp1PHM/aD10aGlzLk9ORV9BTkRfSEFMRl9QSTpoPXRoaXMuSEFMRl9QSSxofSxpLmRvSW50ZXJzZWN0PWZ1bmN0aW9uKGEscyxsLHUpe3ZhciBoPWEueCxmPWEueSxkPXMueCxwPXMueSxtPWwueCxnPWwueSx5PXUueCx2PXUueSx4PShkLWgpKih2LWcpLSh5LW0pKihwLWYpO2lmKHg9PT0wKXJldHVybiExO3ZhciBiPSgodi1nKSooeS1oKSsobS15KSoodi1mKSkveCx3PSgoZi1wKSooeS1oKSsoZC1oKSoodi1mKSkveDtyZXR1cm4gMDxiJiZiPDEmJjA8dyYmdzwxfSxpLmZpbmRDaXJjbGVMaW5lSW50ZXJzZWN0aW9ucz1mdW5jdGlvbihhLHMsbCx1LGgsZixkKXt2YXIgcD0obC1hKSoobC1hKSsodS1zKSoodS1zKSxtPTIqKChhLWgpKihsLWEpKyhzLWYpKih1LXMpKSxnPShhLWgpKihhLWgpKyhzLWYpKihzLWYpLWQqZCx5PW0qbS00KnAqZztpZih5Pj0wKXt2YXIgdj0oLW0rTWF0aC5zcXJ0KG0qbS00KnAqZykpLygyKnApLHg9KC1tLU1hdGguc3FydChtKm0tNCpwKmcpKS8oMipwKSxiPW51bGw7cmV0dXJuIHY+PTAmJnY8PTE/W3ZdOng+PTAmJng8PTE/W3hdOmJ9ZWxzZSByZXR1cm4gbnVsbH0saS5IQUxGX1BJPS41Kk1hdGguUEksaS5PTkVfQU5EX0hBTEZfUEk9MS41Kk1hdGguUEksaS5UV09fUEk9MipNYXRoLlBJLGkuVEhSRUVfUEk9MypNYXRoLlBJLHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt9byhuLCJJTWF0aCIpLG4uc2lnbj1mdW5jdGlvbihpKXtyZXR1cm4gaT4wPzE6aTwwPy0xOjB9LG4uZmxvb3I9ZnVuY3Rpb24oaSl7cmV0dXJuIGk8MD9NYXRoLmNlaWwoaSk6TWF0aC5mbG9vcihpKX0sbi5jZWlsPWZ1bmN0aW9uKGkpe3JldHVybiBpPDA/TWF0aC5mbG9vcihpKTpNYXRoLmNlaWwoaSl9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt9byhuLCJJbnRlZ2VyIiksbi5NQVhfVkFMVUU9MjE0NzQ4MzY0NyxuLk1JTl9WQUxVRT0tMjE0NzQ4MzY0OCx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGgoZixkKXtmb3IodmFyIHA9MDtwPGQubGVuZ3RoO3ArKyl7dmFyIG09ZFtwXTttLmVudW1lcmFibGU9bS5lbnVtZXJhYmxlfHwhMSxtLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbSYmKG0ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLG0ua2V5LG0pfX1yZXR1cm4gbyhoLCJkZWZpbmVQcm9wZXJ0aWVzIiksZnVuY3Rpb24oZixkLHApe3JldHVybiBkJiZoKGYucHJvdG90eXBlLGQpLHAmJmgoZixwKSxmfX0oKTtmdW5jdGlvbiBpKGgsZil7aWYoIShoIGluc3RhbmNlb2YgZikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9byhpLCJfY2xhc3NDYWxsQ2hlY2siKTt2YXIgYT1vKGZ1bmN0aW9uKGYpe3JldHVybnt2YWx1ZTpmLG5leHQ6bnVsbCxwcmV2Om51bGx9fSwibm9kZUZyb20iKSxzPW8oZnVuY3Rpb24oZixkLHAsbSl7cmV0dXJuIGYhPT1udWxsP2YubmV4dD1kOm0uaGVhZD1kLHAhPT1udWxsP3AucHJldj1kOm0udGFpbD1kLGQucHJldj1mLGQubmV4dD1wLG0ubGVuZ3RoKyssZH0sImFkZCIpLGw9byhmdW5jdGlvbihmLGQpe3ZhciBwPWYucHJldixtPWYubmV4dDtyZXR1cm4gcCE9PW51bGw/cC5uZXh0PW06ZC5oZWFkPW0sbSE9PW51bGw/bS5wcmV2PXA6ZC50YWlsPXAsZi5wcmV2PWYubmV4dD1udWxsLGQubGVuZ3RoLS0sZn0sIl9yZW1vdmUiKSx1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaChmKXt2YXIgZD10aGlzO2kodGhpcyxoKSx0aGlzLmxlbmd0aD0wLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLGY/LmZvckVhY2goZnVuY3Rpb24ocCl7cmV0dXJuIGQucHVzaChwKX0pfXJldHVybiBvKGgsIkxpbmtlZExpc3QiKSxuKGgsW3trZXk6InNpemUiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LCJzaXplIil9LHtrZXk6Imluc2VydEJlZm9yZSIsdmFsdWU6byhmdW5jdGlvbihkLHApe3JldHVybiBzKHAucHJldixhKGQpLHAsdGhpcyl9LCJpbnNlcnRCZWZvcmUiKX0se2tleToiaW5zZXJ0QWZ0ZXIiLHZhbHVlOm8oZnVuY3Rpb24oZCxwKXtyZXR1cm4gcyhwLGEoZCkscC5uZXh0LHRoaXMpfSwiaW5zZXJ0QWZ0ZXIiKX0se2tleToiaW5zZXJ0Tm9kZUJlZm9yZSIsdmFsdWU6byhmdW5jdGlvbihkLHApe3JldHVybiBzKHAucHJldixkLHAsdGhpcyl9LCJpbnNlcnROb2RlQmVmb3JlIil9LHtrZXk6Imluc2VydE5vZGVBZnRlciIsdmFsdWU6byhmdW5jdGlvbihkLHApe3JldHVybiBzKHAsZCxwLm5leHQsdGhpcyl9LCJpbnNlcnROb2RlQWZ0ZXIiKX0se2tleToicHVzaCIsdmFsdWU6byhmdW5jdGlvbihkKXtyZXR1cm4gcyh0aGlzLnRhaWwsYShkKSxudWxsLHRoaXMpfSwicHVzaCIpfSx7a2V5OiJ1bnNoaWZ0Iix2YWx1ZTpvKGZ1bmN0aW9uKGQpe3JldHVybiBzKG51bGwsYShkKSx0aGlzLmhlYWQsdGhpcyl9LCJ1bnNoaWZ0Iil9LHtrZXk6InJlbW92ZSIsdmFsdWU6byhmdW5jdGlvbihkKXtyZXR1cm4gbChkLHRoaXMpfSwicmVtb3ZlIil9LHtrZXk6InBvcCIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiBsKHRoaXMudGFpbCx0aGlzKS52YWx1ZX0sInBvcCIpfSx7a2V5OiJwb3BOb2RlIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcy50YWlsLHRoaXMpfSwicG9wTm9kZSIpfSx7a2V5OiJzaGlmdCIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiBsKHRoaXMuaGVhZCx0aGlzKS52YWx1ZX0sInNoaWZ0Iil9LHtrZXk6InNoaWZ0Tm9kZSIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiBsKHRoaXMuaGVhZCx0aGlzKX0sInNoaWZ0Tm9kZSIpfSx7a2V5OiJnZXRfb2JqZWN0X2F0Iix2YWx1ZTpvKGZ1bmN0aW9uKGQpe2lmKGQ8PXRoaXMubGVuZ3RoKCkpe2Zvcih2YXIgcD0xLG09dGhpcy5oZWFkO3A8ZDspbT1tLm5leHQscCsrO3JldHVybiBtLnZhbHVlfX0sImdldF9vYmplY3RfYXQiKX0se2tleToic2V0X29iamVjdF9hdCIsdmFsdWU6byhmdW5jdGlvbihkLHApe2lmKGQ8PXRoaXMubGVuZ3RoKCkpe2Zvcih2YXIgbT0xLGc9dGhpcy5oZWFkO208ZDspZz1nLm5leHQsbSsrO2cudmFsdWU9cH19LCJzZXRfb2JqZWN0X2F0Iil9XSksaH0oKTt0LmV4cG9ydHM9dX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGksYSxzKXt0aGlzLng9bnVsbCx0aGlzLnk9bnVsbCxpPT1udWxsJiZhPT1udWxsJiZzPT1udWxsPyh0aGlzLng9MCx0aGlzLnk9MCk6dHlwZW9mIGk9PSJudW1iZXIiJiZ0eXBlb2YgYT09Im51bWJlciImJnM9PW51bGw/KHRoaXMueD1pLHRoaXMueT1hKTppLmNvbnN0cnVjdG9yLm5hbWU9PSJQb2ludCImJmE9PW51bGwmJnM9PW51bGwmJihzPWksdGhpcy54PXMueCx0aGlzLnk9cy55KX1vKG4sIlBvaW50Iiksbi5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnh9LG4ucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55fSxuLnByb3RvdHlwZS5nZXRMb2NhdGlvbj1mdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLngsdGhpcy55KX0sbi5wcm90b3R5cGUuc2V0TG9jYXRpb249ZnVuY3Rpb24oaSxhLHMpe2kuY29uc3RydWN0b3IubmFtZT09IlBvaW50IiYmYT09bnVsbCYmcz09bnVsbD8ocz1pLHRoaXMuc2V0TG9jYXRpb24ocy54LHMueSkpOnR5cGVvZiBpPT0ibnVtYmVyIiYmdHlwZW9mIGE9PSJudW1iZXIiJiZzPT1udWxsJiYocGFyc2VJbnQoaSk9PWkmJnBhcnNlSW50KGEpPT1hP3RoaXMubW92ZShpLGEpOih0aGlzLng9TWF0aC5mbG9vcihpKy41KSx0aGlzLnk9TWF0aC5mbG9vcihhKy41KSkpfSxuLnByb3RvdHlwZS5tb3ZlPWZ1bmN0aW9uKGksYSl7dGhpcy54PWksdGhpcy55PWF9LG4ucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihpLGEpe3RoaXMueCs9aSx0aGlzLnkrPWF9LG4ucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihpKXtpZihpLmNvbnN0cnVjdG9yLm5hbWU9PSJQb2ludCIpe3ZhciBhPWk7cmV0dXJuIHRoaXMueD09YS54JiZ0aGlzLnk9PWEueX1yZXR1cm4gdGhpcz09aX0sbi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4oKS5jb25zdHJ1Y3Rvci5uYW1lKyJbeD0iK3RoaXMueCsiLHk9Iit0aGlzLnkrIl0ifSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGksYSxzLGwpe3RoaXMueD0wLHRoaXMueT0wLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLGkhPW51bGwmJmEhPW51bGwmJnMhPW51bGwmJmwhPW51bGwmJih0aGlzLng9aSx0aGlzLnk9YSx0aGlzLndpZHRoPXMsdGhpcy5oZWlnaHQ9bCl9byhuLCJSZWN0YW5nbGVEIiksbi5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnh9LG4ucHJvdG90eXBlLnNldFg9ZnVuY3Rpb24oaSl7dGhpcy54PWl9LG4ucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55fSxuLnByb3RvdHlwZS5zZXRZPWZ1bmN0aW9uKGkpe3RoaXMueT1pfSxuLnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLndpZHRofSxuLnByb3RvdHlwZS5zZXRXaWR0aD1mdW5jdGlvbihpKXt0aGlzLndpZHRoPWl9LG4ucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhlaWdodH0sbi5wcm90b3R5cGUuc2V0SGVpZ2h0PWZ1bmN0aW9uKGkpe3RoaXMuaGVpZ2h0PWl9LG4ucHJvdG90eXBlLmdldFJpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueCt0aGlzLndpZHRofSxuLnByb3RvdHlwZS5nZXRCb3R0b209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55K3RoaXMuaGVpZ2h0fSxuLnByb3RvdHlwZS5pbnRlcnNlY3RzPWZ1bmN0aW9uKGkpe3JldHVybiEodGhpcy5nZXRSaWdodCgpPGkueHx8dGhpcy5nZXRCb3R0b20oKTxpLnl8fGkuZ2V0UmlnaHQoKTx0aGlzLnh8fGkuZ2V0Qm90dG9tKCk8dGhpcy55KX0sbi5wcm90b3R5cGUuZ2V0Q2VudGVyWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLngrdGhpcy53aWR0aC8yfSxuLnByb3RvdHlwZS5nZXRNaW5YPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WCgpfSxuLnByb3RvdHlwZS5nZXRNYXhYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WCgpK3RoaXMud2lkdGh9LG4ucHJvdG90eXBlLmdldENlbnRlclk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55K3RoaXMuaGVpZ2h0LzJ9LG4ucHJvdG90eXBlLmdldE1pblk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRZKCl9LG4ucHJvdG90eXBlLmdldE1heFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRZKCkrdGhpcy5oZWlnaHR9LG4ucHJvdG90eXBlLmdldFdpZHRoSGFsZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLndpZHRoLzJ9LG4ucHJvdG90eXBlLmdldEhlaWdodEhhbGY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWlnaHQvMn0sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmdHlwZW9mIFN5bWJvbC5pdGVyYXRvcj09InN5bWJvbCI/ZnVuY3Rpb24oYSl7cmV0dXJuIHR5cGVvZiBhfTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmdHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmYS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGF9O2Z1bmN0aW9uIGkoKXt9byhpLCJVbmlxdWVJREdlbmVyZXRvciIpLGkubGFzdElEPTAsaS5jcmVhdGVJRD1mdW5jdGlvbihhKXtyZXR1cm4gaS5pc1ByaW1pdGl2ZShhKT9hOihhLnVuaXF1ZUlEIT1udWxsfHwoYS51bmlxdWVJRD1pLmdldFN0cmluZygpLGkubGFzdElEKyspLGEudW5pcXVlSUQpfSxpLmdldFN0cmluZz1mdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbCYmKGE9aS5sYXN0SUQpLCJPYmplY3QjIithfSxpLmlzUHJpbWl0aXZlPWZ1bmN0aW9uKGEpe3ZhciBzPXR5cGVvZiBhPiJ1Ij8idW5kZWZpbmVkIjpuKGEpO3JldHVybiBhPT1udWxsfHxzIT0ib2JqZWN0IiYmcyE9ImZ1bmN0aW9uIn0sdC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihtKXtpZihBcnJheS5pc0FycmF5KG0pKXtmb3IodmFyIGc9MCx5PUFycmF5KG0ubGVuZ3RoKTtnPG0ubGVuZ3RoO2crKyl5W2ddPW1bZ107cmV0dXJuIHl9ZWxzZSByZXR1cm4gQXJyYXkuZnJvbShtKX1vKG4sIl90b0NvbnN1bWFibGVBcnJheSIpO3ZhciBpPXIoMCksYT1yKDcpLHM9cigzKSxsPXIoMSksdT1yKDYpLGg9cig1KSxmPXIoMTcpLGQ9cigyOSk7ZnVuY3Rpb24gcChtKXtkLmNhbGwodGhpcyksdGhpcy5sYXlvdXRRdWFsaXR5PWkuUVVBTElUWSx0aGlzLmNyZWF0ZUJlbmRzQXNOZWVkZWQ9aS5ERUZBVUxUX0NSRUFURV9CRU5EU19BU19ORUVERUQsdGhpcy5pbmNyZW1lbnRhbD1pLkRFRkFVTFRfSU5DUkVNRU5UQUwsdGhpcy5hbmltYXRpb25PbkxheW91dD1pLkRFRkFVTFRfQU5JTUFUSU9OX09OX0xBWU9VVCx0aGlzLmFuaW1hdGlvbkR1cmluZ0xheW91dD1pLkRFRkFVTFRfQU5JTUFUSU9OX0RVUklOR19MQVlPVVQsdGhpcy5hbmltYXRpb25QZXJpb2Q9aS5ERUZBVUxUX0FOSU1BVElPTl9QRVJJT0QsdGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcz1pLkRFRkFVTFRfVU5JRk9STV9MRUFGX05PREVfU0laRVMsdGhpcy5lZGdlVG9EdW1teU5vZGVzPW5ldyBNYXAsdGhpcy5ncmFwaE1hbmFnZXI9bmV3IGEodGhpcyksdGhpcy5pc0xheW91dEZpbmlzaGVkPSExLHRoaXMuaXNTdWJMYXlvdXQ9ITEsdGhpcy5pc1JlbW90ZVVzZT0hMSxtIT1udWxsJiYodGhpcy5pc1JlbW90ZVVzZT1tKX1vKHAsIkxheW91dCIpLHAuUkFORE9NX1NFRUQ9MSxwLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSxwLnByb3RvdHlwZS5nZXRHcmFwaE1hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXJ9LHAucHJvdG90eXBlLmdldEFsbE5vZGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCl9LHAucHJvdG90eXBlLmdldEFsbEVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCl9LHAucHJvdG90eXBlLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCl9LHAucHJvdG90eXBlLm5ld0dyYXBoTWFuYWdlcj1mdW5jdGlvbigpe3ZhciBtPW5ldyBhKHRoaXMpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcj1tLG19LHAucHJvdG90eXBlLm5ld0dyYXBoPWZ1bmN0aW9uKG0pe3JldHVybiBuZXcgdShudWxsLHRoaXMuZ3JhcGhNYW5hZ2VyLG0pfSxwLnByb3RvdHlwZS5uZXdOb2RlPWZ1bmN0aW9uKG0pe3JldHVybiBuZXcgcyh0aGlzLmdyYXBoTWFuYWdlcixtKX0scC5wcm90b3R5cGUubmV3RWRnZT1mdW5jdGlvbihtKXtyZXR1cm4gbmV3IGwobnVsbCxudWxsLG0pfSxwLnByb3RvdHlwZS5jaGVja0xheW91dFN1Y2Nlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpPT1udWxsfHx0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKS5sZW5ndGg9PTB8fHRoaXMuZ3JhcGhNYW5hZ2VyLmluY2x1ZGVzSW52YWxpZEVkZ2UoKX0scC5wcm90b3R5cGUucnVuTGF5b3V0PWZ1bmN0aW9uKCl7dGhpcy5pc0xheW91dEZpbmlzaGVkPSExLHRoaXMudGlsaW5nUHJlTGF5b3V0JiZ0aGlzLnRpbGluZ1ByZUxheW91dCgpLHRoaXMuaW5pdFBhcmFtZXRlcnMoKTt2YXIgbTtyZXR1cm4gdGhpcy5jaGVja0xheW91dFN1Y2Nlc3MoKT9tPSExOm09dGhpcy5sYXlvdXQoKSxpLkFOSU1BVEU9PT0iZHVyaW5nIj8hMToobSYmKHRoaXMuaXNTdWJMYXlvdXR8fHRoaXMuZG9Qb3N0TGF5b3V0KCkpLHRoaXMudGlsaW5nUG9zdExheW91dCYmdGhpcy50aWxpbmdQb3N0TGF5b3V0KCksdGhpcy5pc0xheW91dEZpbmlzaGVkPSEwLG0pfSxwLnByb3RvdHlwZS5kb1Bvc3RMYXlvdXQ9ZnVuY3Rpb24oKXt0aGlzLmluY3JlbWVudGFsfHx0aGlzLnRyYW5zZm9ybSgpLHRoaXMudXBkYXRlKCl9LHAucHJvdG90eXBlLnVwZGF0ZTI9ZnVuY3Rpb24oKXtpZih0aGlzLmNyZWF0ZUJlbmRzQXNOZWVkZWQmJih0aGlzLmNyZWF0ZUJlbmRwb2ludHNGcm9tRHVtbXlOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKSksIXRoaXMuaXNSZW1vdGVVc2Upe2Zvcih2YXIgbSxnPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCkseT0wO3k8Zy5sZW5ndGg7eSsrKW09Z1t5XTtmb3IodmFyIHYseD10aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKSx5PTA7eTx4Lmxlbmd0aDt5Kyspdj14W3ldO3RoaXMudXBkYXRlKHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKSl9fSxwLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24obSl7aWYobT09bnVsbCl0aGlzLnVwZGF0ZTIoKTtlbHNlIGlmKG0gaW5zdGFuY2VvZiBzKXt2YXIgZz1tO2lmKGcuZ2V0Q2hpbGQoKSE9bnVsbClmb3IodmFyIHk9Zy5nZXRDaGlsZCgpLmdldE5vZGVzKCksdj0wO3Y8eS5sZW5ndGg7disrKXVwZGF0ZSh5W3ZdKTtpZihnLnZHcmFwaE9iamVjdCE9bnVsbCl7dmFyIHg9Zy52R3JhcGhPYmplY3Q7eC51cGRhdGUoZyl9fWVsc2UgaWYobSBpbnN0YW5jZW9mIGwpe3ZhciBiPW07aWYoYi52R3JhcGhPYmplY3QhPW51bGwpe3ZhciB3PWIudkdyYXBoT2JqZWN0O3cudXBkYXRlKGIpfX1lbHNlIGlmKG0gaW5zdGFuY2VvZiB1KXt2YXIgXz1tO2lmKF8udkdyYXBoT2JqZWN0IT1udWxsKXt2YXIgVD1fLnZHcmFwaE9iamVjdDtULnVwZGF0ZShfKX19fSxwLnByb3RvdHlwZS5pbml0UGFyYW1ldGVycz1mdW5jdGlvbigpe3RoaXMuaXNTdWJMYXlvdXR8fCh0aGlzLmxheW91dFF1YWxpdHk9aS5RVUFMSVRZLHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0PWkuREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVCx0aGlzLmFuaW1hdGlvblBlcmlvZD1pLkRFRkFVTFRfQU5JTUFUSU9OX1BFUklPRCx0aGlzLmFuaW1hdGlvbk9uTGF5b3V0PWkuREVGQVVMVF9BTklNQVRJT05fT05fTEFZT1VULHRoaXMuaW5jcmVtZW50YWw9aS5ERUZBVUxUX0lOQ1JFTUVOVEFMLHRoaXMuY3JlYXRlQmVuZHNBc05lZWRlZD1pLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRCx0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzPWkuREVGQVVMVF9VTklGT1JNX0xFQUZfTk9ERV9TSVpFUyksdGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQmJih0aGlzLmFuaW1hdGlvbk9uTGF5b3V0PSExKX0scC5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKG0pe2lmKG09PW51bGwpdGhpcy50cmFuc2Zvcm0obmV3IGgoMCwwKSk7ZWxzZXt2YXIgZz1uZXcgZix5PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS51cGRhdGVMZWZ0VG9wKCk7aWYoeSE9bnVsbCl7Zy5zZXRXb3JsZE9yZ1gobS54KSxnLnNldFdvcmxkT3JnWShtLnkpLGcuc2V0RGV2aWNlT3JnWCh5LngpLGcuc2V0RGV2aWNlT3JnWSh5LnkpO2Zvcih2YXIgdj10aGlzLmdldEFsbE5vZGVzKCkseCxiPTA7Yjx2Lmxlbmd0aDtiKyspeD12W2JdLHgudHJhbnNmb3JtKGcpfX19LHAucHJvdG90eXBlLnBvc2l0aW9uTm9kZXNSYW5kb21seT1mdW5jdGlvbihtKXtpZihtPT1udWxsKXRoaXMucG9zaXRpb25Ob2Rlc1JhbmRvbWx5KHRoaXMuZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0Um9vdCgpKSx0aGlzLmdldEdyYXBoTWFuYWdlcigpLmdldFJvb3QoKS51cGRhdGVCb3VuZHMoITApO2Vsc2UgZm9yKHZhciBnLHksdj1tLmdldE5vZGVzKCkseD0wO3g8di5sZW5ndGg7eCsrKWc9dlt4XSx5PWcuZ2V0Q2hpbGQoKSx5PT1udWxsfHx5LmdldE5vZGVzKCkubGVuZ3RoPT0wP2cuc2NhdHRlcigpOih0aGlzLnBvc2l0aW9uTm9kZXNSYW5kb21seSh5KSxnLnVwZGF0ZUJvdW5kcygpKX0scC5wcm90b3R5cGUuZ2V0RmxhdEZvcmVzdD1mdW5jdGlvbigpe2Zvcih2YXIgbT1bXSxnPSEwLHk9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldE5vZGVzKCksdj0hMCx4PTA7eDx5Lmxlbmd0aDt4KyspeVt4XS5nZXRDaGlsZCgpIT1udWxsJiYodj0hMSk7aWYoIXYpcmV0dXJuIG07dmFyIGI9bmV3IFNldCx3PVtdLF89bmV3IE1hcCxUPVtdO2ZvcihUPVQuY29uY2F0KHkpO1QubGVuZ3RoPjAmJmc7KXtmb3Iody5wdXNoKFRbMF0pO3cubGVuZ3RoPjAmJmc7KXt2YXIgRT13WzBdO3cuc3BsaWNlKDAsMSksYi5hZGQoRSk7Zm9yKHZhciBMPUUuZ2V0RWRnZXMoKSx4PTA7eDxMLmxlbmd0aDt4Kyspe3ZhciBTPUxbeF0uZ2V0T3RoZXJFbmQoRSk7aWYoXy5nZXQoRSkhPVMpaWYoIWIuaGFzKFMpKXcucHVzaChTKSxfLnNldChTLEUpO2Vsc2V7Zz0hMTticmVha319fWlmKCFnKW09W107ZWxzZXt2YXIgQT1bXS5jb25jYXQobihiKSk7bS5wdXNoKEEpO2Zvcih2YXIgeD0wO3g8QS5sZW5ndGg7eCsrKXt2YXIgST1BW3hdLEQ9VC5pbmRleE9mKEkpO0Q+LTEmJlQuc3BsaWNlKEQsMSl9Yj1uZXcgU2V0LF89bmV3IE1hcH19cmV0dXJuIG19LHAucHJvdG90eXBlLmNyZWF0ZUR1bW15Tm9kZXNGb3JCZW5kcG9pbnRzPWZ1bmN0aW9uKG0pe2Zvcih2YXIgZz1bXSx5PW0uc291cmNlLHY9dGhpcy5ncmFwaE1hbmFnZXIuY2FsY0xvd2VzdENvbW1vbkFuY2VzdG9yKG0uc291cmNlLG0udGFyZ2V0KSx4PTA7eDxtLmJlbmRwb2ludHMubGVuZ3RoO3grKyl7dmFyIGI9dGhpcy5uZXdOb2RlKG51bGwpO2Iuc2V0UmVjdChuZXcgUG9pbnQoMCwwKSxuZXcgRGltZW5zaW9uKDEsMSkpLHYuYWRkKGIpO3ZhciB3PXRoaXMubmV3RWRnZShudWxsKTt0aGlzLmdyYXBoTWFuYWdlci5hZGQodyx5LGIpLGcuYWRkKGIpLHk9Yn12YXIgdz10aGlzLm5ld0VkZ2UobnVsbCk7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmFkZCh3LHksbS50YXJnZXQpLHRoaXMuZWRnZVRvRHVtbXlOb2Rlcy5zZXQobSxnKSxtLmlzSW50ZXJHcmFwaCgpP3RoaXMuZ3JhcGhNYW5hZ2VyLnJlbW92ZShtKTp2LnJlbW92ZShtKSxnfSxwLnByb3RvdHlwZS5jcmVhdGVCZW5kcG9pbnRzRnJvbUR1bW15Tm9kZXM9ZnVuY3Rpb24oKXt2YXIgbT1bXTttPW0uY29uY2F0KHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCkpLG09W10uY29uY2F0KG4odGhpcy5lZGdlVG9EdW1teU5vZGVzLmtleXMoKSkpLmNvbmNhdChtKTtmb3IodmFyIGc9MDtnPG0ubGVuZ3RoO2crKyl7dmFyIHk9bVtnXTtpZih5LmJlbmRwb2ludHMubGVuZ3RoPjApe2Zvcih2YXIgdj10aGlzLmVkZ2VUb0R1bW15Tm9kZXMuZ2V0KHkpLHg9MDt4PHYubGVuZ3RoO3grKyl7dmFyIGI9dlt4XSx3PW5ldyBoKGIuZ2V0Q2VudGVyWCgpLGIuZ2V0Q2VudGVyWSgpKSxfPXkuYmVuZHBvaW50cy5nZXQoeCk7Xy54PXcueCxfLnk9dy55LGIuZ2V0T3duZXIoKS5yZW1vdmUoYil9dGhpcy5ncmFwaE1hbmFnZXIuYWRkKHkseS5zb3VyY2UseS50YXJnZXQpfX19LHAudHJhbnNmb3JtPWZ1bmN0aW9uKG0sZyx5LHYpe2lmKHkhPW51bGwmJnYhPW51bGwpe3ZhciB4PWc7aWYobTw9NTApe3ZhciBiPWcveTt4LT0oZy1iKS81MCooNTAtbSl9ZWxzZXt2YXIgdz1nKnY7eCs9KHctZykvNTAqKG0tNTApfXJldHVybiB4fWVsc2V7dmFyIF8sVDtyZXR1cm4gbTw9NTA/KF89OSpnLzUwMCxUPWcvMTApOihfPTkqZy81MCxUPS04KmcpLF8qbStUfX0scC5maW5kQ2VudGVyT2ZUcmVlPWZ1bmN0aW9uKG0pe3ZhciBnPVtdO2c9Zy5jb25jYXQobSk7dmFyIHk9W10sdj1uZXcgTWFwLHg9ITEsYj1udWxsOyhnLmxlbmd0aD09MXx8Zy5sZW5ndGg9PTIpJiYoeD0hMCxiPWdbMF0pO2Zvcih2YXIgdz0wO3c8Zy5sZW5ndGg7dysrKXt2YXIgXz1nW3ddLFQ9Xy5nZXROZWlnaGJvcnNMaXN0KCkuc2l6ZTt2LnNldChfLF8uZ2V0TmVpZ2hib3JzTGlzdCgpLnNpemUpLFQ9PTEmJnkucHVzaChfKX12YXIgRT1bXTtmb3IoRT1FLmNvbmNhdCh5KTsheDspe3ZhciBMPVtdO0w9TC5jb25jYXQoRSksRT1bXTtmb3IodmFyIHc9MDt3PGcubGVuZ3RoO3crKyl7dmFyIF89Z1t3XSxTPWcuaW5kZXhPZihfKTtTPj0wJiZnLnNwbGljZShTLDEpO3ZhciBBPV8uZ2V0TmVpZ2hib3JzTGlzdCgpO0EuZm9yRWFjaChmdW5jdGlvbihrKXtpZih5LmluZGV4T2Yoayk8MCl7dmFyIFI9di5nZXQoayksQz1SLTE7Qz09MSYmRS5wdXNoKGspLHYuc2V0KGssQyl9fSl9eT15LmNvbmNhdChFKSwoZy5sZW5ndGg9PTF8fGcubGVuZ3RoPT0yKSYmKHg9ITAsYj1nWzBdKX1yZXR1cm4gYn0scC5wcm90b3R5cGUuc2V0R3JhcGhNYW5hZ2VyPWZ1bmN0aW9uKG0pe3RoaXMuZ3JhcGhNYW5hZ2VyPW19LHQuZXhwb3J0cz1wfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt9byhuLCJSYW5kb21TZWVkIiksbi5zZWVkPTEsbi54PTAsbi5uZXh0RG91YmxlPWZ1bmN0aW9uKCl7cmV0dXJuIG4ueD1NYXRoLnNpbihuLnNlZWQrKykqMWU0LG4ueC1NYXRoLmZsb29yKG4ueCl9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNSk7ZnVuY3Rpb24gaShhLHMpe3RoaXMubHdvcmxkT3JnWD0wLHRoaXMubHdvcmxkT3JnWT0wLHRoaXMubGRldmljZU9yZ1g9MCx0aGlzLmxkZXZpY2VPcmdZPTAsdGhpcy5sd29ybGRFeHRYPTEsdGhpcy5sd29ybGRFeHRZPTEsdGhpcy5sZGV2aWNlRXh0WD0xLHRoaXMubGRldmljZUV4dFk9MX1vKGksIlRyYW5zZm9ybSIpLGkucHJvdG90eXBlLmdldFdvcmxkT3JnWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmx3b3JsZE9yZ1h9LGkucHJvdG90eXBlLnNldFdvcmxkT3JnWD1mdW5jdGlvbihhKXt0aGlzLmx3b3JsZE9yZ1g9YX0saS5wcm90b3R5cGUuZ2V0V29ybGRPcmdZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubHdvcmxkT3JnWX0saS5wcm90b3R5cGUuc2V0V29ybGRPcmdZPWZ1bmN0aW9uKGEpe3RoaXMubHdvcmxkT3JnWT1hfSxpLnByb3RvdHlwZS5nZXRXb3JsZEV4dFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sd29ybGRFeHRYfSxpLnByb3RvdHlwZS5zZXRXb3JsZEV4dFg9ZnVuY3Rpb24oYSl7dGhpcy5sd29ybGRFeHRYPWF9LGkucHJvdG90eXBlLmdldFdvcmxkRXh0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmx3b3JsZEV4dFl9LGkucHJvdG90eXBlLnNldFdvcmxkRXh0WT1mdW5jdGlvbihhKXt0aGlzLmx3b3JsZEV4dFk9YX0saS5wcm90b3R5cGUuZ2V0RGV2aWNlT3JnWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VPcmdYfSxpLnByb3RvdHlwZS5zZXREZXZpY2VPcmdYPWZ1bmN0aW9uKGEpe3RoaXMubGRldmljZU9yZ1g9YX0saS5wcm90b3R5cGUuZ2V0RGV2aWNlT3JnWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VPcmdZfSxpLnByb3RvdHlwZS5zZXREZXZpY2VPcmdZPWZ1bmN0aW9uKGEpe3RoaXMubGRldmljZU9yZ1k9YX0saS5wcm90b3R5cGUuZ2V0RGV2aWNlRXh0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VFeHRYfSxpLnByb3RvdHlwZS5zZXREZXZpY2VFeHRYPWZ1bmN0aW9uKGEpe3RoaXMubGRldmljZUV4dFg9YX0saS5wcm90b3R5cGUuZ2V0RGV2aWNlRXh0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VFeHRZfSxpLnByb3RvdHlwZS5zZXREZXZpY2VFeHRZPWZ1bmN0aW9uKGEpe3RoaXMubGRldmljZUV4dFk9YX0saS5wcm90b3R5cGUudHJhbnNmb3JtWD1mdW5jdGlvbihhKXt2YXIgcz0wLGw9dGhpcy5sd29ybGRFeHRYO3JldHVybiBsIT0wJiYocz10aGlzLmxkZXZpY2VPcmdYKyhhLXRoaXMubHdvcmxkT3JnWCkqdGhpcy5sZGV2aWNlRXh0WC9sKSxzfSxpLnByb3RvdHlwZS50cmFuc2Zvcm1ZPWZ1bmN0aW9uKGEpe3ZhciBzPTAsbD10aGlzLmx3b3JsZEV4dFk7cmV0dXJuIGwhPTAmJihzPXRoaXMubGRldmljZU9yZ1krKGEtdGhpcy5sd29ybGRPcmdZKSp0aGlzLmxkZXZpY2VFeHRZL2wpLHN9LGkucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1YPWZ1bmN0aW9uKGEpe3ZhciBzPTAsbD10aGlzLmxkZXZpY2VFeHRYO3JldHVybiBsIT0wJiYocz10aGlzLmx3b3JsZE9yZ1grKGEtdGhpcy5sZGV2aWNlT3JnWCkqdGhpcy5sd29ybGRFeHRYL2wpLHN9LGkucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1ZPWZ1bmN0aW9uKGEpe3ZhciBzPTAsbD10aGlzLmxkZXZpY2VFeHRZO3JldHVybiBsIT0wJiYocz10aGlzLmx3b3JsZE9yZ1krKGEtdGhpcy5sZGV2aWNlT3JnWSkqdGhpcy5sd29ybGRFeHRZL2wpLHN9LGkucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1Qb2ludD1mdW5jdGlvbihhKXt2YXIgcz1uZXcgbih0aGlzLmludmVyc2VUcmFuc2Zvcm1YKGEueCksdGhpcy5pbnZlcnNlVHJhbnNmb3JtWShhLnkpKTtyZXR1cm4gc30sdC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihkKXtpZihBcnJheS5pc0FycmF5KGQpKXtmb3IodmFyIHA9MCxtPUFycmF5KGQubGVuZ3RoKTtwPGQubGVuZ3RoO3ArKyltW3BdPWRbcF07cmV0dXJuIG19ZWxzZSByZXR1cm4gQXJyYXkuZnJvbShkKX1vKG4sIl90b0NvbnN1bWFibGVBcnJheSIpO3ZhciBpPXIoMTUpLGE9cig0KSxzPXIoMCksbD1yKDgpLHU9cig5KTtmdW5jdGlvbiBoKCl7aS5jYWxsKHRoaXMpLHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbj1hLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OLHRoaXMuZ3Jhdml0eUNvbnN0YW50PWEuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RILHRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQ9YS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEgsdGhpcy5ncmF2aXR5UmFuZ2VGYWN0b3I9YS5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMuY29tcG91bmRHcmF2aXR5UmFuZ2VGYWN0b3I9YS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMuZGlzcGxhY2VtZW50VGhyZXNob2xkUGVyTm9kZT0zKmEuREVGQVVMVF9FREdFX0xFTkdUSC8xMDAsdGhpcy5jb29saW5nRmFjdG9yPWEuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCx0aGlzLmluaXRpYWxDb29saW5nRmFjdG9yPWEuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCx0aGlzLnRvdGFsRGlzcGxhY2VtZW50PTAsdGhpcy5vbGRUb3RhbERpc3BsYWNlbWVudD0wLHRoaXMubWF4SXRlcmF0aW9ucz1hLk1BWF9JVEVSQVRJT05TfW8oaCwiRkRMYXlvdXQiKSxoLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKTtmb3IodmFyIGYgaW4gaSloW2ZdPWlbZl07aC5wcm90b3R5cGUuaW5pdFBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtpLnByb3RvdHlwZS5pbml0UGFyYW1ldGVycy5jYWxsKHRoaXMsYXJndW1lbnRzKSx0aGlzLnRvdGFsSXRlcmF0aW9ucz0wLHRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zPTAsdGhpcy51c2VGUkdyaWRWYXJpYW50PWEuREVGQVVMVF9VU0VfU01BUlRfUkVQVUxTSU9OX1JBTkdFX0NBTENVTEFUSU9OLHRoaXMuZ3JpZD1bXX0saC5wcm90b3R5cGUuY2FsY0lkZWFsRWRnZUxlbmd0aHM9ZnVuY3Rpb24oKXtmb3IodmFyIGQscCxtLGcseSx2LHgsYj10aGlzLmdldEdyYXBoTWFuYWdlcigpLmdldEFsbEVkZ2VzKCksdz0wO3c8Yi5sZW5ndGg7dysrKWQ9Ylt3XSxwPWQuaWRlYWxMZW5ndGgsZC5pc0ludGVyR3JhcGgmJihnPWQuZ2V0U291cmNlKCkseT1kLmdldFRhcmdldCgpLHY9ZC5nZXRTb3VyY2VJbkxjYSgpLmdldEVzdGltYXRlZFNpemUoKSx4PWQuZ2V0VGFyZ2V0SW5MY2EoKS5nZXRFc3RpbWF0ZWRTaXplKCksdGhpcy51c2VTbWFydElkZWFsRWRnZUxlbmd0aENhbGN1bGF0aW9uJiYoZC5pZGVhbExlbmd0aCs9dit4LTIqcy5TSU1QTEVfTk9ERV9TSVpFKSxtPWQuZ2V0TGNhKCkuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCksZC5pZGVhbExlbmd0aCs9cCphLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1IqKGcuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCkreS5nZXRJbmNsdXNpb25UcmVlRGVwdGgoKS0yKm0pKX0saC5wcm90b3R5cGUuaW5pdFNwcmluZ0VtYmVkZGVyPWZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5nZXRBbGxOb2RlcygpLmxlbmd0aDt0aGlzLmluY3JlbWVudGFsPyhkPmEuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUJiYodGhpcy5jb29saW5nRmFjdG9yPU1hdGgubWF4KHRoaXMuY29vbGluZ0ZhY3RvciphLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1IsdGhpcy5jb29saW5nRmFjdG9yLShkLWEuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKS8oYS5BREFQVEFUSU9OX1VQUEVSX05PREVfTElNSVQtYS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpKnRoaXMuY29vbGluZ0ZhY3RvciooMS1hLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1IpKSksdGhpcy5tYXhOb2RlRGlzcGxhY2VtZW50PWEuTUFYX05PREVfRElTUExBQ0VNRU5UX0lOQ1JFTUVOVEFMKTooZD5hLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVD90aGlzLmNvb2xpbmdGYWN0b3I9TWF0aC5tYXgoYS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SLDEtKGQtYS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpLyhhLkFEQVBUQVRJT05fVVBQRVJfTk9ERV9MSU1JVC1hLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCkqKDEtYS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SKSk6dGhpcy5jb29saW5nRmFjdG9yPTEsdGhpcy5pbml0aWFsQ29vbGluZ0ZhY3Rvcj10aGlzLmNvb2xpbmdGYWN0b3IsdGhpcy5tYXhOb2RlRGlzcGxhY2VtZW50PWEuTUFYX05PREVfRElTUExBQ0VNRU5UKSx0aGlzLm1heEl0ZXJhdGlvbnM9TWF0aC5tYXgodGhpcy5nZXRBbGxOb2RlcygpLmxlbmd0aCo1LHRoaXMubWF4SXRlcmF0aW9ucyksdGhpcy5kaXNwbGFjZW1lbnRUaHJlc2hvbGRQZXJOb2RlPTMqYS5ERUZBVUxUX0VER0VfTEVOR1RILzEwMCx0aGlzLnRvdGFsRGlzcGxhY2VtZW50VGhyZXNob2xkPXRoaXMuZGlzcGxhY2VtZW50VGhyZXNob2xkUGVyTm9kZSp0aGlzLmdldEFsbE5vZGVzKCkubGVuZ3RoLHRoaXMucmVwdWxzaW9uUmFuZ2U9dGhpcy5jYWxjUmVwdWxzaW9uUmFuZ2UoKX0saC5wcm90b3R5cGUuY2FsY1NwcmluZ0ZvcmNlcz1mdW5jdGlvbigpe2Zvcih2YXIgZD10aGlzLmdldEFsbEVkZ2VzKCkscCxtPTA7bTxkLmxlbmd0aDttKyspcD1kW21dLHRoaXMuY2FsY1NwcmluZ0ZvcmNlKHAscC5pZGVhbExlbmd0aCl9LGgucHJvdG90eXBlLmNhbGNSZXB1bHNpb25Gb3JjZXM9ZnVuY3Rpb24oKXt2YXIgZD1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06ITAscD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITEsbSxnLHksdix4PXRoaXMuZ2V0QWxsTm9kZXMoKSxiO2lmKHRoaXMudXNlRlJHcmlkVmFyaWFudClmb3IodGhpcy50b3RhbEl0ZXJhdGlvbnMlYS5HUklEX0NBTENVTEFUSU9OX0NIRUNLX1BFUklPRD09MSYmZCYmdGhpcy51cGRhdGVHcmlkKCksYj1uZXcgU2V0LG09MDttPHgubGVuZ3RoO20rKyl5PXhbbV0sdGhpcy5jYWxjdWxhdGVSZXB1bHNpb25Gb3JjZU9mQU5vZGUoeSxiLGQscCksYi5hZGQoeSk7ZWxzZSBmb3IobT0wO208eC5sZW5ndGg7bSsrKWZvcih5PXhbbV0sZz1tKzE7Zzx4Lmxlbmd0aDtnKyspdj14W2ddLHkuZ2V0T3duZXIoKT09di5nZXRPd25lcigpJiZ0aGlzLmNhbGNSZXB1bHNpb25Gb3JjZSh5LHYpfSxoLnByb3RvdHlwZS5jYWxjR3Jhdml0YXRpb25hbEZvcmNlcz1mdW5jdGlvbigpe2Zvcih2YXIgZCxwPXRoaXMuZ2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKSxtPTA7bTxwLmxlbmd0aDttKyspZD1wW21dLHRoaXMuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZShkKX0saC5wcm90b3R5cGUubW92ZU5vZGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciBkPXRoaXMuZ2V0QWxsTm9kZXMoKSxwLG09MDttPGQubGVuZ3RoO20rKylwPWRbbV0scC5tb3ZlKCl9LGgucHJvdG90eXBlLmNhbGNTcHJpbmdGb3JjZT1mdW5jdGlvbihkLHApe3ZhciBtPWQuZ2V0U291cmNlKCksZz1kLmdldFRhcmdldCgpLHksdix4LGI7aWYodGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcyYmbS5nZXRDaGlsZCgpPT1udWxsJiZnLmdldENoaWxkKCk9PW51bGwpZC51cGRhdGVMZW5ndGhTaW1wbGUoKTtlbHNlIGlmKGQudXBkYXRlTGVuZ3RoKCksZC5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQpcmV0dXJuO3k9ZC5nZXRMZW5ndGgoKSx5IT0wJiYodj1kLmVkZ2VFbGFzdGljaXR5Kih5LXApLHg9diooZC5sZW5ndGhYL3kpLGI9diooZC5sZW5ndGhZL3kpLG0uc3ByaW5nRm9yY2VYKz14LG0uc3ByaW5nRm9yY2VZKz1iLGcuc3ByaW5nRm9yY2VYLT14LGcuc3ByaW5nRm9yY2VZLT1iKX0saC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvbkZvcmNlPWZ1bmN0aW9uKGQscCl7dmFyIG09ZC5nZXRSZWN0KCksZz1wLmdldFJlY3QoKSx5PW5ldyBBcnJheSgyKSx2PW5ldyBBcnJheSg0KSx4LGIsdyxfLFQsRSxMO2lmKG0uaW50ZXJzZWN0cyhnKSl7bC5jYWxjU2VwYXJhdGlvbkFtb3VudChtLGcseSxhLkRFRkFVTFRfRURHRV9MRU5HVEgvMiksRT0yKnlbMF0sTD0yKnlbMV07dmFyIFM9ZC5ub09mQ2hpbGRyZW4qcC5ub09mQ2hpbGRyZW4vKGQubm9PZkNoaWxkcmVuK3Aubm9PZkNoaWxkcmVuKTtkLnJlcHVsc2lvbkZvcmNlWC09UypFLGQucmVwdWxzaW9uRm9yY2VZLT1TKkwscC5yZXB1bHNpb25Gb3JjZVgrPVMqRSxwLnJlcHVsc2lvbkZvcmNlWSs9UypMfWVsc2UgdGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcyYmZC5nZXRDaGlsZCgpPT1udWxsJiZwLmdldENoaWxkKCk9PW51bGw/KHg9Zy5nZXRDZW50ZXJYKCktbS5nZXRDZW50ZXJYKCksYj1nLmdldENlbnRlclkoKS1tLmdldENlbnRlclkoKSk6KGwuZ2V0SW50ZXJzZWN0aW9uKG0sZyx2KSx4PXZbMl0tdlswXSxiPXZbM10tdlsxXSksTWF0aC5hYnMoeCk8YS5NSU5fUkVQVUxTSU9OX0RJU1QmJih4PXUuc2lnbih4KSphLk1JTl9SRVBVTFNJT05fRElTVCksTWF0aC5hYnMoYik8YS5NSU5fUkVQVUxTSU9OX0RJU1QmJihiPXUuc2lnbihiKSphLk1JTl9SRVBVTFNJT05fRElTVCksdz14KngrYipiLF89TWF0aC5zcXJ0KHcpLFQ9KGQubm9kZVJlcHVsc2lvbi8yK3Aubm9kZVJlcHVsc2lvbi8yKSpkLm5vT2ZDaGlsZHJlbipwLm5vT2ZDaGlsZHJlbi93LEU9VCp4L18sTD1UKmIvXyxkLnJlcHVsc2lvbkZvcmNlWC09RSxkLnJlcHVsc2lvbkZvcmNlWS09TCxwLnJlcHVsc2lvbkZvcmNlWCs9RSxwLnJlcHVsc2lvbkZvcmNlWSs9TH0saC5wcm90b3R5cGUuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZT1mdW5jdGlvbihkKXt2YXIgcCxtLGcseSx2LHgsYix3O3A9ZC5nZXRPd25lcigpLG09KHAuZ2V0UmlnaHQoKStwLmdldExlZnQoKSkvMixnPShwLmdldFRvcCgpK3AuZ2V0Qm90dG9tKCkpLzIseT1kLmdldENlbnRlclgoKS1tLHY9ZC5nZXRDZW50ZXJZKCktZyx4PU1hdGguYWJzKHkpK2QuZ2V0V2lkdGgoKS8yLGI9TWF0aC5hYnModikrZC5nZXRIZWlnaHQoKS8yLGQuZ2V0T3duZXIoKT09dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpPyh3PXAuZ2V0RXN0aW1hdGVkU2l6ZSgpKnRoaXMuZ3Jhdml0eVJhbmdlRmFjdG9yLCh4Pnd8fGI+dykmJihkLmdyYXZpdGF0aW9uRm9yY2VYPS10aGlzLmdyYXZpdHlDb25zdGFudCp5LGQuZ3Jhdml0YXRpb25Gb3JjZVk9LXRoaXMuZ3Jhdml0eUNvbnN0YW50KnYpKToodz1wLmdldEVzdGltYXRlZFNpemUoKSp0aGlzLmNvbXBvdW5kR3Jhdml0eVJhbmdlRmFjdG9yLCh4Pnd8fGI+dykmJihkLmdyYXZpdGF0aW9uRm9yY2VYPS10aGlzLmdyYXZpdHlDb25zdGFudCp5KnRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQsZC5ncmF2aXRhdGlvbkZvcmNlWT0tdGhpcy5ncmF2aXR5Q29uc3RhbnQqdip0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50KSl9LGgucHJvdG90eXBlLmlzQ29udmVyZ2VkPWZ1bmN0aW9uKCl7dmFyIGQscD0hMTtyZXR1cm4gdGhpcy50b3RhbEl0ZXJhdGlvbnM+dGhpcy5tYXhJdGVyYXRpb25zLzMmJihwPU1hdGguYWJzKHRoaXMudG90YWxEaXNwbGFjZW1lbnQtdGhpcy5vbGRUb3RhbERpc3BsYWNlbWVudCk8MiksZD10aGlzLnRvdGFsRGlzcGxhY2VtZW50PHRoaXMudG90YWxEaXNwbGFjZW1lbnRUaHJlc2hvbGQsdGhpcy5vbGRUb3RhbERpc3BsYWNlbWVudD10aGlzLnRvdGFsRGlzcGxhY2VtZW50LGR8fHB9LGgucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24oKXt0aGlzLmFuaW1hdGlvbkR1cmluZ0xheW91dCYmIXRoaXMuaXNTdWJMYXlvdXQmJih0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucz09dGhpcy5hbmltYXRpb25QZXJpb2Q/KHRoaXMudXBkYXRlKCksdGhpcy5ub3RBbmltYXRlZEl0ZXJhdGlvbnM9MCk6dGhpcy5ub3RBbmltYXRlZEl0ZXJhdGlvbnMrKyl9LGgucHJvdG90eXBlLmNhbGNOb09mQ2hpbGRyZW5Gb3JBbGxOb2Rlcz1mdW5jdGlvbigpe2Zvcih2YXIgZCxwPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCksbT0wO208cC5sZW5ndGg7bSsrKWQ9cFttXSxkLm5vT2ZDaGlsZHJlbj1kLmdldE5vT2ZDaGlsZHJlbigpfSxoLnByb3RvdHlwZS5jYWxjR3JpZD1mdW5jdGlvbihkKXt2YXIgcD0wLG09MDtwPXBhcnNlSW50KE1hdGguY2VpbCgoZC5nZXRSaWdodCgpLWQuZ2V0TGVmdCgpKS90aGlzLnJlcHVsc2lvblJhbmdlKSksbT1wYXJzZUludChNYXRoLmNlaWwoKGQuZ2V0Qm90dG9tKCktZC5nZXRUb3AoKSkvdGhpcy5yZXB1bHNpb25SYW5nZSkpO2Zvcih2YXIgZz1uZXcgQXJyYXkocCkseT0wO3k8cDt5KyspZ1t5XT1uZXcgQXJyYXkobSk7Zm9yKHZhciB5PTA7eTxwO3krKylmb3IodmFyIHY9MDt2PG07disrKWdbeV1bdl09bmV3IEFycmF5O3JldHVybiBnfSxoLnByb3RvdHlwZS5hZGROb2RlVG9HcmlkPWZ1bmN0aW9uKGQscCxtKXt2YXIgZz0wLHk9MCx2PTAseD0wO2c9cGFyc2VJbnQoTWF0aC5mbG9vcigoZC5nZXRSZWN0KCkueC1wKS90aGlzLnJlcHVsc2lvblJhbmdlKSkseT1wYXJzZUludChNYXRoLmZsb29yKChkLmdldFJlY3QoKS53aWR0aCtkLmdldFJlY3QoKS54LXApL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSx2PXBhcnNlSW50KE1hdGguZmxvb3IoKGQuZ2V0UmVjdCgpLnktbSkvdGhpcy5yZXB1bHNpb25SYW5nZSkpLHg9cGFyc2VJbnQoTWF0aC5mbG9vcigoZC5nZXRSZWN0KCkuaGVpZ2h0K2QuZ2V0UmVjdCgpLnktbSkvdGhpcy5yZXB1bHNpb25SYW5nZSkpO2Zvcih2YXIgYj1nO2I8PXk7YisrKWZvcih2YXIgdz12O3c8PXg7dysrKXRoaXMuZ3JpZFtiXVt3XS5wdXNoKGQpLGQuc2V0R3JpZENvb3JkaW5hdGVzKGcseSx2LHgpfSxoLnByb3RvdHlwZS51cGRhdGVHcmlkPWZ1bmN0aW9uKCl7dmFyIGQscCxtPXRoaXMuZ2V0QWxsTm9kZXMoKTtmb3IodGhpcy5ncmlkPXRoaXMuY2FsY0dyaWQodGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpKSxkPTA7ZDxtLmxlbmd0aDtkKyspcD1tW2RdLHRoaXMuYWRkTm9kZVRvR3JpZChwLHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXRMZWZ0KCksdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldFRvcCgpKX0saC5wcm90b3R5cGUuY2FsY3VsYXRlUmVwdWxzaW9uRm9yY2VPZkFOb2RlPWZ1bmN0aW9uKGQscCxtLGcpe2lmKHRoaXMudG90YWxJdGVyYXRpb25zJWEuR1JJRF9DQUxDVUxBVElPTl9DSEVDS19QRVJJT0Q9PTEmJm18fGcpe3ZhciB5PW5ldyBTZXQ7ZC5zdXJyb3VuZGluZz1uZXcgQXJyYXk7Zm9yKHZhciB2LHg9dGhpcy5ncmlkLGI9ZC5zdGFydFgtMTtiPGQuZmluaXNoWCsyO2IrKylmb3IodmFyIHc9ZC5zdGFydFktMTt3PGQuZmluaXNoWSsyO3crKylpZighKGI8MHx8dzwwfHxiPj14Lmxlbmd0aHx8dz49eFswXS5sZW5ndGgpKXtmb3IodmFyIF89MDtfPHhbYl1bd10ubGVuZ3RoO18rKylpZih2PXhbYl1bd11bX10sIShkLmdldE93bmVyKCkhPXYuZ2V0T3duZXIoKXx8ZD09dikmJiFwLmhhcyh2KSYmIXkuaGFzKHYpKXt2YXIgVD1NYXRoLmFicyhkLmdldENlbnRlclgoKS12LmdldENlbnRlclgoKSktKGQuZ2V0V2lkdGgoKS8yK3YuZ2V0V2lkdGgoKS8yKSxFPU1hdGguYWJzKGQuZ2V0Q2VudGVyWSgpLXYuZ2V0Q2VudGVyWSgpKS0oZC5nZXRIZWlnaHQoKS8yK3YuZ2V0SGVpZ2h0KCkvMik7VDw9dGhpcy5yZXB1bHNpb25SYW5nZSYmRTw9dGhpcy5yZXB1bHNpb25SYW5nZSYmeS5hZGQodil9fWQuc3Vycm91bmRpbmc9W10uY29uY2F0KG4oeSkpfWZvcihiPTA7YjxkLnN1cnJvdW5kaW5nLmxlbmd0aDtiKyspdGhpcy5jYWxjUmVwdWxzaW9uRm9yY2UoZCxkLnN1cnJvdW5kaW5nW2JdKX0saC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvblJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LHQuZXhwb3J0cz1ofSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMSksaT1yKDQpO2Z1bmN0aW9uIGEobCx1LGgpe24uY2FsbCh0aGlzLGwsdSxoKSx0aGlzLmlkZWFsTGVuZ3RoPWkuREVGQVVMVF9FREdFX0xFTkdUSCx0aGlzLmVkZ2VFbGFzdGljaXR5PWkuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEh9byhhLCJGRExheW91dEVkZ2UiKSxhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKTtmb3IodmFyIHMgaW4gbilhW3NdPW5bc107dC5leHBvcnRzPWF9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigzKSxpPXIoNCk7ZnVuY3Rpb24gYShsLHUsaCxmKXtuLmNhbGwodGhpcyxsLHUsaCxmKSx0aGlzLm5vZGVSZXB1bHNpb249aS5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSCx0aGlzLnNwcmluZ0ZvcmNlWD0wLHRoaXMuc3ByaW5nRm9yY2VZPTAsdGhpcy5yZXB1bHNpb25Gb3JjZVg9MCx0aGlzLnJlcHVsc2lvbkZvcmNlWT0wLHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVg9MCx0aGlzLmdyYXZpdGF0aW9uRm9yY2VZPTAsdGhpcy5kaXNwbGFjZW1lbnRYPTAsdGhpcy5kaXNwbGFjZW1lbnRZPTAsdGhpcy5zdGFydFg9MCx0aGlzLmZpbmlzaFg9MCx0aGlzLnN0YXJ0WT0wLHRoaXMuZmluaXNoWT0wLHRoaXMuc3Vycm91bmRpbmc9W119byhhLCJGRExheW91dE5vZGUiKSxhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKTtmb3IodmFyIHMgaW4gbilhW3NdPW5bc107YS5wcm90b3R5cGUuc2V0R3JpZENvb3JkaW5hdGVzPWZ1bmN0aW9uKGwsdSxoLGYpe3RoaXMuc3RhcnRYPWwsdGhpcy5maW5pc2hYPXUsdGhpcy5zdGFydFk9aCx0aGlzLmZpbmlzaFk9Zn0sdC5leHBvcnRzPWF9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihpLGEpe3RoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLGkhPT1udWxsJiZhIT09bnVsbCYmKHRoaXMuaGVpZ2h0PWEsdGhpcy53aWR0aD1pKX1vKG4sIkRpbWVuc2lvbkQiKSxuLnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLndpZHRofSxuLnByb3RvdHlwZS5zZXRXaWR0aD1mdW5jdGlvbihpKXt0aGlzLndpZHRoPWl9LG4ucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhlaWdodH0sbi5wcm90b3R5cGUuc2V0SGVpZ2h0PWZ1bmN0aW9uKGkpe3RoaXMuaGVpZ2h0PWl9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTQpO2Z1bmN0aW9uIGkoKXt0aGlzLm1hcD17fSx0aGlzLmtleXM9W119byhpLCJIYXNoTWFwIiksaS5wcm90b3R5cGUucHV0PWZ1bmN0aW9uKGEscyl7dmFyIGw9bi5jcmVhdGVJRChhKTt0aGlzLmNvbnRhaW5zKGwpfHwodGhpcy5tYXBbbF09cyx0aGlzLmtleXMucHVzaChhKSl9LGkucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKGEpe3ZhciBzPW4uY3JlYXRlSUQoYSk7cmV0dXJuIHRoaXMubWFwW2FdIT1udWxsfSxpLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7dmFyIHM9bi5jcmVhdGVJRChhKTtyZXR1cm4gdGhpcy5tYXBbc119LGkucHJvdG90eXBlLmtleVNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmtleXN9LHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTQpO2Z1bmN0aW9uIGkoKXt0aGlzLnNldD17fX1vKGksIkhhc2hTZXQiKSxpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSl7dmFyIHM9bi5jcmVhdGVJRChhKTt0aGlzLmNvbnRhaW5zKHMpfHwodGhpcy5zZXRbc109YSl9LGkucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihhKXtkZWxldGUgdGhpcy5zZXRbbi5jcmVhdGVJRChhKV19LGkucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zZXQ9e319LGkucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnNldFtuLmNyZWF0ZUlEKGEpXT09YX0saS5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemUoKT09PTB9LGkucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5zZXQpLmxlbmd0aH0saS5wcm90b3R5cGUuYWRkQWxsVG89ZnVuY3Rpb24oYSl7Zm9yKHZhciBzPU9iamVjdC5rZXlzKHRoaXMuc2V0KSxsPXMubGVuZ3RoLHU9MDt1PGw7dSsrKWEucHVzaCh0aGlzLnNldFtzW3VdXSl9LGkucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5zZXQpLmxlbmd0aH0saS5wcm90b3R5cGUuYWRkQWxsPWZ1bmN0aW9uKGEpe2Zvcih2YXIgcz1hLmxlbmd0aCxsPTA7bDxzO2wrKyl7dmFyIHU9YVtsXTt0aGlzLmFkZCh1KX19LHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt9byhuLCJNYXRyaXgiKSxuLm11bHRNYXQ9ZnVuY3Rpb24oaSxhKXtmb3IodmFyIHM9W10sbD0wO2w8aS5sZW5ndGg7bCsrKXtzW2xdPVtdO2Zvcih2YXIgdT0wO3U8YVswXS5sZW5ndGg7dSsrKXtzW2xdW3VdPTA7Zm9yKHZhciBoPTA7aDxpWzBdLmxlbmd0aDtoKyspc1tsXVt1XSs9aVtsXVtoXSphW2hdW3VdfX1yZXR1cm4gc30sbi50cmFuc3Bvc2U9ZnVuY3Rpb24oaSl7Zm9yKHZhciBhPVtdLHM9MDtzPGlbMF0ubGVuZ3RoO3MrKyl7YVtzXT1bXTtmb3IodmFyIGw9MDtsPGkubGVuZ3RoO2wrKylhW3NdW2xdPWlbbF1bc119cmV0dXJuIGF9LG4ubXVsdENvbnM9ZnVuY3Rpb24oaSxhKXtmb3IodmFyIHM9W10sbD0wO2w8aS5sZW5ndGg7bCsrKXNbbF09aVtsXSphO3JldHVybiBzfSxuLm1pbnVzT3A9ZnVuY3Rpb24oaSxhKXtmb3IodmFyIHM9W10sbD0wO2w8aS5sZW5ndGg7bCsrKXNbbF09aVtsXS1hW2xdO3JldHVybiBzfSxuLmRvdFByb2R1Y3Q9ZnVuY3Rpb24oaSxhKXtmb3IodmFyIHM9MCxsPTA7bDxpLmxlbmd0aDtsKyspcys9aVtsXSphW2xdO3JldHVybiBzfSxuLm1hZz1mdW5jdGlvbihpKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZG90UHJvZHVjdChpLGkpKX0sbi5ub3JtYWxpemU9ZnVuY3Rpb24oaSl7Zm9yKHZhciBhPVtdLHM9dGhpcy5tYWcoaSksbD0wO2w8aS5sZW5ndGg7bCsrKWFbbF09aVtsXS9zO3JldHVybiBhfSxuLm11bHRHYW1tYT1mdW5jdGlvbihpKXtmb3IodmFyIGE9W10scz0wLGw9MDtsPGkubGVuZ3RoO2wrKylzKz1pW2xdO3MqPS0xL2kubGVuZ3RoO2Zvcih2YXIgdT0wO3U8aS5sZW5ndGg7dSsrKWFbdV09cytpW3VdO3JldHVybiBhfSxuLm11bHRMPWZ1bmN0aW9uKGksYSxzKXtmb3IodmFyIGw9W10sdT1bXSxoPVtdLGY9MDtmPGFbMF0ubGVuZ3RoO2YrKyl7Zm9yKHZhciBkPTAscD0wO3A8YS5sZW5ndGg7cCsrKWQrPS0uNSphW3BdW2ZdKmlbcF07dVtmXT1kfWZvcih2YXIgbT0wO208cy5sZW5ndGg7bSsrKXtmb3IodmFyIGc9MCx5PTA7eTxzLmxlbmd0aDt5KyspZys9c1ttXVt5XSp1W3ldO2hbbV09Z31mb3IodmFyIHY9MDt2PGEubGVuZ3RoO3YrKyl7Zm9yKHZhciB4PTAsYj0wO2I8YVswXS5sZW5ndGg7YisrKXgrPWFbdl1bYl0qaFtiXTtsW3ZdPXh9cmV0dXJuIGx9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCh1LGgpe2Zvcih2YXIgZj0wO2Y8aC5sZW5ndGg7ZisrKXt2YXIgZD1oW2ZdO2QuZW51bWVyYWJsZT1kLmVudW1lcmFibGV8fCExLGQuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBkJiYoZC53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsZC5rZXksZCl9fXJldHVybiBvKGwsImRlZmluZVByb3BlcnRpZXMiKSxmdW5jdGlvbih1LGgsZil7cmV0dXJuIGgmJmwodS5wcm90b3R5cGUsaCksZiYmbCh1LGYpLHV9fSgpO2Z1bmN0aW9uIGkobCx1KXtpZighKGwgaW5zdGFuY2VvZiB1KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1vKGksIl9jbGFzc0NhbGxDaGVjayIpO3ZhciBhPXIoMTEpLHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKHUsaCl7aSh0aGlzLGwpLChoIT09bnVsbHx8aCE9PXZvaWQgMCkmJih0aGlzLmNvbXBhcmVGdW5jdGlvbj10aGlzLl9kZWZhdWx0Q29tcGFyZUZ1bmN0aW9uKTt2YXIgZj12b2lkIDA7dSBpbnN0YW5jZW9mIGE/Zj11LnNpemUoKTpmPXUubGVuZ3RoLHRoaXMuX3F1aWNrc29ydCh1LDAsZi0xKX1yZXR1cm4gbyhsLCJRdWlja3NvcnQiKSxuKGwsW3trZXk6Il9xdWlja3NvcnQiLHZhbHVlOm8oZnVuY3Rpb24oaCxmLGQpe2lmKGY8ZCl7dmFyIHA9dGhpcy5fcGFydGl0aW9uKGgsZixkKTt0aGlzLl9xdWlja3NvcnQoaCxmLHApLHRoaXMuX3F1aWNrc29ydChoLHArMSxkKX19LCJfcXVpY2tzb3J0Iil9LHtrZXk6Il9wYXJ0aXRpb24iLHZhbHVlOm8oZnVuY3Rpb24oaCxmLGQpe2Zvcih2YXIgcD10aGlzLl9nZXQoaCxmKSxtPWYsZz1kOzspe2Zvcig7dGhpcy5jb21wYXJlRnVuY3Rpb24ocCx0aGlzLl9nZXQoaCxnKSk7KWctLTtmb3IoO3RoaXMuY29tcGFyZUZ1bmN0aW9uKHRoaXMuX2dldChoLG0pLHApOyltKys7aWYobTxnKXRoaXMuX3N3YXAoaCxtLGcpLG0rKyxnLS07ZWxzZSByZXR1cm4gZ319LCJfcGFydGl0aW9uIil9LHtrZXk6Il9nZXQiLHZhbHVlOm8oZnVuY3Rpb24oaCxmKXtyZXR1cm4gaCBpbnN0YW5jZW9mIGE/aC5nZXRfb2JqZWN0X2F0KGYpOmhbZl19LCJfZ2V0Iil9LHtrZXk6Il9zZXQiLHZhbHVlOm8oZnVuY3Rpb24oaCxmLGQpe2ggaW5zdGFuY2VvZiBhP2guc2V0X29iamVjdF9hdChmLGQpOmhbZl09ZH0sIl9zZXQiKX0se2tleToiX3N3YXAiLHZhbHVlOm8oZnVuY3Rpb24oaCxmLGQpe3ZhciBwPXRoaXMuX2dldChoLGYpO3RoaXMuX3NldChoLGYsdGhpcy5fZ2V0KGgsZCkpLHRoaXMuX3NldChoLGQscCl9LCJfc3dhcCIpfSx7a2V5OiJfZGVmYXVsdENvbXBhcmVGdW5jdGlvbiIsdmFsdWU6byhmdW5jdGlvbihoLGYpe3JldHVybiBmPmh9LCJfZGVmYXVsdENvbXBhcmVGdW5jdGlvbiIpfV0pLGx9KCk7dC5leHBvcnRzPXN9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe31vKG4sIlNWRCIpLG4uc3ZkPWZ1bmN0aW9uKGkpe3RoaXMuVT1udWxsLHRoaXMuVj1udWxsLHRoaXMucz1udWxsLHRoaXMubT0wLHRoaXMubj0wLHRoaXMubT1pLmxlbmd0aCx0aGlzLm49aVswXS5sZW5ndGg7dmFyIGE9TWF0aC5taW4odGhpcy5tLHRoaXMubik7dGhpcy5zPWZ1bmN0aW9uKGR0KXtmb3IodmFyIEplPVtdO2R0LS0gPjA7KUplLnB1c2goMCk7cmV0dXJuIEplfShNYXRoLm1pbih0aGlzLm0rMSx0aGlzLm4pKSx0aGlzLlU9ZnVuY3Rpb24oZHQpe3ZhciBKZT1vKGZ1bmN0aW9uIGN0KEN0KXtpZihDdC5sZW5ndGg9PTApcmV0dXJuIDA7Zm9yKHZhciBwdD1bXSxCdD0wO0J0PEN0WzBdO0J0KyspcHQucHVzaChjdChDdC5zbGljZSgxKSkpO3JldHVybiBwdH0sImFsbG9jYXRlIik7cmV0dXJuIEplKGR0KX0oW3RoaXMubSxhXSksdGhpcy5WPWZ1bmN0aW9uKGR0KXt2YXIgSmU9byhmdW5jdGlvbiBjdChDdCl7aWYoQ3QubGVuZ3RoPT0wKXJldHVybiAwO2Zvcih2YXIgcHQ9W10sQnQ9MDtCdDxDdFswXTtCdCsrKXB0LnB1c2goY3QoQ3Quc2xpY2UoMSkpKTtyZXR1cm4gcHR9LCJhbGxvY2F0ZSIpO3JldHVybiBKZShkdCl9KFt0aGlzLm4sdGhpcy5uXSk7Zm9yKHZhciBzPWZ1bmN0aW9uKGR0KXtmb3IodmFyIEplPVtdO2R0LS0gPjA7KUplLnB1c2goMCk7cmV0dXJuIEplfSh0aGlzLm4pLGw9ZnVuY3Rpb24oZHQpe2Zvcih2YXIgSmU9W107ZHQtLSA+MDspSmUucHVzaCgwKTtyZXR1cm4gSmV9KHRoaXMubSksdT0hMCxoPSEwLGY9TWF0aC5taW4odGhpcy5tLTEsdGhpcy5uKSxkPU1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5uLTIsdGhpcy5tKSkscD0wO3A8TWF0aC5tYXgoZixkKTtwKyspe2lmKHA8Zil7dGhpcy5zW3BdPTA7Zm9yKHZhciBtPXA7bTx0aGlzLm07bSsrKXRoaXMuc1twXT1uLmh5cG90KHRoaXMuc1twXSxpW21dW3BdKTtpZih0aGlzLnNbcF0hPT0wKXtpW3BdW3BdPDAmJih0aGlzLnNbcF09LXRoaXMuc1twXSk7Zm9yKHZhciBnPXA7Zzx0aGlzLm07ZysrKWlbZ11bcF0vPXRoaXMuc1twXTtpW3BdW3BdKz0xfXRoaXMuc1twXT0tdGhpcy5zW3BdfWZvcih2YXIgeT1wKzE7eTx0aGlzLm47eSsrKXtpZihmdW5jdGlvbihkdCxKZSl7cmV0dXJuIGR0JiZKZX0ocDxmLHRoaXMuc1twXSE9PTApKXtmb3IodmFyIHY9MCx4PXA7eDx0aGlzLm07eCsrKXYrPWlbeF1bcF0qaVt4XVt5XTt2PS12L2lbcF1bcF07Zm9yKHZhciBiPXA7Yjx0aGlzLm07YisrKWlbYl1beV0rPXYqaVtiXVtwXX1zW3ldPWlbcF1beV19aWYoZnVuY3Rpb24oZHQsSmUpe3JldHVybiBkdCYmSmV9KHUscDxmKSlmb3IodmFyIHc9cDt3PHRoaXMubTt3KyspdGhpcy5VW3ddW3BdPWlbd11bcF07aWYocDxkKXtzW3BdPTA7Zm9yKHZhciBfPXArMTtfPHRoaXMubjtfKyspc1twXT1uLmh5cG90KHNbcF0sc1tfXSk7aWYoc1twXSE9PTApe3NbcCsxXTwwJiYoc1twXT0tc1twXSk7Zm9yKHZhciBUPXArMTtUPHRoaXMubjtUKyspc1tUXS89c1twXTtzW3ArMV0rPTF9aWYoc1twXT0tc1twXSxmdW5jdGlvbihkdCxKZSl7cmV0dXJuIGR0JiZKZX0ocCsxPHRoaXMubSxzW3BdIT09MCkpe2Zvcih2YXIgRT1wKzE7RTx0aGlzLm07RSsrKWxbRV09MDtmb3IodmFyIEw9cCsxO0w8dGhpcy5uO0wrKylmb3IodmFyIFM9cCsxO1M8dGhpcy5tO1MrKylsW1NdKz1zW0xdKmlbU11bTF07Zm9yKHZhciBBPXArMTtBPHRoaXMubjtBKyspZm9yKHZhciBJPS1zW0FdL3NbcCsxXSxEPXArMTtEPHRoaXMubTtEKyspaVtEXVtBXSs9SSpsW0RdfWlmKGgpZm9yKHZhciBrPXArMTtrPHRoaXMubjtrKyspdGhpcy5WW2tdW3BdPXNba119fXZhciBSPU1hdGgubWluKHRoaXMubix0aGlzLm0rMSk7aWYoZjx0aGlzLm4mJih0aGlzLnNbZl09aVtmXVtmXSksdGhpcy5tPFImJih0aGlzLnNbUi0xXT0wKSxkKzE8UiYmKHNbZF09aVtkXVtSLTFdKSxzW1ItMV09MCx1KXtmb3IodmFyIEM9ZjtDPGE7QysrKXtmb3IodmFyIE89MDtPPHRoaXMubTtPKyspdGhpcy5VW09dW0NdPTA7dGhpcy5VW0NdW0NdPTF9Zm9yKHZhciBOPWYtMTtOPj0wO04tLSlpZih0aGlzLnNbTl0hPT0wKXtmb3IodmFyIFA9TisxO1A8YTtQKyspe2Zvcih2YXIgRj0wLEI9TjtCPHRoaXMubTtCKyspRis9dGhpcy5VW0JdW05dKnRoaXMuVVtCXVtQXTtGPS1GL3RoaXMuVVtOXVtOXTtmb3IodmFyIEc9TjtHPHRoaXMubTtHKyspdGhpcy5VW0ddW1BdKz1GKnRoaXMuVVtHXVtOXX1mb3IodmFyIHo9Tjt6PHRoaXMubTt6KyspdGhpcy5VW3pdW05dPS10aGlzLlVbel1bTl07dGhpcy5VW05dW05dPTErdGhpcy5VW05dW05dO2Zvcih2YXIgVz0wO1c8Ti0xO1crKyl0aGlzLlVbV11bTl09MH1lbHNle2Zvcih2YXIgWj0wO1o8dGhpcy5tO1orKyl0aGlzLlVbWl1bTl09MDt0aGlzLlVbTl1bTl09MX19aWYoaClmb3IodmFyIGo9dGhpcy5uLTE7aj49MDtqLS0pe2lmKGZ1bmN0aW9uKGR0LEplKXtyZXR1cm4gZHQmJkplfShqPGQsc1tqXSE9PTApKWZvcih2YXIgb2U9aisxO29lPGE7b2UrKyl7Zm9yKHZhciBLPTAsZWU9aisxO2VlPHRoaXMubjtlZSsrKUsrPXRoaXMuVltlZV1bal0qdGhpcy5WW2VlXVtvZV07Sz0tSy90aGlzLlZbaisxXVtqXTtmb3IodmFyIEo9aisxO0o8dGhpcy5uO0orKyl0aGlzLlZbSl1bb2VdKz1LKnRoaXMuVltKXVtqXX1mb3IodmFyIEg9MDtIPHRoaXMubjtIKyspdGhpcy5WW0hdW2pdPTA7dGhpcy5WW2pdW2pdPTF9Zm9yKHZhciBxPVItMSxRPTAsYWU9TWF0aC5wb3coMiwtNTIpLHVlPU1hdGgucG93KDIsLTk2Nik7Uj4wOyl7dmFyIGNlPXZvaWQgMCx0ZT12b2lkIDA7Zm9yKGNlPVItMjtjZT49LTEmJmNlIT09LTE7Y2UtLSlpZihNYXRoLmFicyhzW2NlXSk8PXVlK2FlKihNYXRoLmFicyh0aGlzLnNbY2VdKStNYXRoLmFicyh0aGlzLnNbY2UrMV0pKSl7c1tjZV09MDticmVha31pZihjZT09PVItMil0ZT00O2Vsc2V7dmFyIE5lPXZvaWQgMDtmb3IoTmU9Ui0xO05lPj1jZSYmTmUhPT1jZTtOZS0tKXt2YXIgc2U9KE5lIT09Uj9NYXRoLmFicyhzW05lXSk6MCkrKE5lIT09Y2UrMT9NYXRoLmFicyhzW05lLTFdKTowKTtpZihNYXRoLmFicyh0aGlzLnNbTmVdKTw9dWUrYWUqc2Upe3RoaXMuc1tOZV09MDticmVha319TmU9PT1jZT90ZT0zOk5lPT09Ui0xP3RlPTE6KHRlPTIsY2U9TmUpfXN3aXRjaChjZSsrLHRlKXtjYXNlIDE6e3ZhciBrZT1zW1ItMl07c1tSLTJdPTA7Zm9yKHZhciBSZT1SLTI7UmU+PWNlO1JlLS0pe3ZhciBDZT1uLmh5cG90KHRoaXMuc1tSZV0sa2UpLFBlPXRoaXMuc1tSZV0vQ2UsSWU9a2UvQ2U7aWYodGhpcy5zW1JlXT1DZSxSZSE9PWNlJiYoa2U9LUllKnNbUmUtMV0sc1tSZS0xXT1QZSpzW1JlLTFdKSxoKWZvcih2YXIgJGU9MDskZTx0aGlzLm47JGUrKylDZT1QZSp0aGlzLlZbJGVdW1JlXStJZSp0aGlzLlZbJGVdW1ItMV0sdGhpcy5WWyRlXVtSLTFdPS1JZSp0aGlzLlZbJGVdW1JlXStQZSp0aGlzLlZbJGVdW1ItMV0sdGhpcy5WWyRlXVtSZV09Q2V9fWJyZWFrO2Nhc2UgMjp7dmFyIHllPXNbY2UtMV07c1tjZS0xXT0wO2Zvcih2YXIgWD1jZTtYPFI7WCsrKXt2YXIgZmU9bi5oeXBvdCh0aGlzLnNbWF0seWUpLGhlPXRoaXMuc1tYXS9mZSxnZT15ZS9mZTtpZih0aGlzLnNbWF09ZmUseWU9LWdlKnNbWF0sc1tYXT1oZSpzW1hdLHUpZm9yKHZhciBuZT0wO25lPHRoaXMubTtuZSsrKWZlPWhlKnRoaXMuVVtuZV1bWF0rZ2UqdGhpcy5VW25lXVtjZS0xXSx0aGlzLlVbbmVdW2NlLTFdPS1nZSp0aGlzLlVbbmVdW1hdK2hlKnRoaXMuVVtuZV1bY2UtMV0sdGhpcy5VW25lXVtYXT1mZX19YnJlYWs7Y2FzZSAzOnt2YXIgdmU9TWF0aC5tYXgoTWF0aC5tYXgoTWF0aC5tYXgoTWF0aC5tYXgoTWF0aC5hYnModGhpcy5zW1ItMV0pLE1hdGguYWJzKHRoaXMuc1tSLTJdKSksTWF0aC5hYnMoc1tSLTJdKSksTWF0aC5hYnModGhpcy5zW2NlXSkpLE1hdGguYWJzKHNbY2VdKSksVT10aGlzLnNbUi0xXS92ZSxUZT10aGlzLnNbUi0yXS92ZSxpZT1zW1ItMl0vdmUsRWU9dGhpcy5zW2NlXS92ZSxBZT1zW2NlXS92ZSxHZT0oKFRlK1UpKihUZS1VKStpZSppZSkvMixCZT1VKmllKihVKmllKSxtZT0wOyhmdW5jdGlvbihkdCxKZSl7cmV0dXJuIGR0fHxKZX0pKEdlIT09MCxCZSE9PTApJiYobWU9TWF0aC5zcXJ0KEdlKkdlK0JlKSxHZTwwJiYobWU9LW1lKSxtZT1CZS8oR2UrbWUpKTtmb3IodmFyIEhlPShFZStVKSooRWUtVSkrbWUsT2U9RWUqQWUsZXQ9Y2U7ZXQ8Ui0xO2V0Kyspe3ZhciBidD1uLmh5cG90KEhlLE9lKSxrdD1IZS9idCx2dD1PZS9idDtpZihldCE9PWNlJiYoc1tldC0xXT1idCksSGU9a3QqdGhpcy5zW2V0XSt2dCpzW2V0XSxzW2V0XT1rdCpzW2V0XS12dCp0aGlzLnNbZXRdLE9lPXZ0KnRoaXMuc1tldCsxXSx0aGlzLnNbZXQrMV09a3QqdGhpcy5zW2V0KzFdLGgpZm9yKHZhciBydD0wO3J0PHRoaXMubjtydCsrKWJ0PWt0KnRoaXMuVltydF1bZXRdK3Z0KnRoaXMuVltydF1bZXQrMV0sdGhpcy5WW3J0XVtldCsxXT0tdnQqdGhpcy5WW3J0XVtldF0ra3QqdGhpcy5WW3J0XVtldCsxXSx0aGlzLlZbcnRdW2V0XT1idDtpZihidD1uLmh5cG90KEhlLE9lKSxrdD1IZS9idCx2dD1PZS9idCx0aGlzLnNbZXRdPWJ0LEhlPWt0KnNbZXRdK3Z0KnRoaXMuc1tldCsxXSx0aGlzLnNbZXQrMV09LXZ0KnNbZXRdK2t0KnRoaXMuc1tldCsxXSxPZT12dCpzW2V0KzFdLHNbZXQrMV09a3Qqc1tldCsxXSx1JiZldDx0aGlzLm0tMSlmb3IodmFyIHl0PTA7eXQ8dGhpcy5tO3l0KyspYnQ9a3QqdGhpcy5VW3l0XVtldF0rdnQqdGhpcy5VW3l0XVtldCsxXSx0aGlzLlVbeXRdW2V0KzFdPS12dCp0aGlzLlVbeXRdW2V0XStrdCp0aGlzLlVbeXRdW2V0KzFdLHRoaXMuVVt5dF1bZXRdPWJ0fXNbUi0yXT1IZSxRPVErMX1icmVhaztjYXNlIDQ6e2lmKHRoaXMuc1tjZV08PTAmJih0aGlzLnNbY2VdPXRoaXMuc1tjZV08MD8tdGhpcy5zW2NlXTowLGgpKWZvcih2YXIgVWU9MDtVZTw9cTtVZSsrKXRoaXMuVltVZV1bY2VdPS10aGlzLlZbVWVdW2NlXTtmb3IoO2NlPHEmJiEodGhpcy5zW2NlXT49dGhpcy5zW2NlKzFdKTspe3ZhciB0dD10aGlzLnNbY2VdO2lmKHRoaXMuc1tjZV09dGhpcy5zW2NlKzFdLHRoaXMuc1tjZSsxXT10dCxoJiZjZTx0aGlzLm4tMSlmb3IodmFyIGh0PTA7aHQ8dGhpcy5uO2h0KyspdHQ9dGhpcy5WW2h0XVtjZSsxXSx0aGlzLlZbaHRdW2NlKzFdPXRoaXMuVltodF1bY2VdLHRoaXMuVltodF1bY2VdPXR0O2lmKHUmJmNlPHRoaXMubS0xKWZvcih2YXIgRXQ9MDtFdDx0aGlzLm07RXQrKyl0dD10aGlzLlVbRXRdW2NlKzFdLHRoaXMuVVtFdF1bY2UrMV09dGhpcy5VW0V0XVtjZV0sdGhpcy5VW0V0XVtjZV09dHQ7Y2UrK31RPTAsUi0tfWJyZWFrfX12YXIgZXI9e1U6dGhpcy5VLFY6dGhpcy5WLFM6dGhpcy5zfTtyZXR1cm4gZXJ9LG4uaHlwb3Q9ZnVuY3Rpb24oaSxhKXt2YXIgcz12b2lkIDA7cmV0dXJuIE1hdGguYWJzKGkpPk1hdGguYWJzKGEpPyhzPWEvaSxzPU1hdGguYWJzKGkpKk1hdGguc3FydCgxK3MqcykpOmEhPTA/KHM9aS9hLHM9TWF0aC5hYnMoYSkqTWF0aC5zcXJ0KDErcypzKSk6cz0wLHN9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcyhsLHUpe2Zvcih2YXIgaD0wO2g8dS5sZW5ndGg7aCsrKXt2YXIgZj11W2hdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsZi5rZXksZil9fXJldHVybiBvKHMsImRlZmluZVByb3BlcnRpZXMiKSxmdW5jdGlvbihsLHUsaCl7cmV0dXJuIHUmJnMobC5wcm90b3R5cGUsdSksaCYmcyhsLGgpLGx9fSgpO2Z1bmN0aW9uIGkocyxsKXtpZighKHMgaW5zdGFuY2VvZiBsKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1vKGksIl9jbGFzc0NhbGxDaGVjayIpO3ZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcyhsLHUpe3ZhciBoPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXToxLGY9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOi0xLGQ9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOi0xO2kodGhpcyxzKSx0aGlzLnNlcXVlbmNlMT1sLHRoaXMuc2VxdWVuY2UyPXUsdGhpcy5tYXRjaF9zY29yZT1oLHRoaXMubWlzbWF0Y2hfcGVuYWx0eT1mLHRoaXMuZ2FwX3BlbmFsdHk9ZCx0aGlzLmlNYXg9bC5sZW5ndGgrMSx0aGlzLmpNYXg9dS5sZW5ndGgrMSx0aGlzLmdyaWQ9bmV3IEFycmF5KHRoaXMuaU1heCk7Zm9yKHZhciBwPTA7cDx0aGlzLmlNYXg7cCsrKXt0aGlzLmdyaWRbcF09bmV3IEFycmF5KHRoaXMuak1heCk7Zm9yKHZhciBtPTA7bTx0aGlzLmpNYXg7bSsrKXRoaXMuZ3JpZFtwXVttXT0wfXRoaXMudHJhY2ViYWNrR3JpZD1uZXcgQXJyYXkodGhpcy5pTWF4KTtmb3IodmFyIGc9MDtnPHRoaXMuaU1heDtnKyspe3RoaXMudHJhY2ViYWNrR3JpZFtnXT1uZXcgQXJyYXkodGhpcy5qTWF4KTtmb3IodmFyIHk9MDt5PHRoaXMuak1heDt5KyspdGhpcy50cmFjZWJhY2tHcmlkW2ddW3ldPVtudWxsLG51bGwsbnVsbF19dGhpcy5hbGlnbm1lbnRzPVtdLHRoaXMuc2NvcmU9LTEsdGhpcy5jb21wdXRlR3JpZHMoKX1yZXR1cm4gbyhzLCJOZWVkbGVtYW5XdW5zY2giKSxuKHMsW3trZXk6ImdldFNjb3JlIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2NvcmV9LCJnZXRTY29yZSIpfSx7a2V5OiJnZXRBbGlnbm1lbnRzIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWxpZ25tZW50c30sImdldEFsaWdubWVudHMiKX0se2tleToiY29tcHV0ZUdyaWRzIix2YWx1ZTpvKGZ1bmN0aW9uKCl7Zm9yKHZhciB1PTE7dTx0aGlzLmpNYXg7dSsrKXRoaXMuZ3JpZFswXVt1XT10aGlzLmdyaWRbMF1bdS0xXSt0aGlzLmdhcF9wZW5hbHR5LHRoaXMudHJhY2ViYWNrR3JpZFswXVt1XT1bITEsITEsITBdO2Zvcih2YXIgaD0xO2g8dGhpcy5pTWF4O2grKyl0aGlzLmdyaWRbaF1bMF09dGhpcy5ncmlkW2gtMV1bMF0rdGhpcy5nYXBfcGVuYWx0eSx0aGlzLnRyYWNlYmFja0dyaWRbaF1bMF09WyExLCEwLCExXTtmb3IodmFyIGY9MTtmPHRoaXMuaU1heDtmKyspZm9yKHZhciBkPTE7ZDx0aGlzLmpNYXg7ZCsrKXt2YXIgcD12b2lkIDA7dGhpcy5zZXF1ZW5jZTFbZi0xXT09PXRoaXMuc2VxdWVuY2UyW2QtMV0/cD10aGlzLmdyaWRbZi0xXVtkLTFdK3RoaXMubWF0Y2hfc2NvcmU6cD10aGlzLmdyaWRbZi0xXVtkLTFdK3RoaXMubWlzbWF0Y2hfcGVuYWx0eTt2YXIgbT10aGlzLmdyaWRbZi0xXVtkXSt0aGlzLmdhcF9wZW5hbHR5LGc9dGhpcy5ncmlkW2ZdW2QtMV0rdGhpcy5nYXBfcGVuYWx0eSx5PVtwLG0sZ10sdj10aGlzLmFycmF5QWxsTWF4SW5kZXhlcyh5KTt0aGlzLmdyaWRbZl1bZF09eVt2WzBdXSx0aGlzLnRyYWNlYmFja0dyaWRbZl1bZF09W3YuaW5jbHVkZXMoMCksdi5pbmNsdWRlcygxKSx2LmluY2x1ZGVzKDIpXX10aGlzLnNjb3JlPXRoaXMuZ3JpZFt0aGlzLmlNYXgtMV1bdGhpcy5qTWF4LTFdfSwiY29tcHV0ZUdyaWRzIil9LHtrZXk6ImFsaWdubWVudFRyYWNlYmFjayIsdmFsdWU6byhmdW5jdGlvbigpe3ZhciB1PVtdO2Zvcih1LnB1c2goe3BvczpbdGhpcy5zZXF1ZW5jZTEubGVuZ3RoLHRoaXMuc2VxdWVuY2UyLmxlbmd0aF0sc2VxMToiIixzZXEyOiIifSk7dVswXTspe3ZhciBoPXVbMF0sZj10aGlzLnRyYWNlYmFja0dyaWRbaC5wb3NbMF1dW2gucG9zWzFdXTtmWzBdJiZ1LnB1c2goe3BvczpbaC5wb3NbMF0tMSxoLnBvc1sxXS0xXSxzZXExOnRoaXMuc2VxdWVuY2UxW2gucG9zWzBdLTFdK2guc2VxMSxzZXEyOnRoaXMuc2VxdWVuY2UyW2gucG9zWzFdLTFdK2guc2VxMn0pLGZbMV0mJnUucHVzaCh7cG9zOltoLnBvc1swXS0xLGgucG9zWzFdXSxzZXExOnRoaXMuc2VxdWVuY2UxW2gucG9zWzBdLTFdK2guc2VxMSxzZXEyOiItIitoLnNlcTJ9KSxmWzJdJiZ1LnB1c2goe3BvczpbaC5wb3NbMF0saC5wb3NbMV0tMV0sc2VxMToiLSIraC5zZXExLHNlcTI6dGhpcy5zZXF1ZW5jZTJbaC5wb3NbMV0tMV0raC5zZXEyfSksaC5wb3NbMF09PT0wJiZoLnBvc1sxXT09PTAmJnRoaXMuYWxpZ25tZW50cy5wdXNoKHtzZXF1ZW5jZTE6aC5zZXExLHNlcXVlbmNlMjpoLnNlcTJ9KSx1LnNoaWZ0KCl9cmV0dXJuIHRoaXMuYWxpZ25tZW50c30sImFsaWdubWVudFRyYWNlYmFjayIpfSx7a2V5OiJnZXRBbGxJbmRleGVzIix2YWx1ZTpvKGZ1bmN0aW9uKHUsaCl7Zm9yKHZhciBmPVtdLGQ9LTE7KGQ9dS5pbmRleE9mKGgsZCsxKSkhPT0tMTspZi5wdXNoKGQpO3JldHVybiBmfSwiZ2V0QWxsSW5kZXhlcyIpfSx7a2V5OiJhcnJheUFsbE1heEluZGV4ZXMiLHZhbHVlOm8oZnVuY3Rpb24odSl7cmV0dXJuIHRoaXMuZ2V0QWxsSW5kZXhlcyh1LE1hdGgubWF4LmFwcGx5KG51bGwsdSkpfSwiYXJyYXlBbGxNYXhJbmRleGVzIil9XSksc30oKTt0LmV4cG9ydHM9YX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1vKGZ1bmN0aW9uKCl7fSwibGF5b3V0QmFzZSIpO24uRkRMYXlvdXQ9cigxOCksbi5GRExheW91dENvbnN0YW50cz1yKDQpLG4uRkRMYXlvdXRFZGdlPXIoMTkpLG4uRkRMYXlvdXROb2RlPXIoMjApLG4uRGltZW5zaW9uRD1yKDIxKSxuLkhhc2hNYXA9cigyMiksbi5IYXNoU2V0PXIoMjMpLG4uSUdlb21ldHJ5PXIoOCksbi5JTWF0aD1yKDkpLG4uSW50ZWdlcj1yKDEwKSxuLlBvaW50PXIoMTIpLG4uUG9pbnREPXIoNSksbi5SYW5kb21TZWVkPXIoMTYpLG4uUmVjdGFuZ2xlRD1yKDEzKSxuLlRyYW5zZm9ybT1yKDE3KSxuLlVuaXF1ZUlER2VuZXJldG9yPXIoMTQpLG4uUXVpY2tzb3J0PXIoMjUpLG4uTGlua2VkTGlzdD1yKDExKSxuLkxHcmFwaE9iamVjdD1yKDIpLG4uTEdyYXBoPXIoNiksbi5MRWRnZT1yKDEpLG4uTEdyYXBoTWFuYWdlcj1yKDcpLG4uTE5vZGU9cigzKSxuLkxheW91dD1yKDE1KSxuLkxheW91dENvbnN0YW50cz1yKDApLG4uTmVlZGxlbWFuV3Vuc2NoPXIoMjcpLG4uTWF0cml4PXIoMjQpLG4uU1ZEPXIoMjYpLHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt0aGlzLmxpc3RlbmVycz1bXX1vKG4sIkVtaXR0ZXIiKTt2YXIgaT1uLnByb3RvdHlwZTtpLmFkZExpc3RlbmVyPWZ1bmN0aW9uKGEscyl7dGhpcy5saXN0ZW5lcnMucHVzaCh7ZXZlbnQ6YSxjYWxsYmFjazpzfSl9LGkucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oYSxzKXtmb3IodmFyIGw9dGhpcy5saXN0ZW5lcnMubGVuZ3RoO2w+PTA7bC0tKXt2YXIgdT10aGlzLmxpc3RlbmVyc1tsXTt1LmV2ZW50PT09YSYmdS5jYWxsYmFjaz09PXMmJnRoaXMubGlzdGVuZXJzLnNwbGljZShsLDEpfX0saS5lbWl0PWZ1bmN0aW9uKGEscyl7Zm9yKHZhciBsPTA7bDx0aGlzLmxpc3RlbmVycy5sZW5ndGg7bCsrKXt2YXIgdT10aGlzLmxpc3RlbmVyc1tsXTthPT09dS5ldmVudCYmdS5jYWxsYmFjayhzKX19LHQuZXhwb3J0cz1ufV0pfSl9KTt2YXIgbUY9RWkoKEliLHBGKT0+eyJ1c2Ugc3RyaWN0IjtvKGZ1bmN0aW9uKGUscil7dHlwZW9mIEliPT0ib2JqZWN0IiYmdHlwZW9mIHBGPT0ib2JqZWN0Ij9wRi5leHBvcnRzPXIoZEYoKSk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoWyJsYXlvdXQtYmFzZSJdLHIpOnR5cGVvZiBJYj09Im9iamVjdCI/SWIuY29zZUJhc2U9cihkRigpKTplLmNvc2VCYXNlPXIoZS5sYXlvdXRCYXNlKX0sIndlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIikoSWIsZnVuY3Rpb24odCl7cmV0dXJuKCgpPT57InVzZSBzdHJpY3QiO3ZhciBlPXs0NTooYSxzLGwpPT57dmFyIHU9e307dS5sYXlvdXRCYXNlPWwoNTUxKSx1LkNvU0VDb25zdGFudHM9bCg4MDYpLHUuQ29TRUVkZ2U9bCg3NjcpLHUuQ29TRUdyYXBoPWwoODgwKSx1LkNvU0VHcmFwaE1hbmFnZXI9bCg1NzgpLHUuQ29TRUxheW91dD1sKDc2NSksdS5Db1NFTm9kZT1sKDk5MSksdS5Db25zdHJhaW50SGFuZGxlcj1sKDkwMiksYS5leHBvcnRzPXV9LDgwNjooYSxzLGwpPT57dmFyIHU9bCg1NTEpLkZETGF5b3V0Q29uc3RhbnRzO2Z1bmN0aW9uIGgoKXt9byhoLCJDb1NFQ29uc3RhbnRzIik7Zm9yKHZhciBmIGluIHUpaFtmXT11W2ZdO2guREVGQVVMVF9VU0VfTVVMVElfTEVWRUxfU0NBTElORz0hMSxoLkRFRkFVTFRfUkFESUFMX1NFUEFSQVRJT049dS5ERUZBVUxUX0VER0VfTEVOR1RILGguREVGQVVMVF9DT01QT05FTlRfU0VQRVJBVElPTj02MCxoLlRJTEU9ITAsaC5USUxJTkdfUEFERElOR19WRVJUSUNBTD0xMCxoLlRJTElOR19QQURESU5HX0hPUklaT05UQUw9MTAsaC5UUkFOU0ZPUk1fT05fQ09OU1RSQUlOVF9IQU5ETElORz0hMCxoLkVORk9SQ0VfQ09OU1RSQUlOVFM9ITAsaC5BUFBMWV9MQVlPVVQ9ITAsaC5SRUxBWF9NT1ZFTUVOVF9PTl9DT05TVFJBSU5UUz0hMCxoLlRSRUVfUkVEVUNUSU9OX09OX0lOQ1JFTUVOVEFMPSEwLGguUFVSRV9JTkNSRU1FTlRBTD1oLkRFRkFVTFRfSU5DUkVNRU5UQUwsYS5leHBvcnRzPWh9LDc2NzooYSxzLGwpPT57dmFyIHU9bCg1NTEpLkZETGF5b3V0RWRnZTtmdW5jdGlvbiBoKGQscCxtKXt1LmNhbGwodGhpcyxkLHAsbSl9byhoLCJDb1NFRWRnZSIpLGgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodS5wcm90b3R5cGUpO2Zvcih2YXIgZiBpbiB1KWhbZl09dVtmXTthLmV4cG9ydHM9aH0sODgwOihhLHMsbCk9Pnt2YXIgdT1sKDU1MSkuTEdyYXBoO2Z1bmN0aW9uIGgoZCxwLG0pe3UuY2FsbCh0aGlzLGQscCxtKX1vKGgsIkNvU0VHcmFwaCIpLGgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodS5wcm90b3R5cGUpO2Zvcih2YXIgZiBpbiB1KWhbZl09dVtmXTthLmV4cG9ydHM9aH0sNTc4OihhLHMsbCk9Pnt2YXIgdT1sKDU1MSkuTEdyYXBoTWFuYWdlcjtmdW5jdGlvbiBoKGQpe3UuY2FsbCh0aGlzLGQpfW8oaCwiQ29TRUdyYXBoTWFuYWdlciIpLGgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodS5wcm90b3R5cGUpO2Zvcih2YXIgZiBpbiB1KWhbZl09dVtmXTthLmV4cG9ydHM9aH0sNzY1OihhLHMsbCk9Pnt2YXIgdT1sKDU1MSkuRkRMYXlvdXQsaD1sKDU3OCksZj1sKDg4MCksZD1sKDk5MSkscD1sKDc2NyksbT1sKDgwNiksZz1sKDkwMikseT1sKDU1MSkuRkRMYXlvdXRDb25zdGFudHMsdj1sKDU1MSkuTGF5b3V0Q29uc3RhbnRzLHg9bCg1NTEpLlBvaW50LGI9bCg1NTEpLlBvaW50RCx3PWwoNTUxKS5EaW1lbnNpb25ELF89bCg1NTEpLkxheW91dCxUPWwoNTUxKS5JbnRlZ2VyLEU9bCg1NTEpLklHZW9tZXRyeSxMPWwoNTUxKS5MR3JhcGgsUz1sKDU1MSkuVHJhbnNmb3JtLEE9bCg1NTEpLkxpbmtlZExpc3Q7ZnVuY3Rpb24gSSgpe3UuY2FsbCh0aGlzKSx0aGlzLnRvQmVUaWxlZD17fSx0aGlzLmNvbnN0cmFpbnRzPXt9fW8oSSwiQ29TRUxheW91dCIpLEkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodS5wcm90b3R5cGUpO2Zvcih2YXIgRCBpbiB1KUlbRF09dVtEXTtJLnByb3RvdHlwZS5uZXdHcmFwaE1hbmFnZXI9ZnVuY3Rpb24oKXt2YXIgaz1uZXcgaCh0aGlzKTtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXI9ayxrfSxJLnByb3RvdHlwZS5uZXdHcmFwaD1mdW5jdGlvbihrKXtyZXR1cm4gbmV3IGYobnVsbCx0aGlzLmdyYXBoTWFuYWdlcixrKX0sSS5wcm90b3R5cGUubmV3Tm9kZT1mdW5jdGlvbihrKXtyZXR1cm4gbmV3IGQodGhpcy5ncmFwaE1hbmFnZXIsayl9LEkucHJvdG90eXBlLm5ld0VkZ2U9ZnVuY3Rpb24oayl7cmV0dXJuIG5ldyBwKG51bGwsbnVsbCxrKX0sSS5wcm90b3R5cGUuaW5pdFBhcmFtZXRlcnM9ZnVuY3Rpb24oKXt1LnByb3RvdHlwZS5pbml0UGFyYW1ldGVycy5jYWxsKHRoaXMsYXJndW1lbnRzKSx0aGlzLmlzU3ViTGF5b3V0fHwobS5ERUZBVUxUX0VER0VfTEVOR1RIPDEwP3RoaXMuaWRlYWxFZGdlTGVuZ3RoPTEwOnRoaXMuaWRlYWxFZGdlTGVuZ3RoPW0uREVGQVVMVF9FREdFX0xFTkdUSCx0aGlzLnVzZVNtYXJ0SWRlYWxFZGdlTGVuZ3RoQ2FsY3VsYXRpb249bS5ERUZBVUxUX1VTRV9TTUFSVF9JREVBTF9FREdFX0xFTkdUSF9DQUxDVUxBVElPTix0aGlzLmdyYXZpdHlDb25zdGFudD15LkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSCx0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50PXkuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RILHRoaXMuZ3Jhdml0eVJhbmdlRmFjdG9yPXkuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUix0aGlzLmNvbXBvdW5kR3Jhdml0eVJhbmdlRmFjdG9yPXkuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUix0aGlzLnBydW5lZE5vZGVzQWxsPVtdLHRoaXMuZ3Jvd1RyZWVJdGVyYXRpb25zPTAsdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnM9MCx0aGlzLmlzVHJlZUdyb3dpbmc9ITEsdGhpcy5pc0dyb3d0aEZpbmlzaGVkPSExKX0sSS5wcm90b3R5cGUuaW5pdFNwcmluZ0VtYmVkZGVyPWZ1bmN0aW9uKCl7dS5wcm90b3R5cGUuaW5pdFNwcmluZ0VtYmVkZGVyLmNhbGwodGhpcyksdGhpcy5jb29saW5nQ3ljbGU9MCx0aGlzLm1heENvb2xpbmdDeWNsZT10aGlzLm1heEl0ZXJhdGlvbnMveS5DT05WRVJHRU5DRV9DSEVDS19QRVJJT0QsdGhpcy5maW5hbFRlbXBlcmF0dXJlPS4wNCx0aGlzLmNvb2xpbmdBZGp1c3Rlcj0xfSxJLnByb3RvdHlwZS5sYXlvdXQ9ZnVuY3Rpb24oKXt2YXIgaz12LkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRDtyZXR1cm4gayYmKHRoaXMuY3JlYXRlQmVuZHBvaW50cygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKSksdGhpcy5sZXZlbD0wLHRoaXMuY2xhc3NpY0xheW91dCgpfSxJLnByb3RvdHlwZS5jbGFzc2ljTGF5b3V0PWZ1bmN0aW9uKCl7aWYodGhpcy5ub2Rlc1dpdGhHcmF2aXR5PXRoaXMuY2FsY3VsYXRlTm9kZXNUb0FwcGx5R3Jhdml0YXRpb25UbygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKHRoaXMubm9kZXNXaXRoR3Jhdml0eSksdGhpcy5jYWxjTm9PZkNoaWxkcmVuRm9yQWxsTm9kZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3JzKCksdGhpcy5ncmFwaE1hbmFnZXIuY2FsY0luY2x1c2lvblRyZWVEZXB0aHMoKSx0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuY2FsY0VzdGltYXRlZFNpemUoKSx0aGlzLmNhbGNJZGVhbEVkZ2VMZW5ndGhzKCksdGhpcy5pbmNyZW1lbnRhbCl7aWYobS5UUkVFX1JFRFVDVElPTl9PTl9JTkNSRU1FTlRBTCl7dGhpcy5yZWR1Y2VUcmVlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKTt2YXIgUj1uZXcgU2V0KHRoaXMuZ2V0QWxsTm9kZXMoKSksQz10aGlzLm5vZGVzV2l0aEdyYXZpdHkuZmlsdGVyKGZ1bmN0aW9uKFApe3JldHVybiBSLmhhcyhQKX0pO3RoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKEMpfX1lbHNle3ZhciBrPXRoaXMuZ2V0RmxhdEZvcmVzdCgpO2lmKGsubGVuZ3RoPjApdGhpcy5wb3NpdGlvbk5vZGVzUmFkaWFsbHkoayk7ZWxzZXt0aGlzLnJlZHVjZVRyZWVzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpO3ZhciBSPW5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKSxDPXRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24oTyl7cmV0dXJuIFIuaGFzKE8pfSk7dGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oQyksdGhpcy5wb3NpdGlvbk5vZGVzUmFuZG9tbHkoKX19cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY29uc3RyYWludHMpLmxlbmd0aD4wJiYoZy5oYW5kbGVDb25zdHJhaW50cyh0aGlzKSx0aGlzLmluaXRDb25zdHJhaW50VmFyaWFibGVzKCkpLHRoaXMuaW5pdFNwcmluZ0VtYmVkZGVyKCksbS5BUFBMWV9MQVlPVVQmJnRoaXMucnVuU3ByaW5nRW1iZWRkZXIoKSwhMH0sSS5wcm90b3R5cGUudGljaz1mdW5jdGlvbigpe2lmKHRoaXMudG90YWxJdGVyYXRpb25zKyssdGhpcy50b3RhbEl0ZXJhdGlvbnM9PT10aGlzLm1heEl0ZXJhdGlvbnMmJiF0aGlzLmlzVHJlZUdyb3dpbmcmJiF0aGlzLmlzR3Jvd3RoRmluaXNoZWQpaWYodGhpcy5wcnVuZWROb2Rlc0FsbC5sZW5ndGg+MCl0aGlzLmlzVHJlZUdyb3dpbmc9ITA7ZWxzZSByZXR1cm4hMDtpZih0aGlzLnRvdGFsSXRlcmF0aW9ucyV5LkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRD09MCYmIXRoaXMuaXNUcmVlR3Jvd2luZyYmIXRoaXMuaXNHcm93dGhGaW5pc2hlZCl7aWYodGhpcy5pc0NvbnZlcmdlZCgpKWlmKHRoaXMucHJ1bmVkTm9kZXNBbGwubGVuZ3RoPjApdGhpcy5pc1RyZWVHcm93aW5nPSEwO2Vsc2UgcmV0dXJuITA7dGhpcy5jb29saW5nQ3ljbGUrKyx0aGlzLmxheW91dFF1YWxpdHk9PTA/dGhpcy5jb29saW5nQWRqdXN0ZXI9dGhpcy5jb29saW5nQ3ljbGU6dGhpcy5sYXlvdXRRdWFsaXR5PT0xJiYodGhpcy5jb29saW5nQWRqdXN0ZXI9dGhpcy5jb29saW5nQ3ljbGUvMyksdGhpcy5jb29saW5nRmFjdG9yPU1hdGgubWF4KHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3ItTWF0aC5wb3codGhpcy5jb29saW5nQ3ljbGUsTWF0aC5sb2coMTAwKih0aGlzLmluaXRpYWxDb29saW5nRmFjdG9yLXRoaXMuZmluYWxUZW1wZXJhdHVyZSkpL01hdGgubG9nKHRoaXMubWF4Q29vbGluZ0N5Y2xlKSkvMTAwKnRoaXMuY29vbGluZ0FkanVzdGVyLHRoaXMuZmluYWxUZW1wZXJhdHVyZSksdGhpcy5hbmltYXRpb25QZXJpb2Q9TWF0aC5jZWlsKHRoaXMuaW5pdGlhbEFuaW1hdGlvblBlcmlvZCpNYXRoLnNxcnQodGhpcy5jb29saW5nRmFjdG9yKSl9aWYodGhpcy5pc1RyZWVHcm93aW5nKXtpZih0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucyUxMD09MClpZih0aGlzLnBydW5lZE5vZGVzQWxsLmxlbmd0aD4wKXt0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKSx0aGlzLnVwZGF0ZUdyaWQoKSx0aGlzLmdyb3dUcmVlKHRoaXMucHJ1bmVkTm9kZXNBbGwpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKTt2YXIgaz1uZXcgU2V0KHRoaXMuZ2V0QWxsTm9kZXMoKSksUj10aGlzLm5vZGVzV2l0aEdyYXZpdHkuZmlsdGVyKGZ1bmN0aW9uKE4pe3JldHVybiBrLmhhcyhOKX0pO3RoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKFIpLHRoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpLHRoaXMudXBkYXRlR3JpZCgpLG0uUFVSRV9JTkNSRU1FTlRBTD90aGlzLmNvb2xpbmdGYWN0b3I9eS5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMLzI6dGhpcy5jb29saW5nRmFjdG9yPXkuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTH1lbHNlIHRoaXMuaXNUcmVlR3Jvd2luZz0hMSx0aGlzLmlzR3Jvd3RoRmluaXNoZWQ9ITA7dGhpcy5ncm93VHJlZUl0ZXJhdGlvbnMrK31pZih0aGlzLmlzR3Jvd3RoRmluaXNoZWQpe2lmKHRoaXMuaXNDb252ZXJnZWQoKSlyZXR1cm4hMDt0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucyUxMD09MCYmKHRoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpLHRoaXMudXBkYXRlR3JpZCgpKSxtLlBVUkVfSU5DUkVNRU5UQUw/dGhpcy5jb29saW5nRmFjdG9yPXkuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTC8yKigoMTAwLXRoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zKS8xMDApOnRoaXMuY29vbGluZ0ZhY3Rvcj15LkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUwqKCgxMDAtdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMpLzEwMCksdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMrK312YXIgQz0hdGhpcy5pc1RyZWVHcm93aW5nJiYhdGhpcy5pc0dyb3d0aEZpbmlzaGVkLE89dGhpcy5ncm93VHJlZUl0ZXJhdGlvbnMlMTA9PTEmJnRoaXMuaXNUcmVlR3Jvd2luZ3x8dGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMlMTA9PTEmJnRoaXMuaXNHcm93dGhGaW5pc2hlZDtyZXR1cm4gdGhpcy50b3RhbERpc3BsYWNlbWVudD0wLHRoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpLHRoaXMuY2FsY1NwcmluZ0ZvcmNlcygpLHRoaXMuY2FsY1JlcHVsc2lvbkZvcmNlcyhDLE8pLHRoaXMuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZXMoKSx0aGlzLm1vdmVOb2RlcygpLHRoaXMuYW5pbWF0ZSgpLCExfSxJLnByb3RvdHlwZS5nZXRQb3NpdGlvbnNEYXRhPWZ1bmN0aW9uKCl7Zm9yKHZhciBrPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCksUj17fSxDPTA7QzxrLmxlbmd0aDtDKyspe3ZhciBPPWtbQ10ucmVjdCxOPWtbQ10uaWQ7UltOXT17aWQ6Tix4Ok8uZ2V0Q2VudGVyWCgpLHk6Ty5nZXRDZW50ZXJZKCksdzpPLndpZHRoLGg6Ty5oZWlnaHR9fXJldHVybiBSfSxJLnByb3RvdHlwZS5ydW5TcHJpbmdFbWJlZGRlcj1mdW5jdGlvbigpe3RoaXMuaW5pdGlhbEFuaW1hdGlvblBlcmlvZD0yNSx0aGlzLmFuaW1hdGlvblBlcmlvZD10aGlzLmluaXRpYWxBbmltYXRpb25QZXJpb2Q7dmFyIGs9ITE7aWYoeS5BTklNQVRFPT09ImR1cmluZyIpdGhpcy5lbWl0KCJsYXlvdXRzdGFydGVkIik7ZWxzZXtmb3IoOyFrOylrPXRoaXMudGljaygpO3RoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpfX0sSS5wcm90b3R5cGUubW92ZU5vZGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciBrPXRoaXMuZ2V0QWxsTm9kZXMoKSxSLEM9MDtDPGsubGVuZ3RoO0MrKylSPWtbQ10sUi5jYWxjdWxhdGVEaXNwbGFjZW1lbnQoKTtPYmplY3Qua2V5cyh0aGlzLmNvbnN0cmFpbnRzKS5sZW5ndGg+MCYmdGhpcy51cGRhdGVEaXNwbGFjZW1lbnRzKCk7Zm9yKHZhciBDPTA7QzxrLmxlbmd0aDtDKyspUj1rW0NdLFIubW92ZSgpfSxJLnByb3RvdHlwZS5pbml0Q29uc3RyYWludFZhcmlhYmxlcz1mdW5jdGlvbigpe3ZhciBrPXRoaXM7dGhpcy5pZFRvTm9kZU1hcD1uZXcgTWFwLHRoaXMuZml4ZWROb2RlU2V0PW5ldyBTZXQ7Zm9yKHZhciBSPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCksQz0wO0M8Ui5sZW5ndGg7QysrKXt2YXIgTz1SW0NdO3RoaXMuaWRUb05vZGVNYXAuc2V0KE8uaWQsTyl9dmFyIE49byhmdW5jdGlvbiBlZShKKXtmb3IodmFyIEg9Si5nZXRDaGlsZCgpLmdldE5vZGVzKCkscSxRPTAsYWU9MDthZTxILmxlbmd0aDthZSsrKXE9SFthZV0scS5nZXRDaGlsZCgpPT1udWxsP2suZml4ZWROb2RlU2V0LmhhcyhxLmlkKSYmKFErPTEwMCk6USs9ZWUocSk7cmV0dXJuIFF9LCJjYWxjdWxhdGVDb21wb3VuZFdlaWdodCIpO2lmKHRoaXMuY29uc3RyYWludHMuZml4ZWROb2RlQ29uc3RyYWludCl7dGhpcy5jb25zdHJhaW50cy5maXhlZE5vZGVDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24oSCl7ay5maXhlZE5vZGVTZXQuYWRkKEgubm9kZUlkKX0pO2Zvcih2YXIgUj10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLE8sQz0wO0M8Ui5sZW5ndGg7QysrKWlmKE89UltDXSxPLmdldENoaWxkKCkhPW51bGwpe3ZhciBQPU4oTyk7UD4wJiYoTy5maXhlZE5vZGVXZWlnaHQ9UCl9fWlmKHRoaXMuY29uc3RyYWludHMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50KXt2YXIgRj1uZXcgTWFwLEI9bmV3IE1hcDtpZih0aGlzLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQ9bmV3IE1hcCx0aGlzLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudD1uZXcgTWFwLHRoaXMuZml4ZWROb2Rlc09uSG9yaXpvbnRhbD1uZXcgU2V0LHRoaXMuZml4ZWROb2Rlc09uVmVydGljYWw9bmV3IFNldCx0aGlzLmZpeGVkTm9kZVNldC5mb3JFYWNoKGZ1bmN0aW9uKGVlKXtrLmZpeGVkTm9kZXNPbkhvcml6b250YWwuYWRkKGVlKSxrLmZpeGVkTm9kZXNPblZlcnRpY2FsLmFkZChlZSl9KSx0aGlzLmNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQpe2lmKHRoaXMuY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbClmb3IodmFyIEc9dGhpcy5jb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsLEM9MDtDPEcubGVuZ3RoO0MrKyl0aGlzLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuc2V0KCJkdW1teSIrQyxbXSksR1tDXS5mb3JFYWNoKGZ1bmN0aW9uKEope0Yuc2V0KEosImR1bW15IitDKSxrLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuZ2V0KCJkdW1teSIrQykucHVzaChKKSxrLmZpeGVkTm9kZVNldC5oYXMoSikmJmsuZml4ZWROb2Rlc09uSG9yaXpvbnRhbC5hZGQoImR1bW15IitDKX0pO2lmKHRoaXMuY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsKWZvcih2YXIgej10aGlzLmNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbCxDPTA7Qzx6Lmxlbmd0aDtDKyspdGhpcy5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuc2V0KCJkdW1teSIrQyxbXSkseltDXS5mb3JFYWNoKGZ1bmN0aW9uKEope0Iuc2V0KEosImR1bW15IitDKSxrLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQoImR1bW15IitDKS5wdXNoKEopLGsuZml4ZWROb2RlU2V0LmhhcyhKKSYmay5maXhlZE5vZGVzT25WZXJ0aWNhbC5hZGQoImR1bW15IitDKX0pfWlmKG0uUkVMQVhfTU9WRU1FTlRfT05fQ09OU1RSQUlOVFMpdGhpcy5zaHVmZmxlPWZ1bmN0aW9uKGVlKXt2YXIgSixILHE7Zm9yKHE9ZWUubGVuZ3RoLTE7cT49MiplZS5sZW5ndGgvMztxLS0pSj1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKHErMSkpLEg9ZWVbcV0sZWVbcV09ZWVbSl0sZWVbSl09SDtyZXR1cm4gZWV9LHRoaXMubm9kZXNJblJlbGF0aXZlSG9yaXpvbnRhbD1bXSx0aGlzLm5vZGVzSW5SZWxhdGl2ZVZlcnRpY2FsPVtdLHRoaXMubm9kZVRvUmVsYXRpdmVDb25zdHJhaW50TWFwSG9yaXpvbnRhbD1uZXcgTWFwLHRoaXMubm9kZVRvUmVsYXRpdmVDb25zdHJhaW50TWFwVmVydGljYWw9bmV3IE1hcCx0aGlzLm5vZGVUb1RlbXBQb3NpdGlvbk1hcEhvcml6b250YWw9bmV3IE1hcCx0aGlzLm5vZGVUb1RlbXBQb3NpdGlvbk1hcFZlcnRpY2FsPW5ldyBNYXAsdGhpcy5jb25zdHJhaW50cy5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQuZm9yRWFjaChmdW5jdGlvbihlZSl7aWYoZWUubGVmdCl7dmFyIEo9Ri5oYXMoZWUubGVmdCk/Ri5nZXQoZWUubGVmdCk6ZWUubGVmdCxIPUYuaGFzKGVlLnJpZ2h0KT9GLmdldChlZS5yaWdodCk6ZWUucmlnaHQ7ay5ub2Rlc0luUmVsYXRpdmVIb3Jpem9udGFsLmluY2x1ZGVzKEopfHwoay5ub2Rlc0luUmVsYXRpdmVIb3Jpem9udGFsLnB1c2goSiksay5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBIb3Jpem9udGFsLnNldChKLFtdKSxrLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuaGFzKEopP2subm9kZVRvVGVtcFBvc2l0aW9uTWFwSG9yaXpvbnRhbC5zZXQoSixrLmlkVG9Ob2RlTWFwLmdldChrLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuZ2V0KEopWzBdKS5nZXRDZW50ZXJYKCkpOmsubm9kZVRvVGVtcFBvc2l0aW9uTWFwSG9yaXpvbnRhbC5zZXQoSixrLmlkVG9Ob2RlTWFwLmdldChKKS5nZXRDZW50ZXJYKCkpKSxrLm5vZGVzSW5SZWxhdGl2ZUhvcml6b250YWwuaW5jbHVkZXMoSCl8fChrLm5vZGVzSW5SZWxhdGl2ZUhvcml6b250YWwucHVzaChIKSxrLm5vZGVUb1JlbGF0aXZlQ29uc3RyYWludE1hcEhvcml6b250YWwuc2V0KEgsW10pLGsuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5oYXMoSCk/ay5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsLnNldChILGsuaWRUb05vZGVNYXAuZ2V0KGsuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQoSClbMF0pLmdldENlbnRlclgoKSk6ay5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsLnNldChILGsuaWRUb05vZGVNYXAuZ2V0KEgpLmdldENlbnRlclgoKSkpLGsubm9kZVRvUmVsYXRpdmVDb25zdHJhaW50TWFwSG9yaXpvbnRhbC5nZXQoSikucHVzaCh7cmlnaHQ6SCxnYXA6ZWUuZ2FwfSksay5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBIb3Jpem9udGFsLmdldChIKS5wdXNoKHtsZWZ0OkosZ2FwOmVlLmdhcH0pfWVsc2V7dmFyIHE9Qi5oYXMoZWUudG9wKT9CLmdldChlZS50b3ApOmVlLnRvcCxRPUIuaGFzKGVlLmJvdHRvbSk/Qi5nZXQoZWUuYm90dG9tKTplZS5ib3R0b207ay5ub2Rlc0luUmVsYXRpdmVWZXJ0aWNhbC5pbmNsdWRlcyhxKXx8KGsubm9kZXNJblJlbGF0aXZlVmVydGljYWwucHVzaChxKSxrLm5vZGVUb1JlbGF0aXZlQ29uc3RyYWludE1hcFZlcnRpY2FsLnNldChxLFtdKSxrLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5oYXMocSk/ay5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbC5zZXQocSxrLmlkVG9Ob2RlTWFwLmdldChrLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQocSlbMF0pLmdldENlbnRlclkoKSk6ay5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbC5zZXQocSxrLmlkVG9Ob2RlTWFwLmdldChxKS5nZXRDZW50ZXJZKCkpKSxrLm5vZGVzSW5SZWxhdGl2ZVZlcnRpY2FsLmluY2x1ZGVzKFEpfHwoay5ub2Rlc0luUmVsYXRpdmVWZXJ0aWNhbC5wdXNoKFEpLGsubm9kZVRvUmVsYXRpdmVDb25zdHJhaW50TWFwVmVydGljYWwuc2V0KFEsW10pLGsuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmhhcyhRKT9rLm5vZGVUb1RlbXBQb3NpdGlvbk1hcFZlcnRpY2FsLnNldChRLGsuaWRUb05vZGVNYXAuZ2V0KGsuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmdldChRKVswXSkuZ2V0Q2VudGVyWSgpKTprLm5vZGVUb1RlbXBQb3NpdGlvbk1hcFZlcnRpY2FsLnNldChRLGsuaWRUb05vZGVNYXAuZ2V0KFEpLmdldENlbnRlclkoKSkpLGsubm9kZVRvUmVsYXRpdmVDb25zdHJhaW50TWFwVmVydGljYWwuZ2V0KHEpLnB1c2goe2JvdHRvbTpRLGdhcDplZS5nYXB9KSxrLm5vZGVUb1JlbGF0aXZlQ29uc3RyYWludE1hcFZlcnRpY2FsLmdldChRKS5wdXNoKHt0b3A6cSxnYXA6ZWUuZ2FwfSl9fSk7ZWxzZXt2YXIgVz1uZXcgTWFwLFo9bmV3IE1hcDt0aGlzLmNvbnN0cmFpbnRzLnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludC5mb3JFYWNoKGZ1bmN0aW9uKGVlKXtpZihlZS5sZWZ0KXt2YXIgSj1GLmhhcyhlZS5sZWZ0KT9GLmdldChlZS5sZWZ0KTplZS5sZWZ0LEg9Ri5oYXMoZWUucmlnaHQpP0YuZ2V0KGVlLnJpZ2h0KTplZS5yaWdodDtXLmhhcyhKKT9XLmdldChKKS5wdXNoKEgpOlcuc2V0KEosW0hdKSxXLmhhcyhIKT9XLmdldChIKS5wdXNoKEopOlcuc2V0KEgsW0pdKX1lbHNle3ZhciBxPUIuaGFzKGVlLnRvcCk/Qi5nZXQoZWUudG9wKTplZS50b3AsUT1CLmhhcyhlZS5ib3R0b20pP0IuZ2V0KGVlLmJvdHRvbSk6ZWUuYm90dG9tO1ouaGFzKHEpP1ouZ2V0KHEpLnB1c2goUSk6Wi5zZXQocSxbUV0pLFouaGFzKFEpP1ouZ2V0KFEpLnB1c2gocSk6Wi5zZXQoUSxbcV0pfX0pO3ZhciBqPW8oZnVuY3Rpb24oSixIKXt2YXIgcT1bXSxRPVtdLGFlPW5ldyBBLHVlPW5ldyBTZXQsY2U9MDtyZXR1cm4gSi5mb3JFYWNoKGZ1bmN0aW9uKHRlLE5lKXtpZighdWUuaGFzKE5lKSl7cVtjZV09W10sUVtjZV09ITE7dmFyIHNlPU5lO2ZvcihhZS5wdXNoKHNlKSx1ZS5hZGQoc2UpLHFbY2VdLnB1c2goc2UpO2FlLmxlbmd0aCE9MDspe3NlPWFlLnNoaWZ0KCksSC5oYXMoc2UpJiYoUVtjZV09ITApO3ZhciBrZT1KLmdldChzZSk7a2UuZm9yRWFjaChmdW5jdGlvbihSZSl7dWUuaGFzKFJlKXx8KGFlLnB1c2goUmUpLHVlLmFkZChSZSkscVtjZV0ucHVzaChSZSkpfSl9Y2UrK319KSx7Y29tcG9uZW50czpxLGlzRml4ZWQ6UX19LCJjb25zdHJ1Y3RDb21wb25lbnRzIiksb2U9aihXLGsuZml4ZWROb2Rlc09uSG9yaXpvbnRhbCk7dGhpcy5jb21wb25lbnRzT25Ib3Jpem9udGFsPW9lLmNvbXBvbmVudHMsdGhpcy5maXhlZENvbXBvbmVudHNPbkhvcml6b250YWw9b2UuaXNGaXhlZDt2YXIgSz1qKFosay5maXhlZE5vZGVzT25WZXJ0aWNhbCk7dGhpcy5jb21wb25lbnRzT25WZXJ0aWNhbD1LLmNvbXBvbmVudHMsdGhpcy5maXhlZENvbXBvbmVudHNPblZlcnRpY2FsPUsuaXNGaXhlZH19fSxJLnByb3RvdHlwZS51cGRhdGVEaXNwbGFjZW1lbnRzPWZ1bmN0aW9uKCl7dmFyIGs9dGhpcztpZih0aGlzLmNvbnN0cmFpbnRzLmZpeGVkTm9kZUNvbnN0cmFpbnQmJnRoaXMuY29uc3RyYWludHMuZml4ZWROb2RlQ29uc3RyYWludC5mb3JFYWNoKGZ1bmN0aW9uKEspe3ZhciBlZT1rLmlkVG9Ob2RlTWFwLmdldChLLm5vZGVJZCk7ZWUuZGlzcGxhY2VtZW50WD0wLGVlLmRpc3BsYWNlbWVudFk9MH0pLHRoaXMuY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludCl7aWYodGhpcy5jb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsKWZvcih2YXIgUj10aGlzLmNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQudmVydGljYWwsQz0wO0M8Ui5sZW5ndGg7QysrKXtmb3IodmFyIE89MCxOPTA7TjxSW0NdLmxlbmd0aDtOKyspe2lmKHRoaXMuZml4ZWROb2RlU2V0LmhhcyhSW0NdW05dKSl7Tz0wO2JyZWFrfU8rPXRoaXMuaWRUb05vZGVNYXAuZ2V0KFJbQ11bTl0pLmRpc3BsYWNlbWVudFh9Zm9yKHZhciBQPU8vUltDXS5sZW5ndGgsTj0wO048UltDXS5sZW5ndGg7TisrKXRoaXMuaWRUb05vZGVNYXAuZ2V0KFJbQ11bTl0pLmRpc3BsYWNlbWVudFg9UH1pZih0aGlzLmNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbClmb3IodmFyIEY9dGhpcy5jb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWwsQz0wO0M8Ri5sZW5ndGg7QysrKXtmb3IodmFyIEI9MCxOPTA7TjxGW0NdLmxlbmd0aDtOKyspe2lmKHRoaXMuZml4ZWROb2RlU2V0LmhhcyhGW0NdW05dKSl7Qj0wO2JyZWFrfUIrPXRoaXMuaWRUb05vZGVNYXAuZ2V0KEZbQ11bTl0pLmRpc3BsYWNlbWVudFl9Zm9yKHZhciBHPUIvRltDXS5sZW5ndGgsTj0wO048RltDXS5sZW5ndGg7TisrKXRoaXMuaWRUb05vZGVNYXAuZ2V0KEZbQ11bTl0pLmRpc3BsYWNlbWVudFk9R319aWYodGhpcy5jb25zdHJhaW50cy5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQpaWYobS5SRUxBWF9NT1ZFTUVOVF9PTl9DT05TVFJBSU5UUyl0aGlzLnRvdGFsSXRlcmF0aW9ucyUxMD09MCYmKHRoaXMuc2h1ZmZsZSh0aGlzLm5vZGVzSW5SZWxhdGl2ZUhvcml6b250YWwpLHRoaXMuc2h1ZmZsZSh0aGlzLm5vZGVzSW5SZWxhdGl2ZVZlcnRpY2FsKSksdGhpcy5ub2Rlc0luUmVsYXRpdmVIb3Jpem9udGFsLmZvckVhY2goZnVuY3Rpb24oSyl7aWYoIWsuZml4ZWROb2Rlc09uSG9yaXpvbnRhbC5oYXMoSykpe3ZhciBlZT0wO2suZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5oYXMoSyk/ZWU9ay5pZFRvTm9kZU1hcC5nZXQoay5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50LmdldChLKVswXSkuZGlzcGxhY2VtZW50WDplZT1rLmlkVG9Ob2RlTWFwLmdldChLKS5kaXNwbGFjZW1lbnRYLGsubm9kZVRvUmVsYXRpdmVDb25zdHJhaW50TWFwSG9yaXpvbnRhbC5nZXQoSykuZm9yRWFjaChmdW5jdGlvbihKKXtpZihKLnJpZ2h0KXt2YXIgSD1rLm5vZGVUb1RlbXBQb3NpdGlvbk1hcEhvcml6b250YWwuZ2V0KEoucmlnaHQpLWsubm9kZVRvVGVtcFBvc2l0aW9uTWFwSG9yaXpvbnRhbC5nZXQoSyktZWU7SDxKLmdhcCYmKGVlLT1KLmdhcC1IKX1lbHNle3ZhciBIPWsubm9kZVRvVGVtcFBvc2l0aW9uTWFwSG9yaXpvbnRhbC5nZXQoSyktay5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsLmdldChKLmxlZnQpK2VlO0g8Si5nYXAmJihlZSs9Si5nYXAtSCl9fSksay5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsLnNldChLLGsubm9kZVRvVGVtcFBvc2l0aW9uTWFwSG9yaXpvbnRhbC5nZXQoSykrZWUpLGsuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5oYXMoSyk/ay5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50LmdldChLKS5mb3JFYWNoKGZ1bmN0aW9uKEope2suaWRUb05vZGVNYXAuZ2V0KEopLmRpc3BsYWNlbWVudFg9ZWV9KTprLmlkVG9Ob2RlTWFwLmdldChLKS5kaXNwbGFjZW1lbnRYPWVlfX0pLHRoaXMubm9kZXNJblJlbGF0aXZlVmVydGljYWwuZm9yRWFjaChmdW5jdGlvbihLKXtpZighay5maXhlZE5vZGVzT25Ib3Jpem9udGFsLmhhcyhLKSl7dmFyIGVlPTA7ay5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuaGFzKEspP2VlPWsuaWRUb05vZGVNYXAuZ2V0KGsuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmdldChLKVswXSkuZGlzcGxhY2VtZW50WTplZT1rLmlkVG9Ob2RlTWFwLmdldChLKS5kaXNwbGFjZW1lbnRZLGsubm9kZVRvUmVsYXRpdmVDb25zdHJhaW50TWFwVmVydGljYWwuZ2V0KEspLmZvckVhY2goZnVuY3Rpb24oSil7aWYoSi5ib3R0b20pe3ZhciBIPWsubm9kZVRvVGVtcFBvc2l0aW9uTWFwVmVydGljYWwuZ2V0KEouYm90dG9tKS1rLm5vZGVUb1RlbXBQb3NpdGlvbk1hcFZlcnRpY2FsLmdldChLKS1lZTtIPEouZ2FwJiYoZWUtPUouZ2FwLUgpfWVsc2V7dmFyIEg9ay5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbC5nZXQoSyktay5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbC5nZXQoSi50b3ApK2VlO0g8Si5nYXAmJihlZSs9Si5nYXAtSCl9fSksay5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbC5zZXQoSyxrLm5vZGVUb1RlbXBQb3NpdGlvbk1hcFZlcnRpY2FsLmdldChLKStlZSksay5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuaGFzKEspP2suZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmdldChLKS5mb3JFYWNoKGZ1bmN0aW9uKEope2suaWRUb05vZGVNYXAuZ2V0KEopLmRpc3BsYWNlbWVudFk9ZWV9KTprLmlkVG9Ob2RlTWFwLmdldChLKS5kaXNwbGFjZW1lbnRZPWVlfX0pO2Vsc2V7Zm9yKHZhciBDPTA7Qzx0aGlzLmNvbXBvbmVudHNPbkhvcml6b250YWwubGVuZ3RoO0MrKyl7dmFyIHo9dGhpcy5jb21wb25lbnRzT25Ib3Jpem9udGFsW0NdO2lmKHRoaXMuZml4ZWRDb21wb25lbnRzT25Ib3Jpem9udGFsW0NdKWZvcih2YXIgTj0wO048ei5sZW5ndGg7TisrKXRoaXMuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5oYXMoeltOXSk/dGhpcy5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50LmdldCh6W05dKS5mb3JFYWNoKGZ1bmN0aW9uKEope2suaWRUb05vZGVNYXAuZ2V0KEopLmRpc3BsYWNlbWVudFg9MH0pOnRoaXMuaWRUb05vZGVNYXAuZ2V0KHpbTl0pLmRpc3BsYWNlbWVudFg9MDtlbHNle2Zvcih2YXIgVz0wLFo9MCxOPTA7Tjx6Lmxlbmd0aDtOKyspaWYodGhpcy5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50Lmhhcyh6W05dKSl7dmFyIGo9dGhpcy5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50LmdldCh6W05dKTtXKz1qLmxlbmd0aCp0aGlzLmlkVG9Ob2RlTWFwLmdldChqWzBdKS5kaXNwbGFjZW1lbnRYLForPWoubGVuZ3RofWVsc2UgVys9dGhpcy5pZFRvTm9kZU1hcC5nZXQoeltOXSkuZGlzcGxhY2VtZW50WCxaKys7Zm9yKHZhciBvZT1XL1osTj0wO048ei5sZW5ndGg7TisrKXRoaXMuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5oYXMoeltOXSk/dGhpcy5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50LmdldCh6W05dKS5mb3JFYWNoKGZ1bmN0aW9uKEope2suaWRUb05vZGVNYXAuZ2V0KEopLmRpc3BsYWNlbWVudFg9b2V9KTp0aGlzLmlkVG9Ob2RlTWFwLmdldCh6W05dKS5kaXNwbGFjZW1lbnRYPW9lfX1mb3IodmFyIEM9MDtDPHRoaXMuY29tcG9uZW50c09uVmVydGljYWwubGVuZ3RoO0MrKyl7dmFyIHo9dGhpcy5jb21wb25lbnRzT25WZXJ0aWNhbFtDXTtpZih0aGlzLmZpeGVkQ29tcG9uZW50c09uVmVydGljYWxbQ10pZm9yKHZhciBOPTA7Tjx6Lmxlbmd0aDtOKyspdGhpcy5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuaGFzKHpbTl0pP3RoaXMuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmdldCh6W05dKS5mb3JFYWNoKGZ1bmN0aW9uKEgpe2suaWRUb05vZGVNYXAuZ2V0KEgpLmRpc3BsYWNlbWVudFk9MH0pOnRoaXMuaWRUb05vZGVNYXAuZ2V0KHpbTl0pLmRpc3BsYWNlbWVudFk9MDtlbHNle2Zvcih2YXIgVz0wLFo9MCxOPTA7Tjx6Lmxlbmd0aDtOKyspaWYodGhpcy5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuaGFzKHpbTl0pKXt2YXIgaj10aGlzLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQoeltOXSk7Vys9ai5sZW5ndGgqdGhpcy5pZFRvTm9kZU1hcC5nZXQoalswXSkuZGlzcGxhY2VtZW50WSxaKz1qLmxlbmd0aH1lbHNlIFcrPXRoaXMuaWRUb05vZGVNYXAuZ2V0KHpbTl0pLmRpc3BsYWNlbWVudFksWisrO2Zvcih2YXIgb2U9Vy9aLE49MDtOPHoubGVuZ3RoO04rKyl0aGlzLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5oYXMoeltOXSk/dGhpcy5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuZ2V0KHpbTl0pLmZvckVhY2goZnVuY3Rpb24oYWUpe2suaWRUb05vZGVNYXAuZ2V0KGFlKS5kaXNwbGFjZW1lbnRZPW9lfSk6dGhpcy5pZFRvTm9kZU1hcC5nZXQoeltOXSkuZGlzcGxhY2VtZW50WT1vZX19fX0sSS5wcm90b3R5cGUuY2FsY3VsYXRlTm9kZXNUb0FwcGx5R3Jhdml0YXRpb25Ubz1mdW5jdGlvbigpe3ZhciBrPVtdLFIsQz10aGlzLmdyYXBoTWFuYWdlci5nZXRHcmFwaHMoKSxPPUMubGVuZ3RoLE47Zm9yKE49MDtOPE87TisrKVI9Q1tOXSxSLnVwZGF0ZUNvbm5lY3RlZCgpLFIuaXNDb25uZWN0ZWR8fChrPWsuY29uY2F0KFIuZ2V0Tm9kZXMoKSkpO3JldHVybiBrfSxJLnByb3RvdHlwZS5jcmVhdGVCZW5kcG9pbnRzPWZ1bmN0aW9uKCl7dmFyIGs9W107az1rLmNvbmNhdCh0aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxFZGdlcygpKTt2YXIgUj1uZXcgU2V0LEM7Zm9yKEM9MDtDPGsubGVuZ3RoO0MrKyl7dmFyIE89a1tDXTtpZighUi5oYXMoTykpe3ZhciBOPU8uZ2V0U291cmNlKCksUD1PLmdldFRhcmdldCgpO2lmKE49PVApTy5nZXRCZW5kcG9pbnRzKCkucHVzaChuZXcgYiksTy5nZXRCZW5kcG9pbnRzKCkucHVzaChuZXcgYiksdGhpcy5jcmVhdGVEdW1teU5vZGVzRm9yQmVuZHBvaW50cyhPKSxSLmFkZChPKTtlbHNle3ZhciBGPVtdO2lmKEY9Ri5jb25jYXQoTi5nZXRFZGdlTGlzdFRvTm9kZShQKSksRj1GLmNvbmNhdChQLmdldEVkZ2VMaXN0VG9Ob2RlKE4pKSwhUi5oYXMoRlswXSkpe2lmKEYubGVuZ3RoPjEpe3ZhciBCO2ZvcihCPTA7QjxGLmxlbmd0aDtCKyspe3ZhciBHPUZbQl07Ry5nZXRCZW5kcG9pbnRzKCkucHVzaChuZXcgYiksdGhpcy5jcmVhdGVEdW1teU5vZGVzRm9yQmVuZHBvaW50cyhHKX19Ri5mb3JFYWNoKGZ1bmN0aW9uKHope1IuYWRkKHopfSl9fX1pZihSLnNpemU9PWsubGVuZ3RoKWJyZWFrfX0sSS5wcm90b3R5cGUucG9zaXRpb25Ob2Rlc1JhZGlhbGx5PWZ1bmN0aW9uKGspe2Zvcih2YXIgUj1uZXcgeCgwLDApLEM9TWF0aC5jZWlsKE1hdGguc3FydChrLmxlbmd0aCkpLE89MCxOPTAsUD0wLEY9bmV3IGIoMCwwKSxCPTA7QjxrLmxlbmd0aDtCKyspe0IlQz09MCYmKFA9MCxOPU8sQiE9MCYmKE4rPW0uREVGQVVMVF9DT01QT05FTlRfU0VQRVJBVElPTiksTz0wKTt2YXIgRz1rW0JdLHo9Xy5maW5kQ2VudGVyT2ZUcmVlKEcpO1IueD1QLFIueT1OLEY9SS5yYWRpYWxMYXlvdXQoRyx6LFIpLEYueT5PJiYoTz1NYXRoLmZsb29yKEYueSkpLFA9TWF0aC5mbG9vcihGLngrbS5ERUZBVUxUX0NPTVBPTkVOVF9TRVBFUkFUSU9OKX10aGlzLnRyYW5zZm9ybShuZXcgYih2LldPUkxEX0NFTlRFUl9YLUYueC8yLHYuV09STERfQ0VOVEVSX1ktRi55LzIpKX0sSS5yYWRpYWxMYXlvdXQ9ZnVuY3Rpb24oayxSLEMpe3ZhciBPPU1hdGgubWF4KHRoaXMubWF4RGlhZ29uYWxJblRyZWUoayksbS5ERUZBVUxUX1JBRElBTF9TRVBBUkFUSU9OKTtJLmJyYW5jaFJhZGlhbExheW91dChSLG51bGwsMCwzNTksMCxPKTt2YXIgTj1MLmNhbGN1bGF0ZUJvdW5kcyhrKSxQPW5ldyBTO1Auc2V0RGV2aWNlT3JnWChOLmdldE1pblgoKSksUC5zZXREZXZpY2VPcmdZKE4uZ2V0TWluWSgpKSxQLnNldFdvcmxkT3JnWChDLngpLFAuc2V0V29ybGRPcmdZKEMueSk7Zm9yKHZhciBGPTA7RjxrLmxlbmd0aDtGKyspe3ZhciBCPWtbRl07Qi50cmFuc2Zvcm0oUCl9dmFyIEc9bmV3IGIoTi5nZXRNYXhYKCksTi5nZXRNYXhZKCkpO3JldHVybiBQLmludmVyc2VUcmFuc2Zvcm1Qb2ludChHKX0sSS5icmFuY2hSYWRpYWxMYXlvdXQ9ZnVuY3Rpb24oayxSLEMsTyxOLFApe3ZhciBGPShPLUMrMSkvMjtGPDAmJihGKz0xODApO3ZhciBCPShGK0MpJTM2MCxHPUIqRS5UV09fUEkvMzYwLHo9TWF0aC5jb3MoRyksVz1OKk1hdGguY29zKEcpLFo9TipNYXRoLnNpbihHKTtrLnNldENlbnRlcihXLFopO3ZhciBqPVtdO2o9ai5jb25jYXQoay5nZXRFZGdlcygpKTt2YXIgb2U9ai5sZW5ndGg7UiE9bnVsbCYmb2UtLTtmb3IodmFyIEs9MCxlZT1qLmxlbmd0aCxKLEg9ay5nZXRFZGdlc0JldHdlZW4oUik7SC5sZW5ndGg+MTspe3ZhciBxPUhbMF07SC5zcGxpY2UoMCwxKTt2YXIgUT1qLmluZGV4T2YocSk7UT49MCYmai5zcGxpY2UoUSwxKSxlZS0tLG9lLS19UiE9bnVsbD9KPShqLmluZGV4T2YoSFswXSkrMSklZWU6Sj0wO2Zvcih2YXIgYWU9TWF0aC5hYnMoTy1DKS9vZSx1ZT1KO0shPW9lO3VlPSsrdWUlZWUpe3ZhciBjZT1qW3VlXS5nZXRPdGhlckVuZChrKTtpZihjZSE9Uil7dmFyIHRlPShDK0sqYWUpJTM2MCxOZT0odGUrYWUpJTM2MDtJLmJyYW5jaFJhZGlhbExheW91dChjZSxrLHRlLE5lLE4rUCxQKSxLKyt9fX0sSS5tYXhEaWFnb25hbEluVHJlZT1mdW5jdGlvbihrKXtmb3IodmFyIFI9VC5NSU5fVkFMVUUsQz0wO0M8ay5sZW5ndGg7QysrKXt2YXIgTz1rW0NdLE49Ty5nZXREaWFnb25hbCgpO04+UiYmKFI9Til9cmV0dXJuIFJ9LEkucHJvdG90eXBlLmNhbGNSZXB1bHNpb25SYW5nZT1mdW5jdGlvbigpe3JldHVybiAyKih0aGlzLmxldmVsKzEpKnRoaXMuaWRlYWxFZGdlTGVuZ3RofSxJLnByb3RvdHlwZS5ncm91cFplcm9EZWdyZWVNZW1iZXJzPWZ1bmN0aW9uKCl7dmFyIGs9dGhpcyxSPXt9O3RoaXMubWVtYmVyR3JvdXBzPXt9LHRoaXMuaWRUb0R1bW15Tm9kZT17fTtmb3IodmFyIEM9W10sTz10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLE49MDtOPE8ubGVuZ3RoO04rKyl7dmFyIFA9T1tOXSxGPVAuZ2V0UGFyZW50KCk7dGhpcy5nZXROb2RlRGVncmVlV2l0aENoaWxkcmVuKFApPT09MCYmKEYuaWQ9PW51bGx8fCF0aGlzLmdldFRvQmVUaWxlZChGKSkmJkMucHVzaChQKX1mb3IodmFyIE49MDtOPEMubGVuZ3RoO04rKyl7dmFyIFA9Q1tOXSxCPVAuZ2V0UGFyZW50KCkuaWQ7dHlwZW9mIFJbQl0+InUiJiYoUltCXT1bXSksUltCXT1SW0JdLmNvbmNhdChQKX1PYmplY3Qua2V5cyhSKS5mb3JFYWNoKGZ1bmN0aW9uKEcpe2lmKFJbR10ubGVuZ3RoPjEpe3ZhciB6PSJEdW1teUNvbXBvdW5kXyIrRztrLm1lbWJlckdyb3Vwc1t6XT1SW0ddO3ZhciBXPVJbR11bMF0uZ2V0UGFyZW50KCksWj1uZXcgZChrLmdyYXBoTWFuYWdlcik7Wi5pZD16LFoucGFkZGluZ0xlZnQ9Vy5wYWRkaW5nTGVmdHx8MCxaLnBhZGRpbmdSaWdodD1XLnBhZGRpbmdSaWdodHx8MCxaLnBhZGRpbmdCb3R0b209Vy5wYWRkaW5nQm90dG9tfHwwLFoucGFkZGluZ1RvcD1XLnBhZGRpbmdUb3B8fDAsay5pZFRvRHVtbXlOb2RlW3pdPVo7dmFyIGo9ay5nZXRHcmFwaE1hbmFnZXIoKS5hZGQoay5uZXdHcmFwaCgpLFopLG9lPVcuZ2V0Q2hpbGQoKTtvZS5hZGQoWik7Zm9yKHZhciBLPTA7SzxSW0ddLmxlbmd0aDtLKyspe3ZhciBlZT1SW0ddW0tdO29lLnJlbW92ZShlZSksai5hZGQoZWUpfX19KX0sSS5wcm90b3R5cGUuY2xlYXJDb21wb3VuZHM9ZnVuY3Rpb24oKXt2YXIgaz17fSxSPXt9O3RoaXMucGVyZm9ybURGU09uQ29tcG91bmRzKCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmNvbXBvdW5kT3JkZXIubGVuZ3RoO0MrKylSW3RoaXMuY29tcG91bmRPcmRlcltDXS5pZF09dGhpcy5jb21wb3VuZE9yZGVyW0NdLGtbdGhpcy5jb21wb3VuZE9yZGVyW0NdLmlkXT1bXS5jb25jYXQodGhpcy5jb21wb3VuZE9yZGVyW0NdLmdldENoaWxkKCkuZ2V0Tm9kZXMoKSksdGhpcy5ncmFwaE1hbmFnZXIucmVtb3ZlKHRoaXMuY29tcG91bmRPcmRlcltDXS5nZXRDaGlsZCgpKSx0aGlzLmNvbXBvdW5kT3JkZXJbQ10uY2hpbGQ9bnVsbDt0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzKCksdGhpcy50aWxlQ29tcG91bmRNZW1iZXJzKGssUil9LEkucHJvdG90eXBlLmNsZWFyWmVyb0RlZ3JlZU1lbWJlcnM9ZnVuY3Rpb24oKXt2YXIgaz10aGlzLFI9dGhpcy50aWxlZFplcm9EZWdyZWVQYWNrPVtdO09iamVjdC5rZXlzKHRoaXMubWVtYmVyR3JvdXBzKS5mb3JFYWNoKGZ1bmN0aW9uKEMpe3ZhciBPPWsuaWRUb0R1bW15Tm9kZVtDXTtpZihSW0NdPWsudGlsZU5vZGVzKGsubWVtYmVyR3JvdXBzW0NdLE8ucGFkZGluZ0xlZnQrTy5wYWRkaW5nUmlnaHQpLE8ucmVjdC53aWR0aD1SW0NdLndpZHRoLE8ucmVjdC5oZWlnaHQ9UltDXS5oZWlnaHQsTy5zZXRDZW50ZXIoUltDXS5jZW50ZXJYLFJbQ10uY2VudGVyWSksTy5sYWJlbE1hcmdpbkxlZnQ9MCxPLmxhYmVsTWFyZ2luVG9wPTAsbS5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFMpe3ZhciBOPU8ucmVjdC53aWR0aCxQPU8ucmVjdC5oZWlnaHQ7Ty5sYWJlbFdpZHRoJiYoTy5sYWJlbFBvc0hvcml6b250YWw9PSJsZWZ0Ij8oTy5yZWN0LngtPU8ubGFiZWxXaWR0aCxPLnNldFdpZHRoKE4rTy5sYWJlbFdpZHRoKSxPLmxhYmVsTWFyZ2luTGVmdD1PLmxhYmVsV2lkdGgpOk8ubGFiZWxQb3NIb3Jpem9udGFsPT0iY2VudGVyIiYmTy5sYWJlbFdpZHRoPk4/KE8ucmVjdC54LT0oTy5sYWJlbFdpZHRoLU4pLzIsTy5zZXRXaWR0aChPLmxhYmVsV2lkdGgpLE8ubGFiZWxNYXJnaW5MZWZ0PShPLmxhYmVsV2lkdGgtTikvMik6Ty5sYWJlbFBvc0hvcml6b250YWw9PSJyaWdodCImJk8uc2V0V2lkdGgoTitPLmxhYmVsV2lkdGgpKSxPLmxhYmVsSGVpZ2h0JiYoTy5sYWJlbFBvc1ZlcnRpY2FsPT0idG9wIj8oTy5yZWN0LnktPU8ubGFiZWxIZWlnaHQsTy5zZXRIZWlnaHQoUCtPLmxhYmVsSGVpZ2h0KSxPLmxhYmVsTWFyZ2luVG9wPU8ubGFiZWxIZWlnaHQpOk8ubGFiZWxQb3NWZXJ0aWNhbD09ImNlbnRlciImJk8ubGFiZWxIZWlnaHQ+UD8oTy5yZWN0LnktPShPLmxhYmVsSGVpZ2h0LVApLzIsTy5zZXRIZWlnaHQoTy5sYWJlbEhlaWdodCksTy5sYWJlbE1hcmdpblRvcD0oTy5sYWJlbEhlaWdodC1QKS8yKTpPLmxhYmVsUG9zVmVydGljYWw9PSJib3R0b20iJiZPLnNldEhlaWdodChQK08ubGFiZWxIZWlnaHQpKX19KX0sSS5wcm90b3R5cGUucmVwb3B1bGF0ZUNvbXBvdW5kcz1mdW5jdGlvbigpe2Zvcih2YXIgaz10aGlzLmNvbXBvdW5kT3JkZXIubGVuZ3RoLTE7az49MDtrLS0pe3ZhciBSPXRoaXMuY29tcG91bmRPcmRlcltrXSxDPVIuaWQsTz1SLnBhZGRpbmdMZWZ0LE49Ui5wYWRkaW5nVG9wLFA9Ui5sYWJlbE1hcmdpbkxlZnQsRj1SLmxhYmVsTWFyZ2luVG9wO3RoaXMuYWRqdXN0TG9jYXRpb25zKHRoaXMudGlsZWRNZW1iZXJQYWNrW0NdLFIucmVjdC54LFIucmVjdC55LE8sTixQLEYpfX0sSS5wcm90b3R5cGUucmVwb3B1bGF0ZVplcm9EZWdyZWVNZW1iZXJzPWZ1bmN0aW9uKCl7dmFyIGs9dGhpcyxSPXRoaXMudGlsZWRaZXJvRGVncmVlUGFjaztPYmplY3Qua2V5cyhSKS5mb3JFYWNoKGZ1bmN0aW9uKEMpe3ZhciBPPWsuaWRUb0R1bW15Tm9kZVtDXSxOPU8ucGFkZGluZ0xlZnQsUD1PLnBhZGRpbmdUb3AsRj1PLmxhYmVsTWFyZ2luTGVmdCxCPU8ubGFiZWxNYXJnaW5Ub3A7ay5hZGp1c3RMb2NhdGlvbnMoUltDXSxPLnJlY3QueCxPLnJlY3QueSxOLFAsRixCKX0pfSxJLnByb3RvdHlwZS5nZXRUb0JlVGlsZWQ9ZnVuY3Rpb24oayl7dmFyIFI9ay5pZDtpZih0aGlzLnRvQmVUaWxlZFtSXSE9bnVsbClyZXR1cm4gdGhpcy50b0JlVGlsZWRbUl07dmFyIEM9ay5nZXRDaGlsZCgpO2lmKEM9PW51bGwpcmV0dXJuIHRoaXMudG9CZVRpbGVkW1JdPSExLCExO2Zvcih2YXIgTz1DLmdldE5vZGVzKCksTj0wO048Ty5sZW5ndGg7TisrKXt2YXIgUD1PW05dO2lmKHRoaXMuZ2V0Tm9kZURlZ3JlZShQKT4wKXJldHVybiB0aGlzLnRvQmVUaWxlZFtSXT0hMSwhMTtpZihQLmdldENoaWxkKCk9PW51bGwpe3RoaXMudG9CZVRpbGVkW1AuaWRdPSExO2NvbnRpbnVlfWlmKCF0aGlzLmdldFRvQmVUaWxlZChQKSlyZXR1cm4gdGhpcy50b0JlVGlsZWRbUl09ITEsITF9cmV0dXJuIHRoaXMudG9CZVRpbGVkW1JdPSEwLCEwfSxJLnByb3RvdHlwZS5nZXROb2RlRGVncmVlPWZ1bmN0aW9uKGspe2Zvcih2YXIgUj1rLmlkLEM9ay5nZXRFZGdlcygpLE89MCxOPTA7TjxDLmxlbmd0aDtOKyspe3ZhciBQPUNbTl07UC5nZXRTb3VyY2UoKS5pZCE9PVAuZ2V0VGFyZ2V0KCkuaWQmJihPPU8rMSl9cmV0dXJuIE99LEkucHJvdG90eXBlLmdldE5vZGVEZWdyZWVXaXRoQ2hpbGRyZW49ZnVuY3Rpb24oayl7dmFyIFI9dGhpcy5nZXROb2RlRGVncmVlKGspO2lmKGsuZ2V0Q2hpbGQoKT09bnVsbClyZXR1cm4gUjtmb3IodmFyIEM9ay5nZXRDaGlsZCgpLmdldE5vZGVzKCksTz0wO088Qy5sZW5ndGg7TysrKXt2YXIgTj1DW09dO1IrPXRoaXMuZ2V0Tm9kZURlZ3JlZVdpdGhDaGlsZHJlbihOKX1yZXR1cm4gUn0sSS5wcm90b3R5cGUucGVyZm9ybURGU09uQ29tcG91bmRzPWZ1bmN0aW9uKCl7dGhpcy5jb21wb3VuZE9yZGVyPVtdLHRoaXMuZmlsbENvbXBleE9yZGVyQnlERlModGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldE5vZGVzKCkpfSxJLnByb3RvdHlwZS5maWxsQ29tcGV4T3JkZXJCeURGUz1mdW5jdGlvbihrKXtmb3IodmFyIFI9MDtSPGsubGVuZ3RoO1IrKyl7dmFyIEM9a1tSXTtDLmdldENoaWxkKCkhPW51bGwmJnRoaXMuZmlsbENvbXBleE9yZGVyQnlERlMoQy5nZXRDaGlsZCgpLmdldE5vZGVzKCkpLHRoaXMuZ2V0VG9CZVRpbGVkKEMpJiZ0aGlzLmNvbXBvdW5kT3JkZXIucHVzaChDKX19LEkucHJvdG90eXBlLmFkanVzdExvY2F0aW9ucz1mdW5jdGlvbihrLFIsQyxPLE4sUCxGKXtSKz1PK1AsQys9TitGO2Zvcih2YXIgQj1SLEc9MDtHPGsucm93cy5sZW5ndGg7RysrKXt2YXIgej1rLnJvd3NbR107Uj1CO2Zvcih2YXIgVz0wLFo9MDtaPHoubGVuZ3RoO1orKyl7dmFyIGo9eltaXTtqLnJlY3QueD1SLGoucmVjdC55PUMsUis9ai5yZWN0LndpZHRoK2suaG9yaXpvbnRhbFBhZGRpbmcsai5yZWN0LmhlaWdodD5XJiYoVz1qLnJlY3QuaGVpZ2h0KX1DKz1XK2sudmVydGljYWxQYWRkaW5nfX0sSS5wcm90b3R5cGUudGlsZUNvbXBvdW5kTWVtYmVycz1mdW5jdGlvbihrLFIpe3ZhciBDPXRoaXM7dGhpcy50aWxlZE1lbWJlclBhY2s9W10sT2JqZWN0LmtleXMoaykuZm9yRWFjaChmdW5jdGlvbihPKXt2YXIgTj1SW09dO2lmKEMudGlsZWRNZW1iZXJQYWNrW09dPUMudGlsZU5vZGVzKGtbT10sTi5wYWRkaW5nTGVmdCtOLnBhZGRpbmdSaWdodCksTi5yZWN0LndpZHRoPUMudGlsZWRNZW1iZXJQYWNrW09dLndpZHRoLE4ucmVjdC5oZWlnaHQ9Qy50aWxlZE1lbWJlclBhY2tbT10uaGVpZ2h0LE4uc2V0Q2VudGVyKEMudGlsZWRNZW1iZXJQYWNrW09dLmNlbnRlclgsQy50aWxlZE1lbWJlclBhY2tbT10uY2VudGVyWSksTi5sYWJlbE1hcmdpbkxlZnQ9MCxOLmxhYmVsTWFyZ2luVG9wPTAsbS5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFMpe3ZhciBQPU4ucmVjdC53aWR0aCxGPU4ucmVjdC5oZWlnaHQ7Ti5sYWJlbFdpZHRoJiYoTi5sYWJlbFBvc0hvcml6b250YWw9PSJsZWZ0Ij8oTi5yZWN0LngtPU4ubGFiZWxXaWR0aCxOLnNldFdpZHRoKFArTi5sYWJlbFdpZHRoKSxOLmxhYmVsTWFyZ2luTGVmdD1OLmxhYmVsV2lkdGgpOk4ubGFiZWxQb3NIb3Jpem9udGFsPT0iY2VudGVyIiYmTi5sYWJlbFdpZHRoPlA/KE4ucmVjdC54LT0oTi5sYWJlbFdpZHRoLVApLzIsTi5zZXRXaWR0aChOLmxhYmVsV2lkdGgpLE4ubGFiZWxNYXJnaW5MZWZ0PShOLmxhYmVsV2lkdGgtUCkvMik6Ti5sYWJlbFBvc0hvcml6b250YWw9PSJyaWdodCImJk4uc2V0V2lkdGgoUCtOLmxhYmVsV2lkdGgpKSxOLmxhYmVsSGVpZ2h0JiYoTi5sYWJlbFBvc1ZlcnRpY2FsPT0idG9wIj8oTi5yZWN0LnktPU4ubGFiZWxIZWlnaHQsTi5zZXRIZWlnaHQoRitOLmxhYmVsSGVpZ2h0KSxOLmxhYmVsTWFyZ2luVG9wPU4ubGFiZWxIZWlnaHQpOk4ubGFiZWxQb3NWZXJ0aWNhbD09ImNlbnRlciImJk4ubGFiZWxIZWlnaHQ+Rj8oTi5yZWN0LnktPShOLmxhYmVsSGVpZ2h0LUYpLzIsTi5zZXRIZWlnaHQoTi5sYWJlbEhlaWdodCksTi5sYWJlbE1hcmdpblRvcD0oTi5sYWJlbEhlaWdodC1GKS8yKTpOLmxhYmVsUG9zVmVydGljYWw9PSJib3R0b20iJiZOLnNldEhlaWdodChGK04ubGFiZWxIZWlnaHQpKX19KX0sSS5wcm90b3R5cGUudGlsZU5vZGVzPWZ1bmN0aW9uKGssUil7dmFyIEM9dGhpcy50aWxlTm9kZXNCeUZhdm9yaW5nRGltKGssUiwhMCksTz10aGlzLnRpbGVOb2Rlc0J5RmF2b3JpbmdEaW0oayxSLCExKSxOPXRoaXMuZ2V0T3JnUmF0aW8oQyksUD10aGlzLmdldE9yZ1JhdGlvKE8pLEY7cmV0dXJuIFA8Tj9GPU86Rj1DLEZ9LEkucHJvdG90eXBlLmdldE9yZ1JhdGlvPWZ1bmN0aW9uKGspe3ZhciBSPWsud2lkdGgsQz1rLmhlaWdodCxPPVIvQztyZXR1cm4gTzwxJiYoTz0xL08pLE99LEkucHJvdG90eXBlLmNhbGNJZGVhbFJvd1dpZHRoPWZ1bmN0aW9uKGssUil7dmFyIEM9bS5USUxJTkdfUEFERElOR19WRVJUSUNBTCxPPW0uVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTCxOPWsubGVuZ3RoLFA9MCxGPTAsQj0wO2suZm9yRWFjaChmdW5jdGlvbihLKXtQKz1LLmdldFdpZHRoKCksRis9Sy5nZXRIZWlnaHQoKSxLLmdldFdpZHRoKCk+QiYmKEI9Sy5nZXRXaWR0aCgpKX0pO3ZhciBHPVAvTix6PUYvTixXPU1hdGgucG93KEMtTywyKSs0KihHK08pKih6K0MpKk4sWj0oTy1DK01hdGguc3FydChXKSkvKDIqKEcrTykpLGo7Uj8oaj1NYXRoLmNlaWwoWiksaj09WiYmaisrKTpqPU1hdGguZmxvb3IoWik7dmFyIG9lPWoqKEcrTyktTztyZXR1cm4gQj5vZSYmKG9lPUIpLG9lKz1PKjIsb2V9LEkucHJvdG90eXBlLnRpbGVOb2Rlc0J5RmF2b3JpbmdEaW09ZnVuY3Rpb24oayxSLEMpe3ZhciBPPW0uVElMSU5HX1BBRERJTkdfVkVSVElDQUwsTj1tLlRJTElOR19QQURESU5HX0hPUklaT05UQUwsUD1tLlRJTElOR19DT01QQVJFX0JZLEY9e3Jvd3M6W10scm93V2lkdGg6W10scm93SGVpZ2h0OltdLHdpZHRoOjAsaGVpZ2h0OlIsdmVydGljYWxQYWRkaW5nOk8saG9yaXpvbnRhbFBhZGRpbmc6TixjZW50ZXJYOjAsY2VudGVyWTowfTtQJiYoRi5pZGVhbFJvd1dpZHRoPXRoaXMuY2FsY0lkZWFsUm93V2lkdGgoayxDKSk7dmFyIEI9byhmdW5jdGlvbihlZSl7cmV0dXJuIGVlLnJlY3Qud2lkdGgqZWUucmVjdC5oZWlnaHR9LCJnZXROb2RlQXJlYSIpLEc9byhmdW5jdGlvbihlZSxKKXtyZXR1cm4gQihKKS1CKGVlKX0sImFyZWFDb21wYXJlRmNuIik7ay5zb3J0KGZ1bmN0aW9uKEssZWUpe3ZhciBKPUc7cmV0dXJuIEYuaWRlYWxSb3dXaWR0aD8oSj1QLEooSy5pZCxlZS5pZCkpOkooSyxlZSl9KTtmb3IodmFyIHo9MCxXPTAsWj0wO1o8ay5sZW5ndGg7WisrKXt2YXIgaj1rW1pdO3orPWouZ2V0Q2VudGVyWCgpLFcrPWouZ2V0Q2VudGVyWSgpfUYuY2VudGVyWD16L2subGVuZ3RoLEYuY2VudGVyWT1XL2subGVuZ3RoO2Zvcih2YXIgWj0wO1o8ay5sZW5ndGg7WisrKXt2YXIgaj1rW1pdO2lmKEYucm93cy5sZW5ndGg9PTApdGhpcy5pbnNlcnROb2RlVG9Sb3coRixqLDAsUik7ZWxzZSBpZih0aGlzLmNhbkFkZEhvcml6b250YWwoRixqLnJlY3Qud2lkdGgsai5yZWN0LmhlaWdodCkpe3ZhciBvZT1GLnJvd3MubGVuZ3RoLTE7Ri5pZGVhbFJvd1dpZHRofHwob2U9dGhpcy5nZXRTaG9ydGVzdFJvd0luZGV4KEYpKSx0aGlzLmluc2VydE5vZGVUb1JvdyhGLGosb2UsUil9ZWxzZSB0aGlzLmluc2VydE5vZGVUb1JvdyhGLGosRi5yb3dzLmxlbmd0aCxSKTt0aGlzLnNoaWZ0VG9MYXN0Um93KEYpfXJldHVybiBGfSxJLnByb3RvdHlwZS5pbnNlcnROb2RlVG9Sb3c9ZnVuY3Rpb24oayxSLEMsTyl7dmFyIE49TztpZihDPT1rLnJvd3MubGVuZ3RoKXt2YXIgUD1bXTtrLnJvd3MucHVzaChQKSxrLnJvd1dpZHRoLnB1c2goTiksay5yb3dIZWlnaHQucHVzaCgwKX12YXIgRj1rLnJvd1dpZHRoW0NdK1IucmVjdC53aWR0aDtrLnJvd3NbQ10ubGVuZ3RoPjAmJihGKz1rLmhvcml6b250YWxQYWRkaW5nKSxrLnJvd1dpZHRoW0NdPUYsay53aWR0aDxGJiYoay53aWR0aD1GKTt2YXIgQj1SLnJlY3QuaGVpZ2h0O0M+MCYmKEIrPWsudmVydGljYWxQYWRkaW5nKTt2YXIgRz0wO0I+ay5yb3dIZWlnaHRbQ10mJihHPWsucm93SGVpZ2h0W0NdLGsucm93SGVpZ2h0W0NdPUIsRz1rLnJvd0hlaWdodFtDXS1HKSxrLmhlaWdodCs9RyxrLnJvd3NbQ10ucHVzaChSKX0sSS5wcm90b3R5cGUuZ2V0U2hvcnRlc3RSb3dJbmRleD1mdW5jdGlvbihrKXtmb3IodmFyIFI9LTEsQz1OdW1iZXIuTUFYX1ZBTFVFLE89MDtPPGsucm93cy5sZW5ndGg7TysrKWsucm93V2lkdGhbT108QyYmKFI9TyxDPWsucm93V2lkdGhbT10pO3JldHVybiBSfSxJLnByb3RvdHlwZS5nZXRMb25nZXN0Um93SW5kZXg9ZnVuY3Rpb24oayl7Zm9yKHZhciBSPS0xLEM9TnVtYmVyLk1JTl9WQUxVRSxPPTA7TzxrLnJvd3MubGVuZ3RoO08rKylrLnJvd1dpZHRoW09dPkMmJihSPU8sQz1rLnJvd1dpZHRoW09dKTtyZXR1cm4gUn0sSS5wcm90b3R5cGUuY2FuQWRkSG9yaXpvbnRhbD1mdW5jdGlvbihrLFIsQyl7aWYoay5pZGVhbFJvd1dpZHRoKXt2YXIgTz1rLnJvd3MubGVuZ3RoLTEsTj1rLnJvd1dpZHRoW09dO3JldHVybiBOK1Iray5ob3Jpem9udGFsUGFkZGluZzw9ay5pZGVhbFJvd1dpZHRofXZhciBQPXRoaXMuZ2V0U2hvcnRlc3RSb3dJbmRleChrKTtpZihQPDApcmV0dXJuITA7dmFyIEY9ay5yb3dXaWR0aFtQXTtpZihGK2suaG9yaXpvbnRhbFBhZGRpbmcrUjw9ay53aWR0aClyZXR1cm4hMDt2YXIgQj0wO2sucm93SGVpZ2h0W1BdPEMmJlA+MCYmKEI9QytrLnZlcnRpY2FsUGFkZGluZy1rLnJvd0hlaWdodFtQXSk7dmFyIEc7ay53aWR0aC1GPj1SK2suaG9yaXpvbnRhbFBhZGRpbmc/Rz0oay5oZWlnaHQrQikvKEYrUitrLmhvcml6b250YWxQYWRkaW5nKTpHPShrLmhlaWdodCtCKS9rLndpZHRoLEI9QytrLnZlcnRpY2FsUGFkZGluZzt2YXIgejtyZXR1cm4gay53aWR0aDxSP3o9KGsuaGVpZ2h0K0IpL1I6ej0oay5oZWlnaHQrQikvay53aWR0aCx6PDEmJih6PTEveiksRzwxJiYoRz0xL0cpLEc8en0sSS5wcm90b3R5cGUuc2hpZnRUb0xhc3RSb3c9ZnVuY3Rpb24oayl7dmFyIFI9dGhpcy5nZXRMb25nZXN0Um93SW5kZXgoayksQz1rLnJvd1dpZHRoLmxlbmd0aC0xLE89ay5yb3dzW1JdLE49T1tPLmxlbmd0aC0xXSxQPU4ud2lkdGgray5ob3Jpem9udGFsUGFkZGluZztpZihrLndpZHRoLWsucm93V2lkdGhbQ10+UCYmUiE9Qyl7Ty5zcGxpY2UoLTEsMSksay5yb3dzW0NdLnB1c2goTiksay5yb3dXaWR0aFtSXT1rLnJvd1dpZHRoW1JdLVAsay5yb3dXaWR0aFtDXT1rLnJvd1dpZHRoW0NdK1Asay53aWR0aD1rLnJvd1dpZHRoW2luc3RhbmNlLmdldExvbmdlc3RSb3dJbmRleChrKV07Zm9yKHZhciBGPU51bWJlci5NSU5fVkFMVUUsQj0wO0I8Ty5sZW5ndGg7QisrKU9bQl0uaGVpZ2h0PkYmJihGPU9bQl0uaGVpZ2h0KTtSPjAmJihGKz1rLnZlcnRpY2FsUGFkZGluZyk7dmFyIEc9ay5yb3dIZWlnaHRbUl0ray5yb3dIZWlnaHRbQ107ay5yb3dIZWlnaHRbUl09RixrLnJvd0hlaWdodFtDXTxOLmhlaWdodCtrLnZlcnRpY2FsUGFkZGluZyYmKGsucm93SGVpZ2h0W0NdPU4uaGVpZ2h0K2sudmVydGljYWxQYWRkaW5nKTt2YXIgej1rLnJvd0hlaWdodFtSXStrLnJvd0hlaWdodFtDXTtrLmhlaWdodCs9ei1HLHRoaXMuc2hpZnRUb0xhc3RSb3coayl9fSxJLnByb3RvdHlwZS50aWxpbmdQcmVMYXlvdXQ9ZnVuY3Rpb24oKXttLlRJTEUmJih0aGlzLmdyb3VwWmVyb0RlZ3JlZU1lbWJlcnMoKSx0aGlzLmNsZWFyQ29tcG91bmRzKCksdGhpcy5jbGVhclplcm9EZWdyZWVNZW1iZXJzKCkpfSxJLnByb3RvdHlwZS50aWxpbmdQb3N0TGF5b3V0PWZ1bmN0aW9uKCl7bS5USUxFJiYodGhpcy5yZXBvcHVsYXRlWmVyb0RlZ3JlZU1lbWJlcnMoKSx0aGlzLnJlcG9wdWxhdGVDb21wb3VuZHMoKSl9LEkucHJvdG90eXBlLnJlZHVjZVRyZWVzPWZ1bmN0aW9uKCl7Zm9yKHZhciBrPVtdLFI9ITAsQztSOyl7dmFyIE89dGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKSxOPVtdO1I9ITE7Zm9yKHZhciBQPTA7UDxPLmxlbmd0aDtQKyspaWYoQz1PW1BdLEMuZ2V0RWRnZXMoKS5sZW5ndGg9PTEmJiFDLmdldEVkZ2VzKClbMF0uaXNJbnRlckdyYXBoJiZDLmdldENoaWxkKCk9PW51bGwpe2lmKG0uUFVSRV9JTkNSRU1FTlRBTCl7dmFyIEY9Qy5nZXRFZGdlcygpWzBdLmdldE90aGVyRW5kKEMpLEI9bmV3IHcoQy5nZXRDZW50ZXJYKCktRi5nZXRDZW50ZXJYKCksQy5nZXRDZW50ZXJZKCktRi5nZXRDZW50ZXJZKCkpO04ucHVzaChbQyxDLmdldEVkZ2VzKClbMF0sQy5nZXRPd25lcigpLEJdKX1lbHNlIE4ucHVzaChbQyxDLmdldEVkZ2VzKClbMF0sQy5nZXRPd25lcigpXSk7Uj0hMH1pZihSPT0hMCl7Zm9yKHZhciBHPVtdLHo9MDt6PE4ubGVuZ3RoO3orKylOW3pdWzBdLmdldEVkZ2VzKCkubGVuZ3RoPT0xJiYoRy5wdXNoKE5bel0pLE5bel1bMF0uZ2V0T3duZXIoKS5yZW1vdmUoTlt6XVswXSkpO2sucHVzaChHKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxFZGdlcygpfX10aGlzLnBydW5lZE5vZGVzQWxsPWt9LEkucHJvdG90eXBlLmdyb3dUcmVlPWZ1bmN0aW9uKGspe2Zvcih2YXIgUj1rLmxlbmd0aCxDPWtbUi0xXSxPLE49MDtOPEMubGVuZ3RoO04rKylPPUNbTl0sdGhpcy5maW5kUGxhY2Vmb3JQcnVuZWROb2RlKE8pLE9bMl0uYWRkKE9bMF0pLE9bMl0uYWRkKE9bMV0sT1sxXS5zb3VyY2UsT1sxXS50YXJnZXQpO2suc3BsaWNlKGsubGVuZ3RoLTEsMSksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKX0sSS5wcm90b3R5cGUuZmluZFBsYWNlZm9yUHJ1bmVkTm9kZT1mdW5jdGlvbihrKXt2YXIgUixDLE89a1swXTtpZihPPT1rWzFdLnNvdXJjZT9DPWtbMV0udGFyZ2V0OkM9a1sxXS5zb3VyY2UsbS5QVVJFX0lOQ1JFTUVOVEFMKU8uc2V0Q2VudGVyKEMuZ2V0Q2VudGVyWCgpK2tbM10uZ2V0V2lkdGgoKSxDLmdldENlbnRlclkoKStrWzNdLmdldEhlaWdodCgpKTtlbHNle3ZhciBOPUMuc3RhcnRYLFA9Qy5maW5pc2hYLEY9Qy5zdGFydFksQj1DLmZpbmlzaFksRz0wLHo9MCxXPTAsWj0wLGo9W0csVyx6LFpdO2lmKEY+MClmb3IodmFyIG9lPU47b2U8PVA7b2UrKylqWzBdKz10aGlzLmdyaWRbb2VdW0YtMV0ubGVuZ3RoK3RoaXMuZ3JpZFtvZV1bRl0ubGVuZ3RoLTE7aWYoUDx0aGlzLmdyaWQubGVuZ3RoLTEpZm9yKHZhciBvZT1GO29lPD1CO29lKyspalsxXSs9dGhpcy5ncmlkW1ArMV1bb2VdLmxlbmd0aCt0aGlzLmdyaWRbUF1bb2VdLmxlbmd0aC0xO2lmKEI8dGhpcy5ncmlkWzBdLmxlbmd0aC0xKWZvcih2YXIgb2U9TjtvZTw9UDtvZSsrKWpbMl0rPXRoaXMuZ3JpZFtvZV1bQisxXS5sZW5ndGgrdGhpcy5ncmlkW29lXVtCXS5sZW5ndGgtMTtpZihOPjApZm9yKHZhciBvZT1GO29lPD1CO29lKyspalszXSs9dGhpcy5ncmlkW04tMV1bb2VdLmxlbmd0aCt0aGlzLmdyaWRbTl1bb2VdLmxlbmd0aC0xO2Zvcih2YXIgSz1ULk1BWF9WQUxVRSxlZSxKLEg9MDtIPGoubGVuZ3RoO0grKylqW0hdPEs/KEs9altIXSxlZT0xLEo9SCk6altIXT09SyYmZWUrKztpZihlZT09MyYmSz09MClqWzBdPT0wJiZqWzFdPT0wJiZqWzJdPT0wP1I9MTpqWzBdPT0wJiZqWzFdPT0wJiZqWzNdPT0wP1I9MDpqWzBdPT0wJiZqWzJdPT0wJiZqWzNdPT0wP1I9MzpqWzFdPT0wJiZqWzJdPT0wJiZqWzNdPT0wJiYoUj0yKTtlbHNlIGlmKGVlPT0yJiZLPT0wKXt2YXIgcT1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMik7alswXT09MCYmalsxXT09MD9xPT0wP1I9MDpSPTE6alswXT09MCYmalsyXT09MD9xPT0wP1I9MDpSPTI6alswXT09MCYmalszXT09MD9xPT0wP1I9MDpSPTM6alsxXT09MCYmalsyXT09MD9xPT0wP1I9MTpSPTI6alsxXT09MCYmalszXT09MD9xPT0wP1I9MTpSPTM6cT09MD9SPTI6Uj0zfWVsc2UgaWYoZWU9PTQmJks9PTApe3ZhciBxPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSo0KTtSPXF9ZWxzZSBSPUo7Uj09MD9PLnNldENlbnRlcihDLmdldENlbnRlclgoKSxDLmdldENlbnRlclkoKS1DLmdldEhlaWdodCgpLzIteS5ERUZBVUxUX0VER0VfTEVOR1RILU8uZ2V0SGVpZ2h0KCkvMik6Uj09MT9PLnNldENlbnRlcihDLmdldENlbnRlclgoKStDLmdldFdpZHRoKCkvMit5LkRFRkFVTFRfRURHRV9MRU5HVEgrTy5nZXRXaWR0aCgpLzIsQy5nZXRDZW50ZXJZKCkpOlI9PTI/Ty5zZXRDZW50ZXIoQy5nZXRDZW50ZXJYKCksQy5nZXRDZW50ZXJZKCkrQy5nZXRIZWlnaHQoKS8yK3kuREVGQVVMVF9FREdFX0xFTkdUSCtPLmdldEhlaWdodCgpLzIpOk8uc2V0Q2VudGVyKEMuZ2V0Q2VudGVyWCgpLUMuZ2V0V2lkdGgoKS8yLXkuREVGQVVMVF9FREdFX0xFTkdUSC1PLmdldFdpZHRoKCkvMixDLmdldENlbnRlclkoKSl9fSxhLmV4cG9ydHM9SX0sOTkxOihhLHMsbCk9Pnt2YXIgdT1sKDU1MSkuRkRMYXlvdXROb2RlLGg9bCg1NTEpLklNYXRoO2Z1bmN0aW9uIGYocCxtLGcseSl7dS5jYWxsKHRoaXMscCxtLGcseSl9byhmLCJDb1NFTm9kZSIpLGYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodS5wcm90b3R5cGUpO2Zvcih2YXIgZCBpbiB1KWZbZF09dVtkXTtmLnByb3RvdHlwZS5jYWxjdWxhdGVEaXNwbGFjZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgcD10aGlzLmdyYXBoTWFuYWdlci5nZXRMYXlvdXQoKTt0aGlzLmdldENoaWxkKCkhPW51bGwmJnRoaXMuZml4ZWROb2RlV2VpZ2h0Pyh0aGlzLmRpc3BsYWNlbWVudFgrPXAuY29vbGluZ0ZhY3RvcioodGhpcy5zcHJpbmdGb3JjZVgrdGhpcy5yZXB1bHNpb25Gb3JjZVgrdGhpcy5ncmF2aXRhdGlvbkZvcmNlWCkvdGhpcy5maXhlZE5vZGVXZWlnaHQsdGhpcy5kaXNwbGFjZW1lbnRZKz1wLmNvb2xpbmdGYWN0b3IqKHRoaXMuc3ByaW5nRm9yY2VZK3RoaXMucmVwdWxzaW9uRm9yY2VZK3RoaXMuZ3Jhdml0YXRpb25Gb3JjZVkpL3RoaXMuZml4ZWROb2RlV2VpZ2h0KToodGhpcy5kaXNwbGFjZW1lbnRYKz1wLmNvb2xpbmdGYWN0b3IqKHRoaXMuc3ByaW5nRm9yY2VYK3RoaXMucmVwdWxzaW9uRm9yY2VYK3RoaXMuZ3Jhdml0YXRpb25Gb3JjZVgpL3RoaXMubm9PZkNoaWxkcmVuLHRoaXMuZGlzcGxhY2VtZW50WSs9cC5jb29saW5nRmFjdG9yKih0aGlzLnNwcmluZ0ZvcmNlWSt0aGlzLnJlcHVsc2lvbkZvcmNlWSt0aGlzLmdyYXZpdGF0aW9uRm9yY2VZKS90aGlzLm5vT2ZDaGlsZHJlbiksTWF0aC5hYnModGhpcy5kaXNwbGFjZW1lbnRYKT5wLmNvb2xpbmdGYWN0b3IqcC5tYXhOb2RlRGlzcGxhY2VtZW50JiYodGhpcy5kaXNwbGFjZW1lbnRYPXAuY29vbGluZ0ZhY3RvcipwLm1heE5vZGVEaXNwbGFjZW1lbnQqaC5zaWduKHRoaXMuZGlzcGxhY2VtZW50WCkpLE1hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WSk+cC5jb29saW5nRmFjdG9yKnAubWF4Tm9kZURpc3BsYWNlbWVudCYmKHRoaXMuZGlzcGxhY2VtZW50WT1wLmNvb2xpbmdGYWN0b3IqcC5tYXhOb2RlRGlzcGxhY2VtZW50Kmguc2lnbih0aGlzLmRpc3BsYWNlbWVudFkpKSx0aGlzLmNoaWxkJiZ0aGlzLmNoaWxkLmdldE5vZGVzKCkubGVuZ3RoPjAmJnRoaXMucHJvcG9nYXRlRGlzcGxhY2VtZW50VG9DaGlsZHJlbih0aGlzLmRpc3BsYWNlbWVudFgsdGhpcy5kaXNwbGFjZW1lbnRZKX0sZi5wcm90b3R5cGUucHJvcG9nYXRlRGlzcGxhY2VtZW50VG9DaGlsZHJlbj1mdW5jdGlvbihwLG0pe2Zvcih2YXIgZz10aGlzLmdldENoaWxkKCkuZ2V0Tm9kZXMoKSx5LHY9MDt2PGcubGVuZ3RoO3YrKyl5PWdbdl0seS5nZXRDaGlsZCgpPT1udWxsPyh5LmRpc3BsYWNlbWVudFgrPXAseS5kaXNwbGFjZW1lbnRZKz1tKTp5LnByb3BvZ2F0ZURpc3BsYWNlbWVudFRvQ2hpbGRyZW4ocCxtKX0sZi5wcm90b3R5cGUubW92ZT1mdW5jdGlvbigpe3ZhciBwPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldExheW91dCgpOyh0aGlzLmNoaWxkPT1udWxsfHx0aGlzLmNoaWxkLmdldE5vZGVzKCkubGVuZ3RoPT0wKSYmKHRoaXMubW92ZUJ5KHRoaXMuZGlzcGxhY2VtZW50WCx0aGlzLmRpc3BsYWNlbWVudFkpLHAudG90YWxEaXNwbGFjZW1lbnQrPU1hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WCkrTWF0aC5hYnModGhpcy5kaXNwbGFjZW1lbnRZKSksdGhpcy5zcHJpbmdGb3JjZVg9MCx0aGlzLnNwcmluZ0ZvcmNlWT0wLHRoaXMucmVwdWxzaW9uRm9yY2VYPTAsdGhpcy5yZXB1bHNpb25Gb3JjZVk9MCx0aGlzLmdyYXZpdGF0aW9uRm9yY2VYPTAsdGhpcy5ncmF2aXRhdGlvbkZvcmNlWT0wLHRoaXMuZGlzcGxhY2VtZW50WD0wLHRoaXMuZGlzcGxhY2VtZW50WT0wfSxmLnByb3RvdHlwZS5zZXRQcmVkMT1mdW5jdGlvbihwKXt0aGlzLnByZWQxPXB9LGYucHJvdG90eXBlLmdldFByZWQxPWZ1bmN0aW9uKCl7cmV0dXJuIHByZWQxfSxmLnByb3RvdHlwZS5nZXRQcmVkMj1mdW5jdGlvbigpe3JldHVybiBwcmVkMn0sZi5wcm90b3R5cGUuc2V0TmV4dD1mdW5jdGlvbihwKXt0aGlzLm5leHQ9cH0sZi5wcm90b3R5cGUuZ2V0TmV4dD1mdW5jdGlvbigpe3JldHVybiBuZXh0fSxmLnByb3RvdHlwZS5zZXRQcm9jZXNzZWQ9ZnVuY3Rpb24ocCl7dGhpcy5wcm9jZXNzZWQ9cH0sZi5wcm90b3R5cGUuaXNQcm9jZXNzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gcHJvY2Vzc2VkfSxhLmV4cG9ydHM9Zn0sOTAyOihhLHMsbCk9PntmdW5jdGlvbiB1KGcpe2lmKEFycmF5LmlzQXJyYXkoZykpe2Zvcih2YXIgeT0wLHY9QXJyYXkoZy5sZW5ndGgpO3k8Zy5sZW5ndGg7eSsrKXZbeV09Z1t5XTtyZXR1cm4gdn1lbHNlIHJldHVybiBBcnJheS5mcm9tKGcpfW8odSwiX3RvQ29uc3VtYWJsZUFycmF5Iik7dmFyIGg9bCg4MDYpLGY9bCg1NTEpLkxpbmtlZExpc3QsZD1sKDU1MSkuTWF0cml4LHA9bCg1NTEpLlNWRDtmdW5jdGlvbiBtKCl7fW8obSwiQ29uc3RyYWludEhhbmRsZXIiKSxtLmhhbmRsZUNvbnN0cmFpbnRzPWZ1bmN0aW9uKGcpe3ZhciB5PXt9O3kuZml4ZWROb2RlQ29uc3RyYWludD1nLmNvbnN0cmFpbnRzLmZpeGVkTm9kZUNvbnN0cmFpbnQseS5hbGlnbm1lbnRDb25zdHJhaW50PWcuY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludCx5LnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludD1nLmNvbnN0cmFpbnRzLnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludDtmb3IodmFyIHY9bmV3IE1hcCx4PW5ldyBNYXAsYj1bXSx3PVtdLF89Zy5nZXRBbGxOb2RlcygpLFQ9MCxFPTA7RTxfLmxlbmd0aDtFKyspe3ZhciBMPV9bRV07TC5nZXRDaGlsZCgpPT1udWxsJiYoeC5zZXQoTC5pZCxUKyspLGIucHVzaChMLmdldENlbnRlclgoKSksdy5wdXNoKEwuZ2V0Q2VudGVyWSgpKSx2LnNldChMLmlkLEwpKX15LnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludCYmeS5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQuZm9yRWFjaChmdW5jdGlvbih2ZSl7IXZlLmdhcCYmdmUuZ2FwIT0wJiYodmUubGVmdD92ZS5nYXA9aC5ERUZBVUxUX0VER0VfTEVOR1RIK3YuZ2V0KHZlLmxlZnQpLmdldFdpZHRoKCkvMit2LmdldCh2ZS5yaWdodCkuZ2V0V2lkdGgoKS8yOnZlLmdhcD1oLkRFRkFVTFRfRURHRV9MRU5HVEgrdi5nZXQodmUudG9wKS5nZXRIZWlnaHQoKS8yK3YuZ2V0KHZlLmJvdHRvbSkuZ2V0SGVpZ2h0KCkvMil9KTt2YXIgUz1vKGZ1bmN0aW9uKFUsVGUpe3JldHVybnt4OlUueC1UZS54LHk6VS55LVRlLnl9fSwiY2FsY3VsYXRlUG9zaXRpb25EaWZmIiksQT1vKGZ1bmN0aW9uKFUpe3ZhciBUZT0wLGllPTA7cmV0dXJuIFUuZm9yRWFjaChmdW5jdGlvbihFZSl7VGUrPWJbeC5nZXQoRWUpXSxpZSs9d1t4LmdldChFZSldfSkse3g6VGUvVS5zaXplLHk6aWUvVS5zaXplfX0sImNhbGN1bGF0ZUF2Z1Bvc2l0aW9uIiksST1vKGZ1bmN0aW9uKFUsVGUsaWUsRWUsQWUpe2Z1bmN0aW9uIEdlKHZ0LHJ0KXt2YXIgeXQ9bmV3IFNldCh2dCksVWU9ITAsdHQ9ITEsaHQ9dm9pZCAwO3RyeXtmb3IodmFyIEV0PXJ0W1N5bWJvbC5pdGVyYXRvcl0oKSxlcjshKFVlPShlcj1FdC5uZXh0KCkpLmRvbmUpO1VlPSEwKXt2YXIgZHQ9ZXIudmFsdWU7eXQuYWRkKGR0KX19Y2F0Y2goSmUpe3R0PSEwLGh0PUplfWZpbmFsbHl7dHJ5eyFVZSYmRXQucmV0dXJuJiZFdC5yZXR1cm4oKX1maW5hbGx5e2lmKHR0KXRocm93IGh0fX1yZXR1cm4geXR9byhHZSwic2V0VW5pb24iKTt2YXIgQmU9bmV3IE1hcDtVLmZvckVhY2goZnVuY3Rpb24odnQscnQpe0JlLnNldChydCwwKX0pLFUuZm9yRWFjaChmdW5jdGlvbih2dCxydCl7dnQuZm9yRWFjaChmdW5jdGlvbih5dCl7QmUuc2V0KHl0LmlkLEJlLmdldCh5dC5pZCkrMSl9KX0pO3ZhciBtZT1uZXcgTWFwLEhlPW5ldyBNYXAsT2U9bmV3IGY7QmUuZm9yRWFjaChmdW5jdGlvbih2dCxydCl7dnQ9PTA/KE9lLnB1c2gocnQpLGllfHwoVGU9PSJob3Jpem9udGFsIj9tZS5zZXQocnQseC5oYXMocnQpP2JbeC5nZXQocnQpXTpFZS5nZXQocnQpKTptZS5zZXQocnQseC5oYXMocnQpP3dbeC5nZXQocnQpXTpFZS5nZXQocnQpKSkpOm1lLnNldChydCxOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpLGllJiZIZS5zZXQocnQsbmV3IFNldChbcnRdKSl9KSxpZSYmQWUuZm9yRWFjaChmdW5jdGlvbih2dCl7dmFyIHJ0PVtdO2lmKHZ0LmZvckVhY2goZnVuY3Rpb24odHQpe2llLmhhcyh0dCkmJnJ0LnB1c2godHQpfSkscnQubGVuZ3RoPjApe3ZhciB5dD0wO3J0LmZvckVhY2goZnVuY3Rpb24odHQpe1RlPT0iaG9yaXpvbnRhbCI/KG1lLnNldCh0dCx4Lmhhcyh0dCk/Ylt4LmdldCh0dCldOkVlLmdldCh0dCkpLHl0Kz1tZS5nZXQodHQpKToobWUuc2V0KHR0LHguaGFzKHR0KT93W3guZ2V0KHR0KV06RWUuZ2V0KHR0KSkseXQrPW1lLmdldCh0dCkpfSkseXQ9eXQvcnQubGVuZ3RoLHZ0LmZvckVhY2goZnVuY3Rpb24odHQpe2llLmhhcyh0dCl8fG1lLnNldCh0dCx5dCl9KX1lbHNle3ZhciBVZT0wO3Z0LmZvckVhY2goZnVuY3Rpb24odHQpe1RlPT0iaG9yaXpvbnRhbCI/VWUrPXguaGFzKHR0KT9iW3guZ2V0KHR0KV06RWUuZ2V0KHR0KTpVZSs9eC5oYXModHQpP3dbeC5nZXQodHQpXTpFZS5nZXQodHQpfSksVWU9VWUvdnQubGVuZ3RoLHZ0LmZvckVhY2goZnVuY3Rpb24odHQpe21lLnNldCh0dCxVZSl9KX19KTtmb3IodmFyIGV0PW8oZnVuY3Rpb24oKXt2YXIgcnQ9T2Uuc2hpZnQoKSx5dD1VLmdldChydCk7eXQuZm9yRWFjaChmdW5jdGlvbihVZSl7aWYobWUuZ2V0KFVlLmlkKTxtZS5nZXQocnQpK1VlLmdhcClpZihpZSYmaWUuaGFzKFVlLmlkKSl7dmFyIHR0PXZvaWQgMDtpZihUZT09Imhvcml6b250YWwiP3R0PXguaGFzKFVlLmlkKT9iW3guZ2V0KFVlLmlkKV06RWUuZ2V0KFVlLmlkKTp0dD14LmhhcyhVZS5pZCk/d1t4LmdldChVZS5pZCldOkVlLmdldChVZS5pZCksbWUuc2V0KFVlLmlkLHR0KSx0dDxtZS5nZXQocnQpK1VlLmdhcCl7dmFyIGh0PW1lLmdldChydCkrVWUuZ2FwLXR0O0hlLmdldChydCkuZm9yRWFjaChmdW5jdGlvbihFdCl7bWUuc2V0KEV0LG1lLmdldChFdCktaHQpfSl9fWVsc2UgbWUuc2V0KFVlLmlkLG1lLmdldChydCkrVWUuZ2FwKTtCZS5zZXQoVWUuaWQsQmUuZ2V0KFVlLmlkKS0xKSxCZS5nZXQoVWUuaWQpPT0wJiZPZS5wdXNoKFVlLmlkKSxpZSYmSGUuc2V0KFVlLmlkLEdlKEhlLmdldChydCksSGUuZ2V0KFVlLmlkKSkpfSl9LCJfbG9vcCIpO09lLmxlbmd0aCE9MDspZXQoKTtpZihpZSl7dmFyIGJ0PW5ldyBTZXQ7VS5mb3JFYWNoKGZ1bmN0aW9uKHZ0LHJ0KXt2dC5sZW5ndGg9PTAmJmJ0LmFkZChydCl9KTt2YXIga3Q9W107SGUuZm9yRWFjaChmdW5jdGlvbih2dCxydCl7aWYoYnQuaGFzKHJ0KSl7dmFyIHl0PSExLFVlPSEwLHR0PSExLGh0PXZvaWQgMDt0cnl7Zm9yKHZhciBFdD12dFtTeW1ib2wuaXRlcmF0b3JdKCksZXI7IShVZT0oZXI9RXQubmV4dCgpKS5kb25lKTtVZT0hMCl7dmFyIGR0PWVyLnZhbHVlO2llLmhhcyhkdCkmJih5dD0hMCl9fWNhdGNoKEN0KXt0dD0hMCxodD1DdH1maW5hbGx5e3RyeXshVWUmJkV0LnJldHVybiYmRXQucmV0dXJuKCl9ZmluYWxseXtpZih0dCl0aHJvdyBodH19aWYoIXl0KXt2YXIgSmU9ITEsY3Q9dm9pZCAwO2t0LmZvckVhY2goZnVuY3Rpb24oQ3QscHQpe0N0LmhhcyhbXS5jb25jYXQodSh2dCkpWzBdKSYmKEplPSEwLGN0PXB0KX0pLEplP3Z0LmZvckVhY2goZnVuY3Rpb24oQ3Qpe2t0W2N0XS5hZGQoQ3QpfSk6a3QucHVzaChuZXcgU2V0KHZ0KSl9fX0pLGt0LmZvckVhY2goZnVuY3Rpb24odnQscnQpe3ZhciB5dD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksVWU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHR0PU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxodD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksRXQ9ITAsZXI9ITEsZHQ9dm9pZCAwO3RyeXtmb3IodmFyIEplPXZ0W1N5bWJvbC5pdGVyYXRvcl0oKSxjdDshKEV0PShjdD1KZS5uZXh0KCkpLmRvbmUpO0V0PSEwKXt2YXIgQ3Q9Y3QudmFsdWUscHQ9dm9pZCAwO1RlPT0iaG9yaXpvbnRhbCI/cHQ9eC5oYXMoQ3QpP2JbeC5nZXQoQ3QpXTpFZS5nZXQoQ3QpOnB0PXguaGFzKEN0KT93W3guZ2V0KEN0KV06RWUuZ2V0KEN0KTt2YXIgQnQ9bWUuZ2V0KEN0KTtwdDx5dCYmKHl0PXB0KSxwdD50dCYmKHR0PXB0KSxCdDxVZSYmKFVlPUJ0KSxCdD5odCYmKGh0PUJ0KX19Y2F0Y2goT24pe2VyPSEwLGR0PU9ufWZpbmFsbHl7dHJ5eyFFdCYmSmUucmV0dXJuJiZKZS5yZXR1cm4oKX1maW5hbGx5e2lmKGVyKXRocm93IGR0fX12YXIgVHI9KHl0K3R0KS8yLShVZStodCkvMix5cj0hMCxvcj0hMSxsbj12b2lkIDA7dHJ5e2Zvcih2YXIgT3I9dnRbU3ltYm9sLml0ZXJhdG9yXSgpLGlpOyEoeXI9KGlpPU9yLm5leHQoKSkuZG9uZSk7eXI9ITApe3ZhciBtbj1paS52YWx1ZTttZS5zZXQobW4sbWUuZ2V0KG1uKStUcil9fWNhdGNoKE9uKXtvcj0hMCxsbj1Pbn1maW5hbGx5e3RyeXsheXImJk9yLnJldHVybiYmT3IucmV0dXJuKCl9ZmluYWxseXtpZihvcil0aHJvdyBsbn19fSl9cmV0dXJuIG1lfSwiZmluZEFwcHJvcHJpYXRlUG9zaXRpb25Gb3JSZWxhdGl2ZVBsYWNlbWVudCIpLEQ9byhmdW5jdGlvbihVKXt2YXIgVGU9MCxpZT0wLEVlPTAsQWU9MDtpZihVLmZvckVhY2goZnVuY3Rpb24oSGUpe0hlLmxlZnQ/Ylt4LmdldChIZS5sZWZ0KV0tYlt4LmdldChIZS5yaWdodCldPj0wP1RlKys6aWUrKzp3W3guZ2V0KEhlLnRvcCldLXdbeC5nZXQoSGUuYm90dG9tKV0+PTA/RWUrKzpBZSsrfSksVGU+aWUmJkVlPkFlKWZvcih2YXIgR2U9MDtHZTx4LnNpemU7R2UrKyliW0dlXT0tMSpiW0dlXSx3W0dlXT0tMSp3W0dlXTtlbHNlIGlmKFRlPmllKWZvcih2YXIgQmU9MDtCZTx4LnNpemU7QmUrKyliW0JlXT0tMSpiW0JlXTtlbHNlIGlmKEVlPkFlKWZvcih2YXIgbWU9MDttZTx4LnNpemU7bWUrKyl3W21lXT0tMSp3W21lXX0sImFwcGx5UmVmbGVjdGlvbkZvclJlbGF0aXZlUGxhY2VtZW50Iiksaz1vKGZ1bmN0aW9uKFUpe3ZhciBUZT1bXSxpZT1uZXcgZixFZT1uZXcgU2V0LEFlPTA7cmV0dXJuIFUuZm9yRWFjaChmdW5jdGlvbihHZSxCZSl7aWYoIUVlLmhhcyhCZSkpe1RlW0FlXT1bXTt2YXIgbWU9QmU7Zm9yKGllLnB1c2gobWUpLEVlLmFkZChtZSksVGVbQWVdLnB1c2gobWUpO2llLmxlbmd0aCE9MDspe21lPWllLnNoaWZ0KCk7dmFyIEhlPVUuZ2V0KG1lKTtIZS5mb3JFYWNoKGZ1bmN0aW9uKE9lKXtFZS5oYXMoT2UuaWQpfHwoaWUucHVzaChPZS5pZCksRWUuYWRkKE9lLmlkKSxUZVtBZV0ucHVzaChPZS5pZCkpfSl9QWUrK319KSxUZX0sImZpbmRDb21wb25lbnRzIiksUj1vKGZ1bmN0aW9uKFUpe3ZhciBUZT1uZXcgTWFwO3JldHVybiBVLmZvckVhY2goZnVuY3Rpb24oaWUsRWUpe1RlLnNldChFZSxbXSl9KSxVLmZvckVhY2goZnVuY3Rpb24oaWUsRWUpe2llLmZvckVhY2goZnVuY3Rpb24oQWUpe1RlLmdldChFZSkucHVzaChBZSksVGUuZ2V0KEFlLmlkKS5wdXNoKHtpZDpFZSxnYXA6QWUuZ2FwLGRpcmVjdGlvbjpBZS5kaXJlY3Rpb259KX0pfSksVGV9LCJkYWdUb1VuZGlyZWN0ZWQiKSxDPW8oZnVuY3Rpb24oVSl7dmFyIFRlPW5ldyBNYXA7cmV0dXJuIFUuZm9yRWFjaChmdW5jdGlvbihpZSxFZSl7VGUuc2V0KEVlLFtdKX0pLFUuZm9yRWFjaChmdW5jdGlvbihpZSxFZSl7aWUuZm9yRWFjaChmdW5jdGlvbihBZSl7VGUuZ2V0KEFlLmlkKS5wdXNoKHtpZDpFZSxnYXA6QWUuZ2FwLGRpcmVjdGlvbjpBZS5kaXJlY3Rpb259KX0pfSksVGV9LCJkYWdUb1JldmVyc2VkIiksTz1bXSxOPVtdLFA9ITEsRj0hMSxCPW5ldyBTZXQsRz1uZXcgTWFwLHo9bmV3IE1hcCxXPVtdO2lmKHkuZml4ZWROb2RlQ29uc3RyYWludCYmeS5maXhlZE5vZGVDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24odmUpe0IuYWRkKHZlLm5vZGVJZCl9KSx5LnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludCYmKHkucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24odmUpe3ZlLmxlZnQ/KEcuaGFzKHZlLmxlZnQpP0cuZ2V0KHZlLmxlZnQpLnB1c2goe2lkOnZlLnJpZ2h0LGdhcDp2ZS5nYXAsZGlyZWN0aW9uOiJob3Jpem9udGFsIn0pOkcuc2V0KHZlLmxlZnQsW3tpZDp2ZS5yaWdodCxnYXA6dmUuZ2FwLGRpcmVjdGlvbjoiaG9yaXpvbnRhbCJ9XSksRy5oYXModmUucmlnaHQpfHxHLnNldCh2ZS5yaWdodCxbXSkpOihHLmhhcyh2ZS50b3ApP0cuZ2V0KHZlLnRvcCkucHVzaCh7aWQ6dmUuYm90dG9tLGdhcDp2ZS5nYXAsZGlyZWN0aW9uOiJ2ZXJ0aWNhbCJ9KTpHLnNldCh2ZS50b3AsW3tpZDp2ZS5ib3R0b20sZ2FwOnZlLmdhcCxkaXJlY3Rpb246InZlcnRpY2FsIn1dKSxHLmhhcyh2ZS5ib3R0b20pfHxHLnNldCh2ZS5ib3R0b20sW10pKX0pLHo9UihHKSxXPWsoeikpLGguVFJBTlNGT1JNX09OX0NPTlNUUkFJTlRfSEFORExJTkcpe2lmKHkuZml4ZWROb2RlQ29uc3RyYWludCYmeS5maXhlZE5vZGVDb25zdHJhaW50Lmxlbmd0aD4xKXkuZml4ZWROb2RlQ29uc3RyYWludC5mb3JFYWNoKGZ1bmN0aW9uKHZlLFUpe09bVV09W3ZlLnBvc2l0aW9uLngsdmUucG9zaXRpb24ueV0sTltVXT1bYlt4LmdldCh2ZS5ub2RlSWQpXSx3W3guZ2V0KHZlLm5vZGVJZCldXX0pLFA9ITA7ZWxzZSBpZih5LmFsaWdubWVudENvbnN0cmFpbnQpKGZ1bmN0aW9uKCl7dmFyIHZlPTA7aWYoeS5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsKXtmb3IodmFyIFU9eS5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsLFRlPW8oZnVuY3Rpb24obWUpe3ZhciBIZT1uZXcgU2V0O1VbbWVdLmZvckVhY2goZnVuY3Rpb24oYnQpe0hlLmFkZChidCl9KTt2YXIgT2U9bmV3IFNldChbXS5jb25jYXQodShIZSkpLmZpbHRlcihmdW5jdGlvbihidCl7cmV0dXJuIEIuaGFzKGJ0KX0pKSxldD12b2lkIDA7T2Uuc2l6ZT4wP2V0PWJbeC5nZXQoT2UudmFsdWVzKCkubmV4dCgpLnZhbHVlKV06ZXQ9QShIZSkueCxVW21lXS5mb3JFYWNoKGZ1bmN0aW9uKGJ0KXtPW3ZlXT1bZXQsd1t4LmdldChidCldXSxOW3ZlXT1bYlt4LmdldChidCldLHdbeC5nZXQoYnQpXV0sdmUrK30pfSwiX2xvb3AyIiksaWU9MDtpZTxVLmxlbmd0aDtpZSsrKVRlKGllKTtQPSEwfWlmKHkuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsKXtmb3IodmFyIEVlPXkuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsLEFlPW8oZnVuY3Rpb24obWUpe3ZhciBIZT1uZXcgU2V0O0VlW21lXS5mb3JFYWNoKGZ1bmN0aW9uKGJ0KXtIZS5hZGQoYnQpfSk7dmFyIE9lPW5ldyBTZXQoW10uY29uY2F0KHUoSGUpKS5maWx0ZXIoZnVuY3Rpb24oYnQpe3JldHVybiBCLmhhcyhidCl9KSksZXQ9dm9pZCAwO09lLnNpemU+MD9ldD1iW3guZ2V0KE9lLnZhbHVlcygpLm5leHQoKS52YWx1ZSldOmV0PUEoSGUpLnksRWVbbWVdLmZvckVhY2goZnVuY3Rpb24oYnQpe09bdmVdPVtiW3guZ2V0KGJ0KV0sZXRdLE5bdmVdPVtiW3guZ2V0KGJ0KV0sd1t4LmdldChidCldXSx2ZSsrfSl9LCJfbG9vcDMiKSxHZT0wO0dlPEVlLmxlbmd0aDtHZSsrKUFlKEdlKTtQPSEwfXkucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50JiYoRj0hMCl9KSgpO2Vsc2UgaWYoeS5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQpe2Zvcih2YXIgWj0wLGo9MCxvZT0wO29lPFcubGVuZ3RoO29lKyspV1tvZV0ubGVuZ3RoPlomJihaPVdbb2VdLmxlbmd0aCxqPW9lKTtpZihaPHouc2l6ZS8yKUQoeS5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQpLFA9ITEsRj0hMTtlbHNle3ZhciBLPW5ldyBNYXAsZWU9bmV3IE1hcCxKPVtdO1dbal0uZm9yRWFjaChmdW5jdGlvbih2ZSl7Ry5nZXQodmUpLmZvckVhY2goZnVuY3Rpb24oVSl7VS5kaXJlY3Rpb249PSJob3Jpem9udGFsIj8oSy5oYXModmUpP0suZ2V0KHZlKS5wdXNoKFUpOksuc2V0KHZlLFtVXSksSy5oYXMoVS5pZCl8fEsuc2V0KFUuaWQsW10pLEoucHVzaCh7bGVmdDp2ZSxyaWdodDpVLmlkfSkpOihlZS5oYXModmUpP2VlLmdldCh2ZSkucHVzaChVKTplZS5zZXQodmUsW1VdKSxlZS5oYXMoVS5pZCl8fGVlLnNldChVLmlkLFtdKSxKLnB1c2goe3RvcDp2ZSxib3R0b206VS5pZH0pKX0pfSksRChKKSxGPSExO3ZhciBIPUkoSywiaG9yaXpvbnRhbCIpLHE9SShlZSwidmVydGljYWwiKTtXW2pdLmZvckVhY2goZnVuY3Rpb24odmUsVSl7TltVXT1bYlt4LmdldCh2ZSldLHdbeC5nZXQodmUpXV0sT1tVXT1bXSxILmhhcyh2ZSk/T1tVXVswXT1ILmdldCh2ZSk6T1tVXVswXT1iW3guZ2V0KHZlKV0scS5oYXModmUpP09bVV1bMV09cS5nZXQodmUpOk9bVV1bMV09d1t4LmdldCh2ZSldfSksUD0hMH19aWYoUCl7Zm9yKHZhciBRPXZvaWQgMCxhZT1kLnRyYW5zcG9zZShPKSx1ZT1kLnRyYW5zcG9zZShOKSxjZT0wO2NlPGFlLmxlbmd0aDtjZSsrKWFlW2NlXT1kLm11bHRHYW1tYShhZVtjZV0pLHVlW2NlXT1kLm11bHRHYW1tYSh1ZVtjZV0pO3ZhciB0ZT1kLm11bHRNYXQoYWUsZC50cmFuc3Bvc2UodWUpKSxOZT1wLnN2ZCh0ZSk7UT1kLm11bHRNYXQoTmUuVixkLnRyYW5zcG9zZShOZS5VKSk7Zm9yKHZhciBzZT0wO3NlPHguc2l6ZTtzZSsrKXt2YXIga2U9W2Jbc2VdLHdbc2VdXSxSZT1bUVswXVswXSxRWzFdWzBdXSxDZT1bUVswXVsxXSxRWzFdWzFdXTtiW3NlXT1kLmRvdFByb2R1Y3Qoa2UsUmUpLHdbc2VdPWQuZG90UHJvZHVjdChrZSxDZSl9RiYmRCh5LnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludCl9fWlmKGguRU5GT1JDRV9DT05TVFJBSU5UUyl7aWYoeS5maXhlZE5vZGVDb25zdHJhaW50JiZ5LmZpeGVkTm9kZUNvbnN0cmFpbnQubGVuZ3RoPjApe3ZhciBQZT17eDowLHk6MH07eS5maXhlZE5vZGVDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24odmUsVSl7dmFyIFRlPXt4OmJbeC5nZXQodmUubm9kZUlkKV0seTp3W3guZ2V0KHZlLm5vZGVJZCldfSxpZT12ZS5wb3NpdGlvbixFZT1TKGllLFRlKTtQZS54Kz1FZS54LFBlLnkrPUVlLnl9KSxQZS54Lz15LmZpeGVkTm9kZUNvbnN0cmFpbnQubGVuZ3RoLFBlLnkvPXkuZml4ZWROb2RlQ29uc3RyYWludC5sZW5ndGgsYi5mb3JFYWNoKGZ1bmN0aW9uKHZlLFUpe2JbVV0rPVBlLnh9KSx3LmZvckVhY2goZnVuY3Rpb24odmUsVSl7d1tVXSs9UGUueX0pLHkuZml4ZWROb2RlQ29uc3RyYWludC5mb3JFYWNoKGZ1bmN0aW9uKHZlKXtiW3guZ2V0KHZlLm5vZGVJZCldPXZlLnBvc2l0aW9uLngsd1t4LmdldCh2ZS5ub2RlSWQpXT12ZS5wb3NpdGlvbi55fSl9aWYoeS5hbGlnbm1lbnRDb25zdHJhaW50KXtpZih5LmFsaWdubWVudENvbnN0cmFpbnQudmVydGljYWwpZm9yKHZhciBJZT15LmFsaWdubWVudENvbnN0cmFpbnQudmVydGljYWwsJGU9byhmdW5jdGlvbihVKXt2YXIgVGU9bmV3IFNldDtJZVtVXS5mb3JFYWNoKGZ1bmN0aW9uKEFlKXtUZS5hZGQoQWUpfSk7dmFyIGllPW5ldyBTZXQoW10uY29uY2F0KHUoVGUpKS5maWx0ZXIoZnVuY3Rpb24oQWUpe3JldHVybiBCLmhhcyhBZSl9KSksRWU9dm9pZCAwO2llLnNpemU+MD9FZT1iW3guZ2V0KGllLnZhbHVlcygpLm5leHQoKS52YWx1ZSldOkVlPUEoVGUpLngsVGUuZm9yRWFjaChmdW5jdGlvbihBZSl7Qi5oYXMoQWUpfHwoYlt4LmdldChBZSldPUVlKX0pfSwiX2xvb3A0IikseWU9MDt5ZTxJZS5sZW5ndGg7eWUrKykkZSh5ZSk7aWYoeS5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWwpZm9yKHZhciBYPXkuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsLGZlPW8oZnVuY3Rpb24oVSl7dmFyIFRlPW5ldyBTZXQ7WFtVXS5mb3JFYWNoKGZ1bmN0aW9uKEFlKXtUZS5hZGQoQWUpfSk7dmFyIGllPW5ldyBTZXQoW10uY29uY2F0KHUoVGUpKS5maWx0ZXIoZnVuY3Rpb24oQWUpe3JldHVybiBCLmhhcyhBZSl9KSksRWU9dm9pZCAwO2llLnNpemU+MD9FZT13W3guZ2V0KGllLnZhbHVlcygpLm5leHQoKS52YWx1ZSldOkVlPUEoVGUpLnksVGUuZm9yRWFjaChmdW5jdGlvbihBZSl7Qi5oYXMoQWUpfHwod1t4LmdldChBZSldPUVlKX0pfSwiX2xvb3A1IiksaGU9MDtoZTxYLmxlbmd0aDtoZSsrKWZlKGhlKX15LnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludCYmZnVuY3Rpb24oKXt2YXIgdmU9bmV3IE1hcCxVPW5ldyBNYXAsVGU9bmV3IE1hcCxpZT1uZXcgTWFwLEVlPW5ldyBNYXAsQWU9bmV3IE1hcCxHZT1uZXcgU2V0LEJlPW5ldyBTZXQ7aWYoQi5mb3JFYWNoKGZ1bmN0aW9uKHd0KXtHZS5hZGQod3QpLEJlLmFkZCh3dCl9KSx5LmFsaWdubWVudENvbnN0cmFpbnQpe2lmKHkuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbClmb3IodmFyIG1lPXkuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbCxIZT1vKGZ1bmN0aW9uKFdlKXtUZS5zZXQoImR1bW15IitXZSxbXSksbWVbV2VdLmZvckVhY2goZnVuY3Rpb24oRnQpe3ZlLnNldChGdCwiZHVtbXkiK1dlKSxUZS5nZXQoImR1bW15IitXZSkucHVzaChGdCksQi5oYXMoRnQpJiZHZS5hZGQoImR1bW15IitXZSl9KSxFZS5zZXQoImR1bW15IitXZSxiW3guZ2V0KG1lW1dlXVswXSldKX0sIl9sb29wNiIpLE9lPTA7T2U8bWUubGVuZ3RoO09lKyspSGUoT2UpO2lmKHkuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsKWZvcih2YXIgZXQ9eS5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWwsYnQ9byhmdW5jdGlvbihXZSl7aWUuc2V0KCJkdW1teSIrV2UsW10pLGV0W1dlXS5mb3JFYWNoKGZ1bmN0aW9uKEZ0KXtVLnNldChGdCwiZHVtbXkiK1dlKSxpZS5nZXQoImR1bW15IitXZSkucHVzaChGdCksQi5oYXMoRnQpJiZCZS5hZGQoImR1bW15IitXZSl9KSxBZS5zZXQoImR1bW15IitXZSx3W3guZ2V0KGV0W1dlXVswXSldKX0sIl9sb29wNyIpLGt0PTA7a3Q8ZXQubGVuZ3RoO2t0KyspYnQoa3QpfXZhciB2dD1uZXcgTWFwLHJ0PW5ldyBNYXAseXQ9byhmdW5jdGlvbihXZSl7Ry5nZXQoV2UpLmZvckVhY2goZnVuY3Rpb24oRnQpe3ZhciBkZT12b2lkIDAsZ249dm9pZCAwO0Z0LmRpcmVjdGlvbj09Imhvcml6b250YWwiPyhkZT12ZS5nZXQoV2UpP3ZlLmdldChXZSk6V2UsdmUuZ2V0KEZ0LmlkKT9nbj17aWQ6dmUuZ2V0KEZ0LmlkKSxnYXA6RnQuZ2FwLGRpcmVjdGlvbjpGdC5kaXJlY3Rpb259OmduPUZ0LHZ0LmhhcyhkZSk/dnQuZ2V0KGRlKS5wdXNoKGduKTp2dC5zZXQoZGUsW2duXSksdnQuaGFzKGduLmlkKXx8dnQuc2V0KGduLmlkLFtdKSk6KGRlPVUuZ2V0KFdlKT9VLmdldChXZSk6V2UsVS5nZXQoRnQuaWQpP2duPXtpZDpVLmdldChGdC5pZCksZ2FwOkZ0LmdhcCxkaXJlY3Rpb246RnQuZGlyZWN0aW9ufTpnbj1GdCxydC5oYXMoZGUpP3J0LmdldChkZSkucHVzaChnbik6cnQuc2V0KGRlLFtnbl0pLHJ0Lmhhcyhnbi5pZCl8fHJ0LnNldChnbi5pZCxbXSkpfSl9LCJfbG9vcDgiKSxVZT0hMCx0dD0hMSxodD12b2lkIDA7dHJ5e2Zvcih2YXIgRXQ9Ry5rZXlzKClbU3ltYm9sLml0ZXJhdG9yXSgpLGVyOyEoVWU9KGVyPUV0Lm5leHQoKSkuZG9uZSk7VWU9ITApe3ZhciBkdD1lci52YWx1ZTt5dChkdCl9fWNhdGNoKHd0KXt0dD0hMCxodD13dH1maW5hbGx5e3RyeXshVWUmJkV0LnJldHVybiYmRXQucmV0dXJuKCl9ZmluYWxseXtpZih0dCl0aHJvdyBodH19dmFyIEplPVIodnQpLGN0PVIocnQpLEN0PWsoSmUpLHB0PWsoY3QpLEJ0PUModnQpLFRyPUMocnQpLHlyPVtdLG9yPVtdO0N0LmZvckVhY2goZnVuY3Rpb24od3QsV2Upe3lyW1dlXT1bXSx3dC5mb3JFYWNoKGZ1bmN0aW9uKEZ0KXtCdC5nZXQoRnQpLmxlbmd0aD09MCYmeXJbV2VdLnB1c2goRnQpfSl9KSxwdC5mb3JFYWNoKGZ1bmN0aW9uKHd0LFdlKXtvcltXZV09W10sd3QuZm9yRWFjaChmdW5jdGlvbihGdCl7VHIuZ2V0KEZ0KS5sZW5ndGg9PTAmJm9yW1dlXS5wdXNoKEZ0KX0pfSk7dmFyIGxuPUkodnQsImhvcml6b250YWwiLEdlLEVlLHlyKSxPcj1JKHJ0LCJ2ZXJ0aWNhbCIsQmUsQWUsb3IpLGlpPW8oZnVuY3Rpb24oV2Upe1RlLmdldChXZSk/VGUuZ2V0KFdlKS5mb3JFYWNoKGZ1bmN0aW9uKEZ0KXtiW3guZ2V0KEZ0KV09bG4uZ2V0KFdlKX0pOmJbeC5nZXQoV2UpXT1sbi5nZXQoV2UpfSwiX2xvb3A5IiksbW49ITAsT249ITEsX3I9dm9pZCAwO3RyeXtmb3IodmFyIG1pPWxuLmtleXMoKVtTeW1ib2wuaXRlcmF0b3JdKCksdnM7IShtbj0odnM9bWkubmV4dCgpKS5kb25lKTttbj0hMCl7dmFyIFBuPXZzLnZhbHVlO2lpKFBuKX19Y2F0Y2god3Qpe09uPSEwLF9yPXd0fWZpbmFsbHl7dHJ5eyFtbiYmbWkucmV0dXJuJiZtaS5yZXR1cm4oKX1maW5hbGx5e2lmKE9uKXRocm93IF9yfX12YXIgU289byhmdW5jdGlvbihXZSl7aWUuZ2V0KFdlKT9pZS5nZXQoV2UpLmZvckVhY2goZnVuY3Rpb24oRnQpe3dbeC5nZXQoRnQpXT1Pci5nZXQoV2UpfSk6d1t4LmdldChXZSldPU9yLmdldChXZSl9LCJfbG9vcDEwIiksZ2w9ITAsQm49ITEsa2k9dm9pZCAwO3RyeXtmb3IodmFyIEF0PU9yLmtleXMoKVtTeW1ib2wuaXRlcmF0b3JdKCksUHQ7IShnbD0oUHQ9QXQubmV4dCgpKS5kb25lKTtnbD0hMCl7dmFyIFBuPVB0LnZhbHVlO1NvKFBuKX19Y2F0Y2god3Qpe0JuPSEwLGtpPXd0fWZpbmFsbHl7dHJ5eyFnbCYmQXQucmV0dXJuJiZBdC5yZXR1cm4oKX1maW5hbGx5e2lmKEJuKXRocm93IGtpfX19KCl9Zm9yKHZhciBnZT0wO2dlPF8ubGVuZ3RoO2dlKyspe3ZhciBuZT1fW2dlXTtuZS5nZXRDaGlsZCgpPT1udWxsJiZuZS5zZXRDZW50ZXIoYlt4LmdldChuZS5pZCldLHdbeC5nZXQobmUuaWQpXSl9fSxhLmV4cG9ydHM9bX0sNTUxOmE9PnthLmV4cG9ydHM9dH19LHI9e307ZnVuY3Rpb24gbihhKXt2YXIgcz1yW2FdO2lmKHMhPT12b2lkIDApcmV0dXJuIHMuZXhwb3J0czt2YXIgbD1yW2FdPXtleHBvcnRzOnt9fTtyZXR1cm4gZVthXShsLGwuZXhwb3J0cyxuKSxsLmV4cG9ydHN9byhuLCJfX3dlYnBhY2tfcmVxdWlyZV9fIik7dmFyIGk9big0NSk7cmV0dXJuIGl9KSgpfSl9KTt2YXIgczJlPUVpKChPYixnRik9PnsidXNlIHN0cmljdCI7byhmdW5jdGlvbihlLHIpe3R5cGVvZiBPYj09Im9iamVjdCImJnR5cGVvZiBnRj09Im9iamVjdCI/Z0YuZXhwb3J0cz1yKG1GKCkpOnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKFsiY29zZS1iYXNlIl0scik6dHlwZW9mIE9iPT0ib2JqZWN0Ij9PYi5jeXRvc2NhcGVGY29zZT1yKG1GKCkpOmUuY3l0b3NjYXBlRmNvc2U9cihlLmNvc2VCYXNlKX0sIndlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIikoT2IsZnVuY3Rpb24odCl7cmV0dXJuKCgpPT57InVzZSBzdHJpY3QiO3ZhciBlPXs2NTg6YT0+e2EuZXhwb3J0cz1PYmplY3QuYXNzaWduIT1udWxsP09iamVjdC5hc3NpZ24uYmluZChPYmplY3QpOmZ1bmN0aW9uKHMpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLHU9QXJyYXkobD4xP2wtMTowKSxoPTE7aDxsO2grKyl1W2gtMV09YXJndW1lbnRzW2hdO3JldHVybiB1LmZvckVhY2goZnVuY3Rpb24oZil7T2JqZWN0LmtleXMoZikuZm9yRWFjaChmdW5jdGlvbihkKXtyZXR1cm4gc1tkXT1mW2RdfSl9KSxzfX0sNTQ4OihhLHMsbCk9Pnt2YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGQocCxtKXt2YXIgZz1bXSx5PSEwLHY9ITEseD12b2lkIDA7dHJ5e2Zvcih2YXIgYj1wW1N5bWJvbC5pdGVyYXRvcl0oKSx3OyEoeT0odz1iLm5leHQoKSkuZG9uZSkmJihnLnB1c2gody52YWx1ZSksIShtJiZnLmxlbmd0aD09PW0pKTt5PSEwKTt9Y2F0Y2goXyl7dj0hMCx4PV99ZmluYWxseXt0cnl7IXkmJmIucmV0dXJuJiZiLnJldHVybigpfWZpbmFsbHl7aWYodil0aHJvdyB4fX1yZXR1cm4gZ31yZXR1cm4gbyhkLCJzbGljZUl0ZXJhdG9yIiksZnVuY3Rpb24ocCxtKXtpZihBcnJheS5pc0FycmF5KHApKXJldHVybiBwO2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QocCkpcmV0dXJuIGQocCxtKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9fSgpLGg9bCgxNDApLmxheW91dEJhc2UuTGlua2VkTGlzdCxmPXt9O2YuZ2V0VG9wTW9zdE5vZGVzPWZ1bmN0aW9uKGQpe2Zvcih2YXIgcD17fSxtPTA7bTxkLmxlbmd0aDttKyspcFtkW21dLmlkKCldPSEwO3ZhciBnPWQuZmlsdGVyKGZ1bmN0aW9uKHksdil7dHlwZW9mIHk9PSJudW1iZXIiJiYoeT12KTtmb3IodmFyIHg9eS5wYXJlbnQoKVswXTt4IT1udWxsOyl7aWYocFt4LmlkKCldKXJldHVybiExO3g9eC5wYXJlbnQoKVswXX1yZXR1cm4hMH0pO3JldHVybiBnfSxmLmNvbm5lY3RDb21wb25lbnRzPWZ1bmN0aW9uKGQscCxtLGcpe3ZhciB5PW5ldyBoLHY9bmV3IFNldCx4PVtdLGI9dm9pZCAwLHc9dm9pZCAwLF89dm9pZCAwLFQ9ITEsRT0xLEw9W10sUz1bXSxBPW8oZnVuY3Rpb24oKXt2YXIgRD1kLmNvbGxlY3Rpb24oKTtTLnB1c2goRCk7dmFyIGs9bVswXSxSPWQuY29sbGVjdGlvbigpO1IubWVyZ2UoaykubWVyZ2Uoay5kZXNjZW5kYW50cygpLmludGVyc2VjdGlvbihwKSkseC5wdXNoKGspLFIuZm9yRWFjaChmdW5jdGlvbihOKXt5LnB1c2goTiksdi5hZGQoTiksRC5tZXJnZShOKX0pO2Zvcih2YXIgQz1vKGZ1bmN0aW9uKCl7az15LnNoaWZ0KCk7dmFyIFA9ZC5jb2xsZWN0aW9uKCk7ay5uZWlnaGJvcmhvb2QoKS5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24oeil7cC5pbnRlcnNlY3Rpb24oay5lZGdlc1dpdGgoeikpLmxlbmd0aD4wJiZQLm1lcmdlKHopfSk7Zm9yKHZhciBGPTA7RjxQLmxlbmd0aDtGKyspe3ZhciBCPVBbRl07aWYoYj1tLmludGVyc2VjdGlvbihCLnVuaW9uKEIuYW5jZXN0b3JzKCkpKSxiIT1udWxsJiYhdi5oYXMoYlswXSkpe3ZhciBHPWIudW5pb24oYi5kZXNjZW5kYW50cygpKTtHLmZvckVhY2goZnVuY3Rpb24oeil7eS5wdXNoKHopLHYuYWRkKHopLEQubWVyZ2UoeiksbS5oYXMoeikmJngucHVzaCh6KX0pfX19LCJfbG9vcDIiKTt5Lmxlbmd0aCE9MDspQygpO2lmKEQuZm9yRWFjaChmdW5jdGlvbihOKXtwLmludGVyc2VjdGlvbihOLmNvbm5lY3RlZEVkZ2VzKCkpLmZvckVhY2goZnVuY3Rpb24oUCl7RC5oYXMoUC5zb3VyY2UoKSkmJkQuaGFzKFAudGFyZ2V0KCkpJiZELm1lcmdlKFApfSl9KSx4Lmxlbmd0aD09bS5sZW5ndGgmJihUPSEwKSwhVHx8VCYmRT4xKXt3PXhbMF0sXz13LmNvbm5lY3RlZEVkZ2VzKCkubGVuZ3RoLHguZm9yRWFjaChmdW5jdGlvbihOKXtOLmNvbm5lY3RlZEVkZ2VzKCkubGVuZ3RoPF8mJihfPU4uY29ubmVjdGVkRWRnZXMoKS5sZW5ndGgsdz1OKX0pLEwucHVzaCh3LmlkKCkpO3ZhciBPPWQuY29sbGVjdGlvbigpO08ubWVyZ2UoeFswXSkseC5mb3JFYWNoKGZ1bmN0aW9uKE4pe08ubWVyZ2UoTil9KSx4PVtdLG09bS5kaWZmZXJlbmNlKE8pLEUrK319LCJfbG9vcCIpO2RvIEEoKTt3aGlsZSghVCk7cmV0dXJuIGcmJkwubGVuZ3RoPjAmJmcuc2V0KCJkdW1teSIrKGcuc2l6ZSsxKSxMKSxTfSxmLnJlbG9jYXRlQ29tcG9uZW50PWZ1bmN0aW9uKGQscCxtKXtpZighbS5maXhlZE5vZGVDb25zdHJhaW50KXt2YXIgZz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkseT1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksdj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkseD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7aWYobS5xdWFsaXR5PT0iZHJhZnQiKXt2YXIgYj0hMCx3PSExLF89dm9pZCAwO3RyeXtmb3IodmFyIFQ9cC5ub2RlSW5kZXhlc1tTeW1ib2wuaXRlcmF0b3JdKCksRTshKGI9KEU9VC5uZXh0KCkpLmRvbmUpO2I9ITApe3ZhciBMPUUudmFsdWUsUz11KEwsMiksQT1TWzBdLEk9U1sxXSxEPW0uY3kuZ2V0RWxlbWVudEJ5SWQoQSk7aWYoRCl7dmFyIGs9RC5ib3VuZGluZ0JveCgpLFI9cC54Q29vcmRzW0ldLWsudy8yLEM9cC54Q29vcmRzW0ldK2sudy8yLE89cC55Q29vcmRzW0ldLWsuaC8yLE49cC55Q29vcmRzW0ldK2suaC8yO1I8ZyYmKGc9UiksQz55JiYoeT1DKSxPPHYmJih2PU8pLE4+eCYmKHg9Til9fX1jYXRjaCh6KXt3PSEwLF89en1maW5hbGx5e3RyeXshYiYmVC5yZXR1cm4mJlQucmV0dXJuKCl9ZmluYWxseXtpZih3KXRocm93IF99fXZhciBQPWQueC0oeStnKS8yLEY9ZC55LSh4K3YpLzI7cC54Q29vcmRzPXAueENvb3Jkcy5tYXAoZnVuY3Rpb24oeil7cmV0dXJuIHorUH0pLHAueUNvb3Jkcz1wLnlDb29yZHMubWFwKGZ1bmN0aW9uKHope3JldHVybiB6K0Z9KX1lbHNle09iamVjdC5rZXlzKHApLmZvckVhY2goZnVuY3Rpb24oeil7dmFyIFc9cFt6XSxaPVcuZ2V0UmVjdCgpLngsaj1XLmdldFJlY3QoKS54K1cuZ2V0UmVjdCgpLndpZHRoLG9lPVcuZ2V0UmVjdCgpLnksSz1XLmdldFJlY3QoKS55K1cuZ2V0UmVjdCgpLmhlaWdodDtaPGcmJihnPVopLGo+eSYmKHk9aiksb2U8diYmKHY9b2UpLEs+eCYmKHg9Syl9KTt2YXIgQj1kLngtKHkrZykvMixHPWQueS0oeCt2KS8yO09iamVjdC5rZXlzKHApLmZvckVhY2goZnVuY3Rpb24oeil7dmFyIFc9cFt6XTtXLnNldENlbnRlcihXLmdldENlbnRlclgoKStCLFcuZ2V0Q2VudGVyWSgpK0cpfSl9fX0sZi5jYWxjQm91bmRpbmdCb3g9ZnVuY3Rpb24oZCxwLG0sZyl7Zm9yKHZhciB5PU51bWJlci5NQVhfU0FGRV9JTlRFR0VSLHY9TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIseD1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUixiPU51bWJlci5NSU5fU0FGRV9JTlRFR0VSLHc9dm9pZCAwLF89dm9pZCAwLFQ9dm9pZCAwLEU9dm9pZCAwLEw9ZC5kZXNjZW5kYW50cygpLm5vdCgiOnBhcmVudCIpLFM9TC5sZW5ndGgsQT0wO0E8UztBKyspe3ZhciBJPUxbQV07dz1wW2cuZ2V0KEkuaWQoKSldLUkud2lkdGgoKS8yLF89cFtnLmdldChJLmlkKCkpXStJLndpZHRoKCkvMixUPW1bZy5nZXQoSS5pZCgpKV0tSS5oZWlnaHQoKS8yLEU9bVtnLmdldChJLmlkKCkpXStJLmhlaWdodCgpLzIseT53JiYoeT13KSx2PF8mJih2PV8pLHg+VCYmKHg9VCksYjxFJiYoYj1FKX12YXIgRD17fTtyZXR1cm4gRC50b3BMZWZ0WD15LEQudG9wTGVmdFk9eCxELndpZHRoPXYteSxELmhlaWdodD1iLXgsRH0sZi5jYWxjUGFyZW50c1dpdGhvdXRDaGlsZHJlbj1mdW5jdGlvbihkLHApe3ZhciBtPWQuY29sbGVjdGlvbigpO3JldHVybiBwLm5vZGVzKCI6cGFyZW50IikuZm9yRWFjaChmdW5jdGlvbihnKXt2YXIgeT0hMTtnLmNoaWxkcmVuKCkuZm9yRWFjaChmdW5jdGlvbih2KXt2LmNzcygiZGlzcGxheSIpIT0ibm9uZSImJih5PSEwKX0pLHl8fG0ubWVyZ2UoZyl9KSxtfSxhLmV4cG9ydHM9Zn0sODE2OihhLHMsbCk9Pnt2YXIgdT1sKDU0OCksaD1sKDE0MCkuQ29TRUxheW91dCxmPWwoMTQwKS5Db1NFTm9kZSxkPWwoMTQwKS5sYXlvdXRCYXNlLlBvaW50RCxwPWwoMTQwKS5sYXlvdXRCYXNlLkRpbWVuc2lvbkQsbT1sKDE0MCkubGF5b3V0QmFzZS5MYXlvdXRDb25zdGFudHMsZz1sKDE0MCkubGF5b3V0QmFzZS5GRExheW91dENvbnN0YW50cyx5PWwoMTQwKS5Db1NFQ29uc3RhbnRzLHY9byhmdW5jdGlvbihiLHcpe3ZhciBfPWIuY3ksVD1iLmVsZXMsRT1ULm5vZGVzKCksTD1ULmVkZ2VzKCksUz12b2lkIDAsQT12b2lkIDAsST12b2lkIDAsRD17fTtiLnJhbmRvbWl6ZSYmKFM9dy5ub2RlSW5kZXhlcyxBPXcueENvb3JkcyxJPXcueUNvb3Jkcyk7dmFyIGs9byhmdW5jdGlvbih6KXtyZXR1cm4gdHlwZW9mIHo9PSJmdW5jdGlvbiJ9LCJpc0ZuIiksUj1vKGZ1bmN0aW9uKHosVyl7cmV0dXJuIGsoeik/eihXKTp6fSwib3B0Rm4iKSxDPXUuY2FsY1BhcmVudHNXaXRob3V0Q2hpbGRyZW4oXyxUKSxPPW8oZnVuY3Rpb24gRyh6LFcsWixqKXtmb3IodmFyIG9lPVcubGVuZ3RoLEs9MDtLPG9lO0srKyl7dmFyIGVlPVdbS10sSj1udWxsO2VlLmludGVyc2VjdGlvbihDKS5sZW5ndGg9PTAmJihKPWVlLmNoaWxkcmVuKCkpO3ZhciBIPXZvaWQgMCxxPWVlLmxheW91dERpbWVuc2lvbnMoe25vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczpqLm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsc30pO2lmKGVlLm91dGVyV2lkdGgoKSE9bnVsbCYmZWUub3V0ZXJIZWlnaHQoKSE9bnVsbClpZihqLnJhbmRvbWl6ZSlpZighZWUuaXNQYXJlbnQoKSlIPXouYWRkKG5ldyBmKFouZ3JhcGhNYW5hZ2VyLG5ldyBkKEFbUy5nZXQoZWUuaWQoKSldLXEudy8yLElbUy5nZXQoZWUuaWQoKSldLXEuaC8yKSxuZXcgcChwYXJzZUZsb2F0KHEudykscGFyc2VGbG9hdChxLmgpKSkpO2Vsc2V7dmFyIFE9dS5jYWxjQm91bmRpbmdCb3goZWUsQSxJLFMpO2VlLmludGVyc2VjdGlvbihDKS5sZW5ndGg9PTA/SD16LmFkZChuZXcgZihaLmdyYXBoTWFuYWdlcixuZXcgZChRLnRvcExlZnRYLFEudG9wTGVmdFkpLG5ldyBwKFEud2lkdGgsUS5oZWlnaHQpKSk6SD16LmFkZChuZXcgZihaLmdyYXBoTWFuYWdlcixuZXcgZChRLnRvcExlZnRYLFEudG9wTGVmdFkpLG5ldyBwKHBhcnNlRmxvYXQocS53KSxwYXJzZUZsb2F0KHEuaCkpKSl9ZWxzZSBIPXouYWRkKG5ldyBmKFouZ3JhcGhNYW5hZ2VyLG5ldyBkKGVlLnBvc2l0aW9uKCJ4IiktcS53LzIsZWUucG9zaXRpb24oInkiKS1xLmgvMiksbmV3IHAocGFyc2VGbG9hdChxLncpLHBhcnNlRmxvYXQocS5oKSkpKTtlbHNlIEg9ei5hZGQobmV3IGYodGhpcy5ncmFwaE1hbmFnZXIpKTtpZihILmlkPWVlLmRhdGEoImlkIiksSC5ub2RlUmVwdWxzaW9uPVIoai5ub2RlUmVwdWxzaW9uLGVlKSxILnBhZGRpbmdMZWZ0PXBhcnNlSW50KGVlLmNzcygicGFkZGluZyIpKSxILnBhZGRpbmdUb3A9cGFyc2VJbnQoZWUuY3NzKCJwYWRkaW5nIikpLEgucGFkZGluZ1JpZ2h0PXBhcnNlSW50KGVlLmNzcygicGFkZGluZyIpKSxILnBhZGRpbmdCb3R0b209cGFyc2VJbnQoZWUuY3NzKCJwYWRkaW5nIikpLGoubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzJiYoSC5sYWJlbFdpZHRoPWVlLmJvdW5kaW5nQm94KHtpbmNsdWRlTGFiZWxzOiEwLGluY2x1ZGVOb2RlczohMSxpbmNsdWRlT3ZlcmxheXM6ITF9KS53LEgubGFiZWxIZWlnaHQ9ZWUuYm91bmRpbmdCb3goe2luY2x1ZGVMYWJlbHM6ITAsaW5jbHVkZU5vZGVzOiExLGluY2x1ZGVPdmVybGF5czohMX0pLmgsSC5sYWJlbFBvc1ZlcnRpY2FsPWVlLmNzcygidGV4dC12YWxpZ24iKSxILmxhYmVsUG9zSG9yaXpvbnRhbD1lZS5jc3MoInRleHQtaGFsaWduIikpLERbZWUuZGF0YSgiaWQiKV09SCxpc05hTihILnJlY3QueCkmJihILnJlY3QueD0wKSxpc05hTihILnJlY3QueSkmJihILnJlY3QueT0wKSxKIT1udWxsJiZKLmxlbmd0aD4wKXt2YXIgYWU9dm9pZCAwO2FlPVouZ2V0R3JhcGhNYW5hZ2VyKCkuYWRkKFoubmV3R3JhcGgoKSxIKSxHKGFlLEosWixqKX19fSwicHJvY2Vzc0NoaWxkcmVuTGlzdCIpLE49byhmdW5jdGlvbih6LFcsWil7Zm9yKHZhciBqPTAsb2U9MCxLPTA7SzxaLmxlbmd0aDtLKyspe3ZhciBlZT1aW0tdLEo9RFtlZS5kYXRhKCJzb3VyY2UiKV0sSD1EW2VlLmRhdGEoInRhcmdldCIpXTtpZihKJiZIJiZKIT09SCYmSi5nZXRFZGdlc0JldHdlZW4oSCkubGVuZ3RoPT0wKXt2YXIgcT1XLmFkZCh6Lm5ld0VkZ2UoKSxKLEgpO3EuaWQ9ZWUuaWQoKSxxLmlkZWFsTGVuZ3RoPVIoYi5pZGVhbEVkZ2VMZW5ndGgsZWUpLHEuZWRnZUVsYXN0aWNpdHk9UihiLmVkZ2VFbGFzdGljaXR5LGVlKSxqKz1xLmlkZWFsTGVuZ3RoLG9lKyt9fWIuaWRlYWxFZGdlTGVuZ3RoIT1udWxsJiYob2U+MD95LkRFRkFVTFRfRURHRV9MRU5HVEg9Zy5ERUZBVUxUX0VER0VfTEVOR1RIPWovb2U6ayhiLmlkZWFsRWRnZUxlbmd0aCk/eS5ERUZBVUxUX0VER0VfTEVOR1RIPWcuREVGQVVMVF9FREdFX0xFTkdUSD01MDp5LkRFRkFVTFRfRURHRV9MRU5HVEg9Zy5ERUZBVUxUX0VER0VfTEVOR1RIPWIuaWRlYWxFZGdlTGVuZ3RoLHkuTUlOX1JFUFVMU0lPTl9ESVNUPWcuTUlOX1JFUFVMU0lPTl9ESVNUPWcuREVGQVVMVF9FREdFX0xFTkdUSC8xMCx5LkRFRkFVTFRfUkFESUFMX1NFUEFSQVRJT049Zy5ERUZBVUxUX0VER0VfTEVOR1RIKX0sInByb2Nlc3NFZGdlcyIpLFA9byhmdW5jdGlvbih6LFcpe1cuZml4ZWROb2RlQ29uc3RyYWludCYmKHouY29uc3RyYWludHMuZml4ZWROb2RlQ29uc3RyYWludD1XLmZpeGVkTm9kZUNvbnN0cmFpbnQpLFcuYWxpZ25tZW50Q29uc3RyYWludCYmKHouY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludD1XLmFsaWdubWVudENvbnN0cmFpbnQpLFcucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50JiYoei5jb25zdHJhaW50cy5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQ9Vy5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQpfSwicHJvY2Vzc0NvbnN0cmFpbnRzIik7Yi5uZXN0aW5nRmFjdG9yIT1udWxsJiYoeS5QRVJfTEVWRUxfSURFQUxfRURHRV9MRU5HVEhfRkFDVE9SPWcuUEVSX0xFVkVMX0lERUFMX0VER0VfTEVOR1RIX0ZBQ1RPUj1iLm5lc3RpbmdGYWN0b3IpLGIuZ3Jhdml0eSE9bnVsbCYmKHkuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RIPWcuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RIPWIuZ3Jhdml0eSksYi5udW1JdGVyIT1udWxsJiYoeS5NQVhfSVRFUkFUSU9OUz1nLk1BWF9JVEVSQVRJT05TPWIubnVtSXRlciksYi5ncmF2aXR5UmFuZ2UhPW51bGwmJih5LkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1I9Zy5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SPWIuZ3Jhdml0eVJhbmdlKSxiLmdyYXZpdHlDb21wb3VuZCE9bnVsbCYmKHkuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIPWcuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIPWIuZ3Jhdml0eUNvbXBvdW5kKSxiLmdyYXZpdHlSYW5nZUNvbXBvdW5kIT1udWxsJiYoeS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SPWcuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj1iLmdyYXZpdHlSYW5nZUNvbXBvdW5kKSxiLmluaXRpYWxFbmVyZ3lPbkluY3JlbWVudGFsIT1udWxsJiYoeS5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMPWcuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTD1iLmluaXRpYWxFbmVyZ3lPbkluY3JlbWVudGFsKSxiLnRpbGluZ0NvbXBhcmVCeSE9bnVsbCYmKHkuVElMSU5HX0NPTVBBUkVfQlk9Yi50aWxpbmdDb21wYXJlQnkpLGIucXVhbGl0eT09InByb29mIj9tLlFVQUxJVFk9MjptLlFVQUxJVFk9MCx5Lk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz1nLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz1tLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz1iLm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVscyx5LkRFRkFVTFRfSU5DUkVNRU5UQUw9Zy5ERUZBVUxUX0lOQ1JFTUVOVEFMPW0uREVGQVVMVF9JTkNSRU1FTlRBTD0hYi5yYW5kb21pemUseS5BTklNQVRFPWcuQU5JTUFURT1tLkFOSU1BVEU9Yi5hbmltYXRlLHkuVElMRT1iLnRpbGUseS5USUxJTkdfUEFERElOR19WRVJUSUNBTD10eXBlb2YgYi50aWxpbmdQYWRkaW5nVmVydGljYWw9PSJmdW5jdGlvbiI/Yi50aWxpbmdQYWRkaW5nVmVydGljYWwuY2FsbCgpOmIudGlsaW5nUGFkZGluZ1ZlcnRpY2FsLHkuVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTD10eXBlb2YgYi50aWxpbmdQYWRkaW5nSG9yaXpvbnRhbD09ImZ1bmN0aW9uIj9iLnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsLmNhbGwoKTpiLnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsLHkuREVGQVVMVF9JTkNSRU1FTlRBTD1nLkRFRkFVTFRfSU5DUkVNRU5UQUw9bS5ERUZBVUxUX0lOQ1JFTUVOVEFMPSEwLHkuUFVSRV9JTkNSRU1FTlRBTD0hYi5yYW5kb21pemUsbS5ERUZBVUxUX1VOSUZPUk1fTEVBRl9OT0RFX1NJWkVTPWIudW5pZm9ybU5vZGVEaW1lbnNpb25zLGIuc3RlcD09InRyYW5zZm9ybWVkIiYmKHkuVFJBTlNGT1JNX09OX0NPTlNUUkFJTlRfSEFORExJTkc9ITAseS5FTkZPUkNFX0NPTlNUUkFJTlRTPSExLHkuQVBQTFlfTEFZT1VUPSExKSxiLnN0ZXA9PSJlbmZvcmNlZCImJih5LlRSQU5TRk9STV9PTl9DT05TVFJBSU5UX0hBTkRMSU5HPSExLHkuRU5GT1JDRV9DT05TVFJBSU5UUz0hMCx5LkFQUExZX0xBWU9VVD0hMSksYi5zdGVwPT0iY29zZSImJih5LlRSQU5TRk9STV9PTl9DT05TVFJBSU5UX0hBTkRMSU5HPSExLHkuRU5GT1JDRV9DT05TVFJBSU5UUz0hMSx5LkFQUExZX0xBWU9VVD0hMCksYi5zdGVwPT0iYWxsIiYmKGIucmFuZG9taXplP3kuVFJBTlNGT1JNX09OX0NPTlNUUkFJTlRfSEFORExJTkc9ITA6eS5UUkFOU0ZPUk1fT05fQ09OU1RSQUlOVF9IQU5ETElORz0hMSx5LkVORk9SQ0VfQ09OU1RSQUlOVFM9ITAseS5BUFBMWV9MQVlPVVQ9ITApLGIuZml4ZWROb2RlQ29uc3RyYWludHx8Yi5hbGlnbm1lbnRDb25zdHJhaW50fHxiLnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludD95LlRSRUVfUkVEVUNUSU9OX09OX0lOQ1JFTUVOVEFMPSExOnkuVFJFRV9SRURVQ1RJT05fT05fSU5DUkVNRU5UQUw9ITA7dmFyIEY9bmV3IGgsQj1GLm5ld0dyYXBoTWFuYWdlcigpO3JldHVybiBPKEIuYWRkUm9vdCgpLHUuZ2V0VG9wTW9zdE5vZGVzKEUpLEYsYiksTihGLEIsTCksUChGLGIpLEYucnVuTGF5b3V0KCksRH0sImNvc2VMYXlvdXQiKTthLmV4cG9ydHM9e2Nvc2VMYXlvdXQ6dn19LDIxMjooYSxzLGwpPT57dmFyIHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKHcsXyl7Zm9yKHZhciBUPTA7VDxfLmxlbmd0aDtUKyspe3ZhciBFPV9bVF07RS5lbnVtZXJhYmxlPUUuZW51bWVyYWJsZXx8ITEsRS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIEUmJihFLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodyxFLmtleSxFKX19cmV0dXJuIG8oYiwiZGVmaW5lUHJvcGVydGllcyIpLGZ1bmN0aW9uKHcsXyxUKXtyZXR1cm4gXyYmYih3LnByb3RvdHlwZSxfKSxUJiZiKHcsVCksd319KCk7ZnVuY3Rpb24gaChiLHcpe2lmKCEoYiBpbnN0YW5jZW9mIHcpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfW8oaCwiX2NsYXNzQ2FsbENoZWNrIik7dmFyIGY9bCg2NTgpLGQ9bCg1NDgpLHA9bCg2NTcpLG09cC5zcGVjdHJhbExheW91dCxnPWwoODE2KSx5PWcuY29zZUxheW91dCx2PU9iamVjdC5mcmVlemUoe3F1YWxpdHk6ImRlZmF1bHQiLHJhbmRvbWl6ZTohMCxhbmltYXRlOiEwLGFuaW1hdGlvbkR1cmF0aW9uOjFlMyxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGZpdDohMCxwYWRkaW5nOjMwLG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMSx1bmlmb3JtTm9kZURpbWVuc2lvbnM6ITEscGFja0NvbXBvbmVudHM6ITAsc3RlcDoiYWxsIixzYW1wbGluZ1R5cGU6ITAsc2FtcGxlU2l6ZToyNSxub2RlU2VwYXJhdGlvbjo3NSxwaVRvbDoxZS03LG5vZGVSZXB1bHNpb246byhmdW5jdGlvbih3KXtyZXR1cm4gNDUwMH0sIm5vZGVSZXB1bHNpb24iKSxpZGVhbEVkZ2VMZW5ndGg6byhmdW5jdGlvbih3KXtyZXR1cm4gNTB9LCJpZGVhbEVkZ2VMZW5ndGgiKSxlZGdlRWxhc3RpY2l0eTpvKGZ1bmN0aW9uKHcpe3JldHVybiAuNDV9LCJlZGdlRWxhc3RpY2l0eSIpLG5lc3RpbmdGYWN0b3I6LjEsZ3Jhdml0eTouMjUsbnVtSXRlcjoyNTAwLHRpbGU6ITAsdGlsaW5nQ29tcGFyZUJ5OnZvaWQgMCx0aWxpbmdQYWRkaW5nVmVydGljYWw6MTAsdGlsaW5nUGFkZGluZ0hvcml6b250YWw6MTAsZ3Jhdml0eVJhbmdlQ29tcG91bmQ6MS41LGdyYXZpdHlDb21wb3VuZDoxLGdyYXZpdHlSYW5nZTozLjgsaW5pdGlhbEVuZXJneU9uSW5jcmVtZW50YWw6LjMsZml4ZWROb2RlQ29uc3RyYWludDp2b2lkIDAsYWxpZ25tZW50Q29uc3RyYWludDp2b2lkIDAscmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50OnZvaWQgMCxyZWFkeTpvKGZ1bmN0aW9uKCl7fSwicmVhZHkiKSxzdG9wOm8oZnVuY3Rpb24oKXt9LCJzdG9wIil9KSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYih3KXtoKHRoaXMsYiksdGhpcy5vcHRpb25zPWYoe30sdix3KX1yZXR1cm4gbyhiLCJMYXlvdXQiKSx1KGIsW3trZXk6InJ1biIsdmFsdWU6byhmdW5jdGlvbigpe3ZhciBfPXRoaXMsVD10aGlzLm9wdGlvbnMsRT1ULmN5LEw9VC5lbGVzLFM9W10sQT12b2lkIDAsST12b2lkIDAsRD1bXSxrPXZvaWQgMCxSPVtdO1QuZml4ZWROb2RlQ29uc3RyYWludCYmKCFBcnJheS5pc0FycmF5KFQuZml4ZWROb2RlQ29uc3RyYWludCl8fFQuZml4ZWROb2RlQ29uc3RyYWludC5sZW5ndGg9PTApJiYoVC5maXhlZE5vZGVDb25zdHJhaW50PXZvaWQgMCksVC5hbGlnbm1lbnRDb25zdHJhaW50JiYoVC5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsJiYoIUFycmF5LmlzQXJyYXkoVC5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsKXx8VC5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsLmxlbmd0aD09MCkmJihULmFsaWdubWVudENvbnN0cmFpbnQudmVydGljYWw9dm9pZCAwKSxULmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbCYmKCFBcnJheS5pc0FycmF5KFQuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsKXx8VC5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWwubGVuZ3RoPT0wKSYmKFQuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsPXZvaWQgMCkpLFQucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50JiYoIUFycmF5LmlzQXJyYXkoVC5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQpfHxULnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludC5sZW5ndGg9PTApJiYoVC5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQ9dm9pZCAwKTt2YXIgQz1ULmZpeGVkTm9kZUNvbnN0cmFpbnR8fFQuYWxpZ25tZW50Q29uc3RyYWludHx8VC5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQ7QyYmKFQudGlsZT0hMSxULnBhY2tDb21wb25lbnRzPSExKTt2YXIgTz12b2lkIDAsTj0hMTtpZihFLmxheW91dFV0aWxpdGllcyYmVC5wYWNrQ29tcG9uZW50cyYmKE89RS5sYXlvdXRVdGlsaXRpZXMoImdldCIpLE98fChPPUUubGF5b3V0VXRpbGl0aWVzKCkpLE49ITApLEwubm9kZXMoKS5sZW5ndGg+MClpZihOKXt2YXIgQj1kLmdldFRvcE1vc3ROb2RlcyhULmVsZXMubm9kZXMoKSk7aWYoaz1kLmNvbm5lY3RDb21wb25lbnRzKEUsVC5lbGVzLEIpLGsuZm9yRWFjaChmdW5jdGlvbihzZSl7dmFyIGtlPXNlLmJvdW5kaW5nQm94KCk7Ui5wdXNoKHt4OmtlLngxK2tlLncvMix5OmtlLnkxK2tlLmgvMn0pfSksVC5yYW5kb21pemUmJmsuZm9yRWFjaChmdW5jdGlvbihzZSl7VC5lbGVzPXNlLFMucHVzaChtKFQpKX0pLFQucXVhbGl0eT09ImRlZmF1bHQifHxULnF1YWxpdHk9PSJwcm9vZiIpe3ZhciBHPUUuY29sbGVjdGlvbigpO2lmKFQudGlsZSl7dmFyIHo9bmV3IE1hcCxXPVtdLFo9W10saj0wLG9lPXtub2RlSW5kZXhlczp6LHhDb29yZHM6Vyx5Q29vcmRzOlp9LEs9W107aWYoay5mb3JFYWNoKGZ1bmN0aW9uKHNlLGtlKXtzZS5lZGdlcygpLmxlbmd0aD09MCYmKHNlLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihSZSxDZSl7Ry5tZXJnZShzZS5ub2RlcygpW0NlXSksUmUuaXNQYXJlbnQoKXx8KG9lLm5vZGVJbmRleGVzLnNldChzZS5ub2RlcygpW0NlXS5pZCgpLGorKyksb2UueENvb3Jkcy5wdXNoKHNlLm5vZGVzKClbMF0ucG9zaXRpb24oKS54KSxvZS55Q29vcmRzLnB1c2goc2Uubm9kZXMoKVswXS5wb3NpdGlvbigpLnkpKX0pLEsucHVzaChrZSkpfSksRy5sZW5ndGg+MSl7dmFyIGVlPUcuYm91bmRpbmdCb3goKTtSLnB1c2goe3g6ZWUueDErZWUudy8yLHk6ZWUueTErZWUuaC8yfSksay5wdXNoKEcpLFMucHVzaChvZSk7Zm9yKHZhciBKPUsubGVuZ3RoLTE7Sj49MDtKLS0pay5zcGxpY2UoS1tKXSwxKSxTLnNwbGljZShLW0pdLDEpLFIuc3BsaWNlKEtbSl0sMSl9fWsuZm9yRWFjaChmdW5jdGlvbihzZSxrZSl7VC5lbGVzPXNlLEQucHVzaCh5KFQsU1trZV0pKSxkLnJlbG9jYXRlQ29tcG9uZW50KFJba2VdLERba2VdLFQpfSl9ZWxzZSBrLmZvckVhY2goZnVuY3Rpb24oc2Usa2Upe2QucmVsb2NhdGVDb21wb25lbnQoUltrZV0sU1trZV0sVCl9KTt2YXIgSD1uZXcgU2V0O2lmKGsubGVuZ3RoPjEpe3ZhciBxPVtdLFE9TC5maWx0ZXIoZnVuY3Rpb24oc2Upe3JldHVybiBzZS5jc3MoImRpc3BsYXkiKT09Im5vbmUifSk7ay5mb3JFYWNoKGZ1bmN0aW9uKHNlLGtlKXt2YXIgUmU9dm9pZCAwO2lmKFQucXVhbGl0eT09ImRyYWZ0IiYmKFJlPVNba2VdLm5vZGVJbmRleGVzKSxzZS5ub2RlcygpLm5vdChRKS5sZW5ndGg+MCl7dmFyIENlPXt9O0NlLmVkZ2VzPVtdLENlLm5vZGVzPVtdO3ZhciBQZT12b2lkIDA7c2Uubm9kZXMoKS5ub3QoUSkuZm9yRWFjaChmdW5jdGlvbihJZSl7aWYoVC5xdWFsaXR5PT0iZHJhZnQiKWlmKCFJZS5pc1BhcmVudCgpKVBlPVJlLmdldChJZS5pZCgpKSxDZS5ub2Rlcy5wdXNoKHt4OlNba2VdLnhDb29yZHNbUGVdLUllLmJvdW5kaW5nYm94KCkudy8yLHk6U1trZV0ueUNvb3Jkc1tQZV0tSWUuYm91bmRpbmdib3goKS5oLzIsd2lkdGg6SWUuYm91bmRpbmdib3goKS53LGhlaWdodDpJZS5ib3VuZGluZ2JveCgpLmh9KTtlbHNle3ZhciAkZT1kLmNhbGNCb3VuZGluZ0JveChJZSxTW2tlXS54Q29vcmRzLFNba2VdLnlDb29yZHMsUmUpO0NlLm5vZGVzLnB1c2goe3g6JGUudG9wTGVmdFgseTokZS50b3BMZWZ0WSx3aWR0aDokZS53aWR0aCxoZWlnaHQ6JGUuaGVpZ2h0fSl9ZWxzZSBEW2tlXVtJZS5pZCgpXSYmQ2Uubm9kZXMucHVzaCh7eDpEW2tlXVtJZS5pZCgpXS5nZXRMZWZ0KCkseTpEW2tlXVtJZS5pZCgpXS5nZXRUb3AoKSx3aWR0aDpEW2tlXVtJZS5pZCgpXS5nZXRXaWR0aCgpLGhlaWdodDpEW2tlXVtJZS5pZCgpXS5nZXRIZWlnaHQoKX0pfSksc2UuZWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKEllKXt2YXIgJGU9SWUuc291cmNlKCkseWU9SWUudGFyZ2V0KCk7aWYoJGUuY3NzKCJkaXNwbGF5IikhPSJub25lIiYmeWUuY3NzKCJkaXNwbGF5IikhPSJub25lIilpZihULnF1YWxpdHk9PSJkcmFmdCIpe3ZhciBYPVJlLmdldCgkZS5pZCgpKSxmZT1SZS5nZXQoeWUuaWQoKSksaGU9W10sZ2U9W107aWYoJGUuaXNQYXJlbnQoKSl7dmFyIG5lPWQuY2FsY0JvdW5kaW5nQm94KCRlLFNba2VdLnhDb29yZHMsU1trZV0ueUNvb3JkcyxSZSk7aGUucHVzaChuZS50b3BMZWZ0WCtuZS53aWR0aC8yKSxoZS5wdXNoKG5lLnRvcExlZnRZK25lLmhlaWdodC8yKX1lbHNlIGhlLnB1c2goU1trZV0ueENvb3Jkc1tYXSksaGUucHVzaChTW2tlXS55Q29vcmRzW1hdKTtpZih5ZS5pc1BhcmVudCgpKXt2YXIgdmU9ZC5jYWxjQm91bmRpbmdCb3goeWUsU1trZV0ueENvb3JkcyxTW2tlXS55Q29vcmRzLFJlKTtnZS5wdXNoKHZlLnRvcExlZnRYK3ZlLndpZHRoLzIpLGdlLnB1c2godmUudG9wTGVmdFkrdmUuaGVpZ2h0LzIpfWVsc2UgZ2UucHVzaChTW2tlXS54Q29vcmRzW2ZlXSksZ2UucHVzaChTW2tlXS55Q29vcmRzW2ZlXSk7Q2UuZWRnZXMucHVzaCh7c3RhcnRYOmhlWzBdLHN0YXJ0WTpoZVsxXSxlbmRYOmdlWzBdLGVuZFk6Z2VbMV19KX1lbHNlIERba2VdWyRlLmlkKCldJiZEW2tlXVt5ZS5pZCgpXSYmQ2UuZWRnZXMucHVzaCh7c3RhcnRYOkRba2VdWyRlLmlkKCldLmdldENlbnRlclgoKSxzdGFydFk6RFtrZV1bJGUuaWQoKV0uZ2V0Q2VudGVyWSgpLGVuZFg6RFtrZV1beWUuaWQoKV0uZ2V0Q2VudGVyWCgpLGVuZFk6RFtrZV1beWUuaWQoKV0uZ2V0Q2VudGVyWSgpfSl9KSxDZS5ub2Rlcy5sZW5ndGg+MCYmKHEucHVzaChDZSksSC5hZGQoa2UpKX19KTt2YXIgYWU9Ty5wYWNrQ29tcG9uZW50cyhxLFQucmFuZG9taXplKS5zaGlmdHM7aWYoVC5xdWFsaXR5PT0iZHJhZnQiKVMuZm9yRWFjaChmdW5jdGlvbihzZSxrZSl7dmFyIFJlPXNlLnhDb29yZHMubWFwKGZ1bmN0aW9uKFBlKXtyZXR1cm4gUGUrYWVba2VdLmR4fSksQ2U9c2UueUNvb3Jkcy5tYXAoZnVuY3Rpb24oUGUpe3JldHVybiBQZSthZVtrZV0uZHl9KTtzZS54Q29vcmRzPVJlLHNlLnlDb29yZHM9Q2V9KTtlbHNle3ZhciB1ZT0wO0guZm9yRWFjaChmdW5jdGlvbihzZSl7T2JqZWN0LmtleXMoRFtzZV0pLmZvckVhY2goZnVuY3Rpb24oa2Upe3ZhciBSZT1EW3NlXVtrZV07UmUuc2V0Q2VudGVyKFJlLmdldENlbnRlclgoKSthZVt1ZV0uZHgsUmUuZ2V0Q2VudGVyWSgpK2FlW3VlXS5keSl9KSx1ZSsrfSl9fX1lbHNle3ZhciBQPVQuZWxlcy5ib3VuZGluZ0JveCgpO2lmKFIucHVzaCh7eDpQLngxK1Audy8yLHk6UC55MStQLmgvMn0pLFQucmFuZG9taXplKXt2YXIgRj1tKFQpO1MucHVzaChGKX1ULnF1YWxpdHk9PSJkZWZhdWx0Inx8VC5xdWFsaXR5PT0icHJvb2YiPyhELnB1c2goeShULFNbMF0pKSxkLnJlbG9jYXRlQ29tcG9uZW50KFJbMF0sRFswXSxUKSk6ZC5yZWxvY2F0ZUNvbXBvbmVudChSWzBdLFNbMF0sVCl9dmFyIGNlPW8oZnVuY3Rpb24oa2UsUmUpe2lmKFQucXVhbGl0eT09ImRlZmF1bHQifHxULnF1YWxpdHk9PSJwcm9vZiIpe3R5cGVvZiBrZT09Im51bWJlciImJihrZT1SZSk7dmFyIENlPXZvaWQgMCxQZT12b2lkIDAsSWU9a2UuZGF0YSgiaWQiKTtyZXR1cm4gRC5mb3JFYWNoKGZ1bmN0aW9uKHllKXtJZSBpbiB5ZSYmKENlPXt4OnllW0llXS5nZXRSZWN0KCkuZ2V0Q2VudGVyWCgpLHk6eWVbSWVdLmdldFJlY3QoKS5nZXRDZW50ZXJZKCl9LFBlPXllW0llXSl9KSxULm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVscyYmKFBlLmxhYmVsV2lkdGgmJihQZS5sYWJlbFBvc0hvcml6b250YWw9PSJsZWZ0Ij9DZS54Kz1QZS5sYWJlbFdpZHRoLzI6UGUubGFiZWxQb3NIb3Jpem9udGFsPT0icmlnaHQiJiYoQ2UueC09UGUubGFiZWxXaWR0aC8yKSksUGUubGFiZWxIZWlnaHQmJihQZS5sYWJlbFBvc1ZlcnRpY2FsPT0idG9wIj9DZS55Kz1QZS5sYWJlbEhlaWdodC8yOlBlLmxhYmVsUG9zVmVydGljYWw9PSJib3R0b20iJiYoQ2UueS09UGUubGFiZWxIZWlnaHQvMikpKSxDZT09bnVsbCYmKENlPXt4OmtlLnBvc2l0aW9uKCJ4IikseTprZS5wb3NpdGlvbigieSIpfSkse3g6Q2UueCx5OkNlLnl9fWVsc2V7dmFyICRlPXZvaWQgMDtyZXR1cm4gUy5mb3JFYWNoKGZ1bmN0aW9uKHllKXt2YXIgWD15ZS5ub2RlSW5kZXhlcy5nZXQoa2UuaWQoKSk7WCE9bnVsbCYmKCRlPXt4OnllLnhDb29yZHNbWF0seTp5ZS55Q29vcmRzW1hdfSl9KSwkZT09bnVsbCYmKCRlPXt4OmtlLnBvc2l0aW9uKCJ4IikseTprZS5wb3NpdGlvbigieSIpfSkse3g6JGUueCx5OiRlLnl9fX0sImdldFBvc2l0aW9ucyIpO2lmKFQucXVhbGl0eT09ImRlZmF1bHQifHxULnF1YWxpdHk9PSJwcm9vZiJ8fFQucmFuZG9taXplKXt2YXIgdGU9ZC5jYWxjUGFyZW50c1dpdGhvdXRDaGlsZHJlbihFLEwpLE5lPUwuZmlsdGVyKGZ1bmN0aW9uKHNlKXtyZXR1cm4gc2UuY3NzKCJkaXNwbGF5Iik9PSJub25lIn0pO1QuZWxlcz1MLm5vdChOZSksTC5ub2RlcygpLm5vdCgiOnBhcmVudCIpLm5vdChOZSkubGF5b3V0UG9zaXRpb25zKF8sVCxjZSksdGUubGVuZ3RoPjAmJnRlLmZvckVhY2goZnVuY3Rpb24oc2Upe3NlLnBvc2l0aW9uKGNlKHNlKSl9KX1lbHNlIGNvbnNvbGUubG9nKCJJZiByYW5kb21pemUgb3B0aW9uIGlzIHNldCB0byBmYWxzZSwgdGhlbiBxdWFsaXR5IG9wdGlvbiBtdXN0IGJlICdkZWZhdWx0JyBvciAncHJvb2YnLiIpfSwicnVuIil9XSksYn0oKTthLmV4cG9ydHM9eH0sNjU3OihhLHMsbCk9Pnt2YXIgdT1sKDU0OCksaD1sKDE0MCkubGF5b3V0QmFzZS5NYXRyaXgsZj1sKDE0MCkubGF5b3V0QmFzZS5TVkQsZD1vKGZ1bmN0aW9uKG0pe3ZhciBnPW0uY3kseT1tLmVsZXMsdj15Lm5vZGVzKCkseD15Lm5vZGVzKCI6cGFyZW50IiksYj1uZXcgTWFwLHc9bmV3IE1hcCxfPW5ldyBNYXAsVD1bXSxFPVtdLEw9W10sUz1bXSxBPVtdLEk9W10sRD1bXSxrPVtdLFI9dm9pZCAwLEM9dm9pZCAwLE89MWU4LE49MWUtOSxQPW0ucGlUb2wsRj1tLnNhbXBsaW5nVHlwZSxCPW0ubm9kZVNlcGFyYXRpb24sRz12b2lkIDAsej1vKGZ1bmN0aW9uKCl7Zm9yKHZhciBUZT0wLGllPTAsRWU9ITE7aWU8Rzspe1RlPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpDKSxFZT0hMTtmb3IodmFyIEFlPTA7QWU8aWU7QWUrKylpZihTW0FlXT09VGUpe0VlPSEwO2JyZWFrfWlmKCFFZSlTW2llXT1UZSxpZSsrO2Vsc2UgY29udGludWV9fSwicmFuZG9tU2FtcGxlQ1IiKSxXPW8oZnVuY3Rpb24oVGUsaWUsRWUpe2Zvcih2YXIgQWU9W10sR2U9MCxCZT0wLG1lPTAsSGU9dm9pZCAwLE9lPVtdLGV0PTAsYnQ9MSxrdD0wO2t0PEM7a3QrKylPZVtrdF09Tztmb3IoQWVbQmVdPVRlLE9lW1RlXT0wO0JlPj1HZTspe21lPUFlW0dlKytdO2Zvcih2YXIgdnQ9VFttZV0scnQ9MDtydDx2dC5sZW5ndGg7cnQrKylIZT13LmdldCh2dFtydF0pLE9lW0hlXT09TyYmKE9lW0hlXT1PZVttZV0rMSxBZVsrK0JlXT1IZSk7SVttZV1baWVdPU9lW21lXSpCfWlmKEVlKXtmb3IodmFyIHl0PTA7eXQ8Qzt5dCsrKUlbeXRdW2llXTxBW3l0XSYmKEFbeXRdPUlbeXRdW2llXSk7Zm9yKHZhciBVZT0wO1VlPEM7VWUrKylBW1VlXT5ldCYmKGV0PUFbVWVdLGJ0PVVlKX1yZXR1cm4gYnR9LCJCRlMiKSxaPW8oZnVuY3Rpb24oVGUpe3ZhciBpZT12b2lkIDA7aWYoVGUpe2llPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpDKSxSPWllO2Zvcih2YXIgQWU9MDtBZTxDO0FlKyspQVtBZV09Tztmb3IodmFyIEdlPTA7R2U8RztHZSsrKVNbR2VdPWllLGllPVcoaWUsR2UsVGUpfWVsc2V7eigpO2Zvcih2YXIgRWU9MDtFZTxHO0VlKyspVyhTW0VlXSxFZSxUZSwhMSl9Zm9yKHZhciBCZT0wO0JlPEM7QmUrKylmb3IodmFyIG1lPTA7bWU8RzttZSsrKUlbQmVdW21lXSo9SVtCZV1bbWVdO2Zvcih2YXIgSGU9MDtIZTxHO0hlKyspRFtIZV09W107Zm9yKHZhciBPZT0wO09lPEc7T2UrKylmb3IodmFyIGV0PTA7ZXQ8RztldCsrKURbT2VdW2V0XT1JW1NbZXRdXVtPZV19LCJhbGxCRlMiKSxqPW8oZnVuY3Rpb24oKXtmb3IodmFyIFRlPWYuc3ZkKEQpLGllPVRlLlMsRWU9VGUuVSxBZT1UZS5WLEdlPWllWzBdKmllWzBdKmllWzBdLEJlPVtdLG1lPTA7bWU8RzttZSsrKXtCZVttZV09W107Zm9yKHZhciBIZT0wO0hlPEc7SGUrKylCZVttZV1bSGVdPTAsbWU9PUhlJiYoQmVbbWVdW0hlXT1pZVttZV0vKGllW21lXSppZVttZV0rR2UvKGllW21lXSppZVttZV0pKSl9az1oLm11bHRNYXQoaC5tdWx0TWF0KEFlLEJlKSxoLnRyYW5zcG9zZShFZSkpfSwic2FtcGxlIiksb2U9byhmdW5jdGlvbigpe2Zvcih2YXIgVGU9dm9pZCAwLGllPXZvaWQgMCxFZT1bXSxBZT1bXSxHZT1bXSxCZT1bXSxtZT0wO21lPEM7bWUrKylFZVttZV09TWF0aC5yYW5kb20oKSxBZVttZV09TWF0aC5yYW5kb20oKTtFZT1oLm5vcm1hbGl6ZShFZSksQWU9aC5ub3JtYWxpemUoQWUpO2Zvcih2YXIgSGU9MCxPZT1OLGV0PU4sYnQ9dm9pZCAwOzspe0hlKys7Zm9yKHZhciBrdD0wO2t0PEM7a3QrKylHZVtrdF09RWVba3RdO2lmKEVlPWgubXVsdEdhbW1hKGgubXVsdEwoaC5tdWx0R2FtbWEoR2UpLEksaykpLFRlPWguZG90UHJvZHVjdChHZSxFZSksRWU9aC5ub3JtYWxpemUoRWUpLE9lPWguZG90UHJvZHVjdChHZSxFZSksYnQ9TWF0aC5hYnMoT2UvZXQpLGJ0PD0xK1AmJmJ0Pj0xKWJyZWFrO2V0PU9lfWZvcih2YXIgdnQ9MDt2dDxDO3Z0KyspR2VbdnRdPUVlW3Z0XTtmb3IoSGU9MCxldD1OOzspe0hlKys7Zm9yKHZhciBydD0wO3J0PEM7cnQrKylCZVtydF09QWVbcnRdO2lmKEJlPWgubWludXNPcChCZSxoLm11bHRDb25zKEdlLGguZG90UHJvZHVjdChHZSxCZSkpKSxBZT1oLm11bHRHYW1tYShoLm11bHRMKGgubXVsdEdhbW1hKEJlKSxJLGspKSxpZT1oLmRvdFByb2R1Y3QoQmUsQWUpLEFlPWgubm9ybWFsaXplKEFlKSxPZT1oLmRvdFByb2R1Y3QoQmUsQWUpLGJ0PU1hdGguYWJzKE9lL2V0KSxidDw9MStQJiZidD49MSlicmVhaztldD1PZX1mb3IodmFyIHl0PTA7eXQ8Qzt5dCsrKUJlW3l0XT1BZVt5dF07RT1oLm11bHRDb25zKEdlLE1hdGguc3FydChNYXRoLmFicyhUZSkpKSxMPWgubXVsdENvbnMoQmUsTWF0aC5zcXJ0KE1hdGguYWJzKGllKSkpfSwicG93ZXJJdGVyYXRpb24iKTt1LmNvbm5lY3RDb21wb25lbnRzKGcseSx1LmdldFRvcE1vc3ROb2Rlcyh2KSxiKSx4LmZvckVhY2goZnVuY3Rpb24oVSl7dS5jb25uZWN0Q29tcG9uZW50cyhnLHksdS5nZXRUb3BNb3N0Tm9kZXMoVS5kZXNjZW5kYW50cygpLmludGVyc2VjdGlvbih5KSksYil9KTtmb3IodmFyIEs9MCxlZT0wO2VlPHYubGVuZ3RoO2VlKyspdltlZV0uaXNQYXJlbnQoKXx8dy5zZXQodltlZV0uaWQoKSxLKyspO3ZhciBKPSEwLEg9ITEscT12b2lkIDA7dHJ5e2Zvcih2YXIgUT1iLmtleXMoKVtTeW1ib2wuaXRlcmF0b3JdKCksYWU7IShKPShhZT1RLm5leHQoKSkuZG9uZSk7Sj0hMCl7dmFyIHVlPWFlLnZhbHVlO3cuc2V0KHVlLEsrKyl9fWNhdGNoKFUpe0g9ITAscT1VfWZpbmFsbHl7dHJ5eyFKJiZRLnJldHVybiYmUS5yZXR1cm4oKX1maW5hbGx5e2lmKEgpdGhyb3cgcX19Zm9yKHZhciBjZT0wO2NlPHcuc2l6ZTtjZSsrKVRbY2VdPVtdO3guZm9yRWFjaChmdW5jdGlvbihVKXtmb3IodmFyIFRlPVUuY2hpbGRyZW4oKS5pbnRlcnNlY3Rpb24oeSk7VGUubm9kZXMoIjpjaGlsZGxlc3MiKS5sZW5ndGg9PTA7KVRlPVRlLm5vZGVzKClbMF0uY2hpbGRyZW4oKS5pbnRlcnNlY3Rpb24oeSk7dmFyIGllPTAsRWU9VGUubm9kZXMoIjpjaGlsZGxlc3MiKVswXS5jb25uZWN0ZWRFZGdlcygpLmxlbmd0aDtUZS5ub2RlcygiOmNoaWxkbGVzcyIpLmZvckVhY2goZnVuY3Rpb24oQWUsR2Upe0FlLmNvbm5lY3RlZEVkZ2VzKCkubGVuZ3RoPEVlJiYoRWU9QWUuY29ubmVjdGVkRWRnZXMoKS5sZW5ndGgsaWU9R2UpfSksXy5zZXQoVS5pZCgpLFRlLm5vZGVzKCI6Y2hpbGRsZXNzIilbaWVdLmlkKCkpfSksdi5mb3JFYWNoKGZ1bmN0aW9uKFUpe3ZhciBUZT12b2lkIDA7VS5pc1BhcmVudCgpP1RlPXcuZ2V0KF8uZ2V0KFUuaWQoKSkpOlRlPXcuZ2V0KFUuaWQoKSksVS5uZWlnaGJvcmhvb2QoKS5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24oaWUpe3kuaW50ZXJzZWN0aW9uKFUuZWRnZXNXaXRoKGllKSkubGVuZ3RoPjAmJihpZS5pc1BhcmVudCgpP1RbVGVdLnB1c2goXy5nZXQoaWUuaWQoKSkpOlRbVGVdLnB1c2goaWUuaWQoKSkpfSl9KTt2YXIgdGU9byhmdW5jdGlvbihUZSl7dmFyIGllPXcuZ2V0KFRlKSxFZT12b2lkIDA7Yi5nZXQoVGUpLmZvckVhY2goZnVuY3Rpb24oQWUpe2cuZ2V0RWxlbWVudEJ5SWQoQWUpLmlzUGFyZW50KCk/RWU9Xy5nZXQoQWUpOkVlPUFlLFRbaWVdLnB1c2goRWUpLFRbdy5nZXQoRWUpXS5wdXNoKFRlKX0pfSwiX2xvb3AiKSxOZT0hMCxzZT0hMSxrZT12b2lkIDA7dHJ5e2Zvcih2YXIgUmU9Yi5rZXlzKClbU3ltYm9sLml0ZXJhdG9yXSgpLENlOyEoTmU9KENlPVJlLm5leHQoKSkuZG9uZSk7TmU9ITApe3ZhciBQZT1DZS52YWx1ZTt0ZShQZSl9fWNhdGNoKFUpe3NlPSEwLGtlPVV9ZmluYWxseXt0cnl7IU5lJiZSZS5yZXR1cm4mJlJlLnJldHVybigpfWZpbmFsbHl7aWYoc2UpdGhyb3cga2V9fUM9dy5zaXplO3ZhciBJZT12b2lkIDA7aWYoQz4yKXtHPUM8bS5zYW1wbGVTaXplP0M6bS5zYW1wbGVTaXplO2Zvcih2YXIgJGU9MDskZTxDOyRlKyspSVskZV09W107Zm9yKHZhciB5ZT0wO3llPEc7eWUrKylrW3llXT1bXTtyZXR1cm4gbS5xdWFsaXR5PT0iZHJhZnQifHxtLnN0ZXA9PSJhbGwiPyhaKEYpLGooKSxvZSgpLEllPXtub2RlSW5kZXhlczp3LHhDb29yZHM6RSx5Q29vcmRzOkx9KToody5mb3JFYWNoKGZ1bmN0aW9uKFUsVGUpe0UucHVzaChnLmdldEVsZW1lbnRCeUlkKFRlKS5wb3NpdGlvbigieCIpKSxMLnB1c2goZy5nZXRFbGVtZW50QnlJZChUZSkucG9zaXRpb24oInkiKSl9KSxJZT17bm9kZUluZGV4ZXM6dyx4Q29vcmRzOkUseUNvb3JkczpMfSksSWV9ZWxzZXt2YXIgWD13LmtleXMoKSxmZT1nLmdldEVsZW1lbnRCeUlkKFgubmV4dCgpLnZhbHVlKSxoZT1mZS5wb3NpdGlvbigpLGdlPWZlLm91dGVyV2lkdGgoKTtpZihFLnB1c2goaGUueCksTC5wdXNoKGhlLnkpLEM9PTIpe3ZhciBuZT1nLmdldEVsZW1lbnRCeUlkKFgubmV4dCgpLnZhbHVlKSx2ZT1uZS5vdXRlcldpZHRoKCk7RS5wdXNoKGhlLngrZ2UvMit2ZS8yK20uaWRlYWxFZGdlTGVuZ3RoKSxMLnB1c2goaGUueSl9cmV0dXJuIEllPXtub2RlSW5kZXhlczp3LHhDb29yZHM6RSx5Q29vcmRzOkx9LEllfX0sInNwZWN0cmFsTGF5b3V0Iik7YS5leHBvcnRzPXtzcGVjdHJhbExheW91dDpkfX0sNTc5OihhLHMsbCk9Pnt2YXIgdT1sKDIxMiksaD1vKGZ1bmN0aW9uKGQpe2QmJmQoImxheW91dCIsImZjb3NlIix1KX0sInJlZ2lzdGVyIik7dHlwZW9mIGN5dG9zY2FwZTwidSImJmgoY3l0b3NjYXBlKSxhLmV4cG9ydHM9aH0sMTQwOmE9PnthLmV4cG9ydHM9dH19LHI9e307ZnVuY3Rpb24gbihhKXt2YXIgcz1yW2FdO2lmKHMhPT12b2lkIDApcmV0dXJuIHMuZXhwb3J0czt2YXIgbD1yW2FdPXtleHBvcnRzOnt9fTtyZXR1cm4gZVthXShsLGwuZXhwb3J0cyxuKSxsLmV4cG9ydHN9byhuLCJfX3dlYnBhY2tfcmVxdWlyZV9fIik7dmFyIGk9big1NzkpO3JldHVybiBpfSkoKX0pfSk7dmFyIEYxLGFwLHlGPU0oKCk9PnsidXNlIHN0cmljdCI7c3UoKTtGMT1vKHQ9PmA8Zz48cmVjdCB3aWR0aD0iODAiIGhlaWdodD0iODAiIHN0eWxlPSJmaWxsOiAjMDg3ZWJmOyBzdHJva2Utd2lkdGg6IDBweDsiLz4ke3R9PC9nPmAsIndyYXBJY29uIiksYXA9e3ByZWZpeDoibWVybWFpZC1hcmNoaXRlY3R1cmUiLGhlaWdodDo4MCx3aWR0aDo4MCxpY29uczp7ZGF0YWJhc2U6e2JvZHk6RjEoJzxwYXRoIGlkPSJiIiBkYXRhLW5hbWU9IjQiIGQ9Im0yMCw1Ny44NmMwLDMuOTQsOC45NSw3LjE0LDIwLDcuMTRzMjAtMy4yLDIwLTcuMTQiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PHBhdGggaWQ9ImMiIGRhdGEtbmFtZT0iMyIgZD0ibTIwLDQ1Ljk1YzAsMy45NCw4Ljk1LDcuMTQsMjAsNy4xNHMyMC0zLjIsMjAtNy4xNCIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48cGF0aCBpZD0iZCIgZGF0YS1uYW1lPSIyIiBkPSJtMjAsMzQuMDVjMCwzLjk0LDguOTUsNy4xNCwyMCw3LjE0czIwLTMuMiwyMC03LjE0IiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxlbGxpcHNlIGlkPSJlIiBkYXRhLW5hbWU9IjEiIGN4PSI0MCIgY3k9IjIyLjE0IiByeD0iMjAiIHJ5PSI3LjE0IiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxsaW5lIHgxPSIyMCIgeTE9IjU3Ljg2IiB4Mj0iMjAiIHkyPSIyMi4xNCIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48bGluZSB4MT0iNjAiIHkxPSI1Ny44NiIgeDI9IjYwIiB5Mj0iMjIuMTQiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+Jyl9LHNlcnZlcjp7Ym9keTpGMSgnPHJlY3QgeD0iMTcuNSIgeT0iMTcuNSIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjQ1IiByeD0iMiIgcnk9IjIiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGxpbmUgeDE9IjE3LjUiIHkxPSIzMi41IiB4Mj0iNjIuNSIgeTI9IjMyLjUiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGxpbmUgeDE9IjE3LjUiIHkxPSI0Ny41IiB4Mj0iNjIuNSIgeTI9IjQ3LjUiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGc+PHBhdGggZD0ibTU2LjI1LDI1YzAsLjI3LS40NS41LTEsLjVoLTEwLjVjLS41NSwwLTEtLjIzLTEtLjVzLjQ1LS41LDEtLjVoMTAuNWMuNTUsMCwxLC4yMywxLC41WiIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZS13aWR0aDogMHB4OyIvPjxwYXRoIGQ9Im01Ni4yNSwyNWMwLC4yNy0uNDUuNS0xLC41aC0xMC41Yy0uNTUsMC0xLS4yMy0xLS41cy40NS0uNSwxLS41aDEwLjVjLjU1LDAsMSwuMjMsMSwuNVoiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsiLz48L2c+PGc+PHBhdGggZD0ibTU2LjI1LDQwYzAsLjI3LS40NS41LTEsLjVoLTEwLjVjLS41NSwwLTEtLjIzLTEtLjVzLjQ1LS41LDEtLjVoMTAuNWMuNTUsMCwxLC4yMywxLC41WiIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZS13aWR0aDogMHB4OyIvPjxwYXRoIGQ9Im01Ni4yNSw0MGMwLC4yNy0uNDUuNS0xLC41aC0xMC41Yy0uNTUsMC0xLS4yMy0xLS41cy40NS0uNSwxLS41aDEwLjVjLjU1LDAsMSwuMjMsMSwuNVoiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsiLz48L2c+PGc+PHBhdGggZD0ibTU2LjI1LDU1YzAsLjI3LS40NS41LTEsLjVoLTEwLjVjLS41NSwwLTEtLjIzLTEtLjVzLjQ1LS41LDEtLjVoMTAuNWMuNTUsMCwxLC4yMywxLC41WiIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZS13aWR0aDogMHB4OyIvPjxwYXRoIGQ9Im01Ni4yNSw1NWMwLC4yNy0uNDUuNS0xLC41aC0xMC41Yy0uNTUsMC0xLS4yMy0xLS41cy40NS0uNSwxLS41aDEwLjVjLjU1LDAsMSwuMjMsMSwuNVoiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsiLz48L2c+PGc+PGNpcmNsZSBjeD0iMzIuNSIgY3k9IjI1IiByPSIuNzUiIHN0eWxlPSJmaWxsOiAjZmZmOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsiLz48Y2lyY2xlIGN4PSIyNy41IiBjeT0iMjUiIHI9Ii43NSIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyIvPjxjaXJjbGUgY3g9IjIyLjUiIGN5PSIyNSIgcj0iLjc1IiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7Ii8+PC9nPjxnPjxjaXJjbGUgY3g9IjMyLjUiIGN5PSI0MCIgcj0iLjc1IiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7Ii8+PGNpcmNsZSBjeD0iMjcuNSIgY3k9IjQwIiByPSIuNzUiIHN0eWxlPSJmaWxsOiAjZmZmOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsiLz48Y2lyY2xlIGN4PSIyMi41IiBjeT0iNDAiIHI9Ii43NSIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyIvPjwvZz48Zz48Y2lyY2xlIGN4PSIzMi41IiBjeT0iNTUiIHI9Ii43NSIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyIvPjxjaXJjbGUgY3g9IjI3LjUiIGN5PSI1NSIgcj0iLjc1IiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7Ii8+PGNpcmNsZSBjeD0iMjIuNSIgY3k9IjU1IiByPSIuNzUiIHN0eWxlPSJmaWxsOiAjZmZmOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsiLz48L2c+Jyl9LGRpc2s6e2JvZHk6RjEoJzxyZWN0IHg9IjIwIiB5PSIxNSIgd2lkdGg9IjQwIiBoZWlnaHQ9IjUwIiByeD0iMSIgcnk9IjEiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGVsbGlwc2UgY3g9IjI0IiBjeT0iMTkuMTciIHJ4PSIuOCIgcnk9Ii44MyIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48ZWxsaXBzZSBjeD0iNTYiIGN5PSIxOS4xNyIgcng9Ii44IiByeT0iLjgzIiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxlbGxpcHNlIGN4PSIyNCIgY3k9IjYwLjgzIiByeD0iLjgiIHJ5PSIuODMiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGVsbGlwc2UgY3g9IjU2IiBjeT0iNjAuODMiIHJ4PSIuOCIgcnk9Ii44MyIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48ZWxsaXBzZSBjeD0iNDAiIGN5PSIzMy43NSIgcng9IjE0IiByeT0iMTQuNTgiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGVsbGlwc2UgY3g9IjQwIiBjeT0iMzMuNzUiIHJ4PSI0IiByeT0iNC4xNyIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48cGF0aCBkPSJtMzcuNTEsNDIuNTJsLTQuODMsMTMuMjJjLS4yNi43MS0xLjEsMS4wMi0xLjc2LjY0bC00LjE4LTIuNDJjLS42Ni0uMzgtLjgxLTEuMjYtLjMzLTEuODRsOS4wMS0xMC44Yy44OC0xLjA1LDIuNTYtLjA4LDIuMDksMS4yWiIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZS13aWR0aDogMHB4OyIvPicpfSxpbnRlcm5ldDp7Ym9keTpGMSgnPGNpcmNsZSBjeD0iNDAiIGN5PSI0MCIgcj0iMjIuNSIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48bGluZSB4MT0iNDAiIHkxPSIxNy41IiB4Mj0iNDAiIHkyPSI2Mi41IiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxsaW5lIHgxPSIxNy41IiB5MT0iNDAiIHgyPSI2Mi41IiB5Mj0iNDAiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PHBhdGggZD0ibTM5Ljk5LDE3LjUxYy0xNS4yOCwxMS4xLTE1LjI4LDMzLjg4LDAsNDQuOTgiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PHBhdGggZD0ibTQwLjAxLDE3LjUxYzE1LjI4LDExLjEsMTUuMjgsMzMuODgsMCw0NC45OCIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48bGluZSB4MT0iMTkuNzUiIHkxPSIzMC4xIiB4Mj0iNjAuMjUiIHkyPSIzMC4xIiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxsaW5lIHgxPSIxOS43NSIgeTE9IjQ5LjkiIHgyPSI2MC4yNSIgeTI9IjQ5LjkiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+Jyl9LGNsb3VkOntib2R5OkYxKCc8cGF0aCBkPSJtNjUsNDcuNWMwLDIuNzYtMi4yNCw1LTUsNUgyMGMtMi43NiwwLTUtMi4yNC01LTUsMC0xLjg3LDEuMDMtMy41MSwyLjU2LTQuMzYtLjA0LS4yMS0uMDYtLjQyLS4wNi0uNjQsMC0yLjYsMi40OC00Ljc0LDUuNjUtNC45NywxLjY1LTQuNTEsNi4zNC03Ljc2LDExLjg1LTcuNzYuODYsMCwxLjY5LjA4LDIuNS4yMywyLjA5LTEuNTcsNC42OS0yLjUsNy41LTIuNSw2LjEsMCwxMS4xOSw0LjM4LDEyLjI4LDEwLjE3LDIuMTQuNTYsMy43MiwyLjUxLDMuNzIsNC44MywwLC4wMywwLC4wNy0uMDEuMSwyLjI5LjQ2LDQuMDEsMi40OCw0LjAxLDQuOVoiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+Jyl9LHVua25vd246elMsYmxhbms6e2JvZHk6RjEoIiIpfX19fSk7dmFyIG8yZSxsMmUsYzJlLHUyZSxoMmU9TSgoKT0+eyJ1c2Ugc3RyaWN0IjtzdSgpO1Z0KCk7UGwoKTtSYigpO3lGKCk7Z1MoKTtvMmU9byhhc3luYyBmdW5jdGlvbih0LGUpe2xldCByPU1pKCJwYWRkaW5nIiksbj1NaSgiaWNvblNpemUiKSxpPW4vMixhPW4vNixzPWEvMjthd2FpdCBQcm9taXNlLmFsbChlLmVkZ2VzKCkubWFwKGFzeW5jIGw9PntsZXR7c291cmNlOnUsc291cmNlRGlyOmgsc291cmNlQXJyb3c6Zixzb3VyY2VHcm91cDpkLHRhcmdldDpwLHRhcmdldERpcjptLHRhcmdldEFycm93OmcsdGFyZ2V0R3JvdXA6eSxsYWJlbDp2fT1tUyhsKSx7eCx5OmJ9PWxbMF0uc291cmNlRW5kcG9pbnQoKSx7eDp3LHk6X309bFswXS5taWRwb2ludCgpLHt4OlQseTpFfT1sWzBdLnRhcmdldEVuZHBvaW50KCksTD1yKzQ7aWYoZCYmKHlzKGgpP3grPWg9PT0iTCI/LUw6TDpiKz1oPT09IlQiPy1MOkwrMTgpLHkmJih5cyhtKT9UKz1tPT09IkwiPy1MOkw6RSs9bT09PSJUIj8tTDpMKzE4KSwhZCYmaXAuZ2V0Tm9kZSh1KT8udHlwZT09PSJqdW5jdGlvbiImJih5cyhoKT94Kz1oPT09IkwiP2k6LWk6Yis9aD09PSJUIj9pOi1pKSwheSYmaXAuZ2V0Tm9kZShwKT8udHlwZT09PSJqdW5jdGlvbiImJih5cyhtKT9UKz1tPT09IkwiP2k6LWk6RSs9bT09PSJUIj9pOi1pKSxsWzBdLl9wcml2YXRlLnJzY3JhdGNoKXtsZXQgUz10Lmluc2VydCgiZyIpO2lmKFMuaW5zZXJ0KCJwYXRoIikuYXR0cigiZCIsYE0gJHt4fSwke2J9IEwgJHt3fSwke199IEwke1R9LCR7RX0gYCkuYXR0cigiY2xhc3MiLCJlZGdlIiksZil7bGV0IEE9eXMoaCk/RGJbaF0oeCxhKTp4LXMsST1udShoKT9EYltoXShiLGEpOmItcztTLmluc2VydCgicG9seWdvbiIpLmF0dHIoInBvaW50cyIsdUZbaF0oYSkpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke0F9LCR7SX0pYCkuYXR0cigiY2xhc3MiLCJhcnJvdyIpfWlmKGcpe2xldCBBPXlzKG0pP0RiW21dKFQsYSk6VC1zLEk9bnUobSk/RGJbbV0oRSxhKTpFLXM7Uy5pbnNlcnQoInBvbHlnb24iKS5hdHRyKCJwb2ludHMiLHVGW21dKGEpKS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtBfSwke0l9KWApLmF0dHIoImNsYXNzIiwiYXJyb3ciKX1pZih2KXtsZXQgQT1wUyhoLG0pPyJYWSI6eXMoaCk/IlgiOiJZIixJPTA7QT09PSJYIj9JPU1hdGguYWJzKHgtVCk6QT09PSJZIj9JPU1hdGguYWJzKGItRSkvMS41Okk9TWF0aC5hYnMoeC1UKS8yO2xldCBEPVMuYXBwZW5kKCJnIik7aWYoYXdhaXQgTGkoRCx2LHt1c2VIdG1sTGFiZWxzOiExLHdpZHRoOkksY2xhc3NlczoiYXJjaGl0ZWN0dXJlLXNlcnZpY2UtbGFiZWwifSxwZSgpKSxELmF0dHIoImR5IiwiMWVtIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLEE9PT0iWCIpRC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit3KyIsICIrXysiKSIpO2Vsc2UgaWYoQT09PSJZIilELmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3crIiwgIitfKyIpIHJvdGF0ZSgtOTApIik7ZWxzZSBpZihBPT09IlhZIil7bGV0IGs9TmIoaCxtKTtpZihrJiZLdmUoaykpe2xldCBSPUQubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFtDLE9dPVp2ZShrKTtELmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiYXV0byIpLmF0dHIoInRyYW5zZm9ybSIsYHJvdGF0ZSgkey0xKkMqTyo0NX0pYCk7bGV0IE49RC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7RC5hdHRyKCJ0cmFuc2Zvcm0iLGAKICAgICAgICAgICAgICAgIHRyYW5zbGF0ZSgke3d9LCAke18tUi5oZWlnaHQvMn0pCiAgICAgICAgICAgICAgICB0cmFuc2xhdGUoJHtDKk4ud2lkdGgvMn0sICR7TypOLmhlaWdodC8yfSkKICAgICAgICAgICAgICAgIHJvdGF0ZSgkey0xKkMqTyo0NX0sIDAsICR7Ui5oZWlnaHQvMn0pCiAgICAgICAgICAgICAgYCl9fX19fSkpfSwiZHJhd0VkZ2VzIiksbDJlPW8oYXN5bmMgZnVuY3Rpb24odCxlKXtsZXQgbj1NaSgicGFkZGluZyIpKi43NSxpPU1pKCJmb250U2l6ZSIpLHM9TWkoImljb25TaXplIikvMjthd2FpdCBQcm9taXNlLmFsbChlLm5vZGVzKCkubWFwKGFzeW5jIGw9PntsZXQgdT1WZihsKTtpZih1LnR5cGU9PT0iZ3JvdXAiKXtsZXR7aCx3OmYseDE6ZCx5MTpwfT1sLmJvdW5kaW5nQm94KCk7dC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IixkK3MpLmF0dHIoInkiLHArcykuYXR0cigid2lkdGgiLGYpLmF0dHIoImhlaWdodCIsaCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyIpO2xldCBtPXQuYXBwZW5kKCJnIiksZz1kLHk9cDtpZih1Lmljb24pe2xldCB2PW0uYXBwZW5kKCJnIik7di5odG1sKGA8Zz4ke2F3YWl0IF9vKHUuaWNvbix7aGVpZ2h0Om4sd2lkdGg6bixmYWxsYmFja1ByZWZpeDphcC5wcmVmaXh9KX08L2c+YCksdi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoZytzKzEpKyIsICIrKHkrcysxKSsiKSIpLGcrPW4seSs9aS8yLTEtMn1pZih1LmxhYmVsKXtsZXQgdj1tLmFwcGVuZCgiZyIpO2F3YWl0IExpKHYsdS5sYWJlbCx7dXNlSHRtbExhYmVsczohMSx3aWR0aDpmLGNsYXNzZXM6ImFyY2hpdGVjdHVyZS1zZXJ2aWNlLWxhYmVsIn0scGUoKSksdi5hdHRyKCJkeSIsIjFlbSIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwic3RhcnQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsInN0YXJ0Iiksdi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoZytzKzQpKyIsICIrKHkrcysyKSsiKSIpfX19KSl9LCJkcmF3R3JvdXBzIiksYzJlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIpe2ZvcihsZXQgbiBvZiByKXtsZXQgaT1lLmFwcGVuZCgiZyIpLGE9TWkoImljb25TaXplIik7aWYobi50aXRsZSl7bGV0IGg9aS5hcHBlbmQoImciKTthd2FpdCBMaShoLG4udGl0bGUse3VzZUh0bWxMYWJlbHM6ITEsd2lkdGg6YSoxLjUsY2xhc3NlczoiYXJjaGl0ZWN0dXJlLXNlcnZpY2UtbGFiZWwifSxwZSgpKSxoLmF0dHIoImR5IiwiMWVtIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLGguYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS8yKyIsICIrYSsiKSIpfWxldCBzPWkuYXBwZW5kKCJnIik7aWYobi5pY29uKXMuaHRtbChgPGc+JHthd2FpdCBfbyhuLmljb24se2hlaWdodDphLHdpZHRoOmEsZmFsbGJhY2tQcmVmaXg6YXAucHJlZml4fSl9PC9nPmApO2Vsc2UgaWYobi5pY29uVGV4dCl7cy5odG1sKGA8Zz4ke2F3YWl0IF9vKCJibGFuayIse2hlaWdodDphLHdpZHRoOmEsZmFsbGJhY2tQcmVmaXg6YXAucHJlZml4fSl9PC9nPmApO2xldCBkPXMuYXBwZW5kKCJnIikuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigid2lkdGgiLGEpLmF0dHIoImhlaWdodCIsYSkuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsIm5vZGUtaWNvbi10ZXh0IikuYXR0cigic3R5bGUiLGBoZWlnaHQ6ICR7YX1weDtgKS5hcHBlbmQoImRpdiIpLmh0bWwobi5pY29uVGV4dCkscD1wYXJzZUludCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkLm5vZGUoKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJmb250LXNpemUiKS5yZXBsYWNlKC9cRC9nLCIiKSk/PzE2O2QuYXR0cigic3R5bGUiLGAtd2Via2l0LWxpbmUtY2xhbXA6ICR7TWF0aC5mbG9vcigoYS0yKS9wKX07YCl9ZWxzZSBzLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibm9kZS1ia2ciKS5hdHRyKCJpZCIsIm5vZGUtIituLmlkKS5hdHRyKCJkIixgTTAgJHthfSB2JHstYX0gcTAsLTUgNSwtNSBoJHthfSBxNSwwIDUsNSB2JHthfSBIMCBaYCk7aS5hdHRyKCJjbGFzcyIsImFyY2hpdGVjdHVyZS1zZXJ2aWNlIik7bGV0e3dpZHRoOmwsaGVpZ2h0OnV9PWkuX2dyb3Vwc1swXVswXS5nZXRCQm94KCk7bi53aWR0aD1sLG4uaGVpZ2h0PXUsdC5zZXRFbGVtZW50Rm9ySWQobi5pZCxpKX1yZXR1cm4gMH0sImRyYXdTZXJ2aWNlcyIpLHUyZT1vKGZ1bmN0aW9uKHQsZSxyKXtyLmZvckVhY2gobj0+e2xldCBpPWUuYXBwZW5kKCJnIiksYT1NaSgiaWNvblNpemUiKTtpLmFwcGVuZCgiZyIpLmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIiwibm9kZS0iK24uaWQpLmF0dHIoImZpbGwtb3BhY2l0eSIsIjAiKS5hdHRyKCJ3aWR0aCIsYSkuYXR0cigiaGVpZ2h0IixhKSxpLmF0dHIoImNsYXNzIiwiYXJjaGl0ZWN0dXJlLWp1bmN0aW9uIik7bGV0e3dpZHRoOmwsaGVpZ2h0OnV9PWkuX2dyb3Vwc1swXVswXS5nZXRCQm94KCk7aS53aWR0aD1sLGkuaGVpZ2h0PXUsdC5zZXRFbGVtZW50Rm9ySWQobi5pZCxpKX0pfSwiZHJhd0p1bmN0aW9ucyIpfSk7ZnVuY3Rpb24gYWl0KHQsZSl7dC5mb3JFYWNoKHI9PntlLmFkZCh7Z3JvdXA6Im5vZGVzIixkYXRhOnt0eXBlOiJzZXJ2aWNlIixpZDpyLmlkLGljb246ci5pY29uLGxhYmVsOnIudGl0bGUscGFyZW50OnIuaW4sd2lkdGg6TWkoImljb25TaXplIiksaGVpZ2h0Ok1pKCJpY29uU2l6ZSIpfSxjbGFzc2VzOiJub2RlLXNlcnZpY2UifSl9KX1mdW5jdGlvbiBzaXQodCxlKXt0LmZvckVhY2gocj0+e2UuYWRkKHtncm91cDoibm9kZXMiLGRhdGE6e3R5cGU6Imp1bmN0aW9uIixpZDpyLmlkLHBhcmVudDpyLmluLHdpZHRoOk1pKCJpY29uU2l6ZSIpLGhlaWdodDpNaSgiaWNvblNpemUiKX0sY2xhc3Nlczoibm9kZS1qdW5jdGlvbiJ9KX0pfWZ1bmN0aW9uIG9pdCh0LGUpe2Uubm9kZXMoKS5tYXAocj0+e2xldCBuPVZmKHIpO2lmKG4udHlwZT09PSJncm91cCIpcmV0dXJuO24ueD1yLnBvc2l0aW9uKCkueCxuLnk9ci5wb3NpdGlvbigpLnksdC5nZXRFbGVtZW50QnlJZChuLmlkKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisobi54fHwwKSsiLCIrKG4ueXx8MCkrIikiKX0pfWZ1bmN0aW9uIGxpdCh0LGUpe3QuZm9yRWFjaChyPT57ZS5hZGQoe2dyb3VwOiJub2RlcyIsZGF0YTp7dHlwZToiZ3JvdXAiLGlkOnIuaWQsaWNvbjpyLmljb24sbGFiZWw6ci50aXRsZSxwYXJlbnQ6ci5pbn0sY2xhc3Nlczoibm9kZS1ncm91cCJ9KX0pfWZ1bmN0aW9uIGNpdCh0LGUpe3QuZm9yRWFjaChyPT57bGV0e2xoc0lkOm4scmhzSWQ6aSxsaHNJbnRvOmEsbGhzR3JvdXA6cyxyaHNJbnRvOmwsbGhzRGlyOnUscmhzRGlyOmgscmhzR3JvdXA6Zix0aXRsZTpkfT1yLHA9cFMoci5saHNEaXIsci5yaHNEaXIpPyJzZWdtZW50cyI6InN0cmFpZ2h0IixtPXtpZDpgJHtufS0ke2l9YCxsYWJlbDpkLHNvdXJjZTpuLHNvdXJjZURpcjp1LHNvdXJjZUFycm93OmEsc291cmNlR3JvdXA6cyxzb3VyY2VFbmRwb2ludDp1PT09IkwiPyIwIDUwJSI6dT09PSJSIj8iMTAwJSA1MCUiOnU9PT0iVCI/IjUwJSAwIjoiNTAlIDEwMCUiLHRhcmdldDppLHRhcmdldERpcjpoLHRhcmdldEFycm93OmwsdGFyZ2V0R3JvdXA6Zix0YXJnZXRFbmRwb2ludDpoPT09IkwiPyIwIDUwJSI6aD09PSJSIj8iMTAwJSA1MCUiOmg9PT0iVCI/IjUwJSAwIjoiNTAlIDEwMCUifTtlLmFkZCh7Z3JvdXA6ImVkZ2VzIixkYXRhOm0sY2xhc3NlczpwfSl9KX1mdW5jdGlvbiB1aXQodCl7bGV0IGU9dC5tYXAoaT0+e2xldCBhPXt9LHM9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGkpLmZvckVhY2goKFtsLFt1LGhdXSk9PnthW2hdfHwoYVtoXT1bXSksc1t1XXx8KHNbdV09W10pLGFbaF0ucHVzaChsKSxzW3VdLnB1c2gobCl9KSx7aG9yaXo6T2JqZWN0LnZhbHVlcyhhKS5maWx0ZXIobD0+bC5sZW5ndGg+MSksdmVydDpPYmplY3QudmFsdWVzKHMpLmZpbHRlcihsPT5sLmxlbmd0aD4xKX19KSxbcixuXT1lLnJlZHVjZSgoW2ksYV0se2hvcml6OnMsdmVydDpsfSk9PltbLi4uaSwuLi5zXSxbLi4uYSwuLi5sXV0sW1tdLFtdXSk7cmV0dXJue2hvcml6b250YWw6cix2ZXJ0aWNhbDpufX1mdW5jdGlvbiBoaXQodCl7bGV0IGU9W10scj1vKGk9PmAke2lbMF19LCR7aVsxXX1gLCJwb3NUb1N0ciIpLG49byhpPT5pLnNwbGl0KCIsIikubWFwKGE9PnBhcnNlSW50KGEpKSwic3RyVG9Qb3MiKTtyZXR1cm4gdC5mb3JFYWNoKGk9PntsZXQgYT1PYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoaSkubWFwKChbaCxmXSk9PltyKGYpLGhdKSkscz1bcihbMCwwXSldLGw9e30sdT17TDpbLTEsMF0sUjpbMSwwXSxUOlswLDFdLEI6WzAsLTFdfTtmb3IoO3MubGVuZ3RoPjA7KXtsZXQgaD1zLnNoaWZ0KCk7aWYoaCl7bFtoXT0xO2xldCBmPWFbaF07aWYoZil7bGV0IGQ9bihoKTtPYmplY3QuZW50cmllcyh1KS5mb3JFYWNoKChbcCxtXSk9PntsZXQgZz1yKFtkWzBdK21bMF0sZFsxXSttWzFdXSkseT1hW2ddO3kmJiFsW2ddJiYocy5wdXNoKGcpLGUucHVzaCh7W2NGW3BdXTp5LFtjRltqdmUocCldXTpmLGdhcDoxLjUqTWkoImljb25TaXplIil9KSl9KX19fX0pLGV9ZnVuY3Rpb24gZml0KHQsZSxyLG4se3NwYXRpYWxNYXBzOml9KXtyZXR1cm4gbmV3IFByb21pc2UoYT0+e2xldCBzPVZlKCJib2R5IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJpZCIsImN5IikuYXR0cigic3R5bGUiLCJkaXNwbGF5Om5vbmUiKSxsPWZsKHtjb250YWluZXI6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImN5Iiksc3R5bGU6W3tzZWxlY3RvcjoiZWRnZSIsc3R5bGU6eyJjdXJ2ZS1zdHlsZSI6InN0cmFpZ2h0IixsYWJlbDoiZGF0YShsYWJlbCkiLCJzb3VyY2UtZW5kcG9pbnQiOiJkYXRhKHNvdXJjZUVuZHBvaW50KSIsInRhcmdldC1lbmRwb2ludCI6ImRhdGEodGFyZ2V0RW5kcG9pbnQpIn19LHtzZWxlY3RvcjoiZWRnZS5zZWdtZW50cyIsc3R5bGU6eyJjdXJ2ZS1zdHlsZSI6InNlZ21lbnRzIiwic2VnbWVudC13ZWlnaHRzIjoiMCIsInNlZ21lbnQtZGlzdGFuY2VzIjpbLjVdLCJlZGdlLWRpc3RhbmNlcyI6ImVuZHBvaW50cyIsInNvdXJjZS1lbmRwb2ludCI6ImRhdGEoc291cmNlRW5kcG9pbnQpIiwidGFyZ2V0LWVuZHBvaW50IjoiZGF0YSh0YXJnZXRFbmRwb2ludCkifX0se3NlbGVjdG9yOiJub2RlIixzdHlsZTp7ImNvbXBvdW5kLXNpemluZy13cnQtbGFiZWxzIjoiaW5jbHVkZSJ9fSx7c2VsZWN0b3I6Im5vZGVbbGFiZWxdIixzdHlsZTp7InRleHQtdmFsaWduIjoiYm90dG9tIiwidGV4dC1oYWxpZ24iOiJjZW50ZXIiLCJmb250LXNpemUiOmAke01pKCJmb250U2l6ZSIpfXB4YH19LHtzZWxlY3RvcjoiLm5vZGUtc2VydmljZSIsc3R5bGU6e2xhYmVsOiJkYXRhKGxhYmVsKSIsd2lkdGg6ImRhdGEod2lkdGgpIixoZWlnaHQ6ImRhdGEoaGVpZ2h0KSJ9fSx7c2VsZWN0b3I6Ii5ub2RlLWp1bmN0aW9uIixzdHlsZTp7d2lkdGg6ImRhdGEod2lkdGgpIixoZWlnaHQ6ImRhdGEoaGVpZ2h0KSJ9fSx7c2VsZWN0b3I6Ii5ub2RlLWdyb3VwIixzdHlsZTp7cGFkZGluZzpgJHtNaSgicGFkZGluZyIpfXB4YH19XX0pO3MucmVtb3ZlKCksbGl0KHIsbCksYWl0KHQsbCksc2l0KGUsbCksY2l0KG4sbCk7bGV0IHU9dWl0KGkpLGg9aGl0KGkpLGY9bC5sYXlvdXQoe25hbWU6ImZjb3NlIixxdWFsaXR5OiJwcm9vZiIsc3R5bGVFbmFibGVkOiExLGFuaW1hdGU6ITEsbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExLGlkZWFsRWRnZUxlbmd0aChkKXtsZXRbcCxtXT1kLmNvbm5lY3RlZE5vZGVzKCkse3BhcmVudDpnfT1WZihwKSx7cGFyZW50Onl9PVZmKG0pO3JldHVybiBnPT09eT8xLjUqTWkoImljb25TaXplIik6LjUqTWkoImljb25TaXplIil9LGVkZ2VFbGFzdGljaXR5KGQpe2xldFtwLG1dPWQuY29ubmVjdGVkTm9kZXMoKSx7cGFyZW50Omd9PVZmKHApLHtwYXJlbnQ6eX09VmYobSk7cmV0dXJuIGc9PT15Py40NTouMDAxfSxhbGlnbm1lbnRDb25zdHJhaW50OnUscmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50Omh9KTtmLm9uZSgibGF5b3V0c3RvcCIsKCk9PntmdW5jdGlvbiBkKHAsbSxnLHkpe2xldCB2LHgse3g6Yix5Ond9PXAse3g6Xyx5OlR9PW07eD0oeS13KyhiLWcpKih3LVQpLyhiLV8pKS9NYXRoLnNxcnQoMStNYXRoLnBvdygody1UKS8oYi1fKSwyKSksdj1NYXRoLnNxcnQoTWF0aC5wb3coeS13LDIpK01hdGgucG93KGctYiwyKS1NYXRoLnBvdyh4LDIpKTtsZXQgRT1NYXRoLnNxcnQoTWF0aC5wb3coXy1iLDIpK01hdGgucG93KFQtdywyKSk7dj12L0U7bGV0IEw9KF8tYikqKHktdyktKFQtdykqKGctYik7c3dpdGNoKCEwKXtjYXNlIEw+PTA6TD0xO2JyZWFrO2Nhc2UgTDwwOkw9LTE7YnJlYWt9bGV0IFM9KF8tYikqKGctYikrKFQtdykqKHktdyk7c3dpdGNoKCEwKXtjYXNlIFM+PTA6Uz0xO2JyZWFrO2Nhc2UgUzwwOlM9LTE7YnJlYWt9cmV0dXJuIHg9TWF0aC5hYnMoeCkqTCx2PXYqUyx7ZGlzdGFuY2VzOngsd2VpZ2h0czp2fX1vKGQsImdldFNlZ21lbnRXZWlnaHRzIiksbC5zdGFydEJhdGNoKCk7Zm9yKGxldCBwIG9mIE9iamVjdC52YWx1ZXMobC5lZGdlcygpKSlpZihwLmRhdGE/LigpKXtsZXR7eDptLHk6Z309cC5zb3VyY2UoKS5wb3NpdGlvbigpLHt4OnkseTp2fT1wLnRhcmdldCgpLnBvc2l0aW9uKCk7aWYobSE9PXkmJmchPT12KXtsZXQgeD1wLnNvdXJjZUVuZHBvaW50KCksYj1wLnRhcmdldEVuZHBvaW50KCkse3NvdXJjZURpcjp3fT1tUyhwKSxbXyxUXT1udSh3KT9beC54LGIueV06W2IueCx4LnldLHt3ZWlnaHRzOkUsZGlzdGFuY2VzOkx9PWQoeCxiLF8sVCk7cC5zdHlsZSgic2VnbWVudC1kaXN0YW5jZXMiLEwpLHAuc3R5bGUoInNlZ21lbnQtd2VpZ2h0cyIsRSl9fWwuZW5kQmF0Y2goKSxmLnJ1bigpfSksZi5ydW4oKSxsLnJlYWR5KGQ9PntZLmluZm8oIlJlYWR5IixkKSxhKGwpfSl9KX12YXIgZjJlLGRpdCxkMmUscDJlPU0oKCk9PnsidXNlIHN0cmljdCI7c3UoKTtTQigpO2YyZT1KaShzMmUoKSwxKTtwcigpO3V0KCk7ZWgoKTthaSgpO1JiKCk7eUYoKTtnUygpO2gyZSgpO1hiKFt7bmFtZTphcC5wcmVmaXgsaWNvbnM6YXB9XSk7ZmwudXNlKGYyZS5kZWZhdWx0KTtvKGFpdCwiYWRkU2VydmljZXMiKTtvKHNpdCwiYWRkSnVuY3Rpb25zIik7byhvaXQsInBvc2l0aW9uTm9kZXMiKTtvKGxpdCwiYWRkR3JvdXBzIik7byhjaXQsImFkZEVkZ2VzIik7byh1aXQsImdldEFsaWdubWVudHMiKTtvKGhpdCwiZ2V0UmVsYXRpdmVDb25zdHJhaW50cyIpO28oZml0LCJsYXlvdXRBcmNoaXRlY3R1cmUiKTtkaXQ9byhhc3luYyh0LGUscixuKT0+e2xldCBpPW4uZGIsYT1pLmdldFNlcnZpY2VzKCkscz1pLmdldEp1bmN0aW9ucygpLGw9aS5nZXRHcm91cHMoKSx1PWkuZ2V0RWRnZXMoKSxoPWkuZ2V0RGF0YVN0cnVjdHVyZXMoKSxmPVZhKGUpLGQ9Zi5hcHBlbmQoImciKTtkLmF0dHIoImNsYXNzIiwiYXJjaGl0ZWN0dXJlLWVkZ2VzIik7bGV0IHA9Zi5hcHBlbmQoImciKTtwLmF0dHIoImNsYXNzIiwiYXJjaGl0ZWN0dXJlLXNlcnZpY2VzIik7bGV0IG09Zi5hcHBlbmQoImciKTttLmF0dHIoImNsYXNzIiwiYXJjaGl0ZWN0dXJlLWdyb3VwcyIpLGF3YWl0IGMyZShpLHAsYSksdTJlKGkscCxzKTtsZXQgZz1hd2FpdCBmaXQoYSxzLGwsdSxoKTthd2FpdCBvMmUoZCxnKSxhd2FpdCBsMmUobSxnKSxvaXQoaSxnKSxJbyh2b2lkIDAsZixNaSgicGFkZGluZyIpLE1pKCJ1c2VNYXhXaWR0aCIpKX0sImRyYXciKSxkMmU9e2RyYXc6ZGl0fX0pO3ZhciBtMmU9e307dnIobTJlLHtkaWFncmFtOigpPT5waXR9KTt2YXIgcGl0LGcyZT1NKCgpPT57InVzZSBzdHJpY3QiO24yZSgpO1JiKCk7YTJlKCk7cDJlKCk7cGl0PXtwYXJzZXI6cjJlLGRiOmlwLHJlbmRlcmVyOmQyZSxzdHlsZXM6aTJlfX0pO3ZhciBlYXQ9e307dnIoZWF0LHtkZWZhdWx0OigpPT5KaXR9KTtzdSgpO0dTKCk7WmYoKTt2YXIgVlg9ImM0IixQQ2U9byh0PT4vXlxzKkM0Q29udGV4dHxDNENvbnRhaW5lcnxDNENvbXBvbmVudHxDNER5bmFtaWN8QzREZXBsb3ltZW50Ly50ZXN0KHQpLCJkZXRlY3RvciIpLEJDZT1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oJFgoKSxHWCkpO3JldHVybntpZDpWWCxkaWFncmFtOnR9fSwibG9hZGVyIiksRkNlPXtpZDpWWCxkZXRlY3RvcjpQQ2UsbG9hZGVyOkJDZX0sVVg9RkNlO3ZhciBZaWU9ImZsb3djaGFydCIsVU9lPW8oKHQsZSk9PmU/LmZsb3djaGFydD8uZGVmYXVsdFJlbmRlcmVyPT09ImRhZ3JlLXdyYXBwZXIifHxlPy5mbG93Y2hhcnQ/LmRlZmF1bHRSZW5kZXJlcj09PSJlbGsiPyExOi9eXHMqZ3JhcGgvLnRlc3QodCksImRldGVjdG9yIiksSE9lPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihFVCgpLGtUKSk7cmV0dXJue2lkOllpZSxkaWFncmFtOnR9fSwibG9hZGVyIiksV09lPXtpZDpZaWUsZGV0ZWN0b3I6VU9lLGxvYWRlcjpIT2V9LHFpZT1XT2U7dmFyIFhpZT0iZmxvd2NoYXJ0LXYyIixZT2U9bygodCxlKT0+ZT8uZmxvd2NoYXJ0Py5kZWZhdWx0UmVuZGVyZXI9PT0iZGFncmUtZDMiPyExOihlPy5mbG93Y2hhcnQ/LmRlZmF1bHRSZW5kZXJlcj09PSJlbGsiJiYoZS5sYXlvdXQ9ImVsayIpLC9eXHMqZ3JhcGgvLnRlc3QodCkmJmU/LmZsb3djaGFydD8uZGVmYXVsdFJlbmRlcmVyPT09ImRhZ3JlLXdyYXBwZXIiPyEwOi9eXHMqZmxvd2NoYXJ0Ly50ZXN0KHQpKSwiZGV0ZWN0b3IiKSxxT2U9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KEVUKCksa1QpKTtyZXR1cm57aWQ6WGllLGRpYWdyYW06dH19LCJsb2FkZXIiKSxYT2U9e2lkOlhpZSxkZXRlY3RvcjpZT2UsbG9hZGVyOnFPZX0samllPVhPZTt2YXIgRWFlPSJlciIsa1BlPW8odD0+L15ccyplckRpYWdyYW0vLnRlc3QodCksImRldGVjdG9yIiksRVBlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihrYWUoKSxUYWUpKTtyZXR1cm57aWQ6RWFlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxTUGU9e2lkOkVhZSxkZXRlY3RvcjprUGUsbG9hZGVyOkVQZX0sU2FlPVNQZTt2YXIgT3VlPSJnaXRHcmFwaCIsakdlPW8odD0+L15ccypnaXRHcmFwaC8udGVzdCh0KSwiZGV0ZWN0b3IiKSxLR2U9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KEl1ZSgpLE11ZSkpO3JldHVybntpZDpPdWUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLFFHZT17aWQ6T3VlLGRldGVjdG9yOmpHZSxsb2FkZXI6S0dlfSxQdWU9UUdlO3ZhciBmaGU9ImdhbnR0IixGJGU9byh0PT4vXlxzKmdhbnR0Ly50ZXN0KHQpLCJkZXRlY3RvciIpLHokZT1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oaGhlKCksdWhlKSk7cmV0dXJue2lkOmZoZSxkaWFncmFtOnR9fSwibG9hZGVyIiksRyRlPXtpZDpmaGUsZGV0ZWN0b3I6RiRlLGxvYWRlcjp6JGV9LGRoZT1HJGU7dmFyIFRoZT0iaW5mbyIsWSRlPW8odD0+L15ccyppbmZvLy50ZXN0KHQpLCJkZXRlY3RvciIpLHEkZT1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4od2hlKCksYmhlKSk7cmV0dXJue2lkOlRoZSxkaWFncmFtOnR9fSwibG9hZGVyIiksa2hlPXtpZDpUaGUsZGV0ZWN0b3I6WSRlLGxvYWRlcjpxJGV9O3ZhciBNaGU9InBpZSIsc1ZlPW8odD0+L15ccypwaWUvLnRlc3QodCksImRldGVjdG9yIiksb1ZlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihSaGUoKSxOaGUpKTtyZXR1cm57aWQ6TWhlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxJaGU9e2lkOk1oZSxkZXRlY3RvcjpzVmUsbG9hZGVyOm9WZX07dmFyIHFoZT0icXVhZHJhbnRDaGFydCIsU1ZlPW8odD0+L15ccypxdWFkcmFudENoYXJ0Ly50ZXN0KHQpLCJkZXRlY3RvciIpLENWZT1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oWWhlKCksV2hlKSk7cmV0dXJue2lkOnFoZSxkaWFncmFtOnR9fSwibG9hZGVyIiksQVZlPXtpZDpxaGUsZGV0ZWN0b3I6U1ZlLGxvYWRlcjpDVmV9LFhoZT1BVmU7dmFyIHdmZT0ieHljaGFydCIsVVZlPW8odD0+L15ccyp4eWNoYXJ0LWJldGEvLnRlc3QodCksImRldGVjdG9yIiksSFZlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihiZmUoKSx4ZmUpKTtyZXR1cm57aWQ6d2ZlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxXVmU9e2lkOndmZSxkZXRlY3RvcjpVVmUsbG9hZGVyOkhWZX0sVGZlPVdWZTt2YXIgRmZlPSJyZXF1aXJlbWVudCIseFVlPW8odD0+L15ccypyZXF1aXJlbWVudChEaWFncmFtKT8vLnRlc3QodCksImRldGVjdG9yIiksYlVlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihCZmUoKSxQZmUpKTtyZXR1cm57aWQ6RmZlLGRpYWdyYW06dH19LCJsb2FkZXIiKSx3VWU9e2lkOkZmZSxkZXRlY3Rvcjp4VWUsbG9hZGVyOmJVZX0semZlPXdVZTt2YXIgZmRlPSJzZXF1ZW5jZSIsRUhlPW8odD0+L15ccypzZXF1ZW5jZURpYWdyYW0vLnRlc3QodCksImRldGVjdG9yIiksU0hlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihoZGUoKSx1ZGUpKTtyZXR1cm57aWQ6ZmRlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxDSGU9e2lkOmZkZSxkZXRlY3RvcjpFSGUsbG9hZGVyOlNIZX0sZGRlPUNIZTt2YXIgQ2RlPSJjbGFzcyIsaVdlPW8oKHQsZSk9PmU/LmNsYXNzPy5kZWZhdWx0UmVuZGVyZXI9PT0iZGFncmUtd3JhcHBlciI/ITE6L15ccypjbGFzc0RpYWdyYW0vLnRlc3QodCksImRldGVjdG9yIiksYVdlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihTZGUoKSxFZGUpKTtyZXR1cm57aWQ6Q2RlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxzV2U9e2lkOkNkZSxkZXRlY3RvcjppV2UsbG9hZGVyOmFXZX0sQWRlPXNXZTt2YXIgRGRlPSJjbGFzc0RpYWdyYW0iLGxXZT1vKCh0LGUpPT4vXlxzKmNsYXNzRGlhZ3JhbS8udGVzdCh0KSYmZT8uY2xhc3M/LmRlZmF1bHRSZW5kZXJlcj09PSJkYWdyZS13cmFwcGVyIj8hMDovXlxzKmNsYXNzRGlhZ3JhbS12Mi8udGVzdCh0KSwiZGV0ZWN0b3IiKSxjV2U9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KExkZSgpLF9kZSkpO3JldHVybntpZDpEZGUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLHVXZT17aWQ6RGRlLGRldGVjdG9yOmxXZSxsb2FkZXI6Y1dlfSxOZGU9dVdlO3ZhciBUMGU9InN0YXRlIixhWWU9bygodCxlKT0+ZT8uc3RhdGU/LmRlZmF1bHRSZW5kZXJlcj09PSJkYWdyZS13cmFwcGVyIj8hMTovXlxzKnN0YXRlRGlhZ3JhbS8udGVzdCh0KSwiZGV0ZWN0b3IiKSxzWWU9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHcwZSgpLGIwZSkpO3JldHVybntpZDpUMGUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLG9ZZT17aWQ6VDBlLGRldGVjdG9yOmFZZSxsb2FkZXI6c1llfSxrMGU9b1llO3ZhciBDMGU9InN0YXRlRGlhZ3JhbSIsY1llPW8oKHQsZSk9PiEhKC9eXHMqc3RhdGVEaWFncmFtLXYyLy50ZXN0KHQpfHwvXlxzKnN0YXRlRGlhZ3JhbS8udGVzdCh0KSYmZT8uc3RhdGU/LmRlZmF1bHRSZW5kZXJlcj09PSJkYWdyZS13cmFwcGVyIiksImRldGVjdG9yIiksdVllPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihTMGUoKSxFMGUpKTtyZXR1cm57aWQ6QzBlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxoWWU9e2lkOkMwZSxkZXRlY3RvcjpjWWUsbG9hZGVyOnVZZX0sQTBlPWhZZTt2YXIgVTBlPSJqb3VybmV5IixSWWU9byh0PT4vXlxzKmpvdXJuZXkvLnRlc3QodCksImRldGVjdG9yIiksTVllPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihWMGUoKSwkMGUpKTtyZXR1cm57aWQ6VTBlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxJWWU9e2lkOlUwZSxkZXRlY3RvcjpSWWUsbG9hZGVyOk1ZZX0sSDBlPUlZZTt1dCgpO2VoKCk7YWkoKTt2YXIgT1llPW8oKHQsZSxyKT0+e1kuZGVidWcoYHJlbmRlcmluZyBzdmcgZm9yIHN5bnRheCBlcnJvcgpgKTtsZXQgbj1WYShlKSxpPW4uYXBwZW5kKCJnIik7bi5hdHRyKCJ2aWV3Qm94IiwiMCAwIDI0MTIgNTEyIiksWnIobiwxMDAsNTEyLCEwKSxpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDExLjMxMywxMjMuMzEzYzYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNXMtMTYuMzc1LTYuMjUtMjIuNjI1LDBsLTMyLDMyLTkuMzc1LDkuMzc1LTIwLjY4OC0yMC42ODhjLTEyLjQ4NC0xMi41LTMyLjc2Ni0xMi41LTQ1LjI1LDBsLTE2LDE2Yy0xLjI2MSwxLjI2MS0yLjMwNCwyLjY0OC0zLjMxLDQuMDUxLTIxLjczOS04LjU2MS00NS4zMjQtMTMuNDI2LTcwLjA2NS0xMy40MjYtMTA1Ljg2NywwLTE5Miw4Ni4xMzMtMTkyLDE5MnM4Ni4xMzMsMTkyIDE5MiwxOTIgMTkyLTg2LjEzMyAxOTItMTkyYzAtMjQuNzQxLTQuODY0LTQ4LjMyNy0xMy40MjYtNzAuMDY1IDEuNDAyLTEuMDA3IDIuNzktMi4wNDkgNC4wNTEtMy4zMWwxNi0xNmMxMi41LTEyLjQ5MiAxMi41LTMyLjc1OCAwLTQ1LjI1bC0yMC42ODgtMjAuNjg4IDkuMzc1LTkuMzc1IDMyLjAwMS0zMS45OTl6bS0yMTkuMzEzLDEwMC42ODdjLTUyLjkzOCwwLTk2LDQzLjA2My05Niw5NiAwLDguODM2LTcuMTY0LDE2LTE2LDE2cy0xNi03LjE2NC0xNi0xNmMwLTcwLjU3OCA1Ny40MjItMTI4IDEyOC0xMjggOC44MzYsMCAxNiw3LjE2NCAxNiwxNnMtNy4xNjQsMTYtMTYsMTZ6IiksaS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQ1OS4wMiwxNDguOThjLTYuMjUtNi4yNS0xNi4zNzUtNi4yNS0yMi42MjUsMHMtNi4yNSwxNi4zNzUgMCwyMi42MjVsMTYsMTZjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4IDYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNWwtMTYuMDAxLTE2eiIpLGkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm0zNDAuMzk1LDc1LjYwNWMzLjEyNSwzLjEyNSA3LjIxOSw0LjY4OCAxMS4zMTMsNC42ODggNC4wOTQsMCA4LjE4OC0xLjU2MyAxMS4zMTMtNC42ODggNi4yNS02LjI1IDYuMjUtMTYuMzc1IDAtMjIuNjI1bC0xNi0xNmMtNi4yNS02LjI1LTE2LjM3NS02LjI1LTIyLjYyNSwwcy02LjI1LDE2LjM3NSAwLDIyLjYyNWwxNS45OTksMTZ6IiksaS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQwMCw2NGM4Ljg0NCwwIDE2LTcuMTY0IDE2LTE2di0zMmMwLTguODM2LTcuMTU2LTE2LTE2LTE2LTguODQ0LDAtMTYsNy4xNjQtMTYsMTZ2MzJjMCw4LjgzNiA3LjE1NiwxNiAxNiwxNnoiKSxpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDk2LDk2LjU4NmgtMzJjLTguODQ0LDAtMTYsNy4xNjQtMTYsMTYgMCw4LjgzNiA3LjE1NiwxNiAxNiwxNmgzMmM4Ljg0NCwwIDE2LTcuMTY0IDE2LTE2IDAtOC44MzYtNy4xNTYtMTYtMTYtMTZ6IiksaS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQzNi45OCw3NS42MDVjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4bDMyLTMyYzYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNXMtMTYuMzc1LTYuMjUtMjIuNjI1LDBsLTMyLDMyYy02LjI1MSw2LjI1LTYuMjUxLDE2LjM3NS0wLjAwMSwyMi42MjV6IiksaS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImVycm9yLXRleHQiKS5hdHRyKCJ4IiwxNDQwKS5hdHRyKCJ5IiwyNTApLmF0dHIoImZvbnQtc2l6ZSIsIjE1MHB4Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCgiU3ludGF4IGVycm9yIGluIHRleHQiKSxpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItdGV4dCIpLmF0dHIoIngiLDEyNTApLmF0dHIoInkiLDQwMCkuYXR0cigiZm9udC1zaXplIiwiMTAwcHgiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KGBtZXJtYWlkIHZlcnNpb24gJHtyfWApfSwiZHJhdyIpLHhQPXtkcmF3Ok9ZZX0sVzBlPXhQO3ZhciBQWWU9e2RiOnt9LHJlbmRlcmVyOnhQLHBhcnNlcjp7cGFyc2U6bygoKT0+e30sInBhcnNlIil9fSxZMGU9UFllO3ZhciBxMGU9ImZsb3djaGFydC1lbGsiLEJZZT1vKCh0LGU9e30pPT4vXlxzKmZsb3djaGFydC1lbGsvLnRlc3QodCl8fC9eXHMqZmxvd2NoYXJ0fGdyYXBoLy50ZXN0KHQpJiZlPy5mbG93Y2hhcnQ/LmRlZmF1bHRSZW5kZXJlcj09PSJlbGsiPyhlLmxheW91dD0iZWxrIiwhMCk6ITEsImRldGVjdG9yIiksRlllPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihFVCgpLGtUKSk7cmV0dXJue2lkOnEwZSxkaWFncmFtOnR9fSwibG9hZGVyIikselllPXtpZDpxMGUsZGV0ZWN0b3I6QlllLGxvYWRlcjpGWWV9LFgwZT16WWU7dmFyIGJwZT0idGltZWxpbmUiLGlxZT1vKHQ9Pi9eXHMqdGltZWxpbmUvLnRlc3QodCksImRldGVjdG9yIiksYXFlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pih4cGUoKSx2cGUpKTtyZXR1cm57aWQ6YnBlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxzcWU9e2lkOmJwZSxkZXRlY3RvcjppcWUsbG9hZGVyOmFxZX0sd3BlPXNxZTt2YXIgejFlPSJtaW5kbWFwIixwdHQ9byh0PT4vXlxzKm1pbmRtYXAvLnRlc3QodCksImRldGVjdG9yIiksbXR0PW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihGMWUoKSxCMWUpKTtyZXR1cm57aWQ6ejFlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxndHQ9e2lkOnoxZSxkZXRlY3RvcjpwdHQsbG9hZGVyOm10dH0sRzFlPWd0dDt2YXIgWjFlPSJrYW5iYW4iLFJ0dD1vKHQ9Pi9eXHMqa2FuYmFuLy50ZXN0KHQpLCJkZXRlY3RvciIpLE10dD1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oUTFlKCksSzFlKSk7cmV0dXJue2lkOloxZSxkaWFncmFtOnR9fSwibG9hZGVyIiksSXR0PXtpZDpaMWUsZGV0ZWN0b3I6UnR0LGxvYWRlcjpNdHR9LEoxZT1JdHQ7dmFyIFJ5ZT0ic2Fua2V5IixycnQ9byh0PT4vXlxzKnNhbmtleS1iZXRhLy50ZXN0KHQpLCJkZXRlY3RvciIpLG5ydD1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oTnllKCksRHllKSk7cmV0dXJue2lkOlJ5ZSxkaWFncmFtOnR9fSwibG9hZGVyIiksaXJ0PXtpZDpSeWUsZGV0ZWN0b3I6cnJ0LGxvYWRlcjpucnR9LE15ZT1pcnQ7dmFyIFV5ZT0icGFja2V0Iix5cnQ9byh0PT4vXlxzKnBhY2tldC1iZXRhLy50ZXN0KHQpLCJkZXRlY3RvciIpLHZydD1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oVnllKCksJHllKSk7cmV0dXJue2lkOlV5ZSxkaWFncmFtOnR9fSwibG9hZGVyIiksSHllPXtpZDpVeWUsZGV0ZWN0b3I6eXJ0LGxvYWRlcjp2cnR9O3ZhciBxdmU9ImJsb2NrIix6bnQ9byh0PT4vXlxzKmJsb2NrLWJldGEvLnRlc3QodCksImRldGVjdG9yIiksR250PW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihZdmUoKSxXdmUpKTtyZXR1cm57aWQ6cXZlLGRpYWdyYW06dH19LCJsb2FkZXIiKSwkbnQ9e2lkOnF2ZSxkZXRlY3Rvcjp6bnQsbG9hZGVyOkdudH0sWHZlPSRudDt2YXIgeTJlPSJhcmNoaXRlY3R1cmUiLG1pdD1vKHQ9Pi9eXHMqYXJjaGl0ZWN0dXJlLy50ZXN0KHQpLCJkZXRlY3RvciIpLGdpdD1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oZzJlKCksbTJlKSk7cmV0dXJue2lkOnkyZSxkaWFncmFtOnR9fSwibG9hZGVyIikseWl0PXtpZDp5MmUsZGV0ZWN0b3I6bWl0LGxvYWRlcjpnaXR9LHYyZT15aXQ7WmYoKTtWdCgpO3ZhciB4MmU9ITEsejE9bygoKT0+e3gyZXx8KHgyZT0hMCxvZCgiZXJyb3IiLFkwZSx0PT50LnRvTG93ZXJDYXNlKCkudHJpbSgpPT09ImVycm9yIiksb2QoIi0tLSIse2RiOntjbGVhcjpvKCgpPT57fSwiY2xlYXIiKX0sc3R5bGVzOnt9LHJlbmRlcmVyOntkcmF3Om8oKCk9Pnt9LCJkcmF3Iil9LHBhcnNlcjp7cGFyc2U6bygoKT0+e3Rocm93IG5ldyBFcnJvcigiRGlhZ3JhbXMgYmVnaW5uaW5nIHdpdGggLS0tIGFyZSBub3QgdmFsaWQuIElmIHlvdSB3ZXJlIHRyeWluZyB0byB1c2UgYSBZQU1MIGZyb250LW1hdHRlciwgcGxlYXNlIGVuc3VyZSB0aGF0IHlvdSd2ZSBjb3JyZWN0bHkgb3BlbmVkIGFuZCBjbG9zZWQgdGhlIFlBTUwgZnJvbnQtbWF0dGVyIHdpdGggdW4taW5kZW50ZWQgYC0tLWAgYmxvY2tzIil9LCJwYXJzZSIpfSxpbml0Om8oKCk9Pm51bGwsImluaXQiKX0sdD0+dC50b0xvd2VyQ2FzZSgpLnRyaW1TdGFydCgpLnN0YXJ0c1dpdGgoIi0tLSIpKSxaYihVWCxKMWUsTmRlLEFkZSxTYWUsZGhlLGtoZSxJaGUsemZlLGRkZSxYMGUsamllLHFpZSxHMWUsd3BlLFB1ZSxBMGUsazBlLEgwZSxYaGUsTXllLEh5ZSxUZmUsWHZlLHYyZSkpfSwiYWRkRGlhZ3JhbXMiKTt1dCgpO1pmKCk7VnQoKTt2YXIgYjJlPW8oYXN5bmMoKT0+e1kuZGVidWcoIkxvYWRpbmcgcmVnaXN0ZXJlZCBkaWFncmFtcyIpO2xldCBlPShhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoT2JqZWN0LmVudHJpZXMoUWYpLm1hcChhc3luYyhbcix7ZGV0ZWN0b3I6bixsb2FkZXI6aX1dKT0+e2lmKGkpdHJ5e2J5KHIpfWNhdGNoe3RyeXtsZXR7ZGlhZ3JhbTphLGlkOnN9PWF3YWl0IGkoKTtvZChzLGEsbil9Y2F0Y2goYSl7dGhyb3cgWS5lcnJvcihgRmFpbGVkIHRvIGxvYWQgZXh0ZXJuYWwgZGlhZ3JhbSB3aXRoIGtleSAke3J9LiBSZW1vdmluZyBmcm9tIGRldGVjdG9ycy5gKSxkZWxldGUgUWZbcl0sYX19fSkpKS5maWx0ZXIocj0+ci5zdGF0dXM9PT0icmVqZWN0ZWQiKTtpZihlLmxlbmd0aD4wKXtZLmVycm9yKGBGYWlsZWQgdG8gbG9hZCAke2UubGVuZ3RofSBleHRlcm5hbCBkaWFncmFtc2ApO2ZvcihsZXQgciBvZiBlKVkuZXJyb3Iocik7dGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCAke2UubGVuZ3RofSBleHRlcm5hbCBkaWFncmFtc2ApfX0sImxvYWRSZWdpc3RlcmVkRGlhZ3JhbXMiKTt1dCgpO3ByKCk7dmFyIHlTPSJjb21tIix2Uz0icnVsZSIseFM9ImRlY2wiO3ZhciB3MmU9IkBpbXBvcnQiO3ZhciBUMmU9IkBrZXlmcmFtZXMiO3ZhciBrMmU9IkBsYXllciI7dmFyIHZGPU1hdGguYWJzLFBiPVN0cmluZy5mcm9tQ2hhckNvZGU7ZnVuY3Rpb24gYlModCl7cmV0dXJuIHQudHJpbSgpfW8oYlMsInRyaW0iKTtmdW5jdGlvbiBCYih0LGUscil7cmV0dXJuIHQucmVwbGFjZShlLHIpfW8oQmIsInJlcGxhY2UiKTtmdW5jdGlvbiBFMmUodCxlLHIpe3JldHVybiB0LmluZGV4T2YoZSxyKX1vKEUyZSwiaW5kZXhvZiIpO2Z1bmN0aW9uIHNwKHQsZSl7cmV0dXJuIHQuY2hhckNvZGVBdChlKXwwfW8oc3AsImNoYXJhdCIpO2Z1bmN0aW9uIFVmKHQsZSxyKXtyZXR1cm4gdC5zbGljZShlLHIpfW8oVWYsInN1YnN0ciIpO2Z1bmN0aW9uIEVvKHQpe3JldHVybiB0Lmxlbmd0aH1vKEVvLCJzdHJsZW4iKTtmdW5jdGlvbiBTMmUodCl7cmV0dXJuIHQubGVuZ3RofW8oUzJlLCJzaXplb2YiKTtmdW5jdGlvbiBHMSh0LGUpe3JldHVybiBlLnB1c2godCksdH1vKEcxLCJhcHBlbmQiKTt2YXIgd1M9MSwkMT0xLEMyZT0wLHBsPTAsSWk9MCxVMT0iIjtmdW5jdGlvbiBUUyh0LGUscixuLGksYSxzLGwpe3JldHVybnt2YWx1ZTp0LHJvb3Q6ZSxwYXJlbnQ6cix0eXBlOm4scHJvcHM6aSxjaGlsZHJlbjphLGxpbmU6d1MsY29sdW1uOiQxLGxlbmd0aDpzLHJldHVybjoiIixzaWJsaW5nczpsfX1vKFRTLCJub2RlIik7ZnVuY3Rpb24gQTJlKCl7cmV0dXJuIElpfW8oQTJlLCJjaGFyIik7ZnVuY3Rpb24gXzJlKCl7cmV0dXJuIElpPXBsPjA/c3AoVTEsLS1wbCk6MCwkMS0tLElpPT09MTAmJigkMT0xLHdTLS0pLElpfW8oXzJlLCJwcmV2Iik7ZnVuY3Rpb24gbWwoKXtyZXR1cm4gSWk9cGw8QzJlP3NwKFUxLHBsKyspOjAsJDErKyxJaT09PTEwJiYoJDE9MSx3UysrKSxJaX1vKG1sLCJuZXh0Iik7ZnVuY3Rpb24gY2goKXtyZXR1cm4gc3AoVTEscGwpfW8oY2gsInBlZWsiKTtmdW5jdGlvbiBGYigpe3JldHVybiBwbH1vKEZiLCJjYXJldCIpO2Z1bmN0aW9uIGtTKHQsZSl7cmV0dXJuIFVmKFUxLHQsZSl9byhrUywic2xpY2UiKTtmdW5jdGlvbiBWMSh0KXtzd2l0Y2godCl7Y2FzZSAwOmNhc2UgOTpjYXNlIDEwOmNhc2UgMTM6Y2FzZSAzMjpyZXR1cm4gNTtjYXNlIDMzOmNhc2UgNDM6Y2FzZSA0NDpjYXNlIDQ3OmNhc2UgNjI6Y2FzZSA2NDpjYXNlIDEyNjpjYXNlIDU5OmNhc2UgMTIzOmNhc2UgMTI1OnJldHVybiA0O2Nhc2UgNTg6cmV0dXJuIDM7Y2FzZSAzNDpjYXNlIDM5OmNhc2UgNDA6Y2FzZSA5MTpyZXR1cm4gMjtjYXNlIDQxOmNhc2UgOTM6cmV0dXJuIDF9cmV0dXJuIDB9byhWMSwidG9rZW4iKTtmdW5jdGlvbiBMMmUodCl7cmV0dXJuIHdTPSQxPTEsQzJlPUVvKFUxPXQpLHBsPTAsW119byhMMmUsImFsbG9jIik7ZnVuY3Rpb24gRDJlKHQpe3JldHVybiBVMT0iIix0fW8oRDJlLCJkZWFsbG9jIik7ZnVuY3Rpb24gRVModCl7cmV0dXJuIGJTKGtTKHBsLTEseEYodD09PTkxP3QrMjp0PT09NDA/dCsxOnQpKSl9byhFUywiZGVsaW1pdCIpO2Z1bmN0aW9uIE4yZSh0KXtmb3IoOyhJaT1jaCgpKSYmSWk8MzM7KW1sKCk7cmV0dXJuIFYxKHQpPjJ8fFYxKElpKT4zPyIiOiIgIn1vKE4yZSwid2hpdGVzcGFjZSIpO2Z1bmN0aW9uIFIyZSh0LGUpe2Zvcig7LS1lJiZtbCgpJiYhKElpPDQ4fHxJaT4xMDJ8fElpPjU3JiZJaTw2NXx8SWk+NzAmJklpPDk3KTspO3JldHVybiBrUyh0LEZiKCkrKGU8NiYmY2goKT09MzImJm1sKCk9PTMyKSl9byhSMmUsImVzY2FwaW5nIik7ZnVuY3Rpb24geEYodCl7Zm9yKDttbCgpOylzd2l0Y2goSWkpe2Nhc2UgdDpyZXR1cm4gcGw7Y2FzZSAzNDpjYXNlIDM5OnQhPT0zNCYmdCE9PTM5JiZ4RihJaSk7YnJlYWs7Y2FzZSA0MDp0PT09NDEmJnhGKHQpO2JyZWFrO2Nhc2UgOTI6bWwoKTticmVha31yZXR1cm4gcGx9byh4RiwiZGVsaW1pdGVyIik7ZnVuY3Rpb24gTTJlKHQsZSl7Zm9yKDttbCgpJiZ0K0lpIT09NTc7KWlmKHQrSWk9PT04NCYmY2goKT09PTQ3KWJyZWFrO3JldHVybiIvKiIra1MoZSxwbC0xKSsiKiIrUGIodD09PTQ3P3Q6bWwoKSl9byhNMmUsImNvbW1lbnRlciIpO2Z1bmN0aW9uIEkyZSh0KXtmb3IoOyFWMShjaCgpKTspbWwoKTtyZXR1cm4ga1ModCxwbCl9byhJMmUsImlkZW50aWZpZXIiKTtmdW5jdGlvbiBCMmUodCl7cmV0dXJuIEQyZShTUygiIixudWxsLG51bGwsbnVsbCxbIiJdLHQ9TDJlKHQpLDAsWzBdLHQpKX1vKEIyZSwiY29tcGlsZSIpO2Z1bmN0aW9uIFNTKHQsZSxyLG4saSxhLHMsbCx1KXtmb3IodmFyIGg9MCxmPTAsZD1zLHA9MCxtPTAsZz0wLHk9MSx2PTEseD0xLGI9MCx3PSIiLF89aSxUPWEsRT1uLEw9dzt2Oylzd2l0Y2goZz1iLGI9bWwoKSl7Y2FzZSA0MDppZihnIT0xMDgmJnNwKEwsZC0xKT09NTgpe0UyZShMKz1CYihFUyhiKSwiJiIsIiZcZiIpLCImXGYiLHZGKGg/bFtoLTFdOjApKSE9LTEmJih4PS0xKTticmVha31jYXNlIDM0OmNhc2UgMzk6Y2FzZSA5MTpMKz1FUyhiKTticmVhaztjYXNlIDk6Y2FzZSAxMDpjYXNlIDEzOmNhc2UgMzI6TCs9TjJlKGcpO2JyZWFrO2Nhc2UgOTI6TCs9UjJlKEZiKCktMSw3KTtjb250aW51ZTtjYXNlIDQ3OnN3aXRjaChjaCgpKXtjYXNlIDQyOmNhc2UgNDc6RzEodml0KE0yZShtbCgpLEZiKCkpLGUscix1KSx1KSwoVjEoZ3x8MSk9PTV8fFYxKGNoKCl8fDEpPT01KSYmRW8oTCkmJlVmKEwsLTEsdm9pZCAwKSE9PSIgIiYmKEwrPSIgIik7YnJlYWs7ZGVmYXVsdDpMKz0iLyJ9YnJlYWs7Y2FzZSAxMjMqeTpsW2grK109RW8oTCkqeDtjYXNlIDEyNSp5OmNhc2UgNTk6Y2FzZSAwOnN3aXRjaChiKXtjYXNlIDA6Y2FzZSAxMjU6dj0wO2Nhc2UgNTkrZjp4PT0tMSYmKEw9QmIoTCwvXGYvZywiIikpLG0+MCYmKEVvKEwpLWR8fHk9PT0wJiZnPT09NDcpJiZHMShtPjMyP1AyZShMKyI7IixuLHIsZC0xLHUpOlAyZShCYihMLCIgIiwiIikrIjsiLG4scixkLTIsdSksdSk7YnJlYWs7Y2FzZSA1OTpMKz0iOyI7ZGVmYXVsdDppZihHMShFPU8yZShMLGUscixoLGYsaSxsLHcsXz1bXSxUPVtdLGQsYSksYSksYj09PTEyMylpZihmPT09MClTUyhMLGUsRSxFLF8sYSxkLGwsVCk7ZWxzZSBzd2l0Y2gocD09PTk5JiZzcChMLDMpPT09MTEwPzEwMDpwKXtjYXNlIDEwMDpjYXNlIDEwODpjYXNlIDEwOTpjYXNlIDExNTpTUyh0LEUsRSxuJiZHMShPMmUodCxFLEUsMCwwLGksbCx3LGksXz1bXSxkLFQpLFQpLGksVCxkLGwsbj9fOlQpO2JyZWFrO2RlZmF1bHQ6U1MoTCxFLEUsRSxbIiJdLFQsMCxsLFQpfX1oPWY9bT0wLHk9eD0xLHc9TD0iIixkPXM7YnJlYWs7Y2FzZSA1ODpkPTErRW8oTCksbT1nO2RlZmF1bHQ6aWYoeTwxKXtpZihiPT0xMjMpLS15O2Vsc2UgaWYoYj09MTI1JiZ5Kys9PTAmJl8yZSgpPT0xMjUpY29udGludWV9c3dpdGNoKEwrPVBiKGIpLGIqeSl7Y2FzZSAzODp4PWY+MD8xOihMKz0iXGYiLC0xKTticmVhaztjYXNlIDQ0OmxbaCsrXT0oRW8oTCktMSkqeCx4PTE7YnJlYWs7Y2FzZSA2NDpjaCgpPT09NDUmJihMKz1FUyhtbCgpKSkscD1jaCgpLGY9ZD1Fbyh3PUwrPUkyZShGYigpKSksYisrO2JyZWFrO2Nhc2UgNDU6Zz09PTQ1JiZFbyhMKT09MiYmKHk9MCl9fXJldHVybiBhfW8oU1MsInBhcnNlIik7ZnVuY3Rpb24gTzJlKHQsZSxyLG4saSxhLHMsbCx1LGgsZixkKXtmb3IodmFyIHA9aS0xLG09aT09PTA/YTpbIiJdLGc9UzJlKG0pLHk9MCx2PTAseD0wO3k8bjsrK3kpZm9yKHZhciBiPTAsdz1VZih0LHArMSxwPXZGKHY9c1t5XSkpLF89dDtiPGc7KytiKShfPWJTKHY+MD9tW2JdKyIgIit3OkJiKHcsLyZcZi9nLG1bYl0pKSkmJih1W3grK109Xyk7cmV0dXJuIFRTKHQsZSxyLGk9PT0wP3ZTOmwsdSxoLGYsZCl9byhPMmUsInJ1bGVzZXQiKTtmdW5jdGlvbiB2aXQodCxlLHIsbil7cmV0dXJuIFRTKHQsZSxyLHlTLFBiKEEyZSgpKSxVZih0LDIsLTIpLDAsbil9byh2aXQsImNvbW1lbnQiKTtmdW5jdGlvbiBQMmUodCxlLHIsbixpKXtyZXR1cm4gVFModCxlLHIseFMsVWYodCwwLG4pLFVmKHQsbisxLC0xKSxuLGkpfW8oUDJlLCJkZWNsYXJhdGlvbiIpO2Z1bmN0aW9uIENTKHQsZSl7Zm9yKHZhciByPSIiLG49MDtuPHQubGVuZ3RoO24rKylyKz1lKHRbbl0sbix0LGUpfHwiIjtyZXR1cm4gcn1vKENTLCJzZXJpYWxpemUiKTtmdW5jdGlvbiBGMmUodCxlLHIsbil7c3dpdGNoKHQudHlwZSl7Y2FzZSBrMmU6aWYodC5jaGlsZHJlbi5sZW5ndGgpYnJlYWs7Y2FzZSB3MmU6Y2FzZSB4UzpyZXR1cm4gdC5yZXR1cm49dC5yZXR1cm58fHQudmFsdWU7Y2FzZSB5UzpyZXR1cm4iIjtjYXNlIFQyZTpyZXR1cm4gdC5yZXR1cm49dC52YWx1ZSsieyIrQ1ModC5jaGlsZHJlbixuKSsifSI7Y2FzZSB2UzppZighRW8odC52YWx1ZT10LnByb3BzLmpvaW4oIiwiKSkpcmV0dXJuIiJ9cmV0dXJuIEVvKHI9Q1ModC5jaGlsZHJlbixuKSk/dC5yZXR1cm49dC52YWx1ZSsieyIrcisifSI6IiJ9byhGMmUsInN0cmluZ2lmeSIpO3ZhciBqMmU9SmkobEMoKSwxKTtsVCgpO3RPKCk7dmFyIHhpdD0iZ3JhcGhpY3MtZG9jdW1lbnQgZG9jdW1lbnQiO2Z1bmN0aW9uIHoyZSh0LGUpe3QuYXR0cigicm9sZSIseGl0KSxlIT09IiImJnQuYXR0cigiYXJpYS1yb2xlZGVzY3JpcHRpb24iLGUpfW8oejJlLCJzZXRBMTF5RGlhZ3JhbUluZm8iKTtmdW5jdGlvbiBHMmUodCxlLHIsbil7aWYodC5pbnNlcnQhPT12b2lkIDApe2lmKHIpe2xldCBpPWBjaGFydC1kZXNjLSR7bn1gO3QuYXR0cigiYXJpYS1kZXNjcmliZWRieSIsaSksdC5pbnNlcnQoImRlc2MiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJpZCIsaSkudGV4dChyKX1pZihlKXtsZXQgaT1gY2hhcnQtdGl0bGUtJHtufWA7dC5hdHRyKCJhcmlhLWxhYmVsbGVkYnkiLGkpLHQuaW5zZXJ0KCJ0aXRsZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImlkIixpKS50ZXh0KGUpfX19byhHMmUsImFkZFNWR2ExMXlUaXRsZURlc2NyaXB0aW9uIik7Z3AoKTtaYSgpO1phKCk7VnQoKTtaZigpOyRTKCk7aHIoKTt2YXIgSDE9Y2xhc3MgdHtjb25zdHJ1Y3RvcihlLHIsbixpLGEpe3RoaXMudHlwZT1lO3RoaXMudGV4dD1yO3RoaXMuZGI9bjt0aGlzLnBhcnNlcj1pO3RoaXMucmVuZGVyZXI9YX1zdGF0aWN7byh0aGlzLCJEaWFncmFtIil9c3RhdGljIGFzeW5jIGZyb21UZXh0KGUscj17fSl7bGV0IG49Q3IoKSxpPW1wKGUsbik7ZT1OWChlKStgCmA7dHJ5e2J5KGkpfWNhdGNoe2xldCBoPXN6KGkpO2lmKCFoKXRocm93IG5ldyBwcChgRGlhZ3JhbSAke2l9IG5vdCBmb3VuZC5gKTtsZXR7aWQ6ZixkaWFncmFtOmR9PWF3YWl0IGgoKTtvZChmLGQpfWxldHtkYjphLHBhcnNlcjpzLHJlbmRlcmVyOmwsaW5pdDp1fT1ieShpKTtyZXR1cm4gcy5wYXJzZXImJihzLnBhcnNlci55eT1hKSxhLmNsZWFyPy4oKSx1Py4obiksci50aXRsZSYmYS5zZXREaWFncmFtVGl0bGU/LihyLnRpdGxlKSxhd2FpdCBzLnBhcnNlKGUpLG5ldyB0KGksZSxhLHMsbCl9YXN5bmMgcmVuZGVyKGUscil7YXdhaXQgdGhpcy5yZW5kZXJlci5kcmF3KHRoaXMudGV4dCxlLHIsdGhpcyl9Z2V0UGFyc2VyKCl7cmV0dXJuIHRoaXMucGFyc2VyfWdldFR5cGUoKXtyZXR1cm4gdGhpcy50eXBlfX07ZnIoKTt2YXIgJDJlPVtdO3ZhciBWMmU9bygoKT0+eyQyZS5mb3JFYWNoKHQ9Pnt0KCl9KSwkMmU9W119LCJhdHRhY2hGdW5jdGlvbnMiKTt1dCgpO3ZhciBVMmU9byh0PT50LnJlcGxhY2UoL15ccyolJSg/IXspW15cbl0rXG4/L2dtLCIiKS50cmltU3RhcnQoKSwiY2xlYW51cENvbW1lbnRzIik7UWIoKTtldygpO2Z1bmN0aW9uIEgyZSh0KXtsZXQgZT10Lm1hdGNoKEtiKTtpZighZSlyZXR1cm57dGV4dDp0LG1ldGFkYXRhOnt9fTtsZXQgcj1TbShlWzFdLHtzY2hlbWE6RW19KT8/e307cj10eXBlb2Ygcj09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KHIpP3I6e307bGV0IG49e307cmV0dXJuIHIuZGlzcGxheU1vZGUmJihuLmRpc3BsYXlNb2RlPXIuZGlzcGxheU1vZGUudG9TdHJpbmcoKSksci50aXRsZSYmKG4udGl0bGU9ci50aXRsZS50b1N0cmluZygpKSxyLmNvbmZpZyYmKG4uY29uZmlnPXIuY29uZmlnKSx7dGV4dDp0LnNsaWNlKGVbMF0ubGVuZ3RoKSxtZXRhZGF0YTpufX1vKEgyZSwiZXh0cmFjdEZyb250TWF0dGVyIik7aHIoKTt2YXIgYml0PW8odD0+dC5yZXBsYWNlKC9cclxuPy9nLGAKYCkucmVwbGFjZSgvPChcdyspKFtePl0qKT4vZywoZSxyLG4pPT4iPCIrcituLnJlcGxhY2UoLz0iKFteIl0qKSIvZywiPSckMSciKSsiPiIpLCJjbGVhbnVwVGV4dCIpLHdpdD1vKHQ9PntsZXR7dGV4dDplLG1ldGFkYXRhOnJ9PUgyZSh0KSx7ZGlzcGxheU1vZGU6bix0aXRsZTppLGNvbmZpZzphPXt9fT1yO3JldHVybiBuJiYoYS5nYW50dHx8KGEuZ2FudHQ9e30pLGEuZ2FudHQuZGlzcGxheU1vZGU9bikse3RpdGxlOmksY29uZmlnOmEsdGV4dDplfX0sInByb2Nlc3NGcm9udG1hdHRlciIpLFRpdD1vKHQ9PntsZXQgZT1VdC5kZXRlY3RJbml0KHQpPz97fSxyPVV0LmRldGVjdERpcmVjdGl2ZSh0LCJ3cmFwIik7cmV0dXJuIEFycmF5LmlzQXJyYXkocik/ZS53cmFwPXIuc29tZSgoe3R5cGU6bn0pPT5uPT09IndyYXAiKTpyPy50eXBlPT09IndyYXAiJiYoZS53cmFwPSEwKSx7dGV4dDpMWCh0KSxkaXJlY3RpdmU6ZX19LCJwcm9jZXNzRGlyZWN0aXZlcyIpO2Z1bmN0aW9uIGJGKHQpe2xldCBlPWJpdCh0KSxyPXdpdChlKSxuPVRpdChyLnRleHQpLGk9RHMoci5jb25maWcsbi5kaXJlY3RpdmUpO3JldHVybiB0PVUyZShuLnRleHQpLHtjb2RlOnQsdGl0bGU6ci50aXRsZSxjb25maWc6aX19byhiRiwicHJlcHJvY2Vzc0RpYWdyYW0iKTtKQygpO2E0KCk7aHIoKTtmdW5jdGlvbiBXMmUodCl7bGV0IGU9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHQpLHI9QXJyYXkuZnJvbShlLG49PlN0cmluZy5mcm9tQ29kZVBvaW50KG4pKS5qb2luKCIiKTtyZXR1cm4gYnRvYShyKX1vKFcyZSwidG9CYXNlNjQiKTt2YXIga2l0PTVlNCxFaXQ9ImdyYXBoIFRCO2FbTWF4aW11bSB0ZXh0IHNpemUgaW4gZGlhZ3JhbSBleGNlZWRlZF07c3R5bGUgYSBmaWxsOiNmYWEiLFNpdD0ic2FuZGJveCIsQ2l0PSJsb29zZSIsQWl0PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsX2l0PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIixMaXQ9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLERpdD0iMTAwJSIsTml0PSIxMDAlIixSaXQ9ImJvcmRlcjowO21hcmdpbjowOyIsTWl0PSJtYXJnaW46MCIsSWl0PSJhbGxvdy10b3AtbmF2aWdhdGlvbi1ieS11c2VyLWFjdGl2YXRpb24gYWxsb3ctcG9wdXBzIixPaXQ9J1RoZSAiaWZyYW1lIiB0YWcgaXMgbm90IHN1cHBvcnRlZCBieSB5b3VyIGJyb3dzZXIuJyxQaXQ9WyJmb3JlaWdub2JqZWN0Il0sQml0PVsiZG9taW5hbnQtYmFzZWxpbmUiXTtmdW5jdGlvbiBLMmUodCl7bGV0IGU9YkYodCk7cmV0dXJuIGx5KCksZUcoZS5jb25maWc/P3t9KSxlfW8oSzJlLCJwcm9jZXNzQW5kU2V0Q29uZmlncyIpO2FzeW5jIGZ1bmN0aW9uIEZpdCh0LGUpe3oxKCk7dHJ5e2xldHtjb2RlOnIsY29uZmlnOm59PUsyZSh0KTtyZXR1cm57ZGlhZ3JhbVR5cGU6KGF3YWl0IFEyZShyKSkudHlwZSxjb25maWc6bn19Y2F0Y2gocil7aWYoZT8uc3VwcHJlc3NFcnJvcnMpcmV0dXJuITE7dGhyb3cgcn19byhGaXQsInBhcnNlIik7dmFyIFkyZT1vKCh0LGUscj1bXSk9PmAKLiR7dH0gJHtlfSB7ICR7ci5qb2luKCIgIWltcG9ydGFudDsgIil9ICFpbXBvcnRhbnQ7IH1gLCJjc3NJbXBvcnRhbnRTdHlsZXMiKSx6aXQ9bygodCxlPW5ldyBNYXApPT57bGV0IHI9IiI7aWYodC50aGVtZUNTUyE9PXZvaWQgMCYmKHIrPWAKJHt0LnRoZW1lQ1NTfWApLHQuZm9udEZhbWlseSE9PXZvaWQgMCYmKHIrPWAKOnJvb3QgeyAtLW1lcm1haWQtZm9udC1mYW1pbHk6ICR7dC5mb250RmFtaWx5fX1gKSx0LmFsdEZvbnRGYW1pbHkhPT12b2lkIDAmJihyKz1gCjpyb290IHsgLS1tZXJtYWlkLWFsdC1mb250LWZhbWlseTogJHt0LmFsdEZvbnRGYW1pbHl9fWApLGUgaW5zdGFuY2VvZiBNYXApe2xldCBzPXQuaHRtbExhYmVscz8/dC5mbG93Y2hhcnQ/Lmh0bWxMYWJlbHM/WyI+ICoiLCJzcGFuIl06WyJyZWN0IiwicG9seWdvbiIsImVsbGlwc2UiLCJjaXJjbGUiLCJwYXRoIl07ZS5mb3JFYWNoKGw9PntjcihsLnN0eWxlcyl8fHMuZm9yRWFjaCh1PT57cis9WTJlKGwuaWQsdSxsLnN0eWxlcyl9KSxjcihsLnRleHRTdHlsZXMpfHwocis9WTJlKGwuaWQsInRzcGFuIiwobD8udGV4dFN0eWxlc3x8W10pLm1hcCh1PT51LnJlcGxhY2UoImNvbG9yIiwiZmlsbCIpKSkpfSl9cmV0dXJuIHJ9LCJjcmVhdGVDc3NTdHlsZXMiKSxHaXQ9bygodCxlLHIsbik9PntsZXQgaT16aXQodCxyKSxhPU8kKGUsaSx0LnRoZW1lVmFyaWFibGVzKTtyZXR1cm4gQ1MoQjJlKGAke259eyR7YX19YCksRjJlKX0sImNyZWF0ZVVzZXJTdHlsZXMiKSwkaXQ9bygodD0iIixlLHIpPT57bGV0IG49dDtyZXR1cm4hciYmIWUmJihuPW4ucmVwbGFjZSgvbWFya2VyLWVuZD0idXJsXChbXGQrLi86PT9BLVphLXotXSo/Iy9nLCdtYXJrZXItZW5kPSJ1cmwoIycpKSxuPU1hKG4pLG49bi5yZXBsYWNlKC88YnI+L2csIjxici8+Iiksbn0sImNsZWFuVXBTdmdDb2RlIiksVml0PW8oKHQ9IiIsZSk9PntsZXQgcj1lPy52aWV3Qm94Py5iYXNlVmFsPy5oZWlnaHQ/ZS52aWV3Qm94LmJhc2VWYWwuaGVpZ2h0KyJweCI6Tml0LG49VzJlKGA8Ym9keSBzdHlsZT0iJHtNaXR9Ij4ke3R9PC9ib2R5PmApO3JldHVybmA8aWZyYW1lIHN0eWxlPSJ3aWR0aDoke0RpdH07aGVpZ2h0OiR7cn07JHtSaXR9IiBzcmM9ImRhdGE6dGV4dC9odG1sO2NoYXJzZXQ9VVRGLTg7YmFzZTY0LCR7bn0iIHNhbmRib3g9IiR7SWl0fSI+CiAgJHtPaXR9CjwvaWZyYW1lPmB9LCJwdXRJbnRvSUZyYW1lIikscTJlPW8oKHQsZSxyLG4saSk9PntsZXQgYT10LmFwcGVuZCgiZGl2Iik7YS5hdHRyKCJpZCIsciksbiYmYS5hdHRyKCJzdHlsZSIsbik7bGV0IHM9YS5hcHBlbmQoInN2ZyIpLmF0dHIoImlkIixlKS5hdHRyKCJ3aWR0aCIsIjEwMCUiKS5hdHRyKCJ4bWxucyIsQWl0KTtyZXR1cm4gaSYmcy5hdHRyKCJ4bWxuczp4bGluayIsaSkscy5hcHBlbmQoImciKSx0fSwiYXBwZW5kRGl2U3ZnRyIpO2Z1bmN0aW9uIFgyZSh0LGUpe3JldHVybiB0LmFwcGVuZCgiaWZyYW1lIikuYXR0cigiaWQiLGUpLmF0dHIoInN0eWxlIiwid2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsiKS5hdHRyKCJzYW5kYm94IiwiIil9byhYMmUsInNhbmRib3hlZElmcmFtZSIpO3ZhciBVaXQ9bygodCxlLHIsbik9Pnt0LmdldEVsZW1lbnRCeUlkKGUpPy5yZW1vdmUoKSx0LmdldEVsZW1lbnRCeUlkKHIpPy5yZW1vdmUoKSx0LmdldEVsZW1lbnRCeUlkKG4pPy5yZW1vdmUoKX0sInJlbW92ZUV4aXN0aW5nRWxlbWVudHMiKSxIaXQ9byhhc3luYyBmdW5jdGlvbih0LGUscil7ejEoKTtsZXQgbj1LMmUoZSk7ZT1uLmNvZGU7bGV0IGk9Q3IoKTtZLmRlYnVnKGkpLGUubGVuZ3RoPihpPy5tYXhUZXh0U2l6ZT8/a2l0KSYmKGU9RWl0KTtsZXQgYT0iIyIrdCxzPSJpIit0LGw9IiMiK3MsdT0iZCIrdCxoPSIjIit1LGY9bygoKT0+e2xldCBSPVZlKHA/bDpoKS5ub2RlKCk7UiYmInJlbW92ZSJpbiBSJiZSLnJlbW92ZSgpfSwicmVtb3ZlVGVtcEVsZW1lbnRzIiksZD1WZSgiYm9keSIpLHA9aS5zZWN1cml0eUxldmVsPT09U2l0LG09aS5zZWN1cml0eUxldmVsPT09Q2l0LGc9aS5mb250RmFtaWx5O2lmKHIhPT12b2lkIDApe2lmKHImJihyLmlubmVySFRNTD0iIikscCl7bGV0IGs9WDJlKFZlKHIpLHMpO2Q9VmUoay5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KSxkLm5vZGUoKS5zdHlsZS5tYXJnaW49MH1lbHNlIGQ9VmUocik7cTJlKGQsdCx1LGBmb250LWZhbWlseTogJHtnfWAsX2l0KX1lbHNle2lmKFVpdChkb2N1bWVudCx0LHUscykscCl7bGV0IGs9WDJlKFZlKCJib2R5Iikscyk7ZD1WZShrLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpLGQubm9kZSgpLnN0eWxlLm1hcmdpbj0wfWVsc2UgZD1WZSgiYm9keSIpO3EyZShkLHQsdSl9bGV0IHksdjt0cnl7eT1hd2FpdCBIMS5mcm9tVGV4dChlLHt0aXRsZTpuLnRpdGxlfSl9Y2F0Y2goayl7aWYoaS5zdXBwcmVzc0Vycm9yUmVuZGVyaW5nKXRocm93IGYoKSxrO3k9YXdhaXQgSDEuZnJvbVRleHQoImVycm9yIiksdj1rfWxldCB4PWQuc2VsZWN0KGgpLm5vZGUoKSxiPXkudHlwZSx3PXguZmlyc3RDaGlsZCxfPXcuZmlyc3RDaGlsZCxUPXkucmVuZGVyZXIuZ2V0Q2xhc3Nlcz8uKGUseSksRT1HaXQoaSxiLFQsYSksTD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO0wuaW5uZXJIVE1MPUUsdy5pbnNlcnRCZWZvcmUoTCxfKTt0cnl7YXdhaXQgeS5yZW5kZXJlci5kcmF3KGUsdCxfeCx5KX1jYXRjaChrKXt0aHJvdyBpLnN1cHByZXNzRXJyb3JSZW5kZXJpbmc/ZigpOlcwZS5kcmF3KGUsdCxfeCksa31sZXQgUz1kLnNlbGVjdChgJHtofSBzdmdgKSxBPXkuZGIuZ2V0QWNjVGl0bGU/LigpLEk9eS5kYi5nZXRBY2NEZXNjcmlwdGlvbj8uKCk7WWl0KGIsUyxBLEkpLGQuc2VsZWN0KGBbaWQ9IiR7dH0iXWApLnNlbGVjdEFsbCgiZm9yZWlnbm9iamVjdCA+ICoiKS5hdHRyKCJ4bWxucyIsTGl0KTtsZXQgRD1kLnNlbGVjdChoKS5ub2RlKCkuaW5uZXJIVE1MO2lmKFkuZGVidWcoImNvbmZpZy5hcnJvd01hcmtlckFic29sdXRlIixpLmFycm93TWFya2VyQWJzb2x1dGUpLEQ9JGl0KEQscCx4cihpLmFycm93TWFya2VyQWJzb2x1dGUpKSxwKXtsZXQgaz1kLnNlbGVjdChoKyIgc3ZnIikubm9kZSgpO0Q9Vml0KEQsayl9ZWxzZSBtfHwoRD1qMmUuZGVmYXVsdC5zYW5pdGl6ZShELHtBRERfVEFHUzpQaXQsQUREX0FUVFI6Qml0fSkpO2lmKFYyZSgpLHYpdGhyb3cgdjtyZXR1cm4gZigpLHtkaWFncmFtVHlwZTpiLHN2ZzpELGJpbmRGdW5jdGlvbnM6eS5kYi5iaW5kRnVuY3Rpb25zfX0sInJlbmRlciIpO2Z1bmN0aW9uIFdpdCh0PXt9KXtsZXQgZT1Wbih7fSx0KTtlPy5mb250RmFtaWx5JiYhZS50aGVtZVZhcmlhYmxlcz8uZm9udEZhbWlseSYmKGUudGhlbWVWYXJpYWJsZXN8fChlLnRoZW1lVmFyaWFibGVzPXt9KSxlLnRoZW1lVmFyaWFibGVzLmZvbnRGYW1pbHk9ZS5mb250RmFtaWx5KSxReihlKSxlPy50aGVtZSYmZS50aGVtZSBpbiBEbz9lLnRoZW1lVmFyaWFibGVzPURvW2UudGhlbWVdLmdldFRoZW1lVmFyaWFibGVzKGUudGhlbWVWYXJpYWJsZXMpOmUmJihlLnRoZW1lVmFyaWFibGVzPURvLmRlZmF1bHQuZ2V0VGhlbWVWYXJpYWJsZXMoZS50aGVtZVZhcmlhYmxlcykpO2xldCByPXR5cGVvZiBlPT0ib2JqZWN0Ij9pQyhlKTphQygpO0oxKHIubG9nTGV2ZWwpLHoxKCl9byhXaXQsImluaXRpYWxpemUiKTt2YXIgUTJlPW8oKHQsZT17fSk9PntsZXR7Y29kZTpyfT1iRih0KTtyZXR1cm4gSDEuZnJvbVRleHQocixlKX0sImdldERpYWdyYW1Gcm9tVGV4dCIpO2Z1bmN0aW9uIFlpdCh0LGUscixuKXt6MmUoZSx0KSxHMmUoZSxyLG4sZS5hdHRyKCJpZCIpKX1vKFlpdCwiYWRkQTExeUluZm8iKTt2YXIgSGY9T2JqZWN0LmZyZWV6ZSh7cmVuZGVyOkhpdCxwYXJzZTpGaXQsZ2V0RGlhZ3JhbUZyb21UZXh0OlEyZSxpbml0aWFsaXplOldpdCxnZXRDb25maWc6Q3Isc2V0Q29uZmlnOm80LGdldFNpdGVDb25maWc6YUMsdXBkYXRlU2l0ZUNvbmZpZzpaeixyZXNldDpvKCgpPT57bHkoKX0sInJlc2V0IiksZ2xvYmFsUmVzZXQ6bygoKT0+e2x5KHBoKX0sImdsb2JhbFJlc2V0IiksZGVmYXVsdENvbmZpZzpwaH0pO0oxKENyKCkubG9nTGV2ZWwpO2x5KENyKCkpO0p2KCk7aHIoKTt2YXIgcWl0PW8oKHQsZSxyKT0+e1kud2Fybih0KSxzOSh0KT8ociYmcih0LnN0cix0Lmhhc2gpLGUucHVzaCh7Li4udCxtZXNzYWdlOnQuc3RyLGVycm9yOnR9KSk6KHImJnIodCksdCBpbnN0YW5jZW9mIEVycm9yJiZlLnB1c2goe3N0cjp0Lm1lc3NhZ2UsbWVzc2FnZTp0Lm1lc3NhZ2UsaGFzaDp0Lm5hbWUsZXJyb3I6dH0pKX0sImhhbmRsZUVycm9yIiksWjJlPW8oYXN5bmMgZnVuY3Rpb24odD17cXVlcnlTZWxlY3RvcjoiLm1lcm1haWQifSl7dHJ5e2F3YWl0IFhpdCh0KX1jYXRjaChlKXtpZihzOShlKSYmWS5lcnJvcihlLnN0ciksdWgucGFyc2VFcnJvciYmdWgucGFyc2VFcnJvcihlKSwhdC5zdXBwcmVzc0Vycm9ycyl0aHJvdyBZLmVycm9yKCJVc2UgdGhlIHN1cHByZXNzRXJyb3JzIG9wdGlvbiB0byBzdXBwcmVzcyB0aGVzZSBlcnJvcnMiKSxlfX0sInJ1biIpLFhpdD1vKGFzeW5jIGZ1bmN0aW9uKHtwb3N0UmVuZGVyQ2FsbGJhY2s6dCxxdWVyeVNlbGVjdG9yOmUsbm9kZXM6cn09e3F1ZXJ5U2VsZWN0b3I6Ii5tZXJtYWlkIn0pe2xldCBuPUhmLmdldENvbmZpZygpO1kuZGVidWcoYCR7dD8iIjoiTm8gIn1DYWxsYmFjayBmdW5jdGlvbiBmb3VuZGApO2xldCBpO2lmKHIpaT1yO2Vsc2UgaWYoZSlpPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIk5vZGVzIGFuZCBxdWVyeVNlbGVjdG9yIGFyZSBib3RoIHVuZGVmaW5lZCIpO1kuZGVidWcoYEZvdW5kICR7aS5sZW5ndGh9IGRpYWdyYW1zYCksbj8uc3RhcnRPbkxvYWQhPT12b2lkIDAmJihZLmRlYnVnKCJTdGFydCBPbiBMb2FkOiAiK24/LnN0YXJ0T25Mb2FkKSxIZi51cGRhdGVTaXRlQ29uZmlnKHtzdGFydE9uTG9hZDpuPy5zdGFydE9uTG9hZH0pKTtsZXQgYT1uZXcgVXQuSW5pdElER2VuZXJhdG9yKG4uZGV0ZXJtaW5pc3RpY0lkcyxuLmRldGVybWluaXN0aWNJRFNlZWQpLHMsbD1bXTtmb3IobGV0IHUgb2YgQXJyYXkuZnJvbShpKSl7WS5pbmZvKCJSZW5kZXJpbmcgZGlhZ3JhbTogIit1LmlkKTtpZih1LmdldEF0dHJpYnV0ZSgiZGF0YS1wcm9jZXNzZWQiKSljb250aW51ZTt1LnNldEF0dHJpYnV0ZSgiZGF0YS1wcm9jZXNzZWQiLCJ0cnVlIik7bGV0IGg9YG1lcm1haWQtJHthLm5leHQoKX1gO3M9dS5pbm5lckhUTUwscz1qYihVdC5lbnRpdHlEZWNvZGUocykpLnRyaW0oKS5yZXBsYWNlKC88YnJccypcLz8+L2dpLCI8YnIvPiIpO2xldCBmPVV0LmRldGVjdEluaXQocyk7ZiYmWS5kZWJ1ZygiRGV0ZWN0ZWQgZWFybHkgcmVpbml0OiAiLGYpO3RyeXtsZXR7c3ZnOmQsYmluZEZ1bmN0aW9uczpwfT1hd2FpdCByeGUoaCxzLHUpO3UuaW5uZXJIVE1MPWQsdCYmYXdhaXQgdChoKSxwJiZwKHUpfWNhdGNoKGQpe3FpdChkLGwsdWgucGFyc2VFcnJvcil9fWlmKGwubGVuZ3RoPjApdGhyb3cgbFswXX0sInJ1blRocm93c0Vycm9ycyIpLEoyZT1vKGZ1bmN0aW9uKHQpe0hmLmluaXRpYWxpemUodCl9LCJpbml0aWFsaXplIiksaml0PW8oYXN5bmMgZnVuY3Rpb24odCxlLHIpe1kud2FybigibWVybWFpZC5pbml0IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgcnVuIGluc3RlYWQuIiksdCYmSjJlKHQpO2xldCBuPXtwb3N0UmVuZGVyQ2FsbGJhY2s6cixxdWVyeVNlbGVjdG9yOiIubWVybWFpZCJ9O3R5cGVvZiBlPT0ic3RyaW5nIj9uLnF1ZXJ5U2VsZWN0b3I9ZTplJiYoZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50P24ubm9kZXM9W2VdOm4ubm9kZXM9ZSksYXdhaXQgWjJlKG4pfSwiaW5pdCIpLEtpdD1vKGFzeW5jKHQse2xhenlMb2FkOmU9ITB9PXt9KT0+e3oxKCksWmIoLi4udCksZT09PSExJiZhd2FpdCBiMmUoKX0sInJlZ2lzdGVyRXh0ZXJuYWxEaWFncmFtcyIpLGV4ZT1vKGZ1bmN0aW9uKCl7aWYodWguc3RhcnRPbkxvYWQpe2xldHtzdGFydE9uTG9hZDp0fT1IZi5nZXRDb25maWcoKTt0JiZ1aC5ydW4oKS5jYXRjaChlPT5ZLmVycm9yKCJNZXJtYWlkIGZhaWxlZCB0byBpbml0aWFsaXplIixlKSl9fSwiY29udGVudExvYWRlZCIpO2lmKHR5cGVvZiBkb2N1bWVudDwidSIpe3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixleGUsITEpfXZhciBRaXQ9byhmdW5jdGlvbih0KXt1aC5wYXJzZUVycm9yPXR9LCJzZXRQYXJzZUVycm9ySGFuZGxlciIpLEFTPVtdLHdGPSExLHR4ZT1vKGFzeW5jKCk9PntpZighd0Ype2Zvcih3Rj0hMDtBUy5sZW5ndGg+MDspe2xldCB0PUFTLnNoaWZ0KCk7aWYodCl0cnl7YXdhaXQgdCgpfWNhdGNoKGUpe1kuZXJyb3IoIkVycm9yIGV4ZWN1dGluZyBxdWV1ZSIsZSl9fXdGPSExfX0sImV4ZWN1dGVRdWV1ZSIpLFppdD1vKGFzeW5jKHQsZSk9Pm5ldyBQcm9taXNlKChyLG4pPT57bGV0IGk9bygoKT0+bmV3IFByb21pc2UoKGEscyk9PntIZi5wYXJzZSh0LGUpLnRoZW4obD0+e2EobCkscihsKX0sbD0+e1kuZXJyb3IoIkVycm9yIHBhcnNpbmciLGwpLHVoLnBhcnNlRXJyb3I/LihsKSxzKGwpLG4obCl9KX0pLCJwZXJmb3JtQ2FsbCIpO0FTLnB1c2goaSksdHhlKCkuY2F0Y2gobil9KSwicGFyc2UiKSxyeGU9bygodCxlLHIpPT5uZXcgUHJvbWlzZSgobixpKT0+e2xldCBhPW8oKCk9Pm5ldyBQcm9taXNlKChzLGwpPT57SGYucmVuZGVyKHQsZSxyKS50aGVuKHU9PntzKHUpLG4odSl9LHU9PntZLmVycm9yKCJFcnJvciBwYXJzaW5nIix1KSx1aC5wYXJzZUVycm9yPy4odSksbCh1KSxpKHUpfSl9KSwicGVyZm9ybUNhbGwiKTtBUy5wdXNoKGEpLHR4ZSgpLmNhdGNoKGkpfSksInJlbmRlciIpLHVoPXtzdGFydE9uTG9hZDohMCxtZXJtYWlkQVBJOkhmLHBhcnNlOlppdCxyZW5kZXI6cnhlLGluaXQ6aml0LHJ1bjpaMmUscmVnaXN0ZXJFeHRlcm5hbERpYWdyYW1zOktpdCxyZWdpc3RlckxheW91dExvYWRlcnM6X0QsaW5pdGlhbGl6ZTpKMmUscGFyc2VFcnJvcjp2b2lkIDAsY29udGVudExvYWRlZDpleGUsc2V0UGFyc2VFcnJvckhhbmRsZXI6UWl0LGRldGVjdFR5cGU6bXAscmVnaXN0ZXJJY29uUGFja3M6WGJ9LEppdD11aDtyZXR1cm4gY3hlKGVhdCk7fSkoKTsKLyohIENoZWNrIGlmIHByZXZpb3VzbHkgcHJvY2Vzc2VkICovCi8qIQogKiBXYWl0IGZvciBkb2N1bWVudCBsb2FkZWQgYmVmb3JlIHN0YXJ0aW5nIHRoZSBleGVjdXRpb24KICovCi8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246Cgpkb21wdXJpZnkvZGlzdC9wdXJpZnkuanM6CiAgKCohIEBsaWNlbnNlIERPTVB1cmlmeSAzLjEuNiB8IChjKSBDdXJlNTMgYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyB8IFJlbGVhc2VkIHVuZGVyIHRoZSBBcGFjaGUgbGljZW5zZSAyLjAgYW5kIE1vemlsbGEgUHVibGljIExpY2Vuc2UgMi4wIHwgZ2l0aHViLmNvbS9jdXJlNTMvRE9NUHVyaWZ5L2Jsb2IvMy4xLjYvTElDRU5TRSAqKQoKanMteWFtbC9kaXN0L2pzLXlhbWwubWpzOgogICgqISBqcy15YW1sIDQuMS4wIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvanMteWFtbCBAbGljZW5zZSBNSVQgKikKCmxvZGFzaC1lcy9sb2Rhc2guanM6CiAgKCoqCiAgICogQGxpY2Vuc2UKICAgKiBMb2Rhc2ggKEN1c3RvbSBCdWlsZCkgPGh0dHBzOi8vbG9kYXNoLmNvbS8+CiAgICogQnVpbGQ6IGBsb2Rhc2ggbW9kdWxhcml6ZSBleHBvcnRzPSJlcyIgLW8gLi9gCiAgICogQ29weXJpZ2h0IE9wZW5KUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMgPGh0dHBzOi8vb3BlbmpzZi5vcmcvPgogICAqIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT4KICAgKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPgogICAqIENvcHlyaWdodCBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9ycwogICAqKQoKY3l0b3NjYXBlL2Rpc3QvY3l0b3NjYXBlLmVzbS5tanM6CiAgKCohCiAgRW1iZWRkYWJsZSBNaW5pbXVtIFN0cmljdGx5LUNvbXBsaWFudCBQcm9taXNlcy9BKyAxLjEuMSBUaGVuYWJsZQogIENvcHlyaWdodCAoYykgMjAxMy0yMDE0IFJhbGYgUy4gRW5nZWxzY2hhbGwgKGh0dHA6Ly9lbmdlbHNjaGFsbC5jb20pCiAgTGljZW5zZWQgdW5kZXIgVGhlIE1JVCBMaWNlbnNlIChodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUKQogICopCiAgKCohCiAgRXZlbnQgb2JqZWN0IGJhc2VkIG9uIGpRdWVyeSBldmVudHMsIE1JVCBsaWNlbnNlCiAgCiAgaHR0cHM6Ly9qcXVlcnkub3JnL2xpY2Vuc2UvCiAgaHR0cHM6Ly90bGRybGVnYWwuY29tL2xpY2Vuc2UvbWl0LWxpY2Vuc2UKICBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9ibG9iL21hc3Rlci9zcmMvZXZlbnQuanMKICAqKQogICgqISBCZXppZXIgY3VydmUgZnVuY3Rpb24gZ2VuZXJhdG9yLiBDb3B5cmlnaHQgR2FldGFuIFJlbmF1ZGVhdS4gTUlUIExpY2Vuc2U6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlUX0xpY2Vuc2UgKikKICAoKiEgUnVuZ2UtS3V0dGEgc3ByaW5nIHBoeXNpY3MgZnVuY3Rpb24gZ2VuZXJhdG9yLiBBZGFwdGVkIGZyb20gRnJhbWVyLmpzLCBjb3B5cmlnaHQgS29lbiBCb2suIE1JVCBMaWNlbnNlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01JVF9MaWNlbnNlICopCiovCmdsb2JhbFRoaXMubWVybWFpZCA9IGdsb2JhbFRoaXMuX19lc2J1aWxkX2VzbV9tZXJtYWlkLmRlZmF1bHQ7Cg==`; \ No newline at end of file diff --git a/packages/renderer/assets/mermaid/mermaid.min.js b/packages/renderer/assets/mermaid/mermaid.min.js index 3dce007acab..fd60dd6f2ef 100644 --- a/packages/renderer/assets/mermaid/mermaid.min.js +++ b/packages/renderer/assets/mermaid/mermaid.min.js @@ -1,144 +1,67 @@ -(function(JM,Ag){typeof exports=="object"&&typeof module<"u"?module.exports=Ag():typeof define=="function"&&define.amd?define(Ag):(JM=typeof globalThis<"u"?globalThis:JM||self,JM.mermaid=Ag())})(this,function(){var FWe,RWe;"use strict";function JM(i){for(var s=[],u=1;u=Pe?Fe:""+Array(Pe+1-Ie.length).join(je)+Fe},be={s:pe,z:function(Fe){var Pe=-Fe.utcOffset(),je=Math.abs(Pe),Ie=Math.floor(je/60),Se=je%60;return(Pe<=0?"+":"-")+pe(Ie,2,"0")+":"+pe(Se,2,"0")},m:function Fe(Pe,je){if(Pe.date()1)return Fe(ke[0])}else{var Ke=Pe.name;ne[Ke]=Pe,Se=Ke}return!Ie&&Se&&(ae=Se),Se||!Ie&&ae},ge=function(Fe,Pe){if(de(Fe))return Fe.clone();var je=typeof Pe=="object"?Pe:{};return je.date=Fe,je.args=arguments,new xe(je)},W=be;W.l=X,W.i=de,W.w=function(Fe,Pe){return ge(Fe,{locale:Pe.$L,utc:Pe.$u,x:Pe.$x,$offset:Pe.$offset})};var xe=function(){function Fe(je){this.$L=X(je.locale,null,!0),this.parse(je),this.$x=this.$x||je.x||{},this[se]=!0}var Pe=Fe.prototype;return Pe.parse=function(je){this.$d=function(Ie){var Se=Ie.date,Ce=Ie.utc;if(Se===null)return new Date(NaN);if(W.u(Se))return new Date;if(Se instanceof Date)return new Date(Se);if(typeof Se=="string"&&!/Z$/i.test(Se)){var ke=Se.match(ee);if(ke){var Ke=ke[2]-1||0,Ft=(ke[7]||"0").substring(0,3);return Ce?new Date(Date.UTC(ke[1],Ke,ke[3]||1,ke[4]||0,ke[5]||0,ke[6]||0,Ft)):new Date(ke[1],Ke,ke[3]||1,ke[4]||0,ke[5]||0,ke[6]||0,Ft)}}return new Date(Se)}(je),this.init()},Pe.init=function(){var je=this.$d;this.$y=je.getFullYear(),this.$M=je.getMonth(),this.$D=je.getDate(),this.$W=je.getDay(),this.$H=je.getHours(),this.$m=je.getMinutes(),this.$s=je.getSeconds(),this.$ms=je.getMilliseconds()},Pe.$utils=function(){return W},Pe.isValid=function(){return this.$d.toString()!==K},Pe.isSame=function(je,Ie){var Se=ge(je);return this.startOf(Ie)<=Se&&Se<=this.endOf(Ie)},Pe.isAfter=function(je,Ie){return ge(je){},debug:(...i)=>{},info:(...i)=>{},warn:(...i)=>{},error:(...i)=>{},fatal:(...i)=>{}},fpe=function(i="fatal"){let s=g7.fatal;typeof i=="string"?(i=i.toLowerCase(),i in g7&&(s=g7[i])):typeof i=="number"&&(s=i),Xe.trace=()=>{},Xe.debug=()=>{},Xe.info=()=>{},Xe.warn=()=>{},Xe.error=()=>{},Xe.fatal=()=>{},s<=g7.fatal&&(Xe.fatal=console.error?console.error.bind(console,Lv("FATAL"),"color: orange"):console.log.bind(console,"\x1B[35m",Lv("FATAL"))),s<=g7.error&&(Xe.error=console.error?console.error.bind(console,Lv("ERROR"),"color: orange"):console.log.bind(console,"\x1B[31m",Lv("ERROR"))),s<=g7.warn&&(Xe.warn=console.warn?console.warn.bind(console,Lv("WARN"),"color: orange"):console.log.bind(console,"\x1B[33m",Lv("WARN"))),s<=g7.info&&(Xe.info=console.info?console.info.bind(console,Lv("INFO"),"color: lightblue"):console.log.bind(console,"\x1B[34m",Lv("INFO"))),s<=g7.debug&&(Xe.debug=console.debug?console.debug.bind(console,Lv("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",Lv("DEBUG"))),s<=g7.trace&&(Xe.trace=console.debug?console.debug.bind(console,Lv("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",Lv("TRACE")))},Lv=i=>`%c${Lg().format("ss.SSS")} : ${i} : `;var p9={};(function(i){Object.defineProperty(i,"__esModule",{value:!0}),i.sanitizeUrl=i.BLANK_URL=void 0;var s=/^([^\w]*)(javascript|data|vbscript)/im,u=/&#(\w+)(^\w|;)?/g,d=/&(newline|tab);/gi,p=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,v=/^.+(:|:)/gim,b=[".","/"];i.BLANK_URL="about:blank";function y(A){return b.indexOf(A[0])>-1}function T(A){var P=A.replace(p,"");return P.replace(u,function(R,F){return String.fromCharCode(F)})}function _(A){if(!A)return i.BLANK_URL;var P=T(A).replace(d,"").replace(p,"").trim();if(!P)return i.BLANK_URL;if(y(P))return P;var R=P.match(v);if(!R)return P;var F=R[0];return s.test(F)?i.BLANK_URL:P}i.sanitizeUrl=_})(p9);function DY(i,s){return i==null||s==null?NaN:is?1:i>=s?0:NaN}function PAt(i,s){return i==null||s==null?NaN:si?1:s>=i?0:NaN}function dpe(i){let s,u,d;i.length!==2?(s=DY,u=(y,T)=>DY(i(y),T),d=(y,T)=>i(y)-T):(s=i===DY||i===PAt?i:BAt,u=i,d=i);function p(y,T,_=0,A=y.length){if(_>>1;u(y[P],T)<0?_=P+1:A=P}while(_>>1;u(y[P],T)<=0?_=P+1:A=P}while(__&&d(y[P-1],T)>-d(y[P],T)?P-1:P}return{left:p,center:b,right:v}}function BAt(){return 0}function FAt(i){return i===null?NaN:+i}const RAt=dpe(DY).right;dpe(FAt).center;const jAt=RAt;class cBe extends Map{constructor(s,u=qAt){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:u}}),s!=null)for(const[d,p]of s)this.set(d,p)}get(s){return super.get(uBe(this,s))}has(s){return super.has(uBe(this,s))}set(s,u){return super.set($At(this,s),u)}delete(s){return super.delete(zAt(this,s))}}function uBe({_intern:i,_key:s},u){const d=s(u);return i.has(d)?i.get(d):u}function $At({_intern:i,_key:s},u){const d=s(u);return i.has(d)?i.get(d):(i.set(d,u),u)}function zAt({_intern:i,_key:s},u){const d=s(u);return i.has(d)&&(u=i.get(d),i.delete(d)),u}function qAt(i){return i!==null&&typeof i=="object"?i.valueOf():i}const HAt=Math.sqrt(50),VAt=Math.sqrt(10),UAt=Math.sqrt(2);function IY(i,s,u){const d=(s-i)/Math.max(0,u),p=Math.floor(Math.log10(d)),v=d/Math.pow(10,p),b=v>=HAt?10:v>=VAt?5:v>=UAt?2:1;let y,T,_;return p<0?(_=Math.pow(10,-p)/b,y=Math.round(i*_),T=Math.round(s*_),y/_s&&--T,_=-_):(_=Math.pow(10,p)*b,y=Math.round(i/_),T=Math.round(s/_),y*_s&&--T),T0))return[];if(i===s)return[i];const d=s=p))return[];const y=v-p+1,T=new Array(y);if(d)if(b<0)for(let _=0;_=d)&&(u=d);else{let d=-1;for(let p of i)(p=s(p,++d,i))!=null&&(u=p)&&(u=p)}return u}function WAt(i,s){let u;if(s===void 0)for(const d of i)d!=null&&(u>d||u===void 0&&d>=d)&&(u=d);else{let d=-1;for(let p of i)(p=s(p,++d,i))!=null&&(u>p||u===void 0&&p>=p)&&(u=p)}return u}function YAt(i,s,u){i=+i,s=+s,u=(p=arguments.length)<2?(s=i,i=0,1):p<3?1:+u;for(var d=-1,p=Math.max(0,Math.ceil((s-i)/u))|0,v=new Array(p);++d+i(s)}function eLt(i,s){return s=Math.max(0,i.bandwidth()-s*2)/2,i.round()&&(s=Math.round(s)),u=>+i(u)+s}function tLt(){return!this.__axis}function hBe(i,s){var u=[],d=null,p=null,v=6,b=6,y=3,T=typeof window<"u"&&window.devicePixelRatio>1?0:.5,_=i===OY||i===NY?-1:1,A=i===NY||i===bpe?"x":"y",P=i===OY||i===mpe?QAt:JAt;function R(F){var j=d??(s.ticks?s.ticks.apply(s,u):s.domain()),K=p??(s.tickFormat?s.tickFormat.apply(s,u):XAt),ee=Math.max(v,0)+y,ie=s.range(),oe=+ie[0]+T,pe=+ie[ie.length-1]+T,be=(s.bandwidth?eLt:ZAt)(s.copy(),T),ae=F.selection?F.selection():F,ne=ae.selectAll(".domain").data([null]),se=ae.selectAll(".tick").data(j,s).order(),de=se.exit(),X=se.enter().append("g").attr("class","tick"),ge=se.select("line"),W=se.select("text");ne=ne.merge(ne.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),se=se.merge(X),ge=ge.merge(X.append("line").attr("stroke","currentColor").attr(A+"2",_*v)),W=W.merge(X.append("text").attr("fill","currentColor").attr(A,_*ee).attr("dy",i===OY?"0em":i===mpe?"0.71em":"0.32em")),F!==ae&&(ne=ne.transition(F),se=se.transition(F),ge=ge.transition(F),W=W.transition(F),de=de.transition(F).attr("opacity",lBe).attr("transform",function(xe){return isFinite(xe=be(xe))?P(xe+T):this.getAttribute("transform")}),X.attr("opacity",lBe).attr("transform",function(xe){var U=this.parentNode.__axis;return P((U&&isFinite(U=U(xe))?U:be(xe))+T)})),de.remove(),ne.attr("d",i===NY||i===bpe?b?"M"+_*b+","+oe+"H"+T+"V"+pe+"H"+_*b:"M"+T+","+oe+"V"+pe:b?"M"+oe+","+_*b+"V"+T+"H"+pe+"V"+_*b:"M"+oe+","+T+"H"+pe),se.attr("opacity",1).attr("transform",function(xe){return P(be(xe)+T)}),ge.attr(A+"2",_*v),W.attr(A,_*ee).text(K),ae.filter(tLt).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",i===bpe?"start":i===NY?"end":"middle"),ae.each(function(){this.__axis=be})}return R.scale=function(F){return arguments.length?(s=F,R):s},R.ticks=function(){return u=Array.from(arguments),R},R.tickArguments=function(F){return arguments.length?(u=F==null?[]:Array.from(F),R):u.slice()},R.tickValues=function(F){return arguments.length?(d=F==null?null:Array.from(F),R):d&&d.slice()},R.tickFormat=function(F){return arguments.length?(p=F,R):p},R.tickSize=function(F){return arguments.length?(v=b=+F,R):v},R.tickSizeInner=function(F){return arguments.length?(v=+F,R):v},R.tickSizeOuter=function(F){return arguments.length?(b=+F,R):b},R.tickPadding=function(F){return arguments.length?(y=+F,R):y},R.offset=function(F){return arguments.length?(T=+F,R):T},R}function nLt(i){return hBe(OY,i)}function rLt(i){return hBe(mpe,i)}var iLt={value:()=>{}};function fBe(){for(var i=0,s=arguments.length,u={},d;i=0&&(d=u.slice(p+1),u=u.slice(0,p)),u&&!s.hasOwnProperty(u))throw new Error("unknown type: "+u);return{type:u,name:d}})}PY.prototype=fBe.prototype={constructor:PY,on:function(i,s){var u=this._,d=sLt(i+"",u),p,v=-1,b=d.length;if(arguments.length<2){for(;++v0)for(var u=new Array(p),d=0,p,v;d=0&&(s=i.slice(0,u))!=="xmlns"&&(i=i.slice(u+1)),gBe.hasOwnProperty(s)?{space:gBe[s],local:i}:i}function oLt(i){return function(){var s=this.ownerDocument,u=this.namespaceURI;return u===vpe&&s.documentElement.namespaceURI===vpe?s.createElement(i):s.createElementNS(u,i)}}function cLt(i){return function(){return this.ownerDocument.createElementNS(i.space,i.local)}}function pBe(i){var s=BY(i);return(s.local?cLt:oLt)(s)}function uLt(){}function wpe(i){return i==null?uLt:function(){return this.querySelector(i)}}function lLt(i){typeof i!="function"&&(i=wpe(i));for(var s=this._groups,u=s.length,d=new Array(u),p=0;p=pe&&(pe=oe+1);!(ae=ee[pe])&&++pe=0;)(b=d[p])&&(v&&b.compareDocumentPosition(v)^4&&v.parentNode.insertBefore(b,v),v=b);return this}function NLt(i){i||(i=PLt);function s(P,R){return P&&R?i(P.__data__,R.__data__):!P-!R}for(var u=this._groups,d=u.length,p=new Array(d),v=0;vs?1:i>=s?0:NaN}function BLt(){var i=arguments[0];return arguments[0]=this,i.apply(null,arguments),this}function FLt(){return Array.from(this)}function RLt(){for(var i=this._groups,s=0,u=i.length;s1?this.each((s==null?YLt:typeof s=="function"?QLt:XLt)(i,s,u??"")):ZM(this.node(),i)}function ZM(i,s){return i.style.getPropertyValue(s)||xBe(i).getComputedStyle(i,null).getPropertyValue(s)}function ZLt(i){return function(){delete this[i]}}function eMt(i,s){return function(){this[i]=s}}function tMt(i,s){return function(){var u=s.apply(this,arguments);u==null?delete this[i]:this[i]=u}}function nMt(i,s){return arguments.length>1?this.each((s==null?ZLt:typeof s=="function"?tMt:eMt)(i,s)):this.node()[i]}function kBe(i){return i.trim().split(/^|\s+/)}function ype(i){return i.classList||new EBe(i)}function EBe(i){this._node=i,this._names=kBe(i.getAttribute("class")||"")}EBe.prototype={add:function(i){var s=this._names.indexOf(i);s<0&&(this._names.push(i),this._node.setAttribute("class",this._names.join(" ")))},remove:function(i){var s=this._names.indexOf(i);s>=0&&(this._names.splice(s,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(i){return this._names.indexOf(i)>=0}};function TBe(i,s){for(var u=ype(i),d=-1,p=s.length;++d=0&&(u=s.slice(d+1),s=s.slice(0,d)),{type:s,name:u}})}function MMt(i){return function(){var s=this.__on;if(s){for(var u=0,d=-1,p=s.length,v;u>8&15|s>>4&240,s>>4&15|s&240,(s&15)<<4|s&15,1):u===8?$Y(s>>24&255,s>>16&255,s>>8&255,(s&255)/255):u===4?$Y(s>>12&15|s>>8&240,s>>8&15|s>>4&240,s>>4&15|s&240,((s&15)<<4|s&15)/255):null):(s=jMt.exec(i))?new Mg(s[1],s[2],s[3],1):(s=$Mt.exec(i))?new Mg(s[1]*255/100,s[2]*255/100,s[3]*255/100,1):(s=zMt.exec(i))?$Y(s[1],s[2],s[3],s[4]):(s=qMt.exec(i))?$Y(s[1]*255/100,s[2]*255/100,s[3]*255/100,s[4]):(s=HMt.exec(i))?PBe(s[1],s[2]/100,s[3]/100,1):(s=VMt.exec(i))?PBe(s[1],s[2]/100,s[3]/100,s[4]):ABe.hasOwnProperty(i)?DBe(ABe[i]):i==="transparent"?new Mg(NaN,NaN,NaN,0):null}function DBe(i){return new Mg(i>>16&255,i>>8&255,i&255,1)}function $Y(i,s,u,d){return d<=0&&(i=s=u=NaN),new Mg(i,s,u,d)}function IBe(i){return i instanceof fC||(i=dC(i)),i?(i=i.rgb(),new Mg(i.r,i.g,i.b,i.opacity)):new Mg}function kpe(i,s,u,d){return arguments.length===1?IBe(i):new Mg(i,s,u,d??1)}function Mg(i,s,u,d){this.r=+i,this.g=+s,this.b=+u,this.opacity=+d}wF(Mg,kpe,RY(fC,{brighter(i){return i=i==null?jY:Math.pow(jY,i),new Mg(this.r*i,this.g*i,this.b*i,this.opacity)},darker(i){return i=i==null?yF:Math.pow(yF,i),new Mg(this.r*i,this.g*i,this.b*i,this.opacity)},rgb(){return this},clamp(){return new Mg(gC(this.r),gC(this.g),gC(this.b),zY(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:OBe,formatHex:OBe,formatHex8:KMt,formatRgb:NBe,toString:NBe}));function OBe(){return`#${pC(this.r)}${pC(this.g)}${pC(this.b)}`}function KMt(){return`#${pC(this.r)}${pC(this.g)}${pC(this.b)}${pC((isNaN(this.opacity)?1:this.opacity)*255)}`}function NBe(){const i=zY(this.opacity);return`${i===1?"rgb(":"rgba("}${gC(this.r)}, ${gC(this.g)}, ${gC(this.b)}${i===1?")":`, ${i})`}`}function zY(i){return isNaN(i)?1:Math.max(0,Math.min(1,i))}function gC(i){return Math.max(0,Math.min(255,Math.round(i)||0))}function pC(i){return i=gC(i),(i<16?"0":"")+i.toString(16)}function PBe(i,s,u,d){return d<=0?i=s=u=NaN:u<=0||u>=1?i=s=NaN:s<=0&&(i=NaN),new A3(i,s,u,d)}function BBe(i){if(i instanceof A3)return new A3(i.h,i.s,i.l,i.opacity);if(i instanceof fC||(i=dC(i)),!i)return new A3;if(i instanceof A3)return i;i=i.rgb();var s=i.r/255,u=i.g/255,d=i.b/255,p=Math.min(s,u,d),v=Math.max(s,u,d),b=NaN,y=v-p,T=(v+p)/2;return y?(s===v?b=(u-d)/y+(u0&&T<1?0:b,new A3(b,y,T,i.opacity)}function WMt(i,s,u,d){return arguments.length===1?BBe(i):new A3(i,s,u,d??1)}function A3(i,s,u,d){this.h=+i,this.s=+s,this.l=+u,this.opacity=+d}wF(A3,WMt,RY(fC,{brighter(i){return i=i==null?jY:Math.pow(jY,i),new A3(this.h,this.s,this.l*i,this.opacity)},darker(i){return i=i==null?yF:Math.pow(yF,i),new A3(this.h,this.s,this.l*i,this.opacity)},rgb(){var i=this.h%360+(this.h<0)*360,s=isNaN(i)||isNaN(this.s)?0:this.s,u=this.l,d=u+(u<.5?u:1-u)*s,p=2*u-d;return new Mg(Epe(i>=240?i-240:i+120,p,d),Epe(i,p,d),Epe(i<120?i+240:i-120,p,d),this.opacity)},clamp(){return new A3(FBe(this.h),qY(this.s),qY(this.l),zY(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const i=zY(this.opacity);return`${i===1?"hsl(":"hsla("}${FBe(this.h)}, ${qY(this.s)*100}%, ${qY(this.l)*100}%${i===1?")":`, ${i})`}`}}));function FBe(i){return i=(i||0)%360,i<0?i+360:i}function qY(i){return Math.max(0,Math.min(1,i||0))}function Epe(i,s,u){return(i<60?s+(u-s)*i/60:i<180?u:i<240?s+(u-s)*(240-i)/60:s)*255}const YMt=Math.PI/180,XMt=180/Math.PI,HY=18,RBe=.96422,jBe=1,$Be=.82521,zBe=4/29,tD=6/29,qBe=3*tD*tD,QMt=tD*tD*tD;function HBe(i){if(i instanceof j4)return new j4(i.l,i.a,i.b,i.opacity);if(i instanceof p7)return VBe(i);i instanceof Mg||(i=IBe(i));var s=_pe(i.r),u=_pe(i.g),d=_pe(i.b),p=Tpe((.2225045*s+.7168786*u+.0606169*d)/jBe),v,b;return s===u&&u===d?v=b=p:(v=Tpe((.4360747*s+.3850649*u+.1430804*d)/RBe),b=Tpe((.0139322*s+.0971045*u+.7141733*d)/$Be)),new j4(116*p-16,500*(v-p),200*(p-b),i.opacity)}function JMt(i,s,u,d){return arguments.length===1?HBe(i):new j4(i,s,u,d??1)}function j4(i,s,u,d){this.l=+i,this.a=+s,this.b=+u,this.opacity=+d}wF(j4,JMt,RY(fC,{brighter(i){return new j4(this.l+HY*(i??1),this.a,this.b,this.opacity)},darker(i){return new j4(this.l-HY*(i??1),this.a,this.b,this.opacity)},rgb(){var i=(this.l+16)/116,s=isNaN(this.a)?i:i+this.a/500,u=isNaN(this.b)?i:i-this.b/200;return s=RBe*Cpe(s),i=jBe*Cpe(i),u=$Be*Cpe(u),new Mg(Spe(3.1338561*s-1.6168667*i-.4906146*u),Spe(-.9787684*s+1.9161415*i+.033454*u),Spe(.0719453*s-.2289914*i+1.4052427*u),this.opacity)}}));function Tpe(i){return i>QMt?Math.pow(i,1/3):i/qBe+zBe}function Cpe(i){return i>tD?i*i*i:qBe*(i-zBe)}function Spe(i){return 255*(i<=.0031308?12.92*i:1.055*Math.pow(i,1/2.4)-.055)}function _pe(i){return(i/=255)<=.04045?i/12.92:Math.pow((i+.055)/1.055,2.4)}function ZMt(i){if(i instanceof p7)return new p7(i.h,i.c,i.l,i.opacity);if(i instanceof j4||(i=HBe(i)),i.a===0&&i.b===0)return new p7(NaN,0()=>i;function UBe(i,s){return function(u){return i+u*s}}function eDt(i,s,u){return i=Math.pow(i,u),s=Math.pow(s,u)-i,u=1/u,function(d){return Math.pow(i+d*s,u)}}function tDt(i,s){var u=s-i;return u?UBe(i,u>180||u<-180?u-360*Math.round(u/360):u):VY(isNaN(i)?s:i)}function nDt(i){return(i=+i)==1?kF:function(s,u){return u-s?eDt(s,u,i):VY(isNaN(s)?u:s)}}function kF(i,s){var u=s-i;return u?UBe(i,u):VY(isNaN(i)?s:i)}const UY=function i(s){var u=nDt(s);function d(p,v){var b=u((p=kpe(p)).r,(v=kpe(v)).r),y=u(p.g,v.g),T=u(p.b,v.b),_=kF(p.opacity,v.opacity);return function(A){return p.r=b(A),p.g=y(A),p.b=T(A),p.opacity=_(A),p+""}}return d.gamma=i,d}(1);function rDt(i,s){s||(s=[]);var u=i?Math.min(s.length,i.length):0,d=s.slice(),p;return function(v){for(p=0;pu&&(v=s.slice(u,v),y[b]?y[b]+=v:y[++b]=v),(d=d[0])===(p=p[0])?y[b]?y[b]+=p:y[++b]=p:(y[++b]=null,T.push({i:b,x:L3(d,p)})),u=Mpe.lastIndex;return u180?A+=360:A-_>180&&(_+=360),R.push({i:P.push(p(P)+"rotate(",null,d)-2,x:L3(_,A)})):A&&P.push(p(P)+"rotate("+A+d)}function y(_,A,P,R){_!==A?R.push({i:P.push(p(P)+"skewX(",null,d)-2,x:L3(_,A)}):A&&P.push(p(P)+"skewX("+A+d)}function T(_,A,P,R,F,j){if(_!==P||A!==R){var K=F.push(p(F)+"scale(",null,",",null,")");j.push({i:K-4,x:L3(_,P)},{i:K-2,x:L3(A,R)})}else(P!==1||R!==1)&&F.push(p(F)+"scale("+P+","+R+")")}return function(_,A){var P=[],R=[];return _=i(_),A=i(A),v(_.translateX,_.translateY,A.translateX,A.translateY,P,R),b(_.rotate,A.rotate,P,R),y(_.skewX,A.skewX,P,R),T(_.scaleX,_.scaleY,A.scaleX,A.scaleY,P,R),_=A=null,function(F){for(var j=-1,K=R.length,ee;++j=0&&i._call.call(void 0,s),i=i._next;--nD}function ZBe(){bC=(WY=SF.now())+YY,nD=EF=0;try{vDt()}finally{nD=0,yDt(),bC=0}}function wDt(){var i=SF.now(),s=i-WY;s>XBe&&(YY-=s,WY=i)}function yDt(){for(var i,s=KY,u,d=1/0;s;)s._call?(d>s._time&&(d=s._time),i=s,s=s._next):(u=s._next,s._next=null,s=i?i._next=u:KY=u);CF=i,Npe(d)}function Npe(i){if(!nD){EF&&(EF=clearTimeout(EF));var s=i-bC;s>24?(i<1/0&&(EF=setTimeout(ZBe,i-SF.now()-YY)),TF&&(TF=clearInterval(TF))):(TF||(WY=SF.now(),TF=setInterval(wDt,XBe)),nD=1,QBe(ZBe))}}function eFe(i,s,u){var d=new XY;return s=s==null?0:+s,d.restart(p=>{d.stop(),i(p+s)},s,u),d}var xDt=fBe("start","end","cancel","interrupt"),kDt=[],tFe=0,nFe=1,Ppe=2,QY=3,rFe=4,Bpe=5,JY=6;function ZY(i,s,u,d,p,v){var b=i.__transition;if(!b)i.__transition={};else if(u in b)return;EDt(i,u,{name:s,index:d,group:p,on:xDt,tween:kDt,time:v.time,delay:v.delay,duration:v.duration,ease:v.ease,timer:null,state:tFe})}function Fpe(i,s){var u=M3(i,s);if(u.state>tFe)throw new Error("too late; already scheduled");return u}function $4(i,s){var u=M3(i,s);if(u.state>QY)throw new Error("too late; already running");return u}function M3(i,s){var u=i.__transition;if(!u||!(u=u[s]))throw new Error("transition not found");return u}function EDt(i,s,u){var d=i.__transition,p;d[s]=u,u.timer=JBe(v,0,u.time);function v(_){u.state=nFe,u.timer.restart(b,u.delay,u.time),u.delay<=_&&b(_-u.delay)}function b(_){var A,P,R,F;if(u.state!==nFe)return T();for(A in d)if(F=d[A],F.name===u.name){if(F.state===QY)return eFe(b);F.state===rFe?(F.state=JY,F.timer.stop(),F.on.call("interrupt",i,i.__data__,F.index,F.group),delete d[A]):+APpe&&d.state=0&&(s=s.slice(0,u)),!s||s==="start"})}function eIt(i,s,u){var d,p,v=ZDt(s)?Fpe:$4;return function(){var b=v(this,i),y=b.on;y!==d&&(p=(d=y).copy()).on(s,u),b.on=p}}function tIt(i,s){var u=this._id;return arguments.length<2?M3(this.node(),u).on.on(i):this.each(eIt(u,i,s))}function nIt(i){return function(){var s=this.parentNode;for(var u in this.__transition)if(+u!==i)return;s&&s.removeChild(this)}}function rIt(){return this.on("end.remove",nIt(this._id))}function iIt(i){var s=this._name,u=this._id;typeof i!="function"&&(i=wpe(i));for(var d=this._groups,p=d.length,v=new Array(p),b=0;b=0))throw new Error(`invalid digits: ${i}`);if(s>15)return oFe;const u=10**s;return function(d){this._+=d[0];for(let p=1,v=d.length;pmC)if(!(Math.abs(P*T-_*A)>mC)||!v)this._append`L${this._x1=s},${this._y1=u}`;else{let F=d-b,j=p-y,K=T*T+_*_,ee=F*F+j*j,ie=Math.sqrt(K),oe=Math.sqrt(R),pe=v*Math.tan((jpe-Math.acos((K+R-ee)/(2*ie*oe)))/2),be=pe/oe,ae=pe/ie;Math.abs(be-1)>mC&&this._append`L${s+be*A},${u+be*P}`,this._append`A${v},${v},0,0,${+(P*F>A*j)},${this._x1=s+ae*T},${this._y1=u+ae*_}`}}arc(s,u,d,p,v,b){if(s=+s,u=+u,d=+d,b=!!b,d<0)throw new Error(`negative radius: ${d}`);let y=d*Math.cos(p),T=d*Math.sin(p),_=s+y,A=u+T,P=1^b,R=b?p-v:v-p;this._x1===null?this._append`M${_},${A}`:(Math.abs(this._x1-_)>mC||Math.abs(this._y1-A)>mC)&&this._append`L${_},${A}`,d&&(R<0&&(R=R%$pe+$pe),R>LIt?this._append`A${d},${d},0,1,${P},${s-y},${u-T}A${d},${d},0,1,${P},${this._x1=_},${this._y1=A}`:R>mC&&this._append`A${d},${d},0,${+(R>=jpe)},${P},${this._x1=s+d*Math.cos(v)},${this._y1=u+d*Math.sin(v)}`)}rect(s,u,d,p){this._append`M${this._x0=this._x1=+s},${this._y0=this._y1=+u}h${d=+d}v${+p}h${-d}Z`}toString(){return this._}};function IIt(i){if(!i.ok)throw new Error(i.status+" "+i.statusText);return i.text()}function OIt(i,s){return fetch(i,s).then(IIt)}function NIt(i){return(s,u)=>OIt(s,u).then(d=>new DOMParser().parseFromString(d,i))}var PIt=NIt("image/svg+xml");function BIt(i){return Math.abs(i=Math.round(i))>=1e21?i.toLocaleString("en").replace(/,/g,""):i.toString(10)}function eX(i,s){if((u=(i=s?i.toExponential(s-1):i.toExponential()).indexOf("e"))<0)return null;var u,d=i.slice(0,u);return[d.length>1?d[0]+d.slice(2):d,+i.slice(u+1)]}function rD(i){return i=eX(Math.abs(i)),i?i[1]:NaN}function FIt(i,s){return function(u,d){for(var p=u.length,v=[],b=0,y=i[0],T=0;p>0&&y>0&&(T+y+1>d&&(y=Math.max(1,d-T)),v.push(u.substring(p-=y,p+y)),!((T+=y+1)>d));)y=i[b=(b+1)%i.length];return v.reverse().join(s)}}function RIt(i){return function(s){return s.replace(/[0-9]/g,function(u){return i[+u]})}}var jIt=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function tX(i){if(!(s=jIt.exec(i)))throw new Error("invalid format: "+i);var s;return new zpe({fill:s[1],align:s[2],sign:s[3],symbol:s[4],zero:s[5],width:s[6],comma:s[7],precision:s[8]&&s[8].slice(1),trim:s[9],type:s[10]})}tX.prototype=zpe.prototype;function zpe(i){this.fill=i.fill===void 0?" ":i.fill+"",this.align=i.align===void 0?">":i.align+"",this.sign=i.sign===void 0?"-":i.sign+"",this.symbol=i.symbol===void 0?"":i.symbol+"",this.zero=!!i.zero,this.width=i.width===void 0?void 0:+i.width,this.comma=!!i.comma,this.precision=i.precision===void 0?void 0:+i.precision,this.trim=!!i.trim,this.type=i.type===void 0?"":i.type+""}zpe.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function $It(i){e:for(var s=i.length,u=1,d=-1,p;u0&&(d=0);break}return d>0?i.slice(0,d)+i.slice(p+1):i}var cFe;function zIt(i,s){var u=eX(i,s);if(!u)return i+"";var d=u[0],p=u[1],v=p-(cFe=Math.max(-8,Math.min(8,Math.floor(p/3)))*3)+1,b=d.length;return v===b?d:v>b?d+new Array(v-b+1).join("0"):v>0?d.slice(0,v)+"."+d.slice(v):"0."+new Array(1-v).join("0")+eX(i,Math.max(0,s+v-1))[0]}function uFe(i,s){var u=eX(i,s);if(!u)return i+"";var d=u[0],p=u[1];return p<0?"0."+new Array(-p).join("0")+d:d.length>p+1?d.slice(0,p+1)+"."+d.slice(p+1):d+new Array(p-d.length+2).join("0")}const lFe={"%":(i,s)=>(i*100).toFixed(s),b:i=>Math.round(i).toString(2),c:i=>i+"",d:BIt,e:(i,s)=>i.toExponential(s),f:(i,s)=>i.toFixed(s),g:(i,s)=>i.toPrecision(s),o:i=>Math.round(i).toString(8),p:(i,s)=>uFe(i*100,s),r:uFe,s:zIt,X:i=>Math.round(i).toString(16).toUpperCase(),x:i=>Math.round(i).toString(16)};function hFe(i){return i}var fFe=Array.prototype.map,dFe=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function qIt(i){var s=i.grouping===void 0||i.thousands===void 0?hFe:FIt(fFe.call(i.grouping,Number),i.thousands+""),u=i.currency===void 0?"":i.currency[0]+"",d=i.currency===void 0?"":i.currency[1]+"",p=i.decimal===void 0?".":i.decimal+"",v=i.numerals===void 0?hFe:RIt(fFe.call(i.numerals,String)),b=i.percent===void 0?"%":i.percent+"",y=i.minus===void 0?"−":i.minus+"",T=i.nan===void 0?"NaN":i.nan+"";function _(P){P=tX(P);var R=P.fill,F=P.align,j=P.sign,K=P.symbol,ee=P.zero,ie=P.width,oe=P.comma,pe=P.precision,be=P.trim,ae=P.type;ae==="n"?(oe=!0,ae="g"):lFe[ae]||(pe===void 0&&(pe=12),be=!0,ae="g"),(ee||R==="0"&&F==="=")&&(ee=!0,R="0",F="=");var ne=K==="$"?u:K==="#"&&/[boxX]/.test(ae)?"0"+ae.toLowerCase():"",se=K==="$"?d:/[%p]/.test(ae)?b:"",de=lFe[ae],X=/[defgprs%]/.test(ae);pe=pe===void 0?6:/[gprs]/.test(ae)?Math.max(1,Math.min(21,pe)):Math.max(0,Math.min(20,pe));function ge(W){var xe=ne,U=se,Fe,Pe,je;if(ae==="c")U=de(W)+U,W="";else{W=+W;var Ie=W<0||1/W<0;if(W=isNaN(W)?T:de(Math.abs(W),pe),be&&(W=$It(W)),Ie&&+W==0&&j!=="+"&&(Ie=!1),xe=(Ie?j==="("?j:y:j==="-"||j==="("?"":j)+xe,U=(ae==="s"?dFe[8+cFe/3]:"")+U+(Ie&&j==="("?")":""),X){for(Fe=-1,Pe=W.length;++Feje||je>57){U=(je===46?p+W.slice(Fe+1):W.slice(Fe))+U,W=W.slice(0,Fe);break}}}oe&&!ee&&(W=s(W,1/0));var Se=xe.length+W.length+U.length,Ce=Se>1)+xe+W+U+Ce.slice(Se);break;default:W=Ce+xe+W+U;break}return v(W)}return ge.toString=function(){return P+""},ge}function A(P,R){var F=_((P=tX(P),P.type="f",P)),j=Math.max(-8,Math.min(8,Math.floor(rD(R)/3)))*3,K=Math.pow(10,-j),ee=dFe[8+j/3];return function(ie){return F(K*ie)+ee}}return{format:_,formatPrefix:A}}var nX,gFe,pFe;HIt({thousands:",",grouping:[3],currency:["$",""]});function HIt(i){return nX=qIt(i),gFe=nX.format,pFe=nX.formatPrefix,nX}function VIt(i){return Math.max(0,-rD(Math.abs(i)))}function UIt(i,s){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(rD(s)/3)))*3-rD(Math.abs(i)))}function GIt(i,s){return i=Math.abs(i),s=Math.abs(s)-i,Math.max(0,rD(s)-rD(i))+1}function rX(i,s){switch(arguments.length){case 0:break;case 1:this.range(i);break;default:this.range(s).domain(i);break}return this}const bFe=Symbol("implicit");function _F(){var i=new cBe,s=[],u=[],d=bFe;function p(v){let b=i.get(v);if(b===void 0){if(d!==bFe)return d;i.set(v,b=s.push(v)-1)}return u[b%u.length]}return p.domain=function(v){if(!arguments.length)return s.slice();s=[],i=new cBe;for(const b of v)i.has(b)||i.set(b,s.push(b)-1);return p},p.range=function(v){return arguments.length?(u=Array.from(v),p):u.slice()},p.unknown=function(v){return arguments.length?(d=v,p):d},p.copy=function(){return _F(s,u).unknown(d)},rX.apply(p,arguments),p}function qpe(){var i=_F().unknown(void 0),s=i.domain,u=i.range,d=0,p=1,v,b,y=!1,T=0,_=0,A=.5;delete i.unknown;function P(){var R=s().length,F=ps&&(u=i,i=s,s=u),function(d){return Math.max(i,Math.min(s,d))}}function XIt(i,s,u){var d=i[0],p=i[1],v=s[0],b=s[1];return p2?QIt:XIt,T=_=null,P}function P(R){return R==null||isNaN(R=+R)?v:(T||(T=y(i.map(d),s,u)))(d(b(R)))}return P.invert=function(R){return b(p((_||(_=y(s,i.map(d),L3)))(R)))},P.domain=function(R){return arguments.length?(i=Array.from(R,WIt),A()):i.slice()},P.range=function(R){return arguments.length?(s=Array.from(R),A()):s.slice()},P.rangeRound=function(R){return s=Array.from(R),u=lDt,A()},P.clamp=function(R){return arguments.length?(b=R?!0:iD,A()):b!==iD},P.interpolate=function(R){return arguments.length?(u=R,A()):u},P.unknown=function(R){return arguments.length?(v=R,P):v},function(R,F){return d=R,p=F,A()}}function wFe(){return JIt()(iD,iD)}function ZIt(i,s,u,d){var p=ppe(i,s,u),v;switch(d=tX(d??",f"),d.type){case"s":{var b=Math.max(Math.abs(i),Math.abs(s));return d.precision==null&&!isNaN(v=UIt(p,b))&&(d.precision=v),pFe(d,b)}case"":case"e":case"g":case"p":case"r":{d.precision==null&&!isNaN(v=GIt(p,Math.max(Math.abs(i),Math.abs(s))))&&(d.precision=v-(d.type==="e"));break}case"f":case"%":{d.precision==null&&!isNaN(v=VIt(p))&&(d.precision=v-(d.type==="%")*2);break}}return gFe(d)}function eOt(i){var s=i.domain;return i.ticks=function(u){var d=s();return GAt(d[0],d[d.length-1],u??10)},i.tickFormat=function(u,d){var p=s();return ZIt(p[0],p[p.length-1],u??10,d)},i.nice=function(u){u==null&&(u=10);var d=s(),p=0,v=d.length-1,b=d[p],y=d[v],T,_,A=10;for(y0;){if(_=gpe(b,y,u),_===T)return d[p]=b,d[v]=y,s(d);if(_>0)b=Math.floor(b/_)*_,y=Math.ceil(y/_)*_;else if(_<0)b=Math.ceil(b*_)/_,y=Math.floor(y*_)/_;else break;T=_}return i},i}function sD(){var i=wFe();return i.copy=function(){return vFe(i,sD())},rX.apply(i,arguments),eOt(i)}function tOt(i,s){i=i.slice();var u=0,d=i.length-1,p=i[u],v=i[d],b;return v(i(v=new Date(+v)),v),p.ceil=v=>(i(v=new Date(v-1)),s(v,1),i(v),v),p.round=v=>{const b=p(v),y=p.ceil(v);return v-b(s(v=new Date(+v),b==null?1:Math.floor(b)),v),p.range=(v,b,y)=>{const T=[];if(v=p.ceil(v),y=y==null?1:Math.floor(y),!(v0))return T;let _;do T.push(_=new Date(+v)),s(v,y),i(v);while(_h1(b=>{if(b>=b)for(;i(b),!v(b);)b.setTime(b-1)},(b,y)=>{if(b>=b)if(y<0)for(;++y<=0;)for(;s(b,-1),!v(b););else for(;--y>=0;)for(;s(b,1),!v(b););}),u&&(p.count=(v,b)=>(Vpe.setTime(+v),Upe.setTime(+b),i(Vpe),i(Upe),Math.floor(u(Vpe,Upe))),p.every=v=>(v=Math.floor(v),!isFinite(v)||!(v>0)?null:v>1?p.filter(d?b=>d(b)%v===0:b=>p.count(0,b)%v===0):p)),p}const aD=h1(()=>{},(i,s)=>{i.setTime(+i+s)},(i,s)=>s-i);aD.every=i=>(i=Math.floor(i),!isFinite(i)||!(i>0)?null:i>1?h1(s=>{s.setTime(Math.floor(s/i)*i)},(s,u)=>{s.setTime(+s+u*i)},(s,u)=>(u-s)/i):aD),aD.range;const v7=1e3,Mv=v7*60,w7=Mv*60,y7=w7*24,Gpe=y7*7,yFe=y7*30,Kpe=y7*365,b9=h1(i=>{i.setTime(i-i.getMilliseconds())},(i,s)=>{i.setTime(+i+s*v7)},(i,s)=>(s-i)/v7,i=>i.getUTCSeconds());b9.range;const AF=h1(i=>{i.setTime(i-i.getMilliseconds()-i.getSeconds()*v7)},(i,s)=>{i.setTime(+i+s*Mv)},(i,s)=>(s-i)/Mv,i=>i.getMinutes());AF.range,h1(i=>{i.setUTCSeconds(0,0)},(i,s)=>{i.setTime(+i+s*Mv)},(i,s)=>(s-i)/Mv,i=>i.getUTCMinutes()).range;const LF=h1(i=>{i.setTime(i-i.getMilliseconds()-i.getSeconds()*v7-i.getMinutes()*Mv)},(i,s)=>{i.setTime(+i+s*w7)},(i,s)=>(s-i)/w7,i=>i.getHours());LF.range,h1(i=>{i.setUTCMinutes(0,0,0)},(i,s)=>{i.setTime(+i+s*w7)},(i,s)=>(s-i)/w7,i=>i.getUTCHours()).range;const vC=h1(i=>i.setHours(0,0,0,0),(i,s)=>i.setDate(i.getDate()+s),(i,s)=>(s-i-(s.getTimezoneOffset()-i.getTimezoneOffset())*Mv)/y7,i=>i.getDate()-1);vC.range;const Wpe=h1(i=>{i.setUTCHours(0,0,0,0)},(i,s)=>{i.setUTCDate(i.getUTCDate()+s)},(i,s)=>(s-i)/y7,i=>i.getUTCDate()-1);Wpe.range,h1(i=>{i.setUTCHours(0,0,0,0)},(i,s)=>{i.setUTCDate(i.getUTCDate()+s)},(i,s)=>(s-i)/y7,i=>Math.floor(i/y7)).range;function wC(i){return h1(s=>{s.setDate(s.getDate()-(s.getDay()+7-i)%7),s.setHours(0,0,0,0)},(s,u)=>{s.setDate(s.getDate()+u*7)},(s,u)=>(u-s-(u.getTimezoneOffset()-s.getTimezoneOffset())*Mv)/Gpe)}const MF=wC(0),DF=wC(1),xFe=wC(2),kFe=wC(3),yC=wC(4),EFe=wC(5),TFe=wC(6);MF.range,DF.range,xFe.range,kFe.range,yC.range,EFe.range,TFe.range;function xC(i){return h1(s=>{s.setUTCDate(s.getUTCDate()-(s.getUTCDay()+7-i)%7),s.setUTCHours(0,0,0,0)},(s,u)=>{s.setUTCDate(s.getUTCDate()+u*7)},(s,u)=>(u-s)/Gpe)}const CFe=xC(0),iX=xC(1),nOt=xC(2),rOt=xC(3),oD=xC(4),iOt=xC(5),sOt=xC(6);CFe.range,iX.range,nOt.range,rOt.range,oD.range,iOt.range,sOt.range;const IF=h1(i=>{i.setDate(1),i.setHours(0,0,0,0)},(i,s)=>{i.setMonth(i.getMonth()+s)},(i,s)=>s.getMonth()-i.getMonth()+(s.getFullYear()-i.getFullYear())*12,i=>i.getMonth());IF.range,h1(i=>{i.setUTCDate(1),i.setUTCHours(0,0,0,0)},(i,s)=>{i.setUTCMonth(i.getUTCMonth()+s)},(i,s)=>s.getUTCMonth()-i.getUTCMonth()+(s.getUTCFullYear()-i.getUTCFullYear())*12,i=>i.getUTCMonth()).range;const x7=h1(i=>{i.setMonth(0,1),i.setHours(0,0,0,0)},(i,s)=>{i.setFullYear(i.getFullYear()+s)},(i,s)=>s.getFullYear()-i.getFullYear(),i=>i.getFullYear());x7.every=i=>!isFinite(i=Math.floor(i))||!(i>0)?null:h1(s=>{s.setFullYear(Math.floor(s.getFullYear()/i)*i),s.setMonth(0,1),s.setHours(0,0,0,0)},(s,u)=>{s.setFullYear(s.getFullYear()+u*i)}),x7.range;const kC=h1(i=>{i.setUTCMonth(0,1),i.setUTCHours(0,0,0,0)},(i,s)=>{i.setUTCFullYear(i.getUTCFullYear()+s)},(i,s)=>s.getUTCFullYear()-i.getUTCFullYear(),i=>i.getUTCFullYear());kC.every=i=>!isFinite(i=Math.floor(i))||!(i>0)?null:h1(s=>{s.setUTCFullYear(Math.floor(s.getUTCFullYear()/i)*i),s.setUTCMonth(0,1),s.setUTCHours(0,0,0,0)},(s,u)=>{s.setUTCFullYear(s.getUTCFullYear()+u*i)}),kC.range;function aOt(i,s,u,d,p,v){const b=[[b9,1,v7],[b9,5,5*v7],[b9,15,15*v7],[b9,30,30*v7],[v,1,Mv],[v,5,5*Mv],[v,15,15*Mv],[v,30,30*Mv],[p,1,w7],[p,3,3*w7],[p,6,6*w7],[p,12,12*w7],[d,1,y7],[d,2,2*y7],[u,1,Gpe],[s,1,yFe],[s,3,3*yFe],[i,1,Kpe]];function y(_,A,P){const R=A<_;R&&([_,A]=[A,_]);const F=P&&typeof P.range=="function"?P:T(_,A,P),j=F?F.range(_,+A+1):[];return R?j.reverse():j}function T(_,A,P){const R=Math.abs(A-_)/P,F=dpe(([,,ee])=>ee).right(b,R);if(F===b.length)return i.every(ppe(_/Kpe,A/Kpe,P));if(F===0)return aD.every(Math.max(ppe(_,A,P),1));const[j,K]=b[R/b[F-1][2]53)return null;"w"in Dt||(Dt.w=1),"Z"in Dt?(On=Xpe(OF(Dt.y,0,1)),ht=On.getUTCDay(),On=ht>4||ht===0?iX.ceil(On):iX(On),On=Wpe.offset(On,(Dt.V-1)*7),Dt.y=On.getUTCFullYear(),Dt.m=On.getUTCMonth(),Dt.d=On.getUTCDate()+(Dt.w+6)%7):(On=Ype(OF(Dt.y,0,1)),ht=On.getDay(),On=ht>4||ht===0?DF.ceil(On):DF(On),On=vC.offset(On,(Dt.V-1)*7),Dt.y=On.getFullYear(),Dt.m=On.getMonth(),Dt.d=On.getDate()+(Dt.w+6)%7)}else("W"in Dt||"U"in Dt)&&("w"in Dt||(Dt.w="u"in Dt?Dt.u%7:"W"in Dt?1:0),ht="Z"in Dt?Xpe(OF(Dt.y,0,1)).getUTCDay():Ype(OF(Dt.y,0,1)).getDay(),Dt.m=0,Dt.d="W"in Dt?(Dt.w+6)%7+Dt.W*7-(ht+5)%7:Dt.w+Dt.U*7-(ht+6)%7);return"Z"in Dt?(Dt.H+=Dt.Z/100|0,Dt.M+=Dt.Z%100,Xpe(Dt)):Ype(Dt)}}function de(xt,Pt,Qe,Dt){for(var kt=0,On=Pt.length,ht=Qe.length,zr,yt;kt=ht)return-1;if(zr=Pt.charCodeAt(kt++),zr===37){if(zr=Pt.charAt(kt++),yt=ae[zr in SFe?Pt.charAt(kt++):zr],!yt||(Dt=yt(xt,Qe,Dt))<0)return-1}else if(zr!=Qe.charCodeAt(Dt++))return-1}return Dt}function X(xt,Pt,Qe){var Dt=_.exec(Pt.slice(Qe));return Dt?(xt.p=A.get(Dt[0].toLowerCase()),Qe+Dt[0].length):-1}function ge(xt,Pt,Qe){var Dt=F.exec(Pt.slice(Qe));return Dt?(xt.w=j.get(Dt[0].toLowerCase()),Qe+Dt[0].length):-1}function W(xt,Pt,Qe){var Dt=P.exec(Pt.slice(Qe));return Dt?(xt.w=R.get(Dt[0].toLowerCase()),Qe+Dt[0].length):-1}function xe(xt,Pt,Qe){var Dt=ie.exec(Pt.slice(Qe));return Dt?(xt.m=oe.get(Dt[0].toLowerCase()),Qe+Dt[0].length):-1}function U(xt,Pt,Qe){var Dt=K.exec(Pt.slice(Qe));return Dt?(xt.m=ee.get(Dt[0].toLowerCase()),Qe+Dt[0].length):-1}function Fe(xt,Pt,Qe){return de(xt,s,Pt,Qe)}function Pe(xt,Pt,Qe){return de(xt,u,Pt,Qe)}function je(xt,Pt,Qe){return de(xt,d,Pt,Qe)}function Ie(xt){return b[xt.getDay()]}function Se(xt){return v[xt.getDay()]}function Ce(xt){return T[xt.getMonth()]}function ke(xt){return y[xt.getMonth()]}function Ke(xt){return p[+(xt.getHours()>=12)]}function Ft(xt){return 1+~~(xt.getMonth()/3)}function Ne(xt){return b[xt.getUTCDay()]}function gn(xt){return v[xt.getUTCDay()]}function _t(xt){return T[xt.getUTCMonth()]}function Et(xt){return y[xt.getUTCMonth()]}function Gt(xt){return p[+(xt.getUTCHours()>=12)]}function ln(xt){return 1+~~(xt.getUTCMonth()/3)}return{format:function(xt){var Pt=ne(xt+="",pe);return Pt.toString=function(){return xt},Pt},parse:function(xt){var Pt=se(xt+="",!1);return Pt.toString=function(){return xt},Pt},utcFormat:function(xt){var Pt=ne(xt+="",be);return Pt.toString=function(){return xt},Pt},utcParse:function(xt){var Pt=se(xt+="",!0);return Pt.toString=function(){return xt},Pt}}}var SFe={"-":"",_:" ",0:"0"},rd=/^\s*\d+/,lOt=/^%/,hOt=/[\\^$*+?|[\]().{}]/g;function mu(i,s,u){var d=i<0?"-":"",p=(d?-i:i)+"",v=p.length;return d+(v[s.toLowerCase(),u]))}function dOt(i,s,u){var d=rd.exec(s.slice(u,u+1));return d?(i.w=+d[0],u+d[0].length):-1}function gOt(i,s,u){var d=rd.exec(s.slice(u,u+1));return d?(i.u=+d[0],u+d[0].length):-1}function pOt(i,s,u){var d=rd.exec(s.slice(u,u+2));return d?(i.U=+d[0],u+d[0].length):-1}function bOt(i,s,u){var d=rd.exec(s.slice(u,u+2));return d?(i.V=+d[0],u+d[0].length):-1}function mOt(i,s,u){var d=rd.exec(s.slice(u,u+2));return d?(i.W=+d[0],u+d[0].length):-1}function _Fe(i,s,u){var d=rd.exec(s.slice(u,u+4));return d?(i.y=+d[0],u+d[0].length):-1}function AFe(i,s,u){var d=rd.exec(s.slice(u,u+2));return d?(i.y=+d[0]+(+d[0]>68?1900:2e3),u+d[0].length):-1}function vOt(i,s,u){var d=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(s.slice(u,u+6));return d?(i.Z=d[1]?0:-(d[2]+(d[3]||"00")),u+d[0].length):-1}function wOt(i,s,u){var d=rd.exec(s.slice(u,u+1));return d?(i.q=d[0]*3-3,u+d[0].length):-1}function yOt(i,s,u){var d=rd.exec(s.slice(u,u+2));return d?(i.m=d[0]-1,u+d[0].length):-1}function LFe(i,s,u){var d=rd.exec(s.slice(u,u+2));return d?(i.d=+d[0],u+d[0].length):-1}function xOt(i,s,u){var d=rd.exec(s.slice(u,u+3));return d?(i.m=0,i.d=+d[0],u+d[0].length):-1}function MFe(i,s,u){var d=rd.exec(s.slice(u,u+2));return d?(i.H=+d[0],u+d[0].length):-1}function kOt(i,s,u){var d=rd.exec(s.slice(u,u+2));return d?(i.M=+d[0],u+d[0].length):-1}function EOt(i,s,u){var d=rd.exec(s.slice(u,u+2));return d?(i.S=+d[0],u+d[0].length):-1}function TOt(i,s,u){var d=rd.exec(s.slice(u,u+3));return d?(i.L=+d[0],u+d[0].length):-1}function COt(i,s,u){var d=rd.exec(s.slice(u,u+6));return d?(i.L=Math.floor(d[0]/1e3),u+d[0].length):-1}function SOt(i,s,u){var d=lOt.exec(s.slice(u,u+1));return d?u+d[0].length:-1}function _Ot(i,s,u){var d=rd.exec(s.slice(u));return d?(i.Q=+d[0],u+d[0].length):-1}function AOt(i,s,u){var d=rd.exec(s.slice(u));return d?(i.s=+d[0],u+d[0].length):-1}function DFe(i,s){return mu(i.getDate(),s,2)}function LOt(i,s){return mu(i.getHours(),s,2)}function MOt(i,s){return mu(i.getHours()%12||12,s,2)}function DOt(i,s){return mu(1+vC.count(x7(i),i),s,3)}function IFe(i,s){return mu(i.getMilliseconds(),s,3)}function IOt(i,s){return IFe(i,s)+"000"}function OOt(i,s){return mu(i.getMonth()+1,s,2)}function NOt(i,s){return mu(i.getMinutes(),s,2)}function POt(i,s){return mu(i.getSeconds(),s,2)}function BOt(i){var s=i.getDay();return s===0?7:s}function FOt(i,s){return mu(MF.count(x7(i)-1,i),s,2)}function OFe(i){var s=i.getDay();return s>=4||s===0?yC(i):yC.ceil(i)}function ROt(i,s){return i=OFe(i),mu(yC.count(x7(i),i)+(x7(i).getDay()===4),s,2)}function jOt(i){return i.getDay()}function $Ot(i,s){return mu(DF.count(x7(i)-1,i),s,2)}function zOt(i,s){return mu(i.getFullYear()%100,s,2)}function qOt(i,s){return i=OFe(i),mu(i.getFullYear()%100,s,2)}function HOt(i,s){return mu(i.getFullYear()%1e4,s,4)}function VOt(i,s){var u=i.getDay();return i=u>=4||u===0?yC(i):yC.ceil(i),mu(i.getFullYear()%1e4,s,4)}function UOt(i){var s=i.getTimezoneOffset();return(s>0?"-":(s*=-1,"+"))+mu(s/60|0,"0",2)+mu(s%60,"0",2)}function NFe(i,s){return mu(i.getUTCDate(),s,2)}function GOt(i,s){return mu(i.getUTCHours(),s,2)}function KOt(i,s){return mu(i.getUTCHours()%12||12,s,2)}function WOt(i,s){return mu(1+Wpe.count(kC(i),i),s,3)}function PFe(i,s){return mu(i.getUTCMilliseconds(),s,3)}function YOt(i,s){return PFe(i,s)+"000"}function XOt(i,s){return mu(i.getUTCMonth()+1,s,2)}function QOt(i,s){return mu(i.getUTCMinutes(),s,2)}function JOt(i,s){return mu(i.getUTCSeconds(),s,2)}function ZOt(i){var s=i.getUTCDay();return s===0?7:s}function eNt(i,s){return mu(CFe.count(kC(i)-1,i),s,2)}function BFe(i){var s=i.getUTCDay();return s>=4||s===0?oD(i):oD.ceil(i)}function tNt(i,s){return i=BFe(i),mu(oD.count(kC(i),i)+(kC(i).getUTCDay()===4),s,2)}function nNt(i){return i.getUTCDay()}function rNt(i,s){return mu(iX.count(kC(i)-1,i),s,2)}function iNt(i,s){return mu(i.getUTCFullYear()%100,s,2)}function sNt(i,s){return i=BFe(i),mu(i.getUTCFullYear()%100,s,2)}function aNt(i,s){return mu(i.getUTCFullYear()%1e4,s,4)}function oNt(i,s){var u=i.getUTCDay();return i=u>=4||u===0?oD(i):oD.ceil(i),mu(i.getUTCFullYear()%1e4,s,4)}function cNt(){return"+0000"}function FFe(){return"%"}function RFe(i){return+i}function jFe(i){return Math.floor(+i/1e3)}var cD,sX;uNt({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function uNt(i){return cD=uOt(i),sX=cD.format,cD.parse,cD.utcFormat,cD.utcParse,cD}function lNt(i){return new Date(i)}function hNt(i){return i instanceof Date?+i:+new Date(+i)}function $Fe(i,s,u,d,p,v,b,y,T,_){var A=wFe(),P=A.invert,R=A.domain,F=_(".%L"),j=_(":%S"),K=_("%I:%M"),ee=_("%I %p"),ie=_("%a %d"),oe=_("%b %d"),pe=_("%B"),be=_("%Y");function ae(ne){return(T(ne)1?0:i<-1?BF:Math.acos(i)}function HFe(i){return i>=1?aX:i<=-1?-aX:Math.asin(i)}function VFe(i){let s=3;return i.digits=function(u){if(!arguments.length)return s;if(u==null)s=null;else{const d=Math.floor(u);if(!(d>=0))throw new RangeError(`invalid digits: ${u}`);s=d}return i},()=>new DIt(s)}function bNt(i){return i.innerRadius}function mNt(i){return i.outerRadius}function vNt(i){return i.startAngle}function wNt(i){return i.endAngle}function yNt(i){return i&&i.padAngle}function xNt(i,s,u,d,p,v,b,y){var T=u-i,_=d-s,A=b-p,P=y-v,R=P*T-A*_;if(!(R*RFe*Fe+Pe*Pe&&(de=ge,X=W),{cx:de,cy:X,x01:-A,y01:-P,x11:de*(p/ae-1),y11:X*(p/ae-1)}}function lD(){var i=bNt,s=mNt,u=Wf(0),d=null,p=vNt,v=wNt,b=yNt,y=null,T=VFe(_);function _(){var A,P,R=+i.apply(this,arguments),F=+s.apply(this,arguments),j=p.apply(this,arguments)-aX,K=v.apply(this,arguments)-aX,ee=qFe(K-j),ie=K>j;if(y||(y=A=T()),FIg))y.moveTo(0,0);else if(ee>oX-Ig)y.moveTo(F*EC(j),F*z4(j)),y.arc(0,0,F,j,K,!ie),R>Ig&&(y.moveTo(R*EC(K),R*z4(K)),y.arc(0,0,R,K,j,ie));else{var oe=j,pe=K,be=j,ae=K,ne=ee,se=ee,de=b.apply(this,arguments)/2,X=de>Ig&&(d?+d.apply(this,arguments):uD(R*R+F*F)),ge=Qpe(qFe(F-R)/2,+u.apply(this,arguments)),W=ge,xe=ge,U,Fe;if(X>Ig){var Pe=HFe(X/R*z4(de)),je=HFe(X/F*z4(de));(ne-=Pe*2)>Ig?(Pe*=ie?1:-1,be+=Pe,ae-=Pe):(ne=0,be=ae=(j+K)/2),(se-=je*2)>Ig?(je*=ie?1:-1,oe+=je,pe-=je):(se=0,oe=pe=(j+K)/2)}var Ie=F*EC(oe),Se=F*z4(oe),Ce=R*EC(ae),ke=R*z4(ae);if(ge>Ig){var Ke=F*EC(pe),Ft=F*z4(pe),Ne=R*EC(be),gn=R*z4(be),_t;if(eeIg?xe>Ig?(U=cX(Ne,gn,Ie,Se,F,xe,ie),Fe=cX(Ke,Ft,Ce,ke,F,xe,ie),y.moveTo(U.cx+U.x01,U.cy+U.y01),xeIg)||!(ne>Ig)?y.lineTo(Ce,ke):W>Ig?(U=cX(Ce,ke,Ke,Ft,R,-W,ie),Fe=cX(Ie,Se,Ne,gn,R,-W,ie),y.lineTo(U.cx+U.x01,U.cy+U.y01),Wi?1:s>=i?0:NaN}function CNt(i){return i}function SNt(){var i=CNt,s=TNt,u=null,d=Wf(0),p=Wf(oX),v=Wf(0);function b(y){var T,_=(y=UFe(y)).length,A,P,R=0,F=new Array(_),j=new Array(_),K=+d.apply(this,arguments),ee=Math.min(oX,Math.max(-oX,p.apply(this,arguments)-K)),ie,oe=Math.min(Math.abs(ee)/_,v.apply(this,arguments)),pe=oe*(ee<0?-1:1),be;for(T=0;T<_;++T)(be=j[F[T]=T]=+i(y[T],T,y))>0&&(R+=be);for(s!=null?F.sort(function(ae,ne){return s(j[ae],j[ne])}):u!=null&&F.sort(function(ae,ne){return u(y[ae],y[ne])}),T=0,P=R?(ee-_*pe)/R:0;T<_;++T,K=ie)A=F[T],be=j[A],ie=K+(be>0?be*P:0)+pe,j[A]={data:y[A],index:T,value:be,startAngle:K,endAngle:ie,padAngle:oe};return j}return b.value=function(y){return arguments.length?(i=typeof y=="function"?y:Wf(+y),b):i},b.sortValues=function(y){return arguments.length?(s=y,u=null,b):s},b.sort=function(y){return arguments.length?(u=y,s=null,b):u},b.startAngle=function(y){return arguments.length?(d=typeof y=="function"?y:Wf(+y),b):d},b.endAngle=function(y){return arguments.length?(p=typeof y=="function"?y:Wf(+y),b):p},b.padAngle=function(y){return arguments.length?(v=typeof y=="function"?y:Wf(+y),b):v},b}class KFe{constructor(s,u){this._context=s,this._x=u}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(s,u){switch(s=+s,u=+u,this._point){case 0:{this._point=1,this._line?this._context.lineTo(s,u):this._context.moveTo(s,u);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+s)/2,this._y0,this._x0,u,s,u):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+u)/2,s,this._y0,s,u);break}}this._x0=s,this._y0=u}}function _Nt(i){return new KFe(i,!0)}function ANt(i){return new KFe(i,!1)}function m9(){}function uX(i,s,u){i._context.bezierCurveTo((2*i._x0+i._x1)/3,(2*i._y0+i._y1)/3,(i._x0+2*i._x1)/3,(i._y0+2*i._y1)/3,(i._x0+4*i._x1+s)/6,(i._y0+4*i._y1+u)/6)}function lX(i){this._context=i}lX.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:uX(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(i,s){switch(i=+i,s=+s,this._point){case 0:this._point=1,this._line?this._context.lineTo(i,s):this._context.moveTo(i,s);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:uX(this,i,s);break}this._x0=this._x1,this._x1=i,this._y0=this._y1,this._y1=s}};function FF(i){return new lX(i)}function WFe(i){this._context=i}WFe.prototype={areaStart:m9,areaEnd:m9,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(i,s){switch(i=+i,s=+s,this._point){case 0:this._point=1,this._x2=i,this._y2=s;break;case 1:this._point=2,this._x3=i,this._y3=s;break;case 2:this._point=3,this._x4=i,this._y4=s,this._context.moveTo((this._x0+4*this._x1+i)/6,(this._y0+4*this._y1+s)/6);break;default:uX(this,i,s);break}this._x0=this._x1,this._x1=i,this._y0=this._y1,this._y1=s}};function LNt(i){return new WFe(i)}function YFe(i){this._context=i}YFe.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(i,s){switch(i=+i,s=+s,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var u=(this._x0+4*this._x1+i)/6,d=(this._y0+4*this._y1+s)/6;this._line?this._context.lineTo(u,d):this._context.moveTo(u,d);break;case 3:this._point=4;default:uX(this,i,s);break}this._x0=this._x1,this._x1=i,this._y0=this._y1,this._y1=s}};function MNt(i){return new YFe(i)}function XFe(i,s){this._basis=new lX(i),this._beta=s}XFe.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var i=this._x,s=this._y,u=i.length-1;if(u>0)for(var d=i[0],p=s[0],v=i[u]-d,b=s[u]-p,y=-1,T;++y<=u;)T=y/u,this._basis.point(this._beta*i[y]+(1-this._beta)*(d+T*v),this._beta*s[y]+(1-this._beta)*(p+T*b));this._x=this._y=null,this._basis.lineEnd()},point:function(i,s){this._x.push(+i),this._y.push(+s)}};const DNt=function i(s){function u(d){return s===1?new lX(d):new XFe(d,s)}return u.beta=function(d){return i(+d)},u}(.85);function hX(i,s,u){i._context.bezierCurveTo(i._x1+i._k*(i._x2-i._x0),i._y1+i._k*(i._y2-i._y0),i._x2+i._k*(i._x1-s),i._y2+i._k*(i._y1-u),i._x2,i._y2)}function Jpe(i,s){this._context=i,this._k=(1-s)/6}Jpe.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:hX(this,this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(i,s){switch(i=+i,s=+s,this._point){case 0:this._point=1,this._line?this._context.lineTo(i,s):this._context.moveTo(i,s);break;case 1:this._point=2,this._x1=i,this._y1=s;break;case 2:this._point=3;default:hX(this,i,s);break}this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=s}};const INt=function i(s){function u(d){return new Jpe(d,s)}return u.tension=function(d){return i(+d)},u}(0);function Zpe(i,s){this._context=i,this._k=(1-s)/6}Zpe.prototype={areaStart:m9,areaEnd:m9,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},point:function(i,s){switch(i=+i,s=+s,this._point){case 0:this._point=1,this._x3=i,this._y3=s;break;case 1:this._point=2,this._context.moveTo(this._x4=i,this._y4=s);break;case 2:this._point=3,this._x5=i,this._y5=s;break;default:hX(this,i,s);break}this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=s}};const ONt=function i(s){function u(d){return new Zpe(d,s)}return u.tension=function(d){return i(+d)},u}(0);function e2e(i,s){this._context=i,this._k=(1-s)/6}e2e.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(i,s){switch(i=+i,s=+s,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:hX(this,i,s);break}this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=s}};const NNt=function i(s){function u(d){return new e2e(d,s)}return u.tension=function(d){return i(+d)},u}(0);function t2e(i,s,u){var d=i._x1,p=i._y1,v=i._x2,b=i._y2;if(i._l01_a>Ig){var y=2*i._l01_2a+3*i._l01_a*i._l12_a+i._l12_2a,T=3*i._l01_a*(i._l01_a+i._l12_a);d=(d*y-i._x0*i._l12_2a+i._x2*i._l01_2a)/T,p=(p*y-i._y0*i._l12_2a+i._y2*i._l01_2a)/T}if(i._l23_a>Ig){var _=2*i._l23_2a+3*i._l23_a*i._l12_a+i._l12_2a,A=3*i._l23_a*(i._l23_a+i._l12_a);v=(v*_+i._x1*i._l23_2a-s*i._l12_2a)/A,b=(b*_+i._y1*i._l23_2a-u*i._l12_2a)/A}i._context.bezierCurveTo(d,p,v,b,i._x2,i._y2)}function QFe(i,s){this._context=i,this._alpha=s}QFe.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(i,s){if(i=+i,s=+s,this._point){var u=this._x2-i,d=this._y2-s;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(u*u+d*d,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(i,s):this._context.moveTo(i,s);break;case 1:this._point=2;break;case 2:this._point=3;default:t2e(this,i,s);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=s}};const PNt=function i(s){function u(d){return s?new QFe(d,s):new Jpe(d,0)}return u.alpha=function(d){return i(+d)},u}(.5);function JFe(i,s){this._context=i,this._alpha=s}JFe.prototype={areaStart:m9,areaEnd:m9,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},point:function(i,s){if(i=+i,s=+s,this._point){var u=this._x2-i,d=this._y2-s;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(u*u+d*d,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=i,this._y3=s;break;case 1:this._point=2,this._context.moveTo(this._x4=i,this._y4=s);break;case 2:this._point=3,this._x5=i,this._y5=s;break;default:t2e(this,i,s);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=s}};const BNt=function i(s){function u(d){return s?new JFe(d,s):new Zpe(d,0)}return u.alpha=function(d){return i(+d)},u}(.5);function ZFe(i,s){this._context=i,this._alpha=s}ZFe.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(i,s){if(i=+i,s=+s,this._point){var u=this._x2-i,d=this._y2-s;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(u*u+d*d,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:t2e(this,i,s);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=i,this._y0=this._y1,this._y1=this._y2,this._y2=s}};const FNt=function i(s){function u(d){return s?new ZFe(d,s):new e2e(d,0)}return u.alpha=function(d){return i(+d)},u}(.5);function eRe(i){this._context=i}eRe.prototype={areaStart:m9,areaEnd:m9,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(i,s){i=+i,s=+s,this._point?this._context.lineTo(i,s):(this._point=1,this._context.moveTo(i,s))}};function RNt(i){return new eRe(i)}function tRe(i){return i<0?-1:1}function nRe(i,s,u){var d=i._x1-i._x0,p=s-i._x1,v=(i._y1-i._y0)/(d||p<0&&-0),b=(u-i._y1)/(p||d<0&&-0),y=(v*p+b*d)/(d+p);return(tRe(v)+tRe(b))*Math.min(Math.abs(v),Math.abs(b),.5*Math.abs(y))||0}function rRe(i,s){var u=i._x1-i._x0;return u?(3*(i._y1-i._y0)/u-s)/2:s}function n2e(i,s,u){var d=i._x0,p=i._y0,v=i._x1,b=i._y1,y=(v-d)/3;i._context.bezierCurveTo(d+y,p+y*s,v-y,b-y*u,v,b)}function fX(i){this._context=i}fX.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:n2e(this,this._t0,rRe(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(i,s){var u=NaN;if(i=+i,s=+s,!(i===this._x1&&s===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(i,s):this._context.moveTo(i,s);break;case 1:this._point=2;break;case 2:this._point=3,n2e(this,rRe(this,u=nRe(this,i,s)),u);break;default:n2e(this,this._t0,u=nRe(this,i,s));break}this._x0=this._x1,this._x1=i,this._y0=this._y1,this._y1=s,this._t0=u}}};function iRe(i){this._context=new sRe(i)}(iRe.prototype=Object.create(fX.prototype)).point=function(i,s){fX.prototype.point.call(this,s,i)};function sRe(i){this._context=i}sRe.prototype={moveTo:function(i,s){this._context.moveTo(s,i)},closePath:function(){this._context.closePath()},lineTo:function(i,s){this._context.lineTo(s,i)},bezierCurveTo:function(i,s,u,d,p,v){this._context.bezierCurveTo(s,i,d,u,v,p)}};function jNt(i){return new fX(i)}function $Nt(i){return new iRe(i)}function aRe(i){this._context=i}aRe.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var i=this._x,s=this._y,u=i.length;if(u)if(this._line?this._context.lineTo(i[0],s[0]):this._context.moveTo(i[0],s[0]),u===2)this._context.lineTo(i[1],s[1]);else for(var d=oRe(i),p=oRe(s),v=0,b=1;b=0;--s)p[s]=(b[s]-p[s+1])/v[s];for(v[u-1]=(i[u]+p[u-1])/2,s=0;s=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(i,s){switch(i=+i,s=+s,this._point){case 0:this._point=1,this._line?this._context.lineTo(i,s):this._context.moveTo(i,s);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,s),this._context.lineTo(i,s);else{var u=this._x*(1-this._t)+i*this._t;this._context.lineTo(u,this._y),this._context.lineTo(u,s)}break}}this._x=i,this._y=s}};function qNt(i){return new dX(i,.5)}function HNt(i){return new dX(i,0)}function VNt(i){return new dX(i,1)}function RF(i,s,u){this.k=i,this.x=s,this.y=u}RF.prototype={constructor:RF,scale:function(i){return i===1?this:new RF(this.k*i,this.x,this.y)},translate:function(i,s){return i===0&s===0?this:new RF(this.k,this.x+this.k*i,this.y+this.k*s)},apply:function(i){return[i[0]*this.k+this.x,i[1]*this.k+this.y]},applyX:function(i){return i*this.k+this.x},applyY:function(i){return i*this.k+this.y},invert:function(i){return[(i[0]-this.x)/this.k,(i[1]-this.y)/this.k]},invertX:function(i){return(i-this.x)/this.k},invertY:function(i){return(i-this.y)/this.k},rescaleX:function(i){return i.copy().domain(i.range().map(this.invertX,this).map(i.invert,i))},rescaleY:function(i){return i.copy().domain(i.range().map(this.invertY,this).map(i.invert,i))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}},RF.prototype;/*! @license DOMPurify 3.0.9 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.0.9/LICENSE */const{entries:cRe,setPrototypeOf:uRe,isFrozen:UNt,getPrototypeOf:GNt,getOwnPropertyDescriptor:KNt}=Object;let{freeze:Ep,seal:D3,create:lRe}=Object,{apply:r2e,construct:i2e}=typeof Reflect<"u"&&Reflect;Ep||(Ep=function(s){return s}),D3||(D3=function(s){return s}),r2e||(r2e=function(s,u,d){return s.apply(u,d)}),i2e||(i2e=function(s,u){return new s(...u)});const gX=sm(Array.prototype.forEach),hRe=sm(Array.prototype.pop),jF=sm(Array.prototype.push),pX=sm(String.prototype.toLowerCase),s2e=sm(String.prototype.toString),WNt=sm(String.prototype.match),$F=sm(String.prototype.replace),YNt=sm(String.prototype.indexOf),XNt=sm(String.prototype.trim),I3=sm(Object.prototype.hasOwnProperty),im=sm(RegExp.prototype.test),zF=QNt(TypeError);function sm(i){return function(s){for(var u=arguments.length,d=new Array(u>1?u-1:0),p=1;p2&&arguments[2]!==void 0?arguments[2]:pX;uRe&&uRe(i,null);let d=s.length;for(;d--;){let p=s[d];if(typeof p=="string"){const v=u(p);v!==p&&(UNt(s)||(s[d]=v),p=v)}i[p]=!0}return i}function JNt(i){for(let s=0;s/gm),rPt=D3(/\${[\w\W]*}/gm),iPt=D3(/^data-[\-\w.\u00B7-\uFFFF]/),sPt=D3(/^aria-[\-\w]+$/),bRe=D3(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),aPt=D3(/^(?:\w+script|data):/i),oPt=D3(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),mRe=D3(/^html$/i);var vRe=Object.freeze({__proto__:null,MUSTACHE_EXPR:tPt,ERB_EXPR:nPt,TMPLIT_EXPR:rPt,DATA_ATTR:iPt,ARIA_ATTR:sPt,IS_ALLOWED_URI:bRe,IS_SCRIPT_OR_DATA:aPt,ATTR_WHITESPACE:oPt,DOCTYPE_NAME:mRe});const cPt=function(){return typeof window>"u"?null:window},uPt=function(s,u){if(typeof s!="object"||typeof s.createPolicy!="function")return null;let d=null;const p="data-tt-policy-suffix";u&&u.hasAttribute(p)&&(d=u.getAttribute(p));const v="dompurify"+(d?"#"+d:"");try{return s.createPolicy(v,{createHTML(b){return b},createScriptURL(b){return b}})}catch{return console.warn("TrustedTypes policy "+v+" could not be created."),null}};function wRe(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:cPt();const s=as=>wRe(as);if(s.version="3.0.9",s.removed=[],!i||!i.document||i.document.nodeType!==9)return s.isSupported=!1,s;let{document:u}=i;const d=u,p=d.currentScript,{DocumentFragment:v,HTMLTemplateElement:b,Node:y,Element:T,NodeFilter:_,NamedNodeMap:A=i.NamedNodeMap||i.MozNamedAttrMap,HTMLFormElement:P,DOMParser:R,trustedTypes:F}=i,j=T.prototype,K=bX(j,"cloneNode"),ee=bX(j,"nextSibling"),ie=bX(j,"childNodes"),oe=bX(j,"parentNode");if(typeof b=="function"){const as=u.createElement("template");as.content&&as.content.ownerDocument&&(u=as.content.ownerDocument)}let pe,be="";const{implementation:ae,createNodeIterator:ne,createDocumentFragment:se,getElementsByTagName:de}=u,{importNode:X}=d;let ge={};s.isSupported=typeof cRe=="function"&&typeof oe=="function"&&ae&&ae.createHTMLDocument!==void 0;const{MUSTACHE_EXPR:W,ERB_EXPR:xe,TMPLIT_EXPR:U,DATA_ATTR:Fe,ARIA_ATTR:Pe,IS_SCRIPT_OR_DATA:je,ATTR_WHITESPACE:Ie}=vRe;let{IS_ALLOWED_URI:Se}=vRe,Ce=null;const ke=Cc({},[...fRe,...a2e,...o2e,...c2e,...dRe]);let Ke=null;const Ft=Cc({},[...gRe,...u2e,...pRe,...mX]);let Ne=Object.seal(lRe(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),gn=null,_t=null,Et=!0,Gt=!0,ln=!1,xt=!0,Pt=!1,Qe=!1,Dt=!1,kt=!1,On=!1,ht=!1,zr=!1,yt=!0,ji=!1;const xi="user-content-";let Ma=!0,zs=!1,ao={},Tr=null;const Fn=Cc({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let qn=null;const Un=Cc({},["audio","video","img","source","image","track"]);let At=null;const wt=Cc({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),on="http://www.w3.org/1998/Math/MathML",fn="http://www.w3.org/2000/svg",An="http://www.w3.org/1999/xhtml";let oo=An,jo=!1,$o=null;const Pa=Cc({},[on,fn,An],s2e);let wo=null;const _s=["application/xhtml+xml","text/html"],tl="text/html";let da=null,j0=null;const pm=u.createElement("form"),Ml=function(wn){return wn instanceof RegExp||wn instanceof Function},Xc=function(){let wn=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(j0&&j0===wn)){if((!wn||typeof wn!="object")&&(wn={}),wn=TC(wn),wo=_s.indexOf(wn.PARSER_MEDIA_TYPE)===-1?tl:wn.PARSER_MEDIA_TYPE,da=wo==="application/xhtml+xml"?s2e:pX,Ce=I3(wn,"ALLOWED_TAGS")?Cc({},wn.ALLOWED_TAGS,da):ke,Ke=I3(wn,"ALLOWED_ATTR")?Cc({},wn.ALLOWED_ATTR,da):Ft,$o=I3(wn,"ALLOWED_NAMESPACES")?Cc({},wn.ALLOWED_NAMESPACES,s2e):Pa,At=I3(wn,"ADD_URI_SAFE_ATTR")?Cc(TC(wt),wn.ADD_URI_SAFE_ATTR,da):wt,qn=I3(wn,"ADD_DATA_URI_TAGS")?Cc(TC(Un),wn.ADD_DATA_URI_TAGS,da):Un,Tr=I3(wn,"FORBID_CONTENTS")?Cc({},wn.FORBID_CONTENTS,da):Fn,gn=I3(wn,"FORBID_TAGS")?Cc({},wn.FORBID_TAGS,da):{},_t=I3(wn,"FORBID_ATTR")?Cc({},wn.FORBID_ATTR,da):{},ao=I3(wn,"USE_PROFILES")?wn.USE_PROFILES:!1,Et=wn.ALLOW_ARIA_ATTR!==!1,Gt=wn.ALLOW_DATA_ATTR!==!1,ln=wn.ALLOW_UNKNOWN_PROTOCOLS||!1,xt=wn.ALLOW_SELF_CLOSE_IN_ATTR!==!1,Pt=wn.SAFE_FOR_TEMPLATES||!1,Qe=wn.WHOLE_DOCUMENT||!1,On=wn.RETURN_DOM||!1,ht=wn.RETURN_DOM_FRAGMENT||!1,zr=wn.RETURN_TRUSTED_TYPE||!1,kt=wn.FORCE_BODY||!1,yt=wn.SANITIZE_DOM!==!1,ji=wn.SANITIZE_NAMED_PROPS||!1,Ma=wn.KEEP_CONTENT!==!1,zs=wn.IN_PLACE||!1,Se=wn.ALLOWED_URI_REGEXP||bRe,oo=wn.NAMESPACE||An,Ne=wn.CUSTOM_ELEMENT_HANDLING||{},wn.CUSTOM_ELEMENT_HANDLING&&Ml(wn.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(Ne.tagNameCheck=wn.CUSTOM_ELEMENT_HANDLING.tagNameCheck),wn.CUSTOM_ELEMENT_HANDLING&&Ml(wn.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(Ne.attributeNameCheck=wn.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),wn.CUSTOM_ELEMENT_HANDLING&&typeof wn.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(Ne.allowCustomizedBuiltInElements=wn.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Pt&&(Gt=!1),ht&&(On=!0),ao&&(Ce=Cc({},dRe),Ke=[],ao.html===!0&&(Cc(Ce,fRe),Cc(Ke,gRe)),ao.svg===!0&&(Cc(Ce,a2e),Cc(Ke,u2e),Cc(Ke,mX)),ao.svgFilters===!0&&(Cc(Ce,o2e),Cc(Ke,u2e),Cc(Ke,mX)),ao.mathMl===!0&&(Cc(Ce,c2e),Cc(Ke,pRe),Cc(Ke,mX))),wn.ADD_TAGS&&(Ce===ke&&(Ce=TC(Ce)),Cc(Ce,wn.ADD_TAGS,da)),wn.ADD_ATTR&&(Ke===Ft&&(Ke=TC(Ke)),Cc(Ke,wn.ADD_ATTR,da)),wn.ADD_URI_SAFE_ATTR&&Cc(At,wn.ADD_URI_SAFE_ATTR,da),wn.FORBID_CONTENTS&&(Tr===Fn&&(Tr=TC(Tr)),Cc(Tr,wn.FORBID_CONTENTS,da)),Ma&&(Ce["#text"]=!0),Qe&&Cc(Ce,["html","head","body"]),Ce.table&&(Cc(Ce,["tbody"]),delete gn.tbody),wn.TRUSTED_TYPES_POLICY){if(typeof wn.TRUSTED_TYPES_POLICY.createHTML!="function")throw zF('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof wn.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw zF('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');pe=wn.TRUSTED_TYPES_POLICY,be=pe.createHTML("")}else pe===void 0&&(pe=uPt(F,p)),pe!==null&&typeof be=="string"&&(be=pe.createHTML(""));Ep&&Ep(wn),j0=wn}},Bc=Cc({},["mi","mo","mn","ms","mtext"]),ja=Cc({},["foreignobject","desc","title","annotation-xml"]),Ou=Cc({},["title","style","font","a","script"]),Sa=Cc({},[...a2e,...o2e,...ZNt]),Po=Cc({},[...c2e,...ePt]),Fc=function(wn){let Zr=oe(wn);(!Zr||!Zr.tagName)&&(Zr={namespaceURI:oo,tagName:"template"});const Zi=pX(wn.tagName),nu=pX(Zr.tagName);return $o[wn.namespaceURI]?wn.namespaceURI===fn?Zr.namespaceURI===An?Zi==="svg":Zr.namespaceURI===on?Zi==="svg"&&(nu==="annotation-xml"||Bc[nu]):!!Sa[Zi]:wn.namespaceURI===on?Zr.namespaceURI===An?Zi==="math":Zr.namespaceURI===fn?Zi==="math"&&ja[nu]:!!Po[Zi]:wn.namespaceURI===An?Zr.namespaceURI===fn&&!ja[nu]||Zr.namespaceURI===on&&!Bc[nu]?!1:!Po[Zi]&&(Ou[Zi]||!Sa[Zi]):!!(wo==="application/xhtml+xml"&&$o[wn.namespaceURI]):!1},xa=function(wn){jF(s.removed,{element:wn});try{wn.parentNode.removeChild(wn)}catch{wn.remove()}},Ba=function(wn,Zr){try{jF(s.removed,{attribute:Zr.getAttributeNode(wn),from:Zr})}catch{jF(s.removed,{attribute:null,from:Zr})}if(Zr.removeAttribute(wn),wn==="is"&&!Ke[wn])if(On||ht)try{xa(Zr)}catch{}else try{Zr.setAttribute(wn,"")}catch{}},ga=function(wn){let Zr=null,Zi=null;if(kt)wn=""+wn;else{const Dl=WNt(wn,/^[\r\n\t ]+/);Zi=Dl&&Dl[0]}wo==="application/xhtml+xml"&&oo===An&&(wn=''+wn+"");const nu=pe?pe.createHTML(wn):wn;if(oo===An)try{Zr=new R().parseFromString(nu,wo)}catch{}if(!Zr||!Zr.documentElement){Zr=ae.createDocument(oo,"template",null);try{Zr.documentElement.innerHTML=jo?be:nu}catch{}}const vu=Zr.body||Zr.documentElement;return wn&&Zi&&vu.insertBefore(u.createTextNode(Zi),vu.childNodes[0]||null),oo===An?de.call(Zr,Qe?"html":"body")[0]:Qe?Zr.documentElement:vu},kh=function(wn){return ne.call(wn.ownerDocument||wn,wn,_.SHOW_ELEMENT|_.SHOW_COMMENT|_.SHOW_TEXT,null)},lu=function(wn){return wn instanceof P&&(typeof wn.nodeName!="string"||typeof wn.textContent!="string"||typeof wn.removeChild!="function"||!(wn.attributes instanceof A)||typeof wn.removeAttribute!="function"||typeof wn.setAttribute!="function"||typeof wn.namespaceURI!="string"||typeof wn.insertBefore!="function"||typeof wn.hasChildNodes!="function")},o5=function(wn){return typeof y=="function"&&wn instanceof y},Wh=function(wn,Zr,Zi){ge[wn]&&gX(ge[wn],nu=>{nu.call(s,Zr,Zi,j0)})},od=function(wn){let Zr=null;if(Wh("beforeSanitizeElements",wn,null),lu(wn))return xa(wn),!0;const Zi=da(wn.nodeName);if(Wh("uponSanitizeElement",wn,{tagName:Zi,allowedTags:Ce}),wn.hasChildNodes()&&!o5(wn.firstElementChild)&&im(/<[/\w]/g,wn.innerHTML)&&im(/<[/\w]/g,wn.textContent))return xa(wn),!0;if(!Ce[Zi]||gn[Zi]){if(!gn[Zi]&&cd(Zi)&&(Ne.tagNameCheck instanceof RegExp&&im(Ne.tagNameCheck,Zi)||Ne.tagNameCheck instanceof Function&&Ne.tagNameCheck(Zi)))return!1;if(Ma&&!Tr[Zi]){const nu=oe(wn)||wn.parentNode,vu=ie(wn)||wn.childNodes;if(vu&&nu){const Dl=vu.length;for(let Yh=Dl-1;Yh>=0;--Yh)nu.insertBefore(K(vu[Yh],!0),ee(wn))}}return xa(wn),!0}return wn instanceof T&&!Fc(wn)||(Zi==="noscript"||Zi==="noembed"||Zi==="noframes")&&im(/<\/no(script|embed|frames)/i,wn.innerHTML)?(xa(wn),!0):(Pt&&wn.nodeType===3&&(Zr=wn.textContent,gX([W,xe,U],nu=>{Zr=$F(Zr,nu," ")}),wn.textContent!==Zr&&(jF(s.removed,{element:wn.cloneNode()}),wn.textContent=Zr)),Wh("afterSanitizeElements",wn,null),!1)},Gd=function(wn,Zr,Zi){if(yt&&(Zr==="id"||Zr==="name")&&(Zi in u||Zi in pm))return!1;if(!(Gt&&!_t[Zr]&&im(Fe,Zr))){if(!(Et&&im(Pe,Zr))){if(!Ke[Zr]||_t[Zr]){if(!(cd(wn)&&(Ne.tagNameCheck instanceof RegExp&&im(Ne.tagNameCheck,wn)||Ne.tagNameCheck instanceof Function&&Ne.tagNameCheck(wn))&&(Ne.attributeNameCheck instanceof RegExp&&im(Ne.attributeNameCheck,Zr)||Ne.attributeNameCheck instanceof Function&&Ne.attributeNameCheck(Zr))||Zr==="is"&&Ne.allowCustomizedBuiltInElements&&(Ne.tagNameCheck instanceof RegExp&&im(Ne.tagNameCheck,Zi)||Ne.tagNameCheck instanceof Function&&Ne.tagNameCheck(Zi))))return!1}else if(!At[Zr]){if(!im(Se,$F(Zi,Ie,""))){if(!((Zr==="src"||Zr==="xlink:href"||Zr==="href")&&wn!=="script"&&YNt(Zi,"data:")===0&&qn[wn])){if(!(ln&&!im(je,$F(Zi,Ie,"")))){if(Zi)return!1}}}}}}return!0},cd=function(wn){return wn!=="annotation-xml"&&wn.indexOf("-")>0},Kd=function(wn){Wh("beforeSanitizeAttributes",wn,null);const{attributes:Zr}=wn;if(!Zr)return;const Zi={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Ke};let nu=Zr.length;for(;nu--;){const vu=Zr[nu],{name:Dl,namespaceURI:Yh,value:w1}=vu,$0=da(Dl);let Wi=Dl==="value"?w1:XNt(w1);if(Zi.attrName=$0,Zi.attrValue=Wi,Zi.keepAttr=!0,Zi.forceKeepAttr=void 0,Wh("uponSanitizeAttribute",wn,Zi),Wi=Zi.attrValue,Zi.forceKeepAttr||(Ba(Dl,wn),!Zi.keepAttr))continue;if(!xt&&im(/\/>/i,Wi)){Ba(Dl,wn);continue}Pt&&gX([W,xe,U],Qa=>{Wi=$F(Wi,Qa," ")});const Bs=da(wn.nodeName);if(Gd(Bs,$0,Wi)){if(ji&&($0==="id"||$0==="name")&&(Ba(Dl,wn),Wi=xi+Wi),pe&&typeof F=="object"&&typeof F.getAttributeType=="function"&&!Yh)switch(F.getAttributeType(Bs,$0)){case"TrustedHTML":{Wi=pe.createHTML(Wi);break}case"TrustedScriptURL":{Wi=pe.createScriptURL(Wi);break}}try{Yh?wn.setAttributeNS(Yh,Dl,Wi):wn.setAttribute(Dl,Wi),hRe(s.removed)}catch{}}}Wh("afterSanitizeAttributes",wn,null)},$g=function as(wn){let Zr=null;const Zi=kh(wn);for(Wh("beforeSanitizeShadowDOM",wn,null);Zr=Zi.nextNode();)Wh("uponSanitizeShadowNode",Zr,null),!od(Zr)&&(Zr.content instanceof v&&as(Zr.content),Kd(Zr));Wh("afterSanitizeShadowDOM",wn,null)};return s.sanitize=function(as){let wn=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},Zr=null,Zi=null,nu=null,vu=null;if(jo=!as,jo&&(as=""),typeof as!="string"&&!o5(as))if(typeof as.toString=="function"){if(as=as.toString(),typeof as!="string")throw zF("dirty is not a string, aborting")}else throw zF("toString is not a function");if(!s.isSupported)return as;if(Dt||Xc(wn),s.removed=[],typeof as=="string"&&(zs=!1),zs){if(as.nodeName){const w1=da(as.nodeName);if(!Ce[w1]||gn[w1])throw zF("root node is forbidden and cannot be sanitized in-place")}}else if(as instanceof y)Zr=ga(""),Zi=Zr.ownerDocument.importNode(as,!0),Zi.nodeType===1&&Zi.nodeName==="BODY"||Zi.nodeName==="HTML"?Zr=Zi:Zr.appendChild(Zi);else{if(!On&&!Pt&&!Qe&&as.indexOf("<")===-1)return pe&&zr?pe.createHTML(as):as;if(Zr=ga(as),!Zr)return On?null:zr?be:""}Zr&&kt&&xa(Zr.firstChild);const Dl=kh(zs?as:Zr);for(;nu=Dl.nextNode();)od(nu)||(nu.content instanceof v&&$g(nu.content),Kd(nu));if(zs)return as;if(On){if(ht)for(vu=se.call(Zr.ownerDocument);Zr.firstChild;)vu.appendChild(Zr.firstChild);else vu=Zr;return(Ke.shadowroot||Ke.shadowrootmode)&&(vu=X.call(d,vu,!0)),vu}let Yh=Qe?Zr.outerHTML:Zr.innerHTML;return Qe&&Ce["!doctype"]&&Zr.ownerDocument&&Zr.ownerDocument.doctype&&Zr.ownerDocument.doctype.name&&im(mRe,Zr.ownerDocument.doctype.name)&&(Yh=" -`+Yh),Pt&&gX([W,xe,U],w1=>{Yh=$F(Yh,w1," ")}),pe&&zr?pe.createHTML(Yh):Yh},s.setConfig=function(){let as=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Xc(as),Dt=!0},s.clearConfig=function(){j0=null,Dt=!1},s.isValidAttribute=function(as,wn,Zr){j0||Xc({});const Zi=da(as),nu=da(wn);return Gd(Zi,nu,Zr)},s.addHook=function(as,wn){typeof wn=="function"&&(ge[as]=ge[as]||[],jF(ge[as],wn))},s.removeHook=function(as){if(ge[as])return hRe(ge[as])},s.removeHooks=function(as){ge[as]&&(ge[as]=[])},s.removeAllHooks=function(){ge={}},s}var hD=wRe();const fD=//gi,lPt=i=>i?kRe(i).replace(/\\n/g,"#br#").split("#br#"):[""],hPt=(()=>{let i=!1;return()=>{i||(fPt(),i=!0)}})();function fPt(){const i="data-temp-href-target";hD.addHook("beforeSanitizeAttributes",s=>{s.tagName==="A"&&s.hasAttribute("target")&&s.setAttribute(i,s.getAttribute("target")||"")}),hD.addHook("afterSanitizeAttributes",s=>{s.tagName==="A"&&s.hasAttribute(i)&&(s.setAttribute("target",s.getAttribute(i)||""),s.removeAttribute(i),s.getAttribute("target")==="_blank"&&s.setAttribute("rel","noopener"))})}const yRe=i=>(hPt(),hD.sanitize(i)),xRe=(i,s)=>{var u;if(((u=s.flowchart)==null?void 0:u.htmlLabels)!==!1){const d=s.securityLevel;d==="antiscript"||d==="strict"?i=yRe(i):d!=="loose"&&(i=kRe(i),i=i.replace(//g,">"),i=i.replace(/=/g,"="),i=bPt(i))}return i},Yf=(i,s)=>i&&(s.dompurifyConfig?i=hD.sanitize(xRe(i,s),s.dompurifyConfig).toString():i=hD.sanitize(xRe(i,s),{FORBID_TAGS:["style"]}).toString(),i),dPt=(i,s)=>typeof i=="string"?Yf(i,s):i.flat().map(u=>Yf(u,s)),gPt=i=>fD.test(i),pPt=i=>i.split(fD),bPt=i=>i.replace(/#br#/g,"
"),kRe=i=>i.replace(fD,"#br#"),mPt=i=>{let s="";return i&&(s=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,s=s.replaceAll(/\(/g,"\\("),s=s.replaceAll(/\)/g,"\\)")),s},f1=i=>!(i===!1||["false","null","0"].includes(String(i).trim().toLowerCase())),vPt=function(...i){const s=i.filter(u=>!isNaN(u));return Math.max(...s)},wPt=function(...i){const s=i.filter(u=>!isNaN(u));return Math.min(...s)},qF=function(i){const s=i.split(/(,)/),u=[];for(let d=0;d0&&d+1Math.max(0,i.split(s).length-1),yPt=(i,s)=>{const u=l2e(i,"~"),d=l2e(s,"~");return u===1&&d===1},xPt=i=>{const s=l2e(i,"~");let u=!1;if(s<=1)return i;s%2!==0&&i.startsWith("~")&&(i=i.substring(1),u=!0);const d=[...i];let p=d.indexOf("~"),v=d.lastIndexOf("~");for(;p!==-1&&v!==-1&&p!==v;)d[p]="<",d[v]=">",p=d.indexOf("~"),v=d.lastIndexOf("~");return u&&d.unshift("~"),d.join("")},ERe=()=>window.MathMLElement!==void 0,h2e=/\$\$(.*)\$\$/g,Dv=i=>{var s;return(((s=i.match(h2e))==null?void 0:s.length)??0)>0},HF=async(i,s)=>{i=await CC(i,s);const u=document.createElement("div");u.innerHTML=i,u.id="katex-temp",u.style.visibility="hidden",u.style.position="absolute",u.style.top="0";const d=document.querySelector("body");d==null||d.insertAdjacentElement("beforeend",u);const p={width:u.clientWidth,height:u.clientHeight};return u.remove(),p},CC=async(i,s)=>{if(!Dv(i))return i;if(!ERe()&&!s.legacyMathML)return i.replace(h2e,"MathML is unsupported in this environment.");const{default:u}=await Promise.resolve().then(()=>MVt);return i.split(fD).map(d=>Dv(d)?` -
- ${d} -
- `:`
${d}
`).join("").replace(h2e,(d,p)=>u.renderToString(p,{throwOnError:!0,displayMode:!0,output:ERe()?"mathml":"htmlAndMathml"}).replace(/\n/g," ").replace(//g,""))},ci={getRows:lPt,sanitizeText:Yf,sanitizeTextOrArray:dPt,hasBreaks:gPt,splitBreaks:pPt,lineBreakRegex:fD,removeScript:yRe,getUrl:mPt,evaluate:f1,getMax:vPt,getMin:wPt},vX={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:i=>i>=255?255:i<0?0:i,g:i=>i>=255?255:i<0?0:i,b:i=>i>=255?255:i<0?0:i,h:i=>i%360,s:i=>i>=100?100:i<0?0:i,l:i=>i>=100?100:i<0?0:i,a:i=>i>=1?1:i<0?0:i},toLinear:i=>{const s=i/255;return i>.03928?Math.pow((s+.055)/1.055,2.4):s/12.92},hue2rgb:(i,s,u)=>(u<0&&(u+=1),u>1&&(u-=1),u<1/6?i+(s-i)*6*u:u<1/2?s:u<2/3?i+(s-i)*(2/3-u)*6:i),hsl2rgb:({h:i,s,l:u},d)=>{if(!s)return u*2.55;i/=360,s/=100,u/=100;const p=u<.5?u*(1+s):u+s-u*s,v=2*u-p;switch(d){case"r":return vX.hue2rgb(v,p,i+1/3)*255;case"g":return vX.hue2rgb(v,p,i)*255;case"b":return vX.hue2rgb(v,p,i-1/3)*255}},rgb2hsl:({r:i,g:s,b:u},d)=>{i/=255,s/=255,u/=255;const p=Math.max(i,s,u),v=Math.min(i,s,u),b=(p+v)/2;if(d==="l")return b*100;if(p===v)return 0;const y=p-v,T=b>.5?y/(2-p-v):y/(p+v);if(d==="s")return T*100;switch(p){case i:return((s-u)/y+(ss>u?Math.min(s,Math.max(u,i)):Math.min(u,Math.max(s,i)),round:i=>Math.round(i*1e10)/1e10},unit:{dec2hex:i=>{const s=Math.round(i).toString(16);return s.length>1?s:`0${s}`}}},v9={};for(let i=0;i<=255;i++)v9[i]=Wa.unit.dec2hex(i);const Og={ALL:0,RGB:1,HSL:2};class kPt{constructor(){this.type=Og.ALL}get(){return this.type}set(s){if(this.type&&this.type!==s)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=s}reset(){this.type=Og.ALL}is(s){return this.type===s}}const EPt=kPt;class TPt{constructor(s,u){this.color=u,this.changed=!1,this.data=s,this.type=new EPt}set(s,u){return this.color=u,this.changed=!1,this.data=s,this.type.type=Og.ALL,this}_ensureHSL(){const s=this.data,{h:u,s:d,l:p}=s;u===void 0&&(s.h=Wa.channel.rgb2hsl(s,"h")),d===void 0&&(s.s=Wa.channel.rgb2hsl(s,"s")),p===void 0&&(s.l=Wa.channel.rgb2hsl(s,"l"))}_ensureRGB(){const s=this.data,{r:u,g:d,b:p}=s;u===void 0&&(s.r=Wa.channel.hsl2rgb(s,"r")),d===void 0&&(s.g=Wa.channel.hsl2rgb(s,"g")),p===void 0&&(s.b=Wa.channel.hsl2rgb(s,"b"))}get r(){const s=this.data,u=s.r;return!this.type.is(Og.HSL)&&u!==void 0?u:(this._ensureHSL(),Wa.channel.hsl2rgb(s,"r"))}get g(){const s=this.data,u=s.g;return!this.type.is(Og.HSL)&&u!==void 0?u:(this._ensureHSL(),Wa.channel.hsl2rgb(s,"g"))}get b(){const s=this.data,u=s.b;return!this.type.is(Og.HSL)&&u!==void 0?u:(this._ensureHSL(),Wa.channel.hsl2rgb(s,"b"))}get h(){const s=this.data,u=s.h;return!this.type.is(Og.RGB)&&u!==void 0?u:(this._ensureRGB(),Wa.channel.rgb2hsl(s,"h"))}get s(){const s=this.data,u=s.s;return!this.type.is(Og.RGB)&&u!==void 0?u:(this._ensureRGB(),Wa.channel.rgb2hsl(s,"s"))}get l(){const s=this.data,u=s.l;return!this.type.is(Og.RGB)&&u!==void 0?u:(this._ensureRGB(),Wa.channel.rgb2hsl(s,"l"))}get a(){return this.data.a}set r(s){this.type.set(Og.RGB),this.changed=!0,this.data.r=s}set g(s){this.type.set(Og.RGB),this.changed=!0,this.data.g=s}set b(s){this.type.set(Og.RGB),this.changed=!0,this.data.b=s}set h(s){this.type.set(Og.HSL),this.changed=!0,this.data.h=s}set s(s){this.type.set(Og.HSL),this.changed=!0,this.data.s=s}set l(s){this.type.set(Og.HSL),this.changed=!0,this.data.l=s}set a(s){this.changed=!0,this.data.a=s}}const CPt=TPt,wX=new CPt({r:0,g:0,b:0,a:0},"transparent"),TRe={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:i=>{if(i.charCodeAt(0)!==35)return;const s=i.match(TRe.re);if(!s)return;const u=s[1],d=parseInt(u,16),p=u.length,v=p%4===0,b=p>4,y=b?1:17,T=b?8:4,_=v?0:-1,A=b?255:15;return wX.set({r:(d>>T*(_+3)&A)*y,g:(d>>T*(_+2)&A)*y,b:(d>>T*(_+1)&A)*y,a:v?(d&A)*y/255:1},i)},stringify:i=>{const{r:s,g:u,b:d,a:p}=i;return p<1?`#${v9[Math.round(s)]}${v9[Math.round(u)]}${v9[Math.round(d)]}${v9[Math.round(p*255)]}`:`#${v9[Math.round(s)]}${v9[Math.round(u)]}${v9[Math.round(d)]}`}},VF=TRe,yX={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:i=>{const s=i.match(yX.hueRe);if(s){const[,u,d]=s;switch(d){case"grad":return Wa.channel.clamp.h(parseFloat(u)*.9);case"rad":return Wa.channel.clamp.h(parseFloat(u)*180/Math.PI);case"turn":return Wa.channel.clamp.h(parseFloat(u)*360)}}return Wa.channel.clamp.h(parseFloat(i))},parse:i=>{const s=i.charCodeAt(0);if(s!==104&&s!==72)return;const u=i.match(yX.re);if(!u)return;const[,d,p,v,b,y]=u;return wX.set({h:yX._hue2deg(d),s:Wa.channel.clamp.s(parseFloat(p)),l:Wa.channel.clamp.l(parseFloat(v)),a:b?Wa.channel.clamp.a(y?parseFloat(b)/100:parseFloat(b)):1},i)},stringify:i=>{const{h:s,s:u,l:d,a:p}=i;return p<1?`hsla(${Wa.lang.round(s)}, ${Wa.lang.round(u)}%, ${Wa.lang.round(d)}%, ${p})`:`hsl(${Wa.lang.round(s)}, ${Wa.lang.round(u)}%, ${Wa.lang.round(d)}%)`}},xX=yX,kX={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:i=>{i=i.toLowerCase();const s=kX.colors[i];if(s)return VF.parse(s)},stringify:i=>{const s=VF.stringify(i);for(const u in kX.colors)if(kX.colors[u]===s)return u}},CRe=kX,SRe={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:i=>{const s=i.charCodeAt(0);if(s!==114&&s!==82)return;const u=i.match(SRe.re);if(!u)return;const[,d,p,v,b,y,T,_,A]=u;return wX.set({r:Wa.channel.clamp.r(p?parseFloat(d)*2.55:parseFloat(d)),g:Wa.channel.clamp.g(b?parseFloat(v)*2.55:parseFloat(v)),b:Wa.channel.clamp.b(T?parseFloat(y)*2.55:parseFloat(y)),a:_?Wa.channel.clamp.a(A?parseFloat(_)/100:parseFloat(_)):1},i)},stringify:i=>{const{r:s,g:u,b:d,a:p}=i;return p<1?`rgba(${Wa.lang.round(s)}, ${Wa.lang.round(u)}, ${Wa.lang.round(d)}, ${Wa.lang.round(p)})`:`rgb(${Wa.lang.round(s)}, ${Wa.lang.round(u)}, ${Wa.lang.round(d)})`}},EX=SRe,O3={format:{keyword:CRe,hex:VF,rgb:EX,rgba:EX,hsl:xX,hsla:xX},parse:i=>{if(typeof i!="string")return i;const s=VF.parse(i)||EX.parse(i)||xX.parse(i)||CRe.parse(i);if(s)return s;throw new Error(`Unsupported color format: "${i}"`)},stringify:i=>!i.changed&&i.color?i.color:i.type.is(Og.HSL)||i.data.r===void 0?xX.stringify(i):i.a<1||!Number.isInteger(i.r)||!Number.isInteger(i.g)||!Number.isInteger(i.b)?EX.stringify(i):VF.stringify(i)},_Re=(i,s)=>{const u=O3.parse(i);for(const d in s)u[d]=Wa.channel.clamp[d](s[d]);return O3.stringify(u)},SC=(i,s,u=0,d=1)=>{if(typeof i!="number")return _Re(i,{a:s});const p=wX.set({r:Wa.channel.clamp.r(i),g:Wa.channel.clamp.g(s),b:Wa.channel.clamp.b(u),a:Wa.channel.clamp.a(d)});return O3.stringify(p)},ARe=(i,s)=>Wa.lang.round(O3.parse(i)[s]),SPt=i=>{const{r:s,g:u,b:d}=O3.parse(i),p=.2126*Wa.channel.toLinear(s)+.7152*Wa.channel.toLinear(u)+.0722*Wa.channel.toLinear(d);return Wa.lang.round(p)},_Pt=i=>SPt(i)>=.5,_C=i=>!_Pt(i),LRe=(i,s,u)=>{const d=O3.parse(i),p=d[s],v=Wa.channel.clamp[s](p+u);return p!==v&&(d[s]=v),O3.stringify(d)},Gs=(i,s)=>LRe(i,"l",s),fa=(i,s)=>LRe(i,"l",-s),In=(i,s)=>{const u=O3.parse(i),d={};for(const p in s)s[p]&&(d[p]=u[p]+s[p]);return _Re(i,d)},APt=(i,s,u=50)=>{const{r:d,g:p,b:v,a:b}=O3.parse(i),{r:y,g:T,b:_,a:A}=O3.parse(s),P=u/100,R=P*2-1,F=b-A,K=((R*F===-1?R:(R+F)/(1+R*F))+1)/2,ee=1-K,ie=d*K+y*ee,oe=p*K+T*ee,pe=v*K+_*ee,be=b*P+A*(1-P);return SC(ie,oe,pe,be)},Vi=(i,s=100)=>{const u=O3.parse(i);return u.r=255-u.r,u.g=255-u.g,u.b=255-u.b,APt(u,i,s)},Tp=(i,s)=>s?In(i,{s:-40,l:10}):In(i,{s:-40,l:-10}),TX="#ffffff",CX="#f2f2f2";let LPt=class{constructor(){this.background="#f4f4f4",this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px"}updateColors(){var u,d,p,v,b,y,T,_,A,P,R;if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||In(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||In(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Tp(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Tp(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Tp(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Tp(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||Vi(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||Vi(this.tertiaryColor),this.lineColor=this.lineColor||Vi(this.background),this.arrowheadColor=this.arrowheadColor||Vi(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?fa(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||"grey",this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||fa(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||Vi(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||Gs(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||In(this.primaryColor,{h:30}),this.cScale4=this.cScale4||In(this.primaryColor,{h:60}),this.cScale5=this.cScale5||In(this.primaryColor,{h:90}),this.cScale6=this.cScale6||In(this.primaryColor,{h:120}),this.cScale7=this.cScale7||In(this.primaryColor,{h:150}),this.cScale8=this.cScale8||In(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||In(this.primaryColor,{h:270}),this.cScale10=this.cScale10||In(this.primaryColor,{h:300}),this.cScale11=this.cScale11||In(this.primaryColor,{h:330}),this.darkMode)for(let F=0;F{this[d]=s[d]}),this.updateColors(),u.forEach(d=>{this[d]=s[d]})}};const MPt=i=>{const s=new LPt;return s.calculate(i),s};let DPt=class{constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=Gs(this.primaryColor,16),this.tertiaryColor=In(this.primaryColor,{h:-160}),this.primaryBorderColor=Vi(this.background),this.secondaryBorderColor=Tp(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Tp(this.tertiaryColor,this.darkMode),this.primaryTextColor=Vi(this.primaryColor),this.secondaryTextColor=Vi(this.secondaryColor),this.tertiaryTextColor=Vi(this.tertiaryColor),this.lineColor=Vi(this.background),this.textColor=Vi(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=Gs(Vi("#323D47"),10),this.lineColor="calculated",this.border1="#81B1DB",this.border2=SC(255,255,255,.25),this.arrowheadColor="calculated",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#F9FFFE",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="calculated",this.activationBkgColor="calculated",this.sequenceNumberColor="black",this.sectionBkgColor=fa("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=fa(this.sectionBkgColor,10),this.taskBorderColor=SC(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=SC(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){var s,u,d,p,v,b,y,T,_,A,P;this.secondBkg=Gs(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=Gs(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.mainContrastColor,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=Gs(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=this.darkTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=In(this.primaryColor,{h:64}),this.fillType3=In(this.secondaryColor,{h:64}),this.fillType4=In(this.primaryColor,{h:-64}),this.fillType5=In(this.secondaryColor,{h:-64}),this.fillType6=In(this.primaryColor,{h:128}),this.fillType7=In(this.secondaryColor,{h:128}),this.cScale1=this.cScale1||"#0b0000",this.cScale2=this.cScale2||"#4d1037",this.cScale3=this.cScale3||"#3f5258",this.cScale4=this.cScale4||"#4f2f1b",this.cScale5=this.cScale5||"#6e0a0a",this.cScale6=this.cScale6||"#3b0048",this.cScale7=this.cScale7||"#995a01",this.cScale8=this.cScale8||"#154706",this.cScale9=this.cScale9||"#161722",this.cScale10=this.cScale10||"#00296f",this.cScale11=this.cScale11||"#01629c",this.cScale12=this.cScale12||"#010029",this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||In(this.primaryColor,{h:30}),this.cScale4=this.cScale4||In(this.primaryColor,{h:60}),this.cScale5=this.cScale5||In(this.primaryColor,{h:90}),this.cScale6=this.cScale6||In(this.primaryColor,{h:120}),this.cScale7=this.cScale7||In(this.primaryColor,{h:150}),this.cScale8=this.cScale8||In(this.primaryColor,{h:210}),this.cScale9=this.cScale9||In(this.primaryColor,{h:270}),this.cScale10=this.cScale10||In(this.primaryColor,{h:300}),this.cScale11=this.cScale11||In(this.primaryColor,{h:330});for(let R=0;R{this[d]=s[d]}),this.updateColors(),u.forEach(d=>{this[d]=s[d]})}};const IPt=i=>{const s=new DPt;return s.calculate(i),s};let OPt=class{constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=In(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=In(this.primaryColor,{h:-160}),this.primaryBorderColor=Tp(this.primaryColor,this.darkMode),this.secondaryBorderColor=Tp(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Tp(this.tertiaryColor,this.darkMode),this.primaryTextColor=Vi(this.primaryColor),this.secondaryTextColor=Vi(this.secondaryColor),this.tertiaryTextColor=Vi(this.tertiaryColor),this.lineColor=Vi(this.background),this.textColor=Vi(this.background),this.background="white",this.mainBkg="#ECECFF",this.secondBkg="#ffffde",this.lineColor="#333333",this.border1="#9370DB",this.border2="#aaaa33",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#e8e8e8",this.textColor="#333",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="calculated",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="calculated",this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor="calculated",this.taskTextOutsideColor=this.taskTextDarkColor,this.taskTextClickableColor="calculated",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBorderColor="calculated",this.critBkgColor="calculated",this.todayLineColor="calculated",this.sectionBkgColor=SC(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}updateColors(){var s,u,d,p,v,b,y,T,_,A,P;this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||In(this.primaryColor,{h:30}),this.cScale4=this.cScale4||In(this.primaryColor,{h:60}),this.cScale5=this.cScale5||In(this.primaryColor,{h:90}),this.cScale6=this.cScale6||In(this.primaryColor,{h:120}),this.cScale7=this.cScale7||In(this.primaryColor,{h:150}),this.cScale8=this.cScale8||In(this.primaryColor,{h:210}),this.cScale9=this.cScale9||In(this.primaryColor,{h:270}),this.cScale10=this.cScale10||In(this.primaryColor,{h:300}),this.cScale11=this.cScale11||In(this.primaryColor,{h:330}),this["cScalePeer1"]=this["cScalePeer1"]||fa(this.secondaryColor,45),this["cScalePeer2"]=this["cScalePeer2"]||fa(this.tertiaryColor,40);for(let R=0;R{this[d]=s[d]}),this.updateColors(),u.forEach(d=>{this[d]=s[d]})}};const f2e=i=>{const s=new OPt;return s.calculate(i),s};let NPt=class{constructor(){this.background="#f4f4f4",this.primaryColor="#cde498",this.secondaryColor="#cdffb2",this.background="white",this.mainBkg="#cde498",this.secondBkg="#cdffb2",this.lineColor="green",this.border1="#13540c",this.border2="#6eaa49",this.arrowheadColor="green",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.tertiaryColor=Gs("#cde498",10),this.primaryBorderColor=Tp(this.primaryColor,this.darkMode),this.secondaryBorderColor=Tp(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Tp(this.tertiaryColor,this.darkMode),this.primaryTextColor=Vi(this.primaryColor),this.secondaryTextColor=Vi(this.secondaryColor),this.tertiaryTextColor=Vi(this.primaryColor),this.lineColor=Vi(this.background),this.textColor=Vi(this.background),this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){var s,u,d,p,v,b,y,T,_,A,P;this.actorBorder=fa(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||In(this.primaryColor,{h:30}),this.cScale4=this.cScale4||In(this.primaryColor,{h:60}),this.cScale5=this.cScale5||In(this.primaryColor,{h:90}),this.cScale6=this.cScale6||In(this.primaryColor,{h:120}),this.cScale7=this.cScale7||In(this.primaryColor,{h:150}),this.cScale8=this.cScale8||In(this.primaryColor,{h:210}),this.cScale9=this.cScale9||In(this.primaryColor,{h:270}),this.cScale10=this.cScale10||In(this.primaryColor,{h:300}),this.cScale11=this.cScale11||In(this.primaryColor,{h:330}),this["cScalePeer1"]=this["cScalePeer1"]||fa(this.secondaryColor,45),this["cScalePeer2"]=this["cScalePeer2"]||fa(this.tertiaryColor,40);for(let R=0;R{this[d]=s[d]}),this.updateColors(),u.forEach(d=>{this[d]=s[d]})}};const PPt=i=>{const s=new NPt;return s.calculate(i),s};class BPt{constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=Gs(this.contrast,55),this.background="#ffffff",this.tertiaryColor=In(this.primaryColor,{h:-160}),this.primaryBorderColor=Tp(this.primaryColor,this.darkMode),this.secondaryBorderColor=Tp(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Tp(this.tertiaryColor,this.darkMode),this.primaryTextColor=Vi(this.primaryColor),this.secondaryTextColor=Vi(this.secondaryColor),this.tertiaryTextColor=Vi(this.tertiaryColor),this.lineColor=Vi(this.background),this.textColor=Vi(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){var s,u,d,p,v,b,y,T,_,A,P;this.secondBkg=Gs(this.contrast,55),this.border2=this.contrast,this.actorBorder=Gs(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.lineColor,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.cScale0=this.cScale0||"#555",this.cScale1=this.cScale1||"#F4F4F4",this.cScale2=this.cScale2||"#555",this.cScale3=this.cScale3||"#BBB",this.cScale4=this.cScale4||"#777",this.cScale5=this.cScale5||"#999",this.cScale6=this.cScale6||"#DDD",this.cScale7=this.cScale7||"#FFF",this.cScale8=this.cScale8||"#DDD",this.cScale9=this.cScale9||"#BBB",this.cScale10=this.cScale10||"#999",this.cScale11=this.cScale11||"#777";for(let R=0;R{this[d]=s[d]}),this.updateColors(),u.forEach(d=>{this[d]=s[d]})}}const E7={base:{getThemeVariables:MPt},dark:{getThemeVariables:IPt},default:{getThemeVariables:f2e},forest:{getThemeVariables:PPt},neutral:{getThemeVariables:i=>{const s=new BPt;return s.calculate(i),s}}},T7={flowchart:{useMaxWidth:!0,titleTopMargin:25,subGraphTitleMargin:{top:0,bottom:0},diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,defaultRenderer:"dagre-wrapper",wrappingWidth:200},sequence:{useMaxWidth:!0,hideUnusedParticipants:!1,activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,forceMenus:!1,bottomMarginAdj:1,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open Sans", sans-serif',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20},gantt:{useMaxWidth:!0,titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",topAxis:!1,displayMode:"",weekday:"sunday"},journey:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"]},class:{useMaxWidth:!0,titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,defaultRenderer:"dagre-wrapper",htmlLabels:!1},state:{useMaxWidth:!0,titleTopMargin:25,dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,defaultRenderer:"dagre-wrapper"},er:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,stroke:"gray",fill:"honeydew",fontSize:12},pie:{useMaxWidth:!0,textPosition:.75},quadrantChart:{useMaxWidth:!0,chartWidth:500,chartHeight:500,titleFontSize:20,titlePadding:10,quadrantPadding:5,xAxisLabelPadding:5,yAxisLabelPadding:5,xAxisLabelFontSize:16,yAxisLabelFontSize:16,quadrantLabelFontSize:16,quadrantTextTopPadding:5,pointTextPadding:5,pointLabelFontSize:12,pointRadius:5,xAxisPosition:"top",yAxisPosition:"left",quadrantInternalBorderStrokeWidth:1,quadrantExternalBorderStrokeWidth:2},xyChart:{useMaxWidth:!0,width:700,height:500,titleFontSize:20,titlePadding:10,showTitle:!0,xAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},yAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},chartOrientation:"vertical",plotReservedSpacePercent:50},requirement:{useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200},timeline:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],disableMulticolor:!1},gitGraph:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0,parallelCommits:!1,arrowMarkerAbsolute:!1},c4:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,c4ShapeInRow:4,nextLinePaddingX:0,c4BoundaryInRow:2,personFontSize:14,personFontFamily:'"Open Sans", sans-serif',personFontWeight:"normal",external_personFontSize:14,external_personFontFamily:'"Open Sans", sans-serif',external_personFontWeight:"normal",systemFontSize:14,systemFontFamily:'"Open Sans", sans-serif',systemFontWeight:"normal",external_systemFontSize:14,external_systemFontFamily:'"Open Sans", sans-serif',external_systemFontWeight:"normal",system_dbFontSize:14,system_dbFontFamily:'"Open Sans", sans-serif',system_dbFontWeight:"normal",external_system_dbFontSize:14,external_system_dbFontFamily:'"Open Sans", sans-serif',external_system_dbFontWeight:"normal",system_queueFontSize:14,system_queueFontFamily:'"Open Sans", sans-serif',system_queueFontWeight:"normal",external_system_queueFontSize:14,external_system_queueFontFamily:'"Open Sans", sans-serif',external_system_queueFontWeight:"normal",boundaryFontSize:14,boundaryFontFamily:'"Open Sans", sans-serif',boundaryFontWeight:"normal",messageFontSize:12,messageFontFamily:'"Open Sans", sans-serif',messageFontWeight:"normal",containerFontSize:14,containerFontFamily:'"Open Sans", sans-serif',containerFontWeight:"normal",external_containerFontSize:14,external_containerFontFamily:'"Open Sans", sans-serif',external_containerFontWeight:"normal",container_dbFontSize:14,container_dbFontFamily:'"Open Sans", sans-serif',container_dbFontWeight:"normal",external_container_dbFontSize:14,external_container_dbFontFamily:'"Open Sans", sans-serif',external_container_dbFontWeight:"normal",container_queueFontSize:14,container_queueFontFamily:'"Open Sans", sans-serif',container_queueFontWeight:"normal",external_container_queueFontSize:14,external_container_queueFontFamily:'"Open Sans", sans-serif',external_container_queueFontWeight:"normal",componentFontSize:14,componentFontFamily:'"Open Sans", sans-serif',componentFontWeight:"normal",external_componentFontSize:14,external_componentFontFamily:'"Open Sans", sans-serif',external_componentFontWeight:"normal",component_dbFontSize:14,component_dbFontFamily:'"Open Sans", sans-serif',component_dbFontWeight:"normal",external_component_dbFontSize:14,external_component_dbFontFamily:'"Open Sans", sans-serif',external_component_dbFontWeight:"normal",component_queueFontSize:14,component_queueFontFamily:'"Open Sans", sans-serif',component_queueFontWeight:"normal",external_component_queueFontSize:14,external_component_queueFontFamily:'"Open Sans", sans-serif',external_component_queueFontWeight:"normal",wrap:!0,wrapPadding:10,person_bg_color:"#08427B",person_border_color:"#073B6F",external_person_bg_color:"#686868",external_person_border_color:"#8A8A8A",system_bg_color:"#1168BD",system_border_color:"#3C7FC0",system_db_bg_color:"#1168BD",system_db_border_color:"#3C7FC0",system_queue_bg_color:"#1168BD",system_queue_border_color:"#3C7FC0",external_system_bg_color:"#999999",external_system_border_color:"#8A8A8A",external_system_db_bg_color:"#999999",external_system_db_border_color:"#8A8A8A",external_system_queue_bg_color:"#999999",external_system_queue_border_color:"#8A8A8A",container_bg_color:"#438DD5",container_border_color:"#3C7FC0",container_db_bg_color:"#438DD5",container_db_border_color:"#3C7FC0",container_queue_bg_color:"#438DD5",container_queue_border_color:"#3C7FC0",external_container_bg_color:"#B3B3B3",external_container_border_color:"#A6A6A6",external_container_db_bg_color:"#B3B3B3",external_container_db_border_color:"#A6A6A6",external_container_queue_bg_color:"#B3B3B3",external_container_queue_border_color:"#A6A6A6",component_bg_color:"#85BBF0",component_border_color:"#78A8D8",component_db_bg_color:"#85BBF0",component_db_border_color:"#78A8D8",component_queue_bg_color:"#85BBF0",component_queue_border_color:"#78A8D8",external_component_bg_color:"#CCCCCC",external_component_border_color:"#BFBFBF",external_component_db_bg_color:"#CCCCCC",external_component_db_border_color:"#BFBFBF",external_component_queue_bg_color:"#CCCCCC",external_component_queue_border_color:"#BFBFBF"},sankey:{useMaxWidth:!0,width:600,height:400,linkColor:"gradient",nodeAlignment:"justify",showValues:!0,prefix:"",suffix:""},block:{useMaxWidth:!0,padding:8},theme:"default",maxTextSize:5e4,maxEdges:500,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize","maxEdges"],legacyMathML:!1,deterministicIds:!1,fontSize:16},MRe={...T7,deterministicIDSeed:void 0,themeCSS:void 0,themeVariables:E7.default.getThemeVariables(),sequence:{...T7.sequence,messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},noteFont:function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},actorFont:function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}}},gantt:{...T7.gantt,tickInterval:void 0,useWidth:void 0},c4:{...T7.c4,useWidth:void 0,personFont:function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},external_personFont:function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},systemFont:function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},external_systemFont:function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},system_dbFont:function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},external_system_dbFont:function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},system_queueFont:function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},external_system_queueFont:function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},containerFont:function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},external_containerFont:function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},container_dbFont:function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},external_container_dbFont:function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},container_queueFont:function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},external_container_queueFont:function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},componentFont:function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},external_componentFont:function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},component_dbFont:function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},external_component_dbFont:function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},component_queueFont:function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},external_component_queueFont:function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},boundaryFont:function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}}},pie:{...T7.pie,useWidth:984},xyChart:{...T7.xyChart,useWidth:void 0},requirement:{...T7.requirement,useWidth:void 0},gitGraph:{...T7.gitGraph,useMaxWidth:!1},sankey:{...T7.sankey,useMaxWidth:!1}},DRe=(i,s="")=>Object.keys(i).reduce((u,d)=>Array.isArray(i[d])?u:typeof i[d]=="object"&&i[d]!==null?[...u,s+d,...DRe(i[d],"")]:[...u,s+d],[]),FPt=new Set(DRe(MRe,"")),sh=MRe,SX=i=>{if(Xe.debug("sanitizeDirective called with",i),!(typeof i!="object"||i==null)){if(Array.isArray(i)){i.forEach(s=>SX(s));return}for(const s of Object.keys(i)){if(Xe.debug("Checking key",s),s.startsWith("__")||s.includes("proto")||s.includes("constr")||!FPt.has(s)||i[s]==null){Xe.debug("sanitize deleting key: ",s),delete i[s];continue}if(typeof i[s]=="object"){Xe.debug("sanitizing object",s),SX(i[s]);continue}const u=["themeCSS","fontFamily","altFontFamily"];for(const d of u)s.includes(d)&&(Xe.debug("sanitizing css option",s),i[s]=RPt(i[s]))}if(i.themeVariables)for(const s of Object.keys(i.themeVariables)){const u=i.themeVariables[s];u!=null&&u.match&&!u.match(/^[\d "#%(),.;A-Za-z]+$/)&&(i.themeVariables[s]="")}Xe.debug("After sanitization",i)}},RPt=i=>{let s=0,u=0;for(const d of i){if(s{for(const{id:s,detector:u,loader:d}of i)PRe(s,u,d)},PRe=(i,s,u)=>{dD[i]?Xe.error(`Detector with key ${i} already exists`):dD[i]={detector:s,loader:u},Xe.debug(`Detector with key ${i} added${u?" with loader":""}`)},$Pt=i=>dD[i].loader,d2e=(i,s,{depth:u=2,clobber:d=!1}={})=>{const p={depth:u,clobber:d};return Array.isArray(s)&&!Array.isArray(i)?(s.forEach(v=>d2e(i,v,p)),i):Array.isArray(s)&&Array.isArray(i)?(s.forEach(v=>{i.includes(v)||i.push(v)}),i):i===void 0||u<=0?i!=null&&typeof i=="object"&&typeof s=="object"?Object.assign(i,s):s:(s!==void 0&&typeof i=="object"&&typeof s=="object"&&Object.keys(s).forEach(v=>{typeof s[v]=="object"&&(i[v]===void 0||typeof i[v]=="object")?(i[v]===void 0&&(i[v]=Array.isArray(s[v])?[]:{}),i[v]=d2e(i[v],s[v],{depth:u-1,clobber:d})):(d||typeof i[v]!="object"&&typeof s[v]!="object")&&(i[v]=s[v])}),i)},id=d2e;var zPt=typeof global=="object"&&global&&global.Object===Object&&global;const BRe=zPt;var qPt=typeof self=="object"&&self&&self.Object===Object&&self,HPt=BRe||qPt||Function("return this")();const N3=HPt;var VPt=N3.Symbol;const Iv=VPt;var FRe=Object.prototype,UPt=FRe.hasOwnProperty,GPt=FRe.toString,GF=Iv?Iv.toStringTag:void 0;function KPt(i){var s=UPt.call(i,GF),u=i[GF];try{i[GF]=void 0;var d=!0}catch{}var p=GPt.call(i);return d&&(s?i[GF]=u:delete i[GF]),p}var WPt=Object.prototype,YPt=WPt.toString;function XPt(i){return YPt.call(i)}var QPt="[object Null]",JPt="[object Undefined]",RRe=Iv?Iv.toStringTag:void 0;function AC(i){return i==null?i===void 0?JPt:QPt:RRe&&RRe in Object(i)?KPt(i):XPt(i)}function am(i){var s=typeof i;return i!=null&&(s=="object"||s=="function")}var ZPt="[object AsyncFunction]",eBt="[object Function]",tBt="[object GeneratorFunction]",nBt="[object Proxy]";function gD(i){if(!am(i))return!1;var s=AC(i);return s==eBt||s==tBt||s==ZPt||s==nBt}var rBt=N3["__core-js_shared__"];const g2e=rBt;var jRe=function(){var i=/[^.]+$/.exec(g2e&&g2e.keys&&g2e.keys.IE_PROTO||"");return i?"Symbol(src)_1."+i:""}();function iBt(i){return!!jRe&&jRe in i}var sBt=Function.prototype,aBt=sBt.toString;function LC(i){if(i!=null){try{return aBt.call(i)}catch{}try{return i+""}catch{}}return""}var oBt=/[\\^$.*+?()[\]{}|]/g,cBt=/^\[object .+?Constructor\]$/,uBt=Function.prototype,lBt=Object.prototype,hBt=uBt.toString,fBt=lBt.hasOwnProperty,dBt=RegExp("^"+hBt.call(fBt).replace(oBt,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function gBt(i){if(!am(i)||iBt(i))return!1;var s=gD(i)?dBt:cBt;return s.test(LC(i))}function pBt(i,s){return i==null?void 0:i[s]}function MC(i,s){var u=pBt(i,s);return gBt(u)?u:void 0}var bBt=MC(Object,"create");const KF=bBt;function mBt(){this.__data__=KF?KF(null):{},this.size=0}function vBt(i){var s=this.has(i)&&delete this.__data__[i];return this.size-=s?1:0,s}var wBt="__lodash_hash_undefined__",yBt=Object.prototype,xBt=yBt.hasOwnProperty;function kBt(i){var s=this.__data__;if(KF){var u=s[i];return u===wBt?void 0:u}return xBt.call(s,i)?s[i]:void 0}var EBt=Object.prototype,TBt=EBt.hasOwnProperty;function CBt(i){var s=this.__data__;return KF?s[i]!==void 0:TBt.call(s,i)}var SBt="__lodash_hash_undefined__";function _Bt(i,s){var u=this.__data__;return this.size+=this.has(i)?0:1,u[i]=KF&&s===void 0?SBt:s,this}function DC(i){var s=-1,u=i==null?0:i.length;for(this.clear();++s-1}function NBt(i,s){var u=this.__data__,d=AX(u,i);return d<0?(++this.size,u.push([i,s])):u[d][1]=s,this}function C7(i){var s=-1,u=i==null?0:i.length;for(this.clear();++s-1&&i%1==0&&i<=uFt}function w9(i){return i!=null&&w2e(i.length)&&!gD(i)}function JRe(i){return q4(i)&&w9(i)}function lFt(){return!1}var ZRe=typeof exports=="object"&&exports&&!exports.nodeType&&exports,eje=ZRe&&typeof module=="object"&&module&&!module.nodeType&&module,hFt=eje&&eje.exports===ZRe,tje=hFt?N3.Buffer:void 0,fFt=tje?tje.isBuffer:void 0,dFt=fFt||lFt;const vD=dFt;var gFt="[object Object]",pFt=Function.prototype,bFt=Object.prototype,nje=pFt.toString,mFt=bFt.hasOwnProperty,vFt=nje.call(Object);function rje(i){if(!q4(i)||AC(i)!=gFt)return!1;var s=v2e(i);if(s===null)return!0;var u=mFt.call(s,"constructor")&&s.constructor;return typeof u=="function"&&u instanceof u&&nje.call(u)==vFt}var wFt="[object Arguments]",yFt="[object Array]",xFt="[object Boolean]",kFt="[object Date]",EFt="[object Error]",TFt="[object Function]",CFt="[object Map]",SFt="[object Number]",_Ft="[object Object]",AFt="[object RegExp]",LFt="[object Set]",MFt="[object String]",DFt="[object WeakMap]",IFt="[object ArrayBuffer]",OFt="[object DataView]",NFt="[object Float32Array]",PFt="[object Float64Array]",BFt="[object Int8Array]",FFt="[object Int16Array]",RFt="[object Int32Array]",jFt="[object Uint8Array]",$Ft="[object Uint8ClampedArray]",zFt="[object Uint16Array]",qFt="[object Uint32Array]",ah={};ah[NFt]=ah[PFt]=ah[BFt]=ah[FFt]=ah[RFt]=ah[jFt]=ah[$Ft]=ah[zFt]=ah[qFt]=!0,ah[wFt]=ah[yFt]=ah[IFt]=ah[xFt]=ah[OFt]=ah[kFt]=ah[EFt]=ah[TFt]=ah[CFt]=ah[SFt]=ah[_Ft]=ah[AFt]=ah[LFt]=ah[MFt]=ah[DFt]=!1;function HFt(i){return q4(i)&&w2e(i.length)&&!!ah[AC(i)]}function NX(i){return function(s){return i(s)}}var ije=typeof exports=="object"&&exports&&!exports.nodeType&&exports,YF=ije&&typeof module=="object"&&module&&!module.nodeType&&module,VFt=YF&&YF.exports===ije,y2e=VFt&&BRe.process,UFt=function(){try{var i=YF&&YF.require&&YF.require("util").types;return i||y2e&&y2e.binding&&y2e.binding("util")}catch{}}();const wD=UFt;var sje=wD&&wD.isTypedArray,GFt=sje?NX(sje):HFt;const PX=GFt;function x2e(i,s){if(!(s==="constructor"&&typeof i[s]=="function")&&s!="__proto__")return i[s]}var KFt=Object.prototype,WFt=KFt.hasOwnProperty;function BX(i,s,u){var d=i[s];(!(WFt.call(i,s)&&pD(d,u))||u===void 0&&!(s in i))&&DX(i,s,u)}function XF(i,s,u,d){var p=!u;u||(u={});for(var v=-1,b=s.length;++v-1&&i%1==0&&i0){if(++s>=uRt)return arguments[0]}else s=0;return i.apply(void 0,arguments)}}var dRt=fRt(cRt);const lje=dRt;function RX(i,s){return lje(uje(i,s,OC),i+"")}function QF(i,s,u){if(!am(u))return!1;var d=typeof s;return(d=="number"?w9(u)&&FX(s,u.length):d=="string"&&s in u)?pD(u[s],i):!1}function gRt(i){return RX(function(s,u){var d=-1,p=u.length,v=p>1?u[p-1]:void 0,b=p>2?u[2]:void 0;for(v=i.length>3&&typeof v=="function"?(p--,v):void 0,b&&QF(u[0],u[1],b)&&(v=p<3?void 0:v,p=1),s=Object(s);++dy.args);SX(b),d=id(d,[...b])}else d=u.args;if(!d)return;let p=_X(i,s);const v="config";return d[v]!==void 0&&(p==="flowchart-v2"&&(p="flowchart"),d[p]=d[v],delete d[v]),d},fje=function(i,s=null){try{const u=new RegExp(`[%]{2}(?![{]${mRt.source})(?=[}][%]{2}).* -`,"ig");i=i.trim().replace(u,"").replace(/'/gm,'"'),Xe.debug(`Detecting diagram directive${s!==null?" type:"+s:""} based on the text:${i}`);let d;const p=[];for(;(d=UF.exec(i))!==null;)if(d.index===UF.lastIndex&&UF.lastIndex++,d&&!s||s&&d[1]&&d[1].match(s)||s&&d[2]&&d[2].match(s)){const v=d[1]?d[1]:d[2],b=d[3]?d[3].trim():d[4]?JSON.parse(d[4].trim()):null;p.push({type:v,args:b})}return p.length===0?{type:i,args:null}:p.length===1?p[0]:p}catch(u){return Xe.error(`ERROR: ${u.message} - Unable to parse directive type: '${s}' based on the text: '${i}'`),{type:void 0,args:null}}},wRt=function(i){return i.replace(UF,"")},yRt=function(i,s){for(const[u,d]of s.entries())if(d.match(i))return u;return-1};function Ov(i,s){if(!i)return s;const u=`curve${i.charAt(0).toUpperCase()+i.slice(1)}`;return bRt[u]??s}function xRt(i,s){const u=i.trim();if(u)return s.securityLevel!=="loose"?p9.sanitizeUrl(u):u}const kRt=(i,...s)=>{const u=i.split("."),d=u.length-1,p=u[d];let v=window;for(let b=0;b{u+=dje(p,s),s=p});const d=u/2;return k2e(i,d)}function TRt(i){return i.length===1?i[0]:ERt(i)}const gje=(i,s=2)=>{const u=Math.pow(10,s);return Math.round(i*u)/u},k2e=(i,s)=>{let u,d=s;for(const p of i){if(u){const v=dje(p,u);if(v=1)return{x:p.x,y:p.y};if(b>0&&b<1)return{x:gje((1-b)*u.x+b*p.x,5),y:gje((1-b)*u.y+b*p.y,5)}}}u=p}throw new Error("Could not find a suitable point for the given distance")},CRt=(i,s,u)=>{Xe.info(`our points ${JSON.stringify(s)}`),s[0]!==u&&(s=s.reverse());const p=k2e(s,25),v=i?10:5,b=Math.atan2(s[0].y-p.y,s[0].x-p.x),y={x:0,y:0};return y.x=Math.sin(b)*v+(s[0].x+p.x)/2,y.y=-Math.cos(b)*v+(s[0].y+p.y)/2,y};function SRt(i,s,u){const d=structuredClone(u);Xe.info("our points",d),s!=="start_left"&&s!=="start_right"&&d.reverse();const p=25+i,v=k2e(d,p),b=10+i*.5,y=Math.atan2(d[0].y-v.y,d[0].x-v.x),T={x:0,y:0};return s==="start_left"?(T.x=Math.sin(y+Math.PI)*b+(d[0].x+v.x)/2,T.y=-Math.cos(y+Math.PI)*b+(d[0].y+v.y)/2):s==="end_right"?(T.x=Math.sin(y-Math.PI)*b+(d[0].x+v.x)/2-5,T.y=-Math.cos(y-Math.PI)*b+(d[0].y+v.y)/2-5):s==="end_left"?(T.x=Math.sin(y)*b+(d[0].x+v.x)/2-5,T.y=-Math.cos(y)*b+(d[0].y+v.y)/2-5):(T.x=Math.sin(y)*b+(d[0].x+v.x)/2,T.y=-Math.cos(y)*b+(d[0].y+v.y)/2),T}function om(i){let s="",u="";for(const d of i)d!==void 0&&(d.startsWith("color:")||d.startsWith("text-align:")?u=u+d+";":s=s+d+";");return{style:s,labelStyle:u}}let pje=0;const bje=()=>(pje++,"id-"+Math.random().toString(36).substr(2,12)+"-"+pje);function _Rt(i){let s="";const u="0123456789abcdef",d=u.length;for(let p=0;p_Rt(i.length),ARt=function(){return{x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0,text:""}},LRt=function(i,s){const u=s.text.replace(ci.lineBreakRegex," "),[,d]=NC(s.fontSize),p=i.append("text");p.attr("x",s.x),p.attr("y",s.y),p.style("text-anchor",s.anchor),p.style("font-family",s.fontFamily),p.style("font-size",d),p.style("font-weight",s.fontWeight),p.attr("fill",s.fill),s.class!==void 0&&p.attr("class",s.class);const v=p.append("tspan");return v.attr("x",s.x+s.textMargin*2),v.attr("fill",s.fill),v.text(u),p},vje=bD((i,s,u)=>{if(!i||(u=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"
"},u),ci.lineBreakRegex.test(i)))return i;const d=i.split(" "),p=[];let v="";return d.forEach((b,y)=>{const T=H4(`${b} `,u),_=H4(v,u);if(T>s){const{hyphenatedStrings:R,remainingWord:F}=MRt(b,s,"-",u);p.push(v,...R),v=F}else _+T>=s?(p.push(v),v=b):v=[v,b].filter(Boolean).join(" ");y+1===d.length&&p.push(v)}),p.filter(b=>b!=="").join(u.joinWith)},(i,s,u)=>`${i}${s}${u.fontSize}${u.fontWeight}${u.fontFamily}${u.joinWith}`),MRt=bD((i,s,u="-",d)=>{d=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},d);const p=[...i],v=[];let b="";return p.forEach((y,T)=>{const _=`${b}${y}`;if(H4(_,d)>=s){const P=T+1,R=p.length===P,F=`${_}${u}`;v.push(R?_:F),b=""}else b=_}),{hyphenatedStrings:v,remainingWord:b}},(i,s,u="-",d)=>`${i}${s}${u}${d.fontSize}${d.fontWeight}${d.fontFamily}`);function E2e(i,s){return T2e(i,s).height}function H4(i,s){return T2e(i,s).width}const T2e=bD((i,s)=>{const{fontSize:u=12,fontFamily:d="Arial",fontWeight:p=400}=s;if(!i)return{width:0,height:0};const[,v]=NC(u),b=["sans-serif",d],y=i.split(ci.lineBreakRegex),T=[],_=Ir("body");if(!_.remove)return{width:0,height:0,lineHeight:0};const A=_.append("svg");for(const R of b){let F=0;const j={width:0,height:0,lineHeight:0};for(const K of y){const ee=ARt();ee.text=K||hje;const ie=LRt(A,ee).style("font-size",v).style("font-weight",p).style("font-family",R),oe=(ie._groups||ie)[0][0].getBBox();if(oe.width===0&&oe.height===0)throw new Error("svg element not in render tree");j.width=Math.round(Math.max(j.width,oe.width)),F=Math.round(oe.height),j.height+=F,j.lineHeight=Math.round(Math.max(j.lineHeight,F))}T.push(j)}A.remove();const P=isNaN(T[1].height)||isNaN(T[1].width)||isNaN(T[1].lineHeight)||T[0].height>T[1].height&&T[0].width>T[1].width&&T[0].lineHeight>T[1].lineHeight?0:1;return T[P]},(i,s)=>`${i}${s.fontSize}${s.fontWeight}${s.fontFamily}`);class DRt{constructor(s=!1,u){this.count=0,this.count=u?u.length:0,this.next=s?()=>this.count++:()=>Date.now()}}let $X;const IRt=function(i){return $X=$X||document.createElement("div"),i=escape(i).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),$X.innerHTML=i,unescape($X.textContent)};function wje(i){return"str"in i}const ORt=(i,s,u,d)=>{var v;if(!d)return;const p=(v=i.node())==null?void 0:v.getBBox();p&&i.append("text").text(d).attr("x",p.x+p.width/2).attr("y",-u).attr("class",s)},NC=i=>{if(typeof i=="number")return[i,i+"px"];const s=parseInt(i??"",10);return Number.isNaN(s)?[void 0,void 0]:i===String(s)?[s,i+"px"]:[s,i]};function JF(i,s){return jX({},i,s)}const Ao={assignWithDepth:id,wrapLabel:vje,calculateTextHeight:E2e,calculateTextWidth:H4,calculateTextDimensions:T2e,cleanAndMerge:JF,detectInit:vRt,detectDirective:fje,isSubstringInArray:yRt,interpolateToCurve:Ov,calcLabelPosition:TRt,calcCardinalityPosition:CRt,calcTerminalLabelPosition:SRt,formatUrl:xRt,getStylesFromArray:om,generateId:bje,random:mje,runFunc:kRt,entityDecode:IRt,insertTitle:ORt,parseFontSize:NC,InitIDGenerator:DRt},NRt=function(i){let s=i;return s=s.replace(/style.*:\S*#.*;/g,function(u){return u.substring(0,u.length-1)}),s=s.replace(/classDef.*:\S*#.*;/g,function(u){return u.substring(0,u.length-1)}),s=s.replace(/#\w+;/g,function(u){const d=u.substring(1,u.length-1);return/^\+?\d+$/.test(d)?"fl°°"+d+"¶ß":"fl°"+d+"¶ß"}),s},ZF=function(i){return i.replace(/fl°°/g,"&#").replace(/fl°/g,"&").replace(/¶ß/g,";")};var yje="comm",xje="rule",kje="decl",PRt="@import",BRt="@keyframes",FRt="@layer",Eje=Math.abs,C2e=String.fromCharCode;function Tje(i){return i.trim()}function zX(i,s,u){return i.replace(s,u)}function RRt(i,s,u){return i.indexOf(s,u)}function eR(i,s){return i.charCodeAt(s)|0}function tR(i,s,u){return i.slice(s,u)}function _7(i){return i.length}function jRt(i){return i.length}function qX(i,s){return s.push(i),i}var HX=1,xD=1,Cje=0,Nv=0,I0=0,kD="";function S2e(i,s,u,d,p,v,b,y){return{value:i,root:s,parent:u,type:d,props:p,children:v,line:HX,column:xD,length:b,return:"",siblings:y}}function $Rt(){return I0}function zRt(){return I0=Nv>0?eR(kD,--Nv):0,xD--,I0===10&&(xD=1,HX--),I0}function B3(){return I0=Nv2||_2e(I0)>3?"":" "}function URt(i,s){for(;--s&&B3()&&!(I0<48||I0>102||I0>57&&I0<65||I0>70&&I0<97););return UX(i,VX()+(s<6&&PC()==32&&B3()==32))}function L2e(i){for(;B3();)switch(I0){case i:return Nv;case 34:case 39:i!==34&&i!==39&&L2e(I0);break;case 40:i===41&&L2e(i);break;case 92:B3();break}return Nv}function GRt(i,s){for(;B3()&&i+I0!==47+10;)if(i+I0===42+42&&PC()===47)break;return"/*"+UX(s,Nv-1)+"*"+C2e(i===47?i:B3())}function KRt(i){for(;!_2e(PC());)B3();return UX(i,Nv)}function WRt(i){return HRt(GX("",null,null,null,[""],i=qRt(i),0,[0],i))}function GX(i,s,u,d,p,v,b,y,T){for(var _=0,A=0,P=b,R=0,F=0,j=0,K=1,ee=1,ie=1,oe=0,pe="",be=p,ae=v,ne=d,se=pe;ee;)switch(j=oe,oe=B3()){case 40:if(j!=108&&eR(se,P-1)==58){RRt(se+=zX(A2e(oe),"&","&\f"),"&\f",Eje(_?y[_-1]:0))!=-1&&(ie=-1);break}case 34:case 39:case 91:se+=A2e(oe);break;case 9:case 10:case 13:case 32:se+=VRt(j);break;case 92:se+=URt(VX()-1,7);continue;case 47:switch(PC()){case 42:case 47:qX(YRt(GRt(B3(),VX()),s,u,T),T);break;default:se+="/"}break;case 123*K:y[_++]=_7(se)*ie;case 125*K:case 59:case 0:switch(oe){case 0:case 125:ee=0;case 59+A:ie==-1&&(se=zX(se,/\f/g,"")),F>0&&_7(se)-P&&qX(F>32?_je(se+";",d,u,P-1,T):_je(zX(se," ","")+";",d,u,P-2,T),T);break;case 59:se+=";";default:if(qX(ne=Sje(se,s,u,_,A,p,y,pe,be=[],ae=[],P,v),v),oe===123)if(A===0)GX(se,s,ne,ne,be,v,P,y,ae);else switch(R===99&&eR(se,3)===110?100:R){case 100:case 108:case 109:case 115:GX(i,ne,ne,d&&qX(Sje(i,ne,ne,0,0,p,y,pe,p,be=[],P,ae),ae),p,ae,P,y,d?be:ae);break;default:GX(se,ne,ne,ne,[""],ae,0,y,ae)}}_=A=F=0,K=ie=1,pe=se="",P=b;break;case 58:P=1+_7(se),F=j;default:if(K<1){if(oe==123)--K;else if(oe==125&&K++==0&&zRt()==125)continue}switch(se+=C2e(oe),oe*K){case 38:ie=A>0?1:(se+="\f",-1);break;case 44:y[_++]=(_7(se)-1)*ie,ie=1;break;case 64:PC()===45&&(se+=A2e(B3())),R=PC(),A=P=_7(pe=se+=KRt(VX())),oe++;break;case 45:j===45&&_7(se)==2&&(K=0)}}return v}function Sje(i,s,u,d,p,v,b,y,T,_,A,P){for(var R=p-1,F=p===0?v:[""],j=jRt(F),K=0,ee=0,ie=0;K0?F[oe]+" "+pe:zX(pe,/&\f/g,F[oe])))&&(T[ie++]=be);return S2e(i,s,u,p===0?xje:y,T,_,A,P)}function YRt(i,s,u,d){return S2e(i,s,u,yje,C2e($Rt()),tR(i,2,-2),0,d)}function _je(i,s,u,d,p){return S2e(i,s,u,kje,tR(i,0,d),tR(i,d+1,-1),d,p)}function M2e(i,s){for(var u="",d=0;d{let u=id({},i),d={};for(const p of s)Ije(p),d=id(d,p);if(u=id(u,d),d.theme&&d.theme in E7){const p=id({},Lje),v=id(p.themeVariables||{},d.themeVariables);u.theme&&u.theme in E7&&(u.themeVariables=E7[u.theme].getThemeVariables(v))}return nR=u,Nje(nR),nR},QRt=i=>(B2=id({},ED),B2=id(B2,i),i.theme&&E7[i.theme]&&(B2.themeVariables=E7[i.theme].getThemeVariables(i.themeVariables)),KX(B2,TD),B2),JRt=i=>{Lje=id({},i)},ZRt=i=>(B2=id(B2,i),KX(B2,TD),B2),Mje=()=>id({},B2),Dje=i=>(Nje(i),id(nR,i),Vh()),Vh=()=>id({},nR),Ije=i=>{i&&(["secure",...B2.secure??[]].forEach(s=>{Object.hasOwn(i,s)&&(Xe.debug(`Denied attempt to modify a secure key ${s}`,i[s]),delete i[s])}),Object.keys(i).forEach(s=>{s.startsWith("__")&&delete i[s]}),Object.keys(i).forEach(s=>{typeof i[s]=="string"&&(i[s].includes("<")||i[s].includes(">")||i[s].includes("url(data:"))&&delete i[s],typeof i[s]=="object"&&Ije(i[s])}))},ejt=i=>{SX(i),i.fontFamily&&(!i.themeVariables||!i.themeVariables.fontFamily)&&(i.themeVariables={fontFamily:i.fontFamily}),TD.push(i),KX(B2,TD)},WX=(i=B2)=>{TD=[],KX(i,TD)},tjt={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead."},Oje={},njt=i=>{Oje[i]||(Xe.warn(tjt[i]),Oje[i]=!0)},Nje=i=>{i&&(i.lazyLoadedDiagrams||i.loadExternalDiagramsAtStartup)&&njt("LAZY_LOAD_DEPRECATED")},Pje="c4",rjt={id:Pje,detector:i=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>wUt);return{id:Pje,diagram:i}}},Bje="flowchart",ijt={id:Bje,detector:(i,s)=>{var u,d;return((u=s==null?void 0:s.flowchart)==null?void 0:u.defaultRenderer)==="dagre-wrapper"||((d=s==null?void 0:s.flowchart)==null?void 0:d.defaultRenderer)==="elk"?!1:/^\s*graph/.test(i)},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>_en);return{id:Bje,diagram:i}}},Fje="flowchart-v2",sjt={id:Fje,detector:(i,s)=>{var u,d,p;return((u=s==null?void 0:s.flowchart)==null?void 0:u.defaultRenderer)==="dagre-d3"||((d=s==null?void 0:s.flowchart)==null?void 0:d.defaultRenderer)==="elk"?!1:/^\s*graph/.test(i)&&((p=s==null?void 0:s.flowchart)==null?void 0:p.defaultRenderer)==="dagre-wrapper"?!0:/^\s*flowchart/.test(i)},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>Aen);return{id:Fje,diagram:i}}},Rje="er",ajt={id:Rje,detector:i=>/^\s*erDiagram/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>etn);return{id:Rje,diagram:i}}},jje="gitGraph",ojt={id:jje,detector:i=>/^\s*gitGraph/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>Stn);return{id:jje,diagram:i}}},$je="gantt",cjt={id:$je,detector:i=>/^\s*gantt/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>pnn);return{id:$je,diagram:i}}},zje="info",ujt={id:zje,detector:i=>/^\s*info/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>mnn);return{id:zje,diagram:i}}},qje="pie",ljt={id:qje,detector:i=>/^\s*pie/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>Enn);return{id:qje,diagram:i}}},Hje="quadrantChart",hjt={id:Hje,detector:i=>/^\s*quadrantChart/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>jnn);return{id:Hje,diagram:i}}},Vje="xychart",fjt={id:Vje,detector:i=>/^\s*xychart-beta/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>urn);return{id:Vje,diagram:i}}},Uje="requirement",djt={id:Uje,detector:i=>/^\s*requirement(Diagram)?/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>wrn);return{id:Uje,diagram:i}}},Gje="sequence",gjt={id:Gje,detector:i=>/^\s*sequenceDiagram/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>kin);return{id:Gje,diagram:i}}},Kje="class",pjt={id:Kje,detector:(i,s)=>{var u;return((u=s==null?void 0:s.class)==null?void 0:u.defaultRenderer)==="dagre-wrapper"?!1:/^\s*classDiagram/.test(i)},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>Gin);return{id:Kje,diagram:i}}},Wje="classDiagram",bjt={id:Wje,detector:(i,s)=>{var u;return/^\s*classDiagram/.test(i)&&((u=s==null?void 0:s.class)==null?void 0:u.defaultRenderer)==="dagre-wrapper"?!0:/^\s*classDiagram-v2/.test(i)},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>Jin);return{id:Wje,diagram:i}}},Yje="state",mjt={id:Yje,detector:(i,s)=>{var u;return((u=s==null?void 0:s.state)==null?void 0:u.defaultRenderer)==="dagre-wrapper"?!1:/^\s*stateDiagram/.test(i)},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>jsn);return{id:Yje,diagram:i}}},Xje="stateDiagram",vjt={id:Xje,detector:(i,s)=>{var u;return!!(/^\s*stateDiagram-v2/.test(i)||/^\s*stateDiagram/.test(i)&&((u=s==null?void 0:s.state)==null?void 0:u.defaultRenderer)==="dagre-wrapper")},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>ian);return{id:Xje,diagram:i}}},Qje="journey",wjt={id:Qje,detector:i=>/^\s*journey/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>Ean);return{id:Qje,diagram:i}}},yjt=function(i,s){for(let u of s)i.attr(u[0],u[1])},xjt=function(i,s,u){let d=new Map;return u?(d.set("width","100%"),d.set("style",`max-width: ${s}px;`)):(d.set("height",i),d.set("width",s)),d},Ng=function(i,s,u,d){const p=xjt(s,u,d);yjt(i,p)},y9=function(i,s,u,d){const p=s.node().getBBox(),v=p.width,b=p.height;Xe.info(`SVG bounds: ${v}x${b}`,p);let y=0,T=0;Xe.info(`Graph bounds: ${y}x${T}`,i),y=v+u*2,T=b+u*2,Xe.info(`Calculated bounds: ${y}x${T}`),Ng(s,T,y,d);const _=`${p.x-u} ${p.y-u} ${p.width+2*u} ${p.height+2*u}`;s.attr("viewBox",_)},YX={},kjt=(i,s,u)=>{let d="";return i in YX&&YX[i]?d=YX[i](u):Xe.warn(`No theme found for ${i}`),` & { - font-family: ${u.fontFamily}; - font-size: ${u.fontSize}; - fill: ${u.textColor} - } - - /* Classes common for multiple diagrams */ - - & .error-icon { - fill: ${u.errorBkgColor}; - } - & .error-text { - fill: ${u.errorTextColor}; - stroke: ${u.errorTextColor}; - } - - & .edge-thickness-normal { - stroke-width: 2px; - } - & .edge-thickness-thick { - stroke-width: 3.5px - } - & .edge-pattern-solid { - stroke-dasharray: 0; - } - - & .edge-pattern-dashed{ - stroke-dasharray: 3; - } - .edge-pattern-dotted { - stroke-dasharray: 2; - } - - & .marker { - fill: ${u.lineColor}; - stroke: ${u.lineColor}; - } - & .marker.cross { - stroke: ${u.lineColor}; - } - - & svg { - font-family: ${u.fontFamily}; - font-size: ${u.fontSize}; - } - - ${d} - - ${s} -`},Ejt=(i,s)=>{s!==void 0&&(YX[i]=s)},Tjt=kjt;let D2e="",I2e="",O2e="";const N2e=i=>Yf(i,Vh()),Pg=()=>{D2e="",O2e="",I2e=""},Bg=i=>{D2e=N2e(i).replace(/^\s+/g,"")},Cp=()=>D2e,Sp=i=>{O2e=N2e(i).replace(/\n\s+/g,` -`)},_p=()=>O2e,cm=i=>{I2e=N2e(i)},Ap=()=>I2e,Jje=Object.freeze(Object.defineProperty({__proto__:null,clear:Pg,getAccDescription:_p,getAccTitle:Cp,getDiagramTitle:Ap,setAccDescription:Sp,setAccTitle:Bg,setDiagramTitle:cm},Symbol.toStringTag,{value:"Module"})),Cjt=Xe,Sjt=fpe,qt=Vh,_jt=Dje,Zje=ED,Ajt=i=>Yf(i,qt()),e$e=y9,Ljt=()=>Jje,XX={},QX=(i,s,u)=>{var d;if(XX[i])throw new Error(`Diagram ${i} already registered.`);XX[i]=s,u&&PRe(i,u),Ejt(i,s.styles),(d=s.injectUtils)==null||d.call(s,Cjt,Sjt,qt,Ajt,e$e,Ljt(),()=>{})},P2e=i=>{if(i in XX)return XX[i];throw new Mjt(i)};class Mjt extends Error{constructor(s){super(`Diagram ${s} not found.`)}}const rR=i=>{var p;const{securityLevel:s}=qt();let u=Ir("body");if(s==="sandbox"){const b=((p=Ir(`#i${i}`).node())==null?void 0:p.contentDocument)??document;u=Ir(b.body)}return u.select(`#${i}`)},t$e={draw:(i,s,u)=>{Xe.debug(`rendering svg for syntax error -`);const d=rR(s),p=d.append("g");d.attr("viewBox","0 0 2412 512"),Ng(d,100,512,!0),p.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),p.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),p.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),p.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),p.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),p.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),p.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),p.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${u}`)}},Djt=t$e,Ijt={db:{},renderer:t$e,parser:{parser:{yy:{}},parse:()=>{}}},n$e="flowchart-elk",Ojt={id:n$e,detector:(i,s)=>{var u;return!!(/^\s*flowchart-elk/.test(i)||/^\s*flowchart|graph/.test(i)&&((u=s==null?void 0:s.flowchart)==null?void 0:u.defaultRenderer)==="elk")},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>jan);return{id:n$e,diagram:i}}},r$e="timeline",Njt={id:r$e,detector:i=>/^\s*timeline/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>ion);return{id:r$e,diagram:i}}},i$e="mindmap",Pjt={id:i$e,detector:i=>/^\s*mindmap/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>Ion);return{id:i$e,diagram:i}}},s$e="sankey",Bjt={id:s$e,detector:i=>/^\s*sankey-beta/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>ccn);return{id:s$e,diagram:i}}},a$e="block",Fjt={id:a$e,detector:i=>/^\s*block-beta/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>Mcn);return{id:a$e,diagram:i}}};let o$e=!1;const B2e=()=>{o$e||(o$e=!0,QX("error",Ijt,i=>i.toLowerCase().trim()==="error"),QX("---",{db:{clear:()=>{}},styles:{},renderer:{draw:()=>{}},parser:{parser:{yy:{}},parse:()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")}},init:()=>null},i=>i.toLowerCase().trimStart().startsWith("---")),NRe(rjt,bjt,pjt,ajt,cjt,ujt,ljt,djt,gjt,Ojt,sjt,ijt,Pjt,Njt,ojt,vjt,mjt,wjt,hjt,Bjt,fjt,Fjt))};class c$e{constructor(s,u={}){this.text=s,this.metadata=u,this.type="graph",this.text=NRt(s),this.text+=` -`;const d=Vh();try{this.type=_X(s,d)}catch(v){this.type="error",this.detectError=v}const p=P2e(this.type);Xe.debug("Type "+this.type),this.db=p.db,this.renderer=p.renderer,this.parser=p.parser,this.parser.parser.yy=this.db,this.init=p.init,this.parse()}parse(){var u,d,p,v,b;if(this.detectError)throw this.detectError;(d=(u=this.db).clear)==null||d.call(u);const s=Vh();(p=this.init)==null||p.call(this,s),this.metadata.title&&((b=(v=this.db).setDiagramTitle)==null||b.call(v,this.metadata.title)),this.parser.parse(this.text)}async render(s,u){await this.renderer.draw(this.text,s,u,this)}getParser(){return this.parser}getType(){return this.type}}const Rjt=async(i,s={})=>{const u=_X(i,Vh());try{P2e(u)}catch{const p=$Pt(u);if(!p)throw new ORe(`Diagram ${u} not found.`);const{id:v,diagram:b}=await p();QX(v,b)}return new c$e(i,s)};let u$e=[];const jjt=()=>{u$e.forEach(i=>{i()}),u$e=[]};var $jt=WRe(Object.keys,Object);const zjt=$jt;var qjt=Object.prototype,Hjt=qjt.hasOwnProperty;function l$e(i){if(!OX(i))return zjt(i);var s=[];for(var u in Object(i))Hjt.call(i,u)&&u!="constructor"&&s.push(u);return s}var Vjt=MC(N3,"DataView");const F2e=Vjt;var Ujt=MC(N3,"Promise");const R2e=Ujt;var Gjt=MC(N3,"Set");const CD=Gjt;var Kjt=MC(N3,"WeakMap");const j2e=Kjt;var h$e="[object Map]",Wjt="[object Object]",f$e="[object Promise]",d$e="[object Set]",g$e="[object WeakMap]",p$e="[object DataView]",Yjt=LC(F2e),Xjt=LC(WF),Qjt=LC(R2e),Jjt=LC(CD),Zjt=LC(j2e),BC=AC;(F2e&&BC(new F2e(new ArrayBuffer(1)))!=p$e||WF&&BC(new WF)!=h$e||R2e&&BC(R2e.resolve())!=f$e||CD&&BC(new CD)!=d$e||j2e&&BC(new j2e)!=g$e)&&(BC=function(i){var s=AC(i),u=s==Wjt?i.constructor:void 0,d=u?LC(u):"";if(d)switch(d){case Yjt:return p$e;case Xjt:return h$e;case Qjt:return f$e;case Jjt:return d$e;case Zjt:return g$e}return s});const SD=BC;var e$t="[object Map]",t$t="[object Set]",n$t=Object.prototype,r$t=n$t.hasOwnProperty;function iR(i){if(i==null)return!0;if(w9(i)&&(D0(i)||typeof i=="string"||typeof i.splice=="function"||vD(i)||PX(i)||mD(i)))return!i.length;var s=SD(i);if(s==e$t||s==t$t)return!i.size;if(OX(i))return!l$e(i).length;for(var u in i)if(r$t.call(i,u))return!1;return!0}const i$t="graphics-document document";function s$t(i,s){i.attr("role",i$t),s!==""&&i.attr("aria-roledescription",s)}function a$t(i,s,u,d){if(i.insert!==void 0){if(u){const p=`chart-desc-${d}`;i.attr("aria-describedby",p),i.insert("desc",":first-child").attr("id",p).text(u)}if(s){const p=`chart-title-${d}`;i.attr("aria-labelledby",p),i.insert("title",":first-child").attr("id",p).text(s)}}}const o$t=i=>i.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart();/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */function b$e(i){return typeof i>"u"||i===null}function c$t(i){return typeof i=="object"&&i!==null}function u$t(i){return Array.isArray(i)?i:b$e(i)?[]:[i]}function l$t(i,s){var u,d,p,v;if(s)for(v=Object.keys(s),u=0,d=v.length;uy&&(v=" ... ",s=d-y+v.length),u-d>y&&(b=" ...",u=d+y-b.length),{str:v+i.slice(s,u).replace(/\t/g,"→")+b,pos:d-s+v.length}}function z2e(i,s){return Lp.repeat(" ",s-i.length)+i}function w$t(i,s){if(s=Object.create(s||null),!i.buffer)return null;s.maxLength||(s.maxLength=79),typeof s.indent!="number"&&(s.indent=1),typeof s.linesBefore!="number"&&(s.linesBefore=3),typeof s.linesAfter!="number"&&(s.linesAfter=2);for(var u=/\r?\n|\r|\0/g,d=[0],p=[],v,b=-1;v=u.exec(i.buffer);)p.push(v.index),d.push(v.index+v[0].length),i.position<=v.index&&b<0&&(b=d.length-2);b<0&&(b=d.length-1);var y="",T,_,A=Math.min(i.line+s.linesAfter,p.length).toString().length,P=s.maxLength-(s.indent+A+3);for(T=1;T<=s.linesBefore&&!(b-T<0);T++)_=$2e(i.buffer,d[b-T],p[b-T],i.position-(d[b]-d[b-T]),P),y=Lp.repeat(" ",s.indent)+z2e((i.line-T+1).toString(),A)+" | "+_.str+` -`+y;for(_=$2e(i.buffer,d[b],p[b],i.position,P),y+=Lp.repeat(" ",s.indent)+z2e((i.line+1).toString(),A)+" | "+_.str+` -`,y+=Lp.repeat("-",s.indent+A+3+_.pos)+`^ -`,T=1;T<=s.linesAfter&&!(b+T>=p.length);T++)_=$2e(i.buffer,d[b+T],p[b+T],i.position-(d[b]-d[b+T]),P),y+=Lp.repeat(" ",s.indent)+z2e((i.line+T+1).toString(),A)+" | "+_.str+` -`;return y.replace(/\n$/,"")}var y$t=w$t,x$t=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],k$t=["scalar","sequence","mapping"];function E$t(i){var s={};return i!==null&&Object.keys(i).forEach(function(u){i[u].forEach(function(d){s[String(d)]=u})}),s}function T$t(i,s){if(s=s||{},Object.keys(s).forEach(function(u){if(x$t.indexOf(u)===-1)throw new A7('Unknown option "'+u+'" is met in definition of "'+i+'" YAML type.')}),this.options=s,this.tag=i,this.kind=s.kind||null,this.resolve=s.resolve||function(){return!0},this.construct=s.construct||function(u){return u},this.instanceOf=s.instanceOf||null,this.predicate=s.predicate||null,this.represent=s.represent||null,this.representName=s.representName||null,this.defaultStyle=s.defaultStyle||null,this.multi=s.multi||!1,this.styleAliases=E$t(s.styleAliases||null),k$t.indexOf(this.kind)===-1)throw new A7('Unknown kind "'+this.kind+'" is specified for "'+i+'" YAML type.')}var Fg=T$t;function v$e(i,s){var u=[];return i[s].forEach(function(d){var p=u.length;u.forEach(function(v,b){v.tag===d.tag&&v.kind===d.kind&&v.multi===d.multi&&(p=b)}),u[p]=d}),u}function C$t(){var i={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},s,u;function d(p){p.multi?(i.multi[p.kind].push(p),i.multi.fallback.push(p)):i[p.kind][p.tag]=i.fallback[p.tag]=p}for(s=0,u=arguments.length;s=0?"0b"+i.toString(2):"-0b"+i.toString(2).slice(1)},octal:function(i){return i>=0?"0o"+i.toString(8):"-0o"+i.toString(8).slice(1)},decimal:function(i){return i.toString(10)},hexadecimal:function(i){return i>=0?"0x"+i.toString(16).toUpperCase():"-0x"+i.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),G$t=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function K$t(i){return!(i===null||!G$t.test(i)||i[i.length-1]==="_")}function W$t(i){var s,u;return s=i.replace(/_/g,"").toLowerCase(),u=s[0]==="-"?-1:1,"+-".indexOf(s[0])>=0&&(s=s.slice(1)),s===".inf"?u===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:s===".nan"?NaN:u*parseFloat(s,10)}var Y$t=/^[-+]?[0-9]+e/;function X$t(i,s){var u;if(isNaN(i))switch(s){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===i)switch(s){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===i)switch(s){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(Lp.isNegativeZero(i))return"-0.0";return u=i.toString(10),Y$t.test(u)?u.replace("e",".e"):u}function Q$t(i){return Object.prototype.toString.call(i)==="[object Number]"&&(i%1!==0||Lp.isNegativeZero(i))}var J$t=new Fg("tag:yaml.org,2002:float",{kind:"scalar",resolve:K$t,construct:W$t,predicate:Q$t,represent:X$t,defaultStyle:"lowercase"}),w$e=M$t.extend({implicit:[N$t,R$t,U$t,J$t]}),Z$t=w$e,y$e=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),x$e=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function ezt(i){return i===null?!1:y$e.exec(i)!==null||x$e.exec(i)!==null}function tzt(i){var s,u,d,p,v,b,y,T=0,_=null,A,P,R;if(s=y$e.exec(i),s===null&&(s=x$e.exec(i)),s===null)throw new Error("Date resolve error");if(u=+s[1],d=+s[2]-1,p=+s[3],!s[4])return new Date(Date.UTC(u,d,p));if(v=+s[4],b=+s[5],y=+s[6],s[7]){for(T=s[7].slice(0,3);T.length<3;)T+="0";T=+T}return s[9]&&(A=+s[10],P=+(s[11]||0),_=(A*60+P)*6e4,s[9]==="-"&&(_=-_)),R=new Date(Date.UTC(u,d,p,v,b,y,T)),_&&R.setTime(R.getTime()-_),R}function nzt(i){return i.toISOString()}var rzt=new Fg("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:ezt,construct:tzt,instanceOf:Date,represent:nzt});function izt(i){return i==="<<"||i===null}var szt=new Fg("tag:yaml.org,2002:merge",{kind:"scalar",resolve:izt}),H2e=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= -\r`;function azt(i){if(i===null)return!1;var s,u,d=0,p=i.length,v=H2e;for(u=0;u64)){if(s<0)return!1;d+=6}return d%8===0}function ozt(i){var s,u,d=i.replace(/[\r\n=]/g,""),p=d.length,v=H2e,b=0,y=[];for(s=0;s>16&255),y.push(b>>8&255),y.push(b&255)),b=b<<6|v.indexOf(d.charAt(s));return u=p%4*6,u===0?(y.push(b>>16&255),y.push(b>>8&255),y.push(b&255)):u===18?(y.push(b>>10&255),y.push(b>>2&255)):u===12&&y.push(b>>4&255),new Uint8Array(y)}function czt(i){var s="",u=0,d,p,v=i.length,b=H2e;for(d=0;d>18&63],s+=b[u>>12&63],s+=b[u>>6&63],s+=b[u&63]),u=(u<<8)+i[d];return p=v%3,p===0?(s+=b[u>>18&63],s+=b[u>>12&63],s+=b[u>>6&63],s+=b[u&63]):p===2?(s+=b[u>>10&63],s+=b[u>>4&63],s+=b[u<<2&63],s+=b[64]):p===1&&(s+=b[u>>2&63],s+=b[u<<4&63],s+=b[64],s+=b[64]),s}function uzt(i){return Object.prototype.toString.call(i)==="[object Uint8Array]"}var lzt=new Fg("tag:yaml.org,2002:binary",{kind:"scalar",resolve:azt,construct:ozt,predicate:uzt,represent:czt}),hzt=Object.prototype.hasOwnProperty,fzt=Object.prototype.toString;function dzt(i){if(i===null)return!0;var s=[],u,d,p,v,b,y=i;for(u=0,d=y.length;u>10)+55296,(i-65536&1023)+56320)}for(var L$e=new Array(256),M$e=new Array(256),AD=0;AD<256;AD++)L$e[AD]=A$e(AD)?1:0,M$e[AD]=A$e(AD);function Ozt(i,s){this.input=i,this.filename=s.filename||null,this.schema=s.schema||Tzt,this.onWarning=s.onWarning||null,this.legacy=s.legacy||!1,this.json=s.json||!1,this.listener=s.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=i.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function D$e(i,s){var u={name:i.filename,buffer:i.input.slice(0,-1),position:i.position,line:i.line,column:i.position-i.lineStart};return u.snippet=y$t(u),new A7(s,u)}function oa(i,s){throw D$e(i,s)}function eQ(i,s){i.onWarning&&i.onWarning.call(null,D$e(i,s))}var I$e={YAML:function(s,u,d){var p,v,b;s.version!==null&&oa(s,"duplication of %YAML directive"),d.length!==1&&oa(s,"YAML directive accepts exactly one argument"),p=/^([0-9]+)\.([0-9]+)$/.exec(d[0]),p===null&&oa(s,"ill-formed argument of the YAML directive"),v=parseInt(p[1],10),b=parseInt(p[2],10),v!==1&&oa(s,"unacceptable YAML version of the document"),s.version=d[0],s.checkLineBreaks=b<2,b!==1&&b!==2&&eQ(s,"unsupported YAML version of the document")},TAG:function(s,u,d){var p,v;d.length!==2&&oa(s,"TAG directive accepts exactly two arguments"),p=d[0],v=d[1],C$e.test(p)||oa(s,"ill-formed tag handle (first argument) of the TAG directive"),x9.call(s.tagMap,p)&&oa(s,'there is a previously declared suffix for "'+p+'" tag handle'),S$e.test(v)||oa(s,"ill-formed tag prefix (second argument) of the TAG directive");try{v=decodeURIComponent(v)}catch{oa(s,"tag prefix is malformed: "+v)}s.tagMap[p]=v}};function k9(i,s,u,d){var p,v,b,y;if(s1&&(i.result+=Lp.repeat(` -`,s-1))}function Nzt(i,s,u){var d,p,v,b,y,T,_,A,P=i.kind,R=i.result,F;if(F=i.input.charCodeAt(i.position),F2(F)||_D(F)||F===35||F===38||F===42||F===33||F===124||F===62||F===39||F===34||F===37||F===64||F===96||(F===63||F===45)&&(p=i.input.charCodeAt(i.position+1),F2(p)||u&&_D(p)))return!1;for(i.kind="scalar",i.result="",v=b=i.position,y=!1;F!==0;){if(F===58){if(p=i.input.charCodeAt(i.position+1),F2(p)||u&&_D(p))break}else if(F===35){if(d=i.input.charCodeAt(i.position-1),F2(d))break}else{if(i.position===i.lineStart&&tQ(i)||u&&_D(F))break;if(V4(F))if(T=i.line,_=i.lineStart,A=i.lineIndent,O0(i,!1,-1),i.lineIndent>=s){y=!0,F=i.input.charCodeAt(i.position);continue}else{i.position=b,i.line=T,i.lineStart=_,i.lineIndent=A;break}}y&&(k9(i,v,b,!1),G2e(i,i.line-T),v=b=i.position,y=!1),FC(F)||(b=i.position+1),F=i.input.charCodeAt(++i.position)}return k9(i,v,b,!1),i.result?!0:(i.kind=P,i.result=R,!1)}function Pzt(i,s){var u,d,p;if(u=i.input.charCodeAt(i.position),u!==39)return!1;for(i.kind="scalar",i.result="",i.position++,d=p=i.position;(u=i.input.charCodeAt(i.position))!==0;)if(u===39)if(k9(i,d,i.position,!0),u=i.input.charCodeAt(++i.position),u===39)d=i.position,i.position++,p=i.position;else return!0;else V4(u)?(k9(i,d,p,!0),G2e(i,O0(i,!1,s)),d=p=i.position):i.position===i.lineStart&&tQ(i)?oa(i,"unexpected end of the document within a single quoted scalar"):(i.position++,p=i.position);oa(i,"unexpected end of the stream within a single quoted scalar")}function Bzt(i,s){var u,d,p,v,b,y;if(y=i.input.charCodeAt(i.position),y!==34)return!1;for(i.kind="scalar",i.result="",i.position++,u=d=i.position;(y=i.input.charCodeAt(i.position))!==0;){if(y===34)return k9(i,u,i.position,!0),i.position++,!0;if(y===92){if(k9(i,u,i.position,!0),y=i.input.charCodeAt(++i.position),V4(y))O0(i,!1,s);else if(y<256&&L$e[y])i.result+=M$e[y],i.position++;else if((b=Mzt(y))>0){for(p=b,v=0;p>0;p--)y=i.input.charCodeAt(++i.position),(b=Lzt(y))>=0?v=(v<<4)+b:oa(i,"expected hexadecimal character");i.result+=Izt(v),i.position++}else oa(i,"unknown escape sequence");u=d=i.position}else V4(y)?(k9(i,u,d,!0),G2e(i,O0(i,!1,s)),u=d=i.position):i.position===i.lineStart&&tQ(i)?oa(i,"unexpected end of the document within a double quoted scalar"):(i.position++,d=i.position)}oa(i,"unexpected end of the stream within a double quoted scalar")}function Fzt(i,s){var u=!0,d,p,v,b=i.tag,y,T=i.anchor,_,A,P,R,F,j=Object.create(null),K,ee,ie,oe;if(oe=i.input.charCodeAt(i.position),oe===91)A=93,F=!1,y=[];else if(oe===123)A=125,F=!0,y={};else return!1;for(i.anchor!==null&&(i.anchorMap[i.anchor]=y),oe=i.input.charCodeAt(++i.position);oe!==0;){if(O0(i,!0,s),oe=i.input.charCodeAt(i.position),oe===A)return i.position++,i.tag=b,i.anchor=T,i.kind=F?"mapping":"sequence",i.result=y,!0;u?oe===44&&oa(i,"expected the node content, but found ','"):oa(i,"missed comma between flow collection entries"),ee=K=ie=null,P=R=!1,oe===63&&(_=i.input.charCodeAt(i.position+1),F2(_)&&(P=R=!0,i.position++,O0(i,!0,s))),d=i.line,p=i.lineStart,v=i.position,MD(i,s,JX,!1,!0),ee=i.tag,K=i.result,O0(i,!0,s),oe=i.input.charCodeAt(i.position),(R||i.line===d)&&oe===58&&(P=!0,oe=i.input.charCodeAt(++i.position),O0(i,!0,s),MD(i,s,JX,!1,!0),ie=i.result),F?LD(i,y,j,ee,K,ie,d,p,v):P?y.push(LD(i,null,j,ee,K,ie,d,p,v)):y.push(K),O0(i,!0,s),oe=i.input.charCodeAt(i.position),oe===44?(u=!0,oe=i.input.charCodeAt(++i.position)):u=!1}oa(i,"unexpected end of the stream within a flow collection")}function Rzt(i,s){var u,d,p=V2e,v=!1,b=!1,y=s,T=0,_=!1,A,P;if(P=i.input.charCodeAt(i.position),P===124)d=!1;else if(P===62)d=!0;else return!1;for(i.kind="scalar",i.result="";P!==0;)if(P=i.input.charCodeAt(++i.position),P===43||P===45)V2e===p?p=P===43?T$e:Czt:oa(i,"repeat of a chomping mode identifier");else if((A=Dzt(P))>=0)A===0?oa(i,"bad explicit indentation width of a block scalar; it cannot be less than one"):b?oa(i,"repeat of an indentation width identifier"):(y=s+A-1,b=!0);else break;if(FC(P)){do P=i.input.charCodeAt(++i.position);while(FC(P));if(P===35)do P=i.input.charCodeAt(++i.position);while(!V4(P)&&P!==0)}for(;P!==0;){for(U2e(i),i.lineIndent=0,P=i.input.charCodeAt(i.position);(!b||i.lineIndenty&&(y=i.lineIndent),V4(P)){T++;continue}if(i.lineIndents)&&T!==0)oa(i,"bad indentation of a sequence entry");else if(i.lineIndents)&&(ee&&(b=i.line,y=i.lineStart,T=i.position),MD(i,s,ZX,!0,p)&&(ee?j=i.result:K=i.result),ee||(LD(i,P,R,F,j,K,b,y,T),F=j=K=null),O0(i,!0,-1),oe=i.input.charCodeAt(i.position)),(i.line===v||i.lineIndent>s)&&oe!==0)oa(i,"bad indentation of a mapping entry");else if(i.lineIndents?T=1:i.lineIndent===s?T=0:i.lineIndents?T=1:i.lineIndent===s?T=0:i.lineIndent tag; it should be "scalar", not "'+i.kind+'"'),P=0,R=i.implicitTypes.length;P"),i.result!==null&&j.kind!==i.kind&&oa(i,"unacceptable node kind for !<"+i.tag+'> tag; it should be "'+j.kind+'", not "'+i.kind+'"'),j.resolve(i.result,i.tag)?(i.result=j.construct(i.result,i.tag),i.anchor!==null&&(i.anchorMap[i.anchor]=i.result)):oa(i,"cannot resolve a node with !<"+i.tag+"> explicit tag")}return i.listener!==null&&i.listener("close",i),i.tag!==null||i.anchor!==null||A}function Hzt(i){var s=i.position,u,d,p,v=!1,b;for(i.version=null,i.checkLineBreaks=i.legacy,i.tagMap=Object.create(null),i.anchorMap=Object.create(null);(b=i.input.charCodeAt(i.position))!==0&&(O0(i,!0,-1),b=i.input.charCodeAt(i.position),!(i.lineIndent>0||b!==37));){for(v=!0,b=i.input.charCodeAt(++i.position),u=i.position;b!==0&&!F2(b);)b=i.input.charCodeAt(++i.position);for(d=i.input.slice(u,i.position),p=[],d.length<1&&oa(i,"directive name must not be less than one character in length");b!==0;){for(;FC(b);)b=i.input.charCodeAt(++i.position);if(b===35){do b=i.input.charCodeAt(++i.position);while(b!==0&&!V4(b));break}if(V4(b))break;for(u=i.position;b!==0&&!F2(b);)b=i.input.charCodeAt(++i.position);p.push(i.input.slice(u,i.position))}b!==0&&U2e(i),x9.call(I$e,d)?I$e[d](i,d,p):eQ(i,'unknown document directive "'+d+'"')}if(O0(i,!0,-1),i.lineIndent===0&&i.input.charCodeAt(i.position)===45&&i.input.charCodeAt(i.position+1)===45&&i.input.charCodeAt(i.position+2)===45?(i.position+=3,O0(i,!0,-1)):v&&oa(i,"directives end mark is expected"),MD(i,i.lineIndent-1,ZX,!1,!0),O0(i,!0,-1),i.checkLineBreaks&&_zt.test(i.input.slice(s,i.position))&&eQ(i,"non-ASCII line breaks are interpreted as content"),i.documents.push(i.result),i.position===i.lineStart&&tQ(i)){i.input.charCodeAt(i.position)===46&&(i.position+=3,O0(i,!0,-1));return}if(i.position"u"&&(u=s,s=null);var d=P$e(i,u);if(typeof s!="function")return d;for(var p=0,v=d.length;pi.replace(/\r\n?/g,` -`).replace(/<(\w+)([^>]*)>/g,(s,u,d)=>"<"+u+d.replace(/="([^"]*)"/g,"='$1'")+">"),Zzt=i=>{const{text:s,metadata:u}=Qzt(i),{displayMode:d,title:p,config:v={}}=u;return d&&(v.gantt||(v.gantt={}),v.gantt.displayMode=d),{title:p,config:v,text:s}},eqt=i=>{const s=Ao.detectInit(i)??{},u=Ao.detectDirective(i,"wrap");return Array.isArray(u)?s.wrap=u.some(({type:d})=>{}):(u==null?void 0:u.type)==="wrap"&&(s.wrap=!0),{text:wRt(i),directive:s}};function B$e(i){const s=Jzt(i),u=Zzt(s),d=eqt(u.text),p=JF(u.config,d.directive);return i=o$t(d.text),{code:i,title:u.title,config:p}}const tqt=5e4,nqt="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa",rqt="sandbox",iqt="loose",sqt="http://www.w3.org/2000/svg",aqt="http://www.w3.org/1999/xlink",oqt="http://www.w3.org/1999/xhtml",cqt="100%",uqt="100%",lqt="border:0;margin:0;",hqt="margin:0",fqt="allow-top-navigation-by-user-activation allow-popups",dqt='The "iframe" tag is not supported by your browser.',gqt=["foreignobject"],pqt=["dominant-baseline"];function F$e(i){const s=B$e(i);return WX(),ejt(s.config??{}),s}async function bqt(i,s){B2e(),i=F$e(i).code;try{await K2e(i)}catch(u){if(s!=null&&s.suppressErrors)return!1;throw u}return!0}const R$e=(i,s,u=[])=>` -.${i} ${s} { ${u.join(" !important; ")} !important; }`,mqt=(i,s={})=>{var d;let u="";if(i.themeCSS!==void 0&&(u+=` -${i.themeCSS}`),i.fontFamily!==void 0&&(u+=` -:root { --mermaid-font-family: ${i.fontFamily}}`),i.altFontFamily!==void 0&&(u+=` -:root { --mermaid-alt-font-family: ${i.altFontFamily}}`),!iR(s)){const y=i.htmlLabels||((d=i.flowchart)==null?void 0:d.htmlLabels)?["> *","span"]:["rect","polygon","ellipse","circle","path"];for(const T in s){const _=s[T];iR(_.styles)||y.forEach(A=>{u+=R$e(_.id,A,_.styles)}),iR(_.textStyles)||(u+=R$e(_.id,"tspan",_.textStyles))}}return u},vqt=(i,s,u,d)=>{const p=mqt(i,u),v=Tjt(s,p,i.themeVariables);return M2e(WRt(`${d}{${v}}`),XRt)},wqt=(i="",s,u)=>{let d=i;return!u&&!s&&(d=d.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),d=ZF(d),d=d.replace(/
/g,"
"),d},yqt=(i="",s)=>{var p,v;const u=(v=(p=s==null?void 0:s.viewBox)==null?void 0:p.baseVal)!=null&&v.height?s.viewBox.baseVal.height+"px":uqt,d=btoa(''+i+"");return``},j$e=(i,s,u,d,p)=>{const v=i.append("div");v.attr("id",u),d&&v.attr("style",d);const b=v.append("svg").attr("id",s).attr("width","100%").attr("xmlns",sqt);return p&&b.attr("xmlns:xlink",p),b.append("g"),i};function $$e(i,s){return i.append("iframe").attr("id",s).attr("style","width: 100%; height: 100%;").attr("sandbox","")}const xqt=(i,s,u,d)=>{var p,v,b;(p=i.getElementById(s))==null||p.remove(),(v=i.getElementById(u))==null||v.remove(),(b=i.getElementById(d))==null||b.remove()},kqt=async function(i,s,u){var U,Fe,Pe,je,Ie,Se;B2e();const d=F$e(s);s=d.code;const p=Vh();Xe.debug(p),s.length>((p==null?void 0:p.maxTextSize)??tqt)&&(s=nqt);const v="#"+i,b="i"+i,y="#"+b,T="d"+i,_="#"+T;let A=Ir("body");const P=p.securityLevel===rqt,R=p.securityLevel===iqt,F=p.fontFamily;if(u!==void 0){if(u&&(u.innerHTML=""),P){const Ce=$$e(Ir(u),b);A=Ir(Ce.nodes()[0].contentDocument.body),A.node().style.margin=0}else A=Ir(u);j$e(A,i,T,`font-family: ${F}`,aqt)}else{if(xqt(document,i,T,b),P){const Ce=$$e(Ir("body"),b);A=Ir(Ce.nodes()[0].contentDocument.body),A.node().style.margin=0}else A=Ir("body");j$e(A,i,T)}let j,K;try{j=await K2e(s,{title:d.title})}catch(Ce){j=new c$e("error"),K=Ce}const ee=A.select(_).node(),ie=j.type,oe=ee.firstChild,pe=oe.firstChild,be=(Fe=(U=j.renderer).getClasses)==null?void 0:Fe.call(U,s,j),ae=vqt(p,ie,be,v),ne=document.createElement("style");ne.innerHTML=ae,oe.insertBefore(ne,pe);try{await j.renderer.draw(s,i,Aje,j)}catch(Ce){throw Djt.draw(s,i,Aje),Ce}const se=A.select(`${_} svg`),de=(je=(Pe=j.db).getAccTitle)==null?void 0:je.call(Pe),X=(Se=(Ie=j.db).getAccDescription)==null?void 0:Se.call(Ie);Tqt(ie,se,de,X),A.select(`[id="${i}"]`).selectAll("foreignobject > *").attr("xmlns",oqt);let ge=A.select(_).node().innerHTML;if(Xe.debug("config.arrowMarkerAbsolute",p.arrowMarkerAbsolute),ge=wqt(ge,P,f1(p.arrowMarkerAbsolute)),P){const Ce=A.select(_+" svg").node();ge=yqt(ge,Ce)}else R||(ge=hD.sanitize(ge,{ADD_TAGS:gqt,ADD_ATTR:pqt}));if(jjt(),K)throw K;const xe=Ir(P?y:_).node();return xe&&"remove"in xe&&xe.remove(),{svg:ge,bindFunctions:j.db.bindFunctions}};function Eqt(i={}){var u;i!=null&&i.fontFamily&&!((u=i.themeVariables)!=null&&u.fontFamily)&&(i.themeVariables||(i.themeVariables={}),i.themeVariables.fontFamily=i.fontFamily),JRt(i),i!=null&&i.theme&&i.theme in E7?i.themeVariables=E7[i.theme].getThemeVariables(i.themeVariables):i&&(i.themeVariables=E7.default.getThemeVariables(i.themeVariables));const s=typeof i=="object"?QRt(i):Mje();fpe(s.logLevel),B2e()}const K2e=(i,s={})=>{const{code:u}=B$e(i);return Rjt(u,s)};function Tqt(i,s,u,d){s$t(s,i),a$t(s,u,d,s.attr("id"))}const RC=Object.freeze({render:kqt,parse:bqt,getDiagramFromText:K2e,initialize:Eqt,getConfig:Vh,setConfig:Dje,getSiteConfig:Mje,updateSiteConfig:ZRt,reset:()=>{WX()},globalReset:()=>{WX(ED)},defaultConfig:ED});fpe(Vh().logLevel),WX(Vh());const Cqt=async()=>{Xe.debug("Loading registered diagrams");const s=(await Promise.allSettled(Object.entries(dD).map(async([u,{detector:d,loader:p}])=>{if(p)try{P2e(u)}catch{try{const{diagram:b,id:y}=await p();QX(y,b,d)}catch(b){throw Xe.error(`Failed to load external diagram with key ${u}. Removing from detectors.`),delete dD[u],b}}}))).filter(u=>u.status==="rejected");if(s.length>0){Xe.error(`Failed to load ${s.length} external diagrams`);for(const u of s)Xe.error(u);throw new Error(`Failed to load ${s.length} external diagrams`)}},Sqt=(i,s,u)=>{Xe.warn(i),wje(i)?(u&&u(i.str,i.hash),s.push({...i,message:i.str,error:i})):(u&&u(i),i instanceof Error&&s.push({str:i.message,message:i.message,hash:i.name,error:i}))},z$e=async function(i={querySelector:".mermaid"}){try{await _qt(i)}catch(s){if(wje(s)&&Xe.error(s.str),um.parseError&&um.parseError(s),!i.suppressErrors)throw Xe.error("Use the suppressErrors option to suppress these errors"),s}},_qt=async function({postRenderCallback:i,querySelector:s,nodes:u}={querySelector:".mermaid"}){const d=RC.getConfig();Xe.debug(`${i?"":"No "}Callback function found`);let p;if(u)p=u;else if(s)p=document.querySelectorAll(s);else throw new Error("Nodes and querySelector are both undefined");Xe.debug(`Found ${p.length} diagrams`),(d==null?void 0:d.startOnLoad)!==void 0&&(Xe.debug("Start On Load: "+(d==null?void 0:d.startOnLoad)),RC.updateSiteConfig({startOnLoad:d==null?void 0:d.startOnLoad}));const v=new Ao.InitIDGenerator(d.deterministicIds,d.deterministicIDSeed);let b;const y=[];for(const T of Array.from(p)){Xe.info("Rendering diagram: "+T.id);/*! Check if previously processed */if(T.getAttribute("data-processed"))continue;T.setAttribute("data-processed","true");const _=`mermaid-${v.next()}`;b=T.innerHTML,b=JM(Ao.entityDecode(b)).trim().replace(//gi,"
");const A=Ao.detectInit(b);A&&Xe.debug("Detected early reinit: ",A);try{const{svg:P,bindFunctions:R}=await U$e(_,b,T);T.innerHTML=P,i&&await i(_),R&&R(T)}catch(P){Sqt(P,y,um.parseError)}}if(y.length>0)throw y[0]},q$e=function(i){RC.initialize(i)},Aqt=async function(i,s,u){Xe.warn("mermaid.init is deprecated. Please use run instead."),i&&q$e(i);const d={postRenderCallback:u,querySelector:".mermaid"};typeof s=="string"?d.querySelector=s:s&&(s instanceof HTMLElement?d.nodes=[s]:d.nodes=s),await z$e(d)},Lqt=async(i,{lazyLoad:s=!0}={})=>{NRe(...i),s===!1&&await Cqt()},H$e=function(){if(um.startOnLoad){const{startOnLoad:i}=RC.getConfig();i&&um.run().catch(s=>Xe.error("Mermaid failed to initialize",s))}};if(typeof document<"u"){/*! - * Wait for document loaded before starting the execution - */window.addEventListener("load",H$e,!1)}const Mqt=function(i){um.parseError=i},nQ=[];let W2e=!1;const V$e=async()=>{if(!W2e){for(W2e=!0;nQ.length>0;){const i=nQ.shift();if(i)try{await i()}catch(s){Xe.error("Error executing queue",s)}}W2e=!1}},Dqt=async(i,s)=>new Promise((u,d)=>{const p=()=>new Promise((v,b)=>{RC.parse(i,s).then(y=>{v(y),u(y)},y=>{var T;Xe.error("Error parsing",y),(T=um.parseError)==null||T.call(um,y),b(y),d(y)})});nQ.push(p),V$e().catch(d)}),U$e=(i,s,u)=>new Promise((d,p)=>{const v=()=>new Promise((b,y)=>{RC.render(i,s,u).then(T=>{b(T),d(T)},T=>{var _;Xe.error("Error parsing",T),(_=um.parseError)==null||_.call(um,T),y(T),p(T)})});nQ.push(v),V$e().catch(p)}),um={startOnLoad:!0,mermaidAPI:RC,parse:Dqt,render:U$e,init:Aqt,run:z$e,registerExternalDiagrams:Lqt,initialize:q$e,parseError:void 0,contentLoaded:H$e,setParseErrorHandler:Mqt,detectType:_X};class lm{constructor(s,u,d){this.lexer=void 0,this.start=void 0,this.end=void 0,this.lexer=s,this.start=u,this.end=d}static range(s,u){return u?!s||!s.loc||!u.loc||s.loc.lexer!==u.loc.lexer?null:new lm(s.loc.lexer,s.loc.start,u.loc.end):s&&s.loc}}class U4{constructor(s,u){this.text=void 0,this.loc=void 0,this.noexpand=void 0,this.treatAsRelax=void 0,this.text=s,this.loc=u}range(s,u){return new U4(u,lm.range(this,s))}}class Ci{constructor(s,u){this.name=void 0,this.position=void 0,this.length=void 0,this.rawMessage=void 0;var d="KaTeX parse error: "+s,p,v,b=u&&u.loc;if(b&&b.start<=b.end){var y=b.lexer.input;p=b.start,v=b.end,p===y.length?d+=" at end of input: ":d+=" at position "+(p+1)+": ";var T=y.slice(p,v).replace(/[^]/g,"$&̲"),_;p>15?_="…"+y.slice(p-15,p):_=y.slice(0,p);var A;v+15":">","<":"<",'"':""","'":"'"},Fqt=/[&><"']/g;function Rqt(i){return String(i).replace(Fqt,s=>Bqt[s])}var G$e=function i(s){return s.type==="ordgroup"||s.type==="color"?s.body.length===1?i(s.body[0]):s:s.type==="font"?i(s.body):s},jqt=function(s){var u=G$e(s);return u.type==="mathord"||u.type==="textord"||u.type==="atom"},$qt=function(s){if(!s)throw new Error("Expected non-null, but got "+String(s));return s},zqt=function(s){var u=/^\s*([^\\/#]*?)(?::|�*58|�*3a)/i.exec(s);return u!=null?u[1]:"_relative"},Ya={contains:Iqt,deflt:Oqt,escape:Rqt,hyphenate:Pqt,getBaseElem:G$e,isCharacterBox:jqt,protocolFromUrl:zqt},rQ={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format "},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color ",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:i=>"#"+i},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:(i,s)=>(s.push(i),s)},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:i=>Math.max(0,i),cli:"--min-rule-thickness ",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:i=>Math.max(0,i),cli:"-s, --max-size ",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:i=>Math.max(0,i),cli:"-e, --max-expand ",cliProcessor:i=>i==="Infinity"?1/0:parseInt(i)},globalGroup:{type:"boolean",cli:!1}};function qqt(i){if(i.default)return i.default;var s=i.type,u=Array.isArray(s)?s[0]:s;if(typeof u!="string")return u.enum[0];switch(u){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}class Y2e{constructor(s){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,s=s||{};for(var u in rQ)if(rQ.hasOwnProperty(u)){var d=rQ[u];this[u]=s[u]!==void 0?d.processor?d.processor(s[u]):s[u]:qqt(d)}}reportNonstrict(s,u,d){var p=this.strict;if(typeof p=="function"&&(p=p(s,u,d)),!(!p||p==="ignore")){if(p===!0||p==="error")throw new Ci("LaTeX-incompatible input and strict mode is set to 'error': "+(u+" ["+s+"]"),d);p==="warn"?typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(u+" ["+s+"]")):typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+p+"': "+u+" ["+s+"]"))}}useStrictBehavior(s,u,d){var p=this.strict;if(typeof p=="function")try{p=p(s,u,d)}catch{p="error"}return!p||p==="ignore"?!1:p===!0||p==="error"?!0:p==="warn"?(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(u+" ["+s+"]")),!1):(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+p+"': "+u+" ["+s+"]")),!1)}isTrusted(s){s.url&&!s.protocol&&(s.protocol=Ya.protocolFromUrl(s.url));var u=typeof this.trust=="function"?this.trust(s):this.trust;return!!u}}class E9{constructor(s,u,d){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=s,this.size=u,this.cramped=d}sup(){return G4[Hqt[this.id]]}sub(){return G4[Vqt[this.id]]}fracNum(){return G4[Uqt[this.id]]}fracDen(){return G4[Gqt[this.id]]}cramp(){return G4[Kqt[this.id]]}text(){return G4[Wqt[this.id]]}isTight(){return this.size>=2}}var X2e=0,iQ=1,DD=2,L7=3,aR=4,Pv=5,ID=6,Mp=7,G4=[new E9(X2e,0,!1),new E9(iQ,0,!0),new E9(DD,1,!1),new E9(L7,1,!0),new E9(aR,2,!1),new E9(Pv,2,!0),new E9(ID,3,!1),new E9(Mp,3,!0)],Hqt=[aR,Pv,aR,Pv,ID,Mp,ID,Mp],Vqt=[Pv,Pv,Pv,Pv,Mp,Mp,Mp,Mp],Uqt=[DD,L7,aR,Pv,ID,Mp,ID,Mp],Gqt=[L7,L7,Pv,Pv,Mp,Mp,Mp,Mp],Kqt=[iQ,iQ,L7,L7,Pv,Pv,Mp,Mp],Wqt=[X2e,iQ,DD,L7,DD,L7,DD,L7],Ta={DISPLAY:G4[X2e],TEXT:G4[DD],SCRIPT:G4[aR],SCRIPTSCRIPT:G4[ID]},Q2e=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];function Yqt(i){for(var s=0;s=p[0]&&i<=p[1])return u.name}return null}var sQ=[];Q2e.forEach(i=>i.blocks.forEach(s=>sQ.push(...s)));function K$e(i){for(var s=0;s=sQ[s]&&i<=sQ[s+1])return!0;return!1}var OD=80,Xqt=function(s,u){return"M95,"+(622+s+u)+` +"use strict";var __esbuild_esm_mermaid=(()=>{var ixe=Object.create;var Z1=Object.defineProperty;var axe=Object.getOwnPropertyDescriptor;var sxe=Object.getOwnPropertyNames;var oxe=Object.getPrototypeOf,lxe=Object.prototype.hasOwnProperty;var o=(t,e)=>Z1(t,"name",{value:e,configurable:!0});var M=(t,e)=>()=>(t&&(e=t(t=0)),e);var Ei=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),vr=(t,e)=>{for(var r in e)Z1(t,r,{get:e[r],enumerable:!0})},$b=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of sxe(e))!lxe.call(t,i)&&i!==r&&Z1(t,i,{get:()=>e[i],enumerable:!(n=axe(e,i))||n.enumerable});return t},Sr=(t,e,r)=>($b(t,e,"default"),r&&$b(r,e,"default")),Ji=(t,e,r)=>(r=t!=null?ixe(oxe(t)):{},$b(e||!t||!t.__esModule?Z1(r,"default",{value:t,enumerable:!0}):r,t)),cxe=t=>$b(Z1({},"__esModule",{value:!0}),t);var Vb=Ei((_S,LS)=>{"use strict";(function(t,e){typeof _S=="object"&&typeof LS<"u"?LS.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs=e()})(_S,function(){"use strict";var t=1e3,e=6e4,r=36e5,n="millisecond",i="second",a="minute",s="hour",l="day",u="week",h="month",f="quarter",d="year",p="date",m="Invalid Date",g=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,y=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,v={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:o(function(k){var R=["th","st","nd","rd"],C=k%100;return"["+k+(R[(C-20)%10]||R[C]||R[0])+"]"},"ordinal")},x=o(function(k,R,C){var O=String(k);return!O||O.length>=R?k:""+Array(R+1-O.length).join(C)+k},"m"),b={s:x,z:o(function(k){var R=-k.utcOffset(),C=Math.abs(R),O=Math.floor(C/60),N=C%60;return(R<=0?"+":"-")+x(O,2,"0")+":"+x(N,2,"0")},"z"),m:o(function k(R,C){if(R.date()1)return k(F[0])}else{var B=R.name;_[B]=R,N=B}return!O&&N&&(w=N),N||!O&&w},"t"),S=o(function(k,R){if(E(k))return k.clone();var C=typeof R=="object"?R:{};return C.date=k,C.args=arguments,new I(C)},"O"),A=b;A.l=L,A.i=E,A.w=function(k,R){return S(k,{locale:R.$L,utc:R.$u,x:R.$x,$offset:R.$offset})};var I=function(){function k(C){this.$L=L(C.locale,null,!0),this.parse(C),this.$x=this.$x||C.x||{},this[T]=!0}o(k,"M");var R=k.prototype;return R.parse=function(C){this.$d=function(O){var N=O.date,P=O.utc;if(N===null)return new Date(NaN);if(A.u(N))return new Date;if(N instanceof Date)return new Date(N);if(typeof N=="string"&&!/Z$/i.test(N)){var F=N.match(g);if(F){var B=F[2]-1||0,G=(F[7]||"0").substring(0,3);return P?new Date(Date.UTC(F[1],B,F[3]||1,F[4]||0,F[5]||0,F[6]||0,G)):new Date(F[1],B,F[3]||1,F[4]||0,F[5]||0,F[6]||0,G)}}return new Date(N)}(C),this.init()},R.init=function(){var C=this.$d;this.$y=C.getFullYear(),this.$M=C.getMonth(),this.$D=C.getDate(),this.$W=C.getDay(),this.$H=C.getHours(),this.$m=C.getMinutes(),this.$s=C.getSeconds(),this.$ms=C.getMilliseconds()},R.$utils=function(){return A},R.isValid=function(){return this.$d.toString()!==m},R.isSame=function(C,O){var N=S(C);return this.startOf(O)<=N&&N<=this.endOf(O)},R.isAfter=function(C,O){return S(C){"use strict";IF=Ji(Vb(),1),au={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},Y={trace:o((...t)=>{},"trace"),debug:o((...t)=>{},"debug"),info:o((...t)=>{},"info"),warn:o((...t)=>{},"warn"),error:o((...t)=>{},"error"),fatal:o((...t)=>{},"fatal")},J1=o(function(t="fatal"){let e=au.fatal;typeof t=="string"?t.toLowerCase()in au&&(e=au[t]):typeof t=="number"&&(e=t),Y.trace=()=>{},Y.debug=()=>{},Y.info=()=>{},Y.warn=()=>{},Y.error=()=>{},Y.fatal=()=>{},e<=au.fatal&&(Y.fatal=console.error?console.error.bind(console,Ao("FATAL"),"color: orange"):console.log.bind(console,"\x1B[35m",Ao("FATAL"))),e<=au.error&&(Y.error=console.error?console.error.bind(console,Ao("ERROR"),"color: orange"):console.log.bind(console,"\x1B[31m",Ao("ERROR"))),e<=au.warn&&(Y.warn=console.warn?console.warn.bind(console,Ao("WARN"),"color: orange"):console.log.bind(console,"\x1B[33m",Ao("WARN"))),e<=au.info&&(Y.info=console.info?console.info.bind(console,Ao("INFO"),"color: lightblue"):console.log.bind(console,"\x1B[34m",Ao("INFO"))),e<=au.debug&&(Y.debug=console.debug?console.debug.bind(console,Ao("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",Ao("DEBUG"))),e<=au.trace&&(Y.trace=console.debug?console.debug.bind(console,Ao("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",Ao("TRACE")))},"setLogLevel"),Ao=o(t=>`%c${(0,IF.default)().format("ss.SSS")} : ${t} : `,"format")});var uxe,up,DS,OF,Ub=M(()=>{"use strict";uxe=Object.freeze({left:0,top:0,width:16,height:16}),up=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),DS=Object.freeze({...uxe,...up}),OF=Object.freeze({...DS,body:"",hidden:!1})});var hxe,PF,BF=M(()=>{"use strict";Ub();hxe=Object.freeze({width:null,height:null}),PF=Object.freeze({...hxe,...up})});var Hb,NS,Wb,FF=M(()=>{"use strict";Hb=/^[a-z0-9]+(-[a-z0-9]+)*$/,NS=o((t,e,r,n="")=>{let i=t.split(":");if(t.slice(0,1)==="@"){if(i.length<2||i.length>3)return null;n=i.shift().slice(1)}if(i.length>3||!i.length)return null;if(i.length>1){let l=i.pop(),u=i.pop(),h={provider:i.length>0?i[0]:n,prefix:u,name:l};return e&&!Wb(h)?null:h}let a=i[0],s=a.split("-");if(s.length>1){let l={provider:n,prefix:s.shift(),name:s.join("-")};return e&&!Wb(l)?null:l}if(r&&n===""){let l={provider:n,prefix:"",name:a};return e&&!Wb(l,r)?null:l}return null},"stringToIcon"),Wb=o((t,e)=>t?!!((t.provider===""||t.provider.match(Hb))&&(e&&t.prefix===""||t.prefix.match(Hb))&&t.name.match(Hb)):!1,"validateIconName")});function zF(t,e){let r={};!t.hFlip!=!e.hFlip&&(r.hFlip=!0),!t.vFlip!=!e.vFlip&&(r.vFlip=!0);let n=((t.rotate||0)+(e.rotate||0))%4;return n&&(r.rotate=n),r}var GF=M(()=>{"use strict";o(zF,"mergeIconTransformations")});function RS(t,e){let r=zF(t,e);for(let n in OF)n in up?n in t&&!(n in r)&&(r[n]=up[n]):n in e?r[n]=e[n]:n in t&&(r[n]=t[n]);return r}var $F=M(()=>{"use strict";Ub();GF();o(RS,"mergeIconData")});function VF(t,e){let r=t.icons,n=t.aliases||Object.create(null),i=Object.create(null);function a(s){if(r[s])return i[s]=[];if(!(s in i)){i[s]=null;let l=n[s]&&n[s].parent,u=l&&a(l);u&&(i[s]=[l].concat(u))}return i[s]}return o(a,"resolve"),(e||Object.keys(r).concat(Object.keys(n))).forEach(a),i}var UF=M(()=>{"use strict";o(VF,"getIconsTree")});function HF(t,e,r){let n=t.icons,i=t.aliases||Object.create(null),a={};function s(l){a=RS(n[l]||i[l],a)}return o(s,"parse"),s(e),r.forEach(s),RS(t,a)}function MS(t,e){if(t.icons[e])return HF(t,e,[]);let r=VF(t,[e])[e];return r?HF(t,e,r):null}var WF=M(()=>{"use strict";$F();UF();o(HF,"internalGetIconData");o(MS,"getIconData")});function IS(t,e,r){if(e===1)return t;if(r=r||100,typeof t=="number")return Math.ceil(t*e*r)/r;if(typeof t!="string")return t;let n=t.split(fxe);if(n===null||!n.length)return t;let i=[],a=n.shift(),s=dxe.test(a);for(;;){if(s){let l=parseFloat(a);isNaN(l)?i.push(a):i.push(Math.ceil(l*e*r)/r)}else i.push(a);if(a=n.shift(),a===void 0)return i.join("");s=!s}}var fxe,dxe,YF=M(()=>{"use strict";fxe=/(-?[0-9.]*[0-9]+[0-9.]*)/g,dxe=/^-?[0-9.]*[0-9]+[0-9.]*$/g;o(IS,"calculateSize")});function pxe(t,e="defs"){let r="",n=t.indexOf("<"+e);for(;n>=0;){let i=t.indexOf(">",n),a=t.indexOf("",a);if(s===-1)break;r+=t.slice(i+1,a).trim(),t=t.slice(0,n).trim()+t.slice(s+1)}return{defs:r,content:t}}function mxe(t,e){return t?""+t+""+e:e}function qF(t,e,r){let n=pxe(t);return mxe(n.defs,e+n.content+r)}var XF=M(()=>{"use strict";o(pxe,"splitSVGDefs");o(mxe,"mergeDefsAndContent");o(qF,"wrapSVGContent")});function OS(t,e){let r={...DS,...t},n={...PF,...e},i={left:r.left,top:r.top,width:r.width,height:r.height},a=r.body;[r,n].forEach(y=>{let v=[],x=y.hFlip,b=y.vFlip,w=y.rotate;x?b?w+=2:(v.push("translate("+(i.width+i.left).toString()+" "+(0-i.top).toString()+")"),v.push("scale(-1 1)"),i.top=i.left=0):b&&(v.push("translate("+(0-i.left).toString()+" "+(i.height+i.top).toString()+")"),v.push("scale(1 -1)"),i.top=i.left=0);let _;switch(w<0&&(w-=Math.floor(w/4)*4),w=w%4,w){case 1:_=i.height/2+i.top,v.unshift("rotate(90 "+_.toString()+" "+_.toString()+")");break;case 2:v.unshift("rotate(180 "+(i.width/2+i.left).toString()+" "+(i.height/2+i.top).toString()+")");break;case 3:_=i.width/2+i.left,v.unshift("rotate(-90 "+_.toString()+" "+_.toString()+")");break}w%2===1&&(i.left!==i.top&&(_=i.left,i.left=i.top,i.top=_),i.width!==i.height&&(_=i.width,i.width=i.height,i.height=_)),v.length&&(a=qF(a,'',""))});let s=n.width,l=n.height,u=i.width,h=i.height,f,d;s===null?(d=l===null?"1em":l==="auto"?h:l,f=IS(d,u/h)):(f=s==="auto"?u:s,d=l===null?IS(f,h/u):l==="auto"?h:l);let p={},m=o((y,v)=>{gxe(v)||(p[y]=v.toString())},"setAttr");m("width",f),m("height",d);let g=[i.left,i.top,u,h];return p.viewBox=g.join(" "),{attributes:p,viewBox:g,body:a}}var gxe,jF=M(()=>{"use strict";Ub();BF();YF();XF();gxe=o(t=>t==="unset"||t==="undefined"||t==="none","isUnsetKeyword");o(OS,"iconToSVG")});function PS(t,e=vxe){let r=[],n;for(;n=yxe.exec(t);)r.push(n[1]);if(!r.length)return t;let i="suffix"+(Math.random()*16777216|Date.now()).toString(16);return r.forEach(a=>{let s=typeof e=="function"?e(a):e+(xxe++).toString(),l=a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");t=t.replace(new RegExp('([#;"])('+l+')([")]|\\.[a-z])',"g"),"$1"+s+i+"$3")}),t=t.replace(new RegExp(i,"g"),""),t}var yxe,vxe,xxe,KF=M(()=>{"use strict";yxe=/\sid="(\S+)"/g,vxe="IconifyId"+Date.now().toString(16)+(Math.random()*16777216|0).toString(16),xxe=0;o(PS,"replaceIDs")});function BS(t,e){let r=t.indexOf("xlink:")===-1?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(let n in e)r+=" "+n+'="'+e[n]+'"';return'"+t+""}var QF=M(()=>{"use strict";o(BS,"iconToHTML")});var JF=Ei((Pat,ZF)=>{"use strict";var hp=1e3,fp=hp*60,dp=fp*60,jf=dp*24,bxe=jf*7,wxe=jf*365.25;ZF.exports=function(t,e){e=e||{};var r=typeof t;if(r==="string"&&t.length>0)return Txe(t);if(r==="number"&&isFinite(t))return e.long?Exe(t):kxe(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))};function Txe(t){if(t=String(t),!(t.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(e){var r=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return r*wxe;case"weeks":case"week":case"w":return r*bxe;case"days":case"day":case"d":return r*jf;case"hours":case"hour":case"hrs":case"hr":case"h":return r*dp;case"minutes":case"minute":case"mins":case"min":case"m":return r*fp;case"seconds":case"second":case"secs":case"sec":case"s":return r*hp;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}o(Txe,"parse");function kxe(t){var e=Math.abs(t);return e>=jf?Math.round(t/jf)+"d":e>=dp?Math.round(t/dp)+"h":e>=fp?Math.round(t/fp)+"m":e>=hp?Math.round(t/hp)+"s":t+"ms"}o(kxe,"fmtShort");function Exe(t){var e=Math.abs(t);return e>=jf?Yb(t,e,jf,"day"):e>=dp?Yb(t,e,dp,"hour"):e>=fp?Yb(t,e,fp,"minute"):e>=hp?Yb(t,e,hp,"second"):t+" ms"}o(Exe,"fmtLong");function Yb(t,e,r,n){var i=e>=r*1.5;return Math.round(t/r)+" "+n+(i?"s":"")}o(Yb,"plural")});var tz=Ei((Fat,ez)=>{"use strict";function Sxe(t){r.debug=r,r.default=r,r.coerce=u,r.disable=a,r.enable=i,r.enabled=s,r.humanize=JF(),r.destroy=h,Object.keys(t).forEach(f=>{r[f]=t[f]}),r.names=[],r.skips=[],r.formatters={};function e(f){let d=0;for(let p=0;p{if(E==="%%")return"%";_++;let S=r.formatters[L];if(typeof S=="function"){let A=v[_];E=S.call(x,A),v.splice(_,1),_--}return E}),r.formatArgs.call(x,v),(x.log||r.log).apply(x,v)}return o(y,"debug"),y.namespace=f,y.useColors=r.useColors(),y.color=r.selectColor(f),y.extend=n,y.destroy=r.destroy,Object.defineProperty(y,"enabled",{enumerable:!0,configurable:!1,get:o(()=>p!==null?p:(m!==r.namespaces&&(m=r.namespaces,g=r.enabled(f)),g),"get"),set:o(v=>{p=v},"set")}),typeof r.init=="function"&&r.init(y),y}o(r,"createDebug");function n(f,d){let p=r(this.namespace+(typeof d>"u"?":":d)+f);return p.log=this.log,p}o(n,"extend");function i(f){r.save(f),r.namespaces=f,r.names=[],r.skips=[];let d,p=(typeof f=="string"?f:"").split(/[\s,]+/),m=p.length;for(d=0;d"-"+d)].join(",");return r.enable(""),f}o(a,"disable");function s(f){if(f[f.length-1]==="*")return!0;let d,p;for(d=0,p=r.skips.length;d{"use strict";Qs.formatArgs=Axe;Qs.save=_xe;Qs.load=Lxe;Qs.useColors=Cxe;Qs.storage=Dxe();Qs.destroy=(()=>{let t=!1;return()=>{t||(t=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();Qs.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function Cxe(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let t;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(t=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(t[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}o(Cxe,"useColors");function Axe(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+qb.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;t.splice(1,0,e,"color: inherit");let r=0,n=0;t[0].replace(/%[a-zA-Z%]/g,i=>{i!=="%%"&&(r++,i==="%c"&&(n=r))}),t.splice(n,0,e)}o(Axe,"formatArgs");Qs.log=console.debug||console.log||(()=>{});function _xe(t){try{t?Qs.storage.setItem("debug",t):Qs.storage.removeItem("debug")}catch{}}o(_xe,"save");function Lxe(){let t;try{t=Qs.storage.getItem("debug")}catch{}return!t&&typeof process<"u"&&"env"in process&&(t=process.env.DEBUG),t}o(Lxe,"load");function Dxe(){try{return localStorage}catch{}}o(Dxe,"localstorage");qb.exports=tz()(Qs);var{formatters:Nxe}=qb.exports;Nxe.j=function(t){try{return JSON.stringify(t)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var $at,nz=M(()=>{"use strict";FF();WF();jF();KF();QF();$at=Ji(rz(),1)});var zS,FS,iz,Xb,Rxe,_o,su=M(()=>{"use strict";ut();nz();zS={body:'?',height:80,width:80},FS=new Map,iz=new Map,Xb=o(t=>{for(let e of t){if(!e.name)throw new Error('Invalid icon loader. Must have a "name" property with non-empty string value.');if(Y.debug("Registering icon pack:",e.name),"loader"in e)iz.set(e.name,e.loader);else if("icons"in e)FS.set(e.name,e.icons);else throw Y.error("Invalid icon loader:",e),new Error('Invalid icon loader. Must have either "icons" or "loader" property.')}},"registerIconPacks"),Rxe=o(async(t,e)=>{let r=NS(t,!0,e!==void 0);if(!r)throw new Error(`Invalid icon name: ${t}`);let n=r.prefix||e;if(!n)throw new Error(`Icon name must contain a prefix: ${t}`);let i=FS.get(n);if(!i){let s=iz.get(n);if(!s)throw new Error(`Icon set not found: ${r.prefix}`);try{i={...await s(),prefix:n},FS.set(n,i)}catch(l){throw Y.error(l),new Error(`Failed to load icon set: ${r.prefix}`)}}let a=MS(i,r.name);if(!a)throw new Error(`Icon not found: ${t}`);return a},"getRegisteredIconData"),_o=o(async(t,e)=>{let r;try{r=await Rxe(t,e?.fallbackPrefix)}catch(a){Y.error(a),r=zS}let n=OS(r,e);return BS(PS(n.body),n.attributes)},"getIconSVG")});function jb(t){for(var e=[],r=1;r{"use strict";o(jb,"dedent")});var Kb,Kf,az,Qb=M(()=>{"use strict";Kb=/^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s,Kf=/%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,az=/\s*%%.*\n/gm});var pp,$S=M(()=>{"use strict";pp=class extends Error{static{o(this,"UnknownDiagramError")}constructor(e){super(e),this.name="UnknownDiagramError"}}});var Qf,mp,Zb,VS,sz,Zf=M(()=>{"use strict";ut();Qb();$S();Qf={},mp=o(function(t,e){t=t.replace(Kb,"").replace(Kf,"").replace(az,` +`);for(let[r,{detector:n}]of Object.entries(Qf))if(n(t,e))return r;throw new pp(`No diagram type detected matching given configuration for text: ${t}`)},"detectType"),Zb=o((...t)=>{for(let{id:e,detector:r,loader:n}of t)VS(e,r,n)},"registerLazyLoadedDiagrams"),VS=o((t,e,r)=>{Qf[t]&&Y.warn(`Detector with key ${t} already exists. Overwriting.`),Qf[t]={detector:e,loader:r},Y.debug(`Detector with key ${t} added${r?" with loader":""}`)},"addDetector"),sz=o(t=>Qf[t].loader,"getDiagramLoader")});var ey,oz,US=M(()=>{"use strict";ey=function(){var t=o(function($e,ye,X,fe){for(X=X||{},fe=$e.length;fe--;X[$e[fe]]=ye);return X},"o"),e=[1,24],r=[1,25],n=[1,26],i=[1,27],a=[1,28],s=[1,63],l=[1,64],u=[1,65],h=[1,66],f=[1,67],d=[1,68],p=[1,69],m=[1,29],g=[1,30],y=[1,31],v=[1,32],x=[1,33],b=[1,34],w=[1,35],_=[1,36],T=[1,37],E=[1,38],L=[1,39],S=[1,40],A=[1,41],I=[1,42],D=[1,43],k=[1,44],R=[1,45],C=[1,46],O=[1,47],N=[1,48],P=[1,50],F=[1,51],B=[1,52],G=[1,53],z=[1,54],W=[1,55],Z=[1,56],j=[1,57],oe=[1,58],K=[1,59],ee=[1,60],J=[14,42],H=[14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],q=[12,14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],Q=[1,82],ae=[1,83],ue=[1,84],ce=[1,85],te=[12,14,42],Ne=[12,14,33,42],se=[12,14,33,42,76,77,79,80],ke=[12,33],Re=[34,36,37,38,39,40,41,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],Ce={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,direction_tb:6,direction_bt:7,direction_rl:8,direction_lr:9,graphConfig:10,C4_CONTEXT:11,NEWLINE:12,statements:13,EOF:14,C4_CONTAINER:15,C4_COMPONENT:16,C4_DYNAMIC:17,C4_DEPLOYMENT:18,otherStatements:19,diagramStatements:20,otherStatement:21,title:22,accDescription:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,boundaryStatement:29,boundaryStartStatement:30,boundaryStopStatement:31,boundaryStart:32,LBRACE:33,ENTERPRISE_BOUNDARY:34,attributes:35,SYSTEM_BOUNDARY:36,BOUNDARY:37,CONTAINER_BOUNDARY:38,NODE:39,NODE_L:40,NODE_R:41,RBRACE:42,diagramStatement:43,PERSON:44,PERSON_EXT:45,SYSTEM:46,SYSTEM_DB:47,SYSTEM_QUEUE:48,SYSTEM_EXT:49,SYSTEM_EXT_DB:50,SYSTEM_EXT_QUEUE:51,CONTAINER:52,CONTAINER_DB:53,CONTAINER_QUEUE:54,CONTAINER_EXT:55,CONTAINER_EXT_DB:56,CONTAINER_EXT_QUEUE:57,COMPONENT:58,COMPONENT_DB:59,COMPONENT_QUEUE:60,COMPONENT_EXT:61,COMPONENT_EXT_DB:62,COMPONENT_EXT_QUEUE:63,REL:64,BIREL:65,REL_U:66,REL_D:67,REL_L:68,REL_R:69,REL_B:70,REL_INDEX:71,UPDATE_EL_STYLE:72,UPDATE_REL_STYLE:73,UPDATE_LAYOUT_CONFIG:74,attribute:75,STR:76,STR_KEY:77,STR_VALUE:78,ATTRIBUTE:79,ATTRIBUTE_EMPTY:80,$accept:0,$end:1},terminals_:{2:"error",6:"direction_tb",7:"direction_bt",8:"direction_rl",9:"direction_lr",11:"C4_CONTEXT",12:"NEWLINE",14:"EOF",15:"C4_CONTAINER",16:"C4_COMPONENT",17:"C4_DYNAMIC",18:"C4_DEPLOYMENT",22:"title",23:"accDescription",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"LBRACE",34:"ENTERPRISE_BOUNDARY",36:"SYSTEM_BOUNDARY",37:"BOUNDARY",38:"CONTAINER_BOUNDARY",39:"NODE",40:"NODE_L",41:"NODE_R",42:"RBRACE",44:"PERSON",45:"PERSON_EXT",46:"SYSTEM",47:"SYSTEM_DB",48:"SYSTEM_QUEUE",49:"SYSTEM_EXT",50:"SYSTEM_EXT_DB",51:"SYSTEM_EXT_QUEUE",52:"CONTAINER",53:"CONTAINER_DB",54:"CONTAINER_QUEUE",55:"CONTAINER_EXT",56:"CONTAINER_EXT_DB",57:"CONTAINER_EXT_QUEUE",58:"COMPONENT",59:"COMPONENT_DB",60:"COMPONENT_QUEUE",61:"COMPONENT_EXT",62:"COMPONENT_EXT_DB",63:"COMPONENT_EXT_QUEUE",64:"REL",65:"BIREL",66:"REL_U",67:"REL_D",68:"REL_L",69:"REL_R",70:"REL_B",71:"REL_INDEX",72:"UPDATE_EL_STYLE",73:"UPDATE_REL_STYLE",74:"UPDATE_LAYOUT_CONFIG",76:"STR",77:"STR_KEY",78:"STR_VALUE",79:"ATTRIBUTE",80:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[5,1],[5,1],[5,1],[5,1],[4,1],[10,4],[10,4],[10,4],[10,4],[10,4],[13,1],[13,1],[13,2],[19,1],[19,2],[19,3],[21,1],[21,1],[21,2],[21,2],[21,1],[29,3],[30,3],[30,3],[30,4],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[31,1],[20,1],[20,2],[20,3],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,1],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[35,1],[35,2],[75,1],[75,2],[75,1],[75,1]],performAction:o(function(ye,X,fe,he,ge,ne,ve){var U=ne.length-1;switch(ge){case 3:he.setDirection("TB");break;case 4:he.setDirection("BT");break;case 5:he.setDirection("RL");break;case 6:he.setDirection("LR");break;case 8:case 9:case 10:case 11:case 12:he.setC4Type(ne[U-3]);break;case 19:he.setTitle(ne[U].substring(6)),this.$=ne[U].substring(6);break;case 20:he.setAccDescription(ne[U].substring(15)),this.$=ne[U].substring(15);break;case 21:this.$=ne[U].trim(),he.setTitle(this.$);break;case 22:case 23:this.$=ne[U].trim(),he.setAccDescription(this.$);break;case 28:ne[U].splice(2,0,"ENTERPRISE"),he.addPersonOrSystemBoundary(...ne[U]),this.$=ne[U];break;case 29:ne[U].splice(2,0,"SYSTEM"),he.addPersonOrSystemBoundary(...ne[U]),this.$=ne[U];break;case 30:he.addPersonOrSystemBoundary(...ne[U]),this.$=ne[U];break;case 31:ne[U].splice(2,0,"CONTAINER"),he.addContainerBoundary(...ne[U]),this.$=ne[U];break;case 32:he.addDeploymentNode("node",...ne[U]),this.$=ne[U];break;case 33:he.addDeploymentNode("nodeL",...ne[U]),this.$=ne[U];break;case 34:he.addDeploymentNode("nodeR",...ne[U]),this.$=ne[U];break;case 35:he.popBoundaryParseStack();break;case 39:he.addPersonOrSystem("person",...ne[U]),this.$=ne[U];break;case 40:he.addPersonOrSystem("external_person",...ne[U]),this.$=ne[U];break;case 41:he.addPersonOrSystem("system",...ne[U]),this.$=ne[U];break;case 42:he.addPersonOrSystem("system_db",...ne[U]),this.$=ne[U];break;case 43:he.addPersonOrSystem("system_queue",...ne[U]),this.$=ne[U];break;case 44:he.addPersonOrSystem("external_system",...ne[U]),this.$=ne[U];break;case 45:he.addPersonOrSystem("external_system_db",...ne[U]),this.$=ne[U];break;case 46:he.addPersonOrSystem("external_system_queue",...ne[U]),this.$=ne[U];break;case 47:he.addContainer("container",...ne[U]),this.$=ne[U];break;case 48:he.addContainer("container_db",...ne[U]),this.$=ne[U];break;case 49:he.addContainer("container_queue",...ne[U]),this.$=ne[U];break;case 50:he.addContainer("external_container",...ne[U]),this.$=ne[U];break;case 51:he.addContainer("external_container_db",...ne[U]),this.$=ne[U];break;case 52:he.addContainer("external_container_queue",...ne[U]),this.$=ne[U];break;case 53:he.addComponent("component",...ne[U]),this.$=ne[U];break;case 54:he.addComponent("component_db",...ne[U]),this.$=ne[U];break;case 55:he.addComponent("component_queue",...ne[U]),this.$=ne[U];break;case 56:he.addComponent("external_component",...ne[U]),this.$=ne[U];break;case 57:he.addComponent("external_component_db",...ne[U]),this.$=ne[U];break;case 58:he.addComponent("external_component_queue",...ne[U]),this.$=ne[U];break;case 60:he.addRel("rel",...ne[U]),this.$=ne[U];break;case 61:he.addRel("birel",...ne[U]),this.$=ne[U];break;case 62:he.addRel("rel_u",...ne[U]),this.$=ne[U];break;case 63:he.addRel("rel_d",...ne[U]),this.$=ne[U];break;case 64:he.addRel("rel_l",...ne[U]),this.$=ne[U];break;case 65:he.addRel("rel_r",...ne[U]),this.$=ne[U];break;case 66:he.addRel("rel_b",...ne[U]),this.$=ne[U];break;case 67:ne[U].splice(0,1),he.addRel("rel",...ne[U]),this.$=ne[U];break;case 68:he.updateElStyle("update_el_style",...ne[U]),this.$=ne[U];break;case 69:he.updateRelStyle("update_rel_style",...ne[U]),this.$=ne[U];break;case 70:he.updateLayoutConfig("update_layout_config",...ne[U]),this.$=ne[U];break;case 71:this.$=[ne[U]];break;case 72:ne[U].unshift(ne[U-1]),this.$=ne[U];break;case 73:case 75:this.$=ne[U].trim();break;case 74:let Te={};Te[ne[U-1].trim()]=ne[U].trim(),this.$=Te;break;case 76:this.$="";break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],7:[1,6],8:[1,7],9:[1,8],10:4,11:[1,9],15:[1,10],16:[1,11],17:[1,12],18:[1,13]},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,7]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{12:[1,14]},{12:[1,15]},{12:[1,16]},{12:[1,17]},{12:[1,18]},{13:19,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:_,52:T,53:E,54:L,55:S,56:A,57:I,58:D,59:k,60:R,61:C,62:O,63:N,64:P,65:F,66:B,67:G,68:z,69:W,70:Z,71:j,72:oe,73:K,74:ee},{13:70,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:_,52:T,53:E,54:L,55:S,56:A,57:I,58:D,59:k,60:R,61:C,62:O,63:N,64:P,65:F,66:B,67:G,68:z,69:W,70:Z,71:j,72:oe,73:K,74:ee},{13:71,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:_,52:T,53:E,54:L,55:S,56:A,57:I,58:D,59:k,60:R,61:C,62:O,63:N,64:P,65:F,66:B,67:G,68:z,69:W,70:Z,71:j,72:oe,73:K,74:ee},{13:72,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:_,52:T,53:E,54:L,55:S,56:A,57:I,58:D,59:k,60:R,61:C,62:O,63:N,64:P,65:F,66:B,67:G,68:z,69:W,70:Z,71:j,72:oe,73:K,74:ee},{13:73,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:_,52:T,53:E,54:L,55:S,56:A,57:I,58:D,59:k,60:R,61:C,62:O,63:N,64:P,65:F,66:B,67:G,68:z,69:W,70:Z,71:j,72:oe,73:K,74:ee},{14:[1,74]},t(J,[2,13],{43:23,29:49,30:61,32:62,20:75,34:s,36:l,37:u,38:h,39:f,40:d,41:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:_,52:T,53:E,54:L,55:S,56:A,57:I,58:D,59:k,60:R,61:C,62:O,63:N,64:P,65:F,66:B,67:G,68:z,69:W,70:Z,71:j,72:oe,73:K,74:ee}),t(J,[2,14]),t(H,[2,16],{12:[1,76]}),t(J,[2,36],{12:[1,77]}),t(q,[2,19]),t(q,[2,20]),{25:[1,78]},{27:[1,79]},t(q,[2,23]),{35:80,75:81,76:Q,77:ae,79:ue,80:ce},{35:86,75:81,76:Q,77:ae,79:ue,80:ce},{35:87,75:81,76:Q,77:ae,79:ue,80:ce},{35:88,75:81,76:Q,77:ae,79:ue,80:ce},{35:89,75:81,76:Q,77:ae,79:ue,80:ce},{35:90,75:81,76:Q,77:ae,79:ue,80:ce},{35:91,75:81,76:Q,77:ae,79:ue,80:ce},{35:92,75:81,76:Q,77:ae,79:ue,80:ce},{35:93,75:81,76:Q,77:ae,79:ue,80:ce},{35:94,75:81,76:Q,77:ae,79:ue,80:ce},{35:95,75:81,76:Q,77:ae,79:ue,80:ce},{35:96,75:81,76:Q,77:ae,79:ue,80:ce},{35:97,75:81,76:Q,77:ae,79:ue,80:ce},{35:98,75:81,76:Q,77:ae,79:ue,80:ce},{35:99,75:81,76:Q,77:ae,79:ue,80:ce},{35:100,75:81,76:Q,77:ae,79:ue,80:ce},{35:101,75:81,76:Q,77:ae,79:ue,80:ce},{35:102,75:81,76:Q,77:ae,79:ue,80:ce},{35:103,75:81,76:Q,77:ae,79:ue,80:ce},{35:104,75:81,76:Q,77:ae,79:ue,80:ce},t(te,[2,59]),{35:105,75:81,76:Q,77:ae,79:ue,80:ce},{35:106,75:81,76:Q,77:ae,79:ue,80:ce},{35:107,75:81,76:Q,77:ae,79:ue,80:ce},{35:108,75:81,76:Q,77:ae,79:ue,80:ce},{35:109,75:81,76:Q,77:ae,79:ue,80:ce},{35:110,75:81,76:Q,77:ae,79:ue,80:ce},{35:111,75:81,76:Q,77:ae,79:ue,80:ce},{35:112,75:81,76:Q,77:ae,79:ue,80:ce},{35:113,75:81,76:Q,77:ae,79:ue,80:ce},{35:114,75:81,76:Q,77:ae,79:ue,80:ce},{35:115,75:81,76:Q,77:ae,79:ue,80:ce},{20:116,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:_,52:T,53:E,54:L,55:S,56:A,57:I,58:D,59:k,60:R,61:C,62:O,63:N,64:P,65:F,66:B,67:G,68:z,69:W,70:Z,71:j,72:oe,73:K,74:ee},{12:[1,118],33:[1,117]},{35:119,75:81,76:Q,77:ae,79:ue,80:ce},{35:120,75:81,76:Q,77:ae,79:ue,80:ce},{35:121,75:81,76:Q,77:ae,79:ue,80:ce},{35:122,75:81,76:Q,77:ae,79:ue,80:ce},{35:123,75:81,76:Q,77:ae,79:ue,80:ce},{35:124,75:81,76:Q,77:ae,79:ue,80:ce},{35:125,75:81,76:Q,77:ae,79:ue,80:ce},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},t(J,[2,15]),t(H,[2,17],{21:22,19:130,22:e,23:r,24:n,26:i,28:a}),t(J,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:e,23:r,24:n,26:i,28:a,34:s,36:l,37:u,38:h,39:f,40:d,41:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:_,52:T,53:E,54:L,55:S,56:A,57:I,58:D,59:k,60:R,61:C,62:O,63:N,64:P,65:F,66:B,67:G,68:z,69:W,70:Z,71:j,72:oe,73:K,74:ee}),t(q,[2,21]),t(q,[2,22]),t(te,[2,39]),t(Ne,[2,71],{75:81,35:132,76:Q,77:ae,79:ue,80:ce}),t(se,[2,73]),{78:[1,133]},t(se,[2,75]),t(se,[2,76]),t(te,[2,40]),t(te,[2,41]),t(te,[2,42]),t(te,[2,43]),t(te,[2,44]),t(te,[2,45]),t(te,[2,46]),t(te,[2,47]),t(te,[2,48]),t(te,[2,49]),t(te,[2,50]),t(te,[2,51]),t(te,[2,52]),t(te,[2,53]),t(te,[2,54]),t(te,[2,55]),t(te,[2,56]),t(te,[2,57]),t(te,[2,58]),t(te,[2,60]),t(te,[2,61]),t(te,[2,62]),t(te,[2,63]),t(te,[2,64]),t(te,[2,65]),t(te,[2,66]),t(te,[2,67]),t(te,[2,68]),t(te,[2,69]),t(te,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},t(ke,[2,28]),t(ke,[2,29]),t(ke,[2,30]),t(ke,[2,31]),t(ke,[2,32]),t(ke,[2,33]),t(ke,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},t(H,[2,18]),t(J,[2,38]),t(Ne,[2,72]),t(se,[2,74]),t(te,[2,24]),t(te,[2,35]),t(Re,[2,25]),t(Re,[2,26],{12:[1,138]}),t(Re,[2,27])],defaultActions:{2:[2,1],3:[2,2],4:[2,7],5:[2,3],6:[2,4],7:[2,5],8:[2,6],74:[2,8],126:[2,9],127:[2,10],128:[2,11],129:[2,12]},parseError:o(function(ye,X){if(X.recoverable)this.trace(ye);else{var fe=new Error(ye);throw fe.hash=X,fe}},"parseError"),parse:o(function(ye){var X=this,fe=[0],he=[],ge=[null],ne=[],ve=this.table,U="",Te=0,ie=0,Ee=0,Ae=2,Ge=1,Be=ne.slice.call(arguments,1),me=Object.create(this.lexer),He={yy:{}};for(var Oe in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Oe)&&(He.yy[Oe]=this.yy[Oe]);me.setInput(ye,He.yy),He.yy.lexer=me,He.yy.parser=this,typeof me.yylloc>"u"&&(me.yylloc={});var et=me.yylloc;ne.push(et);var bt=me.options&&me.options.ranges;typeof He.yy.parseError=="function"?this.parseError=He.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function kt(Bt){fe.length=fe.length-2*Bt,ge.length=ge.length-Bt,ne.length=ne.length-Bt}o(kt,"popStack");function vt(){var Bt;return Bt=he.pop()||me.lex()||Ge,typeof Bt!="number"&&(Bt instanceof Array&&(he=Bt,Bt=he.pop()),Bt=X.symbols_[Bt]||Bt),Bt}o(vt,"lex");for(var rt,yt,Ue,tt,ht,Et,er={},dt,Je,ct,Ct;;){if(Ue=fe[fe.length-1],this.defaultActions[Ue]?tt=this.defaultActions[Ue]:((rt===null||typeof rt>"u")&&(rt=vt()),tt=ve[Ue]&&ve[Ue][rt]),typeof tt>"u"||!tt.length||!tt[0]){var pt="";Ct=[];for(dt in ve[Ue])this.terminals_[dt]&&dt>Ae&&Ct.push("'"+this.terminals_[dt]+"'");me.showPosition?pt="Parse error on line "+(Te+1)+`: +`+me.showPosition()+` +Expecting `+Ct.join(", ")+", got '"+(this.terminals_[rt]||rt)+"'":pt="Parse error on line "+(Te+1)+": Unexpected "+(rt==Ge?"end of input":"'"+(this.terminals_[rt]||rt)+"'"),this.parseError(pt,{text:me.match,token:this.terminals_[rt]||rt,line:me.yylineno,loc:et,expected:Ct})}if(tt[0]instanceof Array&&tt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Ue+", token: "+rt);switch(tt[0]){case 1:fe.push(rt),ge.push(me.yytext),ne.push(me.yylloc),fe.push(tt[1]),rt=null,yt?(rt=yt,yt=null):(ie=me.yyleng,U=me.yytext,Te=me.yylineno,et=me.yylloc,Ee>0&&Ee--);break;case 2:if(Je=this.productions_[tt[1]][1],er.$=ge[ge.length-Je],er._$={first_line:ne[ne.length-(Je||1)].first_line,last_line:ne[ne.length-1].last_line,first_column:ne[ne.length-(Je||1)].first_column,last_column:ne[ne.length-1].last_column},bt&&(er._$.range=[ne[ne.length-(Je||1)].range[0],ne[ne.length-1].range[1]]),Et=this.performAction.apply(er,[U,ie,Te,He.yy,tt[1],ge,ne].concat(Be)),typeof Et<"u")return Et;Je&&(fe=fe.slice(0,-1*Je*2),ge=ge.slice(0,-1*Je),ne=ne.slice(0,-1*Je)),fe.push(this.productions_[tt[1]][0]),ge.push(er.$),ne.push(er._$),ct=ve[fe[fe.length-2]][fe[fe.length-1]],fe.push(ct);break;case 3:return!0}}return!0},"parse")},Pe=function(){var $e={EOF:1,parseError:o(function(X,fe){if(this.yy.parser)this.yy.parser.parseError(X,fe);else throw new Error(X)},"parseError"),setInput:o(function(ye,X){return this.yy=X||this.yy||{},this._input=ye,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var ye=this._input[0];this.yytext+=ye,this.yyleng++,this.offset++,this.match+=ye,this.matched+=ye;var X=ye.match(/(?:\r\n?|\n).*/g);return X?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),ye},"input"),unput:o(function(ye){var X=ye.length,fe=ye.split(/(?:\r\n?|\n)/g);this._input=ye+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-X),this.offset-=X;var he=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),fe.length-1&&(this.yylineno-=fe.length-1);var ge=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:fe?(fe.length===he.length?this.yylloc.first_column:0)+he[he.length-fe.length].length-fe[0].length:this.yylloc.first_column-X},this.options.ranges&&(this.yylloc.range=[ge[0],ge[0]+this.yyleng-X]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(ye){this.unput(this.match.slice(ye))},"less"),pastInput:o(function(){var ye=this.matched.substr(0,this.matched.length-this.match.length);return(ye.length>20?"...":"")+ye.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var ye=this.match;return ye.length<20&&(ye+=this._input.substr(0,20-ye.length)),(ye.substr(0,20)+(ye.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var ye=this.pastInput(),X=new Array(ye.length+1).join("-");return ye+this.upcomingInput()+` +`+X+"^"},"showPosition"),test_match:o(function(ye,X){var fe,he,ge;if(this.options.backtrack_lexer&&(ge={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(ge.yylloc.range=this.yylloc.range.slice(0))),he=ye[0].match(/(?:\r\n?|\n).*/g),he&&(this.yylineno+=he.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:he?he[he.length-1].length-he[he.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+ye[0].length},this.yytext+=ye[0],this.match+=ye[0],this.matches=ye,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(ye[0].length),this.matched+=ye[0],fe=this.performAction.call(this,this.yy,this,X,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),fe)return fe;if(this._backtrack){for(var ne in ge)this[ne]=ge[ne];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var ye,X,fe,he;this._more||(this.yytext="",this.match="");for(var ge=this._currentRules(),ne=0;neX[0].length)){if(X=fe,he=ne,this.options.backtrack_lexer){if(ye=this.test_match(fe,ge[ne]),ye!==!1)return ye;if(this._backtrack){X=!1;continue}else return!1}else if(!this.options.flex)break}return X?(ye=this.test_match(X,ge[he]),ye!==!1?ye:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var X=this.next();return X||this.lex()},"lex"),begin:o(function(X){this.conditionStack.push(X)},"begin"),popState:o(function(){var X=this.conditionStack.length-1;return X>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(X){return X=this.conditionStack.length-1-Math.abs(X||0),X>=0?this.conditionStack[X]:"INITIAL"},"topState"),pushState:o(function(X){this.begin(X)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(X,fe,he,ge){var ne=ge;switch(he){case 0:return 6;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 22;case 5:return 23;case 6:return this.begin("acc_title"),24;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),26;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:break;case 14:c;break;case 15:return 12;case 16:break;case 17:return 11;case 18:return 15;case 19:return 16;case 20:return 17;case 21:return 18;case 22:return this.begin("person_ext"),45;break;case 23:return this.begin("person"),44;break;case 24:return this.begin("system_ext_queue"),51;break;case 25:return this.begin("system_ext_db"),50;break;case 26:return this.begin("system_ext"),49;break;case 27:return this.begin("system_queue"),48;break;case 28:return this.begin("system_db"),47;break;case 29:return this.begin("system"),46;break;case 30:return this.begin("boundary"),37;break;case 31:return this.begin("enterprise_boundary"),34;break;case 32:return this.begin("system_boundary"),36;break;case 33:return this.begin("container_ext_queue"),57;break;case 34:return this.begin("container_ext_db"),56;break;case 35:return this.begin("container_ext"),55;break;case 36:return this.begin("container_queue"),54;break;case 37:return this.begin("container_db"),53;break;case 38:return this.begin("container"),52;break;case 39:return this.begin("container_boundary"),38;break;case 40:return this.begin("component_ext_queue"),63;break;case 41:return this.begin("component_ext_db"),62;break;case 42:return this.begin("component_ext"),61;break;case 43:return this.begin("component_queue"),60;break;case 44:return this.begin("component_db"),59;break;case 45:return this.begin("component"),58;break;case 46:return this.begin("node"),39;break;case 47:return this.begin("node"),39;break;case 48:return this.begin("node_l"),40;break;case 49:return this.begin("node_r"),41;break;case 50:return this.begin("rel"),64;break;case 51:return this.begin("birel"),65;break;case 52:return this.begin("rel_u"),66;break;case 53:return this.begin("rel_u"),66;break;case 54:return this.begin("rel_d"),67;break;case 55:return this.begin("rel_d"),67;break;case 56:return this.begin("rel_l"),68;break;case 57:return this.begin("rel_l"),68;break;case 58:return this.begin("rel_r"),69;break;case 59:return this.begin("rel_r"),69;break;case 60:return this.begin("rel_b"),70;break;case 61:return this.begin("rel_index"),71;break;case 62:return this.begin("update_el_style"),72;break;case 63:return this.begin("update_rel_style"),73;break;case 64:return this.begin("update_layout_config"),74;break;case 65:return"EOF_IN_STRUCT";case 66:return this.begin("attribute"),"ATTRIBUTE_EMPTY";break;case 67:this.begin("attribute");break;case 68:this.popState(),this.popState();break;case 69:return 80;case 70:break;case 71:return 80;case 72:this.begin("string");break;case 73:this.popState();break;case 74:return"STR";case 75:this.begin("string_kv");break;case 76:return this.begin("string_kv_key"),"STR_KEY";break;case 77:this.popState(),this.begin("string_kv_value");break;case 78:return"STR_VALUE";case 79:this.popState(),this.popState();break;case 80:return"STR";case 81:return"LBRACE";case 82:return"RBRACE";case 83:return"SPACE";case 84:return"EOL";case 85:return 14}},"anonymous"),rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:title\s[^#\n;]+)/,/^(?:accDescription\s[^#\n;]+)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:C4Context\b)/,/^(?:C4Container\b)/,/^(?:C4Component\b)/,/^(?:C4Dynamic\b)/,/^(?:C4Deployment\b)/,/^(?:Person_Ext\b)/,/^(?:Person\b)/,/^(?:SystemQueue_Ext\b)/,/^(?:SystemDb_Ext\b)/,/^(?:System_Ext\b)/,/^(?:SystemQueue\b)/,/^(?:SystemDb\b)/,/^(?:System\b)/,/^(?:Boundary\b)/,/^(?:Enterprise_Boundary\b)/,/^(?:System_Boundary\b)/,/^(?:ContainerQueue_Ext\b)/,/^(?:ContainerDb_Ext\b)/,/^(?:Container_Ext\b)/,/^(?:ContainerQueue\b)/,/^(?:ContainerDb\b)/,/^(?:Container\b)/,/^(?:Container_Boundary\b)/,/^(?:ComponentQueue_Ext\b)/,/^(?:ComponentDb_Ext\b)/,/^(?:Component_Ext\b)/,/^(?:ComponentQueue\b)/,/^(?:ComponentDb\b)/,/^(?:Component\b)/,/^(?:Deployment_Node\b)/,/^(?:Node\b)/,/^(?:Node_L\b)/,/^(?:Node_R\b)/,/^(?:Rel\b)/,/^(?:BiRel\b)/,/^(?:Rel_Up\b)/,/^(?:Rel_U\b)/,/^(?:Rel_Down\b)/,/^(?:Rel_D\b)/,/^(?:Rel_Left\b)/,/^(?:Rel_L\b)/,/^(?:Rel_Right\b)/,/^(?:Rel_R\b)/,/^(?:Rel_Back\b)/,/^(?:RelIndex\b)/,/^(?:UpdateElementStyle\b)/,/^(?:UpdateRelStyle\b)/,/^(?:UpdateLayoutConfig\b)/,/^(?:$)/,/^(?:[(][ ]*[,])/,/^(?:[(])/,/^(?:[)])/,/^(?:,,)/,/^(?:,)/,/^(?:[ ]*["]["])/,/^(?:[ ]*["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[ ]*[\$])/,/^(?:[^=]*)/,/^(?:[=][ ]*["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:[^,]+)/,/^(?:\{)/,/^(?:\})/,/^(?:[\s]+)/,/^(?:[\n\r]+)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},string_kv_value:{rules:[78,79],inclusive:!1},string_kv_key:{rules:[77],inclusive:!1},string_kv:{rules:[76],inclusive:!1},string:{rules:[73,74],inclusive:!1},attribute:{rules:[68,69,70,71,72,75,80],inclusive:!1},update_layout_config:{rules:[65,66,67,68],inclusive:!1},update_rel_style:{rules:[65,66,67,68],inclusive:!1},update_el_style:{rules:[65,66,67,68],inclusive:!1},rel_b:{rules:[65,66,67,68],inclusive:!1},rel_r:{rules:[65,66,67,68],inclusive:!1},rel_l:{rules:[65,66,67,68],inclusive:!1},rel_d:{rules:[65,66,67,68],inclusive:!1},rel_u:{rules:[65,66,67,68],inclusive:!1},rel_bi:{rules:[],inclusive:!1},rel:{rules:[65,66,67,68],inclusive:!1},node_r:{rules:[65,66,67,68],inclusive:!1},node_l:{rules:[65,66,67,68],inclusive:!1},node:{rules:[65,66,67,68],inclusive:!1},index:{rules:[],inclusive:!1},rel_index:{rules:[65,66,67,68],inclusive:!1},component_ext_queue:{rules:[],inclusive:!1},component_ext_db:{rules:[65,66,67,68],inclusive:!1},component_ext:{rules:[65,66,67,68],inclusive:!1},component_queue:{rules:[65,66,67,68],inclusive:!1},component_db:{rules:[65,66,67,68],inclusive:!1},component:{rules:[65,66,67,68],inclusive:!1},container_boundary:{rules:[65,66,67,68],inclusive:!1},container_ext_queue:{rules:[65,66,67,68],inclusive:!1},container_ext_db:{rules:[65,66,67,68],inclusive:!1},container_ext:{rules:[65,66,67,68],inclusive:!1},container_queue:{rules:[65,66,67,68],inclusive:!1},container_db:{rules:[65,66,67,68],inclusive:!1},container:{rules:[65,66,67,68],inclusive:!1},birel:{rules:[65,66,67,68],inclusive:!1},system_boundary:{rules:[65,66,67,68],inclusive:!1},enterprise_boundary:{rules:[65,66,67,68],inclusive:!1},boundary:{rules:[65,66,67,68],inclusive:!1},system_ext_queue:{rules:[65,66,67,68],inclusive:!1},system_ext_db:{rules:[65,66,67,68],inclusive:!1},system_ext:{rules:[65,66,67,68],inclusive:!1},system_queue:{rules:[65,66,67,68],inclusive:!1},system_db:{rules:[65,66,67,68],inclusive:!1},system:{rules:[65,66,67,68],inclusive:!1},person_ext:{rules:[65,66,67,68],inclusive:!1},person:{rules:[65,66,67,68],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,81,82,83,84,85],inclusive:!0}}};return $e}();Ce.lexer=Pe;function Ie(){this.yy={}}return o(Ie,"Parser"),Ie.prototype=Ce,Ce.Parser=Ie,new Ie}();ey.parser=ey;oz=ey});var HS,Vn,gp=M(()=>{"use strict";HS=o((t,e,{depth:r=2,clobber:n=!1}={})=>{let i={depth:r,clobber:n};return Array.isArray(e)&&!Array.isArray(t)?(e.forEach(a=>HS(t,a,i)),t):Array.isArray(e)&&Array.isArray(t)?(e.forEach(a=>{t.includes(a)||t.push(a)}),t):t===void 0||r<=0?t!=null&&typeof t=="object"&&typeof e=="object"?Object.assign(t,e):e:(e!==void 0&&typeof t=="object"&&typeof e=="object"&&Object.keys(e).forEach(a=>{typeof e[a]=="object"&&(t[a]===void 0||typeof t[a]=="object")?(t[a]===void 0&&(t[a]=Array.isArray(e[a])?[]:{}),t[a]=HS(t[a],e[a],{depth:r-1,clobber:n})):(n||typeof t[a]!="object"&&typeof e[a]!="object")&&(t[a]=e[a])}),t)},"assignWithDepth"),Vn=HS});var Jb,lz,cz=M(()=>{"use strict";Jb={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:o(t=>t>=255?255:t<0?0:t,"r"),g:o(t=>t>=255?255:t<0?0:t,"g"),b:o(t=>t>=255?255:t<0?0:t,"b"),h:o(t=>t%360,"h"),s:o(t=>t>=100?100:t<0?0:t,"s"),l:o(t=>t>=100?100:t<0?0:t,"l"),a:o(t=>t>=1?1:t<0?0:t,"a")},toLinear:o(t=>{let e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},"toLinear"),hue2rgb:o((t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<.16666666666666666?t+(e-t)*6*r:r<.5?e:r<.6666666666666666?t+(e-t)*(.6666666666666666-r)*6:t),"hue2rgb"),hsl2rgb:o(({h:t,s:e,l:r},n)=>{if(!e)return r*2.55;t/=360,e/=100,r/=100;let i=r<.5?r*(1+e):r+e-r*e,a=2*r-i;switch(n){case"r":return Jb.hue2rgb(a,i,t+.3333333333333333)*255;case"g":return Jb.hue2rgb(a,i,t)*255;case"b":return Jb.hue2rgb(a,i,t-.3333333333333333)*255}},"hsl2rgb"),rgb2hsl:o(({r:t,g:e,b:r},n)=>{t/=255,e/=255,r/=255;let i=Math.max(t,e,r),a=Math.min(t,e,r),s=(i+a)/2;if(n==="l")return s*100;if(i===a)return 0;let l=i-a,u=s>.5?l/(2-i-a):l/(i+a);if(n==="s")return u*100;switch(i){case t:return((e-r)/l+(e{"use strict";Mxe={clamp:o((t,e,r)=>e>r?Math.min(e,Math.max(r,t)):Math.min(r,Math.max(e,t)),"clamp"),round:o(t=>Math.round(t*1e10)/1e10,"round")},uz=Mxe});var Ixe,fz,dz=M(()=>{"use strict";Ixe={dec2hex:o(t=>{let e=Math.round(t).toString(16);return e.length>1?e:`0${e}`},"dec2hex")},fz=Ixe});var Oxe,Yt,ac=M(()=>{"use strict";cz();hz();dz();Oxe={channel:lz,lang:uz,unit:fz},Yt=Oxe});var ou,Pi,ty=M(()=>{"use strict";ac();ou={};for(let t=0;t<=255;t++)ou[t]=Yt.unit.dec2hex(t);Pi={ALL:0,RGB:1,HSL:2}});var WS,pz,mz=M(()=>{"use strict";ty();WS=class{static{o(this,"Type")}constructor(){this.type=Pi.ALL}get(){return this.type}set(e){if(this.type&&this.type!==e)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=e}reset(){this.type=Pi.ALL}is(e){return this.type===e}},pz=WS});var YS,gz,yz=M(()=>{"use strict";ac();mz();ty();YS=class{static{o(this,"Channels")}constructor(e,r){this.color=r,this.changed=!1,this.data=e,this.type=new pz}set(e,r){return this.color=r,this.changed=!1,this.data=e,this.type.type=Pi.ALL,this}_ensureHSL(){let e=this.data,{h:r,s:n,l:i}=e;r===void 0&&(e.h=Yt.channel.rgb2hsl(e,"h")),n===void 0&&(e.s=Yt.channel.rgb2hsl(e,"s")),i===void 0&&(e.l=Yt.channel.rgb2hsl(e,"l"))}_ensureRGB(){let e=this.data,{r,g:n,b:i}=e;r===void 0&&(e.r=Yt.channel.hsl2rgb(e,"r")),n===void 0&&(e.g=Yt.channel.hsl2rgb(e,"g")),i===void 0&&(e.b=Yt.channel.hsl2rgb(e,"b"))}get r(){let e=this.data,r=e.r;return!this.type.is(Pi.HSL)&&r!==void 0?r:(this._ensureHSL(),Yt.channel.hsl2rgb(e,"r"))}get g(){let e=this.data,r=e.g;return!this.type.is(Pi.HSL)&&r!==void 0?r:(this._ensureHSL(),Yt.channel.hsl2rgb(e,"g"))}get b(){let e=this.data,r=e.b;return!this.type.is(Pi.HSL)&&r!==void 0?r:(this._ensureHSL(),Yt.channel.hsl2rgb(e,"b"))}get h(){let e=this.data,r=e.h;return!this.type.is(Pi.RGB)&&r!==void 0?r:(this._ensureRGB(),Yt.channel.rgb2hsl(e,"h"))}get s(){let e=this.data,r=e.s;return!this.type.is(Pi.RGB)&&r!==void 0?r:(this._ensureRGB(),Yt.channel.rgb2hsl(e,"s"))}get l(){let e=this.data,r=e.l;return!this.type.is(Pi.RGB)&&r!==void 0?r:(this._ensureRGB(),Yt.channel.rgb2hsl(e,"l"))}get a(){return this.data.a}set r(e){this.type.set(Pi.RGB),this.changed=!0,this.data.r=e}set g(e){this.type.set(Pi.RGB),this.changed=!0,this.data.g=e}set b(e){this.type.set(Pi.RGB),this.changed=!0,this.data.b=e}set h(e){this.type.set(Pi.HSL),this.changed=!0,this.data.h=e}set s(e){this.type.set(Pi.HSL),this.changed=!0,this.data.s=e}set l(e){this.type.set(Pi.HSL),this.changed=!0,this.data.l=e}set a(e){this.changed=!0,this.data.a=e}},gz=YS});var Pxe,hh,ry=M(()=>{"use strict";yz();Pxe=new gz({r:0,g:0,b:0,a:0},"transparent"),hh=Pxe});var vz,Jf,qS=M(()=>{"use strict";ry();ty();vz={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:o(t=>{if(t.charCodeAt(0)!==35)return;let e=t.match(vz.re);if(!e)return;let r=e[1],n=parseInt(r,16),i=r.length,a=i%4===0,s=i>4,l=s?1:17,u=s?8:4,h=a?0:-1,f=s?255:15;return hh.set({r:(n>>u*(h+3)&f)*l,g:(n>>u*(h+2)&f)*l,b:(n>>u*(h+1)&f)*l,a:a?(n&f)*l/255:1},t)},"parse"),stringify:o(t=>{let{r:e,g:r,b:n,a:i}=t;return i<1?`#${ou[Math.round(e)]}${ou[Math.round(r)]}${ou[Math.round(n)]}${ou[Math.round(i*255)]}`:`#${ou[Math.round(e)]}${ou[Math.round(r)]}${ou[Math.round(n)]}`},"stringify")},Jf=vz});var e4,ny,xz=M(()=>{"use strict";ac();ry();e4={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:o(t=>{let e=t.match(e4.hueRe);if(e){let[,r,n]=e;switch(n){case"grad":return Yt.channel.clamp.h(parseFloat(r)*.9);case"rad":return Yt.channel.clamp.h(parseFloat(r)*180/Math.PI);case"turn":return Yt.channel.clamp.h(parseFloat(r)*360)}}return Yt.channel.clamp.h(parseFloat(t))},"_hue2deg"),parse:o(t=>{let e=t.charCodeAt(0);if(e!==104&&e!==72)return;let r=t.match(e4.re);if(!r)return;let[,n,i,a,s,l]=r;return hh.set({h:e4._hue2deg(n),s:Yt.channel.clamp.s(parseFloat(i)),l:Yt.channel.clamp.l(parseFloat(a)),a:s?Yt.channel.clamp.a(l?parseFloat(s)/100:parseFloat(s)):1},t)},"parse"),stringify:o(t=>{let{h:e,s:r,l:n,a:i}=t;return i<1?`hsla(${Yt.lang.round(e)}, ${Yt.lang.round(r)}%, ${Yt.lang.round(n)}%, ${i})`:`hsl(${Yt.lang.round(e)}, ${Yt.lang.round(r)}%, ${Yt.lang.round(n)}%)`},"stringify")},ny=e4});var t4,XS,bz=M(()=>{"use strict";qS();t4={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:o(t=>{t=t.toLowerCase();let e=t4.colors[t];if(e)return Jf.parse(e)},"parse"),stringify:o(t=>{let e=Jf.stringify(t);for(let r in t4.colors)if(t4.colors[r]===e)return r},"stringify")},XS=t4});var wz,iy,Tz=M(()=>{"use strict";ac();ry();wz={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:o(t=>{let e=t.charCodeAt(0);if(e!==114&&e!==82)return;let r=t.match(wz.re);if(!r)return;let[,n,i,a,s,l,u,h,f]=r;return hh.set({r:Yt.channel.clamp.r(i?parseFloat(n)*2.55:parseFloat(n)),g:Yt.channel.clamp.g(s?parseFloat(a)*2.55:parseFloat(a)),b:Yt.channel.clamp.b(u?parseFloat(l)*2.55:parseFloat(l)),a:h?Yt.channel.clamp.a(f?parseFloat(h)/100:parseFloat(h)):1},t)},"parse"),stringify:o(t=>{let{r:e,g:r,b:n,a:i}=t;return i<1?`rgba(${Yt.lang.round(e)}, ${Yt.lang.round(r)}, ${Yt.lang.round(n)}, ${Yt.lang.round(i)})`:`rgb(${Yt.lang.round(e)}, ${Yt.lang.round(r)}, ${Yt.lang.round(n)})`},"stringify")},iy=wz});var Bxe,Bi,lu=M(()=>{"use strict";qS();xz();bz();Tz();ty();Bxe={format:{keyword:XS,hex:Jf,rgb:iy,rgba:iy,hsl:ny,hsla:ny},parse:o(t=>{if(typeof t!="string")return t;let e=Jf.parse(t)||iy.parse(t)||ny.parse(t)||XS.parse(t);if(e)return e;throw new Error(`Unsupported color format: "${t}"`)},"parse"),stringify:o(t=>!t.changed&&t.color?t.color:t.type.is(Pi.HSL)||t.data.r===void 0?ny.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?iy.stringify(t):Jf.stringify(t),"stringify")},Bi=Bxe});var Fxe,r4,jS=M(()=>{"use strict";ac();lu();Fxe=o((t,e)=>{let r=Bi.parse(t);for(let n in e)r[n]=Yt.channel.clamp[n](e[n]);return Bi.stringify(r)},"change"),r4=Fxe});var zxe,Zs,KS=M(()=>{"use strict";ac();ry();lu();jS();zxe=o((t,e,r=0,n=1)=>{if(typeof t!="number")return r4(t,{a:e});let i=hh.set({r:Yt.channel.clamp.r(t),g:Yt.channel.clamp.g(e),b:Yt.channel.clamp.b(r),a:Yt.channel.clamp.a(n)});return Bi.stringify(i)},"rgba"),Zs=zxe});var Gxe,ay,kz=M(()=>{"use strict";ac();lu();Gxe=o((t,e)=>Yt.lang.round(Bi.parse(t)[e]),"channel"),ay=Gxe});var $xe,Ez,Sz=M(()=>{"use strict";ac();lu();$xe=o(t=>{let{r:e,g:r,b:n}=Bi.parse(t),i=.2126*Yt.channel.toLinear(e)+.7152*Yt.channel.toLinear(r)+.0722*Yt.channel.toLinear(n);return Yt.lang.round(i)},"luminance"),Ez=$xe});var Vxe,Cz,Az=M(()=>{"use strict";Sz();Vxe=o(t=>Ez(t)>=.5,"isLight"),Cz=Vxe});var Uxe,fa,_z=M(()=>{"use strict";Az();Uxe=o(t=>!Cz(t),"isDark"),fa=Uxe});var Hxe,n4,QS=M(()=>{"use strict";ac();lu();Hxe=o((t,e,r)=>{let n=Bi.parse(t),i=n[e],a=Yt.channel.clamp[e](i+r);return i!==a&&(n[e]=a),Bi.stringify(n)},"adjustChannel"),n4=Hxe});var Wxe,_t,Lz=M(()=>{"use strict";QS();Wxe=o((t,e)=>n4(t,"l",e),"lighten"),_t=Wxe});var Yxe,It,Dz=M(()=>{"use strict";QS();Yxe=o((t,e)=>n4(t,"l",-e),"darken"),It=Yxe});var qxe,Me,Nz=M(()=>{"use strict";lu();jS();qxe=o((t,e)=>{let r=Bi.parse(t),n={};for(let i in e)e[i]&&(n[i]=r[i]+e[i]);return r4(t,n)},"adjust"),Me=qxe});var Xxe,Rz,Mz=M(()=>{"use strict";lu();KS();Xxe=o((t,e,r=50)=>{let{r:n,g:i,b:a,a:s}=Bi.parse(t),{r:l,g:u,b:h,a:f}=Bi.parse(e),d=r/100,p=d*2-1,m=s-f,y=((p*m===-1?p:(p+m)/(1+p*m))+1)/2,v=1-y,x=n*y+l*v,b=i*y+u*v,w=a*y+h*v,_=s*d+f*(1-d);return Zs(x,b,w,_)},"mix"),Rz=Xxe});var jxe,mt,Iz=M(()=>{"use strict";lu();Mz();jxe=o((t,e=100)=>{let r=Bi.parse(t);return r.r=255-r.r,r.g=255-r.g,r.b=255-r.b,Rz(r,t,e)},"invert"),mt=jxe});var Oz=M(()=>{"use strict";KS();kz();_z();Lz();Dz();Nz();Iz()});var Lo=M(()=>{"use strict";Oz()});var fh,dh,sy=M(()=>{"use strict";fh="#ffffff",dh="#f2f2f2"});var Si,yp=M(()=>{"use strict";Lo();Si=o((t,e)=>e?Me(t,{s:-40,l:10}):Me(t,{s:-40,l:-10}),"mkBorder")});var ZS,Bz,Fz=M(()=>{"use strict";Lo();sy();yp();ZS=class{static{o(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px"}updateColors(){if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||Me(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||Me(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Si(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Si(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Si(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Si(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||mt(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||mt(this.tertiaryColor),this.lineColor=this.lineColor||mt(this.background),this.arrowheadColor=this.arrowheadColor||mt(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?It(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||this.actorBorder,this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||It(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||mt(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||_t(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||Me(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Me(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Me(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Me(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Me(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Me(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||Me(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Me(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Me(this.primaryColor,{h:330}),this.darkMode)for(let r=0;r{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},Bz=o(t=>{let e=new ZS;return e.calculate(t),e},"getThemeVariables")});var JS,zz,Gz=M(()=>{"use strict";Lo();yp();JS=class{static{o(this,"Theme")}constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=_t(this.primaryColor,16),this.tertiaryColor=Me(this.primaryColor,{h:-160}),this.primaryBorderColor=mt(this.background),this.secondaryBorderColor=Si(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Si(this.tertiaryColor,this.darkMode),this.primaryTextColor=mt(this.primaryColor),this.secondaryTextColor=mt(this.secondaryColor),this.tertiaryTextColor=mt(this.tertiaryColor),this.lineColor=mt(this.background),this.textColor=mt(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=_t(mt("#323D47"),10),this.lineColor="calculated",this.border1="#ccc",this.border2=Zs(255,255,255,.25),this.arrowheadColor="calculated",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#F9FFFE",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="calculated",this.activationBkgColor="calculated",this.sequenceNumberColor="black",this.sectionBkgColor=It("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=It(this.sectionBkgColor,10),this.taskBorderColor=Zs(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=Zs(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){this.secondBkg=_t(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=_t(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.actorBorder,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=_t(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=this.darkTextColor,this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=Me(this.primaryColor,{h:64}),this.fillType3=Me(this.secondaryColor,{h:64}),this.fillType4=Me(this.primaryColor,{h:-64}),this.fillType5=Me(this.secondaryColor,{h:-64}),this.fillType6=Me(this.primaryColor,{h:128}),this.fillType7=Me(this.secondaryColor,{h:128}),this.cScale1=this.cScale1||"#0b0000",this.cScale2=this.cScale2||"#4d1037",this.cScale3=this.cScale3||"#3f5258",this.cScale4=this.cScale4||"#4f2f1b",this.cScale5=this.cScale5||"#6e0a0a",this.cScale6=this.cScale6||"#3b0048",this.cScale7=this.cScale7||"#995a01",this.cScale8=this.cScale8||"#154706",this.cScale9=this.cScale9||"#161722",this.cScale10=this.cScale10||"#00296f",this.cScale11=this.cScale11||"#01629c",this.cScale12=this.cScale12||"#010029",this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||Me(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Me(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Me(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Me(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Me(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Me(this.primaryColor,{h:210}),this.cScale9=this.cScale9||Me(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Me(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Me(this.primaryColor,{h:330});for(let e=0;e{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},zz=o(t=>{let e=new JS;return e.calculate(t),e},"getThemeVariables")});var eC,vp,i4=M(()=>{"use strict";Lo();yp();sy();eC=class{static{o(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=Me(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=Me(this.primaryColor,{h:-160}),this.primaryBorderColor=Si(this.primaryColor,this.darkMode),this.secondaryBorderColor=Si(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Si(this.tertiaryColor,this.darkMode),this.primaryTextColor=mt(this.primaryColor),this.secondaryTextColor=mt(this.secondaryColor),this.tertiaryTextColor=mt(this.tertiaryColor),this.lineColor=mt(this.background),this.textColor=mt(this.background),this.background="white",this.mainBkg="#ECECFF",this.secondBkg="#ffffde",this.lineColor="#333333",this.border1="#9370DB",this.border2="#aaaa33",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="rgba(232,232,232, 0.8)",this.textColor="#333",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="calculated",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="calculated",this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor="calculated",this.taskTextOutsideColor=this.taskTextDarkColor,this.taskTextClickableColor="calculated",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBorderColor="calculated",this.critBkgColor="calculated",this.todayLineColor="calculated",this.sectionBkgColor=Zs(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}updateColors(){this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||Me(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Me(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Me(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Me(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Me(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Me(this.primaryColor,{h:210}),this.cScale9=this.cScale9||Me(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Me(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Me(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||It(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||It(this.tertiaryColor,40);for(let e=0;e{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},vp=o(t=>{let e=new eC;return e.calculate(t),e},"getThemeVariables")});var tC,$z,Vz=M(()=>{"use strict";Lo();sy();yp();tC=class{static{o(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#cde498",this.secondaryColor="#cdffb2",this.background="white",this.mainBkg="#cde498",this.secondBkg="#cdffb2",this.lineColor="green",this.border1="#13540c",this.border2="#6eaa49",this.arrowheadColor="green",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.tertiaryColor=_t("#cde498",10),this.primaryBorderColor=Si(this.primaryColor,this.darkMode),this.secondaryBorderColor=Si(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Si(this.tertiaryColor,this.darkMode),this.primaryTextColor=mt(this.primaryColor),this.secondaryTextColor=mt(this.secondaryColor),this.tertiaryTextColor=mt(this.primaryColor),this.lineColor=mt(this.background),this.textColor=mt(this.background),this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="calculated",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.actorBorder=It(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.actorLineColor=this.actorBorder,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||Me(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Me(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Me(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Me(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Me(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Me(this.primaryColor,{h:210}),this.cScale9=this.cScale9||Me(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Me(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Me(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||It(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||It(this.tertiaryColor,40);for(let e=0;e{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},$z=o(t=>{let e=new tC;return e.calculate(t),e},"getThemeVariables")});var rC,Uz,Hz=M(()=>{"use strict";Lo();yp();sy();rC=class{static{o(this,"Theme")}constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=_t(this.contrast,55),this.background="#ffffff",this.tertiaryColor=Me(this.primaryColor,{h:-160}),this.primaryBorderColor=Si(this.primaryColor,this.darkMode),this.secondaryBorderColor=Si(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Si(this.tertiaryColor,this.darkMode),this.primaryTextColor=mt(this.primaryColor),this.secondaryTextColor=mt(this.secondaryColor),this.tertiaryTextColor=mt(this.tertiaryColor),this.lineColor=mt(this.background),this.textColor=mt(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor=this.actorBorder,this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.secondBkg=_t(this.contrast,55),this.border2=this.contrast,this.actorBorder=_t(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.actorBorder,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.cScale0=this.cScale0||"#555",this.cScale1=this.cScale1||"#F4F4F4",this.cScale2=this.cScale2||"#555",this.cScale3=this.cScale3||"#BBB",this.cScale4=this.cScale4||"#777",this.cScale5=this.cScale5||"#999",this.cScale6=this.cScale6||"#DDD",this.cScale7=this.cScale7||"#FFF",this.cScale8=this.cScale8||"#DDD",this.cScale9=this.cScale9||"#BBB",this.cScale10=this.cScale10||"#999",this.cScale11=this.cScale11||"#777";for(let e=0;e{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},Uz=o(t=>{let e=new rC;return e.calculate(t),e},"getThemeVariables")});var Do,a4=M(()=>{"use strict";Fz();Gz();i4();Vz();Hz();Do={base:{getThemeVariables:Bz},dark:{getThemeVariables:zz},default:{getThemeVariables:vp},forest:{getThemeVariables:$z},neutral:{getThemeVariables:Uz}}});var cu,Wz=M(()=>{"use strict";cu={flowchart:{useMaxWidth:!0,titleTopMargin:25,subGraphTitleMargin:{top:0,bottom:0},diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,defaultRenderer:"dagre-wrapper",wrappingWidth:200},sequence:{useMaxWidth:!0,hideUnusedParticipants:!1,activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,forceMenus:!1,bottomMarginAdj:1,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open Sans", sans-serif',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20},gantt:{useMaxWidth:!0,titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",topAxis:!1,displayMode:"",weekday:"sunday"},journey:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"]},class:{useMaxWidth:!0,titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,defaultRenderer:"dagre-wrapper",htmlLabels:!1,hideEmptyMembersBox:!1},state:{useMaxWidth:!0,titleTopMargin:25,dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,defaultRenderer:"dagre-wrapper"},er:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,stroke:"gray",fill:"honeydew",fontSize:12},pie:{useMaxWidth:!0,textPosition:.75},quadrantChart:{useMaxWidth:!0,chartWidth:500,chartHeight:500,titleFontSize:20,titlePadding:10,quadrantPadding:5,xAxisLabelPadding:5,yAxisLabelPadding:5,xAxisLabelFontSize:16,yAxisLabelFontSize:16,quadrantLabelFontSize:16,quadrantTextTopPadding:5,pointTextPadding:5,pointLabelFontSize:12,pointRadius:5,xAxisPosition:"top",yAxisPosition:"left",quadrantInternalBorderStrokeWidth:1,quadrantExternalBorderStrokeWidth:2},xyChart:{useMaxWidth:!0,width:700,height:500,titleFontSize:20,titlePadding:10,showTitle:!0,xAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},yAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},chartOrientation:"vertical",plotReservedSpacePercent:50},requirement:{useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200},kanban:{useMaxWidth:!0,padding:8,sectionWidth:200,ticketBaseUrl:""},timeline:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],disableMulticolor:!1},gitGraph:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0,parallelCommits:!1,arrowMarkerAbsolute:!1},c4:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,c4ShapeInRow:4,nextLinePaddingX:0,c4BoundaryInRow:2,personFontSize:14,personFontFamily:'"Open Sans", sans-serif',personFontWeight:"normal",external_personFontSize:14,external_personFontFamily:'"Open Sans", sans-serif',external_personFontWeight:"normal",systemFontSize:14,systemFontFamily:'"Open Sans", sans-serif',systemFontWeight:"normal",external_systemFontSize:14,external_systemFontFamily:'"Open Sans", sans-serif',external_systemFontWeight:"normal",system_dbFontSize:14,system_dbFontFamily:'"Open Sans", sans-serif',system_dbFontWeight:"normal",external_system_dbFontSize:14,external_system_dbFontFamily:'"Open Sans", sans-serif',external_system_dbFontWeight:"normal",system_queueFontSize:14,system_queueFontFamily:'"Open Sans", sans-serif',system_queueFontWeight:"normal",external_system_queueFontSize:14,external_system_queueFontFamily:'"Open Sans", sans-serif',external_system_queueFontWeight:"normal",boundaryFontSize:14,boundaryFontFamily:'"Open Sans", sans-serif',boundaryFontWeight:"normal",messageFontSize:12,messageFontFamily:'"Open Sans", sans-serif',messageFontWeight:"normal",containerFontSize:14,containerFontFamily:'"Open Sans", sans-serif',containerFontWeight:"normal",external_containerFontSize:14,external_containerFontFamily:'"Open Sans", sans-serif',external_containerFontWeight:"normal",container_dbFontSize:14,container_dbFontFamily:'"Open Sans", sans-serif',container_dbFontWeight:"normal",external_container_dbFontSize:14,external_container_dbFontFamily:'"Open Sans", sans-serif',external_container_dbFontWeight:"normal",container_queueFontSize:14,container_queueFontFamily:'"Open Sans", sans-serif',container_queueFontWeight:"normal",external_container_queueFontSize:14,external_container_queueFontFamily:'"Open Sans", sans-serif',external_container_queueFontWeight:"normal",componentFontSize:14,componentFontFamily:'"Open Sans", sans-serif',componentFontWeight:"normal",external_componentFontSize:14,external_componentFontFamily:'"Open Sans", sans-serif',external_componentFontWeight:"normal",component_dbFontSize:14,component_dbFontFamily:'"Open Sans", sans-serif',component_dbFontWeight:"normal",external_component_dbFontSize:14,external_component_dbFontFamily:'"Open Sans", sans-serif',external_component_dbFontWeight:"normal",component_queueFontSize:14,component_queueFontFamily:'"Open Sans", sans-serif',component_queueFontWeight:"normal",external_component_queueFontSize:14,external_component_queueFontFamily:'"Open Sans", sans-serif',external_component_queueFontWeight:"normal",wrap:!0,wrapPadding:10,person_bg_color:"#08427B",person_border_color:"#073B6F",external_person_bg_color:"#686868",external_person_border_color:"#8A8A8A",system_bg_color:"#1168BD",system_border_color:"#3C7FC0",system_db_bg_color:"#1168BD",system_db_border_color:"#3C7FC0",system_queue_bg_color:"#1168BD",system_queue_border_color:"#3C7FC0",external_system_bg_color:"#999999",external_system_border_color:"#8A8A8A",external_system_db_bg_color:"#999999",external_system_db_border_color:"#8A8A8A",external_system_queue_bg_color:"#999999",external_system_queue_border_color:"#8A8A8A",container_bg_color:"#438DD5",container_border_color:"#3C7FC0",container_db_bg_color:"#438DD5",container_db_border_color:"#3C7FC0",container_queue_bg_color:"#438DD5",container_queue_border_color:"#3C7FC0",external_container_bg_color:"#B3B3B3",external_container_border_color:"#A6A6A6",external_container_db_bg_color:"#B3B3B3",external_container_db_border_color:"#A6A6A6",external_container_queue_bg_color:"#B3B3B3",external_container_queue_border_color:"#A6A6A6",component_bg_color:"#85BBF0",component_border_color:"#78A8D8",component_db_bg_color:"#85BBF0",component_db_border_color:"#78A8D8",component_queue_bg_color:"#85BBF0",component_queue_border_color:"#78A8D8",external_component_bg_color:"#CCCCCC",external_component_border_color:"#BFBFBF",external_component_db_bg_color:"#CCCCCC",external_component_db_border_color:"#BFBFBF",external_component_queue_bg_color:"#CCCCCC",external_component_queue_border_color:"#BFBFBF"},sankey:{useMaxWidth:!0,width:600,height:400,linkColor:"gradient",nodeAlignment:"justify",showValues:!0,prefix:"",suffix:""},block:{useMaxWidth:!0,padding:8},packet:{useMaxWidth:!0,rowHeight:32,bitWidth:32,bitsPerRow:32,showBits:!0,paddingX:5,paddingY:5},architecture:{useMaxWidth:!0,padding:40,iconSize:80,fontSize:16},theme:"default",look:"classic",handDrawnSeed:0,layout:"dagre",maxTextSize:5e4,maxEdges:500,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize","suppressErrorRendering","maxEdges"],legacyMathML:!1,forceLegacyMathML:!1,deterministicIds:!1,fontSize:16,markdownAutoWrap:!0,suppressErrorRendering:!1}});var Yz,qz,Xz,ur,bs=M(()=>{"use strict";a4();Wz();Yz={...cu,deterministicIDSeed:void 0,elk:{mergeEdges:!1,nodePlacementStrategy:"BRANDES_KOEPF"},themeCSS:void 0,themeVariables:Do.default.getThemeVariables(),sequence:{...cu.sequence,messageFont:o(function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},"messageFont"),noteFont:o(function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},"noteFont"),actorFont:o(function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}},"actorFont")},class:{hideEmptyMembersBox:!1},gantt:{...cu.gantt,tickInterval:void 0,useWidth:void 0},c4:{...cu.c4,useWidth:void 0,personFont:o(function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},"personFont"),external_personFont:o(function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},"external_personFont"),systemFont:o(function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},"systemFont"),external_systemFont:o(function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},"external_systemFont"),system_dbFont:o(function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},"system_dbFont"),external_system_dbFont:o(function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},"external_system_dbFont"),system_queueFont:o(function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},"system_queueFont"),external_system_queueFont:o(function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},"external_system_queueFont"),containerFont:o(function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},"containerFont"),external_containerFont:o(function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},"external_containerFont"),container_dbFont:o(function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},"container_dbFont"),external_container_dbFont:o(function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},"external_container_dbFont"),container_queueFont:o(function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},"container_queueFont"),external_container_queueFont:o(function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},"external_container_queueFont"),componentFont:o(function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},"componentFont"),external_componentFont:o(function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},"external_componentFont"),component_dbFont:o(function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},"component_dbFont"),external_component_dbFont:o(function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},"external_component_dbFont"),component_queueFont:o(function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},"component_queueFont"),external_component_queueFont:o(function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},"external_component_queueFont"),boundaryFont:o(function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},"boundaryFont"),messageFont:o(function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},"messageFont")},pie:{...cu.pie,useWidth:984},xyChart:{...cu.xyChart,useWidth:void 0},requirement:{...cu.requirement,useWidth:void 0},packet:{...cu.packet}},qz=o((t,e="")=>Object.keys(t).reduce((r,n)=>Array.isArray(t[n])?r:typeof t[n]=="object"&&t[n]!==null?[...r,e+n,...qz(t[n],"")]:[...r,e+n],[]),"keyify"),Xz=new Set(qz(Yz,"")),ur=Yz});var xp,Kxe,nC=M(()=>{"use strict";bs();ut();xp=o(t=>{if(Y.debug("sanitizeDirective called with",t),!(typeof t!="object"||t==null)){if(Array.isArray(t)){t.forEach(e=>xp(e));return}for(let e of Object.keys(t)){if(Y.debug("Checking key",e),e.startsWith("__")||e.includes("proto")||e.includes("constr")||!Xz.has(e)||t[e]==null){Y.debug("sanitize deleting key: ",e),delete t[e];continue}if(typeof t[e]=="object"){Y.debug("sanitizing object",e),xp(t[e]);continue}let r=["themeCSS","fontFamily","altFontFamily"];for(let n of r)e.includes(n)&&(Y.debug("sanitizing css option",e),t[e]=Kxe(t[e]))}if(t.themeVariables)for(let e of Object.keys(t.themeVariables)){let r=t.themeVariables[e];r?.match&&!r.match(/^[\d "#%(),.;A-Za-z]+$/)&&(t.themeVariables[e]="")}Y.debug("After sanitization",t)}},"sanitizeDirective"),Kxe=o(t=>{let e=0,r=0;for(let n of t){if(e{"use strict";gp();ut();a4();bs();nC();ph=Object.freeze(ur),ws=Vn({},ph),bp=[],oy=Vn({},ph),s4=o((t,e)=>{let r=Vn({},t),n={};for(let i of e)Jz(i),n=Vn(n,i);if(r=Vn(r,n),n.theme&&n.theme in Do){let i=Vn({},Kz),a=Vn(i.themeVariables||{},n.themeVariables);r.theme&&r.theme in Do&&(r.themeVariables=Do[r.theme].getThemeVariables(a))}return oy=r,tG(oy),oy},"updateCurrentConfig"),iC=o(t=>(ws=Vn({},ph),ws=Vn(ws,t),t.theme&&Do[t.theme]&&(ws.themeVariables=Do[t.theme].getThemeVariables(t.themeVariables)),s4(ws,bp),ws),"setSiteConfig"),Qz=o(t=>{Kz=Vn({},t)},"saveConfigFromInitialize"),Zz=o(t=>(ws=Vn(ws,t),s4(ws,bp),ws),"updateSiteConfig"),aC=o(()=>Vn({},ws),"getSiteConfig"),o4=o(t=>(tG(t),Vn(oy,t),Cr()),"setConfig"),Cr=o(()=>Vn({},oy),"getConfig"),Jz=o(t=>{t&&(["secure",...ws.secure??[]].forEach(e=>{Object.hasOwn(t,e)&&(Y.debug(`Denied attempt to modify a secure key ${e}`,t[e]),delete t[e])}),Object.keys(t).forEach(e=>{e.startsWith("__")&&delete t[e]}),Object.keys(t).forEach(e=>{typeof t[e]=="string"&&(t[e].includes("<")||t[e].includes(">")||t[e].includes("url(data:"))&&delete t[e],typeof t[e]=="object"&&Jz(t[e])}))},"sanitize"),eG=o(t=>{xp(t),t.fontFamily&&!t.themeVariables?.fontFamily&&(t.themeVariables={...t.themeVariables,fontFamily:t.fontFamily}),bp.push(t),s4(ws,bp)},"addDirective"),ly=o((t=ws)=>{bp=[],s4(t,bp)},"reset"),Qxe={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead."},jz={},Zxe=o(t=>{jz[t]||(Y.warn(Qxe[t]),jz[t]=!0)},"issueWarning"),tG=o(t=>{t&&(t.lazyLoadedDiagrams||t.loadExternalDiagramsAtStartup)&&Zxe("LAZY_LOAD_DEPRECATED")},"checkConfig")});var lC=Ei((sC,oC)=>{"use strict";(function(t,e){typeof sC=="object"&&typeof oC<"u"?oC.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self,t.DOMPurify=e())})(sC,function(){"use strict";let{entries:t,setPrototypeOf:e,isFrozen:r,getPrototypeOf:n,getOwnPropertyDescriptor:i}=Object,{freeze:a,seal:s,create:l}=Object,{apply:u,construct:h}=typeof Reflect<"u"&&Reflect;a||(a=o(function(Ce){return Ce},"freeze")),s||(s=o(function(Ce){return Ce},"seal")),u||(u=o(function(Ce,Pe,Ie){return Ce.apply(Pe,Ie)},"apply")),h||(h=o(function(Ce,Pe){return new Ce(...Pe)},"construct"));let f=E(Array.prototype.forEach),d=E(Array.prototype.pop),p=E(Array.prototype.push),m=E(String.prototype.toLowerCase),g=E(String.prototype.toString),y=E(String.prototype.match),v=E(String.prototype.replace),x=E(String.prototype.indexOf),b=E(String.prototype.trim),w=E(Object.prototype.hasOwnProperty),_=E(RegExp.prototype.test),T=L(TypeError);function E(Re){return function(Ce){for(var Pe=arguments.length,Ie=new Array(Pe>1?Pe-1:0),$e=1;$e2&&arguments[2]!==void 0?arguments[2]:m;e&&e(Re,null);let Ie=Ce.length;for(;Ie--;){let $e=Ce[Ie];if(typeof $e=="string"){let ye=Pe($e);ye!==$e&&(r(Ce)||(Ce[Ie]=ye),$e=ye)}Re[$e]=!0}return Re}o(S,"addToSet");function A(Re){for(let Ce=0;Ce/gm),oe=s(/\${[\w\W]*}/gm),K=s(/^data-[\-\w.\u00B7-\uFFFF]/),ee=s(/^aria-[\-\w]+$/),J=s(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),H=s(/^(?:\w+script|data):/i),q=s(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Q=s(/^html$/i),ae=s(/^[a-z][.\w]*(-[.\w]+)+$/i);var ue=Object.freeze({__proto__:null,MUSTACHE_EXPR:Z,ERB_EXPR:j,TMPLIT_EXPR:oe,DATA_ATTR:K,ARIA_ATTR:ee,IS_ALLOWED_URI:J,IS_SCRIPT_OR_DATA:H,ATTR_WHITESPACE:q,DOCTYPE_NAME:Q,CUSTOM_ELEMENT:ae});let ce={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},te=o(function(){return typeof window>"u"?null:window},"getGlobal"),Ne=o(function(Ce,Pe){if(typeof Ce!="object"||typeof Ce.createPolicy!="function")return null;let Ie=null,$e="data-tt-policy-suffix";Pe&&Pe.hasAttribute($e)&&(Ie=Pe.getAttribute($e));let ye="dompurify"+(Ie?"#"+Ie:"");try{return Ce.createPolicy(ye,{createHTML(X){return X},createScriptURL(X){return X}})}catch{return console.warn("TrustedTypes policy "+ye+" could not be created."),null}},"_createTrustedTypesPolicy");function se(){let Re=arguments.length>0&&arguments[0]!==void 0?arguments[0]:te(),Ce=o(Kt=>se(Kt),"DOMPurify");if(Ce.version="3.1.6",Ce.removed=[],!Re||!Re.document||Re.document.nodeType!==ce.document)return Ce.isSupported=!1,Ce;let{document:Pe}=Re,Ie=Pe,$e=Ie.currentScript,{DocumentFragment:ye,HTMLTemplateElement:X,Node:fe,Element:he,NodeFilter:ge,NamedNodeMap:ne=Re.NamedNodeMap||Re.MozNamedAttrMap,HTMLFormElement:ve,DOMParser:U,trustedTypes:Te}=Re,ie=he.prototype,Ee=D(ie,"cloneNode"),Ae=D(ie,"remove"),Ge=D(ie,"nextSibling"),Be=D(ie,"childNodes"),me=D(ie,"parentNode");if(typeof X=="function"){let Kt=Pe.createElement("template");Kt.content&&Kt.content.ownerDocument&&(Pe=Kt.content.ownerDocument)}let He,Oe="",{implementation:et,createNodeIterator:bt,createDocumentFragment:kt,getElementsByTagName:vt}=Pe,{importNode:rt}=Ie,yt={};Ce.isSupported=typeof t=="function"&&typeof me=="function"&&et&&et.createHTMLDocument!==void 0;let{MUSTACHE_EXPR:Ue,ERB_EXPR:tt,TMPLIT_EXPR:ht,DATA_ATTR:Et,ARIA_ATTR:er,IS_SCRIPT_OR_DATA:dt,ATTR_WHITESPACE:Je,CUSTOM_ELEMENT:ct}=ue,{IS_ALLOWED_URI:Ct}=ue,pt=null,Bt=S({},[...k,...R,...C,...N,...F]),Tr=null,yr=S({},[...B,...G,...z,...W]),or=Object.seal(l(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ln=null,Or=null,ii=!0,mn=!0,On=!1,_r=!0,mi=!1,vs=!0,Pn=!1,So=!1,gl=!1,Bn=!1,ki=!1,At=!1,Pt=!0,wt=!1,We="user-content-",Ft=!0,de=!1,gn={},xe=null,ja=S({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),W1=null,Y1=S({},["audio","video","img","source","image","track"]),q1=null,X1=S({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),op="http://www.w3.org/1998/Math/MathML",Kn="http://www.w3.org/2000/svg",ca="http://www.w3.org/1999/xhtml",tc=ca,Wf=!1,j1=null,TF=S({},[op,Kn,ca],g),Yf=null,ua=["application/xhtml+xml","text/html"],K1="text/html",En=null,Oi=null,kF=Pe.createElement("form"),lp=o(function(Le){return Le instanceof RegExp||Le instanceof Function},"isRegexOrFunction"),rc=o(function(){let Le=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(Oi&&Oi===Le)){if((!Le||typeof Le!="object")&&(Le={}),Le=I(Le),Yf=ua.indexOf(Le.PARSER_MEDIA_TYPE)===-1?K1:Le.PARSER_MEDIA_TYPE,En=Yf==="application/xhtml+xml"?g:m,pt=w(Le,"ALLOWED_TAGS")?S({},Le.ALLOWED_TAGS,En):Bt,Tr=w(Le,"ALLOWED_ATTR")?S({},Le.ALLOWED_ATTR,En):yr,j1=w(Le,"ALLOWED_NAMESPACES")?S({},Le.ALLOWED_NAMESPACES,g):TF,q1=w(Le,"ADD_URI_SAFE_ATTR")?S(I(X1),Le.ADD_URI_SAFE_ATTR,En):X1,W1=w(Le,"ADD_DATA_URI_TAGS")?S(I(Y1),Le.ADD_DATA_URI_TAGS,En):Y1,xe=w(Le,"FORBID_CONTENTS")?S({},Le.FORBID_CONTENTS,En):ja,ln=w(Le,"FORBID_TAGS")?S({},Le.FORBID_TAGS,En):{},Or=w(Le,"FORBID_ATTR")?S({},Le.FORBID_ATTR,En):{},gn=w(Le,"USE_PROFILES")?Le.USE_PROFILES:!1,ii=Le.ALLOW_ARIA_ATTR!==!1,mn=Le.ALLOW_DATA_ATTR!==!1,On=Le.ALLOW_UNKNOWN_PROTOCOLS||!1,_r=Le.ALLOW_SELF_CLOSE_IN_ATTR!==!1,mi=Le.SAFE_FOR_TEMPLATES||!1,vs=Le.SAFE_FOR_XML!==!1,Pn=Le.WHOLE_DOCUMENT||!1,Bn=Le.RETURN_DOM||!1,ki=Le.RETURN_DOM_FRAGMENT||!1,At=Le.RETURN_TRUSTED_TYPE||!1,gl=Le.FORCE_BODY||!1,Pt=Le.SANITIZE_DOM!==!1,wt=Le.SANITIZE_NAMED_PROPS||!1,Ft=Le.KEEP_CONTENT!==!1,de=Le.IN_PLACE||!1,Ct=Le.ALLOWED_URI_REGEXP||J,tc=Le.NAMESPACE||ca,or=Le.CUSTOM_ELEMENT_HANDLING||{},Le.CUSTOM_ELEMENT_HANDLING&&lp(Le.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(or.tagNameCheck=Le.CUSTOM_ELEMENT_HANDLING.tagNameCheck),Le.CUSTOM_ELEMENT_HANDLING&&lp(Le.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(or.attributeNameCheck=Le.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),Le.CUSTOM_ELEMENT_HANDLING&&typeof Le.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(or.allowCustomizedBuiltInElements=Le.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),mi&&(mn=!1),ki&&(Bn=!0),gn&&(pt=S({},F),Tr=[],gn.html===!0&&(S(pt,k),S(Tr,B)),gn.svg===!0&&(S(pt,R),S(Tr,G),S(Tr,W)),gn.svgFilters===!0&&(S(pt,C),S(Tr,G),S(Tr,W)),gn.mathMl===!0&&(S(pt,N),S(Tr,z),S(Tr,W))),Le.ADD_TAGS&&(pt===Bt&&(pt=I(pt)),S(pt,Le.ADD_TAGS,En)),Le.ADD_ATTR&&(Tr===yr&&(Tr=I(Tr)),S(Tr,Le.ADD_ATTR,En)),Le.ADD_URI_SAFE_ATTR&&S(q1,Le.ADD_URI_SAFE_ATTR,En),Le.FORBID_CONTENTS&&(xe===ja&&(xe=I(xe)),S(xe,Le.FORBID_CONTENTS,En)),Ft&&(pt["#text"]=!0),Pn&&S(pt,["html","head","body"]),pt.table&&(S(pt,["tbody"]),delete ln.tbody),Le.TRUSTED_TYPES_POLICY){if(typeof Le.TRUSTED_TYPES_POLICY.createHTML!="function")throw T('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof Le.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw T('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');He=Le.TRUSTED_TYPES_POLICY,Oe=He.createHTML("")}else He===void 0&&(He=Ne(Te,$e)),He!==null&&typeof Oe=="string"&&(Oe=He.createHTML(""));a&&a(Le),Oi=Le}},"_parseConfig"),qf=S({},["mi","mo","mn","ms","mtext"]),Co=S({},["foreignobject","annotation-xml"]),zb=S({},["title","style","font","a","script"]),Xf=S({},[...R,...C,...O]),cp=S({},[...N,...P]),Ka=o(function(Le){let ft=me(Le);(!ft||!ft.tagName)&&(ft={namespaceURI:tc,tagName:"template"});let zt=m(Le.tagName),Sn=m(ft.tagName);return j1[Le.namespaceURI]?Le.namespaceURI===Kn?ft.namespaceURI===ca?zt==="svg":ft.namespaceURI===op?zt==="svg"&&(Sn==="annotation-xml"||qf[Sn]):!!Xf[zt]:Le.namespaceURI===op?ft.namespaceURI===ca?zt==="math":ft.namespaceURI===Kn?zt==="math"&&Co[Sn]:!!cp[zt]:Le.namespaceURI===ca?ft.namespaceURI===Kn&&!Co[Sn]||ft.namespaceURI===op&&!qf[Sn]?!1:!cp[zt]&&(zb[zt]||!Xf[zt]):!!(Yf==="application/xhtml+xml"&&j1[Le.namespaceURI]):!1},"_checkValidNamespace"),nc=o(function(Le){p(Ce.removed,{element:Le});try{me(Le).removeChild(Le)}catch{Ae(Le)}},"_forceRemove"),Gb=o(function(Le,ft){try{p(Ce.removed,{attribute:ft.getAttributeNode(Le),from:ft})}catch{p(Ce.removed,{attribute:null,from:ft})}if(ft.removeAttribute(Le),Le==="is"&&!Tr[Le])if(Bn||ki)try{nc(ft)}catch{}else try{ft.setAttribute(Le,"")}catch{}},"_removeAttribute"),EF=o(function(Le){let ft=null,zt=null;if(gl)Le=""+Le;else{let ha=y(Le,/^[\r\n\t ]+/);zt=ha&&ha[0]}Yf==="application/xhtml+xml"&&tc===ca&&(Le=''+Le+"");let Sn=He?He.createHTML(Le):Le;if(tc===ca)try{ft=new U().parseFromString(Sn,Yf)}catch{}if(!ft||!ft.documentElement){ft=et.createDocument(tc,"template",null);try{ft.documentElement.innerHTML=Wf?Oe:Sn}catch{}}let Da=ft.body||ft.documentElement;return Le&&zt&&Da.insertBefore(Pe.createTextNode(zt),Da.childNodes[0]||null),tc===ca?vt.call(ft,Pn?"html":"body")[0]:Pn?ft.documentElement:Da},"_initDocument"),SF=o(function(Le){return bt.call(Le.ownerDocument||Le,Le,ge.SHOW_ELEMENT|ge.SHOW_COMMENT|ge.SHOW_TEXT|ge.SHOW_PROCESSING_INSTRUCTION|ge.SHOW_CDATA_SECTION,null)},"_createNodeIterator"),CF=o(function(Le){return Le instanceof ve&&(typeof Le.nodeName!="string"||typeof Le.textContent!="string"||typeof Le.removeChild!="function"||!(Le.attributes instanceof ne)||typeof Le.removeAttribute!="function"||typeof Le.setAttribute!="function"||typeof Le.namespaceURI!="string"||typeof Le.insertBefore!="function"||typeof Le.hasChildNodes!="function")},"_isClobbered"),AF=o(function(Le){return typeof fe=="function"&&Le instanceof fe},"_isNode"),iu=o(function(Le,ft,zt){yt[Le]&&f(yt[Le],Sn=>{Sn.call(Ce,ft,zt,Oi)})},"_executeHook"),_F=o(function(Le){let ft=null;if(iu("beforeSanitizeElements",Le,null),CF(Le))return nc(Le),!0;let zt=En(Le.nodeName);if(iu("uponSanitizeElement",Le,{tagName:zt,allowedTags:pt}),Le.hasChildNodes()&&!AF(Le.firstElementChild)&&_(/<[/\w]/g,Le.innerHTML)&&_(/<[/\w]/g,Le.textContent)||Le.nodeType===ce.progressingInstruction||vs&&Le.nodeType===ce.comment&&_(/<[/\w]/g,Le.data))return nc(Le),!0;if(!pt[zt]||ln[zt]){if(!ln[zt]&&DF(zt)&&(or.tagNameCheck instanceof RegExp&&_(or.tagNameCheck,zt)||or.tagNameCheck instanceof Function&&or.tagNameCheck(zt)))return!1;if(Ft&&!xe[zt]){let Sn=me(Le)||Le.parentNode,Da=Be(Le)||Le.childNodes;if(Da&&Sn){let ha=Da.length;for(let xs=ha-1;xs>=0;--xs){let ic=Ee(Da[xs],!0);ic.__removalCount=(Le.__removalCount||0)+1,Sn.insertBefore(ic,Ge(Le))}}}return nc(Le),!0}return Le instanceof he&&!Ka(Le)||(zt==="noscript"||zt==="noembed"||zt==="noframes")&&_(/<\/no(script|embed|frames)/i,Le.innerHTML)?(nc(Le),!0):(mi&&Le.nodeType===ce.text&&(ft=Le.textContent,f([Ue,tt,ht],Sn=>{ft=v(ft,Sn," ")}),Le.textContent!==ft&&(p(Ce.removed,{element:Le.cloneNode()}),Le.textContent=ft)),iu("afterSanitizeElements",Le,null),!1)},"_sanitizeElements"),LF=o(function(Le,ft,zt){if(Pt&&(ft==="id"||ft==="name")&&(zt in Pe||zt in kF))return!1;if(!(mn&&!Or[ft]&&_(Et,ft))){if(!(ii&&_(er,ft))){if(!Tr[ft]||Or[ft]){if(!(DF(Le)&&(or.tagNameCheck instanceof RegExp&&_(or.tagNameCheck,Le)||or.tagNameCheck instanceof Function&&or.tagNameCheck(Le))&&(or.attributeNameCheck instanceof RegExp&&_(or.attributeNameCheck,ft)||or.attributeNameCheck instanceof Function&&or.attributeNameCheck(ft))||ft==="is"&&or.allowCustomizedBuiltInElements&&(or.tagNameCheck instanceof RegExp&&_(or.tagNameCheck,zt)||or.tagNameCheck instanceof Function&&or.tagNameCheck(zt))))return!1}else if(!q1[ft]){if(!_(Ct,v(zt,Je,""))){if(!((ft==="src"||ft==="xlink:href"||ft==="href")&&Le!=="script"&&x(zt,"data:")===0&&W1[Le])){if(!(On&&!_(dt,v(zt,Je,"")))){if(zt)return!1}}}}}}return!0},"_isValidAttribute"),DF=o(function(Le){return Le!=="annotation-xml"&&y(Le,ct)},"_isBasicCustomElement"),NF=o(function(Le){iu("beforeSanitizeAttributes",Le,null);let{attributes:ft}=Le;if(!ft)return;let zt={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Tr},Sn=ft.length;for(;Sn--;){let Da=ft[Sn],{name:ha,namespaceURI:xs,value:ic}=Da,Q1=En(ha),Qa=ha==="value"?ic:b(ic);if(zt.attrName=Q1,zt.attrValue=Qa,zt.keepAttr=!0,zt.forceKeepAttr=void 0,iu("uponSanitizeAttribute",Le,zt),Qa=zt.attrValue,vs&&_(/((--!?|])>)|<\/(style|title)/i,Qa)){Gb(ha,Le);continue}if(zt.forceKeepAttr||(Gb(ha,Le),!zt.keepAttr))continue;if(!_r&&_(/\/>/i,Qa)){Gb(ha,Le);continue}mi&&f([Ue,tt,ht],MF=>{Qa=v(Qa,MF," ")});let RF=En(Le.nodeName);if(LF(RF,Q1,Qa)){if(wt&&(Q1==="id"||Q1==="name")&&(Gb(ha,Le),Qa=We+Qa),He&&typeof Te=="object"&&typeof Te.getAttributeType=="function"&&!xs)switch(Te.getAttributeType(RF,Q1)){case"TrustedHTML":{Qa=He.createHTML(Qa);break}case"TrustedScriptURL":{Qa=He.createScriptURL(Qa);break}}try{xs?Le.setAttributeNS(xs,ha,Qa):Le.setAttribute(ha,Qa),CF(Le)?nc(Le):d(Ce.removed)}catch{}}}iu("afterSanitizeAttributes",Le,null)},"_sanitizeAttributes"),nxe=o(function Kt(Le){let ft=null,zt=SF(Le);for(iu("beforeSanitizeShadowDOM",Le,null);ft=zt.nextNode();)iu("uponSanitizeShadowNode",ft,null),!_F(ft)&&(ft.content instanceof ye&&Kt(ft.content),NF(ft));iu("afterSanitizeShadowDOM",Le,null)},"_sanitizeShadowDOM");return Ce.sanitize=function(Kt){let Le=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},ft=null,zt=null,Sn=null,Da=null;if(Wf=!Kt,Wf&&(Kt=""),typeof Kt!="string"&&!AF(Kt))if(typeof Kt.toString=="function"){if(Kt=Kt.toString(),typeof Kt!="string")throw T("dirty is not a string, aborting")}else throw T("toString is not a function");if(!Ce.isSupported)return Kt;if(So||rc(Le),Ce.removed=[],typeof Kt=="string"&&(de=!1),de){if(Kt.nodeName){let ic=En(Kt.nodeName);if(!pt[ic]||ln[ic])throw T("root node is forbidden and cannot be sanitized in-place")}}else if(Kt instanceof fe)ft=EF(""),zt=ft.ownerDocument.importNode(Kt,!0),zt.nodeType===ce.element&&zt.nodeName==="BODY"||zt.nodeName==="HTML"?ft=zt:ft.appendChild(zt);else{if(!Bn&&!mi&&!Pn&&Kt.indexOf("<")===-1)return He&&At?He.createHTML(Kt):Kt;if(ft=EF(Kt),!ft)return Bn?null:At?Oe:""}ft&&gl&&nc(ft.firstChild);let ha=SF(de?Kt:ft);for(;Sn=ha.nextNode();)_F(Sn)||(Sn.content instanceof ye&&nxe(Sn.content),NF(Sn));if(de)return Kt;if(Bn){if(ki)for(Da=kt.call(ft.ownerDocument);ft.firstChild;)Da.appendChild(ft.firstChild);else Da=ft;return(Tr.shadowroot||Tr.shadowrootmode)&&(Da=rt.call(Ie,Da,!0)),Da}let xs=Pn?ft.outerHTML:ft.innerHTML;return Pn&&pt["!doctype"]&&ft.ownerDocument&&ft.ownerDocument.doctype&&ft.ownerDocument.doctype.name&&_(Q,ft.ownerDocument.doctype.name)&&(xs=" +`+xs),mi&&f([Ue,tt,ht],ic=>{xs=v(xs,ic," ")}),He&&At?He.createHTML(xs):xs},Ce.setConfig=function(){let Kt=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};rc(Kt),So=!0},Ce.clearConfig=function(){Oi=null,So=!1},Ce.isValidAttribute=function(Kt,Le,ft){Oi||rc({});let zt=En(Kt),Sn=En(Le);return LF(zt,Sn,ft)},Ce.addHook=function(Kt,Le){typeof Le=="function"&&(yt[Kt]=yt[Kt]||[],p(yt[Kt],Le))},Ce.removeHook=function(Kt){if(yt[Kt])return d(yt[Kt])},Ce.removeHooks=function(Kt){yt[Kt]&&(yt[Kt]=[])},Ce.removeAllHooks=function(){yt={}},Ce}o(se,"createDOMPurify");var ke=se();return ke})});var _$={};vr(_$,{default:()=>Y4e});function abe(t){return String(t).replace(ibe,e=>nbe[e])}function cbe(t){if(t.default)return t.default;var e=t.type,r=Array.isArray(e)?e[0]:e;if(typeof r!="string")return r.enum[0];switch(r){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}function gbe(t){for(var e=0;e=i[0]&&t<=i[1])return r.name}return null}function IG(t){for(var e=0;e=b4[e]&&t<=b4[e+1])return!0;return!1}function Abe(t,e){lc[t]=e}function IC(t,e,r){if(!lc[e])throw new Error("Font metrics not found for font: "+e+".");var n=t.charCodeAt(0),i=lc[e][n];if(!i&&t[0]in nG&&(n=nG[t[0]].charCodeAt(0),i=lc[e][n]),!i&&r==="text"&&IG(n)&&(i=lc[e][77]),i)return{depth:i[0],height:i[1],italic:i[2],skew:i[3],width:i[4]}}function _be(t){var e;if(t>=5?e=0:t>=3?e=1:e=2,!cC[e]){var r=cC[e]={cssEmPerMu:l4.quad[e]/18};for(var n in l4)l4.hasOwnProperty(n)&&(r[n]=l4[n][e])}return cC[e]}function sG(t){if(t instanceof Es)return t;throw new Error("Expected symbolNode but got "+String(t)+".")}function Rbe(t){if(t instanceof nd)return t;throw new Error("Expected span but got "+String(t)+".")}function $(t,e,r,n,i,a){Cn[t][i]={font:e,group:r,replace:n},a&&n&&(Cn[t][n]=Cn[t][i])}function St(t){for(var{type:e,names:r,props:n,handler:i,htmlBuilder:a,mathmlBuilder:s}=t,l={type:e,numArgs:n.numArgs,argTypes:n.argTypes,allowedInArgument:!!n.allowedInArgument,allowedInText:!!n.allowedInText,allowedInMath:n.allowedInMath===void 0?!0:n.allowedInMath,numOptionalArgs:n.numOptionalArgs||0,infix:!!n.infix,primitive:!!n.primitive,handler:i},u=0;u0&&(a.push(m4(s,e)),s=[]),a.push(n[l]));s.length>0&&a.push(m4(s,e));var h;r?(h=m4(Fi(r,e,!0)),h.classes=["tag"],a.push(h)):i&&a.push(i);var f=pu(["katex-html"],a);if(f.setAttribute("aria-hidden","true"),h){var d=h.children[0];d.style.height=gt(f.height+f.depth),f.depth&&(d.style.verticalAlign=gt(-f.depth))}return f}function YG(t){return new rd(t)}function hG(t,e,r,n,i){var a=Ss(t,r),s;a.length===1&&a[0]instanceof ks&&Jt.contains(["mrow","mtable"],a[0].type)?s=a[0]:s=new at.MathNode("mrow",a);var l=new at.MathNode("annotation",[new at.TextNode(e)]);l.setAttribute("encoding","application/x-tex");var u=new at.MathNode("semantics",[s,l]),h=new at.MathNode("math",[u]);h.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),n&&h.setAttribute("display","block");var f=i?"katex":"katex-mathml";return Fe.makeSpan([f],[h])}function gr(t,e){if(!t||t.type!==e)throw new Error("Expected node of type "+e+", but got "+(t?"node of type "+t.type:String(t)));return t}function FC(t){var e=N4(t);if(!e)throw new Error("Expected node of symbol group type, but got "+(t?"node of type "+t.type:String(t)));return e}function N4(t){return t&&(t.type==="atom"||Ibe.hasOwnProperty(t.type))?t:null}function KG(t,e){var r=Fi(t.body,e,!0);return u4e([t.mclass],r,e)}function QG(t,e){var r,n=Ss(t.body,e);return t.mclass==="minner"?r=new at.MathNode("mpadded",n):t.mclass==="mord"?t.isCharacterBox?(r=n[0],r.type="mi"):r=new at.MathNode("mi",n):(t.isCharacterBox?(r=n[0],r.type="mo"):r=new at.MathNode("mo",n),t.mclass==="mbin"?(r.attributes.lspace="0.22em",r.attributes.rspace="0.22em"):t.mclass==="mpunct"?(r.attributes.lspace="0em",r.attributes.rspace="0.17em"):t.mclass==="mopen"||t.mclass==="mclose"?(r.attributes.lspace="0em",r.attributes.rspace="0em"):t.mclass==="minner"&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em")),r}function d4e(t,e,r){var n=h4e[t];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[e[0]],[e[1]]);case"\\uparrow":case"\\downarrow":{var i=r.callFunction("\\\\cdleft",[e[0]],[]),a={type:"atom",text:n,mode:"math",family:"rel"},s=r.callFunction("\\Big",[a],[]),l=r.callFunction("\\\\cdright",[e[1]],[]),u={type:"ordgroup",mode:"math",body:[i,s,l]};return r.callFunction("\\\\cdparent",[u],[])}case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{var h={type:"textord",text:"\\Vert",mode:"math"};return r.callFunction("\\Big",[h],[])}default:return{type:"textord",text:" ",mode:"math"}}}function p4e(t){var e=[];for(t.gullet.beginGroup(),t.gullet.macros.set("\\cr","\\\\\\relax"),t.gullet.beginGroup();;){e.push(t.parseExpression(!1,"\\\\")),t.gullet.endGroup(),t.gullet.beginGroup();var r=t.fetch().text;if(r==="&"||r==="\\\\")t.consume();else if(r==="\\end"){e[e.length-1].length===0&&e.pop();break}else throw new lt("Expected \\\\ or \\cr or \\end",t.nextToken)}for(var n=[],i=[n],a=0;a-1))if("<>AV".indexOf(h)>-1)for(var d=0;d<2;d++){for(var p=!0,m=u+1;mAV=|." after @',s[u]);var g=d4e(h,f,t),y={type:"styling",body:[g],mode:"math",style:"display"};n.push(y),l=fG()}a%2===0?n.push(l):n.shift(),n=[],i.push(n)}t.gullet.endGroup(),t.gullet.endGroup();var v=new Array(i[0].length).fill({type:"align",align:"c",pregap:.25,postgap:.25});return{type:"array",mode:"math",body:i,arraystretch:1,addJot:!0,rowGaps:[null],cols:v,colSeparationType:"CD",hLinesBeforeRow:new Array(i.length+1).fill([])}}function M4(t,e){var r=N4(t);if(r&&Jt.contains(A4e,r.text))return r;throw r?new lt("Invalid delimiter '"+r.text+"' after '"+e.funcName+"'",t):new lt("Invalid delimiter type '"+t.type+"'",t)}function mG(t){if(!t.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}function uc(t){for(var{type:e,names:r,props:n,handler:i,htmlBuilder:a,mathmlBuilder:s}=t,l={type:e,numArgs:n.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:i},u=0;u1||!f)&&y.pop(),x.length{"use strict";Js=class t{static{o(this,"SourceLocation")}constructor(e,r,n){this.lexer=void 0,this.start=void 0,this.end=void 0,this.lexer=e,this.start=r,this.end=n}static range(e,r){return r?!e||!e.loc||!r.loc||e.loc.lexer!==r.loc.lexer?null:new t(e.loc.lexer,e.loc.start,r.loc.end):e&&e.loc}},Ro=class t{static{o(this,"Token")}constructor(e,r){this.text=void 0,this.loc=void 0,this.noexpand=void 0,this.treatAsRelax=void 0,this.text=e,this.loc=r}range(e,r){return new t(r,Js.range(this,e))}},lt=class t{static{o(this,"ParseError")}constructor(e,r){this.name=void 0,this.position=void 0,this.length=void 0,this.rawMessage=void 0;var n="KaTeX parse error: "+e,i,a,s=r&&r.loc;if(s&&s.start<=s.end){var l=s.lexer.input;i=s.start,a=s.end,i===l.length?n+=" at end of input: ":n+=" at position "+(i+1)+": ";var u=l.slice(i,a).replace(/[^]/g,"$&\u0332"),h;i>15?h="\u2026"+l.slice(i-15,i):h=l.slice(0,i);var f;a+15":">","<":"<",'"':""","'":"'"},ibe=/[&><"']/g;o(abe,"escape");MG=o(function t(e){return e.type==="ordgroup"||e.type==="color"?e.body.length===1?t(e.body[0]):e:e.type==="font"?t(e.body):e},"getBaseElem"),sbe=o(function(e){var r=MG(e);return r.type==="mathord"||r.type==="textord"||r.type==="atom"},"isCharacterBox"),obe=o(function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e},"assert"),lbe=o(function(e){var r=/^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(e);return r?r[2]!==":"||!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(r[1])?null:r[1].toLowerCase():"_relative"},"protocolFromUrl"),Jt={contains:Jxe,deflt:ebe,escape:abe,hyphenate:rbe,getBaseElem:MG,isCharacterBox:sbe,protocolFromUrl:lbe},x4={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format "},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color ",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:o(t=>"#"+t,"cliProcessor")},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:o((t,e)=>(e.push(t),e),"cliProcessor")},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:o(t=>Math.max(0,t),"processor"),cli:"--min-rule-thickness ",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:o(t=>Math.max(0,t),"processor"),cli:"-s, --max-size ",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:o(t=>Math.max(0,t),"processor"),cli:"-e, --max-expand ",cliProcessor:o(t=>t==="Infinity"?1/0:parseInt(t),"cliProcessor")},globalGroup:{type:"boolean",cli:!1}};o(cbe,"getDefaultValue");dy=class{static{o(this,"Settings")}constructor(e){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{};for(var r in x4)if(x4.hasOwnProperty(r)){var n=x4[r];this[r]=e[r]!==void 0?n.processor?n.processor(e[r]):e[r]:cbe(n)}}reportNonstrict(e,r,n){var i=this.strict;if(typeof i=="function"&&(i=i(e,r,n)),!(!i||i==="ignore")){if(i===!0||i==="error")throw new lt("LaTeX-incompatible input and strict mode is set to 'error': "+(r+" ["+e+"]"),n);i==="warn"?typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+e+"]")):typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+i+"': "+r+" ["+e+"]"))}}useStrictBehavior(e,r,n){var i=this.strict;if(typeof i=="function")try{i=i(e,r,n)}catch{i="error"}return!i||i==="ignore"?!1:i===!0||i==="error"?!0:i==="warn"?(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+e+"]")),!1):(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+i+"': "+r+" ["+e+"]")),!1)}isTrusted(e){if(e.url&&!e.protocol){var r=Jt.protocolFromUrl(e.url);if(r==null)return!1;e.protocol=r}var n=typeof this.trust=="function"?this.trust(e):this.trust;return!!n}},sc=class{static{o(this,"Style")}constructor(e,r,n){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=r,this.cramped=n}sup(){return oc[ube[this.id]]}sub(){return oc[hbe[this.id]]}fracNum(){return oc[fbe[this.id]]}fracDen(){return oc[dbe[this.id]]}cramp(){return oc[pbe[this.id]]}text(){return oc[mbe[this.id]]}isTight(){return this.size>=2}},MC=0,w4=1,kp=2,fu=3,py=4,No=5,Ep=6,Ja=7,oc=[new sc(MC,0,!1),new sc(w4,0,!0),new sc(kp,1,!1),new sc(fu,1,!0),new sc(py,2,!1),new sc(No,2,!0),new sc(Ep,3,!1),new sc(Ja,3,!0)],ube=[py,No,py,No,Ep,Ja,Ep,Ja],hbe=[No,No,No,No,Ja,Ja,Ja,Ja],fbe=[kp,fu,py,No,Ep,Ja,Ep,Ja],dbe=[fu,fu,No,No,Ja,Ja,Ja,Ja],pbe=[w4,w4,fu,fu,No,No,Ja,Ja],mbe=[MC,w4,kp,fu,kp,fu,kp,fu],rr={DISPLAY:oc[MC],TEXT:oc[kp],SCRIPT:oc[py],SCRIPTSCRIPT:oc[Ep]},wC=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];o(gbe,"scriptFromCodepoint");b4=[];wC.forEach(t=>t.blocks.forEach(e=>b4.push(...e)));o(IG,"supportedCodepoint");Tp=80,ybe=o(function(e,r){return"M95,"+(622+e+r)+` c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14 c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54 c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10 s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429 c69,-144,104.5,-217.7,106.5,-221 -l`+s/2.075+" -"+s+` +l`+e/2.075+" -"+e+` c5.3,-9.3,12,-14,20,-14 -H400000v`+(40+s)+`H845.2724 +H400000v`+(40+e)+`H845.2724 s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7 c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z -M`+(834+s)+" "+u+"h400000v"+(40+s)+"h-400000z"},Qqt=function(s,u){return"M263,"+(601+s+u)+`c0.7,0,18,39.7,52,119 +M`+(834+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtMain"),vbe=o(function(e,r){return"M263,"+(601+e+r)+`c0.7,0,18,39.7,52,119 c34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120 c340,-704.7,510.7,-1060.3,512,-1067 -l`+s/2.084+" -"+s+` +l`+e/2.084+" -"+e+` c4.7,-7.3,11,-11,19,-11 -H40000v`+(40+s)+`H1012.3 +H40000v`+(40+e)+`H1012.3 s-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232 c-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1 s-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26 c-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z -M`+(1001+s)+" "+u+"h400000v"+(40+s)+"h-400000z"},Jqt=function(s,u){return"M983 "+(10+s+u)+` -l`+s/3.13+" -"+s+` -c4,-6.7,10,-10,18,-10 H400000v`+(40+s)+` +M`+(1001+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtSize1"),xbe=o(function(e,r){return"M983 "+(10+e+r)+` +l`+e/3.13+" -"+e+` +c4,-6.7,10,-10,18,-10 H400000v`+(40+e)+` H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7 s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744 c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30 c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722 c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5 c53.7,-170.3,84.5,-266.8,92.5,-289.5z -M`+(1001+s)+" "+u+"h400000v"+(40+s)+"h-400000z"},Zqt=function(s,u){return"M424,"+(2398+s+u)+` +M`+(1001+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtSize2"),bbe=o(function(e,r){return"M424,"+(2398+e+r)+` c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514 c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20 s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121 s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081 -l`+s/4.223+" -"+s+`c4,-6.7,10,-10,18,-10 H400000 -v`+(40+s)+`H1014.6 +l`+e/4.223+" -"+e+`c4,-6.7,10,-10,18,-10 H400000 +v`+(40+e)+`H1014.6 s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185 c-2,6,-10,9,-24,9 -c-8,0,-12,-0.7,-12,-2z M`+(1001+s)+" "+u+` -h400000v`+(40+s)+"h-400000z"},eHt=function(s,u){return"M473,"+(2713+s+u)+` -c339.3,-1799.3,509.3,-2700,510,-2702 l`+s/5.298+" -"+s+` -c3.3,-7.3,9.3,-11,18,-11 H400000v`+(40+s)+`H1017.7 +c-8,0,-12,-0.7,-12,-2z M`+(1001+e)+" "+r+` +h400000v`+(40+e)+"h-400000z"},"sqrtSize3"),wbe=o(function(e,r){return"M473,"+(2713+e+r)+` +c339.3,-1799.3,509.3,-2700,510,-2702 l`+e/5.298+" -"+e+` +c3.3,-7.3,9.3,-11,18,-11 H400000v`+(40+e)+`H1017.7 s-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9 c-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200 c0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26 s76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104, -606zM`+(1001+s)+" "+u+"h400000v"+(40+s)+"H1017.7z"},tHt=function(s){var u=s/2;return"M400000 "+s+" H0 L"+u+" 0 l65 45 L145 "+(s-80)+" H400000z"},nHt=function(s,u,d){var p=d-54-u-s;return"M702 "+(s+u)+"H400000"+(40+s)+` -H742v`+p+`l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1 +606zM`+(1001+e)+" "+r+"h400000v"+(40+e)+"H1017.7z"},"sqrtSize4"),Tbe=o(function(e){var r=e/2;return"M400000 "+e+" H0 L"+r+" 0 l65 45 L145 "+(e-80)+" H400000z"},"phasePath"),kbe=o(function(e,r,n){var i=n-54-r-e;return"M702 "+(e+r)+"H400000"+(40+e)+` +H742v`+i+`l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1 h-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170 c-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667 -219 661 l218 661zM702 `+u+"H400000v"+(40+s)+"H742z"},rHt=function(s,u,d){u=1e3*u;var p="";switch(s){case"sqrtMain":p=Xqt(u,OD);break;case"sqrtSize1":p=Qqt(u,OD);break;case"sqrtSize2":p=Jqt(u,OD);break;case"sqrtSize3":p=Zqt(u,OD);break;case"sqrtSize4":p=eHt(u,OD);break;case"sqrtTall":p=nHt(u,OD,d)}return p},iHt=function(s,u){switch(s){case"⎜":return"M291 0 H417 V"+u+" H291z M291 0 H417 V"+u+" H291z";case"∣":return"M145 0 H188 V"+u+" H145z M145 0 H188 V"+u+" H145z";case"∥":return"M145 0 H188 V"+u+" H145z M145 0 H188 V"+u+" H145z"+("M367 0 H410 V"+u+" H367z M367 0 H410 V"+u+" H367z");case"⎟":return"M457 0 H583 V"+u+" H457z M457 0 H583 V"+u+" H457z";case"⎢":return"M319 0 H403 V"+u+" H319z M319 0 H403 V"+u+" H319z";case"⎥":return"M263 0 H347 V"+u+" H263z M263 0 H347 V"+u+" H263z";case"⎪":return"M384 0 H504 V"+u+" H384z M384 0 H504 V"+u+" H384z";case"⏐":return"M312 0 H355 V"+u+" H312z M312 0 H355 V"+u+" H312z";case"‖":return"M257 0 H300 V"+u+" H257z M257 0 H300 V"+u+" H257z"+("M478 0 H521 V"+u+" H478z M478 0 H521 V"+u+" H478z");default:return""}},W$e={doubleleftarrow:`M262 157 +219 661 l218 661zM702 `+r+"H400000v"+(40+e)+"H742z"},"sqrtTall"),Ebe=o(function(e,r,n){r=1e3*r;var i="";switch(e){case"sqrtMain":i=ybe(r,Tp);break;case"sqrtSize1":i=vbe(r,Tp);break;case"sqrtSize2":i=xbe(r,Tp);break;case"sqrtSize3":i=bbe(r,Tp);break;case"sqrtSize4":i=wbe(r,Tp);break;case"sqrtTall":i=kbe(r,Tp,n)}return i},"sqrtPath"),Sbe=o(function(e,r){switch(e){case"\u239C":return"M291 0 H417 V"+r+" H291z M291 0 H417 V"+r+" H291z";case"\u2223":return"M145 0 H188 V"+r+" H145z M145 0 H188 V"+r+" H145z";case"\u2225":return"M145 0 H188 V"+r+" H145z M145 0 H188 V"+r+" H145z"+("M367 0 H410 V"+r+" H367z M367 0 H410 V"+r+" H367z");case"\u239F":return"M457 0 H583 V"+r+" H457z M457 0 H583 V"+r+" H457z";case"\u23A2":return"M319 0 H403 V"+r+" H319z M319 0 H403 V"+r+" H319z";case"\u23A5":return"M263 0 H347 V"+r+" H263z M263 0 H347 V"+r+" H263z";case"\u23AA":return"M384 0 H504 V"+r+" H384z M384 0 H504 V"+r+" H384z";case"\u23D0":return"M312 0 H355 V"+r+" H312z M312 0 H355 V"+r+" H312z";case"\u2016":return"M257 0 H300 V"+r+" H257z M257 0 H300 V"+r+" H257z"+("M478 0 H521 V"+r+" H478z M478 0 H521 V"+r+" H478z");default:return""}},"innerPath"),rG={doubleleftarrow:`M262 157 l10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5 @@ -313,85 +236,242 @@ M93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z` c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, -231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z -M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`},sHt=function(s,u){switch(s){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+u+` v1759 h347 v-84 -H403z M403 1759 V0 H319 V1759 v`+u+" v1759 h84z";case"rbrack":return"M347 1759 V0 H0 V84 H263 V1759 v"+u+` v1759 H0 v84 H347z -M347 1759 V0 H263 V1759 v`+u+" v1759 h84z";case"vert":return"M145 15 v585 v"+u+` v585 c2.667,10,9.667,15,21,15 -c10,0,16.667,-5,20,-15 v-585 v`+-u+` v-585 c-2.667,-10,-9.667,-15,-21,-15 -c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+u+" v585 h43z";case"doublevert":return"M145 15 v585 v"+u+` v585 c2.667,10,9.667,15,21,15 -c10,0,16.667,-5,20,-15 v-585 v`+-u+` v-585 c-2.667,-10,-9.667,-15,-21,-15 -c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+u+` v585 h43z -M367 15 v585 v`+u+` v585 c2.667,10,9.667,15,21,15 -c10,0,16.667,-5,20,-15 v-585 v`+-u+` v-585 c-2.667,-10,-9.667,-15,-21,-15 -c-10,0,-16.667,5,-20,15z M410 15 H367 v585 v`+u+" v585 h43z";case"lfloor":return"M319 602 V0 H403 V602 v"+u+` v1715 h263 v84 H319z -MM319 602 V0 H403 V602 v`+u+" v1715 H319z";case"rfloor":return"M319 602 V0 H403 V602 v"+u+` v1799 H0 v-84 H319z -MM319 602 V0 H403 V602 v`+u+" v1715 H319z";case"lceil":return"M403 1759 V84 H666 V0 H319 V1759 v"+u+` v602 h84z -M403 1759 V0 H319 V1759 v`+u+" v602 h84z";case"rceil":return"M347 1759 V0 H0 V84 H263 V1759 v"+u+` v602 h84z -M347 1759 V0 h-84 V1759 v`+u+" v602 h84z";case"lparen":return`M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1 +M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`},Cbe=o(function(e,r){switch(e){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v1759 h347 v-84 +H403z M403 1759 V0 H319 V1759 v`+r+" v1759 h84z";case"rbrack":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v1759 H0 v84 H347z +M347 1759 V0 H263 V1759 v`+r+" v1759 h84z";case"vert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+r+" v585 h43z";case"doublevert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+r+` v585 h43z +M367 15 v585 v`+r+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M410 15 H367 v585 v`+r+" v585 h43z";case"lfloor":return"M319 602 V0 H403 V602 v"+r+` v1715 h263 v84 H319z +MM319 602 V0 H403 V602 v`+r+" v1715 H319z";case"rfloor":return"M319 602 V0 H403 V602 v"+r+` v1799 H0 v-84 H319z +MM319 602 V0 H403 V602 v`+r+" v1715 H319z";case"lceil":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v602 h84z +M403 1759 V0 H319 V1759 v`+r+" v602 h84z";case"rceil":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v602 h84z +M347 1759 V0 h-84 V1759 v`+r+" v602 h84z";case"lparen":return`M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1 c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349, --36,557 l0,`+(u+84)+`c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210, +-36,557 l0,`+(r+84)+`c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210, 949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9 c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5, -544.7,-112.5,-882c-2,-104,-3,-167,-3,-189 -l0,-`+(u+92)+`c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3, +l0,-`+(r+92)+`c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3, -210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z`;case"rparen":return`M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3, 63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5 -c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,`+(u+9)+` +c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,`+(r+9)+` c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664 c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11 c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17 c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558 -l0,-`+(u+144)+`c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7, --470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z`;default:throw new Error("Unknown stretchy delimiter.")}};class oR{constructor(s){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=s,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}hasClass(s){return Ya.contains(this.classes,s)}toNode(){for(var s=document.createDocumentFragment(),u=0;uu.toText();return this.children.map(s).join("")}}var K4={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},aQ={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},Y$e={Å:"A",Ð:"D",Þ:"o",å:"a",ð:"d",þ:"o",А:"A",Б:"B",В:"B",Г:"F",Д:"A",Е:"E",Ж:"K",З:"3",И:"N",Й:"N",К:"K",Л:"N",М:"M",Н:"H",О:"O",П:"N",Р:"P",С:"C",Т:"T",У:"y",Ф:"O",Х:"X",Ц:"U",Ч:"h",Ш:"W",Щ:"W",Ъ:"B",Ы:"X",Ь:"B",Э:"3",Ю:"X",Я:"R",а:"a",б:"b",в:"a",г:"r",д:"y",е:"e",ж:"m",з:"e",и:"n",й:"n",к:"n",л:"n",м:"m",н:"n",о:"o",п:"n",р:"p",с:"c",т:"o",у:"y",ф:"b",х:"x",ц:"n",ч:"n",ш:"w",щ:"w",ъ:"a",ы:"m",ь:"a",э:"e",ю:"m",я:"r"};function aHt(i,s){K4[i]=s}function J2e(i,s,u){if(!K4[s])throw new Error("Font metrics not found for font: "+s+".");var d=i.charCodeAt(0),p=K4[s][d];if(!p&&i[0]in Y$e&&(d=Y$e[i[0]].charCodeAt(0),p=K4[s][d]),!p&&u==="text"&&K$e(d)&&(p=K4[s][77]),p)return{depth:p[0],height:p[1],italic:p[2],skew:p[3],width:p[4]}}var Z2e={};function oHt(i){var s;if(i>=5?s=0:i>=3?s=1:s=2,!Z2e[s]){var u=Z2e[s]={cssEmPerMu:aQ.quad[s]/18};for(var d in aQ)aQ.hasOwnProperty(d)&&(u[d]=aQ[d][s])}return Z2e[s]}var cHt=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],X$e=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],Q$e=function(s,u){return u.size<2?s:cHt[s-1][u.size-1]};class M7{constructor(s){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=s.style,this.color=s.color,this.size=s.size||M7.BASESIZE,this.textSize=s.textSize||this.size,this.phantom=!!s.phantom,this.font=s.font||"",this.fontFamily=s.fontFamily||"",this.fontWeight=s.fontWeight||"",this.fontShape=s.fontShape||"",this.sizeMultiplier=X$e[this.size-1],this.maxSize=s.maxSize,this.minRuleThickness=s.minRuleThickness,this._fontMetrics=void 0}extend(s){var u={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};for(var d in s)s.hasOwnProperty(d)&&(u[d]=s[d]);return new M7(u)}havingStyle(s){return this.style===s?this:this.extend({style:s,size:Q$e(this.textSize,s)})}havingCrampedStyle(){return this.havingStyle(this.style.cramp())}havingSize(s){return this.size===s&&this.textSize===s?this:this.extend({style:this.style.text(),size:s,textSize:s,sizeMultiplier:X$e[s-1]})}havingBaseStyle(s){s=s||this.style.text();var u=Q$e(M7.BASESIZE,s);return this.size===u&&this.textSize===M7.BASESIZE&&this.style===s?this:this.extend({style:s,size:u})}havingBaseSizing(){var s;switch(this.style.id){case 4:case 5:s=3;break;case 6:case 7:s=1;break;default:s=6}return this.extend({style:this.style.text(),size:s})}withColor(s){return this.extend({color:s})}withPhantom(){return this.extend({phantom:!0})}withFont(s){return this.extend({font:s})}withTextFontFamily(s){return this.extend({fontFamily:s,font:""})}withTextFontWeight(s){return this.extend({fontWeight:s,font:""})}withTextFontShape(s){return this.extend({fontShape:s,font:""})}sizingClasses(s){return s.size!==this.size?["sizing","reset-size"+s.size,"size"+this.size]:[]}baseSizingClasses(){return this.size!==M7.BASESIZE?["sizing","reset-size"+this.size,"size"+M7.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=oHt(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}}M7.BASESIZE=6;var ebe={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:803/800,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:803/800},uHt={ex:!0,em:!0,mu:!0},J$e=function(s){return typeof s!="string"&&(s=s.unit),s in ebe||s in uHt||s==="ex"},Uh=function(s,u){var d;if(s.unit in ebe)d=ebe[s.unit]/u.fontMetrics().ptPerEm/u.sizeMultiplier;else if(s.unit==="mu")d=u.fontMetrics().cssEmPerMu;else{var p;if(u.style.isTight()?p=u.havingStyle(u.style.text()):p=u,s.unit==="ex")d=p.fontMetrics().xHeight;else if(s.unit==="em")d=p.fontMetrics().quad;else throw new Ci("Invalid unit: '"+s.unit+"'");p!==u&&(d*=p.sizeMultiplier/u.sizeMultiplier)}return Math.min(s.number*d,u.maxSize)},Ri=function(s){return+s.toFixed(4)+"em"},T9=function(s){return s.filter(u=>u).join(" ")},Z$e=function(s,u,d){if(this.classes=s||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=d||{},u){u.style.isTight()&&this.classes.push("mtight");var p=u.getColor();p&&(this.style.color=p)}},eze=function(s){var u=document.createElement(s);u.className=T9(this.classes);for(var d in this.style)this.style.hasOwnProperty(d)&&(u.style[d]=this.style[d]);for(var p in this.attributes)this.attributes.hasOwnProperty(p)&&u.setAttribute(p,this.attributes[p]);for(var v=0;v",u};class cR{constructor(s,u,d,p){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,Z$e.call(this,s,d,p),this.children=u||[]}setAttribute(s,u){this.attributes[s]=u}hasClass(s){return Ya.contains(this.classes,s)}toNode(){return eze.call(this,"span")}toMarkup(){return tze.call(this,"span")}}class tbe{constructor(s,u,d,p){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,Z$e.call(this,u,p),this.children=d||[],this.setAttribute("href",s)}setAttribute(s,u){this.attributes[s]=u}hasClass(s){return Ya.contains(this.classes,s)}toNode(){return eze.call(this,"a")}toMarkup(){return tze.call(this,"a")}}class lHt{constructor(s,u,d){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=u,this.src=s,this.classes=["mord"],this.style=d}hasClass(s){return Ya.contains(this.classes,s)}toNode(){var s=document.createElement("img");s.src=this.src,s.alt=this.alt,s.className="mord";for(var u in this.style)this.style.hasOwnProperty(u)&&(s.style[u]=this.style[u]);return s}toMarkup(){var s=""+this.alt+"0&&(u=document.createElement("span"),u.style.marginRight=Ri(this.italic)),this.classes.length>0&&(u=u||document.createElement("span"),u.className=T9(this.classes));for(var d in this.style)this.style.hasOwnProperty(d)&&(u=u||document.createElement("span"),u.style[d]=this.style[d]);return u?(u.appendChild(s),u):s}toMarkup(){var s=!1,u="0&&(d+="margin-right:"+this.italic+"em;");for(var p in this.style)this.style.hasOwnProperty(p)&&(d+=Ya.hyphenate(p)+":"+this.style[p]+";");d&&(s=!0,u+=' style="'+Ya.escape(d)+'"');var v=Ya.escape(this.text);return s?(u+=">",u+=v,u+="",u):v}}class D7{constructor(s,u){this.children=void 0,this.attributes=void 0,this.children=s||[],this.attributes=u||{}}toNode(){var s="http://www.w3.org/2000/svg",u=document.createElementNS(s,"svg");for(var d in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,d)&&u.setAttribute(d,this.attributes[d]);for(var p=0;p":""}}class nbe{constructor(s){this.attributes=void 0,this.attributes=s||{}}toNode(){var s="http://www.w3.org/2000/svg",u=document.createElementNS(s,"line");for(var d in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,d)&&u.setAttribute(d,this.attributes[d]);return u}toMarkup(){var s=" but got "+String(i)+".")}var dHt={bin:1,close:1,inner:1,open:1,punct:1,rel:1},gHt={"accent-token":1,mathord:1,"op-token":1,spacing:1,textord:1},Ul={math:{},text:{}};function we(i,s,u,d,p,v){Ul[i][p]={font:s,group:u,replace:d},v&&d&&(Ul[i][d]=Ul[i][p])}var Ae="math",si="text",Ue="main",$t="ams",wh="accent-token",ls="bin",Dp="close",ND="inner",Ca="mathord",N0="op-token",hm="open",oQ="punct",Ht="rel",I7="spacing",mn="textord";we(Ae,Ue,Ht,"≡","\\equiv",!0),we(Ae,Ue,Ht,"≺","\\prec",!0),we(Ae,Ue,Ht,"≻","\\succ",!0),we(Ae,Ue,Ht,"∼","\\sim",!0),we(Ae,Ue,Ht,"⊥","\\perp"),we(Ae,Ue,Ht,"⪯","\\preceq",!0),we(Ae,Ue,Ht,"⪰","\\succeq",!0),we(Ae,Ue,Ht,"≃","\\simeq",!0),we(Ae,Ue,Ht,"∣","\\mid",!0),we(Ae,Ue,Ht,"≪","\\ll",!0),we(Ae,Ue,Ht,"≫","\\gg",!0),we(Ae,Ue,Ht,"≍","\\asymp",!0),we(Ae,Ue,Ht,"∥","\\parallel"),we(Ae,Ue,Ht,"⋈","\\bowtie",!0),we(Ae,Ue,Ht,"⌣","\\smile",!0),we(Ae,Ue,Ht,"⊑","\\sqsubseteq",!0),we(Ae,Ue,Ht,"⊒","\\sqsupseteq",!0),we(Ae,Ue,Ht,"≐","\\doteq",!0),we(Ae,Ue,Ht,"⌢","\\frown",!0),we(Ae,Ue,Ht,"∋","\\ni",!0),we(Ae,Ue,Ht,"∝","\\propto",!0),we(Ae,Ue,Ht,"⊢","\\vdash",!0),we(Ae,Ue,Ht,"⊣","\\dashv",!0),we(Ae,Ue,Ht,"∋","\\owns"),we(Ae,Ue,oQ,".","\\ldotp"),we(Ae,Ue,oQ,"⋅","\\cdotp"),we(Ae,Ue,mn,"#","\\#"),we(si,Ue,mn,"#","\\#"),we(Ae,Ue,mn,"&","\\&"),we(si,Ue,mn,"&","\\&"),we(Ae,Ue,mn,"ℵ","\\aleph",!0),we(Ae,Ue,mn,"∀","\\forall",!0),we(Ae,Ue,mn,"ℏ","\\hbar",!0),we(Ae,Ue,mn,"∃","\\exists",!0),we(Ae,Ue,mn,"∇","\\nabla",!0),we(Ae,Ue,mn,"♭","\\flat",!0),we(Ae,Ue,mn,"ℓ","\\ell",!0),we(Ae,Ue,mn,"♮","\\natural",!0),we(Ae,Ue,mn,"♣","\\clubsuit",!0),we(Ae,Ue,mn,"℘","\\wp",!0),we(Ae,Ue,mn,"♯","\\sharp",!0),we(Ae,Ue,mn,"♢","\\diamondsuit",!0),we(Ae,Ue,mn,"ℜ","\\Re",!0),we(Ae,Ue,mn,"♡","\\heartsuit",!0),we(Ae,Ue,mn,"ℑ","\\Im",!0),we(Ae,Ue,mn,"♠","\\spadesuit",!0),we(Ae,Ue,mn,"§","\\S",!0),we(si,Ue,mn,"§","\\S"),we(Ae,Ue,mn,"¶","\\P",!0),we(si,Ue,mn,"¶","\\P"),we(Ae,Ue,mn,"†","\\dag"),we(si,Ue,mn,"†","\\dag"),we(si,Ue,mn,"†","\\textdagger"),we(Ae,Ue,mn,"‡","\\ddag"),we(si,Ue,mn,"‡","\\ddag"),we(si,Ue,mn,"‡","\\textdaggerdbl"),we(Ae,Ue,Dp,"⎱","\\rmoustache",!0),we(Ae,Ue,hm,"⎰","\\lmoustache",!0),we(Ae,Ue,Dp,"⟯","\\rgroup",!0),we(Ae,Ue,hm,"⟮","\\lgroup",!0),we(Ae,Ue,ls,"∓","\\mp",!0),we(Ae,Ue,ls,"⊖","\\ominus",!0),we(Ae,Ue,ls,"⊎","\\uplus",!0),we(Ae,Ue,ls,"⊓","\\sqcap",!0),we(Ae,Ue,ls,"∗","\\ast"),we(Ae,Ue,ls,"⊔","\\sqcup",!0),we(Ae,Ue,ls,"◯","\\bigcirc",!0),we(Ae,Ue,ls,"∙","\\bullet",!0),we(Ae,Ue,ls,"‡","\\ddagger"),we(Ae,Ue,ls,"≀","\\wr",!0),we(Ae,Ue,ls,"⨿","\\amalg"),we(Ae,Ue,ls,"&","\\And"),we(Ae,Ue,Ht,"⟵","\\longleftarrow",!0),we(Ae,Ue,Ht,"⇐","\\Leftarrow",!0),we(Ae,Ue,Ht,"⟸","\\Longleftarrow",!0),we(Ae,Ue,Ht,"⟶","\\longrightarrow",!0),we(Ae,Ue,Ht,"⇒","\\Rightarrow",!0),we(Ae,Ue,Ht,"⟹","\\Longrightarrow",!0),we(Ae,Ue,Ht,"↔","\\leftrightarrow",!0),we(Ae,Ue,Ht,"⟷","\\longleftrightarrow",!0),we(Ae,Ue,Ht,"⇔","\\Leftrightarrow",!0),we(Ae,Ue,Ht,"⟺","\\Longleftrightarrow",!0),we(Ae,Ue,Ht,"↦","\\mapsto",!0),we(Ae,Ue,Ht,"⟼","\\longmapsto",!0),we(Ae,Ue,Ht,"↗","\\nearrow",!0),we(Ae,Ue,Ht,"↩","\\hookleftarrow",!0),we(Ae,Ue,Ht,"↪","\\hookrightarrow",!0),we(Ae,Ue,Ht,"↘","\\searrow",!0),we(Ae,Ue,Ht,"↼","\\leftharpoonup",!0),we(Ae,Ue,Ht,"⇀","\\rightharpoonup",!0),we(Ae,Ue,Ht,"↙","\\swarrow",!0),we(Ae,Ue,Ht,"↽","\\leftharpoondown",!0),we(Ae,Ue,Ht,"⇁","\\rightharpoondown",!0),we(Ae,Ue,Ht,"↖","\\nwarrow",!0),we(Ae,Ue,Ht,"⇌","\\rightleftharpoons",!0),we(Ae,$t,Ht,"≮","\\nless",!0),we(Ae,$t,Ht,"","\\@nleqslant"),we(Ae,$t,Ht,"","\\@nleqq"),we(Ae,$t,Ht,"⪇","\\lneq",!0),we(Ae,$t,Ht,"≨","\\lneqq",!0),we(Ae,$t,Ht,"","\\@lvertneqq"),we(Ae,$t,Ht,"⋦","\\lnsim",!0),we(Ae,$t,Ht,"⪉","\\lnapprox",!0),we(Ae,$t,Ht,"⊀","\\nprec",!0),we(Ae,$t,Ht,"⋠","\\npreceq",!0),we(Ae,$t,Ht,"⋨","\\precnsim",!0),we(Ae,$t,Ht,"⪹","\\precnapprox",!0),we(Ae,$t,Ht,"≁","\\nsim",!0),we(Ae,$t,Ht,"","\\@nshortmid"),we(Ae,$t,Ht,"∤","\\nmid",!0),we(Ae,$t,Ht,"⊬","\\nvdash",!0),we(Ae,$t,Ht,"⊭","\\nvDash",!0),we(Ae,$t,Ht,"⋪","\\ntriangleleft"),we(Ae,$t,Ht,"⋬","\\ntrianglelefteq",!0),we(Ae,$t,Ht,"⊊","\\subsetneq",!0),we(Ae,$t,Ht,"","\\@varsubsetneq"),we(Ae,$t,Ht,"⫋","\\subsetneqq",!0),we(Ae,$t,Ht,"","\\@varsubsetneqq"),we(Ae,$t,Ht,"≯","\\ngtr",!0),we(Ae,$t,Ht,"","\\@ngeqslant"),we(Ae,$t,Ht,"","\\@ngeqq"),we(Ae,$t,Ht,"⪈","\\gneq",!0),we(Ae,$t,Ht,"≩","\\gneqq",!0),we(Ae,$t,Ht,"","\\@gvertneqq"),we(Ae,$t,Ht,"⋧","\\gnsim",!0),we(Ae,$t,Ht,"⪊","\\gnapprox",!0),we(Ae,$t,Ht,"⊁","\\nsucc",!0),we(Ae,$t,Ht,"⋡","\\nsucceq",!0),we(Ae,$t,Ht,"⋩","\\succnsim",!0),we(Ae,$t,Ht,"⪺","\\succnapprox",!0),we(Ae,$t,Ht,"≆","\\ncong",!0),we(Ae,$t,Ht,"","\\@nshortparallel"),we(Ae,$t,Ht,"∦","\\nparallel",!0),we(Ae,$t,Ht,"⊯","\\nVDash",!0),we(Ae,$t,Ht,"⋫","\\ntriangleright"),we(Ae,$t,Ht,"⋭","\\ntrianglerighteq",!0),we(Ae,$t,Ht,"","\\@nsupseteqq"),we(Ae,$t,Ht,"⊋","\\supsetneq",!0),we(Ae,$t,Ht,"","\\@varsupsetneq"),we(Ae,$t,Ht,"⫌","\\supsetneqq",!0),we(Ae,$t,Ht,"","\\@varsupsetneqq"),we(Ae,$t,Ht,"⊮","\\nVdash",!0),we(Ae,$t,Ht,"⪵","\\precneqq",!0),we(Ae,$t,Ht,"⪶","\\succneqq",!0),we(Ae,$t,Ht,"","\\@nsubseteqq"),we(Ae,$t,ls,"⊴","\\unlhd"),we(Ae,$t,ls,"⊵","\\unrhd"),we(Ae,$t,Ht,"↚","\\nleftarrow",!0),we(Ae,$t,Ht,"↛","\\nrightarrow",!0),we(Ae,$t,Ht,"⇍","\\nLeftarrow",!0),we(Ae,$t,Ht,"⇏","\\nRightarrow",!0),we(Ae,$t,Ht,"↮","\\nleftrightarrow",!0),we(Ae,$t,Ht,"⇎","\\nLeftrightarrow",!0),we(Ae,$t,Ht,"△","\\vartriangle"),we(Ae,$t,mn,"ℏ","\\hslash"),we(Ae,$t,mn,"▽","\\triangledown"),we(Ae,$t,mn,"◊","\\lozenge"),we(Ae,$t,mn,"Ⓢ","\\circledS"),we(Ae,$t,mn,"®","\\circledR"),we(si,$t,mn,"®","\\circledR"),we(Ae,$t,mn,"∡","\\measuredangle",!0),we(Ae,$t,mn,"∄","\\nexists"),we(Ae,$t,mn,"℧","\\mho"),we(Ae,$t,mn,"Ⅎ","\\Finv",!0),we(Ae,$t,mn,"⅁","\\Game",!0),we(Ae,$t,mn,"‵","\\backprime"),we(Ae,$t,mn,"▲","\\blacktriangle"),we(Ae,$t,mn,"▼","\\blacktriangledown"),we(Ae,$t,mn,"■","\\blacksquare"),we(Ae,$t,mn,"⧫","\\blacklozenge"),we(Ae,$t,mn,"★","\\bigstar"),we(Ae,$t,mn,"∢","\\sphericalangle",!0),we(Ae,$t,mn,"∁","\\complement",!0),we(Ae,$t,mn,"ð","\\eth",!0),we(si,Ue,mn,"ð","ð"),we(Ae,$t,mn,"╱","\\diagup"),we(Ae,$t,mn,"╲","\\diagdown"),we(Ae,$t,mn,"□","\\square"),we(Ae,$t,mn,"□","\\Box"),we(Ae,$t,mn,"◊","\\Diamond"),we(Ae,$t,mn,"¥","\\yen",!0),we(si,$t,mn,"¥","\\yen",!0),we(Ae,$t,mn,"✓","\\checkmark",!0),we(si,$t,mn,"✓","\\checkmark"),we(Ae,$t,mn,"ℶ","\\beth",!0),we(Ae,$t,mn,"ℸ","\\daleth",!0),we(Ae,$t,mn,"ℷ","\\gimel",!0),we(Ae,$t,mn,"ϝ","\\digamma",!0),we(Ae,$t,mn,"ϰ","\\varkappa"),we(Ae,$t,hm,"┌","\\@ulcorner",!0),we(Ae,$t,Dp,"┐","\\@urcorner",!0),we(Ae,$t,hm,"└","\\@llcorner",!0),we(Ae,$t,Dp,"┘","\\@lrcorner",!0),we(Ae,$t,Ht,"≦","\\leqq",!0),we(Ae,$t,Ht,"⩽","\\leqslant",!0),we(Ae,$t,Ht,"⪕","\\eqslantless",!0),we(Ae,$t,Ht,"≲","\\lesssim",!0),we(Ae,$t,Ht,"⪅","\\lessapprox",!0),we(Ae,$t,Ht,"≊","\\approxeq",!0),we(Ae,$t,ls,"⋖","\\lessdot"),we(Ae,$t,Ht,"⋘","\\lll",!0),we(Ae,$t,Ht,"≶","\\lessgtr",!0),we(Ae,$t,Ht,"⋚","\\lesseqgtr",!0),we(Ae,$t,Ht,"⪋","\\lesseqqgtr",!0),we(Ae,$t,Ht,"≑","\\doteqdot"),we(Ae,$t,Ht,"≓","\\risingdotseq",!0),we(Ae,$t,Ht,"≒","\\fallingdotseq",!0),we(Ae,$t,Ht,"∽","\\backsim",!0),we(Ae,$t,Ht,"⋍","\\backsimeq",!0),we(Ae,$t,Ht,"⫅","\\subseteqq",!0),we(Ae,$t,Ht,"⋐","\\Subset",!0),we(Ae,$t,Ht,"⊏","\\sqsubset",!0),we(Ae,$t,Ht,"≼","\\preccurlyeq",!0),we(Ae,$t,Ht,"⋞","\\curlyeqprec",!0),we(Ae,$t,Ht,"≾","\\precsim",!0),we(Ae,$t,Ht,"⪷","\\precapprox",!0),we(Ae,$t,Ht,"⊲","\\vartriangleleft"),we(Ae,$t,Ht,"⊴","\\trianglelefteq"),we(Ae,$t,Ht,"⊨","\\vDash",!0),we(Ae,$t,Ht,"⊪","\\Vvdash",!0),we(Ae,$t,Ht,"⌣","\\smallsmile"),we(Ae,$t,Ht,"⌢","\\smallfrown"),we(Ae,$t,Ht,"≏","\\bumpeq",!0),we(Ae,$t,Ht,"≎","\\Bumpeq",!0),we(Ae,$t,Ht,"≧","\\geqq",!0),we(Ae,$t,Ht,"⩾","\\geqslant",!0),we(Ae,$t,Ht,"⪖","\\eqslantgtr",!0),we(Ae,$t,Ht,"≳","\\gtrsim",!0),we(Ae,$t,Ht,"⪆","\\gtrapprox",!0),we(Ae,$t,ls,"⋗","\\gtrdot"),we(Ae,$t,Ht,"⋙","\\ggg",!0),we(Ae,$t,Ht,"≷","\\gtrless",!0),we(Ae,$t,Ht,"⋛","\\gtreqless",!0),we(Ae,$t,Ht,"⪌","\\gtreqqless",!0),we(Ae,$t,Ht,"≖","\\eqcirc",!0),we(Ae,$t,Ht,"≗","\\circeq",!0),we(Ae,$t,Ht,"≜","\\triangleq",!0),we(Ae,$t,Ht,"∼","\\thicksim"),we(Ae,$t,Ht,"≈","\\thickapprox"),we(Ae,$t,Ht,"⫆","\\supseteqq",!0),we(Ae,$t,Ht,"⋑","\\Supset",!0),we(Ae,$t,Ht,"⊐","\\sqsupset",!0),we(Ae,$t,Ht,"≽","\\succcurlyeq",!0),we(Ae,$t,Ht,"⋟","\\curlyeqsucc",!0),we(Ae,$t,Ht,"≿","\\succsim",!0),we(Ae,$t,Ht,"⪸","\\succapprox",!0),we(Ae,$t,Ht,"⊳","\\vartriangleright"),we(Ae,$t,Ht,"⊵","\\trianglerighteq"),we(Ae,$t,Ht,"⊩","\\Vdash",!0),we(Ae,$t,Ht,"∣","\\shortmid"),we(Ae,$t,Ht,"∥","\\shortparallel"),we(Ae,$t,Ht,"≬","\\between",!0),we(Ae,$t,Ht,"⋔","\\pitchfork",!0),we(Ae,$t,Ht,"∝","\\varpropto"),we(Ae,$t,Ht,"◀","\\blacktriangleleft"),we(Ae,$t,Ht,"∴","\\therefore",!0),we(Ae,$t,Ht,"∍","\\backepsilon"),we(Ae,$t,Ht,"▶","\\blacktriangleright"),we(Ae,$t,Ht,"∵","\\because",!0),we(Ae,$t,Ht,"⋘","\\llless"),we(Ae,$t,Ht,"⋙","\\gggtr"),we(Ae,$t,ls,"⊲","\\lhd"),we(Ae,$t,ls,"⊳","\\rhd"),we(Ae,$t,Ht,"≂","\\eqsim",!0),we(Ae,Ue,Ht,"⋈","\\Join"),we(Ae,$t,Ht,"≑","\\Doteq",!0),we(Ae,$t,ls,"∔","\\dotplus",!0),we(Ae,$t,ls,"∖","\\smallsetminus"),we(Ae,$t,ls,"⋒","\\Cap",!0),we(Ae,$t,ls,"⋓","\\Cup",!0),we(Ae,$t,ls,"⩞","\\doublebarwedge",!0),we(Ae,$t,ls,"⊟","\\boxminus",!0),we(Ae,$t,ls,"⊞","\\boxplus",!0),we(Ae,$t,ls,"⋇","\\divideontimes",!0),we(Ae,$t,ls,"⋉","\\ltimes",!0),we(Ae,$t,ls,"⋊","\\rtimes",!0),we(Ae,$t,ls,"⋋","\\leftthreetimes",!0),we(Ae,$t,ls,"⋌","\\rightthreetimes",!0),we(Ae,$t,ls,"⋏","\\curlywedge",!0),we(Ae,$t,ls,"⋎","\\curlyvee",!0),we(Ae,$t,ls,"⊝","\\circleddash",!0),we(Ae,$t,ls,"⊛","\\circledast",!0),we(Ae,$t,ls,"⋅","\\centerdot"),we(Ae,$t,ls,"⊺","\\intercal",!0),we(Ae,$t,ls,"⋒","\\doublecap"),we(Ae,$t,ls,"⋓","\\doublecup"),we(Ae,$t,ls,"⊠","\\boxtimes",!0),we(Ae,$t,Ht,"⇢","\\dashrightarrow",!0),we(Ae,$t,Ht,"⇠","\\dashleftarrow",!0),we(Ae,$t,Ht,"⇇","\\leftleftarrows",!0),we(Ae,$t,Ht,"⇆","\\leftrightarrows",!0),we(Ae,$t,Ht,"⇚","\\Lleftarrow",!0),we(Ae,$t,Ht,"↞","\\twoheadleftarrow",!0),we(Ae,$t,Ht,"↢","\\leftarrowtail",!0),we(Ae,$t,Ht,"↫","\\looparrowleft",!0),we(Ae,$t,Ht,"⇋","\\leftrightharpoons",!0),we(Ae,$t,Ht,"↶","\\curvearrowleft",!0),we(Ae,$t,Ht,"↺","\\circlearrowleft",!0),we(Ae,$t,Ht,"↰","\\Lsh",!0),we(Ae,$t,Ht,"⇈","\\upuparrows",!0),we(Ae,$t,Ht,"↿","\\upharpoonleft",!0),we(Ae,$t,Ht,"⇃","\\downharpoonleft",!0),we(Ae,Ue,Ht,"⊶","\\origof",!0),we(Ae,Ue,Ht,"⊷","\\imageof",!0),we(Ae,$t,Ht,"⊸","\\multimap",!0),we(Ae,$t,Ht,"↭","\\leftrightsquigarrow",!0),we(Ae,$t,Ht,"⇉","\\rightrightarrows",!0),we(Ae,$t,Ht,"⇄","\\rightleftarrows",!0),we(Ae,$t,Ht,"↠","\\twoheadrightarrow",!0),we(Ae,$t,Ht,"↣","\\rightarrowtail",!0),we(Ae,$t,Ht,"↬","\\looparrowright",!0),we(Ae,$t,Ht,"↷","\\curvearrowright",!0),we(Ae,$t,Ht,"↻","\\circlearrowright",!0),we(Ae,$t,Ht,"↱","\\Rsh",!0),we(Ae,$t,Ht,"⇊","\\downdownarrows",!0),we(Ae,$t,Ht,"↾","\\upharpoonright",!0),we(Ae,$t,Ht,"⇂","\\downharpoonright",!0),we(Ae,$t,Ht,"⇝","\\rightsquigarrow",!0),we(Ae,$t,Ht,"⇝","\\leadsto"),we(Ae,$t,Ht,"⇛","\\Rrightarrow",!0),we(Ae,$t,Ht,"↾","\\restriction"),we(Ae,Ue,mn,"‘","`"),we(Ae,Ue,mn,"$","\\$"),we(si,Ue,mn,"$","\\$"),we(si,Ue,mn,"$","\\textdollar"),we(Ae,Ue,mn,"%","\\%"),we(si,Ue,mn,"%","\\%"),we(Ae,Ue,mn,"_","\\_"),we(si,Ue,mn,"_","\\_"),we(si,Ue,mn,"_","\\textunderscore"),we(Ae,Ue,mn,"∠","\\angle",!0),we(Ae,Ue,mn,"∞","\\infty",!0),we(Ae,Ue,mn,"′","\\prime"),we(Ae,Ue,mn,"△","\\triangle"),we(Ae,Ue,mn,"Γ","\\Gamma",!0),we(Ae,Ue,mn,"Δ","\\Delta",!0),we(Ae,Ue,mn,"Θ","\\Theta",!0),we(Ae,Ue,mn,"Λ","\\Lambda",!0),we(Ae,Ue,mn,"Ξ","\\Xi",!0),we(Ae,Ue,mn,"Π","\\Pi",!0),we(Ae,Ue,mn,"Σ","\\Sigma",!0),we(Ae,Ue,mn,"Υ","\\Upsilon",!0),we(Ae,Ue,mn,"Φ","\\Phi",!0),we(Ae,Ue,mn,"Ψ","\\Psi",!0),we(Ae,Ue,mn,"Ω","\\Omega",!0),we(Ae,Ue,mn,"A","Α"),we(Ae,Ue,mn,"B","Β"),we(Ae,Ue,mn,"E","Ε"),we(Ae,Ue,mn,"Z","Ζ"),we(Ae,Ue,mn,"H","Η"),we(Ae,Ue,mn,"I","Ι"),we(Ae,Ue,mn,"K","Κ"),we(Ae,Ue,mn,"M","Μ"),we(Ae,Ue,mn,"N","Ν"),we(Ae,Ue,mn,"O","Ο"),we(Ae,Ue,mn,"P","Ρ"),we(Ae,Ue,mn,"T","Τ"),we(Ae,Ue,mn,"X","Χ"),we(Ae,Ue,mn,"¬","\\neg",!0),we(Ae,Ue,mn,"¬","\\lnot"),we(Ae,Ue,mn,"⊤","\\top"),we(Ae,Ue,mn,"⊥","\\bot"),we(Ae,Ue,mn,"∅","\\emptyset"),we(Ae,$t,mn,"∅","\\varnothing"),we(Ae,Ue,Ca,"α","\\alpha",!0),we(Ae,Ue,Ca,"β","\\beta",!0),we(Ae,Ue,Ca,"γ","\\gamma",!0),we(Ae,Ue,Ca,"δ","\\delta",!0),we(Ae,Ue,Ca,"ϵ","\\epsilon",!0),we(Ae,Ue,Ca,"ζ","\\zeta",!0),we(Ae,Ue,Ca,"η","\\eta",!0),we(Ae,Ue,Ca,"θ","\\theta",!0),we(Ae,Ue,Ca,"ι","\\iota",!0),we(Ae,Ue,Ca,"κ","\\kappa",!0),we(Ae,Ue,Ca,"λ","\\lambda",!0),we(Ae,Ue,Ca,"μ","\\mu",!0),we(Ae,Ue,Ca,"ν","\\nu",!0),we(Ae,Ue,Ca,"ξ","\\xi",!0),we(Ae,Ue,Ca,"ο","\\omicron",!0),we(Ae,Ue,Ca,"π","\\pi",!0),we(Ae,Ue,Ca,"ρ","\\rho",!0),we(Ae,Ue,Ca,"σ","\\sigma",!0),we(Ae,Ue,Ca,"τ","\\tau",!0),we(Ae,Ue,Ca,"υ","\\upsilon",!0),we(Ae,Ue,Ca,"ϕ","\\phi",!0),we(Ae,Ue,Ca,"χ","\\chi",!0),we(Ae,Ue,Ca,"ψ","\\psi",!0),we(Ae,Ue,Ca,"ω","\\omega",!0),we(Ae,Ue,Ca,"ε","\\varepsilon",!0),we(Ae,Ue,Ca,"ϑ","\\vartheta",!0),we(Ae,Ue,Ca,"ϖ","\\varpi",!0),we(Ae,Ue,Ca,"ϱ","\\varrho",!0),we(Ae,Ue,Ca,"ς","\\varsigma",!0),we(Ae,Ue,Ca,"φ","\\varphi",!0),we(Ae,Ue,ls,"∗","*",!0),we(Ae,Ue,ls,"+","+"),we(Ae,Ue,ls,"−","-",!0),we(Ae,Ue,ls,"⋅","\\cdot",!0),we(Ae,Ue,ls,"∘","\\circ",!0),we(Ae,Ue,ls,"÷","\\div",!0),we(Ae,Ue,ls,"±","\\pm",!0),we(Ae,Ue,ls,"×","\\times",!0),we(Ae,Ue,ls,"∩","\\cap",!0),we(Ae,Ue,ls,"∪","\\cup",!0),we(Ae,Ue,ls,"∖","\\setminus",!0),we(Ae,Ue,ls,"∧","\\land"),we(Ae,Ue,ls,"∨","\\lor"),we(Ae,Ue,ls,"∧","\\wedge",!0),we(Ae,Ue,ls,"∨","\\vee",!0),we(Ae,Ue,mn,"√","\\surd"),we(Ae,Ue,hm,"⟨","\\langle",!0),we(Ae,Ue,hm,"∣","\\lvert"),we(Ae,Ue,hm,"∥","\\lVert"),we(Ae,Ue,Dp,"?","?"),we(Ae,Ue,Dp,"!","!"),we(Ae,Ue,Dp,"⟩","\\rangle",!0),we(Ae,Ue,Dp,"∣","\\rvert"),we(Ae,Ue,Dp,"∥","\\rVert"),we(Ae,Ue,Ht,"=","="),we(Ae,Ue,Ht,":",":"),we(Ae,Ue,Ht,"≈","\\approx",!0),we(Ae,Ue,Ht,"≅","\\cong",!0),we(Ae,Ue,Ht,"≥","\\ge"),we(Ae,Ue,Ht,"≥","\\geq",!0),we(Ae,Ue,Ht,"←","\\gets"),we(Ae,Ue,Ht,">","\\gt",!0),we(Ae,Ue,Ht,"∈","\\in",!0),we(Ae,Ue,Ht,"","\\@not"),we(Ae,Ue,Ht,"⊂","\\subset",!0),we(Ae,Ue,Ht,"⊃","\\supset",!0),we(Ae,Ue,Ht,"⊆","\\subseteq",!0),we(Ae,Ue,Ht,"⊇","\\supseteq",!0),we(Ae,$t,Ht,"⊈","\\nsubseteq",!0),we(Ae,$t,Ht,"⊉","\\nsupseteq",!0),we(Ae,Ue,Ht,"⊨","\\models"),we(Ae,Ue,Ht,"←","\\leftarrow",!0),we(Ae,Ue,Ht,"≤","\\le"),we(Ae,Ue,Ht,"≤","\\leq",!0),we(Ae,Ue,Ht,"<","\\lt",!0),we(Ae,Ue,Ht,"→","\\rightarrow",!0),we(Ae,Ue,Ht,"→","\\to"),we(Ae,$t,Ht,"≱","\\ngeq",!0),we(Ae,$t,Ht,"≰","\\nleq",!0),we(Ae,Ue,I7," ","\\ "),we(Ae,Ue,I7," ","\\space"),we(Ae,Ue,I7," ","\\nobreakspace"),we(si,Ue,I7," ","\\ "),we(si,Ue,I7," "," "),we(si,Ue,I7," ","\\space"),we(si,Ue,I7," ","\\nobreakspace"),we(Ae,Ue,I7,null,"\\nobreak"),we(Ae,Ue,I7,null,"\\allowbreak"),we(Ae,Ue,oQ,",",","),we(Ae,Ue,oQ,";",";"),we(Ae,$t,ls,"⊼","\\barwedge",!0),we(Ae,$t,ls,"⊻","\\veebar",!0),we(Ae,Ue,ls,"⊙","\\odot",!0),we(Ae,Ue,ls,"⊕","\\oplus",!0),we(Ae,Ue,ls,"⊗","\\otimes",!0),we(Ae,Ue,mn,"∂","\\partial",!0),we(Ae,Ue,ls,"⊘","\\oslash",!0),we(Ae,$t,ls,"⊚","\\circledcirc",!0),we(Ae,$t,ls,"⊡","\\boxdot",!0),we(Ae,Ue,ls,"△","\\bigtriangleup"),we(Ae,Ue,ls,"▽","\\bigtriangledown"),we(Ae,Ue,ls,"†","\\dagger"),we(Ae,Ue,ls,"⋄","\\diamond"),we(Ae,Ue,ls,"⋆","\\star"),we(Ae,Ue,ls,"◃","\\triangleleft"),we(Ae,Ue,ls,"▹","\\triangleright"),we(Ae,Ue,hm,"{","\\{"),we(si,Ue,mn,"{","\\{"),we(si,Ue,mn,"{","\\textbraceleft"),we(Ae,Ue,Dp,"}","\\}"),we(si,Ue,mn,"}","\\}"),we(si,Ue,mn,"}","\\textbraceright"),we(Ae,Ue,hm,"{","\\lbrace"),we(Ae,Ue,Dp,"}","\\rbrace"),we(Ae,Ue,hm,"[","\\lbrack",!0),we(si,Ue,mn,"[","\\lbrack",!0),we(Ae,Ue,Dp,"]","\\rbrack",!0),we(si,Ue,mn,"]","\\rbrack",!0),we(Ae,Ue,hm,"(","\\lparen",!0),we(Ae,Ue,Dp,")","\\rparen",!0),we(si,Ue,mn,"<","\\textless",!0),we(si,Ue,mn,">","\\textgreater",!0),we(Ae,Ue,hm,"⌊","\\lfloor",!0),we(Ae,Ue,Dp,"⌋","\\rfloor",!0),we(Ae,Ue,hm,"⌈","\\lceil",!0),we(Ae,Ue,Dp,"⌉","\\rceil",!0),we(Ae,Ue,mn,"\\","\\backslash"),we(Ae,Ue,mn,"∣","|"),we(Ae,Ue,mn,"∣","\\vert"),we(si,Ue,mn,"|","\\textbar",!0),we(Ae,Ue,mn,"∥","\\|"),we(Ae,Ue,mn,"∥","\\Vert"),we(si,Ue,mn,"∥","\\textbardbl"),we(si,Ue,mn,"~","\\textasciitilde"),we(si,Ue,mn,"\\","\\textbackslash"),we(si,Ue,mn,"^","\\textasciicircum"),we(Ae,Ue,Ht,"↑","\\uparrow",!0),we(Ae,Ue,Ht,"⇑","\\Uparrow",!0),we(Ae,Ue,Ht,"↓","\\downarrow",!0),we(Ae,Ue,Ht,"⇓","\\Downarrow",!0),we(Ae,Ue,Ht,"↕","\\updownarrow",!0),we(Ae,Ue,Ht,"⇕","\\Updownarrow",!0),we(Ae,Ue,N0,"∐","\\coprod"),we(Ae,Ue,N0,"⋁","\\bigvee"),we(Ae,Ue,N0,"⋀","\\bigwedge"),we(Ae,Ue,N0,"⨄","\\biguplus"),we(Ae,Ue,N0,"⋂","\\bigcap"),we(Ae,Ue,N0,"⋃","\\bigcup"),we(Ae,Ue,N0,"∫","\\int"),we(Ae,Ue,N0,"∫","\\intop"),we(Ae,Ue,N0,"∬","\\iint"),we(Ae,Ue,N0,"∭","\\iiint"),we(Ae,Ue,N0,"∏","\\prod"),we(Ae,Ue,N0,"∑","\\sum"),we(Ae,Ue,N0,"⨂","\\bigotimes"),we(Ae,Ue,N0,"⨁","\\bigoplus"),we(Ae,Ue,N0,"⨀","\\bigodot"),we(Ae,Ue,N0,"∮","\\oint"),we(Ae,Ue,N0,"∯","\\oiint"),we(Ae,Ue,N0,"∰","\\oiiint"),we(Ae,Ue,N0,"⨆","\\bigsqcup"),we(Ae,Ue,N0,"∫","\\smallint"),we(si,Ue,ND,"…","\\textellipsis"),we(Ae,Ue,ND,"…","\\mathellipsis"),we(si,Ue,ND,"…","\\ldots",!0),we(Ae,Ue,ND,"…","\\ldots",!0),we(Ae,Ue,ND,"⋯","\\@cdots",!0),we(Ae,Ue,ND,"⋱","\\ddots",!0),we(Ae,Ue,mn,"⋮","\\varvdots"),we(Ae,Ue,wh,"ˊ","\\acute"),we(Ae,Ue,wh,"ˋ","\\grave"),we(Ae,Ue,wh,"¨","\\ddot"),we(Ae,Ue,wh,"~","\\tilde"),we(Ae,Ue,wh,"ˉ","\\bar"),we(Ae,Ue,wh,"˘","\\breve"),we(Ae,Ue,wh,"ˇ","\\check"),we(Ae,Ue,wh,"^","\\hat"),we(Ae,Ue,wh,"⃗","\\vec"),we(Ae,Ue,wh,"˙","\\dot"),we(Ae,Ue,wh,"˚","\\mathring"),we(Ae,Ue,Ca,"","\\@imath"),we(Ae,Ue,Ca,"","\\@jmath"),we(Ae,Ue,mn,"ı","ı"),we(Ae,Ue,mn,"ȷ","ȷ"),we(si,Ue,mn,"ı","\\i",!0),we(si,Ue,mn,"ȷ","\\j",!0),we(si,Ue,mn,"ß","\\ss",!0),we(si,Ue,mn,"æ","\\ae",!0),we(si,Ue,mn,"œ","\\oe",!0),we(si,Ue,mn,"ø","\\o",!0),we(si,Ue,mn,"Æ","\\AE",!0),we(si,Ue,mn,"Œ","\\OE",!0),we(si,Ue,mn,"Ø","\\O",!0),we(si,Ue,wh,"ˊ","\\'"),we(si,Ue,wh,"ˋ","\\`"),we(si,Ue,wh,"ˆ","\\^"),we(si,Ue,wh,"˜","\\~"),we(si,Ue,wh,"ˉ","\\="),we(si,Ue,wh,"˘","\\u"),we(si,Ue,wh,"˙","\\."),we(si,Ue,wh,"¸","\\c"),we(si,Ue,wh,"˚","\\r"),we(si,Ue,wh,"ˇ","\\v"),we(si,Ue,wh,"¨",'\\"'),we(si,Ue,wh,"˝","\\H"),we(si,Ue,wh,"◯","\\textcircled");var rze={"--":!0,"---":!0,"``":!0,"''":!0};we(si,Ue,mn,"–","--",!0),we(si,Ue,mn,"–","\\textendash"),we(si,Ue,mn,"—","---",!0),we(si,Ue,mn,"—","\\textemdash"),we(si,Ue,mn,"‘","`",!0),we(si,Ue,mn,"‘","\\textquoteleft"),we(si,Ue,mn,"’","'",!0),we(si,Ue,mn,"’","\\textquoteright"),we(si,Ue,mn,"“","``",!0),we(si,Ue,mn,"“","\\textquotedblleft"),we(si,Ue,mn,"”","''",!0),we(si,Ue,mn,"”","\\textquotedblright"),we(Ae,Ue,mn,"°","\\degree",!0),we(si,Ue,mn,"°","\\degree"),we(si,Ue,mn,"°","\\textdegree",!0),we(Ae,Ue,mn,"£","\\pounds"),we(Ae,Ue,mn,"£","\\mathsterling",!0),we(si,Ue,mn,"£","\\pounds"),we(si,Ue,mn,"£","\\textsterling",!0),we(Ae,$t,mn,"✠","\\maltese"),we(si,$t,mn,"✠","\\maltese");for(var ize='0123456789/@."',rbe=0;rbe0)return F3(v,_,p,u,b.concat(A));if(T){var P,R;if(T==="boldsymbol"){var F=mHt(v,p,u,b,d);P=F.fontName,R=[F.fontClass]}else y?(P=hze[T].fontName,R=[T]):(P=dQ(T,u.fontWeight,u.fontShape),R=[T,u.fontWeight,u.fontShape]);if(fQ(v,P,p).metrics)return F3(v,P,p,u,b.concat(R));if(rze.hasOwnProperty(v)&&P.slice(0,10)==="Typewriter"){for(var j=[],K=0;K{if(T9(i.classes)!==T9(s.classes)||i.skew!==s.skew||i.maxFontSize!==s.maxFontSize)return!1;if(i.classes.length===1){var u=i.classes[0];if(u==="mbin"||u==="mord")return!1}for(var d in i.style)if(i.style.hasOwnProperty(d)&&i.style[d]!==s.style[d])return!1;for(var p in s.style)if(s.style.hasOwnProperty(p)&&i.style[p]!==s.style[p])return!1;return!0},yHt=i=>{for(var s=0;su&&(u=b.height),b.depth>d&&(d=b.depth),b.maxFontSize>p&&(p=b.maxFontSize)}s.height=u,s.depth=d,s.maxFontSize=p},R2=function(s,u,d,p){var v=new cR(s,u,d,p);return cbe(v),v},uze=(i,s,u,d)=>new cR(i,s,u,d),xHt=function(s,u,d){var p=R2([s],[],u);return p.height=Math.max(d||u.fontMetrics().defaultRuleThickness,u.minRuleThickness),p.style.borderBottomWidth=Ri(p.height),p.maxFontSize=1,p},kHt=function(s,u,d,p){var v=new tbe(s,u,d,p);return cbe(v),v},lze=function(s){var u=new oR(s);return cbe(u),u},EHt=function(s,u){return s instanceof oR?R2([],[s],u):s},THt=function(s){if(s.positionType==="individualShift"){for(var u=s.children,d=[u[0]],p=-u[0].shift-u[0].elem.depth,v=p,b=1;b{var u=R2(["mspace"],[],s),d=Uh(i,s);return u.style.marginRight=Ri(d),u},dQ=function(s,u,d){var p="";switch(s){case"amsrm":p="AMS";break;case"textrm":p="Main";break;case"textsf":p="SansSerif";break;case"texttt":p="Typewriter";break;default:p=s}var v;return u==="textbf"&&d==="textit"?v="BoldItalic":u==="textbf"?v="Bold":u==="textit"?v="Italic":v="Regular",p+"-"+v},hze={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},fze={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},_Ht=function(s,u){var[d,p,v]=fze[s],b=new C9(d),y=new D7([b],{width:Ri(p),height:Ri(v),style:"width:"+Ri(p),viewBox:"0 0 "+1e3*p+" "+1e3*v,preserveAspectRatio:"xMinYMin"}),T=uze(["overlay"],[y],u);return T.height=v,T.style.height=Ri(v),T.style.width=Ri(p),T},zn={fontMap:hze,makeSymbol:F3,mathsym:bHt,makeSpan:R2,makeSvgSpan:uze,makeLineSpan:xHt,makeAnchor:kHt,makeFragment:lze,wrapFragment:EHt,makeVList:CHt,makeOrd:vHt,makeGlue:SHt,staticSvg:_Ht,svgData:fze,tryCombineChars:yHt},Gh={number:3,unit:"mu"},$C={number:4,unit:"mu"},O7={number:5,unit:"mu"},AHt={mord:{mop:Gh,mbin:$C,mrel:O7,minner:Gh},mop:{mord:Gh,mop:Gh,mrel:O7,minner:Gh},mbin:{mord:$C,mop:$C,mopen:$C,minner:$C},mrel:{mord:O7,mop:O7,mopen:O7,minner:O7},mopen:{},mclose:{mop:Gh,mbin:$C,mrel:O7,minner:Gh},mpunct:{mord:Gh,mop:Gh,mrel:O7,mopen:Gh,mclose:Gh,mpunct:Gh,minner:Gh},minner:{mord:Gh,mop:Gh,mbin:$C,mrel:O7,mopen:Gh,mpunct:Gh,minner:Gh}},LHt={mord:{mop:Gh},mop:{mord:Gh,mop:Gh},mbin:{},mrel:{},mopen:{},mclose:{mop:Gh},mpunct:{},minner:{mop:Gh}},dze={},gQ={},pQ={};function Ji(i){for(var{type:s,names:u,props:d,handler:p,htmlBuilder:v,mathmlBuilder:b}=i,y={type:s,numArgs:d.numArgs,argTypes:d.argTypes,allowedInArgument:!!d.allowedInArgument,allowedInText:!!d.allowedInText,allowedInMath:d.allowedInMath===void 0?!0:d.allowedInMath,numOptionalArgs:d.numOptionalArgs||0,infix:!!d.infix,primitive:!!d.primitive,handler:p},T=0;T{var ee=K.classes[0],ie=j.classes[0];ee==="mbin"&&Ya.contains(DHt,ie)?K.classes[0]="mord":ie==="mbin"&&Ya.contains(MHt,ee)&&(j.classes[0]="mord")},{node:P},R,F),gze(v,(j,K)=>{var ee=ube(K),ie=ube(j),oe=ee&&ie?j.hasClass("mtight")?LHt[ee][ie]:AHt[ee][ie]:null;if(oe)return zn.makeGlue(oe,_)},{node:P},R,F),v},gze=function i(s,u,d,p,v){p&&s.push(p);for(var b=0;bR=>{s.splice(P+1,0,R),b++})(b)}p&&s.pop()},pze=function(s){return s instanceof oR||s instanceof tbe||s instanceof cR&&s.hasClass("enclosing")?s:null},NHt=function i(s,u){var d=pze(s);if(d){var p=d.children;if(p.length){if(u==="right")return i(p[p.length-1],"right");if(u==="left")return i(p[0],"left")}}return s},ube=function(s,u){return s?(u&&(s=NHt(s,u)),OHt[s.classes[0]]||null):null},uR=function(s,u){var d=["nulldelimiter"].concat(s.baseSizingClasses());return N7(u.concat(d))},uu=function(s,u,d){if(!s)return N7();if(gQ[s.type]){var p=gQ[s.type](s,u);if(d&&u.size!==d.size){p=N7(u.sizingClasses(d),[p],u);var v=u.sizeMultiplier/d.sizeMultiplier;p.height*=v,p.depth*=v}return p}else throw new Ci("Got group of unknown type: '"+s.type+"'")};function mQ(i,s){var u=N7(["base"],i,s),d=N7(["strut"]);return d.style.height=Ri(u.height+u.depth),u.depth&&(d.style.verticalAlign=Ri(-u.depth)),u.children.unshift(d),u}function lbe(i,s){var u=null;i.length===1&&i[0].type==="tag"&&(u=i[0].tag,i=i[0].body);var d=d1(i,s,"root"),p;d.length===2&&d[1].hasClass("tag")&&(p=d.pop());for(var v=[],b=[],y=0;y0&&(v.push(mQ(b,s)),b=[]),v.push(d[y]));b.length>0&&v.push(mQ(b,s));var _;u?(_=mQ(d1(u,s,!0)),_.classes=["tag"],v.push(_)):p&&v.push(p);var A=N7(["katex-html"],v);if(A.setAttribute("aria-hidden","true"),_){var P=_.children[0];P.style.height=Ri(A.height+A.depth),A.depth&&(P.style.verticalAlign=Ri(-A.depth))}return A}function bze(i){return new oR(i)}class Fv{constructor(s,u,d){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=s,this.attributes={},this.children=u||[],this.classes=d||[]}setAttribute(s,u){this.attributes[s]=u}getAttribute(s){return this.attributes[s]}toNode(){var s=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var u in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,u)&&s.setAttribute(u,this.attributes[u]);this.classes.length>0&&(s.className=T9(this.classes));for(var d=0;d0&&(s+=' class ="'+Ya.escape(T9(this.classes))+'"'),s+=">";for(var d=0;d",s}toText(){return this.children.map(s=>s.toText()).join("")}}class lR{constructor(s){this.text=void 0,this.text=s}toNode(){return document.createTextNode(this.text)}toMarkup(){return Ya.escape(this.toText())}toText(){return this.text}}class PHt{constructor(s){this.width=void 0,this.character=void 0,this.width=s,s>=.05555&&s<=.05556?this.character=" ":s>=.1666&&s<=.1667?this.character=" ":s>=.2222&&s<=.2223?this.character=" ":s>=.2777&&s<=.2778?this.character="  ":s>=-.05556&&s<=-.05555?this.character=" ⁣":s>=-.1667&&s<=-.1666?this.character=" ⁣":s>=-.2223&&s<=-.2222?this.character=" ⁣":s>=-.2778&&s<=-.2777?this.character=" ⁣":this.character=null}toNode(){if(this.character)return document.createTextNode(this.character);var s=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return s.setAttribute("width",Ri(this.width)),s}toMarkup(){return this.character?""+this.character+"":''}toText(){return this.character?this.character:" "}}var vi={MathNode:Fv,TextNode:lR,SpaceNode:PHt,newDocumentFragment:bze},Rv=function(s,u,d){return Ul[u][s]&&Ul[u][s].replace&&s.charCodeAt(0)!==55349&&!(rze.hasOwnProperty(s)&&d&&(d.fontFamily&&d.fontFamily.slice(4,6)==="tt"||d.font&&d.font.slice(4,6)==="tt"))&&(s=Ul[u][s].replace),new vi.TextNode(s)},hbe=function(s){return s.length===1?s[0]:new vi.MathNode("mrow",s)},fbe=function(s,u){if(u.fontFamily==="texttt")return"monospace";if(u.fontFamily==="textsf")return u.fontShape==="textit"&&u.fontWeight==="textbf"?"sans-serif-bold-italic":u.fontShape==="textit"?"sans-serif-italic":u.fontWeight==="textbf"?"bold-sans-serif":"sans-serif";if(u.fontShape==="textit"&&u.fontWeight==="textbf")return"bold-italic";if(u.fontShape==="textit")return"italic";if(u.fontWeight==="textbf")return"bold";var d=u.font;if(!d||d==="mathnormal")return null;var p=s.mode;if(d==="mathit")return"italic";if(d==="boldsymbol")return s.type==="textord"?"bold":"bold-italic";if(d==="mathbf")return"bold";if(d==="mathbb")return"double-struck";if(d==="mathfrak")return"fraktur";if(d==="mathscr"||d==="mathcal")return"script";if(d==="mathsf")return"sans-serif";if(d==="mathtt")return"monospace";var v=s.text;if(Ya.contains(["\\imath","\\jmath"],v))return null;Ul[p][v]&&Ul[p][v].replace&&(v=Ul[p][v].replace);var b=zn.fontMap[d].fontName;return J2e(v,b,p)?zn.fontMap[d].variant:null},j2=function(s,u,d){if(s.length===1){var p=Ll(s[0],u);return d&&p instanceof Fv&&p.type==="mo"&&(p.setAttribute("lspace","0em"),p.setAttribute("rspace","0em")),[p]}for(var v=[],b,y=0;y0&&(P.text=P.text.slice(0,1)+"̸"+P.text.slice(1),v.pop())}}}v.push(T),b=T}return v},_9=function(s,u,d){return hbe(j2(s,u,d))},Ll=function(s,u){if(!s)return new vi.MathNode("mrow");if(pQ[s.type]){var d=pQ[s.type](s,u);return d}else throw new Ci("Got group of unknown type: '"+s.type+"'")};function mze(i,s,u,d,p){var v=j2(i,u),b;v.length===1&&v[0]instanceof Fv&&Ya.contains(["mrow","mtable"],v[0].type)?b=v[0]:b=new vi.MathNode("mrow",v);var y=new vi.MathNode("annotation",[new vi.TextNode(s)]);y.setAttribute("encoding","application/x-tex");var T=new vi.MathNode("semantics",[b,y]),_=new vi.MathNode("math",[T]);_.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),d&&_.setAttribute("display","block");var A=p?"katex":"katex-mathml";return zn.makeSpan([A],[_])}var vze=function(s){return new M7({style:s.displayMode?Ta.DISPLAY:Ta.TEXT,maxSize:s.maxSize,minRuleThickness:s.minRuleThickness})},wze=function(s,u){if(u.displayMode){var d=["katex-display"];u.leqno&&d.push("leqno"),u.fleqn&&d.push("fleqn"),s=zn.makeSpan(d,[s])}return s},BHt=function(s,u,d){var p=vze(d),v;if(d.output==="mathml")return mze(s,u,p,d.displayMode,!0);if(d.output==="html"){var b=lbe(s,p);v=zn.makeSpan(["katex"],[b])}else{var y=mze(s,u,p,d.displayMode,!1),T=lbe(s,p);v=zn.makeSpan(["katex"],[y,T])}return wze(v,d)},FHt=function(s,u,d){var p=vze(d),v=lbe(s,p),b=zn.makeSpan(["katex"],[v]);return wze(b,d)},RHt={widehat:"^",widecheck:"ˇ",widetilde:"~",utilde:"~",overleftarrow:"←",underleftarrow:"←",xleftarrow:"←",overrightarrow:"→",underrightarrow:"→",xrightarrow:"→",underbrace:"⏟",overbrace:"⏞",overgroup:"⏠",undergroup:"⏡",overleftrightarrow:"↔",underleftrightarrow:"↔",xleftrightarrow:"↔",Overrightarrow:"⇒",xRightarrow:"⇒",overleftharpoon:"↼",xleftharpoonup:"↼",overrightharpoon:"⇀",xrightharpoonup:"⇀",xLeftarrow:"⇐",xLeftrightarrow:"⇔",xhookleftarrow:"↩",xhookrightarrow:"↪",xmapsto:"↦",xrightharpoondown:"⇁",xleftharpoondown:"↽",xrightleftharpoons:"⇌",xleftrightharpoons:"⇋",xtwoheadleftarrow:"↞",xtwoheadrightarrow:"↠",xlongequal:"=",xtofrom:"⇄",xrightleftarrows:"⇄",xrightequilibrium:"⇌",xleftequilibrium:"⇋","\\cdrightarrow":"→","\\cdleftarrow":"←","\\cdlongequal":"="},jHt=function(s){var u=new vi.MathNode("mo",[new vi.TextNode(RHt[s.replace(/^\\/,"")])]);return u.setAttribute("stretchy","true"),u},$Ht={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},zHt=function(s){return s.type==="ordgroup"?s.body.length:1},qHt=function(s,u){function d(){var y=4e5,T=s.label.slice(1);if(Ya.contains(["widehat","widecheck","widetilde","utilde"],T)){var _=s,A=zHt(_.base),P,R,F;if(A>5)T==="widehat"||T==="widecheck"?(P=420,y=2364,F=.42,R=T+"4"):(P=312,y=2340,F=.34,R="tilde4");else{var j=[1,1,2,2,3,3][A];T==="widehat"||T==="widecheck"?(y=[0,1062,2364,2364,2364][j],P=[0,239,300,360,420][j],F=[0,.24,.3,.3,.36,.42][j],R=T+j):(y=[0,600,1033,2339,2340][j],P=[0,260,286,306,312][j],F=[0,.26,.286,.3,.306,.34][j],R="tilde"+j)}var K=new C9(R),ee=new D7([K],{width:"100%",height:Ri(F),viewBox:"0 0 "+y+" "+P,preserveAspectRatio:"none"});return{span:zn.makeSvgSpan([],[ee],u),minWidth:0,height:F}}else{var ie=[],oe=$Ht[T],[pe,be,ae]=oe,ne=ae/1e3,se=pe.length,de,X;if(se===1){var ge=oe[3];de=["hide-tail"],X=[ge]}else if(se===2)de=["halfarrow-left","halfarrow-right"],X=["xMinYMin","xMaxYMin"];else if(se===3)de=["brace-left","brace-center","brace-right"],X=["xMinYMin","xMidYMin","xMaxYMin"];else throw new Error(`Correct katexImagesData or update code here to support - `+se+" children.");for(var W=0;W0&&(p.style.minWidth=Ri(v)),p},HHt=function(s,u,d,p,v){var b,y=s.height+s.depth+d+p;if(/fbox|color|angl/.test(u)){if(b=zn.makeSpan(["stretchy",u],[],v),u==="fbox"){var T=v.color&&v.getColor();T&&(b.style.borderColor=T)}}else{var _=[];/^[bx]cancel$/.test(u)&&_.push(new nbe({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(u)&&_.push(new nbe({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var A=new D7(_,{width:"100%",height:Ri(y)});b=zn.makeSvgSpan([],[A],v)}return b.height=y,b.style.height=Ri(y),b},P7={encloseSpan:HHt,mathMLnode:jHt,svgSpan:qHt};function Yo(i,s){if(!i||i.type!==s)throw new Error("Expected node of type "+s+", but got "+(i?"node of type "+i.type:String(i)));return i}function dbe(i){var s=vQ(i);if(!s)throw new Error("Expected node of symbol group type, but got "+(i?"node of type "+i.type:String(i)));return s}function vQ(i){return i&&(i.type==="atom"||gHt.hasOwnProperty(i.type))?i:null}var gbe=(i,s)=>{var u,d,p;i&&i.type==="supsub"?(d=Yo(i.base,"accent"),u=d.base,i.base=u,p=fHt(uu(i,s)),i.base=d):(d=Yo(i,"accent"),u=d.base);var v=uu(u,s.havingCrampedStyle()),b=d.isShifty&&Ya.isCharacterBox(u),y=0;if(b){var T=Ya.getBaseElem(u),_=uu(T,s.havingCrampedStyle());y=nze(_).skew}var A=d.label==="\\c",P=A?v.height+v.depth:Math.min(v.height,s.fontMetrics().xHeight),R;if(d.isStretchy)R=P7.svgSpan(d,s),R=zn.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:v},{type:"elem",elem:R,wrapperClasses:["svg-align"],wrapperStyle:y>0?{width:"calc(100% - "+Ri(2*y)+")",marginLeft:Ri(2*y)}:void 0}]},s);else{var F,j;d.label==="\\vec"?(F=zn.staticSvg("vec",s),j=zn.svgData.vec[1]):(F=zn.makeOrd({mode:d.mode,text:d.label},s,"textord"),F=nze(F),F.italic=0,j=F.width,A&&(P+=F.depth)),R=zn.makeSpan(["accent-body"],[F]);var K=d.label==="\\textcircled";K&&(R.classes.push("accent-full"),P=v.height);var ee=y;K||(ee-=j/2),R.style.left=Ri(ee),d.label==="\\textcircled"&&(R.style.top=".2em"),R=zn.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:v},{type:"kern",size:-P},{type:"elem",elem:R}]},s)}var ie=zn.makeSpan(["mord","accent"],[R],s);return p?(p.children[0]=ie,p.height=Math.max(ie.height,p.height),p.classes[0]="mord",p):ie},yze=(i,s)=>{var u=i.isStretchy?P7.mathMLnode(i.label):new vi.MathNode("mo",[Rv(i.label,i.mode)]),d=new vi.MathNode("mover",[Ll(i.base,s),u]);return d.setAttribute("accent","true"),d},VHt=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map(i=>"\\"+i).join("|"));Ji({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:(i,s)=>{var u=bQ(s[0]),d=!VHt.test(i.funcName),p=!d||i.funcName==="\\widehat"||i.funcName==="\\widetilde"||i.funcName==="\\widecheck";return{type:"accent",mode:i.parser.mode,label:i.funcName,isStretchy:d,isShifty:p,base:u}},htmlBuilder:gbe,mathmlBuilder:yze}),Ji({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:(i,s)=>{var u=s[0],d=i.parser.mode;return d==="math"&&(i.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+i.funcName+" works only in text mode"),d="text"),{type:"accent",mode:d,label:i.funcName,isStretchy:!1,isShifty:!0,base:u}},htmlBuilder:gbe,mathmlBuilder:yze}),Ji({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:(i,s)=>{var{parser:u,funcName:d}=i,p=s[0];return{type:"accentUnder",mode:u.mode,label:d,base:p}},htmlBuilder:(i,s)=>{var u=uu(i.base,s),d=P7.svgSpan(i,s),p=i.label==="\\utilde"?.12:0,v=zn.makeVList({positionType:"top",positionData:u.height,children:[{type:"elem",elem:d,wrapperClasses:["svg-align"]},{type:"kern",size:p},{type:"elem",elem:u}]},s);return zn.makeSpan(["mord","accentunder"],[v],s)},mathmlBuilder:(i,s)=>{var u=P7.mathMLnode(i.label),d=new vi.MathNode("munder",[Ll(i.base,s),u]);return d.setAttribute("accentunder","true"),d}});var wQ=i=>{var s=new vi.MathNode("mpadded",i?[i]:[]);return s.setAttribute("width","+0.6em"),s.setAttribute("lspace","0.3em"),s};Ji({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler(i,s,u){var{parser:d,funcName:p}=i;return{type:"xArrow",mode:d.mode,label:p,body:s[0],below:u[0]}},htmlBuilder(i,s){var u=s.style,d=s.havingStyle(u.sup()),p=zn.wrapFragment(uu(i.body,d,s),s),v=i.label.slice(0,2)==="\\x"?"x":"cd";p.classes.push(v+"-arrow-pad");var b;i.below&&(d=s.havingStyle(u.sub()),b=zn.wrapFragment(uu(i.below,d,s),s),b.classes.push(v+"-arrow-pad"));var y=P7.svgSpan(i,s),T=-s.fontMetrics().axisHeight+.5*y.height,_=-s.fontMetrics().axisHeight-.5*y.height-.111;(p.depth>.25||i.label==="\\xleftequilibrium")&&(_-=p.depth);var A;if(b){var P=-s.fontMetrics().axisHeight+b.height+.5*y.height+.111;A=zn.makeVList({positionType:"individualShift",children:[{type:"elem",elem:p,shift:_},{type:"elem",elem:y,shift:T},{type:"elem",elem:b,shift:P}]},s)}else A=zn.makeVList({positionType:"individualShift",children:[{type:"elem",elem:p,shift:_},{type:"elem",elem:y,shift:T}]},s);return A.children[0].children[0].children[1].classes.push("svg-align"),zn.makeSpan(["mrel","x-arrow"],[A],s)},mathmlBuilder(i,s){var u=P7.mathMLnode(i.label);u.setAttribute("minsize",i.label.charAt(0)==="x"?"1.75em":"3.0em");var d;if(i.body){var p=wQ(Ll(i.body,s));if(i.below){var v=wQ(Ll(i.below,s));d=new vi.MathNode("munderover",[u,v,p])}else d=new vi.MathNode("mover",[u,p])}else if(i.below){var b=wQ(Ll(i.below,s));d=new vi.MathNode("munder",[u,b])}else d=wQ(),d=new vi.MathNode("mover",[u,d]);return d}});var UHt=zn.makeSpan;function xze(i,s){var u=d1(i.body,s,!0);return UHt([i.mclass],u,s)}function kze(i,s){var u,d=j2(i.body,s);return i.mclass==="minner"?u=new vi.MathNode("mpadded",d):i.mclass==="mord"?i.isCharacterBox?(u=d[0],u.type="mi"):u=new vi.MathNode("mi",d):(i.isCharacterBox?(u=d[0],u.type="mo"):u=new vi.MathNode("mo",d),i.mclass==="mbin"?(u.attributes.lspace="0.22em",u.attributes.rspace="0.22em"):i.mclass==="mpunct"?(u.attributes.lspace="0em",u.attributes.rspace="0.17em"):i.mclass==="mopen"||i.mclass==="mclose"?(u.attributes.lspace="0em",u.attributes.rspace="0em"):i.mclass==="minner"&&(u.attributes.lspace="0.0556em",u.attributes.width="+0.1111em")),u}Ji({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler(i,s){var{parser:u,funcName:d}=i,p=s[0];return{type:"mclass",mode:u.mode,mclass:"m"+d.slice(5),body:Xf(p),isCharacterBox:Ya.isCharacterBox(p)}},htmlBuilder:xze,mathmlBuilder:kze});var yQ=i=>{var s=i.type==="ordgroup"&&i.body.length?i.body[0]:i;return s.type==="atom"&&(s.family==="bin"||s.family==="rel")?"m"+s.family:"mord"};Ji({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(i,s){var{parser:u}=i;return{type:"mclass",mode:u.mode,mclass:yQ(s[0]),body:Xf(s[1]),isCharacterBox:Ya.isCharacterBox(s[1])}}}),Ji({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(i,s){var{parser:u,funcName:d}=i,p=s[1],v=s[0],b;d!=="\\stackrel"?b=yQ(p):b="mrel";var y={type:"op",mode:p.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:d!=="\\stackrel",body:Xf(p)},T={type:"supsub",mode:v.mode,base:y,sup:d==="\\underset"?null:v,sub:d==="\\underset"?v:null};return{type:"mclass",mode:u.mode,mclass:b,body:[T],isCharacterBox:Ya.isCharacterBox(T)}},htmlBuilder:xze,mathmlBuilder:kze}),Ji({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler(i,s){var{parser:u}=i;return{type:"pmb",mode:u.mode,mclass:yQ(s[0]),body:Xf(s[0])}},htmlBuilder(i,s){var u=d1(i.body,s,!0),d=zn.makeSpan([i.mclass],u,s);return d.style.textShadow="0.02em 0.01em 0.04px",d},mathmlBuilder(i,s){var u=j2(i.body,s),d=new vi.MathNode("mstyle",u);return d.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),d}});var GHt={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},Eze=()=>({type:"styling",body:[],mode:"math",style:"display"}),Tze=i=>i.type==="textord"&&i.text==="@",KHt=(i,s)=>(i.type==="mathord"||i.type==="atom")&&i.text===s;function WHt(i,s,u){var d=GHt[i];switch(d){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return u.callFunction(d,[s[0]],[s[1]]);case"\\uparrow":case"\\downarrow":{var p=u.callFunction("\\\\cdleft",[s[0]],[]),v={type:"atom",text:d,mode:"math",family:"rel"},b=u.callFunction("\\Big",[v],[]),y=u.callFunction("\\\\cdright",[s[1]],[]),T={type:"ordgroup",mode:"math",body:[p,b,y]};return u.callFunction("\\\\cdparent",[T],[])}case"\\\\cdlongequal":return u.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{var _={type:"textord",text:"\\Vert",mode:"math"};return u.callFunction("\\Big",[_],[])}default:return{type:"textord",text:" ",mode:"math"}}}function YHt(i){var s=[];for(i.gullet.beginGroup(),i.gullet.macros.set("\\cr","\\\\\\relax"),i.gullet.beginGroup();;){s.push(i.parseExpression(!1,"\\\\")),i.gullet.endGroup(),i.gullet.beginGroup();var u=i.fetch().text;if(u==="&"||u==="\\\\")i.consume();else if(u==="\\end"){s[s.length-1].length===0&&s.pop();break}else throw new Ci("Expected \\\\ or \\cr or \\end",i.nextToken)}for(var d=[],p=[d],v=0;v-1))if("<>AV".indexOf(_)>-1)for(var P=0;P<2;P++){for(var R=!0,F=T+1;FAV=|." after @',b[T]);var j=WHt(_,A,i),K={type:"styling",body:[j],mode:"math",style:"display"};d.push(K),y=Eze()}v%2===0?d.push(y):d.shift(),d=[],p.push(d)}i.gullet.endGroup(),i.gullet.endGroup();var ee=new Array(p[0].length).fill({type:"align",align:"c",pregap:.25,postgap:.25});return{type:"array",mode:"math",body:p,arraystretch:1,addJot:!0,rowGaps:[null],cols:ee,colSeparationType:"CD",hLinesBeforeRow:new Array(p.length+1).fill([])}}Ji({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(i,s){var{parser:u,funcName:d}=i;return{type:"cdlabel",mode:u.mode,side:d.slice(4),label:s[0]}},htmlBuilder(i,s){var u=s.havingStyle(s.style.sup()),d=zn.wrapFragment(uu(i.label,u,s),s);return d.classes.push("cd-label-"+i.side),d.style.bottom=Ri(.8-d.depth),d.height=0,d.depth=0,d},mathmlBuilder(i,s){var u=new vi.MathNode("mrow",[Ll(i.label,s)]);return u=new vi.MathNode("mpadded",[u]),u.setAttribute("width","0"),i.side==="left"&&u.setAttribute("lspace","-1width"),u.setAttribute("voffset","0.7em"),u=new vi.MathNode("mstyle",[u]),u.setAttribute("displaystyle","false"),u.setAttribute("scriptlevel","1"),u}}),Ji({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(i,s){var{parser:u}=i;return{type:"cdlabelparent",mode:u.mode,fragment:s[0]}},htmlBuilder(i,s){var u=zn.wrapFragment(uu(i.fragment,s),s);return u.classes.push("cd-vert-arrow"),u},mathmlBuilder(i,s){return new vi.MathNode("mrow",[Ll(i.fragment,s)])}}),Ji({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(i,s){for(var{parser:u}=i,d=Yo(s[0],"ordgroup"),p=d.body,v="",b=0;b=1114111)throw new Ci("\\@char with invalid code point "+v);return T<=65535?_=String.fromCharCode(T):(T-=65536,_=String.fromCharCode((T>>10)+55296,(T&1023)+56320)),{type:"textord",mode:u.mode,text:_}}});var Cze=(i,s)=>{var u=d1(i.body,s.withColor(i.color),!1);return zn.makeFragment(u)},Sze=(i,s)=>{var u=j2(i.body,s.withColor(i.color)),d=new vi.MathNode("mstyle",u);return d.setAttribute("mathcolor",i.color),d};Ji({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(i,s){var{parser:u}=i,d=Yo(s[0],"color-token").color,p=s[1];return{type:"color",mode:u.mode,color:d,body:Xf(p)}},htmlBuilder:Cze,mathmlBuilder:Sze}),Ji({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(i,s){var{parser:u,breakOnTokenText:d}=i,p=Yo(s[0],"color-token").color;u.gullet.macros.set("\\current@color",p);var v=u.parseExpression(!0,d);return{type:"color",mode:u.mode,color:p,body:v}},htmlBuilder:Cze,mathmlBuilder:Sze}),Ji({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler(i,s,u){var{parser:d}=i,p=d.gullet.future().text==="["?d.parseSizeGroup(!0):null,v=!d.settings.displayMode||!d.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:d.mode,newLine:v,size:p&&Yo(p,"size").value}},htmlBuilder(i,s){var u=zn.makeSpan(["mspace"],[],s);return i.newLine&&(u.classes.push("newline"),i.size&&(u.style.marginTop=Ri(Uh(i.size,s)))),u},mathmlBuilder(i,s){var u=new vi.MathNode("mspace");return i.newLine&&(u.setAttribute("linebreak","newline"),i.size&&u.setAttribute("height",Ri(Uh(i.size,s)))),u}});var pbe={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},_ze=i=>{var s=i.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(s))throw new Ci("Expected a control sequence",i);return s},XHt=i=>{var s=i.gullet.popToken();return s.text==="="&&(s=i.gullet.popToken(),s.text===" "&&(s=i.gullet.popToken())),s},Aze=(i,s,u,d)=>{var p=i.gullet.macros.get(u.text);p==null&&(u.noexpand=!0,p={tokens:[u],numArgs:0,unexpandable:!i.gullet.isExpandable(u.text)}),i.gullet.macros.set(s,p,d)};Ji({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(i){var{parser:s,funcName:u}=i;s.consumeSpaces();var d=s.fetch();if(pbe[d.text])return(u==="\\global"||u==="\\\\globallong")&&(d.text=pbe[d.text]),Yo(s.parseFunction(),"internal");throw new Ci("Invalid token after macro prefix",d)}}),Ji({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(i){var{parser:s,funcName:u}=i,d=s.gullet.popToken(),p=d.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(p))throw new Ci("Expected a control sequence",d);for(var v=0,b,y=[[]];s.gullet.future().text!=="{";)if(d=s.gullet.popToken(),d.text==="#"){if(s.gullet.future().text==="{"){b=s.gullet.future(),y[v].push("{");break}if(d=s.gullet.popToken(),!/^[1-9]$/.test(d.text))throw new Ci('Invalid argument number "'+d.text+'"');if(parseInt(d.text)!==v+1)throw new Ci('Argument number "'+d.text+'" out of order');v++,y.push([])}else{if(d.text==="EOF")throw new Ci("Expected a macro definition");y[v].push(d.text)}var{tokens:T}=s.gullet.consumeArg();return b&&T.unshift(b),(u==="\\edef"||u==="\\xdef")&&(T=s.gullet.expandTokens(T),T.reverse()),s.gullet.macros.set(p,{tokens:T,numArgs:v,delimiters:y},u===pbe[u]),{type:"internal",mode:s.mode}}}),Ji({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(i){var{parser:s,funcName:u}=i,d=_ze(s.gullet.popToken());s.gullet.consumeSpaces();var p=XHt(s);return Aze(s,d,p,u==="\\\\globallet"),{type:"internal",mode:s.mode}}}),Ji({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(i){var{parser:s,funcName:u}=i,d=_ze(s.gullet.popToken()),p=s.gullet.popToken(),v=s.gullet.popToken();return Aze(s,d,v,u==="\\\\globalfuture"),s.gullet.pushToken(v),s.gullet.pushToken(p),{type:"internal",mode:s.mode}}});var hR=function(s,u,d){var p=Ul.math[s]&&Ul.math[s].replace,v=J2e(p||s,u,d);if(!v)throw new Error("Unsupported symbol "+s+" and font size "+u+".");return v},bbe=function(s,u,d,p){var v=d.havingBaseStyle(u),b=zn.makeSpan(p.concat(v.sizingClasses(d)),[s],d),y=v.sizeMultiplier/d.sizeMultiplier;return b.height*=y,b.depth*=y,b.maxFontSize=v.sizeMultiplier,b},Lze=function(s,u,d){var p=u.havingBaseStyle(d),v=(1-u.sizeMultiplier/p.sizeMultiplier)*u.fontMetrics().axisHeight;s.classes.push("delimcenter"),s.style.top=Ri(v),s.height-=v,s.depth+=v},QHt=function(s,u,d,p,v,b){var y=zn.makeSymbol(s,"Main-Regular",v,p),T=bbe(y,u,p,b);return d&&Lze(T,p,u),T},JHt=function(s,u,d,p){return zn.makeSymbol(s,"Size"+u+"-Regular",d,p)},Mze=function(s,u,d,p,v,b){var y=JHt(s,u,v,p),T=bbe(zn.makeSpan(["delimsizing","size"+u],[y],p),Ta.TEXT,p,b);return d&&Lze(T,p,Ta.TEXT),T},mbe=function(s,u,d){var p;u==="Size1-Regular"?p="delim-size1":p="delim-size4";var v=zn.makeSpan(["delimsizinginner",p],[zn.makeSpan([],[zn.makeSymbol(s,u,d)])]);return{type:"elem",elem:v}},vbe=function(s,u,d){var p=K4["Size4-Regular"][s.charCodeAt(0)]?K4["Size4-Regular"][s.charCodeAt(0)][4]:K4["Size1-Regular"][s.charCodeAt(0)][4],v=new C9("inner",iHt(s,Math.round(1e3*u))),b=new D7([v],{width:Ri(p),height:Ri(u),style:"width:"+Ri(p),viewBox:"0 0 "+1e3*p+" "+Math.round(1e3*u),preserveAspectRatio:"xMinYMin"}),y=zn.makeSvgSpan([],[b],d);return y.height=u,y.style.height=Ri(u),y.style.width=Ri(p),{type:"elem",elem:y}},wbe=.008,xQ={type:"kern",size:-1*wbe},ZHt=["|","\\lvert","\\rvert","\\vert"],eVt=["\\|","\\lVert","\\rVert","\\Vert"],Dze=function(s,u,d,p,v,b){var y,T,_,A,P="",R=0;y=_=A=s,T=null;var F="Size1-Regular";s==="\\uparrow"?_=A="⏐":s==="\\Uparrow"?_=A="‖":s==="\\downarrow"?y=_="⏐":s==="\\Downarrow"?y=_="‖":s==="\\updownarrow"?(y="\\uparrow",_="⏐",A="\\downarrow"):s==="\\Updownarrow"?(y="\\Uparrow",_="‖",A="\\Downarrow"):Ya.contains(ZHt,s)?(_="∣",P="vert",R=333):Ya.contains(eVt,s)?(_="∥",P="doublevert",R=556):s==="["||s==="\\lbrack"?(y="⎡",_="⎢",A="⎣",F="Size4-Regular",P="lbrack",R=667):s==="]"||s==="\\rbrack"?(y="⎤",_="⎥",A="⎦",F="Size4-Regular",P="rbrack",R=667):s==="\\lfloor"||s==="⌊"?(_=y="⎢",A="⎣",F="Size4-Regular",P="lfloor",R=667):s==="\\lceil"||s==="⌈"?(y="⎡",_=A="⎢",F="Size4-Regular",P="lceil",R=667):s==="\\rfloor"||s==="⌋"?(_=y="⎥",A="⎦",F="Size4-Regular",P="rfloor",R=667):s==="\\rceil"||s==="⌉"?(y="⎤",_=A="⎥",F="Size4-Regular",P="rceil",R=667):s==="("||s==="\\lparen"?(y="⎛",_="⎜",A="⎝",F="Size4-Regular",P="lparen",R=875):s===")"||s==="\\rparen"?(y="⎞",_="⎟",A="⎠",F="Size4-Regular",P="rparen",R=875):s==="\\{"||s==="\\lbrace"?(y="⎧",T="⎨",A="⎩",_="⎪",F="Size4-Regular"):s==="\\}"||s==="\\rbrace"?(y="⎫",T="⎬",A="⎭",_="⎪",F="Size4-Regular"):s==="\\lgroup"||s==="⟮"?(y="⎧",A="⎩",_="⎪",F="Size4-Regular"):s==="\\rgroup"||s==="⟯"?(y="⎫",A="⎭",_="⎪",F="Size4-Regular"):s==="\\lmoustache"||s==="⎰"?(y="⎧",A="⎭",_="⎪",F="Size4-Regular"):(s==="\\rmoustache"||s==="⎱")&&(y="⎫",A="⎩",_="⎪",F="Size4-Regular");var j=hR(y,F,v),K=j.height+j.depth,ee=hR(_,F,v),ie=ee.height+ee.depth,oe=hR(A,F,v),pe=oe.height+oe.depth,be=0,ae=1;if(T!==null){var ne=hR(T,F,v);be=ne.height+ne.depth,ae=2}var se=K+pe+be,de=Math.max(0,Math.ceil((u-se)/(ae*ie))),X=se+de*ae*ie,ge=p.fontMetrics().axisHeight;d&&(ge*=p.sizeMultiplier);var W=X/2-ge,xe=[];if(P.length>0){var U=X-K-pe,Fe=Math.round(X*1e3),Pe=sHt(P,Math.round(U*1e3)),je=new C9(P,Pe),Ie=(R/1e3).toFixed(3)+"em",Se=(Fe/1e3).toFixed(3)+"em",Ce=new D7([je],{width:Ie,height:Se,viewBox:"0 0 "+R+" "+Fe}),ke=zn.makeSvgSpan([],[Ce],p);ke.height=Fe/1e3,ke.style.width=Ie,ke.style.height=Se,xe.push({type:"elem",elem:ke})}else{if(xe.push(mbe(A,F,v)),xe.push(xQ),T===null){var Ke=X-K-pe+2*wbe;xe.push(vbe(_,Ke,p))}else{var Ft=(X-K-pe-be)/2+2*wbe;xe.push(vbe(_,Ft,p)),xe.push(xQ),xe.push(mbe(T,F,v)),xe.push(xQ),xe.push(vbe(_,Ft,p))}xe.push(xQ),xe.push(mbe(y,F,v))}var Ne=p.havingBaseStyle(Ta.TEXT),gn=zn.makeVList({positionType:"bottom",positionData:W,children:xe},Ne);return bbe(zn.makeSpan(["delimsizing","mult"],[gn],Ne),Ta.TEXT,p,b)},ybe=80,xbe=.08,kbe=function(s,u,d,p,v){var b=rHt(s,p,d),y=new C9(s,b),T=new D7([y],{width:"400em",height:Ri(u),viewBox:"0 0 400000 "+d,preserveAspectRatio:"xMinYMin slice"});return zn.makeSvgSpan(["hide-tail"],[T],v)},tVt=function(s,u){var d=u.havingBaseSizing(),p=Pze("\\surd",s*d.sizeMultiplier,Nze,d),v=d.sizeMultiplier,b=Math.max(0,u.minRuleThickness-u.fontMetrics().sqrtRuleThickness),y,T=0,_=0,A=0,P;return p.type==="small"?(A=1e3+1e3*b+ybe,s<1?v=1:s<1.4&&(v=.7),T=(1+b+xbe)/v,_=(1+b)/v,y=kbe("sqrtMain",T,A,b,u),y.style.minWidth="0.853em",P=.833/v):p.type==="large"?(A=(1e3+ybe)*fR[p.size],_=(fR[p.size]+b)/v,T=(fR[p.size]+b+xbe)/v,y=kbe("sqrtSize"+p.size,T,A,b,u),y.style.minWidth="1.02em",P=1/v):(T=s+b+xbe,_=s+b,A=Math.floor(1e3*s+b)+ybe,y=kbe("sqrtTall",T,A,b,u),y.style.minWidth="0.742em",P=1.056),y.height=_,y.style.height=Ri(T),{span:y,advanceWidth:P,ruleWidth:(u.fontMetrics().sqrtRuleThickness+b)*v}},Ize=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","⌊","⌋","\\lceil","\\rceil","⌈","⌉","\\surd"],nVt=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","⟮","⟯","\\lmoustache","\\rmoustache","⎰","⎱"],Oze=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],fR=[0,1.2,1.8,2.4,3],rVt=function(s,u,d,p,v){if(s==="<"||s==="\\lt"||s==="⟨"?s="\\langle":(s===">"||s==="\\gt"||s==="⟩")&&(s="\\rangle"),Ya.contains(Ize,s)||Ya.contains(Oze,s))return Mze(s,u,!1,d,p,v);if(Ya.contains(nVt,s))return Dze(s,fR[u],!1,d,p,v);throw new Ci("Illegal delimiter: '"+s+"'")},iVt=[{type:"small",style:Ta.SCRIPTSCRIPT},{type:"small",style:Ta.SCRIPT},{type:"small",style:Ta.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],sVt=[{type:"small",style:Ta.SCRIPTSCRIPT},{type:"small",style:Ta.SCRIPT},{type:"small",style:Ta.TEXT},{type:"stack"}],Nze=[{type:"small",style:Ta.SCRIPTSCRIPT},{type:"small",style:Ta.SCRIPT},{type:"small",style:Ta.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],aVt=function(s){if(s.type==="small")return"Main-Regular";if(s.type==="large")return"Size"+s.size+"-Regular";if(s.type==="stack")return"Size4-Regular";throw new Error("Add support for delim type '"+s.type+"' here.")},Pze=function(s,u,d,p){for(var v=Math.min(2,3-p.style.size),b=v;bu)return d[b]}return d[d.length-1]},Bze=function(s,u,d,p,v,b){s==="<"||s==="\\lt"||s==="⟨"?s="\\langle":(s===">"||s==="\\gt"||s==="⟩")&&(s="\\rangle");var y;Ya.contains(Oze,s)?y=iVt:Ya.contains(Ize,s)?y=Nze:y=sVt;var T=Pze(s,u,y,p);return T.type==="small"?QHt(s,T.style,d,p,v,b):T.type==="large"?Mze(s,T.size,d,p,v,b):Dze(s,u,d,p,v,b)},oVt=function(s,u,d,p,v,b){var y=p.fontMetrics().axisHeight*p.sizeMultiplier,T=901,_=5/p.fontMetrics().ptPerEm,A=Math.max(u-y,d+y),P=Math.max(A/500*T,2*A-_);return Bze(s,P,!0,p,v,b)},B7={sqrtImage:tVt,sizedDelim:rVt,sizeToMaxHeight:fR,customSizedDelim:Bze,leftRightDelim:oVt},Fze={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},cVt=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","⌊","⌋","\\lceil","\\rceil","⌈","⌉","<",">","\\langle","⟨","\\rangle","⟩","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","⟮","⟯","\\lmoustache","\\rmoustache","⎰","⎱","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];function kQ(i,s){var u=vQ(i);if(u&&Ya.contains(cVt,u.text))return u;throw u?new Ci("Invalid delimiter '"+u.text+"' after '"+s.funcName+"'",i):new Ci("Invalid delimiter type '"+i.type+"'",i)}Ji({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:(i,s)=>{var u=kQ(s[0],i);return{type:"delimsizing",mode:i.parser.mode,size:Fze[i.funcName].size,mclass:Fze[i.funcName].mclass,delim:u.text}},htmlBuilder:(i,s)=>i.delim==="."?zn.makeSpan([i.mclass]):B7.sizedDelim(i.delim,i.size,s,i.mode,[i.mclass]),mathmlBuilder:i=>{var s=[];i.delim!=="."&&s.push(Rv(i.delim,i.mode));var u=new vi.MathNode("mo",s);i.mclass==="mopen"||i.mclass==="mclose"?u.setAttribute("fence","true"):u.setAttribute("fence","false"),u.setAttribute("stretchy","true");var d=Ri(B7.sizeToMaxHeight[i.size]);return u.setAttribute("minsize",d),u.setAttribute("maxsize",d),u}});function Rze(i){if(!i.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}Ji({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:(i,s)=>{var u=i.parser.gullet.macros.get("\\current@color");if(u&&typeof u!="string")throw new Ci("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:i.parser.mode,delim:kQ(s[0],i).text,color:u}}}),Ji({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:(i,s)=>{var u=kQ(s[0],i),d=i.parser;++d.leftrightDepth;var p=d.parseExpression(!1);--d.leftrightDepth,d.expect("\\right",!1);var v=Yo(d.parseFunction(),"leftright-right");return{type:"leftright",mode:d.mode,body:p,left:u.text,right:v.delim,rightColor:v.color}},htmlBuilder:(i,s)=>{Rze(i);for(var u=d1(i.body,s,!0,["mopen","mclose"]),d=0,p=0,v=!1,b=0;b{Rze(i);var u=j2(i.body,s);if(i.left!=="."){var d=new vi.MathNode("mo",[Rv(i.left,i.mode)]);d.setAttribute("fence","true"),u.unshift(d)}if(i.right!=="."){var p=new vi.MathNode("mo",[Rv(i.right,i.mode)]);p.setAttribute("fence","true"),i.rightColor&&p.setAttribute("mathcolor",i.rightColor),u.push(p)}return hbe(u)}}),Ji({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:(i,s)=>{var u=kQ(s[0],i);if(!i.parser.leftrightDepth)throw new Ci("\\middle without preceding \\left",u);return{type:"middle",mode:i.parser.mode,delim:u.text}},htmlBuilder:(i,s)=>{var u;if(i.delim===".")u=uR(s,[]);else{u=B7.sizedDelim(i.delim,1,s,i.mode,[]);var d={delim:i.delim,options:s};u.isMiddle=d}return u},mathmlBuilder:(i,s)=>{var u=i.delim==="\\vert"||i.delim==="|"?Rv("|","text"):Rv(i.delim,i.mode),d=new vi.MathNode("mo",[u]);return d.setAttribute("fence","true"),d.setAttribute("lspace","0.05em"),d.setAttribute("rspace","0.05em"),d}});var Ebe=(i,s)=>{var u=zn.wrapFragment(uu(i.body,s),s),d=i.label.slice(1),p=s.sizeMultiplier,v,b=0,y=Ya.isCharacterBox(i.body);if(d==="sout")v=zn.makeSpan(["stretchy","sout"]),v.height=s.fontMetrics().defaultRuleThickness/p,b=-.5*s.fontMetrics().xHeight;else if(d==="phase"){var T=Uh({number:.6,unit:"pt"},s),_=Uh({number:.35,unit:"ex"},s),A=s.havingBaseSizing();p=p/A.sizeMultiplier;var P=u.height+u.depth+T+_;u.style.paddingLeft=Ri(P/2+T);var R=Math.floor(1e3*P*p),F=tHt(R),j=new D7([new C9("phase",F)],{width:"400em",height:Ri(R/1e3),viewBox:"0 0 400000 "+R,preserveAspectRatio:"xMinYMin slice"});v=zn.makeSvgSpan(["hide-tail"],[j],s),v.style.height=Ri(P),b=u.depth+T+_}else{/cancel/.test(d)?y||u.classes.push("cancel-pad"):d==="angl"?u.classes.push("anglpad"):u.classes.push("boxpad");var K=0,ee=0,ie=0;/box/.test(d)?(ie=Math.max(s.fontMetrics().fboxrule,s.minRuleThickness),K=s.fontMetrics().fboxsep+(d==="colorbox"?0:ie),ee=K):d==="angl"?(ie=Math.max(s.fontMetrics().defaultRuleThickness,s.minRuleThickness),K=4*ie,ee=Math.max(0,.25-u.depth)):(K=y?.2:0,ee=K),v=P7.encloseSpan(u,d,K,ee,s),/fbox|boxed|fcolorbox/.test(d)?(v.style.borderStyle="solid",v.style.borderWidth=Ri(ie)):d==="angl"&&ie!==.049&&(v.style.borderTopWidth=Ri(ie),v.style.borderRightWidth=Ri(ie)),b=u.depth+ee,i.backgroundColor&&(v.style.backgroundColor=i.backgroundColor,i.borderColor&&(v.style.borderColor=i.borderColor))}var oe;if(i.backgroundColor)oe=zn.makeVList({positionType:"individualShift",children:[{type:"elem",elem:v,shift:b},{type:"elem",elem:u,shift:0}]},s);else{var pe=/cancel|phase/.test(d)?["svg-align"]:[];oe=zn.makeVList({positionType:"individualShift",children:[{type:"elem",elem:u,shift:0},{type:"elem",elem:v,shift:b,wrapperClasses:pe}]},s)}return/cancel/.test(d)&&(oe.height=u.height,oe.depth=u.depth),/cancel/.test(d)&&!y?zn.makeSpan(["mord","cancel-lap"],[oe],s):zn.makeSpan(["mord"],[oe],s)},Tbe=(i,s)=>{var u=0,d=new vi.MathNode(i.label.indexOf("colorbox")>-1?"mpadded":"menclose",[Ll(i.body,s)]);switch(i.label){case"\\cancel":d.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":d.setAttribute("notation","downdiagonalstrike");break;case"\\phase":d.setAttribute("notation","phasorangle");break;case"\\sout":d.setAttribute("notation","horizontalstrike");break;case"\\fbox":d.setAttribute("notation","box");break;case"\\angl":d.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(u=s.fontMetrics().fboxsep*s.fontMetrics().ptPerEm,d.setAttribute("width","+"+2*u+"pt"),d.setAttribute("height","+"+2*u+"pt"),d.setAttribute("lspace",u+"pt"),d.setAttribute("voffset",u+"pt"),i.label==="\\fcolorbox"){var p=Math.max(s.fontMetrics().fboxrule,s.minRuleThickness);d.setAttribute("style","border: "+p+"em solid "+String(i.borderColor))}break;case"\\xcancel":d.setAttribute("notation","updiagonalstrike downdiagonalstrike");break}return i.backgroundColor&&d.setAttribute("mathbackground",i.backgroundColor),d};Ji({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler(i,s,u){var{parser:d,funcName:p}=i,v=Yo(s[0],"color-token").color,b=s[1];return{type:"enclose",mode:d.mode,label:p,backgroundColor:v,body:b}},htmlBuilder:Ebe,mathmlBuilder:Tbe}),Ji({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler(i,s,u){var{parser:d,funcName:p}=i,v=Yo(s[0],"color-token").color,b=Yo(s[1],"color-token").color,y=s[2];return{type:"enclose",mode:d.mode,label:p,backgroundColor:b,borderColor:v,body:y}},htmlBuilder:Ebe,mathmlBuilder:Tbe}),Ji({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(i,s){var{parser:u}=i;return{type:"enclose",mode:u.mode,label:"\\fbox",body:s[0]}}}),Ji({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler(i,s){var{parser:u,funcName:d}=i,p=s[0];return{type:"enclose",mode:u.mode,label:d,body:p}},htmlBuilder:Ebe,mathmlBuilder:Tbe}),Ji({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(i,s){var{parser:u}=i;return{type:"enclose",mode:u.mode,label:"\\angl",body:s[0]}}});var jze={};function W4(i){for(var{type:s,names:u,props:d,handler:p,htmlBuilder:v,mathmlBuilder:b}=i,y={type:s,numArgs:d.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:p},T=0;T{var s=i.parser.settings;if(!s.displayMode)throw new Ci("{"+i.envName+"} can be used only in display mode.")};function Cbe(i){if(i.indexOf("ed")===-1)return i.indexOf("*")===-1}function A9(i,s,u){var{hskipBeforeAndAfter:d,addJot:p,cols:v,arraystretch:b,colSeparationType:y,autoTag:T,singleRow:_,emptySingleRow:A,maxNumCols:P,leqno:R}=s;if(i.gullet.beginGroup(),_||i.gullet.macros.set("\\cr","\\\\\\relax"),!b){var F=i.gullet.expandMacroAsText("\\arraystretch");if(F==null)b=1;else if(b=parseFloat(F),!b||b<0)throw new Ci("Invalid \\arraystretch: "+F)}i.gullet.beginGroup();var j=[],K=[j],ee=[],ie=[],oe=T!=null?[]:void 0;function pe(){T&&i.gullet.macros.set("\\@eqnsw","1",!0)}function be(){oe&&(i.gullet.macros.get("\\df@tag")?(oe.push(i.subparse([new U4("\\df@tag")])),i.gullet.macros.set("\\df@tag",void 0,!0)):oe.push(!!T&&i.gullet.macros.get("\\@eqnsw")==="1"))}for(pe(),ie.push(zze(i));;){var ae=i.parseExpression(!1,_?"\\end":"\\\\");i.gullet.endGroup(),i.gullet.beginGroup(),ae={type:"ordgroup",mode:i.mode,body:ae},u&&(ae={type:"styling",mode:i.mode,style:u,body:[ae]}),j.push(ae);var ne=i.fetch().text;if(ne==="&"){if(P&&j.length===P){if(_||y)throw new Ci("Too many tab characters: &",i.nextToken);i.settings.reportNonstrict("textEnv","Too few columns specified in the {array} column argument.")}i.consume()}else if(ne==="\\end"){be(),j.length===1&&ae.type==="styling"&&ae.body[0].body.length===0&&(K.length>1||!A)&&K.pop(),ie.length0&&(pe+=.25),_.push({pos:pe,isDashed:ji[xi]})}for(be(b[0]),d=0;d0&&(W+=oe,seji))for(d=0;d=y)){var Gt=void 0;(p>0||s.hskipBeforeAndAfter)&&(Gt=Ya.deflt(Ft.pregap,R),Gt!==0&&(Pe=zn.makeSpan(["arraycolsep"],[]),Pe.style.width=Ri(Gt),Fe.push(Pe)));var ln=[];for(d=0;d0){for(var Dt=zn.makeLineSpan("hline",u,A),kt=zn.makeLineSpan("hdashline",u,A),On=[{type:"elem",elem:T,shift:0}];_.length>0;){var ht=_.pop(),zr=ht.pos-xe;ht.isDashed?On.push({type:"elem",elem:kt,shift:zr}):On.push({type:"elem",elem:Dt,shift:zr})}T=zn.makeVList({positionType:"individualShift",children:On},u)}if(Ie.length===0)return zn.makeSpan(["mord"],[T],u);var yt=zn.makeVList({positionType:"individualShift",children:Ie},u);return yt=zn.makeSpan(["tag"],[yt],u),zn.makeFragment([T,yt])},uVt={c:"center ",l:"left ",r:"right "},X4=function(s,u){for(var d=[],p=new vi.MathNode("mtd",[],["mtr-glue"]),v=new vi.MathNode("mtd",[],["mml-eqn-num"]),b=0;b0){var j=s.cols,K="",ee=!1,ie=0,oe=j.length;j[0].type==="separator"&&(R+="top ",ie=1),j[j.length-1].type==="separator"&&(R+="bottom ",oe-=1);for(var pe=ie;pe0?"left ":"",R+=de[de.length-1].length>0?"right ":"";for(var X=1;X-1?"alignat":"align",v=s.envName==="split",b=A9(s.parser,{cols:d,addJot:!0,autoTag:v?void 0:Cbe(s.envName),emptySingleRow:!0,colSeparationType:p,maxNumCols:v?2:void 0,leqno:s.parser.settings.leqno},"display"),y,T=0,_={type:"ordgroup",mode:s.mode,body:[]};if(u[0]&&u[0].type==="ordgroup"){for(var A="",P=0;P0&&F&&(ee=1),d[j]={type:"align",align:K,pregap:ee,postgap:0}}return b.colSeparationType=F?"align":"alignat",b};W4({type:"array",names:["array","darray"],props:{numArgs:1},handler(i,s){var u=vQ(s[0]),d=u?[s[0]]:Yo(s[0],"ordgroup").body,p=d.map(function(b){var y=dbe(b),T=y.text;if("lcr".indexOf(T)!==-1)return{type:"align",align:T};if(T==="|")return{type:"separator",separator:"|"};if(T===":")return{type:"separator",separator:":"};throw new Ci("Unknown column alignment: "+T,b)}),v={cols:p,hskipBeforeAndAfter:!0,maxNumCols:p.length};return A9(i.parser,v,Sbe(i.envName))},htmlBuilder:Y4,mathmlBuilder:X4}),W4({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(i){var s={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[i.envName.replace("*","")],u="c",d={hskipBeforeAndAfter:!1,cols:[{type:"align",align:u}]};if(i.envName.charAt(i.envName.length-1)==="*"){var p=i.parser;if(p.consumeSpaces(),p.fetch().text==="["){if(p.consume(),p.consumeSpaces(),u=p.fetch().text,"lcr".indexOf(u)===-1)throw new Ci("Expected l or c or r",p.nextToken);p.consume(),p.consumeSpaces(),p.expect("]"),p.consume(),d.cols=[{type:"align",align:u}]}}var v=A9(i.parser,d,Sbe(i.envName)),b=Math.max(0,...v.body.map(y=>y.length));return v.cols=new Array(b).fill({type:"align",align:u}),s?{type:"leftright",mode:i.mode,body:[v],left:s[0],right:s[1],rightColor:void 0}:v},htmlBuilder:Y4,mathmlBuilder:X4}),W4({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(i){var s={arraystretch:.5},u=A9(i.parser,s,"script");return u.colSeparationType="small",u},htmlBuilder:Y4,mathmlBuilder:X4}),W4({type:"array",names:["subarray"],props:{numArgs:1},handler(i,s){var u=vQ(s[0]),d=u?[s[0]]:Yo(s[0],"ordgroup").body,p=d.map(function(b){var y=dbe(b),T=y.text;if("lc".indexOf(T)!==-1)return{type:"align",align:T};throw new Ci("Unknown column alignment: "+T,b)});if(p.length>1)throw new Ci("{subarray} can contain only one column");var v={cols:p,hskipBeforeAndAfter:!1,arraystretch:.5};if(v=A9(i.parser,v,"script"),v.body.length>0&&v.body[0].length>1)throw new Ci("{subarray} can contain only one column");return v},htmlBuilder:Y4,mathmlBuilder:X4}),W4({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(i){var s={arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},u=A9(i.parser,s,Sbe(i.envName));return{type:"leftright",mode:i.mode,body:[u],left:i.envName.indexOf("r")>-1?".":"\\{",right:i.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:Y4,mathmlBuilder:X4}),W4({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:qze,htmlBuilder:Y4,mathmlBuilder:X4}),W4({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(i){Ya.contains(["gather","gather*"],i.envName)&&EQ(i);var s={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:Cbe(i.envName),emptySingleRow:!0,leqno:i.parser.settings.leqno};return A9(i.parser,s,"display")},htmlBuilder:Y4,mathmlBuilder:X4}),W4({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:qze,htmlBuilder:Y4,mathmlBuilder:X4}),W4({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(i){EQ(i);var s={autoTag:Cbe(i.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:i.parser.settings.leqno};return A9(i.parser,s,"display")},htmlBuilder:Y4,mathmlBuilder:X4}),W4({type:"array",names:["CD"],props:{numArgs:0},handler(i){return EQ(i),YHt(i.parser)},htmlBuilder:Y4,mathmlBuilder:X4}),et("\\nonumber","\\gdef\\@eqnsw{0}"),et("\\notag","\\nonumber"),Ji({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler(i,s){throw new Ci(i.funcName+" valid only within array environment")}});var Hze=jze;Ji({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler(i,s){var{parser:u,funcName:d}=i,p=s[0];if(p.type!=="ordgroup")throw new Ci("Invalid environment name",p);for(var v="",b=0;b{var u=i.font,d=s.withFont(u);return uu(i.body,d)},Uze=(i,s)=>{var u=i.font,d=s.withFont(u);return Ll(i.body,d)},Gze={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak","\\bm":"\\boldsymbol"};Ji({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:(i,s)=>{var{parser:u,funcName:d}=i,p=bQ(s[0]),v=d;return v in Gze&&(v=Gze[v]),{type:"font",mode:u.mode,font:v.slice(1),body:p}},htmlBuilder:Vze,mathmlBuilder:Uze}),Ji({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:(i,s)=>{var{parser:u}=i,d=s[0],p=Ya.isCharacterBox(d);return{type:"mclass",mode:u.mode,mclass:yQ(d),body:[{type:"font",mode:u.mode,font:"boldsymbol",body:d}],isCharacterBox:p}}}),Ji({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:(i,s)=>{var{parser:u,funcName:d,breakOnTokenText:p}=i,{mode:v}=u,b=u.parseExpression(!0,p),y="math"+d.slice(1);return{type:"font",mode:v,font:y,body:{type:"ordgroup",mode:u.mode,body:b}}},htmlBuilder:Vze,mathmlBuilder:Uze});var Kze=(i,s)=>{var u=s;return i==="display"?u=u.id>=Ta.SCRIPT.id?u.text():Ta.DISPLAY:i==="text"&&u.size===Ta.DISPLAY.size?u=Ta.TEXT:i==="script"?u=Ta.SCRIPT:i==="scriptscript"&&(u=Ta.SCRIPTSCRIPT),u},_be=(i,s)=>{var u=Kze(i.size,s.style),d=u.fracNum(),p=u.fracDen(),v;v=s.havingStyle(d);var b=uu(i.numer,v,s);if(i.continued){var y=8.5/s.fontMetrics().ptPerEm,T=3.5/s.fontMetrics().ptPerEm;b.height=b.height0?j=3*R:j=7*R,K=s.fontMetrics().denom1):(P>0?(F=s.fontMetrics().num2,j=R):(F=s.fontMetrics().num3,j=3*R),K=s.fontMetrics().denom2);var ee;if(A){var oe=s.fontMetrics().axisHeight;F-b.depth-(oe+.5*P){var u=new vi.MathNode("mfrac",[Ll(i.numer,s),Ll(i.denom,s)]);if(!i.hasBarLine)u.setAttribute("linethickness","0px");else if(i.barSize){var d=Uh(i.barSize,s);u.setAttribute("linethickness",Ri(d))}var p=Kze(i.size,s.style);if(p.size!==s.style.size){u=new vi.MathNode("mstyle",[u]);var v=p.size===Ta.DISPLAY.size?"true":"false";u.setAttribute("displaystyle",v),u.setAttribute("scriptlevel","0")}if(i.leftDelim!=null||i.rightDelim!=null){var b=[];if(i.leftDelim!=null){var y=new vi.MathNode("mo",[new vi.TextNode(i.leftDelim.replace("\\",""))]);y.setAttribute("fence","true"),b.push(y)}if(b.push(u),i.rightDelim!=null){var T=new vi.MathNode("mo",[new vi.TextNode(i.rightDelim.replace("\\",""))]);T.setAttribute("fence","true"),b.push(T)}return hbe(b)}return u};Ji({type:"genfrac",names:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:(i,s)=>{var{parser:u,funcName:d}=i,p=s[0],v=s[1],b,y=null,T=null,_="auto";switch(d){case"\\dfrac":case"\\frac":case"\\tfrac":b=!0;break;case"\\\\atopfrac":b=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":b=!1,y="(",T=")";break;case"\\\\bracefrac":b=!1,y="\\{",T="\\}";break;case"\\\\brackfrac":b=!1,y="[",T="]";break;default:throw new Error("Unrecognized genfrac command")}switch(d){case"\\dfrac":case"\\dbinom":_="display";break;case"\\tfrac":case"\\tbinom":_="text";break}return{type:"genfrac",mode:u.mode,continued:!1,numer:p,denom:v,hasBarLine:b,leftDelim:y,rightDelim:T,size:_,barSize:null}},htmlBuilder:_be,mathmlBuilder:Abe}),Ji({type:"genfrac",names:["\\cfrac"],props:{numArgs:2},handler:(i,s)=>{var{parser:u,funcName:d}=i,p=s[0],v=s[1];return{type:"genfrac",mode:u.mode,continued:!0,numer:p,denom:v,hasBarLine:!0,leftDelim:null,rightDelim:null,size:"display",barSize:null}}}),Ji({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(i){var{parser:s,funcName:u,token:d}=i,p;switch(u){case"\\over":p="\\frac";break;case"\\choose":p="\\binom";break;case"\\atop":p="\\\\atopfrac";break;case"\\brace":p="\\\\bracefrac";break;case"\\brack":p="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:s.mode,replaceWith:p,token:d}}});var Wze=["display","text","script","scriptscript"],Yze=function(s){var u=null;return s.length>0&&(u=s,u=u==="."?null:u),u};Ji({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(i,s){var{parser:u}=i,d=s[4],p=s[5],v=bQ(s[0]),b=v.type==="atom"&&v.family==="open"?Yze(v.text):null,y=bQ(s[1]),T=y.type==="atom"&&y.family==="close"?Yze(y.text):null,_=Yo(s[2],"size"),A,P=null;_.isBlank?A=!0:(P=_.value,A=P.number>0);var R="auto",F=s[3];if(F.type==="ordgroup"){if(F.body.length>0){var j=Yo(F.body[0],"textord");R=Wze[Number(j.text)]}}else F=Yo(F,"textord"),R=Wze[Number(F.text)];return{type:"genfrac",mode:u.mode,numer:d,denom:p,continued:!1,hasBarLine:A,barSize:P,leftDelim:b,rightDelim:T,size:R}},htmlBuilder:_be,mathmlBuilder:Abe}),Ji({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(i,s){var{parser:u,funcName:d,token:p}=i;return{type:"infix",mode:u.mode,replaceWith:"\\\\abovefrac",size:Yo(s[0],"size").value,token:p}}}),Ji({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:(i,s)=>{var{parser:u,funcName:d}=i,p=s[0],v=$qt(Yo(s[1],"infix").size),b=s[2],y=v.number>0;return{type:"genfrac",mode:u.mode,numer:p,denom:b,continued:!1,hasBarLine:y,barSize:v,leftDelim:null,rightDelim:null,size:"auto"}},htmlBuilder:_be,mathmlBuilder:Abe});var Xze=(i,s)=>{var u=s.style,d,p;i.type==="supsub"?(d=i.sup?uu(i.sup,s.havingStyle(u.sup()),s):uu(i.sub,s.havingStyle(u.sub()),s),p=Yo(i.base,"horizBrace")):p=Yo(i,"horizBrace");var v=uu(p.base,s.havingBaseStyle(Ta.DISPLAY)),b=P7.svgSpan(p,s),y;if(p.isOver?(y=zn.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:v},{type:"kern",size:.1},{type:"elem",elem:b}]},s),y.children[0].children[0].children[1].classes.push("svg-align")):(y=zn.makeVList({positionType:"bottom",positionData:v.depth+.1+b.height,children:[{type:"elem",elem:b},{type:"kern",size:.1},{type:"elem",elem:v}]},s),y.children[0].children[0].children[0].classes.push("svg-align")),d){var T=zn.makeSpan(["mord",p.isOver?"mover":"munder"],[y],s);p.isOver?y=zn.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:T},{type:"kern",size:.2},{type:"elem",elem:d}]},s):y=zn.makeVList({positionType:"bottom",positionData:T.depth+.2+d.height+d.depth,children:[{type:"elem",elem:d},{type:"kern",size:.2},{type:"elem",elem:T}]},s)}return zn.makeSpan(["mord",p.isOver?"mover":"munder"],[y],s)},lVt=(i,s)=>{var u=P7.mathMLnode(i.label);return new vi.MathNode(i.isOver?"mover":"munder",[Ll(i.base,s),u])};Ji({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler(i,s){var{parser:u,funcName:d}=i;return{type:"horizBrace",mode:u.mode,label:d,isOver:/^\\over/.test(d),base:s[0]}},htmlBuilder:Xze,mathmlBuilder:lVt}),Ji({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:(i,s)=>{var{parser:u}=i,d=s[1],p=Yo(s[0],"url").url;return u.settings.isTrusted({command:"\\href",url:p})?{type:"href",mode:u.mode,href:p,body:Xf(d)}:u.formatUnsupportedCmd("\\href")},htmlBuilder:(i,s)=>{var u=d1(i.body,s,!1);return zn.makeAnchor(i.href,[],u,s)},mathmlBuilder:(i,s)=>{var u=_9(i.body,s);return u instanceof Fv||(u=new Fv("mrow",[u])),u.setAttribute("href",i.href),u}}),Ji({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:(i,s)=>{var{parser:u}=i,d=Yo(s[0],"url").url;if(!u.settings.isTrusted({command:"\\url",url:d}))return u.formatUnsupportedCmd("\\url");for(var p=[],v=0;v{var{parser:u,funcName:d,token:p}=i,v=Yo(s[0],"raw").string,b=s[1];u.settings.strict&&u.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");var y,T={};switch(d){case"\\htmlClass":T.class=v,y={command:"\\htmlClass",class:v};break;case"\\htmlId":T.id=v,y={command:"\\htmlId",id:v};break;case"\\htmlStyle":T.style=v,y={command:"\\htmlStyle",style:v};break;case"\\htmlData":{for(var _=v.split(","),A=0;A<_.length;A++){var P=_[A].split("=");if(P.length!==2)throw new Ci("Error parsing key-value for \\htmlData");T["data-"+P[0].trim()]=P[1].trim()}y={command:"\\htmlData",attributes:T};break}default:throw new Error("Unrecognized html command")}return u.settings.isTrusted(y)?{type:"html",mode:u.mode,attributes:T,body:Xf(b)}:u.formatUnsupportedCmd(d)},htmlBuilder:(i,s)=>{var u=d1(i.body,s,!1),d=["enclosing"];i.attributes.class&&d.push(...i.attributes.class.trim().split(/\s+/));var p=zn.makeSpan(d,u,s);for(var v in i.attributes)v!=="class"&&i.attributes.hasOwnProperty(v)&&p.setAttribute(v,i.attributes[v]);return p},mathmlBuilder:(i,s)=>_9(i.body,s)}),Ji({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInText:!0},handler:(i,s)=>{var{parser:u}=i;return{type:"htmlmathml",mode:u.mode,html:Xf(s[0]),mathml:Xf(s[1])}},htmlBuilder:(i,s)=>{var u=d1(i.html,s,!1);return zn.makeFragment(u)},mathmlBuilder:(i,s)=>_9(i.mathml,s)});var Lbe=function(s){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(s))return{number:+s,unit:"bp"};var u=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(s);if(!u)throw new Ci("Invalid size: '"+s+"' in \\includegraphics");var d={number:+(u[1]+u[2]),unit:u[3]};if(!J$e(d))throw new Ci("Invalid unit: '"+d.unit+"' in \\includegraphics.");return d};Ji({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:(i,s,u)=>{var{parser:d}=i,p={number:0,unit:"em"},v={number:.9,unit:"em"},b={number:0,unit:"em"},y="";if(u[0])for(var T=Yo(u[0],"raw").string,_=T.split(","),A=0;A<_.length;A++){var P=_[A].split("=");if(P.length===2){var R=P[1].trim();switch(P[0].trim()){case"alt":y=R;break;case"width":p=Lbe(R);break;case"height":v=Lbe(R);break;case"totalheight":b=Lbe(R);break;default:throw new Ci("Invalid key: '"+P[0]+"' in \\includegraphics.")}}}var F=Yo(s[0],"url").url;return y===""&&(y=F,y=y.replace(/^.*[\\/]/,""),y=y.substring(0,y.lastIndexOf("."))),d.settings.isTrusted({command:"\\includegraphics",url:F})?{type:"includegraphics",mode:d.mode,alt:y,width:p,height:v,totalheight:b,src:F}:d.formatUnsupportedCmd("\\includegraphics")},htmlBuilder:(i,s)=>{var u=Uh(i.height,s),d=0;i.totalheight.number>0&&(d=Uh(i.totalheight,s)-u);var p=0;i.width.number>0&&(p=Uh(i.width,s));var v={height:Ri(u+d)};p>0&&(v.width=Ri(p)),d>0&&(v.verticalAlign=Ri(-d));var b=new lHt(i.src,i.alt,v);return b.height=u,b.depth=d,b},mathmlBuilder:(i,s)=>{var u=new vi.MathNode("mglyph",[]);u.setAttribute("alt",i.alt);var d=Uh(i.height,s),p=0;if(i.totalheight.number>0&&(p=Uh(i.totalheight,s)-d,u.setAttribute("valign",Ri(-p))),u.setAttribute("height",Ri(d+p)),i.width.number>0){var v=Uh(i.width,s);u.setAttribute("width",Ri(v))}return u.setAttribute("src",i.src),u}}),Ji({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(i,s){var{parser:u,funcName:d}=i,p=Yo(s[0],"size");if(u.settings.strict){var v=d[1]==="m",b=p.value.unit==="mu";v?(b||u.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+d+" supports only mu units, "+("not "+p.value.unit+" units")),u.mode!=="math"&&u.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+d+" works only in math mode")):b&&u.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+d+" doesn't support mu units")}return{type:"kern",mode:u.mode,dimension:p.value}},htmlBuilder(i,s){return zn.makeGlue(i.dimension,s)},mathmlBuilder(i,s){var u=Uh(i.dimension,s);return new vi.SpaceNode(u)}}),Ji({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:(i,s)=>{var{parser:u,funcName:d}=i,p=s[0];return{type:"lap",mode:u.mode,alignment:d.slice(5),body:p}},htmlBuilder:(i,s)=>{var u;i.alignment==="clap"?(u=zn.makeSpan([],[uu(i.body,s)]),u=zn.makeSpan(["inner"],[u],s)):u=zn.makeSpan(["inner"],[uu(i.body,s)]);var d=zn.makeSpan(["fix"],[]),p=zn.makeSpan([i.alignment],[u,d],s),v=zn.makeSpan(["strut"]);return v.style.height=Ri(p.height+p.depth),p.depth&&(v.style.verticalAlign=Ri(-p.depth)),p.children.unshift(v),p=zn.makeSpan(["thinbox"],[p],s),zn.makeSpan(["mord","vbox"],[p],s)},mathmlBuilder:(i,s)=>{var u=new vi.MathNode("mpadded",[Ll(i.body,s)]);if(i.alignment!=="rlap"){var d=i.alignment==="llap"?"-1":"-0.5";u.setAttribute("lspace",d+"width")}return u.setAttribute("width","0px"),u}}),Ji({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(i,s){var{funcName:u,parser:d}=i,p=d.mode;d.switchMode("math");var v=u==="\\("?"\\)":"$",b=d.parseExpression(!1,v);return d.expect(v),d.switchMode(p),{type:"styling",mode:d.mode,style:"text",body:b}}}),Ji({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(i,s){throw new Ci("Mismatched "+i.funcName)}});var Qze=(i,s)=>{switch(s.style.size){case Ta.DISPLAY.size:return i.display;case Ta.TEXT.size:return i.text;case Ta.SCRIPT.size:return i.script;case Ta.SCRIPTSCRIPT.size:return i.scriptscript;default:return i.text}};Ji({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:(i,s)=>{var{parser:u}=i;return{type:"mathchoice",mode:u.mode,display:Xf(s[0]),text:Xf(s[1]),script:Xf(s[2]),scriptscript:Xf(s[3])}},htmlBuilder:(i,s)=>{var u=Qze(i,s),d=d1(u,s,!1);return zn.makeFragment(d)},mathmlBuilder:(i,s)=>{var u=Qze(i,s);return _9(u,s)}});var Jze=(i,s,u,d,p,v,b)=>{i=zn.makeSpan([],[i]);var y=u&&Ya.isCharacterBox(u),T,_;if(s){var A=uu(s,d.havingStyle(p.sup()),d);_={elem:A,kern:Math.max(d.fontMetrics().bigOpSpacing1,d.fontMetrics().bigOpSpacing3-A.depth)}}if(u){var P=uu(u,d.havingStyle(p.sub()),d);T={elem:P,kern:Math.max(d.fontMetrics().bigOpSpacing2,d.fontMetrics().bigOpSpacing4-P.height)}}var R;if(_&&T){var F=d.fontMetrics().bigOpSpacing5+T.elem.height+T.elem.depth+T.kern+i.depth+b;R=zn.makeVList({positionType:"bottom",positionData:F,children:[{type:"kern",size:d.fontMetrics().bigOpSpacing5},{type:"elem",elem:T.elem,marginLeft:Ri(-v)},{type:"kern",size:T.kern},{type:"elem",elem:i},{type:"kern",size:_.kern},{type:"elem",elem:_.elem,marginLeft:Ri(v)},{type:"kern",size:d.fontMetrics().bigOpSpacing5}]},d)}else if(T){var j=i.height-b;R=zn.makeVList({positionType:"top",positionData:j,children:[{type:"kern",size:d.fontMetrics().bigOpSpacing5},{type:"elem",elem:T.elem,marginLeft:Ri(-v)},{type:"kern",size:T.kern},{type:"elem",elem:i}]},d)}else if(_){var K=i.depth+b;R=zn.makeVList({positionType:"bottom",positionData:K,children:[{type:"elem",elem:i},{type:"kern",size:_.kern},{type:"elem",elem:_.elem,marginLeft:Ri(v)},{type:"kern",size:d.fontMetrics().bigOpSpacing5}]},d)}else return i;var ee=[R];if(T&&v!==0&&!y){var ie=zn.makeSpan(["mspace"],[],d);ie.style.marginRight=Ri(v),ee.unshift(ie)}return zn.makeSpan(["mop","op-limits"],ee,d)},Zze=["\\smallint"],PD=(i,s)=>{var u,d,p=!1,v;i.type==="supsub"?(u=i.sup,d=i.sub,v=Yo(i.base,"op"),p=!0):v=Yo(i,"op");var b=s.style,y=!1;b.size===Ta.DISPLAY.size&&v.symbol&&!Ya.contains(Zze,v.name)&&(y=!0);var T;if(v.symbol){var _=y?"Size2-Regular":"Size1-Regular",A="";if((v.name==="\\oiint"||v.name==="\\oiiint")&&(A=v.name.slice(1),v.name=A==="oiint"?"\\iint":"\\iiint"),T=zn.makeSymbol(v.name,_,"math",s,["mop","op-symbol",y?"large-op":"small-op"]),A.length>0){var P=T.italic,R=zn.staticSvg(A+"Size"+(y?"2":"1"),s);T=zn.makeVList({positionType:"individualShift",children:[{type:"elem",elem:T,shift:0},{type:"elem",elem:R,shift:y?.08:0}]},s),v.name="\\"+A,T.classes.unshift("mop"),T.italic=P}}else if(v.body){var F=d1(v.body,s,!0);F.length===1&&F[0]instanceof Bv?(T=F[0],T.classes[0]="mop"):T=zn.makeSpan(["mop"],F,s)}else{for(var j=[],K=1;K{var u;if(i.symbol)u=new Fv("mo",[Rv(i.name,i.mode)]),Ya.contains(Zze,i.name)&&u.setAttribute("largeop","false");else if(i.body)u=new Fv("mo",j2(i.body,s));else{u=new Fv("mi",[new lR(i.name.slice(1))]);var d=new Fv("mo",[Rv("⁡","text")]);i.parentIsSupSub?u=new Fv("mrow",[u,d]):u=bze([u,d])}return u},hVt={"∏":"\\prod","∐":"\\coprod","∑":"\\sum","⋀":"\\bigwedge","⋁":"\\bigvee","⋂":"\\bigcap","⋃":"\\bigcup","⨀":"\\bigodot","⨁":"\\bigoplus","⨂":"\\bigotimes","⨄":"\\biguplus","⨆":"\\bigsqcup"};Ji({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","∏","∐","∑","⋀","⋁","⋂","⋃","⨀","⨁","⨂","⨄","⨆"],props:{numArgs:0},handler:(i,s)=>{var{parser:u,funcName:d}=i,p=d;return p.length===1&&(p=hVt[p]),{type:"op",mode:u.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:p}},htmlBuilder:PD,mathmlBuilder:dR}),Ji({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:(i,s)=>{var{parser:u}=i,d=s[0];return{type:"op",mode:u.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:Xf(d)}},htmlBuilder:PD,mathmlBuilder:dR});var fVt={"∫":"\\int","∬":"\\iint","∭":"\\iiint","∮":"\\oint","∯":"\\oiint","∰":"\\oiiint"};Ji({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler(i){var{parser:s,funcName:u}=i;return{type:"op",mode:s.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:u}},htmlBuilder:PD,mathmlBuilder:dR}),Ji({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(i){var{parser:s,funcName:u}=i;return{type:"op",mode:s.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:u}},htmlBuilder:PD,mathmlBuilder:dR}),Ji({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","∫","∬","∭","∮","∯","∰"],props:{numArgs:0},handler(i){var{parser:s,funcName:u}=i,d=u;return d.length===1&&(d=fVt[d]),{type:"op",mode:s.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:d}},htmlBuilder:PD,mathmlBuilder:dR});var eqe=(i,s)=>{var u,d,p=!1,v;i.type==="supsub"?(u=i.sup,d=i.sub,v=Yo(i.base,"operatorname"),p=!0):v=Yo(i,"operatorname");var b;if(v.body.length>0){for(var y=v.body.map(P=>{var R=P.text;return typeof R=="string"?{type:"textord",mode:P.mode,text:R}:P}),T=d1(y,s.withFont("mathrm"),!0),_=0;_{for(var u=j2(i.body,s.withFont("mathrm")),d=!0,p=0;pA.toText()).join("");u=[new vi.TextNode(y)]}var T=new vi.MathNode("mi",u);T.setAttribute("mathvariant","normal");var _=new vi.MathNode("mo",[Rv("⁡","text")]);return i.parentIsSupSub?new vi.MathNode("mrow",[T,_]):vi.newDocumentFragment([T,_])};Ji({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],props:{numArgs:1},handler:(i,s)=>{var{parser:u,funcName:d}=i,p=s[0];return{type:"operatorname",mode:u.mode,body:Xf(p),alwaysHandleSupSub:d==="\\operatornamewithlimits",limits:!1,parentIsSupSub:!1}},htmlBuilder:eqe,mathmlBuilder:dVt}),et("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@"),zC({type:"ordgroup",htmlBuilder(i,s){return i.semisimple?zn.makeFragment(d1(i.body,s,!1)):zn.makeSpan(["mord"],d1(i.body,s,!0),s)},mathmlBuilder(i,s){return _9(i.body,s,!0)}}),Ji({type:"overline",names:["\\overline"],props:{numArgs:1},handler(i,s){var{parser:u}=i,d=s[0];return{type:"overline",mode:u.mode,body:d}},htmlBuilder(i,s){var u=uu(i.body,s.havingCrampedStyle()),d=zn.makeLineSpan("overline-line",s),p=s.fontMetrics().defaultRuleThickness,v=zn.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:u},{type:"kern",size:3*p},{type:"elem",elem:d},{type:"kern",size:p}]},s);return zn.makeSpan(["mord","overline"],[v],s)},mathmlBuilder(i,s){var u=new vi.MathNode("mo",[new vi.TextNode("‾")]);u.setAttribute("stretchy","true");var d=new vi.MathNode("mover",[Ll(i.body,s),u]);return d.setAttribute("accent","true"),d}}),Ji({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:(i,s)=>{var{parser:u}=i,d=s[0];return{type:"phantom",mode:u.mode,body:Xf(d)}},htmlBuilder:(i,s)=>{var u=d1(i.body,s.withPhantom(),!1);return zn.makeFragment(u)},mathmlBuilder:(i,s)=>{var u=j2(i.body,s);return new vi.MathNode("mphantom",u)}}),Ji({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:(i,s)=>{var{parser:u}=i,d=s[0];return{type:"hphantom",mode:u.mode,body:d}},htmlBuilder:(i,s)=>{var u=zn.makeSpan([],[uu(i.body,s.withPhantom())]);if(u.height=0,u.depth=0,u.children)for(var d=0;d{var u=j2(Xf(i.body),s),d=new vi.MathNode("mphantom",u),p=new vi.MathNode("mpadded",[d]);return p.setAttribute("height","0px"),p.setAttribute("depth","0px"),p}}),Ji({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:(i,s)=>{var{parser:u}=i,d=s[0];return{type:"vphantom",mode:u.mode,body:d}},htmlBuilder:(i,s)=>{var u=zn.makeSpan(["inner"],[uu(i.body,s.withPhantom())]),d=zn.makeSpan(["fix"],[]);return zn.makeSpan(["mord","rlap"],[u,d],s)},mathmlBuilder:(i,s)=>{var u=j2(Xf(i.body),s),d=new vi.MathNode("mphantom",u),p=new vi.MathNode("mpadded",[d]);return p.setAttribute("width","0px"),p}}),Ji({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler(i,s){var{parser:u}=i,d=Yo(s[0],"size").value,p=s[1];return{type:"raisebox",mode:u.mode,dy:d,body:p}},htmlBuilder(i,s){var u=uu(i.body,s),d=Uh(i.dy,s);return zn.makeVList({positionType:"shift",positionData:-d,children:[{type:"elem",elem:u}]},s)},mathmlBuilder(i,s){var u=new vi.MathNode("mpadded",[Ll(i.body,s)]),d=i.dy.number+i.dy.unit;return u.setAttribute("voffset",d),u}}),Ji({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0},handler(i){var{parser:s}=i;return{type:"internal",mode:s.mode}}}),Ji({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,argTypes:["size","size","size"]},handler(i,s,u){var{parser:d}=i,p=u[0],v=Yo(s[0],"size"),b=Yo(s[1],"size");return{type:"rule",mode:d.mode,shift:p&&Yo(p,"size").value,width:v.value,height:b.value}},htmlBuilder(i,s){var u=zn.makeSpan(["mord","rule"],[],s),d=Uh(i.width,s),p=Uh(i.height,s),v=i.shift?Uh(i.shift,s):0;return u.style.borderRightWidth=Ri(d),u.style.borderTopWidth=Ri(p),u.style.bottom=Ri(v),u.width=d,u.height=p+v,u.depth=-v,u.maxFontSize=p*1.125*s.sizeMultiplier,u},mathmlBuilder(i,s){var u=Uh(i.width,s),d=Uh(i.height,s),p=i.shift?Uh(i.shift,s):0,v=s.color&&s.getColor()||"black",b=new vi.MathNode("mspace");b.setAttribute("mathbackground",v),b.setAttribute("width",Ri(u)),b.setAttribute("height",Ri(d));var y=new vi.MathNode("mpadded",[b]);return p>=0?y.setAttribute("height",Ri(p)):(y.setAttribute("height",Ri(p)),y.setAttribute("depth",Ri(-p))),y.setAttribute("voffset",Ri(p)),y}});function tqe(i,s,u){for(var d=d1(i,s,!1),p=s.sizeMultiplier/u.sizeMultiplier,v=0;v{var u=s.havingSize(i.size);return tqe(i.body,u,s)};Ji({type:"sizing",names:nqe,props:{numArgs:0,allowedInText:!0},handler:(i,s)=>{var{breakOnTokenText:u,funcName:d,parser:p}=i,v=p.parseExpression(!1,u);return{type:"sizing",mode:p.mode,size:nqe.indexOf(d)+1,body:v}},htmlBuilder:gVt,mathmlBuilder:(i,s)=>{var u=s.havingSize(i.size),d=j2(i.body,u),p=new vi.MathNode("mstyle",d);return p.setAttribute("mathsize",Ri(u.sizeMultiplier)),p}}),Ji({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:(i,s,u)=>{var{parser:d}=i,p=!1,v=!1,b=u[0]&&Yo(u[0],"ordgroup");if(b)for(var y="",T=0;T{var u=zn.makeSpan([],[uu(i.body,s)]);if(!i.smashHeight&&!i.smashDepth)return u;if(i.smashHeight&&(u.height=0,u.children))for(var d=0;d{var u=new vi.MathNode("mpadded",[Ll(i.body,s)]);return i.smashHeight&&u.setAttribute("height","0px"),i.smashDepth&&u.setAttribute("depth","0px"),u}}),Ji({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler(i,s,u){var{parser:d}=i,p=u[0],v=s[0];return{type:"sqrt",mode:d.mode,body:v,index:p}},htmlBuilder(i,s){var u=uu(i.body,s.havingCrampedStyle());u.height===0&&(u.height=s.fontMetrics().xHeight),u=zn.wrapFragment(u,s);var d=s.fontMetrics(),p=d.defaultRuleThickness,v=p;s.style.idu.height+u.depth+b&&(b=(b+P-u.height-u.depth)/2);var R=T.height-u.height-b-_;u.style.paddingLeft=Ri(A);var F=zn.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:u,wrapperClasses:["svg-align"]},{type:"kern",size:-(u.height+R)},{type:"elem",elem:T},{type:"kern",size:_}]},s);if(i.index){var j=s.havingStyle(Ta.SCRIPTSCRIPT),K=uu(i.index,j,s),ee=.6*(F.height-F.depth),ie=zn.makeVList({positionType:"shift",positionData:-ee,children:[{type:"elem",elem:K}]},s),oe=zn.makeSpan(["root"],[ie]);return zn.makeSpan(["mord","sqrt"],[oe,F],s)}else return zn.makeSpan(["mord","sqrt"],[F],s)},mathmlBuilder(i,s){var{body:u,index:d}=i;return d?new vi.MathNode("mroot",[Ll(u,s),Ll(d,s)]):new vi.MathNode("msqrt",[Ll(u,s)])}});var rqe={display:Ta.DISPLAY,text:Ta.TEXT,script:Ta.SCRIPT,scriptscript:Ta.SCRIPTSCRIPT};Ji({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(i,s){var{breakOnTokenText:u,funcName:d,parser:p}=i,v=p.parseExpression(!0,u),b=d.slice(1,d.length-5);return{type:"styling",mode:p.mode,style:b,body:v}},htmlBuilder(i,s){var u=rqe[i.style],d=s.havingStyle(u).withFont("");return tqe(i.body,d,s)},mathmlBuilder(i,s){var u=rqe[i.style],d=s.havingStyle(u),p=j2(i.body,d),v=new vi.MathNode("mstyle",p),b={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]},y=b[i.style];return v.setAttribute("scriptlevel",y[0]),v.setAttribute("displaystyle",y[1]),v}});var pVt=function(s,u){var d=s.base;if(d)if(d.type==="op"){var p=d.limits&&(u.style.size===Ta.DISPLAY.size||d.alwaysHandleSupSub);return p?PD:null}else if(d.type==="operatorname"){var v=d.alwaysHandleSupSub&&(u.style.size===Ta.DISPLAY.size||d.limits);return v?eqe:null}else{if(d.type==="accent")return Ya.isCharacterBox(d.base)?gbe:null;if(d.type==="horizBrace"){var b=!s.sub;return b===d.isOver?Xze:null}else return null}else return null};zC({type:"supsub",htmlBuilder(i,s){var u=pVt(i,s);if(u)return u(i,s);var{base:d,sup:p,sub:v}=i,b=uu(d,s),y,T,_=s.fontMetrics(),A=0,P=0,R=d&&Ya.isCharacterBox(d);if(p){var F=s.havingStyle(s.style.sup());y=uu(p,F,s),R||(A=b.height-F.fontMetrics().supDrop*F.sizeMultiplier/s.sizeMultiplier)}if(v){var j=s.havingStyle(s.style.sub());T=uu(v,j,s),R||(P=b.depth+j.fontMetrics().subDrop*j.sizeMultiplier/s.sizeMultiplier)}var K;s.style===Ta.DISPLAY?K=_.sup1:s.style.cramped?K=_.sup3:K=_.sup2;var ee=s.sizeMultiplier,ie=Ri(.5/_.ptPerEm/ee),oe=null;if(T){var pe=i.base&&i.base.type==="op"&&i.base.name&&(i.base.name==="\\oiint"||i.base.name==="\\oiiint");(b instanceof Bv||pe)&&(oe=Ri(-b.italic))}var be;if(y&&T){A=Math.max(A,K,y.depth+.25*_.xHeight),P=Math.max(P,_.sub2);var ae=_.defaultRuleThickness,ne=4*ae;if(A-y.depth-(T.height-P)0&&(A+=se,P-=se)}var de=[{type:"elem",elem:T,shift:P,marginRight:ie,marginLeft:oe},{type:"elem",elem:y,shift:-A,marginRight:ie}];be=zn.makeVList({positionType:"individualShift",children:de},s)}else if(T){P=Math.max(P,_.sub1,T.height-.8*_.xHeight);var X=[{type:"elem",elem:T,marginLeft:oe,marginRight:ie}];be=zn.makeVList({positionType:"shift",positionData:P,children:X},s)}else if(y)A=Math.max(A,K,y.depth+.25*_.xHeight),be=zn.makeVList({positionType:"shift",positionData:-A,children:[{type:"elem",elem:y,marginRight:ie}]},s);else throw new Error("supsub must have either sup or sub.");var ge=ube(b,"right")||"mord";return zn.makeSpan([ge],[b,zn.makeSpan(["msupsub"],[be])],s)},mathmlBuilder(i,s){var u=!1,d,p;i.base&&i.base.type==="horizBrace"&&(p=!!i.sup,p===i.base.isOver&&(u=!0,d=i.base.isOver)),i.base&&(i.base.type==="op"||i.base.type==="operatorname")&&(i.base.parentIsSupSub=!0);var v=[Ll(i.base,s)];i.sub&&v.push(Ll(i.sub,s)),i.sup&&v.push(Ll(i.sup,s));var b;if(u)b=d?"mover":"munder";else if(i.sub)if(i.sup){var _=i.base;_&&_.type==="op"&&_.limits&&s.style===Ta.DISPLAY||_&&_.type==="operatorname"&&_.alwaysHandleSupSub&&(s.style===Ta.DISPLAY||_.limits)?b="munderover":b="msubsup"}else{var T=i.base;T&&T.type==="op"&&T.limits&&(s.style===Ta.DISPLAY||T.alwaysHandleSupSub)||T&&T.type==="operatorname"&&T.alwaysHandleSupSub&&(T.limits||s.style===Ta.DISPLAY)?b="munder":b="msub"}else{var y=i.base;y&&y.type==="op"&&y.limits&&(s.style===Ta.DISPLAY||y.alwaysHandleSupSub)||y&&y.type==="operatorname"&&y.alwaysHandleSupSub&&(y.limits||s.style===Ta.DISPLAY)?b="mover":b="msup"}return new vi.MathNode(b,v)}}),zC({type:"atom",htmlBuilder(i,s){return zn.mathsym(i.text,i.mode,s,["m"+i.family])},mathmlBuilder(i,s){var u=new vi.MathNode("mo",[Rv(i.text,i.mode)]);if(i.family==="bin"){var d=fbe(i,s);d==="bold-italic"&&u.setAttribute("mathvariant",d)}else i.family==="punct"?u.setAttribute("separator","true"):(i.family==="open"||i.family==="close")&&u.setAttribute("stretchy","false");return u}});var iqe={mi:"italic",mn:"normal",mtext:"normal"};zC({type:"mathord",htmlBuilder(i,s){return zn.makeOrd(i,s,"mathord")},mathmlBuilder(i,s){var u=new vi.MathNode("mi",[Rv(i.text,i.mode,s)]),d=fbe(i,s)||"italic";return d!==iqe[u.type]&&u.setAttribute("mathvariant",d),u}}),zC({type:"textord",htmlBuilder(i,s){return zn.makeOrd(i,s,"textord")},mathmlBuilder(i,s){var u=Rv(i.text,i.mode,s),d=fbe(i,s)||"normal",p;return i.mode==="text"?p=new vi.MathNode("mtext",[u]):/[0-9]/.test(i.text)?p=new vi.MathNode("mn",[u]):i.text==="\\prime"?p=new vi.MathNode("mo",[u]):p=new vi.MathNode("mi",[u]),d!==iqe[p.type]&&p.setAttribute("mathvariant",d),p}});var Mbe={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},Dbe={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};zC({type:"spacing",htmlBuilder(i,s){if(Dbe.hasOwnProperty(i.text)){var u=Dbe[i.text].className||"";if(i.mode==="text"){var d=zn.makeOrd(i,s,"textord");return d.classes.push(u),d}else return zn.makeSpan(["mspace",u],[zn.mathsym(i.text,i.mode,s)],s)}else{if(Mbe.hasOwnProperty(i.text))return zn.makeSpan(["mspace",Mbe[i.text]],[],s);throw new Ci('Unknown type of space "'+i.text+'"')}},mathmlBuilder(i,s){var u;if(Dbe.hasOwnProperty(i.text))u=new vi.MathNode("mtext",[new vi.TextNode(" ")]);else{if(Mbe.hasOwnProperty(i.text))return new vi.MathNode("mspace");throw new Ci('Unknown type of space "'+i.text+'"')}return u}});var sqe=()=>{var i=new vi.MathNode("mtd",[]);return i.setAttribute("width","50%"),i};zC({type:"tag",mathmlBuilder(i,s){var u=new vi.MathNode("mtable",[new vi.MathNode("mtr",[sqe(),new vi.MathNode("mtd",[_9(i.body,s)]),sqe(),new vi.MathNode("mtd",[_9(i.tag,s)])])]);return u.setAttribute("width","100%"),u}});var aqe={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},oqe={"\\textbf":"textbf","\\textmd":"textmd"},bVt={"\\textit":"textit","\\textup":"textup"},cqe=(i,s)=>{var u=i.font;return u?aqe[u]?s.withTextFontFamily(aqe[u]):oqe[u]?s.withTextFontWeight(oqe[u]):s.withTextFontShape(bVt[u]):s};Ji({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(i,s){var{parser:u,funcName:d}=i,p=s[0];return{type:"text",mode:u.mode,body:Xf(p),font:d}},htmlBuilder(i,s){var u=cqe(i,s),d=d1(i.body,u,!0);return zn.makeSpan(["mord","text"],d,u)},mathmlBuilder(i,s){var u=cqe(i,s);return _9(i.body,u)}}),Ji({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(i,s){var{parser:u}=i;return{type:"underline",mode:u.mode,body:s[0]}},htmlBuilder(i,s){var u=uu(i.body,s),d=zn.makeLineSpan("underline-line",s),p=s.fontMetrics().defaultRuleThickness,v=zn.makeVList({positionType:"top",positionData:u.height,children:[{type:"kern",size:p},{type:"elem",elem:d},{type:"kern",size:3*p},{type:"elem",elem:u}]},s);return zn.makeSpan(["mord","underline"],[v],s)},mathmlBuilder(i,s){var u=new vi.MathNode("mo",[new vi.TextNode("‾")]);u.setAttribute("stretchy","true");var d=new vi.MathNode("munder",[Ll(i.body,s),u]);return d.setAttribute("accentunder","true"),d}}),Ji({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(i,s){var{parser:u}=i;return{type:"vcenter",mode:u.mode,body:s[0]}},htmlBuilder(i,s){var u=uu(i.body,s),d=s.fontMetrics().axisHeight,p=.5*(u.height-d-(u.depth+d));return zn.makeVList({positionType:"shift",positionData:p,children:[{type:"elem",elem:u}]},s)},mathmlBuilder(i,s){return new vi.MathNode("mpadded",[Ll(i.body,s)],["vcenter"])}}),Ji({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(i,s,u){throw new Ci("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(i,s){for(var u=uqe(i),d=[],p=s.havingStyle(s.style.text()),v=0;vi.body.replace(/ /g,i.star?"␣":" "),L9=dze,lqe=`[ \r - ]`,mVt="\\\\[a-zA-Z@]+",vVt="\\\\[^\uD800-\uDFFF]",wVt="("+mVt+")"+lqe+"*",yVt=`\\\\( +l0,-`+(r+144)+`c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7, +-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z`;default:throw new Error("Unknown stretchy delimiter.")}},"tallDelim"),rd=class{static{o(this,"DocumentFragment")}constructor(e){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=e,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}hasClass(e){return Jt.contains(this.classes,e)}toNode(){for(var e=document.createDocumentFragment(),r=0;rr.toText(),"toText");return this.children.map(e).join("")}},lc={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},l4={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},nG={\u00C5:"A",\u00D0:"D",\u00DE:"o",\u00E5:"a",\u00F0:"d",\u00FE:"o",\u0410:"A",\u0411:"B",\u0412:"B",\u0413:"F",\u0414:"A",\u0415:"E",\u0416:"K",\u0417:"3",\u0418:"N",\u0419:"N",\u041A:"K",\u041B:"N",\u041C:"M",\u041D:"H",\u041E:"O",\u041F:"N",\u0420:"P",\u0421:"C",\u0422:"T",\u0423:"y",\u0424:"O",\u0425:"X",\u0426:"U",\u0427:"h",\u0428:"W",\u0429:"W",\u042A:"B",\u042B:"X",\u042C:"B",\u042D:"3",\u042E:"X",\u042F:"R",\u0430:"a",\u0431:"b",\u0432:"a",\u0433:"r",\u0434:"y",\u0435:"e",\u0436:"m",\u0437:"e",\u0438:"n",\u0439:"n",\u043A:"n",\u043B:"n",\u043C:"m",\u043D:"n",\u043E:"o",\u043F:"n",\u0440:"p",\u0441:"c",\u0442:"o",\u0443:"y",\u0444:"b",\u0445:"x",\u0446:"n",\u0447:"n",\u0448:"w",\u0449:"w",\u044A:"a",\u044B:"m",\u044C:"a",\u044D:"e",\u044E:"m",\u044F:"r"};o(Abe,"setFontMetrics");o(IC,"getCharacterMetrics");cC={};o(_be,"getGlobalMetrics");Lbe=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],iG=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],aG=o(function(e,r){return r.size<2?e:Lbe[e-1][r.size-1]},"sizeAtStyle"),T4=class t{static{o(this,"Options")}constructor(e){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=e.style,this.color=e.color,this.size=e.size||t.BASESIZE,this.textSize=e.textSize||this.size,this.phantom=!!e.phantom,this.font=e.font||"",this.fontFamily=e.fontFamily||"",this.fontWeight=e.fontWeight||"",this.fontShape=e.fontShape||"",this.sizeMultiplier=iG[this.size-1],this.maxSize=e.maxSize,this.minRuleThickness=e.minRuleThickness,this._fontMetrics=void 0}extend(e){var r={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};for(var n in e)e.hasOwnProperty(n)&&(r[n]=e[n]);return new t(r)}havingStyle(e){return this.style===e?this:this.extend({style:e,size:aG(this.textSize,e)})}havingCrampedStyle(){return this.havingStyle(this.style.cramp())}havingSize(e){return this.size===e&&this.textSize===e?this:this.extend({style:this.style.text(),size:e,textSize:e,sizeMultiplier:iG[e-1]})}havingBaseStyle(e){e=e||this.style.text();var r=aG(t.BASESIZE,e);return this.size===r&&this.textSize===t.BASESIZE&&this.style===e?this:this.extend({style:e,size:r})}havingBaseSizing(){var e;switch(this.style.id){case 4:case 5:e=3;break;case 6:case 7:e=1;break;default:e=6}return this.extend({style:this.style.text(),size:e})}withColor(e){return this.extend({color:e})}withPhantom(){return this.extend({phantom:!0})}withFont(e){return this.extend({font:e})}withTextFontFamily(e){return this.extend({fontFamily:e,font:""})}withTextFontWeight(e){return this.extend({fontWeight:e,font:""})}withTextFontShape(e){return this.extend({fontShape:e,font:""})}sizingClasses(e){return e.size!==this.size?["sizing","reset-size"+e.size,"size"+this.size]:[]}baseSizingClasses(){return this.size!==t.BASESIZE?["sizing","reset-size"+this.size,"size"+t.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=_be(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}};T4.BASESIZE=6;TC={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:803/800,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:803/800},Dbe={ex:!0,em:!0,mu:!0},OG=o(function(e){return typeof e!="string"&&(e=e.unit),e in TC||e in Dbe||e==="ex"},"validUnit"),Jn=o(function(e,r){var n;if(e.unit in TC)n=TC[e.unit]/r.fontMetrics().ptPerEm/r.sizeMultiplier;else if(e.unit==="mu")n=r.fontMetrics().cssEmPerMu;else{var i;if(r.style.isTight()?i=r.havingStyle(r.style.text()):i=r,e.unit==="ex")n=i.fontMetrics().xHeight;else if(e.unit==="em")n=i.fontMetrics().quad;else throw new lt("Invalid unit: '"+e.unit+"'");i!==r&&(n*=i.sizeMultiplier/r.sizeMultiplier)}return Math.min(e.number*n,r.maxSize)},"calculateSize"),gt=o(function(e){return+e.toFixed(4)+"em"},"makeEm"),yh=o(function(e){return e.filter(r=>r).join(" ")},"createClass"),PG=o(function(e,r,n){if(this.classes=e||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=n||{},r){r.style.isTight()&&this.classes.push("mtight");var i=r.getColor();i&&(this.style.color=i)}},"initNode"),BG=o(function(e){var r=document.createElement(e);r.className=yh(this.classes);for(var n in this.style)this.style.hasOwnProperty(n)&&(r.style[n]=this.style[n]);for(var i in this.attributes)this.attributes.hasOwnProperty(i)&&r.setAttribute(i,this.attributes[i]);for(var a=0;a",r},"toMarkup"),nd=class{static{o(this,"Span")}constructor(e,r,n,i){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,PG.call(this,e,n,i),this.children=r||[]}setAttribute(e,r){this.attributes[e]=r}hasClass(e){return Jt.contains(this.classes,e)}toNode(){return BG.call(this,"span")}toMarkup(){return FG.call(this,"span")}},my=class{static{o(this,"Anchor")}constructor(e,r,n,i){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,PG.call(this,r,i),this.children=n||[],this.setAttribute("href",e)}setAttribute(e,r){this.attributes[e]=r}hasClass(e){return Jt.contains(this.classes,e)}toNode(){return BG.call(this,"a")}toMarkup(){return FG.call(this,"a")}},kC=class{static{o(this,"Img")}constructor(e,r,n){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=r,this.src=e,this.classes=["mord"],this.style=n}hasClass(e){return Jt.contains(this.classes,e)}toNode(){var e=document.createElement("img");e.src=this.src,e.alt=this.alt,e.className="mord";for(var r in this.style)this.style.hasOwnProperty(r)&&(e.style[r]=this.style[r]);return e}toMarkup(){var e=''+Jt.escape(this.alt)+'0&&(r=document.createElement("span"),r.style.marginRight=gt(this.italic)),this.classes.length>0&&(r=r||document.createElement("span"),r.className=yh(this.classes));for(var n in this.style)this.style.hasOwnProperty(n)&&(r=r||document.createElement("span"),r.style[n]=this.style[n]);return r?(r.appendChild(e),r):e}toMarkup(){var e=!1,r="0&&(n+="margin-right:"+this.italic+"em;");for(var i in this.style)this.style.hasOwnProperty(i)&&(n+=Jt.hyphenate(i)+":"+this.style[i]+";");n&&(e=!0,r+=' style="'+Jt.escape(n)+'"');var a=Jt.escape(this.text);return e?(r+=">",r+=a,r+="",r):a}},vl=class{static{o(this,"SvgNode")}constructor(e,r){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=r||{}}toNode(){var e="http://www.w3.org/2000/svg",r=document.createElementNS(e,"svg");for(var n in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,n)&&r.setAttribute(n,this.attributes[n]);for(var i=0;i':''}},gy=class{static{o(this,"LineNode")}constructor(e){this.attributes=void 0,this.attributes=e||{}}toNode(){var e="http://www.w3.org/2000/svg",r=document.createElementNS(e,"line");for(var n in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,n)&&r.setAttribute(n,this.attributes[n]);return r}toMarkup(){var e="","\\gt",!0);$(V,re,we,"\u2208","\\in",!0);$(V,re,we,"\uE020","\\@not");$(V,re,we,"\u2282","\\subset",!0);$(V,re,we,"\u2283","\\supset",!0);$(V,re,we,"\u2286","\\subseteq",!0);$(V,re,we,"\u2287","\\supseteq",!0);$(V,be,we,"\u2288","\\nsubseteq",!0);$(V,be,we,"\u2289","\\nsupseteq",!0);$(V,re,we,"\u22A8","\\models");$(V,re,we,"\u2190","\\leftarrow",!0);$(V,re,we,"\u2264","\\le");$(V,re,we,"\u2264","\\leq",!0);$(V,re,we,"<","\\lt",!0);$(V,re,we,"\u2192","\\rightarrow",!0);$(V,re,we,"\u2192","\\to");$(V,be,we,"\u2271","\\ngeq",!0);$(V,be,we,"\u2270","\\nleq",!0);$(V,re,gu,"\xA0","\\ ");$(V,re,gu,"\xA0","\\space");$(V,re,gu,"\xA0","\\nobreakspace");$(it,re,gu,"\xA0","\\ ");$(it,re,gu,"\xA0"," ");$(it,re,gu,"\xA0","\\space");$(it,re,gu,"\xA0","\\nobreakspace");$(V,re,gu,null,"\\nobreak");$(V,re,gu,null,"\\allowbreak");$(V,re,L4,",",",");$(V,re,L4,";",";");$(V,be,Lt,"\u22BC","\\barwedge",!0);$(V,be,Lt,"\u22BB","\\veebar",!0);$(V,re,Lt,"\u2299","\\odot",!0);$(V,re,Lt,"\u2295","\\oplus",!0);$(V,re,Lt,"\u2297","\\otimes",!0);$(V,re,_e,"\u2202","\\partial",!0);$(V,re,Lt,"\u2298","\\oslash",!0);$(V,be,Lt,"\u229A","\\circledcirc",!0);$(V,be,Lt,"\u22A1","\\boxdot",!0);$(V,re,Lt,"\u25B3","\\bigtriangleup");$(V,re,Lt,"\u25BD","\\bigtriangledown");$(V,re,Lt,"\u2020","\\dagger");$(V,re,Lt,"\u22C4","\\diamond");$(V,re,Lt,"\u22C6","\\star");$(V,re,Lt,"\u25C3","\\triangleleft");$(V,re,Lt,"\u25B9","\\triangleright");$(V,re,eo,"{","\\{");$(it,re,_e,"{","\\{");$(it,re,_e,"{","\\textbraceleft");$(V,re,es,"}","\\}");$(it,re,_e,"}","\\}");$(it,re,_e,"}","\\textbraceright");$(V,re,eo,"{","\\lbrace");$(V,re,es,"}","\\rbrace");$(V,re,eo,"[","\\lbrack",!0);$(it,re,_e,"[","\\lbrack",!0);$(V,re,es,"]","\\rbrack",!0);$(it,re,_e,"]","\\rbrack",!0);$(V,re,eo,"(","\\lparen",!0);$(V,re,es,")","\\rparen",!0);$(it,re,_e,"<","\\textless",!0);$(it,re,_e,">","\\textgreater",!0);$(V,re,eo,"\u230A","\\lfloor",!0);$(V,re,es,"\u230B","\\rfloor",!0);$(V,re,eo,"\u2308","\\lceil",!0);$(V,re,es,"\u2309","\\rceil",!0);$(V,re,_e,"\\","\\backslash");$(V,re,_e,"\u2223","|");$(V,re,_e,"\u2223","\\vert");$(it,re,_e,"|","\\textbar",!0);$(V,re,_e,"\u2225","\\|");$(V,re,_e,"\u2225","\\Vert");$(it,re,_e,"\u2225","\\textbardbl");$(it,re,_e,"~","\\textasciitilde");$(it,re,_e,"\\","\\textbackslash");$(it,re,_e,"^","\\textasciicircum");$(V,re,we,"\u2191","\\uparrow",!0);$(V,re,we,"\u21D1","\\Uparrow",!0);$(V,re,we,"\u2193","\\downarrow",!0);$(V,re,we,"\u21D3","\\Downarrow",!0);$(V,re,we,"\u2195","\\updownarrow",!0);$(V,re,we,"\u21D5","\\Updownarrow",!0);$(V,re,Ci,"\u2210","\\coprod");$(V,re,Ci,"\u22C1","\\bigvee");$(V,re,Ci,"\u22C0","\\bigwedge");$(V,re,Ci,"\u2A04","\\biguplus");$(V,re,Ci,"\u22C2","\\bigcap");$(V,re,Ci,"\u22C3","\\bigcup");$(V,re,Ci,"\u222B","\\int");$(V,re,Ci,"\u222B","\\intop");$(V,re,Ci,"\u222C","\\iint");$(V,re,Ci,"\u222D","\\iiint");$(V,re,Ci,"\u220F","\\prod");$(V,re,Ci,"\u2211","\\sum");$(V,re,Ci,"\u2A02","\\bigotimes");$(V,re,Ci,"\u2A01","\\bigoplus");$(V,re,Ci,"\u2A00","\\bigodot");$(V,re,Ci,"\u222E","\\oint");$(V,re,Ci,"\u222F","\\oiint");$(V,re,Ci,"\u2230","\\oiiint");$(V,re,Ci,"\u2A06","\\bigsqcup");$(V,re,Ci,"\u222B","\\smallint");$(it,re,Sp,"\u2026","\\textellipsis");$(V,re,Sp,"\u2026","\\mathellipsis");$(it,re,Sp,"\u2026","\\ldots",!0);$(V,re,Sp,"\u2026","\\ldots",!0);$(V,re,Sp,"\u22EF","\\@cdots",!0);$(V,re,Sp,"\u22F1","\\ddots",!0);$(V,re,_e,"\u22EE","\\varvdots");$(V,re,Un,"\u02CA","\\acute");$(V,re,Un,"\u02CB","\\grave");$(V,re,Un,"\xA8","\\ddot");$(V,re,Un,"~","\\tilde");$(V,re,Un,"\u02C9","\\bar");$(V,re,Un,"\u02D8","\\breve");$(V,re,Un,"\u02C7","\\check");$(V,re,Un,"^","\\hat");$(V,re,Un,"\u20D7","\\vec");$(V,re,Un,"\u02D9","\\dot");$(V,re,Un,"\u02DA","\\mathring");$(V,re,tr,"\uE131","\\@imath");$(V,re,tr,"\uE237","\\@jmath");$(V,re,_e,"\u0131","\u0131");$(V,re,_e,"\u0237","\u0237");$(it,re,_e,"\u0131","\\i",!0);$(it,re,_e,"\u0237","\\j",!0);$(it,re,_e,"\xDF","\\ss",!0);$(it,re,_e,"\xE6","\\ae",!0);$(it,re,_e,"\u0153","\\oe",!0);$(it,re,_e,"\xF8","\\o",!0);$(it,re,_e,"\xC6","\\AE",!0);$(it,re,_e,"\u0152","\\OE",!0);$(it,re,_e,"\xD8","\\O",!0);$(it,re,Un,"\u02CA","\\'");$(it,re,Un,"\u02CB","\\`");$(it,re,Un,"\u02C6","\\^");$(it,re,Un,"\u02DC","\\~");$(it,re,Un,"\u02C9","\\=");$(it,re,Un,"\u02D8","\\u");$(it,re,Un,"\u02D9","\\.");$(it,re,Un,"\xB8","\\c");$(it,re,Un,"\u02DA","\\r");$(it,re,Un,"\u02C7","\\v");$(it,re,Un,"\xA8",'\\"');$(it,re,Un,"\u02DD","\\H");$(it,re,Un,"\u25EF","\\textcircled");zG={"--":!0,"---":!0,"``":!0,"''":!0};$(it,re,_e,"\u2013","--",!0);$(it,re,_e,"\u2013","\\textendash");$(it,re,_e,"\u2014","---",!0);$(it,re,_e,"\u2014","\\textemdash");$(it,re,_e,"\u2018","`",!0);$(it,re,_e,"\u2018","\\textquoteleft");$(it,re,_e,"\u2019","'",!0);$(it,re,_e,"\u2019","\\textquoteright");$(it,re,_e,"\u201C","``",!0);$(it,re,_e,"\u201C","\\textquotedblleft");$(it,re,_e,"\u201D","''",!0);$(it,re,_e,"\u201D","\\textquotedblright");$(V,re,_e,"\xB0","\\degree",!0);$(it,re,_e,"\xB0","\\degree");$(it,re,_e,"\xB0","\\textdegree",!0);$(V,re,_e,"\xA3","\\pounds");$(V,re,_e,"\xA3","\\mathsterling",!0);$(it,re,_e,"\xA3","\\pounds");$(it,re,_e,"\xA3","\\textsterling",!0);$(V,be,_e,"\u2720","\\maltese");$(it,be,_e,"\u2720","\\maltese");oG='0123456789/@."';for(c4=0;c40)return yl(a,h,i,r,s.concat(f));if(u){var d,p;if(u==="boldsymbol"){var m=Bbe(a,i,r,s,n);d=m.fontName,p=[m.fontClass]}else l?(d=VG[u].fontName,p=[u]):(d=p4(u,r.fontWeight,r.fontShape),p=[u,r.fontWeight,r.fontShape]);if(D4(a,d,i).metrics)return yl(a,d,i,r,s.concat(p));if(zG.hasOwnProperty(a)&&d.slice(0,10)==="Typewriter"){for(var g=[],y=0;y{if(yh(t.classes)!==yh(e.classes)||t.skew!==e.skew||t.maxFontSize!==e.maxFontSize)return!1;if(t.classes.length===1){var r=t.classes[0];if(r==="mbin"||r==="mord")return!1}for(var n in t.style)if(t.style.hasOwnProperty(n)&&t.style[n]!==e.style[n])return!1;for(var i in e.style)if(e.style.hasOwnProperty(i)&&t.style[i]!==e.style[i])return!1;return!0},"canCombine"),Gbe=o(t=>{for(var e=0;er&&(r=s.height),s.depth>n&&(n=s.depth),s.maxFontSize>i&&(i=s.maxFontSize)}e.height=r,e.depth=n,e.maxFontSize=i},"sizeElementFromChildren"),Ts=o(function(e,r,n,i){var a=new nd(e,r,n,i);return OC(a),a},"makeSpan"),GG=o((t,e,r,n)=>new nd(t,e,r,n),"makeSvgSpan"),$be=o(function(e,r,n){var i=Ts([e],[],r);return i.height=Math.max(n||r.fontMetrics().defaultRuleThickness,r.minRuleThickness),i.style.borderBottomWidth=gt(i.height),i.maxFontSize=1,i},"makeLineSpan"),Vbe=o(function(e,r,n,i){var a=new my(e,r,n,i);return OC(a),a},"makeAnchor"),$G=o(function(e){var r=new rd(e);return OC(r),r},"makeFragment"),Ube=o(function(e,r){return e instanceof rd?Ts([],[e],r):e},"wrapFragment"),Hbe=o(function(e){if(e.positionType==="individualShift"){for(var r=e.children,n=[r[0]],i=-r[0].shift-r[0].elem.depth,a=i,s=1;s{var r=Ts(["mspace"],[],e),n=Jn(t,e);return r.style.marginRight=gt(n),r},"makeGlue"),p4=o(function(e,r,n){var i="";switch(e){case"amsrm":i="AMS";break;case"textrm":i="Main";break;case"textsf":i="SansSerif";break;case"texttt":i="Typewriter";break;default:i=e}var a;return r==="textbf"&&n==="textit"?a="BoldItalic":r==="textbf"?a="Bold":r==="textit"?a="Italic":a="Regular",i+"-"+a},"retrieveTextFontName"),VG={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},UG={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},qbe=o(function(e,r){var[n,i,a]=UG[e],s=new cc(n),l=new vl([s],{width:gt(i),height:gt(a),style:"width:"+gt(i),viewBox:"0 0 "+1e3*i+" "+1e3*a,preserveAspectRatio:"xMinYMin"}),u=GG(["overlay"],[l],r);return u.height=a,u.style.height=gt(a),u.style.width=gt(i),u},"staticSvg"),Fe={fontMap:VG,makeSymbol:yl,mathsym:Pbe,makeSpan:Ts,makeSvgSpan:GG,makeLineSpan:$be,makeAnchor:Vbe,makeFragment:$G,wrapFragment:Ube,makeVList:Wbe,makeOrd:Fbe,makeGlue:Ybe,staticSvg:qbe,svgData:UG,tryCombineChars:Gbe},Zn={number:3,unit:"mu"},ed={number:4,unit:"mu"},hu={number:5,unit:"mu"},Xbe={mord:{mop:Zn,mbin:ed,mrel:hu,minner:Zn},mop:{mord:Zn,mop:Zn,mrel:hu,minner:Zn},mbin:{mord:ed,mop:ed,mopen:ed,minner:ed},mrel:{mord:hu,mop:hu,mopen:hu,minner:hu},mopen:{},mclose:{mop:Zn,mbin:ed,mrel:hu,minner:Zn},mpunct:{mord:Zn,mop:Zn,mrel:hu,mopen:Zn,mclose:Zn,mpunct:Zn,minner:Zn},minner:{mord:Zn,mop:Zn,mbin:ed,mrel:hu,mopen:Zn,mpunct:Zn,minner:Zn}},jbe={mord:{mop:Zn},mop:{mord:Zn,mop:Zn},mbin:{},mrel:{},mopen:{},mclose:{mop:Zn},mpunct:{},minner:{mop:Zn}},HG={},E4={},S4={};o(St,"defineFunction");o(id,"defineFunctionBuilders");C4=o(function(e){return e.type==="ordgroup"&&e.body.length===1?e.body[0]:e},"normalizeArgument"),gi=o(function(e){return e.type==="ordgroup"?e.body:[e]},"ordargument"),pu=Fe.makeSpan,Kbe=["leftmost","mbin","mopen","mrel","mop","mpunct"],Qbe=["rightmost","mrel","mclose","mpunct"],Zbe={display:rr.DISPLAY,text:rr.TEXT,script:rr.SCRIPT,scriptscript:rr.SCRIPTSCRIPT},Jbe={mord:"mord",mop:"mop",mbin:"mbin",mrel:"mrel",mopen:"mopen",mclose:"mclose",mpunct:"mpunct",minner:"minner"},Fi=o(function(e,r,n,i){i===void 0&&(i=[null,null]);for(var a=[],s=0;s{var v=y.classes[0],x=g.classes[0];v==="mbin"&&Jt.contains(Qbe,x)?y.classes[0]="mord":x==="mbin"&&Jt.contains(Kbe,v)&&(g.classes[0]="mord")},{node:d},p,m),uG(a,(g,y)=>{var v=SC(y),x=SC(g),b=v&&x?g.hasClass("mtight")?jbe[v][x]:Xbe[v][x]:null;if(b)return Fe.makeGlue(b,h)},{node:d},p,m),a},"buildExpression"),uG=o(function t(e,r,n,i,a){i&&e.push(i);for(var s=0;sp=>{e.splice(d+1,0,p),s++})(s)}i&&e.pop()},"traverseNonSpaceNodes"),WG=o(function(e){return e instanceof rd||e instanceof my||e instanceof nd&&e.hasClass("enclosing")?e:null},"checkPartialGroup"),e4e=o(function t(e,r){var n=WG(e);if(n){var i=n.children;if(i.length){if(r==="right")return t(i[i.length-1],"right");if(r==="left")return t(i[0],"left")}}return e},"getOutermostNode"),SC=o(function(e,r){return e?(r&&(e=e4e(e,r)),Jbe[e.classes[0]]||null):null},"getTypeOfDomTree"),yy=o(function(e,r){var n=["nulldelimiter"].concat(e.baseSizingClasses());return pu(r.concat(n))},"makeNullDelimiter"),Pr=o(function(e,r,n){if(!e)return pu();if(E4[e.type]){var i=E4[e.type](e,r);if(n&&r.size!==n.size){i=pu(r.sizingClasses(n),[i],r);var a=r.sizeMultiplier/n.sizeMultiplier;i.height*=a,i.depth*=a}return i}else throw new lt("Got group of unknown type: '"+e.type+"'")},"buildGroup");o(m4,"buildHTMLUnbreakable");o(CC,"buildHTML");o(YG,"newDocumentFragment");ks=class{static{o(this,"MathNode")}constructor(e,r,n){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=r||[],this.classes=n||[]}setAttribute(e,r){this.attributes[e]=r}getAttribute(e){return this.attributes[e]}toNode(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&e.setAttribute(r,this.attributes[r]);this.classes.length>0&&(e.className=yh(this.classes));for(var n=0;n0&&(e+=' class ="'+Jt.escape(yh(this.classes))+'"'),e+=">";for(var n=0;n",e}toText(){return this.children.map(e=>e.toText()).join("")}},td=class{static{o(this,"TextNode")}constructor(e){this.text=void 0,this.text=e}toNode(){return document.createTextNode(this.text)}toMarkup(){return Jt.escape(this.toText())}toText(){return this.text}},AC=class{static{o(this,"SpaceNode")}constructor(e){this.width=void 0,this.character=void 0,this.width=e,e>=.05555&&e<=.05556?this.character="\u200A":e>=.1666&&e<=.1667?this.character="\u2009":e>=.2222&&e<=.2223?this.character="\u2005":e>=.2777&&e<=.2778?this.character="\u2005\u200A":e>=-.05556&&e<=-.05555?this.character="\u200A\u2063":e>=-.1667&&e<=-.1666?this.character="\u2009\u2063":e>=-.2223&&e<=-.2222?this.character="\u205F\u2063":e>=-.2778&&e<=-.2777?this.character="\u2005\u2063":this.character=null}toNode(){if(this.character)return document.createTextNode(this.character);var e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",gt(this.width)),e}toMarkup(){return this.character?""+this.character+"":''}toText(){return this.character?this.character:" "}},at={MathNode:ks,TextNode:td,SpaceNode:AC,newDocumentFragment:YG},Mo=o(function(e,r,n){return Cn[r][e]&&Cn[r][e].replace&&e.charCodeAt(0)!==55349&&!(zG.hasOwnProperty(e)&&n&&(n.fontFamily&&n.fontFamily.slice(4,6)==="tt"||n.font&&n.font.slice(4,6)==="tt"))&&(e=Cn[r][e].replace),new at.TextNode(e)},"makeText"),PC=o(function(e){return e.length===1?e[0]:new at.MathNode("mrow",e)},"makeRow"),BC=o(function(e,r){if(r.fontFamily==="texttt")return"monospace";if(r.fontFamily==="textsf")return r.fontShape==="textit"&&r.fontWeight==="textbf"?"sans-serif-bold-italic":r.fontShape==="textit"?"sans-serif-italic":r.fontWeight==="textbf"?"bold-sans-serif":"sans-serif";if(r.fontShape==="textit"&&r.fontWeight==="textbf")return"bold-italic";if(r.fontShape==="textit")return"italic";if(r.fontWeight==="textbf")return"bold";var n=r.font;if(!n||n==="mathnormal")return null;var i=e.mode;if(n==="mathit")return"italic";if(n==="boldsymbol")return e.type==="textord"?"bold":"bold-italic";if(n==="mathbf")return"bold";if(n==="mathbb")return"double-struck";if(n==="mathfrak")return"fraktur";if(n==="mathscr"||n==="mathcal")return"script";if(n==="mathsf")return"sans-serif";if(n==="mathtt")return"monospace";var a=e.text;if(Jt.contains(["\\imath","\\jmath"],a))return null;Cn[i][a]&&Cn[i][a].replace&&(a=Cn[i][a].replace);var s=Fe.fontMap[n].fontName;return IC(a,s,i)?Fe.fontMap[n].variant:null},"getVariant"),Ss=o(function(e,r,n){if(e.length===1){var i=yn(e[0],r);return n&&i instanceof ks&&i.type==="mo"&&(i.setAttribute("lspace","0em"),i.setAttribute("rspace","0em")),[i]}for(var a=[],s,l=0;l0&&(d.text=d.text.slice(0,1)+"\u0338"+d.text.slice(1),a.pop())}}}a.push(u),s=u}return a},"buildExpression"),vh=o(function(e,r,n){return PC(Ss(e,r,n))},"buildExpressionRow"),yn=o(function(e,r){if(!e)return new at.MathNode("mrow");if(S4[e.type]){var n=S4[e.type](e,r);return n}else throw new lt("Got group of unknown type: '"+e.type+"'")},"buildGroup");o(hG,"buildMathML");qG=o(function(e){return new T4({style:e.displayMode?rr.DISPLAY:rr.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},"optionsFromSettings"),XG=o(function(e,r){if(r.displayMode){var n=["katex-display"];r.leqno&&n.push("leqno"),r.fleqn&&n.push("fleqn"),e=Fe.makeSpan(n,[e])}return e},"displayWrap"),t4e=o(function(e,r,n){var i=qG(n),a;if(n.output==="mathml")return hG(e,r,i,n.displayMode,!0);if(n.output==="html"){var s=CC(e,i);a=Fe.makeSpan(["katex"],[s])}else{var l=hG(e,r,i,n.displayMode,!1),u=CC(e,i);a=Fe.makeSpan(["katex"],[l,u])}return XG(a,n)},"buildTree"),r4e=o(function(e,r,n){var i=qG(n),a=CC(e,i),s=Fe.makeSpan(["katex"],[a]);return XG(s,n)},"buildHTMLTree"),n4e={widehat:"^",widecheck:"\u02C7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23DF",overbrace:"\u23DE",overgroup:"\u23E0",undergroup:"\u23E1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21D2",xRightarrow:"\u21D2",overleftharpoon:"\u21BC",xleftharpoonup:"\u21BC",overrightharpoon:"\u21C0",xrightharpoonup:"\u21C0",xLeftarrow:"\u21D0",xLeftrightarrow:"\u21D4",xhookleftarrow:"\u21A9",xhookrightarrow:"\u21AA",xmapsto:"\u21A6",xrightharpoondown:"\u21C1",xleftharpoondown:"\u21BD",xrightleftharpoons:"\u21CC",xleftrightharpoons:"\u21CB",xtwoheadleftarrow:"\u219E",xtwoheadrightarrow:"\u21A0",xlongequal:"=",xtofrom:"\u21C4",xrightleftarrows:"\u21C4",xrightequilibrium:"\u21CC",xleftequilibrium:"\u21CB","\\cdrightarrow":"\u2192","\\cdleftarrow":"\u2190","\\cdlongequal":"="},i4e=o(function(e){var r=new at.MathNode("mo",[new at.TextNode(n4e[e.replace(/^\\/,"")])]);return r.setAttribute("stretchy","true"),r},"mathMLnode"),a4e={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},s4e=o(function(e){return e.type==="ordgroup"?e.body.length:1},"groupLength"),o4e=o(function(e,r){function n(){var l=4e5,u=e.label.slice(1);if(Jt.contains(["widehat","widecheck","widetilde","utilde"],u)){var h=e,f=s4e(h.base),d,p,m;if(f>5)u==="widehat"||u==="widecheck"?(d=420,l=2364,m=.42,p=u+"4"):(d=312,l=2340,m=.34,p="tilde4");else{var g=[1,1,2,2,3,3][f];u==="widehat"||u==="widecheck"?(l=[0,1062,2364,2364,2364][g],d=[0,239,300,360,420][g],m=[0,.24,.3,.3,.36,.42][g],p=u+g):(l=[0,600,1033,2339,2340][g],d=[0,260,286,306,312][g],m=[0,.26,.286,.3,.306,.34][g],p="tilde"+g)}var y=new cc(p),v=new vl([y],{width:"100%",height:gt(m),viewBox:"0 0 "+l+" "+d,preserveAspectRatio:"none"});return{span:Fe.makeSvgSpan([],[v],r),minWidth:0,height:m}}else{var x=[],b=a4e[u],[w,_,T]=b,E=T/1e3,L=w.length,S,A;if(L===1){var I=b[3];S=["hide-tail"],A=[I]}else if(L===2)S=["halfarrow-left","halfarrow-right"],A=["xMinYMin","xMaxYMin"];else if(L===3)S=["brace-left","brace-center","brace-right"],A=["xMinYMin","xMidYMin","xMaxYMin"];else throw new Error(`Correct katexImagesData or update code here to support + `+L+" children.");for(var D=0;D0&&(i.style.minWidth=gt(a)),i},"svgSpan"),l4e=o(function(e,r,n,i,a){var s,l=e.height+e.depth+n+i;if(/fbox|color|angl/.test(r)){if(s=Fe.makeSpan(["stretchy",r],[],a),r==="fbox"){var u=a.color&&a.getColor();u&&(s.style.borderColor=u)}}else{var h=[];/^[bx]cancel$/.test(r)&&h.push(new gy({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(r)&&h.push(new gy({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var f=new vl(h,{width:"100%",height:gt(l)});s=Fe.makeSvgSpan([],[f],a)}return s.height=l,s.style.height=gt(l),s},"encloseSpan"),mu={encloseSpan:l4e,mathMLnode:i4e,svgSpan:o4e};o(gr,"assertNodeType");o(FC,"assertSymbolNodeType");o(N4,"checkSymbolNodeType");zC=o((t,e)=>{var r,n,i;t&&t.type==="supsub"?(n=gr(t.base,"accent"),r=n.base,t.base=r,i=Rbe(Pr(t,e)),t.base=n):(n=gr(t,"accent"),r=n.base);var a=Pr(r,e.havingCrampedStyle()),s=n.isShifty&&Jt.isCharacterBox(r),l=0;if(s){var u=Jt.getBaseElem(r),h=Pr(u,e.havingCrampedStyle());l=sG(h).skew}var f=n.label==="\\c",d=f?a.height+a.depth:Math.min(a.height,e.fontMetrics().xHeight),p;if(n.isStretchy)p=mu.svgSpan(n,e),p=Fe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"elem",elem:p,wrapperClasses:["svg-align"],wrapperStyle:l>0?{width:"calc(100% - "+gt(2*l)+")",marginLeft:gt(2*l)}:void 0}]},e);else{var m,g;n.label==="\\vec"?(m=Fe.staticSvg("vec",e),g=Fe.svgData.vec[1]):(m=Fe.makeOrd({mode:n.mode,text:n.label},e,"textord"),m=sG(m),m.italic=0,g=m.width,f&&(d+=m.depth)),p=Fe.makeSpan(["accent-body"],[m]);var y=n.label==="\\textcircled";y&&(p.classes.push("accent-full"),d=a.height);var v=l;y||(v-=g/2),p.style.left=gt(v),n.label==="\\textcircled"&&(p.style.top=".2em"),p=Fe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"kern",size:-d},{type:"elem",elem:p}]},e)}var x=Fe.makeSpan(["mord","accent"],[p],e);return i?(i.children[0]=x,i.height=Math.max(x.height,i.height),i.classes[0]="mord",i):x},"htmlBuilder$a"),jG=o((t,e)=>{var r=t.isStretchy?mu.mathMLnode(t.label):new at.MathNode("mo",[Mo(t.label,t.mode)]),n=new at.MathNode("mover",[yn(t.base,e),r]);return n.setAttribute("accent","true"),n},"mathmlBuilder$9"),c4e=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map(t=>"\\"+t).join("|"));St({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:o((t,e)=>{var r=C4(e[0]),n=!c4e.test(t.funcName),i=!n||t.funcName==="\\widehat"||t.funcName==="\\widetilde"||t.funcName==="\\widecheck";return{type:"accent",mode:t.parser.mode,label:t.funcName,isStretchy:n,isShifty:i,base:r}},"handler"),htmlBuilder:zC,mathmlBuilder:jG});St({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:o((t,e)=>{var r=e[0],n=t.parser.mode;return n==="math"&&(t.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+t.funcName+" works only in text mode"),n="text"),{type:"accent",mode:n,label:t.funcName,isStretchy:!1,isShifty:!0,base:r}},"handler"),htmlBuilder:zC,mathmlBuilder:jG});St({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"accentUnder",mode:r.mode,label:n,base:i}},"handler"),htmlBuilder:o((t,e)=>{var r=Pr(t.base,e),n=mu.svgSpan(t,e),i=t.label==="\\utilde"?.12:0,a=Fe.makeVList({positionType:"top",positionData:r.height,children:[{type:"elem",elem:n,wrapperClasses:["svg-align"]},{type:"kern",size:i},{type:"elem",elem:r}]},e);return Fe.makeSpan(["mord","accentunder"],[a],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=mu.mathMLnode(t.label),n=new at.MathNode("munder",[yn(t.base,e),r]);return n.setAttribute("accentunder","true"),n},"mathmlBuilder")});g4=o(t=>{var e=new at.MathNode("mpadded",t?[t]:[]);return e.setAttribute("width","+0.6em"),e.setAttribute("lspace","0.3em"),e},"paddedNode");St({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler(t,e,r){var{parser:n,funcName:i}=t;return{type:"xArrow",mode:n.mode,label:i,body:e[0],below:r[0]}},htmlBuilder(t,e){var r=e.style,n=e.havingStyle(r.sup()),i=Fe.wrapFragment(Pr(t.body,n,e),e),a=t.label.slice(0,2)==="\\x"?"x":"cd";i.classes.push(a+"-arrow-pad");var s;t.below&&(n=e.havingStyle(r.sub()),s=Fe.wrapFragment(Pr(t.below,n,e),e),s.classes.push(a+"-arrow-pad"));var l=mu.svgSpan(t,e),u=-e.fontMetrics().axisHeight+.5*l.height,h=-e.fontMetrics().axisHeight-.5*l.height-.111;(i.depth>.25||t.label==="\\xleftequilibrium")&&(h-=i.depth);var f;if(s){var d=-e.fontMetrics().axisHeight+s.height+.5*l.height+.111;f=Fe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:h},{type:"elem",elem:l,shift:u},{type:"elem",elem:s,shift:d}]},e)}else f=Fe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:h},{type:"elem",elem:l,shift:u}]},e);return f.children[0].children[0].children[1].classes.push("svg-align"),Fe.makeSpan(["mrel","x-arrow"],[f],e)},mathmlBuilder(t,e){var r=mu.mathMLnode(t.label);r.setAttribute("minsize",t.label.charAt(0)==="x"?"1.75em":"3.0em");var n;if(t.body){var i=g4(yn(t.body,e));if(t.below){var a=g4(yn(t.below,e));n=new at.MathNode("munderover",[r,a,i])}else n=new at.MathNode("mover",[r,i])}else if(t.below){var s=g4(yn(t.below,e));n=new at.MathNode("munder",[r,s])}else n=g4(),n=new at.MathNode("mover",[r,n]);return n}});u4e=Fe.makeSpan;o(KG,"htmlBuilder$9");o(QG,"mathmlBuilder$8");St({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"mclass",mode:r.mode,mclass:"m"+n.slice(5),body:gi(i),isCharacterBox:Jt.isCharacterBox(i)}},htmlBuilder:KG,mathmlBuilder:QG});R4=o(t=>{var e=t.type==="ordgroup"&&t.body.length?t.body[0]:t;return e.type==="atom"&&(e.family==="bin"||e.family==="rel")?"m"+e.family:"mord"},"binrelClass");St({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(t,e){var{parser:r}=t;return{type:"mclass",mode:r.mode,mclass:R4(e[0]),body:gi(e[1]),isCharacterBox:Jt.isCharacterBox(e[1])}}});St({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(t,e){var{parser:r,funcName:n}=t,i=e[1],a=e[0],s;n!=="\\stackrel"?s=R4(i):s="mrel";var l={type:"op",mode:i.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:n!=="\\stackrel",body:gi(i)},u={type:"supsub",mode:a.mode,base:l,sup:n==="\\underset"?null:a,sub:n==="\\underset"?a:null};return{type:"mclass",mode:r.mode,mclass:s,body:[u],isCharacterBox:Jt.isCharacterBox(u)}},htmlBuilder:KG,mathmlBuilder:QG});St({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"pmb",mode:r.mode,mclass:R4(e[0]),body:gi(e[0])}},htmlBuilder(t,e){var r=Fi(t.body,e,!0),n=Fe.makeSpan([t.mclass],r,e);return n.style.textShadow="0.02em 0.01em 0.04px",n},mathmlBuilder(t,e){var r=Ss(t.body,e),n=new at.MathNode("mstyle",r);return n.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),n}});h4e={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},fG=o(()=>({type:"styling",body:[],mode:"math",style:"display"}),"newCell"),dG=o(t=>t.type==="textord"&&t.text==="@","isStartOfArrow"),f4e=o((t,e)=>(t.type==="mathord"||t.type==="atom")&&t.text===e,"isLabelEnd");o(d4e,"cdArrow");o(p4e,"parseCD");St({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t;return{type:"cdlabel",mode:r.mode,side:n.slice(4),label:e[0]}},htmlBuilder(t,e){var r=e.havingStyle(e.style.sup()),n=Fe.wrapFragment(Pr(t.label,r,e),e);return n.classes.push("cd-label-"+t.side),n.style.bottom=gt(.8-n.depth),n.height=0,n.depth=0,n},mathmlBuilder(t,e){var r=new at.MathNode("mrow",[yn(t.label,e)]);return r=new at.MathNode("mpadded",[r]),r.setAttribute("width","0"),t.side==="left"&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),r=new at.MathNode("mstyle",[r]),r.setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}});St({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(t,e){var{parser:r}=t;return{type:"cdlabelparent",mode:r.mode,fragment:e[0]}},htmlBuilder(t,e){var r=Fe.wrapFragment(Pr(t.fragment,e),e);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder(t,e){return new at.MathNode("mrow",[yn(t.fragment,e)])}});St({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(t,e){for(var{parser:r}=t,n=gr(e[0],"ordgroup"),i=n.body,a="",s=0;s=1114111)throw new lt("\\@char with invalid code point "+a);return u<=65535?h=String.fromCharCode(u):(u-=65536,h=String.fromCharCode((u>>10)+55296,(u&1023)+56320)),{type:"textord",mode:r.mode,text:h}}});ZG=o((t,e)=>{var r=Fi(t.body,e.withColor(t.color),!1);return Fe.makeFragment(r)},"htmlBuilder$8"),JG=o((t,e)=>{var r=Ss(t.body,e.withColor(t.color)),n=new at.MathNode("mstyle",r);return n.setAttribute("mathcolor",t.color),n},"mathmlBuilder$7");St({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(t,e){var{parser:r}=t,n=gr(e[0],"color-token").color,i=e[1];return{type:"color",mode:r.mode,color:n,body:gi(i)}},htmlBuilder:ZG,mathmlBuilder:JG});St({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(t,e){var{parser:r,breakOnTokenText:n}=t,i=gr(e[0],"color-token").color;r.gullet.macros.set("\\current@color",i);var a=r.parseExpression(!0,n);return{type:"color",mode:r.mode,color:i,body:a}},htmlBuilder:ZG,mathmlBuilder:JG});St({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler(t,e,r){var{parser:n}=t,i=n.gullet.future().text==="["?n.parseSizeGroup(!0):null,a=!n.settings.displayMode||!n.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:n.mode,newLine:a,size:i&&gr(i,"size").value}},htmlBuilder(t,e){var r=Fe.makeSpan(["mspace"],[],e);return t.newLine&&(r.classes.push("newline"),t.size&&(r.style.marginTop=gt(Jn(t.size,e)))),r},mathmlBuilder(t,e){var r=new at.MathNode("mspace");return t.newLine&&(r.setAttribute("linebreak","newline"),t.size&&r.setAttribute("height",gt(Jn(t.size,e)))),r}});_C={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},e$=o(t=>{var e=t.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(e))throw new lt("Expected a control sequence",t);return e},"checkControlSequence"),m4e=o(t=>{var e=t.gullet.popToken();return e.text==="="&&(e=t.gullet.popToken(),e.text===" "&&(e=t.gullet.popToken())),e},"getRHS"),t$=o((t,e,r,n)=>{var i=t.gullet.macros.get(r.text);i==null&&(r.noexpand=!0,i={tokens:[r],numArgs:0,unexpandable:!t.gullet.isExpandable(r.text)}),t.gullet.macros.set(e,i,n)},"letCommand");St({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(t){var{parser:e,funcName:r}=t;e.consumeSpaces();var n=e.fetch();if(_C[n.text])return(r==="\\global"||r==="\\\\globallong")&&(n.text=_C[n.text]),gr(e.parseFunction(),"internal");throw new lt("Invalid token after macro prefix",n)}});St({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=e.gullet.popToken(),i=n.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(i))throw new lt("Expected a control sequence",n);for(var a=0,s,l=[[]];e.gullet.future().text!=="{";)if(n=e.gullet.popToken(),n.text==="#"){if(e.gullet.future().text==="{"){s=e.gullet.future(),l[a].push("{");break}if(n=e.gullet.popToken(),!/^[1-9]$/.test(n.text))throw new lt('Invalid argument number "'+n.text+'"');if(parseInt(n.text)!==a+1)throw new lt('Argument number "'+n.text+'" out of order');a++,l.push([])}else{if(n.text==="EOF")throw new lt("Expected a macro definition");l[a].push(n.text)}var{tokens:u}=e.gullet.consumeArg();return s&&u.unshift(s),(r==="\\edef"||r==="\\xdef")&&(u=e.gullet.expandTokens(u),u.reverse()),e.gullet.macros.set(i,{tokens:u,numArgs:a,delimiters:l},r===_C[r]),{type:"internal",mode:e.mode}}});St({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=e$(e.gullet.popToken());e.gullet.consumeSpaces();var i=m4e(e);return t$(e,n,i,r==="\\\\globallet"),{type:"internal",mode:e.mode}}});St({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=e$(e.gullet.popToken()),i=e.gullet.popToken(),a=e.gullet.popToken();return t$(e,n,a,r==="\\\\globalfuture"),e.gullet.pushToken(a),e.gullet.pushToken(i),{type:"internal",mode:e.mode}}});hy=o(function(e,r,n){var i=Cn.math[e]&&Cn.math[e].replace,a=IC(i||e,r,n);if(!a)throw new Error("Unsupported symbol "+e+" and font size "+r+".");return a},"getMetrics"),GC=o(function(e,r,n,i){var a=n.havingBaseStyle(r),s=Fe.makeSpan(i.concat(a.sizingClasses(n)),[e],n),l=a.sizeMultiplier/n.sizeMultiplier;return s.height*=l,s.depth*=l,s.maxFontSize=a.sizeMultiplier,s},"styleWrap"),r$=o(function(e,r,n){var i=r.havingBaseStyle(n),a=(1-r.sizeMultiplier/i.sizeMultiplier)*r.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=gt(a),e.height-=a,e.depth+=a},"centerSpan"),g4e=o(function(e,r,n,i,a,s){var l=Fe.makeSymbol(e,"Main-Regular",a,i),u=GC(l,r,i,s);return n&&r$(u,i,r),u},"makeSmallDelim"),y4e=o(function(e,r,n,i){return Fe.makeSymbol(e,"Size"+r+"-Regular",n,i)},"mathrmSize"),n$=o(function(e,r,n,i,a,s){var l=y4e(e,r,a,i),u=GC(Fe.makeSpan(["delimsizing","size"+r],[l],i),rr.TEXT,i,s);return n&&r$(u,i,rr.TEXT),u},"makeLargeDelim"),fC=o(function(e,r,n){var i;r==="Size1-Regular"?i="delim-size1":i="delim-size4";var a=Fe.makeSpan(["delimsizinginner",i],[Fe.makeSpan([],[Fe.makeSymbol(e,r,n)])]);return{type:"elem",elem:a}},"makeGlyphSpan"),dC=o(function(e,r,n){var i=lc["Size4-Regular"][e.charCodeAt(0)]?lc["Size4-Regular"][e.charCodeAt(0)][4]:lc["Size1-Regular"][e.charCodeAt(0)][4],a=new cc("inner",Sbe(e,Math.round(1e3*r))),s=new vl([a],{width:gt(i),height:gt(r),style:"width:"+gt(i),viewBox:"0 0 "+1e3*i+" "+Math.round(1e3*r),preserveAspectRatio:"xMinYMin"}),l=Fe.makeSvgSpan([],[s],n);return l.height=r,l.style.height=gt(r),l.style.width=gt(i),{type:"elem",elem:l}},"makeInner"),LC=.008,y4={type:"kern",size:-1*LC},v4e=["|","\\lvert","\\rvert","\\vert"],x4e=["\\|","\\lVert","\\rVert","\\Vert"],i$=o(function(e,r,n,i,a,s){var l,u,h,f,d="",p=0;l=h=f=e,u=null;var m="Size1-Regular";e==="\\uparrow"?h=f="\u23D0":e==="\\Uparrow"?h=f="\u2016":e==="\\downarrow"?l=h="\u23D0":e==="\\Downarrow"?l=h="\u2016":e==="\\updownarrow"?(l="\\uparrow",h="\u23D0",f="\\downarrow"):e==="\\Updownarrow"?(l="\\Uparrow",h="\u2016",f="\\Downarrow"):Jt.contains(v4e,e)?(h="\u2223",d="vert",p=333):Jt.contains(x4e,e)?(h="\u2225",d="doublevert",p=556):e==="["||e==="\\lbrack"?(l="\u23A1",h="\u23A2",f="\u23A3",m="Size4-Regular",d="lbrack",p=667):e==="]"||e==="\\rbrack"?(l="\u23A4",h="\u23A5",f="\u23A6",m="Size4-Regular",d="rbrack",p=667):e==="\\lfloor"||e==="\u230A"?(h=l="\u23A2",f="\u23A3",m="Size4-Regular",d="lfloor",p=667):e==="\\lceil"||e==="\u2308"?(l="\u23A1",h=f="\u23A2",m="Size4-Regular",d="lceil",p=667):e==="\\rfloor"||e==="\u230B"?(h=l="\u23A5",f="\u23A6",m="Size4-Regular",d="rfloor",p=667):e==="\\rceil"||e==="\u2309"?(l="\u23A4",h=f="\u23A5",m="Size4-Regular",d="rceil",p=667):e==="("||e==="\\lparen"?(l="\u239B",h="\u239C",f="\u239D",m="Size4-Regular",d="lparen",p=875):e===")"||e==="\\rparen"?(l="\u239E",h="\u239F",f="\u23A0",m="Size4-Regular",d="rparen",p=875):e==="\\{"||e==="\\lbrace"?(l="\u23A7",u="\u23A8",f="\u23A9",h="\u23AA",m="Size4-Regular"):e==="\\}"||e==="\\rbrace"?(l="\u23AB",u="\u23AC",f="\u23AD",h="\u23AA",m="Size4-Regular"):e==="\\lgroup"||e==="\u27EE"?(l="\u23A7",f="\u23A9",h="\u23AA",m="Size4-Regular"):e==="\\rgroup"||e==="\u27EF"?(l="\u23AB",f="\u23AD",h="\u23AA",m="Size4-Regular"):e==="\\lmoustache"||e==="\u23B0"?(l="\u23A7",f="\u23AD",h="\u23AA",m="Size4-Regular"):(e==="\\rmoustache"||e==="\u23B1")&&(l="\u23AB",f="\u23A9",h="\u23AA",m="Size4-Regular");var g=hy(l,m,a),y=g.height+g.depth,v=hy(h,m,a),x=v.height+v.depth,b=hy(f,m,a),w=b.height+b.depth,_=0,T=1;if(u!==null){var E=hy(u,m,a);_=E.height+E.depth,T=2}var L=y+w+_,S=Math.max(0,Math.ceil((r-L)/(T*x))),A=L+S*T*x,I=i.fontMetrics().axisHeight;n&&(I*=i.sizeMultiplier);var D=A/2-I,k=[];if(d.length>0){var R=A-y-w,C=Math.round(A*1e3),O=Cbe(d,Math.round(R*1e3)),N=new cc(d,O),P=(p/1e3).toFixed(3)+"em",F=(C/1e3).toFixed(3)+"em",B=new vl([N],{width:P,height:F,viewBox:"0 0 "+p+" "+C}),G=Fe.makeSvgSpan([],[B],i);G.height=C/1e3,G.style.width=P,G.style.height=F,k.push({type:"elem",elem:G})}else{if(k.push(fC(f,m,a)),k.push(y4),u===null){var z=A-y-w+2*LC;k.push(dC(h,z,i))}else{var W=(A-y-w-_)/2+2*LC;k.push(dC(h,W,i)),k.push(y4),k.push(fC(u,m,a)),k.push(y4),k.push(dC(h,W,i))}k.push(y4),k.push(fC(l,m,a))}var Z=i.havingBaseStyle(rr.TEXT),j=Fe.makeVList({positionType:"bottom",positionData:D,children:k},Z);return GC(Fe.makeSpan(["delimsizing","mult"],[j],Z),rr.TEXT,i,s)},"makeStackedDelim"),pC=80,mC=.08,gC=o(function(e,r,n,i,a){var s=Ebe(e,i,n),l=new cc(e,s),u=new vl([l],{width:"400em",height:gt(r),viewBox:"0 0 400000 "+n,preserveAspectRatio:"xMinYMin slice"});return Fe.makeSvgSpan(["hide-tail"],[u],a)},"sqrtSvg"),b4e=o(function(e,r){var n=r.havingBaseSizing(),i=l$("\\surd",e*n.sizeMultiplier,o$,n),a=n.sizeMultiplier,s=Math.max(0,r.minRuleThickness-r.fontMetrics().sqrtRuleThickness),l,u=0,h=0,f=0,d;return i.type==="small"?(f=1e3+1e3*s+pC,e<1?a=1:e<1.4&&(a=.7),u=(1+s+mC)/a,h=(1+s)/a,l=gC("sqrtMain",u,f,s,r),l.style.minWidth="0.853em",d=.833/a):i.type==="large"?(f=(1e3+pC)*fy[i.size],h=(fy[i.size]+s)/a,u=(fy[i.size]+s+mC)/a,l=gC("sqrtSize"+i.size,u,f,s,r),l.style.minWidth="1.02em",d=1/a):(u=e+s+mC,h=e+s,f=Math.floor(1e3*e+s)+pC,l=gC("sqrtTall",u,f,s,r),l.style.minWidth="0.742em",d=1.056),l.height=h,l.style.height=gt(u),{span:l,advanceWidth:d,ruleWidth:(r.fontMetrics().sqrtRuleThickness+s)*a}},"makeSqrtImage"),a$=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230A","\u230B","\\lceil","\\rceil","\u2308","\u2309","\\surd"],w4e=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27EE","\u27EF","\\lmoustache","\\rmoustache","\u23B0","\u23B1"],s$=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],fy=[0,1.2,1.8,2.4,3],T4e=o(function(e,r,n,i,a){if(e==="<"||e==="\\lt"||e==="\u27E8"?e="\\langle":(e===">"||e==="\\gt"||e==="\u27E9")&&(e="\\rangle"),Jt.contains(a$,e)||Jt.contains(s$,e))return n$(e,r,!1,n,i,a);if(Jt.contains(w4e,e))return i$(e,fy[r],!1,n,i,a);throw new lt("Illegal delimiter: '"+e+"'")},"makeSizedDelim"),k4e=[{type:"small",style:rr.SCRIPTSCRIPT},{type:"small",style:rr.SCRIPT},{type:"small",style:rr.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],E4e=[{type:"small",style:rr.SCRIPTSCRIPT},{type:"small",style:rr.SCRIPT},{type:"small",style:rr.TEXT},{type:"stack"}],o$=[{type:"small",style:rr.SCRIPTSCRIPT},{type:"small",style:rr.SCRIPT},{type:"small",style:rr.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],S4e=o(function(e){if(e.type==="small")return"Main-Regular";if(e.type==="large")return"Size"+e.size+"-Regular";if(e.type==="stack")return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},"delimTypeToFont"),l$=o(function(e,r,n,i){for(var a=Math.min(2,3-i.style.size),s=a;sr)return n[s]}return n[n.length-1]},"traverseSequence"),c$=o(function(e,r,n,i,a,s){e==="<"||e==="\\lt"||e==="\u27E8"?e="\\langle":(e===">"||e==="\\gt"||e==="\u27E9")&&(e="\\rangle");var l;Jt.contains(s$,e)?l=k4e:Jt.contains(a$,e)?l=o$:l=E4e;var u=l$(e,r,l,i);return u.type==="small"?g4e(e,u.style,n,i,a,s):u.type==="large"?n$(e,u.size,n,i,a,s):i$(e,r,n,i,a,s)},"makeCustomSizedDelim"),C4e=o(function(e,r,n,i,a,s){var l=i.fontMetrics().axisHeight*i.sizeMultiplier,u=901,h=5/i.fontMetrics().ptPerEm,f=Math.max(r-l,n+l),d=Math.max(f/500*u,2*f-h);return c$(e,d,!0,i,a,s)},"makeLeftRightDelim"),du={sqrtImage:b4e,sizedDelim:T4e,sizeToMaxHeight:fy,customSizedDelim:c$,leftRightDelim:C4e},pG={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},A4e=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230A","\u230B","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27E8","\\rangle","\u27E9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27EE","\u27EF","\\lmoustache","\\rmoustache","\u23B0","\u23B1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];o(M4,"checkDelimiter");St({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:o((t,e)=>{var r=M4(e[0],t);return{type:"delimsizing",mode:t.parser.mode,size:pG[t.funcName].size,mclass:pG[t.funcName].mclass,delim:r.text}},"handler"),htmlBuilder:o((t,e)=>t.delim==="."?Fe.makeSpan([t.mclass]):du.sizedDelim(t.delim,t.size,e,t.mode,[t.mclass]),"htmlBuilder"),mathmlBuilder:o(t=>{var e=[];t.delim!=="."&&e.push(Mo(t.delim,t.mode));var r=new at.MathNode("mo",e);t.mclass==="mopen"||t.mclass==="mclose"?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");var n=gt(du.sizeToMaxHeight[t.size]);return r.setAttribute("minsize",n),r.setAttribute("maxsize",n),r},"mathmlBuilder")});o(mG,"assertParsed");St({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=t.parser.gullet.macros.get("\\current@color");if(r&&typeof r!="string")throw new lt("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:t.parser.mode,delim:M4(e[0],t).text,color:r}},"handler")});St({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=M4(e[0],t),n=t.parser;++n.leftrightDepth;var i=n.parseExpression(!1);--n.leftrightDepth,n.expect("\\right",!1);var a=gr(n.parseFunction(),"leftright-right");return{type:"leftright",mode:n.mode,body:i,left:r.text,right:a.delim,rightColor:a.color}},"handler"),htmlBuilder:o((t,e)=>{mG(t);for(var r=Fi(t.body,e,!0,["mopen","mclose"]),n=0,i=0,a=!1,s=0;s{mG(t);var r=Ss(t.body,e);if(t.left!=="."){var n=new at.MathNode("mo",[Mo(t.left,t.mode)]);n.setAttribute("fence","true"),r.unshift(n)}if(t.right!=="."){var i=new at.MathNode("mo",[Mo(t.right,t.mode)]);i.setAttribute("fence","true"),t.rightColor&&i.setAttribute("mathcolor",t.rightColor),r.push(i)}return PC(r)},"mathmlBuilder")});St({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=M4(e[0],t);if(!t.parser.leftrightDepth)throw new lt("\\middle without preceding \\left",r);return{type:"middle",mode:t.parser.mode,delim:r.text}},"handler"),htmlBuilder:o((t,e)=>{var r;if(t.delim===".")r=yy(e,[]);else{r=du.sizedDelim(t.delim,1,e,t.mode,[]);var n={delim:t.delim,options:e};r.isMiddle=n}return r},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=t.delim==="\\vert"||t.delim==="|"?Mo("|","text"):Mo(t.delim,t.mode),n=new at.MathNode("mo",[r]);return n.setAttribute("fence","true"),n.setAttribute("lspace","0.05em"),n.setAttribute("rspace","0.05em"),n},"mathmlBuilder")});$C=o((t,e)=>{var r=Fe.wrapFragment(Pr(t.body,e),e),n=t.label.slice(1),i=e.sizeMultiplier,a,s=0,l=Jt.isCharacterBox(t.body);if(n==="sout")a=Fe.makeSpan(["stretchy","sout"]),a.height=e.fontMetrics().defaultRuleThickness/i,s=-.5*e.fontMetrics().xHeight;else if(n==="phase"){var u=Jn({number:.6,unit:"pt"},e),h=Jn({number:.35,unit:"ex"},e),f=e.havingBaseSizing();i=i/f.sizeMultiplier;var d=r.height+r.depth+u+h;r.style.paddingLeft=gt(d/2+u);var p=Math.floor(1e3*d*i),m=Tbe(p),g=new vl([new cc("phase",m)],{width:"400em",height:gt(p/1e3),viewBox:"0 0 400000 "+p,preserveAspectRatio:"xMinYMin slice"});a=Fe.makeSvgSpan(["hide-tail"],[g],e),a.style.height=gt(d),s=r.depth+u+h}else{/cancel/.test(n)?l||r.classes.push("cancel-pad"):n==="angl"?r.classes.push("anglpad"):r.classes.push("boxpad");var y=0,v=0,x=0;/box/.test(n)?(x=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness),y=e.fontMetrics().fboxsep+(n==="colorbox"?0:x),v=y):n==="angl"?(x=Math.max(e.fontMetrics().defaultRuleThickness,e.minRuleThickness),y=4*x,v=Math.max(0,.25-r.depth)):(y=l?.2:0,v=y),a=mu.encloseSpan(r,n,y,v,e),/fbox|boxed|fcolorbox/.test(n)?(a.style.borderStyle="solid",a.style.borderWidth=gt(x)):n==="angl"&&x!==.049&&(a.style.borderTopWidth=gt(x),a.style.borderRightWidth=gt(x)),s=r.depth+v,t.backgroundColor&&(a.style.backgroundColor=t.backgroundColor,t.borderColor&&(a.style.borderColor=t.borderColor))}var b;if(t.backgroundColor)b=Fe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:a,shift:s},{type:"elem",elem:r,shift:0}]},e);else{var w=/cancel|phase/.test(n)?["svg-align"]:[];b=Fe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:r,shift:0},{type:"elem",elem:a,shift:s,wrapperClasses:w}]},e)}return/cancel/.test(n)&&(b.height=r.height,b.depth=r.depth),/cancel/.test(n)&&!l?Fe.makeSpan(["mord","cancel-lap"],[b],e):Fe.makeSpan(["mord"],[b],e)},"htmlBuilder$7"),VC=o((t,e)=>{var r=0,n=new at.MathNode(t.label.indexOf("colorbox")>-1?"mpadded":"menclose",[yn(t.body,e)]);switch(t.label){case"\\cancel":n.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":n.setAttribute("notation","downdiagonalstrike");break;case"\\phase":n.setAttribute("notation","phasorangle");break;case"\\sout":n.setAttribute("notation","horizontalstrike");break;case"\\fbox":n.setAttribute("notation","box");break;case"\\angl":n.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=e.fontMetrics().fboxsep*e.fontMetrics().ptPerEm,n.setAttribute("width","+"+2*r+"pt"),n.setAttribute("height","+"+2*r+"pt"),n.setAttribute("lspace",r+"pt"),n.setAttribute("voffset",r+"pt"),t.label==="\\fcolorbox"){var i=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness);n.setAttribute("style","border: "+i+"em solid "+String(t.borderColor))}break;case"\\xcancel":n.setAttribute("notation","updiagonalstrike downdiagonalstrike");break}return t.backgroundColor&&n.setAttribute("mathbackground",t.backgroundColor),n},"mathmlBuilder$6");St({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler(t,e,r){var{parser:n,funcName:i}=t,a=gr(e[0],"color-token").color,s=e[1];return{type:"enclose",mode:n.mode,label:i,backgroundColor:a,body:s}},htmlBuilder:$C,mathmlBuilder:VC});St({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler(t,e,r){var{parser:n,funcName:i}=t,a=gr(e[0],"color-token").color,s=gr(e[1],"color-token").color,l=e[2];return{type:"enclose",mode:n.mode,label:i,backgroundColor:s,borderColor:a,body:l}},htmlBuilder:$C,mathmlBuilder:VC});St({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"enclose",mode:r.mode,label:"\\fbox",body:e[0]}}});St({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"enclose",mode:r.mode,label:n,body:i}},htmlBuilder:$C,mathmlBuilder:VC});St({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(t,e){var{parser:r}=t;return{type:"enclose",mode:r.mode,label:"\\angl",body:e[0]}}});u$={};o(uc,"defineEnvironment");h$={};o(le,"defineMacro");o(gG,"getHLines");I4=o(t=>{var e=t.parser.settings;if(!e.displayMode)throw new lt("{"+t.envName+"} can be used only in display mode.")},"validateAmsEnvironmentContext");o(UC,"getAutoTag");o(xh,"parseArray");o(HC,"dCellStyle");hc=o(function(e,r){var n,i,a=e.body.length,s=e.hLinesBeforeRow,l=0,u=new Array(a),h=[],f=Math.max(r.fontMetrics().arrayRuleWidth,r.minRuleThickness),d=1/r.fontMetrics().ptPerEm,p=5*d;if(e.colSeparationType&&e.colSeparationType==="small"){var m=r.havingStyle(rr.SCRIPT).sizeMultiplier;p=.2778*(m/r.sizeMultiplier)}var g=e.colSeparationType==="CD"?Jn({number:3,unit:"ex"},r):12*d,y=3*d,v=e.arraystretch*g,x=.7*v,b=.3*v,w=0;function _(ke){for(var Re=0;Re0&&(w+=.25),h.push({pos:w,isDashed:ke[Re]})}for(o(_,"setHLinePos"),_(s[0]),n=0;n0&&(D+=b,Lke))for(n=0;n=l)){var ee=void 0;(i>0||e.hskipBeforeAndAfter)&&(ee=Jt.deflt(W.pregap,p),ee!==0&&(O=Fe.makeSpan(["arraycolsep"],[]),O.style.width=gt(ee),C.push(O)));var J=[];for(n=0;n0){for(var ae=Fe.makeLineSpan("hline",r,f),ue=Fe.makeLineSpan("hdashline",r,f),ce=[{type:"elem",elem:u,shift:0}];h.length>0;){var te=h.pop(),Ne=te.pos-k;te.isDashed?ce.push({type:"elem",elem:ue,shift:Ne}):ce.push({type:"elem",elem:ae,shift:Ne})}u=Fe.makeVList({positionType:"individualShift",children:ce},r)}if(P.length===0)return Fe.makeSpan(["mord"],[u],r);var se=Fe.makeVList({positionType:"individualShift",children:P},r);return se=Fe.makeSpan(["tag"],[se],r),Fe.makeFragment([u,se])},"htmlBuilder"),_4e={c:"center ",l:"left ",r:"right "},fc=o(function(e,r){for(var n=[],i=new at.MathNode("mtd",[],["mtr-glue"]),a=new at.MathNode("mtd",[],["mml-eqn-num"]),s=0;s0){var g=e.cols,y="",v=!1,x=0,b=g.length;g[0].type==="separator"&&(p+="top ",x=1),g[g.length-1].type==="separator"&&(p+="bottom ",b-=1);for(var w=x;w0?"left ":"",p+=S[S.length-1].length>0?"right ":"";for(var A=1;A-1?"alignat":"align",a=e.envName==="split",s=xh(e.parser,{cols:n,addJot:!0,autoTag:a?void 0:UC(e.envName),emptySingleRow:!0,colSeparationType:i,maxNumCols:a?2:void 0,leqno:e.parser.settings.leqno},"display"),l,u=0,h={type:"ordgroup",mode:e.mode,body:[]};if(r[0]&&r[0].type==="ordgroup"){for(var f="",d=0;d0&&m&&(v=1),n[g]={type:"align",align:y,pregap:v,postgap:0}}return s.colSeparationType=m?"align":"alignat",s},"alignedHandler");uc({type:"array",names:["array","darray"],props:{numArgs:1},handler(t,e){var r=N4(e[0]),n=r?[e[0]]:gr(e[0],"ordgroup").body,i=n.map(function(s){var l=FC(s),u=l.text;if("lcr".indexOf(u)!==-1)return{type:"align",align:u};if(u==="|")return{type:"separator",separator:"|"};if(u===":")return{type:"separator",separator:":"};throw new lt("Unknown column alignment: "+u,s)}),a={cols:i,hskipBeforeAndAfter:!0,maxNumCols:i.length};return xh(t.parser,a,HC(t.envName))},htmlBuilder:hc,mathmlBuilder:fc});uc({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(t){var e={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[t.envName.replace("*","")],r="c",n={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if(t.envName.charAt(t.envName.length-1)==="*"){var i=t.parser;if(i.consumeSpaces(),i.fetch().text==="["){if(i.consume(),i.consumeSpaces(),r=i.fetch().text,"lcr".indexOf(r)===-1)throw new lt("Expected l or c or r",i.nextToken);i.consume(),i.consumeSpaces(),i.expect("]"),i.consume(),n.cols=[{type:"align",align:r}]}}var a=xh(t.parser,n,HC(t.envName)),s=Math.max(0,...a.body.map(l=>l.length));return a.cols=new Array(s).fill({type:"align",align:r}),e?{type:"leftright",mode:t.mode,body:[a],left:e[0],right:e[1],rightColor:void 0}:a},htmlBuilder:hc,mathmlBuilder:fc});uc({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(t){var e={arraystretch:.5},r=xh(t.parser,e,"script");return r.colSeparationType="small",r},htmlBuilder:hc,mathmlBuilder:fc});uc({type:"array",names:["subarray"],props:{numArgs:1},handler(t,e){var r=N4(e[0]),n=r?[e[0]]:gr(e[0],"ordgroup").body,i=n.map(function(s){var l=FC(s),u=l.text;if("lc".indexOf(u)!==-1)return{type:"align",align:u};throw new lt("Unknown column alignment: "+u,s)});if(i.length>1)throw new lt("{subarray} can contain only one column");var a={cols:i,hskipBeforeAndAfter:!1,arraystretch:.5};if(a=xh(t.parser,a,"script"),a.body.length>0&&a.body[0].length>1)throw new lt("{subarray} can contain only one column");return a},htmlBuilder:hc,mathmlBuilder:fc});uc({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(t){var e={arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},r=xh(t.parser,e,HC(t.envName));return{type:"leftright",mode:t.mode,body:[r],left:t.envName.indexOf("r")>-1?".":"\\{",right:t.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:hc,mathmlBuilder:fc});uc({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:f$,htmlBuilder:hc,mathmlBuilder:fc});uc({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(t){Jt.contains(["gather","gather*"],t.envName)&&I4(t);var e={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:UC(t.envName),emptySingleRow:!0,leqno:t.parser.settings.leqno};return xh(t.parser,e,"display")},htmlBuilder:hc,mathmlBuilder:fc});uc({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:f$,htmlBuilder:hc,mathmlBuilder:fc});uc({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(t){I4(t);var e={autoTag:UC(t.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:t.parser.settings.leqno};return xh(t.parser,e,"display")},htmlBuilder:hc,mathmlBuilder:fc});uc({type:"array",names:["CD"],props:{numArgs:0},handler(t){return I4(t),p4e(t.parser)},htmlBuilder:hc,mathmlBuilder:fc});le("\\nonumber","\\gdef\\@eqnsw{0}");le("\\notag","\\nonumber");St({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler(t,e){throw new lt(t.funcName+" valid only within array environment")}});yG=u$;St({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];if(i.type!=="ordgroup")throw new lt("Invalid environment name",i);for(var a="",s=0;s{var r=t.font,n=e.withFont(r);return Pr(t.body,n)},"htmlBuilder$5"),p$=o((t,e)=>{var r=t.font,n=e.withFont(r);return yn(t.body,n)},"mathmlBuilder$4"),vG={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak","\\bm":"\\boldsymbol"};St({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=C4(e[0]),a=n;return a in vG&&(a=vG[a]),{type:"font",mode:r.mode,font:a.slice(1),body:i}},"handler"),htmlBuilder:d$,mathmlBuilder:p$});St({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r}=t,n=e[0],i=Jt.isCharacterBox(n);return{type:"mclass",mode:r.mode,mclass:R4(n),body:[{type:"font",mode:r.mode,font:"boldsymbol",body:n}],isCharacterBox:i}},"handler")});St({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:o((t,e)=>{var{parser:r,funcName:n,breakOnTokenText:i}=t,{mode:a}=r,s=r.parseExpression(!0,i),l="math"+n.slice(1);return{type:"font",mode:a,font:l,body:{type:"ordgroup",mode:r.mode,body:s}}},"handler"),htmlBuilder:d$,mathmlBuilder:p$});m$=o((t,e)=>{var r=e;return t==="display"?r=r.id>=rr.SCRIPT.id?r.text():rr.DISPLAY:t==="text"&&r.size===rr.DISPLAY.size?r=rr.TEXT:t==="script"?r=rr.SCRIPT:t==="scriptscript"&&(r=rr.SCRIPTSCRIPT),r},"adjustStyle"),WC=o((t,e)=>{var r=m$(t.size,e.style),n=r.fracNum(),i=r.fracDen(),a;a=e.havingStyle(n);var s=Pr(t.numer,a,e);if(t.continued){var l=8.5/e.fontMetrics().ptPerEm,u=3.5/e.fontMetrics().ptPerEm;s.height=s.height0?g=3*p:g=7*p,y=e.fontMetrics().denom1):(d>0?(m=e.fontMetrics().num2,g=p):(m=e.fontMetrics().num3,g=3*p),y=e.fontMetrics().denom2);var v;if(f){var b=e.fontMetrics().axisHeight;m-s.depth-(b+.5*d){var r=new at.MathNode("mfrac",[yn(t.numer,e),yn(t.denom,e)]);if(!t.hasBarLine)r.setAttribute("linethickness","0px");else if(t.barSize){var n=Jn(t.barSize,e);r.setAttribute("linethickness",gt(n))}var i=m$(t.size,e.style);if(i.size!==e.style.size){r=new at.MathNode("mstyle",[r]);var a=i.size===rr.DISPLAY.size?"true":"false";r.setAttribute("displaystyle",a),r.setAttribute("scriptlevel","0")}if(t.leftDelim!=null||t.rightDelim!=null){var s=[];if(t.leftDelim!=null){var l=new at.MathNode("mo",[new at.TextNode(t.leftDelim.replace("\\",""))]);l.setAttribute("fence","true"),s.push(l)}if(s.push(r),t.rightDelim!=null){var u=new at.MathNode("mo",[new at.TextNode(t.rightDelim.replace("\\",""))]);u.setAttribute("fence","true"),s.push(u)}return PC(s)}return r},"mathmlBuilder$3");St({type:"genfrac",names:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=e[1],s,l=null,u=null,h="auto";switch(n){case"\\dfrac":case"\\frac":case"\\tfrac":s=!0;break;case"\\\\atopfrac":s=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":s=!1,l="(",u=")";break;case"\\\\bracefrac":s=!1,l="\\{",u="\\}";break;case"\\\\brackfrac":s=!1,l="[",u="]";break;default:throw new Error("Unrecognized genfrac command")}switch(n){case"\\dfrac":case"\\dbinom":h="display";break;case"\\tfrac":case"\\tbinom":h="text";break}return{type:"genfrac",mode:r.mode,continued:!1,numer:i,denom:a,hasBarLine:s,leftDelim:l,rightDelim:u,size:h,barSize:null}},"handler"),htmlBuilder:WC,mathmlBuilder:YC});St({type:"genfrac",names:["\\cfrac"],props:{numArgs:2},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=e[1];return{type:"genfrac",mode:r.mode,continued:!0,numer:i,denom:a,hasBarLine:!0,leftDelim:null,rightDelim:null,size:"display",barSize:null}},"handler")});St({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(t){var{parser:e,funcName:r,token:n}=t,i;switch(r){case"\\over":i="\\frac";break;case"\\choose":i="\\binom";break;case"\\atop":i="\\\\atopfrac";break;case"\\brace":i="\\\\bracefrac";break;case"\\brack":i="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:e.mode,replaceWith:i,token:n}}});xG=["display","text","script","scriptscript"],bG=o(function(e){var r=null;return e.length>0&&(r=e,r=r==="."?null:r),r},"delimFromValue");St({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(t,e){var{parser:r}=t,n=e[4],i=e[5],a=C4(e[0]),s=a.type==="atom"&&a.family==="open"?bG(a.text):null,l=C4(e[1]),u=l.type==="atom"&&l.family==="close"?bG(l.text):null,h=gr(e[2],"size"),f,d=null;h.isBlank?f=!0:(d=h.value,f=d.number>0);var p="auto",m=e[3];if(m.type==="ordgroup"){if(m.body.length>0){var g=gr(m.body[0],"textord");p=xG[Number(g.text)]}}else m=gr(m,"textord"),p=xG[Number(m.text)];return{type:"genfrac",mode:r.mode,numer:n,denom:i,continued:!1,hasBarLine:f,barSize:d,leftDelim:s,rightDelim:u,size:p}},htmlBuilder:WC,mathmlBuilder:YC});St({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(t,e){var{parser:r,funcName:n,token:i}=t;return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:gr(e[0],"size").value,token:i}}});St({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=obe(gr(e[1],"infix").size),s=e[2],l=a.number>0;return{type:"genfrac",mode:r.mode,numer:i,denom:s,continued:!1,hasBarLine:l,barSize:a,leftDelim:null,rightDelim:null,size:"auto"}},"handler"),htmlBuilder:WC,mathmlBuilder:YC});g$=o((t,e)=>{var r=e.style,n,i;t.type==="supsub"?(n=t.sup?Pr(t.sup,e.havingStyle(r.sup()),e):Pr(t.sub,e.havingStyle(r.sub()),e),i=gr(t.base,"horizBrace")):i=gr(t,"horizBrace");var a=Pr(i.base,e.havingBaseStyle(rr.DISPLAY)),s=mu.svgSpan(i,e),l;if(i.isOver?(l=Fe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"kern",size:.1},{type:"elem",elem:s}]},e),l.children[0].children[0].children[1].classes.push("svg-align")):(l=Fe.makeVList({positionType:"bottom",positionData:a.depth+.1+s.height,children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:a}]},e),l.children[0].children[0].children[0].classes.push("svg-align")),n){var u=Fe.makeSpan(["mord",i.isOver?"mover":"munder"],[l],e);i.isOver?l=Fe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:u},{type:"kern",size:.2},{type:"elem",elem:n}]},e):l=Fe.makeVList({positionType:"bottom",positionData:u.depth+.2+n.height+n.depth,children:[{type:"elem",elem:n},{type:"kern",size:.2},{type:"elem",elem:u}]},e)}return Fe.makeSpan(["mord",i.isOver?"mover":"munder"],[l],e)},"htmlBuilder$3"),L4e=o((t,e)=>{var r=mu.mathMLnode(t.label);return new at.MathNode(t.isOver?"mover":"munder",[yn(t.base,e),r])},"mathmlBuilder$2");St({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t;return{type:"horizBrace",mode:r.mode,label:n,isOver:/^\\over/.test(n),base:e[0]}},htmlBuilder:g$,mathmlBuilder:L4e});St({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[1],i=gr(e[0],"url").url;return r.settings.isTrusted({command:"\\href",url:i})?{type:"href",mode:r.mode,href:i,body:gi(n)}:r.formatUnsupportedCmd("\\href")},"handler"),htmlBuilder:o((t,e)=>{var r=Fi(t.body,e,!1);return Fe.makeAnchor(t.href,[],r,e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=vh(t.body,e);return r instanceof ks||(r=new ks("mrow",[r])),r.setAttribute("href",t.href),r},"mathmlBuilder")});St({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=gr(e[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:n}))return r.formatUnsupportedCmd("\\url");for(var i=[],a=0;a{var{parser:r,funcName:n,token:i}=t,a=gr(e[0],"raw").string,s=e[1];r.settings.strict&&r.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");var l,u={};switch(n){case"\\htmlClass":u.class=a,l={command:"\\htmlClass",class:a};break;case"\\htmlId":u.id=a,l={command:"\\htmlId",id:a};break;case"\\htmlStyle":u.style=a,l={command:"\\htmlStyle",style:a};break;case"\\htmlData":{for(var h=a.split(","),f=0;f{var r=Fi(t.body,e,!1),n=["enclosing"];t.attributes.class&&n.push(...t.attributes.class.trim().split(/\s+/));var i=Fe.makeSpan(n,r,e);for(var a in t.attributes)a!=="class"&&t.attributes.hasOwnProperty(a)&&i.setAttribute(a,t.attributes[a]);return i},"htmlBuilder"),mathmlBuilder:o((t,e)=>vh(t.body,e),"mathmlBuilder")});St({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t;return{type:"htmlmathml",mode:r.mode,html:gi(e[0]),mathml:gi(e[1])}},"handler"),htmlBuilder:o((t,e)=>{var r=Fi(t.html,e,!1);return Fe.makeFragment(r)},"htmlBuilder"),mathmlBuilder:o((t,e)=>vh(t.mathml,e),"mathmlBuilder")});yC=o(function(e){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(e))return{number:+e,unit:"bp"};var r=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(e);if(!r)throw new lt("Invalid size: '"+e+"' in \\includegraphics");var n={number:+(r[1]+r[2]),unit:r[3]};if(!OG(n))throw new lt("Invalid unit: '"+n.unit+"' in \\includegraphics.");return n},"sizeData");St({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:o((t,e,r)=>{var{parser:n}=t,i={number:0,unit:"em"},a={number:.9,unit:"em"},s={number:0,unit:"em"},l="";if(r[0])for(var u=gr(r[0],"raw").string,h=u.split(","),f=0;f{var r=Jn(t.height,e),n=0;t.totalheight.number>0&&(n=Jn(t.totalheight,e)-r);var i=0;t.width.number>0&&(i=Jn(t.width,e));var a={height:gt(r+n)};i>0&&(a.width=gt(i)),n>0&&(a.verticalAlign=gt(-n));var s=new kC(t.src,t.alt,a);return s.height=r,s.depth=n,s},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=new at.MathNode("mglyph",[]);r.setAttribute("alt",t.alt);var n=Jn(t.height,e),i=0;if(t.totalheight.number>0&&(i=Jn(t.totalheight,e)-n,r.setAttribute("valign",gt(-i))),r.setAttribute("height",gt(n+i)),t.width.number>0){var a=Jn(t.width,e);r.setAttribute("width",gt(a))}return r.setAttribute("src",t.src),r},"mathmlBuilder")});St({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(t,e){var{parser:r,funcName:n}=t,i=gr(e[0],"size");if(r.settings.strict){var a=n[1]==="m",s=i.value.unit==="mu";a?(s||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" supports only mu units, "+("not "+i.value.unit+" units")),r.mode!=="math"&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" works only in math mode")):s&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:i.value}},htmlBuilder(t,e){return Fe.makeGlue(t.dimension,e)},mathmlBuilder(t,e){var r=Jn(t.dimension,e);return new at.SpaceNode(r)}});St({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"lap",mode:r.mode,alignment:n.slice(5),body:i}},"handler"),htmlBuilder:o((t,e)=>{var r;t.alignment==="clap"?(r=Fe.makeSpan([],[Pr(t.body,e)]),r=Fe.makeSpan(["inner"],[r],e)):r=Fe.makeSpan(["inner"],[Pr(t.body,e)]);var n=Fe.makeSpan(["fix"],[]),i=Fe.makeSpan([t.alignment],[r,n],e),a=Fe.makeSpan(["strut"]);return a.style.height=gt(i.height+i.depth),i.depth&&(a.style.verticalAlign=gt(-i.depth)),i.children.unshift(a),i=Fe.makeSpan(["thinbox"],[i],e),Fe.makeSpan(["mord","vbox"],[i],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=new at.MathNode("mpadded",[yn(t.body,e)]);if(t.alignment!=="rlap"){var n=t.alignment==="llap"?"-1":"-0.5";r.setAttribute("lspace",n+"width")}return r.setAttribute("width","0px"),r},"mathmlBuilder")});St({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(t,e){var{funcName:r,parser:n}=t,i=n.mode;n.switchMode("math");var a=r==="\\("?"\\)":"$",s=n.parseExpression(!1,a);return n.expect(a),n.switchMode(i),{type:"styling",mode:n.mode,style:"text",body:s}}});St({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(t,e){throw new lt("Mismatched "+t.funcName)}});wG=o((t,e)=>{switch(e.style.size){case rr.DISPLAY.size:return t.display;case rr.TEXT.size:return t.text;case rr.SCRIPT.size:return t.script;case rr.SCRIPTSCRIPT.size:return t.scriptscript;default:return t.text}},"chooseMathStyle");St({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:o((t,e)=>{var{parser:r}=t;return{type:"mathchoice",mode:r.mode,display:gi(e[0]),text:gi(e[1]),script:gi(e[2]),scriptscript:gi(e[3])}},"handler"),htmlBuilder:o((t,e)=>{var r=wG(t,e),n=Fi(r,e,!1);return Fe.makeFragment(n)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=wG(t,e);return vh(r,e)},"mathmlBuilder")});y$=o((t,e,r,n,i,a,s)=>{t=Fe.makeSpan([],[t]);var l=r&&Jt.isCharacterBox(r),u,h;if(e){var f=Pr(e,n.havingStyle(i.sup()),n);h={elem:f,kern:Math.max(n.fontMetrics().bigOpSpacing1,n.fontMetrics().bigOpSpacing3-f.depth)}}if(r){var d=Pr(r,n.havingStyle(i.sub()),n);u={elem:d,kern:Math.max(n.fontMetrics().bigOpSpacing2,n.fontMetrics().bigOpSpacing4-d.height)}}var p;if(h&&u){var m=n.fontMetrics().bigOpSpacing5+u.elem.height+u.elem.depth+u.kern+t.depth+s;p=Fe.makeVList({positionType:"bottom",positionData:m,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:u.elem,marginLeft:gt(-a)},{type:"kern",size:u.kern},{type:"elem",elem:t},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:gt(a)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else if(u){var g=t.height-s;p=Fe.makeVList({positionType:"top",positionData:g,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:u.elem,marginLeft:gt(-a)},{type:"kern",size:u.kern},{type:"elem",elem:t}]},n)}else if(h){var y=t.depth+s;p=Fe.makeVList({positionType:"bottom",positionData:y,children:[{type:"elem",elem:t},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:gt(a)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else return t;var v=[p];if(u&&a!==0&&!l){var x=Fe.makeSpan(["mspace"],[],n);x.style.marginRight=gt(a),v.unshift(x)}return Fe.makeSpan(["mop","op-limits"],v,n)},"assembleSupSub"),v$=["\\smallint"],Cp=o((t,e)=>{var r,n,i=!1,a;t.type==="supsub"?(r=t.sup,n=t.sub,a=gr(t.base,"op"),i=!0):a=gr(t,"op");var s=e.style,l=!1;s.size===rr.DISPLAY.size&&a.symbol&&!Jt.contains(v$,a.name)&&(l=!0);var u;if(a.symbol){var h=l?"Size2-Regular":"Size1-Regular",f="";if((a.name==="\\oiint"||a.name==="\\oiiint")&&(f=a.name.slice(1),a.name=f==="oiint"?"\\iint":"\\iiint"),u=Fe.makeSymbol(a.name,h,"math",e,["mop","op-symbol",l?"large-op":"small-op"]),f.length>0){var d=u.italic,p=Fe.staticSvg(f+"Size"+(l?"2":"1"),e);u=Fe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:u,shift:0},{type:"elem",elem:p,shift:l?.08:0}]},e),a.name="\\"+f,u.classes.unshift("mop"),u.italic=d}}else if(a.body){var m=Fi(a.body,e,!0);m.length===1&&m[0]instanceof Es?(u=m[0],u.classes[0]="mop"):u=Fe.makeSpan(["mop"],m,e)}else{for(var g=[],y=1;y{var r;if(t.symbol)r=new ks("mo",[Mo(t.name,t.mode)]),Jt.contains(v$,t.name)&&r.setAttribute("largeop","false");else if(t.body)r=new ks("mo",Ss(t.body,e));else{r=new ks("mi",[new td(t.name.slice(1))]);var n=new ks("mo",[Mo("\u2061","text")]);t.parentIsSupSub?r=new ks("mrow",[r,n]):r=YG([r,n])}return r},"mathmlBuilder$1"),D4e={"\u220F":"\\prod","\u2210":"\\coprod","\u2211":"\\sum","\u22C0":"\\bigwedge","\u22C1":"\\bigvee","\u22C2":"\\bigcap","\u22C3":"\\bigcup","\u2A00":"\\bigodot","\u2A01":"\\bigoplus","\u2A02":"\\bigotimes","\u2A04":"\\biguplus","\u2A06":"\\bigsqcup"};St({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","\u220F","\u2210","\u2211","\u22C0","\u22C1","\u22C2","\u22C3","\u2A00","\u2A01","\u2A02","\u2A04","\u2A06"],props:{numArgs:0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=n;return i.length===1&&(i=D4e[i]),{type:"op",mode:r.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:i}},"handler"),htmlBuilder:Cp,mathmlBuilder:vy});St({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"op",mode:r.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:gi(n)}},"handler"),htmlBuilder:Cp,mathmlBuilder:vy});N4e={"\u222B":"\\int","\u222C":"\\iint","\u222D":"\\iiint","\u222E":"\\oint","\u222F":"\\oiint","\u2230":"\\oiiint"};St({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t;return{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:Cp,mathmlBuilder:vy});St({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t;return{type:"op",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:Cp,mathmlBuilder:vy});St({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","\u222B","\u222C","\u222D","\u222E","\u222F","\u2230"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t,n=r;return n.length===1&&(n=N4e[n]),{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:n}},htmlBuilder:Cp,mathmlBuilder:vy});x$=o((t,e)=>{var r,n,i=!1,a;t.type==="supsub"?(r=t.sup,n=t.sub,a=gr(t.base,"operatorname"),i=!0):a=gr(t,"operatorname");var s;if(a.body.length>0){for(var l=a.body.map(d=>{var p=d.text;return typeof p=="string"?{type:"textord",mode:d.mode,text:p}:d}),u=Fi(l,e.withFont("mathrm"),!0),h=0;h{for(var r=Ss(t.body,e.withFont("mathrm")),n=!0,i=0;if.toText()).join("");r=[new at.TextNode(l)]}var u=new at.MathNode("mi",r);u.setAttribute("mathvariant","normal");var h=new at.MathNode("mo",[Mo("\u2061","text")]);return t.parentIsSupSub?new at.MathNode("mrow",[u,h]):at.newDocumentFragment([u,h])},"mathmlBuilder");St({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"operatorname",mode:r.mode,body:gi(i),alwaysHandleSupSub:n==="\\operatornamewithlimits",limits:!1,parentIsSupSub:!1}},"handler"),htmlBuilder:x$,mathmlBuilder:R4e});le("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@");id({type:"ordgroup",htmlBuilder(t,e){return t.semisimple?Fe.makeFragment(Fi(t.body,e,!1)):Fe.makeSpan(["mord"],Fi(t.body,e,!0),e)},mathmlBuilder(t,e){return vh(t.body,e,!0)}});St({type:"overline",names:["\\overline"],props:{numArgs:1},handler(t,e){var{parser:r}=t,n=e[0];return{type:"overline",mode:r.mode,body:n}},htmlBuilder(t,e){var r=Pr(t.body,e.havingCrampedStyle()),n=Fe.makeLineSpan("overline-line",e),i=e.fontMetrics().defaultRuleThickness,a=Fe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r},{type:"kern",size:3*i},{type:"elem",elem:n},{type:"kern",size:i}]},e);return Fe.makeSpan(["mord","overline"],[a],e)},mathmlBuilder(t,e){var r=new at.MathNode("mo",[new at.TextNode("\u203E")]);r.setAttribute("stretchy","true");var n=new at.MathNode("mover",[yn(t.body,e),r]);return n.setAttribute("accent","true"),n}});St({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"phantom",mode:r.mode,body:gi(n)}},"handler"),htmlBuilder:o((t,e)=>{var r=Fi(t.body,e.withPhantom(),!1);return Fe.makeFragment(r)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=Ss(t.body,e);return new at.MathNode("mphantom",r)},"mathmlBuilder")});St({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"hphantom",mode:r.mode,body:n}},"handler"),htmlBuilder:o((t,e)=>{var r=Fe.makeSpan([],[Pr(t.body,e.withPhantom())]);if(r.height=0,r.depth=0,r.children)for(var n=0;n{var r=Ss(gi(t.body),e),n=new at.MathNode("mphantom",r),i=new at.MathNode("mpadded",[n]);return i.setAttribute("height","0px"),i.setAttribute("depth","0px"),i},"mathmlBuilder")});St({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"vphantom",mode:r.mode,body:n}},"handler"),htmlBuilder:o((t,e)=>{var r=Fe.makeSpan(["inner"],[Pr(t.body,e.withPhantom())]),n=Fe.makeSpan(["fix"],[]);return Fe.makeSpan(["mord","rlap"],[r,n],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=Ss(gi(t.body),e),n=new at.MathNode("mphantom",r),i=new at.MathNode("mpadded",[n]);return i.setAttribute("width","0px"),i},"mathmlBuilder")});St({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler(t,e){var{parser:r}=t,n=gr(e[0],"size").value,i=e[1];return{type:"raisebox",mode:r.mode,dy:n,body:i}},htmlBuilder(t,e){var r=Pr(t.body,e),n=Jn(t.dy,e);return Fe.makeVList({positionType:"shift",positionData:-n,children:[{type:"elem",elem:r}]},e)},mathmlBuilder(t,e){var r=new at.MathNode("mpadded",[yn(t.body,e)]),n=t.dy.number+t.dy.unit;return r.setAttribute("voffset",n),r}});St({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0},handler(t){var{parser:e}=t;return{type:"internal",mode:e.mode}}});St({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,argTypes:["size","size","size"]},handler(t,e,r){var{parser:n}=t,i=r[0],a=gr(e[0],"size"),s=gr(e[1],"size");return{type:"rule",mode:n.mode,shift:i&&gr(i,"size").value,width:a.value,height:s.value}},htmlBuilder(t,e){var r=Fe.makeSpan(["mord","rule"],[],e),n=Jn(t.width,e),i=Jn(t.height,e),a=t.shift?Jn(t.shift,e):0;return r.style.borderRightWidth=gt(n),r.style.borderTopWidth=gt(i),r.style.bottom=gt(a),r.width=n,r.height=i+a,r.depth=-a,r.maxFontSize=i*1.125*e.sizeMultiplier,r},mathmlBuilder(t,e){var r=Jn(t.width,e),n=Jn(t.height,e),i=t.shift?Jn(t.shift,e):0,a=e.color&&e.getColor()||"black",s=new at.MathNode("mspace");s.setAttribute("mathbackground",a),s.setAttribute("width",gt(r)),s.setAttribute("height",gt(n));var l=new at.MathNode("mpadded",[s]);return i>=0?l.setAttribute("height",gt(i)):(l.setAttribute("height",gt(i)),l.setAttribute("depth",gt(-i))),l.setAttribute("voffset",gt(i)),l}});o(b$,"sizingGroup");TG=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"],M4e=o((t,e)=>{var r=e.havingSize(t.size);return b$(t.body,r,e)},"htmlBuilder");St({type:"sizing",names:TG,props:{numArgs:0,allowedInText:!0},handler:o((t,e)=>{var{breakOnTokenText:r,funcName:n,parser:i}=t,a=i.parseExpression(!1,r);return{type:"sizing",mode:i.mode,size:TG.indexOf(n)+1,body:a}},"handler"),htmlBuilder:M4e,mathmlBuilder:o((t,e)=>{var r=e.havingSize(t.size),n=Ss(t.body,r),i=new at.MathNode("mstyle",n);return i.setAttribute("mathsize",gt(r.sizeMultiplier)),i},"mathmlBuilder")});St({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:o((t,e,r)=>{var{parser:n}=t,i=!1,a=!1,s=r[0]&&gr(r[0],"ordgroup");if(s)for(var l="",u=0;u{var r=Fe.makeSpan([],[Pr(t.body,e)]);if(!t.smashHeight&&!t.smashDepth)return r;if(t.smashHeight&&(r.height=0,r.children))for(var n=0;n{var r=new at.MathNode("mpadded",[yn(t.body,e)]);return t.smashHeight&&r.setAttribute("height","0px"),t.smashDepth&&r.setAttribute("depth","0px"),r},"mathmlBuilder")});St({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler(t,e,r){var{parser:n}=t,i=r[0],a=e[0];return{type:"sqrt",mode:n.mode,body:a,index:i}},htmlBuilder(t,e){var r=Pr(t.body,e.havingCrampedStyle());r.height===0&&(r.height=e.fontMetrics().xHeight),r=Fe.wrapFragment(r,e);var n=e.fontMetrics(),i=n.defaultRuleThickness,a=i;e.style.idr.height+r.depth+s&&(s=(s+d-r.height-r.depth)/2);var p=u.height-r.height-s-h;r.style.paddingLeft=gt(f);var m=Fe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+p)},{type:"elem",elem:u},{type:"kern",size:h}]},e);if(t.index){var g=e.havingStyle(rr.SCRIPTSCRIPT),y=Pr(t.index,g,e),v=.6*(m.height-m.depth),x=Fe.makeVList({positionType:"shift",positionData:-v,children:[{type:"elem",elem:y}]},e),b=Fe.makeSpan(["root"],[x]);return Fe.makeSpan(["mord","sqrt"],[b,m],e)}else return Fe.makeSpan(["mord","sqrt"],[m],e)},mathmlBuilder(t,e){var{body:r,index:n}=t;return n?new at.MathNode("mroot",[yn(r,e),yn(n,e)]):new at.MathNode("msqrt",[yn(r,e)])}});kG={display:rr.DISPLAY,text:rr.TEXT,script:rr.SCRIPT,scriptscript:rr.SCRIPTSCRIPT};St({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t,e){var{breakOnTokenText:r,funcName:n,parser:i}=t,a=i.parseExpression(!0,r),s=n.slice(1,n.length-5);return{type:"styling",mode:i.mode,style:s,body:a}},htmlBuilder(t,e){var r=kG[t.style],n=e.havingStyle(r).withFont("");return b$(t.body,n,e)},mathmlBuilder(t,e){var r=kG[t.style],n=e.havingStyle(r),i=Ss(t.body,n),a=new at.MathNode("mstyle",i),s={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]},l=s[t.style];return a.setAttribute("scriptlevel",l[0]),a.setAttribute("displaystyle",l[1]),a}});I4e=o(function(e,r){var n=e.base;if(n)if(n.type==="op"){var i=n.limits&&(r.style.size===rr.DISPLAY.size||n.alwaysHandleSupSub);return i?Cp:null}else if(n.type==="operatorname"){var a=n.alwaysHandleSupSub&&(r.style.size===rr.DISPLAY.size||n.limits);return a?x$:null}else{if(n.type==="accent")return Jt.isCharacterBox(n.base)?zC:null;if(n.type==="horizBrace"){var s=!e.sub;return s===n.isOver?g$:null}else return null}else return null},"htmlBuilderDelegate");id({type:"supsub",htmlBuilder(t,e){var r=I4e(t,e);if(r)return r(t,e);var{base:n,sup:i,sub:a}=t,s=Pr(n,e),l,u,h=e.fontMetrics(),f=0,d=0,p=n&&Jt.isCharacterBox(n);if(i){var m=e.havingStyle(e.style.sup());l=Pr(i,m,e),p||(f=s.height-m.fontMetrics().supDrop*m.sizeMultiplier/e.sizeMultiplier)}if(a){var g=e.havingStyle(e.style.sub());u=Pr(a,g,e),p||(d=s.depth+g.fontMetrics().subDrop*g.sizeMultiplier/e.sizeMultiplier)}var y;e.style===rr.DISPLAY?y=h.sup1:e.style.cramped?y=h.sup3:y=h.sup2;var v=e.sizeMultiplier,x=gt(.5/h.ptPerEm/v),b=null;if(u){var w=t.base&&t.base.type==="op"&&t.base.name&&(t.base.name==="\\oiint"||t.base.name==="\\oiiint");(s instanceof Es||w)&&(b=gt(-s.italic))}var _;if(l&&u){f=Math.max(f,y,l.depth+.25*h.xHeight),d=Math.max(d,h.sub2);var T=h.defaultRuleThickness,E=4*T;if(f-l.depth-(u.height-d)0&&(f+=L,d-=L)}var S=[{type:"elem",elem:u,shift:d,marginRight:x,marginLeft:b},{type:"elem",elem:l,shift:-f,marginRight:x}];_=Fe.makeVList({positionType:"individualShift",children:S},e)}else if(u){d=Math.max(d,h.sub1,u.height-.8*h.xHeight);var A=[{type:"elem",elem:u,marginLeft:b,marginRight:x}];_=Fe.makeVList({positionType:"shift",positionData:d,children:A},e)}else if(l)f=Math.max(f,y,l.depth+.25*h.xHeight),_=Fe.makeVList({positionType:"shift",positionData:-f,children:[{type:"elem",elem:l,marginRight:x}]},e);else throw new Error("supsub must have either sup or sub.");var I=SC(s,"right")||"mord";return Fe.makeSpan([I],[s,Fe.makeSpan(["msupsub"],[_])],e)},mathmlBuilder(t,e){var r=!1,n,i;t.base&&t.base.type==="horizBrace"&&(i=!!t.sup,i===t.base.isOver&&(r=!0,n=t.base.isOver)),t.base&&(t.base.type==="op"||t.base.type==="operatorname")&&(t.base.parentIsSupSub=!0);var a=[yn(t.base,e)];t.sub&&a.push(yn(t.sub,e)),t.sup&&a.push(yn(t.sup,e));var s;if(r)s=n?"mover":"munder";else if(t.sub)if(t.sup){var h=t.base;h&&h.type==="op"&&h.limits&&e.style===rr.DISPLAY||h&&h.type==="operatorname"&&h.alwaysHandleSupSub&&(e.style===rr.DISPLAY||h.limits)?s="munderover":s="msubsup"}else{var u=t.base;u&&u.type==="op"&&u.limits&&(e.style===rr.DISPLAY||u.alwaysHandleSupSub)||u&&u.type==="operatorname"&&u.alwaysHandleSupSub&&(u.limits||e.style===rr.DISPLAY)?s="munder":s="msub"}else{var l=t.base;l&&l.type==="op"&&l.limits&&(e.style===rr.DISPLAY||l.alwaysHandleSupSub)||l&&l.type==="operatorname"&&l.alwaysHandleSupSub&&(l.limits||e.style===rr.DISPLAY)?s="mover":s="msup"}return new at.MathNode(s,a)}});id({type:"atom",htmlBuilder(t,e){return Fe.mathsym(t.text,t.mode,e,["m"+t.family])},mathmlBuilder(t,e){var r=new at.MathNode("mo",[Mo(t.text,t.mode)]);if(t.family==="bin"){var n=BC(t,e);n==="bold-italic"&&r.setAttribute("mathvariant",n)}else t.family==="punct"?r.setAttribute("separator","true"):(t.family==="open"||t.family==="close")&&r.setAttribute("stretchy","false");return r}});w$={mi:"italic",mn:"normal",mtext:"normal"};id({type:"mathord",htmlBuilder(t,e){return Fe.makeOrd(t,e,"mathord")},mathmlBuilder(t,e){var r=new at.MathNode("mi",[Mo(t.text,t.mode,e)]),n=BC(t,e)||"italic";return n!==w$[r.type]&&r.setAttribute("mathvariant",n),r}});id({type:"textord",htmlBuilder(t,e){return Fe.makeOrd(t,e,"textord")},mathmlBuilder(t,e){var r=Mo(t.text,t.mode,e),n=BC(t,e)||"normal",i;return t.mode==="text"?i=new at.MathNode("mtext",[r]):/[0-9]/.test(t.text)?i=new at.MathNode("mn",[r]):t.text==="\\prime"?i=new at.MathNode("mo",[r]):i=new at.MathNode("mi",[r]),n!==w$[i.type]&&i.setAttribute("mathvariant",n),i}});vC={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},xC={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};id({type:"spacing",htmlBuilder(t,e){if(xC.hasOwnProperty(t.text)){var r=xC[t.text].className||"";if(t.mode==="text"){var n=Fe.makeOrd(t,e,"textord");return n.classes.push(r),n}else return Fe.makeSpan(["mspace",r],[Fe.mathsym(t.text,t.mode,e)],e)}else{if(vC.hasOwnProperty(t.text))return Fe.makeSpan(["mspace",vC[t.text]],[],e);throw new lt('Unknown type of space "'+t.text+'"')}},mathmlBuilder(t,e){var r;if(xC.hasOwnProperty(t.text))r=new at.MathNode("mtext",[new at.TextNode("\xA0")]);else{if(vC.hasOwnProperty(t.text))return new at.MathNode("mspace");throw new lt('Unknown type of space "'+t.text+'"')}return r}});EG=o(()=>{var t=new at.MathNode("mtd",[]);return t.setAttribute("width","50%"),t},"pad");id({type:"tag",mathmlBuilder(t,e){var r=new at.MathNode("mtable",[new at.MathNode("mtr",[EG(),new at.MathNode("mtd",[vh(t.body,e)]),EG(),new at.MathNode("mtd",[vh(t.tag,e)])])]);return r.setAttribute("width","100%"),r}});SG={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},CG={"\\textbf":"textbf","\\textmd":"textmd"},O4e={"\\textit":"textit","\\textup":"textup"},AG=o((t,e)=>{var r=t.font;if(r){if(SG[r])return e.withTextFontFamily(SG[r]);if(CG[r])return e.withTextFontWeight(CG[r]);if(r==="\\emph")return e.fontShape==="textit"?e.withTextFontShape("textup"):e.withTextFontShape("textit")}else return e;return e.withTextFontShape(O4e[r])},"optionsWithFont");St({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup","\\emph"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"text",mode:r.mode,body:gi(i),font:n}},htmlBuilder(t,e){var r=AG(t,e),n=Fi(t.body,r,!0);return Fe.makeSpan(["mord","text"],n,r)},mathmlBuilder(t,e){var r=AG(t,e);return vh(t.body,r)}});St({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"underline",mode:r.mode,body:e[0]}},htmlBuilder(t,e){var r=Pr(t.body,e),n=Fe.makeLineSpan("underline-line",e),i=e.fontMetrics().defaultRuleThickness,a=Fe.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:i},{type:"elem",elem:n},{type:"kern",size:3*i},{type:"elem",elem:r}]},e);return Fe.makeSpan(["mord","underline"],[a],e)},mathmlBuilder(t,e){var r=new at.MathNode("mo",[new at.TextNode("\u203E")]);r.setAttribute("stretchy","true");var n=new at.MathNode("munder",[yn(t.body,e),r]);return n.setAttribute("accentunder","true"),n}});St({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(t,e){var{parser:r}=t;return{type:"vcenter",mode:r.mode,body:e[0]}},htmlBuilder(t,e){var r=Pr(t.body,e),n=e.fontMetrics().axisHeight,i=.5*(r.height-n-(r.depth+n));return Fe.makeVList({positionType:"shift",positionData:i,children:[{type:"elem",elem:r}]},e)},mathmlBuilder(t,e){return new at.MathNode("mpadded",[yn(t.body,e)],["vcenter"])}});St({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(t,e,r){throw new lt("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(t,e){for(var r=_G(t),n=[],i=e.havingStyle(e.style.text()),a=0;at.body.replace(/ /g,t.star?"\u2423":"\xA0"),"makeVerb"),gh=HG,T$=`[ \r + ]`,P4e="\\\\[a-zA-Z@]+",B4e="\\\\[^\uD800-\uDFFF]",F4e="("+P4e+")"+T$+"*",z4e=`\\\\( |[ \r ]+ -?)[ \r ]*`,Ibe="[̀-ͯ]",xVt=new RegExp(Ibe+"+$"),kVt="("+lqe+"+)|"+(yVt+"|")+"([!-\\[\\]-‧‪-퟿豈-￿]"+(Ibe+"*")+"|[\uD800-\uDBFF][\uDC00-\uDFFF]"+(Ibe+"*")+"|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5"+("|"+wVt)+("|"+vVt+")");class hqe{constructor(s,u){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=s,this.settings=u,this.tokenRegex=new RegExp(kVt,"g"),this.catcodes={"%":14,"~":13}}setCatcode(s,u){this.catcodes[s]=u}lex(){var s=this.input,u=this.tokenRegex.lastIndex;if(u===s.length)return new U4("EOF",new lm(this,u,u));var d=this.tokenRegex.exec(s);if(d===null||d.index!==u)throw new Ci("Unexpected character: '"+s[u]+"'",new U4(s[u],new lm(this,u,u+1)));var p=d[6]||d[3]||(d[2]?"\\ ":" ");if(this.catcodes[p]===14){var v=s.indexOf(` -`,this.tokenRegex.lastIndex);return v===-1?(this.tokenRegex.lastIndex=s.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=v+1,this.lex()}return new U4(p,new lm(this,u,this.tokenRegex.lastIndex))}}class EVt{constructor(s,u){s===void 0&&(s={}),u===void 0&&(u={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=u,this.builtins=s,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(this.undefStack.length===0)throw new Ci("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var s=this.undefStack.pop();for(var u in s)s.hasOwnProperty(u)&&(s[u]==null?delete this.current[u]:this.current[u]=s[u])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(s){return this.current.hasOwnProperty(s)||this.builtins.hasOwnProperty(s)}get(s){return this.current.hasOwnProperty(s)?this.current[s]:this.builtins[s]}set(s,u,d){if(d===void 0&&(d=!1),d){for(var p=0;p0&&(this.undefStack[this.undefStack.length-1][s]=u)}else{var v=this.undefStack[this.undefStack.length-1];v&&!v.hasOwnProperty(s)&&(v[s]=this.current[s])}u==null?delete this.current[s]:this.current[s]=u}}var TVt=$ze;et("\\noexpand",function(i){var s=i.popToken();return i.isExpandable(s.text)&&(s.noexpand=!0,s.treatAsRelax=!0),{tokens:[s],numArgs:0}}),et("\\expandafter",function(i){var s=i.popToken();return i.expandOnce(!0),{tokens:[s],numArgs:0}}),et("\\@firstoftwo",function(i){var s=i.consumeArgs(2);return{tokens:s[0],numArgs:0}}),et("\\@secondoftwo",function(i){var s=i.consumeArgs(2);return{tokens:s[1],numArgs:0}}),et("\\@ifnextchar",function(i){var s=i.consumeArgs(3);i.consumeSpaces();var u=i.future();return s[0].length===1&&s[0][0].text===u.text?{tokens:s[1],numArgs:0}:{tokens:s[2],numArgs:0}}),et("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}"),et("\\TextOrMath",function(i){var s=i.consumeArgs(2);return i.mode==="text"?{tokens:s[0],numArgs:0}:{tokens:s[1],numArgs:0}});var fqe={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};et("\\char",function(i){var s=i.popToken(),u,d="";if(s.text==="'")u=8,s=i.popToken();else if(s.text==='"')u=16,s=i.popToken();else if(s.text==="`")if(s=i.popToken(),s.text[0]==="\\")d=s.text.charCodeAt(1);else{if(s.text==="EOF")throw new Ci("\\char` missing argument");d=s.text.charCodeAt(0)}else u=10;if(u){if(d=fqe[s.text],d==null||d>=u)throw new Ci("Invalid base-"+u+" digit "+s.text);for(var p;(p=fqe[i.future().text])!=null&&p{var d=i.consumeArg().tokens;if(d.length!==1)throw new Ci("\\newcommand's first argument must be a macro name");var p=d[0].text,v=i.isDefined(p);if(v&&!s)throw new Ci("\\newcommand{"+p+"} attempting to redefine "+(p+"; use \\renewcommand"));if(!v&&!u)throw new Ci("\\renewcommand{"+p+"} when command "+p+" does not yet exist; use \\newcommand");var b=0;if(d=i.consumeArg().tokens,d.length===1&&d[0].text==="["){for(var y="",T=i.expandNextToken();T.text!=="]"&&T.text!=="EOF";)y+=T.text,T=i.expandNextToken();if(!y.match(/^\s*[0-9]+\s*$/))throw new Ci("Invalid number of arguments: "+y);b=parseInt(y),d=i.consumeArg().tokens}return i.macros.set(p,{tokens:d,numArgs:b}),""};et("\\newcommand",i=>Obe(i,!1,!0)),et("\\renewcommand",i=>Obe(i,!0,!1)),et("\\providecommand",i=>Obe(i,!0,!0)),et("\\message",i=>{var s=i.consumeArgs(1)[0];return console.log(s.reverse().map(u=>u.text).join("")),""}),et("\\errmessage",i=>{var s=i.consumeArgs(1)[0];return console.error(s.reverse().map(u=>u.text).join("")),""}),et("\\show",i=>{var s=i.popToken(),u=s.text;return console.log(s,i.macros.get(u),L9[u],Ul.math[u],Ul.text[u]),""}),et("\\bgroup","{"),et("\\egroup","}"),et("~","\\nobreakspace"),et("\\lq","`"),et("\\rq","'"),et("\\aa","\\r a"),et("\\AA","\\r A"),et("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`©}"),et("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}"),et("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`®}"),et("ℬ","\\mathscr{B}"),et("ℰ","\\mathscr{E}"),et("ℱ","\\mathscr{F}"),et("ℋ","\\mathscr{H}"),et("ℐ","\\mathscr{I}"),et("ℒ","\\mathscr{L}"),et("ℳ","\\mathscr{M}"),et("ℛ","\\mathscr{R}"),et("ℭ","\\mathfrak{C}"),et("ℌ","\\mathfrak{H}"),et("ℨ","\\mathfrak{Z}"),et("\\Bbbk","\\Bbb{k}"),et("·","\\cdotp"),et("\\llap","\\mathllap{\\textrm{#1}}"),et("\\rlap","\\mathrlap{\\textrm{#1}}"),et("\\clap","\\mathclap{\\textrm{#1}}"),et("\\mathstrut","\\vphantom{(}"),et("\\underbar","\\underline{\\text{#1}}"),et("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}'),et("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`≠}}"),et("\\ne","\\neq"),et("≠","\\neq"),et("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`∉}}"),et("∉","\\notin"),et("≘","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`≘}}"),et("≙","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`≘}}"),et("≚","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`≚}}"),et("≛","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`≛}}"),et("≝","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`≝}}"),et("≞","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`≞}}"),et("≟","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`≟}}"),et("⟂","\\perp"),et("‼","\\mathclose{!\\mkern-0.8mu!}"),et("∌","\\notni"),et("⌜","\\ulcorner"),et("⌝","\\urcorner"),et("⌞","\\llcorner"),et("⌟","\\lrcorner"),et("©","\\copyright"),et("®","\\textregistered"),et("️","\\textregistered"),et("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}'),et("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}'),et("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}'),et("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}'),et("\\vdots","\\mathord{\\varvdots\\rule{0pt}{15pt}}"),et("⋮","\\vdots"),et("\\varGamma","\\mathit{\\Gamma}"),et("\\varDelta","\\mathit{\\Delta}"),et("\\varTheta","\\mathit{\\Theta}"),et("\\varLambda","\\mathit{\\Lambda}"),et("\\varXi","\\mathit{\\Xi}"),et("\\varPi","\\mathit{\\Pi}"),et("\\varSigma","\\mathit{\\Sigma}"),et("\\varUpsilon","\\mathit{\\Upsilon}"),et("\\varPhi","\\mathit{\\Phi}"),et("\\varPsi","\\mathit{\\Psi}"),et("\\varOmega","\\mathit{\\Omega}"),et("\\substack","\\begin{subarray}{c}#1\\end{subarray}"),et("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax"),et("\\boxed","\\fbox{$\\displaystyle{#1}$}"),et("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;"),et("\\implies","\\DOTSB\\;\\Longrightarrow\\;"),et("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");var dqe={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};et("\\dots",function(i){var s="\\dotso",u=i.expandAfterFuture().text;return u in dqe?s=dqe[u]:(u.slice(0,4)==="\\not"||u in Ul.math&&Ya.contains(["bin","rel"],Ul.math[u].group))&&(s="\\dotsb"),s});var Nbe={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};et("\\dotso",function(i){var s=i.future().text;return s in Nbe?"\\ldots\\,":"\\ldots"}),et("\\dotsc",function(i){var s=i.future().text;return s in Nbe&&s!==","?"\\ldots\\,":"\\ldots"}),et("\\cdots",function(i){var s=i.future().text;return s in Nbe?"\\@cdots\\,":"\\@cdots"}),et("\\dotsb","\\cdots"),et("\\dotsm","\\cdots"),et("\\dotsi","\\!\\cdots"),et("\\dotsx","\\ldots\\,"),et("\\DOTSI","\\relax"),et("\\DOTSB","\\relax"),et("\\DOTSX","\\relax"),et("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"),et("\\,","\\tmspace+{3mu}{.1667em}"),et("\\thinspace","\\,"),et("\\>","\\mskip{4mu}"),et("\\:","\\tmspace+{4mu}{.2222em}"),et("\\medspace","\\:"),et("\\;","\\tmspace+{5mu}{.2777em}"),et("\\thickspace","\\;"),et("\\!","\\tmspace-{3mu}{.1667em}"),et("\\negthinspace","\\!"),et("\\negmedspace","\\tmspace-{4mu}{.2222em}"),et("\\negthickspace","\\tmspace-{5mu}{.277em}"),et("\\enspace","\\kern.5em "),et("\\enskip","\\hskip.5em\\relax"),et("\\quad","\\hskip1em\\relax"),et("\\qquad","\\hskip2em\\relax"),et("\\tag","\\@ifstar\\tag@literal\\tag@paren"),et("\\tag@paren","\\tag@literal{({#1})}"),et("\\tag@literal",i=>{if(i.macros.get("\\df@tag"))throw new Ci("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"}),et("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"),et("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"),et("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}"),et("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1"),et("\\newline","\\\\\\relax"),et("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");var gqe=Ri(K4["Main-Regular"]["T".charCodeAt(0)][1]-.7*K4["Main-Regular"]["A".charCodeAt(0)][1]);et("\\LaTeX","\\textrm{\\html@mathml{"+("L\\kern-.36em\\raisebox{"+gqe+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{LaTeX}}"),et("\\KaTeX","\\textrm{\\html@mathml{"+("K\\kern-.17em\\raisebox{"+gqe+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{KaTeX}}"),et("\\hspace","\\@ifstar\\@hspacer\\@hspace"),et("\\@hspace","\\hskip #1\\relax"),et("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax"),et("\\ordinarycolon",":"),et("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}"),et("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}'),et("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}'),et("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}'),et("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}'),et("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}'),et("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}'),et("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}'),et("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}'),et("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}'),et("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}'),et("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}'),et("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}'),et("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}'),et("∷","\\dblcolon"),et("∹","\\eqcolon"),et("≔","\\coloneqq"),et("≕","\\eqqcolon"),et("⩴","\\Coloneqq"),et("\\ratio","\\vcentcolon"),et("\\coloncolon","\\dblcolon"),et("\\colonequals","\\coloneqq"),et("\\coloncolonequals","\\Coloneqq"),et("\\equalscolon","\\eqqcolon"),et("\\equalscoloncolon","\\Eqqcolon"),et("\\colonminus","\\coloneq"),et("\\coloncolonminus","\\Coloneq"),et("\\minuscolon","\\eqcolon"),et("\\minuscoloncolon","\\Eqcolon"),et("\\coloncolonapprox","\\Colonapprox"),et("\\coloncolonsim","\\Colonsim"),et("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),et("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"),et("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),et("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"),et("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`∌}}"),et("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}"),et("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}"),et("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}"),et("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}"),et("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}"),et("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}"),et("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}"),et("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}"),et("\\gvertneqq","\\html@mathml{\\@gvertneqq}{≩}"),et("\\lvertneqq","\\html@mathml{\\@lvertneqq}{≨}"),et("\\ngeqq","\\html@mathml{\\@ngeqq}{≱}"),et("\\ngeqslant","\\html@mathml{\\@ngeqslant}{≱}"),et("\\nleqq","\\html@mathml{\\@nleqq}{≰}"),et("\\nleqslant","\\html@mathml{\\@nleqslant}{≰}"),et("\\nshortmid","\\html@mathml{\\@nshortmid}{∤}"),et("\\nshortparallel","\\html@mathml{\\@nshortparallel}{∦}"),et("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{⊈}"),et("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{⊉}"),et("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{⊊}"),et("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{⫋}"),et("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{⊋}"),et("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{⫌}"),et("\\imath","\\html@mathml{\\@imath}{ı}"),et("\\jmath","\\html@mathml{\\@jmath}{ȷ}"),et("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`⟦}}"),et("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`⟧}}"),et("⟦","\\llbracket"),et("⟧","\\rrbracket"),et("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`⦃}}"),et("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`⦄}}"),et("⦃","\\lBrace"),et("⦄","\\rBrace"),et("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`⦵}}"),et("⦵","\\minuso"),et("\\darr","\\downarrow"),et("\\dArr","\\Downarrow"),et("\\Darr","\\Downarrow"),et("\\lang","\\langle"),et("\\rang","\\rangle"),et("\\uarr","\\uparrow"),et("\\uArr","\\Uparrow"),et("\\Uarr","\\Uparrow"),et("\\N","\\mathbb{N}"),et("\\R","\\mathbb{R}"),et("\\Z","\\mathbb{Z}"),et("\\alef","\\aleph"),et("\\alefsym","\\aleph"),et("\\Alpha","\\mathrm{A}"),et("\\Beta","\\mathrm{B}"),et("\\bull","\\bullet"),et("\\Chi","\\mathrm{X}"),et("\\clubs","\\clubsuit"),et("\\cnums","\\mathbb{C}"),et("\\Complex","\\mathbb{C}"),et("\\Dagger","\\ddagger"),et("\\diamonds","\\diamondsuit"),et("\\empty","\\emptyset"),et("\\Epsilon","\\mathrm{E}"),et("\\Eta","\\mathrm{H}"),et("\\exist","\\exists"),et("\\harr","\\leftrightarrow"),et("\\hArr","\\Leftrightarrow"),et("\\Harr","\\Leftrightarrow"),et("\\hearts","\\heartsuit"),et("\\image","\\Im"),et("\\infin","\\infty"),et("\\Iota","\\mathrm{I}"),et("\\isin","\\in"),et("\\Kappa","\\mathrm{K}"),et("\\larr","\\leftarrow"),et("\\lArr","\\Leftarrow"),et("\\Larr","\\Leftarrow"),et("\\lrarr","\\leftrightarrow"),et("\\lrArr","\\Leftrightarrow"),et("\\Lrarr","\\Leftrightarrow"),et("\\Mu","\\mathrm{M}"),et("\\natnums","\\mathbb{N}"),et("\\Nu","\\mathrm{N}"),et("\\Omicron","\\mathrm{O}"),et("\\plusmn","\\pm"),et("\\rarr","\\rightarrow"),et("\\rArr","\\Rightarrow"),et("\\Rarr","\\Rightarrow"),et("\\real","\\Re"),et("\\reals","\\mathbb{R}"),et("\\Reals","\\mathbb{R}"),et("\\Rho","\\mathrm{P}"),et("\\sdot","\\cdot"),et("\\sect","\\S"),et("\\spades","\\spadesuit"),et("\\sub","\\subset"),et("\\sube","\\subseteq"),et("\\supe","\\supseteq"),et("\\Tau","\\mathrm{T}"),et("\\thetasym","\\vartheta"),et("\\weierp","\\wp"),et("\\Zeta","\\mathrm{Z}"),et("\\argmin","\\DOTSB\\operatorname*{arg\\,min}"),et("\\argmax","\\DOTSB\\operatorname*{arg\\,max}"),et("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits"),et("\\bra","\\mathinner{\\langle{#1}|}"),et("\\ket","\\mathinner{|{#1}\\rangle}"),et("\\braket","\\mathinner{\\langle{#1}\\rangle}"),et("\\Bra","\\left\\langle#1\\right|"),et("\\Ket","\\left|#1\\right\\rangle");var pqe=i=>s=>{var u=s.consumeArg().tokens,d=s.consumeArg().tokens,p=s.consumeArg().tokens,v=s.consumeArg().tokens,b=s.macros.get("|"),y=s.macros.get("\\|");s.macros.beginGroup();var T=P=>R=>{i&&(R.macros.set("|",b),p.length&&R.macros.set("\\|",y));var F=P;if(!P&&p.length){var j=R.future();j.text==="|"&&(R.popToken(),F=!0)}return{tokens:F?p:d,numArgs:0}};s.macros.set("|",T(!1)),p.length&&s.macros.set("\\|",T(!0));var _=s.consumeArg().tokens,A=s.expandTokens([...v,..._,...u]);return s.macros.endGroup(),{tokens:A.reverse(),numArgs:0}};et("\\bra@ket",pqe(!1)),et("\\bra@set",pqe(!0)),et("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}"),et("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}"),et("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}"),et("\\angln","{\\angl n}"),et("\\blue","\\textcolor{##6495ed}{#1}"),et("\\orange","\\textcolor{##ffa500}{#1}"),et("\\pink","\\textcolor{##ff00af}{#1}"),et("\\red","\\textcolor{##df0030}{#1}"),et("\\green","\\textcolor{##28ae7b}{#1}"),et("\\gray","\\textcolor{gray}{#1}"),et("\\purple","\\textcolor{##9d38bd}{#1}"),et("\\blueA","\\textcolor{##ccfaff}{#1}"),et("\\blueB","\\textcolor{##80f6ff}{#1}"),et("\\blueC","\\textcolor{##63d9ea}{#1}"),et("\\blueD","\\textcolor{##11accd}{#1}"),et("\\blueE","\\textcolor{##0c7f99}{#1}"),et("\\tealA","\\textcolor{##94fff5}{#1}"),et("\\tealB","\\textcolor{##26edd5}{#1}"),et("\\tealC","\\textcolor{##01d1c1}{#1}"),et("\\tealD","\\textcolor{##01a995}{#1}"),et("\\tealE","\\textcolor{##208170}{#1}"),et("\\greenA","\\textcolor{##b6ffb0}{#1}"),et("\\greenB","\\textcolor{##8af281}{#1}"),et("\\greenC","\\textcolor{##74cf70}{#1}"),et("\\greenD","\\textcolor{##1fab54}{#1}"),et("\\greenE","\\textcolor{##0d923f}{#1}"),et("\\goldA","\\textcolor{##ffd0a9}{#1}"),et("\\goldB","\\textcolor{##ffbb71}{#1}"),et("\\goldC","\\textcolor{##ff9c39}{#1}"),et("\\goldD","\\textcolor{##e07d10}{#1}"),et("\\goldE","\\textcolor{##a75a05}{#1}"),et("\\redA","\\textcolor{##fca9a9}{#1}"),et("\\redB","\\textcolor{##ff8482}{#1}"),et("\\redC","\\textcolor{##f9685d}{#1}"),et("\\redD","\\textcolor{##e84d39}{#1}"),et("\\redE","\\textcolor{##bc2612}{#1}"),et("\\maroonA","\\textcolor{##ffbde0}{#1}"),et("\\maroonB","\\textcolor{##ff92c6}{#1}"),et("\\maroonC","\\textcolor{##ed5fa6}{#1}"),et("\\maroonD","\\textcolor{##ca337c}{#1}"),et("\\maroonE","\\textcolor{##9e034e}{#1}"),et("\\purpleA","\\textcolor{##ddd7ff}{#1}"),et("\\purpleB","\\textcolor{##c6b9fc}{#1}"),et("\\purpleC","\\textcolor{##aa87ff}{#1}"),et("\\purpleD","\\textcolor{##7854ab}{#1}"),et("\\purpleE","\\textcolor{##543b78}{#1}"),et("\\mintA","\\textcolor{##f5f9e8}{#1}"),et("\\mintB","\\textcolor{##edf2df}{#1}"),et("\\mintC","\\textcolor{##e0e5cc}{#1}"),et("\\grayA","\\textcolor{##f6f7f7}{#1}"),et("\\grayB","\\textcolor{##f0f1f2}{#1}"),et("\\grayC","\\textcolor{##e3e5e6}{#1}"),et("\\grayD","\\textcolor{##d6d8da}{#1}"),et("\\grayE","\\textcolor{##babec2}{#1}"),et("\\grayF","\\textcolor{##888d93}{#1}"),et("\\grayG","\\textcolor{##626569}{#1}"),et("\\grayH","\\textcolor{##3b3e40}{#1}"),et("\\grayI","\\textcolor{##21242c}{#1}"),et("\\kaBlue","\\textcolor{##314453}{#1}"),et("\\kaGreen","\\textcolor{##71B307}{#1}");var bqe={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0};class CVt{constructor(s,u,d){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=u,this.expansionCount=0,this.feed(s),this.macros=new EVt(TVt,u.macros),this.mode=d,this.stack=[]}feed(s){this.lexer=new hqe(s,this.settings)}switchMode(s){this.mode=s}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return this.stack.length===0&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(s){this.stack.push(s)}pushTokens(s){this.stack.push(...s)}scanArgument(s){var u,d,p;if(s){if(this.consumeSpaces(),this.future().text!=="[")return null;u=this.popToken(),{tokens:p,end:d}=this.consumeArg(["]"])}else({tokens:p,start:u,end:d}=this.consumeArg());return this.pushToken(new U4("EOF",d.loc)),this.pushTokens(p),u.range(d,"")}consumeSpaces(){for(;;){var s=this.future();if(s.text===" ")this.stack.pop();else break}}consumeArg(s){var u=[],d=s&&s.length>0;d||this.consumeSpaces();var p=this.future(),v,b=0,y=0;do{if(v=this.popToken(),u.push(v),v.text==="{")++b;else if(v.text==="}"){if(--b,b===-1)throw new Ci("Extra }",v)}else if(v.text==="EOF")throw new Ci("Unexpected end of input in a macro argument, expected '"+(s&&d?s[y]:"}")+"'",v);if(s&&d)if((b===0||b===1&&s[y]==="{")&&v.text===s[y]){if(++y,y===s.length){u.splice(-y,y);break}}else y=0}while(b!==0||d);return p.text==="{"&&u[u.length-1].text==="}"&&(u.pop(),u.shift()),u.reverse(),{tokens:u,start:p,end:v}}consumeArgs(s,u){if(u){if(u.length!==s+1)throw new Ci("The length of delimiters doesn't match the number of args!");for(var d=u[0],p=0;pthis.settings.maxExpand)throw new Ci("Too many expansions: infinite loop or need to increase maxExpand setting");var v=p.tokens,b=this.consumeArgs(p.numArgs,p.delimiters);if(p.numArgs){v=v.slice();for(var y=v.length-1;y>=0;--y){var T=v[y];if(T.text==="#"){if(y===0)throw new Ci("Incomplete placeholder at end of macro body",T);if(T=v[--y],T.text==="#")v.splice(y+1,1);else if(/^[1-9]$/.test(T.text))v.splice(y,2,...b[+T.text-1]);else throw new Ci("Not a valid argument number",T)}}}return this.pushTokens(v),v.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(this.expandOnce()===!1){var s=this.stack.pop();return s.treatAsRelax&&(s.text="\\relax"),s}throw new Error}expandMacro(s){return this.macros.has(s)?this.expandTokens([new U4(s)]):void 0}expandTokens(s){var u=[],d=this.stack.length;for(this.pushTokens(s);this.stack.length>d;)if(this.expandOnce(!0)===!1){var p=this.stack.pop();p.treatAsRelax&&(p.noexpand=!1,p.treatAsRelax=!1),u.push(p)}return u}expandMacroAsText(s){var u=this.expandMacro(s);return u&&u.map(d=>d.text).join("")}_getExpansion(s){var u=this.macros.get(s);if(u==null)return u;if(s.length===1){var d=this.lexer.catcodes[s];if(d!=null&&d!==13)return}var p=typeof u=="function"?u(this):u;if(typeof p=="string"){var v=0;if(p.indexOf("#")!==-1)for(var b=p.replace(/##/g,"");b.indexOf("#"+(v+1))!==-1;)++v;for(var y=new hqe(p,this.settings),T=[],_=y.lex();_.text!=="EOF";)T.push(_),_=y.lex();T.reverse();var A={tokens:T,numArgs:v};return A}return p}isDefined(s){return this.macros.has(s)||L9.hasOwnProperty(s)||Ul.math.hasOwnProperty(s)||Ul.text.hasOwnProperty(s)||bqe.hasOwnProperty(s)}isExpandable(s){var u=this.macros.get(s);return u!=null?typeof u=="string"||typeof u=="function"||!u.unexpandable:L9.hasOwnProperty(s)&&!L9[s].primitive}}var mqe=/^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/,TQ=Object.freeze({"₊":"+","₋":"-","₌":"=","₍":"(","₎":")","₀":"0","₁":"1","₂":"2","₃":"3","₄":"4","₅":"5","₆":"6","₇":"7","₈":"8","₉":"9","ₐ":"a","ₑ":"e","ₕ":"h","ᵢ":"i","ⱼ":"j","ₖ":"k","ₗ":"l","ₘ":"m","ₙ":"n","ₒ":"o","ₚ":"p","ᵣ":"r","ₛ":"s","ₜ":"t","ᵤ":"u","ᵥ":"v","ₓ":"x","ᵦ":"β","ᵧ":"γ","ᵨ":"ρ","ᵩ":"ϕ","ᵪ":"χ","⁺":"+","⁻":"-","⁼":"=","⁽":"(","⁾":")","⁰":"0","¹":"1","²":"2","³":"3","⁴":"4","⁵":"5","⁶":"6","⁷":"7","⁸":"8","⁹":"9","ᴬ":"A","ᴮ":"B","ᴰ":"D","ᴱ":"E","ᴳ":"G","ᴴ":"H","ᴵ":"I","ᴶ":"J","ᴷ":"K","ᴸ":"L","ᴹ":"M","ᴺ":"N","ᴼ":"O","ᴾ":"P","ᴿ":"R","ᵀ":"T","ᵁ":"U","ⱽ":"V","ᵂ":"W","ᵃ":"a","ᵇ":"b","ᶜ":"c","ᵈ":"d","ᵉ":"e","ᶠ":"f","ᵍ":"g",ʰ:"h","ⁱ":"i",ʲ:"j","ᵏ":"k",ˡ:"l","ᵐ":"m",ⁿ:"n","ᵒ":"o","ᵖ":"p",ʳ:"r",ˢ:"s","ᵗ":"t","ᵘ":"u","ᵛ":"v",ʷ:"w",ˣ:"x",ʸ:"y","ᶻ":"z","ᵝ":"β","ᵞ":"γ","ᵟ":"δ","ᵠ":"ϕ","ᵡ":"χ","ᶿ":"θ"}),Pbe={"́":{text:"\\'",math:"\\acute"},"̀":{text:"\\`",math:"\\grave"},"̈":{text:'\\"',math:"\\ddot"},"̃":{text:"\\~",math:"\\tilde"},"̄":{text:"\\=",math:"\\bar"},"̆":{text:"\\u",math:"\\breve"},"̌":{text:"\\v",math:"\\check"},"̂":{text:"\\^",math:"\\hat"},"̇":{text:"\\.",math:"\\dot"},"̊":{text:"\\r",math:"\\mathring"},"̋":{text:"\\H"},"̧":{text:"\\c"}},vqe={á:"á",à:"à",ä:"ä",ǟ:"ǟ",ã:"ã",ā:"ā",ă:"ă",ắ:"ắ",ằ:"ằ",ẵ:"ẵ",ǎ:"ǎ",â:"â",ấ:"ấ",ầ:"ầ",ẫ:"ẫ",ȧ:"ȧ",ǡ:"ǡ",å:"å",ǻ:"ǻ",ḃ:"ḃ",ć:"ć",ḉ:"ḉ",č:"č",ĉ:"ĉ",ċ:"ċ",ç:"ç",ď:"ď",ḋ:"ḋ",ḑ:"ḑ",é:"é",è:"è",ë:"ë",ẽ:"ẽ",ē:"ē",ḗ:"ḗ",ḕ:"ḕ",ĕ:"ĕ",ḝ:"ḝ",ě:"ě",ê:"ê",ế:"ế",ề:"ề",ễ:"ễ",ė:"ė",ȩ:"ȩ",ḟ:"ḟ",ǵ:"ǵ",ḡ:"ḡ",ğ:"ğ",ǧ:"ǧ",ĝ:"ĝ",ġ:"ġ",ģ:"ģ",ḧ:"ḧ",ȟ:"ȟ",ĥ:"ĥ",ḣ:"ḣ",ḩ:"ḩ",í:"í",ì:"ì",ï:"ï",ḯ:"ḯ",ĩ:"ĩ",ī:"ī",ĭ:"ĭ",ǐ:"ǐ",î:"î",ǰ:"ǰ",ĵ:"ĵ",ḱ:"ḱ",ǩ:"ǩ",ķ:"ķ",ĺ:"ĺ",ľ:"ľ",ļ:"ļ",ḿ:"ḿ",ṁ:"ṁ",ń:"ń",ǹ:"ǹ",ñ:"ñ",ň:"ň",ṅ:"ṅ",ņ:"ņ",ó:"ó",ò:"ò",ö:"ö",ȫ:"ȫ",õ:"õ",ṍ:"ṍ",ṏ:"ṏ",ȭ:"ȭ",ō:"ō",ṓ:"ṓ",ṑ:"ṑ",ŏ:"ŏ",ǒ:"ǒ",ô:"ô",ố:"ố",ồ:"ồ",ỗ:"ỗ",ȯ:"ȯ",ȱ:"ȱ",ő:"ő",ṕ:"ṕ",ṗ:"ṗ",ŕ:"ŕ",ř:"ř",ṙ:"ṙ",ŗ:"ŗ",ś:"ś",ṥ:"ṥ",š:"š",ṧ:"ṧ",ŝ:"ŝ",ṡ:"ṡ",ş:"ş",ẗ:"ẗ",ť:"ť",ṫ:"ṫ",ţ:"ţ",ú:"ú",ù:"ù",ü:"ü",ǘ:"ǘ",ǜ:"ǜ",ǖ:"ǖ",ǚ:"ǚ",ũ:"ũ",ṹ:"ṹ",ū:"ū",ṻ:"ṻ",ŭ:"ŭ",ǔ:"ǔ",û:"û",ů:"ů",ű:"ű",ṽ:"ṽ",ẃ:"ẃ",ẁ:"ẁ",ẅ:"ẅ",ŵ:"ŵ",ẇ:"ẇ",ẘ:"ẘ",ẍ:"ẍ",ẋ:"ẋ",ý:"ý",ỳ:"ỳ",ÿ:"ÿ",ỹ:"ỹ",ȳ:"ȳ",ŷ:"ŷ",ẏ:"ẏ",ẙ:"ẙ",ź:"ź",ž:"ž",ẑ:"ẑ",ż:"ż",Á:"Á",À:"À",Ä:"Ä",Ǟ:"Ǟ",Ã:"Ã",Ā:"Ā",Ă:"Ă",Ắ:"Ắ",Ằ:"Ằ",Ẵ:"Ẵ",Ǎ:"Ǎ",Â:"Â",Ấ:"Ấ",Ầ:"Ầ",Ẫ:"Ẫ",Ȧ:"Ȧ",Ǡ:"Ǡ",Å:"Å",Ǻ:"Ǻ",Ḃ:"Ḃ",Ć:"Ć",Ḉ:"Ḉ",Č:"Č",Ĉ:"Ĉ",Ċ:"Ċ",Ç:"Ç",Ď:"Ď",Ḋ:"Ḋ",Ḑ:"Ḑ",É:"É",È:"È",Ë:"Ë",Ẽ:"Ẽ",Ē:"Ē",Ḗ:"Ḗ",Ḕ:"Ḕ",Ĕ:"Ĕ",Ḝ:"Ḝ",Ě:"Ě",Ê:"Ê",Ế:"Ế",Ề:"Ề",Ễ:"Ễ",Ė:"Ė",Ȩ:"Ȩ",Ḟ:"Ḟ",Ǵ:"Ǵ",Ḡ:"Ḡ",Ğ:"Ğ",Ǧ:"Ǧ",Ĝ:"Ĝ",Ġ:"Ġ",Ģ:"Ģ",Ḧ:"Ḧ",Ȟ:"Ȟ",Ĥ:"Ĥ",Ḣ:"Ḣ",Ḩ:"Ḩ",Í:"Í",Ì:"Ì",Ï:"Ï",Ḯ:"Ḯ",Ĩ:"Ĩ",Ī:"Ī",Ĭ:"Ĭ",Ǐ:"Ǐ",Î:"Î",İ:"İ",Ĵ:"Ĵ",Ḱ:"Ḱ",Ǩ:"Ǩ",Ķ:"Ķ",Ĺ:"Ĺ",Ľ:"Ľ",Ļ:"Ļ",Ḿ:"Ḿ",Ṁ:"Ṁ",Ń:"Ń",Ǹ:"Ǹ",Ñ:"Ñ",Ň:"Ň",Ṅ:"Ṅ",Ņ:"Ņ",Ó:"Ó",Ò:"Ò",Ö:"Ö",Ȫ:"Ȫ",Õ:"Õ",Ṍ:"Ṍ",Ṏ:"Ṏ",Ȭ:"Ȭ",Ō:"Ō",Ṓ:"Ṓ",Ṑ:"Ṑ",Ŏ:"Ŏ",Ǒ:"Ǒ",Ô:"Ô",Ố:"Ố",Ồ:"Ồ",Ỗ:"Ỗ",Ȯ:"Ȯ",Ȱ:"Ȱ",Ő:"Ő",Ṕ:"Ṕ",Ṗ:"Ṗ",Ŕ:"Ŕ",Ř:"Ř",Ṙ:"Ṙ",Ŗ:"Ŗ",Ś:"Ś",Ṥ:"Ṥ",Š:"Š",Ṧ:"Ṧ",Ŝ:"Ŝ",Ṡ:"Ṡ",Ş:"Ş",Ť:"Ť",Ṫ:"Ṫ",Ţ:"Ţ",Ú:"Ú",Ù:"Ù",Ü:"Ü",Ǘ:"Ǘ",Ǜ:"Ǜ",Ǖ:"Ǖ",Ǚ:"Ǚ",Ũ:"Ũ",Ṹ:"Ṹ",Ū:"Ū",Ṻ:"Ṻ",Ŭ:"Ŭ",Ǔ:"Ǔ",Û:"Û",Ů:"Ů",Ű:"Ű",Ṽ:"Ṽ",Ẃ:"Ẃ",Ẁ:"Ẁ",Ẅ:"Ẅ",Ŵ:"Ŵ",Ẇ:"Ẇ",Ẍ:"Ẍ",Ẋ:"Ẋ",Ý:"Ý",Ỳ:"Ỳ",Ÿ:"Ÿ",Ỹ:"Ỹ",Ȳ:"Ȳ",Ŷ:"Ŷ",Ẏ:"Ẏ",Ź:"Ź",Ž:"Ž",Ẑ:"Ẑ",Ż:"Ż",ά:"ά",ὰ:"ὰ",ᾱ:"ᾱ",ᾰ:"ᾰ",έ:"έ",ὲ:"ὲ",ή:"ή",ὴ:"ὴ",ί:"ί",ὶ:"ὶ",ϊ:"ϊ",ΐ:"ΐ",ῒ:"ῒ",ῑ:"ῑ",ῐ:"ῐ",ό:"ό",ὸ:"ὸ",ύ:"ύ",ὺ:"ὺ",ϋ:"ϋ",ΰ:"ΰ",ῢ:"ῢ",ῡ:"ῡ",ῠ:"ῠ",ώ:"ώ",ὼ:"ὼ",Ύ:"Ύ",Ὺ:"Ὺ",Ϋ:"Ϋ",Ῡ:"Ῡ",Ῠ:"Ῠ",Ώ:"Ώ",Ὼ:"Ὼ"};class gR{constructor(s,u){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new CVt(s,u,this.mode),this.settings=u,this.leftrightDepth=0}expect(s,u){if(u===void 0&&(u=!0),this.fetch().text!==s)throw new Ci("Expected '"+s+"', got '"+this.fetch().text+"'",this.fetch());u&&this.consume()}consume(){this.nextToken=null}fetch(){return this.nextToken==null&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(s){this.mode=s,this.gullet.switchMode(s)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var s=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),s}finally{this.gullet.endGroups()}}subparse(s){var u=this.nextToken;this.consume(),this.gullet.pushToken(new U4("}")),this.gullet.pushTokens(s);var d=this.parseExpression(!1);return this.expect("}"),this.nextToken=u,d}parseExpression(s,u){for(var d=[];;){this.mode==="math"&&this.consumeSpaces();var p=this.fetch();if(gR.endOfExpression.indexOf(p.text)!==-1||u&&p.text===u||s&&L9[p.text]&&L9[p.text].infix)break;var v=this.parseAtom(u);if(v){if(v.type==="internal")continue}else break;d.push(v)}return this.mode==="text"&&this.formLigatures(d),this.handleInfixNodes(d)}handleInfixNodes(s){for(var u=-1,d,p=0;p=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+u[0]+'" used in math mode',s);var y=Ul[this.mode][u].group,T=lm.range(s),_;if(dHt.hasOwnProperty(y)){var A=y;_={type:"atom",mode:this.mode,family:A,loc:T,text:u}}else _={type:y,mode:this.mode,loc:T,text:u};b=_}else if(u.charCodeAt(0)>=128)this.settings.strict&&(K$e(u.charCodeAt(0))?this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+u[0]+'" used in math mode',s):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+u[0]+'"'+(" ("+u.charCodeAt(0)+")"),s)),b={type:"textord",mode:"text",loc:lm.range(s),text:u};else return null;if(this.consume(),v)for(var P=0;P"u"&&(_s.yylloc={});var j0=_s.yylloc;on.push(j0);var pm=_s.options&&_s.options.ranges;typeof tl.yy.parseError=="function"?this.parseError=tl.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ml(){var kh;return kh=At.pop()||_s.lex()||Pa,typeof kh!="number"&&(kh instanceof Array&&(At=kh,kh=At.pop()),kh=qn.symbols_[kh]||kh),kh}for(var Xc,Bc,ja,Ou,Sa={},Po,Fc,xa,Ba;;){if(Bc=Un[Un.length-1],this.defaultActions[Bc]?ja=this.defaultActions[Bc]:((Xc===null||typeof Xc>"u")&&(Xc=Ml()),ja=fn[Bc]&&fn[Bc][Xc]),typeof ja>"u"||!ja.length||!ja[0]){var ga="";Ba=[];for(Po in fn[Bc])this.terminals_[Po]&&Po>$o&&Ba.push("'"+this.terminals_[Po]+"'");_s.showPosition?ga="Parse error on line "+(oo+1)+`: -`+_s.showPosition()+` -Expecting `+Ba.join(", ")+", got '"+(this.terminals_[Xc]||Xc)+"'":ga="Parse error on line "+(oo+1)+": Unexpected "+(Xc==Pa?"end of input":"'"+(this.terminals_[Xc]||Xc)+"'"),this.parseError(ga,{text:_s.match,token:this.terminals_[Xc]||Xc,line:_s.yylineno,loc:j0,expected:Ba})}if(ja[0]instanceof Array&&ja.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Bc+", token: "+Xc);switch(ja[0]){case 1:Un.push(Xc),wt.push(_s.yytext),on.push(_s.yylloc),Un.push(ja[1]),Xc=null,jo=_s.yyleng,An=_s.yytext,oo=_s.yylineno,j0=_s.yylloc;break;case 2:if(Fc=this.productions_[ja[1]][1],Sa.$=wt[wt.length-Fc],Sa._$={first_line:on[on.length-(Fc||1)].first_line,last_line:on[on.length-1].last_line,first_column:on[on.length-(Fc||1)].first_column,last_column:on[on.length-1].last_column},pm&&(Sa._$.range=[on[on.length-(Fc||1)].range[0],on[on.length-1].range[1]]),Ou=this.performAction.apply(Sa,[An,jo,oo,tl.yy,ja[1],wt,on].concat(wo)),typeof Ou<"u")return Ou;Fc&&(Un=Un.slice(0,-1*Fc*2),wt=wt.slice(0,-1*Fc),on=on.slice(0,-1*Fc)),Un.push(this.productions_[ja[1]][0]),wt.push(Sa.$),on.push(Sa._$),xa=fn[Un[Un.length-2]][Un[Un.length-1]],Un.push(xa);break;case 3:return!0}}return!0}},zs=function(){var Tr={EOF:1,parseError:function(qn,Un){if(this.yy.parser)this.yy.parser.parseError(qn,Un);else throw new Error(qn)},setInput:function(Fn,qn){return this.yy=qn||this.yy||{},this._input=Fn,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var Fn=this._input[0];this.yytext+=Fn,this.yyleng++,this.offset++,this.match+=Fn,this.matched+=Fn;var qn=Fn.match(/(?:\r\n?|\n).*/g);return qn?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Fn},unput:function(Fn){var qn=Fn.length,Un=Fn.split(/(?:\r\n?|\n)/g);this._input=Fn+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-qn),this.offset-=qn;var At=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Un.length-1&&(this.yylineno-=Un.length-1);var wt=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Un?(Un.length===At.length?this.yylloc.first_column:0)+At[At.length-Un.length].length-Un[0].length:this.yylloc.first_column-qn},this.options.ranges&&(this.yylloc.range=[wt[0],wt[0]+this.yyleng-qn]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(Fn){this.unput(this.match.slice(Fn))},pastInput:function(){var Fn=this.matched.substr(0,this.matched.length-this.match.length);return(Fn.length>20?"...":"")+Fn.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Fn=this.match;return Fn.length<20&&(Fn+=this._input.substr(0,20-Fn.length)),(Fn.substr(0,20)+(Fn.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Fn=this.pastInput(),qn=new Array(Fn.length+1).join("-");return Fn+this.upcomingInput()+` -`+qn+"^"},test_match:function(Fn,qn){var Un,At,wt;if(this.options.backtrack_lexer&&(wt={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(wt.yylloc.range=this.yylloc.range.slice(0))),At=Fn[0].match(/(?:\r\n?|\n).*/g),At&&(this.yylineno+=At.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:At?At[At.length-1].length-At[At.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Fn[0].length},this.yytext+=Fn[0],this.match+=Fn[0],this.matches=Fn,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Fn[0].length),this.matched+=Fn[0],Un=this.performAction.call(this,this.yy,this,qn,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Un)return Un;if(this._backtrack){for(var on in wt)this[on]=wt[on];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Fn,qn,Un,At;this._more||(this.yytext="",this.match="");for(var wt=this._currentRules(),on=0;onqn[0].length)){if(qn=Un,At=on,this.options.backtrack_lexer){if(Fn=this.test_match(Un,wt[on]),Fn!==!1)return Fn;if(this._backtrack){qn=!1;continue}else return!1}else if(!this.options.flex)break}return qn?(Fn=this.test_match(qn,wt[At]),Fn!==!1?Fn:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var qn=this.next();return qn||this.lex()},begin:function(qn){this.conditionStack.push(qn)},popState:function(){var qn=this.conditionStack.length-1;return qn>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(qn){return qn=this.conditionStack.length-1-Math.abs(qn||0),qn>=0?this.conditionStack[qn]:"INITIAL"},pushState:function(qn){this.begin(qn)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(qn,Un,At,wt){switch(At){case 0:return 6;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 22;case 5:return 23;case 6:return this.begin("acc_title"),24;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),26;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:break;case 14:c;break;case 15:return 12;case 16:break;case 17:return 11;case 18:return 15;case 19:return 16;case 20:return 17;case 21:return 18;case 22:return this.begin("person_ext"),45;case 23:return this.begin("person"),44;case 24:return this.begin("system_ext_queue"),51;case 25:return this.begin("system_ext_db"),50;case 26:return this.begin("system_ext"),49;case 27:return this.begin("system_queue"),48;case 28:return this.begin("system_db"),47;case 29:return this.begin("system"),46;case 30:return this.begin("boundary"),37;case 31:return this.begin("enterprise_boundary"),34;case 32:return this.begin("system_boundary"),36;case 33:return this.begin("container_ext_queue"),57;case 34:return this.begin("container_ext_db"),56;case 35:return this.begin("container_ext"),55;case 36:return this.begin("container_queue"),54;case 37:return this.begin("container_db"),53;case 38:return this.begin("container"),52;case 39:return this.begin("container_boundary"),38;case 40:return this.begin("component_ext_queue"),63;case 41:return this.begin("component_ext_db"),62;case 42:return this.begin("component_ext"),61;case 43:return this.begin("component_queue"),60;case 44:return this.begin("component_db"),59;case 45:return this.begin("component"),58;case 46:return this.begin("node"),39;case 47:return this.begin("node"),39;case 48:return this.begin("node_l"),40;case 49:return this.begin("node_r"),41;case 50:return this.begin("rel"),64;case 51:return this.begin("birel"),65;case 52:return this.begin("rel_u"),66;case 53:return this.begin("rel_u"),66;case 54:return this.begin("rel_d"),67;case 55:return this.begin("rel_d"),67;case 56:return this.begin("rel_l"),68;case 57:return this.begin("rel_l"),68;case 58:return this.begin("rel_r"),69;case 59:return this.begin("rel_r"),69;case 60:return this.begin("rel_b"),70;case 61:return this.begin("rel_index"),71;case 62:return this.begin("update_el_style"),72;case 63:return this.begin("update_rel_style"),73;case 64:return this.begin("update_layout_config"),74;case 65:return"EOF_IN_STRUCT";case 66:return this.begin("attribute"),"ATTRIBUTE_EMPTY";case 67:this.begin("attribute");break;case 68:this.popState(),this.popState();break;case 69:return 80;case 70:break;case 71:return 80;case 72:this.begin("string");break;case 73:this.popState();break;case 74:return"STR";case 75:this.begin("string_kv");break;case 76:return this.begin("string_kv_key"),"STR_KEY";case 77:this.popState(),this.begin("string_kv_value");break;case 78:return"STR_VALUE";case 79:this.popState(),this.popState();break;case 80:return"STR";case 81:return"LBRACE";case 82:return"RBRACE";case 83:return"SPACE";case 84:return"EOL";case 85:return 14}},rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:title\s[^#\n;]+)/,/^(?:accDescription\s[^#\n;]+)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:C4Context\b)/,/^(?:C4Container\b)/,/^(?:C4Component\b)/,/^(?:C4Dynamic\b)/,/^(?:C4Deployment\b)/,/^(?:Person_Ext\b)/,/^(?:Person\b)/,/^(?:SystemQueue_Ext\b)/,/^(?:SystemDb_Ext\b)/,/^(?:System_Ext\b)/,/^(?:SystemQueue\b)/,/^(?:SystemDb\b)/,/^(?:System\b)/,/^(?:Boundary\b)/,/^(?:Enterprise_Boundary\b)/,/^(?:System_Boundary\b)/,/^(?:ContainerQueue_Ext\b)/,/^(?:ContainerDb_Ext\b)/,/^(?:Container_Ext\b)/,/^(?:ContainerQueue\b)/,/^(?:ContainerDb\b)/,/^(?:Container\b)/,/^(?:Container_Boundary\b)/,/^(?:ComponentQueue_Ext\b)/,/^(?:ComponentDb_Ext\b)/,/^(?:Component_Ext\b)/,/^(?:ComponentQueue\b)/,/^(?:ComponentDb\b)/,/^(?:Component\b)/,/^(?:Deployment_Node\b)/,/^(?:Node\b)/,/^(?:Node_L\b)/,/^(?:Node_R\b)/,/^(?:Rel\b)/,/^(?:BiRel\b)/,/^(?:Rel_Up\b)/,/^(?:Rel_U\b)/,/^(?:Rel_Down\b)/,/^(?:Rel_D\b)/,/^(?:Rel_Left\b)/,/^(?:Rel_L\b)/,/^(?:Rel_Right\b)/,/^(?:Rel_R\b)/,/^(?:Rel_Back\b)/,/^(?:RelIndex\b)/,/^(?:UpdateElementStyle\b)/,/^(?:UpdateRelStyle\b)/,/^(?:UpdateLayoutConfig\b)/,/^(?:$)/,/^(?:[(][ ]*[,])/,/^(?:[(])/,/^(?:[)])/,/^(?:,,)/,/^(?:,)/,/^(?:[ ]*["]["])/,/^(?:[ ]*["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[ ]*[\$])/,/^(?:[^=]*)/,/^(?:[=][ ]*["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:[^,]+)/,/^(?:\{)/,/^(?:\})/,/^(?:[\s]+)/,/^(?:[\n\r]+)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},string_kv_value:{rules:[78,79],inclusive:!1},string_kv_key:{rules:[77],inclusive:!1},string_kv:{rules:[76],inclusive:!1},string:{rules:[73,74],inclusive:!1},attribute:{rules:[68,69,70,71,72,75,80],inclusive:!1},update_layout_config:{rules:[65,66,67,68],inclusive:!1},update_rel_style:{rules:[65,66,67,68],inclusive:!1},update_el_style:{rules:[65,66,67,68],inclusive:!1},rel_b:{rules:[65,66,67,68],inclusive:!1},rel_r:{rules:[65,66,67,68],inclusive:!1},rel_l:{rules:[65,66,67,68],inclusive:!1},rel_d:{rules:[65,66,67,68],inclusive:!1},rel_u:{rules:[65,66,67,68],inclusive:!1},rel_bi:{rules:[],inclusive:!1},rel:{rules:[65,66,67,68],inclusive:!1},node_r:{rules:[65,66,67,68],inclusive:!1},node_l:{rules:[65,66,67,68],inclusive:!1},node:{rules:[65,66,67,68],inclusive:!1},index:{rules:[],inclusive:!1},rel_index:{rules:[65,66,67,68],inclusive:!1},component_ext_queue:{rules:[],inclusive:!1},component_ext_db:{rules:[65,66,67,68],inclusive:!1},component_ext:{rules:[65,66,67,68],inclusive:!1},component_queue:{rules:[65,66,67,68],inclusive:!1},component_db:{rules:[65,66,67,68],inclusive:!1},component:{rules:[65,66,67,68],inclusive:!1},container_boundary:{rules:[65,66,67,68],inclusive:!1},container_ext_queue:{rules:[65,66,67,68],inclusive:!1},container_ext_db:{rules:[65,66,67,68],inclusive:!1},container_ext:{rules:[65,66,67,68],inclusive:!1},container_queue:{rules:[65,66,67,68],inclusive:!1},container_db:{rules:[65,66,67,68],inclusive:!1},container:{rules:[65,66,67,68],inclusive:!1},birel:{rules:[65,66,67,68],inclusive:!1},system_boundary:{rules:[65,66,67,68],inclusive:!1},enterprise_boundary:{rules:[65,66,67,68],inclusive:!1},boundary:{rules:[65,66,67,68],inclusive:!1},system_ext_queue:{rules:[65,66,67,68],inclusive:!1},system_ext_db:{rules:[65,66,67,68],inclusive:!1},system_ext:{rules:[65,66,67,68],inclusive:!1},system_queue:{rules:[65,66,67,68],inclusive:!1},system_db:{rules:[65,66,67,68],inclusive:!1},system:{rules:[65,66,67,68],inclusive:!1},person_ext:{rules:[65,66,67,68],inclusive:!1},person:{rules:[65,66,67,68],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,81,82,83,84,85],inclusive:!0}}};return Tr}();Ma.lexer=zs;function ao(){this.yy={}}return ao.prototype=Ma,Ma.Parser=ao,new ao}();CQ.parser=CQ;const DVt=CQ;let R3=[],M9=[""],Op="global",j3="",Q4=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],pR=[],Rbe="",jbe=!1,SQ=4,_Q=2;var xqe;const IVt=function(){return xqe},OVt=function(i){xqe=Yf(i,qt())},NVt=function(i,s,u,d,p,v,b,y,T){if(i==null||s===void 0||s===null||u===void 0||u===null||d===void 0||d===null)return;let _={};const A=pR.find(P=>P.from===s&&P.to===u);if(A?_=A:pR.push(_),_.type=i,_.from=s,_.to=u,_.label={text:d},p==null)_.techn={text:""};else if(typeof p=="object"){let[P,R]=Object.entries(p)[0];_[P]={text:R}}else _.techn={text:p};if(v==null)_.descr={text:""};else if(typeof v=="object"){let[P,R]=Object.entries(v)[0];_[P]={text:R}}else _.descr={text:v};if(typeof b=="object"){let[P,R]=Object.entries(b)[0];_[P]=R}else _.sprite=b;if(typeof y=="object"){let[P,R]=Object.entries(y)[0];_[P]=R}else _.tags=y;if(typeof T=="object"){let[P,R]=Object.entries(T)[0];_[P]=R}else _.link=T;_.wrap=D9()},PVt=function(i,s,u,d,p,v,b){if(s===null||u===null)return;let y={};const T=R3.find(_=>_.alias===s);if(T&&s===T.alias?y=T:(y.alias=s,R3.push(y)),u==null?y.label={text:""}:y.label={text:u},d==null)y.descr={text:""};else if(typeof d=="object"){let[_,A]=Object.entries(d)[0];y[_]={text:A}}else y.descr={text:d};if(typeof p=="object"){let[_,A]=Object.entries(p)[0];y[_]=A}else y.sprite=p;if(typeof v=="object"){let[_,A]=Object.entries(v)[0];y[_]=A}else y.tags=v;if(typeof b=="object"){let[_,A]=Object.entries(b)[0];y[_]=A}else y.link=b;y.typeC4Shape={text:i},y.parentBoundary=Op,y.wrap=D9()},BVt=function(i,s,u,d,p,v,b,y){if(s===null||u===null)return;let T={};const _=R3.find(A=>A.alias===s);if(_&&s===_.alias?T=_:(T.alias=s,R3.push(T)),u==null?T.label={text:""}:T.label={text:u},d==null)T.techn={text:""};else if(typeof d=="object"){let[A,P]=Object.entries(d)[0];T[A]={text:P}}else T.techn={text:d};if(p==null)T.descr={text:""};else if(typeof p=="object"){let[A,P]=Object.entries(p)[0];T[A]={text:P}}else T.descr={text:p};if(typeof v=="object"){let[A,P]=Object.entries(v)[0];T[A]=P}else T.sprite=v;if(typeof b=="object"){let[A,P]=Object.entries(b)[0];T[A]=P}else T.tags=b;if(typeof y=="object"){let[A,P]=Object.entries(y)[0];T[A]=P}else T.link=y;T.wrap=D9(),T.typeC4Shape={text:i},T.parentBoundary=Op},FVt=function(i,s,u,d,p,v,b,y){if(s===null||u===null)return;let T={};const _=R3.find(A=>A.alias===s);if(_&&s===_.alias?T=_:(T.alias=s,R3.push(T)),u==null?T.label={text:""}:T.label={text:u},d==null)T.techn={text:""};else if(typeof d=="object"){let[A,P]=Object.entries(d)[0];T[A]={text:P}}else T.techn={text:d};if(p==null)T.descr={text:""};else if(typeof p=="object"){let[A,P]=Object.entries(p)[0];T[A]={text:P}}else T.descr={text:p};if(typeof v=="object"){let[A,P]=Object.entries(v)[0];T[A]=P}else T.sprite=v;if(typeof b=="object"){let[A,P]=Object.entries(b)[0];T[A]=P}else T.tags=b;if(typeof y=="object"){let[A,P]=Object.entries(y)[0];T[A]=P}else T.link=y;T.wrap=D9(),T.typeC4Shape={text:i},T.parentBoundary=Op},RVt=function(i,s,u,d,p){if(i===null||s===null)return;let v={};const b=Q4.find(y=>y.alias===i);if(b&&i===b.alias?v=b:(v.alias=i,Q4.push(v)),s==null?v.label={text:""}:v.label={text:s},u==null)v.type={text:"system"};else if(typeof u=="object"){let[y,T]=Object.entries(u)[0];v[y]={text:T}}else v.type={text:u};if(typeof d=="object"){let[y,T]=Object.entries(d)[0];v[y]=T}else v.tags=d;if(typeof p=="object"){let[y,T]=Object.entries(p)[0];v[y]=T}else v.link=p;v.parentBoundary=Op,v.wrap=D9(),j3=Op,Op=i,M9.push(j3)},jVt=function(i,s,u,d,p){if(i===null||s===null)return;let v={};const b=Q4.find(y=>y.alias===i);if(b&&i===b.alias?v=b:(v.alias=i,Q4.push(v)),s==null?v.label={text:""}:v.label={text:s},u==null)v.type={text:"container"};else if(typeof u=="object"){let[y,T]=Object.entries(u)[0];v[y]={text:T}}else v.type={text:u};if(typeof d=="object"){let[y,T]=Object.entries(d)[0];v[y]=T}else v.tags=d;if(typeof p=="object"){let[y,T]=Object.entries(p)[0];v[y]=T}else v.link=p;v.parentBoundary=Op,v.wrap=D9(),j3=Op,Op=i,M9.push(j3)},$Vt=function(i,s,u,d,p,v,b,y){if(s===null||u===null)return;let T={};const _=Q4.find(A=>A.alias===s);if(_&&s===_.alias?T=_:(T.alias=s,Q4.push(T)),u==null?T.label={text:""}:T.label={text:u},d==null)T.type={text:"node"};else if(typeof d=="object"){let[A,P]=Object.entries(d)[0];T[A]={text:P}}else T.type={text:d};if(p==null)T.descr={text:""};else if(typeof p=="object"){let[A,P]=Object.entries(p)[0];T[A]={text:P}}else T.descr={text:p};if(typeof b=="object"){let[A,P]=Object.entries(b)[0];T[A]=P}else T.tags=b;if(typeof y=="object"){let[A,P]=Object.entries(y)[0];T[A]=P}else T.link=y;T.nodeType=i,T.parentBoundary=Op,T.wrap=D9(),j3=Op,Op=s,M9.push(j3)},zVt=function(){Op=j3,M9.pop(),j3=M9.pop(),M9.push(j3)},qVt=function(i,s,u,d,p,v,b,y,T,_,A){let P=R3.find(R=>R.alias===s);if(!(P===void 0&&(P=Q4.find(R=>R.alias===s),P===void 0))){if(u!=null)if(typeof u=="object"){let[R,F]=Object.entries(u)[0];P[R]=F}else P.bgColor=u;if(d!=null)if(typeof d=="object"){let[R,F]=Object.entries(d)[0];P[R]=F}else P.fontColor=d;if(p!=null)if(typeof p=="object"){let[R,F]=Object.entries(p)[0];P[R]=F}else P.borderColor=p;if(v!=null)if(typeof v=="object"){let[R,F]=Object.entries(v)[0];P[R]=F}else P.shadowing=v;if(b!=null)if(typeof b=="object"){let[R,F]=Object.entries(b)[0];P[R]=F}else P.shape=b;if(y!=null)if(typeof y=="object"){let[R,F]=Object.entries(y)[0];P[R]=F}else P.sprite=y;if(T!=null)if(typeof T=="object"){let[R,F]=Object.entries(T)[0];P[R]=F}else P.techn=T;if(_!=null)if(typeof _=="object"){let[R,F]=Object.entries(_)[0];P[R]=F}else P.legendText=_;if(A!=null)if(typeof A=="object"){let[R,F]=Object.entries(A)[0];P[R]=F}else P.legendSprite=A}},HVt=function(i,s,u,d,p,v,b){const y=pR.find(T=>T.from===s&&T.to===u);if(y!==void 0){if(d!=null)if(typeof d=="object"){let[T,_]=Object.entries(d)[0];y[T]=_}else y.textColor=d;if(p!=null)if(typeof p=="object"){let[T,_]=Object.entries(p)[0];y[T]=_}else y.lineColor=p;if(v!=null)if(typeof v=="object"){let[T,_]=Object.entries(v)[0];y[T]=parseInt(_)}else y.offsetX=parseInt(v);if(b!=null)if(typeof b=="object"){let[T,_]=Object.entries(b)[0];y[T]=parseInt(_)}else y.offsetY=parseInt(b)}},VVt=function(i,s,u){let d=SQ,p=_Q;if(typeof s=="object"){const v=Object.values(s)[0];d=parseInt(v)}else d=parseInt(s);if(typeof u=="object"){const v=Object.values(u)[0];p=parseInt(v)}else p=parseInt(u);d>=1&&(SQ=d),p>=1&&(_Q=p)},UVt=function(){return SQ},GVt=function(){return _Q},KVt=function(){return Op},WVt=function(){return j3},kqe=function(i){return i==null?R3:R3.filter(s=>s.parentBoundary===i)},YVt=function(i){return R3.find(s=>s.alias===i)},XVt=function(i){return Object.keys(kqe(i))},Eqe=function(i){return i==null?Q4:Q4.filter(s=>s.parentBoundary===i)},QVt=Eqe,JVt=function(){return pR},ZVt=function(){return Rbe},eUt=function(i){jbe=i},D9=function(){return jbe},$be={addPersonOrSystem:PVt,addPersonOrSystemBoundary:RVt,addContainer:BVt,addContainerBoundary:jVt,addComponent:FVt,addDeploymentNode:$Vt,popBoundaryParseStack:zVt,addRel:NVt,updateElStyle:qVt,updateRelStyle:HVt,updateLayoutConfig:VVt,autoWrap:D9,setWrap:eUt,getC4ShapeArray:kqe,getC4Shape:YVt,getC4ShapeKeys:XVt,getBoundaries:Eqe,getBoundarys:QVt,getCurrentBoundaryParse:KVt,getParentBoundaryParse:WVt,getRels:JVt,getTitle:ZVt,getC4Type:IVt,getC4ShapeInRow:UVt,getC4BoundaryInRow:GVt,setAccTitle:Bg,getAccTitle:Cp,getAccDescription:_p,setAccDescription:Sp,getConfig:()=>qt().c4,clear:function(){R3=[],Q4=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],j3="",Op="global",M9=[""],pR=[],M9=[""],Rbe="",jbe=!1,SQ=4,_Q=2},LINETYPE:{SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25},ARROWTYPE:{FILLED:0,OPEN:1},PLACEMENT:{LEFTOF:0,RIGHTOF:1,OVER:2},setTitle:function(i){Rbe=Yf(i,qt())},setC4Type:OVt},AQ=(i,s)=>{const u=i.append("rect");if(u.attr("x",s.x),u.attr("y",s.y),u.attr("fill",s.fill),u.attr("stroke",s.stroke),u.attr("width",s.width),u.attr("height",s.height),s.name&&u.attr("name",s.name),s.rx!==void 0&&u.attr("rx",s.rx),s.ry!==void 0&&u.attr("ry",s.ry),s.attrs!==void 0)for(const d in s.attrs)u.attr(d,s.attrs[d]);return s.class!==void 0&&u.attr("class",s.class),u},Tqe=(i,s)=>{const u={x:s.startx,y:s.starty,width:s.stopx-s.startx,height:s.stopy-s.starty,fill:s.fill,stroke:s.stroke,class:"rect"};AQ(i,u).lower()},tUt=(i,s)=>{const u=s.text.replace(fD," "),d=i.append("text");d.attr("x",s.x),d.attr("y",s.y),d.attr("class","legend"),d.style("text-anchor",s.anchor),s.class!==void 0&&d.attr("class",s.class);const p=d.append("tspan");return p.attr("x",s.x+s.textMargin*2),p.text(u),d},nUt=(i,s,u,d)=>{const p=i.append("image");p.attr("x",s),p.attr("y",u);const v=p9.sanitizeUrl(d);p.attr("xlink:href",v)},rUt=(i,s,u,d)=>{const p=i.append("use");p.attr("x",s),p.attr("y",u);const v=p9.sanitizeUrl(d);p.attr("xlink:href",`#${v}`)},qC=()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),zbe=()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0}),qbe=function(i,s){return AQ(i,s)},Cqe=function(i,s,u,d,p,v){const b=i.append("image");b.attr("width",s),b.attr("height",u),b.attr("x",d),b.attr("y",p);let y=v.startsWith("data:image/png;base64")?v:p9.sanitizeUrl(v);b.attr("xlink:href",y)},iUt=(i,s,u)=>{const d=i.append("g");let p=0;for(let v of s){let b=v.textColor?v.textColor:"#444444",y=v.lineColor?v.lineColor:"#444444",T=v.offsetX?parseInt(v.offsetX):0,_=v.offsetY?parseInt(v.offsetY):0,A="";if(p===0){let R=d.append("line");R.attr("x1",v.startPoint.x),R.attr("y1",v.startPoint.y),R.attr("x2",v.endPoint.x),R.attr("y2",v.endPoint.y),R.attr("stroke-width","1"),R.attr("stroke",y),R.style("fill","none"),v.type!=="rel_b"&&R.attr("marker-end","url("+A+"#arrowhead)"),(v.type==="birel"||v.type==="rel_b")&&R.attr("marker-start","url("+A+"#arrowend)"),p=-1}else{let R=d.append("path");R.attr("fill","none").attr("stroke-width","1").attr("stroke",y).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",v.startPoint.x).replaceAll("starty",v.startPoint.y).replaceAll("controlx",v.startPoint.x+(v.endPoint.x-v.startPoint.x)/2-(v.endPoint.x-v.startPoint.x)/4).replaceAll("controly",v.startPoint.y+(v.endPoint.y-v.startPoint.y)/2).replaceAll("stopx",v.endPoint.x).replaceAll("stopy",v.endPoint.y)),v.type!=="rel_b"&&R.attr("marker-end","url("+A+"#arrowhead)"),(v.type==="birel"||v.type==="rel_b")&&R.attr("marker-start","url("+A+"#arrowend)")}let P=u.messageFont();F7(u)(v.label.text,d,Math.min(v.startPoint.x,v.endPoint.x)+Math.abs(v.endPoint.x-v.startPoint.x)/2+T,Math.min(v.startPoint.y,v.endPoint.y)+Math.abs(v.endPoint.y-v.startPoint.y)/2+_,v.label.width,v.label.height,{fill:b},P),v.techn&&v.techn.text!==""&&(P=u.messageFont(),F7(u)("["+v.techn.text+"]",d,Math.min(v.startPoint.x,v.endPoint.x)+Math.abs(v.endPoint.x-v.startPoint.x)/2+T,Math.min(v.startPoint.y,v.endPoint.y)+Math.abs(v.endPoint.y-v.startPoint.y)/2+u.messageFontSize+5+_,Math.max(v.label.width,v.techn.width),v.techn.height,{fill:b,"font-style":"italic"},P))}},sUt=function(i,s,u){const d=i.append("g");let p=s.bgColor?s.bgColor:"none",v=s.borderColor?s.borderColor:"#444444",b=s.fontColor?s.fontColor:"black",y={"stroke-width":1,"stroke-dasharray":"7.0,7.0"};s.nodeType&&(y={"stroke-width":1});let T={x:s.x,y:s.y,fill:p,stroke:v,width:s.width,height:s.height,rx:2.5,ry:2.5,attrs:y};qbe(d,T);let _=u.boundaryFont();_.fontWeight="bold",_.fontSize=_.fontSize+2,_.fontColor=b,F7(u)(s.label.text,d,s.x,s.y+s.label.Y,s.width,s.height,{fill:"#444444"},_),s.type&&s.type.text!==""&&(_=u.boundaryFont(),_.fontColor=b,F7(u)(s.type.text,d,s.x,s.y+s.type.Y,s.width,s.height,{fill:"#444444"},_)),s.descr&&s.descr.text!==""&&(_=u.boundaryFont(),_.fontSize=_.fontSize-2,_.fontColor=b,F7(u)(s.descr.text,d,s.x,s.y+s.descr.Y,s.width,s.height,{fill:"#444444"},_))},aUt=function(i,s,u){var P;let d=s.bgColor?s.bgColor:u[s.typeC4Shape.text+"_bg_color"],p=s.borderColor?s.borderColor:u[s.typeC4Shape.text+"_border_color"],v=s.fontColor?s.fontColor:"#FFFFFF",b="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";switch(s.typeC4Shape.text){case"person":b="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";break;case"external_person":b="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII=";break}const y=i.append("g");y.attr("class","person-man");const T=qC();switch(s.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":T.x=s.x,T.y=s.y,T.fill=d,T.width=s.width,T.height=s.height,T.stroke=p,T.rx=2.5,T.ry=2.5,T.attrs={"stroke-width":.5},qbe(y,T);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":y.append("path").attr("fill",d).attr("stroke-width","0.5").attr("stroke",p).attr("d","Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx",s.x).replaceAll("starty",s.y).replaceAll("half",s.width/2).replaceAll("height",s.height)),y.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",p).attr("d","Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx",s.x).replaceAll("starty",s.y).replaceAll("half",s.width/2));break;case"system_queue":case"external_system_queue":case"container_queue":case"external_container_queue":case"component_queue":case"external_component_queue":y.append("path").attr("fill",d).attr("stroke-width","0.5").attr("stroke",p).attr("d","Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx",s.x).replaceAll("starty",s.y).replaceAll("width",s.width).replaceAll("half",s.height/2)),y.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",p).attr("d","Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx",s.x+s.width).replaceAll("starty",s.y).replaceAll("half",s.height/2));break}let _=pUt(u,s.typeC4Shape.text);switch(y.append("text").attr("fill",v).attr("font-family",_.fontFamily).attr("font-size",_.fontSize-2).attr("font-style","italic").attr("lengthAdjust","spacing").attr("textLength",s.typeC4Shape.width).attr("x",s.x+s.width/2-s.typeC4Shape.width/2).attr("y",s.y+s.typeC4Shape.Y).text("<<"+s.typeC4Shape.text+">>"),s.typeC4Shape.text){case"person":case"external_person":Cqe(y,48,48,s.x+s.width/2-24,s.y+s.image.Y,b);break}let A=u[s.typeC4Shape.text+"Font"]();return A.fontWeight="bold",A.fontSize=A.fontSize+2,A.fontColor=v,F7(u)(s.label.text,y,s.x,s.y+s.label.Y,s.width,s.height,{fill:v},A),A=u[s.typeC4Shape.text+"Font"](),A.fontColor=v,s.techn&&((P=s.techn)==null?void 0:P.text)!==""?F7(u)(s.techn.text,y,s.x,s.y+s.techn.Y,s.width,s.height,{fill:v,"font-style":"italic"},A):s.type&&s.type.text!==""&&F7(u)(s.type.text,y,s.x,s.y+s.type.Y,s.width,s.height,{fill:v,"font-style":"italic"},A),s.descr&&s.descr.text!==""&&(A=u.personFont(),A.fontColor=v,F7(u)(s.descr.text,y,s.x,s.y+s.descr.Y,s.width,s.height,{fill:v},A)),s.height},oUt=function(i){i.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},cUt=function(i){i.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},uUt=function(i){i.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},lUt=function(i){i.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},hUt=function(i){i.append("defs").append("marker").attr("id","arrowend").attr("refX",1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z")},fUt=function(i){i.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},dUt=function(i){i.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},gUt=function(i){const u=i.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);u.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),u.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},pUt=(i,s)=>({fontFamily:i[s+"FontFamily"],fontSize:i[s+"FontSize"],fontWeight:i[s+"FontWeight"]}),F7=function(){function i(p,v,b,y,T,_,A){const P=v.append("text").attr("x",b+T/2).attr("y",y+_/2+5).style("text-anchor","middle").text(p);d(P,A)}function s(p,v,b,y,T,_,A,P){const{fontSize:R,fontFamily:F,fontWeight:j}=P,K=p.split(ci.lineBreakRegex);for(let ee=0;ee=this.data.widthLimit||d>=this.data.widthLimit||this.nextData.cnt>Sqe)&&(u=this.nextData.startx+s.margin+$s.nextLinePaddingX,p=this.nextData.stopy+s.margin*2,this.nextData.stopx=d=u+s.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=v=p+s.height,this.nextData.cnt=1),s.x=u,s.y=p,this.updateVal(this.data,"startx",u,Math.min),this.updateVal(this.data,"starty",p,Math.min),this.updateVal(this.data,"stopx",d,Math.max),this.updateVal(this.data,"stopy",v,Math.max),this.updateVal(this.nextData,"startx",u,Math.min),this.updateVal(this.nextData,"starty",p,Math.min),this.updateVal(this.nextData,"stopx",d,Math.max),this.updateVal(this.nextData,"stopy",v,Math.max)}init(s){this.name="",this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,widthLimit:void 0},this.nextData={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,cnt:0},Vbe(s.db.getConfig())}bumpLastMargin(s){this.data.stopx+=s,this.data.stopy+=s}}const Vbe=function(i){id($s,i),i.fontFamily&&($s.personFontFamily=$s.systemFontFamily=$s.messageFontFamily=i.fontFamily),i.fontSize&&($s.personFontSize=$s.systemFontSize=$s.messageFontSize=i.fontSize),i.fontWeight&&($s.personFontWeight=$s.systemFontWeight=$s.messageFontWeight=i.fontWeight)},bR=(i,s)=>({fontFamily:i[s+"FontFamily"],fontSize:i[s+"FontSize"],fontWeight:i[s+"FontWeight"]}),DQ=i=>({fontFamily:i.boundaryFontFamily,fontSize:i.boundaryFontSize,fontWeight:i.boundaryFontWeight}),bUt=i=>({fontFamily:i.messageFontFamily,fontSize:i.messageFontSize,fontWeight:i.messageFontWeight});function $3(i,s,u,d,p){if(!s[i].width)if(u)s[i].text=vje(s[i].text,p,d),s[i].textLines=s[i].text.split(ci.lineBreakRegex).length,s[i].width=p,s[i].height=E2e(s[i].text,d);else{let v=s[i].text.split(ci.lineBreakRegex);s[i].textLines=v.length;let b=0;s[i].height=0,s[i].width=0;for(const y of v)s[i].width=Math.max(H4(y,d),s[i].width),b=E2e(y,d),s[i].height=s[i].height+b}}const Aqe=function(i,s,u){s.x=u.data.startx,s.y=u.data.starty,s.width=u.data.stopx-u.data.startx,s.height=u.data.stopy-u.data.starty,s.label.y=$s.c4ShapeMargin-35;let d=s.wrap&&$s.wrap,p=DQ($s);p.fontSize=p.fontSize+2,p.fontWeight="bold";let v=H4(s.label.text,p);$3("label",s,d,p,v),J4.drawBoundary(i,s,$s)},Lqe=function(i,s,u,d){let p=0;for(const v of d){p=0;const b=u[v];let y=bR($s,b.typeC4Shape.text);switch(y.fontSize=y.fontSize-2,b.typeC4Shape.width=H4("«"+b.typeC4Shape.text+"»",y),b.typeC4Shape.height=y.fontSize+2,b.typeC4Shape.Y=$s.c4ShapePadding,p=b.typeC4Shape.Y+b.typeC4Shape.height-4,b.image={width:0,height:0,Y:0},b.typeC4Shape.text){case"person":case"external_person":b.image.width=48,b.image.height=48,b.image.Y=p,p=b.image.Y+b.image.height;break}b.sprite&&(b.image.width=48,b.image.height=48,b.image.Y=p,p=b.image.Y+b.image.height);let T=b.wrap&&$s.wrap,_=$s.width-$s.c4ShapePadding*2,A=bR($s,b.typeC4Shape.text);if(A.fontSize=A.fontSize+2,A.fontWeight="bold",$3("label",b,T,A,_),b.label.Y=p+8,p=b.label.Y+b.label.height,b.type&&b.type.text!==""){b.type.text="["+b.type.text+"]";let F=bR($s,b.typeC4Shape.text);$3("type",b,T,F,_),b.type.Y=p+5,p=b.type.Y+b.type.height}else if(b.techn&&b.techn.text!==""){b.techn.text="["+b.techn.text+"]";let F=bR($s,b.techn.text);$3("techn",b,T,F,_),b.techn.Y=p+5,p=b.techn.Y+b.techn.height}let P=p,R=b.label.width;if(b.descr&&b.descr.text!==""){let F=bR($s,b.typeC4Shape.text);$3("descr",b,T,F,_),b.descr.Y=p+20,p=b.descr.Y+b.descr.height,R=Math.max(b.label.width,b.descr.width),P=p-b.descr.textLines*5}R=R+$s.c4ShapePadding,b.width=Math.max(b.width||$s.width,R,$s.width),b.height=Math.max(b.height||$s.height,P,$s.height),b.margin=b.margin||$s.c4ShapeMargin,i.insert(b),J4.drawC4Shape(s,b,$s)}i.bumpLastMargin($s.c4ShapeMargin)};let jv=class{constructor(s,u){this.x=s,this.y=u}},Mqe=function(i,s){let u=i.x,d=i.y,p=s.x,v=s.y,b=u+i.width/2,y=d+i.height/2,T=Math.abs(u-p),_=Math.abs(d-v),A=_/T,P=i.height/i.width,R=null;return d==v&&up?R=new jv(u,y):u==p&&dv&&(R=new jv(b,d)),u>p&&d=A?R=new jv(u,y+A*i.width/2):R=new jv(b-T/_*i.height/2,d+i.height):u=A?R=new jv(u+i.width,y+A*i.width/2):R=new jv(b+T/_*i.height/2,d+i.height):uv?P>=A?R=new jv(u+i.width,y-A*i.width/2):R=new jv(b+i.height/2*T/_,d):u>p&&d>v&&(P>=A?R=new jv(u,y-i.width/2*A):R=new jv(b-i.height/2*T/_,d)),R},mUt=function(i,s){let u={x:0,y:0};u.x=s.x+s.width/2,u.y=s.y+s.height/2;let d=Mqe(i,u);u.x=i.x+i.width/2,u.y=i.y+i.height/2;let p=Mqe(s,u);return{startPoint:d,endPoint:p}};const vUt=function(i,s,u,d){let p=0;for(let v of s){p=p+1;let b=v.wrap&&$s.wrap,y=bUt($s);d.db.getC4Type()==="C4Dynamic"&&(v.label.text=p+": "+v.label.text);let _=H4(v.label.text,y);$3("label",v,b,y,_),v.techn&&v.techn.text!==""&&(_=H4(v.techn.text,y),$3("techn",v,b,y,_)),v.descr&&v.descr.text!==""&&(_=H4(v.descr.text,y),$3("descr",v,b,y,_));let A=u(v.from),P=u(v.to),R=mUt(A,P);v.startPoint=R.startPoint,v.endPoint=R.endPoint}J4.drawRels(i,s,$s)};function Dqe(i,s,u,d,p){let v=new _qe(p);v.data.widthLimit=u.data.widthLimit/Math.min(Hbe,d.length);for(let[b,y]of d.entries()){let T=0;y.image={width:0,height:0,Y:0},y.sprite&&(y.image.width=48,y.image.height=48,y.image.Y=T,T=y.image.Y+y.image.height);let _=y.wrap&&$s.wrap,A=DQ($s);if(A.fontSize=A.fontSize+2,A.fontWeight="bold",$3("label",y,_,A,v.data.widthLimit),y.label.Y=T+8,T=y.label.Y+y.label.height,y.type&&y.type.text!==""){y.type.text="["+y.type.text+"]";let j=DQ($s);$3("type",y,_,j,v.data.widthLimit),y.type.Y=T+5,T=y.type.Y+y.type.height}if(y.descr&&y.descr.text!==""){let j=DQ($s);j.fontSize=j.fontSize-2,$3("descr",y,_,j,v.data.widthLimit),y.descr.Y=T+20,T=y.descr.Y+y.descr.height}if(b==0||b%Hbe===0){let j=u.data.startx+$s.diagramMarginX,K=u.data.stopy+$s.diagramMarginY+T;v.setData(j,j,K,K)}else{let j=v.data.stopx!==v.data.startx?v.data.stopx+$s.diagramMarginX:v.data.startx,K=v.data.starty;v.setData(j,j,K,K)}v.name=y.alias;let P=p.db.getC4ShapeArray(y.alias),R=p.db.getC4ShapeKeys(y.alias);R.length>0&&Lqe(v,i,P,R),s=y.alias;let F=p.db.getBoundarys(s);F.length>0&&Dqe(i,s,v,F,p),y.alias!=="global"&&Aqe(i,y,v),u.data.stopy=Math.max(v.data.stopy+$s.c4ShapeMargin,u.data.stopy),u.data.stopx=Math.max(v.data.stopx+$s.c4ShapeMargin,u.data.stopx),LQ=Math.max(LQ,u.data.stopx),MQ=Math.max(MQ,u.data.stopy)}}const Iqe={drawPersonOrSystemArray:Lqe,drawBoundary:Aqe,setConf:Vbe,draw:function(i,s,u,d){$s=qt().c4;const p=qt().securityLevel;let v;p==="sandbox"&&(v=Ir("#i"+s));const b=Ir(p==="sandbox"?v.nodes()[0].contentDocument.body:"body");let y=d.db;d.db.setWrap($s.wrap),Sqe=y.getC4ShapeInRow(),Hbe=y.getC4BoundaryInRow(),Xe.debug(`C:${JSON.stringify($s,null,2)}`);const T=p==="sandbox"?b.select(`[id="${s}"]`):Ir(`[id="${s}"]`);J4.insertComputerIcon(T),J4.insertDatabaseIcon(T),J4.insertClockIcon(T);let _=new _qe(d);_.setData($s.diagramMarginX,$s.diagramMarginX,$s.diagramMarginY,$s.diagramMarginY),_.data.widthLimit=screen.availWidth,LQ=$s.diagramMarginX,MQ=$s.diagramMarginY;const A=d.db.getTitle();let P=d.db.getBoundarys("");Dqe(T,"",_,P,d),J4.insertArrowHead(T),J4.insertArrowEnd(T),J4.insertArrowCrossHead(T),J4.insertArrowFilledHead(T),vUt(T,d.db.getRels(),d.db.getC4Shape,d),_.data.stopx=LQ,_.data.stopy=MQ;const R=_.data;let j=R.stopy-R.starty+2*$s.diagramMarginY;const ee=R.stopx-R.startx+2*$s.diagramMarginX;A&&T.append("text").text(A).attr("x",(R.stopx-R.startx)/2-4*$s.diagramMarginX).attr("y",R.starty+$s.diagramMarginY),Ng(T,j,ee,$s.useMaxWidth);const ie=A?60:0;T.attr("viewBox",R.startx-$s.diagramMarginX+" -"+($s.diagramMarginY+ie)+" "+ee+" "+(j+ie)),Xe.debug("models:",R)}},wUt=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:DVt,db:$be,renderer:Iqe,styles:i=>`.person { - stroke: ${i.personBorder}; - fill: ${i.personBkg}; - } -`,init:({c4:i,wrap:s})=>{Iqe.setConf(i),$be.setWrap(s)}}},Symbol.toStringTag,{value:"Module"}));var Ube=function(){var i=function($0,Wi,Bs,Qa){for(Bs=Bs||{},Qa=$0.length;Qa--;Bs[$0[Qa]]=Wi);return Bs},s=[1,4],u=[1,3],d=[1,5],p=[1,8,9,10,11,27,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],v=[2,2],b=[1,13],y=[1,14],T=[1,15],_=[1,16],A=[1,23],P=[1,25],R=[1,26],F=[1,27],j=[1,49],K=[1,48],ee=[1,29],ie=[1,30],oe=[1,31],pe=[1,32],be=[1,33],ae=[1,44],ne=[1,46],se=[1,42],de=[1,47],X=[1,43],ge=[1,50],W=[1,45],xe=[1,51],U=[1,52],Fe=[1,34],Pe=[1,35],je=[1,36],Ie=[1,37],Se=[1,57],Ce=[1,8,9,10,11,27,32,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],ke=[1,61],Ke=[1,60],Ft=[1,62],Ne=[8,9,11,73,75],gn=[1,88],_t=[1,93],Et=[1,92],Gt=[1,89],ln=[1,85],xt=[1,91],Pt=[1,87],Qe=[1,94],Dt=[1,90],kt=[1,95],On=[1,86],ht=[8,9,10,11,73,75],zr=[8,9,10,11,44,73,75],yt=[8,9,10,11,29,42,44,46,48,50,52,54,56,58,61,63,65,66,68,73,75,86,99,102,103,106,108,111,112,113],ji=[8,9,11,42,58,73,75,86,99,102,103,106,108,111,112,113],xi=[42,58,86,99,102,103,106,108,111,112,113],Ma=[1,121],zs=[1,120],ao=[1,128],Tr=[1,142],Fn=[1,143],qn=[1,144],Un=[1,145],At=[1,130],wt=[1,132],on=[1,136],fn=[1,137],An=[1,138],oo=[1,139],jo=[1,140],$o=[1,141],Pa=[1,146],wo=[1,147],_s=[1,126],tl=[1,127],da=[1,134],j0=[1,129],pm=[1,133],Ml=[1,131],Xc=[8,9,10,11,27,32,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],Bc=[1,149],ja=[8,9,11],Ou=[8,9,10,11,14,42,58,86,102,103,106,108,111,112,113],Sa=[1,169],Po=[1,165],Fc=[1,166],xa=[1,170],Ba=[1,167],ga=[1,168],kh=[75,113,116],lu=[8,9,10,11,12,14,27,29,32,42,58,73,81,82,83,84,85,86,87,102,106,108,111,112,113],o5=[10,103],Wh=[31,47,49,51,53,55,60,62,64,65,67,69,113,114,115],od=[1,235],Gd=[1,233],cd=[1,237],Kd=[1,231],$g=[1,232],as=[1,234],wn=[1,236],Zr=[1,238],Zi=[1,255],nu=[8,9,11,103],vu=[8,9,10,11,58,81,102,103,106,107,108,109],Dl={trace:function(){},yy:{},symbols_:{error:2,start:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,NODIR:13,DIR:14,FirstStmtSeparator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,vertexStatement:20,separator:21,styleStatement:22,linkStyleStatement:23,classDefStatement:24,classStatement:25,clickStatement:26,subgraph:27,textNoTags:28,SQS:29,text:30,SQE:31,end:32,direction:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,link:39,node:40,styledVertex:41,AMP:42,vertex:43,STYLE_SEPARATOR:44,idString:45,DOUBLECIRCLESTART:46,DOUBLECIRCLEEND:47,PS:48,PE:49,"(-":50,"-)":51,STADIUMSTART:52,STADIUMEND:53,SUBROUTINESTART:54,SUBROUTINEEND:55,VERTEX_WITH_PROPS_START:56,"NODE_STRING[field]":57,COLON:58,"NODE_STRING[value]":59,PIPE:60,CYLINDERSTART:61,CYLINDEREND:62,DIAMOND_START:63,DIAMOND_STOP:64,TAGEND:65,TRAPSTART:66,TRAPEND:67,INVTRAPSTART:68,INVTRAPEND:69,linkStatement:70,arrowText:71,TESTSTR:72,START_LINK:73,edgeText:74,LINK:75,edgeTextToken:76,STR:77,MD_STR:78,textToken:79,keywords:80,STYLE:81,LINKSTYLE:82,CLASSDEF:83,CLASS:84,CLICK:85,DOWN:86,UP:87,textNoTagsToken:88,stylesOpt:89,"idString[vertex]":90,"idString[class]":91,CALLBACKNAME:92,CALLBACKARGS:93,HREF:94,LINK_TARGET:95,"STR[link]":96,"STR[tooltip]":97,alphaNum:98,DEFAULT:99,numList:100,INTERPOLATE:101,NUM:102,COMMA:103,style:104,styleComponent:105,NODE_STRING:106,UNIT:107,BRKT:108,PCT:109,idStringToken:110,MINUS:111,MULT:112,UNICODE_TEXT:113,TEXT:114,TAGSTART:115,EDGE_TEXT:116,alphaNumToken:117,direction_tb:118,direction_bt:119,direction_rl:120,direction_lr:121,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"NODIR",14:"DIR",27:"subgraph",29:"SQS",31:"SQE",32:"end",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",42:"AMP",44:"STYLE_SEPARATOR",46:"DOUBLECIRCLESTART",47:"DOUBLECIRCLEEND",48:"PS",49:"PE",50:"(-",51:"-)",52:"STADIUMSTART",53:"STADIUMEND",54:"SUBROUTINESTART",55:"SUBROUTINEEND",56:"VERTEX_WITH_PROPS_START",57:"NODE_STRING[field]",58:"COLON",59:"NODE_STRING[value]",60:"PIPE",61:"CYLINDERSTART",62:"CYLINDEREND",63:"DIAMOND_START",64:"DIAMOND_STOP",65:"TAGEND",66:"TRAPSTART",67:"TRAPEND",68:"INVTRAPSTART",69:"INVTRAPEND",72:"TESTSTR",73:"START_LINK",75:"LINK",77:"STR",78:"MD_STR",81:"STYLE",82:"LINKSTYLE",83:"CLASSDEF",84:"CLASS",85:"CLICK",86:"DOWN",87:"UP",90:"idString[vertex]",91:"idString[class]",92:"CALLBACKNAME",93:"CALLBACKARGS",94:"HREF",95:"LINK_TARGET",96:"STR[link]",97:"STR[tooltip]",99:"DEFAULT",101:"INTERPOLATE",102:"NUM",103:"COMMA",106:"NODE_STRING",107:"UNIT",108:"BRKT",109:"PCT",111:"MINUS",112:"MULT",113:"UNICODE_TEXT",114:"TEXT",115:"TAGSTART",116:"EDGE_TEXT",118:"direction_tb",119:"direction_bt",120:"direction_rl",121:"direction_lr"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,2],[4,3],[16,2],[16,1],[17,1],[17,1],[17,1],[15,1],[15,1],[15,2],[19,2],[19,2],[19,1],[19,1],[18,2],[18,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,6],[7,4],[7,1],[7,2],[7,2],[7,1],[21,1],[21,1],[21,1],[20,3],[20,4],[20,2],[20,1],[40,1],[40,5],[41,1],[41,3],[43,4],[43,4],[43,6],[43,4],[43,4],[43,4],[43,8],[43,4],[43,4],[43,4],[43,6],[43,4],[43,4],[43,4],[43,4],[43,4],[43,1],[39,2],[39,3],[39,3],[39,1],[39,3],[74,1],[74,2],[74,1],[74,1],[70,1],[71,3],[30,1],[30,2],[30,1],[30,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[28,1],[28,2],[28,1],[28,1],[24,5],[25,5],[26,2],[26,4],[26,3],[26,5],[26,3],[26,5],[26,5],[26,7],[26,2],[26,4],[26,2],[26,4],[26,4],[26,6],[22,5],[23,5],[23,5],[23,9],[23,9],[23,7],[23,7],[100,1],[100,3],[89,1],[89,3],[104,1],[104,2],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[79,1],[79,1],[79,1],[79,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[76,1],[76,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[45,1],[45,2],[98,1],[98,2],[33,1],[33,1],[33,1],[33,1]],performAction:function(Wi,Bs,Qa,Bi,Nu,Ot,W3){var Kt=Ot.length-1;switch(Nu){case 2:this.$=[];break;case 3:(!Array.isArray(Ot[Kt])||Ot[Kt].length>0)&&Ot[Kt-1].push(Ot[Kt]),this.$=Ot[Kt-1];break;case 4:case 176:this.$=Ot[Kt];break;case 11:Bi.setDirection("TB"),this.$="TB";break;case 12:Bi.setDirection(Ot[Kt-1]),this.$=Ot[Kt-1];break;case 27:this.$=Ot[Kt-1].nodes;break;case 28:case 29:case 30:case 31:case 32:this.$=[];break;case 33:this.$=Bi.addSubGraph(Ot[Kt-6],Ot[Kt-1],Ot[Kt-4]);break;case 34:this.$=Bi.addSubGraph(Ot[Kt-3],Ot[Kt-1],Ot[Kt-3]);break;case 35:this.$=Bi.addSubGraph(void 0,Ot[Kt-1],void 0);break;case 37:this.$=Ot[Kt].trim(),Bi.setAccTitle(this.$);break;case 38:case 39:this.$=Ot[Kt].trim(),Bi.setAccDescription(this.$);break;case 43:Bi.addLink(Ot[Kt-2].stmt,Ot[Kt],Ot[Kt-1]),this.$={stmt:Ot[Kt],nodes:Ot[Kt].concat(Ot[Kt-2].nodes)};break;case 44:Bi.addLink(Ot[Kt-3].stmt,Ot[Kt-1],Ot[Kt-2]),this.$={stmt:Ot[Kt-1],nodes:Ot[Kt-1].concat(Ot[Kt-3].nodes)};break;case 45:this.$={stmt:Ot[Kt-1],nodes:Ot[Kt-1]};break;case 46:this.$={stmt:Ot[Kt],nodes:Ot[Kt]};break;case 47:this.$=[Ot[Kt]];break;case 48:this.$=Ot[Kt-4].concat(Ot[Kt]);break;case 49:this.$=Ot[Kt];break;case 50:this.$=Ot[Kt-2],Bi.setClass(Ot[Kt-2],Ot[Kt]);break;case 51:this.$=Ot[Kt-3],Bi.addVertex(Ot[Kt-3],Ot[Kt-1],"square");break;case 52:this.$=Ot[Kt-3],Bi.addVertex(Ot[Kt-3],Ot[Kt-1],"doublecircle");break;case 53:this.$=Ot[Kt-5],Bi.addVertex(Ot[Kt-5],Ot[Kt-2],"circle");break;case 54:this.$=Ot[Kt-3],Bi.addVertex(Ot[Kt-3],Ot[Kt-1],"ellipse");break;case 55:this.$=Ot[Kt-3],Bi.addVertex(Ot[Kt-3],Ot[Kt-1],"stadium");break;case 56:this.$=Ot[Kt-3],Bi.addVertex(Ot[Kt-3],Ot[Kt-1],"subroutine");break;case 57:this.$=Ot[Kt-7],Bi.addVertex(Ot[Kt-7],Ot[Kt-1],"rect",void 0,void 0,void 0,Object.fromEntries([[Ot[Kt-5],Ot[Kt-3]]]));break;case 58:this.$=Ot[Kt-3],Bi.addVertex(Ot[Kt-3],Ot[Kt-1],"cylinder");break;case 59:this.$=Ot[Kt-3],Bi.addVertex(Ot[Kt-3],Ot[Kt-1],"round");break;case 60:this.$=Ot[Kt-3],Bi.addVertex(Ot[Kt-3],Ot[Kt-1],"diamond");break;case 61:this.$=Ot[Kt-5],Bi.addVertex(Ot[Kt-5],Ot[Kt-2],"hexagon");break;case 62:this.$=Ot[Kt-3],Bi.addVertex(Ot[Kt-3],Ot[Kt-1],"odd");break;case 63:this.$=Ot[Kt-3],Bi.addVertex(Ot[Kt-3],Ot[Kt-1],"trapezoid");break;case 64:this.$=Ot[Kt-3],Bi.addVertex(Ot[Kt-3],Ot[Kt-1],"inv_trapezoid");break;case 65:this.$=Ot[Kt-3],Bi.addVertex(Ot[Kt-3],Ot[Kt-1],"lean_right");break;case 66:this.$=Ot[Kt-3],Bi.addVertex(Ot[Kt-3],Ot[Kt-1],"lean_left");break;case 67:this.$=Ot[Kt],Bi.addVertex(Ot[Kt]);break;case 68:Ot[Kt-1].text=Ot[Kt],this.$=Ot[Kt-1];break;case 69:case 70:Ot[Kt-2].text=Ot[Kt-1],this.$=Ot[Kt-2];break;case 71:this.$=Ot[Kt];break;case 72:var z0=Bi.destructLink(Ot[Kt],Ot[Kt-2]);this.$={type:z0.type,stroke:z0.stroke,length:z0.length,text:Ot[Kt-1]};break;case 73:this.$={text:Ot[Kt],type:"text"};break;case 74:this.$={text:Ot[Kt-1].text+""+Ot[Kt],type:Ot[Kt-1].type};break;case 75:this.$={text:Ot[Kt],type:"string"};break;case 76:this.$={text:Ot[Kt],type:"markdown"};break;case 77:var z0=Bi.destructLink(Ot[Kt]);this.$={type:z0.type,stroke:z0.stroke,length:z0.length};break;case 78:this.$=Ot[Kt-1];break;case 79:this.$={text:Ot[Kt],type:"text"};break;case 80:this.$={text:Ot[Kt-1].text+""+Ot[Kt],type:Ot[Kt-1].type};break;case 81:this.$={text:Ot[Kt],type:"string"};break;case 82:case 97:this.$={text:Ot[Kt],type:"markdown"};break;case 94:this.$={text:Ot[Kt],type:"text"};break;case 95:this.$={text:Ot[Kt-1].text+""+Ot[Kt],type:Ot[Kt-1].type};break;case 96:this.$={text:Ot[Kt],type:"text"};break;case 98:this.$=Ot[Kt-4],Bi.addClass(Ot[Kt-2],Ot[Kt]);break;case 99:this.$=Ot[Kt-4],Bi.setClass(Ot[Kt-2],Ot[Kt]);break;case 100:case 108:this.$=Ot[Kt-1],Bi.setClickEvent(Ot[Kt-1],Ot[Kt]);break;case 101:case 109:this.$=Ot[Kt-3],Bi.setClickEvent(Ot[Kt-3],Ot[Kt-2]),Bi.setTooltip(Ot[Kt-3],Ot[Kt]);break;case 102:this.$=Ot[Kt-2],Bi.setClickEvent(Ot[Kt-2],Ot[Kt-1],Ot[Kt]);break;case 103:this.$=Ot[Kt-4],Bi.setClickEvent(Ot[Kt-4],Ot[Kt-3],Ot[Kt-2]),Bi.setTooltip(Ot[Kt-4],Ot[Kt]);break;case 104:this.$=Ot[Kt-2],Bi.setLink(Ot[Kt-2],Ot[Kt]);break;case 105:this.$=Ot[Kt-4],Bi.setLink(Ot[Kt-4],Ot[Kt-2]),Bi.setTooltip(Ot[Kt-4],Ot[Kt]);break;case 106:this.$=Ot[Kt-4],Bi.setLink(Ot[Kt-4],Ot[Kt-2],Ot[Kt]);break;case 107:this.$=Ot[Kt-6],Bi.setLink(Ot[Kt-6],Ot[Kt-4],Ot[Kt]),Bi.setTooltip(Ot[Kt-6],Ot[Kt-2]);break;case 110:this.$=Ot[Kt-1],Bi.setLink(Ot[Kt-1],Ot[Kt]);break;case 111:this.$=Ot[Kt-3],Bi.setLink(Ot[Kt-3],Ot[Kt-2]),Bi.setTooltip(Ot[Kt-3],Ot[Kt]);break;case 112:this.$=Ot[Kt-3],Bi.setLink(Ot[Kt-3],Ot[Kt-2],Ot[Kt]);break;case 113:this.$=Ot[Kt-5],Bi.setLink(Ot[Kt-5],Ot[Kt-4],Ot[Kt]),Bi.setTooltip(Ot[Kt-5],Ot[Kt-2]);break;case 114:this.$=Ot[Kt-4],Bi.addVertex(Ot[Kt-2],void 0,void 0,Ot[Kt]);break;case 115:this.$=Ot[Kt-4],Bi.updateLink([Ot[Kt-2]],Ot[Kt]);break;case 116:this.$=Ot[Kt-4],Bi.updateLink(Ot[Kt-2],Ot[Kt]);break;case 117:this.$=Ot[Kt-8],Bi.updateLinkInterpolate([Ot[Kt-6]],Ot[Kt-2]),Bi.updateLink([Ot[Kt-6]],Ot[Kt]);break;case 118:this.$=Ot[Kt-8],Bi.updateLinkInterpolate(Ot[Kt-6],Ot[Kt-2]),Bi.updateLink(Ot[Kt-6],Ot[Kt]);break;case 119:this.$=Ot[Kt-6],Bi.updateLinkInterpolate([Ot[Kt-4]],Ot[Kt]);break;case 120:this.$=Ot[Kt-6],Bi.updateLinkInterpolate(Ot[Kt-4],Ot[Kt]);break;case 121:case 123:this.$=[Ot[Kt]];break;case 122:case 124:Ot[Kt-2].push(Ot[Kt]),this.$=Ot[Kt-2];break;case 126:this.$=Ot[Kt-1]+Ot[Kt];break;case 174:this.$=Ot[Kt];break;case 175:this.$=Ot[Kt-1]+""+Ot[Kt];break;case 177:this.$=Ot[Kt-1]+""+Ot[Kt];break;case 178:this.$={stmt:"dir",value:"TB"};break;case 179:this.$={stmt:"dir",value:"BT"};break;case 180:this.$={stmt:"dir",value:"RL"};break;case 181:this.$={stmt:"dir",value:"LR"};break}},table:[{3:1,4:2,9:s,10:u,12:d},{1:[3]},i(p,v,{5:6}),{4:7,9:s,10:u,12:d},{4:8,9:s,10:u,12:d},{13:[1,9],14:[1,10]},{1:[2,1],6:11,7:12,8:b,9:y,10:T,11:_,20:17,22:18,23:19,24:20,25:21,26:22,27:A,33:24,34:P,36:R,38:F,40:28,41:38,42:j,43:39,45:40,58:K,81:ee,82:ie,83:oe,84:pe,85:be,86:ae,99:ne,102:se,103:de,106:X,108:ge,110:41,111:W,112:xe,113:U,118:Fe,119:Pe,120:je,121:Ie},i(p,[2,9]),i(p,[2,10]),i(p,[2,11]),{8:[1,54],9:[1,55],10:Se,15:53,18:56},i(Ce,[2,3]),i(Ce,[2,4]),i(Ce,[2,5]),i(Ce,[2,6]),i(Ce,[2,7]),i(Ce,[2,8]),{8:ke,9:Ke,11:Ft,21:58,39:59,70:63,73:[1,64],75:[1,65]},{8:ke,9:Ke,11:Ft,21:66},{8:ke,9:Ke,11:Ft,21:67},{8:ke,9:Ke,11:Ft,21:68},{8:ke,9:Ke,11:Ft,21:69},{8:ke,9:Ke,11:Ft,21:70},{8:ke,9:Ke,10:[1,71],11:Ft,21:72},i(Ce,[2,36]),{35:[1,73]},{37:[1,74]},i(Ce,[2,39]),i(Ne,[2,46],{18:75,10:Se}),{10:[1,76]},{10:[1,77]},{10:[1,78]},{10:[1,79]},{14:gn,42:_t,58:Et,77:[1,83],86:Gt,92:[1,80],94:[1,81],98:82,102:ln,103:xt,106:Pt,108:Qe,111:Dt,112:kt,113:On,117:84},i(Ce,[2,178]),i(Ce,[2,179]),i(Ce,[2,180]),i(Ce,[2,181]),i(ht,[2,47]),i(ht,[2,49],{44:[1,96]}),i(zr,[2,67],{110:109,29:[1,97],42:j,46:[1,98],48:[1,99],50:[1,100],52:[1,101],54:[1,102],56:[1,103],58:K,61:[1,104],63:[1,105],65:[1,106],66:[1,107],68:[1,108],86:ae,99:ne,102:se,103:de,106:X,108:ge,111:W,112:xe,113:U}),i(yt,[2,174]),i(yt,[2,135]),i(yt,[2,136]),i(yt,[2,137]),i(yt,[2,138]),i(yt,[2,139]),i(yt,[2,140]),i(yt,[2,141]),i(yt,[2,142]),i(yt,[2,143]),i(yt,[2,144]),i(yt,[2,145]),i(p,[2,12]),i(p,[2,18]),i(p,[2,19]),{9:[1,110]},i(ji,[2,26],{18:111,10:Se}),i(Ce,[2,27]),{40:112,41:38,42:j,43:39,45:40,58:K,86:ae,99:ne,102:se,103:de,106:X,108:ge,110:41,111:W,112:xe,113:U},i(Ce,[2,40]),i(Ce,[2,41]),i(Ce,[2,42]),i(xi,[2,71],{71:113,60:[1,115],72:[1,114]}),{74:116,76:117,77:[1,118],78:[1,119],113:Ma,116:zs},i([42,58,60,72,86,99,102,103,106,108,111,112,113],[2,77]),i(Ce,[2,28]),i(Ce,[2,29]),i(Ce,[2,30]),i(Ce,[2,31]),i(Ce,[2,32]),{10:ao,12:Tr,14:Fn,27:qn,28:122,32:Un,42:At,58:wt,73:on,77:[1,124],78:[1,125],80:135,81:fn,82:An,83:oo,84:jo,85:$o,86:Pa,87:wo,88:123,102:_s,106:tl,108:da,111:j0,112:pm,113:Ml},i(Xc,v,{5:148}),i(Ce,[2,37]),i(Ce,[2,38]),i(Ne,[2,45],{42:Bc}),{42:j,45:150,58:K,86:ae,99:ne,102:se,103:de,106:X,108:ge,110:41,111:W,112:xe,113:U},{99:[1,151],100:152,102:[1,153]},{42:j,45:154,58:K,86:ae,99:ne,102:se,103:de,106:X,108:ge,110:41,111:W,112:xe,113:U},{42:j,45:155,58:K,86:ae,99:ne,102:se,103:de,106:X,108:ge,110:41,111:W,112:xe,113:U},i(ja,[2,100],{10:[1,156],93:[1,157]}),{77:[1,158]},i(ja,[2,108],{117:160,10:[1,159],14:gn,42:_t,58:Et,86:Gt,102:ln,103:xt,106:Pt,108:Qe,111:Dt,112:kt,113:On}),i(ja,[2,110],{10:[1,161]}),i(Ou,[2,176]),i(Ou,[2,163]),i(Ou,[2,164]),i(Ou,[2,165]),i(Ou,[2,166]),i(Ou,[2,167]),i(Ou,[2,168]),i(Ou,[2,169]),i(Ou,[2,170]),i(Ou,[2,171]),i(Ou,[2,172]),i(Ou,[2,173]),{42:j,45:162,58:K,86:ae,99:ne,102:se,103:de,106:X,108:ge,110:41,111:W,112:xe,113:U},{30:163,65:Sa,77:Po,78:Fc,79:164,113:xa,114:Ba,115:ga},{30:171,65:Sa,77:Po,78:Fc,79:164,113:xa,114:Ba,115:ga},{30:173,48:[1,172],65:Sa,77:Po,78:Fc,79:164,113:xa,114:Ba,115:ga},{30:174,65:Sa,77:Po,78:Fc,79:164,113:xa,114:Ba,115:ga},{30:175,65:Sa,77:Po,78:Fc,79:164,113:xa,114:Ba,115:ga},{30:176,65:Sa,77:Po,78:Fc,79:164,113:xa,114:Ba,115:ga},{106:[1,177]},{30:178,65:Sa,77:Po,78:Fc,79:164,113:xa,114:Ba,115:ga},{30:179,63:[1,180],65:Sa,77:Po,78:Fc,79:164,113:xa,114:Ba,115:ga},{30:181,65:Sa,77:Po,78:Fc,79:164,113:xa,114:Ba,115:ga},{30:182,65:Sa,77:Po,78:Fc,79:164,113:xa,114:Ba,115:ga},{30:183,65:Sa,77:Po,78:Fc,79:164,113:xa,114:Ba,115:ga},i(yt,[2,175]),i(p,[2,20]),i(ji,[2,25]),i(Ne,[2,43],{18:184,10:Se}),i(xi,[2,68],{10:[1,185]}),{10:[1,186]},{30:187,65:Sa,77:Po,78:Fc,79:164,113:xa,114:Ba,115:ga},{75:[1,188],76:189,113:Ma,116:zs},i(kh,[2,73]),i(kh,[2,75]),i(kh,[2,76]),i(kh,[2,161]),i(kh,[2,162]),{8:ke,9:Ke,10:ao,11:Ft,12:Tr,14:Fn,21:191,27:qn,29:[1,190],32:Un,42:At,58:wt,73:on,80:135,81:fn,82:An,83:oo,84:jo,85:$o,86:Pa,87:wo,88:192,102:_s,106:tl,108:da,111:j0,112:pm,113:Ml},i(lu,[2,94]),i(lu,[2,96]),i(lu,[2,97]),i(lu,[2,150]),i(lu,[2,151]),i(lu,[2,152]),i(lu,[2,153]),i(lu,[2,154]),i(lu,[2,155]),i(lu,[2,156]),i(lu,[2,157]),i(lu,[2,158]),i(lu,[2,159]),i(lu,[2,160]),i(lu,[2,83]),i(lu,[2,84]),i(lu,[2,85]),i(lu,[2,86]),i(lu,[2,87]),i(lu,[2,88]),i(lu,[2,89]),i(lu,[2,90]),i(lu,[2,91]),i(lu,[2,92]),i(lu,[2,93]),{6:11,7:12,8:b,9:y,10:T,11:_,20:17,22:18,23:19,24:20,25:21,26:22,27:A,32:[1,193],33:24,34:P,36:R,38:F,40:28,41:38,42:j,43:39,45:40,58:K,81:ee,82:ie,83:oe,84:pe,85:be,86:ae,99:ne,102:se,103:de,106:X,108:ge,110:41,111:W,112:xe,113:U,118:Fe,119:Pe,120:je,121:Ie},{10:Se,18:194},{10:[1,195],42:j,58:K,86:ae,99:ne,102:se,103:de,106:X,108:ge,110:109,111:W,112:xe,113:U},{10:[1,196]},{10:[1,197],103:[1,198]},i(o5,[2,121]),{10:[1,199],42:j,58:K,86:ae,99:ne,102:se,103:de,106:X,108:ge,110:109,111:W,112:xe,113:U},{10:[1,200],42:j,58:K,86:ae,99:ne,102:se,103:de,106:X,108:ge,110:109,111:W,112:xe,113:U},{77:[1,201]},i(ja,[2,102],{10:[1,202]}),i(ja,[2,104],{10:[1,203]}),{77:[1,204]},i(Ou,[2,177]),{77:[1,205],95:[1,206]},i(ht,[2,50],{110:109,42:j,58:K,86:ae,99:ne,102:se,103:de,106:X,108:ge,111:W,112:xe,113:U}),{31:[1,207],65:Sa,79:208,113:xa,114:Ba,115:ga},i(Wh,[2,79]),i(Wh,[2,81]),i(Wh,[2,82]),i(Wh,[2,146]),i(Wh,[2,147]),i(Wh,[2,148]),i(Wh,[2,149]),{47:[1,209],65:Sa,79:208,113:xa,114:Ba,115:ga},{30:210,65:Sa,77:Po,78:Fc,79:164,113:xa,114:Ba,115:ga},{49:[1,211],65:Sa,79:208,113:xa,114:Ba,115:ga},{51:[1,212],65:Sa,79:208,113:xa,114:Ba,115:ga},{53:[1,213],65:Sa,79:208,113:xa,114:Ba,115:ga},{55:[1,214],65:Sa,79:208,113:xa,114:Ba,115:ga},{58:[1,215]},{62:[1,216],65:Sa,79:208,113:xa,114:Ba,115:ga},{64:[1,217],65:Sa,79:208,113:xa,114:Ba,115:ga},{30:218,65:Sa,77:Po,78:Fc,79:164,113:xa,114:Ba,115:ga},{31:[1,219],65:Sa,79:208,113:xa,114:Ba,115:ga},{65:Sa,67:[1,220],69:[1,221],79:208,113:xa,114:Ba,115:ga},{65:Sa,67:[1,223],69:[1,222],79:208,113:xa,114:Ba,115:ga},i(Ne,[2,44],{42:Bc}),i(xi,[2,70]),i(xi,[2,69]),{60:[1,224],65:Sa,79:208,113:xa,114:Ba,115:ga},i(xi,[2,72]),i(kh,[2,74]),{30:225,65:Sa,77:Po,78:Fc,79:164,113:xa,114:Ba,115:ga},i(Xc,v,{5:226}),i(lu,[2,95]),i(Ce,[2,35]),{41:227,42:j,43:39,45:40,58:K,86:ae,99:ne,102:se,103:de,106:X,108:ge,110:41,111:W,112:xe,113:U},{10:od,58:Gd,81:cd,89:228,102:Kd,104:229,105:230,106:$g,107:as,108:wn,109:Zr},{10:od,58:Gd,81:cd,89:239,101:[1,240],102:Kd,104:229,105:230,106:$g,107:as,108:wn,109:Zr},{10:od,58:Gd,81:cd,89:241,101:[1,242],102:Kd,104:229,105:230,106:$g,107:as,108:wn,109:Zr},{102:[1,243]},{10:od,58:Gd,81:cd,89:244,102:Kd,104:229,105:230,106:$g,107:as,108:wn,109:Zr},{42:j,45:245,58:K,86:ae,99:ne,102:se,103:de,106:X,108:ge,110:41,111:W,112:xe,113:U},i(ja,[2,101]),{77:[1,246]},{77:[1,247],95:[1,248]},i(ja,[2,109]),i(ja,[2,111],{10:[1,249]}),i(ja,[2,112]),i(zr,[2,51]),i(Wh,[2,80]),i(zr,[2,52]),{49:[1,250],65:Sa,79:208,113:xa,114:Ba,115:ga},i(zr,[2,59]),i(zr,[2,54]),i(zr,[2,55]),i(zr,[2,56]),{106:[1,251]},i(zr,[2,58]),i(zr,[2,60]),{64:[1,252],65:Sa,79:208,113:xa,114:Ba,115:ga},i(zr,[2,62]),i(zr,[2,63]),i(zr,[2,65]),i(zr,[2,64]),i(zr,[2,66]),i([10,42,58,86,99,102,103,106,108,111,112,113],[2,78]),{31:[1,253],65:Sa,79:208,113:xa,114:Ba,115:ga},{6:11,7:12,8:b,9:y,10:T,11:_,20:17,22:18,23:19,24:20,25:21,26:22,27:A,32:[1,254],33:24,34:P,36:R,38:F,40:28,41:38,42:j,43:39,45:40,58:K,81:ee,82:ie,83:oe,84:pe,85:be,86:ae,99:ne,102:se,103:de,106:X,108:ge,110:41,111:W,112:xe,113:U,118:Fe,119:Pe,120:je,121:Ie},i(ht,[2,48]),i(ja,[2,114],{103:Zi}),i(nu,[2,123],{105:256,10:od,58:Gd,81:cd,102:Kd,106:$g,107:as,108:wn,109:Zr}),i(vu,[2,125]),i(vu,[2,127]),i(vu,[2,128]),i(vu,[2,129]),i(vu,[2,130]),i(vu,[2,131]),i(vu,[2,132]),i(vu,[2,133]),i(vu,[2,134]),i(ja,[2,115],{103:Zi}),{10:[1,257]},i(ja,[2,116],{103:Zi}),{10:[1,258]},i(o5,[2,122]),i(ja,[2,98],{103:Zi}),i(ja,[2,99],{110:109,42:j,58:K,86:ae,99:ne,102:se,103:de,106:X,108:ge,111:W,112:xe,113:U}),i(ja,[2,103]),i(ja,[2,105],{10:[1,259]}),i(ja,[2,106]),{95:[1,260]},{49:[1,261]},{60:[1,262]},{64:[1,263]},{8:ke,9:Ke,11:Ft,21:264},i(Ce,[2,34]),{10:od,58:Gd,81:cd,102:Kd,104:265,105:230,106:$g,107:as,108:wn,109:Zr},i(vu,[2,126]),{14:gn,42:_t,58:Et,86:Gt,98:266,102:ln,103:xt,106:Pt,108:Qe,111:Dt,112:kt,113:On,117:84},{14:gn,42:_t,58:Et,86:Gt,98:267,102:ln,103:xt,106:Pt,108:Qe,111:Dt,112:kt,113:On,117:84},{95:[1,268]},i(ja,[2,113]),i(zr,[2,53]),{30:269,65:Sa,77:Po,78:Fc,79:164,113:xa,114:Ba,115:ga},i(zr,[2,61]),i(Xc,v,{5:270}),i(nu,[2,124],{105:256,10:od,58:Gd,81:cd,102:Kd,106:$g,107:as,108:wn,109:Zr}),i(ja,[2,119],{117:160,10:[1,271],14:gn,42:_t,58:Et,86:Gt,102:ln,103:xt,106:Pt,108:Qe,111:Dt,112:kt,113:On}),i(ja,[2,120],{117:160,10:[1,272],14:gn,42:_t,58:Et,86:Gt,102:ln,103:xt,106:Pt,108:Qe,111:Dt,112:kt,113:On}),i(ja,[2,107]),{31:[1,273],65:Sa,79:208,113:xa,114:Ba,115:ga},{6:11,7:12,8:b,9:y,10:T,11:_,20:17,22:18,23:19,24:20,25:21,26:22,27:A,32:[1,274],33:24,34:P,36:R,38:F,40:28,41:38,42:j,43:39,45:40,58:K,81:ee,82:ie,83:oe,84:pe,85:be,86:ae,99:ne,102:se,103:de,106:X,108:ge,110:41,111:W,112:xe,113:U,118:Fe,119:Pe,120:je,121:Ie},{10:od,58:Gd,81:cd,89:275,102:Kd,104:229,105:230,106:$g,107:as,108:wn,109:Zr},{10:od,58:Gd,81:cd,89:276,102:Kd,104:229,105:230,106:$g,107:as,108:wn,109:Zr},i(zr,[2,57]),i(Ce,[2,33]),i(ja,[2,117],{103:Zi}),i(ja,[2,118],{103:Zi})],defaultActions:{},parseError:function(Wi,Bs){if(Bs.recoverable)this.trace(Wi);else{var Qa=new Error(Wi);throw Qa.hash=Bs,Qa}},parse:function(Wi){var Bs=this,Qa=[0],Bi=[],Nu=[null],Ot=[],W3=this.table,Kt="",z0=0,Bp=0,Y3=2,$9=1,c5=Ot.slice.call(arguments,1),Eh=Object.create(this.lexer),zg={yy:{}};for(var bm in this.yy)Object.prototype.hasOwnProperty.call(this.yy,bm)&&(zg.yy[bm]=this.yy[bm]);Eh.setInput(Wi,zg.yy),zg.yy.lexer=Eh,zg.yy.parser=this,typeof Eh.yylloc>"u"&&(Eh.yylloc={});var z9=Eh.yylloc;Ot.push(z9);var mm=Eh.options&&Eh.options.ranges;typeof zg.yy.parseError=="function"?this.parseError=zg.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function u5(){var Fp;return Fp=Bi.pop()||Eh.lex()||$9,typeof Fp!="number"&&(Fp instanceof Array&&(Bi=Fp,Fp=Bi.pop()),Fp=Bs.symbols_[Fp]||Fp),Fp}for(var y1,ud,ld,q9,Vv={},Y7,G2,X7,l5;;){if(ud=Qa[Qa.length-1],this.defaultActions[ud]?ld=this.defaultActions[ud]:((y1===null||typeof y1>"u")&&(y1=u5()),ld=W3[ud]&&W3[ud][y1]),typeof ld>"u"||!ld.length||!ld[0]){var X3="";l5=[];for(Y7 in W3[ud])this.terminals_[Y7]&&Y7>Y3&&l5.push("'"+this.terminals_[Y7]+"'");Eh.showPosition?X3="Parse error on line "+(z0+1)+`: -`+Eh.showPosition()+` -Expecting `+l5.join(", ")+", got '"+(this.terminals_[y1]||y1)+"'":X3="Parse error on line "+(z0+1)+": Unexpected "+(y1==$9?"end of input":"'"+(this.terminals_[y1]||y1)+"'"),this.parseError(X3,{text:Eh.match,token:this.terminals_[y1]||y1,line:Eh.yylineno,loc:z9,expected:l5})}if(ld[0]instanceof Array&&ld.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ud+", token: "+y1);switch(ld[0]){case 1:Qa.push(y1),Nu.push(Eh.yytext),Ot.push(Eh.yylloc),Qa.push(ld[1]),y1=null,Bp=Eh.yyleng,Kt=Eh.yytext,z0=Eh.yylineno,z9=Eh.yylloc;break;case 2:if(G2=this.productions_[ld[1]][1],Vv.$=Nu[Nu.length-G2],Vv._$={first_line:Ot[Ot.length-(G2||1)].first_line,last_line:Ot[Ot.length-1].last_line,first_column:Ot[Ot.length-(G2||1)].first_column,last_column:Ot[Ot.length-1].last_column},mm&&(Vv._$.range=[Ot[Ot.length-(G2||1)].range[0],Ot[Ot.length-1].range[1]]),q9=this.performAction.apply(Vv,[Kt,Bp,z0,zg.yy,ld[1],Nu,Ot].concat(c5)),typeof q9<"u")return q9;G2&&(Qa=Qa.slice(0,-1*G2*2),Nu=Nu.slice(0,-1*G2),Ot=Ot.slice(0,-1*G2)),Qa.push(this.productions_[ld[1]][0]),Nu.push(Vv.$),Ot.push(Vv._$),X7=W3[Qa[Qa.length-2]][Qa[Qa.length-1]],Qa.push(X7);break;case 3:return!0}}return!0}},Yh=function(){var $0={EOF:1,parseError:function(Bs,Qa){if(this.yy.parser)this.yy.parser.parseError(Bs,Qa);else throw new Error(Bs)},setInput:function(Wi,Bs){return this.yy=Bs||this.yy||{},this._input=Wi,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var Wi=this._input[0];this.yytext+=Wi,this.yyleng++,this.offset++,this.match+=Wi,this.matched+=Wi;var Bs=Wi.match(/(?:\r\n?|\n).*/g);return Bs?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Wi},unput:function(Wi){var Bs=Wi.length,Qa=Wi.split(/(?:\r\n?|\n)/g);this._input=Wi+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Bs),this.offset-=Bs;var Bi=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Qa.length-1&&(this.yylineno-=Qa.length-1);var Nu=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Qa?(Qa.length===Bi.length?this.yylloc.first_column:0)+Bi[Bi.length-Qa.length].length-Qa[0].length:this.yylloc.first_column-Bs},this.options.ranges&&(this.yylloc.range=[Nu[0],Nu[0]+this.yyleng-Bs]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(Wi){this.unput(this.match.slice(Wi))},pastInput:function(){var Wi=this.matched.substr(0,this.matched.length-this.match.length);return(Wi.length>20?"...":"")+Wi.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Wi=this.match;return Wi.length<20&&(Wi+=this._input.substr(0,20-Wi.length)),(Wi.substr(0,20)+(Wi.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Wi=this.pastInput(),Bs=new Array(Wi.length+1).join("-");return Wi+this.upcomingInput()+` -`+Bs+"^"},test_match:function(Wi,Bs){var Qa,Bi,Nu;if(this.options.backtrack_lexer&&(Nu={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Nu.yylloc.range=this.yylloc.range.slice(0))),Bi=Wi[0].match(/(?:\r\n?|\n).*/g),Bi&&(this.yylineno+=Bi.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Bi?Bi[Bi.length-1].length-Bi[Bi.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Wi[0].length},this.yytext+=Wi[0],this.match+=Wi[0],this.matches=Wi,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Wi[0].length),this.matched+=Wi[0],Qa=this.performAction.call(this,this.yy,this,Bs,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Qa)return Qa;if(this._backtrack){for(var Ot in Nu)this[Ot]=Nu[Ot];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Wi,Bs,Qa,Bi;this._more||(this.yytext="",this.match="");for(var Nu=this._currentRules(),Ot=0;OtBs[0].length)){if(Bs=Qa,Bi=Ot,this.options.backtrack_lexer){if(Wi=this.test_match(Qa,Nu[Ot]),Wi!==!1)return Wi;if(this._backtrack){Bs=!1;continue}else return!1}else if(!this.options.flex)break}return Bs?(Wi=this.test_match(Bs,Nu[Bi]),Wi!==!1?Wi:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Bs=this.next();return Bs||this.lex()},begin:function(Bs){this.conditionStack.push(Bs)},popState:function(){var Bs=this.conditionStack.length-1;return Bs>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Bs){return Bs=this.conditionStack.length-1-Math.abs(Bs||0),Bs>=0?this.conditionStack[Bs]:"INITIAL"},pushState:function(Bs){this.begin(Bs)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(Bs,Qa,Bi,Nu){switch(Bi){case 0:return this.begin("acc_title"),34;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),36;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:this.begin("callbackname");break;case 8:this.popState();break;case 9:this.popState(),this.begin("callbackargs");break;case 10:return 92;case 11:this.popState();break;case 12:return 93;case 13:return"MD_STR";case 14:this.popState();break;case 15:this.begin("md_string");break;case 16:return"STR";case 17:this.popState();break;case 18:this.pushState("string");break;case 19:return 81;case 20:return 99;case 21:return 82;case 22:return 101;case 23:return 83;case 24:return 84;case 25:return 94;case 26:this.begin("click");break;case 27:this.popState();break;case 28:return 85;case 29:return Bs.lex.firstGraph()&&this.begin("dir"),12;case 30:return Bs.lex.firstGraph()&&this.begin("dir"),12;case 31:return Bs.lex.firstGraph()&&this.begin("dir"),12;case 32:return 27;case 33:return 32;case 34:return 95;case 35:return 95;case 36:return 95;case 37:return 95;case 38:return this.popState(),13;case 39:return this.popState(),14;case 40:return this.popState(),14;case 41:return this.popState(),14;case 42:return this.popState(),14;case 43:return this.popState(),14;case 44:return this.popState(),14;case 45:return this.popState(),14;case 46:return this.popState(),14;case 47:return this.popState(),14;case 48:return this.popState(),14;case 49:return 118;case 50:return 119;case 51:return 120;case 52:return 121;case 53:return 102;case 54:return 108;case 55:return 44;case 56:return 58;case 57:return 42;case 58:return 8;case 59:return 103;case 60:return 112;case 61:return this.popState(),75;case 62:return this.pushState("edgeText"),73;case 63:return 116;case 64:return this.popState(),75;case 65:return this.pushState("thickEdgeText"),73;case 66:return 116;case 67:return this.popState(),75;case 68:return this.pushState("dottedEdgeText"),73;case 69:return 116;case 70:return 75;case 71:return this.popState(),51;case 72:return"TEXT";case 73:return this.pushState("ellipseText"),50;case 74:return this.popState(),53;case 75:return this.pushState("text"),52;case 76:return this.popState(),55;case 77:return this.pushState("text"),54;case 78:return 56;case 79:return this.pushState("text"),65;case 80:return this.popState(),62;case 81:return this.pushState("text"),61;case 82:return this.popState(),47;case 83:return this.pushState("text"),46;case 84:return this.popState(),67;case 85:return this.popState(),69;case 86:return 114;case 87:return this.pushState("trapText"),66;case 88:return this.pushState("trapText"),68;case 89:return 115;case 90:return 65;case 91:return 87;case 92:return"SEP";case 93:return 86;case 94:return 112;case 95:return 108;case 96:return 42;case 97:return 106;case 98:return 111;case 99:return 113;case 100:return this.popState(),60;case 101:return this.pushState("text"),60;case 102:return this.popState(),49;case 103:return this.pushState("text"),48;case 104:return this.popState(),31;case 105:return this.pushState("text"),29;case 106:return this.popState(),64;case 107:return this.pushState("text"),63;case 108:return"TEXT";case 109:return"QUOTE";case 110:return 9;case 111:return 10;case 112:return 11}},rules:[/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["][`])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:["])/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s])/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:flowchart-elk\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:[^-]|-(?!-)+)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:[^=]|=(?!))/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:[^\.]|\.(?!))/,/^(?:\s*~~[\~]+\s*)/,/^(?:[-/\)][\)])/,/^(?:[^\(\)\[\]\{\}]|!\)+)/,/^(?:\(-)/,/^(?:\]\))/,/^(?:\(\[)/,/^(?:\]\])/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:>)/,/^(?:\)\])/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\(\(\()/,/^(?:[\\(?=\])][\]])/,/^(?:\/(?=\])\])/,/^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:\*)/,/^(?:#)/,/^(?:&)/,/^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/,/^(?:-)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\|)/,/^(?:\))/,/^(?:\()/,/^(?:\])/,/^(?:\[)/,/^(?:(\}))/,/^(?:\{)/,/^(?:[^\[\]\(\)\{\}\|\"]+)/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{callbackargs:{rules:[11,12,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},callbackname:{rules:[8,9,10,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},href:{rules:[15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},click:{rules:[15,18,27,28,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},dottedEdgeText:{rules:[15,18,67,69,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},thickEdgeText:{rules:[15,18,64,66,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},edgeText:{rules:[15,18,61,63,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},trapText:{rules:[15,18,70,73,75,77,81,83,84,85,86,87,88,101,103,105,107],inclusive:!1},ellipseText:{rules:[15,18,70,71,72,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},text:{rules:[15,18,70,73,74,75,76,77,80,81,82,83,87,88,100,101,102,103,104,105,106,107,108],inclusive:!1},vertex:{rules:[15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},dir:{rules:[15,18,38,39,40,41,42,43,44,45,46,47,48,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_descr_multiline:{rules:[5,6,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_descr:{rules:[3,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_title:{rules:[1,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},md_string:{rules:[13,14,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},string:{rules:[15,16,17,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},INITIAL:{rules:[0,2,4,7,15,18,19,20,21,22,23,24,25,26,29,30,31,32,33,34,35,36,37,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,67,68,70,73,75,77,78,79,81,83,87,88,89,90,91,92,93,94,95,96,97,98,99,101,103,105,107,109,110,111,112],inclusive:!0}}};return $0}();Dl.lexer=Yh;function w1(){this.yy={}}return w1.prototype=Dl,Dl.Parser=w1,new w1}();Ube.parser=Ube;const Gbe=Ube,yUt="flowchart-";let Oqe=0,BD=qt(),oh={},z3=[],FD={},R7=[],IQ={},OQ={},NQ=0,Kbe=!0,$v,PQ,BQ=[];const FQ=i=>ci.sanitizeText(i,BD),mR=function(i){const s=Object.keys(oh);for(const u of s)if(oh[u].id===i)return oh[u].domId;return i},Nqe=function(i,s,u,d,p,v,b={}){let y,T=i;T!==void 0&&T.trim().length!==0&&(oh[T]===void 0&&(oh[T]={id:T,labelType:"text",domId:yUt+T+"-"+Oqe,styles:[],classes:[]}),Oqe++,s!==void 0?(BD=qt(),y=FQ(s.text.trim()),oh[T].labelType=s.type,y[0]==='"'&&y[y.length-1]==='"'&&(y=y.substring(1,y.length-1)),oh[T].text=y):oh[T].text===void 0&&(oh[T].text=i),u!==void 0&&(oh[T].type=u),d!=null&&d.forEach(function(_){oh[T].styles.push(_)}),p!=null&&p.forEach(function(_){oh[T].classes.push(_)}),v!==void 0&&(oh[T].dir=v),oh[T].props===void 0?oh[T].props=b:b!==void 0&&Object.assign(oh[T].props,b))},Pqe=function(i,s,u){const v={start:i,end:s,type:void 0,text:"",labelType:"text"};Xe.info("abc78 Got edge...",v);const b=u.text;if(b!==void 0&&(v.text=FQ(b.text.trim()),v.text[0]==='"'&&v.text[v.text.length-1]==='"'&&(v.text=v.text.substring(1,v.text.length-1)),v.labelType=b.type),u!==void 0&&(v.type=u.type,v.stroke=u.stroke,v.length=u.length),(v==null?void 0:v.length)>10&&(v.length=10),z3.length<(BD.maxEdges??500))Xe.info("abc78 pushing edge..."),z3.push(v);else throw new Error(`Edge limit exceeded. ${z3.length} edges found, but the limit is ${BD.maxEdges}. +?)[ \r ]*`,DC="[\u0300-\u036F]",G4e=new RegExp(DC+"+$"),$4e="("+T$+"+)|"+(z4e+"|")+"([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]"+(DC+"*")+"|[\uD800-\uDBFF][\uDC00-\uDFFF]"+(DC+"*")+"|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5"+("|"+F4e)+("|"+B4e+")"),A4=class{static{o(this,"Lexer")}constructor(e,r){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=e,this.settings=r,this.tokenRegex=new RegExp($4e,"g"),this.catcodes={"%":14,"~":13}}setCatcode(e,r){this.catcodes[e]=r}lex(){var e=this.input,r=this.tokenRegex.lastIndex;if(r===e.length)return new Ro("EOF",new Js(this,r,r));var n=this.tokenRegex.exec(e);if(n===null||n.index!==r)throw new lt("Unexpected character: '"+e[r]+"'",new Ro(e[r],new Js(this,r,r+1)));var i=n[6]||n[3]||(n[2]?"\\ ":" ");if(this.catcodes[i]===14){var a=e.indexOf(` +`,this.tokenRegex.lastIndex);return a===-1?(this.tokenRegex.lastIndex=e.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=a+1,this.lex()}return new Ro(i,new Js(this,r,this.tokenRegex.lastIndex))}},NC=class{static{o(this,"Namespace")}constructor(e,r){e===void 0&&(e={}),r===void 0&&(r={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=r,this.builtins=e,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(this.undefStack.length===0)throw new lt("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var e=this.undefStack.pop();for(var r in e)e.hasOwnProperty(r)&&(e[r]==null?delete this.current[r]:this.current[r]=e[r])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)}get(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]}set(e,r,n){if(n===void 0&&(n=!1),n){for(var i=0;i0&&(this.undefStack[this.undefStack.length-1][e]=r)}else{var a=this.undefStack[this.undefStack.length-1];a&&!a.hasOwnProperty(e)&&(a[e]=this.current[e])}r==null?delete this.current[e]:this.current[e]=r}},V4e=h$;le("\\noexpand",function(t){var e=t.popToken();return t.isExpandable(e.text)&&(e.noexpand=!0,e.treatAsRelax=!0),{tokens:[e],numArgs:0}});le("\\expandafter",function(t){var e=t.popToken();return t.expandOnce(!0),{tokens:[e],numArgs:0}});le("\\@firstoftwo",function(t){var e=t.consumeArgs(2);return{tokens:e[0],numArgs:0}});le("\\@secondoftwo",function(t){var e=t.consumeArgs(2);return{tokens:e[1],numArgs:0}});le("\\@ifnextchar",function(t){var e=t.consumeArgs(3);t.consumeSpaces();var r=t.future();return e[0].length===1&&e[0][0].text===r.text?{tokens:e[1],numArgs:0}:{tokens:e[2],numArgs:0}});le("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}");le("\\TextOrMath",function(t){var e=t.consumeArgs(2);return t.mode==="text"?{tokens:e[0],numArgs:0}:{tokens:e[1],numArgs:0}});LG={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};le("\\char",function(t){var e=t.popToken(),r,n="";if(e.text==="'")r=8,e=t.popToken();else if(e.text==='"')r=16,e=t.popToken();else if(e.text==="`")if(e=t.popToken(),e.text[0]==="\\")n=e.text.charCodeAt(1);else{if(e.text==="EOF")throw new lt("\\char` missing argument");n=e.text.charCodeAt(0)}else r=10;if(r){if(n=LG[e.text],n==null||n>=r)throw new lt("Invalid base-"+r+" digit "+e.text);for(var i;(i=LG[t.future().text])!=null&&i{var n=t.consumeArg().tokens;if(n.length!==1)throw new lt("\\newcommand's first argument must be a macro name");var i=n[0].text,a=t.isDefined(i);if(a&&!e)throw new lt("\\newcommand{"+i+"} attempting to redefine "+(i+"; use \\renewcommand"));if(!a&&!r)throw new lt("\\renewcommand{"+i+"} when command "+i+" does not yet exist; use \\newcommand");var s=0;if(n=t.consumeArg().tokens,n.length===1&&n[0].text==="["){for(var l="",u=t.expandNextToken();u.text!=="]"&&u.text!=="EOF";)l+=u.text,u=t.expandNextToken();if(!l.match(/^\s*[0-9]+\s*$/))throw new lt("Invalid number of arguments: "+l);s=parseInt(l),n=t.consumeArg().tokens}return t.macros.set(i,{tokens:n,numArgs:s}),""},"newcommand");le("\\newcommand",t=>qC(t,!1,!0));le("\\renewcommand",t=>qC(t,!0,!1));le("\\providecommand",t=>qC(t,!0,!0));le("\\message",t=>{var e=t.consumeArgs(1)[0];return console.log(e.reverse().map(r=>r.text).join("")),""});le("\\errmessage",t=>{var e=t.consumeArgs(1)[0];return console.error(e.reverse().map(r=>r.text).join("")),""});le("\\show",t=>{var e=t.popToken(),r=e.text;return console.log(e,t.macros.get(r),gh[r],Cn.math[r],Cn.text[r]),""});le("\\bgroup","{");le("\\egroup","}");le("~","\\nobreakspace");le("\\lq","`");le("\\rq","'");le("\\aa","\\r a");le("\\AA","\\r A");le("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`\xA9}");le("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}");le("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`\xAE}");le("\u212C","\\mathscr{B}");le("\u2130","\\mathscr{E}");le("\u2131","\\mathscr{F}");le("\u210B","\\mathscr{H}");le("\u2110","\\mathscr{I}");le("\u2112","\\mathscr{L}");le("\u2133","\\mathscr{M}");le("\u211B","\\mathscr{R}");le("\u212D","\\mathfrak{C}");le("\u210C","\\mathfrak{H}");le("\u2128","\\mathfrak{Z}");le("\\Bbbk","\\Bbb{k}");le("\xB7","\\cdotp");le("\\llap","\\mathllap{\\textrm{#1}}");le("\\rlap","\\mathrlap{\\textrm{#1}}");le("\\clap","\\mathclap{\\textrm{#1}}");le("\\mathstrut","\\vphantom{(}");le("\\underbar","\\underline{\\text{#1}}");le("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}');le("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`\u2260}}");le("\\ne","\\neq");le("\u2260","\\neq");le("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`\u2209}}");le("\u2209","\\notin");le("\u2258","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`\u2258}}");le("\u2259","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}");le("\u225A","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225A}}");le("\u225B","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`\u225B}}");le("\u225D","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`\u225D}}");le("\u225E","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`\u225E}}");le("\u225F","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225F}}");le("\u27C2","\\perp");le("\u203C","\\mathclose{!\\mkern-0.8mu!}");le("\u220C","\\notni");le("\u231C","\\ulcorner");le("\u231D","\\urcorner");le("\u231E","\\llcorner");le("\u231F","\\lrcorner");le("\xA9","\\copyright");le("\xAE","\\textregistered");le("\uFE0F","\\textregistered");le("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}');le("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}');le("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}');le("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}');le("\\vdots","\\mathord{\\varvdots\\rule{0pt}{15pt}}");le("\u22EE","\\vdots");le("\\varGamma","\\mathit{\\Gamma}");le("\\varDelta","\\mathit{\\Delta}");le("\\varTheta","\\mathit{\\Theta}");le("\\varLambda","\\mathit{\\Lambda}");le("\\varXi","\\mathit{\\Xi}");le("\\varPi","\\mathit{\\Pi}");le("\\varSigma","\\mathit{\\Sigma}");le("\\varUpsilon","\\mathit{\\Upsilon}");le("\\varPhi","\\mathit{\\Phi}");le("\\varPsi","\\mathit{\\Psi}");le("\\varOmega","\\mathit{\\Omega}");le("\\substack","\\begin{subarray}{c}#1\\end{subarray}");le("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax");le("\\boxed","\\fbox{$\\displaystyle{#1}$}");le("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;");le("\\implies","\\DOTSB\\;\\Longrightarrow\\;");le("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");DG={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};le("\\dots",function(t){var e="\\dotso",r=t.expandAfterFuture().text;return r in DG?e=DG[r]:(r.slice(0,4)==="\\not"||r in Cn.math&&Jt.contains(["bin","rel"],Cn.math[r].group))&&(e="\\dotsb"),e});XC={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};le("\\dotso",function(t){var e=t.future().text;return e in XC?"\\ldots\\,":"\\ldots"});le("\\dotsc",function(t){var e=t.future().text;return e in XC&&e!==","?"\\ldots\\,":"\\ldots"});le("\\cdots",function(t){var e=t.future().text;return e in XC?"\\@cdots\\,":"\\@cdots"});le("\\dotsb","\\cdots");le("\\dotsm","\\cdots");le("\\dotsi","\\!\\cdots");le("\\dotsx","\\ldots\\,");le("\\DOTSI","\\relax");le("\\DOTSB","\\relax");le("\\DOTSX","\\relax");le("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax");le("\\,","\\tmspace+{3mu}{.1667em}");le("\\thinspace","\\,");le("\\>","\\mskip{4mu}");le("\\:","\\tmspace+{4mu}{.2222em}");le("\\medspace","\\:");le("\\;","\\tmspace+{5mu}{.2777em}");le("\\thickspace","\\;");le("\\!","\\tmspace-{3mu}{.1667em}");le("\\negthinspace","\\!");le("\\negmedspace","\\tmspace-{4mu}{.2222em}");le("\\negthickspace","\\tmspace-{5mu}{.277em}");le("\\enspace","\\kern.5em ");le("\\enskip","\\hskip.5em\\relax");le("\\quad","\\hskip1em\\relax");le("\\qquad","\\hskip2em\\relax");le("\\tag","\\@ifstar\\tag@literal\\tag@paren");le("\\tag@paren","\\tag@literal{({#1})}");le("\\tag@literal",t=>{if(t.macros.get("\\df@tag"))throw new lt("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"});le("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}");le("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)");le("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}");le("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1");le("\\newline","\\\\\\relax");le("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");k$=gt(lc["Main-Regular"][84][1]-.7*lc["Main-Regular"][65][1]);le("\\LaTeX","\\textrm{\\html@mathml{"+("L\\kern-.36em\\raisebox{"+k$+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{LaTeX}}");le("\\KaTeX","\\textrm{\\html@mathml{"+("K\\kern-.17em\\raisebox{"+k$+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{KaTeX}}");le("\\hspace","\\@ifstar\\@hspacer\\@hspace");le("\\@hspace","\\hskip #1\\relax");le("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax");le("\\ordinarycolon",":");le("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}");le("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}');le("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}');le("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}');le("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}');le("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}');le("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}');le("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}');le("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}');le("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}');le("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}');le("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}');le("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}');le("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}');le("\u2237","\\dblcolon");le("\u2239","\\eqcolon");le("\u2254","\\coloneqq");le("\u2255","\\eqqcolon");le("\u2A74","\\Coloneqq");le("\\ratio","\\vcentcolon");le("\\coloncolon","\\dblcolon");le("\\colonequals","\\coloneqq");le("\\coloncolonequals","\\Coloneqq");le("\\equalscolon","\\eqqcolon");le("\\equalscoloncolon","\\Eqqcolon");le("\\colonminus","\\coloneq");le("\\coloncolonminus","\\Coloneq");le("\\minuscolon","\\eqcolon");le("\\minuscoloncolon","\\Eqcolon");le("\\coloncolonapprox","\\Colonapprox");le("\\coloncolonsim","\\Colonsim");le("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}");le("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}");le("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}");le("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}");le("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}");le("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}");le("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}");le("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}");le("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}");le("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}");le("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}");le("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}");le("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}");le("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}");le("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}");le("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}");le("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}");le("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}");le("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}");le("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}");le("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}");le("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}");le("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}");le("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228A}");le("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2ACB}");le("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228B}");le("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2ACC}");le("\\imath","\\html@mathml{\\@imath}{\u0131}");le("\\jmath","\\html@mathml{\\@jmath}{\u0237}");le("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27E6}}");le("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27E7}}");le("\u27E6","\\llbracket");le("\u27E7","\\rrbracket");le("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}");le("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}");le("\u2983","\\lBrace");le("\u2984","\\rBrace");le("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`\u29B5}}");le("\u29B5","\\minuso");le("\\darr","\\downarrow");le("\\dArr","\\Downarrow");le("\\Darr","\\Downarrow");le("\\lang","\\langle");le("\\rang","\\rangle");le("\\uarr","\\uparrow");le("\\uArr","\\Uparrow");le("\\Uarr","\\Uparrow");le("\\N","\\mathbb{N}");le("\\R","\\mathbb{R}");le("\\Z","\\mathbb{Z}");le("\\alef","\\aleph");le("\\alefsym","\\aleph");le("\\Alpha","\\mathrm{A}");le("\\Beta","\\mathrm{B}");le("\\bull","\\bullet");le("\\Chi","\\mathrm{X}");le("\\clubs","\\clubsuit");le("\\cnums","\\mathbb{C}");le("\\Complex","\\mathbb{C}");le("\\Dagger","\\ddagger");le("\\diamonds","\\diamondsuit");le("\\empty","\\emptyset");le("\\Epsilon","\\mathrm{E}");le("\\Eta","\\mathrm{H}");le("\\exist","\\exists");le("\\harr","\\leftrightarrow");le("\\hArr","\\Leftrightarrow");le("\\Harr","\\Leftrightarrow");le("\\hearts","\\heartsuit");le("\\image","\\Im");le("\\infin","\\infty");le("\\Iota","\\mathrm{I}");le("\\isin","\\in");le("\\Kappa","\\mathrm{K}");le("\\larr","\\leftarrow");le("\\lArr","\\Leftarrow");le("\\Larr","\\Leftarrow");le("\\lrarr","\\leftrightarrow");le("\\lrArr","\\Leftrightarrow");le("\\Lrarr","\\Leftrightarrow");le("\\Mu","\\mathrm{M}");le("\\natnums","\\mathbb{N}");le("\\Nu","\\mathrm{N}");le("\\Omicron","\\mathrm{O}");le("\\plusmn","\\pm");le("\\rarr","\\rightarrow");le("\\rArr","\\Rightarrow");le("\\Rarr","\\Rightarrow");le("\\real","\\Re");le("\\reals","\\mathbb{R}");le("\\Reals","\\mathbb{R}");le("\\Rho","\\mathrm{P}");le("\\sdot","\\cdot");le("\\sect","\\S");le("\\spades","\\spadesuit");le("\\sub","\\subset");le("\\sube","\\subseteq");le("\\supe","\\supseteq");le("\\Tau","\\mathrm{T}");le("\\thetasym","\\vartheta");le("\\weierp","\\wp");le("\\Zeta","\\mathrm{Z}");le("\\argmin","\\DOTSB\\operatorname*{arg\\,min}");le("\\argmax","\\DOTSB\\operatorname*{arg\\,max}");le("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits");le("\\bra","\\mathinner{\\langle{#1}|}");le("\\ket","\\mathinner{|{#1}\\rangle}");le("\\braket","\\mathinner{\\langle{#1}\\rangle}");le("\\Bra","\\left\\langle#1\\right|");le("\\Ket","\\left|#1\\right\\rangle");E$=o(t=>e=>{var r=e.consumeArg().tokens,n=e.consumeArg().tokens,i=e.consumeArg().tokens,a=e.consumeArg().tokens,s=e.macros.get("|"),l=e.macros.get("\\|");e.macros.beginGroup();var u=o(d=>p=>{t&&(p.macros.set("|",s),i.length&&p.macros.set("\\|",l));var m=d;if(!d&&i.length){var g=p.future();g.text==="|"&&(p.popToken(),m=!0)}return{tokens:m?i:n,numArgs:0}},"midMacro");e.macros.set("|",u(!1)),i.length&&e.macros.set("\\|",u(!0));var h=e.consumeArg().tokens,f=e.expandTokens([...a,...h,...r]);return e.macros.endGroup(),{tokens:f.reverse(),numArgs:0}},"braketHelper");le("\\bra@ket",E$(!1));le("\\bra@set",E$(!0));le("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}");le("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}");le("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}");le("\\angln","{\\angl n}");le("\\blue","\\textcolor{##6495ed}{#1}");le("\\orange","\\textcolor{##ffa500}{#1}");le("\\pink","\\textcolor{##ff00af}{#1}");le("\\red","\\textcolor{##df0030}{#1}");le("\\green","\\textcolor{##28ae7b}{#1}");le("\\gray","\\textcolor{gray}{#1}");le("\\purple","\\textcolor{##9d38bd}{#1}");le("\\blueA","\\textcolor{##ccfaff}{#1}");le("\\blueB","\\textcolor{##80f6ff}{#1}");le("\\blueC","\\textcolor{##63d9ea}{#1}");le("\\blueD","\\textcolor{##11accd}{#1}");le("\\blueE","\\textcolor{##0c7f99}{#1}");le("\\tealA","\\textcolor{##94fff5}{#1}");le("\\tealB","\\textcolor{##26edd5}{#1}");le("\\tealC","\\textcolor{##01d1c1}{#1}");le("\\tealD","\\textcolor{##01a995}{#1}");le("\\tealE","\\textcolor{##208170}{#1}");le("\\greenA","\\textcolor{##b6ffb0}{#1}");le("\\greenB","\\textcolor{##8af281}{#1}");le("\\greenC","\\textcolor{##74cf70}{#1}");le("\\greenD","\\textcolor{##1fab54}{#1}");le("\\greenE","\\textcolor{##0d923f}{#1}");le("\\goldA","\\textcolor{##ffd0a9}{#1}");le("\\goldB","\\textcolor{##ffbb71}{#1}");le("\\goldC","\\textcolor{##ff9c39}{#1}");le("\\goldD","\\textcolor{##e07d10}{#1}");le("\\goldE","\\textcolor{##a75a05}{#1}");le("\\redA","\\textcolor{##fca9a9}{#1}");le("\\redB","\\textcolor{##ff8482}{#1}");le("\\redC","\\textcolor{##f9685d}{#1}");le("\\redD","\\textcolor{##e84d39}{#1}");le("\\redE","\\textcolor{##bc2612}{#1}");le("\\maroonA","\\textcolor{##ffbde0}{#1}");le("\\maroonB","\\textcolor{##ff92c6}{#1}");le("\\maroonC","\\textcolor{##ed5fa6}{#1}");le("\\maroonD","\\textcolor{##ca337c}{#1}");le("\\maroonE","\\textcolor{##9e034e}{#1}");le("\\purpleA","\\textcolor{##ddd7ff}{#1}");le("\\purpleB","\\textcolor{##c6b9fc}{#1}");le("\\purpleC","\\textcolor{##aa87ff}{#1}");le("\\purpleD","\\textcolor{##7854ab}{#1}");le("\\purpleE","\\textcolor{##543b78}{#1}");le("\\mintA","\\textcolor{##f5f9e8}{#1}");le("\\mintB","\\textcolor{##edf2df}{#1}");le("\\mintC","\\textcolor{##e0e5cc}{#1}");le("\\grayA","\\textcolor{##f6f7f7}{#1}");le("\\grayB","\\textcolor{##f0f1f2}{#1}");le("\\grayC","\\textcolor{##e3e5e6}{#1}");le("\\grayD","\\textcolor{##d6d8da}{#1}");le("\\grayE","\\textcolor{##babec2}{#1}");le("\\grayF","\\textcolor{##888d93}{#1}");le("\\grayG","\\textcolor{##626569}{#1}");le("\\grayH","\\textcolor{##3b3e40}{#1}");le("\\grayI","\\textcolor{##21242c}{#1}");le("\\kaBlue","\\textcolor{##314453}{#1}");le("\\kaGreen","\\textcolor{##71B307}{#1}");S$={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0},RC=class{static{o(this,"MacroExpander")}constructor(e,r,n){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=r,this.expansionCount=0,this.feed(e),this.macros=new NC(V4e,r.macros),this.mode=n,this.stack=[]}feed(e){this.lexer=new A4(e,this.settings)}switchMode(e){this.mode=e}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return this.stack.length===0&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(e){this.stack.push(e)}pushTokens(e){this.stack.push(...e)}scanArgument(e){var r,n,i;if(e){if(this.consumeSpaces(),this.future().text!=="[")return null;r=this.popToken(),{tokens:i,end:n}=this.consumeArg(["]"])}else({tokens:i,start:r,end:n}=this.consumeArg());return this.pushToken(new Ro("EOF",n.loc)),this.pushTokens(i),r.range(n,"")}consumeSpaces(){for(;;){var e=this.future();if(e.text===" ")this.stack.pop();else break}}consumeArg(e){var r=[],n=e&&e.length>0;n||this.consumeSpaces();var i=this.future(),a,s=0,l=0;do{if(a=this.popToken(),r.push(a),a.text==="{")++s;else if(a.text==="}"){if(--s,s===-1)throw new lt("Extra }",a)}else if(a.text==="EOF")throw new lt("Unexpected end of input in a macro argument, expected '"+(e&&n?e[l]:"}")+"'",a);if(e&&n)if((s===0||s===1&&e[l]==="{")&&a.text===e[l]){if(++l,l===e.length){r.splice(-l,l);break}}else l=0}while(s!==0||n);return i.text==="{"&&r[r.length-1].text==="}"&&(r.pop(),r.shift()),r.reverse(),{tokens:r,start:i,end:a}}consumeArgs(e,r){if(r){if(r.length!==e+1)throw new lt("The length of delimiters doesn't match the number of args!");for(var n=r[0],i=0;ithis.settings.maxExpand)throw new lt("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(e){var r=this.popToken(),n=r.text,i=r.noexpand?null:this._getExpansion(n);if(i==null||e&&i.unexpandable){if(e&&i==null&&n[0]==="\\"&&!this.isDefined(n))throw new lt("Undefined control sequence: "+n);return this.pushToken(r),!1}this.countExpansion(1);var a=i.tokens,s=this.consumeArgs(i.numArgs,i.delimiters);if(i.numArgs){a=a.slice();for(var l=a.length-1;l>=0;--l){var u=a[l];if(u.text==="#"){if(l===0)throw new lt("Incomplete placeholder at end of macro body",u);if(u=a[--l],u.text==="#")a.splice(l+1,1);else if(/^[1-9]$/.test(u.text))a.splice(l,2,...s[+u.text-1]);else throw new lt("Not a valid argument number",u)}}}return this.pushTokens(a),a.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(this.expandOnce()===!1){var e=this.stack.pop();return e.treatAsRelax&&(e.text="\\relax"),e}throw new Error}expandMacro(e){return this.macros.has(e)?this.expandTokens([new Ro(e)]):void 0}expandTokens(e){var r=[],n=this.stack.length;for(this.pushTokens(e);this.stack.length>n;)if(this.expandOnce(!0)===!1){var i=this.stack.pop();i.treatAsRelax&&(i.noexpand=!1,i.treatAsRelax=!1),r.push(i)}return this.countExpansion(r.length),r}expandMacroAsText(e){var r=this.expandMacro(e);return r&&r.map(n=>n.text).join("")}_getExpansion(e){var r=this.macros.get(e);if(r==null)return r;if(e.length===1){var n=this.lexer.catcodes[e];if(n!=null&&n!==13)return}var i=typeof r=="function"?r(this):r;if(typeof i=="string"){var a=0;if(i.indexOf("#")!==-1)for(var s=i.replace(/##/g,"");s.indexOf("#"+(a+1))!==-1;)++a;for(var l=new A4(i,this.settings),u=[],h=l.lex();h.text!=="EOF";)u.push(h),h=l.lex();u.reverse();var f={tokens:u,numArgs:a};return f}return i}isDefined(e){return this.macros.has(e)||gh.hasOwnProperty(e)||Cn.math.hasOwnProperty(e)||Cn.text.hasOwnProperty(e)||S$.hasOwnProperty(e)}isExpandable(e){var r=this.macros.get(e);return r!=null?typeof r=="string"||typeof r=="function"||!r.unexpandable:gh.hasOwnProperty(e)&&!gh[e].primitive}},NG=/^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/,v4=Object.freeze({"\u208A":"+","\u208B":"-","\u208C":"=","\u208D":"(","\u208E":")","\u2080":"0","\u2081":"1","\u2082":"2","\u2083":"3","\u2084":"4","\u2085":"5","\u2086":"6","\u2087":"7","\u2088":"8","\u2089":"9","\u2090":"a","\u2091":"e","\u2095":"h","\u1D62":"i","\u2C7C":"j","\u2096":"k","\u2097":"l","\u2098":"m","\u2099":"n","\u2092":"o","\u209A":"p","\u1D63":"r","\u209B":"s","\u209C":"t","\u1D64":"u","\u1D65":"v","\u2093":"x","\u1D66":"\u03B2","\u1D67":"\u03B3","\u1D68":"\u03C1","\u1D69":"\u03D5","\u1D6A":"\u03C7","\u207A":"+","\u207B":"-","\u207C":"=","\u207D":"(","\u207E":")","\u2070":"0","\xB9":"1","\xB2":"2","\xB3":"3","\u2074":"4","\u2075":"5","\u2076":"6","\u2077":"7","\u2078":"8","\u2079":"9","\u1D2C":"A","\u1D2E":"B","\u1D30":"D","\u1D31":"E","\u1D33":"G","\u1D34":"H","\u1D35":"I","\u1D36":"J","\u1D37":"K","\u1D38":"L","\u1D39":"M","\u1D3A":"N","\u1D3C":"O","\u1D3E":"P","\u1D3F":"R","\u1D40":"T","\u1D41":"U","\u2C7D":"V","\u1D42":"W","\u1D43":"a","\u1D47":"b","\u1D9C":"c","\u1D48":"d","\u1D49":"e","\u1DA0":"f","\u1D4D":"g",\u02B0:"h","\u2071":"i",\u02B2:"j","\u1D4F":"k",\u02E1:"l","\u1D50":"m",\u207F:"n","\u1D52":"o","\u1D56":"p",\u02B3:"r",\u02E2:"s","\u1D57":"t","\u1D58":"u","\u1D5B":"v",\u02B7:"w",\u02E3:"x",\u02B8:"y","\u1DBB":"z","\u1D5D":"\u03B2","\u1D5E":"\u03B3","\u1D5F":"\u03B4","\u1D60":"\u03D5","\u1D61":"\u03C7","\u1DBF":"\u03B8"}),bC={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030C":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030A":{text:"\\r",math:"\\mathring"},"\u030B":{text:"\\H"},"\u0327":{text:"\\c"}},RG={\u00E1:"a\u0301",\u00E0:"a\u0300",\u00E4:"a\u0308",\u01DF:"a\u0308\u0304",\u00E3:"a\u0303",\u0101:"a\u0304",\u0103:"a\u0306",\u1EAF:"a\u0306\u0301",\u1EB1:"a\u0306\u0300",\u1EB5:"a\u0306\u0303",\u01CE:"a\u030C",\u00E2:"a\u0302",\u1EA5:"a\u0302\u0301",\u1EA7:"a\u0302\u0300",\u1EAB:"a\u0302\u0303",\u0227:"a\u0307",\u01E1:"a\u0307\u0304",\u00E5:"a\u030A",\u01FB:"a\u030A\u0301",\u1E03:"b\u0307",\u0107:"c\u0301",\u1E09:"c\u0327\u0301",\u010D:"c\u030C",\u0109:"c\u0302",\u010B:"c\u0307",\u00E7:"c\u0327",\u010F:"d\u030C",\u1E0B:"d\u0307",\u1E11:"d\u0327",\u00E9:"e\u0301",\u00E8:"e\u0300",\u00EB:"e\u0308",\u1EBD:"e\u0303",\u0113:"e\u0304",\u1E17:"e\u0304\u0301",\u1E15:"e\u0304\u0300",\u0115:"e\u0306",\u1E1D:"e\u0327\u0306",\u011B:"e\u030C",\u00EA:"e\u0302",\u1EBF:"e\u0302\u0301",\u1EC1:"e\u0302\u0300",\u1EC5:"e\u0302\u0303",\u0117:"e\u0307",\u0229:"e\u0327",\u1E1F:"f\u0307",\u01F5:"g\u0301",\u1E21:"g\u0304",\u011F:"g\u0306",\u01E7:"g\u030C",\u011D:"g\u0302",\u0121:"g\u0307",\u0123:"g\u0327",\u1E27:"h\u0308",\u021F:"h\u030C",\u0125:"h\u0302",\u1E23:"h\u0307",\u1E29:"h\u0327",\u00ED:"i\u0301",\u00EC:"i\u0300",\u00EF:"i\u0308",\u1E2F:"i\u0308\u0301",\u0129:"i\u0303",\u012B:"i\u0304",\u012D:"i\u0306",\u01D0:"i\u030C",\u00EE:"i\u0302",\u01F0:"j\u030C",\u0135:"j\u0302",\u1E31:"k\u0301",\u01E9:"k\u030C",\u0137:"k\u0327",\u013A:"l\u0301",\u013E:"l\u030C",\u013C:"l\u0327",\u1E3F:"m\u0301",\u1E41:"m\u0307",\u0144:"n\u0301",\u01F9:"n\u0300",\u00F1:"n\u0303",\u0148:"n\u030C",\u1E45:"n\u0307",\u0146:"n\u0327",\u00F3:"o\u0301",\u00F2:"o\u0300",\u00F6:"o\u0308",\u022B:"o\u0308\u0304",\u00F5:"o\u0303",\u1E4D:"o\u0303\u0301",\u1E4F:"o\u0303\u0308",\u022D:"o\u0303\u0304",\u014D:"o\u0304",\u1E53:"o\u0304\u0301",\u1E51:"o\u0304\u0300",\u014F:"o\u0306",\u01D2:"o\u030C",\u00F4:"o\u0302",\u1ED1:"o\u0302\u0301",\u1ED3:"o\u0302\u0300",\u1ED7:"o\u0302\u0303",\u022F:"o\u0307",\u0231:"o\u0307\u0304",\u0151:"o\u030B",\u1E55:"p\u0301",\u1E57:"p\u0307",\u0155:"r\u0301",\u0159:"r\u030C",\u1E59:"r\u0307",\u0157:"r\u0327",\u015B:"s\u0301",\u1E65:"s\u0301\u0307",\u0161:"s\u030C",\u1E67:"s\u030C\u0307",\u015D:"s\u0302",\u1E61:"s\u0307",\u015F:"s\u0327",\u1E97:"t\u0308",\u0165:"t\u030C",\u1E6B:"t\u0307",\u0163:"t\u0327",\u00FA:"u\u0301",\u00F9:"u\u0300",\u00FC:"u\u0308",\u01D8:"u\u0308\u0301",\u01DC:"u\u0308\u0300",\u01D6:"u\u0308\u0304",\u01DA:"u\u0308\u030C",\u0169:"u\u0303",\u1E79:"u\u0303\u0301",\u016B:"u\u0304",\u1E7B:"u\u0304\u0308",\u016D:"u\u0306",\u01D4:"u\u030C",\u00FB:"u\u0302",\u016F:"u\u030A",\u0171:"u\u030B",\u1E7D:"v\u0303",\u1E83:"w\u0301",\u1E81:"w\u0300",\u1E85:"w\u0308",\u0175:"w\u0302",\u1E87:"w\u0307",\u1E98:"w\u030A",\u1E8D:"x\u0308",\u1E8B:"x\u0307",\u00FD:"y\u0301",\u1EF3:"y\u0300",\u00FF:"y\u0308",\u1EF9:"y\u0303",\u0233:"y\u0304",\u0177:"y\u0302",\u1E8F:"y\u0307",\u1E99:"y\u030A",\u017A:"z\u0301",\u017E:"z\u030C",\u1E91:"z\u0302",\u017C:"z\u0307",\u00C1:"A\u0301",\u00C0:"A\u0300",\u00C4:"A\u0308",\u01DE:"A\u0308\u0304",\u00C3:"A\u0303",\u0100:"A\u0304",\u0102:"A\u0306",\u1EAE:"A\u0306\u0301",\u1EB0:"A\u0306\u0300",\u1EB4:"A\u0306\u0303",\u01CD:"A\u030C",\u00C2:"A\u0302",\u1EA4:"A\u0302\u0301",\u1EA6:"A\u0302\u0300",\u1EAA:"A\u0302\u0303",\u0226:"A\u0307",\u01E0:"A\u0307\u0304",\u00C5:"A\u030A",\u01FA:"A\u030A\u0301",\u1E02:"B\u0307",\u0106:"C\u0301",\u1E08:"C\u0327\u0301",\u010C:"C\u030C",\u0108:"C\u0302",\u010A:"C\u0307",\u00C7:"C\u0327",\u010E:"D\u030C",\u1E0A:"D\u0307",\u1E10:"D\u0327",\u00C9:"E\u0301",\u00C8:"E\u0300",\u00CB:"E\u0308",\u1EBC:"E\u0303",\u0112:"E\u0304",\u1E16:"E\u0304\u0301",\u1E14:"E\u0304\u0300",\u0114:"E\u0306",\u1E1C:"E\u0327\u0306",\u011A:"E\u030C",\u00CA:"E\u0302",\u1EBE:"E\u0302\u0301",\u1EC0:"E\u0302\u0300",\u1EC4:"E\u0302\u0303",\u0116:"E\u0307",\u0228:"E\u0327",\u1E1E:"F\u0307",\u01F4:"G\u0301",\u1E20:"G\u0304",\u011E:"G\u0306",\u01E6:"G\u030C",\u011C:"G\u0302",\u0120:"G\u0307",\u0122:"G\u0327",\u1E26:"H\u0308",\u021E:"H\u030C",\u0124:"H\u0302",\u1E22:"H\u0307",\u1E28:"H\u0327",\u00CD:"I\u0301",\u00CC:"I\u0300",\u00CF:"I\u0308",\u1E2E:"I\u0308\u0301",\u0128:"I\u0303",\u012A:"I\u0304",\u012C:"I\u0306",\u01CF:"I\u030C",\u00CE:"I\u0302",\u0130:"I\u0307",\u0134:"J\u0302",\u1E30:"K\u0301",\u01E8:"K\u030C",\u0136:"K\u0327",\u0139:"L\u0301",\u013D:"L\u030C",\u013B:"L\u0327",\u1E3E:"M\u0301",\u1E40:"M\u0307",\u0143:"N\u0301",\u01F8:"N\u0300",\u00D1:"N\u0303",\u0147:"N\u030C",\u1E44:"N\u0307",\u0145:"N\u0327",\u00D3:"O\u0301",\u00D2:"O\u0300",\u00D6:"O\u0308",\u022A:"O\u0308\u0304",\u00D5:"O\u0303",\u1E4C:"O\u0303\u0301",\u1E4E:"O\u0303\u0308",\u022C:"O\u0303\u0304",\u014C:"O\u0304",\u1E52:"O\u0304\u0301",\u1E50:"O\u0304\u0300",\u014E:"O\u0306",\u01D1:"O\u030C",\u00D4:"O\u0302",\u1ED0:"O\u0302\u0301",\u1ED2:"O\u0302\u0300",\u1ED6:"O\u0302\u0303",\u022E:"O\u0307",\u0230:"O\u0307\u0304",\u0150:"O\u030B",\u1E54:"P\u0301",\u1E56:"P\u0307",\u0154:"R\u0301",\u0158:"R\u030C",\u1E58:"R\u0307",\u0156:"R\u0327",\u015A:"S\u0301",\u1E64:"S\u0301\u0307",\u0160:"S\u030C",\u1E66:"S\u030C\u0307",\u015C:"S\u0302",\u1E60:"S\u0307",\u015E:"S\u0327",\u0164:"T\u030C",\u1E6A:"T\u0307",\u0162:"T\u0327",\u00DA:"U\u0301",\u00D9:"U\u0300",\u00DC:"U\u0308",\u01D7:"U\u0308\u0301",\u01DB:"U\u0308\u0300",\u01D5:"U\u0308\u0304",\u01D9:"U\u0308\u030C",\u0168:"U\u0303",\u1E78:"U\u0303\u0301",\u016A:"U\u0304",\u1E7A:"U\u0304\u0308",\u016C:"U\u0306",\u01D3:"U\u030C",\u00DB:"U\u0302",\u016E:"U\u030A",\u0170:"U\u030B",\u1E7C:"V\u0303",\u1E82:"W\u0301",\u1E80:"W\u0300",\u1E84:"W\u0308",\u0174:"W\u0302",\u1E86:"W\u0307",\u1E8C:"X\u0308",\u1E8A:"X\u0307",\u00DD:"Y\u0301",\u1EF2:"Y\u0300",\u0178:"Y\u0308",\u1EF8:"Y\u0303",\u0232:"Y\u0304",\u0176:"Y\u0302",\u1E8E:"Y\u0307",\u0179:"Z\u0301",\u017D:"Z\u030C",\u1E90:"Z\u0302",\u017B:"Z\u0307",\u03AC:"\u03B1\u0301",\u1F70:"\u03B1\u0300",\u1FB1:"\u03B1\u0304",\u1FB0:"\u03B1\u0306",\u03AD:"\u03B5\u0301",\u1F72:"\u03B5\u0300",\u03AE:"\u03B7\u0301",\u1F74:"\u03B7\u0300",\u03AF:"\u03B9\u0301",\u1F76:"\u03B9\u0300",\u03CA:"\u03B9\u0308",\u0390:"\u03B9\u0308\u0301",\u1FD2:"\u03B9\u0308\u0300",\u1FD1:"\u03B9\u0304",\u1FD0:"\u03B9\u0306",\u03CC:"\u03BF\u0301",\u1F78:"\u03BF\u0300",\u03CD:"\u03C5\u0301",\u1F7A:"\u03C5\u0300",\u03CB:"\u03C5\u0308",\u03B0:"\u03C5\u0308\u0301",\u1FE2:"\u03C5\u0308\u0300",\u1FE1:"\u03C5\u0304",\u1FE0:"\u03C5\u0306",\u03CE:"\u03C9\u0301",\u1F7C:"\u03C9\u0300",\u038E:"\u03A5\u0301",\u1FEA:"\u03A5\u0300",\u03AB:"\u03A5\u0308",\u1FE9:"\u03A5\u0304",\u1FE8:"\u03A5\u0306",\u038F:"\u03A9\u0301",\u1FFA:"\u03A9\u0300"},_4=class t{static{o(this,"Parser")}constructor(e,r){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new RC(e,r,this.mode),this.settings=r,this.leftrightDepth=0}expect(e,r){if(r===void 0&&(r=!0),this.fetch().text!==e)throw new lt("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());r&&this.consume()}consume(){this.nextToken=null}fetch(){return this.nextToken==null&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(e){this.mode=e,this.gullet.switchMode(e)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}}subparse(e){var r=this.nextToken;this.consume(),this.gullet.pushToken(new Ro("}")),this.gullet.pushTokens(e);var n=this.parseExpression(!1);return this.expect("}"),this.nextToken=r,n}parseExpression(e,r){for(var n=[];;){this.mode==="math"&&this.consumeSpaces();var i=this.fetch();if(t.endOfExpression.indexOf(i.text)!==-1||r&&i.text===r||e&&gh[i.text]&&gh[i.text].infix)break;var a=this.parseAtom(r);if(a){if(a.type==="internal")continue}else break;n.push(a)}return this.mode==="text"&&this.formLigatures(n),this.handleInfixNodes(n)}handleInfixNodes(e){for(var r=-1,n,i=0;i=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+r[0]+'" used in math mode',e);var l=Cn[this.mode][r].group,u=Js.range(e),h;if(Mbe.hasOwnProperty(l)){var f=l;h={type:"atom",mode:this.mode,family:f,loc:u,text:r}}else h={type:l,mode:this.mode,loc:u,text:r};s=h}else if(r.charCodeAt(0)>=128)this.settings.strict&&(IG(r.charCodeAt(0))?this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+r[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+r[0]+'"'+(" ("+r.charCodeAt(0)+")"),e)),s={type:"textord",mode:"text",loc:Js.range(e),text:r};else return null;if(this.consume(),a)for(var d=0;d{e.tagName==="A"&&e.hasAttribute("target")&&e.setAttribute(t,e.getAttribute("target")??"")}),Ap.default.addHook("afterSanitizeAttributes",e=>{e.tagName==="A"&&e.hasAttribute(t)&&(e.setAttribute("target",e.getAttribute(t)??""),e.removeAttribute(t),e.getAttribute("target")==="_blank"&&e.setAttribute("rel","noopener"))})}var Ap,ad,q4e,X4e,R$,D$,kr,K4e,Q4e,Z4e,J4e,M$,e3e,xr,t3e,r3e,yu,QC,n3e,i3e,N$,ZC,yi,sd,bh,qe,fr=M(()=>{"use strict";Ap=Ji(lC(),1),ad=//gi,q4e=o(t=>t?M$(t).replace(/\\n/g,"#br#").split("#br#"):[""],"getRows"),X4e=(()=>{let t=!1;return()=>{t||(j4e(),t=!0)}})();o(j4e,"setupDompurifyHooks");R$=o(t=>(X4e(),Ap.default.sanitize(t)),"removeScript"),D$=o((t,e)=>{if(e.flowchart?.htmlLabels!==!1){let r=e.securityLevel;r==="antiscript"||r==="strict"?t=R$(t):r!=="loose"&&(t=M$(t),t=t.replace(//g,">"),t=t.replace(/=/g,"="),t=J4e(t))}return t},"sanitizeMore"),kr=o((t,e)=>t&&(e.dompurifyConfig?t=Ap.default.sanitize(D$(t,e),e.dompurifyConfig).toString():t=Ap.default.sanitize(D$(t,e),{FORBID_TAGS:["style"]}).toString(),t),"sanitizeText"),K4e=o((t,e)=>typeof t=="string"?kr(t,e):t.flat().map(r=>kr(r,e)),"sanitizeTextOrArray"),Q4e=o(t=>ad.test(t),"hasBreaks"),Z4e=o(t=>t.split(ad),"splitBreaks"),J4e=o(t=>t.replace(/#br#/g,"
"),"placeholderToBreak"),M$=o(t=>t.replace(ad,"#br#"),"breakToPlaceholder"),e3e=o(t=>{let e="";return t&&(e=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,e=e.replaceAll(/\(/g,"\\("),e=e.replaceAll(/\)/g,"\\)")),e},"getUrl"),xr=o(t=>!(t===!1||["false","null","0"].includes(String(t).trim().toLowerCase())),"evaluate"),t3e=o(function(...t){let e=t.filter(r=>!isNaN(r));return Math.max(...e)},"getMax"),r3e=o(function(...t){let e=t.filter(r=>!isNaN(r));return Math.min(...e)},"getMin"),yu=o(function(t){let e=t.split(/(,)/),r=[];for(let n=0;n0&&n+1Math.max(0,t.split(e).length-1),"countOccurrence"),n3e=o((t,e)=>{let r=QC(t,"~"),n=QC(e,"~");return r===1&&n===1},"shouldCombineSets"),i3e=o(t=>{let e=QC(t,"~"),r=!1;if(e<=1)return t;e%2!==0&&t.startsWith("~")&&(t=t.substring(1),r=!0);let n=[...t],i=n.indexOf("~"),a=n.lastIndexOf("~");for(;i!==-1&&a!==-1&&i!==a;)n[i]="<",n[a]=">",i=n.indexOf("~"),a=n.lastIndexOf("~");return r&&n.unshift("~"),n.join("")},"processSet"),N$=o(()=>window.MathMLElement!==void 0,"isMathMLSupported"),ZC=/\$\$(.*)\$\$/g,yi=o(t=>(t.match(ZC)?.length??0)>0,"hasKatex"),sd=o(async(t,e)=>{t=await bh(t,e);let r=document.createElement("div");r.innerHTML=t,r.id="katex-temp",r.style.visibility="hidden",r.style.position="absolute",r.style.top="0",document.querySelector("body")?.insertAdjacentElement("beforeend",r);let i={width:r.clientWidth,height:r.clientHeight};return r.remove(),i},"calculateMathMLDimensions"),bh=o(async(t,e)=>{if(!yi(t))return t;if(!(N$()||e.legacyMathML||e.forceLegacyMathML))return t.replace(ZC,"MathML is unsupported in this environment.");let{default:r}=await Promise.resolve().then(()=>(L$(),_$)),n=e.forceLegacyMathML||!N$()&&e.legacyMathML?"htmlAndMathml":"mathml";return t.split(ad).map(i=>yi(i)?`
${i}
`:`
${i}
`).join("").replace(ZC,(i,a)=>r.renderToString(a,{throwOnError:!0,displayMode:!0,output:n}).replace(/\n/g," ").replace(//g,""))},"renderKatex"),qe={getRows:q4e,sanitizeText:kr,sanitizeTextOrArray:K4e,hasBreaks:Q4e,splitBreaks:Z4e,lineBreakRegex:ad,removeScript:R$,getUrl:e3e,evaluate:xr,getMax:t3e,getMin:r3e}});var a3e,s3e,Zr,Io,ai=M(()=>{"use strict";ut();a3e=o(function(t,e){for(let r of e)t.attr(r[0],r[1])},"d3Attrs"),s3e=o(function(t,e,r){let n=new Map;return r?(n.set("width","100%"),n.set("style",`max-width: ${e}px;`)):(n.set("height",t),n.set("width",e)),n},"calculateSvgSizeAttrs"),Zr=o(function(t,e,r,n){let i=s3e(e,r,n);a3e(t,i)},"configureSvgSize"),Io=o(function(t,e,r,n){let i=e.node().getBBox(),a=i.width,s=i.height;Y.info(`SVG bounds: ${a}x${s}`,i);let l=0,u=0;Y.info(`Graph bounds: ${l}x${u}`,t),l=a+r*2,u=s+r*2,Y.info(`Calculated bounds: ${l}x${u}`),Zr(e,u,l,n);let h=`${i.x-r} ${i.y-r} ${i.width+2*r} ${i.height+2*r}`;e.attr("viewBox",h)},"setupGraphViewbox")});var O4,o3e,I$,O$,JC=M(()=>{"use strict";ut();O4={},o3e=o((t,e,r)=>{let n="";return t in O4&&O4[t]?n=O4[t](r):Y.warn(`No theme found for ${t}`),` & { + font-family: ${r.fontFamily}; + font-size: ${r.fontSize}; + fill: ${r.textColor} + } + + /* Classes common for multiple diagrams */ + + & .error-icon { + fill: ${r.errorBkgColor}; + } + & .error-text { + fill: ${r.errorTextColor}; + stroke: ${r.errorTextColor}; + } + + & .edge-thickness-normal { + stroke-width: 1px; + } + & .edge-thickness-thick { + stroke-width: 3.5px + } + & .edge-pattern-solid { + stroke-dasharray: 0; + } + & .edge-thickness-invisible { + stroke-width: 0; + fill: none; + } + & .edge-pattern-dashed{ + stroke-dasharray: 3; + } + .edge-pattern-dotted { + stroke-dasharray: 2; + } + + & .marker { + fill: ${r.lineColor}; + stroke: ${r.lineColor}; + } + & .marker.cross { + stroke: ${r.lineColor}; + } + + & svg { + font-family: ${r.fontFamily}; + font-size: ${r.fontSize}; + } + & p { + margin: 0 + } + + ${n} + + ${e} +`},"getStyles"),I$=o((t,e)=>{e!==void 0&&(O4[t]=e)},"addStylesForDiagram"),O$=o3e});var xy={};vr(xy,{clear:()=>Lr,getAccDescription:()=>zr,getAccTitle:()=>Br,getDiagramTitle:()=>Jr,setAccDescription:()=>Fr,setAccTitle:()=>Mr,setDiagramTitle:()=>cn});var e7,t7,r7,n7,Lr,Mr,Br,Fr,zr,cn,Jr,Ai=M(()=>{"use strict";fr();Za();e7="",t7="",r7="",n7=o(t=>kr(t,Cr()),"sanitizeText"),Lr=o(()=>{e7="",r7="",t7=""},"clear"),Mr=o(t=>{e7=n7(t).replace(/^\s+/g,"")},"setAccTitle"),Br=o(()=>e7,"getAccTitle"),Fr=o(t=>{r7=n7(t).replace(/\n\s+/g,` +`)},"setAccDescription"),zr=o(()=>r7,"getAccDescription"),cn=o(t=>{t7=n7(t)},"setDiagramTitle"),Jr=o(()=>t7,"getDiagramTitle")});var P$,l3e,pe,a7,B4,s7,o7,c3e,P4,od,by,i7,Vt=M(()=>{"use strict";Zf();ut();Za();fr();ai();JC();Ai();P$=Y,l3e=J1,pe=Cr,a7=o4,B4=ph,s7=o(t=>kr(t,pe()),"sanitizeText"),o7=Io,c3e=o(()=>xy,"getCommonDb"),P4={},od=o((t,e,r)=>{P4[t]&&P$.warn(`Diagram with id ${t} already registered. Overwriting.`),P4[t]=e,r&&VS(t,r),I$(t,e.styles),e.injectUtils?.(P$,l3e,pe,s7,o7,c3e(),()=>{})},"registerDiagram"),by=o(t=>{if(t in P4)return P4[t];throw new i7(t)},"getDiagram"),i7=class extends Error{static{o(this,"DiagramNotFoundError")}constructor(e){super(`Diagram ${e} not found.`)}}});var bl,wh,ts,xl,dc,wy,l7,c7,F4,z4,B$,u3e,h3e,f3e,d3e,p3e,m3e,g3e,y3e,v3e,x3e,b3e,w3e,T3e,k3e,E3e,S3e,C3e,F$,A3e,_3e,z$,L3e,D3e,N3e,R3e,Th,M3e,I3e,O3e,P3e,B3e,Ty,u7=M(()=>{"use strict";Vt();fr();Ai();bl=[],wh=[""],ts="global",xl="",dc=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],wy=[],l7="",c7=!1,F4=4,z4=2,u3e=o(function(){return B$},"getC4Type"),h3e=o(function(t){B$=kr(t,pe())},"setC4Type"),f3e=o(function(t,e,r,n,i,a,s,l,u){if(t==null||e===void 0||e===null||r===void 0||r===null||n===void 0||n===null)return;let h={},f=wy.find(d=>d.from===e&&d.to===r);if(f?h=f:wy.push(h),h.type=t,h.from=e,h.to=r,h.label={text:n},i==null)h.techn={text:""};else if(typeof i=="object"){let[d,p]=Object.entries(i)[0];h[d]={text:p}}else h.techn={text:i};if(a==null)h.descr={text:""};else if(typeof a=="object"){let[d,p]=Object.entries(a)[0];h[d]={text:p}}else h.descr={text:a};if(typeof s=="object"){let[d,p]=Object.entries(s)[0];h[d]=p}else h.sprite=s;if(typeof l=="object"){let[d,p]=Object.entries(l)[0];h[d]=p}else h.tags=l;if(typeof u=="object"){let[d,p]=Object.entries(u)[0];h[d]=p}else h.link=u;h.wrap=Th()},"addRel"),d3e=o(function(t,e,r,n,i,a,s){if(e===null||r===null)return;let l={},u=bl.find(h=>h.alias===e);if(u&&e===u.alias?l=u:(l.alias=e,bl.push(l)),r==null?l.label={text:""}:l.label={text:r},n==null)l.descr={text:""};else if(typeof n=="object"){let[h,f]=Object.entries(n)[0];l[h]={text:f}}else l.descr={text:n};if(typeof i=="object"){let[h,f]=Object.entries(i)[0];l[h]=f}else l.sprite=i;if(typeof a=="object"){let[h,f]=Object.entries(a)[0];l[h]=f}else l.tags=a;if(typeof s=="object"){let[h,f]=Object.entries(s)[0];l[h]=f}else l.link=s;l.typeC4Shape={text:t},l.parentBoundary=ts,l.wrap=Th()},"addPersonOrSystem"),p3e=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=bl.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,bl.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.techn={text:""};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.techn={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof a=="object"){let[f,d]=Object.entries(a)[0];u[f]=d}else u.sprite=a;if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.wrap=Th(),u.typeC4Shape={text:t},u.parentBoundary=ts},"addContainer"),m3e=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=bl.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,bl.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.techn={text:""};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.techn={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof a=="object"){let[f,d]=Object.entries(a)[0];u[f]=d}else u.sprite=a;if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.wrap=Th(),u.typeC4Shape={text:t},u.parentBoundary=ts},"addComponent"),g3e=o(function(t,e,r,n,i){if(t===null||e===null)return;let a={},s=dc.find(l=>l.alias===t);if(s&&t===s.alias?a=s:(a.alias=t,dc.push(a)),e==null?a.label={text:""}:a.label={text:e},r==null)a.type={text:"system"};else if(typeof r=="object"){let[l,u]=Object.entries(r)[0];a[l]={text:u}}else a.type={text:r};if(typeof n=="object"){let[l,u]=Object.entries(n)[0];a[l]=u}else a.tags=n;if(typeof i=="object"){let[l,u]=Object.entries(i)[0];a[l]=u}else a.link=i;a.parentBoundary=ts,a.wrap=Th(),xl=ts,ts=t,wh.push(xl)},"addPersonOrSystemBoundary"),y3e=o(function(t,e,r,n,i){if(t===null||e===null)return;let a={},s=dc.find(l=>l.alias===t);if(s&&t===s.alias?a=s:(a.alias=t,dc.push(a)),e==null?a.label={text:""}:a.label={text:e},r==null)a.type={text:"container"};else if(typeof r=="object"){let[l,u]=Object.entries(r)[0];a[l]={text:u}}else a.type={text:r};if(typeof n=="object"){let[l,u]=Object.entries(n)[0];a[l]=u}else a.tags=n;if(typeof i=="object"){let[l,u]=Object.entries(i)[0];a[l]=u}else a.link=i;a.parentBoundary=ts,a.wrap=Th(),xl=ts,ts=t,wh.push(xl)},"addContainerBoundary"),v3e=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=dc.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,dc.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.type={text:"node"};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.type={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.nodeType=t,u.parentBoundary=ts,u.wrap=Th(),xl=ts,ts=e,wh.push(xl)},"addDeploymentNode"),x3e=o(function(){ts=xl,wh.pop(),xl=wh.pop(),wh.push(xl)},"popBoundaryParseStack"),b3e=o(function(t,e,r,n,i,a,s,l,u,h,f){let d=bl.find(p=>p.alias===e);if(!(d===void 0&&(d=dc.find(p=>p.alias===e),d===void 0))){if(r!=null)if(typeof r=="object"){let[p,m]=Object.entries(r)[0];d[p]=m}else d.bgColor=r;if(n!=null)if(typeof n=="object"){let[p,m]=Object.entries(n)[0];d[p]=m}else d.fontColor=n;if(i!=null)if(typeof i=="object"){let[p,m]=Object.entries(i)[0];d[p]=m}else d.borderColor=i;if(a!=null)if(typeof a=="object"){let[p,m]=Object.entries(a)[0];d[p]=m}else d.shadowing=a;if(s!=null)if(typeof s=="object"){let[p,m]=Object.entries(s)[0];d[p]=m}else d.shape=s;if(l!=null)if(typeof l=="object"){let[p,m]=Object.entries(l)[0];d[p]=m}else d.sprite=l;if(u!=null)if(typeof u=="object"){let[p,m]=Object.entries(u)[0];d[p]=m}else d.techn=u;if(h!=null)if(typeof h=="object"){let[p,m]=Object.entries(h)[0];d[p]=m}else d.legendText=h;if(f!=null)if(typeof f=="object"){let[p,m]=Object.entries(f)[0];d[p]=m}else d.legendSprite=f}},"updateElStyle"),w3e=o(function(t,e,r,n,i,a,s){let l=wy.find(u=>u.from===e&&u.to===r);if(l!==void 0){if(n!=null)if(typeof n=="object"){let[u,h]=Object.entries(n)[0];l[u]=h}else l.textColor=n;if(i!=null)if(typeof i=="object"){let[u,h]=Object.entries(i)[0];l[u]=h}else l.lineColor=i;if(a!=null)if(typeof a=="object"){let[u,h]=Object.entries(a)[0];l[u]=parseInt(h)}else l.offsetX=parseInt(a);if(s!=null)if(typeof s=="object"){let[u,h]=Object.entries(s)[0];l[u]=parseInt(h)}else l.offsetY=parseInt(s)}},"updateRelStyle"),T3e=o(function(t,e,r){let n=F4,i=z4;if(typeof e=="object"){let a=Object.values(e)[0];n=parseInt(a)}else n=parseInt(e);if(typeof r=="object"){let a=Object.values(r)[0];i=parseInt(a)}else i=parseInt(r);n>=1&&(F4=n),i>=1&&(z4=i)},"updateLayoutConfig"),k3e=o(function(){return F4},"getC4ShapeInRow"),E3e=o(function(){return z4},"getC4BoundaryInRow"),S3e=o(function(){return ts},"getCurrentBoundaryParse"),C3e=o(function(){return xl},"getParentBoundaryParse"),F$=o(function(t){return t==null?bl:bl.filter(e=>e.parentBoundary===t)},"getC4ShapeArray"),A3e=o(function(t){return bl.find(e=>e.alias===t)},"getC4Shape"),_3e=o(function(t){return Object.keys(F$(t))},"getC4ShapeKeys"),z$=o(function(t){return t==null?dc:dc.filter(e=>e.parentBoundary===t)},"getBoundaries"),L3e=z$,D3e=o(function(){return wy},"getRels"),N3e=o(function(){return l7},"getTitle"),R3e=o(function(t){c7=t},"setWrap"),Th=o(function(){return c7},"autoWrap"),M3e=o(function(){bl=[],dc=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],xl="",ts="global",wh=[""],wy=[],wh=[""],l7="",c7=!1,F4=4,z4=2},"clear"),I3e={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25},O3e={FILLED:0,OPEN:1},P3e={LEFTOF:0,RIGHTOF:1,OVER:2},B3e=o(function(t){l7=kr(t,pe())},"setTitle"),Ty={addPersonOrSystem:d3e,addPersonOrSystemBoundary:g3e,addContainer:p3e,addContainerBoundary:y3e,addComponent:m3e,addDeploymentNode:v3e,popBoundaryParseStack:x3e,addRel:f3e,updateElStyle:b3e,updateRelStyle:w3e,updateLayoutConfig:T3e,autoWrap:Th,setWrap:R3e,getC4ShapeArray:F$,getC4Shape:A3e,getC4ShapeKeys:_3e,getBoundaries:z$,getBoundarys:L3e,getCurrentBoundaryParse:S3e,getParentBoundaryParse:C3e,getRels:D3e,getTitle:N3e,getC4Type:u3e,getC4ShapeInRow:k3e,getC4BoundaryInRow:E3e,setAccTitle:Mr,getAccTitle:Br,getAccDescription:zr,setAccDescription:Fr,getConfig:o(()=>pe().c4,"getConfig"),clear:M3e,LINETYPE:I3e,ARROWTYPE:O3e,PLACEMENT:P3e,setTitle:B3e,setC4Type:h3e}});function ld(t,e){return t==null||e==null?NaN:te?1:t>=e?0:NaN}var h7=M(()=>{"use strict";o(ld,"ascending")});function f7(t,e){return t==null||e==null?NaN:et?1:e>=t?0:NaN}var G$=M(()=>{"use strict";o(f7,"descending")});function cd(t){let e,r,n;t.length!==2?(e=ld,r=o((l,u)=>ld(t(l),u),"compare2"),n=o((l,u)=>t(l)-u,"delta")):(e=t===ld||t===f7?t:F3e,r=t,n=t);function i(l,u,h=0,f=l.length){if(h>>1;r(l[d],u)<0?h=d+1:f=d}while(h>>1;r(l[d],u)<=0?h=d+1:f=d}while(hh&&n(l[d-1],u)>-n(l[d],u)?d-1:d}return o(s,"center"),{left:i,center:s,right:a}}function F3e(){return 0}var d7=M(()=>{"use strict";h7();G$();o(cd,"bisector");o(F3e,"zero")});function p7(t){return t===null?NaN:+t}var $$=M(()=>{"use strict";o(p7,"number")});var V$,U$,z3e,G3e,m7,H$=M(()=>{"use strict";h7();d7();$$();V$=cd(ld),U$=V$.right,z3e=V$.left,G3e=cd(p7).center,m7=U$});function W$({_intern:t,_key:e},r){let n=e(r);return t.has(n)?t.get(n):r}function $3e({_intern:t,_key:e},r){let n=e(r);return t.has(n)?t.get(n):(t.set(n,r),r)}function V3e({_intern:t,_key:e},r){let n=e(r);return t.has(n)&&(r=t.get(n),t.delete(n)),r}function U3e(t){return t!==null&&typeof t=="object"?t.valueOf():t}var _p,Y$=M(()=>{"use strict";_p=class extends Map{static{o(this,"InternMap")}constructor(e,r=U3e){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),e!=null)for(let[n,i]of e)this.set(n,i)}get(e){return super.get(W$(this,e))}has(e){return super.has(W$(this,e))}set(e,r){return super.set($3e(this,e),r)}delete(e){return super.delete(V3e(this,e))}};o(W$,"intern_get");o($3e,"intern_set");o(V3e,"intern_delete");o(U3e,"keyof")});function G4(t,e,r){let n=(e-t)/Math.max(0,r),i=Math.floor(Math.log10(n)),a=n/Math.pow(10,i),s=a>=H3e?10:a>=W3e?5:a>=Y3e?2:1,l,u,h;return i<0?(h=Math.pow(10,-i)/s,l=Math.round(t*h),u=Math.round(e*h),l/he&&--u,h=-h):(h=Math.pow(10,i)*s,l=Math.round(t/h),u=Math.round(e/h),l*he&&--u),u0))return[];if(t===e)return[t];let n=e=i))return[];let l=a-i+1,u=new Array(l);if(n)if(s<0)for(let h=0;h{"use strict";H3e=Math.sqrt(50),W3e=Math.sqrt(10),Y3e=Math.sqrt(2);o(G4,"tickSpec");o($4,"ticks");o(ky,"tickIncrement");o(Lp,"tickStep")});function V4(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r=i)&&(r=i)}return r}var X$=M(()=>{"use strict";o(V4,"max")});function U4(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r>i||r===void 0&&i>=i)&&(r=i)}return r}var j$=M(()=>{"use strict";o(U4,"min")});function H4(t,e,r){t=+t,e=+e,r=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+r;for(var n=-1,i=Math.max(0,Math.ceil((e-t)/r))|0,a=new Array(i);++n{"use strict";o(H4,"range")});var kh=M(()=>{"use strict";H$();d7();X$();j$();K$();q$();Y$()});function g7(t){return t}var Q$=M(()=>{"use strict";o(g7,"default")});function q3e(t){return"translate("+t+",0)"}function X3e(t){return"translate(0,"+t+")"}function j3e(t){return e=>+t(e)}function K3e(t,e){return e=Math.max(0,t.bandwidth()-e*2)/2,t.round()&&(e=Math.round(e)),r=>+t(r)+e}function Q3e(){return!this.__axis}function J$(t,e){var r=[],n=null,i=null,a=6,s=6,l=3,u=typeof window<"u"&&window.devicePixelRatio>1?0:.5,h=t===Y4||t===W4?-1:1,f=t===W4||t===y7?"x":"y",d=t===Y4||t===v7?q3e:X3e;function p(m){var g=n??(e.ticks?e.ticks.apply(e,r):e.domain()),y=i??(e.tickFormat?e.tickFormat.apply(e,r):g7),v=Math.max(a,0)+l,x=e.range(),b=+x[0]+u,w=+x[x.length-1]+u,_=(e.bandwidth?K3e:j3e)(e.copy(),u),T=m.selection?m.selection():m,E=T.selectAll(".domain").data([null]),L=T.selectAll(".tick").data(g,e).order(),S=L.exit(),A=L.enter().append("g").attr("class","tick"),I=L.select("line"),D=L.select("text");E=E.merge(E.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),L=L.merge(A),I=I.merge(A.append("line").attr("stroke","currentColor").attr(f+"2",h*a)),D=D.merge(A.append("text").attr("fill","currentColor").attr(f,h*v).attr("dy",t===Y4?"0em":t===v7?"0.71em":"0.32em")),m!==T&&(E=E.transition(m),L=L.transition(m),I=I.transition(m),D=D.transition(m),S=S.transition(m).attr("opacity",Z$).attr("transform",function(k){return isFinite(k=_(k))?d(k+u):this.getAttribute("transform")}),A.attr("opacity",Z$).attr("transform",function(k){var R=this.parentNode.__axis;return d((R&&isFinite(R=R(k))?R:_(k))+u)})),S.remove(),E.attr("d",t===W4||t===y7?s?"M"+h*s+","+b+"H"+u+"V"+w+"H"+h*s:"M"+u+","+b+"V"+w:s?"M"+b+","+h*s+"V"+u+"H"+w+"V"+h*s:"M"+b+","+u+"H"+w),L.attr("opacity",1).attr("transform",function(k){return d(_(k)+u)}),I.attr(f+"2",h*a),D.attr(f,h*v).text(y),T.filter(Q3e).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===y7?"start":t===W4?"end":"middle"),T.each(function(){this.__axis=_})}return o(p,"axis"),p.scale=function(m){return arguments.length?(e=m,p):e},p.ticks=function(){return r=Array.from(arguments),p},p.tickArguments=function(m){return arguments.length?(r=m==null?[]:Array.from(m),p):r.slice()},p.tickValues=function(m){return arguments.length?(n=m==null?null:Array.from(m),p):n&&n.slice()},p.tickFormat=function(m){return arguments.length?(i=m,p):i},p.tickSize=function(m){return arguments.length?(a=s=+m,p):a},p.tickSizeInner=function(m){return arguments.length?(a=+m,p):a},p.tickSizeOuter=function(m){return arguments.length?(s=+m,p):s},p.tickPadding=function(m){return arguments.length?(l=+m,p):l},p.offset=function(m){return arguments.length?(u=+m,p):u},p}function x7(t){return J$(Y4,t)}function b7(t){return J$(v7,t)}var Y4,y7,v7,W4,Z$,eV=M(()=>{"use strict";Q$();Y4=1,y7=2,v7=3,W4=4,Z$=1e-6;o(q3e,"translateX");o(X3e,"translateY");o(j3e,"number");o(K3e,"center");o(Q3e,"entering");o(J$,"axis");o(x7,"axisTop");o(b7,"axisBottom")});var tV=M(()=>{"use strict";eV()});function nV(){for(var t=0,e=arguments.length,r={},n;t=0&&(n=r.slice(i+1),r=r.slice(0,i)),r&&!e.hasOwnProperty(r))throw new Error("unknown type: "+r);return{type:r,name:n}})}function e5e(t,e){for(var r=0,n=t.length,i;r{"use strict";Z3e={value:o(()=>{},"value")};o(nV,"dispatch");o(q4,"Dispatch");o(J3e,"parseTypenames");q4.prototype=nV.prototype={constructor:q4,on:o(function(t,e){var r=this._,n=J3e(t+"",r),i,a=-1,s=n.length;if(arguments.length<2){for(;++a0)for(var r=new Array(i),n=0,i,a;n{"use strict";iV()});var X4,k7,E7=M(()=>{"use strict";X4="http://www.w3.org/1999/xhtml",k7={svg:"http://www.w3.org/2000/svg",xhtml:X4,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"}});function pc(t){var e=t+="",r=e.indexOf(":");return r>=0&&(e=t.slice(0,r))!=="xmlns"&&(t=t.slice(r+1)),k7.hasOwnProperty(e)?{space:k7[e],local:t}:t}var j4=M(()=>{"use strict";E7();o(pc,"default")});function t5e(t){return function(){var e=this.ownerDocument,r=this.namespaceURI;return r===X4&&e.documentElement.namespaceURI===X4?e.createElement(t):e.createElementNS(r,t)}}function r5e(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function Ey(t){var e=pc(t);return(e.local?r5e:t5e)(e)}var S7=M(()=>{"use strict";j4();E7();o(t5e,"creatorInherit");o(r5e,"creatorFixed");o(Ey,"default")});function n5e(){}function Eh(t){return t==null?n5e:function(){return this.querySelector(t)}}var K4=M(()=>{"use strict";o(n5e,"none");o(Eh,"default")});function C7(t){typeof t!="function"&&(t=Eh(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i{"use strict";wl();K4();o(C7,"default")});function A7(t){return t==null?[]:Array.isArray(t)?t:Array.from(t)}var sV=M(()=>{"use strict";o(A7,"array")});function i5e(){return[]}function Dp(t){return t==null?i5e:function(){return this.querySelectorAll(t)}}var _7=M(()=>{"use strict";o(i5e,"empty");o(Dp,"default")});function a5e(t){return function(){return A7(t.apply(this,arguments))}}function L7(t){typeof t=="function"?t=a5e(t):t=Dp(t);for(var e=this._groups,r=e.length,n=[],i=[],a=0;a{"use strict";wl();sV();_7();o(a5e,"arrayAll");o(L7,"default")});function Np(t){return function(){return this.matches(t)}}function Q4(t){return function(e){return e.matches(t)}}var Sy=M(()=>{"use strict";o(Np,"default");o(Q4,"childMatcher")});function o5e(t){return function(){return s5e.call(this.children,t)}}function l5e(){return this.firstElementChild}function D7(t){return this.select(t==null?l5e:o5e(typeof t=="function"?t:Q4(t)))}var s5e,lV=M(()=>{"use strict";Sy();s5e=Array.prototype.find;o(o5e,"childFind");o(l5e,"childFirst");o(D7,"default")});function u5e(){return Array.from(this.children)}function h5e(t){return function(){return c5e.call(this.children,t)}}function N7(t){return this.selectAll(t==null?u5e:h5e(typeof t=="function"?t:Q4(t)))}var c5e,cV=M(()=>{"use strict";Sy();c5e=Array.prototype.filter;o(u5e,"children");o(h5e,"childrenFilter");o(N7,"default")});function R7(t){typeof t!="function"&&(t=Np(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i{"use strict";wl();Sy();o(R7,"default")});function Cy(t){return new Array(t.length)}var M7=M(()=>{"use strict";o(Cy,"default")});function I7(){return new si(this._enter||this._groups.map(Cy),this._parents)}function Ay(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}var O7=M(()=>{"use strict";M7();wl();o(I7,"default");o(Ay,"EnterNode");Ay.prototype={constructor:Ay,appendChild:o(function(t){return this._parent.insertBefore(t,this._next)},"appendChild"),insertBefore:o(function(t,e){return this._parent.insertBefore(t,e)},"insertBefore"),querySelector:o(function(t){return this._parent.querySelector(t)},"querySelector"),querySelectorAll:o(function(t){return this._parent.querySelectorAll(t)},"querySelectorAll")}});function P7(t){return function(){return t}}var hV=M(()=>{"use strict";o(P7,"default")});function f5e(t,e,r,n,i,a){for(var s=0,l,u=e.length,h=a.length;s=w&&(w=b+1);!(T=v[w])&&++w{"use strict";wl();O7();hV();o(f5e,"bindIndex");o(d5e,"bindKey");o(p5e,"datum");o(B7,"default");o(m5e,"arraylike")});function F7(){return new si(this._exit||this._groups.map(Cy),this._parents)}var dV=M(()=>{"use strict";M7();wl();o(F7,"default")});function z7(t,e,r){var n=this.enter(),i=this,a=this.exit();return typeof t=="function"?(n=t(n),n&&(n=n.selection())):n=n.append(t+""),e!=null&&(i=e(i),i&&(i=i.selection())),r==null?a.remove():r(a),n&&i?n.merge(i).order():i}var pV=M(()=>{"use strict";o(z7,"default")});function G7(t){for(var e=t.selection?t.selection():t,r=this._groups,n=e._groups,i=r.length,a=n.length,s=Math.min(i,a),l=new Array(i),u=0;u{"use strict";wl();o(G7,"default")});function $7(){for(var t=this._groups,e=-1,r=t.length;++e=0;)(s=n[i])&&(a&&s.compareDocumentPosition(a)^4&&a.parentNode.insertBefore(s,a),a=s);return this}var gV=M(()=>{"use strict";o($7,"default")});function V7(t){t||(t=g5e);function e(d,p){return d&&p?t(d.__data__,p.__data__):!d-!p}o(e,"compareNode");for(var r=this._groups,n=r.length,i=new Array(n),a=0;ae?1:t>=e?0:NaN}var yV=M(()=>{"use strict";wl();o(V7,"default");o(g5e,"ascending")});function U7(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}var vV=M(()=>{"use strict";o(U7,"default")});function H7(){return Array.from(this)}var xV=M(()=>{"use strict";o(H7,"default")});function W7(){for(var t=this._groups,e=0,r=t.length;e{"use strict";o(W7,"default")});function Y7(){let t=0;for(let e of this)++t;return t}var wV=M(()=>{"use strict";o(Y7,"default")});function q7(){return!this.node()}var TV=M(()=>{"use strict";o(q7,"default")});function X7(t){for(var e=this._groups,r=0,n=e.length;r{"use strict";o(X7,"default")});function y5e(t){return function(){this.removeAttribute(t)}}function v5e(t){return function(){this.removeAttributeNS(t.space,t.local)}}function x5e(t,e){return function(){this.setAttribute(t,e)}}function b5e(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function w5e(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttribute(t):this.setAttribute(t,r)}}function T5e(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,r)}}function j7(t,e){var r=pc(t);if(arguments.length<2){var n=this.node();return r.local?n.getAttributeNS(r.space,r.local):n.getAttribute(r)}return this.each((e==null?r.local?v5e:y5e:typeof e=="function"?r.local?T5e:w5e:r.local?b5e:x5e)(r,e))}var EV=M(()=>{"use strict";j4();o(y5e,"attrRemove");o(v5e,"attrRemoveNS");o(x5e,"attrConstant");o(b5e,"attrConstantNS");o(w5e,"attrFunction");o(T5e,"attrFunctionNS");o(j7,"default")});function _y(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}var K7=M(()=>{"use strict";o(_y,"default")});function k5e(t){return function(){this.style.removeProperty(t)}}function E5e(t,e,r){return function(){this.style.setProperty(t,e,r)}}function S5e(t,e,r){return function(){var n=e.apply(this,arguments);n==null?this.style.removeProperty(t):this.style.setProperty(t,n,r)}}function Q7(t,e,r){return arguments.length>1?this.each((e==null?k5e:typeof e=="function"?S5e:E5e)(t,e,r??"")):Sh(this.node(),t)}function Sh(t,e){return t.style.getPropertyValue(e)||_y(t).getComputedStyle(t,null).getPropertyValue(e)}var Z7=M(()=>{"use strict";K7();o(k5e,"styleRemove");o(E5e,"styleConstant");o(S5e,"styleFunction");o(Q7,"default");o(Sh,"styleValue")});function C5e(t){return function(){delete this[t]}}function A5e(t,e){return function(){this[t]=e}}function _5e(t,e){return function(){var r=e.apply(this,arguments);r==null?delete this[t]:this[t]=r}}function J7(t,e){return arguments.length>1?this.each((e==null?C5e:typeof e=="function"?_5e:A5e)(t,e)):this.node()[t]}var SV=M(()=>{"use strict";o(C5e,"propertyRemove");o(A5e,"propertyConstant");o(_5e,"propertyFunction");o(J7,"default")});function CV(t){return t.trim().split(/^|\s+/)}function eA(t){return t.classList||new AV(t)}function AV(t){this._node=t,this._names=CV(t.getAttribute("class")||"")}function _V(t,e){for(var r=eA(t),n=-1,i=e.length;++n{"use strict";o(CV,"classArray");o(eA,"classList");o(AV,"ClassList");AV.prototype={add:o(function(t){var e=this._names.indexOf(t);e<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},"add"),remove:o(function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},"remove"),contains:o(function(t){return this._names.indexOf(t)>=0},"contains")};o(_V,"classedAdd");o(LV,"classedRemove");o(L5e,"classedTrue");o(D5e,"classedFalse");o(N5e,"classedFunction");o(tA,"default")});function R5e(){this.textContent=""}function M5e(t){return function(){this.textContent=t}}function I5e(t){return function(){var e=t.apply(this,arguments);this.textContent=e??""}}function rA(t){return arguments.length?this.each(t==null?R5e:(typeof t=="function"?I5e:M5e)(t)):this.node().textContent}var NV=M(()=>{"use strict";o(R5e,"textRemove");o(M5e,"textConstant");o(I5e,"textFunction");o(rA,"default")});function O5e(){this.innerHTML=""}function P5e(t){return function(){this.innerHTML=t}}function B5e(t){return function(){var e=t.apply(this,arguments);this.innerHTML=e??""}}function nA(t){return arguments.length?this.each(t==null?O5e:(typeof t=="function"?B5e:P5e)(t)):this.node().innerHTML}var RV=M(()=>{"use strict";o(O5e,"htmlRemove");o(P5e,"htmlConstant");o(B5e,"htmlFunction");o(nA,"default")});function F5e(){this.nextSibling&&this.parentNode.appendChild(this)}function iA(){return this.each(F5e)}var MV=M(()=>{"use strict";o(F5e,"raise");o(iA,"default")});function z5e(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function aA(){return this.each(z5e)}var IV=M(()=>{"use strict";o(z5e,"lower");o(aA,"default")});function sA(t){var e=typeof t=="function"?t:Ey(t);return this.select(function(){return this.appendChild(e.apply(this,arguments))})}var OV=M(()=>{"use strict";S7();o(sA,"default")});function G5e(){return null}function oA(t,e){var r=typeof t=="function"?t:Ey(t),n=e==null?G5e:typeof e=="function"?e:Eh(e);return this.select(function(){return this.insertBefore(r.apply(this,arguments),n.apply(this,arguments)||null)})}var PV=M(()=>{"use strict";S7();K4();o(G5e,"constantNull");o(oA,"default")});function $5e(){var t=this.parentNode;t&&t.removeChild(this)}function lA(){return this.each($5e)}var BV=M(()=>{"use strict";o($5e,"remove");o(lA,"default")});function V5e(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function U5e(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function cA(t){return this.select(t?U5e:V5e)}var FV=M(()=>{"use strict";o(V5e,"selection_cloneShallow");o(U5e,"selection_cloneDeep");o(cA,"default")});function uA(t){return arguments.length?this.property("__data__",t):this.node().__data__}var zV=M(()=>{"use strict";o(uA,"default")});function H5e(t){return function(e){t.call(this,e,this.__data__)}}function W5e(t){return t.trim().split(/^|\s+/).map(function(e){var r="",n=e.indexOf(".");return n>=0&&(r=e.slice(n+1),e=e.slice(0,n)),{type:e,name:r}})}function Y5e(t){return function(){var e=this.__on;if(e){for(var r=0,n=-1,i=e.length,a;r{"use strict";o(H5e,"contextListener");o(W5e,"parseTypenames");o(Y5e,"onRemove");o(q5e,"onAdd");o(hA,"default")});function $V(t,e,r){var n=_y(t),i=n.CustomEvent;typeof i=="function"?i=new i(e,r):(i=n.document.createEvent("Event"),r?(i.initEvent(e,r.bubbles,r.cancelable),i.detail=r.detail):i.initEvent(e,!1,!1)),t.dispatchEvent(i)}function X5e(t,e){return function(){return $V(this,t,e)}}function j5e(t,e){return function(){return $V(this,t,e.apply(this,arguments))}}function fA(t,e){return this.each((typeof e=="function"?j5e:X5e)(t,e))}var VV=M(()=>{"use strict";K7();o($V,"dispatchEvent");o(X5e,"dispatchConstant");o(j5e,"dispatchFunction");o(fA,"default")});function*dA(){for(var t=this._groups,e=0,r=t.length;e{"use strict";o(dA,"default")});function si(t,e){this._groups=t,this._parents=e}function HV(){return new si([[document.documentElement]],pA)}function K5e(){return this}var pA,vu,wl=M(()=>{"use strict";aV();oV();lV();cV();uV();fV();O7();dV();pV();mV();gV();yV();vV();xV();bV();wV();TV();kV();EV();Z7();SV();DV();NV();RV();MV();IV();OV();PV();BV();FV();zV();GV();VV();UV();pA=[null];o(si,"Selection");o(HV,"selection");o(K5e,"selection_selection");si.prototype=HV.prototype={constructor:si,select:C7,selectAll:L7,selectChild:D7,selectChildren:N7,filter:R7,data:B7,enter:I7,exit:F7,join:z7,merge:G7,selection:K5e,order:$7,sort:V7,call:U7,nodes:H7,node:W7,size:Y7,empty:q7,each:X7,attr:j7,style:Q7,property:J7,classed:tA,text:rA,html:nA,raise:iA,lower:aA,append:sA,insert:oA,remove:lA,clone:cA,datum:uA,on:hA,dispatch:fA,[Symbol.iterator]:dA};vu=HV});function Ve(t){return typeof t=="string"?new si([[document.querySelector(t)]],[document.documentElement]):new si([[t]],pA)}var WV=M(()=>{"use strict";wl();o(Ve,"default")});var Tl=M(()=>{"use strict";Sy();j4();WV();wl();K4();_7();Z7()});var YV=M(()=>{"use strict"});function Ch(t,e,r){t.prototype=e.prototype=r,r.constructor=t}function Rp(t,e){var r=Object.create(t.prototype);for(var n in e)r[n]=e[n];return r}var mA=M(()=>{"use strict";o(Ch,"default");o(Rp,"extend")});function Ah(){}function XV(){return this.rgb().formatHex()}function iwe(){return this.rgb().formatHex8()}function awe(){return tU(this).formatHsl()}function jV(){return this.rgb().formatRgb()}function El(t){var e,r;return t=(t+"").trim().toLowerCase(),(e=Q5e.exec(t))?(r=e[1].length,e=parseInt(e[1],16),r===6?KV(e):r===3?new da(e>>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):r===8?Z4(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):r===4?Z4(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=Z5e.exec(t))?new da(e[1],e[2],e[3],1):(e=J5e.exec(t))?new da(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=ewe.exec(t))?Z4(e[1],e[2],e[3],e[4]):(e=twe.exec(t))?Z4(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=rwe.exec(t))?JV(e[1],e[2]/100,e[3]/100,1):(e=nwe.exec(t))?JV(e[1],e[2]/100,e[3]/100,e[4]):qV.hasOwnProperty(t)?KV(qV[t]):t==="transparent"?new da(NaN,NaN,NaN,0):null}function KV(t){return new da(t>>16&255,t>>8&255,t&255,1)}function Z4(t,e,r,n){return n<=0&&(t=e=r=NaN),new da(t,e,r,n)}function yA(t){return t instanceof Ah||(t=El(t)),t?(t=t.rgb(),new da(t.r,t.g,t.b,t.opacity)):new da}function Ip(t,e,r,n){return arguments.length===1?yA(t):new da(t,e,r,n??1)}function da(t,e,r,n){this.r=+t,this.g=+e,this.b=+r,this.opacity=+n}function QV(){return`#${ud(this.r)}${ud(this.g)}${ud(this.b)}`}function swe(){return`#${ud(this.r)}${ud(this.g)}${ud(this.b)}${ud((isNaN(this.opacity)?1:this.opacity)*255)}`}function ZV(){let t=t3(this.opacity);return`${t===1?"rgb(":"rgba("}${hd(this.r)}, ${hd(this.g)}, ${hd(this.b)}${t===1?")":`, ${t})`}`}function t3(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function hd(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function ud(t){return t=hd(t),(t<16?"0":"")+t.toString(16)}function JV(t,e,r,n){return n<=0?t=e=r=NaN:r<=0||r>=1?t=e=NaN:e<=0&&(t=NaN),new kl(t,e,r,n)}function tU(t){if(t instanceof kl)return new kl(t.h,t.s,t.l,t.opacity);if(t instanceof Ah||(t=El(t)),!t)return new kl;if(t instanceof kl)return t;t=t.rgb();var e=t.r/255,r=t.g/255,n=t.b/255,i=Math.min(e,r,n),a=Math.max(e,r,n),s=NaN,l=a-i,u=(a+i)/2;return l?(e===a?s=(r-n)/l+(r0&&u<1?0:s,new kl(s,l,u,t.opacity)}function rU(t,e,r,n){return arguments.length===1?tU(t):new kl(t,e,r,n??1)}function kl(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}function eU(t){return t=(t||0)%360,t<0?t+360:t}function J4(t){return Math.max(0,Math.min(1,t||0))}function gA(t,e,r){return(t<60?e+(r-e)*t/60:t<180?r:t<240?e+(r-e)*(240-t)/60:e)*255}var Ly,e3,Mp,Dy,mc,Q5e,Z5e,J5e,ewe,twe,rwe,nwe,qV,vA=M(()=>{"use strict";mA();o(Ah,"Color");Ly=.7,e3=1/Ly,Mp="\\s*([+-]?\\d+)\\s*",Dy="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",mc="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",Q5e=/^#([0-9a-f]{3,8})$/,Z5e=new RegExp(`^rgb\\(${Mp},${Mp},${Mp}\\)$`),J5e=new RegExp(`^rgb\\(${mc},${mc},${mc}\\)$`),ewe=new RegExp(`^rgba\\(${Mp},${Mp},${Mp},${Dy}\\)$`),twe=new RegExp(`^rgba\\(${mc},${mc},${mc},${Dy}\\)$`),rwe=new RegExp(`^hsl\\(${Dy},${mc},${mc}\\)$`),nwe=new RegExp(`^hsla\\(${Dy},${mc},${mc},${Dy}\\)$`),qV={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};Ch(Ah,El,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:XV,formatHex:XV,formatHex8:iwe,formatHsl:awe,formatRgb:jV,toString:jV});o(XV,"color_formatHex");o(iwe,"color_formatHex8");o(awe,"color_formatHsl");o(jV,"color_formatRgb");o(El,"color");o(KV,"rgbn");o(Z4,"rgba");o(yA,"rgbConvert");o(Ip,"rgb");o(da,"Rgb");Ch(da,Ip,Rp(Ah,{brighter(t){return t=t==null?e3:Math.pow(e3,t),new da(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?Ly:Math.pow(Ly,t),new da(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new da(hd(this.r),hd(this.g),hd(this.b),t3(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:QV,formatHex:QV,formatHex8:swe,formatRgb:ZV,toString:ZV}));o(QV,"rgb_formatHex");o(swe,"rgb_formatHex8");o(ZV,"rgb_formatRgb");o(t3,"clampa");o(hd,"clampi");o(ud,"hex");o(JV,"hsla");o(tU,"hslConvert");o(rU,"hsl");o(kl,"Hsl");Ch(kl,rU,Rp(Ah,{brighter(t){return t=t==null?e3:Math.pow(e3,t),new kl(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?Ly:Math.pow(Ly,t),new kl(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*e,i=2*r-n;return new da(gA(t>=240?t-240:t+120,i,n),gA(t,i,n),gA(t<120?t+240:t-120,i,n),this.opacity)},clamp(){return new kl(eU(this.h),J4(this.s),J4(this.l),t3(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let t=t3(this.opacity);return`${t===1?"hsl(":"hsla("}${eU(this.h)}, ${J4(this.s)*100}%, ${J4(this.l)*100}%${t===1?")":`, ${t})`}`}}));o(eU,"clamph");o(J4,"clampt");o(gA,"hsl2rgb")});var nU,iU,aU=M(()=>{"use strict";nU=Math.PI/180,iU=180/Math.PI});function hU(t){if(t instanceof gc)return new gc(t.l,t.a,t.b,t.opacity);if(t instanceof xu)return fU(t);t instanceof da||(t=yA(t));var e=TA(t.r),r=TA(t.g),n=TA(t.b),i=xA((.2225045*e+.7168786*r+.0606169*n)/oU),a,s;return e===r&&r===n?a=s=i:(a=xA((.4360747*e+.3850649*r+.1430804*n)/sU),s=xA((.0139322*e+.0971045*r+.7141733*n)/lU)),new gc(116*i-16,500*(a-i),200*(i-s),t.opacity)}function kA(t,e,r,n){return arguments.length===1?hU(t):new gc(t,e,r,n??1)}function gc(t,e,r,n){this.l=+t,this.a=+e,this.b=+r,this.opacity=+n}function xA(t){return t>owe?Math.pow(t,1/3):t/uU+cU}function bA(t){return t>Op?t*t*t:uU*(t-cU)}function wA(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function TA(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function lwe(t){if(t instanceof xu)return new xu(t.h,t.c,t.l,t.opacity);if(t instanceof gc||(t=hU(t)),t.a===0&&t.b===0)return new xu(NaN,0{"use strict";mA();vA();aU();r3=18,sU=.96422,oU=1,lU=.82521,cU=4/29,Op=6/29,uU=3*Op*Op,owe=Op*Op*Op;o(hU,"labConvert");o(kA,"lab");o(gc,"Lab");Ch(gc,kA,Rp(Ah,{brighter(t){return new gc(this.l+r3*(t??1),this.a,this.b,this.opacity)},darker(t){return new gc(this.l-r3*(t??1),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,r=isNaN(this.b)?t:t-this.b/200;return e=sU*bA(e),t=oU*bA(t),r=lU*bA(r),new da(wA(3.1338561*e-1.6168667*t-.4906146*r),wA(-.9787684*e+1.9161415*t+.033454*r),wA(.0719453*e-.2289914*t+1.4052427*r),this.opacity)}}));o(xA,"xyz2lab");o(bA,"lab2xyz");o(wA,"lrgb2rgb");o(TA,"rgb2lrgb");o(lwe,"hclConvert");o(Ny,"hcl");o(xu,"Hcl");o(fU,"hcl2lab");Ch(xu,Ny,Rp(Ah,{brighter(t){return new xu(this.h,this.c,this.l+r3*(t??1),this.opacity)},darker(t){return new xu(this.h,this.c,this.l-r3*(t??1),this.opacity)},rgb(){return fU(this).rgb()}}))});var Pp=M(()=>{"use strict";vA();dU()});function EA(t,e,r,n,i){var a=t*t,s=a*t;return((1-3*t+3*a-s)*e+(4-6*a+3*s)*r+(1+3*t+3*a-3*s)*n+s*i)/6}function SA(t){var e=t.length-1;return function(r){var n=r<=0?r=0:r>=1?(r=1,e-1):Math.floor(r*e),i=t[n],a=t[n+1],s=n>0?t[n-1]:2*i-a,l=n{"use strict";o(EA,"basis");o(SA,"default")});function AA(t){var e=t.length;return function(r){var n=Math.floor(((r%=1)<0?++r:r)*e),i=t[(n+e-1)%e],a=t[n%e],s=t[(n+1)%e],l=t[(n+2)%e];return EA((r-n/e)*e,i,a,s,l)}}var pU=M(()=>{"use strict";CA();o(AA,"default")});var Bp,_A=M(()=>{"use strict";Bp=o(t=>()=>t,"default")});function mU(t,e){return function(r){return t+r*e}}function cwe(t,e,r){return t=Math.pow(t,r),e=Math.pow(e,r)-t,r=1/r,function(n){return Math.pow(t+n*e,r)}}function gU(t,e){var r=e-t;return r?mU(t,r>180||r<-180?r-360*Math.round(r/360):r):Bp(isNaN(t)?e:t)}function yU(t){return(t=+t)==1?bu:function(e,r){return r-e?cwe(e,r,t):Bp(isNaN(e)?r:e)}}function bu(t,e){var r=e-t;return r?mU(t,r):Bp(isNaN(t)?e:t)}var LA=M(()=>{"use strict";_A();o(mU,"linear");o(cwe,"exponential");o(gU,"hue");o(yU,"gamma");o(bu,"nogamma")});function vU(t){return function(e){var r=e.length,n=new Array(r),i=new Array(r),a=new Array(r),s,l;for(s=0;s{"use strict";Pp();CA();pU();LA();fd=o(function t(e){var r=yU(e);function n(i,a){var s=r((i=Ip(i)).r,(a=Ip(a)).r),l=r(i.g,a.g),u=r(i.b,a.b),h=bu(i.opacity,a.opacity);return function(f){return i.r=s(f),i.g=l(f),i.b=u(f),i.opacity=h(f),i+""}}return o(n,"rgb"),n.gamma=t,n},"rgbGamma")(1);o(vU,"rgbSpline");uwe=vU(SA),hwe=vU(AA)});function NA(t,e){e||(e=[]);var r=t?Math.min(e.length,t.length):0,n=e.slice(),i;return function(a){for(i=0;i{"use strict";o(NA,"default");o(xU,"isNumberArray")});function wU(t,e){var r=e?e.length:0,n=t?Math.min(r,t.length):0,i=new Array(n),a=new Array(r),s;for(s=0;s{"use strict";n3();o(wU,"genericArray")});function RA(t,e){var r=new Date;return t=+t,e=+e,function(n){return r.setTime(t*(1-n)+e*n),r}}var kU=M(()=>{"use strict";o(RA,"default")});function ea(t,e){return t=+t,e=+e,function(r){return t*(1-r)+e*r}}var Ry=M(()=>{"use strict";o(ea,"default")});function MA(t,e){var r={},n={},i;(t===null||typeof t!="object")&&(t={}),(e===null||typeof e!="object")&&(e={});for(i in e)i in t?r[i]=_h(t[i],e[i]):n[i]=e[i];return function(a){for(i in r)n[i]=r[i](a);return n}}var EU=M(()=>{"use strict";n3();o(MA,"default")});function fwe(t){return function(){return t}}function dwe(t){return function(e){return t(e)+""}}function Fp(t,e){var r=OA.lastIndex=IA.lastIndex=0,n,i,a,s=-1,l=[],u=[];for(t=t+"",e=e+"";(n=OA.exec(t))&&(i=IA.exec(e));)(a=i.index)>r&&(a=e.slice(r,a),l[s]?l[s]+=a:l[++s]=a),(n=n[0])===(i=i[0])?l[s]?l[s]+=i:l[++s]=i:(l[++s]=null,u.push({i:s,x:ea(n,i)})),r=IA.lastIndex;return r{"use strict";Ry();OA=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,IA=new RegExp(OA.source,"g");o(fwe,"zero");o(dwe,"one");o(Fp,"default")});function _h(t,e){var r=typeof e,n;return e==null||r==="boolean"?Bp(e):(r==="number"?ea:r==="string"?(n=El(e))?(e=n,fd):Fp:e instanceof El?fd:e instanceof Date?RA:xU(e)?NA:Array.isArray(e)?wU:typeof e.valueOf!="function"&&typeof e.toString!="function"||isNaN(e)?MA:ea)(t,e)}var n3=M(()=>{"use strict";Pp();DA();TU();kU();Ry();EU();PA();_A();bU();o(_h,"default")});function i3(t,e){return t=+t,e=+e,function(r){return Math.round(t*(1-r)+e*r)}}var SU=M(()=>{"use strict";o(i3,"default")});function s3(t,e,r,n,i,a){var s,l,u;return(s=Math.sqrt(t*t+e*e))&&(t/=s,e/=s),(u=t*r+e*n)&&(r-=t*u,n-=e*u),(l=Math.sqrt(r*r+n*n))&&(r/=l,n/=l,u/=l),t*n{"use strict";CU=180/Math.PI,a3={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};o(s3,"default")});function _U(t){let e=new(typeof DOMMatrix=="function"?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?a3:s3(e.a,e.b,e.c,e.d,e.e,e.f)}function LU(t){return t==null?a3:(o3||(o3=document.createElementNS("http://www.w3.org/2000/svg","g")),o3.setAttribute("transform",t),(t=o3.transform.baseVal.consolidate())?(t=t.matrix,s3(t.a,t.b,t.c,t.d,t.e,t.f)):a3)}var o3,DU=M(()=>{"use strict";AU();o(_U,"parseCss");o(LU,"parseSvg")});function NU(t,e,r,n){function i(h){return h.length?h.pop()+" ":""}o(i,"pop");function a(h,f,d,p,m,g){if(h!==d||f!==p){var y=m.push("translate(",null,e,null,r);g.push({i:y-4,x:ea(h,d)},{i:y-2,x:ea(f,p)})}else(d||p)&&m.push("translate("+d+e+p+r)}o(a,"translate");function s(h,f,d,p){h!==f?(h-f>180?f+=360:f-h>180&&(h+=360),p.push({i:d.push(i(d)+"rotate(",null,n)-2,x:ea(h,f)})):f&&d.push(i(d)+"rotate("+f+n)}o(s,"rotate");function l(h,f,d,p){h!==f?p.push({i:d.push(i(d)+"skewX(",null,n)-2,x:ea(h,f)}):f&&d.push(i(d)+"skewX("+f+n)}o(l,"skewX");function u(h,f,d,p,m,g){if(h!==d||f!==p){var y=m.push(i(m)+"scale(",null,",",null,")");g.push({i:y-4,x:ea(h,d)},{i:y-2,x:ea(f,p)})}else(d!==1||p!==1)&&m.push(i(m)+"scale("+d+","+p+")")}return o(u,"scale"),function(h,f){var d=[],p=[];return h=t(h),f=t(f),a(h.translateX,h.translateY,f.translateX,f.translateY,d,p),s(h.rotate,f.rotate,d,p),l(h.skewX,f.skewX,d,p),u(h.scaleX,h.scaleY,f.scaleX,f.scaleY,d,p),h=f=null,function(m){for(var g=-1,y=p.length,v;++g{"use strict";Ry();DU();o(NU,"interpolateTransform");BA=NU(_U,"px, ","px)","deg)"),FA=NU(LU,", ",")",")")});function MU(t){return function(e,r){var n=t((e=Ny(e)).h,(r=Ny(r)).h),i=bu(e.c,r.c),a=bu(e.l,r.l),s=bu(e.opacity,r.opacity);return function(l){return e.h=n(l),e.c=i(l),e.l=a(l),e.opacity=s(l),e+""}}}var zA,pwe,IU=M(()=>{"use strict";Pp();LA();o(MU,"hcl");zA=MU(gU),pwe=MU(bu)});var zp=M(()=>{"use strict";n3();Ry();SU();PA();RU();DA();IU()});function Fy(){return dd||(BU(mwe),dd=Py.now()+u3)}function mwe(){dd=0}function By(){this._call=this._time=this._next=null}function h3(t,e,r){var n=new By;return n.restart(t,e,r),n}function FU(){Fy(),++Gp;for(var t=l3,e;t;)(e=dd-t._time)>=0&&t._call.call(void 0,e),t=t._next;--Gp}function OU(){dd=(c3=Py.now())+u3,Gp=Iy=0;try{FU()}finally{Gp=0,ywe(),dd=0}}function gwe(){var t=Py.now(),e=t-c3;e>PU&&(u3-=e,c3=t)}function ywe(){for(var t,e=l3,r,n=1/0;e;)e._call?(n>e._time&&(n=e._time),t=e,e=e._next):(r=e._next,e._next=null,e=t?t._next=r:l3=r);Oy=t,GA(n)}function GA(t){if(!Gp){Iy&&(Iy=clearTimeout(Iy));var e=t-dd;e>24?(t<1/0&&(Iy=setTimeout(OU,t-Py.now()-u3)),My&&(My=clearInterval(My))):(My||(c3=Py.now(),My=setInterval(gwe,PU)),Gp=1,BU(OU))}}var Gp,Iy,My,PU,l3,Oy,c3,dd,u3,Py,BU,$A=M(()=>{"use strict";Gp=0,Iy=0,My=0,PU=1e3,c3=0,dd=0,u3=0,Py=typeof performance=="object"&&performance.now?performance:Date,BU=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};o(Fy,"now");o(mwe,"clearNow");o(By,"Timer");By.prototype=h3.prototype={constructor:By,restart:o(function(t,e,r){if(typeof t!="function")throw new TypeError("callback is not a function");r=(r==null?Fy():+r)+(e==null?0:+e),!this._next&&Oy!==this&&(Oy?Oy._next=this:l3=this,Oy=this),this._call=t,this._time=r,GA()},"restart"),stop:o(function(){this._call&&(this._call=null,this._time=1/0,GA())},"stop")};o(h3,"timer");o(FU,"timerFlush");o(OU,"wake");o(gwe,"poke");o(ywe,"nap");o(GA,"sleep")});function zy(t,e,r){var n=new By;return e=e==null?0:+e,n.restart(i=>{n.stop(),t(i+e)},e,r),n}var zU=M(()=>{"use strict";$A();o(zy,"default")});var f3=M(()=>{"use strict";$A();zU()});function wu(t,e,r,n,i,a){var s=t.__transition;if(!s)t.__transition={};else if(r in s)return;bwe(t,r,{name:e,index:n,group:i,on:vwe,tween:xwe,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:VU})}function $y(t,e){var r=zi(t,e);if(r.state>VU)throw new Error("too late; already scheduled");return r}function pa(t,e){var r=zi(t,e);if(r.state>d3)throw new Error("too late; already running");return r}function zi(t,e){var r=t.__transition;if(!r||!(r=r[e]))throw new Error("transition not found");return r}function bwe(t,e,r){var n=t.__transition,i;n[e]=r,r.timer=h3(a,0,r.time);function a(h){r.state=GU,r.timer.restart(s,r.delay,r.time),r.delay<=h&&s(h-r.delay)}o(a,"schedule");function s(h){var f,d,p,m;if(r.state!==GU)return u();for(f in n)if(m=n[f],m.name===r.name){if(m.state===d3)return zy(s);m.state===$U?(m.state=Gy,m.timer.stop(),m.on.call("interrupt",t,t.__data__,m.index,m.group),delete n[f]):+f{"use strict";T7();f3();vwe=w7("start","end","cancel","interrupt"),xwe=[],VU=0,GU=1,p3=2,d3=3,$U=4,m3=5,Gy=6;o(wu,"default");o($y,"init");o(pa,"set");o(zi,"get");o(bwe,"create")});function Vy(t,e){var r=t.__transition,n,i,a=!0,s;if(r){e=e==null?null:e+"";for(s in r){if((n=r[s]).name!==e){a=!1;continue}i=n.state>p3&&n.state{"use strict";Cs();o(Vy,"default")});function VA(t){return this.each(function(){Vy(this,t)})}var HU=M(()=>{"use strict";UU();o(VA,"default")});function wwe(t,e){var r,n;return function(){var i=pa(this,t),a=i.tween;if(a!==r){n=r=a;for(var s=0,l=n.length;s{"use strict";Cs();o(wwe,"tweenRemove");o(Twe,"tweenFunction");o(UA,"default");o($p,"tweenValue")});function Hy(t,e){var r;return(typeof e=="number"?ea:e instanceof El?fd:(r=El(e))?(e=r,fd):Fp)(t,e)}var HA=M(()=>{"use strict";Pp();zp();o(Hy,"default")});function kwe(t){return function(){this.removeAttribute(t)}}function Ewe(t){return function(){this.removeAttributeNS(t.space,t.local)}}function Swe(t,e,r){var n,i=r+"",a;return function(){var s=this.getAttribute(t);return s===i?null:s===n?a:a=e(n=s,r)}}function Cwe(t,e,r){var n,i=r+"",a;return function(){var s=this.getAttributeNS(t.space,t.local);return s===i?null:s===n?a:a=e(n=s,r)}}function Awe(t,e,r){var n,i,a;return function(){var s,l=r(this),u;return l==null?void this.removeAttribute(t):(s=this.getAttribute(t),u=l+"",s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l)))}}function _we(t,e,r){var n,i,a;return function(){var s,l=r(this),u;return l==null?void this.removeAttributeNS(t.space,t.local):(s=this.getAttributeNS(t.space,t.local),u=l+"",s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l)))}}function WA(t,e){var r=pc(t),n=r==="transform"?FA:Hy;return this.attrTween(t,typeof e=="function"?(r.local?_we:Awe)(r,n,$p(this,"attr."+t,e)):e==null?(r.local?Ewe:kwe)(r):(r.local?Cwe:Swe)(r,n,e))}var WU=M(()=>{"use strict";zp();Tl();Uy();HA();o(kwe,"attrRemove");o(Ewe,"attrRemoveNS");o(Swe,"attrConstant");o(Cwe,"attrConstantNS");o(Awe,"attrFunction");o(_we,"attrFunctionNS");o(WA,"default")});function Lwe(t,e){return function(r){this.setAttribute(t,e.call(this,r))}}function Dwe(t,e){return function(r){this.setAttributeNS(t.space,t.local,e.call(this,r))}}function Nwe(t,e){var r,n;function i(){var a=e.apply(this,arguments);return a!==n&&(r=(n=a)&&Dwe(t,a)),r}return o(i,"tween"),i._value=e,i}function Rwe(t,e){var r,n;function i(){var a=e.apply(this,arguments);return a!==n&&(r=(n=a)&&Lwe(t,a)),r}return o(i,"tween"),i._value=e,i}function YA(t,e){var r="attr."+t;if(arguments.length<2)return(r=this.tween(r))&&r._value;if(e==null)return this.tween(r,null);if(typeof e!="function")throw new Error;var n=pc(t);return this.tween(r,(n.local?Nwe:Rwe)(n,e))}var YU=M(()=>{"use strict";Tl();o(Lwe,"attrInterpolate");o(Dwe,"attrInterpolateNS");o(Nwe,"attrTweenNS");o(Rwe,"attrTween");o(YA,"default")});function Mwe(t,e){return function(){$y(this,t).delay=+e.apply(this,arguments)}}function Iwe(t,e){return e=+e,function(){$y(this,t).delay=e}}function qA(t){var e=this._id;return arguments.length?this.each((typeof t=="function"?Mwe:Iwe)(e,t)):zi(this.node(),e).delay}var qU=M(()=>{"use strict";Cs();o(Mwe,"delayFunction");o(Iwe,"delayConstant");o(qA,"default")});function Owe(t,e){return function(){pa(this,t).duration=+e.apply(this,arguments)}}function Pwe(t,e){return e=+e,function(){pa(this,t).duration=e}}function XA(t){var e=this._id;return arguments.length?this.each((typeof t=="function"?Owe:Pwe)(e,t)):zi(this.node(),e).duration}var XU=M(()=>{"use strict";Cs();o(Owe,"durationFunction");o(Pwe,"durationConstant");o(XA,"default")});function Bwe(t,e){if(typeof e!="function")throw new Error;return function(){pa(this,t).ease=e}}function jA(t){var e=this._id;return arguments.length?this.each(Bwe(e,t)):zi(this.node(),e).ease}var jU=M(()=>{"use strict";Cs();o(Bwe,"easeConstant");o(jA,"default")});function Fwe(t,e){return function(){var r=e.apply(this,arguments);if(typeof r!="function")throw new Error;pa(this,t).ease=r}}function KA(t){if(typeof t!="function")throw new Error;return this.each(Fwe(this._id,t))}var KU=M(()=>{"use strict";Cs();o(Fwe,"easeVarying");o(KA,"default")});function QA(t){typeof t!="function"&&(t=Np(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i{"use strict";Tl();pd();o(QA,"default")});function ZA(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,r=t._groups,n=e.length,i=r.length,a=Math.min(n,i),s=new Array(n),l=0;l{"use strict";pd();o(ZA,"default")});function zwe(t){return(t+"").trim().split(/^|\s+/).every(function(e){var r=e.indexOf(".");return r>=0&&(e=e.slice(0,r)),!e||e==="start"})}function Gwe(t,e,r){var n,i,a=zwe(e)?$y:pa;return function(){var s=a(this,t),l=s.on;l!==n&&(i=(n=l).copy()).on(e,r),s.on=i}}function JA(t,e){var r=this._id;return arguments.length<2?zi(this.node(),r).on.on(t):this.each(Gwe(r,t,e))}var JU=M(()=>{"use strict";Cs();o(zwe,"start");o(Gwe,"onFunction");o(JA,"default")});function $we(t){return function(){var e=this.parentNode;for(var r in this.__transition)if(+r!==t)return;e&&e.removeChild(this)}}function e8(){return this.on("end.remove",$we(this._id))}var eH=M(()=>{"use strict";o($we,"removeFunction");o(e8,"default")});function t8(t){var e=this._name,r=this._id;typeof t!="function"&&(t=Eh(t));for(var n=this._groups,i=n.length,a=new Array(i),s=0;s{"use strict";Tl();pd();Cs();o(t8,"default")});function r8(t){var e=this._name,r=this._id;typeof t!="function"&&(t=Dp(t));for(var n=this._groups,i=n.length,a=[],s=[],l=0;l{"use strict";Tl();pd();Cs();o(r8,"default")});function n8(){return new Vwe(this._groups,this._parents)}var Vwe,nH=M(()=>{"use strict";Tl();Vwe=vu.prototype.constructor;o(n8,"default")});function Uwe(t,e){var r,n,i;return function(){var a=Sh(this,t),s=(this.style.removeProperty(t),Sh(this,t));return a===s?null:a===r&&s===n?i:i=e(r=a,n=s)}}function iH(t){return function(){this.style.removeProperty(t)}}function Hwe(t,e,r){var n,i=r+"",a;return function(){var s=Sh(this,t);return s===i?null:s===n?a:a=e(n=s,r)}}function Wwe(t,e,r){var n,i,a;return function(){var s=Sh(this,t),l=r(this),u=l+"";return l==null&&(u=l=(this.style.removeProperty(t),Sh(this,t))),s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l))}}function Ywe(t,e){var r,n,i,a="style."+e,s="end."+a,l;return function(){var u=pa(this,t),h=u.on,f=u.value[a]==null?l||(l=iH(e)):void 0;(h!==r||i!==f)&&(n=(r=h).copy()).on(s,i=f),u.on=n}}function i8(t,e,r){var n=(t+="")=="transform"?BA:Hy;return e==null?this.styleTween(t,Uwe(t,n)).on("end.style."+t,iH(t)):typeof e=="function"?this.styleTween(t,Wwe(t,n,$p(this,"style."+t,e))).each(Ywe(this._id,t)):this.styleTween(t,Hwe(t,n,e),r).on("end.style."+t,null)}var aH=M(()=>{"use strict";zp();Tl();Cs();Uy();HA();o(Uwe,"styleNull");o(iH,"styleRemove");o(Hwe,"styleConstant");o(Wwe,"styleFunction");o(Ywe,"styleMaybeRemove");o(i8,"default")});function qwe(t,e,r){return function(n){this.style.setProperty(t,e.call(this,n),r)}}function Xwe(t,e,r){var n,i;function a(){var s=e.apply(this,arguments);return s!==i&&(n=(i=s)&&qwe(t,s,r)),n}return o(a,"tween"),a._value=e,a}function a8(t,e,r){var n="style."+(t+="");if(arguments.length<2)return(n=this.tween(n))&&n._value;if(e==null)return this.tween(n,null);if(typeof e!="function")throw new Error;return this.tween(n,Xwe(t,e,r??""))}var sH=M(()=>{"use strict";o(qwe,"styleInterpolate");o(Xwe,"styleTween");o(a8,"default")});function jwe(t){return function(){this.textContent=t}}function Kwe(t){return function(){var e=t(this);this.textContent=e??""}}function s8(t){return this.tween("text",typeof t=="function"?Kwe($p(this,"text",t)):jwe(t==null?"":t+""))}var oH=M(()=>{"use strict";Uy();o(jwe,"textConstant");o(Kwe,"textFunction");o(s8,"default")});function Qwe(t){return function(e){this.textContent=t.call(this,e)}}function Zwe(t){var e,r;function n(){var i=t.apply(this,arguments);return i!==r&&(e=(r=i)&&Qwe(i)),e}return o(n,"tween"),n._value=t,n}function o8(t){var e="text";if(arguments.length<1)return(e=this.tween(e))&&e._value;if(t==null)return this.tween(e,null);if(typeof t!="function")throw new Error;return this.tween(e,Zwe(t))}var lH=M(()=>{"use strict";o(Qwe,"textInterpolate");o(Zwe,"textTween");o(o8,"default")});function l8(){for(var t=this._name,e=this._id,r=g3(),n=this._groups,i=n.length,a=0;a{"use strict";pd();Cs();o(l8,"default")});function c8(){var t,e,r=this,n=r._id,i=r.size();return new Promise(function(a,s){var l={value:s},u={value:o(function(){--i===0&&a()},"value")};r.each(function(){var h=pa(this,n),f=h.on;f!==t&&(e=(t=f).copy(),e._.cancel.push(l),e._.interrupt.push(l),e._.end.push(u)),h.on=e}),i===0&&a()})}var uH=M(()=>{"use strict";Cs();o(c8,"default")});function rs(t,e,r,n){this._groups=t,this._parents=e,this._name=r,this._id=n}function hH(t){return vu().transition(t)}function g3(){return++Jwe}var Jwe,Tu,pd=M(()=>{"use strict";Tl();WU();YU();qU();XU();jU();KU();QU();ZU();JU();eH();tH();rH();nH();aH();sH();oH();lH();cH();Uy();uH();Jwe=0;o(rs,"Transition");o(hH,"transition");o(g3,"newId");Tu=vu.prototype;rs.prototype=hH.prototype={constructor:rs,select:t8,selectAll:r8,selectChild:Tu.selectChild,selectChildren:Tu.selectChildren,filter:QA,merge:ZA,selection:n8,transition:l8,call:Tu.call,nodes:Tu.nodes,node:Tu.node,size:Tu.size,empty:Tu.empty,each:Tu.each,on:JA,attr:WA,attrTween:YA,style:i8,styleTween:a8,text:s8,textTween:o8,remove:e8,tween:UA,delay:qA,duration:XA,ease:jA,easeVarying:KA,end:c8,[Symbol.iterator]:Tu[Symbol.iterator]}});function y3(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}var fH=M(()=>{"use strict";o(y3,"cubicInOut")});var u8=M(()=>{"use strict";fH()});function tTe(t,e){for(var r;!(r=t.__transition)||!(r=r[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return r}function h8(t){var e,r;t instanceof rs?(e=t._id,t=t._name):(e=g3(),(r=eTe).time=Fy(),t=t==null?null:t+"");for(var n=this._groups,i=n.length,a=0;a{"use strict";pd();Cs();u8();f3();eTe={time:null,delay:0,duration:250,ease:y3};o(tTe,"inherit");o(h8,"default")});var pH=M(()=>{"use strict";Tl();HU();dH();vu.prototype.interrupt=VA;vu.prototype.transition=h8});var v3=M(()=>{"use strict";pH()});var mH=M(()=>{"use strict"});var gH=M(()=>{"use strict"});var yH=M(()=>{"use strict"});function vH(t){return[+t[0],+t[1]]}function rTe(t){return[vH(t[0]),vH(t[1])]}function f8(t){return{type:t}}var Agt,_gt,Lgt,Dgt,Ngt,Rgt,xH=M(()=>{"use strict";v3();mH();gH();yH();({abs:Agt,max:_gt,min:Lgt}=Math);o(vH,"number1");o(rTe,"number2");Dgt={name:"x",handles:["w","e"].map(f8),input:o(function(t,e){return t==null?null:[[+t[0],e[0][1]],[+t[1],e[1][1]]]},"input"),output:o(function(t){return t&&[t[0][0],t[1][0]]},"output")},Ngt={name:"y",handles:["n","s"].map(f8),input:o(function(t,e){return t==null?null:[[e[0][0],+t[0]],[e[1][0],+t[1]]]},"input"),output:o(function(t){return t&&[t[0][1],t[1][1]]},"output")},Rgt={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(f8),input:o(function(t){return t==null?null:rTe(t)},"input"),output:o(function(t){return t},"output")};o(f8,"type")});var bH=M(()=>{"use strict";xH()});function wH(t){this._+=t[0];for(let e=1,r=t.length;e=0))throw new Error(`invalid digits: ${t}`);if(e>15)return wH;let r=10**e;return function(n){this._+=n[0];for(let i=1,a=n.length;i{"use strict";d8=Math.PI,p8=2*d8,md=1e-6,nTe=p8-md;o(wH,"append");o(iTe,"appendRound");gd=class{static{o(this,"Path")}constructor(e){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=e==null?wH:iTe(e)}moveTo(e,r){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+r}`}closePath(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(e,r){this._append`L${this._x1=+e},${this._y1=+r}`}quadraticCurveTo(e,r,n,i){this._append`Q${+e},${+r},${this._x1=+n},${this._y1=+i}`}bezierCurveTo(e,r,n,i,a,s){this._append`C${+e},${+r},${+n},${+i},${this._x1=+a},${this._y1=+s}`}arcTo(e,r,n,i,a){if(e=+e,r=+r,n=+n,i=+i,a=+a,a<0)throw new Error(`negative radius: ${a}`);let s=this._x1,l=this._y1,u=n-e,h=i-r,f=s-e,d=l-r,p=f*f+d*d;if(this._x1===null)this._append`M${this._x1=e},${this._y1=r}`;else if(p>md)if(!(Math.abs(d*u-h*f)>md)||!a)this._append`L${this._x1=e},${this._y1=r}`;else{let m=n-s,g=i-l,y=u*u+h*h,v=m*m+g*g,x=Math.sqrt(y),b=Math.sqrt(p),w=a*Math.tan((d8-Math.acos((y+p-v)/(2*x*b)))/2),_=w/b,T=w/x;Math.abs(_-1)>md&&this._append`L${e+_*f},${r+_*d}`,this._append`A${a},${a},0,0,${+(d*m>f*g)},${this._x1=e+T*u},${this._y1=r+T*h}`}}arc(e,r,n,i,a,s){if(e=+e,r=+r,n=+n,s=!!s,n<0)throw new Error(`negative radius: ${n}`);let l=n*Math.cos(i),u=n*Math.sin(i),h=e+l,f=r+u,d=1^s,p=s?i-a:a-i;this._x1===null?this._append`M${h},${f}`:(Math.abs(this._x1-h)>md||Math.abs(this._y1-f)>md)&&this._append`L${h},${f}`,n&&(p<0&&(p=p%p8+p8),p>nTe?this._append`A${n},${n},0,1,${d},${e-l},${r-u}A${n},${n},0,1,${d},${this._x1=h},${this._y1=f}`:p>md&&this._append`A${n},${n},0,${+(p>=d8)},${d},${this._x1=e+n*Math.cos(a)},${this._y1=r+n*Math.sin(a)}`)}rect(e,r,n,i){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+r}h${n=+n}v${+i}h${-n}Z`}toString(){return this._}};o(TH,"path");TH.prototype=gd.prototype});var m8=M(()=>{"use strict";kH()});var EH=M(()=>{"use strict"});var SH=M(()=>{"use strict"});var CH=M(()=>{"use strict"});var AH=M(()=>{"use strict"});var _H=M(()=>{"use strict"});var LH=M(()=>{"use strict"});var DH=M(()=>{"use strict"});function g8(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)}function yd(t,e){if((r=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var r,n=t.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+t.slice(r+1)]}var Wy=M(()=>{"use strict";o(g8,"default");o(yd,"formatDecimalParts")});function Sl(t){return t=yd(Math.abs(t)),t?t[1]:NaN}var Yy=M(()=>{"use strict";Wy();o(Sl,"default")});function y8(t,e){return function(r,n){for(var i=r.length,a=[],s=0,l=t[0],u=0;i>0&&l>0&&(u+l+1>n&&(l=Math.max(1,n-u)),a.push(r.substring(i-=l,i+l)),!((u+=l+1)>n));)l=t[s=(s+1)%t.length];return a.reverse().join(e)}}var NH=M(()=>{"use strict";o(y8,"default")});function v8(t){return function(e){return e.replace(/[0-9]/g,function(r){return t[+r]})}}var RH=M(()=>{"use strict";o(v8,"default")});function Lh(t){if(!(e=aTe.exec(t)))throw new Error("invalid format: "+t);var e;return new x3({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function x3(t){this.fill=t.fill===void 0?" ":t.fill+"",this.align=t.align===void 0?">":t.align+"",this.sign=t.sign===void 0?"-":t.sign+"",this.symbol=t.symbol===void 0?"":t.symbol+"",this.zero=!!t.zero,this.width=t.width===void 0?void 0:+t.width,this.comma=!!t.comma,this.precision=t.precision===void 0?void 0:+t.precision,this.trim=!!t.trim,this.type=t.type===void 0?"":t.type+""}var aTe,x8=M(()=>{"use strict";aTe=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;o(Lh,"formatSpecifier");Lh.prototype=x3.prototype;o(x3,"FormatSpecifier");x3.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type}});function b8(t){e:for(var e=t.length,r=1,n=-1,i;r0&&(n=0);break}return n>0?t.slice(0,n)+t.slice(i+1):t}var MH=M(()=>{"use strict";o(b8,"default")});function T8(t,e){var r=yd(t,e);if(!r)return t+"";var n=r[0],i=r[1],a=i-(w8=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,s=n.length;return a===s?n:a>s?n+new Array(a-s+1).join("0"):a>0?n.slice(0,a)+"."+n.slice(a):"0."+new Array(1-a).join("0")+yd(t,Math.max(0,e+a-1))[0]}var w8,k8=M(()=>{"use strict";Wy();o(T8,"default")});function b3(t,e){var r=yd(t,e);if(!r)return t+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}var IH=M(()=>{"use strict";Wy();o(b3,"default")});var E8,OH=M(()=>{"use strict";Wy();k8();IH();E8={"%":o((t,e)=>(t*100).toFixed(e),"%"),b:o(t=>Math.round(t).toString(2),"b"),c:o(t=>t+"","c"),d:g8,e:o((t,e)=>t.toExponential(e),"e"),f:o((t,e)=>t.toFixed(e),"f"),g:o((t,e)=>t.toPrecision(e),"g"),o:o(t=>Math.round(t).toString(8),"o"),p:o((t,e)=>b3(t*100,e),"p"),r:b3,s:T8,X:o(t=>Math.round(t).toString(16).toUpperCase(),"X"),x:o(t=>Math.round(t).toString(16),"x")}});function w3(t){return t}var PH=M(()=>{"use strict";o(w3,"default")});function S8(t){var e=t.grouping===void 0||t.thousands===void 0?w3:y8(BH.call(t.grouping,Number),t.thousands+""),r=t.currency===void 0?"":t.currency[0]+"",n=t.currency===void 0?"":t.currency[1]+"",i=t.decimal===void 0?".":t.decimal+"",a=t.numerals===void 0?w3:v8(BH.call(t.numerals,String)),s=t.percent===void 0?"%":t.percent+"",l=t.minus===void 0?"\u2212":t.minus+"",u=t.nan===void 0?"NaN":t.nan+"";function h(d){d=Lh(d);var p=d.fill,m=d.align,g=d.sign,y=d.symbol,v=d.zero,x=d.width,b=d.comma,w=d.precision,_=d.trim,T=d.type;T==="n"?(b=!0,T="g"):E8[T]||(w===void 0&&(w=12),_=!0,T="g"),(v||p==="0"&&m==="=")&&(v=!0,p="0",m="=");var E=y==="$"?r:y==="#"&&/[boxX]/.test(T)?"0"+T.toLowerCase():"",L=y==="$"?n:/[%p]/.test(T)?s:"",S=E8[T],A=/[defgprs%]/.test(T);w=w===void 0?6:/[gprs]/.test(T)?Math.max(1,Math.min(21,w)):Math.max(0,Math.min(20,w));function I(D){var k=E,R=L,C,O,N;if(T==="c")R=S(D)+R,D="";else{D=+D;var P=D<0||1/D<0;if(D=isNaN(D)?u:S(Math.abs(D),w),_&&(D=b8(D)),P&&+D==0&&g!=="+"&&(P=!1),k=(P?g==="("?g:l:g==="-"||g==="("?"":g)+k,R=(T==="s"?FH[8+w8/3]:"")+R+(P&&g==="("?")":""),A){for(C=-1,O=D.length;++CN||N>57){R=(N===46?i+D.slice(C+1):D.slice(C))+R,D=D.slice(0,C);break}}}b&&!v&&(D=e(D,1/0));var F=k.length+D.length+R.length,B=F>1)+k+D+R+B.slice(F);break;default:D=B+k+D+R;break}return a(D)}return o(I,"format"),I.toString=function(){return d+""},I}o(h,"newFormat");function f(d,p){var m=h((d=Lh(d),d.type="f",d)),g=Math.max(-8,Math.min(8,Math.floor(Sl(p)/3)))*3,y=Math.pow(10,-g),v=FH[8+g/3];return function(x){return m(y*x)+v}}return o(f,"formatPrefix"),{format:h,formatPrefix:f}}var BH,FH,zH=M(()=>{"use strict";Yy();NH();RH();x8();MH();OH();k8();PH();BH=Array.prototype.map,FH=["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];o(S8,"default")});function C8(t){return T3=S8(t),k3=T3.format,E3=T3.formatPrefix,T3}var T3,k3,E3,GH=M(()=>{"use strict";zH();C8({thousands:",",grouping:[3],currency:["$",""]});o(C8,"defaultLocale")});function S3(t){return Math.max(0,-Sl(Math.abs(t)))}var $H=M(()=>{"use strict";Yy();o(S3,"default")});function C3(t,e){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(Sl(e)/3)))*3-Sl(Math.abs(t)))}var VH=M(()=>{"use strict";Yy();o(C3,"default")});function A3(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,Sl(e)-Sl(t))+1}var UH=M(()=>{"use strict";Yy();o(A3,"default")});var A8=M(()=>{"use strict";GH();x8();$H();VH();UH()});var HH=M(()=>{"use strict"});var WH=M(()=>{"use strict"});var YH=M(()=>{"use strict"});var qH=M(()=>{"use strict"});function Dh(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t);break}return this}var qy=M(()=>{"use strict";o(Dh,"initRange")});function ku(){var t=new _p,e=[],r=[],n=_8;function i(a){let s=t.get(a);if(s===void 0){if(n!==_8)return n;t.set(a,s=e.push(a)-1)}return r[s%r.length]}return o(i,"scale"),i.domain=function(a){if(!arguments.length)return e.slice();e=[],t=new _p;for(let s of a)t.has(s)||t.set(s,e.push(s)-1);return i},i.range=function(a){return arguments.length?(r=Array.from(a),i):r.slice()},i.unknown=function(a){return arguments.length?(n=a,i):n},i.copy=function(){return ku(e,r).unknown(n)},Dh.apply(i,arguments),i}var _8,L8=M(()=>{"use strict";kh();qy();_8=Symbol("implicit");o(ku,"ordinal")});function Vp(){var t=ku().unknown(void 0),e=t.domain,r=t.range,n=0,i=1,a,s,l=!1,u=0,h=0,f=.5;delete t.unknown;function d(){var p=e().length,m=i{"use strict";kh();qy();L8();o(Vp,"band")});function D8(t){return function(){return t}}var jH=M(()=>{"use strict";o(D8,"constants")});function N8(t){return+t}var KH=M(()=>{"use strict";o(N8,"number")});function Up(t){return t}function R8(t,e){return(e-=t=+t)?function(r){return(r-t)/e}:D8(isNaN(e)?NaN:.5)}function sTe(t,e){var r;return t>e&&(r=t,t=e,e=r),function(n){return Math.max(t,Math.min(e,n))}}function oTe(t,e,r){var n=t[0],i=t[1],a=e[0],s=e[1];return i2?lTe:oTe,u=h=null,d}o(f,"rescale");function d(p){return p==null||isNaN(p=+p)?a:(u||(u=l(t.map(n),e,r)))(n(s(p)))}return o(d,"scale"),d.invert=function(p){return s(i((h||(h=l(e,t.map(n),ea)))(p)))},d.domain=function(p){return arguments.length?(t=Array.from(p,N8),f()):t.slice()},d.range=function(p){return arguments.length?(e=Array.from(p),f()):e.slice()},d.rangeRound=function(p){return e=Array.from(p),r=i3,f()},d.clamp=function(p){return arguments.length?(s=p?!0:Up,f()):s!==Up},d.interpolate=function(p){return arguments.length?(r=p,f()):r},d.unknown=function(p){return arguments.length?(a=p,d):a},function(p,m){return n=p,i=m,f()}}function Xy(){return cTe()(Up,Up)}var QH,M8=M(()=>{"use strict";kh();zp();jH();KH();QH=[0,1];o(Up,"identity");o(R8,"normalize");o(sTe,"clamper");o(oTe,"bimap");o(lTe,"polymap");o(_3,"copy");o(cTe,"transformer");o(Xy,"continuous")});function I8(t,e,r,n){var i=Lp(t,e,r),a;switch(n=Lh(n??",f"),n.type){case"s":{var s=Math.max(Math.abs(t),Math.abs(e));return n.precision==null&&!isNaN(a=C3(i,s))&&(n.precision=a),E3(n,s)}case"":case"e":case"g":case"p":case"r":{n.precision==null&&!isNaN(a=A3(i,Math.max(Math.abs(t),Math.abs(e))))&&(n.precision=a-(n.type==="e"));break}case"f":case"%":{n.precision==null&&!isNaN(a=S3(i))&&(n.precision=a-(n.type==="%")*2);break}}return k3(n)}var ZH=M(()=>{"use strict";kh();A8();o(I8,"tickFormat")});function uTe(t){var e=t.domain;return t.ticks=function(r){var n=e();return $4(n[0],n[n.length-1],r??10)},t.tickFormat=function(r,n){var i=e();return I8(i[0],i[i.length-1],r??10,n)},t.nice=function(r){r==null&&(r=10);var n=e(),i=0,a=n.length-1,s=n[i],l=n[a],u,h,f=10;for(l0;){if(h=ky(s,l,r),h===u)return n[i]=s,n[a]=l,e(n);if(h>0)s=Math.floor(s/h)*h,l=Math.ceil(l/h)*h;else if(h<0)s=Math.ceil(s*h)/h,l=Math.floor(l*h)/h;else break;u=h}return t},t}function Cl(){var t=Xy();return t.copy=function(){return _3(t,Cl())},Dh.apply(t,arguments),uTe(t)}var JH=M(()=>{"use strict";kh();M8();qy();ZH();o(uTe,"linearish");o(Cl,"linear")});function O8(t,e){t=t.slice();var r=0,n=t.length-1,i=t[r],a=t[n],s;return a{"use strict";o(O8,"nice")});function vn(t,e,r,n){function i(a){return t(a=arguments.length===0?new Date:new Date(+a)),a}return o(i,"interval"),i.floor=a=>(t(a=new Date(+a)),a),i.ceil=a=>(t(a=new Date(a-1)),e(a,1),t(a),a),i.round=a=>{let s=i(a),l=i.ceil(a);return a-s(e(a=new Date(+a),s==null?1:Math.floor(s)),a),i.range=(a,s,l)=>{let u=[];if(a=i.ceil(a),l=l==null?1:Math.floor(l),!(a0))return u;let h;do u.push(h=new Date(+a)),e(a,l),t(a);while(hvn(s=>{if(s>=s)for(;t(s),!a(s);)s.setTime(s-1)},(s,l)=>{if(s>=s)if(l<0)for(;++l<=0;)for(;e(s,-1),!a(s););else for(;--l>=0;)for(;e(s,1),!a(s););}),r&&(i.count=(a,s)=>(P8.setTime(+a),B8.setTime(+s),t(P8),t(B8),Math.floor(r(P8,B8))),i.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?i.filter(n?s=>n(s)%a===0:s=>i.count(0,s)%a===0):i)),i}var P8,B8,Eu=M(()=>{"use strict";P8=new Date,B8=new Date;o(vn,"timeInterval")});var yc,tW,F8=M(()=>{"use strict";Eu();yc=vn(()=>{},(t,e)=>{t.setTime(+t+e)},(t,e)=>e-t);yc.every=t=>(t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?vn(e=>{e.setTime(Math.floor(e/t)*t)},(e,r)=>{e.setTime(+e+r*t)},(e,r)=>(r-e)/t):yc);tW=yc.range});var to,rW,z8=M(()=>{"use strict";Eu();to=vn(t=>{t.setTime(t-t.getMilliseconds())},(t,e)=>{t.setTime(+t+e*1e3)},(t,e)=>(e-t)/1e3,t=>t.getUTCSeconds()),rW=to.range});var Su,hTe,L3,fTe,G8=M(()=>{"use strict";Eu();Su=vn(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*1e3)},(t,e)=>{t.setTime(+t+e*6e4)},(t,e)=>(e-t)/6e4,t=>t.getMinutes()),hTe=Su.range,L3=vn(t=>{t.setUTCSeconds(0,0)},(t,e)=>{t.setTime(+t+e*6e4)},(t,e)=>(e-t)/6e4,t=>t.getUTCMinutes()),fTe=L3.range});var Cu,dTe,D3,pTe,$8=M(()=>{"use strict";Eu();Cu=vn(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*1e3-t.getMinutes()*6e4)},(t,e)=>{t.setTime(+t+e*36e5)},(t,e)=>(e-t)/36e5,t=>t.getHours()),dTe=Cu.range,D3=vn(t=>{t.setUTCMinutes(0,0,0)},(t,e)=>{t.setTime(+t+e*36e5)},(t,e)=>(e-t)/36e5,t=>t.getUTCHours()),pTe=D3.range});var Oo,mTe,Ky,gTe,N3,yTe,V8=M(()=>{"use strict";Eu();Oo=vn(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*6e4)/864e5,t=>t.getDate()-1),mTe=Oo.range,Ky=vn(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>t.getUTCDate()-1),gTe=Ky.range,N3=vn(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>Math.floor(t/864e5)),yTe=N3.range});function bd(t){return vn(e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},(e,r)=>{e.setDate(e.getDate()+r*7)},(e,r)=>(r-e-(r.getTimezoneOffset()-e.getTimezoneOffset())*6e4)/6048e5)}function wd(t){return vn(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCDate(e.getUTCDate()+r*7)},(e,r)=>(r-e)/6048e5)}var Al,Nh,R3,M3,xc,I3,O3,iW,vTe,xTe,bTe,wTe,TTe,kTe,Td,Hp,aW,sW,Rh,oW,lW,cW,ETe,STe,CTe,ATe,_Te,LTe,U8=M(()=>{"use strict";Eu();o(bd,"timeWeekday");Al=bd(0),Nh=bd(1),R3=bd(2),M3=bd(3),xc=bd(4),I3=bd(5),O3=bd(6),iW=Al.range,vTe=Nh.range,xTe=R3.range,bTe=M3.range,wTe=xc.range,TTe=I3.range,kTe=O3.range;o(wd,"utcWeekday");Td=wd(0),Hp=wd(1),aW=wd(2),sW=wd(3),Rh=wd(4),oW=wd(5),lW=wd(6),cW=Td.range,ETe=Hp.range,STe=aW.range,CTe=sW.range,ATe=Rh.range,_Te=oW.range,LTe=lW.range});var Au,DTe,P3,NTe,H8=M(()=>{"use strict";Eu();Au=vn(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,e)=>{t.setMonth(t.getMonth()+e)},(t,e)=>e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12,t=>t.getMonth()),DTe=Au.range,P3=vn(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)},(t,e)=>e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12,t=>t.getUTCMonth()),NTe=P3.range});var ro,RTe,_l,MTe,W8=M(()=>{"use strict";Eu();ro=vn(t=>{t.setMonth(0,1),t.setHours(0,0,0,0)},(t,e)=>{t.setFullYear(t.getFullYear()+e)},(t,e)=>e.getFullYear()-t.getFullYear(),t=>t.getFullYear());ro.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:vn(e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,r)=>{e.setFullYear(e.getFullYear()+r*t)});RTe=ro.range,_l=vn(t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)},(t,e)=>e.getUTCFullYear()-t.getUTCFullYear(),t=>t.getUTCFullYear());_l.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:vn(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCFullYear(e.getUTCFullYear()+r*t)});MTe=_l.range});function hW(t,e,r,n,i,a){let s=[[to,1,1e3],[to,5,5*1e3],[to,15,15*1e3],[to,30,30*1e3],[a,1,6e4],[a,5,5*6e4],[a,15,15*6e4],[a,30,30*6e4],[i,1,36e5],[i,3,3*36e5],[i,6,6*36e5],[i,12,12*36e5],[n,1,864e5],[n,2,2*864e5],[r,1,6048e5],[e,1,2592e6],[e,3,3*2592e6],[t,1,31536e6]];function l(h,f,d){let p=fv).right(s,p);if(m===s.length)return t.every(Lp(h/31536e6,f/31536e6,d));if(m===0)return yc.every(Math.max(Lp(h,f,d),1));let[g,y]=s[p/s[m-1][2]{"use strict";kh();F8();z8();G8();$8();V8();U8();H8();W8();o(hW,"ticker");[OTe,PTe]=hW(_l,P3,Td,N3,D3,L3),[Y8,q8]=hW(ro,Au,Al,Oo,Cu,Su)});var B3=M(()=>{"use strict";F8();z8();G8();$8();V8();U8();H8();W8();fW()});function X8(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function j8(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Qy(t,e,r){return{y:t,m:e,d:r,H:0,M:0,S:0,L:0}}function K8(t){var e=t.dateTime,r=t.date,n=t.time,i=t.periods,a=t.days,s=t.shortDays,l=t.months,u=t.shortMonths,h=Zy(i),f=Jy(i),d=Zy(a),p=Jy(a),m=Zy(s),g=Jy(s),y=Zy(l),v=Jy(l),x=Zy(u),b=Jy(u),w={a:P,A:F,b:B,B:G,c:null,d:vW,e:vW,f:ake,g:mke,G:yke,H:rke,I:nke,j:ike,L:kW,m:ske,M:oke,p:z,q:W,Q:wW,s:TW,S:lke,u:cke,U:uke,V:hke,w:fke,W:dke,x:null,X:null,y:pke,Y:gke,Z:vke,"%":bW},_={a:Z,A:j,b:oe,B:K,c:null,d:xW,e:xW,f:Tke,g:Rke,G:Ike,H:xke,I:bke,j:wke,L:SW,m:kke,M:Eke,p:ee,q:J,Q:wW,s:TW,S:Ske,u:Cke,U:Ake,V:_ke,w:Lke,W:Dke,x:null,X:null,y:Nke,Y:Mke,Z:Oke,"%":bW},T={a:I,A:D,b:k,B:R,c:C,d:gW,e:gW,f:ZTe,g:mW,G:pW,H:yW,I:yW,j:XTe,L:QTe,m:qTe,M:jTe,p:A,q:YTe,Q:eke,s:tke,S:KTe,u:$Te,U:VTe,V:UTe,w:GTe,W:HTe,x:O,X:N,y:mW,Y:pW,Z:WTe,"%":JTe};w.x=E(r,w),w.X=E(n,w),w.c=E(e,w),_.x=E(r,_),_.X=E(n,_),_.c=E(e,_);function E(H,q){return function(Q){var ae=[],ue=-1,ce=0,te=H.length,Ne,se,ke;for(Q instanceof Date||(Q=new Date(+Q));++ue53)return null;"w"in ae||(ae.w=1),"Z"in ae?(ce=j8(Qy(ae.y,0,1)),te=ce.getUTCDay(),ce=te>4||te===0?Hp.ceil(ce):Hp(ce),ce=Ky.offset(ce,(ae.V-1)*7),ae.y=ce.getUTCFullYear(),ae.m=ce.getUTCMonth(),ae.d=ce.getUTCDate()+(ae.w+6)%7):(ce=X8(Qy(ae.y,0,1)),te=ce.getDay(),ce=te>4||te===0?Nh.ceil(ce):Nh(ce),ce=Oo.offset(ce,(ae.V-1)*7),ae.y=ce.getFullYear(),ae.m=ce.getMonth(),ae.d=ce.getDate()+(ae.w+6)%7)}else("W"in ae||"U"in ae)&&("w"in ae||(ae.w="u"in ae?ae.u%7:"W"in ae?1:0),te="Z"in ae?j8(Qy(ae.y,0,1)).getUTCDay():X8(Qy(ae.y,0,1)).getDay(),ae.m=0,ae.d="W"in ae?(ae.w+6)%7+ae.W*7-(te+5)%7:ae.w+ae.U*7-(te+6)%7);return"Z"in ae?(ae.H+=ae.Z/100|0,ae.M+=ae.Z%100,j8(ae)):X8(ae)}}o(L,"newParse");function S(H,q,Q,ae){for(var ue=0,ce=q.length,te=Q.length,Ne,se;ue=te)return-1;if(Ne=q.charCodeAt(ue++),Ne===37){if(Ne=q.charAt(ue++),se=T[Ne in dW?q.charAt(ue++):Ne],!se||(ae=se(H,Q,ae))<0)return-1}else if(Ne!=Q.charCodeAt(ae++))return-1}return ae}o(S,"parseSpecifier");function A(H,q,Q){var ae=h.exec(q.slice(Q));return ae?(H.p=f.get(ae[0].toLowerCase()),Q+ae[0].length):-1}o(A,"parsePeriod");function I(H,q,Q){var ae=m.exec(q.slice(Q));return ae?(H.w=g.get(ae[0].toLowerCase()),Q+ae[0].length):-1}o(I,"parseShortWeekday");function D(H,q,Q){var ae=d.exec(q.slice(Q));return ae?(H.w=p.get(ae[0].toLowerCase()),Q+ae[0].length):-1}o(D,"parseWeekday");function k(H,q,Q){var ae=x.exec(q.slice(Q));return ae?(H.m=b.get(ae[0].toLowerCase()),Q+ae[0].length):-1}o(k,"parseShortMonth");function R(H,q,Q){var ae=y.exec(q.slice(Q));return ae?(H.m=v.get(ae[0].toLowerCase()),Q+ae[0].length):-1}o(R,"parseMonth");function C(H,q,Q){return S(H,e,q,Q)}o(C,"parseLocaleDateTime");function O(H,q,Q){return S(H,r,q,Q)}o(O,"parseLocaleDate");function N(H,q,Q){return S(H,n,q,Q)}o(N,"parseLocaleTime");function P(H){return s[H.getDay()]}o(P,"formatShortWeekday");function F(H){return a[H.getDay()]}o(F,"formatWeekday");function B(H){return u[H.getMonth()]}o(B,"formatShortMonth");function G(H){return l[H.getMonth()]}o(G,"formatMonth");function z(H){return i[+(H.getHours()>=12)]}o(z,"formatPeriod");function W(H){return 1+~~(H.getMonth()/3)}o(W,"formatQuarter");function Z(H){return s[H.getUTCDay()]}o(Z,"formatUTCShortWeekday");function j(H){return a[H.getUTCDay()]}o(j,"formatUTCWeekday");function oe(H){return u[H.getUTCMonth()]}o(oe,"formatUTCShortMonth");function K(H){return l[H.getUTCMonth()]}o(K,"formatUTCMonth");function ee(H){return i[+(H.getUTCHours()>=12)]}o(ee,"formatUTCPeriod");function J(H){return 1+~~(H.getUTCMonth()/3)}return o(J,"formatUTCQuarter"),{format:o(function(H){var q=E(H+="",w);return q.toString=function(){return H},q},"format"),parse:o(function(H){var q=L(H+="",!1);return q.toString=function(){return H},q},"parse"),utcFormat:o(function(H){var q=E(H+="",_);return q.toString=function(){return H},q},"utcFormat"),utcParse:o(function(H){var q=L(H+="",!0);return q.toString=function(){return H},q},"utcParse")}}function Hr(t,e,r){var n=t<0?"-":"",i=(n?-t:t)+"",a=i.length;return n+(a[e.toLowerCase(),r]))}function GTe(t,e,r){var n=ta.exec(e.slice(r,r+1));return n?(t.w=+n[0],r+n[0].length):-1}function $Te(t,e,r){var n=ta.exec(e.slice(r,r+1));return n?(t.u=+n[0],r+n[0].length):-1}function VTe(t,e,r){var n=ta.exec(e.slice(r,r+2));return n?(t.U=+n[0],r+n[0].length):-1}function UTe(t,e,r){var n=ta.exec(e.slice(r,r+2));return n?(t.V=+n[0],r+n[0].length):-1}function HTe(t,e,r){var n=ta.exec(e.slice(r,r+2));return n?(t.W=+n[0],r+n[0].length):-1}function pW(t,e,r){var n=ta.exec(e.slice(r,r+4));return n?(t.y=+n[0],r+n[0].length):-1}function mW(t,e,r){var n=ta.exec(e.slice(r,r+2));return n?(t.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function WTe(t,e,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(r,r+6));return n?(t.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function YTe(t,e,r){var n=ta.exec(e.slice(r,r+1));return n?(t.q=n[0]*3-3,r+n[0].length):-1}function qTe(t,e,r){var n=ta.exec(e.slice(r,r+2));return n?(t.m=n[0]-1,r+n[0].length):-1}function gW(t,e,r){var n=ta.exec(e.slice(r,r+2));return n?(t.d=+n[0],r+n[0].length):-1}function XTe(t,e,r){var n=ta.exec(e.slice(r,r+3));return n?(t.m=0,t.d=+n[0],r+n[0].length):-1}function yW(t,e,r){var n=ta.exec(e.slice(r,r+2));return n?(t.H=+n[0],r+n[0].length):-1}function jTe(t,e,r){var n=ta.exec(e.slice(r,r+2));return n?(t.M=+n[0],r+n[0].length):-1}function KTe(t,e,r){var n=ta.exec(e.slice(r,r+2));return n?(t.S=+n[0],r+n[0].length):-1}function QTe(t,e,r){var n=ta.exec(e.slice(r,r+3));return n?(t.L=+n[0],r+n[0].length):-1}function ZTe(t,e,r){var n=ta.exec(e.slice(r,r+6));return n?(t.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function JTe(t,e,r){var n=BTe.exec(e.slice(r,r+1));return n?r+n[0].length:-1}function eke(t,e,r){var n=ta.exec(e.slice(r));return n?(t.Q=+n[0],r+n[0].length):-1}function tke(t,e,r){var n=ta.exec(e.slice(r));return n?(t.s=+n[0],r+n[0].length):-1}function vW(t,e){return Hr(t.getDate(),e,2)}function rke(t,e){return Hr(t.getHours(),e,2)}function nke(t,e){return Hr(t.getHours()%12||12,e,2)}function ike(t,e){return Hr(1+Oo.count(ro(t),t),e,3)}function kW(t,e){return Hr(t.getMilliseconds(),e,3)}function ake(t,e){return kW(t,e)+"000"}function ske(t,e){return Hr(t.getMonth()+1,e,2)}function oke(t,e){return Hr(t.getMinutes(),e,2)}function lke(t,e){return Hr(t.getSeconds(),e,2)}function cke(t){var e=t.getDay();return e===0?7:e}function uke(t,e){return Hr(Al.count(ro(t)-1,t),e,2)}function EW(t){var e=t.getDay();return e>=4||e===0?xc(t):xc.ceil(t)}function hke(t,e){return t=EW(t),Hr(xc.count(ro(t),t)+(ro(t).getDay()===4),e,2)}function fke(t){return t.getDay()}function dke(t,e){return Hr(Nh.count(ro(t)-1,t),e,2)}function pke(t,e){return Hr(t.getFullYear()%100,e,2)}function mke(t,e){return t=EW(t),Hr(t.getFullYear()%100,e,2)}function gke(t,e){return Hr(t.getFullYear()%1e4,e,4)}function yke(t,e){var r=t.getDay();return t=r>=4||r===0?xc(t):xc.ceil(t),Hr(t.getFullYear()%1e4,e,4)}function vke(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+Hr(e/60|0,"0",2)+Hr(e%60,"0",2)}function xW(t,e){return Hr(t.getUTCDate(),e,2)}function xke(t,e){return Hr(t.getUTCHours(),e,2)}function bke(t,e){return Hr(t.getUTCHours()%12||12,e,2)}function wke(t,e){return Hr(1+Ky.count(_l(t),t),e,3)}function SW(t,e){return Hr(t.getUTCMilliseconds(),e,3)}function Tke(t,e){return SW(t,e)+"000"}function kke(t,e){return Hr(t.getUTCMonth()+1,e,2)}function Eke(t,e){return Hr(t.getUTCMinutes(),e,2)}function Ske(t,e){return Hr(t.getUTCSeconds(),e,2)}function Cke(t){var e=t.getUTCDay();return e===0?7:e}function Ake(t,e){return Hr(Td.count(_l(t)-1,t),e,2)}function CW(t){var e=t.getUTCDay();return e>=4||e===0?Rh(t):Rh.ceil(t)}function _ke(t,e){return t=CW(t),Hr(Rh.count(_l(t),t)+(_l(t).getUTCDay()===4),e,2)}function Lke(t){return t.getUTCDay()}function Dke(t,e){return Hr(Hp.count(_l(t)-1,t),e,2)}function Nke(t,e){return Hr(t.getUTCFullYear()%100,e,2)}function Rke(t,e){return t=CW(t),Hr(t.getUTCFullYear()%100,e,2)}function Mke(t,e){return Hr(t.getUTCFullYear()%1e4,e,4)}function Ike(t,e){var r=t.getUTCDay();return t=r>=4||r===0?Rh(t):Rh.ceil(t),Hr(t.getUTCFullYear()%1e4,e,4)}function Oke(){return"+0000"}function bW(){return"%"}function wW(t){return+t}function TW(t){return Math.floor(+t/1e3)}var dW,ta,BTe,FTe,AW=M(()=>{"use strict";B3();o(X8,"localDate");o(j8,"utcDate");o(Qy,"newDate");o(K8,"formatLocale");dW={"-":"",_:" ",0:"0"},ta=/^\s*\d+/,BTe=/^%/,FTe=/[\\^$*+?|[\]().{}]/g;o(Hr,"pad");o(zTe,"requote");o(Zy,"formatRe");o(Jy,"formatLookup");o(GTe,"parseWeekdayNumberSunday");o($Te,"parseWeekdayNumberMonday");o(VTe,"parseWeekNumberSunday");o(UTe,"parseWeekNumberISO");o(HTe,"parseWeekNumberMonday");o(pW,"parseFullYear");o(mW,"parseYear");o(WTe,"parseZone");o(YTe,"parseQuarter");o(qTe,"parseMonthNumber");o(gW,"parseDayOfMonth");o(XTe,"parseDayOfYear");o(yW,"parseHour24");o(jTe,"parseMinutes");o(KTe,"parseSeconds");o(QTe,"parseMilliseconds");o(ZTe,"parseMicroseconds");o(JTe,"parseLiteralPercent");o(eke,"parseUnixTimestamp");o(tke,"parseUnixTimestampSeconds");o(vW,"formatDayOfMonth");o(rke,"formatHour24");o(nke,"formatHour12");o(ike,"formatDayOfYear");o(kW,"formatMilliseconds");o(ake,"formatMicroseconds");o(ske,"formatMonthNumber");o(oke,"formatMinutes");o(lke,"formatSeconds");o(cke,"formatWeekdayNumberMonday");o(uke,"formatWeekNumberSunday");o(EW,"dISO");o(hke,"formatWeekNumberISO");o(fke,"formatWeekdayNumberSunday");o(dke,"formatWeekNumberMonday");o(pke,"formatYear");o(mke,"formatYearISO");o(gke,"formatFullYear");o(yke,"formatFullYearISO");o(vke,"formatZone");o(xW,"formatUTCDayOfMonth");o(xke,"formatUTCHour24");o(bke,"formatUTCHour12");o(wke,"formatUTCDayOfYear");o(SW,"formatUTCMilliseconds");o(Tke,"formatUTCMicroseconds");o(kke,"formatUTCMonthNumber");o(Eke,"formatUTCMinutes");o(Ske,"formatUTCSeconds");o(Cke,"formatUTCWeekdayNumberMonday");o(Ake,"formatUTCWeekNumberSunday");o(CW,"UTCdISO");o(_ke,"formatUTCWeekNumberISO");o(Lke,"formatUTCWeekdayNumberSunday");o(Dke,"formatUTCWeekNumberMonday");o(Nke,"formatUTCYear");o(Rke,"formatUTCYearISO");o(Mke,"formatUTCFullYear");o(Ike,"formatUTCFullYearISO");o(Oke,"formatUTCZone");o(bW,"formatLiteralPercent");o(wW,"formatUnixTimestamp");o(TW,"formatUnixTimestampSeconds")});function Q8(t){return Wp=K8(t),kd=Wp.format,_W=Wp.parse,LW=Wp.utcFormat,DW=Wp.utcParse,Wp}var Wp,kd,_W,LW,DW,NW=M(()=>{"use strict";AW();Q8({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});o(Q8,"defaultLocale")});var Z8=M(()=>{"use strict";NW()});function Pke(t){return new Date(t)}function Bke(t){return t instanceof Date?+t:+new Date(+t)}function RW(t,e,r,n,i,a,s,l,u,h){var f=Xy(),d=f.invert,p=f.domain,m=h(".%L"),g=h(":%S"),y=h("%I:%M"),v=h("%I %p"),x=h("%a %d"),b=h("%b %d"),w=h("%B"),_=h("%Y");function T(E){return(u(E){"use strict";B3();Z8();M8();qy();eW();o(Pke,"date");o(Bke,"number");o(RW,"calendar");o(F3,"time")});var IW=M(()=>{"use strict";XH();JH();L8();MW()});function J8(t){for(var e=t.length/6|0,r=new Array(e),n=0;n{"use strict";o(J8,"default")});var e_,PW=M(()=>{"use strict";OW();e_=J8("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab")});var BW=M(()=>{"use strict";PW()});function Fn(t){return o(function(){return t},"constant")}var z3=M(()=>{"use strict";o(Fn,"default")});function zW(t){return t>1?0:t<-1?Yp:Math.acos(t)}function r_(t){return t>=1?ev:t<=-1?-ev:Math.asin(t)}var t_,ma,Mh,FW,G3,Ll,Ed,ra,Yp,ev,qp,$3=M(()=>{"use strict";t_=Math.abs,ma=Math.atan2,Mh=Math.cos,FW=Math.max,G3=Math.min,Ll=Math.sin,Ed=Math.sqrt,ra=1e-12,Yp=Math.PI,ev=Yp/2,qp=2*Yp;o(zW,"acos");o(r_,"asin")});function V3(t){let e=3;return t.digits=function(r){if(!arguments.length)return e;if(r==null)e=null;else{let n=Math.floor(r);if(!(n>=0))throw new RangeError(`invalid digits: ${r}`);e=n}return t},()=>new gd(e)}var n_=M(()=>{"use strict";m8();o(V3,"withPath")});function Fke(t){return t.innerRadius}function zke(t){return t.outerRadius}function Gke(t){return t.startAngle}function $ke(t){return t.endAngle}function Vke(t){return t&&t.padAngle}function Uke(t,e,r,n,i,a,s,l){var u=r-t,h=n-e,f=s-i,d=l-a,p=d*u-f*h;if(!(p*pC*C+O*O&&(S=I,A=D),{cx:S,cy:A,x01:-f,y01:-d,x11:S*(i/T-1),y11:A*(i/T-1)}}function Dl(){var t=Fke,e=zke,r=Fn(0),n=null,i=Gke,a=$ke,s=Vke,l=null,u=V3(h);function h(){var f,d,p=+t.apply(this,arguments),m=+e.apply(this,arguments),g=i.apply(this,arguments)-ev,y=a.apply(this,arguments)-ev,v=t_(y-g),x=y>g;if(l||(l=f=u()),mra))l.moveTo(0,0);else if(v>qp-ra)l.moveTo(m*Mh(g),m*Ll(g)),l.arc(0,0,m,g,y,!x),p>ra&&(l.moveTo(p*Mh(y),p*Ll(y)),l.arc(0,0,p,y,g,x));else{var b=g,w=y,_=g,T=y,E=v,L=v,S=s.apply(this,arguments)/2,A=S>ra&&(n?+n.apply(this,arguments):Ed(p*p+m*m)),I=G3(t_(m-p)/2,+r.apply(this,arguments)),D=I,k=I,R,C;if(A>ra){var O=r_(A/p*Ll(S)),N=r_(A/m*Ll(S));(E-=O*2)>ra?(O*=x?1:-1,_+=O,T-=O):(E=0,_=T=(g+y)/2),(L-=N*2)>ra?(N*=x?1:-1,b+=N,w-=N):(L=0,b=w=(g+y)/2)}var P=m*Mh(b),F=m*Ll(b),B=p*Mh(T),G=p*Ll(T);if(I>ra){var z=m*Mh(w),W=m*Ll(w),Z=p*Mh(_),j=p*Ll(_),oe;if(vra?k>ra?(R=U3(Z,j,P,F,m,k,x),C=U3(z,W,B,G,m,k,x),l.moveTo(R.cx+R.x01,R.cy+R.y01),kra)||!(E>ra)?l.lineTo(B,G):D>ra?(R=U3(B,G,z,W,p,-D,x),C=U3(P,F,Z,j,p,-D,x),l.lineTo(R.cx+R.x01,R.cy+R.y01),D{"use strict";z3();$3();n_();o(Fke,"arcInnerRadius");o(zke,"arcOuterRadius");o(Gke,"arcStartAngle");o($ke,"arcEndAngle");o(Vke,"arcPadAngle");o(Uke,"intersect");o(U3,"cornerTangents");o(Dl,"default")});function tv(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}var o2t,i_=M(()=>{"use strict";o2t=Array.prototype.slice;o(tv,"default")});function $W(t){this._context=t}function Xp(t){return new $W(t)}var a_=M(()=>{"use strict";o($W,"Linear");$W.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e);break}},"point")};o(Xp,"default")});function VW(t){return t[0]}function UW(t){return t[1]}var HW=M(()=>{"use strict";o(VW,"x");o(UW,"y")});function ns(t,e){var r=Fn(!0),n=null,i=Xp,a=null,s=V3(l);t=typeof t=="function"?t:t===void 0?VW:Fn(t),e=typeof e=="function"?e:e===void 0?UW:Fn(e);function l(u){var h,f=(u=tv(u)).length,d,p=!1,m;for(n==null&&(a=i(m=s())),h=0;h<=f;++h)!(h{"use strict";i_();z3();a_();n_();HW();o(ns,"default")});function s_(t,e){return et?1:e>=t?0:NaN}var YW=M(()=>{"use strict";o(s_,"default")});function o_(t){return t}var qW=M(()=>{"use strict";o(o_,"default")});function H3(){var t=o_,e=s_,r=null,n=Fn(0),i=Fn(qp),a=Fn(0);function s(l){var u,h=(l=tv(l)).length,f,d,p=0,m=new Array(h),g=new Array(h),y=+n.apply(this,arguments),v=Math.min(qp,Math.max(-qp,i.apply(this,arguments)-y)),x,b=Math.min(Math.abs(v)/h,a.apply(this,arguments)),w=b*(v<0?-1:1),_;for(u=0;u0&&(p+=_);for(e!=null?m.sort(function(T,E){return e(g[T],g[E])}):r!=null&&m.sort(function(T,E){return r(l[T],l[E])}),u=0,d=p?(v-h*w)/p:0;u0?_*d:0)+w,g[f]={data:l[f],index:u,value:_,startAngle:y,endAngle:x,padAngle:b};return g}return o(s,"pie"),s.value=function(l){return arguments.length?(t=typeof l=="function"?l:Fn(+l),s):t},s.sortValues=function(l){return arguments.length?(e=l,r=null,s):e},s.sort=function(l){return arguments.length?(r=l,e=null,s):r},s.startAngle=function(l){return arguments.length?(n=typeof l=="function"?l:Fn(+l),s):n},s.endAngle=function(l){return arguments.length?(i=typeof l=="function"?l:Fn(+l),s):i},s.padAngle=function(l){return arguments.length?(a=typeof l=="function"?l:Fn(+l),s):a},s}var XW=M(()=>{"use strict";i_();z3();YW();qW();$3();o(H3,"default")});function l_(t){return new W3(t,!0)}function c_(t){return new W3(t,!1)}var W3,jW=M(()=>{"use strict";W3=class{static{o(this,"Bump")}constructor(e,r){this._context=e,this._x=r}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(e,r){switch(e=+e,r=+r,this._point){case 0:{this._point=1,this._line?this._context.lineTo(e,r):this._context.moveTo(e,r);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+e)/2,this._y0,this._x0,r,e,r):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+r)/2,e,this._y0,e,r);break}}this._x0=e,this._y0=r}};o(l_,"bumpX");o(c_,"bumpY")});function no(){}var rv=M(()=>{"use strict";o(no,"default")});function jp(t,e,r){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+r)/6)}function nv(t){this._context=t}function Po(t){return new nv(t)}var iv=M(()=>{"use strict";o(jp,"point");o(nv,"Basis");nv.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 3:jp(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:jp(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(Po,"default")});function KW(t){this._context=t}function Y3(t){return new KW(t)}var QW=M(()=>{"use strict";rv();iv();o(KW,"BasisClosed");KW.prototype={areaStart:no,areaEnd:no,lineStart:o(function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:jp(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(Y3,"default")});function ZW(t){this._context=t}function q3(t){return new ZW(t)}var JW=M(()=>{"use strict";iv();o(ZW,"BasisOpen");ZW.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+t)/6,n=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:jp(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(q3,"default")});function eY(t,e){this._basis=new nv(t),this._beta=e}var u_,tY=M(()=>{"use strict";iv();o(eY,"Bundle");eY.prototype={lineStart:o(function(){this._x=[],this._y=[],this._basis.lineStart()},"lineStart"),lineEnd:o(function(){var t=this._x,e=this._y,r=t.length-1;if(r>0)for(var n=t[0],i=e[0],a=t[r]-n,s=e[r]-i,l=-1,u;++l<=r;)u=l/r,this._basis.point(this._beta*t[l]+(1-this._beta)*(n+u*a),this._beta*e[l]+(1-this._beta)*(i+u*s));this._x=this._y=null,this._basis.lineEnd()},"lineEnd"),point:o(function(t,e){this._x.push(+t),this._y.push(+e)},"point")};u_=o(function t(e){function r(n){return e===1?new nv(n):new eY(n,e)}return o(r,"bundle"),r.beta=function(n){return t(+n)},r},"custom")(.85)});function Kp(t,e,r){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-r),t._x2,t._y2)}function X3(t,e){this._context=t,this._k=(1-e)/6}var h_,av=M(()=>{"use strict";o(Kp,"point");o(X3,"Cardinal");X3.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:Kp(this,this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:Kp(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};h_=o(function t(e){function r(n){return new X3(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r},"custom")(0)});function j3(t,e){this._context=t,this._k=(1-e)/6}var f_,d_=M(()=>{"use strict";rv();av();o(j3,"CardinalClosed");j3.prototype={areaStart:no,areaEnd:no,lineStart:o(function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Kp(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};f_=o(function t(e){function r(n){return new j3(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r},"custom")(0)});function K3(t,e){this._context=t,this._k=(1-e)/6}var p_,m_=M(()=>{"use strict";av();o(K3,"CardinalOpen");K3.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Kp(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};p_=o(function t(e){function r(n){return new K3(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r},"custom")(0)});function sv(t,e,r){var n=t._x1,i=t._y1,a=t._x2,s=t._y2;if(t._l01_a>ra){var l=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,u=3*t._l01_a*(t._l01_a+t._l12_a);n=(n*l-t._x0*t._l12_2a+t._x2*t._l01_2a)/u,i=(i*l-t._y0*t._l12_2a+t._y2*t._l01_2a)/u}if(t._l23_a>ra){var h=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,f=3*t._l23_a*(t._l23_a+t._l12_a);a=(a*h+t._x1*t._l23_2a-e*t._l12_2a)/f,s=(s*h+t._y1*t._l23_2a-r*t._l12_2a)/f}t._context.bezierCurveTo(n,i,a,s,t._x2,t._y2)}function rY(t,e){this._context=t,this._alpha=e}var g_,Q3=M(()=>{"use strict";$3();av();o(sv,"point");o(rY,"CatmullRom");rY.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:sv(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};g_=o(function t(e){function r(n){return e?new rY(n,e):new X3(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r},"custom")(.5)});function nY(t,e){this._context=t,this._alpha=e}var y_,iY=M(()=>{"use strict";d_();rv();Q3();o(nY,"CatmullRomClosed");nY.prototype={areaStart:no,areaEnd:no,lineStart:o(function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:sv(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};y_=o(function t(e){function r(n){return e?new nY(n,e):new j3(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r},"custom")(.5)});function aY(t,e){this._context=t,this._alpha=e}var v_,sY=M(()=>{"use strict";m_();Q3();o(aY,"CatmullRomOpen");aY.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:sv(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};v_=o(function t(e){function r(n){return e?new aY(n,e):new K3(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r},"custom")(.5)});function oY(t){this._context=t}function Z3(t){return new oY(t)}var lY=M(()=>{"use strict";rv();o(oY,"LinearClosed");oY.prototype={areaStart:no,areaEnd:no,lineStart:o(function(){this._point=0},"lineStart"),lineEnd:o(function(){this._point&&this._context.closePath()},"lineEnd"),point:o(function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))},"point")};o(Z3,"default")});function cY(t){return t<0?-1:1}function uY(t,e,r){var n=t._x1-t._x0,i=e-t._x1,a=(t._y1-t._y0)/(n||i<0&&-0),s=(r-t._y1)/(i||n<0&&-0),l=(a*i+s*n)/(n+i);return(cY(a)+cY(s))*Math.min(Math.abs(a),Math.abs(s),.5*Math.abs(l))||0}function hY(t,e){var r=t._x1-t._x0;return r?(3*(t._y1-t._y0)/r-e)/2:e}function x_(t,e,r){var n=t._x0,i=t._y0,a=t._x1,s=t._y1,l=(a-n)/3;t._context.bezierCurveTo(n+l,i+l*e,a-l,s-l*r,a,s)}function J3(t){this._context=t}function fY(t){this._context=new dY(t)}function dY(t){this._context=t}function b_(t){return new J3(t)}function w_(t){return new fY(t)}var pY=M(()=>{"use strict";o(cY,"sign");o(uY,"slope3");o(hY,"slope2");o(x_,"point");o(J3,"MonotoneX");J3.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:x_(this,this._t0,hY(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){var r=NaN;if(t=+t,e=+e,!(t===this._x1&&e===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,x_(this,hY(this,r=uY(this,t,e)),r);break;default:x_(this,this._t0,r=uY(this,t,e));break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=r}},"point")};o(fY,"MonotoneY");(fY.prototype=Object.create(J3.prototype)).point=function(t,e){J3.prototype.point.call(this,e,t)};o(dY,"ReflectContext");dY.prototype={moveTo:o(function(t,e){this._context.moveTo(e,t)},"moveTo"),closePath:o(function(){this._context.closePath()},"closePath"),lineTo:o(function(t,e){this._context.lineTo(e,t)},"lineTo"),bezierCurveTo:o(function(t,e,r,n,i,a){this._context.bezierCurveTo(e,t,n,r,a,i)},"bezierCurveTo")};o(b_,"monotoneX");o(w_,"monotoneY")});function gY(t){this._context=t}function mY(t){var e,r=t.length-1,n,i=new Array(r),a=new Array(r),s=new Array(r);for(i[0]=0,a[0]=2,s[0]=t[0]+2*t[1],e=1;e=0;--e)i[e]=(s[e]-i[e+1])/a[e];for(a[r-1]=(t[r]+i[r-1])/2,e=0;e{"use strict";o(gY,"Natural");gY.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x=[],this._y=[]},"lineStart"),lineEnd:o(function(){var t=this._x,e=this._y,r=t.length;if(r)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),r===2)this._context.lineTo(t[1],e[1]);else for(var n=mY(t),i=mY(e),a=0,s=1;s{"use strict";o(t5,"Step");t5.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x=this._y=NaN,this._point=0},"lineStart"),lineEnd:o(function(){0=0&&(this._t=1-this._t,this._line=1-this._line)},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var r=this._x*(1-this._t)+t*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,e)}break}}this._x=t,this._y=e},"point")};o(r5,"default");o(T_,"stepBefore");o(k_,"stepAfter")});var xY=M(()=>{"use strict";GW();WW();XW();QW();JW();iv();jW();tY();d_();m_();av();iY();sY();Q3();lY();a_();pY();yY();vY()});var bY=M(()=>{"use strict"});var wY=M(()=>{"use strict"});function Ih(t,e,r){this.k=t,this.x=e,this.y=r}function S_(t){for(;!t.__zoom;)if(!(t=t.parentNode))return E_;return t.__zoom}var E_,C_=M(()=>{"use strict";o(Ih,"Transform");Ih.prototype={constructor:Ih,scale:o(function(t){return t===1?this:new Ih(this.k*t,this.x,this.y)},"scale"),translate:o(function(t,e){return t===0&e===0?this:new Ih(this.k,this.x+this.k*t,this.y+this.k*e)},"translate"),apply:o(function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},"apply"),applyX:o(function(t){return t*this.k+this.x},"applyX"),applyY:o(function(t){return t*this.k+this.y},"applyY"),invert:o(function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},"invert"),invertX:o(function(t){return(t-this.x)/this.k},"invertX"),invertY:o(function(t){return(t-this.y)/this.k},"invertY"),rescaleX:o(function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},"rescaleX"),rescaleY:o(function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},"rescaleY"),toString:o(function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"},"toString")};E_=new Ih(1,0,0);S_.prototype=Ih.prototype;o(S_,"transform")});var TY=M(()=>{"use strict"});var kY=M(()=>{"use strict";v3();bY();wY();C_();TY()});var EY=M(()=>{"use strict";kY();C_()});var pr=M(()=>{"use strict";kh();tV();bH();EH();Pp();SH();CH();T7();YV();AH();u8();_H();DH();A8();HH();WH();zp();m8();YH();LH();qH();IW();BW();Tl();xY();B3();Z8();f3();v3();EY()});var SY=Ei(na=>{"use strict";Object.defineProperty(na,"__esModule",{value:!0});na.BLANK_URL=na.relativeFirstCharacters=na.whitespaceEscapeCharsRegex=na.urlSchemeRegex=na.ctrlCharactersRegex=na.htmlCtrlEntityRegex=na.htmlEntitiesRegex=na.invalidProtocolRegex=void 0;na.invalidProtocolRegex=/^([^\w]*)(javascript|data|vbscript)/im;na.htmlEntitiesRegex=/&#(\w+)(^\w|;)?/g;na.htmlCtrlEntityRegex=/&(newline|tab);/gi;na.ctrlCharactersRegex=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim;na.urlSchemeRegex=/^.+(:|:)/gim;na.whitespaceEscapeCharsRegex=/(\\|%5[cC])((%(6[eE]|72|74))|[nrt])/g;na.relativeFirstCharacters=[".","/"];na.BLANK_URL="about:blank"});var Qp=Ei(n5=>{"use strict";Object.defineProperty(n5,"__esModule",{value:!0});n5.sanitizeUrl=void 0;var Ra=SY();function Hke(t){return Ra.relativeFirstCharacters.indexOf(t[0])>-1}o(Hke,"isRelativeUrlWithoutProtocol");function Wke(t){var e=t.replace(Ra.ctrlCharactersRegex,"");return e.replace(Ra.htmlEntitiesRegex,function(r,n){return String.fromCharCode(n)})}o(Wke,"decodeHtmlCharacters");function Yke(t){return URL.canParse(t)}o(Yke,"isValidUrl");function CY(t){try{return decodeURIComponent(t)}catch{return t}}o(CY,"decodeURI");function qke(t){if(!t)return Ra.BLANK_URL;var e,r=CY(t.trim());do r=Wke(r).replace(Ra.htmlCtrlEntityRegex,"").replace(Ra.ctrlCharactersRegex,"").replace(Ra.whitespaceEscapeCharsRegex,"").trim(),r=CY(r),e=r.match(Ra.ctrlCharactersRegex)||r.match(Ra.htmlEntitiesRegex)||r.match(Ra.htmlCtrlEntityRegex)||r.match(Ra.whitespaceEscapeCharsRegex);while(e&&e.length>0);var n=r;if(!n)return Ra.BLANK_URL;if(Hke(n))return n;var i=n.trimStart(),a=i.match(Ra.urlSchemeRegex);if(!a)return n;var s=a[0].toLowerCase().trim();if(Ra.invalidProtocolRegex.test(s))return Ra.BLANK_URL;var l=i.replace(/\\/g,"/");if(s==="mailto:"||s.includes("://"))return l;if(s==="http:"||s==="https:"){if(!Yke(l))return Ra.BLANK_URL;var u=new URL(l);return u.protocol=u.protocol.toLowerCase(),u.hostname=u.hostname.toLowerCase(),u.toString()}return l}o(qke,"sanitizeUrl");n5.sanitizeUrl=qke});var A_,Sd,i5,AY,_Y,LY,Nl,ov,lv=M(()=>{"use strict";A_=Ji(Qp(),1);fr();Sd=o((t,e)=>{let r=t.append("rect");if(r.attr("x",e.x),r.attr("y",e.y),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("width",e.width),r.attr("height",e.height),e.name&&r.attr("name",e.name),e.rx&&r.attr("rx",e.rx),e.ry&&r.attr("ry",e.ry),e.attrs!==void 0)for(let n in e.attrs)r.attr(n,e.attrs[n]);return e.class&&r.attr("class",e.class),r},"drawRect"),i5=o((t,e)=>{let r={x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"};Sd(t,r).lower()},"drawBackgroundRect"),AY=o((t,e)=>{let r=e.text.replace(ad," "),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.attr("class","legend"),n.style("text-anchor",e.anchor),e.class&&n.attr("class",e.class);let i=n.append("tspan");return i.attr("x",e.x+e.textMargin*2),i.text(r),n},"drawText"),_Y=o((t,e,r,n)=>{let i=t.append("image");i.attr("x",e),i.attr("y",r);let a=(0,A_.sanitizeUrl)(n);i.attr("xlink:href",a)},"drawImage"),LY=o((t,e,r,n)=>{let i=t.append("use");i.attr("x",e),i.attr("y",r);let a=(0,A_.sanitizeUrl)(n);i.attr("xlink:href",`#${a}`)},"drawEmbeddedImage"),Nl=o(()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),"getNoteRect"),ov=o(()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0}),"getTextObj")});var DY,__,NY,Xke,jke,Kke,Qke,Zke,Jke,eEe,tEe,rEe,nEe,iEe,aEe,_u,Rl,RY=M(()=>{"use strict";fr();lv();DY=Ji(Qp(),1),__=o(function(t,e){return Sd(t,e)},"drawRect"),NY=o(function(t,e,r,n,i,a){let s=t.append("image");s.attr("width",e),s.attr("height",r),s.attr("x",n),s.attr("y",i);let l=a.startsWith("data:image/png;base64")?a:(0,DY.sanitizeUrl)(a);s.attr("xlink:href",l)},"drawImage"),Xke=o((t,e,r)=>{let n=t.append("g"),i=0;for(let a of e){let s=a.textColor?a.textColor:"#444444",l=a.lineColor?a.lineColor:"#444444",u=a.offsetX?parseInt(a.offsetX):0,h=a.offsetY?parseInt(a.offsetY):0,f="";if(i===0){let p=n.append("line");p.attr("x1",a.startPoint.x),p.attr("y1",a.startPoint.y),p.attr("x2",a.endPoint.x),p.attr("y2",a.endPoint.y),p.attr("stroke-width","1"),p.attr("stroke",l),p.style("fill","none"),a.type!=="rel_b"&&p.attr("marker-end","url("+f+"#arrowhead)"),(a.type==="birel"||a.type==="rel_b")&&p.attr("marker-start","url("+f+"#arrowend)"),i=-1}else{let p=n.append("path");p.attr("fill","none").attr("stroke-width","1").attr("stroke",l).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",a.startPoint.x).replaceAll("starty",a.startPoint.y).replaceAll("controlx",a.startPoint.x+(a.endPoint.x-a.startPoint.x)/2-(a.endPoint.x-a.startPoint.x)/4).replaceAll("controly",a.startPoint.y+(a.endPoint.y-a.startPoint.y)/2).replaceAll("stopx",a.endPoint.x).replaceAll("stopy",a.endPoint.y)),a.type!=="rel_b"&&p.attr("marker-end","url("+f+"#arrowhead)"),(a.type==="birel"||a.type==="rel_b")&&p.attr("marker-start","url("+f+"#arrowend)")}let d=r.messageFont();_u(r)(a.label.text,n,Math.min(a.startPoint.x,a.endPoint.x)+Math.abs(a.endPoint.x-a.startPoint.x)/2+u,Math.min(a.startPoint.y,a.endPoint.y)+Math.abs(a.endPoint.y-a.startPoint.y)/2+h,a.label.width,a.label.height,{fill:s},d),a.techn&&a.techn.text!==""&&(d=r.messageFont(),_u(r)("["+a.techn.text+"]",n,Math.min(a.startPoint.x,a.endPoint.x)+Math.abs(a.endPoint.x-a.startPoint.x)/2+u,Math.min(a.startPoint.y,a.endPoint.y)+Math.abs(a.endPoint.y-a.startPoint.y)/2+r.messageFontSize+5+h,Math.max(a.label.width,a.techn.width),a.techn.height,{fill:s,"font-style":"italic"},d))}},"drawRels"),jke=o(function(t,e,r){let n=t.append("g"),i=e.bgColor?e.bgColor:"none",a=e.borderColor?e.borderColor:"#444444",s=e.fontColor?e.fontColor:"black",l={"stroke-width":1,"stroke-dasharray":"7.0,7.0"};e.nodeType&&(l={"stroke-width":1});let u={x:e.x,y:e.y,fill:i,stroke:a,width:e.width,height:e.height,rx:2.5,ry:2.5,attrs:l};__(n,u);let h=r.boundaryFont();h.fontWeight="bold",h.fontSize=h.fontSize+2,h.fontColor=s,_u(r)(e.label.text,n,e.x,e.y+e.label.Y,e.width,e.height,{fill:"#444444"},h),e.type&&e.type.text!==""&&(h=r.boundaryFont(),h.fontColor=s,_u(r)(e.type.text,n,e.x,e.y+e.type.Y,e.width,e.height,{fill:"#444444"},h)),e.descr&&e.descr.text!==""&&(h=r.boundaryFont(),h.fontSize=h.fontSize-2,h.fontColor=s,_u(r)(e.descr.text,n,e.x,e.y+e.descr.Y,e.width,e.height,{fill:"#444444"},h))},"drawBoundary"),Kke=o(function(t,e,r){let n=e.bgColor?e.bgColor:r[e.typeC4Shape.text+"_bg_color"],i=e.borderColor?e.borderColor:r[e.typeC4Shape.text+"_border_color"],a=e.fontColor?e.fontColor:"#FFFFFF",s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";switch(e.typeC4Shape.text){case"person":s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";break;case"external_person":s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII=";break}let l=t.append("g");l.attr("class","person-man");let u=Nl();switch(e.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":u.x=e.x,u.y=e.y,u.fill=n,u.width=e.width,u.height=e.height,u.stroke=i,u.rx=2.5,u.ry=2.5,u.attrs={"stroke-width":.5},__(l,u);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":l.append("path").attr("fill",n).attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2).replaceAll("height",e.height)),l.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2));break;case"system_queue":case"external_system_queue":case"container_queue":case"external_container_queue":case"component_queue":case"external_component_queue":l.append("path").attr("fill",n).attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("width",e.width).replaceAll("half",e.height/2)),l.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx",e.x+e.width).replaceAll("starty",e.y).replaceAll("half",e.height/2));break}let h=aEe(r,e.typeC4Shape.text);switch(l.append("text").attr("fill",a).attr("font-family",h.fontFamily).attr("font-size",h.fontSize-2).attr("font-style","italic").attr("lengthAdjust","spacing").attr("textLength",e.typeC4Shape.width).attr("x",e.x+e.width/2-e.typeC4Shape.width/2).attr("y",e.y+e.typeC4Shape.Y).text("<<"+e.typeC4Shape.text+">>"),e.typeC4Shape.text){case"person":case"external_person":NY(l,48,48,e.x+e.width/2-24,e.y+e.image.Y,s);break}let f=r[e.typeC4Shape.text+"Font"]();return f.fontWeight="bold",f.fontSize=f.fontSize+2,f.fontColor=a,_u(r)(e.label.text,l,e.x,e.y+e.label.Y,e.width,e.height,{fill:a},f),f=r[e.typeC4Shape.text+"Font"](),f.fontColor=a,e.techn&&e.techn?.text!==""?_u(r)(e.techn.text,l,e.x,e.y+e.techn.Y,e.width,e.height,{fill:a,"font-style":"italic"},f):e.type&&e.type.text!==""&&_u(r)(e.type.text,l,e.x,e.y+e.type.Y,e.width,e.height,{fill:a,"font-style":"italic"},f),e.descr&&e.descr.text!==""&&(f=r.personFont(),f.fontColor=a,_u(r)(e.descr.text,l,e.x,e.y+e.descr.Y,e.width,e.height,{fill:a},f)),e.height},"drawC4Shape"),Qke=o(function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},"insertDatabaseIcon"),Zke=o(function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},"insertComputerIcon"),Jke=o(function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},"insertClockIcon"),eEe=o(function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},"insertArrowHead"),tEe=o(function(t){t.append("defs").append("marker").attr("id","arrowend").attr("refX",1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z")},"insertArrowEnd"),rEe=o(function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"insertArrowFilledHead"),nEe=o(function(t){t.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},"insertDynamicNumber"),iEe=o(function(t){let r=t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);r.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),r.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},"insertArrowCrossHead"),aEe=o((t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),"getC4ShapeFont"),_u=function(){function t(i,a,s,l,u,h,f){let d=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("text-anchor","middle").text(i);n(d,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d){let{fontSize:p,fontFamily:m,fontWeight:g}=d,y=i.split(qe.lineBreakRegex);for(let v=0;v{"use strict";sEe=typeof global=="object"&&global&&global.Object===Object&&global,s5=sEe});var oEe,lEe,oi,Bo=M(()=>{"use strict";L_();oEe=typeof self=="object"&&self&&self.Object===Object&&self,lEe=s5||oEe||Function("return this")(),oi=lEe});var cEe,ia,Cd=M(()=>{"use strict";Bo();cEe=oi.Symbol,ia=cEe});function fEe(t){var e=uEe.call(t,cv),r=t[cv];try{t[cv]=void 0;var n=!0}catch{}var i=hEe.call(t);return n&&(e?t[cv]=r:delete t[cv]),i}var MY,uEe,hEe,cv,IY,OY=M(()=>{"use strict";Cd();MY=Object.prototype,uEe=MY.hasOwnProperty,hEe=MY.toString,cv=ia?ia.toStringTag:void 0;o(fEe,"getRawTag");IY=fEe});function mEe(t){return pEe.call(t)}var dEe,pEe,PY,BY=M(()=>{"use strict";dEe=Object.prototype,pEe=dEe.toString;o(mEe,"objectToString");PY=mEe});function vEe(t){return t==null?t===void 0?yEe:gEe:FY&&FY in Object(t)?IY(t):PY(t)}var gEe,yEe,FY,ga,Lu=M(()=>{"use strict";Cd();OY();BY();gEe="[object Null]",yEe="[object Undefined]",FY=ia?ia.toStringTag:void 0;o(vEe,"baseGetTag");ga=vEe});function xEe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}var xn,io=M(()=>{"use strict";o(xEe,"isObject");xn=xEe});function EEe(t){if(!xn(t))return!1;var e=ga(t);return e==wEe||e==TEe||e==bEe||e==kEe}var bEe,wEe,TEe,kEe,_i,uv=M(()=>{"use strict";Lu();io();bEe="[object AsyncFunction]",wEe="[object Function]",TEe="[object GeneratorFunction]",kEe="[object Proxy]";o(EEe,"isFunction");_i=EEe});var SEe,o5,zY=M(()=>{"use strict";Bo();SEe=oi["__core-js_shared__"],o5=SEe});function CEe(t){return!!GY&&GY in t}var GY,$Y,VY=M(()=>{"use strict";zY();GY=function(){var t=/[^.]+$/.exec(o5&&o5.keys&&o5.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();o(CEe,"isMasked");$Y=CEe});function LEe(t){if(t!=null){try{return _Ee.call(t)}catch{}try{return t+""}catch{}}return""}var AEe,_Ee,Du,D_=M(()=>{"use strict";AEe=Function.prototype,_Ee=AEe.toString;o(LEe,"toSource");Du=LEe});function BEe(t){if(!xn(t)||$Y(t))return!1;var e=_i(t)?PEe:NEe;return e.test(Du(t))}var DEe,NEe,REe,MEe,IEe,OEe,PEe,UY,HY=M(()=>{"use strict";uv();VY();io();D_();DEe=/[\\^$.*+?()[\]{}|]/g,NEe=/^\[object .+?Constructor\]$/,REe=Function.prototype,MEe=Object.prototype,IEe=REe.toString,OEe=MEe.hasOwnProperty,PEe=RegExp("^"+IEe.call(OEe).replace(DEe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");o(BEe,"baseIsNative");UY=BEe});function FEe(t,e){return t?.[e]}var WY,YY=M(()=>{"use strict";o(FEe,"getValue");WY=FEe});function zEe(t,e){var r=WY(t,e);return UY(r)?r:void 0}var As,Oh=M(()=>{"use strict";HY();YY();o(zEe,"getNative");As=zEe});var GEe,Nu,hv=M(()=>{"use strict";Oh();GEe=As(Object,"create"),Nu=GEe});function $Ee(){this.__data__=Nu?Nu(null):{},this.size=0}var qY,XY=M(()=>{"use strict";hv();o($Ee,"hashClear");qY=$Ee});function VEe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}var jY,KY=M(()=>{"use strict";o(VEe,"hashDelete");jY=VEe});function YEe(t){var e=this.__data__;if(Nu){var r=e[t];return r===UEe?void 0:r}return WEe.call(e,t)?e[t]:void 0}var UEe,HEe,WEe,QY,ZY=M(()=>{"use strict";hv();UEe="__lodash_hash_undefined__",HEe=Object.prototype,WEe=HEe.hasOwnProperty;o(YEe,"hashGet");QY=YEe});function jEe(t){var e=this.__data__;return Nu?e[t]!==void 0:XEe.call(e,t)}var qEe,XEe,JY,eq=M(()=>{"use strict";hv();qEe=Object.prototype,XEe=qEe.hasOwnProperty;o(jEe,"hashHas");JY=jEe});function QEe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=Nu&&e===void 0?KEe:e,this}var KEe,tq,rq=M(()=>{"use strict";hv();KEe="__lodash_hash_undefined__";o(QEe,"hashSet");tq=QEe});function Zp(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{"use strict";XY();KY();ZY();eq();rq();o(Zp,"Hash");Zp.prototype.clear=qY;Zp.prototype.delete=jY;Zp.prototype.get=QY;Zp.prototype.has=JY;Zp.prototype.set=tq;N_=Zp});function ZEe(){this.__data__=[],this.size=0}var iq,aq=M(()=>{"use strict";o(ZEe,"listCacheClear");iq=ZEe});function JEe(t,e){return t===e||t!==t&&e!==e}var Fo,Ad=M(()=>{"use strict";o(JEe,"eq");Fo=JEe});function e6e(t,e){for(var r=t.length;r--;)if(Fo(t[r][0],e))return r;return-1}var Ph,fv=M(()=>{"use strict";Ad();o(e6e,"assocIndexOf");Ph=e6e});function n6e(t){var e=this.__data__,r=Ph(e,t);if(r<0)return!1;var n=e.length-1;return r==n?e.pop():r6e.call(e,r,1),--this.size,!0}var t6e,r6e,sq,oq=M(()=>{"use strict";fv();t6e=Array.prototype,r6e=t6e.splice;o(n6e,"listCacheDelete");sq=n6e});function i6e(t){var e=this.__data__,r=Ph(e,t);return r<0?void 0:e[r][1]}var lq,cq=M(()=>{"use strict";fv();o(i6e,"listCacheGet");lq=i6e});function a6e(t){return Ph(this.__data__,t)>-1}var uq,hq=M(()=>{"use strict";fv();o(a6e,"listCacheHas");uq=a6e});function s6e(t,e){var r=this.__data__,n=Ph(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this}var fq,dq=M(()=>{"use strict";fv();o(s6e,"listCacheSet");fq=s6e});function Jp(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{"use strict";aq();oq();cq();hq();dq();o(Jp,"ListCache");Jp.prototype.clear=iq;Jp.prototype.delete=sq;Jp.prototype.get=lq;Jp.prototype.has=uq;Jp.prototype.set=fq;Bh=Jp});var o6e,Fh,l5=M(()=>{"use strict";Oh();Bo();o6e=As(oi,"Map"),Fh=o6e});function l6e(){this.size=0,this.__data__={hash:new N_,map:new(Fh||Bh),string:new N_}}var pq,mq=M(()=>{"use strict";nq();dv();l5();o(l6e,"mapCacheClear");pq=l6e});function c6e(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}var gq,yq=M(()=>{"use strict";o(c6e,"isKeyable");gq=c6e});function u6e(t,e){var r=t.__data__;return gq(e)?r[typeof e=="string"?"string":"hash"]:r.map}var zh,pv=M(()=>{"use strict";yq();o(u6e,"getMapData");zh=u6e});function h6e(t){var e=zh(this,t).delete(t);return this.size-=e?1:0,e}var vq,xq=M(()=>{"use strict";pv();o(h6e,"mapCacheDelete");vq=h6e});function f6e(t){return zh(this,t).get(t)}var bq,wq=M(()=>{"use strict";pv();o(f6e,"mapCacheGet");bq=f6e});function d6e(t){return zh(this,t).has(t)}var Tq,kq=M(()=>{"use strict";pv();o(d6e,"mapCacheHas");Tq=d6e});function p6e(t,e){var r=zh(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this}var Eq,Sq=M(()=>{"use strict";pv();o(p6e,"mapCacheSet");Eq=p6e});function em(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{"use strict";mq();xq();wq();kq();Sq();o(em,"MapCache");em.prototype.clear=pq;em.prototype.delete=vq;em.prototype.get=bq;em.prototype.has=Tq;em.prototype.set=Eq;_d=em});function R_(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(m6e);var r=o(function(){var n=arguments,i=e?e.apply(this,n):n[0],a=r.cache;if(a.has(i))return a.get(i);var s=t.apply(this,n);return r.cache=a.set(i,s)||a,s},"memoized");return r.cache=new(R_.Cache||_d),r}var m6e,tm,M_=M(()=>{"use strict";c5();m6e="Expected a function";o(R_,"memoize");R_.Cache=_d;tm=R_});function g6e(){this.__data__=new Bh,this.size=0}var Cq,Aq=M(()=>{"use strict";dv();o(g6e,"stackClear");Cq=g6e});function y6e(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}var _q,Lq=M(()=>{"use strict";o(y6e,"stackDelete");_q=y6e});function v6e(t){return this.__data__.get(t)}var Dq,Nq=M(()=>{"use strict";o(v6e,"stackGet");Dq=v6e});function x6e(t){return this.__data__.has(t)}var Rq,Mq=M(()=>{"use strict";o(x6e,"stackHas");Rq=x6e});function w6e(t,e){var r=this.__data__;if(r instanceof Bh){var n=r.__data__;if(!Fh||n.length{"use strict";dv();l5();c5();b6e=200;o(w6e,"stackSet");Iq=w6e});function rm(t){var e=this.__data__=new Bh(t);this.size=e.size}var bc,mv=M(()=>{"use strict";dv();Aq();Lq();Nq();Mq();Oq();o(rm,"Stack");rm.prototype.clear=Cq;rm.prototype.delete=_q;rm.prototype.get=Dq;rm.prototype.has=Rq;rm.prototype.set=Iq;bc=rm});var T6e,nm,I_=M(()=>{"use strict";Oh();T6e=function(){try{var t=As(Object,"defineProperty");return t({},"",{}),t}catch{}}(),nm=T6e});function k6e(t,e,r){e=="__proto__"&&nm?nm(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}var wc,im=M(()=>{"use strict";I_();o(k6e,"baseAssignValue");wc=k6e});function E6e(t,e,r){(r!==void 0&&!Fo(t[e],r)||r===void 0&&!(e in t))&&wc(t,e,r)}var gv,O_=M(()=>{"use strict";im();Ad();o(E6e,"assignMergeValue");gv=E6e});function S6e(t){return function(e,r,n){for(var i=-1,a=Object(e),s=n(e),l=s.length;l--;){var u=s[t?l:++i];if(r(a[u],u,a)===!1)break}return e}}var Pq,Bq=M(()=>{"use strict";o(S6e,"createBaseFor");Pq=S6e});var C6e,am,u5=M(()=>{"use strict";Bq();C6e=Pq(),am=C6e});function _6e(t,e){if(e)return t.slice();var r=t.length,n=Gq?Gq(r):new t.constructor(r);return t.copy(n),n}var $q,Fq,A6e,zq,Gq,h5,P_=M(()=>{"use strict";Bo();$q=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Fq=$q&&typeof module=="object"&&module&&!module.nodeType&&module,A6e=Fq&&Fq.exports===$q,zq=A6e?oi.Buffer:void 0,Gq=zq?zq.allocUnsafe:void 0;o(_6e,"cloneBuffer");h5=_6e});var L6e,sm,B_=M(()=>{"use strict";Bo();L6e=oi.Uint8Array,sm=L6e});function D6e(t){var e=new t.constructor(t.byteLength);return new sm(e).set(new sm(t)),e}var om,f5=M(()=>{"use strict";B_();o(D6e,"cloneArrayBuffer");om=D6e});function N6e(t,e){var r=e?om(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}var d5,F_=M(()=>{"use strict";f5();o(N6e,"cloneTypedArray");d5=N6e});function R6e(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r{"use strict";o(R6e,"copyArray");p5=R6e});var Vq,M6e,Uq,Hq=M(()=>{"use strict";io();Vq=Object.create,M6e=function(){function t(){}return o(t,"object"),function(e){if(!xn(e))return{};if(Vq)return Vq(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}(),Uq=M6e});function I6e(t,e){return function(r){return t(e(r))}}var m5,G_=M(()=>{"use strict";o(I6e,"overArg");m5=I6e});var O6e,lm,g5=M(()=>{"use strict";G_();O6e=m5(Object.getPrototypeOf,Object),lm=O6e});function B6e(t){var e=t&&t.constructor,r=typeof e=="function"&&e.prototype||P6e;return t===r}var P6e,Tc,cm=M(()=>{"use strict";P6e=Object.prototype;o(B6e,"isPrototype");Tc=B6e});function F6e(t){return typeof t.constructor=="function"&&!Tc(t)?Uq(lm(t)):{}}var y5,$_=M(()=>{"use strict";Hq();g5();cm();o(F6e,"initCloneObject");y5=F6e});function z6e(t){return t!=null&&typeof t=="object"}var ei,zo=M(()=>{"use strict";o(z6e,"isObjectLike");ei=z6e});function $6e(t){return ei(t)&&ga(t)==G6e}var G6e,V_,Wq=M(()=>{"use strict";Lu();zo();G6e="[object Arguments]";o($6e,"baseIsArguments");V_=$6e});var Yq,V6e,U6e,H6e,Ml,um=M(()=>{"use strict";Wq();zo();Yq=Object.prototype,V6e=Yq.hasOwnProperty,U6e=Yq.propertyIsEnumerable,H6e=V_(function(){return arguments}())?V_:function(t){return ei(t)&&V6e.call(t,"callee")&&!U6e.call(t,"callee")},Ml=H6e});var W6e,Dt,Hn=M(()=>{"use strict";W6e=Array.isArray,Dt=W6e});function q6e(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=Y6e}var Y6e,hm,v5=M(()=>{"use strict";Y6e=9007199254740991;o(q6e,"isLength");hm=q6e});function X6e(t){return t!=null&&hm(t.length)&&!_i(t)}var li,Go=M(()=>{"use strict";uv();v5();o(X6e,"isArrayLike");li=X6e});function j6e(t){return ei(t)&&li(t)}var Ld,x5=M(()=>{"use strict";Go();zo();o(j6e,"isArrayLikeObject");Ld=j6e});function K6e(){return!1}var qq,Xq=M(()=>{"use strict";o(K6e,"stubFalse");qq=K6e});var Qq,jq,Q6e,Kq,Z6e,J6e,Il,fm=M(()=>{"use strict";Bo();Xq();Qq=typeof exports=="object"&&exports&&!exports.nodeType&&exports,jq=Qq&&typeof module=="object"&&module&&!module.nodeType&&module,Q6e=jq&&jq.exports===Qq,Kq=Q6e?oi.Buffer:void 0,Z6e=Kq?Kq.isBuffer:void 0,J6e=Z6e||qq,Il=J6e});function aSe(t){if(!ei(t)||ga(t)!=eSe)return!1;var e=lm(t);if(e===null)return!0;var r=nSe.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&Zq.call(r)==iSe}var eSe,tSe,rSe,Zq,nSe,iSe,Jq,eX=M(()=>{"use strict";Lu();g5();zo();eSe="[object Object]",tSe=Function.prototype,rSe=Object.prototype,Zq=tSe.toString,nSe=rSe.hasOwnProperty,iSe=Zq.call(Object);o(aSe,"isPlainObject");Jq=aSe});function DSe(t){return ei(t)&&hm(t.length)&&!!zn[ga(t)]}var sSe,oSe,lSe,cSe,uSe,hSe,fSe,dSe,pSe,mSe,gSe,ySe,vSe,xSe,bSe,wSe,TSe,kSe,ESe,SSe,CSe,ASe,_Se,LSe,zn,tX,rX=M(()=>{"use strict";Lu();v5();zo();sSe="[object Arguments]",oSe="[object Array]",lSe="[object Boolean]",cSe="[object Date]",uSe="[object Error]",hSe="[object Function]",fSe="[object Map]",dSe="[object Number]",pSe="[object Object]",mSe="[object RegExp]",gSe="[object Set]",ySe="[object String]",vSe="[object WeakMap]",xSe="[object ArrayBuffer]",bSe="[object DataView]",wSe="[object Float32Array]",TSe="[object Float64Array]",kSe="[object Int8Array]",ESe="[object Int16Array]",SSe="[object Int32Array]",CSe="[object Uint8Array]",ASe="[object Uint8ClampedArray]",_Se="[object Uint16Array]",LSe="[object Uint32Array]",zn={};zn[wSe]=zn[TSe]=zn[kSe]=zn[ESe]=zn[SSe]=zn[CSe]=zn[ASe]=zn[_Se]=zn[LSe]=!0;zn[sSe]=zn[oSe]=zn[xSe]=zn[lSe]=zn[bSe]=zn[cSe]=zn[uSe]=zn[hSe]=zn[fSe]=zn[dSe]=zn[pSe]=zn[mSe]=zn[gSe]=zn[ySe]=zn[vSe]=!1;o(DSe,"baseIsTypedArray");tX=DSe});function NSe(t){return function(e){return t(e)}}var $o,Dd=M(()=>{"use strict";o(NSe,"baseUnary");$o=NSe});var nX,yv,RSe,U_,MSe,Vo,vv=M(()=>{"use strict";L_();nX=typeof exports=="object"&&exports&&!exports.nodeType&&exports,yv=nX&&typeof module=="object"&&module&&!module.nodeType&&module,RSe=yv&&yv.exports===nX,U_=RSe&&s5.process,MSe=function(){try{var t=yv&&yv.require&&yv.require("util").types;return t||U_&&U_.binding&&U_.binding("util")}catch{}}(),Vo=MSe});var iX,ISe,Gh,xv=M(()=>{"use strict";rX();Dd();vv();iX=Vo&&Vo.isTypedArray,ISe=iX?$o(iX):tX,Gh=ISe});function OSe(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}var bv,H_=M(()=>{"use strict";o(OSe,"safeGet");bv=OSe});function FSe(t,e,r){var n=t[e];(!(BSe.call(t,e)&&Fo(n,r))||r===void 0&&!(e in t))&&wc(t,e,r)}var PSe,BSe,kc,dm=M(()=>{"use strict";im();Ad();PSe=Object.prototype,BSe=PSe.hasOwnProperty;o(FSe,"assignValue");kc=FSe});function zSe(t,e,r,n){var i=!r;r||(r={});for(var a=-1,s=e.length;++a{"use strict";dm();im();o(zSe,"copyObject");Uo=zSe});function GSe(t,e){for(var r=-1,n=Array(t);++r{"use strict";o(GSe,"baseTimes");aX=GSe});function USe(t,e){var r=typeof t;return e=e??$Se,!!e&&(r=="number"||r!="symbol"&&VSe.test(t))&&t>-1&&t%1==0&&t{"use strict";$Se=9007199254740991,VSe=/^(?:0|[1-9]\d*)$/;o(USe,"isIndex");$h=USe});function YSe(t,e){var r=Dt(t),n=!r&&Ml(t),i=!r&&!n&&Il(t),a=!r&&!n&&!i&&Gh(t),s=r||n||i||a,l=s?aX(t.length,String):[],u=l.length;for(var h in t)(e||WSe.call(t,h))&&!(s&&(h=="length"||i&&(h=="offset"||h=="parent")||a&&(h=="buffer"||h=="byteLength"||h=="byteOffset")||$h(h,u)))&&l.push(h);return l}var HSe,WSe,b5,W_=M(()=>{"use strict";sX();um();Hn();fm();wv();xv();HSe=Object.prototype,WSe=HSe.hasOwnProperty;o(YSe,"arrayLikeKeys");b5=YSe});function qSe(t){var e=[];if(t!=null)for(var r in Object(t))e.push(r);return e}var oX,lX=M(()=>{"use strict";o(qSe,"nativeKeysIn");oX=qSe});function KSe(t){if(!xn(t))return oX(t);var e=Tc(t),r=[];for(var n in t)n=="constructor"&&(e||!jSe.call(t,n))||r.push(n);return r}var XSe,jSe,cX,uX=M(()=>{"use strict";io();cm();lX();XSe=Object.prototype,jSe=XSe.hasOwnProperty;o(KSe,"baseKeysIn");cX=KSe});function QSe(t){return li(t)?b5(t,!0):cX(t)}var _s,Vh=M(()=>{"use strict";W_();uX();Go();o(QSe,"keysIn");_s=QSe});function ZSe(t){return Uo(t,_s(t))}var hX,fX=M(()=>{"use strict";Nd();Vh();o(ZSe,"toPlainObject");hX=ZSe});function JSe(t,e,r,n,i,a,s){var l=bv(t,r),u=bv(e,r),h=s.get(u);if(h){gv(t,r,h);return}var f=a?a(l,u,r+"",t,e,s):void 0,d=f===void 0;if(d){var p=Dt(u),m=!p&&Il(u),g=!p&&!m&&Gh(u);f=u,p||m||g?Dt(l)?f=l:Ld(l)?f=p5(l):m?(d=!1,f=h5(u,!0)):g?(d=!1,f=d5(u,!0)):f=[]:Jq(u)||Ml(u)?(f=l,Ml(l)?f=hX(l):(!xn(l)||_i(l))&&(f=y5(u))):d=!1}d&&(s.set(u,f),i(f,u,n,a,s),s.delete(u)),gv(t,r,f)}var dX,pX=M(()=>{"use strict";O_();P_();F_();z_();$_();um();Hn();x5();fm();uv();io();eX();xv();H_();fX();o(JSe,"baseMergeDeep");dX=JSe});function mX(t,e,r,n,i){t!==e&&am(e,function(a,s){if(i||(i=new bc),xn(a))dX(t,e,s,r,mX,n,i);else{var l=n?n(bv(t,s),a,s+"",t,e,i):void 0;l===void 0&&(l=a),gv(t,s,l)}},_s)}var gX,yX=M(()=>{"use strict";mv();O_();u5();pX();io();Vh();H_();o(mX,"baseMerge");gX=mX});function eCe(t){return t}var aa,Ru=M(()=>{"use strict";o(eCe,"identity");aa=eCe});function tCe(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}var vX,xX=M(()=>{"use strict";o(tCe,"apply");vX=tCe});function rCe(t,e,r){return e=bX(e===void 0?t.length-1:e,0),function(){for(var n=arguments,i=-1,a=bX(n.length-e,0),s=Array(a);++i{"use strict";xX();bX=Math.max;o(rCe,"overRest");w5=rCe});function nCe(t){return function(){return t}}var Ls,q_=M(()=>{"use strict";o(nCe,"constant");Ls=nCe});var iCe,wX,TX=M(()=>{"use strict";q_();I_();Ru();iCe=nm?function(t,e){return nm(t,"toString",{configurable:!0,enumerable:!1,value:Ls(e),writable:!0})}:aa,wX=iCe});function lCe(t){var e=0,r=0;return function(){var n=oCe(),i=sCe-(n-r);if(r=n,i>0){if(++e>=aCe)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var aCe,sCe,oCe,kX,EX=M(()=>{"use strict";aCe=800,sCe=16,oCe=Date.now;o(lCe,"shortOut");kX=lCe});var cCe,T5,X_=M(()=>{"use strict";TX();EX();cCe=kX(wX),T5=cCe});function uCe(t,e){return T5(w5(t,e,aa),t+"")}var Ec,pm=M(()=>{"use strict";Ru();Y_();X_();o(uCe,"baseRest");Ec=uCe});function hCe(t,e,r){if(!xn(r))return!1;var n=typeof e;return(n=="number"?li(r)&&$h(e,r.length):n=="string"&&e in r)?Fo(r[e],t):!1}var ao,Rd=M(()=>{"use strict";Ad();Go();wv();io();o(hCe,"isIterateeCall");ao=hCe});function fCe(t){return Ec(function(e,r){var n=-1,i=r.length,a=i>1?r[i-1]:void 0,s=i>2?r[2]:void 0;for(a=t.length>3&&typeof a=="function"?(i--,a):void 0,s&&ao(r[0],r[1],s)&&(a=i<3?void 0:a,i=1),e=Object(e);++n{"use strict";pm();Rd();o(fCe,"createAssigner");k5=fCe});var dCe,Uh,K_=M(()=>{"use strict";yX();j_();dCe=k5(function(t,e,r){gX(t,e,r)}),Uh=dCe});function J_(t,e){if(!t)return e;let r=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return pCe[r]??e}function vCe(t,e){let r=t.trim();if(r)return e.securityLevel!=="loose"?(0,AX.sanitizeUrl)(r):r}function DX(t,e){return!t||!e?0:Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function bCe(t){let e,r=0;t.forEach(i=>{r+=DX(i,e),e=i});let n=r/2;return e9(t,n)}function wCe(t){return t.length===1?t[0]:bCe(t)}function kCe(t,e,r){let n=structuredClone(r);Y.info("our points",n),e!=="start_left"&&e!=="start_right"&&n.reverse();let i=25+t,a=e9(n,i),s=10+t*.5,l=Math.atan2(n[0].y-a.y,n[0].x-a.x),u={x:0,y:0};return e==="start_left"?(u.x=Math.sin(l+Math.PI)*s+(n[0].x+a.x)/2,u.y=-Math.cos(l+Math.PI)*s+(n[0].y+a.y)/2):e==="end_right"?(u.x=Math.sin(l-Math.PI)*s+(n[0].x+a.x)/2-5,u.y=-Math.cos(l-Math.PI)*s+(n[0].y+a.y)/2-5):e==="end_left"?(u.x=Math.sin(l)*s+(n[0].x+a.x)/2-5,u.y=-Math.cos(l)*s+(n[0].y+a.y)/2-5):(u.x=Math.sin(l)*s+(n[0].x+a.x)/2,u.y=-Math.cos(l)*s+(n[0].y+a.y)/2),u}function t9(t){let e="",r="";for(let n of t)n!==void 0&&(n.startsWith("color:")||n.startsWith("text-align:")?r=r+n+";":e=e+n+";");return{style:e,labelStyle:r}}function ECe(t){let e="",r="0123456789abcdef",n=r.length;for(let i=0;i{"use strict";AX=Ji(Qp(),1);pr();fr();nC();ut();Zf();gp();M_();K_();Qb();Z_="\u200B",pCe={curveBasis:Po,curveBasisClosed:Y3,curveBasisOpen:q3,curveBumpX:l_,curveBumpY:c_,curveBundle:u_,curveCardinalClosed:f_,curveCardinalOpen:p_,curveCardinal:h_,curveCatmullRomClosed:y_,curveCatmullRomOpen:v_,curveCatmullRom:g_,curveLinear:Xp,curveLinearClosed:Z3,curveMonotoneX:b_,curveMonotoneY:w_,curveNatural:e5,curveStep:r5,curveStepAfter:k_,curveStepBefore:T_},mCe=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,gCe=o(function(t,e){let r=_X(t,/(?:init\b)|(?:initialize\b)/),n={};if(Array.isArray(r)){let s=r.map(l=>l.args);xp(s),n=Vn(n,[...s])}else n=r.args;if(!n)return;let i=mp(t,e),a="config";return n[a]!==void 0&&(i==="flowchart-v2"&&(i="flowchart"),n[i]=n[a],delete n[a]),n},"detectInit"),_X=o(function(t,e=null){try{let r=new RegExp(`[%]{2}(?![{]${mCe.source})(?=[}][%]{2}).* +`,"ig");t=t.trim().replace(r,"").replace(/'/gm,'"'),Y.debug(`Detecting diagram directive${e!==null?" type:"+e:""} based on the text:${t}`);let n,i=[];for(;(n=Kf.exec(t))!==null;)if(n.index===Kf.lastIndex&&Kf.lastIndex++,n&&!e||e&&n[1]?.match(e)||e&&n[2]?.match(e)){let a=n[1]?n[1]:n[2],s=n[3]?n[3].trim():n[4]?JSON.parse(n[4].trim()):null;i.push({type:a,args:s})}return i.length===0?{type:t,args:null}:i.length===1?i[0]:i}catch(r){return Y.error(`ERROR: ${r.message} - Unable to parse directive type: '${e}' based on the text: '${t}'`),{type:void 0,args:null}}},"detectDirective"),LX=o(function(t){return t.replace(Kf,"")},"removeDirectives"),yCe=o(function(t,e){for(let[r,n]of e.entries())if(n.match(t))return r;return-1},"isSubstringInArray");o(J_,"interpolateToCurve");o(vCe,"formatUrl");xCe=o((t,...e)=>{let r=t.split("."),n=r.length-1,i=r[n],a=window;for(let s=0;s{let r=Math.pow(10,e);return Math.round(t*r)/r},"roundNumber"),e9=o((t,e)=>{let r,n=e;for(let i of t){if(r){let a=DX(i,r);if(a=1)return{x:i.x,y:i.y};if(s>0&&s<1)return{x:SX((1-s)*r.x+s*i.x,5),y:SX((1-s)*r.y+s*i.y,5)}}}r=i}throw new Error("Could not find a suitable point for the given distance")},"calculatePoint"),TCe=o((t,e,r)=>{Y.info(`our points ${JSON.stringify(e)}`),e[0]!==r&&(e=e.reverse());let i=e9(e,25),a=t?10:5,s=Math.atan2(e[0].y-i.y,e[0].x-i.x),l={x:0,y:0};return l.x=Math.sin(s)*a+(e[0].x+i.x)/2,l.y=-Math.cos(s)*a+(e[0].y+i.y)/2,l},"calcCardinalityPosition");o(kCe,"calcTerminalLabelPosition");o(t9,"getStylesFromArray");CX=0,r9=o(()=>(CX++,"id-"+Math.random().toString(36).substr(2,12)+"-"+CX),"generateId");o(ECe,"makeRandomHex");n9=o(t=>ECe(t.length),"random"),SCe=o(function(){return{x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0,text:""}},"getTextObj"),CCe=o(function(t,e){let r=e.text.replace(qe.lineBreakRegex," "),[,n]=Ho(e.fontSize),i=t.append("text");i.attr("x",e.x),i.attr("y",e.y),i.style("text-anchor",e.anchor),i.style("font-family",e.fontFamily),i.style("font-size",n),i.style("font-weight",e.fontWeight),i.attr("fill",e.fill),e.class!==void 0&&i.attr("class",e.class);let a=i.append("tspan");return a.attr("x",e.x+e.textMargin*2),a.attr("fill",e.fill),a.text(r),i},"drawSimpleText"),i9=tm((t,e,r)=>{if(!t||(r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"
"},r),qe.lineBreakRegex.test(t)))return t;let n=t.split(" ").filter(Boolean),i=[],a="";return n.forEach((s,l)=>{let u=so(`${s} `,r),h=so(a,r);if(u>e){let{hyphenatedStrings:p,remainingWord:m}=ACe(s,e,"-",r);i.push(a,...p),a=m}else h+u>=e?(i.push(a),a=s):a=[a,s].filter(Boolean).join(" ");l+1===n.length&&i.push(a)}),i.filter(s=>s!=="").join(r.joinWith)},(t,e,r)=>`${t}${e}${r.fontSize}${r.fontWeight}${r.fontFamily}${r.joinWith}`),ACe=tm((t,e,r="-",n)=>{n=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},n);let i=[...t],a=[],s="";return i.forEach((l,u)=>{let h=`${s}${l}`;if(so(h,n)>=e){let d=u+1,p=i.length===d,m=`${h}${r}`;a.push(p?h:m),s=""}else s=h}),{hyphenatedStrings:a,remainingWord:s}},(t,e,r="-",n)=>`${t}${e}${r}${n.fontSize}${n.fontWeight}${n.fontFamily}`);o(S5,"calculateTextHeight");o(so,"calculateTextWidth");a9=tm((t,e)=>{let{fontSize:r=12,fontFamily:n="Arial",fontWeight:i=400}=e;if(!t)return{width:0,height:0};let[,a]=Ho(r),s=["sans-serif",n],l=t.split(qe.lineBreakRegex),u=[],h=Ve("body");if(!h.remove)return{width:0,height:0,lineHeight:0};let f=h.append("svg");for(let p of s){let m=0,g={width:0,height:0,lineHeight:0};for(let y of l){let v=SCe();v.text=y||Z_;let x=CCe(f,v).style("font-size",a).style("font-weight",i).style("font-family",p),b=(x._groups||x)[0][0].getBBox();if(b.width===0&&b.height===0)throw new Error("svg element not in render tree");g.width=Math.round(Math.max(g.width,b.width)),m=Math.round(b.height),g.height+=m,g.lineHeight=Math.round(Math.max(g.lineHeight,m))}u.push(g)}f.remove();let d=isNaN(u[1].height)||isNaN(u[1].width)||isNaN(u[1].lineHeight)||u[0].height>u[1].height&&u[0].width>u[1].width&&u[0].lineHeight>u[1].lineHeight?0:1;return u[d]},(t,e)=>`${t}${e.fontSize}${e.fontWeight}${e.fontFamily}`),Q_=class{constructor(e=!1,r){this.count=0;this.count=r?r.length:0,this.next=e?()=>this.count++:()=>Date.now()}static{o(this,"InitIDGenerator")}},_Ce=o(function(t){return E5=E5||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),E5.innerHTML=t,unescape(E5.textContent)},"entityDecode");o(s9,"isDetailedError");LCe=o((t,e,r,n)=>{if(!n)return;let i=t.node()?.getBBox();i&&t.append("text").text(n).attr("text-anchor","middle").attr("x",i.x+i.width/2).attr("y",-r).attr("class",e)},"insertTitle"),Ho=o(t=>{if(typeof t=="number")return[t,t+"px"];let e=parseInt(t??"",10);return Number.isNaN(e)?[void 0,void 0]:t===String(e)?[e,t+"px"]:[e,t]},"parseFontSize");o(Ds,"cleanAndMerge");Ut={assignWithDepth:Vn,wrapLabel:i9,calculateTextHeight:S5,calculateTextWidth:so,calculateTextDimensions:a9,cleanAndMerge:Ds,detectInit:gCe,detectDirective:_X,isSubstringInArray:yCe,interpolateToCurve:J_,calcLabelPosition:wCe,calcCardinalityPosition:TCe,calcTerminalLabelPosition:kCe,formatUrl:vCe,getStylesFromArray:t9,generateId:r9,random:n9,runFunc:xCe,entityDecode:_Ce,insertTitle:LCe,parseFontSize:Ho,InitIDGenerator:Q_},NX=o(function(t){let e=t;return e=e.replace(/style.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),e=e.replace(/classDef.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),e=e.replace(/#\w+;/g,function(r){let n=r.substring(1,r.length-1);return/^\+?\d+$/.test(n)?"\uFB02\xB0\xB0"+n+"\xB6\xDF":"\uFB02\xB0"+n+"\xB6\xDF"}),e},"encodeEntities"),Ma=o(function(t){return t.replace(/fl°°/g,"&#").replace(/fl°/g,"&").replace(/¶ß/g,";")},"decodeEntities"),C5=o((t,e,{counter:r=0,prefix:n,suffix:i})=>`${n?`${n}_`:""}${t}_${e}_${r}${i?`_${i}`:""}`,"getEdgeId");o(Gn,"handleUndefinedAttr")});function Ol(t,e,r,n,i){if(!e[t].width)if(r)e[t].text=i9(e[t].text,i,n),e[t].textLines=e[t].text.split(qe.lineBreakRegex).length,e[t].width=i,e[t].height=S5(e[t].text,n);else{let a=e[t].text.split(qe.lineBreakRegex);e[t].textLines=a.length;let s=0;e[t].height=0,e[t].width=0;for(let l of a)e[t].width=Math.max(so(l,n),e[t].width),s=S5(l,n),e[t].height=e[t].height+s}}function PX(t,e,r,n,i){let a=new D5(i);a.data.widthLimit=r.data.widthLimit/Math.min(o9,n.length);for(let[s,l]of n.entries()){let u=0;l.image={width:0,height:0,Y:0},l.sprite&&(l.image.width=48,l.image.height=48,l.image.Y=u,u=l.image.Y+l.image.height);let h=l.wrap&&Gt.wrap,f=A5(Gt);if(f.fontSize=f.fontSize+2,f.fontWeight="bold",Ol("label",l,h,f,a.data.widthLimit),l.label.Y=u+8,u=l.label.Y+l.label.height,l.type&&l.type.text!==""){l.type.text="["+l.type.text+"]";let g=A5(Gt);Ol("type",l,h,g,a.data.widthLimit),l.type.Y=u+5,u=l.type.Y+l.type.height}if(l.descr&&l.descr.text!==""){let g=A5(Gt);g.fontSize=g.fontSize-2,Ol("descr",l,h,g,a.data.widthLimit),l.descr.Y=u+20,u=l.descr.Y+l.descr.height}if(s==0||s%o9===0){let g=r.data.startx+Gt.diagramMarginX,y=r.data.stopy+Gt.diagramMarginY+u;a.setData(g,g,y,y)}else{let g=a.data.stopx!==a.data.startx?a.data.stopx+Gt.diagramMarginX:a.data.startx,y=a.data.starty;a.setData(g,g,y,y)}a.name=l.alias;let d=i.db.getC4ShapeArray(l.alias),p=i.db.getC4ShapeKeys(l.alias);p.length>0&&OX(a,t,d,p),e=l.alias;let m=i.db.getBoundarys(e);m.length>0&&PX(t,e,a,m,i),l.alias!=="global"&&IX(t,l,a),r.data.stopy=Math.max(a.data.stopy+Gt.c4ShapeMargin,r.data.stopy),r.data.stopx=Math.max(a.data.stopx+Gt.c4ShapeMargin,r.data.stopx),_5=Math.max(_5,r.data.stopx),L5=Math.max(L5,r.data.stopy)}}var _5,L5,MX,o9,Gt,D5,l9,Tv,A5,DCe,IX,OX,Ns,RX,NCe,RCe,MCe,c9,BX=M(()=>{"use strict";pr();RY();ut();US();fr();u7();Vt();gp();hr();ai();_5=0,L5=0,MX=4,o9=2;ey.yy=Ty;Gt={},D5=class{static{o(this,"Bounds")}constructor(e){this.name="",this.data={},this.data.startx=void 0,this.data.stopx=void 0,this.data.starty=void 0,this.data.stopy=void 0,this.data.widthLimit=void 0,this.nextData={},this.nextData.startx=void 0,this.nextData.stopx=void 0,this.nextData.starty=void 0,this.nextData.stopy=void 0,this.nextData.cnt=0,l9(e.db.getConfig())}setData(e,r,n,i){this.nextData.startx=this.data.startx=e,this.nextData.stopx=this.data.stopx=r,this.nextData.starty=this.data.starty=n,this.nextData.stopy=this.data.stopy=i}updateVal(e,r,n,i){e[r]===void 0?e[r]=n:e[r]=i(n,e[r])}insert(e){this.nextData.cnt=this.nextData.cnt+1;let r=this.nextData.startx===this.nextData.stopx?this.nextData.stopx+e.margin:this.nextData.stopx+e.margin*2,n=r+e.width,i=this.nextData.starty+e.margin*2,a=i+e.height;(r>=this.data.widthLimit||n>=this.data.widthLimit||this.nextData.cnt>MX)&&(r=this.nextData.startx+e.margin+Gt.nextLinePaddingX,i=this.nextData.stopy+e.margin*2,this.nextData.stopx=n=r+e.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=a=i+e.height,this.nextData.cnt=1),e.x=r,e.y=i,this.updateVal(this.data,"startx",r,Math.min),this.updateVal(this.data,"starty",i,Math.min),this.updateVal(this.data,"stopx",n,Math.max),this.updateVal(this.data,"stopy",a,Math.max),this.updateVal(this.nextData,"startx",r,Math.min),this.updateVal(this.nextData,"starty",i,Math.min),this.updateVal(this.nextData,"stopx",n,Math.max),this.updateVal(this.nextData,"stopy",a,Math.max)}init(e){this.name="",this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,widthLimit:void 0},this.nextData={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,cnt:0},l9(e.db.getConfig())}bumpLastMargin(e){this.data.stopx+=e,this.data.stopy+=e}},l9=o(function(t){Vn(Gt,t),t.fontFamily&&(Gt.personFontFamily=Gt.systemFontFamily=Gt.messageFontFamily=t.fontFamily),t.fontSize&&(Gt.personFontSize=Gt.systemFontSize=Gt.messageFontSize=t.fontSize),t.fontWeight&&(Gt.personFontWeight=Gt.systemFontWeight=Gt.messageFontWeight=t.fontWeight)},"setConf"),Tv=o((t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),"c4ShapeFont"),A5=o(t=>({fontFamily:t.boundaryFontFamily,fontSize:t.boundaryFontSize,fontWeight:t.boundaryFontWeight}),"boundaryFont"),DCe=o(t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),"messageFont");o(Ol,"calcC4ShapeTextWH");IX=o(function(t,e,r){e.x=r.data.startx,e.y=r.data.starty,e.width=r.data.stopx-r.data.startx,e.height=r.data.stopy-r.data.starty,e.label.y=Gt.c4ShapeMargin-35;let n=e.wrap&&Gt.wrap,i=A5(Gt);i.fontSize=i.fontSize+2,i.fontWeight="bold";let a=so(e.label.text,i);Ol("label",e,n,i,a),Rl.drawBoundary(t,e,Gt)},"drawBoundary"),OX=o(function(t,e,r,n){let i=0;for(let a of n){i=0;let s=r[a],l=Tv(Gt,s.typeC4Shape.text);switch(l.fontSize=l.fontSize-2,s.typeC4Shape.width=so("\xAB"+s.typeC4Shape.text+"\xBB",l),s.typeC4Shape.height=l.fontSize+2,s.typeC4Shape.Y=Gt.c4ShapePadding,i=s.typeC4Shape.Y+s.typeC4Shape.height-4,s.image={width:0,height:0,Y:0},s.typeC4Shape.text){case"person":case"external_person":s.image.width=48,s.image.height=48,s.image.Y=i,i=s.image.Y+s.image.height;break}s.sprite&&(s.image.width=48,s.image.height=48,s.image.Y=i,i=s.image.Y+s.image.height);let u=s.wrap&&Gt.wrap,h=Gt.width-Gt.c4ShapePadding*2,f=Tv(Gt,s.typeC4Shape.text);if(f.fontSize=f.fontSize+2,f.fontWeight="bold",Ol("label",s,u,f,h),s.label.Y=i+8,i=s.label.Y+s.label.height,s.type&&s.type.text!==""){s.type.text="["+s.type.text+"]";let m=Tv(Gt,s.typeC4Shape.text);Ol("type",s,u,m,h),s.type.Y=i+5,i=s.type.Y+s.type.height}else if(s.techn&&s.techn.text!==""){s.techn.text="["+s.techn.text+"]";let m=Tv(Gt,s.techn.text);Ol("techn",s,u,m,h),s.techn.Y=i+5,i=s.techn.Y+s.techn.height}let d=i,p=s.label.width;if(s.descr&&s.descr.text!==""){let m=Tv(Gt,s.typeC4Shape.text);Ol("descr",s,u,m,h),s.descr.Y=i+20,i=s.descr.Y+s.descr.height,p=Math.max(s.label.width,s.descr.width),d=i-s.descr.textLines*5}p=p+Gt.c4ShapePadding,s.width=Math.max(s.width||Gt.width,p,Gt.width),s.height=Math.max(s.height||Gt.height,d,Gt.height),s.margin=s.margin||Gt.c4ShapeMargin,t.insert(s),Rl.drawC4Shape(e,s,Gt)}t.bumpLastMargin(Gt.c4ShapeMargin)},"drawC4ShapeArray"),Ns=class{static{o(this,"Point")}constructor(e,r){this.x=e,this.y=r}},RX=o(function(t,e){let r=t.x,n=t.y,i=e.x,a=e.y,s=r+t.width/2,l=n+t.height/2,u=Math.abs(r-i),h=Math.abs(n-a),f=h/u,d=t.height/t.width,p=null;return n==a&&ri?p=new Ns(r,l):r==i&&na&&(p=new Ns(s,n)),r>i&&n=f?p=new Ns(r,l+f*t.width/2):p=new Ns(s-u/h*t.height/2,n+t.height):r=f?p=new Ns(r+t.width,l+f*t.width/2):p=new Ns(s+u/h*t.height/2,n+t.height):ra?d>=f?p=new Ns(r+t.width,l-f*t.width/2):p=new Ns(s+t.height/2*u/h,n):r>i&&n>a&&(d>=f?p=new Ns(r,l-t.width/2*f):p=new Ns(s-t.height/2*u/h,n)),p},"getIntersectPoint"),NCe=o(function(t,e){let r={x:0,y:0};r.x=e.x+e.width/2,r.y=e.y+e.height/2;let n=RX(t,r);r.x=t.x+t.width/2,r.y=t.y+t.height/2;let i=RX(e,r);return{startPoint:n,endPoint:i}},"getIntersectPoints"),RCe=o(function(t,e,r,n){let i=0;for(let a of e){i=i+1;let s=a.wrap&&Gt.wrap,l=DCe(Gt);n.db.getC4Type()==="C4Dynamic"&&(a.label.text=i+": "+a.label.text);let h=so(a.label.text,l);Ol("label",a,s,l,h),a.techn&&a.techn.text!==""&&(h=so(a.techn.text,l),Ol("techn",a,s,l,h)),a.descr&&a.descr.text!==""&&(h=so(a.descr.text,l),Ol("descr",a,s,l,h));let f=r(a.from),d=r(a.to),p=NCe(f,d);a.startPoint=p.startPoint,a.endPoint=p.endPoint}Rl.drawRels(t,e,Gt)},"drawRels");o(PX,"drawInsideBoundary");MCe=o(function(t,e,r,n){Gt=pe().c4;let i=pe().securityLevel,a;i==="sandbox"&&(a=Ve("#i"+e));let s=i==="sandbox"?Ve(a.nodes()[0].contentDocument.body):Ve("body"),l=n.db;n.db.setWrap(Gt.wrap),MX=l.getC4ShapeInRow(),o9=l.getC4BoundaryInRow(),Y.debug(`C:${JSON.stringify(Gt,null,2)}`);let u=i==="sandbox"?s.select(`[id="${e}"]`):Ve(`[id="${e}"]`);Rl.insertComputerIcon(u),Rl.insertDatabaseIcon(u),Rl.insertClockIcon(u);let h=new D5(n);h.setData(Gt.diagramMarginX,Gt.diagramMarginX,Gt.diagramMarginY,Gt.diagramMarginY),h.data.widthLimit=screen.availWidth,_5=Gt.diagramMarginX,L5=Gt.diagramMarginY;let f=n.db.getTitle(),d=n.db.getBoundarys("");PX(u,"",h,d,n),Rl.insertArrowHead(u),Rl.insertArrowEnd(u),Rl.insertArrowCrossHead(u),Rl.insertArrowFilledHead(u),RCe(u,n.db.getRels(),n.db.getC4Shape,n),h.data.stopx=_5,h.data.stopy=L5;let p=h.data,g=p.stopy-p.starty+2*Gt.diagramMarginY,v=p.stopx-p.startx+2*Gt.diagramMarginX;f&&u.append("text").text(f).attr("x",(p.stopx-p.startx)/2-4*Gt.diagramMarginX).attr("y",p.starty+Gt.diagramMarginY),Zr(u,g,v,Gt.useMaxWidth);let x=f?60:0;u.attr("viewBox",p.startx-Gt.diagramMarginX+" -"+(Gt.diagramMarginY+x)+" "+v+" "+(g+x)),Y.debug("models:",p)},"draw"),c9={drawPersonOrSystemArray:OX,drawBoundary:IX,setConf:l9,draw:MCe}});var ICe,FX,zX=M(()=>{"use strict";ICe=o(t=>`.person { + stroke: ${t.personBorder}; + fill: ${t.personBkg}; + } +`,"getStyles"),FX=ICe});var GX={};vr(GX,{diagram:()=>OCe});var OCe,$X=M(()=>{"use strict";US();u7();BX();zX();OCe={parser:oz,db:Ty,renderer:c9,styles:FX,init:o(({c4:t,wrap:e})=>{c9.setConf(t),Ty.setWrap(e)},"init")}});function f9(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}function jX(t){Id=t}function oo(t,e){if(e){if(KX.test(t))return t.replace(zCe,HX)}else if(QX.test(t))return t.replace(GCe,HX);return t}function UCe(t){return t.replace(VCe,(e,r)=>(r=r.toLowerCase(),r==="colon"?":":r.charAt(0)==="#"?r.charAt(1)==="x"?String.fromCharCode(parseInt(r.substring(2),16)):String.fromCharCode(+r.substring(1)):""))}function fn(t,e){let r=typeof t=="string"?t:t.source;e=e||"";let n={replace:o((i,a)=>{let s=typeof a=="string"?a:a.source;return s=s.replace(HCe,"$1"),r=r.replace(i,s),n},"replace"),getRegex:o(()=>new RegExp(r,e),"getRegex")};return n}function WX(t){try{t=encodeURI(t).replace(/%25/g,"%")}catch{return null}return t}function YX(t,e){let r=t.replace(/\|/g,(a,s,l)=>{let u=!1,h=s;for(;--h>=0&&l[h]==="\\";)u=!u;return u?"|":" |"}),n=r.split(/ \|/),i=0;if(n[0].trim()||n.shift(),n.length>0&&!n[n.length-1].trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length{let a=i.match(/^\s+/);if(a===null)return i;let[s]=a;return s.length>=n.length?i.slice(n.length):i}).join(` +`)}function en(t,e){return Md.parse(t,e)}var Id,KX,zCe,QX,GCe,$Ce,HX,VCe,HCe,Sv,gm,qCe,XCe,jCe,Av,KCe,ZX,JX,d9,QCe,p9,ZCe,JCe,M5,m9,e7e,ej,t7e,g9,XX,r7e,n7e,tj,i7e,rj,a7e,_v,s7e,o7e,l7e,c7e,u7e,h7e,f7e,d7e,p7e,R5,m7e,nj,ij,g7e,y9,y7e,u9,v7e,N5,Ev,Mu,ym,Cv,Iu,mm,h9,Md,PEt,BEt,FEt,zEt,GEt,$Et,VEt,aj=M(()=>{"use strict";o(f9,"_getDefaults");Id=f9();o(jX,"changeDefaults");KX=/[&<>"']/,zCe=new RegExp(KX.source,"g"),QX=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,GCe=new RegExp(QX.source,"g"),$Ce={"&":"&","<":"<",">":">",'"':""","'":"'"},HX=o(t=>$Ce[t],"getEscapeReplacement");o(oo,"escape$1");VCe=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig;o(UCe,"unescape");HCe=/(^|[^\[])\^/g;o(fn,"edit");o(WX,"cleanUrl");Sv={exec:o(()=>null,"exec")};o(YX,"splitCells");o(kv,"rtrim");o(WCe,"findClosingBracket");o(qX,"outputLink");o(YCe,"indentCodeCompensation");gm=class{static{o(this,"_Tokenizer")}options;rules;lexer;constructor(e){this.options=e||Id}space(e){let r=this.rules.block.newline.exec(e);if(r&&r[0].length>0)return{type:"space",raw:r[0]}}code(e){let r=this.rules.block.code.exec(e);if(r){let n=r[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:r[0],codeBlockStyle:"indented",text:this.options.pedantic?n:kv(n,` +`)}}}fences(e){let r=this.rules.block.fences.exec(e);if(r){let n=r[0],i=YCe(n,r[3]||"");return{type:"code",raw:n,lang:r[2]?r[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):r[2],text:i}}}heading(e){let r=this.rules.block.heading.exec(e);if(r){let n=r[2].trim();if(/#$/.test(n)){let i=kv(n,"#");(this.options.pedantic||!i||/ $/.test(i))&&(n=i.trim())}return{type:"heading",raw:r[0],depth:r[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let r=this.rules.block.hr.exec(e);if(r)return{type:"hr",raw:kv(r[0],` +`)}}blockquote(e){let r=this.rules.block.blockquote.exec(e);if(r){let n=kv(r[0],` +`).split(` +`),i="",a="",s=[];for(;n.length>0;){let l=!1,u=[],h;for(h=0;h/.test(n[h]))u.push(n[h]),l=!0;else if(!l)u.push(n[h]);else break;n=n.slice(h);let f=u.join(` +`),d=f.replace(/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,` + $1`).replace(/^ {0,3}>[ \t]?/gm,"");i=i?`${i} +${f}`:f,a=a?`${a} +${d}`:d;let p=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(d,s,!0),this.lexer.state.top=p,n.length===0)break;let m=s[s.length-1];if(m?.type==="code")break;if(m?.type==="blockquote"){let g=m,y=g.raw+` +`+n.join(` +`),v=this.blockquote(y);s[s.length-1]=v,i=i.substring(0,i.length-g.raw.length)+v.raw,a=a.substring(0,a.length-g.text.length)+v.text;break}else if(m?.type==="list"){let g=m,y=g.raw+` +`+n.join(` +`),v=this.list(y);s[s.length-1]=v,i=i.substring(0,i.length-m.raw.length)+v.raw,a=a.substring(0,a.length-g.raw.length)+v.raw,n=y.substring(s[s.length-1].raw.length).split(` +`);continue}}return{type:"blockquote",raw:i,tokens:s,text:a}}}list(e){let r=this.rules.block.list.exec(e);if(r){let n=r[1].trim(),i=n.length>1,a={type:"list",raw:"",ordered:i,start:i?+n.slice(0,-1):"",loose:!1,items:[]};n=i?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=i?n:"[*+-]");let s=new RegExp(`^( {0,3}${n})((?:[ ][^\\n]*)?(?:\\n|$))`),l=!1;for(;e;){let u=!1,h="",f="";if(!(r=s.exec(e))||this.rules.block.hr.test(e))break;h=r[0],e=e.substring(h.length);let d=r[2].split(` +`,1)[0].replace(/^\t+/,x=>" ".repeat(3*x.length)),p=e.split(` +`,1)[0],m=!d.trim(),g=0;if(this.options.pedantic?(g=2,f=d.trimStart()):m?g=r[1].length+1:(g=r[2].search(/[^ ]/),g=g>4?1:g,f=d.slice(g),g+=r[1].length),m&&/^ *$/.test(p)&&(h+=p+` +`,e=e.substring(p.length+1),u=!0),!u){let x=new RegExp(`^ {0,${Math.min(3,g-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),b=new RegExp(`^ {0,${Math.min(3,g-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),w=new RegExp(`^ {0,${Math.min(3,g-1)}}(?:\`\`\`|~~~)`),_=new RegExp(`^ {0,${Math.min(3,g-1)}}#`);for(;e;){let T=e.split(` +`,1)[0];if(p=T,this.options.pedantic&&(p=p.replace(/^ {1,4}(?=( {4})*[^ ])/g," ")),w.test(p)||_.test(p)||x.test(p)||b.test(e))break;if(p.search(/[^ ]/)>=g||!p.trim())f+=` +`+p.slice(g);else{if(m||d.search(/[^ ]/)>=4||w.test(d)||_.test(d)||b.test(d))break;f+=` +`+p}!m&&!p.trim()&&(m=!0),h+=T+` +`,e=e.substring(T.length+1),d=p.slice(g)}}a.loose||(l?a.loose=!0:/\n *\n *$/.test(h)&&(l=!0));let y=null,v;this.options.gfm&&(y=/^\[[ xX]\] /.exec(f),y&&(v=y[0]!=="[ ] ",f=f.replace(/^\[[ xX]\] +/,""))),a.items.push({type:"list_item",raw:h,task:!!y,checked:v,loose:!1,text:f,tokens:[]}),a.raw+=h}a.items[a.items.length-1].raw=a.items[a.items.length-1].raw.trimEnd(),a.items[a.items.length-1].text=a.items[a.items.length-1].text.trimEnd(),a.raw=a.raw.trimEnd();for(let u=0;ud.type==="space"),f=h.length>0&&h.some(d=>/\n.*\n/.test(d.raw));a.loose=f}if(a.loose)for(let u=0;u$/,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",a=r[3]?r[3].substring(1,r[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):r[3];return{type:"def",tag:n,raw:r[0],href:i,title:a}}}table(e){let r=this.rules.block.table.exec(e);if(!r||!/[:|]/.test(r[2]))return;let n=YX(r[1]),i=r[2].replace(/^\||\| *$/g,"").split("|"),a=r[3]&&r[3].trim()?r[3].replace(/\n[ \t]*$/,"").split(` +`):[],s={type:"table",raw:r[0],header:[],align:[],rows:[]};if(n.length===i.length){for(let l of i)/^ *-+: *$/.test(l)?s.align.push("right"):/^ *:-+: *$/.test(l)?s.align.push("center"):/^ *:-+ *$/.test(l)?s.align.push("left"):s.align.push(null);for(let l=0;l({text:u,tokens:this.lexer.inline(u),header:!1,align:s.align[h]})));return s}}lheading(e){let r=this.rules.block.lheading.exec(e);if(r)return{type:"heading",raw:r[0],depth:r[2].charAt(0)==="="?1:2,text:r[1],tokens:this.lexer.inline(r[1])}}paragraph(e){let r=this.rules.block.paragraph.exec(e);if(r){let n=r[1].charAt(r[1].length-1)===` +`?r[1].slice(0,-1):r[1];return{type:"paragraph",raw:r[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let r=this.rules.block.text.exec(e);if(r)return{type:"text",raw:r[0],text:r[0],tokens:this.lexer.inline(r[0])}}escape(e){let r=this.rules.inline.escape.exec(e);if(r)return{type:"escape",raw:r[0],text:oo(r[1])}}tag(e){let r=this.rules.inline.tag.exec(e);if(r)return!this.lexer.state.inLink&&/^/i.test(r[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(r[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(r[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:r[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:r[0]}}link(e){let r=this.rules.inline.link.exec(e);if(r){let n=r[2].trim();if(!this.options.pedantic&&/^$/.test(n))return;let s=kv(n.slice(0,-1),"\\");if((n.length-s.length)%2===0)return}else{let s=WCe(r[2],"()");if(s>-1){let u=(r[0].indexOf("!")===0?5:4)+r[1].length+s;r[2]=r[2].substring(0,s),r[0]=r[0].substring(0,u).trim(),r[3]=""}}let i=r[2],a="";if(this.options.pedantic){let s=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(i);s&&(i=s[1],a=s[3])}else a=r[3]?r[3].slice(1,-1):"";return i=i.trim(),/^$/.test(n)?i=i.slice(1):i=i.slice(1,-1)),qX(r,{href:i&&i.replace(this.rules.inline.anyPunctuation,"$1"),title:a&&a.replace(this.rules.inline.anyPunctuation,"$1")},r[0],this.lexer)}}reflink(e,r){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let i=(n[2]||n[1]).replace(/\s+/g," "),a=r[i.toLowerCase()];if(!a){let s=n[0].charAt(0);return{type:"text",raw:s,text:s}}return qX(n,a,n[0],this.lexer)}}emStrong(e,r,n=""){let i=this.rules.inline.emStrongLDelim.exec(e);if(!i||i[3]&&n.match(/[\p{L}\p{N}]/u))return;if(!(i[1]||i[2]||"")||!n||this.rules.inline.punctuation.exec(n)){let s=[...i[0]].length-1,l,u,h=s,f=0,d=i[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(d.lastIndex=0,r=r.slice(-1*e.length+s);(i=d.exec(r))!=null;){if(l=i[1]||i[2]||i[3]||i[4]||i[5]||i[6],!l)continue;if(u=[...l].length,i[3]||i[4]){h+=u;continue}else if((i[5]||i[6])&&s%3&&!((s+u)%3)){f+=u;continue}if(h-=u,h>0)continue;u=Math.min(u,u+h+f);let p=[...i[0]][0].length,m=e.slice(0,s+i.index+p+u);if(Math.min(s,u)%2){let y=m.slice(1,-1);return{type:"em",raw:m,text:y,tokens:this.lexer.inlineTokens(y)}}let g=m.slice(2,-2);return{type:"strong",raw:m,text:g,tokens:this.lexer.inlineTokens(g)}}}}codespan(e){let r=this.rules.inline.code.exec(e);if(r){let n=r[2].replace(/\n/g," "),i=/[^ ]/.test(n),a=/^ /.test(n)&&/ $/.test(n);return i&&a&&(n=n.substring(1,n.length-1)),n=oo(n,!0),{type:"codespan",raw:r[0],text:n}}}br(e){let r=this.rules.inline.br.exec(e);if(r)return{type:"br",raw:r[0]}}del(e){let r=this.rules.inline.del.exec(e);if(r)return{type:"del",raw:r[0],text:r[2],tokens:this.lexer.inlineTokens(r[2])}}autolink(e){let r=this.rules.inline.autolink.exec(e);if(r){let n,i;return r[2]==="@"?(n=oo(r[1]),i="mailto:"+n):(n=oo(r[1]),i=n),{type:"link",raw:r[0],text:n,href:i,tokens:[{type:"text",raw:n,text:n}]}}}url(e){let r;if(r=this.rules.inline.url.exec(e)){let n,i;if(r[2]==="@")n=oo(r[0]),i="mailto:"+n;else{let a;do a=r[0],r[0]=this.rules.inline._backpedal.exec(r[0])?.[0]??"";while(a!==r[0]);n=oo(r[0]),r[1]==="www."?i="http://"+r[0]:i=r[0]}return{type:"link",raw:r[0],text:n,href:i,tokens:[{type:"text",raw:n,text:n}]}}}inlineText(e){let r=this.rules.inline.text.exec(e);if(r){let n;return this.lexer.state.inRawBlock?n=r[0]:n=oo(r[0]),{type:"text",raw:r[0],text:n}}}},qCe=/^(?: *(?:\n|$))+/,XCe=/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,jCe=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,Av=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,KCe=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,ZX=/(?:[*+-]|\d{1,9}[.)])/,JX=fn(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html))+?)\n {0,3}(=+|-+) *(?:\n+|$)/).replace(/bull/g,ZX).replace(/blockCode/g,/ {4}/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).getRegex(),d9=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,QCe=/^[^\n]+/,p9=/(?!\s*\])(?:\\.|[^\[\]\\])+/,ZCe=fn(/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/).replace("label",p9).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),JCe=fn(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,ZX).getRegex(),M5="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",m9=/|$))/,e7e=fn("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))","i").replace("comment",m9).replace("tag",M5).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),ej=fn(d9).replace("hr",Av).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",M5).getRegex(),t7e=fn(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",ej).getRegex(),g9={blockquote:t7e,code:XCe,def:ZCe,fences:jCe,heading:KCe,hr:Av,html:e7e,lheading:JX,list:JCe,newline:qCe,paragraph:ej,table:Sv,text:QCe},XX=fn("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",Av).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",M5).getRegex(),r7e={...g9,table:XX,paragraph:fn(d9).replace("hr",Av).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",XX).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",M5).getRegex()},n7e={...g9,html:fn(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",m9).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:Sv,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:fn(d9).replace("hr",Av).replace("heading",` *#{1,6} *[^ +]`).replace("lheading",JX).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},tj=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,i7e=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,rj=/^( {2,}|\\)\n(?!\s*$)/,a7e=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\]*?>/g,l7e=fn(/^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/,"u").replace(/punct/g,_v).getRegex(),c7e=fn("^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)[punct](\\*+)(?=[\\s]|$)|[^punct\\s](\\*+)(?!\\*)(?=[punct\\s]|$)|(?!\\*)[punct\\s](\\*+)(?=[^punct\\s])|[\\s](\\*+)(?!\\*)(?=[punct])|(?!\\*)[punct](\\*+)(?!\\*)(?=[punct])|[^punct\\s](\\*+)(?=[^punct\\s])","gu").replace(/punct/g,_v).getRegex(),u7e=fn("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)[punct](_+)(?=[\\s]|$)|[^punct\\s](_+)(?!_)(?=[punct\\s]|$)|(?!_)[punct\\s](_+)(?=[^punct\\s])|[\\s](_+)(?!_)(?=[punct])|(?!_)[punct](_+)(?!_)(?=[punct])","gu").replace(/punct/g,_v).getRegex(),h7e=fn(/\\([punct])/,"gu").replace(/punct/g,_v).getRegex(),f7e=fn(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),d7e=fn(m9).replace("(?:-->|$)","-->").getRegex(),p7e=fn("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",d7e).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),R5=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,m7e=fn(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace("label",R5).replace("href",/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),nj=fn(/^!?\[(label)\]\[(ref)\]/).replace("label",R5).replace("ref",p9).getRegex(),ij=fn(/^!?\[(ref)\](?:\[\])?/).replace("ref",p9).getRegex(),g7e=fn("reflink|nolink(?!\\()","g").replace("reflink",nj).replace("nolink",ij).getRegex(),y9={_backpedal:Sv,anyPunctuation:h7e,autolink:f7e,blockSkip:o7e,br:rj,code:i7e,del:Sv,emStrongLDelim:l7e,emStrongRDelimAst:c7e,emStrongRDelimUnd:u7e,escape:tj,link:m7e,nolink:ij,punctuation:s7e,reflink:nj,reflinkSearch:g7e,tag:p7e,text:a7e,url:Sv},y7e={...y9,link:fn(/^!?\[(label)\]\((.*?)\)/).replace("label",R5).getRegex(),reflink:fn(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",R5).getRegex()},u9={...y9,escape:fn(tj).replace("])","~|])").getRegex(),url:fn(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,"i").replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\u+" ".repeat(h.length));let i,a,s;for(;e;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some(l=>(i=l.call({lexer:this},e,r))?(e=e.substring(i.raw.length),r.push(i),!0):!1))){if(i=this.tokenizer.space(e)){e=e.substring(i.raw.length),i.raw.length===1&&r.length>0?r[r.length-1].raw+=` +`:r.push(i);continue}if(i=this.tokenizer.code(e)){e=e.substring(i.raw.length),a=r[r.length-1],a&&(a.type==="paragraph"||a.type==="text")?(a.raw+=` +`+i.raw,a.text+=` +`+i.text,this.inlineQueue[this.inlineQueue.length-1].src=a.text):r.push(i);continue}if(i=this.tokenizer.fences(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.heading(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.hr(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.blockquote(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.list(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.html(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.def(e)){e=e.substring(i.raw.length),a=r[r.length-1],a&&(a.type==="paragraph"||a.type==="text")?(a.raw+=` +`+i.raw,a.text+=` +`+i.raw,this.inlineQueue[this.inlineQueue.length-1].src=a.text):this.tokens.links[i.tag]||(this.tokens.links[i.tag]={href:i.href,title:i.title});continue}if(i=this.tokenizer.table(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.lheading(e)){e=e.substring(i.raw.length),r.push(i);continue}if(s=e,this.options.extensions&&this.options.extensions.startBlock){let l=1/0,u=e.slice(1),h;this.options.extensions.startBlock.forEach(f=>{h=f.call({lexer:this},u),typeof h=="number"&&h>=0&&(l=Math.min(l,h))}),l<1/0&&l>=0&&(s=e.substring(0,l+1))}if(this.state.top&&(i=this.tokenizer.paragraph(s))){a=r[r.length-1],n&&a?.type==="paragraph"?(a.raw+=` +`+i.raw,a.text+=` +`+i.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=a.text):r.push(i),n=s.length!==e.length,e=e.substring(i.raw.length);continue}if(i=this.tokenizer.text(e)){e=e.substring(i.raw.length),a=r[r.length-1],a&&a.type==="text"?(a.raw+=` +`+i.raw,a.text+=` +`+i.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=a.text):r.push(i);continue}if(e){let l="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(l);break}else throw new Error(l)}}return this.state.top=!0,r}inline(e,r=[]){return this.inlineQueue.push({src:e,tokens:r}),r}inlineTokens(e,r=[]){let n,i,a,s=e,l,u,h;if(this.tokens.links){let f=Object.keys(this.tokens.links);if(f.length>0)for(;(l=this.tokenizer.rules.inline.reflinkSearch.exec(s))!=null;)f.includes(l[0].slice(l[0].lastIndexOf("[")+1,-1))&&(s=s.slice(0,l.index)+"["+"a".repeat(l[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(l=this.tokenizer.rules.inline.blockSkip.exec(s))!=null;)s=s.slice(0,l.index)+"["+"a".repeat(l[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;(l=this.tokenizer.rules.inline.anyPunctuation.exec(s))!=null;)s=s.slice(0,l.index)+"++"+s.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;e;)if(u||(h=""),u=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some(f=>(n=f.call({lexer:this},e,r))?(e=e.substring(n.raw.length),r.push(n),!0):!1))){if(n=this.tokenizer.escape(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.tag(e)){e=e.substring(n.raw.length),i=r[r.length-1],i&&n.type==="text"&&i.type==="text"?(i.raw+=n.raw,i.text+=n.text):r.push(n);continue}if(n=this.tokenizer.link(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(n.raw.length),i=r[r.length-1],i&&n.type==="text"&&i.type==="text"?(i.raw+=n.raw,i.text+=n.text):r.push(n);continue}if(n=this.tokenizer.emStrong(e,s,h)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.codespan(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.br(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.del(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.autolink(e)){e=e.substring(n.raw.length),r.push(n);continue}if(!this.state.inLink&&(n=this.tokenizer.url(e))){e=e.substring(n.raw.length),r.push(n);continue}if(a=e,this.options.extensions&&this.options.extensions.startInline){let f=1/0,d=e.slice(1),p;this.options.extensions.startInline.forEach(m=>{p=m.call({lexer:this},d),typeof p=="number"&&p>=0&&(f=Math.min(f,p))}),f<1/0&&f>=0&&(a=e.substring(0,f+1))}if(n=this.tokenizer.inlineText(a)){e=e.substring(n.raw.length),n.raw.slice(-1)!=="_"&&(h=n.raw.slice(-1)),u=!0,i=r[r.length-1],i&&i.type==="text"?(i.raw+=n.raw,i.text+=n.text):r.push(n);continue}if(e){let f="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(f);break}else throw new Error(f)}}return r}},ym=class{static{o(this,"_Renderer")}options;parser;constructor(e){this.options=e||Id}space(e){return""}code({text:e,lang:r,escaped:n}){let i=(r||"").match(/^\S*/)?.[0],a=e.replace(/\n$/,"")+` +`;return i?'
'+(n?a:oo(a,!0))+`
+`:"
"+(n?a:oo(a,!0))+`
+`}blockquote({tokens:e}){return`
+${this.parser.parse(e)}
+`}html({text:e}){return e}heading({tokens:e,depth:r}){return`${this.parser.parseInline(e)} +`}hr(e){return`
+`}list(e){let r=e.ordered,n=e.start,i="";for(let l=0;l +`+i+" +`}listitem(e){let r="";if(e.task){let n=this.checkbox({checked:!!e.checked});e.loose?e.tokens.length>0&&e.tokens[0].type==="paragraph"?(e.tokens[0].text=n+" "+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&e.tokens[0].tokens[0].type==="text"&&(e.tokens[0].tokens[0].text=n+" "+e.tokens[0].tokens[0].text)):e.tokens.unshift({type:"text",raw:n+" ",text:n+" "}):r+=n+" "}return r+=this.parser.parse(e.tokens,!!e.loose),`
  • ${r}
  • +`}checkbox({checked:e}){return"'}paragraph({tokens:e}){return`

    ${this.parser.parseInline(e)}

    +`}table(e){let r="",n="";for(let a=0;a${i}`),` + +`+r+` +`+i+`
    +`}tablerow({text:e}){return` +${e} +`}tablecell(e){let r=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+r+` +`}strong({tokens:e}){return`${this.parser.parseInline(e)}`}em({tokens:e}){return`${this.parser.parseInline(e)}`}codespan({text:e}){return`${e}`}br(e){return"
    "}del({tokens:e}){return`${this.parser.parseInline(e)}`}link({href:e,title:r,tokens:n}){let i=this.parser.parseInline(n),a=WX(e);if(a===null)return i;e=a;let s='
    ",s}image({href:e,title:r,text:n}){let i=WX(e);if(i===null)return n;e=i;let a=`${n}{let l=a[s].flat(1/0);n=n.concat(this.walkTokens(l,r))}):a.tokens&&(n=n.concat(this.walkTokens(a.tokens,r)))}}return n}use(...e){let r=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let i={...n};if(i.async=this.defaults.async||i.async||!1,n.extensions&&(n.extensions.forEach(a=>{if(!a.name)throw new Error("extension name required");if("renderer"in a){let s=r.renderers[a.name];s?r.renderers[a.name]=function(...l){let u=a.renderer.apply(this,l);return u===!1&&(u=s.apply(this,l)),u}:r.renderers[a.name]=a.renderer}if("tokenizer"in a){if(!a.level||a.level!=="block"&&a.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let s=r[a.level];s?s.unshift(a.tokenizer):r[a.level]=[a.tokenizer],a.start&&(a.level==="block"?r.startBlock?r.startBlock.push(a.start):r.startBlock=[a.start]:a.level==="inline"&&(r.startInline?r.startInline.push(a.start):r.startInline=[a.start]))}"childTokens"in a&&a.childTokens&&(r.childTokens[a.name]=a.childTokens)}),i.extensions=r),n.renderer){let a=this.defaults.renderer||new ym(this.defaults);for(let s in n.renderer){if(!(s in a))throw new Error(`renderer '${s}' does not exist`);if(["options","parser"].includes(s))continue;let l=s,u=n.renderer[l];n.useNewRenderer||(u=this.#t(u,l,a));let h=a[l];a[l]=(...f)=>{let d=u.apply(a,f);return d===!1&&(d=h.apply(a,f)),d||""}}i.renderer=a}if(n.tokenizer){let a=this.defaults.tokenizer||new gm(this.defaults);for(let s in n.tokenizer){if(!(s in a))throw new Error(`tokenizer '${s}' does not exist`);if(["options","rules","lexer"].includes(s))continue;let l=s,u=n.tokenizer[l],h=a[l];a[l]=(...f)=>{let d=u.apply(a,f);return d===!1&&(d=h.apply(a,f)),d}}i.tokenizer=a}if(n.hooks){let a=this.defaults.hooks||new mm;for(let s in n.hooks){if(!(s in a))throw new Error(`hook '${s}' does not exist`);if(s==="options")continue;let l=s,u=n.hooks[l],h=a[l];mm.passThroughHooks.has(s)?a[l]=f=>{if(this.defaults.async)return Promise.resolve(u.call(a,f)).then(p=>h.call(a,p));let d=u.call(a,f);return h.call(a,d)}:a[l]=(...f)=>{let d=u.apply(a,f);return d===!1&&(d=h.apply(a,f)),d}}i.hooks=a}if(n.walkTokens){let a=this.defaults.walkTokens,s=n.walkTokens;i.walkTokens=function(l){let u=[];return u.push(s.call(this,l)),a&&(u=u.concat(a.call(this,l))),u}}this.defaults={...this.defaults,...i}}),this}#t(e,r,n){switch(r){case"heading":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,n.parser.parseInline(i.tokens),i.depth,UCe(n.parser.parseInline(i.tokens,n.parser.textRenderer)))};case"code":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,i.text,i.lang,!!i.escaped)};case"table":return function(i){if(!i.type||i.type!==r)return e.apply(this,arguments);let a="",s="";for(let u=0;u0&&f.tokens[0].type==="paragraph"?(f.tokens[0].text=g+" "+f.tokens[0].text,f.tokens[0].tokens&&f.tokens[0].tokens.length>0&&f.tokens[0].tokens[0].type==="text"&&(f.tokens[0].tokens[0].text=g+" "+f.tokens[0].tokens[0].text)):f.tokens.unshift({type:"text",text:g+" "}):m+=g+" "}m+=this.parser.parse(f.tokens,l),u+=this.listitem({type:"list_item",raw:m,text:m,task:p,checked:!!d,loose:l,tokens:f.tokens})}return e.call(this,u,a,s)};case"html":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,i.text,i.block)};case"paragraph":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,this.parser.parseInline(i.tokens))};case"escape":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,i.text)};case"link":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,i.href,i.title,this.parser.parseInline(i.tokens))};case"image":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,i.href,i.title,i.text)};case"strong":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,this.parser.parseInline(i.tokens))};case"em":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,this.parser.parseInline(i.tokens))};case"codespan":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,i.text)};case"del":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,this.parser.parseInline(i.tokens))};case"text":return function(i){return!i.type||i.type!==r?e.apply(this,arguments):e.call(this,i.text)}}return e}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,r){return Mu.lex(e,r??this.defaults)}parser(e,r){return Iu.parse(e,r??this.defaults)}#e(e,r){return(n,i)=>{let a={...i},s={...this.defaults,...a};this.defaults.async===!0&&a.async===!1&&(s.silent||console.warn("marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored."),s.async=!0);let l=this.#r(!!s.silent,!!s.async);if(typeof n>"u"||n===null)return l(new Error("marked(): input parameter is undefined or null"));if(typeof n!="string")return l(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(n)+", string expected"));if(s.hooks&&(s.hooks.options=s),s.async)return Promise.resolve(s.hooks?s.hooks.preprocess(n):n).then(u=>e(u,s)).then(u=>s.hooks?s.hooks.processAllTokens(u):u).then(u=>s.walkTokens?Promise.all(this.walkTokens(u,s.walkTokens)).then(()=>u):u).then(u=>r(u,s)).then(u=>s.hooks?s.hooks.postprocess(u):u).catch(l);try{s.hooks&&(n=s.hooks.preprocess(n));let u=e(n,s);s.hooks&&(u=s.hooks.processAllTokens(u)),s.walkTokens&&this.walkTokens(u,s.walkTokens);let h=r(u,s);return s.hooks&&(h=s.hooks.postprocess(h)),h}catch(u){return l(u)}}}#r(e,r){return n=>{if(n.message+=` +Please report this to https://github.com/markedjs/marked.`,e){let i="

    An error occurred:

    "+oo(n.message+"",!0)+"
    ";return r?Promise.resolve(i):i}if(r)return Promise.reject(n);throw n}}},Md=new h9;o(en,"marked");en.options=en.setOptions=function(t){return Md.setOptions(t),en.defaults=Md.defaults,jX(en.defaults),en};en.getDefaults=f9;en.defaults=Id;en.use=function(...t){return Md.use(...t),en.defaults=Md.defaults,jX(en.defaults),en};en.walkTokens=function(t,e){return Md.walkTokens(t,e)};en.parseInline=Md.parseInline;en.Parser=Iu;en.parser=Iu.parse;en.Renderer=ym;en.TextRenderer=Cv;en.Lexer=Mu;en.lexer=Mu.lex;en.Tokenizer=gm;en.Hooks=mm;en.parse=en;PEt=en.options,BEt=en.setOptions,FEt=en.use,zEt=en.walkTokens,GEt=en.parseInline,$Et=Iu.parse,VEt=Mu.lex});function x7e(t,{markdownAutoWrap:e}){let n=t.replace(//g,` +`).replace(/\n{2,}/g,` +`),i=jb(n);return e===!1?i.replace(/ /g," "):i}function sj(t,e={}){let r=x7e(t,e),n=en.lexer(r),i=[[]],a=0;function s(l,u="normal"){l.type==="text"?l.text.split(` +`).forEach((f,d)=>{d!==0&&(a++,i.push([])),f.split(" ").forEach(p=>{p=p.replace(/'/g,"'"),p&&i[a].push({content:p,type:u})})}):l.type==="strong"||l.type==="em"?l.tokens.forEach(h=>{s(h,l.type)}):l.type==="html"&&i[a].push({content:l.text,type:"normal"})}return o(s,"processNode"),n.forEach(l=>{l.type==="paragraph"?l.tokens?.forEach(u=>{s(u)}):l.type==="html"&&i[a].push({content:l.text,type:"normal"})}),i}function oj(t,{markdownAutoWrap:e}={}){let r=en.lexer(t);function n(i){return i.type==="text"?e===!1?i.text.replace(/\n */g,"
    ").replace(/ /g," "):i.text.replace(/\n */g,"
    "):i.type==="strong"?`${i.tokens?.map(n).join("")}`:i.type==="em"?`${i.tokens?.map(n).join("")}`:i.type==="paragraph"?`

    ${i.tokens?.map(n).join("")}

    `:i.type==="space"?"":i.type==="html"?`${i.text}`:i.type==="escape"?i.text:`Unsupported markdown: ${i.type}`}return o(n,"output"),r.map(n).join("")}var lj=M(()=>{"use strict";aj();GS();o(x7e,"preprocessMarkdown");o(sj,"markdownToLines");o(oj,"markdownToHTML")});function b7e(t){return Intl.Segmenter?[...new Intl.Segmenter().segment(t)].map(e=>e.segment):[...t]}function w7e(t,e){let r=b7e(e.content);return cj(t,[],r,e.type)}function cj(t,e,r,n){if(r.length===0)return[{content:e.join(""),type:n},{content:"",type:n}];let[i,...a]=r,s=[...e,i];return t([{content:s.join(""),type:n}])?cj(t,s,a,n):(e.length===0&&i&&(e.push(i),r.shift()),[{content:e.join(""),type:n},{content:r.join(""),type:n}])}function uj(t,e){if(t.some(({content:r})=>r.includes(` +`)))throw new Error("splitLineToFitWidth does not support newlines in the line");return v9(t,e)}function v9(t,e,r=[],n=[]){if(t.length===0)return n.length>0&&r.push(n),r.length>0?r:[];let i="";t[0].content===" "&&(i=" ",t.shift());let a=t.shift()??{content:" ",type:"normal"},s=[...n];if(i!==""&&s.push({content:i,type:"normal"}),s.push(a),e(s))return v9(t,e,r,s);if(n.length>0)r.push(n),t.unshift(a);else if(a.content){let[l,u]=w7e(e,a);r.push([l]),u.content&&t.unshift(u)}return v9(t,e,r)}var hj=M(()=>{"use strict";o(b7e,"splitTextToChars");o(w7e,"splitWordToFitWidth");o(cj,"splitWordToFitWidthRecursion");o(uj,"splitLineToFitWidth");o(v9,"splitLineToFitWidthRecursion")});function fj(t,e){e&&t.attr("style",e)}async function T7e(t,e,r,n,i=!1){let a=t.append("foreignObject");a.attr("width",`${10*r}px`),a.attr("height",`${10*r}px`);let s=a.append("xhtml:div"),l=e.label;e.label&&yi(e.label)&&(l=await bh(e.label.replace(qe.lineBreakRegex,` +`),pe()));let u=e.isNode?"nodeLabel":"edgeLabel",h=s.append("span");h.html(l),fj(h,e.labelStyle),h.attr("class",`${u} ${n}`),fj(s,e.labelStyle),s.style("display","table-cell"),s.style("white-space","nowrap"),s.style("line-height","1.5"),s.style("max-width",r+"px"),s.style("text-align","center"),s.attr("xmlns","http://www.w3.org/1999/xhtml"),i&&s.attr("class","labelBkg");let f=s.node().getBoundingClientRect();return f.width===r&&(s.style("display","table"),s.style("white-space","break-spaces"),s.style("width",r+"px"),f=s.node().getBoundingClientRect()),a.node()}function x9(t,e,r){return t.append("tspan").attr("class","text-outer-tspan").attr("x",0).attr("y",e*r-.1+"em").attr("dy",r+"em")}function k7e(t,e,r){let n=t.append("text"),i=x9(n,1,e);b9(i,r);let a=i.node().getComputedTextLength();return n.remove(),a}function dj(t,e,r){let n=t.append("text"),i=x9(n,1,e);b9(i,[{content:r,type:"normal"}]);let a=i.node()?.getBoundingClientRect();return a&&n.remove(),a}function E7e(t,e,r,n=!1){let a=e.append("g"),s=a.insert("rect").attr("class","background").attr("style","stroke: none"),l=a.append("text").attr("y","-10.1"),u=0;for(let h of r){let f=o(p=>k7e(a,1.1,p)<=t,"checkWidth"),d=f(h)?[h]:uj(h,f);for(let p of d){let m=x9(l,u,1.1);b9(m,p),u++}}if(n){let h=l.node().getBBox(),f=2;return s.attr("x",h.x-f).attr("y",h.y-f).attr("width",h.width+2*f).attr("height",h.height+2*f),a.node()}else return l.node()}function b9(t,e){t.text(""),e.forEach((r,n)=>{let i=t.append("tspan").attr("font-style",r.type==="em"?"italic":"normal").attr("class","text-inner-tspan").attr("font-weight",r.type==="strong"?"bold":"normal");n===0?i.text(r.content):i.text(" "+r.content)})}function w9(t){return t.replace(/fa[bklrs]?:fa-[\w-]+/g,e=>``)}var Li,Pl=M(()=>{"use strict";Vt();fr();pr();ut();lj();hr();hj();o(fj,"applyStyle");o(T7e,"addHtmlSpan");o(x9,"createTspan");o(k7e,"computeWidthOfText");o(dj,"computeDimensionOfText");o(E7e,"createFormattedText");o(b9,"updateTextContentAndStyles");o(w9,"replaceIconSubstring");Li=o(async(t,e="",{style:r="",isTitle:n=!1,classes:i="",useHtmlLabels:a=!0,isNode:s=!0,width:l=200,addSvgBackground:u=!1}={},h)=>{if(Y.debug("XYZ createText",e,r,n,i,a,s,"addSvgBackground: ",u),a){let f=oj(e,h),d=w9(Ma(f)),p=e.replace(/\\\\/g,"\\"),m={isNode:s,label:yi(e)?p:d,labelStyle:r.replace("fill:","color:")};return await T7e(t,m,l,i,u)}else{let f=e.replace(//g,"
    "),d=sj(f.replace("
    ","
    "),h),p=E7e(l,t,d,e?u:!1);if(s){/stroke:/.exec(r)&&(r=r.replace("stroke:","lineColor:"));let m=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");Ve(p).attr("style",m)}else{let m=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/background:/g,"fill:");Ve(p).select("rect").attr("style",m.replace(/background:/g,"fill:"));let g=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");Ve(p).select("text").attr("style",g)}return p}},"createText")});function Wt(t){let e=t.map((r,n)=>`${n===0?"M":"L"}${r.x},${r.y}`);return e.push("Z"),e.join(" ")}function Wo(t,e,r,n,i,a){let s=[],u=r-t,h=n-e,f=u/a,d=2*Math.PI/f,p=e+h/2;for(let m=0;m<=50;m++){let g=m/50,y=t+g*u,v=p+i*Math.sin(d*(y-t));s.push({x:y,y:v})}return s}function O5(t,e,r,n,i,a){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;d{"use strict";Pl();Vt();pr();bs();fr();hr();st=o(async(t,e,r)=>{let n,i=e.useHtmlLabels||xr(pe()?.htmlLabels);r?n=r:n="node default";let a=t.insert("g").attr("class",n).attr("id",e.domId||e.id),s=a.insert("g").attr("class","label").attr("style",Gn(e.labelStyle)),l;e.label===void 0?l="":l=typeof e.label=="string"?e.label:e.label[0];let u=await Li(s,kr(Ma(l),pe()),{useHtmlLabels:i,width:e.width||pe().flowchart?.wrappingWidth,cssClasses:"markdown-node-label",style:e.labelStyle,addSvgBackground:!!e.icon||!!e.img}),h=u.getBBox(),f=(e?.padding??0)/2;if(i){let d=u.children[0],p=Ve(u),m=d.getElementsByTagName("img");if(m){let g=l.replace(/]*>/g,"").trim()==="";await Promise.all([...m].map(y=>new Promise(v=>{function x(){if(y.style.display="flex",y.style.flexDirection="column",g){let b=pe().fontSize?pe().fontSize:window.getComputedStyle(document.body).fontSize,w=5,[_=ur.fontSize]=Ho(b),T=_*w+"px";y.style.minWidth=T,y.style.maxWidth=T}else y.style.width="100%";v(y)}o(x,"setupImage"),setTimeout(()=>{y.complete&&x()}),y.addEventListener("error",x),y.addEventListener("load",x)})))}h=d.getBoundingClientRect(),p.attr("width",h.width),p.attr("height",h.height)}return i?s.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"):s.attr("transform","translate(0, "+-h.height/2+")"),e.centerLabel&&s.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"),s.insert("rect",":first-child"),{shapeSvg:a,bbox:h,halfPadding:f,label:s}},"labelHelper"),I5=o(async(t,e,r)=>{let n=r.useHtmlLabels||xr(pe()?.flowchart?.htmlLabels),i=t.insert("g").attr("class","label").attr("style",r.labelStyle||""),a=await Li(i,kr(Ma(e),pe()),{useHtmlLabels:n,width:r.width||pe()?.flowchart?.wrappingWidth,style:r.labelStyle,addSvgBackground:!!r.icon||!!r.img}),s=a.getBBox(),l=r.padding/2;if(xr(pe()?.flowchart?.htmlLabels)){let u=a.children[0],h=Ve(a);s=u.getBoundingClientRect(),h.attr("width",s.width),h.attr("height",s.height)}return n?i.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"):i.attr("transform","translate(0, "+-s.height/2+")"),r.centerLabel&&i.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),i.insert("rect",":first-child"),{shapeSvg:t,bbox:s,halfPadding:l,label:i}},"insertLabel"),je=o((t,e)=>{let r=e.node().getBBox();t.width=r.width,t.height=r.height},"updateNodeBounds"),ot=o((t,e)=>(t.look==="handDrawn"?"rough-node":"node")+" "+t.cssClasses+" "+(e||""),"getNodeClasses");o(Wt,"createPathFromPoints");o(Wo,"generateFullSineWavePoints");o(O5,"generateCirclePoints")});function S7e(t,e){return t.intersect(e)}var pj,mj=M(()=>{"use strict";o(S7e,"intersectNode");pj=S7e});function C7e(t,e,r,n){var i=t.x,a=t.y,s=i-n.x,l=a-n.y,u=Math.sqrt(e*e*l*l+r*r*s*s),h=Math.abs(e*r*s/u);n.x{"use strict";o(C7e,"intersectEllipse");P5=C7e});function A7e(t,e,r){return P5(t,e,e,r)}var gj,yj=M(()=>{"use strict";T9();o(A7e,"intersectCircle");gj=A7e});function _7e(t,e,r,n){var i,a,s,l,u,h,f,d,p,m,g,y,v,x,b;if(i=e.y-t.y,s=t.x-e.x,u=e.x*t.y-t.x*e.y,p=i*r.x+s*r.y+u,m=i*n.x+s*n.y+u,!(p!==0&&m!==0&&vj(p,m))&&(a=n.y-r.y,l=r.x-n.x,h=n.x*r.y-r.x*n.y,f=a*t.x+l*t.y+h,d=a*e.x+l*e.y+h,!(f!==0&&d!==0&&vj(f,d))&&(g=i*l-a*s,g!==0)))return y=Math.abs(g/2),v=s*h-l*u,x=v<0?(v-y)/g:(v+y)/g,v=a*u-i*h,b=v<0?(v-y)/g:(v+y)/g,{x,y:b}}function vj(t,e){return t*e>0}var xj,bj=M(()=>{"use strict";o(_7e,"intersectLine");o(vj,"sameSign");xj=_7e});function L7e(t,e,r){let n=t.x,i=t.y,a=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof e.forEach=="function"?e.forEach(function(f){s=Math.min(s,f.x),l=Math.min(l,f.y)}):(s=Math.min(s,e.x),l=Math.min(l,e.y));let u=n-t.width/2-s,h=i-t.height/2-l;for(let f=0;f1&&a.sort(function(f,d){let p=f.x-r.x,m=f.y-r.y,g=Math.sqrt(p*p+m*m),y=d.x-r.x,v=d.y-r.y,x=Math.sqrt(y*y+v*v);return g{"use strict";bj();o(L7e,"intersectPolygon");wj=L7e});var D7e,Hh,k9=M(()=>{"use strict";D7e=o((t,e)=>{var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2,u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=a===0?0:l*i/a,h=l):(i<0&&(s=-s),u=s,h=i===0?0:s*a/i),{x:r+u,y:n+h}},"intersectRect"),Hh=D7e});var Ye,qt=M(()=>{"use strict";mj();yj();T9();Tj();k9();Ye={node:pj,circle:gj,ellipse:P5,polygon:wj,rect:Hh}});var kj,Sc,N7e,Ze,Ke,Xt=M(()=>{"use strict";Vt();kj=o(t=>{let{handDrawnSeed:e}=pe();return{fill:t,hachureAngle:120,hachureGap:4,fillWeight:2,roughness:.7,stroke:t,seed:e}},"solidStateFill"),Sc=o(t=>{let e=N7e([...t.cssCompiledStyles||[],...t.cssStyles||[]]);return{stylesMap:e,stylesArray:[...e]}},"compileStyles"),N7e=o(t=>{let e=new Map;return t.forEach(r=>{let[n,i]=r.split(":");e.set(n.trim(),i?.trim())}),e},"styles2Map"),Ze=o(t=>{let{stylesArray:e}=Sc(t),r=[],n=[],i=[],a=[];return e.forEach(s=>{let l=s[0];l==="color"||l==="font-size"||l==="font-family"||l==="font-weight"||l==="font-style"||l==="text-decoration"||l==="text-align"||l==="text-transform"||l==="line-height"||l==="letter-spacing"||l==="word-spacing"||l==="text-shadow"||l==="text-overflow"||l==="white-space"||l==="word-wrap"||l==="word-break"||l==="overflow-wrap"||l==="hyphens"?r.push(s.join(":")+" !important"):(n.push(s.join(":")+" !important"),l.includes("stroke")&&i.push(s.join(":")+" !important"),l==="fill"&&a.push(s.join(":")+" !important"))}),{labelStyles:r.join(";"),nodeStyles:n.join(";"),stylesArray:e,borderStyles:i,backgroundStyles:a}},"styles2String"),Ke=o((t,e)=>{let{themeVariables:r,handDrawnSeed:n}=pe(),{nodeBorder:i,mainBkg:a}=r,{stylesMap:s}=Sc(t);return Object.assign({roughness:.7,fill:s.get("fill")||a,fillStyle:"hachure",fillWeight:4,hachureGap:5.2,stroke:s.get("stroke")||i,seed:n,strokeWidth:s.get("stroke-width")?.replace("px","")||1.3,fillLineDash:[0,0]},e)},"userNodeOverrides")});function E9(t,e,r){if(t&&t.length){let[n,i]=e,a=Math.PI/180*r,s=Math.cos(a),l=Math.sin(a);for(let u of t){let[h,f]=u;u[0]=(h-n)*s-(f-i)*l+n,u[1]=(h-n)*l+(f-i)*s+i}}}function R7e(t,e){return t[0]===e[0]&&t[1]===e[1]}function M7e(t,e,r,n=1){let i=r,a=Math.max(e,.1),s=t[0]&&t[0][0]&&typeof t[0][0]=="number"?[t]:t,l=[0,0];if(i)for(let h of s)E9(h,l,i);let u=function(h,f,d){let p=[];for(let b of h){let w=[...b];R7e(w[0],w[w.length-1])||w.push([w[0][0],w[0][1]]),w.length>2&&p.push(w)}let m=[];f=Math.max(f,.1);let g=[];for(let b of p)for(let w=0;wb.yminw.ymin?1:b.xw.x?1:b.ymax===w.ymax?0:(b.ymax-w.ymax)/Math.abs(b.ymax-w.ymax)),!g.length)return m;let y=[],v=g[0].ymin,x=0;for(;y.length||g.length;){if(g.length){let b=-1;for(let w=0;wv);w++)b=w;g.splice(0,b+1).forEach(w=>{y.push({s:v,edge:w})})}if(y=y.filter(b=>!(b.edge.ymax<=v)),y.sort((b,w)=>b.edge.x===w.edge.x?0:(b.edge.x-w.edge.x)/Math.abs(b.edge.x-w.edge.x)),(d!==1||x%f==0)&&y.length>1)for(let b=0;b=y.length)break;let _=y[b].edge,T=y[w].edge;m.push([[Math.round(_.x),v],[Math.round(T.x),v]])}v+=d,y.forEach(b=>{b.edge.x=b.edge.x+d*b.edge.islope}),x++}return m}(s,a,n);if(i){for(let h of s)E9(h,l,-i);(function(h,f,d){let p=[];h.forEach(m=>p.push(...m)),E9(p,f,d)})(u,l,-i)}return u}function Rv(t,e){var r;let n=e.hachureAngle+90,i=e.hachureGap;i<0&&(i=4*e.strokeWidth),i=Math.round(Math.max(i,.1));let a=1;return e.roughness>=1&&(((r=e.randomizer)===null||r===void 0?void 0:r.next())||Math.random())>.7&&(a=i),M7e(t,i,n,a||1)}function W5(t){let e=t[0],r=t[1];return Math.sqrt(Math.pow(e[0]-r[0],2)+Math.pow(e[1]-r[1],2))}function C9(t,e){return t.type===e}function G9(t){let e=[],r=function(s){let l=new Array;for(;s!=="";)if(s.match(/^([ \t\r\n,]+)/))s=s.substr(RegExp.$1.length);else if(s.match(/^([aAcChHlLmMqQsStTvVzZ])/))l[l.length]={type:I7e,text:RegExp.$1},s=s.substr(RegExp.$1.length);else{if(!s.match(/^(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)/))return[];l[l.length]={type:S9,text:`${parseFloat(RegExp.$1)}`},s=s.substr(RegExp.$1.length)}return l[l.length]={type:Ej,text:""},l}(t),n="BOD",i=0,a=r[i];for(;!C9(a,Ej);){let s=0,l=[];if(n==="BOD"){if(a.text!=="M"&&a.text!=="m")return G9("M0,0"+t);i++,s=B5[a.text],n=a.text}else C9(a,S9)?s=B5[n]:(i++,s=B5[a.text],n=a.text);if(!(i+sf%2?h+r:h+e);a.push({key:"C",data:u}),e=u[4],r=u[5];break}case"Q":a.push({key:"Q",data:[...l]}),e=l[2],r=l[3];break;case"q":{let u=l.map((h,f)=>f%2?h+r:h+e);a.push({key:"Q",data:u}),e=u[2],r=u[3];break}case"A":a.push({key:"A",data:[...l]}),e=l[5],r=l[6];break;case"a":e+=l[5],r+=l[6],a.push({key:"A",data:[l[0],l[1],l[2],l[3],l[4],e,r]});break;case"H":a.push({key:"H",data:[...l]}),e=l[0];break;case"h":e+=l[0],a.push({key:"H",data:[e]});break;case"V":a.push({key:"V",data:[...l]}),r=l[0];break;case"v":r+=l[0],a.push({key:"V",data:[r]});break;case"S":a.push({key:"S",data:[...l]}),e=l[2],r=l[3];break;case"s":{let u=l.map((h,f)=>f%2?h+r:h+e);a.push({key:"S",data:u}),e=u[2],r=u[3];break}case"T":a.push({key:"T",data:[...l]}),e=l[0],r=l[1];break;case"t":e+=l[0],r+=l[1],a.push({key:"T",data:[e,r]});break;case"Z":case"z":a.push({key:"Z",data:[]}),e=n,r=i}return a}function Mj(t){let e=[],r="",n=0,i=0,a=0,s=0,l=0,u=0;for(let{key:h,data:f}of t){switch(h){case"M":e.push({key:"M",data:[...f]}),[n,i]=f,[a,s]=f;break;case"C":e.push({key:"C",data:[...f]}),n=f[4],i=f[5],l=f[2],u=f[3];break;case"L":e.push({key:"L",data:[...f]}),[n,i]=f;break;case"H":n=f[0],e.push({key:"L",data:[n,i]});break;case"V":i=f[0],e.push({key:"L",data:[n,i]});break;case"S":{let d=0,p=0;r==="C"||r==="S"?(d=n+(n-l),p=i+(i-u)):(d=n,p=i),e.push({key:"C",data:[d,p,...f]}),l=f[0],u=f[1],n=f[2],i=f[3];break}case"T":{let[d,p]=f,m=0,g=0;r==="Q"||r==="T"?(m=n+(n-l),g=i+(i-u)):(m=n,g=i);let y=n+2*(m-n)/3,v=i+2*(g-i)/3,x=d+2*(m-d)/3,b=p+2*(g-p)/3;e.push({key:"C",data:[y,v,x,b,d,p]}),l=m,u=g,n=d,i=p;break}case"Q":{let[d,p,m,g]=f,y=n+2*(d-n)/3,v=i+2*(p-i)/3,x=m+2*(d-m)/3,b=g+2*(p-g)/3;e.push({key:"C",data:[y,v,x,b,m,g]}),l=d,u=p,n=m,i=g;break}case"A":{let d=Math.abs(f[0]),p=Math.abs(f[1]),m=f[2],g=f[3],y=f[4],v=f[5],x=f[6];d===0||p===0?(e.push({key:"C",data:[n,i,v,x,v,x]}),n=v,i=x):(n!==v||i!==x)&&(Ij(n,i,v,x,d,p,m,g,y).forEach(function(b){e.push({key:"C",data:b})}),n=v,i=x);break}case"Z":e.push({key:"Z",data:[]}),n=a,i=s}r=h}return e}function Lv(t,e,r){return[t*Math.cos(r)-e*Math.sin(r),t*Math.sin(r)+e*Math.cos(r)]}function Ij(t,e,r,n,i,a,s,l,u,h){let f=(d=s,Math.PI*d/180);var d;let p=[],m=0,g=0,y=0,v=0;if(h)[m,g,y,v]=h;else{[t,e]=Lv(t,e,-f),[r,n]=Lv(r,n,-f);let R=(t-r)/2,C=(e-n)/2,O=R*R/(i*i)+C*C/(a*a);O>1&&(O=Math.sqrt(O),i*=O,a*=O);let N=i*i,P=a*a,F=N*P-N*C*C-P*R*R,B=N*C*C+P*R*R,G=(l===u?-1:1)*Math.sqrt(Math.abs(F/B));y=G*i*C/a+(t+r)/2,v=G*-a*R/i+(e+n)/2,m=Math.asin(parseFloat(((e-v)/a).toFixed(9))),g=Math.asin(parseFloat(((n-v)/a).toFixed(9))),tg&&(m-=2*Math.PI),!u&&g>m&&(g-=2*Math.PI)}let x=g-m;if(Math.abs(x)>120*Math.PI/180){let R=g,C=r,O=n;g=u&&g>m?m+120*Math.PI/180*1:m+120*Math.PI/180*-1,p=Ij(r=y+i*Math.cos(g),n=v+a*Math.sin(g),C,O,i,a,s,0,u,[g,R,y,v])}x=g-m;let b=Math.cos(m),w=Math.sin(m),_=Math.cos(g),T=Math.sin(g),E=Math.tan(x/4),L=4/3*i*E,S=4/3*a*E,A=[t,e],I=[t+L*w,e-S*b],D=[r+L*T,n-S*_],k=[r,n];if(I[0]=2*A[0]-I[0],I[1]=2*A[1]-I[1],h)return[I,D,k].concat(p);{p=[I,D,k].concat(p);let R=[];for(let C=0;C2){let i=[];for(let a=0;a2*Math.PI&&(m=0,g=2*Math.PI);let y=2*Math.PI/u.curveStepCount,v=Math.min(y/2,(g-m)/2),x=Dj(v,h,f,d,p,m,g,1,u);if(!u.disableMultiStroke){let b=Dj(v,h,f,d,p,m,g,1.5,u);x.push(...b)}return s&&(l?x.push(...Wh(h,f,h+d*Math.cos(m),f+p*Math.sin(m),u),...Wh(h,f,h+d*Math.cos(g),f+p*Math.sin(g),u)):x.push({op:"lineTo",data:[h,f]},{op:"lineTo",data:[h+d*Math.cos(m),f+p*Math.sin(m)]})),{type:"path",ops:x}}function Aj(t,e){let r=Mj(Rj(G9(t))),n=[],i=[0,0],a=[0,0];for(let{key:s,data:l}of r)switch(s){case"M":a=[l[0],l[1]],i=[l[0],l[1]];break;case"L":n.push(...Wh(a[0],a[1],l[0],l[1],e)),a=[l[0],l[1]];break;case"C":{let[u,h,f,d,p,m]=l;n.push(...B7e(u,h,f,d,p,m,a,e)),a=[p,m];break}case"Z":n.push(...Wh(a[0],a[1],i[0],i[1],e)),a=[i[0],i[1]]}return{type:"path",ops:n}}function A9(t,e){let r=[];for(let n of t)if(n.length){let i=e.maxRandomnessOffset||0,a=n.length;if(a>2){r.push({op:"move",data:[n[0][0]+nr(i,e),n[0][1]+nr(i,e)]});for(let s=1;s500?.4:-.0016668*u+1.233334;let f=i.maxRandomnessOffset||0;f*f*100>l&&(f=u/10);let d=f/2,p=.2+.2*Bj(i),m=i.bowing*i.maxRandomnessOffset*(n-e)/200,g=i.bowing*i.maxRandomnessOffset*(t-r)/200;m=nr(m,i,h),g=nr(g,i,h);let y=[],v=o(()=>nr(d,i,h),"M"),x=o(()=>nr(f,i,h),"k"),b=i.preserveVertices;return a&&(s?y.push({op:"move",data:[t+(b?0:v()),e+(b?0:v())]}):y.push({op:"move",data:[t+(b?0:nr(f,i,h)),e+(b?0:nr(f,i,h))]})),s?y.push({op:"bcurveTo",data:[m+t+(r-t)*p+v(),g+e+(n-e)*p+v(),m+t+2*(r-t)*p+v(),g+e+2*(n-e)*p+v(),r+(b?0:v()),n+(b?0:v())]}):y.push({op:"bcurveTo",data:[m+t+(r-t)*p+x(),g+e+(n-e)*p+x(),m+t+2*(r-t)*p+x(),g+e+2*(n-e)*p+x(),r+(b?0:x()),n+(b?0:x())]}),y}function F5(t,e,r){if(!t.length)return[];let n=[];n.push([t[0][0]+nr(e,r),t[0][1]+nr(e,r)]),n.push([t[0][0]+nr(e,r),t[0][1]+nr(e,r)]);for(let i=1;i3){let a=[],s=1-r.curveTightness;i.push({op:"move",data:[t[1][0],t[1][1]]});for(let l=1;l+21&&i.push(l)):i.push(l),i.push(t[e+3])}else{let u=t[e+0],h=t[e+1],f=t[e+2],d=t[e+3],p=Od(u,h,.5),m=Od(h,f,.5),g=Od(f,d,.5),y=Od(p,m,.5),v=Od(m,g,.5),x=Od(y,v,.5);B9([u,p,y,x],0,r,i),B9([x,v,g,d],0,r,i)}var a,s;return i}function z7e(t,e){return H5(t,0,t.length,e)}function H5(t,e,r,n,i){let a=i||[],s=t[e],l=t[r-1],u=0,h=1;for(let f=e+1;fu&&(u=d,h=f)}return Math.sqrt(u)>n?(H5(t,e,h+1,n,a),H5(t,h,r,n,a)):(a.length||a.push(s),a.push(l)),a}function _9(t,e=.15,r){let n=[],i=(t.length-1)/3;for(let a=0;a0?H5(n,0,n.length,r):n}var Nv,L9,D9,N9,R9,M9,Rs,I9,I7e,S9,Ej,B5,O7e,lo,xm,F9,z5,z9,Xe,jt=M(()=>{"use strict";o(E9,"t");o(R7e,"e");o(M7e,"s");o(Rv,"n");Nv=class{static{o(this,"o")}constructor(e){this.helper=e}fillPolygons(e,r){return this._fillPolygons(e,r)}_fillPolygons(e,r){let n=Rv(e,r);return{type:"fillSketch",ops:this.renderLines(n,r)}}renderLines(e,r){let n=[];for(let i of e)n.push(...this.helper.doubleLineOps(i[0][0],i[0][1],i[1][0],i[1][1],r));return n}};o(W5,"a");L9=class extends Nv{static{o(this,"h")}fillPolygons(e,r){let n=r.hachureGap;n<0&&(n=4*r.strokeWidth),n=Math.max(n,.1);let i=Rv(e,Object.assign({},r,{hachureGap:n})),a=Math.PI/180*r.hachureAngle,s=[],l=.5*n*Math.cos(a),u=.5*n*Math.sin(a);for(let[h,f]of i)W5([h,f])&&s.push([[h[0]-l,h[1]+u],[...f]],[[h[0]+l,h[1]-u],[...f]]);return{type:"fillSketch",ops:this.renderLines(s,r)}}},D9=class extends Nv{static{o(this,"r")}fillPolygons(e,r){let n=this._fillPolygons(e,r),i=Object.assign({},r,{hachureAngle:r.hachureAngle+90}),a=this._fillPolygons(e,i);return n.ops=n.ops.concat(a.ops),n}},N9=class{static{o(this,"i")}constructor(e){this.helper=e}fillPolygons(e,r){let n=Rv(e,r=Object.assign({},r,{hachureAngle:0}));return this.dotsOnLines(n,r)}dotsOnLines(e,r){let n=[],i=r.hachureGap;i<0&&(i=4*r.strokeWidth),i=Math.max(i,.1);let a=r.fillWeight;a<0&&(a=r.strokeWidth/2);let s=i/4;for(let l of e){let u=W5(l),h=u/i,f=Math.ceil(h)-1,d=u-f*i,p=(l[0][0]+l[1][0])/2-i/4,m=Math.min(l[0][1],l[1][1]);for(let g=0;g{let l=W5(s),u=Math.floor(l/(n+i)),h=(l+i-u*(n+i))/2,f=s[0],d=s[1];f[0]>d[0]&&(f=s[1],d=s[0]);let p=Math.atan((d[1]-f[1])/(d[0]-f[0]));for(let m=0;m{let s=W5(a),l=Math.round(s/(2*r)),u=a[0],h=a[1];u[0]>h[0]&&(u=a[1],h=a[0]);let f=Math.atan((h[1]-u[1])/(h[0]-u[0]));for(let d=0;d2*Math.PI&&(L=0,S=2*Math.PI);let A=(S-L)/b.curveStepCount,I=[];for(let D=L;D<=S;D+=A)I.push([w+T*Math.cos(D),_+E*Math.sin(D)]);return I.push([w+T*Math.cos(S),_+E*Math.sin(S)]),I.push([w,_]),vm([I],b)}(e,r,n,i,a,s,h));return h.stroke!==lo&&f.push(d),this._d("arc",f,h)}curve(e,r){let n=this._o(r),i=[],a=Sj(e,n);if(n.fill&&n.fill!==lo)if(n.fillStyle==="solid"){let s=Sj(e,Object.assign(Object.assign({},n),{disableMultiStroke:!0,roughness:n.roughness?n.roughness+n.fillShapeRoughnessGain:0}));i.push({type:"fillPath",ops:this._mergedShape(s.ops)})}else{let s=[],l=e;if(l.length){let u=typeof l[0][0]=="number"?[l]:l;for(let h of u)h.length<3?s.push(...h):h.length===3?s.push(..._9(Nj([h[0],h[0],h[1],h[2]]),10,(1+n.roughness)/2)):s.push(..._9(Nj(h),10,(1+n.roughness)/2))}s.length&&i.push(vm([s],n))}return n.stroke!==lo&&i.push(a),this._d("curve",i,n)}polygon(e,r){let n=this._o(r),i=[],a=G5(e,!0,n);return n.fill&&(n.fillStyle==="solid"?i.push(A9([e],n)):i.push(vm([e],n))),n.stroke!==lo&&i.push(a),this._d("polygon",i,n)}path(e,r){let n=this._o(r),i=[];if(!e)return this._d("path",i,n);e=(e||"").replace(/\n/g," ").replace(/(-\s)/g,"-").replace("/(ss)/g"," ");let a=n.fill&&n.fill!=="transparent"&&n.fill!==lo,s=n.stroke!==lo,l=!!(n.simplification&&n.simplification<1),u=function(f,d,p){let m=Mj(Rj(G9(f))),g=[],y=[],v=[0,0],x=[],b=o(()=>{x.length>=4&&y.push(..._9(x,d)),x=[]},"i"),w=o(()=>{b(),y.length&&(g.push(y),y=[])},"c");for(let{key:T,data:E}of m)switch(T){case"M":w(),v=[E[0],E[1]],y.push(v);break;case"L":b(),y.push([E[0],E[1]]);break;case"C":if(!x.length){let L=y.length?y[y.length-1]:v;x.push([L[0],L[1]])}x.push([E[0],E[1]]),x.push([E[2],E[3]]),x.push([E[4],E[5]]);break;case"Z":b(),y.push([v[0],v[1]])}if(w(),!p)return g;let _=[];for(let T of g){let E=z7e(T,p);E.length&&_.push(E)}return _}(e,1,l?4-4*(n.simplification||1):(1+n.roughness)/2),h=Aj(e,n);if(a)if(n.fillStyle==="solid")if(u.length===1){let f=Aj(e,Object.assign(Object.assign({},n),{disableMultiStroke:!0,roughness:n.roughness?n.roughness+n.fillShapeRoughnessGain:0}));i.push({type:"fillPath",ops:this._mergedShape(f.ops)})}else i.push(A9(u,n));else i.push(vm(u,n));return s&&(l?u.forEach(f=>{i.push(G5(f,!1,n))}):i.push(h)),this._d("path",i,n)}opsToPath(e,r){let n="";for(let i of e.ops){let a=typeof r=="number"&&r>=0?i.data.map(s=>+s.toFixed(r)):i.data;switch(i.op){case"move":n+=`M${a[0]} ${a[1]} `;break;case"bcurveTo":n+=`C${a[0]} ${a[1]}, ${a[2]} ${a[3]}, ${a[4]} ${a[5]} `;break;case"lineTo":n+=`L${a[0]} ${a[1]} `}}return n.trim()}toPaths(e){let r=e.sets||[],n=e.options||this.defaultOptions,i=[];for(let a of r){let s=null;switch(a.type){case"path":s={d:this.opsToPath(a),stroke:n.stroke,strokeWidth:n.strokeWidth,fill:lo};break;case"fillPath":s={d:this.opsToPath(a),stroke:lo,strokeWidth:0,fill:n.fill||lo};break;case"fillSketch":s=this.fillSketch(a,n)}s&&i.push(s)}return i}fillSketch(e,r){let n=r.fillWeight;return n<0&&(n=r.strokeWidth/2),{d:this.opsToPath(e),stroke:r.fill||lo,strokeWidth:n,fill:lo}}_mergedShape(e){return e.filter((r,n)=>n===0||r.op!=="move")}},F9=class{static{o(this,"st")}constructor(e,r){this.canvas=e,this.ctx=this.canvas.getContext("2d"),this.gen=new xm(r)}draw(e){let r=e.sets||[],n=e.options||this.getDefaultOptions(),i=this.ctx,a=e.options.fixedDecimalPlaceDigits;for(let s of r)switch(s.type){case"path":i.save(),i.strokeStyle=n.stroke==="none"?"transparent":n.stroke,i.lineWidth=n.strokeWidth,n.strokeLineDash&&i.setLineDash(n.strokeLineDash),n.strokeLineDashOffset&&(i.lineDashOffset=n.strokeLineDashOffset),this._drawToContext(i,s,a),i.restore();break;case"fillPath":{i.save(),i.fillStyle=n.fill||"";let l=e.shape==="curve"||e.shape==="polygon"||e.shape==="path"?"evenodd":"nonzero";this._drawToContext(i,s,a,l),i.restore();break}case"fillSketch":this.fillSketch(i,s,n)}}fillSketch(e,r,n){let i=n.fillWeight;i<0&&(i=n.strokeWidth/2),e.save(),n.fillLineDash&&e.setLineDash(n.fillLineDash),n.fillLineDashOffset&&(e.lineDashOffset=n.fillLineDashOffset),e.strokeStyle=n.fill||"",e.lineWidth=i,this._drawToContext(e,r,n.fixedDecimalPlaceDigits),e.restore()}_drawToContext(e,r,n,i="nonzero"){e.beginPath();for(let a of r.ops){let s=typeof n=="number"&&n>=0?a.data.map(l=>+l.toFixed(n)):a.data;switch(a.op){case"move":e.moveTo(s[0],s[1]);break;case"bcurveTo":e.bezierCurveTo(s[0],s[1],s[2],s[3],s[4],s[5]);break;case"lineTo":e.lineTo(s[0],s[1])}}r.type==="fillPath"?e.fill(i):e.stroke()}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}line(e,r,n,i,a){let s=this.gen.line(e,r,n,i,a);return this.draw(s),s}rectangle(e,r,n,i,a){let s=this.gen.rectangle(e,r,n,i,a);return this.draw(s),s}ellipse(e,r,n,i,a){let s=this.gen.ellipse(e,r,n,i,a);return this.draw(s),s}circle(e,r,n,i){let a=this.gen.circle(e,r,n,i);return this.draw(a),a}linearPath(e,r){let n=this.gen.linearPath(e,r);return this.draw(n),n}polygon(e,r){let n=this.gen.polygon(e,r);return this.draw(n),n}arc(e,r,n,i,a,s,l=!1,u){let h=this.gen.arc(e,r,n,i,a,s,l,u);return this.draw(h),h}curve(e,r){let n=this.gen.curve(e,r);return this.draw(n),n}path(e,r){let n=this.gen.path(e,r);return this.draw(n),n}},z5="http://www.w3.org/2000/svg",z9=class{static{o(this,"ot")}constructor(e,r){this.svg=e,this.gen=new xm(r)}draw(e){let r=e.sets||[],n=e.options||this.getDefaultOptions(),i=this.svg.ownerDocument||window.document,a=i.createElementNS(z5,"g"),s=e.options.fixedDecimalPlaceDigits;for(let l of r){let u=null;switch(l.type){case"path":u=i.createElementNS(z5,"path"),u.setAttribute("d",this.opsToPath(l,s)),u.setAttribute("stroke",n.stroke),u.setAttribute("stroke-width",n.strokeWidth+""),u.setAttribute("fill","none"),n.strokeLineDash&&u.setAttribute("stroke-dasharray",n.strokeLineDash.join(" ").trim()),n.strokeLineDashOffset&&u.setAttribute("stroke-dashoffset",`${n.strokeLineDashOffset}`);break;case"fillPath":u=i.createElementNS(z5,"path"),u.setAttribute("d",this.opsToPath(l,s)),u.setAttribute("stroke","none"),u.setAttribute("stroke-width","0"),u.setAttribute("fill",n.fill||""),e.shape!=="curve"&&e.shape!=="polygon"||u.setAttribute("fill-rule","evenodd");break;case"fillSketch":u=this.fillSketch(i,l,n)}u&&a.appendChild(u)}return a}fillSketch(e,r,n){let i=n.fillWeight;i<0&&(i=n.strokeWidth/2);let a=e.createElementNS(z5,"path");return a.setAttribute("d",this.opsToPath(r,n.fixedDecimalPlaceDigits)),a.setAttribute("stroke",n.fill||""),a.setAttribute("stroke-width",i+""),a.setAttribute("fill","none"),n.fillLineDash&&a.setAttribute("stroke-dasharray",n.fillLineDash.join(" ").trim()),n.fillLineDashOffset&&a.setAttribute("stroke-dashoffset",`${n.fillLineDashOffset}`),a}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}opsToPath(e,r){return this.gen.opsToPath(e,r)}line(e,r,n,i,a){let s=this.gen.line(e,r,n,i,a);return this.draw(s)}rectangle(e,r,n,i,a){let s=this.gen.rectangle(e,r,n,i,a);return this.draw(s)}ellipse(e,r,n,i,a){let s=this.gen.ellipse(e,r,n,i,a);return this.draw(s)}circle(e,r,n,i){let a=this.gen.circle(e,r,n,i);return this.draw(a)}linearPath(e,r){let n=this.gen.linearPath(e,r);return this.draw(n)}polygon(e,r){let n=this.gen.polygon(e,r);return this.draw(n)}arc(e,r,n,i,a,s,l=!1,u){let h=this.gen.arc(e,r,n,i,a,s,l,u);return this.draw(h)}curve(e,r){let n=this.gen.curve(e,r);return this.draw(n)}path(e,r){let n=this.gen.path(e,r);return this.draw(n)}},Xe={canvas:o((t,e)=>new F9(t,e),"canvas"),svg:o((t,e)=>new z9(t,e),"svg"),generator:o(t=>new xm(t),"generator"),newSeed:o(()=>xm.newSeed(),"newSeed")}});function Fj(t,e){let{labelStyles:r}=Ze(e);e.labelStyle=r;let n=ot(e),i=n;n||(i="anchor");let a=t.insert("g").attr("class",i).attr("id",e.domId||e.id),s=1,{cssStyles:l}=e,u=Xe.svg(a),h=Ke(e,{fill:"black",stroke:"none",fillStyle:"solid"});e.look!=="handDrawn"&&(h.roughness=0);let f=u.circle(0,0,s*2,h),d=a.insert(()=>f,":first-child");return d.attr("class","anchor").attr("style",Gn(l)),je(e,d),e.intersect=function(p){return Y.info("Circle intersect",e,s,p),Ye.circle(e,s,p)},a}var zj=M(()=>{"use strict";ut();Ot();qt();Xt();jt();hr();o(Fj,"anchor")});function Gj(t,e,r,n,i,a,s){let u=(t+r)/2,h=(e+n)/2,f=Math.atan2(n-e,r-t),d=(r-t)/2,p=(n-e)/2,m=d/i,g=p/a,y=Math.sqrt(m**2+g**2);if(y>1)throw new Error("The given radii are too small to create an arc between the points.");let v=Math.sqrt(1-y**2),x=u+v*a*Math.sin(f)*(s?-1:1),b=h-v*i*Math.cos(f)*(s?-1:1),w=Math.atan2((e-b)/a,(t-x)/i),T=Math.atan2((n-b)/a,(r-x)/i)-w;s&&T<0&&(T+=2*Math.PI),!s&&T>0&&(T-=2*Math.PI);let E=[];for(let L=0;L<20;L++){let S=L/19,A=w+S*T,I=x+i*Math.cos(A),D=b+a*Math.sin(A);E.push({x:I,y:D})}return E}async function $j(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await st(t,e,ot(e)),s=a.width+e.padding+20,l=a.height+e.padding,u=l/2,h=u/(2.5+l/50),{cssStyles:f}=e,d=[{x:s/2,y:-l/2},{x:-s/2,y:-l/2},...Gj(-s/2,-l/2,-s/2,l/2,h,u,!1),{x:s/2,y:l/2},...Gj(s/2,l/2,s/2,-l/2,h,u,!0)],p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=Wt(d),y=p.path(g,m),v=i.insert(()=>y,":first-child");return v.attr("class","basic label-container"),f&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",n),v.attr("transform",`translate(${h/2}, 0)`),je(e,v),e.intersect=function(x){return Ye.polygon(e,d,x)},i}var Vj=M(()=>{"use strict";Ot();qt();Xt();jt();o(Gj,"generateArcPoints");o($j,"bowTieRect")});function Ia(t,e,r,n){return t.insert("polygon",":first-child").attr("points",n.map(function(i){return i.x+","+i.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+r/2+")")}var Ou=M(()=>{"use strict";o(Ia,"insertPolygonShape")});async function Uj(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await st(t,e,ot(e)),s=a.height+e.padding,l=12,u=a.width+e.padding+l,h=0,f=u,d=-s,p=0,m=[{x:h+l,y:d},{x:f,y:d},{x:f,y:p},{x:h,y:p},{x:h,y:d+l},{x:h+l,y:d}],g,{cssStyles:y}=e;if(e.look==="handDrawn"){let v=Xe.svg(i),x=Ke(e,{}),b=Wt(m),w=v.path(b,x);g=i.insert(()=>w,":first-child").attr("transform",`translate(${-u/2}, ${s/2})`),y&&g.attr("style",y)}else g=Ia(i,u,s,m);return n&&g.attr("style",n),je(e,g),e.intersect=function(v){return Ye.polygon(e,m,v)},i}var Hj=M(()=>{"use strict";Ot();qt();Xt();jt();Ou();Ot();o(Uj,"card")});function Wj(t,e){let{nodeStyles:r}=Ze(e);e.label="";let n=t.insert("g").attr("class",ot(e)).attr("id",e.domId??e.id),{cssStyles:i}=e,a=Math.max(28,e.width??0),s=[{x:0,y:a/2},{x:a/2,y:0},{x:0,y:-a/2},{x:-a/2,y:0}],l=Xe.svg(n),u=Ke(e,{});e.look!=="handDrawn"&&(u.roughness=0,u.fillStyle="solid");let h=Wt(s),f=l.path(h,u),d=n.insert(()=>f,":first-child");return i&&e.look!=="handDrawn"&&d.selectAll("path").attr("style",i),r&&e.look!=="handDrawn"&&d.selectAll("path").attr("style",r),e.width=28,e.height=28,e.intersect=function(p){return Ye.polygon(e,s,p)},n}var Yj=M(()=>{"use strict";qt();jt();Xt();Ot();o(Wj,"choice")});async function qj(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,halfPadding:s}=await st(t,e,ot(e)),l=a.width/2+s,u,{cssStyles:h}=e;if(e.look==="handDrawn"){let f=Xe.svg(i),d=Ke(e,{}),p=f.circle(0,0,l*2,d);u=i.insert(()=>p,":first-child"),u.attr("class","basic label-container").attr("style",Gn(h))}else u=i.insert("circle",":first-child").attr("class","basic label-container").attr("style",n).attr("r",l).attr("cx",0).attr("cy",0);return je(e,u),e.intersect=function(f){return Y.info("Circle intersect",e,l,f),Ye.circle(e,l,f)},i}var Xj=M(()=>{"use strict";ut();Ot();qt();Xt();jt();hr();o(qj,"circle")});function G7e(t){let e=Math.cos(Math.PI/4),r=Math.sin(Math.PI/4),n=t*2,i={x:n/2*e,y:n/2*r},a={x:-(n/2)*e,y:n/2*r},s={x:-(n/2)*e,y:-(n/2)*r},l={x:n/2*e,y:-(n/2)*r};return`M ${a.x},${a.y} L ${l.x},${l.y} + M ${i.x},${i.y} L ${s.x},${s.y}`}function jj(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r,e.label="";let i=t.insert("g").attr("class",ot(e)).attr("id",e.domId??e.id),a=Math.max(30,e?.width??0),{cssStyles:s}=e,l=Xe.svg(i),u=Ke(e,{});e.look!=="handDrawn"&&(u.roughness=0,u.fillStyle="solid");let h=l.circle(0,0,a*2,u),f=G7e(a),d=l.path(f,u),p=i.insert(()=>h,":first-child");return p.insert(()=>d),s&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",s),n&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",n),je(e,p),e.intersect=function(m){return Y.info("crossedCircle intersect",e,{radius:a,point:m}),Ye.circle(e,a,m)},i}var Kj=M(()=>{"use strict";ut();Ot();Xt();jt();qt();o(G7e,"createLine");o(jj,"crossedCircle")});function Yh(t,e,r,n=100,i=0,a=180){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;dw,":first-child").attr("stroke-opacity",0),_.insert(()=>x,":first-child"),_.attr("class","text"),f&&e.look!=="handDrawn"&&_.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&_.selectAll("path").attr("style",n),_.attr("transform",`translate(${h}, 0)`),s.attr("transform",`translate(${-l/2+h-(a.x-(a.left??0))},${-u/2+(e.padding??0)/2-(a.y-(a.top??0))})`),je(e,_),e.intersect=function(T){return Ye.polygon(e,p,T)},i}var Zj=M(()=>{"use strict";Ot();qt();Xt();jt();o(Yh,"generateCirclePoints");o(Qj,"curlyBraceLeft")});function qh(t,e,r,n=100,i=0,a=180){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;dw,":first-child").attr("stroke-opacity",0),_.insert(()=>x,":first-child"),_.attr("class","text"),f&&e.look!=="handDrawn"&&_.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&_.selectAll("path").attr("style",n),_.attr("transform",`translate(${-h}, 0)`),s.attr("transform",`translate(${-l/2+(e.padding??0)/2-(a.x-(a.left??0))},${-u/2+(e.padding??0)/2-(a.y-(a.top??0))})`),je(e,_),e.intersect=function(T){return Ye.polygon(e,p,T)},i}var eK=M(()=>{"use strict";Ot();qt();Xt();jt();o(qh,"generateCirclePoints");o(Jj,"curlyBraceRight")});function Oa(t,e,r,n=100,i=0,a=180){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;dL,":first-child").attr("stroke-opacity",0),S.insert(()=>b,":first-child"),S.insert(()=>T,":first-child"),S.attr("class","text"),f&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",n),S.attr("transform",`translate(${h-h/4}, 0)`),s.attr("transform",`translate(${-l/2+(e.padding??0)/2-(a.x-(a.left??0))},${-u/2+(e.padding??0)/2-(a.y-(a.top??0))})`),je(e,S),e.intersect=function(A){return Ye.polygon(e,m,A)},i}var rK=M(()=>{"use strict";Ot();qt();Xt();jt();o(Oa,"generateCirclePoints");o(tK,"curlyBraces")});async function nK(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await st(t,e,ot(e)),s=80,l=20,u=Math.max(s,(a.width+(e.padding??0)*2)*1.25,e?.width??0),h=Math.max(l,a.height+(e.padding??0)*2,e?.height??0),f=h/2,{cssStyles:d}=e,p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=u,y=h,v=g-f,x=y/4,b=[{x:v,y:0},{x,y:0},{x:0,y:y/2},{x,y},{x:v,y},...O5(-v,-y/2,f,50,270,90)],w=Wt(b),_=p.path(w,m),T=i.insert(()=>_,":first-child");return T.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&T.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&T.selectChildren("path").attr("style",n),T.attr("transform",`translate(${-u/2}, ${-h/2})`),je(e,T),e.intersect=function(E){return Ye.polygon(e,b,E)},i}var iK=M(()=>{"use strict";Ot();qt();Xt();jt();o(nK,"curvedTrapezoid")});async function aK(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await st(t,e,ot(e)),l=Math.max(a.width+e.padding,e.width??0),u=l/2,h=u/(2.5+l/50),f=Math.max(a.height+h+e.padding,e.height??0),d,{cssStyles:p}=e;if(e.look==="handDrawn"){let m=Xe.svg(i),g=V7e(0,0,l,f,u,h),y=U7e(0,h,l,f,u,h),v=m.path(g,Ke(e,{})),x=m.path(y,Ke(e,{fill:"none"}));d=i.insert(()=>x,":first-child"),d=i.insert(()=>v,":first-child"),d.attr("class","basic label-container"),p&&d.attr("style",p)}else{let m=$7e(0,0,l,f,u,h);d=i.insert("path",":first-child").attr("d",m).attr("class","basic label-container").attr("style",Gn(p)).attr("style",n)}return d.attr("label-offset-y",h),d.attr("transform",`translate(${-l/2}, ${-(f/2+h)})`),je(e,d),s.attr("transform",`translate(${-(a.width/2)-(a.x-(a.left??0))}, ${-(a.height/2)+(e.padding??0)/1.5-(a.y-(a.top??0))})`),e.intersect=function(m){let g=Ye.rect(e,m),y=g.x-(e.x??0);if(u!=0&&(Math.abs(y)<(e.width??0)/2||Math.abs(y)==(e.width??0)/2&&Math.abs(g.y-(e.y??0))>(e.height??0)/2-h)){let v=h*h*(1-y*y/(u*u));v>0&&(v=Math.sqrt(v)),v=h-v,m.y-(e.y??0)>0&&(v=-v),g.y+=v}return g},i}var $7e,V7e,U7e,sK=M(()=>{"use strict";Ot();qt();Xt();jt();hr();$7e=o((t,e,r,n,i,a)=>[`M${t},${e+a}`,`a${i},${a} 0,0,0 ${r},0`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`].join(" "),"createCylinderPathD"),V7e=o((t,e,r,n,i,a)=>[`M${t},${e+a}`,`M${t+r},${e+a}`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`].join(" "),"createOuterCylinderPathD"),U7e=o((t,e,r,n,i,a)=>[`M${t-r/2},${-n/2}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD");o(aK,"cylinder")});async function oK(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await st(t,e,ot(e)),l=a.width+e.padding,u=a.height+e.padding,h=u*.2,f=-l/2,d=-u/2-h/2,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=[{x:f,y:d+h},{x:-f,y:d+h},{x:-f,y:-d},{x:f,y:-d},{x:f,y:d},{x:-f,y:d},{x:-f,y:d+h}],v=m.polygon(y.map(b=>[b.x,b.y]),g),x=i.insert(()=>v,":first-child");return x.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",n),s.attr("transform",`translate(${f+(e.padding??0)/2-(a.x-(a.left??0))}, ${d+h+(e.padding??0)/2-(a.y-(a.top??0))})`),je(e,x),e.intersect=function(b){return Ye.rect(e,b)},i}var lK=M(()=>{"use strict";Ot();qt();Xt();jt();o(oK,"dividedRectangle")});async function cK(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,halfPadding:s}=await st(t,e,ot(e)),u=a.width/2+s+5,h=a.width/2+s,f,{cssStyles:d}=e;if(e.look==="handDrawn"){let p=Xe.svg(i),m=Ke(e,{roughness:.2,strokeWidth:2.5}),g=Ke(e,{roughness:.2,strokeWidth:1.5}),y=p.circle(0,0,u*2,m),v=p.circle(0,0,h*2,g);f=i.insert("g",":first-child"),f.attr("class",Gn(e.cssClasses)).attr("style",Gn(d)),f.node()?.appendChild(y),f.node()?.appendChild(v)}else{f=i.insert("g",":first-child");let p=f.insert("circle",":first-child"),m=f.insert("circle");f.attr("class","basic label-container").attr("style",n),p.attr("class","outer-circle").attr("style",n).attr("r",u).attr("cx",0).attr("cy",0),m.attr("class","inner-circle").attr("style",n).attr("r",h).attr("cx",0).attr("cy",0)}return je(e,f),e.intersect=function(p){return Y.info("DoubleCircle intersect",e,u,p),Ye.circle(e,u,p)},i}var uK=M(()=>{"use strict";ut();Ot();qt();Xt();jt();hr();o(cK,"doublecircle")});function hK(t,e,{config:{themeVariables:r}}){let{labelStyles:n,nodeStyles:i}=Ze(e);e.label="",e.labelStyle=n;let a=t.insert("g").attr("class",ot(e)).attr("id",e.domId??e.id),s=7,{cssStyles:l}=e,u=Xe.svg(a),{nodeBorder:h}=r,f=Ke(e,{fillStyle:"solid"});e.look!=="handDrawn"&&(f.roughness=0);let d=u.circle(0,0,s*2,f),p=a.insert(()=>d,":first-child");return p.selectAll("path").attr("style",`fill: ${h} !important;`),l&&l.length>0&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",l),i&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",i),je(e,p),e.intersect=function(m){return Y.info("filledCircle intersect",e,{radius:s,point:m}),Ye.circle(e,s,m)},a}var fK=M(()=>{"use strict";jt();ut();qt();Xt();Ot();o(hK,"filledCircle")});async function dK(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await st(t,e,ot(e)),l=a.width+(e.padding??0),u=l+a.height,h=l+a.height,f=[{x:0,y:-u},{x:h,y:-u},{x:h/2,y:0}],{cssStyles:d}=e,p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=Wt(f),y=p.path(g,m),v=i.insert(()=>y,":first-child").attr("transform",`translate(${-u/2}, ${u/2})`);return d&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",n),e.width=l,e.height=u,je(e,v),s.attr("transform",`translate(${-a.width/2-(a.x-(a.left??0))}, ${-u/2+(e.padding??0)/2+(a.y-(a.top??0))})`),e.intersect=function(x){return Y.info("Triangle intersect",e,f,x),Ye.polygon(e,f,x)},i}var pK=M(()=>{"use strict";ut();Ot();qt();Xt();jt();Ot();o(dK,"flippedTriangle")});function mK(t,e,{dir:r,config:{state:n,themeVariables:i}}){let{nodeStyles:a}=Ze(e);e.label="";let s=t.insert("g").attr("class",ot(e)).attr("id",e.domId??e.id),{cssStyles:l}=e,u=Math.max(70,e?.width??0),h=Math.max(10,e?.height??0);r==="LR"&&(u=Math.max(10,e?.width??0),h=Math.max(70,e?.height??0));let f=-1*u/2,d=-1*h/2,p=Xe.svg(s),m=Ke(e,{stroke:i.lineColor,fill:i.lineColor});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=p.rectangle(f,d,u,h,m),y=s.insert(()=>g,":first-child");l&&e.look!=="handDrawn"&&y.selectAll("path").attr("style",l),a&&e.look!=="handDrawn"&&y.selectAll("path").attr("style",a),je(e,y);let v=n?.padding??0;return e.width&&e.height&&(e.width+=v/2||0,e.height+=v/2||0),e.intersect=function(x){return Ye.rect(e,x)},s}var gK=M(()=>{"use strict";jt();qt();Xt();Ot();o(mK,"forkJoin")});async function yK(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let i=80,a=50,{shapeSvg:s,bbox:l}=await st(t,e,ot(e)),u=Math.max(i,l.width+(e.padding??0)*2,e?.width??0),h=Math.max(a,l.height+(e.padding??0)*2,e?.height??0),f=h/2,{cssStyles:d}=e,p=Xe.svg(s),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=[{x:-u/2,y:-h/2},{x:u/2-f,y:-h/2},...O5(-u/2+f,0,f,50,90,270),{x:u/2-f,y:h/2},{x:-u/2,y:h/2}],y=Wt(g),v=p.path(y,m),x=s.insert(()=>v,":first-child");return x.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",n),je(e,x),e.intersect=function(b){return Y.info("Pill intersect",e,{radius:f,point:b}),Ye.polygon(e,g,b)},s}var vK=M(()=>{"use strict";ut();Ot();qt();Xt();jt();o(yK,"halfRoundedRectangle")});async function xK(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await st(t,e,ot(e)),s=4,l=a.height+e.padding,u=l/s,h=a.width+2*u+e.padding,f=[{x:u,y:0},{x:h-u,y:0},{x:h,y:-l/2},{x:h-u,y:-l},{x:u,y:-l},{x:0,y:-l/2}],d,{cssStyles:p}=e;if(e.look==="handDrawn"){let m=Xe.svg(i),g=Ke(e,{}),y=H7e(0,0,h,l,u),v=m.path(y,g);d=i.insert(()=>v,":first-child").attr("transform",`translate(${-h/2}, ${l/2})`),p&&d.attr("style",p)}else d=Ia(i,h,l,f);return n&&d.attr("style",n),e.width=h,e.height=l,je(e,d),e.intersect=function(m){return Ye.polygon(e,f,m)},i}var H7e,bK=M(()=>{"use strict";Ot();qt();Xt();jt();Ou();H7e=o((t,e,r,n,i)=>[`M${t+i},${e}`,`L${t+r-i},${e}`,`L${t+r},${e-n/2}`,`L${t+r-i},${e-n}`,`L${t+i},${e-n}`,`L${t},${e-n/2}`,"Z"].join(" "),"createHexagonPathD");o(xK,"hexagon")});async function wK(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.label="",e.labelStyle=r;let{shapeSvg:i}=await st(t,e,ot(e)),a=Math.max(30,e?.width??0),s=Math.max(30,e?.height??0),{cssStyles:l}=e,u=Xe.svg(i),h=Ke(e,{});e.look!=="handDrawn"&&(h.roughness=0,h.fillStyle="solid");let f=[{x:0,y:0},{x:a,y:0},{x:0,y:s},{x:a,y:s}],d=Wt(f),p=u.path(d,h),m=i.insert(()=>p,":first-child");return m.attr("class","basic label-container"),l&&e.look!=="handDrawn"&&m.selectChildren("path").attr("style",l),n&&e.look!=="handDrawn"&&m.selectChildren("path").attr("style",n),m.attr("transform",`translate(${-a/2}, ${-s/2})`),je(e,m),e.intersect=function(g){return Y.info("Pill intersect",e,{points:f}),Ye.polygon(e,f,g)},i}var TK=M(()=>{"use strict";ut();Ot();qt();Xt();jt();o(wK,"hourglass")});async function kK(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=Ze(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,label:d}=await st(t,e,"icon-shape default"),p=e.pos==="t",m=l,g=l,{nodeBorder:y}=r,{stylesMap:v}=Sc(e),x=-g/2,b=-m/2,w=e.label?8:0,_=Xe.svg(h),T=Ke(e,{stroke:"none",fill:"none"});e.look!=="handDrawn"&&(T.roughness=0,T.fillStyle="solid");let E=_.rectangle(x,b,g,m,T),L=Math.max(g,f.width),S=m+f.height+w,A=_.rectangle(-L/2,-S/2,L,S,{...T,fill:"transparent",stroke:"none"}),I=h.insert(()=>E,":first-child"),D=h.insert(()=>A);if(e.icon){let k=h.append("g");k.html(`${await _o(e.icon,{height:l,width:l,fallbackPrefix:""})}`);let R=k.node().getBBox(),C=R.width,O=R.height,N=R.x,P=R.y;k.attr("transform",`translate(${-C/2-N},${p?f.height/2+w/2-O/2-P:-f.height/2-w/2-O/2-P})`),k.attr("style",`color: ${v.get("stroke")??y};`)}return d.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${p?-S/2:S/2-f.height})`),I.attr("transform",`translate(0,${p?f.height/2+w/2:-f.height/2-w/2})`),je(e,D),e.intersect=function(k){if(Y.info("iconSquare intersect",e,k),!e.label)return Ye.rect(e,k);let R=e.x??0,C=e.y??0,O=e.height??0,N=[];return p?N=[{x:R-f.width/2,y:C-O/2},{x:R+f.width/2,y:C-O/2},{x:R+f.width/2,y:C-O/2+f.height+w},{x:R+g/2,y:C-O/2+f.height+w},{x:R+g/2,y:C+O/2},{x:R-g/2,y:C+O/2},{x:R-g/2,y:C-O/2+f.height+w},{x:R-f.width/2,y:C-O/2+f.height+w}]:N=[{x:R-g/2,y:C-O/2},{x:R+g/2,y:C-O/2},{x:R+g/2,y:C-O/2+m},{x:R+f.width/2,y:C-O/2+m},{x:R+f.width/2/2,y:C+O/2},{x:R-f.width/2,y:C+O/2},{x:R-f.width/2,y:C-O/2+m},{x:R-g/2,y:C-O/2+m}],Ye.polygon(e,N,k)},h}var EK=M(()=>{"use strict";jt();ut();su();qt();Xt();Ot();o(kK,"icon")});async function SK(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=Ze(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,label:d}=await st(t,e,"icon-shape default"),p=20,m=e.label?8:0,g=e.pos==="t",{nodeBorder:y,mainBkg:v}=r,{stylesMap:x}=Sc(e),b=Xe.svg(h),w=Ke(e,{});e.look!=="handDrawn"&&(w.roughness=0,w.fillStyle="solid");let _=x.get("fill");w.stroke=_??v;let T=h.append("g");e.icon&&T.html(`${await _o(e.icon,{height:l,width:l,fallbackPrefix:""})}`);let E=T.node().getBBox(),L=E.width,S=E.height,A=E.x,I=E.y,D=Math.max(L,S)*Math.SQRT2+p*2,k=b.circle(0,0,D,w),R=Math.max(D,f.width),C=D+f.height+m,O=b.rectangle(-R/2,-C/2,R,C,{...w,fill:"transparent",stroke:"none"}),N=h.insert(()=>k,":first-child"),P=h.insert(()=>O);return T.attr("transform",`translate(${-L/2-A},${g?f.height/2+m/2-S/2-I:-f.height/2-m/2-S/2-I})`),T.attr("style",`color: ${x.get("stroke")??y};`),d.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${g?-C/2:C/2-f.height})`),N.attr("transform",`translate(0,${g?f.height/2+m/2:-f.height/2-m/2})`),je(e,P),e.intersect=function(F){return Y.info("iconSquare intersect",e,F),Ye.rect(e,F)},h}var CK=M(()=>{"use strict";jt();ut();su();qt();Xt();Ot();o(SK,"iconCircle")});var Pa,Xh=M(()=>{"use strict";Pa=o((t,e,r,n,i)=>["M",t+i,e,"H",t+r-i,"A",i,i,0,0,1,t+r,e+i,"V",e+n-i,"A",i,i,0,0,1,t+r-i,e+n,"H",t+i,"A",i,i,0,0,1,t,e+n-i,"V",e+i,"A",i,i,0,0,1,t+i,e,"Z"].join(" "),"createRoundedRectPathD")});async function AK(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=Ze(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,halfPadding:d,label:p}=await st(t,e,"icon-shape default"),m=e.pos==="t",g=l+d*2,y=l+d*2,{nodeBorder:v,mainBkg:x}=r,{stylesMap:b}=Sc(e),w=-y/2,_=-g/2,T=e.label?8:0,E=Xe.svg(h),L=Ke(e,{});e.look!=="handDrawn"&&(L.roughness=0,L.fillStyle="solid");let S=b.get("fill");L.stroke=S??x;let A=E.path(Pa(w,_,y,g,5),L),I=Math.max(y,f.width),D=g+f.height+T,k=E.rectangle(-I/2,-D/2,I,D,{...L,fill:"transparent",stroke:"none"}),R=h.insert(()=>A,":first-child").attr("class","icon-shape2"),C=h.insert(()=>k);if(e.icon){let O=h.append("g");O.html(`${await _o(e.icon,{height:l,width:l,fallbackPrefix:""})}`);let N=O.node().getBBox(),P=N.width,F=N.height,B=N.x,G=N.y;O.attr("transform",`translate(${-P/2-B},${m?f.height/2+T/2-F/2-G:-f.height/2-T/2-F/2-G})`),O.attr("style",`color: ${b.get("stroke")??v};`)}return p.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${m?-D/2:D/2-f.height})`),R.attr("transform",`translate(0,${m?f.height/2+T/2:-f.height/2-T/2})`),je(e,C),e.intersect=function(O){if(Y.info("iconSquare intersect",e,O),!e.label)return Ye.rect(e,O);let N=e.x??0,P=e.y??0,F=e.height??0,B=[];return m?B=[{x:N-f.width/2,y:P-F/2},{x:N+f.width/2,y:P-F/2},{x:N+f.width/2,y:P-F/2+f.height+T},{x:N+y/2,y:P-F/2+f.height+T},{x:N+y/2,y:P+F/2},{x:N-y/2,y:P+F/2},{x:N-y/2,y:P-F/2+f.height+T},{x:N-f.width/2,y:P-F/2+f.height+T}]:B=[{x:N-y/2,y:P-F/2},{x:N+y/2,y:P-F/2},{x:N+y/2,y:P-F/2+g},{x:N+f.width/2,y:P-F/2+g},{x:N+f.width/2/2,y:P+F/2},{x:N-f.width/2,y:P+F/2},{x:N-f.width/2,y:P-F/2+g},{x:N-y/2,y:P-F/2+g}],Ye.polygon(e,B,O)},h}var _K=M(()=>{"use strict";jt();ut();su();qt();Xt();Xh();Ot();o(AK,"iconRounded")});async function LK(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=Ze(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,halfPadding:d,label:p}=await st(t,e,"icon-shape default"),m=e.pos==="t",g=l+d*2,y=l+d*2,{nodeBorder:v,mainBkg:x}=r,{stylesMap:b}=Sc(e),w=-y/2,_=-g/2,T=e.label?8:0,E=Xe.svg(h),L=Ke(e,{});e.look!=="handDrawn"&&(L.roughness=0,L.fillStyle="solid");let S=b.get("fill");L.stroke=S??x;let A=E.path(Pa(w,_,y,g,.1),L),I=Math.max(y,f.width),D=g+f.height+T,k=E.rectangle(-I/2,-D/2,I,D,{...L,fill:"transparent",stroke:"none"}),R=h.insert(()=>A,":first-child"),C=h.insert(()=>k);if(e.icon){let O=h.append("g");O.html(`${await _o(e.icon,{height:l,width:l,fallbackPrefix:""})}`);let N=O.node().getBBox(),P=N.width,F=N.height,B=N.x,G=N.y;O.attr("transform",`translate(${-P/2-B},${m?f.height/2+T/2-F/2-G:-f.height/2-T/2-F/2-G})`),O.attr("style",`color: ${b.get("stroke")??v};`)}return p.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${m?-D/2:D/2-f.height})`),R.attr("transform",`translate(0,${m?f.height/2+T/2:-f.height/2-T/2})`),je(e,C),e.intersect=function(O){if(Y.info("iconSquare intersect",e,O),!e.label)return Ye.rect(e,O);let N=e.x??0,P=e.y??0,F=e.height??0,B=[];return m?B=[{x:N-f.width/2,y:P-F/2},{x:N+f.width/2,y:P-F/2},{x:N+f.width/2,y:P-F/2+f.height+T},{x:N+y/2,y:P-F/2+f.height+T},{x:N+y/2,y:P+F/2},{x:N-y/2,y:P+F/2},{x:N-y/2,y:P-F/2+f.height+T},{x:N-f.width/2,y:P-F/2+f.height+T}]:B=[{x:N-y/2,y:P-F/2},{x:N+y/2,y:P-F/2},{x:N+y/2,y:P-F/2+g},{x:N+f.width/2,y:P-F/2+g},{x:N+f.width/2/2,y:P+F/2},{x:N-f.width/2,y:P+F/2},{x:N-f.width/2,y:P-F/2+g},{x:N-y/2,y:P-F/2+g}],Ye.polygon(e,B,O)},h}var DK=M(()=>{"use strict";jt();ut();su();qt();Xh();Xt();Ot();o(LK,"iconSquare")});async function NK(t,e,{config:{flowchart:r}}){let n=new Image;n.src=e?.img??"",await n.decode();let i=Number(n.naturalWidth.toString().replace("px","")),a=Number(n.naturalHeight.toString().replace("px",""));e.imageAspectRatio=i/a;let{labelStyles:s}=Ze(e);e.labelStyle=s;let l=r?.wrappingWidth;e.defaultWidth=r?.wrappingWidth;let u=Math.max(e.label?l??0:0,e?.assetWidth??i),h=e.constraint==="on"&&e?.assetHeight?e.assetHeight*e.imageAspectRatio:u,f=e.constraint==="on"?h/e.imageAspectRatio:e?.assetHeight??a;e.width=Math.max(h,l??0);let{shapeSvg:d,bbox:p,label:m}=await st(t,e,"image-shape default"),g=e.pos==="t",y=-h/2,v=-f/2,x=e.label?8:0,b=Xe.svg(d),w=Ke(e,{});e.look!=="handDrawn"&&(w.roughness=0,w.fillStyle="solid");let _=b.rectangle(y,v,h,f,w),T=Math.max(h,p.width),E=f+p.height+x,L=b.rectangle(-T/2,-E/2,T,E,{...w,fill:"none",stroke:"none"}),S=d.insert(()=>_,":first-child"),A=d.insert(()=>L);if(e.img){let I=d.append("image");I.attr("href",e.img),I.attr("width",h),I.attr("height",f),I.attr("preserveAspectRatio","none"),I.attr("transform",`translate(${-h/2},${g?E/2-f:-E/2})`)}return m.attr("transform",`translate(${-p.width/2-(p.x-(p.left??0))},${g?-f/2-p.height/2-x/2:f/2-p.height/2+x/2})`),S.attr("transform",`translate(0,${g?p.height/2+x/2:-p.height/2-x/2})`),je(e,A),e.intersect=function(I){if(Y.info("iconSquare intersect",e,I),!e.label)return Ye.rect(e,I);let D=e.x??0,k=e.y??0,R=e.height??0,C=[];return g?C=[{x:D-p.width/2,y:k-R/2},{x:D+p.width/2,y:k-R/2},{x:D+p.width/2,y:k-R/2+p.height+x},{x:D+h/2,y:k-R/2+p.height+x},{x:D+h/2,y:k+R/2},{x:D-h/2,y:k+R/2},{x:D-h/2,y:k-R/2+p.height+x},{x:D-p.width/2,y:k-R/2+p.height+x}]:C=[{x:D-h/2,y:k-R/2},{x:D+h/2,y:k-R/2},{x:D+h/2,y:k-R/2+f},{x:D+p.width/2,y:k-R/2+f},{x:D+p.width/2/2,y:k+R/2},{x:D-p.width/2,y:k+R/2},{x:D-p.width/2,y:k-R/2+f},{x:D-h/2,y:k-R/2+f}],Ye.polygon(e,C,I)},d}var RK=M(()=>{"use strict";jt();ut();qt();Xt();Ot();o(NK,"imageSquare")});async function MK(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await st(t,e,ot(e)),s=Math.max(a.width+(e.padding??0)*2,e?.width??0),l=Math.max(a.height+(e.padding??0)*2,e?.height??0),u=[{x:0,y:0},{x:s,y:0},{x:s+3*l/6,y:-l},{x:-3*l/6,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Xe.svg(i),p=Ke(e,{}),m=Wt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=Ia(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,je(e,h),e.intersect=function(d){return Ye.polygon(e,u,d)},i}var IK=M(()=>{"use strict";Ot();qt();Xt();jt();Ou();o(MK,"inv_trapezoid")});async function Pd(t,e,r){let{labelStyles:n,nodeStyles:i}=Ze(e);e.labelStyle=n;let{shapeSvg:a,bbox:s}=await st(t,e,ot(e)),l=Math.max(s.width+r.labelPaddingX*2,e?.width||0),u=Math.max(s.height+r.labelPaddingY*2,e?.height||0),h=-l/2,f=-u/2,d,{rx:p,ry:m}=e,{cssStyles:g}=e;if(r?.rx&&r.ry&&(p=r.rx,m=r.ry),e.look==="handDrawn"){let y=Xe.svg(a),v=Ke(e,{}),x=p||m?y.path(Pa(h,f,l,u,p||0),v):y.rectangle(h,f,l,u,v);d=a.insert(()=>x,":first-child"),d.attr("class","basic label-container").attr("style",Gn(g))}else d=a.insert("rect",":first-child"),d.attr("class","basic label-container").attr("style",i).attr("rx",Gn(p)).attr("ry",Gn(m)).attr("x",h).attr("y",f).attr("width",l).attr("height",u);return je(e,d),e.intersect=function(y){return Ye.rect(e,y)},a}var Mv=M(()=>{"use strict";Ot();qt();Xh();Xt();jt();hr();o(Pd,"drawRect")});async function OK(t,e){let{shapeSvg:r,bbox:n,label:i}=await st(t,e,"label"),a=r.insert("rect",":first-child");return a.attr("width",.1).attr("height",.1),r.attr("class","label edgeLabel"),i.attr("transform",`translate(${-(n.width/2)-(n.x-(n.left??0))}, ${-(n.height/2)-(n.y-(n.top??0))})`),je(e,a),e.intersect=function(u){return Ye.rect(e,u)},r}var PK=M(()=>{"use strict";Mv();Ot();qt();o(OK,"labelRect")});async function BK(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await st(t,e,ot(e)),s=Math.max(a.width+(e.padding??0),e?.width??0),l=Math.max(a.height+(e.padding??0),e?.height??0),u=[{x:0,y:0},{x:s+3*l/6,y:0},{x:s,y:-l},{x:-(3*l)/6,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Xe.svg(i),p=Ke(e,{}),m=Wt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=Ia(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,je(e,h),e.intersect=function(d){return Ye.polygon(e,u,d)},i}var FK=M(()=>{"use strict";Ot();qt();Xt();jt();Ou();o(BK,"lean_left")});async function zK(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await st(t,e,ot(e)),s=Math.max(a.width+(e.padding??0),e?.width??0),l=Math.max(a.height+(e.padding??0),e?.height??0),u=[{x:-3*l/6,y:0},{x:s,y:0},{x:s+3*l/6,y:-l},{x:0,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Xe.svg(i),p=Ke(e,{}),m=Wt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=Ia(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,je(e,h),e.intersect=function(d){return Ye.polygon(e,u,d)},i}var GK=M(()=>{"use strict";Ot();qt();Xt();jt();Ou();o(zK,"lean_right")});function $K(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.label="",e.labelStyle=r;let i=t.insert("g").attr("class",ot(e)).attr("id",e.domId??e.id),{cssStyles:a}=e,s=Math.max(35,e?.width??0),l=Math.max(35,e?.height??0),u=7,h=[{x:s,y:0},{x:0,y:l+u/2},{x:s-2*u,y:l+u/2},{x:0,y:2*l},{x:s,y:l-u/2},{x:2*u,y:l-u/2}],f=Xe.svg(i),d=Ke(e,{});e.look!=="handDrawn"&&(d.roughness=0,d.fillStyle="solid");let p=Wt(h),m=f.path(p,d),g=i.insert(()=>m,":first-child");return a&&e.look!=="handDrawn"&&g.selectAll("path").attr("style",a),n&&e.look!=="handDrawn"&&g.selectAll("path").attr("style",n),g.attr("transform",`translate(-${s/2},${-l})`),je(e,g),e.intersect=function(y){return Y.info("lightningBolt intersect",e,y),Ye.polygon(e,h,y)},i}var VK=M(()=>{"use strict";ut();Ot();Xt();jt();qt();Ot();o($K,"lightningBolt")});async function UK(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await st(t,e,ot(e)),l=Math.max(a.width+(e.padding??0),e.width??0),u=l/2,h=u/(2.5+l/50),f=Math.max(a.height+h+(e.padding??0),e.height??0),d=f*.1,p,{cssStyles:m}=e;if(e.look==="handDrawn"){let g=Xe.svg(i),y=Y7e(0,0,l,f,u,h,d),v=q7e(0,h,l,f,u,h),x=Ke(e,{}),b=g.path(y,x),w=g.path(v,x);i.insert(()=>w,":first-child").attr("class","line"),p=i.insert(()=>b,":first-child"),p.attr("class","basic label-container"),m&&p.attr("style",m)}else{let g=W7e(0,0,l,f,u,h,d);p=i.insert("path",":first-child").attr("d",g).attr("class","basic label-container").attr("style",Gn(m)).attr("style",n)}return p.attr("label-offset-y",h),p.attr("transform",`translate(${-l/2}, ${-(f/2+h)})`),je(e,p),s.attr("transform",`translate(${-(a.width/2)-(a.x-(a.left??0))}, ${-(a.height/2)+h-(a.y-(a.top??0))})`),e.intersect=function(g){let y=Ye.rect(e,g),v=y.x-(e.x??0);if(u!=0&&(Math.abs(v)<(e.width??0)/2||Math.abs(v)==(e.width??0)/2&&Math.abs(y.y-(e.y??0))>(e.height??0)/2-h)){let x=h*h*(1-v*v/(u*u));x>0&&(x=Math.sqrt(x)),x=h-x,g.y-(e.y??0)>0&&(x=-x),y.y+=x}return y},i}var W7e,Y7e,q7e,HK=M(()=>{"use strict";Ot();qt();Xt();jt();hr();W7e=o((t,e,r,n,i,a,s)=>[`M${t},${e+a}`,`a${i},${a} 0,0,0 ${r},0`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`,`M${t},${e+a+s}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createCylinderPathD"),Y7e=o((t,e,r,n,i,a,s)=>[`M${t},${e+a}`,`M${t+r},${e+a}`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`,`M${t},${e+a+s}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createOuterCylinderPathD"),q7e=o((t,e,r,n,i,a)=>[`M${t-r/2},${-n/2}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD");o(UK,"linedCylinder")});async function WK(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await st(t,e,ot(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/4,f=u+h,{cssStyles:d}=e,p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=[{x:-l/2-l/2*.1,y:-f/2},{x:-l/2-l/2*.1,y:f/2},...Wo(-l/2-l/2*.1,f/2,l/2+l/2*.1,f/2,h,.8),{x:l/2+l/2*.1,y:-f/2},{x:-l/2-l/2*.1,y:-f/2},{x:-l/2,y:-f/2},{x:-l/2,y:f/2*1.1},{x:-l/2,y:-f/2}],y=p.polygon(g.map(x=>[x.x,x.y]),m),v=i.insert(()=>y,":first-child");return v.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",d),n&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",n),v.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)+l/2*.1/2-(a.x-(a.left??0))},${-u/2+(e.padding??0)-h/2-(a.y-(a.top??0))})`),je(e,v),e.intersect=function(x){return Ye.polygon(e,g,x)},i}var YK=M(()=>{"use strict";Ot();qt();jt();Xt();o(WK,"linedWaveEdgedRect")});async function qK(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await st(t,e,ot(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=5,f=-l/2,d=-u/2,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{}),y=[{x:f-h,y:d+h},{x:f-h,y:d+u+h},{x:f+l-h,y:d+u+h},{x:f+l-h,y:d+u},{x:f+l,y:d+u},{x:f+l,y:d+u-h},{x:f+l+h,y:d+u-h},{x:f+l+h,y:d-h},{x:f+h,y:d-h},{x:f+h,y:d},{x:f,y:d},{x:f,y:d+h}],v=[{x:f,y:d+h},{x:f+l-h,y:d+h},{x:f+l-h,y:d+u},{x:f+l,y:d+u},{x:f+l,y:d},{x:f,y:d}];e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let x=Wt(y),b=m.path(x,g),w=Wt(v),_=m.path(w,{...g,fill:"none"}),T=i.insert(()=>_,":first-child");return T.insert(()=>b,":first-child"),T.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",n),s.attr("transform",`translate(${-(a.width/2)-h-(a.x-(a.left??0))}, ${-(a.height/2)+h-(a.y-(a.top??0))})`),je(e,T),e.intersect=function(E){return Ye.polygon(e,y,E)},i}var XK=M(()=>{"use strict";Ot();Xt();jt();qt();o(qK,"multiRect")});async function jK(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await st(t,e,ot(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/4,f=u+h,d=-l/2,p=-f/2,m=5,{cssStyles:g}=e,y=Wo(d-m,p+f+m,d+l-m,p+f+m,h,.8),v=y?.[y.length-1],x=[{x:d-m,y:p+m},{x:d-m,y:p+f+m},...y,{x:d+l-m,y:v.y-m},{x:d+l,y:v.y-m},{x:d+l,y:v.y-2*m},{x:d+l+m,y:v.y-2*m},{x:d+l+m,y:p-m},{x:d+m,y:p-m},{x:d+m,y:p},{x:d,y:p},{x:d,y:p+m}],b=[{x:d,y:p+m},{x:d+l-m,y:p+m},{x:d+l-m,y:v.y-m},{x:d+l,y:v.y-m},{x:d+l,y:p},{x:d,y:p}],w=Xe.svg(i),_=Ke(e,{});e.look!=="handDrawn"&&(_.roughness=0,_.fillStyle="solid");let T=Wt(x),E=w.path(T,_),L=Wt(b),S=w.path(L,_),A=i.insert(()=>E,":first-child");return A.insert(()=>S),A.attr("class","basic label-container"),g&&e.look!=="handDrawn"&&A.selectAll("path").attr("style",g),n&&e.look!=="handDrawn"&&A.selectAll("path").attr("style",n),A.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-(a.width/2)-m-(a.x-(a.left??0))}, ${-(a.height/2)+m-h/2-(a.y-(a.top??0))})`),je(e,A),e.intersect=function(I){return Ye.polygon(e,x,I)},i}var KK=M(()=>{"use strict";Ot();qt();jt();Xt();o(jK,"multiWaveEdgedRectangle")});async function QK(t,e,{config:{themeVariables:r}}){let{labelStyles:n,nodeStyles:i}=Ze(e);e.labelStyle=n,e.useHtmlLabels||Cr().flowchart?.htmlLabels!==!1||(e.centerLabel=!0);let{shapeSvg:s,bbox:l}=await st(t,e,ot(e)),u=Math.max(l.width+(e.padding??0)*2,e?.width??0),h=Math.max(l.height+(e.padding??0)*2,e?.height??0),f=-u/2,d=-h/2,{cssStyles:p}=e,m=Xe.svg(s),g=Ke(e,{fill:r.noteBkgColor,stroke:r.noteBorderColor});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=m.rectangle(f,d,u,h,g),v=s.insert(()=>y,":first-child");return v.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",p),i&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",i),je(e,v),e.intersect=function(x){return Ye.rect(e,x)},s}var ZK=M(()=>{"use strict";jt();qt();Xt();Ot();Za();o(QK,"note")});async function JK(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await st(t,e,ot(e)),s=a.width+e.padding,l=a.height+e.padding,u=s+l,h=[{x:u/2,y:0},{x:u,y:-u/2},{x:u/2,y:-u},{x:0,y:-u/2}],f,{cssStyles:d}=e;if(e.look==="handDrawn"){let p=Xe.svg(i),m=Ke(e,{}),g=X7e(0,0,u),y=p.path(g,m);f=i.insert(()=>y,":first-child").attr("transform",`translate(${-u/2}, ${u/2})`),d&&f.attr("style",d)}else f=Ia(i,u,u,h);return n&&f.attr("style",n),je(e,f),e.intersect=function(p){return Y.debug(`APA12 Intersect called SPLIT +point:`,p,` +node: +`,e,` +res:`,Ye.polygon(e,h,p)),Ye.polygon(e,h,p)},i}var X7e,eQ=M(()=>{"use strict";ut();Ot();qt();Xt();jt();Ou();X7e=o((t,e,r)=>[`M${t+r/2},${e}`,`L${t+r},${e-r/2}`,`L${t+r/2},${e-r}`,`L${t},${e-r/2}`,"Z"].join(" "),"createDecisionBoxPathD");o(JK,"question")});async function tQ(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await st(t,e,ot(e)),l=Math.max(a.width+(e.padding??0),e?.width??0),u=Math.max(a.height+(e.padding??0),e?.height??0),h=-l/2,f=-u/2,d=f/2,p=[{x:h+d,y:f},{x:h,y:0},{x:h+d,y:-f},{x:-h,y:-f},{x:-h,y:f}],{cssStyles:m}=e,g=Xe.svg(i),y=Ke(e,{});e.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let v=Wt(p),x=g.path(v,y),b=i.insert(()=>x,":first-child");return b.attr("class","basic label-container"),m&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",m),n&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",n),b.attr("transform",`translate(${-d/2},0)`),s.attr("transform",`translate(${-d/2-a.width/2-(a.x-(a.left??0))}, ${-(a.height/2)-(a.y-(a.top??0))})`),je(e,b),e.intersect=function(w){return Ye.polygon(e,p,w)},i}var rQ=M(()=>{"use strict";Ot();qt();Xt();jt();o(tQ,"rect_left_inv_arrow")});function j7e(t,e){e&&t.attr("style",e)}async function K7e(t){let e=Ve(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),r=e.append("xhtml:div"),n=t.label;t.label&&yi(t.label)&&(n=await bh(t.label.replace(qe.lineBreakRegex,` +`),pe()));let i=t.isNode?"nodeLabel":"edgeLabel";return r.html('"+n+""),j7e(r,t.labelStyle),r.style("display","inline-block"),r.style("padding-right","1px"),r.style("white-space","nowrap"),r.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}var Q7e,Cc,Y5=M(()=>{"use strict";pr();ut();Vt();fr();hr();o(j7e,"applyStyle");o(K7e,"addHtmlLabel");Q7e=o(async(t,e,r,n)=>{let i=t||"";if(typeof i=="object"&&(i=i[0]),xr(pe().flowchart.htmlLabels)){i=i.replace(/\\n|\n/g,"
    "),Y.info("vertexText"+i);let a={isNode:n,label:Ma(i).replace(/fa[blrs]?:fa-[\w-]+/g,l=>``),labelStyle:e&&e.replace("fill:","color:")};return await K7e(a)}else{let a=document.createElementNS("http://www.w3.org/2000/svg","text");a.setAttribute("style",e.replace("color:","fill:"));let s=[];typeof i=="string"?s=i.split(/\\n|\n|/gi):Array.isArray(i)?s=i:s=[];for(let l of s){let u=document.createElementNS("http://www.w3.org/2000/svg","tspan");u.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),u.setAttribute("dy","1em"),u.setAttribute("x","0"),r?u.setAttribute("class","title-row"):u.setAttribute("class","row"),u.textContent=l.trim(),a.appendChild(u)}return a}},"createLabel"),Cc=Q7e});async function nQ(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let i;e.cssClasses?i="node "+e.cssClasses:i="node default";let a=t.insert("g").attr("class",i).attr("id",e.domId||e.id),s=a.insert("g"),l=a.insert("g").attr("class","label").attr("style",n),u=e.description,h=e.label,f=l.node().appendChild(await Cc(h,e.labelStyle,!0,!0)),d={width:0,height:0};if(xr(pe()?.flowchart?.htmlLabels)){let S=f.children[0],A=Ve(f);d=S.getBoundingClientRect(),A.attr("width",d.width),A.attr("height",d.height)}Y.info("Text 2",u);let p=u||[],m=f.getBBox(),g=l.node().appendChild(await Cc(p.join?p.join("
    "):p,e.labelStyle,!0,!0)),y=g.children[0],v=Ve(g);d=y.getBoundingClientRect(),v.attr("width",d.width),v.attr("height",d.height);let x=(e.padding||0)/2;Ve(g).attr("transform","translate( "+(d.width>m.width?0:(m.width-d.width)/2)+", "+(m.height+x+5)+")"),Ve(f).attr("transform","translate( "+(d.width(Y.debug("Rough node insert CXC",I),D),":first-child"),E=a.insert(()=>(Y.debug("Rough node insert CXC",I),I),":first-child")}else E=s.insert("rect",":first-child"),L=s.insert("line"),E.attr("class","outer title-state").attr("style",n).attr("x",-d.width/2-x).attr("y",-d.height/2-x).attr("width",d.width+(e.padding||0)).attr("height",d.height+(e.padding||0)),L.attr("class","divider").attr("x1",-d.width/2-x).attr("x2",d.width/2+x).attr("y1",-d.height/2-x+m.height+x).attr("y2",-d.height/2-x+m.height+x);return je(e,E),e.intersect=function(S){return Ye.rect(e,S)},a}var iQ=M(()=>{"use strict";pr();fr();Ot();Y5();qt();Xt();jt();Vt();Xh();ut();o(nQ,"rectWithTitle")});async function aQ(t,e){let r={rx:5,ry:5,classes:"",labelPaddingX:(e?.padding||0)*1,labelPaddingY:(e?.padding||0)*1};return Pd(t,e,r)}var sQ=M(()=>{"use strict";Mv();o(aQ,"roundedRect")});async function oQ(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await st(t,e,ot(e)),l=e?.padding??0,u=Math.max(a.width+(e.padding??0)*2,e?.width??0),h=Math.max(a.height+(e.padding??0)*2,e?.height??0),f=-a.width/2-l,d=-a.height/2-l,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=[{x:f,y:d},{x:f+u+8,y:d},{x:f+u+8,y:d+h},{x:f-8,y:d+h},{x:f-8,y:d},{x:f,y:d},{x:f,y:d+h}],v=m.polygon(y.map(b=>[b.x,b.y]),g),x=i.insert(()=>v,":first-child");return x.attr("class","basic label-container").attr("style",Gn(p)),n&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",n),p&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",n),s.attr("transform",`translate(${-u/2+4+(e.padding??0)-(a.x-(a.left??0))},${-h/2+(e.padding??0)-(a.y-(a.top??0))})`),je(e,x),e.intersect=function(b){return Ye.rect(e,b)},i}var lQ=M(()=>{"use strict";Ot();qt();Xt();jt();hr();o(oQ,"shadedProcess")});async function cQ(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await st(t,e,ot(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=-l/2,f=-u/2,{cssStyles:d}=e,p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=[{x:h,y:f},{x:h,y:f+u},{x:h+l,y:f+u},{x:h+l,y:f-u/2}],y=Wt(g),v=p.path(y,m),x=i.insert(()=>v,":first-child");return x.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",n),x.attr("transform",`translate(0, ${u/4})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(a.x-(a.left??0))}, ${-u/4+(e.padding??0)-(a.y-(a.top??0))})`),je(e,x),e.intersect=function(b){return Ye.polygon(e,g,b)},i}var uQ=M(()=>{"use strict";Ot();qt();Xt();jt();o(cQ,"slopedRect")});async function hQ(t,e){let r={rx:0,ry:0,classes:"",labelPaddingX:(e?.padding||0)*2,labelPaddingY:(e?.padding||0)*1};return Pd(t,e,r)}var fQ=M(()=>{"use strict";Mv();o(hQ,"squareRect")});async function dQ(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await st(t,e,ot(e)),s=a.height+e.padding,l=a.width+s/4+e.padding,u,{cssStyles:h}=e;if(e.look==="handDrawn"){let f=Xe.svg(i),d=Ke(e,{}),p=Pa(-l/2,-s/2,l,s,s/2),m=f.path(p,d);u=i.insert(()=>m,":first-child"),u.attr("class","basic label-container").attr("style",Gn(h))}else u=i.insert("rect",":first-child"),u.attr("class","basic label-container").attr("style",n).attr("rx",s/2).attr("ry",s/2).attr("x",-l/2).attr("y",-s/2).attr("width",l).attr("height",s);return je(e,u),e.intersect=function(f){return Ye.rect(e,f)},i}var pQ=M(()=>{"use strict";Ot();qt();Xt();jt();Xh();hr();o(dQ,"stadium")});async function mQ(t,e){return Pd(t,e,{rx:5,ry:5,classes:"flowchart-node"})}var gQ=M(()=>{"use strict";Mv();o(mQ,"state")});function yQ(t,e,{config:{themeVariables:r}}){let{labelStyles:n,nodeStyles:i}=Ze(e);e.labelStyle=n;let{cssStyles:a}=e,{lineColor:s,stateBorder:l,nodeBorder:u}=r,h=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),f=Xe.svg(h),d=Ke(e,{});e.look!=="handDrawn"&&(d.roughness=0,d.fillStyle="solid");let p=f.circle(0,0,14,{...d,stroke:s,strokeWidth:2}),m=l??u,g=f.circle(0,0,5,{...d,fill:m,stroke:m,strokeWidth:2,fillStyle:"solid"}),y=h.insert(()=>p,":first-child");return y.insert(()=>g),a&&y.selectAll("path").attr("style",a),i&&y.selectAll("path").attr("style",i),je(e,y),e.intersect=function(v){return Ye.circle(e,7,v)},h}var vQ=M(()=>{"use strict";jt();qt();Xt();Ot();o(yQ,"stateEnd")});function xQ(t,e,{config:{themeVariables:r}}){let{lineColor:n}=r,i=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),a;if(e.look==="handDrawn"){let l=Xe.svg(i).circle(0,0,14,kj(n));a=i.insert(()=>l),a.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14)}else a=i.insert("circle",":first-child"),a.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14);return je(e,a),e.intersect=function(s){return Ye.circle(e,7,s)},i}var bQ=M(()=>{"use strict";jt();qt();Xt();Ot();o(xQ,"stateStart")});async function wQ(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await st(t,e,ot(e)),s=(e?.padding||0)/2,l=a.width+e.padding,u=a.height+e.padding,h=-a.width/2-s,f=-a.height/2-s,d=[{x:0,y:0},{x:l,y:0},{x:l,y:-u},{x:0,y:-u},{x:0,y:0},{x:-8,y:0},{x:l+8,y:0},{x:l+8,y:-u},{x:-8,y:-u},{x:-8,y:0}];if(e.look==="handDrawn"){let p=Xe.svg(i),m=Ke(e,{}),g=p.rectangle(h-8,f,l+16,u,m),y=p.line(h,f,h,f+u,m),v=p.line(h+l,f,h+l,f+u,m);i.insert(()=>y,":first-child"),i.insert(()=>v,":first-child");let x=i.insert(()=>g,":first-child"),{cssStyles:b}=e;x.attr("class","basic label-container").attr("style",Gn(b)),je(e,x)}else{let p=Ia(i,l,u,d);n&&p.attr("style",n),je(e,p)}return e.intersect=function(p){return Ye.polygon(e,d,p)},i}var TQ=M(()=>{"use strict";Ot();qt();Xt();jt();Ou();hr();o(wQ,"subroutine")});async function kQ(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await st(t,e,ot(e)),s=Math.max(a.width+(e.padding??0)*2,e?.width??0),l=Math.max(a.height+(e.padding??0)*2,e?.height??0),u=-s/2,h=-l/2,f=.2*l,d=.2*l,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{}),y=[{x:u-f/2,y:h},{x:u+s+f/2,y:h},{x:u+s+f/2,y:h+l},{x:u-f/2,y:h+l}],v=[{x:u+s-f/2,y:h+l},{x:u+s+f/2,y:h+l},{x:u+s+f/2,y:h+l-d}];e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let x=Wt(y),b=m.path(x,g),w=Wt(v),_=m.path(w,{...g,fillStyle:"solid"}),T=i.insert(()=>_,":first-child");return T.insert(()=>b,":first-child"),T.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",n),je(e,T),e.intersect=function(E){return Ye.polygon(e,y,E)},i}var EQ=M(()=>{"use strict";Ot();Xt();jt();qt();o(kQ,"taggedRect")});async function SQ(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await st(t,e,ot(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/4,f=.2*l,d=.2*u,p=u+h,{cssStyles:m}=e,g=Xe.svg(i),y=Ke(e,{});e.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let v=[{x:-l/2-l/2*.1,y:p/2},...Wo(-l/2-l/2*.1,p/2,l/2+l/2*.1,p/2,h,.8),{x:l/2+l/2*.1,y:-p/2},{x:-l/2-l/2*.1,y:-p/2}],x=-l/2+l/2*.1,b=-p/2-d*.4,w=[{x:x+l-f,y:(b+u)*1.4},{x:x+l,y:b+u-d},{x:x+l,y:(b+u)*.9},...Wo(x+l,(b+u)*1.3,x+l-f,(b+u)*1.5,-u*.03,.5)],_=Wt(v),T=g.path(_,y),E=Wt(w),L=g.path(E,{...y,fillStyle:"solid"}),S=i.insert(()=>L,":first-child");return S.insert(()=>T,":first-child"),S.attr("class","basic label-container"),m&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",m),n&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",n),S.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(a.x-(a.left??0))},${-u/2+(e.padding??0)-h/2-(a.y-(a.top??0))})`),je(e,S),e.intersect=function(A){return Ye.polygon(e,v,A)},i}var CQ=M(()=>{"use strict";Ot();qt();jt();Xt();o(SQ,"taggedWaveEdgedRectangle")});async function AQ(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await st(t,e,ot(e)),s=Math.max(a.width+e.padding,e?.width||0),l=Math.max(a.height+e.padding,e?.height||0),u=-s/2,h=-l/2,f=i.insert("rect",":first-child");return f.attr("class","text").attr("style",n).attr("rx",0).attr("ry",0).attr("x",u).attr("y",h).attr("width",s).attr("height",l),je(e,f),e.intersect=function(d){return Ye.rect(e,d)},i}var _Q=M(()=>{"use strict";Ot();qt();Xt();o(AQ,"text")});async function LQ(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s,halfPadding:l}=await st(t,e,ot(e)),u=e.look==="neo"?l*2:l,h=a.height+u,f=h/2,d=f/(2.5+h/50),p=a.width+d+u,{cssStyles:m}=e,g;if(e.look==="handDrawn"){let y=Xe.svg(i),v=J7e(0,0,p,h,d,f),x=eAe(0,0,p,h,d,f),b=y.path(v,Ke(e,{})),w=y.path(x,Ke(e,{fill:"none"}));g=i.insert(()=>w,":first-child"),g=i.insert(()=>b,":first-child"),g.attr("class","basic label-container"),m&&g.attr("style",m)}else{let y=Z7e(0,0,p,h,d,f);g=i.insert("path",":first-child").attr("d",y).attr("class","basic label-container").attr("style",Gn(m)).attr("style",n),g.attr("class","basic label-container"),m&&g.selectAll("path").attr("style",m),n&&g.selectAll("path").attr("style",n)}return g.attr("label-offset-x",d),g.attr("transform",`translate(${-p/2}, ${h/2} )`),s.attr("transform",`translate(${-(a.width/2)-d-(a.x-(a.left??0))}, ${-(a.height/2)-(a.y-(a.top??0))})`),je(e,g),e.intersect=function(y){let v=Ye.rect(e,y),x=v.y-(e.y??0);if(f!=0&&(Math.abs(x)<(e.height??0)/2||Math.abs(x)==(e.height??0)/2&&Math.abs(v.x-(e.x??0))>(e.width??0)/2-d)){let b=d*d*(1-x*x/(f*f));b!=0&&(b=Math.sqrt(b)),b=d-b,y.x-(e.x??0)>0&&(b=-b),v.x+=b}return v},i}var Z7e,J7e,eAe,DQ=M(()=>{"use strict";Ot();Xt();jt();qt();hr();Z7e=o((t,e,r,n,i,a)=>`M${t},${e} + a${i},${a} 0,0,1 0,${-n} + l${r},0 + a${i},${a} 0,0,1 0,${n} + M${r},${-n} + a${i},${a} 0,0,0 0,${n} + l${-r},0`,"createCylinderPathD"),J7e=o((t,e,r,n,i,a)=>[`M${t},${e}`,`M${t+r},${e}`,`a${i},${a} 0,0,0 0,${-n}`,`l${-r},0`,`a${i},${a} 0,0,0 0,${n}`,`l${r},0`].join(" "),"createOuterCylinderPathD"),eAe=o((t,e,r,n,i,a)=>[`M${t+r/2},${-n/2}`,`a${i},${a} 0,0,0 0,${n}`].join(" "),"createInnerCylinderPathD");o(LQ,"tiltedCylinder")});async function NQ(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await st(t,e,ot(e)),s=a.width+e.padding,l=a.height+e.padding,u=[{x:-3*l/6,y:0},{x:s+3*l/6,y:0},{x:s,y:-l},{x:0,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Xe.svg(i),p=Ke(e,{}),m=Wt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=Ia(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,je(e,h),e.intersect=function(d){return Ye.polygon(e,u,d)},i}var RQ=M(()=>{"use strict";Ot();qt();Xt();jt();Ou();o(NQ,"trapezoid")});async function MQ(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await st(t,e,ot(e)),s=60,l=20,u=Math.max(s,a.width+(e.padding??0)*2,e?.width??0),h=Math.max(l,a.height+(e.padding??0)*2,e?.height??0),{cssStyles:f}=e,d=Xe.svg(i),p=Ke(e,{});e.look!=="handDrawn"&&(p.roughness=0,p.fillStyle="solid");let m=[{x:-u/2*.8,y:-h/2},{x:u/2*.8,y:-h/2},{x:u/2,y:-h/2*.6},{x:u/2,y:h/2},{x:-u/2,y:h/2},{x:-u/2,y:-h/2*.6}],g=Wt(m),y=d.path(g,p),v=i.insert(()=>y,":first-child");return v.attr("class","basic label-container"),f&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",f),n&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",n),je(e,v),e.intersect=function(x){return Ye.polygon(e,m,x)},i}var IQ=M(()=>{"use strict";Ot();qt();Xt();jt();o(MQ,"trapezoidalPentagon")});async function OQ(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await st(t,e,ot(e)),l=xr(pe().flowchart?.htmlLabels),u=a.width+(e.padding??0),h=u+a.height,f=u+a.height,d=[{x:0,y:0},{x:f,y:0},{x:f/2,y:-h}],{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=Wt(d),v=m.path(y,g),x=i.insert(()=>v,":first-child").attr("transform",`translate(${-h/2}, ${h/2})`);return p&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",p),n&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",n),e.width=u,e.height=h,je(e,x),s.attr("transform",`translate(${-a.width/2-(a.x-(a.left??0))}, ${h/2-(a.height+(e.padding??0)/(l?2:1)-(a.y-(a.top??0)))})`),e.intersect=function(b){return Y.info("Triangle intersect",e,d,b),Ye.polygon(e,d,b)},i}var PQ=M(()=>{"use strict";ut();Ot();qt();Xt();jt();Ot();fr();Vt();o(OQ,"triangle")});async function BQ(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await st(t,e,ot(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/8,f=u+h,{cssStyles:d}=e,m=70-l,g=m>0?m/2:0,y=Xe.svg(i),v=Ke(e,{});e.look!=="handDrawn"&&(v.roughness=0,v.fillStyle="solid");let x=[{x:-l/2-g,y:f/2},...Wo(-l/2-g,f/2,l/2+g,f/2,h,.8),{x:l/2+g,y:-f/2},{x:-l/2-g,y:-f/2}],b=Wt(x),w=y.path(b,v),_=i.insert(()=>w,":first-child");return _.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&_.selectAll("path").attr("style",d),n&&e.look!=="handDrawn"&&_.selectAll("path").attr("style",n),_.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(a.x-(a.left??0))},${-u/2+(e.padding??0)-h-(a.y-(a.top??0))})`),je(e,_),e.intersect=function(T){return Ye.polygon(e,x,T)},i}var FQ=M(()=>{"use strict";Ot();qt();jt();Xt();o(BQ,"waveEdgedRectangle")});async function zQ(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await st(t,e,ot(e)),s=100,l=50,u=Math.max(a.width+(e.padding??0)*2,e?.width??0),h=Math.max(a.height+(e.padding??0)*2,e?.height??0),f=u/h,d=u,p=h;d>p*f?p=d/f:d=p*f,d=Math.max(d,s),p=Math.max(p,l);let m=Math.min(p*.2,p/4),g=p+m*2,{cssStyles:y}=e,v=Xe.svg(i),x=Ke(e,{});e.look!=="handDrawn"&&(x.roughness=0,x.fillStyle="solid");let b=[{x:-d/2,y:g/2},...Wo(-d/2,g/2,d/2,g/2,m,1),{x:d/2,y:-g/2},...Wo(d/2,-g/2,-d/2,-g/2,m,-1)],w=Wt(b),_=v.path(w,x),T=i.insert(()=>_,":first-child");return T.attr("class","basic label-container"),y&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",y),n&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",n),je(e,T),e.intersect=function(E){return Ye.polygon(e,b,E)},i}var GQ=M(()=>{"use strict";Ot();qt();Xt();jt();o(zQ,"waveRectangle")});async function $Q(t,e){let{labelStyles:r,nodeStyles:n}=Ze(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await st(t,e,ot(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=5,f=-l/2,d=-u/2,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{}),y=[{x:f-h,y:d-h},{x:f-h,y:d+u},{x:f+l,y:d+u},{x:f+l,y:d-h}],v=`M${f-h},${d-h} L${f+l},${d-h} L${f+l},${d+u} L${f-h},${d+u} L${f-h},${d-h} + M${f-h},${d} L${f+l},${d} + M${f},${d-h} L${f},${d+u}`;e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let x=m.path(v,g),b=i.insert(()=>x,":first-child");return b.attr("transform",`translate(${h/2}, ${h/2})`),b.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",n),s.attr("transform",`translate(${-(a.width/2)+h/2-(a.x-(a.left??0))}, ${-(a.height/2)+h/2-(a.y-(a.top??0))})`),je(e,b),e.intersect=function(w){return Ye.polygon(e,y,w)},i}var VQ=M(()=>{"use strict";Ot();Xt();jt();qt();o($Q,"windowPane")});async function UQ(t,e,r,n,i=r.class.padding??12){let a=n?0:3,s=t.insert("g").attr("class",ot(e)).attr("id",e.domId||e.id),l=null,u=null,h=null,f=null,d=0,p=0,m=0;if(l=s.insert("g").attr("class","annotation-group text"),e.annotations.length>0){let b=e.annotations[0];await q5(l,{text:`\xAB${b}\xBB`},0),d=l.node().getBBox().height}u=s.insert("g").attr("class","label-group text"),await q5(u,e,0,["font-weight: bolder"]);let g=u.node().getBBox();p=g.height,h=s.insert("g").attr("class","members-group text");let y=0;for(let b of e.members){let w=await q5(h,b,y,[b.parseClassifier()]);y+=w+a}m=h.node().getBBox().height,m<=0&&(m=i/2),f=s.insert("g").attr("class","methods-group text");let v=0;for(let b of e.methods){let w=await q5(f,b,v,[b.parseClassifier()]);v+=w+a}let x=s.node().getBBox();if(l!==null){let b=l.node().getBBox();l.attr("transform",`translate(${-b.width/2})`)}return u.attr("transform",`translate(${-g.width/2}, ${d})`),x=s.node().getBBox(),h.attr("transform",`translate(0, ${d+p+i*2})`),x=s.node().getBBox(),f.attr("transform",`translate(0, ${d+p+(m?m+i*4:i*2)})`),x=s.node().getBBox(),{shapeSvg:s,bbox:x}}async function q5(t,e,r,n=[]){let i=t.insert("g").attr("class","label").attr("style",n.join("; ")),a=Cr(),s="useHtmlLabels"in e?e.useHtmlLabels:xr(a.htmlLabels)??!0,l="";"text"in e?l=e.text:l=e.label,!s&&l.startsWith("\\")&&(l=l.substring(1)),yi(l)&&(s=!0);let u=await Li(i,s7(Ma(l)),{width:so(l,a)+50,classes:"markdown-node-label",useHtmlLabels:s},a),h,f=1;if(s){let d=u.children[0],p=Ve(u);f=d.innerHTML.split("
    ").length,d.innerHTML.includes("")&&(f+=d.innerHTML.split("").length-1);let m=d.getElementsByTagName("img");if(m){let g=l.replace(/]*>/g,"").trim()==="";await Promise.all([...m].map(y=>new Promise(v=>{function x(){if(y.style.display="flex",y.style.flexDirection="column",g){let b=a.fontSize?.toString()??window.getComputedStyle(document.body).fontSize,_=parseInt(b,10)*5+"px";y.style.minWidth=_,y.style.maxWidth=_}else y.style.width="100%";v(y)}o(x,"setupImage"),setTimeout(()=>{y.complete&&x()}),y.addEventListener("error",x),y.addEventListener("load",x)})))}h=d.getBoundingClientRect(),p.attr("width",h.width),p.attr("height",h.height)}else{n.includes("font-weight: bolder")&&Ve(u).selectAll("tspan").attr("font-weight",""),f=u.children.length;let d=u.children[0];(u.textContent===""||u.textContent.includes(">"))&&(d.textContent=l[0]+l.substring(1).replaceAll(">",">").replaceAll("<","<").trim(),l[1]===" "&&(d.textContent=d.textContent[0]+" "+d.textContent.substring(1))),d.textContent==="undefined"&&(d.textContent=""),h=u.getBBox()}return i.attr("transform","translate(0,"+(-h.height/(2*f)+r)+")"),h.height}var HQ=M(()=>{"use strict";pr();Za();Ot();hr();Vt();Pl();fr();o(UQ,"textHelper");o(q5,"addText")});async function WQ(t,e){let r=pe(),n=r.class.padding??12,i=n,a=e.useHtmlLabels??xr(r.htmlLabels)??!0,s=e;s.annotations=s.annotations??[],s.members=s.members??[],s.methods=s.methods??[];let{shapeSvg:l,bbox:u}=await UQ(t,e,r,a,i),{labelStyles:h,nodeStyles:f}=Ze(e);e.labelStyle=h,e.cssStyles=s.styles||"";let d=s.styles?.join(";")||f||"";e.cssStyles||(e.cssStyles=d.replaceAll("!important","").split(";"));let p=s.members.length===0&&s.methods.length===0&&!r.class?.hideEmptyMembersBox,m=Xe.svg(l),g=Ke(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=u.width,v=u.height;s.members.length===0&&s.methods.length===0?v+=i:s.members.length>0&&s.methods.length===0&&(v+=i*2);let x=-y/2,b=-v/2,w=m.rectangle(x-n,b-n-(p?n:s.members.length===0&&s.methods.length===0?-n/2:0),y+2*n,v+2*n+(p?n*2:s.members.length===0&&s.methods.length===0?-n:0),g),_=l.insert(()=>w,":first-child");_.attr("class","basic label-container");let T=_.node().getBBox();l.selectAll(".text").each((A,I,D)=>{let k=Ve(D[I]),R=k.attr("transform"),C=0;if(R){let F=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(R);F&&(C=parseFloat(F[2]))}let O=C+b+n-(p?n:s.members.length===0&&s.methods.length===0?-n/2:0);a||(O-=4);let N=x;(k.attr("class").includes("label-group")||k.attr("class").includes("annotation-group"))&&(N=-k.node()?.getBBox().width/2||0,l.selectAll("text").each(function(P,F,B){window.getComputedStyle(B[F]).textAnchor==="middle"&&(N=0)})),k.attr("transform",`translate(${N}, ${O})`)});let E=l.select(".annotation-group").node().getBBox().height-(p?n/2:0)||0,L=l.select(".label-group").node().getBBox().height-(p?n/2:0)||0,S=l.select(".members-group").node().getBBox().height-(p?n/2:0)||0;if(s.members.length>0||s.methods.length>0||p){let A=m.line(T.x,E+L+b+n,T.x+T.width,E+L+b+n,g);l.insert(()=>A).attr("class","divider").attr("style",d)}if(p||s.members.length>0||s.methods.length>0){let A=m.line(T.x,E+L+S+b+i*2+n,T.x+T.width,E+L+S+b+n+i*2,g);l.insert(()=>A).attr("class","divider").attr("style",d)}if(s.look!=="handDrawn"&&l.selectAll("path").attr("style",d),_.select(":nth-child(2)").attr("style",d),l.selectAll(".divider").select("path").attr("style",d),e.labelStyle?l.selectAll("span").attr("style",e.labelStyle):l.selectAll("span").attr("style",d),!a){let A=RegExp(/color\s*:\s*([^;]*)/),I=A.exec(d);if(I){let D=I[0].replace("color","fill");l.selectAll("tspan").attr("style",D)}else if(h){let D=A.exec(h);if(D){let k=D[0].replace("color","fill");l.selectAll("tspan").attr("style",k)}}}return je(e,_),e.intersect=function(A){return Ye.rect(e,A)},l}var YQ=M(()=>{"use strict";Ot();Vt();pr();jt();Xt();qt();HQ();fr();o(WQ,"classBox")});async function qQ(t,e,{config:r}){let{labelStyles:n,nodeStyles:i}=Ze(e);e.labelStyle=n||"";let a=10,s=e.width;e.width=(e.width??200)-10;let{shapeSvg:l,bbox:u,label:h}=await st(t,e,ot(e)),f=e.padding||10,d="",p;"ticket"in e&&e.ticket&&r?.kanban?.ticketBaseUrl&&(d=r?.kanban?.ticketBaseUrl.replace("#TICKET#",e.ticket),p=l.insert("svg:a",":first-child").attr("class","kanban-ticket-link").attr("xlink:href",d).attr("target","_blank"));let m={useHtmlLabels:e.useHtmlLabels,labelStyle:e.labelStyle||"",width:e.width,img:e.img,padding:e.padding||8,centerLabel:!1},g,y;p?{label:g,bbox:y}=await I5(p,"ticket"in e&&e.ticket||"",m):{label:g,bbox:y}=await I5(l,"ticket"in e&&e.ticket||"",m);let{label:v,bbox:x}=await I5(l,"assigned"in e&&e.assigned||"",m);e.width=s;let b=10,w=e?.width||0,_=Math.max(y.height,x.height)/2,T=Math.max(u.height+b*2,e?.height||0)+_,E=-w/2,L=-T/2;h.attr("transform","translate("+(f-w/2)+", "+(-_-u.height/2)+")"),g.attr("transform","translate("+(f-w/2)+", "+(-_+u.height/2)+")"),v.attr("transform","translate("+(f+w/2-x.width-2*a)+", "+(-_+u.height/2)+")");let S,{rx:A,ry:I}=e,{cssStyles:D}=e;if(e.look==="handDrawn"){let k=Xe.svg(l),R=Ke(e,{}),C=A||I?k.path(Pa(E,L,w,T,A||0),R):k.rectangle(E,L,w,T,R);S=l.insert(()=>C,":first-child"),S.attr("class","basic label-container").attr("style",D||null)}else{S=l.insert("rect",":first-child"),S.attr("class","basic label-container __APA__").attr("style",i).attr("rx",A??5).attr("ry",I??5).attr("x",E).attr("y",L).attr("width",w).attr("height",T);let k="priority"in e&&e.priority;if(k){let R=l.append("line"),C=E+2,O=L+Math.floor((A??0)/2),N=L+T-Math.floor((A??0)/2);R.attr("x1",C).attr("y1",O).attr("x2",C).attr("y2",N).attr("stroke-width","4").attr("stroke",tAe(k))}}return je(e,S),e.height=T,e.intersect=function(k){return Ye.rect(e,k)},l}var tAe,XQ=M(()=>{"use strict";Ot();qt();Xh();Xt();jt();tAe=o(t=>{switch(t){case"Very High":return"red";case"High":return"orange";case"Medium":return null;case"Low":return"blue";case"Very Low":return"lightblue"}},"colorFromPriority");o(qQ,"kanbanItem")});function jQ(t){return t in $9}var rAe,nAe,$9,V9=M(()=>{"use strict";zj();Vj();Hj();Yj();Xj();Kj();Zj();eK();rK();iK();sK();lK();uK();fK();pK();gK();vK();bK();TK();EK();CK();_K();DK();RK();IK();PK();FK();GK();VK();HK();YK();XK();KK();ZK();eQ();rQ();iQ();sQ();lQ();uQ();fQ();pQ();gQ();vQ();bQ();TQ();EQ();CQ();_Q();DQ();RQ();IQ();PQ();FQ();GQ();VQ();YQ();XQ();rAe=[{semanticName:"Process",name:"Rectangle",shortName:"rect",description:"Standard process shape",aliases:["proc","process","rectangle"],internalAliases:["squareRect"],handler:hQ},{semanticName:"Event",name:"Rounded Rectangle",shortName:"rounded",description:"Represents an event",aliases:["event"],internalAliases:["roundedRect"],handler:aQ},{semanticName:"Terminal Point",name:"Stadium",shortName:"stadium",description:"Terminal point",aliases:["terminal","pill"],handler:dQ},{semanticName:"Subprocess",name:"Framed Rectangle",shortName:"fr-rect",description:"Subprocess",aliases:["subprocess","subproc","framed-rectangle","subroutine"],handler:wQ},{semanticName:"Database",name:"Cylinder",shortName:"cyl",description:"Database storage",aliases:["db","database","cylinder"],handler:aK},{semanticName:"Start",name:"Circle",shortName:"circle",description:"Starting point",aliases:["circ"],handler:qj},{semanticName:"Decision",name:"Diamond",shortName:"diam",description:"Decision-making step",aliases:["decision","diamond","question"],handler:JK},{semanticName:"Prepare Conditional",name:"Hexagon",shortName:"hex",description:"Preparation or condition step",aliases:["hexagon","prepare"],handler:xK},{semanticName:"Data Input/Output",name:"Lean Right",shortName:"lean-r",description:"Represents input or output",aliases:["lean-right","in-out"],internalAliases:["lean_right"],handler:zK},{semanticName:"Data Input/Output",name:"Lean Left",shortName:"lean-l",description:"Represents output or input",aliases:["lean-left","out-in"],internalAliases:["lean_left"],handler:BK},{semanticName:"Priority Action",name:"Trapezoid Base Bottom",shortName:"trap-b",description:"Priority action",aliases:["priority","trapezoid-bottom","trapezoid"],handler:NQ},{semanticName:"Manual Operation",name:"Trapezoid Base Top",shortName:"trap-t",description:"Represents a manual task",aliases:["manual","trapezoid-top","inv-trapezoid"],internalAliases:["inv_trapezoid"],handler:MK},{semanticName:"Stop",name:"Double Circle",shortName:"dbl-circ",description:"Represents a stop point",aliases:["double-circle"],internalAliases:["doublecircle"],handler:cK},{semanticName:"Text Block",name:"Text Block",shortName:"text",description:"Text block",handler:AQ},{semanticName:"Card",name:"Notched Rectangle",shortName:"notch-rect",description:"Represents a card",aliases:["card","notched-rectangle"],handler:Uj},{semanticName:"Lined/Shaded Process",name:"Lined Rectangle",shortName:"lin-rect",description:"Lined process shape",aliases:["lined-rectangle","lined-process","lin-proc","shaded-process"],handler:oQ},{semanticName:"Start",name:"Small Circle",shortName:"sm-circ",description:"Small starting point",aliases:["start","small-circle"],internalAliases:["stateStart"],handler:xQ},{semanticName:"Stop",name:"Framed Circle",shortName:"fr-circ",description:"Stop point",aliases:["stop","framed-circle"],internalAliases:["stateEnd"],handler:yQ},{semanticName:"Fork/Join",name:"Filled Rectangle",shortName:"fork",description:"Fork or join in process flow",aliases:["join"],internalAliases:["forkJoin"],handler:mK},{semanticName:"Collate",name:"Hourglass",shortName:"hourglass",description:"Represents a collate operation",aliases:["hourglass","collate"],handler:wK},{semanticName:"Comment",name:"Curly Brace",shortName:"brace",description:"Adds a comment",aliases:["comment","brace-l"],handler:Qj},{semanticName:"Comment Right",name:"Curly Brace",shortName:"brace-r",description:"Adds a comment",handler:Jj},{semanticName:"Comment with braces on both sides",name:"Curly Braces",shortName:"braces",description:"Adds a comment",handler:tK},{semanticName:"Com Link",name:"Lightning Bolt",shortName:"bolt",description:"Communication link",aliases:["com-link","lightning-bolt"],handler:$K},{semanticName:"Document",name:"Document",shortName:"doc",description:"Represents a document",aliases:["doc","document"],handler:BQ},{semanticName:"Delay",name:"Half-Rounded Rectangle",shortName:"delay",description:"Represents a delay",aliases:["half-rounded-rectangle"],handler:yK},{semanticName:"Direct Access Storage",name:"Horizontal Cylinder",shortName:"h-cyl",description:"Direct access storage",aliases:["das","horizontal-cylinder"],handler:LQ},{semanticName:"Disk Storage",name:"Lined Cylinder",shortName:"lin-cyl",description:"Disk storage",aliases:["disk","lined-cylinder"],handler:UK},{semanticName:"Display",name:"Curved Trapezoid",shortName:"curv-trap",description:"Represents a display",aliases:["curved-trapezoid","display"],handler:nK},{semanticName:"Divided Process",name:"Divided Rectangle",shortName:"div-rect",description:"Divided process shape",aliases:["div-proc","divided-rectangle","divided-process"],handler:oK},{semanticName:"Extract",name:"Triangle",shortName:"tri",description:"Extraction process",aliases:["extract","triangle"],handler:OQ},{semanticName:"Internal Storage",name:"Window Pane",shortName:"win-pane",description:"Internal storage",aliases:["internal-storage","window-pane"],handler:$Q},{semanticName:"Junction",name:"Filled Circle",shortName:"f-circ",description:"Junction point",aliases:["junction","filled-circle"],handler:hK},{semanticName:"Loop Limit",name:"Trapezoidal Pentagon",shortName:"notch-pent",description:"Loop limit step",aliases:["loop-limit","notched-pentagon"],handler:MQ},{semanticName:"Manual File",name:"Flipped Triangle",shortName:"flip-tri",description:"Manual file operation",aliases:["manual-file","flipped-triangle"],handler:dK},{semanticName:"Manual Input",name:"Sloped Rectangle",shortName:"sl-rect",description:"Manual input step",aliases:["manual-input","sloped-rectangle"],handler:cQ},{semanticName:"Multi-Document",name:"Stacked Document",shortName:"docs",description:"Multiple documents",aliases:["documents","st-doc","stacked-document"],handler:jK},{semanticName:"Multi-Process",name:"Stacked Rectangle",shortName:"st-rect",description:"Multiple processes",aliases:["procs","processes","stacked-rectangle"],handler:qK},{semanticName:"Stored Data",name:"Bow Tie Rectangle",shortName:"bow-rect",description:"Stored data",aliases:["stored-data","bow-tie-rectangle"],handler:$j},{semanticName:"Summary",name:"Crossed Circle",shortName:"cross-circ",description:"Summary",aliases:["summary","crossed-circle"],handler:jj},{semanticName:"Tagged Document",name:"Tagged Document",shortName:"tag-doc",description:"Tagged document",aliases:["tag-doc","tagged-document"],handler:SQ},{semanticName:"Tagged Process",name:"Tagged Rectangle",shortName:"tag-rect",description:"Tagged process",aliases:["tagged-rectangle","tag-proc","tagged-process"],handler:kQ},{semanticName:"Paper Tape",name:"Flag",shortName:"flag",description:"Paper tape",aliases:["paper-tape"],handler:zQ},{semanticName:"Odd",name:"Odd",shortName:"odd",description:"Odd shape",internalAliases:["rect_left_inv_arrow"],handler:tQ},{semanticName:"Lined Document",name:"Lined Document",shortName:"lin-doc",description:"Lined document",aliases:["lined-document"],handler:WK}],nAe=o(()=>{let e=[...Object.entries({state:mQ,choice:Wj,note:QK,rectWithTitle:nQ,labelRect:OK,iconSquare:LK,iconCircle:SK,icon:kK,iconRounded:AK,imageSquare:NK,anchor:Fj,kanbanItem:qQ,classBox:WQ}),...rAe.flatMap(r=>[r.shortName,..."aliases"in r?r.aliases:[],..."internalAliases"in r?r.internalAliases:[]].map(i=>[i,r.handler]))];return Object.fromEntries(e)},"generateShapeMap"),$9=nAe();o(jQ,"isValidShape")});function hZ(t){return typeof t>"u"||t===null}function iAe(t){return typeof t=="object"&&t!==null}function aAe(t){return Array.isArray(t)?t:hZ(t)?[]:[t]}function sAe(t,e){var r,n,i,a;if(e)for(a=Object.keys(e),r=0,n=a.length;rl&&(a=" ... ",e=n-l+a.length),r-n>l&&(s=" ...",r=n+l-s.length),{str:a+t.slice(e,r).replace(/\t/g,"\u2192")+s,pos:n-e+a.length}}function H9(t,e){return Gi.repeat(" ",e-t.length)+t}function mAe(t,e){if(e=Object.create(e||null),!t.buffer)return null;e.maxLength||(e.maxLength=79),typeof e.indent!="number"&&(e.indent=1),typeof e.linesBefore!="number"&&(e.linesBefore=3),typeof e.linesAfter!="number"&&(e.linesAfter=2);for(var r=/\r?\n|\r|\0/g,n=[0],i=[],a,s=-1;a=r.exec(t.buffer);)i.push(a.index),n.push(a.index+a[0].length),t.position<=a.index&&s<0&&(s=n.length-2);s<0&&(s=n.length-1);var l="",u,h,f=Math.min(t.line+e.linesAfter,i.length).toString().length,d=e.maxLength-(e.indent+f+3);for(u=1;u<=e.linesBefore&&!(s-u<0);u++)h=U9(t.buffer,n[s-u],i[s-u],t.position-(n[s]-n[s-u]),d),l=Gi.repeat(" ",e.indent)+H9((t.line-u+1).toString(),f)+" | "+h.str+` +`+l;for(h=U9(t.buffer,n[s],i[s],t.position,d),l+=Gi.repeat(" ",e.indent)+H9((t.line+1).toString(),f)+" | "+h.str+` +`,l+=Gi.repeat("-",e.indent+f+3+h.pos)+`^ +`,u=1;u<=e.linesAfter&&!(s+u>=i.length);u++)h=U9(t.buffer,n[s+u],i[s+u],t.position-(n[s]-n[s+u]),d),l+=Gi.repeat(" ",e.indent)+H9((t.line+u+1).toString(),f)+" | "+h.str+` +`;return l.replace(/\n$/,"")}function xAe(t){var e={};return t!==null&&Object.keys(t).forEach(function(r){t[r].forEach(function(n){e[String(n)]=r})}),e}function bAe(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if(yAe.indexOf(r)===-1)throw new Ms('Unknown option "'+r+'" is met in definition of "'+t+'" YAML type.')}),this.options=e,this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(r){return r},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.representName=e.representName||null,this.defaultStyle=e.defaultStyle||null,this.multi=e.multi||!1,this.styleAliases=xAe(e.styleAliases||null),vAe.indexOf(this.kind)===-1)throw new Ms('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}function KQ(t,e){var r=[];return t[e].forEach(function(n){var i=r.length;r.forEach(function(a,s){a.tag===n.tag&&a.kind===n.kind&&a.multi===n.multi&&(i=s)}),r[i]=n}),r}function wAe(){var t={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},e,r;function n(i){i.multi?(t.multi[i.kind].push(i),t.multi.fallback.push(i)):t[i.kind][i.tag]=t.fallback[i.tag]=i}for(o(n,"collectType"),e=0,r=arguments.length;e=0&&(e=e.slice(1)),e===".inf"?r===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:r*parseFloat(e,10)}function YAe(t,e){var r;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(Gi.isNegativeZero(t))return"-0.0";return r=t.toString(10),WAe.test(r)?r.replace("e",".e"):r}function qAe(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||Gi.isNegativeZero(t))}function KAe(t){return t===null?!1:pZ.exec(t)!==null||mZ.exec(t)!==null}function QAe(t){var e,r,n,i,a,s,l,u=0,h=null,f,d,p;if(e=pZ.exec(t),e===null&&(e=mZ.exec(t)),e===null)throw new Error("Date resolve error");if(r=+e[1],n=+e[2]-1,i=+e[3],!e[4])return new Date(Date.UTC(r,n,i));if(a=+e[4],s=+e[5],l=+e[6],e[7]){for(u=e[7].slice(0,3);u.length<3;)u+="0";u=+u}return e[9]&&(f=+e[10],d=+(e[11]||0),h=(f*60+d)*6e4,e[9]==="-"&&(h=-h)),p=new Date(Date.UTC(r,n,i,a,s,l,u)),h&&p.setTime(p.getTime()-h),p}function ZAe(t){return t.toISOString()}function e8e(t){return t==="<<"||t===null}function r8e(t){if(t===null)return!1;var e,r,n=0,i=t.length,a=Q9;for(r=0;r64)){if(e<0)return!1;n+=6}return n%8===0}function n8e(t){var e,r,n=t.replace(/[\r\n=]/g,""),i=n.length,a=Q9,s=0,l=[];for(e=0;e>16&255),l.push(s>>8&255),l.push(s&255)),s=s<<6|a.indexOf(n.charAt(e));return r=i%4*6,r===0?(l.push(s>>16&255),l.push(s>>8&255),l.push(s&255)):r===18?(l.push(s>>10&255),l.push(s>>2&255)):r===12&&l.push(s>>4&255),new Uint8Array(l)}function i8e(t){var e="",r=0,n,i,a=t.length,s=Q9;for(n=0;n>18&63],e+=s[r>>12&63],e+=s[r>>6&63],e+=s[r&63]),r=(r<<8)+t[n];return i=a%3,i===0?(e+=s[r>>18&63],e+=s[r>>12&63],e+=s[r>>6&63],e+=s[r&63]):i===2?(e+=s[r>>10&63],e+=s[r>>4&63],e+=s[r<<2&63],e+=s[64]):i===1&&(e+=s[r>>2&63],e+=s[r<<4&63],e+=s[64],e+=s[64]),e}function a8e(t){return Object.prototype.toString.call(t)==="[object Uint8Array]"}function c8e(t){if(t===null)return!0;var e=[],r,n,i,a,s,l=t;for(r=0,n=l.length;r>10)+55296,(t-65536&1023)+56320)}function _8e(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||gZ,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function kZ(t,e){var r={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return r.snippet=gAe(r),new Ms(e,r)}function Qt(t,e){throw kZ(t,e)}function K5(t,e){t.onWarning&&t.onWarning.call(null,kZ(t,e))}function jh(t,e,r,n){var i,a,s,l;if(e1&&(t.result+=Gi.repeat(` +`,e-1))}function L8e(t,e,r){var n,i,a,s,l,u,h,f,d=t.kind,p=t.result,m;if(m=t.input.charCodeAt(t.position),Is(m)||wm(m)||m===35||m===38||m===42||m===33||m===124||m===62||m===39||m===34||m===37||m===64||m===96||(m===63||m===45)&&(i=t.input.charCodeAt(t.position+1),Is(i)||r&&wm(i)))return!1;for(t.kind="scalar",t.result="",a=s=t.position,l=!1;m!==0;){if(m===58){if(i=t.input.charCodeAt(t.position+1),Is(i)||r&&wm(i))break}else if(m===35){if(n=t.input.charCodeAt(t.position-1),Is(n))break}else{if(t.position===t.lineStart&&J5(t)||r&&wm(m))break;if(Ac(m))if(u=t.line,h=t.lineStart,f=t.lineIndent,Di(t,!1,-1),t.lineIndent>=e){l=!0,m=t.input.charCodeAt(t.position);continue}else{t.position=s,t.line=u,t.lineStart=h,t.lineIndent=f;break}}l&&(jh(t,a,s,!1),J9(t,t.line-u),a=s=t.position,l=!1),Fd(m)||(s=t.position+1),m=t.input.charCodeAt(++t.position)}return jh(t,a,s,!1),t.result?!0:(t.kind=d,t.result=p,!1)}function D8e(t,e){var r,n,i;if(r=t.input.charCodeAt(t.position),r!==39)return!1;for(t.kind="scalar",t.result="",t.position++,n=i=t.position;(r=t.input.charCodeAt(t.position))!==0;)if(r===39)if(jh(t,n,t.position,!0),r=t.input.charCodeAt(++t.position),r===39)n=t.position,t.position++,i=t.position;else return!0;else Ac(r)?(jh(t,n,i,!0),J9(t,Di(t,!1,e)),n=i=t.position):t.position===t.lineStart&&J5(t)?Qt(t,"unexpected end of the document within a single quoted scalar"):(t.position++,i=t.position);Qt(t,"unexpected end of the stream within a single quoted scalar")}function N8e(t,e){var r,n,i,a,s,l;if(l=t.input.charCodeAt(t.position),l!==34)return!1;for(t.kind="scalar",t.result="",t.position++,r=n=t.position;(l=t.input.charCodeAt(t.position))!==0;){if(l===34)return jh(t,r,t.position,!0),t.position++,!0;if(l===92){if(jh(t,r,t.position,!0),l=t.input.charCodeAt(++t.position),Ac(l))Di(t,!1,e);else if(l<256&&wZ[l])t.result+=TZ[l],t.position++;else if((s=S8e(l))>0){for(i=s,a=0;i>0;i--)l=t.input.charCodeAt(++t.position),(s=E8e(l))>=0?a=(a<<4)+s:Qt(t,"expected hexadecimal character");t.result+=A8e(a),t.position++}else Qt(t,"unknown escape sequence");r=n=t.position}else Ac(l)?(jh(t,r,n,!0),J9(t,Di(t,!1,e)),r=n=t.position):t.position===t.lineStart&&J5(t)?Qt(t,"unexpected end of the document within a double quoted scalar"):(t.position++,n=t.position)}Qt(t,"unexpected end of the stream within a double quoted scalar")}function R8e(t,e){var r=!0,n,i,a,s=t.tag,l,u=t.anchor,h,f,d,p,m,g=Object.create(null),y,v,x,b;if(b=t.input.charCodeAt(t.position),b===91)f=93,m=!1,l=[];else if(b===123)f=125,m=!0,l={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=l),b=t.input.charCodeAt(++t.position);b!==0;){if(Di(t,!0,e),b=t.input.charCodeAt(t.position),b===f)return t.position++,t.tag=s,t.anchor=u,t.kind=m?"mapping":"sequence",t.result=l,!0;r?b===44&&Qt(t,"expected the node content, but found ','"):Qt(t,"missed comma between flow collection entries"),v=y=x=null,d=p=!1,b===63&&(h=t.input.charCodeAt(t.position+1),Is(h)&&(d=p=!0,t.position++,Di(t,!0,e))),n=t.line,i=t.lineStart,a=t.position,km(t,e,X5,!1,!0),v=t.tag,y=t.result,Di(t,!0,e),b=t.input.charCodeAt(t.position),(p||t.line===n)&&b===58&&(d=!0,b=t.input.charCodeAt(++t.position),Di(t,!0,e),km(t,e,X5,!1,!0),x=t.result),m?Tm(t,l,g,v,y,x,n,i,a):d?l.push(Tm(t,null,g,v,y,x,n,i,a)):l.push(y),Di(t,!0,e),b=t.input.charCodeAt(t.position),b===44?(r=!0,b=t.input.charCodeAt(++t.position)):r=!1}Qt(t,"unexpected end of the stream within a flow collection")}function M8e(t,e){var r,n,i=W9,a=!1,s=!1,l=e,u=0,h=!1,f,d;if(d=t.input.charCodeAt(t.position),d===124)n=!1;else if(d===62)n=!0;else return!1;for(t.kind="scalar",t.result="";d!==0;)if(d=t.input.charCodeAt(++t.position),d===43||d===45)W9===i?i=d===43?QQ:b8e:Qt(t,"repeat of a chomping mode identifier");else if((f=C8e(d))>=0)f===0?Qt(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):s?Qt(t,"repeat of an indentation width identifier"):(l=e+f-1,s=!0);else break;if(Fd(d)){do d=t.input.charCodeAt(++t.position);while(Fd(d));if(d===35)do d=t.input.charCodeAt(++t.position);while(!Ac(d)&&d!==0)}for(;d!==0;){for(Z9(t),t.lineIndent=0,d=t.input.charCodeAt(t.position);(!s||t.lineIndentl&&(l=t.lineIndent),Ac(d)){u++;continue}if(t.lineIndente)&&u!==0)Qt(t,"bad indentation of a sequence entry");else if(t.lineIndente)&&(v&&(s=t.line,l=t.lineStart,u=t.position),km(t,e,j5,!0,i)&&(v?g=t.result:y=t.result),v||(Tm(t,d,p,m,g,y,s,l,u),m=g=y=null),Di(t,!0,-1),b=t.input.charCodeAt(t.position)),(t.line===a||t.lineIndent>e)&&b!==0)Qt(t,"bad indentation of a mapping entry");else if(t.lineIndente?u=1:t.lineIndent===e?u=0:t.lineIndente?u=1:t.lineIndent===e?u=0:t.lineIndent tag; it should be "scalar", not "'+t.kind+'"'),d=0,p=t.implicitTypes.length;d"),t.result!==null&&g.kind!==t.kind&&Qt(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+g.kind+'", not "'+t.kind+'"'),g.resolve(t.result,t.tag)?(t.result=g.construct(t.result,t.tag),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):Qt(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||f}function F8e(t){var e=t.position,r,n,i,a=!1,s;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);(s=t.input.charCodeAt(t.position))!==0&&(Di(t,!0,-1),s=t.input.charCodeAt(t.position),!(t.lineIndent>0||s!==37));){for(a=!0,s=t.input.charCodeAt(++t.position),r=t.position;s!==0&&!Is(s);)s=t.input.charCodeAt(++t.position);for(n=t.input.slice(r,t.position),i=[],n.length<1&&Qt(t,"directive name must not be less than one character in length");s!==0;){for(;Fd(s);)s=t.input.charCodeAt(++t.position);if(s===35){do s=t.input.charCodeAt(++t.position);while(s!==0&&!Ac(s));break}if(Ac(s))break;for(r=t.position;s!==0&&!Is(s);)s=t.input.charCodeAt(++t.position);i.push(t.input.slice(r,t.position))}s!==0&&Z9(t),Kh.call(eZ,n)?eZ[n](t,n,i):K5(t,'unknown document directive "'+n+'"')}if(Di(t,!0,-1),t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45?(t.position+=3,Di(t,!0,-1)):a&&Qt(t,"directives end mark is expected"),km(t,t.lineIndent-1,j5,!1,!0),Di(t,!0,-1),t.checkLineBreaks&&T8e.test(t.input.slice(e,t.position))&&K5(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&J5(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,Di(t,!0,-1));return}if(t.position"u"&&(r=e,e=null);var n=EZ(t,r);if(typeof e!="function")return n;for(var i=0,a=n.length;i=55296&&r<=56319&&e+1=56320&&n<=57343)?(r-55296)*1024+n-56320+65536:r}function MZ(t){var e=/^\n* /;return e.test(t)}function p_e(t,e,r,n,i,a,s,l){var u,h=0,f=null,d=!1,p=!1,m=n!==-1,g=-1,y=f_e(Iv(t,0))&&d_e(Iv(t,t.length-1));if(e||s)for(u=0;u=65536?u+=2:u++){if(h=Iv(t,u),!Fv(h))return bm;y=y&&aZ(h,f,l),f=h}else{for(u=0;u=65536?u+=2:u++){if(h=Iv(t,u),h===Pv)d=!0,m&&(p=p||u-g-1>n&&t[g+1]!==" ",g=u);else if(!Fv(h))return bm;y=y&&aZ(h,f,l),f=h}p=p||m&&u-g-1>n&&t[g+1]!==" "}return!d&&!p?y&&!s&&!i(t)?IZ:a===Bv?bm:j9:r>9&&MZ(t)?bm:s?a===Bv?bm:j9:p?PZ:OZ}function m_e(t,e,r,n,i){t.dump=function(){if(e.length===0)return t.quotingType===Bv?'""':"''";if(!t.noCompatMode&&(a_e.indexOf(e)!==-1||s_e.test(e)))return t.quotingType===Bv?'"'+e+'"':"'"+e+"'";var a=t.indent*Math.max(1,r),s=t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-a),l=n||t.flowLevel>-1&&r>=t.flowLevel;function u(h){return h_e(t,h)}switch(o(u,"testAmbiguity"),p_e(e,l,t.indent,s,u,t.quotingType,t.forceQuotes&&!n,i)){case IZ:return e;case j9:return"'"+e.replace(/'/g,"''")+"'";case OZ:return"|"+sZ(e,t.indent)+oZ(nZ(e,a));case PZ:return">"+sZ(e,t.indent)+oZ(nZ(g_e(e,s),a));case bm:return'"'+y_e(e)+'"';default:throw new Ms("impossible error: invalid scalar style")}}()}function sZ(t,e){var r=MZ(t)?String(e):"",n=t[t.length-1]===` +`,i=n&&(t[t.length-2]===` +`||t===` +`),a=i?"+":n?"":"-";return r+a+` +`}function oZ(t){return t[t.length-1]===` +`?t.slice(0,-1):t}function g_e(t,e){for(var r=/(\n+)([^\n]*)/g,n=function(){var h=t.indexOf(` +`);return h=h!==-1?h:t.length,r.lastIndex=h,lZ(t.slice(0,h),e)}(),i=t[0]===` +`||t[0]===" ",a,s;s=r.exec(t);){var l=s[1],u=s[2];a=u[0]===" ",n+=l+(!i&&!a&&u!==""?` +`:"")+lZ(u,e),i=a}return n}function lZ(t,e){if(t===""||t[0]===" ")return t;for(var r=/ [^ ]/g,n,i=0,a,s=0,l=0,u="";n=r.exec(t);)l=n.index,l-i>e&&(a=s>i?s:l,u+=` +`+t.slice(i,a),i=a+1),s=l;return u+=` +`,t.length-i>e&&s>i?u+=t.slice(i,s)+` +`+t.slice(s+1):u+=t.slice(i),u.slice(1)}function y_e(t){for(var e="",r=0,n,i=0;i=65536?i+=2:i++)r=Iv(t,i),n=Fa[r],!n&&Fv(r)?(e+=t[i],r>=65536&&(e+=t[i+1])):e+=n||l_e(r);return e}function v_e(t,e,r){var n="",i=t.tag,a,s,l;for(a=0,s=r.length;a"u"&&Pu(t,e,null,!1,!1))&&(n!==""&&(n+=","+(t.condenseFlow?"":" ")),n+=t.dump);t.tag=i,t.dump="["+n+"]"}function cZ(t,e,r,n){var i="",a=t.tag,s,l,u;for(s=0,l=r.length;s"u"&&Pu(t,e+1,null,!0,!0,!1,!0))&&((!n||i!=="")&&(i+=X9(t,e)),t.dump&&Pv===t.dump.charCodeAt(0)?i+="-":i+="- ",i+=t.dump);t.tag=a,t.dump=i||"[]"}function x_e(t,e,r){var n="",i=t.tag,a=Object.keys(r),s,l,u,h,f;for(s=0,l=a.length;s1024&&(f+="? "),f+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),Pu(t,e,h,!1,!1)&&(f+=t.dump,n+=f));t.tag=i,t.dump="{"+n+"}"}function b_e(t,e,r,n){var i="",a=t.tag,s=Object.keys(r),l,u,h,f,d,p;if(t.sortKeys===!0)s.sort();else if(typeof t.sortKeys=="function")s.sort(t.sortKeys);else if(t.sortKeys)throw new Ms("sortKeys must be a boolean or a function");for(l=0,u=s.length;l1024,d&&(t.dump&&Pv===t.dump.charCodeAt(0)?p+="?":p+="? "),p+=t.dump,d&&(p+=X9(t,e)),Pu(t,e+1,f,!0,d)&&(t.dump&&Pv===t.dump.charCodeAt(0)?p+=":":p+=": ",p+=t.dump,i+=p));t.tag=a,t.dump=i||"{}"}function uZ(t,e,r){var n,i,a,s,l,u;for(i=r?t.explicitTypes:t.implicitTypes,a=0,s=i.length;a tag resolver accepts not "'+u+'" style');t.dump=n}return!0}return!1}function Pu(t,e,r,n,i,a,s){t.tag=null,t.dump=r,uZ(t,r,!1)||uZ(t,r,!0);var l=CZ.call(t.dump),u=n,h;n&&(n=t.flowLevel<0||t.flowLevel>e);var f=l==="[object Object]"||l==="[object Array]",d,p;if(f&&(d=t.duplicates.indexOf(r),p=d!==-1),(t.tag!==null&&t.tag!=="?"||p||t.indent!==2&&e>0)&&(i=!1),p&&t.usedDuplicates[d])t.dump="*ref_"+d;else{if(f&&p&&!t.usedDuplicates[d]&&(t.usedDuplicates[d]=!0),l==="[object Object]")n&&Object.keys(t.dump).length!==0?(b_e(t,e,t.dump,i),p&&(t.dump="&ref_"+d+t.dump)):(x_e(t,e,t.dump),p&&(t.dump="&ref_"+d+" "+t.dump));else if(l==="[object Array]")n&&t.dump.length!==0?(t.noArrayIndent&&!s&&e>0?cZ(t,e-1,t.dump,i):cZ(t,e,t.dump,i),p&&(t.dump="&ref_"+d+t.dump)):(v_e(t,e,t.dump),p&&(t.dump="&ref_"+d+" "+t.dump));else if(l==="[object String]")t.tag!=="?"&&m_e(t,t.dump,e,a,u);else{if(l==="[object Undefined]")return!1;if(t.skipInvalid)return!1;throw new Ms("unacceptable kind of an object to dump "+l)}t.tag!==null&&t.tag!=="?"&&(h=encodeURI(t.tag[0]==="!"?t.tag.slice(1):t.tag).replace(/!/g,"%21"),t.tag[0]==="!"?h="!"+h:h.slice(0,18)==="tag:yaml.org,2002:"?h="!!"+h.slice(18):h="!<"+h+">",t.dump=h+" "+t.dump)}return!0}function w_e(t,e){var r=[],n=[],i,a;for(K9(t,r,n),i=0,a=n.length;i{"use strict";o(hZ,"isNothing");o(iAe,"isObject");o(aAe,"toArray");o(sAe,"extend");o(oAe,"repeat");o(lAe,"isNegativeZero");cAe=hZ,uAe=iAe,hAe=aAe,fAe=oAe,dAe=lAe,pAe=sAe,Gi={isNothing:cAe,isObject:uAe,toArray:hAe,repeat:fAe,isNegativeZero:dAe,extend:pAe};o(fZ,"formatError");o(Ov,"YAMLException$1");Ov.prototype=Object.create(Error.prototype);Ov.prototype.constructor=Ov;Ov.prototype.toString=o(function(e){return this.name+": "+fZ(this,e)},"toString");Ms=Ov;o(U9,"getLine");o(H9,"padStart");o(mAe,"makeSnippet");gAe=mAe,yAe=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],vAe=["scalar","sequence","mapping"];o(xAe,"compileStyleAliases");o(bAe,"Type$1");Ba=bAe;o(KQ,"compileList");o(wAe,"compileMap");o(Y9,"Schema$1");Y9.prototype.extend=o(function(e){var r=[],n=[];if(e instanceof Ba)n.push(e);else if(Array.isArray(e))n=n.concat(e);else if(e&&(Array.isArray(e.implicit)||Array.isArray(e.explicit)))e.implicit&&(r=r.concat(e.implicit)),e.explicit&&(n=n.concat(e.explicit));else throw new Ms("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");r.forEach(function(a){if(!(a instanceof Ba))throw new Ms("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(a.loadKind&&a.loadKind!=="scalar")throw new Ms("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(a.multi)throw new Ms("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),n.forEach(function(a){if(!(a instanceof Ba))throw new Ms("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var i=Object.create(Y9.prototype);return i.implicit=(this.implicit||[]).concat(r),i.explicit=(this.explicit||[]).concat(n),i.compiledImplicit=KQ(i,"implicit"),i.compiledExplicit=KQ(i,"explicit"),i.compiledTypeMap=wAe(i.compiledImplicit,i.compiledExplicit),i},"extend");TAe=Y9,kAe=new Ba("tag:yaml.org,2002:str",{kind:"scalar",construct:o(function(t){return t!==null?t:""},"construct")}),EAe=new Ba("tag:yaml.org,2002:seq",{kind:"sequence",construct:o(function(t){return t!==null?t:[]},"construct")}),SAe=new Ba("tag:yaml.org,2002:map",{kind:"mapping",construct:o(function(t){return t!==null?t:{}},"construct")}),CAe=new TAe({explicit:[kAe,EAe,SAe]});o(AAe,"resolveYamlNull");o(_Ae,"constructYamlNull");o(LAe,"isNull");DAe=new Ba("tag:yaml.org,2002:null",{kind:"scalar",resolve:AAe,construct:_Ae,predicate:LAe,represent:{canonical:o(function(){return"~"},"canonical"),lowercase:o(function(){return"null"},"lowercase"),uppercase:o(function(){return"NULL"},"uppercase"),camelcase:o(function(){return"Null"},"camelcase"),empty:o(function(){return""},"empty")},defaultStyle:"lowercase"});o(NAe,"resolveYamlBoolean");o(RAe,"constructYamlBoolean");o(MAe,"isBoolean");IAe=new Ba("tag:yaml.org,2002:bool",{kind:"scalar",resolve:NAe,construct:RAe,predicate:MAe,represent:{lowercase:o(function(t){return t?"true":"false"},"lowercase"),uppercase:o(function(t){return t?"TRUE":"FALSE"},"uppercase"),camelcase:o(function(t){return t?"True":"False"},"camelcase")},defaultStyle:"lowercase"});o(OAe,"isHexCode");o(PAe,"isOctCode");o(BAe,"isDecCode");o(FAe,"resolveYamlInteger");o(zAe,"constructYamlInteger");o(GAe,"isInteger");$Ae=new Ba("tag:yaml.org,2002:int",{kind:"scalar",resolve:FAe,construct:zAe,predicate:GAe,represent:{binary:o(function(t){return t>=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},"binary"),octal:o(function(t){return t>=0?"0o"+t.toString(8):"-0o"+t.toString(8).slice(1)},"octal"),decimal:o(function(t){return t.toString(10)},"decimal"),hexadecimal:o(function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)},"hexadecimal")},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),VAe=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");o(UAe,"resolveYamlFloat");o(HAe,"constructYamlFloat");WAe=/^[-+]?[0-9]+e/;o(YAe,"representYamlFloat");o(qAe,"isFloat");XAe=new Ba("tag:yaml.org,2002:float",{kind:"scalar",resolve:UAe,construct:HAe,predicate:qAe,represent:YAe,defaultStyle:"lowercase"}),dZ=CAe.extend({implicit:[DAe,IAe,$Ae,XAe]}),jAe=dZ,pZ=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),mZ=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");o(KAe,"resolveYamlTimestamp");o(QAe,"constructYamlTimestamp");o(ZAe,"representYamlTimestamp");JAe=new Ba("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:KAe,construct:QAe,instanceOf:Date,represent:ZAe});o(e8e,"resolveYamlMerge");t8e=new Ba("tag:yaml.org,2002:merge",{kind:"scalar",resolve:e8e}),Q9=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= +\r`;o(r8e,"resolveYamlBinary");o(n8e,"constructYamlBinary");o(i8e,"representYamlBinary");o(a8e,"isBinary");s8e=new Ba("tag:yaml.org,2002:binary",{kind:"scalar",resolve:r8e,construct:n8e,predicate:a8e,represent:i8e}),o8e=Object.prototype.hasOwnProperty,l8e=Object.prototype.toString;o(c8e,"resolveYamlOmap");o(u8e,"constructYamlOmap");h8e=new Ba("tag:yaml.org,2002:omap",{kind:"sequence",resolve:c8e,construct:u8e}),f8e=Object.prototype.toString;o(d8e,"resolveYamlPairs");o(p8e,"constructYamlPairs");m8e=new Ba("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:d8e,construct:p8e}),g8e=Object.prototype.hasOwnProperty;o(y8e,"resolveYamlSet");o(v8e,"constructYamlSet");x8e=new Ba("tag:yaml.org,2002:set",{kind:"mapping",resolve:y8e,construct:v8e}),gZ=jAe.extend({implicit:[JAe,t8e],explicit:[s8e,h8e,m8e,x8e]}),Kh=Object.prototype.hasOwnProperty,X5=1,yZ=2,vZ=3,j5=4,W9=1,b8e=2,QQ=3,w8e=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,T8e=/[\x85\u2028\u2029]/,k8e=/[,\[\]\{\}]/,xZ=/^(?:!|!!|![a-z\-]+!)$/i,bZ=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;o(ZQ,"_class");o(Ac,"is_EOL");o(Fd,"is_WHITE_SPACE");o(Is,"is_WS_OR_EOL");o(wm,"is_FLOW_INDICATOR");o(E8e,"fromHexCode");o(S8e,"escapedHexLen");o(C8e,"fromDecimalCode");o(JQ,"simpleEscapeSequence");o(A8e,"charFromCodepoint");wZ=new Array(256),TZ=new Array(256);for(Bd=0;Bd<256;Bd++)wZ[Bd]=JQ(Bd)?1:0,TZ[Bd]=JQ(Bd);o(_8e,"State$1");o(kZ,"generateError");o(Qt,"throwError");o(K5,"throwWarning");eZ={YAML:o(function(e,r,n){var i,a,s;e.version!==null&&Qt(e,"duplication of %YAML directive"),n.length!==1&&Qt(e,"YAML directive accepts exactly one argument"),i=/^([0-9]+)\.([0-9]+)$/.exec(n[0]),i===null&&Qt(e,"ill-formed argument of the YAML directive"),a=parseInt(i[1],10),s=parseInt(i[2],10),a!==1&&Qt(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=s<2,s!==1&&s!==2&&K5(e,"unsupported YAML version of the document")},"handleYamlDirective"),TAG:o(function(e,r,n){var i,a;n.length!==2&&Qt(e,"TAG directive accepts exactly two arguments"),i=n[0],a=n[1],xZ.test(i)||Qt(e,"ill-formed tag handle (first argument) of the TAG directive"),Kh.call(e.tagMap,i)&&Qt(e,'there is a previously declared suffix for "'+i+'" tag handle'),bZ.test(a)||Qt(e,"ill-formed tag prefix (second argument) of the TAG directive");try{a=decodeURIComponent(a)}catch{Qt(e,"tag prefix is malformed: "+a)}e.tagMap[i]=a},"handleTagDirective")};o(jh,"captureSegment");o(tZ,"mergeMappings");o(Tm,"storeMappingPair");o(Z9,"readLineBreak");o(Di,"skipSeparationSpace");o(J5,"testDocumentSeparator");o(J9,"writeFoldedLines");o(L8e,"readPlainScalar");o(D8e,"readSingleQuotedScalar");o(N8e,"readDoubleQuotedScalar");o(R8e,"readFlowCollection");o(M8e,"readBlockScalar");o(rZ,"readBlockSequence");o(I8e,"readBlockMapping");o(O8e,"readTagProperty");o(P8e,"readAnchorProperty");o(B8e,"readAlias");o(km,"composeNode");o(F8e,"readDocument");o(EZ,"loadDocuments");o(z8e,"loadAll$1");o(G8e,"load$1");$8e=z8e,V8e=G8e,SZ={loadAll:$8e,load:V8e},CZ=Object.prototype.toString,AZ=Object.prototype.hasOwnProperty,eL=65279,U8e=9,Pv=10,H8e=13,W8e=32,Y8e=33,q8e=34,q9=35,X8e=37,j8e=38,K8e=39,Q8e=42,_Z=44,Z8e=45,Q5=58,J8e=61,e_e=62,t_e=63,r_e=64,LZ=91,DZ=93,n_e=96,NZ=123,i_e=124,RZ=125,Fa={};Fa[0]="\\0";Fa[7]="\\a";Fa[8]="\\b";Fa[9]="\\t";Fa[10]="\\n";Fa[11]="\\v";Fa[12]="\\f";Fa[13]="\\r";Fa[27]="\\e";Fa[34]='\\"';Fa[92]="\\\\";Fa[133]="\\N";Fa[160]="\\_";Fa[8232]="\\L";Fa[8233]="\\P";a_e=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],s_e=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;o(o_e,"compileStyleMap");o(l_e,"encodeHex");c_e=1,Bv=2;o(u_e,"State");o(nZ,"indentString");o(X9,"generateNextLine");o(h_e,"testImplicitResolving");o(Z5,"isWhitespace");o(Fv,"isPrintable");o(iZ,"isNsCharOrWhitespace");o(aZ,"isPlainSafe");o(f_e,"isPlainSafeFirst");o(d_e,"isPlainSafeLast");o(Iv,"codePointAt");o(MZ,"needIndentIndicator");IZ=1,j9=2,OZ=3,PZ=4,bm=5;o(p_e,"chooseScalarStyle");o(m_e,"writeScalar");o(sZ,"blockHeader");o(oZ,"dropEndingNewline");o(g_e,"foldString");o(lZ,"foldLine");o(y_e,"escapeString");o(v_e,"writeFlowSequence");o(cZ,"writeBlockSequence");o(x_e,"writeFlowMapping");o(b_e,"writeBlockMapping");o(uZ,"detectType");o(Pu,"writeNode");o(w_e,"getDuplicateReferences");o(K9,"inspectNode");o(T_e,"dump$1");k_e=T_e,E_e={dump:k_e};o(tL,"renamed");Em=dZ,Sm=SZ.load,PDt=SZ.loadAll,BDt=E_e.dump,FDt=tL("safeLoad","load"),zDt=tL("safeLoadAll","loadAll"),GDt=tL("safeDump","dump")});function iL(t){let e=[];for(let r of t){let n=Gv.get(r);n?.styles&&(e=[...e,...n.styles??[]].map(i=>i.trim())),n?.textStyles&&(e=[...e,...n.textStyles??[]].map(i=>i.trim()))}return e}var S_e,BZ,Cm,Qh,Os,Gv,Bu,aL,sL,tw,nL,Yo,rw,nw,iw,aw,C_e,A_e,__e,L_e,D_e,N_e,R_e,oL,M_e,I_e,O_e,FZ,P_e,B_e,lL,zZ,GZ,F_e,$Z,z_e,G_e,$_e,V_e,U_e,zv,VZ,UZ,H_e,W_e,HZ,Y_e,q_e,X_e,j_e,K_e,WZ,YZ,Q_e,Z_e,J_e,e9e,t9e,r9e,sw,cL=M(()=>{"use strict";pr();hr();Vt();fr();V9();ut();ew();Ai();S_e="flowchart-",BZ=0,Cm=pe(),Qh=new Map,Os=[],Gv=new Map,Bu=[],aL=new Map,sL=new Map,tw=0,nL=!0,nw=[],iw=o(t=>qe.sanitizeText(t,Cm),"sanitizeText"),aw=o(function(t){for(let e of Qh.values())if(e.id===t)return e.domId;return t},"lookUpDomId"),C_e=o(function(t,e,r,n,i,a,s={},l){if(!t||t.trim().length===0)return;let u,h=Qh.get(t);if(h===void 0&&(h={id:t,labelType:"text",domId:S_e+t+"-"+BZ,styles:[],classes:[]},Qh.set(t,h)),BZ++,e!==void 0?(Cm=pe(),u=iw(e.text.trim()),h.labelType=e.type,u.startsWith('"')&&u.endsWith('"')&&(u=u.substring(1,u.length-1)),h.text=u):h.text===void 0&&(h.text=t),r!==void 0&&(h.type=r),n?.forEach(function(f){h.styles.push(f)}),i?.forEach(function(f){h.classes.push(f)}),a!==void 0&&(h.dir=a),h.props===void 0?h.props=s:s!==void 0&&Object.assign(h.props,s),l!==void 0){let f;l.includes(` +`)?f=l+` +`:f=`{ +`+l+` +}`;let d=Sm(f,{schema:Em});if(d.shape){if(d.shape!==d.shape.toLowerCase()||d.shape.includes("_"))throw new Error(`No such shape: ${d.shape}. Shape names should be lowercase.`);if(!jQ(d.shape))throw new Error(`No such shape: ${d.shape}.`);h.type=d?.shape}d?.label&&(h.text=d?.label),d?.icon&&(h.icon=d?.icon,!d.label?.trim()&&h.text===t&&(h.text="")),d?.form&&(h.form=d?.form),d?.pos&&(h.pos=d?.pos),d?.img&&(h.img=d?.img,!d.label?.trim()&&h.text===t&&(h.text="")),d?.constraint&&(h.constraint=d.constraint),d.w&&(h.assetWidth=Number(d.w)),d.h&&(h.assetHeight=Number(d.h))}},"addVertex"),A_e=o(function(t,e,r){let a={start:t,end:e,type:void 0,text:"",labelType:"text"};Y.info("abc78 Got edge...",a);let s=r.text;if(s!==void 0&&(a.text=iw(s.text.trim()),a.text.startsWith('"')&&a.text.endsWith('"')&&(a.text=a.text.substring(1,a.text.length-1)),a.labelType=s.type),r!==void 0&&(a.type=r.type,a.stroke=r.stroke,a.length=r.length>10?10:r.length),Os.length<(Cm.maxEdges??500))Y.info("Pushing edge..."),Os.push(a);else throw new Error(`Edge limit exceeded. ${Os.length} edges found, but the limit is ${Cm.maxEdges}. Initialize mermaid with maxEdges set to a higher number to allow more edges. You cannot set this config via configuration inside the diagram as it is a secure config. -You have to call mermaid.initialize.`)},Bqe=function(i,s,u){Xe.info("addLink (abc78)",i,s,u);let d,p;for(d=0;d=z3.length)throw new Error(`The index ${u} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${z3.length-1}. (Help: Ensure that the index is within the range of existing edges.)`);u==="default"?z3.defaultStyle=s:(Ao.isSubstringInArray("fill",s)===-1&&s.push("fill:none"),z3[u].style=s)})},jqe=function(i,s){i.split(",").forEach(function(u){FD[u]===void 0&&(FD[u]={id:u,styles:[],textStyles:[]}),s!=null&&s.forEach(function(d){if(d.match("color")){const p=d.replace("fill","bgFill").replace("color","fill");FD[u].textStyles.push(p)}FD[u].styles.push(d)})})},$qe=function(i){$v=i,$v.match(/.*/)&&($v="LR"),$v.match(/.*v/)&&($v="TB"),$v==="TD"&&($v="TB")},RQ=function(i,s){i.split(",").forEach(function(u){let d=u;oh[d]!==void 0&&oh[d].classes.push(s),IQ[d]!==void 0&&IQ[d].classes.push(s)})},xUt=function(i,s){i.split(",").forEach(function(u){s!==void 0&&(OQ[PQ==="gen-1"?mR(u):u]=FQ(s))})},kUt=function(i,s,u){let d=mR(i);if(qt().securityLevel!=="loose"||s===void 0)return;let p=[];if(typeof u=="string"){p=u.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let v=0;v")),p.classed("hover",!0)}).on("mouseout",function(){s.transition().duration(500).style("opacity",0),Ir(this).classed("hover",!1)})};BQ.push(Yqe);const Xqe=function(i="gen-1"){oh={},FD={},z3=[],BQ=[Yqe],R7=[],IQ={},NQ=0,OQ={},Kbe=!0,PQ=i,BD=qt(),Pg()},Qqe=i=>{PQ=i||"gen-2"},Jqe=function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},Zqe=function(i,s,u){let d=i.text.trim(),p=u.text;i===u&&u.text.match(/\s/)&&(d=void 0);function v(A){const P={boolean:{},number:{},string:{}},R=[];let F;return{nodeList:A.filter(function(K){const ee=typeof K;return K.stmt&&K.stmt==="dir"?(F=K.value,!1):K.trim()===""?!1:ee in P?P[ee].hasOwnProperty(K)?!1:P[ee][K]=!0:R.includes(K)?!1:R.push(K)}),dir:F}}let b=[];const{nodeList:y,dir:T}=v(b.concat.apply(b,s));if(b=y,PQ==="gen-1")for(let A=0;A2e3)return;if(eHe[vR]=s,R7[s].id===i)return{result:!0,count:0};let d=0,p=1;for(;d=0){const b=tHe(i,v);if(b.result)return{result:!0,count:p+b.count};p=p+b.count}d=d+1}return{result:!1,count:p}},nHe=function(i){return eHe[i]},rHe=function(){vR=-1,R7.length>0&&tHe("none",R7.length-1)},iHe=function(){return R7},sHe=()=>Kbe?(Kbe=!1,!0):!1,TUt=i=>{let s=i.trim(),u="arrow_open";switch(s[0]){case"<":u="arrow_point",s=s.slice(1);break;case"x":u="arrow_cross",s=s.slice(1);break;case"o":u="arrow_circle",s=s.slice(1);break}let d="normal";return s.includes("=")&&(d="thick"),s.includes(".")&&(d="dotted"),{type:u,stroke:d}},CUt=(i,s)=>{const u=s.length;let d=0;for(let p=0;p{const s=i.trim();let u=s.slice(0,-1),d="arrow_open";switch(s.slice(-1)){case"x":d="arrow_cross",s[0]==="x"&&(d="double_"+d,u=u.slice(1));break;case">":d="arrow_point",s[0]==="<"&&(d="double_"+d,u=u.slice(1));break;case"o":d="arrow_circle",s[0]==="o"&&(d="double_"+d,u=u.slice(1));break}let p="normal",v=u.length-1;u[0]==="="&&(p="thick"),u[0]==="~"&&(p="invisible");let b=CUt(".",u);return b&&(p="dotted",v=b),{type:d,stroke:p,length:v}},aHe=(i,s)=>{const u=SUt(i);let d;if(s){if(d=TUt(s),d.stroke!==u.stroke)return{type:"INVALID",stroke:"INVALID"};if(d.type==="arrow_open")d.type=u.type;else{if(d.type!==u.type)return{type:"INVALID",stroke:"INVALID"};d.type="double_"+d.type}return d.type==="double_arrow"&&(d.type="double_arrow_point"),d.length=u.length,d}return u},oHe=(i,s)=>{let u=!1;return i.forEach(d=>{d.nodes.indexOf(s)>=0&&(u=!0)}),u},cHe=(i,s)=>{const u=[];return i.nodes.forEach((d,p)=>{oHe(s,d)||u.push(i.nodes[p])}),{nodes:u}},uHe={firstGraph:sHe},HC={defaultConfig:()=>Zje.flowchart,setAccTitle:Bg,getAccTitle:Cp,getAccDescription:_p,setAccDescription:Sp,addVertex:Nqe,lookUpDomId:mR,addLink:Bqe,updateLinkInterpolate:Fqe,updateLink:Rqe,addClass:jqe,setDirection:$qe,setClass:RQ,setTooltip:xUt,getTooltip:qqe,setClickEvent:Hqe,setLink:zqe,bindFunctions:Vqe,getDirection:Uqe,getVertices:Gqe,getEdges:Kqe,getClasses:Wqe,clear:Xqe,setGen:Qqe,defaultStyle:Jqe,addSubGraph:Zqe,getDepthFirstPos:nHe,indexNodes:rHe,getSubGraphs:iHe,destructLink:aHe,lex:uHe,exists:oHe,makeUniq:cHe,setDiagramTitle:cm,getDiagramTitle:Ap},_Ut=Object.freeze(Object.defineProperty({__proto__:null,addClass:jqe,addLink:Bqe,addSingleLink:Pqe,addSubGraph:Zqe,addVertex:Nqe,bindFunctions:Vqe,clear:Xqe,default:HC,defaultStyle:Jqe,destructLink:aHe,firstGraph:sHe,getClasses:Wqe,getDepthFirstPos:nHe,getDirection:Uqe,getEdges:Kqe,getSubGraphs:iHe,getTooltip:qqe,getVertices:Gqe,indexNodes:rHe,lex:uHe,lookUpDomId:mR,setClass:RQ,setClickEvent:Hqe,setDirection:$qe,setGen:Qqe,setLink:zqe,updateLink:Rqe,updateLinkInterpolate:Fqe},Symbol.toStringTag,{value:"Module"}));var AUt="[object Symbol]";function VC(i){return typeof i=="symbol"||q4(i)&&AC(i)==AUt}function RD(i,s){for(var u=-1,d=i==null?0:i.length,p=Array(d);++u-1}function fm(i){return w9(i)?aje(i):l$e(i)}var GUt=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,KUt=/^\w*$/;function Wbe(i,s){if(D0(i))return!1;var u=typeof i;return u=="number"||u=="symbol"||u=="boolean"||i==null||VC(i)?!0:KUt.test(i)||!GUt.test(i)||s!=null&&i in Object(s)}var WUt=500;function YUt(i){var s=bD(i,function(d){return u.size===WUt&&u.clear(),d}),u=s.cache;return s}var XUt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,QUt=/\\(\\)?/g,JUt=YUt(function(i){var s=[];return i.charCodeAt(0)===46&&s.push(""),i.replace(XUt,function(u,d,p,v){s.push(p?v.replace(QUt,"$1"):d||u)}),s});const ZUt=JUt;function mHe(i){return i==null?"":fHe(i)}function $Q(i,s){return D0(i)?i:Wbe(i,s)?[i]:ZUt(mHe(i))}var eGt=1/0;function wR(i){if(typeof i=="string"||VC(i))return i;var s=i+"";return s=="0"&&1/i==-eGt?"-0":s}function zQ(i,s){s=$Q(s,i);for(var u=0,d=s.length;i!=null&&u0&&u(y)?s>1?qQ(y,s-1,u,d,p):Ybe(p,y):d||(p[p.length]=y)}return p}function jD(i){var s=i==null?0:i.length;return s?qQ(i,1):[]}function rGt(i){return lje(uje(i,void 0,jD),i+"")}function iGt(i,s,u,d){var p=-1,v=i==null?0:i.length;for(d&&v&&(u=i[++p]);++py))return!1;var _=v.get(i),A=v.get(s);if(_&&A)return _==s&&A==i;var P=-1,R=!0,F=u&DKt?new xR:void 0;for(v.set(i,s),v.set(s,i);++P2?s[2]:void 0;for(p&&QF(s[0],s[1],p)&&(d=1);++u-1?p[v?s[b]:b]:void 0}}var yWt=Math.max;function xWt(i,s,u){var d=i==null?0:i.length;if(!d)return-1;var p=u==null?0:$Ut(u);return p<0&&(p=yWt(d+p,0)),bHe(i,I9(s),p)}var kWt=wWt(xWt);const rme=kWt;function VHe(i,s){var u=-1,d=w9(i)?Array(i.length):[];return VQ(i,function(p,v,b){d[++u]=s(p,v,b)}),d}function P0(i,s){var u=D0(i)?RD:VHe;return u(i,I9(s))}function EWt(i,s){return i==null?i:b2e(i,nme(s),IC)}function TWt(i,s){return i&&tme(i,nme(s))}function CWt(i,s){return i>s}var SWt=Object.prototype,_Wt=SWt.hasOwnProperty;function AWt(i,s){return i!=null&&_Wt.call(i,s)}function Lo(i,s){return i!=null&&$He(i,s,AWt)}function LWt(i,s){return RD(s,function(u){return i[u]})}function $7(i){return i==null?[]:LWt(i,fm(i))}function Qf(i){return i===void 0}function UHe(i,s){return is||v&&b&&T&&!y&&!_||d&&b&&T||!u&&T||!p)return 1;if(!d&&!v&&!_&&i=y)return T;var _=u[d];return T*(_=="desc"?-1:1)}}return i.index-s.index}function PWt(i,s,u){s.length?s=RD(s,function(v){return D0(v)?function(b){return zQ(b,v.length===1?v[0]:v)}:v}):s=[OC];var d=-1;s=RD(s,NX(I9));var p=VHe(i,function(v,b,y){var T=RD(s,function(_){return _(v)});return{criteria:T,index:++d,value:v}});return IWt(p,function(v,b){return NWt(v,b,u)})}function BWt(i,s){return DWt(i,s,function(u,d){return zHe(i,d)})}var FWt=rGt(function(i,s){return i==null?{}:BWt(i,s)});const ER=FWt;var RWt=Math.ceil,jWt=Math.max;function $Wt(i,s,u,d){for(var p=-1,v=jWt(RWt((s-i)/(u||1)),0),b=Array(v);v--;)b[d?v:++p]=i,i+=u;return b}function zWt(i){return function(s,u,d){return d&&typeof d!="number"&&QF(s,u,d)&&(u=d=void 0),s=jQ(s),u===void 0?(u=s,s=0):u=jQ(u),d=d===void 0?s1&&QF(i,s[0],s[1])?s=[]:u>2&&QF(s[0],s[1],s[2])&&(s=[s[0]]),PWt(i,qQ(s,1),[])});const CR=VWt;var UWt=1/0,GWt=CD&&1/Jbe(new CD([,-0]))[1]==UWt?function(i){return new CD(i)}:zUt;const KWt=GWt;var WWt=200;function YWt(i,s,u){var d=-1,p=UUt,v=i.length,b=!0,y=[],T=y;if(u)b=!1,p=mWt;else if(v>=WWt){var _=s?null:KWt(i);if(_)return Jbe(_);b=!1,p=IHe,T=new xR}else T=s?[]:y;e:for(;++d1?p.setNode(v,u):p.setNode(v)}),this}setNode(s,u){return Lo(this._nodes,s)?(arguments.length>1&&(this._nodes[s]=u),this):(this._nodes[s]=arguments.length>1?u:this._defaultNodeLabelFn(s),this._isCompound&&(this._parent[s]=KC,this._children[s]={},this._children[KC][s]=!0),this._in[s]={},this._preds[s]={},this._out[s]={},this._sucs[s]={},++this._nodeCount,this)}node(s){return this._nodes[s]}hasNode(s){return Lo(this._nodes,s)}removeNode(s){var u=this;if(Lo(this._nodes,s)){var d=function(p){u.removeEdge(u._edgeObjs[p])};delete this._nodes[s],this._isCompound&&(this._removeFromParentsChildList(s),delete this._parent[s],Ar(this.children(s),function(p){u.setParent(p)}),delete this._children[s]),Ar(fm(this._in[s]),d),delete this._in[s],delete this._preds[s],Ar(fm(this._out[s]),d),delete this._out[s],delete this._sucs[s],--this._nodeCount}return this}setParent(s,u){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(Qf(u))u=KC;else{u+="";for(var d=u;!Qf(d);d=this.parent(d))if(d===s)throw new Error("Setting "+u+" as parent of "+s+" would create a cycle");this.setNode(u)}return this.setNode(s),this._removeFromParentsChildList(s),this._parent[s]=u,this._children[u][s]=!0,this}_removeFromParentsChildList(s){delete this._children[this._parent[s]][s]}parent(s){if(this._isCompound){var u=this._parent[s];if(u!==KC)return u}}children(s){if(Qf(s)&&(s=KC),this._isCompound){var u=this._children[s];if(u)return fm(u)}else{if(s===KC)return this.nodes();if(this.hasNode(s))return[]}}predecessors(s){var u=this._preds[s];if(u)return fm(u)}successors(s){var u=this._sucs[s];if(u)return fm(u)}neighbors(s){var u=this.predecessors(s);if(u)return QWt(u,this.successors(s))}isLeaf(s){var u;return this.isDirected()?u=this.successors(s):u=this.neighbors(s),u.length===0}filterNodes(s){var u=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});u.setGraph(this.graph());var d=this;Ar(this._nodes,function(b,y){s(y)&&u.setNode(y,b)}),Ar(this._edgeObjs,function(b){u.hasNode(b.v)&&u.hasNode(b.w)&&u.setEdge(b,d.edge(b))});var p={};function v(b){var y=d.parent(b);return y===void 0||u.hasNode(y)?(p[b]=y,y):y in p?p[y]:v(y)}return this._isCompound&&Ar(u.nodes(),function(b){u.setParent(b,v(b))}),u}setDefaultEdgeLabel(s){return gD(s)||(s=yD(s)),this._defaultEdgeLabelFn=s,this}edgeCount(){return this._edgeCount}edges(){return $7(this._edgeObjs)}setPath(s,u){var d=this,p=arguments;return TR(s,function(v,b){return p.length>1?d.setEdge(v,b,u):d.setEdge(v,b),b}),this}setEdge(){var s,u,d,p,v=!1,b=arguments[0];typeof b=="object"&&b!==null&&"v"in b?(s=b.v,u=b.w,d=b.name,arguments.length===2&&(p=arguments[1],v=!0)):(s=b,u=arguments[1],d=arguments[3],arguments.length>2&&(p=arguments[2],v=!0)),s=""+s,u=""+u,Qf(d)||(d=""+d);var y=SR(this._isDirected,s,u,d);if(Lo(this._edgeLabels,y))return v&&(this._edgeLabels[y]=p),this;if(!Qf(d)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(s),this.setNode(u),this._edgeLabels[y]=v?p:this._defaultEdgeLabelFn(s,u,d);var T=nYt(this._isDirected,s,u,d);return s=T.v,u=T.w,Object.freeze(T),this._edgeObjs[y]=T,KHe(this._preds[u],s),KHe(this._sucs[s],u),this._in[u][y]=T,this._out[s][y]=T,this._edgeCount++,this}edge(s,u,d){var p=arguments.length===1?ame(this._isDirected,arguments[0]):SR(this._isDirected,s,u,d);return this._edgeLabels[p]}hasEdge(s,u,d){var p=arguments.length===1?ame(this._isDirected,arguments[0]):SR(this._isDirected,s,u,d);return Lo(this._edgeLabels,p)}removeEdge(s,u,d){var p=arguments.length===1?ame(this._isDirected,arguments[0]):SR(this._isDirected,s,u,d),v=this._edgeObjs[p];return v&&(s=v.v,u=v.w,delete this._edgeLabels[p],delete this._edgeObjs[p],WHe(this._preds[u],s),WHe(this._sucs[s],u),delete this._in[u][p],delete this._out[s][p],this._edgeCount--),this}inEdges(s,u){var d=this._in[s];if(d){var p=$7(d);return u?j7(p,function(v){return v.v===u}):p}}outEdges(s,u){var d=this._out[s];if(d){var p=$7(d);return u?j7(p,function(v){return v.w===u}):p}}nodeEdges(s,u){var d=this.inEdges(s,u);if(d)return d.concat(this.outEdges(s,u))}}B0.prototype._nodeCount=0,B0.prototype._edgeCount=0;function KHe(i,s){i[s]?i[s]++:i[s]=1}function WHe(i,s){--i[s]||delete i[s]}function SR(i,s,u,d){var p=""+s,v=""+u;if(!i&&p>v){var b=p;p=v,v=b}return p+GHe+v+GHe+(Qf(d)?tYt:d)}function nYt(i,s,u,d){var p=""+s,v=""+u;if(!i&&p>v){var b=p;p=v,v=b}var y={v:p,w:v};return d&&(y.name=d),y}function ame(i,s){return SR(i,s.v,s.w,s.name)}class rYt{constructor(){var s={};s._next=s._prev=s,this._sentinel=s}dequeue(){var s=this._sentinel,u=s._prev;if(u!==s)return YHe(u),u}enqueue(s){var u=this._sentinel;s._prev&&s._next&&YHe(s),s._next=u._next,u._next._prev=s,u._next=s,s._prev=u}toString(){for(var s=[],u=this._sentinel,d=u._prev;d!==u;)s.push(JSON.stringify(d,iYt)),d=d._prev;return"["+s.join(", ")+"]"}}function YHe(i){i._prev._next=i._next,i._next._prev=i._prev,delete i._next,delete i._prev}function iYt(i,s){if(i!=="_next"&&i!=="_prev")return s}var sYt=yD(1);function aYt(i,s){if(i.nodeCount()<=1)return[];var u=cYt(i,s||sYt),d=oYt(u.graph,u.buckets,u.zeroIdx);return jD(P0(d,function(p){return i.outEdges(p.v,p.w)}))}function oYt(i,s,u){for(var d=[],p=s[s.length-1],v=s[0],b;i.nodeCount();){for(;b=v.dequeue();)ome(i,s,u,b);for(;b=p.dequeue();)ome(i,s,u,b);if(i.nodeCount()){for(var y=s.length-2;y>0;--y)if(b=s[y].dequeue(),b){d=d.concat(ome(i,s,u,b,!0));break}}}return d}function ome(i,s,u,d,p){var v=p?[]:void 0;return Ar(i.inEdges(d.v),function(b){var y=i.edge(b),T=i.node(b.v);p&&v.push({v:b.v,w:b.w}),T.out-=y,cme(s,u,T)}),Ar(i.outEdges(d.v),function(b){var y=i.edge(b),T=b.w,_=i.node(T);_.in-=y,cme(s,u,_)}),i.removeNode(d.v),v}function cYt(i,s){var u=new B0,d=0,p=0;Ar(i.nodes(),function(y){u.setNode(y,{v:y,in:0,out:0})}),Ar(i.edges(),function(y){var T=u.edge(y.v,y.w)||0,_=s(y),A=T+_;u.setEdge(y.v,y.w,A),p=Math.max(p,u.node(y.v).out+=_),d=Math.max(d,u.node(y.w).in+=_)});var v=GC(p+d+3).map(function(){return new rYt}),b=d+1;return Ar(u.nodes(),function(y){cme(v,b,u.node(y))}),{graph:u,buckets:v,zeroIdx:b}}function cme(i,s,u){u.out?u.in?i[u.out-u.in+s].enqueue(u):i[i.length-1].enqueue(u):i[0].enqueue(u)}function uYt(i){var s=i.graph().acyclicer==="greedy"?aYt(i,u(i)):lYt(i);Ar(s,function(d){var p=i.edge(d);i.removeEdge(d),p.forwardName=d.name,p.reversed=!0,i.setEdge(d.w,d.v,p,KQ("rev"))});function u(d){return function(p){return d.edge(p).weight}}}function lYt(i){var s=[],u={},d={};function p(v){Lo(d,v)||(d[v]=!0,u[v]=!0,Ar(i.outEdges(v),function(b){Lo(u,b.w)?s.push(b):p(b.w)}),delete u[v])}return Ar(i.nodes(),p),s}function hYt(i){Ar(i.edges(),function(s){var u=i.edge(s);if(u.reversed){i.removeEdge(s);var d=u.forwardName;delete u.reversed,delete u.forwardName,i.setEdge(s.w,s.v,u,d)}})}function zD(i,s,u,d){var p;do p=KQ(d);while(i.hasNode(p));return u.dummy=s,i.setNode(p,u),p}function fYt(i){var s=new B0().setGraph(i.graph());return Ar(i.nodes(),function(u){s.setNode(u,i.node(u))}),Ar(i.edges(),function(u){var d=s.edge(u.v,u.w)||{weight:0,minlen:1},p=i.edge(u);s.setEdge(u.v,u.w,{weight:d.weight+p.weight,minlen:Math.max(d.minlen,p.minlen)})}),s}function XHe(i){var s=new B0({multigraph:i.isMultigraph()}).setGraph(i.graph());return Ar(i.nodes(),function(u){i.children(u).length||s.setNode(u,i.node(u))}),Ar(i.edges(),function(u){s.setEdge(u,i.edge(u))}),s}function QHe(i,s){var u=i.x,d=i.y,p=s.x-u,v=s.y-d,b=i.width/2,y=i.height/2;if(!p&&!v)throw new Error("Not possible to find intersection inside of the rectangle");var T,_;return Math.abs(v)*b>Math.abs(p)*y?(v<0&&(y=-y),T=y*p/v,_=y):(p<0&&(b=-b),T=b,_=b*v/p),{x:u+T,y:d+_}}function WQ(i){var s=P0(GC(ZHe(i)+1),function(){return[]});return Ar(i.nodes(),function(u){var d=i.node(u),p=d.rank;Qf(p)||(s[p][d.order]=u)}),s}function dYt(i){var s=kR(P0(i.nodes(),function(u){return i.node(u).rank}));Ar(i.nodes(),function(u){var d=i.node(u);Lo(d,"rank")&&(d.rank-=s)})}function gYt(i){var s=kR(P0(i.nodes(),function(v){return i.node(v).rank})),u=[];Ar(i.nodes(),function(v){var b=i.node(v).rank-s;u[b]||(u[b]=[]),u[b].push(v)});var d=0,p=i.graph().nodeRankFactor;Ar(u,function(v,b){Qf(v)&&b%p!==0?--d:d&&Ar(v,function(y){i.node(y).rank+=d})})}function JHe(i,s,u,d){var p={width:0,height:0};return arguments.length>=4&&(p.rank=u,p.order=d),zD(i,"border",p,s)}function ZHe(i){return UC(P0(i.nodes(),function(s){var u=i.node(s).rank;if(!Qf(u))return u}))}function pYt(i,s){var u={lhs:[],rhs:[]};return Ar(i,function(d){s(d)?u.lhs.push(d):u.rhs.push(d)}),u}function bYt(i,s){var u=qHe();try{return s()}finally{console.log(i+" time: "+(qHe()-u)+"ms")}}function mYt(i,s){return s()}function vYt(i){function s(u){var d=i.children(u),p=i.node(u);if(d.length&&Ar(d,s),Lo(p,"minRank")){p.borderLeft=[],p.borderRight=[];for(var v=p.minRank,b=p.maxRank+1;vb.lim&&(y=b,T=!0);var _=j7(s.edges(),function(A){return T===hVe(i,i.node(A.v),y)&&T!==hVe(i,i.node(A.w),y)});return sme(_,function(A){return _R(s,A)})}function lVe(i,s,u,d){var p=u.v,v=u.w;i.removeEdge(p,v),i.setEdge(d.v,d.w,{}),dme(i),fme(i,s),OYt(i,s)}function OYt(i,s){var u=rme(i.nodes(),function(p){return!s.node(p).parent}),d=DYt(i,u);d=d.slice(1),Ar(d,function(p){var v=i.node(p).parent,b=s.edge(p,v),y=!1;b||(b=s.edge(v,p),y=!0),s.node(p).rank=s.node(v).rank+(y?b.minlen:-b.minlen)})}function NYt(i,s,u){return i.hasEdge(s,u)}function hVe(i,s,u){return u.low<=s.lim&&s.lim<=u.lim}function PYt(i){switch(i.graph().ranker){case"network-simplex":fVe(i);break;case"tight-tree":FYt(i);break;case"longest-path":BYt(i);break;default:fVe(i)}}var BYt=hme;function FYt(i){hme(i),rVe(i)}function fVe(i){WC(i)}function RYt(i){var s=zD(i,"root",{},"_root"),u=jYt(i),d=UC($7(u))-1,p=2*d+1;i.graph().nestingRoot=s,Ar(i.edges(),function(b){i.edge(b).minlen*=p});var v=$Yt(i)+1;Ar(i.children(),function(b){dVe(i,s,p,v,d,u,b)}),i.graph().nodeRankFactor=p}function dVe(i,s,u,d,p,v,b){var y=i.children(b);if(!y.length){b!==s&&i.setEdge(s,b,{weight:0,minlen:u});return}var T=JHe(i,"_bt"),_=JHe(i,"_bb"),A=i.node(b);i.setParent(T,b),A.borderTop=T,i.setParent(_,b),A.borderBottom=_,Ar(y,function(P){dVe(i,s,u,d,p,v,P);var R=i.node(P),F=R.borderTop?R.borderTop:P,j=R.borderBottom?R.borderBottom:P,K=R.borderTop?d:2*d,ee=F!==j?1:p-v[b]+1;i.setEdge(T,F,{weight:K,minlen:ee,nestingEdge:!0}),i.setEdge(j,_,{weight:K,minlen:ee,nestingEdge:!0})}),i.parent(b)||i.setEdge(s,T,{weight:0,minlen:p+v[b]})}function jYt(i){var s={};function u(d,p){var v=i.children(d);v&&v.length&&Ar(v,function(b){u(b,p+1)}),s[d]=p}return Ar(i.children(),function(d){u(d,1)}),s}function $Yt(i){return TR(i.edges(),function(s,u){return s+i.edge(u).weight},0)}function zYt(i){var s=i.graph();i.removeNode(s.nestingRoot),delete s.nestingRoot,Ar(i.edges(),function(u){var d=i.edge(u);d.nestingEdge&&i.removeEdge(u)})}function qYt(i,s,u){var d={},p;Ar(u,function(v){for(var b=i.parent(v),y,T;b;){if(y=i.parent(b),y?(T=d[y],d[y]=b):(T=p,p=b),T&&T!==b){s.setEdge(T,b);return}b=y}})}function HYt(i,s,u){var d=VYt(i),p=new B0({compound:!0}).setGraph({root:d}).setDefaultNodeLabel(function(v){return i.node(v)});return Ar(i.nodes(),function(v){var b=i.node(v),y=i.parent(v);(b.rank===s||b.minRank<=s&&s<=b.maxRank)&&(p.setNode(v),p.setParent(v,y||d),Ar(i[u](v),function(T){var _=T.v===v?T.w:T.v,A=p.edge(_,v),P=Qf(A)?0:A.weight;p.setEdge(_,v,{weight:i.edge(T).weight+P})}),Lo(b,"minRank")&&p.setNode(v,{borderLeft:b.borderLeft[s],borderRight:b.borderRight[s]}))}),p}function VYt(i){for(var s;i.hasNode(s=KQ("_root")););return s}function UYt(i,s){for(var u=0,d=1;d0;)A%2&&(P+=y[A+1]),A=A-1>>1,y[A]+=_.weight;T+=_.weight*P})),T}function KYt(i){var s={},u=j7(i.nodes(),function(y){return!i.children(y).length}),d=UC(P0(u,function(y){return i.node(y).rank})),p=P0(GC(d+1),function(){return[]});function v(y){if(!Lo(s,y)){s[y]=!0;var T=i.node(y);p[T.rank].push(y),Ar(i.successors(y),v)}}var b=CR(u,function(y){return i.node(y).rank});return Ar(b,v),p}function WYt(i,s){return P0(s,function(u){var d=i.inEdges(u);if(d.length){var p=TR(d,function(v,b){var y=i.edge(b),T=i.node(b.v);return{sum:v.sum+y.weight*T.order,weight:v.weight+y.weight}},{sum:0,weight:0});return{v:u,barycenter:p.sum/p.weight,weight:p.weight}}else return{v:u}})}function YYt(i,s){var u={};Ar(i,function(p,v){var b=u[p.v]={indegree:0,in:[],out:[],vs:[p.v],i:v};Qf(p.barycenter)||(b.barycenter=p.barycenter,b.weight=p.weight)}),Ar(s.edges(),function(p){var v=u[p.v],b=u[p.w];!Qf(v)&&!Qf(b)&&(b.indegree++,v.out.push(u[p.w]))});var d=j7(u,function(p){return!p.indegree});return XYt(d)}function XYt(i){var s=[];function u(v){return function(b){b.merged||(Qf(b.barycenter)||Qf(v.barycenter)||b.barycenter>=v.barycenter)&&QYt(v,b)}}function d(v){return function(b){b.in.push(v),--b.indegree===0&&i.push(b)}}for(;i.length;){var p=i.pop();s.push(p),Ar(p.in.reverse(),u(p)),Ar(p.out,d(p))}return P0(j7(s,function(v){return!v.merged}),function(v){return ER(v,["vs","i","barycenter","weight"])})}function QYt(i,s){var u=0,d=0;i.weight&&(u+=i.barycenter*i.weight,d+=i.weight),s.weight&&(u+=s.barycenter*s.weight,d+=s.weight),i.vs=s.vs.concat(i.vs),i.barycenter=u/d,i.weight=d,i.i=Math.min(s.i,i.i),s.merged=!0}function JYt(i,s){var u=pYt(i,function(A){return Lo(A,"barycenter")}),d=u.lhs,p=CR(u.rhs,function(A){return-A.i}),v=[],b=0,y=0,T=0;d.sort(ZYt(!!s)),T=gVe(v,p,T),Ar(d,function(A){T+=A.vs.length,v.push(A.vs),b+=A.barycenter*A.weight,y+=A.weight,T=gVe(v,p,T)});var _={vs:jD(v)};return y&&(_.barycenter=b/y,_.weight=y),_}function gVe(i,s,u){for(var d;s.length&&(d=UQ(s)).i<=u;)s.pop(),i.push(d.vs),u++;return u}function ZYt(i){return function(s,u){return s.barycenteru.barycenter?1:i?u.i-s.i:s.i-u.i}}function pVe(i,s,u,d){var p=i.children(s),v=i.node(s),b=v?v.borderLeft:void 0,y=v?v.borderRight:void 0,T={};b&&(p=j7(p,function(j){return j!==b&&j!==y}));var _=WYt(i,p);Ar(_,function(j){if(i.children(j.v).length){var K=pVe(i,j.v,u,d);T[j.v]=K,Lo(K,"barycenter")&&tXt(j,K)}});var A=YYt(_,u);eXt(A,T);var P=JYt(A,d);if(b&&(P.vs=jD([b,P.vs,y]),i.predecessors(b).length)){var R=i.node(i.predecessors(b)[0]),F=i.node(i.predecessors(y)[0]);Lo(P,"barycenter")||(P.barycenter=0,P.weight=0),P.barycenter=(P.barycenter*P.weight+R.order+F.order)/(P.weight+2),P.weight+=2}return P}function eXt(i,s){Ar(i,function(u){u.vs=jD(u.vs.map(function(d){return s[d]?s[d].vs:d}))})}function tXt(i,s){Qf(i.barycenter)?(i.barycenter=s.barycenter,i.weight=s.weight):(i.barycenter=(i.barycenter*i.weight+s.barycenter*s.weight)/(i.weight+s.weight),i.weight+=s.weight)}function nXt(i){var s=ZHe(i),u=bVe(i,GC(1,s+1),"inEdges"),d=bVe(i,GC(s-1,-1,-1),"outEdges"),p=KYt(i);mVe(i,p);for(var v=Number.POSITIVE_INFINITY,b,y=0,T=0;T<4;++y,++T){rXt(y%2?u:d,y%4>=2),p=WQ(i);var _=UYt(i,p);_b||y>s[T].lim));for(_=T,T=d;(T=i.parent(T))!==_;)v.push(T);return{path:p.concat(v.reverse()),lca:_}}function aXt(i){var s={},u=0;function d(p){var v=u;Ar(i.children(p),d),s[p]={low:v,lim:u++}}return Ar(i.children(),d),s}function oXt(i,s){var u={};function d(p,v){var b=0,y=0,T=p.length,_=UQ(v);return Ar(v,function(A,P){var R=uXt(i,A),F=R?i.node(R).order:T;(R||A===_)&&(Ar(v.slice(y,P+1),function(j){Ar(i.predecessors(j),function(K){var ee=i.node(K),ie=ee.order;(ie_)&&vVe(u,R,A)})})}function p(v,b){var y=-1,T,_=0;return Ar(b,function(A,P){if(i.node(A).dummy==="border"){var R=i.predecessors(A);R.length&&(T=i.node(R[0]).order,d(b,_,P,y,T),_=P,y=T)}d(b,_,b.length,T,v.length)}),b}return TR(s,p),u}function uXt(i,s){if(i.node(s).dummy)return rme(i.predecessors(s),function(u){return i.node(u).dummy})}function vVe(i,s,u){if(s>u){var d=s;s=u,u=d}var p=i[s];p||(i[s]=p={}),p[u]=!0}function lXt(i,s,u){if(s>u){var d=s;s=u,u=d}return Lo(i[s],u)}function hXt(i,s,u,d){var p={},v={},b={};return Ar(s,function(y){Ar(y,function(T,_){p[T]=T,v[T]=T,b[T]=_})}),Ar(s,function(y){var T=-1;Ar(y,function(_){var A=d(_);if(A.length){A=CR(A,function(K){return b[K]});for(var P=(A.length-1)/2,R=Math.floor(P),F=Math.ceil(P);R<=F;++R){var j=A[R];v[_]===_&&T0}function e5(i,s,u){var d=i.x,p=i.y,v=[],b=Number.POSITIVE_INFINITY,y=Number.POSITIVE_INFINITY;s.forEach(function(j){b=Math.min(b,j.x),y=Math.min(y,j.y)});for(var T=d-i.width/2-b,_=p-i.height/2-y,A=0;A1&&v.sort(function(j,K){var ee=j.x-u.x,ie=j.y-u.y,oe=Math.sqrt(ee*ee+ie*ie),pe=K.x-u.x,be=K.y-u.y,ae=Math.sqrt(pe*pe+be*be);return oeMath.abs(p)*y?(v<0&&(y=-y),T=v===0?0:y*p/v,_=y):(p<0&&(b=-b),T=b,_=p===0?0:b*v/p),{x:u+T,y:d+_}}var Cme={rect:gQt,ellipse:pQt,circle:bQt,diamond:mQt};function dQt(i){Cme=i}function gQt(i,s,u){var d=i.insert("rect",":first-child").attr("rx",u.rx).attr("ry",u.ry).attr("x",-s.width/2).attr("y",-s.height/2).attr("width",s.width).attr("height",s.height);return u.intersect=function(p){return Tme(u,p)},d}function pQt(i,s,u){var d=s.width/2,p=s.height/2,v=i.insert("ellipse",":first-child").attr("x",-s.width/2).attr("y",-s.height/2).attr("rx",d).attr("ry",p);return u.intersect=function(b){return TVe(u,d,p,b)},v}function bQt(i,s,u){var d=Math.max(s.width,s.height)/2,p=i.insert("circle",":first-child").attr("x",-s.width/2).attr("y",-s.height/2).attr("r",d);return u.intersect=function(v){return hQt(u,d,v)},p}function mQt(i,s,u){var d=s.width*Math.SQRT2/2,p=s.height*Math.SQRT2/2,v=[{x:0,y:-p},{x:-d,y:0},{x:0,y:p},{x:d,y:0}],b=i.insert("polygon",":first-child").attr("points",v.map(function(y){return y.x+","+y.y}).join(" "));return u.intersect=function(y){return e5(u,v,y)},b}function vQt(){var i=function(s,u){xQt(u);var d=AR(s,"output"),p=AR(d,"clusters"),v=AR(d,"edgePaths"),b=xme(AR(d,"edgeLabels"),u),y=Eme(AR(d,"nodes"),u,Cme);qD(u),lQt(y,u),uQt(b,u),kme(v,u,mme);var T=yme(p,u);cQt(T,u),kQt(u)};return i.createNodes=function(s){return arguments.length?(oQt(s),i):Eme},i.createClusters=function(s){return arguments.length?(ZXt(s),i):yme},i.createEdgeLabels=function(s){return arguments.length?(eQt(s),i):xme},i.createEdgePaths=function(s){return arguments.length?(tQt(s),i):kme},i.shapes=function(s){return arguments.length?(dQt(s),i):Cme},i.arrows=function(s){return arguments.length?(GXt(s),i):mme},i}var wQt={paddingLeft:10,paddingRight:10,paddingTop:10,paddingBottom:10,rx:0,ry:0,shape:"rect"},yQt={arrowhead:"normal",curve:kp};function xQt(i){i.nodes().forEach(function(s){var u=i.node(s);!Lo(u,"label")&&!i.children(s).length&&(u.label=s),Lo(u,"paddingX")&&$D(u,{paddingLeft:u.paddingX,paddingRight:u.paddingX}),Lo(u,"paddingY")&&$D(u,{paddingTop:u.paddingY,paddingBottom:u.paddingY}),Lo(u,"padding")&&$D(u,{paddingLeft:u.padding,paddingRight:u.padding,paddingTop:u.padding,paddingBottom:u.padding}),$D(u,wQt),Ar(["paddingLeft","paddingRight","paddingTop","paddingBottom"],function(d){u[d]=Number(u[d])}),Lo(u,"width")&&(u._prevWidth=u.width),Lo(u,"height")&&(u._prevHeight=u.height)}),i.edges().forEach(function(s){var u=i.edge(s);Lo(u,"label")||(u.label=""),$D(u,yQt)})}function kQt(i){Ar(i.nodes(),function(s){var u=i.node(s);Lo(u,"_prevWidth")?u.width=u._prevWidth:delete u.width,Lo(u,"_prevHeight")?u.height=u._prevHeight:delete u.height,delete u._prevWidth,delete u._prevHeight})}function AR(i,s){var u=i.select("g."+s);return u.empty()&&(u=i.append("g").attr("class",s)),u}function SVe(i,s,u){const d=s.width,p=s.height,v=(d+p)*.9,b=[{x:v/2,y:0},{x:v,y:-v/2},{x:v/2,y:-v},{x:0,y:-v/2}],y=z7(i,v,v,b);return u.intersect=function(T){return e5(u,b,T)},y}function _Ve(i,s,u){const p=s.height,v=p/4,b=s.width+2*v,y=[{x:v,y:0},{x:b-v,y:0},{x:b,y:-p/2},{x:b-v,y:-p},{x:v,y:-p},{x:0,y:-p/2}],T=z7(i,b,p,y);return u.intersect=function(_){return e5(u,y,_)},T}function AVe(i,s,u){const d=s.width,p=s.height,v=[{x:-p/2,y:0},{x:d,y:0},{x:d,y:-p},{x:-p/2,y:-p},{x:0,y:-p/2}],b=z7(i,d,p,v);return u.intersect=function(y){return e5(u,v,y)},b}function LVe(i,s,u){const d=s.width,p=s.height,v=[{x:-2*p/6,y:0},{x:d-p/6,y:0},{x:d+2*p/6,y:-p},{x:p/6,y:-p}],b=z7(i,d,p,v);return u.intersect=function(y){return e5(u,v,y)},b}function MVe(i,s,u){const d=s.width,p=s.height,v=[{x:2*p/6,y:0},{x:d+p/6,y:0},{x:d-2*p/6,y:-p},{x:-p/6,y:-p}],b=z7(i,d,p,v);return u.intersect=function(y){return e5(u,v,y)},b}function DVe(i,s,u){const d=s.width,p=s.height,v=[{x:-2*p/6,y:0},{x:d+2*p/6,y:0},{x:d-p/6,y:-p},{x:p/6,y:-p}],b=z7(i,d,p,v);return u.intersect=function(y){return e5(u,v,y)},b}function IVe(i,s,u){const d=s.width,p=s.height,v=[{x:p/6,y:0},{x:d-p/6,y:0},{x:d+2*p/6,y:-p},{x:-2*p/6,y:-p}],b=z7(i,d,p,v);return u.intersect=function(y){return e5(u,v,y)},b}function OVe(i,s,u){const d=s.width,p=s.height,v=[{x:0,y:0},{x:d+p/2,y:0},{x:d,y:-p/2},{x:d+p/2,y:-p},{x:0,y:-p}],b=z7(i,d,p,v);return u.intersect=function(y){return e5(u,v,y)},b}function NVe(i,s,u){const d=s.height,p=s.width+d/4,v=i.insert("rect",":first-child").attr("rx",d/2).attr("ry",d/2).attr("x",-p/2).attr("y",-d/2).attr("width",p).attr("height",d);return u.intersect=function(b){return Tme(u,b)},v}function PVe(i,s,u){const d=s.width,p=s.height,v=[{x:0,y:0},{x:d,y:0},{x:d,y:-p},{x:0,y:-p},{x:0,y:0},{x:-8,y:0},{x:d+8,y:0},{x:d+8,y:-p},{x:-8,y:-p},{x:-8,y:0}],b=z7(i,d,p,v);return u.intersect=function(y){return e5(u,v,y)},b}function BVe(i,s,u){const d=s.width,p=d/2,v=p/(2.5+d/50),b=s.height+v,y="M 0,"+v+" a "+p+","+v+" 0,0,0 "+d+" 0 a "+p+","+v+" 0,0,0 "+-d+" 0 l 0,"+b+" a "+p+","+v+" 0,0,0 "+d+" 0 l 0,"+-b,T=i.attr("label-offset-y",v).insert("path",":first-child").attr("d",y).attr("transform","translate("+-d/2+","+-(b/2+v)+")");return u.intersect=function(_){const A=Tme(u,_),P=A.x-u.x;if(p!=0&&(Math.abs(P)u.height/2-v)){let R=v*v*(1-P*P/(p*p));R!=0&&(R=Math.sqrt(R)),R=v-R,_.y-u.y>0&&(R=-R),A.y+=R}return A},T}function EQt(i){i.shapes().question=SVe,i.shapes().hexagon=_Ve,i.shapes().stadium=NVe,i.shapes().subroutine=PVe,i.shapes().cylinder=BVe,i.shapes().rect_left_inv_arrow=AVe,i.shapes().lean_right=LVe,i.shapes().lean_left=MVe,i.shapes().trapezoid=DVe,i.shapes().inv_trapezoid=IVe,i.shapes().rect_right_inv_arrow=OVe}function TQt(i){i({question:SVe}),i({hexagon:_Ve}),i({stadium:NVe}),i({subroutine:PVe}),i({cylinder:BVe}),i({rect_left_inv_arrow:AVe}),i({lean_right:LVe}),i({lean_left:MVe}),i({trapezoid:DVe}),i({inv_trapezoid:IVe}),i({rect_right_inv_arrow:OVe})}function z7(i,s,u,d){return i.insert("polygon",":first-child").attr("points",d.map(function(p){return p.x+","+p.y}).join(" ")).attr("transform","translate("+-s/2+","+u/2+")")}const CQt={addToRender:EQt,addToRenderV2:TQt},FVe={},SQt=function(i){const s=Object.keys(i);for(const u of s)FVe[u]=i[u]},RVe=async function(i,s,u,d,p,v){const b=d?d.select(`[id="${u}"]`):Ir(`[id="${u}"]`),y=p||document,T=Object.keys(i);for(const _ of T){const A=i[_];let P="default";A.classes.length>0&&(P=A.classes.join(" "));const R=om(A.styles);let F=A.text!==void 0?A.text:A.id,j;if(f1(qt().flowchart.htmlLabels)){const ie={label:await CC(F.replace(/fa[blrs]?:fa-[\w-]+/g,oe=>``),qt())};j=vme(b,ie).node(),j.parentNode.removeChild(j)}else{const ie=y.createElementNS("http://www.w3.org/2000/svg","text");ie.setAttribute("style",R.labelStyle.replace("color:","fill:"));const oe=F.split(ci.lineBreakRegex);for(const pe of oe){const be=y.createElementNS("http://www.w3.org/2000/svg","tspan");be.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),be.setAttribute("dy","1em"),be.setAttribute("x","1"),be.textContent=pe,ie.appendChild(be)}j=ie}let K=0,ee="";switch(A.type){case"round":K=5,ee="rect";break;case"square":ee="rect";break;case"diamond":ee="question";break;case"hexagon":ee="hexagon";break;case"odd":ee="rect_left_inv_arrow";break;case"lean_right":ee="lean_right";break;case"lean_left":ee="lean_left";break;case"trapezoid":ee="trapezoid";break;case"inv_trapezoid":ee="inv_trapezoid";break;case"odd_right":ee="rect_left_inv_arrow";break;case"circle":ee="circle";break;case"ellipse":ee="ellipse";break;case"stadium":ee="stadium";break;case"subroutine":ee="subroutine";break;case"cylinder":ee="cylinder";break;case"group":ee="rect";break;default:ee="rect"}Xe.warn("Adding node",A.id,A.domId),s.setNode(v.db.lookUpDomId(A.id),{labelType:"svg",labelStyle:R.labelStyle,shape:ee,label:j,rx:K,ry:K,class:P,style:R.style,id:v.db.lookUpDomId(A.id)})}},jVe=async function(i,s,u){let d=0,p,v;if(i.defaultStyle!==void 0){const b=om(i.defaultStyle);p=b.style,v=b.labelStyle}for(const b of i){d++;const y="L-"+b.start+"-"+b.end,T="LS-"+b.start,_="LE-"+b.end,A={};b.type==="arrow_open"?A.arrowhead="none":A.arrowhead="normal";let P="",R="";if(b.style!==void 0){const F=om(b.style);P=F.style,R=F.labelStyle}else switch(b.stroke){case"normal":P="fill:none",p!==void 0&&(P=p),v!==void 0&&(R=v);break;case"dotted":P="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":P=" stroke-width: 3.5px;fill:none";break}A.style=P,A.labelStyle=R,b.interpolate!==void 0?A.curve=Ov(b.interpolate,kp):i.defaultInterpolate!==void 0?A.curve=Ov(i.defaultInterpolate,kp):A.curve=Ov(FVe.curve,kp),b.text===void 0?b.style!==void 0&&(A.arrowheadStyle="fill: #333"):(A.arrowheadStyle="fill: #333",A.labelpos="c",f1(qt().flowchart.htmlLabels)?(A.labelType="html",A.label=`${await CC(b.text.replace(/fa[blrs]?:fa-[\w-]+/g,F=>``),qt())}`):(A.labelType="text",A.label=b.text.replace(ci.lineBreakRegex,` -`),b.style===void 0&&(A.style=A.style||"stroke: #333; stroke-width: 1.5px;fill:none"),A.labelStyle=A.labelStyle.replace("color:","fill:"))),A.id=y,A.class=T+" "+_,A.minlen=b.length||1,s.setEdge(u.db.lookUpDomId(b.start),u.db.lookUpDomId(b.end),A,d)}},_Qt={setConf:SQt,addVertices:RVe,addEdges:jVe,getClasses:function(i,s){return Xe.info("Extracting classes"),s.db.getClasses()},draw:async function(i,s,u,d){Xe.info("Drawing flowchart");const{securityLevel:p,flowchart:v}=qt();let b;p==="sandbox"&&(b=Ir("#i"+s));const y=Ir(p==="sandbox"?b.nodes()[0].contentDocument.body:"body"),T=p==="sandbox"?b.nodes()[0].contentDocument:document;let _=d.db.getDirection();_===void 0&&(_="TD");const A=v.nodeSpacing||50,P=v.rankSpacing||50,R=new B0({multigraph:!0,compound:!0}).setGraph({rankdir:_,nodesep:A,ranksep:P,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});let F;const j=d.db.getSubGraphs();for(let ne=j.length-1;ne>=0;ne--)F=j[ne],d.db.addVertex(F.id,F.title,"group",void 0,F.classes);const K=d.db.getVertices();Xe.warn("Get vertices",K);const ee=d.db.getEdges();let ie=0;for(ie=j.length-1;ie>=0;ie--){F=j[ie],_Be("cluster").append("text");for(let ne=0;ne{s.forEach(p=>{DQt[p](i,u,d)})},DQt={extension:(i,s,u)=>{Xe.trace("Making markers for ",u),i.append("defs").append("marker").attr("id",u+"_"+s+"-extensionStart").attr("class","marker extension "+s).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),i.append("defs").append("marker").attr("id",u+"_"+s+"-extensionEnd").attr("class","marker extension "+s).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},composition:(i,s,u)=>{i.append("defs").append("marker").attr("id",u+"_"+s+"-compositionStart").attr("class","marker composition "+s).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id",u+"_"+s+"-compositionEnd").attr("class","marker composition "+s).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},aggregation:(i,s,u)=>{i.append("defs").append("marker").attr("id",u+"_"+s+"-aggregationStart").attr("class","marker aggregation "+s).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id",u+"_"+s+"-aggregationEnd").attr("class","marker aggregation "+s).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},dependency:(i,s,u)=>{i.append("defs").append("marker").attr("id",u+"_"+s+"-dependencyStart").attr("class","marker dependency "+s).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id",u+"_"+s+"-dependencyEnd").attr("class","marker dependency "+s).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},lollipop:(i,s,u)=>{i.append("defs").append("marker").attr("id",u+"_"+s+"-lollipopStart").attr("class","marker lollipop "+s).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),i.append("defs").append("marker").attr("id",u+"_"+s+"-lollipopEnd").attr("class","marker lollipop "+s).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},point:(i,s,u)=>{i.append("marker").attr("id",u+"_"+s+"-pointEnd").attr("class","marker "+s).attr("viewBox","0 0 10 10").attr("refX",6).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),i.append("marker").attr("id",u+"_"+s+"-pointStart").attr("class","marker "+s).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},circle:(i,s,u)=>{i.append("marker").attr("id",u+"_"+s+"-circleEnd").attr("class","marker "+s).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),i.append("marker").attr("id",u+"_"+s+"-circleStart").attr("class","marker "+s).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},cross:(i,s,u)=>{i.append("marker").attr("id",u+"_"+s+"-crossEnd").attr("class","marker cross "+s).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),i.append("marker").attr("id",u+"_"+s+"-crossStart").attr("class","marker cross "+s).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},barb:(i,s,u)=>{i.append("defs").append("marker").attr("id",u+"_"+s+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")}},Sme=MQt;function IQt(i,s){s&&i.attr("style",s)}function OQt(i){const s=Ir(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),u=s.append("xhtml:div"),d=i.label,p=i.isNode?"nodeLabel":"edgeLabel";return u.html('"+d+""),IQt(u,i.labelStyle),u.style("display","inline-block"),u.style("white-space","nowrap"),u.attr("xmlns","http://www.w3.org/1999/xhtml"),s.node()}const $2=(i,s,u,d)=>{let p=i||"";if(typeof p=="object"&&(p=p[0]),f1(qt().flowchart.htmlLabels)){p=p.replace(/\\n|\n/g,"
    "),Xe.debug("vertexText"+p);const v={isNode:d,label:ZF(p).replace(/fa[blrs]?:fa-[\w-]+/g,y=>``),labelStyle:s.replace("fill:","color:")};return OQt(v)}else{const v=document.createElementNS("http://www.w3.org/2000/svg","text");v.setAttribute("style",s.replace("color:","fill:"));let b=[];typeof p=="string"?b=p.split(/\\n|\n|/gi):Array.isArray(p)?b=p:b=[];for(const y of b){const T=document.createElementNS("http://www.w3.org/2000/svg","tspan");T.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),T.setAttribute("dy","1em"),T.setAttribute("x","0"),u?T.setAttribute("class","title-row"):T.setAttribute("class","row"),T.textContent=y.trim(),v.appendChild(T)}return v}},NQt={};function PQt(i,s){const u=s||NQt,d=typeof u.includeImageAlt=="boolean"?u.includeImageAlt:!0,p=typeof u.includeHtml=="boolean"?u.includeHtml:!0;return $Ve(i,d,p)}function $Ve(i,s,u){if(BQt(i)){if("value"in i)return i.type==="html"&&!u?"":i.value;if(s&&"alt"in i&&i.alt)return i.alt;if("children"in i)return zVe(i.children,s,u)}return Array.isArray(i)?zVe(i,s,u):""}function zVe(i,s,u){const d=[];let p=-1;for(;++pp?0:p+s:s=s>p?p:s,u=u>0?u:0,d.length<1e4)b=Array.from(d),b.unshift(s,u),i.splice(...b);else for(u&&i.splice(s,u);v0?(t5(i,i.length,0,s),i):s}const qVe={}.hasOwnProperty;function FQt(i){const s={};let u=-1;for(;++ub))return;const se=s.events.length;let de=se,X,ge;for(;de--;)if(s.events[de][0]==="exit"&&s.events[de][1].type==="chunkFlow"){if(X){ge=s.events[de][1].end;break}X=!0}for(ie(d),ne=se;nepe;){const ae=u[be];s.containerState=ae[1],ae[0].exit.call(s,i)}u.length=pe}function oe(){p.write([null]),v=void 0,p=void 0,s.containerState._closeFlow=void 0}}function XQt(i,s,u){return Kl(i,i.attempt(this.parser.constructs.document,s,u),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function VVe(i){if(i===null||z2(i)||UQt(i))return 1;if(VQt(i))return 2}function Lme(i,s,u){const d=[];let p=-1;for(;++p1&&i[u][1].end.offset-i[u][1].start.offset>1?2:1;const P=Object.assign({},i[d][1].end),R=Object.assign({},i[u][1].start);UVe(P,-T),UVe(R,T),b={type:T>1?"strongSequence":"emphasisSequence",start:P,end:Object.assign({},i[d][1].end)},y={type:T>1?"strongSequence":"emphasisSequence",start:Object.assign({},i[u][1].start),end:R},v={type:T>1?"strongText":"emphasisText",start:Object.assign({},i[d][1].end),end:Object.assign({},i[u][1].start)},p={type:T>1?"strong":"emphasis",start:Object.assign({},b.start),end:Object.assign({},y.end)},i[d][1].end=Object.assign({},b.start),i[u][1].start=Object.assign({},y.end),_=[],i[d][1].end.offset-i[d][1].start.offset&&(_=zv(_,[["enter",i[d][1],s],["exit",i[d][1],s]])),_=zv(_,[["enter",p,s],["enter",b,s],["exit",b,s],["enter",v,s]]),_=zv(_,Lme(s.parser.constructs.insideSpan.null,i.slice(d+1,u),s)),_=zv(_,[["exit",v,s],["enter",y,s],["exit",y,s],["exit",p,s]]),i[u][1].end.offset-i[u][1].start.offset?(A=2,_=zv(_,[["enter",i[u][1],s],["exit",i[u][1],s]])):A=0,t5(i,d-1,u-d+3,_),u=d+_.length-A-2;break}}for(u=-1;++u0&&Iu(ne)?Kl(i,oe,"linePrefix",v+1)(ne):oe(ne)}function oe(ne){return ne===null||so(ne)?i.check(XVe,K,be)(ne):(i.enter("codeFlowValue"),pe(ne))}function pe(ne){return ne===null||so(ne)?(i.exit("codeFlowValue"),oe(ne)):(i.consume(ne),pe)}function be(ne){return i.exit("codeFenced"),s(ne)}function ae(ne,se,de){let X=0;return ge;function ge(Pe){return ne.enter("lineEnding"),ne.consume(Pe),ne.exit("lineEnding"),W}function W(Pe){return ne.enter("codeFencedFence"),Iu(Pe)?Kl(ne,xe,"linePrefix",d.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(Pe):xe(Pe)}function xe(Pe){return Pe===y?(ne.enter("codeFencedFenceSequence"),U(Pe)):de(Pe)}function U(Pe){return Pe===y?(X++,ne.consume(Pe),U):X>=b?(ne.exit("codeFencedFenceSequence"),Iu(Pe)?Kl(ne,Fe,"whitespace")(Pe):Fe(Pe)):de(Pe)}function Fe(Pe){return Pe===null||so(Pe)?(ne.exit("codeFencedFence"),se(Pe)):de(Pe)}}}function cJt(i,s,u){const d=this;return p;function p(b){return b===null?u(b):(i.enter("lineEnding"),i.consume(b),i.exit("lineEnding"),v)}function v(b){return d.parser.lazy[d.now().line]?u(b):s(b)}}const Ime={name:"codeIndented",tokenize:lJt},uJt={tokenize:hJt,partial:!0};function lJt(i,s,u){const d=this;return p;function p(_){return i.enter("codeIndented"),Kl(i,v,"linePrefix",4+1)(_)}function v(_){const A=d.events[d.events.length-1];return A&&A[1].type==="linePrefix"&&A[2].sliceSerialize(A[1],!0).length>=4?b(_):u(_)}function b(_){return _===null?T(_):so(_)?i.attempt(uJt,b,T)(_):(i.enter("codeFlowValue"),y(_))}function y(_){return _===null||so(_)?(i.exit("codeFlowValue"),b(_)):(i.consume(_),y)}function T(_){return i.exit("codeIndented"),s(_)}}function hJt(i,s,u){const d=this;return p;function p(b){return d.parser.lazy[d.now().line]?u(b):so(b)?(i.enter("lineEnding"),i.consume(b),i.exit("lineEnding"),p):Kl(i,v,"linePrefix",4+1)(b)}function v(b){const y=d.events[d.events.length-1];return y&&y[1].type==="linePrefix"&&y[2].sliceSerialize(y[1],!0).length>=4?s(b):so(b)?p(b):u(b)}}const fJt={name:"codeText",tokenize:pJt,resolve:dJt,previous:gJt};function dJt(i){let s=i.length-4,u=3,d,p;if((i[u][1].type==="lineEnding"||i[u][1].type==="space")&&(i[s][1].type==="lineEnding"||i[s][1].type==="space")){for(d=u;++d=4?s(b):i.interrupt(d.parser.constructs.flow,u,s)(b)}}function ZVe(i,s,u,d,p,v,b,y,T){const _=T||Number.POSITIVE_INFINITY;let A=0;return P;function P(ie){return ie===60?(i.enter(d),i.enter(p),i.enter(v),i.consume(ie),i.exit(v),R):ie===null||ie===32||ie===41||_me(ie)?u(ie):(i.enter(d),i.enter(b),i.enter(y),i.enter("chunkString",{contentType:"string"}),K(ie))}function R(ie){return ie===62?(i.enter(v),i.consume(ie),i.exit(v),i.exit(p),i.exit(d),s):(i.enter(y),i.enter("chunkString",{contentType:"string"}),F(ie))}function F(ie){return ie===62?(i.exit("chunkString"),i.exit(y),R(ie)):ie===null||ie===60||so(ie)?u(ie):(i.consume(ie),ie===92?j:F)}function j(ie){return ie===60||ie===62||ie===92?(i.consume(ie),F):F(ie)}function K(ie){return!A&&(ie===null||ie===41||z2(ie))?(i.exit("chunkString"),i.exit(y),i.exit(b),i.exit(d),s(ie)):A<_&&ie===40?(i.consume(ie),A++,K):ie===41?(i.consume(ie),A--,K):ie===null||ie===32||ie===40||_me(ie)?u(ie):(i.consume(ie),ie===92?ee:K)}function ee(ie){return ie===40||ie===41||ie===92?(i.consume(ie),K):K(ie)}}function eUe(i,s,u,d,p,v){const b=this;let y=0,T;return _;function _(F){return i.enter(d),i.enter(p),i.consume(F),i.exit(p),i.enter(v),A}function A(F){return y>999||F===null||F===91||F===93&&!T||F===94&&!y&&"_hiddenFootnoteSupport"in b.parser.constructs?u(F):F===93?(i.exit(v),i.enter(p),i.consume(F),i.exit(p),i.exit(d),s):so(F)?(i.enter("lineEnding"),i.consume(F),i.exit("lineEnding"),A):(i.enter("chunkString",{contentType:"string"}),P(F))}function P(F){return F===null||F===91||F===93||so(F)||y++>999?(i.exit("chunkString"),A(F)):(i.consume(F),T||(T=!Iu(F)),F===92?R:P)}function R(F){return F===91||F===92||F===93?(i.consume(F),y++,P):P(F)}}function tUe(i,s,u,d,p,v){let b;return y;function y(R){return R===34||R===39||R===40?(i.enter(d),i.enter(p),i.consume(R),i.exit(p),b=R===40?41:R,T):u(R)}function T(R){return R===b?(i.enter(p),i.consume(R),i.exit(p),i.exit(d),s):(i.enter(v),_(R))}function _(R){return R===b?(i.exit(v),T(b)):R===null?u(R):so(R)?(i.enter("lineEnding"),i.consume(R),i.exit("lineEnding"),Kl(i,_,"linePrefix")):(i.enter("chunkString",{contentType:"string"}),A(R))}function A(R){return R===b||R===null||so(R)?(i.exit("chunkString"),_(R)):(i.consume(R),R===92?P:A)}function P(R){return R===b||R===92?(i.consume(R),A):A(R)}}function LR(i,s){let u;return d;function d(p){return so(p)?(i.enter("lineEnding"),i.consume(p),i.exit("lineEnding"),u=!0,d):Iu(p)?Kl(i,d,u?"linePrefix":"lineSuffix")(p):s(p)}}function HD(i){return i.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const kJt={name:"definition",tokenize:TJt},EJt={tokenize:CJt,partial:!0};function TJt(i,s,u){const d=this;let p;return v;function v(F){return i.enter("definition"),b(F)}function b(F){return eUe.call(d,i,y,u,"definitionLabel","definitionLabelMarker","definitionLabelString")(F)}function y(F){return p=HD(d.sliceSerialize(d.events[d.events.length-1][1]).slice(1,-1)),F===58?(i.enter("definitionMarker"),i.consume(F),i.exit("definitionMarker"),T):u(F)}function T(F){return z2(F)?LR(i,_)(F):_(F)}function _(F){return ZVe(i,A,u,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(F)}function A(F){return i.attempt(EJt,P,P)(F)}function P(F){return Iu(F)?Kl(i,R,"whitespace")(F):R(F)}function R(F){return F===null||so(F)?(i.exit("definition"),d.parser.defined.push(p),s(F)):u(F)}}function CJt(i,s,u){return d;function d(y){return z2(y)?LR(i,p)(y):u(y)}function p(y){return tUe(i,v,u,"definitionTitle","definitionTitleMarker","definitionTitleString")(y)}function v(y){return Iu(y)?Kl(i,b,"whitespace")(y):b(y)}function b(y){return y===null||so(y)?s(y):u(y)}}const SJt={name:"hardBreakEscape",tokenize:_Jt};function _Jt(i,s,u){return d;function d(v){return i.enter("hardBreakEscape"),i.consume(v),p}function p(v){return so(v)?(i.exit("hardBreakEscape"),s(v)):u(v)}}const AJt={name:"headingAtx",tokenize:MJt,resolve:LJt};function LJt(i,s){let u=i.length-2,d=3,p,v;return i[d][1].type==="whitespace"&&(d+=2),u-2>d&&i[u][1].type==="whitespace"&&(u-=2),i[u][1].type==="atxHeadingSequence"&&(d===u-1||u-4>d&&i[u-2][1].type==="whitespace")&&(u-=d+1===u?2:4),u>d&&(p={type:"atxHeadingText",start:i[d][1].start,end:i[u][1].end},v={type:"chunkText",start:i[d][1].start,end:i[u][1].end,contentType:"text"},t5(i,d,u-d+1,[["enter",p,s],["enter",v,s],["exit",v,s],["exit",p,s]])),i}function MJt(i,s,u){let d=0;return p;function p(A){return i.enter("atxHeading"),v(A)}function v(A){return i.enter("atxHeadingSequence"),b(A)}function b(A){return A===35&&d++<6?(i.consume(A),b):A===null||z2(A)?(i.exit("atxHeadingSequence"),y(A)):u(A)}function y(A){return A===35?(i.enter("atxHeadingSequence"),T(A)):A===null||so(A)?(i.exit("atxHeading"),s(A)):Iu(A)?Kl(i,y,"whitespace")(A):(i.enter("atxHeadingText"),_(A))}function T(A){return A===35?(i.consume(A),T):(i.exit("atxHeadingSequence"),y(A))}function _(A){return A===null||A===35||z2(A)?(i.exit("atxHeadingText"),y(A)):(i.consume(A),_)}}const DJt=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],nUe=["pre","script","style","textarea"],IJt={name:"htmlFlow",tokenize:BJt,resolveTo:PJt,concrete:!0},OJt={tokenize:RJt,partial:!0},NJt={tokenize:FJt,partial:!0};function PJt(i){let s=i.length;for(;s--&&!(i[s][0]==="enter"&&i[s][1].type==="htmlFlow"););return s>1&&i[s-2][1].type==="linePrefix"&&(i[s][1].start=i[s-2][1].start,i[s+1][1].start=i[s-2][1].start,i.splice(s-2,2)),i}function BJt(i,s,u){const d=this;let p,v,b,y,T;return _;function _(Ne){return A(Ne)}function A(Ne){return i.enter("htmlFlow"),i.enter("htmlFlowData"),i.consume(Ne),P}function P(Ne){return Ne===33?(i.consume(Ne),R):Ne===47?(i.consume(Ne),v=!0,K):Ne===63?(i.consume(Ne),p=3,d.interrupt?s:ke):n5(Ne)?(i.consume(Ne),b=String.fromCharCode(Ne),ee):u(Ne)}function R(Ne){return Ne===45?(i.consume(Ne),p=2,F):Ne===91?(i.consume(Ne),p=5,y=0,j):n5(Ne)?(i.consume(Ne),p=4,d.interrupt?s:ke):u(Ne)}function F(Ne){return Ne===45?(i.consume(Ne),d.interrupt?s:ke):u(Ne)}function j(Ne){const gn="CDATA[";return Ne===gn.charCodeAt(y++)?(i.consume(Ne),y===gn.length?d.interrupt?s:xe:j):u(Ne)}function K(Ne){return n5(Ne)?(i.consume(Ne),b=String.fromCharCode(Ne),ee):u(Ne)}function ee(Ne){if(Ne===null||Ne===47||Ne===62||z2(Ne)){const gn=Ne===47,_t=b.toLowerCase();return!gn&&!v&&nUe.includes(_t)?(p=1,d.interrupt?s(Ne):xe(Ne)):DJt.includes(b.toLowerCase())?(p=6,gn?(i.consume(Ne),ie):d.interrupt?s(Ne):xe(Ne)):(p=7,d.interrupt&&!d.parser.lazy[d.now().line]?u(Ne):v?oe(Ne):pe(Ne))}return Ne===45||H3(Ne)?(i.consume(Ne),b+=String.fromCharCode(Ne),ee):u(Ne)}function ie(Ne){return Ne===62?(i.consume(Ne),d.interrupt?s:xe):u(Ne)}function oe(Ne){return Iu(Ne)?(i.consume(Ne),oe):ge(Ne)}function pe(Ne){return Ne===47?(i.consume(Ne),ge):Ne===58||Ne===95||n5(Ne)?(i.consume(Ne),be):Iu(Ne)?(i.consume(Ne),pe):ge(Ne)}function be(Ne){return Ne===45||Ne===46||Ne===58||Ne===95||H3(Ne)?(i.consume(Ne),be):ae(Ne)}function ae(Ne){return Ne===61?(i.consume(Ne),ne):Iu(Ne)?(i.consume(Ne),ae):pe(Ne)}function ne(Ne){return Ne===null||Ne===60||Ne===61||Ne===62||Ne===96?u(Ne):Ne===34||Ne===39?(i.consume(Ne),T=Ne,se):Iu(Ne)?(i.consume(Ne),ne):de(Ne)}function se(Ne){return Ne===T?(i.consume(Ne),T=null,X):Ne===null||so(Ne)?u(Ne):(i.consume(Ne),se)}function de(Ne){return Ne===null||Ne===34||Ne===39||Ne===47||Ne===60||Ne===61||Ne===62||Ne===96||z2(Ne)?ae(Ne):(i.consume(Ne),de)}function X(Ne){return Ne===47||Ne===62||Iu(Ne)?pe(Ne):u(Ne)}function ge(Ne){return Ne===62?(i.consume(Ne),W):u(Ne)}function W(Ne){return Ne===null||so(Ne)?xe(Ne):Iu(Ne)?(i.consume(Ne),W):u(Ne)}function xe(Ne){return Ne===45&&p===2?(i.consume(Ne),je):Ne===60&&p===1?(i.consume(Ne),Ie):Ne===62&&p===4?(i.consume(Ne),Ke):Ne===63&&p===3?(i.consume(Ne),ke):Ne===93&&p===5?(i.consume(Ne),Ce):so(Ne)&&(p===6||p===7)?(i.exit("htmlFlowData"),i.check(OJt,Ft,U)(Ne)):Ne===null||so(Ne)?(i.exit("htmlFlowData"),U(Ne)):(i.consume(Ne),xe)}function U(Ne){return i.check(NJt,Fe,Ft)(Ne)}function Fe(Ne){return i.enter("lineEnding"),i.consume(Ne),i.exit("lineEnding"),Pe}function Pe(Ne){return Ne===null||so(Ne)?U(Ne):(i.enter("htmlFlowData"),xe(Ne))}function je(Ne){return Ne===45?(i.consume(Ne),ke):xe(Ne)}function Ie(Ne){return Ne===47?(i.consume(Ne),b="",Se):xe(Ne)}function Se(Ne){if(Ne===62){const gn=b.toLowerCase();return nUe.includes(gn)?(i.consume(Ne),Ke):xe(Ne)}return n5(Ne)&&b.length<8?(i.consume(Ne),b+=String.fromCharCode(Ne),Se):xe(Ne)}function Ce(Ne){return Ne===93?(i.consume(Ne),ke):xe(Ne)}function ke(Ne){return Ne===62?(i.consume(Ne),Ke):Ne===45&&p===2?(i.consume(Ne),ke):xe(Ne)}function Ke(Ne){return Ne===null||so(Ne)?(i.exit("htmlFlowData"),Ft(Ne)):(i.consume(Ne),Ke)}function Ft(Ne){return i.exit("htmlFlow"),s(Ne)}}function FJt(i,s,u){const d=this;return p;function p(b){return so(b)?(i.enter("lineEnding"),i.consume(b),i.exit("lineEnding"),v):u(b)}function v(b){return d.parser.lazy[d.now().line]?u(b):s(b)}}function RJt(i,s,u){return d;function d(p){return i.enter("lineEnding"),i.consume(p),i.exit("lineEnding"),i.attempt(YQ,s,u)}}const jJt={name:"htmlText",tokenize:$Jt};function $Jt(i,s,u){const d=this;let p,v,b;return y;function y(ke){return i.enter("htmlText"),i.enter("htmlTextData"),i.consume(ke),T}function T(ke){return ke===33?(i.consume(ke),_):ke===47?(i.consume(ke),ae):ke===63?(i.consume(ke),pe):n5(ke)?(i.consume(ke),de):u(ke)}function _(ke){return ke===45?(i.consume(ke),A):ke===91?(i.consume(ke),v=0,j):n5(ke)?(i.consume(ke),oe):u(ke)}function A(ke){return ke===45?(i.consume(ke),F):u(ke)}function P(ke){return ke===null?u(ke):ke===45?(i.consume(ke),R):so(ke)?(b=P,Ie(ke)):(i.consume(ke),P)}function R(ke){return ke===45?(i.consume(ke),F):P(ke)}function F(ke){return ke===62?je(ke):ke===45?R(ke):P(ke)}function j(ke){const Ke="CDATA[";return ke===Ke.charCodeAt(v++)?(i.consume(ke),v===Ke.length?K:j):u(ke)}function K(ke){return ke===null?u(ke):ke===93?(i.consume(ke),ee):so(ke)?(b=K,Ie(ke)):(i.consume(ke),K)}function ee(ke){return ke===93?(i.consume(ke),ie):K(ke)}function ie(ke){return ke===62?je(ke):ke===93?(i.consume(ke),ie):K(ke)}function oe(ke){return ke===null||ke===62?je(ke):so(ke)?(b=oe,Ie(ke)):(i.consume(ke),oe)}function pe(ke){return ke===null?u(ke):ke===63?(i.consume(ke),be):so(ke)?(b=pe,Ie(ke)):(i.consume(ke),pe)}function be(ke){return ke===62?je(ke):pe(ke)}function ae(ke){return n5(ke)?(i.consume(ke),ne):u(ke)}function ne(ke){return ke===45||H3(ke)?(i.consume(ke),ne):se(ke)}function se(ke){return so(ke)?(b=se,Ie(ke)):Iu(ke)?(i.consume(ke),se):je(ke)}function de(ke){return ke===45||H3(ke)?(i.consume(ke),de):ke===47||ke===62||z2(ke)?X(ke):u(ke)}function X(ke){return ke===47?(i.consume(ke),je):ke===58||ke===95||n5(ke)?(i.consume(ke),ge):so(ke)?(b=X,Ie(ke)):Iu(ke)?(i.consume(ke),X):je(ke)}function ge(ke){return ke===45||ke===46||ke===58||ke===95||H3(ke)?(i.consume(ke),ge):W(ke)}function W(ke){return ke===61?(i.consume(ke),xe):so(ke)?(b=W,Ie(ke)):Iu(ke)?(i.consume(ke),W):X(ke)}function xe(ke){return ke===null||ke===60||ke===61||ke===62||ke===96?u(ke):ke===34||ke===39?(i.consume(ke),p=ke,U):so(ke)?(b=xe,Ie(ke)):Iu(ke)?(i.consume(ke),xe):(i.consume(ke),Fe)}function U(ke){return ke===p?(i.consume(ke),p=void 0,Pe):ke===null?u(ke):so(ke)?(b=U,Ie(ke)):(i.consume(ke),U)}function Fe(ke){return ke===null||ke===34||ke===39||ke===60||ke===61||ke===96?u(ke):ke===47||ke===62||z2(ke)?X(ke):(i.consume(ke),Fe)}function Pe(ke){return ke===47||ke===62||z2(ke)?X(ke):u(ke)}function je(ke){return ke===62?(i.consume(ke),i.exit("htmlTextData"),i.exit("htmlText"),s):u(ke)}function Ie(ke){return i.exit("htmlTextData"),i.enter("lineEnding"),i.consume(ke),i.exit("lineEnding"),Se}function Se(ke){return Iu(ke)?Kl(i,Ce,"linePrefix",d.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(ke):Ce(ke)}function Ce(ke){return i.enter("htmlTextData"),b(ke)}}const Ome={name:"labelEnd",tokenize:GJt,resolveTo:UJt,resolveAll:VJt},zJt={tokenize:KJt},qJt={tokenize:WJt},HJt={tokenize:YJt};function VJt(i){let s=-1;for(;++s=3&&(_===null||so(_))?(i.exit("thematicBreak"),s(_)):u(_)}function T(_){return _===p?(i.consume(_),d++,T):(i.exit("thematicBreakSequence"),Iu(_)?Kl(i,y,"whitespace")(_):y(_))}}const q2={name:"list",tokenize:iZt,continuation:{tokenize:sZt},exit:oZt},nZt={tokenize:cZt,partial:!0},rZt={tokenize:aZt,partial:!0};function iZt(i,s,u){const d=this,p=d.events[d.events.length-1];let v=p&&p[1].type==="linePrefix"?p[2].sliceSerialize(p[1],!0).length:0,b=0;return y;function y(F){const j=d.containerState.type||(F===42||F===43||F===45?"listUnordered":"listOrdered");if(j==="listUnordered"?!d.containerState.marker||F===d.containerState.marker:Ame(F)){if(d.containerState.type||(d.containerState.type=j,i.enter(j,{_container:!0})),j==="listUnordered")return i.enter("listItemPrefix"),F===42||F===45?i.check(XQ,u,_)(F):_(F);if(!d.interrupt||F===49)return i.enter("listItemPrefix"),i.enter("listItemValue"),T(F)}return u(F)}function T(F){return Ame(F)&&++b<10?(i.consume(F),T):(!d.interrupt||b<2)&&(d.containerState.marker?F===d.containerState.marker:F===41||F===46)?(i.exit("listItemValue"),_(F)):u(F)}function _(F){return i.enter("listItemMarker"),i.consume(F),i.exit("listItemMarker"),d.containerState.marker=d.containerState.marker||F,i.check(YQ,d.interrupt?u:A,i.attempt(nZt,R,P))}function A(F){return d.containerState.initialBlankLine=!0,v++,R(F)}function P(F){return Iu(F)?(i.enter("listItemPrefixWhitespace"),i.consume(F),i.exit("listItemPrefixWhitespace"),R):u(F)}function R(F){return d.containerState.size=v+d.sliceSerialize(i.exit("listItemPrefix"),!0).length,s(F)}}function sZt(i,s,u){const d=this;return d.containerState._closeFlow=void 0,i.check(YQ,p,v);function p(y){return d.containerState.furtherBlankLines=d.containerState.furtherBlankLines||d.containerState.initialBlankLine,Kl(i,s,"listItemIndent",d.containerState.size+1)(y)}function v(y){return d.containerState.furtherBlankLines||!Iu(y)?(d.containerState.furtherBlankLines=void 0,d.containerState.initialBlankLine=void 0,b(y)):(d.containerState.furtherBlankLines=void 0,d.containerState.initialBlankLine=void 0,i.attempt(rZt,s,b)(y))}function b(y){return d.containerState._closeFlow=!0,d.interrupt=void 0,Kl(i,i.attempt(q2,s,u),"linePrefix",d.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(y)}}function aZt(i,s,u){const d=this;return Kl(i,p,"listItemIndent",d.containerState.size+1);function p(v){const b=d.events[d.events.length-1];return b&&b[1].type==="listItemIndent"&&b[2].sliceSerialize(b[1],!0).length===d.containerState.size?s(v):u(v)}}function oZt(i){i.exit(this.containerState.type)}function cZt(i,s,u){const d=this;return Kl(i,p,"listItemPrefixWhitespace",d.parser.constructs.disable.null.includes("codeIndented")?void 0:4+1);function p(v){const b=d.events[d.events.length-1];return!Iu(v)&&b&&b[1].type==="listItemPrefixWhitespace"?s(v):u(v)}}const rUe={name:"setextUnderline",tokenize:lZt,resolveTo:uZt};function uZt(i,s){let u=i.length,d,p,v;for(;u--;)if(i[u][0]==="enter"){if(i[u][1].type==="content"){d=u;break}i[u][1].type==="paragraph"&&(p=u)}else i[u][1].type==="content"&&i.splice(u,1),!v&&i[u][1].type==="definition"&&(v=u);const b={type:"setextHeading",start:Object.assign({},i[p][1].start),end:Object.assign({},i[i.length-1][1].end)};return i[p][1].type="setextHeadingText",v?(i.splice(p,0,["enter",b,s]),i.splice(v+1,0,["exit",i[d][1],s]),i[d][1].end=Object.assign({},i[v][1].end)):i[d][1]=b,i.push(["exit",b,s]),i}function lZt(i,s,u){const d=this;let p;return v;function v(_){let A=d.events.length,P;for(;A--;)if(d.events[A][1].type!=="lineEnding"&&d.events[A][1].type!=="linePrefix"&&d.events[A][1].type!=="content"){P=d.events[A][1].type==="paragraph";break}return!d.parser.lazy[d.now().line]&&(d.interrupt||P)?(i.enter("setextHeadingLine"),p=_,b(_)):u(_)}function b(_){return i.enter("setextHeadingLineSequence"),y(_)}function y(_){return _===p?(i.consume(_),y):(i.exit("setextHeadingLineSequence"),Iu(_)?Kl(i,T,"lineSuffix")(_):T(_))}function T(_){return _===null||so(_)?(i.exit("setextHeadingLine"),s(_)):u(_)}}const hZt={tokenize:fZt};function fZt(i){const s=this,u=i.attempt(YQ,d,i.attempt(this.parser.constructs.flowInitial,p,Kl(i,i.attempt(this.parser.constructs.flow,p,i.attempt(mJt,p)),"linePrefix")));return u;function d(v){if(v===null){i.consume(v);return}return i.enter("lineEndingBlank"),i.consume(v),i.exit("lineEndingBlank"),s.currentConstruct=void 0,u}function p(v){if(v===null){i.consume(v);return}return i.enter("lineEnding"),i.consume(v),i.exit("lineEnding"),s.currentConstruct=void 0,u}}const dZt={resolveAll:sUe()},gZt=iUe("string"),pZt=iUe("text");function iUe(i){return{tokenize:s,resolveAll:sUe(i==="text"?bZt:void 0)};function s(u){const d=this,p=this.parser.constructs[i],v=u.attempt(p,b,y);return b;function b(A){return _(A)?v(A):y(A)}function y(A){if(A===null){u.consume(A);return}return u.enter("data"),u.consume(A),T}function T(A){return _(A)?(u.exit("data"),v(A)):(u.consume(A),T)}function _(A){if(A===null)return!0;const P=p[A];let R=-1;if(P)for(;++R-1){const y=b[0];typeof y=="string"?b[0]=y.slice(d):b.shift()}v>0&&b.push(i[p].slice(0,v))}return b}function wZt(i,s){let u=-1;const d=[];let p;for(;++u13&&u<32||u>126&&u<160||u>55295&&u<57344||u>64975&&u<65008||(u&65535)===65535||(u&65535)===65534||u>1114111?"�":String.fromCharCode(u)}const TZt=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function CZt(i){return i.replace(TZt,SZt)}function SZt(i,s,u){if(s)return s;if(u.charCodeAt(0)===35){const p=u.charCodeAt(1),v=p===120||p===88;return oUe(u.slice(v?2:1),v?16:10)}return Dme(u)||i}function QQ(i){return!i||typeof i!="object"?"":"position"in i||"type"in i?cUe(i.position):"start"in i||"end"in i?cUe(i):"line"in i||"column"in i?Pme(i):""}function Pme(i){return uUe(i&&i.line)+":"+uUe(i&&i.column)}function cUe(i){return Pme(i&&i.start)+"-"+Pme(i&&i.end)}function uUe(i){return i&&typeof i=="number"?i:1}const lUe={}.hasOwnProperty,hUe=function(i,s,u){return typeof s!="string"&&(u=s,s=void 0),_Zt(u)(EZt(xZt(u).document().write(kZt()(i,s,!0))))};function _Zt(i){const s={transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:y(Ma),autolinkProtocol:W,autolinkEmail:W,atxHeading:y(zr),blockQuote:y(Qe),characterEscape:W,characterReference:W,codeFenced:y(Dt),codeFencedFenceInfo:T,codeFencedFenceMeta:T,codeIndented:y(Dt,T),codeText:y(kt,T),codeTextData:W,data:W,codeFlowValue:W,definition:y(On),definitionDestinationString:T,definitionLabelString:T,definitionTitleString:T,emphasis:y(ht),hardBreakEscape:y(yt),hardBreakTrailing:y(yt),htmlFlow:y(ji,T),htmlFlowData:W,htmlText:y(ji,T),htmlTextData:W,image:y(xi),label:T,link:y(Ma),listItem:y(ao),listItemValue:j,listOrdered:y(zs,F),listUnordered:y(zs),paragraph:y(Tr),reference:_t,referenceString:T,resourceDestinationString:T,resourceTitleString:T,setextHeading:y(zr),strong:y(Fn),thematicBreak:y(Un)},exit:{atxHeading:A(),atxHeadingSequence:se,autolink:A(),autolinkEmail:Pt,autolinkProtocol:xt,blockQuote:A(),characterEscapeValue:xe,characterReferenceMarkerHexadecimal:Gt,characterReferenceMarkerNumeric:Gt,characterReferenceValue:ln,codeFenced:A(oe),codeFencedFence:ie,codeFencedFenceInfo:K,codeFencedFenceMeta:ee,codeFlowValue:xe,codeIndented:A(pe),codeText:A(Ie),codeTextData:xe,data:xe,definition:A(),definitionDestinationString:ne,definitionLabelString:be,definitionTitleString:ae,emphasis:A(),hardBreakEscape:A(Fe),hardBreakTrailing:A(Fe),htmlFlow:A(Pe),htmlFlowData:xe,htmlText:A(je),htmlTextData:xe,image:A(Ce),label:Ke,labelText:ke,lineEnding:U,link:A(Se),listItem:A(),listOrdered:A(),listUnordered:A(),paragraph:A(),referenceString:Et,resourceDestinationString:Ft,resourceTitleString:Ne,resource:gn,setextHeading:A(ge),setextHeadingLineSequence:X,setextHeadingText:de,strong:A(),thematicBreak:A()}};fUe(s,(i||{}).mdastExtensions||[]);const u={};return d;function d(At){let wt={type:"root",children:[]};const on={stack:[wt],tokenStack:[],config:s,enter:_,exit:P,buffer:T,resume:R,setData:v,getData:b},fn=[];let An=-1;for(;++An0){const oo=on.tokenStack[on.tokenStack.length-1];(oo[1]||dUe).call(on,void 0,oo[0])}for(wt.position={start:N9(At.length>0?At[0][1].start:{line:1,column:1,offset:0}),end:N9(At.length>0?At[At.length-2][1].end:{line:1,column:1,offset:0})},An=-1;++An{A!==0&&(p++,d.push([])),_.split(" ").forEach(P=>{P&&d[p].push({content:P,type:y})})}):(b.type==="strong"||b.type==="emphasis")&&b.children.forEach(T=>{v(T,b.type)})}return u.forEach(b=>{b.type==="paragraph"&&b.children.forEach(y=>{v(y)})}),d}function DZt(i){const{children:s}=hUe(i);function u(d){return d.type==="text"?d.value.replace(/\n/g,"
    "):d.type==="strong"?`${d.children.map(u).join("")}`:d.type==="emphasis"?`${d.children.map(u).join("")}`:d.type==="paragraph"?`

    ${d.children.map(u).join("")}

    `:`Unsupported markdown: ${d.type}`}return s.map(u).join("")}function IZt(i){return Intl.Segmenter?[...new Intl.Segmenter().segment(i)].map(s=>s.segment):[...i]}function OZt(i,s){const u=IZt(s.content);return gUe(i,[],u,s.type)}function gUe(i,s,u,d){if(u.length===0)return[{content:s.join(""),type:d},{content:"",type:d}];const[p,...v]=u,b=[...s,p];return i([{content:b.join(""),type:d}])?gUe(i,b,v,d):(s.length===0&&p&&(s.push(p),u.shift()),[{content:s.join(""),type:d},{content:u.join(""),type:d}])}function NZt(i,s){if(i.some(({content:u})=>u.includes(` -`)))throw new Error("splitLineToFitWidth does not support newlines in the line");return Bme(i,s)}function Bme(i,s,u=[],d=[]){if(i.length===0)return d.length>0&&u.push(d),u.length>0?u:[];let p="";i[0].content===" "&&(p=" ",i.shift());const v=i.shift()??{content:" ",type:"normal"},b=[...d];if(p!==""&&b.push({content:p,type:"normal"}),b.push(v),s(b))return Bme(i,s,u,b);if(d.length>0)u.push(d),i.unshift(v);else if(v.content){const[y,T]=OZt(s,v);u.push([y]),T.content&&i.unshift(T)}return Bme(i,s,u)}function PZt(i,s){s&&i.attr("style",s)}function BZt(i,s,u,d,p=!1){const v=i.append("foreignObject"),b=v.append("xhtml:div"),y=s.label,T=s.isNode?"nodeLabel":"edgeLabel";b.html(` - "+y+""),PZt(b,s.labelStyle),b.style("display","table-cell"),b.style("white-space","nowrap"),b.style("max-width",u+"px"),b.attr("xmlns","http://www.w3.org/1999/xhtml"),p&&b.attr("class","labelBkg");let _=b.node().getBoundingClientRect();return _.width===u&&(b.style("display","table"),b.style("white-space","break-spaces"),b.style("width",u+"px"),_=b.node().getBoundingClientRect()),v.style("width",_.width),v.style("height",_.height),v.node()}function Fme(i,s,u){return i.append("tspan").attr("class","text-outer-tspan").attr("x",0).attr("y",s*u-.1+"em").attr("dy",u+"em")}function FZt(i,s,u){const d=i.append("text"),p=Fme(d,1,s);Rme(p,u);const v=p.node().getComputedTextLength();return d.remove(),v}function RZt(i,s,u){var b;const d=i.append("text"),p=Fme(d,1,s);Rme(p,[{content:u,type:"normal"}]);const v=(b=p.node())==null?void 0:b.getBoundingClientRect();return v&&d.remove(),v}function jZt(i,s,u,d=!1){const v=s.append("g"),b=v.insert("rect").attr("class","background"),y=v.append("text").attr("y","-10.1");let T=0;for(const _ of u){const A=R=>FZt(v,1.1,R)<=i,P=A(_)?[_]:NZt(_,A);for(const R of P){const F=Fme(y,T,1.1);Rme(F,R),T++}}if(d){const _=y.node().getBBox(),A=2;return b.attr("x",-A).attr("y",-A).attr("width",_.width+2*A).attr("height",_.height+2*A),v.node()}else return y.node()}function Rme(i,s){i.text(""),s.forEach((u,d)=>{const p=i.append("tspan").attr("font-style",u.type==="emphasis"?"italic":"normal").attr("class","text-inner-tspan").attr("font-weight",u.type==="strong"?"bold":"normal");d===0?p.text(u.content):p.text(" "+u.content)})}const JQ=(i,s="",{style:u="",isTitle:d=!1,classes:p="",useHtmlLabels:v=!0,isNode:b=!0,width:y=200,addSvgBackground:T=!1}={})=>{if(Xe.info("createText",s,u,d,p,v,b,T),v){const _=DZt(s),A={isNode:b,label:ZF(_).replace(/fa[blrs]?:fa-[\w-]+/g,R=>``),labelStyle:u.replace("fill:","color:")};return BZt(i,A,y,p,T)}else{const _=MZt(s);return jZt(y,i,_,T)}},g1=async(i,s,u,d)=>{let p;const v=s.useHtmlLabels||f1(qt().flowchart.htmlLabels);u?p=u:p="node default";const b=i.insert("g").attr("class",p).attr("id",s.domId||s.id),y=b.insert("g").attr("class","label").attr("style",s.labelStyle);let T;s.labelText===void 0?T="":T=typeof s.labelText=="string"?s.labelText:s.labelText[0];const _=y.node();let A;s.labelType==="markdown"?A=JQ(y,Yf(ZF(T),qt()),{useHtmlLabels:v,width:s.width||qt().flowchart.wrappingWidth,classes:"markdown-node-label"}):A=_.appendChild($2(Yf(ZF(T),qt()),s.labelStyle,!1,d));let P=A.getBBox();const R=s.padding/2;if(f1(qt().flowchart.htmlLabels)){const F=A.children[0],j=Ir(A),K=F.getElementsByTagName("img");if(K){const ee=T.replace(/]*>/g,"").trim()==="";await Promise.all([...K].map(ie=>new Promise(oe=>{function pe(){if(ie.style.display="flex",ie.style.flexDirection="column",ee){const be=qt().fontSize?qt().fontSize:window.getComputedStyle(document.body).fontSize,ae=5,ne=parseInt(be,10)*ae+"px";ie.style.minWidth=ne,ie.style.maxWidth=ne}else ie.style.width="100%";oe(ie)}setTimeout(()=>{ie.complete&&pe()}),ie.addEventListener("error",pe),ie.addEventListener("load",pe)})))}P=F.getBoundingClientRect(),j.attr("width",P.width),j.attr("height",P.height)}return v?y.attr("transform","translate("+-P.width/2+", "+-P.height/2+")"):y.attr("transform","translate(0, "+-P.height/2+")"),s.centerLabel&&y.attr("transform","translate("+-P.width/2+", "+-P.height/2+")"),y.insert("rect",":first-child"),{shapeSvg:b,bbox:P,halfPadding:R,label:y}},Kh=(i,s)=>{const u=s.node().getBBox();i.width=u.width,i.height=u.height};function r5(i,s,u,d){return i.insert("polygon",":first-child").attr("points",d.map(function(p){return p.x+","+p.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-s/2+","+u/2+")")}let Mo={},V3={},pUe={};const $Zt=()=>{V3={},pUe={},Mo={}},ZQ=(i,s)=>(Xe.trace("In isDescendant",s," ",i," = ",V3[s].includes(i)),!!V3[s].includes(i)),zZt=(i,s)=>(Xe.info("Descendants of ",s," is ",V3[s]),Xe.info("Edge is ",i),i.v===s||i.w===s?!1:V3[s]?V3[s].includes(i.v)||ZQ(i.v,s)||ZQ(i.w,s)||V3[s].includes(i.w):(Xe.debug("Tilt, ",s,",not in descendants"),!1)),bUe=(i,s,u,d)=>{Xe.warn("Copying children of ",i,"root",d,"data",s.node(i),d);const p=s.children(i)||[];i!==d&&p.push(i),Xe.warn("Copying (nodes) clusterId",i,"nodes",p),p.forEach(v=>{if(s.children(v).length>0)bUe(v,s,u,d);else{const b=s.node(v);Xe.info("cp ",v," to ",d," with parent ",i),u.setNode(v,b),d!==s.parent(v)&&(Xe.warn("Setting parent",v,s.parent(v)),u.setParent(v,s.parent(v))),i!==d&&v!==i?(Xe.debug("Setting parent",v,i),u.setParent(v,i)):(Xe.info("In copy ",i,"root",d,"data",s.node(i),d),Xe.debug("Not Setting parent for node=",v,"cluster!==rootId",i!==d,"node!==clusterId",v!==i));const y=s.edges(v);Xe.debug("Copying Edges",y),y.forEach(T=>{Xe.info("Edge",T);const _=s.edge(T.v,T.w,T.name);Xe.info("Edge data",_,d);try{zZt(T,d)?(Xe.info("Copying as ",T.v,T.w,_,T.name),u.setEdge(T.v,T.w,_,T.name),Xe.info("newGraph edges ",u.edges(),u.edge(u.edges()[0]))):Xe.info("Skipping copy of edge ",T.v,"-->",T.w," rootId: ",d," clusterId:",i)}catch(A){Xe.error(A)}})}Xe.debug("Removing node",v),s.removeNode(v)})},mUe=(i,s)=>{const u=s.children(i);let d=[...u];for(const p of u)pUe[p]=i,d=[...d,...mUe(p,s)];return d},MR=(i,s)=>{Xe.trace("Searching",i);const u=s.children(i);if(Xe.trace("Searching children of id ",i,u),u.length<1)return Xe.trace("This is a valid node",i),i;for(const d of u){const p=MR(d,s);if(p)return Xe.trace("Found replacement for",i," => ",p),p}},eJ=i=>!Mo[i]||!Mo[i].externalConnections?i:Mo[i]?Mo[i].id:i,qZt=(i,s)=>{if(!i||s>10){Xe.debug("Opting out, no graph ");return}else Xe.debug("Opting in, graph ");i.nodes().forEach(function(u){i.children(u).length>0&&(Xe.warn("Cluster identified",u," Replacement id in edges: ",MR(u,i)),V3[u]=mUe(u,i),Mo[u]={id:MR(u,i),clusterData:i.node(u)})}),i.nodes().forEach(function(u){const d=i.children(u),p=i.edges();d.length>0?(Xe.debug("Cluster identified",u,V3),p.forEach(v=>{if(v.v!==u&&v.w!==u){const b=ZQ(v.v,u),y=ZQ(v.w,u);b^y&&(Xe.warn("Edge: ",v," leaves cluster ",u),Xe.warn("Descendants of XXX ",u,": ",V3[u]),Mo[u].externalConnections=!0)}})):Xe.debug("Not a cluster ",u,V3)});for(let u of Object.keys(Mo)){const d=Mo[u].id,p=i.parent(d);p!==u&&Mo[p]&&!Mo[p].externalConnections&&(Mo[u].id=p)}i.edges().forEach(function(u){const d=i.edge(u);Xe.warn("Edge "+u.v+" -> "+u.w+": "+JSON.stringify(u)),Xe.warn("Edge "+u.v+" -> "+u.w+": "+JSON.stringify(i.edge(u)));let p=u.v,v=u.w;if(Xe.warn("Fix XXX",Mo,"ids:",u.v,u.w,"Translating: ",Mo[u.v]," --- ",Mo[u.w]),Mo[u.v]&&Mo[u.w]&&Mo[u.v]===Mo[u.w]){Xe.warn("Fixing and trixing link to self - removing XXX",u.v,u.w,u.name),Xe.warn("Fixing and trixing - removing XXX",u.v,u.w,u.name),p=eJ(u.v),v=eJ(u.w),i.removeEdge(u.v,u.w,u.name);const b=u.w+"---"+u.v;i.setNode(b,{domId:b,id:b,labelStyle:"",labelText:d.label,padding:0,shape:"labelRect",style:""});const y=structuredClone(d),T=structuredClone(d);y.label="",y.arrowTypeEnd="none",T.label="",y.fromCluster=u.v,T.toCluster=u.v,i.setEdge(p,b,y,u.name+"-cyclic-special"),i.setEdge(b,v,T,u.name+"-cyclic-special")}else if(Mo[u.v]||Mo[u.w]){if(Xe.warn("Fixing and trixing - removing XXX",u.v,u.w,u.name),p=eJ(u.v),v=eJ(u.w),i.removeEdge(u.v,u.w,u.name),p!==u.v){const b=i.parent(p);Mo[b].externalConnections=!0,d.fromCluster=u.v}if(v!==u.w){const b=i.parent(v);Mo[b].externalConnections=!0,d.toCluster=u.w}Xe.warn("Fix Replacing with XXX",p,v,u.name),i.setEdge(p,v,d,u.name)}}),Xe.warn("Adjusted Graph",q7(i)),vUe(i,0),Xe.trace(Mo)},vUe=(i,s)=>{if(Xe.warn("extractor - ",s,q7(i),i.children("D")),s>10){Xe.error("Bailing out");return}let u=i.nodes(),d=!1;for(const p of u){const v=i.children(p);d=d||v.length>0}if(!d){Xe.debug("Done, no node has children",i.nodes());return}Xe.debug("Nodes = ",u,s);for(const p of u)if(Xe.debug("Extracting node",p,Mo,Mo[p]&&!Mo[p].externalConnections,!i.parent(p),i.node(p),i.children("D")," Depth ",s),!Mo[p])Xe.debug("Not a cluster",p,s);else if(!Mo[p].externalConnections&&i.children(p)&&i.children(p).length>0){Xe.warn("Cluster without external connections, without a parent and with children",p,s);let b=i.graph().rankdir==="TB"?"LR":"TB";Mo[p]&&Mo[p].clusterData&&Mo[p].clusterData.dir&&(b=Mo[p].clusterData.dir,Xe.warn("Fixing dir",Mo[p].clusterData.dir,b));const y=new B0({multigraph:!0,compound:!0}).setGraph({rankdir:b,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});Xe.warn("Old graph before copy",q7(i)),bUe(p,i,y,p),i.setNode(p,{clusterNode:!0,id:p,clusterData:Mo[p].clusterData,labelText:Mo[p].labelText,graph:y}),Xe.warn("New graph after copy node: (",p,")",q7(y)),Xe.debug("Old graph after copy",q7(i))}else Xe.warn("Cluster ** ",p," **not meeting the criteria !externalConnections:",!Mo[p].externalConnections," no parent: ",!i.parent(p)," children ",i.children(p)&&i.children(p).length>0,i.children("D"),s),Xe.debug(Mo);u=i.nodes(),Xe.warn("New list of nodes",u);for(const p of u){const v=i.node(p);Xe.warn(" Now next level",p,v),v.clusterNode&&vUe(v.graph,s+1)}},wUe=(i,s)=>{if(s.length===0)return[];let u=Object.assign(s);return s.forEach(d=>{const p=i.children(d),v=wUe(i,p);u=[...u,...v]}),u},HZt=i=>wUe(i,i.children());function VZt(i,s){return i.intersect(s)}function yUe(i,s,u,d){var p=i.x,v=i.y,b=p-d.x,y=v-d.y,T=Math.sqrt(s*s*y*y+u*u*b*b),_=Math.abs(s*u*b/T);d.x0}function KZt(i,s,u){var d=i.x,p=i.y,v=[],b=Number.POSITIVE_INFINITY,y=Number.POSITIVE_INFINITY;typeof s.forEach=="function"?s.forEach(function(j){b=Math.min(b,j.x),y=Math.min(y,j.y)}):(b=Math.min(b,s.x),y=Math.min(y,s.y));for(var T=d-i.width/2-b,_=p-i.height/2-y,A=0;A1&&v.sort(function(j,K){var ee=j.x-u.x,ie=j.y-u.y,oe=Math.sqrt(ee*ee+ie*ie),pe=K.x-u.x,be=K.y-u.y,ae=Math.sqrt(pe*pe+be*be);return oe{var u=i.x,d=i.y,p=s.x-u,v=s.y-d,b=i.width/2,y=i.height/2,T,_;return Math.abs(v)*b>Math.abs(p)*y?(v<0&&(y=-y),T=v===0?0:y*p/v,_=y):(p<0&&(b=-b),T=b,_=p===0?0:b*v/p),{x:u+T,y:d+_}},yh={node:VZt,circle:UZt,ellipse:yUe,polygon:KZt,rect:DR},WZt=async(i,s)=>{s.useHtmlLabels||qt().flowchart.htmlLabels||(s.centerLabel=!0);const{shapeSvg:d,bbox:p,halfPadding:v}=await g1(i,s,"node "+s.classes,!0);Xe.info("Classes = ",s.classes);const b=d.insert("rect",":first-child");return b.attr("rx",s.rx).attr("ry",s.ry).attr("x",-p.width/2-v).attr("y",-p.height/2-v).attr("width",p.width+s.padding).attr("height",p.height+s.padding),Kh(s,b),s.intersect=function(y){return yh.rect(s,y)},d},YZt=i=>{const s=new Set;for(const u of i)switch(u){case"x":s.add("right"),s.add("left");break;case"y":s.add("up"),s.add("down");break;default:s.add(u);break}return s},XZt=(i,s,u)=>{const d=YZt(i),p=2,v=s.height+2*u.padding,b=v/p,y=s.width+2*b+u.padding,T=u.padding/2;return d.has("right")&&d.has("left")&&d.has("up")&&d.has("down")?[{x:0,y:0},{x:b,y:0},{x:y/2,y:2*T},{x:y-b,y:0},{x:y,y:0},{x:y,y:-v/3},{x:y+2*T,y:-v/2},{x:y,y:-2*v/3},{x:y,y:-v},{x:y-b,y:-v},{x:y/2,y:-v-2*T},{x:b,y:-v},{x:0,y:-v},{x:0,y:-2*v/3},{x:-2*T,y:-v/2},{x:0,y:-v/3}]:d.has("right")&&d.has("left")&&d.has("up")?[{x:b,y:0},{x:y-b,y:0},{x:y,y:-v/2},{x:y-b,y:-v},{x:b,y:-v},{x:0,y:-v/2}]:d.has("right")&&d.has("left")&&d.has("down")?[{x:0,y:0},{x:b,y:-v},{x:y-b,y:-v},{x:y,y:0}]:d.has("right")&&d.has("up")&&d.has("down")?[{x:0,y:0},{x:y,y:-b},{x:y,y:-v+b},{x:0,y:-v}]:d.has("left")&&d.has("up")&&d.has("down")?[{x:y,y:0},{x:0,y:-b},{x:0,y:-v+b},{x:y,y:-v}]:d.has("right")&&d.has("left")?[{x:b,y:0},{x:b,y:-T},{x:y-b,y:-T},{x:y-b,y:0},{x:y,y:-v/2},{x:y-b,y:-v},{x:y-b,y:-v+T},{x:b,y:-v+T},{x:b,y:-v},{x:0,y:-v/2}]:d.has("up")&&d.has("down")?[{x:y/2,y:0},{x:0,y:-T},{x:b,y:-T},{x:b,y:-v+T},{x:0,y:-v+T},{x:y/2,y:-v},{x:y,y:-v+T},{x:y-b,y:-v+T},{x:y-b,y:-T},{x:y,y:-T}]:d.has("right")&&d.has("up")?[{x:0,y:0},{x:y,y:-b},{x:0,y:-v}]:d.has("right")&&d.has("down")?[{x:0,y:0},{x:y,y:0},{x:0,y:-v}]:d.has("left")&&d.has("up")?[{x:y,y:0},{x:0,y:-b},{x:y,y:-v}]:d.has("left")&&d.has("down")?[{x:y,y:0},{x:0,y:0},{x:y,y:-v}]:d.has("right")?[{x:b,y:-T},{x:b,y:-T},{x:y-b,y:-T},{x:y-b,y:0},{x:y,y:-v/2},{x:y-b,y:-v},{x:y-b,y:-v+T},{x:b,y:-v+T},{x:b,y:-v+T}]:d.has("left")?[{x:b,y:0},{x:b,y:-T},{x:y-b,y:-T},{x:y-b,y:-v+T},{x:b,y:-v+T},{x:b,y:-v},{x:0,y:-v/2}]:d.has("up")?[{x:b,y:-T},{x:b,y:-v+T},{x:0,y:-v+T},{x:y/2,y:-v},{x:y,y:-v+T},{x:y-b,y:-v+T},{x:y-b,y:-T}]:d.has("down")?[{x:y/2,y:0},{x:0,y:-T},{x:b,y:-T},{x:b,y:-v+T},{x:y-b,y:-v+T},{x:y-b,y:-T},{x:y,y:-T}]:[{x:0,y:0}]},kUe=i=>i?" "+i:"",dm=(i,s)=>`${s||"node default"}${kUe(i.classes)} ${kUe(i.class)}`,EUe=async(i,s)=>{const{shapeSvg:u,bbox:d}=await g1(i,s,dm(s,void 0),!0),p=d.width+s.padding,v=d.height+s.padding,b=p+v,y=[{x:b/2,y:0},{x:b,y:-b/2},{x:b/2,y:-b},{x:0,y:-b/2}];Xe.info("Question main (Circle)");const T=r5(u,b,b,y);return T.attr("style",s.style),Kh(s,T),s.intersect=function(_){return Xe.warn("Intersect called"),yh.polygon(s,y,_)},u},QZt=(i,s)=>{const u=i.insert("g").attr("class","node default").attr("id",s.domId||s.id),d=28,p=[{x:0,y:d/2},{x:d/2,y:0},{x:0,y:-d/2},{x:-d/2,y:0}];return u.insert("polygon",":first-child").attr("points",p.map(function(b){return b.x+","+b.y}).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),s.width=28,s.height=28,s.intersect=function(b){return yh.circle(s,14,b)},u},JZt=async(i,s)=>{const{shapeSvg:u,bbox:d}=await g1(i,s,dm(s,void 0),!0),p=4,v=d.height+s.padding,b=v/p,y=d.width+2*b+s.padding,T=[{x:b,y:0},{x:y-b,y:0},{x:y,y:-v/2},{x:y-b,y:-v},{x:b,y:-v},{x:0,y:-v/2}],_=r5(u,y,v,T);return _.attr("style",s.style),Kh(s,_),s.intersect=function(A){return yh.polygon(s,T,A)},u},ZZt=async(i,s)=>{const{shapeSvg:u,bbox:d}=await g1(i,s,void 0,!0),p=2,v=d.height+2*s.padding,b=v/p,y=d.width+2*b+s.padding,T=XZt(s.directions,d,s),_=r5(u,y,v,T);return _.attr("style",s.style),Kh(s,_),s.intersect=function(A){return yh.polygon(s,T,A)},u},een=async(i,s)=>{const{shapeSvg:u,bbox:d}=await g1(i,s,dm(s,void 0),!0),p=d.width+s.padding,v=d.height+s.padding,b=[{x:-v/2,y:0},{x:p,y:0},{x:p,y:-v},{x:-v/2,y:-v},{x:0,y:-v/2}];return r5(u,p,v,b).attr("style",s.style),s.width=p+v,s.height=v,s.intersect=function(T){return yh.polygon(s,b,T)},u},ten=async(i,s)=>{const{shapeSvg:u,bbox:d}=await g1(i,s,dm(s),!0),p=d.width+s.padding,v=d.height+s.padding,b=[{x:-2*v/6,y:0},{x:p-v/6,y:0},{x:p+2*v/6,y:-v},{x:v/6,y:-v}],y=r5(u,p,v,b);return y.attr("style",s.style),Kh(s,y),s.intersect=function(T){return yh.polygon(s,b,T)},u},nen=async(i,s)=>{const{shapeSvg:u,bbox:d}=await g1(i,s,dm(s,void 0),!0),p=d.width+s.padding,v=d.height+s.padding,b=[{x:2*v/6,y:0},{x:p+v/6,y:0},{x:p-2*v/6,y:-v},{x:-v/6,y:-v}],y=r5(u,p,v,b);return y.attr("style",s.style),Kh(s,y),s.intersect=function(T){return yh.polygon(s,b,T)},u},ren=async(i,s)=>{const{shapeSvg:u,bbox:d}=await g1(i,s,dm(s,void 0),!0),p=d.width+s.padding,v=d.height+s.padding,b=[{x:-2*v/6,y:0},{x:p+2*v/6,y:0},{x:p-v/6,y:-v},{x:v/6,y:-v}],y=r5(u,p,v,b);return y.attr("style",s.style),Kh(s,y),s.intersect=function(T){return yh.polygon(s,b,T)},u},ien=async(i,s)=>{const{shapeSvg:u,bbox:d}=await g1(i,s,dm(s,void 0),!0),p=d.width+s.padding,v=d.height+s.padding,b=[{x:v/6,y:0},{x:p-v/6,y:0},{x:p+2*v/6,y:-v},{x:-2*v/6,y:-v}],y=r5(u,p,v,b);return y.attr("style",s.style),Kh(s,y),s.intersect=function(T){return yh.polygon(s,b,T)},u},sen=async(i,s)=>{const{shapeSvg:u,bbox:d}=await g1(i,s,dm(s,void 0),!0),p=d.width+s.padding,v=d.height+s.padding,b=[{x:0,y:0},{x:p+v/2,y:0},{x:p,y:-v/2},{x:p+v/2,y:-v},{x:0,y:-v}],y=r5(u,p,v,b);return y.attr("style",s.style),Kh(s,y),s.intersect=function(T){return yh.polygon(s,b,T)},u},aen=async(i,s)=>{const{shapeSvg:u,bbox:d}=await g1(i,s,dm(s,void 0),!0),p=d.width+s.padding,v=p/2,b=v/(2.5+p/50),y=d.height+b+s.padding,T="M 0,"+b+" a "+v+","+b+" 0,0,0 "+p+" 0 a "+v+","+b+" 0,0,0 "+-p+" 0 l 0,"+y+" a "+v+","+b+" 0,0,0 "+p+" 0 l 0,"+-y,_=u.attr("label-offset-y",b).insert("path",":first-child").attr("style",s.style).attr("d",T).attr("transform","translate("+-p/2+","+-(y/2+b)+")");return Kh(s,_),s.intersect=function(A){const P=yh.rect(s,A),R=P.x-s.x;if(v!=0&&(Math.abs(R)s.height/2-b)){let F=b*b*(1-R*R/(v*v));F!=0&&(F=Math.sqrt(F)),F=b-F,A.y-s.y>0&&(F=-F),P.y+=F}return P},u},oen=async(i,s)=>{const{shapeSvg:u,bbox:d,halfPadding:p}=await g1(i,s,"node "+s.classes+" "+s.class,!0),v=u.insert("rect",":first-child"),b=s.positioned?s.width:d.width+s.padding,y=s.positioned?s.height:d.height+s.padding,T=s.positioned?-b/2:-d.width/2-p,_=s.positioned?-y/2:-d.height/2-p;if(v.attr("class","basic label-container").attr("style",s.style).attr("rx",s.rx).attr("ry",s.ry).attr("x",T).attr("y",_).attr("width",b).attr("height",y),s.props){const A=new Set(Object.keys(s.props));s.props.borders&&(jme(v,s.props.borders,b,y),A.delete("borders")),A.forEach(P=>{Xe.warn(`Unknown node property ${P}`)})}return Kh(s,v),s.intersect=function(A){return yh.rect(s,A)},u},cen=async(i,s)=>{const{shapeSvg:u,bbox:d,halfPadding:p}=await g1(i,s,"node "+s.classes,!0),v=u.insert("rect",":first-child"),b=s.positioned?s.width:d.width+s.padding,y=s.positioned?s.height:d.height+s.padding,T=s.positioned?-b/2:-d.width/2-p,_=s.positioned?-y/2:-d.height/2-p;if(v.attr("class","basic cluster composite label-container").attr("style",s.style).attr("rx",s.rx).attr("ry",s.ry).attr("x",T).attr("y",_).attr("width",b).attr("height",y),s.props){const A=new Set(Object.keys(s.props));s.props.borders&&(jme(v,s.props.borders,b,y),A.delete("borders")),A.forEach(P=>{Xe.warn(`Unknown node property ${P}`)})}return Kh(s,v),s.intersect=function(A){return yh.rect(s,A)},u},uen=async(i,s)=>{const{shapeSvg:u}=await g1(i,s,"label",!0);Xe.trace("Classes = ",s.class);const d=u.insert("rect",":first-child"),p=0,v=0;if(d.attr("width",p).attr("height",v),u.attr("class","label edgeLabel"),s.props){const b=new Set(Object.keys(s.props));s.props.borders&&(jme(d,s.props.borders,p,v),b.delete("borders")),b.forEach(y=>{Xe.warn(`Unknown node property ${y}`)})}return Kh(s,d),s.intersect=function(b){return yh.rect(s,b)},u};function jme(i,s,u,d){const p=[],v=y=>{p.push(y,0)},b=y=>{p.push(0,y)};s.includes("t")?(Xe.debug("add top border"),v(u)):b(u),s.includes("r")?(Xe.debug("add right border"),v(d)):b(d),s.includes("b")?(Xe.debug("add bottom border"),v(u)):b(u),s.includes("l")?(Xe.debug("add left border"),v(d)):b(d),i.attr("stroke-dasharray",p.join(" "))}const len=(i,s)=>{let u;s.classes?u="node "+s.classes:u="node default";const d=i.insert("g").attr("class",u).attr("id",s.domId||s.id),p=d.insert("rect",":first-child"),v=d.insert("line"),b=d.insert("g").attr("class","label"),y=s.labelText.flat?s.labelText.flat():s.labelText;let T="";typeof y=="object"?T=y[0]:T=y,Xe.info("Label text abc79",T,y,typeof y=="object");const _=b.node().appendChild($2(T,s.labelStyle,!0,!0));let A={width:0,height:0};if(f1(qt().flowchart.htmlLabels)){const K=_.children[0],ee=Ir(_);A=K.getBoundingClientRect(),ee.attr("width",A.width),ee.attr("height",A.height)}Xe.info("Text 2",y);const P=y.slice(1,y.length);let R=_.getBBox();const F=b.node().appendChild($2(P.join?P.join("
    "):P,s.labelStyle,!0,!0));if(f1(qt().flowchart.htmlLabels)){const K=F.children[0],ee=Ir(F);A=K.getBoundingClientRect(),ee.attr("width",A.width),ee.attr("height",A.height)}const j=s.padding/2;return Ir(F).attr("transform","translate( "+(A.width>R.width?0:(R.width-A.width)/2)+", "+(R.height+j+5)+")"),Ir(_).attr("transform","translate( "+(A.width{const{shapeSvg:u,bbox:d}=await g1(i,s,dm(s,void 0),!0),p=d.height+s.padding,v=d.width+p/4+s.padding,b=u.insert("rect",":first-child").attr("style",s.style).attr("rx",p/2).attr("ry",p/2).attr("x",-v/2).attr("y",-p/2).attr("width",v).attr("height",p);return Kh(s,b),s.intersect=function(y){return yh.rect(s,y)},u},fen=async(i,s)=>{const{shapeSvg:u,bbox:d,halfPadding:p}=await g1(i,s,dm(s,void 0),!0),v=u.insert("circle",":first-child");return v.attr("style",s.style).attr("rx",s.rx).attr("ry",s.ry).attr("r",d.width/2+p).attr("width",d.width+s.padding).attr("height",d.height+s.padding),Xe.info("Circle main"),Kh(s,v),s.intersect=function(b){return Xe.info("Circle intersect",s,d.width/2+p,b),yh.circle(s,d.width/2+p,b)},u},den=async(i,s)=>{const{shapeSvg:u,bbox:d,halfPadding:p}=await g1(i,s,dm(s,void 0),!0),v=5,b=u.insert("g",":first-child"),y=b.insert("circle"),T=b.insert("circle");return b.attr("class",s.class),y.attr("style",s.style).attr("rx",s.rx).attr("ry",s.ry).attr("r",d.width/2+p+v).attr("width",d.width+s.padding+v*2).attr("height",d.height+s.padding+v*2),T.attr("style",s.style).attr("rx",s.rx).attr("ry",s.ry).attr("r",d.width/2+p).attr("width",d.width+s.padding).attr("height",d.height+s.padding),Xe.info("DoubleCircle main"),Kh(s,y),s.intersect=function(_){return Xe.info("DoubleCircle intersect",s,d.width/2+p+v,_),yh.circle(s,d.width/2+p+v,_)},u},gen=async(i,s)=>{const{shapeSvg:u,bbox:d}=await g1(i,s,dm(s,void 0),!0),p=d.width+s.padding,v=d.height+s.padding,b=[{x:0,y:0},{x:p,y:0},{x:p,y:-v},{x:0,y:-v},{x:0,y:0},{x:-8,y:0},{x:p+8,y:0},{x:p+8,y:-v},{x:-8,y:-v},{x:-8,y:0}],y=r5(u,p,v,b);return y.attr("style",s.style),Kh(s,y),s.intersect=function(T){return yh.polygon(s,b,T)},u},pen=(i,s)=>{const u=i.insert("g").attr("class","node default").attr("id",s.domId||s.id),d=u.insert("circle",":first-child");return d.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),Kh(s,d),s.intersect=function(p){return yh.circle(s,7,p)},u},TUe=(i,s,u)=>{const d=i.insert("g").attr("class","node default").attr("id",s.domId||s.id);let p=70,v=10;u==="LR"&&(p=10,v=70);const b=d.append("rect").attr("x",-1*p/2).attr("y",-1*v/2).attr("width",p).attr("height",v).attr("class","fork-join");return Kh(s,b),s.height=s.height+s.padding/2,s.width=s.width+s.padding/2,s.intersect=function(y){return yh.rect(s,y)},d},CUe={rhombus:EUe,composite:cen,question:EUe,rect:oen,labelRect:uen,rectWithTitle:len,choice:QZt,circle:fen,doublecircle:den,stadium:hen,hexagon:JZt,block_arrow:ZZt,rect_left_inv_arrow:een,lean_right:ten,lean_left:nen,trapezoid:ren,inv_trapezoid:ien,rect_right_inv_arrow:sen,cylinder:aen,start:pen,end:(i,s)=>{const u=i.insert("g").attr("class","node default").attr("id",s.domId||s.id),d=u.insert("circle",":first-child"),p=u.insert("circle",":first-child");return p.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),d.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),Kh(s,p),s.intersect=function(v){return yh.circle(s,7,v)},u},note:WZt,subroutine:gen,fork:TUe,join:TUe,class_box:(i,s)=>{const u=s.padding/2,d=4,p=8;let v;s.classes?v="node "+s.classes:v="node default";const b=i.insert("g").attr("class",v).attr("id",s.domId||s.id),y=b.insert("rect",":first-child"),T=b.insert("line"),_=b.insert("line");let A=0,P=d;const R=b.insert("g").attr("class","label");let F=0;const j=s.classData.annotations&&s.classData.annotations[0],K=s.classData.annotations[0]?"«"+s.classData.annotations[0]+"»":"",ee=R.node().appendChild($2(K,s.labelStyle,!0,!0));let ie=ee.getBBox();if(f1(qt().flowchart.htmlLabels)){const de=ee.children[0],X=Ir(ee);ie=de.getBoundingClientRect(),X.attr("width",ie.width),X.attr("height",ie.height)}s.classData.annotations[0]&&(P+=ie.height+d,A+=ie.width);let oe=s.classData.label;s.classData.type!==void 0&&s.classData.type!==""&&(qt().flowchart.htmlLabels?oe+="<"+s.classData.type+">":oe+="<"+s.classData.type+">");const pe=R.node().appendChild($2(oe,s.labelStyle,!0,!0));Ir(pe).attr("class","classTitle");let be=pe.getBBox();if(f1(qt().flowchart.htmlLabels)){const de=pe.children[0],X=Ir(pe);be=de.getBoundingClientRect(),X.attr("width",be.width),X.attr("height",be.height)}P+=be.height+d,be.width>A&&(A=be.width);const ae=[];s.classData.members.forEach(de=>{const X=de.getDisplayDetails();let ge=X.displayText;qt().flowchart.htmlLabels&&(ge=ge.replace(//g,">"));const W=R.node().appendChild($2(ge,X.cssStyle?X.cssStyle:s.labelStyle,!0,!0));let xe=W.getBBox();if(f1(qt().flowchart.htmlLabels)){const U=W.children[0],Fe=Ir(W);xe=U.getBoundingClientRect(),Fe.attr("width",xe.width),Fe.attr("height",xe.height)}xe.width>A&&(A=xe.width),P+=xe.height+d,ae.push(W)}),P+=p;const ne=[];if(s.classData.methods.forEach(de=>{const X=de.getDisplayDetails();let ge=X.displayText;qt().flowchart.htmlLabels&&(ge=ge.replace(//g,">"));const W=R.node().appendChild($2(ge,X.cssStyle?X.cssStyle:s.labelStyle,!0,!0));let xe=W.getBBox();if(f1(qt().flowchart.htmlLabels)){const U=W.children[0],Fe=Ir(W);xe=U.getBoundingClientRect(),Fe.attr("width",xe.width),Fe.attr("height",xe.height)}xe.width>A&&(A=xe.width),P+=xe.height+d,ne.push(W)}),P+=p,j){let de=(A-ie.width)/2;Ir(ee).attr("transform","translate( "+(-1*A/2+de)+", "+-1*P/2+")"),F=ie.height+d}let se=(A-be.width)/2;return Ir(pe).attr("transform","translate( "+(-1*A/2+se)+", "+(-1*P/2+F)+")"),F+=be.height+d,T.attr("class","divider").attr("x1",-A/2-u).attr("x2",A/2+u).attr("y1",-P/2-u+p+F).attr("y2",-P/2-u+p+F),F+=p,ae.forEach(de=>{Ir(de).attr("transform","translate( "+-A/2+", "+(-1*P/2+F+p/2)+")");const X=de==null?void 0:de.getBBox();F+=((X==null?void 0:X.height)??0)+d}),F+=p,_.attr("class","divider").attr("x1",-A/2-u).attr("x2",A/2+u).attr("y1",-P/2-u+p+F).attr("y2",-P/2-u+p+F),F+=p,ne.forEach(de=>{Ir(de).attr("transform","translate( "+-A/2+", "+(-1*P/2+F)+")");const X=de==null?void 0:de.getBBox();F+=((X==null?void 0:X.height)??0)+d}),y.attr("style",s.style).attr("class","outer title-state").attr("x",-A/2-u).attr("y",-(P/2)-u).attr("width",A+s.padding).attr("height",P+s.padding),Kh(s,y),s.intersect=function(de){return yh.rect(s,de)},b}};let VD={};const tJ=async(i,s,u)=>{let d,p;if(s.link){let v;qt().securityLevel==="sandbox"?v="_top":s.linkTarget&&(v=s.linkTarget||"_blank"),d=i.insert("svg:a").attr("xlink:href",s.link).attr("target",v),p=await CUe[s.shape](d,s,u)}else p=await CUe[s.shape](i,s,u),d=p;return s.tooltip&&p.attr("title",s.tooltip),s.class&&p.attr("class","node default "+s.class),d.attr("data-node","true"),d.attr("data-id",s.id),VD[s.id]=d,s.haveCallback&&VD[s.id].attr("class",VD[s.id].attr("class")+" clickable"),d},ben=(i,s)=>{VD[s.id]=i},men=()=>{VD={}},$me=i=>{const s=VD[i.id];Xe.trace("Transforming node",i.diff,i,"translate("+(i.x-i.width/2-5)+", "+i.width/2+")");const u=8,d=i.diff||0;return i.clusterNode?s.attr("transform","translate("+(i.x+d-i.width/2)+", "+(i.y-i.height/2-u)+")"):s.attr("transform","translate("+i.x+", "+i.y+")"),d},nJ=({flowchart:i})=>{var p,v;const s=((p=i==null?void 0:i.subGraphTitleMargin)==null?void 0:p.top)??0,u=((v=i==null?void 0:i.subGraphTitleMargin)==null?void 0:v.bottom)??0,d=s+u;return{subGraphTitleTopMargin:s,subGraphTitleBottomMargin:u,subGraphTitleTotalMargin:d}},ven={rect:(i,s)=>{Xe.info("Creating subgraph rect for ",s.id,s);const u=qt(),d=i.insert("g").attr("class","cluster"+(s.class?" "+s.class:"")).attr("id",s.id),p=d.insert("rect",":first-child"),v=f1(u.flowchart.htmlLabels),b=d.insert("g").attr("class","cluster-label"),y=s.labelType==="markdown"?JQ(b,s.labelText,{style:s.labelStyle,useHtmlLabels:v}):b.node().appendChild($2(s.labelText,s.labelStyle,void 0,!0));let T=y.getBBox();if(f1(u.flowchart.htmlLabels)){const j=y.children[0],K=Ir(y);T=j.getBoundingClientRect(),K.attr("width",T.width),K.attr("height",T.height)}const _=0*s.padding,A=_/2,P=s.width<=T.width+_?T.width+_:s.width;s.width<=T.width+_?s.diff=(T.width-s.width)/2-s.padding/2:s.diff=-s.padding/2,Xe.trace("Data ",s,JSON.stringify(s)),p.attr("style",s.style).attr("rx",s.rx).attr("ry",s.ry).attr("x",s.x-P/2).attr("y",s.y-s.height/2-A).attr("width",P).attr("height",s.height+_);const{subGraphTitleTopMargin:R}=nJ(u);v?b.attr("transform",`translate(${s.x-T.width/2}, ${s.y-s.height/2+R})`):b.attr("transform",`translate(${s.x}, ${s.y-s.height/2+R})`);const F=p.node().getBBox();return s.width=F.width,s.height=F.height,s.intersect=function(j){return DR(s,j)},d},roundedWithTitle:(i,s)=>{const u=qt(),d=i.insert("g").attr("class",s.classes).attr("id",s.id),p=d.insert("rect",":first-child"),v=d.insert("g").attr("class","cluster-label"),b=d.append("rect"),y=v.node().appendChild($2(s.labelText,s.labelStyle,void 0,!0));let T=y.getBBox();if(f1(u.flowchart.htmlLabels)){const j=y.children[0],K=Ir(y);T=j.getBoundingClientRect(),K.attr("width",T.width),K.attr("height",T.height)}T=y.getBBox();const _=0*s.padding,A=_/2,P=s.width<=T.width+s.padding?T.width+s.padding:s.width;s.width<=T.width+s.padding?s.diff=(T.width+s.padding*0-s.width)/2:s.diff=-s.padding/2,p.attr("class","outer").attr("x",s.x-P/2-A).attr("y",s.y-s.height/2-A).attr("width",P+_).attr("height",s.height+_),b.attr("class","inner").attr("x",s.x-P/2-A).attr("y",s.y-s.height/2-A+T.height-1).attr("width",P+_).attr("height",s.height+_-T.height-3);const{subGraphTitleTopMargin:R}=nJ(u);v.attr("transform",`translate(${s.x-T.width/2}, ${s.y-s.height/2-s.padding/3+(f1(u.flowchart.htmlLabels)?5:3)+R})`);const F=p.node().getBBox();return s.height=F.height,s.intersect=function(j){return DR(s,j)},d},noteGroup:(i,s)=>{const u=i.insert("g").attr("class","note-cluster").attr("id",s.id),d=u.insert("rect",":first-child"),p=0*s.padding,v=p/2;d.attr("rx",s.rx).attr("ry",s.ry).attr("x",s.x-s.width/2-v).attr("y",s.y-s.height/2-v).attr("width",s.width+p).attr("height",s.height+p).attr("fill","none");const b=d.node().getBBox();return s.width=b.width,s.height=b.height,s.intersect=function(y){return DR(s,y)},u},divider:(i,s)=>{const u=i.insert("g").attr("class",s.classes).attr("id",s.id),d=u.insert("rect",":first-child"),p=0*s.padding,v=p/2;d.attr("class","divider").attr("x",s.x-s.width/2-v).attr("y",s.y-s.height/2).attr("width",s.width+p).attr("height",s.height+p);const b=d.node().getBBox();return s.width=b.width,s.height=b.height,s.diff=-s.padding/2,s.intersect=function(y){return DR(s,y)},u}};let SUe={};const wen=(i,s)=>{Xe.trace("Inserting cluster");const u=s.shape||"rect";SUe[s.id]=ven[u](i,s)},yen=()=>{SUe={}},P9={aggregation:18,extension:18,composition:18,dependency:6,lollipop:13.5,arrow_point:5.3};function rJ(i,s){if(i===void 0||s===void 0)return{angle:0,deltaX:0,deltaY:0};i=iJ(i),s=iJ(s);const[u,d]=[i.x,i.y],[p,v]=[s.x,s.y],b=p-u,y=v-d;return{angle:Math.atan(y/b),deltaX:b,deltaY:y}}const iJ=i=>Array.isArray(i)?{x:i[0],y:i[1]}:i,_Ue=i=>({x:function(s,u,d){let p=0;if(u===0&&Object.hasOwn(P9,i.arrowTypeStart)){const{angle:v,deltaX:b}=rJ(d[0],d[1]);p=P9[i.arrowTypeStart]*Math.cos(v)*(b>=0?1:-1)}else if(u===d.length-1&&Object.hasOwn(P9,i.arrowTypeEnd)){const{angle:v,deltaX:b}=rJ(d[d.length-1],d[d.length-2]);p=P9[i.arrowTypeEnd]*Math.cos(v)*(b>=0?1:-1)}return iJ(s).x+p},y:function(s,u,d){let p=0;if(u===0&&Object.hasOwn(P9,i.arrowTypeStart)){const{angle:v,deltaY:b}=rJ(d[0],d[1]);p=P9[i.arrowTypeStart]*Math.abs(Math.sin(v))*(b>=0?1:-1)}else if(u===d.length-1&&Object.hasOwn(P9,i.arrowTypeEnd)){const{angle:v,deltaY:b}=rJ(d[d.length-1],d[d.length-2]);p=P9[i.arrowTypeEnd]*Math.abs(Math.sin(v))*(b>=0?1:-1)}return iJ(s).y+p}}),AUe=(i,s,u,d,p)=>{s.arrowTypeStart&&LUe(i,"start",s.arrowTypeStart,u,d,p),s.arrowTypeEnd&&LUe(i,"end",s.arrowTypeEnd,u,d,p)},xen={arrow_cross:"cross",arrow_point:"point",arrow_barb:"barb",arrow_circle:"circle",aggregation:"aggregation",extension:"extension",composition:"composition",dependency:"dependency",lollipop:"lollipop"},LUe=(i,s,u,d,p,v)=>{const b=xen[u];if(!b){Xe.warn(`Unknown arrow type: ${u}`);return}const y=s==="start"?"Start":"End";i.attr(`marker-${s}`,`url(${d}#${p}_${v}-${b}${y})`)};let sJ={},Vd={};const ken=()=>{sJ={},Vd={}},zme=(i,s)=>{const u=f1(qt().flowchart.htmlLabels),d=s.labelType==="markdown"?JQ(i,s.label,{style:s.labelStyle,useHtmlLabels:u,addSvgBackground:!0}):$2(s.label,s.labelStyle),p=i.insert("g").attr("class","edgeLabel"),v=p.insert("g").attr("class","label");v.node().appendChild(d);let b=d.getBBox();if(u){const T=d.children[0],_=Ir(d);b=T.getBoundingClientRect(),_.attr("width",b.width),_.attr("height",b.height)}v.attr("transform","translate("+-b.width/2+", "+-b.height/2+")"),sJ[s.id]=p,s.width=b.width,s.height=b.height;let y;if(s.startLabelLeft){const T=$2(s.startLabelLeft,s.labelStyle),_=i.insert("g").attr("class","edgeTerminals"),A=_.insert("g").attr("class","inner");y=A.node().appendChild(T);const P=T.getBBox();A.attr("transform","translate("+-P.width/2+", "+-P.height/2+")"),Vd[s.id]||(Vd[s.id]={}),Vd[s.id].startLeft=_,aJ(y,s.startLabelLeft)}if(s.startLabelRight){const T=$2(s.startLabelRight,s.labelStyle),_=i.insert("g").attr("class","edgeTerminals"),A=_.insert("g").attr("class","inner");y=_.node().appendChild(T),A.node().appendChild(T);const P=T.getBBox();A.attr("transform","translate("+-P.width/2+", "+-P.height/2+")"),Vd[s.id]||(Vd[s.id]={}),Vd[s.id].startRight=_,aJ(y,s.startLabelRight)}if(s.endLabelLeft){const T=$2(s.endLabelLeft,s.labelStyle),_=i.insert("g").attr("class","edgeTerminals"),A=_.insert("g").attr("class","inner");y=A.node().appendChild(T);const P=T.getBBox();A.attr("transform","translate("+-P.width/2+", "+-P.height/2+")"),_.node().appendChild(T),Vd[s.id]||(Vd[s.id]={}),Vd[s.id].endLeft=_,aJ(y,s.endLabelLeft)}if(s.endLabelRight){const T=$2(s.endLabelRight,s.labelStyle),_=i.insert("g").attr("class","edgeTerminals"),A=_.insert("g").attr("class","inner");y=A.node().appendChild(T);const P=T.getBBox();A.attr("transform","translate("+-P.width/2+", "+-P.height/2+")"),_.node().appendChild(T),Vd[s.id]||(Vd[s.id]={}),Vd[s.id].endRight=_,aJ(y,s.endLabelRight)}return d};function aJ(i,s){qt().flowchart.htmlLabels&&i&&(i.style.width=s.length*9+"px",i.style.height="12px")}const MUe=(i,s)=>{Xe.debug("Moving label abc88 ",i.id,i.label,sJ[i.id],s);let u=s.updatedPath?s.updatedPath:s.originalPath;const d=qt(),{subGraphTitleTotalMargin:p}=nJ(d);if(i.label){const v=sJ[i.id];let b=i.x,y=i.y;if(u){const T=Ao.calcLabelPosition(u);Xe.debug("Moving label "+i.label+" from (",b,",",y,") to (",T.x,",",T.y,") abc88"),s.updatedPath&&(b=T.x,y=T.y)}v.attr("transform",`translate(${b}, ${y+p/2})`)}if(i.startLabelLeft){const v=Vd[i.id].startLeft;let b=i.x,y=i.y;if(u){const T=Ao.calcTerminalLabelPosition(i.arrowTypeStart?10:0,"start_left",u);b=T.x,y=T.y}v.attr("transform",`translate(${b}, ${y})`)}if(i.startLabelRight){const v=Vd[i.id].startRight;let b=i.x,y=i.y;if(u){const T=Ao.calcTerminalLabelPosition(i.arrowTypeStart?10:0,"start_right",u);b=T.x,y=T.y}v.attr("transform",`translate(${b}, ${y})`)}if(i.endLabelLeft){const v=Vd[i.id].endLeft;let b=i.x,y=i.y;if(u){const T=Ao.calcTerminalLabelPosition(i.arrowTypeEnd?10:0,"end_left",u);b=T.x,y=T.y}v.attr("transform",`translate(${b}, ${y})`)}if(i.endLabelRight){const v=Vd[i.id].endRight;let b=i.x,y=i.y;if(u){const T=Ao.calcTerminalLabelPosition(i.arrowTypeEnd?10:0,"end_right",u);b=T.x,y=T.y}v.attr("transform",`translate(${b}, ${y})`)}},Een=(i,s)=>{const u=i.x,d=i.y,p=Math.abs(s.x-u),v=Math.abs(s.y-d),b=i.width/2,y=i.height/2;return p>=b||v>=y},Ten=(i,s,u)=>{Xe.debug(`intersection calc abc89: - outsidePoint: ${JSON.stringify(s)} - insidePoint : ${JSON.stringify(u)} - node : x:${i.x} y:${i.y} w:${i.width} h:${i.height}`);const d=i.x,p=i.y,v=Math.abs(d-u.x),b=i.width/2;let y=u.xMath.abs(d-s.x)*T){let P=u.y{Xe.debug("abc88 cutPathAtIntersect",i,s);let u=[],d=i[0],p=!1;return i.forEach(v=>{if(!Een(s,v)&&!p){const b=Ten(s,d,v);let y=!1;u.forEach(T=>{y=y||T.x===b.x&&T.y===b.y}),u.some(T=>T.x===b.x&&T.y===b.y)||u.push(b),p=!0}else d=v,p||u.push(v)}),u},IUe=function(i,s,u,d,p,v,b){let y=u.points;Xe.debug("abc88 InsertEdge: edge=",u,"e=",s);let T=!1;const _=v.node(s.v);var A=v.node(s.w);A!=null&&A.intersect&&(_!=null&&_.intersect)&&(y=y.slice(1,u.points.length-1),y.unshift(_.intersect(y[0])),y.push(A.intersect(y[y.length-1]))),u.toCluster&&(Xe.debug("to cluster abc88",d[u.toCluster]),y=DUe(u.points,d[u.toCluster].node),T=!0),u.fromCluster&&(Xe.debug("from cluster abc88",d[u.fromCluster]),y=DUe(y.reverse(),d[u.fromCluster].node).reverse(),T=!0);const P=y.filter(be=>!Number.isNaN(be.y));let R=FF;u.curve&&(p==="graph"||p==="flowchart")&&(R=u.curve);const{x:F,y:j}=_Ue(u),K=k7().x(F).y(j).curve(R);let ee;switch(u.thickness){case"normal":ee="edge-thickness-normal";break;case"thick":ee="edge-thickness-thick";break;case"invisible":ee="edge-thickness-thick";break;default:ee=""}switch(u.pattern){case"solid":ee+=" edge-pattern-solid";break;case"dotted":ee+=" edge-pattern-dotted";break;case"dashed":ee+=" edge-pattern-dashed";break}const ie=i.append("path").attr("d",K(P)).attr("id",u.id).attr("class"," "+ee+(u.classes?" "+u.classes:"")).attr("style",u.style);let oe="";(qt().flowchart.arrowMarkerAbsolute||qt().state.arrowMarkerAbsolute)&&(oe=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,oe=oe.replace(/\(/g,"\\("),oe=oe.replace(/\)/g,"\\)")),AUe(ie,u,oe,b,p);let pe={};return T&&(pe.updatedPath=y),pe.originalPath=u.points,pe},OUe=async(i,s,u,d,p,v)=>{Xe.info("Graph in recursive render: XXX",q7(s),p);const b=s.graph().rankdir;Xe.trace("Dir in recursive render - dir:",b);const y=i.insert("g").attr("class","root");s.nodes()?Xe.info("Recursive render XXX",s.nodes()):Xe.info("No nodes found for",s),s.edges().length>0&&Xe.trace("Recursive edges",s.edge(s.edges()[0]));const T=y.insert("g").attr("class","clusters"),_=y.insert("g").attr("class","edgePaths"),A=y.insert("g").attr("class","edgeLabels"),P=y.insert("g").attr("class","nodes");await Promise.all(s.nodes().map(async function(j){const K=s.node(j);if(p!==void 0){const ee=JSON.parse(JSON.stringify(p.clusterData));Xe.info("Setting data for cluster XXX (",j,") ",ee,p),s.setNode(p.id,ee),s.parent(j)||(Xe.trace("Setting parent",j,p.id),s.setParent(j,p.id,ee))}if(Xe.info("(Insert) Node XXX"+j+": "+JSON.stringify(s.node(j))),K&&K.clusterNode){Xe.info("Cluster identified",j,K.width,s.node(j));const ee=await OUe(P,K.graph,u,d,s.node(j),v),ie=ee.elem;Kh(K,ie),K.diff=ee.diff||0,Xe.info("Node bounds (abc123)",j,K,K.width,K.x,K.y),ben(ie,K),Xe.warn("Recursive render complete ",ie,K)}else s.children(j).length>0?(Xe.info("Cluster - the non recursive path XXX",j,K.id,K,s),Xe.info(MR(K.id,s)),Mo[K.id]={id:MR(K.id,s),node:K}):(Xe.info("Node - the non recursive path",j,K.id,K),await tJ(P,s.node(j),b))})),s.edges().forEach(function(j){const K=s.edge(j.v,j.w,j.name);Xe.info("Edge "+j.v+" -> "+j.w+": "+JSON.stringify(j)),Xe.info("Edge "+j.v+" -> "+j.w+": ",j," ",JSON.stringify(s.edge(j))),Xe.info("Fix",Mo,"ids:",j.v,j.w,"Translating: ",Mo[j.v],Mo[j.w]),zme(A,K)}),s.edges().forEach(function(j){Xe.info("Edge "+j.v+" -> "+j.w+": "+JSON.stringify(j))}),Xe.info("#############################################"),Xe.info("### Layout ###"),Xe.info("#############################################"),Xe.info(s),qD(s),Xe.info("Graph after layout:",q7(s));let R=0;const{subGraphTitleTotalMargin:F}=nJ(v);return HZt(s).forEach(function(j){const K=s.node(j);Xe.info("Position "+j+": "+JSON.stringify(s.node(j))),Xe.info("Position "+j+": ("+K.x,","+K.y,") width: ",K.width," height: ",K.height),K&&K.clusterNode?(K.y+=F,$me(K)):s.children(j).length>0?(K.height+=F,wen(T,K),Mo[K.id].node=K):(K.y+=F/2,$me(K))}),s.edges().forEach(function(j){const K=s.edge(j);Xe.info("Edge "+j.v+" -> "+j.w+": "+JSON.stringify(K),K),K.points.forEach(ie=>ie.y+=F/2);const ee=IUe(_,j,K,Mo,u,s,d);MUe(K,ee)}),s.nodes().forEach(function(j){const K=s.node(j);Xe.info(j,K.type,K.diff),K.type==="group"&&(R=K.diff)}),{elem:y,diff:R}},qme=async(i,s,u,d,p)=>{Sme(i,u,d,p),men(),ken(),yen(),$Zt(),Xe.warn("Graph at first:",JSON.stringify(q7(s))),qZt(s),Xe.warn("Graph after:",JSON.stringify(q7(s)));const v=qt();await OUe(i,s,d,p,void 0,v)},NUe={},Cen=function(i){const s=Object.keys(i);for(const u of s)NUe[u]=i[u]},PUe=async function(i,s,u,d,p,v){const b=d.select(`[id="${u}"]`),y=Object.keys(i);for(const T of y){const _=i[T];let A="default";_.classes.length>0&&(A=_.classes.join(" ")),A=A+" flowchart-label";const P=om(_.styles);let R=_.text!==void 0?_.text:_.id,F;if(Xe.info("vertex",_,_.labelType),_.labelType==="markdown")Xe.info("vertex",_,_.labelType);else if(f1(qt().flowchart.htmlLabels))F=vme(b,{label:R}).node(),F.parentNode.removeChild(F);else{const ie=p.createElementNS("http://www.w3.org/2000/svg","text");ie.setAttribute("style",P.labelStyle.replace("color:","fill:"));const oe=R.split(ci.lineBreakRegex);for(const pe of oe){const be=p.createElementNS("http://www.w3.org/2000/svg","tspan");be.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),be.setAttribute("dy","1em"),be.setAttribute("x","1"),be.textContent=pe,ie.appendChild(be)}F=ie}let j=0,K="";switch(_.type){case"round":j=5,K="rect";break;case"square":K="rect";break;case"diamond":K="question";break;case"hexagon":K="hexagon";break;case"odd":K="rect_left_inv_arrow";break;case"lean_right":K="lean_right";break;case"lean_left":K="lean_left";break;case"trapezoid":K="trapezoid";break;case"inv_trapezoid":K="inv_trapezoid";break;case"odd_right":K="rect_left_inv_arrow";break;case"circle":K="circle";break;case"ellipse":K="ellipse";break;case"stadium":K="stadium";break;case"subroutine":K="subroutine";break;case"cylinder":K="cylinder";break;case"group":K="rect";break;case"doublecircle":K="doublecircle";break;default:K="rect"}const ee=await CC(R,qt());s.setNode(_.id,{labelStyle:P.labelStyle,shape:K,labelText:ee,labelType:_.labelType,rx:j,ry:j,class:A,style:P.style,id:_.id,link:_.link,linkTarget:_.linkTarget,tooltip:v.db.getTooltip(_.id)||"",domId:v.db.lookUpDomId(_.id),haveCallback:_.haveCallback,width:_.type==="group"?500:void 0,dir:_.dir,type:_.type,props:_.props,padding:qt().flowchart.padding}),Xe.info("setNode",{labelStyle:P.labelStyle,labelType:_.labelType,shape:K,labelText:ee,rx:j,ry:j,class:A,style:P.style,id:_.id,domId:v.db.lookUpDomId(_.id),width:_.type==="group"?500:void 0,type:_.type,dir:_.dir,props:_.props,padding:qt().flowchart.padding})}},BUe=async function(i,s,u){Xe.info("abc78 edges = ",i);let d=0,p={},v,b;if(i.defaultStyle!==void 0){const y=om(i.defaultStyle);v=y.style,b=y.labelStyle}for(const y of i){d++;const T="L-"+y.start+"-"+y.end;p[T]===void 0?(p[T]=0,Xe.info("abc78 new entry",T,p[T])):(p[T]++,Xe.info("abc78 new entry",T,p[T]));let _=T+"-"+p[T];Xe.info("abc78 new link id to be used is",T,_,p[T]);const A="LS-"+y.start,P="LE-"+y.end,R={style:"",labelStyle:""};switch(R.minlen=y.length||1,y.type==="arrow_open"?R.arrowhead="none":R.arrowhead="normal",R.arrowTypeStart="arrow_open",R.arrowTypeEnd="arrow_open",y.type){case"double_arrow_cross":R.arrowTypeStart="arrow_cross";case"arrow_cross":R.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":R.arrowTypeStart="arrow_point";case"arrow_point":R.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":R.arrowTypeStart="arrow_circle";case"arrow_circle":R.arrowTypeEnd="arrow_circle";break}let F="",j="";switch(y.stroke){case"normal":F="fill:none;",v!==void 0&&(F=v),b!==void 0&&(j=b),R.thickness="normal",R.pattern="solid";break;case"dotted":R.thickness="normal",R.pattern="dotted",R.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":R.thickness="thick",R.pattern="solid",R.style="stroke-width: 3.5px;fill:none;";break;case"invisible":R.thickness="invisible",R.pattern="solid",R.style="stroke-width: 0;fill:none;";break}if(y.style!==void 0){const K=om(y.style);F=K.style,j=K.labelStyle}R.style=R.style+=F,R.labelStyle=R.labelStyle+=j,y.interpolate!==void 0?R.curve=Ov(y.interpolate,kp):i.defaultInterpolate!==void 0?R.curve=Ov(i.defaultInterpolate,kp):R.curve=Ov(NUe.curve,kp),y.text===void 0?y.style!==void 0&&(R.arrowheadStyle="fill: #333"):(R.arrowheadStyle="fill: #333",R.labelpos="c"),R.labelType=y.labelType,R.label=await CC(y.text.replace(ci.lineBreakRegex,` -`),qt()),y.style===void 0&&(R.style=R.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),R.labelStyle=R.labelStyle.replace("color:","fill:"),R.id=_,R.classes="flowchart-link "+A+" "+P,s.setEdge(y.start,y.end,R,d)}},Hme={setConf:Cen,addVertices:PUe,addEdges:BUe,getClasses:function(i,s){return s.db.getClasses()},draw:async function(i,s,u,d){Xe.info("Drawing flowchart");let p=d.db.getDirection();p===void 0&&(p="TD");const{securityLevel:v,flowchart:b}=qt(),y=b.nodeSpacing||50,T=b.rankSpacing||50;let _;v==="sandbox"&&(_=Ir("#i"+s));const A=Ir(v==="sandbox"?_.nodes()[0].contentDocument.body:"body"),P=v==="sandbox"?_.nodes()[0].contentDocument:document,R=new B0({multigraph:!0,compound:!0}).setGraph({rankdir:p,nodesep:y,ranksep:T,marginx:0,marginy:0}).setDefaultEdgeLabel(function(){return{}});let F;const j=d.db.getSubGraphs();Xe.info("Subgraphs - ",j);for(let ae=j.length-1;ae>=0;ae--)F=j[ae],Xe.info("Subgraph - ",F),d.db.addVertex(F.id,{text:F.title,type:F.labelType},"group",void 0,F.classes,F.dir);const K=d.db.getVertices(),ee=d.db.getEdges();Xe.info("Edges",ee);let ie=0;for(ie=j.length-1;ie>=0;ie--){F=j[ie],_Be("cluster").append("text");for(let ae=0;ae{const u=ARe,d=u(i,"r"),p=u(i,"g"),v=u(i,"b");return SC(d,p,v,s)},FUe=i=>`.label { - font-family: ${i.fontFamily}; - color: ${i.nodeTextColor||i.textColor}; +You have to call mermaid.initialize.`)},"addSingleLink"),__e=o(function(t,e,r){Y.info("addLink",t,e,r);for(let n of t)for(let i of e)A_e(n,i,r)},"addLink"),L_e=o(function(t,e){t.forEach(function(r){r==="default"?Os.defaultInterpolate=e:Os[r].interpolate=e})},"updateLinkInterpolate"),D_e=o(function(t,e){t.forEach(function(r){if(typeof r=="number"&&r>=Os.length)throw new Error(`The index ${r} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${Os.length-1}. (Help: Ensure that the index is within the range of existing edges.)`);r==="default"?Os.defaultStyle=e:(Os[r].style=e,(Os[r]?.style?.length??0)>0&&!Os[r]?.style?.some(n=>n?.startsWith("fill"))&&Os[r]?.style?.push("fill:none"))})},"updateLink"),N_e=o(function(t,e){t.split(",").forEach(function(r){let n=Gv.get(r);n===void 0&&(n={id:r,styles:[],textStyles:[]},Gv.set(r,n)),e?.forEach(function(i){if(/color/.exec(i)){let a=i.replace("fill","bgFill");n.textStyles.push(a)}n.styles.push(i)})})},"addClass"),R_e=o(function(t){Yo=t,/.*/.exec(Yo)&&(Yo="LR"),/.*v/.exec(Yo)&&(Yo="TB"),Yo==="TD"&&(Yo="TB")},"setDirection"),oL=o(function(t,e){for(let r of t.split(",")){let n=Qh.get(r);n&&n.classes.push(e);let i=aL.get(r);i&&i.classes.push(e)}},"setClass"),M_e=o(function(t,e){if(e!==void 0){e=iw(e);for(let r of t.split(","))sL.set(rw==="gen-1"?aw(r):r,e)}},"setTooltip"),I_e=o(function(t,e,r){let n=aw(t);if(pe().securityLevel!=="loose"||e===void 0)return;let i=[];if(typeof r=="string"){i=r.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let s=0;s")),i.classed("hover",!0)}).on("mouseout",function(){e.transition().duration(500).style("opacity",0),Ve(this).classed("hover",!1)})},"setupToolTips");nw.push($Z);z_e=o(function(t="gen-1"){Qh=new Map,Gv=new Map,Os=[],nw=[$Z],Bu=[],aL=new Map,tw=0,sL=new Map,nL=!0,rw=t,Cm=pe(),Lr()},"clear"),G_e=o(t=>{rw=t||"gen-2"},"setGen"),$_e=o(function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},"defaultStyle"),V_e=o(function(t,e,r){let n=t.text.trim(),i=r.text;t===r&&/\s/.exec(r.text)&&(n=void 0);function a(h){let f={boolean:{},number:{},string:{}},d=[],p;return{nodeList:h.filter(function(g){let y=typeof g;return g.stmt&&g.stmt==="dir"?(p=g.value,!1):g.trim()===""?!1:y in f?f[y].hasOwnProperty(g)?!1:f[y][g]=!0:d.includes(g)?!1:d.push(g)}),dir:p}}o(a,"uniq");let{nodeList:s,dir:l}=a(e.flat());if(rw==="gen-1")for(let h=0;h2e3)return{result:!1,count:0};if(VZ[zv]=e,Bu[e].id===t)return{result:!0,count:0};let n=0,i=1;for(;n=0){let s=UZ(t,a);if(s.result)return{result:!0,count:i+s.count};i=i+s.count}n=n+1}return{result:!1,count:i}},"indexNodes2"),H_e=o(function(t){return VZ[t]},"getDepthFirstPos"),W_e=o(function(){zv=-1,Bu.length>0&&UZ("none",Bu.length-1)},"indexNodes"),HZ=o(function(){return Bu},"getSubGraphs"),Y_e=o(()=>nL?(nL=!1,!0):!1,"firstGraph"),q_e=o(t=>{let e=t.trim(),r="arrow_open";switch(e[0]){case"<":r="arrow_point",e=e.slice(1);break;case"x":r="arrow_cross",e=e.slice(1);break;case"o":r="arrow_circle",e=e.slice(1);break}let n="normal";return e.includes("=")&&(n="thick"),e.includes(".")&&(n="dotted"),{type:r,stroke:n}},"destructStartLink"),X_e=o((t,e)=>{let r=e.length,n=0;for(let i=0;i{let e=t.trim(),r=e.slice(0,-1),n="arrow_open";switch(e.slice(-1)){case"x":n="arrow_cross",e.startsWith("x")&&(n="double_"+n,r=r.slice(1));break;case">":n="arrow_point",e.startsWith("<")&&(n="double_"+n,r=r.slice(1));break;case"o":n="arrow_circle",e.startsWith("o")&&(n="double_"+n,r=r.slice(1));break}let i="normal",a=r.length-1;r.startsWith("=")&&(i="thick"),r.startsWith("~")&&(i="invisible");let s=X_e(".",r);return s&&(i="dotted",a=s),{type:n,stroke:i,length:a}},"destructEndLink"),K_e=o((t,e)=>{let r=j_e(t),n;if(e){if(n=q_e(e),n.stroke!==r.stroke)return{type:"INVALID",stroke:"INVALID"};if(n.type==="arrow_open")n.type=r.type;else{if(n.type!==r.type)return{type:"INVALID",stroke:"INVALID"};n.type="double_"+n.type}return n.type==="double_arrow"&&(n.type="double_arrow_point"),n.length=r.length,n}return r},"destructLink"),WZ=o((t,e)=>{for(let r of t)if(r.nodes.includes(e))return!0;return!1},"exists"),YZ=o((t,e)=>{let r=[];return t.nodes.forEach((n,i)=>{WZ(e,n)||r.push(t.nodes[i])}),{nodes:r}},"makeUniq"),Q_e={firstGraph:Y_e},Z_e=o(t=>{if(t.img)return"imageSquare";if(t.icon)return t.form==="circle"?"iconCircle":t.form==="square"?"iconSquare":t.form==="rounded"?"iconRounded":"icon";switch(t.type){case"square":case void 0:return"squareRect";case"round":return"roundedRect";case"ellipse":return"ellipse";default:return t.type}},"getTypeFromVertex"),J_e=o((t,e)=>t.find(r=>r.id===e),"findNode"),e9e=o(t=>{let e="none",r="arrow_point";switch(t){case"arrow_point":case"arrow_circle":case"arrow_cross":r=t;break;case"double_arrow_point":case"double_arrow_circle":case"double_arrow_cross":e=t.replace("double_",""),r=e;break}return{arrowTypeStart:e,arrowTypeEnd:r}},"destructEdgeType"),t9e=o((t,e,r,n,i,a)=>{let s=r.get(t.id),l=n.get(t.id)??!1,u=J_e(e,t.id);if(u)u.cssStyles=t.styles,u.cssCompiledStyles=iL(t.classes),u.cssClasses=t.classes.join(" ");else{let h={id:t.id,label:t.text,labelStyle:"",parentId:s,padding:i.flowchart?.padding||8,cssStyles:t.styles,cssCompiledStyles:iL(["default","node",...t.classes]),cssClasses:"default "+t.classes.join(" "),dir:t.dir,domId:t.domId,look:a,link:t.link,linkTarget:t.linkTarget,tooltip:FZ(t.id),icon:t.icon,pos:t.pos,img:t.img,assetWidth:t.assetWidth,assetHeight:t.assetHeight,constraint:t.constraint};l?e.push({...h,isGroup:!0,shape:"rect"}):e.push({...h,isGroup:!1,shape:Z_e(t)})}},"addNodeFromVertex");o(iL,"getCompiledStyles");r9e=o(()=>{let t=pe(),e=[],r=[],n=HZ(),i=new Map,a=new Map;for(let u=n.length-1;u>=0;u--){let h=n[u];h.nodes.length>0&&a.set(h.id,!0);for(let f of h.nodes)i.set(f,h.id)}for(let u=n.length-1;u>=0;u--){let h=n[u];e.push({id:h.id,label:h.title,labelStyle:"",parentId:i.get(h.id),padding:8,cssCompiledStyles:iL(h.classes),cssClasses:h.classes.join(" "),shape:"rect",dir:h.dir,isGroup:!0,look:t.look})}zZ().forEach(u=>{t9e(u,e,i,a,t,t.look||"classic")});let l=GZ();return l.forEach((u,h)=>{let{arrowTypeStart:f,arrowTypeEnd:d}=e9e(u.type),p=[...l.defaultStyle??[]];u.style&&p.push(...u.style);let m={id:C5(u.start,u.end,{counter:h,prefix:"L"}),start:u.start,end:u.end,type:u.type??"normal",label:u.text,labelpos:"c",thickness:u.stroke,minlen:u.length,classes:u?.stroke==="invisible"?"":"edge-thickness-normal edge-pattern-solid flowchart-link",arrowTypeStart:u?.stroke==="invisible"?"none":f,arrowTypeEnd:u?.stroke==="invisible"?"none":d,arrowheadStyle:"fill: #333",labelStyle:p,style:p,pattern:u.stroke,look:t.look};r.push(m)}),{nodes:e,edges:r,other:{},config:t}},"getData"),sw={defaultConfig:o(()=>B4.flowchart,"defaultConfig"),setAccTitle:Mr,getAccTitle:Br,getAccDescription:zr,getData:r9e,setAccDescription:Fr,addVertex:C_e,lookUpDomId:aw,addLink:__e,updateLinkInterpolate:L_e,updateLink:D_e,addClass:N_e,setDirection:R_e,setClass:oL,setTooltip:M_e,getTooltip:FZ,setClickEvent:P_e,setLink:O_e,bindFunctions:B_e,getDirection:lL,getVertices:zZ,getEdges:GZ,getClasses:F_e,clear:z_e,setGen:G_e,defaultStyle:$_e,addSubGraph:V_e,getDepthFirstPos:H_e,indexNodes:W_e,getSubGraphs:HZ,destructLink:K_e,lex:Q_e,exists:WZ,makeUniq:YZ,setDiagramTitle:cn,getDiagramTitle:Jr}});var Am,ow=M(()=>{"use strict";pr();Am=o((t,e)=>{let r;return e==="sandbox"&&(r=Ve("#i"+t)),(e==="sandbox"?Ve(r.nodes()[0].contentDocument.body):Ve("body")).select(`[id="${t}"]`)},"getDiagramElement")});var Fu,$v=M(()=>{"use strict";Fu=o(({flowchart:t})=>{let e=t?.subGraphTitleMargin?.top??0,r=t?.subGraphTitleMargin?.bottom??0,n=e+r;return{subGraphTitleTopMargin:e,subGraphTitleBottomMargin:r,subGraphTitleTotalMargin:n}},"getSubGraphTitleMargins")});var qZ,n9e,i9e,a9e,s9e,o9e,l9e,XZ,_m,jZ,lw=M(()=>{"use strict";Vt();fr();ut();$v();pr();jt();Pl();k9();Y5();Xh();Xt();qZ=o(async(t,e)=>{Y.info("Creating subgraph rect for ",e.id,e);let r=pe(),{themeVariables:n,handDrawnSeed:i}=r,{clusterBkg:a,clusterBorder:s}=n,{labelStyles:l,nodeStyles:u,borderStyles:h,backgroundStyles:f}=Ze(e),d=t.insert("g").attr("class","cluster "+e.cssClasses).attr("id",e.id).attr("data-look",e.look),p=xr(r.flowchart.htmlLabels),m=d.insert("g").attr("class","cluster-label "),g=await Li(m,e.label,{style:e.labelStyle,useHtmlLabels:p,isNode:!0}),y=g.getBBox();if(xr(r.flowchart.htmlLabels)){let L=g.children[0],S=Ve(g);y=L.getBoundingClientRect(),S.attr("width",y.width),S.attr("height",y.height)}let v=e.width<=y.width+e.padding?y.width+e.padding:e.width;e.width<=y.width+e.padding?e.diff=(v-e.width)/2-e.padding:e.diff=-e.padding;let x=e.height,b=e.x-v/2,w=e.y-x/2;Y.trace("Data ",e,JSON.stringify(e));let _;if(e.look==="handDrawn"){let L=Xe.svg(d),S=Ke(e,{roughness:.7,fill:a,stroke:s,fillWeight:3,seed:i}),A=L.path(Pa(b,w,v,x,0),S);_=d.insert(()=>(Y.debug("Rough node insert CXC",A),A),":first-child"),_.select("path:nth-child(2)").attr("style",h.join(";")),_.select("path").attr("style",f.join(";").replace("fill","stroke"))}else _=d.insert("rect",":first-child"),_.attr("style",u).attr("rx",e.rx).attr("ry",e.ry).attr("x",b).attr("y",w).attr("width",v).attr("height",x);let{subGraphTitleTopMargin:T}=Fu(r);if(m.attr("transform",`translate(${e.x-y.width/2}, ${e.y-e.height/2+T})`),l){let L=m.select("span");L&&L.attr("style",l)}let E=_.node().getBBox();return e.offsetX=0,e.width=E.width,e.height=E.height,e.offsetY=y.height-e.padding/2,e.intersect=function(L){return Hh(e,L)},{cluster:d,labelBBox:y}},"rect"),n9e=o((t,e)=>{let r=t.insert("g").attr("class","note-cluster").attr("id",e.id),n=r.insert("rect",":first-child"),i=0*e.padding,a=i/2;n.attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2-a).attr("width",e.width+i).attr("height",e.height+i).attr("fill","none");let s=n.node().getBBox();return e.width=s.width,e.height=s.height,e.intersect=function(l){return Hh(e,l)},{cluster:r,labelBBox:{width:0,height:0}}},"noteGroup"),i9e=o(async(t,e)=>{let r=pe(),{themeVariables:n,handDrawnSeed:i}=r,{altBackground:a,compositeBackground:s,compositeTitleBackground:l,nodeBorder:u}=n,h=t.insert("g").attr("class",e.cssClasses).attr("id",e.id).attr("data-id",e.id).attr("data-look",e.look),f=h.insert("g",":first-child"),d=h.insert("g").attr("class","cluster-label"),p=h.append("rect"),m=d.node().appendChild(await Cc(e.label,e.labelStyle,void 0,!0)),g=m.getBBox();if(xr(r.flowchart.htmlLabels)){let A=m.children[0],I=Ve(m);g=A.getBoundingClientRect(),I.attr("width",g.width),I.attr("height",g.height)}let y=0*e.padding,v=y/2,x=(e.width<=g.width+e.padding?g.width+e.padding:e.width)+y;e.width<=g.width+e.padding?e.diff=(x-e.width)/2-e.padding:e.diff=-e.padding;let b=e.height+y,w=e.height+y-g.height-6,_=e.x-x/2,T=e.y-b/2;e.width=x;let E=e.y-e.height/2-v+g.height+2,L;if(e.look==="handDrawn"){let A=e.cssClasses.includes("statediagram-cluster-alt"),I=Xe.svg(h),D=e.rx||e.ry?I.path(Pa(_,T,x,b,10),{roughness:.7,fill:l,fillStyle:"solid",stroke:u,seed:i}):I.rectangle(_,T,x,b,{seed:i});L=h.insert(()=>D,":first-child");let k=I.rectangle(_,E,x,w,{fill:A?a:s,fillStyle:A?"hachure":"solid",stroke:u,seed:i});L=h.insert(()=>D,":first-child"),p=h.insert(()=>k)}else L=f.insert("rect",":first-child"),L.attr("class","outer").attr("x",_).attr("y",T).attr("width",x).attr("height",b).attr("data-look",e.look),p.attr("class","inner").attr("x",_).attr("y",E).attr("width",x).attr("height",w);d.attr("transform",`translate(${e.x-g.width/2}, ${T+1-(xr(r.flowchart.htmlLabels)?0:3)})`);let S=L.node().getBBox();return e.height=S.height,e.offsetX=0,e.offsetY=g.height-e.padding/2,e.labelBBox=g,e.intersect=function(A){return Hh(e,A)},{cluster:h,labelBBox:g}},"roundedWithTitle"),a9e=o(async(t,e)=>{Y.info("Creating subgraph rect for ",e.id,e);let r=pe(),{themeVariables:n,handDrawnSeed:i}=r,{clusterBkg:a,clusterBorder:s}=n,{labelStyles:l,nodeStyles:u,borderStyles:h,backgroundStyles:f}=Ze(e),d=t.insert("g").attr("class","cluster "+e.cssClasses).attr("id",e.id).attr("data-look",e.look),p=xr(r.flowchart.htmlLabels),m=d.insert("g").attr("class","cluster-label "),g=await Li(m,e.label,{style:e.labelStyle,useHtmlLabels:p,isNode:!0,width:e.width}),y=g.getBBox();if(xr(r.flowchart.htmlLabels)){let L=g.children[0],S=Ve(g);y=L.getBoundingClientRect(),S.attr("width",y.width),S.attr("height",y.height)}let v=e.width<=y.width+e.padding?y.width+e.padding:e.width;e.width<=y.width+e.padding?e.diff=(v-e.width)/2-e.padding:e.diff=-e.padding;let x=e.height,b=e.x-v/2,w=e.y-x/2;Y.trace("Data ",e,JSON.stringify(e));let _;if(e.look==="handDrawn"){let L=Xe.svg(d),S=Ke(e,{roughness:.7,fill:a,stroke:s,fillWeight:4,seed:i}),A=L.path(Pa(b,w,v,x,e.rx),S);_=d.insert(()=>(Y.debug("Rough node insert CXC",A),A),":first-child"),_.select("path:nth-child(2)").attr("style",h.join(";")),_.select("path").attr("style",f.join(";").replace("fill","stroke"))}else _=d.insert("rect",":first-child"),_.attr("style",u).attr("rx",e.rx).attr("ry",e.ry).attr("x",b).attr("y",w).attr("width",v).attr("height",x);let{subGraphTitleTopMargin:T}=Fu(r);if(m.attr("transform",`translate(${e.x-y.width/2}, ${e.y-e.height/2+T})`),l){let L=m.select("span");L&&L.attr("style",l)}let E=_.node().getBBox();return e.offsetX=0,e.width=E.width,e.height=E.height,e.offsetY=y.height-e.padding/2,e.intersect=function(L){return Hh(e,L)},{cluster:d,labelBBox:y}},"kanbanSection"),s9e=o((t,e)=>{let r=pe(),{themeVariables:n,handDrawnSeed:i}=r,{nodeBorder:a}=n,s=t.insert("g").attr("class",e.cssClasses).attr("id",e.id).attr("data-look",e.look),l=s.insert("g",":first-child"),u=0*e.padding,h=e.width+u;e.diff=-e.padding;let f=e.height+u,d=e.x-h/2,p=e.y-f/2;e.width=h;let m;if(e.look==="handDrawn"){let v=Xe.svg(s).rectangle(d,p,h,f,{fill:"lightgrey",roughness:.5,strokeLineDash:[5],stroke:a,seed:i});m=s.insert(()=>v,":first-child")}else m=l.insert("rect",":first-child"),m.attr("class","divider").attr("x",d).attr("y",p).attr("width",h).attr("height",f).attr("data-look",e.look);let g=m.node().getBBox();return e.height=g.height,e.offsetX=0,e.offsetY=0,e.intersect=function(y){return Hh(e,y)},{cluster:s,labelBBox:{}}},"divider"),o9e=qZ,l9e={rect:qZ,squareRect:o9e,roundedWithTitle:i9e,noteGroup:n9e,divider:s9e,kanbanSection:a9e},XZ=new Map,_m=o(async(t,e)=>{let r=e.shape||"rect",n=await l9e[r](t,e);return XZ.set(e.id,n),n},"insertCluster"),jZ=o(()=>{XZ=new Map},"clear")});function cw(t,e){if(t===void 0||e===void 0)return{angle:0,deltaX:0,deltaY:0};t=Wn(t),e=Wn(e);let[r,n]=[t.x,t.y],[i,a]=[e.x,e.y],s=i-r,l=a-n;return{angle:Math.atan(l/s),deltaX:s,deltaY:l}}var qo,Wn,uw,uL=M(()=>{"use strict";qo={aggregation:18,extension:18,composition:18,dependency:6,lollipop:13.5,arrow_point:4};o(cw,"calculateDeltaAndAngle");Wn=o(t=>Array.isArray(t)?{x:t[0],y:t[1]}:t,"pointTransformer"),uw=o(t=>({x:o(function(e,r,n){let i=0,a=Wn(n[0]).x=0?1:-1)}else if(r===n.length-1&&Object.hasOwn(qo,t.arrowTypeEnd)){let{angle:m,deltaX:g}=cw(n[n.length-1],n[n.length-2]);i=qo[t.arrowTypeEnd]*Math.cos(m)*(g>=0?1:-1)}let s=Math.abs(Wn(e).x-Wn(n[n.length-1]).x),l=Math.abs(Wn(e).y-Wn(n[n.length-1]).y),u=Math.abs(Wn(e).x-Wn(n[0]).x),h=Math.abs(Wn(e).y-Wn(n[0]).y),f=qo[t.arrowTypeStart],d=qo[t.arrowTypeEnd],p=1;if(s0&&l0&&h=0?1:-1)}else if(r===n.length-1&&Object.hasOwn(qo,t.arrowTypeEnd)){let{angle:m,deltaY:g}=cw(n[n.length-1],n[n.length-2]);i=qo[t.arrowTypeEnd]*Math.abs(Math.sin(m))*(g>=0?1:-1)}let s=Math.abs(Wn(e).y-Wn(n[n.length-1]).y),l=Math.abs(Wn(e).x-Wn(n[n.length-1]).x),u=Math.abs(Wn(e).y-Wn(n[0]).y),h=Math.abs(Wn(e).x-Wn(n[0]).x),f=qo[t.arrowTypeStart],d=qo[t.arrowTypeEnd],p=1;if(s0&&l0&&h{"use strict";ut();QZ=o((t,e,r,n,i)=>{e.arrowTypeStart&&KZ(t,"start",e.arrowTypeStart,r,n,i),e.arrowTypeEnd&&KZ(t,"end",e.arrowTypeEnd,r,n,i)},"addEdgeMarkers"),c9e={arrow_cross:"cross",arrow_point:"point",arrow_barb:"barb",arrow_circle:"circle",aggregation:"aggregation",extension:"extension",composition:"composition",dependency:"dependency",lollipop:"lollipop"},KZ=o((t,e,r,n,i,a)=>{let s=c9e[r];if(!s){Y.warn(`Unknown arrow type: ${r}`);return}let l=e==="start"?"Start":"End";t.attr(`marker-${e}`,`url(${n}#${i}_${a}-${s}${l})`)},"addEdgeMarker")});function hw(t,e){pe().flowchart.htmlLabels&&t&&(t.style.width=e.length*9+"px",t.style.height="12px")}function f9e(t){let e=[],r=[];for(let n=1;n5&&Math.abs(a.y-i.y)>5||i.y===a.y&&a.x===s.x&&Math.abs(a.x-i.x)>5&&Math.abs(a.y-s.y)>5)&&(e.push(a),r.push(n))}return{cornerPoints:e,cornerPointPositions:r}}var fw,ya,tJ,Vv,dw,pw,u9e,h9e,JZ,eJ,d9e,mw,hL=M(()=>{"use strict";Vt();fr();ut();Pl();hr();uL();$v();pr();jt();Y5();ZZ();fw=new Map,ya=new Map,tJ=o(()=>{fw.clear(),ya.clear()},"clear"),Vv=o(t=>t?t.reduce((r,n)=>r+";"+n,""):"","getLabelStyles"),dw=o(async(t,e)=>{let r=xr(pe().flowchart.htmlLabels),n=await Li(t,e.label,{style:Vv(e.labelStyle),useHtmlLabels:r,addSvgBackground:!0,isNode:!1});Y.info("abc82",e,e.labelType);let i=t.insert("g").attr("class","edgeLabel"),a=i.insert("g").attr("class","label");a.node().appendChild(n);let s=n.getBBox();if(r){let u=n.children[0],h=Ve(n);s=u.getBoundingClientRect(),h.attr("width",s.width),h.attr("height",s.height)}a.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),fw.set(e.id,i),e.width=s.width,e.height=s.height;let l;if(e.startLabelLeft){let u=await Cc(e.startLabelLeft,Vv(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),ya.get(e.id)||ya.set(e.id,{}),ya.get(e.id).startLeft=h,hw(l,e.startLabelLeft)}if(e.startLabelRight){let u=await Cc(e.startLabelRight,Vv(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=h.node().appendChild(u),f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),ya.get(e.id)||ya.set(e.id,{}),ya.get(e.id).startRight=h,hw(l,e.startLabelRight)}if(e.endLabelLeft){let u=await Cc(e.endLabelLeft,Vv(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),h.node().appendChild(u),ya.get(e.id)||ya.set(e.id,{}),ya.get(e.id).endLeft=h,hw(l,e.endLabelLeft)}if(e.endLabelRight){let u=await Cc(e.endLabelRight,Vv(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),h.node().appendChild(u),ya.get(e.id)||ya.set(e.id,{}),ya.get(e.id).endRight=h,hw(l,e.endLabelRight)}return n},"insertEdgeLabel");o(hw,"setTerminalWidth");pw=o((t,e)=>{Y.debug("Moving label abc88 ",t.id,t.label,fw.get(t.id),e);let r=e.updatedPath?e.updatedPath:e.originalPath,n=pe(),{subGraphTitleTotalMargin:i}=Fu(n);if(t.label){let a=fw.get(t.id),s=t.x,l=t.y;if(r){let u=Ut.calcLabelPosition(r);Y.debug("Moving label "+t.label+" from (",s,",",l,") to (",u.x,",",u.y,") abc88"),e.updatedPath&&(s=u.x,l=u.y)}a.attr("transform",`translate(${s}, ${l+i/2})`)}if(t.startLabelLeft){let a=ya.get(t.id).startLeft,s=t.x,l=t.y;if(r){let u=Ut.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.startLabelRight){let a=ya.get(t.id).startRight,s=t.x,l=t.y;if(r){let u=Ut.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelLeft){let a=ya.get(t.id).endLeft,s=t.x,l=t.y;if(r){let u=Ut.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelRight){let a=ya.get(t.id).endRight,s=t.x,l=t.y;if(r){let u=Ut.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}},"positionEdgeLabel"),u9e=o((t,e)=>{let r=t.x,n=t.y,i=Math.abs(e.x-r),a=Math.abs(e.y-n),s=t.width/2,l=t.height/2;return i>=s||a>=l},"outsideNode"),h9e=o((t,e,r)=>{Y.debug(`intersection calc abc89: + outsidePoint: ${JSON.stringify(e)} + insidePoint : ${JSON.stringify(r)} + node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);let n=t.x,i=t.y,a=Math.abs(n-r.x),s=t.width/2,l=r.xMath.abs(n-e.x)*u){let d=r.y{Y.warn("abc88 cutPathAtIntersect",t,e);let r=[],n=t[0],i=!1;return t.forEach(a=>{if(Y.info("abc88 checking point",a,e),!u9e(e,a)&&!i){let s=h9e(e,n,a);Y.debug("abc88 inside",a,n,s),Y.debug("abc88 intersection",s,e);let l=!1;r.forEach(u=>{l=l||u.x===s.x&&u.y===s.y}),r.some(u=>u.x===s.x&&u.y===s.y)?Y.warn("abc88 no intersect",s,r):r.push(s),i=!0}else Y.warn("abc88 outside",a,n),n=a,i||r.push(a)}),Y.debug("returning points",r),r},"cutPathAtIntersect");o(f9e,"extractCornerPoints");eJ=o(function(t,e,r){let n=e.x-t.x,i=e.y-t.y,a=Math.sqrt(n*n+i*i),s=r/a;return{x:e.x-s*n,y:e.y-s*i}},"findAdjacentPoint"),d9e=o(function(t){let{cornerPointPositions:e}=f9e(t),r=[];for(let n=0;n10&&Math.abs(a.y-i.y)>=10){Y.debug("Corner point fixing",Math.abs(a.x-i.x),Math.abs(a.y-i.y));let m=5;s.x===l.x?p={x:h<0?l.x-m+d:l.x+m-d,y:f<0?l.y-d:l.y+d}:p={x:h<0?l.x-d:l.x+d,y:f<0?l.y-m+d:l.y+m-d}}else Y.debug("Corner point skipping fixing",Math.abs(a.x-i.x),Math.abs(a.y-i.y));r.push(p,u)}else r.push(t[n]);return r},"fixCorners"),mw=o(function(t,e,r,n,i,a,s){let{handDrawnSeed:l}=pe(),u=e.points,h=!1,f=i;var d=a;d.intersect&&f.intersect&&(u=u.slice(1,e.points.length-1),u.unshift(f.intersect(u[0])),Y.debug("Last point APA12",e.start,"-->",e.end,u[u.length-1],d,d.intersect(u[u.length-1])),u.push(d.intersect(u[u.length-1]))),e.toCluster&&(Y.info("to cluster abc88",r.get(e.toCluster)),u=JZ(e.points,r.get(e.toCluster).node),h=!0),e.fromCluster&&(Y.debug("from cluster abc88",r.get(e.fromCluster),JSON.stringify(u,null,2)),u=JZ(u.reverse(),r.get(e.fromCluster).node).reverse(),h=!0);let p=u.filter(L=>!Number.isNaN(L.y));p=d9e(p);let m=Po;e.curve&&(m=e.curve);let{x:g,y}=uw(e),v=ns().x(g).y(y).curve(m),x;switch(e.thickness){case"normal":x="edge-thickness-normal";break;case"thick":x="edge-thickness-thick";break;case"invisible":x="edge-thickness-invisible";break;default:x="edge-thickness-normal"}switch(e.pattern){case"solid":x+=" edge-pattern-solid";break;case"dotted":x+=" edge-pattern-dotted";break;case"dashed":x+=" edge-pattern-dashed";break;default:x+=" edge-pattern-solid"}let b,w=v(p),_=Array.isArray(e.style)?e.style:[e.style];if(e.look==="handDrawn"){let L=Xe.svg(t);Object.assign([],p);let S=L.path(w,{roughness:.3,seed:l});x+=" transition",b=Ve(S).select("path").attr("id",e.id).attr("class"," "+x+(e.classes?" "+e.classes:"")).attr("style",_?_.reduce((I,D)=>I+";"+D,""):"");let A=b.attr("d");b.attr("d",A),t.node().appendChild(b.node())}else b=t.append("path").attr("d",w).attr("id",e.id).attr("class"," "+x+(e.classes?" "+e.classes:"")).attr("style",_?_.reduce((L,S)=>L+";"+S,""):"");let T="";(pe().flowchart.arrowMarkerAbsolute||pe().state.arrowMarkerAbsolute)&&(T=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,T=T.replace(/\(/g,"\\(").replace(/\)/g,"\\)")),Y.info("arrowTypeStart",e.arrowTypeStart),Y.info("arrowTypeEnd",e.arrowTypeEnd),QZ(b,e,T,s,n);let E={};return h&&(E.updatedPath=u),E.originalPath=e.points,E},"insertEdge")});var p9e,m9e,g9e,y9e,v9e,x9e,b9e,w9e,T9e,k9e,E9e,gw,fL=M(()=>{"use strict";ut();p9e=o((t,e,r,n)=>{e.forEach(i=>{E9e[i](t,r,n)})},"insertMarkers"),m9e=o((t,e,r)=>{Y.trace("Making markers for ",r),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionStart").attr("class","marker extension "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},"extension"),g9e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionStart").attr("class","marker composition "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"composition"),y9e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"aggregation"),v9e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"dependency"),x9e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},"lollipop"),b9e=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"point"),w9e=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"circle"),T9e=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},"cross"),k9e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","userSpaceOnUse").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"barb"),E9e={extension:m9e,composition:g9e,aggregation:y9e,dependency:v9e,lollipop:x9e,point:b9e,circle:w9e,cross:T9e,barb:k9e},gw=p9e});async function Lm(t,e,r){let n,i;e.shape==="rect"&&(e.rx&&e.ry?e.shape="roundedRect":e.shape="squareRect");let a=e.shape?$9[e.shape]:void 0;if(!a)throw new Error(`No such shape: ${e.shape}. Please check your syntax.`);if(e.link){let s;r.config.securityLevel==="sandbox"?s="_top":e.linkTarget&&(s=e.linkTarget||"_blank"),n=t.insert("svg:a").attr("xlink:href",e.link).attr("target",s??null),i=await a(n,e,r)}else i=await a(t,e,r),n=i;return e.tooltip&&i.attr("title",e.tooltip),yw.set(e.id,n),e.haveCallback&&n.attr("class",n.attr("class")+" clickable"),n}var yw,rJ,nJ,Uv,vw=M(()=>{"use strict";ut();V9();yw=new Map;o(Lm,"insertNode");rJ=o((t,e)=>{yw.set(e.id,t)},"setNodeElem"),nJ=o(()=>{yw.clear()},"clear"),Uv=o(t=>{let e=yw.get(t.id);Y.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");let r=8,n=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+n-t.width/2)+", "+(t.y-t.height/2-r)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),n},"positionNode")});var iJ,aJ=M(()=>{"use strict";Za();fr();ut();lw();hL();fL();vw();Ot();hr();iJ={common:qe,getConfig:Cr,insertCluster:_m,insertEdge:mw,insertEdgeLabel:dw,insertMarkers:gw,insertNode:Lm,interpolateToCurve:J_,labelHelper:st,log:Y,positionEdgeLabel:pw}});function C9e(t){return typeof t=="symbol"||ei(t)&&ga(t)==S9e}var S9e,co,zd=M(()=>{"use strict";Lu();zo();S9e="[object Symbol]";o(C9e,"isSymbol");co=C9e});function A9e(t,e){for(var r=-1,n=t==null?0:t.length,i=Array(n);++r{"use strict";o(A9e,"arrayMap");Ps=A9e});function lJ(t){if(typeof t=="string")return t;if(Dt(t))return Ps(t,lJ)+"";if(co(t))return oJ?oJ.call(t):"";var e=t+"";return e=="0"&&1/t==-_9e?"-0":e}var _9e,sJ,oJ,cJ,uJ=M(()=>{"use strict";Cd();Gd();Hn();zd();_9e=1/0,sJ=ia?ia.prototype:void 0,oJ=sJ?sJ.toString:void 0;o(lJ,"baseToString");cJ=lJ});function D9e(t){for(var e=t.length;e--&&L9e.test(t.charAt(e)););return e}var L9e,hJ,fJ=M(()=>{"use strict";L9e=/\s/;o(D9e,"trimmedEndIndex");hJ=D9e});function R9e(t){return t&&t.slice(0,hJ(t)+1).replace(N9e,"")}var N9e,dJ,pJ=M(()=>{"use strict";fJ();N9e=/^\s+/;o(R9e,"baseTrim");dJ=R9e});function B9e(t){if(typeof t=="number")return t;if(co(t))return mJ;if(xn(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=xn(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=dJ(t);var r=I9e.test(t);return r||O9e.test(t)?P9e(t.slice(2),r?2:8):M9e.test(t)?mJ:+t}var mJ,M9e,I9e,O9e,P9e,gJ,yJ=M(()=>{"use strict";pJ();io();zd();mJ=NaN,M9e=/^[-+]0x[0-9a-f]+$/i,I9e=/^0b[01]+$/i,O9e=/^0o[0-7]+$/i,P9e=parseInt;o(B9e,"toNumber");gJ=B9e});function z9e(t){if(!t)return t===0?t:0;if(t=gJ(t),t===vJ||t===-vJ){var e=t<0?-1:1;return e*F9e}return t===t?t:0}var vJ,F9e,Dm,dL=M(()=>{"use strict";yJ();vJ=1/0,F9e=17976931348623157e292;o(z9e,"toFinite");Dm=z9e});function G9e(t){var e=Dm(t),r=e%1;return e===e?r?e-r:e:0}var _c,Nm=M(()=>{"use strict";dL();o(G9e,"toInteger");_c=G9e});var $9e,xw,xJ=M(()=>{"use strict";Oh();Bo();$9e=As(oi,"WeakMap"),xw=$9e});function V9e(){}var ti,pL=M(()=>{"use strict";o(V9e,"noop");ti=V9e});function U9e(t,e){for(var r=-1,n=t==null?0:t.length;++r{"use strict";o(U9e,"arrayEach");bw=U9e});function H9e(t,e,r,n){for(var i=t.length,a=r+(n?1:-1);n?a--:++a{"use strict";o(H9e,"baseFindIndex");ww=H9e});function W9e(t){return t!==t}var bJ,wJ=M(()=>{"use strict";o(W9e,"baseIsNaN");bJ=W9e});function Y9e(t,e,r){for(var n=r-1,i=t.length;++n{"use strict";o(Y9e,"strictIndexOf");TJ=Y9e});function q9e(t,e,r){return e===e?TJ(t,e,r):ww(t,bJ,r)}var Rm,Tw=M(()=>{"use strict";gL();wJ();kJ();o(q9e,"baseIndexOf");Rm=q9e});function X9e(t,e){var r=t==null?0:t.length;return!!r&&Rm(t,e,0)>-1}var kw,yL=M(()=>{"use strict";Tw();o(X9e,"arrayIncludes");kw=X9e});var j9e,EJ,SJ=M(()=>{"use strict";G_();j9e=m5(Object.keys,Object),EJ=j9e});function Z9e(t){if(!Tc(t))return EJ(t);var e=[];for(var r in Object(t))Q9e.call(t,r)&&r!="constructor"&&e.push(r);return e}var K9e,Q9e,Mm,Ew=M(()=>{"use strict";cm();SJ();K9e=Object.prototype,Q9e=K9e.hasOwnProperty;o(Z9e,"baseKeys");Mm=Z9e});function J9e(t){return li(t)?b5(t):Mm(t)}var Gr,Lc=M(()=>{"use strict";W_();Ew();Go();o(J9e,"keys");Gr=J9e});var eLe,tLe,rLe,va,CJ=M(()=>{"use strict";dm();Nd();j_();Go();cm();Lc();eLe=Object.prototype,tLe=eLe.hasOwnProperty,rLe=k5(function(t,e){if(Tc(e)||li(e)){Uo(e,Gr(e),t);return}for(var r in e)tLe.call(e,r)&&kc(t,r,e[r])}),va=rLe});function aLe(t,e){if(Dt(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||co(t)?!0:iLe.test(t)||!nLe.test(t)||e!=null&&t in Object(e)}var nLe,iLe,Im,Sw=M(()=>{"use strict";Hn();zd();nLe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,iLe=/^\w*$/;o(aLe,"isKey");Im=aLe});function oLe(t){var e=tm(t,function(n){return r.size===sLe&&r.clear(),n}),r=e.cache;return e}var sLe,AJ,_J=M(()=>{"use strict";M_();sLe=500;o(oLe,"memoizeCapped");AJ=oLe});var lLe,cLe,uLe,LJ,DJ=M(()=>{"use strict";_J();lLe=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,cLe=/\\(\\)?/g,uLe=AJ(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(lLe,function(r,n,i,a){e.push(i?a.replace(cLe,"$1"):n||r)}),e}),LJ=uLe});function hLe(t){return t==null?"":cJ(t)}var Cw,vL=M(()=>{"use strict";uJ();o(hLe,"toString");Cw=hLe});function fLe(t,e){return Dt(t)?t:Im(t,e)?[t]:LJ(Cw(t))}var Zh,Hv=M(()=>{"use strict";Hn();Sw();DJ();vL();o(fLe,"castPath");Zh=fLe});function pLe(t){if(typeof t=="string"||co(t))return t;var e=t+"";return e=="0"&&1/t==-dLe?"-0":e}var dLe,Dc,Om=M(()=>{"use strict";zd();dLe=1/0;o(pLe,"toKey");Dc=pLe});function mLe(t,e){e=Zh(e,t);for(var r=0,n=e.length;t!=null&&r{"use strict";Hv();Om();o(mLe,"baseGet");Jh=mLe});function gLe(t,e,r){var n=t==null?void 0:Jh(t,e);return n===void 0?r:n}var NJ,RJ=M(()=>{"use strict";Wv();o(gLe,"get");NJ=gLe});function yLe(t,e){for(var r=-1,n=e.length,i=t.length;++r{"use strict";o(yLe,"arrayPush");Pm=yLe});function vLe(t){return Dt(t)||Ml(t)||!!(MJ&&t&&t[MJ])}var MJ,IJ,OJ=M(()=>{"use strict";Cd();um();Hn();MJ=ia?ia.isConcatSpreadable:void 0;o(vLe,"isFlattenable");IJ=vLe});function PJ(t,e,r,n,i){var a=-1,s=t.length;for(r||(r=IJ),i||(i=[]);++a0&&r(l)?e>1?PJ(l,e-1,r,n,i):Pm(i,l):n||(i[i.length]=l)}return i}var Nc,Bm=M(()=>{"use strict";Aw();OJ();o(PJ,"baseFlatten");Nc=PJ});function xLe(t){var e=t==null?0:t.length;return e?Nc(t,1):[]}var Wr,_w=M(()=>{"use strict";Bm();o(xLe,"flatten");Wr=xLe});function bLe(t){return T5(w5(t,void 0,Wr),t+"")}var BJ,FJ=M(()=>{"use strict";_w();Y_();X_();o(bLe,"flatRest");BJ=bLe});function wLe(t,e,r){var n=-1,i=t.length;e<0&&(e=-e>i?0:i+e),r=r>i?i:r,r<0&&(r+=i),i=e>r?0:r-e>>>0,e>>>=0;for(var a=Array(i);++n{"use strict";o(wLe,"baseSlice");Lw=wLe});function DLe(t){return LLe.test(t)}var TLe,kLe,ELe,SLe,CLe,ALe,_Le,LLe,zJ,GJ=M(()=>{"use strict";TLe="\\ud800-\\udfff",kLe="\\u0300-\\u036f",ELe="\\ufe20-\\ufe2f",SLe="\\u20d0-\\u20ff",CLe=kLe+ELe+SLe,ALe="\\ufe0e\\ufe0f",_Le="\\u200d",LLe=RegExp("["+_Le+TLe+CLe+ALe+"]");o(DLe,"hasUnicode");zJ=DLe});function NLe(t,e,r,n){var i=-1,a=t==null?0:t.length;for(n&&a&&(r=t[++i]);++i{"use strict";o(NLe,"arrayReduce");$J=NLe});function RLe(t,e){return t&&Uo(e,Gr(e),t)}var UJ,HJ=M(()=>{"use strict";Nd();Lc();o(RLe,"baseAssign");UJ=RLe});function MLe(t,e){return t&&Uo(e,_s(e),t)}var WJ,YJ=M(()=>{"use strict";Nd();Vh();o(MLe,"baseAssignIn");WJ=MLe});function ILe(t,e){for(var r=-1,n=t==null?0:t.length,i=0,a=[];++r{"use strict";o(ILe,"arrayFilter");Fm=ILe});function OLe(){return[]}var Nw,bL=M(()=>{"use strict";o(OLe,"stubArray");Nw=OLe});var PLe,BLe,qJ,FLe,zm,Rw=M(()=>{"use strict";Dw();bL();PLe=Object.prototype,BLe=PLe.propertyIsEnumerable,qJ=Object.getOwnPropertySymbols,FLe=qJ?function(t){return t==null?[]:(t=Object(t),Fm(qJ(t),function(e){return BLe.call(t,e)}))}:Nw,zm=FLe});function zLe(t,e){return Uo(t,zm(t),e)}var XJ,jJ=M(()=>{"use strict";Nd();Rw();o(zLe,"copySymbols");XJ=zLe});var GLe,$Le,Mw,wL=M(()=>{"use strict";Aw();g5();Rw();bL();GLe=Object.getOwnPropertySymbols,$Le=GLe?function(t){for(var e=[];t;)Pm(e,zm(t)),t=lm(t);return e}:Nw,Mw=$Le});function VLe(t,e){return Uo(t,Mw(t),e)}var KJ,QJ=M(()=>{"use strict";Nd();wL();o(VLe,"copySymbolsIn");KJ=VLe});function ULe(t,e,r){var n=e(t);return Dt(t)?n:Pm(n,r(t))}var Iw,TL=M(()=>{"use strict";Aw();Hn();o(ULe,"baseGetAllKeys");Iw=ULe});function HLe(t){return Iw(t,Gr,zm)}var Yv,kL=M(()=>{"use strict";TL();Rw();Lc();o(HLe,"getAllKeys");Yv=HLe});function WLe(t){return Iw(t,_s,Mw)}var Ow,EL=M(()=>{"use strict";TL();wL();Vh();o(WLe,"getAllKeysIn");Ow=WLe});var YLe,Pw,ZJ=M(()=>{"use strict";Oh();Bo();YLe=As(oi,"DataView"),Pw=YLe});var qLe,Bw,JJ=M(()=>{"use strict";Oh();Bo();qLe=As(oi,"Promise"),Bw=qLe});var XLe,ef,SL=M(()=>{"use strict";Oh();Bo();XLe=As(oi,"Set"),ef=XLe});var eee,jLe,tee,ree,nee,iee,KLe,QLe,ZLe,JLe,eDe,$d,uo,Vd=M(()=>{"use strict";ZJ();l5();JJ();SL();xJ();Lu();D_();eee="[object Map]",jLe="[object Object]",tee="[object Promise]",ree="[object Set]",nee="[object WeakMap]",iee="[object DataView]",KLe=Du(Pw),QLe=Du(Fh),ZLe=Du(Bw),JLe=Du(ef),eDe=Du(xw),$d=ga;(Pw&&$d(new Pw(new ArrayBuffer(1)))!=iee||Fh&&$d(new Fh)!=eee||Bw&&$d(Bw.resolve())!=tee||ef&&$d(new ef)!=ree||xw&&$d(new xw)!=nee)&&($d=o(function(t){var e=ga(t),r=e==jLe?t.constructor:void 0,n=r?Du(r):"";if(n)switch(n){case KLe:return iee;case QLe:return eee;case ZLe:return tee;case JLe:return ree;case eDe:return nee}return e},"getTag"));uo=$d});function nDe(t){var e=t.length,r=new t.constructor(e);return e&&typeof t[0]=="string"&&rDe.call(t,"index")&&(r.index=t.index,r.input=t.input),r}var tDe,rDe,aee,see=M(()=>{"use strict";tDe=Object.prototype,rDe=tDe.hasOwnProperty;o(nDe,"initCloneArray");aee=nDe});function iDe(t,e){var r=e?om(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}var oee,lee=M(()=>{"use strict";f5();o(iDe,"cloneDataView");oee=iDe});function sDe(t){var e=new t.constructor(t.source,aDe.exec(t));return e.lastIndex=t.lastIndex,e}var aDe,cee,uee=M(()=>{"use strict";aDe=/\w*$/;o(sDe,"cloneRegExp");cee=sDe});function oDe(t){return fee?Object(fee.call(t)):{}}var hee,fee,dee,pee=M(()=>{"use strict";Cd();hee=ia?ia.prototype:void 0,fee=hee?hee.valueOf:void 0;o(oDe,"cloneSymbol");dee=oDe});function ADe(t,e,r){var n=t.constructor;switch(e){case gDe:return om(t);case lDe:case cDe:return new n(+t);case yDe:return oee(t,r);case vDe:case xDe:case bDe:case wDe:case TDe:case kDe:case EDe:case SDe:case CDe:return d5(t,r);case uDe:return new n;case hDe:case pDe:return new n(t);case fDe:return cee(t);case dDe:return new n;case mDe:return dee(t)}}var lDe,cDe,uDe,hDe,fDe,dDe,pDe,mDe,gDe,yDe,vDe,xDe,bDe,wDe,TDe,kDe,EDe,SDe,CDe,mee,gee=M(()=>{"use strict";f5();lee();uee();pee();F_();lDe="[object Boolean]",cDe="[object Date]",uDe="[object Map]",hDe="[object Number]",fDe="[object RegExp]",dDe="[object Set]",pDe="[object String]",mDe="[object Symbol]",gDe="[object ArrayBuffer]",yDe="[object DataView]",vDe="[object Float32Array]",xDe="[object Float64Array]",bDe="[object Int8Array]",wDe="[object Int16Array]",TDe="[object Int32Array]",kDe="[object Uint8Array]",EDe="[object Uint8ClampedArray]",SDe="[object Uint16Array]",CDe="[object Uint32Array]";o(ADe,"initCloneByTag");mee=ADe});function LDe(t){return ei(t)&&uo(t)==_De}var _De,yee,vee=M(()=>{"use strict";Vd();zo();_De="[object Map]";o(LDe,"baseIsMap");yee=LDe});var xee,DDe,bee,wee=M(()=>{"use strict";vee();Dd();vv();xee=Vo&&Vo.isMap,DDe=xee?$o(xee):yee,bee=DDe});function RDe(t){return ei(t)&&uo(t)==NDe}var NDe,Tee,kee=M(()=>{"use strict";Vd();zo();NDe="[object Set]";o(RDe,"baseIsSet");Tee=RDe});var Eee,MDe,See,Cee=M(()=>{"use strict";kee();Dd();vv();Eee=Vo&&Vo.isSet,MDe=Eee?$o(Eee):Tee,See=MDe});function Fw(t,e,r,n,i,a){var s,l=e&IDe,u=e&ODe,h=e&PDe;if(r&&(s=i?r(t,n,i,a):r(t)),s!==void 0)return s;if(!xn(t))return t;var f=Dt(t);if(f){if(s=aee(t),!l)return p5(t,s)}else{var d=uo(t),p=d==_ee||d==$De;if(Il(t))return h5(t,l);if(d==Lee||d==Aee||p&&!i){if(s=u||p?{}:y5(t),!l)return u?KJ(t,WJ(s,t)):XJ(t,UJ(s,t))}else{if(!An[d])return i?t:{};s=mee(t,d,l)}}a||(a=new bc);var m=a.get(t);if(m)return m;a.set(t,s),See(t)?t.forEach(function(v){s.add(Fw(v,e,r,v,t,a))}):bee(t)&&t.forEach(function(v,x){s.set(x,Fw(v,e,r,x,t,a))});var g=h?u?Ow:Yv:u?_s:Gr,y=f?void 0:g(t);return bw(y||t,function(v,x){y&&(x=v,v=t[x]),kc(s,x,Fw(v,e,r,x,t,a))}),s}var IDe,ODe,PDe,Aee,BDe,FDe,zDe,GDe,_ee,$De,VDe,UDe,Lee,HDe,WDe,YDe,qDe,XDe,jDe,KDe,QDe,ZDe,JDe,eNe,tNe,rNe,nNe,iNe,aNe,An,zw,CL=M(()=>{"use strict";mv();mL();dm();HJ();YJ();P_();z_();jJ();QJ();kL();EL();Vd();see();gee();$_();Hn();fm();wee();io();Cee();Lc();Vh();IDe=1,ODe=2,PDe=4,Aee="[object Arguments]",BDe="[object Array]",FDe="[object Boolean]",zDe="[object Date]",GDe="[object Error]",_ee="[object Function]",$De="[object GeneratorFunction]",VDe="[object Map]",UDe="[object Number]",Lee="[object Object]",HDe="[object RegExp]",WDe="[object Set]",YDe="[object String]",qDe="[object Symbol]",XDe="[object WeakMap]",jDe="[object ArrayBuffer]",KDe="[object DataView]",QDe="[object Float32Array]",ZDe="[object Float64Array]",JDe="[object Int8Array]",eNe="[object Int16Array]",tNe="[object Int32Array]",rNe="[object Uint8Array]",nNe="[object Uint8ClampedArray]",iNe="[object Uint16Array]",aNe="[object Uint32Array]",An={};An[Aee]=An[BDe]=An[jDe]=An[KDe]=An[FDe]=An[zDe]=An[QDe]=An[ZDe]=An[JDe]=An[eNe]=An[tNe]=An[VDe]=An[UDe]=An[Lee]=An[HDe]=An[WDe]=An[YDe]=An[qDe]=An[rNe]=An[nNe]=An[iNe]=An[aNe]=!0;An[GDe]=An[_ee]=An[XDe]=!1;o(Fw,"baseClone");zw=Fw});function oNe(t){return zw(t,sNe)}var sNe,rn,AL=M(()=>{"use strict";CL();sNe=4;o(oNe,"clone");rn=oNe});function uNe(t){return zw(t,lNe|cNe)}var lNe,cNe,_L,Dee=M(()=>{"use strict";CL();lNe=1,cNe=4;o(uNe,"cloneDeep");_L=uNe});function hNe(t){for(var e=-1,r=t==null?0:t.length,n=0,i=[];++e{"use strict";o(hNe,"compact");Rc=hNe});function dNe(t){return this.__data__.set(t,fNe),this}var fNe,Ree,Mee=M(()=>{"use strict";fNe="__lodash_hash_undefined__";o(dNe,"setCacheAdd");Ree=dNe});function pNe(t){return this.__data__.has(t)}var Iee,Oee=M(()=>{"use strict";o(pNe,"setCacheHas");Iee=pNe});function Gw(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new _d;++e{"use strict";c5();Mee();Oee();o(Gw,"SetCache");Gw.prototype.add=Gw.prototype.push=Ree;Gw.prototype.has=Iee;Gm=Gw});function mNe(t,e){for(var r=-1,n=t==null?0:t.length;++r{"use strict";o(mNe,"arraySome");Vw=mNe});function gNe(t,e){return t.has(e)}var $m,Uw=M(()=>{"use strict";o(gNe,"cacheHas");$m=gNe});function xNe(t,e,r,n,i,a){var s=r&yNe,l=t.length,u=e.length;if(l!=u&&!(s&&u>l))return!1;var h=a.get(t),f=a.get(e);if(h&&f)return h==e&&f==t;var d=-1,p=!0,m=r&vNe?new Gm:void 0;for(a.set(t,e),a.set(e,t);++d{"use strict";$w();LL();Uw();yNe=1,vNe=2;o(xNe,"equalArrays");Hw=xNe});function bNe(t){var e=-1,r=Array(t.size);return t.forEach(function(n,i){r[++e]=[i,n]}),r}var Pee,Bee=M(()=>{"use strict";o(bNe,"mapToArray");Pee=bNe});function wNe(t){var e=-1,r=Array(t.size);return t.forEach(function(n){r[++e]=n}),r}var Vm,Ww=M(()=>{"use strict";o(wNe,"setToArray");Vm=wNe});function ONe(t,e,r,n,i,a,s){switch(r){case INe:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case MNe:return!(t.byteLength!=e.byteLength||!a(new sm(t),new sm(e)));case ENe:case SNe:case _Ne:return Fo(+t,+e);case CNe:return t.name==e.name&&t.message==e.message;case LNe:case NNe:return t==e+"";case ANe:var l=Pee;case DNe:var u=n&TNe;if(l||(l=Vm),t.size!=e.size&&!u)return!1;var h=s.get(t);if(h)return h==e;n|=kNe,s.set(t,e);var f=Hw(l(t),l(e),n,i,a,s);return s.delete(t),f;case RNe:if(NL)return NL.call(t)==NL.call(e)}return!1}var TNe,kNe,ENe,SNe,CNe,ANe,_Ne,LNe,DNe,NNe,RNe,MNe,INe,Fee,NL,zee,Gee=M(()=>{"use strict";Cd();B_();Ad();DL();Bee();Ww();TNe=1,kNe=2,ENe="[object Boolean]",SNe="[object Date]",CNe="[object Error]",ANe="[object Map]",_Ne="[object Number]",LNe="[object RegExp]",DNe="[object Set]",NNe="[object String]",RNe="[object Symbol]",MNe="[object ArrayBuffer]",INe="[object DataView]",Fee=ia?ia.prototype:void 0,NL=Fee?Fee.valueOf:void 0;o(ONe,"equalByTag");zee=ONe});function zNe(t,e,r,n,i,a){var s=r&PNe,l=Yv(t),u=l.length,h=Yv(e),f=h.length;if(u!=f&&!s)return!1;for(var d=u;d--;){var p=l[d];if(!(s?p in e:FNe.call(e,p)))return!1}var m=a.get(t),g=a.get(e);if(m&&g)return m==e&&g==t;var y=!0;a.set(t,e),a.set(e,t);for(var v=s;++d{"use strict";kL();PNe=1,BNe=Object.prototype,FNe=BNe.hasOwnProperty;o(zNe,"equalObjects");$ee=zNe});function VNe(t,e,r,n,i,a){var s=Dt(t),l=Dt(e),u=s?Hee:uo(t),h=l?Hee:uo(e);u=u==Uee?Yw:u,h=h==Uee?Yw:h;var f=u==Yw,d=h==Yw,p=u==h;if(p&&Il(t)){if(!Il(e))return!1;s=!0,f=!1}if(p&&!f)return a||(a=new bc),s||Gh(t)?Hw(t,e,r,n,i,a):zee(t,e,u,r,n,i,a);if(!(r&GNe)){var m=f&&Wee.call(t,"__wrapped__"),g=d&&Wee.call(e,"__wrapped__");if(m||g){var y=m?t.value():t,v=g?e.value():e;return a||(a=new bc),i(y,v,r,n,a)}}return p?(a||(a=new bc),$ee(t,e,r,n,i,a)):!1}var GNe,Uee,Hee,Yw,$Ne,Wee,Yee,qee=M(()=>{"use strict";mv();DL();Gee();Vee();Vd();Hn();fm();xv();GNe=1,Uee="[object Arguments]",Hee="[object Array]",Yw="[object Object]",$Ne=Object.prototype,Wee=$Ne.hasOwnProperty;o(VNe,"baseIsEqualDeep");Yee=VNe});function Xee(t,e,r,n,i){return t===e?!0:t==null||e==null||!ei(t)&&!ei(e)?t!==t&&e!==e:Yee(t,e,r,n,Xee,i)}var qw,RL=M(()=>{"use strict";qee();zo();o(Xee,"baseIsEqual");qw=Xee});function WNe(t,e,r,n){var i=r.length,a=i,s=!n;if(t==null)return!a;for(t=Object(t);i--;){var l=r[i];if(s&&l[2]?l[1]!==t[l[0]]:!(l[0]in t))return!1}for(;++i{"use strict";mv();RL();UNe=1,HNe=2;o(WNe,"baseIsMatch");jee=WNe});function YNe(t){return t===t&&!xn(t)}var Xw,ML=M(()=>{"use strict";io();o(YNe,"isStrictComparable");Xw=YNe});function qNe(t){for(var e=Gr(t),r=e.length;r--;){var n=e[r],i=t[n];e[r]=[n,i,Xw(i)]}return e}var Qee,Zee=M(()=>{"use strict";ML();Lc();o(qNe,"getMatchData");Qee=qNe});function XNe(t,e){return function(r){return r==null?!1:r[t]===e&&(e!==void 0||t in Object(r))}}var jw,IL=M(()=>{"use strict";o(XNe,"matchesStrictComparable");jw=XNe});function jNe(t){var e=Qee(t);return e.length==1&&e[0][2]?jw(e[0][0],e[0][1]):function(r){return r===t||jee(r,t,e)}}var Jee,ete=M(()=>{"use strict";Kee();Zee();IL();o(jNe,"baseMatches");Jee=jNe});function KNe(t,e){return t!=null&&e in Object(t)}var tte,rte=M(()=>{"use strict";o(KNe,"baseHasIn");tte=KNe});function QNe(t,e,r){e=Zh(e,t);for(var n=-1,i=e.length,a=!1;++n{"use strict";Hv();um();Hn();wv();v5();Om();o(QNe,"hasPath");Kw=QNe});function ZNe(t,e){return t!=null&&Kw(t,e,tte)}var Qw,PL=M(()=>{"use strict";rte();OL();o(ZNe,"hasIn");Qw=ZNe});function tRe(t,e){return Im(t)&&Xw(e)?jw(Dc(t),e):function(r){var n=NJ(r,t);return n===void 0&&n===e?Qw(r,t):qw(e,n,JNe|eRe)}}var JNe,eRe,nte,ite=M(()=>{"use strict";RL();RJ();PL();Sw();ML();IL();Om();JNe=1,eRe=2;o(tRe,"baseMatchesProperty");nte=tRe});function rRe(t){return function(e){return e?.[t]}}var Zw,BL=M(()=>{"use strict";o(rRe,"baseProperty");Zw=rRe});function nRe(t){return function(e){return Jh(e,t)}}var ate,ste=M(()=>{"use strict";Wv();o(nRe,"basePropertyDeep");ate=nRe});function iRe(t){return Im(t)?Zw(Dc(t)):ate(t)}var ote,lte=M(()=>{"use strict";BL();ste();Sw();Om();o(iRe,"property");ote=iRe});function aRe(t){return typeof t=="function"?t:t==null?aa:typeof t=="object"?Dt(t)?nte(t[0],t[1]):Jee(t):ote(t)}var dn,is=M(()=>{"use strict";ete();ite();Ru();Hn();lte();o(aRe,"baseIteratee");dn=aRe});function sRe(t,e,r,n){for(var i=-1,a=t==null?0:t.length;++i{"use strict";o(sRe,"arrayAggregator");cte=sRe});function oRe(t,e){return t&&am(t,e,Gr)}var Um,Jw=M(()=>{"use strict";u5();Lc();o(oRe,"baseForOwn");Um=oRe});function lRe(t,e){return function(r,n){if(r==null)return r;if(!li(r))return t(r,n);for(var i=r.length,a=e?i:-1,s=Object(r);(e?a--:++a{"use strict";Go();o(lRe,"createBaseEach");hte=lRe});var cRe,Bs,tf=M(()=>{"use strict";Jw();fte();cRe=hte(Um),Bs=cRe});function uRe(t,e,r,n){return Bs(t,function(i,a,s){e(n,i,r(i),s)}),n}var dte,pte=M(()=>{"use strict";tf();o(uRe,"baseAggregator");dte=uRe});function hRe(t,e){return function(r,n){var i=Dt(r)?cte:dte,a=e?e():{};return i(r,t,dn(n,2),a)}}var mte,gte=M(()=>{"use strict";ute();pte();is();Hn();o(hRe,"createAggregator");mte=hRe});var fRe,eT,yte=M(()=>{"use strict";Bo();fRe=o(function(){return oi.Date.now()},"now"),eT=fRe});var vte,dRe,pRe,rf,xte=M(()=>{"use strict";pm();Ad();Rd();Vh();vte=Object.prototype,dRe=vte.hasOwnProperty,pRe=Ec(function(t,e){t=Object(t);var r=-1,n=e.length,i=n>2?e[2]:void 0;for(i&&ao(e[0],e[1],i)&&(n=1);++r{"use strict";o(mRe,"arrayIncludesWith");tT=mRe});function yRe(t,e,r,n){var i=-1,a=kw,s=!0,l=t.length,u=[],h=e.length;if(!l)return u;r&&(e=Ps(e,$o(r))),n?(a=tT,s=!1):e.length>=gRe&&(a=$m,s=!1,e=new Gm(e));e:for(;++i{"use strict";$w();yL();FL();Gd();Dd();Uw();gRe=200;o(yRe,"baseDifference");bte=yRe});var vRe,nf,Tte=M(()=>{"use strict";wte();Bm();pm();x5();vRe=Ec(function(t,e){return Ld(t)?bte(t,Nc(e,1,Ld,!0)):[]}),nf=vRe});function xRe(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}var xa,kte=M(()=>{"use strict";o(xRe,"last");xa=xRe});function bRe(t,e,r){var n=t==null?0:t.length;return n?(e=r||e===void 0?1:_c(e),Lw(t,e<0?0:e,n)):[]}var xi,Ete=M(()=>{"use strict";xL();Nm();o(bRe,"drop");xi=bRe});function wRe(t,e,r){var n=t==null?0:t.length;return n?(e=r||e===void 0?1:_c(e),e=n-e,Lw(t,0,e<0?0:e)):[]}var zu,Ste=M(()=>{"use strict";xL();Nm();o(wRe,"dropRight");zu=wRe});function TRe(t){return typeof t=="function"?t:aa}var Hm,rT=M(()=>{"use strict";Ru();o(TRe,"castFunction");Hm=TRe});function kRe(t,e){var r=Dt(t)?bw:Bs;return r(t,Hm(e))}var Se,nT=M(()=>{"use strict";mL();tf();rT();Hn();o(kRe,"forEach");Se=kRe});var Cte=M(()=>{"use strict";nT()});function ERe(t,e){for(var r=-1,n=t==null?0:t.length;++r{"use strict";o(ERe,"arrayEvery");Ate=ERe});function SRe(t,e){var r=!0;return Bs(t,function(n,i,a){return r=!!e(n,i,a),r}),r}var Lte,Dte=M(()=>{"use strict";tf();o(SRe,"baseEvery");Lte=SRe});function CRe(t,e,r){var n=Dt(t)?Ate:Lte;return r&&ao(t,e,r)&&(e=void 0),n(t,dn(e,3))}var za,Nte=M(()=>{"use strict";_te();Dte();is();Hn();Rd();o(CRe,"every");za=CRe});function ARe(t,e){var r=[];return Bs(t,function(n,i,a){e(n,i,a)&&r.push(n)}),r}var iT,zL=M(()=>{"use strict";tf();o(ARe,"baseFilter");iT=ARe});function _Re(t,e){var r=Dt(t)?Fm:iT;return r(t,dn(e,3))}var Yr,GL=M(()=>{"use strict";Dw();zL();is();Hn();o(_Re,"filter");Yr=_Re});function LRe(t){return function(e,r,n){var i=Object(e);if(!li(e)){var a=dn(r,3);e=Gr(e),r=o(function(l){return a(i[l],l,i)},"predicate")}var s=t(e,r,n);return s>-1?i[a?e[s]:s]:void 0}}var Rte,Mte=M(()=>{"use strict";is();Go();Lc();o(LRe,"createFind");Rte=LRe});function NRe(t,e,r){var n=t==null?0:t.length;if(!n)return-1;var i=r==null?0:_c(r);return i<0&&(i=DRe(n+i,0)),ww(t,dn(e,3),i)}var DRe,Ite,Ote=M(()=>{"use strict";gL();is();Nm();DRe=Math.max;o(NRe,"findIndex");Ite=NRe});var RRe,as,Pte=M(()=>{"use strict";Mte();Ote();RRe=Rte(Ite),as=RRe});function MRe(t){return t&&t.length?t[0]:void 0}var sa,Bte=M(()=>{"use strict";o(MRe,"head");sa=MRe});var Fte=M(()=>{"use strict";Bte()});function IRe(t,e){var r=-1,n=li(t)?Array(t.length):[];return Bs(t,function(i,a,s){n[++r]=e(i,a,s)}),n}var aT,$L=M(()=>{"use strict";tf();Go();o(IRe,"baseMap");aT=IRe});function ORe(t,e){var r=Dt(t)?Ps:aT;return r(t,dn(e,3))}var Qe,Wm=M(()=>{"use strict";Gd();is();$L();Hn();o(ORe,"map");Qe=ORe});function PRe(t,e){return Nc(Qe(t,e),1)}var ba,VL=M(()=>{"use strict";Bm();Wm();o(PRe,"flatMap");ba=PRe});function BRe(t,e){return t==null?t:am(t,Hm(e),_s)}var UL,zte=M(()=>{"use strict";u5();rT();Vh();o(BRe,"forIn");UL=BRe});function FRe(t,e){return t&&Um(t,Hm(e))}var HL,Gte=M(()=>{"use strict";Jw();rT();o(FRe,"forOwn");HL=FRe});var zRe,GRe,$Re,WL,$te=M(()=>{"use strict";im();gte();zRe=Object.prototype,GRe=zRe.hasOwnProperty,$Re=mte(function(t,e,r){GRe.call(t,r)?t[r].push(e):wc(t,r,[e])}),WL=$Re});function VRe(t,e){return t>e}var Vte,Ute=M(()=>{"use strict";o(VRe,"baseGt");Vte=VRe});function WRe(t,e){return t!=null&&HRe.call(t,e)}var URe,HRe,Hte,Wte=M(()=>{"use strict";URe=Object.prototype,HRe=URe.hasOwnProperty;o(WRe,"baseHas");Hte=WRe});function YRe(t,e){return t!=null&&Kw(t,e,Hte)}var Nt,Yte=M(()=>{"use strict";Wte();OL();o(YRe,"has");Nt=YRe});function XRe(t){return typeof t=="string"||!Dt(t)&&ei(t)&&ga(t)==qRe}var qRe,bi,sT=M(()=>{"use strict";Lu();Hn();zo();qRe="[object String]";o(XRe,"isString");bi=XRe});function jRe(t,e){return Ps(e,function(r){return t[r]})}var qte,Xte=M(()=>{"use strict";Gd();o(jRe,"baseValues");qte=jRe});function KRe(t){return t==null?[]:qte(t,Gr(t))}var br,YL=M(()=>{"use strict";Xte();Lc();o(KRe,"values");br=KRe});function ZRe(t,e,r,n){t=li(t)?t:br(t),r=r&&!n?_c(r):0;var i=t.length;return r<0&&(r=QRe(i+r,0)),bi(t)?r<=i&&t.indexOf(e,r)>-1:!!i&&Rm(t,e,r)>-1}var QRe,Yn,jte=M(()=>{"use strict";Tw();Go();sT();Nm();YL();QRe=Math.max;o(ZRe,"includes");Yn=ZRe});function eMe(t,e,r){var n=t==null?0:t.length;if(!n)return-1;var i=r==null?0:_c(r);return i<0&&(i=JRe(n+i,0)),Rm(t,e,i)}var JRe,oT,Kte=M(()=>{"use strict";Tw();Nm();JRe=Math.max;o(eMe,"indexOf");oT=eMe});function aMe(t){if(t==null)return!0;if(li(t)&&(Dt(t)||typeof t=="string"||typeof t.splice=="function"||Il(t)||Gh(t)||Ml(t)))return!t.length;var e=uo(t);if(e==tMe||e==rMe)return!t.size;if(Tc(t))return!Mm(t).length;for(var r in t)if(iMe.call(t,r))return!1;return!0}var tMe,rMe,nMe,iMe,cr,lT=M(()=>{"use strict";Ew();Vd();um();Hn();Go();fm();cm();xv();tMe="[object Map]",rMe="[object Set]",nMe=Object.prototype,iMe=nMe.hasOwnProperty;o(aMe,"isEmpty");cr=aMe});function oMe(t){return ei(t)&&ga(t)==sMe}var sMe,Qte,Zte=M(()=>{"use strict";Lu();zo();sMe="[object RegExp]";o(oMe,"baseIsRegExp");Qte=oMe});var Jte,lMe,Xo,ere=M(()=>{"use strict";Zte();Dd();vv();Jte=Vo&&Vo.isRegExp,lMe=Jte?$o(Jte):Qte,Xo=lMe});function cMe(t){return t===void 0}var dr,tre=M(()=>{"use strict";o(cMe,"isUndefined");dr=cMe});function uMe(t,e){return t{"use strict";o(uMe,"baseLt");cT=uMe});function hMe(t,e){var r={};return e=dn(e,3),Um(t,function(n,i,a){wc(r,i,e(n,i,a))}),r}var Ud,rre=M(()=>{"use strict";im();Jw();is();o(hMe,"mapValues");Ud=hMe});function fMe(t,e,r){for(var n=-1,i=t.length;++n{"use strict";zd();o(fMe,"baseExtremum");Ym=fMe});function dMe(t){return t&&t.length?Ym(t,aa,Vte):void 0}var Fs,nre=M(()=>{"use strict";uT();Ute();Ru();o(dMe,"max");Fs=dMe});function pMe(t){return t&&t.length?Ym(t,aa,cT):void 0}var Bl,XL=M(()=>{"use strict";uT();qL();Ru();o(pMe,"min");Bl=pMe});function mMe(t,e){return t&&t.length?Ym(t,dn(e,2),cT):void 0}var Hd,ire=M(()=>{"use strict";uT();is();qL();o(mMe,"minBy");Hd=mMe});function yMe(t){if(typeof t!="function")throw new TypeError(gMe);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}var gMe,are,sre=M(()=>{"use strict";gMe="Expected a function";o(yMe,"negate");are=yMe});function vMe(t,e,r,n){if(!xn(t))return t;e=Zh(e,t);for(var i=-1,a=e.length,s=a-1,l=t;l!=null&&++i{"use strict";dm();Hv();wv();io();Om();o(vMe,"baseSet");ore=vMe});function xMe(t,e,r){for(var n=-1,i=e.length,a={};++n{"use strict";Wv();lre();Hv();o(xMe,"basePickBy");hT=xMe});function bMe(t,e){if(t==null)return{};var r=Ps(Ow(t),function(n){return[n]});return e=dn(e),hT(t,r,function(n,i){return e(n,i[0])})}var zs,cre=M(()=>{"use strict";Gd();is();jL();EL();o(bMe,"pickBy");zs=bMe});function wMe(t,e){var r=t.length;for(t.sort(e);r--;)t[r]=t[r].value;return t}var ure,hre=M(()=>{"use strict";o(wMe,"baseSortBy");ure=wMe});function TMe(t,e){if(t!==e){var r=t!==void 0,n=t===null,i=t===t,a=co(t),s=e!==void 0,l=e===null,u=e===e,h=co(e);if(!l&&!h&&!a&&t>e||a&&s&&u&&!l&&!h||n&&s&&u||!r&&u||!i)return 1;if(!n&&!a&&!h&&t{"use strict";zd();o(TMe,"compareAscending");fre=TMe});function kMe(t,e,r){for(var n=-1,i=t.criteria,a=e.criteria,s=i.length,l=r.length;++n=l)return u;var h=r[n];return u*(h=="desc"?-1:1)}}return t.index-e.index}var pre,mre=M(()=>{"use strict";dre();o(kMe,"compareMultiple");pre=kMe});function EMe(t,e,r){e.length?e=Ps(e,function(a){return Dt(a)?function(s){return Jh(s,a.length===1?a[0]:a)}:a}):e=[aa];var n=-1;e=Ps(e,$o(dn));var i=aT(t,function(a,s,l){var u=Ps(e,function(h){return h(a)});return{criteria:u,index:++n,value:a}});return ure(i,function(a,s){return pre(a,s,r)})}var gre,yre=M(()=>{"use strict";Gd();Wv();is();$L();hre();Dd();mre();Ru();Hn();o(EMe,"baseOrderBy");gre=EMe});var SMe,vre,xre=M(()=>{"use strict";BL();SMe=Zw("length"),vre=SMe});function BMe(t){for(var e=bre.lastIndex=0;bre.test(t);)++e;return e}var wre,CMe,AMe,_Me,LMe,DMe,NMe,KL,QL,RMe,Tre,kre,Ere,MMe,Sre,Cre,IMe,OMe,PMe,bre,Are,_re=M(()=>{"use strict";wre="\\ud800-\\udfff",CMe="\\u0300-\\u036f",AMe="\\ufe20-\\ufe2f",_Me="\\u20d0-\\u20ff",LMe=CMe+AMe+_Me,DMe="\\ufe0e\\ufe0f",NMe="["+wre+"]",KL="["+LMe+"]",QL="\\ud83c[\\udffb-\\udfff]",RMe="(?:"+KL+"|"+QL+")",Tre="[^"+wre+"]",kre="(?:\\ud83c[\\udde6-\\uddff]){2}",Ere="[\\ud800-\\udbff][\\udc00-\\udfff]",MMe="\\u200d",Sre=RMe+"?",Cre="["+DMe+"]?",IMe="(?:"+MMe+"(?:"+[Tre,kre,Ere].join("|")+")"+Cre+Sre+")*",OMe=Cre+Sre+IMe,PMe="(?:"+[Tre+KL+"?",KL,kre,Ere,NMe].join("|")+")",bre=RegExp(QL+"(?="+QL+")|"+PMe+OMe,"g");o(BMe,"unicodeSize");Are=BMe});function FMe(t){return zJ(t)?Are(t):vre(t)}var Lre,Dre=M(()=>{"use strict";xre();GJ();_re();o(FMe,"stringSize");Lre=FMe});function zMe(t,e){return hT(t,e,function(r,n){return Qw(t,n)})}var Nre,Rre=M(()=>{"use strict";jL();PL();o(zMe,"basePick");Nre=zMe});var GMe,Wd,Mre=M(()=>{"use strict";Rre();FJ();GMe=BJ(function(t,e){return t==null?{}:Nre(t,e)}),Wd=GMe});function UMe(t,e,r,n){for(var i=-1,a=VMe($Me((e-t)/(r||1)),0),s=Array(a);a--;)s[n?a:++i]=t,t+=r;return s}var $Me,VMe,Ire,Ore=M(()=>{"use strict";$Me=Math.ceil,VMe=Math.max;o(UMe,"baseRange");Ire=UMe});function HMe(t){return function(e,r,n){return n&&typeof n!="number"&&ao(e,r,n)&&(r=n=void 0),e=Dm(e),r===void 0?(r=e,e=0):r=Dm(r),n=n===void 0?e{"use strict";Ore();Rd();dL();o(HMe,"createRange");Pre=HMe});var WMe,jo,Fre=M(()=>{"use strict";Bre();WMe=Pre(),jo=WMe});function YMe(t,e,r,n,i){return i(t,function(a,s,l){r=n?(n=!1,a):e(r,a,s,l)}),r}var zre,Gre=M(()=>{"use strict";o(YMe,"baseReduce");zre=YMe});function qMe(t,e,r){var n=Dt(t)?$J:zre,i=arguments.length<3;return n(t,dn(e,4),r,i,Bs)}var qr,ZL=M(()=>{"use strict";VJ();tf();is();Gre();Hn();o(qMe,"reduce");qr=qMe});function XMe(t,e){var r=Dt(t)?Fm:iT;return r(t,are(dn(e,3)))}var af,$re=M(()=>{"use strict";Dw();zL();is();Hn();sre();o(XMe,"reject");af=XMe});function QMe(t){if(t==null)return 0;if(li(t))return bi(t)?Lre(t):t.length;var e=uo(t);return e==jMe||e==KMe?t.size:Mm(t).length}var jMe,KMe,JL,Vre=M(()=>{"use strict";Ew();Vd();Go();sT();Dre();jMe="[object Map]",KMe="[object Set]";o(QMe,"size");JL=QMe});function ZMe(t,e){var r;return Bs(t,function(n,i,a){return r=e(n,i,a),!r}),!!r}var Ure,Hre=M(()=>{"use strict";tf();o(ZMe,"baseSome");Ure=ZMe});function JMe(t,e,r){var n=Dt(t)?Vw:Ure;return r&&ao(t,e,r)&&(e=void 0),n(t,dn(e,3))}var qv,Wre=M(()=>{"use strict";LL();is();Hre();Hn();Rd();o(JMe,"some");qv=JMe});var eIe,Mc,Yre=M(()=>{"use strict";Bm();yre();pm();Rd();eIe=Ec(function(t,e){if(t==null)return[];var r=e.length;return r>1&&ao(t,e[0],e[1])?e=[]:r>2&&ao(e[0],e[1],e[2])&&(e=[e[0]]),gre(t,Nc(e,1),[])}),Mc=eIe});var tIe,rIe,qre,Xre=M(()=>{"use strict";SL();pL();Ww();tIe=1/0,rIe=ef&&1/Vm(new ef([,-0]))[1]==tIe?function(t){return new ef(t)}:ti,qre=rIe});function iIe(t,e,r){var n=-1,i=kw,a=t.length,s=!0,l=[],u=l;if(r)s=!1,i=tT;else if(a>=nIe){var h=e?null:qre(t);if(h)return Vm(h);s=!1,i=$m,u=new Gm}else u=e?[]:l;e:for(;++n{"use strict";$w();yL();FL();Uw();Xre();Ww();nIe=200;o(iIe,"baseUniq");qm=iIe});var aIe,eD,jre=M(()=>{"use strict";Bm();pm();fT();x5();aIe=Ec(function(t){return qm(Nc(t,1,Ld,!0))}),eD=aIe});function sIe(t){return t&&t.length?qm(t):[]}var Xm,Kre=M(()=>{"use strict";fT();o(sIe,"uniq");Xm=sIe});function oIe(t,e){return t&&t.length?qm(t,dn(e,2)):[]}var Qre,Zre=M(()=>{"use strict";is();fT();o(oIe,"uniqBy");Qre=oIe});function cIe(t){var e=++lIe;return Cw(t)+e}var lIe,Yd,Jre=M(()=>{"use strict";vL();lIe=0;o(cIe,"uniqueId");Yd=cIe});function uIe(t,e,r){for(var n=-1,i=t.length,a=e.length,s={};++n{"use strict";o(uIe,"baseZipObject");ene=uIe});function hIe(t,e){return ene(t||[],e||[],kc)}var dT,rne=M(()=>{"use strict";dm();tne();o(hIe,"zipObject");dT=hIe});var Ht=M(()=>{"use strict";CJ();AL();Dee();Nee();q_();xte();Tte();Ete();Ste();Cte();Nte();GL();Pte();Fte();VL();_w();nT();zte();Gte();$te();Yte();Ru();jte();Kte();Hn();lT();uv();io();ere();sT();tre();Lc();kte();Wm();rre();nre();K_();XL();ire();pL();yte();Mre();cre();Fre();ZL();$re();Vre();Wre();Yre();jre();Kre();Jre();YL();rne();});function ine(t,e){t[e]?t[e]++:t[e]=1}function ane(t,e){--t[e]||delete t[e]}function Xv(t,e,r,n){var i=""+e,a=""+r;if(!t&&i>a){var s=i;i=a,a=s}return i+nne+a+nne+(dr(n)?fIe:n)}function dIe(t,e,r,n){var i=""+e,a=""+r;if(!t&&i>a){var s=i;i=a,a=s}var l={v:i,w:a};return n&&(l.name=n),l}function tD(t,e){return Xv(t,e.v,e.w,e.name)}var fIe,qd,nne,Ir,pT=M(()=>{"use strict";Ht();fIe="\0",qd="\0",nne="",Ir=class{static{o(this,"Graph")}constructor(e={}){this._isDirected=Object.prototype.hasOwnProperty.call(e,"directed")?e.directed:!0,this._isMultigraph=Object.prototype.hasOwnProperty.call(e,"multigraph")?e.multigraph:!1,this._isCompound=Object.prototype.hasOwnProperty.call(e,"compound")?e.compound:!1,this._label=void 0,this._defaultNodeLabelFn=Ls(void 0),this._defaultEdgeLabelFn=Ls(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[qd]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(e){return this._label=e,this}graph(){return this._label}setDefaultNodeLabel(e){return _i(e)||(e=Ls(e)),this._defaultNodeLabelFn=e,this}nodeCount(){return this._nodeCount}nodes(){return Gr(this._nodes)}sources(){var e=this;return Yr(this.nodes(),function(r){return cr(e._in[r])})}sinks(){var e=this;return Yr(this.nodes(),function(r){return cr(e._out[r])})}setNodes(e,r){var n=arguments,i=this;return Se(e,function(a){n.length>1?i.setNode(a,r):i.setNode(a)}),this}setNode(e,r){return Object.prototype.hasOwnProperty.call(this._nodes,e)?(arguments.length>1&&(this._nodes[e]=r),this):(this._nodes[e]=arguments.length>1?r:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]=qd,this._children[e]={},this._children[qd][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)}node(e){return this._nodes[e]}hasNode(e){return Object.prototype.hasOwnProperty.call(this._nodes,e)}removeNode(e){if(Object.prototype.hasOwnProperty.call(this._nodes,e)){var r=o(n=>this.removeEdge(this._edgeObjs[n]),"removeEdge");delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],Se(this.children(e),n=>{this.setParent(n)}),delete this._children[e]),Se(Gr(this._in[e]),r),delete this._in[e],delete this._preds[e],Se(Gr(this._out[e]),r),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this}setParent(e,r){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(dr(r))r=qd;else{r+="";for(var n=r;!dr(n);n=this.parent(n))if(n===e)throw new Error("Setting "+r+" as parent of "+e+" would create a cycle");this.setNode(r)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=r,this._children[r][e]=!0,this}_removeFromParentsChildList(e){delete this._children[this._parent[e]][e]}parent(e){if(this._isCompound){var r=this._parent[e];if(r!==qd)return r}}children(e){if(dr(e)&&(e=qd),this._isCompound){var r=this._children[e];if(r)return Gr(r)}else{if(e===qd)return this.nodes();if(this.hasNode(e))return[]}}predecessors(e){var r=this._preds[e];if(r)return Gr(r)}successors(e){var r=this._sucs[e];if(r)return Gr(r)}neighbors(e){var r=this.predecessors(e);if(r)return eD(r,this.successors(e))}isLeaf(e){var r;return this.isDirected()?r=this.successors(e):r=this.neighbors(e),r.length===0}filterNodes(e){var r=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});r.setGraph(this.graph());var n=this;Se(this._nodes,function(s,l){e(l)&&r.setNode(l,s)}),Se(this._edgeObjs,function(s){r.hasNode(s.v)&&r.hasNode(s.w)&&r.setEdge(s,n.edge(s))});var i={};function a(s){var l=n.parent(s);return l===void 0||r.hasNode(l)?(i[s]=l,l):l in i?i[l]:a(l)}return o(a,"findParent"),this._isCompound&&Se(r.nodes(),function(s){r.setParent(s,a(s))}),r}setDefaultEdgeLabel(e){return _i(e)||(e=Ls(e)),this._defaultEdgeLabelFn=e,this}edgeCount(){return this._edgeCount}edges(){return br(this._edgeObjs)}setPath(e,r){var n=this,i=arguments;return qr(e,function(a,s){return i.length>1?n.setEdge(a,s,r):n.setEdge(a,s),s}),this}setEdge(){var e,r,n,i,a=!1,s=arguments[0];typeof s=="object"&&s!==null&&"v"in s?(e=s.v,r=s.w,n=s.name,arguments.length===2&&(i=arguments[1],a=!0)):(e=s,r=arguments[1],n=arguments[3],arguments.length>2&&(i=arguments[2],a=!0)),e=""+e,r=""+r,dr(n)||(n=""+n);var l=Xv(this._isDirected,e,r,n);if(Object.prototype.hasOwnProperty.call(this._edgeLabels,l))return a&&(this._edgeLabels[l]=i),this;if(!dr(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(e),this.setNode(r),this._edgeLabels[l]=a?i:this._defaultEdgeLabelFn(e,r,n);var u=dIe(this._isDirected,e,r,n);return e=u.v,r=u.w,Object.freeze(u),this._edgeObjs[l]=u,ine(this._preds[r],e),ine(this._sucs[e],r),this._in[r][l]=u,this._out[e][l]=u,this._edgeCount++,this}edge(e,r,n){var i=arguments.length===1?tD(this._isDirected,arguments[0]):Xv(this._isDirected,e,r,n);return this._edgeLabels[i]}hasEdge(e,r,n){var i=arguments.length===1?tD(this._isDirected,arguments[0]):Xv(this._isDirected,e,r,n);return Object.prototype.hasOwnProperty.call(this._edgeLabels,i)}removeEdge(e,r,n){var i=arguments.length===1?tD(this._isDirected,arguments[0]):Xv(this._isDirected,e,r,n),a=this._edgeObjs[i];return a&&(e=a.v,r=a.w,delete this._edgeLabels[i],delete this._edgeObjs[i],ane(this._preds[r],e),ane(this._sucs[e],r),delete this._in[r][i],delete this._out[e][i],this._edgeCount--),this}inEdges(e,r){var n=this._in[e];if(n){var i=br(n);return r?Yr(i,function(a){return a.v===r}):i}}outEdges(e,r){var n=this._out[e];if(n){var i=br(n);return r?Yr(i,function(a){return a.w===r}):i}}nodeEdges(e,r){var n=this.inEdges(e,r);if(n)return n.concat(this.outEdges(e,r))}};Ir.prototype._nodeCount=0;Ir.prototype._edgeCount=0;o(ine,"incrementOrInitEntry");o(ane,"decrementOrRemoveEntry");o(Xv,"edgeArgsToId");o(dIe,"edgeArgsToObj");o(tD,"edgeObjToId")});var Gs=M(()=>{"use strict";pT()});function sne(t){t._prev._next=t._next,t._next._prev=t._prev,delete t._next,delete t._prev}function pIe(t,e){if(t!=="_next"&&t!=="_prev")return e}var mT,one=M(()=>{"use strict";mT=class{static{o(this,"List")}constructor(){var e={};e._next=e._prev=e,this._sentinel=e}dequeue(){var e=this._sentinel,r=e._prev;if(r!==e)return sne(r),r}enqueue(e){var r=this._sentinel;e._prev&&e._next&&sne(e),e._next=r._next,r._next._prev=e,r._next=e,e._prev=r}toString(){for(var e=[],r=this._sentinel,n=r._prev;n!==r;)e.push(JSON.stringify(n,pIe)),n=n._prev;return"["+e.join(", ")+"]"}};o(sne,"unlink");o(pIe,"filterOutLinks")});function lne(t,e){if(t.nodeCount()<=1)return[];var r=yIe(t,e||mIe),n=gIe(r.graph,r.buckets,r.zeroIdx);return Wr(Qe(n,function(i){return t.outEdges(i.v,i.w)}))}function gIe(t,e,r){for(var n=[],i=e[e.length-1],a=e[0],s;t.nodeCount();){for(;s=a.dequeue();)rD(t,e,r,s);for(;s=i.dequeue();)rD(t,e,r,s);if(t.nodeCount()){for(var l=e.length-2;l>0;--l)if(s=e[l].dequeue(),s){n=n.concat(rD(t,e,r,s,!0));break}}}return n}function rD(t,e,r,n,i){var a=i?[]:void 0;return Se(t.inEdges(n.v),function(s){var l=t.edge(s),u=t.node(s.v);i&&a.push({v:s.v,w:s.w}),u.out-=l,nD(e,r,u)}),Se(t.outEdges(n.v),function(s){var l=t.edge(s),u=s.w,h=t.node(u);h.in-=l,nD(e,r,h)}),t.removeNode(n.v),a}function yIe(t,e){var r=new Ir,n=0,i=0;Se(t.nodes(),function(l){r.setNode(l,{v:l,in:0,out:0})}),Se(t.edges(),function(l){var u=r.edge(l.v,l.w)||0,h=e(l),f=u+h;r.setEdge(l.v,l.w,f),i=Math.max(i,r.node(l.v).out+=h),n=Math.max(n,r.node(l.w).in+=h)});var a=jo(i+n+3).map(function(){return new mT}),s=n+1;return Se(r.nodes(),function(l){nD(a,s,r.node(l))}),{graph:r,buckets:a,zeroIdx:s}}function nD(t,e,r){r.out?r.in?t[r.out-r.in+e].enqueue(r):t[t.length-1].enqueue(r):t[0].enqueue(r)}var mIe,cne=M(()=>{"use strict";Ht();Gs();one();mIe=Ls(1);o(lne,"greedyFAS");o(gIe,"doGreedyFAS");o(rD,"removeNode");o(yIe,"buildState");o(nD,"assignBucket")});function une(t){var e=t.graph().acyclicer==="greedy"?lne(t,r(t)):vIe(t);Se(e,function(n){var i=t.edge(n);t.removeEdge(n),i.forwardName=n.name,i.reversed=!0,t.setEdge(n.w,n.v,i,Yd("rev"))});function r(n){return function(i){return n.edge(i).weight}}o(r,"weightFn")}function vIe(t){var e=[],r={},n={};function i(a){Object.prototype.hasOwnProperty.call(n,a)||(n[a]=!0,r[a]=!0,Se(t.outEdges(a),function(s){Object.prototype.hasOwnProperty.call(r,s.w)?e.push(s):i(s.w)}),delete r[a])}return o(i,"dfs"),Se(t.nodes(),i),e}function hne(t){Se(t.edges(),function(e){var r=t.edge(e);if(r.reversed){t.removeEdge(e);var n=r.forwardName;delete r.reversed,delete r.forwardName,t.setEdge(e.w,e.v,r,n)}})}var iD=M(()=>{"use strict";Ht();cne();o(une,"run");o(vIe,"dfsFAS");o(hne,"undo")});function Ic(t,e,r,n){var i;do i=Yd(n);while(t.hasNode(i));return r.dummy=e,t.setNode(i,r),i}function dne(t){var e=new Ir().setGraph(t.graph());return Se(t.nodes(),function(r){e.setNode(r,t.node(r))}),Se(t.edges(),function(r){var n=e.edge(r.v,r.w)||{weight:0,minlen:1},i=t.edge(r);e.setEdge(r.v,r.w,{weight:n.weight+i.weight,minlen:Math.max(n.minlen,i.minlen)})}),e}function gT(t){var e=new Ir({multigraph:t.isMultigraph()}).setGraph(t.graph());return Se(t.nodes(),function(r){t.children(r).length||e.setNode(r,t.node(r))}),Se(t.edges(),function(r){e.setEdge(r,t.edge(r))}),e}function aD(t,e){var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2;if(!i&&!a)throw new Error("Not possible to find intersection inside of the rectangle");var u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=l*i/a,h=l):(i<0&&(s=-s),u=s,h=s*a/i),{x:r+u,y:n+h}}function sf(t){var e=Qe(jo(oD(t)+1),function(){return[]});return Se(t.nodes(),function(r){var n=t.node(r),i=n.rank;dr(i)||(e[i][n.order]=r)}),e}function pne(t){var e=Bl(Qe(t.nodes(),function(r){return t.node(r).rank}));Se(t.nodes(),function(r){var n=t.node(r);Nt(n,"rank")&&(n.rank-=e)})}function mne(t){var e=Bl(Qe(t.nodes(),function(a){return t.node(a).rank})),r=[];Se(t.nodes(),function(a){var s=t.node(a).rank-e;r[s]||(r[s]=[]),r[s].push(a)});var n=0,i=t.graph().nodeRankFactor;Se(r,function(a,s){dr(a)&&s%i!==0?--n:n&&Se(a,function(l){t.node(l).rank+=n})})}function sD(t,e,r,n){var i={width:0,height:0};return arguments.length>=4&&(i.rank=r,i.order=n),Ic(t,"border",i,e)}function oD(t){return Fs(Qe(t.nodes(),function(e){var r=t.node(e).rank;if(!dr(r))return r}))}function gne(t,e){var r={lhs:[],rhs:[]};return Se(t,function(n){e(n)?r.lhs.push(n):r.rhs.push(n)}),r}function yne(t,e){var r=eT();try{return e()}finally{console.log(t+" time: "+(eT()-r)+"ms")}}function vne(t,e){return e()}var Oc=M(()=>{"use strict";Ht();Gs();o(Ic,"addDummyNode");o(dne,"simplify");o(gT,"asNonCompoundGraph");o(aD,"intersectRect");o(sf,"buildLayerMatrix");o(pne,"normalizeRanks");o(mne,"removeEmptyRanks");o(sD,"addBorderNode");o(oD,"maxRank");o(gne,"partition");o(yne,"time");o(vne,"notime")});function bne(t){function e(r){var n=t.children(r),i=t.node(r);if(n.length&&Se(n,e),Object.prototype.hasOwnProperty.call(i,"minRank")){i.borderLeft=[],i.borderRight=[];for(var a=i.minRank,s=i.maxRank+1;a{"use strict";Ht();Oc();o(bne,"addBorderSegments");o(xne,"addBorderNode")});function kne(t){var e=t.graph().rankdir.toLowerCase();(e==="lr"||e==="rl")&&Sne(t)}function Ene(t){var e=t.graph().rankdir.toLowerCase();(e==="bt"||e==="rl")&&xIe(t),(e==="lr"||e==="rl")&&(bIe(t),Sne(t))}function Sne(t){Se(t.nodes(),function(e){Tne(t.node(e))}),Se(t.edges(),function(e){Tne(t.edge(e))})}function Tne(t){var e=t.width;t.width=t.height,t.height=e}function xIe(t){Se(t.nodes(),function(e){lD(t.node(e))}),Se(t.edges(),function(e){var r=t.edge(e);Se(r.points,lD),Object.prototype.hasOwnProperty.call(r,"y")&&lD(r)})}function lD(t){t.y=-t.y}function bIe(t){Se(t.nodes(),function(e){cD(t.node(e))}),Se(t.edges(),function(e){var r=t.edge(e);Se(r.points,cD),Object.prototype.hasOwnProperty.call(r,"x")&&cD(r)})}function cD(t){var e=t.x;t.x=t.y,t.y=e}var Cne=M(()=>{"use strict";Ht();o(kne,"adjust");o(Ene,"undo");o(Sne,"swapWidthHeight");o(Tne,"swapWidthHeightOne");o(xIe,"reverseY");o(lD,"reverseYOne");o(bIe,"swapXY");o(cD,"swapXYOne")});function Ane(t){t.graph().dummyChains=[],Se(t.edges(),function(e){TIe(t,e)})}function TIe(t,e){var r=e.v,n=t.node(r).rank,i=e.w,a=t.node(i).rank,s=e.name,l=t.edge(e),u=l.labelRank;if(a!==n+1){t.removeEdge(e);var h=void 0,f,d;for(d=0,++n;n{"use strict";Ht();Oc();o(Ane,"run");o(TIe,"normalizeEdge");o(_ne,"undo")});function jv(t){var e={};function r(n){var i=t.node(n);if(Object.prototype.hasOwnProperty.call(e,n))return i.rank;e[n]=!0;var a=Bl(Qe(t.outEdges(n),function(s){return r(s.w)-t.edge(s).minlen}));return(a===Number.POSITIVE_INFINITY||a===void 0||a===null)&&(a=0),i.rank=a}o(r,"dfs"),Se(t.sources(),r)}function Xd(t,e){return t.node(e.w).rank-t.node(e.v).rank-t.edge(e).minlen}var yT=M(()=>{"use strict";Ht();o(jv,"longestPath");o(Xd,"slack")});function vT(t){var e=new Ir({directed:!1}),r=t.nodes()[0],n=t.nodeCount();e.setNode(r,{});for(var i,a;kIe(e,t){"use strict";Ht();Gs();yT();o(vT,"feasibleTree");o(kIe,"tightTree");o(EIe,"findMinSlackEdge");o(SIe,"shiftRanks")});var Dne=M(()=>{"use strict"});var fD=M(()=>{"use strict"});var dYt,dD=M(()=>{"use strict";Ht();fD();dYt=Ls(1)});var Nne=M(()=>{"use strict";dD()});var pD=M(()=>{"use strict"});var Rne=M(()=>{"use strict";pD()});var EYt,Mne=M(()=>{"use strict";Ht();EYt=Ls(1)});function mD(t){var e={},r={},n=[];function i(a){if(Object.prototype.hasOwnProperty.call(r,a))throw new Kv;Object.prototype.hasOwnProperty.call(e,a)||(r[a]=!0,e[a]=!0,Se(t.predecessors(a),i),delete r[a],n.push(a))}if(o(i,"visit"),Se(t.sinks(),i),JL(e)!==t.nodeCount())throw new Kv;return n}function Kv(){}var gD=M(()=>{"use strict";Ht();mD.CycleException=Kv;o(mD,"topsort");o(Kv,"CycleException");Kv.prototype=new Error});var Ine=M(()=>{"use strict";gD()});function xT(t,e,r){Dt(e)||(e=[e]);var n=(t.isDirected()?t.successors:t.neighbors).bind(t),i=[],a={};return Se(e,function(s){if(!t.hasNode(s))throw new Error("Graph does not have node: "+s);One(t,s,r==="post",a,n,i)}),i}function One(t,e,r,n,i,a){Object.prototype.hasOwnProperty.call(n,e)||(n[e]=!0,r||a.push(e),Se(i(e),function(s){One(t,s,r,n,i,a)}),r&&a.push(e))}var yD=M(()=>{"use strict";Ht();o(xT,"dfs");o(One,"doDfs")});function vD(t,e){return xT(t,e,"post")}var Pne=M(()=>{"use strict";yD();o(vD,"postorder")});function xD(t,e){return xT(t,e,"pre")}var Bne=M(()=>{"use strict";yD();o(xD,"preorder")});var Fne=M(()=>{"use strict";fD();pT()});var zne=M(()=>{"use strict";Dne();dD();Nne();Rne();Mne();Ine();Pne();Bne();Fne();pD();gD()});function lf(t){t=dne(t),jv(t);var e=vT(t);wD(e),bD(e,t);for(var r,n;r=Une(e);)n=Hne(e,t,r),Wne(e,t,r,n)}function bD(t,e){var r=vD(t,t.nodes());r=r.slice(0,r.length-1),Se(r,function(n){DIe(t,e,n)})}function DIe(t,e,r){var n=t.node(r),i=n.parent;t.edge(r,i).cutvalue=$ne(t,e,r)}function $ne(t,e,r){var n=t.node(r),i=n.parent,a=!0,s=e.edge(r,i),l=0;return s||(a=!1,s=e.edge(i,r)),l=s.weight,Se(e.nodeEdges(r),function(u){var h=u.v===r,f=h?u.w:u.v;if(f!==i){var d=h===a,p=e.edge(u).weight;if(l+=d?p:-p,RIe(t,r,f)){var m=t.edge(r,f).cutvalue;l+=d?-m:m}}}),l}function wD(t,e){arguments.length<2&&(e=t.nodes()[0]),Vne(t,{},1,e)}function Vne(t,e,r,n,i){var a=r,s=t.node(n);return e[n]=!0,Se(t.neighbors(n),function(l){Object.prototype.hasOwnProperty.call(e,l)||(r=Vne(t,e,r,l,n))}),s.low=a,s.lim=r++,i?s.parent=i:delete s.parent,r}function Une(t){return as(t.edges(),function(e){return t.edge(e).cutvalue<0})}function Hne(t,e,r){var n=r.v,i=r.w;e.hasEdge(n,i)||(n=r.w,i=r.v);var a=t.node(n),s=t.node(i),l=a,u=!1;a.lim>s.lim&&(l=s,u=!0);var h=Yr(e.edges(),function(f){return u===Gne(t,t.node(f.v),l)&&u!==Gne(t,t.node(f.w),l)});return Hd(h,function(f){return Xd(e,f)})}function Wne(t,e,r,n){var i=r.v,a=r.w;t.removeEdge(i,a),t.setEdge(n.v,n.w,{}),wD(t),bD(t,e),NIe(t,e)}function NIe(t,e){var r=as(t.nodes(),function(i){return!e.node(i).parent}),n=xD(t,r);n=n.slice(1),Se(n,function(i){var a=t.node(i).parent,s=e.edge(i,a),l=!1;s||(s=e.edge(a,i),l=!0),e.node(i).rank=e.node(a).rank+(l?s.minlen:-s.minlen)})}function RIe(t,e,r){return t.hasEdge(e,r)}function Gne(t,e,r){return r.low<=e.lim&&e.lim<=r.lim}var Yne=M(()=>{"use strict";Ht();zne();Oc();hD();yT();lf.initLowLimValues=wD;lf.initCutValues=bD;lf.calcCutValue=$ne;lf.leaveEdge=Une;lf.enterEdge=Hne;lf.exchangeEdges=Wne;o(lf,"networkSimplex");o(bD,"initCutValues");o(DIe,"assignCutValue");o($ne,"calcCutValue");o(wD,"initLowLimValues");o(Vne,"dfsAssignLowLim");o(Une,"leaveEdge");o(Hne,"enterEdge");o(Wne,"exchangeEdges");o(NIe,"updateRanks");o(RIe,"isTreeEdge");o(Gne,"isDescendant")});function TD(t){switch(t.graph().ranker){case"network-simplex":qne(t);break;case"tight-tree":IIe(t);break;case"longest-path":MIe(t);break;default:qne(t)}}function IIe(t){jv(t),vT(t)}function qne(t){lf(t)}var MIe,kD=M(()=>{"use strict";hD();Yne();yT();o(TD,"rank");MIe=jv;o(IIe,"tightTreeRanker");o(qne,"networkSimplexRanker")});function Xne(t){var e=Ic(t,"root",{},"_root"),r=OIe(t),n=Fs(br(r))-1,i=2*n+1;t.graph().nestingRoot=e,Se(t.edges(),function(s){t.edge(s).minlen*=i});var a=PIe(t)+1;Se(t.children(),function(s){jne(t,e,i,a,n,r,s)}),t.graph().nodeRankFactor=i}function jne(t,e,r,n,i,a,s){var l=t.children(s);if(!l.length){s!==e&&t.setEdge(e,s,{weight:0,minlen:r});return}var u=sD(t,"_bt"),h=sD(t,"_bb"),f=t.node(s);t.setParent(u,s),f.borderTop=u,t.setParent(h,s),f.borderBottom=h,Se(l,function(d){jne(t,e,r,n,i,a,d);var p=t.node(d),m=p.borderTop?p.borderTop:d,g=p.borderBottom?p.borderBottom:d,y=p.borderTop?n:2*n,v=m!==g?1:i-a[s]+1;t.setEdge(u,m,{weight:y,minlen:v,nestingEdge:!0}),t.setEdge(g,h,{weight:y,minlen:v,nestingEdge:!0})}),t.parent(s)||t.setEdge(e,u,{weight:0,minlen:i+a[s]})}function OIe(t){var e={};function r(n,i){var a=t.children(n);a&&a.length&&Se(a,function(s){r(s,i+1)}),e[n]=i}return o(r,"dfs"),Se(t.children(),function(n){r(n,1)}),e}function PIe(t){return qr(t.edges(),function(e,r){return e+t.edge(r).weight},0)}function Kne(t){var e=t.graph();t.removeNode(e.nestingRoot),delete e.nestingRoot,Se(t.edges(),function(r){var n=t.edge(r);n.nestingEdge&&t.removeEdge(r)})}var Qne=M(()=>{"use strict";Ht();Oc();o(Xne,"run");o(jne,"dfs");o(OIe,"treeDepths");o(PIe,"sumWeights");o(Kne,"cleanup")});function Zne(t,e,r){var n={},i;Se(r,function(a){for(var s=t.parent(a),l,u;s;){if(l=t.parent(s),l?(u=n[l],n[l]=s):(u=i,i=s),u&&u!==s){e.setEdge(u,s);return}s=l}})}var Jne=M(()=>{"use strict";Ht();o(Zne,"addSubgraphConstraints")});function eie(t,e,r){var n=FIe(t),i=new Ir({compound:!0}).setGraph({root:n}).setDefaultNodeLabel(function(a){return t.node(a)});return Se(t.nodes(),function(a){var s=t.node(a),l=t.parent(a);(s.rank===e||s.minRank<=e&&e<=s.maxRank)&&(i.setNode(a),i.setParent(a,l||n),Se(t[r](a),function(u){var h=u.v===a?u.w:u.v,f=i.edge(h,a),d=dr(f)?0:f.weight;i.setEdge(h,a,{weight:t.edge(u).weight+d})}),Object.prototype.hasOwnProperty.call(s,"minRank")&&i.setNode(a,{borderLeft:s.borderLeft[e],borderRight:s.borderRight[e]}))}),i}function FIe(t){for(var e;t.hasNode(e=Yd("_root")););return e}var tie=M(()=>{"use strict";Ht();Gs();o(eie,"buildLayerGraph");o(FIe,"createRootNode")});function rie(t,e){for(var r=0,n=1;n0;)f%2&&(d+=l[f+1]),f=f-1>>1,l[f]+=h.weight;u+=h.weight*d})),u}var nie=M(()=>{"use strict";Ht();o(rie,"crossCount");o(zIe,"twoLayerCrossCount")});function iie(t){var e={},r=Yr(t.nodes(),function(l){return!t.children(l).length}),n=Fs(Qe(r,function(l){return t.node(l).rank})),i=Qe(jo(n+1),function(){return[]});function a(l){if(!Nt(e,l)){e[l]=!0;var u=t.node(l);i[u.rank].push(l),Se(t.successors(l),a)}}o(a,"dfs");var s=Mc(r,function(l){return t.node(l).rank});return Se(s,a),i}var aie=M(()=>{"use strict";Ht();o(iie,"initOrder")});function sie(t,e){return Qe(e,function(r){var n=t.inEdges(r);if(n.length){var i=qr(n,function(a,s){var l=t.edge(s),u=t.node(s.v);return{sum:a.sum+l.weight*u.order,weight:a.weight+l.weight}},{sum:0,weight:0});return{v:r,barycenter:i.sum/i.weight,weight:i.weight}}else return{v:r}})}var oie=M(()=>{"use strict";Ht();o(sie,"barycenter")});function lie(t,e){var r={};Se(t,function(i,a){var s=r[i.v]={indegree:0,in:[],out:[],vs:[i.v],i:a};dr(i.barycenter)||(s.barycenter=i.barycenter,s.weight=i.weight)}),Se(e.edges(),function(i){var a=r[i.v],s=r[i.w];!dr(a)&&!dr(s)&&(s.indegree++,a.out.push(r[i.w]))});var n=Yr(r,function(i){return!i.indegree});return GIe(n)}function GIe(t){var e=[];function r(a){return function(s){s.merged||(dr(s.barycenter)||dr(a.barycenter)||s.barycenter>=a.barycenter)&&$Ie(a,s)}}o(r,"handleIn");function n(a){return function(s){s.in.push(a),--s.indegree===0&&t.push(s)}}for(o(n,"handleOut");t.length;){var i=t.pop();e.push(i),Se(i.in.reverse(),r(i)),Se(i.out,n(i))}return Qe(Yr(e,function(a){return!a.merged}),function(a){return Wd(a,["vs","i","barycenter","weight"])})}function $Ie(t,e){var r=0,n=0;t.weight&&(r+=t.barycenter*t.weight,n+=t.weight),e.weight&&(r+=e.barycenter*e.weight,n+=e.weight),t.vs=e.vs.concat(t.vs),t.barycenter=r/n,t.weight=n,t.i=Math.min(e.i,t.i),e.merged=!0}var cie=M(()=>{"use strict";Ht();o(lie,"resolveConflicts");o(GIe,"doResolveConflicts");o($Ie,"mergeEntries")});function hie(t,e){var r=gne(t,function(f){return Object.prototype.hasOwnProperty.call(f,"barycenter")}),n=r.lhs,i=Mc(r.rhs,function(f){return-f.i}),a=[],s=0,l=0,u=0;n.sort(VIe(!!e)),u=uie(a,i,u),Se(n,function(f){u+=f.vs.length,a.push(f.vs),s+=f.barycenter*f.weight,l+=f.weight,u=uie(a,i,u)});var h={vs:Wr(a)};return l&&(h.barycenter=s/l,h.weight=l),h}function uie(t,e,r){for(var n;e.length&&(n=xa(e)).i<=r;)e.pop(),t.push(n.vs),r++;return r}function VIe(t){return function(e,r){return e.barycenterr.barycenter?1:t?r.i-e.i:e.i-r.i}}var fie=M(()=>{"use strict";Ht();Oc();o(hie,"sort");o(uie,"consumeUnsortable");o(VIe,"compareWithBias")});function ED(t,e,r,n){var i=t.children(e),a=t.node(e),s=a?a.borderLeft:void 0,l=a?a.borderRight:void 0,u={};s&&(i=Yr(i,function(g){return g!==s&&g!==l}));var h=sie(t,i);Se(h,function(g){if(t.children(g.v).length){var y=ED(t,g.v,r,n);u[g.v]=y,Object.prototype.hasOwnProperty.call(y,"barycenter")&&HIe(g,y)}});var f=lie(h,r);UIe(f,u);var d=hie(f,n);if(s&&(d.vs=Wr([s,d.vs,l]),t.predecessors(s).length)){var p=t.node(t.predecessors(s)[0]),m=t.node(t.predecessors(l)[0]);Object.prototype.hasOwnProperty.call(d,"barycenter")||(d.barycenter=0,d.weight=0),d.barycenter=(d.barycenter*d.weight+p.order+m.order)/(d.weight+2),d.weight+=2}return d}function UIe(t,e){Se(t,function(r){r.vs=Wr(r.vs.map(function(n){return e[n]?e[n].vs:n}))})}function HIe(t,e){dr(t.barycenter)?(t.barycenter=e.barycenter,t.weight=e.weight):(t.barycenter=(t.barycenter*t.weight+e.barycenter*e.weight)/(t.weight+e.weight),t.weight+=e.weight)}var die=M(()=>{"use strict";Ht();oie();cie();fie();o(ED,"sortSubgraph");o(UIe,"expandSubgraphs");o(HIe,"mergeBarycenters")});function gie(t){var e=oD(t),r=pie(t,jo(1,e+1),"inEdges"),n=pie(t,jo(e-1,-1,-1),"outEdges"),i=iie(t);mie(t,i);for(var a=Number.POSITIVE_INFINITY,s,l=0,u=0;u<4;++l,++u){WIe(l%2?r:n,l%4>=2),i=sf(t);var h=rie(t,i);h{"use strict";Ht();Gs();Oc();Jne();tie();nie();aie();die();o(gie,"order");o(pie,"buildLayerGraphs");o(WIe,"sweepLayerGraphs");o(mie,"assignOrder")});function vie(t){var e=qIe(t);Se(t.graph().dummyChains,function(r){for(var n=t.node(r),i=n.edgeObj,a=YIe(t,e,i.v,i.w),s=a.path,l=a.lca,u=0,h=s[u],f=!0;r!==i.w;){if(n=t.node(r),f){for(;(h=s[u])!==l&&t.node(h).maxRanks||l>e[u].lim));for(h=u,u=n;(u=t.parent(u))!==h;)a.push(u);return{path:i.concat(a.reverse()),lca:h}}function qIe(t){var e={},r=0;function n(i){var a=r;Se(t.children(i),n),e[i]={low:a,lim:r++}}return o(n,"dfs"),Se(t.children(),n),e}var xie=M(()=>{"use strict";Ht();o(vie,"parentDummyChains");o(YIe,"findPath");o(qIe,"postorder")});function XIe(t,e){var r={};function n(i,a){var s=0,l=0,u=i.length,h=xa(a);return Se(a,function(f,d){var p=KIe(t,f),m=p?t.node(p).order:u;(p||f===h)&&(Se(a.slice(l,d+1),function(g){Se(t.predecessors(g),function(y){var v=t.node(y),x=v.order;(xh)&&bie(r,p,f)})})}o(n,"scan");function i(a,s){var l=-1,u,h=0;return Se(s,function(f,d){if(t.node(f).dummy==="border"){var p=t.predecessors(f);p.length&&(u=t.node(p[0]).order,n(s,h,d,l,u),h=d,l=u)}n(s,h,s.length,u,a.length)}),s}return o(i,"visitLayer"),qr(e,i),r}function KIe(t,e){if(t.node(e).dummy)return as(t.predecessors(e),function(r){return t.node(r).dummy})}function bie(t,e,r){if(e>r){var n=e;e=r,r=n}var i=t[e];i||(t[e]=i={}),i[r]=!0}function QIe(t,e,r){if(e>r){var n=e;e=r,r=n}return!!t[e]&&Object.prototype.hasOwnProperty.call(t[e],r)}function ZIe(t,e,r,n){var i={},a={},s={};return Se(e,function(l){Se(l,function(u,h){i[u]=u,a[u]=u,s[u]=h})}),Se(e,function(l){var u=-1;Se(l,function(h){var f=n(h);if(f.length){f=Mc(f,function(y){return s[y]});for(var d=(f.length-1)/2,p=Math.floor(d),m=Math.ceil(d);p<=m;++p){var g=f[p];a[h]===h&&u{"use strict";Ht();Gs();Oc();o(XIe,"findType1Conflicts");o(jIe,"findType2Conflicts");o(KIe,"findOtherInnerSegmentNode");o(bie,"addConflict");o(QIe,"hasConflict");o(ZIe,"verticalAlignment");o(JIe,"horizontalCompaction");o(eOe,"buildBlockGraph");o(tOe,"findSmallestWidthAlignment");o(rOe,"alignCoordinates");o(nOe,"balance");o(wie,"positionX");o(iOe,"sep");o(aOe,"width")});function kie(t){t=gT(t),sOe(t),HL(wie(t),function(e,r){t.node(r).x=e})}function sOe(t){var e=sf(t),r=t.graph().ranksep,n=0;Se(e,function(i){var a=Fs(Qe(i,function(s){return t.node(s).height}));Se(i,function(s){t.node(s).y=n+a/2}),n+=a+r})}var Eie=M(()=>{"use strict";Ht();Oc();Tie();o(kie,"position");o(sOe,"positionY")});function Gu(t,e){var r=e&&e.debugTiming?yne:vne;r("layout",()=>{var n=r(" buildLayoutGraph",()=>yOe(t));r(" runLayout",()=>oOe(n,r)),r(" updateInputGraph",()=>lOe(t,n))})}function oOe(t,e){e(" makeSpaceForEdgeLabels",()=>vOe(t)),e(" removeSelfEdges",()=>AOe(t)),e(" acyclic",()=>une(t)),e(" nestingGraph.run",()=>Xne(t)),e(" rank",()=>TD(gT(t))),e(" injectEdgeLabelProxies",()=>xOe(t)),e(" removeEmptyRanks",()=>mne(t)),e(" nestingGraph.cleanup",()=>Kne(t)),e(" normalizeRanks",()=>pne(t)),e(" assignRankMinMax",()=>bOe(t)),e(" removeEdgeLabelProxies",()=>wOe(t)),e(" normalize.run",()=>Ane(t)),e(" parentDummyChains",()=>vie(t)),e(" addBorderSegments",()=>bne(t)),e(" order",()=>gie(t)),e(" insertSelfEdges",()=>_Oe(t)),e(" adjustCoordinateSystem",()=>kne(t)),e(" position",()=>kie(t)),e(" positionSelfEdges",()=>LOe(t)),e(" removeBorderNodes",()=>COe(t)),e(" normalize.undo",()=>_ne(t)),e(" fixupEdgeLabelCoords",()=>EOe(t)),e(" undoCoordinateSystem",()=>Ene(t)),e(" translateGraph",()=>TOe(t)),e(" assignNodeIntersects",()=>kOe(t)),e(" reversePoints",()=>SOe(t)),e(" acyclic.undo",()=>hne(t))}function lOe(t,e){Se(t.nodes(),function(r){var n=t.node(r),i=e.node(r);n&&(n.x=i.x,n.y=i.y,e.children(r).length&&(n.width=i.width,n.height=i.height))}),Se(t.edges(),function(r){var n=t.edge(r),i=e.edge(r);n.points=i.points,Object.prototype.hasOwnProperty.call(i,"x")&&(n.x=i.x,n.y=i.y)}),t.graph().width=e.graph().width,t.graph().height=e.graph().height}function yOe(t){var e=new Ir({multigraph:!0,compound:!0}),r=CD(t.graph());return e.setGraph(Uh({},uOe,SD(r,cOe),Wd(r,hOe))),Se(t.nodes(),function(n){var i=CD(t.node(n));e.setNode(n,rf(SD(i,fOe),dOe)),e.setParent(n,t.parent(n))}),Se(t.edges(),function(n){var i=CD(t.edge(n));e.setEdge(n,Uh({},mOe,SD(i,pOe),Wd(i,gOe)))}),e}function vOe(t){var e=t.graph();e.ranksep/=2,Se(t.edges(),function(r){var n=t.edge(r);n.minlen*=2,n.labelpos.toLowerCase()!=="c"&&(e.rankdir==="TB"||e.rankdir==="BT"?n.width+=n.labeloffset:n.height+=n.labeloffset)})}function xOe(t){Se(t.edges(),function(e){var r=t.edge(e);if(r.width&&r.height){var n=t.node(e.v),i=t.node(e.w),a={rank:(i.rank-n.rank)/2+n.rank,e};Ic(t,"edge-proxy",a,"_ep")}})}function bOe(t){var e=0;Se(t.nodes(),function(r){var n=t.node(r);n.borderTop&&(n.minRank=t.node(n.borderTop).rank,n.maxRank=t.node(n.borderBottom).rank,e=Fs(e,n.maxRank))}),t.graph().maxRank=e}function wOe(t){Se(t.nodes(),function(e){var r=t.node(e);r.dummy==="edge-proxy"&&(t.edge(r.e).labelRank=r.rank,t.removeNode(e))})}function TOe(t){var e=Number.POSITIVE_INFINITY,r=0,n=Number.POSITIVE_INFINITY,i=0,a=t.graph(),s=a.marginx||0,l=a.marginy||0;function u(h){var f=h.x,d=h.y,p=h.width,m=h.height;e=Math.min(e,f-p/2),r=Math.max(r,f+p/2),n=Math.min(n,d-m/2),i=Math.max(i,d+m/2)}o(u,"getExtremes"),Se(t.nodes(),function(h){u(t.node(h))}),Se(t.edges(),function(h){var f=t.edge(h);Object.prototype.hasOwnProperty.call(f,"x")&&u(f)}),e-=s,n-=l,Se(t.nodes(),function(h){var f=t.node(h);f.x-=e,f.y-=n}),Se(t.edges(),function(h){var f=t.edge(h);Se(f.points,function(d){d.x-=e,d.y-=n}),Object.prototype.hasOwnProperty.call(f,"x")&&(f.x-=e),Object.prototype.hasOwnProperty.call(f,"y")&&(f.y-=n)}),a.width=r-e+s,a.height=i-n+l}function kOe(t){Se(t.edges(),function(e){var r=t.edge(e),n=t.node(e.v),i=t.node(e.w),a,s;r.points?(a=r.points[0],s=r.points[r.points.length-1]):(r.points=[],a=i,s=n),r.points.unshift(aD(n,a)),r.points.push(aD(i,s))})}function EOe(t){Se(t.edges(),function(e){var r=t.edge(e);if(Object.prototype.hasOwnProperty.call(r,"x"))switch((r.labelpos==="l"||r.labelpos==="r")&&(r.width-=r.labeloffset),r.labelpos){case"l":r.x-=r.width/2+r.labeloffset;break;case"r":r.x+=r.width/2+r.labeloffset;break}})}function SOe(t){Se(t.edges(),function(e){var r=t.edge(e);r.reversed&&r.points.reverse()})}function COe(t){Se(t.nodes(),function(e){if(t.children(e).length){var r=t.node(e),n=t.node(r.borderTop),i=t.node(r.borderBottom),a=t.node(xa(r.borderLeft)),s=t.node(xa(r.borderRight));r.width=Math.abs(s.x-a.x),r.height=Math.abs(i.y-n.y),r.x=a.x+r.width/2,r.y=n.y+r.height/2}}),Se(t.nodes(),function(e){t.node(e).dummy==="border"&&t.removeNode(e)})}function AOe(t){Se(t.edges(),function(e){if(e.v===e.w){var r=t.node(e.v);r.selfEdges||(r.selfEdges=[]),r.selfEdges.push({e,label:t.edge(e)}),t.removeEdge(e)}})}function _Oe(t){var e=sf(t);Se(e,function(r){var n=0;Se(r,function(i,a){var s=t.node(i);s.order=a+n,Se(s.selfEdges,function(l){Ic(t,"selfedge",{width:l.label.width,height:l.label.height,rank:s.rank,order:a+ ++n,e:l.e,label:l.label},"_se")}),delete s.selfEdges})})}function LOe(t){Se(t.nodes(),function(e){var r=t.node(e);if(r.dummy==="selfedge"){var n=t.node(r.e.v),i=n.x+n.width/2,a=n.y,s=r.x-i,l=n.height/2;t.setEdge(r.e,r.label),t.removeNode(e),r.label.points=[{x:i+2*s/3,y:a-l},{x:i+5*s/6,y:a-l},{x:i+s,y:a},{x:i+5*s/6,y:a+l},{x:i+2*s/3,y:a+l}],r.label.x=r.x,r.label.y=r.y}})}function SD(t,e){return Ud(Wd(t,e),Number)}function CD(t){var e={};return Se(t,function(r,n){e[n.toLowerCase()]=r}),e}var cOe,uOe,hOe,fOe,dOe,pOe,mOe,gOe,Sie=M(()=>{"use strict";Ht();Gs();wne();Cne();iD();uD();kD();Qne();yie();xie();Eie();Oc();o(Gu,"layout");o(oOe,"runLayout");o(lOe,"updateInputGraph");cOe=["nodesep","edgesep","ranksep","marginx","marginy"],uOe={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},hOe=["acyclicer","ranker","rankdir","align"],fOe=["width","height"],dOe={width:0,height:0},pOe=["minlen","weight","width","height","labeloffset"],mOe={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},gOe=["labelpos"];o(yOe,"buildLayoutGraph");o(vOe,"makeSpaceForEdgeLabels");o(xOe,"injectEdgeLabelProxies");o(bOe,"assignRankMinMax");o(wOe,"removeEdgeLabelProxies");o(TOe,"translateGraph");o(kOe,"assignNodeIntersects");o(EOe,"fixupEdgeLabelCoords");o(SOe,"reversePointsForReversedEdges");o(COe,"removeBorderNodes");o(AOe,"removeSelfEdges");o(_Oe,"insertSelfEdges");o(LOe,"positionSelfEdges");o(SD,"selectNumberAttrs");o(CD,"canonicalize")});var Qv=M(()=>{"use strict";iD();Sie();uD();kD()});function Ko(t){var e={options:{directed:t.isDirected(),multigraph:t.isMultigraph(),compound:t.isCompound()},nodes:DOe(t),edges:NOe(t)};return dr(t.graph())||(e.value=rn(t.graph())),e}function DOe(t){return Qe(t.nodes(),function(e){var r=t.node(e),n=t.parent(e),i={v:e};return dr(r)||(i.value=r),dr(n)||(i.parent=n),i})}function NOe(t){return Qe(t.edges(),function(e){var r=t.edge(e),n={v:e.v,w:e.w};return dr(e.name)||(n.name=e.name),dr(r)||(n.value=r),n})}var AD=M(()=>{"use strict";Ht();pT();o(Ko,"write");o(DOe,"writeNodes");o(NOe,"writeEdges")});var wr,jd,_ie,Lie,bT,ROe,Die,Nie,MOe,Km,Aie,Rie,Mie,Iie,Oie,Pie=M(()=>{"use strict";ut();Gs();AD();wr=new Map,jd=new Map,_ie=new Map,Lie=o(()=>{jd.clear(),_ie.clear(),wr.clear()},"clear"),bT=o((t,e)=>{let r=jd.get(e)||[];return Y.trace("In isDescendant",e," ",t," = ",r.includes(t)),r.includes(t)},"isDescendant"),ROe=o((t,e)=>{let r=jd.get(e)||[];return Y.info("Descendants of ",e," is ",r),Y.info("Edge is ",t),t.v===e||t.w===e?!1:r?r.includes(t.v)||bT(t.v,e)||bT(t.w,e)||r.includes(t.w):(Y.debug("Tilt, ",e,",not in descendants"),!1)},"edgeInCluster"),Die=o((t,e,r,n)=>{Y.warn("Copying children of ",t,"root",n,"data",e.node(t),n);let i=e.children(t)||[];t!==n&&i.push(t),Y.warn("Copying (nodes) clusterId",t,"nodes",i),i.forEach(a=>{if(e.children(a).length>0)Die(a,e,r,n);else{let s=e.node(a);Y.info("cp ",a," to ",n," with parent ",t),r.setNode(a,s),n!==e.parent(a)&&(Y.warn("Setting parent",a,e.parent(a)),r.setParent(a,e.parent(a))),t!==n&&a!==t?(Y.debug("Setting parent",a,t),r.setParent(a,t)):(Y.info("In copy ",t,"root",n,"data",e.node(t),n),Y.debug("Not Setting parent for node=",a,"cluster!==rootId",t!==n,"node!==clusterId",a!==t));let l=e.edges(a);Y.debug("Copying Edges",l),l.forEach(u=>{Y.info("Edge",u);let h=e.edge(u.v,u.w,u.name);Y.info("Edge data",h,n);try{ROe(u,n)?(Y.info("Copying as ",u.v,u.w,h,u.name),r.setEdge(u.v,u.w,h,u.name),Y.info("newGraph edges ",r.edges(),r.edge(r.edges()[0]))):Y.info("Skipping copy of edge ",u.v,"-->",u.w," rootId: ",n," clusterId:",t)}catch(f){Y.error(f)}})}Y.debug("Removing node",a),e.removeNode(a)})},"copy"),Nie=o((t,e)=>{let r=e.children(t),n=[...r];for(let i of r)_ie.set(i,t),n=[...n,...Nie(i,e)];return n},"extractDescendants"),MOe=o((t,e,r)=>{let n=t.edges().filter(u=>u.v===e||u.w===e),i=t.edges().filter(u=>u.v===r||u.w===r),a=n.map(u=>({v:u.v===e?r:u.v,w:u.w===e?e:u.w})),s=i.map(u=>({v:u.v,w:u.w}));return a.filter(u=>s.some(h=>u.v===h.v&&u.w===h.w))},"findCommonEdges"),Km=o((t,e,r)=>{let n=e.children(t);if(Y.trace("Searching children of id ",t,n),n.length<1)return t;let i;for(let a of n){let s=Km(a,e,r),l=MOe(e,r,s);if(s)if(l.length>0)i=s;else return s}return i},"findNonClusterChild"),Aie=o(t=>!wr.has(t)||!wr.get(t).externalConnections?t:wr.has(t)?wr.get(t).id:t,"getAnchorId"),Rie=o((t,e)=>{if(!t||e>10){Y.debug("Opting out, no graph ");return}else Y.debug("Opting in, graph ");t.nodes().forEach(function(r){t.children(r).length>0&&(Y.warn("Cluster identified",r," Replacement id in edges: ",Km(r,t,r)),jd.set(r,Nie(r,t)),wr.set(r,{id:Km(r,t,r),clusterData:t.node(r)}))}),t.nodes().forEach(function(r){let n=t.children(r),i=t.edges();n.length>0?(Y.debug("Cluster identified",r,jd),i.forEach(a=>{let s=bT(a.v,r),l=bT(a.w,r);s^l&&(Y.warn("Edge: ",a," leaves cluster ",r),Y.warn("Descendants of XXX ",r,": ",jd.get(r)),wr.get(r).externalConnections=!0)})):Y.debug("Not a cluster ",r,jd)});for(let r of wr.keys()){let n=wr.get(r).id,i=t.parent(n);i!==r&&wr.has(i)&&!wr.get(i).externalConnections&&(wr.get(r).id=i)}t.edges().forEach(function(r){let n=t.edge(r);Y.warn("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(r)),Y.warn("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(t.edge(r)));let i=r.v,a=r.w;if(Y.warn("Fix XXX",wr,"ids:",r.v,r.w,"Translating: ",wr.get(r.v)," --- ",wr.get(r.w)),wr.get(r.v)||wr.get(r.w)){if(Y.warn("Fixing and trying - removing XXX",r.v,r.w,r.name),i=Aie(r.v),a=Aie(r.w),t.removeEdge(r.v,r.w,r.name),i!==r.v){let s=t.parent(i);wr.get(s).externalConnections=!0,n.fromCluster=r.v}if(a!==r.w){let s=t.parent(a);wr.get(s).externalConnections=!0,n.toCluster=r.w}Y.warn("Fix Replacing with XXX",i,a,r.name),t.setEdge(i,a,n,r.name)}}),Y.warn("Adjusted Graph",Ko(t)),Mie(t,0),Y.trace(wr)},"adjustClustersAndEdges"),Mie=o((t,e)=>{if(Y.warn("extractor - ",e,Ko(t),t.children("D")),e>10){Y.error("Bailing out");return}let r=t.nodes(),n=!1;for(let i of r){let a=t.children(i);n=n||a.length>0}if(!n){Y.debug("Done, no node has children",t.nodes());return}Y.debug("Nodes = ",r,e);for(let i of r)if(Y.debug("Extracting node",i,wr,wr.has(i)&&!wr.get(i).externalConnections,!t.parent(i),t.node(i),t.children("D")," Depth ",e),!wr.has(i))Y.debug("Not a cluster",i,e);else if(!wr.get(i).externalConnections&&t.children(i)&&t.children(i).length>0){Y.warn("Cluster without external connections, without a parent and with children",i,e);let s=t.graph().rankdir==="TB"?"LR":"TB";wr.get(i)?.clusterData?.dir&&(s=wr.get(i).clusterData.dir,Y.warn("Fixing dir",wr.get(i).clusterData.dir,s));let l=new Ir({multigraph:!0,compound:!0}).setGraph({rankdir:s,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});Y.warn("Old graph before copy",Ko(t)),Die(i,t,l,i),t.setNode(i,{clusterNode:!0,id:i,clusterData:wr.get(i).clusterData,label:wr.get(i).label,graph:l}),Y.warn("New graph after copy node: (",i,")",Ko(l)),Y.debug("Old graph after copy",Ko(t))}else Y.warn("Cluster ** ",i," **not meeting the criteria !externalConnections:",!wr.get(i).externalConnections," no parent: ",!t.parent(i)," children ",t.children(i)&&t.children(i).length>0,t.children("D"),e),Y.debug(wr);r=t.nodes(),Y.warn("New list of nodes",r);for(let i of r){let a=t.node(i);Y.warn(" Now next level",i,a),a?.clusterNode&&Mie(a.graph,e+1)}},"extractor"),Iie=o((t,e)=>{if(e.length===0)return[];let r=Object.assign([],e);return e.forEach(n=>{let i=t.children(n),a=Iie(t,i);r=[...r,...a]}),r},"sorter"),Oie=o(t=>Iie(t,t.children()),"sortNodesByHierarchy")});var Fie={};vr(Fie,{render:()=>IOe});var Bie,IOe,zie=M(()=>{"use strict";Qv();AD();Gs();fL();Ot();Pie();vw();lw();hL();ut();$v();Vt();Bie=o(async(t,e,r,n,i,a)=>{Y.warn("Graph in recursive render:XAX",Ko(e),i);let s=e.graph().rankdir;Y.trace("Dir in recursive render - dir:",s);let l=t.insert("g").attr("class","root");e.nodes()?Y.info("Recursive render XXX",e.nodes()):Y.info("No nodes found for",e),e.edges().length>0&&Y.info("Recursive edges",e.edge(e.edges()[0]));let u=l.insert("g").attr("class","clusters"),h=l.insert("g").attr("class","edgePaths"),f=l.insert("g").attr("class","edgeLabels"),d=l.insert("g").attr("class","nodes");await Promise.all(e.nodes().map(async function(y){let v=e.node(y);if(i!==void 0){let x=JSON.parse(JSON.stringify(i.clusterData));Y.trace(`Setting data for parent cluster XXX + Node.id = `,y,` + data=`,x.height,` +Parent cluster`,i.height),e.setNode(i.id,x),e.parent(y)||(Y.trace("Setting parent",y,i.id),e.setParent(y,i.id,x))}if(Y.info("(Insert) Node XXX"+y+": "+JSON.stringify(e.node(y))),v?.clusterNode){Y.info("Cluster identified XBX",y,v.width,e.node(y));let{ranksep:x,nodesep:b}=e.graph();v.graph.setGraph({...v.graph.graph(),ranksep:x+25,nodesep:b});let w=await Bie(d,v.graph,r,n,e.node(y),a),_=w.elem;je(v,_),v.diff=w.diff||0,Y.info("New compound node after recursive render XAX",y,"width",v.width,"height",v.height),rJ(_,v)}else e.children(y).length>0?(Y.trace("Cluster - the non recursive path XBX",y,v.id,v,v.width,"Graph:",e),Y.trace(Km(v.id,e)),wr.set(v.id,{id:Km(v.id,e),node:v})):(Y.trace("Node - the non recursive path XAX",y,d,e.node(y),s),await Lm(d,e.node(y),{config:a,dir:s}))})),await o(async()=>{let y=e.edges().map(async function(v){let x=e.edge(v.v,v.w,v.name);Y.info("Edge "+v.v+" -> "+v.w+": "+JSON.stringify(v)),Y.info("Edge "+v.v+" -> "+v.w+": ",v," ",JSON.stringify(e.edge(v))),Y.info("Fix",wr,"ids:",v.v,v.w,"Translating: ",wr.get(v.v),wr.get(v.w)),await dw(f,x)});await Promise.all(y)},"processEdges")(),Y.info("Graph before layout:",JSON.stringify(Ko(e))),Y.info("############################################# XXX"),Y.info("### Layout ### XXX"),Y.info("############################################# XXX"),Gu(e),Y.info("Graph after layout:",JSON.stringify(Ko(e)));let m=0,{subGraphTitleTotalMargin:g}=Fu(a);return await Promise.all(Oie(e).map(async function(y){let v=e.node(y);if(Y.info("Position XBX => "+y+": ("+v.x,","+v.y,") width: ",v.width," height: ",v.height),v?.clusterNode)v.y+=g,Y.info("A tainted cluster node XBX1",y,v.id,v.width,v.height,v.x,v.y,e.parent(y)),wr.get(v.id).node=v,Uv(v);else if(e.children(y).length>0){Y.info("A pure cluster node XBX1",y,v.id,v.x,v.y,v.width,v.height,e.parent(y)),v.height+=g,e.node(v.parentId);let x=v?.padding/2||0,b=v?.labelBBox?.height||0,w=b-x||0;Y.debug("OffsetY",w,"labelHeight",b,"halfPadding",x),await _m(u,v),wr.get(v.id).node=v}else{let x=e.node(v.parentId);v.y+=g/2,Y.info("A regular node XBX1 - using the padding",v.id,"parent",v.parentId,v.width,v.height,v.x,v.y,"offsetY",v.offsetY,"parent",x,x?.offsetY,v),Uv(v)}})),e.edges().forEach(function(y){let v=e.edge(y);Y.info("Edge "+y.v+" -> "+y.w+": "+JSON.stringify(v),v),v.points.forEach(_=>_.y+=g/2);let x=e.node(y.v);var b=e.node(y.w);let w=mw(h,v,wr,r,x,b,n);pw(v,w)}),e.nodes().forEach(function(y){let v=e.node(y);Y.info(y,v.type,v.diff),v.isGroup&&(m=v.diff)}),Y.warn("Returning from recursive render XAX",l,m),{elem:l,diff:m}},"recursiveRender"),IOe=o(async(t,e)=>{let r=new Ir({multigraph:!0,compound:!0}).setGraph({rankdir:t.direction,nodesep:t.config?.nodeSpacing||t.config?.flowchart?.nodeSpacing||t.nodeSpacing,ranksep:t.config?.rankSpacing||t.config?.flowchart?.rankSpacing||t.rankSpacing,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}}),n=e.select("g");gw(n,t.markers,t.type,t.diagramId),nJ(),tJ(),jZ(),Lie(),t.nodes.forEach(a=>{r.setNode(a.id,{...a}),a.parentId&&r.setParent(a.id,a.parentId)}),Y.debug("Edges:",t.edges),t.edges.forEach(a=>{if(a.start===a.end){let s=a.start,l=s+"---"+s+"---1",u=s+"---"+s+"---2",h=r.node(s);r.setNode(l,{domId:l,id:l,parentId:h.parentId,labelStyle:"",label:"",padding:0,shape:"labelRect",style:"",width:10,height:10}),r.setParent(l,h.parentId),r.setNode(u,{domId:u,id:u,parentId:h.parentId,labelStyle:"",padding:0,shape:"labelRect",label:"",style:"",width:10,height:10}),r.setParent(u,h.parentId);let f=structuredClone(a),d=structuredClone(a),p=structuredClone(a);f.label="",f.arrowTypeEnd="none",f.id=s+"-cyclic-special-1",d.arrowTypeEnd="none",d.id=s+"-cyclic-special-mid",p.label="",h.isGroup&&(f.fromCluster=s,p.toCluster=s),p.id=s+"-cyclic-special-2",r.setEdge(s,l,f,s+"-cyclic-special-0"),r.setEdge(l,u,d,s+"-cyclic-special-1"),r.setEdge(u,s,p,s+"-cyc{"use strict";aJ();ut();Zv={},_D=o(t=>{for(let e of t)Zv[e.name]=e},"registerLayoutLoaders"),OOe=o(()=>{_D([{name:"dagre",loader:o(async()=>await Promise.resolve().then(()=>(zie(),Fie)),"loader")}])},"registerDefaultLayoutLoaders");OOe();Qm=o(async(t,e)=>{if(!(t.layoutAlgorithm in Zv))throw new Error(`Unknown layout algorithm: ${t.layoutAlgorithm}`);let r=Zv[t.layoutAlgorithm];return(await r.loader()).render(t,e,iJ,{algorithm:r.algorithm})},"render"),wT=o((t="",{fallback:e="dagre"}={})=>{if(t in Zv)return t;if(e in Zv)return Y.warn(`Layout algorithm ${t} is not registered. Using ${e} as fallback.`),e;throw new Error(`Both layout algorithms ${t} and ${e} are not registered.`)},"getRegisteredLayoutAlgorithm")});var Zm,POe,BOe,TT=M(()=>{"use strict";ai();ut();Zm=o((t,e,r,n)=>{t.attr("class",r);let{width:i,height:a,x:s,y:l}=POe(t,e);Zr(t,a,i,n);let u=BOe(s,l,i,a,e);t.attr("viewBox",u),Y.debug(`viewBox configured: ${u} with padding: ${e}`)},"setupViewPortForSVG"),POe=o((t,e)=>{let r=t.node()?.getBBox()||{width:0,height:0,x:0,y:0};return{width:r.width+e*2,height:r.height+e*2,x:r.x,y:r.y}},"calculateDimensionsWithPadding"),BOe=o((t,e,r,n,i)=>`${t-i} ${e-i} ${r} ${n}`,"createViewBox")});var FOe,zOe,Gie,$ie=M(()=>{"use strict";pr();Vt();ut();ow();Jv();TT();hr();cL();FOe=o(function(t,e){return e.db.getClasses()},"getClasses"),zOe=o(async function(t,e,r,n){Y.info("REF0:"),Y.info("Drawing state diagram (v2)",e);let{securityLevel:i,flowchart:a,layout:s}=pe(),l;i==="sandbox"&&(l=Ve("#i"+e));let u=i==="sandbox"?l.nodes()[0].contentDocument:document;Y.debug("Before getData: ");let h=n.db.getData();Y.debug("Data: ",h);let f=Am(e,i),d=lL();h.type=n.type,h.layoutAlgorithm=wT(s),h.layoutAlgorithm==="dagre"&&s==="elk"&&Y.warn("flowchart-elk was moved to an external package in Mermaid v11. Please refer [release notes](https://github.com/mermaid-js/mermaid/releases/tag/v11.0.0) for more details. This diagram will be rendered using `dagre` layout as a fallback."),h.direction=d,h.nodeSpacing=a?.nodeSpacing||50,h.rankSpacing=a?.rankSpacing||50,h.markers=["point","circle","cross"],h.diagramId=e,Y.debug("REF1:",h),await Qm(h,f);let p=h.config.flowchart?.diagramPadding??8;Ut.insertTitle(f,"flowchartTitleText",a?.titleTopMargin||0,n.db.getDiagramTitle()),Zm(f,p,"flowchart",a?.useMaxWidth||!1);for(let m of h.nodes){let g=Ve(`#${e} [id="${m.id}"]`);if(!g||!m.link)continue;let y=u.createElementNS("http://www.w3.org/2000/svg","a");y.setAttributeNS("http://www.w3.org/2000/svg","class",m.cssClasses),y.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),i==="sandbox"?y.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):m.linkTarget&&y.setAttributeNS("http://www.w3.org/2000/svg","target",m.linkTarget);let v=g.insert(function(){return y},":first-child"),x=g.select(".label-container");x&&v.append(function(){return x.node()});let b=g.select(".label");b&&v.append(function(){return b.node()})}},"draw"),Gie={getClasses:FOe,draw:zOe}});var LD,Vie,Uie=M(()=>{"use strict";LD=function(){var t=o(function(ki,At,Pt,wt){for(Pt=Pt||{},wt=ki.length;wt--;Pt[ki[wt]]=At);return Pt},"o"),e=[1,4],r=[1,3],n=[1,5],i=[1,8,9,10,11,27,34,36,38,44,60,83,84,85,86,87,88,101,104,105,108,110,113,114,115,120,121,122,123],a=[2,2],s=[1,13],l=[1,14],u=[1,15],h=[1,16],f=[1,23],d=[1,25],p=[1,26],m=[1,27],g=[1,49],y=[1,48],v=[1,29],x=[1,30],b=[1,31],w=[1,32],_=[1,33],T=[1,44],E=[1,46],L=[1,42],S=[1,47],A=[1,43],I=[1,50],D=[1,45],k=[1,51],R=[1,52],C=[1,34],O=[1,35],N=[1,36],P=[1,37],F=[1,57],B=[1,8,9,10,11,27,32,34,36,38,44,60,83,84,85,86,87,88,101,104,105,108,110,113,114,115,120,121,122,123],G=[1,61],z=[1,60],W=[1,62],Z=[8,9,11,75,77],j=[1,77],oe=[1,90],K=[1,95],ee=[1,94],J=[1,91],H=[1,87],q=[1,93],Q=[1,89],ae=[1,96],ue=[1,92],ce=[1,97],te=[1,88],Ne=[8,9,10,11,40,75,77],se=[8,9,10,11,40,46,75,77],ke=[8,9,10,11,29,40,44,46,48,50,52,54,56,58,60,63,65,67,68,70,75,77,88,101,104,105,108,110,113,114,115],Re=[8,9,11,44,60,75,77,88,101,104,105,108,110,113,114,115],Ce=[44,60,88,101,104,105,108,110,113,114,115],Pe=[1,123],Ie=[1,122],$e=[1,130],ye=[1,144],X=[1,145],fe=[1,146],he=[1,147],ge=[1,132],ne=[1,134],ve=[1,138],U=[1,139],Te=[1,140],ie=[1,141],Ee=[1,142],Ae=[1,143],Ge=[1,148],Be=[1,149],me=[1,128],He=[1,129],Oe=[1,136],et=[1,131],bt=[1,135],kt=[1,133],vt=[8,9,10,11,27,32,34,36,38,44,60,83,84,85,86,87,88,101,104,105,108,110,113,114,115,120,121,122,123],rt=[1,151],yt=[1,153],Ue=[8,9,11],tt=[8,9,10,11,14,44,60,88,104,105,108,110,113,114,115],ht=[1,173],Et=[1,169],er=[1,170],dt=[1,174],Je=[1,171],ct=[1,172],Ct=[77,115,118],pt=[8,9,10,11,12,14,27,29,32,44,60,75,83,84,85,86,87,88,89,104,108,110,113,114,115],Bt=[10,105],Tr=[31,49,51,53,55,57,62,64,66,67,69,71,115,116,117],yr=[1,242],or=[1,240],ln=[1,244],Or=[1,238],ii=[1,239],mn=[1,241],On=[1,243],_r=[1,245],mi=[1,263],vs=[8,9,11,105],Pn=[8,9,10,11,60,83,104,105,108,109,110,111],So={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,NODIR:13,DIR:14,FirstStmtSeparator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,vertexStatement:20,separator:21,styleStatement:22,linkStyleStatement:23,classDefStatement:24,classStatement:25,clickStatement:26,subgraph:27,textNoTags:28,SQS:29,text:30,SQE:31,end:32,direction:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,shapeData:39,SHAPE_DATA:40,link:41,node:42,styledVertex:43,AMP:44,vertex:45,STYLE_SEPARATOR:46,idString:47,DOUBLECIRCLESTART:48,DOUBLECIRCLEEND:49,PS:50,PE:51,"(-":52,"-)":53,STADIUMSTART:54,STADIUMEND:55,SUBROUTINESTART:56,SUBROUTINEEND:57,VERTEX_WITH_PROPS_START:58,"NODE_STRING[field]":59,COLON:60,"NODE_STRING[value]":61,PIPE:62,CYLINDERSTART:63,CYLINDEREND:64,DIAMOND_START:65,DIAMOND_STOP:66,TAGEND:67,TRAPSTART:68,TRAPEND:69,INVTRAPSTART:70,INVTRAPEND:71,linkStatement:72,arrowText:73,TESTSTR:74,START_LINK:75,edgeText:76,LINK:77,edgeTextToken:78,STR:79,MD_STR:80,textToken:81,keywords:82,STYLE:83,LINKSTYLE:84,CLASSDEF:85,CLASS:86,CLICK:87,DOWN:88,UP:89,textNoTagsToken:90,stylesOpt:91,"idString[vertex]":92,"idString[class]":93,CALLBACKNAME:94,CALLBACKARGS:95,HREF:96,LINK_TARGET:97,"STR[link]":98,"STR[tooltip]":99,alphaNum:100,DEFAULT:101,numList:102,INTERPOLATE:103,NUM:104,COMMA:105,style:106,styleComponent:107,NODE_STRING:108,UNIT:109,BRKT:110,PCT:111,idStringToken:112,MINUS:113,MULT:114,UNICODE_TEXT:115,TEXT:116,TAGSTART:117,EDGE_TEXT:118,alphaNumToken:119,direction_tb:120,direction_bt:121,direction_rl:122,direction_lr:123,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"NODIR",14:"DIR",27:"subgraph",29:"SQS",31:"SQE",32:"end",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",40:"SHAPE_DATA",44:"AMP",46:"STYLE_SEPARATOR",48:"DOUBLECIRCLESTART",49:"DOUBLECIRCLEEND",50:"PS",51:"PE",52:"(-",53:"-)",54:"STADIUMSTART",55:"STADIUMEND",56:"SUBROUTINESTART",57:"SUBROUTINEEND",58:"VERTEX_WITH_PROPS_START",59:"NODE_STRING[field]",60:"COLON",61:"NODE_STRING[value]",62:"PIPE",63:"CYLINDERSTART",64:"CYLINDEREND",65:"DIAMOND_START",66:"DIAMOND_STOP",67:"TAGEND",68:"TRAPSTART",69:"TRAPEND",70:"INVTRAPSTART",71:"INVTRAPEND",74:"TESTSTR",75:"START_LINK",77:"LINK",79:"STR",80:"MD_STR",83:"STYLE",84:"LINKSTYLE",85:"CLASSDEF",86:"CLASS",87:"CLICK",88:"DOWN",89:"UP",92:"idString[vertex]",93:"idString[class]",94:"CALLBACKNAME",95:"CALLBACKARGS",96:"HREF",97:"LINK_TARGET",98:"STR[link]",99:"STR[tooltip]",101:"DEFAULT",103:"INTERPOLATE",104:"NUM",105:"COMMA",108:"NODE_STRING",109:"UNIT",110:"BRKT",111:"PCT",113:"MINUS",114:"MULT",115:"UNICODE_TEXT",116:"TEXT",117:"TAGSTART",118:"EDGE_TEXT",120:"direction_tb",121:"direction_bt",122:"direction_rl",123:"direction_lr"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,2],[4,3],[16,2],[16,1],[17,1],[17,1],[17,1],[15,1],[15,1],[15,2],[19,2],[19,2],[19,1],[19,1],[18,2],[18,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,6],[7,4],[7,1],[7,2],[7,2],[7,1],[21,1],[21,1],[21,1],[39,2],[39,1],[20,4],[20,3],[20,4],[20,2],[20,2],[20,1],[42,1],[42,6],[42,5],[43,1],[43,3],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,8],[45,4],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,4],[45,4],[45,1],[41,2],[41,3],[41,3],[41,1],[41,3],[76,1],[76,2],[76,1],[76,1],[72,1],[73,3],[30,1],[30,2],[30,1],[30,1],[82,1],[82,1],[82,1],[82,1],[82,1],[82,1],[82,1],[82,1],[82,1],[82,1],[82,1],[28,1],[28,2],[28,1],[28,1],[24,5],[25,5],[26,2],[26,4],[26,3],[26,5],[26,3],[26,5],[26,5],[26,7],[26,2],[26,4],[26,2],[26,4],[26,4],[26,6],[22,5],[23,5],[23,5],[23,9],[23,9],[23,7],[23,7],[102,1],[102,3],[91,1],[91,3],[106,1],[106,2],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[112,1],[112,1],[112,1],[112,1],[112,1],[112,1],[112,1],[112,1],[112,1],[112,1],[112,1],[81,1],[81,1],[81,1],[81,1],[90,1],[90,1],[90,1],[90,1],[90,1],[90,1],[90,1],[90,1],[90,1],[90,1],[90,1],[78,1],[78,1],[119,1],[119,1],[119,1],[119,1],[119,1],[119,1],[119,1],[119,1],[119,1],[119,1],[119,1],[47,1],[47,2],[100,1],[100,2],[33,1],[33,1],[33,1],[33,1]],performAction:o(function(At,Pt,wt,We,Ft,de,gn){var xe=de.length-1;switch(Ft){case 2:this.$=[];break;case 3:(!Array.isArray(de[xe])||de[xe].length>0)&&de[xe-1].push(de[xe]),this.$=de[xe-1];break;case 4:case 181:this.$=de[xe];break;case 11:We.setDirection("TB"),this.$="TB";break;case 12:We.setDirection(de[xe-1]),this.$=de[xe-1];break;case 27:this.$=de[xe-1].nodes;break;case 28:case 29:case 30:case 31:case 32:this.$=[];break;case 33:this.$=We.addSubGraph(de[xe-6],de[xe-1],de[xe-4]);break;case 34:this.$=We.addSubGraph(de[xe-3],de[xe-1],de[xe-3]);break;case 35:this.$=We.addSubGraph(void 0,de[xe-1],void 0);break;case 37:this.$=de[xe].trim(),We.setAccTitle(this.$);break;case 38:case 39:this.$=de[xe].trim(),We.setAccDescription(this.$);break;case 43:this.$=de[xe-1]+de[xe];break;case 44:this.$=de[xe];break;case 45:We.addVertex(de[xe-1][0],void 0,void 0,void 0,void 0,void 0,void 0,de[xe]),We.addLink(de[xe-3].stmt,de[xe-1],de[xe-2]),this.$={stmt:de[xe-1],nodes:de[xe-1].concat(de[xe-3].nodes)};break;case 46:We.addLink(de[xe-2].stmt,de[xe],de[xe-1]),this.$={stmt:de[xe],nodes:de[xe].concat(de[xe-2].nodes)};break;case 47:We.addLink(de[xe-3].stmt,de[xe-1],de[xe-2]),this.$={stmt:de[xe-1],nodes:de[xe-1].concat(de[xe-3].nodes)};break;case 48:this.$={stmt:de[xe-1],nodes:de[xe-1]};break;case 49:We.addVertex(de[xe-1][0],void 0,void 0,void 0,void 0,void 0,void 0,de[xe]),this.$={stmt:de[xe-1],nodes:de[xe-1],shapeData:de[xe]};break;case 50:this.$={stmt:de[xe],nodes:de[xe]};break;case 51:this.$=[de[xe]];break;case 52:We.addVertex(de[xe-5][0],void 0,void 0,void 0,void 0,void 0,void 0,de[xe-4]),this.$=de[xe-5].concat(de[xe]);break;case 53:this.$=de[xe-4].concat(de[xe]);break;case 54:this.$=de[xe];break;case 55:this.$=de[xe-2],We.setClass(de[xe-2],de[xe]);break;case 56:this.$=de[xe-3],We.addVertex(de[xe-3],de[xe-1],"square");break;case 57:this.$=de[xe-3],We.addVertex(de[xe-3],de[xe-1],"doublecircle");break;case 58:this.$=de[xe-5],We.addVertex(de[xe-5],de[xe-2],"circle");break;case 59:this.$=de[xe-3],We.addVertex(de[xe-3],de[xe-1],"ellipse");break;case 60:this.$=de[xe-3],We.addVertex(de[xe-3],de[xe-1],"stadium");break;case 61:this.$=de[xe-3],We.addVertex(de[xe-3],de[xe-1],"subroutine");break;case 62:this.$=de[xe-7],We.addVertex(de[xe-7],de[xe-1],"rect",void 0,void 0,void 0,Object.fromEntries([[de[xe-5],de[xe-3]]]));break;case 63:this.$=de[xe-3],We.addVertex(de[xe-3],de[xe-1],"cylinder");break;case 64:this.$=de[xe-3],We.addVertex(de[xe-3],de[xe-1],"round");break;case 65:this.$=de[xe-3],We.addVertex(de[xe-3],de[xe-1],"diamond");break;case 66:this.$=de[xe-5],We.addVertex(de[xe-5],de[xe-2],"hexagon");break;case 67:this.$=de[xe-3],We.addVertex(de[xe-3],de[xe-1],"odd");break;case 68:this.$=de[xe-3],We.addVertex(de[xe-3],de[xe-1],"trapezoid");break;case 69:this.$=de[xe-3],We.addVertex(de[xe-3],de[xe-1],"inv_trapezoid");break;case 70:this.$=de[xe-3],We.addVertex(de[xe-3],de[xe-1],"lean_right");break;case 71:this.$=de[xe-3],We.addVertex(de[xe-3],de[xe-1],"lean_left");break;case 72:this.$=de[xe],We.addVertex(de[xe]);break;case 73:de[xe-1].text=de[xe],this.$=de[xe-1];break;case 74:case 75:de[xe-2].text=de[xe-1],this.$=de[xe-2];break;case 76:this.$=de[xe];break;case 77:var ja=We.destructLink(de[xe],de[xe-2]);this.$={type:ja.type,stroke:ja.stroke,length:ja.length,text:de[xe-1]};break;case 78:this.$={text:de[xe],type:"text"};break;case 79:this.$={text:de[xe-1].text+""+de[xe],type:de[xe-1].type};break;case 80:this.$={text:de[xe],type:"string"};break;case 81:this.$={text:de[xe],type:"markdown"};break;case 82:var ja=We.destructLink(de[xe]);this.$={type:ja.type,stroke:ja.stroke,length:ja.length};break;case 83:this.$=de[xe-1];break;case 84:this.$={text:de[xe],type:"text"};break;case 85:this.$={text:de[xe-1].text+""+de[xe],type:de[xe-1].type};break;case 86:this.$={text:de[xe],type:"string"};break;case 87:case 102:this.$={text:de[xe],type:"markdown"};break;case 99:this.$={text:de[xe],type:"text"};break;case 100:this.$={text:de[xe-1].text+""+de[xe],type:de[xe-1].type};break;case 101:this.$={text:de[xe],type:"text"};break;case 103:this.$=de[xe-4],We.addClass(de[xe-2],de[xe]);break;case 104:this.$=de[xe-4],We.setClass(de[xe-2],de[xe]);break;case 105:case 113:this.$=de[xe-1],We.setClickEvent(de[xe-1],de[xe]);break;case 106:case 114:this.$=de[xe-3],We.setClickEvent(de[xe-3],de[xe-2]),We.setTooltip(de[xe-3],de[xe]);break;case 107:this.$=de[xe-2],We.setClickEvent(de[xe-2],de[xe-1],de[xe]);break;case 108:this.$=de[xe-4],We.setClickEvent(de[xe-4],de[xe-3],de[xe-2]),We.setTooltip(de[xe-4],de[xe]);break;case 109:this.$=de[xe-2],We.setLink(de[xe-2],de[xe]);break;case 110:this.$=de[xe-4],We.setLink(de[xe-4],de[xe-2]),We.setTooltip(de[xe-4],de[xe]);break;case 111:this.$=de[xe-4],We.setLink(de[xe-4],de[xe-2],de[xe]);break;case 112:this.$=de[xe-6],We.setLink(de[xe-6],de[xe-4],de[xe]),We.setTooltip(de[xe-6],de[xe-2]);break;case 115:this.$=de[xe-1],We.setLink(de[xe-1],de[xe]);break;case 116:this.$=de[xe-3],We.setLink(de[xe-3],de[xe-2]),We.setTooltip(de[xe-3],de[xe]);break;case 117:this.$=de[xe-3],We.setLink(de[xe-3],de[xe-2],de[xe]);break;case 118:this.$=de[xe-5],We.setLink(de[xe-5],de[xe-4],de[xe]),We.setTooltip(de[xe-5],de[xe-2]);break;case 119:this.$=de[xe-4],We.addVertex(de[xe-2],void 0,void 0,de[xe]);break;case 120:this.$=de[xe-4],We.updateLink([de[xe-2]],de[xe]);break;case 121:this.$=de[xe-4],We.updateLink(de[xe-2],de[xe]);break;case 122:this.$=de[xe-8],We.updateLinkInterpolate([de[xe-6]],de[xe-2]),We.updateLink([de[xe-6]],de[xe]);break;case 123:this.$=de[xe-8],We.updateLinkInterpolate(de[xe-6],de[xe-2]),We.updateLink(de[xe-6],de[xe]);break;case 124:this.$=de[xe-6],We.updateLinkInterpolate([de[xe-4]],de[xe]);break;case 125:this.$=de[xe-6],We.updateLinkInterpolate(de[xe-4],de[xe]);break;case 126:case 128:this.$=[de[xe]];break;case 127:case 129:de[xe-2].push(de[xe]),this.$=de[xe-2];break;case 131:this.$=de[xe-1]+de[xe];break;case 179:this.$=de[xe];break;case 180:this.$=de[xe-1]+""+de[xe];break;case 182:this.$=de[xe-1]+""+de[xe];break;case 183:this.$={stmt:"dir",value:"TB"};break;case 184:this.$={stmt:"dir",value:"BT"};break;case 185:this.$={stmt:"dir",value:"RL"};break;case 186:this.$={stmt:"dir",value:"LR"};break}},"anonymous"),table:[{3:1,4:2,9:e,10:r,12:n},{1:[3]},t(i,a,{5:6}),{4:7,9:e,10:r,12:n},{4:8,9:e,10:r,12:n},{13:[1,9],14:[1,10]},{1:[2,1],6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,83:v,84:x,85:b,86:w,87:_,88:T,101:E,104:L,105:S,108:A,110:I,112:41,113:D,114:k,115:R,120:C,121:O,122:N,123:P},t(i,[2,9]),t(i,[2,10]),t(i,[2,11]),{8:[1,54],9:[1,55],10:F,15:53,18:56},t(B,[2,3]),t(B,[2,4]),t(B,[2,5]),t(B,[2,6]),t(B,[2,7]),t(B,[2,8]),{8:G,9:z,11:W,21:58,41:59,72:63,75:[1,64],77:[1,65]},{8:G,9:z,11:W,21:66},{8:G,9:z,11:W,21:67},{8:G,9:z,11:W,21:68},{8:G,9:z,11:W,21:69},{8:G,9:z,11:W,21:70},{8:G,9:z,10:[1,71],11:W,21:72},t(B,[2,36]),{35:[1,73]},{37:[1,74]},t(B,[2,39]),t(Z,[2,50],{18:75,39:76,10:F,40:j}),{10:[1,78]},{10:[1,79]},{10:[1,80]},{10:[1,81]},{14:oe,44:K,60:ee,79:[1,85],88:J,94:[1,82],96:[1,83],100:84,104:H,105:q,108:Q,110:ae,113:ue,114:ce,115:te,119:86},t(B,[2,183]),t(B,[2,184]),t(B,[2,185]),t(B,[2,186]),t(Ne,[2,51]),t(Ne,[2,54],{46:[1,98]}),t(se,[2,72],{112:111,29:[1,99],44:g,48:[1,100],50:[1,101],52:[1,102],54:[1,103],56:[1,104],58:[1,105],60:y,63:[1,106],65:[1,107],67:[1,108],68:[1,109],70:[1,110],88:T,101:E,104:L,105:S,108:A,110:I,113:D,114:k,115:R}),t(ke,[2,179]),t(ke,[2,140]),t(ke,[2,141]),t(ke,[2,142]),t(ke,[2,143]),t(ke,[2,144]),t(ke,[2,145]),t(ke,[2,146]),t(ke,[2,147]),t(ke,[2,148]),t(ke,[2,149]),t(ke,[2,150]),t(i,[2,12]),t(i,[2,18]),t(i,[2,19]),{9:[1,112]},t(Re,[2,26],{18:113,10:F}),t(B,[2,27]),{42:114,43:38,44:g,45:39,47:40,60:y,88:T,101:E,104:L,105:S,108:A,110:I,112:41,113:D,114:k,115:R},t(B,[2,40]),t(B,[2,41]),t(B,[2,42]),t(Ce,[2,76],{73:115,62:[1,117],74:[1,116]}),{76:118,78:119,79:[1,120],80:[1,121],115:Pe,118:Ie},t([44,60,62,74,88,101,104,105,108,110,113,114,115],[2,82]),t(B,[2,28]),t(B,[2,29]),t(B,[2,30]),t(B,[2,31]),t(B,[2,32]),{10:$e,12:ye,14:X,27:fe,28:124,32:he,44:ge,60:ne,75:ve,79:[1,126],80:[1,127],82:137,83:U,84:Te,85:ie,86:Ee,87:Ae,88:Ge,89:Be,90:125,104:me,108:He,110:Oe,113:et,114:bt,115:kt},t(vt,a,{5:150}),t(B,[2,37]),t(B,[2,38]),t(Z,[2,48],{44:rt}),t(Z,[2,49],{18:152,10:F,40:yt}),t(Ne,[2,44]),{44:g,47:154,60:y,88:T,101:E,104:L,105:S,108:A,110:I,112:41,113:D,114:k,115:R},{101:[1,155],102:156,104:[1,157]},{44:g,47:158,60:y,88:T,101:E,104:L,105:S,108:A,110:I,112:41,113:D,114:k,115:R},{44:g,47:159,60:y,88:T,101:E,104:L,105:S,108:A,110:I,112:41,113:D,114:k,115:R},t(Ue,[2,105],{10:[1,160],95:[1,161]}),{79:[1,162]},t(Ue,[2,113],{119:164,10:[1,163],14:oe,44:K,60:ee,88:J,104:H,105:q,108:Q,110:ae,113:ue,114:ce,115:te}),t(Ue,[2,115],{10:[1,165]}),t(tt,[2,181]),t(tt,[2,168]),t(tt,[2,169]),t(tt,[2,170]),t(tt,[2,171]),t(tt,[2,172]),t(tt,[2,173]),t(tt,[2,174]),t(tt,[2,175]),t(tt,[2,176]),t(tt,[2,177]),t(tt,[2,178]),{44:g,47:166,60:y,88:T,101:E,104:L,105:S,108:A,110:I,112:41,113:D,114:k,115:R},{30:167,67:ht,79:Et,80:er,81:168,115:dt,116:Je,117:ct},{30:175,67:ht,79:Et,80:er,81:168,115:dt,116:Je,117:ct},{30:177,50:[1,176],67:ht,79:Et,80:er,81:168,115:dt,116:Je,117:ct},{30:178,67:ht,79:Et,80:er,81:168,115:dt,116:Je,117:ct},{30:179,67:ht,79:Et,80:er,81:168,115:dt,116:Je,117:ct},{30:180,67:ht,79:Et,80:er,81:168,115:dt,116:Je,117:ct},{108:[1,181]},{30:182,67:ht,79:Et,80:er,81:168,115:dt,116:Je,117:ct},{30:183,65:[1,184],67:ht,79:Et,80:er,81:168,115:dt,116:Je,117:ct},{30:185,67:ht,79:Et,80:er,81:168,115:dt,116:Je,117:ct},{30:186,67:ht,79:Et,80:er,81:168,115:dt,116:Je,117:ct},{30:187,67:ht,79:Et,80:er,81:168,115:dt,116:Je,117:ct},t(ke,[2,180]),t(i,[2,20]),t(Re,[2,25]),t(Z,[2,46],{39:188,18:189,10:F,40:j}),t(Ce,[2,73],{10:[1,190]}),{10:[1,191]},{30:192,67:ht,79:Et,80:er,81:168,115:dt,116:Je,117:ct},{77:[1,193],78:194,115:Pe,118:Ie},t(Ct,[2,78]),t(Ct,[2,80]),t(Ct,[2,81]),t(Ct,[2,166]),t(Ct,[2,167]),{8:G,9:z,10:$e,11:W,12:ye,14:X,21:196,27:fe,29:[1,195],32:he,44:ge,60:ne,75:ve,82:137,83:U,84:Te,85:ie,86:Ee,87:Ae,88:Ge,89:Be,90:197,104:me,108:He,110:Oe,113:et,114:bt,115:kt},t(pt,[2,99]),t(pt,[2,101]),t(pt,[2,102]),t(pt,[2,155]),t(pt,[2,156]),t(pt,[2,157]),t(pt,[2,158]),t(pt,[2,159]),t(pt,[2,160]),t(pt,[2,161]),t(pt,[2,162]),t(pt,[2,163]),t(pt,[2,164]),t(pt,[2,165]),t(pt,[2,88]),t(pt,[2,89]),t(pt,[2,90]),t(pt,[2,91]),t(pt,[2,92]),t(pt,[2,93]),t(pt,[2,94]),t(pt,[2,95]),t(pt,[2,96]),t(pt,[2,97]),t(pt,[2,98]),{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,198],33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,83:v,84:x,85:b,86:w,87:_,88:T,101:E,104:L,105:S,108:A,110:I,112:41,113:D,114:k,115:R,120:C,121:O,122:N,123:P},{10:F,18:199},{44:[1,200]},t(Ne,[2,43]),{10:[1,201],44:g,60:y,88:T,101:E,104:L,105:S,108:A,110:I,112:111,113:D,114:k,115:R},{10:[1,202]},{10:[1,203],105:[1,204]},t(Bt,[2,126]),{10:[1,205],44:g,60:y,88:T,101:E,104:L,105:S,108:A,110:I,112:111,113:D,114:k,115:R},{10:[1,206],44:g,60:y,88:T,101:E,104:L,105:S,108:A,110:I,112:111,113:D,114:k,115:R},{79:[1,207]},t(Ue,[2,107],{10:[1,208]}),t(Ue,[2,109],{10:[1,209]}),{79:[1,210]},t(tt,[2,182]),{79:[1,211],97:[1,212]},t(Ne,[2,55],{112:111,44:g,60:y,88:T,101:E,104:L,105:S,108:A,110:I,113:D,114:k,115:R}),{31:[1,213],67:ht,81:214,115:dt,116:Je,117:ct},t(Tr,[2,84]),t(Tr,[2,86]),t(Tr,[2,87]),t(Tr,[2,151]),t(Tr,[2,152]),t(Tr,[2,153]),t(Tr,[2,154]),{49:[1,215],67:ht,81:214,115:dt,116:Je,117:ct},{30:216,67:ht,79:Et,80:er,81:168,115:dt,116:Je,117:ct},{51:[1,217],67:ht,81:214,115:dt,116:Je,117:ct},{53:[1,218],67:ht,81:214,115:dt,116:Je,117:ct},{55:[1,219],67:ht,81:214,115:dt,116:Je,117:ct},{57:[1,220],67:ht,81:214,115:dt,116:Je,117:ct},{60:[1,221]},{64:[1,222],67:ht,81:214,115:dt,116:Je,117:ct},{66:[1,223],67:ht,81:214,115:dt,116:Je,117:ct},{30:224,67:ht,79:Et,80:er,81:168,115:dt,116:Je,117:ct},{31:[1,225],67:ht,81:214,115:dt,116:Je,117:ct},{67:ht,69:[1,226],71:[1,227],81:214,115:dt,116:Je,117:ct},{67:ht,69:[1,229],71:[1,228],81:214,115:dt,116:Je,117:ct},t(Z,[2,45],{18:152,10:F,40:yt}),t(Z,[2,47],{44:rt}),t(Ce,[2,75]),t(Ce,[2,74]),{62:[1,230],67:ht,81:214,115:dt,116:Je,117:ct},t(Ce,[2,77]),t(Ct,[2,79]),{30:231,67:ht,79:Et,80:er,81:168,115:dt,116:Je,117:ct},t(vt,a,{5:232}),t(pt,[2,100]),t(B,[2,35]),{43:233,44:g,45:39,47:40,60:y,88:T,101:E,104:L,105:S,108:A,110:I,112:41,113:D,114:k,115:R},{10:F,18:234},{10:yr,60:or,83:ln,91:235,104:Or,106:236,107:237,108:ii,109:mn,110:On,111:_r},{10:yr,60:or,83:ln,91:246,103:[1,247],104:Or,106:236,107:237,108:ii,109:mn,110:On,111:_r},{10:yr,60:or,83:ln,91:248,103:[1,249],104:Or,106:236,107:237,108:ii,109:mn,110:On,111:_r},{104:[1,250]},{10:yr,60:or,83:ln,91:251,104:Or,106:236,107:237,108:ii,109:mn,110:On,111:_r},{44:g,47:252,60:y,88:T,101:E,104:L,105:S,108:A,110:I,112:41,113:D,114:k,115:R},t(Ue,[2,106]),{79:[1,253]},{79:[1,254],97:[1,255]},t(Ue,[2,114]),t(Ue,[2,116],{10:[1,256]}),t(Ue,[2,117]),t(se,[2,56]),t(Tr,[2,85]),t(se,[2,57]),{51:[1,257],67:ht,81:214,115:dt,116:Je,117:ct},t(se,[2,64]),t(se,[2,59]),t(se,[2,60]),t(se,[2,61]),{108:[1,258]},t(se,[2,63]),t(se,[2,65]),{66:[1,259],67:ht,81:214,115:dt,116:Je,117:ct},t(se,[2,67]),t(se,[2,68]),t(se,[2,70]),t(se,[2,69]),t(se,[2,71]),t([10,44,60,88,101,104,105,108,110,113,114,115],[2,83]),{31:[1,260],67:ht,81:214,115:dt,116:Je,117:ct},{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,261],33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,83:v,84:x,85:b,86:w,87:_,88:T,101:E,104:L,105:S,108:A,110:I,112:41,113:D,114:k,115:R,120:C,121:O,122:N,123:P},t(Ne,[2,53]),{43:262,44:g,45:39,47:40,60:y,88:T,101:E,104:L,105:S,108:A,110:I,112:41,113:D,114:k,115:R},t(Ue,[2,119],{105:mi}),t(vs,[2,128],{107:264,10:yr,60:or,83:ln,104:Or,108:ii,109:mn,110:On,111:_r}),t(Pn,[2,130]),t(Pn,[2,132]),t(Pn,[2,133]),t(Pn,[2,134]),t(Pn,[2,135]),t(Pn,[2,136]),t(Pn,[2,137]),t(Pn,[2,138]),t(Pn,[2,139]),t(Ue,[2,120],{105:mi}),{10:[1,265]},t(Ue,[2,121],{105:mi}),{10:[1,266]},t(Bt,[2,127]),t(Ue,[2,103],{105:mi}),t(Ue,[2,104],{112:111,44:g,60:y,88:T,101:E,104:L,105:S,108:A,110:I,113:D,114:k,115:R}),t(Ue,[2,108]),t(Ue,[2,110],{10:[1,267]}),t(Ue,[2,111]),{97:[1,268]},{51:[1,269]},{62:[1,270]},{66:[1,271]},{8:G,9:z,11:W,21:272},t(B,[2,34]),t(Ne,[2,52]),{10:yr,60:or,83:ln,104:Or,106:273,107:237,108:ii,109:mn,110:On,111:_r},t(Pn,[2,131]),{14:oe,44:K,60:ee,88:J,100:274,104:H,105:q,108:Q,110:ae,113:ue,114:ce,115:te,119:86},{14:oe,44:K,60:ee,88:J,100:275,104:H,105:q,108:Q,110:ae,113:ue,114:ce,115:te,119:86},{97:[1,276]},t(Ue,[2,118]),t(se,[2,58]),{30:277,67:ht,79:Et,80:er,81:168,115:dt,116:Je,117:ct},t(se,[2,66]),t(vt,a,{5:278}),t(vs,[2,129],{107:264,10:yr,60:or,83:ln,104:Or,108:ii,109:mn,110:On,111:_r}),t(Ue,[2,124],{119:164,10:[1,279],14:oe,44:K,60:ee,88:J,104:H,105:q,108:Q,110:ae,113:ue,114:ce,115:te}),t(Ue,[2,125],{119:164,10:[1,280],14:oe,44:K,60:ee,88:J,104:H,105:q,108:Q,110:ae,113:ue,114:ce,115:te}),t(Ue,[2,112]),{31:[1,281],67:ht,81:214,115:dt,116:Je,117:ct},{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,282],33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,83:v,84:x,85:b,86:w,87:_,88:T,101:E,104:L,105:S,108:A,110:I,112:41,113:D,114:k,115:R,120:C,121:O,122:N,123:P},{10:yr,60:or,83:ln,91:283,104:Or,106:236,107:237,108:ii,109:mn,110:On,111:_r},{10:yr,60:or,83:ln,91:284,104:Or,106:236,107:237,108:ii,109:mn,110:On,111:_r},t(se,[2,62]),t(B,[2,33]),t(Ue,[2,122],{105:mi}),t(Ue,[2,123],{105:mi})],defaultActions:{},parseError:o(function(At,Pt){if(Pt.recoverable)this.trace(At);else{var wt=new Error(At);throw wt.hash=Pt,wt}},"parseError"),parse:o(function(At){var Pt=this,wt=[0],We=[],Ft=[null],de=[],gn=this.table,xe="",ja=0,W1=0,Y1=0,q1=2,X1=1,op=de.slice.call(arguments,1),Kn=Object.create(this.lexer),ca={yy:{}};for(var tc in this.yy)Object.prototype.hasOwnProperty.call(this.yy,tc)&&(ca.yy[tc]=this.yy[tc]);Kn.setInput(At,ca.yy),ca.yy.lexer=Kn,ca.yy.parser=this,typeof Kn.yylloc>"u"&&(Kn.yylloc={});var Wf=Kn.yylloc;de.push(Wf);var j1=Kn.options&&Kn.options.ranges;typeof ca.yy.parseError=="function"?this.parseError=ca.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function TF(Ka){wt.length=wt.length-2*Ka,Ft.length=Ft.length-Ka,de.length=de.length-Ka}o(TF,"popStack");function Yf(){var Ka;return Ka=We.pop()||Kn.lex()||X1,typeof Ka!="number"&&(Ka instanceof Array&&(We=Ka,Ka=We.pop()),Ka=Pt.symbols_[Ka]||Ka),Ka}o(Yf,"lex");for(var ua,K1,En,Oi,kF,lp,rc={},qf,Co,zb,Xf;;){if(En=wt[wt.length-1],this.defaultActions[En]?Oi=this.defaultActions[En]:((ua===null||typeof ua>"u")&&(ua=Yf()),Oi=gn[En]&&gn[En][ua]),typeof Oi>"u"||!Oi.length||!Oi[0]){var cp="";Xf=[];for(qf in gn[En])this.terminals_[qf]&&qf>q1&&Xf.push("'"+this.terminals_[qf]+"'");Kn.showPosition?cp="Parse error on line "+(ja+1)+`: +`+Kn.showPosition()+` +Expecting `+Xf.join(", ")+", got '"+(this.terminals_[ua]||ua)+"'":cp="Parse error on line "+(ja+1)+": Unexpected "+(ua==X1?"end of input":"'"+(this.terminals_[ua]||ua)+"'"),this.parseError(cp,{text:Kn.match,token:this.terminals_[ua]||ua,line:Kn.yylineno,loc:Wf,expected:Xf})}if(Oi[0]instanceof Array&&Oi.length>1)throw new Error("Parse Error: multiple actions possible at state: "+En+", token: "+ua);switch(Oi[0]){case 1:wt.push(ua),Ft.push(Kn.yytext),de.push(Kn.yylloc),wt.push(Oi[1]),ua=null,K1?(ua=K1,K1=null):(W1=Kn.yyleng,xe=Kn.yytext,ja=Kn.yylineno,Wf=Kn.yylloc,Y1>0&&Y1--);break;case 2:if(Co=this.productions_[Oi[1]][1],rc.$=Ft[Ft.length-Co],rc._$={first_line:de[de.length-(Co||1)].first_line,last_line:de[de.length-1].last_line,first_column:de[de.length-(Co||1)].first_column,last_column:de[de.length-1].last_column},j1&&(rc._$.range=[de[de.length-(Co||1)].range[0],de[de.length-1].range[1]]),lp=this.performAction.apply(rc,[xe,W1,ja,ca.yy,Oi[1],Ft,de].concat(op)),typeof lp<"u")return lp;Co&&(wt=wt.slice(0,-1*Co*2),Ft=Ft.slice(0,-1*Co),de=de.slice(0,-1*Co)),wt.push(this.productions_[Oi[1]][0]),Ft.push(rc.$),de.push(rc._$),zb=gn[wt[wt.length-2]][wt[wt.length-1]],wt.push(zb);break;case 3:return!0}}return!0},"parse")},gl=function(){var ki={EOF:1,parseError:o(function(Pt,wt){if(this.yy.parser)this.yy.parser.parseError(Pt,wt);else throw new Error(Pt)},"parseError"),setInput:o(function(At,Pt){return this.yy=Pt||this.yy||{},this._input=At,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var At=this._input[0];this.yytext+=At,this.yyleng++,this.offset++,this.match+=At,this.matched+=At;var Pt=At.match(/(?:\r\n?|\n).*/g);return Pt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),At},"input"),unput:o(function(At){var Pt=At.length,wt=At.split(/(?:\r\n?|\n)/g);this._input=At+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Pt),this.offset-=Pt;var We=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),wt.length-1&&(this.yylineno-=wt.length-1);var Ft=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:wt?(wt.length===We.length?this.yylloc.first_column:0)+We[We.length-wt.length].length-wt[0].length:this.yylloc.first_column-Pt},this.options.ranges&&(this.yylloc.range=[Ft[0],Ft[0]+this.yyleng-Pt]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(At){this.unput(this.match.slice(At))},"less"),pastInput:o(function(){var At=this.matched.substr(0,this.matched.length-this.match.length);return(At.length>20?"...":"")+At.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var At=this.match;return At.length<20&&(At+=this._input.substr(0,20-At.length)),(At.substr(0,20)+(At.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var At=this.pastInput(),Pt=new Array(At.length+1).join("-");return At+this.upcomingInput()+` +`+Pt+"^"},"showPosition"),test_match:o(function(At,Pt){var wt,We,Ft;if(this.options.backtrack_lexer&&(Ft={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Ft.yylloc.range=this.yylloc.range.slice(0))),We=At[0].match(/(?:\r\n?|\n).*/g),We&&(this.yylineno+=We.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:We?We[We.length-1].length-We[We.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+At[0].length},this.yytext+=At[0],this.match+=At[0],this.matches=At,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(At[0].length),this.matched+=At[0],wt=this.performAction.call(this,this.yy,this,Pt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),wt)return wt;if(this._backtrack){for(var de in Ft)this[de]=Ft[de];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var At,Pt,wt,We;this._more||(this.yytext="",this.match="");for(var Ft=this._currentRules(),de=0;dePt[0].length)){if(Pt=wt,We=de,this.options.backtrack_lexer){if(At=this.test_match(wt,Ft[de]),At!==!1)return At;if(this._backtrack){Pt=!1;continue}else return!1}else if(!this.options.flex)break}return Pt?(At=this.test_match(Pt,Ft[We]),At!==!1?At:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var Pt=this.next();return Pt||this.lex()},"lex"),begin:o(function(Pt){this.conditionStack.push(Pt)},"begin"),popState:o(function(){var Pt=this.conditionStack.length-1;return Pt>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(Pt){return Pt=this.conditionStack.length-1-Math.abs(Pt||0),Pt>=0?this.conditionStack[Pt]:"INITIAL"},"topState"),pushState:o(function(Pt){this.begin(Pt)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(Pt,wt,We,Ft){var de=Ft;switch(We){case 0:return this.begin("acc_title"),34;break;case 1:return this.popState(),"acc_title_value";break;case 2:return this.begin("acc_descr"),36;break;case 3:return this.popState(),"acc_descr_value";break;case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return this.pushState("shapeData"),wt.yytext="",40;break;case 8:return this.pushState("shapeDataStr"),40;break;case 9:return this.popState(),40;break;case 10:let gn=/\n\s*/g;return wt.yytext=wt.yytext.replace(gn,"
    "),40;break;case 11:return 40;case 12:this.popState();break;case 13:this.begin("callbackname");break;case 14:this.popState();break;case 15:this.popState(),this.begin("callbackargs");break;case 16:return 94;case 17:this.popState();break;case 18:return 95;case 19:return"MD_STR";case 20:this.popState();break;case 21:this.begin("md_string");break;case 22:return"STR";case 23:this.popState();break;case 24:this.pushState("string");break;case 25:return 83;case 26:return 101;case 27:return 84;case 28:return 103;case 29:return 85;case 30:return 86;case 31:return 96;case 32:this.begin("click");break;case 33:this.popState();break;case 34:return 87;case 35:return Pt.lex.firstGraph()&&this.begin("dir"),12;break;case 36:return Pt.lex.firstGraph()&&this.begin("dir"),12;break;case 37:return Pt.lex.firstGraph()&&this.begin("dir"),12;break;case 38:return 27;case 39:return 32;case 40:return 97;case 41:return 97;case 42:return 97;case 43:return 97;case 44:return this.popState(),13;break;case 45:return this.popState(),14;break;case 46:return this.popState(),14;break;case 47:return this.popState(),14;break;case 48:return this.popState(),14;break;case 49:return this.popState(),14;break;case 50:return this.popState(),14;break;case 51:return this.popState(),14;break;case 52:return this.popState(),14;break;case 53:return this.popState(),14;break;case 54:return this.popState(),14;break;case 55:return 120;case 56:return 121;case 57:return 122;case 58:return 123;case 59:return 104;case 60:return 110;case 61:return 46;case 62:return 60;case 63:return 44;case 64:return 8;case 65:return 105;case 66:return 114;case 67:return this.popState(),77;break;case 68:return this.pushState("edgeText"),75;break;case 69:return 118;case 70:return this.popState(),77;break;case 71:return this.pushState("thickEdgeText"),75;break;case 72:return 118;case 73:return this.popState(),77;break;case 74:return this.pushState("dottedEdgeText"),75;break;case 75:return 118;case 76:return 77;case 77:return this.popState(),53;break;case 78:return"TEXT";case 79:return this.pushState("ellipseText"),52;break;case 80:return this.popState(),55;break;case 81:return this.pushState("text"),54;break;case 82:return this.popState(),57;break;case 83:return this.pushState("text"),56;break;case 84:return 58;case 85:return this.pushState("text"),67;break;case 86:return this.popState(),64;break;case 87:return this.pushState("text"),63;break;case 88:return this.popState(),49;break;case 89:return this.pushState("text"),48;break;case 90:return this.popState(),69;break;case 91:return this.popState(),71;break;case 92:return 116;case 93:return this.pushState("trapText"),68;break;case 94:return this.pushState("trapText"),70;break;case 95:return 117;case 96:return 67;case 97:return 89;case 98:return"SEP";case 99:return 88;case 100:return 114;case 101:return 110;case 102:return 44;case 103:return 108;case 104:return 113;case 105:return 115;case 106:return this.popState(),62;break;case 107:return this.pushState("text"),62;break;case 108:return this.popState(),51;break;case 109:return this.pushState("text"),50;break;case 110:return this.popState(),31;break;case 111:return this.pushState("text"),29;break;case 112:return this.popState(),66;break;case 113:return this.pushState("text"),65;break;case 114:return"TEXT";case 115:return"QUOTE";case 116:return 9;case 117:return 10;case 118:return 11}},"anonymous"),rules:[/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:@\{)/,/^(?:["])/,/^(?:["])/,/^(?:[^\"]+)/,/^(?:[^}^"]+)/,/^(?:\})/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["][`])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:["])/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s])/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:flowchart-elk\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:[^-]|-(?!-)+)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:[^=]|=(?!))/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:[^\.]|\.(?!))/,/^(?:\s*~~[\~]+\s*)/,/^(?:[-/\)][\)])/,/^(?:[^\(\)\[\]\{\}]|!\)+)/,/^(?:\(-)/,/^(?:\]\))/,/^(?:\(\[)/,/^(?:\]\])/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:>)/,/^(?:\)\])/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\(\(\()/,/^(?:[\\(?=\])][\]])/,/^(?:\/(?=\])\])/,/^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:\*)/,/^(?:#)/,/^(?:&)/,/^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/,/^(?:-)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\|)/,/^(?:\))/,/^(?:\()/,/^(?:\])/,/^(?:\[)/,/^(?:(\}))/,/^(?:\{)/,/^(?:[^\[\]\(\)\{\}\|\"]+)/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{shapeDataEndBracket:{rules:[21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},shapeDataStr:{rules:[9,10,21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},shapeData:{rules:[8,11,12,21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},callbackargs:{rules:[17,18,21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},callbackname:{rules:[14,15,16,21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},href:{rules:[21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},click:{rules:[21,24,33,34,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},dottedEdgeText:{rules:[21,24,73,75,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},thickEdgeText:{rules:[21,24,70,72,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},edgeText:{rules:[21,24,67,69,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},trapText:{rules:[21,24,76,79,81,83,87,89,90,91,92,93,94,107,109,111,113],inclusive:!1},ellipseText:{rules:[21,24,76,77,78,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},text:{rules:[21,24,76,79,80,81,82,83,86,87,88,89,93,94,106,107,108,109,110,111,112,113,114],inclusive:!1},vertex:{rules:[21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},dir:{rules:[21,24,44,45,46,47,48,49,50,51,52,53,54,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},acc_descr_multiline:{rules:[5,6,21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},acc_descr:{rules:[3,21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},acc_title:{rules:[1,21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},md_string:{rules:[19,20,21,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},string:{rules:[21,22,23,24,76,79,81,83,87,89,93,94,107,109,111,113],inclusive:!1},INITIAL:{rules:[0,2,4,7,13,21,24,25,26,27,28,29,30,31,32,35,36,37,38,39,40,41,42,43,55,56,57,58,59,60,61,62,63,64,65,66,67,68,70,71,73,74,76,79,81,83,84,85,87,89,93,94,95,96,97,98,99,100,101,102,103,104,105,107,109,111,113,115,116,117,118],inclusive:!0}}};return ki}();So.lexer=gl;function Bn(){this.yy={}}return o(Bn,"Parser"),Bn.prototype=So,So.Parser=Bn,new Bn}();LD.parser=LD;Vie=LD});var GOe,$Oe,Hie,Wie=M(()=>{"use strict";Lo();GOe=o((t,e)=>{let r=ay,n=r(t,"r"),i=r(t,"g"),a=r(t,"b");return Zs(n,i,a,e)},"fade"),$Oe=o(t=>`.label { + font-family: ${t.fontFamily}; + color: ${t.nodeTextColor||t.textColor}; } .cluster-label text { - fill: ${i.titleColor}; + fill: ${t.titleColor}; } - .cluster-label span,p { - color: ${i.titleColor}; + .cluster-label span { + color: ${t.titleColor}; + } + .cluster-label span p { + background-color: transparent; } - .label text,span,p { - fill: ${i.nodeTextColor||i.textColor}; - color: ${i.nodeTextColor||i.textColor}; + .label text,span { + fill: ${t.nodeTextColor||t.textColor}; + color: ${t.nodeTextColor||t.textColor}; } .node rect, @@ -399,11 +479,11 @@ You have to call mermaid.initialize.`)},Bqe=function(i,s,u){Xe.info("addLink (ab .node ellipse, .node polygon, .node path { - fill: ${i.mainBkg}; - stroke: ${i.nodeBorder}; + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; stroke-width: 1px; } - .flowchart-label text { + .rough-node .label text , .node .label text, .image-shape .label, .icon-shape .label { text-anchor: middle; } // .flowchart-label .text-outer-tspan { @@ -419,58 +499,68 @@ You have to call mermaid.initialize.`)},Bqe=function(i,s,u){Xe.info("addLink (ab stroke-width: 1px; } - .node .label { + .rough-node .label,.node .label, .image-shape .label, .icon-shape .label { text-align: center; } .node.clickable { cursor: pointer; } + + .root .anchor path { + fill: ${t.lineColor} !important; + stroke-width: 0; + stroke: ${t.lineColor}; + } + .arrowheadPath { - fill: ${i.arrowheadColor}; + fill: ${t.arrowheadColor}; } .edgePath .path { - stroke: ${i.lineColor}; + stroke: ${t.lineColor}; stroke-width: 2.0px; } .flowchart-link { - stroke: ${i.lineColor}; + stroke: ${t.lineColor}; fill: none; } .edgeLabel { - background-color: ${i.edgeLabelBackground}; + background-color: ${t.edgeLabelBackground}; + p { + background-color: ${t.edgeLabelBackground}; + } rect { opacity: 0.5; - background-color: ${i.edgeLabelBackground}; - fill: ${i.edgeLabelBackground}; + background-color: ${t.edgeLabelBackground}; + fill: ${t.edgeLabelBackground}; } text-align: center; } /* For html labels only */ .labelBkg { - background-color: ${Sen(i.edgeLabelBackground,.5)}; - // background-color: + background-color: ${GOe(t.edgeLabelBackground,.5)}; + // background-color: } .cluster rect { - fill: ${i.clusterBkg}; - stroke: ${i.clusterBorder}; + fill: ${t.clusterBkg}; + stroke: ${t.clusterBorder}; stroke-width: 1px; } .cluster text { - fill: ${i.titleColor}; + fill: ${t.titleColor}; } - .cluster span,p { - color: ${i.titleColor}; + .cluster span { + color: ${t.titleColor}; } /* .cluster div { - color: ${i.titleColor}; + color: ${t.titleColor}; } */ div.mermaidTooltip { @@ -478,10 +568,10 @@ You have to call mermaid.initialize.`)},Bqe=function(i,s,u){Xe.info("addLink (ab text-align: center; max-width: 200px; padding: 2px; - font-family: ${i.fontFamily}; + font-family: ${t.fontFamily}; font-size: 12px; - background: ${i.tertiaryColor}; - border: 1px solid ${i.border2}; + background: ${t.tertiaryColor}; + border: 1px solid ${t.border2}; border-radius: 2px; pointer-events: none; z-index: 100; @@ -490,77 +580,217 @@ You have to call mermaid.initialize.`)},Bqe=function(i,s,u){Xe.info("addLink (ab .flowchartTitleText { text-anchor: middle; font-size: 18px; - fill: ${i.textColor}; - } -`,_en=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:Gbe,db:HC,renderer:Hme,styles:FUe,init:i=>{i.flowchart||(i.flowchart={}),i.flowchart.arrowMarkerAbsolute=i.arrowMarkerAbsolute,_Qt.setConf(i.flowchart),HC.clear(),HC.setGen("gen-1")}}},Symbol.toStringTag,{value:"Module"})),Aen=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:Gbe,db:HC,renderer:Hme,styles:FUe,init:i=>{i.flowchart||(i.flowchart={}),i.flowchart.arrowMarkerAbsolute=i.arrowMarkerAbsolute,_jt({flowchart:{arrowMarkerAbsolute:i.arrowMarkerAbsolute}}),Hme.setConf(i.flowchart),HC.clear(),HC.setGen("gen-2")}}},Symbol.toStringTag,{value:"Module"}));var Vme=function(){var i=function(de,X,ge,W){for(ge=ge||{},W=de.length;W--;ge[de[W]]=X);return ge},s=[6,8,10,20,22,24,26,27,28],u=[1,10],d=[1,11],p=[1,12],v=[1,13],b=[1,14],y=[1,15],T=[1,21],_=[1,22],A=[1,23],P=[1,24],R=[1,25],F=[6,8,10,13,15,18,19,20,22,24,26,27,28,41,42,43,44,45],j=[1,34],K=[27,28,46,47],ee=[41,42,43,44,45],ie=[17,34],oe=[1,54],pe=[1,53],be=[17,34,36,38],ae={trace:function(){},yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,entityName:11,relSpec:12,":":13,role:14,BLOCK_START:15,attributes:16,BLOCK_STOP:17,SQS:18,SQE:19,title:20,title_value:21,acc_title:22,acc_title_value:23,acc_descr:24,acc_descr_value:25,acc_descr_multiline_value:26,ALPHANUM:27,ENTITY_NAME:28,attribute:29,attributeType:30,attributeName:31,attributeKeyTypeList:32,attributeComment:33,ATTRIBUTE_WORD:34,attributeKeyType:35,COMMA:36,ATTRIBUTE_KEY:37,COMMENT:38,cardinality:39,relType:40,ZERO_OR_ONE:41,ZERO_OR_MORE:42,ONE_OR_MORE:43,ONLY_ONE:44,MD_PARENT:45,NON_IDENTIFYING:46,IDENTIFYING:47,WORD:48,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",8:"SPACE",10:"NEWLINE",13:":",15:"BLOCK_START",17:"BLOCK_STOP",18:"SQS",19:"SQE",20:"title",21:"title_value",22:"acc_title",23:"acc_title_value",24:"acc_descr",25:"acc_descr_value",26:"acc_descr_multiline_value",27:"ALPHANUM",28:"ENTITY_NAME",34:"ATTRIBUTE_WORD",36:"COMMA",37:"ATTRIBUTE_KEY",38:"COMMENT",41:"ZERO_OR_ONE",42:"ZERO_OR_MORE",43:"ONE_OR_MORE",44:"ONLY_ONE",45:"MD_PARENT",46:"NON_IDENTIFYING",47:"IDENTIFYING",48:"WORD"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,5],[9,4],[9,3],[9,1],[9,7],[9,6],[9,4],[9,2],[9,2],[9,2],[9,1],[11,1],[11,1],[16,1],[16,2],[29,2],[29,3],[29,3],[29,4],[30,1],[31,1],[32,1],[32,3],[35,1],[33,1],[12,3],[39,1],[39,1],[39,1],[39,1],[39,1],[40,1],[40,1],[14,1],[14,1],[14,1]],performAction:function(X,ge,W,xe,U,Fe,Pe){var je=Fe.length-1;switch(U){case 1:break;case 2:this.$=[];break;case 3:Fe[je-1].push(Fe[je]),this.$=Fe[je-1];break;case 4:case 5:this.$=Fe[je];break;case 6:case 7:this.$=[];break;case 8:xe.addEntity(Fe[je-4]),xe.addEntity(Fe[je-2]),xe.addRelationship(Fe[je-4],Fe[je],Fe[je-2],Fe[je-3]);break;case 9:xe.addEntity(Fe[je-3]),xe.addAttributes(Fe[je-3],Fe[je-1]);break;case 10:xe.addEntity(Fe[je-2]);break;case 11:xe.addEntity(Fe[je]);break;case 12:xe.addEntity(Fe[je-6],Fe[je-4]),xe.addAttributes(Fe[je-6],Fe[je-1]);break;case 13:xe.addEntity(Fe[je-5],Fe[je-3]);break;case 14:xe.addEntity(Fe[je-3],Fe[je-1]);break;case 15:case 16:this.$=Fe[je].trim(),xe.setAccTitle(this.$);break;case 17:case 18:this.$=Fe[je].trim(),xe.setAccDescription(this.$);break;case 19:case 43:this.$=Fe[je];break;case 20:case 41:case 42:this.$=Fe[je].replace(/"/g,"");break;case 21:case 29:this.$=[Fe[je]];break;case 22:Fe[je].push(Fe[je-1]),this.$=Fe[je];break;case 23:this.$={attributeType:Fe[je-1],attributeName:Fe[je]};break;case 24:this.$={attributeType:Fe[je-2],attributeName:Fe[je-1],attributeKeyTypeList:Fe[je]};break;case 25:this.$={attributeType:Fe[je-2],attributeName:Fe[je-1],attributeComment:Fe[je]};break;case 26:this.$={attributeType:Fe[je-3],attributeName:Fe[je-2],attributeKeyTypeList:Fe[je-1],attributeComment:Fe[je]};break;case 27:case 28:case 31:this.$=Fe[je];break;case 30:Fe[je-2].push(Fe[je]),this.$=Fe[je-2];break;case 32:this.$=Fe[je].replace(/"/g,"");break;case 33:this.$={cardA:Fe[je],relType:Fe[je-1],cardB:Fe[je-2]};break;case 34:this.$=xe.Cardinality.ZERO_OR_ONE;break;case 35:this.$=xe.Cardinality.ZERO_OR_MORE;break;case 36:this.$=xe.Cardinality.ONE_OR_MORE;break;case 37:this.$=xe.Cardinality.ONLY_ONE;break;case 38:this.$=xe.Cardinality.MD_PARENT;break;case 39:this.$=xe.Identification.NON_IDENTIFYING;break;case 40:this.$=xe.Identification.IDENTIFYING;break}},table:[{3:1,4:[1,2]},{1:[3]},i(s,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:9,20:u,22:d,24:p,26:v,27:b,28:y},i(s,[2,7],{1:[2,1]}),i(s,[2,3]),{9:16,11:9,20:u,22:d,24:p,26:v,27:b,28:y},i(s,[2,5]),i(s,[2,6]),i(s,[2,11],{12:17,39:20,15:[1,18],18:[1,19],41:T,42:_,43:A,44:P,45:R}),{21:[1,26]},{23:[1,27]},{25:[1,28]},i(s,[2,18]),i(F,[2,19]),i(F,[2,20]),i(s,[2,4]),{11:29,27:b,28:y},{16:30,17:[1,31],29:32,30:33,34:j},{11:35,27:b,28:y},{40:36,46:[1,37],47:[1,38]},i(K,[2,34]),i(K,[2,35]),i(K,[2,36]),i(K,[2,37]),i(K,[2,38]),i(s,[2,15]),i(s,[2,16]),i(s,[2,17]),{13:[1,39]},{17:[1,40]},i(s,[2,10]),{16:41,17:[2,21],29:32,30:33,34:j},{31:42,34:[1,43]},{34:[2,27]},{19:[1,44]},{39:45,41:T,42:_,43:A,44:P,45:R},i(ee,[2,39]),i(ee,[2,40]),{14:46,27:[1,49],28:[1,48],48:[1,47]},i(s,[2,9]),{17:[2,22]},i(ie,[2,23],{32:50,33:51,35:52,37:oe,38:pe}),i([17,34,37,38],[2,28]),i(s,[2,14],{15:[1,55]}),i([27,28],[2,33]),i(s,[2,8]),i(s,[2,41]),i(s,[2,42]),i(s,[2,43]),i(ie,[2,24],{33:56,36:[1,57],38:pe}),i(ie,[2,25]),i(be,[2,29]),i(ie,[2,32]),i(be,[2,31]),{16:58,17:[1,59],29:32,30:33,34:j},i(ie,[2,26]),{35:60,37:oe},{17:[1,61]},i(s,[2,13]),i(be,[2,30]),i(s,[2,12])],defaultActions:{34:[2,27],41:[2,22]},parseError:function(X,ge){if(ge.recoverable)this.trace(X);else{var W=new Error(X);throw W.hash=ge,W}},parse:function(X){var ge=this,W=[0],xe=[],U=[null],Fe=[],Pe=this.table,je="",Ie=0,Se=0,Ce=2,ke=1,Ke=Fe.slice.call(arguments,1),Ft=Object.create(this.lexer),Ne={yy:{}};for(var gn in this.yy)Object.prototype.hasOwnProperty.call(this.yy,gn)&&(Ne.yy[gn]=this.yy[gn]);Ft.setInput(X,Ne.yy),Ne.yy.lexer=Ft,Ne.yy.parser=this,typeof Ft.yylloc>"u"&&(Ft.yylloc={});var _t=Ft.yylloc;Fe.push(_t);var Et=Ft.options&&Ft.options.ranges;typeof Ne.yy.parseError=="function"?this.parseError=Ne.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Gt(){var ji;return ji=xe.pop()||Ft.lex()||ke,typeof ji!="number"&&(ji instanceof Array&&(xe=ji,ji=xe.pop()),ji=ge.symbols_[ji]||ji),ji}for(var ln,xt,Pt,Qe,Dt={},kt,On,ht,zr;;){if(xt=W[W.length-1],this.defaultActions[xt]?Pt=this.defaultActions[xt]:((ln===null||typeof ln>"u")&&(ln=Gt()),Pt=Pe[xt]&&Pe[xt][ln]),typeof Pt>"u"||!Pt.length||!Pt[0]){var yt="";zr=[];for(kt in Pe[xt])this.terminals_[kt]&&kt>Ce&&zr.push("'"+this.terminals_[kt]+"'");Ft.showPosition?yt="Parse error on line "+(Ie+1)+`: -`+Ft.showPosition()+` -Expecting `+zr.join(", ")+", got '"+(this.terminals_[ln]||ln)+"'":yt="Parse error on line "+(Ie+1)+": Unexpected "+(ln==ke?"end of input":"'"+(this.terminals_[ln]||ln)+"'"),this.parseError(yt,{text:Ft.match,token:this.terminals_[ln]||ln,line:Ft.yylineno,loc:_t,expected:zr})}if(Pt[0]instanceof Array&&Pt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+xt+", token: "+ln);switch(Pt[0]){case 1:W.push(ln),U.push(Ft.yytext),Fe.push(Ft.yylloc),W.push(Pt[1]),ln=null,Se=Ft.yyleng,je=Ft.yytext,Ie=Ft.yylineno,_t=Ft.yylloc;break;case 2:if(On=this.productions_[Pt[1]][1],Dt.$=U[U.length-On],Dt._$={first_line:Fe[Fe.length-(On||1)].first_line,last_line:Fe[Fe.length-1].last_line,first_column:Fe[Fe.length-(On||1)].first_column,last_column:Fe[Fe.length-1].last_column},Et&&(Dt._$.range=[Fe[Fe.length-(On||1)].range[0],Fe[Fe.length-1].range[1]]),Qe=this.performAction.apply(Dt,[je,Se,Ie,Ne.yy,Pt[1],U,Fe].concat(Ke)),typeof Qe<"u")return Qe;On&&(W=W.slice(0,-1*On*2),U=U.slice(0,-1*On),Fe=Fe.slice(0,-1*On)),W.push(this.productions_[Pt[1]][0]),U.push(Dt.$),Fe.push(Dt._$),ht=Pe[W[W.length-2]][W[W.length-1]],W.push(ht);break;case 3:return!0}}return!0}},ne=function(){var de={EOF:1,parseError:function(ge,W){if(this.yy.parser)this.yy.parser.parseError(ge,W);else throw new Error(ge)},setInput:function(X,ge){return this.yy=ge||this.yy||{},this._input=X,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var X=this._input[0];this.yytext+=X,this.yyleng++,this.offset++,this.match+=X,this.matched+=X;var ge=X.match(/(?:\r\n?|\n).*/g);return ge?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),X},unput:function(X){var ge=X.length,W=X.split(/(?:\r\n?|\n)/g);this._input=X+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-ge),this.offset-=ge;var xe=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),W.length-1&&(this.yylineno-=W.length-1);var U=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:W?(W.length===xe.length?this.yylloc.first_column:0)+xe[xe.length-W.length].length-W[0].length:this.yylloc.first_column-ge},this.options.ranges&&(this.yylloc.range=[U[0],U[0]+this.yyleng-ge]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(X){this.unput(this.match.slice(X))},pastInput:function(){var X=this.matched.substr(0,this.matched.length-this.match.length);return(X.length>20?"...":"")+X.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var X=this.match;return X.length<20&&(X+=this._input.substr(0,20-X.length)),(X.substr(0,20)+(X.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var X=this.pastInput(),ge=new Array(X.length+1).join("-");return X+this.upcomingInput()+` -`+ge+"^"},test_match:function(X,ge){var W,xe,U;if(this.options.backtrack_lexer&&(U={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(U.yylloc.range=this.yylloc.range.slice(0))),xe=X[0].match(/(?:\r\n?|\n).*/g),xe&&(this.yylineno+=xe.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:xe?xe[xe.length-1].length-xe[xe.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+X[0].length},this.yytext+=X[0],this.match+=X[0],this.matches=X,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(X[0].length),this.matched+=X[0],W=this.performAction.call(this,this.yy,this,ge,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),W)return W;if(this._backtrack){for(var Fe in U)this[Fe]=U[Fe];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var X,ge,W,xe;this._more||(this.yytext="",this.match="");for(var U=this._currentRules(),Fe=0;Fege[0].length)){if(ge=W,xe=Fe,this.options.backtrack_lexer){if(X=this.test_match(W,U[Fe]),X!==!1)return X;if(this._backtrack){ge=!1;continue}else return!1}else if(!this.options.flex)break}return ge?(X=this.test_match(ge,U[xe]),X!==!1?X:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var ge=this.next();return ge||this.lex()},begin:function(ge){this.conditionStack.push(ge)},popState:function(){var ge=this.conditionStack.length-1;return ge>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(ge){return ge=this.conditionStack.length-1-Math.abs(ge||0),ge>=0?this.conditionStack[ge]:"INITIAL"},pushState:function(ge){this.begin(ge)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(ge,W,xe,U){switch(xe){case 0:return this.begin("acc_title"),22;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),24;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 10;case 8:break;case 9:return 8;case 10:return 28;case 11:return 48;case 12:return 4;case 13:return this.begin("block"),15;case 14:return 36;case 15:break;case 16:return 37;case 17:return 34;case 18:return 34;case 19:return 38;case 20:break;case 21:return this.popState(),17;case 22:return W.yytext[0];case 23:return 18;case 24:return 19;case 25:return 41;case 26:return 43;case 27:return 43;case 28:return 43;case 29:return 41;case 30:return 41;case 31:return 42;case 32:return 42;case 33:return 42;case 34:return 42;case 35:return 42;case 36:return 43;case 37:return 42;case 38:return 43;case 39:return 44;case 40:return 44;case 41:return 44;case 42:return 44;case 43:return 41;case 44:return 42;case 45:return 43;case 46:return 45;case 47:return 46;case 48:return 47;case 49:return 47;case 50:return 46;case 51:return 46;case 52:return 46;case 53:return 27;case 54:return W.yytext[0];case 55:return 6}},rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"%\r\n\v\b\\]+")/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:,)/i,/^(?:\s+)/i,/^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i,/^(?:(.*?)[~](.*?)*[~])/i,/^(?:[\*A-Za-z_][A-Za-z0-9\-_\[\]\(\)]*)/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:one or zero\b)/i,/^(?:one or more\b)/i,/^(?:one or many\b)/i,/^(?:1\+)/i,/^(?:\|o\b)/i,/^(?:zero or one\b)/i,/^(?:zero or more\b)/i,/^(?:zero or many\b)/i,/^(?:0\+)/i,/^(?:\}o\b)/i,/^(?:many\(0\))/i,/^(?:many\(1\))/i,/^(?:many\b)/i,/^(?:\}\|)/i,/^(?:one\b)/i,/^(?:only one\b)/i,/^(?:1\b)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\s*u\b)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:to\b)/i,/^(?:optionally to\b)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:[A-Za-z_][A-Za-z0-9\-_]*)/i,/^(?:.)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},block:{rules:[14,15,16,17,18,19,20,21,22],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55],inclusive:!0}}};return de}();ae.lexer=ne;function se(){this.yy={}}return se.prototype=ae,ae.Parser=se,new se}();Vme.parser=Vme;const Len=Vme;let B9={},Ume=[];const Men={ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE",MD_PARENT:"MD_PARENT"},Den={NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"},RUe=function(i,s=void 0){return B9[i]===void 0?(B9[i]={attributes:[],alias:s},Xe.info("Added new entity :",i)):B9[i]&&!B9[i].alias&&s&&(B9[i].alias=s,Xe.info(`Add alias '${s}' to entity '${i}'`)),B9[i]},Ien={Cardinality:Men,Identification:Den,getConfig:()=>qt().er,addEntity:RUe,addAttributes:function(i,s){let u=RUe(i),d;for(d=s.length-1;d>=0;d--)u.attributes.push(s[d]),Xe.debug("Added attribute ",s[d].attributeName)},getEntities:()=>B9,addRelationship:function(i,s,u,d){let p={entityA:i,roleA:s,entityB:u,relSpec:d};Ume.push(p),Xe.debug("Added new relationship :",p)},getRelationships:()=>Ume,clear:function(){B9={},Ume=[],Pg()},setAccTitle:Bg,getAccTitle:Cp,setAccDescription:Sp,getAccDescription:_p,setDiagramTitle:cm,getDiagramTitle:Ap},U3={ONLY_ONE_START:"ONLY_ONE_START",ONLY_ONE_END:"ONLY_ONE_END",ZERO_OR_ONE_START:"ZERO_OR_ONE_START",ZERO_OR_ONE_END:"ZERO_OR_ONE_END",ONE_OR_MORE_START:"ONE_OR_MORE_START",ONE_OR_MORE_END:"ONE_OR_MORE_END",ZERO_OR_MORE_START:"ZERO_OR_MORE_START",ZERO_OR_MORE_END:"ZERO_OR_MORE_END",MD_PARENT_END:"MD_PARENT_END",MD_PARENT_START:"MD_PARENT_START"},G3={ERMarkers:U3,insertMarkers:function(i,s){let u;i.append("defs").append("marker").attr("id",U3.MD_PARENT_START).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id",U3.MD_PARENT_END).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id",U3.ONLY_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",s.stroke).attr("fill","none").attr("d","M9,0 L9,18 M15,0 L15,18"),i.append("defs").append("marker").attr("id",U3.ONLY_ONE_END).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",s.stroke).attr("fill","none").attr("d","M3,0 L3,18 M9,0 L9,18"),u=i.append("defs").append("marker").attr("id",U3.ZERO_OR_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),u.append("circle").attr("stroke",s.stroke).attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),u.append("path").attr("stroke",s.stroke).attr("fill","none").attr("d","M9,0 L9,18"),u=i.append("defs").append("marker").attr("id",U3.ZERO_OR_ONE_END).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),u.append("circle").attr("stroke",s.stroke).attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),u.append("path").attr("stroke",s.stroke).attr("fill","none").attr("d","M21,0 L21,18"),i.append("defs").append("marker").attr("id",U3.ONE_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",s.stroke).attr("fill","none").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),i.append("defs").append("marker").attr("id",U3.ONE_OR_MORE_END).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",s.stroke).attr("fill","none").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"),u=i.append("defs").append("marker").attr("id",U3.ZERO_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),u.append("circle").attr("stroke",s.stroke).attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),u.append("path").attr("stroke",s.stroke).attr("fill","none").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18"),u=i.append("defs").append("marker").attr("id",U3.ZERO_OR_MORE_END).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),u.append("circle").attr("stroke",s.stroke).attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),u.append("path").attr("stroke",s.stroke).attr("fill","none").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")}},Oen=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Nen(i){return typeof i=="string"&&Oen.test(i)}const Ud=[];for(let i=0;i<256;++i)Ud.push((i+256).toString(16).slice(1));function Pen(i,s=0){return Ud[i[s+0]]+Ud[i[s+1]]+Ud[i[s+2]]+Ud[i[s+3]]+"-"+Ud[i[s+4]]+Ud[i[s+5]]+"-"+Ud[i[s+6]]+Ud[i[s+7]]+"-"+Ud[i[s+8]]+Ud[i[s+9]]+"-"+Ud[i[s+10]]+Ud[i[s+11]]+Ud[i[s+12]]+Ud[i[s+13]]+Ud[i[s+14]]+Ud[i[s+15]]}function Ben(i){if(!Nen(i))throw TypeError("Invalid UUID");let s;const u=new Uint8Array(16);return u[0]=(s=parseInt(i.slice(0,8),16))>>>24,u[1]=s>>>16&255,u[2]=s>>>8&255,u[3]=s&255,u[4]=(s=parseInt(i.slice(9,13),16))>>>8,u[5]=s&255,u[6]=(s=parseInt(i.slice(14,18),16))>>>8,u[7]=s&255,u[8]=(s=parseInt(i.slice(19,23),16))>>>8,u[9]=s&255,u[10]=(s=parseInt(i.slice(24,36),16))/1099511627776&255,u[11]=s/4294967296&255,u[12]=s>>>24&255,u[13]=s>>>16&255,u[14]=s>>>8&255,u[15]=s&255,u}function Fen(i){i=unescape(encodeURIComponent(i));const s=[];for(let u=0;u>>32-s}function qen(i){const s=[1518500249,1859775393,2400959708,3395469782],u=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof i=="string"){const b=unescape(encodeURIComponent(i));i=[];for(let y=0;y>>0;R=P,P=A,A=Gme(_,30)>>>0,_=T,T=K}u[0]=u[0]+T>>>0,u[1]=u[1]+_>>>0,u[2]=u[2]+A>>>0,u[3]=u[3]+P>>>0,u[4]=u[4]+R>>>0}return[u[0]>>24&255,u[0]>>16&255,u[0]>>8&255,u[0]&255,u[1]>>24&255,u[1]>>16&255,u[1]>>8&255,u[1]&255,u[2]>>24&255,u[2]>>16&255,u[2]>>8&255,u[2]&255,u[3]>>24&255,u[3]>>16&255,u[3]>>8&255,u[3]&255,u[4]>>24&255,u[4]>>16&255,u[4]>>8&255,u[4]&255]}const Hen=$en("v5",80,qen),Ven=/[^\dA-Za-z](\W)*/g;let p1={},IR=new Map;const Uen=function(i){const s=Object.keys(i);for(const u of s)p1[u]=i[u]},Gen=(i,s,u)=>{const d=p1.entityPadding/3,p=p1.entityPadding/3,v=p1.fontSize*.85,b=s.node().getBBox(),y=[];let T=!1,_=!1,A=0,P=0,R=0,F=0,j=b.height+d*2,K=1;u.forEach(pe=>{pe.attributeKeyTypeList!==void 0&&pe.attributeKeyTypeList.length>0&&(T=!0),pe.attributeComment!==void 0&&(_=!0)}),u.forEach(pe=>{const be=`${s.node().id}-attr-${K}`;let ae=0;const ne=qF(pe.attributeType),se=i.append("text").classed("er entityLabel",!0).attr("id",`${be}-type`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",qt().fontFamily).style("font-size",v+"px").text(ne),de=i.append("text").classed("er entityLabel",!0).attr("id",`${be}-name`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",qt().fontFamily).style("font-size",v+"px").text(pe.attributeName),X={};X.tn=se,X.nn=de;const ge=se.node().getBBox(),W=de.node().getBBox();if(A=Math.max(A,ge.width),P=Math.max(P,W.width),ae=Math.max(ge.height,W.height),T){const xe=pe.attributeKeyTypeList!==void 0?pe.attributeKeyTypeList.join(","):"",U=i.append("text").classed("er entityLabel",!0).attr("id",`${be}-key`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",qt().fontFamily).style("font-size",v+"px").text(xe);X.kn=U;const Fe=U.node().getBBox();R=Math.max(R,Fe.width),ae=Math.max(ae,Fe.height)}if(_){const xe=i.append("text").classed("er entityLabel",!0).attr("id",`${be}-comment`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",qt().fontFamily).style("font-size",v+"px").text(pe.attributeComment||"");X.cn=xe;const U=xe.node().getBBox();F=Math.max(F,U.width),ae=Math.max(ae,U.height)}X.height=ae,y.push(X),j+=ae+d*2,K+=1});let ee=4;T&&(ee+=2),_&&(ee+=2);const ie=A+P+R+F,oe={width:Math.max(p1.minEntityWidth,Math.max(b.width+p1.entityPadding*2,ie+p*ee)),height:u.length>0?j:Math.max(p1.minEntityHeight,b.height+p1.entityPadding*2)};if(u.length>0){const pe=Math.max(0,(oe.width-ie-p*ee)/(ee/2));s.attr("transform","translate("+oe.width/2+","+(d+b.height/2)+")");let be=b.height+d*2,ae="attributeBoxOdd";y.forEach(ne=>{const se=be+d+ne.height/2;ne.tn.attr("transform","translate("+p+","+se+")");const de=i.insert("rect","#"+ne.tn.node().id).classed(`er ${ae}`,!0).attr("x",0).attr("y",be).attr("width",A+p*2+pe).attr("height",ne.height+d*2),X=parseFloat(de.attr("x"))+parseFloat(de.attr("width"));ne.nn.attr("transform","translate("+(X+p)+","+se+")");const ge=i.insert("rect","#"+ne.nn.node().id).classed(`er ${ae}`,!0).attr("x",X).attr("y",be).attr("width",P+p*2+pe).attr("height",ne.height+d*2);let W=parseFloat(ge.attr("x"))+parseFloat(ge.attr("width"));if(T){ne.kn.attr("transform","translate("+(W+p)+","+se+")");const xe=i.insert("rect","#"+ne.kn.node().id).classed(`er ${ae}`,!0).attr("x",W).attr("y",be).attr("width",R+p*2+pe).attr("height",ne.height+d*2);W=parseFloat(xe.attr("x"))+parseFloat(xe.attr("width"))}_&&(ne.cn.attr("transform","translate("+(W+p)+","+se+")"),i.insert("rect","#"+ne.cn.node().id).classed(`er ${ae}`,"true").attr("x",W).attr("y",be).attr("width",F+p*2+pe).attr("height",ne.height+d*2)),be+=ne.height+d*2,ae=ae==="attributeBoxOdd"?"attributeBoxEven":"attributeBoxOdd"})}else oe.height=Math.max(p1.minEntityHeight,j),s.attr("transform","translate("+oe.width/2+","+oe.height/2+")");return oe},Ken=function(i,s,u){const d=Object.keys(s);let p;return d.forEach(function(v){const b=Zen(v,"entity");IR.set(v,b);const y=i.append("g").attr("id",b);p=p===void 0?b:p;const T="text-"+b,_=y.append("text").classed("er entityLabel",!0).attr("id",T).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","middle").style("font-family",qt().fontFamily).style("font-size",p1.fontSize+"px").text(s[v].alias??v),{width:A,height:P}=Gen(y,_,s[v].attributes),F=y.insert("rect","#"+T).classed("er entityBox",!0).attr("x",0).attr("y",0).attr("width",A).attr("height",P).node().getBBox();u.setNode(b,{width:F.width,height:F.height,shape:"rect",id:b})}),p},Wen=function(i,s){s.nodes().forEach(function(u){u!==void 0&&s.node(u)!==void 0&&i.select("#"+u).attr("transform","translate("+(s.node(u).x-s.node(u).width/2)+","+(s.node(u).y-s.node(u).height/2)+" )")})},jUe=function(i){return(i.entityA+i.roleA+i.entityB).replace(/\s/g,"")},Yen=function(i,s){return i.forEach(function(u){s.setEdge(IR.get(u.entityA),IR.get(u.entityB),{relationship:u},jUe(u))}),i};let $Ue=0;const Xen=function(i,s,u,d,p){$Ue++;const v=u.edge(IR.get(s.entityA),IR.get(s.entityB),jUe(s)),b=k7().x(function(j){return j.x}).y(function(j){return j.y}).curve(FF),y=i.insert("path","#"+d).classed("er relationshipLine",!0).attr("d",b(v.points)).style("stroke",p1.stroke).style("fill","none");s.relSpec.relType===p.db.Identification.NON_IDENTIFYING&&y.attr("stroke-dasharray","8,8");let T="";switch(p1.arrowMarkerAbsolute&&(T=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,T=T.replace(/\(/g,"\\("),T=T.replace(/\)/g,"\\)")),s.relSpec.cardA){case p.db.Cardinality.ZERO_OR_ONE:y.attr("marker-end","url("+T+"#"+G3.ERMarkers.ZERO_OR_ONE_END+")");break;case p.db.Cardinality.ZERO_OR_MORE:y.attr("marker-end","url("+T+"#"+G3.ERMarkers.ZERO_OR_MORE_END+")");break;case p.db.Cardinality.ONE_OR_MORE:y.attr("marker-end","url("+T+"#"+G3.ERMarkers.ONE_OR_MORE_END+")");break;case p.db.Cardinality.ONLY_ONE:y.attr("marker-end","url("+T+"#"+G3.ERMarkers.ONLY_ONE_END+")");break;case p.db.Cardinality.MD_PARENT:y.attr("marker-end","url("+T+"#"+G3.ERMarkers.MD_PARENT_END+")");break}switch(s.relSpec.cardB){case p.db.Cardinality.ZERO_OR_ONE:y.attr("marker-start","url("+T+"#"+G3.ERMarkers.ZERO_OR_ONE_START+")");break;case p.db.Cardinality.ZERO_OR_MORE:y.attr("marker-start","url("+T+"#"+G3.ERMarkers.ZERO_OR_MORE_START+")");break;case p.db.Cardinality.ONE_OR_MORE:y.attr("marker-start","url("+T+"#"+G3.ERMarkers.ONE_OR_MORE_START+")");break;case p.db.Cardinality.ONLY_ONE:y.attr("marker-start","url("+T+"#"+G3.ERMarkers.ONLY_ONE_START+")");break;case p.db.Cardinality.MD_PARENT:y.attr("marker-start","url("+T+"#"+G3.ERMarkers.MD_PARENT_START+")");break}const _=y.node().getTotalLength(),A=y.node().getPointAtLength(_*.5),P="rel"+$Ue,F=i.append("text").classed("er relationshipLabel",!0).attr("id",P).attr("x",A.x).attr("y",A.y).style("text-anchor","middle").style("dominant-baseline","middle").style("font-family",qt().fontFamily).style("font-size",p1.fontSize+"px").text(s.roleA).node().getBBox();i.insert("rect","#"+P).classed("er relationshipLabelBox",!0).attr("x",A.x-F.width/2).attr("y",A.y-F.height/2).attr("width",F.width).attr("height",F.height)},Qen=function(i,s,u,d){p1=qt().er,Xe.info("Drawing ER diagram");const p=qt().securityLevel;let v;p==="sandbox"&&(v=Ir("#i"+s));const y=Ir(p==="sandbox"?v.nodes()[0].contentDocument.body:"body").select(`[id='${s}']`);G3.insertMarkers(y,p1);let T;T=new B0({multigraph:!0,directed:!0,compound:!1}).setGraph({rankdir:p1.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel(function(){return{}});const _=Ken(y,d.db.getEntities(),T),A=Yen(d.db.getRelationships(),T);qD(T),Wen(y,T),A.forEach(function(K){Xen(y,K,T,_,d)});const P=p1.diagramPadding;Ao.insertTitle(y,"entityTitleText",p1.titleTopMargin,d.db.getDiagramTitle());const R=y.node().getBBox(),F=R.width+P*2,j=R.height+P*2;Ng(y,j,F,p1.useMaxWidth),y.attr("viewBox",`${R.x-P} ${R.y-P} ${F} ${j}`)},Jen="28e9f9db-3c8d-5aa5-9faf-44286ae5937c";function Zen(i="",s=""){const u=i.replace(Ven,"");return`${zUe(s)}${zUe(u)}${Hen(i,Jen)}`}function zUe(i=""){return i.length>0?`${i}-`:""}const etn=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:Len,db:Ien,renderer:{setConf:Uen,draw:Qen},styles:i=>` + fill: ${t.textColor}; + } + + rect.text { + fill: none; + stroke-width: 0; + } + + .icon-shape, .image-shape { + background-color: ${t.edgeLabelBackground}; + p { + background-color: ${t.edgeLabelBackground}; + padding: 2px; + } + rect { + opacity: 0.5; + background-color: ${t.edgeLabelBackground}; + fill: ${t.edgeLabelBackground}; + } + text-align: center; + } +`,"getStyles"),Hie=$Oe});var kT={};vr(kT,{diagram:()=>VOe});var VOe,ET=M(()=>{"use strict";Vt();cL();$ie();Uie();Wie();VOe={parser:Vie,db:sw,renderer:Gie,styles:Hie,init:o(t=>{t.flowchart||(t.flowchart={}),t.layout&&a7({layout:t.layout}),t.flowchart.arrowMarkerAbsolute=t.arrowMarkerAbsolute,a7({flowchart:{arrowMarkerAbsolute:t.arrowMarkerAbsolute}}),sw.clear(),sw.setGen("gen-2")},"init")}});var DD,Kie,Qie=M(()=>{"use strict";DD=function(){var t=o(function(S,A,I,D){for(I=I||{},D=S.length;D--;I[S[D]]=A);return I},"o"),e=[6,8,10,20,22,24,26,27,28],r=[1,10],n=[1,11],i=[1,12],a=[1,13],s=[1,14],l=[1,15],u=[1,21],h=[1,22],f=[1,23],d=[1,24],p=[1,25],m=[6,8,10,13,15,18,19,20,22,24,26,27,28,41,42,43,44,45],g=[1,34],y=[27,28,46,47],v=[41,42,43,44,45],x=[17,34],b=[1,54],w=[1,53],_=[17,34,36,38],T={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,entityName:11,relSpec:12,":":13,role:14,BLOCK_START:15,attributes:16,BLOCK_STOP:17,SQS:18,SQE:19,title:20,title_value:21,acc_title:22,acc_title_value:23,acc_descr:24,acc_descr_value:25,acc_descr_multiline_value:26,ALPHANUM:27,ENTITY_NAME:28,attribute:29,attributeType:30,attributeName:31,attributeKeyTypeList:32,attributeComment:33,ATTRIBUTE_WORD:34,attributeKeyType:35,COMMA:36,ATTRIBUTE_KEY:37,COMMENT:38,cardinality:39,relType:40,ZERO_OR_ONE:41,ZERO_OR_MORE:42,ONE_OR_MORE:43,ONLY_ONE:44,MD_PARENT:45,NON_IDENTIFYING:46,IDENTIFYING:47,WORD:48,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",8:"SPACE",10:"NEWLINE",13:":",15:"BLOCK_START",17:"BLOCK_STOP",18:"SQS",19:"SQE",20:"title",21:"title_value",22:"acc_title",23:"acc_title_value",24:"acc_descr",25:"acc_descr_value",26:"acc_descr_multiline_value",27:"ALPHANUM",28:"ENTITY_NAME",34:"ATTRIBUTE_WORD",36:"COMMA",37:"ATTRIBUTE_KEY",38:"COMMENT",41:"ZERO_OR_ONE",42:"ZERO_OR_MORE",43:"ONE_OR_MORE",44:"ONLY_ONE",45:"MD_PARENT",46:"NON_IDENTIFYING",47:"IDENTIFYING",48:"WORD"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,5],[9,4],[9,3],[9,1],[9,7],[9,6],[9,4],[9,2],[9,2],[9,2],[9,1],[11,1],[11,1],[16,1],[16,2],[29,2],[29,3],[29,3],[29,4],[30,1],[31,1],[32,1],[32,3],[35,1],[33,1],[12,3],[39,1],[39,1],[39,1],[39,1],[39,1],[40,1],[40,1],[14,1],[14,1],[14,1]],performAction:o(function(A,I,D,k,R,C,O){var N=C.length-1;switch(R){case 1:break;case 2:this.$=[];break;case 3:C[N-1].push(C[N]),this.$=C[N-1];break;case 4:case 5:this.$=C[N];break;case 6:case 7:this.$=[];break;case 8:k.addEntity(C[N-4]),k.addEntity(C[N-2]),k.addRelationship(C[N-4],C[N],C[N-2],C[N-3]);break;case 9:k.addEntity(C[N-3]),k.addAttributes(C[N-3],C[N-1]);break;case 10:k.addEntity(C[N-2]);break;case 11:k.addEntity(C[N]);break;case 12:k.addEntity(C[N-6],C[N-4]),k.addAttributes(C[N-6],C[N-1]);break;case 13:k.addEntity(C[N-5],C[N-3]);break;case 14:k.addEntity(C[N-3],C[N-1]);break;case 15:case 16:this.$=C[N].trim(),k.setAccTitle(this.$);break;case 17:case 18:this.$=C[N].trim(),k.setAccDescription(this.$);break;case 19:case 43:this.$=C[N];break;case 20:case 41:case 42:this.$=C[N].replace(/"/g,"");break;case 21:case 29:this.$=[C[N]];break;case 22:C[N].push(C[N-1]),this.$=C[N];break;case 23:this.$={attributeType:C[N-1],attributeName:C[N]};break;case 24:this.$={attributeType:C[N-2],attributeName:C[N-1],attributeKeyTypeList:C[N]};break;case 25:this.$={attributeType:C[N-2],attributeName:C[N-1],attributeComment:C[N]};break;case 26:this.$={attributeType:C[N-3],attributeName:C[N-2],attributeKeyTypeList:C[N-1],attributeComment:C[N]};break;case 27:case 28:case 31:this.$=C[N];break;case 30:C[N-2].push(C[N]),this.$=C[N-2];break;case 32:this.$=C[N].replace(/"/g,"");break;case 33:this.$={cardA:C[N],relType:C[N-1],cardB:C[N-2]};break;case 34:this.$=k.Cardinality.ZERO_OR_ONE;break;case 35:this.$=k.Cardinality.ZERO_OR_MORE;break;case 36:this.$=k.Cardinality.ONE_OR_MORE;break;case 37:this.$=k.Cardinality.ONLY_ONE;break;case 38:this.$=k.Cardinality.MD_PARENT;break;case 39:this.$=k.Identification.NON_IDENTIFYING;break;case 40:this.$=k.Identification.IDENTIFYING;break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:9,20:r,22:n,24:i,26:a,27:s,28:l},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:16,11:9,20:r,22:n,24:i,26:a,27:s,28:l},t(e,[2,5]),t(e,[2,6]),t(e,[2,11],{12:17,39:20,15:[1,18],18:[1,19],41:u,42:h,43:f,44:d,45:p}),{21:[1,26]},{23:[1,27]},{25:[1,28]},t(e,[2,18]),t(m,[2,19]),t(m,[2,20]),t(e,[2,4]),{11:29,27:s,28:l},{16:30,17:[1,31],29:32,30:33,34:g},{11:35,27:s,28:l},{40:36,46:[1,37],47:[1,38]},t(y,[2,34]),t(y,[2,35]),t(y,[2,36]),t(y,[2,37]),t(y,[2,38]),t(e,[2,15]),t(e,[2,16]),t(e,[2,17]),{13:[1,39]},{17:[1,40]},t(e,[2,10]),{16:41,17:[2,21],29:32,30:33,34:g},{31:42,34:[1,43]},{34:[2,27]},{19:[1,44]},{39:45,41:u,42:h,43:f,44:d,45:p},t(v,[2,39]),t(v,[2,40]),{14:46,27:[1,49],28:[1,48],48:[1,47]},t(e,[2,9]),{17:[2,22]},t(x,[2,23],{32:50,33:51,35:52,37:b,38:w}),t([17,34,37,38],[2,28]),t(e,[2,14],{15:[1,55]}),t([27,28],[2,33]),t(e,[2,8]),t(e,[2,41]),t(e,[2,42]),t(e,[2,43]),t(x,[2,24],{33:56,36:[1,57],38:w}),t(x,[2,25]),t(_,[2,29]),t(x,[2,32]),t(_,[2,31]),{16:58,17:[1,59],29:32,30:33,34:g},t(x,[2,26]),{35:60,37:b},{17:[1,61]},t(e,[2,13]),t(_,[2,30]),t(e,[2,12])],defaultActions:{34:[2,27],41:[2,22]},parseError:o(function(A,I){if(I.recoverable)this.trace(A);else{var D=new Error(A);throw D.hash=I,D}},"parseError"),parse:o(function(A){var I=this,D=[0],k=[],R=[null],C=[],O=this.table,N="",P=0,F=0,B=0,G=2,z=1,W=C.slice.call(arguments,1),Z=Object.create(this.lexer),j={yy:{}};for(var oe in this.yy)Object.prototype.hasOwnProperty.call(this.yy,oe)&&(j.yy[oe]=this.yy[oe]);Z.setInput(A,j.yy),j.yy.lexer=Z,j.yy.parser=this,typeof Z.yylloc>"u"&&(Z.yylloc={});var K=Z.yylloc;C.push(K);var ee=Z.options&&Z.options.ranges;typeof j.yy.parseError=="function"?this.parseError=j.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function J(Ie){D.length=D.length-2*Ie,R.length=R.length-Ie,C.length=C.length-Ie}o(J,"popStack");function H(){var Ie;return Ie=k.pop()||Z.lex()||z,typeof Ie!="number"&&(Ie instanceof Array&&(k=Ie,Ie=k.pop()),Ie=I.symbols_[Ie]||Ie),Ie}o(H,"lex");for(var q,Q,ae,ue,ce,te,Ne={},se,ke,Re,Ce;;){if(ae=D[D.length-1],this.defaultActions[ae]?ue=this.defaultActions[ae]:((q===null||typeof q>"u")&&(q=H()),ue=O[ae]&&O[ae][q]),typeof ue>"u"||!ue.length||!ue[0]){var Pe="";Ce=[];for(se in O[ae])this.terminals_[se]&&se>G&&Ce.push("'"+this.terminals_[se]+"'");Z.showPosition?Pe="Parse error on line "+(P+1)+`: +`+Z.showPosition()+` +Expecting `+Ce.join(", ")+", got '"+(this.terminals_[q]||q)+"'":Pe="Parse error on line "+(P+1)+": Unexpected "+(q==z?"end of input":"'"+(this.terminals_[q]||q)+"'"),this.parseError(Pe,{text:Z.match,token:this.terminals_[q]||q,line:Z.yylineno,loc:K,expected:Ce})}if(ue[0]instanceof Array&&ue.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ae+", token: "+q);switch(ue[0]){case 1:D.push(q),R.push(Z.yytext),C.push(Z.yylloc),D.push(ue[1]),q=null,Q?(q=Q,Q=null):(F=Z.yyleng,N=Z.yytext,P=Z.yylineno,K=Z.yylloc,B>0&&B--);break;case 2:if(ke=this.productions_[ue[1]][1],Ne.$=R[R.length-ke],Ne._$={first_line:C[C.length-(ke||1)].first_line,last_line:C[C.length-1].last_line,first_column:C[C.length-(ke||1)].first_column,last_column:C[C.length-1].last_column},ee&&(Ne._$.range=[C[C.length-(ke||1)].range[0],C[C.length-1].range[1]]),te=this.performAction.apply(Ne,[N,F,P,j.yy,ue[1],R,C].concat(W)),typeof te<"u")return te;ke&&(D=D.slice(0,-1*ke*2),R=R.slice(0,-1*ke),C=C.slice(0,-1*ke)),D.push(this.productions_[ue[1]][0]),R.push(Ne.$),C.push(Ne._$),Re=O[D[D.length-2]][D[D.length-1]],D.push(Re);break;case 3:return!0}}return!0},"parse")},E=function(){var S={EOF:1,parseError:o(function(I,D){if(this.yy.parser)this.yy.parser.parseError(I,D);else throw new Error(I)},"parseError"),setInput:o(function(A,I){return this.yy=I||this.yy||{},this._input=A,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var A=this._input[0];this.yytext+=A,this.yyleng++,this.offset++,this.match+=A,this.matched+=A;var I=A.match(/(?:\r\n?|\n).*/g);return I?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),A},"input"),unput:o(function(A){var I=A.length,D=A.split(/(?:\r\n?|\n)/g);this._input=A+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-I),this.offset-=I;var k=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),D.length-1&&(this.yylineno-=D.length-1);var R=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:D?(D.length===k.length?this.yylloc.first_column:0)+k[k.length-D.length].length-D[0].length:this.yylloc.first_column-I},this.options.ranges&&(this.yylloc.range=[R[0],R[0]+this.yyleng-I]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(A){this.unput(this.match.slice(A))},"less"),pastInput:o(function(){var A=this.matched.substr(0,this.matched.length-this.match.length);return(A.length>20?"...":"")+A.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var A=this.match;return A.length<20&&(A+=this._input.substr(0,20-A.length)),(A.substr(0,20)+(A.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var A=this.pastInput(),I=new Array(A.length+1).join("-");return A+this.upcomingInput()+` +`+I+"^"},"showPosition"),test_match:o(function(A,I){var D,k,R;if(this.options.backtrack_lexer&&(R={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(R.yylloc.range=this.yylloc.range.slice(0))),k=A[0].match(/(?:\r\n?|\n).*/g),k&&(this.yylineno+=k.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:k?k[k.length-1].length-k[k.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+A[0].length},this.yytext+=A[0],this.match+=A[0],this.matches=A,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(A[0].length),this.matched+=A[0],D=this.performAction.call(this,this.yy,this,I,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),D)return D;if(this._backtrack){for(var C in R)this[C]=R[C];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var A,I,D,k;this._more||(this.yytext="",this.match="");for(var R=this._currentRules(),C=0;CI[0].length)){if(I=D,k=C,this.options.backtrack_lexer){if(A=this.test_match(D,R[C]),A!==!1)return A;if(this._backtrack){I=!1;continue}else return!1}else if(!this.options.flex)break}return I?(A=this.test_match(I,R[k]),A!==!1?A:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var I=this.next();return I||this.lex()},"lex"),begin:o(function(I){this.conditionStack.push(I)},"begin"),popState:o(function(){var I=this.conditionStack.length-1;return I>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(I){return I=this.conditionStack.length-1-Math.abs(I||0),I>=0?this.conditionStack[I]:"INITIAL"},"topState"),pushState:o(function(I){this.begin(I)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(I,D,k,R){var C=R;switch(k){case 0:return this.begin("acc_title"),22;break;case 1:return this.popState(),"acc_title_value";break;case 2:return this.begin("acc_descr"),24;break;case 3:return this.popState(),"acc_descr_value";break;case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 10;case 8:break;case 9:return 8;case 10:return 28;case 11:return 48;case 12:return 4;case 13:return this.begin("block"),15;break;case 14:return 36;case 15:break;case 16:return 37;case 17:return 34;case 18:return 34;case 19:return 38;case 20:break;case 21:return this.popState(),17;break;case 22:return D.yytext[0];case 23:return 18;case 24:return 19;case 25:return 41;case 26:return 43;case 27:return 43;case 28:return 43;case 29:return 41;case 30:return 41;case 31:return 42;case 32:return 42;case 33:return 42;case 34:return 42;case 35:return 42;case 36:return 43;case 37:return 42;case 38:return 43;case 39:return 44;case 40:return 44;case 41:return 44;case 42:return 44;case 43:return 41;case 44:return 42;case 45:return 43;case 46:return 45;case 47:return 46;case 48:return 47;case 49:return 47;case 50:return 46;case 51:return 46;case 52:return 46;case 53:return 27;case 54:return D.yytext[0];case 55:return 6}},"anonymous"),rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"%\r\n\v\b\\]+")/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:,)/i,/^(?:\s+)/i,/^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i,/^(?:(.*?)[~](.*?)*[~])/i,/^(?:[\*A-Za-z_][A-Za-z0-9\-_\[\]\(\)]*)/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:one or zero\b)/i,/^(?:one or more\b)/i,/^(?:one or many\b)/i,/^(?:1\+)/i,/^(?:\|o\b)/i,/^(?:zero or one\b)/i,/^(?:zero or more\b)/i,/^(?:zero or many\b)/i,/^(?:0\+)/i,/^(?:\}o\b)/i,/^(?:many\(0\))/i,/^(?:many\(1\))/i,/^(?:many\b)/i,/^(?:\}\|)/i,/^(?:one\b)/i,/^(?:only one\b)/i,/^(?:1\b)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\s*u\b)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:to\b)/i,/^(?:optionally to\b)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:[A-Za-z_][A-Za-z0-9\-_]*)/i,/^(?:.)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},block:{rules:[14,15,16,17,18,19,20,21,22],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55],inclusive:!0}}};return S}();T.lexer=E;function L(){this.yy={}}return o(L,"Parser"),L.prototype=T,T.Parser=L,new L}();DD.parser=DD;Kie=DD});var Kd,ND,jOe,KOe,Zie,QOe,ZOe,JOe,ePe,tPe,Jie,eae=M(()=>{"use strict";ut();Vt();Ai();Kd=new Map,ND=[],jOe={ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE",MD_PARENT:"MD_PARENT"},KOe={NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"},Zie=o(function(t,e=void 0){return Kd.has(t)?!Kd.get(t).alias&&e&&(Kd.get(t).alias=e,Y.info(`Add alias '${e}' to entity '${t}'`)):(Kd.set(t,{attributes:[],alias:e}),Y.info("Added new entity :",t)),Kd.get(t)},"addEntity"),QOe=o(()=>Kd,"getEntities"),ZOe=o(function(t,e){let r=Zie(t),n;for(n=e.length-1;n>=0;n--)r.attributes.push(e[n]),Y.debug("Added attribute ",e[n].attributeName)},"addAttributes"),JOe=o(function(t,e,r,n){let i={entityA:t,roleA:e,entityB:r,relSpec:n};ND.push(i),Y.debug("Added new relationship :",i)},"addRelationship"),ePe=o(()=>ND,"getRelationships"),tPe=o(function(){Kd=new Map,ND=[],Lr()},"clear"),Jie={Cardinality:jOe,Identification:KOe,getConfig:o(()=>pe().er,"getConfig"),addEntity:Zie,addAttributes:ZOe,getEntities:QOe,addRelationship:JOe,getRelationships:ePe,clear:tPe,setAccTitle:Mr,getAccTitle:Br,setAccDescription:Fr,getAccDescription:zr,setDiagramTitle:cn,getDiagramTitle:Jr}});var Fl,rPe,Qo,tae=M(()=>{"use strict";Fl={ONLY_ONE_START:"ONLY_ONE_START",ONLY_ONE_END:"ONLY_ONE_END",ZERO_OR_ONE_START:"ZERO_OR_ONE_START",ZERO_OR_ONE_END:"ZERO_OR_ONE_END",ONE_OR_MORE_START:"ONE_OR_MORE_START",ONE_OR_MORE_END:"ONE_OR_MORE_END",ZERO_OR_MORE_START:"ZERO_OR_MORE_START",ZERO_OR_MORE_END:"ZERO_OR_MORE_END",MD_PARENT_END:"MD_PARENT_END",MD_PARENT_START:"MD_PARENT_START"},rPe=o(function(t,e){let r;t.append("defs").append("marker").attr("id",Fl.MD_PARENT_START).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",Fl.MD_PARENT_END).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",Fl.ONLY_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18 M15,0 L15,18"),t.append("defs").append("marker").attr("id",Fl.ONLY_ONE_END).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,0 L3,18 M9,0 L9,18"),r=t.append("defs").append("marker").attr("id",Fl.ZERO_OR_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18"),r=t.append("defs").append("marker").attr("id",Fl.ZERO_OR_ONE_END).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,0 L21,18"),t.append("defs").append("marker").attr("id",Fl.ONE_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),t.append("defs").append("marker").attr("id",Fl.ONE_OR_MORE_END).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"),r=t.append("defs").append("marker").attr("id",Fl.ZERO_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18"),r=t.append("defs").append("marker").attr("id",Fl.ZERO_OR_MORE_END).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},"insertMarkers"),Qo={ERMarkers:Fl,insertMarkers:rPe}});var rae,nae=M(()=>{"use strict";rae=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i});function nPe(t){return typeof t=="string"&&rae.test(t)}var iae,aae=M(()=>{"use strict";nae();o(nPe,"validate");iae=nPe});function sae(t,e=0){return wa[t[e+0]]+wa[t[e+1]]+wa[t[e+2]]+wa[t[e+3]]+"-"+wa[t[e+4]]+wa[t[e+5]]+"-"+wa[t[e+6]]+wa[t[e+7]]+"-"+wa[t[e+8]]+wa[t[e+9]]+"-"+wa[t[e+10]]+wa[t[e+11]]+wa[t[e+12]]+wa[t[e+13]]+wa[t[e+14]]+wa[t[e+15]]}var wa,oae=M(()=>{"use strict";wa=[];for(let t=0;t<256;++t)wa.push((t+256).toString(16).slice(1));o(sae,"unsafeStringify")});function iPe(t){if(!iae(t))throw TypeError("Invalid UUID");let e,r=new Uint8Array(16);return r[0]=(e=parseInt(t.slice(0,8),16))>>>24,r[1]=e>>>16&255,r[2]=e>>>8&255,r[3]=e&255,r[4]=(e=parseInt(t.slice(9,13),16))>>>8,r[5]=e&255,r[6]=(e=parseInt(t.slice(14,18),16))>>>8,r[7]=e&255,r[8]=(e=parseInt(t.slice(19,23),16))>>>8,r[9]=e&255,r[10]=(e=parseInt(t.slice(24,36),16))/1099511627776&255,r[11]=e/4294967296&255,r[12]=e>>>24&255,r[13]=e>>>16&255,r[14]=e>>>8&255,r[15]=e&255,r}var lae,cae=M(()=>{"use strict";aae();o(iPe,"parse");lae=iPe});function aPe(t){t=unescape(encodeURIComponent(t));let e=[];for(let r=0;r{"use strict";oae();cae();o(aPe,"stringToBytes");sPe="6ba7b810-9dad-11d1-80b4-00c04fd430c8",oPe="6ba7b811-9dad-11d1-80b4-00c04fd430c8";o(RD,"v35")});function lPe(t,e,r,n){switch(t){case 0:return e&r^~e&n;case 1:return e^r^n;case 2:return e&r^e&n^r&n;case 3:return e^r^n}}function MD(t,e){return t<>>32-e}function cPe(t){let e=[1518500249,1859775393,2400959708,3395469782],r=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof t=="string"){let s=unescape(encodeURIComponent(t));t=[];for(let l=0;l>>0;p=d,d=f,f=MD(h,30)>>>0,h=u,u=y}r[0]=r[0]+u>>>0,r[1]=r[1]+h>>>0,r[2]=r[2]+f>>>0,r[3]=r[3]+d>>>0,r[4]=r[4]+p>>>0}return[r[0]>>24&255,r[0]>>16&255,r[0]>>8&255,r[0]&255,r[1]>>24&255,r[1]>>16&255,r[1]>>8&255,r[1]&255,r[2]>>24&255,r[2]>>16&255,r[2]>>8&255,r[2]&255,r[3]>>24&255,r[3]>>16&255,r[3]>>8&255,r[3]&255,r[4]>>24&255,r[4]>>16&255,r[4]>>8&255,r[4]&255]}var hae,fae=M(()=>{"use strict";o(lPe,"f");o(MD,"ROTL");o(cPe,"sha1");hae=cPe});var uPe,ID,dae=M(()=>{"use strict";uae();fae();uPe=RD("v5",80,hae),ID=uPe});var pae=M(()=>{"use strict";dae()});function bPe(t="",e=""){let r=t.replace(hPe,"");return`${gae(e)}${gae(r)}${ID(t,xPe)}`}function gae(t=""){return t.length>0?`${t}-`:""}var hPe,$i,e2,fPe,dPe,pPe,mPe,yae,gPe,mae,yPe,vPe,xPe,vae,xae=M(()=>{"use strict";Gs();pr();Qv();Vt();ut();hr();tae();ai();fr();pae();hPe=/[^\dA-Za-z](\W)*/g,$i={},e2=new Map,fPe=o(function(t){let e=Object.keys(t);for(let r of e)$i[r]=t[r]},"setConf"),dPe=o((t,e,r)=>{let n=$i.entityPadding/3,i=$i.entityPadding/3,a=$i.fontSize*.85,s=e.node().getBBox(),l=[],u=!1,h=!1,f=0,d=0,p=0,m=0,g=s.height+n*2,y=1;r.forEach(w=>{w.attributeKeyTypeList!==void 0&&w.attributeKeyTypeList.length>0&&(u=!0),w.attributeComment!==void 0&&(h=!0)}),r.forEach(w=>{let _=`${e.node().id}-attr-${y}`,T=0,E=yu(w.attributeType),L=t.append("text").classed("er entityLabel",!0).attr("id",`${_}-type`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",pe().fontFamily).style("font-size",a+"px").text(E),S=t.append("text").classed("er entityLabel",!0).attr("id",`${_}-name`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",pe().fontFamily).style("font-size",a+"px").text(w.attributeName),A={};A.tn=L,A.nn=S;let I=L.node().getBBox(),D=S.node().getBBox();if(f=Math.max(f,I.width),d=Math.max(d,D.width),T=Math.max(I.height,D.height),u){let k=w.attributeKeyTypeList!==void 0?w.attributeKeyTypeList.join(","):"",R=t.append("text").classed("er entityLabel",!0).attr("id",`${_}-key`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",pe().fontFamily).style("font-size",a+"px").text(k);A.kn=R;let C=R.node().getBBox();p=Math.max(p,C.width),T=Math.max(T,C.height)}if(h){let k=t.append("text").classed("er entityLabel",!0).attr("id",`${_}-comment`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",pe().fontFamily).style("font-size",a+"px").text(w.attributeComment||"");A.cn=k;let R=k.node().getBBox();m=Math.max(m,R.width),T=Math.max(T,R.height)}A.height=T,l.push(A),g+=T+n*2,y+=1});let v=4;u&&(v+=2),h&&(v+=2);let x=f+d+p+m,b={width:Math.max($i.minEntityWidth,Math.max(s.width+$i.entityPadding*2,x+i*v)),height:r.length>0?g:Math.max($i.minEntityHeight,s.height+$i.entityPadding*2)};if(r.length>0){let w=Math.max(0,(b.width-x-i*v)/(v/2));e.attr("transform","translate("+b.width/2+","+(n+s.height/2)+")");let _=s.height+n*2,T="attributeBoxOdd";l.forEach(E=>{let L=_+n+E.height/2;E.tn.attr("transform","translate("+i+","+L+")");let S=t.insert("rect","#"+E.tn.node().id).classed(`er ${T}`,!0).attr("x",0).attr("y",_).attr("width",f+i*2+w).attr("height",E.height+n*2),A=parseFloat(S.attr("x"))+parseFloat(S.attr("width"));E.nn.attr("transform","translate("+(A+i)+","+L+")");let I=t.insert("rect","#"+E.nn.node().id).classed(`er ${T}`,!0).attr("x",A).attr("y",_).attr("width",d+i*2+w).attr("height",E.height+n*2),D=parseFloat(I.attr("x"))+parseFloat(I.attr("width"));if(u){E.kn.attr("transform","translate("+(D+i)+","+L+")");let k=t.insert("rect","#"+E.kn.node().id).classed(`er ${T}`,!0).attr("x",D).attr("y",_).attr("width",p+i*2+w).attr("height",E.height+n*2);D=parseFloat(k.attr("x"))+parseFloat(k.attr("width"))}h&&(E.cn.attr("transform","translate("+(D+i)+","+L+")"),t.insert("rect","#"+E.cn.node().id).classed(`er ${T}`,"true").attr("x",D).attr("y",_).attr("width",m+i*2+w).attr("height",E.height+n*2)),_+=E.height+n*2,T=T==="attributeBoxOdd"?"attributeBoxEven":"attributeBoxOdd"})}else b.height=Math.max($i.minEntityHeight,g),e.attr("transform","translate("+b.width/2+","+b.height/2+")");return b},"drawAttributes"),pPe=o(function(t,e,r){let n=[...e.keys()],i;return n.forEach(function(a){let s=bPe(a,"entity");e2.set(a,s);let l=t.append("g").attr("id",s);i=i===void 0?s:i;let u="text-"+s,h=l.append("text").classed("er entityLabel",!0).attr("id",u).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","middle").style("font-family",pe().fontFamily).style("font-size",$i.fontSize+"px").text(e.get(a).alias??a),{width:f,height:d}=dPe(l,h,e.get(a).attributes),m=l.insert("rect","#"+u).classed("er entityBox",!0).attr("x",0).attr("y",0).attr("width",f).attr("height",d).node().getBBox();r.setNode(s,{width:m.width,height:m.height,shape:"rect",id:s})}),i},"drawEntities"),mPe=o(function(t,e){e.nodes().forEach(function(r){r!==void 0&&e.node(r)!==void 0&&t.select("#"+r).attr("transform","translate("+(e.node(r).x-e.node(r).width/2)+","+(e.node(r).y-e.node(r).height/2)+" )")})},"adjustEntities"),yae=o(function(t){return(t.entityA+t.roleA+t.entityB).replace(/\s/g,"")},"getEdgeName"),gPe=o(function(t,e){return t.forEach(function(r){e.setEdge(e2.get(r.entityA),e2.get(r.entityB),{relationship:r},yae(r))}),t},"addRelationships"),mae=0,yPe=o(function(t,e,r,n,i){mae++;let a=r.edge(e2.get(e.entityA),e2.get(e.entityB),yae(e)),s=ns().x(function(y){return y.x}).y(function(y){return y.y}).curve(Po),l=t.insert("path","#"+n).classed("er relationshipLine",!0).attr("d",s(a.points)).style("stroke",$i.stroke).style("fill","none");e.relSpec.relType===i.db.Identification.NON_IDENTIFYING&&l.attr("stroke-dasharray","8,8");let u="";switch($i.arrowMarkerAbsolute&&(u=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,u=u.replace(/\(/g,"\\("),u=u.replace(/\)/g,"\\)")),e.relSpec.cardA){case i.db.Cardinality.ZERO_OR_ONE:l.attr("marker-end","url("+u+"#"+Qo.ERMarkers.ZERO_OR_ONE_END+")");break;case i.db.Cardinality.ZERO_OR_MORE:l.attr("marker-end","url("+u+"#"+Qo.ERMarkers.ZERO_OR_MORE_END+")");break;case i.db.Cardinality.ONE_OR_MORE:l.attr("marker-end","url("+u+"#"+Qo.ERMarkers.ONE_OR_MORE_END+")");break;case i.db.Cardinality.ONLY_ONE:l.attr("marker-end","url("+u+"#"+Qo.ERMarkers.ONLY_ONE_END+")");break;case i.db.Cardinality.MD_PARENT:l.attr("marker-end","url("+u+"#"+Qo.ERMarkers.MD_PARENT_END+")");break}switch(e.relSpec.cardB){case i.db.Cardinality.ZERO_OR_ONE:l.attr("marker-start","url("+u+"#"+Qo.ERMarkers.ZERO_OR_ONE_START+")");break;case i.db.Cardinality.ZERO_OR_MORE:l.attr("marker-start","url("+u+"#"+Qo.ERMarkers.ZERO_OR_MORE_START+")");break;case i.db.Cardinality.ONE_OR_MORE:l.attr("marker-start","url("+u+"#"+Qo.ERMarkers.ONE_OR_MORE_START+")");break;case i.db.Cardinality.ONLY_ONE:l.attr("marker-start","url("+u+"#"+Qo.ERMarkers.ONLY_ONE_START+")");break;case i.db.Cardinality.MD_PARENT:l.attr("marker-start","url("+u+"#"+Qo.ERMarkers.MD_PARENT_START+")");break}let h=l.node().getTotalLength(),f=l.node().getPointAtLength(h*.5),d="rel"+mae,p=e.roleA.split(/
    /g),m=t.append("text").classed("er relationshipLabel",!0).attr("id",d).attr("x",f.x).attr("y",f.y).style("text-anchor","middle").style("dominant-baseline","middle").style("font-family",pe().fontFamily).style("font-size",$i.fontSize+"px");if(p.length==1)m.text(e.roleA);else{let y=-(p.length-1)*.5;p.forEach((v,x)=>{m.append("tspan").attr("x",f.x).attr("dy",`${x===0?y:1}em`).text(v)})}let g=m.node().getBBox();t.insert("rect","#"+d).classed("er relationshipLabelBox",!0).attr("x",f.x-g.width/2).attr("y",f.y-g.height/2).attr("width",g.width).attr("height",g.height)},"drawRelationshipFromLayout"),vPe=o(function(t,e,r,n){$i=pe().er,Y.info("Drawing ER diagram");let i=pe().securityLevel,a;i==="sandbox"&&(a=Ve("#i"+e));let l=(i==="sandbox"?Ve(a.nodes()[0].contentDocument.body):Ve("body")).select(`[id='${e}']`);Qo.insertMarkers(l,$i);let u;u=new Ir({multigraph:!0,directed:!0,compound:!1}).setGraph({rankdir:$i.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel(function(){return{}});let h=pPe(l,n.db.getEntities(),u),f=gPe(n.db.getRelationships(),u);Gu(u),mPe(l,u),f.forEach(function(y){yPe(l,y,u,h,n)});let d=$i.diagramPadding;Ut.insertTitle(l,"entityTitleText",$i.titleTopMargin,n.db.getDiagramTitle());let p=l.node().getBBox(),m=p.width+d*2,g=p.height+d*2;Zr(l,g,m,$i.useMaxWidth),l.attr("viewBox",`${p.x-d} ${p.y-d} ${m} ${g}`)},"draw"),xPe="28e9f9db-3c8d-5aa5-9faf-44286ae5937c";o(bPe,"generateId");o(gae,"strWithHyphen");vae={setConf:fPe,draw:vPe}});var wPe,bae,wae=M(()=>{"use strict";wPe=o(t=>` .entityBox { - fill: ${i.mainBkg}; - stroke: ${i.nodeBorder}; + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; } .attributeBoxOdd { - fill: ${i.attributeBackgroundColorOdd}; - stroke: ${i.nodeBorder}; + fill: ${t.attributeBackgroundColorOdd}; + stroke: ${t.nodeBorder}; } .attributeBoxEven { - fill: ${i.attributeBackgroundColorEven}; - stroke: ${i.nodeBorder}; + fill: ${t.attributeBackgroundColorEven}; + stroke: ${t.nodeBorder}; } .relationshipLabelBox { - fill: ${i.tertiaryColor}; + fill: ${t.tertiaryColor}; opacity: 0.7; - background-color: ${i.tertiaryColor}; + background-color: ${t.tertiaryColor}; rect { opacity: 0.5; } } .relationshipLine { - stroke: ${i.lineColor}; + stroke: ${t.lineColor}; } .entityTitleText { text-anchor: middle; font-size: 18px; - fill: ${i.textColor}; + fill: ${t.textColor}; } #MD_PARENT_START { fill: #f5f5f5 !important; - stroke: ${i.lineColor} !important; + stroke: ${t.lineColor} !important; stroke-width: 1; } #MD_PARENT_END { fill: #f5f5f5 !important; - stroke: ${i.lineColor} !important; + stroke: ${t.lineColor} !important; stroke-width: 1; } -`}},Symbol.toStringTag,{value:"Module"}));var Kme=function(){var i=function(ae,ne,se,de){for(se=se||{},de=ae.length;de--;se[ae[de]]=ne);return se},s=[1,3],u=[1,6],d=[1,4],p=[1,5],v=[2,5],b=[1,12],y=[5,7,13,19,21,23,24,26,28,31,37,40,47],T=[7,13,19,21,23,24,26,28,31,37,40],_=[7,12,13,19,21,23,24,26,28,31,37,40],A=[7,13,47],P=[1,42],R=[1,41],F=[7,13,29,32,35,38,47],j=[1,55],K=[1,56],ee=[1,57],ie=[7,13,32,35,42,47],oe={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,GG:5,document:6,EOF:7,":":8,DIR:9,options:10,body:11,OPT:12,NL:13,line:14,statement:15,commitStatement:16,mergeStatement:17,cherryPickStatement:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,section:24,branchStatement:25,CHECKOUT:26,ref:27,BRANCH:28,ORDER:29,NUM:30,CHERRY_PICK:31,COMMIT_ID:32,STR:33,PARENT_COMMIT:34,COMMIT_TAG:35,EMPTYSTR:36,MERGE:37,COMMIT_TYPE:38,commitType:39,COMMIT:40,commit_arg:41,COMMIT_MSG:42,NORMAL:43,REVERSE:44,HIGHLIGHT:45,ID:46,";":47,$accept:0,$end:1},terminals_:{2:"error",5:"GG",7:"EOF",8:":",9:"DIR",12:"OPT",13:"NL",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"section",26:"CHECKOUT",28:"BRANCH",29:"ORDER",30:"NUM",31:"CHERRY_PICK",32:"COMMIT_ID",33:"STR",34:"PARENT_COMMIT",35:"COMMIT_TAG",36:"EMPTYSTR",37:"MERGE",38:"COMMIT_TYPE",40:"COMMIT",42:"COMMIT_MSG",43:"NORMAL",44:"REVERSE",45:"HIGHLIGHT",46:"ID",47:";"},productions_:[0,[3,2],[3,3],[3,4],[3,5],[6,0],[6,2],[10,2],[10,1],[11,0],[11,2],[14,2],[14,1],[15,1],[15,1],[15,1],[15,2],[15,2],[15,1],[15,1],[15,1],[15,2],[25,2],[25,4],[18,3],[18,5],[18,5],[18,7],[18,7],[18,5],[18,5],[18,5],[18,7],[18,7],[18,7],[18,7],[17,2],[17,4],[17,4],[17,4],[17,6],[17,6],[17,6],[17,6],[17,6],[17,6],[17,8],[17,8],[17,8],[17,8],[17,8],[17,8],[16,2],[16,3],[16,3],[16,5],[16,5],[16,3],[16,5],[16,5],[16,5],[16,5],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,3],[16,5],[16,5],[16,5],[16,5],[16,5],[16,5],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[41,0],[41,1],[39,1],[39,1],[39,1],[27,1],[27,1],[4,1],[4,1],[4,1]],performAction:function(ne,se,de,X,ge,W,xe){var U=W.length-1;switch(ge){case 2:return W[U];case 3:return W[U-1];case 4:return X.setDirection(W[U-3]),W[U-1];case 6:X.setOptions(W[U-1]),this.$=W[U];break;case 7:W[U-1]+=W[U],this.$=W[U-1];break;case 9:this.$=[];break;case 10:W[U-1].push(W[U]),this.$=W[U-1];break;case 11:this.$=W[U-1];break;case 16:this.$=W[U].trim(),X.setAccTitle(this.$);break;case 17:case 18:this.$=W[U].trim(),X.setAccDescription(this.$);break;case 19:X.addSection(W[U].substr(8)),this.$=W[U].substr(8);break;case 21:X.checkout(W[U]);break;case 22:X.branch(W[U]);break;case 23:X.branch(W[U-2],W[U]);break;case 24:X.cherryPick(W[U],"",void 0);break;case 25:X.cherryPick(W[U-2],"",void 0,W[U]);break;case 26:X.cherryPick(W[U-2],"",W[U]);break;case 27:X.cherryPick(W[U-4],"",W[U],W[U-2]);break;case 28:X.cherryPick(W[U-4],"",W[U-2],W[U]);break;case 29:X.cherryPick(W[U],"",W[U-2]);break;case 30:X.cherryPick(W[U],"","");break;case 31:X.cherryPick(W[U-2],"","");break;case 32:X.cherryPick(W[U-4],"","",W[U-2]);break;case 33:X.cherryPick(W[U-4],"","",W[U]);break;case 34:X.cherryPick(W[U-2],"",W[U-4],W[U]);break;case 35:X.cherryPick(W[U-2],"","",W[U]);break;case 36:X.merge(W[U],"","","");break;case 37:X.merge(W[U-2],W[U],"","");break;case 38:X.merge(W[U-2],"",W[U],"");break;case 39:X.merge(W[U-2],"","",W[U]);break;case 40:X.merge(W[U-4],W[U],"",W[U-2]);break;case 41:X.merge(W[U-4],"",W[U],W[U-2]);break;case 42:X.merge(W[U-4],"",W[U-2],W[U]);break;case 43:X.merge(W[U-4],W[U-2],W[U],"");break;case 44:X.merge(W[U-4],W[U-2],"",W[U]);break;case 45:X.merge(W[U-4],W[U],W[U-2],"");break;case 46:X.merge(W[U-6],W[U-4],W[U-2],W[U]);break;case 47:X.merge(W[U-6],W[U],W[U-4],W[U-2]);break;case 48:X.merge(W[U-6],W[U-4],W[U],W[U-2]);break;case 49:X.merge(W[U-6],W[U-2],W[U-4],W[U]);break;case 50:X.merge(W[U-6],W[U],W[U-2],W[U-4]);break;case 51:X.merge(W[U-6],W[U-2],W[U],W[U-4]);break;case 52:X.commit(W[U]);break;case 53:X.commit("","",X.commitType.NORMAL,W[U]);break;case 54:X.commit("","",W[U],"");break;case 55:X.commit("","",W[U],W[U-2]);break;case 56:X.commit("","",W[U-2],W[U]);break;case 57:X.commit("",W[U],X.commitType.NORMAL,"");break;case 58:X.commit("",W[U-2],X.commitType.NORMAL,W[U]);break;case 59:X.commit("",W[U],X.commitType.NORMAL,W[U-2]);break;case 60:X.commit("",W[U-2],W[U],"");break;case 61:X.commit("",W[U],W[U-2],"");break;case 62:X.commit("",W[U-4],W[U-2],W[U]);break;case 63:X.commit("",W[U-4],W[U],W[U-2]);break;case 64:X.commit("",W[U-2],W[U-4],W[U]);break;case 65:X.commit("",W[U],W[U-4],W[U-2]);break;case 66:X.commit("",W[U],W[U-2],W[U-4]);break;case 67:X.commit("",W[U-2],W[U],W[U-4]);break;case 68:X.commit(W[U],"",X.commitType.NORMAL,"");break;case 69:X.commit(W[U],"",X.commitType.NORMAL,W[U-2]);break;case 70:X.commit(W[U-2],"",X.commitType.NORMAL,W[U]);break;case 71:X.commit(W[U-2],"",W[U],"");break;case 72:X.commit(W[U],"",W[U-2],"");break;case 73:X.commit(W[U],W[U-2],X.commitType.NORMAL,"");break;case 74:X.commit(W[U-2],W[U],X.commitType.NORMAL,"");break;case 75:X.commit(W[U-4],"",W[U-2],W[U]);break;case 76:X.commit(W[U-4],"",W[U],W[U-2]);break;case 77:X.commit(W[U-2],"",W[U-4],W[U]);break;case 78:X.commit(W[U],"",W[U-4],W[U-2]);break;case 79:X.commit(W[U],"",W[U-2],W[U-4]);break;case 80:X.commit(W[U-2],"",W[U],W[U-4]);break;case 81:X.commit(W[U-4],W[U],W[U-2],"");break;case 82:X.commit(W[U-4],W[U-2],W[U],"");break;case 83:X.commit(W[U-2],W[U],W[U-4],"");break;case 84:X.commit(W[U],W[U-2],W[U-4],"");break;case 85:X.commit(W[U],W[U-4],W[U-2],"");break;case 86:X.commit(W[U-2],W[U-4],W[U],"");break;case 87:X.commit(W[U-4],W[U],X.commitType.NORMAL,W[U-2]);break;case 88:X.commit(W[U-4],W[U-2],X.commitType.NORMAL,W[U]);break;case 89:X.commit(W[U-2],W[U],X.commitType.NORMAL,W[U-4]);break;case 90:X.commit(W[U],W[U-2],X.commitType.NORMAL,W[U-4]);break;case 91:X.commit(W[U],W[U-4],X.commitType.NORMAL,W[U-2]);break;case 92:X.commit(W[U-2],W[U-4],X.commitType.NORMAL,W[U]);break;case 93:X.commit(W[U-6],W[U-4],W[U-2],W[U]);break;case 94:X.commit(W[U-6],W[U-4],W[U],W[U-2]);break;case 95:X.commit(W[U-6],W[U-2],W[U-4],W[U]);break;case 96:X.commit(W[U-6],W[U],W[U-4],W[U-2]);break;case 97:X.commit(W[U-6],W[U-2],W[U],W[U-4]);break;case 98:X.commit(W[U-6],W[U],W[U-2],W[U-4]);break;case 99:X.commit(W[U-4],W[U-6],W[U-2],W[U]);break;case 100:X.commit(W[U-4],W[U-6],W[U],W[U-2]);break;case 101:X.commit(W[U-2],W[U-6],W[U-4],W[U]);break;case 102:X.commit(W[U],W[U-6],W[U-4],W[U-2]);break;case 103:X.commit(W[U-2],W[U-6],W[U],W[U-4]);break;case 104:X.commit(W[U],W[U-6],W[U-2],W[U-4]);break;case 105:X.commit(W[U],W[U-4],W[U-2],W[U-6]);break;case 106:X.commit(W[U-2],W[U-4],W[U],W[U-6]);break;case 107:X.commit(W[U],W[U-2],W[U-4],W[U-6]);break;case 108:X.commit(W[U-2],W[U],W[U-4],W[U-6]);break;case 109:X.commit(W[U-4],W[U-2],W[U],W[U-6]);break;case 110:X.commit(W[U-4],W[U],W[U-2],W[U-6]);break;case 111:X.commit(W[U-2],W[U-4],W[U-6],W[U]);break;case 112:X.commit(W[U],W[U-4],W[U-6],W[U-2]);break;case 113:X.commit(W[U-2],W[U],W[U-6],W[U-4]);break;case 114:X.commit(W[U],W[U-2],W[U-6],W[U-4]);break;case 115:X.commit(W[U-4],W[U-2],W[U-6],W[U]);break;case 116:X.commit(W[U-4],W[U],W[U-6],W[U-2]);break;case 117:this.$="";break;case 118:this.$=W[U];break;case 119:this.$=X.commitType.NORMAL;break;case 120:this.$=X.commitType.REVERSE;break;case 121:this.$=X.commitType.HIGHLIGHT;break}},table:[{3:1,4:2,5:s,7:u,13:d,47:p},{1:[3]},{3:7,4:2,5:s,7:u,13:d,47:p},{6:8,7:v,8:[1,9],9:[1,10],10:11,13:b},i(y,[2,124]),i(y,[2,125]),i(y,[2,126]),{1:[2,1]},{7:[1,13]},{6:14,7:v,10:11,13:b},{8:[1,15]},i(T,[2,9],{11:16,12:[1,17]}),i(_,[2,8]),{1:[2,2]},{7:[1,18]},{6:19,7:v,10:11,13:b},{7:[2,6],13:[1,22],14:20,15:21,16:23,17:24,18:25,19:[1,26],21:[1,27],23:[1,28],24:[1,29],25:30,26:[1,31],28:[1,35],31:[1,34],37:[1,33],40:[1,32]},i(_,[2,7]),{1:[2,3]},{7:[1,36]},i(T,[2,10]),{4:37,7:u,13:d,47:p},i(T,[2,12]),i(A,[2,13]),i(A,[2,14]),i(A,[2,15]),{20:[1,38]},{22:[1,39]},i(A,[2,18]),i(A,[2,19]),i(A,[2,20]),{27:40,33:P,46:R},i(A,[2,117],{41:43,32:[1,46],33:[1,48],35:[1,44],38:[1,45],42:[1,47]}),{27:49,33:P,46:R},{32:[1,50],35:[1,51]},{27:52,33:P,46:R},{1:[2,4]},i(T,[2,11]),i(A,[2,16]),i(A,[2,17]),i(A,[2,21]),i(F,[2,122]),i(F,[2,123]),i(A,[2,52]),{33:[1,53]},{39:54,43:j,44:K,45:ee},{33:[1,58]},{33:[1,59]},i(A,[2,118]),i(A,[2,36],{32:[1,60],35:[1,62],38:[1,61]}),{33:[1,63]},{33:[1,64],36:[1,65]},i(A,[2,22],{29:[1,66]}),i(A,[2,53],{32:[1,68],38:[1,67],42:[1,69]}),i(A,[2,54],{32:[1,71],35:[1,70],42:[1,72]}),i(ie,[2,119]),i(ie,[2,120]),i(ie,[2,121]),i(A,[2,57],{35:[1,73],38:[1,74],42:[1,75]}),i(A,[2,68],{32:[1,78],35:[1,76],38:[1,77]}),{33:[1,79]},{39:80,43:j,44:K,45:ee},{33:[1,81]},i(A,[2,24],{34:[1,82],35:[1,83]}),{32:[1,84]},{32:[1,85]},{30:[1,86]},{39:87,43:j,44:K,45:ee},{33:[1,88]},{33:[1,89]},{33:[1,90]},{33:[1,91]},{33:[1,92]},{33:[1,93]},{39:94,43:j,44:K,45:ee},{33:[1,95]},{33:[1,96]},{39:97,43:j,44:K,45:ee},{33:[1,98]},i(A,[2,37],{35:[1,100],38:[1,99]}),i(A,[2,38],{32:[1,102],35:[1,101]}),i(A,[2,39],{32:[1,103],38:[1,104]}),{33:[1,105]},{33:[1,106],36:[1,107]},{33:[1,108]},{33:[1,109]},i(A,[2,23]),i(A,[2,55],{32:[1,110],42:[1,111]}),i(A,[2,59],{38:[1,112],42:[1,113]}),i(A,[2,69],{32:[1,115],38:[1,114]}),i(A,[2,56],{32:[1,116],42:[1,117]}),i(A,[2,61],{35:[1,118],42:[1,119]}),i(A,[2,72],{32:[1,121],35:[1,120]}),i(A,[2,58],{38:[1,122],42:[1,123]}),i(A,[2,60],{35:[1,124],42:[1,125]}),i(A,[2,73],{35:[1,127],38:[1,126]}),i(A,[2,70],{32:[1,129],38:[1,128]}),i(A,[2,71],{32:[1,131],35:[1,130]}),i(A,[2,74],{35:[1,133],38:[1,132]}),{39:134,43:j,44:K,45:ee},{33:[1,135]},{33:[1,136]},{33:[1,137]},{33:[1,138]},{39:139,43:j,44:K,45:ee},i(A,[2,25],{35:[1,140]}),i(A,[2,26],{34:[1,141]}),i(A,[2,31],{34:[1,142]}),i(A,[2,29],{34:[1,143]}),i(A,[2,30],{34:[1,144]}),{33:[1,145]},{33:[1,146]},{39:147,43:j,44:K,45:ee},{33:[1,148]},{39:149,43:j,44:K,45:ee},{33:[1,150]},{33:[1,151]},{33:[1,152]},{33:[1,153]},{33:[1,154]},{33:[1,155]},{33:[1,156]},{39:157,43:j,44:K,45:ee},{33:[1,158]},{33:[1,159]},{33:[1,160]},{39:161,43:j,44:K,45:ee},{33:[1,162]},{39:163,43:j,44:K,45:ee},{33:[1,164]},{33:[1,165]},{33:[1,166]},{39:167,43:j,44:K,45:ee},{33:[1,168]},i(A,[2,43],{35:[1,169]}),i(A,[2,44],{38:[1,170]}),i(A,[2,42],{32:[1,171]}),i(A,[2,45],{35:[1,172]}),i(A,[2,40],{38:[1,173]}),i(A,[2,41],{32:[1,174]}),{33:[1,175],36:[1,176]},{33:[1,177]},{33:[1,178]},{33:[1,179]},{33:[1,180]},i(A,[2,66],{42:[1,181]}),i(A,[2,79],{32:[1,182]}),i(A,[2,67],{42:[1,183]}),i(A,[2,90],{38:[1,184]}),i(A,[2,80],{32:[1,185]}),i(A,[2,89],{38:[1,186]}),i(A,[2,65],{42:[1,187]}),i(A,[2,78],{32:[1,188]}),i(A,[2,64],{42:[1,189]}),i(A,[2,84],{35:[1,190]}),i(A,[2,77],{32:[1,191]}),i(A,[2,83],{35:[1,192]}),i(A,[2,63],{42:[1,193]}),i(A,[2,91],{38:[1,194]}),i(A,[2,62],{42:[1,195]}),i(A,[2,85],{35:[1,196]}),i(A,[2,86],{35:[1,197]}),i(A,[2,92],{38:[1,198]}),i(A,[2,76],{32:[1,199]}),i(A,[2,87],{38:[1,200]}),i(A,[2,75],{32:[1,201]}),i(A,[2,81],{35:[1,202]}),i(A,[2,82],{35:[1,203]}),i(A,[2,88],{38:[1,204]}),{33:[1,205]},{39:206,43:j,44:K,45:ee},{33:[1,207]},{33:[1,208]},{39:209,43:j,44:K,45:ee},{33:[1,210]},i(A,[2,27]),i(A,[2,32]),i(A,[2,28]),i(A,[2,33]),i(A,[2,34]),i(A,[2,35]),{33:[1,211]},{33:[1,212]},{33:[1,213]},{39:214,43:j,44:K,45:ee},{33:[1,215]},{39:216,43:j,44:K,45:ee},{33:[1,217]},{33:[1,218]},{33:[1,219]},{33:[1,220]},{33:[1,221]},{33:[1,222]},{33:[1,223]},{39:224,43:j,44:K,45:ee},{33:[1,225]},{33:[1,226]},{33:[1,227]},{39:228,43:j,44:K,45:ee},{33:[1,229]},{39:230,43:j,44:K,45:ee},{33:[1,231]},{33:[1,232]},{33:[1,233]},{39:234,43:j,44:K,45:ee},i(A,[2,46]),i(A,[2,48]),i(A,[2,47]),i(A,[2,49]),i(A,[2,51]),i(A,[2,50]),i(A,[2,107]),i(A,[2,108]),i(A,[2,105]),i(A,[2,106]),i(A,[2,110]),i(A,[2,109]),i(A,[2,114]),i(A,[2,113]),i(A,[2,112]),i(A,[2,111]),i(A,[2,116]),i(A,[2,115]),i(A,[2,104]),i(A,[2,103]),i(A,[2,102]),i(A,[2,101]),i(A,[2,99]),i(A,[2,100]),i(A,[2,98]),i(A,[2,97]),i(A,[2,96]),i(A,[2,95]),i(A,[2,93]),i(A,[2,94])],defaultActions:{7:[2,1],13:[2,2],18:[2,3],36:[2,4]},parseError:function(ne,se){if(se.recoverable)this.trace(ne);else{var de=new Error(ne);throw de.hash=se,de}},parse:function(ne){var se=this,de=[0],X=[],ge=[null],W=[],xe=this.table,U="",Fe=0,Pe=0,je=2,Ie=1,Se=W.slice.call(arguments,1),Ce=Object.create(this.lexer),ke={yy:{}};for(var Ke in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Ke)&&(ke.yy[Ke]=this.yy[Ke]);Ce.setInput(ne,ke.yy),ke.yy.lexer=Ce,ke.yy.parser=this,typeof Ce.yylloc>"u"&&(Ce.yylloc={});var Ft=Ce.yylloc;W.push(Ft);var Ne=Ce.options&&Ce.options.ranges;typeof ke.yy.parseError=="function"?this.parseError=ke.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function gn(){var ht;return ht=X.pop()||Ce.lex()||Ie,typeof ht!="number"&&(ht instanceof Array&&(X=ht,ht=X.pop()),ht=se.symbols_[ht]||ht),ht}for(var _t,Et,Gt,ln,xt={},Pt,Qe,Dt,kt;;){if(Et=de[de.length-1],this.defaultActions[Et]?Gt=this.defaultActions[Et]:((_t===null||typeof _t>"u")&&(_t=gn()),Gt=xe[Et]&&xe[Et][_t]),typeof Gt>"u"||!Gt.length||!Gt[0]){var On="";kt=[];for(Pt in xe[Et])this.terminals_[Pt]&&Pt>je&&kt.push("'"+this.terminals_[Pt]+"'");Ce.showPosition?On="Parse error on line "+(Fe+1)+`: -`+Ce.showPosition()+` -Expecting `+kt.join(", ")+", got '"+(this.terminals_[_t]||_t)+"'":On="Parse error on line "+(Fe+1)+": Unexpected "+(_t==Ie?"end of input":"'"+(this.terminals_[_t]||_t)+"'"),this.parseError(On,{text:Ce.match,token:this.terminals_[_t]||_t,line:Ce.yylineno,loc:Ft,expected:kt})}if(Gt[0]instanceof Array&&Gt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Et+", token: "+_t);switch(Gt[0]){case 1:de.push(_t),ge.push(Ce.yytext),W.push(Ce.yylloc),de.push(Gt[1]),_t=null,Pe=Ce.yyleng,U=Ce.yytext,Fe=Ce.yylineno,Ft=Ce.yylloc;break;case 2:if(Qe=this.productions_[Gt[1]][1],xt.$=ge[ge.length-Qe],xt._$={first_line:W[W.length-(Qe||1)].first_line,last_line:W[W.length-1].last_line,first_column:W[W.length-(Qe||1)].first_column,last_column:W[W.length-1].last_column},Ne&&(xt._$.range=[W[W.length-(Qe||1)].range[0],W[W.length-1].range[1]]),ln=this.performAction.apply(xt,[U,Pe,Fe,ke.yy,Gt[1],ge,W].concat(Se)),typeof ln<"u")return ln;Qe&&(de=de.slice(0,-1*Qe*2),ge=ge.slice(0,-1*Qe),W=W.slice(0,-1*Qe)),de.push(this.productions_[Gt[1]][0]),ge.push(xt.$),W.push(xt._$),Dt=xe[de[de.length-2]][de[de.length-1]],de.push(Dt);break;case 3:return!0}}return!0}},pe=function(){var ae={EOF:1,parseError:function(se,de){if(this.yy.parser)this.yy.parser.parseError(se,de);else throw new Error(se)},setInput:function(ne,se){return this.yy=se||this.yy||{},this._input=ne,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var ne=this._input[0];this.yytext+=ne,this.yyleng++,this.offset++,this.match+=ne,this.matched+=ne;var se=ne.match(/(?:\r\n?|\n).*/g);return se?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),ne},unput:function(ne){var se=ne.length,de=ne.split(/(?:\r\n?|\n)/g);this._input=ne+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-se),this.offset-=se;var X=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),de.length-1&&(this.yylineno-=de.length-1);var ge=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:de?(de.length===X.length?this.yylloc.first_column:0)+X[X.length-de.length].length-de[0].length:this.yylloc.first_column-se},this.options.ranges&&(this.yylloc.range=[ge[0],ge[0]+this.yyleng-se]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(ne){this.unput(this.match.slice(ne))},pastInput:function(){var ne=this.matched.substr(0,this.matched.length-this.match.length);return(ne.length>20?"...":"")+ne.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var ne=this.match;return ne.length<20&&(ne+=this._input.substr(0,20-ne.length)),(ne.substr(0,20)+(ne.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var ne=this.pastInput(),se=new Array(ne.length+1).join("-");return ne+this.upcomingInput()+` -`+se+"^"},test_match:function(ne,se){var de,X,ge;if(this.options.backtrack_lexer&&(ge={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(ge.yylloc.range=this.yylloc.range.slice(0))),X=ne[0].match(/(?:\r\n?|\n).*/g),X&&(this.yylineno+=X.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:X?X[X.length-1].length-X[X.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+ne[0].length},this.yytext+=ne[0],this.match+=ne[0],this.matches=ne,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(ne[0].length),this.matched+=ne[0],de=this.performAction.call(this,this.yy,this,se,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),de)return de;if(this._backtrack){for(var W in ge)this[W]=ge[W];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var ne,se,de,X;this._more||(this.yytext="",this.match="");for(var ge=this._currentRules(),W=0;Wse[0].length)){if(se=de,X=W,this.options.backtrack_lexer){if(ne=this.test_match(de,ge[W]),ne!==!1)return ne;if(this._backtrack){se=!1;continue}else return!1}else if(!this.options.flex)break}return se?(ne=this.test_match(se,ge[X]),ne!==!1?ne:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var se=this.next();return se||this.lex()},begin:function(se){this.conditionStack.push(se)},popState:function(){var se=this.conditionStack.length-1;return se>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(se){return se=this.conditionStack.length-1-Math.abs(se||0),se>=0?this.conditionStack[se]:"INITIAL"},pushState:function(se){this.begin(se)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(se,de,X,ge){switch(X){case 0:return this.begin("acc_title"),19;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),21;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 13;case 8:break;case 9:break;case 10:return 5;case 11:return 40;case 12:return 32;case 13:return 38;case 14:return 42;case 15:return 43;case 16:return 44;case 17:return 45;case 18:return 35;case 19:return 28;case 20:return 29;case 21:return 37;case 22:return 31;case 23:return 34;case 24:return 26;case 25:return 9;case 26:return 9;case 27:return 8;case 28:return"CARET";case 29:this.begin("options");break;case 30:this.popState();break;case 31:return 12;case 32:return 36;case 33:this.begin("string");break;case 34:this.popState();break;case 35:return 33;case 36:return 30;case 37:return 46;case 38:return 7}},rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gitGraph\b)/i,/^(?:commit(?=\s|$))/i,/^(?:id:)/i,/^(?:type:)/i,/^(?:msg:)/i,/^(?:NORMAL\b)/i,/^(?:REVERSE\b)/i,/^(?:HIGHLIGHT\b)/i,/^(?:tag:)/i,/^(?:branch(?=\s|$))/i,/^(?:order:)/i,/^(?:merge(?=\s|$))/i,/^(?:cherry-pick(?=\s|$))/i,/^(?:parent:)/i,/^(?:checkout(?=\s|$))/i,/^(?:LR\b)/i,/^(?:TB\b)/i,/^(?::)/i,/^(?:\^)/i,/^(?:options\r?\n)/i,/^(?:[ \r\n\t]+end\b)/i,/^(?:[\s\S]+(?=[ \r\n\t]+end))/i,/^(?:["]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[0-9]+(?=\s|$))/i,/^(?:\w([-\./\w]*[-\w])?)/i,/^(?:$)/i,/^(?:\s+)/i],conditions:{acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},options:{rules:[30,31],inclusive:!1},string:{rules:[34,35],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,32,33,36,37,38,39],inclusive:!0}}};return ae}();oe.lexer=pe;function be(){this.yy={}}return be.prototype=oe,oe.Parser=be,new be}();Kme.parser=Kme;const ttn=Kme;let oJ=qt().gitGraph.mainBranchName,ntn=qt().gitGraph.mainBranchOrder,b1={},Np=null,OR={};OR[oJ]={name:oJ,order:ntn};let F0={};F0[oJ]=Np;let sd=oJ,qUe="LR",YC=0;function Wme(){return mje({length:7})}function rtn(i,s){const u=Object.create(null);return i.reduce((d,p)=>{const v=s(p);return u[v]||(u[v]=!0,d.push(p)),d},[])}const itn=function(i){qUe=i};let HUe={};const stn=function(i){Xe.debug("options str",i),i=i&&i.trim(),i=i||"{}";try{HUe=JSON.parse(i)}catch(s){Xe.error("error while parsing gitGraph options",s.message)}},atn=function(){return HUe},otn=function(i,s,u,d){Xe.debug("Entering commit:",i,s,u,d),s=ci.sanitizeText(s,qt()),i=ci.sanitizeText(i,qt()),d=ci.sanitizeText(d,qt());const p={id:s||YC+"-"+Wme(),message:i,seq:YC++,type:u||UD.NORMAL,tag:d||"",parents:Np==null?[]:[Np.id],branch:sd};Np=p,b1[p.id]=p,F0[sd]=p.id,Xe.debug("in pushCommit "+p.id)},ctn=function(i,s){if(i=ci.sanitizeText(i,qt()),F0[i]===void 0)F0[i]=Np!=null?Np.id:null,OR[i]={name:i,order:s?parseInt(s,10):null},VUe(i),Xe.debug("in createBranch");else{let u=new Error('Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout '+i+'")');throw u.hash={text:"branch "+i,token:"branch "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"checkout '+i+'"']},u}},utn=function(i,s,u,d){i=ci.sanitizeText(i,qt()),s=ci.sanitizeText(s,qt());const p=b1[F0[sd]],v=b1[F0[i]];if(sd===i){let y=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw y.hash={text:"merge "+i,token:"merge "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch abc"]},y}else if(p===void 0||!p){let y=new Error('Incorrect usage of "merge". Current branch ('+sd+")has no commits");throw y.hash={text:"merge "+i,token:"merge "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["commit"]},y}else if(F0[i]===void 0){let y=new Error('Incorrect usage of "merge". Branch to be merged ('+i+") does not exist");throw y.hash={text:"merge "+i,token:"merge "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch "+i]},y}else if(v===void 0||!v){let y=new Error('Incorrect usage of "merge". Branch to be merged ('+i+") has no commits");throw y.hash={text:"merge "+i,token:"merge "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"commit"']},y}else if(p===v){let y=new Error('Incorrect usage of "merge". Both branches have same head');throw y.hash={text:"merge "+i,token:"merge "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch abc"]},y}else if(s&&b1[s]!==void 0){let y=new Error('Incorrect usage of "merge". Commit with id:'+s+" already exists, use different custom Id");throw y.hash={text:"merge "+i+s+u+d,token:"merge "+i+s+u+d,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["merge "+i+" "+s+"_UNIQUE "+u+" "+d]},y}const b={id:s||YC+"-"+Wme(),message:"merged branch "+i+" into "+sd,seq:YC++,parents:[Np==null?null:Np.id,F0[i]],branch:sd,type:UD.MERGE,customType:u,customId:!!s,tag:d||""};Np=b,b1[b.id]=b,F0[sd]=b.id,Xe.debug(F0),Xe.debug("in mergeBranch")},ltn=function(i,s,u,d){if(Xe.debug("Entering cherryPick:",i,s,u),i=ci.sanitizeText(i,qt()),s=ci.sanitizeText(s,qt()),u=ci.sanitizeText(u,qt()),d=ci.sanitizeText(d,qt()),!i||b1[i]===void 0){let b=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw b.hash={text:"cherryPick "+i+" "+s,token:"cherryPick "+i+" "+s,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},b}let p=b1[i],v=p.branch;if(d&&!(Array.isArray(p.parents)&&p.parents.includes(d)))throw new Error("Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.");if(p.type===UD.MERGE&&!d)throw new Error("Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.");if(!s||b1[s]===void 0){if(v===sd){let T=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw T.hash={text:"cherryPick "+i+" "+s,token:"cherryPick "+i+" "+s,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},T}const b=b1[F0[sd]];if(b===void 0||!b){let T=new Error('Incorrect usage of "cherry-pick". Current branch ('+sd+")has no commits");throw T.hash={text:"cherryPick "+i+" "+s,token:"cherryPick "+i+" "+s,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},T}const y={id:YC+"-"+Wme(),message:"cherry-picked "+p+" into "+sd,seq:YC++,parents:[Np==null?null:Np.id,p.id],branch:sd,type:UD.CHERRY_PICK,tag:u??`cherry-pick:${p.id}${p.type===UD.MERGE?`|parent:${d}`:""}`};Np=y,b1[y.id]=y,F0[sd]=y.id,Xe.debug(F0),Xe.debug("in cherryPick")}},VUe=function(i){if(i=ci.sanitizeText(i,qt()),F0[i]===void 0){let s=new Error('Trying to checkout branch which is not yet created. (Help try using "branch '+i+'")');throw s.hash={text:"checkout "+i,token:"checkout "+i,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"branch '+i+'"']},s}else{sd=i;const s=F0[sd];Np=b1[s]}};function UUe(i,s,u){const d=i.indexOf(s);d===-1?i.push(u):i.splice(d,1,u)}function GUe(i){const s=i.reduce((p,v)=>p.seq>v.seq?p:v,i[0]);let u="";i.forEach(function(p){p===s?u+=" *":u+=" |"});const d=[u,s.id,s.seq];for(let p in F0)F0[p]===s.id&&d.push(p);if(Xe.debug(d.join(" ")),s.parents&&s.parents.length==2){const p=b1[s.parents[0]];UUe(i,s,p),i.push(b1[s.parents[1]])}else{if(s.parents.length==0)return;{const p=b1[s.parents];UUe(i,s,p)}}i=rtn(i,p=>p.id),GUe(i)}const htn=function(){Xe.debug(b1);const i=KUe()[0];GUe([i])},ftn=function(){b1={},Np=null;let i=qt().gitGraph.mainBranchName,s=qt().gitGraph.mainBranchOrder;F0={},F0[i]=null,OR={},OR[i]={name:i,order:s},sd=i,YC=0,Pg()},dtn=function(){return Object.values(OR).map((s,u)=>s.order!==null?s:{...s,order:parseFloat(`0.${u}`,10)}).sort((s,u)=>s.order-u.order).map(({name:s})=>({name:s}))},gtn=function(){return F0},ptn=function(){return b1},KUe=function(){const i=Object.keys(b1).map(function(s){return b1[s]});return i.forEach(function(s){Xe.debug(s.id)}),i.sort((s,u)=>s.seq-u.seq),i},btn=function(){return sd},mtn=function(){return qUe},vtn=function(){return Np},UD={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},wtn={getConfig:()=>qt().gitGraph,setDirection:itn,setOptions:stn,getOptions:atn,commit:otn,branch:ctn,merge:utn,cherryPick:ltn,checkout:VUe,prettyPrint:htn,clear:ftn,getBranchesAsObjArray:dtn,getBranches:gtn,getCommits:ptn,getCommitsArray:KUe,getCurrentBranch:btn,getDirection:mtn,getHead:vtn,setAccTitle:Bg,getAccTitle:Cp,getAccDescription:_p,setAccDescription:Sp,setDiagramTitle:cm,getDiagramTitle:Ap,commitType:UD};let NR={};const ad={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},XC=8;let H2={},H7={},cJ=[],PR=0,R0="LR";const ytn=()=>{H2={},H7={},NR={},PR=0,cJ=[],R0="LR"},WUe=i=>{const s=document.createElementNS("http://www.w3.org/2000/svg","text");let u=[];typeof i=="string"?u=i.split(/\\n|\n|/gi):Array.isArray(i)?u=i:u=[];for(const d of u){const p=document.createElementNS("http://www.w3.org/2000/svg","tspan");p.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),p.setAttribute("dy","1em"),p.setAttribute("x","0"),p.setAttribute("class","row"),p.textContent=d.trim(),s.appendChild(p)}return s},xtn=i=>{let s="",u=0;return i.forEach(d=>{const p=R0==="TB"?H7[d].y:H7[d].x;p>=u&&(s=d,u=p)}),s||void 0},YUe=(i,s,u)=>{const d=qt().gitGraph,p=i.append("g").attr("class","commit-bullets"),v=i.append("g").attr("class","commit-labels");let b=0;R0==="TB"&&(b=30);const T=Object.keys(s).sort((R,F)=>s[R].seq-s[F].seq),_=d.parallelCommits,A=10,P=40;T.forEach(R=>{const F=s[R];if(_)if(F.parents.length){const ie=xtn(F.parents);b=R0==="TB"?H7[ie].y+P:H7[ie].x+P}else b=0,R0==="TB"&&(b=30);const j=b+A,K=R0==="TB"?j:H2[F.branch].pos,ee=R0==="TB"?H2[F.branch].pos:j;if(u){let ie,oe=F.customType!==void 0&&F.customType!==""?F.customType:F.type;switch(oe){case ad.NORMAL:ie="commit-normal";break;case ad.REVERSE:ie="commit-reverse";break;case ad.HIGHLIGHT:ie="commit-highlight";break;case ad.MERGE:ie="commit-merge";break;case ad.CHERRY_PICK:ie="commit-cherry-pick";break;default:ie="commit-normal"}if(oe===ad.HIGHLIGHT){const pe=p.append("rect");pe.attr("x",ee-10),pe.attr("y",K-10),pe.attr("height",20),pe.attr("width",20),pe.attr("class",`commit ${F.id} commit-highlight${H2[F.branch].index%XC} ${ie}-outer`),p.append("rect").attr("x",ee-6).attr("y",K-6).attr("height",12).attr("width",12).attr("class",`commit ${F.id} commit${H2[F.branch].index%XC} ${ie}-inner`)}else if(oe===ad.CHERRY_PICK)p.append("circle").attr("cx",ee).attr("cy",K).attr("r",10).attr("class",`commit ${F.id} ${ie}`),p.append("circle").attr("cx",ee-3).attr("cy",K+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${F.id} ${ie}`),p.append("circle").attr("cx",ee+3).attr("cy",K+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${F.id} ${ie}`),p.append("line").attr("x1",ee+3).attr("y1",K+1).attr("x2",ee).attr("y2",K-5).attr("stroke","#fff").attr("class",`commit ${F.id} ${ie}`),p.append("line").attr("x1",ee-3).attr("y1",K+1).attr("x2",ee).attr("y2",K-5).attr("stroke","#fff").attr("class",`commit ${F.id} ${ie}`);else{const pe=p.append("circle");if(pe.attr("cx",ee),pe.attr("cy",K),pe.attr("r",F.type===ad.MERGE?9:10),pe.attr("class",`commit ${F.id} commit${H2[F.branch].index%XC}`),oe===ad.MERGE){const be=p.append("circle");be.attr("cx",ee),be.attr("cy",K),be.attr("r",6),be.attr("class",`commit ${ie} ${F.id} commit${H2[F.branch].index%XC}`)}oe===ad.REVERSE&&p.append("path").attr("d",`M ${ee-5},${K-5}L${ee+5},${K+5}M${ee-5},${K+5}L${ee+5},${K-5}`).attr("class",`commit ${ie} ${F.id} commit${H2[F.branch].index%XC}`)}}if(R0==="TB"?H7[F.id]={x:ee,y:j}:H7[F.id]={x:j,y:K},u){if(F.type!==ad.CHERRY_PICK&&(F.customId&&F.type===ad.MERGE||F.type!==ad.MERGE)&&d.showCommitLabel){const pe=v.append("g"),be=pe.insert("rect").attr("class","commit-label-bkg"),ae=pe.append("text").attr("x",b).attr("y",K+25).attr("class","commit-label").text(F.id);let ne=ae.node().getBBox();if(be.attr("x",j-ne.width/2-2).attr("y",K+13.5).attr("width",ne.width+2*2).attr("height",ne.height+2*2),R0==="TB"&&(be.attr("x",ee-(ne.width+4*4+5)).attr("y",K-12),ae.attr("x",ee-(ne.width+4*4)).attr("y",K+ne.height-12)),R0!=="TB"&&ae.attr("x",j-ne.width/2),d.rotateCommitLabel)if(R0==="TB")ae.attr("transform","rotate(-45, "+ee+", "+K+")"),be.attr("transform","rotate(-45, "+ee+", "+K+")");else{let se=-7.5-(ne.width+10)/25*9.5,de=10+ne.width/25*8.5;pe.attr("transform","translate("+se+", "+de+") rotate(-45, "+b+", "+K+")")}}if(F.tag){const pe=v.insert("polygon"),be=v.append("circle"),ae=v.append("text").attr("y",K-16).attr("class","tag-label").text(F.tag);let ne=ae.node().getBBox();ae.attr("x",j-ne.width/2);const se=ne.height/2,de=K-19.2;pe.attr("class","tag-label-bkg").attr("points",` - ${b-ne.width/2-4/2},${de+2} - ${b-ne.width/2-4/2},${de-2} - ${j-ne.width/2-4},${de-se-2} - ${j+ne.width/2+4},${de-se-2} - ${j+ne.width/2+4},${de+se+2} - ${j-ne.width/2-4},${de+se+2}`),be.attr("cx",b-ne.width/2+4/2).attr("cy",de).attr("r",1.5).attr("class","tag-hole"),R0==="TB"&&(pe.attr("class","tag-label-bkg").attr("points",` - ${ee},${b+2} - ${ee},${b-2} - ${ee+A},${b-se-2} - ${ee+A+ne.width+4},${b-se-2} - ${ee+A+ne.width+4},${b+se+2} - ${ee+A},${b+se+2}`).attr("transform","translate(12,12) rotate(45, "+ee+","+b+")"),be.attr("cx",ee+4/2).attr("cy",b).attr("transform","translate(12,12) rotate(45, "+ee+","+b+")"),ae.attr("x",ee+5).attr("y",b+3).attr("transform","translate(14,14) rotate(45, "+ee+","+b+")"))}}b+=P+A,b>PR&&(PR=b)})},ktn=(i,s,u,d,p)=>{const b=(R0==="TB"?u.x_.branch===b,T=_=>_.seq>i.seq&&_.seqT(_)&&y(_))},BR=(i,s,u=0)=>{const d=i+Math.abs(i-s)/2;if(u>5)return d;if(cJ.every(b=>Math.abs(b-d)>=10))return cJ.push(d),d;const v=Math.abs(i-s);return BR(i,s-v/5,u+1)},Etn=(i,s,u,d)=>{const p=H7[s.id],v=H7[u.id],b=ktn(s,u,p,v,d);let y="",T="",_=0,A=0,P=H2[u.branch].index;u.type===ad.MERGE&&s.id!==u.parents[0]&&(P=H2[s.branch].index);let R;if(b){y="A 10 10, 0, 0, 0,",T="A 10 10, 0, 0, 1,",_=10,A=10;const F=p.yv.x&&(y="A 20 20, 0, 0, 0,",T="A 20 20, 0, 0, 1,",_=20,A=20,u.type===ad.MERGE&&s.id!==u.parents[0]?R=`M ${p.x} ${p.y} L ${p.x} ${v.y-_} ${T} ${p.x-A} ${v.y} L ${v.x} ${v.y}`:R=`M ${p.x} ${p.y} L ${v.x+_} ${p.y} ${y} ${v.x} ${p.y+A} L ${v.x} ${v.y}`),p.x===v.x&&(R=`M ${p.x} ${p.y} L ${v.x} ${v.y}`)):(p.yv.y&&(u.type===ad.MERGE&&s.id!==u.parents[0]?R=`M ${p.x} ${p.y} L ${v.x-_} ${p.y} ${y} ${v.x} ${p.y-A} L ${v.x} ${v.y}`:R=`M ${p.x} ${p.y} L ${p.x} ${v.y+_} ${T} ${p.x+A} ${v.y} L ${v.x} ${v.y}`),p.y===v.y&&(R=`M ${p.x} ${p.y} L ${v.x} ${v.y}`));i.append("path").attr("d",R).attr("class","arrow arrow"+P%XC)},Ttn=(i,s)=>{const u=i.append("g").attr("class","commit-arrows");Object.keys(s).forEach(d=>{const p=s[d];p.parents&&p.parents.length>0&&p.parents.forEach(v=>{Etn(u,s[v],p,s)})})},Ctn=(i,s)=>{const u=qt().gitGraph,d=i.append("g");s.forEach((p,v)=>{const b=v%XC,y=H2[p.name].pos,T=d.append("line");T.attr("x1",0),T.attr("y1",y),T.attr("x2",PR),T.attr("y2",y),T.attr("class","branch branch"+b),R0==="TB"&&(T.attr("y1",30),T.attr("x1",y),T.attr("y2",PR),T.attr("x2",y)),cJ.push(y);let _=p.name;const A=WUe(_),P=d.insert("rect"),F=d.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+b);F.node().appendChild(A);let j=A.getBBox();P.attr("class","branchLabelBkg label"+b).attr("rx",4).attr("ry",4).attr("x",-j.width-4-(u.rotateCommitLabel===!0?30:0)).attr("y",-j.height/2+8).attr("width",j.width+18).attr("height",j.height+4),F.attr("transform","translate("+(-j.width-14-(u.rotateCommitLabel===!0?30:0))+", "+(y-j.height/2-1)+")"),R0==="TB"&&(P.attr("x",y-j.width/2-10).attr("y",0),F.attr("transform","translate("+(y-j.width/2-5)+", 0)")),R0!=="TB"&&P.attr("transform","translate(-19, "+(y-j.height/2)+")")})},Stn=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:ttn,db:wtn,renderer:{draw:function(i,s,u,d){ytn();const p=qt(),v=p.gitGraph;Xe.debug("in gitgraph renderer",i+` -`,"id:",s,u),NR=d.db.getCommits();const b=d.db.getBranchesAsObjArray();R0=d.db.getDirection();const y=Ir(`[id="${s}"]`);let T=0;b.forEach((_,A)=>{const P=WUe(_.name),R=y.append("g"),F=R.insert("g").attr("class","branchLabel"),j=F.insert("g").attr("class","label branch-label");j.node().appendChild(P);let K=P.getBBox();H2[_.name]={pos:T,index:A},T+=50+(v.rotateCommitLabel?40:0)+(R0==="TB"?K.width/2:0),j.remove(),F.remove(),R.remove()}),YUe(y,NR,!1),v.showBranches&&Ctn(y,b),Ttn(y,NR),YUe(y,NR,!0),Ao.insertTitle(y,"gitTitleText",v.titleTopMargin,d.db.getDiagramTitle()),e$e(void 0,y,v.diagramPadding,v.useMaxWidth??p.useMaxWidth)}},styles:i=>` +`,"getStyles"),bae=wPe});var Tae={};vr(Tae,{diagram:()=>TPe});var TPe,kae=M(()=>{"use strict";Qie();eae();xae();wae();TPe={parser:Kie,db:Jie,renderer:vae,styles:bae}});function ri(t){return typeof t=="object"&&t!==null&&typeof t.$type=="string"}function Ta(t){return typeof t=="object"&&t!==null&&typeof t.$refText=="string"}function OD(t){return typeof t=="object"&&t!==null&&typeof t.name=="string"&&typeof t.type=="string"&&typeof t.path=="string"}function Zd(t){return typeof t=="object"&&t!==null&&ri(t.container)&&Ta(t.reference)&&typeof t.message=="string"}function ho(t){return typeof t=="object"&&t!==null&&Array.isArray(t.content)}function cf(t){return typeof t=="object"&&t!==null&&typeof t.tokenType=="object"}function t2(t){return ho(t)&&typeof t.fullText=="string"}var Qd,Zo=M(()=>{"use strict";o(ri,"isAstNode");o(Ta,"isReference");o(OD,"isAstNodeDescription");o(Zd,"isLinkingError");Qd=class{static{o(this,"AbstractAstReflection")}constructor(){this.subtypes={},this.allSubtypes={}}isInstance(e,r){return ri(e)&&this.isSubtype(e.$type,r)}isSubtype(e,r){if(e===r)return!0;let n=this.subtypes[e];n||(n=this.subtypes[e]={});let i=n[r];if(i!==void 0)return i;{let a=this.computeIsSubtype(e,r);return n[r]=a,a}}getAllSubTypes(e){let r=this.allSubtypes[e];if(r)return r;{let n=this.getAllTypes(),i=[];for(let a of n)this.isSubtype(a,e)&&i.push(a);return this.allSubtypes[e]=i,i}}};o(ho,"isCompositeCstNode");o(cf,"isLeafCstNode");o(t2,"isRootCstNode")});function CPe(t){return typeof t=="string"?t:typeof t>"u"?"undefined":typeof t.toString=="function"?t.toString():Object.prototype.toString.call(t)}function ST(t){return!!t&&typeof t[Symbol.iterator]=="function"}function tn(...t){if(t.length===1){let e=t[0];if(e instanceof fo)return e;if(ST(e))return new fo(()=>e[Symbol.iterator](),r=>r.next());if(typeof e.length=="number")return new fo(()=>({index:0}),r=>r.index1?new fo(()=>({collIndex:0,arrIndex:0}),e=>{do{if(e.iterator){let r=e.iterator.next();if(!r.done)return r;e.iterator=void 0}if(e.array){if(e.arrIndex{"use strict";fo=class t{static{o(this,"StreamImpl")}constructor(e,r){this.startFn=e,this.nextFn=r}iterator(){let e={state:this.startFn(),next:o(()=>this.nextFn(e.state),"next"),[Symbol.iterator]:()=>e};return e}[Symbol.iterator](){return this.iterator()}isEmpty(){return!!this.iterator().next().done}count(){let e=this.iterator(),r=0,n=e.next();for(;!n.done;)r++,n=e.next();return r}toArray(){let e=[],r=this.iterator(),n;do n=r.next(),n.value!==void 0&&e.push(n.value);while(!n.done);return e}toSet(){return new Set(this)}toMap(e,r){let n=this.map(i=>[e?e(i):i,r?r(i):i]);return new Map(n)}toString(){return this.join()}concat(e){let r=e[Symbol.iterator]();return new t(()=>({first:this.startFn(),firstDone:!1}),n=>{let i;if(!n.firstDone){do if(i=this.nextFn(n.first),!i.done)return i;while(!i.done);n.firstDone=!0}do if(i=r.next(),!i.done)return i;while(!i.done);return ss})}join(e=","){let r=this.iterator(),n="",i,a=!1;do i=r.next(),i.done||(a&&(n+=e),n+=CPe(i.value)),a=!0;while(!i.done);return n}indexOf(e,r=0){let n=this.iterator(),i=0,a=n.next();for(;!a.done;){if(i>=r&&a.value===e)return i;a=n.next(),i++}return-1}every(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(!e(n.value))return!1;n=r.next()}return!0}some(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(e(n.value))return!0;n=r.next()}return!1}forEach(e){let r=this.iterator(),n=0,i=r.next();for(;!i.done;)e(i.value,n),i=r.next(),n++}map(e){return new t(this.startFn,r=>{let{done:n,value:i}=this.nextFn(r);return n?ss:{done:!1,value:e(i)}})}filter(e){return new t(this.startFn,r=>{let n;do if(n=this.nextFn(r),!n.done&&e(n.value))return n;while(!n.done);return ss})}nonNullable(){return this.filter(e=>e!=null)}reduce(e,r){let n=this.iterator(),i=r,a=n.next();for(;!a.done;)i===void 0?i=a.value:i=e(i,a.value),a=n.next();return i}reduceRight(e,r){return this.recursiveReduce(this.iterator(),e,r)}recursiveReduce(e,r,n){let i=e.next();if(i.done)return n;let a=this.recursiveReduce(e,r,n);return a===void 0?i.value:r(a,i.value)}find(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(e(n.value))return n.value;n=r.next()}}findIndex(e){let r=this.iterator(),n=0,i=r.next();for(;!i.done;){if(e(i.value))return n;i=r.next(),n++}return-1}includes(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(n.value===e)return!0;n=r.next()}return!1}flatMap(e){return new t(()=>({this:this.startFn()}),r=>{do{if(r.iterator){let a=r.iterator.next();if(a.done)r.iterator=void 0;else return a}let{done:n,value:i}=this.nextFn(r.this);if(!n){let a=e(i);if(ST(a))r.iterator=a[Symbol.iterator]();else return{done:!1,value:a}}}while(r.iterator);return ss})}flat(e){if(e===void 0&&(e=1),e<=0)return this;let r=e>1?this.flat(e-1):this;return new t(()=>({this:r.startFn()}),n=>{do{if(n.iterator){let s=n.iterator.next();if(s.done)n.iterator=void 0;else return s}let{done:i,value:a}=r.nextFn(n.this);if(!i)if(ST(a))n.iterator=a[Symbol.iterator]();else return{done:!1,value:a}}while(n.iterator);return ss})}head(){let r=this.iterator().next();if(!r.done)return r.value}tail(e=1){return new t(()=>{let r=this.startFn();for(let n=0;n({size:0,state:this.startFn()}),r=>(r.size++,r.size>e?ss:this.nextFn(r.state)))}distinct(e){let r=new Set;return this.filter(n=>{let i=e?e(n):n;return r.has(i)?!1:(r.add(i),!0)})}exclude(e,r){let n=new Set;for(let i of e){let a=r?r(i):i;n.add(a)}return this.filter(i=>{let a=r?r(i):i;return!n.has(a)})}};o(CPe,"toString");o(ST,"isIterable");r2=new fo(()=>{},()=>ss),ss=Object.freeze({done:!0,value:void 0});o(tn,"stream");Pc=class extends fo{static{o(this,"TreeStreamImpl")}constructor(e,r,n){super(()=>({iterators:n?.includeRoot?[[e][Symbol.iterator]()]:[r(e)[Symbol.iterator]()],pruned:!1}),i=>{for(i.pruned&&(i.iterators.pop(),i.pruned=!1);i.iterators.length>0;){let s=i.iterators[i.iterators.length-1].next();if(s.done)i.iterators.pop();else return i.iterators.push(r(s.value)[Symbol.iterator]()),s}return ss})}iterator(){let e={state:this.startFn(),next:o(()=>this.nextFn(e.state),"next"),prune:o(()=>{e.state.pruned=!0},"prune"),[Symbol.iterator]:()=>e};return e}};(function(t){function e(a){return a.reduce((s,l)=>s+l,0)}o(e,"sum"),t.sum=e;function r(a){return a.reduce((s,l)=>s*l,0)}o(r,"product"),t.product=r;function n(a){return a.reduce((s,l)=>Math.min(s,l))}o(n,"min"),t.min=n;function i(a){return a.reduce((s,l)=>Math.max(s,l))}o(i,"max"),t.max=i})(Jm||(Jm={}))});var AT={};vr(AT,{DefaultNameRegexp:()=>CT,RangeComparison:()=>$u,compareRange:()=>Aae,findCommentNode:()=>zD,findDeclarationNodeAtOffset:()=>_Pe,findLeafNodeAtOffset:()=>GD,findLeafNodeBeforeOffset:()=>_ae,flattenCst:()=>APe,getInteriorNodes:()=>NPe,getNextNode:()=>LPe,getPreviousNode:()=>Dae,getStartlineNode:()=>DPe,inRange:()=>FD,isChildNode:()=>BD,isCommentNode:()=>PD,streamCst:()=>Jd,toDocumentSegment:()=>e0,tokenToRange:()=>eg});function Jd(t){return new Pc(t,e=>ho(e)?e.content:[],{includeRoot:!0})}function APe(t){return Jd(t).filter(cf)}function BD(t,e){for(;t.container;)if(t=t.container,t===e)return!0;return!1}function eg(t){return{start:{character:t.startColumn-1,line:t.startLine-1},end:{character:t.endColumn,line:t.endLine-1}}}function e0(t){if(!t)return;let{offset:e,end:r,range:n}=t;return{range:n,offset:e,end:r,length:r-e}}function Aae(t,e){if(t.end.linee.end.line||t.start.line===e.end.line&&t.start.character>e.end.character)return $u.After;let r=t.start.line>e.start.line||t.start.line===e.start.line&&t.start.character>=e.start.character,n=t.end.line$u.After}function _Pe(t,e,r=CT){if(t){if(e>0){let n=e-t.offset,i=t.text.charAt(n);r.test(i)||e--}return GD(t,e)}}function zD(t,e){if(t){let r=Dae(t,!0);if(r&&PD(r,e))return r;if(t2(t)){let n=t.content.findIndex(i=>!i.hidden);for(let i=n-1;i>=0;i--){let a=t.content[i];if(PD(a,e))return a}}}}function PD(t,e){return cf(t)&&e.includes(t.tokenType.name)}function GD(t,e){if(cf(t))return t;if(ho(t)){let r=Lae(t,e,!1);if(r)return GD(r,e)}}function _ae(t,e){if(cf(t))return t;if(ho(t)){let r=Lae(t,e,!0);if(r)return _ae(r,e)}}function Lae(t,e,r){let n=0,i=t.content.length-1,a;for(;n<=i;){let s=Math.floor((n+i)/2),l=t.content[s];if(l.offset<=e&&l.end>e)return l;l.end<=e?(a=r?l:void 0,n=s+1):i=s-1}return a}function Dae(t,e=!0){for(;t.container;){let r=t.container,n=r.content.indexOf(t);for(;n>0;){n--;let i=r.content[n];if(e||!i.hidden)return i}t=r}}function LPe(t,e=!0){for(;t.container;){let r=t.container,n=r.content.indexOf(t),i=r.content.length-1;for(;n{"use strict";Zo();$s();o(Jd,"streamCst");o(APe,"flattenCst");o(BD,"isChildNode");o(eg,"tokenToRange");o(e0,"toDocumentSegment");(function(t){t[t.Before=0]="Before",t[t.After=1]="After",t[t.OverlapFront=2]="OverlapFront",t[t.OverlapBack=3]="OverlapBack",t[t.Inside=4]="Inside"})($u||($u={}));o(Aae,"compareRange");o(FD,"inRange");CT=/^[\w\p{L}]$/u;o(_Pe,"findDeclarationNodeAtOffset");o(zD,"findCommentNode");o(PD,"isCommentNode");o(GD,"findLeafNodeAtOffset");o(_ae,"findLeafNodeBeforeOffset");o(Lae,"binarySearch");o(Dae,"getPreviousNode");o(LPe,"getNextNode");o(DPe,"getStartlineNode");o(NPe,"getInteriorNodes");o(RPe,"getCommonParent");o(Cae,"getParentChain")});function uf(t){throw new Error("Error! The input value was not handled.")}var t0,_T=M(()=>{"use strict";t0=class extends Error{static{o(this,"ErrorWithLocation")}constructor(e,r){super(e?`${r} at ${e.range.start.line}:${e.range.start.character}`:r)}};o(uf,"assertUnreachable")});var o2={};vr(o2,{AbstractElement:()=>VD,AbstractRule:()=>n2,AbstractType:()=>i2,Action:()=>gN,Alternatives:()=>yN,ArrayLiteral:()=>UD,ArrayType:()=>HD,Assignment:()=>vN,BooleanLiteral:()=>YD,CharacterRange:()=>xN,Condition:()=>LT,Conjunction:()=>XD,CrossReference:()=>wN,Disjunction:()=>KD,EndOfFile:()=>TN,Grammar:()=>ZD,GrammarImport:()=>Rae,Group:()=>EN,InferredType:()=>JD,Interface:()=>eN,Keyword:()=>SN,LangiumGrammarAstReflection:()=>tg,LangiumGrammarTerminals:()=>MPe,NamedArgument:()=>Mae,NegatedToken:()=>CN,Negation:()=>tN,NumberLiteral:()=>nN,Parameter:()=>iN,ParameterReference:()=>aN,ParserRule:()=>oN,ReferenceType:()=>lN,RegexToken:()=>_N,ReturnType:()=>Iae,RuleCall:()=>DN,SimpleType:()=>hN,StringLiteral:()=>fN,TerminalAlternatives:()=>NN,TerminalGroup:()=>MN,TerminalRule:()=>NT,TerminalRuleCall:()=>ON,Type:()=>dN,TypeAttribute:()=>Oae,TypeDefinition:()=>$D,UnionType:()=>pN,UnorderedGroup:()=>PN,UntilToken:()=>BN,ValueLiteral:()=>DT,Wildcard:()=>zN,isAbstractElement:()=>a2,isAbstractRule:()=>IPe,isAbstractType:()=>OPe,isAction:()=>Vu,isAlternatives:()=>OT,isArrayLiteral:()=>GPe,isArrayType:()=>WD,isAssignment:()=>Gl,isBooleanLiteral:()=>qD,isCharacterRange:()=>bN,isCondition:()=>PPe,isConjunction:()=>jD,isCrossReference:()=>r0,isDisjunction:()=>QD,isEndOfFile:()=>kN,isFeatureName:()=>BPe,isGrammar:()=>$Pe,isGrammarImport:()=>VPe,isGroup:()=>hf,isInferredType:()=>RT,isInterface:()=>MT,isKeyword:()=>el,isNamedArgument:()=>UPe,isNegatedToken:()=>AN,isNegation:()=>rN,isNumberLiteral:()=>HPe,isParameter:()=>WPe,isParameterReference:()=>sN,isParserRule:()=>Ga,isPrimitiveType:()=>Nae,isReferenceType:()=>cN,isRegexToken:()=>LN,isReturnType:()=>uN,isRuleCall:()=>$l,isSimpleType:()=>IT,isStringLiteral:()=>YPe,isTerminalAlternatives:()=>RN,isTerminalGroup:()=>IN,isTerminalRule:()=>Jo,isTerminalRuleCall:()=>PT,isType:()=>s2,isTypeAttribute:()=>qPe,isTypeDefinition:()=>FPe,isUnionType:()=>mN,isUnorderedGroup:()=>BT,isUntilToken:()=>FN,isValueLiteral:()=>zPe,isWildcard:()=>GN,reflection:()=>lr});function IPe(t){return lr.isInstance(t,n2)}function OPe(t){return lr.isInstance(t,i2)}function PPe(t){return lr.isInstance(t,LT)}function BPe(t){return Nae(t)||t==="current"||t==="entry"||t==="extends"||t==="false"||t==="fragment"||t==="grammar"||t==="hidden"||t==="import"||t==="interface"||t==="returns"||t==="terminal"||t==="true"||t==="type"||t==="infer"||t==="infers"||t==="with"||typeof t=="string"&&/\^?[_a-zA-Z][\w_]*/.test(t)}function Nae(t){return t==="string"||t==="number"||t==="boolean"||t==="Date"||t==="bigint"}function FPe(t){return lr.isInstance(t,$D)}function zPe(t){return lr.isInstance(t,DT)}function a2(t){return lr.isInstance(t,VD)}function GPe(t){return lr.isInstance(t,UD)}function WD(t){return lr.isInstance(t,HD)}function qD(t){return lr.isInstance(t,YD)}function jD(t){return lr.isInstance(t,XD)}function QD(t){return lr.isInstance(t,KD)}function $Pe(t){return lr.isInstance(t,ZD)}function VPe(t){return lr.isInstance(t,Rae)}function RT(t){return lr.isInstance(t,JD)}function MT(t){return lr.isInstance(t,eN)}function UPe(t){return lr.isInstance(t,Mae)}function rN(t){return lr.isInstance(t,tN)}function HPe(t){return lr.isInstance(t,nN)}function WPe(t){return lr.isInstance(t,iN)}function sN(t){return lr.isInstance(t,aN)}function Ga(t){return lr.isInstance(t,oN)}function cN(t){return lr.isInstance(t,lN)}function uN(t){return lr.isInstance(t,Iae)}function IT(t){return lr.isInstance(t,hN)}function YPe(t){return lr.isInstance(t,fN)}function Jo(t){return lr.isInstance(t,NT)}function s2(t){return lr.isInstance(t,dN)}function qPe(t){return lr.isInstance(t,Oae)}function mN(t){return lr.isInstance(t,pN)}function Vu(t){return lr.isInstance(t,gN)}function OT(t){return lr.isInstance(t,yN)}function Gl(t){return lr.isInstance(t,vN)}function bN(t){return lr.isInstance(t,xN)}function r0(t){return lr.isInstance(t,wN)}function kN(t){return lr.isInstance(t,TN)}function hf(t){return lr.isInstance(t,EN)}function el(t){return lr.isInstance(t,SN)}function AN(t){return lr.isInstance(t,CN)}function LN(t){return lr.isInstance(t,_N)}function $l(t){return lr.isInstance(t,DN)}function RN(t){return lr.isInstance(t,NN)}function IN(t){return lr.isInstance(t,MN)}function PT(t){return lr.isInstance(t,ON)}function BT(t){return lr.isInstance(t,PN)}function FN(t){return lr.isInstance(t,BN)}function GN(t){return lr.isInstance(t,zN)}var MPe,n2,i2,LT,$D,DT,VD,UD,HD,YD,XD,KD,ZD,Rae,JD,eN,Mae,tN,nN,iN,aN,oN,lN,Iae,hN,fN,NT,dN,Oae,pN,gN,yN,vN,xN,wN,TN,EN,SN,CN,_N,DN,NN,MN,ON,PN,BN,zN,tg,lr,Bc=M(()=>{"use strict";Zo();MPe={ID:/\^?[_a-zA-Z][\w_]*/,STRING:/"(\\.|[^"\\])*"|'(\\.|[^'\\])*'/,NUMBER:/NaN|-?((\d*\.\d+|\d+)([Ee][+-]?\d+)?|Infinity)/,RegexLiteral:/\/(?![*+?])(?:[^\r\n\[/\\]|\\.|\[(?:[^\r\n\]\\]|\\.)*\])+\/[a-z]*/,WS:/\s+/,ML_COMMENT:/\/\*[\s\S]*?\*\//,SL_COMMENT:/\/\/[^\n\r]*/},n2="AbstractRule";o(IPe,"isAbstractRule");i2="AbstractType";o(OPe,"isAbstractType");LT="Condition";o(PPe,"isCondition");o(BPe,"isFeatureName");o(Nae,"isPrimitiveType");$D="TypeDefinition";o(FPe,"isTypeDefinition");DT="ValueLiteral";o(zPe,"isValueLiteral");VD="AbstractElement";o(a2,"isAbstractElement");UD="ArrayLiteral";o(GPe,"isArrayLiteral");HD="ArrayType";o(WD,"isArrayType");YD="BooleanLiteral";o(qD,"isBooleanLiteral");XD="Conjunction";o(jD,"isConjunction");KD="Disjunction";o(QD,"isDisjunction");ZD="Grammar";o($Pe,"isGrammar");Rae="GrammarImport";o(VPe,"isGrammarImport");JD="InferredType";o(RT,"isInferredType");eN="Interface";o(MT,"isInterface");Mae="NamedArgument";o(UPe,"isNamedArgument");tN="Negation";o(rN,"isNegation");nN="NumberLiteral";o(HPe,"isNumberLiteral");iN="Parameter";o(WPe,"isParameter");aN="ParameterReference";o(sN,"isParameterReference");oN="ParserRule";o(Ga,"isParserRule");lN="ReferenceType";o(cN,"isReferenceType");Iae="ReturnType";o(uN,"isReturnType");hN="SimpleType";o(IT,"isSimpleType");fN="StringLiteral";o(YPe,"isStringLiteral");NT="TerminalRule";o(Jo,"isTerminalRule");dN="Type";o(s2,"isType");Oae="TypeAttribute";o(qPe,"isTypeAttribute");pN="UnionType";o(mN,"isUnionType");gN="Action";o(Vu,"isAction");yN="Alternatives";o(OT,"isAlternatives");vN="Assignment";o(Gl,"isAssignment");xN="CharacterRange";o(bN,"isCharacterRange");wN="CrossReference";o(r0,"isCrossReference");TN="EndOfFile";o(kN,"isEndOfFile");EN="Group";o(hf,"isGroup");SN="Keyword";o(el,"isKeyword");CN="NegatedToken";o(AN,"isNegatedToken");_N="RegexToken";o(LN,"isRegexToken");DN="RuleCall";o($l,"isRuleCall");NN="TerminalAlternatives";o(RN,"isTerminalAlternatives");MN="TerminalGroup";o(IN,"isTerminalGroup");ON="TerminalRuleCall";o(PT,"isTerminalRuleCall");PN="UnorderedGroup";o(BT,"isUnorderedGroup");BN="UntilToken";o(FN,"isUntilToken");zN="Wildcard";o(GN,"isWildcard");tg=class extends Qd{static{o(this,"LangiumGrammarAstReflection")}getAllTypes(){return["AbstractElement","AbstractRule","AbstractType","Action","Alternatives","ArrayLiteral","ArrayType","Assignment","BooleanLiteral","CharacterRange","Condition","Conjunction","CrossReference","Disjunction","EndOfFile","Grammar","GrammarImport","Group","InferredType","Interface","Keyword","NamedArgument","NegatedToken","Negation","NumberLiteral","Parameter","ParameterReference","ParserRule","ReferenceType","RegexToken","ReturnType","RuleCall","SimpleType","StringLiteral","TerminalAlternatives","TerminalGroup","TerminalRule","TerminalRuleCall","Type","TypeAttribute","TypeDefinition","UnionType","UnorderedGroup","UntilToken","ValueLiteral","Wildcard"]}computeIsSubtype(e,r){switch(e){case gN:case yN:case vN:case xN:case wN:case TN:case EN:case SN:case CN:case _N:case DN:case NN:case MN:case ON:case PN:case BN:case zN:return this.isSubtype(VD,r);case UD:case nN:case fN:return this.isSubtype(DT,r);case HD:case lN:case hN:case pN:return this.isSubtype($D,r);case YD:return this.isSubtype(LT,r)||this.isSubtype(DT,r);case XD:case KD:case tN:case aN:return this.isSubtype(LT,r);case JD:case eN:case dN:return this.isSubtype(i2,r);case oN:return this.isSubtype(n2,r)||this.isSubtype(i2,r);case NT:return this.isSubtype(n2,r);default:return!1}}getReferenceType(e){let r=`${e.container.$type}:${e.property}`;switch(r){case"Action:type":case"CrossReference:type":case"Interface:superTypes":case"ParserRule:returnType":case"SimpleType:typeRef":return i2;case"Grammar:hiddenTokens":case"ParserRule:hiddenTokens":case"RuleCall:rule":return n2;case"Grammar:usedGrammars":return ZD;case"NamedArgument:parameter":case"ParameterReference:parameter":return iN;case"TerminalRuleCall:rule":return NT;default:throw new Error(`${r} is not a valid reference id.`)}}getTypeMetaData(e){switch(e){case"AbstractElement":return{name:"AbstractElement",properties:[{name:"cardinality"},{name:"lookahead"}]};case"ArrayLiteral":return{name:"ArrayLiteral",properties:[{name:"elements",defaultValue:[]}]};case"ArrayType":return{name:"ArrayType",properties:[{name:"elementType"}]};case"BooleanLiteral":return{name:"BooleanLiteral",properties:[{name:"true",defaultValue:!1}]};case"Conjunction":return{name:"Conjunction",properties:[{name:"left"},{name:"right"}]};case"Disjunction":return{name:"Disjunction",properties:[{name:"left"},{name:"right"}]};case"Grammar":return{name:"Grammar",properties:[{name:"definesHiddenTokens",defaultValue:!1},{name:"hiddenTokens",defaultValue:[]},{name:"imports",defaultValue:[]},{name:"interfaces",defaultValue:[]},{name:"isDeclared",defaultValue:!1},{name:"name"},{name:"rules",defaultValue:[]},{name:"types",defaultValue:[]},{name:"usedGrammars",defaultValue:[]}]};case"GrammarImport":return{name:"GrammarImport",properties:[{name:"path"}]};case"InferredType":return{name:"InferredType",properties:[{name:"name"}]};case"Interface":return{name:"Interface",properties:[{name:"attributes",defaultValue:[]},{name:"name"},{name:"superTypes",defaultValue:[]}]};case"NamedArgument":return{name:"NamedArgument",properties:[{name:"calledByName",defaultValue:!1},{name:"parameter"},{name:"value"}]};case"Negation":return{name:"Negation",properties:[{name:"value"}]};case"NumberLiteral":return{name:"NumberLiteral",properties:[{name:"value"}]};case"Parameter":return{name:"Parameter",properties:[{name:"name"}]};case"ParameterReference":return{name:"ParameterReference",properties:[{name:"parameter"}]};case"ParserRule":return{name:"ParserRule",properties:[{name:"dataType"},{name:"definesHiddenTokens",defaultValue:!1},{name:"definition"},{name:"entry",defaultValue:!1},{name:"fragment",defaultValue:!1},{name:"hiddenTokens",defaultValue:[]},{name:"inferredType"},{name:"name"},{name:"parameters",defaultValue:[]},{name:"returnType"},{name:"wildcard",defaultValue:!1}]};case"ReferenceType":return{name:"ReferenceType",properties:[{name:"referenceType"}]};case"ReturnType":return{name:"ReturnType",properties:[{name:"name"}]};case"SimpleType":return{name:"SimpleType",properties:[{name:"primitiveType"},{name:"stringType"},{name:"typeRef"}]};case"StringLiteral":return{name:"StringLiteral",properties:[{name:"value"}]};case"TerminalRule":return{name:"TerminalRule",properties:[{name:"definition"},{name:"fragment",defaultValue:!1},{name:"hidden",defaultValue:!1},{name:"name"},{name:"type"}]};case"Type":return{name:"Type",properties:[{name:"name"},{name:"type"}]};case"TypeAttribute":return{name:"TypeAttribute",properties:[{name:"defaultValue"},{name:"isOptional",defaultValue:!1},{name:"name"},{name:"type"}]};case"UnionType":return{name:"UnionType",properties:[{name:"types",defaultValue:[]}]};case"Action":return{name:"Action",properties:[{name:"cardinality"},{name:"feature"},{name:"inferredType"},{name:"lookahead"},{name:"operator"},{name:"type"}]};case"Alternatives":return{name:"Alternatives",properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case"Assignment":return{name:"Assignment",properties:[{name:"cardinality"},{name:"feature"},{name:"lookahead"},{name:"operator"},{name:"terminal"}]};case"CharacterRange":return{name:"CharacterRange",properties:[{name:"cardinality"},{name:"left"},{name:"lookahead"},{name:"right"}]};case"CrossReference":return{name:"CrossReference",properties:[{name:"cardinality"},{name:"deprecatedSyntax",defaultValue:!1},{name:"lookahead"},{name:"terminal"},{name:"type"}]};case"EndOfFile":return{name:"EndOfFile",properties:[{name:"cardinality"},{name:"lookahead"}]};case"Group":return{name:"Group",properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"guardCondition"},{name:"lookahead"}]};case"Keyword":return{name:"Keyword",properties:[{name:"cardinality"},{name:"lookahead"},{name:"value"}]};case"NegatedToken":return{name:"NegatedToken",properties:[{name:"cardinality"},{name:"lookahead"},{name:"terminal"}]};case"RegexToken":return{name:"RegexToken",properties:[{name:"cardinality"},{name:"lookahead"},{name:"regex"}]};case"RuleCall":return{name:"RuleCall",properties:[{name:"arguments",defaultValue:[]},{name:"cardinality"},{name:"lookahead"},{name:"rule"}]};case"TerminalAlternatives":return{name:"TerminalAlternatives",properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case"TerminalGroup":return{name:"TerminalGroup",properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case"TerminalRuleCall":return{name:"TerminalRuleCall",properties:[{name:"cardinality"},{name:"lookahead"},{name:"rule"}]};case"UnorderedGroup":return{name:"UnorderedGroup",properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case"UntilToken":return{name:"UntilToken",properties:[{name:"cardinality"},{name:"lookahead"},{name:"terminal"}]};case"Wildcard":return{name:"Wildcard",properties:[{name:"cardinality"},{name:"lookahead"}]};default:return{name:e,properties:[]}}}},lr=new tg});var zT={};vr(zT,{assignMandatoryProperties:()=>UN,copyAstNode:()=>VN,findLocalReferences:()=>jPe,findRootNode:()=>Pae,getContainerOfType:()=>n0,getDocument:()=>Vi,hasContainerOfType:()=>XPe,linkContentToContainer:()=>FT,streamAllContents:()=>Fc,streamAst:()=>tl,streamContents:()=>l2,streamReferences:()=>rg});function FT(t){for(let[e,r]of Object.entries(t))e.startsWith("$")||(Array.isArray(r)?r.forEach((n,i)=>{ri(n)&&(n.$container=t,n.$containerProperty=e,n.$containerIndex=i)}):ri(r)&&(r.$container=t,r.$containerProperty=e))}function n0(t,e){let r=t;for(;r;){if(e(r))return r;r=r.$container}}function XPe(t,e){let r=t;for(;r;){if(e(r))return!0;r=r.$container}return!1}function Vi(t){let r=Pae(t).$document;if(!r)throw new Error("AST node has no document.");return r}function Pae(t){for(;t.$container;)t=t.$container;return t}function l2(t,e){if(!t)throw new Error("Node must be an AstNode.");let r=e?.range;return new fo(()=>({keys:Object.keys(t),keyIndex:0,arrayIndex:0}),n=>{for(;n.keyIndexl2(r,e))}function tl(t,e){if(t){if(e?.range&&!$N(t,e.range))return new Pc(t,()=>[])}else throw new Error("Root node must be an AstNode.");return new Pc(t,r=>l2(r,e),{includeRoot:!0})}function $N(t,e){var r;if(!e)return!0;let n=(r=t.$cstNode)===null||r===void 0?void 0:r.range;return n?FD(n,e):!1}function rg(t){return new fo(()=>({keys:Object.keys(t),keyIndex:0,arrayIndex:0}),e=>{for(;e.keyIndex{rg(n).forEach(i=>{i.reference.ref===t&&r.push(i.reference)})}),tn(r)}function UN(t,e){let r=t.getTypeMetaData(e.$type),n=e;for(let i of r.properties)i.defaultValue!==void 0&&n[i.name]===void 0&&(n[i.name]=Bae(i.defaultValue))}function Bae(t){return Array.isArray(t)?[...t.map(Bae)]:t}function VN(t,e){let r={$type:t.$type};for(let[n,i]of Object.entries(t))if(!n.startsWith("$"))if(ri(i))r[n]=VN(i,e);else if(Ta(i))r[n]=e(r,n,i.$refNode,i.$refText);else if(Array.isArray(i)){let a=[];for(let s of i)ri(s)?a.push(VN(s,e)):Ta(s)?a.push(e(r,n,s.$refNode,s.$refText)):a.push(s);r[n]=a}else r[n]=i;return FT(r),r}var os=M(()=>{"use strict";Zo();$s();zl();o(FT,"linkContentToContainer");o(n0,"getContainerOfType");o(XPe,"hasContainerOfType");o(Vi,"getDocument");o(Pae,"findRootNode");o(l2,"streamContents");o(Fc,"streamAllContents");o(tl,"streamAst");o($N,"isAstNodeInRange");o(rg,"streamReferences");o(jPe,"findLocalReferences");o(UN,"assignMandatoryProperties");o(Bae,"copyDefaultValue");o(VN,"copyAstNode")});function ar(t){return t.charCodeAt(0)}function GT(t,e){Array.isArray(t)?t.forEach(function(r){e.push(r)}):e.push(t)}function ng(t,e){if(t[e]===!0)throw"duplicate flag "+e;let r=t[e];t[e]=!0}function i0(t){if(t===void 0)throw Error("Internal Error - Should never get here!");return!0}function c2(){throw Error("Internal Error - Should never get here!")}function HN(t){return t.type==="Character"}var WN=M(()=>{"use strict";o(ar,"cc");o(GT,"insertToSet");o(ng,"addFlag");o(i0,"ASSERT_EXISTS");o(c2,"ASSERT_NEVER_REACH_HERE");o(HN,"isCharacter")});var u2,h2,YN,Fae=M(()=>{"use strict";WN();u2=[];for(let t=ar("0");t<=ar("9");t++)u2.push(t);h2=[ar("_")].concat(u2);for(let t=ar("a");t<=ar("z");t++)h2.push(t);for(let t=ar("A");t<=ar("Z");t++)h2.push(t);YN=[ar(" "),ar("\f"),ar(` +`),ar("\r"),ar(" "),ar("\v"),ar(" "),ar("\xA0"),ar("\u1680"),ar("\u2000"),ar("\u2001"),ar("\u2002"),ar("\u2003"),ar("\u2004"),ar("\u2005"),ar("\u2006"),ar("\u2007"),ar("\u2008"),ar("\u2009"),ar("\u200A"),ar("\u2028"),ar("\u2029"),ar("\u202F"),ar("\u205F"),ar("\u3000"),ar("\uFEFF")]});var KPe,$T,QPe,a0,zae=M(()=>{"use strict";WN();Fae();KPe=/[0-9a-fA-F]/,$T=/[0-9]/,QPe=/[1-9]/,a0=class{static{o(this,"RegExpParser")}constructor(){this.idx=0,this.input="",this.groupIdx=0}saveState(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}}restoreState(e){this.idx=e.idx,this.input=e.input,this.groupIdx=e.groupIdx}pattern(e){this.idx=0,this.input=e,this.groupIdx=0,this.consumeChar("/");let r=this.disjunction();this.consumeChar("/");let n={type:"Flags",loc:{begin:this.idx,end:e.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};for(;this.isRegExpFlag();)switch(this.popChar()){case"g":ng(n,"global");break;case"i":ng(n,"ignoreCase");break;case"m":ng(n,"multiLine");break;case"u":ng(n,"unicode");break;case"y":ng(n,"sticky");break}if(this.idx!==this.input.length)throw Error("Redundant input: "+this.input.substring(this.idx));return{type:"Pattern",flags:n,value:r,loc:this.loc(0)}}disjunction(){let e=[],r=this.idx;for(e.push(this.alternative());this.peekChar()==="|";)this.consumeChar("|"),e.push(this.alternative());return{type:"Disjunction",value:e,loc:this.loc(r)}}alternative(){let e=[],r=this.idx;for(;this.isTerm();)e.push(this.term());return{type:"Alternative",value:e,loc:this.loc(r)}}term(){return this.isAssertion()?this.assertion():this.atom()}assertion(){let e=this.idx;switch(this.popChar()){case"^":return{type:"StartAnchor",loc:this.loc(e)};case"$":return{type:"EndAnchor",loc:this.loc(e)};case"\\":switch(this.popChar()){case"b":return{type:"WordBoundary",loc:this.loc(e)};case"B":return{type:"NonWordBoundary",loc:this.loc(e)}}throw Error("Invalid Assertion Escape");case"(":this.consumeChar("?");let r;switch(this.popChar()){case"=":r="Lookahead";break;case"!":r="NegativeLookahead";break}i0(r);let n=this.disjunction();return this.consumeChar(")"),{type:r,value:n,loc:this.loc(e)}}return c2()}quantifier(e=!1){let r,n=this.idx;switch(this.popChar()){case"*":r={atLeast:0,atMost:1/0};break;case"+":r={atLeast:1,atMost:1/0};break;case"?":r={atLeast:0,atMost:1};break;case"{":let i=this.integerIncludingZero();switch(this.popChar()){case"}":r={atLeast:i,atMost:i};break;case",":let a;this.isDigit()?(a=this.integerIncludingZero(),r={atLeast:i,atMost:a}):r={atLeast:i,atMost:1/0},this.consumeChar("}");break}if(e===!0&&r===void 0)return;i0(r);break}if(!(e===!0&&r===void 0)&&i0(r))return this.peekChar(0)==="?"?(this.consumeChar("?"),r.greedy=!1):r.greedy=!0,r.type="Quantifier",r.loc=this.loc(n),r}atom(){let e,r=this.idx;switch(this.peekChar()){case".":e=this.dotAll();break;case"\\":e=this.atomEscape();break;case"[":e=this.characterClass();break;case"(":e=this.group();break}return e===void 0&&this.isPatternCharacter()&&(e=this.patternCharacter()),i0(e)?(e.loc=this.loc(r),this.isQuantifier()&&(e.quantifier=this.quantifier()),e):c2()}dotAll(){return this.consumeChar("."),{type:"Set",complement:!0,value:[ar(` +`),ar("\r"),ar("\u2028"),ar("\u2029")]}}atomEscape(){switch(this.consumeChar("\\"),this.peekChar()){case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return this.decimalEscapeAtom();case"d":case"D":case"s":case"S":case"w":case"W":return this.characterClassEscape();case"f":case"n":case"r":case"t":case"v":return this.controlEscapeAtom();case"c":return this.controlLetterEscapeAtom();case"0":return this.nulCharacterAtom();case"x":return this.hexEscapeSequenceAtom();case"u":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}}decimalEscapeAtom(){return{type:"GroupBackReference",value:this.positiveInteger()}}characterClassEscape(){let e,r=!1;switch(this.popChar()){case"d":e=u2;break;case"D":e=u2,r=!0;break;case"s":e=YN;break;case"S":e=YN,r=!0;break;case"w":e=h2;break;case"W":e=h2,r=!0;break}return i0(e)?{type:"Set",value:e,complement:r}:c2()}controlEscapeAtom(){let e;switch(this.popChar()){case"f":e=ar("\f");break;case"n":e=ar(` +`);break;case"r":e=ar("\r");break;case"t":e=ar(" ");break;case"v":e=ar("\v");break}return i0(e)?{type:"Character",value:e}:c2()}controlLetterEscapeAtom(){this.consumeChar("c");let e=this.popChar();if(/[a-zA-Z]/.test(e)===!1)throw Error("Invalid ");return{type:"Character",value:e.toUpperCase().charCodeAt(0)-64}}nulCharacterAtom(){return this.consumeChar("0"),{type:"Character",value:ar("\0")}}hexEscapeSequenceAtom(){return this.consumeChar("x"),this.parseHexDigits(2)}regExpUnicodeEscapeSequenceAtom(){return this.consumeChar("u"),this.parseHexDigits(4)}identityEscapeAtom(){let e=this.popChar();return{type:"Character",value:ar(e)}}classPatternCharacterAtom(){switch(this.peekChar()){case` +`:case"\r":case"\u2028":case"\u2029":case"\\":case"]":throw Error("TBD");default:let e=this.popChar();return{type:"Character",value:ar(e)}}}characterClass(){let e=[],r=!1;for(this.consumeChar("["),this.peekChar(0)==="^"&&(this.consumeChar("^"),r=!0);this.isClassAtom();){let n=this.classAtom(),i=n.type==="Character";if(HN(n)&&this.isRangeDash()){this.consumeChar("-");let a=this.classAtom(),s=a.type==="Character";if(HN(a)){if(a.value=this.input.length)throw Error("Unexpected end of input");this.idx++}loc(e){return{begin:e,end:this.idx}}}});var zc,Gae=M(()=>{"use strict";zc=class{static{o(this,"BaseRegExpVisitor")}visitChildren(e){for(let r in e){let n=e[r];e.hasOwnProperty(r)&&(n.type!==void 0?this.visit(n):Array.isArray(n)&&n.forEach(i=>{this.visit(i)},this))}}visit(e){switch(e.type){case"Pattern":this.visitPattern(e);break;case"Flags":this.visitFlags(e);break;case"Disjunction":this.visitDisjunction(e);break;case"Alternative":this.visitAlternative(e);break;case"StartAnchor":this.visitStartAnchor(e);break;case"EndAnchor":this.visitEndAnchor(e);break;case"WordBoundary":this.visitWordBoundary(e);break;case"NonWordBoundary":this.visitNonWordBoundary(e);break;case"Lookahead":this.visitLookahead(e);break;case"NegativeLookahead":this.visitNegativeLookahead(e);break;case"Character":this.visitCharacter(e);break;case"Set":this.visitSet(e);break;case"Group":this.visitGroup(e);break;case"GroupBackReference":this.visitGroupBackReference(e);break;case"Quantifier":this.visitQuantifier(e);break}this.visitChildren(e)}visitPattern(e){}visitFlags(e){}visitDisjunction(e){}visitAlternative(e){}visitStartAnchor(e){}visitEndAnchor(e){}visitWordBoundary(e){}visitNonWordBoundary(e){}visitLookahead(e){}visitNegativeLookahead(e){}visitCharacter(e){}visitSet(e){}visitGroup(e){}visitGroupBackReference(e){}visitQuantifier(e){}}});var f2=M(()=>{"use strict";zae();Gae()});var UT={};vr(UT,{NEWLINE_REGEXP:()=>XN,escapeRegExp:()=>o0,getCaseInsensitivePattern:()=>KN,getTerminalParts:()=>ZPe,isMultilineComment:()=>jN,isWhitespace:()=>VT,partialMatches:()=>QN,partialRegExp:()=>Vae});function ZPe(t){try{typeof t!="string"&&(t=t.source),t=`/${t}/`;let e=$ae.pattern(t),r=[];for(let n of e.value.value)s0.reset(t),s0.visit(n),r.push({start:s0.startRegexp,end:s0.endRegex});return r}catch{return[]}}function jN(t){try{return typeof t=="string"&&(t=new RegExp(t)),t=t.toString(),s0.reset(t),s0.visit($ae.pattern(t)),s0.multiline}catch{return!1}}function VT(t){return(typeof t=="string"?new RegExp(t):t).test(" ")}function o0(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function KN(t){return Array.prototype.map.call(t,e=>/\w/.test(e)?`[${e.toLowerCase()}${e.toUpperCase()}]`:o0(e)).join("")}function QN(t,e){let r=Vae(t),n=e.match(r);return!!n&&n[0].length>0}function Vae(t){typeof t=="string"&&(t=new RegExp(t));let e=t,r=t.source,n=0;function i(){let a="",s;function l(h){a+=r.substr(n,h),n+=h}o(l,"appendRaw");function u(h){a+="(?:"+r.substr(n,h)+"|$)",n+=h}for(o(u,"appendOptional");n",n)-n+1);break;default:u(2);break}break;case"[":s=/\[(?:\\.|.)*?\]/g,s.lastIndex=n,s=s.exec(r)||[],u(s[0].length);break;case"|":case"^":case"$":case"*":case"+":case"?":l(1);break;case"{":s=/\{\d+,?\d*\}/g,s.lastIndex=n,s=s.exec(r),s?l(s[0].length):u(1);break;case"(":if(r[n+1]==="?")switch(r[n+2]){case":":a+="(?:",n+=3,a+=i()+"|$)";break;case"=":a+="(?=",n+=3,a+=i()+")";break;case"!":s=n,n+=3,i(),a+=r.substr(s,n-s);break;case"<":switch(r[n+3]){case"=":case"!":s=n,n+=4,i(),a+=r.substr(s,n-s);break;default:l(r.indexOf(">",n)-n+1),a+=i()+"|$)";break}break}else l(1),a+=i()+"|$)";break;case")":return++n,a;default:u(1);break}return a}return o(i,"process"),new RegExp(i(),t.flags)}var XN,$ae,qN,s0,ig=M(()=>{"use strict";f2();XN=/\r?\n/gm,$ae=new a0,qN=class extends zc{static{o(this,"TerminalRegExpVisitor")}constructor(){super(...arguments),this.isStarting=!0,this.endRegexpStack=[],this.multiline=!1}get endRegex(){return this.endRegexpStack.join("")}reset(e){this.multiline=!1,this.regex=e,this.startRegexp="",this.isStarting=!0,this.endRegexpStack=[]}visitGroup(e){e.quantifier&&(this.isStarting=!1,this.endRegexpStack=[])}visitCharacter(e){let r=String.fromCharCode(e.value);if(!this.multiline&&r===` +`&&(this.multiline=!0),e.quantifier)this.isStarting=!1,this.endRegexpStack=[];else{let n=o0(r);this.endRegexpStack.push(n),this.isStarting&&(this.startRegexp+=n)}}visitSet(e){if(!this.multiline){let r=this.regex.substring(e.loc.begin,e.loc.end),n=new RegExp(r);this.multiline=!!` +`.match(n)}if(e.quantifier)this.isStarting=!1,this.endRegexpStack=[];else{let r=this.regex.substring(e.loc.begin,e.loc.end);this.endRegexpStack.push(r),this.isStarting&&(this.startRegexp+=r)}}visitChildren(e){e.type==="Group"&&e.quantifier||super.visitChildren(e)}},s0=new qN;o(ZPe,"getTerminalParts");o(jN,"isMultilineComment");o(VT,"isWhitespace");o(o0,"escapeRegExp");o(KN,"getCaseInsensitivePattern");o(QN,"partialMatches");o(Vae,"partialRegExp")});var WT={};vr(WT,{findAssignment:()=>sR,findNameAssignment:()=>HT,findNodeForKeyword:()=>iR,findNodeForProperty:()=>p2,findNodesForKeyword:()=>JPe,findNodesForKeywordInternal:()=>aR,findNodesForProperty:()=>rR,getActionAtElement:()=>qae,getActionType:()=>jae,getAllReachableRules:()=>d2,getCrossReferenceTerminal:()=>eR,getEntryRule:()=>Uae,getExplicitRuleType:()=>oR,getHiddenRules:()=>Hae,getRuleType:()=>lR,getTypeName:()=>l0,isArrayCardinality:()=>tBe,isArrayOperator:()=>rBe,isCommentTerminal:()=>tR,isDataType:()=>nBe,isDataTypeRule:()=>m2,isOptionalCardinality:()=>eBe,terminalRegex:()=>ag});function Uae(t){return t.rules.find(e=>Ga(e)&&e.entry)}function Hae(t){return t.rules.filter(e=>Jo(e)&&e.hidden)}function d2(t,e){let r=new Set,n=Uae(t);if(!n)return new Set(t.rules);let i=[n].concat(Hae(t));for(let s of i)Wae(s,r,e);let a=new Set;for(let s of t.rules)(r.has(s.name)||Jo(s)&&s.hidden)&&a.add(s);return a}function Wae(t,e,r){e.add(t.name),Fc(t).forEach(n=>{if($l(n)||r&&PT(n)){let i=n.rule.ref;i&&!e.has(i.name)&&Wae(i,e,r)}})}function eR(t){if(t.terminal)return t.terminal;if(t.type.ref){let e=HT(t.type.ref);return e?.terminal}}function tR(t){return t.hidden&&!ag(t).test(" ")}function rR(t,e){return!t||!e?[]:nR(t,e,t.astNode,!0)}function p2(t,e,r){if(!t||!e)return;let n=nR(t,e,t.astNode,!0);if(n.length!==0)return r!==void 0?r=Math.max(0,Math.min(r,n.length-1)):r=0,n[r]}function nR(t,e,r,n){if(!n){let i=n0(t.grammarSource,Gl);if(i&&i.feature===e)return[t]}return ho(t)&&t.astNode===r?t.content.flatMap(i=>nR(i,e,r,!1)):[]}function JPe(t,e){return t?aR(t,e,t?.astNode):[]}function iR(t,e,r){if(!t)return;let n=aR(t,e,t?.astNode);if(n.length!==0)return r!==void 0?r=Math.max(0,Math.min(r,n.length-1)):r=0,n[r]}function aR(t,e,r){if(t.astNode!==r)return[];if(el(t.grammarSource)&&t.grammarSource.value===e)return[t];let n=Jd(t).iterator(),i,a=[];do if(i=n.next(),!i.done){let s=i.value;s.astNode===r?el(s.grammarSource)&&s.grammarSource.value===e&&a.push(s):n.prune()}while(!i.done);return a}function sR(t){var e;let r=t.astNode;for(;r===((e=t.container)===null||e===void 0?void 0:e.astNode);){let n=n0(t.grammarSource,Gl);if(n)return n;t=t.container}}function HT(t){let e=t;return RT(e)&&(Vu(e.$container)?e=e.$container.$container:Ga(e.$container)?e=e.$container:uf(e.$container)),Yae(t,e,new Map)}function Yae(t,e,r){var n;function i(a,s){let l;return n0(a,Gl)||(l=Yae(s,s,r)),r.set(t,l),l}if(o(i,"go"),r.has(t))return r.get(t);r.set(t,void 0);for(let a of Fc(e)){if(Gl(a)&&a.feature.toLowerCase()==="name")return r.set(t,a),a;if($l(a)&&Ga(a.rule.ref))return i(a,a.rule.ref);if(IT(a)&&(!((n=a.typeRef)===null||n===void 0)&&n.ref))return i(a,a.typeRef.ref)}}function qae(t){let e=t.$container;if(hf(e)){let r=e.elements,n=r.indexOf(t);for(let i=n-1;i>=0;i--){let a=r[i];if(Vu(a))return a;{let s=Fc(r[i]).find(Vu);if(s)return s}}}if(a2(e))return qae(e)}function eBe(t,e){return t==="?"||t==="*"||hf(e)&&!!e.guardCondition}function tBe(t){return t==="*"||t==="+"}function rBe(t){return t==="+="}function m2(t){return Xae(t,new Set)}function Xae(t,e){if(e.has(t))return!0;e.add(t);for(let r of Fc(t))if($l(r)){if(!r.rule.ref||Ga(r.rule.ref)&&!Xae(r.rule.ref,e))return!1}else{if(Gl(r))return!1;if(Vu(r))return!1}return!!t.definition}function nBe(t){return JN(t.type,new Set)}function JN(t,e){if(e.has(t))return!0;if(e.add(t),WD(t))return!1;if(cN(t))return!1;if(mN(t))return t.types.every(r=>JN(r,e));if(IT(t)){if(t.primitiveType!==void 0)return!0;if(t.stringType!==void 0)return!0;if(t.typeRef!==void 0){let r=t.typeRef.ref;return s2(r)?JN(r.type,e):!1}else return!1}else return!1}function oR(t){if(t.inferredType)return t.inferredType.name;if(t.dataType)return t.dataType;if(t.returnType){let e=t.returnType.ref;if(e){if(Ga(e))return e.name;if(MT(e)||s2(e))return e.name}}}function l0(t){var e;if(Ga(t))return m2(t)?t.name:(e=oR(t))!==null&&e!==void 0?e:t.name;if(MT(t)||s2(t)||uN(t))return t.name;if(Vu(t)){let r=jae(t);if(r)return r}else if(RT(t))return t.name;throw new Error("Cannot get name of Unknown Type")}function jae(t){var e;if(t.inferredType)return t.inferredType.name;if(!((e=t.type)===null||e===void 0)&&e.ref)return l0(t.type.ref)}function lR(t){var e,r,n;return Jo(t)?(r=(e=t.type)===null||e===void 0?void 0:e.name)!==null&&r!==void 0?r:"string":m2(t)?t.name:(n=oR(t))!==null&&n!==void 0?n:t.name}function ag(t){let e={s:!1,i:!1,u:!1},r=sg(t.definition,e),n=Object.entries(e).filter(([,i])=>i).map(([i])=>i).join("");return new RegExp(r,n)}function sg(t,e){if(RN(t))return iBe(t);if(IN(t))return aBe(t);if(bN(t))return lBe(t);if(PT(t)){let r=t.rule.ref;if(!r)throw new Error("Missing rule reference.");return Uu(sg(r.definition),{cardinality:t.cardinality,lookahead:t.lookahead})}else{if(AN(t))return oBe(t);if(FN(t))return sBe(t);if(LN(t)){let r=t.regex.lastIndexOf("/"),n=t.regex.substring(1,r),i=t.regex.substring(r+1);return e&&(e.i=i.includes("i"),e.s=i.includes("s"),e.u=i.includes("u")),Uu(n,{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1})}else{if(GN(t))return Uu(cR,{cardinality:t.cardinality,lookahead:t.lookahead});throw new Error(`Invalid terminal element: ${t?.$type}`)}}}function iBe(t){return Uu(t.elements.map(e=>sg(e)).join("|"),{cardinality:t.cardinality,lookahead:t.lookahead})}function aBe(t){return Uu(t.elements.map(e=>sg(e)).join(""),{cardinality:t.cardinality,lookahead:t.lookahead})}function sBe(t){return Uu(`${cR}*?${sg(t.terminal)}`,{cardinality:t.cardinality,lookahead:t.lookahead})}function oBe(t){return Uu(`(?!${sg(t.terminal)})${cR}*?`,{cardinality:t.cardinality,lookahead:t.lookahead})}function lBe(t){return t.right?Uu(`[${ZN(t.left)}-${ZN(t.right)}]`,{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1}):Uu(ZN(t.left),{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1})}function ZN(t){return o0(t.value)}function Uu(t,e){var r;return(e.wrap!==!1||e.lookahead)&&(t=`(${(r=e.lookahead)!==null&&r!==void 0?r:""}${t})`),e.cardinality?`${t}${e.cardinality}`:t}var cR,Vl=M(()=>{"use strict";_T();Bc();Zo();os();zl();ig();o(Uae,"getEntryRule");o(Hae,"getHiddenRules");o(d2,"getAllReachableRules");o(Wae,"ruleDfs");o(eR,"getCrossReferenceTerminal");o(tR,"isCommentTerminal");o(rR,"findNodesForProperty");o(p2,"findNodeForProperty");o(nR,"findNodesForPropertyInternal");o(JPe,"findNodesForKeyword");o(iR,"findNodeForKeyword");o(aR,"findNodesForKeywordInternal");o(sR,"findAssignment");o(HT,"findNameAssignment");o(Yae,"findNameAssignmentInternal");o(qae,"getActionAtElement");o(eBe,"isOptionalCardinality");o(tBe,"isArrayCardinality");o(rBe,"isArrayOperator");o(m2,"isDataTypeRule");o(Xae,"isDataTypeRuleInternal");o(nBe,"isDataType");o(JN,"isDataTypeInternal");o(oR,"getExplicitRuleType");o(l0,"getTypeName");o(jae,"getActionType");o(lR,"getRuleType");o(ag,"terminalRegex");cR=/[\s\S]/.source;o(sg,"abstractElementToRegex");o(iBe,"terminalAlternativesToRegex");o(aBe,"terminalGroupToRegex");o(sBe,"untilTokenToRegex");o(oBe,"negateTokenToRegex");o(lBe,"characterRangeToRegex");o(ZN,"keywordToRegex");o(Uu,"withCardinality")});function uR(t){let e=[],r=t.Grammar;for(let n of r.rules)Jo(n)&&tR(n)&&jN(ag(n))&&e.push(n.name);return{multilineCommentRules:e,nameRegexp:CT}}var hR=M(()=>{"use strict";zl();Vl();ig();Bc();o(uR,"createGrammarConfig")});var fR=M(()=>{"use strict"});function og(t){console&&console.error&&console.error(`Error: ${t}`)}function g2(t){console&&console.warn&&console.warn(`Warning: ${t}`)}var Kae=M(()=>{"use strict";o(og,"PRINT_ERROR");o(g2,"PRINT_WARNING")});function y2(t){let e=new Date().getTime(),r=t();return{time:new Date().getTime()-e,value:r}}var Qae=M(()=>{"use strict";o(y2,"timer")});function v2(t){function e(){}o(e,"FakeConstructor"),e.prototype=t;let r=new e;function n(){return typeof r.bar}return o(n,"fakeAccess"),n(),n(),t;(0,eval)(t)}var Zae=M(()=>{"use strict";o(v2,"toFastProperties")});var lg=M(()=>{"use strict";Kae();Qae();Zae()});function cBe(t){return uBe(t)?t.LABEL:t.name}function uBe(t){return bi(t.LABEL)&&t.LABEL!==""}function YT(t){return Qe(t,cg)}function cg(t){function e(r){return Qe(r,cg)}if(o(e,"convertDefinition"),t instanceof nn){let r={type:"NonTerminal",name:t.nonTerminalName,idx:t.idx};return bi(t.label)&&(r.label=t.label),r}else{if(t instanceof _n)return{type:"Alternative",definition:e(t.definition)};if(t instanceof an)return{type:"Option",idx:t.idx,definition:e(t.definition)};if(t instanceof Ln)return{type:"RepetitionMandatory",idx:t.idx,definition:e(t.definition)};if(t instanceof Dn)return{type:"RepetitionMandatoryWithSeparator",idx:t.idx,separator:cg(new Er({terminalType:t.separator})),definition:e(t.definition)};if(t instanceof bn)return{type:"RepetitionWithSeparator",idx:t.idx,separator:cg(new Er({terminalType:t.separator})),definition:e(t.definition)};if(t instanceof Dr)return{type:"Repetition",idx:t.idx,definition:e(t.definition)};if(t instanceof wn)return{type:"Alternation",idx:t.idx,definition:e(t.definition)};if(t instanceof Er){let r={type:"Terminal",name:t.terminalType.name,label:cBe(t.terminalType),idx:t.idx};bi(t.label)&&(r.terminalLabel=t.label);let n=t.terminalType.PATTERN;return t.terminalType.PATTERN&&(r.pattern=Xo(n)?n.source:n),r}else{if(t instanceof ls)return{type:"Rule",name:t.name,orgText:t.orgText,definition:e(t.definition)};throw Error("non exhaustive match")}}}var po,nn,ls,_n,an,Ln,Dn,Dr,bn,wn,Er,qT=M(()=>{"use strict";Ht();o(cBe,"tokenLabel");o(uBe,"hasTokenLabel");po=class{static{o(this,"AbstractProduction")}get definition(){return this._definition}set definition(e){this._definition=e}constructor(e){this._definition=e}accept(e){e.visit(this),Se(this.definition,r=>{r.accept(e)})}},nn=class extends po{static{o(this,"NonTerminal")}constructor(e){super([]),this.idx=1,va(this,zs(e,r=>r!==void 0))}set definition(e){}get definition(){return this.referencedRule!==void 0?this.referencedRule.definition:[]}accept(e){e.visit(this)}},ls=class extends po{static{o(this,"Rule")}constructor(e){super(e.definition),this.orgText="",va(this,zs(e,r=>r!==void 0))}},_n=class extends po{static{o(this,"Alternative")}constructor(e){super(e.definition),this.ignoreAmbiguities=!1,va(this,zs(e,r=>r!==void 0))}},an=class extends po{static{o(this,"Option")}constructor(e){super(e.definition),this.idx=1,va(this,zs(e,r=>r!==void 0))}},Ln=class extends po{static{o(this,"RepetitionMandatory")}constructor(e){super(e.definition),this.idx=1,va(this,zs(e,r=>r!==void 0))}},Dn=class extends po{static{o(this,"RepetitionMandatoryWithSeparator")}constructor(e){super(e.definition),this.idx=1,va(this,zs(e,r=>r!==void 0))}},Dr=class extends po{static{o(this,"Repetition")}constructor(e){super(e.definition),this.idx=1,va(this,zs(e,r=>r!==void 0))}},bn=class extends po{static{o(this,"RepetitionWithSeparator")}constructor(e){super(e.definition),this.idx=1,va(this,zs(e,r=>r!==void 0))}},wn=class extends po{static{o(this,"Alternation")}get definition(){return this._definition}set definition(e){this._definition=e}constructor(e){super(e.definition),this.idx=1,this.ignoreAmbiguities=!1,this.hasPredicates=!1,va(this,zs(e,r=>r!==void 0))}},Er=class{static{o(this,"Terminal")}constructor(e){this.idx=1,va(this,zs(e,r=>r!==void 0))}accept(e){e.visit(this)}};o(YT,"serializeGrammar");o(cg,"serializeProduction")});var cs,Jae=M(()=>{"use strict";qT();cs=class{static{o(this,"GAstVisitor")}visit(e){let r=e;switch(r.constructor){case nn:return this.visitNonTerminal(r);case _n:return this.visitAlternative(r);case an:return this.visitOption(r);case Ln:return this.visitRepetitionMandatory(r);case Dn:return this.visitRepetitionMandatoryWithSeparator(r);case bn:return this.visitRepetitionWithSeparator(r);case Dr:return this.visitRepetition(r);case wn:return this.visitAlternation(r);case Er:return this.visitTerminal(r);case ls:return this.visitRule(r);default:throw Error("non exhaustive match")}}visitNonTerminal(e){}visitAlternative(e){}visitOption(e){}visitRepetition(e){}visitRepetitionMandatory(e){}visitRepetitionMandatoryWithSeparator(e){}visitRepetitionWithSeparator(e){}visitAlternation(e){}visitTerminal(e){}visitRule(e){}}});function dR(t){return t instanceof _n||t instanceof an||t instanceof Dr||t instanceof Ln||t instanceof Dn||t instanceof bn||t instanceof Er||t instanceof ls}function c0(t,e=[]){return t instanceof an||t instanceof Dr||t instanceof bn?!0:t instanceof wn?qv(t.definition,n=>c0(n,e)):t instanceof nn&&Yn(e,t)?!1:t instanceof po?(t instanceof nn&&e.push(t),za(t.definition,n=>c0(n,e))):!1}function pR(t){return t instanceof wn}function Vs(t){if(t instanceof nn)return"SUBRULE";if(t instanceof an)return"OPTION";if(t instanceof wn)return"OR";if(t instanceof Ln)return"AT_LEAST_ONE";if(t instanceof Dn)return"AT_LEAST_ONE_SEP";if(t instanceof bn)return"MANY_SEP";if(t instanceof Dr)return"MANY";if(t instanceof Er)return"CONSUME";throw Error("non exhaustive match")}var ese=M(()=>{"use strict";Ht();qT();o(dR,"isSequenceProd");o(c0,"isOptionalProd");o(pR,"isBranchingProd");o(Vs,"getProductionDslName")});var us=M(()=>{"use strict";qT();Jae();ese()});function tse(t,e,r){return[new an({definition:[new Er({terminalType:t.separator})].concat(t.definition)})].concat(e,r)}var Hu,XT=M(()=>{"use strict";Ht();us();Hu=class{static{o(this,"RestWalker")}walk(e,r=[]){Se(e.definition,(n,i)=>{let a=xi(e.definition,i+1);if(n instanceof nn)this.walkProdRef(n,a,r);else if(n instanceof Er)this.walkTerminal(n,a,r);else if(n instanceof _n)this.walkFlat(n,a,r);else if(n instanceof an)this.walkOption(n,a,r);else if(n instanceof Ln)this.walkAtLeastOne(n,a,r);else if(n instanceof Dn)this.walkAtLeastOneSep(n,a,r);else if(n instanceof bn)this.walkManySep(n,a,r);else if(n instanceof Dr)this.walkMany(n,a,r);else if(n instanceof wn)this.walkOr(n,a,r);else throw Error("non exhaustive match")})}walkTerminal(e,r,n){}walkProdRef(e,r,n){}walkFlat(e,r,n){let i=r.concat(n);this.walk(e,i)}walkOption(e,r,n){let i=r.concat(n);this.walk(e,i)}walkAtLeastOne(e,r,n){let i=[new an({definition:e.definition})].concat(r,n);this.walk(e,i)}walkAtLeastOneSep(e,r,n){let i=tse(e,r,n);this.walk(e,i)}walkMany(e,r,n){let i=[new an({definition:e.definition})].concat(r,n);this.walk(e,i)}walkManySep(e,r,n){let i=tse(e,r,n);this.walk(e,i)}walkOr(e,r,n){let i=r.concat(n);Se(e.definition,a=>{let s=new _n({definition:[a]});this.walk(s,i)})}};o(tse,"restForRepetitionWithSeparator")});function u0(t){if(t instanceof nn)return u0(t.referencedRule);if(t instanceof Er)return dBe(t);if(dR(t))return hBe(t);if(pR(t))return fBe(t);throw Error("non exhaustive match")}function hBe(t){let e=[],r=t.definition,n=0,i=r.length>n,a,s=!0;for(;i&&s;)a=r[n],s=c0(a),e=e.concat(u0(a)),n=n+1,i=r.length>n;return Xm(e)}function fBe(t){let e=Qe(t.definition,r=>u0(r));return Xm(Wr(e))}function dBe(t){return[t.terminalType]}var mR=M(()=>{"use strict";Ht();us();o(u0,"first");o(hBe,"firstForSequence");o(fBe,"firstForBranching");o(dBe,"firstForTerminal")});var jT,gR=M(()=>{"use strict";jT="_~IN~_"});function rse(t){let e={};return Se(t,r=>{let n=new yR(r).startWalking();va(e,n)}),e}function pBe(t,e){return t.name+e+jT}var yR,nse=M(()=>{"use strict";XT();mR();Ht();gR();us();yR=class extends Hu{static{o(this,"ResyncFollowsWalker")}constructor(e){super(),this.topProd=e,this.follows={}}startWalking(){return this.walk(this.topProd),this.follows}walkTerminal(e,r,n){}walkProdRef(e,r,n){let i=pBe(e.referencedRule,e.idx)+this.topProd.name,a=r.concat(n),s=new _n({definition:a}),l=u0(s);this.follows[i]=l}};o(rse,"computeAllProdsFollows");o(pBe,"buildBetweenProdsFollowPrefix")});function ug(t){let e=t.toString();if(KT.hasOwnProperty(e))return KT[e];{let r=mBe.pattern(e);return KT[e]=r,r}}function ise(){KT={}}var KT,mBe,QT=M(()=>{"use strict";f2();KT={},mBe=new a0;o(ug,"getRegExpAst");o(ise,"clearRegExpParserCache")});function ose(t,e=!1){try{let r=ug(t);return vR(r.value,{},r.flags.ignoreCase)}catch(r){if(r.message===sse)e&&g2(`${x2} Unable to optimize: < ${t.toString()} > + Complement Sets cannot be automatically optimized. + This will disable the lexer's first char optimizations. + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{let n="";e&&(n=` + This will disable the lexer's first char optimizations. + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),og(`${x2} + Failed parsing: < ${t.toString()} > + Using the @chevrotain/regexp-to-ast library + Please open an issue at: https://github.com/chevrotain/chevrotain/issues`+n)}}return[]}function vR(t,e,r){switch(t.type){case"Disjunction":for(let i=0;i{if(typeof u=="number")ZT(u,e,r);else{let h=u;if(r===!0)for(let f=h.from;f<=h.to;f++)ZT(f,e,r);else{for(let f=h.from;f<=h.to&&f=hg){let f=h.from>=hg?h.from:hg,d=h.to,p=Gc(f),m=Gc(d);for(let g=p;g<=m;g++)e[g]=g}}}});break;case"Group":vR(s.value,e,r);break;default:throw Error("Non Exhaustive Match")}let l=s.quantifier!==void 0&&s.quantifier.atLeast===0;if(s.type==="Group"&&xR(s)===!1||s.type!=="Group"&&l===!1)break}break;default:throw Error("non exhaustive match!")}return br(e)}function ZT(t,e,r){let n=Gc(t);e[n]=n,r===!0&&gBe(t,e)}function gBe(t,e){let r=String.fromCharCode(t),n=r.toUpperCase();if(n!==r){let i=Gc(n.charCodeAt(0));e[i]=i}else{let i=r.toLowerCase();if(i!==r){let a=Gc(i.charCodeAt(0));e[a]=a}}}function ase(t,e){return as(t.value,r=>{if(typeof r=="number")return Yn(e,r);{let n=r;return as(e,i=>n.from<=i&&i<=n.to)!==void 0}})}function xR(t){let e=t.quantifier;return e&&e.atLeast===0?!0:t.value?Dt(t.value)?za(t.value,xR):xR(t.value):!1}function JT(t,e){if(e instanceof RegExp){let r=ug(e),n=new bR(t);return n.visit(r),n.found}else return as(e,r=>Yn(t,r.charCodeAt(0)))!==void 0}var sse,x2,bR,lse=M(()=>{"use strict";f2();Ht();lg();QT();wR();sse="Complement Sets are not supported for first char optimization",x2=`Unable to use "first char" lexer optimizations: +`;o(ose,"getOptimizedStartCodesIndices");o(vR,"firstCharOptimizedIndices");o(ZT,"addOptimizedIdxToResult");o(gBe,"handleIgnoreCase");o(ase,"findCode");o(xR,"isWholeOptional");bR=class extends zc{static{o(this,"CharCodeFinder")}constructor(e){super(),this.targetCharCodes=e,this.found=!1}visitChildren(e){if(this.found!==!0){switch(e.type){case"Lookahead":this.visitLookahead(e);return;case"NegativeLookahead":this.visitNegativeLookahead(e);return}super.visitChildren(e)}}visitCharacter(e){Yn(this.targetCharCodes,e.value)&&(this.found=!0)}visitSet(e){e.complement?ase(e,this.targetCharCodes)===void 0&&(this.found=!0):ase(e,this.targetCharCodes)!==void 0&&(this.found=!0)}};o(JT,"canMatchCharCode")});function hse(t,e){e=rf(e,{useSticky:kR,debug:!1,safeMode:!1,positionTracking:"full",lineTerminatorCharacters:["\r",` +`],tracer:o((b,w)=>w(),"tracer")});let r=e.tracer;r("initCharCodeToOptimizedIndexMap",()=>{IBe()});let n;r("Reject Lexer.NA",()=>{n=af(t,b=>b[h0]===ci.NA)});let i=!1,a;r("Transform Patterns",()=>{i=!1,a=Qe(n,b=>{let w=b[h0];if(Xo(w)){let _=w.source;return _.length===1&&_!=="^"&&_!=="$"&&_!=="."&&!w.ignoreCase?_:_.length===2&&_[0]==="\\"&&!Yn(["d","D","s","S","t","r","n","t","0","c","b","B","f","v","w","W"],_[1])?_[1]:e.useSticky?use(w):cse(w)}else{if(_i(w))return i=!0,{exec:w};if(typeof w=="object")return i=!0,w;if(typeof w=="string"){if(w.length===1)return w;{let _=w.replace(/[\\^$.*+?()[\]{}|]/g,"\\$&"),T=new RegExp(_);return e.useSticky?use(T):cse(T)}}else throw Error("non exhaustive match")}})});let s,l,u,h,f;r("misc mapping",()=>{s=Qe(n,b=>b.tokenTypeIdx),l=Qe(n,b=>{let w=b.GROUP;if(w!==ci.SKIPPED){if(bi(w))return w;if(dr(w))return!1;throw Error("non exhaustive match")}}),u=Qe(n,b=>{let w=b.LONGER_ALT;if(w)return Dt(w)?Qe(w,T=>oT(n,T)):[oT(n,w)]}),h=Qe(n,b=>b.PUSH_MODE),f=Qe(n,b=>Nt(b,"POP_MODE"))});let d;r("Line Terminator Handling",()=>{let b=xse(e.lineTerminatorCharacters);d=Qe(n,w=>!1),e.positionTracking!=="onlyOffset"&&(d=Qe(n,w=>Nt(w,"LINE_BREAKS")?!!w.LINE_BREAKS:vse(w,b)===!1&&JT(b,w.PATTERN)))});let p,m,g,y;r("Misc Mapping #2",()=>{p=Qe(n,gse),m=Qe(a,RBe),g=qr(n,(b,w)=>{let _=w.GROUP;return bi(_)&&_!==ci.SKIPPED&&(b[_]=[]),b},{}),y=Qe(a,(b,w)=>({pattern:a[w],longerAlt:u[w],canLineTerminator:d[w],isCustom:p[w],short:m[w],group:l[w],push:h[w],pop:f[w],tokenTypeIdx:s[w],tokenType:n[w]}))});let v=!0,x=[];return e.safeMode||r("First Char Optimization",()=>{x=qr(n,(b,w,_)=>{if(typeof w.PATTERN=="string"){let T=w.PATTERN.charCodeAt(0),E=Gc(T);TR(b,E,y[_])}else if(Dt(w.START_CHARS_HINT)){let T;Se(w.START_CHARS_HINT,E=>{let L=typeof E=="string"?E.charCodeAt(0):E,S=Gc(L);T!==S&&(T=S,TR(b,S,y[_]))})}else if(Xo(w.PATTERN))if(w.PATTERN.unicode)v=!1,e.ensureOptimizations&&og(`${x2} Unable to analyze < ${w.PATTERN.toString()} > pattern. + The regexp unicode flag is not currently supported by the regexp-to-ast library. + This will disable the lexer's first char optimizations. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{let T=ose(w.PATTERN,e.ensureOptimizations);cr(T)&&(v=!1),Se(T,E=>{TR(b,E,y[_])})}else e.ensureOptimizations&&og(`${x2} TokenType: <${w.name}> is using a custom token pattern without providing parameter. + This will disable the lexer's first char optimizations. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),v=!1;return b},[])}),{emptyGroups:g,patternIdxToConfig:y,charCodeToPatternIdxToConfig:x,hasCustom:i,canBeOptimized:v}}function fse(t,e){let r=[],n=vBe(t);r=r.concat(n.errors);let i=xBe(n.valid),a=i.valid;return r=r.concat(i.errors),r=r.concat(yBe(a)),r=r.concat(ABe(a)),r=r.concat(_Be(a,e)),r=r.concat(LBe(a)),r}function yBe(t){let e=[],r=Yr(t,n=>Xo(n[h0]));return e=e.concat(wBe(r)),e=e.concat(EBe(r)),e=e.concat(SBe(r)),e=e.concat(CBe(r)),e=e.concat(TBe(r)),e}function vBe(t){let e=Yr(t,i=>!Nt(i,h0)),r=Qe(e,i=>({message:"Token Type: ->"+i.name+"<- missing static 'PATTERN' property",type:qn.MISSING_PATTERN,tokenTypes:[i]})),n=nf(t,e);return{errors:r,valid:n}}function xBe(t){let e=Yr(t,i=>{let a=i[h0];return!Xo(a)&&!_i(a)&&!Nt(a,"exec")&&!bi(a)}),r=Qe(e,i=>({message:"Token Type: ->"+i.name+"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.",type:qn.INVALID_PATTERN,tokenTypes:[i]})),n=nf(t,e);return{errors:r,valid:n}}function wBe(t){class e extends zc{static{o(this,"EndAnchorFinder")}constructor(){super(...arguments),this.found=!1}visitEndAnchor(a){this.found=!0}}let r=Yr(t,i=>{let a=i.PATTERN;try{let s=ug(a),l=new e;return l.visit(s),l.found}catch{return bBe.test(a.source)}});return Qe(r,i=>({message:`Unexpected RegExp Anchor Error: + Token Type: ->`+i.name+`<- static 'PATTERN' cannot contain end of input anchor '$' + See chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:qn.EOI_ANCHOR_FOUND,tokenTypes:[i]}))}function TBe(t){let e=Yr(t,n=>n.PATTERN.test(""));return Qe(e,n=>({message:"Token Type: ->"+n.name+"<- static 'PATTERN' must not match an empty string",type:qn.EMPTY_MATCH_PATTERN,tokenTypes:[n]}))}function EBe(t){class e extends zc{static{o(this,"StartAnchorFinder")}constructor(){super(...arguments),this.found=!1}visitStartAnchor(a){this.found=!0}}let r=Yr(t,i=>{let a=i.PATTERN;try{let s=ug(a),l=new e;return l.visit(s),l.found}catch{return kBe.test(a.source)}});return Qe(r,i=>({message:`Unexpected RegExp Anchor Error: + Token Type: ->`+i.name+`<- static 'PATTERN' cannot contain start of input anchor '^' + See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:qn.SOI_ANCHOR_FOUND,tokenTypes:[i]}))}function SBe(t){let e=Yr(t,n=>{let i=n[h0];return i instanceof RegExp&&(i.multiline||i.global)});return Qe(e,n=>({message:"Token Type: ->"+n.name+"<- static 'PATTERN' may NOT contain global('g') or multiline('m')",type:qn.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[n]}))}function CBe(t){let e=[],r=Qe(t,a=>qr(t,(s,l)=>(a.PATTERN.source===l.PATTERN.source&&!Yn(e,l)&&l.PATTERN!==ci.NA&&(e.push(l),s.push(l)),s),[]));r=Rc(r);let n=Yr(r,a=>a.length>1);return Qe(n,a=>{let s=Qe(a,u=>u.name);return{message:`The same RegExp pattern ->${sa(a).PATTERN}<-has been used in all of the following Token Types: ${s.join(", ")} <-`,type:qn.DUPLICATE_PATTERNS_FOUND,tokenTypes:a}})}function ABe(t){let e=Yr(t,n=>{if(!Nt(n,"GROUP"))return!1;let i=n.GROUP;return i!==ci.SKIPPED&&i!==ci.NA&&!bi(i)});return Qe(e,n=>({message:"Token Type: ->"+n.name+"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String",type:qn.INVALID_GROUP_TYPE_FOUND,tokenTypes:[n]}))}function _Be(t,e){let r=Yr(t,i=>i.PUSH_MODE!==void 0&&!Yn(e,i.PUSH_MODE));return Qe(r,i=>({message:`Token Type: ->${i.name}<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->${i.PUSH_MODE}<-which does not exist`,type:qn.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[i]}))}function LBe(t){let e=[],r=qr(t,(n,i,a)=>{let s=i.PATTERN;return s===ci.NA||(bi(s)?n.push({str:s,idx:a,tokenType:i}):Xo(s)&&NBe(s)&&n.push({str:s.source,idx:a,tokenType:i})),n},[]);return Se(t,(n,i)=>{Se(r,({str:a,idx:s,tokenType:l})=>{if(i${l.name}<- can never be matched. +Because it appears AFTER the Token Type ->${n.name}<-in the lexer's definition. +See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:u,type:qn.UNREACHABLE_PATTERN,tokenTypes:[n,l]})}})}),e}function DBe(t,e){if(Xo(e)){let r=e.exec(t);return r!==null&&r.index===0}else{if(_i(e))return e(t,0,[],{});if(Nt(e,"exec"))return e.exec(t,0,[],{});if(typeof e=="string")return e===t;throw Error("non exhaustive match")}}function NBe(t){return as([".","\\","[","]","|","^","$","(",")","?","*","+","{"],r=>t.source.indexOf(r)!==-1)===void 0}function cse(t){let e=t.ignoreCase?"i":"";return new RegExp(`^(?:${t.source})`,e)}function use(t){let e=t.ignoreCase?"iy":"y";return new RegExp(`${t.source}`,e)}function dse(t,e,r){let n=[];return Nt(t,fg)||n.push({message:"A MultiMode Lexer cannot be initialized without a <"+fg+`> property in its definition +`,type:qn.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),Nt(t,ek)||n.push({message:"A MultiMode Lexer cannot be initialized without a <"+ek+`> property in its definition +`,type:qn.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),Nt(t,ek)&&Nt(t,fg)&&!Nt(t.modes,t.defaultMode)&&n.push({message:`A MultiMode Lexer cannot be initialized with a ${fg}: <${t.defaultMode}>which does not exist +`,type:qn.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),Nt(t,ek)&&Se(t.modes,(i,a)=>{Se(i,(s,l)=>{if(dr(s))n.push({message:`A Lexer cannot be initialized using an undefined Token Type. Mode:<${a}> at index: <${l}> +`,type:qn.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED});else if(Nt(s,"LONGER_ALT")){let u=Dt(s.LONGER_ALT)?s.LONGER_ALT:[s.LONGER_ALT];Se(u,h=>{!dr(h)&&!Yn(i,h)&&n.push({message:`A MultiMode Lexer cannot be initialized with a longer_alt <${h.name}> on token <${s.name}> outside of mode <${a}> +`,type:qn.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE})})}})}),n}function pse(t,e,r){let n=[],i=!1,a=Rc(Wr(br(t.modes))),s=af(a,u=>u[h0]===ci.NA),l=xse(r);return e&&Se(s,u=>{let h=vse(u,l);if(h!==!1){let d={message:MBe(u,h),type:h.issue,tokenType:u};n.push(d)}else Nt(u,"LINE_BREAKS")?u.LINE_BREAKS===!0&&(i=!0):JT(l,u.PATTERN)&&(i=!0)}),e&&!i&&n.push({message:`Warning: No LINE_BREAKS Found. + This Lexer has been defined to track line and column information, + But none of the Token Types can be identified as matching a line terminator. + See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS + for details.`,type:qn.NO_LINE_BREAKS_FLAGS}),n}function mse(t){let e={},r=Gr(t);return Se(r,n=>{let i=t[n];if(Dt(i))e[n]=[];else throw Error("non exhaustive match")}),e}function gse(t){let e=t.PATTERN;if(Xo(e))return!1;if(_i(e))return!0;if(Nt(e,"exec"))return!0;if(bi(e))return!1;throw Error("non exhaustive match")}function RBe(t){return bi(t)&&t.length===1?t.charCodeAt(0):!1}function vse(t,e){if(Nt(t,"LINE_BREAKS"))return!1;if(Xo(t.PATTERN)){try{JT(e,t.PATTERN)}catch(r){return{issue:qn.IDENTIFY_TERMINATOR,errMsg:r.message}}return!1}else{if(bi(t.PATTERN))return!1;if(gse(t))return{issue:qn.CUSTOM_LINE_BREAK};throw Error("non exhaustive match")}}function MBe(t,e){if(e.issue===qn.IDENTIFY_TERMINATOR)return`Warning: unable to identify line terminator usage in pattern. + The problem is in the <${t.name}> Token Type + Root cause: ${e.errMsg}. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR`;if(e.issue===qn.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the option. + The problem is in the <${t.name}> Token Type + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK`;throw Error("non exhaustive match")}function xse(t){return Qe(t,r=>bi(r)?r.charCodeAt(0):r)}function TR(t,e,r){t[e]===void 0?t[e]=[r]:t[e].push(r)}function Gc(t){return t255?255+~~(t/255):t}}var h0,fg,ek,kR,bBe,kBe,yse,hg,tk,wR=M(()=>{"use strict";f2();b2();Ht();lg();lse();QT();h0="PATTERN",fg="defaultMode",ek="modes",kR=typeof new RegExp("(?:)").sticky=="boolean";o(hse,"analyzeTokenTypes");o(fse,"validatePatterns");o(yBe,"validateRegExpPattern");o(vBe,"findMissingPatterns");o(xBe,"findInvalidPatterns");bBe=/[^\\][$]/;o(wBe,"findEndOfInputAnchor");o(TBe,"findEmptyMatchRegExps");kBe=/[^\\[][\^]|^\^/;o(EBe,"findStartOfInputAnchor");o(SBe,"findUnsupportedFlags");o(CBe,"findDuplicatePatterns");o(ABe,"findInvalidGroupType");o(_Be,"findModesThatDoNotExist");o(LBe,"findUnreachablePatterns");o(DBe,"testTokenType");o(NBe,"noMetaChar");o(cse,"addStartOfInput");o(use,"addStickyFlag");o(dse,"performRuntimeChecks");o(pse,"performWarningRuntimeChecks");o(mse,"cloneEmptyGroups");o(gse,"isCustomPattern");o(RBe,"isShortPattern");yse={test:o(function(t){let e=t.length;for(let r=this.lastIndex;r{r.isParent=r.categoryMatches.length>0})}function OBe(t){let e=rn(t),r=t,n=!0;for(;n;){r=Rc(Wr(Qe(r,a=>a.CATEGORIES)));let i=nf(r,e);e=e.concat(i),cr(i)?n=!1:r=i}return e}function PBe(t){Se(t,e=>{ER(e)||(Tse[bse]=e,e.tokenTypeIdx=bse++),wse(e)&&!Dt(e.CATEGORIES)&&(e.CATEGORIES=[e.CATEGORIES]),wse(e)||(e.CATEGORIES=[]),zBe(e)||(e.categoryMatches=[]),GBe(e)||(e.categoryMatchesMap={})})}function BBe(t){Se(t,e=>{e.categoryMatches=[],Se(e.categoryMatchesMap,(r,n)=>{e.categoryMatches.push(Tse[n].tokenTypeIdx)})})}function FBe(t){Se(t,e=>{kse([],e)})}function kse(t,e){Se(t,r=>{e.categoryMatchesMap[r.tokenTypeIdx]=!0}),Se(e.CATEGORIES,r=>{let n=t.concat(e);Yn(n,r)||kse(n,r)})}function ER(t){return Nt(t,"tokenTypeIdx")}function wse(t){return Nt(t,"CATEGORIES")}function zBe(t){return Nt(t,"categoryMatches")}function GBe(t){return Nt(t,"categoryMatchesMap")}function Ese(t){return Nt(t,"tokenTypeIdx")}var bse,Tse,f0=M(()=>{"use strict";Ht();o(Wu,"tokenStructuredMatcher");o(dg,"tokenStructuredMatcherNoCategories");bse=1,Tse={};o(Yu,"augmentTokenTypes");o(OBe,"expandCategories");o(PBe,"assignTokenDefaultProps");o(BBe,"assignCategoriesTokensProp");o(FBe,"assignCategoriesMapProp");o(kse,"singleAssignCategoriesToksMap");o(ER,"hasShortKeyProperty");o(wse,"hasCategoriesProperty");o(zBe,"hasExtendingTokensTypesProperty");o(GBe,"hasExtendingTokensTypesMapProperty");o(Ese,"isTokenType")});var SR,CR=M(()=>{"use strict";SR={buildUnableToPopLexerModeMessage(t){return`Unable to pop Lexer Mode after encountering Token ->${t.image}<- The Mode Stack is empty`},buildUnexpectedCharactersMessage(t,e,r,n,i){return`unexpected character: ->${t.charAt(e)}<- at offset: ${e}, skipped ${r} characters.`}}});var qn,w2,ci,b2=M(()=>{"use strict";wR();Ht();lg();f0();CR();QT();(function(t){t[t.MISSING_PATTERN=0]="MISSING_PATTERN",t[t.INVALID_PATTERN=1]="INVALID_PATTERN",t[t.EOI_ANCHOR_FOUND=2]="EOI_ANCHOR_FOUND",t[t.UNSUPPORTED_FLAGS_FOUND=3]="UNSUPPORTED_FLAGS_FOUND",t[t.DUPLICATE_PATTERNS_FOUND=4]="DUPLICATE_PATTERNS_FOUND",t[t.INVALID_GROUP_TYPE_FOUND=5]="INVALID_GROUP_TYPE_FOUND",t[t.PUSH_MODE_DOES_NOT_EXIST=6]="PUSH_MODE_DOES_NOT_EXIST",t[t.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]="MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE",t[t.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]="MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY",t[t.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]="MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST",t[t.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]="LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED",t[t.SOI_ANCHOR_FOUND=11]="SOI_ANCHOR_FOUND",t[t.EMPTY_MATCH_PATTERN=12]="EMPTY_MATCH_PATTERN",t[t.NO_LINE_BREAKS_FLAGS=13]="NO_LINE_BREAKS_FLAGS",t[t.UNREACHABLE_PATTERN=14]="UNREACHABLE_PATTERN",t[t.IDENTIFY_TERMINATOR=15]="IDENTIFY_TERMINATOR",t[t.CUSTOM_LINE_BREAK=16]="CUSTOM_LINE_BREAK",t[t.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE=17]="MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE"})(qn||(qn={}));w2={deferDefinitionErrorsHandling:!1,positionTracking:"full",lineTerminatorsPattern:/\n|\r\n?/g,lineTerminatorCharacters:[` +`,"\r"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:SR,traceInitPerf:!1,skipValidations:!1,recoveryEnabled:!0};Object.freeze(w2);ci=class{static{o(this,"Lexer")}constructor(e,r=w2){if(this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},this.TRACE_INIT=(i,a)=>{if(this.traceInitPerf===!0){this.traceInitIndent++;let s=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent <${i}>`);let{time:l,value:u}=y2(a),h=l>10?console.warn:console.log;return this.traceInitIndent time: ${l}ms`),this.traceInitIndent--,u}else return a()},typeof r=="boolean")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object. +a boolean 2nd argument is no longer supported`);this.config=va({},w2,r);let n=this.config.traceInitPerf;n===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof n=="number"&&(this.traceInitMaxIdent=n,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT("Lexer Constructor",()=>{let i,a=!0;this.TRACE_INIT("Lexer Config handling",()=>{if(this.config.lineTerminatorsPattern===w2.lineTerminatorsPattern)this.config.lineTerminatorsPattern=yse;else if(this.config.lineTerminatorCharacters===w2.lineTerminatorCharacters)throw Error(`Error: Missing property on the Lexer config. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(r.safeMode&&r.ensureOptimizations)throw Error('"safeMode" and "ensureOptimizations" flags are mutually exclusive.');this.trackStartLines=/full|onlyStart/i.test(this.config.positionTracking),this.trackEndLines=/full/i.test(this.config.positionTracking),Dt(e)?i={modes:{defaultMode:rn(e)},defaultMode:fg}:(a=!1,i=rn(e))}),this.config.skipValidations===!1&&(this.TRACE_INIT("performRuntimeChecks",()=>{this.lexerDefinitionErrors=this.lexerDefinitionErrors.concat(dse(i,this.trackStartLines,this.config.lineTerminatorCharacters))}),this.TRACE_INIT("performWarningRuntimeChecks",()=>{this.lexerDefinitionWarning=this.lexerDefinitionWarning.concat(pse(i,this.trackStartLines,this.config.lineTerminatorCharacters))})),i.modes=i.modes?i.modes:{},Se(i.modes,(l,u)=>{i.modes[u]=af(l,h=>dr(h))});let s=Gr(i.modes);if(Se(i.modes,(l,u)=>{this.TRACE_INIT(`Mode: <${u}> processing`,()=>{if(this.modes.push(u),this.config.skipValidations===!1&&this.TRACE_INIT("validatePatterns",()=>{this.lexerDefinitionErrors=this.lexerDefinitionErrors.concat(fse(l,s))}),cr(this.lexerDefinitionErrors)){Yu(l);let h;this.TRACE_INIT("analyzeTokenTypes",()=>{h=hse(l,{lineTerminatorCharacters:this.config.lineTerminatorCharacters,positionTracking:r.positionTracking,ensureOptimizations:r.ensureOptimizations,safeMode:r.safeMode,tracer:this.TRACE_INIT})}),this.patternIdxToConfig[u]=h.patternIdxToConfig,this.charCodeToPatternIdxToConfig[u]=h.charCodeToPatternIdxToConfig,this.emptyGroups=va({},this.emptyGroups,h.emptyGroups),this.hasCustom=h.hasCustom||this.hasCustom,this.canModeBeOptimized[u]=h.canBeOptimized}})}),this.defaultMode=i.defaultMode,!cr(this.lexerDefinitionErrors)&&!this.config.deferDefinitionErrorsHandling){let u=Qe(this.lexerDefinitionErrors,h=>h.message).join(`----------------------- +`);throw new Error(`Errors detected in definition of Lexer: +`+u)}Se(this.lexerDefinitionWarning,l=>{g2(l.message)}),this.TRACE_INIT("Choosing sub-methods implementations",()=>{if(kR?(this.chopInput=aa,this.match=this.matchWithTest):(this.updateLastIndex=ti,this.match=this.matchWithExec),a&&(this.handleModes=ti),this.trackStartLines===!1&&(this.computeNewColumn=aa),this.trackEndLines===!1&&(this.updateTokenEndLineColumnLocation=ti),/full/i.test(this.config.positionTracking))this.createTokenInstance=this.createFullToken;else if(/onlyStart/i.test(this.config.positionTracking))this.createTokenInstance=this.createStartOnlyToken;else if(/onlyOffset/i.test(this.config.positionTracking))this.createTokenInstance=this.createOffsetOnlyToken;else throw Error(`Invalid config option: "${this.config.positionTracking}"`);this.hasCustom?(this.addToken=this.addTokenUsingPush,this.handlePayload=this.handlePayloadWithCustom):(this.addToken=this.addTokenUsingMemberAccess,this.handlePayload=this.handlePayloadNoCustom)}),this.TRACE_INIT("Failed Optimization Warnings",()=>{let l=qr(this.canModeBeOptimized,(u,h,f)=>(h===!1&&u.push(f),u),[]);if(r.ensureOptimizations&&!cr(l))throw Error(`Lexer Modes: < ${l.join(", ")} > cannot be optimized. + Disable the "ensureOptimizations" lexer config flag to silently ignore this and run the lexer in an un-optimized mode. + Or inspect the console log for details on how to resolve these issues.`)}),this.TRACE_INIT("clearRegExpParserCache",()=>{ise()}),this.TRACE_INIT("toFastProperties",()=>{v2(this)})})}tokenize(e,r=this.defaultMode){if(!cr(this.lexerDefinitionErrors)){let i=Qe(this.lexerDefinitionErrors,a=>a.message).join(`----------------------- +`);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer: +`+i)}return this.tokenizeInternal(e,r)}tokenizeInternal(e,r){let n,i,a,s,l,u,h,f,d,p,m,g,y,v,x,b,w=e,_=w.length,T=0,E=0,L=this.hasCustom?0:Math.floor(e.length/10),S=new Array(L),A=[],I=this.trackStartLines?1:void 0,D=this.trackStartLines?1:void 0,k=mse(this.emptyGroups),R=this.trackStartLines,C=this.config.lineTerminatorsPattern,O=0,N=[],P=[],F=[],B=[];Object.freeze(B);let G;function z(){return N}o(z,"getPossiblePatternsSlow");function W(ee){let J=Gc(ee),H=P[J];return H===void 0?B:H}o(W,"getPossiblePatternsOptimized");let Z=o(ee=>{if(F.length===1&&ee.tokenType.PUSH_MODE===void 0){let J=this.config.errorMessageProvider.buildUnableToPopLexerModeMessage(ee);A.push({offset:ee.startOffset,line:ee.startLine,column:ee.startColumn,length:ee.image.length,message:J})}else{F.pop();let J=xa(F);N=this.patternIdxToConfig[J],P=this.charCodeToPatternIdxToConfig[J],O=N.length;let H=this.canModeBeOptimized[J]&&this.config.safeMode===!1;P&&H?G=W:G=z}},"pop_mode");function j(ee){F.push(ee),P=this.charCodeToPatternIdxToConfig[ee],N=this.patternIdxToConfig[ee],O=N.length,O=N.length;let J=this.canModeBeOptimized[ee]&&this.config.safeMode===!1;P&&J?G=W:G=z}o(j,"push_mode"),j.call(this,r);let oe,K=this.config.recoveryEnabled;for(;T<_;){u=null;let ee=w.charCodeAt(T),J=G(ee),H=J.length;for(n=0;nu.length){u=s,h=f,oe=ue;break}}}break}}if(u!==null){if(d=u.length,p=oe.group,p!==void 0&&(m=oe.tokenTypeIdx,g=this.createTokenInstance(u,T,m,oe.tokenType,I,D,d),this.handlePayload(g,h),p===!1?E=this.addToken(S,E,g):k[p].push(g)),e=this.chopInput(e,d),T=T+d,D=this.computeNewColumn(D,d),R===!0&&oe.canLineTerminator===!0){let q=0,Q,ae;C.lastIndex=0;do Q=C.test(u),Q===!0&&(ae=C.lastIndex-1,q++);while(Q===!0);q!==0&&(I=I+q,D=d-ae,this.updateTokenEndLineColumnLocation(g,p,ae,q,I,D,d))}this.handleModes(oe,Z,j,g)}else{let q=T,Q=I,ae=D,ue=K===!1;for(;ue===!1&&T<_;)for(e=this.chopInput(e,1),T++,i=0;i{"use strict";Ht();b2();f0();o(qu,"tokenLabel");o(AR,"hasTokenLabel");$Be="parent",Sse="categories",Cse="label",Ase="group",_se="push_mode",Lse="pop_mode",Dse="longer_alt",Nse="line_breaks",Rse="start_chars_hint";o(rk,"createToken");o(VBe,"createTokenInternal");mo=rk({name:"EOF",pattern:ci.NA});Yu([mo]);o(d0,"createTokenInstance");o(T2,"tokenMatcher")});var Xu,Mse,Ul,pg=M(()=>{"use strict";p0();Ht();us();Xu={buildMismatchTokenMessage({expected:t,actual:e,previous:r,ruleName:n}){return`Expecting ${AR(t)?`--> ${qu(t)} <--`:`token of type --> ${t.name} <--`} but found --> '${e.image}' <--`},buildNotAllInputParsedMessage({firstRedundant:t,ruleName:e}){return"Redundant input, expecting EOF but found: "+t.image},buildNoViableAltMessage({expectedPathsPerAlt:t,actual:e,previous:r,customUserDescription:n,ruleName:i}){let a="Expecting: ",l=` +but found: '`+sa(e).image+"'";if(n)return a+n+l;{let u=qr(t,(p,m)=>p.concat(m),[]),h=Qe(u,p=>`[${Qe(p,m=>qu(m)).join(", ")}]`),d=`one of these possible Token sequences: +${Qe(h,(p,m)=>` ${m+1}. ${p}`).join(` +`)}`;return a+d+l}},buildEarlyExitMessage({expectedIterationPaths:t,actual:e,customUserDescription:r,ruleName:n}){let i="Expecting: ",s=` +but found: '`+sa(e).image+"'";if(r)return i+r+s;{let u=`expecting at least one iteration which starts with one of these possible Token sequences:: + <${Qe(t,h=>`[${Qe(h,f=>qu(f)).join(",")}]`).join(" ,")}>`;return i+u+s}}};Object.freeze(Xu);Mse={buildRuleNotFoundError(t,e){return"Invalid grammar, reference to a rule which is not defined: ->"+e.nonTerminalName+`<- +inside top level rule: ->`+t.name+"<-"}},Ul={buildDuplicateFoundError(t,e){function r(f){return f instanceof Er?f.terminalType.name:f instanceof nn?f.nonTerminalName:""}o(r,"getExtraProductionArgument");let n=t.name,i=sa(e),a=i.idx,s=Vs(i),l=r(i),u=a>0,h=`->${s}${u?a:""}<- ${l?`with argument: ->${l}<-`:""} + appears more than once (${e.length} times) in the top level rule: ->${n}<-. + For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES + `;return h=h.replace(/[ \t]+/g," "),h=h.replace(/\s\s+/g,` +`),h},buildNamespaceConflictError(t){return`Namespace conflict found in grammar. +The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <${t.name}>. +To resolve this make sure each Terminal and Non-Terminal names are unique +This is easy to accomplish by using the convention that Terminal names start with an uppercase letter +and Non-Terminal names start with a lower case letter.`},buildAlternationPrefixAmbiguityError(t){let e=Qe(t.prefixPath,i=>qu(i)).join(", "),r=t.alternation.idx===0?"":t.alternation.idx;return`Ambiguous alternatives: <${t.ambiguityIndices.join(" ,")}> due to common lookahead prefix +in inside <${t.topLevelRule.name}> Rule, +<${e}> may appears as a prefix path in all these alternatives. +See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX +For Further details.`},buildAlternationAmbiguityError(t){let e=Qe(t.prefixPath,i=>qu(i)).join(", "),r=t.alternation.idx===0?"":t.alternation.idx,n=`Ambiguous Alternatives Detected: <${t.ambiguityIndices.join(" ,")}> in inside <${t.topLevelRule.name}> Rule, +<${e}> may appears as a prefix path in all these alternatives. +`;return n=n+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES +For Further details.`,n},buildEmptyRepetitionError(t){let e=Vs(t.repetition);return t.repetition.idx!==0&&(e+=t.repetition.idx),`The repetition <${e}> within Rule <${t.topLevelRule.name}> can never consume any tokens. +This could lead to an infinite loop.`},buildTokenNameError(t){return"deprecated"},buildEmptyAlternationError(t){return`Ambiguous empty alternative: <${t.emptyChoiceIdx+1}> in inside <${t.topLevelRule.name}> Rule. +Only the last alternative may be an empty alternative.`},buildTooManyAlternativesError(t){return`An Alternation cannot have more than 256 alternatives: + inside <${t.topLevelRule.name}> Rule. + has ${t.alternation.definition.length+1} alternatives.`},buildLeftRecursionError(t){let e=t.topLevelRule.name,r=Qe(t.leftRecursionPath,a=>a.name),n=`${e} --> ${r.concat([e]).join(" --> ")}`;return`Left Recursion found in grammar. +rule: <${e}> can be invoked from itself (directly or indirectly) +without consuming any Tokens. The grammar path that causes this is: + ${n} + To fix this refactor your grammar to remove the left recursion. +see: https://en.wikipedia.org/wiki/LL_parser#Left_factoring.`},buildInvalidRuleNameError(t){return"deprecated"},buildDuplicateRuleNameError(t){let e;return t.topLevelRule instanceof ls?e=t.topLevelRule.name:e=t.topLevelRule,`Duplicate definition, rule: ->${e}<- is already defined in the grammar: ->${t.grammarName}<-`}}});function Ise(t,e){let r=new _R(t,e);return r.resolveRefs(),r.errors}var _R,Ose=M(()=>{"use strict";Us();Ht();us();o(Ise,"resolveGrammar");_R=class extends cs{static{o(this,"GastRefResolverVisitor")}constructor(e,r){super(),this.nameToTopRule=e,this.errMsgProvider=r,this.errors=[]}resolveRefs(){Se(br(this.nameToTopRule),e=>{this.currTopLevel=e,e.accept(this)})}visitNonTerminal(e){let r=this.nameToTopRule[e.nonTerminalName];if(r)e.referencedRule=r;else{let n=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,e);this.errors.push({message:n,type:Ui.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:e.nonTerminalName})}}}});function sk(t,e,r=[]){r=rn(r);let n=[],i=0;function a(l){return l.concat(xi(t,i+1))}o(a,"remainingPathWith");function s(l){let u=sk(a(l),e,r);return n.concat(u)}for(o(s,"getAlternativesForProd");r.length{cr(u.definition)===!1&&(n=s(u.definition))}),n;if(l instanceof Er)r.push(l.terminalType);else throw Error("non exhaustive match")}i++}return n.push({partialPath:r,suffixDef:xi(t,i)}),n}function ok(t,e,r,n){let i="EXIT_NONE_TERMINAL",a=[i],s="EXIT_ALTERNATIVE",l=!1,u=e.length,h=u-n-1,f=[],d=[];for(d.push({idx:-1,def:t,ruleStack:[],occurrenceStack:[]});!cr(d);){let p=d.pop();if(p===s){l&&xa(d).idx<=h&&d.pop();continue}let m=p.def,g=p.idx,y=p.ruleStack,v=p.occurrenceStack;if(cr(m))continue;let x=m[0];if(x===i){let b={idx:g,def:xi(m),ruleStack:zu(y),occurrenceStack:zu(v)};d.push(b)}else if(x instanceof Er)if(g=0;b--){let w=x.definition[b],_={idx:g,def:w.definition.concat(xi(m)),ruleStack:y,occurrenceStack:v};d.push(_),d.push(s)}else if(x instanceof _n)d.push({idx:g,def:x.definition.concat(xi(m)),ruleStack:y,occurrenceStack:v});else if(x instanceof ls)d.push(UBe(x,g,y,v));else throw Error("non exhaustive match")}return f}function UBe(t,e,r,n){let i=rn(r);i.push(t.name);let a=rn(n);return a.push(1),{idx:e,def:t.definition,ruleStack:i,occurrenceStack:a}}var LR,nk,mg,ik,k2,ak,E2,S2=M(()=>{"use strict";Ht();mR();XT();us();LR=class extends Hu{static{o(this,"AbstractNextPossibleTokensWalker")}constructor(e,r){super(),this.topProd=e,this.path=r,this.possibleTokTypes=[],this.nextProductionName="",this.nextProductionOccurrence=0,this.found=!1,this.isAtEndOfPath=!1}startWalking(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error("The path does not start with the walker's top Rule!");return this.ruleStack=rn(this.path.ruleStack).reverse(),this.occurrenceStack=rn(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes}walk(e,r=[]){this.found||super.walk(e,r)}walkProdRef(e,r,n){if(e.referencedRule.name===this.nextProductionName&&e.idx===this.nextProductionOccurrence){let i=r.concat(n);this.updateExpectedNext(),this.walk(e.referencedRule,i)}}updateExpectedNext(){cr(this.ruleStack)?(this.nextProductionName="",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())}},nk=class extends LR{static{o(this,"NextAfterTokenWalker")}constructor(e,r){super(e,r),this.path=r,this.nextTerminalName="",this.nextTerminalOccurrence=0,this.nextTerminalName=this.path.lastTok.name,this.nextTerminalOccurrence=this.path.lastTokOccurrence}walkTerminal(e,r,n){if(this.isAtEndOfPath&&e.terminalType.name===this.nextTerminalName&&e.idx===this.nextTerminalOccurrence&&!this.found){let i=r.concat(n),a=new _n({definition:i});this.possibleTokTypes=u0(a),this.found=!0}}},mg=class extends Hu{static{o(this,"AbstractNextTerminalAfterProductionWalker")}constructor(e,r){super(),this.topRule=e,this.occurrence=r,this.result={token:void 0,occurrence:void 0,isEndOfRule:void 0}}startWalking(){return this.walk(this.topRule),this.result}},ik=class extends mg{static{o(this,"NextTerminalAfterManyWalker")}walkMany(e,r,n){if(e.idx===this.occurrence){let i=sa(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof Er&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkMany(e,r,n)}},k2=class extends mg{static{o(this,"NextTerminalAfterManySepWalker")}walkManySep(e,r,n){if(e.idx===this.occurrence){let i=sa(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof Er&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkManySep(e,r,n)}},ak=class extends mg{static{o(this,"NextTerminalAfterAtLeastOneWalker")}walkAtLeastOne(e,r,n){if(e.idx===this.occurrence){let i=sa(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof Er&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkAtLeastOne(e,r,n)}},E2=class extends mg{static{o(this,"NextTerminalAfterAtLeastOneSepWalker")}walkAtLeastOneSep(e,r,n){if(e.idx===this.occurrence){let i=sa(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof Er&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkAtLeastOneSep(e,r,n)}};o(sk,"possiblePathsFrom");o(ok,"nextPossibleTokensAfter");o(UBe,"expandTopLevelRule")});function C2(t){if(t instanceof an||t==="Option")return Xn.OPTION;if(t instanceof Dr||t==="Repetition")return Xn.REPETITION;if(t instanceof Ln||t==="RepetitionMandatory")return Xn.REPETITION_MANDATORY;if(t instanceof Dn||t==="RepetitionMandatoryWithSeparator")return Xn.REPETITION_MANDATORY_WITH_SEPARATOR;if(t instanceof bn||t==="RepetitionWithSeparator")return Xn.REPETITION_WITH_SEPARATOR;if(t instanceof wn||t==="Alternation")return Xn.ALTERNATION;throw Error("non exhaustive match")}function ck(t){let{occurrence:e,rule:r,prodType:n,maxLookahead:i}=t,a=C2(n);return a===Xn.ALTERNATION?gg(e,r,i):yg(e,r,a,i)}function Bse(t,e,r,n,i,a){let s=gg(t,e,r),l=Use(s)?dg:Wu;return a(s,n,l,i)}function Fse(t,e,r,n,i,a){let s=yg(t,e,i,r),l=Use(s)?dg:Wu;return a(s[0],l,n)}function zse(t,e,r,n){let i=t.length,a=za(t,s=>za(s,l=>l.length===1));if(e)return function(s){let l=Qe(s,u=>u.GATE);for(let u=0;uWr(u)),l=qr(s,(u,h,f)=>(Se(h,d=>{Nt(u,d.tokenTypeIdx)||(u[d.tokenTypeIdx]=f),Se(d.categoryMatches,p=>{Nt(u,p)||(u[p]=f)})}),u),{});return function(){let u=this.LA(1);return l[u.tokenTypeIdx]}}else return function(){for(let s=0;sa.length===1),i=t.length;if(n&&!r){let a=Wr(t);if(a.length===1&&cr(a[0].categoryMatches)){let l=a[0].tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===l}}else{let s=qr(a,(l,u,h)=>(l[u.tokenTypeIdx]=!0,Se(u.categoryMatches,f=>{l[f]=!0}),l),[]);return function(){let l=this.LA(1);return s[l.tokenTypeIdx]===!0}}}else return function(){e:for(let a=0;ask([s],1)),n=Pse(r.length),i=Qe(r,s=>{let l={};return Se(s,u=>{let h=DR(u.partialPath);Se(h,f=>{l[f]=!0})}),l}),a=r;for(let s=1;s<=e;s++){let l=a;a=Pse(l.length);for(let u=0;u{let x=DR(v.partialPath);Se(x,b=>{i[u][b]=!0})})}}}}return n}function gg(t,e,r,n){let i=new lk(t,Xn.ALTERNATION,n);return e.accept(i),$se(i.result,r)}function yg(t,e,r,n){let i=new lk(t,r);e.accept(i);let a=i.result,l=new NR(e,t,r).startWalking(),u=new _n({definition:a}),h=new _n({definition:l});return $se([u,h],n)}function uk(t,e){e:for(let r=0;r{let i=e[n];return r===i||i.categoryMatchesMap[r.tokenTypeIdx]})}function Use(t){return za(t,e=>za(e,r=>za(r,n=>cr(n.categoryMatches))))}var Xn,NR,lk,vg=M(()=>{"use strict";Ht();S2();XT();f0();us();(function(t){t[t.OPTION=0]="OPTION",t[t.REPETITION=1]="REPETITION",t[t.REPETITION_MANDATORY=2]="REPETITION_MANDATORY",t[t.REPETITION_MANDATORY_WITH_SEPARATOR=3]="REPETITION_MANDATORY_WITH_SEPARATOR",t[t.REPETITION_WITH_SEPARATOR=4]="REPETITION_WITH_SEPARATOR",t[t.ALTERNATION=5]="ALTERNATION"})(Xn||(Xn={}));o(C2,"getProdType");o(ck,"getLookaheadPaths");o(Bse,"buildLookaheadFuncForOr");o(Fse,"buildLookaheadFuncForOptionalProd");o(zse,"buildAlternativesLookAheadFunc");o(Gse,"buildSingleAlternativeLookaheadFunction");NR=class extends Hu{static{o(this,"RestDefinitionFinderWalker")}constructor(e,r,n){super(),this.topProd=e,this.targetOccurrence=r,this.targetProdType=n}startWalking(){return this.walk(this.topProd),this.restDef}checkIsTarget(e,r,n,i){return e.idx===this.targetOccurrence&&this.targetProdType===r?(this.restDef=n.concat(i),!0):!1}walkOption(e,r,n){this.checkIsTarget(e,Xn.OPTION,r,n)||super.walkOption(e,r,n)}walkAtLeastOne(e,r,n){this.checkIsTarget(e,Xn.REPETITION_MANDATORY,r,n)||super.walkOption(e,r,n)}walkAtLeastOneSep(e,r,n){this.checkIsTarget(e,Xn.REPETITION_MANDATORY_WITH_SEPARATOR,r,n)||super.walkOption(e,r,n)}walkMany(e,r,n){this.checkIsTarget(e,Xn.REPETITION,r,n)||super.walkOption(e,r,n)}walkManySep(e,r,n){this.checkIsTarget(e,Xn.REPETITION_WITH_SEPARATOR,r,n)||super.walkOption(e,r,n)}},lk=class extends cs{static{o(this,"InsideDefinitionFinderVisitor")}constructor(e,r,n){super(),this.targetOccurrence=e,this.targetProdType=r,this.targetRef=n,this.result=[]}checkIsTarget(e,r){e.idx===this.targetOccurrence&&this.targetProdType===r&&(this.targetRef===void 0||e===this.targetRef)&&(this.result=e.definition)}visitOption(e){this.checkIsTarget(e,Xn.OPTION)}visitRepetition(e){this.checkIsTarget(e,Xn.REPETITION)}visitRepetitionMandatory(e){this.checkIsTarget(e,Xn.REPETITION_MANDATORY)}visitRepetitionMandatoryWithSeparator(e){this.checkIsTarget(e,Xn.REPETITION_MANDATORY_WITH_SEPARATOR)}visitRepetitionWithSeparator(e){this.checkIsTarget(e,Xn.REPETITION_WITH_SEPARATOR)}visitAlternation(e){this.checkIsTarget(e,Xn.ALTERNATION)}};o(Pse,"initializeArrayOfArrays");o(DR,"pathToHashKeys");o(HBe,"isUniquePrefixHash");o($se,"lookAheadSequenceFromAlternatives");o(gg,"getLookaheadPathsForOr");o(yg,"getLookaheadPathsForOptionalProd");o(uk,"containsPath");o(Vse,"isStrictPrefixOfPath");o(Use,"areTokenCategoriesNotUsed")});function Hse(t){let e=t.lookaheadStrategy.validate({rules:t.rules,tokenTypes:t.tokenTypes,grammarName:t.grammarName});return Qe(e,r=>Object.assign({type:Ui.CUSTOM_LOOKAHEAD_VALIDATION},r))}function Wse(t,e,r,n){let i=ba(t,u=>WBe(u,r)),a=QBe(t,e,r),s=ba(t,u=>XBe(u,r)),l=ba(t,u=>qBe(u,t,n,r));return i.concat(a,s,l)}function WBe(t,e){let r=new RR;t.accept(r);let n=r.allProductions,i=WL(n,YBe),a=zs(i,l=>l.length>1);return Qe(br(a),l=>{let u=sa(l),h=e.buildDuplicateFoundError(t,l),f=Vs(u),d={message:h,type:Ui.DUPLICATE_PRODUCTIONS,ruleName:t.name,dslName:f,occurrence:u.idx},p=Yse(u);return p&&(d.parameter=p),d})}function YBe(t){return`${Vs(t)}_#_${t.idx}_#_${Yse(t)}`}function Yse(t){return t instanceof Er?t.terminalType.name:t instanceof nn?t.nonTerminalName:""}function qBe(t,e,r,n){let i=[];if(qr(e,(s,l)=>l.name===t.name?s+1:s,0)>1){let s=n.buildDuplicateRuleNameError({topLevelRule:t,grammarName:r});i.push({message:s,type:Ui.DUPLICATE_RULE_NAME,ruleName:t.name})}return i}function qse(t,e,r){let n=[],i;return Yn(e,t)||(i=`Invalid rule override, rule: ->${t}<- cannot be overridden in the grammar: ->${r}<-as it is not defined in any of the super grammars `,n.push({message:i,type:Ui.INVALID_RULE_OVERRIDE,ruleName:t})),n}function IR(t,e,r,n=[]){let i=[],a=hk(e.definition);if(cr(a))return[];{let s=t.name;Yn(a,t)&&i.push({message:r.buildLeftRecursionError({topLevelRule:t,leftRecursionPath:n}),type:Ui.LEFT_RECURSION,ruleName:s});let u=nf(a,n.concat([t])),h=ba(u,f=>{let d=rn(n);return d.push(f),IR(t,f,r,d)});return i.concat(h)}}function hk(t){let e=[];if(cr(t))return e;let r=sa(t);if(r instanceof nn)e.push(r.referencedRule);else if(r instanceof _n||r instanceof an||r instanceof Ln||r instanceof Dn||r instanceof bn||r instanceof Dr)e=e.concat(hk(r.definition));else if(r instanceof wn)e=Wr(Qe(r.definition,a=>hk(a.definition)));else if(!(r instanceof Er))throw Error("non exhaustive match");let n=c0(r),i=t.length>1;if(n&&i){let a=xi(t);return e.concat(hk(a))}else return e}function Xse(t,e){let r=new A2;t.accept(r);let n=r.alternations;return ba(n,a=>{let s=zu(a.definition);return ba(s,(l,u)=>{let h=ok([l],[],Wu,1);return cr(h)?[{message:e.buildEmptyAlternationError({topLevelRule:t,alternation:a,emptyChoiceIdx:u}),type:Ui.NONE_LAST_EMPTY_ALT,ruleName:t.name,occurrence:a.idx,alternative:u+1}]:[]})})}function jse(t,e,r){let n=new A2;t.accept(n);let i=n.alternations;return i=af(i,s=>s.ignoreAmbiguities===!0),ba(i,s=>{let l=s.idx,u=s.maxLookahead||e,h=gg(l,t,u,s),f=jBe(h,s,t,r),d=KBe(h,s,t,r);return f.concat(d)})}function XBe(t,e){let r=new A2;t.accept(r);let n=r.alternations;return ba(n,a=>a.definition.length>255?[{message:e.buildTooManyAlternativesError({topLevelRule:t,alternation:a}),type:Ui.TOO_MANY_ALTS,ruleName:t.name,occurrence:a.idx}]:[])}function Kse(t,e,r){let n=[];return Se(t,i=>{let a=new MR;i.accept(a);let s=a.allProductions;Se(s,l=>{let u=C2(l),h=l.maxLookahead||e,f=l.idx,p=yg(f,i,u,h)[0];if(cr(Wr(p))){let m=r.buildEmptyRepetitionError({topLevelRule:i,repetition:l});n.push({message:m,type:Ui.NO_NON_EMPTY_LOOKAHEAD,ruleName:i.name})}})}),n}function jBe(t,e,r,n){let i=[],a=qr(t,(l,u,h)=>(e.definition[h].ignoreAmbiguities===!0||Se(u,f=>{let d=[h];Se(t,(p,m)=>{h!==m&&uk(p,f)&&e.definition[m].ignoreAmbiguities!==!0&&d.push(m)}),d.length>1&&!uk(i,f)&&(i.push(f),l.push({alts:d,path:f}))}),l),[]);return Qe(a,l=>{let u=Qe(l.alts,f=>f+1);return{message:n.buildAlternationAmbiguityError({topLevelRule:r,alternation:e,ambiguityIndices:u,prefixPath:l.path}),type:Ui.AMBIGUOUS_ALTS,ruleName:r.name,occurrence:e.idx,alternatives:l.alts}})}function KBe(t,e,r,n){let i=qr(t,(s,l,u)=>{let h=Qe(l,f=>({idx:u,path:f}));return s.concat(h)},[]);return Rc(ba(i,s=>{if(e.definition[s.idx].ignoreAmbiguities===!0)return[];let u=s.idx,h=s.path,f=Yr(i,p=>e.definition[p.idx].ignoreAmbiguities!==!0&&p.idx{let m=[p.idx+1,u+1],g=e.idx===0?"":e.idx;return{message:n.buildAlternationPrefixAmbiguityError({topLevelRule:r,alternation:e,ambiguityIndices:m,prefixPath:p.path}),type:Ui.AMBIGUOUS_PREFIX_ALTS,ruleName:r.name,occurrence:g,alternatives:m}})}))}function QBe(t,e,r){let n=[],i=Qe(e,a=>a.name);return Se(t,a=>{let s=a.name;if(Yn(i,s)){let l=r.buildNamespaceConflictError(a);n.push({message:l,type:Ui.CONFLICT_TOKENS_RULES_NAMESPACE,ruleName:s})}}),n}var RR,A2,MR,_2=M(()=>{"use strict";Ht();Us();us();vg();S2();f0();o(Hse,"validateLookahead");o(Wse,"validateGrammar");o(WBe,"validateDuplicateProductions");o(YBe,"identifyProductionForDuplicates");o(Yse,"getExtraProductionArgument");RR=class extends cs{static{o(this,"OccurrenceValidationCollector")}constructor(){super(...arguments),this.allProductions=[]}visitNonTerminal(e){this.allProductions.push(e)}visitOption(e){this.allProductions.push(e)}visitRepetitionWithSeparator(e){this.allProductions.push(e)}visitRepetitionMandatory(e){this.allProductions.push(e)}visitRepetitionMandatoryWithSeparator(e){this.allProductions.push(e)}visitRepetition(e){this.allProductions.push(e)}visitAlternation(e){this.allProductions.push(e)}visitTerminal(e){this.allProductions.push(e)}};o(qBe,"validateRuleDoesNotAlreadyExist");o(qse,"validateRuleIsOverridden");o(IR,"validateNoLeftRecursion");o(hk,"getFirstNoneTerminal");A2=class extends cs{static{o(this,"OrCollector")}constructor(){super(...arguments),this.alternations=[]}visitAlternation(e){this.alternations.push(e)}};o(Xse,"validateEmptyOrAlternative");o(jse,"validateAmbiguousAlternationAlternatives");MR=class extends cs{static{o(this,"RepetitionCollector")}constructor(){super(...arguments),this.allProductions=[]}visitRepetitionWithSeparator(e){this.allProductions.push(e)}visitRepetitionMandatory(e){this.allProductions.push(e)}visitRepetitionMandatoryWithSeparator(e){this.allProductions.push(e)}visitRepetition(e){this.allProductions.push(e)}};o(XBe,"validateTooManyAlts");o(Kse,"validateSomeNonEmptyLookaheadPath");o(jBe,"checkAlternativesAmbiguities");o(KBe,"checkPrefixAlternativesAmbiguities");o(QBe,"checkTerminalAndNoneTerminalsNameSpace")});function Qse(t){let e=rf(t,{errMsgProvider:Mse}),r={};return Se(t.rules,n=>{r[n.name]=n}),Ise(r,e.errMsgProvider)}function Zse(t){return t=rf(t,{errMsgProvider:Ul}),Wse(t.rules,t.tokenTypes,t.errMsgProvider,t.grammarName)}var Jse=M(()=>{"use strict";Ht();Ose();_2();pg();o(Qse,"resolveGrammar");o(Zse,"validateGrammar")});function ff(t){return Yn(ioe,t.name)}var eoe,toe,roe,noe,ioe,xg,m0,L2,D2,N2,bg=M(()=>{"use strict";Ht();eoe="MismatchedTokenException",toe="NoViableAltException",roe="EarlyExitException",noe="NotAllInputParsedException",ioe=[eoe,toe,roe,noe];Object.freeze(ioe);o(ff,"isRecognitionException");xg=class extends Error{static{o(this,"RecognitionException")}constructor(e,r){super(e),this.token=r,this.resyncedTokens=[],Object.setPrototypeOf(this,new.target.prototype),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}},m0=class extends xg{static{o(this,"MismatchedTokenException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=eoe}},L2=class extends xg{static{o(this,"NoViableAltException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=toe}},D2=class extends xg{static{o(this,"NotAllInputParsedException")}constructor(e,r){super(e,r),this.name=noe}},N2=class extends xg{static{o(this,"EarlyExitException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=roe}}});function ZBe(t,e,r,n,i,a,s){let l=this.getKeyForAutomaticLookahead(n,i),u=this.firstAfterRepMap[l];if(u===void 0){let p=this.getCurrRuleFullName(),m=this.getGAstProductions()[p];u=new a(m,i).startWalking(),this.firstAfterRepMap[l]=u}let h=u.token,f=u.occurrence,d=u.isEndOfRule;this.RULE_STACK.length===1&&d&&h===void 0&&(h=mo,f=1),!(h===void 0||f===void 0)&&this.shouldInRepetitionRecoveryBeTried(h,f,s)&&this.tryInRepetitionRecovery(t,e,r,h)}var OR,BR,PR,fk,FR=M(()=>{"use strict";p0();Ht();bg();gR();Us();OR={},BR="InRuleRecoveryException",PR=class extends Error{static{o(this,"InRuleRecoveryException")}constructor(e){super(e),this.name=BR}},fk=class{static{o(this,"Recoverable")}initRecoverable(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=Nt(e,"recoveryEnabled")?e.recoveryEnabled:hs.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=ZBe)}getTokenToInsert(e){let r=d0(e,"",NaN,NaN,NaN,NaN,NaN,NaN);return r.isInsertedInRecovery=!0,r}canTokenTypeBeInsertedInRecovery(e){return!0}canTokenTypeBeDeletedInRecovery(e){return!0}tryInRepetitionRecovery(e,r,n,i){let a=this.findReSyncTokenType(),s=this.exportLexerState(),l=[],u=!1,h=this.LA(1),f=this.LA(1),d=o(()=>{let p=this.LA(0),m=this.errorMessageProvider.buildMismatchTokenMessage({expected:i,actual:h,previous:p,ruleName:this.getCurrRuleFullName()}),g=new m0(m,h,this.LA(0));g.resyncedTokens=zu(l),this.SAVE_ERROR(g)},"generateErrorMessage");for(;!u;)if(this.tokenMatcher(f,i)){d();return}else if(n.call(this)){d(),e.apply(this,r);return}else this.tokenMatcher(f,a)?u=!0:(f=this.SKIP_TOKEN(),this.addToResyncTokens(f,l));this.importLexerState(s)}shouldInRepetitionRecoveryBeTried(e,r,n){return!(n===!1||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,r)))}getFollowsForInRuleRecovery(e,r){let n=this.getCurrentGrammarPath(e,r);return this.getNextPossibleTokenTypes(n)}tryInRuleRecovery(e,r){if(this.canRecoverWithSingleTokenInsertion(e,r))return this.getTokenToInsert(e);if(this.canRecoverWithSingleTokenDeletion(e)){let n=this.SKIP_TOKEN();return this.consumeToken(),n}throw new PR("sad sad panda")}canPerformInRuleRecovery(e,r){return this.canRecoverWithSingleTokenInsertion(e,r)||this.canRecoverWithSingleTokenDeletion(e)}canRecoverWithSingleTokenInsertion(e,r){if(!this.canTokenTypeBeInsertedInRecovery(e)||cr(r))return!1;let n=this.LA(1);return as(r,a=>this.tokenMatcher(n,a))!==void 0}canRecoverWithSingleTokenDeletion(e){return this.canTokenTypeBeDeletedInRecovery(e)?this.tokenMatcher(this.LA(2),e):!1}isInCurrentRuleReSyncSet(e){let r=this.getCurrFollowKey(),n=this.getFollowSetFromFollowKey(r);return Yn(n,e)}findReSyncTokenType(){let e=this.flattenFollowSet(),r=this.LA(1),n=2;for(;;){let i=as(e,a=>T2(r,a));if(i!==void 0)return i;r=this.LA(n),n++}}getCurrFollowKey(){if(this.RULE_STACK.length===1)return OR;let e=this.getLastExplicitRuleShortName(),r=this.getLastExplicitRuleOccurrenceIndex(),n=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:r,inRule:this.shortRuleNameToFullName(n)}}buildFullFollowKeyStack(){let e=this.RULE_STACK,r=this.RULE_OCCURRENCE_STACK;return Qe(e,(n,i)=>i===0?OR:{ruleName:this.shortRuleNameToFullName(n),idxInCallingRule:r[i],inRule:this.shortRuleNameToFullName(e[i-1])})}flattenFollowSet(){let e=Qe(this.buildFullFollowKeyStack(),r=>this.getFollowSetFromFollowKey(r));return Wr(e)}getFollowSetFromFollowKey(e){if(e===OR)return[mo];let r=e.ruleName+e.idxInCallingRule+jT+e.inRule;return this.resyncFollows[r]}addToResyncTokens(e,r){return this.tokenMatcher(e,mo)||r.push(e),r}reSyncTo(e){let r=[],n=this.LA(1);for(;this.tokenMatcher(n,e)===!1;)n=this.SKIP_TOKEN(),this.addToResyncTokens(n,r);return zu(r)}attemptInRepetitionRecovery(e,r,n,i,a,s,l){}getCurrentGrammarPath(e,r){let n=this.getHumanReadableRuleStack(),i=rn(this.RULE_OCCURRENCE_STACK);return{ruleStack:n,occurrenceStack:i,lastTok:e,lastTokOccurrence:r}}getHumanReadableRuleStack(){return Qe(this.RULE_STACK,e=>this.shortRuleNameToFullName(e))}};o(ZBe,"attemptInRepetitionRecovery")});function dk(t,e,r){return r|e|t}var pk=M(()=>{"use strict";o(dk,"getKeyForAutomaticLookahead")});var ju,zR=M(()=>{"use strict";Ht();pg();Us();_2();vg();ju=class{static{o(this,"LLkLookaheadStrategy")}constructor(e){var r;this.maxLookahead=(r=e?.maxLookahead)!==null&&r!==void 0?r:hs.maxLookahead}validate(e){let r=this.validateNoLeftRecursion(e.rules);if(cr(r)){let n=this.validateEmptyOrAlternatives(e.rules),i=this.validateAmbiguousAlternationAlternatives(e.rules,this.maxLookahead),a=this.validateSomeNonEmptyLookaheadPath(e.rules,this.maxLookahead);return[...r,...n,...i,...a]}return r}validateNoLeftRecursion(e){return ba(e,r=>IR(r,r,Ul))}validateEmptyOrAlternatives(e){return ba(e,r=>Xse(r,Ul))}validateAmbiguousAlternationAlternatives(e,r){return ba(e,n=>jse(n,r,Ul))}validateSomeNonEmptyLookaheadPath(e,r){return Kse(e,r,Ul)}buildLookaheadForAlternation(e){return Bse(e.prodOccurrence,e.rule,e.maxLookahead,e.hasPredicates,e.dynamicTokensEnabled,zse)}buildLookaheadForOptional(e){return Fse(e.prodOccurrence,e.rule,e.maxLookahead,e.dynamicTokensEnabled,C2(e.prodType),Gse)}}});function JBe(t){mk.reset(),t.accept(mk);let e=mk.dslMethods;return mk.reset(),e}var gk,GR,mk,aoe=M(()=>{"use strict";Ht();Us();pk();us();zR();gk=class{static{o(this,"LooksAhead")}initLooksAhead(e){this.dynamicTokensEnabled=Nt(e,"dynamicTokensEnabled")?e.dynamicTokensEnabled:hs.dynamicTokensEnabled,this.maxLookahead=Nt(e,"maxLookahead")?e.maxLookahead:hs.maxLookahead,this.lookaheadStrategy=Nt(e,"lookaheadStrategy")?e.lookaheadStrategy:new ju({maxLookahead:this.maxLookahead}),this.lookAheadFuncsCache=new Map}preComputeLookaheadFunctions(e){Se(e,r=>{this.TRACE_INIT(`${r.name} Rule Lookahead`,()=>{let{alternation:n,repetition:i,option:a,repetitionMandatory:s,repetitionMandatoryWithSeparator:l,repetitionWithSeparator:u}=JBe(r);Se(n,h=>{let f=h.idx===0?"":h.idx;this.TRACE_INIT(`${Vs(h)}${f}`,()=>{let d=this.lookaheadStrategy.buildLookaheadForAlternation({prodOccurrence:h.idx,rule:r,maxLookahead:h.maxLookahead||this.maxLookahead,hasPredicates:h.hasPredicates,dynamicTokensEnabled:this.dynamicTokensEnabled}),p=dk(this.fullRuleNameToShort[r.name],256,h.idx);this.setLaFuncCache(p,d)})}),Se(i,h=>{this.computeLookaheadFunc(r,h.idx,768,"Repetition",h.maxLookahead,Vs(h))}),Se(a,h=>{this.computeLookaheadFunc(r,h.idx,512,"Option",h.maxLookahead,Vs(h))}),Se(s,h=>{this.computeLookaheadFunc(r,h.idx,1024,"RepetitionMandatory",h.maxLookahead,Vs(h))}),Se(l,h=>{this.computeLookaheadFunc(r,h.idx,1536,"RepetitionMandatoryWithSeparator",h.maxLookahead,Vs(h))}),Se(u,h=>{this.computeLookaheadFunc(r,h.idx,1280,"RepetitionWithSeparator",h.maxLookahead,Vs(h))})})})}computeLookaheadFunc(e,r,n,i,a,s){this.TRACE_INIT(`${s}${r===0?"":r}`,()=>{let l=this.lookaheadStrategy.buildLookaheadForOptional({prodOccurrence:r,rule:e,maxLookahead:a||this.maxLookahead,dynamicTokensEnabled:this.dynamicTokensEnabled,prodType:i}),u=dk(this.fullRuleNameToShort[e.name],n,r);this.setLaFuncCache(u,l)})}getKeyForAutomaticLookahead(e,r){let n=this.getLastExplicitRuleShortName();return dk(n,e,r)}getLaFuncFromCache(e){return this.lookAheadFuncsCache.get(e)}setLaFuncCache(e,r){this.lookAheadFuncsCache.set(e,r)}},GR=class extends cs{static{o(this,"DslMethodsCollectorVisitor")}constructor(){super(...arguments),this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}}reset(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}}visitOption(e){this.dslMethods.option.push(e)}visitRepetitionWithSeparator(e){this.dslMethods.repetitionWithSeparator.push(e)}visitRepetitionMandatory(e){this.dslMethods.repetitionMandatory.push(e)}visitRepetitionMandatoryWithSeparator(e){this.dslMethods.repetitionMandatoryWithSeparator.push(e)}visitRepetition(e){this.dslMethods.repetition.push(e)}visitAlternation(e){this.dslMethods.alternation.push(e)}},mk=new GR;o(JBe,"collectMethods")});function UR(t,e){isNaN(t.startOffset)===!0?(t.startOffset=e.startOffset,t.endOffset=e.endOffset):t.endOffset{"use strict";o(UR,"setNodeLocationOnlyOffset");o(HR,"setNodeLocationFull");o(soe,"addTerminalToCst");o(ooe,"addNoneTerminalToCst")});function WR(t,e){Object.defineProperty(t,eFe,{enumerable:!1,configurable:!0,writable:!1,value:e})}var eFe,coe=M(()=>{"use strict";eFe="name";o(WR,"defineNameProp")});function tFe(t,e){let r=Gr(t),n=r.length;for(let i=0;is.msg);throw Error(`Errors Detected in CST Visitor <${this.constructor.name}>: + ${a.join(` + +`).replace(/\n/g,` + `)}`)}},"validateVisitor")};return r.prototype=n,r.prototype.constructor=r,r._RULE_NAMES=e,r}function hoe(t,e,r){let n=o(function(){},"derivedConstructor");WR(n,t+"BaseSemanticsWithDefaults");let i=Object.create(r.prototype);return Se(e,a=>{i[a]=tFe}),n.prototype=i,n.prototype.constructor=n,n}function rFe(t,e){return nFe(t,e)}function nFe(t,e){let r=Yr(e,i=>_i(t[i])===!1),n=Qe(r,i=>({msg:`Missing visitor method: <${i}> on ${t.constructor.name} CST Visitor.`,type:YR.MISSING_METHOD,methodName:i}));return Rc(n)}var YR,foe=M(()=>{"use strict";Ht();coe();o(tFe,"defaultVisit");o(uoe,"createBaseSemanticVisitorConstructor");o(hoe,"createBaseVisitorConstructorWithDefaults");(function(t){t[t.REDUNDANT_METHOD=0]="REDUNDANT_METHOD",t[t.MISSING_METHOD=1]="MISSING_METHOD"})(YR||(YR={}));o(rFe,"validateVisitor");o(nFe,"validateMissingCstMethods")});var bk,doe=M(()=>{"use strict";loe();Ht();foe();Us();bk=class{static{o(this,"TreeBuilder")}initTreeBuilder(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=Nt(e,"nodeLocationTracking")?e.nodeLocationTracking:hs.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=ti,this.cstFinallyStateUpdate=ti,this.cstPostTerminal=ti,this.cstPostNonTerminal=ti,this.cstPostRule=ti;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=HR,this.setNodeLocationFromNode=HR,this.cstPostRule=ti,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=ti,this.setNodeLocationFromNode=ti,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=UR,this.setNodeLocationFromNode=UR,this.cstPostRule=ti,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=ti,this.setNodeLocationFromNode=ti,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=ti,this.setNodeLocationFromNode=ti,this.cstPostRule=ti,this.setInitialNodeLocation=ti;else throw Error(`Invalid config option: "${e.nodeLocationTracking}"`)}setInitialNodeLocationOnlyOffsetRecovery(e){e.location={startOffset:NaN,endOffset:NaN}}setInitialNodeLocationOnlyOffsetRegular(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}}setInitialNodeLocationFullRecovery(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}}setInitialNodeLocationFullRegular(e){let r=this.LA(1);e.location={startOffset:r.startOffset,startLine:r.startLine,startColumn:r.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}}cstInvocationStateUpdate(e){let r={name:e,children:Object.create(null)};this.setInitialNodeLocation(r),this.CST_STACK.push(r)}cstFinallyStateUpdate(){this.CST_STACK.pop()}cstPostRuleFull(e){let r=this.LA(0),n=e.location;n.startOffset<=r.startOffset?(n.endOffset=r.endOffset,n.endLine=r.endLine,n.endColumn=r.endColumn):(n.startOffset=NaN,n.startLine=NaN,n.startColumn=NaN)}cstPostRuleOnlyOffset(e){let r=this.LA(0),n=e.location;n.startOffset<=r.startOffset?n.endOffset=r.endOffset:n.startOffset=NaN}cstPostTerminal(e,r){let n=this.CST_STACK[this.CST_STACK.length-1];soe(n,r,e),this.setNodeLocationFromToken(n.location,r)}cstPostNonTerminal(e,r){let n=this.CST_STACK[this.CST_STACK.length-1];ooe(n,r,e),this.setNodeLocationFromNode(n.location,e.location)}getBaseCstVisitorConstructor(){if(dr(this.baseCstVisitorConstructor)){let e=uoe(this.className,Gr(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor}getBaseCstVisitorConstructorWithDefaults(){if(dr(this.baseCstVisitorWithDefaultsConstructor)){let e=hoe(this.className,Gr(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor}getLastExplicitRuleShortName(){let e=this.RULE_STACK;return e[e.length-1]}getPreviousExplicitRuleShortName(){let e=this.RULE_STACK;return e[e.length-2]}getLastExplicitRuleOccurrenceIndex(){let e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]}}});var wk,poe=M(()=>{"use strict";Us();wk=class{static{o(this,"LexerAdapter")}initLexerAdapter(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1}set input(e){if(this.selfAnalysisDone!==!0)throw Error("Missing invocation at the end of the Parser's constructor.");this.reset(),this.tokVector=e,this.tokVectorLength=e.length}get input(){return this.tokVector}SKIP_TOKEN(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):wg}LA(e){let r=this.currIdx+e;return r<0||this.tokVectorLength<=r?wg:this.tokVector[r]}consumeToken(){this.currIdx++}exportLexerState(){return this.currIdx}importLexerState(e){this.currIdx=e}resetLexerState(){this.currIdx=-1}moveToTerminatedState(){this.currIdx=this.tokVector.length-1}getLexerPosition(){return this.exportLexerState()}}});var Tk,moe=M(()=>{"use strict";Ht();bg();Us();pg();_2();us();Tk=class{static{o(this,"RecognizerApi")}ACTION(e){return e.call(this)}consume(e,r,n){return this.consumeInternal(r,e,n)}subrule(e,r,n){return this.subruleInternal(r,e,n)}option(e,r){return this.optionInternal(r,e)}or(e,r){return this.orInternal(r,e)}many(e,r){return this.manyInternal(e,r)}atLeastOne(e,r){return this.atLeastOneInternal(e,r)}CONSUME(e,r){return this.consumeInternal(e,0,r)}CONSUME1(e,r){return this.consumeInternal(e,1,r)}CONSUME2(e,r){return this.consumeInternal(e,2,r)}CONSUME3(e,r){return this.consumeInternal(e,3,r)}CONSUME4(e,r){return this.consumeInternal(e,4,r)}CONSUME5(e,r){return this.consumeInternal(e,5,r)}CONSUME6(e,r){return this.consumeInternal(e,6,r)}CONSUME7(e,r){return this.consumeInternal(e,7,r)}CONSUME8(e,r){return this.consumeInternal(e,8,r)}CONSUME9(e,r){return this.consumeInternal(e,9,r)}SUBRULE(e,r){return this.subruleInternal(e,0,r)}SUBRULE1(e,r){return this.subruleInternal(e,1,r)}SUBRULE2(e,r){return this.subruleInternal(e,2,r)}SUBRULE3(e,r){return this.subruleInternal(e,3,r)}SUBRULE4(e,r){return this.subruleInternal(e,4,r)}SUBRULE5(e,r){return this.subruleInternal(e,5,r)}SUBRULE6(e,r){return this.subruleInternal(e,6,r)}SUBRULE7(e,r){return this.subruleInternal(e,7,r)}SUBRULE8(e,r){return this.subruleInternal(e,8,r)}SUBRULE9(e,r){return this.subruleInternal(e,9,r)}OPTION(e){return this.optionInternal(e,0)}OPTION1(e){return this.optionInternal(e,1)}OPTION2(e){return this.optionInternal(e,2)}OPTION3(e){return this.optionInternal(e,3)}OPTION4(e){return this.optionInternal(e,4)}OPTION5(e){return this.optionInternal(e,5)}OPTION6(e){return this.optionInternal(e,6)}OPTION7(e){return this.optionInternal(e,7)}OPTION8(e){return this.optionInternal(e,8)}OPTION9(e){return this.optionInternal(e,9)}OR(e){return this.orInternal(e,0)}OR1(e){return this.orInternal(e,1)}OR2(e){return this.orInternal(e,2)}OR3(e){return this.orInternal(e,3)}OR4(e){return this.orInternal(e,4)}OR5(e){return this.orInternal(e,5)}OR6(e){return this.orInternal(e,6)}OR7(e){return this.orInternal(e,7)}OR8(e){return this.orInternal(e,8)}OR9(e){return this.orInternal(e,9)}MANY(e){this.manyInternal(0,e)}MANY1(e){this.manyInternal(1,e)}MANY2(e){this.manyInternal(2,e)}MANY3(e){this.manyInternal(3,e)}MANY4(e){this.manyInternal(4,e)}MANY5(e){this.manyInternal(5,e)}MANY6(e){this.manyInternal(6,e)}MANY7(e){this.manyInternal(7,e)}MANY8(e){this.manyInternal(8,e)}MANY9(e){this.manyInternal(9,e)}MANY_SEP(e){this.manySepFirstInternal(0,e)}MANY_SEP1(e){this.manySepFirstInternal(1,e)}MANY_SEP2(e){this.manySepFirstInternal(2,e)}MANY_SEP3(e){this.manySepFirstInternal(3,e)}MANY_SEP4(e){this.manySepFirstInternal(4,e)}MANY_SEP5(e){this.manySepFirstInternal(5,e)}MANY_SEP6(e){this.manySepFirstInternal(6,e)}MANY_SEP7(e){this.manySepFirstInternal(7,e)}MANY_SEP8(e){this.manySepFirstInternal(8,e)}MANY_SEP9(e){this.manySepFirstInternal(9,e)}AT_LEAST_ONE(e){this.atLeastOneInternal(0,e)}AT_LEAST_ONE1(e){return this.atLeastOneInternal(1,e)}AT_LEAST_ONE2(e){this.atLeastOneInternal(2,e)}AT_LEAST_ONE3(e){this.atLeastOneInternal(3,e)}AT_LEAST_ONE4(e){this.atLeastOneInternal(4,e)}AT_LEAST_ONE5(e){this.atLeastOneInternal(5,e)}AT_LEAST_ONE6(e){this.atLeastOneInternal(6,e)}AT_LEAST_ONE7(e){this.atLeastOneInternal(7,e)}AT_LEAST_ONE8(e){this.atLeastOneInternal(8,e)}AT_LEAST_ONE9(e){this.atLeastOneInternal(9,e)}AT_LEAST_ONE_SEP(e){this.atLeastOneSepFirstInternal(0,e)}AT_LEAST_ONE_SEP1(e){this.atLeastOneSepFirstInternal(1,e)}AT_LEAST_ONE_SEP2(e){this.atLeastOneSepFirstInternal(2,e)}AT_LEAST_ONE_SEP3(e){this.atLeastOneSepFirstInternal(3,e)}AT_LEAST_ONE_SEP4(e){this.atLeastOneSepFirstInternal(4,e)}AT_LEAST_ONE_SEP5(e){this.atLeastOneSepFirstInternal(5,e)}AT_LEAST_ONE_SEP6(e){this.atLeastOneSepFirstInternal(6,e)}AT_LEAST_ONE_SEP7(e){this.atLeastOneSepFirstInternal(7,e)}AT_LEAST_ONE_SEP8(e){this.atLeastOneSepFirstInternal(8,e)}AT_LEAST_ONE_SEP9(e){this.atLeastOneSepFirstInternal(9,e)}RULE(e,r,n=Tg){if(Yn(this.definedRulesNames,e)){let s={message:Ul.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),type:Ui.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(s)}this.definedRulesNames.push(e);let i=this.defineRule(e,r,n);return this[e]=i,i}OVERRIDE_RULE(e,r,n=Tg){let i=qse(e,this.definedRulesNames,this.className);this.definitionErrors=this.definitionErrors.concat(i);let a=this.defineRule(e,r,n);return this[e]=a,a}BACKTRACK(e,r){return function(){this.isBackTrackingStack.push(1);let n=this.saveRecogState();try{return e.apply(this,r),!0}catch(i){if(ff(i))return!1;throw i}finally{this.reloadRecogState(n),this.isBackTrackingStack.pop()}}}getGAstProductions(){return this.gastProductionsCache}getSerializedGastProductions(){return YT(br(this.gastProductionsCache))}}});var kk,goe=M(()=>{"use strict";Ht();pk();bg();vg();S2();Us();FR();p0();f0();kk=class{static{o(this,"RecognizerEngine")}initRecognizerEngine(e,r){if(this.className=this.constructor.name,this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=dg,this.subruleIdx=0,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},Nt(r,"serializedGrammar"))throw Error(`The Parser's configuration can no longer contain a property. + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0 + For Further details.`);if(Dt(e)){if(cr(e))throw Error(`A Token Vocabulary cannot be empty. + Note that the first argument for the parser constructor + is no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset=="number")throw Error(`The Parser constructor no longer accepts a token vector as the first argument. + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0 + For Further details.`)}if(Dt(e))this.tokensMap=qr(e,(a,s)=>(a[s.name]=s,a),{});else if(Nt(e,"modes")&&za(Wr(br(e.modes)),Ese)){let a=Wr(br(e.modes)),s=Xm(a);this.tokensMap=qr(s,(l,u)=>(l[u.name]=u,l),{})}else if(xn(e))this.tokensMap=rn(e);else throw new Error(" argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition");this.tokensMap.EOF=mo;let n=Nt(e,"modes")?Wr(br(e.modes)):br(e),i=za(n,a=>cr(a.categoryMatches));this.tokenMatcher=i?dg:Wu,Yu(br(this.tokensMap))}defineRule(e,r,n){if(this.selfAnalysisDone)throw Error(`Grammar rule <${e}> may not be defined after the 'performSelfAnalysis' method has been called' +Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);let i=Nt(n,"resyncEnabled")?n.resyncEnabled:Tg.resyncEnabled,a=Nt(n,"recoveryValueFunc")?n.recoveryValueFunc:Tg.recoveryValueFunc,s=this.ruleShortNameIdx<<12;this.ruleShortNameIdx++,this.shortRuleNameToFull[s]=e,this.fullRuleNameToShort[e]=s;let l;return this.outputCst===!0?l=o(function(...f){try{this.ruleInvocationStateUpdate(s,e,this.subruleIdx),r.apply(this,f);let d=this.CST_STACK[this.CST_STACK.length-1];return this.cstPostRule(d),d}catch(d){return this.invokeRuleCatch(d,i,a)}finally{this.ruleFinallyStateUpdate()}},"invokeRuleWithTry"):l=o(function(...f){try{return this.ruleInvocationStateUpdate(s,e,this.subruleIdx),r.apply(this,f)}catch(d){return this.invokeRuleCatch(d,i,a)}finally{this.ruleFinallyStateUpdate()}},"invokeRuleWithTryCst"),Object.assign(l,{ruleName:e,originalGrammarAction:r})}invokeRuleCatch(e,r,n){let i=this.RULE_STACK.length===1,a=r&&!this.isBackTracking()&&this.recoveryEnabled;if(ff(e)){let s=e;if(a){let l=this.findReSyncTokenType();if(this.isInCurrentRuleReSyncSet(l))if(s.resyncedTokens=this.reSyncTo(l),this.outputCst){let u=this.CST_STACK[this.CST_STACK.length-1];return u.recoveredNode=!0,u}else return n(e);else{if(this.outputCst){let u=this.CST_STACK[this.CST_STACK.length-1];u.recoveredNode=!0,s.partialCstResult=u}throw s}}else{if(i)return this.moveToTerminatedState(),n(e);throw s}}else throw e}optionInternal(e,r){let n=this.getKeyForAutomaticLookahead(512,r);return this.optionInternalLogic(e,r,n)}optionInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof e!="function"){a=e.DEF;let s=e.GATE;if(s!==void 0){let l=i;i=o(()=>s.call(this)&&l.call(this),"lookAheadFunc")}}else a=e;if(i.call(this)===!0)return a.call(this)}atLeastOneInternal(e,r){let n=this.getKeyForAutomaticLookahead(1024,e);return this.atLeastOneInternalLogic(e,r,n)}atLeastOneInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof r!="function"){a=r.DEF;let s=r.GATE;if(s!==void 0){let l=i;i=o(()=>s.call(this)&&l.call(this),"lookAheadFunc")}}else a=r;if(i.call(this)===!0){let s=this.doSingleRepetition(a);for(;i.call(this)===!0&&s===!0;)s=this.doSingleRepetition(a)}else throw this.raiseEarlyExitException(e,Xn.REPETITION_MANDATORY,r.ERR_MSG);this.attemptInRepetitionRecovery(this.atLeastOneInternal,[e,r],i,1024,e,ak)}atLeastOneSepFirstInternal(e,r){let n=this.getKeyForAutomaticLookahead(1536,e);this.atLeastOneSepFirstInternalLogic(e,r,n)}atLeastOneSepFirstInternalLogic(e,r,n){let i=r.DEF,a=r.SEP;if(this.getLaFuncFromCache(n).call(this)===!0){i.call(this);let l=o(()=>this.tokenMatcher(this.LA(1),a),"separatorLookAheadFunc");for(;this.tokenMatcher(this.LA(1),a)===!0;)this.CONSUME(a),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,a,l,i,E2],l,1536,e,E2)}else throw this.raiseEarlyExitException(e,Xn.REPETITION_MANDATORY_WITH_SEPARATOR,r.ERR_MSG)}manyInternal(e,r){let n=this.getKeyForAutomaticLookahead(768,e);return this.manyInternalLogic(e,r,n)}manyInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof r!="function"){a=r.DEF;let l=r.GATE;if(l!==void 0){let u=i;i=o(()=>l.call(this)&&u.call(this),"lookaheadFunction")}}else a=r;let s=!0;for(;i.call(this)===!0&&s===!0;)s=this.doSingleRepetition(a);this.attemptInRepetitionRecovery(this.manyInternal,[e,r],i,768,e,ik,s)}manySepFirstInternal(e,r){let n=this.getKeyForAutomaticLookahead(1280,e);this.manySepFirstInternalLogic(e,r,n)}manySepFirstInternalLogic(e,r,n){let i=r.DEF,a=r.SEP;if(this.getLaFuncFromCache(n).call(this)===!0){i.call(this);let l=o(()=>this.tokenMatcher(this.LA(1),a),"separatorLookAheadFunc");for(;this.tokenMatcher(this.LA(1),a)===!0;)this.CONSUME(a),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,a,l,i,k2],l,1280,e,k2)}}repetitionSepSecondInternal(e,r,n,i,a){for(;n();)this.CONSUME(r),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,r,n,i,a],n,1536,e,a)}doSingleRepetition(e){let r=this.getLexerPosition();return e.call(this),this.getLexerPosition()>r}orInternal(e,r){let n=this.getKeyForAutomaticLookahead(256,r),i=Dt(e)?e:e.DEF,s=this.getLaFuncFromCache(n).call(this,i);if(s!==void 0)return i[s].ALT.call(this);this.raiseNoAltException(r,e.ERR_MSG)}ruleFinallyStateUpdate(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){let e=this.LA(1),r=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new D2(r,e))}}subruleInternal(e,r,n){let i;try{let a=n!==void 0?n.ARGS:void 0;return this.subruleIdx=r,i=e.apply(this,a),this.cstPostNonTerminal(i,n!==void 0&&n.LABEL!==void 0?n.LABEL:e.ruleName),i}catch(a){throw this.subruleInternalError(a,n,e.ruleName)}}subruleInternalError(e,r,n){throw ff(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,r!==void 0&&r.LABEL!==void 0?r.LABEL:n),delete e.partialCstResult),e}consumeInternal(e,r,n){let i;try{let a=this.LA(1);this.tokenMatcher(a,e)===!0?(this.consumeToken(),i=a):this.consumeInternalError(e,a,n)}catch(a){i=this.consumeInternalRecovery(e,r,a)}return this.cstPostTerminal(n!==void 0&&n.LABEL!==void 0?n.LABEL:e.name,i),i}consumeInternalError(e,r,n){let i,a=this.LA(0);throw n!==void 0&&n.ERR_MSG?i=n.ERR_MSG:i=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:r,previous:a,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new m0(i,r,a))}consumeInternalRecovery(e,r,n){if(this.recoveryEnabled&&n.name==="MismatchedTokenException"&&!this.isBackTracking()){let i=this.getFollowsForInRuleRecovery(e,r);try{return this.tryInRuleRecovery(e,i)}catch(a){throw a.name===BR?n:a}}else throw n}saveRecogState(){let e=this.errors,r=rn(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:r,CST_STACK:this.CST_STACK}}reloadRecogState(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK}ruleInvocationStateUpdate(e,r,n){this.RULE_OCCURRENCE_STACK.push(n),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(r)}isBackTracking(){return this.isBackTrackingStack.length!==0}getCurrRuleFullName(){let e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]}shortRuleNameToFullName(e){return this.shortRuleNameToFull[e]}isAtEndOfInput(){return this.tokenMatcher(this.LA(1),mo)}reset(){this.resetLexerState(),this.subruleIdx=0,this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]}}});var Ek,yoe=M(()=>{"use strict";bg();Ht();vg();Us();Ek=class{static{o(this,"ErrorHandler")}initErrorHandler(e){this._errors=[],this.errorMessageProvider=Nt(e,"errorMessageProvider")?e.errorMessageProvider:hs.errorMessageProvider}SAVE_ERROR(e){if(ff(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:rn(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error("Trying to save an Error which is not a RecognitionException")}get errors(){return rn(this._errors)}set errors(e){this._errors=e}raiseEarlyExitException(e,r,n){let i=this.getCurrRuleFullName(),a=this.getGAstProductions()[i],l=yg(e,a,r,this.maxLookahead)[0],u=[];for(let f=1;f<=this.maxLookahead;f++)u.push(this.LA(f));let h=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:l,actual:u,previous:this.LA(0),customUserDescription:n,ruleName:i});throw this.SAVE_ERROR(new N2(h,this.LA(1),this.LA(0)))}raiseNoAltException(e,r){let n=this.getCurrRuleFullName(),i=this.getGAstProductions()[n],a=gg(e,i,this.maxLookahead),s=[];for(let h=1;h<=this.maxLookahead;h++)s.push(this.LA(h));let l=this.LA(0),u=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:a,actual:s,previous:l,customUserDescription:r,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new L2(u,this.LA(1),l))}}});var Sk,voe=M(()=>{"use strict";S2();Ht();Sk=class{static{o(this,"ContentAssist")}initContentAssist(){}computeContentAssist(e,r){let n=this.gastProductionsCache[e];if(dr(n))throw Error(`Rule ->${e}<- does not exist in this grammar.`);return ok([n],r,this.tokenMatcher,this.maxLookahead)}getNextPossibleTokenTypes(e){let r=sa(e.ruleStack),i=this.getGAstProductions()[r];return new nk(i,e).startWalking()}}});function M2(t,e,r,n=!1){Ak(r);let i=xa(this.recordingProdStack),a=_i(e)?e:e.DEF,s=new t({definition:[],idx:r});return n&&(s.separator=e.SEP),Nt(e,"MAX_LOOKAHEAD")&&(s.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(s),a.call(this),i.definition.push(s),this.recordingProdStack.pop(),_k}function sFe(t,e){Ak(e);let r=xa(this.recordingProdStack),n=Dt(t)===!1,i=n===!1?t:t.DEF,a=new wn({definition:[],idx:e,ignoreAmbiguities:n&&t.IGNORE_AMBIGUITIES===!0});Nt(t,"MAX_LOOKAHEAD")&&(a.maxLookahead=t.MAX_LOOKAHEAD);let s=qv(i,l=>_i(l.GATE));return a.hasPredicates=s,r.definition.push(a),Se(i,l=>{let u=new _n({definition:[]});a.definition.push(u),Nt(l,"IGNORE_AMBIGUITIES")?u.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:Nt(l,"GATE")&&(u.ignoreAmbiguities=!0),this.recordingProdStack.push(u),l.ALT.call(this),this.recordingProdStack.pop()}),_k}function woe(t){return t===0?"":`${t}`}function Ak(t){if(t<0||t>boe){let e=new Error(`Invalid DSL Method idx value: <${t}> + Idx value must be a none negative value smaller than ${boe+1}`);throw e.KNOWN_RECORDER_ERROR=!0,e}}var _k,xoe,boe,Toe,koe,aFe,Ck,Eoe=M(()=>{"use strict";Ht();us();b2();f0();p0();Us();pk();_k={description:"This Object indicates the Parser is during Recording Phase"};Object.freeze(_k);xoe=!0,boe=Math.pow(2,8)-1,Toe=rk({name:"RECORDING_PHASE_TOKEN",pattern:ci.NA});Yu([Toe]);koe=d0(Toe,`This IToken indicates the Parser is in Recording Phase + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze(koe);aFe={name:`This CSTNode indicates the Parser is in Recording Phase + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},Ck=class{static{o(this,"GastRecorder")}initGastRecorder(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1}enableRecording(){this.RECORDING_PHASE=!0,this.TRACE_INIT("Enable Recording",()=>{for(let e=0;e<10;e++){let r=e>0?e:"";this[`CONSUME${r}`]=function(n,i){return this.consumeInternalRecord(n,e,i)},this[`SUBRULE${r}`]=function(n,i){return this.subruleInternalRecord(n,e,i)},this[`OPTION${r}`]=function(n){return this.optionInternalRecord(n,e)},this[`OR${r}`]=function(n){return this.orInternalRecord(n,e)},this[`MANY${r}`]=function(n){this.manyInternalRecord(e,n)},this[`MANY_SEP${r}`]=function(n){this.manySepFirstInternalRecord(e,n)},this[`AT_LEAST_ONE${r}`]=function(n){this.atLeastOneInternalRecord(e,n)},this[`AT_LEAST_ONE_SEP${r}`]=function(n){this.atLeastOneSepFirstInternalRecord(e,n)}}this.consume=function(e,r,n){return this.consumeInternalRecord(r,e,n)},this.subrule=function(e,r,n){return this.subruleInternalRecord(r,e,n)},this.option=function(e,r){return this.optionInternalRecord(r,e)},this.or=function(e,r){return this.orInternalRecord(r,e)},this.many=function(e,r){this.manyInternalRecord(e,r)},this.atLeastOne=function(e,r){this.atLeastOneInternalRecord(e,r)},this.ACTION=this.ACTION_RECORD,this.BACKTRACK=this.BACKTRACK_RECORD,this.LA=this.LA_RECORD})}disableRecording(){this.RECORDING_PHASE=!1,this.TRACE_INIT("Deleting Recording methods",()=>{let e=this;for(let r=0;r<10;r++){let n=r>0?r:"";delete e[`CONSUME${n}`],delete e[`SUBRULE${n}`],delete e[`OPTION${n}`],delete e[`OR${n}`],delete e[`MANY${n}`],delete e[`MANY_SEP${n}`],delete e[`AT_LEAST_ONE${n}`],delete e[`AT_LEAST_ONE_SEP${n}`]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})}ACTION_RECORD(e){}BACKTRACK_RECORD(e,r){return()=>!0}LA_RECORD(e){return wg}topLevelRuleRecord(e,r){try{let n=new ls({definition:[],name:e});return n.name=e,this.recordingProdStack.push(n),r.call(this),this.recordingProdStack.pop(),n}catch(n){if(n.KNOWN_RECORDER_ERROR!==!0)try{n.message=n.message+` + This error was thrown during the "grammar recording phase" For more info see: + https://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw n}throw n}}optionInternalRecord(e,r){return M2.call(this,an,e,r)}atLeastOneInternalRecord(e,r){M2.call(this,Ln,r,e)}atLeastOneSepFirstInternalRecord(e,r){M2.call(this,Dn,r,e,xoe)}manyInternalRecord(e,r){M2.call(this,Dr,r,e)}manySepFirstInternalRecord(e,r){M2.call(this,bn,r,e,xoe)}orInternalRecord(e,r){return sFe.call(this,e,r)}subruleInternalRecord(e,r,n){if(Ak(r),!e||Nt(e,"ruleName")===!1){let l=new Error(` argument is invalid expecting a Parser method reference but got: <${JSON.stringify(e)}> + inside top level rule: <${this.recordingProdStack[0].name}>`);throw l.KNOWN_RECORDER_ERROR=!0,l}let i=xa(this.recordingProdStack),a=e.ruleName,s=new nn({idx:r,nonTerminalName:a,label:n?.LABEL,referencedRule:void 0});return i.definition.push(s),this.outputCst?aFe:_k}consumeInternalRecord(e,r,n){if(Ak(r),!ER(e)){let s=new Error(` argument is invalid expecting a TokenType reference but got: <${JSON.stringify(e)}> + inside top level rule: <${this.recordingProdStack[0].name}>`);throw s.KNOWN_RECORDER_ERROR=!0,s}let i=xa(this.recordingProdStack),a=new Er({idx:r,terminalType:e,label:n?.LABEL});return i.definition.push(a),koe}};o(M2,"recordProd");o(sFe,"recordOrProd");o(woe,"getIdxSuffix");o(Ak,"assertMethodIdxIsValid")});var Lk,Soe=M(()=>{"use strict";Ht();lg();Us();Lk=class{static{o(this,"PerformanceTracer")}initPerformanceTracer(e){if(Nt(e,"traceInitPerf")){let r=e.traceInitPerf,n=typeof r=="number";this.traceInitMaxIdent=n?r:1/0,this.traceInitPerf=n?r>0:r}else this.traceInitMaxIdent=0,this.traceInitPerf=hs.traceInitPerf;this.traceInitIndent=-1}TRACE_INIT(e,r){if(this.traceInitPerf===!0){this.traceInitIndent++;let n=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent <${e}>`);let{time:i,value:a}=y2(r),s=i>10?console.warn:console.log;return this.traceInitIndent time: ${i}ms`),this.traceInitIndent--,a}else return r()}}});function Coe(t,e){e.forEach(r=>{let n=r.prototype;Object.getOwnPropertyNames(n).forEach(i=>{if(i==="constructor")return;let a=Object.getOwnPropertyDescriptor(n,i);a&&(a.get||a.set)?Object.defineProperty(t.prototype,i,a):t.prototype[i]=r.prototype[i]})})}var Aoe=M(()=>{"use strict";o(Coe,"applyMixins")});function Dk(t=void 0){return function(){return t}}var wg,hs,Tg,Ui,I2,O2,Us=M(()=>{"use strict";Ht();lg();nse();p0();pg();Jse();FR();aoe();doe();poe();moe();goe();yoe();voe();Eoe();Soe();Aoe();_2();wg=d0(mo,"",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(wg);hs=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:Xu,nodeLocationTracking:"none",traceInitPerf:!1,skipValidations:!1}),Tg=Object.freeze({recoveryValueFunc:o(()=>{},"recoveryValueFunc"),resyncEnabled:!0});(function(t){t[t.INVALID_RULE_NAME=0]="INVALID_RULE_NAME",t[t.DUPLICATE_RULE_NAME=1]="DUPLICATE_RULE_NAME",t[t.INVALID_RULE_OVERRIDE=2]="INVALID_RULE_OVERRIDE",t[t.DUPLICATE_PRODUCTIONS=3]="DUPLICATE_PRODUCTIONS",t[t.UNRESOLVED_SUBRULE_REF=4]="UNRESOLVED_SUBRULE_REF",t[t.LEFT_RECURSION=5]="LEFT_RECURSION",t[t.NONE_LAST_EMPTY_ALT=6]="NONE_LAST_EMPTY_ALT",t[t.AMBIGUOUS_ALTS=7]="AMBIGUOUS_ALTS",t[t.CONFLICT_TOKENS_RULES_NAMESPACE=8]="CONFLICT_TOKENS_RULES_NAMESPACE",t[t.INVALID_TOKEN_NAME=9]="INVALID_TOKEN_NAME",t[t.NO_NON_EMPTY_LOOKAHEAD=10]="NO_NON_EMPTY_LOOKAHEAD",t[t.AMBIGUOUS_PREFIX_ALTS=11]="AMBIGUOUS_PREFIX_ALTS",t[t.TOO_MANY_ALTS=12]="TOO_MANY_ALTS",t[t.CUSTOM_LOOKAHEAD_VALIDATION=13]="CUSTOM_LOOKAHEAD_VALIDATION"})(Ui||(Ui={}));o(Dk,"EMPTY_ALT");I2=class t{static{o(this,"Parser")}static performSelfAnalysis(e){throw Error("The **static** `performSelfAnalysis` method has been deprecated. \nUse the **instance** method with the same name instead.")}performSelfAnalysis(){this.TRACE_INIT("performSelfAnalysis",()=>{let e;this.selfAnalysisDone=!0;let r=this.className;this.TRACE_INIT("toFastProps",()=>{v2(this)}),this.TRACE_INIT("Grammar Recording",()=>{try{this.enableRecording(),Se(this.definedRulesNames,i=>{let s=this[i].originalGrammarAction,l;this.TRACE_INIT(`${i} Rule`,()=>{l=this.topLevelRuleRecord(i,s)}),this.gastProductionsCache[i]=l})}finally{this.disableRecording()}});let n=[];if(this.TRACE_INIT("Grammar Resolving",()=>{n=Qse({rules:br(this.gastProductionsCache)}),this.definitionErrors=this.definitionErrors.concat(n)}),this.TRACE_INIT("Grammar Validations",()=>{if(cr(n)&&this.skipValidations===!1){let i=Zse({rules:br(this.gastProductionsCache),tokenTypes:br(this.tokensMap),errMsgProvider:Ul,grammarName:r}),a=Hse({lookaheadStrategy:this.lookaheadStrategy,rules:br(this.gastProductionsCache),tokenTypes:br(this.tokensMap),grammarName:r});this.definitionErrors=this.definitionErrors.concat(i,a)}}),cr(this.definitionErrors)&&(this.recoveryEnabled&&this.TRACE_INIT("computeAllProdsFollows",()=>{let i=rse(br(this.gastProductionsCache));this.resyncFollows=i}),this.TRACE_INIT("ComputeLookaheadFunctions",()=>{var i,a;(a=(i=this.lookaheadStrategy).initialize)===null||a===void 0||a.call(i,{rules:br(this.gastProductionsCache)}),this.preComputeLookaheadFunctions(br(this.gastProductionsCache))})),!t.DEFER_DEFINITION_ERRORS_HANDLING&&!cr(this.definitionErrors))throw e=Qe(this.definitionErrors,i=>i.message),new Error(`Parser Definition Errors detected: + ${e.join(` +------------------------------- +`)}`)})}constructor(e,r){this.definitionErrors=[],this.selfAnalysisDone=!1;let n=this;if(n.initErrorHandler(r),n.initLexerAdapter(),n.initLooksAhead(r),n.initRecognizerEngine(e,r),n.initRecoverable(r),n.initTreeBuilder(r),n.initContentAssist(),n.initGastRecorder(r),n.initPerformanceTracer(r),Nt(r,"ignoredIssues"))throw new Error(`The IParserConfig property has been deprecated. + Please use the flag on the relevant DSL method instead. + See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES + For further details.`);this.skipValidations=Nt(r,"skipValidations")?r.skipValidations:hs.skipValidations}};I2.DEFER_DEFINITION_ERRORS_HANDLING=!1;Coe(I2,[fk,gk,bk,wk,kk,Tk,Ek,Sk,Ck,Lk]);O2=class extends I2{static{o(this,"EmbeddedActionsParser")}constructor(e,r=hs){let n=rn(r);n.outputCst=!1,super(e,n)}}});var _oe=M(()=>{"use strict";us()});var Loe=M(()=>{"use strict"});var Doe=M(()=>{"use strict";_oe();Loe()});var Noe=M(()=>{"use strict";fR()});var g0=M(()=>{"use strict";fR();Us();b2();p0();vg();zR();pg();bg();CR();us();us();Doe();Noe()});function y0(t,e,r){return`${t.name}_${e}_${r}`}function Ooe(t){let e={decisionMap:{},decisionStates:[],ruleToStartState:new Map,ruleToStopState:new Map,states:[]};dFe(e,t);let r=t.length;for(let n=0;nPoe(t,e,s));return Cg(t,e,n,r,...i)}function xFe(t,e,r){let n=oa(t,e,r,{type:df});pf(t,n);let i=Cg(t,e,n,r,v0(t,e,r));return bFe(t,e,r,i)}function v0(t,e,r){let n=Yr(Qe(r.definition,i=>Poe(t,e,i)),i=>i!==void 0);return n.length===1?n[0]:n.length===0?void 0:TFe(t,n)}function Boe(t,e,r,n,i){let a=n.left,s=n.right,l=oa(t,e,r,{type:fFe});pf(t,l);let u=oa(t,e,r,{type:Ioe});return a.loopback=l,u.loopback=l,t.decisionMap[y0(e,i?"RepetitionMandatoryWithSeparator":"RepetitionMandatory",r.idx)]=l,Ni(s,l),i===void 0?(Ni(l,a),Ni(l,u)):(Ni(l,u),Ni(l,i.left),Ni(i.right,a)),{left:a,right:u}}function Foe(t,e,r,n,i){let a=n.left,s=n.right,l=oa(t,e,r,{type:hFe});pf(t,l);let u=oa(t,e,r,{type:Ioe}),h=oa(t,e,r,{type:uFe});return l.loopback=h,u.loopback=h,Ni(l,a),Ni(l,u),Ni(s,h),i!==void 0?(Ni(h,u),Ni(h,i.left),Ni(i.right,a)):Ni(h,l),t.decisionMap[y0(e,i?"RepetitionWithSeparator":"Repetition",r.idx)]=l,{left:l,right:u}}function bFe(t,e,r,n){let i=n.left,a=n.right;return Ni(i,a),t.decisionMap[y0(e,"Option",r.idx)]=i,n}function pf(t,e){return t.decisionStates.push(e),e.decision=t.decisionStates.length-1,e.decision}function Cg(t,e,r,n,...i){let a=oa(t,e,n,{type:cFe,start:r});r.end=a;for(let l of i)l!==void 0?(Ni(r,l.left),Ni(l.right,a)):Ni(r,a);let s={left:r,right:a};return t.decisionMap[y0(e,wFe(n),n.idx)]=r,s}function wFe(t){if(t instanceof wn)return"Alternation";if(t instanceof an)return"Option";if(t instanceof Dr)return"Repetition";if(t instanceof bn)return"RepetitionWithSeparator";if(t instanceof Ln)return"RepetitionMandatory";if(t instanceof Dn)return"RepetitionMandatoryWithSeparator";throw new Error("Invalid production type encountered")}function TFe(t,e){let r=e.length;for(let a=0;a{"use strict";Wm();GL();g0();o(y0,"buildATNKey");df=1,lFe=2,Roe=4,Moe=5,Sg=7,cFe=8,uFe=9,hFe=10,fFe=11,Ioe=12,P2=class{static{o(this,"AbstractTransition")}constructor(e){this.target=e}isEpsilon(){return!1}},kg=class extends P2{static{o(this,"AtomTransition")}constructor(e,r){super(e),this.tokenType=r}},B2=class extends P2{static{o(this,"EpsilonTransition")}constructor(e){super(e)}isEpsilon(){return!0}},Eg=class extends P2{static{o(this,"RuleTransition")}constructor(e,r,n){super(e),this.rule=r,this.followState=n}isEpsilon(){return!0}};o(Ooe,"createATN");o(dFe,"createRuleStartAndStopATNStates");o(Poe,"atom");o(pFe,"repetition");o(mFe,"repetitionSep");o(gFe,"repetitionMandatory");o(yFe,"repetitionMandatorySep");o(vFe,"alternation");o(xFe,"option");o(v0,"block");o(Boe,"plus");o(Foe,"star");o(bFe,"optional");o(pf,"defineDecisionState");o(Cg,"makeAlts");o(wFe,"getProdType");o(TFe,"makeBlock");o(XR,"tokenRef");o(kFe,"ruleRef");o(EFe,"buildRuleHandle");o(Ni,"epsilon");o(oa,"newState");o(jR,"addTransition");o(SFe,"removeState")});function KR(t,e=!0){return`${e?`a${t.alt}`:""}s${t.state.stateNumber}:${t.stack.map(r=>r.stateNumber.toString()).join("_")}`}var F2,Ag,Goe=M(()=>{"use strict";Wm();F2={},Ag=class{static{o(this,"ATNConfigSet")}constructor(){this.map={},this.configs=[]}get size(){return this.configs.length}finalize(){this.map={}}add(e){let r=KR(e);r in this.map||(this.map[r]=this.configs.length,this.configs.push(e))}get elements(){return this.configs}get alts(){return Qe(this.configs,e=>e.alt)}get key(){let e="";for(let r in this.map)e+=r+":";return e}};o(KR,"getATNConfigKey")});function CFe(t,e){let r={};return n=>{let i=n.toString(),a=r[i];return a!==void 0||(a={atnStartState:t,decision:e,states:{}},r[i]=a),a}}function Voe(t,e=!0){let r=new Set;for(let n of t){let i=new Set;for(let a of n){if(a===void 0){if(e)break;return!1}let s=[a.tokenTypeIdx].concat(a.categoryMatches);for(let l of s)if(r.has(l)){if(!i.has(l))return!1}else r.add(l),i.add(l)}}return!0}function AFe(t){let e=t.decisionStates.length,r=Array(e);for(let n=0;nqu(i)).join(", "),r=t.production.idx===0?"":t.production.idx,n=`Ambiguous Alternatives Detected: <${t.ambiguityIndices.join(", ")}> in <${RFe(t.production)}${r}> inside <${t.topLevelRule.name}> Rule, +<${e}> may appears as a prefix path in all these alternatives. +`;return n=n+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES +For Further details.`,n}function RFe(t){if(t instanceof nn)return"SUBRULE";if(t instanceof an)return"OPTION";if(t instanceof wn)return"OR";if(t instanceof Ln)return"AT_LEAST_ONE";if(t instanceof Dn)return"AT_LEAST_ONE_SEP";if(t instanceof bn)return"MANY_SEP";if(t instanceof Dr)return"MANY";if(t instanceof Er)return"CONSUME";throw Error("non exhaustive match")}function MFe(t,e,r){let n=ba(e.configs.elements,a=>a.state.transitions),i=Qre(n.filter(a=>a instanceof kg).map(a=>a.tokenType),a=>a.tokenTypeIdx);return{actualToken:r,possibleTokenTypes:i,tokenPath:t}}function IFe(t,e){return t.edges[e.tokenTypeIdx]}function OFe(t,e,r){let n=new Ag,i=[];for(let s of t.elements){if(r.is(s.alt)===!1)continue;if(s.state.type===Sg){i.push(s);continue}let l=s.state.transitions.length;for(let u=0;u0&&!GFe(a))for(let s of i)a.add(s);return a}function PFe(t,e){if(t instanceof kg&&T2(e,t.tokenType))return t.target}function BFe(t,e){let r;for(let n of t.elements)if(e.is(n.alt)===!0){if(r===void 0)r=n.alt;else if(r!==n.alt)return}return r}function Hoe(t){return{configs:t,edges:{},isAcceptState:!1,prediction:-1}}function Uoe(t,e,r,n){return n=Woe(t,n),e.edges[r.tokenTypeIdx]=n,n}function Woe(t,e){if(e===F2)return e;let r=e.configs.key,n=t.states[r];return n!==void 0?n:(e.configs.finalize(),t.states[r]=e,e)}function FFe(t){let e=new Ag,r=t.transitions.length;for(let n=0;n0){let i=[...t.stack],s={state:i.pop(),alt:t.alt,stack:i};Rk(s,e)}else e.add(t);return}r.epsilonOnlyTransitions||e.add(t);let n=r.transitions.length;for(let i=0;i1)return!0;return!1}function WFe(t){for(let e of Array.from(t.values()))if(Object.keys(e).length===1)return!0;return!1}var Nk,$oe,z2,Yoe=M(()=>{"use strict";g0();zoe();Goe();XL();VL();Zre();Wm();_w();nT();lT();ZL();o(CFe,"createDFACache");Nk=class{static{o(this,"PredicateSet")}constructor(){this.predicates=[]}is(e){return e>=this.predicates.length||this.predicates[e]}set(e,r){this.predicates[e]=r}toString(){let e="",r=this.predicates.length;for(let n=0;nconsole.log(n)}initialize(e){this.atn=Ooe(e.rules),this.dfas=AFe(this.atn)}validateAmbiguousAlternationAlternatives(){return[]}validateEmptyOrAlternatives(){return[]}buildLookaheadForAlternation(e){let{prodOccurrence:r,rule:n,hasPredicates:i,dynamicTokensEnabled:a}=e,s=this.dfas,l=this.logging,u=y0(n,"Alternation",r),f=this.atn.decisionMap[u].decision,d=Qe(ck({maxLookahead:1,occurrence:r,prodType:"Alternation",rule:n}),p=>Qe(p,m=>m[0]));if(Voe(d,!1)&&!a){let p=qr(d,(m,g,y)=>(Se(g,v=>{v&&(m[v.tokenTypeIdx]=y,Se(v.categoryMatches,x=>{m[x]=y}))}),m),{});return i?function(m){var g;let y=this.LA(1),v=p[y.tokenTypeIdx];if(m!==void 0&&v!==void 0){let x=(g=m[v])===null||g===void 0?void 0:g.GATE;if(x!==void 0&&x.call(this)===!1)return}return v}:function(){let m=this.LA(1);return p[m.tokenTypeIdx]}}else return i?function(p){let m=new Nk,g=p===void 0?0:p.length;for(let v=0;vQe(p,m=>m[0]));if(Voe(d)&&d[0][0]&&!a){let p=d[0],m=Wr(p);if(m.length===1&&cr(m[0].categoryMatches)){let y=m[0].tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===y}}else{let g=qr(m,(y,v)=>(v!==void 0&&(y[v.tokenTypeIdx]=!0,Se(v.categoryMatches,x=>{y[x]=!0})),y),{});return function(){let y=this.LA(1);return g[y.tokenTypeIdx]===!0}}}return function(){let p=QR.call(this,s,f,$oe,l);return typeof p=="object"?!1:p===0}}};o(Voe,"isLL1Sequence");o(AFe,"initATNSimulator");o(QR,"adaptivePredict");o(_Fe,"performLookahead");o(LFe,"computeLookaheadTarget");o(DFe,"reportLookaheadAmbiguity");o(NFe,"buildAmbiguityError");o(RFe,"getProductionDslName");o(MFe,"buildAdaptivePredictError");o(IFe,"getExistingTargetState");o(OFe,"computeReachSet");o(PFe,"getReachableTarget");o(BFe,"getUniqueAlt");o(Hoe,"newDFAState");o(Uoe,"addDFAEdge");o(Woe,"addDFAState");o(FFe,"computeStartState");o(Rk,"closure");o(zFe,"getEpsilonTarget");o(GFe,"hasConfigInRuleStopState");o($Fe,"allConfigsInRuleStopStates");o(VFe,"hasConflictTerminatingPrediction");o(UFe,"getConflictingAltSets");o(HFe,"hasConflictingAltSet");o(WFe,"hasStateAssociatedWithOneAlt")});var qoe=M(()=>{"use strict";Yoe()});var Xoe,ZR,joe,Mk,Xr,Nr,Ik,Koe,JR,Qoe,Zoe,Joe,ele,eM,tle,rle,nle,Ok,_g,Lg,tM,Dg,ile,rM,nM,iM,aM,sM,ale,sle,oM,ole,lM,G2,lle,cle,ule,hle,fle,dle,ple,mle,Pk,gle,yle,vle,xle,ble,wle,Tle,kle,Ele,Sle,Cle,Bk,Ale,_le,Lle,Dle,Nle,Rle,Mle,Ile,Ole,Ple,Ble,Fle,zle,cM,uM,Gle,$le,Vle,Ule,Hle,Wle,Yle,qle,Xle,hM,ze,fM=M(()=>{"use strict";(function(t){function e(r){return typeof r=="string"}o(e,"is"),t.is=e})(Xoe||(Xoe={}));(function(t){function e(r){return typeof r=="string"}o(e,"is"),t.is=e})(ZR||(ZR={}));(function(t){t.MIN_VALUE=-2147483648,t.MAX_VALUE=2147483647;function e(r){return typeof r=="number"&&t.MIN_VALUE<=r&&r<=t.MAX_VALUE}o(e,"is"),t.is=e})(joe||(joe={}));(function(t){t.MIN_VALUE=0,t.MAX_VALUE=2147483647;function e(r){return typeof r=="number"&&t.MIN_VALUE<=r&&r<=t.MAX_VALUE}o(e,"is"),t.is=e})(Mk||(Mk={}));(function(t){function e(n,i){return n===Number.MAX_VALUE&&(n=Mk.MAX_VALUE),i===Number.MAX_VALUE&&(i=Mk.MAX_VALUE),{line:n,character:i}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.objectLiteral(i)&&ze.uinteger(i.line)&&ze.uinteger(i.character)}o(r,"is"),t.is=r})(Xr||(Xr={}));(function(t){function e(n,i,a,s){if(ze.uinteger(n)&&ze.uinteger(i)&&ze.uinteger(a)&&ze.uinteger(s))return{start:Xr.create(n,i),end:Xr.create(a,s)};if(Xr.is(n)&&Xr.is(i))return{start:n,end:i};throw new Error(`Range#create called with invalid arguments[${n}, ${i}, ${a}, ${s}]`)}o(e,"create"),t.create=e;function r(n){let i=n;return ze.objectLiteral(i)&&Xr.is(i.start)&&Xr.is(i.end)}o(r,"is"),t.is=r})(Nr||(Nr={}));(function(t){function e(n,i){return{uri:n,range:i}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.objectLiteral(i)&&Nr.is(i.range)&&(ze.string(i.uri)||ze.undefined(i.uri))}o(r,"is"),t.is=r})(Ik||(Ik={}));(function(t){function e(n,i,a,s){return{targetUri:n,targetRange:i,targetSelectionRange:a,originSelectionRange:s}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.objectLiteral(i)&&Nr.is(i.targetRange)&&ze.string(i.targetUri)&&Nr.is(i.targetSelectionRange)&&(Nr.is(i.originSelectionRange)||ze.undefined(i.originSelectionRange))}o(r,"is"),t.is=r})(Koe||(Koe={}));(function(t){function e(n,i,a,s){return{red:n,green:i,blue:a,alpha:s}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.objectLiteral(i)&&ze.numberRange(i.red,0,1)&&ze.numberRange(i.green,0,1)&&ze.numberRange(i.blue,0,1)&&ze.numberRange(i.alpha,0,1)}o(r,"is"),t.is=r})(JR||(JR={}));(function(t){function e(n,i){return{range:n,color:i}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.objectLiteral(i)&&Nr.is(i.range)&&JR.is(i.color)}o(r,"is"),t.is=r})(Qoe||(Qoe={}));(function(t){function e(n,i,a){return{label:n,textEdit:i,additionalTextEdits:a}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.objectLiteral(i)&&ze.string(i.label)&&(ze.undefined(i.textEdit)||Lg.is(i))&&(ze.undefined(i.additionalTextEdits)||ze.typedArray(i.additionalTextEdits,Lg.is))}o(r,"is"),t.is=r})(Zoe||(Zoe={}));(function(t){t.Comment="comment",t.Imports="imports",t.Region="region"})(Joe||(Joe={}));(function(t){function e(n,i,a,s,l,u){let h={startLine:n,endLine:i};return ze.defined(a)&&(h.startCharacter=a),ze.defined(s)&&(h.endCharacter=s),ze.defined(l)&&(h.kind=l),ze.defined(u)&&(h.collapsedText=u),h}o(e,"create"),t.create=e;function r(n){let i=n;return ze.objectLiteral(i)&&ze.uinteger(i.startLine)&&ze.uinteger(i.startLine)&&(ze.undefined(i.startCharacter)||ze.uinteger(i.startCharacter))&&(ze.undefined(i.endCharacter)||ze.uinteger(i.endCharacter))&&(ze.undefined(i.kind)||ze.string(i.kind))}o(r,"is"),t.is=r})(ele||(ele={}));(function(t){function e(n,i){return{location:n,message:i}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.defined(i)&&Ik.is(i.location)&&ze.string(i.message)}o(r,"is"),t.is=r})(eM||(eM={}));(function(t){t.Error=1,t.Warning=2,t.Information=3,t.Hint=4})(tle||(tle={}));(function(t){t.Unnecessary=1,t.Deprecated=2})(rle||(rle={}));(function(t){function e(r){let n=r;return ze.objectLiteral(n)&&ze.string(n.href)}o(e,"is"),t.is=e})(nle||(nle={}));(function(t){function e(n,i,a,s,l,u){let h={range:n,message:i};return ze.defined(a)&&(h.severity=a),ze.defined(s)&&(h.code=s),ze.defined(l)&&(h.source=l),ze.defined(u)&&(h.relatedInformation=u),h}o(e,"create"),t.create=e;function r(n){var i;let a=n;return ze.defined(a)&&Nr.is(a.range)&&ze.string(a.message)&&(ze.number(a.severity)||ze.undefined(a.severity))&&(ze.integer(a.code)||ze.string(a.code)||ze.undefined(a.code))&&(ze.undefined(a.codeDescription)||ze.string((i=a.codeDescription)===null||i===void 0?void 0:i.href))&&(ze.string(a.source)||ze.undefined(a.source))&&(ze.undefined(a.relatedInformation)||ze.typedArray(a.relatedInformation,eM.is))}o(r,"is"),t.is=r})(Ok||(Ok={}));(function(t){function e(n,i,...a){let s={title:n,command:i};return ze.defined(a)&&a.length>0&&(s.arguments=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return ze.defined(i)&&ze.string(i.title)&&ze.string(i.command)}o(r,"is"),t.is=r})(_g||(_g={}));(function(t){function e(a,s){return{range:a,newText:s}}o(e,"replace"),t.replace=e;function r(a,s){return{range:{start:a,end:a},newText:s}}o(r,"insert"),t.insert=r;function n(a){return{range:a,newText:""}}o(n,"del"),t.del=n;function i(a){let s=a;return ze.objectLiteral(s)&&ze.string(s.newText)&&Nr.is(s.range)}o(i,"is"),t.is=i})(Lg||(Lg={}));(function(t){function e(n,i,a){let s={label:n};return i!==void 0&&(s.needsConfirmation=i),a!==void 0&&(s.description=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return ze.objectLiteral(i)&&ze.string(i.label)&&(ze.boolean(i.needsConfirmation)||i.needsConfirmation===void 0)&&(ze.string(i.description)||i.description===void 0)}o(r,"is"),t.is=r})(tM||(tM={}));(function(t){function e(r){let n=r;return ze.string(n)}o(e,"is"),t.is=e})(Dg||(Dg={}));(function(t){function e(a,s,l){return{range:a,newText:s,annotationId:l}}o(e,"replace"),t.replace=e;function r(a,s,l){return{range:{start:a,end:a},newText:s,annotationId:l}}o(r,"insert"),t.insert=r;function n(a,s){return{range:a,newText:"",annotationId:s}}o(n,"del"),t.del=n;function i(a){let s=a;return Lg.is(s)&&(tM.is(s.annotationId)||Dg.is(s.annotationId))}o(i,"is"),t.is=i})(ile||(ile={}));(function(t){function e(n,i){return{textDocument:n,edits:i}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.defined(i)&&oM.is(i.textDocument)&&Array.isArray(i.edits)}o(r,"is"),t.is=r})(rM||(rM={}));(function(t){function e(n,i,a){let s={kind:"create",uri:n};return i!==void 0&&(i.overwrite!==void 0||i.ignoreIfExists!==void 0)&&(s.options=i),a!==void 0&&(s.annotationId=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="create"&&ze.string(i.uri)&&(i.options===void 0||(i.options.overwrite===void 0||ze.boolean(i.options.overwrite))&&(i.options.ignoreIfExists===void 0||ze.boolean(i.options.ignoreIfExists)))&&(i.annotationId===void 0||Dg.is(i.annotationId))}o(r,"is"),t.is=r})(nM||(nM={}));(function(t){function e(n,i,a,s){let l={kind:"rename",oldUri:n,newUri:i};return a!==void 0&&(a.overwrite!==void 0||a.ignoreIfExists!==void 0)&&(l.options=a),s!==void 0&&(l.annotationId=s),l}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="rename"&&ze.string(i.oldUri)&&ze.string(i.newUri)&&(i.options===void 0||(i.options.overwrite===void 0||ze.boolean(i.options.overwrite))&&(i.options.ignoreIfExists===void 0||ze.boolean(i.options.ignoreIfExists)))&&(i.annotationId===void 0||Dg.is(i.annotationId))}o(r,"is"),t.is=r})(iM||(iM={}));(function(t){function e(n,i,a){let s={kind:"delete",uri:n};return i!==void 0&&(i.recursive!==void 0||i.ignoreIfNotExists!==void 0)&&(s.options=i),a!==void 0&&(s.annotationId=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="delete"&&ze.string(i.uri)&&(i.options===void 0||(i.options.recursive===void 0||ze.boolean(i.options.recursive))&&(i.options.ignoreIfNotExists===void 0||ze.boolean(i.options.ignoreIfNotExists)))&&(i.annotationId===void 0||Dg.is(i.annotationId))}o(r,"is"),t.is=r})(aM||(aM={}));(function(t){function e(r){let n=r;return n&&(n.changes!==void 0||n.documentChanges!==void 0)&&(n.documentChanges===void 0||n.documentChanges.every(i=>ze.string(i.kind)?nM.is(i)||iM.is(i)||aM.is(i):rM.is(i)))}o(e,"is"),t.is=e})(sM||(sM={}));(function(t){function e(n){return{uri:n}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.defined(i)&&ze.string(i.uri)}o(r,"is"),t.is=r})(ale||(ale={}));(function(t){function e(n,i){return{uri:n,version:i}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.defined(i)&&ze.string(i.uri)&&ze.integer(i.version)}o(r,"is"),t.is=r})(sle||(sle={}));(function(t){function e(n,i){return{uri:n,version:i}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.defined(i)&&ze.string(i.uri)&&(i.version===null||ze.integer(i.version))}o(r,"is"),t.is=r})(oM||(oM={}));(function(t){function e(n,i,a,s){return{uri:n,languageId:i,version:a,text:s}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.defined(i)&&ze.string(i.uri)&&ze.string(i.languageId)&&ze.integer(i.version)&&ze.string(i.text)}o(r,"is"),t.is=r})(ole||(ole={}));(function(t){t.PlainText="plaintext",t.Markdown="markdown";function e(r){let n=r;return n===t.PlainText||n===t.Markdown}o(e,"is"),t.is=e})(lM||(lM={}));(function(t){function e(r){let n=r;return ze.objectLiteral(r)&&lM.is(n.kind)&&ze.string(n.value)}o(e,"is"),t.is=e})(G2||(G2={}));(function(t){t.Text=1,t.Method=2,t.Function=3,t.Constructor=4,t.Field=5,t.Variable=6,t.Class=7,t.Interface=8,t.Module=9,t.Property=10,t.Unit=11,t.Value=12,t.Enum=13,t.Keyword=14,t.Snippet=15,t.Color=16,t.File=17,t.Reference=18,t.Folder=19,t.EnumMember=20,t.Constant=21,t.Struct=22,t.Event=23,t.Operator=24,t.TypeParameter=25})(lle||(lle={}));(function(t){t.PlainText=1,t.Snippet=2})(cle||(cle={}));(function(t){t.Deprecated=1})(ule||(ule={}));(function(t){function e(n,i,a){return{newText:n,insert:i,replace:a}}o(e,"create"),t.create=e;function r(n){let i=n;return i&&ze.string(i.newText)&&Nr.is(i.insert)&&Nr.is(i.replace)}o(r,"is"),t.is=r})(hle||(hle={}));(function(t){t.asIs=1,t.adjustIndentation=2})(fle||(fle={}));(function(t){function e(r){let n=r;return n&&(ze.string(n.detail)||n.detail===void 0)&&(ze.string(n.description)||n.description===void 0)}o(e,"is"),t.is=e})(dle||(dle={}));(function(t){function e(r){return{label:r}}o(e,"create"),t.create=e})(ple||(ple={}));(function(t){function e(r,n){return{items:r||[],isIncomplete:!!n}}o(e,"create"),t.create=e})(mle||(mle={}));(function(t){function e(n){return n.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&")}o(e,"fromPlainText"),t.fromPlainText=e;function r(n){let i=n;return ze.string(i)||ze.objectLiteral(i)&&ze.string(i.language)&&ze.string(i.value)}o(r,"is"),t.is=r})(Pk||(Pk={}));(function(t){function e(r){let n=r;return!!n&&ze.objectLiteral(n)&&(G2.is(n.contents)||Pk.is(n.contents)||ze.typedArray(n.contents,Pk.is))&&(r.range===void 0||Nr.is(r.range))}o(e,"is"),t.is=e})(gle||(gle={}));(function(t){function e(r,n){return n?{label:r,documentation:n}:{label:r}}o(e,"create"),t.create=e})(yle||(yle={}));(function(t){function e(r,n,...i){let a={label:r};return ze.defined(n)&&(a.documentation=n),ze.defined(i)?a.parameters=i:a.parameters=[],a}o(e,"create"),t.create=e})(vle||(vle={}));(function(t){t.Text=1,t.Read=2,t.Write=3})(xle||(xle={}));(function(t){function e(r,n){let i={range:r};return ze.number(n)&&(i.kind=n),i}o(e,"create"),t.create=e})(ble||(ble={}));(function(t){t.File=1,t.Module=2,t.Namespace=3,t.Package=4,t.Class=5,t.Method=6,t.Property=7,t.Field=8,t.Constructor=9,t.Enum=10,t.Interface=11,t.Function=12,t.Variable=13,t.Constant=14,t.String=15,t.Number=16,t.Boolean=17,t.Array=18,t.Object=19,t.Key=20,t.Null=21,t.EnumMember=22,t.Struct=23,t.Event=24,t.Operator=25,t.TypeParameter=26})(wle||(wle={}));(function(t){t.Deprecated=1})(Tle||(Tle={}));(function(t){function e(r,n,i,a,s){let l={name:r,kind:n,location:{uri:a,range:i}};return s&&(l.containerName=s),l}o(e,"create"),t.create=e})(kle||(kle={}));(function(t){function e(r,n,i,a){return a!==void 0?{name:r,kind:n,location:{uri:i,range:a}}:{name:r,kind:n,location:{uri:i}}}o(e,"create"),t.create=e})(Ele||(Ele={}));(function(t){function e(n,i,a,s,l,u){let h={name:n,detail:i,kind:a,range:s,selectionRange:l};return u!==void 0&&(h.children=u),h}o(e,"create"),t.create=e;function r(n){let i=n;return i&&ze.string(i.name)&&ze.number(i.kind)&&Nr.is(i.range)&&Nr.is(i.selectionRange)&&(i.detail===void 0||ze.string(i.detail))&&(i.deprecated===void 0||ze.boolean(i.deprecated))&&(i.children===void 0||Array.isArray(i.children))&&(i.tags===void 0||Array.isArray(i.tags))}o(r,"is"),t.is=r})(Sle||(Sle={}));(function(t){t.Empty="",t.QuickFix="quickfix",t.Refactor="refactor",t.RefactorExtract="refactor.extract",t.RefactorInline="refactor.inline",t.RefactorRewrite="refactor.rewrite",t.Source="source",t.SourceOrganizeImports="source.organizeImports",t.SourceFixAll="source.fixAll"})(Cle||(Cle={}));(function(t){t.Invoked=1,t.Automatic=2})(Bk||(Bk={}));(function(t){function e(n,i,a){let s={diagnostics:n};return i!=null&&(s.only=i),a!=null&&(s.triggerKind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return ze.defined(i)&&ze.typedArray(i.diagnostics,Ok.is)&&(i.only===void 0||ze.typedArray(i.only,ze.string))&&(i.triggerKind===void 0||i.triggerKind===Bk.Invoked||i.triggerKind===Bk.Automatic)}o(r,"is"),t.is=r})(Ale||(Ale={}));(function(t){function e(n,i,a){let s={title:n},l=!0;return typeof i=="string"?(l=!1,s.kind=i):_g.is(i)?s.command=i:s.edit=i,l&&a!==void 0&&(s.kind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&ze.string(i.title)&&(i.diagnostics===void 0||ze.typedArray(i.diagnostics,Ok.is))&&(i.kind===void 0||ze.string(i.kind))&&(i.edit!==void 0||i.command!==void 0)&&(i.command===void 0||_g.is(i.command))&&(i.isPreferred===void 0||ze.boolean(i.isPreferred))&&(i.edit===void 0||sM.is(i.edit))}o(r,"is"),t.is=r})(_le||(_le={}));(function(t){function e(n,i){let a={range:n};return ze.defined(i)&&(a.data=i),a}o(e,"create"),t.create=e;function r(n){let i=n;return ze.defined(i)&&Nr.is(i.range)&&(ze.undefined(i.command)||_g.is(i.command))}o(r,"is"),t.is=r})(Lle||(Lle={}));(function(t){function e(n,i){return{tabSize:n,insertSpaces:i}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.defined(i)&&ze.uinteger(i.tabSize)&&ze.boolean(i.insertSpaces)}o(r,"is"),t.is=r})(Dle||(Dle={}));(function(t){function e(n,i,a){return{range:n,target:i,data:a}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.defined(i)&&Nr.is(i.range)&&(ze.undefined(i.target)||ze.string(i.target))}o(r,"is"),t.is=r})(Nle||(Nle={}));(function(t){function e(n,i){return{range:n,parent:i}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.objectLiteral(i)&&Nr.is(i.range)&&(i.parent===void 0||t.is(i.parent))}o(r,"is"),t.is=r})(Rle||(Rle={}));(function(t){t.namespace="namespace",t.type="type",t.class="class",t.enum="enum",t.interface="interface",t.struct="struct",t.typeParameter="typeParameter",t.parameter="parameter",t.variable="variable",t.property="property",t.enumMember="enumMember",t.event="event",t.function="function",t.method="method",t.macro="macro",t.keyword="keyword",t.modifier="modifier",t.comment="comment",t.string="string",t.number="number",t.regexp="regexp",t.operator="operator",t.decorator="decorator"})(Mle||(Mle={}));(function(t){t.declaration="declaration",t.definition="definition",t.readonly="readonly",t.static="static",t.deprecated="deprecated",t.abstract="abstract",t.async="async",t.modification="modification",t.documentation="documentation",t.defaultLibrary="defaultLibrary"})(Ile||(Ile={}));(function(t){function e(r){let n=r;return ze.objectLiteral(n)&&(n.resultId===void 0||typeof n.resultId=="string")&&Array.isArray(n.data)&&(n.data.length===0||typeof n.data[0]=="number")}o(e,"is"),t.is=e})(Ole||(Ole={}));(function(t){function e(n,i){return{range:n,text:i}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&Nr.is(i.range)&&ze.string(i.text)}o(r,"is"),t.is=r})(Ple||(Ple={}));(function(t){function e(n,i,a){return{range:n,variableName:i,caseSensitiveLookup:a}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&Nr.is(i.range)&&ze.boolean(i.caseSensitiveLookup)&&(ze.string(i.variableName)||i.variableName===void 0)}o(r,"is"),t.is=r})(Ble||(Ble={}));(function(t){function e(n,i){return{range:n,expression:i}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&Nr.is(i.range)&&(ze.string(i.expression)||i.expression===void 0)}o(r,"is"),t.is=r})(Fle||(Fle={}));(function(t){function e(n,i){return{frameId:n,stoppedLocation:i}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.defined(i)&&Nr.is(n.stoppedLocation)}o(r,"is"),t.is=r})(zle||(zle={}));(function(t){t.Type=1,t.Parameter=2;function e(r){return r===1||r===2}o(e,"is"),t.is=e})(cM||(cM={}));(function(t){function e(n){return{value:n}}o(e,"create"),t.create=e;function r(n){let i=n;return ze.objectLiteral(i)&&(i.tooltip===void 0||ze.string(i.tooltip)||G2.is(i.tooltip))&&(i.location===void 0||Ik.is(i.location))&&(i.command===void 0||_g.is(i.command))}o(r,"is"),t.is=r})(uM||(uM={}));(function(t){function e(n,i,a){let s={position:n,label:i};return a!==void 0&&(s.kind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return ze.objectLiteral(i)&&Xr.is(i.position)&&(ze.string(i.label)||ze.typedArray(i.label,uM.is))&&(i.kind===void 0||cM.is(i.kind))&&i.textEdits===void 0||ze.typedArray(i.textEdits,Lg.is)&&(i.tooltip===void 0||ze.string(i.tooltip)||G2.is(i.tooltip))&&(i.paddingLeft===void 0||ze.boolean(i.paddingLeft))&&(i.paddingRight===void 0||ze.boolean(i.paddingRight))}o(r,"is"),t.is=r})(Gle||(Gle={}));(function(t){function e(r){return{kind:"snippet",value:r}}o(e,"createSnippet"),t.createSnippet=e})($le||($le={}));(function(t){function e(r,n,i,a){return{insertText:r,filterText:n,range:i,command:a}}o(e,"create"),t.create=e})(Vle||(Vle={}));(function(t){function e(r){return{items:r}}o(e,"create"),t.create=e})(Ule||(Ule={}));(function(t){t.Invoked=0,t.Automatic=1})(Hle||(Hle={}));(function(t){function e(r,n){return{range:r,text:n}}o(e,"create"),t.create=e})(Wle||(Wle={}));(function(t){function e(r,n){return{triggerKind:r,selectedCompletionInfo:n}}o(e,"create"),t.create=e})(Yle||(Yle={}));(function(t){function e(r){let n=r;return ze.objectLiteral(n)&&ZR.is(n.uri)&&ze.string(n.name)}o(e,"is"),t.is=e})(qle||(qle={}));(function(t){function e(a,s,l,u){return new hM(a,s,l,u)}o(e,"create"),t.create=e;function r(a){let s=a;return!!(ze.defined(s)&&ze.string(s.uri)&&(ze.undefined(s.languageId)||ze.string(s.languageId))&&ze.uinteger(s.lineCount)&&ze.func(s.getText)&&ze.func(s.positionAt)&&ze.func(s.offsetAt))}o(r,"is"),t.is=r;function n(a,s){let l=a.getText(),u=i(s,(f,d)=>{let p=f.range.start.line-d.range.start.line;return p===0?f.range.start.character-d.range.start.character:p}),h=l.length;for(let f=u.length-1;f>=0;f--){let d=u[f],p=a.offsetAt(d.range.start),m=a.offsetAt(d.range.end);if(m<=h)l=l.substring(0,p)+d.newText+l.substring(m,l.length);else throw new Error("Overlapping edit");h=p}return l}o(n,"applyEdits"),t.applyEdits=n;function i(a,s){if(a.length<=1)return a;let l=a.length/2|0,u=a.slice(0,l),h=a.slice(l);i(u,s),i(h,s);let f=0,d=0,p=0;for(;f0&&e.push(r.length),this._lineOffsets=e}return this._lineOffsets}positionAt(e){e=Math.max(Math.min(e,this._content.length),0);let r=this.getLineOffsets(),n=0,i=r.length;if(i===0)return Xr.create(0,e);for(;ne?i=s:n=s+1}let a=n-1;return Xr.create(a,e-r[a])}offsetAt(e){let r=this.getLineOffsets();if(e.line>=r.length)return this._content.length;if(e.line<0)return 0;let n=r[e.line],i=e.line+1"u"}o(n,"undefined"),t.undefined=n;function i(m){return m===!0||m===!1}o(i,"boolean"),t.boolean=i;function a(m){return e.call(m)==="[object String]"}o(a,"string"),t.string=a;function s(m){return e.call(m)==="[object Number]"}o(s,"number"),t.number=s;function l(m,g,y){return e.call(m)==="[object Number]"&&g<=m&&m<=y}o(l,"numberRange"),t.numberRange=l;function u(m){return e.call(m)==="[object Number]"&&-2147483648<=m&&m<=2147483647}o(u,"integer"),t.integer=u;function h(m){return e.call(m)==="[object Number]"&&0<=m&&m<=2147483647}o(h,"uinteger"),t.uinteger=h;function f(m){return e.call(m)==="[object Function]"}o(f,"func"),t.func=f;function d(m){return m!==null&&typeof m=="object"}o(d,"objectLiteral"),t.objectLiteral=d;function p(m,g){return Array.isArray(m)&&m.every(g)}o(p,"typedArray"),t.typedArray=p})(ze||(ze={}))});var $2,V2,x0,b0,dM,Ng,Fk=M(()=>{"use strict";fM();Zo();zl();$2=class{static{o(this,"CstNodeBuilder")}constructor(){this.nodeStack=[]}get current(){return this.nodeStack[this.nodeStack.length-1]}buildRootNode(e){return this.rootNode=new Ng(e),this.rootNode.root=this.rootNode,this.nodeStack=[this.rootNode],this.rootNode}buildCompositeNode(e){let r=new b0;return r.grammarSource=e,r.root=this.rootNode,this.current.content.push(r),this.nodeStack.push(r),r}buildLeafNode(e,r){let n=new x0(e.startOffset,e.image.length,eg(e),e.tokenType,!1);return n.grammarSource=r,n.root=this.rootNode,this.current.content.push(n),n}removeNode(e){let r=e.container;if(r){let n=r.content.indexOf(e);n>=0&&r.content.splice(n,1)}}construct(e){let r=this.current;typeof e.$type=="string"&&(this.current.astNode=e),e.$cstNode=r;let n=this.nodeStack.pop();n?.content.length===0&&this.removeNode(n)}addHiddenTokens(e){for(let r of e){let n=new x0(r.startOffset,r.image.length,eg(r),r.tokenType,!0);n.root=this.rootNode,this.addHiddenToken(this.rootNode,n)}}addHiddenToken(e,r){let{offset:n,end:i}=r;for(let a=0;al&&i=0;e--){let r=this.content[e];if(!r.hidden)return r}return this.content[this.content.length-1]}},dM=class t extends Array{static{o(this,"CstNodeContainer")}constructor(e){super(),this.parent=e,Object.setPrototypeOf(this,t.prototype)}push(...e){return this.addParents(e),super.push(...e)}unshift(...e){return this.addParents(e),super.unshift(...e)}splice(e,r,...n){return this.addParents(n),super.splice(e,r,...n)}addParents(e){for(let r of e)r.container=this.parent}},Ng=class extends b0{static{o(this,"RootCstNodeImpl")}get text(){return this._text.substring(this.offset,this.end)}get fullText(){return this._text}constructor(e){super(),this._text="",this._text=e??""}}});function pM(t){return t.$type===zk}var zk,jle,Kle,U2,H2,Gk,Rg,W2,YFe,mM,Y2=M(()=>{"use strict";g0();qoe();Bc();Vl();os();Fk();zk=Symbol("Datatype");o(pM,"isDataTypeNode");jle="\u200B",Kle=o(t=>t.endsWith(jle)?t:t+jle,"withRuleSuffix"),U2=class{static{o(this,"AbstractLangiumParser")}constructor(e){this._unorderedGroups=new Map,this.lexer=e.parser.Lexer;let r=this.lexer.definition;this.wrapper=new mM(r,Object.assign(Object.assign({},e.parser.ParserConfig),{errorMessageProvider:e.parser.ParserErrorMessageProvider}))}alternatives(e,r){this.wrapper.wrapOr(e,r)}optional(e,r){this.wrapper.wrapOption(e,r)}many(e,r){this.wrapper.wrapMany(e,r)}atLeastOne(e,r){this.wrapper.wrapAtLeastOne(e,r)}isRecording(){return this.wrapper.IS_RECORDING}get unorderedGroups(){return this._unorderedGroups}getRuleStack(){return this.wrapper.RULE_STACK}finalize(){this.wrapper.wrapSelfAnalysis()}},H2=class extends U2{static{o(this,"LangiumParser")}get current(){return this.stack[this.stack.length-1]}constructor(e){super(e),this.nodeBuilder=new $2,this.stack=[],this.assignmentMap=new Map,this.linker=e.references.Linker,this.converter=e.parser.ValueConverter,this.astReflection=e.shared.AstReflection}rule(e,r){let n=e.fragment?void 0:m2(e)?zk:l0(e),i=this.wrapper.DEFINE_RULE(Kle(e.name),this.startImplementation(n,r).bind(this));return e.entry&&(this.mainRule=i),i}parse(e){this.nodeBuilder.buildRootNode(e);let r=this.lexer.tokenize(e);this.wrapper.input=r.tokens;let n=this.mainRule.call(this.wrapper,{});return this.nodeBuilder.addHiddenTokens(r.hidden),this.unorderedGroups.clear(),{value:n,lexerErrors:r.errors,parserErrors:this.wrapper.errors}}startImplementation(e,r){return n=>{if(!this.isRecording()){let a={$type:e};this.stack.push(a),e===zk&&(a.value="")}let i;try{i=r(n)}catch{i=void 0}return!this.isRecording()&&i===void 0&&(i=this.construct()),i}}consume(e,r,n){let i=this.wrapper.wrapConsume(e,r);if(!this.isRecording()&&this.isValidToken(i)){let a=this.nodeBuilder.buildLeafNode(i,n),{assignment:s,isCrossRef:l}=this.getAssignment(n),u=this.current;if(s){let h=el(n)?i.image:this.converter.convert(i.image,a);this.assign(s.operator,s.feature,h,a,l)}else if(pM(u)){let h=i.image;el(n)||(h=this.converter.convert(h,a).toString()),u.value+=h}}}isValidToken(e){return!e.isInsertedInRecovery&&!isNaN(e.startOffset)&&typeof e.endOffset=="number"&&!isNaN(e.endOffset)}subrule(e,r,n,i){let a;this.isRecording()||(a=this.nodeBuilder.buildCompositeNode(n));let s=this.wrapper.wrapSubrule(e,r,i);!this.isRecording()&&a&&a.length>0&&this.performSubruleAssignment(s,n,a)}performSubruleAssignment(e,r,n){let{assignment:i,isCrossRef:a}=this.getAssignment(r);if(i)this.assign(i.operator,i.feature,e,n,a);else if(!i){let s=this.current;if(pM(s))s.value+=e.toString();else if(typeof e=="object"&&e){let l=e.$type,u=this.assignWithoutOverride(e,s);l&&(u.$type=l);let h=u;this.stack.pop(),this.stack.push(h)}}}action(e,r){if(!this.isRecording()){let n=this.current;if(!n.$cstNode&&r.feature&&r.operator){n=this.construct(!1);let a=n.$cstNode.feature;this.nodeBuilder.buildCompositeNode(a)}let i={$type:e};this.stack.pop(),this.stack.push(i),r.feature&&r.operator&&this.assign(r.operator,r.feature,n,n.$cstNode,!1)}}construct(e=!0){if(this.isRecording())return;let r=this.current;return FT(r),this.nodeBuilder.construct(r),e&&this.stack.pop(),pM(r)?this.converter.convert(r.value,r.$cstNode):(UN(this.astReflection,r),r)}getAssignment(e){if(!this.assignmentMap.has(e)){let r=n0(e,Gl);this.assignmentMap.set(e,{assignment:r,isCrossRef:r?r0(r.terminal):!1})}return this.assignmentMap.get(e)}assign(e,r,n,i,a){let s=this.current,l;switch(a&&typeof n=="string"?l=this.linker.buildReference(s,r,i,n):l=n,e){case"=":{s[r]=l;break}case"?=":{s[r]=!0;break}case"+=":Array.isArray(s[r])||(s[r]=[]),s[r].push(l)}}assignWithoutOverride(e,r){for(let[n,i]of Object.entries(r)){let a=e[n];a===void 0?e[n]=i:Array.isArray(a)&&Array.isArray(i)&&(i.push(...a),e[n]=i)}return e}get definitionErrors(){return this.wrapper.definitionErrors}},Gk=class{static{o(this,"AbstractParserErrorMessageProvider")}buildMismatchTokenMessage(e){return Xu.buildMismatchTokenMessage(e)}buildNotAllInputParsedMessage(e){return Xu.buildNotAllInputParsedMessage(e)}buildNoViableAltMessage(e){return Xu.buildNoViableAltMessage(e)}buildEarlyExitMessage(e){return Xu.buildEarlyExitMessage(e)}},Rg=class extends Gk{static{o(this,"LangiumParserErrorMessageProvider")}buildMismatchTokenMessage({expected:e,actual:r}){return`Expecting ${e.LABEL?"`"+e.LABEL+"`":e.name.endsWith(":KW")?`keyword '${e.name.substring(0,e.name.length-3)}'`:`token of type '${e.name}'`} but found \`${r.image}\`.`}buildNotAllInputParsedMessage({firstRedundant:e}){return`Expecting end of file but found \`${e.image}\`.`}},W2=class extends U2{static{o(this,"LangiumCompletionParser")}constructor(){super(...arguments),this.tokens=[],this.elementStack=[],this.lastElementStack=[],this.nextTokenIndex=0,this.stackSize=0}action(){}construct(){}parse(e){this.resetState();let r=this.lexer.tokenize(e);return this.tokens=r.tokens,this.wrapper.input=[...this.tokens],this.mainRule.call(this.wrapper,{}),this.unorderedGroups.clear(),{tokens:this.tokens,elementStack:[...this.lastElementStack],tokenIndex:this.nextTokenIndex}}rule(e,r){let n=this.wrapper.DEFINE_RULE(Kle(e.name),this.startImplementation(r).bind(this));return e.entry&&(this.mainRule=n),n}resetState(){this.elementStack=[],this.lastElementStack=[],this.nextTokenIndex=0,this.stackSize=0}startImplementation(e){return r=>{let n=this.keepStackSize();try{e(r)}finally{this.resetStackSize(n)}}}removeUnexpectedElements(){this.elementStack.splice(this.stackSize)}keepStackSize(){let e=this.elementStack.length;return this.stackSize=e,e}resetStackSize(e){this.removeUnexpectedElements(),this.stackSize=e}consume(e,r,n){this.wrapper.wrapConsume(e,r),this.isRecording()||(this.lastElementStack=[...this.elementStack,n],this.nextTokenIndex=this.currIdx+1)}subrule(e,r,n,i){this.before(n),this.wrapper.wrapSubrule(e,r,i),this.after(n)}before(e){this.isRecording()||this.elementStack.push(e)}after(e){if(!this.isRecording()){let r=this.elementStack.lastIndexOf(e);r>=0&&this.elementStack.splice(r)}}get currIdx(){return this.wrapper.currIdx}},YFe={recoveryEnabled:!0,nodeLocationTracking:"full",skipValidations:!0,errorMessageProvider:new Rg},mM=class extends O2{static{o(this,"ChevrotainWrapper")}constructor(e,r){let n=r&&"maxLookahead"in r;super(e,Object.assign(Object.assign(Object.assign({},YFe),{lookaheadStrategy:n?new ju({maxLookahead:r.maxLookahead}):new z2}),r))}get IS_RECORDING(){return this.RECORDING_PHASE}DEFINE_RULE(e,r){return this.RULE(e,r)}wrapSelfAnalysis(){this.performSelfAnalysis()}wrapConsume(e,r){return this.consume(e,r)}wrapSubrule(e,r,n){return this.subrule(e,r,{ARGS:[n]})}wrapOr(e,r){this.or(e,r)}wrapOption(e,r){this.option(e,r)}wrapMany(e,r){this.many(e,r)}wrapAtLeastOne(e,r){this.atLeastOne(e,r)}}});function Vk(t,e,r){return qFe({parser:e,tokens:r,rules:new Map,ruleNames:new Map},t),e}function qFe(t,e){let r=d2(e,!1),n=tn(e.rules).filter(Ga).filter(i=>r.has(i));for(let i of n){let a=Object.assign(Object.assign({},t),{consume:1,optional:1,subrule:1,many:1,or:1});a.rules.set(i.name,t.parser.rule(i,w0(a,i.definition)))}}function w0(t,e,r=!1){let n;if(el(e))n=eze(t,e);else if(Vu(e))n=XFe(t,e);else if(Gl(e))n=w0(t,e.terminal);else if(r0(e))n=Qle(t,e);else if($l(e))n=jFe(t,e);else if(OT(e))n=QFe(t,e);else if(BT(e))n=ZFe(t,e);else if(hf(e))n=JFe(t,e);else if(kN(e)){let i=t.consume++;n=o(()=>t.parser.consume(i,mo,e),"method")}else throw new t0(e.$cstNode,`Unexpected element type: ${e.$type}`);return Zle(t,r?void 0:$k(e),n,e.cardinality)}function XFe(t,e){let r=l0(e);return()=>t.parser.action(r,e)}function jFe(t,e){let r=e.rule.ref;if(Ga(r)){let n=t.subrule++,i=e.arguments.length>0?KFe(r,e.arguments):()=>({});return a=>t.parser.subrule(n,Jle(t,r),e,i(a))}else if(Jo(r)){let n=t.consume++,i=gM(t,r.name);return()=>t.parser.consume(n,i,e)}else if(r)uf(r);else throw new t0(e.$cstNode,`Undefined rule type: ${e.$type}`)}function KFe(t,e){let r=e.map(n=>Ku(n.value));return n=>{let i={};for(let a=0;ae(n)||r(n)}else if(jD(t)){let e=Ku(t.left),r=Ku(t.right);return n=>e(n)&&r(n)}else if(rN(t)){let e=Ku(t.value);return r=>!e(r)}else if(sN(t)){let e=t.parameter.ref.name;return r=>r!==void 0&&r[e]===!0}else if(qD(t)){let e=!!t.true;return()=>e}uf(t)}function QFe(t,e){if(e.elements.length===1)return w0(t,e.elements[0]);{let r=[];for(let i of e.elements){let a={ALT:w0(t,i,!0)},s=$k(i);s&&(a.GATE=Ku(s)),r.push(a)}let n=t.or++;return i=>t.parser.alternatives(n,r.map(a=>{let s={ALT:o(()=>a.ALT(i),"ALT")},l=a.GATE;return l&&(s.GATE=()=>l(i)),s}))}}function ZFe(t,e){if(e.elements.length===1)return w0(t,e.elements[0]);let r=[];for(let l of e.elements){let u={ALT:w0(t,l,!0)},h=$k(l);h&&(u.GATE=Ku(h)),r.push(u)}let n=t.or++,i=o((l,u)=>{let h=u.getRuleStack().join("-");return`uGroup_${l}_${h}`},"idFunc"),a=o(l=>t.parser.alternatives(n,r.map((u,h)=>{let f={ALT:o(()=>!0,"ALT")},d=t.parser;f.ALT=()=>{if(u.ALT(l),!d.isRecording()){let m=i(n,d);d.unorderedGroups.get(m)||d.unorderedGroups.set(m,[]);let g=d.unorderedGroups.get(m);typeof g?.[h]>"u"&&(g[h]=!0)}};let p=u.GATE;return p?f.GATE=()=>p(l):f.GATE=()=>{let m=d.unorderedGroups.get(i(n,d));return!m?.[h]},f})),"alternatives"),s=Zle(t,$k(e),a,"*");return l=>{s(l),t.parser.isRecording()||t.parser.unorderedGroups.delete(i(n,t.parser))}}function JFe(t,e){let r=e.elements.map(n=>w0(t,n));return n=>r.forEach(i=>i(n))}function $k(t){if(hf(t))return t.guardCondition}function Qle(t,e,r=e.terminal){if(r)if($l(r)&&Ga(r.rule.ref)){let n=t.subrule++;return i=>t.parser.subrule(n,Jle(t,r.rule.ref),e,i)}else if($l(r)&&Jo(r.rule.ref)){let n=t.consume++,i=gM(t,r.rule.ref.name);return()=>t.parser.consume(n,i,e)}else if(el(r)){let n=t.consume++,i=gM(t,r.value);return()=>t.parser.consume(n,i,e)}else throw new Error("Could not build cross reference parser");else{if(!e.type.ref)throw new Error("Could not resolve reference to type: "+e.type.$refText);let n=HT(e.type.ref),i=n?.terminal;if(!i)throw new Error("Could not find name assignment for type: "+l0(e.type.ref));return Qle(t,e,i)}}function eze(t,e){let r=t.consume++,n=t.tokens[e.value];if(!n)throw new Error("Could not find token for keyword: "+e.value);return()=>t.parser.consume(r,n,e)}function Zle(t,e,r,n){let i=e&&Ku(e);if(!n)if(i){let a=t.or++;return s=>t.parser.alternatives(a,[{ALT:o(()=>r(s),"ALT"),GATE:o(()=>i(s),"GATE")},{ALT:Dk(),GATE:o(()=>!i(s),"GATE")}])}else return r;if(n==="*"){let a=t.many++;return s=>t.parser.many(a,{DEF:o(()=>r(s),"DEF"),GATE:i?()=>i(s):void 0})}else if(n==="+"){let a=t.many++;if(i){let s=t.or++;return l=>t.parser.alternatives(s,[{ALT:o(()=>t.parser.atLeastOne(a,{DEF:o(()=>r(l),"DEF")}),"ALT"),GATE:o(()=>i(l),"GATE")},{ALT:Dk(),GATE:o(()=>!i(l),"GATE")}])}else return s=>t.parser.atLeastOne(a,{DEF:o(()=>r(s),"DEF")})}else if(n==="?"){let a=t.optional++;return s=>t.parser.optional(a,{DEF:o(()=>r(s),"DEF"),GATE:i?()=>i(s):void 0})}else uf(n)}function Jle(t,e){let r=tze(t,e),n=t.rules.get(r);if(!n)throw new Error(`Rule "${r}" not found."`);return n}function tze(t,e){if(Ga(e))return e.name;if(t.ruleNames.has(e))return t.ruleNames.get(e);{let r=e,n=r.$container,i=e.$type;for(;!Ga(n);)(hf(n)||OT(n)||BT(n))&&(i=n.elements.indexOf(r).toString()+":"+i),r=n,n=n.$container;return i=n.name+":"+i,t.ruleNames.set(e,i),i}}function gM(t,e){let r=t.tokens[e];if(!r)throw new Error(`Token "${e}" not found."`);return r}var yM=M(()=>{"use strict";g0();Bc();_T();$s();Vl();o(Vk,"createParser");o(qFe,"buildRules");o(w0,"buildElement");o(XFe,"buildAction");o(jFe,"buildRuleCall");o(KFe,"buildRuleCallPredicate");o(Ku,"buildPredicate");o(QFe,"buildAlternatives");o(ZFe,"buildUnorderedGroup");o(JFe,"buildGroup");o($k,"getGuardCondition");o(Qle,"buildCrossReference");o(eze,"buildKeyword");o(Zle,"wrap");o(Jle,"getRule");o(tze,"getRuleName");o(gM,"getToken")});function vM(t){let e=t.Grammar,r=t.parser.Lexer,n=new W2(t);return Vk(e,n,r.definition),n.finalize(),n}var xM=M(()=>{"use strict";Y2();yM();o(vM,"createCompletionParser")});function bM(t){let e=ece(t);return e.finalize(),e}function ece(t){let e=t.Grammar,r=t.parser.Lexer,n=new H2(t);return Vk(e,n,r.definition)}var wM=M(()=>{"use strict";Y2();yM();o(bM,"createLangiumParser");o(ece,"prepareLangiumParser")});var T0,TM=M(()=>{"use strict";g0();Bc();os();Vl();ig();$s();T0=class{static{o(this,"DefaultTokenBuilder")}buildTokens(e,r){let n=tn(d2(e,!1)),i=this.buildTerminalTokens(n),a=this.buildKeywordTokens(n,i,r);return i.forEach(s=>{let l=s.PATTERN;typeof l=="object"&&l&&"test"in l&&VT(l)?a.unshift(s):a.push(s)}),a}buildTerminalTokens(e){return e.filter(Jo).filter(r=>!r.fragment).map(r=>this.buildTerminalToken(r)).toArray()}buildTerminalToken(e){let r=ag(e),n=this.requiresCustomPattern(r)?this.regexPatternFunction(r):r,i={name:e.name,PATTERN:n,LINE_BREAKS:!0};return e.hidden&&(i.GROUP=VT(r)?ci.SKIPPED:"hidden"),i}requiresCustomPattern(e){return e.flags.includes("u")?!0:!!(e.source.includes("?<=")||e.source.includes("?(r.lastIndex=i,r.exec(n))}buildKeywordTokens(e,r,n){return e.filter(Ga).flatMap(i=>Fc(i).filter(el)).distinct(i=>i.value).toArray().sort((i,a)=>a.value.length-i.value.length).map(i=>this.buildKeywordToken(i,r,!!n?.caseInsensitive))}buildKeywordToken(e,r,n){return{name:e.value,PATTERN:this.buildKeywordPattern(e,n),LONGER_ALT:this.findLongerAlt(e,r)}}buildKeywordPattern(e,r){return r?new RegExp(KN(e.value)):e.value}findLongerAlt(e,r){return r.reduce((n,i)=>{let a=i?.PATTERN;return a?.source&&QN("^"+a.source+"$",e.value)&&n.push(i),n},[])}}});var k0,$c,kM=M(()=>{"use strict";Bc();Vl();k0=class{static{o(this,"DefaultValueConverter")}convert(e,r){let n=r.grammarSource;if(r0(n)&&(n=eR(n)),$l(n)){let i=n.rule.ref;if(!i)throw new Error("This cst node was not parsed by a rule.");return this.runConverter(i,e,r)}return e}runConverter(e,r,n){var i;switch(e.name.toUpperCase()){case"INT":return $c.convertInt(r);case"STRING":return $c.convertString(r);case"ID":return $c.convertID(r)}switch((i=lR(e))===null||i===void 0?void 0:i.toLowerCase()){case"number":return $c.convertNumber(r);case"boolean":return $c.convertBoolean(r);case"bigint":return $c.convertBigint(r);case"date":return $c.convertDate(r);default:return r}}};(function(t){function e(h){let f="";for(let d=1;d{"use strict";Object.defineProperty(CM,"__esModule",{value:!0});var EM;function SM(){if(EM===void 0)throw new Error("No runtime abstraction layer installed");return EM}o(SM,"RAL");(function(t){function e(r){if(r===void 0)throw new Error("No runtime abstraction layer provided");EM=r}o(e,"install"),t.install=e})(SM||(SM={}));CM.default=SM});var nce=Ei($a=>{"use strict";Object.defineProperty($a,"__esModule",{value:!0});$a.stringArray=$a.array=$a.func=$a.error=$a.number=$a.string=$a.boolean=void 0;function rze(t){return t===!0||t===!1}o(rze,"boolean");$a.boolean=rze;function tce(t){return typeof t=="string"||t instanceof String}o(tce,"string");$a.string=tce;function nze(t){return typeof t=="number"||t instanceof Number}o(nze,"number");$a.number=nze;function ize(t){return t instanceof Error}o(ize,"error");$a.error=ize;function aze(t){return typeof t=="function"}o(aze,"func");$a.func=aze;function rce(t){return Array.isArray(t)}o(rce,"array");$a.array=rce;function sze(t){return rce(t)&&t.every(e=>tce(e))}o(sze,"stringArray");$a.stringArray=sze});var LM=Ei(Mg=>{"use strict";Object.defineProperty(Mg,"__esModule",{value:!0});Mg.Emitter=Mg.Event=void 0;var oze=AM(),ice;(function(t){let e={dispose(){}};t.None=function(){return e}})(ice||(Mg.Event=ice={}));var _M=class{static{o(this,"CallbackList")}add(e,r=null,n){this._callbacks||(this._callbacks=[],this._contexts=[]),this._callbacks.push(e),this._contexts.push(r),Array.isArray(n)&&n.push({dispose:o(()=>this.remove(e,r),"dispose")})}remove(e,r=null){if(!this._callbacks)return;let n=!1;for(let i=0,a=this._callbacks.length;i{this._callbacks||(this._callbacks=new _M),this._options&&this._options.onFirstListenerAdd&&this._callbacks.isEmpty()&&this._options.onFirstListenerAdd(this),this._callbacks.add(e,r);let i={dispose:o(()=>{this._callbacks&&(this._callbacks.remove(e,r),i.dispose=t._noop,this._options&&this._options.onLastListenerRemove&&this._callbacks.isEmpty()&&this._options.onLastListenerRemove(this))},"dispose")};return Array.isArray(n)&&n.push(i),i}),this._event}fire(e){this._callbacks&&this._callbacks.invoke.call(this._callbacks,e)}dispose(){this._callbacks&&(this._callbacks.dispose(),this._callbacks=void 0)}};Mg.Emitter=Uk;Uk._noop=function(){}});var ace=Ei(Ig=>{"use strict";Object.defineProperty(Ig,"__esModule",{value:!0});Ig.CancellationTokenSource=Ig.CancellationToken=void 0;var lze=AM(),cze=nce(),DM=LM(),Hk;(function(t){t.None=Object.freeze({isCancellationRequested:!1,onCancellationRequested:DM.Event.None}),t.Cancelled=Object.freeze({isCancellationRequested:!0,onCancellationRequested:DM.Event.None});function e(r){let n=r;return n&&(n===t.None||n===t.Cancelled||cze.boolean(n.isCancellationRequested)&&!!n.onCancellationRequested)}o(e,"is"),t.is=e})(Hk||(Ig.CancellationToken=Hk={}));var uze=Object.freeze(function(t,e){let r=(0,lze.default)().timer.setTimeout(t.bind(e),0);return{dispose(){r.dispose()}}}),Wk=class{static{o(this,"MutableToken")}constructor(){this._isCancelled=!1}cancel(){this._isCancelled||(this._isCancelled=!0,this._emitter&&(this._emitter.fire(void 0),this.dispose()))}get isCancellationRequested(){return this._isCancelled}get onCancellationRequested(){return this._isCancelled?uze:(this._emitter||(this._emitter=new DM.Emitter),this._emitter.event)}dispose(){this._emitter&&(this._emitter.dispose(),this._emitter=void 0)}},NM=class{static{o(this,"CancellationTokenSource")}get token(){return this._token||(this._token=new Wk),this._token}cancel(){this._token?this._token.cancel():this._token=Hk.Cancelled}dispose(){this._token?this._token instanceof Wk&&this._token.dispose():this._token=Hk.None}};Ig.CancellationTokenSource=NM});var Ar={};var rl=M(()=>{"use strict";Sr(Ar,Ji(ace(),1))});function MM(){return new Promise(t=>{typeof setImmediate>"u"?setTimeout(t,0):setImmediate(t)})}function oce(){return RM=Date.now(),new Ar.CancellationTokenSource}function lce(t){sce=t}function mf(t){return t===Vc}async function Hi(t){if(t===Ar.CancellationToken.None)return;let e=Date.now();if(e-RM>=sce&&(RM=e,await MM()),t.isCancellationRequested)throw Vc}var RM,sce,Vc,fs,nl=M(()=>{"use strict";rl();o(MM,"delayNextTick");RM=0,sce=10;o(oce,"startCancelableOperation");o(lce,"setInterruptionPeriod");Vc=Symbol("OperationCancelled");o(mf,"isOperationCancelled");o(Hi,"interruptAndCheck");fs=class{static{o(this,"Deferred")}constructor(){this.promise=new Promise((e,r)=>{this.resolve=n=>(e(n),this),this.reject=n=>(r(n),this)})}}});function IM(t,e){if(t.length<=1)return t;let r=t.length/2|0,n=t.slice(0,r),i=t.slice(r);IM(n,e),IM(i,e);let a=0,s=0,l=0;for(;ar.line||e.line===r.line&&e.character>r.character?{start:r,end:e}:t}function hze(t){let e=hce(t.range);return e!==t.range?{newText:t.newText,range:e}:t}var Yk,Og,fce=M(()=>{"use strict";Yk=class t{static{o(this,"FullTextDocument")}constructor(e,r,n,i){this._uri=e,this._languageId=r,this._version=n,this._content=i,this._lineOffsets=void 0}get uri(){return this._uri}get languageId(){return this._languageId}get version(){return this._version}getText(e){if(e){let r=this.offsetAt(e.start),n=this.offsetAt(e.end);return this._content.substring(r,n)}return this._content}update(e,r){for(let n of e)if(t.isIncremental(n)){let i=hce(n.range),a=this.offsetAt(i.start),s=this.offsetAt(i.end);this._content=this._content.substring(0,a)+n.text+this._content.substring(s,this._content.length);let l=Math.max(i.start.line,0),u=Math.max(i.end.line,0),h=this._lineOffsets,f=cce(n.text,!1,a);if(u-l===f.length)for(let p=0,m=f.length;pe?i=s:n=s+1}let a=n-1;return e=this.ensureBeforeEOL(e,r[a]),{line:a,character:e-r[a]}}offsetAt(e){let r=this.getLineOffsets();if(e.line>=r.length)return this._content.length;if(e.line<0)return 0;let n=r[e.line];if(e.character<=0)return n;let i=e.line+1r&&uce(this._content.charCodeAt(e-1));)e--;return e}get lineCount(){return this.getLineOffsets().length}static isIncremental(e){let r=e;return r!=null&&typeof r.text=="string"&&r.range!==void 0&&(r.rangeLength===void 0||typeof r.rangeLength=="number")}static isFull(e){let r=e;return r!=null&&typeof r.text=="string"&&r.range===void 0&&r.rangeLength===void 0}};(function(t){function e(i,a,s,l){return new Yk(i,a,s,l)}o(e,"create"),t.create=e;function r(i,a,s){if(i instanceof Yk)return i.update(a,s),i;throw new Error("TextDocument.update: document must be created by TextDocument.create")}o(r,"update"),t.update=r;function n(i,a){let s=i.getText(),l=IM(a.map(hze),(f,d)=>{let p=f.range.start.line-d.range.start.line;return p===0?f.range.start.character-d.range.start.character:p}),u=0,h=[];for(let f of l){let d=i.offsetAt(f.range.start);if(du&&h.push(s.substring(u,d)),f.newText.length&&h.push(f.newText),u=i.offsetAt(f.range.end)}return h.push(s.substr(u)),h.join("")}o(n,"applyEdits"),t.applyEdits=n})(Og||(Og={}));o(IM,"mergeSort");o(cce,"computeLineOffsets");o(uce,"isEOL");o(hce,"getWellformedRange");o(hze,"getWellformedEdit")});var dce,Hs,Pg,OM=M(()=>{"use strict";(()=>{"use strict";var t={470:i=>{function a(u){if(typeof u!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(u))}o(a,"e");function s(u,h){for(var f,d="",p=0,m=-1,g=0,y=0;y<=u.length;++y){if(y2){var v=d.lastIndexOf("/");if(v!==d.length-1){v===-1?(d="",p=0):p=(d=d.slice(0,v)).length-1-d.lastIndexOf("/"),m=y,g=0;continue}}else if(d.length===2||d.length===1){d="",p=0,m=y,g=0;continue}}h&&(d.length>0?d+="/..":d="..",p=2)}else d.length>0?d+="/"+u.slice(m+1,y):d=u.slice(m+1,y),p=y-m-1;m=y,g=0}else f===46&&g!==-1?++g:g=-1}return d}o(s,"r");var l={resolve:o(function(){for(var u,h="",f=!1,d=arguments.length-1;d>=-1&&!f;d--){var p;d>=0?p=arguments[d]:(u===void 0&&(u=process.cwd()),p=u),a(p),p.length!==0&&(h=p+"/"+h,f=p.charCodeAt(0)===47)}return h=s(h,!f),f?h.length>0?"/"+h:"/":h.length>0?h:"."},"resolve"),normalize:o(function(u){if(a(u),u.length===0)return".";var h=u.charCodeAt(0)===47,f=u.charCodeAt(u.length-1)===47;return(u=s(u,!h)).length!==0||h||(u="."),u.length>0&&f&&(u+="/"),h?"/"+u:u},"normalize"),isAbsolute:o(function(u){return a(u),u.length>0&&u.charCodeAt(0)===47},"isAbsolute"),join:o(function(){if(arguments.length===0)return".";for(var u,h=0;h0&&(u===void 0?u=f:u+="/"+f)}return u===void 0?".":l.normalize(u)},"join"),relative:o(function(u,h){if(a(u),a(h),u===h||(u=l.resolve(u))===(h=l.resolve(h)))return"";for(var f=1;fy){if(h.charCodeAt(m+x)===47)return h.slice(m+x+1);if(x===0)return h.slice(m+x)}else p>y&&(u.charCodeAt(f+x)===47?v=x:x===0&&(v=0));break}var b=u.charCodeAt(f+x);if(b!==h.charCodeAt(m+x))break;b===47&&(v=x)}var w="";for(x=f+v+1;x<=d;++x)x!==d&&u.charCodeAt(x)!==47||(w.length===0?w+="..":w+="/..");return w.length>0?w+h.slice(m+v):(m+=v,h.charCodeAt(m)===47&&++m,h.slice(m))},"relative"),_makeLong:o(function(u){return u},"_makeLong"),dirname:o(function(u){if(a(u),u.length===0)return".";for(var h=u.charCodeAt(0),f=h===47,d=-1,p=!0,m=u.length-1;m>=1;--m)if((h=u.charCodeAt(m))===47){if(!p){d=m;break}}else p=!1;return d===-1?f?"/":".":f&&d===1?"//":u.slice(0,d)},"dirname"),basename:o(function(u,h){if(h!==void 0&&typeof h!="string")throw new TypeError('"ext" argument must be a string');a(u);var f,d=0,p=-1,m=!0;if(h!==void 0&&h.length>0&&h.length<=u.length){if(h.length===u.length&&h===u)return"";var g=h.length-1,y=-1;for(f=u.length-1;f>=0;--f){var v=u.charCodeAt(f);if(v===47){if(!m){d=f+1;break}}else y===-1&&(m=!1,y=f+1),g>=0&&(v===h.charCodeAt(g)?--g==-1&&(p=f):(g=-1,p=y))}return d===p?p=y:p===-1&&(p=u.length),u.slice(d,p)}for(f=u.length-1;f>=0;--f)if(u.charCodeAt(f)===47){if(!m){d=f+1;break}}else p===-1&&(m=!1,p=f+1);return p===-1?"":u.slice(d,p)},"basename"),extname:o(function(u){a(u);for(var h=-1,f=0,d=-1,p=!0,m=0,g=u.length-1;g>=0;--g){var y=u.charCodeAt(g);if(y!==47)d===-1&&(p=!1,d=g+1),y===46?h===-1?h=g:m!==1&&(m=1):h!==-1&&(m=-1);else if(!p){f=g+1;break}}return h===-1||d===-1||m===0||m===1&&h===d-1&&h===f+1?"":u.slice(h,d)},"extname"),format:o(function(u){if(u===null||typeof u!="object")throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof u);return function(h,f){var d=f.dir||f.root,p=f.base||(f.name||"")+(f.ext||"");return d?d===f.root?d+p:d+"/"+p:p}(0,u)},"format"),parse:o(function(u){a(u);var h={root:"",dir:"",base:"",ext:"",name:""};if(u.length===0)return h;var f,d=u.charCodeAt(0),p=d===47;p?(h.root="/",f=1):f=0;for(var m=-1,g=0,y=-1,v=!0,x=u.length-1,b=0;x>=f;--x)if((d=u.charCodeAt(x))!==47)y===-1&&(v=!1,y=x+1),d===46?m===-1?m=x:b!==1&&(b=1):m!==-1&&(b=-1);else if(!v){g=x+1;break}return m===-1||y===-1||b===0||b===1&&m===y-1&&m===g+1?y!==-1&&(h.base=h.name=g===0&&p?u.slice(1,y):u.slice(g,y)):(g===0&&p?(h.name=u.slice(1,m),h.base=u.slice(1,y)):(h.name=u.slice(g,m),h.base=u.slice(g,y)),h.ext=u.slice(m,y)),g>0?h.dir=u.slice(0,g-1):p&&(h.dir="/"),h},"parse"),sep:"/",delimiter:":",win32:null,posix:null};l.posix=l,i.exports=l}},e={};function r(i){var a=e[i];if(a!==void 0)return a.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}o(r,"r"),r.d=(i,a)=>{for(var s in a)r.o(a,s)&&!r.o(i,s)&&Object.defineProperty(i,s,{enumerable:!0,get:a[s]})},r.o=(i,a)=>Object.prototype.hasOwnProperty.call(i,a),r.r=i=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(i,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(i,"__esModule",{value:!0})};var n={};(()=>{let i;r.r(n),r.d(n,{URI:o(()=>p,"URI"),Utils:o(()=>I,"Utils")}),typeof process=="object"?i=process.platform==="win32":typeof navigator=="object"&&(i=navigator.userAgent.indexOf("Windows")>=0);let a=/^\w[\w\d+.-]*$/,s=/^\//,l=/^\/\//;function u(D,k){if(!D.scheme&&k)throw new Error(`[UriError]: Scheme is missing: {scheme: "", authority: "${D.authority}", path: "${D.path}", query: "${D.query}", fragment: "${D.fragment}"}`);if(D.scheme&&!a.test(D.scheme))throw new Error("[UriError]: Scheme contains illegal characters.");if(D.path){if(D.authority){if(!s.test(D.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character')}else if(l.test(D.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")')}}o(u,"s");let h="",f="/",d=/^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;class p{static{o(this,"f")}static isUri(k){return k instanceof p||!!k&&typeof k.authority=="string"&&typeof k.fragment=="string"&&typeof k.path=="string"&&typeof k.query=="string"&&typeof k.scheme=="string"&&typeof k.fsPath=="string"&&typeof k.with=="function"&&typeof k.toString=="function"}scheme;authority;path;query;fragment;constructor(k,R,C,O,N,P=!1){typeof k=="object"?(this.scheme=k.scheme||h,this.authority=k.authority||h,this.path=k.path||h,this.query=k.query||h,this.fragment=k.fragment||h):(this.scheme=function(F,B){return F||B?F:"file"}(k,P),this.authority=R||h,this.path=function(F,B){switch(F){case"https":case"http":case"file":B?B[0]!==f&&(B=f+B):B=f}return B}(this.scheme,C||h),this.query=O||h,this.fragment=N||h,u(this,P))}get fsPath(){return b(this,!1)}with(k){if(!k)return this;let{scheme:R,authority:C,path:O,query:N,fragment:P}=k;return R===void 0?R=this.scheme:R===null&&(R=h),C===void 0?C=this.authority:C===null&&(C=h),O===void 0?O=this.path:O===null&&(O=h),N===void 0?N=this.query:N===null&&(N=h),P===void 0?P=this.fragment:P===null&&(P=h),R===this.scheme&&C===this.authority&&O===this.path&&N===this.query&&P===this.fragment?this:new g(R,C,O,N,P)}static parse(k,R=!1){let C=d.exec(k);return C?new g(C[2]||h,E(C[4]||h),E(C[5]||h),E(C[7]||h),E(C[9]||h),R):new g(h,h,h,h,h)}static file(k){let R=h;if(i&&(k=k.replace(/\\/g,f)),k[0]===f&&k[1]===f){let C=k.indexOf(f,2);C===-1?(R=k.substring(2),k=f):(R=k.substring(2,C),k=k.substring(C)||f)}return new g("file",R,k,h,h)}static from(k){let R=new g(k.scheme,k.authority,k.path,k.query,k.fragment);return u(R,!0),R}toString(k=!1){return w(this,k)}toJSON(){return this}static revive(k){if(k){if(k instanceof p)return k;{let R=new g(k);return R._formatted=k.external,R._fsPath=k._sep===m?k.fsPath:null,R}}return k}}let m=i?1:void 0;class g extends p{static{o(this,"l")}_formatted=null;_fsPath=null;get fsPath(){return this._fsPath||(this._fsPath=b(this,!1)),this._fsPath}toString(k=!1){return k?w(this,!0):(this._formatted||(this._formatted=w(this,!1)),this._formatted)}toJSON(){let k={$mid:1};return this._fsPath&&(k.fsPath=this._fsPath,k._sep=m),this._formatted&&(k.external=this._formatted),this.path&&(k.path=this.path),this.scheme&&(k.scheme=this.scheme),this.authority&&(k.authority=this.authority),this.query&&(k.query=this.query),this.fragment&&(k.fragment=this.fragment),k}}let y={58:"%3A",47:"%2F",63:"%3F",35:"%23",91:"%5B",93:"%5D",64:"%40",33:"%21",36:"%24",38:"%26",39:"%27",40:"%28",41:"%29",42:"%2A",43:"%2B",44:"%2C",59:"%3B",61:"%3D",32:"%20"};function v(D,k,R){let C,O=-1;for(let N=0;N=97&&P<=122||P>=65&&P<=90||P>=48&&P<=57||P===45||P===46||P===95||P===126||k&&P===47||R&&P===91||R&&P===93||R&&P===58)O!==-1&&(C+=encodeURIComponent(D.substring(O,N)),O=-1),C!==void 0&&(C+=D.charAt(N));else{C===void 0&&(C=D.substr(0,N));let F=y[P];F!==void 0?(O!==-1&&(C+=encodeURIComponent(D.substring(O,N)),O=-1),C+=F):O===-1&&(O=N)}}return O!==-1&&(C+=encodeURIComponent(D.substring(O))),C!==void 0?C:D}o(v,"d");function x(D){let k;for(let R=0;R1&&D.scheme==="file"?`//${D.authority}${D.path}`:D.path.charCodeAt(0)===47&&(D.path.charCodeAt(1)>=65&&D.path.charCodeAt(1)<=90||D.path.charCodeAt(1)>=97&&D.path.charCodeAt(1)<=122)&&D.path.charCodeAt(2)===58?k?D.path.substr(1):D.path[1].toLowerCase()+D.path.substr(2):D.path,i&&(R=R.replace(/\//g,"\\")),R}o(b,"m");function w(D,k){let R=k?x:v,C="",{scheme:O,authority:N,path:P,query:F,fragment:B}=D;if(O&&(C+=O,C+=":"),(N||O==="file")&&(C+=f,C+=f),N){let G=N.indexOf("@");if(G!==-1){let z=N.substr(0,G);N=N.substr(G+1),G=z.lastIndexOf(":"),G===-1?C+=R(z,!1,!1):(C+=R(z.substr(0,G),!1,!1),C+=":",C+=R(z.substr(G+1),!1,!0)),C+="@"}N=N.toLowerCase(),G=N.lastIndexOf(":"),G===-1?C+=R(N,!1,!0):(C+=R(N.substr(0,G),!1,!0),C+=N.substr(G))}if(P){if(P.length>=3&&P.charCodeAt(0)===47&&P.charCodeAt(2)===58){let G=P.charCodeAt(1);G>=65&&G<=90&&(P=`/${String.fromCharCode(G+32)}:${P.substr(3)}`)}else if(P.length>=2&&P.charCodeAt(1)===58){let G=P.charCodeAt(0);G>=65&&G<=90&&(P=`${String.fromCharCode(G+32)}:${P.substr(2)}`)}C+=R(P,!0,!1)}return F&&(C+="?",C+=R(F,!1,!1)),B&&(C+="#",C+=k?B:v(B,!1,!1)),C}o(w,"y");function _(D){try{return decodeURIComponent(D)}catch{return D.length>3?D.substr(0,3)+_(D.substr(3)):D}}o(_,"v");let T=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function E(D){return D.match(T)?D.replace(T,k=>_(k)):D}o(E,"C");var L=r(470);let S=L.posix||L,A="/";var I;(function(D){D.joinPath=function(k,...R){return k.with({path:S.join(k.path,...R)})},D.resolvePath=function(k,...R){let C=k.path,O=!1;C[0]!==A&&(C=A+C,O=!0);let N=S.resolve(C,...R);return O&&N[0]===A&&!k.authority&&(N=N.substring(1)),k.with({path:N})},D.dirname=function(k){if(k.path.length===0||k.path===A)return k;let R=S.dirname(k.path);return R.length===1&&R.charCodeAt(0)===46&&(R=""),k.with({path:R})},D.basename=function(k){return S.basename(k.path)},D.extname=function(k){return S.extname(k.path)}})(I||(I={}))})(),dce=n})();({URI:Hs,Utils:Pg}=dce)});var ds,Uc=M(()=>{"use strict";OM();(function(t){t.basename=Pg.basename,t.dirname=Pg.dirname,t.extname=Pg.extname,t.joinPath=Pg.joinPath,t.resolvePath=Pg.resolvePath;function e(n,i){return n?.toString()===i?.toString()}o(e,"equals"),t.equals=e;function r(n,i){let a=typeof n=="string"?n:n.path,s=typeof i=="string"?i:i.path,l=a.split("/").filter(p=>p.length>0),u=s.split("/").filter(p=>p.length>0),h=0;for(;h{"use strict";fce();Bg();rl();$s();Uc();(function(t){t[t.Changed=0]="Changed",t[t.Parsed=1]="Parsed",t[t.IndexedContent=2]="IndexedContent",t[t.ComputedScopes=3]="ComputedScopes",t[t.Linked=4]="Linked",t[t.IndexedReferences=5]="IndexedReferences",t[t.Validated=6]="Validated"})(Tn||(Tn={}));q2=class{static{o(this,"DefaultLangiumDocumentFactory")}constructor(e){this.serviceRegistry=e.ServiceRegistry,this.textDocuments=e.workspace.TextDocuments,this.fileSystemProvider=e.workspace.FileSystemProvider}async fromUri(e,r=Ar.CancellationToken.None){let n=await this.fileSystemProvider.readFile(e);return this.createAsync(e,n,r)}fromTextDocument(e,r,n){return r=r??Hs.parse(e.uri),n?this.createAsync(r,e,n):this.create(r,e)}fromString(e,r,n){return n?this.createAsync(r,e,n):this.create(r,e)}fromModel(e,r){return this.create(r,{$model:e})}create(e,r){if(typeof r=="string"){let n=this.parse(e,r);return this.createLangiumDocument(n,e,void 0,r)}else if("$model"in r){let n={value:r.$model,parserErrors:[],lexerErrors:[]};return this.createLangiumDocument(n,e)}else{let n=this.parse(e,r.getText());return this.createLangiumDocument(n,e,r)}}async createAsync(e,r,n){if(typeof r=="string"){let i=await this.parseAsync(e,r,n);return this.createLangiumDocument(i,e,void 0,r)}else{let i=await this.parseAsync(e,r.getText(),n);return this.createLangiumDocument(i,e,r)}}createLangiumDocument(e,r,n,i){let a;if(n)a={parseResult:e,uri:r,state:Tn.Parsed,references:[],textDocument:n};else{let s=this.createTextDocumentGetter(r,i);a={parseResult:e,uri:r,state:Tn.Parsed,references:[],get textDocument(){return s()}}}return e.value.$document=a,a}async update(e,r){var n,i;let a=(n=e.parseResult.value.$cstNode)===null||n===void 0?void 0:n.root.fullText,s=(i=this.textDocuments)===null||i===void 0?void 0:i.get(e.uri.toString()),l=s?s.getText():await this.fileSystemProvider.readFile(e.uri);if(s)Object.defineProperty(e,"textDocument",{value:s});else{let u=this.createTextDocumentGetter(e.uri,l);Object.defineProperty(e,"textDocument",{get:u})}return a!==l&&(e.parseResult=await this.parseAsync(e.uri,l,r),e.parseResult.value.$document=e),e.state=Tn.Parsed,e}parse(e,r){return this.serviceRegistry.getServices(e).parser.LangiumParser.parse(r)}parseAsync(e,r,n){return this.serviceRegistry.getServices(e).parser.AsyncParser.parse(r,n)}createTextDocumentGetter(e,r){let n=this.serviceRegistry,i;return()=>i??(i=Og.create(e.toString(),n.getServices(e).LanguageMetaData.languageId,0,r??""))}},X2=class{static{o(this,"DefaultLangiumDocuments")}constructor(e){this.documentMap=new Map,this.langiumDocumentFactory=e.workspace.LangiumDocumentFactory}get all(){return tn(this.documentMap.values())}addDocument(e){let r=e.uri.toString();if(this.documentMap.has(r))throw new Error(`A document with the URI '${r}' is already present.`);this.documentMap.set(r,e)}getDocument(e){let r=e.toString();return this.documentMap.get(r)}async getOrCreateDocument(e,r){let n=this.getDocument(e);return n||(n=await this.langiumDocumentFactory.fromUri(e,r),this.addDocument(n),n)}createDocument(e,r,n){if(n)return this.langiumDocumentFactory.fromString(r,e,n).then(i=>(this.addDocument(i),i));{let i=this.langiumDocumentFactory.fromString(r,e);return this.addDocument(i),i}}hasDocument(e){return this.documentMap.has(e.toString())}invalidateDocument(e){let r=e.toString(),n=this.documentMap.get(r);return n&&(n.state=Tn.Changed,n.precomputedScopes=void 0,n.references=[],n.diagnostics=void 0),n}deleteDocument(e){let r=e.toString(),n=this.documentMap.get(r);return n&&(n.state=Tn.Changed,this.documentMap.delete(r)),n}}});var j2,PM=M(()=>{"use strict";rl();Zo();os();nl();Bg();j2=class{static{o(this,"DefaultLinker")}constructor(e){this.reflection=e.shared.AstReflection,this.langiumDocuments=()=>e.shared.workspace.LangiumDocuments,this.scopeProvider=e.references.ScopeProvider,this.astNodeLocator=e.workspace.AstNodeLocator}async link(e,r=Ar.CancellationToken.None){for(let n of tl(e.parseResult.value))await Hi(r),rg(n).forEach(i=>this.doLink(i,e))}doLink(e,r){let n=e.reference;if(n._ref===void 0)try{let i=this.getCandidate(e);if(Zd(i))n._ref=i;else if(n._nodeDescription=i,this.langiumDocuments().hasDocument(i.documentUri)){let a=this.loadAstNode(i);n._ref=a??this.createLinkingError(e,i)}}catch(i){n._ref=Object.assign(Object.assign({},e),{message:`An error occurred while resolving reference to '${n.$refText}': ${i}`})}r.references.push(n)}unlink(e){for(let r of e.references)delete r._ref,delete r._nodeDescription;e.references=[]}getCandidate(e){let n=this.scopeProvider.getScope(e).getElement(e.reference.$refText);return n??this.createLinkingError(e)}buildReference(e,r,n,i){let a=this,s={$refNode:n,$refText:i,get ref(){var l;if(ri(this._ref))return this._ref;if(OD(this._nodeDescription)){let u=a.loadAstNode(this._nodeDescription);this._ref=u??a.createLinkingError({reference:s,container:e,property:r},this._nodeDescription)}else if(this._ref===void 0){let u=a.getLinkedNode({reference:s,container:e,property:r});if(u.error&&Vi(e).state{"use strict";Vl();o(pce,"isNamed");K2=class{static{o(this,"DefaultNameProvider")}getName(e){if(pce(e))return e.name}getNameNode(e){return p2(e.$cstNode,"name")}}});var Q2,FM=M(()=>{"use strict";Vl();Zo();os();zl();$s();Uc();Q2=class{static{o(this,"DefaultReferences")}constructor(e){this.nameProvider=e.references.NameProvider,this.index=e.shared.workspace.IndexManager,this.nodeLocator=e.workspace.AstNodeLocator}findDeclaration(e){if(e){let r=sR(e),n=e.astNode;if(r&&n){let i=n[r.feature];if(Ta(i))return i.ref;if(Array.isArray(i)){for(let a of i)if(Ta(a)&&a.$refNode&&a.$refNode.offset<=e.offset&&a.$refNode.end>=e.end)return a.ref}}if(n){let i=this.nameProvider.getNameNode(n);if(i&&(i===e||BD(e,i)))return n}}}findDeclarationNode(e){let r=this.findDeclaration(e);if(r?.$cstNode){let n=this.nameProvider.getNameNode(r);return n??r.$cstNode}}findReferences(e,r){let n=[];if(r.includeDeclaration){let a=this.getReferenceToSelf(e);a&&n.push(a)}let i=this.index.findAllReferences(e,this.nodeLocator.getAstNodePath(e));return r.documentUri&&(i=i.filter(a=>ds.equals(a.sourceUri,r.documentUri))),n.push(...i),tn(n)}getReferenceToSelf(e){let r=this.nameProvider.getNameNode(e);if(r){let n=Vi(e),i=this.nodeLocator.getAstNodePath(e);return{sourceUri:n.uri,sourcePath:i,targetUri:n.uri,targetPath:i,segment:e0(r),local:!0}}}}});var Hc,E0,Fg=M(()=>{"use strict";$s();Hc=class{static{o(this,"MultiMap")}constructor(e){if(this.map=new Map,e)for(let[r,n]of e)this.add(r,n)}get size(){return Jm.sum(tn(this.map.values()).map(e=>e.length))}clear(){this.map.clear()}delete(e,r){if(r===void 0)return this.map.delete(e);{let n=this.map.get(e);if(n){let i=n.indexOf(r);if(i>=0)return n.length===1?this.map.delete(e):n.splice(i,1),!0}return!1}}get(e){var r;return(r=this.map.get(e))!==null&&r!==void 0?r:[]}has(e,r){if(r===void 0)return this.map.has(e);{let n=this.map.get(e);return n?n.indexOf(r)>=0:!1}}add(e,r){return this.map.has(e)?this.map.get(e).push(r):this.map.set(e,[r]),this}addAll(e,r){return this.map.has(e)?this.map.get(e).push(...r):this.map.set(e,Array.from(r)),this}forEach(e){this.map.forEach((r,n)=>r.forEach(i=>e(i,n,this)))}[Symbol.iterator](){return this.entries().iterator()}entries(){return tn(this.map.entries()).flatMap(([e,r])=>r.map(n=>[e,n]))}keys(){return tn(this.map.keys())}values(){return tn(this.map.values()).flat()}entriesGroupedByKey(){return tn(this.map.entries())}},E0=class{static{o(this,"BiMap")}get size(){return this.map.size}constructor(e){if(this.map=new Map,this.inverse=new Map,e)for(let[r,n]of e)this.set(r,n)}clear(){this.map.clear(),this.inverse.clear()}set(e,r){return this.map.set(e,r),this.inverse.set(r,e),this}get(e){return this.map.get(e)}getKey(e){return this.inverse.get(e)}delete(e){let r=this.map.get(e);return r!==void 0?(this.map.delete(e),this.inverse.delete(r),!0):!1}}});var Z2,zM=M(()=>{"use strict";rl();os();Fg();nl();Z2=class{static{o(this,"DefaultScopeComputation")}constructor(e){this.nameProvider=e.references.NameProvider,this.descriptions=e.workspace.AstNodeDescriptionProvider}async computeExports(e,r=Ar.CancellationToken.None){return this.computeExportsForNode(e.parseResult.value,e,void 0,r)}async computeExportsForNode(e,r,n=l2,i=Ar.CancellationToken.None){let a=[];this.exportNode(e,a,r);for(let s of n(e))await Hi(i),this.exportNode(s,a,r);return a}exportNode(e,r,n){let i=this.nameProvider.getName(e);i&&r.push(this.descriptions.createDescription(e,i,n))}async computeLocalScopes(e,r=Ar.CancellationToken.None){let n=e.parseResult.value,i=new Hc;for(let a of Fc(n))await Hi(r),this.processNode(a,e,i);return i}processNode(e,r,n){let i=e.$container;if(i){let a=this.nameProvider.getName(e);a&&n.add(i,this.descriptions.createDescription(e,a,r))}}}});var zg,J2,fze,GM=M(()=>{"use strict";$s();zg=class{static{o(this,"StreamScope")}constructor(e,r,n){var i;this.elements=e,this.outerScope=r,this.caseInsensitive=(i=n?.caseInsensitive)!==null&&i!==void 0?i:!1}getAllElements(){return this.outerScope?this.elements.concat(this.outerScope.getAllElements()):this.elements}getElement(e){let r=this.caseInsensitive?this.elements.find(n=>n.name.toLowerCase()===e.toLowerCase()):this.elements.find(n=>n.name===e);if(r)return r;if(this.outerScope)return this.outerScope.getElement(e)}},J2=class{static{o(this,"MapScope")}constructor(e,r,n){var i;this.elements=new Map,this.caseInsensitive=(i=n?.caseInsensitive)!==null&&i!==void 0?i:!1;for(let a of e){let s=this.caseInsensitive?a.name.toLowerCase():a.name;this.elements.set(s,a)}this.outerScope=r}getElement(e){let r=this.caseInsensitive?e.toLowerCase():e,n=this.elements.get(r);if(n)return n;if(this.outerScope)return this.outerScope.getElement(e)}getAllElements(){let e=tn(this.elements.values());return this.outerScope&&(e=e.concat(this.outerScope.getAllElements())),e}},fze={getElement(){},getAllElements(){return r2}}});var Gg,ex,S0,qk,$g,Xk=M(()=>{"use strict";Gg=class{static{o(this,"DisposableCache")}constructor(){this.toDispose=[],this.isDisposed=!1}onDispose(e){this.toDispose.push(e)}dispose(){this.throwIfDisposed(),this.clear(),this.isDisposed=!0,this.toDispose.forEach(e=>e.dispose())}throwIfDisposed(){if(this.isDisposed)throw new Error("This cache has already been disposed")}},ex=class extends Gg{static{o(this,"SimpleCache")}constructor(){super(...arguments),this.cache=new Map}has(e){return this.throwIfDisposed(),this.cache.has(e)}set(e,r){this.throwIfDisposed(),this.cache.set(e,r)}get(e,r){if(this.throwIfDisposed(),this.cache.has(e))return this.cache.get(e);if(r){let n=r();return this.cache.set(e,n),n}else return}delete(e){return this.throwIfDisposed(),this.cache.delete(e)}clear(){this.throwIfDisposed(),this.cache.clear()}},S0=class extends Gg{static{o(this,"ContextCache")}constructor(e){super(),this.cache=new Map,this.converter=e??(r=>r)}has(e,r){return this.throwIfDisposed(),this.cacheForContext(e).has(r)}set(e,r,n){this.throwIfDisposed(),this.cacheForContext(e).set(r,n)}get(e,r,n){this.throwIfDisposed();let i=this.cacheForContext(e);if(i.has(r))return i.get(r);if(n){let a=n();return i.set(r,a),a}else return}delete(e,r){return this.throwIfDisposed(),this.cacheForContext(e).delete(r)}clear(e){if(this.throwIfDisposed(),e){let r=this.converter(e);this.cache.delete(r)}else this.cache.clear()}cacheForContext(e){let r=this.converter(e),n=this.cache.get(r);return n||(n=new Map,this.cache.set(r,n)),n}},qk=class extends S0{static{o(this,"DocumentCache")}constructor(e){super(r=>r.toString()),this.onDispose(e.workspace.DocumentBuilder.onUpdate((r,n)=>{let i=r.concat(n);for(let a of i)this.clear(a)}))}},$g=class extends ex{static{o(this,"WorkspaceCache")}constructor(e){super(),this.onDispose(e.workspace.DocumentBuilder.onUpdate(()=>{this.clear()}))}}});var tx,$M=M(()=>{"use strict";GM();os();$s();Xk();tx=class{static{o(this,"DefaultScopeProvider")}constructor(e){this.reflection=e.shared.AstReflection,this.nameProvider=e.references.NameProvider,this.descriptions=e.workspace.AstNodeDescriptionProvider,this.indexManager=e.shared.workspace.IndexManager,this.globalScopeCache=new $g(e.shared)}getScope(e){let r=[],n=this.reflection.getReferenceType(e),i=Vi(e.container).precomputedScopes;if(i){let s=e.container;do{let l=i.get(s);l.length>0&&r.push(tn(l).filter(u=>this.reflection.isSubtype(u.type,n))),s=s.$container}while(s)}let a=this.getGlobalScope(n,e);for(let s=r.length-1;s>=0;s--)a=this.createScope(r[s],a);return a}createScope(e,r,n){return new zg(tn(e),r,n)}createScopeForNodes(e,r,n){let i=tn(e).map(a=>{let s=this.nameProvider.getName(a);if(s)return this.descriptions.createDescription(a,s)}).nonNullable();return new zg(i,r,n)}getGlobalScope(e,r){return this.globalScopeCache.get(e,()=>new J2(this.indexManager.allElements(e)))}}});function VM(t){return typeof t.$comment=="string"}function mce(t){return typeof t=="object"&&!!t&&("$ref"in t||"$error"in t)}var rx,jk=M(()=>{"use strict";OM();Zo();os();Vl();o(VM,"isAstNodeWithComment");o(mce,"isIntermediateReference");rx=class{static{o(this,"DefaultJsonSerializer")}constructor(e){this.ignoreProperties=new Set(["$container","$containerProperty","$containerIndex","$document","$cstNode"]),this.langiumDocuments=e.shared.workspace.LangiumDocuments,this.astNodeLocator=e.workspace.AstNodeLocator,this.nameProvider=e.references.NameProvider,this.commentProvider=e.documentation.CommentProvider}serialize(e,r={}){let n=r?.replacer,i=o((s,l)=>this.replacer(s,l,r),"defaultReplacer"),a=n?(s,l)=>n(s,l,i):i;try{return this.currentDocument=Vi(e),JSON.stringify(e,a,r?.space)}finally{this.currentDocument=void 0}}deserialize(e,r={}){let n=JSON.parse(e);return this.linkNode(n,n,r),n}replacer(e,r,{refText:n,sourceText:i,textRegions:a,comments:s,uriConverter:l}){var u,h,f,d;if(!this.ignoreProperties.has(e))if(Ta(r)){let p=r.ref,m=n?r.$refText:void 0;if(p){let g=Vi(p),y="";this.currentDocument&&this.currentDocument!==g&&(l?y=l(g.uri,r):y=g.uri.toString());let v=this.astNodeLocator.getAstNodePath(p);return{$ref:`${y}#${v}`,$refText:m}}else return{$error:(h=(u=r.error)===null||u===void 0?void 0:u.message)!==null&&h!==void 0?h:"Could not resolve reference",$refText:m}}else if(ri(r)){let p;if(a&&(p=this.addAstNodeRegionWithAssignmentsTo(Object.assign({},r)),(!e||r.$document)&&p?.$textRegion&&(p.$textRegion.documentURI=(f=this.currentDocument)===null||f===void 0?void 0:f.uri.toString())),i&&!e&&(p??(p=Object.assign({},r)),p.$sourceText=(d=r.$cstNode)===null||d===void 0?void 0:d.text),s){p??(p=Object.assign({},r));let m=this.commentProvider.getComment(r);m&&(p.$comment=m.replace(/\r/g,""))}return p??r}else return r}addAstNodeRegionWithAssignmentsTo(e){let r=o(n=>({offset:n.offset,end:n.end,length:n.length,range:n.range}),"createDocumentSegment");if(e.$cstNode){let n=e.$textRegion=r(e.$cstNode),i=n.assignments={};return Object.keys(e).filter(a=>!a.startsWith("$")).forEach(a=>{let s=rR(e.$cstNode,a).map(r);s.length!==0&&(i[a]=s)}),e}}linkNode(e,r,n,i,a,s){for(let[u,h]of Object.entries(e))if(Array.isArray(h))for(let f=0;f{"use strict";Uc();nx=class{static{o(this,"DefaultServiceRegistry")}register(e){if(!this.singleton&&!this.map){this.singleton=e;return}if(!this.map&&(this.map={},this.singleton)){for(let r of this.singleton.LanguageMetaData.fileExtensions)this.map[r]=this.singleton;this.singleton=void 0}for(let r of e.LanguageMetaData.fileExtensions)this.map[r]!==void 0&&this.map[r]!==e&&console.warn(`The file extension ${r} is used by multiple languages. It is now assigned to '${e.LanguageMetaData.languageId}'.`),this.map[r]=e}getServices(e){if(this.singleton!==void 0)return this.singleton;if(this.map===void 0)throw new Error("The service registry is empty. Use `register` to register the services of a language.");let r=ds.extname(e),n=this.map[r];if(!n)throw new Error(`The service registry contains no services for the extension '${r}'.`);return n}get all(){return this.singleton!==void 0?[this.singleton]:this.map!==void 0?Object.values(this.map):[]}}});function Kk(t){return{code:t}}var Vg,ix,ax=M(()=>{"use strict";Fg();nl();$s();o(Kk,"diagnosticData");(function(t){t.all=["fast","slow","built-in"]})(Vg||(Vg={}));ix=class{static{o(this,"ValidationRegistry")}constructor(e){this.entries=new Hc,this.reflection=e.shared.AstReflection}register(e,r=this,n="fast"){if(n==="built-in")throw new Error("The 'built-in' category is reserved for lexer, parser, and linker errors.");for(let[i,a]of Object.entries(e)){let s=a;if(Array.isArray(s))for(let l of s){let u={check:this.wrapValidationException(l,r),category:n};this.addEntry(i,u)}else if(typeof s=="function"){let l={check:this.wrapValidationException(s,r),category:n};this.addEntry(i,l)}}}wrapValidationException(e,r){return async(n,i,a)=>{try{await e.call(r,n,i,a)}catch(s){if(mf(s))throw s;console.error("An error occurred during validation:",s);let l=s instanceof Error?s.message:String(s);s instanceof Error&&s.stack&&console.error(s.stack),i("error","An error occurred during validation: "+l,{node:n})}}}addEntry(e,r){if(e==="AstNode"){this.entries.add("AstNode",r);return}for(let n of this.reflection.getAllSubTypes(e))this.entries.add(n,r)}getChecks(e,r){let n=tn(this.entries.get(e)).concat(this.entries.get("AstNode"));return r&&(n=n.filter(i=>r.includes(i.category))),n.map(i=>i.check)}}});function gce(t){if(t.range)return t.range;let e;return typeof t.property=="string"?e=p2(t.node.$cstNode,t.property,t.index):typeof t.keyword=="string"&&(e=iR(t.node.$cstNode,t.keyword,t.index)),e??(e=t.node.$cstNode),e?e.range:{start:{line:0,character:0},end:{line:0,character:0}}}function Qk(t){switch(t){case"error":return 1;case"warning":return 2;case"info":return 3;case"hint":return 4;default:throw new Error("Invalid diagnostic severity: "+t)}}var sx,Qu,HM=M(()=>{"use strict";rl();Vl();os();zl();nl();ax();sx=class{static{o(this,"DefaultDocumentValidator")}constructor(e){this.validationRegistry=e.validation.ValidationRegistry,this.metadata=e.LanguageMetaData}async validateDocument(e,r={},n=Ar.CancellationToken.None){let i=e.parseResult,a=[];if(await Hi(n),(!r.categories||r.categories.includes("built-in"))&&(this.processLexingErrors(i,a,r),r.stopAfterLexingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===Qu.LexingError})||(this.processParsingErrors(i,a,r),r.stopAfterParsingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===Qu.ParsingError}))||(this.processLinkingErrors(e,a,r),r.stopAfterLinkingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===Qu.LinkingError}))))return a;try{a.push(...await this.validateAst(i.value,r,n))}catch(s){if(mf(s))throw s;console.error("An error occurred during validation:",s)}return await Hi(n),a}processLexingErrors(e,r,n){for(let i of e.lexerErrors){let a={severity:Qk("error"),range:{start:{line:i.line-1,character:i.column-1},end:{line:i.line-1,character:i.column+i.length-1}},message:i.message,data:Kk(Qu.LexingError),source:this.getSource()};r.push(a)}}processParsingErrors(e,r,n){for(let i of e.parserErrors){let a;if(isNaN(i.token.startOffset)){if("previousToken"in i){let s=i.previousToken;if(isNaN(s.startOffset)){let l={line:0,character:0};a={start:l,end:l}}else{let l={line:s.endLine-1,character:s.endColumn};a={start:l,end:l}}}}else a=eg(i.token);if(a){let s={severity:Qk("error"),range:a,message:i.message,data:Kk(Qu.ParsingError),source:this.getSource()};r.push(s)}}}processLinkingErrors(e,r,n){for(let i of e.references){let a=i.error;if(a){let s={node:a.container,property:a.property,index:a.index,data:{code:Qu.LinkingError,containerType:a.container.$type,property:a.property,refText:a.reference.$refText}};r.push(this.toDiagnostic("error",a.message,s))}}}async validateAst(e,r,n=Ar.CancellationToken.None){let i=[],a=o((s,l,u)=>{i.push(this.toDiagnostic(s,l,u))},"acceptor");return await Promise.all(tl(e).map(async s=>{await Hi(n);let l=this.validationRegistry.getChecks(s.$type,r.categories);for(let u of l)await u(s,a,n)})),i}toDiagnostic(e,r,n){return{message:r,range:gce(n),severity:Qk(e),code:n.code,codeDescription:n.codeDescription,tags:n.tags,relatedInformation:n.relatedInformation,data:n.data,source:this.getSource()}}getSource(){return this.metadata.languageId}};o(gce,"getDiagnosticRange");o(Qk,"toDiagnosticSeverity");(function(t){t.LexingError="lexing-error",t.ParsingError="parsing-error",t.LinkingError="linking-error"})(Qu||(Qu={}))});var ox,lx,WM=M(()=>{"use strict";rl();Zo();os();zl();nl();Uc();ox=class{static{o(this,"DefaultAstNodeDescriptionProvider")}constructor(e){this.astNodeLocator=e.workspace.AstNodeLocator,this.nameProvider=e.references.NameProvider}createDescription(e,r,n=Vi(e)){r??(r=this.nameProvider.getName(e));let i=this.astNodeLocator.getAstNodePath(e);if(!r)throw new Error(`Node at path ${i} has no name.`);let a,s=o(()=>{var l;return a??(a=e0((l=this.nameProvider.getNameNode(e))!==null&&l!==void 0?l:e.$cstNode))},"nameSegmentGetter");return{node:e,name:r,get nameSegment(){return s()},selectionSegment:e0(e.$cstNode),type:e.$type,documentUri:n.uri,path:i}}},lx=class{static{o(this,"DefaultReferenceDescriptionProvider")}constructor(e){this.nodeLocator=e.workspace.AstNodeLocator}async createDescriptions(e,r=Ar.CancellationToken.None){let n=[],i=e.parseResult.value;for(let a of tl(i))await Hi(r),rg(a).filter(s=>!Zd(s)).forEach(s=>{let l=this.createDescription(s);l&&n.push(l)});return n}createDescription(e){let r=e.reference.$nodeDescription,n=e.reference.$refNode;if(!r||!n)return;let i=Vi(e.container).uri;return{sourceUri:i,sourcePath:this.nodeLocator.getAstNodePath(e.container),targetUri:r.documentUri,targetPath:r.path,segment:e0(n),local:ds.equals(r.documentUri,i)}}}});var cx,YM=M(()=>{"use strict";cx=class{static{o(this,"DefaultAstNodeLocator")}constructor(){this.segmentSeparator="/",this.indexSeparator="@"}getAstNodePath(e){if(e.$container){let r=this.getAstNodePath(e.$container),n=this.getPathSegment(e);return r+this.segmentSeparator+n}return""}getPathSegment({$containerProperty:e,$containerIndex:r}){if(!e)throw new Error("Missing '$containerProperty' in AST node.");return r!==void 0?e+this.indexSeparator+r:e}getAstNode(e,r){return r.split(this.segmentSeparator).reduce((i,a)=>{if(!i||a.length===0)return i;let s=a.indexOf(this.indexSeparator);if(s>0){let l=a.substring(0,s),u=parseInt(a.substring(s+1)),h=i[l];return h?.[u]}return i[a]},e)}}});var ux,qM=M(()=>{"use strict";nl();ux=class{static{o(this,"DefaultConfigurationProvider")}constructor(e){this._ready=new fs,this.settings={},this.workspaceConfig=!1,this.serviceRegistry=e.ServiceRegistry}get ready(){return this._ready.promise}initialize(e){var r,n;this.workspaceConfig=(n=(r=e.capabilities.workspace)===null||r===void 0?void 0:r.configuration)!==null&&n!==void 0?n:!1}async initialized(e){if(this.workspaceConfig){if(e.register){let r=this.serviceRegistry.all;e.register({section:r.map(n=>this.toSectionName(n.LanguageMetaData.languageId))})}if(e.fetchConfiguration){let r=this.serviceRegistry.all.map(i=>({section:this.toSectionName(i.LanguageMetaData.languageId)})),n=await e.fetchConfiguration(r);r.forEach((i,a)=>{this.updateSectionConfiguration(i.section,n[a])})}}this._ready.resolve()}updateConfiguration(e){e.settings&&Object.keys(e.settings).forEach(r=>{this.updateSectionConfiguration(r,e.settings[r])})}updateSectionConfiguration(e,r){this.settings[e]=r}async getConfiguration(e,r){await this.ready;let n=this.toSectionName(e);if(this.settings[n])return this.settings[n][r]}toSectionName(e){return`${e}`}}});var C0,XM=M(()=>{"use strict";(function(t){function e(r){return{dispose:o(async()=>await r(),"dispose")}}o(e,"create"),t.create=e})(C0||(C0={}))});var hx,jM=M(()=>{"use strict";rl();XM();Fg();nl();$s();ax();Bg();hx=class{static{o(this,"DefaultDocumentBuilder")}constructor(e){this.updateBuildOptions={validation:{categories:["built-in","fast"]}},this.updateListeners=[],this.buildPhaseListeners=new Hc,this.buildState=new Map,this.documentBuildWaiters=new Map,this.currentState=Tn.Changed,this.langiumDocuments=e.workspace.LangiumDocuments,this.langiumDocumentFactory=e.workspace.LangiumDocumentFactory,this.indexManager=e.workspace.IndexManager,this.serviceRegistry=e.ServiceRegistry}async build(e,r={},n=Ar.CancellationToken.None){var i,a;for(let s of e){let l=s.uri.toString();if(s.state===Tn.Validated){if(typeof r.validation=="boolean"&&r.validation)s.state=Tn.IndexedReferences,s.diagnostics=void 0,this.buildState.delete(l);else if(typeof r.validation=="object"){let u=this.buildState.get(l),h=(i=u?.result)===null||i===void 0?void 0:i.validationChecks;if(h){let d=((a=r.validation.categories)!==null&&a!==void 0?a:Vg.all).filter(p=>!h.includes(p));d.length>0&&(this.buildState.set(l,{completed:!1,options:{validation:Object.assign(Object.assign({},r.validation),{categories:d})},result:u.result}),s.state=Tn.IndexedReferences)}}}else this.buildState.delete(l)}this.currentState=Tn.Changed,await this.emitUpdate(e.map(s=>s.uri),[]),await this.buildDocuments(e,r,n)}async update(e,r,n=Ar.CancellationToken.None){this.currentState=Tn.Changed;for(let s of r)this.langiumDocuments.deleteDocument(s),this.buildState.delete(s.toString()),this.indexManager.remove(s);for(let s of e){if(!this.langiumDocuments.invalidateDocument(s)){let u=this.langiumDocumentFactory.fromModel({$type:"INVALID"},s);u.state=Tn.Changed,this.langiumDocuments.addDocument(u)}this.buildState.delete(s.toString())}let i=tn(e).concat(r).map(s=>s.toString()).toSet();this.langiumDocuments.all.filter(s=>!i.has(s.uri.toString())&&this.shouldRelink(s,i)).forEach(s=>{this.serviceRegistry.getServices(s.uri).references.Linker.unlink(s),s.state=Math.min(s.state,Tn.ComputedScopes),s.diagnostics=void 0}),await this.emitUpdate(e,r),await Hi(n);let a=this.langiumDocuments.all.filter(s=>{var l;return s.staten(e,r)))}shouldRelink(e,r){return e.references.some(n=>n.error!==void 0)?!0:this.indexManager.isAffected(e,r)}onUpdate(e){return this.updateListeners.push(e),C0.create(()=>{let r=this.updateListeners.indexOf(e);r>=0&&this.updateListeners.splice(r,1)})}async buildDocuments(e,r,n){this.prepareBuild(e,r),await this.runCancelable(e,Tn.Parsed,n,a=>this.langiumDocumentFactory.update(a,n)),await this.runCancelable(e,Tn.IndexedContent,n,a=>this.indexManager.updateContent(a,n)),await this.runCancelable(e,Tn.ComputedScopes,n,async a=>{let s=this.serviceRegistry.getServices(a.uri).references.ScopeComputation;a.precomputedScopes=await s.computeLocalScopes(a,n)}),await this.runCancelable(e,Tn.Linked,n,a=>this.serviceRegistry.getServices(a.uri).references.Linker.link(a,n)),await this.runCancelable(e,Tn.IndexedReferences,n,a=>this.indexManager.updateReferences(a,n));let i=e.filter(a=>this.shouldValidate(a));await this.runCancelable(i,Tn.Validated,n,a=>this.validate(a,n));for(let a of e){let s=this.buildState.get(a.uri.toString());s&&(s.completed=!0)}}prepareBuild(e,r){for(let n of e){let i=n.uri.toString(),a=this.buildState.get(i);(!a||a.completed)&&this.buildState.set(i,{completed:!1,options:r,result:a?.result})}}async runCancelable(e,r,n,i){let a=e.filter(s=>s.state{this.buildPhaseListeners.delete(e,r)})}waitUntil(e,r,n){let i;if(r&&"path"in r?i=r:n=r,n??(n=Ar.CancellationToken.None),i){let a=this.langiumDocuments.getDocument(i);if(a&&a.state>e)return Promise.resolve(i)}return this.currentState>=e?Promise.resolve(void 0):n.isCancellationRequested?Promise.reject(Vc):new Promise((a,s)=>{let l=this.onBuildPhase(e,()=>{if(l.dispose(),u.dispose(),i){let h=this.langiumDocuments.getDocument(i);a(h?.uri)}else a(void 0)}),u=n.onCancellationRequested(()=>{l.dispose(),u.dispose(),s(Vc)})})}async notifyBuildPhase(e,r,n){if(e.length===0)return;let i=this.buildPhaseListeners.get(r);for(let a of i)await Hi(n),await a(e,n)}shouldValidate(e){return!!this.getBuildOptions(e).validation}async validate(e,r){var n,i;let a=this.serviceRegistry.getServices(e.uri).validation.DocumentValidator,s=this.getBuildOptions(e).validation,l=typeof s=="object"?s:void 0,u=await a.validateDocument(e,l,r);e.diagnostics?e.diagnostics.push(...u):e.diagnostics=u;let h=this.buildState.get(e.uri.toString());if(h){(n=h.result)!==null&&n!==void 0||(h.result={});let f=(i=l?.categories)!==null&&i!==void 0?i:Vg.all;h.result.validationChecks?h.result.validationChecks.push(...f):h.result.validationChecks=[...f]}}getBuildOptions(e){var r,n;return(n=(r=this.buildState.get(e.uri.toString()))===null||r===void 0?void 0:r.options)!==null&&n!==void 0?n:{}}}});var fx,KM=M(()=>{"use strict";os();Xk();rl();$s();Uc();fx=class{static{o(this,"DefaultIndexManager")}constructor(e){this.symbolIndex=new Map,this.symbolByTypeIndex=new S0,this.referenceIndex=new Map,this.documents=e.workspace.LangiumDocuments,this.serviceRegistry=e.ServiceRegistry,this.astReflection=e.AstReflection}findAllReferences(e,r){let n=Vi(e).uri,i=[];return this.referenceIndex.forEach(a=>{a.forEach(s=>{ds.equals(s.targetUri,n)&&s.targetPath===r&&i.push(s)})}),tn(i)}allElements(e,r){let n=tn(this.symbolIndex.keys());return r&&(n=n.filter(i=>!r||r.has(i))),n.map(i=>this.getFileDescriptions(i,e)).flat()}getFileDescriptions(e,r){var n;return r?this.symbolByTypeIndex.get(e,r,()=>{var a;return((a=this.symbolIndex.get(e))!==null&&a!==void 0?a:[]).filter(l=>this.astReflection.isSubtype(l.type,r))}):(n=this.symbolIndex.get(e))!==null&&n!==void 0?n:[]}remove(e){let r=e.toString();this.symbolIndex.delete(r),this.symbolByTypeIndex.clear(r),this.referenceIndex.delete(r)}async updateContent(e,r=Ar.CancellationToken.None){let i=await this.serviceRegistry.getServices(e.uri).references.ScopeComputation.computeExports(e,r),a=e.uri.toString();this.symbolIndex.set(a,i),this.symbolByTypeIndex.clear(a)}async updateReferences(e,r=Ar.CancellationToken.None){let i=await this.serviceRegistry.getServices(e.uri).workspace.ReferenceDescriptionProvider.createDescriptions(e,r);this.referenceIndex.set(e.uri.toString(),i)}isAffected(e,r){let n=this.referenceIndex.get(e.uri.toString());return n?n.some(i=>!i.local&&r.has(i.targetUri.toString())):!1}}});var dx,QM=M(()=>{"use strict";rl();nl();Uc();dx=class{static{o(this,"DefaultWorkspaceManager")}constructor(e){this.initialBuildOptions={},this._ready=new fs,this.serviceRegistry=e.ServiceRegistry,this.langiumDocuments=e.workspace.LangiumDocuments,this.documentBuilder=e.workspace.DocumentBuilder,this.fileSystemProvider=e.workspace.FileSystemProvider,this.mutex=e.workspace.WorkspaceLock}get ready(){return this._ready.promise}initialize(e){var r;this.folders=(r=e.workspaceFolders)!==null&&r!==void 0?r:void 0}initialized(e){return this.mutex.write(r=>{var n;return this.initializeWorkspace((n=this.folders)!==null&&n!==void 0?n:[],r)})}async initializeWorkspace(e,r=Ar.CancellationToken.None){let n=await this.performStartup(e);await Hi(r),await this.documentBuilder.build(n,this.initialBuildOptions,r)}async performStartup(e){let r=this.serviceRegistry.all.flatMap(a=>a.LanguageMetaData.fileExtensions),n=[],i=o(a=>{n.push(a),this.langiumDocuments.hasDocument(a.uri)||this.langiumDocuments.addDocument(a)},"collector");return await this.loadAdditionalDocuments(e,i),await Promise.all(e.map(a=>[a,this.getRootFolder(a)]).map(async a=>this.traverseFolder(...a,r,i))),this._ready.resolve(),n}loadAdditionalDocuments(e,r){return Promise.resolve()}getRootFolder(e){return Hs.parse(e.uri)}async traverseFolder(e,r,n,i){let a=await this.fileSystemProvider.readDirectory(r);await Promise.all(a.map(async s=>{if(this.includeEntry(e,s,n)){if(s.isDirectory)await this.traverseFolder(e,s.uri,n,i);else if(s.isFile){let l=await this.langiumDocuments.getOrCreateDocument(s.uri);i(l)}}}))}includeEntry(e,r,n){let i=ds.basename(r.uri);if(i.startsWith("."))return!1;if(r.isDirectory)return i!=="node_modules"&&i!=="out";if(r.isFile){let a=ds.extname(r.uri);return n.includes(a)}return!1}}});function yce(t){return Array.isArray(t)&&(t.length===0||"name"in t[0])}function JM(t){return t&&"modes"in t&&"defaultMode"in t}function ZM(t){return!yce(t)&&!JM(t)}var px,eI=M(()=>{"use strict";g0();px=class{static{o(this,"DefaultLexer")}constructor(e){let r=e.parser.TokenBuilder.buildTokens(e.Grammar,{caseInsensitive:e.LanguageMetaData.caseInsensitive});this.tokenTypes=this.toTokenTypeDictionary(r);let n=ZM(r)?Object.values(r):r;this.chevrotainLexer=new ci(n,{positionTracking:"full"})}get definition(){return this.tokenTypes}tokenize(e){var r;let n=this.chevrotainLexer.tokenize(e);return{tokens:n.tokens,errors:n.errors,hidden:(r=n.groups.hidden)!==null&&r!==void 0?r:[]}}toTokenTypeDictionary(e){if(ZM(e))return e;let r=JM(e)?Object.values(e.modes).flat():e,n={};return r.forEach(i=>n[i.name]=i),n}};o(yce,"isTokenTypeArray");o(JM,"isIMultiModeLexerDefinition");o(ZM,"isTokenTypeDictionary")});function nI(t,e,r){let n,i;typeof t=="string"?(i=e,n=r):(i=t.range.start,n=e),i||(i=Xr.create(0,0));let a=bce(t),s=aI(n),l=pze({lines:a,position:i,options:s});return xze({index:0,tokens:l,position:i})}function iI(t,e){let r=aI(e),n=bce(t);if(n.length===0)return!1;let i=n[0],a=n[n.length-1],s=r.start,l=r.end;return!!s?.exec(i)&&!!l?.exec(a)}function bce(t){let e="";return typeof t=="string"?e=t:e=t.text,e.split(XN)}function pze(t){var e,r,n;let i=[],a=t.position.line,s=t.position.character;for(let l=0;l=f.length){if(i.length>0){let m=Xr.create(a,s);i.push({type:"break",content:"",range:Nr.create(m,m)})}}else{vce.lastIndex=d;let m=vce.exec(f);if(m){let g=m[0],y=m[1],v=Xr.create(a,s+d),x=Xr.create(a,s+d+g.length);i.push({type:"tag",content:y,range:Nr.create(v,x)}),d+=g.length,d=rI(f,d)}if(d0&&i[i.length-1].type==="break"?i.slice(0,-1):i}function mze(t,e,r,n){let i=[];if(t.length===0){let a=Xr.create(r,n),s=Xr.create(r,n+e.length);i.push({type:"text",content:e,range:Nr.create(a,s)})}else{let a=0;for(let l of t){let u=l.index,h=e.substring(a,u);h.length>0&&i.push({type:"text",content:e.substring(a,u),range:Nr.create(Xr.create(r,a+n),Xr.create(r,u+n))});let f=h.length+1,d=l[1];if(i.push({type:"inline-tag",content:d,range:Nr.create(Xr.create(r,a+f+n),Xr.create(r,a+f+d.length+n))}),f+=d.length,l.length===4){f+=l[2].length;let p=l[3];i.push({type:"text",content:p,range:Nr.create(Xr.create(r,a+f+n),Xr.create(r,a+f+p.length+n))})}else i.push({type:"text",content:"",range:Nr.create(Xr.create(r,a+f+n),Xr.create(r,a+f+n))});a=u+l[0].length}let s=e.substring(a);s.length>0&&i.push({type:"text",content:s,range:Nr.create(Xr.create(r,a+n),Xr.create(r,a+n+s.length))})}return i}function rI(t,e){let r=t.substring(e).match(gze);return r?e+r.index:t.length}function vze(t){let e=t.match(yze);if(e&&typeof e.index=="number")return e.index}function xze(t){var e,r,n,i;let a=Xr.create(t.position.line,t.position.character);if(t.tokens.length===0)return new Zk([],Nr.create(a,a));let s=[];for(;t.index0){let u=rI(e,a);s=e.substring(u),e=e.substring(0,a)}return(t==="linkcode"||t==="link"&&r.link==="code")&&(s=`\`${s}\``),(i=(n=r.renderLink)===null||n===void 0?void 0:n.call(r,e,s))!==null&&i!==void 0?i:Eze(e,s)}}function Eze(t,e){try{return Hs.parse(t,!0),`[${e}](${t})`}catch{return t}}function xce(t){return t.endsWith(` +`)?` +`:` + +`}var vce,dze,gze,yze,Zk,mx,gx,Jk,sI=M(()=>{"use strict";fM();ig();Uc();o(nI,"parseJSDoc");o(iI,"isJSDoc");o(bce,"getLines");vce=/\s*(@([\p{L}][\p{L}\p{N}]*)?)/uy,dze=/\{(@[\p{L}][\p{L}\p{N}]*)(\s*)([^\r\n}]+)?\}/gu;o(pze,"tokenize");o(mze,"buildInlineTokens");gze=/\S/,yze=/\s*$/;o(rI,"skipWhitespace");o(vze,"lastCharacter");o(xze,"parseJSDocComment");o(bze,"parseJSDocElement");o(wze,"appendEmptyLine");o(wce,"parseJSDocText");o(Tze,"parseJSDocInline");o(Tce,"parseJSDocTag");o(kce,"parseJSDocLine");o(aI,"normalizeOptions");o(tI,"normalizeOption");Zk=class{static{o(this,"JSDocCommentImpl")}constructor(e,r){this.elements=e,this.range=r}getTag(e){return this.getAllTags().find(r=>r.name===e)}getTags(e){return this.getAllTags().filter(r=>r.name===e)}getAllTags(){return this.elements.filter(e=>"name"in e)}toString(){let e="";for(let r of this.elements)if(e.length===0)e=r.toString();else{let n=r.toString();e+=xce(e)+n}return e.trim()}toMarkdown(e){let r="";for(let n of this.elements)if(r.length===0)r=n.toMarkdown(e);else{let i=n.toMarkdown(e);r+=xce(r)+i}return r.trim()}},mx=class{static{o(this,"JSDocTagImpl")}constructor(e,r,n,i){this.name=e,this.content=r,this.inline=n,this.range=i}toString(){let e=`@${this.name}`,r=this.content.toString();return this.content.inlines.length===1?e=`${e} ${r}`:this.content.inlines.length>1&&(e=`${e} +${r}`),this.inline?`{${e}}`:e}toMarkdown(e){var r,n;return(n=(r=e?.renderTag)===null||r===void 0?void 0:r.call(e,this))!==null&&n!==void 0?n:this.toMarkdownDefault(e)}toMarkdownDefault(e){let r=this.content.toMarkdown(e);if(this.inline){let a=kze(this.name,r,e??{});if(typeof a=="string")return a}let n="";e?.tag==="italic"||e?.tag===void 0?n="*":e?.tag==="bold"?n="**":e?.tag==="bold-italic"&&(n="***");let i=`${n}@${this.name}${n}`;return this.content.inlines.length===1?i=`${i} \u2014 ${r}`:this.content.inlines.length>1&&(i=`${i} +${r}`),this.inline?`{${i}}`:i}};o(kze,"renderInlineTag");o(Eze,"renderLinkDefault");gx=class{static{o(this,"JSDocTextImpl")}constructor(e,r){this.inlines=e,this.range=r}toString(){let e="";for(let r=0;rn.range.start.line&&(e+=` +`)}return e}toMarkdown(e){let r="";for(let n=0;ni.range.start.line&&(r+=` +`)}return r}},Jk=class{static{o(this,"JSDocLineImpl")}constructor(e,r){this.text=e,this.range=r}toString(){return this.text}toMarkdown(){return this.text}};o(xce,"fillNewlines")});var yx,oI=M(()=>{"use strict";os();sI();yx=class{static{o(this,"JSDocDocumentationProvider")}constructor(e){this.indexManager=e.shared.workspace.IndexManager,this.commentProvider=e.documentation.CommentProvider}getDocumentation(e){let r=this.commentProvider.getComment(e);if(r&&iI(r))return nI(r).toMarkdown({renderLink:o((i,a)=>this.documentationLinkRenderer(e,i,a),"renderLink"),renderTag:o(i=>this.documentationTagRenderer(e,i),"renderTag")})}documentationLinkRenderer(e,r,n){var i;let a=(i=this.findNameInPrecomputedScopes(e,r))!==null&&i!==void 0?i:this.findNameInGlobalScope(e,r);if(a&&a.nameSegment){let s=a.nameSegment.range.start.line+1,l=a.nameSegment.range.start.character+1,u=a.documentUri.with({fragment:`L${s},${l}`});return`[${n}](${u.toString()})`}else return}documentationTagRenderer(e,r){}findNameInPrecomputedScopes(e,r){let i=Vi(e).precomputedScopes;if(!i)return;let a=e;do{let l=i.get(a).find(u=>u.name===r);if(l)return l;a=a.$container}while(a)}findNameInGlobalScope(e,r){return this.indexManager.allElements().find(i=>i.name===r)}}});var vx,lI=M(()=>{"use strict";jk();zl();vx=class{static{o(this,"DefaultCommentProvider")}constructor(e){this.grammarConfig=()=>e.parser.GrammarConfig}getComment(e){var r;return VM(e)?e.$comment:(r=zD(e.$cstNode,this.grammarConfig().multilineCommentRules))===null||r===void 0?void 0:r.text}}});var ui={};var cI=M(()=>{"use strict";Sr(ui,Ji(LM(),1))});var xx,uI,hI,fI=M(()=>{"use strict";nl();cI();xx=class{static{o(this,"DefaultAsyncParser")}constructor(e){this.syncParser=e.parser.LangiumParser}parse(e){return Promise.resolve(this.syncParser.parse(e))}},uI=class{static{o(this,"AbstractThreadedAsyncParser")}constructor(e){this.threadCount=8,this.terminationDelay=200,this.workerPool=[],this.queue=[],this.hydrator=e.serializer.Hydrator}initializeWorkers(){for(;this.workerPool.length{if(this.queue.length>0){let r=this.queue.shift();r&&(e.lock(),r.resolve(e))}}),this.workerPool.push(e)}}async parse(e,r){let n=await this.acquireParserWorker(r),i=new fs,a,s=r.onCancellationRequested(()=>{a=setTimeout(()=>{this.terminateWorker(n)},this.terminationDelay)});return n.parse(e).then(l=>{let u=this.hydrator.hydrate(l);i.resolve(u)}).catch(l=>{i.reject(l)}).finally(()=>{s.dispose(),clearTimeout(a)}),i.promise}terminateWorker(e){e.terminate();let r=this.workerPool.indexOf(e);r>=0&&this.workerPool.splice(r,1)}async acquireParserWorker(e){this.initializeWorkers();for(let n of this.workerPool)if(n.ready)return n.lock(),n;let r=new fs;return e.onCancellationRequested(()=>{let n=this.queue.indexOf(r);n>=0&&this.queue.splice(n,1),r.reject(Vc)}),this.queue.push(r),r.promise}},hI=class{static{o(this,"ParserWorker")}get ready(){return this._ready}get onReady(){return this.onReadyEmitter.event}constructor(e,r,n,i){this.onReadyEmitter=new ui.Emitter,this.deferred=new fs,this._ready=!0,this._parsing=!1,this.sendMessage=e,this._terminate=i,r(a=>{let s=a;this.deferred.resolve(s),this.unlock()}),n(a=>{this.deferred.reject(a),this.unlock()})}terminate(){this.deferred.reject(Vc),this._terminate()}lock(){this._ready=!1}unlock(){this._parsing=!1,this._ready=!0,this.onReadyEmitter.fire()}parse(e){if(this._parsing)throw new Error("Parser worker is busy");return this._parsing=!0,this.deferred=new fs,this.sendMessage(e),this.deferred.promise}}});var bx,dI=M(()=>{"use strict";rl();nl();bx=class{static{o(this,"DefaultWorkspaceLock")}constructor(){this.previousTokenSource=new Ar.CancellationTokenSource,this.writeQueue=[],this.readQueue=[],this.done=!0}write(e){this.cancelWrite();let r=new Ar.CancellationTokenSource;return this.previousTokenSource=r,this.enqueue(this.writeQueue,e,r.token)}read(e){return this.enqueue(this.readQueue,e)}enqueue(e,r,n){let i=new fs,a={action:r,deferred:i,cancellationToken:n??Ar.CancellationToken.None};return e.push(a),this.performNextOperation(),i.promise}async performNextOperation(){if(!this.done)return;let e=[];if(this.writeQueue.length>0)e.push(this.writeQueue.shift());else if(this.readQueue.length>0)e.push(...this.readQueue.splice(0,this.readQueue.length));else return;this.done=!1,await Promise.all(e.map(async({action:r,deferred:n,cancellationToken:i})=>{try{let a=await Promise.resolve().then(()=>r(i));n.resolve(a)}catch(a){mf(a)?n.resolve(void 0):n.reject(a)}})),this.done=!0,this.performNextOperation()}cancelWrite(){this.previousTokenSource.cancel()}}});var wx,pI=M(()=>{"use strict";Fk();Bc();Zo();os();Fg();zl();wx=class{static{o(this,"DefaultHydrator")}constructor(e){this.grammarElementIdMap=new E0,this.tokenTypeIdMap=new E0,this.grammar=e.Grammar,this.lexer=e.parser.Lexer,this.linker=e.references.Linker}dehydrate(e){return{lexerErrors:e.lexerErrors.map(r=>Object.assign({},r)),parserErrors:e.parserErrors.map(r=>Object.assign({},r)),value:this.dehydrateAstNode(e.value,this.createDehyrationContext(e.value))}}createDehyrationContext(e){let r=new Map,n=new Map;for(let i of tl(e))r.set(i,{});if(e.$cstNode)for(let i of Jd(e.$cstNode))n.set(i,{});return{astNodes:r,cstNodes:n}}dehydrateAstNode(e,r){let n=r.astNodes.get(e);n.$type=e.$type,n.$containerIndex=e.$containerIndex,n.$containerProperty=e.$containerProperty,e.$cstNode!==void 0&&(n.$cstNode=this.dehydrateCstNode(e.$cstNode,r));for(let[i,a]of Object.entries(e))if(!i.startsWith("$"))if(Array.isArray(a)){let s=[];n[i]=s;for(let l of a)ri(l)?s.push(this.dehydrateAstNode(l,r)):Ta(l)?s.push(this.dehydrateReference(l,r)):s.push(l)}else ri(a)?n[i]=this.dehydrateAstNode(a,r):Ta(a)?n[i]=this.dehydrateReference(a,r):a!==void 0&&(n[i]=a);return n}dehydrateReference(e,r){let n={};return n.$refText=e.$refText,e.$refNode&&(n.$refNode=r.cstNodes.get(e.$refNode)),n}dehydrateCstNode(e,r){let n=r.cstNodes.get(e);return t2(e)?n.fullText=e.fullText:n.grammarSource=this.getGrammarElementId(e.grammarSource),n.hidden=e.hidden,n.astNode=r.astNodes.get(e.astNode),ho(e)?n.content=e.content.map(i=>this.dehydrateCstNode(i,r)):cf(e)&&(n.tokenType=e.tokenType.name,n.offset=e.offset,n.length=e.length,n.startLine=e.range.start.line,n.startColumn=e.range.start.character,n.endLine=e.range.end.line,n.endColumn=e.range.end.character),n}hydrate(e){let r=e.value,n=this.createHydrationContext(r);return"$cstNode"in r&&this.hydrateCstNode(r.$cstNode,n),{lexerErrors:e.lexerErrors,parserErrors:e.parserErrors,value:this.hydrateAstNode(r,n)}}createHydrationContext(e){let r=new Map,n=new Map;for(let a of tl(e))r.set(a,{});let i;if(e.$cstNode)for(let a of Jd(e.$cstNode)){let s;"fullText"in a?(s=new Ng(a.fullText),i=s):"content"in a?s=new b0:"tokenType"in a&&(s=this.hydrateCstLeafNode(a)),s&&(n.set(a,s),s.root=i)}return{astNodes:r,cstNodes:n}}hydrateAstNode(e,r){let n=r.astNodes.get(e);n.$type=e.$type,n.$containerIndex=e.$containerIndex,n.$containerProperty=e.$containerProperty,e.$cstNode&&(n.$cstNode=r.cstNodes.get(e.$cstNode));for(let[i,a]of Object.entries(e))if(!i.startsWith("$"))if(Array.isArray(a)){let s=[];n[i]=s;for(let l of a)ri(l)?s.push(this.setParent(this.hydrateAstNode(l,r),n)):Ta(l)?s.push(this.hydrateReference(l,n,i,r)):s.push(l)}else ri(a)?n[i]=this.setParent(this.hydrateAstNode(a,r),n):Ta(a)?n[i]=this.hydrateReference(a,n,i,r):a!==void 0&&(n[i]=a);return n}setParent(e,r){return e.$container=r,e}hydrateReference(e,r,n,i){return this.linker.buildReference(r,n,i.cstNodes.get(e.$refNode),e.$refText)}hydrateCstNode(e,r,n=0){let i=r.cstNodes.get(e);if(typeof e.grammarSource=="number"&&(i.grammarSource=this.getGrammarElement(e.grammarSource)),i.astNode=r.astNodes.get(e.astNode),ho(i))for(let a of e.content){let s=this.hydrateCstNode(a,r,n++);i.content.push(s)}return i}hydrateCstLeafNode(e){let r=this.getTokenType(e.tokenType),n=e.offset,i=e.length,a=e.startLine,s=e.startColumn,l=e.endLine,u=e.endColumn,h=e.hidden;return new x0(n,i,{start:{line:a,character:s},end:{line:l,character:u}},r,h)}getTokenType(e){return this.lexer.definition[e]}getGrammarElementId(e){return this.grammarElementIdMap.size===0&&this.createGrammarElementIdMap(),this.grammarElementIdMap.get(e)}getGrammarElement(e){this.grammarElementIdMap.size===0&&this.createGrammarElementIdMap();let r=this.grammarElementIdMap.getKey(e);if(r)return r;throw new Error("Invalid grammar element id: "+e)}createGrammarElementIdMap(){let e=0;for(let r of tl(this.grammar))a2(r)&&this.grammarElementIdMap.set(r,e++)}}});function go(t){return{documentation:{CommentProvider:o(e=>new vx(e),"CommentProvider"),DocumentationProvider:o(e=>new yx(e),"DocumentationProvider")},parser:{AsyncParser:o(e=>new xx(e),"AsyncParser"),GrammarConfig:o(e=>uR(e),"GrammarConfig"),LangiumParser:o(e=>bM(e),"LangiumParser"),CompletionParser:o(e=>vM(e),"CompletionParser"),ValueConverter:o(()=>new k0,"ValueConverter"),TokenBuilder:o(()=>new T0,"TokenBuilder"),Lexer:o(e=>new px(e),"Lexer"),ParserErrorMessageProvider:o(()=>new Rg,"ParserErrorMessageProvider")},workspace:{AstNodeLocator:o(()=>new cx,"AstNodeLocator"),AstNodeDescriptionProvider:o(e=>new ox(e),"AstNodeDescriptionProvider"),ReferenceDescriptionProvider:o(e=>new lx(e),"ReferenceDescriptionProvider")},references:{Linker:o(e=>new j2(e),"Linker"),NameProvider:o(()=>new K2,"NameProvider"),ScopeProvider:o(e=>new tx(e),"ScopeProvider"),ScopeComputation:o(e=>new Z2(e),"ScopeComputation"),References:o(e=>new Q2(e),"References")},serializer:{Hydrator:o(e=>new wx(e),"Hydrator"),JsonSerializer:o(e=>new rx(e),"JsonSerializer")},validation:{DocumentValidator:o(e=>new sx(e),"DocumentValidator"),ValidationRegistry:o(e=>new ix(e),"ValidationRegistry")},shared:o(()=>t.shared,"shared")}}function yo(t){return{ServiceRegistry:o(()=>new nx,"ServiceRegistry"),workspace:{LangiumDocuments:o(e=>new X2(e),"LangiumDocuments"),LangiumDocumentFactory:o(e=>new q2(e),"LangiumDocumentFactory"),DocumentBuilder:o(e=>new hx(e),"DocumentBuilder"),IndexManager:o(e=>new fx(e),"IndexManager"),WorkspaceManager:o(e=>new dx(e),"WorkspaceManager"),FileSystemProvider:o(e=>t.fileSystemProvider(e),"FileSystemProvider"),WorkspaceLock:o(()=>new bx,"WorkspaceLock"),ConfigurationProvider:o(e=>new ux(e),"ConfigurationProvider")}}}var mI=M(()=>{"use strict";hR();xM();wM();TM();kM();PM();BM();FM();zM();$M();jk();UM();HM();ax();WM();YM();qM();jM();Bg();KM();QM();eI();oI();lI();Y2();fI();dI();pI();o(go,"createDefaultCoreModule");o(yo,"createDefaultSharedCoreModule")});function Wi(t,e,r,n,i,a,s,l,u){let h=[t,e,r,n,i,a,s,l,u].reduce(eE,{});return Ace(h)}function Cce(t){if(t&&t[yI])for(let e of Object.values(t))Cce(e);return t}function Ace(t,e){let r=new Proxy({},{deleteProperty:o(()=>!1,"deleteProperty"),get:o((n,i)=>Sce(n,i,t,e||r),"get"),getOwnPropertyDescriptor:o((n,i)=>(Sce(n,i,t,e||r),Object.getOwnPropertyDescriptor(n,i)),"getOwnPropertyDescriptor"),has:o((n,i)=>i in t,"has"),ownKeys:o(()=>[...Reflect.ownKeys(t),yI],"ownKeys")});return r[yI]=!0,r}function Sce(t,e,r,n){if(e in t){if(t[e]instanceof Error)throw new Error("Construction failure. Please make sure that your dependencies are constructable.",{cause:t[e]});if(t[e]===Ece)throw new Error('Cycle detected. Please make "'+String(e)+'" lazy. See https://langium.org/docs/configuration-services/#resolving-cyclic-dependencies');return t[e]}else if(e in r){let i=r[e];t[e]=Ece;try{t[e]=typeof i=="function"?i(n):Ace(i,n)}catch(a){throw t[e]=a instanceof Error?a:void 0,a}return t[e]}else return}function eE(t,e){if(e){for(let[r,n]of Object.entries(e))if(n!==void 0){let i=t[r];i!==null&&n!==null&&typeof i=="object"&&typeof n=="object"?t[r]=eE(i,n):t[r]=n}}return t}var gI,yI,Ece,vI=M(()=>{"use strict";(function(t){t.merge=(e,r)=>eE(eE({},e),r)})(gI||(gI={}));o(Wi,"inject");yI=Symbol("isProxy");o(Cce,"eagerLoad");o(Ace,"_inject");Ece=Symbol();o(Sce,"_resolve");o(eE,"_merge")});var _ce=M(()=>{"use strict"});var Lce=M(()=>{"use strict";lI();oI();sI()});var Dce=M(()=>{"use strict"});var Nce=M(()=>{"use strict";hR();Dce()});var Rce=M(()=>{"use strict"});var Mce=M(()=>{"use strict";fI();xM();Fk();wM();Y2();eI();Rce();TM();kM()});var Ice=M(()=>{"use strict";PM();BM();FM();GM();zM();$M()});var Oce=M(()=>{"use strict";pI();jk()});var tE,vo,xI=M(()=>{"use strict";tE=class{static{o(this,"EmptyFileSystemProvider")}readFile(){throw new Error("No file system is available.")}async readDirectory(){return[]}},vo={fileSystemProvider:o(()=>new tE,"fileSystemProvider")}});function Aze(){let t=Wi(yo(vo),Cze),e=Wi(go({shared:t}),Sze);return t.ServiceRegistry.register(e),e}function gf(t){var e;let r=Aze(),n=r.serializer.JsonSerializer.deserialize(t);return r.shared.workspace.LangiumDocumentFactory.fromModel(n,Hs.parse(`memory://${(e=n.name)!==null&&e!==void 0?e:"grammar"}.langium`)),n}var Sze,Cze,Pce=M(()=>{"use strict";mI();vI();Bc();xI();Uc();Sze={Grammar:o(()=>{},"Grammar"),LanguageMetaData:o(()=>({caseInsensitive:!1,fileExtensions:[".langium"],languageId:"langium"}),"LanguageMetaData")},Cze={AstReflection:o(()=>new tg,"AstReflection")};o(Aze,"createMinimalGrammarServices");o(gf,"loadGrammarFromJson")});var $r={};vr($r,{AstUtils:()=>zT,BiMap:()=>E0,Cancellation:()=>Ar,ContextCache:()=>S0,CstUtils:()=>AT,DONE_RESULT:()=>ss,Deferred:()=>fs,Disposable:()=>C0,DisposableCache:()=>Gg,DocumentCache:()=>qk,EMPTY_STREAM:()=>r2,ErrorWithLocation:()=>t0,GrammarUtils:()=>WT,MultiMap:()=>Hc,OperationCancelled:()=>Vc,Reduction:()=>Jm,RegExpUtils:()=>UT,SimpleCache:()=>ex,StreamImpl:()=>fo,TreeStreamImpl:()=>Pc,URI:()=>Hs,UriUtils:()=>ds,WorkspaceCache:()=>$g,assertUnreachable:()=>uf,delayNextTick:()=>MM,interruptAndCheck:()=>Hi,isOperationCancelled:()=>mf,loadGrammarFromJson:()=>gf,setInterruptionPeriod:()=>lce,startCancelableOperation:()=>oce,stream:()=>tn});var Bce=M(()=>{"use strict";Xk();cI();Sr($r,ui);Fg();XM();_T();Pce();nl();$s();Uc();os();rl();zl();Vl();ig()});var Fce=M(()=>{"use strict";HM();ax()});var zce=M(()=>{"use strict";WM();YM();qM();jM();Bg();xI();KM();dI();QM()});var ka={};vr(ka,{AbstractAstReflection:()=>Qd,AbstractCstNode:()=>V2,AbstractLangiumParser:()=>U2,AbstractParserErrorMessageProvider:()=>Gk,AbstractThreadedAsyncParser:()=>uI,AstUtils:()=>zT,BiMap:()=>E0,Cancellation:()=>Ar,CompositeCstNodeImpl:()=>b0,ContextCache:()=>S0,CstNodeBuilder:()=>$2,CstUtils:()=>AT,DONE_RESULT:()=>ss,DatatypeSymbol:()=>zk,DefaultAstNodeDescriptionProvider:()=>ox,DefaultAstNodeLocator:()=>cx,DefaultAsyncParser:()=>xx,DefaultCommentProvider:()=>vx,DefaultConfigurationProvider:()=>ux,DefaultDocumentBuilder:()=>hx,DefaultDocumentValidator:()=>sx,DefaultHydrator:()=>wx,DefaultIndexManager:()=>fx,DefaultJsonSerializer:()=>rx,DefaultLangiumDocumentFactory:()=>q2,DefaultLangiumDocuments:()=>X2,DefaultLexer:()=>px,DefaultLinker:()=>j2,DefaultNameProvider:()=>K2,DefaultReferenceDescriptionProvider:()=>lx,DefaultReferences:()=>Q2,DefaultScopeComputation:()=>Z2,DefaultScopeProvider:()=>tx,DefaultServiceRegistry:()=>nx,DefaultTokenBuilder:()=>T0,DefaultValueConverter:()=>k0,DefaultWorkspaceLock:()=>bx,DefaultWorkspaceManager:()=>dx,Deferred:()=>fs,Disposable:()=>C0,DisposableCache:()=>Gg,DocumentCache:()=>qk,DocumentState:()=>Tn,DocumentValidator:()=>Qu,EMPTY_SCOPE:()=>fze,EMPTY_STREAM:()=>r2,EmptyFileSystem:()=>vo,EmptyFileSystemProvider:()=>tE,ErrorWithLocation:()=>t0,GrammarAST:()=>o2,GrammarUtils:()=>WT,JSDocDocumentationProvider:()=>yx,LangiumCompletionParser:()=>W2,LangiumParser:()=>H2,LangiumParserErrorMessageProvider:()=>Rg,LeafCstNodeImpl:()=>x0,MapScope:()=>J2,Module:()=>gI,MultiMap:()=>Hc,OperationCancelled:()=>Vc,ParserWorker:()=>hI,Reduction:()=>Jm,RegExpUtils:()=>UT,RootCstNodeImpl:()=>Ng,SimpleCache:()=>ex,StreamImpl:()=>fo,StreamScope:()=>zg,TextDocument:()=>Og,TreeStreamImpl:()=>Pc,URI:()=>Hs,UriUtils:()=>ds,ValidationCategory:()=>Vg,ValidationRegistry:()=>ix,ValueConverter:()=>$c,WorkspaceCache:()=>$g,assertUnreachable:()=>uf,createCompletionParser:()=>vM,createDefaultCoreModule:()=>go,createDefaultSharedCoreModule:()=>yo,createGrammarConfig:()=>uR,createLangiumParser:()=>bM,delayNextTick:()=>MM,diagnosticData:()=>Kk,eagerLoad:()=>Cce,getDiagnosticRange:()=>gce,inject:()=>Wi,interruptAndCheck:()=>Hi,isAstNode:()=>ri,isAstNodeDescription:()=>OD,isAstNodeWithComment:()=>VM,isCompositeCstNode:()=>ho,isIMultiModeLexerDefinition:()=>JM,isJSDoc:()=>iI,isLeafCstNode:()=>cf,isLinkingError:()=>Zd,isNamed:()=>pce,isOperationCancelled:()=>mf,isReference:()=>Ta,isRootCstNode:()=>t2,isTokenTypeArray:()=>yce,isTokenTypeDictionary:()=>ZM,loadGrammarFromJson:()=>gf,parseJSDoc:()=>nI,prepareLangiumParser:()=>ece,setInterruptionPeriod:()=>lce,startCancelableOperation:()=>oce,stream:()=>tn,toDiagnosticSeverity:()=>Qk});var Wc=M(()=>{"use strict";mI();vI();UM();_ce();Zo();Lce();Nce();Mce();Ice();Oce();Bce();Sr(ka,$r);Fce();zce();Bc()});function qce(t){return Hl.isInstance(t,Yce)}function Xce(t){return Hl.isInstance(t,bI)}function jce(t){return Hl.isInstance(t,wI)}function Kce(t){return Hl.isInstance(t,Nze)}function Qce(t){return Hl.isInstance(t,TI)}function Jce(t){return Hl.isInstance(t,Zce)}function eue(t){return Hl.isInstance(t,kI)}function rue(t){return Hl.isInstance(t,tue)}function iue(t){return Hl.isInstance(t,nue)}function sue(t){return Hl.isInstance(t,aue)}function lue(t){return Hl.isInstance(t,oue)}var _ze,Rt,Wce,Yce,bI,Lze,Dze,wI,Nze,TI,Zce,kI,tue,nue,aue,oue,Rze,cue,Hl,Gce,Mze,$ce,Ize,Vce,Oze,Uce,Pze,Hce,Bze,Fze,zze,Gze,$ze,Vze,Wl,EI,SI,CI,AI,_I,Uze,Hze,Wze,Yze,Ug,A0,il,qze,al=M(()=>{"use strict";Wc();Wc();Wc();Wc();_ze=Object.defineProperty,Rt=o((t,e)=>_ze(t,"name",{value:e,configurable:!0}),"__name"),Wce="Statement",Yce="Architecture";o(qce,"isArchitecture");Rt(qce,"isArchitecture");bI="Branch";o(Xce,"isBranch");Rt(Xce,"isBranch");Lze="Checkout",Dze="CherryPicking",wI="Commit";o(jce,"isCommit");Rt(jce,"isCommit");Nze="Common";o(Kce,"isCommon");Rt(Kce,"isCommon");TI="GitGraph";o(Qce,"isGitGraph");Rt(Qce,"isGitGraph");Zce="Info";o(Jce,"isInfo");Rt(Jce,"isInfo");kI="Merge";o(eue,"isMerge");Rt(eue,"isMerge");tue="Packet";o(rue,"isPacket");Rt(rue,"isPacket");nue="PacketBlock";o(iue,"isPacketBlock");Rt(iue,"isPacketBlock");aue="Pie";o(sue,"isPie");Rt(sue,"isPie");oue="PieSection";o(lue,"isPieSection");Rt(lue,"isPieSection");Rze="Direction",cue=class extends Qd{static{o(this,"MermaidAstReflection")}static{Rt(this,"MermaidAstReflection")}getAllTypes(){return["Architecture","Branch","Checkout","CherryPicking","Commit","Common","Direction","Edge","GitGraph","Group","Info","Junction","Merge","Packet","PacketBlock","Pie","PieSection","Service","Statement"]}computeIsSubtype(t,e){switch(t){case bI:case Lze:case Dze:case wI:case kI:return this.isSubtype(Wce,e);case Rze:return this.isSubtype(TI,e);default:return!1}}getReferenceType(t){let e=`${t.container.$type}:${t.property}`;switch(e){default:throw new Error(`${e} is not a valid reference id.`)}}getTypeMetaData(t){switch(t){case"Architecture":return{name:"Architecture",properties:[{name:"accDescr"},{name:"accTitle"},{name:"edges",defaultValue:[]},{name:"groups",defaultValue:[]},{name:"junctions",defaultValue:[]},{name:"services",defaultValue:[]},{name:"title"}]};case"Branch":return{name:"Branch",properties:[{name:"name"},{name:"order"}]};case"Checkout":return{name:"Checkout",properties:[{name:"branch"}]};case"CherryPicking":return{name:"CherryPicking",properties:[{name:"id"},{name:"parent"},{name:"tags",defaultValue:[]}]};case"Commit":return{name:"Commit",properties:[{name:"id"},{name:"message"},{name:"tags",defaultValue:[]},{name:"type"}]};case"Common":return{name:"Common",properties:[{name:"accDescr"},{name:"accTitle"},{name:"title"}]};case"Edge":return{name:"Edge",properties:[{name:"lhsDir"},{name:"lhsGroup",defaultValue:!1},{name:"lhsId"},{name:"lhsInto",defaultValue:!1},{name:"rhsDir"},{name:"rhsGroup",defaultValue:!1},{name:"rhsId"},{name:"rhsInto",defaultValue:!1},{name:"title"}]};case"GitGraph":return{name:"GitGraph",properties:[{name:"accDescr"},{name:"accTitle"},{name:"statements",defaultValue:[]},{name:"title"}]};case"Group":return{name:"Group",properties:[{name:"icon"},{name:"id"},{name:"in"},{name:"title"}]};case"Info":return{name:"Info",properties:[{name:"accDescr"},{name:"accTitle"},{name:"title"}]};case"Junction":return{name:"Junction",properties:[{name:"id"},{name:"in"}]};case"Merge":return{name:"Merge",properties:[{name:"branch"},{name:"id"},{name:"tags",defaultValue:[]},{name:"type"}]};case"Packet":return{name:"Packet",properties:[{name:"accDescr"},{name:"accTitle"},{name:"blocks",defaultValue:[]},{name:"title"}]};case"PacketBlock":return{name:"PacketBlock",properties:[{name:"end"},{name:"label"},{name:"start"}]};case"Pie":return{name:"Pie",properties:[{name:"accDescr"},{name:"accTitle"},{name:"sections",defaultValue:[]},{name:"showData",defaultValue:!1},{name:"title"}]};case"PieSection":return{name:"PieSection",properties:[{name:"label"},{name:"value"}]};case"Service":return{name:"Service",properties:[{name:"icon"},{name:"iconText"},{name:"id"},{name:"in"},{name:"title"}]};case"Direction":return{name:"Direction",properties:[{name:"accDescr"},{name:"accTitle"},{name:"dir"},{name:"statements",defaultValue:[]},{name:"title"}]};default:return{name:t,properties:[]}}}},Hl=new cue,Mze=Rt(()=>Gce??(Gce=gf('{"$type":"Grammar","isDeclared":true,"name":"Info","imports":[],"rules":[{"$type":"ParserRule","name":"Info","entry":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"info"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"Keyword","value":"showInfo"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"*"}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"?"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"TitleAndAccessibilities","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"EOL","fragment":true,"dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}')),"InfoGrammar"),Ize=Rt(()=>$ce??($ce=gf(`{"$type":"Grammar","isDeclared":true,"name":"Packet","imports":[],"rules":[{"$type":"ParserRule","name":"Packet","entry":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"packet-beta"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"blocks","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"Assignment","feature":"blocks","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"+"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"PacketBlock","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"start","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"end","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}}],"cardinality":"?"},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/"},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"TitleAndAccessibilities","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"EOL","fragment":true,"dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}`)),"PacketGrammar"),Oze=Rt(()=>Vce??(Vce=gf('{"$type":"Grammar","isDeclared":true,"name":"Pie","imports":[],"rules":[{"$type":"ParserRule","name":"Pie","entry":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"pie"},{"$type":"Assignment","feature":"showData","operator":"?=","terminal":{"$type":"Keyword","value":"showData"},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"sections","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"Assignment","feature":"sections","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"+"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"PieSection","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"PIE_SECTION_LABEL","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]+\\"/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"PIE_SECTION_VALUE","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/(0|[1-9][0-9]*)(\\\\.[0-9]+)?/"},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"TitleAndAccessibilities","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"EOL","fragment":true,"dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}')),"PieGrammar"),Pze=Rt(()=>Uce??(Uce=gf('{"$type":"Grammar","isDeclared":true,"name":"Architecture","imports":[],"rules":[{"$type":"ParserRule","name":"Architecture","entry":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"architecture-beta"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"*"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Statement","fragment":true,"definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"groups","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"services","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"junctions","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"edges","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"LeftPort","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"lhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"RightPort","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"rhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Keyword","value":":"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Arrow","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]},{"$type":"Assignment","feature":"lhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"--"},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}},{"$type":"Keyword","value":"-"}]}]},{"$type":"Assignment","feature":"rhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Group","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"group"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Service","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"service"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"iconText","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}}],"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Junction","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"junction"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Edge","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"lhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"lhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"rhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"rhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"ARROW_DIRECTION","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"L"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"R"}}]},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"T"}}]},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"B"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_ID","definition":{"$type":"RegexToken","regex":"/[\\\\w]+/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_TEXT_ICON","definition":{"$type":"RegexToken","regex":"/\\\\(\\"[^\\"]+\\"\\\\)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_ICON","definition":{"$type":"RegexToken","regex":"/\\\\([\\\\w-:]+\\\\)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_TITLE","definition":{"$type":"RegexToken","regex":"/\\\\[[\\\\w ]+\\\\]/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_GROUP","definition":{"$type":"RegexToken","regex":"/\\\\{group\\\\}/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_INTO","definition":{"$type":"RegexToken","regex":"/<|>/"},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"TitleAndAccessibilities","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"EOL","fragment":true,"dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"types":[],"usedGrammars":[]}')),"ArchitectureGrammar"),Bze=Rt(()=>Hce??(Hce=gf(`{"$type":"Grammar","isDeclared":true,"name":"GitGraph","interfaces":[{"$type":"Interface","name":"Common","attributes":[{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"rules":[{"$type":"ParserRule","name":"TitleAndAccessibilities","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"EOL","fragment":true,"dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false},{"$type":"ParserRule","name":"GitGraph","entry":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Keyword","value":":"}]},{"$type":"Keyword","value":"gitGraph:"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]},{"$type":"Keyword","value":":"}]}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@0"},"arguments":[]},{"$type":"Assignment","feature":"statements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Direction","definition":{"$type":"Assignment","feature":"dir","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"LR"},{"$type":"Keyword","value":"TB"},{"$type":"Keyword","value":"BT"}]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Commit","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"commit"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"msg:","cardinality":"?"},{"$type":"Assignment","feature":"message","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Branch","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"branch"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"order:"},{"$type":"Assignment","feature":"order","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Merge","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"merge"},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]}},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Checkout","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"checkout"},{"$type":"Keyword","value":"switch"}]},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"CherryPicking","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"cherry-pick"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"parent:"},{"$type":"Assignment","feature":"parent","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+(?=\\\\s)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\\\w([-\\\\./\\\\w]*[-\\\\w])?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/"},"fragment":false,"hidden":false}],"definesHiddenTokens":false,"hiddenTokens":[],"imports":[],"types":[],"usedGrammars":[]}`)),"GitGraphGrammar"),Fze={languageId:"info",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1},zze={languageId:"packet",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1},Gze={languageId:"pie",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1},$ze={languageId:"architecture",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1},Vze={languageId:"gitGraph",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1},Wl={AstReflection:Rt(()=>new cue,"AstReflection")},EI={Grammar:Rt(()=>Mze(),"Grammar"),LanguageMetaData:Rt(()=>Fze,"LanguageMetaData"),parser:{}},SI={Grammar:Rt(()=>Ize(),"Grammar"),LanguageMetaData:Rt(()=>zze,"LanguageMetaData"),parser:{}},CI={Grammar:Rt(()=>Oze(),"Grammar"),LanguageMetaData:Rt(()=>Gze,"LanguageMetaData"),parser:{}},AI={Grammar:Rt(()=>Pze(),"Grammar"),LanguageMetaData:Rt(()=>$ze,"LanguageMetaData"),parser:{}},_I={Grammar:Rt(()=>Bze(),"Grammar"),LanguageMetaData:Rt(()=>Vze,"LanguageMetaData"),parser:{}},Uze=/accDescr(?:[\t ]*:([^\n\r]*)|\s*{([^}]*)})/,Hze=/accTitle[\t ]*:([^\n\r]*)/,Wze=/title([\t ][^\n\r]*|)/,Yze={ACC_DESCR:Uze,ACC_TITLE:Hze,TITLE:Wze},Ug=class extends k0{static{o(this,"AbstractMermaidValueConverter")}static{Rt(this,"AbstractMermaidValueConverter")}runConverter(t,e,r){let n=this.runCommonConverter(t,e,r);return n===void 0&&(n=this.runCustomConverter(t,e,r)),n===void 0?super.runConverter(t,e,r):n}runCommonConverter(t,e,r){let n=Yze[t.name];if(n===void 0)return;let i=n.exec(e);if(i!==null){if(i[1]!==void 0)return i[1].trim().replace(/[\t ]{2,}/gm," ");if(i[2]!==void 0)return i[2].replace(/^\s*/gm,"").replace(/\s+$/gm,"").replace(/[\t ]{2,}/gm," ").replace(/[\n\r]{2,}/gm,` +`)}}},A0=class extends Ug{static{o(this,"CommonValueConverter")}static{Rt(this,"CommonValueConverter")}runCustomConverter(t,e,r){}},il=class extends T0{static{o(this,"AbstractMermaidTokenBuilder")}static{Rt(this,"AbstractMermaidTokenBuilder")}constructor(t){super(),this.keywords=new Set(t)}buildKeywordTokens(t,e,r){let n=super.buildKeywordTokens(t,e,r);return n.forEach(i=>{this.keywords.has(i.name)&&i.PATTERN!==void 0&&(i.PATTERN=new RegExp(i.PATTERN.toString()+"(?:(?=%%)|(?!\\S))"))}),n}},qze=class extends il{static{o(this,"CommonTokenBuilder")}static{Rt(this,"CommonTokenBuilder")}}});function nE(t=vo){let e=Wi(yo(t),Wl),r=Wi(go({shared:e}),_I,rE);return e.ServiceRegistry.register(r),{shared:e,GitGraph:r}}var Xze,rE,LI=M(()=>{"use strict";al();Wc();Xze=class extends il{static{o(this,"GitGraphTokenBuilder")}static{Rt(this,"GitGraphTokenBuilder")}constructor(){super(["gitGraph"])}},rE={parser:{TokenBuilder:Rt(()=>new Xze,"TokenBuilder"),ValueConverter:Rt(()=>new A0,"ValueConverter")}};o(nE,"createGitGraphServices");Rt(nE,"createGitGraphServices")});function aE(t=vo){let e=Wi(yo(t),Wl),r=Wi(go({shared:e}),EI,iE);return e.ServiceRegistry.register(r),{shared:e,Info:r}}var jze,iE,DI=M(()=>{"use strict";al();Wc();jze=class extends il{static{o(this,"InfoTokenBuilder")}static{Rt(this,"InfoTokenBuilder")}constructor(){super(["info","showInfo"])}},iE={parser:{TokenBuilder:Rt(()=>new jze,"TokenBuilder"),ValueConverter:Rt(()=>new A0,"ValueConverter")}};o(aE,"createInfoServices");Rt(aE,"createInfoServices")});function oE(t=vo){let e=Wi(yo(t),Wl),r=Wi(go({shared:e}),SI,sE);return e.ServiceRegistry.register(r),{shared:e,Packet:r}}var Kze,sE,NI=M(()=>{"use strict";al();Wc();Kze=class extends il{static{o(this,"PacketTokenBuilder")}static{Rt(this,"PacketTokenBuilder")}constructor(){super(["packet-beta"])}},sE={parser:{TokenBuilder:Rt(()=>new Kze,"TokenBuilder"),ValueConverter:Rt(()=>new A0,"ValueConverter")}};o(oE,"createPacketServices");Rt(oE,"createPacketServices")});function cE(t=vo){let e=Wi(yo(t),Wl),r=Wi(go({shared:e}),CI,lE);return e.ServiceRegistry.register(r),{shared:e,Pie:r}}var Qze,Zze,lE,RI=M(()=>{"use strict";al();Wc();Qze=class extends il{static{o(this,"PieTokenBuilder")}static{Rt(this,"PieTokenBuilder")}constructor(){super(["pie","showData"])}},Zze=class extends Ug{static{o(this,"PieValueConverter")}static{Rt(this,"PieValueConverter")}runCustomConverter(t,e,r){if(t.name==="PIE_SECTION_LABEL")return e.replace(/"/g,"").trim()}},lE={parser:{TokenBuilder:Rt(()=>new Qze,"TokenBuilder"),ValueConverter:Rt(()=>new Zze,"ValueConverter")}};o(cE,"createPieServices");Rt(cE,"createPieServices")});function hE(t=vo){let e=Wi(yo(t),Wl),r=Wi(go({shared:e}),AI,uE);return e.ServiceRegistry.register(r),{shared:e,Architecture:r}}var Jze,eGe,uE,MI=M(()=>{"use strict";al();Wc();Jze=class extends il{static{o(this,"ArchitectureTokenBuilder")}static{Rt(this,"ArchitectureTokenBuilder")}constructor(){super(["architecture"])}},eGe=class extends Ug{static{o(this,"ArchitectureValueConverter")}static{Rt(this,"ArchitectureValueConverter")}runCustomConverter(t,e,r){if(t.name==="ARCH_ICON")return e.replace(/[()]/g,"").trim();if(t.name==="ARCH_TEXT_ICON")return e.replace(/["()]/g,"");if(t.name==="ARCH_TITLE")return e.replace(/[[\]]/g,"").trim()}},uE={parser:{TokenBuilder:Rt(()=>new Jze,"TokenBuilder"),ValueConverter:Rt(()=>new eGe,"ValueConverter")}};o(hE,"createArchitectureServices");Rt(hE,"createArchitectureServices")});var uue={};vr(uue,{InfoModule:()=>iE,createInfoServices:()=>aE});var hue=M(()=>{"use strict";DI();al()});var fue={};vr(fue,{PacketModule:()=>sE,createPacketServices:()=>oE});var due=M(()=>{"use strict";NI();al()});var pue={};vr(pue,{PieModule:()=>lE,createPieServices:()=>cE});var mue=M(()=>{"use strict";RI();al()});var gue={};vr(gue,{ArchitectureModule:()=>uE,createArchitectureServices:()=>hE});var yue=M(()=>{"use strict";MI();al()});var vue={};vr(vue,{GitGraphModule:()=>rE,createGitGraphServices:()=>nE});var xue=M(()=>{"use strict";LI();al()});async function Yl(t,e){let r=tGe[t];if(!r)throw new Error(`Unknown diagram type: ${t}`);_0[t]||await r();let i=_0[t].parse(e);if(i.lexerErrors.length>0||i.parserErrors.length>0)throw new rGe(i);return i.value}var _0,tGe,rGe,Hg=M(()=>{"use strict";LI();DI();NI();RI();MI();al();_0={},tGe={info:Rt(async()=>{let{createInfoServices:t}=await Promise.resolve().then(()=>(hue(),uue)),e=t().Info.parser.LangiumParser;_0.info=e},"info"),packet:Rt(async()=>{let{createPacketServices:t}=await Promise.resolve().then(()=>(due(),fue)),e=t().Packet.parser.LangiumParser;_0.packet=e},"packet"),pie:Rt(async()=>{let{createPieServices:t}=await Promise.resolve().then(()=>(mue(),pue)),e=t().Pie.parser.LangiumParser;_0.pie=e},"pie"),architecture:Rt(async()=>{let{createArchitectureServices:t}=await Promise.resolve().then(()=>(yue(),gue)),e=t().Architecture.parser.LangiumParser;_0.architecture=e},"architecture"),gitGraph:Rt(async()=>{let{createGitGraphServices:t}=await Promise.resolve().then(()=>(xue(),vue)),e=t().GitGraph.parser.LangiumParser;_0.gitGraph=e},"gitGraph")};o(Yl,"parse");Rt(Yl,"parse");rGe=class extends Error{static{o(this,"MermaidParseError")}constructor(t){let e=t.lexerErrors.map(n=>n.message).join(` +`),r=t.parserErrors.map(n=>n.message).join(` +`);super(`Parsing failed: ${e} ${r}`),this.result=t}static{Rt(this,"MermaidParseError")}}});function yf(t,e){t.accDescr&&e.setAccDescription?.(t.accDescr),t.accTitle&&e.setAccTitle?.(t.accTitle),t.title&&e.setDiagramTitle?.(t.title)}var Tx=M(()=>{"use strict";o(yf,"populateCommonDb")});var jr,fE=M(()=>{"use strict";jr={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4}});var vf,dE=M(()=>{"use strict";vf=class{constructor(e){this.init=e;this.records=this.init()}static{o(this,"ImperativeState")}reset(){this.records=this.init()}}});function II(){return n9({length:7})}function iGe(t,e){let r=Object.create(null);return t.reduce((n,i)=>{let a=e(i);return r[a]||(r[a]=!0,n.push(i)),n},[])}function bue(t,e,r){let n=t.indexOf(e);n===-1?t.push(r):t.splice(n,1,r)}function Tue(t){let e=t.reduce((i,a)=>i.seq>a.seq?i:a,t[0]),r="";t.forEach(function(i){i===e?r+=" *":r+=" |"});let n=[r,e.id,e.seq];for(let i in Tt.records.branches)Tt.records.branches.get(i)===e.id&&n.push(i);if(Y.debug(n.join(" ")),e.parents&&e.parents.length==2&&e.parents[0]&&e.parents[1]){let i=Tt.records.commits.get(e.parents[0]);bue(t,e,i),e.parents[1]&&t.push(Tt.records.commits.get(e.parents[1]))}else{if(e.parents.length==0)return;if(e.parents[0]){let i=Tt.records.commits.get(e.parents[0]);bue(t,e,i)}}t=iGe(t,i=>i.id),Tue(t)}var nGe,L0,Tt,aGe,sGe,oGe,lGe,cGe,uGe,hGe,wue,fGe,dGe,pGe,mGe,gGe,kue,yGe,vGe,xGe,pE,OI=M(()=>{"use strict";ut();hr();Za();fr();Ai();fE();dE();bs();nGe=ur.gitGraph,L0=o(()=>Ds({...nGe,...Cr().gitGraph}),"getConfig"),Tt=new vf(()=>{let t=L0(),e=t.mainBranchName,r=t.mainBranchOrder;return{mainBranchName:e,commits:new Map,head:null,branchConfig:new Map([[e,{name:e,order:r}]]),branches:new Map([[e,null]]),currBranch:e,direction:"LR",seq:0,options:{}}});o(II,"getID");o(iGe,"uniqBy");aGe=o(function(t){Tt.records.direction=t},"setDirection"),sGe=o(function(t){Y.debug("options str",t),t=t?.trim(),t=t||"{}";try{Tt.records.options=JSON.parse(t)}catch(e){Y.error("error while parsing gitGraph options",e.message)}},"setOptions"),oGe=o(function(){return Tt.records.options},"getOptions"),lGe=o(function(t){let e=t.msg,r=t.id,n=t.type,i=t.tags;Y.info("commit",e,r,n,i),Y.debug("Entering commit:",e,r,n,i);let a=L0();r=qe.sanitizeText(r,a),e=qe.sanitizeText(e,a),i=i?.map(l=>qe.sanitizeText(l,a));let s={id:r||Tt.records.seq+"-"+II(),message:e,seq:Tt.records.seq++,type:n??jr.NORMAL,tags:i??[],parents:Tt.records.head==null?[]:[Tt.records.head.id],branch:Tt.records.currBranch};Tt.records.head=s,Y.info("main branch",a.mainBranchName),Tt.records.commits.set(s.id,s),Tt.records.branches.set(Tt.records.currBranch,s.id),Y.debug("in pushCommit "+s.id)},"commit"),cGe=o(function(t){let e=t.name,r=t.order;if(e=qe.sanitizeText(e,L0()),Tt.records.branches.has(e))throw new Error(`Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout ${e}")`);Tt.records.branches.set(e,Tt.records.head!=null?Tt.records.head.id:null),Tt.records.branchConfig.set(e,{name:e,order:r}),wue(e),Y.debug("in createBranch")},"branch"),uGe=o(t=>{let e=t.branch,r=t.id,n=t.type,i=t.tags,a=L0();e=qe.sanitizeText(e,a),r&&(r=qe.sanitizeText(r,a));let s=Tt.records.branches.get(Tt.records.currBranch),l=Tt.records.branches.get(e),u=s?Tt.records.commits.get(s):void 0,h=l?Tt.records.commits.get(l):void 0;if(u&&h&&u.branch===e)throw new Error(`Cannot merge branch '${e}' into itself.`);if(Tt.records.currBranch===e){let p=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["branch abc"]},p}if(u===void 0||!u){let p=new Error(`Incorrect usage of "merge". Current branch (${Tt.records.currBranch})has no commits`);throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["commit"]},p}if(!Tt.records.branches.has(e)){let p=new Error('Incorrect usage of "merge". Branch to be merged ('+e+") does not exist");throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:[`branch ${e}`]},p}if(h===void 0||!h){let p=new Error('Incorrect usage of "merge". Branch to be merged ('+e+") has no commits");throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:['"commit"']},p}if(u===h){let p=new Error('Incorrect usage of "merge". Both branches have same head');throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["branch abc"]},p}if(r&&Tt.records.commits.has(r)){let p=new Error('Incorrect usage of "merge". Commit with id:'+r+" already exists, use different custom Id");throw p.hash={text:`merge ${e} ${r} ${n} ${i?.join(" ")}`,token:`merge ${e} ${r} ${n} ${i?.join(" ")}`,expected:[`merge ${e} ${r}_UNIQUE ${n} ${i?.join(" ")}`]},p}let f=l||"",d={id:r||`${Tt.records.seq}-${II()}`,message:`merged branch ${e} into ${Tt.records.currBranch}`,seq:Tt.records.seq++,parents:Tt.records.head==null?[]:[Tt.records.head.id,f],branch:Tt.records.currBranch,type:jr.MERGE,customType:n,customId:!!r,tags:i??[]};Tt.records.head=d,Tt.records.commits.set(d.id,d),Tt.records.branches.set(Tt.records.currBranch,d.id),Y.debug(Tt.records.branches),Y.debug("in mergeBranch")},"merge"),hGe=o(function(t){let e=t.id,r=t.targetId,n=t.tags,i=t.parent;Y.debug("Entering cherryPick:",e,r,n);let a=L0();if(e=qe.sanitizeText(e,a),r=qe.sanitizeText(r,a),n=n?.map(u=>qe.sanitizeText(u,a)),i=qe.sanitizeText(i,a),!e||!Tt.records.commits.has(e)){let u=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw u.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},u}let s=Tt.records.commits.get(e);if(s===void 0||!s)throw new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');if(i&&!(Array.isArray(s.parents)&&s.parents.includes(i)))throw new Error("Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.");let l=s.branch;if(s.type===jr.MERGE&&!i)throw new Error("Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.");if(!r||!Tt.records.commits.has(r)){if(l===Tt.records.currBranch){let d=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let u=Tt.records.branches.get(Tt.records.currBranch);if(u===void 0||!u){let d=new Error(`Incorrect usage of "cherry-pick". Current branch (${Tt.records.currBranch})has no commits`);throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let h=Tt.records.commits.get(u);if(h===void 0||!h){let d=new Error(`Incorrect usage of "cherry-pick". Current branch (${Tt.records.currBranch})has no commits`);throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let f={id:Tt.records.seq+"-"+II(),message:`cherry-picked ${s?.message} into ${Tt.records.currBranch}`,seq:Tt.records.seq++,parents:Tt.records.head==null?[]:[Tt.records.head.id,s.id],branch:Tt.records.currBranch,type:jr.CHERRY_PICK,tags:n?n.filter(Boolean):[`cherry-pick:${s.id}${s.type===jr.MERGE?`|parent:${i}`:""}`]};Tt.records.head=f,Tt.records.commits.set(f.id,f),Tt.records.branches.set(Tt.records.currBranch,f.id),Y.debug(Tt.records.branches),Y.debug("in cherryPick")}},"cherryPick"),wue=o(function(t){if(t=qe.sanitizeText(t,L0()),Tt.records.branches.has(t)){Tt.records.currBranch=t;let e=Tt.records.branches.get(Tt.records.currBranch);e===void 0||!e?Tt.records.head=null:Tt.records.head=Tt.records.commits.get(e)??null}else{let e=new Error(`Trying to checkout branch which is not yet created. (Help try using "branch ${t}")`);throw e.hash={text:`checkout ${t}`,token:`checkout ${t}`,expected:[`branch ${t}`]},e}},"checkout");o(bue,"upsert");o(Tue,"prettyPrintCommitHistory");fGe=o(function(){Y.debug(Tt.records.commits);let t=kue()[0];Tue([t])},"prettyPrint"),dGe=o(function(){Tt.reset(),Lr()},"clear"),pGe=o(function(){return[...Tt.records.branchConfig.values()].map((e,r)=>e.order!==null&&e.order!==void 0?e:{...e,order:parseFloat(`0.${r}`)}).sort((e,r)=>(e.order??0)-(r.order??0)).map(({name:e})=>({name:e}))},"getBranchesAsObjArray"),mGe=o(function(){return Tt.records.branches},"getBranches"),gGe=o(function(){return Tt.records.commits},"getCommits"),kue=o(function(){let t=[...Tt.records.commits.values()];return t.forEach(function(e){Y.debug(e.id)}),t.sort((e,r)=>e.seq-r.seq),t},"getCommitsArray"),yGe=o(function(){return Tt.records.currBranch},"getCurrentBranch"),vGe=o(function(){return Tt.records.direction},"getDirection"),xGe=o(function(){return Tt.records.head},"getHead"),pE={commitType:jr,getConfig:L0,setDirection:aGe,setOptions:sGe,getOptions:oGe,commit:lGe,branch:cGe,merge:uGe,cherryPick:hGe,checkout:wue,prettyPrint:fGe,clear:dGe,getBranchesAsObjArray:pGe,getBranches:mGe,getCommits:gGe,getCommitsArray:kue,getCurrentBranch:yGe,getDirection:vGe,getHead:xGe,setAccTitle:Mr,getAccTitle:Br,getAccDescription:zr,setAccDescription:Fr,setDiagramTitle:cn,getDiagramTitle:Jr}});var bGe,wGe,TGe,kGe,EGe,SGe,CGe,Eue,Sue=M(()=>{"use strict";Hg();ut();Tx();OI();fE();bGe=o((t,e)=>{yf(t,e),t.dir&&e.setDirection(t.dir);for(let r of t.statements)wGe(r,e)},"populate"),wGe=o((t,e)=>{let n={Commit:o(i=>e.commit(TGe(i)),"Commit"),Branch:o(i=>e.branch(kGe(i)),"Branch"),Merge:o(i=>e.merge(EGe(i)),"Merge"),Checkout:o(i=>e.checkout(SGe(i)),"Checkout"),CherryPicking:o(i=>e.cherryPick(CGe(i)),"CherryPicking")}[t.$type];n?n(t):Y.error(`Unknown statement type: ${t.$type}`)},"parseStatement"),TGe=o(t=>({id:t.id,msg:t.message??"",type:t.type!==void 0?jr[t.type]:jr.NORMAL,tags:t.tags??void 0}),"parseCommit"),kGe=o(t=>({name:t.name,order:t.order??0}),"parseBranch"),EGe=o(t=>({branch:t.branch,id:t.id??"",type:t.type!==void 0?jr[t.type]:void 0,tags:t.tags??void 0}),"parseMerge"),SGe=o(t=>t.branch,"parseCheckout"),CGe=o(t=>({id:t.id,targetId:"",tags:t.tags?.length===0?void 0:t.tags,parent:t.parent}),"parseCherryPicking"),Eue={parse:o(async t=>{let e=await Yl("gitGraph",t);Y.debug(e),bGe(e,pE)},"parse")}});var AGe,sl,bf,wf,Yc,Zu,D0,Ws,Ys,mE,kx,gE,xf,Rr,_Ge,Aue,_ue,LGe,DGe,NGe,RGe,MGe,IGe,OGe,PGe,BGe,FGe,zGe,GGe,Cue,$Ge,Ex,VGe,UGe,HGe,WGe,YGe,Lue,Due=M(()=>{"use strict";pr();Vt();ut();hr();fE();AGe=pe(),sl=AGe?.gitGraph,bf=10,wf=40,Yc=4,Zu=2,D0=8,Ws=new Map,Ys=new Map,mE=30,kx=new Map,gE=[],xf=0,Rr="LR",_Ge=o(()=>{Ws.clear(),Ys.clear(),kx.clear(),xf=0,gE=[],Rr="LR"},"clear"),Aue=o(t=>{let e=document.createElementNS("http://www.w3.org/2000/svg","text");return(typeof t=="string"?t.split(/\\n|\n|/gi):t).forEach(n=>{let i=document.createElementNS("http://www.w3.org/2000/svg","tspan");i.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),i.setAttribute("dy","1em"),i.setAttribute("x","0"),i.setAttribute("class","row"),i.textContent=n.trim(),e.appendChild(i)}),e},"drawText"),_ue=o(t=>{let e,r,n;return Rr==="BT"?(r=o((i,a)=>i<=a,"comparisonFunc"),n=1/0):(r=o((i,a)=>i>=a,"comparisonFunc"),n=0),t.forEach(i=>{let a=Rr==="TB"||Rr=="BT"?Ys.get(i)?.y:Ys.get(i)?.x;a!==void 0&&r(a,n)&&(e=i,n=a)}),e},"findClosestParent"),LGe=o(t=>{let e="",r=1/0;return t.forEach(n=>{let i=Ys.get(n).y;i<=r&&(e=n,r=i)}),e||void 0},"findClosestParentBT"),DGe=o((t,e,r)=>{let n=r,i=r,a=[];t.forEach(s=>{let l=e.get(s);if(!l)throw new Error(`Commit not found for key ${s}`);l.parents.length?(n=RGe(l),i=Math.max(n,i)):a.push(l),MGe(l,n)}),n=i,a.forEach(s=>{IGe(s,n,r)}),t.forEach(s=>{let l=e.get(s);if(l?.parents.length){let u=LGe(l.parents);n=Ys.get(u).y-wf,n<=i&&(i=n);let h=Ws.get(l.branch).pos,f=n-bf;Ys.set(l.id,{x:h,y:f})}})},"setParallelBTPos"),NGe=o(t=>{let e=_ue(t.parents.filter(n=>n!==null));if(!e)throw new Error(`Closest parent not found for commit ${t.id}`);let r=Ys.get(e)?.y;if(r===void 0)throw new Error(`Closest parent position not found for commit ${t.id}`);return r},"findClosestParentPos"),RGe=o(t=>NGe(t)+wf,"calculateCommitPosition"),MGe=o((t,e)=>{let r=Ws.get(t.branch);if(!r)throw new Error(`Branch not found for commit ${t.id}`);let n=r.pos,i=e+bf;return Ys.set(t.id,{x:n,y:i}),{x:n,y:i}},"setCommitPosition"),IGe=o((t,e,r)=>{let n=Ws.get(t.branch);if(!n)throw new Error(`Branch not found for commit ${t.id}`);let i=e+r,a=n.pos;Ys.set(t.id,{x:a,y:i})},"setRootPosition"),OGe=o((t,e,r,n,i,a)=>{if(a===jr.HIGHLIGHT)t.append("rect").attr("x",r.x-10).attr("y",r.y-10).attr("width",20).attr("height",20).attr("class",`commit ${e.id} commit-highlight${i%D0} ${n}-outer`),t.append("rect").attr("x",r.x-6).attr("y",r.y-6).attr("width",12).attr("height",12).attr("class",`commit ${e.id} commit${i%D0} ${n}-inner`);else if(a===jr.CHERRY_PICK)t.append("circle").attr("cx",r.x).attr("cy",r.y).attr("r",10).attr("class",`commit ${e.id} ${n}`),t.append("circle").attr("cx",r.x-3).attr("cy",r.y+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${e.id} ${n}`),t.append("circle").attr("cx",r.x+3).attr("cy",r.y+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${e.id} ${n}`),t.append("line").attr("x1",r.x+3).attr("y1",r.y+1).attr("x2",r.x).attr("y2",r.y-5).attr("stroke","#fff").attr("class",`commit ${e.id} ${n}`),t.append("line").attr("x1",r.x-3).attr("y1",r.y+1).attr("x2",r.x).attr("y2",r.y-5).attr("stroke","#fff").attr("class",`commit ${e.id} ${n}`);else{let s=t.append("circle");if(s.attr("cx",r.x),s.attr("cy",r.y),s.attr("r",e.type===jr.MERGE?9:10),s.attr("class",`commit ${e.id} commit${i%D0}`),a===jr.MERGE){let l=t.append("circle");l.attr("cx",r.x),l.attr("cy",r.y),l.attr("r",6),l.attr("class",`commit ${n} ${e.id} commit${i%D0}`)}a===jr.REVERSE&&t.append("path").attr("d",`M ${r.x-5},${r.y-5}L${r.x+5},${r.y+5}M${r.x-5},${r.y+5}L${r.x+5},${r.y-5}`).attr("class",`commit ${n} ${e.id} commit${i%D0}`)}},"drawCommitBullet"),PGe=o((t,e,r,n)=>{if(e.type!==jr.CHERRY_PICK&&(e.customId&&e.type===jr.MERGE||e.type!==jr.MERGE)&&sl?.showCommitLabel){let i=t.append("g"),a=i.insert("rect").attr("class","commit-label-bkg"),s=i.append("text").attr("x",n).attr("y",r.y+25).attr("class","commit-label").text(e.id),l=s.node()?.getBBox();if(l&&(a.attr("x",r.posWithOffset-l.width/2-Zu).attr("y",r.y+13.5).attr("width",l.width+2*Zu).attr("height",l.height+2*Zu),Rr==="TB"||Rr==="BT"?(a.attr("x",r.x-(l.width+4*Yc+5)).attr("y",r.y-12),s.attr("x",r.x-(l.width+4*Yc)).attr("y",r.y+l.height-12)):s.attr("x",r.posWithOffset-l.width/2),sl.rotateCommitLabel))if(Rr==="TB"||Rr==="BT")s.attr("transform","rotate(-45, "+r.x+", "+r.y+")"),a.attr("transform","rotate(-45, "+r.x+", "+r.y+")");else{let u=-7.5-(l.width+10)/25*9.5,h=10+l.width/25*8.5;i.attr("transform","translate("+u+", "+h+") rotate(-45, "+n+", "+r.y+")")}}},"drawCommitLabel"),BGe=o((t,e,r,n)=>{if(e.tags.length>0){let i=0,a=0,s=0,l=[];for(let u of e.tags.reverse()){let h=t.insert("polygon"),f=t.append("circle"),d=t.append("text").attr("y",r.y-16-i).attr("class","tag-label").text(u),p=d.node()?.getBBox();if(!p)throw new Error("Tag bbox not found");a=Math.max(a,p.width),s=Math.max(s,p.height),d.attr("x",r.posWithOffset-p.width/2),l.push({tag:d,hole:f,rect:h,yOffset:i}),i+=20}for(let{tag:u,hole:h,rect:f,yOffset:d}of l){let p=s/2,m=r.y-19.2-d;if(f.attr("class","tag-label-bkg").attr("points",` + ${n-a/2-Yc/2},${m+Zu} + ${n-a/2-Yc/2},${m-Zu} + ${r.posWithOffset-a/2-Yc},${m-p-Zu} + ${r.posWithOffset+a/2+Yc},${m-p-Zu} + ${r.posWithOffset+a/2+Yc},${m+p+Zu} + ${r.posWithOffset-a/2-Yc},${m+p+Zu}`),h.attr("cy",m).attr("cx",n-a/2+Yc/2).attr("r",1.5).attr("class","tag-hole"),Rr==="TB"||Rr==="BT"){let g=n+d;f.attr("class","tag-label-bkg").attr("points",` + ${r.x},${g+2} + ${r.x},${g-2} + ${r.x+bf},${g-p-2} + ${r.x+bf+a+4},${g-p-2} + ${r.x+bf+a+4},${g+p+2} + ${r.x+bf},${g+p+2}`).attr("transform","translate(12,12) rotate(45, "+r.x+","+n+")"),h.attr("cx",r.x+Yc/2).attr("cy",g).attr("transform","translate(12,12) rotate(45, "+r.x+","+n+")"),u.attr("x",r.x+5).attr("y",g+3).attr("transform","translate(14,14) rotate(45, "+r.x+","+n+")")}}}},"drawCommitTags"),FGe=o(t=>{switch(t.customType??t.type){case jr.NORMAL:return"commit-normal";case jr.REVERSE:return"commit-reverse";case jr.HIGHLIGHT:return"commit-highlight";case jr.MERGE:return"commit-merge";case jr.CHERRY_PICK:return"commit-cherry-pick";default:return"commit-normal"}},"getCommitClassType"),zGe=o((t,e,r,n)=>{let i={x:0,y:0};if(t.parents.length>0){let a=_ue(t.parents);if(a){let s=n.get(a)??i;return e==="TB"?s.y+wf:e==="BT"?(n.get(t.id)??i).y-wf:s.x+wf}}else return e==="TB"?mE:e==="BT"?(n.get(t.id)??i).y-wf:0;return 0},"calculatePosition"),GGe=o((t,e,r)=>{let n=Rr==="BT"&&r?e:e+bf,i=Rr==="TB"||Rr==="BT"?n:Ws.get(t.branch)?.pos,a=Rr==="TB"||Rr==="BT"?Ws.get(t.branch)?.pos:n;if(a===void 0||i===void 0)throw new Error(`Position were undefined for commit ${t.id}`);return{x:a,y:i,posWithOffset:n}},"getCommitPosition"),Cue=o((t,e,r)=>{if(!sl)throw new Error("GitGraph config not found");let n=t.append("g").attr("class","commit-bullets"),i=t.append("g").attr("class","commit-labels"),a=Rr==="TB"||Rr==="BT"?mE:0,s=[...e.keys()],l=sl?.parallelCommits??!1,u=o((f,d)=>{let p=e.get(f)?.seq,m=e.get(d)?.seq;return p!==void 0&&m!==void 0?p-m:0},"sortKeys"),h=s.sort(u);Rr==="BT"&&(l&&DGe(h,e,a),h=h.reverse()),h.forEach(f=>{let d=e.get(f);if(!d)throw new Error(`Commit not found for key ${f}`);l&&(a=zGe(d,Rr,a,Ys));let p=GGe(d,a,l);if(r){let m=FGe(d),g=d.customType??d.type,y=Ws.get(d.branch)?.index??0;OGe(n,d,p,m,y,g),PGe(i,d,p,a),BGe(i,d,p,a)}Rr==="TB"||Rr==="BT"?Ys.set(d.id,{x:p.x,y:p.posWithOffset}):Ys.set(d.id,{x:p.posWithOffset,y:p.y}),a=Rr==="BT"&&l?a+wf:a+wf+bf,a>xf&&(xf=a)})},"drawCommits"),$Ge=o((t,e,r,n,i)=>{let s=(Rr==="TB"||Rr==="BT"?r.xh.branch===s,"isOnBranchToGetCurve"),u=o(h=>h.seq>t.seq&&h.sequ(h)&&l(h))},"shouldRerouteArrow"),Ex=o((t,e,r=0)=>{let n=t+Math.abs(t-e)/2;if(r>5)return n;if(gE.every(s=>Math.abs(s-n)>=10))return gE.push(n),n;let a=Math.abs(t-e);return Ex(t,e-a/5,r+1)},"findLane"),VGe=o((t,e,r,n)=>{let i=Ys.get(e.id),a=Ys.get(r.id);if(i===void 0||a===void 0)throw new Error(`Commit positions not found for commits ${e.id} and ${r.id}`);let s=$Ge(e,r,i,a,n),l="",u="",h=0,f=0,d=Ws.get(r.branch)?.index;r.type===jr.MERGE&&e.id!==r.parents[0]&&(d=Ws.get(e.branch)?.index);let p;if(s){l="A 10 10, 0, 0, 0,",u="A 10 10, 0, 0, 1,",h=10,f=10;let m=i.ya.x&&(l="A 20 20, 0, 0, 0,",u="A 20 20, 0, 0, 1,",h=20,f=20,r.type===jr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${i.x} ${a.y-h} ${u} ${i.x-f} ${a.y} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${a.x+h} ${i.y} ${l} ${a.x} ${i.y+f} L ${a.x} ${a.y}`),i.x===a.x&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`)):Rr==="BT"?(i.xa.x&&(l="A 20 20, 0, 0, 0,",u="A 20 20, 0, 0, 1,",h=20,f=20,r.type===jr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${i.x} ${a.y+h} ${l} ${i.x-f} ${a.y} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${l} ${a.x} ${i.y-f} L ${a.x} ${a.y}`),i.x===a.x&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`)):(i.ya.y&&(r.type===jr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${l} ${a.x} ${i.y-f} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${i.x} ${a.y+h} ${u} ${i.x+f} ${a.y} L ${a.x} ${a.y}`),i.y===a.y&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`));if(p===void 0)throw new Error("Line definition not found");t.append("path").attr("d",p).attr("class","arrow arrow"+d%D0)},"drawArrow"),UGe=o((t,e)=>{let r=t.append("g").attr("class","commit-arrows");[...e.keys()].forEach(n=>{let i=e.get(n);i.parents&&i.parents.length>0&&i.parents.forEach(a=>{VGe(r,e.get(a),i,e)})})},"drawArrows"),HGe=o((t,e)=>{let r=t.append("g");e.forEach((n,i)=>{let a=i%D0,s=Ws.get(n.name)?.pos;if(s===void 0)throw new Error(`Position not found for branch ${n.name}`);let l=r.append("line");l.attr("x1",0),l.attr("y1",s),l.attr("x2",xf),l.attr("y2",s),l.attr("class","branch branch"+a),Rr==="TB"?(l.attr("y1",mE),l.attr("x1",s),l.attr("y2",xf),l.attr("x2",s)):Rr==="BT"&&(l.attr("y1",xf),l.attr("x1",s),l.attr("y2",mE),l.attr("x2",s)),gE.push(s);let u=n.name,h=Aue(u),f=r.insert("rect"),p=r.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+a);p.node().appendChild(h);let m=h.getBBox();f.attr("class","branchLabelBkg label"+a).attr("rx",4).attr("ry",4).attr("x",-m.width-4-(sl?.rotateCommitLabel===!0?30:0)).attr("y",-m.height/2+8).attr("width",m.width+18).attr("height",m.height+4),p.attr("transform","translate("+(-m.width-14-(sl?.rotateCommitLabel===!0?30:0))+", "+(s-m.height/2-1)+")"),Rr==="TB"?(f.attr("x",s-m.width/2-10).attr("y",0),p.attr("transform","translate("+(s-m.width/2-5)+", 0)")):Rr==="BT"?(f.attr("x",s-m.width/2-10).attr("y",xf),p.attr("transform","translate("+(s-m.width/2-5)+", "+xf+")")):f.attr("transform","translate(-19, "+(s-m.height/2)+")")})},"drawBranches"),WGe=o(function(t,e,r,n,i){return Ws.set(t,{pos:e,index:r}),e+=50+(i?40:0)+(Rr==="TB"||Rr==="BT"?n.width/2:0),e},"setBranchPosition"),YGe=o(function(t,e,r,n){if(_Ge(),Y.debug("in gitgraph renderer",t+` +`,"id:",e,r),!sl)throw new Error("GitGraph config not found");let i=sl.rotateCommitLabel??!1,a=n.db;kx=a.getCommits();let s=a.getBranchesAsObjArray();Rr=a.getDirection();let l=Ve(`[id="${e}"]`),u=0;s.forEach((h,f)=>{let d=Aue(h.name),p=l.append("g"),m=p.insert("g").attr("class","branchLabel"),g=m.insert("g").attr("class","label branch-label");g.node()?.appendChild(d);let y=d.getBBox();u=WGe(h.name,u,f,y,i),g.remove(),m.remove(),p.remove()}),Cue(l,kx,!1),sl.showBranches&&HGe(l,s),UGe(l,kx),Cue(l,kx,!0),Ut.insertTitle(l,"gitTitleText",sl.titleTopMargin??0,a.getDiagramTitle()),o7(void 0,l,sl.diagramPadding,sl.useMaxWidth)},"draw"),Lue={draw:YGe}});var qGe,Nue,Rue=M(()=>{"use strict";qGe=o(t=>` .commit-id, .commit-msg, .branch-label { @@ -569,60 +799,60 @@ Expecting `+kt.join(", ")+", got '"+(this.terminals_[_t]||_t)+"'":On="Parse erro font-family: 'trebuchet ms', verdana, arial, sans-serif; font-family: var(--mermaid-font-family); } - ${[0,1,2,3,4,5,6,7].map(s=>` - .branch-label${s} { fill: ${i["gitBranchLabel"+s]}; } - .commit${s} { stroke: ${i["git"+s]}; fill: ${i["git"+s]}; } - .commit-highlight${s} { stroke: ${i["gitInv"+s]}; fill: ${i["gitInv"+s]}; } - .label${s} { fill: ${i["git"+s]}; } - .arrow${s} { stroke: ${i["git"+s]}; } + ${[0,1,2,3,4,5,6,7].map(e=>` + .branch-label${e} { fill: ${t["gitBranchLabel"+e]}; } + .commit${e} { stroke: ${t["git"+e]}; fill: ${t["git"+e]}; } + .commit-highlight${e} { stroke: ${t["gitInv"+e]}; fill: ${t["gitInv"+e]}; } + .label${e} { fill: ${t["git"+e]}; } + .arrow${e} { stroke: ${t["git"+e]}; } `).join(` `)} .branch { stroke-width: 1; - stroke: ${i.lineColor}; + stroke: ${t.lineColor}; stroke-dasharray: 2; } - .commit-label { font-size: ${i.commitLabelFontSize}; fill: ${i.commitLabelColor};} - .commit-label-bkg { font-size: ${i.commitLabelFontSize}; fill: ${i.commitLabelBackground}; opacity: 0.5; } - .tag-label { font-size: ${i.tagLabelFontSize}; fill: ${i.tagLabelColor};} - .tag-label-bkg { fill: ${i.tagLabelBackground}; stroke: ${i.tagLabelBorder}; } - .tag-hole { fill: ${i.textColor}; } + .commit-label { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelColor};} + .commit-label-bkg { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelBackground}; opacity: 0.5; } + .tag-label { font-size: ${t.tagLabelFontSize}; fill: ${t.tagLabelColor};} + .tag-label-bkg { fill: ${t.tagLabelBackground}; stroke: ${t.tagLabelBorder}; } + .tag-hole { fill: ${t.textColor}; } .commit-merge { - stroke: ${i.primaryColor}; - fill: ${i.primaryColor}; + stroke: ${t.primaryColor}; + fill: ${t.primaryColor}; } .commit-reverse { - stroke: ${i.primaryColor}; - fill: ${i.primaryColor}; + stroke: ${t.primaryColor}; + fill: ${t.primaryColor}; stroke-width: 3; } .commit-highlight-outer { } .commit-highlight-inner { - stroke: ${i.primaryColor}; - fill: ${i.primaryColor}; + stroke: ${t.primaryColor}; + fill: ${t.primaryColor}; } .arrow { stroke-width: 8; stroke-linecap: round; fill: none} .gitTitleText { text-anchor: middle; font-size: 18px; - fill: ${i.textColor}; - } -`}},Symbol.toStringTag,{value:"Module"}));var Yme=function(){var i=function(W,xe,U,Fe){for(U=U||{},Fe=W.length;Fe--;U[W[Fe]]=xe);return U},s=[6,8,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,30,32,33,35,37],u=[1,25],d=[1,26],p=[1,27],v=[1,28],b=[1,29],y=[1,30],T=[1,31],_=[1,9],A=[1,10],P=[1,11],R=[1,12],F=[1,13],j=[1,14],K=[1,15],ee=[1,16],ie=[1,18],oe=[1,19],pe=[1,20],be=[1,21],ae=[1,22],ne=[1,24],se=[1,32],de={trace:function(){},yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,weekday:11,weekday_monday:12,weekday_tuesday:13,weekday_wednesday:14,weekday_thursday:15,weekday_friday:16,weekday_saturday:17,weekday_sunday:18,dateFormat:19,inclusiveEndDates:20,topAxis:21,axisFormat:22,tickInterval:23,excludes:24,includes:25,todayMarker:26,title:27,acc_title:28,acc_title_value:29,acc_descr:30,acc_descr_value:31,acc_descr_multiline_value:32,section:33,clickStatement:34,taskTxt:35,taskData:36,click:37,callbackname:38,callbackargs:39,href:40,clickStatementDebug:41,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",12:"weekday_monday",13:"weekday_tuesday",14:"weekday_wednesday",15:"weekday_thursday",16:"weekday_friday",17:"weekday_saturday",18:"weekday_sunday",19:"dateFormat",20:"inclusiveEndDates",21:"topAxis",22:"axisFormat",23:"tickInterval",24:"excludes",25:"includes",26:"todayMarker",27:"title",28:"acc_title",29:"acc_title_value",30:"acc_descr",31:"acc_descr_value",32:"acc_descr_multiline_value",33:"section",35:"taskTxt",36:"taskData",37:"click",38:"callbackname",39:"callbackargs",40:"href"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,2],[34,2],[34,3],[34,3],[34,4],[34,3],[34,4],[34,2],[41,2],[41,3],[41,3],[41,4],[41,3],[41,4],[41,2]],performAction:function(xe,U,Fe,Pe,je,Ie,Se){var Ce=Ie.length-1;switch(je){case 1:return Ie[Ce-1];case 2:this.$=[];break;case 3:Ie[Ce-1].push(Ie[Ce]),this.$=Ie[Ce-1];break;case 4:case 5:this.$=Ie[Ce];break;case 6:case 7:this.$=[];break;case 8:Pe.setWeekday("monday");break;case 9:Pe.setWeekday("tuesday");break;case 10:Pe.setWeekday("wednesday");break;case 11:Pe.setWeekday("thursday");break;case 12:Pe.setWeekday("friday");break;case 13:Pe.setWeekday("saturday");break;case 14:Pe.setWeekday("sunday");break;case 15:Pe.setDateFormat(Ie[Ce].substr(11)),this.$=Ie[Ce].substr(11);break;case 16:Pe.enableInclusiveEndDates(),this.$=Ie[Ce].substr(18);break;case 17:Pe.TopAxis(),this.$=Ie[Ce].substr(8);break;case 18:Pe.setAxisFormat(Ie[Ce].substr(11)),this.$=Ie[Ce].substr(11);break;case 19:Pe.setTickInterval(Ie[Ce].substr(13)),this.$=Ie[Ce].substr(13);break;case 20:Pe.setExcludes(Ie[Ce].substr(9)),this.$=Ie[Ce].substr(9);break;case 21:Pe.setIncludes(Ie[Ce].substr(9)),this.$=Ie[Ce].substr(9);break;case 22:Pe.setTodayMarker(Ie[Ce].substr(12)),this.$=Ie[Ce].substr(12);break;case 24:Pe.setDiagramTitle(Ie[Ce].substr(6)),this.$=Ie[Ce].substr(6);break;case 25:this.$=Ie[Ce].trim(),Pe.setAccTitle(this.$);break;case 26:case 27:this.$=Ie[Ce].trim(),Pe.setAccDescription(this.$);break;case 28:Pe.addSection(Ie[Ce].substr(8)),this.$=Ie[Ce].substr(8);break;case 30:Pe.addTask(Ie[Ce-1],Ie[Ce]),this.$="task";break;case 31:this.$=Ie[Ce-1],Pe.setClickEvent(Ie[Ce-1],Ie[Ce],null);break;case 32:this.$=Ie[Ce-2],Pe.setClickEvent(Ie[Ce-2],Ie[Ce-1],Ie[Ce]);break;case 33:this.$=Ie[Ce-2],Pe.setClickEvent(Ie[Ce-2],Ie[Ce-1],null),Pe.setLink(Ie[Ce-2],Ie[Ce]);break;case 34:this.$=Ie[Ce-3],Pe.setClickEvent(Ie[Ce-3],Ie[Ce-2],Ie[Ce-1]),Pe.setLink(Ie[Ce-3],Ie[Ce]);break;case 35:this.$=Ie[Ce-2],Pe.setClickEvent(Ie[Ce-2],Ie[Ce],null),Pe.setLink(Ie[Ce-2],Ie[Ce-1]);break;case 36:this.$=Ie[Ce-3],Pe.setClickEvent(Ie[Ce-3],Ie[Ce-1],Ie[Ce]),Pe.setLink(Ie[Ce-3],Ie[Ce-2]);break;case 37:this.$=Ie[Ce-1],Pe.setLink(Ie[Ce-1],Ie[Ce]);break;case 38:case 44:this.$=Ie[Ce-1]+" "+Ie[Ce];break;case 39:case 40:case 42:this.$=Ie[Ce-2]+" "+Ie[Ce-1]+" "+Ie[Ce];break;case 41:case 43:this.$=Ie[Ce-3]+" "+Ie[Ce-2]+" "+Ie[Ce-1]+" "+Ie[Ce];break}},table:[{3:1,4:[1,2]},{1:[3]},i(s,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:17,12:u,13:d,14:p,15:v,16:b,17:y,18:T,19:_,20:A,21:P,22:R,23:F,24:j,25:K,26:ee,27:ie,28:oe,30:pe,32:be,33:ae,34:23,35:ne,37:se},i(s,[2,7],{1:[2,1]}),i(s,[2,3]),{9:33,11:17,12:u,13:d,14:p,15:v,16:b,17:y,18:T,19:_,20:A,21:P,22:R,23:F,24:j,25:K,26:ee,27:ie,28:oe,30:pe,32:be,33:ae,34:23,35:ne,37:se},i(s,[2,5]),i(s,[2,6]),i(s,[2,15]),i(s,[2,16]),i(s,[2,17]),i(s,[2,18]),i(s,[2,19]),i(s,[2,20]),i(s,[2,21]),i(s,[2,22]),i(s,[2,23]),i(s,[2,24]),{29:[1,34]},{31:[1,35]},i(s,[2,27]),i(s,[2,28]),i(s,[2,29]),{36:[1,36]},i(s,[2,8]),i(s,[2,9]),i(s,[2,10]),i(s,[2,11]),i(s,[2,12]),i(s,[2,13]),i(s,[2,14]),{38:[1,37],40:[1,38]},i(s,[2,4]),i(s,[2,25]),i(s,[2,26]),i(s,[2,30]),i(s,[2,31],{39:[1,39],40:[1,40]}),i(s,[2,37],{38:[1,41]}),i(s,[2,32],{40:[1,42]}),i(s,[2,33]),i(s,[2,35],{39:[1,43]}),i(s,[2,34]),i(s,[2,36])],defaultActions:{},parseError:function(xe,U){if(U.recoverable)this.trace(xe);else{var Fe=new Error(xe);throw Fe.hash=U,Fe}},parse:function(xe){var U=this,Fe=[0],Pe=[],je=[null],Ie=[],Se=this.table,Ce="",ke=0,Ke=0,Ft=2,Ne=1,gn=Ie.slice.call(arguments,1),_t=Object.create(this.lexer),Et={yy:{}};for(var Gt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Gt)&&(Et.yy[Gt]=this.yy[Gt]);_t.setInput(xe,Et.yy),Et.yy.lexer=_t,Et.yy.parser=this,typeof _t.yylloc>"u"&&(_t.yylloc={});var ln=_t.yylloc;Ie.push(ln);var xt=_t.options&&_t.options.ranges;typeof Et.yy.parseError=="function"?this.parseError=Et.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Pt(){var zs;return zs=Pe.pop()||_t.lex()||Ne,typeof zs!="number"&&(zs instanceof Array&&(Pe=zs,zs=Pe.pop()),zs=U.symbols_[zs]||zs),zs}for(var Qe,Dt,kt,On,ht={},zr,yt,ji,xi;;){if(Dt=Fe[Fe.length-1],this.defaultActions[Dt]?kt=this.defaultActions[Dt]:((Qe===null||typeof Qe>"u")&&(Qe=Pt()),kt=Se[Dt]&&Se[Dt][Qe]),typeof kt>"u"||!kt.length||!kt[0]){var Ma="";xi=[];for(zr in Se[Dt])this.terminals_[zr]&&zr>Ft&&xi.push("'"+this.terminals_[zr]+"'");_t.showPosition?Ma="Parse error on line "+(ke+1)+`: -`+_t.showPosition()+` -Expecting `+xi.join(", ")+", got '"+(this.terminals_[Qe]||Qe)+"'":Ma="Parse error on line "+(ke+1)+": Unexpected "+(Qe==Ne?"end of input":"'"+(this.terminals_[Qe]||Qe)+"'"),this.parseError(Ma,{text:_t.match,token:this.terminals_[Qe]||Qe,line:_t.yylineno,loc:ln,expected:xi})}if(kt[0]instanceof Array&&kt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Dt+", token: "+Qe);switch(kt[0]){case 1:Fe.push(Qe),je.push(_t.yytext),Ie.push(_t.yylloc),Fe.push(kt[1]),Qe=null,Ke=_t.yyleng,Ce=_t.yytext,ke=_t.yylineno,ln=_t.yylloc;break;case 2:if(yt=this.productions_[kt[1]][1],ht.$=je[je.length-yt],ht._$={first_line:Ie[Ie.length-(yt||1)].first_line,last_line:Ie[Ie.length-1].last_line,first_column:Ie[Ie.length-(yt||1)].first_column,last_column:Ie[Ie.length-1].last_column},xt&&(ht._$.range=[Ie[Ie.length-(yt||1)].range[0],Ie[Ie.length-1].range[1]]),On=this.performAction.apply(ht,[Ce,Ke,ke,Et.yy,kt[1],je,Ie].concat(gn)),typeof On<"u")return On;yt&&(Fe=Fe.slice(0,-1*yt*2),je=je.slice(0,-1*yt),Ie=Ie.slice(0,-1*yt)),Fe.push(this.productions_[kt[1]][0]),je.push(ht.$),Ie.push(ht._$),ji=Se[Fe[Fe.length-2]][Fe[Fe.length-1]],Fe.push(ji);break;case 3:return!0}}return!0}},X=function(){var W={EOF:1,parseError:function(U,Fe){if(this.yy.parser)this.yy.parser.parseError(U,Fe);else throw new Error(U)},setInput:function(xe,U){return this.yy=U||this.yy||{},this._input=xe,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var xe=this._input[0];this.yytext+=xe,this.yyleng++,this.offset++,this.match+=xe,this.matched+=xe;var U=xe.match(/(?:\r\n?|\n).*/g);return U?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),xe},unput:function(xe){var U=xe.length,Fe=xe.split(/(?:\r\n?|\n)/g);this._input=xe+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-U),this.offset-=U;var Pe=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Fe.length-1&&(this.yylineno-=Fe.length-1);var je=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Fe?(Fe.length===Pe.length?this.yylloc.first_column:0)+Pe[Pe.length-Fe.length].length-Fe[0].length:this.yylloc.first_column-U},this.options.ranges&&(this.yylloc.range=[je[0],je[0]+this.yyleng-U]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(xe){this.unput(this.match.slice(xe))},pastInput:function(){var xe=this.matched.substr(0,this.matched.length-this.match.length);return(xe.length>20?"...":"")+xe.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var xe=this.match;return xe.length<20&&(xe+=this._input.substr(0,20-xe.length)),(xe.substr(0,20)+(xe.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var xe=this.pastInput(),U=new Array(xe.length+1).join("-");return xe+this.upcomingInput()+` -`+U+"^"},test_match:function(xe,U){var Fe,Pe,je;if(this.options.backtrack_lexer&&(je={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(je.yylloc.range=this.yylloc.range.slice(0))),Pe=xe[0].match(/(?:\r\n?|\n).*/g),Pe&&(this.yylineno+=Pe.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Pe?Pe[Pe.length-1].length-Pe[Pe.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+xe[0].length},this.yytext+=xe[0],this.match+=xe[0],this.matches=xe,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(xe[0].length),this.matched+=xe[0],Fe=this.performAction.call(this,this.yy,this,U,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Fe)return Fe;if(this._backtrack){for(var Ie in je)this[Ie]=je[Ie];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var xe,U,Fe,Pe;this._more||(this.yytext="",this.match="");for(var je=this._currentRules(),Ie=0;IeU[0].length)){if(U=Fe,Pe=Ie,this.options.backtrack_lexer){if(xe=this.test_match(Fe,je[Ie]),xe!==!1)return xe;if(this._backtrack){U=!1;continue}else return!1}else if(!this.options.flex)break}return U?(xe=this.test_match(U,je[Pe]),xe!==!1?xe:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var U=this.next();return U||this.lex()},begin:function(U){this.conditionStack.push(U)},popState:function(){var U=this.conditionStack.length-1;return U>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(U){return U=this.conditionStack.length-1-Math.abs(U||0),U>=0?this.conditionStack[U]:"INITIAL"},pushState:function(U){this.begin(U)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(U,Fe,Pe,je){switch(Pe){case 0:return this.begin("open_directive"),"open_directive";case 1:return this.begin("acc_title"),28;case 2:return this.popState(),"acc_title_value";case 3:return this.begin("acc_descr"),30;case 4:return this.popState(),"acc_descr_value";case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:break;case 9:break;case 10:break;case 11:return 10;case 12:break;case 13:break;case 14:this.begin("href");break;case 15:this.popState();break;case 16:return 40;case 17:this.begin("callbackname");break;case 18:this.popState();break;case 19:this.popState(),this.begin("callbackargs");break;case 20:return 38;case 21:this.popState();break;case 22:return 39;case 23:this.begin("click");break;case 24:this.popState();break;case 25:return 37;case 26:return 4;case 27:return 19;case 28:return 20;case 29:return 21;case 30:return 22;case 31:return 23;case 32:return 25;case 33:return 24;case 34:return 26;case 35:return 12;case 36:return 13;case 37:return 14;case 38:return 15;case 39:return 16;case 40:return 17;case 41:return 18;case 42:return"date";case 43:return 27;case 44:return"accDescription";case 45:return 33;case 46:return 35;case 47:return 36;case 48:return":";case 49:return 6;case 50:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:tickInterval\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:weekday\s+monday\b)/i,/^(?:weekday\s+tuesday\b)/i,/^(?:weekday\s+wednesday\b)/i,/^(?:weekday\s+thursday\b)/i,/^(?:weekday\s+friday\b)/i,/^(?:weekday\s+saturday\b)/i,/^(?:weekday\s+sunday\b)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^\n]+)/i,/^(?:[^:\n]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},callbackargs:{rules:[21,22],inclusive:!1},callbackname:{rules:[18,19,20],inclusive:!1},href:{rules:[15,16],inclusive:!1},click:{rules:[24,25],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,17,23,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50],inclusive:!0}}};return W}();de.lexer=X;function ge(){this.yy={}}return ge.prototype=de,de.Parser=ge,new ge}();Yme.parser=Yme;const _tn=Yme;var XUe={exports:{}};(function(i,s){(function(u,d){i.exports=d()})(Ag,function(){var u="day";return function(d,p,v){var b=function(_){return _.add(4-_.isoWeekday(),u)},y=p.prototype;y.isoWeekYear=function(){return b(this).year()},y.isoWeek=function(_){if(!this.$utils().u(_))return this.add(7*(_-this.isoWeek()),u);var A,P,R,F,j=b(this),K=(A=this.isoWeekYear(),P=this.$u,R=(P?v.utc:v)().year(A).startOf("year"),F=4-R.isoWeekday(),R.isoWeekday()>4&&(F+=7),R.add(F,u));return j.diff(K,"week")+1},y.isoWeekday=function(_){return this.$utils().u(_)?this.day()||7:this.day(this.day()%7?_:_-7)};var T=y.startOf;y.startOf=function(_,A){var P=this.$utils(),R=!!P.u(A)||A;return P.p(_)==="isoweek"?R?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):T.bind(this)(_,A)}}})})(XUe);var Atn=XUe.exports;const Ltn=hC(Atn);var QUe={exports:{}};(function(i,s){(function(u,d){i.exports=d()})(Ag,function(){var u={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},d=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,p=/\d\d/,v=/\d\d?/,b=/\d*[^-_:/,()\s\d]+/,y={},T=function(K){return(K=+K)+(K>68?1900:2e3)},_=function(K){return function(ee){this[K]=+ee}},A=[/[+-]\d\d:?(\d\d)?|Z/,function(K){(this.zone||(this.zone={})).offset=function(ee){if(!ee||ee==="Z")return 0;var ie=ee.match(/([+-]|\d\d)/g),oe=60*ie[1]+(+ie[2]||0);return oe===0?0:ie[0]==="+"?-oe:oe}(K)}],P=function(K){var ee=y[K];return ee&&(ee.indexOf?ee:ee.s.concat(ee.f))},R=function(K,ee){var ie,oe=y.meridiem;if(oe){for(var pe=1;pe<=24;pe+=1)if(K.indexOf(oe(pe,0,ee))>-1){ie=pe>12;break}}else ie=K===(ee?"pm":"PM");return ie},F={A:[b,function(K){this.afternoon=R(K,!1)}],a:[b,function(K){this.afternoon=R(K,!0)}],S:[/\d/,function(K){this.milliseconds=100*+K}],SS:[p,function(K){this.milliseconds=10*+K}],SSS:[/\d{3}/,function(K){this.milliseconds=+K}],s:[v,_("seconds")],ss:[v,_("seconds")],m:[v,_("minutes")],mm:[v,_("minutes")],H:[v,_("hours")],h:[v,_("hours")],HH:[v,_("hours")],hh:[v,_("hours")],D:[v,_("day")],DD:[p,_("day")],Do:[b,function(K){var ee=y.ordinal,ie=K.match(/\d+/);if(this.day=ie[0],ee)for(var oe=1;oe<=31;oe+=1)ee(oe).replace(/\[|\]/g,"")===K&&(this.day=oe)}],M:[v,_("month")],MM:[p,_("month")],MMM:[b,function(K){var ee=P("months"),ie=(P("monthsShort")||ee.map(function(oe){return oe.slice(0,3)})).indexOf(K)+1;if(ie<1)throw new Error;this.month=ie%12||ie}],MMMM:[b,function(K){var ee=P("months").indexOf(K)+1;if(ee<1)throw new Error;this.month=ee%12||ee}],Y:[/[+-]?\d+/,_("year")],YY:[p,function(K){this.year=T(K)}],YYYY:[/\d{4}/,_("year")],Z:A,ZZ:A};function j(K){var ee,ie;ee=K,ie=y&&y.formats;for(var oe=(K=ee.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(X,ge,W){var xe=W&&W.toUpperCase();return ge||ie[W]||u[W]||ie[xe].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(U,Fe,Pe){return Fe||Pe.slice(1)})})).match(d),pe=oe.length,be=0;be-1)return new Date((Ie==="X"?1e3:1)*je);var Ce=j(Ie)(je),ke=Ce.year,Ke=Ce.month,Ft=Ce.day,Ne=Ce.hours,gn=Ce.minutes,_t=Ce.seconds,Et=Ce.milliseconds,Gt=Ce.zone,ln=new Date,xt=Ft||(ke||Ke?1:ln.getDate()),Pt=ke||ln.getFullYear(),Qe=0;ke&&!Ke||(Qe=Ke>0?Ke-1:ln.getMonth());var Dt=Ne||0,kt=gn||0,On=_t||0,ht=Et||0;return Gt?new Date(Date.UTC(Pt,Qe,xt,Dt,kt,On,ht+60*Gt.offset*1e3)):Se?new Date(Date.UTC(Pt,Qe,xt,Dt,kt,On,ht)):new Date(Pt,Qe,xt,Dt,kt,On,ht)}catch{return new Date("")}}(ae,de,ne),this.init(),xe&&xe!==!0&&(this.$L=this.locale(xe).$L),W&&ae!=this.format(de)&&(this.$d=new Date("")),y={}}else if(de instanceof Array)for(var U=de.length,Fe=1;Fe<=U;Fe+=1){se[1]=de[Fe-1];var Pe=ie.apply(this,se);if(Pe.isValid()){this.$d=Pe.$d,this.$L=Pe.$L,this.init();break}Fe===U&&(this.$d=new Date(""))}else pe.call(this,be)}}})})(QUe);var Mtn=QUe.exports;const Dtn=hC(Mtn);var JUe={exports:{}};(function(i,s){(function(u,d){i.exports=d()})(Ag,function(){return function(u,d){var p=d.prototype,v=p.format;p.format=function(b){var y=this,T=this.$locale();if(!this.isValid())return v.bind(this)(b);var _=this.$utils(),A=(b||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(P){switch(P){case"Q":return Math.ceil((y.$M+1)/3);case"Do":return T.ordinal(y.$D);case"gggg":return y.weekYear();case"GGGG":return y.isoWeekYear();case"wo":return T.ordinal(y.week(),"W");case"w":case"ww":return _.s(y.week(),P==="w"?1:2,"0");case"W":case"WW":return _.s(y.isoWeek(),P==="W"?1:2,"0");case"k":case"kk":return _.s(String(y.$H===0?24:y.$H),P==="k"?1:2,"0");case"X":return Math.floor(y.$d.getTime()/1e3);case"x":return y.$d.getTime();case"z":return"["+y.offsetName()+"]";case"zzz":return"["+y.offsetName("long")+"]";default:return P}});return v.bind(this)(A)}}})})(JUe);var Itn=JUe.exports;const Otn=hC(Itn);Lg.extend(Ltn),Lg.extend(Dtn),Lg.extend(Otn);let i5="",Xme="",Qme,Jme="",FR=[],RR=[],Zme={},eve=[],uJ=[],GD="",tve="";const ZUe=["active","done","crit","milestone"];let nve=[],jR=!1,rve=!1,ive="sunday",sve=0;const Ntn=function(){eve=[],uJ=[],GD="",nve=[],lJ=0,ove=void 0,hJ=void 0,m1=[],i5="",Xme="",tve="",Qme=void 0,Jme="",FR=[],RR=[],jR=!1,rve=!1,sve=0,Zme={},Pg(),ive="sunday"},Ptn=function(i){Xme=i},Btn=function(){return Xme},Ftn=function(i){Qme=i},Rtn=function(){return Qme},jtn=function(i){Jme=i},$tn=function(){return Jme},ztn=function(i){i5=i},qtn=function(){jR=!0},Htn=function(){return jR},Vtn=function(){rve=!0},Utn=function(){return rve},Gtn=function(i){tve=i},Ktn=function(){return tve},Wtn=function(){return i5},Ytn=function(i){FR=i.toLowerCase().split(/[\s,]+/)},Xtn=function(){return FR},Qtn=function(i){RR=i.toLowerCase().split(/[\s,]+/)},Jtn=function(){return RR},Ztn=function(){return Zme},enn=function(i){GD=i,eve.push(i)},tnn=function(){return eve},nnn=function(){let i=sGe();const s=10;let u=0;for(;!i&&u=6&&u.includes("weekends")||u.includes(i.format("dddd").toLowerCase())?!0:u.includes(i.format(s.trim()))},rnn=function(i){ive=i},inn=function(){return ive},tGe=function(i,s,u,d){if(!u.length||i.manualEndTime)return;let p;i.startTime instanceof Date?p=Lg(i.startTime):p=Lg(i.startTime,s,!0),p=p.add(1,"d");let v;i.endTime instanceof Date?v=Lg(i.endTime):v=Lg(i.endTime,s,!0);const[b,y]=snn(p,v,s,u,d);i.endTime=b.toDate(),i.renderEndTime=y},snn=function(i,s,u,d,p){let v=!1,b=null;for(;i<=s;)v||(b=s.toDate()),v=eGe(i,u,d,p),v&&(s=s.add(1,"d")),i=i.add(1,"d");return[s,b]},ave=function(i,s,u){u=u.trim();const p=/^after\s+(?[\d\w- ]+)/.exec(u);if(p!==null){let b=null;for(const T of p.groups.ids.split(" ")){let _=QC(T);_!==void 0&&(!b||_.endTime>b.endTime)&&(b=_)}if(b)return b.endTime;const y=new Date;return y.setHours(0,0,0,0),y}let v=Lg(u,s.trim(),!0);if(v.isValid())return v.toDate();{Xe.debug("Invalid date:"+u),Xe.debug("With date format:"+s.trim());const b=new Date(u);if(b===void 0||isNaN(b.getTime())||b.getFullYear()<-1e4||b.getFullYear()>1e4)throw new Error("Invalid date:"+u);return b}},nGe=function(i){const s=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(i.trim());return s!==null?[Number.parseFloat(s[1]),s[2]]:[NaN,"ms"]},rGe=function(i,s,u,d=!1){u=u.trim();const v=/^until\s+(?[\d\w- ]+)/.exec(u);if(v!==null){let A=null;for(const R of v.groups.ids.split(" ")){let F=QC(R);F!==void 0&&(!A||F.startTime{window.open(u,"_self")}),Zme[d]=u)}),aGe(i,"clickable")},aGe=function(i,s){i.split(",").forEach(function(u){let d=QC(u);d!==void 0&&d.classes.push(s)})},hnn=function(i,s,u){if(qt().securityLevel!=="loose"||s===void 0)return;let d=[];if(typeof u=="string"){d=u.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let v=0;v{Ao.runFunc(s,...d)})},oGe=function(i,s){nve.push(function(){const u=document.querySelector(`[id="${i}"]`);u!==null&&u.addEventListener("click",function(){s()})},function(){const u=document.querySelector(`[id="${i}-text"]`);u!==null&&u.addEventListener("click",function(){s()})})},fnn={getConfig:()=>qt().gantt,clear:Ntn,setDateFormat:ztn,getDateFormat:Wtn,enableInclusiveEndDates:qtn,endDatesAreInclusive:Htn,enableTopAxis:Vtn,topAxisEnabled:Utn,setAxisFormat:Ptn,getAxisFormat:Btn,setTickInterval:Ftn,getTickInterval:Rtn,setTodayMarker:jtn,getTodayMarker:$tn,setAccTitle:Bg,getAccTitle:Cp,setDiagramTitle:cm,getDiagramTitle:Ap,setDisplayMode:Gtn,getDisplayMode:Ktn,setAccDescription:Sp,getAccDescription:_p,addSection:enn,getSections:tnn,getTasks:nnn,addTask:cnn,findTaskById:QC,addTaskOrg:unn,setIncludes:Ytn,getIncludes:Xtn,setExcludes:Qtn,getExcludes:Jtn,setClickEvent:function(i,s,u){i.split(",").forEach(function(d){hnn(d,s,u)}),aGe(i,"clickable")},setLink:lnn,getLinks:Ztn,bindFunctions:function(i){nve.forEach(function(s){s(i)})},parseDuration:nGe,isInvalidDate:eGe,setWeekday:rnn,getWeekday:inn};function cGe(i,s,u){let d=!0;for(;d;)d=!1,u.forEach(function(p){const v="^\\s*"+p+"\\s*$",b=new RegExp(v);i[0].match(b)&&(s[p]=!0,i.shift(1),d=!0)})}const dnn=function(){Xe.debug("Something is calling, setConf, remove the call")},uGe={monday:DF,tuesday:xFe,wednesday:kFe,thursday:yC,friday:EFe,saturday:TFe,sunday:MF},gnn=(i,s)=>{let u=[...i].map(()=>-1/0),d=[...i].sort((v,b)=>v.startTime-b.startTime||v.order-b.order),p=0;for(const v of d)for(let b=0;b=u[b]){u[b]=v.endTime,v.order=b+s,b>p&&(p=b);break}return p};let V7;const pnn=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:_tn,db:fnn,renderer:{setConf:dnn,draw:function(i,s,u,d){const p=qt().gantt,v=qt().securityLevel;let b;v==="sandbox"&&(b=Ir("#i"+s));const y=Ir(v==="sandbox"?b.nodes()[0].contentDocument.body:"body"),T=v==="sandbox"?b.nodes()[0].contentDocument:document,_=T.getElementById(s);V7=_.parentElement.offsetWidth,V7===void 0&&(V7=1200),p.useWidth!==void 0&&(V7=p.useWidth);const A=d.db.getTasks();let P=[];for(const de of A)P.push(de.type);P=se(P);const R={};let F=2*p.topPadding;if(d.db.getDisplayMode()==="compact"||p.displayMode==="compact"){const de={};for(const ge of A)de[ge.section]===void 0?de[ge.section]=[ge]:de[ge.section].push(ge);let X=0;for(const ge of Object.keys(de)){const W=gnn(de[ge],X)+1;X+=W,F+=W*(p.barHeight+p.barGap),R[ge]=W}}else{F+=A.length*(p.barHeight+p.barGap);for(const de of P)R[de]=A.filter(X=>X.type===de).length}_.setAttribute("viewBox","0 0 "+V7+" "+F);const j=y.select(`[id="${s}"]`),K=fNt().domain([WAt(A,function(de){return de.startTime}),KAt(A,function(de){return de.endTime})]).rangeRound([0,V7-p.leftPadding-p.rightPadding]);function ee(de,X){const ge=de.startTime,W=X.startTime;let xe=0;return ge>W?xe=1:geke.order))].map(ke=>de.find(Ke=>Ke.order===ke));j.append("g").selectAll("rect").data(je).enter().append("rect").attr("x",0).attr("y",function(ke,Ke){return Ke=ke.order,Ke*X+ge-2}).attr("width",function(){return Fe-p.rightPadding/2}).attr("height",X).attr("class",function(ke){for(const[Ke,Ft]of P.entries())if(ke.type===Ft)return"section section"+Ke%p.numberSectionStyles;return"section section0"});const Ie=j.append("g").selectAll("rect").data(de).enter(),Se=d.db.getLinks();if(Ie.append("rect").attr("id",function(ke){return ke.id}).attr("rx",3).attr("ry",3).attr("x",function(ke){return ke.milestone?K(ke.startTime)+W+.5*(K(ke.endTime)-K(ke.startTime))-.5*xe:K(ke.startTime)+W}).attr("y",function(ke,Ke){return Ke=ke.order,Ke*X+ge}).attr("width",function(ke){return ke.milestone?xe:K(ke.renderEndTime||ke.endTime)-K(ke.startTime)}).attr("height",xe).attr("transform-origin",function(ke,Ke){return Ke=ke.order,(K(ke.startTime)+W+.5*(K(ke.endTime)-K(ke.startTime))).toString()+"px "+(Ke*X+ge+.5*xe).toString()+"px"}).attr("class",function(ke){const Ke="task";let Ft="";ke.classes.length>0&&(Ft=ke.classes.join(" "));let Ne=0;for(const[_t,Et]of P.entries())ke.type===Et&&(Ne=_t%p.numberSectionStyles);let gn="";return ke.active?ke.crit?gn+=" activeCrit":gn=" active":ke.done?ke.crit?gn=" doneCrit":gn=" done":ke.crit&&(gn+=" crit"),gn.length===0&&(gn=" task"),ke.milestone&&(gn=" milestone "+gn),gn+=Ne,gn+=" "+Ft,Ke+gn}),Ie.append("text").attr("id",function(ke){return ke.id+"-text"}).text(function(ke){return ke.task}).attr("font-size",p.fontSize).attr("x",function(ke){let Ke=K(ke.startTime),Ft=K(ke.renderEndTime||ke.endTime);ke.milestone&&(Ke+=.5*(K(ke.endTime)-K(ke.startTime))-.5*xe),ke.milestone&&(Ft=Ke+xe);const Ne=this.getBBox().width;return Ne>Ft-Ke?Ft+Ne+1.5*p.leftPadding>Fe?Ke+W-5:Ft+W+5:(Ft-Ke)/2+Ke+W}).attr("y",function(ke,Ke){return Ke=ke.order,Ke*X+p.barHeight/2+(p.fontSize/2-2)+ge}).attr("text-height",xe).attr("class",function(ke){const Ke=K(ke.startTime);let Ft=K(ke.endTime);ke.milestone&&(Ft=Ke+xe);const Ne=this.getBBox().width;let gn="";ke.classes.length>0&&(gn=ke.classes.join(" "));let _t=0;for(const[Gt,ln]of P.entries())ke.type===ln&&(_t=Gt%p.numberSectionStyles);let Et="";return ke.active&&(ke.crit?Et="activeCritText"+_t:Et="activeText"+_t),ke.done?ke.crit?Et=Et+" doneCritText"+_t:Et=Et+" doneText"+_t:ke.crit&&(Et=Et+" critText"+_t),ke.milestone&&(Et+=" milestoneText"),Ne>Ft-Ke?Ft+Ne+1.5*p.leftPadding>Fe?gn+" taskTextOutsideLeft taskTextOutside"+_t+" "+Et:gn+" taskTextOutsideRight taskTextOutside"+_t+" "+Et+" width-"+Ne:gn+" taskText taskText"+_t+" "+Et+" width-"+Ne}),qt().securityLevel==="sandbox"){let ke;ke=Ir("#i"+s);const Ke=ke.nodes()[0].contentDocument;Ie.filter(function(Ft){return Se[Ft.id]!==void 0}).each(function(Ft){var Ne=Ke.querySelector("#"+Ft.id),gn=Ke.querySelector("#"+Ft.id+"-text");const _t=Ne.parentNode;var Et=Ke.createElement("a");Et.setAttribute("xlink:href",Se[Ft.id]),Et.setAttribute("target","_top"),_t.appendChild(Et),Et.appendChild(Ne),Et.appendChild(gn)})}}function pe(de,X,ge,W,xe,U,Fe,Pe){if(Fe.length===0&&Pe.length===0)return;let je,Ie;for(const{startTime:Ne,endTime:gn}of U)(je===void 0||NeIe)&&(Ie=gn);if(!je||!Ie)return;if(Lg(Ie).diff(Lg(je),"year")>5){Xe.warn("The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days.");return}const Se=d.db.getDateFormat(),Ce=[];let ke=null,Ke=Lg(je);for(;Ke.valueOf()<=Ie;)d.db.isInvalidDate(Ke,Se,Fe,Pe)?ke?ke.end=Ke:ke={start:Ke,end:Ke}:ke&&(Ce.push(ke),ke=null),Ke=Ke.add(1,"d");j.append("g").selectAll("rect").data(Ce).enter().append("rect").attr("id",function(Ne){return"exclude-"+Ne.start.format("YYYY-MM-DD")}).attr("x",function(Ne){return K(Ne.start)+ge}).attr("y",p.gridLineStartPadding).attr("width",function(Ne){const gn=Ne.end.add(1,"day");return K(gn)-K(Ne.start)}).attr("height",xe-X-p.gridLineStartPadding).attr("transform-origin",function(Ne,gn){return(K(Ne.start)+ge+.5*(K(Ne.end)-K(Ne.start))).toString()+"px "+(gn*de+.5*xe).toString()+"px"}).attr("class","exclude-range")}function be(de,X,ge,W){let xe=rLt(K).tickSize(-W+X+p.gridLineStartPadding).tickFormat(sX(d.db.getAxisFormat()||p.axisFormat||"%Y-%m-%d"));const Fe=/^([1-9]\d*)(millisecond|second|minute|hour|day|week|month)$/.exec(d.db.getTickInterval()||p.tickInterval);if(Fe!==null){const Pe=Fe[1],je=Fe[2],Ie=d.db.getWeekday()||p.weekday;switch(je){case"millisecond":xe.ticks(aD.every(Pe));break;case"second":xe.ticks(b9.every(Pe));break;case"minute":xe.ticks(AF.every(Pe));break;case"hour":xe.ticks(LF.every(Pe));break;case"day":xe.ticks(vC.every(Pe));break;case"week":xe.ticks(uGe[Ie].every(Pe));break;case"month":xe.ticks(IF.every(Pe));break}}if(j.append("g").attr("class","grid").attr("transform","translate("+de+", "+(W-50)+")").call(xe).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),d.db.topAxisEnabled()||p.topAxis){let Pe=nLt(K).tickSize(-W+X+p.gridLineStartPadding).tickFormat(sX(d.db.getAxisFormat()||p.axisFormat||"%Y-%m-%d"));if(Fe!==null){const je=Fe[1],Ie=Fe[2],Se=d.db.getWeekday()||p.weekday;switch(Ie){case"millisecond":Pe.ticks(aD.every(je));break;case"second":Pe.ticks(b9.every(je));break;case"minute":Pe.ticks(AF.every(je));break;case"hour":Pe.ticks(LF.every(je));break;case"day":Pe.ticks(vC.every(je));break;case"week":Pe.ticks(uGe[Se].every(je));break;case"month":Pe.ticks(IF.every(je));break}}j.append("g").attr("class","grid").attr("transform","translate("+de+", "+X+")").call(Pe).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}function ae(de,X){let ge=0;const W=Object.keys(R).map(xe=>[xe,R[xe]]);j.append("g").selectAll("text").data(W).enter().append(function(xe){const U=xe[0].split(ci.lineBreakRegex),Fe=-(U.length-1)/2,Pe=T.createElementNS("http://www.w3.org/2000/svg","text");Pe.setAttribute("dy",Fe+"em");for(const[je,Ie]of U.entries()){const Se=T.createElementNS("http://www.w3.org/2000/svg","tspan");Se.setAttribute("alignment-baseline","central"),Se.setAttribute("x","10"),je>0&&Se.setAttribute("dy","1em"),Se.textContent=Ie,Pe.appendChild(Se)}return Pe}).attr("x",10).attr("y",function(xe,U){if(U>0)for(let Fe=0;Fe` + fill: ${t.textColor}; + } +`,"getStyles"),Nue=qGe});var Mue={};vr(Mue,{diagram:()=>XGe});var XGe,Iue=M(()=>{"use strict";Sue();OI();Due();Rue();XGe={parser:Eue,db:pE,renderer:Lue,styles:Nue}});var PI,Bue,Fue=M(()=>{"use strict";PI=function(){var t=o(function(R,C,O,N){for(O=O||{},N=R.length;N--;O[R[N]]=C);return O},"o"),e=[6,8,10,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,33,35,36,38,40],r=[1,26],n=[1,27],i=[1,28],a=[1,29],s=[1,30],l=[1,31],u=[1,32],h=[1,33],f=[1,34],d=[1,9],p=[1,10],m=[1,11],g=[1,12],y=[1,13],v=[1,14],x=[1,15],b=[1,16],w=[1,19],_=[1,20],T=[1,21],E=[1,22],L=[1,23],S=[1,25],A=[1,35],I={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,weekday:11,weekday_monday:12,weekday_tuesday:13,weekday_wednesday:14,weekday_thursday:15,weekday_friday:16,weekday_saturday:17,weekday_sunday:18,weekend:19,weekend_friday:20,weekend_saturday:21,dateFormat:22,inclusiveEndDates:23,topAxis:24,axisFormat:25,tickInterval:26,excludes:27,includes:28,todayMarker:29,title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,section:36,clickStatement:37,taskTxt:38,taskData:39,click:40,callbackname:41,callbackargs:42,href:43,clickStatementDebug:44,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",12:"weekday_monday",13:"weekday_tuesday",14:"weekday_wednesday",15:"weekday_thursday",16:"weekday_friday",17:"weekday_saturday",18:"weekday_sunday",20:"weekend_friday",21:"weekend_saturday",22:"dateFormat",23:"inclusiveEndDates",24:"topAxis",25:"axisFormat",26:"tickInterval",27:"excludes",28:"includes",29:"todayMarker",30:"title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"section",38:"taskTxt",39:"taskData",40:"click",41:"callbackname",42:"callbackargs",43:"href"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[19,1],[19,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,2],[37,2],[37,3],[37,3],[37,4],[37,3],[37,4],[37,2],[44,2],[44,3],[44,3],[44,4],[44,3],[44,4],[44,2]],performAction:o(function(C,O,N,P,F,B,G){var z=B.length-1;switch(F){case 1:return B[z-1];case 2:this.$=[];break;case 3:B[z-1].push(B[z]),this.$=B[z-1];break;case 4:case 5:this.$=B[z];break;case 6:case 7:this.$=[];break;case 8:P.setWeekday("monday");break;case 9:P.setWeekday("tuesday");break;case 10:P.setWeekday("wednesday");break;case 11:P.setWeekday("thursday");break;case 12:P.setWeekday("friday");break;case 13:P.setWeekday("saturday");break;case 14:P.setWeekday("sunday");break;case 15:P.setWeekend("friday");break;case 16:P.setWeekend("saturday");break;case 17:P.setDateFormat(B[z].substr(11)),this.$=B[z].substr(11);break;case 18:P.enableInclusiveEndDates(),this.$=B[z].substr(18);break;case 19:P.TopAxis(),this.$=B[z].substr(8);break;case 20:P.setAxisFormat(B[z].substr(11)),this.$=B[z].substr(11);break;case 21:P.setTickInterval(B[z].substr(13)),this.$=B[z].substr(13);break;case 22:P.setExcludes(B[z].substr(9)),this.$=B[z].substr(9);break;case 23:P.setIncludes(B[z].substr(9)),this.$=B[z].substr(9);break;case 24:P.setTodayMarker(B[z].substr(12)),this.$=B[z].substr(12);break;case 27:P.setDiagramTitle(B[z].substr(6)),this.$=B[z].substr(6);break;case 28:this.$=B[z].trim(),P.setAccTitle(this.$);break;case 29:case 30:this.$=B[z].trim(),P.setAccDescription(this.$);break;case 31:P.addSection(B[z].substr(8)),this.$=B[z].substr(8);break;case 33:P.addTask(B[z-1],B[z]),this.$="task";break;case 34:this.$=B[z-1],P.setClickEvent(B[z-1],B[z],null);break;case 35:this.$=B[z-2],P.setClickEvent(B[z-2],B[z-1],B[z]);break;case 36:this.$=B[z-2],P.setClickEvent(B[z-2],B[z-1],null),P.setLink(B[z-2],B[z]);break;case 37:this.$=B[z-3],P.setClickEvent(B[z-3],B[z-2],B[z-1]),P.setLink(B[z-3],B[z]);break;case 38:this.$=B[z-2],P.setClickEvent(B[z-2],B[z],null),P.setLink(B[z-2],B[z-1]);break;case 39:this.$=B[z-3],P.setClickEvent(B[z-3],B[z-1],B[z]),P.setLink(B[z-3],B[z-2]);break;case 40:this.$=B[z-1],P.setLink(B[z-1],B[z]);break;case 41:case 47:this.$=B[z-1]+" "+B[z];break;case 42:case 43:case 45:this.$=B[z-2]+" "+B[z-1]+" "+B[z];break;case 44:case 46:this.$=B[z-3]+" "+B[z-2]+" "+B[z-1]+" "+B[z];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:17,12:r,13:n,14:i,15:a,16:s,17:l,18:u,19:18,20:h,21:f,22:d,23:p,24:m,25:g,26:y,27:v,28:x,29:b,30:w,31:_,33:T,35:E,36:L,37:24,38:S,40:A},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:36,11:17,12:r,13:n,14:i,15:a,16:s,17:l,18:u,19:18,20:h,21:f,22:d,23:p,24:m,25:g,26:y,27:v,28:x,29:b,30:w,31:_,33:T,35:E,36:L,37:24,38:S,40:A},t(e,[2,5]),t(e,[2,6]),t(e,[2,17]),t(e,[2,18]),t(e,[2,19]),t(e,[2,20]),t(e,[2,21]),t(e,[2,22]),t(e,[2,23]),t(e,[2,24]),t(e,[2,25]),t(e,[2,26]),t(e,[2,27]),{32:[1,37]},{34:[1,38]},t(e,[2,30]),t(e,[2,31]),t(e,[2,32]),{39:[1,39]},t(e,[2,8]),t(e,[2,9]),t(e,[2,10]),t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),{41:[1,40],43:[1,41]},t(e,[2,4]),t(e,[2,28]),t(e,[2,29]),t(e,[2,33]),t(e,[2,34],{42:[1,42],43:[1,43]}),t(e,[2,40],{41:[1,44]}),t(e,[2,35],{43:[1,45]}),t(e,[2,36]),t(e,[2,38],{42:[1,46]}),t(e,[2,37]),t(e,[2,39])],defaultActions:{},parseError:o(function(C,O){if(O.recoverable)this.trace(C);else{var N=new Error(C);throw N.hash=O,N}},"parseError"),parse:o(function(C){var O=this,N=[0],P=[],F=[null],B=[],G=this.table,z="",W=0,Z=0,j=0,oe=2,K=1,ee=B.slice.call(arguments,1),J=Object.create(this.lexer),H={yy:{}};for(var q in this.yy)Object.prototype.hasOwnProperty.call(this.yy,q)&&(H.yy[q]=this.yy[q]);J.setInput(C,H.yy),H.yy.lexer=J,H.yy.parser=this,typeof J.yylloc>"u"&&(J.yylloc={});var Q=J.yylloc;B.push(Q);var ae=J.options&&J.options.ranges;typeof H.yy.parseError=="function"?this.parseError=H.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ue(he){N.length=N.length-2*he,F.length=F.length-he,B.length=B.length-he}o(ue,"popStack");function ce(){var he;return he=P.pop()||J.lex()||K,typeof he!="number"&&(he instanceof Array&&(P=he,he=P.pop()),he=O.symbols_[he]||he),he}o(ce,"lex");for(var te,Ne,se,ke,Re,Ce,Pe={},Ie,$e,ye,X;;){if(se=N[N.length-1],this.defaultActions[se]?ke=this.defaultActions[se]:((te===null||typeof te>"u")&&(te=ce()),ke=G[se]&&G[se][te]),typeof ke>"u"||!ke.length||!ke[0]){var fe="";X=[];for(Ie in G[se])this.terminals_[Ie]&&Ie>oe&&X.push("'"+this.terminals_[Ie]+"'");J.showPosition?fe="Parse error on line "+(W+1)+`: +`+J.showPosition()+` +Expecting `+X.join(", ")+", got '"+(this.terminals_[te]||te)+"'":fe="Parse error on line "+(W+1)+": Unexpected "+(te==K?"end of input":"'"+(this.terminals_[te]||te)+"'"),this.parseError(fe,{text:J.match,token:this.terminals_[te]||te,line:J.yylineno,loc:Q,expected:X})}if(ke[0]instanceof Array&&ke.length>1)throw new Error("Parse Error: multiple actions possible at state: "+se+", token: "+te);switch(ke[0]){case 1:N.push(te),F.push(J.yytext),B.push(J.yylloc),N.push(ke[1]),te=null,Ne?(te=Ne,Ne=null):(Z=J.yyleng,z=J.yytext,W=J.yylineno,Q=J.yylloc,j>0&&j--);break;case 2:if($e=this.productions_[ke[1]][1],Pe.$=F[F.length-$e],Pe._$={first_line:B[B.length-($e||1)].first_line,last_line:B[B.length-1].last_line,first_column:B[B.length-($e||1)].first_column,last_column:B[B.length-1].last_column},ae&&(Pe._$.range=[B[B.length-($e||1)].range[0],B[B.length-1].range[1]]),Ce=this.performAction.apply(Pe,[z,Z,W,H.yy,ke[1],F,B].concat(ee)),typeof Ce<"u")return Ce;$e&&(N=N.slice(0,-1*$e*2),F=F.slice(0,-1*$e),B=B.slice(0,-1*$e)),N.push(this.productions_[ke[1]][0]),F.push(Pe.$),B.push(Pe._$),ye=G[N[N.length-2]][N[N.length-1]],N.push(ye);break;case 3:return!0}}return!0},"parse")},D=function(){var R={EOF:1,parseError:o(function(O,N){if(this.yy.parser)this.yy.parser.parseError(O,N);else throw new Error(O)},"parseError"),setInput:o(function(C,O){return this.yy=O||this.yy||{},this._input=C,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var C=this._input[0];this.yytext+=C,this.yyleng++,this.offset++,this.match+=C,this.matched+=C;var O=C.match(/(?:\r\n?|\n).*/g);return O?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),C},"input"),unput:o(function(C){var O=C.length,N=C.split(/(?:\r\n?|\n)/g);this._input=C+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-O),this.offset-=O;var P=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),N.length-1&&(this.yylineno-=N.length-1);var F=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:N?(N.length===P.length?this.yylloc.first_column:0)+P[P.length-N.length].length-N[0].length:this.yylloc.first_column-O},this.options.ranges&&(this.yylloc.range=[F[0],F[0]+this.yyleng-O]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(C){this.unput(this.match.slice(C))},"less"),pastInput:o(function(){var C=this.matched.substr(0,this.matched.length-this.match.length);return(C.length>20?"...":"")+C.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var C=this.match;return C.length<20&&(C+=this._input.substr(0,20-C.length)),(C.substr(0,20)+(C.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var C=this.pastInput(),O=new Array(C.length+1).join("-");return C+this.upcomingInput()+` +`+O+"^"},"showPosition"),test_match:o(function(C,O){var N,P,F;if(this.options.backtrack_lexer&&(F={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(F.yylloc.range=this.yylloc.range.slice(0))),P=C[0].match(/(?:\r\n?|\n).*/g),P&&(this.yylineno+=P.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:P?P[P.length-1].length-P[P.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+C[0].length},this.yytext+=C[0],this.match+=C[0],this.matches=C,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(C[0].length),this.matched+=C[0],N=this.performAction.call(this,this.yy,this,O,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),N)return N;if(this._backtrack){for(var B in F)this[B]=F[B];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var C,O,N,P;this._more||(this.yytext="",this.match="");for(var F=this._currentRules(),B=0;BO[0].length)){if(O=N,P=B,this.options.backtrack_lexer){if(C=this.test_match(N,F[B]),C!==!1)return C;if(this._backtrack){O=!1;continue}else return!1}else if(!this.options.flex)break}return O?(C=this.test_match(O,F[P]),C!==!1?C:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var O=this.next();return O||this.lex()},"lex"),begin:o(function(O){this.conditionStack.push(O)},"begin"),popState:o(function(){var O=this.conditionStack.length-1;return O>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(O){return O=this.conditionStack.length-1-Math.abs(O||0),O>=0?this.conditionStack[O]:"INITIAL"},"topState"),pushState:o(function(O){this.begin(O)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(O,N,P,F){var B=F;switch(P){case 0:return this.begin("open_directive"),"open_directive";break;case 1:return this.begin("acc_title"),31;break;case 2:return this.popState(),"acc_title_value";break;case 3:return this.begin("acc_descr"),33;break;case 4:return this.popState(),"acc_descr_value";break;case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:break;case 9:break;case 10:break;case 11:return 10;case 12:break;case 13:break;case 14:this.begin("href");break;case 15:this.popState();break;case 16:return 43;case 17:this.begin("callbackname");break;case 18:this.popState();break;case 19:this.popState(),this.begin("callbackargs");break;case 20:return 41;case 21:this.popState();break;case 22:return 42;case 23:this.begin("click");break;case 24:this.popState();break;case 25:return 40;case 26:return 4;case 27:return 22;case 28:return 23;case 29:return 24;case 30:return 25;case 31:return 26;case 32:return 28;case 33:return 27;case 34:return 29;case 35:return 12;case 36:return 13;case 37:return 14;case 38:return 15;case 39:return 16;case 40:return 17;case 41:return 18;case 42:return 20;case 43:return 21;case 44:return"date";case 45:return 30;case 46:return"accDescription";case 47:return 36;case 48:return 38;case 49:return 39;case 50:return":";case 51:return 6;case 52:return"INVALID"}},"anonymous"),rules:[/^(?:%%\{)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:tickInterval\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:weekday\s+monday\b)/i,/^(?:weekday\s+tuesday\b)/i,/^(?:weekday\s+wednesday\b)/i,/^(?:weekday\s+thursday\b)/i,/^(?:weekday\s+friday\b)/i,/^(?:weekday\s+saturday\b)/i,/^(?:weekday\s+sunday\b)/i,/^(?:weekend\s+friday\b)/i,/^(?:weekend\s+saturday\b)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^\n]+)/i,/^(?:[^:\n]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},callbackargs:{rules:[21,22],inclusive:!1},callbackname:{rules:[18,19,20],inclusive:!1},href:{rules:[15,16],inclusive:!1},click:{rules:[24,25],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,17,23,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52],inclusive:!0}}};return R}();I.lexer=D;function k(){this.yy={}}return o(k,"Parser"),k.prototype=I,I.Parser=k,new k}();PI.parser=PI;Bue=PI});var zue=Ei((BI,FI)=>{"use strict";(function(t,e){typeof BI=="object"&&typeof FI<"u"?FI.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_isoWeek=e()})(BI,function(){"use strict";var t="day";return function(e,r,n){var i=o(function(l){return l.add(4-l.isoWeekday(),t)},"a"),a=r.prototype;a.isoWeekYear=function(){return i(this).year()},a.isoWeek=function(l){if(!this.$utils().u(l))return this.add(7*(l-this.isoWeek()),t);var u,h,f,d,p=i(this),m=(u=this.isoWeekYear(),h=this.$u,f=(h?n.utc:n)().year(u).startOf("year"),d=4-f.isoWeekday(),f.isoWeekday()>4&&(d+=7),f.add(d,t));return p.diff(m,"week")+1},a.isoWeekday=function(l){return this.$utils().u(l)?this.day()||7:this.day(this.day()%7?l:l-7)};var s=a.startOf;a.startOf=function(l,u){var h=this.$utils(),f=!!h.u(u)||u;return h.p(l)==="isoweek"?f?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):s.bind(this)(l,u)}}})});var Gue=Ei((zI,GI)=>{"use strict";(function(t,e){typeof zI=="object"&&typeof GI<"u"?GI.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_customParseFormat=e()})(zI,function(){"use strict";var t={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},e=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,r=/\d/,n=/\d\d/,i=/\d\d?/,a=/\d*[^-_:/,()\s\d]+/,s={},l=o(function(g){return(g=+g)+(g>68?1900:2e3)},"a"),u=o(function(g){return function(y){this[g]=+y}},"f"),h=[/[+-]\d\d:?(\d\d)?|Z/,function(g){(this.zone||(this.zone={})).offset=function(y){if(!y||y==="Z")return 0;var v=y.match(/([+-]|\d\d)/g),x=60*v[1]+(+v[2]||0);return x===0?0:v[0]==="+"?-x:x}(g)}],f=o(function(g){var y=s[g];return y&&(y.indexOf?y:y.s.concat(y.f))},"u"),d=o(function(g,y){var v,x=s.meridiem;if(x){for(var b=1;b<=24;b+=1)if(g.indexOf(x(b,0,y))>-1){v=b>12;break}}else v=g===(y?"pm":"PM");return v},"d"),p={A:[a,function(g){this.afternoon=d(g,!1)}],a:[a,function(g){this.afternoon=d(g,!0)}],Q:[r,function(g){this.month=3*(g-1)+1}],S:[r,function(g){this.milliseconds=100*+g}],SS:[n,function(g){this.milliseconds=10*+g}],SSS:[/\d{3}/,function(g){this.milliseconds=+g}],s:[i,u("seconds")],ss:[i,u("seconds")],m:[i,u("minutes")],mm:[i,u("minutes")],H:[i,u("hours")],h:[i,u("hours")],HH:[i,u("hours")],hh:[i,u("hours")],D:[i,u("day")],DD:[n,u("day")],Do:[a,function(g){var y=s.ordinal,v=g.match(/\d+/);if(this.day=v[0],y)for(var x=1;x<=31;x+=1)y(x).replace(/\[|\]/g,"")===g&&(this.day=x)}],w:[i,u("week")],ww:[n,u("week")],M:[i,u("month")],MM:[n,u("month")],MMM:[a,function(g){var y=f("months"),v=(f("monthsShort")||y.map(function(x){return x.slice(0,3)})).indexOf(g)+1;if(v<1)throw new Error;this.month=v%12||v}],MMMM:[a,function(g){var y=f("months").indexOf(g)+1;if(y<1)throw new Error;this.month=y%12||y}],Y:[/[+-]?\d+/,u("year")],YY:[n,function(g){this.year=l(g)}],YYYY:[/\d{4}/,u("year")],Z:h,ZZ:h};function m(g){var y,v;y=g,v=s&&s.formats;for(var x=(g=y.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(S,A,I){var D=I&&I.toUpperCase();return A||v[I]||t[I]||v[D].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(k,R,C){return R||C.slice(1)})})).match(e),b=x.length,w=0;w-1)return new Date((N==="X"?1e3:1)*O);var B=m(N)(O),G=B.year,z=B.month,W=B.day,Z=B.hours,j=B.minutes,oe=B.seconds,K=B.milliseconds,ee=B.zone,J=B.week,H=new Date,q=W||(G||z?1:H.getDate()),Q=G||H.getFullYear(),ae=0;G&&!z||(ae=z>0?z-1:H.getMonth());var ue,ce=Z||0,te=j||0,Ne=oe||0,se=K||0;return ee?new Date(Date.UTC(Q,ae,q,ce,te,Ne,se+60*ee.offset*1e3)):P?new Date(Date.UTC(Q,ae,q,ce,te,Ne,se)):(ue=new Date(Q,ae,q,ce,te,Ne,se),J&&(ue=F(ue).week(J).toDate()),ue)}catch{return new Date("")}}(_,L,T,v),this.init(),D&&D!==!0&&(this.$L=this.locale(D).$L),I&&_!=this.format(L)&&(this.$d=new Date("")),s={}}else if(L instanceof Array)for(var k=L.length,R=1;R<=k;R+=1){E[1]=L[R-1];var C=v.apply(this,E);if(C.isValid()){this.$d=C.$d,this.$L=C.$L,this.init();break}R===k&&(this.$d=new Date(""))}else b.call(this,w)}}})});var $ue=Ei(($I,VI)=>{"use strict";(function(t,e){typeof $I=="object"&&typeof VI<"u"?VI.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_advancedFormat=e()})($I,function(){"use strict";return function(t,e){var r=e.prototype,n=r.format;r.format=function(i){var a=this,s=this.$locale();if(!this.isValid())return n.bind(this)(i);var l=this.$utils(),u=(i||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(h){switch(h){case"Q":return Math.ceil((a.$M+1)/3);case"Do":return s.ordinal(a.$D);case"gggg":return a.weekYear();case"GGGG":return a.isoWeekYear();case"wo":return s.ordinal(a.week(),"W");case"w":case"ww":return l.s(a.week(),h==="w"?1:2,"0");case"W":case"WW":return l.s(a.isoWeek(),h==="W"?1:2,"0");case"k":case"kk":return l.s(String(a.$H===0?24:a.$H),h==="k"?1:2,"0");case"X":return Math.floor(a.$d.getTime()/1e3);case"x":return a.$d.getTime();case"z":return"["+a.offsetName()+"]";case"zzz":return"["+a.offsetName("long")+"]";default:return h}});return n.bind(this)(u)}}})});function nhe(t,e,r){let n=!0;for(;n;)n=!1,r.forEach(function(i){let a="^\\s*"+i+"\\s*$",s=new RegExp(a);t[0].match(s)&&(e[i]=!0,t.shift(1),n=!0)})}var Hue,xo,Wue,Yue,que,Vue,qc,YI,qI,XI,Sx,Cx,jI,KI,xE,Yg,QI,Xue,ZI,Ax,JI,eO,bE,UI,ZGe,JGe,e$e,t$e,r$e,n$e,i$e,a$e,s$e,o$e,l$e,c$e,u$e,h$e,f$e,d$e,p$e,m$e,g$e,y$e,v$e,x$e,b$e,jue,w$e,T$e,k$e,Kue,E$e,HI,Que,Zue,yE,Wg,S$e,C$e,WI,vE,Yi,Jue,A$e,N0,_$e,Uue,L$e,ehe,D$e,the,N$e,R$e,rhe,ihe=M(()=>{"use strict";Hue=Ji(Qp(),1),xo=Ji(Vb(),1),Wue=Ji(zue(),1),Yue=Ji(Gue(),1),que=Ji($ue(),1);ut();Vt();hr();Ai();xo.default.extend(Wue.default);xo.default.extend(Yue.default);xo.default.extend(que.default);Vue={friday:5,saturday:6},qc="",YI="",XI="",Sx=[],Cx=[],jI=new Map,KI=[],xE=[],Yg="",QI="",Xue=["active","done","crit","milestone"],ZI=[],Ax=!1,JI=!1,eO="sunday",bE="saturday",UI=0,ZGe=o(function(){KI=[],xE=[],Yg="",ZI=[],yE=0,WI=void 0,vE=void 0,Yi=[],qc="",YI="",QI="",qI=void 0,XI="",Sx=[],Cx=[],Ax=!1,JI=!1,UI=0,jI=new Map,Lr(),eO="sunday",bE="saturday"},"clear"),JGe=o(function(t){YI=t},"setAxisFormat"),e$e=o(function(){return YI},"getAxisFormat"),t$e=o(function(t){qI=t},"setTickInterval"),r$e=o(function(){return qI},"getTickInterval"),n$e=o(function(t){XI=t},"setTodayMarker"),i$e=o(function(){return XI},"getTodayMarker"),a$e=o(function(t){qc=t},"setDateFormat"),s$e=o(function(){Ax=!0},"enableInclusiveEndDates"),o$e=o(function(){return Ax},"endDatesAreInclusive"),l$e=o(function(){JI=!0},"enableTopAxis"),c$e=o(function(){return JI},"topAxisEnabled"),u$e=o(function(t){QI=t},"setDisplayMode"),h$e=o(function(){return QI},"getDisplayMode"),f$e=o(function(){return qc},"getDateFormat"),d$e=o(function(t){Sx=t.toLowerCase().split(/[\s,]+/)},"setIncludes"),p$e=o(function(){return Sx},"getIncludes"),m$e=o(function(t){Cx=t.toLowerCase().split(/[\s,]+/)},"setExcludes"),g$e=o(function(){return Cx},"getExcludes"),y$e=o(function(){return jI},"getLinks"),v$e=o(function(t){Yg=t,KI.push(t)},"addSection"),x$e=o(function(){return KI},"getSections"),b$e=o(function(){let t=Uue(),e=10,r=0;for(;!t&&r[\d\w- ]+)/.exec(r);if(i!==null){let s=null;for(let u of i.groups.ids.split(" ")){let h=N0(u);h!==void 0&&(!s||h.endTime>s.endTime)&&(s=h)}if(s)return s.endTime;let l=new Date;return l.setHours(0,0,0,0),l}let a=(0,xo.default)(r,e.trim(),!0);if(a.isValid())return a.toDate();{Y.debug("Invalid date:"+r),Y.debug("With date format:"+e.trim());let s=new Date(r);if(s===void 0||isNaN(s.getTime())||s.getFullYear()<-1e4||s.getFullYear()>1e4)throw new Error("Invalid date:"+r);return s}},"getStartDate"),Que=o(function(t){let e=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(t.trim());return e!==null?[Number.parseFloat(e[1]),e[2]]:[NaN,"ms"]},"parseDuration"),Zue=o(function(t,e,r,n=!1){r=r.trim();let a=/^until\s+(?[\d\w- ]+)/.exec(r);if(a!==null){let f=null;for(let p of a.groups.ids.split(" ")){let m=N0(p);m!==void 0&&(!f||m.startTime{window.open(r,"_self")}),jI.set(n,r))}),ehe(t,"clickable")},"setLink"),ehe=o(function(t,e){t.split(",").forEach(function(r){let n=N0(r);n!==void 0&&n.classes.push(e)})},"setClass"),D$e=o(function(t,e,r){if(pe().securityLevel!=="loose"||e===void 0)return;let n=[];if(typeof r=="string"){n=r.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let a=0;a{Ut.runFunc(e,...n)})},"setClickFun"),the=o(function(t,e){ZI.push(function(){let r=document.querySelector(`[id="${t}"]`);r!==null&&r.addEventListener("click",function(){e()})},function(){let r=document.querySelector(`[id="${t}-text"]`);r!==null&&r.addEventListener("click",function(){e()})})},"pushFun"),N$e=o(function(t,e,r){t.split(",").forEach(function(n){D$e(n,e,r)}),ehe(t,"clickable")},"setClickEvent"),R$e=o(function(t){ZI.forEach(function(e){e(t)})},"bindFunctions"),rhe={getConfig:o(()=>pe().gantt,"getConfig"),clear:ZGe,setDateFormat:a$e,getDateFormat:f$e,enableInclusiveEndDates:s$e,endDatesAreInclusive:o$e,enableTopAxis:l$e,topAxisEnabled:c$e,setAxisFormat:JGe,getAxisFormat:e$e,setTickInterval:t$e,getTickInterval:r$e,setTodayMarker:n$e,getTodayMarker:i$e,setAccTitle:Mr,getAccTitle:Br,setDiagramTitle:cn,getDiagramTitle:Jr,setDisplayMode:u$e,getDisplayMode:h$e,setAccDescription:Fr,getAccDescription:zr,addSection:v$e,getSections:x$e,getTasks:b$e,addTask:A$e,findTaskById:N0,addTaskOrg:_$e,setIncludes:d$e,getIncludes:p$e,setExcludes:m$e,getExcludes:g$e,setClickEvent:N$e,setLink:L$e,getLinks:y$e,bindFunctions:R$e,parseDuration:Que,isInvalidDate:jue,setWeekday:w$e,getWeekday:T$e,setWeekend:k$e};o(nhe,"getTaskTags")});var wE,M$e,ahe,I$e,Ju,O$e,she,ohe=M(()=>{"use strict";wE=Ji(Vb(),1);ut();pr();fr();Vt();ai();M$e=o(function(){Y.debug("Something is calling, setConf, remove the call")},"setConf"),ahe={monday:Nh,tuesday:R3,wednesday:M3,thursday:xc,friday:I3,saturday:O3,sunday:Al},I$e=o((t,e)=>{let r=[...t].map(()=>-1/0),n=[...t].sort((a,s)=>a.startTime-s.startTime||a.order-s.order),i=0;for(let a of n)for(let s=0;s=r[s]){r[s]=a.endTime,a.order=s+e,s>i&&(i=s);break}return i},"getMaxIntersections"),O$e=o(function(t,e,r,n){let i=pe().gantt,a=pe().securityLevel,s;a==="sandbox"&&(s=Ve("#i"+e));let l=a==="sandbox"?Ve(s.nodes()[0].contentDocument.body):Ve("body"),u=a==="sandbox"?s.nodes()[0].contentDocument:document,h=u.getElementById(e);Ju=h.parentElement.offsetWidth,Ju===void 0&&(Ju=1200),i.useWidth!==void 0&&(Ju=i.useWidth);let f=n.db.getTasks(),d=[];for(let S of f)d.push(S.type);d=L(d);let p={},m=2*i.topPadding;if(n.db.getDisplayMode()==="compact"||i.displayMode==="compact"){let S={};for(let I of f)S[I.section]===void 0?S[I.section]=[I]:S[I.section].push(I);let A=0;for(let I of Object.keys(S)){let D=I$e(S[I],A)+1;A+=D,m+=D*(i.barHeight+i.barGap),p[I]=D}}else{m+=f.length*(i.barHeight+i.barGap);for(let S of d)p[S]=f.filter(A=>A.type===S).length}h.setAttribute("viewBox","0 0 "+Ju+" "+m);let g=l.select(`[id="${e}"]`),y=F3().domain([U4(f,function(S){return S.startTime}),V4(f,function(S){return S.endTime})]).rangeRound([0,Ju-i.leftPadding-i.rightPadding]);function v(S,A){let I=S.startTime,D=A.startTime,k=0;return I>D?k=1:IG.order))].map(G=>S.find(z=>z.order===G));g.append("g").selectAll("rect").data(N).enter().append("rect").attr("x",0).attr("y",function(G,z){return z=G.order,z*A+I-2}).attr("width",function(){return C-i.rightPadding/2}).attr("height",A).attr("class",function(G){for(let[z,W]of d.entries())if(G.type===W)return"section section"+z%i.numberSectionStyles;return"section section0"});let P=g.append("g").selectAll("rect").data(S).enter(),F=n.db.getLinks();if(P.append("rect").attr("id",function(G){return G.id}).attr("rx",3).attr("ry",3).attr("x",function(G){return G.milestone?y(G.startTime)+D+.5*(y(G.endTime)-y(G.startTime))-.5*k:y(G.startTime)+D}).attr("y",function(G,z){return z=G.order,z*A+I}).attr("width",function(G){return G.milestone?k:y(G.renderEndTime||G.endTime)-y(G.startTime)}).attr("height",k).attr("transform-origin",function(G,z){return z=G.order,(y(G.startTime)+D+.5*(y(G.endTime)-y(G.startTime))).toString()+"px "+(z*A+I+.5*k).toString()+"px"}).attr("class",function(G){let z="task",W="";G.classes.length>0&&(W=G.classes.join(" "));let Z=0;for(let[oe,K]of d.entries())G.type===K&&(Z=oe%i.numberSectionStyles);let j="";return G.active?G.crit?j+=" activeCrit":j=" active":G.done?G.crit?j=" doneCrit":j=" done":G.crit&&(j+=" crit"),j.length===0&&(j=" task"),G.milestone&&(j=" milestone "+j),j+=Z,j+=" "+W,z+j}),P.append("text").attr("id",function(G){return G.id+"-text"}).text(function(G){return G.task}).attr("font-size",i.fontSize).attr("x",function(G){let z=y(G.startTime),W=y(G.renderEndTime||G.endTime);G.milestone&&(z+=.5*(y(G.endTime)-y(G.startTime))-.5*k),G.milestone&&(W=z+k);let Z=this.getBBox().width;return Z>W-z?W+Z+1.5*i.leftPadding>C?z+D-5:W+D+5:(W-z)/2+z+D}).attr("y",function(G,z){return z=G.order,z*A+i.barHeight/2+(i.fontSize/2-2)+I}).attr("text-height",k).attr("class",function(G){let z=y(G.startTime),W=y(G.endTime);G.milestone&&(W=z+k);let Z=this.getBBox().width,j="";G.classes.length>0&&(j=G.classes.join(" "));let oe=0;for(let[ee,J]of d.entries())G.type===J&&(oe=ee%i.numberSectionStyles);let K="";return G.active&&(G.crit?K="activeCritText"+oe:K="activeText"+oe),G.done?G.crit?K=K+" doneCritText"+oe:K=K+" doneText"+oe:G.crit&&(K=K+" critText"+oe),G.milestone&&(K+=" milestoneText"),Z>W-z?W+Z+1.5*i.leftPadding>C?j+" taskTextOutsideLeft taskTextOutside"+oe+" "+K:j+" taskTextOutsideRight taskTextOutside"+oe+" "+K+" width-"+Z:j+" taskText taskText"+oe+" "+K+" width-"+Z}),pe().securityLevel==="sandbox"){let G;G=Ve("#i"+e);let z=G.nodes()[0].contentDocument;P.filter(function(W){return F.has(W.id)}).each(function(W){var Z=z.querySelector("#"+W.id),j=z.querySelector("#"+W.id+"-text");let oe=Z.parentNode;var K=z.createElement("a");K.setAttribute("xlink:href",F.get(W.id)),K.setAttribute("target","_top"),oe.appendChild(K),K.appendChild(Z),K.appendChild(j)})}}o(b,"drawRects");function w(S,A,I,D,k,R,C,O){if(C.length===0&&O.length===0)return;let N,P;for(let{startTime:Z,endTime:j}of R)(N===void 0||ZP)&&(P=j);if(!N||!P)return;if((0,wE.default)(P).diff((0,wE.default)(N),"year")>5){Y.warn("The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days.");return}let F=n.db.getDateFormat(),B=[],G=null,z=(0,wE.default)(N);for(;z.valueOf()<=P;)n.db.isInvalidDate(z,F,C,O)?G?G.end=z:G={start:z,end:z}:G&&(B.push(G),G=null),z=z.add(1,"d");g.append("g").selectAll("rect").data(B).enter().append("rect").attr("id",function(Z){return"exclude-"+Z.start.format("YYYY-MM-DD")}).attr("x",function(Z){return y(Z.start)+I}).attr("y",i.gridLineStartPadding).attr("width",function(Z){let j=Z.end.add(1,"day");return y(j)-y(Z.start)}).attr("height",k-A-i.gridLineStartPadding).attr("transform-origin",function(Z,j){return(y(Z.start)+I+.5*(y(Z.end)-y(Z.start))).toString()+"px "+(j*S+.5*k).toString()+"px"}).attr("class","exclude-range")}o(w,"drawExcludeDays");function _(S,A,I,D){let k=b7(y).tickSize(-D+A+i.gridLineStartPadding).tickFormat(kd(n.db.getAxisFormat()||i.axisFormat||"%Y-%m-%d")),C=/^([1-9]\d*)(millisecond|second|minute|hour|day|week|month)$/.exec(n.db.getTickInterval()||i.tickInterval);if(C!==null){let O=C[1],N=C[2],P=n.db.getWeekday()||i.weekday;switch(N){case"millisecond":k.ticks(yc.every(O));break;case"second":k.ticks(to.every(O));break;case"minute":k.ticks(Su.every(O));break;case"hour":k.ticks(Cu.every(O));break;case"day":k.ticks(Oo.every(O));break;case"week":k.ticks(ahe[P].every(O));break;case"month":k.ticks(Au.every(O));break}}if(g.append("g").attr("class","grid").attr("transform","translate("+S+", "+(D-50)+")").call(k).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),n.db.topAxisEnabled()||i.topAxis){let O=x7(y).tickSize(-D+A+i.gridLineStartPadding).tickFormat(kd(n.db.getAxisFormat()||i.axisFormat||"%Y-%m-%d"));if(C!==null){let N=C[1],P=C[2],F=n.db.getWeekday()||i.weekday;switch(P){case"millisecond":O.ticks(yc.every(N));break;case"second":O.ticks(to.every(N));break;case"minute":O.ticks(Su.every(N));break;case"hour":O.ticks(Cu.every(N));break;case"day":O.ticks(Oo.every(N));break;case"week":O.ticks(ahe[F].every(N));break;case"month":O.ticks(Au.every(N));break}}g.append("g").attr("class","grid").attr("transform","translate("+S+", "+A+")").call(O).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}o(_,"makeGrid");function T(S,A){let I=0,D=Object.keys(p).map(k=>[k,p[k]]);g.append("g").selectAll("text").data(D).enter().append(function(k){let R=k[0].split(qe.lineBreakRegex),C=-(R.length-1)/2,O=u.createElementNS("http://www.w3.org/2000/svg","text");O.setAttribute("dy",C+"em");for(let[N,P]of R.entries()){let F=u.createElementNS("http://www.w3.org/2000/svg","tspan");F.setAttribute("alignment-baseline","central"),F.setAttribute("x","10"),N>0&&F.setAttribute("dy","1em"),F.textContent=P,O.appendChild(F)}return O}).attr("x",10).attr("y",function(k,R){if(R>0)for(let C=0;C{"use strict";P$e=o(t=>` .mermaid-main-font { font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); } .exclude-range { - fill: ${i.excludeBkgColor}; + fill: ${t.excludeBkgColor}; } .section { @@ -631,33 +861,33 @@ Expecting `+xi.join(", ")+", got '"+(this.terminals_[Qe]||Qe)+"'":Ma="Parse erro } .section0 { - fill: ${i.sectionBkgColor}; + fill: ${t.sectionBkgColor}; } .section2 { - fill: ${i.sectionBkgColor2}; + fill: ${t.sectionBkgColor2}; } .section1, .section3 { - fill: ${i.altSectionBkgColor}; + fill: ${t.altSectionBkgColor}; opacity: 0.2; } .sectionTitle0 { - fill: ${i.titleColor}; + fill: ${t.titleColor}; } .sectionTitle1 { - fill: ${i.titleColor}; + fill: ${t.titleColor}; } .sectionTitle2 { - fill: ${i.titleColor}; + fill: ${t.titleColor}; } .sectionTitle3 { - fill: ${i.titleColor}; + fill: ${t.titleColor}; } .sectionTitle { @@ -669,14 +899,14 @@ Expecting `+xi.join(", ")+", got '"+(this.terminals_[Qe]||Qe)+"'":Ma="Parse erro /* Grid and axis */ .grid .tick { - stroke: ${i.gridColor}; + stroke: ${t.gridColor}; opacity: 0.8; shape-rendering: crispEdges; } .grid .tick text { - font-family: ${i.fontFamily}; - fill: ${i.textColor}; + font-family: ${t.fontFamily}; + fill: ${t.textColor}; } .grid path { @@ -688,7 +918,7 @@ Expecting `+xi.join(", ")+", got '"+(this.terminals_[Qe]||Qe)+"'":Ma="Parse erro .today { fill: none; - stroke: ${i.todayLineColor}; + stroke: ${t.todayLineColor}; stroke-width: 2px; } @@ -707,13 +937,13 @@ Expecting `+xi.join(", ")+", got '"+(this.terminals_[Qe]||Qe)+"'":Ma="Parse erro } .taskTextOutsideRight { - fill: ${i.taskTextDarkColor}; + fill: ${t.taskTextDarkColor}; text-anchor: start; font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); } .taskTextOutsideLeft { - fill: ${i.taskTextDarkColor}; + fill: ${t.taskTextDarkColor}; text-anchor: end; } @@ -726,19 +956,19 @@ Expecting `+xi.join(", ")+", got '"+(this.terminals_[Qe]||Qe)+"'":Ma="Parse erro .taskText.clickable { cursor: pointer; - fill: ${i.taskTextClickableColor} !important; + fill: ${t.taskTextClickableColor} !important; font-weight: bold; } .taskTextOutsideLeft.clickable { cursor: pointer; - fill: ${i.taskTextClickableColor} !important; + fill: ${t.taskTextClickableColor} !important; font-weight: bold; } .taskTextOutsideRight.clickable { cursor: pointer; - fill: ${i.taskTextClickableColor} !important; + fill: ${t.taskTextClickableColor} !important; font-weight: bold; } @@ -749,26 +979,26 @@ Expecting `+xi.join(", ")+", got '"+(this.terminals_[Qe]||Qe)+"'":Ma="Parse erro .taskText1, .taskText2, .taskText3 { - fill: ${i.taskTextColor}; + fill: ${t.taskTextColor}; } .task0, .task1, .task2, .task3 { - fill: ${i.taskBkgColor}; - stroke: ${i.taskBorderColor}; + fill: ${t.taskBkgColor}; + stroke: ${t.taskBorderColor}; } .taskTextOutside0, .taskTextOutside2 { - fill: ${i.taskTextOutsideColor}; + fill: ${t.taskTextOutsideColor}; } .taskTextOutside1, .taskTextOutside3 { - fill: ${i.taskTextOutsideColor}; + fill: ${t.taskTextOutsideColor}; } @@ -778,15 +1008,15 @@ Expecting `+xi.join(", ")+", got '"+(this.terminals_[Qe]||Qe)+"'":Ma="Parse erro .active1, .active2, .active3 { - fill: ${i.activeTaskBkgColor}; - stroke: ${i.activeTaskBorderColor}; + fill: ${t.activeTaskBkgColor}; + stroke: ${t.activeTaskBorderColor}; } .activeText0, .activeText1, .activeText2, .activeText3 { - fill: ${i.taskTextDarkColor} !important; + fill: ${t.taskTextDarkColor} !important; } @@ -796,8 +1026,8 @@ Expecting `+xi.join(", ")+", got '"+(this.terminals_[Qe]||Qe)+"'":Ma="Parse erro .done1, .done2, .done3 { - stroke: ${i.doneTaskBorderColor}; - fill: ${i.doneTaskBkgColor}; + stroke: ${t.doneTaskBorderColor}; + fill: ${t.doneTaskBkgColor}; stroke-width: 2; } @@ -805,7 +1035,7 @@ Expecting `+xi.join(", ")+", got '"+(this.terminals_[Qe]||Qe)+"'":Ma="Parse erro .doneText1, .doneText2, .doneText3 { - fill: ${i.taskTextDarkColor} !important; + fill: ${t.taskTextDarkColor} !important; } @@ -815,8 +1045,8 @@ Expecting `+xi.join(", ")+", got '"+(this.terminals_[Qe]||Qe)+"'":Ma="Parse erro .crit1, .crit2, .crit3 { - stroke: ${i.critBorderColor}; - fill: ${i.critBkgColor}; + stroke: ${t.critBorderColor}; + fill: ${t.critBkgColor}; stroke-width: 2; } @@ -824,8 +1054,8 @@ Expecting `+xi.join(", ")+", got '"+(this.terminals_[Qe]||Qe)+"'":Ma="Parse erro .activeCrit1, .activeCrit2, .activeCrit3 { - stroke: ${i.critBorderColor}; - fill: ${i.activeTaskBkgColor}; + stroke: ${t.critBorderColor}; + fill: ${t.activeTaskBkgColor}; stroke-width: 2; } @@ -833,8 +1063,8 @@ Expecting `+xi.join(", ")+", got '"+(this.terminals_[Qe]||Qe)+"'":Ma="Parse erro .doneCrit1, .doneCrit2, .doneCrit3 { - stroke: ${i.critBorderColor}; - fill: ${i.doneTaskBkgColor}; + stroke: ${t.critBorderColor}; + fill: ${t.doneTaskBkgColor}; stroke-width: 2; cursor: pointer; shape-rendering: crispEdges; @@ -851,225 +1081,215 @@ Expecting `+xi.join(", ")+", got '"+(this.terminals_[Qe]||Qe)+"'":Ma="Parse erro .doneCritText1, .doneCritText2, .doneCritText3 { - fill: ${i.taskTextDarkColor} !important; + fill: ${t.taskTextDarkColor} !important; } .activeCritText0, .activeCritText1, .activeCritText2, .activeCritText3 { - fill: ${i.taskTextDarkColor} !important; + fill: ${t.taskTextDarkColor} !important; } .titleText { text-anchor: middle; font-size: 18px; - fill: ${i.titleColor||i.textColor}; + fill: ${t.titleColor||t.textColor}; font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); } -`}},Symbol.toStringTag,{value:"Module"}));var cve=function(){var i=function(v,b,y,T){for(y=y||{},T=v.length;T--;y[v[T]]=b);return y},s=[6,9,10],u={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1]],performAction:function(b,y,T,_,A,P,R){switch(P.length-1,A){case 1:return _;case 4:break;case 6:_.setInfo(!0);break}},table:[{3:1,4:[1,2]},{1:[3]},i(s,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},i(s,[2,3]),i(s,[2,4]),i(s,[2,5]),i(s,[2,6])],defaultActions:{4:[2,1]},parseError:function(b,y){if(y.recoverable)this.trace(b);else{var T=new Error(b);throw T.hash=y,T}},parse:function(b){var y=this,T=[0],_=[],A=[null],P=[],R=this.table,F="",j=0,K=0,ee=2,ie=1,oe=P.slice.call(arguments,1),pe=Object.create(this.lexer),be={yy:{}};for(var ae in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ae)&&(be.yy[ae]=this.yy[ae]);pe.setInput(b,be.yy),be.yy.lexer=pe,be.yy.parser=this,typeof pe.yylloc>"u"&&(pe.yylloc={});var ne=pe.yylloc;P.push(ne);var se=pe.options&&pe.options.ranges;typeof be.yy.parseError=="function"?this.parseError=be.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function de(){var Ce;return Ce=_.pop()||pe.lex()||ie,typeof Ce!="number"&&(Ce instanceof Array&&(_=Ce,Ce=_.pop()),Ce=y.symbols_[Ce]||Ce),Ce}for(var X,ge,W,xe,U={},Fe,Pe,je,Ie;;){if(ge=T[T.length-1],this.defaultActions[ge]?W=this.defaultActions[ge]:((X===null||typeof X>"u")&&(X=de()),W=R[ge]&&R[ge][X]),typeof W>"u"||!W.length||!W[0]){var Se="";Ie=[];for(Fe in R[ge])this.terminals_[Fe]&&Fe>ee&&Ie.push("'"+this.terminals_[Fe]+"'");pe.showPosition?Se="Parse error on line "+(j+1)+`: -`+pe.showPosition()+` -Expecting `+Ie.join(", ")+", got '"+(this.terminals_[X]||X)+"'":Se="Parse error on line "+(j+1)+": Unexpected "+(X==ie?"end of input":"'"+(this.terminals_[X]||X)+"'"),this.parseError(Se,{text:pe.match,token:this.terminals_[X]||X,line:pe.yylineno,loc:ne,expected:Ie})}if(W[0]instanceof Array&&W.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ge+", token: "+X);switch(W[0]){case 1:T.push(X),A.push(pe.yytext),P.push(pe.yylloc),T.push(W[1]),X=null,K=pe.yyleng,F=pe.yytext,j=pe.yylineno,ne=pe.yylloc;break;case 2:if(Pe=this.productions_[W[1]][1],U.$=A[A.length-Pe],U._$={first_line:P[P.length-(Pe||1)].first_line,last_line:P[P.length-1].last_line,first_column:P[P.length-(Pe||1)].first_column,last_column:P[P.length-1].last_column},se&&(U._$.range=[P[P.length-(Pe||1)].range[0],P[P.length-1].range[1]]),xe=this.performAction.apply(U,[F,K,j,be.yy,W[1],A,P].concat(oe)),typeof xe<"u")return xe;Pe&&(T=T.slice(0,-1*Pe*2),A=A.slice(0,-1*Pe),P=P.slice(0,-1*Pe)),T.push(this.productions_[W[1]][0]),A.push(U.$),P.push(U._$),je=R[T[T.length-2]][T[T.length-1]],T.push(je);break;case 3:return!0}}return!0}},d=function(){var v={EOF:1,parseError:function(y,T){if(this.yy.parser)this.yy.parser.parseError(y,T);else throw new Error(y)},setInput:function(b,y){return this.yy=y||this.yy||{},this._input=b,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var b=this._input[0];this.yytext+=b,this.yyleng++,this.offset++,this.match+=b,this.matched+=b;var y=b.match(/(?:\r\n?|\n).*/g);return y?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),b},unput:function(b){var y=b.length,T=b.split(/(?:\r\n?|\n)/g);this._input=b+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-y),this.offset-=y;var _=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),T.length-1&&(this.yylineno-=T.length-1);var A=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:T?(T.length===_.length?this.yylloc.first_column:0)+_[_.length-T.length].length-T[0].length:this.yylloc.first_column-y},this.options.ranges&&(this.yylloc.range=[A[0],A[0]+this.yyleng-y]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(b){this.unput(this.match.slice(b))},pastInput:function(){var b=this.matched.substr(0,this.matched.length-this.match.length);return(b.length>20?"...":"")+b.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var b=this.match;return b.length<20&&(b+=this._input.substr(0,20-b.length)),(b.substr(0,20)+(b.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var b=this.pastInput(),y=new Array(b.length+1).join("-");return b+this.upcomingInput()+` -`+y+"^"},test_match:function(b,y){var T,_,A;if(this.options.backtrack_lexer&&(A={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(A.yylloc.range=this.yylloc.range.slice(0))),_=b[0].match(/(?:\r\n?|\n).*/g),_&&(this.yylineno+=_.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:_?_[_.length-1].length-_[_.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+b[0].length},this.yytext+=b[0],this.match+=b[0],this.matches=b,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(b[0].length),this.matched+=b[0],T=this.performAction.call(this,this.yy,this,y,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),T)return T;if(this._backtrack){for(var P in A)this[P]=A[P];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var b,y,T,_;this._more||(this.yytext="",this.match="");for(var A=this._currentRules(),P=0;Py[0].length)){if(y=T,_=P,this.options.backtrack_lexer){if(b=this.test_match(T,A[P]),b!==!1)return b;if(this._backtrack){y=!1;continue}else return!1}else if(!this.options.flex)break}return y?(b=this.test_match(y,A[_]),b!==!1?b:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var y=this.next();return y||this.lex()},begin:function(y){this.conditionStack.push(y)},popState:function(){var y=this.conditionStack.length-1;return y>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(y){return y=this.conditionStack.length-1-Math.abs(y||0),y>=0?this.conditionStack[y]:"INITIAL"},pushState:function(y){this.begin(y)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(y,T,_,A){switch(_){case 0:return 4;case 1:return 9;case 2:return"space";case 3:return 10;case 4:return 6;case 5:return"TXT"}},rules:[/^(?:info\b)/i,/^(?:[\s\n\r]+)/i,/^(?:[\s]+)/i,/^(?:showInfo\b)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5],inclusive:!0}}};return v}();u.lexer=d;function p(){this.yy={}}return p.prototype=u,u.Parser=p,new p}();cve.parser=cve;const bnn=cve,lGe={info:!1};let uve=lGe.info;const mnn=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:bnn,db:{clear:()=>{uve=lGe.info},setInfo:i=>{uve=i},getInfo:()=>uve},renderer:{draw:(i,s,u)=>{Xe.debug(`rendering info diagram -`+i);const d=rR(s);Ng(d,100,400,!0),d.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size",32).style("text-anchor","middle").text(`v${u}`)}}}},Symbol.toStringTag,{value:"Module"}));var lve=function(){var i=function(pe,be,ae,ne){for(ae=ae||{},ne=pe.length;ne--;ae[pe[ne]]=be);return ae},s=[1,3],u=[1,4],d=[1,5],p=[1,6],v=[1,10,12,14,16,18,19,20,21,22],b=[2,4],y=[1,5,10,12,14,16,18,19,20,21,22],T=[20,21,22],_=[2,7],A=[1,12],P=[1,13],R=[1,14],F=[1,15],j=[1,16],K=[1,17],ee={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,PIE:5,document:6,showData:7,line:8,statement:9,txt:10,value:11,title:12,title_value:13,acc_title:14,acc_title_value:15,acc_descr:16,acc_descr_value:17,acc_descr_multiline_value:18,section:19,NEWLINE:20,";":21,EOF:22,$accept:0,$end:1},terminals_:{2:"error",5:"PIE",7:"showData",10:"txt",11:"value",12:"title",13:"title_value",14:"acc_title",15:"acc_title_value",16:"acc_descr",17:"acc_descr_value",18:"acc_descr_multiline_value",19:"section",20:"NEWLINE",21:";",22:"EOF"},productions_:[0,[3,2],[3,2],[3,3],[6,0],[6,2],[8,2],[9,0],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[4,1],[4,1],[4,1]],performAction:function(be,ae,ne,se,de,X,ge){var W=X.length-1;switch(de){case 3:se.setShowData(!0);break;case 6:this.$=X[W-1];break;case 8:se.addSection(X[W-1],se.cleanupValue(X[W]));break;case 9:this.$=X[W].trim(),se.setDiagramTitle(this.$);break;case 10:this.$=X[W].trim(),se.setAccTitle(this.$);break;case 11:case 12:this.$=X[W].trim(),se.setAccDescription(this.$);break;case 13:se.addSection(X[W].substr(8)),this.$=X[W].substr(8);break}},table:[{3:1,4:2,5:s,20:u,21:d,22:p},{1:[3]},{3:7,4:2,5:s,20:u,21:d,22:p},i(v,b,{6:8,7:[1,9]}),i(y,[2,14]),i(y,[2,15]),i(y,[2,16]),{1:[2,1]},i(T,_,{8:10,9:11,1:[2,2],10:A,12:P,14:R,16:F,18:j,19:K}),i(v,b,{6:18}),i(v,[2,5]),{4:19,20:u,21:d,22:p},{11:[1,20]},{13:[1,21]},{15:[1,22]},{17:[1,23]},i(T,[2,12]),i(T,[2,13]),i(T,_,{8:10,9:11,1:[2,3],10:A,12:P,14:R,16:F,18:j,19:K}),i(v,[2,6]),i(T,[2,8]),i(T,[2,9]),i(T,[2,10]),i(T,[2,11])],defaultActions:{7:[2,1]},parseError:function(be,ae){if(ae.recoverable)this.trace(be);else{var ne=new Error(be);throw ne.hash=ae,ne}},parse:function(be){var ae=this,ne=[0],se=[],de=[null],X=[],ge=this.table,W="",xe=0,U=0,Fe=2,Pe=1,je=X.slice.call(arguments,1),Ie=Object.create(this.lexer),Se={yy:{}};for(var Ce in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Ce)&&(Se.yy[Ce]=this.yy[Ce]);Ie.setInput(be,Se.yy),Se.yy.lexer=Ie,Se.yy.parser=this,typeof Ie.yylloc>"u"&&(Ie.yylloc={});var ke=Ie.yylloc;X.push(ke);var Ke=Ie.options&&Ie.options.ranges;typeof Se.yy.parseError=="function"?this.parseError=Se.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ft(){var kt;return kt=se.pop()||Ie.lex()||Pe,typeof kt!="number"&&(kt instanceof Array&&(se=kt,kt=se.pop()),kt=ae.symbols_[kt]||kt),kt}for(var Ne,gn,_t,Et,Gt={},ln,xt,Pt,Qe;;){if(gn=ne[ne.length-1],this.defaultActions[gn]?_t=this.defaultActions[gn]:((Ne===null||typeof Ne>"u")&&(Ne=Ft()),_t=ge[gn]&&ge[gn][Ne]),typeof _t>"u"||!_t.length||!_t[0]){var Dt="";Qe=[];for(ln in ge[gn])this.terminals_[ln]&&ln>Fe&&Qe.push("'"+this.terminals_[ln]+"'");Ie.showPosition?Dt="Parse error on line "+(xe+1)+`: -`+Ie.showPosition()+` -Expecting `+Qe.join(", ")+", got '"+(this.terminals_[Ne]||Ne)+"'":Dt="Parse error on line "+(xe+1)+": Unexpected "+(Ne==Pe?"end of input":"'"+(this.terminals_[Ne]||Ne)+"'"),this.parseError(Dt,{text:Ie.match,token:this.terminals_[Ne]||Ne,line:Ie.yylineno,loc:ke,expected:Qe})}if(_t[0]instanceof Array&&_t.length>1)throw new Error("Parse Error: multiple actions possible at state: "+gn+", token: "+Ne);switch(_t[0]){case 1:ne.push(Ne),de.push(Ie.yytext),X.push(Ie.yylloc),ne.push(_t[1]),Ne=null,U=Ie.yyleng,W=Ie.yytext,xe=Ie.yylineno,ke=Ie.yylloc;break;case 2:if(xt=this.productions_[_t[1]][1],Gt.$=de[de.length-xt],Gt._$={first_line:X[X.length-(xt||1)].first_line,last_line:X[X.length-1].last_line,first_column:X[X.length-(xt||1)].first_column,last_column:X[X.length-1].last_column},Ke&&(Gt._$.range=[X[X.length-(xt||1)].range[0],X[X.length-1].range[1]]),Et=this.performAction.apply(Gt,[W,U,xe,Se.yy,_t[1],de,X].concat(je)),typeof Et<"u")return Et;xt&&(ne=ne.slice(0,-1*xt*2),de=de.slice(0,-1*xt),X=X.slice(0,-1*xt)),ne.push(this.productions_[_t[1]][0]),de.push(Gt.$),X.push(Gt._$),Pt=ge[ne[ne.length-2]][ne[ne.length-1]],ne.push(Pt);break;case 3:return!0}}return!0}},ie=function(){var pe={EOF:1,parseError:function(ae,ne){if(this.yy.parser)this.yy.parser.parseError(ae,ne);else throw new Error(ae)},setInput:function(be,ae){return this.yy=ae||this.yy||{},this._input=be,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var be=this._input[0];this.yytext+=be,this.yyleng++,this.offset++,this.match+=be,this.matched+=be;var ae=be.match(/(?:\r\n?|\n).*/g);return ae?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),be},unput:function(be){var ae=be.length,ne=be.split(/(?:\r\n?|\n)/g);this._input=be+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-ae),this.offset-=ae;var se=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ne.length-1&&(this.yylineno-=ne.length-1);var de=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ne?(ne.length===se.length?this.yylloc.first_column:0)+se[se.length-ne.length].length-ne[0].length:this.yylloc.first_column-ae},this.options.ranges&&(this.yylloc.range=[de[0],de[0]+this.yyleng-ae]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(be){this.unput(this.match.slice(be))},pastInput:function(){var be=this.matched.substr(0,this.matched.length-this.match.length);return(be.length>20?"...":"")+be.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var be=this.match;return be.length<20&&(be+=this._input.substr(0,20-be.length)),(be.substr(0,20)+(be.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var be=this.pastInput(),ae=new Array(be.length+1).join("-");return be+this.upcomingInput()+` -`+ae+"^"},test_match:function(be,ae){var ne,se,de;if(this.options.backtrack_lexer&&(de={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(de.yylloc.range=this.yylloc.range.slice(0))),se=be[0].match(/(?:\r\n?|\n).*/g),se&&(this.yylineno+=se.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:se?se[se.length-1].length-se[se.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+be[0].length},this.yytext+=be[0],this.match+=be[0],this.matches=be,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(be[0].length),this.matched+=be[0],ne=this.performAction.call(this,this.yy,this,ae,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ne)return ne;if(this._backtrack){for(var X in de)this[X]=de[X];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var be,ae,ne,se;this._more||(this.yytext="",this.match="");for(var de=this._currentRules(),X=0;Xae[0].length)){if(ae=ne,se=X,this.options.backtrack_lexer){if(be=this.test_match(ne,de[X]),be!==!1)return be;if(this._backtrack){ae=!1;continue}else return!1}else if(!this.options.flex)break}return ae?(be=this.test_match(ae,de[se]),be!==!1?be:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var ae=this.next();return ae||this.lex()},begin:function(ae){this.conditionStack.push(ae)},popState:function(){var ae=this.conditionStack.length-1;return ae>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(ae){return ae=this.conditionStack.length-1-Math.abs(ae||0),ae>=0?this.conditionStack[ae]:"INITIAL"},pushState:function(ae){this.begin(ae)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(ae,ne,se,de){switch(se){case 0:break;case 1:break;case 2:return 20;case 3:break;case 4:break;case 5:return this.begin("title"),12;case 6:return this.popState(),"title_value";case 7:return this.begin("acc_title"),14;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),16;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:this.begin("string");break;case 15:this.popState();break;case 16:return"txt";case 17:return 5;case 18:return 7;case 19:return"value";case 20:return 22}},rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[\s]+)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:pie\b)/i,/^(?:showData\b)/i,/^(?::[\s]*[\d]+(?:\.[\d]+)?)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[6],inclusive:!1},string:{rules:[15,16],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,7,9,11,14,17,18,19,20],inclusive:!0}}};return pe}();ee.lexer=ie;function oe(){this.yy={}}return oe.prototype=ee,ee.Parser=oe,new oe}();lve.parser=lve;const vnn=lve,hGe=sh.pie,fJ={sections:{},showData:!1,config:hGe};let dJ=fJ.sections,hve=fJ.showData;const wnn=structuredClone(hGe),ynn={getConfig:()=>structuredClone(wnn),clear:()=>{dJ=structuredClone(fJ.sections),hve=fJ.showData,Pg()},setDiagramTitle:cm,getDiagramTitle:Ap,setAccTitle:Bg,getAccTitle:Cp,setAccDescription:Sp,getAccDescription:_p,addSection:(i,s)=>{i=Yf(i,qt()),dJ[i]===void 0&&(dJ[i]=s,Xe.debug(`added new section: ${i}, with value: ${s}`))},getSections:()=>dJ,cleanupValue:i=>(i.substring(0,1)===":"&&(i=i.substring(1).trim()),Number(i.trim())),setShowData:i=>{hve=i},getShowData:()=>hve},xnn=i=>` +`,"getStyles"),lhe=P$e});var uhe={};vr(uhe,{diagram:()=>B$e});var B$e,hhe=M(()=>{"use strict";Fue();ihe();ohe();che();B$e={parser:Bue,db:rhe,renderer:she,styles:lhe}});var phe,mhe=M(()=>{"use strict";Hg();ut();phe={parse:o(async t=>{let e=await Yl("info",t);Y.debug(e)},"parse")}});var _x,tO=M(()=>{_x="11.4.0"});var V$e,U$e,ghe,yhe=M(()=>{"use strict";tO();V$e={version:_x},U$e=o(()=>V$e.version,"getVersion"),ghe={getVersion:U$e}});var Va,eh=M(()=>{"use strict";pr();Vt();Va=o(t=>{let{securityLevel:e}=pe(),r=Ve("body");if(e==="sandbox"){let a=Ve(`#i${t}`).node()?.contentDocument??document;r=Ve(a.body)}return r.select(`#${t}`)},"selectSvgElement")});var H$e,vhe,xhe=M(()=>{"use strict";ut();eh();ai();H$e=o((t,e,r)=>{Y.debug(`rendering info diagram +`+t);let n=Va(e);Zr(n,100,400,!0),n.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size",32).style("text-anchor","middle").text(`v${r}`)},"draw"),vhe={draw:H$e}});var bhe={};vr(bhe,{diagram:()=>W$e});var W$e,whe=M(()=>{"use strict";mhe();yhe();xhe();W$e={parser:phe,db:ghe,renderer:vhe}});var Ehe,rO,TE,nO,X$e,j$e,K$e,Q$e,Z$e,J$e,eVe,kE,iO=M(()=>{"use strict";ut();Ai();bs();Ehe=ur.pie,rO={sections:new Map,showData:!1,config:Ehe},TE=rO.sections,nO=rO.showData,X$e=structuredClone(Ehe),j$e=o(()=>structuredClone(X$e),"getConfig"),K$e=o(()=>{TE=new Map,nO=rO.showData,Lr()},"clear"),Q$e=o(({label:t,value:e})=>{TE.has(t)||(TE.set(t,e),Y.debug(`added new section: ${t}, with value: ${e}`))},"addSection"),Z$e=o(()=>TE,"getSections"),J$e=o(t=>{nO=t},"setShowData"),eVe=o(()=>nO,"getShowData"),kE={getConfig:j$e,clear:K$e,setDiagramTitle:cn,getDiagramTitle:Jr,setAccTitle:Mr,getAccTitle:Br,setAccDescription:Fr,getAccDescription:zr,addSection:Q$e,getSections:Z$e,setShowData:J$e,getShowData:eVe}});var tVe,She,Che=M(()=>{"use strict";Hg();ut();Tx();iO();tVe=o((t,e)=>{yf(t,e),e.setShowData(t.showData),t.sections.map(e.addSection)},"populateDb"),She={parse:o(async t=>{let e=await Yl("pie",t);Y.debug(e),tVe(e,kE)},"parse")}});var rVe,Ahe,_he=M(()=>{"use strict";rVe=o(t=>` .pieCircle{ - stroke: ${i.pieStrokeColor}; - stroke-width : ${i.pieStrokeWidth}; - opacity : ${i.pieOpacity}; + stroke: ${t.pieStrokeColor}; + stroke-width : ${t.pieStrokeWidth}; + opacity : ${t.pieOpacity}; } .pieOuterCircle{ - stroke: ${i.pieOuterStrokeColor}; - stroke-width: ${i.pieOuterStrokeWidth}; + stroke: ${t.pieOuterStrokeColor}; + stroke-width: ${t.pieOuterStrokeWidth}; fill: none; } .pieTitleText { text-anchor: middle; - font-size: ${i.pieTitleTextSize}; - fill: ${i.pieTitleTextColor}; - font-family: ${i.fontFamily}; + font-size: ${t.pieTitleTextSize}; + fill: ${t.pieTitleTextColor}; + font-family: ${t.fontFamily}; } .slice { - font-family: ${i.fontFamily}; - fill: ${i.pieSectionTextColor}; - font-size:${i.pieSectionTextSize}; + font-family: ${t.fontFamily}; + fill: ${t.pieSectionTextColor}; + font-size:${t.pieSectionTextSize}; // fill: white; } .legend text { - fill: ${i.pieLegendTextColor}; - font-family: ${i.fontFamily}; - font-size: ${i.pieLegendTextSize}; - } -`,knn=i=>{const s=Object.entries(i).map(d=>({label:d[0],value:d[1]})).sort((d,p)=>p.value-d.value);return SNt().value(d=>d.value)(s)},Enn=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:vnn,db:ynn,renderer:{draw:(i,s,u,d)=>{Xe.debug(`rendering pie chart -`+i);const p=d.db,v=qt(),b=JF(p.getConfig(),v.pie),y=40,T=18,_=4,A=450,P=A,R=rR(s),F=R.append("g"),j=p.getSections();F.attr("transform","translate("+P/2+","+A/2+")");const{themeVariables:K}=v;let[ee]=NC(K.pieOuterStrokeWidth);ee??(ee=2);const ie=b.textPosition,oe=Math.min(P,A)/2-y,pe=lD().innerRadius(0).outerRadius(oe),be=lD().innerRadius(oe*ie).outerRadius(oe*ie);F.append("circle").attr("cx",0).attr("cy",0).attr("r",oe+ee/2).attr("class","pieOuterCircle");const ae=knn(j),ne=[K.pie1,K.pie2,K.pie3,K.pie4,K.pie5,K.pie6,K.pie7,K.pie8,K.pie9,K.pie10,K.pie11,K.pie12],se=_F(ne);F.selectAll("mySlices").data(ae).enter().append("path").attr("d",pe).attr("fill",xe=>se(xe.data.label)).attr("class","pieCircle");let de=0;Object.keys(j).forEach(xe=>{de+=j[xe]}),F.selectAll("mySlices").data(ae).enter().append("text").text(xe=>(xe.data.value/de*100).toFixed(0)+"%").attr("transform",xe=>"translate("+be.centroid(xe)+")").style("text-anchor","middle").attr("class","slice"),F.append("text").text(p.getDiagramTitle()).attr("x",0).attr("y",-(A-50)/2).attr("class","pieTitleText");const X=F.selectAll(".legend").data(se.domain()).enter().append("g").attr("class","legend").attr("transform",(xe,U)=>{const Fe=T+_,Pe=Fe*se.domain().length/2,je=12*T,Ie=U*Fe-Pe;return"translate("+je+","+Ie+")"});X.append("rect").attr("width",T).attr("height",T).style("fill",se).style("stroke",se),X.data(ae).append("text").attr("x",T+_).attr("y",T-_).text(xe=>{const{label:U,value:Fe}=xe.data;return p.getShowData()?`${U} [${Fe}]`:U});const ge=Math.max(...X.selectAll("text").nodes().map(xe=>(xe==null?void 0:xe.getBoundingClientRect().width)??0)),W=P+y+T+_+ge;R.attr("viewBox",`0 0 ${W} ${A}`),Ng(R,A,W,b.useMaxWidth)}},styles:xnn}},Symbol.toStringTag,{value:"Module"}));var fve=function(){var i=function(_t,Et,Gt,ln){for(Gt=Gt||{},ln=_t.length;ln--;Gt[_t[ln]]=Et);return Gt},s=[1,3],u=[1,4],d=[1,5],p=[1,6],v=[1,7],b=[1,5,13,15,17,19,20,25,27,28,29,30,31,32,33,34,37,38,40,41,42,43,44,45,46,47,48,49,50],y=[1,5,6,13,15,17,19,20,25,27,28,29,30,31,32,33,34,37,38,40,41,42,43,44,45,46,47,48,49,50],T=[32,33,34],_=[2,7],A=[1,13],P=[1,17],R=[1,18],F=[1,19],j=[1,20],K=[1,21],ee=[1,22],ie=[1,23],oe=[1,24],pe=[1,25],be=[1,26],ae=[1,27],ne=[1,30],se=[1,31],de=[1,32],X=[1,33],ge=[1,34],W=[1,35],xe=[1,36],U=[1,37],Fe=[1,38],Pe=[1,39],je=[1,40],Ie=[1,41],Se=[1,42],Ce=[1,57],ke=[1,58],Ke=[5,22,26,32,33,34,40,41,42,43,44,45,46,47,48,49,50,51],Ft={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,SPACE:5,QUADRANT:6,document:7,line:8,statement:9,axisDetails:10,quadrantDetails:11,points:12,title:13,title_value:14,acc_title:15,acc_title_value:16,acc_descr:17,acc_descr_value:18,acc_descr_multiline_value:19,section:20,text:21,point_start:22,point_x:23,point_y:24,"X-AXIS":25,"AXIS-TEXT-DELIMITER":26,"Y-AXIS":27,QUADRANT_1:28,QUADRANT_2:29,QUADRANT_3:30,QUADRANT_4:31,NEWLINE:32,SEMI:33,EOF:34,alphaNumToken:35,textNoTagsToken:36,STR:37,MD_STR:38,alphaNum:39,PUNCTUATION:40,AMP:41,NUM:42,ALPHA:43,COMMA:44,PLUS:45,EQUALS:46,MULT:47,DOT:48,BRKT:49,UNDERSCORE:50,MINUS:51,$accept:0,$end:1},terminals_:{2:"error",5:"SPACE",6:"QUADRANT",13:"title",14:"title_value",15:"acc_title",16:"acc_title_value",17:"acc_descr",18:"acc_descr_value",19:"acc_descr_multiline_value",20:"section",22:"point_start",23:"point_x",24:"point_y",25:"X-AXIS",26:"AXIS-TEXT-DELIMITER",27:"Y-AXIS",28:"QUADRANT_1",29:"QUADRANT_2",30:"QUADRANT_3",31:"QUADRANT_4",32:"NEWLINE",33:"SEMI",34:"EOF",37:"STR",38:"MD_STR",40:"PUNCTUATION",41:"AMP",42:"NUM",43:"ALPHA",44:"COMMA",45:"PLUS",46:"EQUALS",47:"MULT",48:"DOT",49:"BRKT",50:"UNDERSCORE",51:"MINUS"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[9,0],[9,2],[9,1],[9,1],[9,1],[9,2],[9,2],[9,2],[9,1],[9,1],[12,4],[10,4],[10,3],[10,2],[10,4],[10,3],[10,2],[11,2],[11,2],[11,2],[11,2],[4,1],[4,1],[4,1],[21,1],[21,2],[21,1],[21,1],[39,1],[39,2],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[36,1],[36,1],[36,1]],performAction:function(Et,Gt,ln,xt,Pt,Qe,Dt){var kt=Qe.length-1;switch(Pt){case 12:this.$=Qe[kt].trim(),xt.setDiagramTitle(this.$);break;case 13:this.$=Qe[kt].trim(),xt.setAccTitle(this.$);break;case 14:case 15:this.$=Qe[kt].trim(),xt.setAccDescription(this.$);break;case 16:xt.addSection(Qe[kt].substr(8)),this.$=Qe[kt].substr(8);break;case 17:xt.addPoint(Qe[kt-3],Qe[kt-1],Qe[kt]);break;case 18:xt.setXAxisLeftText(Qe[kt-2]),xt.setXAxisRightText(Qe[kt]);break;case 19:Qe[kt-1].text+=" ⟶ ",xt.setXAxisLeftText(Qe[kt-1]);break;case 20:xt.setXAxisLeftText(Qe[kt]);break;case 21:xt.setYAxisBottomText(Qe[kt-2]),xt.setYAxisTopText(Qe[kt]);break;case 22:Qe[kt-1].text+=" ⟶ ",xt.setYAxisBottomText(Qe[kt-1]);break;case 23:xt.setYAxisBottomText(Qe[kt]);break;case 24:xt.setQuadrant1Text(Qe[kt]);break;case 25:xt.setQuadrant2Text(Qe[kt]);break;case 26:xt.setQuadrant3Text(Qe[kt]);break;case 27:xt.setQuadrant4Text(Qe[kt]);break;case 31:this.$={text:Qe[kt],type:"text"};break;case 32:this.$={text:Qe[kt-1].text+""+Qe[kt],type:Qe[kt-1].type};break;case 33:this.$={text:Qe[kt],type:"text"};break;case 34:this.$={text:Qe[kt],type:"markdown"};break;case 35:this.$=Qe[kt];break;case 36:this.$=Qe[kt-1]+""+Qe[kt];break}},table:[{3:1,4:2,5:s,6:u,32:d,33:p,34:v},{1:[3]},{3:8,4:2,5:s,6:u,32:d,33:p,34:v},{3:9,4:2,5:s,6:u,32:d,33:p,34:v},i(b,[2,4],{7:10}),i(y,[2,28]),i(y,[2,29]),i(y,[2,30]),{1:[2,1]},{1:[2,2]},i(T,_,{8:11,9:12,10:14,11:15,12:16,21:28,35:29,1:[2,3],5:A,13:P,15:R,17:F,19:j,20:K,25:ee,27:ie,28:oe,29:pe,30:be,31:ae,37:ne,38:se,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se}),i(b,[2,5]),{4:43,32:d,33:p,34:v},i(T,_,{10:14,11:15,12:16,21:28,35:29,9:44,5:A,13:P,15:R,17:F,19:j,20:K,25:ee,27:ie,28:oe,29:pe,30:be,31:ae,37:ne,38:se,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se}),i(T,[2,9]),i(T,[2,10]),i(T,[2,11]),{14:[1,45]},{16:[1,46]},{18:[1,47]},i(T,[2,15]),i(T,[2,16]),{21:48,35:29,37:ne,38:se,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se},{21:49,35:29,37:ne,38:se,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se},{21:50,35:29,37:ne,38:se,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se},{21:51,35:29,37:ne,38:se,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se},{21:52,35:29,37:ne,38:se,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se},{21:53,35:29,37:ne,38:se,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se},{5:Ce,22:[1,54],35:56,36:55,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se,51:ke},i(Ke,[2,31]),i(Ke,[2,33]),i(Ke,[2,34]),i(Ke,[2,37]),i(Ke,[2,38]),i(Ke,[2,39]),i(Ke,[2,40]),i(Ke,[2,41]),i(Ke,[2,42]),i(Ke,[2,43]),i(Ke,[2,44]),i(Ke,[2,45]),i(Ke,[2,46]),i(Ke,[2,47]),i(b,[2,6]),i(T,[2,8]),i(T,[2,12]),i(T,[2,13]),i(T,[2,14]),i(T,[2,20],{36:55,35:56,5:Ce,26:[1,59],40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se,51:ke}),i(T,[2,23],{36:55,35:56,5:Ce,26:[1,60],40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se,51:ke}),i(T,[2,24],{36:55,35:56,5:Ce,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se,51:ke}),i(T,[2,25],{36:55,35:56,5:Ce,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se,51:ke}),i(T,[2,26],{36:55,35:56,5:Ce,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se,51:ke}),i(T,[2,27],{36:55,35:56,5:Ce,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se,51:ke}),{23:[1,61]},i(Ke,[2,32]),i(Ke,[2,48]),i(Ke,[2,49]),i(Ke,[2,50]),i(T,[2,19],{35:29,21:62,37:ne,38:se,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se}),i(T,[2,22],{35:29,21:63,37:ne,38:se,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se}),{24:[1,64]},i(T,[2,18],{36:55,35:56,5:Ce,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se,51:ke}),i(T,[2,21],{36:55,35:56,5:Ce,40:de,41:X,42:ge,43:W,44:xe,45:U,46:Fe,47:Pe,48:je,49:Ie,50:Se,51:ke}),i(T,[2,17])],defaultActions:{8:[2,1],9:[2,2]},parseError:function(Et,Gt){if(Gt.recoverable)this.trace(Et);else{var ln=new Error(Et);throw ln.hash=Gt,ln}},parse:function(Et){var Gt=this,ln=[0],xt=[],Pt=[null],Qe=[],Dt=this.table,kt="",On=0,ht=0,zr=2,yt=1,ji=Qe.slice.call(arguments,1),xi=Object.create(this.lexer),Ma={yy:{}};for(var zs in this.yy)Object.prototype.hasOwnProperty.call(this.yy,zs)&&(Ma.yy[zs]=this.yy[zs]);xi.setInput(Et,Ma.yy),Ma.yy.lexer=xi,Ma.yy.parser=this,typeof xi.yylloc>"u"&&(xi.yylloc={});var ao=xi.yylloc;Qe.push(ao);var Tr=xi.options&&xi.options.ranges;typeof Ma.yy.parseError=="function"?this.parseError=Ma.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Fn(){var Pa;return Pa=xt.pop()||xi.lex()||yt,typeof Pa!="number"&&(Pa instanceof Array&&(xt=Pa,Pa=xt.pop()),Pa=Gt.symbols_[Pa]||Pa),Pa}for(var qn,Un,At,wt,on={},fn,An,oo,jo;;){if(Un=ln[ln.length-1],this.defaultActions[Un]?At=this.defaultActions[Un]:((qn===null||typeof qn>"u")&&(qn=Fn()),At=Dt[Un]&&Dt[Un][qn]),typeof At>"u"||!At.length||!At[0]){var $o="";jo=[];for(fn in Dt[Un])this.terminals_[fn]&&fn>zr&&jo.push("'"+this.terminals_[fn]+"'");xi.showPosition?$o="Parse error on line "+(On+1)+`: -`+xi.showPosition()+` -Expecting `+jo.join(", ")+", got '"+(this.terminals_[qn]||qn)+"'":$o="Parse error on line "+(On+1)+": Unexpected "+(qn==yt?"end of input":"'"+(this.terminals_[qn]||qn)+"'"),this.parseError($o,{text:xi.match,token:this.terminals_[qn]||qn,line:xi.yylineno,loc:ao,expected:jo})}if(At[0]instanceof Array&&At.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Un+", token: "+qn);switch(At[0]){case 1:ln.push(qn),Pt.push(xi.yytext),Qe.push(xi.yylloc),ln.push(At[1]),qn=null,ht=xi.yyleng,kt=xi.yytext,On=xi.yylineno,ao=xi.yylloc;break;case 2:if(An=this.productions_[At[1]][1],on.$=Pt[Pt.length-An],on._$={first_line:Qe[Qe.length-(An||1)].first_line,last_line:Qe[Qe.length-1].last_line,first_column:Qe[Qe.length-(An||1)].first_column,last_column:Qe[Qe.length-1].last_column},Tr&&(on._$.range=[Qe[Qe.length-(An||1)].range[0],Qe[Qe.length-1].range[1]]),wt=this.performAction.apply(on,[kt,ht,On,Ma.yy,At[1],Pt,Qe].concat(ji)),typeof wt<"u")return wt;An&&(ln=ln.slice(0,-1*An*2),Pt=Pt.slice(0,-1*An),Qe=Qe.slice(0,-1*An)),ln.push(this.productions_[At[1]][0]),Pt.push(on.$),Qe.push(on._$),oo=Dt[ln[ln.length-2]][ln[ln.length-1]],ln.push(oo);break;case 3:return!0}}return!0}},Ne=function(){var _t={EOF:1,parseError:function(Gt,ln){if(this.yy.parser)this.yy.parser.parseError(Gt,ln);else throw new Error(Gt)},setInput:function(Et,Gt){return this.yy=Gt||this.yy||{},this._input=Et,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var Et=this._input[0];this.yytext+=Et,this.yyleng++,this.offset++,this.match+=Et,this.matched+=Et;var Gt=Et.match(/(?:\r\n?|\n).*/g);return Gt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Et},unput:function(Et){var Gt=Et.length,ln=Et.split(/(?:\r\n?|\n)/g);this._input=Et+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Gt),this.offset-=Gt;var xt=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ln.length-1&&(this.yylineno-=ln.length-1);var Pt=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ln?(ln.length===xt.length?this.yylloc.first_column:0)+xt[xt.length-ln.length].length-ln[0].length:this.yylloc.first_column-Gt},this.options.ranges&&(this.yylloc.range=[Pt[0],Pt[0]+this.yyleng-Gt]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(Et){this.unput(this.match.slice(Et))},pastInput:function(){var Et=this.matched.substr(0,this.matched.length-this.match.length);return(Et.length>20?"...":"")+Et.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Et=this.match;return Et.length<20&&(Et+=this._input.substr(0,20-Et.length)),(Et.substr(0,20)+(Et.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Et=this.pastInput(),Gt=new Array(Et.length+1).join("-");return Et+this.upcomingInput()+` -`+Gt+"^"},test_match:function(Et,Gt){var ln,xt,Pt;if(this.options.backtrack_lexer&&(Pt={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Pt.yylloc.range=this.yylloc.range.slice(0))),xt=Et[0].match(/(?:\r\n?|\n).*/g),xt&&(this.yylineno+=xt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:xt?xt[xt.length-1].length-xt[xt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Et[0].length},this.yytext+=Et[0],this.match+=Et[0],this.matches=Et,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Et[0].length),this.matched+=Et[0],ln=this.performAction.call(this,this.yy,this,Gt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ln)return ln;if(this._backtrack){for(var Qe in Pt)this[Qe]=Pt[Qe];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Et,Gt,ln,xt;this._more||(this.yytext="",this.match="");for(var Pt=this._currentRules(),Qe=0;QeGt[0].length)){if(Gt=ln,xt=Qe,this.options.backtrack_lexer){if(Et=this.test_match(ln,Pt[Qe]),Et!==!1)return Et;if(this._backtrack){Gt=!1;continue}else return!1}else if(!this.options.flex)break}return Gt?(Et=this.test_match(Gt,Pt[xt]),Et!==!1?Et:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Gt=this.next();return Gt||this.lex()},begin:function(Gt){this.conditionStack.push(Gt)},popState:function(){var Gt=this.conditionStack.length-1;return Gt>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Gt){return Gt=this.conditionStack.length-1-Math.abs(Gt||0),Gt>=0?this.conditionStack[Gt]:"INITIAL"},pushState:function(Gt){this.begin(Gt)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(Gt,ln,xt,Pt){switch(xt){case 0:break;case 1:break;case 2:return 32;case 3:break;case 4:return this.begin("title"),13;case 5:return this.popState(),"title_value";case 6:return this.begin("acc_title"),15;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),17;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 25;case 14:return 27;case 15:return 26;case 16:return 28;case 17:return 29;case 18:return 30;case 19:return 31;case 20:this.begin("md_string");break;case 21:return"MD_STR";case 22:this.popState();break;case 23:this.begin("string");break;case 24:this.popState();break;case 25:return"STR";case 26:return this.begin("point_start"),22;case 27:return this.begin("point_x"),23;case 28:this.popState();break;case 29:this.popState(),this.begin("point_y");break;case 30:return this.popState(),24;case 31:return 6;case 32:return 43;case 33:return"COLON";case 34:return 45;case 35:return 44;case 36:return 46;case 37:return 46;case 38:return 47;case 39:return 49;case 40:return 50;case 41:return 48;case 42:return 41;case 43:return 51;case 44:return 42;case 45:return 5;case 46:return 33;case 47:return 40;case 48:return 34}},rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?: *x-axis *)/i,/^(?: *y-axis *)/i,/^(?: *--+> *)/i,/^(?: *quadrant-1 *)/i,/^(?: *quadrant-2 *)/i,/^(?: *quadrant-3 *)/i,/^(?: *quadrant-4 *)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:\s*:\s*\[\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?:\s*\] *)/i,/^(?:\s*,\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?: *quadrantChart *)/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s)/i,/^(?:;)/i,/^(?:[!"#$%&'*+,-.`?\\_/])/i,/^(?:$)/i],conditions:{point_y:{rules:[30],inclusive:!1},point_x:{rules:[29],inclusive:!1},point_start:{rules:[27,28],inclusive:!1},acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},title:{rules:[5],inclusive:!1},md_string:{rules:[21,22],inclusive:!1},string:{rules:[24,25],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,6,8,10,13,14,15,16,17,18,19,20,23,26,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],inclusive:!0}}};return _t}();Ft.lexer=Ne;function gn(){this.yy={}}return gn.prototype=Ft,Ft.Parser=gn,new gn}();fve.parser=fve;const Tnn=fve,Pp=f2e();class Cnn{constructor(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData()}getDefaultData(){return{titleText:"",quadrant1Text:"",quadrant2Text:"",quadrant3Text:"",quadrant4Text:"",xAxisLeftText:"",xAxisRightText:"",yAxisBottomText:"",yAxisTopText:"",points:[]}}getDefaultConfig(){var s,u,d,p,v,b,y,T,_,A,P,R,F,j,K,ee,ie,oe;return{showXAxis:!0,showYAxis:!0,showTitle:!0,chartHeight:((s=sh.quadrantChart)==null?void 0:s.chartWidth)||500,chartWidth:((u=sh.quadrantChart)==null?void 0:u.chartHeight)||500,titlePadding:((d=sh.quadrantChart)==null?void 0:d.titlePadding)||10,titleFontSize:((p=sh.quadrantChart)==null?void 0:p.titleFontSize)||20,quadrantPadding:((v=sh.quadrantChart)==null?void 0:v.quadrantPadding)||5,xAxisLabelPadding:((b=sh.quadrantChart)==null?void 0:b.xAxisLabelPadding)||5,yAxisLabelPadding:((y=sh.quadrantChart)==null?void 0:y.yAxisLabelPadding)||5,xAxisLabelFontSize:((T=sh.quadrantChart)==null?void 0:T.xAxisLabelFontSize)||16,yAxisLabelFontSize:((_=sh.quadrantChart)==null?void 0:_.yAxisLabelFontSize)||16,quadrantLabelFontSize:((A=sh.quadrantChart)==null?void 0:A.quadrantLabelFontSize)||16,quadrantTextTopPadding:((P=sh.quadrantChart)==null?void 0:P.quadrantTextTopPadding)||5,pointTextPadding:((R=sh.quadrantChart)==null?void 0:R.pointTextPadding)||5,pointLabelFontSize:((F=sh.quadrantChart)==null?void 0:F.pointLabelFontSize)||12,pointRadius:((j=sh.quadrantChart)==null?void 0:j.pointRadius)||5,xAxisPosition:((K=sh.quadrantChart)==null?void 0:K.xAxisPosition)||"top",yAxisPosition:((ee=sh.quadrantChart)==null?void 0:ee.yAxisPosition)||"left",quadrantInternalBorderStrokeWidth:((ie=sh.quadrantChart)==null?void 0:ie.quadrantInternalBorderStrokeWidth)||1,quadrantExternalBorderStrokeWidth:((oe=sh.quadrantChart)==null?void 0:oe.quadrantExternalBorderStrokeWidth)||2}}getDefaultThemeConfig(){return{quadrant1Fill:Pp.quadrant1Fill,quadrant2Fill:Pp.quadrant2Fill,quadrant3Fill:Pp.quadrant3Fill,quadrant4Fill:Pp.quadrant4Fill,quadrant1TextFill:Pp.quadrant1TextFill,quadrant2TextFill:Pp.quadrant2TextFill,quadrant3TextFill:Pp.quadrant3TextFill,quadrant4TextFill:Pp.quadrant4TextFill,quadrantPointFill:Pp.quadrantPointFill,quadrantPointTextFill:Pp.quadrantPointTextFill,quadrantXAxisTextFill:Pp.quadrantXAxisTextFill,quadrantYAxisTextFill:Pp.quadrantYAxisTextFill,quadrantTitleFill:Pp.quadrantTitleFill,quadrantInternalBorderStrokeFill:Pp.quadrantInternalBorderStrokeFill,quadrantExternalBorderStrokeFill:Pp.quadrantExternalBorderStrokeFill}}clear(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData(),Xe.info("clear called")}setData(s){this.data={...this.data,...s}}addPoints(s){this.data.points=[...s,...this.data.points]}setConfig(s){Xe.trace("setConfig called with: ",s),this.config={...this.config,...s}}setThemeConfig(s){Xe.trace("setThemeConfig called with: ",s),this.themeConfig={...this.themeConfig,...s}}calculateSpace(s,u,d,p){const v=this.config.xAxisLabelPadding*2+this.config.xAxisLabelFontSize,b={top:s==="top"&&u?v:0,bottom:s==="bottom"&&u?v:0},y=this.config.yAxisLabelPadding*2+this.config.yAxisLabelFontSize,T={left:this.config.yAxisPosition==="left"&&d?y:0,right:this.config.yAxisPosition==="right"&&d?y:0},_=this.config.titleFontSize+this.config.titlePadding*2,A={top:p?_:0},P=this.config.quadrantPadding+T.left,R=this.config.quadrantPadding+b.top+A.top,F=this.config.chartWidth-this.config.quadrantPadding*2-T.left-T.right,j=this.config.chartHeight-this.config.quadrantPadding*2-b.top-b.bottom-A.top,K=F/2,ee=j/2;return{xAxisSpace:b,yAxisSpace:T,titleSpace:A,quadrantSpace:{quadrantLeft:P,quadrantTop:R,quadrantWidth:F,quadrantHalfWidth:K,quadrantHeight:j,quadrantHalfHeight:ee}}}getAxisLabels(s,u,d,p){const{quadrantSpace:v,titleSpace:b}=p,{quadrantHalfHeight:y,quadrantHeight:T,quadrantLeft:_,quadrantHalfWidth:A,quadrantTop:P,quadrantWidth:R}=v,F=!!this.data.xAxisRightText,j=!!this.data.yAxisTopText,K=[];return this.data.xAxisLeftText&&u&&K.push({text:this.data.xAxisLeftText,fill:this.themeConfig.quadrantXAxisTextFill,x:_+(F?A/2:0),y:s==="top"?this.config.xAxisLabelPadding+b.top:this.config.xAxisLabelPadding+P+T+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:F?"center":"left",horizontalPos:"top",rotation:0}),this.data.xAxisRightText&&u&&K.push({text:this.data.xAxisRightText,fill:this.themeConfig.quadrantXAxisTextFill,x:_+A+(F?A/2:0),y:s==="top"?this.config.xAxisLabelPadding+b.top:this.config.xAxisLabelPadding+P+T+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:F?"center":"left",horizontalPos:"top",rotation:0}),this.data.yAxisBottomText&&d&&K.push({text:this.data.yAxisBottomText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+_+R+this.config.quadrantPadding,y:P+T-(j?y/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:j?"center":"left",horizontalPos:"top",rotation:-90}),this.data.yAxisTopText&&d&&K.push({text:this.data.yAxisTopText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+_+R+this.config.quadrantPadding,y:P+y-(j?y/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:j?"center":"left",horizontalPos:"top",rotation:-90}),K}getQuadrants(s){const{quadrantSpace:u}=s,{quadrantHalfHeight:d,quadrantLeft:p,quadrantHalfWidth:v,quadrantTop:b}=u,y=[{text:{text:this.data.quadrant1Text,fill:this.themeConfig.quadrant1TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:p+v,y:b,width:v,height:d,fill:this.themeConfig.quadrant1Fill},{text:{text:this.data.quadrant2Text,fill:this.themeConfig.quadrant2TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:p,y:b,width:v,height:d,fill:this.themeConfig.quadrant2Fill},{text:{text:this.data.quadrant3Text,fill:this.themeConfig.quadrant3TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:p,y:b+d,width:v,height:d,fill:this.themeConfig.quadrant3Fill},{text:{text:this.data.quadrant4Text,fill:this.themeConfig.quadrant4TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:p+v,y:b+d,width:v,height:d,fill:this.themeConfig.quadrant4Fill}];for(const T of y)T.text.x=T.x+T.width/2,this.data.points.length===0?(T.text.y=T.y+T.height/2,T.text.horizontalPos="middle"):(T.text.y=T.y+this.config.quadrantTextTopPadding,T.text.horizontalPos="top");return y}getQuadrantPoints(s){const{quadrantSpace:u}=s,{quadrantHeight:d,quadrantLeft:p,quadrantTop:v,quadrantWidth:b}=u,y=sD().domain([0,1]).range([p,b+p]),T=sD().domain([0,1]).range([d+v,v]);return this.data.points.map(A=>({x:y(A.x),y:T(A.y),fill:this.themeConfig.quadrantPointFill,radius:this.config.pointRadius,text:{text:A.text,fill:this.themeConfig.quadrantPointTextFill,x:y(A.x),y:T(A.y)+this.config.pointTextPadding,verticalPos:"center",horizontalPos:"top",fontSize:this.config.pointLabelFontSize,rotation:0}}))}getBorders(s){const u=this.config.quadrantExternalBorderStrokeWidth/2,{quadrantSpace:d}=s,{quadrantHalfHeight:p,quadrantHeight:v,quadrantLeft:b,quadrantHalfWidth:y,quadrantTop:T,quadrantWidth:_}=d;return[{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:b-u,y1:T,x2:b+_+u,y2:T},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:b+_,y1:T+u,x2:b+_,y2:T+v-u},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:b-u,y1:T+v,x2:b+_+u,y2:T+v},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:b,y1:T+u,x2:b,y2:T+v-u},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:b+y,y1:T+u,x2:b+y,y2:T+v-u},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:b+u,y1:T+p,x2:b+_-u,y2:T+p}]}getTitle(s){if(s)return{text:this.data.titleText,fill:this.themeConfig.quadrantTitleFill,fontSize:this.config.titleFontSize,horizontalPos:"top",verticalPos:"center",rotation:0,y:this.config.titlePadding,x:this.config.chartWidth/2}}build(){const s=this.config.showXAxis&&!!(this.data.xAxisLeftText||this.data.xAxisRightText),u=this.config.showYAxis&&!!(this.data.yAxisTopText||this.data.yAxisBottomText),d=this.config.showTitle&&!!this.data.titleText,p=this.data.points.length>0?"bottom":this.config.xAxisPosition,v=this.calculateSpace(p,s,u,d);return{points:this.getQuadrantPoints(v),quadrants:this.getQuadrants(v),axisLabels:this.getAxisLabels(p,s,u,v),borderLines:this.getBorders(v),title:this.getTitle(d)}}}const Snn=qt();function U7(i){return Yf(i.trim(),Snn)}const Rg=new Cnn;function _nn(i){Rg.setData({quadrant1Text:U7(i.text)})}function Ann(i){Rg.setData({quadrant2Text:U7(i.text)})}function Lnn(i){Rg.setData({quadrant3Text:U7(i.text)})}function Mnn(i){Rg.setData({quadrant4Text:U7(i.text)})}function Dnn(i){Rg.setData({xAxisLeftText:U7(i.text)})}function Inn(i){Rg.setData({xAxisRightText:U7(i.text)})}function Onn(i){Rg.setData({yAxisTopText:U7(i.text)})}function Nnn(i){Rg.setData({yAxisBottomText:U7(i.text)})}function Pnn(i,s,u){Rg.addPoints([{x:s,y:u,text:U7(i.text)}])}function Bnn(i){Rg.setConfig({chartWidth:i})}function Fnn(i){Rg.setConfig({chartHeight:i})}function Rnn(){const i=qt(),{themeVariables:s,quadrantChart:u}=i;return u&&Rg.setConfig(u),Rg.setThemeConfig({quadrant1Fill:s.quadrant1Fill,quadrant2Fill:s.quadrant2Fill,quadrant3Fill:s.quadrant3Fill,quadrant4Fill:s.quadrant4Fill,quadrant1TextFill:s.quadrant1TextFill,quadrant2TextFill:s.quadrant2TextFill,quadrant3TextFill:s.quadrant3TextFill,quadrant4TextFill:s.quadrant4TextFill,quadrantPointFill:s.quadrantPointFill,quadrantPointTextFill:s.quadrantPointTextFill,quadrantXAxisTextFill:s.quadrantXAxisTextFill,quadrantYAxisTextFill:s.quadrantYAxisTextFill,quadrantExternalBorderStrokeFill:s.quadrantExternalBorderStrokeFill,quadrantInternalBorderStrokeFill:s.quadrantInternalBorderStrokeFill,quadrantTitleFill:s.quadrantTitleFill}),Rg.setData({titleText:Ap()}),Rg.build()}const jnn=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:Tnn,db:{setWidth:Bnn,setHeight:Fnn,setQuadrant1Text:_nn,setQuadrant2Text:Ann,setQuadrant3Text:Lnn,setQuadrant4Text:Mnn,setXAxisLeftText:Dnn,setXAxisRightText:Inn,setYAxisTopText:Onn,setYAxisBottomText:Nnn,addPoint:Pnn,getQuadrantData:Rnn,clear:function(){Rg.clear(),Pg()},setAccTitle:Bg,getAccTitle:Cp,setDiagramTitle:cm,getDiagramTitle:Ap,getAccDescription:_p,setAccDescription:Sp},renderer:{draw:(i,s,u,d)=>{var de,X,ge;function p(W){return W==="top"?"hanging":"middle"}function v(W){return W==="left"?"start":"middle"}function b(W){return`translate(${W.x}, ${W.y}) rotate(${W.rotation||0})`}const y=qt();Xe.debug(`Rendering quadrant chart -`+i);const T=y.securityLevel;let _;T==="sandbox"&&(_=Ir("#i"+s));const P=Ir(T==="sandbox"?_.nodes()[0].contentDocument.body:"body").select(`[id="${s}"]`),R=P.append("g").attr("class","main"),F=((de=y.quadrantChart)==null?void 0:de.chartWidth)||500,j=((X=y.quadrantChart)==null?void 0:X.chartHeight)||500;Ng(P,j,F,((ge=y.quadrantChart)==null?void 0:ge.useMaxWidth)||!0),P.attr("viewBox","0 0 "+F+" "+j),d.db.setHeight(j),d.db.setWidth(F);const K=d.db.getQuadrantData(),ee=R.append("g").attr("class","quadrants"),ie=R.append("g").attr("class","border"),oe=R.append("g").attr("class","data-points"),pe=R.append("g").attr("class","labels"),be=R.append("g").attr("class","title");K.title&&be.append("text").attr("x",0).attr("y",0).attr("fill",K.title.fill).attr("font-size",K.title.fontSize).attr("dominant-baseline",p(K.title.horizontalPos)).attr("text-anchor",v(K.title.verticalPos)).attr("transform",b(K.title)).text(K.title.text),K.borderLines&&ie.selectAll("line").data(K.borderLines).enter().append("line").attr("x1",W=>W.x1).attr("y1",W=>W.y1).attr("x2",W=>W.x2).attr("y2",W=>W.y2).style("stroke",W=>W.strokeFill).style("stroke-width",W=>W.strokeWidth);const ae=ee.selectAll("g.quadrant").data(K.quadrants).enter().append("g").attr("class","quadrant");ae.append("rect").attr("x",W=>W.x).attr("y",W=>W.y).attr("width",W=>W.width).attr("height",W=>W.height).attr("fill",W=>W.fill),ae.append("text").attr("x",0).attr("y",0).attr("fill",W=>W.text.fill).attr("font-size",W=>W.text.fontSize).attr("dominant-baseline",W=>p(W.text.horizontalPos)).attr("text-anchor",W=>v(W.text.verticalPos)).attr("transform",W=>b(W.text)).text(W=>W.text.text),pe.selectAll("g.label").data(K.axisLabels).enter().append("g").attr("class","label").append("text").attr("x",0).attr("y",0).text(W=>W.text).attr("fill",W=>W.fill).attr("font-size",W=>W.fontSize).attr("dominant-baseline",W=>p(W.horizontalPos)).attr("text-anchor",W=>v(W.verticalPos)).attr("transform",W=>b(W));const se=oe.selectAll("g.data-point").data(K.points).enter().append("g").attr("class","data-point");se.append("circle").attr("cx",W=>W.x).attr("cy",W=>W.y).attr("r",W=>W.radius).attr("fill",W=>W.fill),se.append("text").attr("x",0).attr("y",0).text(W=>W.text.text).attr("fill",W=>W.text.fill).attr("font-size",W=>W.text.fontSize).attr("dominant-baseline",W=>p(W.text.horizontalPos)).attr("text-anchor",W=>v(W.text.verticalPos)).attr("transform",W=>b(W.text))}},styles:()=>""}},Symbol.toStringTag,{value:"Module"}));var dve=function(){var i=function(Pe,je,Ie,Se){for(Ie=Ie||{},Se=Pe.length;Se--;Ie[Pe[Se]]=je);return Ie},s=[1,10,12,14,16,18,19,21,23],u=[2,6],d=[1,3],p=[1,5],v=[1,6],b=[1,7],y=[1,5,10,12,14,16,18,19,21,23,34,35,36],T=[1,25],_=[1,26],A=[1,28],P=[1,29],R=[1,30],F=[1,31],j=[1,32],K=[1,33],ee=[1,34],ie=[1,35],oe=[1,36],pe=[1,37],be=[1,43],ae=[1,42],ne=[1,47],se=[1,50],de=[1,10,12,14,16,18,19,21,23,34,35,36],X=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36],ge=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36,41,42,43,44,45,46,47,48,49,50],W=[1,64],xe={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,XYCHART:5,chartConfig:6,document:7,CHART_ORIENTATION:8,statement:9,title:10,text:11,X_AXIS:12,parseXAxis:13,Y_AXIS:14,parseYAxis:15,LINE:16,plotData:17,BAR:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,SQUARE_BRACES_START:24,commaSeparatedNumbers:25,SQUARE_BRACES_END:26,NUMBER_WITH_DECIMAL:27,COMMA:28,xAxisData:29,bandData:30,ARROW_DELIMITER:31,commaSeparatedTexts:32,yAxisData:33,NEWLINE:34,SEMI:35,EOF:36,alphaNum:37,STR:38,MD_STR:39,alphaNumToken:40,AMP:41,NUM:42,ALPHA:43,PLUS:44,EQUALS:45,MULT:46,DOT:47,BRKT:48,MINUS:49,UNDERSCORE:50,$accept:0,$end:1},terminals_:{2:"error",5:"XYCHART",8:"CHART_ORIENTATION",10:"title",12:"X_AXIS",14:"Y_AXIS",16:"LINE",18:"BAR",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"SQUARE_BRACES_START",26:"SQUARE_BRACES_END",27:"NUMBER_WITH_DECIMAL",28:"COMMA",31:"ARROW_DELIMITER",34:"NEWLINE",35:"SEMI",36:"EOF",38:"STR",39:"MD_STR",41:"AMP",42:"NUM",43:"ALPHA",44:"PLUS",45:"EQUALS",46:"MULT",47:"DOT",48:"BRKT",49:"MINUS",50:"UNDERSCORE"},productions_:[0,[3,2],[3,3],[3,2],[3,1],[6,1],[7,0],[7,2],[9,2],[9,2],[9,2],[9,2],[9,2],[9,3],[9,2],[9,3],[9,2],[9,2],[9,1],[17,3],[25,3],[25,1],[13,1],[13,2],[13,1],[29,1],[29,3],[30,3],[32,3],[32,1],[15,1],[15,2],[15,1],[33,3],[4,1],[4,1],[4,1],[11,1],[11,1],[11,1],[37,1],[37,2],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1]],performAction:function(je,Ie,Se,Ce,ke,Ke,Ft){var Ne=Ke.length-1;switch(ke){case 5:Ce.setOrientation(Ke[Ne]);break;case 9:Ce.setDiagramTitle(Ke[Ne].text.trim());break;case 12:Ce.setLineData({text:"",type:"text"},Ke[Ne]);break;case 13:Ce.setLineData(Ke[Ne-1],Ke[Ne]);break;case 14:Ce.setBarData({text:"",type:"text"},Ke[Ne]);break;case 15:Ce.setBarData(Ke[Ne-1],Ke[Ne]);break;case 16:this.$=Ke[Ne].trim(),Ce.setAccTitle(this.$);break;case 17:case 18:this.$=Ke[Ne].trim(),Ce.setAccDescription(this.$);break;case 19:this.$=Ke[Ne-1];break;case 20:this.$=[Number(Ke[Ne-2]),...Ke[Ne]];break;case 21:this.$=[Number(Ke[Ne])];break;case 22:Ce.setXAxisTitle(Ke[Ne]);break;case 23:Ce.setXAxisTitle(Ke[Ne-1]);break;case 24:Ce.setXAxisTitle({type:"text",text:""});break;case 25:Ce.setXAxisBand(Ke[Ne]);break;case 26:Ce.setXAxisRangeData(Number(Ke[Ne-2]),Number(Ke[Ne]));break;case 27:this.$=Ke[Ne-1];break;case 28:this.$=[Ke[Ne-2],...Ke[Ne]];break;case 29:this.$=[Ke[Ne]];break;case 30:Ce.setYAxisTitle(Ke[Ne]);break;case 31:Ce.setYAxisTitle(Ke[Ne-1]);break;case 32:Ce.setYAxisTitle({type:"text",text:""});break;case 33:Ce.setYAxisRangeData(Number(Ke[Ne-2]),Number(Ke[Ne]));break;case 37:this.$={text:Ke[Ne],type:"text"};break;case 38:this.$={text:Ke[Ne],type:"text"};break;case 39:this.$={text:Ke[Ne],type:"markdown"};break;case 40:this.$=Ke[Ne];break;case 41:this.$=Ke[Ne-1]+""+Ke[Ne];break}},table:[i(s,u,{3:1,4:2,7:4,5:d,34:p,35:v,36:b}),{1:[3]},i(s,u,{4:2,7:4,3:8,5:d,34:p,35:v,36:b}),i(s,u,{4:2,7:4,6:9,3:10,5:d,8:[1,11],34:p,35:v,36:b}),{1:[2,4],9:12,10:[1,13],12:[1,14],14:[1,15],16:[1,16],18:[1,17],19:[1,18],21:[1,19],23:[1,20]},i(y,[2,34]),i(y,[2,35]),i(y,[2,36]),{1:[2,1]},i(s,u,{4:2,7:4,3:21,5:d,34:p,35:v,36:b}),{1:[2,3]},i(y,[2,5]),i(s,[2,7],{4:22,34:p,35:v,36:b}),{11:23,37:24,38:T,39:_,40:27,41:A,42:P,43:R,44:F,45:j,46:K,47:ee,48:ie,49:oe,50:pe},{11:39,13:38,24:be,27:ae,29:40,30:41,37:24,38:T,39:_,40:27,41:A,42:P,43:R,44:F,45:j,46:K,47:ee,48:ie,49:oe,50:pe},{11:45,15:44,27:ne,33:46,37:24,38:T,39:_,40:27,41:A,42:P,43:R,44:F,45:j,46:K,47:ee,48:ie,49:oe,50:pe},{11:49,17:48,24:se,37:24,38:T,39:_,40:27,41:A,42:P,43:R,44:F,45:j,46:K,47:ee,48:ie,49:oe,50:pe},{11:52,17:51,24:se,37:24,38:T,39:_,40:27,41:A,42:P,43:R,44:F,45:j,46:K,47:ee,48:ie,49:oe,50:pe},{20:[1,53]},{22:[1,54]},i(de,[2,18]),{1:[2,2]},i(de,[2,8]),i(de,[2,9]),i(X,[2,37],{40:55,41:A,42:P,43:R,44:F,45:j,46:K,47:ee,48:ie,49:oe,50:pe}),i(X,[2,38]),i(X,[2,39]),i(ge,[2,40]),i(ge,[2,42]),i(ge,[2,43]),i(ge,[2,44]),i(ge,[2,45]),i(ge,[2,46]),i(ge,[2,47]),i(ge,[2,48]),i(ge,[2,49]),i(ge,[2,50]),i(ge,[2,51]),i(de,[2,10]),i(de,[2,22],{30:41,29:56,24:be,27:ae}),i(de,[2,24]),i(de,[2,25]),{31:[1,57]},{11:59,32:58,37:24,38:T,39:_,40:27,41:A,42:P,43:R,44:F,45:j,46:K,47:ee,48:ie,49:oe,50:pe},i(de,[2,11]),i(de,[2,30],{33:60,27:ne}),i(de,[2,32]),{31:[1,61]},i(de,[2,12]),{17:62,24:se},{25:63,27:W},i(de,[2,14]),{17:65,24:se},i(de,[2,16]),i(de,[2,17]),i(ge,[2,41]),i(de,[2,23]),{27:[1,66]},{26:[1,67]},{26:[2,29],28:[1,68]},i(de,[2,31]),{27:[1,69]},i(de,[2,13]),{26:[1,70]},{26:[2,21],28:[1,71]},i(de,[2,15]),i(de,[2,26]),i(de,[2,27]),{11:59,32:72,37:24,38:T,39:_,40:27,41:A,42:P,43:R,44:F,45:j,46:K,47:ee,48:ie,49:oe,50:pe},i(de,[2,33]),i(de,[2,19]),{25:73,27:W},{26:[2,28]},{26:[2,20]}],defaultActions:{8:[2,1],10:[2,3],21:[2,2],72:[2,28],73:[2,20]},parseError:function(je,Ie){if(Ie.recoverable)this.trace(je);else{var Se=new Error(je);throw Se.hash=Ie,Se}},parse:function(je){var Ie=this,Se=[0],Ce=[],ke=[null],Ke=[],Ft=this.table,Ne="",gn=0,_t=0,Et=2,Gt=1,ln=Ke.slice.call(arguments,1),xt=Object.create(this.lexer),Pt={yy:{}};for(var Qe in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Qe)&&(Pt.yy[Qe]=this.yy[Qe]);xt.setInput(je,Pt.yy),Pt.yy.lexer=xt,Pt.yy.parser=this,typeof xt.yylloc>"u"&&(xt.yylloc={});var Dt=xt.yylloc;Ke.push(Dt);var kt=xt.options&&xt.options.ranges;typeof Pt.yy.parseError=="function"?this.parseError=Pt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function On(){var qn;return qn=Ce.pop()||xt.lex()||Gt,typeof qn!="number"&&(qn instanceof Array&&(Ce=qn,qn=Ce.pop()),qn=Ie.symbols_[qn]||qn),qn}for(var ht,zr,yt,ji,xi={},Ma,zs,ao,Tr;;){if(zr=Se[Se.length-1],this.defaultActions[zr]?yt=this.defaultActions[zr]:((ht===null||typeof ht>"u")&&(ht=On()),yt=Ft[zr]&&Ft[zr][ht]),typeof yt>"u"||!yt.length||!yt[0]){var Fn="";Tr=[];for(Ma in Ft[zr])this.terminals_[Ma]&&Ma>Et&&Tr.push("'"+this.terminals_[Ma]+"'");xt.showPosition?Fn="Parse error on line "+(gn+1)+`: -`+xt.showPosition()+` -Expecting `+Tr.join(", ")+", got '"+(this.terminals_[ht]||ht)+"'":Fn="Parse error on line "+(gn+1)+": Unexpected "+(ht==Gt?"end of input":"'"+(this.terminals_[ht]||ht)+"'"),this.parseError(Fn,{text:xt.match,token:this.terminals_[ht]||ht,line:xt.yylineno,loc:Dt,expected:Tr})}if(yt[0]instanceof Array&&yt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+zr+", token: "+ht);switch(yt[0]){case 1:Se.push(ht),ke.push(xt.yytext),Ke.push(xt.yylloc),Se.push(yt[1]),ht=null,_t=xt.yyleng,Ne=xt.yytext,gn=xt.yylineno,Dt=xt.yylloc;break;case 2:if(zs=this.productions_[yt[1]][1],xi.$=ke[ke.length-zs],xi._$={first_line:Ke[Ke.length-(zs||1)].first_line,last_line:Ke[Ke.length-1].last_line,first_column:Ke[Ke.length-(zs||1)].first_column,last_column:Ke[Ke.length-1].last_column},kt&&(xi._$.range=[Ke[Ke.length-(zs||1)].range[0],Ke[Ke.length-1].range[1]]),ji=this.performAction.apply(xi,[Ne,_t,gn,Pt.yy,yt[1],ke,Ke].concat(ln)),typeof ji<"u")return ji;zs&&(Se=Se.slice(0,-1*zs*2),ke=ke.slice(0,-1*zs),Ke=Ke.slice(0,-1*zs)),Se.push(this.productions_[yt[1]][0]),ke.push(xi.$),Ke.push(xi._$),ao=Ft[Se[Se.length-2]][Se[Se.length-1]],Se.push(ao);break;case 3:return!0}}return!0}},U=function(){var Pe={EOF:1,parseError:function(Ie,Se){if(this.yy.parser)this.yy.parser.parseError(Ie,Se);else throw new Error(Ie)},setInput:function(je,Ie){return this.yy=Ie||this.yy||{},this._input=je,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var je=this._input[0];this.yytext+=je,this.yyleng++,this.offset++,this.match+=je,this.matched+=je;var Ie=je.match(/(?:\r\n?|\n).*/g);return Ie?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),je},unput:function(je){var Ie=je.length,Se=je.split(/(?:\r\n?|\n)/g);this._input=je+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ie),this.offset-=Ie;var Ce=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Se.length-1&&(this.yylineno-=Se.length-1);var ke=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Se?(Se.length===Ce.length?this.yylloc.first_column:0)+Ce[Ce.length-Se.length].length-Se[0].length:this.yylloc.first_column-Ie},this.options.ranges&&(this.yylloc.range=[ke[0],ke[0]+this.yyleng-Ie]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(je){this.unput(this.match.slice(je))},pastInput:function(){var je=this.matched.substr(0,this.matched.length-this.match.length);return(je.length>20?"...":"")+je.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var je=this.match;return je.length<20&&(je+=this._input.substr(0,20-je.length)),(je.substr(0,20)+(je.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var je=this.pastInput(),Ie=new Array(je.length+1).join("-");return je+this.upcomingInput()+` -`+Ie+"^"},test_match:function(je,Ie){var Se,Ce,ke;if(this.options.backtrack_lexer&&(ke={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(ke.yylloc.range=this.yylloc.range.slice(0))),Ce=je[0].match(/(?:\r\n?|\n).*/g),Ce&&(this.yylineno+=Ce.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Ce?Ce[Ce.length-1].length-Ce[Ce.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+je[0].length},this.yytext+=je[0],this.match+=je[0],this.matches=je,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(je[0].length),this.matched+=je[0],Se=this.performAction.call(this,this.yy,this,Ie,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Se)return Se;if(this._backtrack){for(var Ke in ke)this[Ke]=ke[Ke];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var je,Ie,Se,Ce;this._more||(this.yytext="",this.match="");for(var ke=this._currentRules(),Ke=0;KeIe[0].length)){if(Ie=Se,Ce=Ke,this.options.backtrack_lexer){if(je=this.test_match(Se,ke[Ke]),je!==!1)return je;if(this._backtrack){Ie=!1;continue}else return!1}else if(!this.options.flex)break}return Ie?(je=this.test_match(Ie,ke[Ce]),je!==!1?je:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Ie=this.next();return Ie||this.lex()},begin:function(Ie){this.conditionStack.push(Ie)},popState:function(){var Ie=this.conditionStack.length-1;return Ie>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Ie){return Ie=this.conditionStack.length-1-Math.abs(Ie||0),Ie>=0?this.conditionStack[Ie]:"INITIAL"},pushState:function(Ie){this.begin(Ie)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(Ie,Se,Ce,ke){switch(Ce){case 0:break;case 1:break;case 2:return this.popState(),34;case 3:return this.popState(),34;case 4:return 34;case 5:break;case 6:return 10;case 7:return this.pushState("acc_title"),19;case 8:return this.popState(),"acc_title_value";case 9:return this.pushState("acc_descr"),21;case 10:return this.popState(),"acc_descr_value";case 11:this.pushState("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 5;case 15:return 8;case 16:return this.pushState("axis_data"),"X_AXIS";case 17:return this.pushState("axis_data"),"Y_AXIS";case 18:return this.pushState("axis_band_data"),24;case 19:return 31;case 20:return this.pushState("data"),16;case 21:return this.pushState("data"),18;case 22:return this.pushState("data_inner"),24;case 23:return 27;case 24:return this.popState(),26;case 25:this.popState();break;case 26:this.pushState("string");break;case 27:this.popState();break;case 28:return"STR";case 29:return 24;case 30:return 26;case 31:return 43;case 32:return"COLON";case 33:return 44;case 34:return 28;case 35:return 45;case 36:return 46;case 37:return 48;case 38:return 50;case 39:return 47;case 40:return 41;case 41:return 49;case 42:return 42;case 43:break;case 44:return 35;case 45:return 36}},rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:(\r?\n))/i,/^(?:(\r?\n))/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:\{)/i,/^(?:[^\}]*)/i,/^(?:xychart-beta\b)/i,/^(?:(?:vertical|horizontal))/i,/^(?:x-axis\b)/i,/^(?:y-axis\b)/i,/^(?:\[)/i,/^(?:-->)/i,/^(?:line\b)/i,/^(?:bar\b)/i,/^(?:\[)/i,/^(?:[+-]?(?:\d+(?:\.\d+)?|\.\d+))/i,/^(?:\])/i,/^(?:(?:`\) \{ this\.pushState\(md_string\); \}\n\(\?:\(\?!`"\)\.\)\+ \{ return MD_STR; \}\n\(\?:`))/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s+)/i,/^(?:;)/i,/^(?:$)/i],conditions:{data_inner:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,23,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},data:{rules:[0,1,3,4,5,6,7,9,11,14,15,16,17,20,21,22,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_band_data:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_data:{rules:[0,1,2,4,5,6,7,9,11,14,15,16,17,18,19,20,21,23,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[],inclusive:!1},md_string:{rules:[],inclusive:!1},string:{rules:[27,28],inclusive:!1},INITIAL:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0}}};return Pe}();xe.lexer=U;function Fe(){this.yy={}}return Fe.prototype=xe,xe.Parser=Fe,new Fe}();dve.parser=dve;const $nn=dve;function fGe(i){return i.type==="bar"}function dGe(i){return i.type==="band"}function $R(i){return i.type==="linear"}class gGe{constructor(s){this.parentGroup=s}getMaxDimension(s,u){if(!this.parentGroup)return{width:s.reduce((v,b)=>Math.max(b.length,v),0)*u,height:u};const d={width:0,height:0},p=this.parentGroup.append("g").attr("visibility","hidden").attr("font-size",u);for(const v of s){const b=RZt(p,1,v),y=b?b.width:v.length*u,T=b?b.height:u;d.width=Math.max(d.width,y),d.height=Math.max(d.height,T)}return p.remove(),d}}const pGe=.7,bGe=.2;class mGe{constructor(s,u,d,p){this.axisConfig=s,this.title=u,this.textDimensionCalculator=d,this.axisThemeConfig=p,this.boundingRect={x:0,y:0,width:0,height:0},this.axisPosition="left",this.showTitle=!1,this.showLabel=!1,this.showTick=!1,this.showAxisLine=!1,this.outerPadding=0,this.titleTextHeight=0,this.labelTextHeight=0,this.range=[0,10],this.boundingRect={x:0,y:0,width:0,height:0},this.axisPosition="left"}setRange(s){this.range=s,this.axisPosition==="left"||this.axisPosition==="right"?this.boundingRect.height=s[1]-s[0]:this.boundingRect.width=s[1]-s[0],this.recalculateScale()}getRange(){return[this.range[0]+this.outerPadding,this.range[1]-this.outerPadding]}setAxisPosition(s){this.axisPosition=s,this.setRange(this.range)}getTickDistance(){const s=this.getRange();return Math.abs(s[0]-s[1])/this.getTickValues().length}getAxisOuterPadding(){return this.outerPadding}getLabelDimension(){return this.textDimensionCalculator.getMaxDimension(this.getTickValues().map(s=>s.toString()),this.axisConfig.labelFontSize)}recalculateOuterPaddingToDrawBar(){pGe*this.getTickDistance()>this.outerPadding*2&&(this.outerPadding=Math.floor(pGe*this.getTickDistance()/2)),this.recalculateScale()}calculateSpaceIfDrawnHorizontally(s){let u=s.height;if(this.axisConfig.showAxisLine&&u>this.axisConfig.axisLineWidth&&(u-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){const d=this.getLabelDimension(),p=bGe*s.width;this.outerPadding=Math.min(d.width/2,p);const v=d.height+this.axisConfig.labelPadding*2;this.labelTextHeight=d.height,v<=u&&(u-=v,this.showLabel=!0)}if(this.axisConfig.showTick&&u>=this.axisConfig.tickLength&&(this.showTick=!0,u-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){const d=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),p=d.height+this.axisConfig.titlePadding*2;this.titleTextHeight=d.height,p<=u&&(u-=p,this.showTitle=!0)}this.boundingRect.width=s.width,this.boundingRect.height=s.height-u}calculateSpaceIfDrawnVertical(s){let u=s.width;if(this.axisConfig.showAxisLine&&u>this.axisConfig.axisLineWidth&&(u-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){const d=this.getLabelDimension(),p=bGe*s.height;this.outerPadding=Math.min(d.height/2,p);const v=d.width+this.axisConfig.labelPadding*2;v<=u&&(u-=v,this.showLabel=!0)}if(this.axisConfig.showTick&&u>=this.axisConfig.tickLength&&(this.showTick=!0,u-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){const d=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),p=d.height+this.axisConfig.titlePadding*2;this.titleTextHeight=d.height,p<=u&&(u-=p,this.showTitle=!0)}this.boundingRect.width=s.width-u,this.boundingRect.height=s.height}calculateSpace(s){return this.axisPosition==="left"||this.axisPosition==="right"?this.calculateSpaceIfDrawnVertical(s):this.calculateSpaceIfDrawnHorizontally(s),this.recalculateScale(),{width:this.boundingRect.width,height:this.boundingRect.height}}setBoundingBoxXY(s){this.boundingRect.x=s.x,this.boundingRect.y=s.y}getDrawableElementsForLeftAxis(){const s=[];if(this.showAxisLine){const u=this.boundingRect.x+this.boundingRect.width-this.axisConfig.axisLineWidth/2;s.push({type:"path",groupTexts:["left-axis","axisl-line"],data:[{path:`M ${u},${this.boundingRect.y} L ${u},${this.boundingRect.y+this.boundingRect.height} `,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&s.push({type:"text",groupTexts:["left-axis","label"],data:this.getTickValues().map(u=>({text:u.toString(),x:this.boundingRect.x+this.boundingRect.width-(this.showLabel?this.axisConfig.labelPadding:0)-(this.showTick?this.axisConfig.tickLength:0)-(this.showAxisLine?this.axisConfig.axisLineWidth:0),y:this.getScaleValue(u),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"middle",horizontalPos:"right"}))}),this.showTick){const u=this.boundingRect.x+this.boundingRect.width-(this.showAxisLine?this.axisConfig.axisLineWidth:0);s.push({type:"path",groupTexts:["left-axis","ticks"],data:this.getTickValues().map(d=>({path:`M ${u},${this.getScaleValue(d)} L ${u-this.axisConfig.tickLength},${this.getScaleValue(d)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&s.push({type:"text",groupTexts:["left-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.axisConfig.titlePadding,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:270,verticalPos:"top",horizontalPos:"center"}]}),s}getDrawableElementsForBottomAxis(){const s=[];if(this.showAxisLine){const u=this.boundingRect.y+this.axisConfig.axisLineWidth/2;s.push({type:"path",groupTexts:["bottom-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${u} L ${this.boundingRect.x+this.boundingRect.width},${u}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&s.push({type:"text",groupTexts:["bottom-axis","label"],data:this.getTickValues().map(u=>({text:u.toString(),x:this.getScaleValue(u),y:this.boundingRect.y+this.axisConfig.labelPadding+(this.showTick?this.axisConfig.tickLength:0)+(this.showAxisLine?this.axisConfig.axisLineWidth:0),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){const u=this.boundingRect.y+(this.showAxisLine?this.axisConfig.axisLineWidth:0);s.push({type:"path",groupTexts:["bottom-axis","ticks"],data:this.getTickValues().map(d=>({path:`M ${this.getScaleValue(d)},${u} L ${this.getScaleValue(d)},${u+this.axisConfig.tickLength}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&s.push({type:"text",groupTexts:["bottom-axis","title"],data:[{text:this.title,x:this.range[0]+(this.range[1]-this.range[0])/2,y:this.boundingRect.y+this.boundingRect.height-this.axisConfig.titlePadding-this.titleTextHeight,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),s}getDrawableElementsForTopAxis(){const s=[];if(this.showAxisLine){const u=this.boundingRect.y+this.boundingRect.height-this.axisConfig.axisLineWidth/2;s.push({type:"path",groupTexts:["top-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${u} L ${this.boundingRect.x+this.boundingRect.width},${u}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&s.push({type:"text",groupTexts:["top-axis","label"],data:this.getTickValues().map(u=>({text:u.toString(),x:this.getScaleValue(u),y:this.boundingRect.y+(this.showTitle?this.titleTextHeight+this.axisConfig.titlePadding*2:0)+this.axisConfig.labelPadding,fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){const u=this.boundingRect.y;s.push({type:"path",groupTexts:["top-axis","ticks"],data:this.getTickValues().map(d=>({path:`M ${this.getScaleValue(d)},${u+this.boundingRect.height-(this.showAxisLine?this.axisConfig.axisLineWidth:0)} L ${this.getScaleValue(d)},${u+this.boundingRect.height-this.axisConfig.tickLength-(this.showAxisLine?this.axisConfig.axisLineWidth:0)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&s.push({type:"text",groupTexts:["top-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.axisConfig.titlePadding,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),s}getDrawableElements(){if(this.axisPosition==="left")return this.getDrawableElementsForLeftAxis();if(this.axisPosition==="right")throw Error("Drawing of right axis is not implemented");return this.axisPosition==="bottom"?this.getDrawableElementsForBottomAxis():this.axisPosition==="top"?this.getDrawableElementsForTopAxis():[]}}class znn extends mGe{constructor(s,u,d,p,v){super(s,p,v,u),this.categories=d,this.scale=qpe().domain(this.categories).range(this.getRange())}setRange(s){super.setRange(s)}recalculateScale(){this.scale=qpe().domain(this.categories).range(this.getRange()).paddingInner(1).paddingOuter(0).align(.5),Xe.trace("BandAxis axis final categories, range: ",this.categories,this.getRange())}getTickValues(){return this.categories}getScaleValue(s){return this.scale(s)||this.getRange()[0]}}class qnn extends mGe{constructor(s,u,d,p,v){super(s,p,v,u),this.domain=d,this.scale=sD().domain(this.domain).range(this.getRange())}getTickValues(){return this.scale.ticks()}recalculateScale(){const s=[...this.domain];this.axisPosition==="left"&&s.reverse(),this.scale=sD().domain(s).range(this.getRange())}getScaleValue(s){return this.scale(s)}}function vGe(i,s,u,d){const p=new gGe(d);return dGe(i)?new znn(s,u,i.categories,i.title,p):new qnn(s,u,[i.min,i.max],i.title,p)}class Hnn{constructor(s,u,d,p){this.textDimensionCalculator=s,this.chartConfig=u,this.chartData=d,this.chartThemeConfig=p,this.boundingRect={x:0,y:0,width:0,height:0},this.showChartTitle=!1}setBoundingBoxXY(s){this.boundingRect.x=s.x,this.boundingRect.y=s.y}calculateSpace(s){const u=this.textDimensionCalculator.getMaxDimension([this.chartData.title],this.chartConfig.titleFontSize),d=Math.max(u.width,s.width),p=u.height+2*this.chartConfig.titlePadding;return u.width<=d&&u.height<=p&&this.chartConfig.showTitle&&this.chartData.title&&(this.boundingRect.width=d,this.boundingRect.height=p,this.showChartTitle=!0),{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){const s=[];return this.showChartTitle&&s.push({groupTexts:["chart-title"],type:"text",data:[{fontSize:this.chartConfig.titleFontSize,text:this.chartData.title,verticalPos:"middle",horizontalPos:"center",x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.chartThemeConfig.titleColor,rotation:0}]}),s}}function Vnn(i,s,u,d){const p=new gGe(d);return new Hnn(p,i,s,u)}class Unn{constructor(s,u,d,p,v){this.plotData=s,this.xAxis=u,this.yAxis=d,this.orientation=p,this.plotIndex=v}getDrawableElement(){const s=this.plotData.data.map(d=>[this.xAxis.getScaleValue(d[0]),this.yAxis.getScaleValue(d[1])]);let u;return this.orientation==="horizontal"?u=k7().y(d=>d[0]).x(d=>d[1])(s):u=k7().x(d=>d[0]).y(d=>d[1])(s),u?[{groupTexts:["plot",`line-plot-${this.plotIndex}`],type:"path",data:[{path:u,strokeFill:this.plotData.strokeFill,strokeWidth:this.plotData.strokeWidth}]}]:[]}}class Gnn{constructor(s,u,d,p,v,b){this.barData=s,this.boundingRect=u,this.xAxis=d,this.yAxis=p,this.orientation=v,this.plotIndex=b}getDrawableElement(){const s=this.barData.data.map(v=>[this.xAxis.getScaleValue(v[0]),this.yAxis.getScaleValue(v[1])]),u=.05,d=Math.min(this.xAxis.getAxisOuterPadding()*2,this.xAxis.getTickDistance())*(1-u),p=d/2;return this.orientation==="horizontal"?[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:s.map(v=>({x:this.boundingRect.x,y:v[0]-p,height:d,width:v[1]-this.boundingRect.x,fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]:[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:s.map(v=>({x:v[0]-p,y:v[1],width:d,height:this.boundingRect.y+this.boundingRect.height-v[1],fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]}}class Knn{constructor(s,u,d){this.chartConfig=s,this.chartData=u,this.chartThemeConfig=d,this.boundingRect={x:0,y:0,width:0,height:0}}setAxes(s,u){this.xAxis=s,this.yAxis=u}setBoundingBoxXY(s){this.boundingRect.x=s.x,this.boundingRect.y=s.y}calculateSpace(s){return this.boundingRect.width=s.width,this.boundingRect.height=s.height,{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){if(!(this.xAxis&&this.yAxis))throw Error("Axes must be passed to render Plots");const s=[];for(const[u,d]of this.chartData.plots.entries())switch(d.type){case"line":{const p=new Unn(d,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,u);s.push(...p.getDrawableElement())}break;case"bar":{const p=new Gnn(d,this.boundingRect,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,u);s.push(...p.getDrawableElement())}break}return s}}function Wnn(i,s,u){return new Knn(i,s,u)}class Ynn{constructor(s,u,d,p){this.chartConfig=s,this.chartData=u,this.componentStore={title:Vnn(s,u,d,p),plot:Wnn(s,u,d),xAxis:vGe(u.xAxis,s.xAxis,{titleColor:d.xAxisTitleColor,labelColor:d.xAxisLabelColor,tickColor:d.xAxisTickColor,axisLineColor:d.xAxisLineColor},p),yAxis:vGe(u.yAxis,s.yAxis,{titleColor:d.yAxisTitleColor,labelColor:d.yAxisLabelColor,tickColor:d.yAxisTickColor,axisLineColor:d.yAxisLineColor},p)}}calculateVerticalSpace(){let s=this.chartConfig.width,u=this.chartConfig.height,d=0,p=0,v=Math.floor(s*this.chartConfig.plotReservedSpacePercent/100),b=Math.floor(u*this.chartConfig.plotReservedSpacePercent/100),y=this.componentStore.plot.calculateSpace({width:v,height:b});s-=y.width,u-=y.height,y=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:u}),p=y.height,u-=y.height,this.componentStore.xAxis.setAxisPosition("bottom"),y=this.componentStore.xAxis.calculateSpace({width:s,height:u}),u-=y.height,this.componentStore.yAxis.setAxisPosition("left"),y=this.componentStore.yAxis.calculateSpace({width:s,height:u}),d=y.width,s-=y.width,s>0&&(v+=s,s=0),u>0&&(b+=u,u=0),this.componentStore.plot.calculateSpace({width:v,height:b}),this.componentStore.plot.setBoundingBoxXY({x:d,y:p}),this.componentStore.xAxis.setRange([d,d+v]),this.componentStore.xAxis.setBoundingBoxXY({x:d,y:p+b}),this.componentStore.yAxis.setRange([p,p+b]),this.componentStore.yAxis.setBoundingBoxXY({x:0,y:p}),this.chartData.plots.some(T=>fGe(T))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateHorizontalSpace(){let s=this.chartConfig.width,u=this.chartConfig.height,d=0,p=0,v=0,b=Math.floor(s*this.chartConfig.plotReservedSpacePercent/100),y=Math.floor(u*this.chartConfig.plotReservedSpacePercent/100),T=this.componentStore.plot.calculateSpace({width:b,height:y});s-=T.width,u-=T.height,T=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:u}),d=T.height,u-=T.height,this.componentStore.xAxis.setAxisPosition("left"),T=this.componentStore.xAxis.calculateSpace({width:s,height:u}),s-=T.width,p=T.width,this.componentStore.yAxis.setAxisPosition("top"),T=this.componentStore.yAxis.calculateSpace({width:s,height:u}),u-=T.height,v=d+T.height,s>0&&(b+=s,s=0),u>0&&(y+=u,u=0),this.componentStore.plot.calculateSpace({width:b,height:y}),this.componentStore.plot.setBoundingBoxXY({x:p,y:v}),this.componentStore.yAxis.setRange([p,p+b]),this.componentStore.yAxis.setBoundingBoxXY({x:p,y:d}),this.componentStore.xAxis.setRange([v,v+y]),this.componentStore.xAxis.setBoundingBoxXY({x:0,y:v}),this.chartData.plots.some(_=>fGe(_))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateSpace(){this.chartConfig.chartOrientation==="horizontal"?this.calculateHorizontalSpace():this.calculateVerticalSpace()}getDrawableElement(){this.calculateSpace();const s=[];this.componentStore.plot.setAxes(this.componentStore.xAxis,this.componentStore.yAxis);for(const u of Object.values(this.componentStore))s.push(...u.getDrawableElements());return s}}class Xnn{static build(s,u,d,p){return new Ynn(s,u,d,p).getDrawableElement()}}let zR=0,wGe,qR=xGe(),HR=yGe(),el=kGe(),gve=HR.plotColorPalette.split(",").map(i=>i.trim()),gJ=!1,pve=!1;function yGe(){const i=f2e(),s=Vh();return JF(i.xyChart,s.themeVariables.xyChart)}function xGe(){const i=Vh();return JF(sh.xyChart,i.xyChart)}function kGe(){return{yAxis:{type:"linear",title:"",min:1/0,max:-1/0},xAxis:{type:"band",title:"",categories:[]},title:"",plots:[]}}function bve(i){const s=Vh();return Yf(i.trim(),s)}function Qnn(i){wGe=i}function Jnn(i){i==="horizontal"?qR.chartOrientation="horizontal":qR.chartOrientation="vertical"}function Znn(i){el.xAxis.title=bve(i.text)}function EGe(i,s){el.xAxis={type:"linear",title:el.xAxis.title,min:i,max:s},gJ=!0}function ern(i){el.xAxis={type:"band",title:el.xAxis.title,categories:i.map(s=>bve(s.text))},gJ=!0}function trn(i){el.yAxis.title=bve(i.text)}function nrn(i,s){el.yAxis={type:"linear",title:el.yAxis.title,min:i,max:s},pve=!0}function rrn(i){const s=Math.min(...i),u=Math.max(...i),d=$R(el.yAxis)?el.yAxis.min:1/0,p=$R(el.yAxis)?el.yAxis.max:-1/0;el.yAxis={type:"linear",title:el.yAxis.title,min:Math.min(d,s),max:Math.max(p,u)}}function TGe(i){let s=[];if(i.length===0)return s;if(!gJ){const u=$R(el.xAxis)?el.xAxis.min:1/0,d=$R(el.xAxis)?el.xAxis.max:-1/0;EGe(Math.min(u,1),Math.max(d,i.length))}if(pve||rrn(i),dGe(el.xAxis)&&(s=el.xAxis.categories.map((u,d)=>[u,i[d]])),$R(el.xAxis)){const u=el.xAxis.min,d=el.xAxis.max,p=(d-u+1)/i.length,v=[];for(let b=u;b<=d;b+=p)v.push(`${b}`);s=v.map((b,y)=>[b,i[y]])}return s}function CGe(i){return gve[i===0?0:i%gve.length]}function irn(i,s){const u=TGe(s);el.plots.push({type:"line",strokeFill:CGe(zR),strokeWidth:2,data:u}),zR++}function srn(i,s){const u=TGe(s);el.plots.push({type:"bar",fill:CGe(zR),data:u}),zR++}function arn(){if(el.plots.length===0)throw Error("No Plot to render, please provide a plot with some data");return el.title=Ap(),Xnn.build(qR,el,HR,wGe)}function orn(){return HR}function crn(){return qR}const urn=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:$nn,db:{getDrawableElem:arn,clear:function(){Pg(),zR=0,qR=xGe(),el=kGe(),HR=yGe(),gve=HR.plotColorPalette.split(",").map(i=>i.trim()),gJ=!1,pve=!1},setAccTitle:Bg,getAccTitle:Cp,setDiagramTitle:cm,getDiagramTitle:Ap,getAccDescription:_p,setAccDescription:Sp,setOrientation:Jnn,setXAxisTitle:Znn,setXAxisRangeData:EGe,setXAxisBand:ern,setYAxisTitle:trn,setYAxisRangeData:nrn,setLineData:irn,setBarData:srn,setTmpSVGG:Qnn,getChartThemeConfig:orn,getChartConfig:crn},renderer:{draw:(i,s,u,d)=>{const p=d.db,v=p.getChartThemeConfig(),b=p.getChartConfig();function y(ee){return ee==="top"?"text-before-edge":"middle"}function T(ee){return ee==="left"?"start":ee==="right"?"end":"middle"}function _(ee){return`translate(${ee.x}, ${ee.y}) rotate(${ee.rotation||0})`}Xe.debug(`Rendering xychart chart -`+i);const A=rR(s),P=A.append("g").attr("class","main"),R=P.append("rect").attr("width",b.width).attr("height",b.height).attr("class","background");Ng(A,b.height,b.width,!0),A.attr("viewBox",`0 0 ${b.width} ${b.height}`),R.attr("fill",v.backgroundColor),p.setTmpSVGG(A.append("g").attr("class","mermaid-tmp-group"));const F=p.getDrawableElem(),j={};function K(ee){let ie=P,oe="";for(const[pe]of ee.entries()){let be=P;pe>0&&j[oe]&&(be=j[oe]),oe+=ee[pe],ie=j[oe],ie||(ie=j[oe]=be.append("g").attr("class",ee[pe]))}return ie}for(const ee of F){if(ee.data.length===0)continue;const ie=K(ee.groupTexts);switch(ee.type){case"rect":ie.selectAll("rect").data(ee.data).enter().append("rect").attr("x",oe=>oe.x).attr("y",oe=>oe.y).attr("width",oe=>oe.width).attr("height",oe=>oe.height).attr("fill",oe=>oe.fill).attr("stroke",oe=>oe.strokeFill).attr("stroke-width",oe=>oe.strokeWidth);break;case"text":ie.selectAll("text").data(ee.data).enter().append("text").attr("x",0).attr("y",0).attr("fill",oe=>oe.fill).attr("font-size",oe=>oe.fontSize).attr("dominant-baseline",oe=>y(oe.verticalPos)).attr("text-anchor",oe=>T(oe.horizontalPos)).attr("transform",oe=>_(oe)).text(oe=>oe.text);break;case"path":ie.selectAll("path").data(ee.data).enter().append("path").attr("d",oe=>oe.path).attr("fill",oe=>oe.fill?oe.fill:"none").attr("stroke",oe=>oe.strokeFill).attr("stroke-width",oe=>oe.strokeWidth);break}}}}}},Symbol.toStringTag,{value:"Module"}));var mve=function(){var i=function(_t,Et,Gt,ln){for(Gt=Gt||{},ln=_t.length;ln--;Gt[_t[ln]]=Et);return Gt},s=[1,3],u=[1,4],d=[1,5],p=[1,6],v=[5,6,8,9,11,13,31,32,33,34,35,36,44,62,63],b=[1,18],y=[2,7],T=[1,22],_=[1,23],A=[1,24],P=[1,25],R=[1,26],F=[1,27],j=[1,20],K=[1,28],ee=[1,29],ie=[62,63],oe=[5,8,9,11,13,31,32,33,34,35,36,44,51,53,62,63],pe=[1,47],be=[1,48],ae=[1,49],ne=[1,50],se=[1,51],de=[1,52],X=[1,53],ge=[53,54],W=[1,64],xe=[1,60],U=[1,61],Fe=[1,62],Pe=[1,63],je=[1,65],Ie=[1,69],Se=[1,70],Ce=[1,67],ke=[1,68],Ke=[5,8,9,11,13,31,32,33,34,35,36,44,62,63],Ft={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,acc_title:9,acc_title_value:10,acc_descr:11,acc_descr_value:12,acc_descr_multiline_value:13,requirementDef:14,elementDef:15,relationshipDef:16,requirementType:17,requirementName:18,STRUCT_START:19,requirementBody:20,ID:21,COLONSEP:22,id:23,TEXT:24,text:25,RISK:26,riskLevel:27,VERIFYMTHD:28,verifyType:29,STRUCT_STOP:30,REQUIREMENT:31,FUNCTIONAL_REQUIREMENT:32,INTERFACE_REQUIREMENT:33,PERFORMANCE_REQUIREMENT:34,PHYSICAL_REQUIREMENT:35,DESIGN_CONSTRAINT:36,LOW_RISK:37,MED_RISK:38,HIGH_RISK:39,VERIFY_ANALYSIS:40,VERIFY_DEMONSTRATION:41,VERIFY_INSPECTION:42,VERIFY_TEST:43,ELEMENT:44,elementName:45,elementBody:46,TYPE:47,type:48,DOCREF:49,ref:50,END_ARROW_L:51,relationship:52,LINE:53,END_ARROW_R:54,CONTAINS:55,COPIES:56,DERIVES:57,SATISFIES:58,VERIFIES:59,REFINES:60,TRACES:61,unqString:62,qString:63,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",9:"acc_title",10:"acc_title_value",11:"acc_descr",12:"acc_descr_value",13:"acc_descr_multiline_value",19:"STRUCT_START",21:"ID",22:"COLONSEP",24:"TEXT",26:"RISK",28:"VERIFYMTHD",30:"STRUCT_STOP",31:"REQUIREMENT",32:"FUNCTIONAL_REQUIREMENT",33:"INTERFACE_REQUIREMENT",34:"PERFORMANCE_REQUIREMENT",35:"PHYSICAL_REQUIREMENT",36:"DESIGN_CONSTRAINT",37:"LOW_RISK",38:"MED_RISK",39:"HIGH_RISK",40:"VERIFY_ANALYSIS",41:"VERIFY_DEMONSTRATION",42:"VERIFY_INSPECTION",43:"VERIFY_TEST",44:"ELEMENT",47:"TYPE",49:"DOCREF",51:"END_ARROW_L",53:"LINE",54:"END_ARROW_R",55:"CONTAINS",56:"COPIES",57:"DERIVES",58:"SATISFIES",59:"VERIFIES",60:"REFINES",61:"TRACES",62:"unqString",63:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,2],[4,2],[4,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[14,5],[20,5],[20,5],[20,5],[20,5],[20,2],[20,1],[17,1],[17,1],[17,1],[17,1],[17,1],[17,1],[27,1],[27,1],[27,1],[29,1],[29,1],[29,1],[29,1],[15,5],[46,5],[46,5],[46,2],[46,1],[16,5],[16,5],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[18,1],[18,1],[23,1],[23,1],[25,1],[25,1],[45,1],[45,1],[48,1],[48,1],[50,1],[50,1]],performAction:function(Et,Gt,ln,xt,Pt,Qe,Dt){var kt=Qe.length-1;switch(Pt){case 4:this.$=Qe[kt].trim(),xt.setAccTitle(this.$);break;case 5:case 6:this.$=Qe[kt].trim(),xt.setAccDescription(this.$);break;case 7:this.$=[];break;case 13:xt.addRequirement(Qe[kt-3],Qe[kt-4]);break;case 14:xt.setNewReqId(Qe[kt-2]);break;case 15:xt.setNewReqText(Qe[kt-2]);break;case 16:xt.setNewReqRisk(Qe[kt-2]);break;case 17:xt.setNewReqVerifyMethod(Qe[kt-2]);break;case 20:this.$=xt.RequirementType.REQUIREMENT;break;case 21:this.$=xt.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 22:this.$=xt.RequirementType.INTERFACE_REQUIREMENT;break;case 23:this.$=xt.RequirementType.PERFORMANCE_REQUIREMENT;break;case 24:this.$=xt.RequirementType.PHYSICAL_REQUIREMENT;break;case 25:this.$=xt.RequirementType.DESIGN_CONSTRAINT;break;case 26:this.$=xt.RiskLevel.LOW_RISK;break;case 27:this.$=xt.RiskLevel.MED_RISK;break;case 28:this.$=xt.RiskLevel.HIGH_RISK;break;case 29:this.$=xt.VerifyType.VERIFY_ANALYSIS;break;case 30:this.$=xt.VerifyType.VERIFY_DEMONSTRATION;break;case 31:this.$=xt.VerifyType.VERIFY_INSPECTION;break;case 32:this.$=xt.VerifyType.VERIFY_TEST;break;case 33:xt.addElement(Qe[kt-3]);break;case 34:xt.setNewElementType(Qe[kt-2]);break;case 35:xt.setNewElementDocRef(Qe[kt-2]);break;case 38:xt.addRelationship(Qe[kt-2],Qe[kt],Qe[kt-4]);break;case 39:xt.addRelationship(Qe[kt-2],Qe[kt-4],Qe[kt]);break;case 40:this.$=xt.Relationships.CONTAINS;break;case 41:this.$=xt.Relationships.COPIES;break;case 42:this.$=xt.Relationships.DERIVES;break;case 43:this.$=xt.Relationships.SATISFIES;break;case 44:this.$=xt.Relationships.VERIFIES;break;case 45:this.$=xt.Relationships.REFINES;break;case 46:this.$=xt.Relationships.TRACES;break}},table:[{3:1,4:2,6:s,9:u,11:d,13:p},{1:[3]},{3:8,4:2,5:[1,7],6:s,9:u,11:d,13:p},{5:[1,9]},{10:[1,10]},{12:[1,11]},i(v,[2,6]),{3:12,4:2,6:s,9:u,11:d,13:p},{1:[2,2]},{4:17,5:b,7:13,8:y,9:u,11:d,13:p,14:14,15:15,16:16,17:19,23:21,31:T,32:_,33:A,34:P,35:R,36:F,44:j,62:K,63:ee},i(v,[2,4]),i(v,[2,5]),{1:[2,1]},{8:[1,30]},{4:17,5:b,7:31,8:y,9:u,11:d,13:p,14:14,15:15,16:16,17:19,23:21,31:T,32:_,33:A,34:P,35:R,36:F,44:j,62:K,63:ee},{4:17,5:b,7:32,8:y,9:u,11:d,13:p,14:14,15:15,16:16,17:19,23:21,31:T,32:_,33:A,34:P,35:R,36:F,44:j,62:K,63:ee},{4:17,5:b,7:33,8:y,9:u,11:d,13:p,14:14,15:15,16:16,17:19,23:21,31:T,32:_,33:A,34:P,35:R,36:F,44:j,62:K,63:ee},{4:17,5:b,7:34,8:y,9:u,11:d,13:p,14:14,15:15,16:16,17:19,23:21,31:T,32:_,33:A,34:P,35:R,36:F,44:j,62:K,63:ee},{4:17,5:b,7:35,8:y,9:u,11:d,13:p,14:14,15:15,16:16,17:19,23:21,31:T,32:_,33:A,34:P,35:R,36:F,44:j,62:K,63:ee},{18:36,62:[1,37],63:[1,38]},{45:39,62:[1,40],63:[1,41]},{51:[1,42],53:[1,43]},i(ie,[2,20]),i(ie,[2,21]),i(ie,[2,22]),i(ie,[2,23]),i(ie,[2,24]),i(ie,[2,25]),i(oe,[2,49]),i(oe,[2,50]),{1:[2,3]},{8:[2,8]},{8:[2,9]},{8:[2,10]},{8:[2,11]},{8:[2,12]},{19:[1,44]},{19:[2,47]},{19:[2,48]},{19:[1,45]},{19:[2,53]},{19:[2,54]},{52:46,55:pe,56:be,57:ae,58:ne,59:se,60:de,61:X},{52:54,55:pe,56:be,57:ae,58:ne,59:se,60:de,61:X},{5:[1,55]},{5:[1,56]},{53:[1,57]},i(ge,[2,40]),i(ge,[2,41]),i(ge,[2,42]),i(ge,[2,43]),i(ge,[2,44]),i(ge,[2,45]),i(ge,[2,46]),{54:[1,58]},{5:W,20:59,21:xe,24:U,26:Fe,28:Pe,30:je},{5:Ie,30:Se,46:66,47:Ce,49:ke},{23:71,62:K,63:ee},{23:72,62:K,63:ee},i(Ke,[2,13]),{22:[1,73]},{22:[1,74]},{22:[1,75]},{22:[1,76]},{5:W,20:77,21:xe,24:U,26:Fe,28:Pe,30:je},i(Ke,[2,19]),i(Ke,[2,33]),{22:[1,78]},{22:[1,79]},{5:Ie,30:Se,46:80,47:Ce,49:ke},i(Ke,[2,37]),i(Ke,[2,38]),i(Ke,[2,39]),{23:81,62:K,63:ee},{25:82,62:[1,83],63:[1,84]},{27:85,37:[1,86],38:[1,87],39:[1,88]},{29:89,40:[1,90],41:[1,91],42:[1,92],43:[1,93]},i(Ke,[2,18]),{48:94,62:[1,95],63:[1,96]},{50:97,62:[1,98],63:[1,99]},i(Ke,[2,36]),{5:[1,100]},{5:[1,101]},{5:[2,51]},{5:[2,52]},{5:[1,102]},{5:[2,26]},{5:[2,27]},{5:[2,28]},{5:[1,103]},{5:[2,29]},{5:[2,30]},{5:[2,31]},{5:[2,32]},{5:[1,104]},{5:[2,55]},{5:[2,56]},{5:[1,105]},{5:[2,57]},{5:[2,58]},{5:W,20:106,21:xe,24:U,26:Fe,28:Pe,30:je},{5:W,20:107,21:xe,24:U,26:Fe,28:Pe,30:je},{5:W,20:108,21:xe,24:U,26:Fe,28:Pe,30:je},{5:W,20:109,21:xe,24:U,26:Fe,28:Pe,30:je},{5:Ie,30:Se,46:110,47:Ce,49:ke},{5:Ie,30:Se,46:111,47:Ce,49:ke},i(Ke,[2,14]),i(Ke,[2,15]),i(Ke,[2,16]),i(Ke,[2,17]),i(Ke,[2,34]),i(Ke,[2,35])],defaultActions:{8:[2,2],12:[2,1],30:[2,3],31:[2,8],32:[2,9],33:[2,10],34:[2,11],35:[2,12],37:[2,47],38:[2,48],40:[2,53],41:[2,54],83:[2,51],84:[2,52],86:[2,26],87:[2,27],88:[2,28],90:[2,29],91:[2,30],92:[2,31],93:[2,32],95:[2,55],96:[2,56],98:[2,57],99:[2,58]},parseError:function(Et,Gt){if(Gt.recoverable)this.trace(Et);else{var ln=new Error(Et);throw ln.hash=Gt,ln}},parse:function(Et){var Gt=this,ln=[0],xt=[],Pt=[null],Qe=[],Dt=this.table,kt="",On=0,ht=0,zr=2,yt=1,ji=Qe.slice.call(arguments,1),xi=Object.create(this.lexer),Ma={yy:{}};for(var zs in this.yy)Object.prototype.hasOwnProperty.call(this.yy,zs)&&(Ma.yy[zs]=this.yy[zs]);xi.setInput(Et,Ma.yy),Ma.yy.lexer=xi,Ma.yy.parser=this,typeof xi.yylloc>"u"&&(xi.yylloc={});var ao=xi.yylloc;Qe.push(ao);var Tr=xi.options&&xi.options.ranges;typeof Ma.yy.parseError=="function"?this.parseError=Ma.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Fn(){var Pa;return Pa=xt.pop()||xi.lex()||yt,typeof Pa!="number"&&(Pa instanceof Array&&(xt=Pa,Pa=xt.pop()),Pa=Gt.symbols_[Pa]||Pa),Pa}for(var qn,Un,At,wt,on={},fn,An,oo,jo;;){if(Un=ln[ln.length-1],this.defaultActions[Un]?At=this.defaultActions[Un]:((qn===null||typeof qn>"u")&&(qn=Fn()),At=Dt[Un]&&Dt[Un][qn]),typeof At>"u"||!At.length||!At[0]){var $o="";jo=[];for(fn in Dt[Un])this.terminals_[fn]&&fn>zr&&jo.push("'"+this.terminals_[fn]+"'");xi.showPosition?$o="Parse error on line "+(On+1)+`: -`+xi.showPosition()+` -Expecting `+jo.join(", ")+", got '"+(this.terminals_[qn]||qn)+"'":$o="Parse error on line "+(On+1)+": Unexpected "+(qn==yt?"end of input":"'"+(this.terminals_[qn]||qn)+"'"),this.parseError($o,{text:xi.match,token:this.terminals_[qn]||qn,line:xi.yylineno,loc:ao,expected:jo})}if(At[0]instanceof Array&&At.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Un+", token: "+qn);switch(At[0]){case 1:ln.push(qn),Pt.push(xi.yytext),Qe.push(xi.yylloc),ln.push(At[1]),qn=null,ht=xi.yyleng,kt=xi.yytext,On=xi.yylineno,ao=xi.yylloc;break;case 2:if(An=this.productions_[At[1]][1],on.$=Pt[Pt.length-An],on._$={first_line:Qe[Qe.length-(An||1)].first_line,last_line:Qe[Qe.length-1].last_line,first_column:Qe[Qe.length-(An||1)].first_column,last_column:Qe[Qe.length-1].last_column},Tr&&(on._$.range=[Qe[Qe.length-(An||1)].range[0],Qe[Qe.length-1].range[1]]),wt=this.performAction.apply(on,[kt,ht,On,Ma.yy,At[1],Pt,Qe].concat(ji)),typeof wt<"u")return wt;An&&(ln=ln.slice(0,-1*An*2),Pt=Pt.slice(0,-1*An),Qe=Qe.slice(0,-1*An)),ln.push(this.productions_[At[1]][0]),Pt.push(on.$),Qe.push(on._$),oo=Dt[ln[ln.length-2]][ln[ln.length-1]],ln.push(oo);break;case 3:return!0}}return!0}},Ne=function(){var _t={EOF:1,parseError:function(Gt,ln){if(this.yy.parser)this.yy.parser.parseError(Gt,ln);else throw new Error(Gt)},setInput:function(Et,Gt){return this.yy=Gt||this.yy||{},this._input=Et,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var Et=this._input[0];this.yytext+=Et,this.yyleng++,this.offset++,this.match+=Et,this.matched+=Et;var Gt=Et.match(/(?:\r\n?|\n).*/g);return Gt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Et},unput:function(Et){var Gt=Et.length,ln=Et.split(/(?:\r\n?|\n)/g);this._input=Et+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Gt),this.offset-=Gt;var xt=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ln.length-1&&(this.yylineno-=ln.length-1);var Pt=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ln?(ln.length===xt.length?this.yylloc.first_column:0)+xt[xt.length-ln.length].length-ln[0].length:this.yylloc.first_column-Gt},this.options.ranges&&(this.yylloc.range=[Pt[0],Pt[0]+this.yyleng-Gt]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(Et){this.unput(this.match.slice(Et))},pastInput:function(){var Et=this.matched.substr(0,this.matched.length-this.match.length);return(Et.length>20?"...":"")+Et.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Et=this.match;return Et.length<20&&(Et+=this._input.substr(0,20-Et.length)),(Et.substr(0,20)+(Et.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Et=this.pastInput(),Gt=new Array(Et.length+1).join("-");return Et+this.upcomingInput()+` -`+Gt+"^"},test_match:function(Et,Gt){var ln,xt,Pt;if(this.options.backtrack_lexer&&(Pt={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Pt.yylloc.range=this.yylloc.range.slice(0))),xt=Et[0].match(/(?:\r\n?|\n).*/g),xt&&(this.yylineno+=xt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:xt?xt[xt.length-1].length-xt[xt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Et[0].length},this.yytext+=Et[0],this.match+=Et[0],this.matches=Et,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Et[0].length),this.matched+=Et[0],ln=this.performAction.call(this,this.yy,this,Gt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ln)return ln;if(this._backtrack){for(var Qe in Pt)this[Qe]=Pt[Qe];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Et,Gt,ln,xt;this._more||(this.yytext="",this.match="");for(var Pt=this._currentRules(),Qe=0;QeGt[0].length)){if(Gt=ln,xt=Qe,this.options.backtrack_lexer){if(Et=this.test_match(ln,Pt[Qe]),Et!==!1)return Et;if(this._backtrack){Gt=!1;continue}else return!1}else if(!this.options.flex)break}return Gt?(Et=this.test_match(Gt,Pt[xt]),Et!==!1?Et:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Gt=this.next();return Gt||this.lex()},begin:function(Gt){this.conditionStack.push(Gt)},popState:function(){var Gt=this.conditionStack.length-1;return Gt>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Gt){return Gt=this.conditionStack.length-1-Math.abs(Gt||0),Gt>=0?this.conditionStack[Gt]:"INITIAL"},pushState:function(Gt){this.begin(Gt)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(Gt,ln,xt,Pt){switch(xt){case 0:return"title";case 1:return this.begin("acc_title"),9;case 2:return this.popState(),"acc_title_value";case 3:return this.begin("acc_descr"),11;case 4:return this.popState(),"acc_descr_value";case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:return 5;case 9:break;case 10:break;case 11:break;case 12:return 8;case 13:return 6;case 14:return 19;case 15:return 30;case 16:return 22;case 17:return 21;case 18:return 24;case 19:return 26;case 20:return 28;case 21:return 31;case 22:return 32;case 23:return 33;case 24:return 34;case 25:return 35;case 26:return 36;case 27:return 37;case 28:return 38;case 29:return 39;case 30:return 40;case 31:return 41;case 32:return 42;case 33:return 43;case 34:return 44;case 35:return 55;case 36:return 56;case 37:return 57;case 38:return 58;case 39:return 59;case 40:return 60;case 41:return 61;case 42:return 47;case 43:return 49;case 44:return 51;case 45:return 54;case 46:return 53;case 47:this.begin("string");break;case 48:this.popState();break;case 49:return"qString";case 50:return ln.yytext=ln.yytext.trim(),62}},rules:[/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^\r\n\{\<\>\-\=]*)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},unqString:{rules:[],inclusive:!1},token:{rules:[],inclusive:!1},string:{rules:[48,49],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,50],inclusive:!0}}};return _t}();Ft.lexer=Ne;function gn(){this.yy={}}return gn.prototype=Ft,Ft.Parser=gn,new gn}();mve.parser=mve;const lrn=mve;let vve=[],V2={},VR={},F9={},UR={};const hrn={RequirementType:{REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"},RiskLevel:{LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"},VerifyType:{VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"},Relationships:{CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"},getConfig:()=>qt().req,addRequirement:(i,s)=>(VR[i]===void 0&&(VR[i]={name:i,type:s,id:V2.id,text:V2.text,risk:V2.risk,verifyMethod:V2.verifyMethod}),V2={},VR[i]),getRequirements:()=>VR,setNewReqId:i=>{V2!==void 0&&(V2.id=i)},setNewReqText:i=>{V2!==void 0&&(V2.text=i)},setNewReqRisk:i=>{V2!==void 0&&(V2.risk=i)},setNewReqVerifyMethod:i=>{V2!==void 0&&(V2.verifyMethod=i)},setAccTitle:Bg,getAccTitle:Cp,setAccDescription:Sp,getAccDescription:_p,addElement:i=>(UR[i]===void 0&&(UR[i]={name:i,type:F9.type,docRef:F9.docRef},Xe.info("Added new requirement: ",i)),F9={},UR[i]),getElements:()=>UR,setNewElementType:i=>{F9!==void 0&&(F9.type=i)},setNewElementDocRef:i=>{F9!==void 0&&(F9.docRef=i)},addRelationship:(i,s,u)=>{vve.push({type:i,src:s,dst:u})},getRelationships:()=>vve,clear:()=>{vve=[],V2={},VR={},F9={},UR={},Pg()}},frn=i=>` + fill: ${t.pieLegendTextColor}; + font-family: ${t.fontFamily}; + font-size: ${t.pieLegendTextSize}; + } +`,"getStyles"),Ahe=rVe});var nVe,iVe,Lhe,Dhe=M(()=>{"use strict";pr();Vt();ut();eh();ai();hr();nVe=o(t=>{let e=[...t.entries()].map(n=>({label:n[0],value:n[1]})).sort((n,i)=>i.value-n.value);return H3().value(n=>n.value)(e)},"createPieArcs"),iVe=o((t,e,r,n)=>{Y.debug(`rendering pie chart +`+t);let i=n.db,a=pe(),s=Ds(i.getConfig(),a.pie),l=40,u=18,h=4,f=450,d=f,p=Va(e),m=p.append("g");m.attr("transform","translate("+d/2+","+f/2+")");let{themeVariables:g}=a,[y]=Ho(g.pieOuterStrokeWidth);y??=2;let v=s.textPosition,x=Math.min(d,f)/2-l,b=Dl().innerRadius(0).outerRadius(x),w=Dl().innerRadius(x*v).outerRadius(x*v);m.append("circle").attr("cx",0).attr("cy",0).attr("r",x+y/2).attr("class","pieOuterCircle");let _=i.getSections(),T=nVe(_),E=[g.pie1,g.pie2,g.pie3,g.pie4,g.pie5,g.pie6,g.pie7,g.pie8,g.pie9,g.pie10,g.pie11,g.pie12],L=ku(E);m.selectAll("mySlices").data(T).enter().append("path").attr("d",b).attr("fill",k=>L(k.data.label)).attr("class","pieCircle");let S=0;_.forEach(k=>{S+=k}),m.selectAll("mySlices").data(T).enter().append("text").text(k=>(k.data.value/S*100).toFixed(0)+"%").attr("transform",k=>"translate("+w.centroid(k)+")").style("text-anchor","middle").attr("class","slice"),m.append("text").text(i.getDiagramTitle()).attr("x",0).attr("y",-(f-50)/2).attr("class","pieTitleText");let A=m.selectAll(".legend").data(L.domain()).enter().append("g").attr("class","legend").attr("transform",(k,R)=>{let C=u+h,O=C*L.domain().length/2,N=12*u,P=R*C-O;return"translate("+N+","+P+")"});A.append("rect").attr("width",u).attr("height",u).style("fill",L).style("stroke",L),A.data(T).append("text").attr("x",u+h).attr("y",u-h).text(k=>{let{label:R,value:C}=k.data;return i.getShowData()?`${R} [${C}]`:R});let I=Math.max(...A.selectAll("text").nodes().map(k=>k?.getBoundingClientRect().width??0)),D=d+l+u+h+I;p.attr("viewBox",`0 0 ${D} ${f}`),Zr(p,f,D,s.useMaxWidth)},"draw"),Lhe={draw:iVe}});var Nhe={};vr(Nhe,{diagram:()=>aVe});var aVe,Rhe=M(()=>{"use strict";Che();iO();_he();Dhe();aVe={parser:She,db:kE,renderer:Lhe,styles:Ahe}});var aO,Ohe,Phe=M(()=>{"use strict";aO=function(){var t=o(function(Te,ie,Ee,Ae){for(Ee=Ee||{},Ae=Te.length;Ae--;Ee[Te[Ae]]=ie);return Ee},"o"),e=[1,3],r=[1,4],n=[1,5],i=[1,6],a=[1,7],s=[1,4,5,10,12,13,14,18,25,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],l=[1,4,5,10,12,13,14,18,25,28,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],u=[55,56,57],h=[2,36],f=[1,37],d=[1,36],p=[1,38],m=[1,35],g=[1,43],y=[1,41],v=[1,14],x=[1,23],b=[1,18],w=[1,19],_=[1,20],T=[1,21],E=[1,22],L=[1,24],S=[1,25],A=[1,26],I=[1,27],D=[1,28],k=[1,29],R=[1,32],C=[1,33],O=[1,34],N=[1,39],P=[1,40],F=[1,42],B=[1,44],G=[1,62],z=[1,61],W=[4,5,8,10,12,13,14,18,44,47,49,55,56,57,63,64,65,66,67],Z=[1,65],j=[1,66],oe=[1,67],K=[1,68],ee=[1,69],J=[1,70],H=[1,71],q=[1,72],Q=[1,73],ae=[1,74],ue=[1,75],ce=[1,76],te=[4,5,6,7,8,9,10,11,12,13,14,15,18],Ne=[1,90],se=[1,91],ke=[1,92],Re=[1,99],Ce=[1,93],Pe=[1,96],Ie=[1,94],$e=[1,95],ye=[1,97],X=[1,98],fe=[1,102],he=[10,55,56,57],ge=[4,5,6,8,10,11,13,17,18,19,20,55,56,57],ne={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,idStringToken:3,ALPHA:4,NUM:5,NODE_STRING:6,DOWN:7,MINUS:8,DEFAULT:9,COMMA:10,COLON:11,AMP:12,BRKT:13,MULT:14,UNICODE_TEXT:15,styleComponent:16,UNIT:17,SPACE:18,STYLE:19,PCT:20,idString:21,style:22,stylesOpt:23,classDefStatement:24,CLASSDEF:25,start:26,eol:27,QUADRANT:28,document:29,line:30,statement:31,axisDetails:32,quadrantDetails:33,points:34,title:35,title_value:36,acc_title:37,acc_title_value:38,acc_descr:39,acc_descr_value:40,acc_descr_multiline_value:41,section:42,text:43,point_start:44,point_x:45,point_y:46,class_name:47,"X-AXIS":48,"AXIS-TEXT-DELIMITER":49,"Y-AXIS":50,QUADRANT_1:51,QUADRANT_2:52,QUADRANT_3:53,QUADRANT_4:54,NEWLINE:55,SEMI:56,EOF:57,alphaNumToken:58,textNoTagsToken:59,STR:60,MD_STR:61,alphaNum:62,PUNCTUATION:63,PLUS:64,EQUALS:65,DOT:66,UNDERSCORE:67,$accept:0,$end:1},terminals_:{2:"error",4:"ALPHA",5:"NUM",6:"NODE_STRING",7:"DOWN",8:"MINUS",9:"DEFAULT",10:"COMMA",11:"COLON",12:"AMP",13:"BRKT",14:"MULT",15:"UNICODE_TEXT",17:"UNIT",18:"SPACE",19:"STYLE",20:"PCT",25:"CLASSDEF",28:"QUADRANT",35:"title",36:"title_value",37:"acc_title",38:"acc_title_value",39:"acc_descr",40:"acc_descr_value",41:"acc_descr_multiline_value",42:"section",44:"point_start",45:"point_x",46:"point_y",47:"class_name",48:"X-AXIS",49:"AXIS-TEXT-DELIMITER",50:"Y-AXIS",51:"QUADRANT_1",52:"QUADRANT_2",53:"QUADRANT_3",54:"QUADRANT_4",55:"NEWLINE",56:"SEMI",57:"EOF",60:"STR",61:"MD_STR",63:"PUNCTUATION",64:"PLUS",65:"EQUALS",66:"DOT",67:"UNDERSCORE"},productions_:[0,[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[21,1],[21,2],[22,1],[22,2],[23,1],[23,3],[24,5],[26,2],[26,2],[26,2],[29,0],[29,2],[30,2],[31,0],[31,1],[31,2],[31,1],[31,1],[31,1],[31,2],[31,2],[31,2],[31,1],[31,1],[34,4],[34,5],[34,5],[34,6],[32,4],[32,3],[32,2],[32,4],[32,3],[32,2],[33,2],[33,2],[33,2],[33,2],[27,1],[27,1],[27,1],[43,1],[43,2],[43,1],[43,1],[62,1],[62,2],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[59,1],[59,1],[59,1]],performAction:o(function(ie,Ee,Ae,Ge,Be,me,He){var Oe=me.length-1;switch(Be){case 23:this.$=me[Oe];break;case 24:this.$=me[Oe-1]+""+me[Oe];break;case 26:this.$=me[Oe-1]+me[Oe];break;case 27:this.$=[me[Oe].trim()];break;case 28:me[Oe-2].push(me[Oe].trim()),this.$=me[Oe-2];break;case 29:this.$=me[Oe-4],Ge.addClass(me[Oe-2],me[Oe]);break;case 37:this.$=[];break;case 42:this.$=me[Oe].trim(),Ge.setDiagramTitle(this.$);break;case 43:this.$=me[Oe].trim(),Ge.setAccTitle(this.$);break;case 44:case 45:this.$=me[Oe].trim(),Ge.setAccDescription(this.$);break;case 46:Ge.addSection(me[Oe].substr(8)),this.$=me[Oe].substr(8);break;case 47:Ge.addPoint(me[Oe-3],"",me[Oe-1],me[Oe],[]);break;case 48:Ge.addPoint(me[Oe-4],me[Oe-3],me[Oe-1],me[Oe],[]);break;case 49:Ge.addPoint(me[Oe-4],"",me[Oe-2],me[Oe-1],me[Oe]);break;case 50:Ge.addPoint(me[Oe-5],me[Oe-4],me[Oe-2],me[Oe-1],me[Oe]);break;case 51:Ge.setXAxisLeftText(me[Oe-2]),Ge.setXAxisRightText(me[Oe]);break;case 52:me[Oe-1].text+=" \u27F6 ",Ge.setXAxisLeftText(me[Oe-1]);break;case 53:Ge.setXAxisLeftText(me[Oe]);break;case 54:Ge.setYAxisBottomText(me[Oe-2]),Ge.setYAxisTopText(me[Oe]);break;case 55:me[Oe-1].text+=" \u27F6 ",Ge.setYAxisBottomText(me[Oe-1]);break;case 56:Ge.setYAxisBottomText(me[Oe]);break;case 57:Ge.setQuadrant1Text(me[Oe]);break;case 58:Ge.setQuadrant2Text(me[Oe]);break;case 59:Ge.setQuadrant3Text(me[Oe]);break;case 60:Ge.setQuadrant4Text(me[Oe]);break;case 64:this.$={text:me[Oe],type:"text"};break;case 65:this.$={text:me[Oe-1].text+""+me[Oe],type:me[Oe-1].type};break;case 66:this.$={text:me[Oe],type:"text"};break;case 67:this.$={text:me[Oe],type:"markdown"};break;case 68:this.$=me[Oe];break;case 69:this.$=me[Oe-1]+""+me[Oe];break}},"anonymous"),table:[{18:e,26:1,27:2,28:r,55:n,56:i,57:a},{1:[3]},{18:e,26:8,27:2,28:r,55:n,56:i,57:a},{18:e,26:9,27:2,28:r,55:n,56:i,57:a},t(s,[2,33],{29:10}),t(l,[2,61]),t(l,[2,62]),t(l,[2,63]),{1:[2,30]},{1:[2,31]},t(u,h,{30:11,31:12,24:13,32:15,33:16,34:17,43:30,58:31,1:[2,32],4:f,5:d,10:p,12:m,13:g,14:y,18:v,25:x,35:b,37:w,39:_,41:T,42:E,48:L,50:S,51:A,52:I,53:D,54:k,60:R,61:C,63:O,64:N,65:P,66:F,67:B}),t(s,[2,34]),{27:45,55:n,56:i,57:a},t(u,[2,37]),t(u,h,{24:13,32:15,33:16,34:17,43:30,58:31,31:46,4:f,5:d,10:p,12:m,13:g,14:y,18:v,25:x,35:b,37:w,39:_,41:T,42:E,48:L,50:S,51:A,52:I,53:D,54:k,60:R,61:C,63:O,64:N,65:P,66:F,67:B}),t(u,[2,39]),t(u,[2,40]),t(u,[2,41]),{36:[1,47]},{38:[1,48]},{40:[1,49]},t(u,[2,45]),t(u,[2,46]),{18:[1,50]},{4:f,5:d,10:p,12:m,13:g,14:y,43:51,58:31,60:R,61:C,63:O,64:N,65:P,66:F,67:B},{4:f,5:d,10:p,12:m,13:g,14:y,43:52,58:31,60:R,61:C,63:O,64:N,65:P,66:F,67:B},{4:f,5:d,10:p,12:m,13:g,14:y,43:53,58:31,60:R,61:C,63:O,64:N,65:P,66:F,67:B},{4:f,5:d,10:p,12:m,13:g,14:y,43:54,58:31,60:R,61:C,63:O,64:N,65:P,66:F,67:B},{4:f,5:d,10:p,12:m,13:g,14:y,43:55,58:31,60:R,61:C,63:O,64:N,65:P,66:F,67:B},{4:f,5:d,10:p,12:m,13:g,14:y,43:56,58:31,60:R,61:C,63:O,64:N,65:P,66:F,67:B},{4:f,5:d,8:G,10:p,12:m,13:g,14:y,18:z,44:[1,57],47:[1,58],58:60,59:59,63:O,64:N,65:P,66:F,67:B},t(W,[2,64]),t(W,[2,66]),t(W,[2,67]),t(W,[2,70]),t(W,[2,71]),t(W,[2,72]),t(W,[2,73]),t(W,[2,74]),t(W,[2,75]),t(W,[2,76]),t(W,[2,77]),t(W,[2,78]),t(W,[2,79]),t(W,[2,80]),t(s,[2,35]),t(u,[2,38]),t(u,[2,42]),t(u,[2,43]),t(u,[2,44]),{3:64,4:Z,5:j,6:oe,7:K,8:ee,9:J,10:H,11:q,12:Q,13:ae,14:ue,15:ce,21:63},t(u,[2,53],{59:59,58:60,4:f,5:d,8:G,10:p,12:m,13:g,14:y,18:z,49:[1,77],63:O,64:N,65:P,66:F,67:B}),t(u,[2,56],{59:59,58:60,4:f,5:d,8:G,10:p,12:m,13:g,14:y,18:z,49:[1,78],63:O,64:N,65:P,66:F,67:B}),t(u,[2,57],{59:59,58:60,4:f,5:d,8:G,10:p,12:m,13:g,14:y,18:z,63:O,64:N,65:P,66:F,67:B}),t(u,[2,58],{59:59,58:60,4:f,5:d,8:G,10:p,12:m,13:g,14:y,18:z,63:O,64:N,65:P,66:F,67:B}),t(u,[2,59],{59:59,58:60,4:f,5:d,8:G,10:p,12:m,13:g,14:y,18:z,63:O,64:N,65:P,66:F,67:B}),t(u,[2,60],{59:59,58:60,4:f,5:d,8:G,10:p,12:m,13:g,14:y,18:z,63:O,64:N,65:P,66:F,67:B}),{45:[1,79]},{44:[1,80]},t(W,[2,65]),t(W,[2,81]),t(W,[2,82]),t(W,[2,83]),{3:82,4:Z,5:j,6:oe,7:K,8:ee,9:J,10:H,11:q,12:Q,13:ae,14:ue,15:ce,18:[1,81]},t(te,[2,23]),t(te,[2,1]),t(te,[2,2]),t(te,[2,3]),t(te,[2,4]),t(te,[2,5]),t(te,[2,6]),t(te,[2,7]),t(te,[2,8]),t(te,[2,9]),t(te,[2,10]),t(te,[2,11]),t(te,[2,12]),t(u,[2,52],{58:31,43:83,4:f,5:d,10:p,12:m,13:g,14:y,60:R,61:C,63:O,64:N,65:P,66:F,67:B}),t(u,[2,55],{58:31,43:84,4:f,5:d,10:p,12:m,13:g,14:y,60:R,61:C,63:O,64:N,65:P,66:F,67:B}),{46:[1,85]},{45:[1,86]},{4:Ne,5:se,6:ke,8:Re,11:Ce,13:Pe,16:89,17:Ie,18:$e,19:ye,20:X,22:88,23:87},t(te,[2,24]),t(u,[2,51],{59:59,58:60,4:f,5:d,8:G,10:p,12:m,13:g,14:y,18:z,63:O,64:N,65:P,66:F,67:B}),t(u,[2,54],{59:59,58:60,4:f,5:d,8:G,10:p,12:m,13:g,14:y,18:z,63:O,64:N,65:P,66:F,67:B}),t(u,[2,47],{22:88,16:89,23:100,4:Ne,5:se,6:ke,8:Re,11:Ce,13:Pe,17:Ie,18:$e,19:ye,20:X}),{46:[1,101]},t(u,[2,29],{10:fe}),t(he,[2,27],{16:103,4:Ne,5:se,6:ke,8:Re,11:Ce,13:Pe,17:Ie,18:$e,19:ye,20:X}),t(ge,[2,25]),t(ge,[2,13]),t(ge,[2,14]),t(ge,[2,15]),t(ge,[2,16]),t(ge,[2,17]),t(ge,[2,18]),t(ge,[2,19]),t(ge,[2,20]),t(ge,[2,21]),t(ge,[2,22]),t(u,[2,49],{10:fe}),t(u,[2,48],{22:88,16:89,23:104,4:Ne,5:se,6:ke,8:Re,11:Ce,13:Pe,17:Ie,18:$e,19:ye,20:X}),{4:Ne,5:se,6:ke,8:Re,11:Ce,13:Pe,16:89,17:Ie,18:$e,19:ye,20:X,22:105},t(ge,[2,26]),t(u,[2,50],{10:fe}),t(he,[2,28],{16:103,4:Ne,5:se,6:ke,8:Re,11:Ce,13:Pe,17:Ie,18:$e,19:ye,20:X})],defaultActions:{8:[2,30],9:[2,31]},parseError:o(function(ie,Ee){if(Ee.recoverable)this.trace(ie);else{var Ae=new Error(ie);throw Ae.hash=Ee,Ae}},"parseError"),parse:o(function(ie){var Ee=this,Ae=[0],Ge=[],Be=[null],me=[],He=this.table,Oe="",et=0,bt=0,kt=0,vt=2,rt=1,yt=me.slice.call(arguments,1),Ue=Object.create(this.lexer),tt={yy:{}};for(var ht in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ht)&&(tt.yy[ht]=this.yy[ht]);Ue.setInput(ie,tt.yy),tt.yy.lexer=Ue,tt.yy.parser=this,typeof Ue.yylloc>"u"&&(Ue.yylloc={});var Et=Ue.yylloc;me.push(Et);var er=Ue.options&&Ue.options.ranges;typeof tt.yy.parseError=="function"?this.parseError=tt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function dt(_r){Ae.length=Ae.length-2*_r,Be.length=Be.length-_r,me.length=me.length-_r}o(dt,"popStack");function Je(){var _r;return _r=Ge.pop()||Ue.lex()||rt,typeof _r!="number"&&(_r instanceof Array&&(Ge=_r,_r=Ge.pop()),_r=Ee.symbols_[_r]||_r),_r}o(Je,"lex");for(var ct,Ct,pt,Bt,Tr,yr,or={},ln,Or,ii,mn;;){if(pt=Ae[Ae.length-1],this.defaultActions[pt]?Bt=this.defaultActions[pt]:((ct===null||typeof ct>"u")&&(ct=Je()),Bt=He[pt]&&He[pt][ct]),typeof Bt>"u"||!Bt.length||!Bt[0]){var On="";mn=[];for(ln in He[pt])this.terminals_[ln]&&ln>vt&&mn.push("'"+this.terminals_[ln]+"'");Ue.showPosition?On="Parse error on line "+(et+1)+`: +`+Ue.showPosition()+` +Expecting `+mn.join(", ")+", got '"+(this.terminals_[ct]||ct)+"'":On="Parse error on line "+(et+1)+": Unexpected "+(ct==rt?"end of input":"'"+(this.terminals_[ct]||ct)+"'"),this.parseError(On,{text:Ue.match,token:this.terminals_[ct]||ct,line:Ue.yylineno,loc:Et,expected:mn})}if(Bt[0]instanceof Array&&Bt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+pt+", token: "+ct);switch(Bt[0]){case 1:Ae.push(ct),Be.push(Ue.yytext),me.push(Ue.yylloc),Ae.push(Bt[1]),ct=null,Ct?(ct=Ct,Ct=null):(bt=Ue.yyleng,Oe=Ue.yytext,et=Ue.yylineno,Et=Ue.yylloc,kt>0&&kt--);break;case 2:if(Or=this.productions_[Bt[1]][1],or.$=Be[Be.length-Or],or._$={first_line:me[me.length-(Or||1)].first_line,last_line:me[me.length-1].last_line,first_column:me[me.length-(Or||1)].first_column,last_column:me[me.length-1].last_column},er&&(or._$.range=[me[me.length-(Or||1)].range[0],me[me.length-1].range[1]]),yr=this.performAction.apply(or,[Oe,bt,et,tt.yy,Bt[1],Be,me].concat(yt)),typeof yr<"u")return yr;Or&&(Ae=Ae.slice(0,-1*Or*2),Be=Be.slice(0,-1*Or),me=me.slice(0,-1*Or)),Ae.push(this.productions_[Bt[1]][0]),Be.push(or.$),me.push(or._$),ii=He[Ae[Ae.length-2]][Ae[Ae.length-1]],Ae.push(ii);break;case 3:return!0}}return!0},"parse")},ve=function(){var Te={EOF:1,parseError:o(function(Ee,Ae){if(this.yy.parser)this.yy.parser.parseError(Ee,Ae);else throw new Error(Ee)},"parseError"),setInput:o(function(ie,Ee){return this.yy=Ee||this.yy||{},this._input=ie,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var ie=this._input[0];this.yytext+=ie,this.yyleng++,this.offset++,this.match+=ie,this.matched+=ie;var Ee=ie.match(/(?:\r\n?|\n).*/g);return Ee?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),ie},"input"),unput:o(function(ie){var Ee=ie.length,Ae=ie.split(/(?:\r\n?|\n)/g);this._input=ie+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ee),this.offset-=Ee;var Ge=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Ae.length-1&&(this.yylineno-=Ae.length-1);var Be=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Ae?(Ae.length===Ge.length?this.yylloc.first_column:0)+Ge[Ge.length-Ae.length].length-Ae[0].length:this.yylloc.first_column-Ee},this.options.ranges&&(this.yylloc.range=[Be[0],Be[0]+this.yyleng-Ee]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(ie){this.unput(this.match.slice(ie))},"less"),pastInput:o(function(){var ie=this.matched.substr(0,this.matched.length-this.match.length);return(ie.length>20?"...":"")+ie.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var ie=this.match;return ie.length<20&&(ie+=this._input.substr(0,20-ie.length)),(ie.substr(0,20)+(ie.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var ie=this.pastInput(),Ee=new Array(ie.length+1).join("-");return ie+this.upcomingInput()+` +`+Ee+"^"},"showPosition"),test_match:o(function(ie,Ee){var Ae,Ge,Be;if(this.options.backtrack_lexer&&(Be={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Be.yylloc.range=this.yylloc.range.slice(0))),Ge=ie[0].match(/(?:\r\n?|\n).*/g),Ge&&(this.yylineno+=Ge.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Ge?Ge[Ge.length-1].length-Ge[Ge.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+ie[0].length},this.yytext+=ie[0],this.match+=ie[0],this.matches=ie,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(ie[0].length),this.matched+=ie[0],Ae=this.performAction.call(this,this.yy,this,Ee,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Ae)return Ae;if(this._backtrack){for(var me in Be)this[me]=Be[me];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var ie,Ee,Ae,Ge;this._more||(this.yytext="",this.match="");for(var Be=this._currentRules(),me=0;meEe[0].length)){if(Ee=Ae,Ge=me,this.options.backtrack_lexer){if(ie=this.test_match(Ae,Be[me]),ie!==!1)return ie;if(this._backtrack){Ee=!1;continue}else return!1}else if(!this.options.flex)break}return Ee?(ie=this.test_match(Ee,Be[Ge]),ie!==!1?ie:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var Ee=this.next();return Ee||this.lex()},"lex"),begin:o(function(Ee){this.conditionStack.push(Ee)},"begin"),popState:o(function(){var Ee=this.conditionStack.length-1;return Ee>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(Ee){return Ee=this.conditionStack.length-1-Math.abs(Ee||0),Ee>=0?this.conditionStack[Ee]:"INITIAL"},"topState"),pushState:o(function(Ee){this.begin(Ee)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(Ee,Ae,Ge,Be){var me=Be;switch(Ge){case 0:break;case 1:break;case 2:return 55;case 3:break;case 4:return this.begin("title"),35;break;case 5:return this.popState(),"title_value";break;case 6:return this.begin("acc_title"),37;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),39;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 48;case 14:return 50;case 15:return 49;case 16:return 51;case 17:return 52;case 18:return 53;case 19:return 54;case 20:return 25;case 21:this.begin("md_string");break;case 22:return"MD_STR";case 23:this.popState();break;case 24:this.begin("string");break;case 25:this.popState();break;case 26:return"STR";case 27:this.begin("class_name");break;case 28:return this.popState(),47;break;case 29:return this.begin("point_start"),44;break;case 30:return this.begin("point_x"),45;break;case 31:this.popState();break;case 32:this.popState(),this.begin("point_y");break;case 33:return this.popState(),46;break;case 34:return 28;case 35:return 4;case 36:return 11;case 37:return 64;case 38:return 10;case 39:return 65;case 40:return 65;case 41:return 14;case 42:return 13;case 43:return 67;case 44:return 66;case 45:return 12;case 46:return 8;case 47:return 5;case 48:return 18;case 49:return 56;case 50:return 63;case 51:return 57}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?: *x-axis *)/i,/^(?: *y-axis *)/i,/^(?: *--+> *)/i,/^(?: *quadrant-1 *)/i,/^(?: *quadrant-2 *)/i,/^(?: *quadrant-3 *)/i,/^(?: *quadrant-4 *)/i,/^(?:classDef\b)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?::::)/i,/^(?:^\w+)/i,/^(?:\s*:\s*\[\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?:\s*\] *)/i,/^(?:\s*,\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?: *quadrantChart *)/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s)/i,/^(?:;)/i,/^(?:[!"#$%&'*+,-.`?\\_/])/i,/^(?:$)/i],conditions:{class_name:{rules:[28],inclusive:!1},point_y:{rules:[33],inclusive:!1},point_x:{rules:[32],inclusive:!1},point_start:{rules:[30,31],inclusive:!1},acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},title:{rules:[5],inclusive:!1},md_string:{rules:[22,23],inclusive:!1},string:{rules:[25,26],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,6,8,10,13,14,15,16,17,18,19,20,21,24,27,29,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],inclusive:!0}}};return Te}();ne.lexer=ve;function U(){this.yy={}}return o(U,"Parser"),U.prototype=ne,ne.Parser=U,new U}();aO.parser=aO;Ohe=aO});var ps,EE,Bhe=M(()=>{"use strict";pr();bs();ut();i4();ps=vp(),EE=class{constructor(){this.classes=new Map;this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData()}static{o(this,"QuadrantBuilder")}getDefaultData(){return{titleText:"",quadrant1Text:"",quadrant2Text:"",quadrant3Text:"",quadrant4Text:"",xAxisLeftText:"",xAxisRightText:"",yAxisBottomText:"",yAxisTopText:"",points:[]}}getDefaultConfig(){return{showXAxis:!0,showYAxis:!0,showTitle:!0,chartHeight:ur.quadrantChart?.chartWidth||500,chartWidth:ur.quadrantChart?.chartHeight||500,titlePadding:ur.quadrantChart?.titlePadding||10,titleFontSize:ur.quadrantChart?.titleFontSize||20,quadrantPadding:ur.quadrantChart?.quadrantPadding||5,xAxisLabelPadding:ur.quadrantChart?.xAxisLabelPadding||5,yAxisLabelPadding:ur.quadrantChart?.yAxisLabelPadding||5,xAxisLabelFontSize:ur.quadrantChart?.xAxisLabelFontSize||16,yAxisLabelFontSize:ur.quadrantChart?.yAxisLabelFontSize||16,quadrantLabelFontSize:ur.quadrantChart?.quadrantLabelFontSize||16,quadrantTextTopPadding:ur.quadrantChart?.quadrantTextTopPadding||5,pointTextPadding:ur.quadrantChart?.pointTextPadding||5,pointLabelFontSize:ur.quadrantChart?.pointLabelFontSize||12,pointRadius:ur.quadrantChart?.pointRadius||5,xAxisPosition:ur.quadrantChart?.xAxisPosition||"top",yAxisPosition:ur.quadrantChart?.yAxisPosition||"left",quadrantInternalBorderStrokeWidth:ur.quadrantChart?.quadrantInternalBorderStrokeWidth||1,quadrantExternalBorderStrokeWidth:ur.quadrantChart?.quadrantExternalBorderStrokeWidth||2}}getDefaultThemeConfig(){return{quadrant1Fill:ps.quadrant1Fill,quadrant2Fill:ps.quadrant2Fill,quadrant3Fill:ps.quadrant3Fill,quadrant4Fill:ps.quadrant4Fill,quadrant1TextFill:ps.quadrant1TextFill,quadrant2TextFill:ps.quadrant2TextFill,quadrant3TextFill:ps.quadrant3TextFill,quadrant4TextFill:ps.quadrant4TextFill,quadrantPointFill:ps.quadrantPointFill,quadrantPointTextFill:ps.quadrantPointTextFill,quadrantXAxisTextFill:ps.quadrantXAxisTextFill,quadrantYAxisTextFill:ps.quadrantYAxisTextFill,quadrantTitleFill:ps.quadrantTitleFill,quadrantInternalBorderStrokeFill:ps.quadrantInternalBorderStrokeFill,quadrantExternalBorderStrokeFill:ps.quadrantExternalBorderStrokeFill}}clear(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData(),this.classes=new Map,Y.info("clear called")}setData(e){this.data={...this.data,...e}}addPoints(e){this.data.points=[...e,...this.data.points]}addClass(e,r){this.classes.set(e,r)}setConfig(e){Y.trace("setConfig called with: ",e),this.config={...this.config,...e}}setThemeConfig(e){Y.trace("setThemeConfig called with: ",e),this.themeConfig={...this.themeConfig,...e}}calculateSpace(e,r,n,i){let a=this.config.xAxisLabelPadding*2+this.config.xAxisLabelFontSize,s={top:e==="top"&&r?a:0,bottom:e==="bottom"&&r?a:0},l=this.config.yAxisLabelPadding*2+this.config.yAxisLabelFontSize,u={left:this.config.yAxisPosition==="left"&&n?l:0,right:this.config.yAxisPosition==="right"&&n?l:0},h=this.config.titleFontSize+this.config.titlePadding*2,f={top:i?h:0},d=this.config.quadrantPadding+u.left,p=this.config.quadrantPadding+s.top+f.top,m=this.config.chartWidth-this.config.quadrantPadding*2-u.left-u.right,g=this.config.chartHeight-this.config.quadrantPadding*2-s.top-s.bottom-f.top,y=m/2,v=g/2;return{xAxisSpace:s,yAxisSpace:u,titleSpace:f,quadrantSpace:{quadrantLeft:d,quadrantTop:p,quadrantWidth:m,quadrantHalfWidth:y,quadrantHeight:g,quadrantHalfHeight:v}}}getAxisLabels(e,r,n,i){let{quadrantSpace:a,titleSpace:s}=i,{quadrantHalfHeight:l,quadrantHeight:u,quadrantLeft:h,quadrantHalfWidth:f,quadrantTop:d,quadrantWidth:p}=a,m=!!this.data.xAxisRightText,g=!!this.data.yAxisTopText,y=[];return this.data.xAxisLeftText&&r&&y.push({text:this.data.xAxisLeftText,fill:this.themeConfig.quadrantXAxisTextFill,x:h+(m?f/2:0),y:e==="top"?this.config.xAxisLabelPadding+s.top:this.config.xAxisLabelPadding+d+u+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:m?"center":"left",horizontalPos:"top",rotation:0}),this.data.xAxisRightText&&r&&y.push({text:this.data.xAxisRightText,fill:this.themeConfig.quadrantXAxisTextFill,x:h+f+(m?f/2:0),y:e==="top"?this.config.xAxisLabelPadding+s.top:this.config.xAxisLabelPadding+d+u+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:m?"center":"left",horizontalPos:"top",rotation:0}),this.data.yAxisBottomText&&n&&y.push({text:this.data.yAxisBottomText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+h+p+this.config.quadrantPadding,y:d+u-(g?l/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:g?"center":"left",horizontalPos:"top",rotation:-90}),this.data.yAxisTopText&&n&&y.push({text:this.data.yAxisTopText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+h+p+this.config.quadrantPadding,y:d+l-(g?l/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:g?"center":"left",horizontalPos:"top",rotation:-90}),y}getQuadrants(e){let{quadrantSpace:r}=e,{quadrantHalfHeight:n,quadrantLeft:i,quadrantHalfWidth:a,quadrantTop:s}=r,l=[{text:{text:this.data.quadrant1Text,fill:this.themeConfig.quadrant1TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i+a,y:s,width:a,height:n,fill:this.themeConfig.quadrant1Fill},{text:{text:this.data.quadrant2Text,fill:this.themeConfig.quadrant2TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i,y:s,width:a,height:n,fill:this.themeConfig.quadrant2Fill},{text:{text:this.data.quadrant3Text,fill:this.themeConfig.quadrant3TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i,y:s+n,width:a,height:n,fill:this.themeConfig.quadrant3Fill},{text:{text:this.data.quadrant4Text,fill:this.themeConfig.quadrant4TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i+a,y:s+n,width:a,height:n,fill:this.themeConfig.quadrant4Fill}];for(let u of l)u.text.x=u.x+u.width/2,this.data.points.length===0?(u.text.y=u.y+u.height/2,u.text.horizontalPos="middle"):(u.text.y=u.y+this.config.quadrantTextTopPadding,u.text.horizontalPos="top");return l}getQuadrantPoints(e){let{quadrantSpace:r}=e,{quadrantHeight:n,quadrantLeft:i,quadrantTop:a,quadrantWidth:s}=r,l=Cl().domain([0,1]).range([i,s+i]),u=Cl().domain([0,1]).range([n+a,a]);return this.data.points.map(f=>{let d=this.classes.get(f.className);return d&&(f={...d,...f}),{x:l(f.x),y:u(f.y),fill:f.color??this.themeConfig.quadrantPointFill,radius:f.radius??this.config.pointRadius,text:{text:f.text,fill:this.themeConfig.quadrantPointTextFill,x:l(f.x),y:u(f.y)+this.config.pointTextPadding,verticalPos:"center",horizontalPos:"top",fontSize:this.config.pointLabelFontSize,rotation:0},strokeColor:f.strokeColor??this.themeConfig.quadrantPointFill,strokeWidth:f.strokeWidth??"0px"}})}getBorders(e){let r=this.config.quadrantExternalBorderStrokeWidth/2,{quadrantSpace:n}=e,{quadrantHalfHeight:i,quadrantHeight:a,quadrantLeft:s,quadrantHalfWidth:l,quadrantTop:u,quadrantWidth:h}=n;return[{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s-r,y1:u,x2:s+h+r,y2:u},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s+h,y1:u+r,x2:s+h,y2:u+a-r},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s-r,y1:u+a,x2:s+h+r,y2:u+a},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s,y1:u+r,x2:s,y2:u+a-r},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:s+l,y1:u+r,x2:s+l,y2:u+a-r},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:s+r,y1:u+i,x2:s+h-r,y2:u+i}]}getTitle(e){if(e)return{text:this.data.titleText,fill:this.themeConfig.quadrantTitleFill,fontSize:this.config.titleFontSize,horizontalPos:"top",verticalPos:"center",rotation:0,y:this.config.titlePadding,x:this.config.chartWidth/2}}build(){let e=this.config.showXAxis&&!!(this.data.xAxisLeftText||this.data.xAxisRightText),r=this.config.showYAxis&&!!(this.data.yAxisTopText||this.data.yAxisBottomText),n=this.config.showTitle&&!!this.data.titleText,i=this.data.points.length>0?"bottom":this.config.xAxisPosition,a=this.calculateSpace(i,e,r,n);return{points:this.getQuadrantPoints(a),quadrants:this.getQuadrants(a),axisLabels:this.getAxisLabels(i,e,r,a),borderLines:this.getBorders(a),title:this.getTitle(n)}}}});function sO(t){return!/^#?([\dA-Fa-f]{6}|[\dA-Fa-f]{3})$/.test(t)}function Fhe(t){return!/^\d+$/.test(t)}function zhe(t){return!/^\d+px$/.test(t)}var R0,Ghe=M(()=>{"use strict";R0=class extends Error{static{o(this,"InvalidStyleError")}constructor(e,r,n){super(`value for ${e} ${r} is invalid, please use a valid ${n}`),this.name="InvalidStyleError"}};o(sO,"validateHexCode");o(Fhe,"validateNumber");o(zhe,"validateSizeInPixels")});function th(t){return kr(t.trim(),lVe)}function cVe(t){Ea.setData({quadrant1Text:th(t.text)})}function uVe(t){Ea.setData({quadrant2Text:th(t.text)})}function hVe(t){Ea.setData({quadrant3Text:th(t.text)})}function fVe(t){Ea.setData({quadrant4Text:th(t.text)})}function dVe(t){Ea.setData({xAxisLeftText:th(t.text)})}function pVe(t){Ea.setData({xAxisRightText:th(t.text)})}function mVe(t){Ea.setData({yAxisTopText:th(t.text)})}function gVe(t){Ea.setData({yAxisBottomText:th(t.text)})}function oO(t){let e={};for(let r of t){let[n,i]=r.trim().split(/\s*:\s*/);if(n==="radius"){if(Fhe(i))throw new R0(n,i,"number");e.radius=parseInt(i)}else if(n==="color"){if(sO(i))throw new R0(n,i,"hex code");e.color=i}else if(n==="stroke-color"){if(sO(i))throw new R0(n,i,"hex code");e.strokeColor=i}else if(n==="stroke-width"){if(zhe(i))throw new R0(n,i,"number of pixels (eg. 10px)");e.strokeWidth=i}else throw new Error(`style named ${n} is not supported.`)}return e}function yVe(t,e,r,n,i){let a=oO(i);Ea.addPoints([{x:r,y:n,text:th(t.text),className:e,...a}])}function vVe(t,e){Ea.addClass(t,oO(e))}function xVe(t){Ea.setConfig({chartWidth:t})}function bVe(t){Ea.setConfig({chartHeight:t})}function wVe(){let t=pe(),{themeVariables:e,quadrantChart:r}=t;return r&&Ea.setConfig(r),Ea.setThemeConfig({quadrant1Fill:e.quadrant1Fill,quadrant2Fill:e.quadrant2Fill,quadrant3Fill:e.quadrant3Fill,quadrant4Fill:e.quadrant4Fill,quadrant1TextFill:e.quadrant1TextFill,quadrant2TextFill:e.quadrant2TextFill,quadrant3TextFill:e.quadrant3TextFill,quadrant4TextFill:e.quadrant4TextFill,quadrantPointFill:e.quadrantPointFill,quadrantPointTextFill:e.quadrantPointTextFill,quadrantXAxisTextFill:e.quadrantXAxisTextFill,quadrantYAxisTextFill:e.quadrantYAxisTextFill,quadrantExternalBorderStrokeFill:e.quadrantExternalBorderStrokeFill,quadrantInternalBorderStrokeFill:e.quadrantInternalBorderStrokeFill,quadrantTitleFill:e.quadrantTitleFill}),Ea.setData({titleText:Jr()}),Ea.build()}var lVe,Ea,TVe,$he,Vhe=M(()=>{"use strict";Vt();fr();Ai();Bhe();Ghe();lVe=pe();o(th,"textSanitizer");Ea=new EE;o(cVe,"setQuadrant1Text");o(uVe,"setQuadrant2Text");o(hVe,"setQuadrant3Text");o(fVe,"setQuadrant4Text");o(dVe,"setXAxisLeftText");o(pVe,"setXAxisRightText");o(mVe,"setYAxisTopText");o(gVe,"setYAxisBottomText");o(oO,"parseStyles");o(yVe,"addPoint");o(vVe,"addClass");o(xVe,"setWidth");o(bVe,"setHeight");o(wVe,"getQuadrantData");TVe=o(function(){Ea.clear(),Lr()},"clear"),$he={setWidth:xVe,setHeight:bVe,setQuadrant1Text:cVe,setQuadrant2Text:uVe,setQuadrant3Text:hVe,setQuadrant4Text:fVe,setXAxisLeftText:dVe,setXAxisRightText:pVe,setYAxisTopText:mVe,setYAxisBottomText:gVe,parseStyles:oO,addPoint:yVe,addClass:vVe,getQuadrantData:wVe,clear:TVe,setAccTitle:Mr,getAccTitle:Br,setDiagramTitle:cn,getDiagramTitle:Jr,getAccDescription:zr,setAccDescription:Fr}});var kVe,Uhe,Hhe=M(()=>{"use strict";pr();Vt();ut();ai();kVe=o((t,e,r,n)=>{function i(S){return S==="top"?"hanging":"middle"}o(i,"getDominantBaseLine");function a(S){return S==="left"?"start":"middle"}o(a,"getTextAnchor");function s(S){return`translate(${S.x}, ${S.y}) rotate(${S.rotation||0})`}o(s,"getTransformation");let l=pe();Y.debug(`Rendering quadrant chart +`+t);let u=l.securityLevel,h;u==="sandbox"&&(h=Ve("#i"+e));let d=(u==="sandbox"?Ve(h.nodes()[0].contentDocument.body):Ve("body")).select(`[id="${e}"]`),p=d.append("g").attr("class","main"),m=l.quadrantChart?.chartWidth??500,g=l.quadrantChart?.chartHeight??500;Zr(d,g,m,l.quadrantChart?.useMaxWidth??!0),d.attr("viewBox","0 0 "+m+" "+g),n.db.setHeight(g),n.db.setWidth(m);let y=n.db.getQuadrantData(),v=p.append("g").attr("class","quadrants"),x=p.append("g").attr("class","border"),b=p.append("g").attr("class","data-points"),w=p.append("g").attr("class","labels"),_=p.append("g").attr("class","title");y.title&&_.append("text").attr("x",0).attr("y",0).attr("fill",y.title.fill).attr("font-size",y.title.fontSize).attr("dominant-baseline",i(y.title.horizontalPos)).attr("text-anchor",a(y.title.verticalPos)).attr("transform",s(y.title)).text(y.title.text),y.borderLines&&x.selectAll("line").data(y.borderLines).enter().append("line").attr("x1",S=>S.x1).attr("y1",S=>S.y1).attr("x2",S=>S.x2).attr("y2",S=>S.y2).style("stroke",S=>S.strokeFill).style("stroke-width",S=>S.strokeWidth);let T=v.selectAll("g.quadrant").data(y.quadrants).enter().append("g").attr("class","quadrant");T.append("rect").attr("x",S=>S.x).attr("y",S=>S.y).attr("width",S=>S.width).attr("height",S=>S.height).attr("fill",S=>S.fill),T.append("text").attr("x",0).attr("y",0).attr("fill",S=>S.text.fill).attr("font-size",S=>S.text.fontSize).attr("dominant-baseline",S=>i(S.text.horizontalPos)).attr("text-anchor",S=>a(S.text.verticalPos)).attr("transform",S=>s(S.text)).text(S=>S.text.text),w.selectAll("g.label").data(y.axisLabels).enter().append("g").attr("class","label").append("text").attr("x",0).attr("y",0).text(S=>S.text).attr("fill",S=>S.fill).attr("font-size",S=>S.fontSize).attr("dominant-baseline",S=>i(S.horizontalPos)).attr("text-anchor",S=>a(S.verticalPos)).attr("transform",S=>s(S));let L=b.selectAll("g.data-point").data(y.points).enter().append("g").attr("class","data-point");L.append("circle").attr("cx",S=>S.x).attr("cy",S=>S.y).attr("r",S=>S.radius).attr("fill",S=>S.fill).attr("stroke",S=>S.strokeColor).attr("stroke-width",S=>S.strokeWidth),L.append("text").attr("x",0).attr("y",0).text(S=>S.text.text).attr("fill",S=>S.text.fill).attr("font-size",S=>S.text.fontSize).attr("dominant-baseline",S=>i(S.text.horizontalPos)).attr("text-anchor",S=>a(S.text.verticalPos)).attr("transform",S=>s(S.text))},"draw"),Uhe={draw:kVe}});var Whe={};vr(Whe,{diagram:()=>EVe});var EVe,Yhe=M(()=>{"use strict";Phe();Vhe();Hhe();EVe={parser:Ohe,db:$he,renderer:Uhe,styles:o(()=>"","styles")}});var lO,jhe,Khe=M(()=>{"use strict";lO=function(){var t=o(function(O,N,P,F){for(P=P||{},F=O.length;F--;P[O[F]]=N);return P},"o"),e=[1,10,12,14,16,18,19,21,23],r=[2,6],n=[1,3],i=[1,5],a=[1,6],s=[1,7],l=[1,5,10,12,14,16,18,19,21,23,34,35,36],u=[1,25],h=[1,26],f=[1,28],d=[1,29],p=[1,30],m=[1,31],g=[1,32],y=[1,33],v=[1,34],x=[1,35],b=[1,36],w=[1,37],_=[1,43],T=[1,42],E=[1,47],L=[1,50],S=[1,10,12,14,16,18,19,21,23,34,35,36],A=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36],I=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36,41,42,43,44,45,46,47,48,49,50],D=[1,64],k={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,eol:4,XYCHART:5,chartConfig:6,document:7,CHART_ORIENTATION:8,statement:9,title:10,text:11,X_AXIS:12,parseXAxis:13,Y_AXIS:14,parseYAxis:15,LINE:16,plotData:17,BAR:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,SQUARE_BRACES_START:24,commaSeparatedNumbers:25,SQUARE_BRACES_END:26,NUMBER_WITH_DECIMAL:27,COMMA:28,xAxisData:29,bandData:30,ARROW_DELIMITER:31,commaSeparatedTexts:32,yAxisData:33,NEWLINE:34,SEMI:35,EOF:36,alphaNum:37,STR:38,MD_STR:39,alphaNumToken:40,AMP:41,NUM:42,ALPHA:43,PLUS:44,EQUALS:45,MULT:46,DOT:47,BRKT:48,MINUS:49,UNDERSCORE:50,$accept:0,$end:1},terminals_:{2:"error",5:"XYCHART",8:"CHART_ORIENTATION",10:"title",12:"X_AXIS",14:"Y_AXIS",16:"LINE",18:"BAR",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"SQUARE_BRACES_START",26:"SQUARE_BRACES_END",27:"NUMBER_WITH_DECIMAL",28:"COMMA",31:"ARROW_DELIMITER",34:"NEWLINE",35:"SEMI",36:"EOF",38:"STR",39:"MD_STR",41:"AMP",42:"NUM",43:"ALPHA",44:"PLUS",45:"EQUALS",46:"MULT",47:"DOT",48:"BRKT",49:"MINUS",50:"UNDERSCORE"},productions_:[0,[3,2],[3,3],[3,2],[3,1],[6,1],[7,0],[7,2],[9,2],[9,2],[9,2],[9,2],[9,2],[9,3],[9,2],[9,3],[9,2],[9,2],[9,1],[17,3],[25,3],[25,1],[13,1],[13,2],[13,1],[29,1],[29,3],[30,3],[32,3],[32,1],[15,1],[15,2],[15,1],[33,3],[4,1],[4,1],[4,1],[11,1],[11,1],[11,1],[37,1],[37,2],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1]],performAction:o(function(N,P,F,B,G,z,W){var Z=z.length-1;switch(G){case 5:B.setOrientation(z[Z]);break;case 9:B.setDiagramTitle(z[Z].text.trim());break;case 12:B.setLineData({text:"",type:"text"},z[Z]);break;case 13:B.setLineData(z[Z-1],z[Z]);break;case 14:B.setBarData({text:"",type:"text"},z[Z]);break;case 15:B.setBarData(z[Z-1],z[Z]);break;case 16:this.$=z[Z].trim(),B.setAccTitle(this.$);break;case 17:case 18:this.$=z[Z].trim(),B.setAccDescription(this.$);break;case 19:this.$=z[Z-1];break;case 20:this.$=[Number(z[Z-2]),...z[Z]];break;case 21:this.$=[Number(z[Z])];break;case 22:B.setXAxisTitle(z[Z]);break;case 23:B.setXAxisTitle(z[Z-1]);break;case 24:B.setXAxisTitle({type:"text",text:""});break;case 25:B.setXAxisBand(z[Z]);break;case 26:B.setXAxisRangeData(Number(z[Z-2]),Number(z[Z]));break;case 27:this.$=z[Z-1];break;case 28:this.$=[z[Z-2],...z[Z]];break;case 29:this.$=[z[Z]];break;case 30:B.setYAxisTitle(z[Z]);break;case 31:B.setYAxisTitle(z[Z-1]);break;case 32:B.setYAxisTitle({type:"text",text:""});break;case 33:B.setYAxisRangeData(Number(z[Z-2]),Number(z[Z]));break;case 37:this.$={text:z[Z],type:"text"};break;case 38:this.$={text:z[Z],type:"text"};break;case 39:this.$={text:z[Z],type:"markdown"};break;case 40:this.$=z[Z];break;case 41:this.$=z[Z-1]+""+z[Z];break}},"anonymous"),table:[t(e,r,{3:1,4:2,7:4,5:n,34:i,35:a,36:s}),{1:[3]},t(e,r,{4:2,7:4,3:8,5:n,34:i,35:a,36:s}),t(e,r,{4:2,7:4,6:9,3:10,5:n,8:[1,11],34:i,35:a,36:s}),{1:[2,4],9:12,10:[1,13],12:[1,14],14:[1,15],16:[1,16],18:[1,17],19:[1,18],21:[1,19],23:[1,20]},t(l,[2,34]),t(l,[2,35]),t(l,[2,36]),{1:[2,1]},t(e,r,{4:2,7:4,3:21,5:n,34:i,35:a,36:s}),{1:[2,3]},t(l,[2,5]),t(e,[2,7],{4:22,34:i,35:a,36:s}),{11:23,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:39,13:38,24:_,27:T,29:40,30:41,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:45,15:44,27:E,33:46,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:49,17:48,24:L,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:52,17:51,24:L,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{20:[1,53]},{22:[1,54]},t(S,[2,18]),{1:[2,2]},t(S,[2,8]),t(S,[2,9]),t(A,[2,37],{40:55,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w}),t(A,[2,38]),t(A,[2,39]),t(I,[2,40]),t(I,[2,42]),t(I,[2,43]),t(I,[2,44]),t(I,[2,45]),t(I,[2,46]),t(I,[2,47]),t(I,[2,48]),t(I,[2,49]),t(I,[2,50]),t(I,[2,51]),t(S,[2,10]),t(S,[2,22],{30:41,29:56,24:_,27:T}),t(S,[2,24]),t(S,[2,25]),{31:[1,57]},{11:59,32:58,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},t(S,[2,11]),t(S,[2,30],{33:60,27:E}),t(S,[2,32]),{31:[1,61]},t(S,[2,12]),{17:62,24:L},{25:63,27:D},t(S,[2,14]),{17:65,24:L},t(S,[2,16]),t(S,[2,17]),t(I,[2,41]),t(S,[2,23]),{27:[1,66]},{26:[1,67]},{26:[2,29],28:[1,68]},t(S,[2,31]),{27:[1,69]},t(S,[2,13]),{26:[1,70]},{26:[2,21],28:[1,71]},t(S,[2,15]),t(S,[2,26]),t(S,[2,27]),{11:59,32:72,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},t(S,[2,33]),t(S,[2,19]),{25:73,27:D},{26:[2,28]},{26:[2,20]}],defaultActions:{8:[2,1],10:[2,3],21:[2,2],72:[2,28],73:[2,20]},parseError:o(function(N,P){if(P.recoverable)this.trace(N);else{var F=new Error(N);throw F.hash=P,F}},"parseError"),parse:o(function(N){var P=this,F=[0],B=[],G=[null],z=[],W=this.table,Z="",j=0,oe=0,K=0,ee=2,J=1,H=z.slice.call(arguments,1),q=Object.create(this.lexer),Q={yy:{}};for(var ae in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ae)&&(Q.yy[ae]=this.yy[ae]);q.setInput(N,Q.yy),Q.yy.lexer=q,Q.yy.parser=this,typeof q.yylloc>"u"&&(q.yylloc={});var ue=q.yylloc;z.push(ue);var ce=q.options&&q.options.ranges;typeof Q.yy.parseError=="function"?this.parseError=Q.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function te(ne){F.length=F.length-2*ne,G.length=G.length-ne,z.length=z.length-ne}o(te,"popStack");function Ne(){var ne;return ne=B.pop()||q.lex()||J,typeof ne!="number"&&(ne instanceof Array&&(B=ne,ne=B.pop()),ne=P.symbols_[ne]||ne),ne}o(Ne,"lex");for(var se,ke,Re,Ce,Pe,Ie,$e={},ye,X,fe,he;;){if(Re=F[F.length-1],this.defaultActions[Re]?Ce=this.defaultActions[Re]:((se===null||typeof se>"u")&&(se=Ne()),Ce=W[Re]&&W[Re][se]),typeof Ce>"u"||!Ce.length||!Ce[0]){var ge="";he=[];for(ye in W[Re])this.terminals_[ye]&&ye>ee&&he.push("'"+this.terminals_[ye]+"'");q.showPosition?ge="Parse error on line "+(j+1)+`: +`+q.showPosition()+` +Expecting `+he.join(", ")+", got '"+(this.terminals_[se]||se)+"'":ge="Parse error on line "+(j+1)+": Unexpected "+(se==J?"end of input":"'"+(this.terminals_[se]||se)+"'"),this.parseError(ge,{text:q.match,token:this.terminals_[se]||se,line:q.yylineno,loc:ue,expected:he})}if(Ce[0]instanceof Array&&Ce.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Re+", token: "+se);switch(Ce[0]){case 1:F.push(se),G.push(q.yytext),z.push(q.yylloc),F.push(Ce[1]),se=null,ke?(se=ke,ke=null):(oe=q.yyleng,Z=q.yytext,j=q.yylineno,ue=q.yylloc,K>0&&K--);break;case 2:if(X=this.productions_[Ce[1]][1],$e.$=G[G.length-X],$e._$={first_line:z[z.length-(X||1)].first_line,last_line:z[z.length-1].last_line,first_column:z[z.length-(X||1)].first_column,last_column:z[z.length-1].last_column},ce&&($e._$.range=[z[z.length-(X||1)].range[0],z[z.length-1].range[1]]),Ie=this.performAction.apply($e,[Z,oe,j,Q.yy,Ce[1],G,z].concat(H)),typeof Ie<"u")return Ie;X&&(F=F.slice(0,-1*X*2),G=G.slice(0,-1*X),z=z.slice(0,-1*X)),F.push(this.productions_[Ce[1]][0]),G.push($e.$),z.push($e._$),fe=W[F[F.length-2]][F[F.length-1]],F.push(fe);break;case 3:return!0}}return!0},"parse")},R=function(){var O={EOF:1,parseError:o(function(P,F){if(this.yy.parser)this.yy.parser.parseError(P,F);else throw new Error(P)},"parseError"),setInput:o(function(N,P){return this.yy=P||this.yy||{},this._input=N,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var N=this._input[0];this.yytext+=N,this.yyleng++,this.offset++,this.match+=N,this.matched+=N;var P=N.match(/(?:\r\n?|\n).*/g);return P?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),N},"input"),unput:o(function(N){var P=N.length,F=N.split(/(?:\r\n?|\n)/g);this._input=N+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-P),this.offset-=P;var B=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),F.length-1&&(this.yylineno-=F.length-1);var G=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:F?(F.length===B.length?this.yylloc.first_column:0)+B[B.length-F.length].length-F[0].length:this.yylloc.first_column-P},this.options.ranges&&(this.yylloc.range=[G[0],G[0]+this.yyleng-P]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(N){this.unput(this.match.slice(N))},"less"),pastInput:o(function(){var N=this.matched.substr(0,this.matched.length-this.match.length);return(N.length>20?"...":"")+N.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var N=this.match;return N.length<20&&(N+=this._input.substr(0,20-N.length)),(N.substr(0,20)+(N.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var N=this.pastInput(),P=new Array(N.length+1).join("-");return N+this.upcomingInput()+` +`+P+"^"},"showPosition"),test_match:o(function(N,P){var F,B,G;if(this.options.backtrack_lexer&&(G={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(G.yylloc.range=this.yylloc.range.slice(0))),B=N[0].match(/(?:\r\n?|\n).*/g),B&&(this.yylineno+=B.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:B?B[B.length-1].length-B[B.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+N[0].length},this.yytext+=N[0],this.match+=N[0],this.matches=N,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(N[0].length),this.matched+=N[0],F=this.performAction.call(this,this.yy,this,P,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),F)return F;if(this._backtrack){for(var z in G)this[z]=G[z];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var N,P,F,B;this._more||(this.yytext="",this.match="");for(var G=this._currentRules(),z=0;zP[0].length)){if(P=F,B=z,this.options.backtrack_lexer){if(N=this.test_match(F,G[z]),N!==!1)return N;if(this._backtrack){P=!1;continue}else return!1}else if(!this.options.flex)break}return P?(N=this.test_match(P,G[B]),N!==!1?N:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var P=this.next();return P||this.lex()},"lex"),begin:o(function(P){this.conditionStack.push(P)},"begin"),popState:o(function(){var P=this.conditionStack.length-1;return P>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(P){return P=this.conditionStack.length-1-Math.abs(P||0),P>=0?this.conditionStack[P]:"INITIAL"},"topState"),pushState:o(function(P){this.begin(P)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(P,F,B,G){var z=G;switch(B){case 0:break;case 1:break;case 2:return this.popState(),34;break;case 3:return this.popState(),34;break;case 4:return 34;case 5:break;case 6:return 10;case 7:return this.pushState("acc_title"),19;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.pushState("acc_descr"),21;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.pushState("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 5;case 15:return 8;case 16:return this.pushState("axis_data"),"X_AXIS";break;case 17:return this.pushState("axis_data"),"Y_AXIS";break;case 18:return this.pushState("axis_band_data"),24;break;case 19:return 31;case 20:return this.pushState("data"),16;break;case 21:return this.pushState("data"),18;break;case 22:return this.pushState("data_inner"),24;break;case 23:return 27;case 24:return this.popState(),26;break;case 25:this.popState();break;case 26:this.pushState("string");break;case 27:this.popState();break;case 28:return"STR";case 29:return 24;case 30:return 26;case 31:return 43;case 32:return"COLON";case 33:return 44;case 34:return 28;case 35:return 45;case 36:return 46;case 37:return 48;case 38:return 50;case 39:return 47;case 40:return 41;case 41:return 49;case 42:return 42;case 43:break;case 44:return 35;case 45:return 36}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:(\r?\n))/i,/^(?:(\r?\n))/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:\{)/i,/^(?:[^\}]*)/i,/^(?:xychart-beta\b)/i,/^(?:(?:vertical|horizontal))/i,/^(?:x-axis\b)/i,/^(?:y-axis\b)/i,/^(?:\[)/i,/^(?:-->)/i,/^(?:line\b)/i,/^(?:bar\b)/i,/^(?:\[)/i,/^(?:[+-]?(?:\d+(?:\.\d+)?|\.\d+))/i,/^(?:\])/i,/^(?:(?:`\) \{ this\.pushState\(md_string\); \}\n\(\?:\(\?!`"\)\.\)\+ \{ return MD_STR; \}\n\(\?:`))/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s+)/i,/^(?:;)/i,/^(?:$)/i],conditions:{data_inner:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,23,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},data:{rules:[0,1,3,4,5,6,7,9,11,14,15,16,17,20,21,22,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_band_data:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_data:{rules:[0,1,2,4,5,6,7,9,11,14,15,16,17,18,19,20,21,23,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[],inclusive:!1},md_string:{rules:[],inclusive:!1},string:{rules:[27,28],inclusive:!1},INITIAL:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0}}};return O}();k.lexer=R;function C(){this.yy={}}return o(C,"Parser"),C.prototype=k,k.Parser=C,new C}();lO.parser=lO;jhe=lO});function cO(t){return t.type==="bar"}function SE(t){return t.type==="band"}function qg(t){return t.type==="linear"}var CE=M(()=>{"use strict";o(cO,"isBarPlot");o(SE,"isBandAxisData");o(qg,"isLinearAxisData")});var Xg,uO=M(()=>{"use strict";Pl();Xg=class{constructor(e){this.parentGroup=e}static{o(this,"TextDimensionCalculatorWithFont")}getMaxDimension(e,r){if(!this.parentGroup)return{width:e.reduce((a,s)=>Math.max(s.length,a),0)*r,height:r};let n={width:0,height:0},i=this.parentGroup.append("g").attr("visibility","hidden").attr("font-size",r);for(let a of e){let s=dj(i,1,a),l=s?s.width:a.length*r,u=s?s.height:r;n.width=Math.max(n.width,l),n.height=Math.max(n.height,u)}return i.remove(),n}}});var jg,hO=M(()=>{"use strict";jg=class{constructor(e,r,n,i){this.axisConfig=e;this.title=r;this.textDimensionCalculator=n;this.axisThemeConfig=i;this.boundingRect={x:0,y:0,width:0,height:0};this.axisPosition="left";this.showTitle=!1;this.showLabel=!1;this.showTick=!1;this.showAxisLine=!1;this.outerPadding=0;this.titleTextHeight=0;this.labelTextHeight=0;this.range=[0,10],this.boundingRect={x:0,y:0,width:0,height:0},this.axisPosition="left"}static{o(this,"BaseAxis")}setRange(e){this.range=e,this.axisPosition==="left"||this.axisPosition==="right"?this.boundingRect.height=e[1]-e[0]:this.boundingRect.width=e[1]-e[0],this.recalculateScale()}getRange(){return[this.range[0]+this.outerPadding,this.range[1]-this.outerPadding]}setAxisPosition(e){this.axisPosition=e,this.setRange(this.range)}getTickDistance(){let e=this.getRange();return Math.abs(e[0]-e[1])/this.getTickValues().length}getAxisOuterPadding(){return this.outerPadding}getLabelDimension(){return this.textDimensionCalculator.getMaxDimension(this.getTickValues().map(e=>e.toString()),this.axisConfig.labelFontSize)}recalculateOuterPaddingToDrawBar(){.7*this.getTickDistance()>this.outerPadding*2&&(this.outerPadding=Math.floor(.7*this.getTickDistance()/2)),this.recalculateScale()}calculateSpaceIfDrawnHorizontally(e){let r=e.height;if(this.axisConfig.showAxisLine&&r>this.axisConfig.axisLineWidth&&(r-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){let n=this.getLabelDimension(),i=.2*e.width;this.outerPadding=Math.min(n.width/2,i);let a=n.height+this.axisConfig.labelPadding*2;this.labelTextHeight=n.height,a<=r&&(r-=a,this.showLabel=!0)}if(this.axisConfig.showTick&&r>=this.axisConfig.tickLength&&(this.showTick=!0,r-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){let n=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),i=n.height+this.axisConfig.titlePadding*2;this.titleTextHeight=n.height,i<=r&&(r-=i,this.showTitle=!0)}this.boundingRect.width=e.width,this.boundingRect.height=e.height-r}calculateSpaceIfDrawnVertical(e){let r=e.width;if(this.axisConfig.showAxisLine&&r>this.axisConfig.axisLineWidth&&(r-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){let n=this.getLabelDimension(),i=.2*e.height;this.outerPadding=Math.min(n.height/2,i);let a=n.width+this.axisConfig.labelPadding*2;a<=r&&(r-=a,this.showLabel=!0)}if(this.axisConfig.showTick&&r>=this.axisConfig.tickLength&&(this.showTick=!0,r-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){let n=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),i=n.height+this.axisConfig.titlePadding*2;this.titleTextHeight=n.height,i<=r&&(r-=i,this.showTitle=!0)}this.boundingRect.width=e.width-r,this.boundingRect.height=e.height}calculateSpace(e){return this.axisPosition==="left"||this.axisPosition==="right"?this.calculateSpaceIfDrawnVertical(e):this.calculateSpaceIfDrawnHorizontally(e),this.recalculateScale(),{width:this.boundingRect.width,height:this.boundingRect.height}}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}getDrawableElementsForLeftAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.x+this.boundingRect.width-this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["left-axis","axisl-line"],data:[{path:`M ${r},${this.boundingRect.y} L ${r},${this.boundingRect.y+this.boundingRect.height} `,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["left-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.boundingRect.x+this.boundingRect.width-(this.showLabel?this.axisConfig.labelPadding:0)-(this.showTick?this.axisConfig.tickLength:0)-(this.showAxisLine?this.axisConfig.axisLineWidth:0),y:this.getScaleValue(r),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"middle",horizontalPos:"right"}))}),this.showTick){let r=this.boundingRect.x+this.boundingRect.width-(this.showAxisLine?this.axisConfig.axisLineWidth:0);e.push({type:"path",groupTexts:["left-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${r},${this.getScaleValue(n)} L ${r-this.axisConfig.tickLength},${this.getScaleValue(n)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["left-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.axisConfig.titlePadding,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:270,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElementsForBottomAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.y+this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["bottom-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${r} L ${this.boundingRect.x+this.boundingRect.width},${r}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["bottom-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.getScaleValue(r),y:this.boundingRect.y+this.axisConfig.labelPadding+(this.showTick?this.axisConfig.tickLength:0)+(this.showAxisLine?this.axisConfig.axisLineWidth:0),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){let r=this.boundingRect.y+(this.showAxisLine?this.axisConfig.axisLineWidth:0);e.push({type:"path",groupTexts:["bottom-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${this.getScaleValue(n)},${r} L ${this.getScaleValue(n)},${r+this.axisConfig.tickLength}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["bottom-axis","title"],data:[{text:this.title,x:this.range[0]+(this.range[1]-this.range[0])/2,y:this.boundingRect.y+this.boundingRect.height-this.axisConfig.titlePadding-this.titleTextHeight,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElementsForTopAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.y+this.boundingRect.height-this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["top-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${r} L ${this.boundingRect.x+this.boundingRect.width},${r}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["top-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.getScaleValue(r),y:this.boundingRect.y+(this.showTitle?this.titleTextHeight+this.axisConfig.titlePadding*2:0)+this.axisConfig.labelPadding,fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){let r=this.boundingRect.y;e.push({type:"path",groupTexts:["top-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${this.getScaleValue(n)},${r+this.boundingRect.height-(this.showAxisLine?this.axisConfig.axisLineWidth:0)} L ${this.getScaleValue(n)},${r+this.boundingRect.height-this.axisConfig.tickLength-(this.showAxisLine?this.axisConfig.axisLineWidth:0)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["top-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.axisConfig.titlePadding,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElements(){if(this.axisPosition==="left")return this.getDrawableElementsForLeftAxis();if(this.axisPosition==="right")throw Error("Drawing of right axis is not implemented");return this.axisPosition==="bottom"?this.getDrawableElementsForBottomAxis():this.axisPosition==="top"?this.getDrawableElementsForTopAxis():[]}}});var AE,Qhe=M(()=>{"use strict";pr();ut();hO();AE=class extends jg{static{o(this,"BandAxis")}constructor(e,r,n,i,a){super(e,i,a,r),this.categories=n,this.scale=Vp().domain(this.categories).range(this.getRange())}setRange(e){super.setRange(e)}recalculateScale(){this.scale=Vp().domain(this.categories).range(this.getRange()).paddingInner(1).paddingOuter(0).align(.5),Y.trace("BandAxis axis final categories, range: ",this.categories,this.getRange())}getTickValues(){return this.categories}getScaleValue(e){return this.scale(e)??this.getRange()[0]}}});var _E,Zhe=M(()=>{"use strict";pr();hO();_E=class extends jg{static{o(this,"LinearAxis")}constructor(e,r,n,i,a){super(e,i,a,r),this.domain=n,this.scale=Cl().domain(this.domain).range(this.getRange())}getTickValues(){return this.scale.ticks()}recalculateScale(){let e=[...this.domain];this.axisPosition==="left"&&e.reverse(),this.scale=Cl().domain(e).range(this.getRange())}getScaleValue(e){return this.scale(e)}}});function fO(t,e,r,n){let i=new Xg(n);return SE(t)?new AE(e,r,t.categories,t.title,i):new _E(e,r,[t.min,t.max],t.title,i)}var Jhe=M(()=>{"use strict";CE();uO();Qhe();Zhe();o(fO,"getAxis")});function efe(t,e,r,n){let i=new Xg(n);return new dO(i,t,e,r)}var dO,tfe=M(()=>{"use strict";uO();dO=class{constructor(e,r,n,i){this.textDimensionCalculator=e;this.chartConfig=r;this.chartData=n;this.chartThemeConfig=i;this.boundingRect={x:0,y:0,width:0,height:0},this.showChartTitle=!1}static{o(this,"ChartTitle")}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}calculateSpace(e){let r=this.textDimensionCalculator.getMaxDimension([this.chartData.title],this.chartConfig.titleFontSize),n=Math.max(r.width,e.width),i=r.height+2*this.chartConfig.titlePadding;return r.width<=n&&r.height<=i&&this.chartConfig.showTitle&&this.chartData.title&&(this.boundingRect.width=n,this.boundingRect.height=i,this.showChartTitle=!0),{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){let e=[];return this.showChartTitle&&e.push({groupTexts:["chart-title"],type:"text",data:[{fontSize:this.chartConfig.titleFontSize,text:this.chartData.title,verticalPos:"middle",horizontalPos:"center",x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.chartThemeConfig.titleColor,rotation:0}]}),e}};o(efe,"getChartTitleComponent")});var LE,rfe=M(()=>{"use strict";pr();LE=class{constructor(e,r,n,i,a){this.plotData=e;this.xAxis=r;this.yAxis=n;this.orientation=i;this.plotIndex=a}static{o(this,"LinePlot")}getDrawableElement(){let e=this.plotData.data.map(n=>[this.xAxis.getScaleValue(n[0]),this.yAxis.getScaleValue(n[1])]),r;return this.orientation==="horizontal"?r=ns().y(n=>n[0]).x(n=>n[1])(e):r=ns().x(n=>n[0]).y(n=>n[1])(e),r?[{groupTexts:["plot",`line-plot-${this.plotIndex}`],type:"path",data:[{path:r,strokeFill:this.plotData.strokeFill,strokeWidth:this.plotData.strokeWidth}]}]:[]}}});var DE,nfe=M(()=>{"use strict";DE=class{constructor(e,r,n,i,a,s){this.barData=e;this.boundingRect=r;this.xAxis=n;this.yAxis=i;this.orientation=a;this.plotIndex=s}static{o(this,"BarPlot")}getDrawableElement(){let e=this.barData.data.map(a=>[this.xAxis.getScaleValue(a[0]),this.yAxis.getScaleValue(a[1])]),n=Math.min(this.xAxis.getAxisOuterPadding()*2,this.xAxis.getTickDistance())*(1-.05),i=n/2;return this.orientation==="horizontal"?[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:e.map(a=>({x:this.boundingRect.x,y:a[0]-i,height:n,width:a[1]-this.boundingRect.x,fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]:[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:e.map(a=>({x:a[0]-i,y:a[1],width:n,height:this.boundingRect.y+this.boundingRect.height-a[1],fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]}}});function ife(t,e,r){return new pO(t,e,r)}var pO,afe=M(()=>{"use strict";rfe();nfe();pO=class{constructor(e,r,n){this.chartConfig=e;this.chartData=r;this.chartThemeConfig=n;this.boundingRect={x:0,y:0,width:0,height:0}}static{o(this,"BasePlot")}setAxes(e,r){this.xAxis=e,this.yAxis=r}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}calculateSpace(e){return this.boundingRect.width=e.width,this.boundingRect.height=e.height,{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){if(!(this.xAxis&&this.yAxis))throw Error("Axes must be passed to render Plots");let e=[];for(let[r,n]of this.chartData.plots.entries())switch(n.type){case"line":{let i=new LE(n,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,r);e.push(...i.getDrawableElement())}break;case"bar":{let i=new DE(n,this.boundingRect,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,r);e.push(...i.getDrawableElement())}break}return e}};o(ife,"getPlotComponent")});var NE,sfe=M(()=>{"use strict";Jhe();tfe();afe();CE();NE=class{constructor(e,r,n,i){this.chartConfig=e;this.chartData=r;this.componentStore={title:efe(e,r,n,i),plot:ife(e,r,n),xAxis:fO(r.xAxis,e.xAxis,{titleColor:n.xAxisTitleColor,labelColor:n.xAxisLabelColor,tickColor:n.xAxisTickColor,axisLineColor:n.xAxisLineColor},i),yAxis:fO(r.yAxis,e.yAxis,{titleColor:n.yAxisTitleColor,labelColor:n.yAxisLabelColor,tickColor:n.yAxisTickColor,axisLineColor:n.yAxisLineColor},i)}}static{o(this,"Orchestrator")}calculateVerticalSpace(){let e=this.chartConfig.width,r=this.chartConfig.height,n=0,i=0,a=Math.floor(e*this.chartConfig.plotReservedSpacePercent/100),s=Math.floor(r*this.chartConfig.plotReservedSpacePercent/100),l=this.componentStore.plot.calculateSpace({width:a,height:s});e-=l.width,r-=l.height,l=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:r}),i=l.height,r-=l.height,this.componentStore.xAxis.setAxisPosition("bottom"),l=this.componentStore.xAxis.calculateSpace({width:e,height:r}),r-=l.height,this.componentStore.yAxis.setAxisPosition("left"),l=this.componentStore.yAxis.calculateSpace({width:e,height:r}),n=l.width,e-=l.width,e>0&&(a+=e,e=0),r>0&&(s+=r,r=0),this.componentStore.plot.calculateSpace({width:a,height:s}),this.componentStore.plot.setBoundingBoxXY({x:n,y:i}),this.componentStore.xAxis.setRange([n,n+a]),this.componentStore.xAxis.setBoundingBoxXY({x:n,y:i+s}),this.componentStore.yAxis.setRange([i,i+s]),this.componentStore.yAxis.setBoundingBoxXY({x:0,y:i}),this.chartData.plots.some(u=>cO(u))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateHorizontalSpace(){let e=this.chartConfig.width,r=this.chartConfig.height,n=0,i=0,a=0,s=Math.floor(e*this.chartConfig.plotReservedSpacePercent/100),l=Math.floor(r*this.chartConfig.plotReservedSpacePercent/100),u=this.componentStore.plot.calculateSpace({width:s,height:l});e-=u.width,r-=u.height,u=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:r}),n=u.height,r-=u.height,this.componentStore.xAxis.setAxisPosition("left"),u=this.componentStore.xAxis.calculateSpace({width:e,height:r}),e-=u.width,i=u.width,this.componentStore.yAxis.setAxisPosition("top"),u=this.componentStore.yAxis.calculateSpace({width:e,height:r}),r-=u.height,a=n+u.height,e>0&&(s+=e,e=0),r>0&&(l+=r,r=0),this.componentStore.plot.calculateSpace({width:s,height:l}),this.componentStore.plot.setBoundingBoxXY({x:i,y:a}),this.componentStore.yAxis.setRange([i,i+s]),this.componentStore.yAxis.setBoundingBoxXY({x:i,y:n}),this.componentStore.xAxis.setRange([a,a+l]),this.componentStore.xAxis.setBoundingBoxXY({x:0,y:a}),this.chartData.plots.some(h=>cO(h))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateSpace(){this.chartConfig.chartOrientation==="horizontal"?this.calculateHorizontalSpace():this.calculateVerticalSpace()}getDrawableElement(){this.calculateSpace();let e=[];this.componentStore.plot.setAxes(this.componentStore.xAxis,this.componentStore.yAxis);for(let r of Object.values(this.componentStore))e.push(...r.getDrawableElements());return e}}});var RE,ofe=M(()=>{"use strict";sfe();RE=class{static{o(this,"XYChartBuilder")}static build(e,r,n,i){return new NE(e,r,n,i).getDrawableElement()}}});function cfe(){let t=vp(),e=Cr();return Ds(t.xyChart,e.themeVariables.xyChart)}function ufe(){let t=Cr();return Ds(ur.xyChart,t.xyChart)}function hfe(){return{yAxis:{type:"linear",title:"",min:1/0,max:-1/0},xAxis:{type:"band",title:"",categories:[]},title:"",plots:[]}}function yO(t){let e=Cr();return kr(t.trim(),e)}function _Ve(t){lfe=t}function LVe(t){t==="horizontal"?Dx.chartOrientation="horizontal":Dx.chartOrientation="vertical"}function DVe(t){hn.xAxis.title=yO(t.text)}function ffe(t,e){hn.xAxis={type:"linear",title:hn.xAxis.title,min:t,max:e},ME=!0}function NVe(t){hn.xAxis={type:"band",title:hn.xAxis.title,categories:t.map(e=>yO(e.text))},ME=!0}function RVe(t){hn.yAxis.title=yO(t.text)}function MVe(t,e){hn.yAxis={type:"linear",title:hn.yAxis.title,min:t,max:e},gO=!0}function IVe(t){let e=Math.min(...t),r=Math.max(...t),n=qg(hn.yAxis)?hn.yAxis.min:1/0,i=qg(hn.yAxis)?hn.yAxis.max:-1/0;hn.yAxis={type:"linear",title:hn.yAxis.title,min:Math.min(n,e),max:Math.max(i,r)}}function dfe(t){let e=[];if(t.length===0)return e;if(!ME){let r=qg(hn.xAxis)?hn.xAxis.min:1/0,n=qg(hn.xAxis)?hn.xAxis.max:-1/0;ffe(Math.min(r,1),Math.max(n,t.length))}if(gO||IVe(t),SE(hn.xAxis)&&(e=hn.xAxis.categories.map((r,n)=>[r,t[n]])),qg(hn.xAxis)){let r=hn.xAxis.min,n=hn.xAxis.max,i=(n-r)/(t.length-1),a=[];for(let s=r;s<=n;s+=i)a.push(`${s}`);e=a.map((s,l)=>[s,t[l]])}return e}function pfe(t){return mO[t===0?0:t%mO.length]}function OVe(t,e){let r=dfe(e);hn.plots.push({type:"line",strokeFill:pfe(Lx),strokeWidth:2,data:r}),Lx++}function PVe(t,e){let r=dfe(e);hn.plots.push({type:"bar",fill:pfe(Lx),data:r}),Lx++}function BVe(){if(hn.plots.length===0)throw Error("No Plot to render, please provide a plot with some data");return hn.title=Jr(),RE.build(Dx,hn,Nx,lfe)}function FVe(){return Nx}function zVe(){return Dx}var Lx,lfe,Dx,Nx,hn,mO,ME,gO,GVe,mfe,gfe=M(()=>{"use strict";Za();bs();i4();hr();fr();Ai();ofe();CE();Lx=0,Dx=ufe(),Nx=cfe(),hn=hfe(),mO=Nx.plotColorPalette.split(",").map(t=>t.trim()),ME=!1,gO=!1;o(cfe,"getChartDefaultThemeConfig");o(ufe,"getChartDefaultConfig");o(hfe,"getChartDefaultData");o(yO,"textSanitizer");o(_Ve,"setTmpSVGG");o(LVe,"setOrientation");o(DVe,"setXAxisTitle");o(ffe,"setXAxisRangeData");o(NVe,"setXAxisBand");o(RVe,"setYAxisTitle");o(MVe,"setYAxisRangeData");o(IVe,"setYAxisRangeFromPlotData");o(dfe,"transformDataWithoutCategory");o(pfe,"getPlotColorFromPalette");o(OVe,"setLineData");o(PVe,"setBarData");o(BVe,"getDrawableElem");o(FVe,"getChartThemeConfig");o(zVe,"getChartConfig");GVe=o(function(){Lr(),Lx=0,Dx=ufe(),hn=hfe(),Nx=cfe(),mO=Nx.plotColorPalette.split(",").map(t=>t.trim()),ME=!1,gO=!1},"clear"),mfe={getDrawableElem:BVe,clear:GVe,setAccTitle:Mr,getAccTitle:Br,setDiagramTitle:cn,getDiagramTitle:Jr,getAccDescription:zr,setAccDescription:Fr,setOrientation:LVe,setXAxisTitle:DVe,setXAxisRangeData:ffe,setXAxisBand:NVe,setYAxisTitle:RVe,setYAxisRangeData:MVe,setLineData:OVe,setBarData:PVe,setTmpSVGG:_Ve,getChartThemeConfig:FVe,getChartConfig:zVe}});var $Ve,yfe,vfe=M(()=>{"use strict";ut();eh();ai();$Ve=o((t,e,r,n)=>{let i=n.db,a=i.getChartThemeConfig(),s=i.getChartConfig();function l(v){return v==="top"?"text-before-edge":"middle"}o(l,"getDominantBaseLine");function u(v){return v==="left"?"start":v==="right"?"end":"middle"}o(u,"getTextAnchor");function h(v){return`translate(${v.x}, ${v.y}) rotate(${v.rotation||0})`}o(h,"getTextTransformation"),Y.debug(`Rendering xychart chart +`+t);let f=Va(e),d=f.append("g").attr("class","main"),p=d.append("rect").attr("width",s.width).attr("height",s.height).attr("class","background");Zr(f,s.height,s.width,!0),f.attr("viewBox",`0 0 ${s.width} ${s.height}`),p.attr("fill",a.backgroundColor),i.setTmpSVGG(f.append("g").attr("class","mermaid-tmp-group"));let m=i.getDrawableElem(),g={};function y(v){let x=d,b="";for(let[w]of v.entries()){let _=d;w>0&&g[b]&&(_=g[b]),b+=v[w],x=g[b],x||(x=g[b]=_.append("g").attr("class",v[w]))}return x}o(y,"getGroup");for(let v of m){if(v.data.length===0)continue;let x=y(v.groupTexts);switch(v.type){case"rect":x.selectAll("rect").data(v.data).enter().append("rect").attr("x",b=>b.x).attr("y",b=>b.y).attr("width",b=>b.width).attr("height",b=>b.height).attr("fill",b=>b.fill).attr("stroke",b=>b.strokeFill).attr("stroke-width",b=>b.strokeWidth);break;case"text":x.selectAll("text").data(v.data).enter().append("text").attr("x",0).attr("y",0).attr("fill",b=>b.fill).attr("font-size",b=>b.fontSize).attr("dominant-baseline",b=>l(b.verticalPos)).attr("text-anchor",b=>u(b.horizontalPos)).attr("transform",b=>h(b)).text(b=>b.text);break;case"path":x.selectAll("path").data(v.data).enter().append("path").attr("d",b=>b.path).attr("fill",b=>b.fill?b.fill:"none").attr("stroke",b=>b.strokeFill).attr("stroke-width",b=>b.strokeWidth);break}}},"draw"),yfe={draw:$Ve}});var xfe={};vr(xfe,{diagram:()=>VVe});var VVe,bfe=M(()=>{"use strict";Khe();gfe();vfe();VVe={parser:jhe,db:mfe,renderer:yfe}});var vO,kfe,Efe=M(()=>{"use strict";vO=function(){var t=o(function(oe,K,ee,J){for(ee=ee||{},J=oe.length;J--;ee[oe[J]]=K);return ee},"o"),e=[1,3],r=[1,4],n=[1,5],i=[1,6],a=[5,6,8,9,11,13,31,32,33,34,35,36,44,62,63],s=[1,18],l=[2,7],u=[1,22],h=[1,23],f=[1,24],d=[1,25],p=[1,26],m=[1,27],g=[1,20],y=[1,28],v=[1,29],x=[62,63],b=[5,8,9,11,13,31,32,33,34,35,36,44,51,53,62,63],w=[1,47],_=[1,48],T=[1,49],E=[1,50],L=[1,51],S=[1,52],A=[1,53],I=[53,54],D=[1,64],k=[1,60],R=[1,61],C=[1,62],O=[1,63],N=[1,65],P=[1,69],F=[1,70],B=[1,67],G=[1,68],z=[5,8,9,11,13,31,32,33,34,35,36,44,62,63],W={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,acc_title:9,acc_title_value:10,acc_descr:11,acc_descr_value:12,acc_descr_multiline_value:13,requirementDef:14,elementDef:15,relationshipDef:16,requirementType:17,requirementName:18,STRUCT_START:19,requirementBody:20,ID:21,COLONSEP:22,id:23,TEXT:24,text:25,RISK:26,riskLevel:27,VERIFYMTHD:28,verifyType:29,STRUCT_STOP:30,REQUIREMENT:31,FUNCTIONAL_REQUIREMENT:32,INTERFACE_REQUIREMENT:33,PERFORMANCE_REQUIREMENT:34,PHYSICAL_REQUIREMENT:35,DESIGN_CONSTRAINT:36,LOW_RISK:37,MED_RISK:38,HIGH_RISK:39,VERIFY_ANALYSIS:40,VERIFY_DEMONSTRATION:41,VERIFY_INSPECTION:42,VERIFY_TEST:43,ELEMENT:44,elementName:45,elementBody:46,TYPE:47,type:48,DOCREF:49,ref:50,END_ARROW_L:51,relationship:52,LINE:53,END_ARROW_R:54,CONTAINS:55,COPIES:56,DERIVES:57,SATISFIES:58,VERIFIES:59,REFINES:60,TRACES:61,unqString:62,qString:63,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",9:"acc_title",10:"acc_title_value",11:"acc_descr",12:"acc_descr_value",13:"acc_descr_multiline_value",19:"STRUCT_START",21:"ID",22:"COLONSEP",24:"TEXT",26:"RISK",28:"VERIFYMTHD",30:"STRUCT_STOP",31:"REQUIREMENT",32:"FUNCTIONAL_REQUIREMENT",33:"INTERFACE_REQUIREMENT",34:"PERFORMANCE_REQUIREMENT",35:"PHYSICAL_REQUIREMENT",36:"DESIGN_CONSTRAINT",37:"LOW_RISK",38:"MED_RISK",39:"HIGH_RISK",40:"VERIFY_ANALYSIS",41:"VERIFY_DEMONSTRATION",42:"VERIFY_INSPECTION",43:"VERIFY_TEST",44:"ELEMENT",47:"TYPE",49:"DOCREF",51:"END_ARROW_L",53:"LINE",54:"END_ARROW_R",55:"CONTAINS",56:"COPIES",57:"DERIVES",58:"SATISFIES",59:"VERIFIES",60:"REFINES",61:"TRACES",62:"unqString",63:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,2],[4,2],[4,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[14,5],[20,5],[20,5],[20,5],[20,5],[20,2],[20,1],[17,1],[17,1],[17,1],[17,1],[17,1],[17,1],[27,1],[27,1],[27,1],[29,1],[29,1],[29,1],[29,1],[15,5],[46,5],[46,5],[46,2],[46,1],[16,5],[16,5],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[18,1],[18,1],[23,1],[23,1],[25,1],[25,1],[45,1],[45,1],[48,1],[48,1],[50,1],[50,1]],performAction:o(function(K,ee,J,H,q,Q,ae){var ue=Q.length-1;switch(q){case 4:this.$=Q[ue].trim(),H.setAccTitle(this.$);break;case 5:case 6:this.$=Q[ue].trim(),H.setAccDescription(this.$);break;case 7:this.$=[];break;case 13:H.addRequirement(Q[ue-3],Q[ue-4]);break;case 14:H.setNewReqId(Q[ue-2]);break;case 15:H.setNewReqText(Q[ue-2]);break;case 16:H.setNewReqRisk(Q[ue-2]);break;case 17:H.setNewReqVerifyMethod(Q[ue-2]);break;case 20:this.$=H.RequirementType.REQUIREMENT;break;case 21:this.$=H.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 22:this.$=H.RequirementType.INTERFACE_REQUIREMENT;break;case 23:this.$=H.RequirementType.PERFORMANCE_REQUIREMENT;break;case 24:this.$=H.RequirementType.PHYSICAL_REQUIREMENT;break;case 25:this.$=H.RequirementType.DESIGN_CONSTRAINT;break;case 26:this.$=H.RiskLevel.LOW_RISK;break;case 27:this.$=H.RiskLevel.MED_RISK;break;case 28:this.$=H.RiskLevel.HIGH_RISK;break;case 29:this.$=H.VerifyType.VERIFY_ANALYSIS;break;case 30:this.$=H.VerifyType.VERIFY_DEMONSTRATION;break;case 31:this.$=H.VerifyType.VERIFY_INSPECTION;break;case 32:this.$=H.VerifyType.VERIFY_TEST;break;case 33:H.addElement(Q[ue-3]);break;case 34:H.setNewElementType(Q[ue-2]);break;case 35:H.setNewElementDocRef(Q[ue-2]);break;case 38:H.addRelationship(Q[ue-2],Q[ue],Q[ue-4]);break;case 39:H.addRelationship(Q[ue-2],Q[ue-4],Q[ue]);break;case 40:this.$=H.Relationships.CONTAINS;break;case 41:this.$=H.Relationships.COPIES;break;case 42:this.$=H.Relationships.DERIVES;break;case 43:this.$=H.Relationships.SATISFIES;break;case 44:this.$=H.Relationships.VERIFIES;break;case 45:this.$=H.Relationships.REFINES;break;case 46:this.$=H.Relationships.TRACES;break}},"anonymous"),table:[{3:1,4:2,6:e,9:r,11:n,13:i},{1:[3]},{3:8,4:2,5:[1,7],6:e,9:r,11:n,13:i},{5:[1,9]},{10:[1,10]},{12:[1,11]},t(a,[2,6]),{3:12,4:2,6:e,9:r,11:n,13:i},{1:[2,2]},{4:17,5:s,7:13,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:19,23:21,31:u,32:h,33:f,34:d,35:p,36:m,44:g,62:y,63:v},t(a,[2,4]),t(a,[2,5]),{1:[2,1]},{8:[1,30]},{4:17,5:s,7:31,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:19,23:21,31:u,32:h,33:f,34:d,35:p,36:m,44:g,62:y,63:v},{4:17,5:s,7:32,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:19,23:21,31:u,32:h,33:f,34:d,35:p,36:m,44:g,62:y,63:v},{4:17,5:s,7:33,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:19,23:21,31:u,32:h,33:f,34:d,35:p,36:m,44:g,62:y,63:v},{4:17,5:s,7:34,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:19,23:21,31:u,32:h,33:f,34:d,35:p,36:m,44:g,62:y,63:v},{4:17,5:s,7:35,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:19,23:21,31:u,32:h,33:f,34:d,35:p,36:m,44:g,62:y,63:v},{18:36,62:[1,37],63:[1,38]},{45:39,62:[1,40],63:[1,41]},{51:[1,42],53:[1,43]},t(x,[2,20]),t(x,[2,21]),t(x,[2,22]),t(x,[2,23]),t(x,[2,24]),t(x,[2,25]),t(b,[2,49]),t(b,[2,50]),{1:[2,3]},{8:[2,8]},{8:[2,9]},{8:[2,10]},{8:[2,11]},{8:[2,12]},{19:[1,44]},{19:[2,47]},{19:[2,48]},{19:[1,45]},{19:[2,53]},{19:[2,54]},{52:46,55:w,56:_,57:T,58:E,59:L,60:S,61:A},{52:54,55:w,56:_,57:T,58:E,59:L,60:S,61:A},{5:[1,55]},{5:[1,56]},{53:[1,57]},t(I,[2,40]),t(I,[2,41]),t(I,[2,42]),t(I,[2,43]),t(I,[2,44]),t(I,[2,45]),t(I,[2,46]),{54:[1,58]},{5:D,20:59,21:k,24:R,26:C,28:O,30:N},{5:P,30:F,46:66,47:B,49:G},{23:71,62:y,63:v},{23:72,62:y,63:v},t(z,[2,13]),{22:[1,73]},{22:[1,74]},{22:[1,75]},{22:[1,76]},{5:D,20:77,21:k,24:R,26:C,28:O,30:N},t(z,[2,19]),t(z,[2,33]),{22:[1,78]},{22:[1,79]},{5:P,30:F,46:80,47:B,49:G},t(z,[2,37]),t(z,[2,38]),t(z,[2,39]),{23:81,62:y,63:v},{25:82,62:[1,83],63:[1,84]},{27:85,37:[1,86],38:[1,87],39:[1,88]},{29:89,40:[1,90],41:[1,91],42:[1,92],43:[1,93]},t(z,[2,18]),{48:94,62:[1,95],63:[1,96]},{50:97,62:[1,98],63:[1,99]},t(z,[2,36]),{5:[1,100]},{5:[1,101]},{5:[2,51]},{5:[2,52]},{5:[1,102]},{5:[2,26]},{5:[2,27]},{5:[2,28]},{5:[1,103]},{5:[2,29]},{5:[2,30]},{5:[2,31]},{5:[2,32]},{5:[1,104]},{5:[2,55]},{5:[2,56]},{5:[1,105]},{5:[2,57]},{5:[2,58]},{5:D,20:106,21:k,24:R,26:C,28:O,30:N},{5:D,20:107,21:k,24:R,26:C,28:O,30:N},{5:D,20:108,21:k,24:R,26:C,28:O,30:N},{5:D,20:109,21:k,24:R,26:C,28:O,30:N},{5:P,30:F,46:110,47:B,49:G},{5:P,30:F,46:111,47:B,49:G},t(z,[2,14]),t(z,[2,15]),t(z,[2,16]),t(z,[2,17]),t(z,[2,34]),t(z,[2,35])],defaultActions:{8:[2,2],12:[2,1],30:[2,3],31:[2,8],32:[2,9],33:[2,10],34:[2,11],35:[2,12],37:[2,47],38:[2,48],40:[2,53],41:[2,54],83:[2,51],84:[2,52],86:[2,26],87:[2,27],88:[2,28],90:[2,29],91:[2,30],92:[2,31],93:[2,32],95:[2,55],96:[2,56],98:[2,57],99:[2,58]},parseError:o(function(K,ee){if(ee.recoverable)this.trace(K);else{var J=new Error(K);throw J.hash=ee,J}},"parseError"),parse:o(function(K){var ee=this,J=[0],H=[],q=[null],Q=[],ae=this.table,ue="",ce=0,te=0,Ne=0,se=2,ke=1,Re=Q.slice.call(arguments,1),Ce=Object.create(this.lexer),Pe={yy:{}};for(var Ie in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Ie)&&(Pe.yy[Ie]=this.yy[Ie]);Ce.setInput(K,Pe.yy),Pe.yy.lexer=Ce,Pe.yy.parser=this,typeof Ce.yylloc>"u"&&(Ce.yylloc={});var $e=Ce.yylloc;Q.push($e);var ye=Ce.options&&Ce.options.ranges;typeof Pe.yy.parseError=="function"?this.parseError=Pe.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function X(He){J.length=J.length-2*He,q.length=q.length-He,Q.length=Q.length-He}o(X,"popStack");function fe(){var He;return He=H.pop()||Ce.lex()||ke,typeof He!="number"&&(He instanceof Array&&(H=He,He=H.pop()),He=ee.symbols_[He]||He),He}o(fe,"lex");for(var he,ge,ne,ve,U,Te,ie={},Ee,Ae,Ge,Be;;){if(ne=J[J.length-1],this.defaultActions[ne]?ve=this.defaultActions[ne]:((he===null||typeof he>"u")&&(he=fe()),ve=ae[ne]&&ae[ne][he]),typeof ve>"u"||!ve.length||!ve[0]){var me="";Be=[];for(Ee in ae[ne])this.terminals_[Ee]&&Ee>se&&Be.push("'"+this.terminals_[Ee]+"'");Ce.showPosition?me="Parse error on line "+(ce+1)+`: +`+Ce.showPosition()+` +Expecting `+Be.join(", ")+", got '"+(this.terminals_[he]||he)+"'":me="Parse error on line "+(ce+1)+": Unexpected "+(he==ke?"end of input":"'"+(this.terminals_[he]||he)+"'"),this.parseError(me,{text:Ce.match,token:this.terminals_[he]||he,line:Ce.yylineno,loc:$e,expected:Be})}if(ve[0]instanceof Array&&ve.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ne+", token: "+he);switch(ve[0]){case 1:J.push(he),q.push(Ce.yytext),Q.push(Ce.yylloc),J.push(ve[1]),he=null,ge?(he=ge,ge=null):(te=Ce.yyleng,ue=Ce.yytext,ce=Ce.yylineno,$e=Ce.yylloc,Ne>0&&Ne--);break;case 2:if(Ae=this.productions_[ve[1]][1],ie.$=q[q.length-Ae],ie._$={first_line:Q[Q.length-(Ae||1)].first_line,last_line:Q[Q.length-1].last_line,first_column:Q[Q.length-(Ae||1)].first_column,last_column:Q[Q.length-1].last_column},ye&&(ie._$.range=[Q[Q.length-(Ae||1)].range[0],Q[Q.length-1].range[1]]),Te=this.performAction.apply(ie,[ue,te,ce,Pe.yy,ve[1],q,Q].concat(Re)),typeof Te<"u")return Te;Ae&&(J=J.slice(0,-1*Ae*2),q=q.slice(0,-1*Ae),Q=Q.slice(0,-1*Ae)),J.push(this.productions_[ve[1]][0]),q.push(ie.$),Q.push(ie._$),Ge=ae[J[J.length-2]][J[J.length-1]],J.push(Ge);break;case 3:return!0}}return!0},"parse")},Z=function(){var oe={EOF:1,parseError:o(function(ee,J){if(this.yy.parser)this.yy.parser.parseError(ee,J);else throw new Error(ee)},"parseError"),setInput:o(function(K,ee){return this.yy=ee||this.yy||{},this._input=K,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var K=this._input[0];this.yytext+=K,this.yyleng++,this.offset++,this.match+=K,this.matched+=K;var ee=K.match(/(?:\r\n?|\n).*/g);return ee?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),K},"input"),unput:o(function(K){var ee=K.length,J=K.split(/(?:\r\n?|\n)/g);this._input=K+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-ee),this.offset-=ee;var H=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),J.length-1&&(this.yylineno-=J.length-1);var q=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:J?(J.length===H.length?this.yylloc.first_column:0)+H[H.length-J.length].length-J[0].length:this.yylloc.first_column-ee},this.options.ranges&&(this.yylloc.range=[q[0],q[0]+this.yyleng-ee]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(K){this.unput(this.match.slice(K))},"less"),pastInput:o(function(){var K=this.matched.substr(0,this.matched.length-this.match.length);return(K.length>20?"...":"")+K.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var K=this.match;return K.length<20&&(K+=this._input.substr(0,20-K.length)),(K.substr(0,20)+(K.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var K=this.pastInput(),ee=new Array(K.length+1).join("-");return K+this.upcomingInput()+` +`+ee+"^"},"showPosition"),test_match:o(function(K,ee){var J,H,q;if(this.options.backtrack_lexer&&(q={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(q.yylloc.range=this.yylloc.range.slice(0))),H=K[0].match(/(?:\r\n?|\n).*/g),H&&(this.yylineno+=H.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:H?H[H.length-1].length-H[H.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+K[0].length},this.yytext+=K[0],this.match+=K[0],this.matches=K,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(K[0].length),this.matched+=K[0],J=this.performAction.call(this,this.yy,this,ee,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),J)return J;if(this._backtrack){for(var Q in q)this[Q]=q[Q];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var K,ee,J,H;this._more||(this.yytext="",this.match="");for(var q=this._currentRules(),Q=0;Qee[0].length)){if(ee=J,H=Q,this.options.backtrack_lexer){if(K=this.test_match(J,q[Q]),K!==!1)return K;if(this._backtrack){ee=!1;continue}else return!1}else if(!this.options.flex)break}return ee?(K=this.test_match(ee,q[H]),K!==!1?K:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var ee=this.next();return ee||this.lex()},"lex"),begin:o(function(ee){this.conditionStack.push(ee)},"begin"),popState:o(function(){var ee=this.conditionStack.length-1;return ee>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(ee){return ee=this.conditionStack.length-1-Math.abs(ee||0),ee>=0?this.conditionStack[ee]:"INITIAL"},"topState"),pushState:o(function(ee){this.begin(ee)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(ee,J,H,q){var Q=q;switch(H){case 0:return"title";case 1:return this.begin("acc_title"),9;break;case 2:return this.popState(),"acc_title_value";break;case 3:return this.begin("acc_descr"),11;break;case 4:return this.popState(),"acc_descr_value";break;case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:return 5;case 9:break;case 10:break;case 11:break;case 12:return 8;case 13:return 6;case 14:return 19;case 15:return 30;case 16:return 22;case 17:return 21;case 18:return 24;case 19:return 26;case 20:return 28;case 21:return 31;case 22:return 32;case 23:return 33;case 24:return 34;case 25:return 35;case 26:return 36;case 27:return 37;case 28:return 38;case 29:return 39;case 30:return 40;case 31:return 41;case 32:return 42;case 33:return 43;case 34:return 44;case 35:return 55;case 36:return 56;case 37:return 57;case 38:return 58;case 39:return 59;case 40:return 60;case 41:return 61;case 42:return 47;case 43:return 49;case 44:return 51;case 45:return 54;case 46:return 53;case 47:this.begin("string");break;case 48:this.popState();break;case 49:return"qString";case 50:return J.yytext=J.yytext.trim(),62;break}},"anonymous"),rules:[/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^\r\n\{\<\>\-\=]*)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},unqString:{rules:[],inclusive:!1},token:{rules:[],inclusive:!1},string:{rules:[48,49],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,50],inclusive:!0}}};return oe}();W.lexer=Z;function j(){this.yy={}}return o(j,"Parser"),j.prototype=W,W.Parser=j,new j}();vO.parser=vO;kfe=vO});var xO,qs,Rx,Tf,Mx,YVe,qVe,XVe,jVe,KVe,QVe,ZVe,JVe,eUe,tUe,rUe,nUe,iUe,aUe,sUe,oUe,lUe,Sfe,Cfe=M(()=>{"use strict";Vt();ut();Ai();xO=[],qs={},Rx=new Map,Tf={},Mx=new Map,YVe={REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"},qVe={LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"},XVe={VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"},jVe={CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"},KVe=o((t,e)=>(Rx.has(t)||Rx.set(t,{name:t,type:e,id:qs.id,text:qs.text,risk:qs.risk,verifyMethod:qs.verifyMethod}),qs={},Rx.get(t)),"addRequirement"),QVe=o(()=>Rx,"getRequirements"),ZVe=o(t=>{qs!==void 0&&(qs.id=t)},"setNewReqId"),JVe=o(t=>{qs!==void 0&&(qs.text=t)},"setNewReqText"),eUe=o(t=>{qs!==void 0&&(qs.risk=t)},"setNewReqRisk"),tUe=o(t=>{qs!==void 0&&(qs.verifyMethod=t)},"setNewReqVerifyMethod"),rUe=o(t=>(Mx.has(t)||(Mx.set(t,{name:t,type:Tf.type,docRef:Tf.docRef}),Y.info("Added new requirement: ",t)),Tf={},Mx.get(t)),"addElement"),nUe=o(()=>Mx,"getElements"),iUe=o(t=>{Tf!==void 0&&(Tf.type=t)},"setNewElementType"),aUe=o(t=>{Tf!==void 0&&(Tf.docRef=t)},"setNewElementDocRef"),sUe=o((t,e,r)=>{xO.push({type:t,src:e,dst:r})},"addRelationship"),oUe=o(()=>xO,"getRelationships"),lUe=o(()=>{xO=[],qs={},Rx=new Map,Tf={},Mx=new Map,Lr()},"clear"),Sfe={RequirementType:YVe,RiskLevel:qVe,VerifyType:XVe,Relationships:jVe,getConfig:o(()=>pe().req,"getConfig"),addRequirement:KVe,getRequirements:QVe,setNewReqId:ZVe,setNewReqText:JVe,setNewReqRisk:eUe,setNewReqVerifyMethod:tUe,setAccTitle:Mr,getAccTitle:Br,setAccDescription:Fr,getAccDescription:zr,addElement:rUe,getElements:nUe,setNewElementType:iUe,setNewElementDocRef:aUe,addRelationship:sUe,getRelationships:oUe,clear:lUe}});var cUe,Afe,_fe=M(()=>{"use strict";cUe=o(t=>` marker { - fill: ${i.relationColor}; - stroke: ${i.relationColor}; + fill: ${t.relationColor}; + stroke: ${t.relationColor}; } marker.cross { - stroke: ${i.lineColor}; + stroke: ${t.lineColor}; } svg { - font-family: ${i.fontFamily}; - font-size: ${i.fontSize}; + font-family: ${t.fontFamily}; + font-size: ${t.fontSize}; } .reqBox { - fill: ${i.requirementBackground}; + fill: ${t.requirementBackground}; fill-opacity: 1.0; - stroke: ${i.requirementBorderColor}; - stroke-width: ${i.requirementBorderSize}; + stroke: ${t.requirementBorderColor}; + stroke-width: ${t.requirementBorderSize}; } .reqTitle, .reqLabel{ - fill: ${i.requirementTextColor}; + fill: ${t.requirementTextColor}; } .reqLabelBox { - fill: ${i.relationLabelBackground}; + fill: ${t.relationLabelBackground}; fill-opacity: 1.0; } .req-title-line { - stroke: ${i.requirementBorderColor}; - stroke-width: ${i.requirementBorderSize}; + stroke: ${t.requirementBorderColor}; + stroke-width: ${t.requirementBorderSize}; } .relationshipLine { - stroke: ${i.relationColor}; + stroke: ${t.relationColor}; stroke-width: 1; } .relationshipLabel { - fill: ${i.relationLabelColor}; + fill: ${t.relationLabelColor}; } -`,wve={CONTAINS:"contains",ARROW:"arrow"},SGe={ReqMarkers:wve,insertLineEndings:(i,s)=>{let u=i.append("defs").append("marker").attr("id",wve.CONTAINS+"_line_ending").attr("refX",0).attr("refY",s.line_height/2).attr("markerWidth",s.line_height).attr("markerHeight",s.line_height).attr("orient","auto").append("g");u.append("circle").attr("cx",s.line_height/2).attr("cy",s.line_height/2).attr("r",s.line_height/2).attr("fill","none"),u.append("line").attr("x1",0).attr("x2",s.line_height).attr("y1",s.line_height/2).attr("y2",s.line_height/2).attr("stroke-width",1),u.append("line").attr("y1",0).attr("y2",s.line_height).attr("x1",s.line_height/2).attr("x2",s.line_height/2).attr("stroke-width",1),i.append("defs").append("marker").attr("id",wve.ARROW+"_line_ending").attr("refX",s.line_height).attr("refY",.5*s.line_height).attr("markerWidth",s.line_height).attr("markerHeight",s.line_height).attr("orient","auto").append("path").attr("d",`M0,0 - L${s.line_height},${s.line_height/2} - M${s.line_height},${s.line_height/2} - L0,${s.line_height}`).attr("stroke-width",1)}};let Tf={},_Ge=0;const AGe=(i,s)=>i.insert("rect","#"+s).attr("class","req reqBox").attr("x",0).attr("y",0).attr("width",Tf.rect_min_width+"px").attr("height",Tf.rect_min_height+"px"),LGe=(i,s,u)=>{let d=Tf.rect_min_width/2,p=i.append("text").attr("class","req reqLabel reqTitle").attr("id",s).attr("x",d).attr("y",Tf.rect_padding).attr("dominant-baseline","hanging"),v=0;u.forEach(_=>{v==0?p.append("tspan").attr("text-anchor","middle").attr("x",Tf.rect_min_width/2).attr("dy",0).text(_):p.append("tspan").attr("text-anchor","middle").attr("x",Tf.rect_min_width/2).attr("dy",Tf.line_height*.75).text(_),v++});let b=1.5*Tf.rect_padding,y=v*Tf.line_height*.75,T=b+y;return i.append("line").attr("class","req-title-line").attr("x1","0").attr("x2",Tf.rect_min_width).attr("y1",T).attr("y2",T),{titleNode:p,y:T}},MGe=(i,s,u,d)=>{let p=i.append("text").attr("class","req reqLabel").attr("id",s).attr("x",Tf.rect_padding).attr("y",d).attr("dominant-baseline","hanging"),v=0;const b=30;let y=[];return u.forEach(T=>{let _=T.length;for(;_>b&&v<3;){let A=T.substring(0,b);T=T.substring(b,T.length),_=T.length,y[y.length]=A,v++}if(v==3){let A=y[y.length-1];y[y.length-1]=A.substring(0,A.length-4)+"..."}else y[y.length]=T;v=0}),y.forEach(T=>{p.append("tspan").attr("x",Tf.rect_padding).attr("dy",Tf.line_height).text(T)}),p},drn=(i,s,u,d)=>{const p=s.node().getTotalLength(),v=s.node().getPointAtLength(p*.5),b="rel"+_Ge;_Ge++;const T=i.append("text").attr("class","req relationshipLabel").attr("id",b).attr("x",v.x).attr("y",v.y).attr("text-anchor","middle").attr("dominant-baseline","middle").text(d).node().getBBox();i.insert("rect","#"+b).attr("class","req reqLabelBox").attr("x",v.x-T.width/2).attr("y",v.y-T.height/2).attr("width",T.width).attr("height",T.height).attr("fill","white").attr("fill-opacity","85%")},grn=function(i,s,u,d,p){const v=u.edge(WD(s.src),WD(s.dst)),b=k7().x(function(T){return T.x}).y(function(T){return T.y}),y=i.insert("path","#"+d).attr("class","er relationshipLine").attr("d",b(v.points)).attr("fill","none");s.type==p.db.Relationships.CONTAINS?y.attr("marker-start","url("+ci.getUrl(Tf.arrowMarkerAbsolute)+"#"+s.type+"_line_ending)"):(y.attr("stroke-dasharray","10,7"),y.attr("marker-end","url("+ci.getUrl(Tf.arrowMarkerAbsolute)+"#"+SGe.ReqMarkers.ARROW+"_line_ending)")),drn(i,y,Tf,`<<${s.type}>>`)},prn=(i,s,u)=>{Object.keys(i).forEach(d=>{let p=i[d];d=WD(d),Xe.info("Added new requirement: ",d);const v=u.append("g").attr("id",d),b="req-"+d,y=AGe(v,b);let T=LGe(v,d+"_title",[`<<${p.type}>>`,`${p.name}`]);MGe(v,d+"_body",[`Id: ${p.id}`,`Text: ${p.text}`,`Risk: ${p.risk}`,`Verification: ${p.verifyMethod}`],T.y);const _=y.node().getBBox();s.setNode(d,{width:_.width,height:_.height,shape:"rect",id:d})})},brn=(i,s,u)=>{Object.keys(i).forEach(d=>{let p=i[d];const v=WD(d),b=u.append("g").attr("id",v),y="element-"+v,T=AGe(b,y);let _=LGe(b,y+"_title",["<>",`${d}`]);MGe(b,y+"_body",[`Type: ${p.type||"Not Specified"}`,`Doc Ref: ${p.docRef||"None"}`],_.y);const A=T.node().getBBox();s.setNode(v,{width:A.width,height:A.height,shape:"rect",id:v})})},mrn=(i,s)=>(i.forEach(function(u){let d=WD(u.src),p=WD(u.dst);s.setEdge(d,p,{relationship:u})}),i),vrn=function(i,s){s.nodes().forEach(function(u){u!==void 0&&s.node(u)!==void 0&&(i.select("#"+u),i.select("#"+u).attr("transform","translate("+(s.node(u).x-s.node(u).width/2)+","+(s.node(u).y-s.node(u).height/2)+" )"))})},WD=i=>i.replace(/\s/g,"").replace(/\./g,"_"),wrn=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:lrn,db:hrn,renderer:{draw:(i,s,u,d)=>{Tf=qt().requirement;const p=Tf.securityLevel;let v;p==="sandbox"&&(v=Ir("#i"+s));const y=Ir(p==="sandbox"?v.nodes()[0].contentDocument.body:"body").select(`[id='${s}']`);SGe.insertLineEndings(y,Tf);const T=new B0({multigraph:!1,compound:!1,directed:!0}).setGraph({rankdir:Tf.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel(function(){return{}});let _=d.db.getRequirements(),A=d.db.getElements(),P=d.db.getRelationships();prn(_,T,y),brn(A,T,y),mrn(P,T),qD(T),vrn(y,T),P.forEach(function(ee){grn(y,ee,T,s,d)});const R=Tf.rect_padding,F=y.node().getBBox(),j=F.width+R*2,K=F.height+R*2;Ng(y,K,j,Tf.useMaxWidth),y.attr("viewBox",`${F.x-R} ${F.y-R} ${j} ${K}`)}},styles:frn}},Symbol.toStringTag,{value:"Module"}));var yve=function(){var i=function(xt,Pt,Qe,Dt){for(Qe=Qe||{},Dt=xt.length;Dt--;Qe[xt[Dt]]=Pt);return Qe},s=[1,2],u=[1,3],d=[1,4],p=[2,4],v=[1,9],b=[1,11],y=[1,13],T=[1,14],_=[1,16],A=[1,17],P=[1,18],R=[1,24],F=[1,25],j=[1,26],K=[1,27],ee=[1,28],ie=[1,29],oe=[1,30],pe=[1,31],be=[1,32],ae=[1,33],ne=[1,34],se=[1,35],de=[1,36],X=[1,37],ge=[1,38],W=[1,39],xe=[1,41],U=[1,42],Fe=[1,43],Pe=[1,44],je=[1,45],Ie=[1,46],Se=[1,4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,48,49,50,52,53,54,59,60,61,62,70],Ce=[4,5,16,50,52,53],ke=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],Ke=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,49,50,52,53,54,59,60,61,62,70],Ft=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,48,50,52,53,54,59,60,61,62,70],Ne=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,50,52,53,54,59,60,61,62,70],gn=[68,69,70],_t=[1,120],Et={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,SD:6,document:7,line:8,statement:9,box_section:10,box_line:11,participant_statement:12,create:13,box:14,restOfLine:15,end:16,signal:17,autonumber:18,NUM:19,off:20,activate:21,actor:22,deactivate:23,note_statement:24,links_statement:25,link_statement:26,properties_statement:27,details_statement:28,title:29,legacy_title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,loop:36,rect:37,opt:38,alt:39,else_sections:40,par:41,par_sections:42,par_over:43,critical:44,option_sections:45,break:46,option:47,and:48,else:49,participant:50,AS:51,participant_actor:52,destroy:53,note:54,placement:55,text2:56,over:57,actor_pair:58,links:59,link:60,properties:61,details:62,spaceList:63,",":64,left_of:65,right_of:66,signaltype:67,"+":68,"-":69,ACTOR:70,SOLID_OPEN_ARROW:71,DOTTED_OPEN_ARROW:72,SOLID_ARROW:73,DOTTED_ARROW:74,SOLID_CROSS:75,DOTTED_CROSS:76,SOLID_POINT:77,DOTTED_POINT:78,TXT:79,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",6:"SD",13:"create",14:"box",15:"restOfLine",16:"end",18:"autonumber",19:"NUM",20:"off",21:"activate",23:"deactivate",29:"title",30:"legacy_title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"loop",37:"rect",38:"opt",39:"alt",41:"par",43:"par_over",44:"critical",46:"break",47:"option",48:"and",49:"else",50:"participant",51:"AS",52:"participant_actor",53:"destroy",54:"note",57:"over",59:"links",60:"link",61:"properties",62:"details",64:",",65:"left_of",66:"right_of",68:"+",69:"-",70:"ACTOR",71:"SOLID_OPEN_ARROW",72:"DOTTED_OPEN_ARROW",73:"SOLID_ARROW",74:"DOTTED_ARROW",75:"SOLID_CROSS",76:"DOTTED_CROSS",77:"SOLID_POINT",78:"DOTTED_POINT",79:"TXT"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[10,0],[10,2],[11,2],[11,1],[11,1],[9,1],[9,2],[9,4],[9,2],[9,4],[9,3],[9,3],[9,2],[9,3],[9,3],[9,2],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[9,2],[9,2],[9,1],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[45,1],[45,4],[42,1],[42,4],[40,1],[40,4],[12,5],[12,3],[12,5],[12,3],[12,3],[24,4],[24,4],[25,3],[26,3],[27,3],[28,3],[63,2],[63,1],[58,3],[58,1],[55,1],[55,1],[17,5],[17,5],[17,4],[22,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[56,1]],performAction:function(Pt,Qe,Dt,kt,On,ht,zr){var yt=ht.length-1;switch(On){case 3:return kt.apply(ht[yt]),ht[yt];case 4:case 9:this.$=[];break;case 5:case 10:ht[yt-1].push(ht[yt]),this.$=ht[yt-1];break;case 6:case 7:case 11:case 12:this.$=ht[yt];break;case 8:case 13:this.$=[];break;case 15:ht[yt].type="createParticipant",this.$=ht[yt];break;case 16:ht[yt-1].unshift({type:"boxStart",boxData:kt.parseBoxData(ht[yt-2])}),ht[yt-1].push({type:"boxEnd",boxText:ht[yt-2]}),this.$=ht[yt-1];break;case 18:this.$={type:"sequenceIndex",sequenceIndex:Number(ht[yt-2]),sequenceIndexStep:Number(ht[yt-1]),sequenceVisible:!0,signalType:kt.LINETYPE.AUTONUMBER};break;case 19:this.$={type:"sequenceIndex",sequenceIndex:Number(ht[yt-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:kt.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:kt.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:kt.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"activeStart",signalType:kt.LINETYPE.ACTIVE_START,actor:ht[yt-1]};break;case 23:this.$={type:"activeEnd",signalType:kt.LINETYPE.ACTIVE_END,actor:ht[yt-1]};break;case 29:kt.setDiagramTitle(ht[yt].substring(6)),this.$=ht[yt].substring(6);break;case 30:kt.setDiagramTitle(ht[yt].substring(7)),this.$=ht[yt].substring(7);break;case 31:this.$=ht[yt].trim(),kt.setAccTitle(this.$);break;case 32:case 33:this.$=ht[yt].trim(),kt.setAccDescription(this.$);break;case 34:ht[yt-1].unshift({type:"loopStart",loopText:kt.parseMessage(ht[yt-2]),signalType:kt.LINETYPE.LOOP_START}),ht[yt-1].push({type:"loopEnd",loopText:ht[yt-2],signalType:kt.LINETYPE.LOOP_END}),this.$=ht[yt-1];break;case 35:ht[yt-1].unshift({type:"rectStart",color:kt.parseMessage(ht[yt-2]),signalType:kt.LINETYPE.RECT_START}),ht[yt-1].push({type:"rectEnd",color:kt.parseMessage(ht[yt-2]),signalType:kt.LINETYPE.RECT_END}),this.$=ht[yt-1];break;case 36:ht[yt-1].unshift({type:"optStart",optText:kt.parseMessage(ht[yt-2]),signalType:kt.LINETYPE.OPT_START}),ht[yt-1].push({type:"optEnd",optText:kt.parseMessage(ht[yt-2]),signalType:kt.LINETYPE.OPT_END}),this.$=ht[yt-1];break;case 37:ht[yt-1].unshift({type:"altStart",altText:kt.parseMessage(ht[yt-2]),signalType:kt.LINETYPE.ALT_START}),ht[yt-1].push({type:"altEnd",signalType:kt.LINETYPE.ALT_END}),this.$=ht[yt-1];break;case 38:ht[yt-1].unshift({type:"parStart",parText:kt.parseMessage(ht[yt-2]),signalType:kt.LINETYPE.PAR_START}),ht[yt-1].push({type:"parEnd",signalType:kt.LINETYPE.PAR_END}),this.$=ht[yt-1];break;case 39:ht[yt-1].unshift({type:"parStart",parText:kt.parseMessage(ht[yt-2]),signalType:kt.LINETYPE.PAR_OVER_START}),ht[yt-1].push({type:"parEnd",signalType:kt.LINETYPE.PAR_END}),this.$=ht[yt-1];break;case 40:ht[yt-1].unshift({type:"criticalStart",criticalText:kt.parseMessage(ht[yt-2]),signalType:kt.LINETYPE.CRITICAL_START}),ht[yt-1].push({type:"criticalEnd",signalType:kt.LINETYPE.CRITICAL_END}),this.$=ht[yt-1];break;case 41:ht[yt-1].unshift({type:"breakStart",breakText:kt.parseMessage(ht[yt-2]),signalType:kt.LINETYPE.BREAK_START}),ht[yt-1].push({type:"breakEnd",optText:kt.parseMessage(ht[yt-2]),signalType:kt.LINETYPE.BREAK_END}),this.$=ht[yt-1];break;case 43:this.$=ht[yt-3].concat([{type:"option",optionText:kt.parseMessage(ht[yt-1]),signalType:kt.LINETYPE.CRITICAL_OPTION},ht[yt]]);break;case 45:this.$=ht[yt-3].concat([{type:"and",parText:kt.parseMessage(ht[yt-1]),signalType:kt.LINETYPE.PAR_AND},ht[yt]]);break;case 47:this.$=ht[yt-3].concat([{type:"else",altText:kt.parseMessage(ht[yt-1]),signalType:kt.LINETYPE.ALT_ELSE},ht[yt]]);break;case 48:ht[yt-3].draw="participant",ht[yt-3].type="addParticipant",ht[yt-3].description=kt.parseMessage(ht[yt-1]),this.$=ht[yt-3];break;case 49:ht[yt-1].draw="participant",ht[yt-1].type="addParticipant",this.$=ht[yt-1];break;case 50:ht[yt-3].draw="actor",ht[yt-3].type="addParticipant",ht[yt-3].description=kt.parseMessage(ht[yt-1]),this.$=ht[yt-3];break;case 51:ht[yt-1].draw="actor",ht[yt-1].type="addParticipant",this.$=ht[yt-1];break;case 52:ht[yt-1].type="destroyParticipant",this.$=ht[yt-1];break;case 53:this.$=[ht[yt-1],{type:"addNote",placement:ht[yt-2],actor:ht[yt-1].actor,text:ht[yt]}];break;case 54:ht[yt-2]=[].concat(ht[yt-1],ht[yt-1]).slice(0,2),ht[yt-2][0]=ht[yt-2][0].actor,ht[yt-2][1]=ht[yt-2][1].actor,this.$=[ht[yt-1],{type:"addNote",placement:kt.PLACEMENT.OVER,actor:ht[yt-2].slice(0,2),text:ht[yt]}];break;case 55:this.$=[ht[yt-1],{type:"addLinks",actor:ht[yt-1].actor,text:ht[yt]}];break;case 56:this.$=[ht[yt-1],{type:"addALink",actor:ht[yt-1].actor,text:ht[yt]}];break;case 57:this.$=[ht[yt-1],{type:"addProperties",actor:ht[yt-1].actor,text:ht[yt]}];break;case 58:this.$=[ht[yt-1],{type:"addDetails",actor:ht[yt-1].actor,text:ht[yt]}];break;case 61:this.$=[ht[yt-2],ht[yt]];break;case 62:this.$=ht[yt];break;case 63:this.$=kt.PLACEMENT.LEFTOF;break;case 64:this.$=kt.PLACEMENT.RIGHTOF;break;case 65:this.$=[ht[yt-4],ht[yt-1],{type:"addMessage",from:ht[yt-4].actor,to:ht[yt-1].actor,signalType:ht[yt-3],msg:ht[yt],activate:!0},{type:"activeStart",signalType:kt.LINETYPE.ACTIVE_START,actor:ht[yt-1]}];break;case 66:this.$=[ht[yt-4],ht[yt-1],{type:"addMessage",from:ht[yt-4].actor,to:ht[yt-1].actor,signalType:ht[yt-3],msg:ht[yt]},{type:"activeEnd",signalType:kt.LINETYPE.ACTIVE_END,actor:ht[yt-4]}];break;case 67:this.$=[ht[yt-3],ht[yt-1],{type:"addMessage",from:ht[yt-3].actor,to:ht[yt-1].actor,signalType:ht[yt-2],msg:ht[yt]}];break;case 68:this.$={type:"addParticipant",actor:ht[yt]};break;case 69:this.$=kt.LINETYPE.SOLID_OPEN;break;case 70:this.$=kt.LINETYPE.DOTTED_OPEN;break;case 71:this.$=kt.LINETYPE.SOLID;break;case 72:this.$=kt.LINETYPE.DOTTED;break;case 73:this.$=kt.LINETYPE.SOLID_CROSS;break;case 74:this.$=kt.LINETYPE.DOTTED_CROSS;break;case 75:this.$=kt.LINETYPE.SOLID_POINT;break;case 76:this.$=kt.LINETYPE.DOTTED_POINT;break;case 77:this.$=kt.parseMessage(ht[yt].trim().substring(1));break}},table:[{3:1,4:s,5:u,6:d},{1:[3]},{3:5,4:s,5:u,6:d},{3:6,4:s,5:u,6:d},i([1,4,5,13,14,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],p,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:v,5:b,8:8,9:10,12:12,13:y,14:T,17:15,18:_,21:A,22:40,23:P,24:19,25:20,26:21,27:22,28:23,29:R,30:F,31:j,33:K,35:ee,36:ie,37:oe,38:pe,39:be,41:ae,43:ne,44:se,46:de,50:X,52:ge,53:W,54:xe,59:U,60:Fe,61:Pe,62:je,70:Ie},i(Se,[2,5]),{9:47,12:12,13:y,14:T,17:15,18:_,21:A,22:40,23:P,24:19,25:20,26:21,27:22,28:23,29:R,30:F,31:j,33:K,35:ee,36:ie,37:oe,38:pe,39:be,41:ae,43:ne,44:se,46:de,50:X,52:ge,53:W,54:xe,59:U,60:Fe,61:Pe,62:je,70:Ie},i(Se,[2,7]),i(Se,[2,8]),i(Se,[2,14]),{12:48,50:X,52:ge,53:W},{15:[1,49]},{5:[1,50]},{5:[1,53],19:[1,51],20:[1,52]},{22:54,70:Ie},{22:55,70:Ie},{5:[1,56]},{5:[1,57]},{5:[1,58]},{5:[1,59]},{5:[1,60]},i(Se,[2,29]),i(Se,[2,30]),{32:[1,61]},{34:[1,62]},i(Se,[2,33]),{15:[1,63]},{15:[1,64]},{15:[1,65]},{15:[1,66]},{15:[1,67]},{15:[1,68]},{15:[1,69]},{15:[1,70]},{22:71,70:Ie},{22:72,70:Ie},{22:73,70:Ie},{67:74,71:[1,75],72:[1,76],73:[1,77],74:[1,78],75:[1,79],76:[1,80],77:[1,81],78:[1,82]},{55:83,57:[1,84],65:[1,85],66:[1,86]},{22:87,70:Ie},{22:88,70:Ie},{22:89,70:Ie},{22:90,70:Ie},i([5,51,64,71,72,73,74,75,76,77,78,79],[2,68]),i(Se,[2,6]),i(Se,[2,15]),i(Ce,[2,9],{10:91}),i(Se,[2,17]),{5:[1,93],19:[1,92]},{5:[1,94]},i(Se,[2,21]),{5:[1,95]},{5:[1,96]},i(Se,[2,24]),i(Se,[2,25]),i(Se,[2,26]),i(Se,[2,27]),i(Se,[2,28]),i(Se,[2,31]),i(Se,[2,32]),i(ke,p,{7:97}),i(ke,p,{7:98}),i(ke,p,{7:99}),i(Ke,p,{40:100,7:101}),i(Ft,p,{42:102,7:103}),i(Ft,p,{7:103,42:104}),i(Ne,p,{45:105,7:106}),i(ke,p,{7:107}),{5:[1,109],51:[1,108]},{5:[1,111],51:[1,110]},{5:[1,112]},{22:115,68:[1,113],69:[1,114],70:Ie},i(gn,[2,69]),i(gn,[2,70]),i(gn,[2,71]),i(gn,[2,72]),i(gn,[2,73]),i(gn,[2,74]),i(gn,[2,75]),i(gn,[2,76]),{22:116,70:Ie},{22:118,58:117,70:Ie},{70:[2,63]},{70:[2,64]},{56:119,79:_t},{56:121,79:_t},{56:122,79:_t},{56:123,79:_t},{4:[1,126],5:[1,128],11:125,12:127,16:[1,124],50:X,52:ge,53:W},{5:[1,129]},i(Se,[2,19]),i(Se,[2,20]),i(Se,[2,22]),i(Se,[2,23]),{4:v,5:b,8:8,9:10,12:12,13:y,14:T,16:[1,130],17:15,18:_,21:A,22:40,23:P,24:19,25:20,26:21,27:22,28:23,29:R,30:F,31:j,33:K,35:ee,36:ie,37:oe,38:pe,39:be,41:ae,43:ne,44:se,46:de,50:X,52:ge,53:W,54:xe,59:U,60:Fe,61:Pe,62:je,70:Ie},{4:v,5:b,8:8,9:10,12:12,13:y,14:T,16:[1,131],17:15,18:_,21:A,22:40,23:P,24:19,25:20,26:21,27:22,28:23,29:R,30:F,31:j,33:K,35:ee,36:ie,37:oe,38:pe,39:be,41:ae,43:ne,44:se,46:de,50:X,52:ge,53:W,54:xe,59:U,60:Fe,61:Pe,62:je,70:Ie},{4:v,5:b,8:8,9:10,12:12,13:y,14:T,16:[1,132],17:15,18:_,21:A,22:40,23:P,24:19,25:20,26:21,27:22,28:23,29:R,30:F,31:j,33:K,35:ee,36:ie,37:oe,38:pe,39:be,41:ae,43:ne,44:se,46:de,50:X,52:ge,53:W,54:xe,59:U,60:Fe,61:Pe,62:je,70:Ie},{16:[1,133]},{4:v,5:b,8:8,9:10,12:12,13:y,14:T,16:[2,46],17:15,18:_,21:A,22:40,23:P,24:19,25:20,26:21,27:22,28:23,29:R,30:F,31:j,33:K,35:ee,36:ie,37:oe,38:pe,39:be,41:ae,43:ne,44:se,46:de,49:[1,134],50:X,52:ge,53:W,54:xe,59:U,60:Fe,61:Pe,62:je,70:Ie},{16:[1,135]},{4:v,5:b,8:8,9:10,12:12,13:y,14:T,16:[2,44],17:15,18:_,21:A,22:40,23:P,24:19,25:20,26:21,27:22,28:23,29:R,30:F,31:j,33:K,35:ee,36:ie,37:oe,38:pe,39:be,41:ae,43:ne,44:se,46:de,48:[1,136],50:X,52:ge,53:W,54:xe,59:U,60:Fe,61:Pe,62:je,70:Ie},{16:[1,137]},{16:[1,138]},{4:v,5:b,8:8,9:10,12:12,13:y,14:T,16:[2,42],17:15,18:_,21:A,22:40,23:P,24:19,25:20,26:21,27:22,28:23,29:R,30:F,31:j,33:K,35:ee,36:ie,37:oe,38:pe,39:be,41:ae,43:ne,44:se,46:de,47:[1,139],50:X,52:ge,53:W,54:xe,59:U,60:Fe,61:Pe,62:je,70:Ie},{4:v,5:b,8:8,9:10,12:12,13:y,14:T,16:[1,140],17:15,18:_,21:A,22:40,23:P,24:19,25:20,26:21,27:22,28:23,29:R,30:F,31:j,33:K,35:ee,36:ie,37:oe,38:pe,39:be,41:ae,43:ne,44:se,46:de,50:X,52:ge,53:W,54:xe,59:U,60:Fe,61:Pe,62:je,70:Ie},{15:[1,141]},i(Se,[2,49]),{15:[1,142]},i(Se,[2,51]),i(Se,[2,52]),{22:143,70:Ie},{22:144,70:Ie},{56:145,79:_t},{56:146,79:_t},{56:147,79:_t},{64:[1,148],79:[2,62]},{5:[2,55]},{5:[2,77]},{5:[2,56]},{5:[2,57]},{5:[2,58]},i(Se,[2,16]),i(Ce,[2,10]),{12:149,50:X,52:ge,53:W},i(Ce,[2,12]),i(Ce,[2,13]),i(Se,[2,18]),i(Se,[2,34]),i(Se,[2,35]),i(Se,[2,36]),i(Se,[2,37]),{15:[1,150]},i(Se,[2,38]),{15:[1,151]},i(Se,[2,39]),i(Se,[2,40]),{15:[1,152]},i(Se,[2,41]),{5:[1,153]},{5:[1,154]},{56:155,79:_t},{56:156,79:_t},{5:[2,67]},{5:[2,53]},{5:[2,54]},{22:157,70:Ie},i(Ce,[2,11]),i(Ke,p,{7:101,40:158}),i(Ft,p,{7:103,42:159}),i(Ne,p,{7:106,45:160}),i(Se,[2,48]),i(Se,[2,50]),{5:[2,65]},{5:[2,66]},{79:[2,61]},{16:[2,47]},{16:[2,45]},{16:[2,43]}],defaultActions:{5:[2,1],6:[2,2],85:[2,63],86:[2,64],119:[2,55],120:[2,77],121:[2,56],122:[2,57],123:[2,58],145:[2,67],146:[2,53],147:[2,54],155:[2,65],156:[2,66],157:[2,61],158:[2,47],159:[2,45],160:[2,43]},parseError:function(Pt,Qe){if(Qe.recoverable)this.trace(Pt);else{var Dt=new Error(Pt);throw Dt.hash=Qe,Dt}},parse:function(Pt){var Qe=this,Dt=[0],kt=[],On=[null],ht=[],zr=this.table,yt="",ji=0,xi=0,Ma=2,zs=1,ao=ht.slice.call(arguments,1),Tr=Object.create(this.lexer),Fn={yy:{}};for(var qn in this.yy)Object.prototype.hasOwnProperty.call(this.yy,qn)&&(Fn.yy[qn]=this.yy[qn]);Tr.setInput(Pt,Fn.yy),Fn.yy.lexer=Tr,Fn.yy.parser=this,typeof Tr.yylloc>"u"&&(Tr.yylloc={});var Un=Tr.yylloc;ht.push(Un);var At=Tr.options&&Tr.options.ranges;typeof Fn.yy.parseError=="function"?this.parseError=Fn.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function wt(){var da;return da=kt.pop()||Tr.lex()||zs,typeof da!="number"&&(da instanceof Array&&(kt=da,da=kt.pop()),da=Qe.symbols_[da]||da),da}for(var on,fn,An,oo,jo={},$o,Pa,wo,_s;;){if(fn=Dt[Dt.length-1],this.defaultActions[fn]?An=this.defaultActions[fn]:((on===null||typeof on>"u")&&(on=wt()),An=zr[fn]&&zr[fn][on]),typeof An>"u"||!An.length||!An[0]){var tl="";_s=[];for($o in zr[fn])this.terminals_[$o]&&$o>Ma&&_s.push("'"+this.terminals_[$o]+"'");Tr.showPosition?tl="Parse error on line "+(ji+1)+`: -`+Tr.showPosition()+` -Expecting `+_s.join(", ")+", got '"+(this.terminals_[on]||on)+"'":tl="Parse error on line "+(ji+1)+": Unexpected "+(on==zs?"end of input":"'"+(this.terminals_[on]||on)+"'"),this.parseError(tl,{text:Tr.match,token:this.terminals_[on]||on,line:Tr.yylineno,loc:Un,expected:_s})}if(An[0]instanceof Array&&An.length>1)throw new Error("Parse Error: multiple actions possible at state: "+fn+", token: "+on);switch(An[0]){case 1:Dt.push(on),On.push(Tr.yytext),ht.push(Tr.yylloc),Dt.push(An[1]),on=null,xi=Tr.yyleng,yt=Tr.yytext,ji=Tr.yylineno,Un=Tr.yylloc;break;case 2:if(Pa=this.productions_[An[1]][1],jo.$=On[On.length-Pa],jo._$={first_line:ht[ht.length-(Pa||1)].first_line,last_line:ht[ht.length-1].last_line,first_column:ht[ht.length-(Pa||1)].first_column,last_column:ht[ht.length-1].last_column},At&&(jo._$.range=[ht[ht.length-(Pa||1)].range[0],ht[ht.length-1].range[1]]),oo=this.performAction.apply(jo,[yt,xi,ji,Fn.yy,An[1],On,ht].concat(ao)),typeof oo<"u")return oo;Pa&&(Dt=Dt.slice(0,-1*Pa*2),On=On.slice(0,-1*Pa),ht=ht.slice(0,-1*Pa)),Dt.push(this.productions_[An[1]][0]),On.push(jo.$),ht.push(jo._$),wo=zr[Dt[Dt.length-2]][Dt[Dt.length-1]],Dt.push(wo);break;case 3:return!0}}return!0}},Gt=function(){var xt={EOF:1,parseError:function(Qe,Dt){if(this.yy.parser)this.yy.parser.parseError(Qe,Dt);else throw new Error(Qe)},setInput:function(Pt,Qe){return this.yy=Qe||this.yy||{},this._input=Pt,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var Pt=this._input[0];this.yytext+=Pt,this.yyleng++,this.offset++,this.match+=Pt,this.matched+=Pt;var Qe=Pt.match(/(?:\r\n?|\n).*/g);return Qe?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Pt},unput:function(Pt){var Qe=Pt.length,Dt=Pt.split(/(?:\r\n?|\n)/g);this._input=Pt+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Qe),this.offset-=Qe;var kt=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Dt.length-1&&(this.yylineno-=Dt.length-1);var On=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Dt?(Dt.length===kt.length?this.yylloc.first_column:0)+kt[kt.length-Dt.length].length-Dt[0].length:this.yylloc.first_column-Qe},this.options.ranges&&(this.yylloc.range=[On[0],On[0]+this.yyleng-Qe]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(Pt){this.unput(this.match.slice(Pt))},pastInput:function(){var Pt=this.matched.substr(0,this.matched.length-this.match.length);return(Pt.length>20?"...":"")+Pt.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Pt=this.match;return Pt.length<20&&(Pt+=this._input.substr(0,20-Pt.length)),(Pt.substr(0,20)+(Pt.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Pt=this.pastInput(),Qe=new Array(Pt.length+1).join("-");return Pt+this.upcomingInput()+` -`+Qe+"^"},test_match:function(Pt,Qe){var Dt,kt,On;if(this.options.backtrack_lexer&&(On={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(On.yylloc.range=this.yylloc.range.slice(0))),kt=Pt[0].match(/(?:\r\n?|\n).*/g),kt&&(this.yylineno+=kt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:kt?kt[kt.length-1].length-kt[kt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Pt[0].length},this.yytext+=Pt[0],this.match+=Pt[0],this.matches=Pt,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Pt[0].length),this.matched+=Pt[0],Dt=this.performAction.call(this,this.yy,this,Qe,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Dt)return Dt;if(this._backtrack){for(var ht in On)this[ht]=On[ht];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Pt,Qe,Dt,kt;this._more||(this.yytext="",this.match="");for(var On=this._currentRules(),ht=0;htQe[0].length)){if(Qe=Dt,kt=ht,this.options.backtrack_lexer){if(Pt=this.test_match(Dt,On[ht]),Pt!==!1)return Pt;if(this._backtrack){Qe=!1;continue}else return!1}else if(!this.options.flex)break}return Qe?(Pt=this.test_match(Qe,On[kt]),Pt!==!1?Pt:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Qe=this.next();return Qe||this.lex()},begin:function(Qe){this.conditionStack.push(Qe)},popState:function(){var Qe=this.conditionStack.length-1;return Qe>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Qe){return Qe=this.conditionStack.length-1-Math.abs(Qe||0),Qe>=0?this.conditionStack[Qe]:"INITIAL"},pushState:function(Qe){this.begin(Qe)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(Qe,Dt,kt,On){switch(kt){case 0:return 5;case 1:break;case 2:break;case 3:break;case 4:break;case 5:break;case 6:return 19;case 7:return this.begin("LINE"),14;case 8:return this.begin("ID"),50;case 9:return this.begin("ID"),52;case 10:return 13;case 11:return this.begin("ID"),53;case 12:return Dt.yytext=Dt.yytext.trim(),this.begin("ALIAS"),70;case 13:return this.popState(),this.popState(),this.begin("LINE"),51;case 14:return this.popState(),this.popState(),5;case 15:return this.begin("LINE"),36;case 16:return this.begin("LINE"),37;case 17:return this.begin("LINE"),38;case 18:return this.begin("LINE"),39;case 19:return this.begin("LINE"),49;case 20:return this.begin("LINE"),41;case 21:return this.begin("LINE"),43;case 22:return this.begin("LINE"),48;case 23:return this.begin("LINE"),44;case 24:return this.begin("LINE"),47;case 25:return this.begin("LINE"),46;case 26:return this.popState(),15;case 27:return 16;case 28:return 65;case 29:return 66;case 30:return 59;case 31:return 60;case 32:return 61;case 33:return 62;case 34:return 57;case 35:return 54;case 36:return this.begin("ID"),21;case 37:return this.begin("ID"),23;case 38:return 29;case 39:return 30;case 40:return this.begin("acc_title"),31;case 41:return this.popState(),"acc_title_value";case 42:return this.begin("acc_descr"),33;case 43:return this.popState(),"acc_descr_value";case 44:this.begin("acc_descr_multiline");break;case 45:this.popState();break;case 46:return"acc_descr_multiline_value";case 47:return 6;case 48:return 18;case 49:return 20;case 50:return 64;case 51:return 5;case 52:return Dt.yytext=Dt.yytext.trim(),70;case 53:return 73;case 54:return 74;case 55:return 71;case 56:return 72;case 57:return 75;case 58:return 76;case 59:return 77;case 60:return 78;case 61:return 79;case 62:return 68;case 63:return 69;case 64:return 5;case 65:return"INVALID"}},rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[0-9]+(?=[ \n]+))/i,/^(?:box\b)/i,/^(?:participant\b)/i,/^(?:actor\b)/i,/^(?:create\b)/i,/^(?:destroy\b)/i,/^(?:[^\->:\n,;]+?([\-]*[^\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:par_over\b)/i,/^(?:and\b)/i,/^(?:critical\b)/i,/^(?:option\b)/i,/^(?:break\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:links\b)/i,/^(?:link\b)/i,/^(?:properties\b)/i,/^(?:details\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:title:\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:off\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[45,46],inclusive:!1},acc_descr:{rules:[43],inclusive:!1},acc_title:{rules:[41],inclusive:!1},ID:{rules:[2,3,12],inclusive:!1},ALIAS:{rules:[2,3,13,14],inclusive:!1},LINE:{rules:[2,3,26],inclusive:!1},INITIAL:{rules:[0,1,3,4,5,6,7,8,9,10,11,15,16,17,18,19,20,21,22,23,24,25,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,44,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65],inclusive:!0}}};return xt}();Et.lexer=Gt;function ln(){this.yy={}}return ln.prototype=Et,Et.Parser=ln,new ln}();yve.parser=yve;const yrn=yve;class xrn{constructor(s){this.init=s,this.records=this.init()}reset(){this.records=this.init()}}const Ds=new xrn(()=>({prevActor:void 0,actors:{},createdActors:{},destroyedActors:{},boxes:[],messages:[],notes:[],sequenceNumbersEnabled:!1,wrapEnabled:void 0,currentBox:void 0,lastCreated:void 0,lastDestroyed:void 0})),krn=function(i){Ds.records.boxes.push({name:i.text,wrap:i.wrap===void 0&&JC()||!!i.wrap,fill:i.color,actorKeys:[]}),Ds.records.currentBox=Ds.records.boxes.slice(-1)[0]},xve=function(i,s,u,d){let p=Ds.records.currentBox;const v=Ds.records.actors[i];if(v){if(Ds.records.currentBox&&v.box&&Ds.records.currentBox!==v.box)throw new Error("A same participant should only be defined in one Box: "+v.name+" can't be in '"+v.box.name+"' and in '"+Ds.records.currentBox.name+"' at the same time.");if(p=v.box?v.box:Ds.records.currentBox,v.box=p,v&&s===v.name&&u==null)return}(u==null||u.text==null)&&(u={text:s,wrap:null,type:d}),(d==null||u.text==null)&&(u={text:s,wrap:null,type:d}),Ds.records.actors[i]={box:p,name:s,description:u.text,wrap:u.wrap===void 0&&JC()||!!u.wrap,prevActor:Ds.records.prevActor,links:{},properties:{},actorCnt:null,rectData:null,type:d||"participant"},Ds.records.prevActor&&Ds.records.actors[Ds.records.prevActor]&&(Ds.records.actors[Ds.records.prevActor].nextActor=i),Ds.records.currentBox&&Ds.records.currentBox.actorKeys.push(i),Ds.records.prevActor=i},Ern=i=>{let s,u=0;for(s=0;s>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},b}return Ds.records.messages.push({from:i,to:s,message:u.text,wrap:u.wrap===void 0&&JC()||!!u.wrap,type:d,activate:p}),!0},Crn=function(){return Ds.records.boxes.length>0},Srn=function(){return Ds.records.boxes.some(i=>i.name)},_rn=function(){return Ds.records.messages},Arn=function(){return Ds.records.boxes},Lrn=function(){return Ds.records.actors},Mrn=function(){return Ds.records.createdActors},Drn=function(){return Ds.records.destroyedActors},GR=function(i){return Ds.records.actors[i]},Irn=function(){return Object.keys(Ds.records.actors)},Orn=function(){Ds.records.sequenceNumbersEnabled=!0},Nrn=function(){Ds.records.sequenceNumbersEnabled=!1},Prn=()=>Ds.records.sequenceNumbersEnabled,Brn=function(i){Ds.records.wrapEnabled=i},JC=()=>Ds.records.wrapEnabled!==void 0?Ds.records.wrapEnabled:qt().sequence.wrap,Frn=function(){Ds.reset(),Pg()},Rrn=function(i){const s=i.trim(),u={text:s.replace(/^:?(?:no)?wrap:/,"").trim(),wrap:s.match(/^:?wrap:/)!==null?!0:s.match(/^:?nowrap:/)!==null?!1:void 0};return Xe.debug("parseMessage:",u),u},jrn=function(i){const s=i.match(/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/);let u=s!=null&&s[1]?s[1].trim():"transparent",d=s!=null&&s[2]?s[2].trim():void 0;if(window&&window.CSS)window.CSS.supports("color",u)||(u="transparent",d=i.trim());else{const p=new Option().style;p.color=u,p.color!==u&&(u="transparent",d=i.trim())}return{color:u,text:d!==void 0?Yf(d.replace(/^:?(?:no)?wrap:/,""),qt()):void 0,wrap:d!==void 0?d.match(/^:?wrap:/)!==null?!0:d.match(/^:?nowrap:/)!==null?!1:void 0:void 0}},KR={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25,AUTONUMBER:26,CRITICAL_START:27,CRITICAL_OPTION:28,CRITICAL_END:29,BREAK_START:30,BREAK_END:31,PAR_OVER_START:32},$rn={FILLED:0,OPEN:1},zrn={LEFTOF:0,RIGHTOF:1,OVER:2},DGe=function(i,s,u){const d={actor:i,placement:s,message:u.text,wrap:u.wrap===void 0&&JC()||!!u.wrap},p=[].concat(i,i);Ds.records.notes.push(d),Ds.records.messages.push({from:p[0],to:p[1],message:u.text,wrap:u.wrap===void 0&&JC()||!!u.wrap,type:KR.NOTE,placement:s})},IGe=function(i,s){const u=GR(i);try{let d=Yf(s.text,qt());d=d.replace(/&/g,"&"),d=d.replace(/=/g,"=");const p=JSON.parse(d);kve(u,p)}catch(d){Xe.error("error while parsing actor link text",d)}},qrn=function(i,s){const u=GR(i);try{const b={};let y=Yf(s.text,qt());var d=y.indexOf("@");y=y.replace(/&/g,"&"),y=y.replace(/=/g,"=");var p=y.slice(0,d-1).trim(),v=y.slice(d+1).trim();b[p]=v,kve(u,b)}catch(b){Xe.error("error while parsing actor link text",b)}};function kve(i,s){if(i.links==null)i.links=s;else for(let u in s)i.links[u]=s[u]}const OGe=function(i,s){const u=GR(i);try{let d=Yf(s.text,qt());const p=JSON.parse(d);NGe(u,p)}catch(d){Xe.error("error while parsing actor properties text",d)}};function NGe(i,s){if(i.properties==null)i.properties=s;else for(let u in s)i.properties[u]=s[u]}function Hrn(){Ds.records.currentBox=void 0}const PGe=function(i,s){const u=GR(i),d=document.getElementById(s.text);try{const p=d.innerHTML,v=JSON.parse(p);v.properties&&NGe(u,v.properties),v.links&&kve(u,v.links)}catch(p){Xe.error("error while parsing actor details text",p)}},Vrn=function(i,s){if(i!==void 0&&i.properties!==void 0)return i.properties[s]},BGe=function(i){if(Array.isArray(i))i.forEach(function(s){BGe(s)});else switch(i.type){case"sequenceIndex":Ds.records.messages.push({from:void 0,to:void 0,message:{start:i.sequenceIndex,step:i.sequenceIndexStep,visible:i.sequenceVisible},wrap:!1,type:i.signalType});break;case"addParticipant":xve(i.actor,i.actor,i.description,i.draw);break;case"createParticipant":if(Ds.records.actors[i.actor])throw new Error("It is not possible to have actors with the same id, even if one is destroyed before the next is created. Use 'AS' aliases to simulate the behavior");Ds.records.lastCreated=i.actor,xve(i.actor,i.actor,i.description,i.draw),Ds.records.createdActors[i.actor]=Ds.records.messages.length;break;case"destroyParticipant":Ds.records.lastDestroyed=i.actor,Ds.records.destroyedActors[i.actor]=Ds.records.messages.length;break;case"activeStart":Jf(i.actor,void 0,void 0,i.signalType);break;case"activeEnd":Jf(i.actor,void 0,void 0,i.signalType);break;case"addNote":DGe(i.actor,i.placement,i.text);break;case"addLinks":IGe(i.actor,i.text);break;case"addALink":qrn(i.actor,i.text);break;case"addProperties":OGe(i.actor,i.text);break;case"addDetails":PGe(i.actor,i.text);break;case"addMessage":if(Ds.records.lastCreated){if(i.to!==Ds.records.lastCreated)throw new Error("The created participant "+Ds.records.lastCreated+" does not have an associated creating message after its declaration. Please check the sequence diagram.");Ds.records.lastCreated=void 0}else if(Ds.records.lastDestroyed){if(i.to!==Ds.records.lastDestroyed&&i.from!==Ds.records.lastDestroyed)throw new Error("The destroyed participant "+Ds.records.lastDestroyed+" does not have an associated destroying message after its declaration. Please check the sequence diagram.");Ds.records.lastDestroyed=void 0}Jf(i.from,i.to,i.msg,i.signalType,i.activate);break;case"boxStart":krn(i.boxData);break;case"boxEnd":Hrn();break;case"loopStart":Jf(void 0,void 0,i.loopText,i.signalType);break;case"loopEnd":Jf(void 0,void 0,void 0,i.signalType);break;case"rectStart":Jf(void 0,void 0,i.color,i.signalType);break;case"rectEnd":Jf(void 0,void 0,void 0,i.signalType);break;case"optStart":Jf(void 0,void 0,i.optText,i.signalType);break;case"optEnd":Jf(void 0,void 0,void 0,i.signalType);break;case"altStart":Jf(void 0,void 0,i.altText,i.signalType);break;case"else":Jf(void 0,void 0,i.altText,i.signalType);break;case"altEnd":Jf(void 0,void 0,void 0,i.signalType);break;case"setAccTitle":Bg(i.text);break;case"parStart":Jf(void 0,void 0,i.parText,i.signalType);break;case"and":Jf(void 0,void 0,i.parText,i.signalType);break;case"parEnd":Jf(void 0,void 0,void 0,i.signalType);break;case"criticalStart":Jf(void 0,void 0,i.criticalText,i.signalType);break;case"option":Jf(void 0,void 0,i.optionText,i.signalType);break;case"criticalEnd":Jf(void 0,void 0,void 0,i.signalType);break;case"breakStart":Jf(void 0,void 0,i.breakText,i.signalType);break;case"breakEnd":Jf(void 0,void 0,void 0,i.signalType);break}},FGe={addActor:xve,addMessage:Trn,addSignal:Jf,addLinks:IGe,addDetails:PGe,addProperties:OGe,autoWrap:JC,setWrap:Brn,enableSequenceNumbers:Orn,disableSequenceNumbers:Nrn,showSequenceNumbers:Prn,getMessages:_rn,getActors:Lrn,getCreatedActors:Mrn,getDestroyedActors:Drn,getActor:GR,getActorKeys:Irn,getActorProperty:Vrn,getAccTitle:Cp,getBoxes:Arn,getDiagramTitle:Ap,setDiagramTitle:cm,getConfig:()=>qt().sequence,clear:Frn,parseMessage:Rrn,parseBoxData:jrn,LINETYPE:KR,ARROWTYPE:$rn,PLACEMENT:zrn,addNote:DGe,setAccTitle:Bg,apply:BGe,setAccDescription:Sp,getAccDescription:_p,hasAtLeastOneBox:Crn,hasAtLeastOneBoxWithTitle:Srn},Urn=i=>`.actor { - stroke: ${i.actorBorder}; - fill: ${i.actorBkg}; +`,"getStyles"),Afe=cUe});var bO,uUe,wO,Lfe=M(()=>{"use strict";bO={CONTAINS:"contains",ARROW:"arrow"},uUe=o((t,e)=>{let r=t.append("defs").append("marker").attr("id",bO.CONTAINS+"_line_ending").attr("refX",0).attr("refY",e.line_height/2).attr("markerWidth",e.line_height).attr("markerHeight",e.line_height).attr("orient","auto").append("g");r.append("circle").attr("cx",e.line_height/2).attr("cy",e.line_height/2).attr("r",e.line_height/2).attr("fill","none"),r.append("line").attr("x1",0).attr("x2",e.line_height).attr("y1",e.line_height/2).attr("y2",e.line_height/2).attr("stroke-width",1),r.append("line").attr("y1",0).attr("y2",e.line_height).attr("x1",e.line_height/2).attr("x2",e.line_height/2).attr("stroke-width",1),t.append("defs").append("marker").attr("id",bO.ARROW+"_line_ending").attr("refX",e.line_height).attr("refY",.5*e.line_height).attr("markerWidth",e.line_height).attr("markerHeight",e.line_height).attr("orient","auto").append("path").attr("d",`M0,0 + L${e.line_height},${e.line_height/2} + M${e.line_height},${e.line_height/2} + L0,${e.line_height}`).attr("stroke-width",1)},"insertLineEndings"),wO={ReqMarkers:bO,insertLineEndings:uUe}});var hi,Dfe,Nfe,Rfe,Mfe,hUe,fUe,dUe,pUe,mUe,gUe,Kg,yUe,Ife,Ofe=M(()=>{"use strict";pr();Qv();Gs();Vt();ut();ai();fr();Lfe();hi={},Dfe=0,Nfe=o((t,e)=>t.insert("rect","#"+e).attr("class","req reqBox").attr("x",0).attr("y",0).attr("width",hi.rect_min_width+"px").attr("height",hi.rect_min_height+"px"),"newRectNode"),Rfe=o((t,e,r)=>{let n=hi.rect_min_width/2,i=t.append("text").attr("class","req reqLabel reqTitle").attr("id",e).attr("x",n).attr("y",hi.rect_padding).attr("dominant-baseline","hanging"),a=0;r.forEach(h=>{a==0?i.append("tspan").attr("text-anchor","middle").attr("x",hi.rect_min_width/2).attr("dy",0).text(h):i.append("tspan").attr("text-anchor","middle").attr("x",hi.rect_min_width/2).attr("dy",hi.line_height*.75).text(h),a++});let s=1.5*hi.rect_padding,l=a*hi.line_height*.75,u=s+l;return t.append("line").attr("class","req-title-line").attr("x1","0").attr("x2",hi.rect_min_width).attr("y1",u).attr("y2",u),{titleNode:i,y:u}},"newTitleNode"),Mfe=o((t,e,r,n)=>{let i=t.append("text").attr("class","req reqLabel").attr("id",e).attr("x",hi.rect_padding).attr("y",n).attr("dominant-baseline","hanging"),a=0,s=30,l=[];return r.forEach(u=>{let h=u.length;for(;h>s&&a<3;){let f=u.substring(0,s);u=u.substring(s,u.length),h=u.length,l[l.length]=f,a++}if(a==3){let f=l[l.length-1];l[l.length-1]=f.substring(0,f.length-4)+"..."}else l[l.length]=u;a=0}),l.forEach(u=>{i.append("tspan").attr("x",hi.rect_padding).attr("dy",hi.line_height).text(u)}),i},"newBodyNode"),hUe=o((t,e,r,n)=>{let i=e.node().getTotalLength(),a=e.node().getPointAtLength(i*.5),s="rel"+Dfe;Dfe++;let u=t.append("text").attr("class","req relationshipLabel").attr("id",s).attr("x",a.x).attr("y",a.y).attr("text-anchor","middle").attr("dominant-baseline","middle").text(n).node().getBBox();t.insert("rect","#"+s).attr("class","req reqLabelBox").attr("x",a.x-u.width/2).attr("y",a.y-u.height/2).attr("width",u.width).attr("height",u.height).attr("fill","white").attr("fill-opacity","85%")},"addEdgeLabel"),fUe=o(function(t,e,r,n,i){let a=r.edge(Kg(e.src),Kg(e.dst)),s=ns().x(function(u){return u.x}).y(function(u){return u.y}),l=t.insert("path","#"+n).attr("class","er relationshipLine").attr("d",s(a.points)).attr("fill","none");e.type==i.db.Relationships.CONTAINS?l.attr("marker-start","url("+qe.getUrl(hi.arrowMarkerAbsolute)+"#"+e.type+"_line_ending)"):(l.attr("stroke-dasharray","10,7"),l.attr("marker-end","url("+qe.getUrl(hi.arrowMarkerAbsolute)+"#"+wO.ReqMarkers.ARROW+"_line_ending)")),hUe(t,l,hi,`<<${e.type}>>`)},"drawRelationshipFromLayout"),dUe=o((t,e,r)=>{t.forEach((n,i)=>{i=Kg(i),Y.info("Added new requirement: ",i);let a=r.append("g").attr("id",i),s="req-"+i,l=Nfe(a,s),u=[],h=Rfe(a,i+"_title",[`<<${n.type}>>`,`${n.name}`]);u.push(h.titleNode);let f=Mfe(a,i+"_body",[`Id: ${n.id}`,`Text: ${n.text}`,`Risk: ${n.risk}`,`Verification: ${n.verifyMethod}`],h.y);u.push(f);let d=l.node().getBBox();e.setNode(i,{width:d.width,height:d.height,shape:"rect",id:i})})},"drawReqs"),pUe=o((t,e,r)=>{t.forEach((n,i)=>{let a=Kg(i),s=r.append("g").attr("id",a),l="element-"+a,u=Nfe(s,l),h=[],f=Rfe(s,l+"_title",["<>",`${i}`]);h.push(f.titleNode);let d=Mfe(s,l+"_body",[`Type: ${n.type||"Not Specified"}`,`Doc Ref: ${n.docRef||"None"}`],f.y);h.push(d);let p=u.node().getBBox();e.setNode(a,{width:p.width,height:p.height,shape:"rect",id:a})})},"drawElements"),mUe=o((t,e)=>(t.forEach(function(r){let n=Kg(r.src),i=Kg(r.dst);e.setEdge(n,i,{relationship:r})}),t),"addRelationships"),gUe=o(function(t,e){e.nodes().forEach(function(r){r!==void 0&&e.node(r)!==void 0&&(t.select("#"+r),t.select("#"+r).attr("transform","translate("+(e.node(r).x-e.node(r).width/2)+","+(e.node(r).y-e.node(r).height/2)+" )"))})},"adjustEntities"),Kg=o(t=>t.replace(/\s/g,"").replace(/\./g,"_"),"elementString"),yUe=o((t,e,r,n)=>{hi=pe().requirement;let i=hi.securityLevel,a;i==="sandbox"&&(a=Ve("#i"+e));let l=(i==="sandbox"?Ve(a.nodes()[0].contentDocument.body):Ve("body")).select(`[id='${e}']`);wO.insertLineEndings(l,hi);let u=new Ir({multigraph:!1,compound:!1,directed:!0}).setGraph({rankdir:hi.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel(function(){return{}}),h=n.db.getRequirements(),f=n.db.getElements(),d=n.db.getRelationships();dUe(h,u,l),pUe(f,u,l),mUe(d,u),Gu(u),gUe(l,u),d.forEach(function(v){fUe(l,v,u,e,n)});let p=hi.rect_padding,m=l.node().getBBox(),g=m.width+p*2,y=m.height+p*2;Zr(l,y,g,hi.useMaxWidth),l.attr("viewBox",`${m.x-p} ${m.y-p} ${g} ${y}`)},"draw"),Ife={draw:yUe}});var Pfe={};vr(Pfe,{diagram:()=>vUe});var vUe,Bfe=M(()=>{"use strict";Efe();Cfe();_fe();Ofe();vUe={parser:kfe,db:Sfe,renderer:Ife,styles:Afe}});var TO,Gfe,$fe=M(()=>{"use strict";TO=function(){var t=o(function(H,q,Q,ae){for(Q=Q||{},ae=H.length;ae--;Q[H[ae]]=q);return Q},"o"),e=[1,2],r=[1,3],n=[1,4],i=[2,4],a=[1,9],s=[1,11],l=[1,13],u=[1,14],h=[1,16],f=[1,17],d=[1,18],p=[1,24],m=[1,25],g=[1,26],y=[1,27],v=[1,28],x=[1,29],b=[1,30],w=[1,31],_=[1,32],T=[1,33],E=[1,34],L=[1,35],S=[1,36],A=[1,37],I=[1,38],D=[1,39],k=[1,41],R=[1,42],C=[1,43],O=[1,44],N=[1,45],P=[1,46],F=[1,4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,48,49,50,52,53,54,59,60,61,62,70],B=[4,5,16,50,52,53],G=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],z=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,49,50,52,53,54,59,60,61,62,70],W=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,48,50,52,53,54,59,60,61,62,70],Z=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,50,52,53,54,59,60,61,62,70],j=[68,69,70],oe=[1,122],K={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,SD:6,document:7,line:8,statement:9,box_section:10,box_line:11,participant_statement:12,create:13,box:14,restOfLine:15,end:16,signal:17,autonumber:18,NUM:19,off:20,activate:21,actor:22,deactivate:23,note_statement:24,links_statement:25,link_statement:26,properties_statement:27,details_statement:28,title:29,legacy_title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,loop:36,rect:37,opt:38,alt:39,else_sections:40,par:41,par_sections:42,par_over:43,critical:44,option_sections:45,break:46,option:47,and:48,else:49,participant:50,AS:51,participant_actor:52,destroy:53,note:54,placement:55,text2:56,over:57,actor_pair:58,links:59,link:60,properties:61,details:62,spaceList:63,",":64,left_of:65,right_of:66,signaltype:67,"+":68,"-":69,ACTOR:70,SOLID_OPEN_ARROW:71,DOTTED_OPEN_ARROW:72,SOLID_ARROW:73,BIDIRECTIONAL_SOLID_ARROW:74,DOTTED_ARROW:75,BIDIRECTIONAL_DOTTED_ARROW:76,SOLID_CROSS:77,DOTTED_CROSS:78,SOLID_POINT:79,DOTTED_POINT:80,TXT:81,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",6:"SD",13:"create",14:"box",15:"restOfLine",16:"end",18:"autonumber",19:"NUM",20:"off",21:"activate",23:"deactivate",29:"title",30:"legacy_title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"loop",37:"rect",38:"opt",39:"alt",41:"par",43:"par_over",44:"critical",46:"break",47:"option",48:"and",49:"else",50:"participant",51:"AS",52:"participant_actor",53:"destroy",54:"note",57:"over",59:"links",60:"link",61:"properties",62:"details",64:",",65:"left_of",66:"right_of",68:"+",69:"-",70:"ACTOR",71:"SOLID_OPEN_ARROW",72:"DOTTED_OPEN_ARROW",73:"SOLID_ARROW",74:"BIDIRECTIONAL_SOLID_ARROW",75:"DOTTED_ARROW",76:"BIDIRECTIONAL_DOTTED_ARROW",77:"SOLID_CROSS",78:"DOTTED_CROSS",79:"SOLID_POINT",80:"DOTTED_POINT",81:"TXT"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[10,0],[10,2],[11,2],[11,1],[11,1],[9,1],[9,2],[9,4],[9,2],[9,4],[9,3],[9,3],[9,2],[9,3],[9,3],[9,2],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[9,2],[9,2],[9,1],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[45,1],[45,4],[42,1],[42,4],[40,1],[40,4],[12,5],[12,3],[12,5],[12,3],[12,3],[24,4],[24,4],[25,3],[26,3],[27,3],[28,3],[63,2],[63,1],[58,3],[58,1],[55,1],[55,1],[17,5],[17,5],[17,4],[22,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[56,1]],performAction:o(function(q,Q,ae,ue,ce,te,Ne){var se=te.length-1;switch(ce){case 3:return ue.apply(te[se]),te[se];break;case 4:case 9:this.$=[];break;case 5:case 10:te[se-1].push(te[se]),this.$=te[se-1];break;case 6:case 7:case 11:case 12:this.$=te[se];break;case 8:case 13:this.$=[];break;case 15:te[se].type="createParticipant",this.$=te[se];break;case 16:te[se-1].unshift({type:"boxStart",boxData:ue.parseBoxData(te[se-2])}),te[se-1].push({type:"boxEnd",boxText:te[se-2]}),this.$=te[se-1];break;case 18:this.$={type:"sequenceIndex",sequenceIndex:Number(te[se-2]),sequenceIndexStep:Number(te[se-1]),sequenceVisible:!0,signalType:ue.LINETYPE.AUTONUMBER};break;case 19:this.$={type:"sequenceIndex",sequenceIndex:Number(te[se-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:ue.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:ue.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:ue.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"activeStart",signalType:ue.LINETYPE.ACTIVE_START,actor:te[se-1].actor};break;case 23:this.$={type:"activeEnd",signalType:ue.LINETYPE.ACTIVE_END,actor:te[se-1].actor};break;case 29:ue.setDiagramTitle(te[se].substring(6)),this.$=te[se].substring(6);break;case 30:ue.setDiagramTitle(te[se].substring(7)),this.$=te[se].substring(7);break;case 31:this.$=te[se].trim(),ue.setAccTitle(this.$);break;case 32:case 33:this.$=te[se].trim(),ue.setAccDescription(this.$);break;case 34:te[se-1].unshift({type:"loopStart",loopText:ue.parseMessage(te[se-2]),signalType:ue.LINETYPE.LOOP_START}),te[se-1].push({type:"loopEnd",loopText:te[se-2],signalType:ue.LINETYPE.LOOP_END}),this.$=te[se-1];break;case 35:te[se-1].unshift({type:"rectStart",color:ue.parseMessage(te[se-2]),signalType:ue.LINETYPE.RECT_START}),te[se-1].push({type:"rectEnd",color:ue.parseMessage(te[se-2]),signalType:ue.LINETYPE.RECT_END}),this.$=te[se-1];break;case 36:te[se-1].unshift({type:"optStart",optText:ue.parseMessage(te[se-2]),signalType:ue.LINETYPE.OPT_START}),te[se-1].push({type:"optEnd",optText:ue.parseMessage(te[se-2]),signalType:ue.LINETYPE.OPT_END}),this.$=te[se-1];break;case 37:te[se-1].unshift({type:"altStart",altText:ue.parseMessage(te[se-2]),signalType:ue.LINETYPE.ALT_START}),te[se-1].push({type:"altEnd",signalType:ue.LINETYPE.ALT_END}),this.$=te[se-1];break;case 38:te[se-1].unshift({type:"parStart",parText:ue.parseMessage(te[se-2]),signalType:ue.LINETYPE.PAR_START}),te[se-1].push({type:"parEnd",signalType:ue.LINETYPE.PAR_END}),this.$=te[se-1];break;case 39:te[se-1].unshift({type:"parStart",parText:ue.parseMessage(te[se-2]),signalType:ue.LINETYPE.PAR_OVER_START}),te[se-1].push({type:"parEnd",signalType:ue.LINETYPE.PAR_END}),this.$=te[se-1];break;case 40:te[se-1].unshift({type:"criticalStart",criticalText:ue.parseMessage(te[se-2]),signalType:ue.LINETYPE.CRITICAL_START}),te[se-1].push({type:"criticalEnd",signalType:ue.LINETYPE.CRITICAL_END}),this.$=te[se-1];break;case 41:te[se-1].unshift({type:"breakStart",breakText:ue.parseMessage(te[se-2]),signalType:ue.LINETYPE.BREAK_START}),te[se-1].push({type:"breakEnd",optText:ue.parseMessage(te[se-2]),signalType:ue.LINETYPE.BREAK_END}),this.$=te[se-1];break;case 43:this.$=te[se-3].concat([{type:"option",optionText:ue.parseMessage(te[se-1]),signalType:ue.LINETYPE.CRITICAL_OPTION},te[se]]);break;case 45:this.$=te[se-3].concat([{type:"and",parText:ue.parseMessage(te[se-1]),signalType:ue.LINETYPE.PAR_AND},te[se]]);break;case 47:this.$=te[se-3].concat([{type:"else",altText:ue.parseMessage(te[se-1]),signalType:ue.LINETYPE.ALT_ELSE},te[se]]);break;case 48:te[se-3].draw="participant",te[se-3].type="addParticipant",te[se-3].description=ue.parseMessage(te[se-1]),this.$=te[se-3];break;case 49:te[se-1].draw="participant",te[se-1].type="addParticipant",this.$=te[se-1];break;case 50:te[se-3].draw="actor",te[se-3].type="addParticipant",te[se-3].description=ue.parseMessage(te[se-1]),this.$=te[se-3];break;case 51:te[se-1].draw="actor",te[se-1].type="addParticipant",this.$=te[se-1];break;case 52:te[se-1].type="destroyParticipant",this.$=te[se-1];break;case 53:this.$=[te[se-1],{type:"addNote",placement:te[se-2],actor:te[se-1].actor,text:te[se]}];break;case 54:te[se-2]=[].concat(te[se-1],te[se-1]).slice(0,2),te[se-2][0]=te[se-2][0].actor,te[se-2][1]=te[se-2][1].actor,this.$=[te[se-1],{type:"addNote",placement:ue.PLACEMENT.OVER,actor:te[se-2].slice(0,2),text:te[se]}];break;case 55:this.$=[te[se-1],{type:"addLinks",actor:te[se-1].actor,text:te[se]}];break;case 56:this.$=[te[se-1],{type:"addALink",actor:te[se-1].actor,text:te[se]}];break;case 57:this.$=[te[se-1],{type:"addProperties",actor:te[se-1].actor,text:te[se]}];break;case 58:this.$=[te[se-1],{type:"addDetails",actor:te[se-1].actor,text:te[se]}];break;case 61:this.$=[te[se-2],te[se]];break;case 62:this.$=te[se];break;case 63:this.$=ue.PLACEMENT.LEFTOF;break;case 64:this.$=ue.PLACEMENT.RIGHTOF;break;case 65:this.$=[te[se-4],te[se-1],{type:"addMessage",from:te[se-4].actor,to:te[se-1].actor,signalType:te[se-3],msg:te[se],activate:!0},{type:"activeStart",signalType:ue.LINETYPE.ACTIVE_START,actor:te[se-1].actor}];break;case 66:this.$=[te[se-4],te[se-1],{type:"addMessage",from:te[se-4].actor,to:te[se-1].actor,signalType:te[se-3],msg:te[se]},{type:"activeEnd",signalType:ue.LINETYPE.ACTIVE_END,actor:te[se-4].actor}];break;case 67:this.$=[te[se-3],te[se-1],{type:"addMessage",from:te[se-3].actor,to:te[se-1].actor,signalType:te[se-2],msg:te[se]}];break;case 68:this.$={type:"addParticipant",actor:te[se]};break;case 69:this.$=ue.LINETYPE.SOLID_OPEN;break;case 70:this.$=ue.LINETYPE.DOTTED_OPEN;break;case 71:this.$=ue.LINETYPE.SOLID;break;case 72:this.$=ue.LINETYPE.BIDIRECTIONAL_SOLID;break;case 73:this.$=ue.LINETYPE.DOTTED;break;case 74:this.$=ue.LINETYPE.BIDIRECTIONAL_DOTTED;break;case 75:this.$=ue.LINETYPE.SOLID_CROSS;break;case 76:this.$=ue.LINETYPE.DOTTED_CROSS;break;case 77:this.$=ue.LINETYPE.SOLID_POINT;break;case 78:this.$=ue.LINETYPE.DOTTED_POINT;break;case 79:this.$=ue.parseMessage(te[se].trim().substring(1));break}},"anonymous"),table:[{3:1,4:e,5:r,6:n},{1:[3]},{3:5,4:e,5:r,6:n},{3:6,4:e,5:r,6:n},t([1,4,5,13,14,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],i,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:s,8:8,9:10,12:12,13:l,14:u,17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:_,41:T,43:E,44:L,46:S,50:A,52:I,53:D,54:k,59:R,60:C,61:O,62:N,70:P},t(F,[2,5]),{9:47,12:12,13:l,14:u,17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:_,41:T,43:E,44:L,46:S,50:A,52:I,53:D,54:k,59:R,60:C,61:O,62:N,70:P},t(F,[2,7]),t(F,[2,8]),t(F,[2,14]),{12:48,50:A,52:I,53:D},{15:[1,49]},{5:[1,50]},{5:[1,53],19:[1,51],20:[1,52]},{22:54,70:P},{22:55,70:P},{5:[1,56]},{5:[1,57]},{5:[1,58]},{5:[1,59]},{5:[1,60]},t(F,[2,29]),t(F,[2,30]),{32:[1,61]},{34:[1,62]},t(F,[2,33]),{15:[1,63]},{15:[1,64]},{15:[1,65]},{15:[1,66]},{15:[1,67]},{15:[1,68]},{15:[1,69]},{15:[1,70]},{22:71,70:P},{22:72,70:P},{22:73,70:P},{67:74,71:[1,75],72:[1,76],73:[1,77],74:[1,78],75:[1,79],76:[1,80],77:[1,81],78:[1,82],79:[1,83],80:[1,84]},{55:85,57:[1,86],65:[1,87],66:[1,88]},{22:89,70:P},{22:90,70:P},{22:91,70:P},{22:92,70:P},t([5,51,64,71,72,73,74,75,76,77,78,79,80,81],[2,68]),t(F,[2,6]),t(F,[2,15]),t(B,[2,9],{10:93}),t(F,[2,17]),{5:[1,95],19:[1,94]},{5:[1,96]},t(F,[2,21]),{5:[1,97]},{5:[1,98]},t(F,[2,24]),t(F,[2,25]),t(F,[2,26]),t(F,[2,27]),t(F,[2,28]),t(F,[2,31]),t(F,[2,32]),t(G,i,{7:99}),t(G,i,{7:100}),t(G,i,{7:101}),t(z,i,{40:102,7:103}),t(W,i,{42:104,7:105}),t(W,i,{7:105,42:106}),t(Z,i,{45:107,7:108}),t(G,i,{7:109}),{5:[1,111],51:[1,110]},{5:[1,113],51:[1,112]},{5:[1,114]},{22:117,68:[1,115],69:[1,116],70:P},t(j,[2,69]),t(j,[2,70]),t(j,[2,71]),t(j,[2,72]),t(j,[2,73]),t(j,[2,74]),t(j,[2,75]),t(j,[2,76]),t(j,[2,77]),t(j,[2,78]),{22:118,70:P},{22:120,58:119,70:P},{70:[2,63]},{70:[2,64]},{56:121,81:oe},{56:123,81:oe},{56:124,81:oe},{56:125,81:oe},{4:[1,128],5:[1,130],11:127,12:129,16:[1,126],50:A,52:I,53:D},{5:[1,131]},t(F,[2,19]),t(F,[2,20]),t(F,[2,22]),t(F,[2,23]),{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,132],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:_,41:T,43:E,44:L,46:S,50:A,52:I,53:D,54:k,59:R,60:C,61:O,62:N,70:P},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,133],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:_,41:T,43:E,44:L,46:S,50:A,52:I,53:D,54:k,59:R,60:C,61:O,62:N,70:P},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,134],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:_,41:T,43:E,44:L,46:S,50:A,52:I,53:D,54:k,59:R,60:C,61:O,62:N,70:P},{16:[1,135]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,46],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:_,41:T,43:E,44:L,46:S,49:[1,136],50:A,52:I,53:D,54:k,59:R,60:C,61:O,62:N,70:P},{16:[1,137]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,44],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:_,41:T,43:E,44:L,46:S,48:[1,138],50:A,52:I,53:D,54:k,59:R,60:C,61:O,62:N,70:P},{16:[1,139]},{16:[1,140]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,42],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:_,41:T,43:E,44:L,46:S,47:[1,141],50:A,52:I,53:D,54:k,59:R,60:C,61:O,62:N,70:P},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,142],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:_,41:T,43:E,44:L,46:S,50:A,52:I,53:D,54:k,59:R,60:C,61:O,62:N,70:P},{15:[1,143]},t(F,[2,49]),{15:[1,144]},t(F,[2,51]),t(F,[2,52]),{22:145,70:P},{22:146,70:P},{56:147,81:oe},{56:148,81:oe},{56:149,81:oe},{64:[1,150],81:[2,62]},{5:[2,55]},{5:[2,79]},{5:[2,56]},{5:[2,57]},{5:[2,58]},t(F,[2,16]),t(B,[2,10]),{12:151,50:A,52:I,53:D},t(B,[2,12]),t(B,[2,13]),t(F,[2,18]),t(F,[2,34]),t(F,[2,35]),t(F,[2,36]),t(F,[2,37]),{15:[1,152]},t(F,[2,38]),{15:[1,153]},t(F,[2,39]),t(F,[2,40]),{15:[1,154]},t(F,[2,41]),{5:[1,155]},{5:[1,156]},{56:157,81:oe},{56:158,81:oe},{5:[2,67]},{5:[2,53]},{5:[2,54]},{22:159,70:P},t(B,[2,11]),t(z,i,{7:103,40:160}),t(W,i,{7:105,42:161}),t(Z,i,{7:108,45:162}),t(F,[2,48]),t(F,[2,50]),{5:[2,65]},{5:[2,66]},{81:[2,61]},{16:[2,47]},{16:[2,45]},{16:[2,43]}],defaultActions:{5:[2,1],6:[2,2],87:[2,63],88:[2,64],121:[2,55],122:[2,79],123:[2,56],124:[2,57],125:[2,58],147:[2,67],148:[2,53],149:[2,54],157:[2,65],158:[2,66],159:[2,61],160:[2,47],161:[2,45],162:[2,43]},parseError:o(function(q,Q){if(Q.recoverable)this.trace(q);else{var ae=new Error(q);throw ae.hash=Q,ae}},"parseError"),parse:o(function(q){var Q=this,ae=[0],ue=[],ce=[null],te=[],Ne=this.table,se="",ke=0,Re=0,Ce=0,Pe=2,Ie=1,$e=te.slice.call(arguments,1),ye=Object.create(this.lexer),X={yy:{}};for(var fe in this.yy)Object.prototype.hasOwnProperty.call(this.yy,fe)&&(X.yy[fe]=this.yy[fe]);ye.setInput(q,X.yy),X.yy.lexer=ye,X.yy.parser=this,typeof ye.yylloc>"u"&&(ye.yylloc={});var he=ye.yylloc;te.push(he);var ge=ye.options&&ye.options.ranges;typeof X.yy.parseError=="function"?this.parseError=X.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ne(kt){ae.length=ae.length-2*kt,ce.length=ce.length-kt,te.length=te.length-kt}o(ne,"popStack");function ve(){var kt;return kt=ue.pop()||ye.lex()||Ie,typeof kt!="number"&&(kt instanceof Array&&(ue=kt,kt=ue.pop()),kt=Q.symbols_[kt]||kt),kt}o(ve,"lex");for(var U,Te,ie,Ee,Ae,Ge,Be={},me,He,Oe,et;;){if(ie=ae[ae.length-1],this.defaultActions[ie]?Ee=this.defaultActions[ie]:((U===null||typeof U>"u")&&(U=ve()),Ee=Ne[ie]&&Ne[ie][U]),typeof Ee>"u"||!Ee.length||!Ee[0]){var bt="";et=[];for(me in Ne[ie])this.terminals_[me]&&me>Pe&&et.push("'"+this.terminals_[me]+"'");ye.showPosition?bt="Parse error on line "+(ke+1)+`: +`+ye.showPosition()+` +Expecting `+et.join(", ")+", got '"+(this.terminals_[U]||U)+"'":bt="Parse error on line "+(ke+1)+": Unexpected "+(U==Ie?"end of input":"'"+(this.terminals_[U]||U)+"'"),this.parseError(bt,{text:ye.match,token:this.terminals_[U]||U,line:ye.yylineno,loc:he,expected:et})}if(Ee[0]instanceof Array&&Ee.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ie+", token: "+U);switch(Ee[0]){case 1:ae.push(U),ce.push(ye.yytext),te.push(ye.yylloc),ae.push(Ee[1]),U=null,Te?(U=Te,Te=null):(Re=ye.yyleng,se=ye.yytext,ke=ye.yylineno,he=ye.yylloc,Ce>0&&Ce--);break;case 2:if(He=this.productions_[Ee[1]][1],Be.$=ce[ce.length-He],Be._$={first_line:te[te.length-(He||1)].first_line,last_line:te[te.length-1].last_line,first_column:te[te.length-(He||1)].first_column,last_column:te[te.length-1].last_column},ge&&(Be._$.range=[te[te.length-(He||1)].range[0],te[te.length-1].range[1]]),Ge=this.performAction.apply(Be,[se,Re,ke,X.yy,Ee[1],ce,te].concat($e)),typeof Ge<"u")return Ge;He&&(ae=ae.slice(0,-1*He*2),ce=ce.slice(0,-1*He),te=te.slice(0,-1*He)),ae.push(this.productions_[Ee[1]][0]),ce.push(Be.$),te.push(Be._$),Oe=Ne[ae[ae.length-2]][ae[ae.length-1]],ae.push(Oe);break;case 3:return!0}}return!0},"parse")},ee=function(){var H={EOF:1,parseError:o(function(Q,ae){if(this.yy.parser)this.yy.parser.parseError(Q,ae);else throw new Error(Q)},"parseError"),setInput:o(function(q,Q){return this.yy=Q||this.yy||{},this._input=q,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var q=this._input[0];this.yytext+=q,this.yyleng++,this.offset++,this.match+=q,this.matched+=q;var Q=q.match(/(?:\r\n?|\n).*/g);return Q?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),q},"input"),unput:o(function(q){var Q=q.length,ae=q.split(/(?:\r\n?|\n)/g);this._input=q+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Q),this.offset-=Q;var ue=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ae.length-1&&(this.yylineno-=ae.length-1);var ce=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ae?(ae.length===ue.length?this.yylloc.first_column:0)+ue[ue.length-ae.length].length-ae[0].length:this.yylloc.first_column-Q},this.options.ranges&&(this.yylloc.range=[ce[0],ce[0]+this.yyleng-Q]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(q){this.unput(this.match.slice(q))},"less"),pastInput:o(function(){var q=this.matched.substr(0,this.matched.length-this.match.length);return(q.length>20?"...":"")+q.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var q=this.match;return q.length<20&&(q+=this._input.substr(0,20-q.length)),(q.substr(0,20)+(q.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var q=this.pastInput(),Q=new Array(q.length+1).join("-");return q+this.upcomingInput()+` +`+Q+"^"},"showPosition"),test_match:o(function(q,Q){var ae,ue,ce;if(this.options.backtrack_lexer&&(ce={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(ce.yylloc.range=this.yylloc.range.slice(0))),ue=q[0].match(/(?:\r\n?|\n).*/g),ue&&(this.yylineno+=ue.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:ue?ue[ue.length-1].length-ue[ue.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+q[0].length},this.yytext+=q[0],this.match+=q[0],this.matches=q,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(q[0].length),this.matched+=q[0],ae=this.performAction.call(this,this.yy,this,Q,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ae)return ae;if(this._backtrack){for(var te in ce)this[te]=ce[te];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var q,Q,ae,ue;this._more||(this.yytext="",this.match="");for(var ce=this._currentRules(),te=0;teQ[0].length)){if(Q=ae,ue=te,this.options.backtrack_lexer){if(q=this.test_match(ae,ce[te]),q!==!1)return q;if(this._backtrack){Q=!1;continue}else return!1}else if(!this.options.flex)break}return Q?(q=this.test_match(Q,ce[ue]),q!==!1?q:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var Q=this.next();return Q||this.lex()},"lex"),begin:o(function(Q){this.conditionStack.push(Q)},"begin"),popState:o(function(){var Q=this.conditionStack.length-1;return Q>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(Q){return Q=this.conditionStack.length-1-Math.abs(Q||0),Q>=0?this.conditionStack[Q]:"INITIAL"},"topState"),pushState:o(function(Q){this.begin(Q)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(Q,ae,ue,ce){var te=ce;switch(ue){case 0:return 5;case 1:break;case 2:break;case 3:break;case 4:break;case 5:break;case 6:return 19;case 7:return this.begin("LINE"),14;break;case 8:return this.begin("ID"),50;break;case 9:return this.begin("ID"),52;break;case 10:return 13;case 11:return this.begin("ID"),53;break;case 12:return ae.yytext=ae.yytext.trim(),this.begin("ALIAS"),70;break;case 13:return this.popState(),this.popState(),this.begin("LINE"),51;break;case 14:return this.popState(),this.popState(),5;break;case 15:return this.begin("LINE"),36;break;case 16:return this.begin("LINE"),37;break;case 17:return this.begin("LINE"),38;break;case 18:return this.begin("LINE"),39;break;case 19:return this.begin("LINE"),49;break;case 20:return this.begin("LINE"),41;break;case 21:return this.begin("LINE"),43;break;case 22:return this.begin("LINE"),48;break;case 23:return this.begin("LINE"),44;break;case 24:return this.begin("LINE"),47;break;case 25:return this.begin("LINE"),46;break;case 26:return this.popState(),15;break;case 27:return 16;case 28:return 65;case 29:return 66;case 30:return 59;case 31:return 60;case 32:return 61;case 33:return 62;case 34:return 57;case 35:return 54;case 36:return this.begin("ID"),21;break;case 37:return this.begin("ID"),23;break;case 38:return 29;case 39:return 30;case 40:return this.begin("acc_title"),31;break;case 41:return this.popState(),"acc_title_value";break;case 42:return this.begin("acc_descr"),33;break;case 43:return this.popState(),"acc_descr_value";break;case 44:this.begin("acc_descr_multiline");break;case 45:this.popState();break;case 46:return"acc_descr_multiline_value";case 47:return 6;case 48:return 18;case 49:return 20;case 50:return 64;case 51:return 5;case 52:return ae.yytext=ae.yytext.trim(),70;break;case 53:return 73;case 54:return 74;case 55:return 75;case 56:return 76;case 57:return 71;case 58:return 72;case 59:return 77;case 60:return 78;case 61:return 79;case 62:return 80;case 63:return 81;case 64:return 68;case 65:return 69;case 66:return 5;case 67:return"INVALID"}},"anonymous"),rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[0-9]+(?=[ \n]+))/i,/^(?:box\b)/i,/^(?:participant\b)/i,/^(?:actor\b)/i,/^(?:create\b)/i,/^(?:destroy\b)/i,/^(?:[^\<->\->:\n,;]+?([\-]*[^\<->\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:par_over\b)/i,/^(?:and\b)/i,/^(?:critical\b)/i,/^(?:option\b)/i,/^(?:break\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:links\b)/i,/^(?:link\b)/i,/^(?:properties\b)/i,/^(?:details\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:title:\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:off\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\<->\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\<->\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:<<->>)/i,/^(?:-->>)/i,/^(?:<<-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[45,46],inclusive:!1},acc_descr:{rules:[43],inclusive:!1},acc_title:{rules:[41],inclusive:!1},ID:{rules:[2,3,12],inclusive:!1},ALIAS:{rules:[2,3,13,14],inclusive:!1},LINE:{rules:[2,3,26],inclusive:!1},INITIAL:{rules:[0,1,3,4,5,6,7,8,9,10,11,15,16,17,18,19,20,21,22,23,24,25,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,44,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67],inclusive:!0}}};return H}();K.lexer=ee;function J(){this.yy={}}return o(J,"Parser"),J.prototype=K,K.Parser=J,new J}();TO.parser=TO;Gfe=TO});function EO(t,e){if(t.links==null)t.links=e;else for(let r in e)t.links[r]=e[r]}function Yfe(t,e){if(t.properties==null)t.properties=e;else for(let r in e)t.properties[r]=e[r]}function UUe(){$t.records.currentBox=void 0}var $t,TUe,kO,kUe,EUe,wi,SUe,CUe,AUe,_Ue,LUe,DUe,NUe,Ox,RUe,MUe,IUe,OUe,PUe,Vfe,M0,BUe,FUe,zUe,Ix,GUe,$Ue,Ufe,Hfe,VUe,Wfe,qfe,HUe,Xfe,SO,jfe=M(()=>{"use strict";Vt();ut();dE();fr();Ai();$t=new vf(()=>({prevActor:void 0,actors:new Map,createdActors:new Map,destroyedActors:new Map,boxes:[],messages:[],notes:[],sequenceNumbersEnabled:!1,wrapEnabled:void 0,currentBox:void 0,lastCreated:void 0,lastDestroyed:void 0})),TUe=o(function(t){$t.records.boxes.push({name:t.text,wrap:t.wrap??M0(),fill:t.color,actorKeys:[]}),$t.records.currentBox=$t.records.boxes.slice(-1)[0]},"addBox"),kO=o(function(t,e,r,n){let i=$t.records.currentBox,a=$t.records.actors.get(t);if(a){if($t.records.currentBox&&a.box&&$t.records.currentBox!==a.box)throw new Error(`A same participant should only be defined in one Box: ${a.name} can't be in '${a.box.name}' and in '${$t.records.currentBox.name}' at the same time.`);if(i=a.box?a.box:$t.records.currentBox,a.box=i,a&&e===a.name&&r==null)return}if(r?.text==null&&(r={text:e,type:n}),(n==null||r.text==null)&&(r={text:e,type:n}),$t.records.actors.set(t,{box:i,name:e,description:r.text,wrap:r.wrap??M0(),prevActor:$t.records.prevActor,links:{},properties:{},actorCnt:null,rectData:null,type:n??"participant"}),$t.records.prevActor){let s=$t.records.actors.get($t.records.prevActor);s&&(s.nextActor=t)}$t.records.currentBox&&$t.records.currentBox.actorKeys.push(t),$t.records.prevActor=t},"addActor"),kUe=o(t=>{let e,r=0;if(!t)return 0;for(e=0;e<$t.records.messages.length;e++)$t.records.messages[e].type===Ix.ACTIVE_START&&$t.records.messages[e].from===t&&r++,$t.records.messages[e].type===Ix.ACTIVE_END&&$t.records.messages[e].from===t&&r--;return r},"activationCount"),EUe=o(function(t,e,r,n){$t.records.messages.push({from:t,to:e,message:r.text,wrap:r.wrap??M0(),answer:n})},"addMessage"),wi=o(function(t,e,r,n,i=!1){if(n===Ix.ACTIVE_END&&kUe(t??"")<1){let s=new Error("Trying to inactivate an inactive participant ("+t+")");throw s.hash={text:"->>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},s}return $t.records.messages.push({from:t,to:e,message:r?.text??"",wrap:r?.wrap??M0(),type:n,activate:i}),!0},"addSignal"),SUe=o(function(){return $t.records.boxes.length>0},"hasAtLeastOneBox"),CUe=o(function(){return $t.records.boxes.some(t=>t.name)},"hasAtLeastOneBoxWithTitle"),AUe=o(function(){return $t.records.messages},"getMessages"),_Ue=o(function(){return $t.records.boxes},"getBoxes"),LUe=o(function(){return $t.records.actors},"getActors"),DUe=o(function(){return $t.records.createdActors},"getCreatedActors"),NUe=o(function(){return $t.records.destroyedActors},"getDestroyedActors"),Ox=o(function(t){return $t.records.actors.get(t)},"getActor"),RUe=o(function(){return[...$t.records.actors.keys()]},"getActorKeys"),MUe=o(function(){$t.records.sequenceNumbersEnabled=!0},"enableSequenceNumbers"),IUe=o(function(){$t.records.sequenceNumbersEnabled=!1},"disableSequenceNumbers"),OUe=o(()=>$t.records.sequenceNumbersEnabled,"showSequenceNumbers"),PUe=o(function(t){$t.records.wrapEnabled=t},"setWrap"),Vfe=o(t=>{if(t===void 0)return{};t=t.trim();let e=/^:?wrap:/.exec(t)!==null?!0:/^:?nowrap:/.exec(t)!==null?!1:void 0;return{cleanedText:(e===void 0?t:t.replace(/^:?(?:no)?wrap:/,"")).trim(),wrap:e}},"extractWrap"),M0=o(()=>$t.records.wrapEnabled!==void 0?$t.records.wrapEnabled:pe().sequence?.wrap??!1,"autoWrap"),BUe=o(function(){$t.reset(),Lr()},"clear"),FUe=o(function(t){let e=t.trim(),{wrap:r,cleanedText:n}=Vfe(e),i={text:n,wrap:r};return Y.debug(`parseMessage: ${JSON.stringify(i)}`),i},"parseMessage"),zUe=o(function(t){let e=/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/.exec(t),r=e?.[1]?e[1].trim():"transparent",n=e?.[2]?e[2].trim():void 0;if(window?.CSS)window.CSS.supports("color",r)||(r="transparent",n=t.trim());else{let s=new Option().style;s.color=r,s.color!==r&&(r="transparent",n=t.trim())}let{wrap:i,cleanedText:a}=Vfe(n);return{text:a?kr(a,pe()):void 0,color:r,wrap:i}},"parseBoxData"),Ix={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25,AUTONUMBER:26,CRITICAL_START:27,CRITICAL_OPTION:28,CRITICAL_END:29,BREAK_START:30,BREAK_END:31,PAR_OVER_START:32,BIDIRECTIONAL_SOLID:33,BIDIRECTIONAL_DOTTED:34},GUe={FILLED:0,OPEN:1},$Ue={LEFTOF:0,RIGHTOF:1,OVER:2},Ufe=o(function(t,e,r){let n={actor:t,placement:e,message:r.text,wrap:r.wrap??M0()},i=[].concat(t,t);$t.records.notes.push(n),$t.records.messages.push({from:i[0],to:i[1],message:r.text,wrap:r.wrap??M0(),type:Ix.NOTE,placement:e})},"addNote"),Hfe=o(function(t,e){let r=Ox(t);try{let n=kr(e.text,pe());n=n.replace(/&/g,"&"),n=n.replace(/=/g,"=");let i=JSON.parse(n);EO(r,i)}catch(n){Y.error("error while parsing actor link text",n)}},"addLinks"),VUe=o(function(t,e){let r=Ox(t);try{let n={},i=kr(e.text,pe()),a=i.indexOf("@");i=i.replace(/&/g,"&"),i=i.replace(/=/g,"=");let s=i.slice(0,a-1).trim(),l=i.slice(a+1).trim();n[s]=l,EO(r,n)}catch(n){Y.error("error while parsing actor link text",n)}},"addALink");o(EO,"insertLinks");Wfe=o(function(t,e){let r=Ox(t);try{let n=kr(e.text,pe()),i=JSON.parse(n);Yfe(r,i)}catch(n){Y.error("error while parsing actor properties text",n)}},"addProperties");o(Yfe,"insertProperties");o(UUe,"boxEnd");qfe=o(function(t,e){let r=Ox(t),n=document.getElementById(e.text);try{let i=n.innerHTML,a=JSON.parse(i);a.properties&&Yfe(r,a.properties),a.links&&EO(r,a.links)}catch(i){Y.error("error while parsing actor details text",i)}},"addDetails"),HUe=o(function(t,e){if(t?.properties!==void 0)return t.properties[e]},"getActorProperty"),Xfe=o(function(t){if(Array.isArray(t))t.forEach(function(e){Xfe(e)});else switch(t.type){case"sequenceIndex":$t.records.messages.push({from:void 0,to:void 0,message:{start:t.sequenceIndex,step:t.sequenceIndexStep,visible:t.sequenceVisible},wrap:!1,type:t.signalType});break;case"addParticipant":kO(t.actor,t.actor,t.description,t.draw);break;case"createParticipant":if($t.records.actors.has(t.actor))throw new Error("It is not possible to have actors with the same id, even if one is destroyed before the next is created. Use 'AS' aliases to simulate the behavior");$t.records.lastCreated=t.actor,kO(t.actor,t.actor,t.description,t.draw),$t.records.createdActors.set(t.actor,$t.records.messages.length);break;case"destroyParticipant":$t.records.lastDestroyed=t.actor,$t.records.destroyedActors.set(t.actor,$t.records.messages.length);break;case"activeStart":wi(t.actor,void 0,void 0,t.signalType);break;case"activeEnd":wi(t.actor,void 0,void 0,t.signalType);break;case"addNote":Ufe(t.actor,t.placement,t.text);break;case"addLinks":Hfe(t.actor,t.text);break;case"addALink":VUe(t.actor,t.text);break;case"addProperties":Wfe(t.actor,t.text);break;case"addDetails":qfe(t.actor,t.text);break;case"addMessage":if($t.records.lastCreated){if(t.to!==$t.records.lastCreated)throw new Error("The created participant "+$t.records.lastCreated.name+" does not have an associated creating message after its declaration. Please check the sequence diagram.");$t.records.lastCreated=void 0}else if($t.records.lastDestroyed){if(t.to!==$t.records.lastDestroyed&&t.from!==$t.records.lastDestroyed)throw new Error("The destroyed participant "+$t.records.lastDestroyed.name+" does not have an associated destroying message after its declaration. Please check the sequence diagram.");$t.records.lastDestroyed=void 0}wi(t.from,t.to,t.msg,t.signalType,t.activate);break;case"boxStart":TUe(t.boxData);break;case"boxEnd":UUe();break;case"loopStart":wi(void 0,void 0,t.loopText,t.signalType);break;case"loopEnd":wi(void 0,void 0,void 0,t.signalType);break;case"rectStart":wi(void 0,void 0,t.color,t.signalType);break;case"rectEnd":wi(void 0,void 0,void 0,t.signalType);break;case"optStart":wi(void 0,void 0,t.optText,t.signalType);break;case"optEnd":wi(void 0,void 0,void 0,t.signalType);break;case"altStart":wi(void 0,void 0,t.altText,t.signalType);break;case"else":wi(void 0,void 0,t.altText,t.signalType);break;case"altEnd":wi(void 0,void 0,void 0,t.signalType);break;case"setAccTitle":Mr(t.text);break;case"parStart":wi(void 0,void 0,t.parText,t.signalType);break;case"and":wi(void 0,void 0,t.parText,t.signalType);break;case"parEnd":wi(void 0,void 0,void 0,t.signalType);break;case"criticalStart":wi(void 0,void 0,t.criticalText,t.signalType);break;case"option":wi(void 0,void 0,t.optionText,t.signalType);break;case"criticalEnd":wi(void 0,void 0,void 0,t.signalType);break;case"breakStart":wi(void 0,void 0,t.breakText,t.signalType);break;case"breakEnd":wi(void 0,void 0,void 0,t.signalType);break}},"apply"),SO={addActor:kO,addMessage:EUe,addSignal:wi,addLinks:Hfe,addDetails:qfe,addProperties:Wfe,autoWrap:M0,setWrap:PUe,enableSequenceNumbers:MUe,disableSequenceNumbers:IUe,showSequenceNumbers:OUe,getMessages:AUe,getActors:LUe,getCreatedActors:DUe,getDestroyedActors:NUe,getActor:Ox,getActorKeys:RUe,getActorProperty:HUe,getAccTitle:Br,getBoxes:_Ue,getDiagramTitle:Jr,setDiagramTitle:cn,getConfig:o(()=>pe().sequence,"getConfig"),clear:BUe,parseMessage:FUe,parseBoxData:zUe,LINETYPE:Ix,ARROWTYPE:GUe,PLACEMENT:$Ue,addNote:Ufe,setAccTitle:Mr,apply:Xfe,setAccDescription:Fr,getAccDescription:zr,hasAtLeastOneBox:SUe,hasAtLeastOneBoxWithTitle:CUe}});var WUe,Kfe,Qfe=M(()=>{"use strict";WUe=o(t=>`.actor { + stroke: ${t.actorBorder}; + fill: ${t.actorBkg}; } text.actor > tspan { - fill: ${i.actorTextColor}; + fill: ${t.actorTextColor}; stroke: none; } .actor-line { - stroke: ${i.actorLineColor}; + stroke: ${t.actorLineColor}; } .messageLine0 { stroke-width: 1.5; stroke-dasharray: none; - stroke: ${i.signalColor}; + stroke: ${t.signalColor}; } .messageLine1 { stroke-width: 1.5; stroke-dasharray: 2, 2; - stroke: ${i.signalColor}; + stroke: ${t.signalColor}; } #arrowhead path { - fill: ${i.signalColor}; - stroke: ${i.signalColor}; + fill: ${t.signalColor}; + stroke: ${t.signalColor}; } .sequenceNumber { - fill: ${i.sequenceNumberColor}; + fill: ${t.sequenceNumberColor}; } #sequencenumber { - fill: ${i.signalColor}; + fill: ${t.signalColor}; } #crosshead path { - fill: ${i.signalColor}; - stroke: ${i.signalColor}; + fill: ${t.signalColor}; + stroke: ${t.signalColor}; } .messageText { - fill: ${i.signalTextColor}; + fill: ${t.signalTextColor}; stroke: none; } .labelBox { - stroke: ${i.labelBoxBorderColor}; - fill: ${i.labelBoxBkgColor}; + stroke: ${t.labelBoxBorderColor}; + fill: ${t.labelBoxBkgColor}; } .labelText, .labelText > tspan { - fill: ${i.labelTextColor}; + fill: ${t.labelTextColor}; stroke: none; } .loopText, .loopText > tspan { - fill: ${i.loopTextColor}; + fill: ${t.loopTextColor}; stroke: none; } .loopLine { stroke-width: 2px; stroke-dasharray: 2, 2; - stroke: ${i.labelBoxBorderColor}; - fill: ${i.labelBoxBorderColor}; + stroke: ${t.labelBoxBorderColor}; + fill: ${t.labelBoxBorderColor}; } .note { //stroke: #decc93; - stroke: ${i.noteBorderColor}; - fill: ${i.noteBkgColor}; + stroke: ${t.noteBorderColor}; + fill: ${t.noteBkgColor}; } .noteText, .noteText > tspan { - fill: ${i.noteTextColor}; + fill: ${t.noteTextColor}; stroke: none; } .activation0 { - fill: ${i.activationBkgColor}; - stroke: ${i.activationBorderColor}; + fill: ${t.activationBkgColor}; + stroke: ${t.activationBorderColor}; } .activation1 { - fill: ${i.activationBkgColor}; - stroke: ${i.activationBorderColor}; + fill: ${t.activationBkgColor}; + stroke: ${t.activationBorderColor}; } .activation2 { - fill: ${i.activationBkgColor}; - stroke: ${i.activationBorderColor}; + fill: ${t.activationBkgColor}; + stroke: ${t.activationBorderColor}; } .actorPopupMenu { @@ -1078,28 +1298,28 @@ Expecting `+_s.join(", ")+", got '"+(this.terminals_[on]||on)+"'":tl="Parse erro .actorPopupMenuPanel { position: absolute; - fill: ${i.actorBkg}; + fill: ${t.actorBkg}; box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4)); } .actor-man line { - stroke: ${i.actorBorder}; - fill: ${i.actorBkg}; + stroke: ${t.actorBorder}; + fill: ${t.actorBkg}; } .actor-man circle, line { - stroke: ${i.actorBorder}; - fill: ${i.actorBkg}; + stroke: ${t.actorBorder}; + fill: ${t.actorBkg}; stroke-width: 2px; } -`,ZC=18*2,RGe="actor-top",jGe="actor-bottom",Eve=function(i,s){return AQ(i,s)},Grn=function(i,s,u,d,p){if(s.links===void 0||s.links===null||Object.keys(s.links).length===0)return{height:0,width:0};const v=s.links,b=s.actorCnt,y=s.rectData;var T="none";p&&(T="block !important");const _=i.append("g");_.attr("id","actor"+b+"_popup"),_.attr("class","actorPopupMenu"),_.attr("display",T);var A="";y.class!==void 0&&(A=" "+y.class);let P=y.width>u?y.width:u;const R=_.append("rect");if(R.attr("class","actorPopupMenuPanel"+A),R.attr("x",y.x),R.attr("y",y.height),R.attr("fill",y.fill),R.attr("stroke",y.stroke),R.attr("width",P),R.attr("height",y.height),R.attr("rx",y.rx),R.attr("ry",y.ry),v!=null){var F=20;for(let ee in v){var j=_.append("a"),K=p9.sanitizeUrl(v[ee]);j.attr("xlink:href",K),j.attr("target","_blank"),uin(d)(ee,j,y.x+10,y.height+F,P,20,{class:"actor"},d),F+=30}}return R.attr("height",F),{height:y.height+F,width:P}},Krn=function(i){return"var pu = document.getElementById('"+i+"'); if (pu != null) { pu.style.display = pu.style.display == 'block' ? 'none' : 'block'; }"},pJ=async function(i,s,u=null){let d=i.append("foreignObject");const p=await CC(s.text,Vh()),b=d.append("xhtml:div").attr("style","width: fit-content;").attr("xmlns","http://www.w3.org/1999/xhtml").html(p).node().getBoundingClientRect();if(d.attr("height",Math.round(b.height)).attr("width",Math.round(b.width)),s.class==="noteText"){const y=i.node().firstChild;y.setAttribute("height",b.height+2*s.textMargin);const T=y.getBBox();d.attr("x",Math.round(T.x+T.width/2-b.width/2)).attr("y",Math.round(T.y+T.height/2-b.height/2))}else if(u){let{startx:y,stopx:T,starty:_}=u;if(y>T){const A=y;y=T,T=A}d.attr("x",Math.round(y+Math.abs(y-T)/2-b.width/2)),s.class==="loopText"?d.attr("y",Math.round(_)):d.attr("y",Math.round(_-b.height))}return[d]},YD=function(i,s){let u=0,d=0;const p=s.text.split(ci.lineBreakRegex),[v,b]=NC(s.fontSize);let y=[],T=0,_=()=>s.y;if(s.valign!==void 0&&s.textMargin!==void 0&&s.textMargin>0)switch(s.valign){case"top":case"start":_=()=>Math.round(s.y+s.textMargin);break;case"middle":case"center":_=()=>Math.round(s.y+(u+d+s.textMargin)/2);break;case"bottom":case"end":_=()=>Math.round(s.y+(u+d+2*s.textMargin)-s.textMargin);break}if(s.anchor!==void 0&&s.textMargin!==void 0&&s.width!==void 0)switch(s.anchor){case"left":case"start":s.x=Math.round(s.x+s.textMargin),s.anchor="start",s.dominantBaseline="middle",s.alignmentBaseline="middle";break;case"middle":case"center":s.x=Math.round(s.x+s.width/2),s.anchor="middle",s.dominantBaseline="middle",s.alignmentBaseline="middle";break;case"right":case"end":s.x=Math.round(s.x+s.width-s.textMargin),s.anchor="end",s.dominantBaseline="middle",s.alignmentBaseline="middle";break}for(let[A,P]of p.entries()){s.textMargin!==void 0&&s.textMargin===0&&v!==void 0&&(T=A*v);const R=i.append("text");R.attr("x",s.x),R.attr("y",_()),s.anchor!==void 0&&R.attr("text-anchor",s.anchor).attr("dominant-baseline",s.dominantBaseline).attr("alignment-baseline",s.alignmentBaseline),s.fontFamily!==void 0&&R.style("font-family",s.fontFamily),b!==void 0&&R.style("font-size",b),s.fontWeight!==void 0&&R.style("font-weight",s.fontWeight),s.fill!==void 0&&R.attr("fill",s.fill),s.class!==void 0&&R.attr("class",s.class),s.dy!==void 0?R.attr("dy",s.dy):T!==0&&R.attr("dy",T);const F=P||hje;if(s.tspan){const j=R.append("tspan");j.attr("x",s.x),s.fill!==void 0&&j.attr("fill",s.fill),j.text(F)}else R.text(F);s.valign!==void 0&&s.textMargin!==void 0&&s.textMargin>0&&(d+=(R._groups||R)[0][0].getBBox().height,u=d),y.push(R)}return y},$Ge=function(i,s){function u(p,v,b,y,T){return p+","+v+" "+(p+b)+","+v+" "+(p+b)+","+(v+y-T)+" "+(p+b-T*1.2)+","+(v+y)+" "+p+","+(v+y)}const d=i.append("polygon");return d.attr("points",u(s.x,s.y,s.width,s.height,7)),d.attr("class","labelBox"),s.y=s.y+s.height/2,YD(i,s),d};let s5=-1;const zGe=(i,s,u,d)=>{i.select&&u.forEach(p=>{const v=s[p],b=i.select("#actor"+v.actorCnt);!d.mirrorActors&&v.stopy?b.attr("y2",v.stopy+v.height/2):d.mirrorActors&&b.attr("y2",v.stopy)})},Wrn=async function(i,s,u,d){const p=d?s.stopy:s.starty,v=s.x+s.width/2,b=p+5,y=i.append("g").lower();var T=y;d||(s5++,Object.keys(s.links||{}).length&&!u.forceMenus&&T.attr("onclick",Krn(`actor${s5}_popup`)).attr("cursor","pointer"),T.append("line").attr("id","actor"+s5).attr("x1",v).attr("y1",b).attr("x2",v).attr("y2",2e3).attr("class","actor-line").attr("class","200").attr("stroke-width","0.5px").attr("stroke","#999"),T=y.append("g"),s.actorCnt=s5,s.links!=null&&T.attr("id","root-"+s5));const _=qC();var A="actor";s.properties!=null&&s.properties.class?A=s.properties.class:_.fill="#eaeaea",d?A+=` ${jGe}`:A+=` ${RGe}`,_.x=s.x,_.y=p,_.width=s.width,_.height=s.height,_.class=A,_.rx=3,_.ry=3,_.name=s.name;const P=Eve(T,_);if(s.rectData=_,s.properties!=null&&s.properties.icon){const F=s.properties.icon.trim();F.charAt(0)==="@"?rUt(T,_.x+_.width-20,_.y+10,F.substr(1)):nUt(T,_.x+_.width-20,_.y+10,F)}await Tve(u,Dv(s.description))(s.description,T,_.x,_.y,_.width,_.height,{class:"actor"},u);let R=s.height;if(P.node){const F=P.node().getBBox();s.height=F.height,R=F.height}return R},Yrn=async function(i,s,u,d){const p=d?s.stopy:s.starty,v=s.x+s.width/2,b=p+80;i.lower(),d||(s5++,i.append("line").attr("id","actor"+s5).attr("x1",v).attr("y1",b).attr("x2",v).attr("y2",2e3).attr("class","actor-line").attr("class","200").attr("stroke-width","0.5px").attr("stroke","#999"),s.actorCnt=s5);const y=i.append("g");let T="actor-man";d?T+=` ${jGe}`:T+=` ${RGe}`,y.attr("class",T),y.attr("name",s.name);const _=qC();_.x=s.x,_.y=p,_.fill="#eaeaea",_.width=s.width,_.height=s.height,_.class="actor",_.rx=3,_.ry=3,y.append("line").attr("id","actor-man-torso"+s5).attr("x1",v).attr("y1",p+25).attr("x2",v).attr("y2",p+45),y.append("line").attr("id","actor-man-arms"+s5).attr("x1",v-ZC/2).attr("y1",p+33).attr("x2",v+ZC/2).attr("y2",p+33),y.append("line").attr("x1",v-ZC/2).attr("y1",p+60).attr("x2",v).attr("y2",p+45),y.append("line").attr("x1",v).attr("y1",p+45).attr("x2",v+ZC/2-2).attr("y2",p+60);const A=y.append("circle");A.attr("cx",s.x+s.width/2),A.attr("cy",p+10),A.attr("r",15),A.attr("width",s.width),A.attr("height",s.height);const P=y.node().getBBox();return s.height=P.height,await Tve(u,Dv(s.description))(s.description,y,_.x,_.y+35,_.width,_.height,{class:"actor"},u),s.height},Xrn=async function(i,s,u,d){switch(s.type){case"actor":return await Yrn(i,s,u,d);case"participant":return await Wrn(i,s,u,d)}},Qrn=async function(i,s,u){const p=i.append("g");qGe(p,s),s.name&&await Tve(u)(s.name,p,s.x,s.y+(s.textMaxHeight||0)/2,s.width,0,{class:"text"},u),p.lower()},Jrn=function(i){return i.append("g")},Zrn=function(i,s,u,d,p){const v=qC(),b=s.anchored;v.x=s.startx,v.y=s.starty,v.class="activation"+p%3,v.width=s.stopx-s.startx,v.height=u-s.starty,Eve(b,v)},ein=async function(i,s,u,d){const{boxMargin:p,boxTextMargin:v,labelBoxHeight:b,labelBoxWidth:y,messageFontFamily:T,messageFontSize:_,messageFontWeight:A}=d,P=i.append("g"),R=function(K,ee,ie,oe){return P.append("line").attr("x1",K).attr("y1",ee).attr("x2",ie).attr("y2",oe).attr("class","loopLine")};R(s.startx,s.starty,s.stopx,s.starty),R(s.stopx,s.starty,s.stopx,s.stopy),R(s.startx,s.stopy,s.stopx,s.stopy),R(s.startx,s.starty,s.startx,s.stopy),s.sections!==void 0&&s.sections.forEach(function(K){R(s.startx,K.y,s.stopx,K.y).style("stroke-dasharray","3, 3")});let F=zbe();F.text=u,F.x=s.startx,F.y=s.starty,F.fontFamily=T,F.fontSize=_,F.fontWeight=A,F.anchor="middle",F.valign="middle",F.tspan=!1,F.width=y||50,F.height=b||20,F.textMargin=v,F.class="labelText",$Ge(P,F),F=HGe(),F.text=s.title,F.x=s.startx+y/2+(s.stopx-s.startx)/2,F.y=s.starty+p+v,F.anchor="middle",F.valign="middle",F.textMargin=v,F.class="loopText",F.fontFamily=T,F.fontSize=_,F.fontWeight=A,F.wrap=!0;let j=Dv(F.text)?await pJ(P,F,s):YD(P,F);if(s.sectionTitles!==void 0){for(const[K,ee]of Object.entries(s.sectionTitles))if(ee.message){F.text=ee.message,F.x=s.startx+(s.stopx-s.startx)/2,F.y=s.sections[K].y+p+v,F.class="loopText",F.anchor="middle",F.valign="middle",F.tspan=!1,F.fontFamily=T,F.fontSize=_,F.fontWeight=A,F.wrap=s.wrap,Dv(F.text)?(s.starty=s.sections[K].y,await pJ(P,F,s)):YD(P,F);let ie=Math.round(j.map(oe=>(oe._groups||oe)[0][0].getBBox().height).reduce((oe,pe)=>oe+pe));s.sections[K].height+=ie-(p+v)}}return s.height=Math.round(s.stopy-s.starty),P},qGe=function(i,s){Tqe(i,s)},tin=function(i){i.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},nin=function(i){i.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},rin=function(i){i.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},iin=function(i){i.append("defs").append("marker").attr("id","arrowhead").attr("refX",7.9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},sin=function(i){i.append("defs").append("marker").attr("id","filled-head").attr("refX",15.5).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},ain=function(i){i.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},oin=function(i){i.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",4).attr("refY",4.5).append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1pt").attr("d","M 1,2 L 6,7 M 6,2 L 1,7")},HGe=function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},cin=function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},Tve=function(){function i(v,b,y,T,_,A,P){const R=b.append("text").attr("x",y+_/2).attr("y",T+A/2+5).style("text-anchor","middle").text(v);p(R,P)}function s(v,b,y,T,_,A,P,R){const{actorFontSize:F,actorFontFamily:j,actorFontWeight:K}=R,[ee,ie]=NC(F),oe=v.split(ci.lineBreakRegex);for(let pe=0;pei.height||0))+(this.loops.length===0?0:this.loops.map(i=>i.height||0).reduce((i,s)=>i+s))+(this.messages.length===0?0:this.messages.map(i=>i.height||0).reduce((i,s)=>i+s))+(this.notes.length===0?0:this.notes.map(i=>i.height||0).reduce((i,s)=>i+s))},clear:function(){this.actors=[],this.boxes=[],this.loops=[],this.messages=[],this.notes=[]},addBox:function(i){this.boxes.push(i)},addActor:function(i){this.actors.push(i)},addLoop:function(i){this.loops.push(i)},addMessage:function(i){this.messages.push(i)},addNote:function(i){this.notes.push(i)},lastActor:function(){return this.actors[this.actors.length-1]},lastLoop:function(){return this.loops[this.loops.length-1]},lastMessage:function(){return this.messages[this.messages.length-1]},lastNote:function(){return this.notes[this.notes.length-1]},actors:[],boxes:[],loops:[],messages:[],notes:[]},init:function(){this.sequenceItems=[],this.activations=[],this.models.clear(),this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0,UGe(qt())},updateVal:function(i,s,u,d){i[s]===void 0?i[s]=u:i[s]=d(u,i[s])},updateBounds:function(i,s,u,d){const p=this;let v=0;function b(y){return function(_){v++;const A=p.sequenceItems.length-v+1;p.updateVal(_,"starty",s-A*En.boxMargin,Math.min),p.updateVal(_,"stopy",d+A*En.boxMargin,Math.max),p.updateVal(ni.data,"startx",i-A*En.boxMargin,Math.min),p.updateVal(ni.data,"stopx",u+A*En.boxMargin,Math.max),y!=="activation"&&(p.updateVal(_,"startx",i-A*En.boxMargin,Math.min),p.updateVal(_,"stopx",u+A*En.boxMargin,Math.max),p.updateVal(ni.data,"starty",s-A*En.boxMargin,Math.min),p.updateVal(ni.data,"stopy",d+A*En.boxMargin,Math.max))}}this.sequenceItems.forEach(b()),this.activations.forEach(b("activation"))},insert:function(i,s,u,d){const p=ci.getMin(i,u),v=ci.getMax(i,u),b=ci.getMin(s,d),y=ci.getMax(s,d);this.updateVal(ni.data,"startx",p,Math.min),this.updateVal(ni.data,"starty",b,Math.min),this.updateVal(ni.data,"stopx",v,Math.max),this.updateVal(ni.data,"stopy",y,Math.max),this.updateBounds(p,b,v,y)},newActivation:function(i,s,u){const d=u[i.from.actor],p=bJ(i.from.actor).length||0,v=d.x+d.width/2+(p-1)*En.activationWidth/2;this.activations.push({startx:v,starty:this.verticalPos+2,stopx:v+En.activationWidth,stopy:void 0,actor:i.from.actor,anchored:Zf.anchorElement(s)})},endActivation:function(i){const s=this.activations.map(function(u){return u.actor}).lastIndexOf(i.from.actor);return this.activations.splice(s,1)[0]},createLoop:function(i={message:void 0,wrap:!1,width:void 0},s){return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:i.message,wrap:i.wrap,width:i.width,height:0,fill:s}},newLoop:function(i={message:void 0,wrap:!1,width:void 0},s){this.sequenceItems.push(this.createLoop(i,s))},endLoop:function(){return this.sequenceItems.pop()},isLoopOverlap:function(){return this.sequenceItems.length?this.sequenceItems[this.sequenceItems.length-1].overlap:!1},addSectionToLoop:function(i){const s=this.sequenceItems.pop();s.sections=s.sections||[],s.sectionTitles=s.sectionTitles||[],s.sections.push({y:ni.getVerticalPos(),height:0}),s.sectionTitles.push(i),this.sequenceItems.push(s)},saveVerticalPos:function(){this.isLoopOverlap()&&(this.savedVerticalPos=this.verticalPos)},resetVerticalPos:function(){this.isLoopOverlap()&&(this.verticalPos=this.savedVerticalPos)},bumpVerticalPos:function(i){this.verticalPos=this.verticalPos+i,this.data.stopy=ci.getMax(this.data.stopy,this.verticalPos)},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return{bounds:this.data,models:this.models}}},lin=async function(i,s){ni.bumpVerticalPos(En.boxMargin),s.height=En.boxMargin,s.starty=ni.getVerticalPos();const u=qC();u.x=s.startx,u.y=s.starty,u.width=s.width||En.width,u.class="note";const d=i.append("g"),p=Zf.drawRect(d,u),v=zbe();v.x=s.startx,v.y=s.starty,v.width=u.width,v.dy="1em",v.text=s.message,v.class="noteText",v.fontFamily=En.noteFontFamily,v.fontSize=En.noteFontSize,v.fontWeight=En.noteFontWeight,v.anchor=En.noteAlign,v.textMargin=En.noteMargin,v.valign="center";const b=Dv(v.text)?await pJ(d,v):YD(d,v),y=Math.round(b.map(T=>(T._groups||T)[0][0].getBBox().height).reduce((T,_)=>T+_));p.attr("height",y+2*En.noteMargin),s.height+=y+2*En.noteMargin,ni.bumpVerticalPos(y+2*En.noteMargin),s.stopy=s.starty+y+2*En.noteMargin,s.stopx=s.startx+u.width,ni.insert(s.startx,s.starty,s.stopx,s.stopy),ni.models.addNote(s)},eS=i=>({fontFamily:i.messageFontFamily,fontSize:i.messageFontSize,fontWeight:i.messageFontWeight}),XD=i=>({fontFamily:i.noteFontFamily,fontSize:i.noteFontSize,fontWeight:i.noteFontWeight}),Cve=i=>({fontFamily:i.actorFontFamily,fontSize:i.actorFontSize,fontWeight:i.actorFontWeight});async function hin(i,s){ni.bumpVerticalPos(10);const{startx:u,stopx:d,message:p}=s,v=ci.splitBreaks(p).length,b=Dv(p),y=b?await HF(p,qt()):Ao.calculateTextDimensions(p,eS(En));if(!b){const P=y.height/v;s.height+=P,ni.bumpVerticalPos(P)}let T,_=y.height-10;const A=y.width;if(u===d){T=ni.getVerticalPos()+_,En.rightAngles||(_+=En.boxMargin,T=ni.getVerticalPos()+_),_+=30;const P=ci.getMax(A/2,En.width/2);ni.insert(u-P,ni.getVerticalPos()-10+_,d+P,ni.getVerticalPos()+30+_)}else _+=En.boxMargin,T=ni.getVerticalPos()+_,ni.insert(u,T-10,d,T);return ni.bumpVerticalPos(_),s.height+=_,s.stopy=s.starty+s.height,ni.insert(s.fromBounds,s.starty,s.toBounds,s.stopy),T}const fin=async function(i,s,u,d){const{startx:p,stopx:v,starty:b,message:y,type:T,sequenceIndex:_,sequenceVisible:A}=s,P=Ao.calculateTextDimensions(y,eS(En)),R=zbe();R.x=p,R.y=b+10,R.width=v-p,R.class="messageText",R.dy="1em",R.text=y,R.fontFamily=En.messageFontFamily,R.fontSize=En.messageFontSize,R.fontWeight=En.messageFontWeight,R.anchor=En.messageAlign,R.valign="center",R.textMargin=En.wrapPadding,R.tspan=!1,Dv(R.text)?await pJ(i,R,{startx:p,stopx:v,starty:u}):YD(i,R);const F=P.width;let j;p===v?En.rightAngles?j=i.append("path").attr("d",`M ${p},${u} H ${p+ci.getMax(En.width/2,F/2)} V ${u+25} H ${p}`):j=i.append("path").attr("d","M "+p+","+u+" C "+(p+60)+","+(u-10)+" "+(p+60)+","+(u+30)+" "+p+","+(u+20)):(j=i.append("line"),j.attr("x1",p),j.attr("y1",u),j.attr("x2",v),j.attr("y2",u)),T===d.db.LINETYPE.DOTTED||T===d.db.LINETYPE.DOTTED_CROSS||T===d.db.LINETYPE.DOTTED_POINT||T===d.db.LINETYPE.DOTTED_OPEN?(j.style("stroke-dasharray","3, 3"),j.attr("class","messageLine1")):j.attr("class","messageLine0");let K="";En.arrowMarkerAbsolute&&(K=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,K=K.replace(/\(/g,"\\("),K=K.replace(/\)/g,"\\)")),j.attr("stroke-width",2),j.attr("stroke","none"),j.style("fill","none"),(T===d.db.LINETYPE.SOLID||T===d.db.LINETYPE.DOTTED)&&j.attr("marker-end","url("+K+"#arrowhead)"),(T===d.db.LINETYPE.SOLID_POINT||T===d.db.LINETYPE.DOTTED_POINT)&&j.attr("marker-end","url("+K+"#filled-head)"),(T===d.db.LINETYPE.SOLID_CROSS||T===d.db.LINETYPE.DOTTED_CROSS)&&j.attr("marker-end","url("+K+"#crosshead)"),(A||En.showSequenceNumbers)&&(j.attr("marker-start","url("+K+"#sequencenumber)"),i.append("text").attr("x",p).attr("y",u+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("class","sequenceNumber").text(_))},din=async function(i,s,u,d,p,v,b){let y=0,T=0,_,A=0;for(const P of d){const R=s[P],F=R.box;_&&_!=F&&(b||ni.models.addBox(_),T+=En.boxMargin+_.margin),F&&F!=_&&(b||(F.x=y+T,F.y=p),T+=F.margin),R.width=R.width||En.width,R.height=ci.getMax(R.height||En.height,En.height),R.margin=R.margin||En.actorMargin,A=ci.getMax(A,R.height),u[R.name]&&(T+=R.width/2),R.x=y+T,R.starty=ni.getVerticalPos(),ni.insert(R.x,p,R.x+R.width,R.height),y+=R.width+T,R.box&&(R.box.width=y+F.margin-R.box.x),T=R.margin,_=R.box,ni.models.addActor(R)}_&&!b&&ni.models.addBox(_),ni.bumpVerticalPos(A)},Sve=async function(i,s,u,d){if(d){let p=0;ni.bumpVerticalPos(En.boxMargin*2);for(const v of u){const b=s[v];b.stopy||(b.stopy=ni.getVerticalPos());const y=await Zf.drawActor(i,b,En,!0);p=ci.getMax(p,y)}ni.bumpVerticalPos(p+En.boxMargin)}else for(const p of u){const v=s[p];await Zf.drawActor(i,v,En,!1)}},VGe=function(i,s,u,d){let p=0,v=0;for(const b of u){const y=s[b],T=min(y),_=Zf.drawPopup(i,y,T,En,En.forceMenus,d);_.height>p&&(p=_.height),_.width+y.x>v&&(v=_.width+y.x)}return{maxHeight:p,maxWidth:v}},UGe=function(i){id(En,i),i.fontFamily&&(En.actorFontFamily=En.noteFontFamily=En.messageFontFamily=i.fontFamily),i.fontSize&&(En.actorFontSize=En.noteFontSize=En.messageFontSize=i.fontSize),i.fontWeight&&(En.actorFontWeight=En.noteFontWeight=En.messageFontWeight=i.fontWeight)},bJ=function(i){return ni.activations.filter(function(s){return s.actor===i})},GGe=function(i,s){const u=s[i],d=bJ(i),p=d.reduce(function(b,y){return ci.getMin(b,y.startx)},u.x+u.width/2-1),v=d.reduce(function(b,y){return ci.getMax(b,y.stopx)},u.x+u.width/2+1);return[p,v]};function a5(i,s,u,d,p){ni.bumpVerticalPos(u);let v=d;if(s.id&&s.message&&i[s.id]){const b=i[s.id].width,y=eS(En);s.message=Ao.wrapLabel(`[${s.message}]`,b-2*En.wrapPadding,y),s.width=b,s.wrap=!0;const T=Ao.calculateTextDimensions(s.message,y),_=ci.getMax(T.height,En.labelBoxHeight);v=d+_,Xe.debug(`${_} - ${s.message}`)}p(s),ni.bumpVerticalPos(v)}function gin(i,s,u,d,p,v,b){function y(_,A){_.x{Se.add(Ce.from),Se.add(Ce.to)}),j=j.filter(Ce=>Se.has(Ce))}await din(_,A,P,j,0,K,!1);const be=await xin(K,A,pe,d);Zf.insertArrowHead(_),Zf.insertArrowCrossHead(_),Zf.insertArrowFilledHead(_),Zf.insertSequenceNumber(_);function ae(Se,Ce){const ke=ni.endActivation(Se);ke.starty+18>Ce&&(ke.starty=Ce-6,Ce+=12),Zf.drawActivation(_,ke,Ce,En,bJ(Se.from.actor).length),ni.insert(ke.startx,Ce-10,ke.stopx,Ce)}let ne=1,se=1;const de=[],X=[];let ge=0;for(const Se of K){let Ce,ke,Ke;switch(Se.type){case d.db.LINETYPE.NOTE:ni.resetVerticalPos(),ke=Se.noteModel,await lin(_,ke);break;case d.db.LINETYPE.ACTIVE_START:ni.newActivation(Se,_,A);break;case d.db.LINETYPE.ACTIVE_END:ae(Se,ni.getVerticalPos());break;case d.db.LINETYPE.LOOP_START:a5(be,Se,En.boxMargin,En.boxMargin+En.boxTextMargin,Ft=>ni.newLoop(Ft));break;case d.db.LINETYPE.LOOP_END:Ce=ni.endLoop(),await Zf.drawLoop(_,Ce,"loop",En),ni.bumpVerticalPos(Ce.stopy-ni.getVerticalPos()),ni.models.addLoop(Ce);break;case d.db.LINETYPE.RECT_START:a5(be,Se,En.boxMargin,En.boxMargin,Ft=>ni.newLoop(void 0,Ft.message));break;case d.db.LINETYPE.RECT_END:Ce=ni.endLoop(),X.push(Ce),ni.models.addLoop(Ce),ni.bumpVerticalPos(Ce.stopy-ni.getVerticalPos());break;case d.db.LINETYPE.OPT_START:a5(be,Se,En.boxMargin,En.boxMargin+En.boxTextMargin,Ft=>ni.newLoop(Ft));break;case d.db.LINETYPE.OPT_END:Ce=ni.endLoop(),await Zf.drawLoop(_,Ce,"opt",En),ni.bumpVerticalPos(Ce.stopy-ni.getVerticalPos()),ni.models.addLoop(Ce);break;case d.db.LINETYPE.ALT_START:a5(be,Se,En.boxMargin,En.boxMargin+En.boxTextMargin,Ft=>ni.newLoop(Ft));break;case d.db.LINETYPE.ALT_ELSE:a5(be,Se,En.boxMargin+En.boxTextMargin,En.boxMargin,Ft=>ni.addSectionToLoop(Ft));break;case d.db.LINETYPE.ALT_END:Ce=ni.endLoop(),await Zf.drawLoop(_,Ce,"alt",En),ni.bumpVerticalPos(Ce.stopy-ni.getVerticalPos()),ni.models.addLoop(Ce);break;case d.db.LINETYPE.PAR_START:case d.db.LINETYPE.PAR_OVER_START:a5(be,Se,En.boxMargin,En.boxMargin+En.boxTextMargin,Ft=>ni.newLoop(Ft)),ni.saveVerticalPos();break;case d.db.LINETYPE.PAR_AND:a5(be,Se,En.boxMargin+En.boxTextMargin,En.boxMargin,Ft=>ni.addSectionToLoop(Ft));break;case d.db.LINETYPE.PAR_END:Ce=ni.endLoop(),await Zf.drawLoop(_,Ce,"par",En),ni.bumpVerticalPos(Ce.stopy-ni.getVerticalPos()),ni.models.addLoop(Ce);break;case d.db.LINETYPE.AUTONUMBER:ne=Se.message.start||ne,se=Se.message.step||se,Se.message.visible?d.db.enableSequenceNumbers():d.db.disableSequenceNumbers();break;case d.db.LINETYPE.CRITICAL_START:a5(be,Se,En.boxMargin,En.boxMargin+En.boxTextMargin,Ft=>ni.newLoop(Ft));break;case d.db.LINETYPE.CRITICAL_OPTION:a5(be,Se,En.boxMargin+En.boxTextMargin,En.boxMargin,Ft=>ni.addSectionToLoop(Ft));break;case d.db.LINETYPE.CRITICAL_END:Ce=ni.endLoop(),await Zf.drawLoop(_,Ce,"critical",En),ni.bumpVerticalPos(Ce.stopy-ni.getVerticalPos()),ni.models.addLoop(Ce);break;case d.db.LINETYPE.BREAK_START:a5(be,Se,En.boxMargin,En.boxMargin+En.boxTextMargin,Ft=>ni.newLoop(Ft));break;case d.db.LINETYPE.BREAK_END:Ce=ni.endLoop(),await Zf.drawLoop(_,Ce,"break",En),ni.bumpVerticalPos(Ce.stopy-ni.getVerticalPos()),ni.models.addLoop(Ce);break;default:try{Ke=Se.msgModel,Ke.starty=ni.getVerticalPos(),Ke.sequenceIndex=ne,Ke.sequenceVisible=d.db.showSequenceNumbers();const Ft=await hin(_,Ke);gin(Se,Ke,Ft,ge,A,P,R),de.push({messageModel:Ke,lineStartY:Ft}),ni.models.addMessage(Ke)}catch(Ft){Xe.error("error while drawing message",Ft)}}[d.db.LINETYPE.SOLID_OPEN,d.db.LINETYPE.DOTTED_OPEN,d.db.LINETYPE.SOLID,d.db.LINETYPE.DOTTED,d.db.LINETYPE.SOLID_CROSS,d.db.LINETYPE.DOTTED_CROSS,d.db.LINETYPE.SOLID_POINT,d.db.LINETYPE.DOTTED_POINT].includes(Se.type)&&(ne=ne+se),ge++}Xe.debug("createdActors",P),Xe.debug("destroyedActors",R),await Sve(_,A,j,!1);for(const Se of de)await fin(_,Se.messageModel,Se.lineStartY,d);En.mirrorActors&&await Sve(_,A,j,!0),X.forEach(Se=>Zf.drawBackgroundRect(_,Se)),zGe(_,A,j,En);for(const Se of ni.models.boxes)Se.height=ni.getVerticalPos()-Se.y,ni.insert(Se.x,Se.y,Se.x+Se.width,Se.height),Se.startx=Se.x,Se.starty=Se.y,Se.stopx=Se.startx+Se.width,Se.stopy=Se.starty+Se.height,Se.stroke="rgb(0,0,0, 0.5)",await Zf.drawBox(_,Se,En);ie&&ni.bumpVerticalPos(En.boxMargin);const W=VGe(_,A,j,T),{bounds:xe}=ni.getBounds();let U=xe.stopy-xe.starty;U{const b=eS(En);let y=v.actorKeys.reduce((A,P)=>A+=i[P].width+(i[P].margin||0),0);y-=2*En.boxTextMargin,v.wrap&&(v.name=Ao.wrapLabel(v.name,y-2*En.wrapPadding,b));const T=Ao.calculateTextDimensions(v.name,b);p=ci.getMax(T.height,p);const _=ci.getMax(y,T.width+2*En.wrapPadding);if(v.margin=En.boxTextMargin,y<_){const A=(_-y)/2;v.margin+=A}}),u.forEach(v=>v.textMaxHeight=p),ci.getMax(d,En.height)}const win=async function(i,s,u){const d=s[i.from].x,p=s[i.to].x,v=i.wrap&&i.message;let b=Dv(i.message)?await HF(i.message,qt()):Ao.calculateTextDimensions(v?Ao.wrapLabel(i.message,En.width,XD(En)):i.message,XD(En));const y={width:v?En.width:ci.getMax(En.width,b.width+2*En.noteMargin),height:0,startx:s[i.from].x,stopx:0,starty:0,stopy:0,message:i.message};return i.placement===u.db.PLACEMENT.RIGHTOF?(y.width=v?ci.getMax(En.width,b.width):ci.getMax(s[i.from].width/2+s[i.to].width/2,b.width+2*En.noteMargin),y.startx=d+(s[i.from].width+En.actorMargin)/2):i.placement===u.db.PLACEMENT.LEFTOF?(y.width=v?ci.getMax(En.width,b.width+2*En.noteMargin):ci.getMax(s[i.from].width/2+s[i.to].width/2,b.width+2*En.noteMargin),y.startx=d-y.width+(s[i.from].width-En.actorMargin)/2):i.to===i.from?(b=Ao.calculateTextDimensions(v?Ao.wrapLabel(i.message,ci.getMax(En.width,s[i.from].width),XD(En)):i.message,XD(En)),y.width=v?ci.getMax(En.width,s[i.from].width):ci.getMax(s[i.from].width,En.width,b.width+2*En.noteMargin),y.startx=d+(s[i.from].width-y.width)/2):(y.width=Math.abs(d+s[i.from].width/2-(p+s[i.to].width/2))+En.actorMargin,y.startx=d2,P=K=>y?-K:K;i.from===i.to?_=T:(i.activate&&!A&&(_+=P(En.activationWidth/2-1)),[u.db.LINETYPE.SOLID_OPEN,u.db.LINETYPE.DOTTED_OPEN].includes(i.type)||(_+=P(3)));const R=[d,p,v,b],F=Math.abs(T-_);i.wrap&&i.message&&(i.message=Ao.wrapLabel(i.message,ci.getMax(F+2*En.wrapPadding,En.width),eS(En)));const j=Ao.calculateTextDimensions(i.message,eS(En));return{width:ci.getMax(i.wrap?0:j.width+2*En.wrapPadding,F+2*En.wrapPadding,En.width),height:0,startx:T,stopx:_,starty:0,stopy:0,message:i.message,type:i.type,wrap:i.wrap,fromBounds:Math.min.apply(null,R),toBounds:Math.max.apply(null,R)}},xin=async function(i,s,u,d){const p={},v=[];let b,y,T;for(const _ of i){switch(_.id=Ao.random({length:10}),_.type){case d.db.LINETYPE.LOOP_START:case d.db.LINETYPE.ALT_START:case d.db.LINETYPE.OPT_START:case d.db.LINETYPE.PAR_START:case d.db.LINETYPE.PAR_OVER_START:case d.db.LINETYPE.CRITICAL_START:case d.db.LINETYPE.BREAK_START:v.push({id:_.id,msg:_.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case d.db.LINETYPE.ALT_ELSE:case d.db.LINETYPE.PAR_AND:case d.db.LINETYPE.CRITICAL_OPTION:_.message&&(b=v.pop(),p[b.id]=b,p[_.id]=b,v.push(b));break;case d.db.LINETYPE.LOOP_END:case d.db.LINETYPE.ALT_END:case d.db.LINETYPE.OPT_END:case d.db.LINETYPE.PAR_END:case d.db.LINETYPE.CRITICAL_END:case d.db.LINETYPE.BREAK_END:b=v.pop(),p[b.id]=b;break;case d.db.LINETYPE.ACTIVE_START:{const P=s[_.from?_.from.actor:_.to.actor],R=bJ(_.from?_.from.actor:_.to.actor).length,F=P.x+P.width/2+(R-1)*En.activationWidth/2,j={startx:F,stopx:F+En.activationWidth,actor:_.from.actor,enabled:!0};ni.activations.push(j)}break;case d.db.LINETYPE.ACTIVE_END:{const P=ni.activations.map(R=>R.actor).lastIndexOf(_.from.actor);delete ni.activations.splice(P,1)[0]}break}_.placement!==void 0?(y=await win(_,s,d),_.noteModel=y,v.forEach(P=>{b=P,b.from=ci.getMin(b.from,y.startx),b.to=ci.getMax(b.to,y.startx+y.width),b.width=ci.getMax(b.width,Math.abs(b.from-b.to))-En.labelBoxWidth})):(T=yin(_,s,d),_.msgModel=T,T.startx&&T.stopx&&v.length>0&&v.forEach(P=>{if(b=P,T.startx===T.stopx){const R=s[_.from],F=s[_.to];b.from=ci.getMin(R.x-T.width/2,R.x-R.width/2,b.from),b.to=ci.getMax(F.x+T.width/2,F.x+R.width/2,b.to),b.width=ci.getMax(b.width,Math.abs(b.to-b.from))-En.labelBoxWidth}else b.from=ci.getMin(T.startx,b.from),b.to=ci.getMax(T.stopx,b.to),b.width=ci.getMax(b.width,T.width)-En.labelBoxWidth}))}return ni.activations=[],Xe.debug("Loop type widths:",p),p},kin=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:yrn,db:FGe,renderer:{bounds:ni,drawActors:Sve,drawActorsPopup:VGe,setConf:UGe,draw:pin},styles:Urn,init:({wrap:i})=>{FGe.setWrap(i)}}},Symbol.toStringTag,{value:"Module"}));var _ve=function(){var i=function(ao,Tr,Fn,qn){for(Fn=Fn||{},qn=ao.length;qn--;Fn[ao[qn]]=Tr);return Fn},s=[1,17],u=[1,18],d=[1,19],p=[1,39],v=[1,40],b=[1,25],y=[1,23],T=[1,24],_=[1,31],A=[1,32],P=[1,33],R=[1,34],F=[1,35],j=[1,36],K=[1,26],ee=[1,27],ie=[1,28],oe=[1,29],pe=[1,43],be=[1,30],ae=[1,42],ne=[1,44],se=[1,41],de=[1,45],X=[1,9],ge=[1,8,9],W=[1,56],xe=[1,57],U=[1,58],Fe=[1,59],Pe=[1,60],je=[1,61],Ie=[1,62],Se=[1,8,9,39],Ce=[1,74],ke=[1,8,9,12,13,21,37,39,42,59,60,61,62,63,64,65,70,72],Ke=[1,8,9,12,13,19,21,37,39,42,46,59,60,61,62,63,64,65,70,72,74,80,95,97,98],Ft=[13,74,80,95,97,98],Ne=[13,64,65,74,80,95,97,98],gn=[13,59,60,61,62,63,74,80,95,97,98],_t=[1,93],Et=[1,110],Gt=[1,108],ln=[1,102],xt=[1,103],Pt=[1,104],Qe=[1,105],Dt=[1,106],kt=[1,107],On=[1,109],ht=[1,8,9,37,39,42],zr=[1,8,9,21],yt=[1,8,9,78],ji=[1,8,9,21,73,74,78,80,81,82,83,84,85],xi={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,className:17,classLiteralName:18,GENERICTYPE:19,relationStatement:20,LABEL:21,namespaceStatement:22,classStatement:23,memberStatement:24,annotationStatement:25,clickStatement:26,styleStatement:27,cssClassStatement:28,noteStatement:29,direction:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,namespaceIdentifier:36,STRUCT_START:37,classStatements:38,STRUCT_STOP:39,NAMESPACE:40,classIdentifier:41,STYLE_SEPARATOR:42,members:43,CLASS:44,ANNOTATION_START:45,ANNOTATION_END:46,MEMBER:47,SEPARATOR:48,relation:49,NOTE_FOR:50,noteText:51,NOTE:52,direction_tb:53,direction_bt:54,direction_rl:55,direction_lr:56,relationType:57,lineType:58,AGGREGATION:59,EXTENSION:60,COMPOSITION:61,DEPENDENCY:62,LOLLIPOP:63,LINE:64,DOTTED_LINE:65,CALLBACK:66,LINK:67,LINK_TARGET:68,CLICK:69,CALLBACK_NAME:70,CALLBACK_ARGS:71,HREF:72,STYLE:73,ALPHA:74,stylesOpt:75,CSSCLASS:76,style:77,COMMA:78,styleComponent:79,NUM:80,COLON:81,UNIT:82,SPACE:83,BRKT:84,PCT:85,commentToken:86,textToken:87,graphCodeTokens:88,textNoTagsToken:89,TAGSTART:90,TAGEND:91,"==":92,"--":93,DEFAULT:94,MINUS:95,keywords:96,UNICODE_TEXT:97,BQUOTE_STR:98,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",19:"GENERICTYPE",21:"LABEL",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",37:"STRUCT_START",39:"STRUCT_STOP",40:"NAMESPACE",42:"STYLE_SEPARATOR",44:"CLASS",45:"ANNOTATION_START",46:"ANNOTATION_END",47:"MEMBER",48:"SEPARATOR",50:"NOTE_FOR",52:"NOTE",53:"direction_tb",54:"direction_bt",55:"direction_rl",56:"direction_lr",59:"AGGREGATION",60:"EXTENSION",61:"COMPOSITION",62:"DEPENDENCY",63:"LOLLIPOP",64:"LINE",65:"DOTTED_LINE",66:"CALLBACK",67:"LINK",68:"LINK_TARGET",69:"CLICK",70:"CALLBACK_NAME",71:"CALLBACK_ARGS",72:"HREF",73:"STYLE",74:"ALPHA",76:"CSSCLASS",78:"COMMA",80:"NUM",81:"COLON",82:"UNIT",83:"SPACE",84:"BRKT",85:"PCT",88:"graphCodeTokens",90:"TAGSTART",91:"TAGEND",92:"==",93:"--",94:"DEFAULT",95:"MINUS",96:"keywords",97:"UNICODE_TEXT",98:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,2],[17,1],[17,1],[17,2],[17,2],[17,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[22,4],[22,5],[36,2],[38,1],[38,2],[38,3],[23,1],[23,3],[23,4],[23,6],[41,2],[41,3],[25,4],[43,1],[43,2],[24,1],[24,2],[24,1],[24,1],[20,3],[20,4],[20,4],[20,5],[29,3],[29,2],[30,1],[30,1],[30,1],[30,1],[49,3],[49,2],[49,2],[49,1],[57,1],[57,1],[57,1],[57,1],[57,1],[58,1],[58,1],[26,3],[26,4],[26,3],[26,4],[26,4],[26,5],[26,3],[26,4],[26,4],[26,5],[26,4],[26,5],[26,5],[26,6],[27,3],[28,3],[75,1],[75,3],[77,1],[77,2],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[86,1],[86,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[89,1],[89,1],[89,1],[89,1],[16,1],[16,1],[16,1],[16,1],[18,1],[51,1]],performAction:function(Tr,Fn,qn,Un,At,wt,on){var fn=wt.length-1;switch(At){case 8:this.$=wt[fn-1];break;case 9:case 11:case 12:this.$=wt[fn];break;case 10:case 13:this.$=wt[fn-1]+wt[fn];break;case 14:case 15:this.$=wt[fn-1]+"~"+wt[fn]+"~";break;case 16:Un.addRelation(wt[fn]);break;case 17:wt[fn-1].title=Un.cleanupLabel(wt[fn]),Un.addRelation(wt[fn-1]);break;case 27:this.$=wt[fn].trim(),Un.setAccTitle(this.$);break;case 28:case 29:this.$=wt[fn].trim(),Un.setAccDescription(this.$);break;case 30:Un.addClassesToNamespace(wt[fn-3],wt[fn-1]);break;case 31:Un.addClassesToNamespace(wt[fn-4],wt[fn-1]);break;case 32:this.$=wt[fn],Un.addNamespace(wt[fn]);break;case 33:this.$=[wt[fn]];break;case 34:this.$=[wt[fn-1]];break;case 35:wt[fn].unshift(wt[fn-2]),this.$=wt[fn];break;case 37:Un.setCssClass(wt[fn-2],wt[fn]);break;case 38:Un.addMembers(wt[fn-3],wt[fn-1]);break;case 39:Un.setCssClass(wt[fn-5],wt[fn-3]),Un.addMembers(wt[fn-5],wt[fn-1]);break;case 40:this.$=wt[fn],Un.addClass(wt[fn]);break;case 41:this.$=wt[fn-1],Un.addClass(wt[fn-1]),Un.setClassLabel(wt[fn-1],wt[fn]);break;case 42:Un.addAnnotation(wt[fn],wt[fn-2]);break;case 43:this.$=[wt[fn]];break;case 44:wt[fn].push(wt[fn-1]),this.$=wt[fn];break;case 45:break;case 46:Un.addMember(wt[fn-1],Un.cleanupLabel(wt[fn]));break;case 47:break;case 48:break;case 49:this.$={id1:wt[fn-2],id2:wt[fn],relation:wt[fn-1],relationTitle1:"none",relationTitle2:"none"};break;case 50:this.$={id1:wt[fn-3],id2:wt[fn],relation:wt[fn-1],relationTitle1:wt[fn-2],relationTitle2:"none"};break;case 51:this.$={id1:wt[fn-3],id2:wt[fn],relation:wt[fn-2],relationTitle1:"none",relationTitle2:wt[fn-1]};break;case 52:this.$={id1:wt[fn-4],id2:wt[fn],relation:wt[fn-2],relationTitle1:wt[fn-3],relationTitle2:wt[fn-1]};break;case 53:Un.addNote(wt[fn],wt[fn-1]);break;case 54:Un.addNote(wt[fn]);break;case 55:Un.setDirection("TB");break;case 56:Un.setDirection("BT");break;case 57:Un.setDirection("RL");break;case 58:Un.setDirection("LR");break;case 59:this.$={type1:wt[fn-2],type2:wt[fn],lineType:wt[fn-1]};break;case 60:this.$={type1:"none",type2:wt[fn],lineType:wt[fn-1]};break;case 61:this.$={type1:wt[fn-1],type2:"none",lineType:wt[fn]};break;case 62:this.$={type1:"none",type2:"none",lineType:wt[fn]};break;case 63:this.$=Un.relationType.AGGREGATION;break;case 64:this.$=Un.relationType.EXTENSION;break;case 65:this.$=Un.relationType.COMPOSITION;break;case 66:this.$=Un.relationType.DEPENDENCY;break;case 67:this.$=Un.relationType.LOLLIPOP;break;case 68:this.$=Un.lineType.LINE;break;case 69:this.$=Un.lineType.DOTTED_LINE;break;case 70:case 76:this.$=wt[fn-2],Un.setClickEvent(wt[fn-1],wt[fn]);break;case 71:case 77:this.$=wt[fn-3],Un.setClickEvent(wt[fn-2],wt[fn-1]),Un.setTooltip(wt[fn-2],wt[fn]);break;case 72:this.$=wt[fn-2],Un.setLink(wt[fn-1],wt[fn]);break;case 73:this.$=wt[fn-3],Un.setLink(wt[fn-2],wt[fn-1],wt[fn]);break;case 74:this.$=wt[fn-3],Un.setLink(wt[fn-2],wt[fn-1]),Un.setTooltip(wt[fn-2],wt[fn]);break;case 75:this.$=wt[fn-4],Un.setLink(wt[fn-3],wt[fn-2],wt[fn]),Un.setTooltip(wt[fn-3],wt[fn-1]);break;case 78:this.$=wt[fn-3],Un.setClickEvent(wt[fn-2],wt[fn-1],wt[fn]);break;case 79:this.$=wt[fn-4],Un.setClickEvent(wt[fn-3],wt[fn-2],wt[fn-1]),Un.setTooltip(wt[fn-3],wt[fn]);break;case 80:this.$=wt[fn-3],Un.setLink(wt[fn-2],wt[fn]);break;case 81:this.$=wt[fn-4],Un.setLink(wt[fn-3],wt[fn-1],wt[fn]);break;case 82:this.$=wt[fn-4],Un.setLink(wt[fn-3],wt[fn-1]),Un.setTooltip(wt[fn-3],wt[fn]);break;case 83:this.$=wt[fn-5],Un.setLink(wt[fn-4],wt[fn-2],wt[fn]),Un.setTooltip(wt[fn-4],wt[fn-1]);break;case 84:this.$=wt[fn-2],Un.setCssStyle(wt[fn-1],wt[fn]);break;case 85:Un.setCssClass(wt[fn-1],wt[fn]);break;case 86:this.$=[wt[fn]];break;case 87:wt[fn-2].push(wt[fn]),this.$=wt[fn-2];break;case 89:this.$=wt[fn-1]+wt[fn];break}},table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:37,17:20,18:38,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:16,31:s,33:u,35:d,36:21,40:p,41:22,44:v,45:b,47:y,48:T,50:_,52:A,53:P,54:R,55:F,56:j,66:K,67:ee,69:ie,73:oe,74:pe,76:be,80:ae,95:ne,97:se,98:de},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},i(X,[2,5],{8:[1,46]}),{8:[1,47]},i(ge,[2,16],{21:[1,48]}),i(ge,[2,18]),i(ge,[2,19]),i(ge,[2,20]),i(ge,[2,21]),i(ge,[2,22]),i(ge,[2,23]),i(ge,[2,24]),i(ge,[2,25]),i(ge,[2,26]),{32:[1,49]},{34:[1,50]},i(ge,[2,29]),i(ge,[2,45],{49:51,57:54,58:55,13:[1,52],21:[1,53],59:W,60:xe,61:U,62:Fe,63:Pe,64:je,65:Ie}),{37:[1,63]},i(Se,[2,36],{37:[1,65],42:[1,64]}),i(ge,[2,47]),i(ge,[2,48]),{16:66,74:pe,80:ae,95:ne,97:se},{16:37,17:67,18:38,74:pe,80:ae,95:ne,97:se,98:de},{16:37,17:68,18:38,74:pe,80:ae,95:ne,97:se,98:de},{16:37,17:69,18:38,74:pe,80:ae,95:ne,97:se,98:de},{74:[1,70]},{13:[1,71]},{16:37,17:72,18:38,74:pe,80:ae,95:ne,97:se,98:de},{13:Ce,51:73},i(ge,[2,55]),i(ge,[2,56]),i(ge,[2,57]),i(ge,[2,58]),i(ke,[2,11],{16:37,18:38,17:75,19:[1,76],74:pe,80:ae,95:ne,97:se,98:de}),i(ke,[2,12],{19:[1,77]}),{15:78,16:79,74:pe,80:ae,95:ne,97:se},{16:37,17:80,18:38,74:pe,80:ae,95:ne,97:se,98:de},i(Ke,[2,112]),i(Ke,[2,113]),i(Ke,[2,114]),i(Ke,[2,115]),i([1,8,9,12,13,19,21,37,39,42,59,60,61,62,63,64,65,70,72],[2,116]),i(X,[2,6],{10:5,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:16,17:20,36:21,41:22,16:37,18:38,5:81,31:s,33:u,35:d,40:p,44:v,45:b,47:y,48:T,50:_,52:A,53:P,54:R,55:F,56:j,66:K,67:ee,69:ie,73:oe,74:pe,76:be,80:ae,95:ne,97:se,98:de}),{5:82,10:5,16:37,17:20,18:38,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:16,31:s,33:u,35:d,36:21,40:p,41:22,44:v,45:b,47:y,48:T,50:_,52:A,53:P,54:R,55:F,56:j,66:K,67:ee,69:ie,73:oe,74:pe,76:be,80:ae,95:ne,97:se,98:de},i(ge,[2,17]),i(ge,[2,27]),i(ge,[2,28]),{13:[1,84],16:37,17:83,18:38,74:pe,80:ae,95:ne,97:se,98:de},{49:85,57:54,58:55,59:W,60:xe,61:U,62:Fe,63:Pe,64:je,65:Ie},i(ge,[2,46]),{58:86,64:je,65:Ie},i(Ft,[2,62],{57:87,59:W,60:xe,61:U,62:Fe,63:Pe}),i(Ne,[2,63]),i(Ne,[2,64]),i(Ne,[2,65]),i(Ne,[2,66]),i(Ne,[2,67]),i(gn,[2,68]),i(gn,[2,69]),{8:[1,89],23:90,38:88,41:22,44:v},{16:91,74:pe,80:ae,95:ne,97:se},{43:92,47:_t},{46:[1,94]},{13:[1,95]},{13:[1,96]},{70:[1,97],72:[1,98]},{21:Et,73:Gt,74:ln,75:99,77:100,79:101,80:xt,81:Pt,82:Qe,83:Dt,84:kt,85:On},{74:[1,111]},{13:Ce,51:112},i(ge,[2,54]),i(ge,[2,117]),i(ke,[2,13]),i(ke,[2,14]),i(ke,[2,15]),{37:[2,32]},{15:113,16:79,37:[2,9],74:pe,80:ae,95:ne,97:se},i(ht,[2,40],{11:114,12:[1,115]}),i(X,[2,7]),{9:[1,116]},i(zr,[2,49]),{16:37,17:117,18:38,74:pe,80:ae,95:ne,97:se,98:de},{13:[1,119],16:37,17:118,18:38,74:pe,80:ae,95:ne,97:se,98:de},i(Ft,[2,61],{57:120,59:W,60:xe,61:U,62:Fe,63:Pe}),i(Ft,[2,60]),{39:[1,121]},{23:90,38:122,41:22,44:v},{8:[1,123],39:[2,33]},i(Se,[2,37],{37:[1,124]}),{39:[1,125]},{39:[2,43],43:126,47:_t},{16:37,17:127,18:38,74:pe,80:ae,95:ne,97:se,98:de},i(ge,[2,70],{13:[1,128]}),i(ge,[2,72],{13:[1,130],68:[1,129]}),i(ge,[2,76],{13:[1,131],71:[1,132]}),{13:[1,133]},i(ge,[2,84],{78:[1,134]}),i(yt,[2,86],{79:135,21:Et,73:Gt,74:ln,80:xt,81:Pt,82:Qe,83:Dt,84:kt,85:On}),i(ji,[2,88]),i(ji,[2,90]),i(ji,[2,91]),i(ji,[2,92]),i(ji,[2,93]),i(ji,[2,94]),i(ji,[2,95]),i(ji,[2,96]),i(ji,[2,97]),i(ji,[2,98]),i(ge,[2,85]),i(ge,[2,53]),{37:[2,10]},i(ht,[2,41]),{13:[1,136]},{1:[2,4]},i(zr,[2,51]),i(zr,[2,50]),{16:37,17:137,18:38,74:pe,80:ae,95:ne,97:se,98:de},i(Ft,[2,59]),i(ge,[2,30]),{39:[1,138]},{23:90,38:139,39:[2,34],41:22,44:v},{43:140,47:_t},i(Se,[2,38]),{39:[2,44]},i(ge,[2,42]),i(ge,[2,71]),i(ge,[2,73]),i(ge,[2,74],{68:[1,141]}),i(ge,[2,77]),i(ge,[2,78],{13:[1,142]}),i(ge,[2,80],{13:[1,144],68:[1,143]}),{21:Et,73:Gt,74:ln,77:145,79:101,80:xt,81:Pt,82:Qe,83:Dt,84:kt,85:On},i(ji,[2,89]),{14:[1,146]},i(zr,[2,52]),i(ge,[2,31]),{39:[2,35]},{39:[1,147]},i(ge,[2,75]),i(ge,[2,79]),i(ge,[2,81]),i(ge,[2,82],{68:[1,148]}),i(yt,[2,87],{79:135,21:Et,73:Gt,74:ln,80:xt,81:Pt,82:Qe,83:Dt,84:kt,85:On}),i(ht,[2,8]),i(Se,[2,39]),i(ge,[2,83])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],78:[2,32],113:[2,10],116:[2,4],126:[2,44],139:[2,35]},parseError:function(Tr,Fn){if(Fn.recoverable)this.trace(Tr);else{var qn=new Error(Tr);throw qn.hash=Fn,qn}},parse:function(Tr){var Fn=this,qn=[0],Un=[],At=[null],wt=[],on=this.table,fn="",An=0,oo=0,jo=2,$o=1,Pa=wt.slice.call(arguments,1),wo=Object.create(this.lexer),_s={yy:{}};for(var tl in this.yy)Object.prototype.hasOwnProperty.call(this.yy,tl)&&(_s.yy[tl]=this.yy[tl]);wo.setInput(Tr,_s.yy),_s.yy.lexer=wo,_s.yy.parser=this,typeof wo.yylloc>"u"&&(wo.yylloc={});var da=wo.yylloc;wt.push(da);var j0=wo.options&&wo.options.ranges;typeof _s.yy.parseError=="function"?this.parseError=_s.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function pm(){var ga;return ga=Un.pop()||wo.lex()||$o,typeof ga!="number"&&(ga instanceof Array&&(Un=ga,ga=Un.pop()),ga=Fn.symbols_[ga]||ga),ga}for(var Ml,Xc,Bc,ja,Ou={},Sa,Po,Fc,xa;;){if(Xc=qn[qn.length-1],this.defaultActions[Xc]?Bc=this.defaultActions[Xc]:((Ml===null||typeof Ml>"u")&&(Ml=pm()),Bc=on[Xc]&&on[Xc][Ml]),typeof Bc>"u"||!Bc.length||!Bc[0]){var Ba="";xa=[];for(Sa in on[Xc])this.terminals_[Sa]&&Sa>jo&&xa.push("'"+this.terminals_[Sa]+"'");wo.showPosition?Ba="Parse error on line "+(An+1)+`: -`+wo.showPosition()+` -Expecting `+xa.join(", ")+", got '"+(this.terminals_[Ml]||Ml)+"'":Ba="Parse error on line "+(An+1)+": Unexpected "+(Ml==$o?"end of input":"'"+(this.terminals_[Ml]||Ml)+"'"),this.parseError(Ba,{text:wo.match,token:this.terminals_[Ml]||Ml,line:wo.yylineno,loc:da,expected:xa})}if(Bc[0]instanceof Array&&Bc.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Xc+", token: "+Ml);switch(Bc[0]){case 1:qn.push(Ml),At.push(wo.yytext),wt.push(wo.yylloc),qn.push(Bc[1]),Ml=null,oo=wo.yyleng,fn=wo.yytext,An=wo.yylineno,da=wo.yylloc;break;case 2:if(Po=this.productions_[Bc[1]][1],Ou.$=At[At.length-Po],Ou._$={first_line:wt[wt.length-(Po||1)].first_line,last_line:wt[wt.length-1].last_line,first_column:wt[wt.length-(Po||1)].first_column,last_column:wt[wt.length-1].last_column},j0&&(Ou._$.range=[wt[wt.length-(Po||1)].range[0],wt[wt.length-1].range[1]]),ja=this.performAction.apply(Ou,[fn,oo,An,_s.yy,Bc[1],At,wt].concat(Pa)),typeof ja<"u")return ja;Po&&(qn=qn.slice(0,-1*Po*2),At=At.slice(0,-1*Po),wt=wt.slice(0,-1*Po)),qn.push(this.productions_[Bc[1]][0]),At.push(Ou.$),wt.push(Ou._$),Fc=on[qn[qn.length-2]][qn[qn.length-1]],qn.push(Fc);break;case 3:return!0}}return!0}},Ma=function(){var ao={EOF:1,parseError:function(Fn,qn){if(this.yy.parser)this.yy.parser.parseError(Fn,qn);else throw new Error(Fn)},setInput:function(Tr,Fn){return this.yy=Fn||this.yy||{},this._input=Tr,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var Tr=this._input[0];this.yytext+=Tr,this.yyleng++,this.offset++,this.match+=Tr,this.matched+=Tr;var Fn=Tr.match(/(?:\r\n?|\n).*/g);return Fn?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Tr},unput:function(Tr){var Fn=Tr.length,qn=Tr.split(/(?:\r\n?|\n)/g);this._input=Tr+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Fn),this.offset-=Fn;var Un=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),qn.length-1&&(this.yylineno-=qn.length-1);var At=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:qn?(qn.length===Un.length?this.yylloc.first_column:0)+Un[Un.length-qn.length].length-qn[0].length:this.yylloc.first_column-Fn},this.options.ranges&&(this.yylloc.range=[At[0],At[0]+this.yyleng-Fn]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(Tr){this.unput(this.match.slice(Tr))},pastInput:function(){var Tr=this.matched.substr(0,this.matched.length-this.match.length);return(Tr.length>20?"...":"")+Tr.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Tr=this.match;return Tr.length<20&&(Tr+=this._input.substr(0,20-Tr.length)),(Tr.substr(0,20)+(Tr.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Tr=this.pastInput(),Fn=new Array(Tr.length+1).join("-");return Tr+this.upcomingInput()+` -`+Fn+"^"},test_match:function(Tr,Fn){var qn,Un,At;if(this.options.backtrack_lexer&&(At={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(At.yylloc.range=this.yylloc.range.slice(0))),Un=Tr[0].match(/(?:\r\n?|\n).*/g),Un&&(this.yylineno+=Un.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Un?Un[Un.length-1].length-Un[Un.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Tr[0].length},this.yytext+=Tr[0],this.match+=Tr[0],this.matches=Tr,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Tr[0].length),this.matched+=Tr[0],qn=this.performAction.call(this,this.yy,this,Fn,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),qn)return qn;if(this._backtrack){for(var wt in At)this[wt]=At[wt];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Tr,Fn,qn,Un;this._more||(this.yytext="",this.match="");for(var At=this._currentRules(),wt=0;wtFn[0].length)){if(Fn=qn,Un=wt,this.options.backtrack_lexer){if(Tr=this.test_match(qn,At[wt]),Tr!==!1)return Tr;if(this._backtrack){Fn=!1;continue}else return!1}else if(!this.options.flex)break}return Fn?(Tr=this.test_match(Fn,At[Un]),Tr!==!1?Tr:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Fn=this.next();return Fn||this.lex()},begin:function(Fn){this.conditionStack.push(Fn)},popState:function(){var Fn=this.conditionStack.length-1;return Fn>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Fn){return Fn=this.conditionStack.length-1-Math.abs(Fn||0),Fn>=0?this.conditionStack[Fn]:"INITIAL"},pushState:function(Fn){this.begin(Fn)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(Fn,qn,Un,At){switch(Un){case 0:return 53;case 1:return 54;case 2:return 55;case 3:return 56;case 4:break;case 5:break;case 6:return this.begin("acc_title"),31;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),33;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 8;case 14:break;case 15:return 7;case 16:return 7;case 17:return"EDGE_STATE";case 18:this.begin("callback_name");break;case 19:this.popState();break;case 20:this.popState(),this.begin("callback_args");break;case 21:return 70;case 22:this.popState();break;case 23:return 71;case 24:this.popState();break;case 25:return"STR";case 26:this.begin("string");break;case 27:return 73;case 28:return this.begin("namespace"),40;case 29:return this.popState(),8;case 30:break;case 31:return this.begin("namespace-body"),37;case 32:return this.popState(),39;case 33:return"EOF_IN_STRUCT";case 34:return 8;case 35:break;case 36:return"EDGE_STATE";case 37:return this.begin("class"),44;case 38:return this.popState(),8;case 39:break;case 40:return this.popState(),this.popState(),39;case 41:return this.begin("class-body"),37;case 42:return this.popState(),39;case 43:return"EOF_IN_STRUCT";case 44:return"EDGE_STATE";case 45:return"OPEN_IN_STRUCT";case 46:break;case 47:return"MEMBER";case 48:return 76;case 49:return 66;case 50:return 67;case 51:return 69;case 52:return 50;case 53:return 52;case 54:return 45;case 55:return 46;case 56:return 72;case 57:this.popState();break;case 58:return"GENERICTYPE";case 59:this.begin("generic");break;case 60:this.popState();break;case 61:return"BQUOTE_STR";case 62:this.begin("bqstring");break;case 63:return 68;case 64:return 68;case 65:return 68;case 66:return 68;case 67:return 60;case 68:return 60;case 69:return 62;case 70:return 62;case 71:return 61;case 72:return 59;case 73:return 63;case 74:return 64;case 75:return 65;case 76:return 21;case 77:return 42;case 78:return 95;case 79:return"DOT";case 80:return"PLUS";case 81:return 81;case 82:return 78;case 83:return 84;case 84:return 84;case 85:return 85;case 86:return"EQUALS";case 87:return"EQUALS";case 88:return 74;case 89:return 12;case 90:return 14;case 91:return"PUNCTUATION";case 92:return 80;case 93:return 97;case 94:return 83;case 95:return 83;case 96:return 9}},rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:\[\*\])/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:["])/,/^(?:[^"]*)/,/^(?:["])/,/^(?:style\b)/,/^(?:namespace\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:\[\*\])/,/^(?:class\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[}])/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\[\*\])/,/^(?:[{])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:note for\b)/,/^(?:note\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:href\b)/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:~)/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:[`])/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:\s*\(\))/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?::)/,/^(?:,)/,/^(?:#)/,/^(?:#)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:\[)/,/^(?:\])/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:\s)/,/^(?:$)/],conditions:{"namespace-body":{rules:[26,32,33,34,35,36,37,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},namespace:{rules:[26,28,29,30,31,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},"class-body":{rules:[26,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},class:{rules:[26,38,39,40,41,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},acc_descr_multiline:{rules:[11,12,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},acc_descr:{rules:[9,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},acc_title:{rules:[7,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},callback_args:{rules:[22,23,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},callback_name:{rules:[19,20,21,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},href:{rules:[26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},struct:{rules:[26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},generic:{rules:[26,48,49,50,51,52,53,54,55,56,57,58,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},bqstring:{rules:[26,48,49,50,51,52,53,54,55,56,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},string:{rules:[24,25,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,26,27,28,37,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96],inclusive:!0}}};return ao}();xi.lexer=Ma;function zs(){this.yy={}}return zs.prototype=xi,xi.Parser=zs,new zs}();_ve.parser=_ve;const KGe=_ve,WGe=["#","+","~","-",""];class YGe{constructor(s,u){this.memberType=u,this.visibility="",this.classifier="";const d=Yf(s,qt());this.parseMember(d)}getDisplayDetails(){let s=this.visibility+qF(this.id);this.memberType==="method"&&(s+=`(${qF(this.parameters.trim())})`,this.returnType&&(s+=" : "+qF(this.returnType))),s=s.trim();const u=this.parseClassifier();return{displayText:s,cssStyle:u}}parseMember(s){let u="";if(this.memberType==="method"){const d=/([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/,p=s.match(d);if(p){const v=p[1]?p[1].trim():"";if(WGe.includes(v)&&(this.visibility=v),this.id=p[2].trim(),this.parameters=p[3]?p[3].trim():"",u=p[4]?p[4].trim():"",this.returnType=p[5]?p[5].trim():"",u===""){const b=this.returnType.substring(this.returnType.length-1);b.match(/[$*]/)&&(u=b,this.returnType=this.returnType.substring(0,this.returnType.length-1))}}}else{const d=s.length,p=s.substring(0,1),v=s.substring(d-1);WGe.includes(p)&&(this.visibility=p),v.match(/[$*]/)&&(u=v),this.id=s.substring(this.visibility===""?0:1,u===""?d:d-1)}this.classifier=u}parseClassifier(){switch(this.classifier){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}}}const mJ="classId-";let Ave=[],xh={},vJ=[],XGe=0,R9={},Lve=0,WR=[];const tS=i=>ci.sanitizeText(i,qt()),nS=function(i){const s=ci.sanitizeText(i,qt());let u="",d=s;if(s.indexOf("~")>0){const p=s.split("~");d=tS(p[0]),u=tS(p[1])}return{className:d,type:u}},Ein=function(i,s){const u=ci.sanitizeText(i,qt());s&&(s=tS(s));const{className:d}=nS(u);xh[d].label=s},wJ=function(i){const s=ci.sanitizeText(i,qt()),{className:u,type:d}=nS(s);if(Object.hasOwn(xh,u))return;const p=ci.sanitizeText(u,qt());xh[p]={id:p,type:d,label:p,cssClasses:[],methods:[],members:[],annotations:[],styles:[],domId:mJ+p+"-"+XGe},XGe++},QGe=function(i){const s=ci.sanitizeText(i,qt());if(s in xh)return xh[s].domId;throw new Error("Class not found: "+s)},Tin=function(){Ave=[],xh={},vJ=[],WR=[],WR.push(ZGe),R9={},Lve=0,Pg()},Cin=function(i){return xh[i]},Sin=function(){return xh},_in=function(){return Ave},Ain=function(){return vJ},Lin=function(i){Xe.debug("Adding relation: "+JSON.stringify(i)),wJ(i.id1),wJ(i.id2),i.id1=nS(i.id1).className,i.id2=nS(i.id2).className,i.relationTitle1=ci.sanitizeText(i.relationTitle1.trim(),qt()),i.relationTitle2=ci.sanitizeText(i.relationTitle2.trim(),qt()),Ave.push(i)},Min=function(i,s){const u=nS(i).className;xh[u].annotations.push(s)},JGe=function(i,s){wJ(i);const u=nS(i).className,d=xh[u];if(typeof s=="string"){const p=s.trim();p.startsWith("<<")&&p.endsWith(">>")?d.annotations.push(tS(p.substring(2,p.length-2))):p.indexOf(")")>0?d.methods.push(new YGe(p,"method")):p&&d.members.push(new YGe(p,"attribute"))}},Din=function(i,s){Array.isArray(s)&&(s.reverse(),s.forEach(u=>JGe(i,u)))},Iin=function(i,s){const u={id:`note${vJ.length}`,class:s,text:i};vJ.push(u)},Oin=function(i){return i.startsWith(":")&&(i=i.substring(1)),tS(i.trim())},Mve=function(i,s){i.split(",").forEach(function(u){let d=u;u[0].match(/\d/)&&(d=mJ+d),xh[d]!==void 0&&xh[d].cssClasses.push(s)})},Nin=function(i,s){i.split(",").forEach(function(u){s!==void 0&&(xh[u].tooltip=tS(s))})},Pin=function(i,s){return s?R9[s].classes[i].tooltip:xh[i].tooltip},Bin=function(i,s,u){const d=qt();i.split(",").forEach(function(p){let v=p;p[0].match(/\d/)&&(v=mJ+v),xh[v]!==void 0&&(xh[v].link=Ao.formatUrl(s,d),d.securityLevel==="sandbox"?xh[v].linkTarget="_top":typeof u=="string"?xh[v].linkTarget=tS(u):xh[v].linkTarget="_blank")}),Mve(i,"clickable")},Fin=function(i,s,u){i.split(",").forEach(function(d){Rin(d,s,u),xh[d].haveCallback=!0}),Mve(i,"clickable")},Rin=function(i,s,u){const d=ci.sanitizeText(i,qt());if(qt().securityLevel!=="loose"||s===void 0)return;const v=d;if(xh[v]!==void 0){const b=QGe(v);let y=[];if(typeof u=="string"){y=u.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let T=0;T")),p.classed("hover",!0)}).on("mouseout",function(){s.transition().duration(500).style("opacity",0),Ir(this).classed("hover",!1)})};WR.push(ZGe);let eKe="TB";const yJ={setAccTitle:Bg,getAccTitle:Cp,getAccDescription:_p,setAccDescription:Sp,getConfig:()=>qt().class,addClass:wJ,bindFunctions:jin,clear:Tin,getClass:Cin,getClasses:Sin,getNotes:Ain,addAnnotation:Min,addNote:Iin,getRelations:_in,addRelation:Lin,getDirection:()=>eKe,setDirection:i=>{eKe=i},addMember:JGe,addMembers:Din,cleanupLabel:Oin,lineType:$in,relationType:zin,setClickEvent:Fin,setCssClass:Mve,setLink:Bin,getTooltip:Pin,setTooltip:Nin,lookUpDomId:QGe,setDiagramTitle:cm,getDiagramTitle:Ap,setClassLabel:Ein,addNamespace:function(i){R9[i]===void 0&&(R9[i]={id:i,classes:{},children:{},domId:mJ+i+"-"+Lve},Lve++)},addClassesToNamespace:function(i,s){if(R9[i]!==void 0)for(const u of s){const{className:d}=nS(u);xh[d].parent=i,R9[i].classes[d]=xh[d]}},getNamespace:function(i){return R9[i]},getNamespaces:function(){return R9},setCssStyle:function(i,s){const u=xh[i];if(!(!s||!u))for(const d of s)d.includes(",")?u.styles.push(...d.split(",")):u.styles.push(d)}},tKe=i=>`g.classGroup text { - fill: ${i.nodeBorder||i.classText}; +`,"getStyles"),Kfe=WUe});var CO,kf,Jfe,ede,YUe,Zfe,AO,qUe,XUe,Px,I0,tde,Xc,_O,jUe,KUe,QUe,ZUe,JUe,eHe,tHe,rde,rHe,nHe,iHe,aHe,sHe,oHe,lHe,nde,cHe,LO,uHe,fi,ide=M(()=>{"use strict";fr();lv();hr();CO=Ji(Qp(),1);Za();kf=18*2,Jfe="actor-top",ede="actor-bottom",YUe="actor-box",Zfe="actor-man",AO=o(function(t,e){return Sd(t,e)},"drawRect"),qUe=o(function(t,e,r,n,i){if(e.links===void 0||e.links===null||Object.keys(e.links).length===0)return{height:0,width:0};let a=e.links,s=e.actorCnt,l=e.rectData;var u="none";i&&(u="block !important");let h=t.append("g");h.attr("id","actor"+s+"_popup"),h.attr("class","actorPopupMenu"),h.attr("display",u);var f="";l.class!==void 0&&(f=" "+l.class);let d=l.width>r?l.width:r,p=h.append("rect");if(p.attr("class","actorPopupMenuPanel"+f),p.attr("x",l.x),p.attr("y",l.height),p.attr("fill",l.fill),p.attr("stroke",l.stroke),p.attr("width",d),p.attr("height",l.height),p.attr("rx",l.rx),p.attr("ry",l.ry),a!=null){var m=20;for(let v in a){var g=h.append("a"),y=(0,CO.sanitizeUrl)(a[v]);g.attr("xlink:href",y),g.attr("target","_blank"),uHe(n)(v,g,l.x+10,l.height+m,d,20,{class:"actor"},n),m+=30}}return p.attr("height",m),{height:l.height+m,width:d}},"drawPopup"),XUe=o(function(t){return"var pu = document.getElementById('"+t+"'); if (pu != null) { pu.style.display = pu.style.display == 'block' ? 'none' : 'block'; }"},"popupMenuToggle"),Px=o(async function(t,e,r=null){let n=t.append("foreignObject"),i=await bh(e.text,Cr()),s=n.append("xhtml:div").attr("style","width: fit-content;").attr("xmlns","http://www.w3.org/1999/xhtml").html(i).node().getBoundingClientRect();if(n.attr("height",Math.round(s.height)).attr("width",Math.round(s.width)),e.class==="noteText"){let l=t.node().firstChild;l.setAttribute("height",s.height+2*e.textMargin);let u=l.getBBox();n.attr("x",Math.round(u.x+u.width/2-s.width/2)).attr("y",Math.round(u.y+u.height/2-s.height/2))}else if(r){let{startx:l,stopx:u,starty:h}=r;if(l>u){let f=l;l=u,u=f}n.attr("x",Math.round(l+Math.abs(l-u)/2-s.width/2)),e.class==="loopText"?n.attr("y",Math.round(h)):n.attr("y",Math.round(h-s.height))}return[n]},"drawKatex"),I0=o(function(t,e){let r=0,n=0,i=e.text.split(qe.lineBreakRegex),[a,s]=Ho(e.fontSize),l=[],u=0,h=o(()=>e.y,"yfunc");if(e.valign!==void 0&&e.textMargin!==void 0&&e.textMargin>0)switch(e.valign){case"top":case"start":h=o(()=>Math.round(e.y+e.textMargin),"yfunc");break;case"middle":case"center":h=o(()=>Math.round(e.y+(r+n+e.textMargin)/2),"yfunc");break;case"bottom":case"end":h=o(()=>Math.round(e.y+(r+n+2*e.textMargin)-e.textMargin),"yfunc");break}if(e.anchor!==void 0&&e.textMargin!==void 0&&e.width!==void 0)switch(e.anchor){case"left":case"start":e.x=Math.round(e.x+e.textMargin),e.anchor="start",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"middle":case"center":e.x=Math.round(e.x+e.width/2),e.anchor="middle",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"right":case"end":e.x=Math.round(e.x+e.width-e.textMargin),e.anchor="end",e.dominantBaseline="middle",e.alignmentBaseline="middle";break}for(let[f,d]of i.entries()){e.textMargin!==void 0&&e.textMargin===0&&a!==void 0&&(u=f*a);let p=t.append("text");p.attr("x",e.x),p.attr("y",h()),e.anchor!==void 0&&p.attr("text-anchor",e.anchor).attr("dominant-baseline",e.dominantBaseline).attr("alignment-baseline",e.alignmentBaseline),e.fontFamily!==void 0&&p.style("font-family",e.fontFamily),s!==void 0&&p.style("font-size",s),e.fontWeight!==void 0&&p.style("font-weight",e.fontWeight),e.fill!==void 0&&p.attr("fill",e.fill),e.class!==void 0&&p.attr("class",e.class),e.dy!==void 0?p.attr("dy",e.dy):u!==0&&p.attr("dy",u);let m=d||Z_;if(e.tspan){let g=p.append("tspan");g.attr("x",e.x),e.fill!==void 0&&g.attr("fill",e.fill),g.text(m)}else p.text(m);e.valign!==void 0&&e.textMargin!==void 0&&e.textMargin>0&&(n+=(p._groups||p)[0][0].getBBox().height,r=n),l.push(p)}return l},"drawText"),tde=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");return n.attr("points",r(e.x,e.y,e.width,e.height,7)),n.attr("class","labelBox"),e.y=e.y+e.height/2,I0(t,e),n},"drawLabel"),Xc=-1,_O=o((t,e,r,n)=>{t.select&&r.forEach(i=>{let a=e.get(i),s=t.select("#actor"+a.actorCnt);!n.mirrorActors&&a.stopy?s.attr("y2",a.stopy+a.height/2):n.mirrorActors&&s.attr("y2",a.stopy)})},"fixLifeLineHeights"),jUe=o(function(t,e,r,n){let i=n?e.stopy:e.starty,a=e.x+e.width/2,s=i+e.height,l=t.append("g").lower();var u=l;n||(Xc++,Object.keys(e.links||{}).length&&!r.forceMenus&&u.attr("onclick",XUe(`actor${Xc}_popup`)).attr("cursor","pointer"),u.append("line").attr("id","actor"+Xc).attr("x1",a).attr("y1",s).attr("x2",a).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name),u=l.append("g"),e.actorCnt=Xc,e.links!=null&&u.attr("id","root-"+Xc));let h=Nl();var f="actor";e.properties?.class?f=e.properties.class:h.fill="#eaeaea",n?f+=` ${ede}`:f+=` ${Jfe}`,h.x=e.x,h.y=i,h.width=e.width,h.height=e.height,h.class=f,h.rx=3,h.ry=3,h.name=e.name;let d=AO(u,h);if(e.rectData=h,e.properties?.icon){let m=e.properties.icon.trim();m.charAt(0)==="@"?LY(u,h.x+h.width-20,h.y+10,m.substr(1)):_Y(u,h.x+h.width-20,h.y+10,m)}LO(r,yi(e.description))(e.description,u,h.x,h.y,h.width,h.height,{class:`actor ${YUe}`},r);let p=e.height;if(d.node){let m=d.node().getBBox();e.height=m.height,p=m.height}return p},"drawActorTypeParticipant"),KUe=o(function(t,e,r,n){let i=n?e.stopy:e.starty,a=e.x+e.width/2,s=i+80,l=t.append("g").lower();n||(Xc++,l.append("line").attr("id","actor"+Xc).attr("x1",a).attr("y1",s).attr("x2",a).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name),e.actorCnt=Xc);let u=t.append("g"),h=Zfe;n?h+=` ${ede}`:h+=` ${Jfe}`,u.attr("class",h),u.attr("name",e.name);let f=Nl();f.x=e.x,f.y=i,f.fill="#eaeaea",f.width=e.width,f.height=e.height,f.class="actor",f.rx=3,f.ry=3,u.append("line").attr("id","actor-man-torso"+Xc).attr("x1",a).attr("y1",i+25).attr("x2",a).attr("y2",i+45),u.append("line").attr("id","actor-man-arms"+Xc).attr("x1",a-kf/2).attr("y1",i+33).attr("x2",a+kf/2).attr("y2",i+33),u.append("line").attr("x1",a-kf/2).attr("y1",i+60).attr("x2",a).attr("y2",i+45),u.append("line").attr("x1",a).attr("y1",i+45).attr("x2",a+kf/2-2).attr("y2",i+60);let d=u.append("circle");d.attr("cx",e.x+e.width/2),d.attr("cy",i+10),d.attr("r",15),d.attr("width",e.width),d.attr("height",e.height);let p=u.node().getBBox();return e.height=p.height,LO(r,yi(e.description))(e.description,u,f.x,f.y+35,f.width,f.height,{class:`actor ${Zfe}`},r),e.height},"drawActorTypeActor"),QUe=o(async function(t,e,r,n){switch(e.type){case"actor":return await KUe(t,e,r,n);case"participant":return await jUe(t,e,r,n)}},"drawActor"),ZUe=o(function(t,e,r){let i=t.append("g");rde(i,e),e.name&&LO(r)(e.name,i,e.x,e.y+(e.textMaxHeight||0)/2,e.width,0,{class:"text"},r),i.lower()},"drawBox"),JUe=o(function(t){return t.append("g")},"anchorElement"),eHe=o(function(t,e,r,n,i){let a=Nl(),s=e.anchored;a.x=e.startx,a.y=e.starty,a.class="activation"+i%3,a.width=e.stopx-e.startx,a.height=r-e.starty,AO(s,a)},"drawActivation"),tHe=o(async function(t,e,r,n){let{boxMargin:i,boxTextMargin:a,labelBoxHeight:s,labelBoxWidth:l,messageFontFamily:u,messageFontSize:h,messageFontWeight:f}=n,d=t.append("g"),p=o(function(y,v,x,b){return d.append("line").attr("x1",y).attr("y1",v).attr("x2",x).attr("y2",b).attr("class","loopLine")},"drawLoopLine");p(e.startx,e.starty,e.stopx,e.starty),p(e.stopx,e.starty,e.stopx,e.stopy),p(e.startx,e.stopy,e.stopx,e.stopy),p(e.startx,e.starty,e.startx,e.stopy),e.sections!==void 0&&e.sections.forEach(function(y){p(e.startx,y.y,e.stopx,y.y).style("stroke-dasharray","3, 3")});let m=ov();m.text=r,m.x=e.startx,m.y=e.starty,m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.anchor="middle",m.valign="middle",m.tspan=!1,m.width=l||50,m.height=s||20,m.textMargin=a,m.class="labelText",tde(d,m),m=nde(),m.text=e.title,m.x=e.startx+l/2+(e.stopx-e.startx)/2,m.y=e.starty+i+a,m.anchor="middle",m.valign="middle",m.textMargin=a,m.class="loopText",m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.wrap=!0;let g=yi(m.text)?await Px(d,m,e):I0(d,m);if(e.sectionTitles!==void 0){for(let[y,v]of Object.entries(e.sectionTitles))if(v.message){m.text=v.message,m.x=e.startx+(e.stopx-e.startx)/2,m.y=e.sections[y].y+i+a,m.class="loopText",m.anchor="middle",m.valign="middle",m.tspan=!1,m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.wrap=e.wrap,yi(m.text)?(e.starty=e.sections[y].y,await Px(d,m,e)):I0(d,m);let x=Math.round(g.map(b=>(b._groups||b)[0][0].getBBox().height).reduce((b,w)=>b+w));e.sections[y].height+=x-(i+a)}}return e.height=Math.round(e.stopy-e.starty),d},"drawLoop"),rde=o(function(t,e){i5(t,e)},"drawBackgroundRect"),rHe=o(function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},"insertDatabaseIcon"),nHe=o(function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},"insertComputerIcon"),iHe=o(function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},"insertClockIcon"),aHe=o(function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",7.9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto-start-reverse").append("path").attr("d","M -1 0 L 10 5 L 0 10 z")},"insertArrowHead"),sHe=o(function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",15.5).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"insertArrowFilledHead"),oHe=o(function(t){t.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},"insertSequenceNumber"),lHe=o(function(t){t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",4).attr("refY",4.5).append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1pt").attr("d","M 1,2 L 6,7 M 6,2 L 1,7")},"insertArrowCrossHead"),nde=o(function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},"getTextObj"),cHe=o(function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},"getNoteRect"),LO=function(){function t(a,s,l,u,h,f,d){let p=s.append("text").attr("x",l+h/2).attr("y",u+f/2+5).style("text-anchor","middle").text(a);i(p,d)}o(t,"byText");function e(a,s,l,u,h,f,d,p){let{actorFontSize:m,actorFontFamily:g,actorFontWeight:y}=p,[v,x]=Ho(m),b=a.split(qe.lineBreakRegex);for(let w=0;w{let s=O0(De),l=a.actorKeys.reduce((f,d)=>f+=t.get(d).width+(t.get(d).margin||0),0);l-=2*De.boxTextMargin,a.wrap&&(a.name=Ut.wrapLabel(a.name,l-2*De.wrapPadding,s));let u=Ut.calculateTextDimensions(a.name,s);i=qe.getMax(u.height,i);let h=qe.getMax(l,u.width+2*De.wrapPadding);if(a.margin=De.boxTextMargin,la.textMaxHeight=i),qe.getMax(n,De.height)}var De,nt,hHe,O0,Qg,DO,dHe,pHe,NO,sde,ode,IE,ade,gHe,vHe,bHe,wHe,THe,lde,cde=M(()=>{"use strict";pr();ide();ut();fr();lv();Vt();gp();hr();ai();De={},nt={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],models:{getHeight:o(function(){return Math.max.apply(null,this.actors.length===0?[0]:this.actors.map(t=>t.height||0))+(this.loops.length===0?0:this.loops.map(t=>t.height||0).reduce((t,e)=>t+e))+(this.messages.length===0?0:this.messages.map(t=>t.height||0).reduce((t,e)=>t+e))+(this.notes.length===0?0:this.notes.map(t=>t.height||0).reduce((t,e)=>t+e))},"getHeight"),clear:o(function(){this.actors=[],this.boxes=[],this.loops=[],this.messages=[],this.notes=[]},"clear"),addBox:o(function(t){this.boxes.push(t)},"addBox"),addActor:o(function(t){this.actors.push(t)},"addActor"),addLoop:o(function(t){this.loops.push(t)},"addLoop"),addMessage:o(function(t){this.messages.push(t)},"addMessage"),addNote:o(function(t){this.notes.push(t)},"addNote"),lastActor:o(function(){return this.actors[this.actors.length-1]},"lastActor"),lastLoop:o(function(){return this.loops[this.loops.length-1]},"lastLoop"),lastMessage:o(function(){return this.messages[this.messages.length-1]},"lastMessage"),lastNote:o(function(){return this.notes[this.notes.length-1]},"lastNote"),actors:[],boxes:[],loops:[],messages:[],notes:[]},init:o(function(){this.sequenceItems=[],this.activations=[],this.models.clear(),this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0,ode(pe())},"init"),updateVal:o(function(t,e,r,n){t[e]===void 0?t[e]=r:t[e]=n(r,t[e])},"updateVal"),updateBounds:o(function(t,e,r,n){let i=this,a=0;function s(l){return o(function(h){a++;let f=i.sequenceItems.length-a+1;i.updateVal(h,"starty",e-f*De.boxMargin,Math.min),i.updateVal(h,"stopy",n+f*De.boxMargin,Math.max),i.updateVal(nt.data,"startx",t-f*De.boxMargin,Math.min),i.updateVal(nt.data,"stopx",r+f*De.boxMargin,Math.max),l!=="activation"&&(i.updateVal(h,"startx",t-f*De.boxMargin,Math.min),i.updateVal(h,"stopx",r+f*De.boxMargin,Math.max),i.updateVal(nt.data,"starty",e-f*De.boxMargin,Math.min),i.updateVal(nt.data,"stopy",n+f*De.boxMargin,Math.max))},"updateItemBounds")}o(s,"updateFn"),this.sequenceItems.forEach(s()),this.activations.forEach(s("activation"))},"updateBounds"),insert:o(function(t,e,r,n){let i=qe.getMin(t,r),a=qe.getMax(t,r),s=qe.getMin(e,n),l=qe.getMax(e,n);this.updateVal(nt.data,"startx",i,Math.min),this.updateVal(nt.data,"starty",s,Math.min),this.updateVal(nt.data,"stopx",a,Math.max),this.updateVal(nt.data,"stopy",l,Math.max),this.updateBounds(i,s,a,l)},"insert"),newActivation:o(function(t,e,r){let n=r.get(t.from),i=IE(t.from).length||0,a=n.x+n.width/2+(i-1)*De.activationWidth/2;this.activations.push({startx:a,starty:this.verticalPos+2,stopx:a+De.activationWidth,stopy:void 0,actor:t.from,anchored:fi.anchorElement(e)})},"newActivation"),endActivation:o(function(t){let e=this.activations.map(function(r){return r.actor}).lastIndexOf(t.from);return this.activations.splice(e,1)[0]},"endActivation"),createLoop:o(function(t={message:void 0,wrap:!1,width:void 0},e){return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t.message,wrap:t.wrap,width:t.width,height:0,fill:e}},"createLoop"),newLoop:o(function(t={message:void 0,wrap:!1,width:void 0},e){this.sequenceItems.push(this.createLoop(t,e))},"newLoop"),endLoop:o(function(){return this.sequenceItems.pop()},"endLoop"),isLoopOverlap:o(function(){return this.sequenceItems.length?this.sequenceItems[this.sequenceItems.length-1].overlap:!1},"isLoopOverlap"),addSectionToLoop:o(function(t){let e=this.sequenceItems.pop();e.sections=e.sections||[],e.sectionTitles=e.sectionTitles||[],e.sections.push({y:nt.getVerticalPos(),height:0}),e.sectionTitles.push(t),this.sequenceItems.push(e)},"addSectionToLoop"),saveVerticalPos:o(function(){this.isLoopOverlap()&&(this.savedVerticalPos=this.verticalPos)},"saveVerticalPos"),resetVerticalPos:o(function(){this.isLoopOverlap()&&(this.verticalPos=this.savedVerticalPos)},"resetVerticalPos"),bumpVerticalPos:o(function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=qe.getMax(this.data.stopy,this.verticalPos)},"bumpVerticalPos"),getVerticalPos:o(function(){return this.verticalPos},"getVerticalPos"),getBounds:o(function(){return{bounds:this.data,models:this.models}},"getBounds")},hHe=o(async function(t,e){nt.bumpVerticalPos(De.boxMargin),e.height=De.boxMargin,e.starty=nt.getVerticalPos();let r=Nl();r.x=e.startx,r.y=e.starty,r.width=e.width||De.width,r.class="note";let n=t.append("g"),i=fi.drawRect(n,r),a=ov();a.x=e.startx,a.y=e.starty,a.width=r.width,a.dy="1em",a.text=e.message,a.class="noteText",a.fontFamily=De.noteFontFamily,a.fontSize=De.noteFontSize,a.fontWeight=De.noteFontWeight,a.anchor=De.noteAlign,a.textMargin=De.noteMargin,a.valign="center";let s=yi(a.text)?await Px(n,a):I0(n,a),l=Math.round(s.map(u=>(u._groups||u)[0][0].getBBox().height).reduce((u,h)=>u+h));i.attr("height",l+2*De.noteMargin),e.height+=l+2*De.noteMargin,nt.bumpVerticalPos(l+2*De.noteMargin),e.stopy=e.starty+l+2*De.noteMargin,e.stopx=e.startx+r.width,nt.insert(e.startx,e.starty,e.stopx,e.stopy),nt.models.addNote(e)},"drawNote"),O0=o(t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),"messageFont"),Qg=o(t=>({fontFamily:t.noteFontFamily,fontSize:t.noteFontSize,fontWeight:t.noteFontWeight}),"noteFont"),DO=o(t=>({fontFamily:t.actorFontFamily,fontSize:t.actorFontSize,fontWeight:t.actorFontWeight}),"actorFont");o(fHe,"boundMessage");dHe=o(async function(t,e,r,n){let{startx:i,stopx:a,starty:s,message:l,type:u,sequenceIndex:h,sequenceVisible:f}=e,d=Ut.calculateTextDimensions(l,O0(De)),p=ov();p.x=i,p.y=s+10,p.width=a-i,p.class="messageText",p.dy="1em",p.text=l,p.fontFamily=De.messageFontFamily,p.fontSize=De.messageFontSize,p.fontWeight=De.messageFontWeight,p.anchor=De.messageAlign,p.valign="center",p.textMargin=De.wrapPadding,p.tspan=!1,yi(p.text)?await Px(t,p,{startx:i,stopx:a,starty:r}):I0(t,p);let m=d.width,g;i===a?De.rightAngles?g=t.append("path").attr("d",`M ${i},${r} H ${i+qe.getMax(De.width/2,m/2)} V ${r+25} H ${i}`):g=t.append("path").attr("d","M "+i+","+r+" C "+(i+60)+","+(r-10)+" "+(i+60)+","+(r+30)+" "+i+","+(r+20)):(g=t.append("line"),g.attr("x1",i),g.attr("y1",r),g.attr("x2",a),g.attr("y2",r)),u===n.db.LINETYPE.DOTTED||u===n.db.LINETYPE.DOTTED_CROSS||u===n.db.LINETYPE.DOTTED_POINT||u===n.db.LINETYPE.DOTTED_OPEN||u===n.db.LINETYPE.BIDIRECTIONAL_DOTTED?(g.style("stroke-dasharray","3, 3"),g.attr("class","messageLine1")):g.attr("class","messageLine0");let y="";De.arrowMarkerAbsolute&&(y=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,y=y.replace(/\(/g,"\\("),y=y.replace(/\)/g,"\\)")),g.attr("stroke-width",2),g.attr("stroke","none"),g.style("fill","none"),(u===n.db.LINETYPE.SOLID||u===n.db.LINETYPE.DOTTED)&&g.attr("marker-end","url("+y+"#arrowhead)"),(u===n.db.LINETYPE.BIDIRECTIONAL_SOLID||u===n.db.LINETYPE.BIDIRECTIONAL_DOTTED)&&(g.attr("marker-start","url("+y+"#arrowhead)"),g.attr("marker-end","url("+y+"#arrowhead)")),(u===n.db.LINETYPE.SOLID_POINT||u===n.db.LINETYPE.DOTTED_POINT)&&g.attr("marker-end","url("+y+"#filled-head)"),(u===n.db.LINETYPE.SOLID_CROSS||u===n.db.LINETYPE.DOTTED_CROSS)&&g.attr("marker-end","url("+y+"#crosshead)"),(f||De.showSequenceNumbers)&&(g.attr("marker-start","url("+y+"#sequencenumber)"),t.append("text").attr("x",i).attr("y",r+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("class","sequenceNumber").text(h))},"drawMessage"),pHe=o(function(t,e,r,n,i,a,s){let l=0,u=0,h,f=0;for(let d of n){let p=e.get(d),m=p.box;h&&h!=m&&(s||nt.models.addBox(h),u+=De.boxMargin+h.margin),m&&m!=h&&(s||(m.x=l+u,m.y=i),u+=m.margin),p.width=p.width||De.width,p.height=qe.getMax(p.height||De.height,De.height),p.margin=p.margin||De.actorMargin,f=qe.getMax(f,p.height),r.get(p.name)&&(u+=p.width/2),p.x=l+u,p.starty=nt.getVerticalPos(),nt.insert(p.x,i,p.x+p.width,p.height),l+=p.width+u,p.box&&(p.box.width=l+m.margin-p.box.x),u=p.margin,h=p.box,nt.models.addActor(p)}h&&!s&&nt.models.addBox(h),nt.bumpVerticalPos(f)},"addActorRenderingData"),NO=o(async function(t,e,r,n){if(n){let i=0;nt.bumpVerticalPos(De.boxMargin*2);for(let a of r){let s=e.get(a);s.stopy||(s.stopy=nt.getVerticalPos());let l=await fi.drawActor(t,s,De,!0);i=qe.getMax(i,l)}nt.bumpVerticalPos(i+De.boxMargin)}else for(let i of r){let a=e.get(i);await fi.drawActor(t,a,De,!1)}},"drawActors"),sde=o(function(t,e,r,n){let i=0,a=0;for(let s of r){let l=e.get(s),u=vHe(l),h=fi.drawPopup(t,l,u,De,De.forceMenus,n);h.height>i&&(i=h.height),h.width+l.x>a&&(a=h.width+l.x)}return{maxHeight:i,maxWidth:a}},"drawActorsPopup"),ode=o(function(t){Vn(De,t),t.fontFamily&&(De.actorFontFamily=De.noteFontFamily=De.messageFontFamily=t.fontFamily),t.fontSize&&(De.actorFontSize=De.noteFontSize=De.messageFontSize=t.fontSize),t.fontWeight&&(De.actorFontWeight=De.noteFontWeight=De.messageFontWeight=t.fontWeight)},"setConf"),IE=o(function(t){return nt.activations.filter(function(e){return e.actor===t})},"actorActivations"),ade=o(function(t,e){let r=e.get(t),n=IE(t),i=n.reduce(function(s,l){return qe.getMin(s,l.startx)},r.x+r.width/2-1),a=n.reduce(function(s,l){return qe.getMax(s,l.stopx)},r.x+r.width/2+1);return[i,a]},"activationBounds");o(jc,"adjustLoopHeightForWrap");o(mHe,"adjustCreatedDestroyedData");gHe=o(async function(t,e,r,n){let{securityLevel:i,sequence:a}=pe();De=a;let s;i==="sandbox"&&(s=Ve("#i"+e));let l=i==="sandbox"?Ve(s.nodes()[0].contentDocument.body):Ve("body"),u=i==="sandbox"?s.nodes()[0].contentDocument:document;nt.init(),Y.debug(n.db);let h=i==="sandbox"?l.select(`[id="${e}"]`):Ve(`[id="${e}"]`),f=n.db.getActors(),d=n.db.getCreatedActors(),p=n.db.getDestroyedActors(),m=n.db.getBoxes(),g=n.db.getActorKeys(),y=n.db.getMessages(),v=n.db.getDiagramTitle(),x=n.db.hasAtLeastOneBox(),b=n.db.hasAtLeastOneBoxWithTitle(),w=await yHe(f,y,n);if(De.height=await xHe(f,w,m),fi.insertComputerIcon(h),fi.insertDatabaseIcon(h),fi.insertClockIcon(h),x&&(nt.bumpVerticalPos(De.boxMargin),b&&nt.bumpVerticalPos(m[0].textMaxHeight)),De.hideUnusedParticipants===!0){let F=new Set;y.forEach(B=>{F.add(B.from),F.add(B.to)}),g=g.filter(B=>F.has(B))}pHe(h,f,d,g,0,y,!1);let _=await THe(y,f,w,n);fi.insertArrowHead(h),fi.insertArrowCrossHead(h),fi.insertArrowFilledHead(h),fi.insertSequenceNumber(h);function T(F,B){let G=nt.endActivation(F);G.starty+18>B&&(G.starty=B-6,B+=12),fi.drawActivation(h,G,B,De,IE(F.from).length),nt.insert(G.startx,B-10,G.stopx,B)}o(T,"activeEnd");let E=1,L=1,S=[],A=[],I=0;for(let F of y){let B,G,z;switch(F.type){case n.db.LINETYPE.NOTE:nt.resetVerticalPos(),G=F.noteModel,await hHe(h,G);break;case n.db.LINETYPE.ACTIVE_START:nt.newActivation(F,h,f);break;case n.db.LINETYPE.ACTIVE_END:T(F,nt.getVerticalPos());break;case n.db.LINETYPE.LOOP_START:jc(_,F,De.boxMargin,De.boxMargin+De.boxTextMargin,W=>nt.newLoop(W));break;case n.db.LINETYPE.LOOP_END:B=nt.endLoop(),await fi.drawLoop(h,B,"loop",De),nt.bumpVerticalPos(B.stopy-nt.getVerticalPos()),nt.models.addLoop(B);break;case n.db.LINETYPE.RECT_START:jc(_,F,De.boxMargin,De.boxMargin,W=>nt.newLoop(void 0,W.message));break;case n.db.LINETYPE.RECT_END:B=nt.endLoop(),A.push(B),nt.models.addLoop(B),nt.bumpVerticalPos(B.stopy-nt.getVerticalPos());break;case n.db.LINETYPE.OPT_START:jc(_,F,De.boxMargin,De.boxMargin+De.boxTextMargin,W=>nt.newLoop(W));break;case n.db.LINETYPE.OPT_END:B=nt.endLoop(),await fi.drawLoop(h,B,"opt",De),nt.bumpVerticalPos(B.stopy-nt.getVerticalPos()),nt.models.addLoop(B);break;case n.db.LINETYPE.ALT_START:jc(_,F,De.boxMargin,De.boxMargin+De.boxTextMargin,W=>nt.newLoop(W));break;case n.db.LINETYPE.ALT_ELSE:jc(_,F,De.boxMargin+De.boxTextMargin,De.boxMargin,W=>nt.addSectionToLoop(W));break;case n.db.LINETYPE.ALT_END:B=nt.endLoop(),await fi.drawLoop(h,B,"alt",De),nt.bumpVerticalPos(B.stopy-nt.getVerticalPos()),nt.models.addLoop(B);break;case n.db.LINETYPE.PAR_START:case n.db.LINETYPE.PAR_OVER_START:jc(_,F,De.boxMargin,De.boxMargin+De.boxTextMargin,W=>nt.newLoop(W)),nt.saveVerticalPos();break;case n.db.LINETYPE.PAR_AND:jc(_,F,De.boxMargin+De.boxTextMargin,De.boxMargin,W=>nt.addSectionToLoop(W));break;case n.db.LINETYPE.PAR_END:B=nt.endLoop(),await fi.drawLoop(h,B,"par",De),nt.bumpVerticalPos(B.stopy-nt.getVerticalPos()),nt.models.addLoop(B);break;case n.db.LINETYPE.AUTONUMBER:E=F.message.start||E,L=F.message.step||L,F.message.visible?n.db.enableSequenceNumbers():n.db.disableSequenceNumbers();break;case n.db.LINETYPE.CRITICAL_START:jc(_,F,De.boxMargin,De.boxMargin+De.boxTextMargin,W=>nt.newLoop(W));break;case n.db.LINETYPE.CRITICAL_OPTION:jc(_,F,De.boxMargin+De.boxTextMargin,De.boxMargin,W=>nt.addSectionToLoop(W));break;case n.db.LINETYPE.CRITICAL_END:B=nt.endLoop(),await fi.drawLoop(h,B,"critical",De),nt.bumpVerticalPos(B.stopy-nt.getVerticalPos()),nt.models.addLoop(B);break;case n.db.LINETYPE.BREAK_START:jc(_,F,De.boxMargin,De.boxMargin+De.boxTextMargin,W=>nt.newLoop(W));break;case n.db.LINETYPE.BREAK_END:B=nt.endLoop(),await fi.drawLoop(h,B,"break",De),nt.bumpVerticalPos(B.stopy-nt.getVerticalPos()),nt.models.addLoop(B);break;default:try{z=F.msgModel,z.starty=nt.getVerticalPos(),z.sequenceIndex=E,z.sequenceVisible=n.db.showSequenceNumbers();let W=await fHe(h,z);mHe(F,z,W,I,f,d,p),S.push({messageModel:z,lineStartY:W}),nt.models.addMessage(z)}catch(W){Y.error("error while drawing message",W)}}[n.db.LINETYPE.SOLID_OPEN,n.db.LINETYPE.DOTTED_OPEN,n.db.LINETYPE.SOLID,n.db.LINETYPE.DOTTED,n.db.LINETYPE.SOLID_CROSS,n.db.LINETYPE.DOTTED_CROSS,n.db.LINETYPE.SOLID_POINT,n.db.LINETYPE.DOTTED_POINT,n.db.LINETYPE.BIDIRECTIONAL_SOLID,n.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes(F.type)&&(E=E+L),I++}Y.debug("createdActors",d),Y.debug("destroyedActors",p),await NO(h,f,g,!1);for(let F of S)await dHe(h,F.messageModel,F.lineStartY,n);De.mirrorActors&&await NO(h,f,g,!0),A.forEach(F=>fi.drawBackgroundRect(h,F)),_O(h,f,g,De);for(let F of nt.models.boxes)F.height=nt.getVerticalPos()-F.y,nt.insert(F.x,F.y,F.x+F.width,F.height),F.startx=F.x,F.starty=F.y,F.stopx=F.startx+F.width,F.stopy=F.starty+F.height,F.stroke="rgb(0,0,0, 0.5)",fi.drawBox(h,F,De);x&&nt.bumpVerticalPos(De.boxMargin);let D=sde(h,f,g,u),{bounds:k}=nt.getBounds();k.startx===void 0&&(k.startx=0),k.starty===void 0&&(k.starty=0),k.stopx===void 0&&(k.stopx=0),k.stopy===void 0&&(k.stopy=0);let R=k.stopy-k.starty;R2,d=o(y=>l?-y:y,"adjustValue");t.from===t.to?h=u:(t.activate&&!f&&(h+=d(De.activationWidth/2-1)),[r.db.LINETYPE.SOLID_OPEN,r.db.LINETYPE.DOTTED_OPEN].includes(t.type)||(h+=d(3)),[r.db.LINETYPE.BIDIRECTIONAL_SOLID,r.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes(t.type)&&(u-=d(3)));let p=[n,i,a,s],m=Math.abs(u-h);t.wrap&&t.message&&(t.message=Ut.wrapLabel(t.message,qe.getMax(m+2*De.wrapPadding,De.width),O0(De)));let g=Ut.calculateTextDimensions(t.message,O0(De));return{width:qe.getMax(t.wrap?0:g.width+2*De.wrapPadding,m+2*De.wrapPadding,De.width),height:0,startx:u,stopx:h,starty:0,stopy:0,message:t.message,type:t.type,wrap:t.wrap,fromBounds:Math.min.apply(null,p),toBounds:Math.max.apply(null,p)}},"buildMessageModel"),THe=o(async function(t,e,r,n){let i={},a=[],s,l,u;for(let h of t){switch(h.id=Ut.random({length:10}),h.type){case n.db.LINETYPE.LOOP_START:case n.db.LINETYPE.ALT_START:case n.db.LINETYPE.OPT_START:case n.db.LINETYPE.PAR_START:case n.db.LINETYPE.PAR_OVER_START:case n.db.LINETYPE.CRITICAL_START:case n.db.LINETYPE.BREAK_START:a.push({id:h.id,msg:h.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case n.db.LINETYPE.ALT_ELSE:case n.db.LINETYPE.PAR_AND:case n.db.LINETYPE.CRITICAL_OPTION:h.message&&(s=a.pop(),i[s.id]=s,i[h.id]=s,a.push(s));break;case n.db.LINETYPE.LOOP_END:case n.db.LINETYPE.ALT_END:case n.db.LINETYPE.OPT_END:case n.db.LINETYPE.PAR_END:case n.db.LINETYPE.CRITICAL_END:case n.db.LINETYPE.BREAK_END:s=a.pop(),i[s.id]=s;break;case n.db.LINETYPE.ACTIVE_START:{let d=e.get(h.from?h.from:h.to.actor),p=IE(h.from?h.from:h.to.actor).length,m=d.x+d.width/2+(p-1)*De.activationWidth/2,g={startx:m,stopx:m+De.activationWidth,actor:h.from,enabled:!0};nt.activations.push(g)}break;case n.db.LINETYPE.ACTIVE_END:{let d=nt.activations.map(p=>p.actor).lastIndexOf(h.from);nt.activations.splice(d,1).splice(0,1)}break}h.placement!==void 0?(l=await bHe(h,e,n),h.noteModel=l,a.forEach(d=>{s=d,s.from=qe.getMin(s.from,l.startx),s.to=qe.getMax(s.to,l.startx+l.width),s.width=qe.getMax(s.width,Math.abs(s.from-s.to))-De.labelBoxWidth})):(u=wHe(h,e,n),h.msgModel=u,u.startx&&u.stopx&&a.length>0&&a.forEach(d=>{if(s=d,u.startx===u.stopx){let p=e.get(h.from),m=e.get(h.to);s.from=qe.getMin(p.x-u.width/2,p.x-p.width/2,s.from),s.to=qe.getMax(m.x+u.width/2,m.x+p.width/2,s.to),s.width=qe.getMax(s.width,Math.abs(s.to-s.from))-De.labelBoxWidth}else s.from=qe.getMin(u.startx,s.from),s.to=qe.getMax(u.stopx,s.to),s.width=qe.getMax(s.width,u.width)-De.labelBoxWidth}))}return nt.activations=[],Y.debug("Loop type widths:",i),i},"calculateLoopBounds"),lde={bounds:nt,drawActors:NO,drawActorsPopup:sde,setConf:ode,draw:gHe}});var ude={};vr(ude,{diagram:()=>kHe});var kHe,hde=M(()=>{"use strict";$fe();jfe();Qfe();cde();kHe={parser:Gfe,db:SO,renderer:lde,styles:Kfe,init:o(({wrap:t})=>{SO.setWrap(t)},"init")}});var RO,OE,MO=M(()=>{"use strict";RO=function(){var t=o(function(X,fe,he,ge){for(he=he||{},ge=X.length;ge--;he[X[ge]]=fe);return he},"o"),e=[1,18],r=[1,19],n=[1,20],i=[1,41],a=[1,42],s=[1,26],l=[1,24],u=[1,25],h=[1,32],f=[1,33],d=[1,34],p=[1,45],m=[1,35],g=[1,36],y=[1,37],v=[1,38],x=[1,27],b=[1,28],w=[1,29],_=[1,30],T=[1,31],E=[1,44],L=[1,46],S=[1,43],A=[1,47],I=[1,9],D=[1,8,9],k=[1,58],R=[1,59],C=[1,60],O=[1,61],N=[1,62],P=[1,63],F=[1,64],B=[1,8,9,41],G=[1,76],z=[1,8,9,12,13,22,39,41,44,66,67,68,69,70,71,72,77,79],W=[1,8,9,12,13,17,20,22,39,41,44,48,58,66,67,68,69,70,71,72,77,79,84,99,101,102],Z=[13,58,84,99,101,102],j=[13,58,71,72,84,99,101,102],oe=[13,58,66,67,68,69,70,84,99,101,102],K=[1,98],ee=[1,115],J=[1,107],H=[1,113],q=[1,108],Q=[1,109],ae=[1,110],ue=[1,111],ce=[1,112],te=[1,114],Ne=[22,58,59,80,84,85,86,87,88,89],se=[1,8,9,39,41,44],ke=[1,8,9,22],Re=[1,143],Ce=[1,8,9,59],Pe=[1,8,9,22,58,59,80,84,85,86,87,88,89],Ie={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,DOT:17,className:18,classLiteralName:19,GENERICTYPE:20,relationStatement:21,LABEL:22,namespaceStatement:23,classStatement:24,memberStatement:25,annotationStatement:26,clickStatement:27,styleStatement:28,cssClassStatement:29,noteStatement:30,classDefStatement:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,namespaceIdentifier:38,STRUCT_START:39,classStatements:40,STRUCT_STOP:41,NAMESPACE:42,classIdentifier:43,STYLE_SEPARATOR:44,members:45,CLASS:46,ANNOTATION_START:47,ANNOTATION_END:48,MEMBER:49,SEPARATOR:50,relation:51,NOTE_FOR:52,noteText:53,NOTE:54,CLASSDEF:55,classList:56,stylesOpt:57,ALPHA:58,COMMA:59,direction_tb:60,direction_bt:61,direction_rl:62,direction_lr:63,relationType:64,lineType:65,AGGREGATION:66,EXTENSION:67,COMPOSITION:68,DEPENDENCY:69,LOLLIPOP:70,LINE:71,DOTTED_LINE:72,CALLBACK:73,LINK:74,LINK_TARGET:75,CLICK:76,CALLBACK_NAME:77,CALLBACK_ARGS:78,HREF:79,STYLE:80,CSSCLASS:81,style:82,styleComponent:83,NUM:84,COLON:85,UNIT:86,SPACE:87,BRKT:88,PCT:89,commentToken:90,textToken:91,graphCodeTokens:92,textNoTagsToken:93,TAGSTART:94,TAGEND:95,"==":96,"--":97,DEFAULT:98,MINUS:99,keywords:100,UNICODE_TEXT:101,BQUOTE_STR:102,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",17:"DOT",20:"GENERICTYPE",22:"LABEL",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",39:"STRUCT_START",41:"STRUCT_STOP",42:"NAMESPACE",44:"STYLE_SEPARATOR",46:"CLASS",47:"ANNOTATION_START",48:"ANNOTATION_END",49:"MEMBER",50:"SEPARATOR",52:"NOTE_FOR",54:"NOTE",55:"CLASSDEF",58:"ALPHA",59:"COMMA",60:"direction_tb",61:"direction_bt",62:"direction_rl",63:"direction_lr",66:"AGGREGATION",67:"EXTENSION",68:"COMPOSITION",69:"DEPENDENCY",70:"LOLLIPOP",71:"LINE",72:"DOTTED_LINE",73:"CALLBACK",74:"LINK",75:"LINK_TARGET",76:"CLICK",77:"CALLBACK_NAME",78:"CALLBACK_ARGS",79:"HREF",80:"STYLE",81:"CSSCLASS",84:"NUM",85:"COLON",86:"UNIT",87:"SPACE",88:"BRKT",89:"PCT",92:"graphCodeTokens",94:"TAGSTART",95:"TAGEND",96:"==",97:"--",98:"DEFAULT",99:"MINUS",100:"keywords",101:"UNICODE_TEXT",102:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,3],[15,2],[18,1],[18,3],[18,1],[18,2],[18,2],[18,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[23,4],[23,5],[38,2],[40,1],[40,2],[40,3],[24,1],[24,3],[24,4],[24,6],[43,2],[43,3],[26,4],[45,1],[45,2],[25,1],[25,2],[25,1],[25,1],[21,3],[21,4],[21,4],[21,5],[30,3],[30,2],[31,3],[56,1],[56,3],[32,1],[32,1],[32,1],[32,1],[51,3],[51,2],[51,2],[51,1],[64,1],[64,1],[64,1],[64,1],[64,1],[65,1],[65,1],[27,3],[27,4],[27,3],[27,4],[27,4],[27,5],[27,3],[27,4],[27,4],[27,5],[27,4],[27,5],[27,5],[27,6],[28,3],[29,3],[57,1],[57,3],[82,1],[82,2],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[90,1],[90,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[93,1],[93,1],[93,1],[93,1],[16,1],[16,1],[16,1],[16,1],[19,1],[53,1]],performAction:o(function(fe,he,ge,ne,ve,U,Te){var ie=U.length-1;switch(ve){case 8:this.$=U[ie-1];break;case 9:case 12:case 14:this.$=U[ie];break;case 10:case 13:this.$=U[ie-2]+"."+U[ie];break;case 11:case 15:this.$=U[ie-1]+U[ie];break;case 16:case 17:this.$=U[ie-1]+"~"+U[ie]+"~";break;case 18:ne.addRelation(U[ie]);break;case 19:U[ie-1].title=ne.cleanupLabel(U[ie]),ne.addRelation(U[ie-1]);break;case 30:this.$=U[ie].trim(),ne.setAccTitle(this.$);break;case 31:case 32:this.$=U[ie].trim(),ne.setAccDescription(this.$);break;case 33:ne.addClassesToNamespace(U[ie-3],U[ie-1]);break;case 34:ne.addClassesToNamespace(U[ie-4],U[ie-1]);break;case 35:this.$=U[ie],ne.addNamespace(U[ie]);break;case 36:this.$=[U[ie]];break;case 37:this.$=[U[ie-1]];break;case 38:U[ie].unshift(U[ie-2]),this.$=U[ie];break;case 40:ne.setCssClass(U[ie-2],U[ie]);break;case 41:ne.addMembers(U[ie-3],U[ie-1]);break;case 42:ne.setCssClass(U[ie-5],U[ie-3]),ne.addMembers(U[ie-5],U[ie-1]);break;case 43:this.$=U[ie],ne.addClass(U[ie]);break;case 44:this.$=U[ie-1],ne.addClass(U[ie-1]),ne.setClassLabel(U[ie-1],U[ie]);break;case 45:ne.addAnnotation(U[ie],U[ie-2]);break;case 46:case 59:this.$=[U[ie]];break;case 47:U[ie].push(U[ie-1]),this.$=U[ie];break;case 48:break;case 49:ne.addMember(U[ie-1],ne.cleanupLabel(U[ie]));break;case 50:break;case 51:break;case 52:this.$={id1:U[ie-2],id2:U[ie],relation:U[ie-1],relationTitle1:"none",relationTitle2:"none"};break;case 53:this.$={id1:U[ie-3],id2:U[ie],relation:U[ie-1],relationTitle1:U[ie-2],relationTitle2:"none"};break;case 54:this.$={id1:U[ie-3],id2:U[ie],relation:U[ie-2],relationTitle1:"none",relationTitle2:U[ie-1]};break;case 55:this.$={id1:U[ie-4],id2:U[ie],relation:U[ie-2],relationTitle1:U[ie-3],relationTitle2:U[ie-1]};break;case 56:ne.addNote(U[ie],U[ie-1]);break;case 57:ne.addNote(U[ie]);break;case 58:this.$=U[ie-2],ne.defineClass(U[ie-1],U[ie]);break;case 60:this.$=U[ie-2].concat([U[ie]]);break;case 61:ne.setDirection("TB");break;case 62:ne.setDirection("BT");break;case 63:ne.setDirection("RL");break;case 64:ne.setDirection("LR");break;case 65:this.$={type1:U[ie-2],type2:U[ie],lineType:U[ie-1]};break;case 66:this.$={type1:"none",type2:U[ie],lineType:U[ie-1]};break;case 67:this.$={type1:U[ie-1],type2:"none",lineType:U[ie]};break;case 68:this.$={type1:"none",type2:"none",lineType:U[ie]};break;case 69:this.$=ne.relationType.AGGREGATION;break;case 70:this.$=ne.relationType.EXTENSION;break;case 71:this.$=ne.relationType.COMPOSITION;break;case 72:this.$=ne.relationType.DEPENDENCY;break;case 73:this.$=ne.relationType.LOLLIPOP;break;case 74:this.$=ne.lineType.LINE;break;case 75:this.$=ne.lineType.DOTTED_LINE;break;case 76:case 82:this.$=U[ie-2],ne.setClickEvent(U[ie-1],U[ie]);break;case 77:case 83:this.$=U[ie-3],ne.setClickEvent(U[ie-2],U[ie-1]),ne.setTooltip(U[ie-2],U[ie]);break;case 78:this.$=U[ie-2],ne.setLink(U[ie-1],U[ie]);break;case 79:this.$=U[ie-3],ne.setLink(U[ie-2],U[ie-1],U[ie]);break;case 80:this.$=U[ie-3],ne.setLink(U[ie-2],U[ie-1]),ne.setTooltip(U[ie-2],U[ie]);break;case 81:this.$=U[ie-4],ne.setLink(U[ie-3],U[ie-2],U[ie]),ne.setTooltip(U[ie-3],U[ie-1]);break;case 84:this.$=U[ie-3],ne.setClickEvent(U[ie-2],U[ie-1],U[ie]);break;case 85:this.$=U[ie-4],ne.setClickEvent(U[ie-3],U[ie-2],U[ie-1]),ne.setTooltip(U[ie-3],U[ie]);break;case 86:this.$=U[ie-3],ne.setLink(U[ie-2],U[ie]);break;case 87:this.$=U[ie-4],ne.setLink(U[ie-3],U[ie-1],U[ie]);break;case 88:this.$=U[ie-4],ne.setLink(U[ie-3],U[ie-1]),ne.setTooltip(U[ie-3],U[ie]);break;case 89:this.$=U[ie-5],ne.setLink(U[ie-4],U[ie-2],U[ie]),ne.setTooltip(U[ie-4],U[ie-1]);break;case 90:this.$=U[ie-2],ne.setCssStyle(U[ie-1],U[ie]);break;case 91:ne.setCssClass(U[ie-1],U[ie]);break;case 92:this.$=[U[ie]];break;case 93:U[ie-2].push(U[ie]),this.$=U[ie-2];break;case 95:this.$=U[ie-1]+U[ie];break}},"anonymous"),table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:39,18:21,19:40,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:e,35:r,37:n,38:22,42:i,43:23,46:a,47:s,49:l,50:u,52:h,54:f,55:d,58:p,60:m,61:g,62:y,63:v,73:x,74:b,76:w,80:_,81:T,84:E,99:L,101:S,102:A},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},t(I,[2,5],{8:[1,48]}),{8:[1,49]},t(D,[2,18],{22:[1,50]}),t(D,[2,20]),t(D,[2,21]),t(D,[2,22]),t(D,[2,23]),t(D,[2,24]),t(D,[2,25]),t(D,[2,26]),t(D,[2,27]),t(D,[2,28]),t(D,[2,29]),{34:[1,51]},{36:[1,52]},t(D,[2,32]),t(D,[2,48],{51:53,64:56,65:57,13:[1,54],22:[1,55],66:k,67:R,68:C,69:O,70:N,71:P,72:F}),{39:[1,65]},t(B,[2,39],{39:[1,67],44:[1,66]}),t(D,[2,50]),t(D,[2,51]),{16:68,58:p,84:E,99:L,101:S},{16:39,18:69,19:40,58:p,84:E,99:L,101:S,102:A},{16:39,18:70,19:40,58:p,84:E,99:L,101:S,102:A},{16:39,18:71,19:40,58:p,84:E,99:L,101:S,102:A},{58:[1,72]},{13:[1,73]},{16:39,18:74,19:40,58:p,84:E,99:L,101:S,102:A},{13:G,53:75},{56:77,58:[1,78]},t(D,[2,61]),t(D,[2,62]),t(D,[2,63]),t(D,[2,64]),t(z,[2,12],{16:39,19:40,18:80,17:[1,79],20:[1,81],58:p,84:E,99:L,101:S,102:A}),t(z,[2,14],{20:[1,82]}),{15:83,16:84,58:p,84:E,99:L,101:S},{16:39,18:85,19:40,58:p,84:E,99:L,101:S,102:A},t(W,[2,118]),t(W,[2,119]),t(W,[2,120]),t(W,[2,121]),t([1,8,9,12,13,20,22,39,41,44,66,67,68,69,70,71,72,77,79],[2,122]),t(I,[2,6],{10:5,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,18:21,38:22,43:23,16:39,19:40,5:86,33:e,35:r,37:n,42:i,46:a,47:s,49:l,50:u,52:h,54:f,55:d,58:p,60:m,61:g,62:y,63:v,73:x,74:b,76:w,80:_,81:T,84:E,99:L,101:S,102:A}),{5:87,10:5,16:39,18:21,19:40,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:e,35:r,37:n,38:22,42:i,43:23,46:a,47:s,49:l,50:u,52:h,54:f,55:d,58:p,60:m,61:g,62:y,63:v,73:x,74:b,76:w,80:_,81:T,84:E,99:L,101:S,102:A},t(D,[2,19]),t(D,[2,30]),t(D,[2,31]),{13:[1,89],16:39,18:88,19:40,58:p,84:E,99:L,101:S,102:A},{51:90,64:56,65:57,66:k,67:R,68:C,69:O,70:N,71:P,72:F},t(D,[2,49]),{65:91,71:P,72:F},t(Z,[2,68],{64:92,66:k,67:R,68:C,69:O,70:N}),t(j,[2,69]),t(j,[2,70]),t(j,[2,71]),t(j,[2,72]),t(j,[2,73]),t(oe,[2,74]),t(oe,[2,75]),{8:[1,94],24:95,40:93,43:23,46:a},{16:96,58:p,84:E,99:L,101:S},{45:97,49:K},{48:[1,99]},{13:[1,100]},{13:[1,101]},{77:[1,102],79:[1,103]},{22:ee,57:104,58:J,80:H,82:105,83:106,84:q,85:Q,86:ae,87:ue,88:ce,89:te},{58:[1,116]},{13:G,53:117},t(D,[2,57]),t(D,[2,123]),{22:ee,57:118,58:J,59:[1,119],80:H,82:105,83:106,84:q,85:Q,86:ae,87:ue,88:ce,89:te},t(Ne,[2,59]),{16:39,18:120,19:40,58:p,84:E,99:L,101:S,102:A},t(z,[2,15]),t(z,[2,16]),t(z,[2,17]),{39:[2,35]},{15:122,16:84,17:[1,121],39:[2,9],58:p,84:E,99:L,101:S},t(se,[2,43],{11:123,12:[1,124]}),t(I,[2,7]),{9:[1,125]},t(ke,[2,52]),{16:39,18:126,19:40,58:p,84:E,99:L,101:S,102:A},{13:[1,128],16:39,18:127,19:40,58:p,84:E,99:L,101:S,102:A},t(Z,[2,67],{64:129,66:k,67:R,68:C,69:O,70:N}),t(Z,[2,66]),{41:[1,130]},{24:95,40:131,43:23,46:a},{8:[1,132],41:[2,36]},t(B,[2,40],{39:[1,133]}),{41:[1,134]},{41:[2,46],45:135,49:K},{16:39,18:136,19:40,58:p,84:E,99:L,101:S,102:A},t(D,[2,76],{13:[1,137]}),t(D,[2,78],{13:[1,139],75:[1,138]}),t(D,[2,82],{13:[1,140],78:[1,141]}),{13:[1,142]},t(D,[2,90],{59:Re}),t(Ce,[2,92],{83:144,22:ee,58:J,80:H,84:q,85:Q,86:ae,87:ue,88:ce,89:te}),t(Pe,[2,94]),t(Pe,[2,96]),t(Pe,[2,97]),t(Pe,[2,98]),t(Pe,[2,99]),t(Pe,[2,100]),t(Pe,[2,101]),t(Pe,[2,102]),t(Pe,[2,103]),t(Pe,[2,104]),t(D,[2,91]),t(D,[2,56]),t(D,[2,58],{59:Re}),{58:[1,145]},t(z,[2,13]),{15:146,16:84,58:p,84:E,99:L,101:S},{39:[2,11]},t(se,[2,44]),{13:[1,147]},{1:[2,4]},t(ke,[2,54]),t(ke,[2,53]),{16:39,18:148,19:40,58:p,84:E,99:L,101:S,102:A},t(Z,[2,65]),t(D,[2,33]),{41:[1,149]},{24:95,40:150,41:[2,37],43:23,46:a},{45:151,49:K},t(B,[2,41]),{41:[2,47]},t(D,[2,45]),t(D,[2,77]),t(D,[2,79]),t(D,[2,80],{75:[1,152]}),t(D,[2,83]),t(D,[2,84],{13:[1,153]}),t(D,[2,86],{13:[1,155],75:[1,154]}),{22:ee,58:J,80:H,82:156,83:106,84:q,85:Q,86:ae,87:ue,88:ce,89:te},t(Pe,[2,95]),t(Ne,[2,60]),{39:[2,10]},{14:[1,157]},t(ke,[2,55]),t(D,[2,34]),{41:[2,38]},{41:[1,158]},t(D,[2,81]),t(D,[2,85]),t(D,[2,87]),t(D,[2,88],{75:[1,159]}),t(Ce,[2,93],{83:144,22:ee,58:J,80:H,84:q,85:Q,86:ae,87:ue,88:ce,89:te}),t(se,[2,8]),t(B,[2,42]),t(D,[2,89])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],83:[2,35],122:[2,11],125:[2,4],135:[2,47],146:[2,10],150:[2,38]},parseError:o(function(fe,he){if(he.recoverable)this.trace(fe);else{var ge=new Error(fe);throw ge.hash=he,ge}},"parseError"),parse:o(function(fe){var he=this,ge=[0],ne=[],ve=[null],U=[],Te=this.table,ie="",Ee=0,Ae=0,Ge=0,Be=2,me=1,He=U.slice.call(arguments,1),Oe=Object.create(this.lexer),et={yy:{}};for(var bt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,bt)&&(et.yy[bt]=this.yy[bt]);Oe.setInput(fe,et.yy),et.yy.lexer=Oe,et.yy.parser=this,typeof Oe.yylloc>"u"&&(Oe.yylloc={});var kt=Oe.yylloc;U.push(kt);var vt=Oe.options&&Oe.options.ranges;typeof et.yy.parseError=="function"?this.parseError=et.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function rt(yr){ge.length=ge.length-2*yr,ve.length=ve.length-yr,U.length=U.length-yr}o(rt,"popStack");function yt(){var yr;return yr=ne.pop()||Oe.lex()||me,typeof yr!="number"&&(yr instanceof Array&&(ne=yr,yr=ne.pop()),yr=he.symbols_[yr]||yr),yr}o(yt,"lex");for(var Ue,tt,ht,Et,er,dt,Je={},ct,Ct,pt,Bt;;){if(ht=ge[ge.length-1],this.defaultActions[ht]?Et=this.defaultActions[ht]:((Ue===null||typeof Ue>"u")&&(Ue=yt()),Et=Te[ht]&&Te[ht][Ue]),typeof Et>"u"||!Et.length||!Et[0]){var Tr="";Bt=[];for(ct in Te[ht])this.terminals_[ct]&&ct>Be&&Bt.push("'"+this.terminals_[ct]+"'");Oe.showPosition?Tr="Parse error on line "+(Ee+1)+`: +`+Oe.showPosition()+` +Expecting `+Bt.join(", ")+", got '"+(this.terminals_[Ue]||Ue)+"'":Tr="Parse error on line "+(Ee+1)+": Unexpected "+(Ue==me?"end of input":"'"+(this.terminals_[Ue]||Ue)+"'"),this.parseError(Tr,{text:Oe.match,token:this.terminals_[Ue]||Ue,line:Oe.yylineno,loc:kt,expected:Bt})}if(Et[0]instanceof Array&&Et.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ht+", token: "+Ue);switch(Et[0]){case 1:ge.push(Ue),ve.push(Oe.yytext),U.push(Oe.yylloc),ge.push(Et[1]),Ue=null,tt?(Ue=tt,tt=null):(Ae=Oe.yyleng,ie=Oe.yytext,Ee=Oe.yylineno,kt=Oe.yylloc,Ge>0&&Ge--);break;case 2:if(Ct=this.productions_[Et[1]][1],Je.$=ve[ve.length-Ct],Je._$={first_line:U[U.length-(Ct||1)].first_line,last_line:U[U.length-1].last_line,first_column:U[U.length-(Ct||1)].first_column,last_column:U[U.length-1].last_column},vt&&(Je._$.range=[U[U.length-(Ct||1)].range[0],U[U.length-1].range[1]]),dt=this.performAction.apply(Je,[ie,Ae,Ee,et.yy,Et[1],ve,U].concat(He)),typeof dt<"u")return dt;Ct&&(ge=ge.slice(0,-1*Ct*2),ve=ve.slice(0,-1*Ct),U=U.slice(0,-1*Ct)),ge.push(this.productions_[Et[1]][0]),ve.push(Je.$),U.push(Je._$),pt=Te[ge[ge.length-2]][ge[ge.length-1]],ge.push(pt);break;case 3:return!0}}return!0},"parse")},$e=function(){var X={EOF:1,parseError:o(function(he,ge){if(this.yy.parser)this.yy.parser.parseError(he,ge);else throw new Error(he)},"parseError"),setInput:o(function(fe,he){return this.yy=he||this.yy||{},this._input=fe,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var fe=this._input[0];this.yytext+=fe,this.yyleng++,this.offset++,this.match+=fe,this.matched+=fe;var he=fe.match(/(?:\r\n?|\n).*/g);return he?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),fe},"input"),unput:o(function(fe){var he=fe.length,ge=fe.split(/(?:\r\n?|\n)/g);this._input=fe+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-he),this.offset-=he;var ne=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ge.length-1&&(this.yylineno-=ge.length-1);var ve=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ge?(ge.length===ne.length?this.yylloc.first_column:0)+ne[ne.length-ge.length].length-ge[0].length:this.yylloc.first_column-he},this.options.ranges&&(this.yylloc.range=[ve[0],ve[0]+this.yyleng-he]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(fe){this.unput(this.match.slice(fe))},"less"),pastInput:o(function(){var fe=this.matched.substr(0,this.matched.length-this.match.length);return(fe.length>20?"...":"")+fe.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var fe=this.match;return fe.length<20&&(fe+=this._input.substr(0,20-fe.length)),(fe.substr(0,20)+(fe.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var fe=this.pastInput(),he=new Array(fe.length+1).join("-");return fe+this.upcomingInput()+` +`+he+"^"},"showPosition"),test_match:o(function(fe,he){var ge,ne,ve;if(this.options.backtrack_lexer&&(ve={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(ve.yylloc.range=this.yylloc.range.slice(0))),ne=fe[0].match(/(?:\r\n?|\n).*/g),ne&&(this.yylineno+=ne.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:ne?ne[ne.length-1].length-ne[ne.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+fe[0].length},this.yytext+=fe[0],this.match+=fe[0],this.matches=fe,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(fe[0].length),this.matched+=fe[0],ge=this.performAction.call(this,this.yy,this,he,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ge)return ge;if(this._backtrack){for(var U in ve)this[U]=ve[U];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var fe,he,ge,ne;this._more||(this.yytext="",this.match="");for(var ve=this._currentRules(),U=0;Uhe[0].length)){if(he=ge,ne=U,this.options.backtrack_lexer){if(fe=this.test_match(ge,ve[U]),fe!==!1)return fe;if(this._backtrack){he=!1;continue}else return!1}else if(!this.options.flex)break}return he?(fe=this.test_match(he,ve[ne]),fe!==!1?fe:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var he=this.next();return he||this.lex()},"lex"),begin:o(function(he){this.conditionStack.push(he)},"begin"),popState:o(function(){var he=this.conditionStack.length-1;return he>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(he){return he=this.conditionStack.length-1-Math.abs(he||0),he>=0?this.conditionStack[he]:"INITIAL"},"topState"),pushState:o(function(he){this.begin(he)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(he,ge,ne,ve){var U=ve;switch(ne){case 0:return 60;case 1:return 61;case 2:return 62;case 3:return 63;case 4:break;case 5:break;case 6:return this.begin("acc_title"),33;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),35;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 8;case 14:break;case 15:return 7;case 16:return 7;case 17:return"EDGE_STATE";case 18:this.begin("callback_name");break;case 19:this.popState();break;case 20:this.popState(),this.begin("callback_args");break;case 21:return 77;case 22:this.popState();break;case 23:return 78;case 24:this.popState();break;case 25:return"STR";case 26:this.begin("string");break;case 27:return 80;case 28:return 55;case 29:return this.begin("namespace"),42;break;case 30:return this.popState(),8;break;case 31:break;case 32:return this.begin("namespace-body"),39;break;case 33:return this.popState(),41;break;case 34:return"EOF_IN_STRUCT";case 35:return 8;case 36:break;case 37:return"EDGE_STATE";case 38:return this.begin("class"),46;break;case 39:return this.popState(),8;break;case 40:break;case 41:return this.popState(),this.popState(),41;break;case 42:return this.begin("class-body"),39;break;case 43:return this.popState(),41;break;case 44:return"EOF_IN_STRUCT";case 45:return"EDGE_STATE";case 46:return"OPEN_IN_STRUCT";case 47:break;case 48:return"MEMBER";case 49:return 81;case 50:return 73;case 51:return 74;case 52:return 76;case 53:return 52;case 54:return 54;case 55:return 47;case 56:return 48;case 57:return 79;case 58:this.popState();break;case 59:return"GENERICTYPE";case 60:this.begin("generic");break;case 61:this.popState();break;case 62:return"BQUOTE_STR";case 63:this.begin("bqstring");break;case 64:return 75;case 65:return 75;case 66:return 75;case 67:return 75;case 68:return 67;case 69:return 67;case 70:return 69;case 71:return 69;case 72:return 68;case 73:return 66;case 74:return 70;case 75:return 71;case 76:return 72;case 77:return 22;case 78:return 44;case 79:return 99;case 80:return 17;case 81:return"PLUS";case 82:return 85;case 83:return 59;case 84:return 88;case 85:return 88;case 86:return 89;case 87:return"EQUALS";case 88:return"EQUALS";case 89:return 58;case 90:return 12;case 91:return 14;case 92:return"PUNCTUATION";case 93:return 84;case 94:return 101;case 95:return 87;case 96:return 87;case 97:return 9}},"anonymous"),rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:\[\*\])/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:["])/,/^(?:[^"]*)/,/^(?:["])/,/^(?:style\b)/,/^(?:classDef\b)/,/^(?:namespace\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:\[\*\])/,/^(?:class\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[}])/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\[\*\])/,/^(?:[{])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:note for\b)/,/^(?:note\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:href\b)/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:~)/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:[`])/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:\s*\(\))/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?::)/,/^(?:,)/,/^(?:#)/,/^(?:#)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:\[)/,/^(?:\])/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:\s)/,/^(?:$)/],conditions:{"namespace-body":{rules:[26,33,34,35,36,37,38,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},namespace:{rules:[26,29,30,31,32,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},"class-body":{rules:[26,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},class:{rules:[26,39,40,41,42,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_descr_multiline:{rules:[11,12,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_descr:{rules:[9,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_title:{rules:[7,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},callback_args:{rules:[22,23,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},callback_name:{rules:[19,20,21,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},href:{rules:[26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},struct:{rules:[26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},generic:{rules:[26,49,50,51,52,53,54,55,56,57,58,59,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},bqstring:{rules:[26,49,50,51,52,53,54,55,56,57,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},string:{rules:[24,25,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,26,27,28,29,38,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97],inclusive:!0}}};return X}();Ie.lexer=$e;function ye(){this.yy={}}return o(ye,"Parser"),ye.prototype=Ie,Ie.Parser=ye,new ye}();RO.parser=RO;OE=RO});var pde,Bx,mde=M(()=>{"use strict";Vt();fr();pde=["#","+","~","-",""],Bx=class{static{o(this,"ClassMember")}constructor(e,r){this.memberType=r,this.visibility="",this.classifier="",this.text="";let n=kr(e,pe());this.parseMember(n)}getDisplayDetails(){let e=this.visibility+yu(this.id);this.memberType==="method"&&(e+=`(${yu(this.parameters.trim())})`,this.returnType&&(e+=" : "+yu(this.returnType))),e=e.trim();let r=this.parseClassifier();return{displayText:e,cssStyle:r}}parseMember(e){let r="";if(this.memberType==="method"){let a=/([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/.exec(e);if(a){let s=a[1]?a[1].trim():"";if(pde.includes(s)&&(this.visibility=s),this.id=a[2],this.parameters=a[3]?a[3].trim():"",r=a[4]?a[4].trim():"",this.returnType=a[5]?a[5].trim():"",r===""){let l=this.returnType.substring(this.returnType.length-1);/[$*]/.exec(l)&&(r=l,this.returnType=this.returnType.substring(0,this.returnType.length-1))}}}else{let i=e.length,a=e.substring(0,1),s=e.substring(i-1);pde.includes(a)&&(this.visibility=a),/[$*]/.exec(s)&&(r=s),this.id=e.substring(this.visibility===""?0:1,r===""?i:i-1)}this.classifier=r,this.id=this.id.startsWith(" ")?" "+this.id.trim():this.id.trim();let n=`${this.visibility?"\\"+this.visibility:""}${yu(this.id)}${this.memberType==="method"?`(${yu(this.parameters)})${this.returnType?" : "+yu(this.returnType):""}`:""}`;this.text=n.replaceAll("<","<").replaceAll(">",">"),this.text.startsWith("\\<")&&(this.text=this.text.replace("\\<","~"))}parseClassifier(){switch(this.classifier){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}}}});function xde(t){let e;switch(t){case 0:e="aggregation";break;case 1:e="extension";break;case 2:e="composition";break;case 3:e="dependency";break;case 4:e="lollipop";break;default:e="none"}return e}var PE,BE,Nn,gde,Fx,Jg,yde,ql,IO,zx,P0,B0,AHe,Zg,vde,bde,_He,LHe,DHe,NHe,RHe,MHe,IHe,wde,OHe,PHe,BHe,OO,FHe,zHe,GHe,$He,VHe,UHe,HHe,WHe,Ef,Tde,PO,kde,YHe,qHe,XHe,jHe,KHe,QHe,ZHe,e1,BO=M(()=>{"use strict";pr();ut();Vt();fr();hr();Ai();mde();PE="classId-",BE=[],Nn=new Map,gde=new Map,Fx=[],Jg=[],yde=0,ql=new Map,IO=0,zx=[],P0=o(t=>qe.sanitizeText(t,pe()),"sanitizeText"),B0=o(function(t){let e=qe.sanitizeText(t,pe()),r="",n=e;if(e.indexOf("~")>0){let i=e.split("~");n=P0(i[0]),r=P0(i[1])}return{className:n,type:r}},"splitClassNameAndType"),AHe=o(function(t,e){let r=qe.sanitizeText(t,pe());e&&(e=P0(e));let{className:n}=B0(r);Nn.get(n).label=e,Nn.get(n).text=`${e}${Nn.get(n).type?`<${Nn.get(n).type}>`:""}`},"setClassLabel"),Zg=o(function(t){let e=qe.sanitizeText(t,pe()),{className:r,type:n}=B0(e);if(Nn.has(r))return;let i=qe.sanitizeText(r,pe());Nn.set(i,{id:i,type:n,label:i,text:`${i}${n?`<${n}>`:""}`,shape:"classBox",cssClasses:"default",methods:[],members:[],annotations:[],styles:[],domId:PE+i+"-"+yde}),yde++},"addClass"),vde=o(function(t,e){let r={id:`interface${Jg.length}`,label:t,classId:e};Jg.push(r)},"addInterface"),bde=o(function(t){let e=qe.sanitizeText(t,pe());if(Nn.has(e))return Nn.get(e).domId;throw new Error("Class not found: "+e)},"lookUpDomId"),_He=o(function(){BE=[],Nn=new Map,Fx=[],Jg=[],zx=[],zx.push(Tde),ql=new Map,IO=0,PO="TB",Lr()},"clear"),LHe=o(function(t){return Nn.get(t)},"getClass"),DHe=o(function(){return Nn},"getClasses"),NHe=o(function(){return BE},"getRelations"),RHe=o(function(){return Fx},"getNotes"),MHe=o(function(t){Y.debug("Adding relation: "+JSON.stringify(t));let e=[Ef.LOLLIPOP,Ef.AGGREGATION,Ef.COMPOSITION,Ef.DEPENDENCY,Ef.EXTENSION];t.relation.type1===Ef.LOLLIPOP&&!e.includes(t.relation.type2)?(Zg(t.id2),vde(t.id1,t.id2),t.id1=`interface${Jg.length-1}`):t.relation.type2===Ef.LOLLIPOP&&!e.includes(t.relation.type1)?(Zg(t.id1),vde(t.id2,t.id1),t.id2=`interface${Jg.length-1}`):(Zg(t.id1),Zg(t.id2)),t.id1=B0(t.id1).className,t.id2=B0(t.id2).className,t.relationTitle1=qe.sanitizeText(t.relationTitle1.trim(),pe()),t.relationTitle2=qe.sanitizeText(t.relationTitle2.trim(),pe()),BE.push(t)},"addRelation"),IHe=o(function(t,e){let r=B0(t).className;Nn.get(r).annotations.push(e)},"addAnnotation"),wde=o(function(t,e){Zg(t);let r=B0(t).className,n=Nn.get(r);if(typeof e=="string"){let i=e.trim();i.startsWith("<<")&&i.endsWith(">>")?n.annotations.push(P0(i.substring(2,i.length-2))):i.indexOf(")")>0?n.methods.push(new Bx(i,"method")):i&&n.members.push(new Bx(i,"attribute"))}},"addMember"),OHe=o(function(t,e){Array.isArray(e)&&(e.reverse(),e.forEach(r=>wde(t,r)))},"addMembers"),PHe=o(function(t,e){let r={id:`note${Fx.length}`,class:e,text:t};Fx.push(r)},"addNote"),BHe=o(function(t){return t.startsWith(":")&&(t=t.substring(1)),P0(t.trim())},"cleanupLabel"),OO=o(function(t,e){t.split(",").forEach(function(r){let n=r;/\d/.exec(r[0])&&(n=PE+n);let i=Nn.get(n);i&&(i.cssClasses+=" "+e)})},"setCssClass"),FHe=o(function(t,e){for(let r of t){let n=gde.get(r);n===void 0&&(n={id:r,styles:[],textStyles:[]},gde.set(r,n)),e&&e.forEach(function(i){if(/color/.exec(i)){let a=i.replace("fill","bgFill");n.textStyles.push(a)}n.styles.push(i)}),Nn.forEach(i=>{i.cssClasses.includes(r)&&i.styles.push(...e.flatMap(a=>a.split(",")))})}},"defineClass"),zHe=o(function(t,e){t.split(",").forEach(function(r){e!==void 0&&(Nn.get(r).tooltip=P0(e))})},"setTooltip"),GHe=o(function(t,e){return e&&ql.has(e)?ql.get(e).classes.get(t).tooltip:Nn.get(t).tooltip},"getTooltip"),$He=o(function(t,e,r){let n=pe();t.split(",").forEach(function(i){let a=i;/\d/.exec(i[0])&&(a=PE+a);let s=Nn.get(a);s&&(s.link=Ut.formatUrl(e,n),n.securityLevel==="sandbox"?s.linkTarget="_top":typeof r=="string"?s.linkTarget=P0(r):s.linkTarget="_blank")}),OO(t,"clickable")},"setLink"),VHe=o(function(t,e,r){t.split(",").forEach(function(n){UHe(n,e,r),Nn.get(n).haveCallback=!0}),OO(t,"clickable")},"setClickEvent"),UHe=o(function(t,e,r){let n=qe.sanitizeText(t,pe());if(pe().securityLevel!=="loose"||e===void 0)return;let a=n;if(Nn.has(a)){let s=bde(a),l=[];if(typeof r=="string"){l=r.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let u=0;u")),i.classed("hover",!0)}).on("mouseout",function(){e.transition().duration(500).style("opacity",0),Ve(this).classed("hover",!1)})},"setupToolTips");zx.push(Tde);PO="TB",kde=o(()=>PO,"getDirection"),YHe=o(t=>{PO=t},"setDirection"),qHe=o(function(t){ql.has(t)||(ql.set(t,{id:t,classes:new Map,children:{},domId:PE+t+"-"+IO}),IO++)},"addNamespace"),XHe=o(function(t){return ql.get(t)},"getNamespace"),jHe=o(function(){return ql},"getNamespaces"),KHe=o(function(t,e){if(ql.has(t))for(let r of e){let{className:n}=B0(r);Nn.get(n).parent=t,ql.get(t).classes.set(n,Nn.get(n))}},"addClassesToNamespace"),QHe=o(function(t,e){let r=Nn.get(t);if(!(!e||!r))for(let n of e)n.includes(",")?r.styles.push(...n.split(",")):r.styles.push(n)},"setCssStyle");o(xde,"getArrowMarker");ZHe=o(()=>{let t=[],e=[],r=pe();for(let i of ql.keys()){let a=ql.get(i);if(a){let s={id:a.id,label:a.id,isGroup:!0,padding:r.class.padding??16,shape:"rect",cssStyles:["fill: none","stroke: black"],look:r.look};t.push(s)}}for(let i of Nn.keys()){let a=Nn.get(i);if(a){let s=a;s.parentId=a.parent,s.look=r.look,t.push(s)}}let n=0;for(let i of Fx){n++;let a={id:i.id,label:i.text,isGroup:!1,shape:"note",padding:r.class.padding??6,cssStyles:["text-align: left","white-space: nowrap",`fill: ${r.themeVariables.noteBkgColor}`,`stroke: ${r.themeVariables.noteBorderColor}`],look:r.look};t.push(a);let s=Nn.get(i.class)?.id??"";if(s){let l={id:`edgeNote${n}`,start:i.id,end:s,type:"normal",thickness:"normal",classes:"relation",arrowTypeStart:"none",arrowTypeEnd:"none",arrowheadStyle:"",labelStyle:[""],style:["fill: none"],pattern:"dotted",look:r.look};e.push(l)}}for(let i of Jg){let a={id:i.id,label:i.label,isGroup:!1,shape:"rect",cssStyles:["opacity: 0;"],look:r.look};t.push(a)}n=0;for(let i of BE){n++;let a={id:C5(i.id1,i.id2,{prefix:"id",counter:n}),start:i.id1,end:i.id2,type:"normal",label:i.title,labelpos:"c",thickness:"normal",classes:"relation",arrowTypeStart:xde(i.relation.type1),arrowTypeEnd:xde(i.relation.type2),startLabelRight:i.relationTitle1==="none"?"":i.relationTitle1,endLabelLeft:i.relationTitle2==="none"?"":i.relationTitle2,arrowheadStyle:"",labelStyle:["display: inline-block"],style:i.style||"",pattern:i.relation.lineType==1?"dashed":"solid",look:r.look};e.push(a)}return{nodes:t,edges:e,other:{},config:r,direction:kde()}},"getData"),e1={setAccTitle:Mr,getAccTitle:Br,getAccDescription:zr,setAccDescription:Fr,getConfig:o(()=>pe().class,"getConfig"),addClass:Zg,bindFunctions:HHe,clear:_He,getClass:LHe,getClasses:DHe,getNotes:RHe,addAnnotation:IHe,addNote:PHe,getRelations:NHe,addRelation:MHe,getDirection:kde,setDirection:YHe,addMember:wde,addMembers:OHe,cleanupLabel:BHe,lineType:WHe,relationType:Ef,setClickEvent:VHe,setCssClass:OO,defineClass:FHe,setLink:$He,getTooltip:GHe,setTooltip:zHe,lookUpDomId:bde,setDiagramTitle:cn,getDiagramTitle:Jr,setClassLabel:AHe,addNamespace:qHe,addClassesToNamespace:KHe,getNamespace:XHe,getNamespaces:jHe,setCssStyle:QHe,getData:ZHe}});var JHe,FE,FO=M(()=>{"use strict";JHe=o(t=>`g.classGroup text { + fill: ${t.nodeBorder||t.classText}; stroke: none; - font-family: ${i.fontFamily}; + font-family: ${t.fontFamily}; font-size: 10px; .title { @@ -1109,16 +1329,20 @@ Expecting `+xa.join(", ")+", got '"+(this.terminals_[Ml]||Ml)+"'":Ba="Parse erro } .nodeLabel, .edgeLabel { - color: ${i.classText}; + color: ${t.classText}; } .edgeLabel .label rect { - fill: ${i.mainBkg}; + fill: ${t.mainBkg}; } .label text { - fill: ${i.classText}; + fill: ${t.classText}; +} + +.labelBkg { + background: ${t.mainBkg}; } .edgeLabel .label span { - background: ${i.mainBkg}; + background: ${t.mainBkg}; } .classTitle { @@ -1129,14 +1353,14 @@ Expecting `+xa.join(", ")+", got '"+(this.terminals_[Ml]||Ml)+"'":Ba="Parse erro .node ellipse, .node polygon, .node path { - fill: ${i.mainBkg}; - stroke: ${i.nodeBorder}; + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; stroke-width: 1px; } .divider { - stroke: ${i.nodeBorder}; + stroke: ${t.nodeBorder}; stroke-width: 1; } @@ -1145,29 +1369,29 @@ g.clickable { } g.classGroup rect { - fill: ${i.mainBkg}; - stroke: ${i.nodeBorder}; + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; } g.classGroup line { - stroke: ${i.nodeBorder}; + stroke: ${t.nodeBorder}; stroke-width: 1; } .classLabel .box { stroke: none; stroke-width: 0; - fill: ${i.mainBkg}; + fill: ${t.mainBkg}; opacity: 0.5; } .classLabel .label { - fill: ${i.nodeBorder}; + fill: ${t.nodeBorder}; font-size: 10px; } .relation { - stroke: ${i.lineColor}; + stroke: ${t.lineColor}; stroke-width: 1; fill: none; } @@ -1181,62 +1405,62 @@ g.classGroup line { } #compositionStart, .composition { - fill: ${i.lineColor} !important; - stroke: ${i.lineColor} !important; + fill: ${t.lineColor} !important; + stroke: ${t.lineColor} !important; stroke-width: 1; } #compositionEnd, .composition { - fill: ${i.lineColor} !important; - stroke: ${i.lineColor} !important; + fill: ${t.lineColor} !important; + stroke: ${t.lineColor} !important; stroke-width: 1; } #dependencyStart, .dependency { - fill: ${i.lineColor} !important; - stroke: ${i.lineColor} !important; + fill: ${t.lineColor} !important; + stroke: ${t.lineColor} !important; stroke-width: 1; } #dependencyStart, .dependency { - fill: ${i.lineColor} !important; - stroke: ${i.lineColor} !important; + fill: ${t.lineColor} !important; + stroke: ${t.lineColor} !important; stroke-width: 1; } #extensionStart, .extension { fill: transparent !important; - stroke: ${i.lineColor} !important; + stroke: ${t.lineColor} !important; stroke-width: 1; } #extensionEnd, .extension { fill: transparent !important; - stroke: ${i.lineColor} !important; + stroke: ${t.lineColor} !important; stroke-width: 1; } #aggregationStart, .aggregation { fill: transparent !important; - stroke: ${i.lineColor} !important; + stroke: ${t.lineColor} !important; stroke-width: 1; } #aggregationEnd, .aggregation { fill: transparent !important; - stroke: ${i.lineColor} !important; + stroke: ${t.lineColor} !important; stroke-width: 1; } #lollipopStart, .lollipop { - fill: ${i.mainBkg} !important; - stroke: ${i.lineColor} !important; + fill: ${t.mainBkg} !important; + stroke: ${t.lineColor} !important; stroke-width: 1; } #lollipopEnd, .lollipop { - fill: ${i.mainBkg} !important; - stroke: ${i.lineColor} !important; + fill: ${t.mainBkg} !important; + stroke: ${t.lineColor} !important; stroke-width: 1; } @@ -1248,54 +1472,52 @@ g.classGroup line { .classTitleText { text-anchor: middle; font-size: 18px; - fill: ${i.textColor}; -} -`;let nKe=0;const qin=function(i,s,u,d,p){const v=function(oe){switch(oe){case p.db.relationType.AGGREGATION:return"aggregation";case p.db.relationType.EXTENSION:return"extension";case p.db.relationType.COMPOSITION:return"composition";case p.db.relationType.DEPENDENCY:return"dependency";case p.db.relationType.LOLLIPOP:return"lollipop"}};s.points=s.points.filter(oe=>!Number.isNaN(oe.y));const b=s.points,y=k7().x(function(oe){return oe.x}).y(function(oe){return oe.y}).curve(FF),T=i.append("path").attr("d",y(b)).attr("id","edge"+nKe).attr("class","relation");let _="";d.arrowMarkerAbsolute&&(_=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,_=_.replace(/\(/g,"\\("),_=_.replace(/\)/g,"\\)")),u.relation.lineType==1&&T.attr("class","relation dashed-line"),u.relation.lineType==10&&T.attr("class","relation dotted-line"),u.relation.type1!=="none"&&T.attr("marker-start","url("+_+"#"+v(u.relation.type1)+"Start)"),u.relation.type2!=="none"&&T.attr("marker-end","url("+_+"#"+v(u.relation.type2)+"End)");let A,P;const R=s.points.length;let F=Ao.calcLabelPosition(s.points);A=F.x,P=F.y;let j,K,ee,ie;if(R%2!==0&&R>1){let oe=Ao.calcCardinalityPosition(u.relation.type1!=="none",s.points,s.points[0]),pe=Ao.calcCardinalityPosition(u.relation.type2!=="none",s.points,s.points[R-1]);Xe.debug("cardinality_1_point "+JSON.stringify(oe)),Xe.debug("cardinality_2_point "+JSON.stringify(pe)),j=oe.x,K=oe.y,ee=pe.x,ie=pe.y}if(u.title!==void 0){const oe=i.append("g").attr("class","classLabel"),pe=oe.append("text").attr("class","label").attr("x",A).attr("y",P).attr("fill","red").attr("text-anchor","middle").text(u.title);window.label=pe;const be=pe.node().getBBox();oe.insert("rect",":first-child").attr("class","box").attr("x",be.x-d.padding/2).attr("y",be.y-d.padding/2).attr("width",be.width+d.padding).attr("height",be.height+d.padding)}Xe.info("Rendering relation "+JSON.stringify(u)),u.relationTitle1!==void 0&&u.relationTitle1!=="none"&&i.append("g").attr("class","cardinality").append("text").attr("class","type1").attr("x",j).attr("y",K).attr("fill","black").attr("font-size","6").text(u.relationTitle1),u.relationTitle2!==void 0&&u.relationTitle2!=="none"&&i.append("g").attr("class","cardinality").append("text").attr("class","type2").attr("x",ee).attr("y",ie).attr("fill","black").attr("font-size","6").text(u.relationTitle2),nKe++},Hin=function(i,s,u,d){Xe.debug("Rendering class ",s,u);const p=s.id,v={id:p,label:s.id,width:0,height:0},b=i.append("g").attr("id",d.db.lookUpDomId(p)).attr("class","classGroup");let y;s.link?y=b.append("svg:a").attr("xlink:href",s.link).attr("target",s.linkTarget).append("text").attr("y",u.textHeight+u.padding).attr("x",0):y=b.append("text").attr("y",u.textHeight+u.padding).attr("x",0);let T=!0;s.annotations.forEach(function(pe){const be=y.append("tspan").text("«"+pe+"»");T||be.attr("dy",u.textHeight),T=!1});let _=rKe(s);const A=y.append("tspan").text(_).attr("class","title");T||A.attr("dy",u.textHeight);const P=y.node().getBBox().height;let R,F,j;if(s.members.length>0){R=b.append("line").attr("x1",0).attr("y1",u.padding+P+u.dividerMargin/2).attr("y2",u.padding+P+u.dividerMargin/2);const pe=b.append("text").attr("x",u.padding).attr("y",P+u.dividerMargin+u.textHeight).attr("fill","white").attr("class","classText");T=!0,s.members.forEach(function(be){iKe(pe,be,T,u),T=!1}),F=pe.node().getBBox()}if(s.methods.length>0){j=b.append("line").attr("x1",0).attr("y1",u.padding+P+u.dividerMargin+F.height).attr("y2",u.padding+P+u.dividerMargin+F.height);const pe=b.append("text").attr("x",u.padding).attr("y",P+2*u.dividerMargin+F.height+u.textHeight).attr("fill","white").attr("class","classText");T=!0,s.methods.forEach(function(be){iKe(pe,be,T,u),T=!1})}const K=b.node().getBBox();var ee=" ";s.cssClasses.length>0&&(ee=ee+s.cssClasses.join(" "));const oe=b.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",K.width+2*u.padding).attr("height",K.height+u.padding+.5*u.dividerMargin).attr("class",ee).node().getBBox().width;return y.node().childNodes.forEach(function(pe){pe.setAttribute("x",(oe-pe.getBBox().width)/2)}),s.tooltip&&y.insert("title").text(s.tooltip),R&&R.attr("x2",oe),j&&j.attr("x2",oe),v.width=oe,v.height=K.height+u.padding+.5*u.dividerMargin,v},rKe=function(i){let s=i.id;return i.type&&(s+="<"+qF(i.type)+">"),s},Vin=function(i,s,u,d){Xe.debug("Rendering note ",s,u);const p=s.id,v={id:p,text:s.text,width:0,height:0},b=i.append("g").attr("id",p).attr("class","classGroup");let y=b.append("text").attr("y",u.textHeight+u.padding).attr("x",0);const T=JSON.parse(`"${s.text}"`).split(` -`);T.forEach(function(R){Xe.debug(`Adding line: ${R}`),y.append("tspan").text(R).attr("class","title").attr("dy",u.textHeight)});const _=b.node().getBBox(),P=b.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",_.width+2*u.padding).attr("height",_.height+T.length*u.textHeight+u.padding+.5*u.dividerMargin).node().getBBox().width;return y.node().childNodes.forEach(function(R){R.setAttribute("x",(P-R.getBBox().width)/2)}),v.width=P,v.height=_.height+T.length*u.textHeight+u.padding+.5*u.dividerMargin,v},iKe=function(i,s,u,d){const{displayText:p,cssStyle:v}=s.getDisplayDetails(),b=i.append("tspan").attr("x",d.padding).text(p);v!==""&&b.attr("style",s.cssStyle),u||b.attr("dy",d.textHeight)},Dve={getClassTitleString:rKe,drawClass:Hin,drawEdge:qin,drawNote:Vin};let xJ={};const kJ=20,YR=function(i){const s=Object.entries(xJ).find(u=>u[1].label===i);if(s)return s[0]},Uin=function(i){i.append("defs").append("marker").attr("id","extensionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),i.append("defs").append("marker").attr("id","extensionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z"),i.append("defs").append("marker").attr("id","compositionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","compositionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","aggregationStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","aggregationEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","dependencyStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},Gin=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:KGe,db:yJ,renderer:{draw:function(i,s,u,d){const p=qt().class;xJ={},Xe.info("Rendering diagram "+i);const v=qt().securityLevel;let b;v==="sandbox"&&(b=Ir("#i"+s));const y=Ir(v==="sandbox"?b.nodes()[0].contentDocument.body:"body"),T=y.select(`[id='${s}']`);Uin(T);const _=new B0({multigraph:!0});_.setGraph({isMultiGraph:!0}),_.setDefaultEdgeLabel(function(){return{}});const A=d.db.getClasses(),P=Object.keys(A);for(const oe of P){const pe=A[oe],be=Dve.drawClass(T,pe,p,d);xJ[be.id]=be,_.setNode(be.id,be),Xe.info("Org height: "+be.height)}d.db.getRelations().forEach(function(oe){Xe.info("tjoho"+YR(oe.id1)+YR(oe.id2)+JSON.stringify(oe)),_.setEdge(YR(oe.id1),YR(oe.id2),{relation:oe},oe.title||"DEFAULT")}),d.db.getNotes().forEach(function(oe){Xe.debug(`Adding note: ${JSON.stringify(oe)}`);const pe=Dve.drawNote(T,oe,p,d);xJ[pe.id]=pe,_.setNode(pe.id,pe),oe.class&&oe.class in A&&_.setEdge(oe.id,YR(oe.class),{relation:{id1:oe.id,id2:oe.class,relation:{type1:"none",type2:"none",lineType:10}}},"DEFAULT")}),qD(_),_.nodes().forEach(function(oe){oe!==void 0&&_.node(oe)!==void 0&&(Xe.debug("Node "+oe+": "+JSON.stringify(_.node(oe))),y.select("#"+(d.db.lookUpDomId(oe)||oe)).attr("transform","translate("+(_.node(oe).x-_.node(oe).width/2)+","+(_.node(oe).y-_.node(oe).height/2)+" )"))}),_.edges().forEach(function(oe){oe!==void 0&&_.edge(oe)!==void 0&&(Xe.debug("Edge "+oe.v+" -> "+oe.w+": "+JSON.stringify(_.edge(oe))),Dve.drawEdge(T,_.edge(oe),_.edge(oe).relation,p,d))});const j=T.node().getBBox(),K=j.width+kJ*2,ee=j.height+kJ*2;Ng(T,ee,K,p.useMaxWidth);const ie=`${j.x-kJ} ${j.y-kJ} ${K} ${ee}`;Xe.debug(`viewBox ${ie}`),T.attr("viewBox",ie)}},styles:tKe,init:i=>{i.class||(i.class={}),i.class.arrowMarkerAbsolute=i.arrowMarkerAbsolute,yJ.clear()}}},Symbol.toStringTag,{value:"Module"})),Ive=i=>ci.sanitizeText(i,qt());let Ove={dividerMargin:10,padding:5,textHeight:10,curve:void 0};const Kin=function(i,s,u,d){const p=Object.keys(i);Xe.info("keys:",p),Xe.info(i),p.forEach(function(v){var _,A;const b=i[v],T={shape:"rect",id:b.id,domId:b.domId,labelText:Ive(b.id),labelStyle:"",style:"fill: none; stroke: black",padding:((_=qt().flowchart)==null?void 0:_.padding)??((A=qt().class)==null?void 0:A.padding)};s.setNode(b.id,T),sKe(b.classes,s,u,d,b.id),Xe.info("setNode",T)})},sKe=function(i,s,u,d,p){const v=Object.keys(i);Xe.info("keys:",v),Xe.info(i),v.filter(b=>i[b].parent==p).forEach(function(b){var j,K;const y=i[b],T=y.cssClasses.join(" "),_=om(y.styles),A=y.label??y.id,P=0,R="class_box",F={labelStyle:_.labelStyle,shape:R,labelText:Ive(A),classData:y,rx:P,ry:P,class:T,style:_.style,id:y.id,domId:y.domId,tooltip:d.db.getTooltip(y.id,p)||"",haveCallback:y.haveCallback,link:y.link,width:y.type==="group"?500:void 0,type:y.type,padding:((j=qt().flowchart)==null?void 0:j.padding)??((K=qt().class)==null?void 0:K.padding)};s.setNode(y.id,F),p&&s.setParent(y.id,p),Xe.info("setNode",F)})},Win=function(i,s,u,d){Xe.info(i),i.forEach(function(p,v){var K,ee;const b=p,y="",T={labelStyle:"",style:""},_=b.text,A=0,P="note",R={labelStyle:T.labelStyle,shape:P,labelText:Ive(_),noteData:b,rx:A,ry:A,class:y,style:T.style,id:b.id,domId:b.id,tooltip:"",type:"note",padding:((K=qt().flowchart)==null?void 0:K.padding)??((ee=qt().class)==null?void 0:ee.padding)};if(s.setNode(b.id,R),Xe.info("setNode",R),!b.class||!(b.class in d))return;const F=u+v,j={id:`edgeNote${F}`,classes:"relation",pattern:"dotted",arrowhead:"none",startLabelRight:"",endLabelLeft:"",arrowTypeStart:"none",arrowTypeEnd:"none",style:"fill:none",labelStyle:"",curve:Ov(Ove.curve,kp)};s.setEdge(b.id,b.class,j,F)})},Yin=function(i,s){const u=qt().flowchart;let d=0;i.forEach(function(p){var b;d++;const v={classes:"relation",pattern:p.relation.lineType==1?"dashed":"solid",id:`id_${p.id1}_${p.id2}_${d}`,arrowhead:p.type==="arrow_open"?"none":"normal",startLabelRight:p.relationTitle1==="none"?"":p.relationTitle1,endLabelLeft:p.relationTitle2==="none"?"":p.relationTitle2,arrowTypeStart:aKe(p.relation.type1),arrowTypeEnd:aKe(p.relation.type2),style:"fill:none",labelStyle:"",curve:Ov(u==null?void 0:u.curve,kp)};if(Xe.info(v,p),p.style!==void 0){const y=om(p.style);v.style=y.style,v.labelStyle=y.labelStyle}p.text=p.title,p.text===void 0?p.style!==void 0&&(v.arrowheadStyle="fill: #333"):(v.arrowheadStyle="fill: #333",v.labelpos="c",((b=qt().flowchart)==null?void 0:b.htmlLabels)??qt().htmlLabels?(v.labelType="html",v.label=''+p.text+""):(v.labelType="text",v.label=p.text.replace(ci.lineBreakRegex,` -`),p.style===void 0&&(v.style=v.style||"stroke: #333; stroke-width: 1.5px;fill:none"),v.labelStyle=v.labelStyle.replace("color:","fill:"))),s.setEdge(p.id1,p.id2,v,d)})},Xin=function(i){Ove={...Ove,...i}},Qin=async function(i,s,u,d){Xe.info("Drawing class - ",s);const p=qt().flowchart??qt().class,v=qt().securityLevel;Xe.info("config:",p);const b=(p==null?void 0:p.nodeSpacing)??50,y=(p==null?void 0:p.rankSpacing)??50,T=new B0({multigraph:!0,compound:!0}).setGraph({rankdir:d.db.getDirection(),nodesep:b,ranksep:y,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}}),_=d.db.getNamespaces(),A=d.db.getClasses(),P=d.db.getRelations(),R=d.db.getNotes();Xe.info(P),Kin(_,T,s,d),sKe(A,T,s,d),Yin(P,T),Win(R,T,P.length+1,A);let F;v==="sandbox"&&(F=Ir("#i"+s));const j=Ir(v==="sandbox"?F.nodes()[0].contentDocument.body:"body"),K=j.select(`[id="${s}"]`),ee=j.select("#"+s+" g");if(await qme(ee,T,["aggregation","extension","composition","dependency","lollipop"],"classDiagram",s),Ao.insertTitle(K,"classTitleText",(p==null?void 0:p.titleTopMargin)??5,d.db.getDiagramTitle()),y9(T,K,p==null?void 0:p.diagramPadding,p==null?void 0:p.useMaxWidth),!(p!=null&&p.htmlLabels)){const ie=v==="sandbox"?F.nodes()[0].contentDocument:document,oe=ie.querySelectorAll('[id="'+s+'"] .edgeLabel .label');for(const pe of oe){const be=pe.getBBox(),ae=ie.createElementNS("http://www.w3.org/2000/svg","rect");ae.setAttribute("rx",0),ae.setAttribute("ry",0),ae.setAttribute("width",be.width),ae.setAttribute("height",be.height),pe.insertBefore(ae,pe.firstChild)}}};function aKe(i){let s;switch(i){case 0:s="aggregation";break;case 1:s="extension";break;case 2:s="composition";break;case 3:s="dependency";break;case 4:s="lollipop";break;default:s="none"}return s}const Jin=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:KGe,db:yJ,renderer:{setConf:Xin,draw:Qin},styles:tKe,init:i=>{i.class||(i.class={}),i.class.arrowMarkerAbsolute=i.arrowMarkerAbsolute,yJ.clear()}}},Symbol.toStringTag,{value:"Module"}));var Nve=function(){var i=function(Ie,Se,Ce,ke){for(Ce=Ce||{},ke=Ie.length;ke--;Ce[Ie[ke]]=Se);return Ce},s=[1,2],u=[1,3],d=[1,4],p=[2,4],v=[1,9],b=[1,11],y=[1,15],T=[1,16],_=[1,17],A=[1,18],P=[1,30],R=[1,19],F=[1,20],j=[1,21],K=[1,22],ee=[1,23],ie=[1,25],oe=[1,26],pe=[1,27],be=[1,28],ae=[1,29],ne=[1,32],se=[1,33],de=[1,34],X=[1,35],ge=[1,31],W=[1,4,5,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],xe=[1,4,5,13,14,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],U=[4,5,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],Fe={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,cssClassStatement:11,idStatement:12,DESCR:13,"-->":14,HIDE_EMPTY:15,scale:16,WIDTH:17,COMPOSIT_STATE:18,STRUCT_START:19,STRUCT_STOP:20,STATE_DESCR:21,AS:22,ID:23,FORK:24,JOIN:25,CHOICE:26,CONCURRENT:27,note:28,notePosition:29,NOTE_TEXT:30,direction:31,acc_title:32,acc_title_value:33,acc_descr:34,acc_descr_value:35,acc_descr_multiline_value:36,classDef:37,CLASSDEF_ID:38,CLASSDEF_STYLEOPTS:39,DEFAULT:40,class:41,CLASSENTITY_IDS:42,STYLECLASS:43,direction_tb:44,direction_bt:45,direction_rl:46,direction_lr:47,eol:48,";":49,EDGE_STATE:50,STYLE_SEPARATOR:51,left_of:52,right_of:53,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",13:"DESCR",14:"-->",15:"HIDE_EMPTY",16:"scale",17:"WIDTH",18:"COMPOSIT_STATE",19:"STRUCT_START",20:"STRUCT_STOP",21:"STATE_DESCR",22:"AS",23:"ID",24:"FORK",25:"JOIN",26:"CHOICE",27:"CONCURRENT",28:"note",30:"NOTE_TEXT",32:"acc_title",33:"acc_title_value",34:"acc_descr",35:"acc_descr_value",36:"acc_descr_multiline_value",37:"classDef",38:"CLASSDEF_ID",39:"CLASSDEF_STYLEOPTS",40:"DEFAULT",41:"class",42:"CLASSENTITY_IDS",43:"STYLECLASS",44:"direction_tb",45:"direction_bt",46:"direction_rl",47:"direction_lr",49:";",50:"EDGE_STATE",51:"STYLE_SEPARATOR",52:"left_of",53:"right_of"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,1],[9,1],[9,1],[9,2],[9,3],[9,4],[9,1],[9,2],[9,1],[9,4],[9,3],[9,6],[9,1],[9,1],[9,1],[9,1],[9,4],[9,4],[9,1],[9,2],[9,2],[9,1],[10,3],[10,3],[11,3],[31,1],[31,1],[31,1],[31,1],[48,1],[48,1],[12,1],[12,1],[12,3],[12,3],[29,1],[29,1]],performAction:function(Se,Ce,ke,Ke,Ft,Ne,gn){var _t=Ne.length-1;switch(Ft){case 3:return Ke.setRootDoc(Ne[_t]),Ne[_t];case 4:this.$=[];break;case 5:Ne[_t]!="nl"&&(Ne[_t-1].push(Ne[_t]),this.$=Ne[_t-1]);break;case 6:case 7:this.$=Ne[_t];break;case 8:this.$="nl";break;case 11:this.$=Ne[_t];break;case 12:const xt=Ne[_t-1];xt.description=Ke.trimColon(Ne[_t]),this.$=xt;break;case 13:this.$={stmt:"relation",state1:Ne[_t-2],state2:Ne[_t]};break;case 14:const Pt=Ke.trimColon(Ne[_t]);this.$={stmt:"relation",state1:Ne[_t-3],state2:Ne[_t-1],description:Pt};break;case 18:this.$={stmt:"state",id:Ne[_t-3],type:"default",description:"",doc:Ne[_t-1]};break;case 19:var Et=Ne[_t],Gt=Ne[_t-2].trim();if(Ne[_t].match(":")){var ln=Ne[_t].split(":");Et=ln[0],Gt=[Gt,ln[1]]}this.$={stmt:"state",id:Et,type:"default",description:Gt};break;case 20:this.$={stmt:"state",id:Ne[_t-3],type:"default",description:Ne[_t-5],doc:Ne[_t-1]};break;case 21:this.$={stmt:"state",id:Ne[_t],type:"fork"};break;case 22:this.$={stmt:"state",id:Ne[_t],type:"join"};break;case 23:this.$={stmt:"state",id:Ne[_t],type:"choice"};break;case 24:this.$={stmt:"state",id:Ke.getDividerId(),type:"divider"};break;case 25:this.$={stmt:"state",id:Ne[_t-1].trim(),note:{position:Ne[_t-2].trim(),text:Ne[_t].trim()}};break;case 28:this.$=Ne[_t].trim(),Ke.setAccTitle(this.$);break;case 29:case 30:this.$=Ne[_t].trim(),Ke.setAccDescription(this.$);break;case 31:case 32:this.$={stmt:"classDef",id:Ne[_t-1].trim(),classes:Ne[_t].trim()};break;case 33:this.$={stmt:"applyClass",id:Ne[_t-1].trim(),styleClass:Ne[_t].trim()};break;case 34:Ke.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 35:Ke.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 36:Ke.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 37:Ke.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 40:case 41:this.$={stmt:"state",id:Ne[_t].trim(),type:"default",description:""};break;case 42:this.$={stmt:"state",id:Ne[_t-2].trim(),classes:[Ne[_t].trim()],type:"default",description:""};break;case 43:this.$={stmt:"state",id:Ne[_t-2].trim(),classes:[Ne[_t].trim()],type:"default",description:""};break}},table:[{3:1,4:s,5:u,6:d},{1:[3]},{3:5,4:s,5:u,6:d},{3:6,4:s,5:u,6:d},i([1,4,5,15,16,18,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],p,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:v,5:b,8:8,9:10,10:12,11:13,12:14,15:y,16:T,18:_,21:A,23:P,24:R,25:F,26:j,27:K,28:ee,31:24,32:ie,34:oe,36:pe,37:be,41:ae,44:ne,45:se,46:de,47:X,50:ge},i(W,[2,5]),{9:36,10:12,11:13,12:14,15:y,16:T,18:_,21:A,23:P,24:R,25:F,26:j,27:K,28:ee,31:24,32:ie,34:oe,36:pe,37:be,41:ae,44:ne,45:se,46:de,47:X,50:ge},i(W,[2,7]),i(W,[2,8]),i(W,[2,9]),i(W,[2,10]),i(W,[2,11],{13:[1,37],14:[1,38]}),i(W,[2,15]),{17:[1,39]},i(W,[2,17],{19:[1,40]}),{22:[1,41]},i(W,[2,21]),i(W,[2,22]),i(W,[2,23]),i(W,[2,24]),{29:42,30:[1,43],52:[1,44],53:[1,45]},i(W,[2,27]),{33:[1,46]},{35:[1,47]},i(W,[2,30]),{38:[1,48],40:[1,49]},{42:[1,50]},i(xe,[2,40],{51:[1,51]}),i(xe,[2,41],{51:[1,52]}),i(W,[2,34]),i(W,[2,35]),i(W,[2,36]),i(W,[2,37]),i(W,[2,6]),i(W,[2,12]),{12:53,23:P,50:ge},i(W,[2,16]),i(U,p,{7:54}),{23:[1,55]},{23:[1,56]},{22:[1,57]},{23:[2,44]},{23:[2,45]},i(W,[2,28]),i(W,[2,29]),{39:[1,58]},{39:[1,59]},{43:[1,60]},{23:[1,61]},{23:[1,62]},i(W,[2,13],{13:[1,63]}),{4:v,5:b,8:8,9:10,10:12,11:13,12:14,15:y,16:T,18:_,20:[1,64],21:A,23:P,24:R,25:F,26:j,27:K,28:ee,31:24,32:ie,34:oe,36:pe,37:be,41:ae,44:ne,45:se,46:de,47:X,50:ge},i(W,[2,19],{19:[1,65]}),{30:[1,66]},{23:[1,67]},i(W,[2,31]),i(W,[2,32]),i(W,[2,33]),i(xe,[2,42]),i(xe,[2,43]),i(W,[2,14]),i(W,[2,18]),i(U,p,{7:68}),i(W,[2,25]),i(W,[2,26]),{4:v,5:b,8:8,9:10,10:12,11:13,12:14,15:y,16:T,18:_,20:[1,69],21:A,23:P,24:R,25:F,26:j,27:K,28:ee,31:24,32:ie,34:oe,36:pe,37:be,41:ae,44:ne,45:se,46:de,47:X,50:ge},i(W,[2,20])],defaultActions:{5:[2,1],6:[2,2],44:[2,44],45:[2,45]},parseError:function(Se,Ce){if(Ce.recoverable)this.trace(Se);else{var ke=new Error(Se);throw ke.hash=Ce,ke}},parse:function(Se){var Ce=this,ke=[0],Ke=[],Ft=[null],Ne=[],gn=this.table,_t="",Et=0,Gt=0,ln=2,xt=1,Pt=Ne.slice.call(arguments,1),Qe=Object.create(this.lexer),Dt={yy:{}};for(var kt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,kt)&&(Dt.yy[kt]=this.yy[kt]);Qe.setInput(Se,Dt.yy),Dt.yy.lexer=Qe,Dt.yy.parser=this,typeof Qe.yylloc>"u"&&(Qe.yylloc={});var On=Qe.yylloc;Ne.push(On);var ht=Qe.options&&Qe.options.ranges;typeof Dt.yy.parseError=="function"?this.parseError=Dt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function zr(){var At;return At=Ke.pop()||Qe.lex()||xt,typeof At!="number"&&(At instanceof Array&&(Ke=At,At=Ke.pop()),At=Ce.symbols_[At]||At),At}for(var yt,ji,xi,Ma,zs={},ao,Tr,Fn,qn;;){if(ji=ke[ke.length-1],this.defaultActions[ji]?xi=this.defaultActions[ji]:((yt===null||typeof yt>"u")&&(yt=zr()),xi=gn[ji]&&gn[ji][yt]),typeof xi>"u"||!xi.length||!xi[0]){var Un="";qn=[];for(ao in gn[ji])this.terminals_[ao]&&ao>ln&&qn.push("'"+this.terminals_[ao]+"'");Qe.showPosition?Un="Parse error on line "+(Et+1)+`: -`+Qe.showPosition()+` -Expecting `+qn.join(", ")+", got '"+(this.terminals_[yt]||yt)+"'":Un="Parse error on line "+(Et+1)+": Unexpected "+(yt==xt?"end of input":"'"+(this.terminals_[yt]||yt)+"'"),this.parseError(Un,{text:Qe.match,token:this.terminals_[yt]||yt,line:Qe.yylineno,loc:On,expected:qn})}if(xi[0]instanceof Array&&xi.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ji+", token: "+yt);switch(xi[0]){case 1:ke.push(yt),Ft.push(Qe.yytext),Ne.push(Qe.yylloc),ke.push(xi[1]),yt=null,Gt=Qe.yyleng,_t=Qe.yytext,Et=Qe.yylineno,On=Qe.yylloc;break;case 2:if(Tr=this.productions_[xi[1]][1],zs.$=Ft[Ft.length-Tr],zs._$={first_line:Ne[Ne.length-(Tr||1)].first_line,last_line:Ne[Ne.length-1].last_line,first_column:Ne[Ne.length-(Tr||1)].first_column,last_column:Ne[Ne.length-1].last_column},ht&&(zs._$.range=[Ne[Ne.length-(Tr||1)].range[0],Ne[Ne.length-1].range[1]]),Ma=this.performAction.apply(zs,[_t,Gt,Et,Dt.yy,xi[1],Ft,Ne].concat(Pt)),typeof Ma<"u")return Ma;Tr&&(ke=ke.slice(0,-1*Tr*2),Ft=Ft.slice(0,-1*Tr),Ne=Ne.slice(0,-1*Tr)),ke.push(this.productions_[xi[1]][0]),Ft.push(zs.$),Ne.push(zs._$),Fn=gn[ke[ke.length-2]][ke[ke.length-1]],ke.push(Fn);break;case 3:return!0}}return!0}},Pe=function(){var Ie={EOF:1,parseError:function(Ce,ke){if(this.yy.parser)this.yy.parser.parseError(Ce,ke);else throw new Error(Ce)},setInput:function(Se,Ce){return this.yy=Ce||this.yy||{},this._input=Se,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var Se=this._input[0];this.yytext+=Se,this.yyleng++,this.offset++,this.match+=Se,this.matched+=Se;var Ce=Se.match(/(?:\r\n?|\n).*/g);return Ce?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Se},unput:function(Se){var Ce=Se.length,ke=Se.split(/(?:\r\n?|\n)/g);this._input=Se+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ce),this.offset-=Ce;var Ke=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ke.length-1&&(this.yylineno-=ke.length-1);var Ft=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ke?(ke.length===Ke.length?this.yylloc.first_column:0)+Ke[Ke.length-ke.length].length-ke[0].length:this.yylloc.first_column-Ce},this.options.ranges&&(this.yylloc.range=[Ft[0],Ft[0]+this.yyleng-Ce]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(Se){this.unput(this.match.slice(Se))},pastInput:function(){var Se=this.matched.substr(0,this.matched.length-this.match.length);return(Se.length>20?"...":"")+Se.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Se=this.match;return Se.length<20&&(Se+=this._input.substr(0,20-Se.length)),(Se.substr(0,20)+(Se.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Se=this.pastInput(),Ce=new Array(Se.length+1).join("-");return Se+this.upcomingInput()+` -`+Ce+"^"},test_match:function(Se,Ce){var ke,Ke,Ft;if(this.options.backtrack_lexer&&(Ft={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Ft.yylloc.range=this.yylloc.range.slice(0))),Ke=Se[0].match(/(?:\r\n?|\n).*/g),Ke&&(this.yylineno+=Ke.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Ke?Ke[Ke.length-1].length-Ke[Ke.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Se[0].length},this.yytext+=Se[0],this.match+=Se[0],this.matches=Se,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Se[0].length),this.matched+=Se[0],ke=this.performAction.call(this,this.yy,this,Ce,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ke)return ke;if(this._backtrack){for(var Ne in Ft)this[Ne]=Ft[Ne];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Se,Ce,ke,Ke;this._more||(this.yytext="",this.match="");for(var Ft=this._currentRules(),Ne=0;NeCe[0].length)){if(Ce=ke,Ke=Ne,this.options.backtrack_lexer){if(Se=this.test_match(ke,Ft[Ne]),Se!==!1)return Se;if(this._backtrack){Ce=!1;continue}else return!1}else if(!this.options.flex)break}return Ce?(Se=this.test_match(Ce,Ft[Ke]),Se!==!1?Se:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Ce=this.next();return Ce||this.lex()},begin:function(Ce){this.conditionStack.push(Ce)},popState:function(){var Ce=this.conditionStack.length-1;return Ce>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Ce){return Ce=this.conditionStack.length-1-Math.abs(Ce||0),Ce>=0?this.conditionStack[Ce]:"INITIAL"},pushState:function(Ce){this.begin(Ce)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(Ce,ke,Ke,Ft){switch(Ke){case 0:return 40;case 1:return 44;case 2:return 45;case 3:return 46;case 4:return 47;case 5:break;case 6:break;case 7:return 5;case 8:break;case 9:break;case 10:break;case 11:break;case 12:return this.pushState("SCALE"),16;case 13:return 17;case 14:this.popState();break;case 15:return this.begin("acc_title"),32;case 16:return this.popState(),"acc_title_value";case 17:return this.begin("acc_descr"),34;case 18:return this.popState(),"acc_descr_value";case 19:this.begin("acc_descr_multiline");break;case 20:this.popState();break;case 21:return"acc_descr_multiline_value";case 22:return this.pushState("CLASSDEF"),37;case 23:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";case 24:return this.popState(),this.pushState("CLASSDEFID"),38;case 25:return this.popState(),39;case 26:return this.pushState("CLASS"),41;case 27:return this.popState(),this.pushState("CLASS_STYLE"),42;case 28:return this.popState(),43;case 29:return this.pushState("SCALE"),16;case 30:return 17;case 31:this.popState();break;case 32:this.pushState("STATE");break;case 33:return this.popState(),ke.yytext=ke.yytext.slice(0,-8).trim(),24;case 34:return this.popState(),ke.yytext=ke.yytext.slice(0,-8).trim(),25;case 35:return this.popState(),ke.yytext=ke.yytext.slice(0,-10).trim(),26;case 36:return this.popState(),ke.yytext=ke.yytext.slice(0,-8).trim(),24;case 37:return this.popState(),ke.yytext=ke.yytext.slice(0,-8).trim(),25;case 38:return this.popState(),ke.yytext=ke.yytext.slice(0,-10).trim(),26;case 39:return 44;case 40:return 45;case 41:return 46;case 42:return 47;case 43:this.pushState("STATE_STRING");break;case 44:return this.pushState("STATE_ID"),"AS";case 45:return this.popState(),"ID";case 46:this.popState();break;case 47:return"STATE_DESCR";case 48:return 18;case 49:this.popState();break;case 50:return this.popState(),this.pushState("struct"),19;case 51:break;case 52:return this.popState(),20;case 53:break;case 54:return this.begin("NOTE"),28;case 55:return this.popState(),this.pushState("NOTE_ID"),52;case 56:return this.popState(),this.pushState("NOTE_ID"),53;case 57:this.popState(),this.pushState("FLOATING_NOTE");break;case 58:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 59:break;case 60:return"NOTE_TEXT";case 61:return this.popState(),"ID";case 62:return this.popState(),this.pushState("NOTE_TEXT"),23;case 63:return this.popState(),ke.yytext=ke.yytext.substr(2).trim(),30;case 64:return this.popState(),ke.yytext=ke.yytext.slice(0,-8).trim(),30;case 65:return 6;case 66:return 6;case 67:return 15;case 68:return 50;case 69:return 23;case 70:return ke.yytext=ke.yytext.trim(),13;case 71:return 14;case 72:return 27;case 73:return 51;case 74:return 5;case 75:return"INVALID"}},rules:[/^(?:default\b)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:classDef\s+)/i,/^(?:DEFAULT\s+)/i,/^(?:\w+\s+)/i,/^(?:[^\n]*)/i,/^(?:class\s+)/i,/^(?:(\w+)+((,\s*\w+)*))/i,/^(?:[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?::::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[9,10],inclusive:!1},struct:{rules:[9,10,22,26,32,39,40,41,42,51,52,53,54,68,69,70,71,72],inclusive:!1},FLOATING_NOTE_ID:{rules:[61],inclusive:!1},FLOATING_NOTE:{rules:[58,59,60],inclusive:!1},NOTE_TEXT:{rules:[63,64],inclusive:!1},NOTE_ID:{rules:[62],inclusive:!1},NOTE:{rules:[55,56,57],inclusive:!1},CLASS_STYLE:{rules:[28],inclusive:!1},CLASS:{rules:[27],inclusive:!1},CLASSDEFID:{rules:[25],inclusive:!1},CLASSDEF:{rules:[23,24],inclusive:!1},acc_descr_multiline:{rules:[20,21],inclusive:!1},acc_descr:{rules:[18],inclusive:!1},acc_title:{rules:[16],inclusive:!1},SCALE:{rules:[13,14,30,31],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[45],inclusive:!1},STATE_STRING:{rules:[46,47],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[9,10,33,34,35,36,37,38,43,44,48,49,50],inclusive:!1},ID:{rules:[9,10],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,10,11,12,15,17,19,22,26,29,32,50,54,65,66,67,68,69,70,71,73,74,75],inclusive:!0}}};return Ie}();Fe.lexer=Pe;function je(){this.yy={}}return je.prototype=Fe,Fe.Parser=je,new je}();Nve.parser=Nve;const oKe=Nve,Zin="LR",esn="TB",EJ="state",Pve="relation",tsn="classDef",nsn="applyClass",XR="default",cKe="divider",Bve="[*]",uKe="start",lKe=Bve,hKe="end",fKe="color",dKe="fill",rsn="bgFill",isn=",";function gKe(){return{}}let pKe=Zin,TJ=[],QR=gKe();const bKe=()=>({relations:[],states:{},documents:{}});let CJ={root:bKe()},jg=CJ.root,JR=0,mKe=0;const ssn={LINE:0,DOTTED_LINE:1},asn={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3},SJ=i=>JSON.parse(JSON.stringify(i)),osn=i=>{Xe.info("Setting root doc",i),TJ=i},csn=()=>TJ,_J=(i,s,u)=>{if(s.stmt===Pve)_J(i,s.state1,!0),_J(i,s.state2,!1);else if(s.stmt===EJ&&(s.id==="[*]"?(s.id=u?i.id+"_start":i.id+"_end",s.start=u):s.id=s.id.trim()),s.doc){const d=[];let p=[],v;for(v=0;v0&&p.length>0){const b={stmt:EJ,id:bje(),type:"divider",doc:SJ(p)};d.push(SJ(b)),s.doc=d}s.doc.forEach(b=>_J(s,b,!0))}},usn=()=>(_J({id:"root"},{id:"root",doc:TJ},!0),{id:"root",doc:TJ}),lsn=i=>{let s;i.doc?s=i.doc:s=i,Xe.info(s),vKe(!0),Xe.info("Extract",s),s.forEach(u=>{switch(u.stmt){case EJ:rS(u.id.trim(),u.type,u.doc,u.description,u.note,u.classes,u.styles,u.textStyles);break;case Pve:wKe(u.state1,u.state2,u.description);break;case tsn:yKe(u.id.trim(),u.classes);break;case nsn:$ve(u.id.trim(),u.styleClass);break}})},rS=function(i,s=XR,u=null,d=null,p=null,v=null,b=null,y=null){const T=i==null?void 0:i.trim();jg.states[T]===void 0?(Xe.info("Adding state ",T,d),jg.states[T]={id:T,descriptions:[],type:s,doc:u,note:p,classes:[],styles:[],textStyles:[]}):(jg.states[T].doc||(jg.states[T].doc=u),jg.states[T].type||(jg.states[T].type=s)),d&&(Xe.info("Setting state description",T,d),typeof d=="string"&&jve(T,d.trim()),typeof d=="object"&&d.forEach(_=>jve(T,_.trim()))),p&&(jg.states[T].note=p,jg.states[T].note.text=ci.sanitizeText(jg.states[T].note.text,qt())),v&&(Xe.info("Setting state classes",T,v),(typeof v=="string"?[v]:v).forEach(A=>$ve(T,A.trim()))),b&&(Xe.info("Setting state styles",T,b),(typeof b=="string"?[b]:b).forEach(A=>ysn(T,A.trim()))),y&&(Xe.info("Setting state styles",T,b),(typeof y=="string"?[y]:y).forEach(A=>xsn(T,A.trim())))},vKe=function(i){CJ={root:bKe()},jg=CJ.root,JR=0,QR=gKe(),i||Pg()},ZR=function(i){return jg.states[i]},hsn=function(){return jg.states},fsn=function(){Xe.info("Documents = ",CJ)},dsn=function(){return jg.relations};function Fve(i=""){let s=i;return i===Bve&&(JR++,s=`${uKe}${JR}`),s}function Rve(i="",s=XR){return i===Bve?uKe:s}function gsn(i=""){let s=i;return i===lKe&&(JR++,s=`${hKe}${JR}`),s}function psn(i="",s=XR){return i===lKe?hKe:s}function bsn(i,s,u){let d=Fve(i.id.trim()),p=Rve(i.id.trim(),i.type),v=Fve(s.id.trim()),b=Rve(s.id.trim(),s.type);rS(d,p,i.doc,i.description,i.note,i.classes,i.styles,i.textStyles),rS(v,b,s.doc,s.description,s.note,s.classes,s.styles,s.textStyles),jg.relations.push({id1:d,id2:v,relationTitle:ci.sanitizeText(u,qt())})}const wKe=function(i,s,u){if(typeof i=="object")bsn(i,s,u);else{const d=Fve(i.trim()),p=Rve(i),v=gsn(s.trim()),b=psn(s);rS(d,p),rS(v,b),jg.relations.push({id1:d,id2:v,title:ci.sanitizeText(u,qt())})}},jve=function(i,s){const u=jg.states[i],d=s.startsWith(":")?s.replace(":","").trim():s;u.descriptions.push(ci.sanitizeText(d,qt()))},msn=function(i){return i.substring(0,1)===":"?i.substr(2).trim():i.trim()},vsn=()=>(mKe++,"divider-id-"+mKe),yKe=function(i,s=""){QR[i]===void 0&&(QR[i]={id:i,styles:[],textStyles:[]});const u=QR[i];s!=null&&s.split(isn).forEach(d=>{const p=d.replace(/([^;]*);/,"$1").trim();if(d.match(fKe)){const b=p.replace(dKe,rsn).replace(fKe,dKe);u.textStyles.push(b)}u.styles.push(p)})},wsn=function(){return QR},$ve=function(i,s){i.split(",").forEach(function(u){let d=ZR(u);if(d===void 0){const p=u.trim();rS(p),d=ZR(p)}d.classes.push(s)})},ysn=function(i,s){const u=ZR(i);u!==void 0&&u.textStyles.push(s)},xsn=function(i,s){const u=ZR(i);u!==void 0&&u.textStyles.push(s)},G7={getConfig:()=>qt().state,addState:rS,clear:vKe,getState:ZR,getStates:hsn,getRelations:dsn,getClasses:wsn,getDirection:()=>pKe,addRelation:wKe,getDividerId:vsn,setDirection:i=>{pKe=i},cleanupLabel:msn,lineType:ssn,relationType:asn,logDocuments:fsn,getRootDoc:csn,setRootDoc:osn,getRootDocV2:usn,extract:lsn,trimColon:i=>i&&i[0]===":"?i.substr(1).trim():i.trim(),getAccTitle:Cp,setAccTitle:Bg,getAccDescription:_p,setAccDescription:Sp,addStyleClass:yKe,setCssClass:$ve,addDescription:jve,setDiagramTitle:cm,getDiagramTitle:Ap},xKe=i=>` + fill: ${t.textColor}; +} +`,"getStyles"),FE=JHe});var eWe,tWe,rWe,zE,zO=M(()=>{"use strict";Vt();ut();ow();Jv();TT();hr();eWe=o((t,e="TB")=>{if(!t.doc)return e;let r=e;for(let n of t.doc)n.stmt==="dir"&&(r=n.value);return r},"getDir"),tWe=o(function(t,e){return e.db.getClasses()},"getClasses"),rWe=o(async function(t,e,r,n){Y.info("REF0:"),Y.info("Drawing class diagram (v3)",e);let{securityLevel:i,state:a,layout:s}=pe(),l=n.db.getData(),u=Am(e,i);l.type=n.type,l.layoutAlgorithm=wT(s),l.nodeSpacing=a?.nodeSpacing||50,l.rankSpacing=a?.rankSpacing||50,l.markers=["aggregation","extension","composition","dependency","lollipop"],l.diagramId=e,await Qm(l,u);let h=8;Ut.insertTitle(u,"classDiagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),Zm(u,h,"classDiagram",a?.useMaxWidth??!0)},"draw"),zE={getClasses:tWe,draw:rWe,getDir:eWe}});var Ede={};vr(Ede,{diagram:()=>nWe});var nWe,Sde=M(()=>{"use strict";MO();BO();FO();zO();nWe={parser:OE,db:e1,renderer:zE,styles:FE,init:o(t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute,e1.clear()},"init")}});var _de={};vr(_de,{diagram:()=>oWe});var oWe,Lde=M(()=>{"use strict";MO();BO();FO();zO();oWe={parser:OE,db:e1,renderer:zE,styles:FE,init:o(t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute,e1.clear()},"init")}});var GO,GE,$O=M(()=>{"use strict";GO=function(){var t=o(function(F,B,G,z){for(G=G||{},z=F.length;z--;G[F[z]]=B);return G},"o"),e=[1,2],r=[1,3],n=[1,4],i=[2,4],a=[1,9],s=[1,11],l=[1,16],u=[1,17],h=[1,18],f=[1,19],d=[1,32],p=[1,20],m=[1,21],g=[1,22],y=[1,23],v=[1,24],x=[1,26],b=[1,27],w=[1,28],_=[1,29],T=[1,30],E=[1,31],L=[1,34],S=[1,35],A=[1,36],I=[1,37],D=[1,33],k=[1,4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],R=[1,4,5,14,15,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],C=[4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],O={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,styleStatement:11,cssClassStatement:12,idStatement:13,DESCR:14,"-->":15,HIDE_EMPTY:16,scale:17,WIDTH:18,COMPOSIT_STATE:19,STRUCT_START:20,STRUCT_STOP:21,STATE_DESCR:22,AS:23,ID:24,FORK:25,JOIN:26,CHOICE:27,CONCURRENT:28,note:29,notePosition:30,NOTE_TEXT:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,classDef:38,CLASSDEF_ID:39,CLASSDEF_STYLEOPTS:40,DEFAULT:41,style:42,STYLE_IDS:43,STYLEDEF_STYLEOPTS:44,class:45,CLASSENTITY_IDS:46,STYLECLASS:47,direction_tb:48,direction_bt:49,direction_rl:50,direction_lr:51,eol:52,";":53,EDGE_STATE:54,STYLE_SEPARATOR:55,left_of:56,right_of:57,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",14:"DESCR",15:"-->",16:"HIDE_EMPTY",17:"scale",18:"WIDTH",19:"COMPOSIT_STATE",20:"STRUCT_START",21:"STRUCT_STOP",22:"STATE_DESCR",23:"AS",24:"ID",25:"FORK",26:"JOIN",27:"CHOICE",28:"CONCURRENT",29:"note",31:"NOTE_TEXT",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",38:"classDef",39:"CLASSDEF_ID",40:"CLASSDEF_STYLEOPTS",41:"DEFAULT",42:"style",43:"STYLE_IDS",44:"STYLEDEF_STYLEOPTS",45:"class",46:"CLASSENTITY_IDS",47:"STYLECLASS",48:"direction_tb",49:"direction_bt",50:"direction_rl",51:"direction_lr",53:";",54:"EDGE_STATE",55:"STYLE_SEPARATOR",56:"left_of",57:"right_of"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,3],[9,4],[9,1],[9,2],[9,1],[9,4],[9,3],[9,6],[9,1],[9,1],[9,1],[9,1],[9,4],[9,4],[9,1],[9,2],[9,2],[9,1],[10,3],[10,3],[11,3],[12,3],[32,1],[32,1],[32,1],[32,1],[52,1],[52,1],[13,1],[13,1],[13,3],[13,3],[30,1],[30,1]],performAction:o(function(B,G,z,W,Z,j,oe){var K=j.length-1;switch(Z){case 3:return W.setRootDoc(j[K]),j[K];break;case 4:this.$=[];break;case 5:j[K]!="nl"&&(j[K-1].push(j[K]),this.$=j[K-1]);break;case 6:case 7:this.$=j[K];break;case 8:this.$="nl";break;case 12:this.$=j[K];break;case 13:let q=j[K-1];q.description=W.trimColon(j[K]),this.$=q;break;case 14:this.$={stmt:"relation",state1:j[K-2],state2:j[K]};break;case 15:let Q=W.trimColon(j[K]);this.$={stmt:"relation",state1:j[K-3],state2:j[K-1],description:Q};break;case 19:this.$={stmt:"state",id:j[K-3],type:"default",description:"",doc:j[K-1]};break;case 20:var ee=j[K],J=j[K-2].trim();if(j[K].match(":")){var H=j[K].split(":");ee=H[0],J=[J,H[1]]}this.$={stmt:"state",id:ee,type:"default",description:J};break;case 21:this.$={stmt:"state",id:j[K-3],type:"default",description:j[K-5],doc:j[K-1]};break;case 22:this.$={stmt:"state",id:j[K],type:"fork"};break;case 23:this.$={stmt:"state",id:j[K],type:"join"};break;case 24:this.$={stmt:"state",id:j[K],type:"choice"};break;case 25:this.$={stmt:"state",id:W.getDividerId(),type:"divider"};break;case 26:this.$={stmt:"state",id:j[K-1].trim(),note:{position:j[K-2].trim(),text:j[K].trim()}};break;case 29:this.$=j[K].trim(),W.setAccTitle(this.$);break;case 30:case 31:this.$=j[K].trim(),W.setAccDescription(this.$);break;case 32:case 33:this.$={stmt:"classDef",id:j[K-1].trim(),classes:j[K].trim()};break;case 34:this.$={stmt:"style",id:j[K-1].trim(),styleClass:j[K].trim()};break;case 35:this.$={stmt:"applyClass",id:j[K-1].trim(),styleClass:j[K].trim()};break;case 36:W.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 37:W.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 38:W.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 39:W.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 42:case 43:this.$={stmt:"state",id:j[K].trim(),type:"default",description:""};break;case 44:this.$={stmt:"state",id:j[K-2].trim(),classes:[j[K].trim()],type:"default",description:""};break;case 45:this.$={stmt:"state",id:j[K-2].trim(),classes:[j[K].trim()],type:"default",description:""};break}},"anonymous"),table:[{3:1,4:e,5:r,6:n},{1:[3]},{3:5,4:e,5:r,6:n},{3:6,4:e,5:r,6:n},t([1,4,5,16,17,19,22,24,25,26,27,28,29,33,35,37,38,42,45,48,49,50,51,54],i,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:_,42:T,45:E,48:L,49:S,50:A,51:I,54:D},t(k,[2,5]),{9:38,10:12,11:13,12:14,13:15,16:l,17:u,19:h,22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:_,42:T,45:E,48:L,49:S,50:A,51:I,54:D},t(k,[2,7]),t(k,[2,8]),t(k,[2,9]),t(k,[2,10]),t(k,[2,11]),t(k,[2,12],{14:[1,39],15:[1,40]}),t(k,[2,16]),{18:[1,41]},t(k,[2,18],{20:[1,42]}),{23:[1,43]},t(k,[2,22]),t(k,[2,23]),t(k,[2,24]),t(k,[2,25]),{30:44,31:[1,45],56:[1,46],57:[1,47]},t(k,[2,28]),{34:[1,48]},{36:[1,49]},t(k,[2,31]),{39:[1,50],41:[1,51]},{43:[1,52]},{46:[1,53]},t(R,[2,42],{55:[1,54]}),t(R,[2,43],{55:[1,55]}),t(k,[2,36]),t(k,[2,37]),t(k,[2,38]),t(k,[2,39]),t(k,[2,6]),t(k,[2,13]),{13:56,24:d,54:D},t(k,[2,17]),t(C,i,{7:57}),{24:[1,58]},{24:[1,59]},{23:[1,60]},{24:[2,46]},{24:[2,47]},t(k,[2,29]),t(k,[2,30]),{40:[1,61]},{40:[1,62]},{44:[1,63]},{47:[1,64]},{24:[1,65]},{24:[1,66]},t(k,[2,14],{14:[1,67]}),{4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,21:[1,68],22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:_,42:T,45:E,48:L,49:S,50:A,51:I,54:D},t(k,[2,20],{20:[1,69]}),{31:[1,70]},{24:[1,71]},t(k,[2,32]),t(k,[2,33]),t(k,[2,34]),t(k,[2,35]),t(R,[2,44]),t(R,[2,45]),t(k,[2,15]),t(k,[2,19]),t(C,i,{7:72}),t(k,[2,26]),t(k,[2,27]),{4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,21:[1,73],22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:_,42:T,45:E,48:L,49:S,50:A,51:I,54:D},t(k,[2,21])],defaultActions:{5:[2,1],6:[2,2],46:[2,46],47:[2,47]},parseError:o(function(B,G){if(G.recoverable)this.trace(B);else{var z=new Error(B);throw z.hash=G,z}},"parseError"),parse:o(function(B){var G=this,z=[0],W=[],Z=[null],j=[],oe=this.table,K="",ee=0,J=0,H=0,q=2,Q=1,ae=j.slice.call(arguments,1),ue=Object.create(this.lexer),ce={yy:{}};for(var te in this.yy)Object.prototype.hasOwnProperty.call(this.yy,te)&&(ce.yy[te]=this.yy[te]);ue.setInput(B,ce.yy),ce.yy.lexer=ue,ce.yy.parser=this,typeof ue.yylloc>"u"&&(ue.yylloc={});var Ne=ue.yylloc;j.push(Ne);var se=ue.options&&ue.options.ranges;typeof ce.yy.parseError=="function"?this.parseError=ce.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ke(Te){z.length=z.length-2*Te,Z.length=Z.length-Te,j.length=j.length-Te}o(ke,"popStack");function Re(){var Te;return Te=W.pop()||ue.lex()||Q,typeof Te!="number"&&(Te instanceof Array&&(W=Te,Te=W.pop()),Te=G.symbols_[Te]||Te),Te}o(Re,"lex");for(var Ce,Pe,Ie,$e,ye,X,fe={},he,ge,ne,ve;;){if(Ie=z[z.length-1],this.defaultActions[Ie]?$e=this.defaultActions[Ie]:((Ce===null||typeof Ce>"u")&&(Ce=Re()),$e=oe[Ie]&&oe[Ie][Ce]),typeof $e>"u"||!$e.length||!$e[0]){var U="";ve=[];for(he in oe[Ie])this.terminals_[he]&&he>q&&ve.push("'"+this.terminals_[he]+"'");ue.showPosition?U="Parse error on line "+(ee+1)+`: +`+ue.showPosition()+` +Expecting `+ve.join(", ")+", got '"+(this.terminals_[Ce]||Ce)+"'":U="Parse error on line "+(ee+1)+": Unexpected "+(Ce==Q?"end of input":"'"+(this.terminals_[Ce]||Ce)+"'"),this.parseError(U,{text:ue.match,token:this.terminals_[Ce]||Ce,line:ue.yylineno,loc:Ne,expected:ve})}if($e[0]instanceof Array&&$e.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Ie+", token: "+Ce);switch($e[0]){case 1:z.push(Ce),Z.push(ue.yytext),j.push(ue.yylloc),z.push($e[1]),Ce=null,Pe?(Ce=Pe,Pe=null):(J=ue.yyleng,K=ue.yytext,ee=ue.yylineno,Ne=ue.yylloc,H>0&&H--);break;case 2:if(ge=this.productions_[$e[1]][1],fe.$=Z[Z.length-ge],fe._$={first_line:j[j.length-(ge||1)].first_line,last_line:j[j.length-1].last_line,first_column:j[j.length-(ge||1)].first_column,last_column:j[j.length-1].last_column},se&&(fe._$.range=[j[j.length-(ge||1)].range[0],j[j.length-1].range[1]]),X=this.performAction.apply(fe,[K,J,ee,ce.yy,$e[1],Z,j].concat(ae)),typeof X<"u")return X;ge&&(z=z.slice(0,-1*ge*2),Z=Z.slice(0,-1*ge),j=j.slice(0,-1*ge)),z.push(this.productions_[$e[1]][0]),Z.push(fe.$),j.push(fe._$),ne=oe[z[z.length-2]][z[z.length-1]],z.push(ne);break;case 3:return!0}}return!0},"parse")},N=function(){var F={EOF:1,parseError:o(function(G,z){if(this.yy.parser)this.yy.parser.parseError(G,z);else throw new Error(G)},"parseError"),setInput:o(function(B,G){return this.yy=G||this.yy||{},this._input=B,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var B=this._input[0];this.yytext+=B,this.yyleng++,this.offset++,this.match+=B,this.matched+=B;var G=B.match(/(?:\r\n?|\n).*/g);return G?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),B},"input"),unput:o(function(B){var G=B.length,z=B.split(/(?:\r\n?|\n)/g);this._input=B+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-G),this.offset-=G;var W=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),z.length-1&&(this.yylineno-=z.length-1);var Z=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:z?(z.length===W.length?this.yylloc.first_column:0)+W[W.length-z.length].length-z[0].length:this.yylloc.first_column-G},this.options.ranges&&(this.yylloc.range=[Z[0],Z[0]+this.yyleng-G]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(B){this.unput(this.match.slice(B))},"less"),pastInput:o(function(){var B=this.matched.substr(0,this.matched.length-this.match.length);return(B.length>20?"...":"")+B.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var B=this.match;return B.length<20&&(B+=this._input.substr(0,20-B.length)),(B.substr(0,20)+(B.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var B=this.pastInput(),G=new Array(B.length+1).join("-");return B+this.upcomingInput()+` +`+G+"^"},"showPosition"),test_match:o(function(B,G){var z,W,Z;if(this.options.backtrack_lexer&&(Z={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Z.yylloc.range=this.yylloc.range.slice(0))),W=B[0].match(/(?:\r\n?|\n).*/g),W&&(this.yylineno+=W.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:W?W[W.length-1].length-W[W.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+B[0].length},this.yytext+=B[0],this.match+=B[0],this.matches=B,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(B[0].length),this.matched+=B[0],z=this.performAction.call(this,this.yy,this,G,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),z)return z;if(this._backtrack){for(var j in Z)this[j]=Z[j];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var B,G,z,W;this._more||(this.yytext="",this.match="");for(var Z=this._currentRules(),j=0;jG[0].length)){if(G=z,W=j,this.options.backtrack_lexer){if(B=this.test_match(z,Z[j]),B!==!1)return B;if(this._backtrack){G=!1;continue}else return!1}else if(!this.options.flex)break}return G?(B=this.test_match(G,Z[W]),B!==!1?B:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var G=this.next();return G||this.lex()},"lex"),begin:o(function(G){this.conditionStack.push(G)},"begin"),popState:o(function(){var G=this.conditionStack.length-1;return G>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(G){return G=this.conditionStack.length-1-Math.abs(G||0),G>=0?this.conditionStack[G]:"INITIAL"},"topState"),pushState:o(function(G){this.begin(G)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(G,z,W,Z){var j=Z;switch(W){case 0:return 41;case 1:return 48;case 2:return 49;case 3:return 50;case 4:return 51;case 5:break;case 6:break;case 7:return 5;case 8:break;case 9:break;case 10:break;case 11:break;case 12:return this.pushState("SCALE"),17;break;case 13:return 18;case 14:this.popState();break;case 15:return this.begin("acc_title"),33;break;case 16:return this.popState(),"acc_title_value";break;case 17:return this.begin("acc_descr"),35;break;case 18:return this.popState(),"acc_descr_value";break;case 19:this.begin("acc_descr_multiline");break;case 20:this.popState();break;case 21:return"acc_descr_multiline_value";case 22:return this.pushState("CLASSDEF"),38;break;case 23:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";break;case 24:return this.popState(),this.pushState("CLASSDEFID"),39;break;case 25:return this.popState(),40;break;case 26:return this.pushState("CLASS"),45;break;case 27:return this.popState(),this.pushState("CLASS_STYLE"),46;break;case 28:return this.popState(),47;break;case 29:return this.pushState("STYLE"),42;break;case 30:return this.popState(),this.pushState("STYLEDEF_STYLES"),43;break;case 31:return this.popState(),44;break;case 32:return this.pushState("SCALE"),17;break;case 33:return 18;case 34:this.popState();break;case 35:this.pushState("STATE");break;case 36:return this.popState(),z.yytext=z.yytext.slice(0,-8).trim(),25;break;case 37:return this.popState(),z.yytext=z.yytext.slice(0,-8).trim(),26;break;case 38:return this.popState(),z.yytext=z.yytext.slice(0,-10).trim(),27;break;case 39:return this.popState(),z.yytext=z.yytext.slice(0,-8).trim(),25;break;case 40:return this.popState(),z.yytext=z.yytext.slice(0,-8).trim(),26;break;case 41:return this.popState(),z.yytext=z.yytext.slice(0,-10).trim(),27;break;case 42:return 48;case 43:return 49;case 44:return 50;case 45:return 51;case 46:this.pushState("STATE_STRING");break;case 47:return this.pushState("STATE_ID"),"AS";break;case 48:return this.popState(),"ID";break;case 49:this.popState();break;case 50:return"STATE_DESCR";case 51:return 19;case 52:this.popState();break;case 53:return this.popState(),this.pushState("struct"),20;break;case 54:break;case 55:return this.popState(),21;break;case 56:break;case 57:return this.begin("NOTE"),29;break;case 58:return this.popState(),this.pushState("NOTE_ID"),56;break;case 59:return this.popState(),this.pushState("NOTE_ID"),57;break;case 60:this.popState(),this.pushState("FLOATING_NOTE");break;case 61:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";break;case 62:break;case 63:return"NOTE_TEXT";case 64:return this.popState(),"ID";break;case 65:return this.popState(),this.pushState("NOTE_TEXT"),24;break;case 66:return this.popState(),z.yytext=z.yytext.substr(2).trim(),31;break;case 67:return this.popState(),z.yytext=z.yytext.slice(0,-8).trim(),31;break;case 68:return 6;case 69:return 6;case 70:return 16;case 71:return 54;case 72:return 24;case 73:return z.yytext=z.yytext.trim(),14;break;case 74:return 15;case 75:return 28;case 76:return 55;case 77:return 5;case 78:return"INVALID"}},"anonymous"),rules:[/^(?:default\b)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:classDef\s+)/i,/^(?:DEFAULT\s+)/i,/^(?:\w+\s+)/i,/^(?:[^\n]*)/i,/^(?:class\s+)/i,/^(?:(\w+)+((,\s*\w+)*))/i,/^(?:[^\n]*)/i,/^(?:style\s+)/i,/^(?:[\w,]+\s+)/i,/^(?:[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?::::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[9,10],inclusive:!1},struct:{rules:[9,10,22,26,29,35,42,43,44,45,54,55,56,57,71,72,73,74,75],inclusive:!1},FLOATING_NOTE_ID:{rules:[64],inclusive:!1},FLOATING_NOTE:{rules:[61,62,63],inclusive:!1},NOTE_TEXT:{rules:[66,67],inclusive:!1},NOTE_ID:{rules:[65],inclusive:!1},NOTE:{rules:[58,59,60],inclusive:!1},STYLEDEF_STYLEOPTS:{rules:[],inclusive:!1},STYLEDEF_STYLES:{rules:[31],inclusive:!1},STYLE_IDS:{rules:[],inclusive:!1},STYLE:{rules:[30],inclusive:!1},CLASS_STYLE:{rules:[28],inclusive:!1},CLASS:{rules:[27],inclusive:!1},CLASSDEFID:{rules:[25],inclusive:!1},CLASSDEF:{rules:[23,24],inclusive:!1},acc_descr_multiline:{rules:[20,21],inclusive:!1},acc_descr:{rules:[18],inclusive:!1},acc_title:{rules:[16],inclusive:!1},SCALE:{rules:[13,14,33,34],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[48],inclusive:!1},STATE_STRING:{rules:[49,50],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[9,10,36,37,38,39,40,41,46,47,51,52,53],inclusive:!1},ID:{rules:[9,10],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,10,11,12,15,17,19,22,26,29,32,35,53,57,68,69,70,71,72,73,74,76,77,78],inclusive:!0}}};return F}();O.lexer=N;function P(){this.yy={}}return o(P,"Parser"),P.prototype=O,O.Parser=P,new P}();GO.parser=GO;GE=GO});var Rde,$E,t1,Gx,Mde,Ide,Ode,F0,VE,VO,UO,HO,WO,YO,UE,HE,Pde,Bde,qO,XO,Fde,zde,r1,hWe,Gde,jO,fWe,dWe,$de,Vde,pWe,Ude,mWe,Hde,KO,QO,Wde,WE,Yde,ZO,YE=M(()=>{"use strict";Rde="LR",$E="TB",t1="state",Gx="relation",Mde="classDef",Ide="style",Ode="applyClass",F0="default",VE="divider",VO="fill:none",UO="fill: #333",HO="c",WO="text",YO="normal",UE="rect",HE="rectWithTitle",Pde="stateStart",Bde="stateEnd",qO="divider",XO="roundedWithTitle",Fde="note",zde="noteGroup",r1="statediagram",hWe="state",Gde=`${r1}-${hWe}`,jO="transition",fWe="note",dWe="note-edge",$de=`${jO} ${dWe}`,Vde=`${r1}-${fWe}`,pWe="cluster",Ude=`${r1}-${pWe}`,mWe="cluster-alt",Hde=`${r1}-${mWe}`,KO="parent",QO="note",Wde="state",WE="----",Yde=`${WE}${QO}`,ZO=`${WE}${KO}`});function JO(t="",e=0,r="",n=WE){let i=r!==null&&r.length>0?`${n}${r}`:"";return`${Wde}-${t}${i}-${e}`}function qE(t,e,r){if(!e.id||e.id===""||e.id==="")return;e.cssClasses&&(Array.isArray(e.cssCompiledStyles)||(e.cssCompiledStyles=[]),e.cssClasses.split(" ").forEach(i=>{if(r.get(i)){let a=r.get(i);e.cssCompiledStyles=[...e.cssCompiledStyles,...a.styles]}}));let n=t.find(i=>i.id===e.id);n?Object.assign(n,e):t.push(e)}function yWe(t){return t?.classes?.join(" ")??""}function vWe(t){return t?.styles??[]}var XE,Sf,gWe,qde,n1,Xde,jde=M(()=>{"use strict";Vt();ut();fr();YE();XE=new Map,Sf=0;o(JO,"stateDomId");gWe=o((t,e,r,n,i,a,s,l)=>{Y.trace("items",e),e.forEach(u=>{switch(u.stmt){case t1:n1(t,u,r,n,i,a,s,l);break;case F0:n1(t,u,r,n,i,a,s,l);break;case Gx:{n1(t,u.state1,r,n,i,a,s,l),n1(t,u.state2,r,n,i,a,s,l);let h={id:"edge"+Sf,start:u.state1.id,end:u.state2.id,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:VO,labelStyle:"",label:qe.sanitizeText(u.description,pe()),arrowheadStyle:UO,labelpos:HO,labelType:WO,thickness:YO,classes:jO,look:s};i.push(h),Sf++}break}})},"setupDoc"),qde=o((t,e=$E)=>{let r=e;if(t.doc)for(let n of t.doc)n.stmt==="dir"&&(r=n.value);return r},"getDir");o(qE,"insertOrUpdateNode");o(yWe,"getClassesFromDbInfo");o(vWe,"getStylesFromDbInfo");n1=o((t,e,r,n,i,a,s,l)=>{let u=e.id,h=r.get(u),f=yWe(h),d=vWe(h);if(Y.info("dataFetcher parsedItem",e,h,d),u!=="root"){let p=UE;e.start===!0?p=Pde:e.start===!1&&(p=Bde),e.type!==F0&&(p=e.type),XE.get(u)||XE.set(u,{id:u,shape:p,description:qe.sanitizeText(u,pe()),cssClasses:`${f} ${Gde}`,cssStyles:d});let m=XE.get(u);e.description&&(Array.isArray(m.description)?(m.shape=HE,m.description.push(e.description)):m.description?.length>0?(m.shape=HE,m.description===u?m.description=[e.description]:m.description=[m.description,e.description]):(m.shape=UE,m.description=e.description),m.description=qe.sanitizeTextOrArray(m.description,pe())),m.description?.length===1&&m.shape===HE&&(m.type==="group"?m.shape=XO:m.shape=UE),!m.type&&e.doc&&(Y.info("Setting cluster for XCX",u,qde(e)),m.type="group",m.isGroup=!0,m.dir=qde(e),m.shape=e.type===VE?qO:XO,m.cssClasses=`${m.cssClasses} ${Ude} ${a?Hde:""}`);let g={labelStyle:"",shape:m.shape,label:m.description,cssClasses:m.cssClasses,cssCompiledStyles:[],cssStyles:m.cssStyles,id:u,dir:m.dir,domId:JO(u,Sf),type:m.type,isGroup:m.type==="group",padding:8,rx:10,ry:10,look:s};if(g.shape===qO&&(g.label=""),t&&t.id!=="root"&&(Y.trace("Setting node ",u," to be child of its parent ",t.id),g.parentId=t.id),g.centerLabel=!0,e.note){let y={labelStyle:"",shape:Fde,label:e.note.text,cssClasses:Vde,cssStyles:[],cssCompilesStyles:[],id:u+Yde+"-"+Sf,domId:JO(u,Sf,QO),type:m.type,isGroup:m.type==="group",padding:pe().flowchart.padding,look:s,position:e.note.position},v=u+ZO,x={labelStyle:"",shape:zde,label:e.note.text,cssClasses:m.cssClasses,cssStyles:[],id:u+ZO,domId:JO(u,Sf,KO),type:"group",isGroup:!0,padding:16,look:s,position:e.note.position};Sf++,x.id=v,y.parentId=v,qE(n,x,l),qE(n,y,l),qE(n,g,l);let b=u,w=y.id;e.note.position==="left of"&&(b=y.id,w=u),i.push({id:b+"-"+w,start:b,end:w,arrowhead:"none",arrowTypeEnd:"",style:VO,labelStyle:"",classes:$de,arrowheadStyle:UO,labelpos:HO,labelType:WO,thickness:YO,look:s})}else qE(n,g,l)}e.doc&&(Y.trace("Adding nodes children "),gWe(e,e.doc,r,n,i,!a,s,l))},"dataFetcher"),Xde=o(()=>{XE.clear(),Sf=0},"reset")});var eP,xWe,bWe,Kde,tP=M(()=>{"use strict";Vt();ut();ow();Jv();TT();hr();YE();eP=o((t,e=$E)=>{if(!t.doc)return e;let r=e;for(let n of t.doc)n.stmt==="dir"&&(r=n.value);return r},"getDir"),xWe=o(function(t,e){return e.db.extract(e.db.getRootDocV2()),e.db.getClasses()},"getClasses"),bWe=o(async function(t,e,r,n){Y.info("REF0:"),Y.info("Drawing state diagram (v2)",e);let{securityLevel:i,state:a,layout:s}=pe();n.db.extract(n.db.getRootDocV2());let l=n.db.getData(),u=Am(e,i);l.type=n.type,l.layoutAlgorithm=s,l.nodeSpacing=a?.nodeSpacing||50,l.rankSpacing=a?.rankSpacing||50,l.markers=["barb"],l.diagramId=e,await Qm(l,u);let h=8;Ut.insertTitle(u,"statediagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),Zm(u,h,r1,a?.useMaxWidth??!0)},"draw"),Kde={getClasses:xWe,draw:bWe,getDir:eP}});function n0e(){return new Map}function rP(t=""){let e=t;return t===aP&&($x++,e=`${e0e}${$x}`),e}function nP(t="",e=F0){return t===aP?e0e:e}function DWe(t=""){let e=t;return t===t0e&&($x++,e=`${r0e}${$x}`),e}function NWe(t="",e=F0){return t===t0e?r0e:e}function RWe(t,e,r){let n=rP(t.id.trim()),i=nP(t.id.trim(),t.type),a=rP(e.id.trim()),s=nP(e.id.trim(),e.type);Cf(n,i,t.doc,t.description,t.note,t.classes,t.styles,t.textStyles),Cf(a,s,e.doc,e.description,e.note,e.classes,e.styles,e.textStyles),Xs.relations.push({id1:n,id2:a,relationTitle:qe.sanitizeText(r,pe())})}var aP,e0e,t0e,r0e,Qde,Zde,wWe,TWe,QE,sP,i0e,ZE,i1,a0e,JE,Xs,$x,Jde,kWe,EWe,jE,SWe,CWe,KE,oP,AWe,Cf,s0e,z0,o0e,_We,LWe,l0e,iP,MWe,IWe,c0e,OWe,lP,PWe,BWe,FWe,zWe,GWe,$We,ol,e6=M(()=>{"use strict";ut();hr();fr();Vt();Ai();jde();tP();YE();aP="[*]",e0e="start",t0e=aP,r0e="end",Qde="color",Zde="fill",wWe="bgFill",TWe=",";o(n0e,"newClassesList");QE=[],sP=[],i0e=Rde,ZE=[],i1=n0e(),a0e=o(()=>({relations:[],states:new Map,documents:{}}),"newDoc"),JE={root:a0e()},Xs=JE.root,$x=0,Jde=0,kWe={LINE:0,DOTTED_LINE:1},EWe={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3},jE=o(t=>JSON.parse(JSON.stringify(t)),"clone"),SWe=o(t=>{Y.info("Setting root doc",t),ZE=t},"setRootDoc"),CWe=o(()=>ZE,"getRootDoc"),KE=o((t,e,r)=>{if(e.stmt===Gx)KE(t,e.state1,!0),KE(t,e.state2,!1);else if(e.stmt===t1&&(e.id==="[*]"?(e.id=r?t.id+"_start":t.id+"_end",e.start=r):e.id=e.id.trim()),e.doc){let n=[],i=[],a;for(a=0;a0&&i.length>0){let s={stmt:t1,id:r9(),type:"divider",doc:jE(i)};n.push(jE(s)),e.doc=n}e.doc.forEach(s=>KE(e,s,!0))}},"docTranslator"),oP=o(()=>(KE({id:"root"},{id:"root",doc:ZE},!0),{id:"root",doc:ZE}),"getRootDocV2"),AWe=o(t=>{let e;t.doc?e=t.doc:e=t,Y.info(e),s0e(!0),Y.info("Extract initial document:",e),e.forEach(a=>{switch(Y.warn("Statement",a.stmt),a.stmt){case t1:Cf(a.id.trim(),a.type,a.doc,a.description,a.note,a.classes,a.styles,a.textStyles);break;case Gx:l0e(a.state1,a.state2,a.description);break;case Mde:c0e(a.id.trim(),a.classes);break;case Ide:{let s=a.id.trim().split(","),l=a.styleClass.split(",");s.forEach(u=>{let h=z0(u);if(h===void 0){let f=u.trim();Cf(f),h=z0(f)}h.styles=l.map(f=>f.replace(/;/g,"")?.trim())})}break;case Ode:lP(a.id.trim(),a.styleClass);break}});let r=o0e(),i=pe().look;Xde(),n1(void 0,oP(),r,QE,sP,!0,i,i1),QE.forEach(a=>{if(Array.isArray(a.label)){if(a.description=a.label.slice(1),a.isGroup&&a.description.length>0)throw new Error("Group nodes can only have label. Remove the additional description for node ["+a.id+"]");a.label=a.label[0]}})},"extract"),Cf=o(function(t,e=F0,r=null,n=null,i=null,a=null,s=null,l=null){let u=t?.trim();if(Xs.states.has(u)?(Xs.states.get(u).doc||(Xs.states.get(u).doc=r),Xs.states.get(u).type||(Xs.states.get(u).type=e)):(Y.info("Adding state ",u,n),Xs.states.set(u,{id:u,descriptions:[],type:e,doc:r,note:i,classes:[],styles:[],textStyles:[]})),n&&(Y.info("Setting state description",u,n),typeof n=="string"&&iP(u,n.trim()),typeof n=="object"&&n.forEach(h=>iP(u,h.trim()))),i){let h=Xs.states.get(u);h.note=i,h.note.text=qe.sanitizeText(h.note.text,pe())}a&&(Y.info("Setting state classes",u,a),(typeof a=="string"?[a]:a).forEach(f=>lP(u,f.trim()))),s&&(Y.info("Setting state styles",u,s),(typeof s=="string"?[s]:s).forEach(f=>PWe(u,f.trim()))),l&&(Y.info("Setting state styles",u,s),(typeof l=="string"?[l]:l).forEach(f=>BWe(u,f.trim())))},"addState"),s0e=o(function(t){QE=[],sP=[],JE={root:a0e()},Xs=JE.root,$x=0,i1=n0e(),t||Lr()},"clear"),z0=o(function(t){return Xs.states.get(t)},"getState"),o0e=o(function(){return Xs.states},"getStates"),_We=o(function(){Y.info("Documents = ",JE)},"logDocuments"),LWe=o(function(){return Xs.relations},"getRelations");o(rP,"startIdIfNeeded");o(nP,"startTypeIfNeeded");o(DWe,"endIdIfNeeded");o(NWe,"endTypeIfNeeded");o(RWe,"addRelationObjs");l0e=o(function(t,e,r){if(typeof t=="object")RWe(t,e,r);else{let n=rP(t.trim()),i=nP(t),a=DWe(e.trim()),s=NWe(e);Cf(n,i),Cf(a,s),Xs.relations.push({id1:n,id2:a,title:qe.sanitizeText(r,pe())})}},"addRelation"),iP=o(function(t,e){let r=Xs.states.get(t),n=e.startsWith(":")?e.replace(":","").trim():e;r.descriptions.push(qe.sanitizeText(n,pe()))},"addDescription"),MWe=o(function(t){return t.substring(0,1)===":"?t.substr(2).trim():t.trim()},"cleanupLabel"),IWe=o(()=>(Jde++,"divider-id-"+Jde),"getDividerId"),c0e=o(function(t,e=""){i1.has(t)||i1.set(t,{id:t,styles:[],textStyles:[]});let r=i1.get(t);e?.split(TWe).forEach(n=>{let i=n.replace(/([^;]*);/,"$1").trim();if(RegExp(Qde).exec(n)){let s=i.replace(Zde,wWe).replace(Qde,Zde);r.textStyles.push(s)}r.styles.push(i)})},"addStyleClass"),OWe=o(function(){return i1},"getClasses"),lP=o(function(t,e){t.split(",").forEach(function(r){let n=z0(r);if(n===void 0){let i=r.trim();Cf(i),n=z0(i)}n.classes.push(e)})},"setCssClass"),PWe=o(function(t,e){let r=z0(t);r!==void 0&&r.styles.push(e)},"setStyle"),BWe=o(function(t,e){let r=z0(t);r!==void 0&&r.textStyles.push(e)},"setTextStyle"),FWe=o(()=>i0e,"getDirection"),zWe=o(t=>{i0e=t},"setDirection"),GWe=o(t=>t&&t[0]===":"?t.substr(1).trim():t.trim(),"trimColon"),$We=o(()=>{let t=pe();return{nodes:QE,edges:sP,other:{},config:t,direction:eP(oP())}},"getData"),ol={getConfig:o(()=>pe().state,"getConfig"),getData:$We,addState:Cf,clear:s0e,getState:z0,getStates:o0e,getRelations:LWe,getClasses:OWe,getDirection:FWe,addRelation:l0e,getDividerId:IWe,setDirection:zWe,cleanupLabel:MWe,lineType:kWe,relationType:EWe,logDocuments:_We,getRootDoc:CWe,setRootDoc:SWe,getRootDocV2:oP,extract:AWe,trimColon:GWe,getAccTitle:Br,setAccTitle:Mr,getAccDescription:zr,setAccDescription:Fr,addStyleClass:c0e,setCssClass:lP,addDescription:iP,setDiagramTitle:cn,getDiagramTitle:Jr}});var VWe,t6,cP=M(()=>{"use strict";VWe=o(t=>` defs #statediagram-barbEnd { - fill: ${i.transitionColor}; - stroke: ${i.transitionColor}; + fill: ${t.transitionColor}; + stroke: ${t.transitionColor}; } g.stateGroup text { - fill: ${i.nodeBorder}; + fill: ${t.nodeBorder}; stroke: none; font-size: 10px; } g.stateGroup text { - fill: ${i.textColor}; + fill: ${t.textColor}; stroke: none; font-size: 10px; } g.stateGroup .state-title { font-weight: bolder; - fill: ${i.stateLabelColor}; + fill: ${t.stateLabelColor}; } g.stateGroup rect { - fill: ${i.mainBkg}; - stroke: ${i.nodeBorder}; + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; } g.stateGroup line { - stroke: ${i.lineColor}; + stroke: ${t.lineColor}; stroke-width: 1; } .transition { - stroke: ${i.transitionColor}; + stroke: ${t.transitionColor}; stroke-width: 1; fill: none; } .stateGroup .composit { - fill: ${i.background}; + fill: ${t.background}; border-bottom: 1px } @@ -1305,11 +1527,11 @@ g.stateGroup line { } .state-note { - stroke: ${i.noteBorderColor}; - fill: ${i.noteBkgColor}; + stroke: ${t.noteBorderColor}; + fill: ${t.noteBkgColor}; text { - fill: ${i.noteTextColor}; + fill: ${t.noteTextColor}; stroke: none; font-size: 10px; } @@ -1318,70 +1540,83 @@ g.stateGroup line { .stateLabel .box { stroke: none; stroke-width: 0; - fill: ${i.mainBkg}; + fill: ${t.mainBkg}; opacity: 0.5; } .edgeLabel .label rect { - fill: ${i.labelBackgroundColor}; + fill: ${t.labelBackgroundColor}; opacity: 0.5; } +.edgeLabel { + background-color: ${t.edgeLabelBackground}; + p { + background-color: ${t.edgeLabelBackground}; + } + rect { + opacity: 0.5; + background-color: ${t.edgeLabelBackground}; + fill: ${t.edgeLabelBackground}; + } + text-align: center; +} .edgeLabel .label text { - fill: ${i.transitionLabelColor||i.tertiaryTextColor}; + fill: ${t.transitionLabelColor||t.tertiaryTextColor}; } .label div .edgeLabel { - color: ${i.transitionLabelColor||i.tertiaryTextColor}; + color: ${t.transitionLabelColor||t.tertiaryTextColor}; } .stateLabel text { - fill: ${i.stateLabelColor}; + fill: ${t.stateLabelColor}; font-size: 10px; font-weight: bold; } .node circle.state-start { - fill: ${i.specialStateColor}; - stroke: ${i.specialStateColor}; + fill: ${t.specialStateColor}; + stroke: ${t.specialStateColor}; } .node .fork-join { - fill: ${i.specialStateColor}; - stroke: ${i.specialStateColor}; + fill: ${t.specialStateColor}; + stroke: ${t.specialStateColor}; } .node circle.state-end { - fill: ${i.innerEndBackground}; - stroke: ${i.background}; + fill: ${t.innerEndBackground}; + stroke: ${t.background}; stroke-width: 1.5 } .end-state-inner { - fill: ${i.compositeBackground||i.background}; - // stroke: ${i.background}; + fill: ${t.compositeBackground||t.background}; + // stroke: ${t.background}; stroke-width: 1.5 } .node rect { - fill: ${i.stateBkg||i.mainBkg}; - stroke: ${i.stateBorder||i.nodeBorder}; + fill: ${t.stateBkg||t.mainBkg}; + stroke: ${t.stateBorder||t.nodeBorder}; stroke-width: 1px; } .node polygon { - fill: ${i.mainBkg}; - stroke: ${i.stateBorder||i.nodeBorder};; + fill: ${t.mainBkg}; + stroke: ${t.stateBorder||t.nodeBorder};; stroke-width: 1px; } #statediagram-barbEnd { - fill: ${i.lineColor}; + fill: ${t.lineColor}; } .statediagram-cluster rect { - fill: ${i.compositeTitleBackground}; - stroke: ${i.stateBorder||i.nodeBorder}; + fill: ${t.compositeTitleBackground}; + stroke: ${t.stateBorder||t.nodeBorder}; stroke-width: 1px; } .cluster-label, .nodeLabel { - color: ${i.stateLabelColor}; + color: ${t.stateLabelColor}; + // line-height: 1; } .statediagram-cluster rect.outer { @@ -1389,7 +1624,7 @@ g.stateGroup line { ry: 5px; } .statediagram-state .divider { - stroke: ${i.stateBorder||i.nodeBorder}; + stroke: ${t.stateBorder||t.nodeBorder}; } .statediagram-state .title-state { @@ -1397,10 +1632,10 @@ g.stateGroup line { ry: 5px; } .statediagram-cluster.statediagram-cluster .inner { - fill: ${i.compositeBackground||i.background}; + fill: ${t.compositeBackground||t.background}; } .statediagram-cluster.statediagram-cluster-alt .inner { - fill: ${i.altBackground?i.altBackground:"#efefef"}; + fill: ${t.altBackground?t.altBackground:"#efefef"}; } .statediagram-cluster .inner { @@ -1414,7 +1649,7 @@ g.stateGroup line { } .statediagram-state rect.divider { stroke-dasharray: 10,10; - fill: ${i.altBackground?i.altBackground:"#efefef"}; + fill: ${t.altBackground?t.altBackground:"#efefef"}; } .note-edge { @@ -1422,73 +1657,73 @@ g.stateGroup line { } .statediagram-note rect { - fill: ${i.noteBkgColor}; - stroke: ${i.noteBorderColor}; + fill: ${t.noteBkgColor}; + stroke: ${t.noteBorderColor}; stroke-width: 1px; rx: 0; ry: 0; } .statediagram-note rect { - fill: ${i.noteBkgColor}; - stroke: ${i.noteBorderColor}; + fill: ${t.noteBkgColor}; + stroke: ${t.noteBorderColor}; stroke-width: 1px; rx: 0; ry: 0; } .statediagram-note text { - fill: ${i.noteTextColor}; + fill: ${t.noteTextColor}; } .statediagram-note .nodeLabel { - color: ${i.noteTextColor}; + color: ${t.noteTextColor}; } .statediagram .edgeLabel { - color: red; // ${i.noteTextColor}; + color: red; // ${t.noteTextColor}; } #dependencyStart, #dependencyEnd { - fill: ${i.lineColor}; - stroke: ${i.lineColor}; + fill: ${t.lineColor}; + stroke: ${t.lineColor}; stroke-width: 1; } .statediagramTitleText { text-anchor: middle; font-size: 18px; - fill: ${i.textColor}; -} -`,zve={},ksn=(i,s)=>{zve[i]=s},Esn=i=>zve[i],kKe=()=>Object.keys(zve),Tsn={get:Esn,set:ksn,keys:kKe,size:()=>kKe().length},Csn=i=>i.append("circle").attr("class","start-state").attr("r",qt().state.sizeUnit).attr("cx",qt().state.padding+qt().state.sizeUnit).attr("cy",qt().state.padding+qt().state.sizeUnit),Ssn=i=>i.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",qt().state.textHeight).attr("class","divider").attr("x2",qt().state.textHeight*2).attr("y1",0).attr("y2",0),_sn=(i,s)=>{const u=i.append("text").attr("x",2*qt().state.padding).attr("y",qt().state.textHeight+2*qt().state.padding).attr("font-size",qt().state.fontSize).attr("class","state-title").text(s.id),d=u.node().getBBox();return i.insert("rect",":first-child").attr("x",qt().state.padding).attr("y",qt().state.padding).attr("width",d.width+2*qt().state.padding).attr("height",d.height+2*qt().state.padding).attr("rx",qt().state.radius),u},Asn=(i,s)=>{const u=function(R,F,j){const K=R.append("tspan").attr("x",2*qt().state.padding).text(F);j||K.attr("dy",qt().state.textHeight)},p=i.append("text").attr("x",2*qt().state.padding).attr("y",qt().state.textHeight+1.3*qt().state.padding).attr("font-size",qt().state.fontSize).attr("class","state-title").text(s.descriptions[0]).node().getBBox(),v=p.height,b=i.append("text").attr("x",qt().state.padding).attr("y",v+qt().state.padding*.4+qt().state.dividerMargin+qt().state.textHeight).attr("class","state-description");let y=!0,T=!0;s.descriptions.forEach(function(R){y||(u(b,R,T),T=!1),y=!1});const _=i.append("line").attr("x1",qt().state.padding).attr("y1",qt().state.padding+v+qt().state.dividerMargin/2).attr("y2",qt().state.padding+v+qt().state.dividerMargin/2).attr("class","descr-divider"),A=b.node().getBBox(),P=Math.max(A.width,p.width);return _.attr("x2",P+3*qt().state.padding),i.insert("rect",":first-child").attr("x",qt().state.padding).attr("y",qt().state.padding).attr("width",P+2*qt().state.padding).attr("height",A.height+v+2*qt().state.padding).attr("rx",qt().state.radius),i},Lsn=(i,s,u)=>{const d=qt().state.padding,p=2*qt().state.padding,v=i.node().getBBox(),b=v.width,y=v.x,T=i.append("text").attr("x",0).attr("y",qt().state.titleShift).attr("font-size",qt().state.fontSize).attr("class","state-title").text(s.id),A=T.node().getBBox().width+p;let P=Math.max(A,b);P===b&&(P=P+p);let R;const F=i.node().getBBox();s.doc,R=y-d,A>b&&(R=(b-P)/2+d),Math.abs(y-F.x)b&&(R=y-(A-b)/2);const j=1-qt().state.textHeight;return i.insert("rect",":first-child").attr("x",R).attr("y",j).attr("class",u?"alt-composit":"composit").attr("width",P).attr("height",F.height+qt().state.textHeight+qt().state.titleShift+1).attr("rx","0"),T.attr("x",R+d),A<=b&&T.attr("x",y+(P-p)/2-A/2+d),i.insert("rect",":first-child").attr("x",R).attr("y",qt().state.titleShift-qt().state.textHeight-qt().state.padding).attr("width",P).attr("height",qt().state.textHeight*3).attr("rx",qt().state.radius),i.insert("rect",":first-child").attr("x",R).attr("y",qt().state.titleShift-qt().state.textHeight-qt().state.padding).attr("width",P).attr("height",F.height+3+2*qt().state.textHeight).attr("rx",qt().state.radius),i},Msn=i=>(i.append("circle").attr("class","end-state-outer").attr("r",qt().state.sizeUnit+qt().state.miniPadding).attr("cx",qt().state.padding+qt().state.sizeUnit+qt().state.miniPadding).attr("cy",qt().state.padding+qt().state.sizeUnit+qt().state.miniPadding),i.append("circle").attr("class","end-state-inner").attr("r",qt().state.sizeUnit).attr("cx",qt().state.padding+qt().state.sizeUnit+2).attr("cy",qt().state.padding+qt().state.sizeUnit+2)),Dsn=(i,s)=>{let u=qt().state.forkWidth,d=qt().state.forkHeight;if(s.parentId){let p=u;u=d,d=p}return i.append("rect").style("stroke","black").style("fill","black").attr("width",u).attr("height",d).attr("x",qt().state.padding).attr("y",qt().state.padding)},Isn=(i,s,u,d)=>{let p=0;const v=d.append("text");v.style("text-anchor","start"),v.attr("class","noteText");let b=i.replace(/\r\n/g,"
    ");b=b.replace(/\n/g,"
    ");const y=b.split(ci.lineBreakRegex);let T=1.25*qt().state.noteMargin;for(const _ of y){const A=_.trim();if(A.length>0){const P=v.append("tspan");if(P.text(A),T===0){const R=P.node().getBBox();T+=R.height}p+=T,P.attr("x",s+qt().state.noteMargin),P.attr("y",u+p+1.25*qt().state.noteMargin)}}return{textWidth:v.node().getBBox().width,textHeight:p}},Osn=(i,s)=>{s.attr("class","state-note");const u=s.append("rect").attr("x",0).attr("y",qt().state.padding),d=s.append("g"),{textWidth:p,textHeight:v}=Isn(i,0,0,d);return u.attr("height",v+2*qt().state.noteMargin),u.attr("width",p+qt().state.noteMargin*2),u},EKe=function(i,s){const u=s.id,d={id:u,label:s.id,width:0,height:0},p=i.append("g").attr("id",u).attr("class","stateGroup");s.type==="start"&&Csn(p),s.type==="end"&&Msn(p),(s.type==="fork"||s.type==="join")&&Dsn(p,s),s.type==="note"&&Osn(s.note.text,p),s.type==="divider"&&Ssn(p),s.type==="default"&&s.descriptions.length===0&&_sn(p,s),s.type==="default"&&s.descriptions.length>0&&Asn(p,s);const v=p.node().getBBox();return d.width=v.width+2*qt().state.padding,d.height=v.height+2*qt().state.padding,Tsn.set(u,d),d};let TKe=0;const Nsn=function(i,s,u){const d=function(T){switch(T){case G7.relationType.AGGREGATION:return"aggregation";case G7.relationType.EXTENSION:return"extension";case G7.relationType.COMPOSITION:return"composition";case G7.relationType.DEPENDENCY:return"dependency"}};s.points=s.points.filter(T=>!Number.isNaN(T.y));const p=s.points,v=k7().x(function(T){return T.x}).y(function(T){return T.y}).curve(FF),b=i.append("path").attr("d",v(p)).attr("id","edge"+TKe).attr("class","transition");let y="";if(qt().state.arrowMarkerAbsolute&&(y=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,y=y.replace(/\(/g,"\\("),y=y.replace(/\)/g,"\\)")),b.attr("marker-end","url("+y+"#"+d(G7.relationType.DEPENDENCY)+"End)"),u.title!==void 0){const T=i.append("g").attr("class","stateLabel"),{x:_,y:A}=Ao.calcLabelPosition(s.points),P=ci.getRows(u.title);let R=0;const F=[];let j=0,K=0;for(let oe=0;oe<=P.length;oe++){const pe=T.append("text").attr("text-anchor","middle").text(P[oe]).attr("x",_).attr("y",A+R),be=pe.node().getBBox();j=Math.max(j,be.width),K=Math.min(K,be.x),Xe.info(be.x,_,A+R),R===0&&(R=pe.node().getBBox().height,Xe.info("Title height",R,A)),F.push(pe)}let ee=R*P.length;if(P.length>1){const oe=(P.length-1)*R*.5;F.forEach((pe,be)=>pe.attr("y",A+be*R-oe)),ee=R*P.length}const ie=T.node().getBBox();T.insert("rect",":first-child").attr("class","box").attr("x",_-j/2-qt().state.padding/2).attr("y",A-ee/2-qt().state.padding/2-3.5).attr("width",j+qt().state.padding).attr("height",ee+qt().state.padding),Xe.info(ie)}TKe++};let gm;const qve={},Psn=function(){},Bsn=function(i){i.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},Fsn=function(i,s,u,d){gm=qt().state;const p=qt().securityLevel;let v;p==="sandbox"&&(v=Ir("#i"+s));const b=Ir(p==="sandbox"?v.nodes()[0].contentDocument.body:"body"),y=p==="sandbox"?v.nodes()[0].contentDocument:document;Xe.debug("Rendering diagram "+i);const T=b.select(`[id='${s}']`);Bsn(T);const _=d.db.getRootDoc();CKe(_,T,void 0,!1,b,y,d);const A=gm.padding,P=T.node().getBBox(),R=P.width+A*2,F=P.height+A*2,j=R*1.75;Ng(T,F,j,gm.useMaxWidth),T.attr("viewBox",`${P.x-gm.padding} ${P.y-gm.padding} `+R+" "+F)},Rsn=i=>i?i.length*gm.fontSizeFactor:1,CKe=(i,s,u,d,p,v,b)=>{const y=new B0({compound:!0,multigraph:!0});let T,_=!0;for(T=0;T{const be=pe.parentElement;let ae=0,ne=0;be&&(be.parentElement&&(ae=be.parentElement.getBBox().width),ne=parseInt(be.getAttribute("data-x-shift"),10),Number.isNaN(ne)&&(ne=0)),pe.setAttribute("x1",0-ne+8),pe.setAttribute("x2",ae-ne-8)})):Xe.debug("No Node "+ie+": "+JSON.stringify(y.node(ie)))});let K=j.getBBox();y.edges().forEach(function(ie){ie!==void 0&&y.edge(ie)!==void 0&&(Xe.debug("Edge "+ie.v+" -> "+ie.w+": "+JSON.stringify(y.edge(ie))),Nsn(s,y.edge(ie),y.edge(ie).relation))}),K=j.getBBox();const ee={id:u||"root",label:u||"root",width:0,height:0};return ee.width=K.width+2*gm.padding,ee.height=K.height+2*gm.padding,Xe.debug("Doc rendered",ee,y),ee},jsn=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:oKe,db:G7,renderer:{setConf:Psn,draw:Fsn},styles:xKe,init:i=>{i.state||(i.state={}),i.state.arrowMarkerAbsolute=i.arrowMarkerAbsolute,G7.clear()}}},Symbol.toStringTag,{value:"Module"})),AJ="rect",Hve="rectWithTitle",$sn="start",zsn="end",qsn="divider",Hsn="roundedWithTitle",Vsn="note",Usn="noteGroup",QD="statediagram",Gsn=`${QD}-state`,SKe="transition",Ksn="note",Wsn=`${SKe} note-edge`,Ysn=`${QD}-${Ksn}`,Xsn=`${QD}-cluster`,Qsn=`${QD}-cluster-alt`,_Ke="parent",AKe="note",Jsn="state",Vve="----",Zsn=`${Vve}${AKe}`,LKe=`${Vve}${_Ke}`,MKe="fill:none",DKe="fill: #333",IKe="c",OKe="text",NKe="normal";let LJ={},j9=0;const ean=function(i){const s=Object.keys(i);for(const u of s)i[u]},tan=function(i,s){return s.db.extract(s.db.getRootDocV2()),s.db.getClasses()};function nan(i){return i==null?"":i.classes?i.classes.join(" "):""}function Uve(i="",s=0,u="",d=Vve){const p=u!==null&&u.length>0?`${d}${u}`:"";return`${Jsn}-${i}${p}-${s}`}const ej=(i,s,u,d,p,v)=>{const b=u.id,y=nan(d[b]);if(b!=="root"){let T=AJ;u.start===!0&&(T=$sn),u.start===!1&&(T=zsn),u.type!==XR&&(T=u.type),LJ[b]||(LJ[b]={id:b,shape:T,description:ci.sanitizeText(b,qt()),classes:`${y} ${Gsn}`});const _=LJ[b];u.description&&(Array.isArray(_.description)?(_.shape=Hve,_.description.push(u.description)):_.description.length>0?(_.shape=Hve,_.description===b?_.description=[u.description]:_.description=[_.description,u.description]):(_.shape=AJ,_.description=u.description),_.description=ci.sanitizeTextOrArray(_.description,qt())),_.description.length===1&&_.shape===Hve&&(_.shape=AJ),!_.type&&u.doc&&(Xe.info("Setting cluster for ",b,Gve(u)),_.type="group",_.dir=Gve(u),_.shape=u.type===cKe?qsn:Hsn,_.classes=_.classes+" "+Xsn+" "+(v?Qsn:""));const A={labelStyle:"",shape:_.shape,labelText:_.description,classes:_.classes,style:"",id:b,dir:_.dir,domId:Uve(b,j9),type:_.type,padding:15};if(A.centerLabel=!0,u.note){const P={labelStyle:"",shape:Vsn,labelText:u.note.text,classes:Ysn,style:"",id:b+Zsn+"-"+j9,domId:Uve(b,j9,AKe),type:_.type,padding:15},R={labelStyle:"",shape:Usn,labelText:u.note.text,classes:_.classes,style:"",id:b+LKe,domId:Uve(b,j9,_Ke),type:"group",padding:0};j9++;const F=b+LKe;i.setNode(F,R),i.setNode(P.id,P),i.setNode(b,A),i.setParent(b,F),i.setParent(P.id,F);let j=b,K=P.id;u.note.position==="left of"&&(j=P.id,K=b),i.setEdge(j,K,{arrowhead:"none",arrowType:"",style:MKe,labelStyle:"",classes:Wsn,arrowheadStyle:DKe,labelpos:IKe,labelType:OKe,thickness:NKe})}else i.setNode(b,A)}s&&s.id!=="root"&&(Xe.trace("Setting node ",b," to be child of its parent ",s.id),i.setParent(b,s.id)),u.doc&&(Xe.trace("Adding nodes children "),ran(i,u,u.doc,d,p,!v))},ran=(i,s,u,d,p,v)=>{Xe.trace("items",u),u.forEach(b=>{switch(b.stmt){case EJ:ej(i,s,b,d,p,v);break;case XR:ej(i,s,b,d,p,v);break;case Pve:{ej(i,s,b.state1,d,p,v),ej(i,s,b.state2,d,p,v);const y={id:"edge"+j9,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:MKe,labelStyle:"",label:ci.sanitizeText(b.description,qt()),arrowheadStyle:DKe,labelpos:IKe,labelType:OKe,thickness:NKe,classes:SKe};i.setEdge(b.state1.id,b.state2.id,y,j9),j9++}break}})},Gve=(i,s=esn)=>{let u=s;if(i.doc)for(let d=0;d{i.state||(i.state={}),i.state.arrowMarkerAbsolute=i.arrowMarkerAbsolute,G7.clear()}}},Symbol.toStringTag,{value:"Module"}));var Kve=function(){var i=function(P,R,F,j){for(F=F||{},j=P.length;j--;F[P[j]]=R);return F},s=[6,8,10,11,12,14,16,17,18],u=[1,9],d=[1,10],p=[1,11],v=[1,12],b=[1,13],y=[1,14],T={trace:function(){},yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,taskName:18,taskData:19,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",18:"taskName",19:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,2]],performAction:function(R,F,j,K,ee,ie,oe){var pe=ie.length-1;switch(ee){case 1:return ie[pe-1];case 2:this.$=[];break;case 3:ie[pe-1].push(ie[pe]),this.$=ie[pe-1];break;case 4:case 5:this.$=ie[pe];break;case 6:case 7:this.$=[];break;case 8:K.setDiagramTitle(ie[pe].substr(6)),this.$=ie[pe].substr(6);break;case 9:this.$=ie[pe].trim(),K.setAccTitle(this.$);break;case 10:case 11:this.$=ie[pe].trim(),K.setAccDescription(this.$);break;case 12:K.addSection(ie[pe].substr(8)),this.$=ie[pe].substr(8);break;case 13:K.addTask(ie[pe-1],ie[pe]),this.$="task";break}},table:[{3:1,4:[1,2]},{1:[3]},i(s,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:u,12:d,14:p,16:v,17:b,18:y},i(s,[2,7],{1:[2,1]}),i(s,[2,3]),{9:15,11:u,12:d,14:p,16:v,17:b,18:y},i(s,[2,5]),i(s,[2,6]),i(s,[2,8]),{13:[1,16]},{15:[1,17]},i(s,[2,11]),i(s,[2,12]),{19:[1,18]},i(s,[2,4]),i(s,[2,9]),i(s,[2,10]),i(s,[2,13])],defaultActions:{},parseError:function(R,F){if(F.recoverable)this.trace(R);else{var j=new Error(R);throw j.hash=F,j}},parse:function(R){var F=this,j=[0],K=[],ee=[null],ie=[],oe=this.table,pe="",be=0,ae=0,ne=2,se=1,de=ie.slice.call(arguments,1),X=Object.create(this.lexer),ge={yy:{}};for(var W in this.yy)Object.prototype.hasOwnProperty.call(this.yy,W)&&(ge.yy[W]=this.yy[W]);X.setInput(R,ge.yy),ge.yy.lexer=X,ge.yy.parser=this,typeof X.yylloc>"u"&&(X.yylloc={});var xe=X.yylloc;ie.push(xe);var U=X.options&&X.options.ranges;typeof ge.yy.parseError=="function"?this.parseError=ge.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Fe(){var _t;return _t=K.pop()||X.lex()||se,typeof _t!="number"&&(_t instanceof Array&&(K=_t,_t=K.pop()),_t=F.symbols_[_t]||_t),_t}for(var Pe,je,Ie,Se,Ce={},ke,Ke,Ft,Ne;;){if(je=j[j.length-1],this.defaultActions[je]?Ie=this.defaultActions[je]:((Pe===null||typeof Pe>"u")&&(Pe=Fe()),Ie=oe[je]&&oe[je][Pe]),typeof Ie>"u"||!Ie.length||!Ie[0]){var gn="";Ne=[];for(ke in oe[je])this.terminals_[ke]&&ke>ne&&Ne.push("'"+this.terminals_[ke]+"'");X.showPosition?gn="Parse error on line "+(be+1)+`: -`+X.showPosition()+` -Expecting `+Ne.join(", ")+", got '"+(this.terminals_[Pe]||Pe)+"'":gn="Parse error on line "+(be+1)+": Unexpected "+(Pe==se?"end of input":"'"+(this.terminals_[Pe]||Pe)+"'"),this.parseError(gn,{text:X.match,token:this.terminals_[Pe]||Pe,line:X.yylineno,loc:xe,expected:Ne})}if(Ie[0]instanceof Array&&Ie.length>1)throw new Error("Parse Error: multiple actions possible at state: "+je+", token: "+Pe);switch(Ie[0]){case 1:j.push(Pe),ee.push(X.yytext),ie.push(X.yylloc),j.push(Ie[1]),Pe=null,ae=X.yyleng,pe=X.yytext,be=X.yylineno,xe=X.yylloc;break;case 2:if(Ke=this.productions_[Ie[1]][1],Ce.$=ee[ee.length-Ke],Ce._$={first_line:ie[ie.length-(Ke||1)].first_line,last_line:ie[ie.length-1].last_line,first_column:ie[ie.length-(Ke||1)].first_column,last_column:ie[ie.length-1].last_column},U&&(Ce._$.range=[ie[ie.length-(Ke||1)].range[0],ie[ie.length-1].range[1]]),Se=this.performAction.apply(Ce,[pe,ae,be,ge.yy,Ie[1],ee,ie].concat(de)),typeof Se<"u")return Se;Ke&&(j=j.slice(0,-1*Ke*2),ee=ee.slice(0,-1*Ke),ie=ie.slice(0,-1*Ke)),j.push(this.productions_[Ie[1]][0]),ee.push(Ce.$),ie.push(Ce._$),Ft=oe[j[j.length-2]][j[j.length-1]],j.push(Ft);break;case 3:return!0}}return!0}},_=function(){var P={EOF:1,parseError:function(F,j){if(this.yy.parser)this.yy.parser.parseError(F,j);else throw new Error(F)},setInput:function(R,F){return this.yy=F||this.yy||{},this._input=R,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var R=this._input[0];this.yytext+=R,this.yyleng++,this.offset++,this.match+=R,this.matched+=R;var F=R.match(/(?:\r\n?|\n).*/g);return F?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),R},unput:function(R){var F=R.length,j=R.split(/(?:\r\n?|\n)/g);this._input=R+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-F),this.offset-=F;var K=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),j.length-1&&(this.yylineno-=j.length-1);var ee=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:j?(j.length===K.length?this.yylloc.first_column:0)+K[K.length-j.length].length-j[0].length:this.yylloc.first_column-F},this.options.ranges&&(this.yylloc.range=[ee[0],ee[0]+this.yyleng-F]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(R){this.unput(this.match.slice(R))},pastInput:function(){var R=this.matched.substr(0,this.matched.length-this.match.length);return(R.length>20?"...":"")+R.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var R=this.match;return R.length<20&&(R+=this._input.substr(0,20-R.length)),(R.substr(0,20)+(R.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var R=this.pastInput(),F=new Array(R.length+1).join("-");return R+this.upcomingInput()+` -`+F+"^"},test_match:function(R,F){var j,K,ee;if(this.options.backtrack_lexer&&(ee={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(ee.yylloc.range=this.yylloc.range.slice(0))),K=R[0].match(/(?:\r\n?|\n).*/g),K&&(this.yylineno+=K.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:K?K[K.length-1].length-K[K.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+R[0].length},this.yytext+=R[0],this.match+=R[0],this.matches=R,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(R[0].length),this.matched+=R[0],j=this.performAction.call(this,this.yy,this,F,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),j)return j;if(this._backtrack){for(var ie in ee)this[ie]=ee[ie];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var R,F,j,K;this._more||(this.yytext="",this.match="");for(var ee=this._currentRules(),ie=0;ieF[0].length)){if(F=j,K=ie,this.options.backtrack_lexer){if(R=this.test_match(j,ee[ie]),R!==!1)return R;if(this._backtrack){F=!1;continue}else return!1}else if(!this.options.flex)break}return F?(R=this.test_match(F,ee[K]),R!==!1?R:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var F=this.next();return F||this.lex()},begin:function(F){this.conditionStack.push(F)},popState:function(){var F=this.conditionStack.length-1;return F>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(F){return F=this.conditionStack.length-1-Math.abs(F||0),F>=0?this.conditionStack[F]:"INITIAL"},pushState:function(F){this.begin(F)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(F,j,K,ee){switch(K){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),14;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 18;case 16:return 19;case 17:return":";case 18:return 6;case 19:return"INVALID"}},rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18,19],inclusive:!0}}};return P}();T.lexer=_;function A(){this.yy={}}return A.prototype=T,T.Parser=A,new A}();Kve.parser=Kve;const san=Kve;let JD="";const Wve=[],tj=[],nj=[],aan=function(){Wve.length=0,tj.length=0,JD="",nj.length=0,Pg()},oan=function(i){JD=i,Wve.push(i)},can=function(){return Wve},uan=function(){let i=PKe();const s=100;let u=0;for(;!i&&u{u.people&&i.push(...u.people)}),[...new Set(i)].sort()},han=function(i,s){const u=s.substr(1).split(":");let d=0,p=[];u.length===1?(d=Number(u[0]),p=[]):(d=Number(u[0]),p=u[1].split(","));const v=p.map(y=>y.trim()),b={section:JD,type:JD,people:v,task:i,score:d};nj.push(b)},fan=function(i){const s={section:JD,type:JD,description:i,task:i,classes:[]};tj.push(s)},PKe=function(){const i=function(u){return nj[u].processed};let s=!0;for(const[u,d]of nj.entries())i(u),s=s&&d.processed;return s},BKe={getConfig:()=>qt().journey,clear:aan,setDiagramTitle:cm,getDiagramTitle:Ap,setAccTitle:Bg,getAccTitle:Cp,setAccDescription:Sp,getAccDescription:_p,addSection:oan,getSections:can,getTasks:uan,addTask:han,addTaskOrg:fan,getActors:function(){return lan()}},dan=i=>`.label { + fill: ${t.textColor}; +} +`,"getStyles"),t6=VWe});var uP,UWe,HWe,u0e,WWe,h0e,f0e=M(()=>{"use strict";uP={},UWe=o((t,e)=>{uP[t]=e},"set"),HWe=o(t=>uP[t],"get"),u0e=o(()=>Object.keys(uP),"keys"),WWe=o(()=>u0e().length,"size"),h0e={get:HWe,set:UWe,keys:u0e,size:WWe}});var YWe,qWe,XWe,jWe,p0e,KWe,QWe,ZWe,JWe,hP,d0e,m0e,g0e=M(()=>{"use strict";pr();f0e();e6();hr();fr();Vt();ut();YWe=o(t=>t.append("circle").attr("class","start-state").attr("r",pe().state.sizeUnit).attr("cx",pe().state.padding+pe().state.sizeUnit).attr("cy",pe().state.padding+pe().state.sizeUnit),"drawStartState"),qWe=o(t=>t.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",pe().state.textHeight).attr("class","divider").attr("x2",pe().state.textHeight*2).attr("y1",0).attr("y2",0),"drawDivider"),XWe=o((t,e)=>{let r=t.append("text").attr("x",2*pe().state.padding).attr("y",pe().state.textHeight+2*pe().state.padding).attr("font-size",pe().state.fontSize).attr("class","state-title").text(e.id),n=r.node().getBBox();return t.insert("rect",":first-child").attr("x",pe().state.padding).attr("y",pe().state.padding).attr("width",n.width+2*pe().state.padding).attr("height",n.height+2*pe().state.padding).attr("rx",pe().state.radius),r},"drawSimpleState"),jWe=o((t,e)=>{let r=o(function(p,m,g){let y=p.append("tspan").attr("x",2*pe().state.padding).text(m);g||y.attr("dy",pe().state.textHeight)},"addTspan"),i=t.append("text").attr("x",2*pe().state.padding).attr("y",pe().state.textHeight+1.3*pe().state.padding).attr("font-size",pe().state.fontSize).attr("class","state-title").text(e.descriptions[0]).node().getBBox(),a=i.height,s=t.append("text").attr("x",pe().state.padding).attr("y",a+pe().state.padding*.4+pe().state.dividerMargin+pe().state.textHeight).attr("class","state-description"),l=!0,u=!0;e.descriptions.forEach(function(p){l||(r(s,p,u),u=!1),l=!1});let h=t.append("line").attr("x1",pe().state.padding).attr("y1",pe().state.padding+a+pe().state.dividerMargin/2).attr("y2",pe().state.padding+a+pe().state.dividerMargin/2).attr("class","descr-divider"),f=s.node().getBBox(),d=Math.max(f.width,i.width);return h.attr("x2",d+3*pe().state.padding),t.insert("rect",":first-child").attr("x",pe().state.padding).attr("y",pe().state.padding).attr("width",d+2*pe().state.padding).attr("height",f.height+a+2*pe().state.padding).attr("rx",pe().state.radius),t},"drawDescrState"),p0e=o((t,e,r)=>{let n=pe().state.padding,i=2*pe().state.padding,a=t.node().getBBox(),s=a.width,l=a.x,u=t.append("text").attr("x",0).attr("y",pe().state.titleShift).attr("font-size",pe().state.fontSize).attr("class","state-title").text(e.id),f=u.node().getBBox().width+i,d=Math.max(f,s);d===s&&(d=d+i);let p,m=t.node().getBBox();e.doc,p=l-n,f>s&&(p=(s-d)/2+n),Math.abs(l-m.x)s&&(p=l-(f-s)/2);let g=1-pe().state.textHeight;return t.insert("rect",":first-child").attr("x",p).attr("y",g).attr("class",r?"alt-composit":"composit").attr("width",d).attr("height",m.height+pe().state.textHeight+pe().state.titleShift+1).attr("rx","0"),u.attr("x",p+n),f<=s&&u.attr("x",l+(d-i)/2-f/2+n),t.insert("rect",":first-child").attr("x",p).attr("y",pe().state.titleShift-pe().state.textHeight-pe().state.padding).attr("width",d).attr("height",pe().state.textHeight*3).attr("rx",pe().state.radius),t.insert("rect",":first-child").attr("x",p).attr("y",pe().state.titleShift-pe().state.textHeight-pe().state.padding).attr("width",d).attr("height",m.height+3+2*pe().state.textHeight).attr("rx",pe().state.radius),t},"addTitleAndBox"),KWe=o(t=>(t.append("circle").attr("class","end-state-outer").attr("r",pe().state.sizeUnit+pe().state.miniPadding).attr("cx",pe().state.padding+pe().state.sizeUnit+pe().state.miniPadding).attr("cy",pe().state.padding+pe().state.sizeUnit+pe().state.miniPadding),t.append("circle").attr("class","end-state-inner").attr("r",pe().state.sizeUnit).attr("cx",pe().state.padding+pe().state.sizeUnit+2).attr("cy",pe().state.padding+pe().state.sizeUnit+2)),"drawEndState"),QWe=o((t,e)=>{let r=pe().state.forkWidth,n=pe().state.forkHeight;if(e.parentId){let i=r;r=n,n=i}return t.append("rect").style("stroke","black").style("fill","black").attr("width",r).attr("height",n).attr("x",pe().state.padding).attr("y",pe().state.padding)},"drawForkJoinState"),ZWe=o((t,e,r,n)=>{let i=0,a=n.append("text");a.style("text-anchor","start"),a.attr("class","noteText");let s=t.replace(/\r\n/g,"
    ");s=s.replace(/\n/g,"
    ");let l=s.split(qe.lineBreakRegex),u=1.25*pe().state.noteMargin;for(let h of l){let f=h.trim();if(f.length>0){let d=a.append("tspan");if(d.text(f),u===0){let p=d.node().getBBox();u+=p.height}i+=u,d.attr("x",e+pe().state.noteMargin),d.attr("y",r+i+1.25*pe().state.noteMargin)}}return{textWidth:a.node().getBBox().width,textHeight:i}},"_drawLongText"),JWe=o((t,e)=>{e.attr("class","state-note");let r=e.append("rect").attr("x",0).attr("y",pe().state.padding),n=e.append("g"),{textWidth:i,textHeight:a}=ZWe(t,0,0,n);return r.attr("height",a+2*pe().state.noteMargin),r.attr("width",i+pe().state.noteMargin*2),r},"drawNote"),hP=o(function(t,e){let r=e.id,n={id:r,label:e.id,width:0,height:0},i=t.append("g").attr("id",r).attr("class","stateGroup");e.type==="start"&&YWe(i),e.type==="end"&&KWe(i),(e.type==="fork"||e.type==="join")&&QWe(i,e),e.type==="note"&&JWe(e.note.text,i),e.type==="divider"&&qWe(i),e.type==="default"&&e.descriptions.length===0&&XWe(i,e),e.type==="default"&&e.descriptions.length>0&&jWe(i,e);let a=i.node().getBBox();return n.width=a.width+2*pe().state.padding,n.height=a.height+2*pe().state.padding,h0e.set(r,n),n},"drawState"),d0e=0,m0e=o(function(t,e,r){let n=o(function(u){switch(u){case ol.relationType.AGGREGATION:return"aggregation";case ol.relationType.EXTENSION:return"extension";case ol.relationType.COMPOSITION:return"composition";case ol.relationType.DEPENDENCY:return"dependency"}},"getRelationType");e.points=e.points.filter(u=>!Number.isNaN(u.y));let i=e.points,a=ns().x(function(u){return u.x}).y(function(u){return u.y}).curve(Po),s=t.append("path").attr("d",a(i)).attr("id","edge"+d0e).attr("class","transition"),l="";if(pe().state.arrowMarkerAbsolute&&(l=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,l=l.replace(/\(/g,"\\("),l=l.replace(/\)/g,"\\)")),s.attr("marker-end","url("+l+"#"+n(ol.relationType.DEPENDENCY)+"End)"),r.title!==void 0){let u=t.append("g").attr("class","stateLabel"),{x:h,y:f}=Ut.calcLabelPosition(e.points),d=qe.getRows(r.title),p=0,m=[],g=0,y=0;for(let b=0;b<=d.length;b++){let w=u.append("text").attr("text-anchor","middle").text(d[b]).attr("x",h).attr("y",f+p),_=w.node().getBBox();g=Math.max(g,_.width),y=Math.min(y,_.x),Y.info(_.x,h,f+p),p===0&&(p=w.node().getBBox().height,Y.info("Title height",p,f)),m.push(w)}let v=p*d.length;if(d.length>1){let b=(d.length-1)*p*.5;m.forEach((w,_)=>w.attr("y",f+_*p-b)),v=p*d.length}let x=u.node().getBBox();u.insert("rect",":first-child").attr("class","box").attr("x",h-g/2-pe().state.padding/2).attr("y",f-v/2-pe().state.padding/2-3.5).attr("width",g+pe().state.padding).attr("height",v+pe().state.padding),Y.info(x)}d0e++},"drawEdge")});var bo,fP,eYe,tYe,rYe,nYe,y0e,v0e,x0e=M(()=>{"use strict";pr();Qv();Gs();ut();fr();g0e();Vt();ai();fP={},eYe=o(function(){},"setConf"),tYe=o(function(t){t.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"insertMarkers"),rYe=o(function(t,e,r,n){bo=pe().state;let i=pe().securityLevel,a;i==="sandbox"&&(a=Ve("#i"+e));let s=i==="sandbox"?Ve(a.nodes()[0].contentDocument.body):Ve("body"),l=i==="sandbox"?a.nodes()[0].contentDocument:document;Y.debug("Rendering diagram "+t);let u=s.select(`[id='${e}']`);tYe(u);let h=n.db.getRootDoc();y0e(h,u,void 0,!1,s,l,n);let f=bo.padding,d=u.node().getBBox(),p=d.width+f*2,m=d.height+f*2,g=p*1.75;Zr(u,m,g,bo.useMaxWidth),u.attr("viewBox",`${d.x-bo.padding} ${d.y-bo.padding} `+p+" "+m)},"draw"),nYe=o(t=>t?t.length*bo.fontSizeFactor:1,"getLabelWidth"),y0e=o((t,e,r,n,i,a,s)=>{let l=new Ir({compound:!0,multigraph:!0}),u,h=!0;for(u=0;u{let T=_.parentElement,E=0,L=0;T&&(T.parentElement&&(E=T.parentElement.getBBox().width),L=parseInt(T.getAttribute("data-x-shift"),10),Number.isNaN(L)&&(L=0)),_.setAttribute("x1",0-L+8),_.setAttribute("x2",E-L-8)})):Y.debug("No Node "+b+": "+JSON.stringify(l.node(b)))});let v=y.getBBox();l.edges().forEach(function(b){b!==void 0&&l.edge(b)!==void 0&&(Y.debug("Edge "+b.v+" -> "+b.w+": "+JSON.stringify(l.edge(b))),m0e(e,l.edge(b),l.edge(b).relation))}),v=y.getBBox();let x={id:r||"root",label:r||"root",width:0,height:0};return x.width=v.width+2*bo.padding,x.height=v.height+2*bo.padding,Y.debug("Doc rendered",x,l),x},"renderDoc"),v0e={setConf:eYe,draw:rYe}});var b0e={};vr(b0e,{diagram:()=>iYe});var iYe,w0e=M(()=>{"use strict";$O();e6();cP();x0e();iYe={parser:GE,db:ol,renderer:v0e,styles:t6,init:o(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute,ol.clear()},"init")}});var E0e={};vr(E0e,{diagram:()=>lYe});var lYe,S0e=M(()=>{"use strict";$O();e6();cP();tP();lYe={parser:GE,db:ol,renderer:Kde,styles:t6,init:o(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute,ol.clear()},"init")}});var dP,_0e,L0e=M(()=>{"use strict";dP=function(){var t=o(function(d,p,m,g){for(m=m||{},g=d.length;g--;m[d[g]]=p);return m},"o"),e=[6,8,10,11,12,14,16,17,18],r=[1,9],n=[1,10],i=[1,11],a=[1,12],s=[1,13],l=[1,14],u={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,taskName:18,taskData:19,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",18:"taskName",19:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,2]],performAction:o(function(p,m,g,y,v,x,b){var w=x.length-1;switch(v){case 1:return x[w-1];case 2:this.$=[];break;case 3:x[w-1].push(x[w]),this.$=x[w-1];break;case 4:case 5:this.$=x[w];break;case 6:case 7:this.$=[];break;case 8:y.setDiagramTitle(x[w].substr(6)),this.$=x[w].substr(6);break;case 9:this.$=x[w].trim(),y.setAccTitle(this.$);break;case 10:case 11:this.$=x[w].trim(),y.setAccDescription(this.$);break;case 12:y.addSection(x[w].substr(8)),this.$=x[w].substr(8);break;case 13:y.addTask(x[w-1],x[w]),this.$="task";break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:r,12:n,14:i,16:a,17:s,18:l},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:15,11:r,12:n,14:i,16:a,17:s,18:l},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,16]},{15:[1,17]},t(e,[2,11]),t(e,[2,12]),{19:[1,18]},t(e,[2,4]),t(e,[2,9]),t(e,[2,10]),t(e,[2,13])],defaultActions:{},parseError:o(function(p,m){if(m.recoverable)this.trace(p);else{var g=new Error(p);throw g.hash=m,g}},"parseError"),parse:o(function(p){var m=this,g=[0],y=[],v=[null],x=[],b=this.table,w="",_=0,T=0,E=0,L=2,S=1,A=x.slice.call(arguments,1),I=Object.create(this.lexer),D={yy:{}};for(var k in this.yy)Object.prototype.hasOwnProperty.call(this.yy,k)&&(D.yy[k]=this.yy[k]);I.setInput(p,D.yy),D.yy.lexer=I,D.yy.parser=this,typeof I.yylloc>"u"&&(I.yylloc={});var R=I.yylloc;x.push(R);var C=I.options&&I.options.ranges;typeof D.yy.parseError=="function"?this.parseError=D.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function O(H){g.length=g.length-2*H,v.length=v.length-H,x.length=x.length-H}o(O,"popStack");function N(){var H;return H=y.pop()||I.lex()||S,typeof H!="number"&&(H instanceof Array&&(y=H,H=y.pop()),H=m.symbols_[H]||H),H}o(N,"lex");for(var P,F,B,G,z,W,Z={},j,oe,K,ee;;){if(B=g[g.length-1],this.defaultActions[B]?G=this.defaultActions[B]:((P===null||typeof P>"u")&&(P=N()),G=b[B]&&b[B][P]),typeof G>"u"||!G.length||!G[0]){var J="";ee=[];for(j in b[B])this.terminals_[j]&&j>L&&ee.push("'"+this.terminals_[j]+"'");I.showPosition?J="Parse error on line "+(_+1)+`: +`+I.showPosition()+` +Expecting `+ee.join(", ")+", got '"+(this.terminals_[P]||P)+"'":J="Parse error on line "+(_+1)+": Unexpected "+(P==S?"end of input":"'"+(this.terminals_[P]||P)+"'"),this.parseError(J,{text:I.match,token:this.terminals_[P]||P,line:I.yylineno,loc:R,expected:ee})}if(G[0]instanceof Array&&G.length>1)throw new Error("Parse Error: multiple actions possible at state: "+B+", token: "+P);switch(G[0]){case 1:g.push(P),v.push(I.yytext),x.push(I.yylloc),g.push(G[1]),P=null,F?(P=F,F=null):(T=I.yyleng,w=I.yytext,_=I.yylineno,R=I.yylloc,E>0&&E--);break;case 2:if(oe=this.productions_[G[1]][1],Z.$=v[v.length-oe],Z._$={first_line:x[x.length-(oe||1)].first_line,last_line:x[x.length-1].last_line,first_column:x[x.length-(oe||1)].first_column,last_column:x[x.length-1].last_column},C&&(Z._$.range=[x[x.length-(oe||1)].range[0],x[x.length-1].range[1]]),W=this.performAction.apply(Z,[w,T,_,D.yy,G[1],v,x].concat(A)),typeof W<"u")return W;oe&&(g=g.slice(0,-1*oe*2),v=v.slice(0,-1*oe),x=x.slice(0,-1*oe)),g.push(this.productions_[G[1]][0]),v.push(Z.$),x.push(Z._$),K=b[g[g.length-2]][g[g.length-1]],g.push(K);break;case 3:return!0}}return!0},"parse")},h=function(){var d={EOF:1,parseError:o(function(m,g){if(this.yy.parser)this.yy.parser.parseError(m,g);else throw new Error(m)},"parseError"),setInput:o(function(p,m){return this.yy=m||this.yy||{},this._input=p,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var p=this._input[0];this.yytext+=p,this.yyleng++,this.offset++,this.match+=p,this.matched+=p;var m=p.match(/(?:\r\n?|\n).*/g);return m?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),p},"input"),unput:o(function(p){var m=p.length,g=p.split(/(?:\r\n?|\n)/g);this._input=p+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-m),this.offset-=m;var y=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),g.length-1&&(this.yylineno-=g.length-1);var v=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:g?(g.length===y.length?this.yylloc.first_column:0)+y[y.length-g.length].length-g[0].length:this.yylloc.first_column-m},this.options.ranges&&(this.yylloc.range=[v[0],v[0]+this.yyleng-m]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(p){this.unput(this.match.slice(p))},"less"),pastInput:o(function(){var p=this.matched.substr(0,this.matched.length-this.match.length);return(p.length>20?"...":"")+p.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var p=this.match;return p.length<20&&(p+=this._input.substr(0,20-p.length)),(p.substr(0,20)+(p.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var p=this.pastInput(),m=new Array(p.length+1).join("-");return p+this.upcomingInput()+` +`+m+"^"},"showPosition"),test_match:o(function(p,m){var g,y,v;if(this.options.backtrack_lexer&&(v={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(v.yylloc.range=this.yylloc.range.slice(0))),y=p[0].match(/(?:\r\n?|\n).*/g),y&&(this.yylineno+=y.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:y?y[y.length-1].length-y[y.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+p[0].length},this.yytext+=p[0],this.match+=p[0],this.matches=p,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(p[0].length),this.matched+=p[0],g=this.performAction.call(this,this.yy,this,m,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),g)return g;if(this._backtrack){for(var x in v)this[x]=v[x];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var p,m,g,y;this._more||(this.yytext="",this.match="");for(var v=this._currentRules(),x=0;xm[0].length)){if(m=g,y=x,this.options.backtrack_lexer){if(p=this.test_match(g,v[x]),p!==!1)return p;if(this._backtrack){m=!1;continue}else return!1}else if(!this.options.flex)break}return m?(p=this.test_match(m,v[y]),p!==!1?p:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var m=this.next();return m||this.lex()},"lex"),begin:o(function(m){this.conditionStack.push(m)},"begin"),popState:o(function(){var m=this.conditionStack.length-1;return m>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(m){return m=this.conditionStack.length-1-Math.abs(m||0),m>=0?this.conditionStack[m]:"INITIAL"},"topState"),pushState:o(function(m){this.begin(m)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(m,g,y,v){var x=v;switch(y){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.begin("acc_descr"),14;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 18;case 16:return 19;case 17:return":";case 18:return 6;case 19:return"INVALID"}},"anonymous"),rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18,19],inclusive:!0}}};return d}();u.lexer=h;function f(){this.yy={}}return o(f,"Parser"),f.prototype=u,u.Parser=f,new f}();dP.parser=dP;_0e=dP});var a1,pP,Vx,Ux,fYe,dYe,pYe,mYe,gYe,yYe,vYe,D0e,xYe,mP,N0e=M(()=>{"use strict";Vt();Ai();a1="",pP=[],Vx=[],Ux=[],fYe=o(function(){pP.length=0,Vx.length=0,a1="",Ux.length=0,Lr()},"clear"),dYe=o(function(t){a1=t,pP.push(t)},"addSection"),pYe=o(function(){return pP},"getSections"),mYe=o(function(){let t=D0e(),e=100,r=0;for(;!t&&r{r.people&&t.push(...r.people)}),[...new Set(t)].sort()},"updateActors"),yYe=o(function(t,e){let r=e.substr(1).split(":"),n=0,i=[];r.length===1?(n=Number(r[0]),i=[]):(n=Number(r[0]),i=r[1].split(","));let a=i.map(l=>l.trim()),s={section:a1,type:a1,people:a,task:t,score:n};Ux.push(s)},"addTask"),vYe=o(function(t){let e={section:a1,type:a1,description:t,task:t,classes:[]};Vx.push(e)},"addTaskOrg"),D0e=o(function(){let t=o(function(r){return Ux[r].processed},"compileTask"),e=!0;for(let[r,n]of Ux.entries())t(r),e=e&&n.processed;return e},"compileTasks"),xYe=o(function(){return gYe()},"getActors"),mP={getConfig:o(()=>pe().journey,"getConfig"),clear:fYe,setDiagramTitle:cn,getDiagramTitle:Jr,setAccTitle:Mr,getAccTitle:Br,setAccDescription:Fr,getAccDescription:zr,addSection:dYe,getSections:pYe,getTasks:mYe,addTask:yYe,addTaskOrg:vYe,getActors:xYe}});var bYe,R0e,M0e=M(()=>{"use strict";bYe=o(t=>`.label { font-family: 'trebuchet ms', verdana, arial, sans-serif; font-family: var(--mermaid-font-family); - color: ${i.textColor}; + color: ${t.textColor}; } .mouth { stroke: #666; } line { - stroke: ${i.textColor} + stroke: ${t.textColor} } .legend { - fill: ${i.textColor}; + fill: ${t.textColor}; } .label text { fill: #333; } .label { - color: ${i.textColor} + color: ${t.textColor} } .face { - ${i.faceColor?`fill: ${i.faceColor}`:"fill: #FFF8DC"}; + ${t.faceColor?`fill: ${t.faceColor}`:"fill: #FFF8DC"}; stroke: #999; } @@ -1497,8 +1732,8 @@ Expecting `+Ne.join(", ")+", got '"+(this.terminals_[Pe]||Pe)+"'":gn="Parse erro .node ellipse, .node polygon, .node path { - fill: ${i.mainBkg}; - stroke: ${i.nodeBorder}; + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; stroke-width: 1px; } @@ -1510,21 +1745,21 @@ Expecting `+Ne.join(", ")+", got '"+(this.terminals_[Pe]||Pe)+"'":gn="Parse erro } .arrowheadPath { - fill: ${i.arrowheadColor}; + fill: ${t.arrowheadColor}; } .edgePath .path { - stroke: ${i.lineColor}; + stroke: ${t.lineColor}; stroke-width: 1.5px; } .flowchart-link { - stroke: ${i.lineColor}; + stroke: ${t.lineColor}; fill: none; } .edgeLabel { - background-color: ${i.edgeLabelBackground}; + background-color: ${t.edgeLabelBackground}; rect { opacity: 0.5; } @@ -1535,7 +1770,7 @@ Expecting `+Ne.join(", ")+", got '"+(this.terminals_[Pe]||Pe)+"'":gn="Parse erro } .cluster text { - fill: ${i.titleColor}; + fill: ${t.titleColor}; } div.mermaidTooltip { @@ -1546,241 +1781,198 @@ Expecting `+Ne.join(", ")+", got '"+(this.terminals_[Pe]||Pe)+"'":gn="Parse erro font-family: 'trebuchet ms', verdana, arial, sans-serif; font-family: var(--mermaid-font-family); font-size: 12px; - background: ${i.tertiaryColor}; - border: 1px solid ${i.border2}; + background: ${t.tertiaryColor}; + border: 1px solid ${t.border2}; border-radius: 2px; pointer-events: none; z-index: 100; } .task-type-0, .section-type-0 { - ${i.fillType0?`fill: ${i.fillType0}`:""}; + ${t.fillType0?`fill: ${t.fillType0}`:""}; } .task-type-1, .section-type-1 { - ${i.fillType0?`fill: ${i.fillType1}`:""}; + ${t.fillType0?`fill: ${t.fillType1}`:""}; } .task-type-2, .section-type-2 { - ${i.fillType0?`fill: ${i.fillType2}`:""}; + ${t.fillType0?`fill: ${t.fillType2}`:""}; } .task-type-3, .section-type-3 { - ${i.fillType0?`fill: ${i.fillType3}`:""}; + ${t.fillType0?`fill: ${t.fillType3}`:""}; } .task-type-4, .section-type-4 { - ${i.fillType0?`fill: ${i.fillType4}`:""}; + ${t.fillType0?`fill: ${t.fillType4}`:""}; } .task-type-5, .section-type-5 { - ${i.fillType0?`fill: ${i.fillType5}`:""}; + ${t.fillType0?`fill: ${t.fillType5}`:""}; } .task-type-6, .section-type-6 { - ${i.fillType0?`fill: ${i.fillType6}`:""}; + ${t.fillType0?`fill: ${t.fillType6}`:""}; } .task-type-7, .section-type-7 { - ${i.fillType0?`fill: ${i.fillType7}`:""}; + ${t.fillType0?`fill: ${t.fillType7}`:""}; } .actor-0 { - ${i.actor0?`fill: ${i.actor0}`:""}; + ${t.actor0?`fill: ${t.actor0}`:""}; } .actor-1 { - ${i.actor1?`fill: ${i.actor1}`:""}; + ${t.actor1?`fill: ${t.actor1}`:""}; } .actor-2 { - ${i.actor2?`fill: ${i.actor2}`:""}; + ${t.actor2?`fill: ${t.actor2}`:""}; } .actor-3 { - ${i.actor3?`fill: ${i.actor3}`:""}; + ${t.actor3?`fill: ${t.actor3}`:""}; } .actor-4 { - ${i.actor4?`fill: ${i.actor4}`:""}; + ${t.actor4?`fill: ${t.actor4}`:""}; } .actor-5 { - ${i.actor5?`fill: ${i.actor5}`:""}; - } -`,Yve=function(i,s){return AQ(i,s)},gan=function(i,s){const d=i.append("circle").attr("cx",s.cx).attr("cy",s.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),p=i.append("g");p.append("circle").attr("cx",s.cx-15/3).attr("cy",s.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),p.append("circle").attr("cx",s.cx+15/3).attr("cy",s.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function v(T){const _=lD().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);T.append("path").attr("class","mouth").attr("d",_).attr("transform","translate("+s.cx+","+(s.cy+2)+")")}function b(T){const _=lD().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);T.append("path").attr("class","mouth").attr("d",_).attr("transform","translate("+s.cx+","+(s.cy+7)+")")}function y(T){T.append("line").attr("class","mouth").attr("stroke",2).attr("x1",s.cx-5).attr("y1",s.cy+7).attr("x2",s.cx+5).attr("y2",s.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return s.score>3?v(p):s.score<3?b(p):y(p),d},FKe=function(i,s){const u=i.append("circle");return u.attr("cx",s.cx),u.attr("cy",s.cy),u.attr("class","actor-"+s.pos),u.attr("fill",s.fill),u.attr("stroke",s.stroke),u.attr("r",s.r),u.class!==void 0&&u.attr("class",u.class),s.title!==void 0&&u.append("title").text(s.title),u},RKe=function(i,s){return tUt(i,s)},pan=function(i,s){function u(p,v,b,y,T){return p+","+v+" "+(p+b)+","+v+" "+(p+b)+","+(v+y-T)+" "+(p+b-T*1.2)+","+(v+y)+" "+p+","+(v+y)}const d=i.append("polygon");d.attr("points",u(s.x,s.y,50,20,7)),d.attr("class","labelBox"),s.y=s.y+s.labelMargin,s.x=s.x+.5*s.labelMargin,RKe(i,s)},ban=function(i,s,u){const d=i.append("g"),p=qC();p.x=s.x,p.y=s.y,p.fill=s.fill,p.width=u.width*s.taskCount+u.diagramMarginX*(s.taskCount-1),p.height=u.height,p.class="journey-section section-type-"+s.num,p.rx=3,p.ry=3,Yve(d,p),$Ke(u)(s.text,d,p.x,p.y,p.width,p.height,{class:"journey-section section-type-"+s.num},u,s.colour)};let jKe=-1;const man=function(i,s,u){const d=s.x+u.width/2,p=i.append("g");jKe++;const v=300+5*30;p.append("line").attr("id","task"+jKe).attr("x1",d).attr("y1",s.y).attr("x2",d).attr("y2",v).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),gan(p,{cx:d,cy:300+(5-s.score)*30,score:s.score});const b=qC();b.x=s.x,b.y=s.y,b.fill=s.fill,b.width=u.width,b.height=u.height,b.class="task task-type-"+s.num,b.rx=3,b.ry=3,Yve(p,b);let y=s.x+14;s.people.forEach(T=>{const _=s.actors[T].color,A={cx:y,cy:s.y,r:7,fill:_,stroke:"#000",title:T,pos:s.actors[T].position};FKe(p,A),y+=10}),$Ke(u)(s.task,p,b.x,b.y,b.width,b.height,{class:"task"},u,s.colour)},van=function(i,s){Tqe(i,s)},$Ke=function(){function i(p,v,b,y,T,_,A,P){const R=v.append("text").attr("x",b+T/2).attr("y",y+_/2+5).style("font-color",P).style("text-anchor","middle").text(p);d(R,A)}function s(p,v,b,y,T,_,A,P,R){const{taskFontSize:F,taskFontFamily:j}=P,K=p.split(//gi);for(let ee=0;ee{const p=K7[d].color,v={cx:20,cy:u,r:7,fill:p,stroke:"#000",pos:K7[d].position};rj.drawCircle(i,v);const b={x:40,y:u+7,fill:"#666",text:d,textMargin:s.boxTextMargin|5};rj.drawText(i,b),u+=20})}const MJ=qt().journey,iS=MJ.leftMargin,xan=function(i,s,u,d){const p=qt().journey,v=qt().securityLevel;let b;v==="sandbox"&&(b=Ir("#i"+s));const y=Ir(v==="sandbox"?b.nodes()[0].contentDocument.body:"body");qv.init();const T=y.select("#"+s);rj.initGraphics(T);const _=d.db.getTasks(),A=d.db.getDiagramTitle(),P=d.db.getActors();for(const ie in K7)delete K7[ie];let R=0;P.forEach(ie=>{K7[ie]={color:p.actorColours[R%p.actorColours.length],position:R},R++}),yan(T),qv.insert(0,0,iS,Object.keys(K7).length*50),kan(T,_,0);const F=qv.getBounds();A&&T.append("text").text(A).attr("x",iS).attr("font-size","4ex").attr("font-weight","bold").attr("y",25);const j=F.stopy-F.starty+2*p.diagramMarginY,K=iS+F.stopx+2*p.diagramMarginX;Ng(T,j,K,p.useMaxWidth),T.append("line").attr("x1",iS).attr("y1",p.height*4).attr("x2",K-iS-4).attr("y2",p.height*4).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");const ee=A?70:0;T.attr("viewBox",`${F.startx} -25 ${K} ${j+ee}`),T.attr("preserveAspectRatio","xMinYMin meet"),T.attr("height",j+ee+25)},qv={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},updateVal:function(i,s,u,d){i[s]===void 0?i[s]=u:i[s]=d(u,i[s])},updateBounds:function(i,s,u,d){const p=qt().journey,v=this;let b=0;function y(T){return function(A){b++;const P=v.sequenceItems.length-b+1;v.updateVal(A,"starty",s-P*p.boxMargin,Math.min),v.updateVal(A,"stopy",d+P*p.boxMargin,Math.max),v.updateVal(qv.data,"startx",i-P*p.boxMargin,Math.min),v.updateVal(qv.data,"stopx",u+P*p.boxMargin,Math.max),T!=="activation"&&(v.updateVal(A,"startx",i-P*p.boxMargin,Math.min),v.updateVal(A,"stopx",u+P*p.boxMargin,Math.max),v.updateVal(qv.data,"starty",s-P*p.boxMargin,Math.min),v.updateVal(qv.data,"stopy",d+P*p.boxMargin,Math.max))}}this.sequenceItems.forEach(y())},insert:function(i,s,u,d){const p=Math.min(i,u),v=Math.max(i,u),b=Math.min(s,d),y=Math.max(s,d);this.updateVal(qv.data,"startx",p,Math.min),this.updateVal(qv.data,"starty",b,Math.min),this.updateVal(qv.data,"stopx",v,Math.max),this.updateVal(qv.data,"stopy",y,Math.max),this.updateBounds(p,b,v,y)},bumpVerticalPos:function(i){this.verticalPos=this.verticalPos+i,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return this.data}},Xve=MJ.sectionFills,zKe=MJ.sectionColours,kan=function(i,s,u){const d=qt().journey;let p="";const v=d.height*2+d.diagramMarginY,b=u+v;let y=0,T="#CCC",_="black",A=0;for(const[P,R]of s.entries()){if(p!==R.section){T=Xve[y%Xve.length],A=y%Xve.length,_=zKe[y%zKe.length];let j=0;const K=R.section;for(let ie=P;ie(K7[K]&&(j[K]=K7[K]),j),{});R.x=P*d.taskMargin+P*d.width+iS,R.y=b,R.width=d.diagramMarginX,R.height=d.diagramMarginY,R.colour=_,R.fill=T,R.num=A,R.actors=F,rj.drawTask(i,R,d),qv.insert(R.x,R.y,R.x+R.width+d.taskMargin,300+5*30)}},qKe={setConf:wan,draw:xan},Ean=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:san,db:BKe,renderer:qKe,styles:dan,init:i=>{qKe.setConf(i.journey),BKe.clear()}}},Symbol.toStringTag,{value:"Module"})),Tan=(i,s,u)=>{const{parentById:d}=u,p=new Set;let v=i;for(;v;){if(p.add(v),v===s)return v;v=d[v]}for(v=s;v;){if(p.has(v))return v;v=d[v]}return"root"};function DJ(i){throw new Error('Could not dynamically require "'+i+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var HKe={exports:{}};(function(i,s){(function(u){i.exports=u()})(function(){return function(){function u(d,p,v){function b(_,A){if(!p[_]){if(!d[_]){var P=typeof DJ=="function"&&DJ;if(!A&&P)return P(_,!0);if(y)return y(_,!0);var R=new Error("Cannot find module '"+_+"'");throw R.code="MODULE_NOT_FOUND",R}var F=p[_]={exports:{}};d[_][0].call(F.exports,function(j){var K=d[_][1][j];return b(K||j)},F,F.exports,u,d,p,v)}return p[_].exports}for(var y=typeof DJ=="function"&&DJ,T=0;T0&&arguments[0]!==void 0?arguments[0]:{},R=P.defaultLayoutOptions,F=R===void 0?{}:R,j=P.algorithms,K=j===void 0?["layered","stress","mrtree","radial","force","disco","sporeOverlap","sporeCompaction","rectpacking"]:j,ee=P.workerFactory,ie=P.workerUrl;if(b(this,_),this.defaultLayoutOptions=F,this.initialized=!1,typeof ie>"u"&&typeof ee>"u")throw new Error("Cannot construct an ELK without both 'workerUrl' and 'workerFactory'.");var oe=ee;typeof ie<"u"&&typeof ee>"u"&&(oe=function(ae){return new Worker(ae)});var pe=oe(ie);if(typeof pe.postMessage!="function")throw new TypeError("Created worker does not provide the required 'postMessage' function.");this.worker=new T(pe),this.worker.postMessage({cmd:"register",algorithms:K}).then(function(be){return A.initialized=!0}).catch(console.err)}return v(_,[{key:"layout",value:function(P){var R=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},F=R.layoutOptions,j=F===void 0?this.defaultLayoutOptions:F,K=R.logging,ee=K===void 0?!1:K,ie=R.measureExecutionTime,oe=ie===void 0?!1:ie;return P?this.worker.postMessage({cmd:"layout",graph:P,layoutOptions:j,options:{logging:ee,measureExecutionTime:oe}}):Promise.reject(new Error("Missing mandatory parameter 'graph'."))}},{key:"knownLayoutAlgorithms",value:function(){return this.worker.postMessage({cmd:"algorithms"})}},{key:"knownLayoutOptions",value:function(){return this.worker.postMessage({cmd:"options"})}},{key:"knownLayoutCategories",value:function(){return this.worker.postMessage({cmd:"categories"})}},{key:"terminateWorker",value:function(){this.worker.terminate()}}]),_}();p.default=y;var T=function(){function _(A){var P=this;if(b(this,_),A===void 0)throw new Error("Missing mandatory parameter 'worker'.");this.resolvers={},this.worker=A,this.worker.onmessage=function(R){setTimeout(function(){P.receive(P,R)},0)}}return v(_,[{key:"postMessage",value:function(P){var R=this.id||0;this.id=R+1,P.id=R;var F=this;return new Promise(function(j,K){F.resolvers[R]=function(ee,ie){ee?(F.convertGwtStyleError(ee),K(ee)):j(ie)},F.worker.postMessage(P)})}},{key:"receive",value:function(P,R){var F=R.data,j=P.resolvers[F.id];j&&(delete P.resolvers[F.id],F.error?j(F.error):j(null,F.data))}},{key:"terminate",value:function(){this.worker.terminate&&this.worker.terminate()}},{key:"convertGwtStyleError",value:function(P){if(P){var R=P.__java$exception;R&&(R.cause&&R.cause.backingJsObject&&(P.cause=R.cause.backingJsObject,this.convertGwtStyleError(P.cause)),delete P.__java$exception)}}}]),_}()},{}],2:[function(u,d,p){(function(v){(function(){var b;typeof window<"u"?b=window:typeof v<"u"?b=v:typeof self<"u"&&(b=self);var y;function T(){}function _(){}function A(){}function P(){}function R(){}function F(){}function j(){}function K(){}function ee(){}function ie(){}function oe(){}function pe(){}function be(){}function ae(){}function ne(){}function se(){}function de(){}function X(){}function ge(){}function W(){}function xe(){}function U(){}function Fe(){}function Pe(){}function je(){}function Ie(){}function Se(){}function Ce(){}function ke(){}function Ke(){}function Ft(){}function Ne(){}function gn(){}function _t(){}function Et(){}function Gt(){}function ln(){}function xt(){}function Pt(){}function Qe(){}function Dt(){}function kt(){}function On(){}function ht(){}function zr(){}function yt(){}function ji(){}function xi(){}function Ma(){}function zs(){}function ao(){}function Tr(){}function Fn(){}function qn(){}function Un(){}function At(){}function wt(){}function on(){}function fn(){}function An(){}function oo(){}function jo(){}function $o(){}function Pa(){}function wo(){}function _s(){}function tl(){}function da(){}function j0(){}function pm(){}function Ml(){}function Xc(){}function Bc(){}function ja(){}function Ou(){}function Sa(){}function Po(){}function Fc(){}function xa(){}function Ba(){}function ga(){}function kh(){}function lu(){}function o5(){}function Wh(){}function od(){}function Gd(){}function cd(){}function Kd(){}function $g(){}function as(){}function wn(){}function Zr(){}function Zi(){}function nu(){}function vu(){}function Dl(){}function Yh(){}function w1(){}function $0(){}function Wi(){}function Bs(){}function Qa(){}function Bi(){}function Nu(){}function Ot(){}function W3(){}function Kt(){}function z0(){}function Bp(){}function Y3(){}function $9(){}function c5(){}function Eh(){}function zg(){}function bm(){}function z9(){}function mm(){}function u5(){}function y1(){}function ud(){}function ld(){}function q9(){}function Vv(){}function Y7(){}function G2(){}function X7(){}function l5(){}function X3(){}function Fp(){}function nI(){}function ch(){}function oS(){}function hu(){}function $J(){}function vm(){}function zJ(){}function oj(){}function qJ(){}function cj(){}function q0(){}function Q3(){}function cS(){}function uj(){}function K2(){}function J3(){}function HJ(){}function wm(){}function VJ(){}function UJ(){}function Q7(){}function uS(){}function lj(){}function H9(){}function GJ(){}function V9(){}function KJ(){}function WJ(){}function YJ(){}function XJ(){}function QJ(){}function JJ(){}function ZJ(){}function eZ(){}function tZ(){}function nZ(){}function rZ(){}function rI(){}function iZ(){}function sZ(){}function lS(){}function hj(){}function J7(){}function aZ(){}function oZ(){}function cZ(){}function uZ(){}function lZ(){}function hS(){}function iI(){}function fj(){}function h5(){}function f5(){}function hZ(){}function t0(){}function Z7(){}function fZ(){}function U9(){}function Wd(){}function dZ(){}function gZ(){}function pZ(){}function dj(){}function bZ(){}function fS(){}function dS(){}function gj(){}function sI(){}function e8(){}function mZ(){}function pj(){}function bj(){}function vZ(){}function wZ(){}function yZ(){}function xZ(){}function kZ(){}function EZ(){}function Yd(){}function Uv(){}function TZ(){}function gS(){}function pS(){}function CZ(){}function d5(){}function G9(){}function aI(){}function Z3(){}function K9(){}function SZ(){}function bS(){}function hd(){}function mj(){}function oI(){}function W9(){}function cI(){}function vj(){}function _Z(){}function uI(){}function AZ(){}function LZ(){}function wj(){}function t8(){}function yj(){}function n8(){}function MZ(){}function lI(){}function DZ(){}function IZ(){}function OZ(){}function NZ(){}function xj(){}function PZ(){}function BZ(){}function kj(){}function FZ(){}function RZ(){}function jZ(){}function $Z(){}function Ej(){}function zZ(){}function qZ(){}function Tj(){}function Cj(){}function Sj(){}function HZ(){}function VZ(){}function Y9(){}function r8(){}function mS(){}function UZ(){}function hI(){}function vS(){}function fI(){}function _j(){}function Aj(){}function GZ(){}function KZ(){}function WZ(){}function Lj(){}function Mj(){}function YZ(){}function XZ(){}function QZ(){}function JZ(){}function ZZ(){}function Dj(){}function eee(){}function tee(){}function nee(){}function ree(){}function Ij(){}function wS(){}function iee(){}function see(){}function Oj(){}function aee(){}function oee(){}function cee(){}function uee(){}function lee(){}function hee(){}function Nj(){}function fee(){}function Pj(){}function dee(){}function gee(){}function pee(){}function yS(){}function bee(){}function xS(){}function mee(){}function Bj(){}function Fj(){}function Rj(){}function jj(){}function Gv(){}function $j(){}function zj(){}function qj(){}function Hj(){}function vee(){}function i8(){}function dI(){}function g5(){}function wee(){}function yee(){}function kS(){}function Vj(){}function xee(){}function kee(){}function Eee(){}function Tee(){}function Cee(){}function See(){}function _ee(){}function Aee(){}function Lee(){}function Mee(){}function ES(){}function Uj(){}function Dee(){}function Iee(){}function Oee(){}function Nee(){}function Pee(){}function Gj(){}function Kj(){}function Bee(){}function Wj(){}function Yj(){}function Fee(){}function Ree(){}function jee(){}function $ee(){}function zee(){}function qee(){}function Hee(){}function Vee(){}function gI(){}function Uee(){}function X9(){}function Xj(){}function Gee(){}function Kee(){}function Wee(){}function Yee(){}function Xee(){}function Qee(){}function Jee(){}function Zee(){}function ete(){}function tte(){}function nte(){}function rte(){}function ite(){}function ste(){}function ate(){}function s8(){}function Qj(){}function ote(){}function cte(){}function ute(){}function Jj(){}function lte(){}function TS(){}function hte(){}function fte(){}function dte(){}function gte(){}function pte(){}function bte(){}function mte(){}function vte(){}function wte(){}function yte(){}function a8(){}function xte(){}function kte(){}function Ete(){}function Tte(){}function Cte(){}function Ste(){}function _te(){}function Ate(){}function CS(){}function Lte(){}function Mte(){}function Dte(){}function Ite(){}function Ote(){}function Nte(){}function Pte(){}function Bte(){}function o8(){}function Zj(){}function Fte(){}function pI(){}function Rte(){}function jte(){}function $te(){}function zte(){}function qte(){}function Hte(){}function Vte(){}function e$(){}function Ute(){}function t$(){}function Gte(){}function n$(){}function r$(){}function i$(){}function Kte(){}function Wte(){}function s$(){}function Yte(){}function a$(){}function Xte(){}function Qte(){}function bI(){}function Jte(){}function Zte(){}function ene(){}function tne(){}function nne(){}function o$(){}function rne(){}function ine(){}function sne(){}function pwe(){}function ane(){}function one(){}function cne(){}function une(){}function lne(){}function hne(){}function fne(){}function dne(){}function gne(){}function pne(){}function bne(){}function mne(){}function vne(){}function wne(){}function yne(){}function xne(){}function fu(){}function kne(){}function SS(){}function Rc(){}function Pu(){}function hs(){}function mI(){}function Ene(){}function Tne(){}function Cne(){}function c8(){}function ym(){}function Q9(){}function Sne(){}function vI(){}function _ne(){}function Ane(){}function Lne(){}function c$(){}function Mne(){}function Dne(){}function wI(){}function Ine(){}function uh(){}function gl(){}function u$(){}function One(){}function Nne(){}function ey(){}function p5(){}function ty(){}function Rp(){}function u8(){}function yI(){}function l$(){}function h$(){}function Pne(){}function x1(){}function f$(){}function ny(){}function J9(){}function xI(){}function l8(){}function W2(){}function d$(){}function g$(){}function p$(){}function Bne(){}function h8(){}function ry(){}function jp(){}function Y2(){}function b5(){}function Z9(){}function _S(){}function kI(){}function Fne(){}function Rne(){}function b$(){}function m$(){}function Ut(){}function ek(){}function v$(){}function w$(){}function jne(){}function tk(){}function nk(){}function y$(){}function $ne(){}function zne(){}function qne(){}function Hne(){}function Vne(){}function Une(){}function EI(){}function Gne(){}function Kne(){}function x$(){}function AS(){}function Wne(){}function TI(){}function rk(){}function ik(){}function sk(){}function k$(){}function Yne(){}function E$(){}function T$(){}function Xne(){}function LS(){}function X2(){}function C$(){}function S$(){}function MS(){}function Qne(){}function m5(){}function _$(){}function CI(){}function Qc(){}function SI(){}function _I(){}function DS(){}function Jne(){}function Zne(){}function IS(){}function ere(){}function OS(){}function NS(){}function H0(){}function AI(){}function LI(){}function f8(){}function tre(){}function nre(){}function rre(){}function ire(){}function Xd(){}function PS(){}function d8(){}function k1(){}function A$(){}function L$(){}function M$(){}function D$(){}function I$(){}function O$(){}function V0(){}function nl(){}function sre(){}function are(){}function ore(){}function rl(){}function BS(){}function N$(){}function P$(){}function g8(){}function cre(){}function ak(){}function ure(){}function B$(){}function lre(){}function hre(){}function FS(){}function F$(){}function MI(){}function RS(){}function fre(){}function dre(){}function DI(){}function jS(){}function E1(){}function ok(){}function gre(){}function ck(){}function II(){}function xm(){}function $S(){}function OI(){}function U0(){}function zS(){}function T1(){}function C1(){}function pre(){}function bre(){}function v5(){}function uk(){}function lk(){}function qS(){}function mre(){}function vre(){}function p8(){}function R$(){}function j$(){}function wre(){}function $$(){}function yre(){}function z$(){}function NI(){}function xre(){}function HS(){}function kre(){}function Ere(){}function Tre(){}function Cre(){}function Sre(){}function q$(){}function _re(){}function Are(){}function Lre(){}function H$(){}function Mre(){}function Dre(){}function VS(){}function Ire(){}function Ore(){}function Nre(){}function Pre(){}function Bre(){}function Fre(){}function V$(){}function Rre(){}function U$(){}function jre(){}function PI(){}function $re(){}function G$(){}function zre(){}function K$(){}function qre(){}function W$(){}function Y$(){}function X$(){}function BI(){}function w5(){}function US(){}function S1(){}function Q$(){}function hk(){}function FI(){}function J$(){}function km(){}function Z$(){}function GS(){o_()}function Hre(){iO()}function ez(){dU()}function tz(){Lce()}function nz(){IA()}function KS(){Xxe()}function WS(){b0()}function rz(){axe()}function iz(){VN()}function b8(){sO()}function Kv(){OO()}function fk(){het()}function sz(){lx()}function Vre(){$ut()}function az(){s7e()}function m8(){Aot()}function RI(){a7e()}function oz(){mlt()}function Ure(){_ot()}function cz(){TE()}function YS(){eft()}function XS(){Zht()}function jI(){Ect()}function Gre(){tft()}function Kre(){Cb()}function Wre(){eq()}function Yre(){Yke()}function Xre(){Nt()}function Qre(){nft()}function Jre(){Lft()}function Zre(){Lot()}function eie(){egt()}function tie(){Mot()}function nie(){gmt()}function rie(){_9e()}function iie(){tp()}function sie(){p1t()}function v8(){Hc()}function aie(){jot()}function dk(){ux()}function Cf(){uke()}function oie(){Sb()}function gk(){lke()}function QS(){z1()}function cie(){YN()}function uie(){tle()}function lie(){lue()}function Sf(){pit()}function hie(){ZH()}function fie(){wU()}function uz(){pi()}function die(){PV()}function lz(){B8e()}function hz(){lce()}function fz(){zU()}function dz(){xke()}function n0(e){nr(e)}function gz(e){this.a=e}function JS(e){this.a=e}function pz(e){this.a=e}function bz(e){this.a=e}function gie(e){this.a=e}function pie(e){this.a=e}function mz(e){this.a=e}function bie(e){this.a=e}function vz(e){this.a=e}function Q2(e){this.a=e}function mie(e){this.a=e}function vie(e){this.a=e}function $I(e){this.a=e}function wie(e){this.a=e}function yie(e){this.a=e}function pk(e){this.a=e}function J2(e){this.a=e}function wz(e){this.a=e}function bk(e){this.a=e}function y5(e){this.a=e}function zI(e){this.a=e}function w8(e){this.a=e}function qI(e){this.b=e}function qg(e){this.c=e}function xie(e){this.a=e}function iy(e){this.a=e}function yz(e){this.a=e}function xz(e){this.a=e}function HI(e){this.a=e}function VI(e){this.a=e}function kz(e){this.a=e}function y8(e){this.a=e}function mk(e){this.a=e}function kie(e){this.a=e}function Ez(e){this.a=e}function Tz(e){this.a=e}function Cz(e){this.a=e}function Sz(e){this.a=e}function jc(e){this.a=e}function vk(e){this.a=e}function wk(e){this.a=e}function $p(){this.a=[]}function Eie(e,t){e.a=t}function Tie(e,t){e.a=t}function Cie(e,t){e.b=t}function Sie(e,t){e.b=t}function _ie(e,t){e.b=t}function _z(e,t){e.j=t}function bwe(e,t){e.g=t}function Az(e,t){e.i=t}function Aie(e,t){e.c=t}function x8(e,t){e.c=t}function mwe(e,t){e.d=t}function k8(e,t){e.d=t}function x(e,t){e.k=t}function m(e,t){e.c=t}function k(e,t){e.c=t}function S(e,t){e.a=t}function M(e,t){e.a=t}function O(e,t){e.f=t}function N(e,t){e.a=t}function $(e,t){e.b=t}function H(e,t){e.d=t}function q(e,t){e.i=t}function Y(e,t){e.o=t}function Z(e,t){e.r=t}function ce(e,t){e.a=t}function ve(e,t){e.b=t}function me(e,t){e.e=t}function Le(e,t){e.f=t}function _e(e,t){e.g=t}function Ee(e,t){e.e=t}function Be(e,t){e.f=t}function Re(e,t){e.f=t}function Ve(e,t){e.a=t}function ct(e,t){e.b=t}function st(e,t){e.n=t}function Ye(e,t){e.a=t}function mt(e,t){e.c=t}function Je(e,t){e.c=t}function Lt(e,t){e.c=t}function Mt(e,t){e.a=t}function ut(e,t){e.a=t}function Wt(e,t){e.d=t}function Tt(e,t){e.d=t}function _n(e,t){e.e=t}function hn(e,t){e.e=t}function Yt(e,t){e.g=t}function Dn(e,t){e.f=t}function ir(e,t){e.j=t}function vr(e,t){e.a=t}function Nn(e,t){e.a=t}function pr(e,t){e.b=t}function Er(e){e.b=e.a}function Mr(e){e.c=e.d.d}function Cr(e){this.a=e}function Or(e){this.a=e}function Wn(e){this.a=e}function br(e){this.a=e}function Sr(e){this.a=e}function Nr(e){this.a=e}function Si(e){this.a=e}function ys(e){this.a=e}function pa(e){this.a=e}function Mi(e){this.a=e}function gi(e){this.a=e}function fs(e){this.a=e}function Fs(e){this.a=e}function xs(e){this.a=e}function Rs(e){this.b=e}function yo(e){this.b=e}function $a(e){this.b=e}function Da(e){this.a=e}function Bo(e){this.a=e}function tr(e){this.c=e}function G(e){this.c=e}function Jn(e){this.c=e}function kr(e){this.d=e}function lr(e){this.a=e}function Vt(e){this.a=e}function Hs(e){this.a=e}function wr(e){this.a=e}function Es(e){this.a=e}function go(e){this.a=e}function $c(e){this.a=e}function za(e){this.a=e}function Sc(e){this.a=e}function ba(e){this.a=e}function xo(e){this.a=e}function lh(e){this.a=e}function Wl(e){this.a=e}function Z2(e){this.a=e}function eb(e){this.a=e}function G0(e){this.a=e}function zp(e){this.a=e}function fd(e){this.a=e}function Wv(e){this.a=e}function sy(e){this.a=e}function E8(e){this.a=e}function x5(e){this.a=e}function T8(e){this.a=e}function ZS(e){this.a=e}function k5(e){this.a=e}function Qd(e){this.a=e}function _1(e){this.a=e}function Jd(e){this.a=e}function Yv(e){this.a=e}function Em(e){this.a=e}function Lz(e){this.a=e}function Lie(e){this.a=e}function Mie(e){this.a=e}function e_(e){this.a=e}function Die(e){this.a=e}function Iie(e){this.a=e}function E5(e){this.a=e}function Mz(e){this.a=e}function yk(e){this.a=e}function UI(e){this.a=e}function t_(e){this.a=e}function Dz(e){this.a=e}function Iz(e){this.a=e}function Oie(e){this.a=e}function qp(e){this.a=e}function n_(e){this.a=e}function GI(e){this.a=e}function Tm(e){this.a=e}function Zd(e){this.e=e}function T5(e){this.a=e}function jWe(e){this.a=e}function C8(e){this.a=e}function vwe(e){this.a=e}function $We(e){this.a=e}function zWe(e){this.a=e}function qWe(e){this.a=e}function HWe(e){this.a=e}function VWe(e){this.a=e}function UWe(e){this.a=e}function GWe(e){this.a=e}function KWe(e){this.a=e}function WWe(e){this.a=e}function YWe(e){this.a=e}function XWe(e){this.a=e}function wwe(e){this.a=e}function QWe(e){this.a=e}function JWe(e){this.a=e}function ZWe(e){this.a=e}function eYe(e){this.a=e}function tYe(e){this.a=e}function nYe(e){this.a=e}function rYe(e){this.a=e}function iYe(e){this.a=e}function sYe(e){this.a=e}function aYe(e){this.a=e}function oYe(e){this.a=e}function cYe(e){this.a=e}function uYe(e){this.a=e}function lYe(e){this.a=e}function hYe(e){this.a=e}function fYe(e){this.a=e}function dYe(e){this.a=e}function gYe(e){this.a=e}function pYe(e){this.a=e}function bYe(e){this.a=e}function mYe(e){this.a=e}function vYe(e){this.a=e}function wYe(e){this.a=e}function yYe(e){this.a=e}function xYe(e){this.a=e}function kYe(e){this.a=e}function EYe(e){this.a=e}function TYe(e){this.a=e}function CYe(e){this.a=e}function SYe(e){this.a=e}function _Ye(e){this.a=e}function AYe(e){this.a=e}function LYe(e){this.a=e}function MYe(e){this.a=e}function DYe(e){this.a=e}function IYe(e){this.a=e}function OYe(e){this.a=e}function NYe(e){this.a=e}function PYe(e){this.c=e}function BYe(e){this.b=e}function FYe(e){this.a=e}function RYe(e){this.a=e}function jYe(e){this.a=e}function $Ye(e){this.a=e}function zYe(e){this.a=e}function qYe(e){this.a=e}function HYe(e){this.a=e}function VYe(e){this.a=e}function UYe(e){this.a=e}function GYe(e){this.a=e}function KYe(e){this.a=e}function WYe(e){this.a=e}function YYe(e){this.a=e}function XYe(e){this.a=e}function QYe(e){this.a=e}function JYe(e){this.a=e}function ZYe(e){this.a=e}function eXe(e){this.a=e}function tXe(e){this.a=e}function nXe(e){this.a=e}function rXe(e){this.a=e}function iXe(e){this.a=e}function sXe(e){this.a=e}function aXe(e){this.a=e}function oXe(e){this.a=e}function cXe(e){this.a=e}function uXe(e){this.a=e}function Hg(e){this.a=e}function C5(e){this.a=e}function lXe(e){this.a=e}function hXe(e){this.a=e}function fXe(e){this.a=e}function dXe(e){this.a=e}function gXe(e){this.a=e}function pXe(e){this.a=e}function bXe(e){this.a=e}function mXe(e){this.a=e}function vXe(e){this.a=e}function wXe(e){this.a=e}function yXe(e){this.a=e}function xXe(e){this.a=e}function kXe(e){this.a=e}function EXe(e){this.a=e}function TXe(e){this.a=e}function CXe(e){this.a=e}function SXe(e){this.a=e}function _Xe(e){this.a=e}function AXe(e){this.a=e}function LXe(e){this.a=e}function MXe(e){this.a=e}function DXe(e){this.a=e}function IXe(e){this.a=e}function OXe(e){this.a=e}function NXe(e){this.a=e}function PXe(e){this.a=e}function Oz(e){this.a=e}function BXe(e){this.f=e}function FXe(e){this.a=e}function RXe(e){this.a=e}function jXe(e){this.a=e}function $Xe(e){this.a=e}function zXe(e){this.a=e}function qXe(e){this.a=e}function HXe(e){this.a=e}function VXe(e){this.a=e}function UXe(e){this.a=e}function GXe(e){this.a=e}function KXe(e){this.a=e}function WXe(e){this.a=e}function YXe(e){this.a=e}function XXe(e){this.a=e}function QXe(e){this.a=e}function JXe(e){this.a=e}function ZXe(e){this.a=e}function eQe(e){this.a=e}function tQe(e){this.a=e}function nQe(e){this.a=e}function rQe(e){this.a=e}function iQe(e){this.a=e}function sQe(e){this.a=e}function aQe(e){this.a=e}function oQe(e){this.a=e}function cQe(e){this.a=e}function uQe(e){this.a=e}function lQe(e){this.a=e}function Nie(e){this.a=e}function ywe(e){this.a=e}function Ui(e){this.b=e}function hQe(e){this.a=e}function fQe(e){this.a=e}function dQe(e){this.a=e}function gQe(e){this.a=e}function pQe(e){this.a=e}function bQe(e){this.a=e}function mQe(e){this.a=e}function vQe(e){this.b=e}function wQe(e){this.a=e}function KI(e){this.a=e}function yQe(e){this.a=e}function xQe(e){this.a=e}function xwe(e){this.c=e}function Nz(e){this.e=e}function Pz(e){this.a=e}function Bz(e){this.a=e}function Pie(e){this.a=e}function kQe(e){this.d=e}function EQe(e){this.a=e}function kwe(e){this.a=e}function Ewe(e){this.a=e}function Xv(e){this.e=e}function Dcn(){this.a=0}function Pr(){Nl(this)}function bt(){Yse(this)}function Bie(){cat(this)}function TQe(){}function Qv(){this.c=LPe}function CQe(e,t){e.b+=t}function Icn(e,t){t.Wb(e)}function Ocn(e){return e.a}function Ncn(e){return e.a}function Pcn(e){return e.a}function Bcn(e){return e.a}function Fcn(e){return e.a}function ue(e){return e.e}function Rcn(){return null}function jcn(){return null}function $cn(){c3e(),wIn()}function zcn(e){e.b.Of(e.e)}function SQe(e){e.b=new nse}function r_(e,t){e.b=t-e.b}function i_(e,t){e.a=t-e.a}function $n(e,t){e.push(t)}function _Qe(e,t){e.sort(t)}function AQe(e,t){t.jd(e.a)}function qcn(e,t){la(t,e)}function Hcn(e,t,n){e.Yd(n,t)}function WI(e,t){e.e=t,t.b=e}function Twe(e){wd(),this.a=e}function LQe(e){wd(),this.a=e}function MQe(e){wd(),this.a=e}function Fie(e){ww(),this.a=e}function DQe(e){Xk(),S0e.le(e)}function Cwe(){Cwe=U,new Pr}function Cm(){Jnt.call(this)}function Swe(){Jnt.call(this)}function _we(){Cm.call(this)}function Rie(){Cm.call(this)}function IQe(){Cm.call(this)}function YI(){Cm.call(this)}function pl(){Cm.call(this)}function S8(){Cm.call(this)}function Qr(){Cm.call(this)}function Xh(){Cm.call(this)}function OQe(){Cm.call(this)}function _c(){Cm.call(this)}function NQe(){Cm.call(this)}function PQe(){this.a=this}function Fz(){this.Bb|=256}function BQe(){this.b=new Utt}function ay(e,t){e.length=t}function Rz(e,t){vt(e.a,t)}function Vcn(e,t){Jxe(e.c,t)}function Ucn(e,t){na(e.b,t)}function Gcn(e,t){oU(e.a,t)}function Kcn(e,t){Fce(e.a,t)}function xk(e,t){Ni(e.e,t)}function _8(e){EU(e.c,e.b)}function Wcn(e,t){e.kc().Nb(t)}function Awe(e){this.a=$4n(e)}function Ks(){this.a=new Pr}function FQe(){this.a=new Pr}function Lwe(){this.a=new net}function jz(){this.a=new bt}function jie(){this.a=new bt}function Mwe(){this.a=new bt}function _f(){this.a=new pm}function Sm(){this.a=new Nut}function Dwe(){this.a=new bm}function Iwe(){this.a=new Sot}function Owe(){this.a=new Rrt}function RQe(){this.a=new bt}function jQe(){this.a=new bt}function $Qe(){this.a=new bt}function Nwe(){this.a=new bt}function zQe(){this.d=new bt}function qQe(){this.a=new Got}function HQe(){this.a=new Ks}function VQe(){this.a=new Pr}function UQe(){this.b=new Pr}function GQe(){this.b=new bt}function Pwe(){this.e=new bt}function KQe(){this.a=new Kre}function WQe(){this.d=new bt}function YQe(){Qat.call(this)}function XQe(){Qat.call(this)}function QQe(){bt.call(this)}function Bwe(){_we.call(this)}function Fwe(){jz.call(this)}function JQe(){Vq.call(this)}function ZQe(){Nwe.call(this)}function s_(){TQe.call(this)}function $ie(){s_.call(this)}function A8(){TQe.call(this)}function Rwe(){A8.call(this)}function eJe(){qwe.call(this)}function tJe(){qwe.call(this)}function nJe(){qwe.call(this)}function rJe(){Hwe.call(this)}function a_(){Wne.call(this)}function jwe(){Wne.call(this)}function bl(){os.call(this)}function iJe(){wJe.call(this)}function sJe(){wJe.call(this)}function aJe(){Pr.call(this)}function oJe(){Pr.call(this)}function cJe(){Pr.call(this)}function zie(){sft.call(this)}function uJe(){Ks.call(this)}function lJe(){Fz.call(this)}function qie(){kye.call(this)}function $we(){Pr.call(this)}function Hie(){kye.call(this)}function Vie(){Pr.call(this)}function hJe(){Pr.call(this)}function zwe(){m5.call(this)}function fJe(){zwe.call(this)}function dJe(){m5.call(this)}function gJe(){J$.call(this)}function qwe(){this.a=new Ks}function pJe(){this.a=new Pr}function bJe(){this.a=new bt}function Hwe(){this.a=new Pr}function L8(){this.a=new os}function mJe(){this.j=new bt}function vJe(){this.a=new bZe}function wJe(){this.a=new Qne}function Vwe(){this.a=new hs}function o_(){o_=U,v0e=new _}function Uie(){Uie=U,w0e=new xJe}function Gie(){Gie=U,y0e=new yJe}function yJe(){pk.call(this,"")}function xJe(){pk.call(this,"")}function kJe(e){Aht.call(this,e)}function EJe(e){Aht.call(this,e)}function Uwe(e){vz.call(this,e)}function Gwe(e){UZe.call(this,e)}function Ycn(e){UZe.call(this,e)}function Xcn(e){Gwe.call(this,e)}function Qcn(e){Gwe.call(this,e)}function Jcn(e){Gwe.call(this,e)}function TJe(e){Toe.call(this,e)}function CJe(e){Toe.call(this,e)}function SJe(e){ait.call(this,e)}function _Je(e){p3e.call(this,e)}function c_(e){Xz.call(this,e)}function Kwe(e){Xz.call(this,e)}function AJe(e){Xz.call(this,e)}function Wwe(e){y9n.call(this,e)}function Ywe(e){Wwe.call(this,e)}function Ac(e){_st.call(this,e)}function LJe(e){Ac.call(this,e)}function M8(){wk.call(this,{})}function MJe(){MJe=U,d6t=new W}function $z(){$z=U,E0e=new Ant}function DJe(){DJe=U,USe=new T}function Xwe(){Xwe=U,GSe=new ae}function zz(){zz=U,NL=new de}function Kie(e){Ok(),this.a=e}function Wie(e){E7e(),this.a=e}function Jv(e){Iae(),this.f=e}function Yie(e){Iae(),this.f=e}function IJe(e){git(),this.a=e}function OJe(e){e.b=null,e.c=0}function Zcn(e,t){e.e=t,gbt(e,t)}function eun(e,t){e.a=t,okn(e)}function Xie(e,t,n){e.a[t.g]=n}function tun(e,t,n){k8n(n,e,t)}function nun(e,t){Qfn(t.i,e.n)}function NJe(e,t){xyn(e).Cd(t)}function run(e,t){e.a.ec().Mc(t)}function PJe(e,t){return e.g-t.g}function iun(e,t){return e*e/t}function Rt(e){return nr(e),e}function ze(e){return nr(e),e}function XI(e){return nr(e),e}function sun(e){return new vk(e)}function aun(e){return new yy(e)}function Qwe(e){return nr(e),e}function oun(e){return nr(e),e}function qz(e){Ac.call(this,e)}function tc(e){Ac.call(this,e)}function BJe(e){Ac.call(this,e)}function Qie(e){_st.call(this,e)}function kk(e){Ac.call(this,e)}function Yn(e){Ac.call(this,e)}function nc(e){Ac.call(this,e)}function FJe(e){Ac.call(this,e)}function D8(e){Ac.call(this,e)}function Hp(e){Ac.call(this,e)}function Vp(e){Ac.call(this,e)}function I8(e){Ac.call(this,e)}function dd(e){Ac.call(this,e)}function Jie(e){Ac.call(this,e)}function ri(e){Ac.call(this,e)}function Il(e){nr(e),this.a=e}function Jwe(e){return Um(e),e}function u_(e){l5e(e,e.length)}function l_(e){return e.b==e.c}function oy(e){return!!e&&e.b}function cun(e){return!!e&&e.k}function uun(e){return!!e&&e.j}function lun(e,t,n){e.c.Ef(t,n)}function RJe(e,t){e.be(t),t.ae(e)}function O8(e){wd(),this.a=Xr(e)}function Zie(){this.a=ei(Xr(Co))}function jJe(){throw ue(new Qr)}function hun(){throw ue(new Qr)}function Zwe(){throw ue(new Qr)}function $Je(){throw ue(new Qr)}function fun(){throw ue(new Qr)}function dun(){throw ue(new Qr)}function Hz(){Hz=U,Xk()}function Up(){Nr.call(this,"")}function h_(){Nr.call(this,"")}function tb(){Nr.call(this,"")}function S5(){Nr.call(this,"")}function e3e(e){tc.call(this,e)}function t3e(e){tc.call(this,e)}function gd(e){Yn.call(this,e)}function Ek(e){$a.call(this,e)}function zJe(e){Ek.call(this,e)}function ese(e){jq.call(this,e)}function tse(e){Nye.call(this,e,0)}function nse(){G5e.call(this,12,3)}function le(e,t){return yot(e,t)}function Vz(e,t){return joe(e,t)}function gun(e,t){return e.a-t.a}function pun(e,t){return e.a-t.a}function bun(e,t){return e.a-t.a}function mun(e,t){return t in e.a}function qJe(e){return e.a?e.b:0}function vun(e){return e.a?e.b:0}function wun(e,t,n){t.Cd(e.a[n])}function yun(e,t,n){t.Pe(e.a[n])}function xun(e,t){e.b=new Eo(t)}function kun(e,t){return e.b=t,e}function HJe(e,t){return e.c=t,e}function VJe(e,t){return e.f=t,e}function Eun(e,t){return e.g=t,e}function n3e(e,t){return e.a=t,e}function r3e(e,t){return e.f=t,e}function Tun(e,t){return e.k=t,e}function i3e(e,t){return e.a=t,e}function Cun(e,t){return e.e=t,e}function s3e(e,t){return e.e=t,e}function Sun(e,t){return e.f=t,e}function _un(e,t){e.b=!0,e.d=t}function Aun(e,t){return e.b-t.b}function Lun(e,t){return e.g-t.g}function Mun(e,t){return e?0:t-1}function UJe(e,t){return e?0:t-1}function Dun(e,t){return e?t-1:0}function Iun(e,t){return e.s-t.s}function Oun(e,t){return t.rg(e)}function Zv(e,t){return e.b=t,e}function Uz(e,t){return e.a=t,e}function ew(e,t){return e.c=t,e}function tw(e,t){return e.d=t,e}function nw(e,t){return e.e=t,e}function a3e(e,t){return e.f=t,e}function f_(e,t){return e.a=t,e}function Tk(e,t){return e.b=t,e}function Ck(e,t){return e.c=t,e}function Qt(e,t){return e.c=t,e}function yn(e,t){return e.b=t,e}function Jt(e,t){return e.d=t,e}function Zt(e,t){return e.e=t,e}function Nun(e,t){return e.f=t,e}function en(e,t){return e.g=t,e}function tn(e,t){return e.a=t,e}function nn(e,t){return e.i=t,e}function rn(e,t){return e.j=t,e}function Pun(e,t){Cb(),Mc(t,e)}function Bun(e,t,n){Jdn(e.a,t,n)}function Gz(e){dae.call(this,e)}function GJe(e){t5n.call(this,e)}function KJe(e){Aat.call(this,e)}function o3e(e){Aat.call(this,e)}function nb(e){Lw.call(this,e)}function WJe(e){noe.call(this,e)}function YJe(e){noe.call(this,e)}function XJe(){bye.call(this,"")}function qa(){this.a=0,this.b=0}function QJe(){this.b=0,this.a=0}function JJe(e,t){e.b=0,My(e,t)}function ZJe(e,t){return e.k=t,e}function Fun(e,t){return e.j=t,e}function Run(e,t){e.c=t,e.b=!0}function eZe(){eZe=U,S6t=Y8n()}function rb(){rb=U,w_t=a8n()}function tZe(){tZe=U,La=vxn()}function c3e(){c3e=U,Qb=hE()}function Sk(){Sk=U,APe=o8n()}function nZe(){nZe=U,rAt=c8n()}function u3e(){u3e=U,tu=ikn()}function K0(e){return e.e&&e.e()}function rZe(e){return e.l|e.m<<22}function iZe(e,t){return e.c._b(t)}function sZe(e,t){return i1t(e.b,t)}function rse(e){return e?e.d:null}function jun(e){return e?e.g:null}function $un(e){return e?e.i:null}function _m(e){return Gg(e),e.o}function _5(e,t){return e.a+=t,e}function ise(e,t){return e.a+=t,e}function Gp(e,t){return e.a+=t,e}function rw(e,t){return e.a+=t,e}function l3e(e,t){for(;e.Bd(t););}function Kz(e){this.a=new N8(e)}function aZe(){throw ue(new Qr)}function oZe(){throw ue(new Qr)}function cZe(){throw ue(new Qr)}function uZe(){throw ue(new Qr)}function lZe(){throw ue(new Qr)}function hZe(){throw ue(new Qr)}function Kp(e){this.a=new Pae(e)}function fZe(){this.a=new UA(EIe)}function dZe(){this.b=new UA(qDe)}function gZe(){this.a=new UA(KIe)}function pZe(){this.b=new UA(pge)}function bZe(){this.b=new UA(pge)}function Wz(e){this.a=0,this.b=e}function h3e(e){Gvt(),IIn(this,e)}function _k(e){return fb(e),e.a}function QI(e){return e.b!=e.d.c}function f3e(e,t){return e.d[t.p]}function mZe(e,t){return YCn(e,t)}function d3e(e,t,n){e.splice(t,n)}function A5(e,t){for(;e.Re(t););}function vZe(e){e.c?Ibt(e):Obt(e)}function wZe(){throw ue(new Qr)}function yZe(){throw ue(new Qr)}function xZe(){throw ue(new Qr)}function kZe(){throw ue(new Qr)}function EZe(){throw ue(new Qr)}function TZe(){throw ue(new Qr)}function CZe(){throw ue(new Qr)}function SZe(){throw ue(new Qr)}function _Ze(){throw ue(new Qr)}function AZe(){throw ue(new Qr)}function zun(){throw ue(new _c)}function qun(){throw ue(new _c)}function JI(e){this.a=new LZe(e)}function LZe(e){Gwn(this,e,T9n())}function ZI(e){return!e||oat(e)}function eO(e){return nd[e]!=-1}function Hun(){aK!=0&&(aK=0),oK=-1}function MZe(){m0e==null&&(m0e=[])}function tO(e,t){q5.call(this,e,t)}function Ak(e,t){tO.call(this,e,t)}function DZe(e,t){this.a=e,this.b=t}function IZe(e,t){this.a=e,this.b=t}function OZe(e,t){this.a=e,this.b=t}function NZe(e,t){this.a=e,this.b=t}function PZe(e,t){this.a=e,this.b=t}function BZe(e,t){this.a=e,this.b=t}function FZe(e,t){this.a=e,this.b=t}function Lk(e,t){this.e=e,this.d=t}function g3e(e,t){this.b=e,this.c=t}function RZe(e,t){this.b=e,this.a=t}function jZe(e,t){this.b=e,this.a=t}function $Ze(e,t){this.b=e,this.a=t}function zZe(e,t){this.b=e,this.a=t}function qZe(e,t){this.a=e,this.b=t}function sse(e,t){this.a=e,this.b=t}function HZe(e,t){this.a=e,this.f=t}function iw(e,t){this.g=e,this.i=t}function Ur(e,t){this.f=e,this.g=t}function VZe(e,t){this.b=e,this.c=t}function UZe(e){Tye(e.dc()),this.c=e}function Vun(e,t){this.a=e,this.b=t}function GZe(e,t){this.a=e,this.b=t}function KZe(e){this.a=l(Xr(e),15)}function p3e(e){this.a=l(Xr(e),15)}function WZe(e){this.a=l(Xr(e),85)}function Yz(e){this.b=l(Xr(e),85)}function Xz(e){this.b=l(Xr(e),51)}function Qz(){this.q=new b.Date}function ase(e,t){this.a=e,this.b=t}function YZe(e,t){return Hu(e.b,t)}function nO(e,t){return e.b.Hc(t)}function XZe(e,t){return e.b.Ic(t)}function QZe(e,t){return e.b.Qc(t)}function JZe(e,t){return e.b.Hc(t)}function ZZe(e,t){return e.c.uc(t)}function eet(e,t){return Pi(e.c,t)}function W0(e,t){return e.a._b(t)}function tet(e,t){return e>t&&t0}function fse(e,t){return iu(e,t)<0}function vet(e,t){return Aae(e.a,t)}function uln(e,t){xot.call(this,e,t)}function k3e(e){Kae(),ait.call(this,e)}function E3e(e,t){gst(e,e.length,t)}function aO(e,t){qst(e,e.length,t)}function y_(e,t){return e.a.get(t)}function wet(e,t){return Hu(e.e,t)}function T3e(e){return nr(e),!1}function C3e(e){this.a=l(Xr(e),229)}function aq(e){kn.call(this,e,21)}function oq(e,t){Ur.call(this,e,t)}function dse(e,t){Ur.call(this,e,t)}function yet(e,t){this.b=e,this.a=t}function cq(e,t){this.d=e,this.e=t}function xet(e,t){this.a=e,this.b=t}function ket(e,t){this.a=e,this.b=t}function Eet(e,t){this.a=e,this.b=t}function Tet(e,t){this.a=e,this.b=t}function B8(e,t){this.a=e,this.b=t}function Cet(e,t){this.b=e,this.a=t}function S3e(e,t){this.b=e,this.a=t}function _3e(e,t){Ur.call(this,e,t)}function A3e(e,t){Ur.call(this,e,t)}function L5(e,t){Ur.call(this,e,t)}function gse(e,t){Ur.call(this,e,t)}function pse(e,t){Ur.call(this,e,t)}function bse(e,t){Ur.call(this,e,t)}function uq(e,t){Ur.call(this,e,t)}function L3e(e,t){this.b=e,this.a=t}function lq(e,t){Ur.call(this,e,t)}function M3e(e,t){this.b=e,this.a=t}function hq(e,t){Ur.call(this,e,t)}function _et(e,t){this.b=e,this.a=t}function D3e(e,t){Ur.call(this,e,t)}function mse(e,t){Ur.call(this,e,t)}function oO(e,t){Ur.call(this,e,t)}function x_(e,t,n){e.splice(t,0,n)}function lln(e,t,n){e.Mb(n)&&t.Cd(n)}function hln(e,t,n){t.Pe(e.a.Ye(n))}function fln(e,t,n){t.Dd(e.a.Ze(n))}function dln(e,t,n){t.Cd(e.a.Kb(n))}function gln(e,t){return vl(e.c,t)}function pln(e,t){return vl(e.e,t)}function fq(e,t){Ur.call(this,e,t)}function dq(e,t){Ur.call(this,e,t)}function k_(e,t){Ur.call(this,e,t)}function I3e(e,t){Ur.call(this,e,t)}function Ws(e,t){Ur.call(this,e,t)}function gq(e,t){Ur.call(this,e,t)}function Aet(e,t){this.a=e,this.b=t}function Let(e,t){this.a=e,this.b=t}function Met(e,t){this.a=e,this.b=t}function Det(e,t){this.a=e,this.b=t}function Iet(e,t){this.a=e,this.b=t}function Oet(e,t){this.a=e,this.b=t}function Net(e,t){this.b=e,this.a=t}function Pet(e,t){this.b=e,this.a=t}function O3e(e,t){this.b=e,this.a=t}function Ik(e,t){this.c=e,this.d=t}function Bet(e,t){this.e=e,this.d=t}function Fet(e,t){this.a=e,this.b=t}function Ret(e,t){this.a=e,this.b=t}function jet(e,t){this.a=e,this.b=t}function $et(e,t){this.b=e,this.a=t}function zet(e,t){this.b=t,this.c=e}function pq(e,t){Ur.call(this,e,t)}function cO(e,t){Ur.call(this,e,t)}function vse(e,t){Ur.call(this,e,t)}function N3e(e,t){Ur.call(this,e,t)}function E_(e,t){Ur.call(this,e,t)}function wse(e,t){Ur.call(this,e,t)}function yse(e,t){Ur.call(this,e,t)}function uO(e,t){Ur.call(this,e,t)}function P3e(e,t){Ur.call(this,e,t)}function xse(e,t){Ur.call(this,e,t)}function T_(e,t){Ur.call(this,e,t)}function B3e(e,t){Ur.call(this,e,t)}function C_(e,t){Ur.call(this,e,t)}function S_(e,t){Ur.call(this,e,t)}function uy(e,t){Ur.call(this,e,t)}function kse(e,t){Ur.call(this,e,t)}function Ese(e,t){Ur.call(this,e,t)}function F3e(e,t){Ur.call(this,e,t)}function lO(e,t){Ur.call(this,e,t)}function M5(e,t){Ur.call(this,e,t)}function Tse(e,t){Ur.call(this,e,t)}function bq(e,t){Ur.call(this,e,t)}function hO(e,t){Ur.call(this,e,t)}function ly(e,t){Ur.call(this,e,t)}function mq(e,t){Ur.call(this,e,t)}function R3e(e,t){Ur.call(this,e,t)}function Cse(e,t){Ur.call(this,e,t)}function Sse(e,t){Ur.call(this,e,t)}function _se(e,t){Ur.call(this,e,t)}function Ase(e,t){Ur.call(this,e,t)}function Lse(e,t){Ur.call(this,e,t)}function Mse(e,t){Ur.call(this,e,t)}function Dse(e,t){Ur.call(this,e,t)}function qet(e,t){this.b=e,this.a=t}function j3e(e,t){Ur.call(this,e,t)}function Het(e,t){this.a=e,this.b=t}function Vet(e,t){this.a=e,this.b=t}function Uet(e,t){this.a=e,this.b=t}function $3e(e,t){Ur.call(this,e,t)}function z3e(e,t){Ur.call(this,e,t)}function Get(e,t){this.a=e,this.b=t}function bln(e,t){return jk(),t!=e}function fO(e){return mr(e.a),e.b}function Ise(e){return EEn(e,e.c),e}function Ket(){return eZe(),new S6t}function Wet(){Yq(),this.a=new i4e}function Yet(){IU(),this.a=new Ks}function Xet(){foe(),this.b=new Ks}function Qet(e,t){this.b=e,this.d=t}function Jet(e,t){this.a=e,this.b=t}function Zet(e,t){this.a=e,this.b=t}function ett(e,t){this.a=e,this.b=t}function ttt(e,t){this.b=e,this.a=t}function q3e(e,t){Ur.call(this,e,t)}function H3e(e,t){Ur.call(this,e,t)}function vq(e,t){Ur.call(this,e,t)}function ow(e,t){Ur.call(this,e,t)}function Ose(e,t){Ur.call(this,e,t)}function wq(e,t){Ur.call(this,e,t)}function V3e(e,t){Ur.call(this,e,t)}function U3e(e,t){Ur.call(this,e,t)}function dO(e,t){Ur.call(this,e,t)}function G3e(e,t){Ur.call(this,e,t)}function Nse(e,t){Ur.call(this,e,t)}function yq(e,t){Ur.call(this,e,t)}function Pse(e,t){Ur.call(this,e,t)}function Bse(e,t){Ur.call(this,e,t)}function Fse(e,t){Ur.call(this,e,t)}function Rse(e,t){Ur.call(this,e,t)}function K3e(e,t){Ur.call(this,e,t)}function jse(e,t){Ur.call(this,e,t)}function W3e(e,t){Ur.call(this,e,t)}function gO(e,t){Ur.call(this,e,t)}function $se(e,t){Ur.call(this,e,t)}function Y3e(e,t){Ur.call(this,e,t)}function pO(e,t){Ur.call(this,e,t)}function X3e(e,t){Ur.call(this,e,t)}function ntt(e,t){this.b=e,this.a=t}function rtt(e,t){this.b=e,this.a=t}function itt(e,t){this.b=e,this.a=t}function stt(e,t){this.b=e,this.a=t}function Q3e(e,t){this.a=e,this.b=t}function att(e,t){this.a=e,this.b=t}function ott(e,t){this.a=e,this.b=t}function lt(e,t){this.a=e,this.b=t}function __(e,t){Ur.call(this,e,t)}function bO(e,t){Ur.call(this,e,t)}function F8(e,t){Ur.call(this,e,t)}function A_(e,t){Ur.call(this,e,t)}function mO(e,t){Ur.call(this,e,t)}function zse(e,t){Ur.call(this,e,t)}function xq(e,t){Ur.call(this,e,t)}function L_(e,t){Ur.call(this,e,t)}function qse(e,t){Ur.call(this,e,t)}function kq(e,t){Ur.call(this,e,t)}function D5(e,t){Ur.call(this,e,t)}function vO(e,t){Ur.call(this,e,t)}function M_(e,t){Ur.call(this,e,t)}function D_(e,t){Ur.call(this,e,t)}function wO(e,t){Ur.call(this,e,t)}function Eq(e,t){Ur.call(this,e,t)}function I5(e,t){Ur.call(this,e,t)}function Hse(e,t){Ur.call(this,e,t)}function ctt(e,t){Ur.call(this,e,t)}function Tq(e,t){Ur.call(this,e,t)}function utt(e,t){this.a=e,this.b=t}function ltt(e,t){this.a=e,this.b=t}function htt(e,t){this.a=e,this.b=t}function ftt(e,t){this.a=e,this.b=t}function dtt(e,t){this.a=e,this.b=t}function gtt(e,t){this.a=e,this.b=t}function ca(e,t){this.a=e,this.b=t}function ptt(e,t){this.a=e,this.b=t}function btt(e,t){this.a=e,this.b=t}function mtt(e,t){this.a=e,this.b=t}function vtt(e,t){this.a=e,this.b=t}function wtt(e,t){this.a=e,this.b=t}function ytt(e,t){this.a=e,this.b=t}function xtt(e,t){this.b=e,this.a=t}function ktt(e,t){this.b=e,this.a=t}function Ett(e,t){this.b=e,this.a=t}function Ttt(e,t){this.b=e,this.a=t}function Ctt(e,t){this.a=e,this.b=t}function Stt(e,t){this.a=e,this.b=t}function Cq(e,t){Ur.call(this,e,t)}function _tt(e,t){this.a=e,this.b=t}function Att(e,t){this.a=e,this.b=t}function R8(e,t){Ur.call(this,e,t)}function Ltt(e,t){this.f=e,this.c=t}function J3e(e,t){return vl(e.g,t)}function mln(e,t){return vl(t.b,e)}function Mtt(e,t){return Kce(e.a,t)}function vln(e,t){return-e.b.af(t)}function wln(e,t){e&&ki(lF,e,t)}function Z3e(e,t){e.i=null,xV(e,t)}function yln(e,t,n){xgt(t,jue(e,n))}function xln(e,t,n){xgt(t,jue(e,n))}function kln(e,t){XTn(e.a,l(t,58))}function Dtt(e,t){Gvn(e.a,l(t,12))}function Sq(e,t){this.a=e,this.b=t}function Itt(e,t){this.a=e,this.b=t}function Ott(e,t){this.a=e,this.b=t}function Ntt(e,t){this.a=e,this.b=t}function Ptt(e,t){this.a=e,this.b=t}function Btt(e,t){this.d=e,this.b=t}function Ftt(e,t){this.e=e,this.a=t}function yO(e,t){this.b=e,this.c=t}function eye(e,t){this.i=e,this.g=t}function tye(e,t){this.d=e,this.e=t}function Eln(e,t){own(new or(e),t)}function _q(e){return FN(e.c,e.b)}function hc(e){return e?e.md():null}function qe(e){return e??null}function Ia(e){return typeof e===Ile}function hy(e){return typeof e===Cx}function fy(e){return typeof e===Qke}function cw(e,t){return iu(e,t)==0}function Aq(e,t){return iu(e,t)>=0}function I_(e,t){return iu(e,t)!=0}function Lq(e,t){return T3n(e.Kc(),t)}function ab(e,t){return e.Rd().Xb(t)}function Rtt(e){return Ql(e),e.d.gc()}function Mq(e){return V_(e==null),e}function O_(e,t){return e.a+=""+t,e}function Xo(e,t){return e.a+=""+t,e}function N_(e,t){return e.a+=""+t,e}function wu(e,t){return e.a+=""+t,e}function hi(e,t){return e.a+=""+t,e}function nye(e,t){return e.a+=""+t,e}function Tln(e){return""+(nr(e),e)}function jtt(e){Nl(this),bA(this,e)}function $tt(){U5e(),Q4e.call(this)}function ztt(e,t){n5e.call(this,e,t)}function qtt(e,t){n5e.call(this,e,t)}function Dq(e,t){n5e.call(this,e,t)}function ko(e,t){Cs(e,t,e.c.b,e.c)}function O5(e,t){Cs(e,t,e.a,e.a.a)}function rye(e){return Sn(e,0),null}function Htt(){this.b=0,this.a=!1}function Vtt(){this.b=0,this.a=!1}function Utt(){this.b=new N8(Ay(12))}function Gtt(){Gtt=U,y7t=Kr(eue())}function Ktt(){Ktt=U,q8t=Kr(rbt())}function Wtt(){Wtt=U,hTt=Kr(Bft())}function iye(){iye=U,Cwe(),KSe=new Pr}function Y0(e){return e.a=0,e.b=0,e}function Ytt(e,t){return e.a=t.g+1,e}function Vse(e,t){my.call(this,e,t)}function pn(e,t){vs.call(this,e,t)}function N5(e,t){eye.call(this,e,t)}function Xtt(e,t){TO.call(this,e,t)}function Use(e,t){mE.call(this,e,t)}function wi(e,t){iq(),ki(kY,e,t)}function Qtt(e,t){e.q.setTime(Fm(t))}function Cln(e){b.clearTimeout(e)}function Sln(e){return Xr(e),new P_(e)}function Jtt(e,t){return qe(e)===qe(t)}function Ztt(e,t){return e.a.a.a.cc(t)}function Gse(e,t){return tf(e.a,0,t)}function sye(e){return Lgn(l(e,74))}function j8(e){return ua((nr(e),e))}function _ln(e){return ua((nr(e),e))}function ent(e){return qu(e.l,e.m,e.h)}function aye(e,t){return ru(e.a,t.a)}function Aln(e,t){return $st(e.a,t.a)}function Lln(e,t){return Yi(e.a,t.a)}function pd(e,t){return e.indexOf(t)}function Mln(e,t){return e.j[t.p]==2}function uw(e,t){return e==t?0:e?1:-1}function Iq(e){return e<10?"0"+e:""+e}function wc(e){return typeof e===Qke}function Dln(e){return e==s3||e==o4}function Iln(e){return e==s3||e==a4}function tnt(e,t){return ru(e.g,t.g)}function oye(e){return gc(e.b.b,e,0)}function nnt(){sH.call(this,0,0,0,0)}function bd(){wr.call(this,new e2)}function cye(e,t){nE(e,0,e.length,t)}function Oln(e,t){return vt(e.a,t),t}function Nln(e,t){return u0(),t.a+=e}function Pln(e,t){return u0(),t.a+=e}function Bln(e,t){return u0(),t.c+=e}function Fln(e,t){return vt(e.c,t),e}function uye(e,t){return Dh(e.a,t),e}function rnt(e){this.a=Ket(),this.b=e}function int(e){this.a=Ket(),this.b=e}function Eo(e){this.a=e.a,this.b=e.b}function P_(e){this.a=e,GS.call(this)}function snt(e){this.a=e,GS.call(this)}function $8(){ef.call(this,0,0,0,0)}function Oq(e){return Dh(new Xs,e)}function ant(e){return EH(l(e,123))}function hh(e){return e.vh()&&e.wh()}function P5(e){return e!=Z1&&e!=Wb}function Ug(e){return e==uc||e==vc}function B5(e){return e==wf||e==Q1}function ont(e){return e==G6||e==U6}function Rln(e,t){return ru(e.g,t.g)}function cnt(e,t){return new mE(t,e)}function jln(e,t){return new mE(t,e)}function lye(e){return adn(e.b.Kc(),e.a)}function Kse(e,t){CE(e,t),lE(e,e.D)}function Wse(e,t,n){dV(e,t),fV(e,n)}function F5(e,t,n){Dw(e,t),Mw(e,n)}function Qh(e,t,n){Uu(e,t),Gu(e,n)}function xO(e,t,n){aE(e,t),cE(e,n)}function kO(e,t,n){oE(e,t),uE(e,n)}function unt(e,t,n){Gye.call(this,e,t,n)}function hye(e){Ltt.call(this,e,!0)}function lnt(){oq.call(this,"Tail",3)}function hnt(){oq.call(this,"Head",1)}function ob(e){Cd(),y3n.call(this,e)}function lw(e){sH.call(this,e,e,e,e)}function Yse(e){e.c=We(wa,Rn,1,0,5,1)}function fye(e){return e.b&&gle(e),e.a}function dye(e){return e.b&&gle(e),e.c}function $ln(e,t){G1||(e.b=t)}function zln(e,t){return e[e.length]=t}function qln(e,t){return e[e.length]=t}function Hln(e,t){return Ly(t,M1(e))}function Vln(e,t){return Ly(t,M1(e))}function Uln(e,t){return vV(Uae(e.d),t)}function Gln(e,t){return vV(Uae(e.g),t)}function Kln(e,t){return vV(Uae(e.j),t)}function Ha(e,t){vs.call(this,e.b,t)}function Wln(e,t){qr(du(e.a),Iot(t))}function Yln(e,t){qr(Xl(e.a),Oot(t))}function Xln(e,t,n){Qh(n,n.i+e,n.j+t)}function fnt(e,t,n){Ts(e.c[t.g],t.g,n)}function Qln(e,t,n){l(e.c,71).Gi(t,n)}function Xse(e,t,n){return Ts(e,t,n),n}function dnt(e){Vu(e.Sf(),new Mie(e))}function R5(e){return e!=null?es(e):0}function Jln(e){return e==null?0:es(e)}function B_(e){Di(),Xv.call(this,e)}function gnt(e){this.a=e,_4e.call(this,e)}function A1(){A1=U,b.Math.log(2)}function Jh(){Jh=U,Sg=(bet(),C_t)}function pnt(){pnt=U,Mde=new LA(Vge)}function Jr(){Jr=U,new bnt,new bt}function bnt(){new Pr,new Pr,new Pr}function Zln(){throw ue(new Hp(Q5t))}function ehn(){throw ue(new Hp(Q5t))}function thn(){throw ue(new Hp(J5t))}function nhn(){throw ue(new Hp(J5t))}function Qse(e){this.a=e,Yz.call(this,e)}function Jse(e){this.a=e,Yz.call(this,e)}function mnt(e,t){ww(),this.a=e,this.b=t}function rhn(e,t){Xr(t),V5(e).Jc(new ie)}function Vs(e,t){Lae(e.c,e.c.length,t)}function Lc(e){return e.at?1:0}function pye(e,t){return iu(e,t)>0?e:t}function qu(e,t,n){return{l:e,m:t,h:n}}function ihn(e,t){e.a!=null&&Dtt(t,e.a)}function shn(e){po(e,null),Fa(e,null)}function ahn(e,t,n){return ki(e.g,n,t)}function j5(e,t,n){return R8e(t,n,e.c)}function ohn(e,t,n){return ki(e.k,n,t)}function chn(e,t,n){return KMn(e,t,n),n}function uhn(e,t){return Sh(),t.n.b+=e}function wnt(e){R5e.call(this),this.b=e}function bye(e){r4e.call(this),this.a=e}function ynt(){oq.call(this,"Range",2)}function Nq(e){this.b=e,this.a=new bt}function xnt(e){this.b=new Nu,this.a=e}function knt(e){e.a=new _t,e.c=new _t}function Ent(e){e.a=new Pr,e.d=new Pr}function Tnt(e){doe(e,null),goe(e,null)}function Cnt(e,t){return YMn(e.a,t,null)}function lhn(e,t){return ki(e.a,t.a,t)}function Ja(e){return new lt(e.a,e.b)}function mye(e){return new lt(e.c,e.d)}function hhn(e){return new lt(e.c,e.d)}function F_(e,t){return oMn(e.c,e.b,t)}function De(e,t){return e!=null&&iue(e,t)}function Zse(e,t){return eyn(e.Kc(),t)!=-1}function Pq(e){return e.Ob()?e.Pb():null}function fhn(e){this.b=(Cn(),new tr(e))}function vye(e){this.a=e,Pr.call(this)}function Snt(){TO.call(this,null,null)}function _nt(){qq.call(this,null,null)}function Ant(){Ur.call(this,"INSTANCE",0)}function Lnt(){mxe(),this.a=new UA(gAe)}function Mnt(e){return If(e,0,e.length)}function dhn(e,t){return new Wnt(e.Kc(),t)}function wye(e,t){return e.a.Bc(t)!=null}function Dnt(e,t){$r(e),e.Gc(l(t,15))}function ghn(e,t,n){e.c.bd(t,l(n,136))}function phn(e,t,n){e.c.Ui(t,l(n,136))}function Int(e,t){e.c&&($4e(t),iot(t))}function bhn(e,t){e.q.setHours(t),XA(e,t)}function mhn(e,t){dw(t,e.a.a.a,e.a.a.b)}function vhn(e,t,n,r){Ts(e.a[t.g],n.g,r)}function eae(e,t,n){return e.a[t.g][n.g]}function whn(e,t){return e.e[t.c.p][t.p]}function yhn(e,t){return e.c[t.c.p][t.p]}function L1(e,t){return e.a[t.c.p][t.p]}function xhn(e,t){return e.j[t.p]=ITn(t)}function tae(e,t){return e.a.Bc(t)!=null}function khn(e,t){return ze(Ge(t.a))<=e}function Ehn(e,t){return ze(Ge(t.a))>=e}function Thn(e,t){return E6e(e.f,t.Pg())}function z8(e,t){return e.a*t.a+e.b*t.b}function Chn(e,t){return e.a0?t/(e*e):t*100}function Xhn(e,t){return e>0?t*t/e:t*t*100}function dy(e,t){return l(B1(e.a,t),34)}function Qhn(e,t){return Cb(),xn(e,t.e,t)}function Jhn(e,t,n){return tq(),n.Mg(e,t)}function Zhn(e){return tp(),e.e.a+e.f.a/2}function efn(e,t,n){return tp(),n.e.a-e*t}function tfn(e){return tp(),e.e.b+e.f.b/2}function nfn(e,t,n){return tp(),n.e.b-e*t}function crt(e){e.d=new srt(e),e.e=new Pr}function urt(){this.a=new Cw,this.b=new Cw}function lrt(e){this.c=e,this.a=1,this.b=1}function hrt(e){Mle(),SQe(this),this.Ff(e)}function rfn(e,t,n){ZH(),e.pf(t)&&n.Cd(e)}function ifn(e,t,n){return vt(t,k1t(e,n))}function dw(e,t,n){return e.a+=t,e.b+=n,e}function sfn(e,t,n){return e.a*=t,e.b*=n,e}function Fye(e,t){return e.a=t.a,e.b=t.b,e}function Hq(e){return e.a=-e.a,e.b=-e.b,e}function z_(e,t,n){return e.a-=t,e.b-=n,e}function frt(e){os.call(this),fA(this,e)}function drt(){Ur.call(this,"GROW_TREE",0)}function grt(){Ur.call(this,"POLYOMINO",0)}function dh(e,t,n){xl.call(this,e,t,n,2)}function afn(e,t,n){_A(du(e.a),t,Iot(n))}function prt(e,t){w_(),TO.call(this,e,t)}function Rye(e,t){Wp(),qq.call(this,e,t)}function brt(e,t){Wp(),Rye.call(this,e,t)}function mrt(e,t){Wp(),qq.call(this,e,t)}function ofn(e,t){return e.c.Fc(l(t,136))}function cfn(e,t,n){_A(Xl(e.a),t,Oot(n))}function vrt(e){this.c=e,Uu(e,0),Gu(e,0)}function oae(e,t){Jh(),cH.call(this,e,t)}function wrt(e,t){Jh(),oae.call(this,e,t)}function jye(e,t){Jh(),oae.call(this,e,t)}function $ye(e,t){Jh(),cH.call(this,e,t)}function yrt(e,t){Jh(),jye.call(this,e,t)}function xrt(e,t){Jh(),$ye.call(this,e,t)}function krt(e,t){Jh(),cH.call(this,e,t)}function ufn(e,t,n){return t.zl(e.e,e.c,n)}function lfn(e,t,n){return t.Al(e.e,e.c,n)}function zye(e,t,n){return VU(lN(e,t),n)}function cae(e,t){return yb(e.e,l(t,54))}function hfn(e){return e==null?null:BDn(e)}function ffn(e){return e==null?null:L9n(e)}function dfn(e){return e==null?null:xc(e)}function gfn(e){return e==null?null:xc(e)}function Bt(e){return V_(e==null||hy(e)),e}function Ge(e){return V_(e==null||fy(e)),e}function ei(e){return V_(e==null||Ia(e)),e}function Gg(e){e.o==null&&oTn(e)}function qye(e){if(!e)throw ue(new YI)}function pfn(e){if(!e)throw ue(new Rie)}function mr(e){if(!e)throw ue(new _c)}function gy(e){if(!e)throw ue(new pl)}function Ert(e){if(!e)throw ue(new Xh)}function Fk(){Fk=U,fF=new iJe,new sJe}function H5(){H5=U,Y6=new Ui("root")}function Hye(){sft.call(this),this.Bb|=Io}function bfn(e,t){this.d=e,Mr(this),this.b=t}function Vye(e,t){Poe.call(this,e),this.a=t}function Uye(e,t){Poe.call(this,e),this.a=t}function Gye(e,t,n){YH.call(this,e,t,n,null)}function Trt(e,t,n){YH.call(this,e,t,n,null)}function _O(e,t){this.c=e,Lk.call(this,e,t)}function q_(e,t){this.a=e,_O.call(this,e,t)}function Kye(e){this.q=new b.Date(Fm(e))}function Crt(e){return e>8?0:e+1}function Srt(e,t){G1||vt(e.a,t)}function mfn(e,t){return sO(),bE(t.d.i,e)}function vfn(e,t){return lx(),new nmt(t,e)}function wfn(e,t,n){return e.Ne(t,n)<=0?n:t}function yfn(e,t,n){return e.Ne(t,n)<=0?t:n}function xfn(e,t){return l(B1(e.b,t),143)}function kfn(e,t){return l(B1(e.c,t),233)}function uae(e){return l(jt(e.a,e.b),294)}function _rt(e){return new lt(e.c,e.d+e.a)}function Art(e){return nr(e),e?1231:1237}function Lrt(e){return Sh(),ont(l(e,203))}function py(){py=U,q_e=un((mh(),Cv))}function Efn(e,t){t.a?_En(e,t):tae(e.a,t.b)}function AO(e,t,n){++e.j,e.tj(),Noe(e,t,n)}function Mrt(e,t,n){++e.j,e.qj(t,e.Zi(t,n))}function Drt(e,t,n){var r;r=e.fd(t),r.Rb(n)}function Wye(e,t,n){return n=Nh(e,t,6,n),n}function Yye(e,t,n){return n=Nh(e,t,3,n),n}function Xye(e,t,n){return n=Nh(e,t,9,n),n}function vd(e,t){return UO(t,yEe),e.f=t,e}function Qye(e,t){return(t&Ii)%e.d.length}function Irt(e,t,n){return Mke(e.c,e.b,t,n)}function Ort(e,t){this.c=e,Lw.call(this,t)}function Nrt(e,t){this.a=e,vQe.call(this,t)}function LO(e,t){this.a=e,vQe.call(this,t)}function vs(e,t){Ui.call(this,e),this.a=t}function Jye(e,t){xwe.call(this,e),this.a=t}function lae(e,t){xwe.call(this,e),this.a=t}function Tfn(e){I8e.call(this,0,0),this.f=e}function Prt(e,t,n){return e.a+=If(t,0,n),e}function MO(e){return!e.a&&(e.a=new ge),e.a}function Zye(e,t){var n;return n=e.e,e.e=t,n}function e4e(e,t){var n;return n=t,!!e.Fe(n)}function Cfn(e,t){return Hn(),e==t?0:e?1:-1}function by(e,t){e.a.bd(e.b,t),++e.b,e.c=-1}function DO(e){e.b?DO(e.b):e.f.c.zc(e.e,e.d)}function Brt(e){Nl(e.e),e.d.b=e.d,e.d.a=e.d}function Sfn(e,t,n){Am(),Eie(e,t.Ve(e.a,n))}function t4e(e,t,n){return Q8(e,l(t,22),n)}function c0(e,t){return Vz(new Array(t),e)}function _fn(e){return Yr(ub(e,32))^Yr(e)}function hae(e){return String.fromCharCode(e)}function Afn(e){return e==null?null:e.message}function Lfn(e,t,n){return e.apply(t,n)}function Mfn(e,t){var n;n=e[lhe],n.call(e,t)}function Dfn(e,t){var n;n=e[lhe],n.call(e,t)}function Ifn(e,t){return sO(),!bE(t.d.i,e)}function n4e(e,t,n,r){sH.call(this,e,t,n,r)}function Frt(){Vq.call(this),this.a=new qa}function r4e(){this.n=new qa,this.o=new qa}function Rrt(){this.b=new qa,this.c=new bt}function jrt(){this.a=new bt,this.b=new bt}function $rt(){this.a=new bm,this.b=new BQe}function i4e(){this.b=new e2,this.a=new e2}function zrt(){this.b=new Ks,this.a=new Ks}function qrt(){this.b=new Pr,this.a=new Pr}function Hrt(){this.b=new dZe,this.a=new CS}function Vrt(){this.a=new Wre,this.b=new Aee}function Urt(){this.a=new bt,this.d=new bt}function Vq(){this.n=new A8,this.i=new $8}function Grt(e){this.a=(Mh(e,Yy),new Bu(e))}function Krt(e){this.a=(Mh(e,Yy),new Bu(e))}function Ofn(e){return e<100?null:new nb(e)}function Nfn(e,t){return e.n.a=(nr(t),t+10)}function Pfn(e,t){return e.n.a=(nr(t),t+10)}function Bfn(e,t){return t==e||jE(_U(t),e)}function Wrt(e,t){return ki(e.a,t,"")==null}function Ffn(e,t){var n;return n=t.qi(e.a),n}function Oi(e,t){return e.a+=t.a,e.b+=t.b,e}function ma(e,t){return e.a-=t.a,e.b-=t.b,e}function Rfn(e){return ay(e.j.c,0),e.a=-1,e}function s4e(e,t,n){return n=Nh(e,t,11,n),n}function jfn(e,t,n){n!=null&&wV(t,pue(e,n))}function $fn(e,t,n){n!=null&&yV(t,pue(e,n))}function V8(e,t,n,r){nt.call(this,e,t,n,r)}function a4e(e,t,n,r){nt.call(this,e,t,n,r)}function Yrt(e,t,n,r){a4e.call(this,e,t,n,r)}function Xrt(e,t,n,r){pH.call(this,e,t,n,r)}function fae(e,t,n,r){pH.call(this,e,t,n,r)}function o4e(e,t,n,r){pH.call(this,e,t,n,r)}function Qrt(e,t,n,r){fae.call(this,e,t,n,r)}function c4e(e,t,n,r){fae.call(this,e,t,n,r)}function Ln(e,t,n,r){o4e.call(this,e,t,n,r)}function Jrt(e,t,n,r){c4e.call(this,e,t,n,r)}function Zrt(e,t,n,r){a5e.call(this,e,t,n,r)}function my(e,t){tc.call(this,CL+e+av+t)}function u4e(e,t){return e.jk().wi().ri(e,t)}function l4e(e,t){return e.jk().wi().ti(e,t)}function eit(e,t){return nr(e),qe(e)===qe(t)}function vn(e,t){return nr(e),qe(e)===qe(t)}function zfn(e,t){return e.b.Bd(new ket(e,t))}function qfn(e,t){return e.b.Bd(new Eet(e,t))}function tit(e,t){return e.b.Bd(new Tet(e,t))}function Hfn(e,t){return e.e=l(e.d.Kb(t),159)}function h4e(e,t,n){return e.lastIndexOf(t,n)}function Vfn(e,t,n){return Yi(e[t.a],e[n.a])}function Ufn(e,t){return rt(t,(Nt(),TB),e)}function Gfn(e,t){return ru(t.a.d.p,e.a.d.p)}function Kfn(e,t){return ru(e.a.d.p,t.a.d.p)}function Wfn(e,t){return Yi(e.c-e.s,t.c-t.s)}function Yfn(e,t){return Yi(e.b.e.a,t.b.e.a)}function Xfn(e,t){return Yi(e.c.e.a,t.c.e.a)}function nit(e){return e.c?gc(e.c.a,e,0):-1}function U8(e){return e==Tv||e==Tg||e==Mu}function f4e(e,t){this.c=e,jae.call(this,e,t)}function rit(e,t,n){this.a=e,Nye.call(this,t,n)}function iit(e){this.c=e,Dq.call(this,EP,0)}function sit(e,t,n){this.c=t,this.b=n,this.a=e}function IO(e){jk(),this.d=e,this.a=new z5}function ait(e){wd(),this.a=(Cn(),new Ek(e))}function Qfn(e,t){Ug(e.f)?ZEn(e,t):Mxn(e,t)}function oit(e,t){ldn.call(this,e,e.length,t)}function Jfn(e,t){G1||t&&(e.d=t)}function cit(e,t){return De(t,15)&&Bbt(e.c,t)}function Zfn(e,t,n){return l(e.c,71).Wk(t,n)}function Uq(e,t,n){return l(e.c,71).Xk(t,n)}function e0n(e,t,n){return ufn(e,l(t,343),n)}function d4e(e,t,n){return lfn(e,l(t,343),n)}function t0n(e,t,n){return Lgt(e,l(t,343),n)}function uit(e,t,n){return Hxn(e,l(t,343),n)}function H_(e,t){return t==null?null:Oy(e.b,t)}function g4e(e){return fy(e)?(nr(e),e):e.ue()}function Gq(e){return!isNaN(e)&&!isFinite(e)}function dae(e){knt(this),Ch(this),Ka(this,e)}function Ol(e){Yse(this),M4e(this.c,0,e.Pc())}function Zh(e,t,n){this.a=e,this.b=t,this.c=n}function lit(e,t,n){this.a=e,this.b=t,this.c=n}function hit(e,t,n){this.d=e,this.b=n,this.a=t}function fit(e){this.a=e,Vg(),Zc(Date.now())}function dit(e){ph(e.a),L6e(e.c,e.b),e.b=null}function gae(){gae=U,p_e=new Et,_6t=new Gt}function git(){git=U,M_t=We(wa,Rn,1,0,5,1)}function pit(){pit=U,W_t=We(wa,Rn,1,0,5,1)}function p4e(){p4e=U,Y_t=We(wa,Rn,1,0,5,1)}function wd(){wd=U,new Twe((Cn(),Cn(),_o))}function n0n(e){return rE(),Gr((xlt(),M6t),e)}function r0n(e){return Fl(),Gr((hlt(),B6t),e)}function i0n(e){return ZV(),Gr((Xct(),q6t),e)}function s0n(e){return aV(),Gr((Qct(),H6t),e)}function a0n(e){return PU(),Gr((Xft(),V6t),e)}function o0n(e){return t1(),Gr((ult(),K6t),e)}function c0n(e){return Bl(),Gr((clt(),Y6t),e)}function u0n(e){return ol(),Gr((llt(),Q6t),e)}function l0n(e){return YU(),Gr((Gtt(),y7t),e)}function h0n(e){return Pw(),Gr((Elt(),k7t),e)}function f0n(e){return bx(),Gr((Clt(),T7t),e)}function d0n(e){return NA(),Gr((Tlt(),_7t),e)}function g0n(e){return Zz(),Gr((kct(),A7t),e)}function p0n(e){return oV(),Gr((Jct(),U7t),e)}function b0n(e){return lA(),Gr((flt(),m8t),e)}function m0n(e){return uo(),Gr((aht(),x8t),e)}function v0n(e){return wE(),Gr((_lt(),S8t),e)}function w0n(e){return Km(),Gr((Slt(),I8t),e)}function b4e(e,t){if(!e)throw ue(new Yn(t))}function Rk(e){if(!e)throw ue(new nc(Jke))}function pae(e,t){if(e!=t)throw ue(new Xh)}function bit(e,t,n){this.a=e,this.b=t,this.c=n}function m4e(e,t,n){this.a=e,this.b=t,this.c=n}function mit(e,t,n){this.a=e,this.b=t,this.c=n}function Kq(e,t,n){this.b=e,this.a=t,this.c=n}function v4e(e,t,n){this.b=e,this.c=t,this.a=n}function w4e(e,t,n){this.a=e,this.b=t,this.c=n}function Wq(e,t,n){this.e=t,this.b=e,this.d=n}function vit(e,t,n){this.b=e,this.a=t,this.c=n}function y0n(e,t,n){return Am(),e.a.Yd(t,n),t}function bae(e){var t;return t=new Ml,t.e=e,t}function y4e(e){var t;return t=new zQe,t.b=e,t}function OO(){OO=U,CK=new pZ,SK=new dj}function Yq(){Yq=U,K8t=new SZ,G8t=new bS}function u0(){u0=U,J8t=new iee,Z8t=new see}function x0n(e){return Ow(),Gr((Hut(),uxt),e)}function k0n(e){return vo(),Gr((Ktt(),q8t),e)}function E0n(e){return IV(),Gr((Llt(),U8t),e)}function T0n(e){return R1(),Gr((Alt(),nxt),e)}function C0n(e){return Ry(),Gr((oht(),ixt),e)}function S0n(e){return OU(),Gr((Pft(),lxt),e)}function _0n(e){return yx(),Gr((Iht(),hxt),e)}function A0n(e){return JH(),Gr((sut(),fxt),e)}function L0n(e){return dA(),Gr((zut(),dxt),e)}function M0n(e){return pV(),Gr((qut(),gxt),e)}function D0n(e){return l2(),Gr((cht(),pxt),e)}function I0n(e){return pN(),Gr((tut(),bxt),e)}function O0n(e){return zE(),Gr((Pht(),kxt),e)}function N0n(e){return Ho(),Gr((f0t(),Ext),e)}function P0n(e){return vE(),Gr((Uut(),Txt),e)}function B0n(e){return ep(),Gr((Gut(),Sxt),e)}function F0n(e){return zH(),Gr((eut(),_xt),e)}function R0n(e){return WN(),Gr((Nht(),xxt),e)}function j0n(e){return Vm(),Gr((Vut(),vxt),e)}function $0n(e){return yU(),Gr((Oht(),wxt),e)}function z0n(e){return cN(),Gr((nut(),yxt),e)}function q0n(e){return hf(),Gr((lht(),Axt),e)}function H0n(e){return p2(),Gr((Kft(),Jkt),e)}function V0n(e){return EA(),Gr((Kut(),Zkt),e)}function U0n(e){return By(),Gr((Mlt(),eEt),e)}function G0n(e){return OA(),Gr((uht(),tEt),e)}function K0n(e){return Nf(),Gr((d0t(),nEt),e)}function W0n(e){return Ed(),Gr((Dlt(),rEt),e)}function Y0n(e){return dN(),Gr((rut(),iEt),e)}function X0n(e){return qo(),Gr((Xut(),aEt),e)}function Q0n(e){return LV(),Gr((Wut(),oEt),e)}function J0n(e){return yA(),Gr((Yut(),cEt),e)}function Z0n(e){return SE(),Gr((Qut(),uEt),e)}function e1n(e){return gV(),Gr((Jut(),lEt),e)}function t1n(e){return OV(),Gr((Zut(),hEt),e)}function n1n(e){return Iw(),Gr((olt(),_Et),e)}function r1n(e){return oA(),Gr((iut(),IEt),e)}function i1n(e){return xd(),Gr((cut(),jEt),e)}function s1n(e){return D1(),Gr((uut(),zEt),e)}function a1n(e){return J0(),Gr((lut(),nTt),e)}function o1n(e){return Sw(),Gr((hut(),uTt),e)}function c1n(e){return wx(),Gr((Rlt(),lTt),e)}function u1n(e){return WA(),Gr((Wtt(),hTt),e)}function l1n(e){return xA(),Gr((elt(),fTt),e)}function h1n(e){return kA(),Gr((Flt(),PTt),e)}function f1n(e){return RH(),Gr((aut(),BTt),e)}function d1n(e){return kV(),Gr((out(),zTt),e)}function g1n(e){return bU(),Gr((hht(),HTt),e)}function p1n(e){return LN(),Gr((tlt(),UTt),e)}function b1n(e){return eV(),Gr((fut(),VTt),e)}function m1n(e){return uU(),Gr((Blt(),hCt),e)}function v1n(e){return AV(),Gr((nlt(),fCt),e)}function w1n(e){return WV(),Gr((rlt(),dCt),e)}function y1n(e){return sU(),Gr((ilt(),pCt),e)}function x1n(e){return qV(),Gr((slt(),vCt),e)}function k1n(e){return GH(),Gr((dut(),jCt),e)}function E1n(e){return dE(),Gr((Zct(),z8t),e)}function T1n(e){return Zn(),Gr((Bht(),B8t),e)}function C1n(e){return tV(),Gr((alt(),$Ct),e)}function S1n(e){return fce(),Gr((gut(),zCt),e)}function _1n(e){return VA(),Gr((fht(),HCt),e)}function A1n(e){return nq(),Gr((Mct(),UCt),e)}function L1n(e){return PN(),Gr((glt(),VCt),e)}function M1n(e){return rq(),Gr((Dct(),KCt),e)}function D1n(e){return rN(),Gr((put(),WCt),e)}function I1n(e){return XN(),Gr((dht(),YCt),e)}function O1n(e){return b_(),Gr((Ict(),hSt),e)}function N1n(e){return CN(),Gr((but(),fSt),e)}function P1n(e){return r1(),Gr((pht(),vSt),e)}function B1n(e){return g2(),Gr((Oft(),ySt),e)}function F1n(e){return og(),Gr((Fht(),xSt),e)}function R1n(e){return Ym(),Gr((Rht(),_St),e)}function j1n(e){return Js(),Gr((ght(),GSt),e)}function $1n(e){return F1(),Gr((plt(),KSt),e)}function z1n(e){return ip(),Gr((jlt(),WSt),e)}function q1n(e){return vU(),Gr((jht(),YSt),e)}function H1n(e){return rp(),Gr((dlt(),QSt),e)}function V1n(e){return Ih(),Gr(($lt(),ZSt),e)}function U1n(e){return qy(),Gr((Yft(),e_t),e)}function G1n(e){return t6(),Gr((bht(),t_t),e)}function K1n(e){return Ra(),Gr(($ht(),n_t),e)}function W1n(e){return Rl(),Gr((zht(),r_t),e)}function Y1n(e){return Ct(),Gr((mht(),i_t),e)}function X1n(e){return mh(),Gr((zlt(),u_t),e)}function Q1n(e){return Zl(),Gr((Wft(),l_t),e)}function J1n(e){return dx(),Gr((blt(),h_t),e)}function Z1n(e,t){return nr(e),e+(nr(t),t)}function edn(e){return mae(),Gr((mut(),f_t),e)}function tdn(e){return VV(),Gr((qlt(),d_t),e)}function ndn(e){return NV(),Gr((Hlt(),b_t),e)}function jk(){jk=U,$De=(Ct(),er),DW=ar}function mae(){mae=U,rPe=new Wit,iPe=new Ost}function rdn(e){return!e.e&&(e.e=new bt),e.e}function vae(e,t){this.c=e,this.a=t,this.b=t-e}function wit(e,t,n){this.a=e,this.b=t,this.c=n}function wae(e,t,n){this.a=e,this.b=t,this.c=n}function x4e(e,t,n){this.a=e,this.b=t,this.c=n}function k4e(e,t,n){this.a=e,this.b=t,this.c=n}function yit(e,t,n){this.a=e,this.b=t,this.c=n}function xit(e,t,n){this.a=e,this.b=t,this.c=n}function Xp(e,t,n){this.e=e,this.a=t,this.c=n}function kit(e,t,n){Jh(),$5e.call(this,e,t,n)}function yae(e,t,n){Jh(),E5e.call(this,e,t,n)}function E4e(e,t,n){Jh(),E5e.call(this,e,t,n)}function T4e(e,t,n){Jh(),E5e.call(this,e,t,n)}function Eit(e,t,n){Jh(),yae.call(this,e,t,n)}function C4e(e,t,n){Jh(),yae.call(this,e,t,n)}function Tit(e,t,n){Jh(),C4e.call(this,e,t,n)}function Cit(e,t,n){Jh(),E4e.call(this,e,t,n)}function Sit(e,t,n){Jh(),T4e.call(this,e,t,n)}function xae(e){sH.call(this,e.d,e.c,e.a,e.b)}function S4e(e){sH.call(this,e.d,e.c,e.a,e.b)}function _4e(e){this.d=e,Mr(this),this.b=ngn(e.d)}function idn(e){return HE(),Gr((Nft(),L_t),e)}function NO(e,t){return Xr(e),Xr(t),new IZe(e,t)}function G8(e,t){return Xr(e),Xr(t),new jit(e,t)}function sdn(e,t){return Xr(e),Xr(t),new $it(e,t)}function adn(e,t){return Xr(e),Xr(t),new zZe(e,t)}function kae(e){return mr(e.b!=0),af(e,e.a.a)}function odn(e){return mr(e.b!=0),af(e,e.c.b)}function cdn(e){return!e.c&&(e.c=new Xd),e.c}function $k(e){var t;return t=new bt,Goe(t,e),t}function udn(e){var t;return t=new Ks,Goe(t,e),t}function _it(e){var t;return t=new Lwe,sce(t,e),t}function PO(e){var t;return t=new os,sce(t,e),t}function l(e,t){return V_(e==null||iue(e,t)),e}function ldn(e,t,n){Sst.call(this,t,n),this.a=e}function Ait(e,t){this.c=e,this.b=t,this.a=!1}function Lit(){this.a=";,;",this.b="",this.c=""}function Mit(e,t,n){this.b=e,ztt.call(this,t,n)}function A4e(e,t,n){this.c=e,cq.call(this,t,n)}function L4e(e,t,n){Ik.call(this,e,t),this.b=n}function M4e(e,t,n){k9e(n,0,e,t,n.length,!1)}function tg(e,t,n,r,a){e.b=t,e.c=n,e.d=r,e.a=a}function D4e(e,t,n,r,a){e.d=t,e.c=n,e.a=r,e.b=a}function hdn(e,t){t&&(e.b=t,e.a=(fb(t),t.a))}function BO(e,t){if(!e)throw ue(new Yn(t))}function K8(e,t){if(!e)throw ue(new nc(t))}function I4e(e,t){if(!e)throw ue(new BJe(t))}function fdn(e,t){return eq(),ru(e.d.p,t.d.p)}function ddn(e,t){return tp(),Yi(e.e.b,t.e.b)}function gdn(e,t){return tp(),Yi(e.e.a,t.e.a)}function pdn(e,t){return ru(Uit(e.d),Uit(t.d))}function Xq(e,t){return t&&yH(e,t.d)?t:null}function bdn(e,t){return t==(Ct(),er)?e.c:e.d}function O4e(e){return mb(pgn(wc(e)?Mf(e):e))}function mdn(e){return new lt(e.c+e.b,e.d+e.a)}function Dit(e){return e!=null&&!Hce(e,$M,zM)}function vdn(e,t){return(u1t(e)<<4|u1t(t))&Zs}function Iit(e,t,n,r,a){e.c=t,e.d=n,e.b=r,e.a=a}function N4e(e){var t,n;t=e.b,n=e.c,e.b=n,e.c=t}function P4e(e){var t,n;n=e.d,t=e.a,e.d=t,e.a=n}function wdn(e,t){var n;return n=e.c,d7e(e,t),n}function B4e(e,t){return t<0?e.g=-1:e.g=t,e}function Qq(e,t){return _wn(e),e.a*=t,e.b*=t,e}function Oit(e,t,n){_ht.call(this,t,n),this.d=e}function FO(e,t,n){tye.call(this,e,t),this.c=n}function Jq(e,t,n){tye.call(this,e,t),this.c=n}function F4e(e){p4e(),m5.call(this),this.ci(e)}function Nit(){eE(),$gn.call(this,(ib(),Gf))}function Pit(e){return Di(),new ng(0,e)}function Bit(){Bit=U,spe=(Cn(),new Da(c0e))}function Zq(){Zq=U,new W8e((Gie(),y0e),(Uie(),w0e))}function Fit(){Fit=U,t_e=We(ro,dt,17,256,0,1)}function Rit(){this.b=ze(Ge(It((b0(),Z0e))))}function Eae(e){this.b=e,this.a=Mm(this.b.a).Od()}function jit(e,t){this.b=e,this.a=t,GS.call(this)}function $it(e,t){this.a=e,this.b=t,GS.call(this)}function zit(e,t,n){this.a=e,N5.call(this,t,n)}function qit(e,t,n){this.a=e,N5.call(this,t,n)}function zk(e,t,n){var r;r=new yy(n),e1(e,t,r)}function R4e(e,t,n){var r;return r=e[t],e[t]=n,r}function eH(e){var t;return t=e.slice(),joe(t,e)}function tH(e){var t;return t=e.n,e.a.b+t.d+t.a}function Hit(e){var t;return t=e.n,e.e.b+t.d+t.a}function j4e(e){var t;return t=e.n,e.e.a+t.b+t.c}function $4e(e){e.a.b=e.b,e.b.a=e.a,e.a=e.b=null}function ui(e,t){return Cs(e,t,e.c.b,e.c),!0}function ydn(e){return e.a?e.a:Qae(e)}function xdn(e){return tx(),cg(e)==ds(Eb(e))}function kdn(e){return tx(),Eb(e)==ds(cg(e))}function gw(e,t){return RA(e,new Ik(t.a,t.b))}function Edn(e,t){return kH(),fue(e,t),new hat(e,t)}function Tdn(e,t){return e.c=t)throw ue(new Bwe)}function vy(e,t){return ON(e,(nr(t),new xo(t)))}function Y8(e,t){return ON(e,(nr(t),new lh(t)))}function Ast(e,t,n){return XIn(e,l(t,12),l(n,12))}function Lst(e){return kl(),l(e,12).g.c.length!=0}function Mst(e){return kl(),l(e,12).e.c.length!=0}function cgn(e,t){return lx(),Yi(t.a.o.a,e.a.o.a)}function ugn(e,t){t.Bb&eu&&!e.a.o&&(e.a.o=t)}function lgn(e,t){t.Ug("General 'Rotator",1),TDn(e)}function hgn(e,t,n){t.qf(n,ze(Ge(cr(e.b,n)))*e.a)}function Dst(e,t,n){return h6(),gE(e,t)&&gE(e,n)}function W_(e){return Rl(),!e.Hc(vp)&&!e.Hc(Yb)}function fgn(e){return e.e?_6e(e.e):null}function Y_(e){return wc(e)?""+e:Pbt(e)}function s5e(e){var t;for(t=e;t.f;)t=t.f;return t}function dgn(e,t,n){return Ts(t,0,U4e(t[0],n[0])),t}function Qp(e,t,n,r){var a;a=e.i,a.i=t,a.a=n,a.b=r}function nt(e,t,n,r){Ys.call(this,e,t,n),this.b=r}function _a(e,t,n,r,a){Foe.call(this,e,t,n,r,a,-1)}function X_(e,t,n,r,a){sN.call(this,e,t,n,r,a,-1)}function pH(e,t,n,r){FO.call(this,e,t,n),this.b=r}function Ist(e){Ltt.call(this,e,!1),this.a=!1}function Ost(){ctt.call(this,"LOOKAHEAD_LAYOUT",1)}function Nst(e){this.b=e,q8.call(this,e),jnt(this)}function Pst(e){this.b=e,CO.call(this,e),$nt(this)}function wy(e,t,n){this.a=e,V8.call(this,t,n,5,6)}function a5e(e,t,n,r){this.b=e,Ys.call(this,t,n,r)}function Bst(e,t){this.b=e,qg.call(this,e.b),this.a=t}function Fst(e){this.a=ydt(e.a),this.b=new Ol(e.b)}function o5e(e,t){ww(),Vun.call(this,e,RV(new Il(t)))}function bH(e,t){return Di(),new k5e(e,t,0)}function Bae(e,t){return Di(),new k5e(6,e,t)}function Za(e,t){for(nr(t);e.Ob();)t.Cd(e.Pb())}function Hu(e,t){return Ia(t)?soe(e,t):!!zo(e.f,t)}function Fae(e,t){return t.Vh()?yb(e.b,l(t,54)):t}function ggn(e,t){return vn(e.substr(0,t.length),t)}function rg(e){return new hr(new Aye(e.a.length,e.a))}function mH(e){return new lt(e.c+e.b/2,e.d+e.a/2)}function pgn(e){return qu(~e.l&eh,~e.m&eh,~e.h&hp)}function Rae(e){return typeof e===wP||typeof e===Ole}function Nl(e){e.f=new rnt(e),e.i=new int(e),++e.g}function Rst(e){if(!e)throw ue(new _c);return e.d}function X8(e){var t;return t=wA(e),mr(t!=null),t}function bgn(e){var t;return t=I4n(e),mr(t!=null),t}function Hk(e,t){var n;return n=e.a.gc(),k6e(t,n),n-t}function na(e,t){var n;return n=e.a.zc(t,e),n==null}function jO(e,t){return e.a.zc(t,(Hn(),Pb))==null}function c5e(e){return new bn(null,xgn(e,e.length))}function u5e(e,t,n){return svt(e,l(t,42),l(n,176))}function Q8(e,t,n){return d0(e.a,t),R4e(e.b,t.g,n)}function mgn(e,t,n){qk(n,e.a.c.length),rf(e.a,n,t)}function He(e,t,n,r){B0t(t,n,e.length),vgn(e,t,n,r)}function vgn(e,t,n,r){var a;for(a=t;a0?b.Math.log(e/t):-100}function $st(e,t){return iu(e,t)<0?-1:iu(e,t)>0?1:0}function $O(e,t){Dnt(e,De(t,160)?t:l(t,2036).Rl())}function d5e(e,t){if(e==null)throw ue(new D8(t))}function xgn(e,t){return Ewn(t,e.length),new Kit(e,t)}function g5e(e,t){return t?Ka(e,t):!1}function kgn(){return $z(),he(le(a6t,1),it,549,0,[E0e])}function J_(e){return e.e==0?e:new Im(-e.e,e.d,e.a)}function Egn(e,t){return Yi(e.c.c+e.c.b,t.c.c+t.c.b)}function zO(e,t){Cs(e.d,t,e.b.b,e.b),++e.a,e.c=null}function zst(e,t){return e.c?zst(e.c,t):vt(e.b,t),e}function Tgn(e,t,n){var r;return r=_y(e,t),xoe(e,t,n),r}function qst(e,t,n){var r;for(r=0;r=e.g}function Ts(e,t,n){return pfn(n==null||lAn(e,n)),e[t]=n}function w5e(e,t){return Xn(t,e.length+1),e.substr(t)}function Wae(e,t){for(nr(t);e.c=e?new b3e:Kwn(e-1)}function eo(e){return!e.a&&e.c?e.c.b:e.a}function T5e(e){return De(e,616)?e:new oot(e)}function fb(e){e.c?fb(e.c):(xb(e),e.d=!0)}function tA(e){e.c?e.c.$e():(e.d=!0,hCn(e))}function cat(e){e.b=!1,e.c=!1,e.d=!1,e.a=!1}function uat(e){var t,n;return t=e.c.i.c,n=e.d.i.c,t==n}function Hgn(e,t){var n;n=e.Ih(t),n>=0?e.ki(n):d9e(e,t)}function lat(e,t){e.c<0||e.b.b0;)e=e<<1|(e<0?1:0);return e}function vat(e,t){var n;return n=new yu(e),$n(t.c,n),n}function wat(e,t){e.u.Hc((Rl(),vp))&&Wkn(e,t),fvn(e,t)}function Jc(e,t){return qe(e)===qe(t)||e!=null&&Pi(e,t)}function Qo(e,t){return Aae(e.a,t)?e.b[l(t,22).g]:null}function npn(){return Zz(),he(le(U_e,1),it,489,0,[G0e])}function rpn(){return nq(),he(le(wOe,1),it,490,0,[bge])}function ipn(){return rq(),he(le(GCt,1),it,558,0,[mge])}function spn(){return b_(),he(le($Oe,1),it,539,0,[qB])}function EH(e){return!e.n&&(e.n=new nt(ec,e,1,7)),e.n}function Xae(e){return!e.c&&(e.c=new nt(Hl,e,9,9)),e.c}function A5e(e){return!e.c&&(e.c=new Ln(_r,e,5,8)),e.c}function apn(e){return!e.b&&(e.b=new Ln(_r,e,4,7)),e.b}function qO(e){return e.j.c.length=0,M5e(e.c),Rfn(e.a),e}function Wk(e){return e.e==ET&&hn(e,e6n(e.g,e.b)),e.e}function HO(e){return e.f==ET&&Dn(e,U7n(e.g,e.b)),e.f}function Ei(e,t,n,r){return qft(e,t,n,!1),jV(e,r),e}function yat(e,t){this.b=e,jae.call(this,e,t),jnt(this)}function xat(e,t){this.b=e,f4e.call(this,e,t),$nt(this)}function nA(e){this.d=e,this.a=this.d.b,this.b=this.d.c}function L5e(e,t){this.b=e,this.c=t,this.a=new P8(this.b)}function co(e,t){return Xn(t,e.length),e.charCodeAt(t)}function opn(e,t){b8e(e,ze(np(t,"x")),ze(np(t,"y")))}function cpn(e,t){b8e(e,ze(np(t,"x")),ze(np(t,"y")))}function Fi(e,t){return xb(e),new bn(e,new $6e(t,e.a))}function fc(e,t){return xb(e),new bn(e,new C6e(t,e.a))}function xy(e,t){return xb(e),new Vye(e,new Mut(t,e.a))}function TH(e,t){return xb(e),new Uye(e,new Dut(t,e.a))}function upn(e,t){return new Uat(l(Xr(e),50),l(Xr(t),50))}function lpn(e,t){return Yi(e.d.c+e.d.b/2,t.d.c+t.d.b/2)}function kat(e,t,n){n.a?Gu(e,t.b-e.f/2):Uu(e,t.a-e.g/2)}function hpn(e,t){return Yi(e.g.c+e.g.b/2,t.g.c+t.g.b/2)}function fpn(e,t){return w3e(),Yi((nr(e),e),(nr(t),t))}function dpn(e){return e!=null&&nO(EY,e.toLowerCase())}function M5e(e){var t;for(t=e.Kc();t.Ob();)t.Pb(),t.Qb()}function V5(e){var t;return t=e.b,!t&&(e.b=t=new mie(e)),t}function Qae(e){var t;return t=Qwn(e),t||null}function Eat(e,t){var n,r;return n=e/t,r=ua(n),n>r&&++r,r}function gpn(e,t,n){var r;r=l(e.d.Kb(n),159),r&&r.Nb(t)}function ppn(e,t,n){mLn(e.a,n),W3n(n),REn(e.b,n),RLn(t,n)}function CH(e,t,n,r){this.a=e,this.c=t,this.b=n,this.d=r}function D5e(e,t,n,r){this.c=e,this.b=t,this.a=n,this.d=r}function Tat(e,t,n,r){this.c=e,this.b=t,this.d=n,this.a=r}function ef(e,t,n,r){this.c=e,this.d=t,this.b=n,this.a=r}function Cat(e,t,n,r){this.a=e,this.d=t,this.c=n,this.b=r}function Jae(e,t,n,r){this.a=e,this.e=t,this.d=n,this.c=r}function Sat(e,t,n,r){this.a=e,this.c=t,this.d=n,this.b=r}function Zae(e,t,n){this.a=iEe,this.d=e,this.b=t,this.c=n}function Z8(e,t,n,r){Ur.call(this,e,t),this.a=n,this.b=r}function _at(e,t){this.d=(nr(e),e),this.a=16449,this.c=t}function Aat(e){this.a=new bt,this.e=We(Vr,dt,53,e,0,2)}function bpn(e){e.Ug("No crossing minimization",1),e.Vg()}function Lat(){Ac.call(this,"There is no more element.")}function Mat(e,t,n,r){this.a=e,this.b=t,this.c=n,this.d=r}function Dat(e,t,n,r){this.a=e,this.b=t,this.c=n,this.d=r}function Om(e,t,n,r){this.e=e,this.a=t,this.c=n,this.d=r}function Iat(e,t,n,r){this.a=e,this.c=t,this.d=n,this.b=r}function Oat(e,t,n,r){Jh(),Iut.call(this,t,n,r),this.a=e}function Nat(e,t,n,r){Jh(),Iut.call(this,t,n,r),this.a=e}function eoe(e,t,n){var r,a;return r=Vke(e),a=t.ti(n,r),a}function Kg(e){var t,n;return n=(t=new Qv,t),sE(n,e),n}function toe(e){var t,n;return n=(t=new Qv,t),Kxe(n,e),n}function mpn(e,t){var n;return n=cr(e.f,t),S7e(t,n),null}function Pat(e){return!e.b&&(e.b=new nt(js,e,12,3)),e.b}function Bat(e){return V_(e==null||Rae(e)&&e.Tm!==xe),e}function SH(e){return e.n&&(e.e!==Fwt&&e.je(),e.j=null),e}function Yk(e){if(Ql(e.d),e.d.d!=e.c)throw ue(new Xh)}function I5e(e){return mr(e.b0&&ggt(this)}function Fat(e,t){this.a=e,bfn.call(this,e,l(e.d,15).fd(t))}function vpn(e,t){return Yi(wl(e)*gh(e),wl(t)*gh(t))}function wpn(e,t){return Yi(wl(e)*gh(e),wl(t)*gh(t))}function ypn(e){return qw(e)&&Rt(Bt(at(e,(Nt(),gv))))}function xpn(e,t){return xn(e,l(Q(t,(Nt(),HT)),17),t)}function kpn(e,t){return l(Q(e,(ft(),Wx)),15).Fc(t),t}function O5e(e,t){return e.b=t.b,e.c=t.c,e.d=t.d,e.a=t.a,e}function Rat(e,t,n,r){this.b=e,this.c=r,Dq.call(this,t,n)}function Epn(e,t,n){e.i=0,e.e=0,t!=n&&x0t(e,t,n)}function Tpn(e,t,n){e.i=0,e.e=0,t!=n&&k0t(e,t,n)}function Cpn(e,t,n){return p_(),J4n(l(cr(e.e,t),529),n)}function ex(e){var t;return t=e.f,t||(e.f=new Lk(e,e.c))}function jat(e,t){return e6(e.j,t.s,t.c)+e6(t.e,e.s,e.c)}function $at(e,t){e.e&&!e.e.a&&(CQe(e.e,t),$at(e.e,t))}function zat(e,t){e.d&&!e.d.a&&(CQe(e.d,t),zat(e.d,t))}function Spn(e,t){return-Yi(wl(e)*gh(e),wl(t)*gh(t))}function _pn(e){return l(e.ld(),149).Pg()+":"+xc(e.md())}function qat(){Nue(this,new fz),this.wb=(lb(),Vn),Sk()}function Hat(e){this.b=new bt,ra(this.b,this.b),this.a=e}function N5e(e,t){new os,this.a=new bl,this.b=e,this.c=t}function Ew(){Ew=U,d_e=new Ke,D0e=new Ke,g_e=new Ft}function Cn(){Cn=U,_o=new je,mg=new Se,hK=new Ce}function P5e(){P5e=U,j6t=new wo,z6t=new X4e,$6t=new _s}function tx(){tx=U,wK=new bt,X0e=new Pr,Y0e=new bt}function _H(e,t){if(e==null)throw ue(new D8(t));return e}function AH(e){return!e.a&&(e.a=new nt(Ai,e,10,11)),e.a}function qi(e){return!e.q&&(e.q=new nt(Uf,e,11,10)),e.q}function tt(e){return!e.s&&(e.s=new nt(dl,e,21,17)),e.s}function Apn(e){return Xr(e),Mdt(new hr(dr(e.a.Kc(),new j)))}function Lpn(e,t){return bh(e),bh(t),PJe(l(e,22),l(t,22))}function Nm(e,t,n){var r,a;r=g4e(n),a=new vk(r),e1(e,t,a)}function roe(e,t,n,r,a,o){sN.call(this,e,t,n,r,a,o?-2:-1)}function Vat(e,t,n,r){tye.call(this,t,n),this.b=e,this.a=r}function Uat(e,t){Xcn.call(this,new Pae(e)),this.a=e,this.b=t}function B5e(e){this.b=e,this.c=e,e.e=null,e.c=null,this.a=1}function Mpn(e){u0();var t;t=l(e.g,10),t.n.a=e.d.c+t.d.b}function Xk(){Xk=U;var e,t;t=!F5n(),e=new se,S0e=t?new ne:e}function ioe(e){return Cn(),De(e,59)?new ese(e):new jq(e)}function LH(e){return De(e,16)?new U_(l(e,16)):udn(e.Kc())}function Dpn(e){return new qnt(e,e.e.Rd().gc()*e.c.Rd().gc())}function Ipn(e){return new Hnt(e,e.e.Rd().gc()*e.c.Rd().gc())}function F5e(e){return e&&e.hashCode?e.hashCode():fw(e)}function soe(e,t){return t==null?!!zo(e.f,null):Wdn(e.i,t)}function Opn(e,t){var n;return n=wye(e.a,t),n&&(t.d=null),n}function Gat(e,t,n){return e.f?e.f.ef(t,n):!1}function VO(e,t,n,r){Ts(e.c[t.g],n.g,r),Ts(e.c[n.g],t.g,r)}function aoe(e,t,n,r){Ts(e.c[t.g],t.g,n),Ts(e.b[t.g],t.g,r)}function Npn(e,t,n){return ze(Ge(n.a))<=e&&ze(Ge(n.b))>=t}function Kat(e,t){this.g=e,this.d=he(le(wg,1),m2,10,0,[t])}function Wat(e){this.c=e,this.b=new Kp(l(Xr(new tl),50))}function Yat(e){this.c=e,this.b=new Kp(l(Xr(new l5),50))}function Xat(e){this.b=e,this.a=new Kp(l(Xr(new Bi),50))}function Qat(){this.b=new Ks,this.d=new os,this.e=new Fwe}function R5e(){this.c=new qa,this.d=new qa,this.e=new qa}function Tw(){this.a=new bl,this.b=(Mh(3,Yy),new Bu(3))}function Jp(e,t){this.e=e,this.a=wa,this.b=Qbt(t),this.c=t}function MH(e){this.c=e.c,this.d=e.d,this.b=e.b,this.a=e.a}function Jat(e,t,n,r,a,o){this.a=e,Joe.call(this,t,n,r,a,o)}function Zat(e,t,n,r,a,o){this.a=e,Joe.call(this,t,n,r,a,o)}function db(e,t,n,r,a,o,f){return new Eoe(e.e,t,n,r,a,o,f)}function Ppn(e,t,n){return n>=0&&vn(e.substr(n,t.length),t)}function eot(e,t){return De(t,149)&&vn(e.b,l(t,149).Pg())}function Bpn(e,t){return e.a?t.Gh().Kc():l(t.Gh(),71).Ii()}function tot(e,t){var n;return n=e.b.Qc(t),Yct(n,e.b.gc()),n}function UO(e,t){if(e==null)throw ue(new D8(t));return e}function dc(e){return e.u||(Yl(e),e.u=new Nrt(e,e)),e.u}function ooe(e){this.a=(Cn(),De(e,59)?new ese(e):new jq(e))}function sl(e){var t;return t=l(Kn(e,16),29),t||e.ii()}function DH(e,t){var n;return n=_m(e.Rm),t==null?n:n+": "+t}function tf(e,t,n){return Ga(t,n,e.length),e.substr(t,n-t)}function not(e,t){Vq.call(this),Y6e(this),this.a=e,this.c=t}function Fpn(e){e&&DH(e,e.ie())}function Rpn(e){Hz(),b.setTimeout(function(){throw e},0)}function jpn(){return ZV(),he(le(k_e,1),it,436,0,[j0e,x_e])}function $pn(){return aV(),he(le(T_e,1),it,435,0,[E_e,$0e])}function zpn(){return oV(),he(le(J_e,1),it,432,0,[Q0e,yK])}function qpn(){return dE(),he(le($8t,1),it,517,0,[dB,h1e])}function Hpn(){return zH(),he(le(PLe,1),it,429,0,[z1e,NLe])}function Vpn(){return pN(),he(le(wLe,1),it,428,0,[XK,vLe])}function Upn(){return JH(),he(le(hLe,1),it,431,0,[lLe,S1e])}function Gpn(){return dN(),he(le(_De,1),it,430,0,[kde,Ede])}function Kpn(){return oA(),he(le(DEt,1),it,531,0,[uM,cM])}function Wpn(){return kV(),he(le(EIe,1),it,501,0,[$W,X6])}function Ypn(){return xd(),he(le(REt,1),it,523,0,[w3,T2])}function Xpn(){return D1(),he(le($Et,1),it,522,0,[wv,Y1])}function Qpn(){return J0(),he(le(tTt,1),it,528,0,[E4,qb])}function Jpn(){return cN(),he(le(kLe,1),it,488,0,[xLe,JK])}function Zpn(){return GH(),he(le(fOe,1),it,491,0,[dge,hOe])}function e2n(){return fce(),he(le(vOe,1),it,492,0,[bOe,mOe])}function t2n(){return RH(),he(le(kIe,1),it,433,0,[Ude,xIe])}function n2n(){return eV(),he(le(CIe,1),it,434,0,[TIe,Qde])}function r2n(){return Sw(),he(le(cTt,1),it,465,0,[Hb,K6])}function i2n(){return rN(),he(le(yOe,1),it,438,0,[vge,QW])}function s2n(){return CN(),he(le(qOe,1),it,437,0,[ZW,zOe])}function a2n(){return mae(),he(le(gY,1),it,347,0,[rPe,iPe])}function IH(e,t,n,r){return n>=0?e.Uh(t,n,r):e.Ch(null,n,r)}function GO(e){return e.b.b==0?e.a.sf():kae(e.b)}function o2n(e){if(e.p!=5)throw ue(new pl);return Yr(e.f)}function c2n(e){if(e.p!=5)throw ue(new pl);return Yr(e.k)}function j5e(e){return qe(e.a)===qe((lce(),npe))&&aMn(e),e.a}function u2n(e,t){e.b=t,e.c>0&&e.b>0&&(e.g=aH(e.c,e.b,e.a))}function l2n(e,t){e.c=t,e.c>0&&e.b>0&&(e.g=aH(e.c,e.b,e.a))}function rot(e,t){ce(this,new lt(e.a,e.b)),ve(this,PO(t))}function Cw(){Qcn.call(this,new N8(Ay(12))),Tye(!0),this.a=2}function coe(e,t,n){Di(),Xv.call(this,e),this.b=t,this.a=n}function $5e(e,t,n){Jh(),Nz.call(this,t),this.a=e,this.b=n}function iot(e){var t;t=e.c.d.b,e.b=t,e.a=e.c.d,t.a=e.c.d.b=e}function h2n(e){return e.b==0?null:(mr(e.b!=0),af(e,e.a.a))}function xu(e,t){return t==null?hc(zo(e.f,null)):y_(e.i,t)}function sot(e,t,n,r,a){return new Bue(e,(rE(),P0e),t,n,r,a)}function OH(e,t){return Gct(t),Pwn(e,We(Vr,di,28,t,15,1),t)}function NH(e,t){return _H(e,"set1"),_H(t,"set2"),new GZe(e,t)}function f2n(e,t){var n=C0e[e.charCodeAt(0)];return n??e}function aot(e,t){var n,r;return n=t,r=new xt,Ovt(e,n,r),r.d}function uoe(e,t,n,r){var a;a=new Frt,t.a[n.g]=a,Q8(e.b,r,a)}function d2n(e,t){var n;return n=Iwn(e.f,t),Oi(Hq(n),e.f.d)}function KO(e){var t;Hwn(e.a),dnt(e.a),t=new e_(e.a),S8e(t)}function g2n(e,t){zbt(e,!0),Vu(e.e.Rf(),new v4e(e,!0,t))}function p2n(e,t){return tx(),e==ds(cg(t))||e==ds(Eb(t))}function b2n(e,t){return tp(),l(Q(t,(Hc(),$d)),17).a==e}function ua(e){return Math.max(Math.min(e,Ii),-2147483648)|0}function oot(e){this.a=l(Xr(e),277),this.b=(Cn(),new Dye(e))}function cot(e,t,n){this.i=new bt,this.b=e,this.g=t,this.a=n}function z5e(e,t,n){this.a=new bt,this.e=e,this.f=t,this.c=n}function PH(e,t,n){this.c=new bt,this.e=e,this.f=t,this.b=n}function uot(e){Vq.call(this),Y6e(this),this.a=e,this.c=!0}function m2n(e){function t(){}return t.prototype=e||{},new t}function v2n(e){if(e.Ae())return null;var t=e.n;return sK[t]}function WO(e){return e.Db>>16!=3?null:l(e.Cb,27)}function M1(e){return e.Db>>16!=9?null:l(e.Cb,27)}function lot(e){return e.Db>>16!=6?null:l(e.Cb,74)}function Sw(){Sw=U,Hb=new H3e(Mx,0),K6=new H3e(Dx,1)}function xd(){xd=U,w3=new $3e(Dx,0),T2=new $3e(Mx,1)}function D1(){D1=U,wv=new z3e(whe,0),Y1=new z3e("UP",1)}function hot(){hot=U,o6t=Kr(($z(),he(le(a6t,1),it,549,0,[E0e])))}function fot(e){var t;return t=new Kz(Ay(e.length)),j7e(t,e),t}function dot(e,t){return e.b+=t.b,e.c+=t.c,e.d+=t.d,e.a+=t.a,e}function w2n(e,t){return Zft(e,t)?(Yht(e),!0):!1}function Wg(e,t){if(t==null)throw ue(new S8);return j5n(e,t)}function YO(e,t){var n;n=e.q.getHours(),e.q.setDate(t),XA(e,n)}function q5e(e,t,n){var r;r=e.Ih(t),r>=0?e.bi(r,n):$9e(e,t,n)}function got(e,t){var n;return n=e.Ih(t),n>=0?e.Wh(n):que(e,t)}function pot(e,t){var n;for(Xr(t),n=e.a;n;n=n.c)t.Yd(n.g,n.i)}function loe(e,t,n){var r;r=w0t(e,t,n),e.b=new TV(r.c.length)}function U5(e,t,n){BH(),e&&ki(Zge,e,t),e&&ki(lF,e,n)}function y2n(e,t){return Yq(),Hn(),l(t.a,17).a0}function H5e(e){var t;return t=e.d,t=e.bj(e.f),qr(e,t),t.Ob()}function bot(e,t){var n;return n=new K4e(t),zgt(n,e),new Ol(n)}function E2n(e){if(e.p!=0)throw ue(new pl);return I_(e.f,0)}function T2n(e){if(e.p!=0)throw ue(new pl);return I_(e.k,0)}function mot(e){return e.Db>>16!=7?null:l(e.Cb,241)}function Qk(e){return e.Db>>16!=6?null:l(e.Cb,241)}function vot(e){return e.Db>>16!=7?null:l(e.Cb,167)}function ds(e){return e.Db>>16!=11?null:l(e.Cb,27)}function ky(e){return e.Db>>16!=17?null:l(e.Cb,29)}function wot(e){return e.Db>>16!=3?null:l(e.Cb,155)}function V5e(e){var t;return xb(e),t=new Ks,Fi(e,new k5(t))}function yot(e,t){var n=e.a=e.a||[];return n[t]||(n[t]=e.ve(t))}function C2n(e,t){var n;n=e.q.getHours(),e.q.setMonth(t),XA(e,n)}function xot(e,t){Fq(this),this.f=t,this.g=e,SH(this),this.je()}function kot(e,t){this.a=e,this.c=Ja(this.a),this.b=new MH(t)}function Eot(e,t,n){this.a=t,this.c=e,this.b=(Xr(n),new Ol(n))}function Tot(e,t,n){this.a=t,this.c=e,this.b=(Xr(n),new Ol(n))}function Cot(e){this.a=e,this.b=We(AEt,dt,2043,e.e.length,0,2)}function Sot(){this.a=new bd,this.e=new Ks,this.g=0,this.i=0}function BH(){BH=U,Zge=new Pr,lF=new Pr,wln(C6t,new LS)}function _ot(){_ot=U,fEt=yl(new Xs,(uo(),mc),(vo(),gB))}function U5e(){U5e=U,dEt=yl(new Xs,(uo(),mc),(vo(),gB))}function Aot(){Aot=U,pEt=yl(new Xs,(uo(),mc),(vo(),gB))}function Lot(){Lot=U,OEt=fi(new Xs,(uo(),mc),(vo(),zL))}function Sh(){Sh=U,BEt=fi(new Xs,(uo(),mc),(vo(),zL))}function Mot(){Mot=U,FEt=fi(new Xs,(uo(),mc),(vo(),zL))}function foe(){foe=U,qEt=fi(new Xs,(uo(),mc),(vo(),zL))}function rA(e,t,n,r,a,o){return new Zg(e.e,t,e.Lj(),n,r,a,o)}function rc(e,t,n){return t==null?ju(e.f,null,n):Bw(e.i,t,n)}function po(e,t){e.c&&al(e.c.g,e),e.c=t,e.c&&vt(e.c.g,e)}function Va(e,t){e.c&&al(e.c.a,e),e.c=t,e.c&&vt(e.c.a,e)}function Mc(e,t){e.i&&al(e.i.j,e),e.i=t,e.i&&vt(e.i.j,e)}function Fa(e,t){e.d&&al(e.d.e,e),e.d=t,e.d&&vt(e.d.e,e)}function doe(e,t){e.a&&al(e.a.k,e),e.a=t,e.a&&vt(e.a.k,e)}function goe(e,t){e.b&&al(e.b.f,e),e.b=t,e.b&&vt(e.b.f,e)}function Dot(e,t){Fgn(e,e.b,e.c),l(e.b.b,68),t&&l(t.b,68).b}function S2n(e,t){return Yi(l(e.c,65).c.e.b,l(t.c,65).c.e.b)}function _2n(e,t){return Yi(l(e.c,65).c.e.a,l(t.c,65).c.e.a)}function A2n(e){return Mce(),Hn(),l(e.a,86).d.e!=0}function FH(e,t){De(e.Cb,184)&&(l(e.Cb,184).tb=null),Fu(e,t)}function poe(e,t){De(e.Cb,90)&&zy(Yl(l(e.Cb,90)),4),Fu(e,t)}function L2n(e,t){m8e(e,t),De(e.Cb,90)&&zy(Yl(l(e.Cb,90)),2)}function M2n(e,t){var n,r;n=t.c,r=n!=null,r&&J8(e,new yy(t.c))}function Iot(e){var t,n;return n=(Sk(),t=new Qv,t),sE(n,e),n}function Oot(e){var t,n;return n=(Sk(),t=new Qv,t),sE(n,e),n}function Not(e){for(var t;;)if(t=e.Pb(),!e.Ob())return t}function D2n(e,t,n){return vt(e.a,(kH(),fue(t,n),new iw(t,n))),e}function ku(e,t){return Fo(),Voe(t)?new nH(t,e):new yO(t,e)}function XO(e){return Cd(),iu(e,0)>=0?kb(e):J_(kb(r2(e)))}function I2n(e){var t;return t=l(eH(e.b),9),new Zh(e.a,t,e.c)}function Pot(e,t){var n;return n=l(Oy(ex(e.a),t),16),n?n.gc():0}function Bot(e,t,n){var r;o1t(t,n,e.c.length),r=n-t,d3e(e.c,t,r)}function Zp(e,t,n){o1t(t,n,e.gc()),this.c=e,this.a=t,this.b=n-t}function nx(e){this.c=new os,this.b=e.b,this.d=e.c,this.a=e.a}function boe(e){this.a=b.Math.cos(e),this.b=b.Math.sin(e)}function Pm(e,t,n,r){this.c=e,this.d=r,doe(this,t),goe(this,n)}function G5e(e,t){Ycn.call(this,new N8(Ay(e))),Mh(t,Dwt),this.a=t}function Fot(e,t,n){return new Bue(e,(rE(),N0e),null,!1,t,n)}function Rot(e,t,n){return new Bue(e,(rE(),B0e),t,n,null,!1)}function O2n(){return Fl(),he(le(oc,1),it,108,0,[y_e,Ec,i4])}function N2n(){return ol(),he(le(X6t,1),it,472,0,[a1,Fb,w0])}function P2n(){return Bl(),he(le(W6t,1),it,471,0,[Fd,Bb,v0])}function B2n(){return t1(),he(le(s4,1),it,237,0,[Gc,$u,Kc])}function F2n(){return lA(),he(le(dAe,1),it,391,0,[t1e,e1e,n1e])}function R2n(){return Ow(),he(le(m1e,1),it,372,0,[o3,Rb,a3])}function j2n(){return dA(),he(le(dLe,1),it,322,0,[HL,mB,fLe])}function $2n(){return pV(),he(le(pLe,1),it,351,0,[gLe,YK,_1e])}function z2n(){return Vm(),he(le(mxt,1),it,460,0,[M1e,FT,P6])}function q2n(){return vE(),he(le($1e,1),it,299,0,[R1e,j1e,vB])}function H2n(){return ep(),he(le(Cxt,1),it,311,0,[wB,F6,Ux])}function V2n(){return EA(),he(le(mDe,1),it,390,0,[pde,bDe,SW])}function U2n(){return qo(),he(le(sEt,1),it,463,0,[sM,$l,zu])}function G2n(){return LV(),he(le(MDe,1),it,387,0,[ADe,Tde,LDe])}function K2n(){return yA(),he(le(DDe,1),it,349,0,[Sde,Cde,MB])}function W2n(){return SE(),he(le(ODe,1),it,350,0,[_de,IDe,aM])}function Y2n(){return gV(),he(le(BDe,1),it,352,0,[PDe,Ade,NDe])}function X2n(){return OV(),he(le(FDe,1),it,388,0,[Lde,XT,k4])}function Q2n(){return Iw(),he(le(SEt,1),it,464,0,[DB,oM,MW])}function I1(e){return Ic(he(le(Ea,1),dt,8,0,[e.i.n,e.n,e.a]))}function J2n(){return xA(),he(le(eIe,1),it,392,0,[ZDe,Ide,OB])}function jot(){jot=U,FTt=yl(new Xs,(wx(),hM),(WA(),VDe))}function RH(){RH=U,Ude=new V3e("DFS",0),xIe=new V3e("BFS",1)}function $ot(e,t,n){var r;r=new hte,r.b=t,r.a=n,++t.b,vt(e.d,r)}function Z2n(e,t,n){var r;r=new Eo(n.d),Oi(r,e),b8e(t,r.a,r.b)}function ebn(e,t){Ont(e,Yr(va(bw(t,24),ZU)),Yr(va(t,ZU)))}function Ey(e,t){if(e<0||e>t)throw ue(new tc(dEe+e+gEe+t))}function Sn(e,t){if(e<0||e>=t)throw ue(new tc(dEe+e+gEe+t))}function Xn(e,t){if(e<0||e>=t)throw ue(new e3e(dEe+e+gEe+t))}function kn(e,t){this.b=(nr(e),e),this.a=t&Xy?t:t|64|_d}function K5e(e){var t;return xb(e),t=(Ew(),Ew(),D0e),lV(e,t)}function tbn(e,t,n){var r;return r=ZA(e,t,!1),r.b<=t&&r.a<=n}function nbn(){return tV(),he(le(pOe,1),it,439,0,[gge,gOe,dOe])}function rbn(){return qV(),he(le(XIe,1),it,394,0,[YIe,uge,WIe])}function ibn(){return WV(),he(le(KIe,1),it,445,0,[RB,VW,rge])}function sbn(){return sU(),he(le(gCt,1),it,456,0,[ige,age,sge])}function abn(){return LN(),he(le(AIe,1),it,393,0,[zW,SIe,_Ie])}function obn(){return AV(),he(le(GIe,1),it,300,0,[nge,UIe,VIe])}function cbn(){return rp(),he(le(YNe,1),it,346,0,[oY,A2,DM])}function ubn(){return PN(),he(le(pge,1),it,444,0,[WW,YW,XW])}function lbn(){return F1(),he(le(FNe,1),it,278,0,[nC,_4,rC])}function hbn(){return dx(),he(le(nPe,1),it,280,0,[tPe,L4,dY])}function _w(e){return Xr(e),De(e,16)?new Ol(l(e,16)):$k(e.Kc())}function W5e(e,t){return e&&e.equals?e.equals(t):qe(e)===qe(t)}function va(e,t){return mb(rgn(wc(e)?Mf(e):e,wc(t)?Mf(t):t))}function Q0(e,t){return mb(ign(wc(e)?Mf(e):e,wc(t)?Mf(t):t))}function moe(e,t){return mb(sgn(wc(e)?Mf(e):e,wc(t)?Mf(t):t))}function fbn(e,t){var n;return n=(nr(e),e).g,qye(!!n),nr(t),n(t)}function zot(e,t){var n,r;return r=Hk(e,t),n=e.a.fd(r),new VZe(e,n)}function dbn(e){return e.Db>>16!=6?null:l(Uue(e),241)}function gbn(e){if(e.p!=2)throw ue(new pl);return Yr(e.f)&Zs}function pbn(e){if(e.p!=2)throw ue(new pl);return Yr(e.k)&Zs}function re(e){return mr(e.ar?1:0}function Uot(e,t){var n,r;return n=$oe(t),r=n,l(cr(e.c,r),17).a}function voe(e,t,n){var r;r=e.d[t.p],e.d[t.p]=e.d[n.p],e.d[n.p]=r}function Sbn(e,t,n){var r;e.n&&t&&n&&(r=new Kne,vt(e.e,r))}function woe(e,t){if(na(e.a,t),t.d)throw ue(new Ac(e3t));t.d=e}function Q5e(e,t){this.a=new bt,this.d=new bt,this.f=e,this.c=t}function Got(){this.c=new Lnt,this.a=new Put,this.b=new UQe,uet()}function Kot(){hx(),this.b=new Pr,this.a=new Pr,this.c=new bt}function Wot(e,t,n){this.d=e,this.j=t,this.e=n,this.o=-1,this.p=3}function Yot(e,t,n){this.d=e,this.k=t,this.f=n,this.o=-1,this.p=5}function Xot(e,t,n,r,a,o){Q6e.call(this,e,t,n,r,a),o&&(this.o=-2)}function Qot(e,t,n,r,a,o){J6e.call(this,e,t,n,r,a),o&&(this.o=-2)}function Jot(e,t,n,r,a,o){p6e.call(this,e,t,n,r,a),o&&(this.o=-2)}function Zot(e,t,n,r,a,o){t7e.call(this,e,t,n,r,a),o&&(this.o=-2)}function ect(e,t,n,r,a,o){b6e.call(this,e,t,n,r,a),o&&(this.o=-2)}function tct(e,t,n,r,a,o){Z6e.call(this,e,t,n,r,a),o&&(this.o=-2)}function nct(e,t,n,r,a,o){e7e.call(this,e,t,n,r,a),o&&(this.o=-2)}function rct(e,t,n,r,a,o){m6e.call(this,e,t,n,r,a),o&&(this.o=-2)}function ict(e,t,n,r){Nz.call(this,n),this.b=e,this.c=t,this.d=r}function sct(e,t){this.f=e,this.a=(eE(),SY),this.c=SY,this.b=t}function act(e,t){this.g=e,this.d=(eE(),_Y),this.a=_Y,this.b=t}function J5e(e,t){!e.c&&(e.c=new Ls(e,0)),HU(e.c,(Gi(),HM),t)}function _bn(e,t){return uTn(e,t,De(t,102)&&(l(t,19).Bb&Io)!=0)}function Abn(e,t){return $st(Zc(e.q.getTime()),Zc(t.q.getTime()))}function oct(e){return Cae(e.e.Rd().gc()*e.c.Rd().gc(),16,new pie(e))}function Lbn(e){return!!e.u&&du(e.u.a).i!=0&&!(e.n&&cue(e.n))}function Mbn(e){return!!e.a&&Xl(e.a.a).i!=0&&!(e.b&&uue(e.b))}function Z5e(e,t){return t==0?!!e.o&&e.o.f!=0:nue(e,t)}function Dbn(e,t,n){var r;return r=l(e.Zb().xc(t),16),!!r&&r.Hc(n)}function cct(e,t,n){var r;return r=l(e.Zb().xc(t),16),!!r&&r.Mc(n)}function uct(e,t){var n;return n=1-t,e.a[n]=EV(e.a[n],n),EV(e,t)}function lct(e,t){var n,r;return r=va(e,Vo),n=l0(t,32),Q0(n,r)}function hct(e,t,n){var r;r=(Xr(e),new Ol(e)),O7n(new Eot(r,t,n))}function QO(e,t,n){var r;r=(Xr(e),new Ol(e)),N7n(new Tot(r,t,n))}function zc(e,t,n,r,a,o){return qft(e,t,n,o),c8e(e,r),u8e(e,a),e}function fct(e,t,n,r){return e.a+=""+tf(t==null?ul:xc(t),n,r),e}function Ua(e,t){this.a=e,kr.call(this,e),Ey(t,e.gc()),this.b=t}function dct(e){this.a=We(wa,Rn,1,P7e(b.Math.max(8,e))<<1,5,1)}function JO(e){return l(j1(e,We(wg,m2,10,e.c.length,0,1)),199)}function kd(e){return l(j1(e,We(u1e,Bhe,18,e.c.length,0,1)),483)}function gct(e){return e.a?e.e.length==0?e.a.a:e.a.a+(""+e.e):e.c}function iA(e){for(;e.d>0&&e.a[--e.d]==0;);e.a[e.d++]==0&&(e.e=0)}function pct(e){return mr(e.b.b!=e.d.a),e.c=e.b=e.b.b,--e.a,e.c.c}function Ibn(e,t,n){e.a=t,e.c=n,e.b.a.$b(),Ch(e.d),ay(e.e.a.c,0)}function bct(e,t){var n;e.e=new Vwe,n=Hy(t),Vs(n,e.c),Mbt(e,n,0)}function Qs(e,t,n,r){var a;a=new J9,a.a=t,a.b=n,a.c=r,ui(e.a,a)}function gt(e,t,n,r){var a;a=new J9,a.a=t,a.b=n,a.c=r,ui(e.b,a)}function mct(e,t,n){if(e<0||tn)throw ue(new tc(U9n(e,t,n)))}function ZO(e,t){if(e<0||e>=t)throw ue(new tc(kkn(e,t)));return e}function Obn(e){if(!("stack"in e))try{throw e}catch{}return e}function G5(e){return p_(),De(e.g,10)?l(e.g,10):null}function Nbn(e){return V5(e).dc()?!1:(rhn(e,new oe),!0)}function Fm(e){var t;return wc(e)?(t=e,t==-0?0:t):Yvn(e)}function vct(e,t){return De(t,44)?gue(e.a,l(t,44)):!1}function wct(e,t){return De(t,44)?gue(e.a,l(t,44)):!1}function yct(e,t){return De(t,44)?gue(e.a,l(t,44)):!1}function e6e(e){var t;return fb(e),t=new Ne,A5(e.a,new x5(t)),t}function t6e(){var e,t,n;return t=(n=(e=new Qv,e),n),vt(RPe,t),t}function jH(e){var t;return fb(e),t=new gn,A5(e.a,new T8(t)),t}function Pbn(e,t){return e.a<=e.b?(t.Dd(e.a++),!0):!1}function xct(e){oce.call(this,e,(rE(),O0e),null,!1,null,!1)}function kct(){kct=U,A7t=Kr((Zz(),he(le(U_e,1),it,489,0,[G0e])))}function Ect(){Ect=U,jDe=pat(pt(1),pt(4)),RDe=pat(pt(1),pt(2))}function Bbn(e,t){return new wae(t,z_(Ja(t.e),e,e),(Hn(),!0))}function $H(e){return new Bu((Mh(e,Fle),cV(bo(bo(5,e),e/10|0))))}function Fbn(e){return Cae(e.e.Rd().gc()*e.c.Rd().gc(),273,new gie(e))}function Tct(e){return l(j1(e,We(F8t,I3t,12,e.c.length,0,1)),2042)}function Rbn(e){return Sh(),!Do(e)&&!(!Do(e)&&e.c.i.c==e.d.i.c)}function jbn(e,t){return ux(),l(Q(t,(Hc(),W6)),17).a>=e.gc()}function sA(e,t){xIn(t,e),N4e(e.d),N4e(l(Q(e,(Nt(),wW)),214))}function yoe(e,t){kIn(t,e),P4e(e.d),P4e(l(Q(e,(Nt(),wW)),214))}function $bn(e,t,n){e.d&&al(e.d.e,e),e.d=t,e.d&&pw(e.d.e,n,e)}function zbn(e,t,n){return n.f.c.length>0?u5e(e.a,t,n):u5e(e.b,t,n)}function qbn(e,t,n){var r;r=s6n();try{return Lfn(e,t,n)}finally{Nmn(r)}}function Aw(e,t){var n,r;return n=Wg(e,t),r=null,n&&(r=n.pe()),r}function aA(e,t){var n,r;return n=Wg(e,t),r=null,n&&(r=n.se()),r}function Jk(e,t){var n,r;return n=_y(e,t),r=null,n&&(r=n.se()),r}function Yg(e,t){var n,r;return n=Wg(e,t),r=null,n&&(r=e9e(n)),r}function Hbn(e,t,n){var r;return r=NE(n),RU(e.g,r,t),RU(e.i,t,n),t}function n6e(e,t,n){this.d=new OYe(this),this.e=e,this.i=t,this.f=n}function Cct(e,t,n,r){this.e=null,this.c=e,this.d=t,this.a=n,this.b=r}function Sct(e,t,n,r){Ent(this),this.c=e,this.e=t,this.f=n,this.b=r}function r6e(e,t,n,r){this.d=e,this.n=t,this.g=n,this.o=r,this.p=-1}function _ct(e,t,n,r){return De(n,59)?new rrt(e,t,n,r):new r5e(e,t,n,r)}function Zk(e){return De(e,16)?l(e,16).dc():!e.Kc().Ob()}function Act(e){if(e.e.g!=e.b)throw ue(new Xh);return!!e.c&&e.d>0}function Br(e){return mr(e.b!=e.d.c),e.c=e.b,e.b=e.b.a,++e.a,e.c.c}function i6e(e,t){nr(t),Ts(e.a,e.c,t),e.c=e.c+1&e.a.length-1,Xdt(e)}function gb(e,t){nr(t),e.b=e.b-1&e.a.length-1,Ts(e.a,e.b,t),Xdt(e)}function Lct(e){var t;t=e.Gh(),this.a=De(t,71)?l(t,71).Ii():t.Kc()}function Vbn(e){return new kn(Lwn(l(e.a.md(),16).gc(),e.a.ld()),16)}function Mct(){Mct=U,UCt=Kr((nq(),he(le(wOe,1),it,490,0,[bge])))}function Dct(){Dct=U,KCt=Kr((rq(),he(le(GCt,1),it,558,0,[mge])))}function Ict(){Ict=U,hSt=Kr((b_(),he(le($Oe,1),it,539,0,[qB])))}function Ubn(){return Km(),he(le(mAe,1),it,389,0,[c4,bAe,o1e,c1e])}function Gbn(){return rE(),he(le(fK,1),it,304,0,[O0e,N0e,P0e,B0e])}function Kbn(){return bx(),he(le(E7t,1),it,332,0,[aB,sB,oB,cB])}function Wbn(){return NA(),he(le(S7t,1),it,406,0,[uB,bK,mK,lB])}function Ybn(){return Pw(),he(le(x7t,1),it,417,0,[iB,rB,V0e,U0e])}function Xbn(){return wE(),he(le(C8t,1),it,416,0,[s3,o4,a4,M6])}function Qbn(){return R1(),he(le(txt,1),it,421,0,[Vx,MT,DT,b1e])}function Jbn(){return IV(),he(le(V8t,1),it,371,0,[p1e,HK,VK,pB])}function Zbn(){return By(),he(le(mde,1),it,203,0,[_W,bde,G6,U6])}function emn(){return Ed(),he(le(SDe,1),it,284,0,[E2,CDe,yde,xde])}function tmn(e){var t;return e.j==(Ct(),Dr)&&(t=v2t(e),vl(t,ar))}function nmn(e,t){var n;n=t.a,po(n,t.c.d),Fa(n,t.d.d),Dy(n.a,e.n)}function s6e(e,t){var n;return n=l(B1(e.b,t),67),!n&&(n=new os),n}function ix(e){return p_(),De(e.g,154)?l(e.g,154):null}function rmn(e){e.a=null,e.e=null,ay(e.b.c,0),ay(e.f.c,0),e.c=null}function zH(){zH=U,z1e=new F3e(cT,0),NLe=new F3e("TOP_LEFT",1)}function oA(){oA=U,uM=new j3e("UPPER",0),cM=new j3e("LOWER",1)}function imn(e,t){return z8(new lt(t.e.a+t.f.a/2,t.e.b+t.f.b/2),e)}function Oct(e,t){return l(fh(vy(l($i(e.k,t),15).Oc(),I6)),113)}function Nct(e,t){return l(fh(Y8(l($i(e.k,t),15).Oc(),I6)),113)}function smn(){return wx(),he(le(qDe,1),it,405,0,[NW,lM,hM,fM])}function amn(){return kA(),he(le(yIe,1),it,353,0,[Vde,jW,Hde,qde])}function omn(){return uU(),he(le(HIe,1),it,354,0,[tge,zIe,qIe,$Ie])}function cmn(){return mh(),he(le(BM,1),it,386,0,[iF,Cv,rF,A4])}function umn(){return Ih(),he(le(JSt,1),it,291,0,[eF,kg,Gb,ZB])}function lmn(){return ip(),he(le(Vge,1),it,223,0,[Hge,JB,iC,s9])}function hmn(){return VV(),he(le(cPe,1),it,320,0,[Kge,sPe,oPe,aPe])}function fmn(){return NV(),he(le(p_t,1),it,415,0,[Wge,lPe,uPe,hPe])}function dmn(e){return BH(),Hu(Zge,e)?l(cr(Zge,e),341).Qg():null}function nf(e,t,n){return t<0?que(e,n):l(n,69).wk().Bk(e,e.hi(),t)}function gmn(e,t,n){var r;return r=NE(n),RU(e.j,r,t),ki(e.k,t,n),t}function pmn(e,t,n){var r;return r=NE(n),RU(e.d,r,t),ki(e.e,t,n),t}function Pct(e){var t,n;return t=(rb(),n=new TI,n),e&&AU(t,e),t}function a6e(e){var t;return t=e.aj(e.i),e.i>0&&pu(e.g,0,t,0,e.i),t}function Bct(e,t){var n;for(n=e.j.c.length;n>24}function mmn(e){if(e.p!=1)throw ue(new pl);return Yr(e.k)<<24>>24}function vmn(e){if(e.p!=7)throw ue(new pl);return Yr(e.k)<<16>>16}function wmn(e){if(e.p!=7)throw ue(new pl);return Yr(e.f)<<16>>16}function K5(e,t){return t.e==0||e.e==0?BL:(GE(),Que(e,t))}function jct(e,t){return qe(t)===qe(e)?"(this Map)":t==null?ul:xc(t)}function ymn(e,t,n){return Nae(Ge(hc(zo(e.f,t))),Ge(hc(zo(e.f,n))))}function xmn(e,t,n){var r;r=l(cr(e.g,n),60),vt(e.a.c,new ca(t,r))}function $ct(e,t,n){e.i=0,e.e=0,t!=n&&(k0t(e,t,n),x0t(e,t,n))}function kmn(e,t,n,r,a){var o;o=ETn(a,n,r),vt(t,pkn(a,o)),a9n(e,a,t)}function o6e(e,t,n,r,a){this.i=e,this.a=t,this.e=n,this.j=r,this.f=a}function zct(e,t){R5e.call(this),this.a=e,this.b=t,vt(this.a.b,this)}function qct(e){this.b=new Pr,this.c=new Pr,this.d=new Pr,this.a=e}function Hct(e,t){var n;return n=new S5,e.Gd(n),n.a+="..",t.Hd(n),n.a}function Vct(e,t){var n;for(n=t;n;)dw(e,n.i,n.j),n=ds(n);return e}function Uct(e,t,n){var r;return r=NE(n),ki(e.b,r,t),ki(e.c,t,n),t}function Xg(e){var t;for(t=0;e.Ob();)e.Pb(),t=bo(t,1);return cV(t)}function sg(e,t){Fo();var n;return n=l(e,69).vk(),k9n(n,t),n.xl(t)}function Emn(e,t,n){if(n){var r=n.oe();e.a[t]=r(n)}else delete e.a[t]}function c6e(e,t){var n;n=e.q.getHours(),e.q.setFullYear(t+Lb),XA(e,n)}function Tmn(e,t){return l(t==null?hc(zo(e.f,null)):y_(e.i,t),288)}function u6e(e,t){return e==(Zn(),Ps)&&t==Ps?4:e==Ps||t==Ps?8:32}function qH(e,t,n){return $U(e,t,n,De(t,102)&&(l(t,19).Bb&Io)!=0)}function Cmn(e,t,n){return XE(e,t,n,De(t,102)&&(l(t,19).Bb&Io)!=0)}function Smn(e,t,n){return bTn(e,t,n,De(t,102)&&(l(t,19).Bb&Io)!=0)}function l6e(e){e.b!=e.c&&(e.a=We(wa,Rn,1,8,5,1),e.b=0,e.c=0)}function cA(e){return mr(e.a=0&&e.a[n]===t[n];n--);return n<0}function HH(e){var t;return e?new K4e(e):(t=new bd,sce(t,e),t)}function Omn(e,t){var n,r;r=!1;do n=h0t(e,t),r=r|n;while(n);return r}function Nmn(e){e&&awn((Xwe(),GSe)),--aK,e&&oK!=-1&&(Cln(oK),oK=-1)}function VH(e){Rxe(),Ont(this,Yr(va(bw(e,24),ZU)),Yr(va(e,ZU)))}function Xct(){Xct=U,q6t=Kr((ZV(),he(le(k_e,1),it,436,0,[j0e,x_e])))}function Qct(){Qct=U,H6t=Kr((aV(),he(le(T_e,1),it,435,0,[E_e,$0e])))}function Jct(){Jct=U,U7t=Kr((oV(),he(le(J_e,1),it,432,0,[Q0e,yK])))}function Zct(){Zct=U,z8t=Kr((dE(),he(le($8t,1),it,517,0,[dB,h1e])))}function eut(){eut=U,_xt=Kr((zH(),he(le(PLe,1),it,429,0,[z1e,NLe])))}function tut(){tut=U,bxt=Kr((pN(),he(le(wLe,1),it,428,0,[XK,vLe])))}function nut(){nut=U,yxt=Kr((cN(),he(le(kLe,1),it,488,0,[xLe,JK])))}function rut(){rut=U,iEt=Kr((dN(),he(le(_De,1),it,430,0,[kde,Ede])))}function iut(){iut=U,IEt=Kr((oA(),he(le(DEt,1),it,531,0,[uM,cM])))}function sut(){sut=U,fxt=Kr((JH(),he(le(hLe,1),it,431,0,[lLe,S1e])))}function aut(){aut=U,BTt=Kr((RH(),he(le(kIe,1),it,433,0,[Ude,xIe])))}function out(){out=U,zTt=Kr((kV(),he(le(EIe,1),it,501,0,[$W,X6])))}function cut(){cut=U,jEt=Kr((xd(),he(le(REt,1),it,523,0,[w3,T2])))}function uut(){uut=U,zEt=Kr((D1(),he(le($Et,1),it,522,0,[wv,Y1])))}function lut(){lut=U,nTt=Kr((J0(),he(le(tTt,1),it,528,0,[E4,qb])))}function hut(){hut=U,uTt=Kr((Sw(),he(le(cTt,1),it,465,0,[Hb,K6])))}function fut(){fut=U,VTt=Kr((eV(),he(le(CIe,1),it,434,0,[TIe,Qde])))}function dut(){dut=U,jCt=Kr((GH(),he(le(fOe,1),it,491,0,[dge,hOe])))}function gut(){gut=U,zCt=Kr((fce(),he(le(vOe,1),it,492,0,[bOe,mOe])))}function put(){put=U,WCt=Kr((rN(),he(le(yOe,1),it,438,0,[vge,QW])))}function but(){but=U,fSt=Kr((CN(),he(le(qOe,1),it,437,0,[ZW,zOe])))}function mut(){mut=U,f_t=Kr((mae(),he(le(gY,1),it,347,0,[rPe,iPe])))}function Pmn(){return Js(),he(le(LM,1),it,88,0,[J1,vc,uc,Q1,wf])}function Bmn(){return Ct(),he(le(Oo,1),au,64,0,[Pc,Qn,ar,Dr,er])}function Fmn(e,t,n){return l(t==null?ju(e.f,null,n):Bw(e.i,t,n),288)}function Rmn(e){return(e.k==(Zn(),Ps)||e.k==Us)&&ns(e,(ft(),KL))}function Coe(e){return e.c&&e.d?X5e(e.c)+"->"+X5e(e.d):"e_"+fw(e)}function to(e,t){var n,r;for(nr(t),r=e.Kc();r.Ob();)n=r.Pb(),t.Cd(n)}function jmn(e,t){var n;n=new M8,Nm(n,"x",t.a),Nm(n,"y",t.b),J8(e,n)}function $mn(e,t){var n;n=new M8,Nm(n,"x",t.a),Nm(n,"y",t.b),J8(e,n)}function vut(e,t){var n;for(n=t;n;)dw(e,-n.i,-n.j),n=ds(n);return e}function f6e(e,t){var n,r;for(n=t,r=0;n>0;)r+=e.a[n],n-=n&-n;return r}function rf(e,t,n){var r;return r=(Sn(t,e.c.length),e.c[t]),e.c[t]=n,r}function d6e(e,t,n){e.a.c.length=0,hMn(e,t,n),e.a.c.length==0||j_n(e,t)}function eN(e){e.i=0,aO(e.b,null),aO(e.c,null),e.a=null,e.e=null,++e.g}function UH(){UH=U,G1=!0,I6t=!1,O6t=!1,P6t=!1,N6t=!1}function Soe(e){UH(),!G1&&(this.c=e,this.e=!0,this.a=new bt)}function wut(e,t){this.c=0,this.b=t,qtt.call(this,e,17493),this.a=this.c}function yut(e){kwt(),SQe(this),this.a=new os,G7e(this,e),ui(this.a,e)}function xut(){Yse(this),this.b=new lt(gs,gs),this.a=new lt(ia,ia)}function GH(){GH=U,dge=new K3e(HEe,0),hOe=new K3e("TARGET_WIDTH",1)}function W5(e,t){return(xb(e),_k(new bn(e,new $6e(t,e.a)))).Bd(zx)}function zmn(){return uo(),he(le(gAe,1),it,367,0,[y0,vg,bu,_u,mc])}function qmn(){return Ry(),he(le(rxt,1),it,375,0,[bB,KK,WK,GK,UK])}function Hmn(){return l2(),he(le(mLe,1),it,348,0,[A1e,bLe,L1e,BT,PT])}function Vmn(){return OA(),he(le(wDe,1),it,323,0,[vDe,vde,wde,rM,iM])}function Umn(){return hf(),he(le(WLe,1),it,171,0,[EB,YL,$b,XL,d4])}function Gmn(){return bU(),he(le(qTt,1),it,368,0,[Yde,Gde,Xde,Kde,Wde])}function Kmn(){return VA(),he(le(qCt,1),it,373,0,[Q6,e9,xM,yM,zB])}function Wmn(){return XN(),he(le(TOe,1),it,324,0,[xOe,wge,EOe,yge,kOe])}function Ymn(){return r1(),he(le(xg,1),it,170,0,[Pn,ha,zd,yv,S2])}function Xmn(){return t6(),he(le(OM,1),it,256,0,[Kb,tF,XNe,IM,QNe])}function Qmn(e){return Hz(),function(){return qbn(e,this,arguments)}}function Do(e){return!e.c||!e.d?!1:!!e.c.i&&e.c.i==e.d.i}function g6e(e,t){return De(t,143)?vn(e.c,l(t,143).c):!1}function Yl(e){return e.t||(e.t=new bQe(e),_A(new IJe(e),0,e.t)),e.t}function kut(e){this.b=e,or.call(this,e),this.a=l(Kn(this.b.a,4),129)}function Eut(e){this.b=e,H8.call(this,e),this.a=l(Kn(this.b.a,4),129)}function h0(e,t,n,r,a){Out.call(this,t,r,a),this.c=e,this.b=n}function p6e(e,t,n,r,a){Wot.call(this,t,r,a),this.c=e,this.a=n}function b6e(e,t,n,r,a){Yot.call(this,t,r,a),this.c=e,this.a=n}function m6e(e,t,n,r,a){Out.call(this,t,r,a),this.c=e,this.a=n}function _oe(e,t){var n;return n=l(B1(e.d,t),23),n||l(B1(e.e,t),23)}function Tut(e,t){var n,r;return n=t.ld(),r=e.Fe(n),!!r&&Jc(r.e,t.md())}function Cut(e,t){var n;return n=t.ld(),new iw(n,e.e.pc(n,l(t.md(),16)))}function Jmn(e,t){var n;return n=e.a.get(t),n??We(wa,Rn,1,0,5,1)}function Sut(e){var t;return t=e.length,vn(sr.substr(sr.length-t,t),e)}function xr(e){if(jr(e))return e.c=e.a,e.a.Pb();throw ue(new _c)}function v6e(e,t){return t==0||e.e==0?e:t>0?pbt(e,t):j1t(e,-t)}function sx(e,t){return t==0||e.e==0?e:t>0?j1t(e,t):pbt(e,-t)}function w6e(e){uln.call(this,e==null?ul:xc(e),De(e,82)?l(e,82):null)}function _ut(e){var t;return e.c||(t=e.r,De(t,90)&&(e.c=l(t,29))),e.c}function Aoe(e){var t;return t=new Tw,pc(t,e),rt(t,(Nt(),cc),null),t}function Aut(e){var t,n;return t=e.c.i,n=e.d.i,t.k==(Zn(),Us)&&n.k==Us}function Loe(e){var t,n,r;return t=e&eh,n=e>>22&eh,r=e<0?hp:0,qu(t,n,r)}function Zmn(e){var t,n,r,a;for(n=e,r=0,a=n.length;r=0?e.Lh(r,n,!0):Hw(e,t,n)}function tvn(e,t,n){return Yi(z8(BE(e),Ja(t.b)),z8(BE(e),Ja(n.b)))}function nvn(e,t,n){return Yi(z8(BE(e),Ja(t.e)),z8(BE(e),Ja(n.e)))}function rvn(e,t){return b.Math.min(pb(t.a,e.d.d.c),pb(t.b,e.d.d.c))}function tN(e,t){e._i(e.i+1),R_(e,e.i,e.Zi(e.i,t)),e.Mi(e.i++,t),e.Ni()}function uA(e){var t,n;++e.j,t=e.g,n=e.i,e.g=null,e.i=0,e.Oi(n,t),e.Ni()}function Lut(e,t,n){var r;r=new vye(e.a),bA(r,e.a.a),ju(r.f,t,n),e.a.a=r}function y6e(e,t,n,r){var a;for(a=0;at)throw ue(new tc(u9e(e,t,"index")));return e}function t2(e,t){var n;return n=(Sn(t,e.c.length),e.c[t]),d3e(e.c,t,1),n}function E6e(e,t){var n,r;return n=(nr(e),e),r=(nr(t),t),n==r?0:nt.p?-1:0}function Fut(e){var t;return e.a||(t=e.r,De(t,156)&&(e.a=l(t,156))),e.a}function uvn(e,t,n){var r;return++e.e,--e.f,r=l(e.d[t].gd(n),136),r.md()}function lvn(e){var t,n;return t=e.ld(),n=l(e.md(),16),NO(n.Nc(),new bie(t))}function Rut(e,t){return Hu(e.a,t)?(ax(e.a,t),!0):!1}function ox(e,t,n){return ZO(t,e.e.Rd().gc()),ZO(n,e.c.Rd().gc()),e.a[t][n]}function WH(e,t,n){this.a=e,this.b=t,this.c=n,vt(e.t,this),vt(t.i,this)}function YH(e,t,n,r){this.f=e,this.e=t,this.d=n,this.b=r,this.c=r?r.d:null}function nN(){this.b=new os,this.a=new os,this.b=new os,this.a=new os}function eE(){eE=U;var e,t;SY=(Sk(),t=new Fz,t),_Y=(e=new zie,e)}function hvn(e){var t;return xb(e),t=new Mit(e,e.a.e,e.a.d|4),new Vye(e,t)}function jut(e){var t;for(fb(e),t=0;e.a.Bd(new An);)t=bo(t,1);return t}function XH(e,t){return nr(t),e.c=0,"Initial capacity must not be negative")}function QH(){QH=U,kM=new Ui("org.eclipse.elk.labels.labelManager")}function $ut(){$ut=U,sLe=new vs("separateLayerConnections",(IV(),p1e))}function J0(){J0=U,E4=new q3e("REGULAR",0),qb=new q3e("CRITICAL",1)}function rN(){rN=U,vge=new Y3e("FIXED",0),QW=new Y3e("CENTER_NODE",1)}function JH(){JH=U,lLe=new N3e("QUADRATIC",0),S1e=new N3e("SCANLINE",1)}function zut(){zut=U,dxt=Kr((dA(),he(le(dLe,1),it,322,0,[HL,mB,fLe])))}function qut(){qut=U,gxt=Kr((pV(),he(le(pLe,1),it,351,0,[gLe,YK,_1e])))}function Hut(){Hut=U,uxt=Kr((Ow(),he(le(m1e,1),it,372,0,[o3,Rb,a3])))}function Vut(){Vut=U,vxt=Kr((Vm(),he(le(mxt,1),it,460,0,[M1e,FT,P6])))}function Uut(){Uut=U,Txt=Kr((vE(),he(le($1e,1),it,299,0,[R1e,j1e,vB])))}function Gut(){Gut=U,Sxt=Kr((ep(),he(le(Cxt,1),it,311,0,[wB,F6,Ux])))}function Kut(){Kut=U,Zkt=Kr((EA(),he(le(mDe,1),it,390,0,[pde,bDe,SW])))}function Wut(){Wut=U,oEt=Kr((LV(),he(le(MDe,1),it,387,0,[ADe,Tde,LDe])))}function Yut(){Yut=U,cEt=Kr((yA(),he(le(DDe,1),it,349,0,[Sde,Cde,MB])))}function Xut(){Xut=U,aEt=Kr((qo(),he(le(sEt,1),it,463,0,[sM,$l,zu])))}function Qut(){Qut=U,uEt=Kr((SE(),he(le(ODe,1),it,350,0,[_de,IDe,aM])))}function Jut(){Jut=U,lEt=Kr((gV(),he(le(BDe,1),it,352,0,[PDe,Ade,NDe])))}function Zut(){Zut=U,hEt=Kr((OV(),he(le(FDe,1),it,388,0,[Lde,XT,k4])))}function elt(){elt=U,fTt=Kr((xA(),he(le(eIe,1),it,392,0,[ZDe,Ide,OB])))}function tlt(){tlt=U,UTt=Kr((LN(),he(le(AIe,1),it,393,0,[zW,SIe,_Ie])))}function nlt(){nlt=U,fCt=Kr((AV(),he(le(GIe,1),it,300,0,[nge,UIe,VIe])))}function rlt(){rlt=U,dCt=Kr((WV(),he(le(KIe,1),it,445,0,[RB,VW,rge])))}function ilt(){ilt=U,pCt=Kr((sU(),he(le(gCt,1),it,456,0,[ige,age,sge])))}function slt(){slt=U,vCt=Kr((qV(),he(le(XIe,1),it,394,0,[YIe,uge,WIe])))}function alt(){alt=U,$Ct=Kr((tV(),he(le(pOe,1),it,439,0,[gge,gOe,dOe])))}function olt(){olt=U,_Et=Kr((Iw(),he(le(SEt,1),it,464,0,[DB,oM,MW])))}function clt(){clt=U,Y6t=Kr((Bl(),he(le(W6t,1),it,471,0,[Fd,Bb,v0])))}function ult(){ult=U,K6t=Kr((t1(),he(le(s4,1),it,237,0,[Gc,$u,Kc])))}function llt(){llt=U,Q6t=Kr((ol(),he(le(X6t,1),it,472,0,[a1,Fb,w0])))}function hlt(){hlt=U,B6t=Kr((Fl(),he(le(oc,1),it,108,0,[y_e,Ec,i4])))}function flt(){flt=U,m8t=Kr((lA(),he(le(dAe,1),it,391,0,[t1e,e1e,n1e])))}function dlt(){dlt=U,QSt=Kr((rp(),he(le(YNe,1),it,346,0,[oY,A2,DM])))}function glt(){glt=U,VCt=Kr((PN(),he(le(pge,1),it,444,0,[WW,YW,XW])))}function plt(){plt=U,KSt=Kr((F1(),he(le(FNe,1),it,278,0,[nC,_4,rC])))}function blt(){blt=U,h_t=Kr((dx(),he(le(nPe,1),it,280,0,[tPe,L4,dY])))}function P1(e,t){return!e.o&&(e.o=new xl((su(),Cg),L2,e,0)),Kce(e.o,t)}function fvn(e,t){var n;e.C&&(n=l(Qo(e.b,t),127).n,n.d=e.C.d,n.a=e.C.a)}function A6e(e){var t,n,r,a;a=e.d,t=e.a,n=e.b,r=e.c,e.d=n,e.a=r,e.b=a,e.c=t}function dvn(e){return!e.g&&(e.g=new MS),!e.g.b&&(e.g.b=new fQe(e)),e.g.b}function iN(e){return!e.g&&(e.g=new MS),!e.g.c&&(e.g.c=new pQe(e)),e.g.c}function gvn(e){return!e.g&&(e.g=new MS),!e.g.d&&(e.g.d=new dQe(e)),e.g.d}function pvn(e){return!e.g&&(e.g=new MS),!e.g.a&&(e.g.a=new gQe(e)),e.g.a}function bvn(e,t,n,r){return n&&(r=n.Rh(t,ms(n.Dh(),e.c.uk()),null,r)),r}function mvn(e,t,n,r){return n&&(r=n.Th(t,ms(n.Dh(),e.c.uk()),null,r)),r}function Ooe(e,t,n,r){var a;return a=We(Vr,di,28,t+1,15,1),xAn(a,e,t,n,r),a}function We(e,t,n,r,a,o){var f;return f=zdt(a,r),a!=10&&he(le(e,o),t,n,a,f),f}function vvn(e,t,n){var r,a;for(a=new mE(t,e),r=0;rn||t=0?e.Lh(n,!0,!0):Hw(e,t,!0)}function Pvn(e,t,n){var r;return r=w0t(e,t,n),e.b=new TV(r.c.length),Q9e(e,r)}function Bvn(e){if(e.b<=0)throw ue(new _c);return--e.b,e.a-=e.c.c,pt(e.a)}function Fvn(e){var t;if(!e.a)throw ue(new Lat);return t=e.a,e.a=ds(e.a),t}function Rvn(e){for(;!e.a;)if(!tit(e.c,new ZS(e)))return!1;return!0}function cx(e){var t;return Xr(e),De(e,204)?(t=l(e,204),t):new w8(e)}function jvn(e){ZH(),l(e.of((pi(),S4)),181).Fc((Rl(),nF)),e.qf($ge,null)}function ZH(){ZH=U,pSt=new l$,mSt=new h$,bSt=_yn((pi(),$ge),pSt,Ub,mSt)}function eV(){eV=U,TIe=new G3e("LEAF_NUMBER",0),Qde=new G3e("NODE_SIZE",1)}function Roe(e){e.a=We(Vr,di,28,e.b+1,15,1),e.c=We(Vr,di,28,e.b,15,1),e.d=0}function $vn(e,t){e.a.Ne(t.d,e.b)>0&&(vt(e.c,new L4e(t.c,t.d,e.d)),e.b=t.d)}function R6e(e,t){if(e.g==null||t>=e.i)throw ue(new Vse(t,e.i));return e.g[t]}function ylt(e,t,n){if(EE(e,n),n!=null&&!e.fk(n))throw ue(new Rie);return n}function joe(e,t){return gN(t)!=10&&he(bh(t),t.Sm,t.__elementTypeId$,gN(t),e),e}function nE(e,t,n,r){var a;r=(Ew(),r||d_e),a=e.slice(t,n),l9e(a,e,t,n,-t,r)}function sf(e,t,n,r,a){return t<0?Hw(e,n,r):l(n,69).wk().yk(e,e.hi(),t,r,a)}function zvn(e,t){return Yi(ze(Ge(Q(e,(ft(),l3)))),ze(Ge(Q(t,l3))))}function xlt(){xlt=U,M6t=Kr((rE(),he(le(fK,1),it,304,0,[O0e,N0e,P0e,B0e])))}function rE(){rE=U,O0e=new oq("All",0),N0e=new hnt,P0e=new ynt,B0e=new lnt}function Bl(){Bl=U,Fd=new pse(Mx,0),Bb=new pse(cT,1),v0=new pse(Dx,2)}function klt(){klt=U,zU(),GPe=gs,vAt=ia,KPe=new pa(gs),wAt=new pa(ia)}function Elt(){Elt=U,k7t=Kr((Pw(),he(le(x7t,1),it,417,0,[iB,rB,V0e,U0e])))}function Tlt(){Tlt=U,_7t=Kr((NA(),he(le(S7t,1),it,406,0,[uB,bK,mK,lB])))}function Clt(){Clt=U,T7t=Kr((bx(),he(le(E7t,1),it,332,0,[aB,sB,oB,cB])))}function Slt(){Slt=U,I8t=Kr((Km(),he(le(mAe,1),it,389,0,[c4,bAe,o1e,c1e])))}function _lt(){_lt=U,S8t=Kr((wE(),he(le(C8t,1),it,416,0,[s3,o4,a4,M6])))}function Alt(){Alt=U,nxt=Kr((R1(),he(le(txt,1),it,421,0,[Vx,MT,DT,b1e])))}function Llt(){Llt=U,U8t=Kr((IV(),he(le(V8t,1),it,371,0,[p1e,HK,VK,pB])))}function Mlt(){Mlt=U,eEt=Kr((By(),he(le(mde,1),it,203,0,[_W,bde,G6,U6])))}function Dlt(){Dlt=U,rEt=Kr((Ed(),he(le(SDe,1),it,284,0,[E2,CDe,yde,xde])))}function cN(){cN=U,xLe=new B3e(Id,0),JK=new B3e("IMPROVE_STRAIGHTNESS",1)}function Ilt(e,t){var n,r;return r=t/e.c.Rd().gc()|0,n=t%e.c.Rd().gc(),ox(e,r,n)}function Olt(e){var t;if(e.nl())for(t=e.i-1;t>=0;--t)Oe(e,t);return a6e(e)}function j6e(e){var t,n;if(!e.b)return null;for(n=e.b;t=n.a[0];)n=t;return n}function Nlt(e){var t,n;if(!e.b)return null;for(n=e.b;t=n.a[1];)n=t;return n}function qvn(e){return De(e,180)?""+l(e,180).a:e==null?null:xc(e)}function Hvn(e){return De(e,180)?""+l(e,180).a:e==null?null:xc(e)}function Plt(e,t){if(t.a)throw ue(new Ac(e3t));na(e.a,t),t.a=e,!e.j&&(e.j=t)}function $6e(e,t){Dq.call(this,t.zd(),t.yd()&-16449),nr(e),this.a=e,this.c=t}function Vvn(e,t){return new wae(t,dw(Ja(t.e),t.f.a+e,t.f.b+e),(Hn(),!1))}function Uvn(e,t){return jk(),vt(e,new ca(t,pt(t.e.c.length+t.g.c.length)))}function Gvn(e,t){return jk(),vt(e,new ca(t,pt(t.e.c.length+t.g.c.length)))}function Blt(){Blt=U,hCt=Kr((uU(),he(le(HIe,1),it,354,0,[tge,zIe,qIe,$Ie])))}function Flt(){Flt=U,PTt=Kr((kA(),he(le(yIe,1),it,353,0,[Vde,jW,Hde,qde])))}function Rlt(){Rlt=U,lTt=Kr((wx(),he(le(qDe,1),it,405,0,[NW,lM,hM,fM])))}function jlt(){jlt=U,WSt=Kr((ip(),he(le(Vge,1),it,223,0,[Hge,JB,iC,s9])))}function $lt(){$lt=U,ZSt=Kr((Ih(),he(le(JSt,1),it,291,0,[eF,kg,Gb,ZB])))}function zlt(){zlt=U,u_t=Kr((mh(),he(le(BM,1),it,386,0,[iF,Cv,rF,A4])))}function qlt(){qlt=U,d_t=Kr((VV(),he(le(cPe,1),it,320,0,[Kge,sPe,oPe,aPe])))}function Hlt(){Hlt=U,b_t=Kr((NV(),he(le(p_t,1),it,415,0,[Wge,lPe,uPe,hPe])))}function tV(){tV=U,gge=new jse(vyt,0),gOe=new jse(cCe,1),dOe=new jse(Id,2)}function Sy(e,t,n,r,a){return nr(e),nr(t),nr(n),nr(r),nr(a),new h5e(e,t,r)}function Vlt(e,t){var n;return n=l(ax(e.e,t),400),n?($4e(n),n.e):null}function al(e,t){var n;return n=gc(e,t,0),n==-1?!1:(t2(e,n),!0)}function Ult(e,t,n){var r;return fb(e),r=new on,r.a=t,e.a.Nb(new Cet(r,n)),r.a}function Kvn(e){var t;return fb(e),t=We(Na,Zo,28,0,15,1),A5(e.a,new E8(t)),t}function z6e(e){var t;if(!tce(e))throw ue(new _c);return e.e=1,t=e.d,e.d=null,t}function r2(e){var t;return wc(e)&&(t=0-e,!isNaN(t))?t:mb(xE(e))}function gc(e,t,n){for(;n=0?rU(e,n,!0,!0):Hw(e,t,!0)}function H6e(e){var t;return t=jm(Kn(e,32)),t==null&&(Ku(e),t=jm(Kn(e,32))),t}function V6e(e){var t;return e.Oh()||(t=yr(e.Dh())-e.ji(),e.$h().Mk(t)),e.zh()}function Qlt(e,t){H_e=new Ot,C7t=t,RL=e,l(RL.b,68),D6e(RL,H_e,null),fvt(RL)}function lA(){lA=U,t1e=new mse("XY",0),e1e=new mse("X",1),n1e=new mse("Y",2)}function ol(){ol=U,a1=new bse("TOP",0),Fb=new bse(cT,1),w0=new bse(xEe,2)}function ep(){ep=U,wB=new Ese(Id,0),F6=new Ese("TOP",1),Ux=new Ese(xEe,2)}function dN(){dN=U,kde=new R3e("INPUT_ORDER",0),Ede=new R3e("PORT_DEGREE",1)}function iE(){iE=U,WSe=qu(eh,eh,524287),g6t=qu(0,0,SP),YSe=Loe(1),Loe(2),XSe=Loe(0)}function Voe(e){var t;return e.d!=e.r&&(t=Of(e),e.e=!!t&&t.lk()==g5t,e.d=t),e.e}function Uoe(e,t,n){var r;return r=e.g[t],R_(e,t,e.Zi(t,n)),e.Ri(t,n,r),e.Ni(),r}function sV(e,t){var n;return n=e.dd(t),n>=0?(e.gd(n),!0):!1}function Goe(e,t){var n;for(Xr(e),Xr(t),n=!1;t.Ob();)n=n|e.Fc(t.Pb());return n}function B1(e,t){var n;return n=l(cr(e.e,t),400),n?(Int(e,n),n.e):null}function Jlt(e){var t,n;return t=e/60|0,n=e%60,n==0?""+t:""+t+":"+(""+n)}function _y(e,t){var n=e.a[t],r=(vce(),_0e)[typeof n];return r?r(n):Z7e(typeof n)}function Dc(e,t){var n,r;return xb(e),r=new C6e(t,e.a),n=new iit(r),new bn(e,n)}function Koe(e){var t;return t=e.b.c.length==0?null:jt(e.b,0),t!=null&&rce(e,0),t}function Qvn(e,t){var n,r,a;a=t.c.i,n=l(cr(e.f,a),60),r=n.d.c-n.e.c,k7e(t.a,r,0)}function U6e(e,t){var n;for(++e.d,++e.c[t],n=t+1;n=0;)++t[0]}function Jvn(e,t){Uu(e,t==null||Gq((nr(t),t))||isNaN((nr(t),t))?0:(nr(t),t))}function Zvn(e,t){Gu(e,t==null||Gq((nr(t),t))||isNaN((nr(t),t))?0:(nr(t),t))}function ewn(e,t){Dw(e,t==null||Gq((nr(t),t))||isNaN((nr(t),t))?0:(nr(t),t))}function twn(e,t){Mw(e,t==null||Gq((nr(t),t))||isNaN((nr(t),t))?0:(nr(t),t))}function nwn(e,t,n){return z8(new lt(n.e.a+n.f.a/2,n.e.b+n.f.b/2),e)==(nr(t),t)}function rwn(e,t){return De(t,102)&&l(t,19).Bb&Io?new Use(t,e):new mE(t,e)}function iwn(e,t){return De(t,102)&&l(t,19).Bb&Io?new Use(t,e):new mE(t,e)}function gN(e){return e.__elementTypeCategory$==null?10:e.__elementTypeCategory$}function tht(e,t){return t==(gae(),gae(),_6t)?e.toLocaleLowerCase():e.toLowerCase()}function nht(e){if(!e.e)throw ue(new _c);return e.c=e.a=e.e,e.e=e.e.e,--e.d,e.a.f}function G6e(e){if(!e.c)throw ue(new _c);return e.e=e.a=e.c,e.c=e.c.c,++e.d,e.a.f}function rht(e){var t;for(++e.a,t=e.c.a.length;e.ae.a[r]&&(r=n);return r}function iht(e){var t;return t=l(Q(e,(ft(),c3)),313),t?t.a==e:!1}function sht(e){var t;return t=l(Q(e,(ft(),c3)),313),t?t.i==e:!1}function aht(){aht=U,x8t=Kr((uo(),he(le(gAe,1),it,367,0,[y0,vg,bu,_u,mc])))}function oht(){oht=U,ixt=Kr((Ry(),he(le(rxt,1),it,375,0,[bB,KK,WK,GK,UK])))}function cht(){cht=U,pxt=Kr((l2(),he(le(mLe,1),it,348,0,[A1e,bLe,L1e,BT,PT])))}function uht(){uht=U,tEt=Kr((OA(),he(le(wDe,1),it,323,0,[vDe,vde,wde,rM,iM])))}function lht(){lht=U,Axt=Kr((hf(),he(le(WLe,1),it,171,0,[EB,YL,$b,XL,d4])))}function hht(){hht=U,HTt=Kr((bU(),he(le(qTt,1),it,368,0,[Yde,Gde,Xde,Kde,Wde])))}function fht(){fht=U,HCt=Kr((VA(),he(le(qCt,1),it,373,0,[Q6,e9,xM,yM,zB])))}function dht(){dht=U,YCt=Kr((XN(),he(le(TOe,1),it,324,0,[xOe,wge,EOe,yge,kOe])))}function ght(){ght=U,GSt=Kr((Js(),he(le(LM,1),it,88,0,[J1,vc,uc,Q1,wf])))}function pht(){pht=U,vSt=Kr((r1(),he(le(xg,1),it,170,0,[Pn,ha,zd,yv,S2])))}function bht(){bht=U,t_t=Kr((t6(),he(le(OM,1),it,256,0,[Kb,tF,XNe,IM,QNe])))}function mht(){mht=U,i_t=Kr((Ct(),he(le(Oo,1),au,64,0,[Pc,Qn,ar,Dr,er])))}function aV(){aV=U,E_e=new A3e("BY_SIZE",0),$0e=new A3e("BY_SIZE_AND_SHAPE",1)}function oV(){oV=U,Q0e=new D3e("EADES",0),yK=new D3e("FRUCHTERMAN_REINGOLD",1)}function pN(){pN=U,XK=new P3e("READING_DIRECTION",0),vLe=new P3e("ROTATION",1)}function hA(){hA=U,L8t=new nI,M8t=new $J,_8t=new vm,A8t=new hu,D8t=new zJ}function vht(e){this.b=new bt,this.a=new bt,this.c=new bt,this.d=new bt,this.e=e}function wht(e){this.g=e,this.f=new bt,this.a=b.Math.min(this.g.c.c,this.g.d.c)}function yht(e,t,n){Vq.call(this),Y6e(this),this.a=e,this.c=n,this.b=t.d,this.f=t.e}function lwn(e,t,n){var r,a;for(a=new G(n);a.a=0&&t0?t-1:t,ZJe(Fun(Vht(B4e(new L8,n),e.n),e.j),e.k)}function sc(e){var t,n;n=(t=new qie,t),qr((!e.q&&(e.q=new nt(Uf,e,11,10)),e.q),n)}function K6e(e){return(e.i&2?"interface ":e.i&1?"":"class ")+(Gg(e),e.o)}function cV(e){return iu(e,Ii)>0?Ii:iu(e,lo)<0?lo:Yr(e)}function Ay(e){return e<3?(Mh(e,Pwt),e+1):e=-.01&&e.a<=H1&&(e.a=0),e.b>=-.01&&e.b<=H1&&(e.b=0),e}function Y5(e){h6();var t,n;for(n=hCe,t=0;tn&&(n=e[t]);return n}function Tht(e,t){var n;if(n=oP(e.Dh(),t),!n)throw ue(new Yn(Ob+t+$fe));return n}function Ly(e,t){var n;for(n=e;ds(n);)if(n=ds(n),n==t)return!0;return!1}function xwn(e,t){var n,r,a;for(r=t.a.ld(),n=l(t.a.md(),16).gc(),a=0;ae||e>t)throw ue(new t3e("fromIndex: 0, toIndex: "+e+uEe+t))}function Lw(e){if(e<0)throw ue(new Yn("Illegal Capacity: "+e));this.g=this.aj(e)}function W6e(e,t){return A1(),f0(Ab),b.Math.abs(e-t)<=Ab||e==t||isNaN(e)&&isNaN(t)}function Xoe(e,t){var n,r,a,o;for(r=e.d,a=0,o=r.length;a0&&(e.a/=t,e.b/=t),e}function Ah(e){var t;return e.w?e.w:(t=dbn(e),t&&!t.Vh()&&(e.w=t),t)}function sE(e,t){var n,r;r=e.a,n=m4n(e,t,null),r!=t&&!e.e&&(n=ZE(e,t,n)),n&&n.oj()}function Lht(e,t,n){var r,a;r=t;do a=ze(e.p[r.p])+n,e.p[r.p]=a,r=e.a[r.p];while(r!=t)}function Mht(e,t,n){var r=function(){return e.apply(r,arguments)};return t.apply(r,n),r}function Awn(e){var t;return e==null?null:(t=l(e,195),$xn(t,t.length))}function Oe(e,t){if(e.g==null||t>=e.i)throw ue(new Vse(t,e.i));return e.Wi(t,e.g[t])}function Lwn(e,t){Cn();var n,r;for(r=new bt,n=0;n=14&&t<=16))),e}function Gr(e,t){var n;return nr(t),n=e[":"+t],BO(!!n,"Enum constant undefined: "+t),n}function Fr(e,t,n,r,a,o){var f;return f=Gae(e,t),Uht(n,f),f.i=a?8:0,f.f=r,f.e=a,f.g=o,f}function Q6e(e,t,n,r,a){this.d=t,this.k=r,this.f=a,this.o=-1,this.p=1,this.c=e,this.a=n}function J6e(e,t,n,r,a){this.d=t,this.k=r,this.f=a,this.o=-1,this.p=2,this.c=e,this.a=n}function Z6e(e,t,n,r,a){this.d=t,this.k=r,this.f=a,this.o=-1,this.p=6,this.c=e,this.a=n}function e7e(e,t,n,r,a){this.d=t,this.k=r,this.f=a,this.o=-1,this.p=7,this.c=e,this.a=n}function t7e(e,t,n,r,a){this.d=t,this.j=r,this.e=a,this.o=-1,this.p=4,this.c=e,this.a=n}function Ght(e,t){var n,r,a,o;for(r=t,a=0,o=r.length;a=0))throw ue(new Yn("tolerance ("+e+") must be >= 0"));return e}function Wht(e,t){var n;return De(t,44)?e.c.Mc(t):(n=Kce(e,t),YV(e,t),n)}function Jo(e,t,n){return Gm(e,t),Fu(e,n),i2(e,0),My(e,1),u2(e,!0),c2(e,!0),e}function mN(e,t){var n;if(n=e.gc(),t<0||t>n)throw ue(new my(t,n));return new f4e(e,t)}function bV(e,t){e.b=b.Math.max(e.b,t.d),e.e+=t.r+(e.a.c.length==0?0:e.c),vt(e.a,t)}function Yht(e){gy(e.c>=0),H5n(e.d,e.c)<0&&(e.a=e.a-1&e.d.a.length-1,e.b=e.d.c),e.c=-1}function mV(e){var t,n;for(n=e.c.Cc().Kc();n.Ob();)t=l(n.Pb(),16),t.$b();e.c.$b(),e.d=0}function jwn(e){var t,n,r,a;for(n=e.a,r=0,a=n.length;r=0}function c7e(e,t){e.r>0&&e.c0&&e.g!=0&&c7e(e.i,t/e.r*e.i.d))}function u7e(e,t){var n;n=e.c,e.c=t,e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,1,n,e.c))}function Zoe(e,t){var n;n=e.c,e.c=t,e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,4,n,e.c))}function fE(e,t){var n;n=e.k,e.k=t,e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,2,n,e.k))}function ece(e,t){var n;n=e.D,e.D=t,e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,2,n,e.D))}function wV(e,t){var n;n=e.f,e.f=t,e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,8,n,e.f))}function yV(e,t){var n;n=e.i,e.i=t,e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,7,n,e.i))}function l7e(e,t){var n;n=e.a,e.a=t,e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,8,n,e.a))}function h7e(e,t){var n;n=e.b,e.b=t,e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,0,n,e.b))}function f7e(e,t){var n;n=e.b,e.b=t,e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,0,n,e.b))}function d7e(e,t){var n;n=e.c,e.c=t,e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,1,n,e.c))}function g7e(e,t){var n;n=e.d,e.d=t,e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,1,n,e.d))}function Gwn(e,t,n){var r;e.b=t,e.a=n,r=(e.a&512)==512?new gJe:new J$,e.c=aSn(r,e.b,e.a)}function oft(e,t){return up(e.e,t)?(Fo(),Voe(t)?new nH(t,e):new yO(t,e)):new Ptt(t,e)}function Kwn(e){var t,n;return 0>e?new b3e:(t=e+1,n=new wut(t,e),new Uye(null,n))}function Wwn(e,t){Cn();var n;return n=new N8(1),Ia(e)?rc(n,e,t):ju(n.f,e,t),new tr(n)}function Ywn(e,t){var n,r;return n=e.c,r=t.e[e.p],r>0?l(jt(n.a,r-1),10):null}function Xwn(e,t){var n,r;return n=e.o+e.p,r=t.o+t.p,nt?(t<<=1,t>0?t:rL):t}function tce(e){switch(Cye(e.e!=3),e.e){case 2:return!1;case 0:return!0}return svn(e)}function uft(e,t){var n;return De(t,8)?(n=l(t,8),e.a==n.a&&e.b==n.b):!1}function Jwn(e,t){var n;n=new Ot,l(t.b,68),l(t.b,68),l(t.b,68),Vu(t.a,new k4e(e,n,t))}function lft(e,t){var n,r;for(r=t.vc().Kc();r.Ob();)n=l(r.Pb(),44),GN(e,n.ld(),n.md())}function p7e(e,t){var n;n=e.d,e.d=t,e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,11,n,e.d))}function xV(e,t){var n;n=e.j,e.j=t,e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,13,n,e.j))}function b7e(e,t){var n;n=e.b,e.b=t,e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,21,n,e.b))}function Zwn(e,t){(UH(),G1?null:t.c).length==0&&Srt(t,new Dt),rc(e.a,G1?null:t.c,t)}function e3n(e,t){t.Ug("Hierarchical port constraint processing",1),v6n(e),RIn(e),t.Vg()}function Ow(){Ow=U,o3=new vse("START",0),Rb=new vse("MIDDLE",1),a3=new vse("END",2)}function kV(){kV=U,$W=new U3e("P1_NODE_PLACEMENT",0),X6=new U3e("P2_EDGE_ROUTING",1)}function bb(){bb=U,Hx=new Ui(NEe),EK=new Ui(C3t),$L=new Ui(S3t),hB=new Ui(_3t)}function Nw(e){var t;return pae(e.f.g,e.d),mr(e.b),e.c=e.a,t=l(e.a.Pb(),44),e.b=L7e(e),t}function m7e(e){var t;return e.b==null?(Wp(),Wp(),dF):(t=e.ul()?e.tl():e.sl(),t)}function hft(e,t){var n;return n=t==null?-1:gc(e.b,t,0),n<0?!1:(rce(e,n),!0)}function d0(e,t){var n;return nr(t),n=t.g,e.b[n]?!1:(Ts(e.b,n,t),++e.c,!0)}function EV(e,t){var n,r;return n=1-t,r=e.a[n],e.a[n]=r.a[t],r.a[t]=e,e.b=!0,r.b=!1,r}function t3n(e,t){var n,r;for(r=t.Kc();r.Ob();)n=l(r.Pb(),272),e.b=!0,na(e.e,n),n.b=e}function n3n(e,t){var n,r;return n=l(Q(e,(Nt(),w4)),8),r=l(Q(t,w4),8),Yi(n.b,r.b)}function nce(e,t,n){var r,a,o;return o=t>>5,a=t&31,r=va(ub(e.n[n][o],Yr(l0(a,1))),3),r}function fft(e,t,n){var r,a,o;for(o=e.a.length-1,a=e.b,r=0;r0?1:0:(!e.c&&(e.c=XO(Zc(e.f))),e.c).e}function xft(e,t){t?e.B==null&&(e.B=e.D,e.D=null):e.B!=null&&(e.D=e.B,e.B=null)}function a3n(e,t){return wE(),e==s3&&t==o4||e==o4&&t==s3||e==M6&&t==a4||e==a4&&t==M6}function o3n(e,t){return wE(),e==s3&&t==a4||e==s3&&t==M6||e==o4&&t==M6||e==o4&&t==a4}function kft(e,t){return A1(),f0(H1),b.Math.abs(0-t)<=H1||t==0||isNaN(0)&&isNaN(t)?0:e/t}function Eft(e,t){return ze(Ge(fh(ON(fc(new bn(null,new kn(e.c.b,16)),new AYe(e)),t))))}function x7e(e,t){return ze(Ge(fh(ON(fc(new bn(null,new kn(e.c.b,16)),new _Ye(e)),t))))}function c3n(){return Ho(),he(le(F1e,1),it,259,0,[eW,vf,UL,tW,$T,B6,GL,RT,jT,nW])}function u3n(){return Nf(),he(le(TDe,1),it,243,0,[AW,AB,LB,xDe,kDe,yDe,EDe,LW,v3,x4])}function l3n(e,t){var n;t.Ug("General Compactor",1),n=p5n(l(at(e,(Sb(),Zde)),393)),n.Cg(e)}function h3n(e,t){var n,r;return n=l(at(e,(Sb(),qW)),17),r=l(at(t,qW),17),ru(n.a,r.a)}function k7e(e,t,n){var r,a;for(a=Rr(e,0);a.b!=a.d.c;)r=l(Br(a),8),r.a+=t,r.b+=n;return e}function gA(e,t,n){var r;for(r=e.b[n&e.f];r;r=r.b)if(n==r.a&&yd(t,r.g))return r;return null}function pA(e,t,n){var r;for(r=e.c[n&e.f];r;r=r.d)if(n==r.f&&yd(t,r.i))return r;return null}function f3n(e,t,n){var r,a,o;for(r=0,a=0;a>>31;r!=0&&(e[n]=r)}function oce(e,t,n,r,a,o){var f;this.c=e,f=new bt,txe(e,f,t,e.b,n,r,a,o),this.a=new Ua(f,0)}function Tft(){this.c=new Wz(0),this.b=new Wz(lCe),this.d=new Wz(hyt),this.a=new Wz(Lhe)}function of(e,t,n,r,a,o,f){Ur.call(this,e,t),this.d=n,this.e=r,this.c=a,this.b=o,this.a=O1(f)}function Os(e,t,n,r,a,o,f,g,w,E,C,L,B){return Lpt(e,t,n,r,a,o,f,g,w,E,C,L,B),$ce(e,!1),e}function d3n(e){return e.b.c.i.k==(Zn(),Us)?l(Q(e.b.c.i,(ft(),zi)),12):e.b.c}function Cft(e){return e.b.d.i.k==(Zn(),Us)?l(Q(e.b.d.i,(ft(),zi)),12):e.b.d}function g3n(e){var t;return t=jH(e),cw(t.a,0)?(Jz(),Jz(),A6t):(Jz(),new art(t.b))}function cce(e){var t;return t=e6e(e),cw(t.a,0)?(cy(),cy(),I0e):(cy(),new sae(t.b))}function uce(e){var t;return t=e6e(e),cw(t.a,0)?(cy(),cy(),I0e):(cy(),new sae(t.c))}function Sft(e){switch(e.g){case 2:return Ct(),er;case 4:return Ct(),ar;default:return e}}function _ft(e){switch(e.g){case 1:return Ct(),Dr;case 3:return Ct(),Qn;default:return e}}function Aft(e){switch(e.g){case 0:return new Mne;case 1:return new Dne;default:return null}}function lx(){lx=U,g1e=new vs("edgelabelcenterednessanalysis.includelabel",(Hn(),Pb))}function E7e(){E7e=U,CEt=Td(Ytt(fi(fi(new Xs,(uo(),bu),(vo(),PK)),_u,MK),mc),NK)}function Lft(){Lft=U,LEt=Td(Ytt(fi(fi(new Xs,(uo(),bu),(vo(),PK)),_u,MK),mc),NK)}function lce(){lce=U,qM=new uJe,npe=he(le(dl,1),S6,179,0,[]),X_t=he(le(Uf,1),LSe,62,0,[])}function dE(){dE=U,dB=new I3e("TO_INTERNAL_LTR",0),h1e=new I3e("TO_INPUT_DIRECTION",1)}function kl(){kl=U,EAe=new K2,xAe=new J3,kAe=new HJ,yAe=new wm,TAe=new VJ,CAe=new UJ}function p3n(e,t){t.Ug(q3t,1),S8e(Zun(new e_((g_(),new Jae(e,!1,!1,new cS))))),t.Vg()}function b3n(e,t,n){n.Ug("DFS Treeifying phase",1),O5n(e,t),DCn(e,t),e.a=null,e.b=null,n.Vg()}function vN(e,t){return Hn(),Ia(e)?E6e(e,ei(t)):fy(e)?Nae(e,Ge(t)):hy(e)?agn(e,Bt(t)):e.Fd(t)}function bA(e,t){var n,r;for(nr(t),r=t.vc().Kc();r.Ob();)n=l(r.Pb(),44),e.zc(n.ld(),n.md())}function m3n(e,t,n){var r;for(r=n.Kc();r.Ob();)if(!qH(e,t,r.Pb()))return!1;return!0}function v3n(e,t,n,r,a){var o;return n&&(o=ms(t.Dh(),e.c),a=n.Rh(t,-1-(o==-1?r:o),null,a)),a}function w3n(e,t,n,r,a){var o;return n&&(o=ms(t.Dh(),e.c),a=n.Th(t,-1-(o==-1?r:o),null,a)),a}function Mft(e){var t;if(e.b==-2){if(e.e==0)t=-1;else for(t=0;e.a[t]==0;t++);e.b=t}return e.b}function y3n(e){if(nr(e),e.length==0)throw ue(new gd("Zero length BigInteger"));S_n(this,e)}function T7e(e){this.i=e.gc(),this.i>0&&(this.g=this.aj(this.i+(this.i/8|0)+1),e.Qc(this.g))}function Dft(e,t,n){this.g=e,this.d=t,this.e=n,this.a=new bt,Ikn(this),Cn(),Vs(this.a,null)}function C7e(e,t){t.q=e,e.d=b.Math.max(e.d,t.r),e.b+=t.d+(e.a.c.length==0?0:e.c),vt(e.a,t)}function gE(e,t){var n,r,a,o;return a=e.c,n=e.c+e.b,o=e.d,r=e.d+e.a,t.a>a&&t.ao&&t.ba?n=a:Xn(t,n+1),e.a=tf(e.a,0,t)+(""+r)+w5e(e.a,n)}function $ft(e,t){e.a=bo(e.a,1),e.c=b.Math.min(e.c,t),e.b=b.Math.max(e.b,t),e.d=bo(e.d,t)}function _3n(e,t){return t1||e.Ob())return++e.a,e.g=0,t=e.i,e.Ob(),t;throw ue(new _c)}function Vft(e){switch(e.a.g){case 1:return new Yet;case 3:return new Ydt;default:return new nie}}function _7e(e,t){switch(t){case 1:return!!e.n&&e.n.i!=0;case 2:return e.k!=null}return Z5e(e,t)}function Zc(e){return _P>22),a=e.h+t.h+(r>>22),qu(n&eh,r&eh,a&hp)}function Jft(e,t){var n,r,a;return n=e.l-t.l,r=e.m-t.m+(n>>22),a=e.h-t.h+(r>>22),qu(n&eh,r&eh,a&hp)}function W3n(e){var t,n;for(zDn(e),n=new G(e.d);n.ar)throw ue(new my(t,r));return e.Si()&&(n=bot(e,n)),e.Ei(t,n)}function yE(e,t,n,r,a){var o,f;for(f=n;f<=a;f++)for(o=t;o<=r;o++)r6(e,o,f)||FU(e,o,f,!0,!1)}function cyn(e){h6();var t,n,r;for(n=We(Ea,dt,8,2,0,1),r=0,t=0;t<2;t++)r+=.5,n[t]=t7n(r,e);return n}function xE(e){var t,n,r;return t=~e.l+1&eh,n=~e.m+(t==0?1:0)&eh,r=~e.h+(t==0&&n==0?1:0)&hp,qu(t,n,r)}function P7e(e){var t;if(e<0)return lo;if(e==0)return 0;for(t=rL;!(t&e);t>>=1);return t}function mce(e,t,n){return e>=128?!1:e<64?I_(va(l0(1,e),n),0):I_(va(l0(1,e-64),t),0)}function _N(e,t,n){return n==null?(!e.q&&(e.q=new Pr),ax(e.q,t)):(!e.q&&(e.q=new Pr),ki(e.q,t,n)),e}function rt(e,t,n){return n==null?(!e.q&&(e.q=new Pr),ax(e.q,t)):(!e.q&&(e.q=new Pr),ki(e.q,t,n)),e}function u0t(e){var t,n;return n=new KH,pc(n,e),rt(n,(bb(),Hx),e),t=new Pr,FAn(e,n,t),hDn(e,n,t),n}function l0t(e){var t,n;return t=e.t-e.k[e.o.p]*e.d+e.j[e.o.p]>e.f,n=e.u+e.e[e.o.p]*e.d>e.f*e.s*e.d,t||n}function h0t(e,t){var n,r,a,o;for(n=!1,r=e.a[t].length,o=0;o=0,"Negative initial capacity"),BO(t>=0,"Non-positive load factor"),Nl(this)}function lyn(e,t,n,r,a){var o,f;if(f=e.length,o=n.length,t<0||r<0||a<0||t+a>f||r+a>o)throw ue(new _we)}function j7e(e,t){Cn();var n,r,a,o,f;for(f=!1,r=t,a=0,o=r.length;a1||t>=0&&e.b<3)}function yce(e){var t,n,r;t=~e.l+1&eh,n=~e.m+(t==0?1:0)&eh,r=~e.h+(t==0&&n==0?1:0)&hp,e.l=t,e.m=n,e.h=r}function q7e(e){Cn();var t,n,r;for(r=1,n=e.Kc();n.Ob();)t=n.Pb(),r=31*r+(t!=null?es(t):0),r=r|0;return r}function pyn(e,t,n,r,a){var o;return o=D9e(e,t),n&&yce(o),a&&(e=c7n(e,t),r?Nb=xE(e):Nb=qu(e.l,e.m,e.h)),o}function x0t(e,t,n){e.g=Rue(e,t,(Ct(),ar),e.b),e.d=Rue(e,n,ar,e.b),!(e.g.c==0||e.d.c==0)&&Jgt(e)}function k0t(e,t,n){e.g=Rue(e,t,(Ct(),er),e.j),e.d=Rue(e,n,er,e.j),!(e.g.c==0||e.d.c==0)&&Jgt(e)}function H7e(e,t){switch(t){case 7:return!!e.e&&e.e.i!=0;case 8:return!!e.d&&e.d.i!=0}return _8e(e,t)}function byn(e,t){switch(t.g){case 0:De(e.b,641)||(e.b=new jft);break;case 1:De(e.b,642)||(e.b=new Rit)}}function E0t(e){switch(e.g){case 0:return new One;default:throw ue(new Yn(FG+(e.f!=null?e.f:""+e.g)))}}function T0t(e){switch(e.g){case 0:return new gl;default:throw ue(new Yn(FG+(e.f!=null?e.f:""+e.g)))}}function myn(e,t,n){return!_k(Fi(new bn(null,new kn(e.c,16)),new Wl(new ltt(t,n)))).Bd((Am(),zx))}function C0t(e,t){return z8(BE(l(Q(t,(Hc(),y3)),88)),new lt(e.c.e.a-e.b.e.a,e.c.e.b-e.b.e.b))<=0}function vyn(e,t){for(;e.g==null&&!e.c?H5e(e):e.g==null||e.i!=0&&l(e.g[e.i-1],51).Ob();)kln(t,CU(e))}function Um(e){var t,n;for(n=new G(e.a.b);n.ar?1:0}function xyn(e){return vt(e.c,(hx(),gSt)),W6e(e.a,ze(Ge(It((Gce(),TW)))))?new Hne:new OXe(e)}function kyn(e){for(;!e.d||!e.d.Ob();)if(e.b&&!l_(e.b))e.d=l(X8(e.b),51);else return null;return e.d}function U7e(e){switch(e.g){case 1:return hyt;default:case 2:return 0;case 3:return Lhe;case 4:return lCe}}function Eyn(){Di();var e;return cpe||(e=Hhn(_b("M",!0)),e=oH(_b("M",!1),e),cpe=e,cpe)}function NV(){NV=U,Wge=new Cq("ELK",0),lPe=new Cq("JSON",1),uPe=new Cq("DOT",2),hPe=new Cq("SVG",3)}function yA(){yA=U,Sde=new _se("STACKED",0),Cde=new _se("REVERSE_STACKED",1),MB=new _se("SEQUENCED",2)}function xA(){xA=U,ZDe=new Ose(Id,0),Ide=new Ose("MIDDLE_TO_MIDDLE",1),OB=new Ose("AVOID_OVERLAP",2)}function TE(){TE=U,oLe=new MZ,cLe=new lI,X8t=new yj,Y8t=new DZ,W8t=new n8,aLe=(nr(W8t),new ke)}function PV(){PV=U,WNe=new lw(15),XSt=new Ha((pi(),_2),WNe),MM=n9,VNe=LSt,UNe=kv,KNe=i7,GNe=C4}function Q5(e,t){var n,r,a,o,f;for(r=t,a=0,o=r.length;a=e.b.c.length||(K7e(e,2*t+1),n=2*t+2,n0&&(t.Cd(n),n.i&&C4n(n))}function W7e(e,t,n){var r;for(r=n-1;r>=0&&e[r]===t[r];r--);return r<0?0:fse(va(e[r],Vo),va(t[r],Vo))?-1:1}function A0t(e,t,n){var r,a;this.g=e,this.c=t,this.a=this,this.d=this,a=cft(n),r=We(c6t,TP,227,a,0,1),this.b=r}function Cce(e,t,n,r,a){var o,f;for(f=n;f<=a;f++)for(o=t;o<=r;o++)if(r6(e,o,f))return!0;return!1}function Lyn(e,t){var n,r;for(r=e.Zb().Cc().Kc();r.Ob();)if(n=l(r.Pb(),16),n.Hc(t))return!0;return!1}function L0t(e,t,n){var r,a,o,f;for(nr(n),f=!1,o=e.fd(t),a=n.Kc();a.Ob();)r=a.Pb(),o.Rb(r),f=!0;return f}function Sce(e,t){var n,r;return r=l(Kn(e.a,4),129),n=We(epe,r0e,424,t,0,1),r!=null&&pu(r,0,n,0,r.length),n}function M0t(e,t){var n;return n=new ele((e.f&256)!=0,e.i,e.a,e.d,(e.f&16)!=0,e.j,e.g,t),e.e!=null||(n.c=e),n}function Myn(e,t){var n;return e===t?!0:De(t,85)?(n=l(t,85),Qxe(Mm(e),n.vc())):!1}function D0t(e,t,n){var r,a;for(a=n.Kc();a.Ob();)if(r=l(a.Pb(),44),e.Be(t,r.md()))return!0;return!1}function I0t(e,t,n){return e.d[t.p][n.p]||(O6n(e,t,n),e.d[t.p][n.p]=!0,e.d[n.p][t.p]=!0),e.a[t.p][n.p]}function Dyn(e,t){var n;return!e||e==t||!ns(t,(ft(),u3))?!1:(n=l(Q(t,(ft(),u3)),10),n!=e)}function _ce(e){switch(e.i){case 2:return!0;case 1:return!1;case-1:++e.c;default:return e.$l()}}function O0t(e){switch(e.i){case-2:return!0;case-1:return!1;case 1:--e.c;default:return e._l()}}function N0t(e){xot.call(this,"The given string does not match the expected format for individual spacings.",e)}function Iyn(e,t){var n;t.Ug("Min Size Preprocessing",1),n=a9e(e),Hi(e,(ug(),mM),n.a),Hi(e,UW,n.b),t.Vg()}function Oyn(e){var t,n,r;for(t=0,r=We(Ea,dt,8,e.b,0,1),n=Rr(e,0);n.b!=n.d.c;)r[t++]=l(Br(n),8);return r}function Ace(e,t,n){var r,a,o;for(r=new os,o=Rr(n,0);o.b!=o.d.c;)a=l(Br(o),8),ui(r,new Eo(a));L0t(e,t,r)}function Nyn(e,t){var n;return n=bo(e,t),fse(moe(e,t),0)|Aq(moe(e,n),0)?n:bo(EP,moe(ub(n,63),1))}function Pyn(e,t){var n,r;return n=l(e.d.Bc(t),16),n?(r=e.e.hc(),r.Gc(n),e.e.d-=n.gc(),n.$b(),r):null}function P0t(e){var t;if(t=e.a.c.length,t>0)return qk(t-1,e.a.c.length),t2(e.a,t-1);throw ue(new OQe)}function B0t(e,t,n){if(e>t)throw ue(new Yn(eG+e+Qwt+t));if(e<0||t>n)throw ue(new t3e(eG+e+fEe+t+uEe+n))}function CE(e,t){e.D==null&&e.B!=null&&(e.D=e.B,e.B=null),ece(e,t==null?null:(nr(t),t)),e.C&&e.hl(null)}function Byn(e,t){var n;n=It((Gce(),TW))!=null&&t.Sg()!=null?ze(Ge(t.Sg()))/ze(Ge(It(TW))):1,ki(e.b,t,n)}function Y7e(e,t){var n,r;if(r=e.c[t],r!=0)for(e.c[t]=0,e.d-=r,n=t+1;nMG?e-n>MG:n-e>MG}function K0t(e,t){var n;for(n=0;na&&(Egt(t.q,a),r=n!=t.q.d)),r}function W0t(e,t){var n,r,a,o,f,g,w,E;return w=t.i,E=t.j,r=e.f,a=r.i,o=r.j,f=w-a,g=E-o,n=b.Math.sqrt(f*f+g*g),n}function t8e(e,t){var n,r;return r=XV(e),r||(n=(kle(),P2t(t)),r=new kQe(n),qr(r.El(),e)),r}function DN(e,t){var n,r;return n=l(e.c.Bc(t),16),n?(r=e.hc(),r.Gc(n),e.d-=n.gc(),n.$b(),e.mc(r)):e.jc()}function Kyn(e,t){var n,r;for(r=Jl(e.d,1)!=0,n=!0;n;)n=!1,n=t.c.mg(t.e,r),n=n|cP(e,t,r,!1),r=!r;w7e(e)}function Y0t(e,t,n,r){var a,o;e.a=t,o=r?0:1,e.f=(a=new cpt(e.c,e.a,n,o),new $bt(n,e.a,a,e.e,e.b,e.c==(Iw(),oM)))}function FV(e){var t;return mr(e.a!=e.b),t=e.d.a[e.a],Ert(e.b==e.d.c&&t!=null),e.c=e.a,e.a=e.a+1&e.d.a.length-1,t}function X0t(e){var t;if(e.c!=0)return e.c;for(t=0;t=e.c.b:e.a<=e.c.b))throw ue(new _c);return t=e.a,e.a+=e.c.c,++e.b,pt(t)}function Oce(e){var t;return t=new bye(e.a),pc(t,e),rt(t,(ft(),zi),e),t.o.a=e.g,t.o.b=e.f,t.n.a=e.i,t.n.b=e.j,t}function Nce(e){return(Ct(),hl).Hc(e.j)?ze(Ge(Q(e,(ft(),zT)))):Ic(he(le(Ea,1),dt,8,0,[e.i.n,e.n,e.a])).b}function Yyn(e){var t;return t=Oq(TEt),l(Q(e,(ft(),Lu)),21).Hc((Ho(),$T))&&fi(t,(uo(),bu),(vo(),RK)),t}function Xyn(e){var t,n,r,a;for(a=new Ks,r=new G(e);r.a=0?t:-t;r>0;)r%2==0?(n*=n,r=r/2|0):(a*=n,r-=1);return t<0?1/a:a}function t4n(e,t){var n,r,a;for(a=1,n=e,r=t>=0?t:-t;r>0;)r%2==0?(n*=n,r=r/2|0):(a*=n,r-=1);return t<0?1/a:a}function yb(e,t){var n,r,a,o;return o=(a=e?XV(e):null,Dpt((r=t,a&&a.Gl(),r))),o==t&&(n=XV(e),n&&n.Gl()),o}function Q0t(e,t,n){var r,a;return a=e.f,e.f=t,e.Db&4&&!(e.Db&1)&&(r=new _a(e,1,0,a,t),n?n.nj(r):n=r),n}function J0t(e,t,n){var r,a;return a=e.b,e.b=t,e.Db&4&&!(e.Db&1)&&(r=new _a(e,1,3,a,t),n?n.nj(r):n=r),n}function r8e(e,t,n){var r,a;return a=e.a,e.a=t,e.Db&4&&!(e.Db&1)&&(r=new _a(e,1,1,a,t),n?n.nj(r):n=r),n}function Z0t(e){var t,n;if(e!=null)for(n=0;n=r||t-129&&e<128?(Fit(),t=e+128,n=t_e[t],!n&&(n=t_e[t]=new Cr(e)),n):new Cr(e)}function _E(e){var t,n;return e>-129&&e<128?(est(),t=e+128,n=s_e[t],!n&&(n=s_e[t]=new Wn(e)),n):new Wn(e)}function n1t(e,t){var n;e.a.c.length>0&&(n=l(jt(e.a,e.a.c.length-1),579),G7e(n,t))||vt(e.a,new yut(t))}function o4n(e){u0();var t,n;t=e.d.c-e.e.c,n=l(e.g,154),Vu(n.b,new pYe(t)),Vu(n.c,new bYe(t)),to(n.i,new mYe(t))}function r1t(e){var t;return t=new tb,t.a+="VerticalSegment ",wu(t,e.e),t.a+=" ",hi(t,Eye(new Zie,new G(e.k))),t.a}function Pce(e,t){var n,r,a;for(n=0,a=Oc(e,t).Kc();a.Ob();)r=l(a.Pb(),12),n+=Q(r,(ft(),jl))!=null?1:0;return n}function e6(e,t,n){var r,a,o;for(r=0,o=Rr(e,0);o.b!=o.d.c&&(a=ze(Ge(Br(o))),!(a>n));)a>=t&&++r;return r}function i1t(e,t){Xr(e);try{return e._b(t)}catch(n){if(n=bs(n),De(n,212)||De(n,169))return!1;throw ue(n)}}function s8e(e,t){Xr(e);try{return e.Hc(t)}catch(n){if(n=bs(n),De(n,212)||De(n,169))return!1;throw ue(n)}}function c4n(e,t){Xr(e);try{return e.Mc(t)}catch(n){if(n=bs(n),De(n,212)||De(n,169))return!1;throw ue(n)}}function Oy(e,t){Xr(e);try{return e.xc(t)}catch(n){if(n=bs(n),De(n,212)||De(n,169))return null;throw ue(n)}}function u4n(e,t){Xr(e);try{return e.Bc(t)}catch(n){if(n=bs(n),De(n,212)||De(n,169))return null;throw ue(n)}}function TA(e,t){switch(t.g){case 2:case 1:return Oc(e,t);case 3:case 4:return lf(Oc(e,t))}return Cn(),Cn(),_o}function CA(e){var t;return e.Db&64?g0(e):(t=new Af(g0(e)),t.a+=" (name: ",Xo(t,e.zb),t.a+=")",t.a)}function l4n(e){var t;return t=l(B1(e.c.c,""),233),t||(t=new nx(Ck(Tk(new ny,""),"Other")),h2(e.c.c,"",t)),t}function a8e(e,t,n){var r,a;return a=e.sb,e.sb=t,e.Db&4&&!(e.Db&1)&&(r=new _a(e,1,4,a,t),n?n.nj(r):n=r),n}function o8e(e,t,n){var r,a;return a=e.r,e.r=t,e.Db&4&&!(e.Db&1)&&(r=new _a(e,1,8,a,e.r),n?n.nj(r):n=r),n}function h4n(e,t,n){var r,a;return r=new Zg(e.e,4,13,(a=t.c,a||(Tn(),td)),null,f2(e,t),!1),n?n.nj(r):n=r,n}function f4n(e,t,n){var r,a;return r=new Zg(e.e,3,13,null,(a=t.c,a||(Tn(),td)),f2(e,t),!1),n?n.nj(r):n=r,n}function o2(e,t){var n,r;return n=l(t,691),r=n.el(),!r&&n.fl(r=De(t,90)?new Btt(e,l(t,29)):new sct(e,l(t,156))),r}function IN(e,t,n){var r;e._i(e.i+1),r=e.Zi(t,n),t!=e.i&&pu(e.g,t,e.g,t+1,e.i-t),Ts(e.g,t,r),++e.i,e.Mi(t,n),e.Ni()}function d4n(e,t){var n;return t.a&&(n=t.a.a.length,e.a?hi(e.a,e.b):e.a=new Th(e.d),fct(e.a,t.a,t.d.length,n)),e}function g4n(e,t){var n;e.c=t,e.a=w5n(t),e.a<54&&(e.f=(n=t.d>1?lct(t.a[0],t.a[1]):lct(t.a[0],0),Fm(t.e>0?n:r2(n))))}function ON(e,t){var n;return n=new on,e.a.Bd(n)?(Ok(),new Kie(nr(Ult(e,n.a,t)))):(fb(e),Ok(),Ok(),b_e)}function s1t(e,t){var n;e.c.length!=0&&(n=l(j1(e,We(wg,m2,10,e.c.length,0,1)),199),cye(n,new U9),Jpt(n,t))}function a1t(e,t){var n;e.c.length!=0&&(n=l(j1(e,We(wg,m2,10,e.c.length,0,1)),199),cye(n,new Wd),Jpt(n,t))}function Pi(e,t){return Ia(e)?vn(e,t):fy(e)?eit(e,t):hy(e)?(nr(e),qe(e)===qe(t)):t5e(e)?e.Fb(t):W4e(e)?Jtt(e,t):W5e(e,t)}function cf(e,t,n){if(t<0)d9e(e,n);else{if(!n.rk())throw ue(new Yn(Ob+n.xe()+kL));l(n,69).wk().Ek(e,e.hi(),t)}}function o1t(e,t,n){if(e<0||t>n)throw ue(new tc(eG+e+fEe+t+", size: "+n));if(e>t)throw ue(new Yn(eG+e+Qwt+t))}function c1t(e){var t;return e.Db&64?g0(e):(t=new Af(g0(e)),t.a+=" (source: ",Xo(t,e.d),t.a+=")",t.a)}function u1t(e){return e>=65&&e<=70?e-65+10:e>=97&&e<=102?e-97+10:e>=48&&e<=57?e-48:0}function p4n(e){YU();var t,n,r,a;for(n=eue(),r=0,a=n.length;r=0?kb(e):J_(kb(r2(e))))}function f1t(e,t,n,r,a,o){this.e=new bt,this.f=(qo(),sM),vt(this.e,e),this.d=t,this.a=n,this.b=r,this.f=a,this.c=o}function v4n(e,t,n){e.n=Lm(nm,[dt,ahe],[376,28],14,[n,ua(b.Math.ceil(t/32))],2),e.o=t,e.p=n,e.j=t-1>>1,e.k=n-1>>1}function d1t(e){return e-=e>>1&1431655765,e=(e>>2&858993459)+(e&858993459),e=(e>>4)+e&252645135,e+=e>>8,e+=e>>16,e&63}function g1t(e,t){var n,r;for(r=new or(e);r.e!=r.i.gc();)if(n=l(gr(r),142),qe(t)===qe(n))return!0;return!1}function w4n(e,t,n){var r,a,o;return o=(a=VE(e.b,t),a),o&&(r=l(VU(lN(e,o),""),29),r)?P9e(e,r,t,n):null}function Bce(e,t,n){var r,a,o;return o=(a=VE(e.b,t),a),o&&(r=l(VU(lN(e,o),""),29),r)?B9e(e,r,t,n):null}function y4n(e,t){var n;if(n=X5(e.i,t),n==null)throw ue(new dd("Node did not exist in input."));return S7e(t,n),null}function x4n(e,t){var n;if(n=oP(e,t),De(n,331))return l(n,35);throw ue(new Yn(Ob+t+"' is not a valid attribute"))}function _A(e,t,n){var r;if(r=e.gc(),t>r)throw ue(new my(t,r));if(e.Si()&&e.Hc(n))throw ue(new Yn(WP));e.Gi(t,n)}function k4n(e,t){t.Ug("Sort end labels",1),Is(Fi(Dc(new bn(null,new kn(e.b,16)),new hj),new J7),new aZ),t.Vg()}function Js(){Js=U,J1=new mO(cL,0),vc=new mO(Dx,1),uc=new mO(Mx,2),Q1=new mO(whe,3),wf=new mO("UP",4)}function PN(){PN=U,WW=new $se("P1_STRUCTURE",0),YW=new $se("P2_PROCESSING_ORDER",1),XW=new $se("P3_EXECUTION",2)}function p1t(){p1t=U,jTt=Td(Td(v_(Td(Td(v_(fi(new Xs,(wx(),lM),(WA(),Dde)),hM),YDe),QDe),fM),UDe),JDe)}function E4n(e){switch(l(Q(e,(ft(),hv)),311).g){case 1:rt(e,hv,(ep(),Ux));break;case 2:rt(e,hv,(ep(),F6))}}function T4n(e){switch(e){case 0:return new nJe;case 1:return new eJe;case 2:return new tJe;default:throw ue(new YI)}}function b1t(e){switch(e.g){case 2:return vc;case 1:return uc;case 4:return Q1;case 3:return wf;default:return J1}}function h8e(e,t){switch(e.b.g){case 0:case 1:return t;case 2:case 3:return new ef(t.d,0,t.a,t.b);default:return null}}function f8e(e){switch(e.g){case 1:return er;case 2:return Qn;case 3:return ar;case 4:return Dr;default:return Pc}}function BN(e){switch(e.g){case 1:return Dr;case 2:return er;case 3:return Qn;case 4:return ar;default:return Pc}}function $V(e){switch(e.g){case 1:return ar;case 2:return Dr;case 3:return er;case 4:return Qn;default:return Pc}}function d8e(e,t,n,r){switch(t){case 1:return!e.n&&(e.n=new nt(ec,e,1,7)),e.n;case 2:return e.k}return sxe(e,t,n,r)}function AA(e,t,n){var r,a;return e.Pj()?(a=e.Qj(),r=Hue(e,t,n),e.Jj(e.Ij(7,pt(n),r,t,a)),r):Hue(e,t,n)}function Fce(e,t){var n,r,a;e.d==null?(++e.e,--e.f):(a=t.ld(),n=t.Bi(),r=(n&Ii)%e.d.length,uvn(e,r,j2t(e,r,n,a)))}function AE(e,t){var n;n=(e.Bb&m0)!=0,t?e.Bb|=m0:e.Bb&=-1025,e.Db&4&&!(e.Db&1)&&Ni(e,new h0(e,1,10,n,t))}function LE(e,t){var n;n=(e.Bb&Xy)!=0,t?e.Bb|=Xy:e.Bb&=-4097,e.Db&4&&!(e.Db&1)&&Ni(e,new h0(e,1,12,n,t))}function ME(e,t){var n;n=(e.Bb&Sl)!=0,t?e.Bb|=Sl:e.Bb&=-8193,e.Db&4&&!(e.Db&1)&&Ni(e,new h0(e,1,15,n,t))}function DE(e,t){var n;n=(e.Bb&r4)!=0,t?e.Bb|=r4:e.Bb&=-2049,e.Db&4&&!(e.Db&1)&&Ni(e,new h0(e,1,11,n,t))}function C4n(e){var t;e.g&&(t=e.c.kg()?e.f:e.a,Y9e(t.a,e.o,!0),Y9e(t.a,e.o,!1),rt(e.o,(Nt(),Ms),(Ra(),Tv)))}function S4n(e){var t;if(!e.a)throw ue(new nc("Cannot offset an unassigned cut."));t=e.c-e.b,e.b+=t,zat(e,t),$at(e,t)}function _4n(e,t){var n;if(n=cr(e.k,t),n==null)throw ue(new dd("Port did not exist in input."));return S7e(t,n),null}function A4n(e){var t,n;for(n=B2t(Ah(e)).Kc();n.Ob();)if(t=ei(n.Pb()),YA(e,t))return Lmn((met(),R_t),t);return null}function m1t(e){var t,n;for(n=e.p.a.ec().Kc();n.Ob();)if(t=l(n.Pb(),218),t.f&&e.b[t.c]<-1e-10)return t;return null}function L4n(e){var t,n;for(n=hb(new tb,91),t=!0;e.Ob();)t||(n.a+=Co),t=!1,wu(n,e.Pb());return(n.a+="]",n).a}function M4n(e){var t,n,r;for(t=new bt,r=new G(e.b);r.at?1:e==t?e==0?Yi(1/e,1/t):0:isNaN(e)?isNaN(t)?0:1:-1}function I4n(e){var t;return t=e.a[e.c-1&e.a.length-1],t==null?null:(e.c=e.c-1&e.a.length-1,Ts(e.a,e.c,null),t)}function O4n(e){var t,n,r;for(r=0,n=e.length,t=0;t=1?vc:Q1):n}function F4n(e){switch(l(Q(e,(Nt(),bp)),223).g){case 1:return new Tee;case 3:return new Lee;default:return new Eee}}function xb(e){if(e.c)xb(e.c);else if(e.d)throw ue(new nc("Stream already terminated, can't be modified or used"))}function Bw(e,t,n){var r;return r=e.a.get(t),e.a.set(t,n===void 0?null:n),r===void 0?(++e.c,++e.b.g):++e.d,r}function R4n(e,t,n){var r,a;for(a=e.a.ec().Kc();a.Ob();)if(r=l(a.Pb(),10),EN(n,l(jt(t,r.p),16)))return r;return null}function p8e(e,t,n){var r;return r=0,t&&(B5(e.a)?r+=t.f.a/2:r+=t.f.b/2),n&&(B5(e.a)?r+=n.f.a/2:r+=n.f.b/2),r}function j4n(e,t,n){var r;r=n,!r&&(r=B4e(new L8,0)),r.Ug(L3t,2),kdt(e.b,t,r.eh(1)),eMn(e,t,r.eh(1)),rIn(t,r.eh(1)),r.Vg()}function b8e(e,t,n){var r,a;return r=(rb(),a=new AS,a),dV(r,t),fV(r,n),e&&qr((!e.a&&(e.a=new Ys(qh,e,5)),e.a),r),r}function jce(e){var t;return e.Db&64?g0(e):(t=new Af(g0(e)),t.a+=" (identifier: ",Xo(t,e.k),t.a+=")",t.a)}function $ce(e,t){var n;n=(e.Bb&eu)!=0,t?e.Bb|=eu:e.Bb&=-32769,e.Db&4&&!(e.Db&1)&&Ni(e,new h0(e,1,18,n,t))}function m8e(e,t){var n;n=(e.Bb&eu)!=0,t?e.Bb|=eu:e.Bb&=-32769,e.Db&4&&!(e.Db&1)&&Ni(e,new h0(e,1,18,n,t))}function IE(e,t){var n;n=(e.Bb&_d)!=0,t?e.Bb|=_d:e.Bb&=-16385,e.Db&4&&!(e.Db&1)&&Ni(e,new h0(e,1,16,n,t))}function v8e(e,t){var n;n=(e.Bb&Io)!=0,t?e.Bb|=Io:e.Bb&=-65537,e.Db&4&&!(e.Db&1)&&Ni(e,new h0(e,1,20,n,t))}function w8e(e){var t;return t=We(kf,Ad,28,2,15,1),e-=Io,t[0]=(e>>10)+AP&Zs,t[1]=(e&1023)+56320&Zs,If(t,0,t.length)}function $4n(e){var t;return t=jy(e),t>34028234663852886e22?gs:t<-34028234663852886e22?ia:t}function bo(e,t){var n;return wc(e)&&wc(t)&&(n=e+t,_P"+Bm(t.c):"e_"+es(t),e.b&&e.c?Bm(e.b)+"->"+Bm(e.c):"e_"+es(e))}function H4n(e,t){return vn(t.b&&t.c?Bm(t.b)+"->"+Bm(t.c):"e_"+es(t),e.b&&e.c?Bm(e.b)+"->"+Bm(e.c):"e_"+es(e))}function Fw(e,t){return A1(),f0(Ab),b.Math.abs(e-t)<=Ab||e==t||isNaN(e)&&isNaN(t)?0:et?1:uw(isNaN(e),isNaN(t))}function ip(){ip=U,Hge=new xq(cL,0),JB=new xq("POLYLINE",1),iC=new xq("ORTHOGONAL",2),s9=new xq("SPLINES",3)}function qV(){qV=U,YIe=new Rse("ASPECT_RATIO_DRIVEN",0),uge=new Rse("MAX_SCALE_DRIVEN",1),WIe=new Rse("AREA_DRIVEN",2)}function V4n(e,t,n){var r;try{dyn(e,t,n)}catch(a){throw a=bs(a),De(a,606)?(r=a,ue(new w6e(r))):ue(a)}return t}function U4n(e){var t,n,r;for(n=0,r=e.length;nt&&r.Ne(e[o-1],e[o])>0;--o)f=e[o],Ts(e,o,e[o-1]),Ts(e,o-1,f)}function sn(e,t){var n,r,a,o,f;if(n=t.f,h2(e.c.d,n,t),t.g!=null)for(a=t.g,o=0,f=a.length;ot){pct(n);break}}zO(n,t)}function Y4n(e,t){var n,r,a;r=G5(t),a=ze(Ge(Py(r,(Nt(),x0)))),n=b.Math.max(0,a/2-.5),FA(t,n,1),vt(e,new Net(t,n))}function X4n(e,t,n){var r;n.Ug("Straight Line Edge Routing",1),n.dh(t,yCe),r=l(at(t,(H5(),Y6)),27),rvt(e,r),n.dh(t,OG)}function y8e(e,t){e.n.c.length==0&&vt(e.n,new PH(e.s,e.t,e.i)),vt(e.b,t),exe(l(jt(e.n,e.n.c.length-1),209),t),jmt(e,t)}function LA(e){var t;this.a=(t=l(e.e&&e.e(),9),new Zh(t,l(c0(t,t.length),9),0)),this.b=We(wa,Rn,1,this.a.a.length,5,1)}function xc(e){var t;return Array.isArray(e)&&e.Tm===xe?_m(bh(e))+"@"+(t=es(e)>>>0,t.toString(16)):e.toString()}function Q4n(e,t){return e.h==SP&&e.m==0&&e.l==0?(t&&(Nb=qu(0,0,0)),ent((iE(),YSe))):(t&&(Nb=qu(e.l,e.m,e.h)),qu(0,0,0))}function J4n(e,t){switch(t.g){case 2:return e.b;case 1:return e.c;case 4:return e.d;case 3:return e.a;default:return!1}}function x1t(e,t){switch(t.g){case 2:return e.b;case 1:return e.c;case 4:return e.d;case 3:return e.a;default:return!1}}function x8e(e,t,n,r){switch(t){case 3:return e.f;case 4:return e.g;case 5:return e.i;case 6:return e.j}return d8e(e,t,n,r)}function HV(e,t){if(t==e.d)return e.e;if(t==e.e)return e.d;throw ue(new Yn("Node "+t+" not part of edge "+e))}function Z4n(e,t){var n;if(n=oP(e.Dh(),t),De(n,102))return l(n,19);throw ue(new Yn(Ob+t+"' is not a valid reference"))}function uf(e,t,n,r){if(t<0)$9e(e,n,r);else{if(!n.rk())throw ue(new Yn(Ob+n.xe()+kL));l(n,69).wk().Ck(e,e.hi(),t,r)}}function Ql(e){var t;if(e.b){if(Ql(e.b),e.b.d!=e.c)throw ue(new Xh)}else e.d.dc()&&(t=l(e.f.c.xc(e.e),16),t&&(e.d=t))}function e5n(e){py();var t,n,r,a;for(t=e.o.b,r=l(l($i(e.r,(Ct(),Dr)),21),87).Kc();r.Ob();)n=l(r.Pb(),117),a=n.e,a.b+=t}function t5n(e){var t,n,r;for(this.a=new bd,r=new G(e);r.a=a)return t.c+n;return t.c+t.b.gc()}function r5n(e,t){Fk();var n,r,a,o;for(r=Olt(e),a=t,nE(r,0,r.length,a),n=0;n0&&(r+=a,++n);return n>1&&(r+=e.d*(n-1)),r}function s5n(e){var t,n,r,a,o;return o=jxe(e),n=ZI(e.c),r=!n,r&&(a=new $p,e1(o,"knownLayouters",a),t=new uQe(a),to(e.c,t)),o}function T8e(e){var t,n,r;for(r=new Up,r.a+="[",t=0,n=e.gc();t0&&(Xn(t-1,e.length),e.charCodeAt(t-1)==58)&&!Hce(e,$M,zM))}function C8e(e,t){var n;return qe(e)===qe(t)?!0:De(t,92)?(n=l(t,92),e.e==n.e&&e.d==n.d&&Imn(e,n.a)):!1}function gx(e){switch(Ct(),e.g){case 4:return Qn;case 1:return ar;case 3:return Dr;case 2:return er;default:return Pc}}function u5n(e){var t,n;if(e.b)return e.b;for(n=G1?null:e.d;n;){if(t=G1?null:n.b,t)return t;n=G1?null:n.d}return Dk(),w_e}function S8e(e){var t,n,r;for(r=ze(Ge(e.a.of((pi(),iY)))),n=new G(e.a.Sf());n.a>5,t=e&31,r=We(Vr,di,28,n+1,15,1),r[n]=1<3;)a*=10,--o;e=(e+(a>>1))/a|0}return r.i=e,!0}function ms(e,t){var n,r,a;if(n=(e.i==null&&Sd(e),e.i),r=t.Lj(),r!=-1){for(a=n.length;r=0;--r)for(t=n[r],a=0;a>1,this.k=t-1>>1}function T5n(e){ZH(),l(e.of((pi(),Ub)),181).Hc((Zl(),hY))&&(l(e.of(S4),181).Fc((Rl(),a9)),l(e.of(Ub),181).Mc(hY))}function A1t(e){var t,n;t=e.d==(yx(),IT),n=Lxe(e),t&&!n||!t&&n?rt(e.a,(Nt(),Rd),(og(),VB)):rt(e.a,(Nt(),Rd),(og(),HB))}function Gce(){Gce=U,tq(),TW=(Nt(),m3),Qkt=O1(he(le(Cge,1),oCe,149,0,[SB,x0,H6,b3,y4,cde,GT,KT,ude,tM,q6,vv,V6]))}function C5n(e,t){var n;return n=l(yc(e,Pl(new zr,new ht,new Fn,he(le(oc,1),it,108,0,[(Fl(),Ec)]))),15),n.Qc(Yit(n.gc()))}function L1t(e,t){var n,r;if(r=new ba(e.a.ad(t,!0)),r.a.gc()<=1)throw ue(new S8);return n=r.a.ec().Kc(),n.Pb(),l(n.Pb(),40)}function S5n(e,t,n){var r,a;return r=ze(e.p[t.i.p])+ze(e.d[t.i.p])+t.n.b+t.a.b,a=ze(e.p[n.i.p])+ze(e.d[n.i.p])+n.n.b+n.a.b,a-r}function O8e(e,t){var n;return e.i>0&&(t.lengthe.i&&Ts(t,e.i,null),t}function UV(e){var t;return e.Db&64?CA(e):(t=new Af(CA(e)),t.a+=" (instanceClassName: ",Xo(t,e.D),t.a+=")",t.a)}function GV(e){var t,n,r,a;for(a=0,n=0,r=e.length;n0?(e._j(),r=t==null?0:es(t),a=(r&Ii)%e.d.length,n=j2t(e,a,r,t),n!=-1):!1}function M1t(e,t){var n,r;e.a=bo(e.a,1),e.c=b.Math.min(e.c,t),e.b=b.Math.max(e.b,t),e.d+=t,n=t-e.f,r=e.e+n,e.f=r-e.e-n,e.e=r}function N8e(e,t){switch(t){case 3:Mw(e,0);return;case 4:Dw(e,0);return;case 5:Uu(e,0);return;case 6:Gu(e,0);return}i8e(e,t)}function Rw(e,t){switch(t.g){case 1:return G8(e.j,(kl(),xAe));case 2:return G8(e.j,(kl(),EAe));default:return Cn(),Cn(),_o}}function P8e(e){ww();var t;switch(t=e.Pc(),t.length){case 0:return x0e;case 1:return new Sae(Xr(t[0]));default:return new ooe(U4n(t))}}function D1t(e,t){e.Xj();try{e.d.bd(e.e++,t),e.f=e.d.j,e.g=-1}catch(n){throw n=bs(n),De(n,77)?ue(new Xh):ue(n)}}function Wce(){Wce=U,ipe=new NS,MPe=new H0,DPe=new AI,IPe=new LI,OPe=new f8,NPe=new tre,PPe=new nre,BPe=new rre,FPe=new ire}function KV(e,t){iye();var n,r;return n=MO((zz(),zz(),NL)),r=null,t==n&&(r=l(xu(KSe,e),624)),r||(r=new Xst(e),t==n&&rc(KSe,e,r)),r}function I1t(e){By();var t;return(e.q?e.q:(Cn(),Cn(),mg))._b((Nt(),g3))?t=l(Q(e,g3),203):t=l(Q(eo(e),eM),203),t}function Py(e,t){var n,r;return r=null,ns(e,(Nt(),kW))&&(n=l(Q(e,kW),96),n.pf(t)&&(r=n.of(t))),r==null&&(r=Q(eo(e),t)),r}function O1t(e,t){var n,r,a;return De(t,44)?(n=l(t,44),r=n.ld(),a=Oy(e.Rc(),r),yd(a,n.md())&&(a!=null||e.Rc()._b(r))):!1}function n1(e,t){var n,r,a;return e.f>0&&(e._j(),r=t==null?0:es(t),a=(r&Ii)%e.d.length,n=y9e(e,a,r,t),n)?n.md():null}function Ru(e,t,n){var r,a,o;return e.Pj()?(r=e.i,o=e.Qj(),IN(e,r,t),a=e.Ij(3,null,t,r,o),n?n.nj(a):n=a):IN(e,e.i,t),n}function A5n(e,t,n){var r,a;return r=new Zg(e.e,4,10,(a=t.c,De(a,90)?l(a,29):(Tn(),Kf)),null,f2(e,t),!1),n?n.nj(r):n=r,n}function L5n(e,t,n){var r,a;return r=new Zg(e.e,3,10,null,(a=t.c,De(a,90)?l(a,29):(Tn(),Kf)),f2(e,t),!1),n?n.nj(r):n=r,n}function N1t(e){py();var t;return t=new Eo(l(e.e.of((pi(),i7)),8)),e.B.Hc((Zl(),aC))&&(t.a<=0&&(t.a=20),t.b<=0&&(t.b=20)),t}function kb(e){Cd();var t,n;return n=Yr(e),t=Yr(ub(e,32)),t!=0?new qot(n,t):n>10||n<0?new Qg(1,n):y6t[n]}function RN(e,t){var n;return wc(e)&&wc(t)&&(n=e%t,_P=0?o=o.a[1]:(a=o,o=o.a[0])}return a}function $N(e,t,n){var r,a,o;for(a=null,o=e.b;o;){if(r=e.a.Ne(t,o.d),n&&r==0)return o;r<=0?o=o.a[0]:(a=o,o=o.a[1])}return a}function P5n(e,t,n,r){var a,o,f;return a=!1,RMn(e.f,n,r)&&(r6n(e.f,e.a[t][n],e.a[t][r]),o=e.a[t],f=o[r],o[r]=o[n],o[n]=f,a=!0),a}function R1t(e,t,n){var r,a,o,f;for(a=l(cr(e.b,n),183),r=0,f=new G(t.j);f.a>5,t&=31,a=e.d+n+(t==0?0:1),r=We(Vr,di,28,a,15,1),Oxn(r,e.a,n,t),o=new Im(e.e,a,r),iA(o),o}function B5n(e,t){var n,r,a;for(r=new hr(dr(qs(e).a.Kc(),new j));jr(r);)if(n=l(xr(r),18),a=n.d.i,a.c==t)return!1;return!0}function R8e(e,t,n){var r,a,o,f,g;return f=e.k,g=t.k,r=n[f.g][g.g],a=Ge(Py(e,r)),o=Ge(Py(t,r)),b.Math.max((nr(a),a),(nr(o),o))}function F5n(){return Error.stackTraceLimit>0?(b.Error.stackTraceLimit=Error.stackTraceLimit=64,!0):"stack"in new Error}function R5n(e,t){return A1(),A1(),f0(Ab),(b.Math.abs(e-t)<=Ab||e==t||isNaN(e)&&isNaN(t)?0:et?1:uw(isNaN(e),isNaN(t)))>0}function j8e(e,t){return A1(),A1(),f0(Ab),(b.Math.abs(e-t)<=Ab||e==t||isNaN(e)&&isNaN(t)?0:et?1:uw(isNaN(e),isNaN(t)))<0}function $1t(e,t){return A1(),A1(),f0(Ab),(b.Math.abs(e-t)<=Ab||e==t||isNaN(e)&&isNaN(t)?0:et?1:uw(isNaN(e),isNaN(t)))<=0}function Xce(e,t){for(var n=0;!t[n]||t[n]=="";)n++;for(var r=t[n++];n0&&this.b>0&&(this.g=aH(this.c,this.b,this.a))}function j5n(e,t){var n=e.a,r;t=String(t),n.hasOwnProperty(t)&&(r=n[t]);var a=(vce(),_0e)[typeof r],o=a?a(r):Z7e(typeof r);return o}function NE(e){var t,n,r;if(r=null,t=Pd in e.a,n=!t,n)throw ue(new dd("Every element must have an id."));return r=xx(Wg(e,Pd)),r}function jw(e){var t,n;for(n=fpt(e),t=null;e.c==2;)Li(e),t||(t=(Di(),Di(),new B_(2)),Qm(t,n),n=t),n.Jm(fpt(e));return n}function YV(e,t){var n,r,a;return e._j(),r=t==null?0:es(t),a=(r&Ii)%e.d.length,n=y9e(e,a,r,t),n?(Wht(e,n),n.md()):null}function K1t(e,t){return e.e>t.e?1:e.et.d?e.e:e.d=48&&e<48+b.Math.min(10,10)?e-48:e>=97&&e<97?e-97+10:e>=65&&e<65?e-65+10:-1}function $5n(e,t){if(t.c==e)return t.d;if(t.d==e)return t.c;throw ue(new Yn("Input edge is not connected to the input port."))}function z5n(e){if(QV(wT,e))return Hn(),ST;if(QV(Ffe,e))return Hn(),Pb;throw ue(new Yn("Expecting true or false"))}function q8e(e){switch(typeof e){case Ile:return s2(e);case Qke:return j8(e);case Cx:return Art(e);default:return e==null?0:fw(e)}}function Td(e,t){if(e.a<0)throw ue(new nc("Did not call before(...) or after(...) before calling add(...)."));return Bye(e,e.a,t),e}function H8e(e){return BH(),De(e,162)?l(cr(lF,C6t),295).Rg(e):Hu(lF,bh(e))?l(cr(lF,bh(e)),295).Rg(e):null}function Ku(e){var t,n;return e.Db&32||(n=(t=l(Kn(e,16),29),yr(t||e.ii())-yr(e.ii())),n!=0&&px(e,32,We(wa,Rn,1,n,5,1))),e}function px(e,t,n){var r;e.Db&t?n==null?TEn(e,t):(r=mue(e,t),r==-1?e.Eb=n:Ts(jm(e.Eb),r,n)):n!=null&&KCn(e,t,n)}function q5n(e,t,n,r){var a,o;t.c.length!=0&&(a=FTn(n,r),o=Rkn(t),Is(lV(new bn(null,new kn(o,1)),new a8),new Cat(e,n,a,r)))}function H5n(e,t){var n,r,a,o;return r=e.a.length-1,n=t-e.b&r,o=e.c-t&r,a=e.c-e.b&r,Ert(n=o?(zyn(e,t),-1):($yn(e,t),1)}function XV(e){var t,n,r;if(r=e.Jh(),!r)for(t=0,n=e.Ph();n;n=n.Ph()){if(++t>ohe)return n.Qh();if(r=n.Jh(),r||n==e)break}return r}function Y1t(e,t){var n;return qe(t)===qe(e)?!0:!De(t,21)||(n=l(t,21),n.gc()!=e.gc())?!1:e.Ic(n)}function V5n(e,t){return e.et.e?1:e.ft.f?1:es(e)-es(t)}function QV(e,t){return nr(e),t==null?!1:vn(e,t)?!0:e.length==t.length&&vn(e.toLowerCase(),t.toLowerCase())}function ap(e){var t,n;return iu(e,-129)>0&&iu(e,128)<0?(Zit(),t=Yr(e)+128,n=n_e[t],!n&&(n=n_e[t]=new Or(e)),n):new Or(e)}function Km(){Km=U,c4=new dq(Id,0),bAe=new dq("INSIDE_PORT_SIDE_GROUPS",1),o1e=new dq("GROUP_MODEL_ORDER",2),c1e=new dq($Ee,3)}function U5n(e){var t;return e.b||Run(e,(t=Ffn(e.e,e.a),!t||!vn(Ffe,n1((!t.b&&(t.b=new dh((Tn(),No),Yc,t)),t.b),"qualified")))),e.c}function G5n(e,t){var n,r;for(n=(Xn(t,e.length),e.charCodeAt(t)),r=t+1;r2e3&&(l6t=e,oK=b.setTimeout(Hun,10))),aK++==0?(swn((Xwe(),GSe)),!0):!1}function a6n(e,t,n){var r;(I6t?(u5n(e),!0):O6t||P6t?(Dk(),!0):N6t&&(Dk(),!1))&&(r=new fit(t),r.b=n,g9n(e,r))}function Jce(e,t){var n;n=!e.A.Hc((mh(),Cv))||e.q==(Ra(),Mu),e.u.Hc((Rl(),vp))?n?YDn(e,t):Vvt(e,t):e.u.Hc(Yb)&&(n?pDn(e,t):swt(e,t))}function tdt(e){var t;qe(at(e,(pi(),n7)))===qe((rp(),oY))&&(ds(e)?(t=l(at(ds(e),n7),346),Hi(e,n7,t)):Hi(e,n7,DM))}function o6n(e){var t,n;return ns(e.d.i,(Nt(),HT))?(t=l(Q(e.c.i,HT),17),n=l(Q(e.d.i,HT),17),ru(t.a,n.a)>0):!1}function ndt(e,t,n){return new ef(b.Math.min(e.a,t.a)-n/2,b.Math.min(e.b,t.b)-n/2,b.Math.abs(e.a-t.a)+n,b.Math.abs(e.b-t.b)+n)}function rdt(e){var t;this.d=new bt,this.j=new qa,this.g=new qa,t=e.g.b,this.f=l(Q(eo(t),(Nt(),Rh)),88),this.e=ze(Ge(tU(t,y4)))}function idt(e){this.d=new bt,this.e=new e2,this.c=We(Vr,di,28,(Ct(),he(le(Oo,1),au,64,0,[Pc,Qn,ar,Dr,er])).length,15,1),this.b=e}function G8e(e,t,n){var r;switch(r=n[e.g][t],e.g){case 1:case 3:return new lt(0,r);case 2:case 4:return new lt(r,0);default:return null}}function sdt(e,t,n){var r,a;a=l(GO(t.f),205);try{a.rf(e,n),lat(t.f,a)}catch(o){throw o=bs(o),De(o,103)?(r=o,ue(r)):ue(o)}}function adt(e,t,n){var r,a,o,f,g,w;return r=null,g=Fke(hE(),t),o=null,g&&(a=null,w=Pke(g,n),f=null,w!=null&&(f=e.qf(g,w)),a=f,o=a),r=o,r}function Zce(e,t,n,r){var a;if(a=e.length,t>=a)return a;for(t=t>0?t:0;tr&&Ts(t,r,null),t}function odt(e,t){var n,r;for(r=e.a.length,t.lengthr&&Ts(t,r,null),t}function PE(e,t){var n,r;if(++e.j,t!=null&&(n=(r=e.a.Cb,De(r,99)?l(r,99).th():null),fEn(t,n))){px(e.a,4,n);return}px(e.a,4,l(t,129))}function c6n(e){var t;if(e==null)return null;if(t=dTn(Tu(e,!0)),t==null)throw ue(new Jie("Invalid hexBinary value: '"+e+"'"));return t}function JV(e,t,n){var r;t.a.length>0&&(vt(e.b,new Ait(t.a,n)),r=t.a.length,0r&&(t.a+=Mnt(We(kf,Ad,28,-r,15,1))))}function cdt(e,t,n){var r,a,o;if(!n[t.d])for(n[t.d]=!0,a=new G(Z5(t));a.a=e.b>>1)for(r=e.c,n=e.b;n>t;--n)r=r.b;else for(r=e.a.a,n=0;n=0?e.Wh(a):que(e,r)):n<0?que(e,r):l(r,69).wk().Bk(e,e.hi(),n)}function fdt(e){var t,n,r;for(r=(!e.o&&(e.o=new xl((su(),Cg),L2,e,0)),e.o),n=r.c.Kc();n.e!=n.i.gc();)t=l(n.Yj(),44),t.md();return iN(r)}function It(e){var t;if(De(e.a,4)){if(t=H8e(e.a),t==null)throw ue(new nc(Nyt+e.b+"'. "+Oyt+(Gg(hF),hF.k)+JCe));return t}else return e.a}function b6n(e,t){var n,r;if(e.j.length!=t.j.length)return!1;for(n=0,r=e.j.length;n=64&&t<128&&(a=Q0(a,l0(1,t-64)));return a}function tU(e,t){var n,r;return r=null,ns(e,(pi(),r9))&&(n=l(Q(e,r9),96),n.pf(t)&&(r=n.of(t))),r==null&&eo(e)&&(r=Q(eo(e),t)),r}function m6n(e,t){var n;return n=l(Q(e,(Nt(),cc)),75),Zse(t,O8t)?n?Ch(n):(n=new bl,rt(e,cc,n)):n&&rt(e,cc,null),n}function IA(){IA=U,X_e=(pi(),_Ne),W0e=oNe,I7t=Z6,Y_e=_2,B7t=(dU(),A_e),P7t=S_e,F7t=M_e,N7t=C_e,O7t=(Lce(),G_e),K0e=L7t,W_e=M7t,vK=D7t}function nU(e){switch(w3e(),this.c=new bt,this.d=e,e.g){case 0:case 2:this.a=_5e(pAe),this.b=gs;break;case 3:case 1:this.a=pAe,this.b=ia}}function v6n(e){var t;U8(l(Q(e,(Nt(),Ms)),101))&&(t=e.b,e2t((Sn(0,t.c.length),l(t.c[0],30))),e2t(l(jt(t,t.c.length-1),30)))}function w6n(e,t){t.Ug("Self-Loop post-processing",1),Is(Fi(Fi(Dc(new bn(null,new kn(e.b,16)),new RZ),new jZ),new $Z),new Ej),t.Vg()}function ddt(e,t,n){var r,a;if(e.c)Uu(e.c,e.c.i+t),Gu(e.c,e.c.j+n);else for(a=new G(e.b);a.a=0&&(n.d=e.t);break;case 3:e.t>=0&&(n.a=e.t)}e.C&&(n.b=e.C.b,n.c=e.C.c)}function OA(){OA=U,vDe=new hO(cCe,0),vde=new hO($he,1),wde=new hO("LINEAR_SEGMENTS",2),rM=new hO("BRANDES_KOEPF",3),iM=new hO(cyt,4)}function NA(){NA=U,uB=new hq(nG,0),bK=new hq(yhe,1),mK=new hq(xhe,2),lB=new hq(khe,3),uB.a=!1,bK.a=!0,mK.a=!1,lB.a=!0}function bx(){bx=U,aB=new lq(nG,0),sB=new lq(yhe,1),oB=new lq(xhe,2),cB=new lq(khe,3),aB.a=!1,sB.a=!0,oB.a=!1,cB.a=!0}function mx(e,t,n,r){var a;return n>=0?e.Sh(t,n,r):(e.Ph()&&(r=(a=e.Fh(),a>=0?e.Ah(r):e.Ph().Th(e,-1-a,null,r))),e.Ch(t,n,r))}function K8e(e,t){switch(t){case 7:!e.e&&(e.e=new Ln(js,e,7,4)),$r(e.e);return;case 8:!e.d&&(e.d=new Ln(js,e,8,5)),$r(e.d);return}N8e(e,t)}function Hi(e,t,n){return n==null?(!e.o&&(e.o=new xl((su(),Cg),L2,e,0)),YV(e.o,t)):(!e.o&&(e.o=new xl((su(),Cg),L2,e,0)),GN(e.o,t,n)),e}function mdt(e,t){Cn();var n,r,a,o;for(n=e,o=t,De(e,21)&&!De(t,21)&&(n=t,o=e),a=n.Kc();a.Ob();)if(r=a.Pb(),o.Hc(r))return!1;return!0}function T6n(e,t,n,r){if(t.an.b)return!0}return!1}function iue(e,t){return Ia(e)?!!r6t[t]:e.Sm?!!e.Sm[t]:fy(e)?!!n6t[t]:hy(e)?!!t6t[t]:!1}function C6n(e){var t;t=e.a;do t=l(xr(new hr(dr(ka(t).a.Kc(),new j))),18).c.i,t.k==(Zn(),Aa)&&e.b.Fc(t);while(t.k==(Zn(),Aa));e.b=lf(e.b)}function vdt(e,t){var n,r,a;for(a=e,r=new hr(dr(ka(t).a.Kc(),new j));jr(r);)n=l(xr(r),18),n.c.i.c&&(a=b.Math.max(a,n.c.i.c.p));return a}function S6n(e,t){var n,r,a;for(a=0,r=l(l($i(e.r,t),21),87).Kc();r.Ob();)n=l(r.Pb(),117),a+=n.d.d+n.b.Mf().b+n.d.a,r.Ob()&&(a+=e.w);return a}function _6n(e,t){var n,r,a;for(a=0,r=l(l($i(e.r,t),21),87).Kc();r.Ob();)n=l(r.Pb(),117),a+=n.d.b+n.b.Mf().a+n.d.c,r.Ob()&&(a+=e.w);return a}function wdt(e){var t,n,r,a;if(r=0,a=Hy(e),a.c.length==0)return 1;for(n=new G(a);n.a=0?e.Lh(f,n,!0):Hw(e,o,n)):l(o,69).wk().yk(e,e.hi(),a,n,r)}function D6n(e,t,n,r){var a,o;o=t.pf((pi(),r7))?l(t.of(r7),21):e.j,a=p4n(o),a!=(YU(),H0e)&&(n&&!$8e(a)||Jxe(gTn(e,a,r),t))}function I6n(e){switch(e.g){case 1:return Pw(),iB;case 3:return Pw(),rB;case 2:return Pw(),U0e;case 4:return Pw(),V0e;default:return null}}function O6n(e,t,n){if(e.e)switch(e.b){case 1:Epn(e.c,t,n);break;case 0:Tpn(e.c,t,n)}else $ct(e.c,t,n);e.a[t.p][n.p]=e.c.i,e.a[n.p][t.p]=e.c.e}function ydt(e){var t,n;if(e==null)return null;for(n=We(wg,dt,199,e.length,0,2),t=0;t=0)return a;if(e.ol()){for(r=0;r=a)throw ue(new my(t,a));if(e.Si()&&(r=e.dd(n),r>=0&&r!=t))throw ue(new Yn(WP));return e.Xi(t,n)}function W8e(e,t){if(this.a=l(Xr(e),253),this.b=l(Xr(t),253),e.Ed(t)>0||e==(Uie(),w0e)||t==(Gie(),y0e))throw ue(new Yn("Invalid range: "+Hct(e,t)))}function xdt(e){var t,n;for(this.b=new bt,this.c=e,this.a=!1,n=new G(e.a);n.a0),(t&-t)==t)return ua(t*Jl(e,31)*4656612873077393e-25);do n=Jl(e,31),r=n%t;while(n-r+(t-1)<0);return ua(r)}function j6n(e,t,n){switch(n.g){case 1:e.a=t.a/2,e.b=0;break;case 2:e.a=t.a,e.b=t.b/2;break;case 3:e.a=t.a/2,e.b=t.b;break;case 4:e.a=0,e.b=t.b/2}}function zN(e,t,n,r){var a,o;for(a=t;a1&&(o=P6n(e,t)),o}function Tdt(e){var t;return t=ze(Ge(at(e,(pi(),QB))))*b.Math.sqrt((!e.a&&(e.a=new nt(Ai,e,10,11)),e.a).i),new lt(t,t/ze(Ge(at(e,sY))))}function aue(e){var t;return e.f&&e.f.Vh()&&(t=l(e.f,54),e.f=l(yb(e,t),84),e.f!=t&&e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,9,8,t,e.f))),e.f}function oue(e){var t;return e.i&&e.i.Vh()&&(t=l(e.i,54),e.i=l(yb(e,t),84),e.i!=t&&e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,9,7,t,e.i))),e.i}function Ro(e){var t;return e.b&&e.b.Db&64&&(t=e.b,e.b=l(yb(e,t),19),e.b!=t&&e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,9,21,t,e.b))),e.b}function oU(e,t){var n,r,a;e.d==null?(++e.e,++e.f):(r=t.Bi(),cCn(e,e.f+1),a=(r&Ii)%e.d.length,n=e.d[a],!n&&(n=e.d[a]=e.dk()),n.Fc(t),++e.f)}function Q8e(e,t,n){var r;return t.tk()?!1:t.Ik()!=-2?(r=t.ik(),r==null?n==null:Pi(r,n)):t.qk()==e.e.Dh()&&n==null}function cU(){var e;Mh(16,Pwt),e=cft(16),this.b=We(k0e,TP,303,e,0,1),this.c=We(k0e,TP,303,e,0,1),this.a=null,this.e=null,this.i=0,this.f=e-1,this.g=0}function op(e){r4e.call(this),this.k=(Zn(),Ps),this.j=(Mh(6,Yy),new Bu(6)),this.b=(Mh(2,Yy),new Bu(2)),this.d=new $ie,this.f=new Rwe,this.a=e}function z6n(e){var t,n;e.c.length<=1||(t=Abt(e,(Ct(),Dr)),ppt(e,l(t.a,17).a,l(t.b,17).a),n=Abt(e,er),ppt(e,l(n.a,17).a,l(n.b,17).a))}function q6n(e,t,n){var r,a;for(a=e.a.b,r=a.c.length;r102?-1:e<=57?e-48:e<65?-1:e<=70?e-65+10:e<97?-1:e-97+10}function fue(e,t){if(e==null)throw ue(new D8("null key in entry: null="+t));if(t==null)throw ue(new D8("null value in entry: "+e+"=null"))}function U6n(e,t){for(var n,r;e.Ob();)if(!t.Ob()||(n=e.Pb(),r=t.Pb(),!(qe(n)===qe(r)||n!=null&&Pi(n,r))))return!1;return!t.Ob()}function _dt(e,t){var n;return n=he(le(Na,1),Zo,28,15,[Dce(e.a[0],t),Dce(e.a[1],t),Dce(e.a[2],t)]),e.d&&(n[0]=b.Math.max(n[0],n[2]),n[2]=n[0]),n}function Adt(e,t){var n;return n=he(le(Na,1),Zo,28,15,[BV(e.a[0],t),BV(e.a[1],t),BV(e.a[2],t)]),e.d&&(n[0]=b.Math.max(n[0],n[2]),n[2]=n[0]),n}function Z8e(e,t,n){U8(l(Q(t,(Nt(),Ms)),101))||(d6e(e,t,d2(t,n)),d6e(e,t,d2(t,(Ct(),Dr))),d6e(e,t,d2(t,Qn)),Cn(),Vs(t.j,new IYe(e)))}function Ldt(e){var t,n;for(e.c||lMn(e),n=new bl,t=new G(e.a),re(t);t.a0&&(Xn(0,t.length),t.charCodeAt(0)==43)?(Xn(1,t.length+1),t.substr(1)):t))}function s7n(e){var t;return e==null?null:new ob((t=Tu(e,!0),t.length>0&&(Xn(0,t.length),t.charCodeAt(0)==43)?(Xn(1,t.length+1),t.substr(1)):t))}function txe(e,t,n,r,a,o,f,g){var w,E;r&&(w=r.a[0],w&&txe(e,t,n,w,a,o,f,g),xue(e,n,r.d,a,o,f,g)&&t.Fc(r),E=r.a[1],E&&txe(e,t,n,E,a,o,f,g))}function r6(e,t,n){try{return cw(nce(e,t,n),1)}catch(r){throw r=bs(r),De(r,333)?ue(new tc(Ehe+e.o+"*"+e.p+The+t+Co+n+Che)):ue(r)}}function Ndt(e,t,n){try{return cw(nce(e,t,n),0)}catch(r){throw r=bs(r),De(r,333)?ue(new tc(Ehe+e.o+"*"+e.p+The+t+Co+n+Che)):ue(r)}}function Pdt(e,t,n){try{return cw(nce(e,t,n),2)}catch(r){throw r=bs(r),De(r,333)?ue(new tc(Ehe+e.o+"*"+e.p+The+t+Co+n+Che)):ue(r)}}function Bdt(e,t){if(e.g==-1)throw ue(new pl);e.Xj();try{e.d.hd(e.g,t),e.f=e.d.j}catch(n){throw n=bs(n),De(n,77)?ue(new Xh):ue(n)}}function a7n(e){var t,n,r,a,o;for(r=new G(e.b);r.ao&&Ts(t,o,null),t}function o7n(e,t){var n,r;if(r=e.gc(),t==null){for(n=0;n0&&(w+=a),E[C]=f,f+=g*(w+r)}function Rdt(e){var t,n,r;for(r=e.f,e.n=We(Na,Zo,28,r,15,1),e.d=We(Na,Zo,28,r,15,1),t=0;t0?e.c:0),++a;e.b=r,e.d=o}function Hdt(e,t){var n;return n=he(le(Na,1),Zo,28,15,[X8e(e,(t1(),Gc),t),X8e(e,$u,t),X8e(e,Kc,t)]),e.f&&(n[0]=b.Math.max(n[0],n[2]),n[2]=n[0]),n}function p7n(e,t,n){var r;try{FU(e,t+e.j,n+e.k,!1,!0)}catch(a){throw a=bs(a),De(a,77)?(r=a,ue(new tc(r.g+iG+t+Co+n+")."))):ue(a)}}function b7n(e,t,n){var r;try{FU(e,t+e.j,n+e.k,!0,!1)}catch(a){throw a=bs(a),De(a,77)?(r=a,ue(new tc(r.g+iG+t+Co+n+")."))):ue(a)}}function Vdt(e){var t;ns(e,(Nt(),d3))&&(t=l(Q(e,d3),21),t.Hc((qy(),E0))?(t.Mc(E0),t.Fc(T0)):t.Hc(T0)&&(t.Mc(T0),t.Fc(E0)))}function Udt(e){var t;ns(e,(Nt(),d3))&&(t=l(Q(e,d3),21),t.Hc((qy(),S0))?(t.Mc(S0),t.Fc(qf)):t.Hc(qf)&&(t.Mc(qf),t.Fc(S0)))}function vue(e,t,n,r){var a,o,f,g;return e.a==null&&v9n(e,t),f=t.b.j.c.length,o=n.d.p,g=r.d.p,a=g-1,a<0&&(a=f-1),o<=a?e.a[a]-e.a[o]:e.a[f-1]-e.a[o]+e.a[a]}function m7n(e){var t,n;if(!e.b)for(e.b=$H(l(e.f,27).kh().i),n=new or(l(e.f,27).kh());n.e!=n.i.gc();)t=l(gr(n),135),vt(e.b,new Yie(t));return e.b}function v7n(e){var t,n;if(!e.e)for(e.e=$H(Xae(l(e.f,27)).i),n=new or(Xae(l(e.f,27)));n.e!=n.i.gc();)t=l(gr(n),123),vt(e.e,new BXe(t));return e.e}function Gdt(e){var t,n;if(!e.a)for(e.a=$H(AH(l(e.f,27)).i),n=new or(AH(l(e.f,27)));n.e!=n.i.gc();)t=l(gr(n),27),vt(e.a,new rae(e,t));return e.a}function zw(e){var t;if(!e.C&&(e.D!=null||e.B!=null))if(t=sDn(e),t)e.hl(t);else try{e.hl(null)}catch(n){if(n=bs(n),!De(n,63))throw ue(n)}return e.C}function w7n(e){switch(e.q.g){case 5:bgt(e,(Ct(),Qn)),bgt(e,Dr);break;case 4:vvt(e,(Ct(),Qn)),vvt(e,Dr);break;default:xpt(e,(Ct(),Qn)),xpt(e,Dr)}}function y7n(e){switch(e.q.g){case 5:mgt(e,(Ct(),ar)),mgt(e,er);break;case 4:wvt(e,(Ct(),ar)),wvt(e,er);break;default:kpt(e,(Ct(),ar)),kpt(e,er)}}function i6(e,t){var n,r,a;for(a=new qa,r=e.Kc();r.Ob();)n=l(r.Pb(),36),KE(n,a.a,0),a.a+=n.f.a+t,a.b=b.Math.max(a.b,n.f.b);return a.b>0&&(a.b+=t),a}function hU(e,t){var n,r,a;for(a=new qa,r=e.Kc();r.Ob();)n=l(r.Pb(),36),KE(n,0,a.b),a.b+=n.f.b+t,a.a=b.Math.max(a.a,n.f.a);return a.a>0&&(a.a+=t),a}function Kdt(e){var t,n,r;for(r=Ii,n=new G(e.a);n.a>16==6?e.Cb.Th(e,5,u1,t):(r=Ro(l(Mn((n=l(Kn(e,16),29),n||e.ii()),e.Db>>16),19)),e.Cb.Th(e,r.n,r.f,t))}function x7n(e){Xk();var t=e.e;if(t&&t.stack){var n=t.stack,r=t+` -`;return n.substring(0,r.length)==r&&(n=n.substring(r.length)),n.split(` -`)}return[]}function k7n(e){var t;return t=(Qht(),p6t),t[e>>>28]|t[e>>24&15]<<4|t[e>>20&15]<<8|t[e>>16&15]<<12|t[e>>12&15]<<16|t[e>>8&15]<<20|t[e>>4&15]<<24|t[e&15]<<28}function Xdt(e){var t,n,r;e.b==e.c&&(r=e.a.length,n=P7e(b.Math.max(8,r))<<1,e.b!=0?(t=c0(e.a,n),fft(e,t,r),e.a=t,e.b=0):ay(e.a,n),e.c=r)}function E7n(e,t){var n;return n=e.b,n.pf((pi(),rh))?n.ag()==(Ct(),er)?-n.Mf().a-ze(Ge(n.of(rh))):t+ze(Ge(n.of(rh))):n.ag()==(Ct(),er)?-n.Mf().a:t}function HN(e){var t;return e.b.c.length!=0&&l(jt(e.b,0),72).a?l(jt(e.b,0),72).a:(t=Qae(e),t??""+(e.c?gc(e.c.a,e,0):-1))}function fU(e){var t;return e.f.c.length!=0&&l(jt(e.f,0),72).a?l(jt(e.f,0),72).a:(t=Qae(e),t??""+(e.i?gc(e.i.j,e,0):-1))}function T7n(e,t){var n,r;if(t<0||t>=e.gc())return null;for(n=t;n0?e.c:0),a=b.Math.max(a,t.d),++r;e.e=o,e.b=a}function S7n(e){var t,n;if(!e.b)for(e.b=$H(l(e.f,123).kh().i),n=new or(l(e.f,123).kh());n.e!=n.i.gc();)t=l(gr(n),135),vt(e.b,new Yie(t));return e.b}function _7n(e,t){var n,r,a;if(t.dc())return Fk(),Fk(),fF;for(n=new Ort(e,t.gc()),a=new or(e);a.e!=a.i.gc();)r=gr(a),t.Hc(r)&&qr(n,r);return n}function sxe(e,t,n,r){return t==0?r?(!e.o&&(e.o=new xl((su(),Cg),L2,e,0)),e.o):(!e.o&&(e.o=new xl((su(),Cg),L2,e,0)),iN(e.o)):rU(e,t,n,r)}function yue(e){var t,n;if(e.rb)for(t=0,n=e.rb.i;t>22),a+=r>>22,a<0)?!1:(e.l=n&eh,e.m=r&eh,e.h=a&hp,!0)}function xue(e,t,n,r,a,o,f){var g,w;return!(t.Te()&&(w=e.a.Ne(n,r),w<0||!a&&w==0)||t.Ue()&&(g=e.a.Ne(n,o),g>0||!f&&g==0))}function D7n(e,t){TE();var n;if(n=e.j.g-t.j.g,n!=0)return 0;switch(e.j.g){case 2:return zce(t,cLe)-zce(e,cLe);case 4:return zce(e,oLe)-zce(t,oLe)}return 0}function I7n(e){switch(e.g){case 0:return D1e;case 1:return I1e;case 2:return O1e;case 3:return N1e;case 4:return QK;case 5:return P1e;default:return null}}function ac(e,t,n){var r,a;return r=(a=new Hie,Gm(a,t),Fu(a,n),qr((!e.c&&(e.c=new nt(k3,e,12,10)),e.c),a),a),i2(r,0),My(r,1),u2(r,!0),c2(r,!0),r}function vx(e,t){var n,r;if(t>=e.i)throw ue(new Vse(t,e.i));return++e.j,n=e.g[t],r=e.i-t-1,r>0&&pu(e.g,t+1,e.g,t,r),Ts(e.g,--e.i,null),e.Qi(t,n),e.Ni(),n}function Qdt(e,t){var n,r;return e.Db>>16==17?e.Cb.Th(e,21,Vf,t):(r=Ro(l(Mn((n=l(Kn(e,16),29),n||e.ii()),e.Db>>16),19)),e.Cb.Th(e,r.n,r.f,t))}function O7n(e){var t,n,r,a;for(Cn(),Vs(e.c,e.a),a=new G(e.c);a.an.a.c.length))throw ue(new Yn("index must be >= 0 and <= layer node count"));e.c&&al(e.c.a,e),e.c=n,n&&pw(n.a,t,e)}function ngt(e,t){var n,r,a;for(r=new hr(dr(sp(e).a.Kc(),new j));jr(r);)return n=l(xr(r),18),a=l(t.Kb(n),10),new JS(Xr(a.n.b+a.o.b/2));return o_(),o_(),v0e}function rgt(e,t){this.c=new Pr,this.a=e,this.b=t,this.d=l(Q(e,(ft(),$6)),312),qe(Q(e,(Nt(),GMe)))===qe((cN(),JK))?this.e=new XQe:this.e=new YQe}function BA(e,t){var n,r;return r=null,e.pf((pi(),r9))&&(n=l(e.of(r9),96),n.pf(t)&&(r=n.of(t))),r==null&&e.Tf()&&(r=e.Tf().of(t)),r==null&&(r=It(t)),r}function kue(e,t){var n,r;n=e.fd(t);try{return r=n.Pb(),n.Qb(),r}catch(a){throw a=bs(a),De(a,112)?ue(new tc("Can't remove element "+t)):ue(a)}}function z7n(e,t){var n,r,a;if(r=new Qz,a=new R7e(r.q.getFullYear()-Lb,r.q.getMonth(),r.q.getDate()),n=JAn(e,t,a),n==0||n0?t:0),++n;return new lt(r,a)}function lxe(e,t){var n,r;return e.Db>>16==6?e.Cb.Th(e,6,js,t):(r=Ro(l(Mn((n=l(Kn(e,16),29),n||(su(),pY)),e.Db>>16),19)),e.Cb.Th(e,r.n,r.f,t))}function hxe(e,t){var n,r;return e.Db>>16==7?e.Cb.Th(e,1,oF,t):(r=Ro(l(Mn((n=l(Kn(e,16),29),n||(su(),dPe)),e.Db>>16),19)),e.Cb.Th(e,r.n,r.f,t))}function fxe(e,t){var n,r;return e.Db>>16==9?e.Cb.Th(e,9,Ai,t):(r=Ro(l(Mn((n=l(Kn(e,16),29),n||(su(),pPe)),e.Db>>16),19)),e.Cb.Th(e,r.n,r.f,t))}function agt(e,t){var n,r;return e.Db>>16==5?e.Cb.Th(e,9,TY,t):(r=Ro(l(Mn((n=l(Kn(e,16),29),n||(Tn(),D2)),e.Db>>16),19)),e.Cb.Th(e,r.n,r.f,t))}function ogt(e,t){var n,r;return e.Db>>16==7?e.Cb.Th(e,6,u1,t):(r=Ro(l(Mn((n=l(Kn(e,16),29),n||(Tn(),O2)),e.Db>>16),19)),e.Cb.Th(e,r.n,r.f,t))}function dxe(e,t){var n,r;return e.Db>>16==3?e.Cb.Th(e,0,uF,t):(r=Ro(l(Mn((n=l(Kn(e,16),29),n||(Tn(),M2)),e.Db>>16),19)),e.Cb.Th(e,r.n,r.f,t))}function cgt(){this.a=new T$,this.g=new cU,this.j=new cU,this.b=new Pr,this.d=new cU,this.i=new cU,this.k=new Pr,this.c=new Pr,this.e=new Pr,this.f=new Pr}function V7n(e,t,n){var r,a,o;for(n<0&&(n=0),o=e.i,a=n;aohe)return FE(e,r);if(r==e)return!0}}return!1}function G7n(e){switch(zq(),e.q.g){case 5:Vpt(e,(Ct(),Qn)),Vpt(e,Dr);break;case 4:U2t(e,(Ct(),Qn)),U2t(e,Dr);break;default:Wvt(e,(Ct(),Qn)),Wvt(e,Dr)}}function K7n(e){switch(zq(),e.q.g){case 5:u2t(e,(Ct(),ar)),u2t(e,er);break;case 4:gdt(e,(Ct(),ar)),gdt(e,er);break;default:Yvt(e,(Ct(),ar)),Yvt(e,er)}}function W7n(e){var t,n;t=l(Q(e,(b0(),e8t)),17),t?(n=t.a,n==0?rt(e,(bb(),EK),new Uce):rt(e,(bb(),EK),new VH(n))):rt(e,(bb(),EK),new VH(1))}function Y7n(e,t){var n;switch(n=e.i,t.g){case 1:return-(e.n.b+e.o.b);case 2:return e.n.a-n.o.a;case 3:return e.n.b-n.o.b;case 4:return-(e.n.a+e.o.a)}return 0}function X7n(e,t){switch(e.g){case 0:return t==(hf(),$b)?HK:VK;case 1:return t==(hf(),$b)?HK:pB;case 2:return t==(hf(),$b)?pB:VK;default:return pB}}function UN(e,t){var n,r,a;for(al(e.a,t),e.e-=t.r+(e.a.c.length==0?0:e.c),a=xCe,r=new G(e.a);r.a>16==3?e.Cb.Th(e,12,Ai,t):(r=Ro(l(Mn((n=l(Kn(e,16),29),n||(su(),fPe)),e.Db>>16),19)),e.Cb.Th(e,r.n,r.f,t))}function pxe(e,t){var n,r;return e.Db>>16==11?e.Cb.Th(e,10,Ai,t):(r=Ro(l(Mn((n=l(Kn(e,16),29),n||(su(),gPe)),e.Db>>16),19)),e.Cb.Th(e,r.n,r.f,t))}function ugt(e,t){var n,r;return e.Db>>16==10?e.Cb.Th(e,11,Vf,t):(r=Ro(l(Mn((n=l(Kn(e,16),29),n||(Tn(),I2)),e.Db>>16),19)),e.Cb.Th(e,r.n,r.f,t))}function lgt(e,t){var n,r;return e.Db>>16==10?e.Cb.Th(e,12,Uf,t):(r=Ro(l(Mn((n=l(Kn(e,16),29),n||(Tn(),N4)),e.Db>>16),19)),e.Cb.Th(e,r.n,r.f,t))}function Of(e){var t;return!(e.Bb&1)&&e.r&&e.r.Vh()&&(t=l(e.r,54),e.r=l(yb(e,t),142),e.r!=t&&e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,9,8,t,e.r))),e.r}function Eue(e,t,n){var r;return r=he(le(Na,1),Zo,28,15,[zxe(e,(t1(),Gc),t,n),zxe(e,$u,t,n),zxe(e,Kc,t,n)]),e.f&&(r[0]=b.Math.max(r[0],r[2]),r[2]=r[0]),r}function Q7n(e,t){var n,r,a;if(a=x6n(e,t),a.c.length!=0)for(Vs(a,new pS),n=a.c.length,r=0;r>19,E=t.h>>19,w!=E?E-w:(a=e.h,g=t.h,a!=g?a-g:(r=e.m,f=t.m,r!=f?r-f:(n=e.l,o=t.l,n-o)))}function dU(){dU=U,D_e=(PU(),z0e),M_e=new pn(pEe,D_e),L_e=(aV(),$0e),A_e=new pn(bEe,L_e),__e=(ZV(),j0e),S_e=new pn(mEe,__e),C_e=new pn(vEe,(Hn(),!0))}function FA(e,t,n){var r,a;r=t*n,De(e.g,154)?(a=ix(e),a.f.d?a.f.a||(e.d.a+=r+H1):(e.d.d-=r+H1,e.d.a+=r+H1)):De(e.g,10)&&(e.d.d-=r,e.d.a+=2*r)}function hgt(e,t,n){var r,a,o,f,g;for(a=e[n.g],g=new G(t.d);g.a0?e.b:0),++n;t.b=r,t.e=a}function fgt(e){var t,n,r;if(r=e.b,tet(e.i,r.length)){for(n=r.length*2,e.b=We(k0e,TP,303,n,0,1),e.c=We(k0e,TP,303,n,0,1),e.f=n-1,e.i=0,t=e.a;t;t=t.c)eP(e,t,t);++e.g}}function i8n(e,t,n,r){var a,o,f,g;for(a=0;af&&(g=f/r),a>o&&(w=o/a),md(e,b.Math.min(g,w)),e}function a8n(){zU();var e,t;try{if(t=l(Sxe((ib(),Gf),xT),2113),t)return t}catch(n){if(n=bs(n),De(n,103))e=n,p5e((Jr(),e));else throw ue(n)}return new ik}function o8n(){zU();var e,t;try{if(t=l(Sxe((ib(),Gf),Ff),2040),t)return t}catch(n){if(n=bs(n),De(n,103))e=n,p5e((Jr(),e));else throw ue(n)}return new d8}function c8n(){klt();var e,t;try{if(t=l(Sxe((ib(),Gf),cv),2122),t)return t}catch(n){if(n=bs(n),De(n,103))e=n,p5e((Jr(),e));else throw ue(n)}return new uk}function u8n(e,t,n){var r,a;return a=e.e,e.e=t,e.Db&4&&!(e.Db&1)&&(r=new _a(e,1,4,a,t),n?n.nj(r):n=r),a!=t&&(t?n=ZE(e,SU(e,t),n):n=ZE(e,e.a,n)),n}function dgt(){Qz.call(this),this.e=-1,this.a=!1,this.p=lo,this.k=-1,this.c=-1,this.b=-1,this.g=!1,this.f=-1,this.j=-1,this.n=-1,this.i=-1,this.d=-1,this.o=lo}function l8n(e,t){var n,r,a;if(r=e.b.d.d,e.a||(r+=e.b.d.a),a=t.b.d.d,t.a||(a+=t.b.d.a),n=Yi(r,a),n==0){if(!e.a&&t.a)return-1;if(!t.a&&e.a)return 1}return n}function h8n(e,t){var n,r,a;if(r=e.b.b.d,e.a||(r+=e.b.b.a),a=t.b.b.d,t.a||(a+=t.b.b.a),n=Yi(r,a),n==0){if(!e.a&&t.a)return-1;if(!t.a&&e.a)return 1}return n}function f8n(e,t){var n,r,a;if(r=e.b.g.d,e.a||(r+=e.b.g.a),a=t.b.g.d,t.a||(a+=t.b.g.a),n=Yi(r,a),n==0){if(!e.a&&t.a)return-1;if(!t.a&&e.a)return 1}return n}function mxe(){mxe=U,v8t=yl(fi(fi(fi(new Xs,(uo(),_u),(vo(),KAe)),_u,WAe),mc,YAe),mc,BAe),y8t=fi(fi(new Xs,_u,LAe),_u,FAe),w8t=yl(new Xs,mc,jAe)}function d8n(e){var t,n,r,a,o;for(t=l(Q(e,(ft(),KL)),85),o=e.n,r=t.Cc().Kc();r.Ob();)n=l(r.Pb(),314),a=n.i,a.c+=o.a,a.d+=o.b,n.c?Ibt(n):Obt(n);rt(e,KL,null)}function g8n(e,t,n){var r,a;switch(a=e.b,r=a.d,t.g){case 1:return-r.d-n;case 2:return a.o.a+r.c+n;case 3:return a.o.b+r.a+n;case 4:return-r.b-n;default:return-1}}function p8n(e,t,n){var r,a;for(n.Ug("Interactive node placement",1),e.a=l(Q(t,(ft(),$6)),312),a=new G(t.b);a.a0&&(f=(o&Ii)%e.d.length,a=y9e(e,f,o,t),a)?(g=a.nd(n),g):(r=e.ck(o,t,n),e.c.Fc(r),null)}function yxe(e,t){var n,r,a,o;switch(o2(e,t).Kl()){case 3:case 2:{for(n=d6(t),a=0,o=n.i;a=0;r--)if(vn(e[r].d,t)||vn(e[r].d,n)){e.length>=r+1&&e.splice(0,r+1);break}return e}function KN(e,t){var n;return wc(e)&&wc(t)&&(n=e/t,_P0&&(e.b+=2,e.a+=r):(e.b+=1,e.a+=b.Math.min(r,a))}function ygt(e){var t;t=l(Q(l(ff(e.b,0),40),(Hc(),gIe)),107),rt(e,(Qi(),QT),new lt(0,0)),hmt(new nN,e,t.b+t.c-ze(Ge(Q(e,Bde))),t.d+t.a-ze(Ge(Q(e,Fde))))}function xgt(e,t){var n,r;if(r=!1,Ia(t)&&(r=!0,J8(e,new yy(ei(t)))),r||De(t,242)&&(r=!0,J8(e,(n=g4e(l(t,242)),new vk(n)))),!r)throw ue(new Qie(mSe))}function I8n(e,t,n,r){var a,o,f;return a=new Zg(e.e,1,10,(f=t.c,De(f,90)?l(f,29):(Tn(),Kf)),(o=n.c,De(o,90)?l(o,29):(Tn(),Kf)),f2(e,t),!1),r?r.nj(a):r=a,r}function Exe(e){var t,n;switch(l(Q(eo(e),(Nt(),jMe)),429).g){case 0:return t=e.n,n=e.o,new lt(t.a+n.a/2,t.b+n.b/2);case 1:return new Eo(e.n);default:return null}}function WN(){WN=U,ZK=new C_(Id,0),TLe=new C_("LEFTUP",1),SLe=new C_("RIGHTUP",2),ELe=new C_("LEFTDOWN",3),CLe=new C_("RIGHTDOWN",4),B1e=new C_("BALANCED",5)}function O8n(e,t,n){var r,a,o;if(r=Yi(e.a[t.p],e.a[n.p]),r==0){if(a=l(Q(t,(ft(),Wx)),15),o=l(Q(n,Wx),15),a.Hc(n))return-1;if(o.Hc(t))return 1}return r}function N8n(e){switch(e.g){case 1:return new vne;case 2:return new wne;case 3:return new mne;case 0:return null;default:throw ue(new Yn(Efe+(e.f!=null?e.f:""+e.g)))}}function Txe(e,t,n){switch(t){case 1:!e.n&&(e.n=new nt(ec,e,1,7)),$r(e.n),!e.n&&(e.n=new nt(ec,e,1,7)),As(e.n,l(n,16));return;case 2:fE(e,ei(n));return}V7e(e,t,n)}function Cxe(e,t,n){switch(t){case 3:Mw(e,ze(Ge(n)));return;case 4:Dw(e,ze(Ge(n)));return;case 5:Uu(e,ze(Ge(n)));return;case 6:Gu(e,ze(Ge(n)));return}Txe(e,t,n)}function gU(e,t,n){var r,a,o;o=(r=new Hie,r),a=$1(o,t,null),a&&a.oj(),Fu(o,n),qr((!e.c&&(e.c=new nt(k3,e,12,10)),e.c),o),i2(o,0),My(o,1),u2(o,!0),c2(o,!0)}function Sxe(e,t){var n,r,a;return n=y_(e.i,t),De(n,241)?(a=l(n,241),a.zi()==null,a.wi()):De(n,507)?(r=l(n,2037),a=r.b,a):null}function P8n(e,t,n,r){var a,o;return Xr(t),Xr(n),o=l(H_(e.d,t),17),Wlt(!!o,"Row %s not in %s",t,e.e),a=l(H_(e.b,n),17),Wlt(!!a,"Column %s not in %s",n,e.c),s0t(e,o.a,a.a,r)}function kgt(e,t,n,r,a,o,f){var g,w,E,C,L;if(C=a[o],E=o==f-1,g=E?r:0,L=zdt(g,C),r!=10&&he(le(e,f-o),t[o],n[o],g,L),!E)for(++o,w=0;w1||g==-1?(o=l(w,15),a.Wb(v5n(e,o))):a.Wb(cle(e,l(w,58)))))}function q8n(e,t,n,r){MZe();var a=m0e;function o(){for(var f=0;f0)return!1;return!0}function U8n(e){var t,n,r,a,o;for(r=new qm(new Sr(e.b).a);r.b;)n=Nw(r),t=l(n.ld(),10),o=l(l(n.md(),42).a,10),a=l(l(n.md(),42).b,8),Oi(Y0(t.n),Oi(Ja(o.n),a))}function G8n(e){switch(l(Q(e.b,(Nt(),IMe)),387).g){case 1:Is(fc(Dc(new bn(null,new kn(e.d,16)),new dI),new g5),new wee);break;case 2:zSn(e);break;case 0:wkn(e)}}function K8n(e,t,n){var r,a,o;for(r=n,!r&&(r=new L8),r.Ug("Layout",e.a.c.length),o=new G(e.a);o.awfe)return n;a>-1e-6&&++n}return n}function Axe(e,t){var n;t!=e.b?(n=null,e.b&&(n=IH(e.b,e,-4,n)),t&&(n=mx(t,e,-4,n)),n=J0t(e,t,n),n&&n.oj()):e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,3,t,t))}function Cgt(e,t){var n;t!=e.f?(n=null,e.f&&(n=IH(e.f,e,-1,n)),t&&(n=mx(t,e,-1,n)),n=Q0t(e,t,n),n&&n.oj()):e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,0,t,t))}function Q8n(e,t,n,r){var a,o,f,g;return hh(e.e)&&(a=t.Lk(),g=t.md(),o=n.md(),f=db(e,1,a,g,o,a.Jk()?XE(e,a,o,De(a,102)&&(l(a,19).Bb&Io)!=0):-1,!0),r?r.nj(f):r=f),r}function Sgt(e){var t,n,r;if(e==null)return null;if(n=l(e,15),n.dc())return"";for(r=new Up,t=n.Kc();t.Ob();)Xo(r,(Gi(),ei(t.Pb()))),r.a+=" ";return Gse(r,r.a.length-1)}function _gt(e){var t,n,r;if(e==null)return null;if(n=l(e,15),n.dc())return"";for(r=new Up,t=n.Kc();t.Ob();)Xo(r,(Gi(),ei(t.Pb()))),r.a+=" ";return Gse(r,r.a.length-1)}function J8n(e,t,n){var r,a;return r=e.c[t.c.p][t.p],a=e.c[n.c.p][n.p],r.a!=null&&a.a!=null?Nae(r.a,a.a):r.a!=null?-1:a.a!=null?1:0}function Z8n(e,t,n){return n.Ug("Tree layout",1),qO(e.b),X0(e.b,(wx(),NW),NW),X0(e.b,lM,lM),X0(e.b,hM,hM),X0(e.b,fM,fM),e.a=bP(e.b,t),K8n(e,t,n.eh(1)),n.Vg(),t}function exn(e,t){var n,r,a,o,f,g;if(t)for(o=t.a.length,n=new Dm(o),g=(n.b-n.a)*n.c<0?(sb(),tm):new cb(n);g.Ob();)f=l(g.Pb(),17),a=Jk(t,f.a),r=new GXe(e),cpn(r.a,a)}function txn(e,t){var n,r,a,o,f,g;if(t)for(o=t.a.length,n=new Dm(o),g=(n.b-n.a)*n.c<0?(sb(),tm):new cb(n);g.Ob();)f=l(g.Pb(),17),a=Jk(t,f.a),r=new FXe(e),opn(r.a,a)}function nxn(e){var t;if(e!=null&&e.length>0&&co(e,e.length-1)==33)try{return t=P2t(tf(e,0,e.length-1)),t.e==null}catch(n){if(n=bs(n),!De(n,33))throw ue(n)}return!1}function rxn(e,t,n){var r,a,o;switch(r=eo(t),a=zV(r),o=new gu,Mc(o,t),n.g){case 1:la(o,BN(gx(a)));break;case 2:la(o,gx(a))}return rt(o,(Nt(),m4),Ge(Q(e,m4))),o}function Lxe(e){var t,n;return t=l(xr(new hr(dr(ka(e.a).a.Kc(),new j))),18),n=l(xr(new hr(dr(qs(e.a).a.Kc(),new j))),18),Rt(Bt(Q(t,(ft(),W1))))||Rt(Bt(Q(n,W1)))}function Ry(){Ry=U,bB=new cO("ONE_SIDE",0),KK=new cO("TWO_SIDES_CORNER",1),WK=new cO("TWO_SIDES_OPPOSING",2),GK=new cO("THREE_SIDES",3),UK=new cO("FOUR_SIDES",4)}function Agt(e,t){var n,r,a,o;for(o=new bt,a=0,r=t.Kc();r.Ob();){for(n=pt(l(r.Pb(),17).a+a);n.a=e.f)break;$n(o.c,n)}return o}function ixn(e,t){var n,r,a,o,f;for(o=new G(t.a);o.a0&&Jdt(this,this.c-1,(Ct(),ar)),this.c0&&e[0].length>0&&(this.c=Rt(Bt(Q(eo(e[0][0]),(ft(),zLe))))),this.a=We(kEt,dt,2117,e.length,0,2),this.b=We(EEt,dt,2118,e.length,0,2),this.d=new G0t}function uxn(e){return e.c.length==0?!1:(Sn(0,e.c.length),l(e.c[0],18)).c.i.k==(Zn(),Aa)?!0:W5(fc(new bn(null,new kn(e,16)),new Wee),new Yee)}function Dgt(e,t){var n,r,a,o,f,g,w;for(g=Hy(t),o=t.f,w=t.g,f=b.Math.sqrt(o*o+w*w),a=0,r=new G(g);r.a=0?(n=KN(e,JU),r=RN(e,JU)):(t=ub(e,1),n=KN(t,5e8),r=RN(t,5e8),r=bo(l0(r,1),va(e,1))),Q0(l0(r,32),va(n,Vo))}function Ngt(e,t,n){var r,a;switch(r=(mr(t.b!=0),l(af(t,t.a.a),8)),n.g){case 0:r.b=0;break;case 2:r.b=e.f;break;case 3:r.a=0;break;default:r.a=e.g}return a=Rr(t,0),zO(a,r),t}function Pgt(e,t,n,r){var a,o,f,g,w;switch(w=e.b,o=t.d,f=o.j,g=G8e(f,w.d[f.g],n),a=Oi(Ja(o.n),o.a),o.j.g){case 1:case 3:g.a+=a.a;break;case 2:case 4:g.b+=a.b}Cs(r,g,r.c.b,r.c)}function xxn(e,t,n){var r,a,o,f;for(f=gc(e.e,t,0),o=new Pwe,o.b=n,r=new Ua(e.e,f);r.b1;t>>=1)t&1&&(r=K5(r,n)),n.d==1?n=K5(n,n):n=new Q1t(mmt(n.a,n.d,We(Vr,di,28,n.d<<1,15,1)));return r=K5(r,n),r}function Rxe(){Rxe=U;var e,t,n,r;for(m_e=We(Na,Zo,28,25,15,1),v_e=We(Na,Zo,28,33,15,1),r=152587890625e-16,t=32;t>=0;t--)v_e[t]=r,r*=.5;for(n=1,e=24;e>=0;e--)m_e[e]=n,n*=.5}function _xn(e){var t,n;if(Rt(Bt(at(e,(Nt(),b4))))){for(n=new hr(dr(cp(e).a.Kc(),new j));jr(n);)if(t=l(xr(n),74),qw(t)&&Rt(Bt(at(t,gv))))return!0}return!1}function Bgt(e,t){var n,r,a;na(e.f,t)&&(t.b=e,r=t.c,gc(e.j,r,0)!=-1||vt(e.j,r),a=t.d,gc(e.j,a,0)!=-1||vt(e.j,a),n=t.a.b,n.c.length!=0&&(!e.i&&(e.i=new rdt(e)),I3n(e.i,n)))}function Axn(e){var t,n,r,a,o;return n=e.c.d,r=n.j,a=e.d.d,o=a.j,r==o?n.p=0&&vn(e.substr(t,3),"GMT")||t>=0&&vn(e.substr(t,3),"UTC"))&&(n[0]=t+3),mke(e,n,r)}function Mxn(e,t){var n,r,a,o,f;for(o=e.g.a,f=e.g.b,r=new G(e.d);r.an;o--)e[o]|=t[o-n-1]>>>f,e[o-1]=t[o-n-1]<0&&pu(e.g,t,e.g,t+r,g),f=n.Kc(),e.i+=r,a=0;a>4&15,o=e[r]&15,f[a++]=bPe[n],f[a++]=bPe[o];return If(f,0,f.length)}function cl(e){var t,n;return e>=Io?(t=AP+(e-Io>>10&1023)&Zs,n=56320+(e-Io&1023)&Zs,String.fromCharCode(t)+(""+String.fromCharCode(n))):String.fromCharCode(e&Zs)}function zxn(e,t){py();var n,r,a,o;return a=l(l($i(e.r,t),21),87),a.gc()>=2?(r=l(a.Kc().Pb(),117),n=e.u.Hc((Rl(),PM)),o=e.u.Hc(a9),!r.a&&!n&&(a.gc()==2||o)):!1}function jgt(e,t,n,r,a){var o,f,g;for(o=Tbt(e,t,n,r,a),g=!1;!o;)TU(e,a,!0),g=!0,o=Tbt(e,t,n,r,a);g&&TU(e,a,!1),f=bce(a),f.c.length!=0&&(e.d&&e.d.Gg(f),jgt(e,a,n,r,f))}function vU(){vU=U,Uge=new L_(Id,0),$Ne=new L_("DIRECTED",1),qNe=new L_("UNDIRECTED",2),RNe=new L_("ASSOCIATION",3),zNe=new L_("GENERALIZATION",4),jNe=new L_("DEPENDENCY",5)}function qxn(e,t){var n;if(!M1(e))throw ue(new nc(t4t));switch(n=M1(e),t.g){case 1:return-(e.j+e.f);case 2:return e.i-n.g;case 3:return e.j-n.f;case 4:return-(e.i+e.g)}return 0}function Hxn(e,t,n){var r,a,o;return r=t.Lk(),o=t.md(),a=r.Jk()?db(e,4,r,o,null,XE(e,r,o,De(r,102)&&(l(r,19).Bb&Io)!=0),!0):db(e,r.tk()?2:1,r,o,r.ik(),-1,!0),n?n.nj(a):n=a,n}function $E(e,t){var n,r;for(nr(t),r=e.b.c.length,vt(e.b,t);r>0;){if(n=r,r=(r-1)/2|0,e.a.Ne(jt(e.b,r),t)<=0)return rf(e.b,n,t),!0;rf(e.b,n,jt(e.b,r))}return rf(e.b,r,t),!0}function zxe(e,t,n,r){var a,o;if(a=0,n)a=BV(e.a[n.g][t.g],r);else for(o=0;o=g)}function $gt(e){switch(e.g){case 0:return new Sne;case 1:return new _ne;default:throw ue(new Yn("No implementation is available for the width approximator "+(e.f!=null?e.f:""+e.g)))}}function qxe(e,t,n,r){var a;if(a=!1,Ia(r)&&(a=!0,zk(t,n,ei(r))),a||hy(r)&&(a=!0,qxe(e,t,n,r)),a||De(r,242)&&(a=!0,Nm(t,n,l(r,242))),!a)throw ue(new Qie(mSe))}function Uxn(e,t){var n,r,a;if(n=t.qi(e.a),n&&(a=n1((!n.b&&(n.b=new dh((Tn(),No),Yc,n)),n.b),Bf),a!=null)){for(r=1;r<(El(),$Pe).length;++r)if(vn($Pe[r],a))return r}return 0}function Gxn(e,t){var n,r,a;if(n=t.qi(e.a),n&&(a=n1((!n.b&&(n.b=new dh((Tn(),No),Yc,n)),n.b),Bf),a!=null)){for(r=1;r<(El(),zPe).length;++r)if(vn(zPe[r],a))return r}return 0}function zgt(e,t){var n,r,a,o;if(nr(t),o=e.a.gc(),o0?1:0;o.a[a]!=n;)o=o.a[a],a=e.a.Ne(n.d,o.d)>0?1:0;o.a[a]=r,r.b=n.b,r.a[0]=n.a[0],r.a[1]=n.a[1],n.a[0]=null,n.a[1]=null}function Yxn(e){var t,n,r,a;for(t=new bt,n=We(ih,pg,28,e.a.c.length,16,1),l5e(n,n.length),a=new G(e.a);a.a0&&dmt((Sn(0,n.c.length),l(n.c[0],30)),e),n.c.length>1&&dmt(l(jt(n,n.c.length-1),30),e),t.Vg()}function Qxn(e){Rl();var t,n;return t=rs(vp,he(le(cY,1),it,279,0,[Yb])),!(yN(NH(t,e))>1||(n=rs(PM,he(le(cY,1),it,279,0,[NM,a9])),yN(NH(n,e))>1))}function Vxe(e,t){var n;n=xu((ib(),Gf),e),De(n,507)?rc(Gf,e,new Ott(this,t)):rc(Gf,e,this),Nue(this,t),t==(Sk(),APe)?(this.wb=l(this,2038),l(t,2040)):this.wb=(lb(),Vn)}function Jxn(e){var t,n,r;if(e==null)return null;for(t=null,n=0;n=b2?"error":r>=900?"warn":r>=800?"info":"log"),eat(n,e.a),e.b&&G9e(t,n,e.b,"Exception: ",!0))}function Q(e,t){var n,r;return r=(!e.q&&(e.q=new Pr),cr(e.q,t)),r??(n=t.Sg(),De(n,4)&&(n==null?(!e.q&&(e.q=new Pr),ax(e.q,t)):(!e.q&&(e.q=new Pr),ki(e.q,t,n))),n)}function uo(){uo=U,y0=new oO("P1_CYCLE_BREAKING",0),vg=new oO("P2_LAYERING",1),bu=new oO("P3_NODE_ORDERING",2),_u=new oO("P4_NODE_PLACEMENT",3),mc=new oO("P5_EDGE_ROUTING",4)}function Zxn(e,t){hA();var n;if(e.c==t.c){if(e.b==t.b||a3n(e.b,t.b)){if(n=Dln(e.b)?1:-1,e.a&&!t.a)return n;if(!e.a&&t.a)return-n}return ru(e.b.g,t.b.g)}else return Yi(e.c,t.c)}function Ggt(e,t){var n,r,a;if(Gxe(e,t))return!0;for(r=new G(t);r.a=a||t<0)throw ue(new tc(Qfe+t+av+a));if(n>=a||n<0)throw ue(new tc(Jfe+n+av+a));return t!=n?r=(o=e.Cj(n),e.qj(t,o),o):r=e.xj(n),r}function Ygt(e){var t,n,r;if(r=e,e)for(t=0,n=e.Eh();n;n=n.Eh()){if(++t>ohe)return Ygt(n);if(r=n,n==e)throw ue(new nc("There is a cycle in the containment hierarchy of "+e))}return r}function Tb(e){var t,n,r;for(r=new Hm(Co,"[","]"),n=e.Kc();n.Ob();)t=n.Pb(),Jg(r,qe(t)===qe(e)?"(this Collection)":t==null?ul:xc(t));return r.a?r.e.length==0?r.a.a:r.a.a+(""+r.e):r.c}function Gxe(e,t){var n,r;if(r=!1,t.gc()<2)return!1;for(n=0;n1&&(e.j.b+=e.e)):(e.j.a+=n.a,e.j.b=b.Math.max(e.j.b,n.b),e.d.c.length>1&&(e.j.a+=e.e))}function Cb(){Cb=U,axt=he(le(Oo,1),au,64,0,[(Ct(),Qn),ar,Dr]),sxt=he(le(Oo,1),au,64,0,[ar,Dr,er]),oxt=he(le(Oo,1),au,64,0,[Dr,er,Qn]),cxt=he(le(Oo,1),au,64,0,[er,Qn,ar])}function t9n(e,t,n,r){var a,o,f,g,w,E,C;if(f=e.c.d,g=e.d.d,f.j!=g.j)for(C=e.b,a=f.j,w=null;a!=g.j;)w=t==0?$V(a):f8e(a),o=G8e(a,C.d[a.g],n),E=G8e(w,C.d[w.g],n),ui(r,Oi(o,E)),a=w}function n9n(e,t,n,r){var a,o,f,g,w;return f=Zdt(e.a,t,n),g=l(f.a,17).a,o=l(f.b,17).a,r&&(w=l(Q(t,(ft(),jl)),10),a=l(Q(n,jl),10),w&&a&&($ct(e.b,w,a),g+=e.b.i,o+=e.b.e)),g>o}function Qgt(e){var t,n,r,a,o,f,g,w,E;for(this.a=ydt(e),this.b=new bt,n=e,r=0,a=n.length;ruae(e.d).c?(e.i+=e.g.c,Yce(e.d)):uae(e.d).c>uae(e.g).c?(e.e+=e.d.c,Yce(e.g)):(e.i+=cst(e.g),e.e+=cst(e.d),Yce(e.g),Yce(e.d))}function a9n(e,t,n){var r,a,o,f;for(o=t.q,f=t.r,new Pm((J0(),qb),t,o,1),new Pm(qb,o,f,1),a=new G(n);a.ag&&(w=g/r),a>o&&(E=o/a),f=b.Math.min(w,E),e.a+=f*(t.a-e.a),e.b+=f*(t.b-e.b)}function l9n(e,t,n,r,a){var o,f;for(f=!1,o=l(jt(n.b,0),27);jAn(e,t,o,r,a)&&(f=!0,$8n(n,o),n.b.c.length!=0);)o=l(jt(n.b,0),27);return n.b.c.length==0&&UN(n.j,n),f&&lU(t.q),f}function h9n(e,t){h6();var n,r,a,o;if(t.b<2)return!1;for(o=Rr(t,0),n=l(Br(o),8),r=n;o.b!=o.d.c;){if(a=l(Br(o),8),Xue(e,r,a))return!0;r=a}return!!Xue(e,r,n)}function Wxe(e,t,n,r){var a,o;return n==0?(!e.o&&(e.o=new xl((su(),Cg),L2,e,0)),Uq(e.o,t,r)):(o=l(Mn((a=l(Kn(e,16),29),a||e.ii()),n),69),o.wk().Ak(e,Ku(e),n-yr(e.ii()),t,r))}function Nue(e,t){var n;t!=e.sb?(n=null,e.sb&&(n=l(e.sb,54).Th(e,1,RM,n)),t&&(n=l(t,54).Rh(e,1,RM,n)),n=a8e(e,t,n),n&&n.oj()):e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,4,t,t))}function f9n(e,t){var n,r,a,o;if(t)a=np(t,"x"),n=new HXe(e),aE(n.a,(nr(a),a)),o=np(t,"y"),r=new VXe(e),cE(r.a,(nr(o),o));else throw ue(new dd("All edge sections need an end point."))}function d9n(e,t){var n,r,a,o;if(t)a=np(t,"x"),n=new $Xe(e),oE(n.a,(nr(a),a)),o=np(t,"y"),r=new zXe(e),uE(r.a,(nr(o),o));else throw ue(new dd("All edge sections need a start point."))}function g9n(e,t){var n,r,a,o,f,g,w;for(r=_0t(e),o=0,g=r.length;o>22-t,a=e.h<>22-t):t<44?(n=0,r=e.l<>44-t):(n=0,r=0,a=e.l<e)throw ue(new Yn("k must be smaller than n"));return t==0||t==e?1:e==0?0:xxe(e)/(xxe(t)*xxe(e-t))}function Yxe(e,t){var n,r,a,o;for(n=new hye(e);n.g==null&&!n.c?H5e(n):n.g==null||n.i!=0&&l(n.g[n.i-1],51).Ob();)if(o=l(CU(n),58),De(o,167))for(r=l(o,167),a=0;a>4],t[n*2+1]=LY[o&15];return If(t,0,t.length)}function M9n(e){kH();var t,n,r;switch(r=e.c.length,r){case 0:return i6t;case 1:return t=l(Rpt(new G(e)),44),Edn(t.ld(),t.md());default:return n=l(j1(e,We(uv,XU,44,e.c.length,0,1)),173),new Wwe(n)}}function D9n(e){var t,n,r,a,o,f;for(t=new z5,n=new z5,gb(t,e),gb(n,e);n.b!=n.c;)for(a=l(X8(n),36),f=new G(a.a);f.a0&&lP(e,n,t),a):wEn(e,t,n)}function Sb(){Sb=U,uCt=(pi(),n9),lCt=Ev,sCt=kv,aCt=i7,oCt=Ub,iCt=r7,NIe=YB,cCt=S4,Jde=(uke(),KTt),Zde=WTt,BIe=JTt,ege=tCt,FIe=ZTt,RIe=eCt,PIe=YTt,qW=XTt,HW=QTt,FB=nCt,jIe=rCt,OIe=GTt}function spt(e,t){var n,r,a,o,f;if(e.e<=t||tbn(e,e.g,t))return e.g;for(o=e.r,r=e.g,f=e.r,a=(o-r)/2+r;r+11&&(e.e.b+=e.a)):(e.e.a+=n.a,e.e.b=b.Math.max(e.e.b,n.b),e.d.c.length>1&&(e.e.a+=e.a))}function B9n(e){var t,n,r,a;switch(a=e.i,t=a.b,r=a.j,n=a.g,a.a.g){case 0:n.a=(e.g.b.o.a-r.a)/2;break;case 1:n.a=t.d.n.a+t.d.a.a;break;case 2:n.a=t.d.n.a+t.d.a.a-r.a;break;case 3:n.b=t.d.n.b+t.d.a.b}}function F9n(e,t,n){var r,a,o;for(a=new hr(dr(sp(n).a.Kc(),new j));jr(a);)r=l(xr(a),18),!Do(r)&&!(!Do(r)&&r.c.i.c==r.d.i.c)&&(o=Y2t(e,r,n,new QQe),o.c.length>1&&$n(t.c,o))}function opt(e,t,n,r,a){if(rr&&(e.a=r),e.ba&&(e.b=a),e}function R9n(e){if(De(e,143))return pCn(l(e,143));if(De(e,233))return s5n(l(e,233));if(De(e,23))return b9n(l(e,23));throw ue(new Yn(vSe+Tb(new Il(he(le(wa,1),Rn,1,5,[e])))))}function j9n(e,t,n,r,a){var o,f,g;for(o=!0,f=0;f>>a|n[f+r+1]<>>a,++f}return o}function Zxe(e,t,n,r){var a,o,f;if(t.k==(Zn(),Aa)){for(o=new hr(dr(ka(t).a.Kc(),new j));jr(o);)if(a=l(xr(o),18),f=a.c.i.k,f==Aa&&e.c.a[a.c.i.c.p]==r&&e.c.a[t.c.p]==n)return!0}return!1}function $9n(e,t){var n,r,a,o;return t&=63,n=e.h&hp,t<22?(o=n>>>t,a=e.m>>t|n<<22-t,r=e.l>>t|e.m<<22-t):t<44?(o=0,a=n>>>t-22,r=e.m>>t-22|e.h<<44-t):(o=0,a=0,r=n>>>t-44),qu(r&eh,a&eh,o&hp)}function cpt(e,t,n,r){var a;this.b=r,this.e=e==(Iw(),oM),a=t[n],this.d=Lm(ih,[dt,pg],[183,28],16,[a.length,a.length],2),this.a=Lm(Vr,[dt,di],[53,28],15,[a.length,a.length],2),this.c=new Nxe(t,n)}function z9n(e){var t,n,r;for(e.k=new G5e((Ct(),he(le(Oo,1),au,64,0,[Pc,Qn,ar,Dr,er])).length,e.j.c.length),r=new G(e.j);r.a=n)return qE(e,t,r.p),!0;return!1}function o6(e,t,n,r){var a,o,f,g,w,E;for(f=n.length,o=0,a=-1,E=tht((Xn(t,e.length+1),e.substr(t)),(gae(),p_e)),g=0;go&&ggn(E,tht(n[g],p_e))&&(a=g,o=w);return a>=0&&(r[0]=t+o),a}function lpt(e){var t;return e.Db&64?Pue(e):(t=new Th(oSe),!e.a||hi(hi((t.a+=' "',t),e.a),'"'),hi(rw(hi(rw(hi(rw(hi(rw((t.a+=" (",t),e.i),","),e.j)," | "),e.g),","),e.f),")"),t.a)}function hpt(e,t,n){var r,a,o,f,g;for(g=Wu(e.e.Dh(),t),a=l(e.g,124),r=0,f=0;fn?u9e(e,n,"start index"):t<0||t>n?u9e(t,n,"end index"):KA("end index (%s) must not be less than start index (%s)",he(le(wa,1),Rn,1,5,[pt(t),pt(e)]))}function dpt(e,t){var n,r,a,o;for(r=0,a=e.length;r0&&gpt(e,o,n));t.p=0}function Xt(e){var t;this.c=new os,this.f=e.e,this.e=e.d,this.i=e.g,this.d=e.c,this.b=e.b,this.k=e.j,this.a=e.a,e.i?this.j=e.i:this.j=(t=l(K0(xg),9),new Zh(t,l(c0(t,t.length),9),0)),this.g=e.f}function K9n(e){var t,n,r,a;for(t=hb(hi(new Th("Predicates."),"and"),40),n=!0,a=new kr(e);a.b0?g[f-1]:We(wg,m2,10,0,0,1),a=g[f],E=f=0?e.ki(a):d9e(e,r);else throw ue(new Yn(Ob+r.xe()+kL));else throw ue(new Yn(f4t+t+d4t));else cf(e,n,r)}function e9e(e){var t,n;if(n=null,t=!1,De(e,211)&&(t=!0,n=l(e,211).a),t||De(e,263)&&(t=!0,n=""+l(e,263).a),t||De(e,493)&&(t=!0,n=""+l(e,493).a),!t)throw ue(new Qie(mSe));return n}function t9e(e,t,n){var r,a,o,f,g,w;for(w=Wu(e.e.Dh(),t),r=0,g=e.i,a=l(e.g,124),f=0;f=e.d.b.c.length&&(t=new yu(e.d),t.p=r.p-1,vt(e.d.b,t),n=new yu(e.d),n.p=r.p,vt(e.d.b,n)),Va(r,l(jt(e.d.b,r.p),30))}function i9e(e,t,n){var r,a,o;if(!e.b[t.g]){for(e.b[t.g]=!0,r=n,!r&&(r=new nN),ui(r.b,t),o=e.a[t.g].Kc();o.Ob();)a=l(o.Pb(),65),a.b!=t&&i9e(e,a.b,r),a.c!=t&&i9e(e,a.c,r),ui(r.a,a);return r}return null}function Q9n(e){switch(e.g){case 0:case 1:case 2:return Ct(),Qn;case 3:case 4:case 5:return Ct(),Dr;case 6:case 7:case 8:return Ct(),er;case 9:case 10:case 11:return Ct(),ar;default:return Ct(),Pc}}function J9n(e,t){var n;return e.c.length==0?!1:(n=I1t((Sn(0,e.c.length),l(e.c[0],18)).c.i),Sh(),n==(By(),G6)||n==U6?!0:W5(fc(new bn(null,new kn(e,16)),new Xee),new XYe(t)))}function jue(e,t){if(De(t,207))return Gln(e,l(t,27));if(De(t,193))return Kln(e,l(t,123));if(De(t,452))return Uln(e,l(t,166));throw ue(new Yn(vSe+Tb(new Il(he(le(wa,1),Rn,1,5,[t])))))}function ypt(e,t,n){var r,a;if(this.f=e,r=l(cr(e.b,t),260),a=r?r.a:0,k6e(n,a),n>=(a/2|0))for(this.e=r?r.c:null,this.d=a;n++0;)G6e(this);this.b=t,this.a=null}function Z9n(e,t){var n,r;t.a?OCn(e,t):(n=l(cse(e.b,t.b),60),n&&n==e.a[t.b.f]&&n.a&&n.a!=t.b.a&&n.c.Fc(t.b),r=l(ose(e.b,t.b),60),r&&e.a[r.f]==t.b&&r.a&&r.a!=t.b.a&&t.b.c.Fc(r),tae(e.b,t.b))}function xpt(e,t){var n,r;if(n=l(Qo(e.b,t),127),l(l($i(e.r,t),21),87).dc()){n.n.b=0,n.n.c=0;return}n.n.b=e.C.b,n.n.c=e.C.c,e.A.Hc((mh(),Cv))&&Kbt(e,t),r=_6n(e,t),Jue(e,t)==(t6(),Kb)&&(r+=2*e.w),n.a.a=r}function kpt(e,t){var n,r;if(n=l(Qo(e.b,t),127),l(l($i(e.r,t),21),87).dc()){n.n.d=0,n.n.a=0;return}n.n.d=e.C.d,n.n.a=e.C.a,e.A.Hc((mh(),Cv))&&Wbt(e,t),r=S6n(e,t),Jue(e,t)==(t6(),Kb)&&(r+=2*e.w),n.a.b=r}function ekn(e,t){var n,r,a,o;for(o=new bt,r=new G(t);r.ar&&(Xn(t-1,e.length),e.charCodeAt(t-1)<=32);)--t;return r>0||tn.a&&(r.Hc((Ym(),EM))?a=(t.a-n.a)/2:r.Hc(TM)&&(a=t.a-n.a)),t.b>n.b&&(r.Hc((Ym(),SM))?o=(t.b-n.b)/2:r.Hc(CM)&&(o=t.b-n.b)),Hxe(e,a,o)}function Lpt(e,t,n,r,a,o,f,g,w,E,C,L,B){De(e.Cb,90)&&zy(Yl(l(e.Cb,90)),4),Fu(e,n),e.f=f,LE(e,g),DE(e,w),AE(e,E),ME(e,C),u2(e,L),IE(e,B),c2(e,!0),i2(e,a),e.Zk(o),Gm(e,t),r!=null&&(e.i=null,xV(e,r))}function u9e(e,t,n){if(e<0)return KA(Swt,he(le(wa,1),Rn,1,5,[n,pt(e)]));if(t<0)throw ue(new Yn(_wt+t));return KA("%s (%s) must not be greater than size (%s)",he(le(wa,1),Rn,1,5,[n,pt(e),pt(t)]))}function l9e(e,t,n,r,a,o){var f,g,w,E;if(f=r-n,f<7){W4n(t,n,r,o);return}if(w=n+a,g=r+a,E=w+(g-w>>1),l9e(t,e,w,E,-a,o),l9e(t,e,E,g,-a,o),o.Ne(e[E-1],e[E])<=0){for(;n=0?e.bi(o,n):$9e(e,a,n);else throw ue(new Yn(Ob+a.xe()+kL));else throw ue(new Yn(f4t+t+d4t));else uf(e,r,a,n)}function Mpt(e){var t,n;if(e.f){for(;e.n>0;){if(t=l(e.k.Xb(e.n-1),76),n=t.Lk(),De(n,102)&&l(n,19).Bb&eu&&(!e.e||n.pk()!=oC||n.Lj()!=0)&&t.md()!=null)return!0;--e.n}return!1}else return e.n>0}function Dpt(e){var t,n,r,a;if(n=l(e,54)._h(),n)try{if(r=null,t=VE((ib(),Gf),bmt(a5n(n))),t&&(a=t.ai(),a&&(r=a.Fl(oun(n.e)))),r&&r!=e)return Dpt(r)}catch(o){if(o=bs(o),!De(o,63))throw ue(o)}return e}function bkn(e,t,n){var r,a,o;n.Ug("Remove overlaps",1),n.dh(t,yCe),r=l(at(t,(H5(),Y6)),27),e.f=r,e.a=sue(l(at(t,(Sb(),FB)),300)),a=Ge(at(t,(pi(),Ev))),_e(e,(nr(a),a)),o=Hy(r),Rvt(e,t,o,n),n.dh(t,OG)}function mkn(e){var t,n,r;if(Rt(Bt(at(e,(pi(),KB))))){for(r=new bt,n=new hr(dr(cp(e).a.Kc(),new j));jr(n);)t=l(xr(n),74),qw(t)&&Rt(Bt(at(t,Oge)))&&$n(r.c,t);return r}else return Cn(),Cn(),_o}function Ipt(e){if(!e)return MJe(),d6t;var t=e.valueOf?e.valueOf():e;if(t!==e){var n=_0e[typeof t];return n?n(t):Z7e(typeof t)}else return e instanceof Array||e instanceof b.Array?new Sz(e):new wk(e)}function Opt(e,t,n){var r,a,o;switch(o=e.o,r=l(Qo(e.p,n),252),a=r.i,a.b=nP(r),a.a=tP(r),a.b=b.Math.max(a.b,o.a),a.b>o.a&&!t&&(a.b=o.a),a.c=-(a.b-o.a)/2,n.g){case 1:a.d=-a.a;break;case 3:a.d=o.b}hle(r),fle(r)}function Npt(e,t,n){var r,a,o;switch(o=e.o,r=l(Qo(e.p,n),252),a=r.i,a.b=nP(r),a.a=tP(r),a.a=b.Math.max(a.a,o.b),a.a>o.b&&!t&&(a.a=o.b),a.d=-(a.a-o.b)/2,n.g){case 4:a.c=-a.b;break;case 2:a.c=o.a}hle(r),fle(r)}function vkn(e,t){var n,r,a,o,f;if(!t.dc()){if(a=l(t.Xb(0),131),t.gc()==1){hbt(e,a,a,1,0,t);return}for(n=1;n0)try{a=Oh(t,lo,Ii)}catch(o){throw o=bs(o),De(o,130)?(r=o,ue(new nV(r))):ue(o)}return n=(!e.a&&(e.a=new Pie(e)),e.a),a=0?l(Oe(n,a),58):null}function kkn(e,t){if(e<0)return KA(Swt,he(le(wa,1),Rn,1,5,["index",pt(e)]));if(t<0)throw ue(new Yn(_wt+t));return KA("%s (%s) must be less than size (%s)",he(le(wa,1),Rn,1,5,["index",pt(e),pt(t)]))}function Ekn(e){var t,n,r,a,o;if(e==null)return ul;for(o=new Hm(Co,"[","]"),n=e,r=0,a=n.length;r=0?e.Lh(n,!0,!0):Hw(e,a,!0),160)),l(r,220).Zl(t);else throw ue(new Yn(Ob+t.xe()+kL))}function g9e(e){var t,n;return e>-0x800000000000&&e<0x800000000000?e==0?0:(t=e<0,t&&(e=-e),n=ua(b.Math.floor(b.Math.log(e)/.6931471805599453)),(!t||e!=b.Math.pow(2,n))&&++n,n):Qft(Zc(e))}function Rkn(e){var t,n,r,a,o,f,g;for(o=new bd,n=new G(e);n.a2&&g.e.b+g.j.b<=2&&(a=g,r=f),o.a.zc(a,o),a.q=r);return o}function jkn(e,t,n){n.Ug("Eades radial",1),n.dh(t,OG),e.d=l(at(t,(H5(),Y6)),27),e.c=ze(Ge(at(t,(Sb(),HW)))),e.e=sue(l(at(t,FB),300)),e.a=g5n(l(at(t,jIe),434)),e.b=N8n(l(at(t,PIe),354)),b8n(e),n.dh(t,OG)}function $kn(e,t){if(t.Ug("Target Width Setter",1),P1(e,(z1(),fge)))Hi(e,(ug(),T4),Ge(at(e,fge)));else throw ue(new Vp("A target width has to be set if the TargetWidthWidthApproximator should be used."));t.Vg()}function jpt(e,t){var n,r,a;return r=new op(e),pc(r,t),rt(r,(ft(),aW),t),rt(r,(Nt(),Ms),(Ra(),Mu)),rt(r,Rd,(og(),tY)),x(r,(Zn(),Us)),n=new gu,Mc(n,r),la(n,(Ct(),er)),a=new gu,Mc(a,r),la(a,ar),r}function $pt(e){switch(e.g){case 0:return new Wie((Iw(),DB));case 1:return new Qre;case 2:return new Jre;default:throw ue(new Yn("No implementation is available for the crossing minimizer "+(e.f!=null?e.f:""+e.g)))}}function zpt(e,t){var n,r,a,o,f;for(e.c[t.p]=!0,vt(e.a,t),f=new G(t.j);f.a=o)f.$b();else for(a=f.Kc(),r=0;r0?Zwe():f<0&&Upt(e,t,-f),!0):!1}function tP(e){var t,n,r,a,o,f,g;if(g=0,e.b==0){for(f=_dt(e,!0),t=0,r=f,a=0,o=r.length;a0&&(g+=n,++t);t>1&&(g+=e.c*(t-1))}else g=qJe(cce(xy(Fi(c5e(e.a),new ja),new Ou)));return g>0?g+e.n.d+e.n.a:0}function nP(e){var t,n,r,a,o,f,g;if(g=0,e.b==0)g=qJe(cce(xy(Fi(c5e(e.a),new Xc),new Bc)));else{for(f=Adt(e,!0),t=0,r=f,a=0,o=r.length;a0&&(g+=n,++t);t>1&&(g+=e.c*(t-1))}return g>0?g+e.n.b+e.n.c:0}function Kkn(e){var t,n;if(e.c.length!=2)throw ue(new nc("Order only allowed for two paths."));t=(Sn(0,e.c.length),l(e.c[0],18)),n=(Sn(1,e.c.length),l(e.c[1],18)),t.d.i!=n.c.i&&(e.c.length=0,$n(e.c,n),$n(e.c,t))}function Gpt(e,t,n){var r;for(F5(n,t.g,t.f),Qh(n,t.i,t.j),r=0;r<(!t.a&&(t.a=new nt(Ai,t,10,11)),t.a).i;r++)Gpt(e,l(Oe((!t.a&&(t.a=new nt(Ai,t,10,11)),t.a),r),27),l(Oe((!n.a&&(n.a=new nt(Ai,n,10,11)),n.a),r),27))}function Wkn(e,t){var n,r,a,o;for(o=l(Qo(e.b,t),127),n=o.a,a=l(l($i(e.r,t),21),87).Kc();a.Ob();)r=l(a.Pb(),117),r.c&&(n.a=b.Math.max(n.a,j4e(r.c)));if(n.a>0)switch(t.g){case 2:o.n.c=e.s;break;case 4:o.n.b=e.s}}function Ykn(e,t){var n,r,a;return n=l(Q(t,(b0(),qx)),17).a-l(Q(e,qx),17).a,n==0?(r=ma(Ja(l(Q(e,(bb(),hB)),8)),l(Q(e,$L),8)),a=ma(Ja(l(Q(t,hB),8)),l(Q(t,$L),8)),Yi(r.a*r.b,a.a*a.b)):n}function Xkn(e,t){var n,r,a;return n=l(Q(t,(Hc(),RW)),17).a-l(Q(e,RW),17).a,n==0?(r=ma(Ja(l(Q(e,(Qi(),NB)),8)),l(Q(e,QT),8)),a=ma(Ja(l(Q(t,NB),8)),l(Q(t,QT),8)),Yi(r.a*r.b,a.a*a.b)):n}function Kpt(e){var t,n;return n=new tb,n.a+="e_",t=H3n(e),t!=null&&(n.a+=""+t),e.c&&e.d&&(hi((n.a+=" ",n),fU(e.c)),hi(wu((n.a+="[",n),e.c.i),"]"),hi((n.a+=Phe,n),fU(e.d)),hi(wu((n.a+="[",n),e.d.i),"]")),n.a}function Wpt(e){switch(e.g){case 0:return new aie;case 1:return new dk;case 2:return new sie;case 3:return new iie;default:throw ue(new Yn("No implementation is available for the layout phase "+(e.f!=null?e.f:""+e.g)))}}function m9e(e,t,n,r,a){var o;switch(o=0,a.g){case 1:o=b.Math.max(0,t.b+e.b-(n.b+r));break;case 3:o=b.Math.max(0,-e.b-r);break;case 2:o=b.Math.max(0,-e.a-r);break;case 4:o=b.Math.max(0,t.a+e.a-(n.a+r))}return o}function Qkn(e,t,n){var r,a,o,f,g;if(n)for(a=n.a.length,r=new Dm(a),g=(r.b-r.a)*r.c<0?(sb(),tm):new cb(r);g.Ob();)f=l(g.Pb(),17),o=Jk(n,f.a),hSe in o.a||Yfe in o.a?h_n(e,o,t):MIn(e,o,t),Lhn(l(cr(e.b,NE(o)),74))}function v9e(e){var t,n;switch(e.b){case-1:return!0;case 0:return n=e.t,n>1||n==-1?(e.b=-1,!0):(t=Of(e),t&&(Fo(),t.lk()==g5t)?(e.b=-1,!0):(e.b=1,!1));default:case 1:return!1}}function w9e(e,t){var n,r,a,o;if(Li(e),e.c!=0||e.a!=123)throw ue(new ri(ai((Jr(),B4t))));if(o=t==112,r=e.d,n=Nk(e.i,125,r),n<0)throw ue(new ri(ai((Jr(),F4t))));return a=tf(e.i,r,n),e.d=n+1,vlt(a,o,(e.e&512)==512)}function Ypt(e){var t,n,r,a,o,f,g;if(r=e.a.c.length,r>0)for(f=e.c.d,g=e.d.d,a=md(ma(new lt(g.a,g.b),f),1/(r+1)),o=new lt(f.a,f.b),n=new G(e.a);n.a=0&&r=0?e.Lh(n,!0,!0):Hw(e,a,!0),160)),l(r,220).Wl(t);throw ue(new Yn(Ob+t.xe()+$fe))}function tEn(){x3e();var e;return J_t?l(VE((ib(),Gf),Ff),2038):(wi(uv,new OI),XMn(),e=l(De(xu((ib(),Gf),Ff),560)?xu(Gf,Ff):new fat,560),J_t=!0,QIn(e),iOn(e),ki((y3e(),_Pe),e,new k1),rc(Gf,Ff,e),e)}function nEn(e,t){var n,r,a,o;e.j=-1,hh(e.e)?(n=e.i,o=e.i!=0,tN(e,t),r=new Zg(e.e,3,e.c,null,t,n,o),a=t.zl(e.e,e.c,null),a=Lgt(e,t,a),a?(a.nj(r),a.oj()):Ni(e.e,r)):(tN(e,t),a=t.zl(e.e,e.c,null),a&&a.oj())}function kU(e,t){var n,r,a;if(a=0,r=t[0],r>=e.length)return-1;for(n=(Xn(r,e.length),e.charCodeAt(r));n>=48&&n<=57&&(a=a*10+(n-48),++r,!(r>=e.length));)n=(Xn(r,e.length),e.charCodeAt(r));return r>t[0]?t[0]=r:a=-1,a}function rEn(e){var t,n,r,a,o;return a=l(e.a,17).a,o=l(e.b,17).a,n=a,r=o,t=b.Math.max(b.Math.abs(a),b.Math.abs(o)),a<=0&&a==o?(n=0,r=o-1):a==-t&&o!=t?(n=o,r=a,o>=0&&++n):(n=-o,r=a),new ca(pt(n),pt(r))}function iEn(e,t,n,r){var a,o,f,g,w,E;for(a=0;a=0&&E>=0&&w=e.i)throw ue(new tc(Qfe+t+av+e.i));if(n>=e.i)throw ue(new tc(Jfe+n+av+e.i));return r=e.g[n],t!=n&&(t>16),t=r>>16&16,n=16-t,e=e>>t,r=e-256,t=r>>16&8,n+=t,e<<=t,r=e-Xy,t=r>>16&4,n+=t,e<<=t,r=e-_d,t=r>>16&2,n+=t,e<<=t,r=e>>14,t=r&~(r>>1),n+2-t)}function aEn(e){tx();var t,n,r,a;for(wK=new bt,X0e=new Pr,Y0e=new bt,t=(!e.a&&(e.a=new nt(Ai,e,10,11)),e.a),XDn(t),a=new or(t);a.e!=a.i.gc();)r=l(gr(a),27),gc(wK,r,0)==-1&&(n=new bt,vt(Y0e,n),Z1t(r,n));return Y0e}function oEn(e,t,n){var r,a,o,f;e.a=n.b.d,De(t,326)?(a=l6(l(t,74),!1,!1),o=QN(a),r=new t_(e),to(o,r),dP(o,a),t.of((pi(),x3))!=null&&to(l(t.of(x3),75),r)):(f=l(t,422),f.rh(f.nh()+e.a.a),f.sh(f.oh()+e.a.b))}function cEn(e,t){var n,r,a;for(a=new bt,r=Rr(t.a,0);r.b!=r.d.c;)n=l(Br(r),65),n.c.g==e.g&&qe(Q(n.b,(Hc(),$d)))!==qe(Q(n.c,$d))&&!W5(new bn(null,new kn(a,16)),new cXe(n))&&$n(a.c,n);return Vs(a,new Mte),a}function Qpt(e,t,n){var r,a,o,f;return De(t,153)&&De(n,153)?(o=l(t,153),f=l(n,153),e.a[o.a][f.a]+e.a[f.a][o.a]):De(t,250)&&De(n,250)&&(r=l(t,250),a=l(n,250),r.a==a.a)?l(Q(a.a,(b0(),qx)),17).a:0}function Jpt(e,t){var n,r,a,o,f,g,w,E;for(E=ze(Ge(Q(t,(Nt(),tM)))),w=e[0].n.a+e[0].o.a+e[0].d.c+E,g=1;g=0?n:(g=eA(ma(new lt(f.c+f.b/2,f.d+f.a/2),new lt(o.c+o.b/2,o.d+o.a/2))),-(Tmt(o,f)-1)*g)}function lEn(e,t,n){var r;Is(new bn(null,(!n.a&&(n.a=new nt(cs,n,6,6)),new kn(n.a,16))),new dtt(e,t)),Is(new bn(null,(!n.n&&(n.n=new nt(ec,n,1,7)),new kn(n.n,16))),new gtt(e,t)),r=l(at(n,(pi(),x3)),75),r&&k7e(r,e,t)}function Hw(e,t,n){var r,a,o;if(o=g6((El(),io),e.Dh(),t),o)return Fo(),l(o,69).xk()||(o=rx(ic(io,o))),a=(r=e.Ih(o),l(r>=0?e.Lh(r,!0,!0):Hw(e,o,!0),160)),l(a,220).Sl(t,n);throw ue(new Yn(Ob+t.xe()+$fe))}function y9e(e,t,n,r){var a,o,f,g,w;if(a=e.d[t],a){if(o=a.g,w=a.i,r!=null){for(g=0;g=n&&(r=t,E=(w.c+w.a)/2,f=E-n,w.c<=E-n&&(a=new vae(w.c,f),pw(e,r++,a)),g=E+n,g<=w.a&&(o=new vae(g,w.a),Ey(r,e.c.length),x_(e.c,r,o)))}function t2t(e,t,n){var r,a,o,f,g,w;if(!t.dc()){for(a=new os,w=t.Kc();w.Ob();)for(g=l(w.Pb(),40),ki(e.a,pt(g.g),pt(n)),f=(r=Rr(new Hg(g).a.d,0),new C5(r));QI(f.a);)o=l(Br(f.a),65).c,Cs(a,o,a.c.b,a.c);t2t(e,a,n+1)}}function x9e(e){var t;if(!e.c&&e.g==null)e.d=e.bj(e.f),qr(e,e.d),t=e.d;else{if(e.g==null)return!0;if(e.i==0)return!1;t=l(e.g[e.i-1],51)}return t==e.b&&null.Vm>=null.Um()?(CU(e),x9e(e)):t.Ob()}function n2t(e){if(this.a=e,e.c.i.k==(Zn(),Us))this.c=e.c,this.d=l(Q(e.c.i,(ft(),Wc)),64);else if(e.d.i.k==Us)this.c=e.d,this.d=l(Q(e.d.i,(ft(),Wc)),64);else throw ue(new Yn("Edge "+e+" is not an external edge."))}function r2t(e,t){var n,r,a;a=e.b,e.b=t,e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,3,a,e.b)),t?t!=e&&(Fu(e,t.zb),Qoe(e,t.d),n=(r=t.c,r??t.zb),Zoe(e,n==null||vn(n,t.zb)?null:n)):(Fu(e,null),Qoe(e,0),Zoe(e,null))}function i2t(e,t){var n;this.e=(ww(),Xr(e),ww(),P8e(e)),this.c=(Xr(t),P8e(t)),Tye(this.e.Rd().dc()==this.c.Rd().dc()),this.d=w1t(this.e),this.b=w1t(this.c),n=Lm(wa,[dt,Rn],[5,1],5,[this.e.Rd().gc(),this.c.Rd().gc()],2),this.a=n,jwn(this)}function s2t(e){!C0e&&(C0e=cIn());var t=e.replace(/[\x00-\x1f\xad\u0600-\u0603\u06dd\u070f\u17b4\u17b5\u200b-\u200f\u2028-\u202e\u2060-\u2064\u206a-\u206f\ufeff\ufff9-\ufffb"\\]/g,function(n){return f2n(n)});return'"'+t+'"'}function k9e(e,t,n,r,a,o){var f,g,w,E,C;if(a!=0)for(qe(e)===qe(n)&&(e=e.slice(t,t+a),t=0),w=n,g=t,E=t+a;g=f)throw ue(new my(t,f));return a=n[t],f==1?r=null:(r=We(epe,r0e,424,f-1,0,1),pu(n,0,r,0,t),o=f-t-1,o>0&&pu(n,t+1,r,t,o)),PE(e,r),Apt(e,t,a),a}function o2t(e){var t,n;if(e.f){for(;e.n0?o=gx(n):o=BN(gx(n))),Hi(t,VT,o)}function mEn(e,t){var n;t.Ug("Partition preprocessing",1),n=l(yc(Fi(Dc(Fi(new bn(null,new kn(e.a,16)),new AZ),new LZ),new wj),Pl(new zr,new ht,new Fn,he(le(oc,1),it,108,0,[(Fl(),Ec)]))),15),Is(n.Oc(),new t8),t.Vg()}function vEn(e,t){var n,r,a,o,f;for(f=e.j,t.a!=t.b&&Vs(f,new kS),a=f.c.length/2|0,r=0;r0&&lP(e,n,t),o):r.a!=null?(lP(e,t,n),-1):a.a!=null?(lP(e,n,t),1):0}function yEn(e,t){var n,r,a,o,f;for(a=t.b.b,e.a=We(mf,Qy,15,a,0,1),e.b=We(ih,pg,28,a,16,1),f=Rr(t.b,0);f.b!=f.d.c;)o=l(Br(f),40),e.a[o.g]=new os;for(r=Rr(t.a,0);r.b!=r.d.c;)n=l(Br(r),65),e.a[n.b.g].Fc(n),e.a[n.c.g].Fc(n)}function h2t(e,t){var n,r,a,o;e.Pj()?(n=e.Ej(),o=e.Qj(),++e.j,e.qj(n,e.Zi(n,t)),r=e.Ij(3,null,t,n,o),e.Mj()?(a=e.Nj(t,null),a?(a.nj(r),a.oj()):e.Jj(r)):e.Jj(r)):(tat(e,t),e.Mj()&&(a=e.Nj(t,null),a&&a.oj()))}function E9e(e,t,n){var r,a,o;e.Pj()?(o=e.Qj(),IN(e,t,n),r=e.Ij(3,null,n,t,o),e.Mj()?(a=e.Nj(n,null),e.Tj()&&(a=e.Uj(n,a)),a?(a.nj(r),a.oj()):e.Jj(r)):e.Jj(r)):(IN(e,t,n),e.Mj()&&(a=e.Nj(n,null),a&&a.oj()))}function EU(e,t){var n,r,a,o,f;for(f=Wu(e.e.Dh(),t),a=new X2,n=l(e.g,124),o=e.i;--o>=0;)r=n[o],f.am(r.Lk())&&qr(a,r);!awt(e,a)&&hh(e.e)&&xk(e,t.Jk()?db(e,6,t,(Cn(),_o),null,-1,!1):db(e,t.tk()?2:1,t,null,null,-1,!1))}function xEn(e,t){var n,r,a,o,f;return e.a==(zE(),VL)?!0:(o=t.a.c,n=t.a.c+t.a.b,!(t.j&&(r=t.A,f=r.c.c.a-r.o.a/2,a=o-(r.n.a+r.o.a),a>f)||t.q&&(r=t.C,f=r.c.c.a-r.o.a/2,a=r.n.a-n,a>f)))}function f2t(e){foe();var t,n,r,a,o,f,g;for(n=new e2,a=new G(e.e.b);a.a1?e.e*=ze(e.a):e.f/=ze(e.a),Hyn(e),Y5n(e),GSn(e),rt(e.b,(IA(),vK),e.g)}function b2t(e,t,n){var r,a,o,f,g,w;for(r=0,w=n,t||(r=n*(e.c.length-1),w*=-1),o=new G(e);o.a=0?e.Ah(null):e.Ph().Th(e,-1-t,null,null)),e.Bh(l(a,54),n),r&&r.oj(),e.vh()&&e.wh()&&n>-1&&Ni(e,new _a(e,9,n,o,a)),a):o}function S9e(e,t){var n,r,a,o,f;for(o=e.b.Ce(t),r=(n=e.a.get(o),n??We(wa,Rn,1,0,5,1)),f=0;f>5,a>=e.d)return e.e<0;if(n=e.a[a],t=1<<(t&31),e.e<0){if(r=Mft(e),a>16)),15).dd(o),g0&&(!(Ug(e.a.c)&&t.n.d)&&!(B5(e.a.c)&&t.n.b)&&(t.g.d+=b.Math.max(0,r/2-.5)),!(Ug(e.a.c)&&t.n.a)&&!(B5(e.a.c)&&t.n.c)&&(t.g.a-=r-1))}function C2t(e){var t,n,r,a,o;if(a=new bt,o=ymt(e,a),t=l(Q(e,(ft(),jl)),10),t)for(r=new G(t.j);r.a>t,o=e.m>>t|n<<22-t,a=e.l>>t|e.m<<22-t):t<44?(f=r?hp:0,o=n>>t-22,a=e.m>>t-22|n<<44-t):(f=r?hp:0,o=r?eh:0,a=n>>t-44),qu(a&eh,o&eh,f&hp)}function Gue(e){var t,n,r,a,o,f;for(this.c=new bt,this.d=e,r=gs,a=gs,t=ia,n=ia,f=Rr(e,0);f.b!=f.d.c;)o=l(Br(f),8),r=b.Math.min(r,o.a),a=b.Math.min(a,o.b),t=b.Math.max(t,o.a),n=b.Math.max(n,o.b);this.a=new ef(r,a,t-r,n-a)}function _2t(e,t){var n,r,a,o,f,g;for(o=new G(e.b);o.a0&&De(t,44)&&(e.a._j(),E=l(t,44),w=E.ld(),o=w==null?0:es(w),f=Qye(e.a,o),n=e.a.d[f],n)){for(r=l(n.g,379),C=n.i,g=0;g=2)for(n=a.Kc(),t=Ge(n.Pb());n.Ob();)o=t,t=Ge(n.Pb()),r=b.Math.min(r,(nr(t),t-(nr(o),o)));return r}function HEn(e,t){var n,r,a;for(a=new bt,r=Rr(t.a,0);r.b!=r.d.c;)n=l(Br(r),65),n.b.g==e.g&&!vn(n.b.c,DG)&&qe(Q(n.b,(Hc(),$d)))!==qe(Q(n.c,$d))&&!W5(new bn(null,new kn(a,16)),new uXe(n))&&$n(a.c,n);return Vs(a,new Nte),a}function VEn(e,t){var n,r,a;if(qe(t)===qe(Xr(e)))return!0;if(!De(t,15)||(r=l(t,15),a=e.gc(),a!=r.gc()))return!1;if(De(r,59)){for(n=0;n0&&(a=n),f=new G(e.f.e);f.a0?(t-=1,n-=1):r>=0&&a<0?(t+=1,n+=1):r>0&&a>=0?(t-=1,n+=1):(t+=1,n-=1),new ca(pt(t),pt(n))}function iTn(e,t){return e.ct.c?1:e.bt.b?1:e.a!=t.a?es(e.a)-es(t.a):e.d==(oA(),uM)&&t.d==cM?-1:e.d==cM&&t.d==uM?1:0}function N2t(e,t){var n,r,a,o,f;return o=t.a,o.c.i==t.b?f=o.d:f=o.c,o.c.i==t.b?r=o.c:r=o.d,a=S5n(e.a,f,r),a>0&&a0):a<0&&-a0):!1}function sTn(e,t,n,r){var a,o,f,g,w,E,C,L;for(a=(t-e.d)/e.c.c.length,o=0,e.a+=n,e.d=t,L=new G(e.c);L.a>24;return f}function oTn(e){if(e.ze()){var t=e.c;t.Ae()?e.o="["+t.n:t.ze()?e.o="["+t.xe():e.o="[L"+t.xe()+";",e.b=t.we()+"[]",e.k=t.ye()+"[]";return}var n=e.j,r=e.d;r=r.split("/"),e.o=Xce(".",[n,Xce("$",r)]),e.b=Xce(".",[n,Xce(".",r)]),e.k=r[r.length-1]}function cTn(e,t){var n,r,a,o,f;for(f=null,o=new G(e.e.a);o.a=0;t-=2)for(n=0;n<=t;n+=2)(e.b[n]>e.b[n+2]||e.b[n]===e.b[n+2]&&e.b[n+1]>e.b[n+3])&&(r=e.b[n+2],e.b[n+2]=e.b[n],e.b[n]=r,r=e.b[n+3],e.b[n+3]=e.b[n+1],e.b[n+1]=r);e.c=!0}}function hTn(e,t){var n,r,a,o,f,g,w,E,C;for(E=-1,C=0,f=e,g=0,w=f.length;g0&&++C;++E}return C}function g0(e){var t,n;return n=new Th(_m(e.Rm)),n.a+="@",hi(n,(t=es(e)>>>0,t.toString(16))),e.Vh()?(n.a+=" (eProxyURI: ",wu(n,e._h()),e.Kh()&&(n.a+=" eClass: ",wu(n,e.Kh())),n.a+=")"):e.Kh()&&(n.a+=" (eClass: ",wu(n,e.Kh()),n.a+=")"),n.a}function HA(e){var t,n,r,a;if(e.e)throw ue(new nc((Gg(R0e),phe+R0e.k+bhe)));for(e.d==(Js(),J1)&&UU(e,uc),n=new G(e.a.a);n.a>24}return n}function gTn(e,t,n){var r,a,o;if(a=l(Qo(e.i,t),314),!a)if(a=new yht(e.d,t,n),Q8(e.i,t,a),$8e(t))vhn(e.a,t.c,t.b,a);else switch(o=Q9n(t),r=l(Qo(e.p,o),252),o.g){case 1:case 3:a.j=!0,Xie(r,t.b,a);break;case 4:case 2:a.k=!0,Xie(r,t.c,a)}return a}function pTn(e,t){var n,r,a,o,f,g,w,E,C;for(w=eg(e.c-e.b&e.a.length-1),E=null,C=null,o=new nA(e);o.a!=o.b;)a=l(FV(o),10),n=(g=l(Q(a,(ft(),o1)),12),g?g.i:null),r=(f=l(Q(a,$f),12),f?f.i:null),(E!=n||C!=r)&&(m2t(w,t),E=n,C=r),$n(w.c,a);m2t(w,t)}function bTn(e,t,n,r){var a,o,f,g,w,E;if(g=new X2,w=Wu(e.e.Dh(),t),a=l(e.g,124),Fo(),l(t,69).xk())for(f=0;f=0)return a;for(o=1,g=new G(t.j);g.a=0)return a;for(o=1,g=new G(t.j);g.a0&&t.Ne((Sn(a-1,e.c.length),l(e.c[a-1],10)),o)>0;)rf(e,a,(Sn(a-1,e.c.length),l(e.c[a-1],10))),--a;Sn(a,e.c.length),e.c[a]=o}n.a=new Pr,n.b=new Pr}function mTn(e,t,n){var r,a,o,f,g,w,E,C;for(C=(r=l(t.e&&t.e(),9),new Zh(r,l(c0(r,r.length),9),0)),w=Gy(n,"[\\[\\]\\s,]+"),o=w,f=0,g=o.length;f=0?(t||(t=new h_,r>0&&Xo(t,(Ga(0,r,e.length),e.substr(0,r)))),t.a+="\\",Uk(t,n&Zs)):t&&Uk(t,n&Zs);return t?t.a:e}function wTn(e){var t,n,r;for(n=new G(e.a.a.b);n.a0&&(!(Ug(e.a.c)&&t.n.d)&&!(B5(e.a.c)&&t.n.b)&&(t.g.d-=b.Math.max(0,r/2-.5)),!(Ug(e.a.c)&&t.n.a)&&!(B5(e.a.c)&&t.n.c)&&(t.g.a+=b.Math.max(0,r-1)))}function H2t(e,t,n){var r,a;if((e.c-e.b&e.a.length-1)==2)t==(Ct(),Qn)||t==ar?(uV(l(wA(e),15),(Ih(),kg)),uV(l(wA(e),15),Gb)):(uV(l(wA(e),15),(Ih(),Gb)),uV(l(wA(e),15),kg));else for(a=new nA(e);a.a!=a.b;)r=l(FV(a),15),uV(r,n)}function yTn(e,t){var n,r,a,o,f,g,w;for(a=$k(new ywe(e)),g=new Ua(a,a.c.length),o=$k(new ywe(t)),w=new Ua(o,o.c.length),f=null;g.b>0&&w.b>0&&(n=(mr(g.b>0),l(g.a.Xb(g.c=--g.b),27)),r=(mr(w.b>0),l(w.a.Xb(w.c=--w.b),27)),n==r);)f=n;return f}function V2t(e,t,n){var r,a,o,f;Uot(e,t)>Uot(e,n)?(r=Oc(n,(Ct(),ar)),e.d=r.dc()?0:Tae(l(r.Xb(0),12)),f=Oc(t,er),e.b=f.dc()?0:Tae(l(f.Xb(0),12))):(a=Oc(n,(Ct(),er)),e.d=a.dc()?0:Tae(l(a.Xb(0),12)),o=Oc(t,ar),e.b=o.dc()?0:Tae(l(o.Xb(0),12)))}function U2t(e,t){var n,r,a,o;for(n=e.o.a,o=l(l($i(e.r,t),21),87).Kc();o.Ob();)a=l(o.Pb(),117),a.e.a=n*ze(Ge(a.b.of(pK))),a.e.b=(r=a.b,r.pf((pi(),rh))?r.ag()==(Ct(),Qn)?-r.Mf().b-ze(Ge(r.of(rh))):ze(Ge(r.of(rh))):r.ag()==(Ct(),Qn)?-r.Mf().b:0)}function xTn(e,t){var n,r,a,o;for(t.Ug("Self-Loop pre-processing",1),r=new G(e.a);r.ae.c));f++)a.a>=e.s&&(o<0&&(o=f),g=f);return w=(e.s+e.c)/2,o>=0&&(r=u_n(e,t,o,g),w=oln((Sn(r,t.c.length),l(t.c[r],339))),gEn(t,r,n)),w}function Wr(e,t,n){var r,a,o,f,g,w,E;for(f=(o=new CI,o),g7e(f,(nr(t),t)),E=(!f.b&&(f.b=new dh((Tn(),No),Yc,f)),f.b),w=1;w0&&sMn(this,a)}function F9e(e,t,n,r,a,o){var f,g,w;if(!a[t.a]){for(a[t.a]=!0,f=r,!f&&(f=new KH),vt(f.e,t),w=o[t.a].Kc();w.Ob();)g=l(w.Pb(),290),!(g.d==n||g.c==n)&&(g.c!=t&&F9e(e,g.c,t,f,a,o),g.d!=t&&F9e(e,g.d,t,f,a,o),vt(f.c,g),ra(f.d,g.b));return f}return null}function TTn(e){var t,n,r,a,o,f,g;for(t=0,a=new G(e.e);a.a=2}function CTn(e,t,n,r,a){var o,f,g,w,E,C;for(o=e.c.d.j,f=l(ff(n,0),8),C=1;C1||(t=rs(E0,he(le(Ko,1),it,95,0,[mp,T0])),yN(NH(t,e))>1)||(r=rs(S0,he(le(Ko,1),it,95,0,[Eg,qf])),yN(NH(r,e))>1))}function R9e(e,t,n){var r,a,o;for(o=new G(e.t);o.a0&&(r.b.n-=r.c,r.b.n<=0&&r.b.u>0&&ui(t,r.b));for(a=new G(e.i);a.a0&&(r.a.u-=r.c,r.a.u<=0&&r.a.n>0&&ui(n,r.a))}function CU(e){var t,n,r,a,o;if(e.g==null&&(e.d=e.bj(e.f),qr(e,e.d),e.c))return o=e.f,o;if(t=l(e.g[e.i-1],51),a=t.Pb(),e.e=t,n=e.bj(a),n.Ob())e.d=n,qr(e,n);else for(e.d=null;!t.Ob()&&(Ts(e.g,--e.i,null),e.i!=0);)r=l(e.g[e.i-1],51),t=r;return a}function _Tn(e,t){var n,r,a,o,f,g;if(r=t,a=r.Lk(),up(e.e,a)){if(a.Si()&&qH(e,a,r.md()))return!1}else for(g=Wu(e.e.Dh(),a),n=l(e.g,124),o=0;o1||n>1)return 2;return t+n==1?2:0}function Jl(e,t){var n,r,a,o,f,g;return o=e.a*hhe+e.b*1502,g=e.b*hhe+11,n=b.Math.floor(g*MP),o+=n,g-=n*cEe,o%=cEe,e.a=o,e.b=g,t<=24?b.Math.floor(e.a*m_e[t]):(a=e.a*(1<=2147483648&&(r-=4294967296),r)}function X2t(e,t,n){var r,a,o,f,g,w,E;for(o=new bt,E=new os,f=new os,YAn(e,E,f,t),_Mn(e,E,f,t,n),w=new G(e);w.ar.b.g&&$n(o.c,r);return o}function OTn(e,t,n){var r,a,o,f,g,w;for(g=e.c,f=(n.q?n.q:(Cn(),Cn(),mg)).vc().Kc();f.Ob();)o=l(f.Pb(),44),r=!_k(Fi(new bn(null,new kn(g,16)),new Wl(new att(t,o)))).Bd((Am(),zx)),r&&(w=o.md(),De(w,4)&&(a=H8e(w),a!=null&&(w=a)),t.qf(l(o.ld(),149),w))}function NTn(e,t,n){var r,a;if(qO(e.b),X0(e.b,(PN(),WW),(b_(),qB)),X0(e.b,YW,t.g),X0(e.b,XW,t.a),e.a=bP(e.b,t),n.Ug("Compaction by shrinking a tree",e.a.c.length),t.i.c.length>1)for(a=new G(e.a);a.a=0?e.Lh(r,!0,!0):Hw(e,o,!0),160)),l(a,220).Xl(t,n)}else throw ue(new Yn(Ob+t.xe()+kL))}function SU(e,t){var n,r,a,o,f;if(t){for(o=De(e.Cb,90)||De(e.Cb,102),f=!o&&De(e.Cb,331),r=new or((!t.a&&(t.a=new G_(t,Wo,t)),t.a));r.e!=r.i.gc();)if(n=l(gr(r),89),a=jU(n),o?De(a,90):f?De(a,156):a)return a;return o?(Tn(),Kf):(Tn(),td)}else return null}function PTn(e,t){var n,r,a,o;for(t.Ug("Resize child graph to fit parent.",1),r=new G(e.b);r.a=2*t&&vt(n,new vae(f[r-1]+t,f[r]-t));return n}function RTn(e,t,n){var r,a,o,f,g,w,E,C;if(n)for(o=n.a.length,r=new Dm(o),g=(r.b-r.a)*r.c<0?(sb(),tm):new cb(r);g.Ob();)f=l(g.Pb(),17),a=Jk(n,f.a),a&&(w=gmn(e,(E=(rb(),C=new jwe,C),t&&z9e(E,t),E),a),fE(w,Yg(a,Pd)),mU(a,w),h9e(a,w),wce(e,a,w))}function _U(e){var t,n,r,a,o,f;if(!e.j){if(f=new IS,t=qM,o=t.a.zc(e,t),o==null){for(r=new or(dc(e));r.e!=r.i.gc();)n=l(gr(r),29),a=_U(n),As(f,a),qr(f,n);t.a.Bc(e)!=null}Iy(f),e.j=new N5((l(Oe(tt((lb(),Vn).o),11),19),f.i),f.g),Yl(e).b&=-33}return e.j}function jTn(e){var t,n,r,a;if(e==null)return null;if(r=Tu(e,!0),a=eB.length,vn(r.substr(r.length-a,a),eB)){if(n=r.length,n==4){if(t=(Xn(0,r.length),r.charCodeAt(0)),t==43)return KPe;if(t==45)return wAt}else if(n==3)return KPe}return new Awe(r)}function $Tn(e){var t,n,r;return n=e.l,n&n-1||(r=e.m,r&r-1)||(t=e.h,t&t-1)||t==0&&r==0&&n==0?-1:t==0&&r==0&&n!=0?i7e(n):t==0&&r!=0&&n==0?i7e(r)+22:t!=0&&r==0&&n==0?i7e(t)+44:-1}function u6(e,t){var n,r,a,o,f;for(a=t.a&e.f,o=null,r=e.b[a];;r=r.b){if(r==t){o?o.b=t.b:e.b[a]=t.b;break}o=r}for(f=t.f&e.f,o=null,n=e.c[f];;n=n.d){if(n==t){o?o.d=t.d:e.c[f]=t.d;break}o=n}t.e?t.e.c=t.c:e.a=t.c,t.c?t.c.e=t.e:e.e=t.e,--e.i,++e.g}function zTn(e,t){var n;t.d?t.d.b=t.b:e.a=t.b,t.b?t.b.d=t.d:e.e=t.d,!t.e&&!t.c?(n=l(Lf(l(ax(e.b,t.a),260)),260),n.a=0,++e.c):(n=l(Lf(l(cr(e.b,t.a),260)),260),--n.a,t.e?t.e.c=t.c:n.b=l(Lf(t.c),511),t.c?t.c.e=t.e:n.c=l(Lf(t.e),511)),--e.d}function qTn(e){var t,n,r,a,o,f,g,w,E,C;for(n=e.o,t=e.p,f=Ii,a=lo,g=Ii,o=lo,E=0;E0),o.a.Xb(o.c=--o.b),by(o,a),mr(o.b3&&ag(e,0,t-3))}function VTn(e){var t,n,r,a;return qe(Q(e,(Nt(),p4)))===qe((rp(),A2))?!e.e&&qe(Q(e,TB))!==qe((vE(),vB)):(r=l(Q(e,Z1e),299),a=Rt(Bt(Q(e,ede)))||qe(Q(e,JL))===qe((dA(),mB)),t=l(Q(e,SMe),17).a,n=e.a.c.length,!a&&r!=(vE(),vB)&&(t==0||t>n))}function UTn(e){var t,n;for(n=0;n0);n++);if(n>0&&n0);t++);return t>0&&n>16!=6&&t){if(FE(e,t))throw ue(new Yn(EL+d2t(e)));r=null,e.Cb&&(r=(n=e.Db>>16,n>=0?lxe(e,r):e.Cb.Th(e,-1-n,null,r))),t&&(r=mx(t,e,6,r)),r=Wye(e,t,r),r&&r.oj()}else e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,6,t,t))}function AU(e,t){var n,r;if(t!=e.Cb||e.Db>>16!=3&&t){if(FE(e,t))throw ue(new Yn(EL+evt(e)));r=null,e.Cb&&(r=(n=e.Db>>16,n>=0?gxe(e,r):e.Cb.Th(e,-1-n,null,r))),t&&(r=mx(t,e,12,r)),r=Yye(e,t,r),r&&r.oj()}else e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,3,t,t))}function z9e(e,t){var n,r;if(t!=e.Cb||e.Db>>16!=9&&t){if(FE(e,t))throw ue(new Yn(EL+Jbt(e)));r=null,e.Cb&&(r=(n=e.Db>>16,n>=0?fxe(e,r):e.Cb.Th(e,-1-n,null,r))),t&&(r=mx(t,e,9,r)),r=Xye(e,t,r),r&&r.oj()}else e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,9,t,t))}function UE(e){var t,n,r,a,o;if(r=Of(e),o=e.j,o==null&&r)return e.Jk()?null:r.ik();if(De(r,156)){if(n=r.jk(),n&&(a=n.wi(),a!=e.i)){if(t=l(r,156),t.nk())try{e.g=a.ti(t,o)}catch(f){if(f=bs(f),De(f,82))e.g=null;else throw ue(f)}e.i=a}return e.g}return null}function ebt(e){var t;return t=new bt,vt(t,new B8(new lt(e.c,e.d),new lt(e.c+e.b,e.d))),vt(t,new B8(new lt(e.c,e.d),new lt(e.c,e.d+e.a))),vt(t,new B8(new lt(e.c+e.b,e.d+e.a),new lt(e.c+e.b,e.d))),vt(t,new B8(new lt(e.c+e.b,e.d+e.a),new lt(e.c,e.d+e.a))),t}function GTn(e){var t,n,r;if(e==null)return ul;try{return xc(e)}catch(a){if(a=bs(a),De(a,103))return t=a,r=_m(bh(e))+"@"+(n=(Vg(),q8e(e)>>>0),n.toString(16)),a6n(U3n(),(Dk(),"Exception during lenientFormat for "+r),t),"<"+r+" threw "+_m(t.Rm)+">";throw ue(a)}}function KTn(e,t,n){var r,a,o;for(o=t.a.ec().Kc();o.Ob();)a=l(o.Pb(),74),r=l(cr(e.b,a),272),!r&&(ds(cg(a))==ds(Eb(a))?NCn(e,a,n):cg(a)==ds(Eb(a))?cr(e.c,a)==null&&cr(e.b,Eb(a))!=null&&Ivt(e,a,n,!1):cr(e.d,a)==null&&cr(e.b,cg(a))!=null&&Ivt(e,a,n,!0))}function WTn(e,t){var n,r,a,o,f,g,w;for(a=e.Kc();a.Ob();)for(r=l(a.Pb(),10),g=new gu,Mc(g,r),la(g,(Ct(),ar)),rt(g,(ft(),oW),(Hn(),!0)),f=t.Kc();f.Ob();)o=l(f.Pb(),10),w=new gu,Mc(w,o),la(w,er),rt(w,oW,!0),n=new Tw,rt(n,oW,!0),po(n,g),Fa(n,w)}function YTn(e,t,n,r){var a,o,f,g;a=R1t(e,t,n),o=R1t(e,n,t),f=l(cr(e.c,t),118),g=l(cr(e.c,n),118),a1)for(t=hw((n=new Sm,++e.b,n),e.d),g=Rr(o,0);g.b!=g.d.c;)f=l(Br(g),125),p0(s0(i0(a0(r0(new _f,1),0),t),f))}function JTn(e,t,n){var r,a,o,f,g;for(n.Ug("Breaking Point Removing",1),e.a=l(Q(t,(Nt(),bp)),223),o=new G(t.b);o.a>16!=11&&t){if(FE(e,t))throw ue(new Yn(EL+oke(e)));r=null,e.Cb&&(r=(n=e.Db>>16,n>=0?pxe(e,r):e.Cb.Th(e,-1-n,null,r))),t&&(r=mx(t,e,10,r)),r=s4e(e,t,r),r&&r.oj()}else e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,11,t,t))}function ZTn(e){var t,n,r,a;for(r=new qm(new Sr(e.b).a);r.b;)n=Nw(r),a=l(n.ld(),12),t=l(n.md(),10),rt(t,(ft(),zi),a),rt(a,jl,t),rt(a,xB,(Hn(),!0)),la(a,l(Q(t,Wc),64)),Q(t,Wc),rt(a.i,(Nt(),Ms),(Ra(),sC)),l(Q(eo(a.i),Lu),21).Fc((Ho(),$T))}function eCn(e,t,n){var r,a,o,f,g,w;if(o=0,f=0,e.c)for(w=new G(e.d.i.j);w.ao.a?-1:a.aw){for(C=e.d,e.d=We(vPe,_Se,66,2*w+4,0,1),o=0;o=9223372036854776e3?(iE(),WSe):(a=!1,e<0&&(a=!0,e=-e),r=0,e>=Zm&&(r=ua(e/Zm),e-=r*Zm),n=0,e>=Lx&&(n=ua(e/Lx),e-=n*Lx),t=ua(e),o=qu(t,n,r),a&&yce(o),o)}function hCn(e){var t,n,r,a,o;if(o=new bt,Vu(e.b,new Jd(o)),e.b.c.length=0,o.c.length!=0){for(t=(Sn(0,o.c.length),l(o.c[0],82)),n=1,r=o.c.length;n=-t&&r==t?new ca(pt(n-1),pt(r)):new ca(pt(n),pt(r-1))}function rbt(){return vo(),he(le(EOn,1),it,81,0,[PAe,IAe,D6,f1e,eLe,DK,zK,l4,JAe,HAe,XAe,u4,ZAe,$Ae,tLe,SAe,PK,d1e,LK,RK,rLe,FK,_Ae,QAe,iLe,jK,nLe,MK,FAe,WAe,KAe,qK,MAe,AK,OK,LAe,LT,UAe,zAe,YAe,zL,OAe,DAe,GAe,qAe,NK,$K,AAe,BK,VAe,IK,RAe,BAe,gB,_K,jAe,NAe])}function gCn(e,t,n){e.d=0,e.b=0,t.k==(Zn(),Au)&&n.k==Au&&l(Q(t,(ft(),zi)),10)==l(Q(n,zi),10)&&($oe(t).j==(Ct(),Qn)?V2t(e,t,n):V2t(e,n,t)),t.k==Au&&n.k==Aa?$oe(t).j==(Ct(),Qn)?e.d=1:e.b=1:n.k==Au&&t.k==Aa&&($oe(n).j==(Ct(),Qn)?e.b=1:e.d=1),J6n(e,t,n)}function pCn(e){var t,n,r,a,o,f,g,w,E,C,L;return L=jxe(e),t=e.a,w=t!=null,w&&zk(L,"category",e.a),a=ZI(new br(e.d)),f=!a,f&&(E=new $p,e1(L,"knownOptions",E),n=new oQe(E),to(new br(e.d),n)),o=ZI(e.g),g=!o,g&&(C=new $p,e1(L,"supportedFeatures",C),r=new cQe(C),to(e.g,r)),L}function bCn(e){var t,n,r,a,o,f,g,w,E;for(r=!1,t=336,n=0,o=new Grt(e.length),g=e,w=0,E=g.length;w>16!=7&&t){if(FE(e,t))throw ue(new Yn(EL+lpt(e)));r=null,e.Cb&&(r=(n=e.Db>>16,n>=0?hxe(e,r):e.Cb.Th(e,-1-n,null,r))),t&&(r=l(t,54).Rh(e,1,oF,r)),r=J4e(e,t,r),r&&r.oj()}else e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,7,t,t))}function ibt(e,t){var n,r;if(t!=e.Cb||e.Db>>16!=3&&t){if(FE(e,t))throw ue(new Yn(EL+c1t(e)));r=null,e.Cb&&(r=(n=e.Db>>16,n>=0?dxe(e,r):e.Cb.Th(e,-1-n,null,r))),t&&(r=l(t,54).Rh(e,0,uF,r)),r=Z4e(e,t,r),r&&r.oj()}else e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,3,t,t))}function Que(e,t){GE();var n,r,a,o,f,g,w,E,C;return t.d>e.d&&(g=e,e=t,t=g),t.d<63?iSn(e,t):(f=(e.d&-2)<<4,E=v6e(e,f),C=v6e(t,f),r=mle(e,sx(E,f)),a=mle(t,sx(C,f)),w=Que(E,C),n=Que(r,a),o=Que(mle(E,r),mle(a,C)),o=Tle(Tle(o,w),n),o=sx(o,f),w=sx(w,f<<1),Tle(Tle(w,o),n))}function p2(){p2=U,gde=new M5(cyt,0),fDe=new M5("LONGEST_PATH",1),dDe=new M5("LONGEST_PATH_SOURCE",2),dde=new M5("COFFMAN_GRAHAM",3),hDe=new M5($he,4),gDe=new M5("STRETCH_WIDTH",5),CW=new M5("MIN_WIDTH",6),WT=new M5("BF_MODEL_ORDER",7),YT=new M5("DF_MODEL_ORDER",8)}function vCn(e,t,n){var r,a,o,f,g;for(f=TA(e,n),g=We(wg,m2,10,t.length,0,1),r=0,o=f.Kc();o.Ob();)a=l(o.Pb(),12),Rt(Bt(Q(a,(ft(),xB))))&&(g[r++]=l(Q(a,jl),10));if(r=0;o+=n?1:-1)f=f|t.c.lg(w,o,n,r&&!Rt(Bt(Q(t.j,(ft(),jb))))&&!Rt(Bt(Q(t.j,(ft(),j6))))),f=f|t.q.ug(w,o,n),f=f|Ubt(e,w[o],n,r);return na(e.c,t),f}function DU(e,t,n){var r,a,o,f,g,w,E,C,L,B;for(C=Tct(e.j),L=0,B=C.length;L1&&(e.a=!0),Qdn(l(n.b,68),Oi(Ja(l(t.b,68).c),md(ma(Ja(l(n.b,68).a),l(t.b,68).a),a))),Dot(e,t),sbt(e,n)}function abt(e){var t,n,r,a,o,f,g;for(o=new G(e.a.a);o.a0&&o>0?f.p=t++:r>0?f.p=n++:o>0?f.p=a++:f.p=n++}Cn(),Vs(e.j,new W9)}function ECn(e){var t,n;n=null,t=l(jt(e.g,0),18);do{if(n=t.d.i,ns(n,(ft(),$f)))return l(Q(n,$f),12).i;if(n.k!=(Zn(),Ps)&&jr(new hr(dr(qs(n).a.Kc(),new j))))t=l(xr(new hr(dr(qs(n).a.Kc(),new j))),18);else if(n.k!=Ps)return null}while(n&&n.k!=(Zn(),Ps));return n}function TCn(e,t){var n,r,a,o,f,g,w,E,C;for(g=t.j,f=t.g,w=l(jt(g,g.c.length-1),113),C=(Sn(0,g.c.length),l(g.c[0],113)),E=vue(e,f,w,C),o=1;oE&&(w=n,C=a,E=r);t.a=C,t.c=w}function CCn(e,t,n){var r,a,o,f,g,w,E;for(E=new Kp(new UYe(e)),f=he(le(F8t,1),I3t,12,0,[t,n]),g=0,w=f.length;gw-e.b&&gw-e.a&&g0?o.a?(g=o.b.Mf().a,n>g&&(a=(n-g)/2,o.d.b=a,o.d.c=a)):o.d.c=e.s+n:W_(e.u)&&(r=$xe(o.b),r.c<0&&(o.d.b=-r.c),r.c+r.b>o.b.Mf().a&&(o.d.c=r.c+r.b-o.b.Mf().a))}function qCn(e,t){var n,r,a,o,f;f=new bt,n=t;do o=l(cr(e.b,n),131),o.B=n.c,o.D=n.d,$n(f.c,o),n=l(cr(e.k,n),18);while(n);return r=(Sn(0,f.c.length),l(f.c[0],131)),r.j=!0,r.A=l(r.d.a.ec().Kc().Pb(),18).c.i,a=l(jt(f,f.c.length-1),131),a.q=!0,a.C=l(a.d.a.ec().Kc().Pb(),18).d.i,f}function HCn(e){var t,n;if(t=l(e.a,17).a,n=l(e.b,17).a,t>=0){if(t==n)return new ca(pt(-t-1),pt(-t-1));if(t==-n)return new ca(pt(-t),pt(n+1))}return b.Math.abs(t)>b.Math.abs(n)?t<0?new ca(pt(-t),pt(n)):new ca(pt(-t),pt(n+1)):new ca(pt(t+1),pt(n))}function VCn(e){var t,n;n=l(Q(e,(Nt(),Qu)),171),t=l(Q(e,(ft(),hv)),311),n==(hf(),$b)?(rt(e,Qu,EB),rt(e,hv,(ep(),F6))):n==d4?(rt(e,Qu,EB),rt(e,hv,(ep(),Ux))):t==(ep(),F6)?(rt(e,Qu,$b),rt(e,hv,wB)):t==Ux&&(rt(e,Qu,d4),rt(e,hv,wB))}function IU(){IU=U,IB=new pte,XEt=fi(new Xs,(uo(),bu),(vo(),LK)),ZEt=yl(fi(new Xs,bu,FK),mc,BK),eTt=Td(Td(v_(yl(fi(new Xs,y0,zK),mc,$K),_u),jK),qK),QEt=yl(fi(fi(fi(new Xs,vg,DK),_u,OK),_u,LT),mc,IK),JEt=yl(fi(fi(new Xs,_u,LT),_u,AK),mc,_K)}function GA(){GA=U,rTt=fi(yl(new Xs,(uo(),mc),(vo(),RAe)),bu,LK),oTt=Td(Td(v_(yl(fi(new Xs,y0,zK),mc,$K),_u),jK),qK),iTt=yl(fi(fi(fi(new Xs,vg,DK),_u,OK),_u,LT),mc,IK),aTt=fi(fi(new Xs,bu,FK),mc,BK),sTt=yl(fi(fi(new Xs,_u,LT),_u,AK),mc,_K)}function UCn(e,t,n,r,a){var o,f;(!Do(t)&&t.c.i.c==t.d.i.c||!uft(Ic(he(le(Ea,1),dt,8,0,[a.i.n,a.n,a.a])),n))&&!Do(t)&&(t.c==a?Pk(t.a,0,new Eo(n)):ui(t.a,new Eo(n)),r&&!W0(e.a,n)&&(f=l(Q(t,(Nt(),cc)),75),f||(f=new bl,rt(t,cc,f)),o=new Eo(n),Cs(f,o,f.c.b,f.c),na(e.a,o)))}function ubt(e,t){var n,r,a,o;for(o=Yr(mo(fg,ig(Yr(mo(t==null?0:es(t),dg)),15))),n=o&e.b.length-1,a=null,r=e.b[n];r;a=r,r=r.a)if(r.d==o&&yd(r.i,t))return a?a.a=r.a:e.b[n]=r.a,RJe(l(Lf(r.c),604),l(Lf(r.f),604)),WI(l(Lf(r.b),227),l(Lf(r.e),227)),--e.f,++e.e,!0;return!1}function GCn(e){var t,n;for(n=new hr(dr(ka(e).a.Kc(),new j));jr(n);)if(t=l(xr(n),18),t.c.i.k!=(Zn(),cu))throw ue(new Vp(jhe+HN(e)+"' has its layer constraint set to FIRST, but has at least one incoming edge that does not come from a FIRST_SEPARATE node. That must not happen."))}function KCn(e,t,n){var r,a,o,f,g,w,E;if(a=d1t(e.Db&254),a==0)e.Eb=n;else{if(a==1)g=We(wa,Rn,1,2,5,1),o=mue(e,t),o==0?(g[0]=n,g[1]=e.Eb):(g[0]=e.Eb,g[1]=n);else for(g=We(wa,Rn,1,a+1,5,1),f=jm(e.Eb),r=2,w=0,E=0;r<=128;r<<=1)r==t?g[E++]=n:e.Db&r&&(g[E++]=f[w++]);e.Eb=g}e.Db|=t}function lbt(e,t,n){var r,a,o,f;for(this.b=new bt,a=0,r=0,f=new G(e);f.a0&&(o=l(jt(this.b,0),176),a+=o.o,r+=o.p),a*=2,r*=2,t>1?a=ua(b.Math.ceil(a*t)):r=ua(b.Math.ceil(r/t)),this.a=new I8e(a,r)}function hbt(e,t,n,r,a,o){var f,g,w,E,C,L,B,z,V,J,te,fe;for(C=r,t.j&&t.o?(z=l(cr(e.f,t.A),60),J=z.d.c+z.d.b,--C):J=t.a.c+t.a.b,L=a,n.q&&n.o?(z=l(cr(e.f,n.C),60),E=z.d.c,++L):E=n.a.c,te=E-J,w=b.Math.max(2,L-C),g=te/w,V=J+g,B=C;B=0;f+=a?1:-1){for(g=t[f],w=r==(Ct(),ar)?a?Oc(g,r):lf(Oc(g,r)):a?lf(Oc(g,r)):Oc(g,r),o&&(e.c[g.p]=w.gc()),L=w.Kc();L.Ob();)C=l(L.Pb(),12),e.d[C.p]=E++;ra(n,w)}}function dbt(e,t,n){var r,a,o,f,g,w,E,C;for(o=ze(Ge(e.b.Kc().Pb())),E=ze(Ge(V3n(t.b))),r=md(Ja(e.a),E-n),a=md(Ja(t.a),n-o),C=Oi(r,a),md(C,1/(E-o)),this.a=C,this.b=new bt,g=!0,f=e.b.Kc(),f.Pb();f.Ob();)w=ze(Ge(f.Pb())),g&&w-n>wfe&&(this.b.Fc(n),g=!1),this.b.Fc(w);g&&this.b.Fc(n)}function WCn(e){var t,n,r,a;if(f_n(e,e.n),e.d.c.length>0){for(u_(e.c);L9e(e,l(re(new G(e.e.a)),125))>5,t&=31,r>=e.d)return e.e<0?(Cd(),w6t):(Cd(),BL);if(o=e.d-r,a=We(Vr,di,28,o+1,15,1),j9n(a,o,e.a,r,t),e.e<0){for(n=0;n0&&e.a[n]<<32-t){for(n=0;n=0?!1:(n=g6((El(),io),a,t),n?(r=n.Ik(),(r>1||r==-1)&&kw(ic(io,n))!=3):!0)):!1}function JCn(e,t,n,r){var a,o,f,g,w;return g=bc(l(Oe((!t.b&&(t.b=new Ln(_r,t,4,7)),t.b),0),84)),w=bc(l(Oe((!t.c&&(t.c=new Ln(_r,t,5,8)),t.c),0),84)),ds(g)==ds(w)||Ly(w,g)?null:(f=WO(t),f==n?r:(o=l(cr(e.a,f),10),o&&(a=o.e,a)?a:null))}function ZCn(e,t,n){var r,a,o,f,g;for(n.Ug("Longest path to source layering",1),e.a=t,g=e.a.a,e.b=We(Vr,di,28,g.c.length,15,1),r=0,f=new G(g);f.a0&&(n[0]+=e.d,f-=n[0]),n[2]>0&&(n[2]+=e.d,f-=n[2]),o=b.Math.max(0,f),n[1]=b.Math.max(n[1],f),y6e(e,$u,a.c+r.b+n[0]-(n[1]-f)/2,n),t==$u&&(e.c.b=o,e.c.c=a.c+r.b+(o-f)/2)}function Ebt(){this.c=We(Na,Zo,28,(Ct(),he(le(Oo,1),au,64,0,[Pc,Qn,ar,Dr,er])).length,15,1),this.b=We(Na,Zo,28,he(le(Oo,1),au,64,0,[Pc,Qn,ar,Dr,er]).length,15,1),this.a=We(Na,Zo,28,he(le(Oo,1),au,64,0,[Pc,Qn,ar,Dr,er]).length,15,1),E3e(this.c,gs),E3e(this.b,ia),E3e(this.a,ia)}function Eu(e,t,n){var r,a,o,f;if(t<=n?(a=t,o=n):(a=n,o=t),r=0,e.b==null)e.b=We(Vr,di,28,2,15,1),e.b[0]=a,e.b[1]=o,e.c=!0;else{if(r=e.b.length,e.b[r-1]+1==a){e.b[r-1]=o;return}f=We(Vr,di,28,r+2,15,1),pu(e.b,0,f,0,r),e.b=f,e.b[r-1]>=a&&(e.c=!1,e.a=!1),e.b[r++]=a,e.b[r]=o,e.c||c6(e)}}function sSn(e,t,n){var r,a,o,f,g,w,E;for(E=t.d,e.a=new Bu(E.c.length),e.c=new Pr,g=new G(E);g.a=0?e.Lh(E,!1,!0):Hw(e,n,!1),61));e:for(o=L.Kc();o.Ob();){for(a=l(o.Pb(),58),C=0;C1;)Vy(a,a.i-1);return r}function Cbt(e,t){var n,r,a,o,f,g,w;for(n=new z5,o=new G(e.b);o.ae.d[f.p]&&(n+=f6e(e.b,o),gb(e.a,pt(o)));for(;!l_(e.a);)U6e(e.b,l(X8(e.a),17).a)}return n}function hSn(e){var t,n,r,a,o,f,g,w,E;for(e.a=new i4e,E=0,a=0,r=new G(e.i.b);r.ag.d&&(C=g.d+g.a+E));n.c.d=C,t.a.zc(n,t),w=b.Math.max(w,n.c.d+n.c.a)}return w}function Ho(){Ho=U,eW=new uy("COMMENTS",0),vf=new uy("EXTERNAL_PORTS",1),UL=new uy("HYPEREDGES",2),tW=new uy("HYPERNODES",3),$T=new uy("NON_FREE_PORTS",4),B6=new uy("NORTH_SOUTH_PORTS",5),GL=new uy(X3t,6),RT=new uy("CENTER_LABELS",7),jT=new uy("END_LABELS",8),nW=new uy("PARTITIONS",9)}function dSn(e,t,n,r,a){return r<0?(r=o6(e,a,he(le(zt,1),dt,2,6,[$le,zle,qle,Hle,_x,Vle,Ule,Gle,Kle,Wle,Yle,Xle]),t),r<0&&(r=o6(e,a,he(le(zt,1),dt,2,6,["Jan","Feb","Mar","Apr",_x,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),t)),r<0?!1:(n.k=r,!0)):r>0?(n.k=r-1,!0):!1}function gSn(e,t,n,r,a){return r<0?(r=o6(e,a,he(le(zt,1),dt,2,6,[$le,zle,qle,Hle,_x,Vle,Ule,Gle,Kle,Wle,Yle,Xle]),t),r<0&&(r=o6(e,a,he(le(zt,1),dt,2,6,["Jan","Feb","Mar","Apr",_x,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),t)),r<0?!1:(n.k=r,!0)):r>0?(n.k=r-1,!0):!1}function pSn(e,t,n,r,a,o){var f,g,w,E;if(g=32,r<0){if(t[0]>=e.length||(g=co(e,t[0]),g!=43&&g!=45)||(++t[0],r=kU(e,t),r<0))return!1;g==45&&(r=-r)}return g==32&&t[0]-n==2&&a.b==2&&(w=new Qz,E=w.q.getFullYear()-Lb+Lb-80,f=E%100,o.a=r==f,r+=(E/100|0)*100+(r=0?kb(e):J_(kb(r2(e)))),FL[t]=Aq(l0(e,t),0)?kb(l0(e,t)):J_(kb(r2(l0(e,t)))),e=mo(e,5);for(;t=E&&(w=r);w&&(C=b.Math.max(C,w.a.o.a)),C>B&&(L=E,B=C)}return L}function xSn(e){var t,n,r,a,o,f,g;for(o=new Kp(l(Xr(new Wh),50)),g=ia,n=new G(e.d);n.akyt?Vs(w,e.b):r<=kyt&&r>Eyt?Vs(w,e.d):r<=Eyt&&r>Tyt?Vs(w,e.c):r<=Tyt&&Vs(w,e.a),o=Mbt(e,w,o);return a}function Dbt(e,t,n,r){var a,o,f,g,w,E;for(a=(r.c+r.a)/2,Ch(t.j),ui(t.j,a),Ch(n.e),ui(n.e,a),E=new QJe,g=new G(e.f);g.a1,g&&(r=new lt(a,n.b),ui(t.a,r)),fA(t.a,he(le(Ea,1),dt,8,0,[B,L]))}function J9e(e,t,n){var r,a;for(t=48;n--)GM[n]=n-48<<24>>24;for(r=70;r>=65;r--)GM[r]=r-65+10<<24>>24;for(a=102;a>=97;a--)GM[a]=a-97+10<<24>>24;for(o=0;o<10;o++)LY[o]=48+o&Zs;for(e=10;e<=15;e++)LY[e]=65+e-10&Zs}function CSn(e,t){t.Ug("Process graph bounds",1),rt(e,(Qi(),Bde),fO(uce(xy(new bn(null,new kn(e.b,16)),new zte)))),rt(e,Fde,fO(uce(xy(new bn(null,new kn(e.b,16)),new qte)))),rt(e,rIe,fO(cce(xy(new bn(null,new kn(e.b,16)),new Hte)))),rt(e,iIe,fO(cce(xy(new bn(null,new kn(e.b,16)),new Vte)))),t.Vg()}function SSn(e){var t,n,r,a,o;a=l(Q(e,(Nt(),bv)),21),o=l(Q(e,xW),21),n=new lt(e.f.a+e.d.b+e.d.c,e.f.b+e.d.d+e.d.a),t=new Eo(n),a.Hc((mh(),A4))&&(r=l(Q(e,qT),8),o.Hc((Zl(),aC))&&(r.a<=0&&(r.a=20),r.b<=0&&(r.b=20)),t.a=b.Math.max(n.a,r.a),t.b=b.Math.max(n.b,r.b)),Rt(Bt(Q(e,ade)))||nLn(e,n,t)}function _Sn(e,t){var n,r,a,o;for(o=Oc(t,(Ct(),Dr)).Kc();o.Ob();)r=l(o.Pb(),12),n=l(Q(r,(ft(),jl)),10),n&&p0(s0(i0(a0(r0(new _f,0),.1),e.i[t.p].d),e.i[n.p].a));for(a=Oc(t,Qn).Kc();a.Ob();)r=l(a.Pb(),12),n=l(Q(r,(ft(),jl)),10),n&&p0(s0(i0(a0(r0(new _f,0),.1),e.i[n.p].d),e.i[t.p].a))}function Zue(e){var t,n,r,a,o,f;if(!e.c){if(f=new Qc,t=qM,o=t.a.zc(e,t),o==null){for(r=new or(du(e));r.e!=r.i.gc();)n=l(gr(r),89),a=jU(n),De(a,90)&&As(f,Zue(l(a,29))),qr(f,n);t.a.Bc(e)!=null,t.a.gc()==0}k5n(f),Iy(f),e.c=new N5((l(Oe(tt((lb(),Vn).o),15),19),f.i),f.g),Yl(e).b&=-33}return e.c}function eke(e){var t;if(e.c!=10)throw ue(new ri(ai((Jr(),VG))));switch(t=e.a,t){case 110:t=10;break;case 114:t=13;break;case 116:t=9;break;case 92:case 124:case 46:case 94:case 45:case 63:case 42:case 43:case 123:case 125:case 40:case 41:case 91:case 93:break;default:throw ue(new ri(ai((Jr(),bf))))}return t}function Pbt(e){var t,n,r,a,o;if(e.l==0&&e.m==0&&e.h==0)return"0";if(e.h==SP&&e.m==0&&e.l==0)return"-9223372036854775808";if(e.h>>19)return"-"+Pbt(xE(e));for(n=e,r="";!(n.l==0&&n.m==0&&n.h==0);){if(a=Loe(JU),n=Nke(n,a,!0),t=""+rZe(Nb),!(n.l==0&&n.m==0&&n.h==0))for(o=9-t.length;o>0;o--)t="0"+t;r=t+r}return r}function ASn(e){var t,n,r,a,o,f,g;for(t=!1,n=0,a=new G(e.d.b);a.a=e.a||!Bxe(t,n))return-1;if(Zk(l(r.Kb(t),20)))return 1;for(a=0,f=l(r.Kb(t),20).Kc();f.Ob();)if(o=l(f.Pb(),18),w=o.c.i==t?o.d.i:o.c.i,g=tke(e,w,n,r),g==-1||(a=b.Math.max(a,g),a>e.c-1))return-1;return a+1}function Bbt(e,t){var n,r,a,o,f,g;if(qe(t)===qe(e))return!0;if(!De(t,15)||(r=l(t,15),g=e.gc(),r.gc()!=g))return!1;if(f=r.Kc(),e.Yi()){for(n=0;n0){if(e._j(),t!=null){for(o=0;o>24;case 97:case 98:case 99:case 100:case 101:case 102:return e-97+10<<24>>24;case 65:case 66:case 67:case 68:case 69:case 70:return e-65+10<<24>>24;default:throw ue(new gd("Invalid hexadecimal"))}}function PU(){PU=U,j_e=new L5("SPIRAL",0),P_e=new L5("LINE_BY_LINE",1),B_e=new L5("MANHATTAN",2),N_e=new L5("JITTER",3),z0e=new L5("QUADRANTS_LINE_BY_LINE",4),R_e=new L5("QUADRANTS_MANHATTAN",5),F_e=new L5("QUADRANTS_JITTER",6),O_e=new L5("COMBINE_LINE_BY_LINE_MANHATTAN",7),I_e=new L5("COMBINE_JITTER_MANHATTAN",8)}function Rbt(e,t,n,r){var a,o,f,g,w,E;for(w=Tue(e,n),E=Tue(t,n),a=!1;w&&E&&(r||C7n(w,E,n));)f=Tue(w,n),g=Tue(E,n),uN(t),uN(e),o=w.c,Cle(w,!1),Cle(E,!1),n?(Fy(t,E.p,o),t.p=E.p,Fy(e,w.p+1,o),e.p=w.p):(Fy(e,w.p,o),e.p=w.p,Fy(t,E.p+1,o),t.p=E.p),Va(w,null),Va(E,null),w=f,E=g,a=!0;return a}function jbt(e){switch(e.g){case 0:return new Gre;case 1:return new XS;case 3:return new fet;case 4:return new zee;case 5:return new zrt;case 6:return new jI;case 2:return new YS;case 7:return new az;case 8:return new RI;default:throw ue(new Yn("No implementation is available for the layerer "+(e.f!=null?e.f:""+e.g)))}}function NSn(e,t,n,r){var a,o,f,g,w;for(a=!1,o=!1,g=new G(r.j);g.a=t.length)throw ue(new tc("Greedy SwitchDecider: Free layer not in graph."));this.c=t[e],this.e=new IO(r),ice(this.e,this.c,(Ct(),er)),this.i=new IO(r),ice(this.i,this.c,ar),this.f=new ist(this.c),this.a=!o&&a.i&&!a.s&&this.c[0].k==(Zn(),Us),this.a&&W9n(this,e,t.length)}function zbt(e,t){var n,r,a,o,f,g;o=!e.B.Hc((Zl(),sF)),f=e.B.Hc(Gge),e.a=new _1t(f,o,e.c),e.n&&O5e(e.a.n,e.n),Xie(e.g,(t1(),$u),e.a),t||(r=new DA(1,o,e.c),r.n.a=e.k,Q8(e.p,(Ct(),Qn),r),a=new DA(1,o,e.c),a.n.d=e.k,Q8(e.p,Dr,a),g=new DA(0,o,e.c),g.n.c=e.k,Q8(e.p,er,g),n=new DA(0,o,e.c),n.n.b=e.k,Q8(e.p,ar,n))}function BSn(e){var t,n,r;switch(t=l(Q(e.d,(Nt(),bp)),223),t.g){case 2:n=TIn(e);break;case 3:n=(r=new bt,Is(Fi(fc(Dc(Dc(new bn(null,new kn(e.d.b,16)),new dee),new gee),new pee),new wS),new xYe(r)),r);break;default:throw ue(new nc("Compaction not supported for "+t+" edges."))}GLn(e,n),to(new br(e.g),new wYe(e))}function FSn(e,t){var n,r,a,o,f,g,w;if(t.Ug("Process directions",1),n=l(Q(e,(Hc(),y3)),88),n!=(Js(),Q1))for(a=Rr(e.b,0);a.b!=a.d.c;){switch(r=l(Br(a),40),g=l(Q(r,(Qi(),PB)),17).a,w=l(Q(r,BB),17).a,n.g){case 4:w*=-1;break;case 1:o=g,g=w,w=o;break;case 2:f=g,g=-w,w=f}rt(r,PB,pt(g)),rt(r,BB,pt(w))}t.Vg()}function RSn(e,t){var n;return n=new Bs,t&&pc(n,l(cr(e.a,oF),96)),De(t,422)&&pc(n,l(cr(e.a,cF),96)),De(t,366)?(pc(n,l(cr(e.a,ec),96)),n):(De(t,84)&&pc(n,l(cr(e.a,_r),96)),De(t,207)?(pc(n,l(cr(e.a,Ai),96)),n):De(t,193)?(pc(n,l(cr(e.a,Hl),96)),n):(De(t,326)&&pc(n,l(cr(e.a,js),96)),n))}function jSn(e){var t,n,r,a,o,f,g,w;for(w=new xut,g=new G(e.a);g.a0&&t=0)return!1;if(t.p=n.b,vt(n.e,t),a==(Zn(),Aa)||a==Au){for(f=new G(t.j);f.ae.d[g.p]&&(n+=f6e(e.b,o),gb(e.a,pt(o)))):++f;for(n+=e.b.d*f;!l_(e.a);)U6e(e.b,l(X8(e.a),17).a)}return n}function Qbt(e){var t,n,r,a,o,f;return o=0,t=Of(e),t.kk()&&(o|=4),e.Bb&Sl&&(o|=2),De(e,102)?(n=l(e,19),a=Ro(n),n.Bb&eu&&(o|=32),a&&(yr(ky(a)),o|=8,f=a.t,(f>1||f==-1)&&(o|=16),a.Bb&eu&&(o|=64)),n.Bb&Io&&(o|=r4),o|=m0):De(t,469)?o|=512:(r=t.kk(),r&&r.i&1&&(o|=256)),e.Bb&512&&(o|=128),o}function QSn(e,t){var n;return e.f==spe?(n=kw(ic((El(),io),t)),e.e?n==4&&t!=(kx(),u9)&&t!=(kx(),c9)&&t!=(kx(),ape)&&t!=(kx(),ope):n==2):e.d&&(e.d.Hc(t)||e.d.Hc(rx(ic((El(),io),t)))||e.d.Hc(g6((El(),io),e.b,t)))?!0:e.f&&q9e((El(),e.f),HO(ic(io,t)))?(n=kw(ic(io,t)),e.e?n==4:n==2):!1}function JSn(e){var t,n,r,a,o,f,g,w,E,C,L,B,z;for(B=-1,z=0,E=e,C=0,L=E.length;C0&&++z;++B}return z}function ZSn(e,t,n,r){var a,o,f,g,w,E,C,L;return f=l(at(n,(pi(),n9)),8),w=f.a,C=f.b+e,a=b.Math.atan2(C,w),a<0&&(a+=iv),a+=t,a>iv&&(a-=iv),g=l(at(r,n9),8),E=g.a,L=g.b+e,o=b.Math.atan2(L,E),o<0&&(o+=iv),o+=t,o>iv&&(o-=iv),A1(),f0(1e-10),b.Math.abs(a-o)<=1e-10||a==o||isNaN(a)&&isNaN(o)?0:ao?1:uw(isNaN(a),isNaN(o))}function nle(e){var t,n,r,a,o,f,g;for(g=new Pr,r=new G(e.a.b);r.a=e.o)throw ue(new Bwe);g=t>>5,f=t&31,o=l0(1,Yr(l0(f,1))),a?e.n[n][g]=Q0(e.n[n][g],o):e.n[n][g]=va(e.n[n][g],O4e(o)),o=l0(o,1),r?e.n[n][g]=Q0(e.n[n][g],o):e.n[n][g]=va(e.n[n][g],O4e(o))}catch(w){throw w=bs(w),De(w,333)?ue(new tc(Ehe+e.o+"*"+e.p+The+t+Co+n+Che)):ue(w)}}function n_n(e,t,n,r){var a,o,f,g,w,E,C,L,B;for(B=new Kp(new VYe(e)),g=he(le(wg,1),m2,10,0,[t,n]),w=0,E=g.length;w0&&(r=(!e.n&&(e.n=new nt(ec,e,1,7)),l(Oe(e.n,0),135)).a,!r||hi(hi((t.a+=' "',t),r),'"'))),hi(rw(hi(rw(hi(rw(hi(rw((t.a+=" (",t),e.i),","),e.j)," | "),e.g),","),e.f),")"),t.a)}function Jbt(e){var t,n,r;return e.Db&64?Pue(e):(t=new Th(uSe),n=e.k,n?hi(hi((t.a+=' "',t),n),'"'):(!e.n&&(e.n=new nt(ec,e,1,7)),e.n.i>0&&(r=(!e.n&&(e.n=new nt(ec,e,1,7)),l(Oe(e.n,0),135)).a,!r||hi(hi((t.a+=' "',t),r),'"'))),hi(rw(hi(rw(hi(rw(hi(rw((t.a+=" (",t),e.i),","),e.j)," | "),e.g),","),e.f),")"),t.a)}function s_n(e,t){var n,r,a,o,f;for(t==(yA(),Cde)&&JN(l($i(e.a,(Ry(),bB)),15)),a=l($i(e.a,(Ry(),bB)),15).Kc();a.Ob();)switch(r=l(a.Pb(),105),n=l(jt(r.j,0),113).d.j,o=new Ol(r.j),Vs(o,new Rj),t.g){case 2:Lue(e,o,n,(Ow(),Rb),1);break;case 1:case 0:f=UTn(o),Lue(e,new Zp(o,0,f),n,(Ow(),Rb),0),Lue(e,new Zp(o,f,o.c.length),n,Rb,1)}}function ile(e,t){var n,r,a,o,f,g,w;if(t==null||t.length==0)return null;if(a=l(xu(e.a,t),143),!a){for(r=(g=new gi(e.b).a.vc().Kc(),new fs(g));r.a.Ob();)if(n=(o=l(r.a.Pb(),44),l(o.md(),143)),f=n.c,w=t.length,vn(f.substr(f.length-w,w),t)&&(t.length==f.length||co(f,f.length-t.length-1)==46)){if(a)return null;a=n}a&&rc(e.a,t,a)}return a}function a_n(e,t){var n,r,a,o;return n=new as,r=l(yc(fc(new bn(null,new kn(e.f,16)),n),Sy(new yt,new ji,new qn,new Un,he(le(oc,1),it,108,0,[(Fl(),i4),Ec]))),21),a=r.gc(),r=l(yc(fc(new bn(null,new kn(t.f,16)),n),Sy(new yt,new ji,new qn,new Un,he(le(oc,1),it,108,0,[i4,Ec]))),21),o=r.gc(),aa.p?(la(o,Dr),o.d&&(g=o.o.b,t=o.a.b,o.a.b=g-t)):o.j==Dr&&a.p>e.p&&(la(o,Qn),o.d&&(g=o.o.b,t=o.a.b,o.a.b=-(g-t)));break}return a}function uP(e,t,n,r,a){var o,f,g,w,E,C,L;if(!(De(t,207)||De(t,366)||De(t,193)))throw ue(new Yn("Method only works for ElkNode-, ElkLabel and ElkPort-objects."));return f=e.a/2,w=t.i+r-f,C=t.j+a-f,E=w+t.g+e.a,L=C+t.f+e.a,o=new bl,ui(o,new lt(w,C)),ui(o,new lt(w,L)),ui(o,new lt(E,L)),ui(o,new lt(E,C)),g=new Gue(o),pc(g,t),n&&ki(e.b,t,g),g}function KE(e,t,n){var r,a,o,f,g,w,E,C,L,B;for(o=new lt(t,n),C=new G(e.a);C.a1,g&&(r=new lt(a,n.b),ui(t.a,r)),fA(t.a,he(le(Ea,1),dt,8,0,[B,L]))}function Nf(){Nf=U,AW=new ly(Id,0),AB=new ly("NIKOLOV",1),LB=new ly("NIKOLOV_PIXEL",2),xDe=new ly("NIKOLOV_IMPROVED",3),kDe=new ly("NIKOLOV_IMPROVED_PIXEL",4),yDe=new ly("DUMMYNODE_PERCENTAGE",5),EDe=new ly("NODECOUNT_PERCENTAGE",6),LW=new ly("NO_BOUNDARY",7),v3=new ly("MODEL_ORDER_LEFT_TO_RIGHT",8),x4=new ly("MODEL_ORDER_RIGHT_TO_LEFT",9)}function b_n(e){var t,n,r,a,o;for(r=e.length,t=new h_,o=0;o=40,f&&mAn(e),SLn(e),WCn(e),n=m1t(e),r=0;n&&r0&&ui(e.f,o)):(e.c[f]-=E+1,e.c[f]<=0&&e.a[f]>0&&ui(e.e,o))))}function hmt(e,t,n,r){var a,o,f,g,w,E,C;for(w=new lt(n,r),ma(w,l(Q(t,(Qi(),QT)),8)),C=Rr(t.b,0);C.b!=C.d.c;)E=l(Br(C),40),Oi(E.e,w),ui(e.b,E);for(g=l(yc(V5e(new bn(null,new kn(t.a,16))),Pl(new zr,new ht,new Fn,he(le(oc,1),it,108,0,[(Fl(),Ec)]))),15).Kc();g.Ob();){for(f=l(g.Pb(),65),o=Rr(f.a,0);o.b!=o.d.c;)a=l(Br(o),8),a.a+=w.a,a.b+=w.b;ui(e.a,f)}}function bke(e,t){var n,r,a,o;if(0<(De(e,16)?l(e,16).gc():Xg(e.Kc()))){if(a=t,1=0&&wo*2?(C=new hV(L),E=wl(f)/gh(f),w=Lle(C,t,new A8,n,r,a,E),Oi(Y0(C.e),w),L.c.length=0,o=0,$n(L.c,C),$n(L.c,f),o=wl(C)*gh(C)+wl(f)*gh(f)):($n(L.c,f),o+=wl(f)*gh(f));return L}function dmt(e,t){var n,r,a,o,f,g;if(g=l(Q(t,(Nt(),Ms)),101),g==(Ra(),Tg)||g==Mu)for(a=new lt(t.f.a+t.d.b+t.d.c,t.f.b+t.d.d+t.d.a).b,f=new G(e.a);f.an?t:n;E<=L;++E)E==n?g=r++:(o=a[E],C=V.am(o.Lk()),E==t&&(w=E==L&&!C?r-1:r),C&&++r);return B=l(AA(e,t,n),76),g!=w&&xk(e,new sN(e.e,7,f,pt(g),z.md(),w)),B}}else return l(Hue(e,t,n),76);return l(AA(e,t,n),76)}function B_n(e,t){var n,r,a,o,f,g,w;for(t.Ug("Port order processing",1),w=l(Q(e,(Nt(),ZMe)),430),r=new G(e.b);r.a=0&&(g=M7n(e,f),!(g&&(E<22?w.l|=1<>>1,f.m=C>>>1|(L&1)<<21,f.l=B>>>1|(C&1)<<21,--E;return n&&yce(w),o&&(r?(Nb=xE(e),a&&(Nb=Jft(Nb,(iE(),YSe)))):Nb=qu(e.l,e.m,e.h)),w}function j_n(e,t){var n,r,a,o,f,g,w,E,C,L;for(E=e.e[t.c.p][t.p]+1,w=t.c.a.c.length+1,g=new G(e.a);g.a0&&(Xn(0,e.length),e.charCodeAt(0)==45||(Xn(0,e.length),e.charCodeAt(0)==43))?1:0,r=f;rn)throw ue(new gd(Yw+e+'"'));return g}function $_n(e){var t,n,r,a,o,f,g;for(f=new os,o=new G(e.a);o.a1)&&t==1&&l(e.a[e.b],10).k==(Zn(),cu)?Tx(l(e.a[e.b],10),(Ih(),kg)):r&&(!n||(e.c-e.b&e.a.length-1)>1)&&t==1&&l(e.a[e.c-1&e.a.length-1],10).k==(Zn(),cu)?Tx(l(e.a[e.c-1&e.a.length-1],10),(Ih(),Gb)):(e.c-e.b&e.a.length-1)==2?(Tx(l(wA(e),10),(Ih(),kg)),Tx(l(wA(e),10),Gb)):pTn(e,a),l6e(e)}function H_n(e,t,n){var r,a,o,f,g;for(o=0,a=new or((!e.a&&(e.a=new nt(Ai,e,10,11)),e.a));a.e!=a.i.gc();)r=l(gr(a),27),f="",(!r.n&&(r.n=new nt(ec,r,1,7)),r.n).i==0||(f=l(Oe((!r.n&&(r.n=new nt(ec,r,1,7)),r.n),0),135).a),g=new xce(o++,t,f),pc(g,r),rt(g,(Qi(),gM),r),g.e.b=r.j+r.f/2,g.f.a=b.Math.max(r.g,1),g.e.a=r.i+r.g/2,g.f.b=b.Math.max(r.f,1),ui(t.b,g),ju(n.f,r,g)}function V_n(e){var t,n,r,a,o;r=l(Q(e,(ft(),zi)),27),o=l(at(r,(Nt(),bv)),181).Hc((mh(),Cv)),e.e||(a=l(Q(e,Lu),21),t=new lt(e.f.a+e.d.b+e.d.c,e.f.b+e.d.d+e.d.a),a.Hc((Ho(),vf))?(Hi(r,Ms,(Ra(),Mu)),Gw(r,t.a,t.b,!1,!0)):Rt(Bt(at(r,ade)))||Gw(r,t.a,t.b,!0,!0)),o?Hi(r,bv,un(Cv)):Hi(r,bv,(n=l(K0(BM),9),new Zh(n,l(c0(n,n.length),9),0)))}function mke(e,t,n){var r,a,o,f;if(t[0]>=e.length)return n.o=0,!0;switch(co(e,t[0])){case 43:a=1;break;case 45:a=-1;break;default:return n.o=0,!0}if(++t[0],o=t[0],f=kU(e,t),f==0&&t[0]==o)return!1;if(t[0]g&&(g=a,C.c.length=0),a==g&&vt(C,new ca(n.c.i,n)));Cn(),Vs(C,e.c),pw(e.b,w.p,C)}}function W_n(e,t){var n,r,a,o,f,g,w,E,C;for(f=new G(t.b);f.ag&&(g=a,C.c.length=0),a==g&&vt(C,new ca(n.d.i,n)));Cn(),Vs(C,e.c),pw(e.f,w.p,C)}}function Y_n(e,t){var n,r,a,o,f,g,w,E;if(E=Bt(Q(t,(Hc(),MTt))),E==null||(nr(E),E)){for(yEn(e,t),a=new bt,w=Rr(t.b,0);w.b!=w.d.c;)f=l(Br(w),40),n=i9e(e,f,null),n&&(pc(n,t),$n(a.c,n));if(e.a=null,e.b=null,a.c.length>1)for(r=new G(a);r.a=0&&g!=n&&(o=new _a(e,1,g,f,null),r?r.nj(o):r=o),n>=0&&(o=new _a(e,1,n,g==n?f:null,t),r?r.nj(o):r=o)),r}function bmt(e){var t,n,r;if(e.b==null){if(r=new Up,e.i!=null&&(Xo(r,e.i),r.a+=":"),e.f&256){for(e.f&256&&e.a!=null&&(dpn(e.i)||(r.a+="//"),Xo(r,e.a)),e.d!=null&&(r.a+="/",Xo(r,e.d)),e.f&16&&(r.a+="/"),t=0,n=e.j.length;tB?!1:(L=(w=ZA(r,B,!1),w.a),C+g+L<=t.b&&(aN(n,o-n.s),n.c=!0,aN(r,o-n.s),qN(r,n.s,n.t+n.d+g),r.k=!0,C7e(n.q,r),z=!0,a&&(bV(t,r),r.j=t,e.c.length>f&&(UN((Sn(f,e.c.length),l(e.c[f],186)),r),(Sn(f,e.c.length),l(e.c[f],186)).a.c.length==0&&t2(e,f)))),z)}function nAn(e,t){var n,r,a,o,f,g;if(t.Ug("Partition midprocessing",1),a=new Cw,Is(Fi(new bn(null,new kn(e.a,16)),new vj),new cYe(a)),a.d!=0){for(g=l(yc(K5e((o=a.i,new bn(null,(o||(a.i=new q5(a,a.c))).Nc()))),Pl(new zr,new ht,new Fn,he(le(oc,1),it,108,0,[(Fl(),Ec)]))),15),r=g.Kc(),n=l(r.Pb(),17);r.Ob();)f=l(r.Pb(),17),WTn(l($i(a,n),21),l($i(a,f),21)),n=f;t.Vg()}}function wmt(e,t,n){var r,a,o,f,g,w,E,C;if(t.p==0){for(t.p=1,f=n,f||(a=new bt,o=(r=l(K0(Oo),9),new Zh(r,l(c0(r,r.length),9),0)),f=new ca(a,o)),l(f.a,15).Fc(t),t.k==(Zn(),Us)&&l(f.b,21).Fc(l(Q(t,(ft(),Wc)),64)),w=new G(t.j);w.a0){if(a=l(e.Ab.g,2033),t==null){for(o=0;on.s&&gf)return Ct(),ar;break;case 4:case 3:if(C<0)return Ct(),Qn;if(C+n>o)return Ct(),Dr}return w=(E+g/2)/f,r=(C+n/2)/o,w+r<=1&&w-r<=0?(Ct(),er):w+r>=1&&w-r>=0?(Ct(),ar):r<.5?(Ct(),Qn):(Ct(),Dr)}function oAn(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J;for(n=!1,C=ze(Ge(Q(t,(Nt(),m3)))),V=Ab*C,a=new G(t.b);a.aw+V&&(J=L.g+B.g,B.a=(B.g*B.a+L.g*L.a)/J,B.g=J,L.f=B,n=!0)),o=g,L=B;return n}function Emt(e,t,n,r,a,o,f){var g,w,E,C,L,B;for(B=new $8,E=t.Kc();E.Ob();)for(g=l(E.Pb(),853),L=new G(g.Rf());L.a0?g.a?(E=g.b.Mf().b,a>E&&(e.v||g.c.d.c.length==1?(f=(a-E)/2,g.d.d=f,g.d.a=f):(n=l(jt(g.c.d,0),187).Mf().b,r=(n-E)/2,g.d.d=b.Math.max(0,r),g.d.a=a-r-E))):g.d.a=e.t+a:W_(e.u)&&(o=$xe(g.b),o.d<0&&(g.d.d=-o.d),o.d+o.a>g.b.Mf().b&&(g.d.a=o.d+o.a-g.b.Mf().b))}function b0(){b0=U,qx=new Ha((pi(),XB),pt(1)),kK=new Ha(Ev,80),n8t=new Ha(ANe,5),G7t=new Ha(Z6,lT),e8t=new Ha(zge,pt(1)),t8t=new Ha(qge,(Hn(),!0)),nAe=new lw(50),J7t=new Ha(_2,nAe),Z_e=WB,rAe=_M,K7t=new Ha(Dge,!1),tAe=YB,X7t=C4,Q7t=Ub,Y7t=kv,W7t=r7,Z7t=S4,eAe=(Xxe(),j7t),Z0e=H7t,xK=R7t,J0e=$7t,iAe=q7t,s8t=AM,a8t=aY,i8t=QB,r8t=sY,sAe=(dx(),L4),new Ha(i9,sAe)}function lAn(e,t){var n;switch(gN(e)){case 6:return Ia(t);case 7:return fy(t);case 8:return hy(t);case 3:return Array.isArray(t)&&(n=gN(t),!(n>=14&&n<=16));case 11:return t!=null&&typeof t===Ole;case 12:return t!=null&&(typeof t===wP||typeof t==Ole);case 0:return iue(t,e.__elementTypeId$);case 2:return Rae(t)&&t.Tm!==xe;case 1:return Rae(t)&&t.Tm!==xe||iue(t,e.__elementTypeId$);default:return!0}}function Tmt(e,t){var n,r,a,o;return r=b.Math.min(b.Math.abs(e.c-(t.c+t.b)),b.Math.abs(e.c+e.b-t.c)),o=b.Math.min(b.Math.abs(e.d-(t.d+t.a)),b.Math.abs(e.d+e.a-t.d)),n=b.Math.abs(e.c+e.b/2-(t.c+t.b/2)),n>e.b/2+t.b/2||(a=b.Math.abs(e.d+e.a/2-(t.d+t.a/2)),a>e.a/2+t.a/2)?1:n==0&&a==0?0:n==0?o/a+1:a==0?r/n+1:b.Math.min(r/n,o/a)+1}function hAn(e,t){var n,r,a,o,f,g,w;for(o=0,g=0,w=0,a=new G(e.f.e);a.a0&&e.d!=(lA(),n1e)&&(g+=f*(r.d.a+e.a[t.a][r.a]*(t.d.a-r.d.a)/n)),n>0&&e.d!=(lA(),e1e)&&(w+=f*(r.d.b+e.a[t.a][r.a]*(t.d.b-r.d.b)/n)));switch(e.d.g){case 1:return new lt(g/o,t.d.b);case 2:return new lt(t.d.a,w/o);default:return new lt(g/o,w/o)}}function Cmt(e){var t,n,r,a,o,f;for(n=(!e.a&&(e.a=new Ys(qh,e,5)),e.a).i+2,f=new Bu(n),vt(f,new lt(e.j,e.k)),Is(new bn(null,(!e.a&&(e.a=new Ys(qh,e,5)),new kn(e.a,16))),new NXe(f)),vt(f,new lt(e.b,e.c)),t=1;t0&&(SN(w,!1,(Js(),uc)),SN(w,!0,vc)),Vu(t.g,new jet(e,n)),ki(e.g,t,n)}function Amt(){Amt=U;var e;for(r_e=he(le(Vr,1),di,28,15,[-1,-1,30,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5]),A0e=We(Vr,di,28,37,15,1),b6t=he(le(Vr,1),di,28,15,[-1,-1,63,40,32,28,25,23,21,20,19,19,18,18,17,17,16,16,16,15,15,15,15,14,14,14,14,14,14,13,13,13,13,13,13,13,13]),i_e=We(nm,ahe,28,37,14,1),e=2;e<=36;e++)A0e[e]=ua(b.Math.pow(e,r_e[e])),i_e[e]=KN(EP,A0e[e])}function fAn(e){var t;if((!e.a&&(e.a=new nt(cs,e,6,6)),e.a).i!=1)throw ue(new Yn(n4t+(!e.a&&(e.a=new nt(cs,e,6,6)),e.a).i));return t=new bl,TN(l(Oe((!e.b&&(e.b=new Ln(_r,e,4,7)),e.b),0),84))&&Ka(t,bwt(e,TN(l(Oe((!e.b&&(e.b=new Ln(_r,e,4,7)),e.b),0),84)),!1)),TN(l(Oe((!e.c&&(e.c=new Ln(_r,e,5,8)),e.c),0),84))&&Ka(t,bwt(e,TN(l(Oe((!e.c&&(e.c=new Ln(_r,e,5,8)),e.c),0),84)),!0)),t}function Lmt(e,t){var n,r,a,o,f;for(t.d?a=e.a.c==(xd(),w3)?ka(t.b):qs(t.b):a=e.a.c==(xd(),T2)?ka(t.b):qs(t.b),o=!1,r=new hr(dr(a.a.Kc(),new j));jr(r);)if(n=l(xr(r),18),f=Rt(e.a.f[e.a.g[t.b.p].p]),!(!f&&!Do(n)&&n.c.i.c==n.d.i.c)&&!(Rt(e.a.n[e.a.g[t.b.p].p])||Rt(e.a.n[e.a.g[t.b.p].p]))&&(o=!0,W0(e.b,e.a.g[f7n(n,t.b).p])))return t.c=!0,t.a=n,t;return t.c=o,t.a=null,t}function wke(e,t,n){var r,a,o,f,g,w,E;if(r=n.gc(),r==0)return!1;if(e.Pj())if(w=e.Qj(),A8e(e,t,n),f=r==1?e.Ij(3,null,n.Kc().Pb(),t,w):e.Ij(5,null,n,t,w),e.Mj()){for(g=r<100?null:new nb(r),o=t+r,a=t;a0){for(f=0;f>16==-15&&e.Cb.Yh()&&qoe(new Foe(e.Cb,9,13,n,e.c,f2(Xl(l(e.Cb,62)),e))):De(e.Cb,90)&&e.Db>>16==-23&&e.Cb.Yh()&&(t=e.c,De(t,90)||(t=(Tn(),Kf)),De(n,90)||(n=(Tn(),Kf)),qoe(new Foe(e.Cb,9,10,n,t,f2(du(l(e.Cb,29)),e)))))),e.c}function pAn(e,t,n){var r,a,o,f,g,w,E,C,L;for(n.Ug("Hyperedge merging",1),jEn(e,t),w=new Ua(t.b,0);w.b0,g=HV(t,o),Iye(n?g.b:g.g,t),Z5(g).c.length==1&&Cs(r,g,r.c.b,r.c),a=new ca(o,t),gb(e.o,a),al(e.e.a,o))}function Bmt(e,t){var n,r,a,o,f,g,w;return r=b.Math.abs(mH(e.b).a-mH(t.b).a),g=b.Math.abs(mH(e.b).b-mH(t.b).b),a=0,w=0,n=1,f=1,r>e.b.b/2+t.b.b/2&&(a=b.Math.min(b.Math.abs(e.b.c-(t.b.c+t.b.b)),b.Math.abs(e.b.c+e.b.b-t.b.c)),n=1-a/r),g>e.b.a/2+t.b.a/2&&(w=b.Math.min(b.Math.abs(e.b.d-(t.b.d+t.b.a)),b.Math.abs(e.b.d+e.b.a-t.b.d)),f=1-w/g),o=b.Math.min(n,f),(1-o)*b.Math.sqrt(r*r+g*g)}function vAn(e){var t,n,r,a;for(Ale(e,e.e,e.f,(Sw(),Hb),!0,e.c,e.i),Ale(e,e.e,e.f,Hb,!1,e.c,e.i),Ale(e,e.e,e.f,K6,!0,e.c,e.i),Ale(e,e.e,e.f,K6,!1,e.c,e.i),gAn(e,e.c,e.e,e.f,e.i),r=new Ua(e.i,0);r.b=65;n--)nd[n]=n-65<<24>>24;for(r=122;r>=97;r--)nd[r]=r-97+26<<24>>24;for(a=57;a>=48;a--)nd[a]=a-48+52<<24>>24;for(nd[43]=62,nd[47]=63,o=0;o<=25;o++)N2[o]=65+o&Zs;for(f=26,w=0;f<=51;++f,w++)N2[f]=97+w&Zs;for(e=52,g=0;e<=61;++e,g++)N2[e]=48+g&Zs;N2[62]=43,N2[63]=47}function Fmt(e,t){var n,r,a,o,f,g;return a=y7e(e),g=y7e(t),a==g?e.e==t.e&&e.a<54&&t.a<54?e.ft.f?1:0:(r=e.e-t.e,n=(e.d>0?e.d:b.Math.floor((e.a-1)*Vwt)+1)-(t.d>0?t.d:b.Math.floor((t.a-1)*Vwt)+1),n>r+1?a:n0&&(f=K5(f,Wmt(r))),K1t(o,f))):aE&&(B=0,z+=w+t,w=0),KE(f,B,z),n=b.Math.max(n,B+C.a),w=b.Math.max(w,C.b),B+=C.a+t;return new lt(n+t,z+w+t)}function Eke(e,t){var n,r,a,o,f,g,w;if(!M1(e))throw ue(new nc(t4t));if(r=M1(e),o=r.g,a=r.f,o<=0&&a<=0)return Ct(),Pc;switch(g=e.i,w=e.j,t.g){case 2:case 1:if(g<0)return Ct(),er;if(g+e.g>o)return Ct(),ar;break;case 4:case 3:if(w<0)return Ct(),Qn;if(w+e.f>a)return Ct(),Dr}return f=(g+e.g/2)/o,n=(w+e.f/2)/a,f+n<=1&&f-n<=0?(Ct(),er):f+n>=1&&f-n>=0?(Ct(),ar):n<.5?(Ct(),Qn):(Ct(),Dr)}function xAn(e,t,n,r,a){var o,f;if(o=bo(va(t[0],Vo),va(r[0],Vo)),e[0]=Yr(o),o=bw(o,32),n>=a){for(f=1;f0&&(a.b[f++]=0,a.b[f++]=o.b[0]-1),t=1;t0&&(H(w,w.d-a.d),a.c==(J0(),qb)&&N(w,w.a-a.d),w.d<=0&&w.i>0&&Cs(t,w,t.c.b,t.c)));for(o=new G(e.f);o.a0&&(q(g,g.i-a.d),a.c==(J0(),qb)&&$(g,g.b-a.d),g.i<=0&&g.d>0&&Cs(n,g,n.c.b,n.c)))}function TAn(e,t,n,r,a){var o,f,g,w,E,C,L,B,z;for(Cn(),Vs(e,new tk),f=PO(e),z=new bt,B=new bt,g=null,w=0;f.b!=0;)o=l(f.b==0?null:(mr(f.b!=0),af(f,f.a.a)),163),!g||wl(g)*gh(g)/21&&(w>wl(g)*gh(g)/2||f.b==0)&&(L=new hV(B),C=wl(g)/gh(g),E=Lle(L,t,new A8,n,r,a,C),Oi(Y0(L.e),E),g=L,$n(z.c,L),w=0,B.c.length=0));return ra(z,B),z}function pu(e,t,n,r,a){Vg();var o,f,g,w,E,C,L;if(d5e(e,"src"),d5e(n,"dest"),L=bh(e),w=bh(n),I4e((L.i&4)!=0,"srcType is not an array"),I4e((w.i&4)!=0,"destType is not an array"),C=L.c,f=w.c,I4e(C.i&1?C==f:(f.i&1)==0,"Array types don't match"),lyn(e,t,n,r,a),!(C.i&1)&&L!=w)if(E=jm(e),o=jm(n),qe(e)===qe(n)&&tr;)Ts(o,g,E[--t]);else for(g=r+a;r0),r.a.Xb(r.c=--r.b),L>B+w&&ph(r);for(f=new G(z);f.a0),r.a.Xb(r.c=--r.b)}}function SAn(){Di();var e,t,n,r,a,o;if(upe)return upe;for(e=new _h(4),Ky(e,_b(p0e,!0)),nL(e,_b("M",!0)),nL(e,_b("C",!0)),o=new _h(4),r=0;r<11;r++)Eu(o,r,r);return t=new _h(4),Ky(t,_b("M",!0)),Eu(t,4448,4607),Eu(t,65438,65439),a=new B_(2),Qm(a,e),Qm(a,WM),n=new B_(2),n.Jm(oH(o,_b("L",!0))),n.Jm(t),n=new Ty(3,n),n=new f5e(a,n),upe=n,upe}function Gy(e,t){var n,r,a,o,f,g,w,E;for(n=new RegExp(t,"g"),w=We(zt,dt,2,0,6,1),r=0,E=e,o=null;;)if(g=n.exec(E),g==null||E==""){w[r]=E;break}else f=g.index,w[r]=(Ga(0,f,E.length),E.substr(0,f)),E=tf(E,f+g[0].length,E.length),n.lastIndex=0,o==E&&(w[r]=(Ga(0,1,E.length),E.substr(0,1)),E=(Xn(1,E.length+1),E.substr(1))),o=E,++r;if(e.length>0){for(a=w.length;a>0&&w[a-1]=="";)--a;a0&&(L-=r[0]+e.c,r[0]+=e.c),r[2]>0&&(L-=r[2]+e.c),r[1]=b.Math.max(r[1],L),hH(e.a[1],n.c+t.b+r[0]-(r[1]-L)/2,r[1]);for(o=e.a,g=0,E=o.length;g0?(e.n.c.length-1)*e.i:0,r=new G(e.n);r.a1)for(r=Rr(a,0);r.b!=r.d.c;)for(n=l(Br(r),235),o=0,w=new G(n.e);w.a0&&(t[0]+=e.c,L-=t[0]),t[2]>0&&(L-=t[2]+e.c),t[1]=b.Math.max(t[1],L),fH(e.a[1],r.d+n.d+t[0]-(t[1]-L)/2,t[1]);else for(V=r.d+n.d,z=r.a-n.d-n.a,f=e.a,w=0,C=f.length;w0||Fw(a.b.d,e.b.d+e.b.a)==0&&r.b<0||Fw(a.b.d+a.b.a,e.b.d)==0&&r.b>0){g=0;break}}else g=b.Math.min(g,Bpt(e,a,r));g=b.Math.min(g,zmt(e,o,g,r))}return g}function dP(e,t){var n,r,a,o,f,g,w;if(e.b<2)throw ue(new Yn("The vector chain must contain at least a source and a target point."));for(a=(mr(e.b!=0),l(e.a.a.c,8)),kO(t,a.a,a.b),w=new q8((!t.a&&(t.a=new Ys(qh,t,5)),t.a)),f=Rr(e,1);f.a=0&&o!=n))throw ue(new Yn(WP));for(a=0,w=0;wze(L1(f.g,f.d[0]).a)?(mr(w.b>0),w.a.Xb(w.c=--w.b),by(w,f),a=!0):g.e&&g.e.gc()>0&&(o=(!g.e&&(g.e=new bt),g.e).Mc(t),E=(!g.e&&(g.e=new bt),g.e).Mc(n),(o||E)&&((!g.e&&(g.e=new bt),g.e).Fc(f),++f.c));a||$n(r.c,f)}function OAn(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe;return L=e.a.i+e.a.g/2,B=e.a.i+e.a.g/2,V=t.i+t.g/2,te=t.j+t.f/2,g=new lt(V,te),E=l(at(t,(pi(),n9)),8),E.a=E.a+L,E.b=E.b+B,o=(g.b-E.b)/(g.a-E.a),r=g.b-o*g.a,J=n.i+n.g/2,fe=n.j+n.f/2,w=new lt(J,fe),C=l(at(n,n9),8),C.a=C.a+L,C.b=C.b+B,f=(w.b-C.b)/(w.a-C.a),a=w.b-f*w.a,z=(r-a)/(f-o),E.a>>0,"0"+t.toString(16)),r="\\x"+tf(n,n.length-2,n.length)):e>=Io?(n=(t=e>>>0,"0"+t.toString(16)),r="\\v"+tf(n,n.length-6,n.length)):r=""+String.fromCharCode(e&Zs)}return r}function Umt(e){var t,n,r;if(P5(l(Q(e,(Nt(),Ms)),101)))for(n=new G(e.j);n.a=t.o&&n.f<=t.f||t.a*.5<=n.f&&t.a*1.5>=n.f){if(f=l(jt(t.n,t.n.c.length-1),209),f.e+f.d+n.g+a<=r&&(o=l(jt(t.n,t.n.c.length-1),209),o.f-e.f+n.f<=e.b||e.a.c.length==1))return y8e(t,n),!0;if(t.s+n.g<=r&&(t.t+t.d+n.f+a<=e.b||e.a.c.length==1))return vt(t.b,n),g=l(jt(t.n,t.n.c.length-1),209),vt(t.n,new PH(t.s,g.f+g.a+t.i,t.i)),exe(l(jt(t.n,t.n.c.length-1),209),n),jmt(t,n),!0}return!1}function Kmt(e,t,n){var r,a,o,f;return e.Pj()?(a=null,o=e.Qj(),r=e.Ij(1,f=Uoe(e,t,n),n,t,o),e.Mj()&&!(e.Yi()&&f!=null?Pi(f,n):qe(f)===qe(n))?(f!=null&&(a=e.Oj(f,a)),a=e.Nj(n,a),e.Tj()&&(a=e.Wj(f,n,a)),a?(a.nj(r),a.oj()):e.Jj(r)):(e.Tj()&&(a=e.Wj(f,n,a)),a?(a.nj(r),a.oj()):e.Jj(r)),f):(f=Uoe(e,t,n),e.Mj()&&!(e.Yi()&&f!=null?Pi(f,n):qe(f)===qe(n))&&(a=null,f!=null&&(a=e.Oj(f,null)),a=e.Nj(n,a),a&&a.oj()),f)}function $An(e,t){var n,r,a,o,f;if(t.Ug("Path-Like Graph Wrapping",1),e.b.c.length==0){t.Vg();return}if(a=new M9e(e),f=(a.i==null&&(a.i=x7e(a,new Gj)),ze(a.i)*a.f),n=f/(a.i==null&&(a.i=x7e(a,new Gj)),ze(a.i)),a.b>n){t.Vg();return}switch(l(Q(e,(Nt(),hde)),351).g){case 2:o=new Wj;break;case 0:o=new ES;break;default:o=new Yj}if(r=o.og(e,a),!o.pg())switch(l(Q(e,EW),352).g){case 2:r=Fpt(a,r);break;case 1:r=Agt(a,r)}BLn(e,a,r),t.Vg()}function XA(e,t){var n,r,a,o,f,g,w,E;t%=24,e.q.getHours()!=t&&(r=new b.Date(e.q.getTime()),r.setDate(r.getDate()+1),g=e.q.getTimezoneOffset()-r.getTimezoneOffset(),g>0&&(w=g/60|0,E=g%60,a=e.q.getDate(),n=e.q.getHours(),n+w>=24&&++a,o=new b.Date(e.q.getFullYear(),e.q.getMonth(),a,t+w,e.q.getMinutes()+E,e.q.getSeconds(),e.q.getMilliseconds()),e.q.setTime(o.getTime()))),f=e.q.getTime(),e.q.setTime(f+36e5),e.q.getHours()!=t&&e.q.setTime(f)}function zAn(e,t){var n,r,a,o;if(ebn(e.d,e.e),e.c.a.$b(),ze(Ge(Q(t.j,(Nt(),hW))))!=0||ze(Ge(Q(t.j,hW)))!=0)for(n=y6,qe(Q(t.j,yg))!==qe((Ed(),E2))&&rt(t.j,(ft(),jb),(Hn(),!0)),o=l(Q(t.j,nM),17).a,a=0;aa&&++E,vt(f,(Sn(g+E,t.c.length),l(t.c[g+E],17))),w+=(Sn(g+E,t.c.length),l(t.c[g+E],17)).a-r,++n;n=te&&e.e[w.p]>V*e.b||Me>=n*te)&&($n(B.c,g),g=new bt,Ka(f,o),o.a.$b(),E-=C,z=b.Math.max(z,E*e.b+J),E+=Me,Te=Me,Me=0,C=0,J=0);return new ca(z,B)}function dle(e){var t,n,r,a,o,f,g;if(!e.d){if(g=new Jne,t=qM,o=t.a.zc(e,t),o==null){for(r=new or(dc(e));r.e!=r.i.gc();)n=l(gr(r),29),As(g,dle(n));t.a.Bc(e)!=null,t.a.gc()==0}for(f=g.i,a=(!e.q&&(e.q=new nt(Uf,e,11,10)),new or(e.q));a.e!=a.i.gc();++f)l(gr(a),411);As(g,(!e.q&&(e.q=new nt(Uf,e,11,10)),e.q)),Iy(g),e.d=new N5((l(Oe(tt((lb(),Vn).o),9),19),g.i),g.g),e.e=l(g.g,688),e.e==null&&(e.e=X_t),Yl(e).b&=-17}return e.d}function XE(e,t,n,r){var a,o,f,g,w,E;if(E=Wu(e.e.Dh(),t),w=0,a=l(e.g,124),Fo(),l(t,69).xk()){for(f=0;f1||V==-1)if(L=l(J,71),B=l(C,71),L.dc())B.$b();else for(f=!!Ro(t),o=0,g=e.a?L.Kc():L.Ii();g.Ob();)E=l(g.Pb(),58),a=l(B1(e,E),58),a?(f?(w=B.dd(a),w==-1?B.Gi(o,a):o!=w&&B.Ui(o,a)):B.Gi(o,a),++o):e.b&&!f&&(B.Gi(o,E),++o);else J==null?C.Wb(null):(a=B1(e,J),a==null?e.b&&!Ro(t)&&C.Wb(J):C.Wb(a))}function GAn(e,t){var n,r,a,o,f,g,w,E;for(n=new gZ,a=new hr(dr(ka(t).a.Kc(),new j));jr(a);)if(r=l(xr(a),18),!Do(r)&&(g=r.c.i,Bxe(g,SK))){if(E=tke(e,g,SK,CK),E==-1)continue;n.b=b.Math.max(n.b,E),!n.a&&(n.a=new bt),vt(n.a,g)}for(f=new hr(dr(qs(t).a.Kc(),new j));jr(f);)if(o=l(xr(f),18),!Do(o)&&(w=o.d.i,Bxe(w,CK))){if(E=tke(e,w,CK,SK),E==-1)continue;n.d=b.Math.max(n.d,E),!n.c&&(n.c=new bt),vt(n.c,w)}return n}function KAn(e,t,n,r){var a,o,f,g,w,E,C;if(n.d.i!=t.i){for(a=new op(e),x(a,(Zn(),Aa)),rt(a,(ft(),zi),n),rt(a,(Nt(),Ms),(Ra(),Mu)),$n(r.c,a),f=new gu,Mc(f,a),la(f,(Ct(),er)),g=new gu,Mc(g,a),la(g,ar),C=n.d,Fa(n,f),o=new Tw,pc(o,n),rt(o,cc,null),po(o,g),Fa(o,C),E=new Ua(n.b,0);E.b1e6)throw ue(new qz("power of ten too big"));if(e<=Ii)return sx(iP($x[1],t),t);for(r=iP($x[1],Ii),a=r,n=Zc(e-Ii),t=ua(e%Ii);iu(n,Ii)>0;)a=K5(a,r),n=Df(n,Ii);for(a=K5(a,iP($x[1],t)),a=sx(a,Ii),n=Zc(e-Ii);iu(n,Ii)>0;)a=sx(a,Ii),n=Df(n,Ii);return a=sx(a,t),a}function Ymt(e){var t,n,r,a,o,f,g,w,E,C;for(w=new G(e.a);w.aE&&r>E)C=g,E=ze(t.p[g.p])+ze(t.d[g.p])+g.o.b+g.d.a;else{a=!1,n._g()&&n.bh("bk node placement breaks on "+g+" which should have been after "+C);break}if(!a)break}return n._g()&&n.bh(t+" is feasible: "+a),a}function _ke(e,t,n,r){var a,o,f,g,w,E,C,L,B;if(o=new op(e),x(o,(Zn(),Au)),rt(o,(Nt(),Ms),(Ra(),Mu)),a=0,t){for(f=new gu,rt(f,(ft(),zi),t),rt(o,zi,t.i),la(f,(Ct(),er)),Mc(f,o),B=kd(t.e),E=B,C=0,L=E.length;C0){if(a<0&&C.a&&(a=w,o=E[0],r=0),a>=0){if(g=C.b,w==a&&(g-=r++,g==0))return 0;if(!Zvt(t,E,C,g,f)){w=a-1,E[0]=o;continue}}else if(a=-1,!Zvt(t,E,C,0,f))return 0}else{if(a=-1,co(C.c,0)==32){if(L=E[0],eht(t,E),E[0]>L)continue}else if(Ppn(t,C.c,E[0])){E[0]+=C.c.length;continue}return 0}return FDn(f,n)?E[0]:0}function ZAn(e,t,n){var r,a,o,f,g,w,E,C,L,B;for(C=new gH(new Dz(n)),g=We(ih,pg,28,e.f.e.c.length,16,1),l5e(g,g.length),n[t.a]=0,E=new G(e.f.e);E.a=0&&!r6(e,C,L);)--L;a[C]=L}for(z=0;z=0&&!r6(e,g,V);)--g;o[V]=g}for(w=0;wt[B]&&Br[w]&&FU(e,w,B,!1,!0)}function Ake(e){var t,n,r,a,o,f,g,w;n=Rt(Bt(Q(e,(b0(),K7t)))),o=e.a.c.d,g=e.a.d.d,n?(f=md(ma(new lt(g.a,g.b),o),.5),w=md(Ja(e.e),.5),t=ma(Oi(new lt(o.a,o.b),f),w),Fye(e.d,t)):(a=ze(Ge(Q(e.a,n8t))),r=e.d,o.a>=g.a?o.b>=g.b?(r.a=g.a+(o.a-g.a)/2+a,r.b=g.b+(o.b-g.b)/2-a-e.e.b):(r.a=g.a+(o.a-g.a)/2+a,r.b=o.b+(g.b-o.b)/2+a):o.b>=g.b?(r.a=o.a+(g.a-o.a)/2+a,r.b=g.b+(o.b-g.b)/2+a):(r.a=o.a+(g.a-o.a)/2+a,r.b=o.b+(g.b-o.b)/2-a-e.e.b))}function JA(e){var t,n,r,a,o,f,g,w;if(!e.f){if(w=new _I,g=new _I,t=qM,f=t.a.zc(e,t),f==null){for(o=new or(dc(e));o.e!=o.i.gc();)a=l(gr(o),29),As(w,JA(a));t.a.Bc(e)!=null,t.a.gc()==0}for(r=(!e.s&&(e.s=new nt(dl,e,21,17)),new or(e.s));r.e!=r.i.gc();)n=l(gr(r),179),De(n,102)&&qr(g,l(n,19));Iy(g),e.r=new zit(e,(l(Oe(tt((lb(),Vn).o),6),19),g.i),g.g),As(w,e.r),Iy(w),e.f=new N5((l(Oe(tt(Vn.o),5),19),w.i),w.g),Yl(e).b&=-3}return e.f}function Qmt(e){sw(e,new Xm(nw(Zv(tw(ew(new x1,nv),"ELK DisCo"),"Layouter for arranging unconnected subgraphs. The subgraphs themselves are, by default, not laid out."),new z0))),gt(e,nv,_he,It(X_e)),gt(e,nv,Ahe,It(W0e)),gt(e,nv,Ox,It(I7t)),gt(e,nv,Xw,It(Y_e)),gt(e,nv,bEe,It(B7t)),gt(e,nv,mEe,It(P7t)),gt(e,nv,pEe,It(F7t)),gt(e,nv,vEe,It(N7t)),gt(e,nv,CEe,It(O7t)),gt(e,nv,SEe,It(K0e)),gt(e,nv,_Ee,It(W_e)),gt(e,nv,AEe,It(vK))}function zU(){zU=U,bPe=he(le(kf,1),Ad,28,15,[48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70]),S_t=new RegExp(`[ -\r\f]+`);try{jM=he(le(POn,1),Rn,2114,0,[new KI((iye(),KV("yyyy-MM-dd'T'HH:mm:ss'.'SSSZ",MO((zz(),zz(),NL))))),new KI(KV("yyyy-MM-dd'T'HH:mm:ss'.'SSS",MO(NL))),new KI(KV("yyyy-MM-dd'T'HH:mm:ss",MO(NL))),new KI(KV("yyyy-MM-dd'T'HH:mm",MO(NL))),new KI(KV("yyyy-MM-dd",MO(NL)))])}catch(e){if(e=bs(e),!De(e,82))throw ue(e)}}function tLn(e,t){var n,r,a,o;if(a=Jl(e.d,1)!=0,r=cke(e,t),r==0&&Rt(Bt(Q(t.j,(ft(),jb)))))return 0;!Rt(Bt(Q(t.j,(ft(),jb))))&&!Rt(Bt(Q(t.j,j6)))||qe(Q(t.j,(Nt(),yg)))===qe((Ed(),E2))?t.c.mg(t.e,a):a=Rt(Bt(Q(t.j,jb))),cP(e,t,a,!0),Rt(Bt(Q(t.j,j6)))&&rt(t.j,j6,(Hn(),!1)),Rt(Bt(Q(t.j,jb)))&&(rt(t.j,jb,(Hn(),!1)),rt(t.j,j6,!0)),n=cke(e,t);do{if(w7e(e),n==0)return 0;a=!a,o=n,cP(e,t,a,!1),n=cke(e,t)}while(o>n);return o}function Jmt(e,t){var n,r,a,o;if(a=Jl(e.d,1)!=0,r=xU(e,t),r==0&&Rt(Bt(Q(t.j,(ft(),jb)))))return 0;!Rt(Bt(Q(t.j,(ft(),jb))))&&!Rt(Bt(Q(t.j,j6)))||qe(Q(t.j,(Nt(),yg)))===qe((Ed(),E2))?t.c.mg(t.e,a):a=Rt(Bt(Q(t.j,jb))),cP(e,t,a,!0),Rt(Bt(Q(t.j,j6)))&&rt(t.j,j6,(Hn(),!1)),Rt(Bt(Q(t.j,jb)))&&(rt(t.j,jb,(Hn(),!1)),rt(t.j,j6,!0)),n=xU(e,t);do{if(w7e(e),n==0)return 0;a=!a,o=n,cP(e,t,a,!1),n=xU(e,t)}while(o>n);return o}function Lke(e,t,n,r){var a,o,f,g,w,E,C,L,B;return w=ma(new lt(n.a,n.b),e),E=w.a*t.b-w.b*t.a,C=t.a*r.b-t.b*r.a,L=(w.a*r.b-w.b*r.a)/C,B=E/C,C==0?E==0?(a=Oi(new lt(n.a,n.b),md(new lt(r.a,r.b),.5)),o=pb(e,a),f=pb(Oi(new lt(e.a,e.b),t),a),g=b.Math.sqrt(r.a*r.a+r.b*r.b)*.5,o=0&&L<=1&&B>=0&&B<=1?Oi(new lt(e.a,e.b),md(new lt(t.a,t.b),L)):null}function nLn(e,t,n){var r,a,o,f,g;if(r=l(Q(e,(Nt(),J1e)),21),n.a>t.a&&(r.Hc((Ym(),EM))?e.c.a+=(n.a-t.a)/2:r.Hc(TM)&&(e.c.a+=n.a-t.a)),n.b>t.b&&(r.Hc((Ym(),SM))?e.c.b+=(n.b-t.b)/2:r.Hc(CM)&&(e.c.b+=n.b-t.b)),l(Q(e,(ft(),Lu)),21).Hc((Ho(),vf))&&(n.a>t.a||n.b>t.b))for(g=new G(e.a);g.at.a&&(r.Hc((Ym(),EM))?e.c.a+=(n.a-t.a)/2:r.Hc(TM)&&(e.c.a+=n.a-t.a)),n.b>t.b&&(r.Hc((Ym(),SM))?e.c.b+=(n.b-t.b)/2:r.Hc(CM)&&(e.c.b+=n.b-t.b)),l(Q(e,(ft(),Lu)),21).Hc((Ho(),vf))&&(n.a>t.a||n.b>t.b))for(f=new G(e.a);f.a0?e.i:0)>t&&w>0&&(o=0,f+=w+e.i,a=b.Math.max(a,B),r+=w+e.i,w=0,B=0,n&&(++L,vt(e.n,new PH(e.s,f,e.i))),g=0),B+=E.g+(g>0?e.i:0),w=b.Math.max(w,E.f),n&&exe(l(jt(e.n,L),209),E),o+=E.g+(g>0?e.i:0),++g;return a=b.Math.max(a,B),r+=w,n&&(e.r=a,e.d=r,ixe(e.j)),new ef(e.s,e.t,a,r)}function gle(e){var t,n,r,a,o,f,g,w,E,C,L,B;for(e.b=!1,L=gs,w=ia,B=gs,E=ia,r=e.e.a.ec().Kc();r.Ob();)for(n=l(r.Pb(),272),a=n.a,L=b.Math.min(L,a.c),w=b.Math.max(w,a.c+a.b),B=b.Math.min(B,a.d),E=b.Math.max(E,a.d+a.a),f=new G(n.c);f.ae.o.a&&(C=(w-e.o.a)/2,g.b=b.Math.max(g.b,C),g.c=b.Math.max(g.c,C))}}function aLn(e){var t,n,r,a,o,f,g,w;for(o=new Kot,Fln(o,(hx(),dSt)),r=(a=ace(e,We(zt,dt,2,0,6,1)),new kr(new Il(new ase(e,a).b)));r.bg?1:-1:W7e(e.a,t.a,o),a==-1)L=-w,C=f==w?Doe(t.a,g,e.a,o):Ooe(t.a,g,e.a,o);else if(L=f,f==w){if(a==0)return Cd(),BL;C=Doe(e.a,o,t.a,g)}else C=Ooe(e.a,o,t.a,g);return E=new Im(L,C.length,C),iA(E),E}function oLn(e,t){var n,r,a,o;if(o=Pmt(t),!t.c&&(t.c=new nt(Hl,t,9,9)),Is(new bn(null,(!t.c&&(t.c=new nt(Hl,t,9,9)),new kn(t.c,16))),new $We(o)),a=l(Q(o,(ft(),Lu)),21),ZMn(t,a),a.Hc((Ho(),vf)))for(r=new or((!t.c&&(t.c=new nt(Hl,t,9,9)),t.c));r.e!=r.i.gc();)n=l(gr(r),123),ADn(e,t,o,n);return l(at(t,(Nt(),bv)),181).gc()!=0&&_bt(t,o),Rt(Bt(Q(o,XMe)))&&a.Fc(nW),ns(o,CB)&&NJe(new D8e(ze(Ge(Q(o,CB)))),o),qe(at(t,p4))===qe((rp(),A2))?JIn(e,t,o):BIn(e,t,o),o}function cLn(e){var t,n,r,a,o,f,g,w;for(a=new G(e.b);a.a0?tf(n.a,0,o-1):""):(Ga(0,o-1,e.length),e.substr(0,o-1)):n?n.a:e}function uLn(e,t){var n,r,a,o,f,g,w;for(t.Ug("Sort By Input Model "+Q(e,(Nt(),yg)),1),a=0,r=new G(e.b);r.a=e.b.length?(o[a++]=f.b[r++],o[a++]=f.b[r++]):r>=f.b.length?(o[a++]=e.b[n++],o[a++]=e.b[n++]):f.b[r]0?e.i:0)),++t;for(g8e(e.n,w),e.d=n,e.r=r,e.g=0,e.f=0,e.e=0,e.o=gs,e.p=gs,o=new G(e.b);o.a0&&(a=(!e.n&&(e.n=new nt(ec,e,1,7)),l(Oe(e.n,0),135)).a,!a||hi(hi((t.a+=' "',t),a),'"'))),n=(!e.b&&(e.b=new Ln(_r,e,4,7)),!(e.b.i<=1&&(!e.c&&(e.c=new Ln(_r,e,5,8)),e.c.i<=1))),n?t.a+=" [":t.a+=" ",hi(t,Eye(new Zie,new or(e.b))),n&&(t.a+="]"),t.a+=Phe,n&&(t.a+="["),hi(t,Eye(new Zie,new or(e.c))),n&&(t.a+="]"),t.a)}function hLn(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St,cn,an,Bn;for(Ze=e.c,ot=t.c,n=gc(Ze.a,e,0),r=gc(ot.a,t,0),Me=l(Rw(e,(qo(),$l)).Kc().Pb(),12),an=l(Rw(e,zu).Kc().Pb(),12),$e=l(Rw(t,$l).Kc().Pb(),12),Bn=l(Rw(t,zu).Kc().Pb(),12),fe=kd(Me.e),St=kd(an.g),Te=kd($e.e),cn=kd(Bn.g),Fy(e,r,ot),f=Te,C=0,V=f.length;CC?new Pm((J0(),E4),n,t,E-C):E>0&&C>0&&(new Pm((J0(),E4),t,n,0),new Pm(E4,n,t,0))),f)}function gLn(e,t,n){var r,a,o;for(e.a=new bt,o=Rr(t.b,0);o.b!=o.d.c;){for(a=l(Br(o),40);l(Q(a,(Hc(),$d)),17).a>e.a.c.length-1;)vt(e.a,new ca(y6,hCe));r=l(Q(a,$d),17).a,n==(Js(),uc)||n==vc?(a.e.aze(Ge(l(jt(e.a,r),42).b))&&ct(l(jt(e.a,r),42),a.e.a+a.f.a)):(a.e.bze(Ge(l(jt(e.a,r),42).b))&&ct(l(jt(e.a,r),42),a.e.b+a.f.b))}}function tvt(e,t,n,r){var a,o,f,g,w,E,C;if(o=zV(r),g=Rt(Bt(Q(r,(Nt(),VMe)))),(g||Rt(Bt(Q(e,bW))))&&!P5(l(Q(e,Ms),101)))a=gx(o),w=vke(e,n,n==(qo(),zu)?a:BN(a));else switch(w=new gu,Mc(w,e),t?(C=w.n,C.a=t.a-e.n.a,C.b=t.b-e.n.b,opt(C,0,0,e.o.a,e.o.b),la(w,kmt(w,o))):(a=gx(o),la(w,n==(qo(),zu)?a:BN(a))),f=l(Q(r,(ft(),Lu)),21),E=w.j,o.g){case 2:case 1:(E==(Ct(),Qn)||E==Dr)&&f.Fc((Ho(),B6));break;case 4:case 3:(E==(Ct(),ar)||E==er)&&f.Fc((Ho(),B6))}return w}function nvt(e,t){var n,r,a,o,f,g;for(f=new qm(new Sr(e.f.b).a);f.b;){if(o=Nw(f),a=l(o.ld(),602),t==1){if(a.Af()!=(Js(),wf)&&a.Af()!=Q1)continue}else if(a.Af()!=(Js(),uc)&&a.Af()!=vc)continue;switch(r=l(l(o.md(),42).b,86),g=l(l(o.md(),42).a,194),n=g.c,a.Af().g){case 2:r.g.c=e.e.a,r.g.b=b.Math.max(1,r.g.b+n);break;case 1:r.g.c=r.g.c+n,r.g.b=b.Math.max(1,r.g.b-n);break;case 4:r.g.d=e.e.b,r.g.a=b.Math.max(1,r.g.a+n);break;case 3:r.g.d=r.g.d+n,r.g.a=b.Math.max(1,r.g.a-n)}}}function pLn(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J;for(g=We(Vr,di,28,t.b.c.length,15,1),E=We(l1e,it,273,t.b.c.length,0,1),w=We(wg,m2,10,t.b.c.length,0,1),L=e.a,B=0,z=L.length;B0&&w[r]&&(V=j5(e.b,w[r],a)),J=b.Math.max(J,a.c.c.b+V);for(o=new G(C.e);o.a1)throw ue(new Yn(ZP));w||(o=sg(t,r.Kc().Pb()),f.Fc(o))}return N7e(e,t9e(e,t,n),f)}function HU(e,t,n){var r,a,o,f,g,w,E,C;if(up(e.e,t))w=(Fo(),l(t,69).xk()?new nH(t,e):new yO(t,e)),EU(w.c,w.b),F_(w,l(n,16));else{for(C=Wu(e.e.Dh(),t),r=l(e.g,124),f=0;f"}w!=null&&(t.a+=""+w)}else e.e?(g=e.e.zb,g!=null&&(t.a+=""+g)):(t.a+="?",e.b?(t.a+=" super ",wle(e.b,t)):e.f&&(t.a+=" extends ",wle(e.f,t)))}function xLn(e){e.b=null,e.a=null,e.o=null,e.q=null,e.v=null,e.w=null,e.B=null,e.p=null,e.Q=null,e.R=null,e.S=null,e.T=null,e.U=null,e.V=null,e.W=null,e.bb=null,e.eb=null,e.ab=null,e.H=null,e.db=null,e.c=null,e.d=null,e.f=null,e.n=null,e.r=null,e.s=null,e.u=null,e.G=null,e.J=null,e.e=null,e.j=null,e.i=null,e.g=null,e.k=null,e.t=null,e.F=null,e.I=null,e.L=null,e.M=null,e.O=null,e.P=null,e.$=null,e.N=null,e.Z=null,e.cb=null,e.K=null,e.D=null,e.A=null,e.C=null,e._=null,e.fb=null,e.X=null,e.Y=null,e.gb=!1,e.hb=!1}function kLn(e){var t,n,r,a;if(r=Dle((!e.c&&(e.c=XO(Zc(e.f))),e.c),0),e.e==0||e.a==0&&e.f!=-1&&e.e<0)return r;if(t=y7e(e)<0?1:0,n=e.e,a=(r.length+1+b.Math.abs(ua(e.e)),new S5),t==1&&(a.a+="-"),e.e>0)if(n-=r.length-t,n>=0){for(a.a+="0.";n>lv.length;n-=lv.length)Qit(a,lv);Prt(a,lv,ua(n)),hi(a,(Xn(t,r.length+1),r.substr(t)))}else n=t-n,hi(a,tf(r,t,ua(n))),a.a+=".",hi(a,w5e(r,ua(n)));else{for(hi(a,(Xn(t,r.length+1),r.substr(t)));n<-lv.length;n+=lv.length)Qit(a,lv);Prt(a,lv,ua(-n))}return a.a}function yle(e){var t,n,r,a,o,f,g,w,E;return!(e.k!=(Zn(),Ps)||e.j.c.length<=1||(o=l(Q(e,(Nt(),Ms)),101),o==(Ra(),Mu))||(a=(By(),(e.q?e.q:(Cn(),Cn(),mg))._b(g3)?r=l(Q(e,g3),203):r=l(Q(eo(e),eM),203),r),a==_W)||!(a==G6||a==U6)&&(f=ze(Ge(Py(e,tM))),t=l(Q(e,_B),140),!t&&(t=new n4e(f,f,f,f)),E=Oc(e,(Ct(),er)),w=t.d+t.a+(E.gc()-1)*f,w>e.o.b||(n=Oc(e,ar),g=t.d+t.a+(n.gc()-1)*f,g>e.o.b)))}function ELn(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te;t.Ug("Orthogonal edge routing",1),E=ze(Ge(Q(e,(Nt(),V6)))),n=ze(Ge(Q(e,q6))),r=ze(Ge(Q(e,vv))),B=new Hae(0,n),te=0,f=new Ua(e.b,0),g=null,C=null,w=null,L=null;do C=f.b0?(z=(V-1)*n,g&&(z+=r),C&&(z+=r),zt||Rt(Bt(at(w,(z1(),$B)))))&&(a=0,o+=C.b+n,$n(L.c,C),C=new Q5e(o,n),r=new kce(0,C.f,C,n),bV(C,r),a=0),r.b.c.length==0||!Rt(Bt(at(ds(w),(z1(),hge))))&&(w.f>=r.o&&w.f<=r.f||r.a*.5<=w.f&&r.a*1.5>=w.f)?y8e(r,w):(f=new kce(r.s+r.r+n,C.f,C,n),bV(C,f),y8e(f,w)),a=w.i+w.g;return $n(L.c,C),L}function eL(e){var t,n,r,a;if(!(e.b==null||e.b.length<=2)&&!e.a){for(t=0,a=0;a=e.b[a+1])a+=2;else if(n0)for(r=new Ol(l($i(e.a,o),21)),Cn(),Vs(r,new GI(t)),a=new Ua(o.b,0);a.b0&&r>=-6?r>=0?EO(o,n-ua(e.e),String.fromCharCode(46)):(hce(o,t-1,t-1,"0."),EO(o,t+1,If(lv,0,-ua(r)-1))):(n-t>=1&&(EO(o,t,String.fromCharCode(46)),++n),EO(o,n,String.fromCharCode(69)),r>0&&EO(o,++n,String.fromCharCode(43)),EO(o,++n,""+Y_(Zc(r)))),e.g=o.a,e.g))}function OLn(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St;r=ze(Ge(Q(t,(Nt(),KMe)))),Ze=l(Q(t,nM),17).a,B=4,a=3,ot=20/Ze,z=!1,w=0,f=Ii;do{for(o=w!=1,L=w!=0,St=0,te=e.a,Te=0,$e=te.length;Te<$e;++Te)V=te[Te],V.f=null,yDn(e,V,o,L,r),St+=b.Math.abs(V.a);do g=oAn(e,t);while(g);for(J=e.a,fe=0,Me=J.length;feZe)?(w=2,f=Ii):w==0?(w=1,f=St):(w=0,f=St)):(z=St>=f||f-St0?1:uw(isNaN(r),isNaN(0)))>=0^(f0(Nd),(b.Math.abs(g)<=Nd||g==0||isNaN(g)&&isNaN(0)?0:g<0?-1:g>0?1:uw(isNaN(g),isNaN(0)))>=0)?b.Math.max(g,r):(f0(Nd),(b.Math.abs(r)<=Nd||r==0||isNaN(r)&&isNaN(0)?0:r<0?-1:r>0?1:uw(isNaN(r),isNaN(0)))>0?b.Math.sqrt(g*g+r*r):-b.Math.sqrt(g*g+r*r))}function Qm(e,t){var n,r,a,o,f,g;if(t){if(!e.a&&(e.a=new jz),e.e==2){Rz(e.a,t);return}if(t.e==1){for(a=0;a=Io?Xo(n,w8e(r)):Uk(n,r&Zs),f=new coe(10,null,0),mgn(e.a,f,g-1)):(n=(f.Mm().length+o,new h_),Xo(n,f.Mm())),t.e==0?(r=t.Km(),r>=Io?Xo(n,w8e(r)):Uk(n,r&Zs)):Xo(n,t.Mm()),l(f,530).b=n.a}}function BLn(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te;if(!n.dc()){for(g=0,B=0,r=n.Kc(),V=l(r.Pb(),17).a;g1&&(w=E.Hg(w,e.a,g));return w.c.length==1?l(jt(w,w.c.length-1),238):w.c.length==2?CLn((Sn(0,w.c.length),l(w.c[0],238)),(Sn(1,w.c.length),l(w.c[1],238)),f,o):null}function $Ln(e,t,n){var r,a,o,f,g,w,E;for(n.Ug("Find roots",1),e.a.c.length=0,a=Rr(t.b,0);a.b!=a.d.c;)r=l(Br(a),40),r.b.b==0&&(rt(r,(Qi(),Vb),(Hn(),!0)),vt(e.a,r));switch(e.a.c.length){case 0:o=new xce(0,t,"DUMMY_ROOT"),rt(o,(Qi(),Vb),(Hn(),!0)),rt(o,Nde,!0),ui(t.b,o);break;case 1:break;default:for(f=new xce(0,t,DG),w=new G(e.a);w.a=b.Math.abs(r.b)?(r.b=0,o.d+o.a>f.d&&o.df.c&&o.c0){if(t=new eye(e.i,e.g),n=e.i,o=n<100?null:new nb(n),e.Tj())for(r=0;r0){for(g=e.g,E=e.i,uA(e),o=E<100?null:new nb(E),r=0;r>13|(e.m&15)<<9,a=e.m>>4&8191,o=e.m>>17|(e.h&255)<<5,f=(e.h&1048320)>>8,g=t.l&8191,w=t.l>>13|(t.m&15)<<9,E=t.m>>4&8191,C=t.m>>17|(t.h&255)<<5,L=(t.h&1048320)>>8,cn=n*g,an=r*g,Bn=a*g,jn=o*g,ur=f*g,w!=0&&(an+=n*w,Bn+=r*w,jn+=a*w,ur+=o*w),E!=0&&(Bn+=n*E,jn+=r*E,ur+=a*E),C!=0&&(jn+=n*C,ur+=r*C),L!=0&&(ur+=n*L),z=cn&eh,V=(an&511)<<13,B=z+V,te=cn>>22,fe=an>>9,Te=(Bn&262143)<<4,Me=(jn&31)<<17,J=te+fe+Te+Me,Ze=Bn>>18,ot=jn>>5,St=(ur&4095)<<8,$e=Ze+ot+St,J+=B>>22,B&=eh,$e+=J>>22,J&=eh,$e&=hp,qu(B,J,$e)}function dvt(e){var t,n,r,a,o,f,g;if(g=l(jt(e.j,0),12),g.g.c.length!=0&&g.e.c.length!=0)throw ue(new nc("Interactive layout does not support NORTH/SOUTH ports with incoming _and_ outgoing edges."));if(g.g.c.length!=0){for(o=gs,n=new G(g.g);n.a4)if(e.fk(t)){if(e.al()){if(a=l(t,54),r=a.Eh(),w=r==e.e&&(e.ml()?a.yh(a.Fh(),e.il())==e.jl():-1-a.Fh()==e.Lj()),e.nl()&&!w&&!r&&a.Jh()){for(o=0;o0&&gpt(e,g,L);for(a=new G(L);a.ae.d[f.p]&&(n+=f6e(e.b,o)*l(w.b,17).a,gb(e.a,pt(o)));for(;!l_(e.a);)U6e(e.b,l(X8(e.a),17).a)}return n}function ULn(e,t){var n,r,a,o,f,g,w,E,C,L;if(C=l(Q(e,(ft(),Wc)),64),r=l(jt(e.j,0),12),C==(Ct(),Qn)?la(r,Dr):C==Dr&&la(r,Qn),l(Q(t,(Nt(),bv)),181).Hc((mh(),Cv))){if(w=ze(Ge(Q(e,GT))),E=ze(Ge(Q(e,KT))),f=ze(Ge(Q(e,y4))),g=l(Q(t,v4),21),g.Hc((Rl(),vp)))for(n=E,L=e.o.a/2-r.n.a,o=new G(r.f);o.a0&&(E=e.n.a/o);break;case 2:case 4:a=e.i.o.b,a>0&&(E=e.n.b/a)}rt(e,(ft(),l3),E)}if(w=e.o,f=e.a,r)f.a=r.a,f.b=r.b,e.d=!0;else if(t!=Z1&&t!=Wb&&g!=Pc)switch(g.g){case 1:f.a=w.a/2;break;case 2:f.a=w.a,f.b=w.b/2;break;case 3:f.a=w.a/2,f.b=w.b;break;case 4:f.b=w.b/2}else f.a=w.a/2,f.b=w.b/2}function tL(e){var t,n,r,a,o,f,g,w,E,C;if(e.Pj())if(C=e.Ej(),w=e.Qj(),C>0)if(t=new T7e(e.pj()),n=C,o=n<100?null:new nb(n),AO(e,n,t.g),a=n==1?e.Ij(4,Oe(t,0),null,0,w):e.Ij(6,t,null,-1,w),e.Mj()){for(r=new or(t);r.e!=r.i.gc();)o=e.Oj(gr(r),o);o?(o.nj(a),o.oj()):e.Jj(a)}else o?(o.nj(a),o.oj()):e.Jj(a);else AO(e,e.Ej(),e.Fj()),e.Jj(e.Ij(6,(Cn(),_o),null,-1,w));else if(e.Mj())if(C=e.Ej(),C>0){for(g=e.Fj(),E=C,AO(e,C,g),o=E<100?null:new nb(E),r=0;r1&&wl(f)*gh(f)/2>g[0]){for(o=0;og[o];)++o;V=new Zp(J,0,o+1),L=new hV(V),C=wl(f)/gh(f),w=Lle(L,t,new A8,n,r,a,C),Oi(Y0(L.e),w),K8($E(B,L),aT),z=new Zp(J,o+1,J.c.length),cxe(B,z),J.c.length=0,E=0,gst(g,g.length,0)}else te=B.b.c.length==0?null:jt(B.b,0),te!=null&&rce(B,0),E>0&&(g[E]=g[E-1]),g[E]+=wl(f)*gh(f),++E,$n(J.c,f);return J}function QLn(e,t){var n,r,a,o;n=t.b,o=new Ol(n.j),a=0,r=n.j,r.c.length=0,mw(l(zm(e.b,(Ct(),Qn),(Ow(),o3)),15),n),a=zN(o,a,new Gv,r),mw(l(zm(e.b,Qn,Rb),15),n),a=zN(o,a,new bee,r),mw(l(zm(e.b,Qn,a3),15),n),mw(l(zm(e.b,ar,o3),15),n),mw(l(zm(e.b,ar,Rb),15),n),a=zN(o,a,new $j,r),mw(l(zm(e.b,ar,a3),15),n),mw(l(zm(e.b,Dr,o3),15),n),a=zN(o,a,new zj,r),mw(l(zm(e.b,Dr,Rb),15),n),a=zN(o,a,new qj,r),mw(l(zm(e.b,Dr,a3),15),n),mw(l(zm(e.b,er,o3),15),n),a=zN(o,a,new Bj,r),mw(l(zm(e.b,er,Rb),15),n),mw(l(zm(e.b,er,a3),15),n)}function JLn(e,t,n){var r,a,o,f,g,w,E,C,L,B,z;for(g=new G(t);g.a.5?fe-=f*2*(V-.5):V<.5&&(fe+=o*2*(.5-V)),a=g.d.b,fete.a-J-C&&(fe=te.a-J-C),g.n.a=t+fe}}function nMn(e){var t,n,r,a,o;if(r=l(Q(e,(Nt(),Qu)),171),r==(hf(),$b)){for(n=new hr(dr(ka(e).a.Kc(),new j));jr(n);)if(t=l(xr(n),18),!Aut(t))throw ue(new Vp(jhe+HN(e)+"' has its layer constraint set to FIRST_SEPARATE, but has at least one incoming edge. FIRST_SEPARATE nodes must not have incoming edges."))}else if(r==d4){for(o=new hr(dr(qs(e).a.Kc(),new j));jr(o);)if(a=l(xr(o),18),!Aut(a))throw ue(new Vp(jhe+HN(e)+"' has its layer constraint set to LAST_SEPARATE, but has at least one outgoing edge. LAST_SEPARATE nodes must not have outgoing edges."))}}function bP(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V;if(e.e&&e.c.c>19&&(t=xE(t),w=!w),f=$Tn(t),o=!1,a=!1,r=!1,e.h==SP&&e.m==0&&e.l==0)if(a=!0,o=!0,f==-1)e=ent((iE(),WSe)),r=!0,w=!w;else return g=D9e(e,f),w&&yce(g),n&&(Nb=qu(0,0,0)),g;else e.h>>19&&(o=!0,e=xE(e),r=!0,w=!w);return f!=-1?pyn(e,f,w,o,n):bxe(e,t)<0?(n&&(o?Nb=xE(e):Nb=qu(e.l,e.m,e.h)),qu(0,0,0)):R_n(r?e:qu(e.l,e.m,e.h),t,w,o,a,n)}function Tle(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V;if(f=e.e,w=t.e,f==0)return t;if(w==0)return e;if(o=e.d,g=t.d,o+g==2)return n=va(e.a[0],Vo),r=va(t.a[0],Vo),f==w?(C=bo(n,r),V=Yr(C),z=Yr(ub(C,32)),z==0?new Qg(f,V):new Im(f,2,he(le(Vr,1),di,28,15,[V,z]))):(Cd(),Aq(f<0?Df(r,n):Df(n,r),0)?kb(f<0?Df(r,n):Df(n,r)):J_(kb(r2(f<0?Df(r,n):Df(n,r)))));if(f==w)B=f,L=o>=g?Ooe(e.a,o,t.a,g):Ooe(t.a,g,e.a,o);else{if(a=o!=g?o>g?1:-1:W7e(e.a,t.a,o),a==0)return Cd(),BL;a==1?(B=f,L=Doe(e.a,o,t.a,g)):(B=w,L=Doe(t.a,g,e.a,o))}return E=new Im(B,L.length,L),iA(E),E}function iMn(e,t){var n,r,a,o,f,g,w;if(!(e.g>t.f||t.g>e.f)){for(n=0,r=0,f=e.w.a.ec().Kc();f.Ob();)a=l(f.Pb(),12),Ice(Ic(he(le(Ea,1),dt,8,0,[a.i.n,a.n,a.a])).b,t.g,t.f)&&++n;for(g=e.r.a.ec().Kc();g.Ob();)a=l(g.Pb(),12),Ice(Ic(he(le(Ea,1),dt,8,0,[a.i.n,a.n,a.a])).b,t.g,t.f)&&--n;for(w=t.w.a.ec().Kc();w.Ob();)a=l(w.Pb(),12),Ice(Ic(he(le(Ea,1),dt,8,0,[a.i.n,a.n,a.a])).b,e.g,e.f)&&++r;for(o=t.r.a.ec().Kc();o.Ob();)a=l(o.Pb(),12),Ice(Ic(he(le(Ea,1),dt,8,0,[a.i.n,a.n,a.a])).b,e.g,e.f)&&--r;n=0)return n;switch(kw(ic(e,n))){case 2:{if(vn("",o2(e,n.qk()).xe())){if(w=HO(ic(e,n)),g=Wk(ic(e,n)),C=P9e(e,t,w,g),C)return C;for(a=hke(e,t),f=0,L=a.gc();f1)throw ue(new Yn(ZP));for(C=Wu(e.e.Dh(),t),r=l(e.g,124),f=0;f1,E=new N1(B.b);Lc(E.a)||Lc(E.b);)w=l(Lc(E.a)?re(E.a):re(E.b),18),L=w.c==B?w.d:w.c,b.Math.abs(Ic(he(le(Ea,1),dt,8,0,[L.i.n,L.n,L.a])).b-f.b)>1&&UCn(e,w,f,o,B)}}function lMn(e){var t,n,r,a,o,f;if(a=new Ua(e.e,0),r=new Ua(e.a,0),e.d)for(n=0;nwfe;){for(o=t,f=0;b.Math.abs(t-o)0),a.a.Xb(a.c=--a.b),CAn(e,e.b-f,o,r,a),mr(a.b0),r.a.Xb(r.c=--r.b)}if(!e.d)for(n=0;n0?(e.f[C.p]=z/(C.e.c.length+C.g.c.length),e.c=b.Math.min(e.c,e.f[C.p]),e.b=b.Math.max(e.b,e.f[C.p])):g&&(e.f[C.p]=z)}}function fMn(e){e.b=null,e.bb=null,e.fb=null,e.qb=null,e.a=null,e.c=null,e.d=null,e.e=null,e.f=null,e.n=null,e.M=null,e.L=null,e.Q=null,e.R=null,e.K=null,e.db=null,e.eb=null,e.g=null,e.i=null,e.j=null,e.k=null,e.gb=null,e.o=null,e.p=null,e.q=null,e.r=null,e.$=null,e.ib=null,e.S=null,e.T=null,e.t=null,e.s=null,e.u=null,e.v=null,e.w=null,e.B=null,e.A=null,e.C=null,e.D=null,e.F=null,e.G=null,e.H=null,e.I=null,e.J=null,e.P=null,e.Z=null,e.U=null,e.V=null,e.W=null,e.X=null,e.Y=null,e._=null,e.ab=null,e.cb=null,e.hb=null,e.nb=null,e.lb=null,e.mb=null,e.ob=null,e.pb=null,e.jb=null,e.kb=null,e.N=!1,e.O=!1}function dMn(e,t,n){var r,a,o,f;for(n.Ug("Graph transformation ("+e.a+")",1),f=_w(t.a),o=new G(t.b);o.a=g.b.c)&&(g.b=t),(!g.c||t.c<=g.c.c)&&(g.d=g.c,g.c=t),(!g.e||t.d>=g.e.d)&&(g.e=t),(!g.f||t.d<=g.f.d)&&(g.f=t);return r=new nU((wE(),s3)),QO(e,M8t,new Il(he(le(fB,1),Rn,382,0,[r]))),f=new nU(o4),QO(e,L8t,new Il(he(le(fB,1),Rn,382,0,[f]))),a=new nU(a4),QO(e,A8t,new Il(he(le(fB,1),Rn,382,0,[a]))),o=new nU(M6),QO(e,_8t,new Il(he(le(fB,1),Rn,382,0,[o]))),Yue(r.c,s3),Yue(a.c,a4),Yue(o.c,M6),Yue(f.c,o4),g.a.c.length=0,ra(g.a,r.c),ra(g.a,lf(a.c)),ra(g.a,o.c),ra(g.a,lf(f.c)),g}function bMn(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V;for(t.Ug(Ayt,1),z=ze(Ge(at(e,(ug(),T4)))),f=ze(Ge(at(e,(z1(),wM)))),g=l(at(e,vM),107),v7e((!e.a&&(e.a=new nt(Ai,e,10,11)),e.a)),C=uvt((!e.a&&(e.a=new nt(Ai,e,10,11)),e.a),z,f),!e.a&&(e.a=new nt(Ai,e,10,11)),E=new G(C);E.a0&&(e.a=w+(z-1)*o,t.c.b+=e.a,t.f.b+=e.a)),V.a.gc()!=0&&(B=new Hae(1,o),z=Rke(B,t,V,J,t.f.b+w-t.c.b),z>0&&(t.f.b+=w+(z-1)*o))}function bvt(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e;for(C=ze(Ge(Q(e,(Nt(),b3)))),r=ze(Ge(Q(e,rDe))),B=new EI,rt(B,b3,C+r),E=t,fe=E.d,J=E.c.i,Te=E.d.i,te=oye(J.c),Me=oye(Te.c),a=new bt,L=te;L<=Me;L++)g=new op(e),x(g,(Zn(),Aa)),rt(g,(ft(),zi),E),rt(g,Ms,(Ra(),Mu)),rt(g,kW,B),z=l(jt(e.b,L),30),L==te?Fy(g,z.a.c.length-n,z):Va(g,z),$e=ze(Ge(Q(E,x2))),$e<0&&($e=0,rt(E,x2,$e)),g.o.b=$e,V=b.Math.floor($e/2),f=new gu,la(f,(Ct(),er)),Mc(f,g),f.n.b=V,w=new gu,la(w,ar),Mc(w,g),w.n.b=V,Fa(E,f),o=new Tw,pc(o,E),rt(o,cc,null),po(o,w),Fa(o,fe),s8n(g,E,o),$n(a.c,o),E=o;return a}function Cle(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me;for(w=l(d2(e,(Ct(),er)).Kc().Pb(),12).e,z=l(d2(e,ar).Kc().Pb(),12).g,g=w.c.length,Me=I1(l(jt(e.j,0),12));g-- >0;){for(J=(Sn(0,w.c.length),l(w.c[0],18)),a=(Sn(0,z.c.length),l(z.c[0],18)),Te=a.d.e,o=gc(Te,a,0),$bn(J,a.d,o),po(a,null),Fa(a,null),V=J.a,t&&ui(V,new Eo(Me)),r=Rr(a.a,0);r.b!=r.d.c;)n=l(Br(r),8),ui(V,new Eo(n));for(fe=J.b,B=new G(a.b);B.af)&&na(e.b,l(te.b,18));++g}o=f}}}function Pke(e,t){var n;if(t==null||vn(t,ul)||t.length==0&&e.k!=(g2(),t9))return null;switch(e.k.g){case 1:return QV(t,wT)?(Hn(),ST):QV(t,Ffe)?(Hn(),Pb):null;case 2:try{return pt(Oh(t,lo,Ii))}catch(r){if(r=bs(r),De(r,130))return null;throw ue(r)}case 4:try{return jy(t)}catch(r){if(r=bs(r),De(r,130))return null;throw ue(r)}case 3:return t;case 5:return F0t(e),Xpt(e,t);case 6:return F0t(e),mTn(e,e.a,t);case 7:try{return n=AEn(e),n.cg(t),n}catch(r){if(r=bs(r),De(r,33))return null;throw ue(r)}default:throw ue(new nc("Invalid type set for this layout option."))}}function Bke(e){var t;switch(e.d){case 1:{if(e.Sj())return e.o!=-2;break}case 2:{if(e.Sj())return e.o==-2;break}case 3:case 5:case 4:case 6:case 7:return e.o>-2;default:return!1}switch(t=e.Rj(),e.p){case 0:return t!=null&&Rt(Bt(t))!=I_(e.k,0);case 1:return t!=null&&l(t,222).a!=Yr(e.k)<<24>>24;case 2:return t!=null&&l(t,180).a!=(Yr(e.k)&Zs);case 6:return t!=null&&I_(l(t,168).a,e.k);case 5:return t!=null&&l(t,17).a!=Yr(e.k);case 7:return t!=null&&l(t,191).a!=Yr(e.k)<<16>>16;case 3:return t!=null&&ze(Ge(t))!=e.j;case 4:return t!=null&&l(t,161).a!=e.j;default:return t==null?e.n!=null:!Pi(t,e.n)}}function mP(e,t,n){var r,a,o,f;return e.ol()&&e.nl()&&(f=Fae(e,l(n,58)),qe(f)!==qe(n))?(e.xj(t),e.Dj(t,ylt(e,t,f)),e.al()&&(o=(a=l(n,54),e.ml()?e.kl()?a.Th(e.b,Ro(l(Mn(sl(e.b),e.Lj()),19)).n,l(Mn(sl(e.b),e.Lj()).Hk(),29).kk(),null):a.Th(e.b,ms(a.Dh(),Ro(l(Mn(sl(e.b),e.Lj()),19))),null,null):a.Th(e.b,-1-e.Lj(),null,null)),!l(f,54).Ph()&&(o=(r=l(f,54),e.ml()?e.kl()?r.Rh(e.b,Ro(l(Mn(sl(e.b),e.Lj()),19)).n,l(Mn(sl(e.b),e.Lj()).Hk(),29).kk(),o):r.Rh(e.b,ms(r.Dh(),Ro(l(Mn(sl(e.b),e.Lj()),19))),null,o):r.Rh(e.b,-1-e.Lj(),null,o))),o&&o.oj()),hh(e.b)&&e.Jj(e.Ij(9,n,f,t,!1)),f):n}function mvt(e){var t,n,r,a,o,f,g,w,E,C;for(r=new bt,f=new G(e.e.a);f.a0&&(f=b.Math.max(f,kft(e.C.b+r.d.b,a))),C=r,L=a,B=o;e.C&&e.C.c>0&&(z=B+e.C.c,E&&(z+=C.d.c),f=b.Math.max(f,(A1(),f0(H1),b.Math.abs(L-1)<=H1||L==1||isNaN(L)&&isNaN(1)?0:z/(1-L)))),n.n.b=0,n.a.a=f}function wvt(e,t){var n,r,a,o,f,g,w,E,C,L,B,z;if(n=l(Qo(e.b,t),127),w=l(l($i(e.r,t),21),87),w.dc()){n.n.d=0,n.n.a=0;return}for(E=e.u.Hc((Rl(),vp)),f=0,e.A.Hc((mh(),Cv))&&Wbt(e,t),g=w.Kc(),C=null,B=0,L=0;g.Ob();)r=l(g.Pb(),117),o=ze(Ge(r.b.of((zq(),pK)))),a=r.b.Mf().b,C?(z=L+C.d.a+e.w+r.d.d,f=b.Math.max(f,(A1(),f0(H1),b.Math.abs(B-o)<=H1||B==o||isNaN(B)&&isNaN(o)?0:z/(o-B)))):e.C&&e.C.d>0&&(f=b.Math.max(f,kft(e.C.d+r.d.d,o))),C=r,B=o,L=a;e.C&&e.C.a>0&&(z=L+e.C.a,E&&(z+=C.d.a),f=b.Math.max(f,(A1(),f0(H1),b.Math.abs(B-1)<=H1||B==1||isNaN(B)&&isNaN(1)?0:z/(1-B)))),n.n.d=0,n.a.b=f}function wMn(e,t,n,r,a,o,f,g){var w,E,C,L,B,z,V,J,te,fe;if(V=!1,E=H9e(n.q,t.f+t.b-n.q.f),z=r.f>t.b&&g,fe=a-(n.q.e+E-f),L=(w=ZA(r,fe,!1),w.a),z&&L>r.f)return!1;if(z){for(B=0,te=new G(t.d);te.a=(Sn(o,e.c.length),l(e.c[o],186)).e,!z&&L>t.b&&!C)?!1:((C||z||L<=t.b)&&(C&&L>t.b?(n.d=L,aN(n,spt(n,L))):(Egt(n.q,E),n.c=!0),aN(r,a-(n.s+n.r)),qN(r,n.q.e+n.q.d,t.f),bV(t,r),e.c.length>o&&(UN((Sn(o,e.c.length),l(e.c[o],186)),r),(Sn(o,e.c.length),l(e.c[o],186)).a.c.length==0&&t2(e,o)),V=!0),V)}function yvt(e,t,n){var r,a,o,f,g,w;for(this.g=e,g=t.d.length,w=n.d.length,this.d=We(wg,m2,10,g+w,0,1),f=0;f0?Xoe(this,this.f/this.a):L1(t.g,t.d[0]).a!=null&&L1(n.g,n.d[0]).a!=null?Xoe(this,(ze(L1(t.g,t.d[0]).a)+ze(L1(n.g,n.d[0]).a))/2):L1(t.g,t.d[0]).a!=null?Xoe(this,L1(t.g,t.d[0]).a):L1(n.g,n.d[0]).a!=null&&Xoe(this,L1(n.g,n.d[0]).a)}function yMn(e,t){var n,r,a,o,f,g,w,E,C,L;for(e.a=new Zst(nyn(LM)),r=new G(t.a);r.a=1&&(te-f>0&&L>=0?(w.n.a+=J,w.n.b+=o*f):te-f<0&&C>=0&&(w.n.a+=J*te,w.n.b+=o));e.o.a=t.a,e.o.b=t.b,rt(e,(Nt(),bv),(mh(),r=l(K0(BM),9),new Zh(r,l(c0(r,r.length),9),0)))}function EMn(e,t,n,r,a,o){var f;if(!(t==null||!Hce(t,TPe,CPe)))throw ue(new Yn("invalid scheme: "+t));if(!e&&!(n!=null&&pd(n,cl(35))==-1&&n.length>0&&(Xn(0,n.length),n.charCodeAt(0)!=47)))throw ue(new Yn("invalid opaquePart: "+n));if(e&&!(t!=null&&nO(EY,t.toLowerCase()))&&!(n==null||!Hce(n,$M,zM)))throw ue(new Yn(n5t+n));if(e&&t!=null&&nO(EY,t.toLowerCase())&&!nxn(n))throw ue(new Yn(n5t+n));if(!c5n(r))throw ue(new Yn("invalid device: "+r));if(!Gyn(a))throw f=a==null?"invalid segments: null":"invalid segment: "+qyn(a),ue(new Yn(f));if(!(o==null||pd(o,cl(35))==-1))throw ue(new Yn("invalid query: "+o))}function TMn(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe;if(n.Ug("Network simplex layering",1),e.b=t,fe=l(Q(t,(Nt(),nM)),17).a*4,te=e.b.a,te.c.length<1){n.Vg();return}for(o=k_n(e,te),J=null,a=Rr(o,0);a.b!=a.d.c;){for(r=l(Br(a),15),g=fe*ua(b.Math.sqrt(r.gc())),f=F_n(r),ole(n3e(Tun(r3e(bae(f),g),J),!0),n.eh(1)),B=e.b.b,V=new G(f.a);V.a1)for(J=We(Vr,di,28,e.b.b.c.length,15,1),L=0,E=new G(e.b.b);E.a0){JV(e,n,0),n.a+=String.fromCharCode(r),a=G5n(t,o),JV(e,n,a),o+=a-1;continue}r==39?o+10&&V.a<=0){w.c.length=0,$n(w.c,V);break}z=V.i-V.d,z>=g&&(z>g&&(w.c.length=0,g=z),$n(w.c,V))}w.c.length!=0&&(f=l(jt(w,aU(a,w.c.length)),118),Me.a.Bc(f)!=null,f.g=C++,Tke(f,t,n,r),w.c.length=0)}for(te=e.c.length+1,B=new G(e);B.aia||t.o==wv&&C=g&&a<=w)g<=a&&o<=w?(n[C++]=a,n[C++]=o,r+=2):g<=a?(n[C++]=a,n[C++]=w,e.b[r]=w+1,f+=2):o<=w?(n[C++]=g,n[C++]=o,r+=2):(n[C++]=g,n[C++]=w,e.b[r]=w+1);else if(wAb)&&g<10);s3e(e.c,new Y7),Tvt(e),wgn(e.c),gMn(e.f)}function OMn(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J;for(n=l(Q(e,(Nt(),Ms)),101),f=e.f,o=e.d,g=f.a+o.b+o.c,w=0-o.d-e.c.b,C=f.b+o.d+o.a-e.c.b,E=new bt,L=new bt,a=new G(t);a.a=2){for(w=Rr(n,0),f=l(Br(w),8),g=l(Br(w),8);g.a0&&SN(E,!0,(Js(),vc)),g.k==(Zn(),Us)&&cat(E),ki(e.f,g,t)}}function BMn(e){var t,n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e;for(a=l(Q(e,(Qi(),gM)),27),E=Ii,C=Ii,g=lo,w=lo,Me=Rr(e.b,0);Me.b!=Me.d.c;)fe=l(Br(Me),40),z=fe.e,V=fe.f,E=b.Math.min(E,z.a-V.a/2),C=b.Math.min(C,z.b-V.b/2),g=b.Math.max(g,z.a+V.a/2),w=b.Math.max(w,z.b+V.b/2);for(B=l(at(a,(Hc(),gIe)),107),Te=Rr(e.b,0);Te.b!=Te.d.c;)fe=l(Br(Te),40),L=Q(fe,gM),De(L,207)&&(o=l(L,27),Qh(o,fe.e.a,fe.e.b),aP(o,fe));for(te=Rr(e.a,0);te.b!=te.d.c;)J=l(Br(te),65),r=l(Q(J,gM),74),r&&(t=J.a,n=l6(r,!0,!0),dP(t,n));$e=g-E+(B.b+B.c),f=w-C+(B.d+B.a),Rt(Bt(at(a,(pi(),C4))))||Gw(a,$e,f,!1,!1),Hi(a,t7,$e-(B.b+B.c)),Hi(a,e7,f-(B.d+B.a))}function Svt(e,t){var n,r,a,o,f,g,w,E,C,L;for(w=!0,a=0,E=e.g[t.p],C=t.o.b+e.o,n=e.d[t.p][2],rf(e.b,E,pt(l(jt(e.b,E),17).a-1+n)),rf(e.c,E,ze(Ge(jt(e.c,E)))-C+n*e.f),++E,E>=e.j?(++e.j,vt(e.b,pt(1)),vt(e.c,C)):(r=e.d[t.p][1],rf(e.b,E,pt(l(jt(e.b,E),17).a+1-r)),rf(e.c,E,ze(Ge(jt(e.c,E)))+C-r*e.f)),(e.r==(Nf(),AB)&&(l(jt(e.b,E),17).a>e.k||l(jt(e.b,E-1),17).a>e.k)||e.r==LB&&(ze(Ge(jt(e.c,E)))>e.n||ze(Ge(jt(e.c,E-1)))>e.n))&&(w=!1),f=new hr(dr(ka(t).a.Kc(),new j));jr(f);)o=l(xr(f),18),g=o.c.i,e.g[g.p]==E&&(L=Svt(e,g),a=a+l(L.a,17).a,w=w&&Rt(Bt(L.b)));return e.g[t.p]=E,a=a+e.d[t.p][0],new ca(pt(a),(Hn(),!!w))}function _vt(e,t){var n,r,a,o,f;n=ze(Ge(Q(t,(Nt(),x0)))),n<2&&rt(t,x0,2),r=l(Q(t,Rh),88),r==(Js(),J1)&&rt(t,Rh,zV(t)),a=l(Q(t,Vkt),17),a.a==0?rt(t,(ft(),Xx),new Uce):rt(t,(ft(),Xx),new VH(a.a)),o=Bt(Q(t,ZL)),o==null&&rt(t,ZL,(Hn(),qe(Q(t,bp))===qe((ip(),iC)))),Is(new bn(null,new kn(t.a,16)),new qp(e)),Is(Dc(new bn(null,new kn(t.b,16)),new u5),new n_(e)),f=new xvt(t),rt(t,(ft(),$6),f),qO(e.a),X0(e.a,(uo(),y0),l(Q(t,dv),188)),X0(e.a,vg,l(Q(t,pv),188)),X0(e.a,bu,l(Q(t,JL),188)),X0(e.a,_u,l(Q(t,yW),188)),X0(e.a,mc,B3n(l(Q(t,bp),223))),uye(e.a,DIn(t)),rt(t,K1e,bP(e.a,t))}function Rke(e,t,n,r,a){var o,f,g,w,E,C,L,B,z,V,J,te,fe;for(L=new Pr,f=new bt,Spt(e,n,e.d.Ag(),f,L),Spt(e,r,e.d.Bg(),f,L),e.b=.2*(J=D2t(Dc(new bn(null,new kn(f,16)),new Tte)),te=D2t(Dc(new bn(null,new kn(f,16)),new Cte)),b.Math.min(J,te)),o=0,g=0;g=2&&(fe=X2t(f,!0,B),!e.e&&(e.e=new sXe(e)),q5n(e.e,fe,f,e.b)),Ogt(f,B),qMn(f),z=-1,C=new G(f);C.ag)}function Avt(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te;for(E=gs,C=gs,g=ia,w=ia,B=new G(t.i);B.a-1){for(a=Rr(g,0);a.b!=a.d.c;)r=l(Br(a),131),r.v=f;for(;g.b!=0;)for(r=l(kue(g,0),131),n=new G(r.i);n.a-1){for(o=new G(g);o.a0)&&(Y(w,b.Math.min(w.o,a.o-1)),q(w,w.i-1),w.i==0&&$n(g.c,w))}}function Mvt(e,t,n,r,a){var o,f,g,w;return w=gs,f=!1,g=Lke(e,ma(new lt(t.a,t.b),e),Oi(new lt(n.a,n.b),a),ma(new lt(r.a,r.b),n)),o=!!g&&!(b.Math.abs(g.a-e.a)<=Zw&&b.Math.abs(g.b-e.b)<=Zw||b.Math.abs(g.a-t.a)<=Zw&&b.Math.abs(g.b-t.b)<=Zw),g=Lke(e,ma(new lt(t.a,t.b),e),n,a),g&&((b.Math.abs(g.a-e.a)<=Zw&&b.Math.abs(g.b-e.b)<=Zw)==(b.Math.abs(g.a-t.a)<=Zw&&b.Math.abs(g.b-t.b)<=Zw)||o?w=b.Math.min(w,eA(ma(g,n))):f=!0),g=Lke(e,ma(new lt(t.a,t.b),e),r,a),g&&(f||(b.Math.abs(g.a-e.a)<=Zw&&b.Math.abs(g.b-e.b)<=Zw)==(b.Math.abs(g.a-t.a)<=Zw&&b.Math.abs(g.b-t.b)<=Zw)||o)&&(w=b.Math.min(w,eA(ma(g,r)))),w}function Dvt(e){sw(e,new Xm(Uz(nw(Zv(tw(ew(new x1,Mb),A3t),"Minimizes the stress within a layout using stress majorization. Stress exists if the euclidean distance between a pair of nodes doesn't match their graph theoretic distance, that is, the shortest path between the two nodes. The method allows to specify individual edge lengths."),new y1),Yu))),gt(e,Mb,hL,It(lAe)),gt(e,Mb,cG,(Hn(),!0)),gt(e,Mb,x6,It(d8t)),gt(e,Mb,Px,It(g8t)),gt(e,Mb,Nx,It(p8t)),gt(e,Mb,fT,It(f8t)),gt(e,Mb,fL,It(fAe)),gt(e,Mb,dT,It(b8t)),gt(e,Mb,PEe,It(uAe)),gt(e,Mb,FEe,It(oAe)),gt(e,Mb,REe,It(cAe)),gt(e,Mb,jEe,It(hAe)),gt(e,Mb,BEe,It(TK))}function HMn(e){var t,n,r,a,o,f,g,w;for(t=null,r=new G(e);r.a0&&n.c==0&&(!t&&(t=new bt),$n(t.c,n));if(t)for(;t.c.length!=0;){if(n=l(t2(t,0),239),n.b&&n.b.c.length>0){for(o=(!n.b&&(n.b=new bt),new G(n.b));o.agc(e,n,0))return new ca(a,n)}else if(ze(L1(a.g,a.d[0]).a)>ze(L1(n.g,n.d[0]).a))return new ca(a,n)}for(g=(!n.e&&(n.e=new bt),n.e).Kc();g.Ob();)f=l(g.Pb(),239),w=(!f.b&&(f.b=new bt),f.b),Ey(0,w.c.length),x_(w.c,0,n),f.c==w.c.length&&$n(t.c,f)}return null}function VMn(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe;for(t.Ug("Interactive crossing minimization",1),f=0,o=new G(e.b);o.a0&&(n+=w.n.a+w.o.a/2,++L),V=new G(w.j);V.a0&&(n/=L),fe=We(Na,Zo,28,r.a.c.length,15,1),g=0,E=new G(r.a);E.a=g&&a<=w)g<=a&&o<=w?r+=2:g<=a?(e.b[r]=w+1,f+=2):o<=w?(n[C++]=a,n[C++]=g-1,r+=2):(n[C++]=a,n[C++]=g-1,e.b[r]=w+1,f+=2);else if(w2?(C=new bt,ra(C,new Zp(fe,1,fe.b)),o=vwt(C,Me+e.a),Te=new Gue(o),pc(Te,t),$n(n.c,Te)):r?Te=l(cr(e.b,cg(t)),272):Te=l(cr(e.b,Eb(t)),272),w=cg(t),r&&(w=Eb(t)),f=H9n(te,w),E=Me+e.a,f.a?(E+=b.Math.abs(te.b-L.b),J=new lt(L.a,(L.b+te.b)/2)):(E+=b.Math.abs(te.a-L.a),J=new lt((L.a+te.a)/2,L.b)),r?ki(e.d,t,new nxe(Te,f,J,E)):ki(e.c,t,new nxe(Te,f,J,E)),ki(e.b,t,Te),V=(!t.n&&(t.n=new nt(ec,t,1,7)),t.n),z=new or(V);z.e!=z.i.gc();)B=l(gr(z),135),a=uP(e,B,!0,0,0),$n(n.c,a)}function UMn(e){var t,n,r,a,o,f,g;if(!e.A.dc()){if(e.A.Hc((mh(),iF))&&(l(Qo(e.b,(Ct(),Qn)),127).k=!0,l(Qo(e.b,Dr),127).k=!0,t=e.q!=(Ra(),Tg)&&e.q!=Mu,_z(l(Qo(e.b,ar),127),t),_z(l(Qo(e.b,er),127),t),_z(e.g,t),e.A.Hc(Cv)&&(l(Qo(e.b,Qn),127).j=!0,l(Qo(e.b,Dr),127).j=!0,l(Qo(e.b,ar),127).k=!0,l(Qo(e.b,er),127).k=!0,e.g.k=!0)),e.A.Hc(rF))for(e.a.j=!0,e.a.k=!0,e.g.j=!0,e.g.k=!0,g=e.B.Hc((Zl(),FM)),a=eue(),o=0,f=a.length;o0),l(C.a.Xb(C.c=--C.b),18));o!=r&&C.b>0;)e.a[o.p]=!0,e.a[r.p]=!0,o=(mr(C.b>0),l(C.a.Xb(C.c=--C.b),18));C.b>0&&ph(C)}}function Ovt(e,t,n){var r,a,o,f,g,w,E,C,L,B,z;if(!e.b)return!1;for(f=null,B=null,w=new Boe(null,null),a=1,w.a[1]=e.b,L=w;L.a[a];)E=a,g=B,B=L,L=L.a[a],r=e.a.Ne(t,L.d),a=r<0?0:1,r==0&&(!n.c||Jc(L.e,n.d))&&(f=L),!(L&&L.b)&&!oy(L.a[a])&&(oy(L.a[1-a])?B=B.a[E]=EV(L,a):oy(L.a[1-a])||(z=B.a[1-E],z&&(!oy(z.a[1-E])&&!oy(z.a[E])?(B.b=!1,z.b=!0,L.b=!0):(o=g.a[1]==B?1:0,oy(z.a[E])?g.a[o]=uct(B,E):oy(z.a[1-E])&&(g.a[o]=EV(B,E)),L.b=g.a[o].b=!0,g.a[o].a[0].b=!1,g.a[o].a[1].b=!1))));return f&&(n.b=!0,n.d=f.e,L!=f&&(C=new Boe(L.d,L.e),Wxn(e,w,f,C),B==f&&(B=C)),B.a[B.a[1]==L?1:0]=L.a[L.a[0]?0:1],--e.c),e.b=w.a[1],e.b&&(e.b.b=!1),n.b}function WMn(e){var t,n,r,a,o,f,g,w,E,C,L,B;for(a=new G(e.a.a.b);a.a0?a-=864e5:a+=864e5,w=new Kye(bo(Zc(t.q.getTime()),a))),C=new S5,E=e.a.length,o=0;o=97&&r<=122||r>=65&&r<=90){for(f=o+1;f=E)throw ue(new Yn("Missing trailing '"));f+1=14&&C<=16))?t.a._b(r)?(n.a?hi(n.a,n.b):n.a=new Th(n.d),N_(n.a,"[...]")):(g=jm(r),E=new U_(t),Jg(n,Pvt(g,E))):De(r,183)?Jg(n,Skn(l(r,183))):De(r,195)?Jg(n,hxn(l(r,195))):De(r,201)?Jg(n,x9n(l(r,201))):De(r,2111)?Jg(n,fxn(l(r,2111))):De(r,53)?Jg(n,Ckn(l(r,53))):De(r,376)?Jg(n,Hkn(l(r,376))):De(r,846)?Jg(n,Tkn(l(r,846))):De(r,109)&&Jg(n,Ekn(l(r,109))):Jg(n,r==null?ul:xc(r));return n.a?n.e.length==0?n.a.a:n.a.a+(""+n.e):n.c}function JE(e,t){var n,r,a,o;o=e.F,t==null?(e.F=null,CE(e,null)):(e.F=(nr(t),t),r=pd(t,cl(60)),r!=-1?(a=(Ga(0,r,t.length),t.substr(0,r)),pd(t,cl(46))==-1&&!vn(a,Cx)&&!vn(a,SL)&&!vn(a,GG)&&!vn(a,_L)&&!vn(a,AL)&&!vn(a,LL)&&!vn(a,ML)&&!vn(a,DL)&&(a=p5t),n=Rq(t,cl(62)),n!=-1&&(a+=""+(Xn(n+1,t.length+1),t.substr(n+1))),CE(e,a)):(a=t,pd(t,cl(46))==-1&&(r=pd(t,cl(91)),r!=-1&&(a=(Ga(0,r,t.length),t.substr(0,r))),!vn(a,Cx)&&!vn(a,SL)&&!vn(a,GG)&&!vn(a,_L)&&!vn(a,AL)&&!vn(a,LL)&&!vn(a,ML)&&!vn(a,DL)?(a=p5t,r!=-1&&(a+=""+(Xn(r,t.length+1),t.substr(r)))):a=t),CE(e,a),a==t&&(e.F=e.D))),e.Db&4&&!(e.Db&1)&&Ni(e,new _a(e,1,5,o,t))}function Bvt(e,t){var n,r,a,o,f,g,w,E,C,L;if(w=t.length-1,g=(Xn(w,t.length),t.charCodeAt(w)),g==93){if(f=pd(t,cl(91)),f>=0)return a=Z4n(e,(Ga(1,f,t.length),t.substr(1,f-1))),C=(Ga(f+1,w,t.length),t.substr(f+1,w-(f+1))),CIn(e,C,a)}else{if(n=-1,ZSe==null&&(ZSe=new RegExp("\\d")),ZSe.test(String.fromCharCode(g))&&(n=h4e(t,cl(46),w-1),n>=0)){r=l(Moe(e,Tht(e,(Ga(1,n,t.length),t.substr(1,n-1))),!1),61),E=0;try{E=Oh((Xn(n+1,t.length+1),t.substr(n+1)),lo,Ii)}catch(B){throw B=bs(B),De(B,130)?(o=B,ue(new nV(o))):ue(B)}if(E>16==-10?n=l(e.Cb,292).Yk(t,n):e.Db>>16==-15&&(!t&&(t=(Tn(),td)),!E&&(E=(Tn(),td)),e.Cb.Yh()&&(w=new Zg(e.Cb,1,13,E,t,f2(Xl(l(e.Cb,62)),e),!1),n?n.nj(w):n=w));else if(De(e.Cb,90))e.Db>>16==-23&&(De(t,90)||(t=(Tn(),Kf)),De(E,90)||(E=(Tn(),Kf)),e.Cb.Yh()&&(w=new Zg(e.Cb,1,10,E,t,f2(du(l(e.Cb,29)),e),!1),n?n.nj(w):n=w));else if(De(e.Cb,457))for(g=l(e.Cb,850),f=(!g.b&&(g.b=new Pz(new Vie)),g.b),o=(r=new qm(new Sr(f.a).a),new Bz(r));o.a.b;)a=l(Nw(o.a).ld(),89),n=ZE(a,SU(a,g),n)}return n}function ZMn(e,t){var n,r,a,o,f,g,w,E,C,L,B;for(f=Rt(Bt(at(e,(Nt(),b4)))),B=l(at(e,v4),21),w=!1,E=!1,L=new or((!e.c&&(e.c=new nt(Hl,e,9,9)),e.c));L.e!=L.i.gc()&&(!w||!E);){for(o=l(gr(L),123),g=0,a=rg(Lh(he(le(Fh,1),Rn,20,0,[(!o.d&&(o.d=new Ln(js,o,8,5)),o.d),(!o.e&&(o.e=new Ln(js,o,7,4)),o.e)])));jr(a)&&(r=l(xr(a),74),C=f&&qw(r)&&Rt(Bt(at(r,gv))),n=gvt((!r.b&&(r.b=new Ln(_r,r,4,7)),r.b),o)?e==ds(bc(l(Oe((!r.c&&(r.c=new Ln(_r,r,5,8)),r.c),0),84))):e==ds(bc(l(Oe((!r.b&&(r.b=new Ln(_r,r,4,7)),r.b),0),84))),!((C||n)&&(++g,g>1))););(g>0||B.Hc((Rl(),vp))&&(!o.n&&(o.n=new nt(ec,o,1,7)),o.n).i>0)&&(w=!0),g>1&&(E=!0)}w&&t.Fc((Ho(),vf)),E&&t.Fc((Ho(),UL))}function Fvt(e){var t,n,r,a,o,f,g,w,E,C,L,B;if(B=l(at(e,(pi(),kv)),21),B.dc())return null;if(g=0,f=0,B.Hc((mh(),iF))){for(C=l(at(e,_M),101),r=2,n=2,a=2,o=2,t=ds(e)?l(at(ds(e),xv),88):l(at(e,xv),88),E=new or((!e.c&&(e.c=new nt(Hl,e,9,9)),e.c));E.e!=E.i.gc();)if(w=l(gr(E),123),L=l(at(w,s7),64),L==(Ct(),Pc)&&(L=Eke(w,t),Hi(w,s7,L)),C==(Ra(),Mu))switch(L.g){case 1:r=b.Math.max(r,w.i+w.g);break;case 2:n=b.Math.max(n,w.j+w.f);break;case 3:a=b.Math.max(a,w.i+w.g);break;case 4:o=b.Math.max(o,w.j+w.f)}else switch(L.g){case 1:r+=w.g+2;break;case 2:n+=w.f+2;break;case 3:a+=w.g+2;break;case 4:o+=w.f+2}g=b.Math.max(r,a),f=b.Math.max(n,o)}return Gw(e,g,f,!0,!0)}function Sle(e,t,n,r,a){var o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e;for(Te=l(yc(lV(Fi(new bn(null,new kn(t.d,16)),new CYe(n)),new SYe(n)),Pl(new zr,new ht,new Fn,he(le(oc,1),it,108,0,[(Fl(),Ec)]))),15),L=Ii,C=lo,w=new G(t.b.j);w.a0,E?E&&(B=fe.p,f?++B:--B,L=l(jt(fe.c.a,B),10),r=o0t(L),z=!(Xue(r,ot,n[0])||Dst(r,ot,n[0]))):z=!0),V=!1,Ze=t.D.i,Ze&&Ze.c&&g.e&&(C=f&&Ze.p>0||!f&&Ze.p=0){for(w=null,g=new Ua(C.a,E+1);g.bf?1:uw(isNaN(0),isNaN(f)))<0&&(f0(Nd),(b.Math.abs(f-1)<=Nd||f==1||isNaN(f)&&isNaN(1)?0:f<1?-1:f>1?1:uw(isNaN(f),isNaN(1)))<0)&&(f0(Nd),(b.Math.abs(0-g)<=Nd||g==0||isNaN(0)&&isNaN(g)?0:0g?1:uw(isNaN(0),isNaN(g)))<0)&&(f0(Nd),(b.Math.abs(g-1)<=Nd||g==1||isNaN(g)&&isNaN(1)?0:g<1?-1:g>1?1:uw(isNaN(g),isNaN(1)))<0)),o)}function sDn(e){var t,n,r,a;if(n=e.D!=null?e.D:e.B,t=pd(n,cl(91)),t!=-1){r=(Ga(0,t,n.length),n.substr(0,t)),a=new Up;do a.a+="[";while((t=Nk(n,91,++t))!=-1);vn(r,Cx)?a.a+="Z":vn(r,SL)?a.a+="B":vn(r,GG)?a.a+="C":vn(r,_L)?a.a+="D":vn(r,AL)?a.a+="F":vn(r,LL)?a.a+="I":vn(r,ML)?a.a+="J":vn(r,DL)?a.a+="S":(a.a+="L",a.a+=""+r,a.a+=";");try{return null}catch(o){if(o=bs(o),!De(o,63))throw ue(o)}}else if(pd(n,cl(46))==-1){if(vn(n,Cx))return ih;if(vn(n,SL))return Al;if(vn(n,GG))return kf;if(vn(n,_L))return Na;if(vn(n,AL))return B4;if(vn(n,LL))return Vr;if(vn(n,ML))return nm;if(vn(n,DL))return h7}return null}function aDn(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St;for(e.e=t,g=aEn(t),ot=new bt,r=new G(g);r.a=0&&J=E.c.c.length?C=u6e((Zn(),Ps),Aa):C=u6e((Zn(),Aa),Aa),C*=2,o=n.a.g,n.a.g=b.Math.max(o,o+(C-o)),f=n.b.g,n.b.g=b.Math.max(f,f+(C-f)),a=t}}function lDn(e){var t,n,r,a;for(Is(Fi(new bn(null,new kn(e.a.b,16)),new Oj),new aee),U8n(e),Is(Fi(new bn(null,new kn(e.a.b,16)),new oee),new cee),e.c==(ip(),s9)&&(Is(Fi(Dc(new bn(null,new kn(new br(e.f),1)),new uee),new lee),new vYe(e)),Is(Fi(fc(Dc(Dc(new bn(null,new kn(e.d.b,16)),new hee),new Nj),new fee),new Pj),new yYe(e))),a=new lt(gs,gs),t=new lt(ia,ia),r=new G(e.a.b);r.a0&&(t.a+=Co),GU(l(gr(g),167),t);for(t.a+=Phe,w=new q8((!r.c&&(r.c=new Ln(_r,r,5,8)),r.c));w.e!=w.i.gc();)w.e>0&&(t.a+=Co),GU(l(gr(w),167),t);t.a+=")"}}function hDn(e,t,n){var r,a,o,f,g,w,E,C;for(w=new or((!e.a&&(e.a=new nt(Ai,e,10,11)),e.a));w.e!=w.i.gc();)for(g=l(gr(w),27),a=new hr(dr(cp(g).a.Kc(),new j));jr(a);){if(r=l(xr(a),74),!r.b&&(r.b=new Ln(_r,r,4,7)),!(r.b.i<=1&&(!r.c&&(r.c=new Ln(_r,r,5,8)),r.c.i<=1)))throw ue(new I8("Graph must not contain hyperedges."));if(!qA(r)&&g!=bc(l(Oe((!r.c&&(r.c=new Ln(_r,r,5,8)),r.c),0),84)))for(E=new jrt,pc(E,r),rt(E,(bb(),Hx),r),Aie(E,l(hc(zo(n.f,g)),153)),k8(E,l(cr(n,bc(l(Oe((!r.c&&(r.c=new Ln(_r,r,5,8)),r.c),0),84))),153)),vt(t.c,E),f=new or((!r.n&&(r.n=new nt(ec,r,1,7)),r.n));f.e!=f.i.gc();)o=l(gr(f),135),C=new zct(E,o.a),pc(C,o),rt(C,Hx,o),C.e.a=b.Math.max(o.g,1),C.e.b=b.Math.max(o.f,1),Ake(C),vt(t.d,C)}}function fDn(e,t,n){var r,a,o,f,g,w,E,C,L,B;switch(n.Ug("Node promotion heuristic",1),e.i=t,e.r=l(Q(t,(Nt(),zb)),243),e.r!=(Nf(),v3)&&e.r!=x4?jDn(e):hSn(e),C=l(Q(e.i,HMe),17).a,o=new hd,e.r.g){case 2:case 1:QE(e,o);break;case 3:for(e.r=LW,QE(e,o),w=0,g=new G(e.b);g.ae.k&&(e.r=AB,QE(e,o));break;case 4:for(e.r=LW,QE(e,o),E=0,a=new G(e.c);a.ae.n&&(e.r=LB,QE(e,o));break;case 6:B=ua(b.Math.ceil(e.g.length*C/100)),QE(e,new aYe(B));break;case 5:L=ua(b.Math.ceil(e.e*C/100)),QE(e,new oYe(L));break;case 8:xwt(e,!0);break;case 9:xwt(e,!1);break;default:QE(e,o)}e.r!=v3&&e.r!=x4?PCn(e,t):t_n(e,t),n.Vg()}function dDn(e){var t,n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me;for(L=e.b,C=new Ua(L,0),by(C,new yu(e)),Te=!1,f=1;C.b0&&(B.d+=C.n.d,B.d+=C.d),B.a>0&&(B.a+=C.n.a,B.a+=C.d),B.b>0&&(B.b+=C.n.b,B.b+=C.d),B.c>0&&(B.c+=C.n.c,B.c+=C.d),B}function jvt(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V;for(B=n.d,L=n.c,o=new lt(n.f.a+n.d.b+n.d.c,n.f.b+n.d.d+n.d.a),f=o.b,E=new G(e.a);E.a0&&(e.c[t.c.p][t.p].d+=Jl(e.i,24)*MP*.07000000029802322-.03500000014901161,e.c[t.c.p][t.p].a=e.c[t.c.p][t.p].d/e.c[t.c.p][t.p].b)}}function bDn(e){var t,n,r,a,o,f,g,w,E,C,L,B,z,V,J,te;for(V=new G(e);V.ar.d,r.d=b.Math.max(r.d,t),g&&n&&(r.d=b.Math.max(r.d,r.a),r.a=r.d+a);break;case 3:n=t>r.a,r.a=b.Math.max(r.a,t),g&&n&&(r.a=b.Math.max(r.a,r.d),r.d=r.a+a);break;case 2:n=t>r.c,r.c=b.Math.max(r.c,t),g&&n&&(r.c=b.Math.max(r.b,r.c),r.b=r.c+a);break;case 4:n=t>r.b,r.b=b.Math.max(r.b,t),g&&n&&(r.b=b.Math.max(r.b,r.c),r.c=r.b+a)}}}function zvt(e,t){var n,r,a,o,f,g,w,E,C;return E="",t.length==0?e.ne(iEe,Rle,-1,-1):(C=$y(t),vn(C.substr(0,3),"at ")&&(C=(Xn(3,C.length+1),C.substr(3))),C=C.replace(/\[.*?\]/g,""),f=C.indexOf("("),f==-1?(f=C.indexOf("@"),f==-1?(E=C,C=""):(E=$y((Xn(f+1,C.length+1),C.substr(f+1))),C=$y((Ga(0,f,C.length),C.substr(0,f))))):(n=C.indexOf(")",f),E=(Ga(f+1,n,C.length),C.substr(f+1,n-(f+1))),C=$y((Ga(0,f,C.length),C.substr(0,f)))),f=pd(C,cl(46)),f!=-1&&(C=(Xn(f+1,C.length+1),C.substr(f+1))),(C.length==0||vn(C,"Anonymous function"))&&(C=Rle),g=Rq(E,cl(58)),a=h4e(E,cl(58),g-1),w=-1,r=-1,o=iEe,g!=-1&&a!=-1&&(o=(Ga(0,a,E.length),E.substr(0,a)),w=irt((Ga(a+1,g,E.length),E.substr(a+1,g-(a+1)))),r=irt((Xn(g+1,E.length+1),E.substr(g+1)))),e.ne(o,C,w,r))}function wDn(e){var t,n,r,a,o,f,g,w,E,C,L;for(E=new G(e);E.a0||C.j==er&&C.e.c.length-C.g.c.length<0)){t=!1;break}for(a=new G(C.g);a.a=E&&Ze>=te&&(B+=V.n.b+J.n.b+J.a.b-$e,++g));if(n)for(f=new G(Te.e);f.a=E&&Ze>=te&&(B+=V.n.b+J.n.b+J.a.b-$e,++g))}g>0&&(ot+=B/g,++z)}z>0?(t.a=a*ot/z,t.g=z):(t.a=0,t.g=0)}function xDn(e){var t,n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St;for(o=e.f.b,B=o.a,C=o.b,V=e.e.g,z=e.e.f,F5(e.e,o.a,o.b),ot=B/V,St=C/z,E=new or(EH(e.e));E.e!=E.i.gc();)w=l(gr(E),135),Uu(w,w.i*ot),Gu(w,w.j*St);for(Te=new or(Xae(e.e));Te.e!=Te.i.gc();)fe=l(gr(Te),123),$e=fe.i,Ze=fe.j,$e>0&&Uu(fe,$e*ot),Ze>0&&Gu(fe,Ze*St);for(mA(e.b,new zg),t=new bt,g=new qm(new Sr(e.c).a);g.b;)f=Nw(g),r=l(f.ld(),74),n=l(f.md(),407).a,a=l6(r,!1,!1),L=Ngt(cg(r),QN(a),n),dP(L,a),Me=Kgt(r),Me&&gc(t,Me,0)==-1&&($n(t.c,Me),kat(Me,(mr(L.b!=0),l(L.a.a.c,8)),n));for(te=new qm(new Sr(e.d).a);te.b;)J=Nw(te),r=l(J.ld(),74),n=l(J.md(),407).a,a=l6(r,!1,!1),L=Ngt(Eb(r),AN(QN(a)),n),L=AN(L),dP(L,a),Me=Wgt(r),Me&&gc(t,Me,0)==-1&&($n(t.c,Me),kat(Me,(mr(L.b!=0),l(L.c.b.c,8)),n))}function qvt(e,t,n,r){var a,o,f,g,w;return g=new zke(t),fCn(g,r),a=!0,e&&e.pf((pi(),xv))&&(o=l(e.of((pi(),xv)),88),a=o==(Js(),J1)||o==uc||o==vc),zbt(g,!1),Vu(g.e.Rf(),new v4e(g,!1,a)),uoe(g,g.f,(t1(),Gc),(Ct(),Qn)),uoe(g,g.f,Kc,Dr),uoe(g,g.g,Gc,er),uoe(g,g.g,Kc,ar),bdt(g,Qn),bdt(g,Dr),wat(g,ar),wat(g,er),py(),f=g.A.Hc((mh(),A4))&&g.B.Hc((Zl(),aF))?N1t(g):null,f&&xun(g.a,f),vDn(g),w7n(g),y7n(g),UMn(g),w_n(g),G7n(g),Jce(g,Qn),Jce(g,Dr),XSn(g),wLn(g),n&&(e5n(g),K7n(g),Jce(g,ar),Jce(g,er),w=g.B.Hc((Zl(),FM)),Opt(g,w,Qn),Opt(g,w,Dr),Npt(g,w,ar),Npt(g,w,er),Is(new bn(null,new kn(new gi(g.i),0)),new Fc),Is(Fi(new bn(null,b5e(g.r).a.oc()),new xa),new Ba),oxn(g),g.e.Pf(g.o),Is(new bn(null,b5e(g.r).a.oc()),new ga)),g.o}function kDn(e){var t,n,r,a,o,f,g,w,E,C,L,B,z,V,J;for(E=gs,r=new G(e.a.b);r.a1)for(z=new Ike(V,Me,r),to(Me,new Jet(e,z)),$n(f.c,z),L=Me.a.ec().Kc();L.Ob();)C=l(L.Pb(),42),al(o,C.b);if(g.a.gc()>1)for(z=new Ike(V,g,r),to(g,new Zet(e,z)),$n(f.c,z),L=g.a.ec().Kc();L.Ob();)C=l(L.Pb(),42),al(o,C.b)}}function SDn(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe;if(J=e.n,te=e.o,B=e.d,L=ze(Ge(Py(e,(Nt(),ode)))),t){for(C=L*(t.gc()-1),z=0,w=t.Kc();w.Ob();)f=l(w.Pb(),10),C+=f.o.a,z=b.Math.max(z,f.o.b);for(fe=J.a-(C-te.a)/2,o=J.b-B.d+z,r=te.a/(t.gc()+1),a=r,g=t.Kc();g.Ob();)f=l(g.Pb(),10),f.n.a=fe,f.n.b=o-f.o.b,fe+=f.o.a+L,E=Q2t(f),E.n.a=f.o.a/2-E.a.a,E.n.b=f.o.b,V=l(Q(f,(ft(),rW)),12),V.e.c.length+V.g.c.length==1&&(V.n.a=a-V.a.a,V.n.b=0,Mc(V,e)),a+=r}if(n){for(C=L*(n.gc()-1),z=0,w=n.Kc();w.Ob();)f=l(w.Pb(),10),C+=f.o.a,z=b.Math.max(z,f.o.b);for(fe=J.a-(C-te.a)/2,o=J.b+te.b+B.a-z,r=te.a/(n.gc()+1),a=r,g=n.Kc();g.Ob();)f=l(g.Pb(),10),f.n.a=fe,f.n.b=o,fe+=f.o.a+L,E=Q2t(f),E.n.a=f.o.a/2-E.a.a,E.n.b=0,V=l(Q(f,(ft(),rW)),12),V.e.c.length+V.g.c.length==1&&(V.n.a=a-V.a.a,V.n.b=te.b,Mc(V,e)),a+=r}}function _Dn(e,t){var n,r,a,o,f,g;if(l(Q(t,(ft(),Lu)),21).Hc((Ho(),vf))){for(g=new G(t.a);g.a=0&&f0&&(l(Qo(e.b,t),127).a.b=n)}function IDn(e,t,n,r){var a,o,f,g,w,E,C,L,B,z,V,J;if(B=ze(Ge(Q(e,(Nt(),GT)))),z=ze(Ge(Q(e,KT))),L=ze(Ge(Q(e,y4))),g=e.o,o=l(jt(e.j,0),12),f=o.n,J=Y9n(o,L),!!J){if(t.Hc((Rl(),vp)))switch(l(Q(e,(ft(),Wc)),64).g){case 1:J.c=(g.a-J.b)/2-f.a,J.d=z;break;case 3:J.c=(g.a-J.b)/2-f.a,J.d=-z-J.a;break;case 2:n&&o.e.c.length==0&&o.g.c.length==0?(C=r?J.a:l(jt(o.f,0),72).o.b,J.d=(g.b-C)/2-f.b):J.d=g.b+z-f.b,J.c=-B-J.b;break;case 4:n&&o.e.c.length==0&&o.g.c.length==0?(C=r?J.a:l(jt(o.f,0),72).o.b,J.d=(g.b-C)/2-f.b):J.d=g.b+z-f.b,J.c=B}else if(t.Hc(Yb))switch(l(Q(e,(ft(),Wc)),64).g){case 1:case 3:J.c=f.a+B;break;case 2:case 4:n&&!o.c?(C=r?J.a:l(jt(o.f,0),72).o.b,J.d=(g.b-C)/2-f.b):J.d=f.b+z}for(a=J.d,E=new G(o.f);E.a=t.length)return{done:!0};var a=t[r++];return{value:[a,n.get(a)],done:!1}}}},LSn()||(e.prototype.createObject=function(){return{}},e.prototype.get=function(t){return this.obj[":"+t]},e.prototype.set=function(t,n){this.obj[":"+t]=n},e.prototype[lhe]=function(t){delete this.obj[":"+t]},e.prototype.keys=function(){var t=[];for(var n in this.obj)n.charCodeAt(0)==58&&t.push(n.substring(1));return t}),e}function Qi(){Qi=U,gM=new Ui(NEe),new vs("DEPTH",pt(0)),Pde=new vs("FAN",pt(0)),nIe=new vs(gyt,pt(0)),Vb=new vs("ROOT",(Hn(),!1)),Rde=new vs("LEFTNEIGHBOR",null),dTt=new vs("RIGHTNEIGHBOR",null),BW=new vs("LEFTSIBLING",null),jde=new vs("RIGHTSIBLING",null),Nde=new vs("DUMMY",!1),new vs("LEVEL",pt(0)),sIe=new vs("REMOVABLE_EDGES",new os),PB=new vs("XCOOR",pt(0)),BB=new vs("YCOOR",pt(0)),FW=new vs("LEVELHEIGHT",0),c1=new vs("LEVELMIN",0),k0=new vs("LEVELMAX",0),Bde=new vs("GRAPH_XMIN",0),Fde=new vs("GRAPH_YMIN",0),rIe=new vs("GRAPH_XMAX",0),iIe=new vs("GRAPH_YMAX",0),tIe=new vs("COMPACT_LEVEL_ASCENSION",!1),Ode=new vs("COMPACT_CONSTRAINTS",new bt),dM=new vs("ID",""),pM=new vs("POSITION",pt(0)),C2=new vs("PRELIM",0),JT=new vs("MODIFIER",0),QT=new Ui(S3t),NB=new Ui(_3t)}function BDn(e){kke();var t,n,r,a,o,f,g,w,E,C,L,B,z,V,J,te;if(e==null)return null;if(L=e.length*8,L==0)return"";for(g=L%24,z=L/24|0,B=g!=0?z+1:z,o=null,o=We(kf,Ad,28,B*4,15,1),E=0,C=0,t=0,n=0,r=0,f=0,a=0,w=0;w>24,E=(t&3)<<24>>24,V=t&-128?(t>>2^192)<<24>>24:t>>2<<24>>24,J=n&-128?(n>>4^240)<<24>>24:n>>4<<24>>24,te=r&-128?(r>>6^252)<<24>>24:r>>6<<24>>24,o[f++]=N2[V],o[f++]=N2[J|E<<4],o[f++]=N2[C<<2|te],o[f++]=N2[r&63];return g==8?(t=e[a],E=(t&3)<<24>>24,V=t&-128?(t>>2^192)<<24>>24:t>>2<<24>>24,o[f++]=N2[V],o[f++]=N2[E<<4],o[f++]=61,o[f++]=61):g==16&&(t=e[a],n=e[a+1],C=(n&15)<<24>>24,E=(t&3)<<24>>24,V=t&-128?(t>>2^192)<<24>>24:t>>2<<24>>24,J=n&-128?(n>>4^240)<<24>>24:n>>4<<24>>24,o[f++]=N2[V],o[f++]=N2[J|E<<4],o[f++]=N2[C<<2],o[f++]=61),If(o,0,o.length)}function FDn(e,t){var n,r,a,o,f,g,w;if(e.e==0&&e.p>0&&(e.p=-(e.p-1)),e.p>lo&&c6e(t,e.p-Lb),f=t.q.getDate(),YO(t,1),e.k>=0&&C2n(t,e.k),e.c>=0?YO(t,e.c):e.k>=0?(w=new R7e(t.q.getFullYear()-Lb,t.q.getMonth(),35),r=35-w.q.getDate(),YO(t,b.Math.min(r,f))):YO(t,f),e.f<0&&(e.f=t.q.getHours()),e.b>0&&e.f<12&&(e.f+=12),bhn(t,e.f==24&&e.g?0:e.f),e.j>=0&&ovn(t,e.j),e.n>=0&&wvn(t,e.n),e.i>=0&&Qtt(t,bo(mo(KN(Zc(t.q.getTime()),b2),b2),e.i)),e.a&&(a=new Qz,c6e(a,a.q.getFullYear()-Lb-80),fse(Zc(t.q.getTime()),Zc(a.q.getTime()))&&c6e(t,a.q.getFullYear()-Lb+100)),e.d>=0){if(e.c==-1)n=(7+e.d-t.q.getDay())%7,n>3&&(n-=7),g=t.q.getMonth(),YO(t,t.q.getDate()+n),t.q.getMonth()!=g&&YO(t,t.q.getDate()+(n>0?-7:7));else if(t.q.getDay()!=e.d)return!1}return e.o>lo&&(o=t.q.getTimezoneOffset(),Qtt(t,bo(Zc(t.q.getTime()),(e.o-o)*60*b2))),!0}function Kvt(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e;if(a=Q(t,(ft(),zi)),!!De(a,207)){for(V=l(a,27),J=t.e,B=new Eo(t.c),o=t.d,B.a+=o.b,B.b+=o.d,$e=l(at(V,(Nt(),xW)),181),vl($e,(Zl(),uY))&&(z=l(at(V,WMe),107),Tie(z,o.a),mwe(z,o.d),Cie(z,o.b),x8(z,o.c)),n=new bt,C=new G(t.a);C.ar.c.length-1;)vt(r,new ca(y6,hCe));n=l(Q(a,$d),17).a,Ug(l(Q(e,y3),88))?(a.e.aze(Ge((Sn(n,r.c.length),l(r.c[n],42)).b))&&ct((Sn(n,r.c.length),l(r.c[n],42)),a.e.a+a.f.a)):(a.e.bze(Ge((Sn(n,r.c.length),l(r.c[n],42)).b))&&ct((Sn(n,r.c.length),l(r.c[n],42)),a.e.b+a.f.b))}for(o=Rr(e.b,0);o.b!=o.d.c;)a=l(Br(o),40),n=l(Q(a,(Hc(),$d)),17).a,rt(a,(Qi(),c1),Ge((Sn(n,r.c.length),l(r.c[n],42)).a)),rt(a,k0,Ge((Sn(n,r.c.length),l(r.c[n],42)).b));t.Vg()}function jDn(e){var t,n,r,a,o,f,g,w,E,C,L,B,z,V,J;for(e.o=ze(Ge(Q(e.i,(Nt(),m3)))),e.f=ze(Ge(Q(e.i,vv))),e.j=e.i.b.c.length,g=e.j-1,B=0,e.k=0,e.n=0,e.b=O1(We(ro,dt,17,e.j,0,1)),e.c=O1(We(ta,dt,345,e.j,7,1)),f=new G(e.i.b);f.a0&&vt(e.q,C),vt(e.p,C);t-=r,z=w+t,E+=t*e.f,rf(e.b,g,pt(z)),rf(e.c,g,E),e.k=b.Math.max(e.k,z),e.n=b.Math.max(e.n,E),e.e+=t,t+=J}}function Ct(){Ct=U;var e;Pc=new wO(cL,0),Qn=new wO(nG,1),ar=new wO(yhe,2),Dr=new wO(xhe,3),er=new wO(khe,4),ed=(Cn(),new Ek((e=l(K0(Oo),9),new Zh(e,l(c0(e,e.length),9),0)))),_0=a2(rs(Qn,he(le(Oo,1),au,64,0,[]))),yf=a2(rs(ar,he(le(Oo,1),au,64,0,[]))),$h=a2(rs(Dr,he(le(Oo,1),au,64,0,[]))),Hf=a2(rs(er,he(le(Oo,1),au,64,0,[]))),hl=a2(rs(Qn,he(le(Oo,1),au,64,0,[Dr]))),Ju=a2(rs(ar,he(le(Oo,1),au,64,0,[er]))),A0=a2(rs(Qn,he(le(Oo,1),au,64,0,[er]))),zl=a2(rs(Qn,he(le(Oo,1),au,64,0,[ar]))),zh=a2(rs(Dr,he(le(Oo,1),au,64,0,[er]))),xf=a2(rs(ar,he(le(Oo,1),au,64,0,[Dr]))),ql=a2(rs(Qn,he(le(Oo,1),au,64,0,[ar,er]))),ll=a2(rs(ar,he(le(Oo,1),au,64,0,[Dr,er]))),fl=a2(rs(Qn,he(le(Oo,1),au,64,0,[Dr,er]))),_l=a2(rs(Qn,he(le(Oo,1),au,64,0,[ar,Dr]))),Du=a2(rs(Qn,he(le(Oo,1),au,64,0,[ar,Dr,er])))}function $Dn(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St;for(t.Ug(K3t,1),J=new bt,ot=new bt,E=new G(e.b);E.a0&&(Me-=z),Oke(f,Me),C=0,B=new G(f.a);B.a0),g.a.Xb(g.c=--g.b)),w=.4*r*C,!o&&g.b0&&(w=(Xn(0,t.length),t.charCodeAt(0)),w!=64)){if(w==37&&(L=t.lastIndexOf("%"),E=!1,L!=0&&(L==B-1||(E=(Xn(L+1,t.length),t.charCodeAt(L+1)==46))))){if(f=(Ga(1,L,t.length),t.substr(1,L-1)),Me=vn("%",f)?null:Vke(f),r=0,E)try{r=Oh((Xn(L+2,t.length+1),t.substr(L+2)),lo,Ii)}catch($e){throw $e=bs($e),De($e,130)?(g=$e,ue(new nV(g))):ue($e)}for(te=m7e(e.Gh());te.Ob();)if(V=MV(te),De(V,519)&&(a=l(V,598),Te=a.d,(Me==null?Te==null:vn(Me,Te))&&r--==0))return a;return null}if(C=t.lastIndexOf("."),z=C==-1?t:(Ga(0,C,t.length),t.substr(0,C)),n=0,C!=-1)try{n=Oh((Xn(C+1,t.length+1),t.substr(C+1)),lo,Ii)}catch($e){if($e=bs($e),De($e,130))z=t;else throw ue($e)}for(z=vn("%",z)?null:Vke(z),J=m7e(e.Gh());J.Ob();)if(V=MV(J),De(V,197)&&(o=l(V,197),fe=o.xe(),(z==null?fe==null:vn(z,fe))&&n--==0))return o;return null}return Bvt(e,t)}function WDn(e){var t,n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te;for(C=new Pr,w=new Cw,r=new G(e.a.a.b);r.at.d.c){if(z=e.c[t.a.d],te=e.c[L.a.d],z==te)continue;p0(s0(i0(a0(r0(new _f,1),100),z),te))}}}}}function YDn(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot;if(B=l(l($i(e.r,t),21),87),t==(Ct(),ar)||t==er){Vvt(e,t);return}for(o=t==Qn?(Pw(),rB):(Pw(),iB),$e=t==Qn?(ol(),a1):(ol(),w0),n=l(Qo(e.b,t),127),r=n.i,a=r.c+Y5(he(le(Na,1),Zo,28,15,[n.n.b,e.C.b,e.k])),fe=r.c+r.b-Y5(he(le(Na,1),Zo,28,15,[n.n.c,e.C.c,e.k])),f=i3e(y4e(o),e.t),Te=t==Qn?ia:gs,L=B.Kc();L.Ob();)E=l(L.Pb(),117),!(!E.c||E.c.d.c.length<=0)&&(te=E.b.Mf(),J=E.e,z=E.c,V=z.i,V.b=(w=z.n,z.e.a+w.b+w.c),V.a=(g=z.n,z.e.b+g.d+g.a),UO($e,yEe),z.f=$e,Z0(z,(Bl(),v0)),V.c=J.a-(V.b-te.a)/2,Ze=b.Math.min(a,J.a),ot=b.Math.max(fe,J.a+te.a),V.cot&&(V.c=ot-V.b),vt(f.d,new Dae(V,h8e(f,V))),Te=t==Qn?b.Math.max(Te,J.b+E.b.Mf().b):b.Math.min(Te,J.b));for(Te+=t==Qn?e.t:-e.t,Me=M8e((f.e=Te,f)),Me>0&&(l(Qo(e.b,t),127).a.b=Me),C=B.Kc();C.Ob();)E=l(C.Pb(),117),!(!E.c||E.c.d.c.length<=0)&&(V=E.c.i,V.c-=E.e.a,V.d-=E.e.b)}function XDn(e){var t,n,r,a,o,f,g,w,E,C,L,B,z;for(t=new Pr,w=new or(e);w.e!=w.i.gc();){for(g=l(gr(w),27),n=new Ks,ki(X0e,g,n),z=new Bp,a=l(yc(new bn(null,new vw(new hr(dr(sP(g).a.Kc(),new j)))),dst(z,Pl(new zr,new ht,new Fn,he(le(oc,1),it,108,0,[(Fl(),Ec)])))),85),Kht(n,l(a.xc((Hn(),!0)),16),new Y3),r=l(yc(Fi(l(a.xc(!1),15).Lc(),new $9),Pl(new zr,new ht,new Fn,he(le(oc,1),it,108,0,[Ec]))),15),f=r.Kc();f.Ob();)o=l(f.Pb(),74),B=Kgt(o),B&&(E=l(hc(zo(t.f,B)),21),E||(E=bbt(B),ju(t.f,B,E)),Ka(n,E));for(a=l(yc(new bn(null,new vw(new hr(dr(cp(g).a.Kc(),new j)))),dst(z,Pl(new zr,new ht,new Fn,he(le(oc,1),it,108,0,[Ec])))),85),Kht(n,l(a.xc(!0),16),new c5),r=l(yc(Fi(l(a.xc(!1),15).Lc(),new Eh),Pl(new zr,new ht,new Fn,he(le(oc,1),it,108,0,[Ec]))),15),L=r.Kc();L.Ob();)C=l(L.Pb(),74),B=Wgt(C),B&&(E=l(hc(zo(t.f,B)),21),E||(E=bbt(B),ju(t.f,B,E)),Ka(n,E))}}function QDn(e,t){ble();var n,r,a,o,f,g,w,E,C,L,B,z,V,J;if(w=iu(e,0)<0,w&&(e=r2(e)),iu(e,0)==0)switch(t){case 0:return"0";case 1:return sT;case 2:return"0.00";case 3:return"0.000";case 4:return"0.0000";case 5:return"0.00000";case 6:return"0.000000";default:return z=new tb,t<0?z.a+="0E+":z.a+="0E",z.a+=t==lo?"2147483648":""+-t,z.a}C=18,L=We(kf,Ad,28,C+1,15,1),n=C,J=e;do E=J,J=KN(J,10),L[--n]=Yr(bo(48,Df(E,mo(J,10))))&Zs;while(iu(J,0)!=0);if(a=Df(Df(Df(C,n),t),1),t==0)return w&&(L[--n]=45),If(L,n,C-n);if(t>0&&iu(a,-6)>=0){if(iu(a,0)>=0){for(o=n+Yr(a),g=C-1;g>=o;g--)L[g+1]=L[g];return L[++o]=46,w&&(L[--n]=45),If(L,n,C-n+1)}for(f=2;fse(f,bo(r2(a),1));f++)L[--n]=48;return L[--n]=46,L[--n]=48,w&&(L[--n]=45),If(L,n,C-n)}return V=n+1,r=C,B=new S5,w&&(B.a+="-"),r-V>=1?(hb(B,L[n]),B.a+=".",B.a+=If(L,n+1,C-n-1)):B.a+=If(L,n,C-n),B.a+="E",iu(a,0)>0&&(B.a+="+"),B.a+=""+Y_(a),B.a}function Gw(e,t,n,r,a){var o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot;if(te=new lt(e.g,e.f),J=a9e(e),J.a=b.Math.max(J.a,t),J.b=b.Math.max(J.b,n),ot=J.a/te.a,C=J.b/te.b,$e=J.a-te.a,w=J.b-te.b,r)for(f=ds(e)?l(at(ds(e),(pi(),xv)),88):l(at(e,(pi(),xv)),88),g=qe(at(e,(pi(),_M)))===qe((Ra(),Mu)),Te=new or((!e.c&&(e.c=new nt(Hl,e,9,9)),e.c));Te.e!=Te.i.gc();)switch(fe=l(gr(Te),123),Me=l(at(fe,s7),64),Me==(Ct(),Pc)&&(Me=Eke(fe,f),Hi(fe,s7,Me)),Me.g){case 1:g||Uu(fe,fe.i*ot);break;case 2:Uu(fe,fe.i+$e),g||Gu(fe,fe.j*C);break;case 3:g||Uu(fe,fe.i*ot),Gu(fe,fe.j+w);break;case 4:g||Gu(fe,fe.j*C)}if(F5(e,J.a,J.b),a)for(B=new or((!e.n&&(e.n=new nt(ec,e,1,7)),e.n));B.e!=B.i.gc();)L=l(gr(B),135),z=L.i+L.g/2,V=L.j+L.f/2,Ze=z/te.a,E=V/te.b,Ze+E>=1&&(Ze-E>0&&V>=0?(Uu(L,L.i+$e),Gu(L,L.j+w*E)):Ze-E<0&&z>=0&&(Uu(L,L.i+$e*Ze),Gu(L,L.j+w)));return Hi(e,(pi(),kv),(mh(),o=l(K0(BM),9),new Zh(o,l(c0(o,o.length),9),0))),new lt(ot,C)}function Qvt(e){sw(e,new Xm(Uz(nw(Zv(tw(ew(new x1,gf),"ELK Radial"),'A radial layout provider which is based on the algorithm of Peter Eades published in "Drawing free trees.", published by International Institute for Advanced Study of Social Information Science, Fujitsu Limited in 1991. The radial layouter takes a tree and places the nodes in radial order around the root. The nodes of the same tree level are placed on the same radius.'),new fu),gf))),gt(e,gf,_G,It(uCt)),gt(e,gf,Jy,It(lCt)),gt(e,gf,x6,It(sCt)),gt(e,gf,Px,It(aCt)),gt(e,gf,Nx,It(oCt)),gt(e,gf,fT,It(iCt)),gt(e,gf,fL,It(NIe)),gt(e,gf,dT,It(cCt)),gt(e,gf,Cfe,It(Jde)),gt(e,gf,Tfe,It(Zde)),gt(e,gf,NG,It(BIe)),gt(e,gf,Sfe,It(ege)),gt(e,gf,_fe,It(FIe)),gt(e,gf,MCe,It(RIe)),gt(e,gf,LCe,It(PIe)),gt(e,gf,CCe,It(qW)),gt(e,gf,SCe,It(HW)),gt(e,gf,_Ce,It(FB)),gt(e,gf,ACe,It(jIe)),gt(e,gf,TCe,It(OIe))}function KU(e){var t,n,r,a,o,f,g,w,E,C,L;if(e==null)throw ue(new gd(ul));if(E=e,o=e.length,w=!1,o>0&&(t=(Xn(0,e.length),e.charCodeAt(0)),(t==45||t==43)&&(e=(Xn(1,e.length+1),e.substr(1)),--o,w=t==45)),o==0)throw ue(new gd(Yw+E+'"'));for(;e.length>0&&(Xn(0,e.length),e.charCodeAt(0)==48);)e=(Xn(1,e.length+1),e.substr(1)),--o;if(o>(Amt(),b6t)[10])throw ue(new gd(Yw+E+'"'));for(a=0;a0&&(L=-parseInt((Ga(0,r,e.length),e.substr(0,r)),10),e=(Xn(r,e.length+1),e.substr(r)),o-=r,n=!1);o>=f;){if(r=parseInt((Ga(0,f,e.length),e.substr(0,f)),10),e=(Xn(f,e.length+1),e.substr(f)),o-=f,n)n=!1;else{if(iu(L,g)<0)throw ue(new gd(Yw+E+'"'));L=mo(L,C)}L=Df(L,r)}if(iu(L,0)>0)throw ue(new gd(Yw+E+'"'));if(!w&&(L=r2(L),iu(L,0)<0))throw ue(new gd(Yw+E+'"'));return L}function Vke(e){kle();var t,n,r,a,o,f,g,w;if(e==null)return null;if(a=pd(e,cl(37)),a<0)return e;for(w=new Th((Ga(0,a,e.length),e.substr(0,a))),t=We(Al,C6,28,4,15,1),g=0,r=0,f=e.length;aa+2&&mce((Xn(a+1,e.length),e.charCodeAt(a+1)),kPe,EPe)&&mce((Xn(a+2,e.length),e.charCodeAt(a+2)),kPe,EPe))if(n=vdn((Xn(a+1,e.length),e.charCodeAt(a+1)),(Xn(a+2,e.length),e.charCodeAt(a+2))),a+=2,r>0?(n&192)==128?t[g++]=n<<24>>24:r=0:n>=128&&((n&224)==192?(t[g++]=n<<24>>24,r=2):(n&240)==224?(t[g++]=n<<24>>24,r=3):(n&248)==240&&(t[g++]=n<<24>>24,r=4)),r>0){if(g==r){switch(g){case 2:{hb(w,((t[0]&31)<<6|t[1]&63)&Zs);break}case 3:{hb(w,((t[0]&15)<<12|(t[1]&63)<<6|t[2]&63)&Zs);break}}g=0,r=0}}else{for(o=0;o=2){if((!e.a&&(e.a=new nt(cs,e,6,6)),e.a).i==0)n=(rb(),a=new rk,a),qr((!e.a&&(e.a=new nt(cs,e,6,6)),e.a),n);else if((!e.a&&(e.a=new nt(cs,e,6,6)),e.a).i>1)for(B=new q8((!e.a&&(e.a=new nt(cs,e,6,6)),e.a));B.e!=B.i.gc();)jA(B);dP(t,l(Oe((!e.a&&(e.a=new nt(cs,e,6,6)),e.a),0),166))}if(L)for(r=new or((!e.a&&(e.a=new nt(cs,e,6,6)),e.a));r.e!=r.i.gc();)for(n=l(gr(r),166),E=new or((!n.a&&(n.a=new Ys(qh,n,5)),n.a));E.e!=E.i.gc();)w=l(gr(E),377),g.a=b.Math.max(g.a,w.a),g.b=b.Math.max(g.b,w.b);for(f=new or((!e.n&&(e.n=new nt(ec,e,1,7)),e.n));f.e!=f.i.gc();)o=l(gr(f),135),C=l(at(o,MM),8),C&&Qh(o,C.a,C.b),L&&(g.a=b.Math.max(g.a,o.i+o.g),g.b=b.Math.max(g.b,o.j+o.f));return g}function Zvt(e,t,n,r,a){var o,f,g;if(eht(e,t),f=t[0],o=co(n.c,0),g=-1,z7e(n))if(r>0){if(f+r>e.length)return!1;g=kU((Ga(0,f+r,e.length),e.substr(0,f+r)),t)}else g=kU(e,t);switch(o){case 71:return g=o6(e,f,he(le(zt,1),dt,2,6,[Rwt,jwt]),t),a.e=g,!0;case 77:return dSn(e,t,a,g,f);case 76:return gSn(e,t,a,g,f);case 69:return skn(e,t,f,a);case 99:return akn(e,t,f,a);case 97:return g=o6(e,f,he(le(zt,1),dt,2,6,["AM","PM"]),t),a.b=g,!0;case 121:return pSn(e,t,f,g,n,a);case 100:return g<=0?!1:(a.c=g,!0);case 83:return g<0?!1:x5n(g,f,t[0],a);case 104:g==12&&(g=0);case 75:case 72:return g<0?!1:(a.f=g,a.g=!1,!0);case 107:return g<0?!1:(a.f=g,a.g=!0,!0);case 109:return g<0?!1:(a.j=g,!0);case 115:return g<0?!1:(a.n=g,!0);case 90:if(fcn[w]&&(te=w),L=new G(e.a.b);L.a1;){if(a=aCn(t),L=o.g,V=l(at(t,vM),107),J=ze(Ge(at(t,KW))),(!t.a&&(t.a=new nt(Ai,t,10,11)),t.a).i>1&&ze(Ge(at(t,(ug(),cge))))!=gs&&(o.c+(V.b+V.c))/(o.b+(V.d+V.a))1&&ze(Ge(at(t,(ug(),oge))))!=gs&&(o.c+(V.b+V.c))/(o.b+(V.d+V.a))>J&&Hi(a,(ug(),T4),b.Math.max(ze(Ge(at(t,mM))),ze(Ge(at(a,T4)))-ze(Ge(at(t,oge))))),z=new Q3e(r,C),w=wwt(z,a,B),E=w.g,E>=L&&E==E){for(f=0;f<(!a.a&&(a.a=new nt(Ai,a,10,11)),a.a).i;f++)Gpt(e,l(Oe((!a.a&&(a.a=new nt(Ai,a,10,11)),a.a),f),27),l(Oe((!t.a&&(t.a=new nt(Ai,t,10,11)),t.a),f),27));Sht(t,z),l2n(o,w.c),u2n(o,w.b)}--g}Hi(t,(ug(),ZT),o.b),Hi(t,Zx,o.c),n.Vg()}function tIn(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te;for(t.Ug("Interactive node layering",1),n=new bt,B=new G(e.a);B.a=g){mr(Te.b>0),Te.a.Xb(Te.c=--Te.b);break}else te.a>w&&(r?(ra(r.b,te.b),r.a=b.Math.max(r.a,te.a),ph(Te)):(vt(te.b,C),te.c=b.Math.min(te.c,w),te.a=b.Math.max(te.a,g),r=te));r||(r=new GQe,r.c=w,r.a=g,by(Te,r),vt(r.b,C))}for(f=e.b,E=0,fe=new G(n);fe.az&&(o&&(ko(ot,B),ko(cn,pt(E.b-1))),oi=n.b,ws+=B+t,B=0,C=b.Math.max(C,n.b+n.c+ur)),Uu(g,oi),Gu(g,ws),C=b.Math.max(C,oi+ur+n.c),B=b.Math.max(B,L),oi+=ur+t;if(C=b.Math.max(C,r),jn=ws+B+n.a,jnDd,an=b.Math.abs(B.b-V.b)>Dd,(!n&&cn&&an||n&&(cn||an))&&ui(te.a,$e)),Ka(te.a,r),r.b==0?B=$e:B=(mr(r.b!=0),l(r.c.b.c,8)),z3n(z,L,J),Cft(a)==St&&(eo(St.i)!=a.a&&(J=new qa,n9e(J,eo(St.i),Te)),rt(te,Y1e,J)),E9n(z,te,Te),C.a.zc(z,C);po(te,Ze),Fa(te,St)}for(E=C.a.ec().Kc();E.Ob();)w=l(E.Pb(),18),po(w,null),Fa(w,null);t.Vg()}function iIn(e,t){var n,r,a,o,f,g,w,E,C,L,B;for(a=l(Q(e,(Hc(),y3)),88),C=a==(Js(),uc)||a==vc?Q1:vc,n=l(yc(Fi(new bn(null,new kn(e.b,16)),new pI),Pl(new zr,new ht,new Fn,he(le(oc,1),it,108,0,[(Fl(),Ec)]))),15),w=l(yc(fc(n.Oc(),new dXe(t)),Pl(new zr,new ht,new Fn,he(le(oc,1),it,108,0,[Ec]))),15),w.Gc(l(yc(fc(n.Oc(),new gXe(t)),Pl(new zr,new ht,new Fn,he(le(oc,1),it,108,0,[Ec]))),16)),w.jd(new pXe(C)),B=new Kp(new bXe(a)),r=new Pr,g=w.Kc();g.Ob();)f=l(g.Pb(),240),E=l(f.a,40),Rt(Bt(f.c))?(B.a.zc(E,(Hn(),Pb))==null,new ba(B.a.Zc(E,!1)).a.gc()>0&&ki(r,E,l(new ba(B.a.Zc(E,!1)).a.Vc(),40)),new ba(B.a.ad(E,!0)).a.gc()>1&&ki(r,L1t(B,E),E)):(new ba(B.a.Zc(E,!1)).a.gc()>0&&(o=l(new ba(B.a.Zc(E,!1)).a.Vc(),40),qe(o)===qe(hc(zo(r.f,E)))&&l(Q(E,(Qi(),Ode)),15).Fc(o)),new ba(B.a.ad(E,!0)).a.gc()>1&&(L=L1t(B,E),qe(hc(zo(r.f,L)))===qe(E)&&l(Q(L,(Qi(),Ode)),15).Fc(E)),B.a.Bc(E)!=null)}function ewt(e){var t,n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e;if(e.gc()==1)return l(e.Xb(0),235);if(e.gc()<=0)return new KH;for(a=e.Kc();a.Ob();){for(n=l(a.Pb(),235),V=0,C=Ii,L=Ii,w=lo,E=lo,z=new G(n.e);z.ag&&(Me=0,$e+=f+fe,f=0),D_n(J,n,Me,$e),t=b.Math.max(t,Me+te.a),f=b.Math.max(f,te.b),Me+=te.a+fe;return J}function sIn(e){kke();var t,n,r,a,o,f,g,w,E,C,L,B,z,V,J,te;if(e==null||(o=iV(e),V=O4n(o),V%4!=0))return null;if(J=V/4|0,J==0)return We(Al,C6,28,0,15,1);for(L=null,t=0,n=0,r=0,a=0,f=0,g=0,w=0,E=0,z=0,B=0,C=0,L=We(Al,C6,28,J*3,15,1);z>4)<<24>>24,L[B++]=((n&15)<<4|r>>2&15)<<24>>24,L[B++]=(r<<6|a)<<24>>24}return!eO(f=o[C++])||!eO(g=o[C++])?null:(t=nd[f],n=nd[g],w=o[C++],E=o[C++],nd[w]==-1||nd[E]==-1?w==61&&E==61?n&15?null:(te=We(Al,C6,28,z*3+1,15,1),pu(L,0,te,0,z*3),te[B]=(t<<2|n>>4)<<24>>24,te):w!=61&&E==61?(r=nd[w],r&3?null:(te=We(Al,C6,28,z*3+2,15,1),pu(L,0,te,0,z*3),te[B++]=(t<<2|n>>4)<<24>>24,te[B]=((n&15)<<4|r>>2&15)<<24>>24,te)):null:(r=nd[w],a=nd[E],L[B++]=(t<<2|n>>4)<<24>>24,L[B++]=((n&15)<<4|r>>2&15)<<24>>24,L[B++]=(r<<6|a)<<24>>24,L))}function aIn(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze;for(t.Ug(K3t,1),V=l(Q(e,(Nt(),bp)),223),a=new G(e.b);a.a=2){for(J=!0,B=new G(o.j),n=l(re(B),12),z=null;B.a0)if(r=L.gc(),E=ua(b.Math.floor((r+1)/2))-1,a=ua(b.Math.ceil((r+1)/2))-1,t.o==Y1)for(C=a;C>=E;C--)t.a[$e.p]==$e&&(J=l(L.Xb(C),42),V=l(J.a,10),!W0(n,J.b)&&z>e.b.e[V.p]&&(t.a[V.p]=$e,t.g[$e.p]=t.g[V.p],t.a[$e.p]=t.g[$e.p],t.f[t.g[$e.p].p]=(Hn(),!!(Rt(t.f[t.g[$e.p].p])&$e.k==(Zn(),Aa))),z=e.b.e[V.p]));else for(C=E;C<=a;C++)t.a[$e.p]==$e&&(fe=l(L.Xb(C),42),te=l(fe.a,10),!W0(n,fe.b)&&z0&&(a=l(jt(te.c.a,ot-1),10),f=e.i[a.p],cn=b.Math.ceil(j5(e.n,a,te)),o=Ze.a.e-te.d.d-(f.a.e+a.o.b+a.d.a)-cn),E=gs,ot0&&St.a.e.e-St.a.a-(St.b.e.e-St.b.a)<0,V=Me.a.e.e-Me.a.a-(Me.b.e.e-Me.b.a)<0&&St.a.e.e-St.a.a-(St.b.e.e-St.b.a)>0,z=Me.a.e.e+Me.b.aSt.b.e.e+St.a.a,$e=0,!J&&!V&&(B?o+L>0?$e=L:E-r>0&&($e=r):z&&(o+g>0?$e=g:E-Te>0&&($e=Te))),Ze.a.e+=$e,Ze.b&&(Ze.d.e+=$e),!1))}function nwt(e,t,n){var r,a,o,f,g,w,E,C,L,B;if(r=new ef(t.Lf().a,t.Lf().b,t.Mf().a,t.Mf().b),a=new $8,e.c)for(f=new G(t.Rf());f.aE&&(r.a+=Mnt(We(kf,Ad,28,-E,15,1))),r.a+="Is",pd(w,cl(32))>=0)for(a=0;a=r.o.b/2}else Te=!L;Te?(fe=l(Q(r,(ft(),Qx)),15),fe?B?o=fe:(a=l(Q(r,Gx),15),a?fe.gc()<=a.gc()?o=fe:o=a:(o=new bt,rt(r,Gx,o))):(o=new bt,rt(r,Qx,o))):(a=l(Q(r,(ft(),Gx)),15),a?L?o=a:(fe=l(Q(r,Qx),15),fe?a.gc()<=fe.gc()?o=a:o=fe:(o=new bt,rt(r,Qx,o))):(o=new bt,rt(r,Gx,o))),o.Fc(e),rt(e,(ft(),rW),n),t.d==n?(Fa(t,null),n.e.c.length+n.g.c.length==0&&Mc(n,null),Tyn(n)):(po(t,null),n.e.c.length+n.g.c.length==0&&Mc(n,null)),Ch(t.a)}function lIn(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St,cn,an,Bn,jn,ur,oi,ws;for(n.Ug("MinWidth layering",1),z=t.b,St=t.a,ws=l(Q(t,(Nt(),zMe)),17).a,g=l(Q(t,qMe),17).a,e.b=ze(Ge(Q(t,x0))),e.d=gs,$e=new G(St);$e.a<$e.c.c.length;)Te=l(re($e),10),Te.k==(Zn(),Ps)&&(Bn=Te.o.b,e.d=b.Math.min(e.d,Bn));for(e.d=b.Math.max(1,e.d),cn=St.c.length,e.c=We(Vr,di,28,cn,15,1),e.f=We(Vr,di,28,cn,15,1),e.e=We(Na,Zo,28,cn,15,1),E=0,e.a=0,Ze=new G(St);Ze.a0?(E=0,te&&(E+=g),E+=(an-1)*f,Me&&(E+=g),cn&&Me&&(E=b.Math.max(E,MCn(Me,f,Te,St))),E=e.a&&(r=GAn(e,Te),C=b.Math.max(C,r.b),$e=b.Math.max($e,r.d),vt(g,new ca(Te,r)));for(cn=new bt,E=0;E0),te.a.Xb(te.c=--te.b),an=new yu(e.b),by(te,an),mr(te.b0){for(B=C<100?null:new nb(C),E=new T7e(t),V=E.g,fe=We(Vr,di,28,C,15,1),r=0,$e=new Lw(C),a=0;a=0;)if(z!=null?Pi(z,V[w]):qe(z)===qe(V[w])){fe.length<=r&&(te=fe,fe=We(Vr,di,28,2*fe.length,15,1),pu(te,0,fe,0,r)),fe[r++]=a,qr($e,V[w]);break e}if(z=z,qe(z)===qe(g))break}}if(E=$e,V=$e.g,C=r,r>fe.length&&(te=fe,fe=We(Vr,di,28,r,15,1),pu(te,0,fe,0,r)),r>0){for(Me=!0,o=0;o=0;)vx(e,fe[f]);if(r!=C){for(a=C;--a>=r;)vx(E,a);te=fe,fe=We(Vr,di,28,r,15,1),pu(te,0,fe,0,r)}t=E}}}else for(t=_7n(e,t),a=e.i;--a>=0;)t.Hc(e.g[a])&&(vx(e,a),Me=!0);if(Me){if(fe!=null){for(n=t.gc(),L=n==1?rA(e,4,t.Kc().Pb(),null,fe[0],J):rA(e,6,t,fe,fe[0],J),B=n<100?null:new nb(n),a=t.Kc();a.Ob();)z=a.Pb(),B=d4e(e,l(z,76),B);B?(B.nj(L),B.oj()):Ni(e.e,L)}else{for(B=Ofn(t.gc()),a=t.Kc();a.Ob();)z=a.Pb(),B=d4e(e,l(z,76),B);B&&B.oj()}return!0}else return!1}function dIn(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me;for(n=new xdt(t),n.a||q_n(t),E=jSn(t),w=new Cw,te=new Ebt,J=new G(t.a);J.a0||n.o==Y1&&a=n}function pIn(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St,cn,an,Bn,jn,ur;for(Me=t,Te=new Cw,$e=new Cw,C=Aw(Me,fSe),r=new Mat(e,n,Te,$e),P9n(r.a,r.b,r.c,r.d,C),w=(St=Te.i,St||(Te.i=new q5(Te,Te.c))),an=w.Kc();an.Ob();)for(cn=l(an.Pb(),166),a=l($i(Te,cn),21),J=a.Kc();J.Ob();)if(V=J.Pb(),Ze=l(X5(e.d,V),166),Ze)g=(!cn.e&&(cn.e=new Ln(cs,cn,10,9)),cn.e),qr(g,Ze);else throw f=Yg(Me,Pd),B=y4t+V+x4t+f,z=B+kT,ue(new dd(z));for(E=(ot=$e.i,ot||($e.i=new q5($e,$e.c))),jn=E.Kc();jn.Ob();)for(Bn=l(jn.Pb(),166),o=l($i($e,Bn),21),fe=o.Kc();fe.Ob();)if(te=fe.Pb(),Ze=l(X5(e.d,te),166),Ze)L=(!Bn.g&&(Bn.g=new Ln(cs,Bn,9,10)),Bn.g),qr(L,Ze);else throw f=Yg(Me,Pd),B=y4t+te+x4t+f,z=B+kT,ue(new dd(z));!n.b&&(n.b=new Ln(_r,n,4,7)),n.b.i!=0&&(!n.c&&(n.c=new Ln(_r,n,5,8)),n.c.i!=0)&&(!n.b&&(n.b=new Ln(_r,n,4,7)),n.b.i<=1&&(!n.c&&(n.c=new Ln(_r,n,5,8)),n.c.i<=1))&&(!n.a&&(n.a=new nt(cs,n,6,6)),n.a).i==1&&(ur=l(Oe((!n.a&&(n.a=new nt(cs,n,6,6)),n.a),0),166),!aue(ur)&&!oue(ur)&&(wV(ur,l(Oe((!n.b&&(n.b=new Ln(_r,n,4,7)),n.b),0),84)),yV(ur,l(Oe((!n.c&&(n.c=new Ln(_r,n,5,8)),n.c),0),84))))}function bIn(e){var t,n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St,cn,an,Bn;for(Me=e.a,$e=0,Ze=Me.length;$e0?(L=l(jt(B.c.a,f-1),10),cn=j5(e.b,B,L),te=B.n.b-B.d.d-(L.n.b+L.o.b+L.d.a+cn)):te=B.n.b-B.d.d,E=b.Math.min(te,E),f1&&(f=b.Math.min(f,b.Math.abs(l(ff(g.a,1),8).b-C.b)))));else for(J=new G(t.j);J.aa&&(o=B.a-a,f=Ii,r.c.length=0,a=B.a),B.a>=a&&($n(r.c,g),g.a.b>1&&(f=b.Math.min(f,b.Math.abs(l(ff(g.a,g.a.b-2),8).b-B.b)))));if(r.c.length!=0&&o>t.o.a/2&&f>t.o.b/2){for(z=new gu,Mc(z,t),la(z,(Ct(),Qn)),z.n.a=t.o.a/2,fe=new gu,Mc(fe,t),la(fe,Dr),fe.n.a=t.o.a/2,fe.n.b=t.o.b,w=new G(r);w.a=E.b?po(g,fe):po(g,z)):(E=l(odn(g.a),8),te=g.a.b==0?I1(g.c):l(o0(g.a),8),te.b>=E.b?Fa(g,fe):Fa(g,z)),L=l(Q(g,(Nt(),cc)),75),L&&Ny(L,E,!0);t.n.a=a-t.o.a/2}}function vIn(e,t,n){var r,a,o,f,g,w,E,C,L,B;for(g=Rr(e.b,0);g.b!=g.d.c;)if(f=l(Br(g),40),!vn(f.c,DG))for(E=HEn(f,e),t==(Js(),uc)||t==vc?Vs(E,new ene):Vs(E,new tne),w=E.c.length,r=0;r=0?z=gx(g):z=BN(gx(g)),e.qf(VT,z)),E=new qa,B=!1,e.pf(p3)?(Fye(E,l(e.of(p3),8)),B=!0):Ahn(E,f.a/2,f.b/2),z.g){case 4:rt(C,Qu,(hf(),$b)),rt(C,sW,(Vm(),P6)),C.o.b=f.b,J<0&&(C.o.a=-J),la(L,(Ct(),ar)),B||(E.a=f.a),E.a-=f.a;break;case 2:rt(C,Qu,(hf(),d4)),rt(C,sW,(Vm(),FT)),C.o.b=f.b,J<0&&(C.o.a=-J),la(L,(Ct(),er)),B||(E.a=0);break;case 1:rt(C,hv,(ep(),F6)),C.o.a=f.a,J<0&&(C.o.b=-J),la(L,(Ct(),Dr)),B||(E.b=f.b),E.b-=f.b;break;case 3:rt(C,hv,(ep(),Ux)),C.o.a=f.a,J<0&&(C.o.b=-J),la(L,(Ct(),Qn)),B||(E.b=0)}if(Fye(L.n,E),rt(C,p3,E),t==Tv||t==Tg||t==Mu){if(V=0,t==Tv&&e.pf(k2))switch(z.g){case 1:case 2:V=l(e.of(k2),17).a;break;case 3:case 4:V=-l(e.of(k2),17).a}else switch(z.g){case 4:case 2:V=o.b,t==Tg&&(V/=a.b);break;case 1:case 3:V=o.a,t==Tg&&(V/=a.a)}rt(C,l3,V)}return rt(C,Wc,z),C}function wIn(){c3e();function e(r){var a=this;this.dispatch=function(o){var f=o.data;switch(f.cmd){case"algorithms":var g=L8e((Cn(),new $a(new gi(Qb.b))));r.postMessage({id:f.id,data:g});break;case"categories":var w=L8e((Cn(),new $a(new gi(Qb.c))));r.postMessage({id:f.id,data:w});break;case"options":var E=L8e((Cn(),new $a(new gi(Qb.d))));r.postMessage({id:f.id,data:E});break;case"register":kMn(f.algorithms),r.postMessage({id:f.id});break;case"layout":QAn(f.graph,f.layoutOptions||{},f.options||{}),r.postMessage({id:f.id,data:f.graph});break}},this.saveDispatch=function(o){try{a.dispatch(o)}catch(f){r.postMessage({id:o.data.id,error:f})}}}function t(r){var a=this;this.dispatcher=new e({postMessage:function(o){a.onmessage({data:o})}}),this.postMessage=function(o){setTimeout(function(){a.dispatcher.saveDispatch({data:o})},0)}}if(typeof document===ghe&&typeof self!==ghe){var n=new e(self);self.onmessage=n.saveDispatch}else typeof d!==ghe&&d.exports&&(Object.defineProperty(p,"__esModule",{value:!0}),d.exports={default:t,Worker:t})}function cwt(e,t,n){var r,a,o,f,g,w,E,C,L,B;for(C=new op(n),pc(C,t),rt(C,(ft(),zi),t),C.o.a=t.g,C.o.b=t.f,C.n.a=t.i,C.n.b=t.j,vt(n.a,C),ki(e.a,t,C),((!t.a&&(t.a=new nt(Ai,t,10,11)),t.a).i!=0||Rt(Bt(at(t,(Nt(),b4)))))&&rt(C,FLe,(Hn(),!0)),E=l(Q(n,Lu),21),L=l(Q(C,(Nt(),Ms)),101),L==(Ra(),Wb)?rt(C,Ms,Z1):L!=Z1&&E.Fc((Ho(),$T)),B=0,r=l(Q(n,Rh),88),w=new or((!t.c&&(t.c=new nt(Hl,t,9,9)),t.c));w.e!=w.i.gc();)g=l(gr(w),123),a=ds(t),(qe(at(a,yg))!==qe((Ed(),E2))||qe(at(a,dv))===qe((l2(),BT))||qe(at(a,dv))===qe((l2(),PT))||Rt(Bt(at(a,f3)))||qe(at(a,g4))!==qe((Km(),c4))||qe(at(a,zb))===qe((Nf(),v3))||qe(at(a,zb))===qe((Nf(),x4))||qe(at(a,pv))===qe((p2(),WT))||qe(at(a,pv))===qe((p2(),YT)))&&!Rt(Bt(at(t,fW)))&&Hi(g,Ki,pt(B++)),Rt(Bt(at(g,mv)))||LDn(e,g,C,E,r,L);for(f=new or((!t.n&&(t.n=new nt(ec,t,1,7)),t.n));f.e!=f.i.gc();)o=l(gr(f),135),!Rt(Bt(at(o,mv)))&&o.a&&vt(C.b,Oce(o));return Rt(Bt(Q(C,QL)))&&E.Fc((Ho(),eW)),Rt(Bt(Q(C,bW)))&&(E.Fc((Ho(),tW)),E.Fc(UL),rt(C,Ms,Z1)),C}function Lle(e,t,n,r,a,o,f){var g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St,cn,an,Bn,jn,ur,oi,ws;for(J=0,Bn=0,E=new G(e.b);E.aJ&&(o&&(ko(ot,z),ko(cn,pt(C.b-1)),vt(e.d,V),g.c.length=0),oi=n.b,ws+=z+t,z=0,L=b.Math.max(L,n.b+n.c+ur)),$n(g.c,w),ddt(w,oi,ws),L=b.Math.max(L,oi+ur+n.c),z=b.Math.max(z,B),oi+=ur+t,V=w;if(ra(e.a,g),vt(e.d,l(jt(g,g.c.length-1),163)),L=b.Math.max(L,r),jn=ws+z+n.a,jna.d.d+a.d.a?C.f.d=!0:(C.f.d=!0,C.f.a=!0))),r.b!=r.d.c&&(t=n);C&&(o=l(cr(e.f,f.d.i),60),t.bo.d.d+o.d.a?C.f.d=!0:(C.f.d=!0,C.f.a=!0))}for(g=new hr(dr(ka(z).a.Kc(),new j));jr(g);)f=l(xr(g),18),f.a.b!=0&&(t=l(o0(f.a),8),f.d.j==(Ct(),Qn)&&(te=new QA(t,new lt(t.a,a.d.d),a,f),te.f.a=!0,te.a=f.d,$n(J.c,te)),f.d.j==Dr&&(te=new QA(t,new lt(t.a,a.d.d+a.d.a),a,f),te.f.d=!0,te.a=f.d,$n(J.c,te)))}return J}function CIn(e,t,n){var r,a,o,f,g,w,E,C,L,B;for(w=new bt,L=t.length,f=$7e(n),E=0;E=V&&(Te>V&&(z.c.length=0,V=Te),$n(z.c,f));z.c.length!=0&&(B=l(jt(z,aU(t,z.c.length)),131),jn.a.Bc(B)!=null,B.s=J++,R9e(B,an,ot),z.c.length=0)}for($e=e.c.length+1,g=new G(e);g.aBn.s&&(ph(n),al(Bn.i,r),r.c>0&&(r.a=Bn,vt(Bn.t,r),r.b=St,vt(St.i,r)))}function uwt(e,t,n,r,a){var o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St,cn,an,Bn,jn;for(J=new Bu(t.b),$e=new Bu(t.b),B=new Bu(t.b),cn=new Bu(t.b),te=new Bu(t.b),St=Rr(t,0);St.b!=St.d.c;)for(Ze=l(Br(St),12),g=new G(Ze.g);g.a0,fe=Ze.g.c.length>0,E&&fe?$n(B.c,Ze):E?$n(J.c,Ze):fe&&$n($e.c,Ze);for(V=new G(J);V.aTe.nh()-E.b&&(B=Te.nh()-E.b),z>Te.oh()-E.d&&(z=Te.oh()-E.d),C0){for(Me=Rr(e.f,0);Me.b!=Me.d.c;)Te=l(Br(Me),10),Te.p+=B-e.e;r9e(e),Ch(e.f),J9e(e,r,z)}else{for(ui(e.f,z),z.p=r,e.e=b.Math.max(e.e,r),o=new hr(dr(ka(z).a.Kc(),new j));jr(o);)a=l(xr(o),18),!a.c.i.c&&a.c.i.k==(Zn(),cu)&&(ui(e.f,a.c.i),a.c.i.p=r-1);e.c=r}else r9e(e),Ch(e.f),r=0,jr(new hr(dr(ka(z).a.Kc(),new j)))?(B=0,B=vdt(B,z),r=B+2,J9e(e,r,z)):(ui(e.f,z),z.p=0,e.e=b.Math.max(e.e,0),e.b=l(jt(e.d.b,0),30),e.c=0);for(e.f.b==0||r9e(e),e.d.a.c.length=0,fe=new bt,E=new G(e.d.b);E.a=48&&t<=57){for(r=t-48;a=48&&t<=57;)if(r=r*10+t-48,r<0)throw ue(new ri(ai((Jr(),CSe))))}else throw ue(new ri(ai((Jr(),K4t))));if(n=r,t==44){if(a>=e.j)throw ue(new ri(ai((Jr(),Y4t))));if((t=co(e.i,a++))>=48&&t<=57){for(n=t-48;a=48&&t<=57;)if(n=n*10+t-48,n<0)throw ue(new ri(ai((Jr(),CSe))));if(r>n)throw ue(new ri(ai((Jr(),X4t))))}else n=-1}if(t!=125)throw ue(new ri(ai((Jr(),W4t))));e.bm(a)?(o=(Di(),Di(),new Ty(9,o)),e.d=a+1):(o=(Di(),Di(),new Ty(3,o)),e.d=a),o.Om(r),o.Nm(n),Li(e)}}return o}function DIn(e){var t,n,r,a,o;switch(n=l(Q(e,(ft(),Lu)),21),t=Oq(v8t),a=l(Q(e,(Nt(),p4)),346),a==(rp(),A2)&&Dh(t,w8t),Rt(Bt(Q(e,ide)))?fi(t,(uo(),y0),(vo(),d1e)):fi(t,(uo(),bu),(vo(),d1e)),Q(e,(QH(),kM))!=null&&Dh(t,y8t),(Rt(Bt(Q(e,RMe)))||Rt(Bt(Q(e,NMe))))&&yl(t,(uo(),mc),(vo(),OAe)),l(Q(e,Rh),88).g){case 2:case 3:case 4:yl(fi(t,(uo(),y0),(vo(),PAe)),mc,NAe)}switch(n.Hc((Ho(),eW))&&yl(fi(fi(t,(uo(),y0),(vo(),IAe)),_u,MAe),mc,DAe),qe(Q(e,zb))!==qe((Nf(),AW))&&fi(t,(uo(),bu),(vo(),XAe)),n.Hc(nW)&&(fi(t,(uo(),y0),(vo(),eLe)),fi(t,vg,JAe),fi(t,bu,ZAe)),qe(Q(e,lW))!==qe((zE(),VL))&&qe(Q(e,bp))!==qe((ip(),JB))&&yl(t,(uo(),mc),(vo(),VAe)),Rt(Bt(Q(e,BMe)))&&fi(t,(uo(),bu),(vo(),HAe)),Rt(Bt(Q(e,ede)))&&fi(t,(uo(),bu),(vo(),tLe)),VTn(e)&&(qe(Q(e,p4))===qe(A2)?r=l(Q(e,TB),299):r=l(Q(e,Z1e),299),o=r==(vE(),R1e)?(vo(),QAe):(vo(),iLe),fi(t,(uo(),_u),o)),l(Q(e,lDe),388).g){case 1:fi(t,(uo(),_u),(vo(),nLe));break;case 2:yl(fi(fi(t,(uo(),bu),(vo(),SAe)),_u,_Ae),mc,AAe)}return qe(Q(e,yg))!==qe((Ed(),E2))&&fi(t,(uo(),bu),(vo(),rLe)),t}function dwt(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me;if(Hu(e.a,t)){if(W0(l(cr(e.a,t),49),n))return 1}else ki(e.a,t,new Ks);if(Hu(e.a,n)){if(W0(l(cr(e.a,n),49),t))return-1}else ki(e.a,n,new Ks);if(Hu(e.e,t)){if(W0(l(cr(e.e,t),49),n))return-1}else ki(e.e,t,new Ks);if(Hu(e.e,n)){if(W0(l(cr(e.a,n),49),t))return 1}else ki(e.e,n,new Ks);if(e.c==(Ed(),yde)||!ns(t,(ft(),Ki))||!ns(n,(ft(),Ki))){for(L=null,E=new G(t.j);E.af?WE(e,t,n):WE(e,n,t),af?1:0}return r=l(Q(t,(ft(),Ki)),17).a,o=l(Q(n,Ki),17).a,r>o?WE(e,t,n):WE(e,n,t),ro?1:0}function Kw(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te;if(n==null)return null;if(e.a!=t.jk())throw ue(new Yn(yT+t.xe()+t3));if(De(t,469)){if(te=kSn(l(t,685),n),!te)throw ue(new Yn(zfe+n+"' is not a valid enumerator of '"+t.xe()+"'"));return te}switch(o2((El(),io),t).Nl()){case 2:{n=Tu(n,!1);break}case 3:{n=Tu(n,!0);break}}if(r=o2(io,t).Jl(),r)return r.jk().wi().ti(r,n);if(B=o2(io,t).Ll(),B){for(te=new bt,E=Tce(n),C=0,L=E.length;C1)for(V=new q8((!e.a&&(e.a=new nt(cs,e,6,6)),e.a));V.e!=V.i.gc();)jA(V);for(f=l(Oe((!e.a&&(e.a=new nt(cs,e,6,6)),e.a),0),166),te=oi,oi>Ze+$e?te=Ze+$e:oiot+J?fe=ot+J:wsZe-$e&&teot-J&&feoi+ur?cn=oi+ur:Zews+St?an=ws+St:otoi-ur&&cnws-St&&ann&&(B=n-1),z=P2+Jl(t,24)*MP*L-L/2,z<0?z=1:z>r&&(z=r-1),a=(rb(),w=new AS,w),dV(a,B),fV(a,z),qr((!f.a&&(f.a=new Ys(qh,f,5)),f.a),a)}function gwt(e){sw(e,new Xm(nw(Zv(tw(ew(new x1,th),"ELK Rectangle Packing"),"Algorithm for packing of unconnected boxes, i.e. graphs without edges. The given order of the boxes is always preserved and the main reading direction of the boxes is left to right. The algorithm is divided into two phases. One phase approximates the width in which the rectangles can be placed. The next phase places the rectangles in rows using the previously calculated width as bounding width and bundles rectangles with a similar height in blocks. A compaction step reduces the size of the drawing. Finally, the rectangles are expanded to fill their bounding box and eliminate empty unused spaces."),new c8))),gt(e,th,Ox,1.3),gt(e,th,hT,(Hn(),!1)),gt(e,th,Xw,iOe),gt(e,th,Jy,15),gt(e,th,SG,It(DCt)),gt(e,th,x6,It(NCt)),gt(e,th,Px,It(BCt)),gt(e,th,Nx,It(FCt)),gt(e,th,fT,It(OCt)),gt(e,th,fL,It(lge)),gt(e,th,dT,It(RCt)),gt(e,th,jCe,It(cOe)),gt(e,th,$Ce,It(oOe)),gt(e,th,RCe,It(fge)),gt(e,th,FCe,It(uOe)),gt(e,th,zCe,It(rOe)),gt(e,th,qCe,It(hge)),gt(e,th,HCe,It(nOe)),gt(e,th,VCe,It(aOe)),gt(e,th,hL,It(tOe)),gt(e,th,AG,It(ICt)),gt(e,th,PCe,It(jB)),gt(e,th,NCe,It(eOe)),gt(e,th,BCe,It($B)),gt(e,th,OCe,It(sOe))}function Dle(e,t){ble();var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St,cn,an,Bn,jn,ur,oi;if(cn=e.e,V=e.d,a=e.a,cn==0)switch(t){case 0:return"0";case 1:return sT;case 2:return"0.00";case 3:return"0.000";case 4:return"0.0000";case 5:return"0.00000";case 6:return"0.000000";default:return ot=new tb,t<0?ot.a+="0E+":ot.a+="0E",ot.a+=-t,ot.a}if(Me=V*10+1+7,$e=We(kf,Ad,28,Me+1,15,1),n=Me,V==1)if(g=a[0],g<0){oi=va(g,Vo);do J=oi,oi=KN(oi,10),$e[--n]=48+Yr(Df(J,mo(oi,10)))&Zs;while(iu(oi,0)!=0)}else{oi=g;do J=oi,oi=oi/10|0,$e[--n]=48+(J-oi*10)&Zs;while(oi!=0)}else{Bn=We(Vr,di,28,V,15,1),ur=V,pu(a,0,Bn,0,ur);e:for(;;){for(St=0,E=ur-1;E>=0;E--)jn=bo(l0(St,32),va(Bn[E],Vo)),fe=yxn(jn),Bn[E]=Yr(fe),St=Yr(bw(fe,32));Te=Yr(St),te=n;do $e[--n]=48+Te%10&Zs;while((Te=Te/10|0)!=0&&n!=0);for(r=9-te+n,w=0;w0;w++)$e[--n]=48;for(L=ur-1;Bn[L]==0;L--)if(L==0)break e;ur=L+1}for(;$e[n]==48;)++n}if(z=cn<0,f=Me-n-t-1,t==0)return z&&($e[--n]=45),If($e,n,Me-n);if(t>0&&f>=-6){if(f>=0){for(C=n+f,B=Me-1;B>=C;B--)$e[B+1]=$e[B];return $e[++C]=46,z&&($e[--n]=45),If($e,n,Me-n+1)}for(L=2;L<-f+1;L++)$e[--n]=48;return $e[--n]=46,$e[--n]=48,z&&($e[--n]=45),If($e,n,Me-n)}return an=n+1,o=Me,Ze=new S5,z&&(Ze.a+="-"),o-an>=1?(hb(Ze,$e[n]),Ze.a+=".",Ze.a+=If($e,n+1,Me-n-1)):Ze.a+=If($e,n,Me-n),Ze.a+="E",f>0&&(Ze.a+="+"),Ze.a+=""+f,Ze.a}function pwt(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot;switch(e.c=t,e.g=new Pr,n=(aw(),new Jv(e.c)),r=new e_(n),S8e(r),Me=ei(at(e.c,(YN(),AOe))),w=l(at(e.c,kge),324),Ze=l(at(e.c,Ege),437),f=l(at(e.c,COe),490),$e=l(at(e.c,xge),438),e.j=ze(Ge(at(e.c,JCt))),g=e.a,w.g){case 0:g=e.a;break;case 1:g=e.b;break;case 2:g=e.i;break;case 3:g=e.e;break;case 4:g=e.f;break;default:throw ue(new Yn(FG+(w.f!=null?w.f:""+w.g)))}if(e.d=new cot(g,Ze,f),rt(e.d,(pE(),jL),Bt(at(e.c,XCt))),e.d.c=Rt(Bt(at(e.c,SOe))),AH(e.c).i==0)return e.d;for(L=new or(AH(e.c));L.e!=L.i.gc();){for(C=l(gr(L),27),z=C.g/2,B=C.f/2,ot=new lt(C.i+z,C.j+B);Hu(e.g,ot);)dw(ot,(b.Math.random()-.5)*Dd,(b.Math.random()-.5)*Dd);J=l(at(C,(pi(),tC)),140),te=new kot(ot,new ef(ot.a-z-e.j/2-J.b,ot.b-B-e.j/2-J.d,C.g+e.j+(J.b+J.c),C.f+e.j+(J.d+J.a))),vt(e.d.i,te),ki(e.g,ot,new ca(te,C))}switch($e.g){case 0:if(Me==null)e.d.d=l(jt(e.d.i,0),68);else for(Te=new G(e.d.i);Te.a0?ur+1:1);for(f=new G(ot.g);f.a0?ur+1:1)}e.c[E]==0?ui(e.e,J):e.a[E]==0&&ui(e.f,J),++E}for(V=-1,z=1,L=new bt,e.d=l(Q(t,(ft(),Xx)),234);Hh>0;){for(;e.e.b!=0;)ws=l(kae(e.e),10),e.b[ws.p]=V--,pke(e,ws),--Hh;for(;e.f.b!=0;)Vl=l(kae(e.f),10),e.b[Vl.p]=z++,pke(e,Vl),--Hh;if(Hh>0){for(B=lo,Te=new G(Me);Te.a=B&&($e>B&&(L.c.length=0,B=$e),$n(L.c,J)));C=e.sg(L),e.b[C.p]=z++,pke(e,C),--Hh}}for(oi=Me.c.length+1,E=0;Ee.b[lc]&&(Uw(r,!0),rt(t,yB,(Hn(),!0)));e.a=null,e.c=null,e.b=null,Ch(e.f),Ch(e.e),n.Vg()}function bwt(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot;for(Ze=l(Oe((!e.a&&(e.a=new nt(cs,e,6,6)),e.a),0),166),C=new bl,$e=new Pr,ot=Cmt(Ze),ju($e.f,Ze,ot),B=new Pr,r=new os,V=rg(Lh(he(le(Fh,1),Rn,20,0,[(!t.d&&(t.d=new Ln(js,t,8,5)),t.d),(!t.e&&(t.e=new Ln(js,t,7,4)),t.e)])));jr(V);){if(z=l(xr(V),74),(!e.a&&(e.a=new nt(cs,e,6,6)),e.a).i!=1)throw ue(new Yn(n4t+(!e.a&&(e.a=new nt(cs,e,6,6)),e.a).i));z!=e&&(te=l(Oe((!z.a&&(z.a=new nt(cs,z,6,6)),z.a),0),166),Cs(r,te,r.c.b,r.c),J=l(hc(zo($e.f,te)),13),J||(J=Cmt(te),ju($e.f,te,J)),L=n?ma(new Eo(l(jt(ot,ot.c.length-1),8)),l(jt(J,J.c.length-1),8)):ma(new Eo((Sn(0,ot.c.length),l(ot.c[0],8))),(Sn(0,J.c.length),l(J.c[0],8))),ju(B.f,te,L))}if(r.b!=0)for(fe=l(jt(ot,n?ot.c.length-1:0),8),E=1;E1&&Cs(C,fe,C.c.b,C.c),Yoe(a)));fe=Te}return C}function mwt(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St,cn,an,Bn;for(n.Ug(myt,1),Bn=l(yc(Fi(new bn(null,new kn(t,16)),new one),Pl(new zr,new ht,new Fn,he(le(oc,1),it,108,0,[(Fl(),Ec)]))),15),C=l(yc(Fi(new bn(null,new kn(t,16)),new vXe(t)),Pl(new zr,new ht,new Fn,he(le(oc,1),it,108,0,[Ec]))),15),V=l(yc(Fi(new bn(null,new kn(t,16)),new mXe(t)),Pl(new zr,new ht,new Fn,he(le(oc,1),it,108,0,[Ec]))),15),J=We(PW,IG,40,t.gc(),0,1),f=0;f=0&&an=0&&!J[z]){J[z]=a,C.gd(g),--g;break}if(z=an-B,z=0&&!J[z]){J[z]=a,C.gd(g),--g;break}}for(V.jd(new cne),w=J.length-1;w>=0;w--)!J[w]&&!V.dc()&&(J[w]=l(V.Xb(0),40),V.gd(0));for(E=0;E=0;w--)ui(n,(Sn(w,f.c.length),l(f.c[w],8)));return n}function wwt(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e;for(Me=ze(Ge(at(t,(ug(),T4)))),z=ze(Ge(at(t,mM))),B=ze(Ge(at(t,UW))),v7e((!t.a&&(t.a=new nt(Ai,t,10,11)),t.a)),fe=uvt((!t.a&&(t.a=new nt(Ai,t,10,11)),t.a),Me,e.b),te=0;teB&&UN((Sn(B,t.c.length),l(t.c[B],186)),C),C=null;t.c.length>B&&(Sn(B,t.c.length),l(t.c[B],186)).a.c.length==0;)al(t,(Sn(B,t.c.length),t.c[B]));if(!C){--f;continue}if(!Rt(Bt(l(jt(C.b,0),27).of((z1(),$B))))&&tAn(t,V,o,C,te,n,B,r)){J=!0;continue}if(te){if(z=V.b,L=C.f,!Rt(Bt(l(jt(C.b,0),27).of($B)))&&wMn(t,V,o,C,n,B,r,a)){if(J=!0,z=e.j){e.a=-1,e.c=1;return}if(t=co(e.i,e.d++),e.a=t,e.b==1){switch(t){case 92:if(r=10,e.d>=e.j)throw ue(new ri(ai((Jr(),VG))));e.a=co(e.i,e.d++);break;case 45:(e.e&512)==512&&e.d=e.j||co(e.i,e.d)!=63)break;if(++e.d>=e.j)throw ue(new ri(ai((Jr(),e0e))));switch(t=co(e.i,e.d++),t){case 58:r=13;break;case 61:r=14;break;case 33:r=15;break;case 91:r=19;break;case 62:r=18;break;case 60:if(e.d>=e.j)throw ue(new ri(ai((Jr(),e0e))));if(t=co(e.i,e.d++),t==61)r=16;else if(t==33)r=17;else throw ue(new ri(ai((Jr(),L4t))));break;case 35:for(;e.d=e.j)throw ue(new ri(ai((Jr(),VG))));e.a=co(e.i,e.d++);break;default:r=0}e.c=r}function zIn(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te;if(n.Ug("Process compaction",1),!!Rt(Bt(Q(t,(Hc(),uIe))))){for(a=l(Q(t,y3),88),z=ze(Ge(Q(t,zde))),gLn(e,t,a),iIn(t,z/2/2),V=t.b,$m(V,new lXe(a)),E=Rr(V,0);E.b!=E.d.c;)if(w=l(Br(E),40),!Rt(Bt(Q(w,(Qi(),Vb))))){if(r=$Sn(w,a),J=PAn(w,t),L=0,B=0,r)switch(te=r.e,a.g){case 2:L=te.a-z-w.f.a,J.e.a-z-w.f.aL&&(L=J.e.a+J.f.a+z),B=L+w.f.a;break;case 4:L=te.b-z-w.f.b,J.e.b-z-w.f.bL&&(L=J.e.b+J.f.b+z),B=L+w.f.b}else if(J)switch(a.g){case 2:L=J.e.a-z-w.f.a,B=L+w.f.a;break;case 1:L=J.e.a+J.f.a+z,B=L+w.f.a;break;case 4:L=J.e.b-z-w.f.b,B=L+w.f.b;break;case 3:L=J.e.b+J.f.b+z,B=L+w.f.b}qe(Q(t,$de))===qe((xA(),OB))?(o=L,f=B,g=kE(Fi(new bn(null,new kn(e.a,16)),new ttt(o,f))),g.a!=null?a==(Js(),uc)||a==vc?w.e.a=L:w.e.b=L:(a==(Js(),uc)||a==wf?g=kE(Fi(Dht(new bn(null,new kn(e.a,16))),new hXe(o))):g=kE(Fi(Dht(new bn(null,new kn(e.a,16))),new fXe(o))),g.a!=null&&(a==uc||a==vc?w.e.a=ze(Ge((mr(g.a!=null),l(g.a,42)).a)):w.e.b=ze(Ge((mr(g.a!=null),l(g.a,42)).a)))),g.a!=null&&(C=gc(e.a,(mr(g.a!=null),g.a),0),C>0&&C!=l(Q(w,$d),17).a&&(rt(w,tIe,(Hn(),!0)),rt(w,$d,pt(C))))):a==(Js(),uc)||a==vc?w.e.a=L:w.e.b=L}n.Vg()}}function ywt(e){var t,n,r,a,o,f,g,w,E;for(e.b=1,Li(e),t=null,e.c==0&&e.a==94?(Li(e),t=(Di(),Di(),new _h(4)),Eu(t,0,TT),g=new _h(4)):g=(Di(),Di(),new _h(4)),a=!0;(E=e.c)!=1;){if(E==0&&e.a==93&&!a){t&&(nL(t,g),g=t);break}if(n=e.a,r=!1,E==10)switch(n){case 100:case 68:case 119:case 87:case 115:case 83:Ky(g,YE(n)),r=!0;break;case 105:case 73:case 99:case 67:n=(Ky(g,YE(n)),-1),n<0&&(r=!0);break;case 112:case 80:if(w=w9e(e,n),!w)throw ue(new ri(ai((Jr(),t0e))));Ky(g,w),r=!0;break;default:n=eke(e)}else if(E==24&&!a){if(t&&(nL(t,g),g=t),o=ywt(e),nL(g,o),e.c!=0||e.a!=93)throw ue(new ri(ai((Jr(),j4t))));break}if(Li(e),!r){if(E==0){if(n==91)throw ue(new ri(ai((Jr(),ESe))));if(n==93)throw ue(new ri(ai((Jr(),TSe))));if(n==45&&!a&&e.a!=93)throw ue(new ri(ai((Jr(),n0e))))}if(e.c!=0||e.a!=45||n==45&&a)Eu(g,n,n);else{if(Li(e),(E=e.c)==1)throw ue(new ri(ai((Jr(),UG))));if(E==0&&e.a==93)Eu(g,n,n),Eu(g,45,45);else{if(E==0&&e.a==93||E==24)throw ue(new ri(ai((Jr(),n0e))));if(f=e.a,E==0){if(f==91)throw ue(new ri(ai((Jr(),ESe))));if(f==93)throw ue(new ri(ai((Jr(),TSe))));if(f==45)throw ue(new ri(ai((Jr(),n0e))))}else E==10&&(f=eke(e));if(Li(e),n>f)throw ue(new ri(ai((Jr(),q4t))));Eu(g,n,f)}}}a=!1}if(e.c==1)throw ue(new ri(ai((Jr(),UG))));return c6(g),eL(g),e.b=0,Li(e),g}function qIn(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze;if(n.Ug("Coffman-Graham Layering",1),t.a.c.length==0){n.Vg();return}for(Ze=l(Q(t,(Nt(),$Me)),17).a,w=0,f=0,B=new G(t.a);B.a=Ze||!B5n(fe,r))&&(r=vat(t,C)),Va(fe,r),o=new hr(dr(ka(fe).a.Kc(),new j));jr(o);)a=l(xr(o),18),!e.a[a.p]&&(J=a.c.i,--e.e[J.p],e.e[J.p]==0&&K8($E(z,J),aT));for(E=C.c.length-1;E>=0;--E)vt(t.b,(Sn(E,C.c.length),l(C.c[E],30)));t.a.c.length=0,n.Vg()}function xwt(e,t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e;$e=!1;do for($e=!1,o=t?new br(e.a.b).a.gc()-2:1;t?o>=0:ol(Q(te,Ki),17).a)&&(Me=!1);if(Me){for(w=t?o+1:o-1,g=s6e(e.a,pt(w)),f=!1,Te=!0,r=!1,C=Rr(g,0);C.b!=C.d.c;)E=l(Br(C),10),ns(E,Ki)?E.p!=L.p&&(f=f|(t?l(Q(E,Ki),17).al(Q(L,Ki),17).a),Te=!1):!f&&Te&&E.k==(Zn(),cu)&&(r=!0,t?B=l(xr(new hr(dr(ka(E).a.Kc(),new j))),18).c.i:B=l(xr(new hr(dr(qs(E).a.Kc(),new j))),18).d.i,B==L&&(t?n=l(xr(new hr(dr(qs(E).a.Kc(),new j))),18).d.i:n=l(xr(new hr(dr(ka(E).a.Kc(),new j))),18).c.i,(t?l(dy(e.a,n),17).a-l(dy(e.a,B),17).a:l(dy(e.a,B),17).a-l(dy(e.a,n),17).a)<=2&&(Te=!1)));if(r&&Te&&(t?n=l(xr(new hr(dr(qs(L).a.Kc(),new j))),18).d.i:n=l(xr(new hr(dr(ka(L).a.Kc(),new j))),18).c.i,(t?l(dy(e.a,n),17).a-l(dy(e.a,L),17).a:l(dy(e.a,L),17).a-l(dy(e.a,n),17).a)<=2&&n.k==(Zn(),Ps)&&(Te=!1)),f||Te){for(J=J2t(e,L,t);J.a.gc()!=0;)V=l(J.a.ec().Kc().Pb(),10),J.a.Bc(V)!=null,Ka(J,J2t(e,V,t));--z,$e=!0}}}while($e)}function HIn(e){Wr(e.c,li,he(le(zt,1),dt,2,6,[ho,"http://www.w3.org/2001/XMLSchema#decimal"])),Wr(e.d,li,he(le(zt,1),dt,2,6,[ho,"http://www.w3.org/2001/XMLSchema#integer"])),Wr(e.e,li,he(le(zt,1),dt,2,6,[ho,"http://www.w3.org/2001/XMLSchema#boolean"])),Wr(e.f,li,he(le(zt,1),dt,2,6,[ho,"EBoolean",_i,"EBoolean:Object"])),Wr(e.i,li,he(le(zt,1),dt,2,6,[ho,"http://www.w3.org/2001/XMLSchema#byte"])),Wr(e.g,li,he(le(zt,1),dt,2,6,[ho,"http://www.w3.org/2001/XMLSchema#hexBinary"])),Wr(e.j,li,he(le(zt,1),dt,2,6,[ho,"EByte",_i,"EByte:Object"])),Wr(e.n,li,he(le(zt,1),dt,2,6,[ho,"EChar",_i,"EChar:Object"])),Wr(e.t,li,he(le(zt,1),dt,2,6,[ho,"http://www.w3.org/2001/XMLSchema#double"])),Wr(e.u,li,he(le(zt,1),dt,2,6,[ho,"EDouble",_i,"EDouble:Object"])),Wr(e.F,li,he(le(zt,1),dt,2,6,[ho,"http://www.w3.org/2001/XMLSchema#float"])),Wr(e.G,li,he(le(zt,1),dt,2,6,[ho,"EFloat",_i,"EFloat:Object"])),Wr(e.I,li,he(le(zt,1),dt,2,6,[ho,"http://www.w3.org/2001/XMLSchema#int"])),Wr(e.J,li,he(le(zt,1),dt,2,6,[ho,"EInt",_i,"EInt:Object"])),Wr(e.N,li,he(le(zt,1),dt,2,6,[ho,"http://www.w3.org/2001/XMLSchema#long"])),Wr(e.O,li,he(le(zt,1),dt,2,6,[ho,"ELong",_i,"ELong:Object"])),Wr(e.Z,li,he(le(zt,1),dt,2,6,[ho,"http://www.w3.org/2001/XMLSchema#short"])),Wr(e.$,li,he(le(zt,1),dt,2,6,[ho,"EShort",_i,"EShort:Object"])),Wr(e._,li,he(le(zt,1),dt,2,6,[ho,"http://www.w3.org/2001/XMLSchema#string"]))}function VIn(e,t,n,r,a,o,f){var g,w,E,C,L,B,z,V;return B=l(r.a,17).a,z=l(r.b,17).a,L=e.b,V=e.c,g=0,C=0,t==(Js(),uc)||t==vc?(C=fO(h1t(xy(fc(new bn(null,new kn(n.b,16)),new lne),new Yte))),L.e.b+L.f.b/2>C?(E=++z,g=ze(Ge(fh(vy(fc(new bn(null,new kn(n.b,16)),new itt(a,E)),new a$))))):(w=++B,g=ze(Ge(fh(Y8(fc(new bn(null,new kn(n.b,16)),new stt(a,w)),new Xte)))))):(C=fO(h1t(xy(fc(new bn(null,new kn(n.b,16)),new Zte),new s$))),L.e.a+L.f.a/2>C?(E=++z,g=ze(Ge(fh(vy(fc(new bn(null,new kn(n.b,16)),new ntt(a,E)),new Qte))))):(w=++B,g=ze(Ge(fh(Y8(fc(new bn(null,new kn(n.b,16)),new rtt(a,w)),new bI)))))),t==uc?(ko(e.a,new lt(ze(Ge(Q(L,(Qi(),c1))))-a,g)),ko(e.a,new lt(V.e.a+V.f.a+a+o,g)),ko(e.a,new lt(V.e.a+V.f.a+a+o,V.e.b+V.f.b/2)),ko(e.a,new lt(V.e.a+V.f.a,V.e.b+V.f.b/2))):t==vc?(ko(e.a,new lt(ze(Ge(Q(L,(Qi(),k0))))+a,L.e.b+L.f.b/2)),ko(e.a,new lt(L.e.a+L.f.a+a,g)),ko(e.a,new lt(V.e.a-a-o,g)),ko(e.a,new lt(V.e.a-a-o,V.e.b+V.f.b/2)),ko(e.a,new lt(V.e.a,V.e.b+V.f.b/2))):t==wf?(ko(e.a,new lt(g,ze(Ge(Q(L,(Qi(),c1))))-a)),ko(e.a,new lt(g,V.e.b+V.f.b+a+o)),ko(e.a,new lt(V.e.a+V.f.a/2,V.e.b+V.f.b+a+o)),ko(e.a,new lt(V.e.a+V.f.a/2,V.e.b+V.f.b+a))):(e.a.b==0||(l(o0(e.a),8).b=ze(Ge(Q(L,(Qi(),k0))))+a*l(f.b,17).a),ko(e.a,new lt(g,ze(Ge(Q(L,(Qi(),k0))))+a*l(f.b,17).a)),ko(e.a,new lt(g,V.e.b-a*l(f.a,17).a-o))),new ca(pt(B),pt(z))}function UIn(e){var t,n,r,a,o,f,g,w,E,C,L,B,z;if(f=!0,L=null,r=null,a=null,t=!1,z=P_t,E=null,o=null,g=0,w=Zce(e,g,TPe,CPe),w=0&&vn(e.substr(g,2),"//")?(g+=2,w=Zce(e,g,$M,zM),r=(Ga(g,w,e.length),e.substr(g,w-g)),g=w):L!=null&&(g==e.length||(Xn(g,e.length),e.charCodeAt(g)!=47))&&(f=!1,w=Lye(e,cl(35),g),w==-1&&(w=e.length),r=(Ga(g,w,e.length),e.substr(g,w-g)),g=w);if(!n&&g0&&co(C,C.length-1)==58&&(a=C,g=w)),gWue(o))&&(L=o);for(!L&&(L=(Sn(0,te.c.length),l(te.c[0],185))),J=new G(t.b);J.aL&&(jn=0,ur+=C+St,C=0),hmt(Ze,f,jn,ur),t=b.Math.max(t,jn+ot.a),C=b.Math.max(C,ot.b),jn+=ot.a+St;for($e=new Pr,n=new Pr,an=new G(e);an.a=-1900?1:0,n>=4?hi(e,he(le(zt,1),dt,2,6,[Rwt,jwt])[g]):hi(e,he(le(zt,1),dt,2,6,["BC","AD"])[g]);break;case 121:h6n(e,n,r);break;case 77:M_n(e,n,r);break;case 107:w=a.q.getHours(),w==0?ag(e,24,n):ag(e,w,n);break;case 83:HTn(e,n,a);break;case 69:C=r.q.getDay(),n==5?hi(e,he(le(zt,1),dt,2,6,["S","M","T","W","T","F","S"])[C]):n==4?hi(e,he(le(zt,1),dt,2,6,[Qle,Jle,Zle,ehe,the,nhe,rhe])[C]):hi(e,he(le(zt,1),dt,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"])[C]);break;case 97:a.q.getHours()>=12&&a.q.getHours()<24?hi(e,he(le(zt,1),dt,2,6,["AM","PM"])[1]):hi(e,he(le(zt,1),dt,2,6,["AM","PM"])[0]);break;case 104:L=a.q.getHours()%12,L==0?ag(e,12,n):ag(e,L,n);break;case 75:B=a.q.getHours()%12,ag(e,B,n);break;case 72:z=a.q.getHours(),ag(e,z,n);break;case 99:V=r.q.getDay(),n==5?hi(e,he(le(zt,1),dt,2,6,["S","M","T","W","T","F","S"])[V]):n==4?hi(e,he(le(zt,1),dt,2,6,[Qle,Jle,Zle,ehe,the,nhe,rhe])[V]):n==3?hi(e,he(le(zt,1),dt,2,6,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"])[V]):ag(e,V,1);break;case 76:J=r.q.getMonth(),n==5?hi(e,he(le(zt,1),dt,2,6,["J","F","M","A","M","J","J","A","S","O","N","D"])[J]):n==4?hi(e,he(le(zt,1),dt,2,6,[$le,zle,qle,Hle,_x,Vle,Ule,Gle,Kle,Wle,Yle,Xle])[J]):n==3?hi(e,he(le(zt,1),dt,2,6,["Jan","Feb","Mar","Apr",_x,"Jun","Jul","Aug","Sep","Oct","Nov","Dec"])[J]):ag(e,J+1,n);break;case 81:te=r.q.getMonth()/3|0,n<4?hi(e,he(le(zt,1),dt,2,6,["Q1","Q2","Q3","Q4"])[te]):hi(e,he(le(zt,1),dt,2,6,["1st quarter","2nd quarter","3rd quarter","4th quarter"])[te]);break;case 100:fe=r.q.getDate(),ag(e,fe,n);break;case 109:E=a.q.getMinutes(),ag(e,E,n);break;case 115:f=a.q.getSeconds(),ag(e,f,n);break;case 122:n<4?hi(e,o.c[0]):hi(e,o.c[1]);break;case 118:hi(e,o.b);break;case 90:n<3?hi(e,Bkn(o)):n==3?hi(e,zkn(o)):hi(e,qkn(o.a));break;default:return!1}return!0}function Wke(e,t,n,r){var a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St,cn,an,Bn,jn,ur,oi;if(emt(t),w=l(Oe((!t.b&&(t.b=new Ln(_r,t,4,7)),t.b),0),84),C=l(Oe((!t.c&&(t.c=new Ln(_r,t,5,8)),t.c),0),84),g=bc(w),E=bc(C),f=(!t.a&&(t.a=new nt(cs,t,6,6)),t.a).i==0?null:l(Oe((!t.a&&(t.a=new nt(cs,t,6,6)),t.a),0),166),St=l(cr(e.a,g),10),jn=l(cr(e.a,E),10),cn=null,ur=null,De(w,193)&&(ot=l(cr(e.a,w),305),De(ot,12)?cn=l(ot,12):De(ot,10)&&(St=l(ot,10),cn=l(jt(St.j,0),12))),De(C,193)&&(Bn=l(cr(e.a,C),305),De(Bn,12)?ur=l(Bn,12):De(Bn,10)&&(jn=l(Bn,10),ur=l(jt(jn.j,0),12))),!St||!jn)throw ue(new I8("The source or the target of edge "+t+" could not be found. This usually happens when an edge connects a node laid out by ELK Layered to a node in another level of hierarchy laid out by either another instance of ELK Layered or another layout algorithm alltogether. The former can be solved by setting the hierarchyHandling option to INCLUDE_CHILDREN."));for(J=new Tw,pc(J,t),rt(J,(ft(),zi),t),rt(J,(Nt(),cc),null),z=l(Q(r,Lu),21),St==jn&&z.Fc((Ho(),GL)),cn||(Ze=(qo(),zu),an=null,f&&P5(l(Q(St,Ms),101))&&(an=new lt(f.j,f.k),Vct(an,WO(t)),vut(an,n),Ly(E,g)&&(Ze=$l,Oi(an,St.n))),cn=tvt(St,an,Ze,r)),ur||(Ze=(qo(),$l),oi=null,f&&P5(l(Q(jn,Ms),101))&&(oi=new lt(f.b,f.c),Vct(oi,WO(t)),vut(oi,n)),ur=tvt(jn,oi,Ze,eo(jn))),po(J,cn),Fa(J,ur),(cn.e.c.length>1||cn.g.c.length>1||ur.e.c.length>1||ur.g.c.length>1)&&z.Fc((Ho(),UL)),B=new or((!t.n&&(t.n=new nt(ec,t,1,7)),t.n));B.e!=B.i.gc();)if(L=l(gr(B),135),!Rt(Bt(at(L,mv)))&&L.a)switch(te=Oce(L),vt(J.b,te),l(Q(te,jd),278).g){case 1:case 2:z.Fc((Ho(),jT));break;case 0:z.Fc((Ho(),RT)),rt(te,jd,(F1(),nC))}if(o=l(Q(r,JL),322),fe=l(Q(r,yW),323),a=o==(dA(),mB)||fe==(OA(),vde),f&&(!f.a&&(f.a=new Ys(qh,f,5)),f.a).i!=0&&a){for(Te=QN(f),V=new bl,$e=Rr(Te,0);$e.b!=$e.d.c;)Me=l(Br($e),8),ui(V,new Eo(Me));rt(J,qLe,V)}return J}function YIn(e,t,n,r){var a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St,cn,an,Bn,jn,ur,oi,ws;for(an=0,Bn=0,St=new Pr,Ze=l(fh(vy(fc(new bn(null,new kn(e.b,16)),new Jte),new sne)),17).a+1,cn=We(Vr,di,28,Ze,15,1),te=We(Vr,di,28,Ze,15,1),J=0;J1)for(g=ur+1;gE.b.e.b*(1-fe)+E.c.e.b*fe));V++);if(ot.gc()>0&&(oi=E.a.b==0?Ja(E.b.e):l(o0(E.a),8),Me=Oi(Ja(l(ot.Xb(ot.gc()-1),40).e),l(ot.Xb(ot.gc()-1),40).f),B=Oi(Ja(l(ot.Xb(0),40).e),l(ot.Xb(0),40).f),V>=ot.gc()-1&&oi.b>Me.b&&E.c.e.b>Me.b||V<=0&&oi.bE.b.e.a*(1-fe)+E.c.e.a*fe));V++);if(ot.gc()>0&&(oi=E.a.b==0?Ja(E.b.e):l(o0(E.a),8),Me=Oi(Ja(l(ot.Xb(ot.gc()-1),40).e),l(ot.Xb(ot.gc()-1),40).f),B=Oi(Ja(l(ot.Xb(0),40).e),l(ot.Xb(0),40).f),V>=ot.gc()-1&&oi.a>Me.a&&E.c.e.a>Me.a||V<=0&&oi.a=ze(Ge(Q(e,(Qi(),iIe))))&&++Bn):(z.f&&z.d.e.a<=ze(Ge(Q(e,(Qi(),Bde))))&&++an,z.g&&z.c.e.a+z.c.f.a>=ze(Ge(Q(e,(Qi(),rIe))))&&++Bn)}else $e==0?b9e(E):$e<0&&(++cn[ur],++te[ws],jn=VIn(E,t,e,new ca(pt(an),pt(Bn)),n,r,new ca(pt(te[ws]),pt(cn[ur]))),an=l(jn.a,17).a,Bn=l(jn.b,17).a)}function XIn(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te;if(r=t,w=n,e.b&&r.j==(Ct(),er)&&w.j==(Ct(),er)&&(Te=r,r=w,w=Te),Hu(e.a,r)){if(W0(l(cr(e.a,r),49),w))return 1}else ki(e.a,r,new Ks);if(Hu(e.a,w)){if(W0(l(cr(e.a,w),49),r))return-1}else ki(e.a,w,new Ks);if(Hu(e.d,r)){if(W0(l(cr(e.d,r),49),w))return-1}else ki(e.d,r,new Ks);if(Hu(e.d,w)){if(W0(l(cr(e.a,w),49),r))return 1}else ki(e.d,w,new Ks);if(r.j!=w.j)return fe=Rln(r.j,w.j),fe==-1?df(e,w,r):df(e,r,w),fe;if(r.e.c.length!=0&&w.e.c.length!=0){if(e.b&&(fe=j0t(r,w),fe!=0))return fe==-1?df(e,w,r):fe==1&&df(e,r,w),fe;if(o=l(jt(r.e,0),18).c.i,C=l(jt(w.e,0),18).c.i,o==C)return a=l(Q(l(jt(r.e,0),18),(ft(),Ki)),17).a,E=l(Q(l(jt(w.e,0),18),Ki),17).a,a>E?df(e,r,w):df(e,w,r),aE?1:0;for(V=e.c,J=0,te=V.length;JE?df(e,r,w):df(e,w,r),aE?1:0):e.b&&(fe=j0t(r,w),fe!=0)?(fe==-1?df(e,w,r):fe==1&&df(e,r,w),fe):(f=0,L=0,ns(l(jt(r.g,0),18),Ki)&&(f=l(Q(l(jt(r.g,0),18),Ki),17).a),ns(l(jt(w.g,0),18),Ki)&&(L=l(Q(l(jt(r.g,0),18),Ki),17).a),g&&g==B?Rt(Bt(Q(l(jt(r.g,0),18),W1)))&&!Rt(Bt(Q(l(jt(w.g,0),18),W1)))?(df(e,r,w),1):!Rt(Bt(Q(l(jt(r.g,0),18),W1)))&&Rt(Bt(Q(l(jt(w.g,0),18),W1)))?(df(e,w,r),-1):(f>L?df(e,r,w):df(e,w,r),fL?1:0):(e.f&&(e.f._b(g)&&(f=l(e.f.xc(g),17).a),e.f._b(B)&&(L=l(e.f.xc(B),17).a)),f>L?df(e,r,w):df(e,w,r),fL?1:0))):r.e.c.length!=0&&w.g.c.length!=0?(df(e,r,w),1):r.g.c.length!=0&&w.e.c.length!=0?(df(e,w,r),-1):ns(r,(ft(),Ki))&&ns(w,Ki)?(a=l(Q(r,Ki),17).a,E=l(Q(w,Ki),17).a,a>E?df(e,r,w):df(e,w,r),aE?1:0):(df(e,w,r),-1)}function QIn(e){e.gb||(e.gb=!0,e.b=qc(e,0),Ss(e.b,18),is(e.b,19),e.a=qc(e,1),Ss(e.a,1),is(e.a,2),is(e.a,3),is(e.a,4),is(e.a,5),e.o=qc(e,2),Ss(e.o,8),Ss(e.o,9),is(e.o,10),is(e.o,11),is(e.o,12),is(e.o,13),is(e.o,14),is(e.o,15),is(e.o,16),is(e.o,17),is(e.o,18),is(e.o,19),is(e.o,20),is(e.o,21),is(e.o,22),is(e.o,23),sc(e.o),sc(e.o),sc(e.o),sc(e.o),sc(e.o),sc(e.o),sc(e.o),sc(e.o),sc(e.o),sc(e.o),e.p=qc(e,3),Ss(e.p,2),Ss(e.p,3),Ss(e.p,4),Ss(e.p,5),is(e.p,6),is(e.p,7),sc(e.p),sc(e.p),e.q=qc(e,4),Ss(e.q,8),e.v=qc(e,5),is(e.v,9),sc(e.v),sc(e.v),sc(e.v),e.w=qc(e,6),Ss(e.w,2),Ss(e.w,3),Ss(e.w,4),is(e.w,5),e.B=qc(e,7),is(e.B,1),sc(e.B),sc(e.B),sc(e.B),e.Q=qc(e,8),is(e.Q,0),sc(e.Q),e.R=qc(e,9),Ss(e.R,1),e.S=qc(e,10),sc(e.S),sc(e.S),sc(e.S),sc(e.S),sc(e.S),sc(e.S),sc(e.S),sc(e.S),sc(e.S),sc(e.S),sc(e.S),sc(e.S),sc(e.S),sc(e.S),sc(e.S),e.T=qc(e,11),is(e.T,10),is(e.T,11),is(e.T,12),is(e.T,13),is(e.T,14),sc(e.T),sc(e.T),e.U=qc(e,12),Ss(e.U,2),Ss(e.U,3),is(e.U,4),is(e.U,5),is(e.U,6),is(e.U,7),sc(e.U),e.V=qc(e,13),is(e.V,10),e.W=qc(e,14),Ss(e.W,18),Ss(e.W,19),Ss(e.W,20),is(e.W,21),is(e.W,22),is(e.W,23),e.bb=qc(e,15),Ss(e.bb,10),Ss(e.bb,11),Ss(e.bb,12),Ss(e.bb,13),Ss(e.bb,14),Ss(e.bb,15),Ss(e.bb,16),is(e.bb,17),sc(e.bb),sc(e.bb),e.eb=qc(e,16),Ss(e.eb,2),Ss(e.eb,3),Ss(e.eb,4),Ss(e.eb,5),Ss(e.eb,6),Ss(e.eb,7),is(e.eb,8),is(e.eb,9),e.ab=qc(e,17),Ss(e.ab,0),Ss(e.ab,1),e.H=qc(e,18),is(e.H,0),is(e.H,1),is(e.H,2),is(e.H,3),is(e.H,4),is(e.H,5),sc(e.H),e.db=qc(e,19),is(e.db,2),e.c=Ti(e,20),e.d=Ti(e,21),e.e=Ti(e,22),e.f=Ti(e,23),e.i=Ti(e,24),e.g=Ti(e,25),e.j=Ti(e,26),e.k=Ti(e,27),e.n=Ti(e,28),e.r=Ti(e,29),e.s=Ti(e,30),e.t=Ti(e,31),e.u=Ti(e,32),e.fb=Ti(e,33),e.A=Ti(e,34),e.C=Ti(e,35),e.D=Ti(e,36),e.F=Ti(e,37),e.G=Ti(e,38),e.I=Ti(e,39),e.J=Ti(e,40),e.L=Ti(e,41),e.M=Ti(e,42),e.N=Ti(e,43),e.O=Ti(e,44),e.P=Ti(e,45),e.X=Ti(e,46),e.Y=Ti(e,47),e.Z=Ti(e,48),e.$=Ti(e,49),e._=Ti(e,50),e.cb=Ti(e,51),e.K=Ti(e,52))}function JIn(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St,cn,an,Bn,jn,ur;for(f=new os,ot=l(Q(n,(Nt(),Rh)),88),J=0,Ka(f,(!t.a&&(t.a=new nt(Ai,t,10,11)),t.a));f.b!=0;)C=l(f.b==0?null:(mr(f.b!=0),af(f,f.a.a)),27),E=ds(C),(qe(at(E,yg))!==qe((Ed(),E2))||qe(at(E,dv))===qe((l2(),BT))||qe(at(E,dv))===qe((l2(),PT))||Rt(Bt(at(E,f3)))||qe(at(E,g4))!==qe((Km(),c4))||qe(at(E,zb))===qe((Nf(),v3))||qe(at(E,zb))===qe((Nf(),x4))||qe(at(E,pv))===qe((p2(),WT))||qe(at(E,pv))===qe((p2(),YT)))&&!Rt(Bt(at(C,fW)))&&Hi(C,(ft(),Ki),pt(J++)),fe=!Rt(Bt(at(C,mv))),fe&&(B=(!C.a&&(C.a=new nt(Ai,C,10,11)),C.a).i!=0,V=_xn(C),z=qe(at(C,p4))===qe((rp(),A2)),ur=!P1(C,(pi(),eC))||Sut(ei(at(C,eC))),$e=null,ur&&z&&(B||V)&&($e=Pmt(C),rt($e,Rh,ot),ns($e,CB)&&NJe(new D8e(ze(Ge(Q($e,CB)))),$e),l(at(C,bv),181).gc()!=0&&(L=$e,Is(new bn(null,(!C.c&&(C.c=new nt(Hl,C,9,9)),new kn(C.c,16))),new zWe(L)),_bt(C,$e))),St=n,cn=l(cr(e.a,ds(C)),10),cn&&(St=cn.e),Me=cwt(e,C,St),$e&&(Me.e=$e,$e.e=Me,Ka(f,(!C.a&&(C.a=new nt(Ai,C,10,11)),C.a))));for(J=0,Cs(f,t,f.c.b,f.c);f.b!=0;){for(o=l(f.b==0?null:(mr(f.b!=0),af(f,f.a.a)),27),w=new or((!o.b&&(o.b=new nt(js,o,12,3)),o.b));w.e!=w.i.gc();)g=l(gr(w),74),emt(g),(qe(at(t,yg))!==qe((Ed(),E2))||qe(at(t,dv))===qe((l2(),BT))||qe(at(t,dv))===qe((l2(),PT))||Rt(Bt(at(t,f3)))||qe(at(t,g4))!==qe((Km(),c4))||qe(at(t,zb))===qe((Nf(),v3))||qe(at(t,zb))===qe((Nf(),x4))||qe(at(t,pv))===qe((p2(),WT))||qe(at(t,pv))===qe((p2(),YT)))&&Hi(g,(ft(),Ki),pt(J++)),Bn=bc(l(Oe((!g.b&&(g.b=new Ln(_r,g,4,7)),g.b),0),84)),jn=bc(l(Oe((!g.c&&(g.c=new Ln(_r,g,5,8)),g.c),0),84)),!(Rt(Bt(at(g,mv)))||Rt(Bt(at(Bn,mv)))||Rt(Bt(at(jn,mv))))&&(te=qw(g)&&Rt(Bt(at(Bn,b4)))&&Rt(Bt(at(g,gv))),Ze=o,te||Ly(jn,Bn)?Ze=Bn:Ly(Bn,jn)&&(Ze=jn),St=n,cn=l(cr(e.a,Ze),10),cn&&(St=cn.e),Te=Wke(e,g,Ze,St),rt(Te,(ft(),RLe),JCn(e,g,t,n)));if(z=qe(at(o,p4))===qe((rp(),A2)),z)for(a=new or((!o.a&&(o.a=new nt(Ai,o,10,11)),o.a));a.e!=a.i.gc();)r=l(gr(a),27),ur=!P1(r,(pi(),eC))||Sut(ei(at(r,eC))),an=qe(at(r,p4))===qe(A2),ur&&an&&Cs(f,r,f.c.b,f.c)}}function ft(){ft=U;var e,t;zi=new Ui(NEe),RLe=new Ui("coordinateOrigin"),K1e=new Ui("processors"),FLe=new vs("compoundNode",(Hn(),!1)),xB=new vs("insideConnections",!1),qLe=new Ui("originalBendpoints"),HLe=new Ui("originalDummyNodePosition"),VLe=new Ui("originalLabelEdge"),WL=new Ui("representedLabels"),KL=new Ui("endLabels"),Kx=new Ui("endLabel.origin"),Yx=new vs("labelSide",(Ih(),eF)),R6=new vs("maxEdgeThickness",0),W1=new vs("reversed",!1),Xx=new Ui(C3t),o1=new vs("longEdgeSource",null),$f=new vs("longEdgeTarget",null),f4=new vs("longEdgeHasLabelDummies",!1),kB=new vs("longEdgeBeforeLabelDummy",!1),sW=new vs("edgeConstraint",(Vm(),M1e)),u3=new Ui("inLayerLayoutUnit"),hv=new vs("inLayerConstraint",(ep(),wB)),Wx=new vs("inLayerSuccessorConstraint",new bt),zLe=new vs("inLayerSuccessorConstraintBetweenNonDummies",!1),jl=new Ui("portDummy"),iW=new vs("crossingHint",pt(0)),Lu=new vs("graphProperties",(t=l(K0(F1e),9),new Zh(t,l(c0(t,t.length),9),0))),Wc=new vs("externalPortSide",(Ct(),Pc)),$Le=new vs("externalPortSize",new qa),q1e=new Ui("externalPortReplacedDummies"),aW=new Ui("externalPortReplacedDummy"),pp=new vs("externalPortConnections",(e=l(K0(Oo),9),new Zh(e,l(c0(e,e.length),9),0))),l3=new vs(b3t,0),BLe=new Ui("barycenterAssociates"),Qx=new Ui("TopSideComments"),Gx=new Ui("BottomSideComments"),rW=new Ui("CommentConnectionPort"),V1e=new vs("inputCollect",!1),G1e=new vs("outputCollect",!1),yB=new vs("cyclic",!1),jLe=new Ui("crossHierarchyMap"),Y1e=new Ui("targetOffset"),new vs("splineLabelSize",new qa),$6=new Ui("spacings"),oW=new vs("partitionConstraint",!1),c3=new Ui("breakingPoint.info"),KLe=new Ui("splines.survivingEdge"),fv=new Ui("splines.route.start"),z6=new Ui("splines.edgeChain"),GLe=new Ui("originalPortConstraints"),h3=new Ui("selfLoopHolder"),zT=new Ui("splines.nsPortY"),Ki=new Ui("modelOrder"),U1e=new Ui("longEdgeTargetNode"),jb=new vs(Q3t,!1),j6=new vs(Q3t,!1),H1e=new Ui("layerConstraints.hiddenNodes"),ULe=new Ui("layerConstraints.opposidePort"),W1e=new Ui("targetNode.modelOrder")}function ZIn(e,t,n,r){var a,o,f,g,w,E,C,L,B,z,V;for(L=Rr(e.b,0);L.b!=L.d.c;)if(C=l(Br(L),40),!vn(C.c,DG))for(o=l(yc(new bn(null,new kn(cEn(C,e),16)),Pl(new zr,new ht,new Fn,he(le(oc,1),it,108,0,[(Fl(),Ec)]))),15),t==(Js(),uc)||t==vc?o.jd(new nne):o.jd(new o$),V=o.gc(),a=0;a0&&(g=l(o0(l(o.Xb(a),65).a),8).a,B=C.e.a+C.f.a/2,w=l(o0(l(o.Xb(a),65).a),8).b,z=C.e.b+C.f.b/2,r>0&&b.Math.abs(w-z)/(b.Math.abs(g-B)/40)>50&&(z>w?ko(l(o.Xb(a),65).a,new lt(C.e.a+C.f.a+r/5.3,C.e.b+C.f.b*f-r/2)):ko(l(o.Xb(a),65).a,new lt(C.e.a+C.f.a+r/5.3,C.e.b+C.f.b*f+r/2)))),ko(l(o.Xb(a),65).a,new lt(C.e.a+C.f.a,C.e.b+C.f.b*f))):t==vc?(E=ze(Ge(Q(C,(Qi(),c1)))),C.e.a-r>E?ko(l(o.Xb(a),65).a,new lt(E-n,C.e.b+C.f.b*f)):l(o.Xb(a),65).a.b>0&&(g=l(o0(l(o.Xb(a),65).a),8).a,B=C.e.a+C.f.a/2,w=l(o0(l(o.Xb(a),65).a),8).b,z=C.e.b+C.f.b/2,r>0&&b.Math.abs(w-z)/(b.Math.abs(g-B)/40)>50&&(z>w?ko(l(o.Xb(a),65).a,new lt(C.e.a-r/5.3,C.e.b+C.f.b*f-r/2)):ko(l(o.Xb(a),65).a,new lt(C.e.a-r/5.3,C.e.b+C.f.b*f+r/2)))),ko(l(o.Xb(a),65).a,new lt(C.e.a,C.e.b+C.f.b*f))):t==wf?(E=ze(Ge(Q(C,(Qi(),k0)))),C.e.b+C.f.b+r0&&(g=l(o0(l(o.Xb(a),65).a),8).a,B=C.e.a+C.f.a/2,w=l(o0(l(o.Xb(a),65).a),8).b,z=C.e.b+C.f.b/2,r>0&&b.Math.abs(g-B)/(b.Math.abs(w-z)/40)>50&&(B>g?ko(l(o.Xb(a),65).a,new lt(C.e.a+C.f.a*f-r/2,C.e.b+r/5.3+C.f.b)):ko(l(o.Xb(a),65).a,new lt(C.e.a+C.f.a*f+r/2,C.e.b+r/5.3+C.f.b)))),ko(l(o.Xb(a),65).a,new lt(C.e.a+C.f.a*f,C.e.b+C.f.b))):(E=ze(Ge(Q(C,(Qi(),c1)))),C0t(l(o.Xb(a),65),e)?ko(l(o.Xb(a),65).a,new lt(C.e.a+C.f.a*f,l(o0(l(o.Xb(a),65).a),8).b)):C.e.b-r>E?ko(l(o.Xb(a),65).a,new lt(C.e.a+C.f.a*f,E-n)):l(o.Xb(a),65).a.b>0&&(g=l(o0(l(o.Xb(a),65).a),8).a,B=C.e.a+C.f.a/2,w=l(o0(l(o.Xb(a),65).a),8).b,z=C.e.b+C.f.b/2,r>0&&b.Math.abs(g-B)/(b.Math.abs(w-z)/40)>50&&(B>g?ko(l(o.Xb(a),65).a,new lt(C.e.a+C.f.a*f-r/2,C.e.b-r/5.3)):ko(l(o.Xb(a),65).a,new lt(C.e.a+C.f.a*f+r/2,C.e.b-r/5.3)))),ko(l(o.Xb(a),65).a,new lt(C.e.a+C.f.a*f,C.e.b)))}function pi(){pi=U;var e,t;eC=new Ui(Byt),a7=new Ui(Fyt),eNe=(og(),Sge),ASt=new pn(qTe,eNe),Z6=new pn(Ox,null),LSt=new Ui(tSe),nNe=(Ym(),rs(Lge,he(le(Mge,1),it,298,0,[Age]))),UB=new pn(SG,nNe),GB=new pn(VP,(Hn(),!1)),rNe=(Js(),J1),xv=new pn(gfe,rNe),aNe=(ip(),Hge),sNe=new pn(HP,aNe),ISt=new pn(ZCe,!1),uNe=(rp(),oY),n7=new pn(CG,uNe),vNe=new lw(12),_2=new pn(Xw,vNe),WB=new pn(hL,!1),Nge=new pn(AG,!1),YB=new pn(fL,!1),ENe=(Ra(),Wb),_M=new pn(Nhe,ENe),n9=new Ui(_G),XB=new Ui(NP),zge=new Ui(oG),qge=new Ui(lL),lNe=new bl,x3=new pn(ZTe,lNe),DSt=new pn(nCe,!1),OSt=new pn(rCe,!1),hNe=new s_,tC=new pn(sCe,hNe),rY=new pn($Te,!1),FSt=new pn(Ryt,1),t7=new Ui(jyt),e7=new Ui($yt),AM=new pn(PP,!1),new pn(zyt,!0),pt(0),new pn(qyt,pt(100)),new pn(Hyt,!1),pt(0),new pn(Vyt,pt(4e3)),pt(0),new pn(Uyt,pt(400)),new pn(Gyt,!1),new pn(Kyt,!1),new pn(Wyt,!0),new pn(Yyt,!1),tNe=(VV(),Kge),MSt=new pn(eSe,tNe),RSt=new pn(LTe,10),jSt=new pn(MTe,10),_Ne=new pn(_he,20),$St=new pn(DTe,10),ANe=new pn(Ohe,2),LNe=new pn(dfe,10),MNe=new pn(ITe,0),iY=new pn(PTe,5),DNe=new pn(OTe,1),INe=new pn(NTe,1),Ev=new pn(Jy,20),zSt=new pn(BTe,10),PNe=new pn(FTe,10),r9=new Ui(RTe),NNe=new nnt,ONe=new pn(aCe,NNe),PSt=new Ui(bfe),wNe=!1,NSt=new pn(pfe,wNe),dNe=new lw(5),fNe=new pn(UTe,dNe),gNe=(qy(),t=l(K0(Ko),9),new Zh(t,l(c0(t,t.length),9),0)),r7=new pn(fT,gNe),xNe=(t6(),Kb),yNe=new pn(WTe,xNe),Bge=new Ui(YTe),Fge=new Ui(XTe),Rge=new Ui(QTe),Pge=new Ui(JTe),pNe=(e=l(K0(BM),9),new Zh(e,l(c0(e,e.length),9),0)),kv=new pn(x6,pNe),mNe=un((Zl(),aC)),Ub=new pn(Nx,mNe),bNe=new lt(0,0),i7=new pn(Px,bNe),C4=new pn(hT,!1),iNe=(F1(),nC),Ige=new pn(eCe,iNe),Dge=new pn(cG,!1),pt(1),new pn(Xyt,null),kNe=new Ui(iCe),jge=new Ui(tCe),SNe=(Ct(),Pc),s7=new pn(zTe,SNe),rh=new Ui(jTe),TNe=(Rl(),un(Yb)),S4=new pn(dT,TNe),$ge=new pn(GTe,!1),CNe=new pn(KTe,!0),aY=new pn(BP,1),BNe=new pn(nSe,null),QB=new pn(FP,150),sY=new pn(RP,1.414),i9=new pn(Qw,null),qSt=new pn(rSe,1),KB=new pn(HTe,!1),Oge=new pn(VTe,!1),oNe=new pn(Ahe,1),cNe=(vU(),Uge),new pn(Qyt,cNe),BSt=!0,VSt=(dx(),L4),USt=L4,HSt=L4}function vo(){vo=U,PAe=new Ws("DIRECTION_PREPROCESSOR",0),IAe=new Ws("COMMENT_PREPROCESSOR",1),D6=new Ws("EDGE_AND_LAYER_CONSTRAINT_EDGE_REVERSER",2),f1e=new Ws("INTERACTIVE_EXTERNAL_PORT_POSITIONER",3),eLe=new Ws("PARTITION_PREPROCESSOR",4),DK=new Ws("LABEL_DUMMY_INSERTER",5),zK=new Ws("SELF_LOOP_PREPROCESSOR",6),l4=new Ws("LAYER_CONSTRAINT_PREPROCESSOR",7),JAe=new Ws("PARTITION_MIDPROCESSOR",8),HAe=new Ws("HIGH_DEGREE_NODE_LAYER_PROCESSOR",9),XAe=new Ws("NODE_PROMOTION",10),u4=new Ws("LAYER_CONSTRAINT_POSTPROCESSOR",11),ZAe=new Ws("PARTITION_POSTPROCESSOR",12),$Ae=new Ws("HIERARCHICAL_PORT_CONSTRAINT_PROCESSOR",13),tLe=new Ws("SEMI_INTERACTIVE_CROSSMIN_PROCESSOR",14),SAe=new Ws("BREAKING_POINT_INSERTER",15),PK=new Ws("LONG_EDGE_SPLITTER",16),d1e=new Ws("PORT_SIDE_PROCESSOR",17),LK=new Ws("INVERTED_PORT_PROCESSOR",18),RK=new Ws("PORT_LIST_SORTER",19),rLe=new Ws("SORT_BY_INPUT_ORDER_OF_MODEL",20),FK=new Ws("NORTH_SOUTH_PORT_PREPROCESSOR",21),_Ae=new Ws("BREAKING_POINT_PROCESSOR",22),QAe=new Ws(H3t,23),iLe=new Ws(V3t,24),jK=new Ws("SELF_LOOP_PORT_RESTORER",25),nLe=new Ws("SINGLE_EDGE_GRAPH_WRAPPER",26),MK=new Ws("IN_LAYER_CONSTRAINT_PROCESSOR",27),FAe=new Ws("END_NODE_PORT_LABEL_MANAGEMENT_PROCESSOR",28),WAe=new Ws("LABEL_AND_NODE_SIZE_PROCESSOR",29),KAe=new Ws("INNERMOST_NODE_MARGIN_CALCULATOR",30),qK=new Ws("SELF_LOOP_ROUTER",31),MAe=new Ws("COMMENT_NODE_MARGIN_CALCULATOR",32),AK=new Ws("END_LABEL_PREPROCESSOR",33),OK=new Ws("LABEL_DUMMY_SWITCHER",34),LAe=new Ws("CENTER_LABEL_MANAGEMENT_PROCESSOR",35),LT=new Ws("LABEL_SIDE_SELECTOR",36),UAe=new Ws("HYPEREDGE_DUMMY_MERGER",37),zAe=new Ws("HIERARCHICAL_PORT_DUMMY_SIZE_PROCESSOR",38),YAe=new Ws("LAYER_SIZE_AND_GRAPH_HEIGHT_CALCULATOR",39),zL=new Ws("HIERARCHICAL_PORT_POSITION_PROCESSOR",40),OAe=new Ws("CONSTRAINTS_POSTPROCESSOR",41),DAe=new Ws("COMMENT_POSTPROCESSOR",42),GAe=new Ws("HYPERNODE_PROCESSOR",43),qAe=new Ws("HIERARCHICAL_PORT_ORTHOGONAL_EDGE_ROUTER",44),NK=new Ws("LONG_EDGE_JOINER",45),$K=new Ws("SELF_LOOP_POSTPROCESSOR",46),AAe=new Ws("BREAKING_POINT_REMOVER",47),BK=new Ws("NORTH_SOUTH_PORT_POSTPROCESSOR",48),VAe=new Ws("HORIZONTAL_COMPACTOR",49),IK=new Ws("LABEL_DUMMY_REMOVER",50),RAe=new Ws("FINAL_SPLINE_BENDPOINTS_CALCULATOR",51),BAe=new Ws("END_LABEL_SORTER",52),gB=new Ws("REVERSED_EDGE_RESTORER",53),_K=new Ws("END_LABEL_POSTPROCESSOR",54),jAe=new Ws("HIERARCHICAL_NODE_RESIZER",55),NAe=new Ws("DIRECTION_POSTPROCESSOR",56)}function Yke(){Yke=U,iMe=(pN(),XK),r9t=new pn(VEe,iMe),p9t=new pn(UEe,(Hn(),!1)),lMe=(zH(),z1e),y9t=new pn(fG,lMe),P9t=new pn(GEe,!1),B9t=new pn(KEe,!0),Lxt=new pn(WEe,!1),vMe=(dN(),kde),Q9t=new pn(YEe,vMe),pt(1),skt=new pn(XEe,pt(7)),akt=new pn(QEe,!1),b9t=new pn(JEe,!1),rMe=(l2(),A1e),n9t=new pn(zhe,rMe),dMe=(p2(),gde),N9t=new pn(qP,dMe),hMe=(hf(),EB),S9t=new pn(ZEe,hMe),pt(-1),C9t=new pn(eTe,null),pt(-1),_9t=new pn(tTe,pt(-1)),pt(-1),A9t=new pn(qhe,pt(4)),pt(-1),M9t=new pn(Hhe,pt(2)),fMe=(Nf(),AW),O9t=new pn(Vhe,fMe),pt(0),I9t=new pn(Uhe,pt(0)),E9t=new pn(Ghe,pt(Ii)),nMe=(dA(),HL),t9t=new pn(pL,nMe),$xt=new pn(nTe,!1),Kxt=new pn(Khe,.1),Zxt=new pn(Whe,!1),Yxt=new pn(rTe,null),Xxt=new pn(iTe,null),pt(-1),Qxt=new pn(sTe,null),pt(-1),Jxt=new pn(aTe,pt(-1)),pt(0),zxt=new pn(oTe,pt(40)),tMe=(vE(),j1e),Uxt=new pn(Yhe,tMe),eMe=vB,qxt=new pn(dG,eMe),mMe=(OA(),rM),X9t=new pn(k6,mMe),z9t=new Ui(gG),gMe=(cN(),JK),F9t=new pn(Xhe,gMe),pMe=(WN(),ZK),j9t=new pn(Qhe,pMe),V9t=new pn(Jhe,.3),G9t=new Ui(Zhe),bMe=(By(),_W),K9t=new pn(efe,bMe),oMe=(LV(),Tde),c9t=new pn(cTe,oMe),cMe=(yA(),Sde),u9t=new pn(uTe,cMe),uMe=(SE(),aM),l9t=new pn(pG,uMe),f9t=new pn(bG,.2),a9t=new pn(tfe,2),tkt=new pn(lTe,null),rkt=new pn(hTe,10),nkt=new pn(fTe,10),ikt=new pn(dTe,20),pt(0),J9t=new pn(gTe,pt(0)),pt(0),Z9t=new pn(pTe,pt(0)),pt(0),ekt=new pn(bTe,pt(0)),Mxt=new pn(nfe,!1),XLe=(zE(),VL),Ixt=new pn(mTe,XLe),YLe=(JH(),S1e),Dxt=new pn(vTe,YLe),v9t=new pn(mG,!1),pt(0),m9t=new pn(rfe,pt(16)),pt(0),w9t=new pn(ife,pt(5)),xMe=(OV(),Lde),Skt=new pn(fp,xMe),okt=new pn(vG,10),lkt=new pn(wG,1),yMe=(pV(),YK),mkt=new pn(bL,yMe),dkt=new Ui(sfe),wMe=pt(1),pt(0),pkt=new pn(afe,wMe),kMe=(gV(),Ade),Mkt=new pn(yG,kMe),_kt=new Ui(xG),kkt=new pn(kG,!0),ykt=new pn(EG,2),Tkt=new pn(ofe,!0),aMe=(yU(),QK),s9t=new pn(wTe,aMe),sMe=(yx(),OT),i9t=new pn(yTe,sMe),ZLe=(Ed(),E2),jxt=new pn(TG,ZLe),Rxt=new pn(xTe,!1),Fxt=new pn(kTe,!1),QLe=(Km(),c4),Oxt=new pn(cfe,QLe),JLe=(EA(),pde),Bxt=new pn(ETe,JLe),Nxt=new pn(ufe,0),Pxt=new pn(lfe,0),k9t=L1e,x9t=mB,L9t=CW,D9t=CW,T9t=dde,Wxt=(rp(),A2),e9t=HL,Gxt=HL,Hxt=HL,Vxt=A2,q9t=iM,H9t=rM,R9t=rM,$9t=rM,U9t=wde,Y9t=iM,W9t=iM,h9t=(ip(),s9),d9t=s9,g9t=aM,o9t=JB,ckt=XT,ukt=k4,hkt=XT,fkt=k4,vkt=XT,wkt=k4,gkt=_1e,bkt=YK,Dkt=XT,Ikt=k4,Akt=XT,Lkt=k4,Ekt=k4,xkt=k4,Ckt=k4}function eOn(e,t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St,cn,an,Bn,jn,ur,oi,ws,Vl,lc,Hh,f7,P2,L0,M0,_v,h9,rm,f9,qd,_g,S3,d9,d7,Hd,Av,yp,IAt,sBe,_3,YM,lpe,g9,XM,F4,QM,hpe,OAt;for(sBe=0,oi=t,lc=0,P2=oi.length;lc0&&(e.a[qd.p]=sBe++)}for(XM=0,ws=n,Hh=0,L0=ws.length;Hh0;){for(qd=(mr(d7.b>0),l(d7.a.Xb(d7.c=--d7.b),12)),d9=0,g=new G(qd.e);g.a0&&(qd.j==(Ct(),Qn)?(e.a[qd.p]=XM,++XM):(e.a[qd.p]=XM+M0+h9,++h9))}XM+=h9}for(S3=new Pr,V=new bd,ur=t,Vl=0,f7=ur.length;VlE.b&&(E.b=Hd)):qd.i.c==IAt&&(HdE.c&&(E.c=Hd));for(nE(J,0,J.length,null),g9=We(Vr,di,28,J.length,15,1),r=We(Vr,di,28,XM+1,15,1),fe=0;fe0;)St%2>0&&(a+=hpe[St+1]),St=(St-1)/2|0,++hpe[St];for(an=We(MEt,Rn,374,J.length*2,0,1),$e=0;$e0&&GO(Vl.f),at(fe,BNe)!=null&&(g=l(at(fe,BNe),347),S3=g.Tg(fe),F5(fe,b.Math.max(fe.g,S3.a),b.Math.max(fe.f,S3.b)));if(L0=l(at(t,_2),107),z=t.g-(L0.b+L0.c),B=t.f-(L0.d+L0.a),Hd.bh("Available Child Area: ("+z+"|"+B+")"),Hi(t,Z6,z/B),sdt(t,a,r.eh(f7)),l(at(t,i9),280)==dY&&(Uke(t),F5(t,L0.b+ze(Ge(at(t,t7)))+L0.c,L0.d+ze(Ge(at(t,e7)))+L0.a)),Hd.bh("Executed layout algorithm: "+ei(at(t,eC))+" on node "+t.k),l(at(t,i9),280)==L4){if(z<0||B<0)throw ue(new Vp("The size defined by the parent parallel node is too small for the space provided by the paddings of the child hierarchical node. "+t.k));for(P1(t,t7)||P1(t,e7)||Uke(t),J=ze(Ge(at(t,t7))),V=ze(Ge(at(t,e7))),Hd.bh("Desired Child Area: ("+J+"|"+V+")"),_v=z/J,h9=B/V,M0=b.Math.min(_v,b.Math.min(h9,ze(Ge(at(t,qSt))))),Hi(t,aY,M0),Hd.bh(t.k+" -- Local Scale Factor (X|Y): ("+_v+"|"+h9+")"),$e=l(at(t,UB),21),o=0,f=0,M0<_v&&($e.Hc((Ym(),EM))?o=(z/2-J*M0/2)/M0:$e.Hc(TM)&&(o=(z-J*M0)/M0)),M0'?":vn(L4t,e)?"'(?<' or '(? toIndex: ",fEe=", toIndex: ",dEe="Index: ",gEe=", Size: ",oT="org.eclipse.elk.alg.common",ii={50:1},Jwt="org.eclipse.elk.alg.common.compaction",Zwt="Scanline/EventHandler",gg="org.eclipse.elk.alg.common.compaction.oned",e3t="CNode belongs to another CGroup.",t3t="ISpacingsHandler/1",phe="The ",bhe=" instance has been finished already.",n3t="The direction ",r3t=" is not supported by the CGraph instance.",i3t="OneDimensionalCompactor",s3t="OneDimensionalCompactor/lambda$0$Type",a3t="Quadruplet",o3t="ScanlineConstraintCalculator",c3t="ScanlineConstraintCalculator/ConstraintsScanlineHandler",u3t="ScanlineConstraintCalculator/ConstraintsScanlineHandler/lambda$0$Type",l3t="ScanlineConstraintCalculator/Timestamp",h3t="ScanlineConstraintCalculator/lambda$0$Type",Ld={178:1,46:1},mhe="org.eclipse.elk.alg.common.compaction.options",Nc="org.eclipse.elk.core.data",pEe="org.eclipse.elk.polyomino.traversalStrategy",bEe="org.eclipse.elk.polyomino.lowLevelSort",mEe="org.eclipse.elk.polyomino.highLevelSort",vEe="org.eclipse.elk.polyomino.fill",Pf={134:1},vhe="polyomino",oL="org.eclipse.elk.alg.common.networksimplex",pg={183:1,3:1,4:1},f3t="org.eclipse.elk.alg.common.nodespacing",ev="org.eclipse.elk.alg.common.nodespacing.cellsystem",cT="CENTER",d3t={217:1,336:1},wEe={3:1,4:1,5:1,603:1},Mx="LEFT",Dx="RIGHT",yEe="Vertical alignment cannot be null",xEe="BOTTOM",tG="org.eclipse.elk.alg.common.nodespacing.internal",cL="UNDEFINED",H1=.01,DP="org.eclipse.elk.alg.common.nodespacing.internal.algorithm",g3t="LabelPlacer/lambda$0$Type",p3t="LabelPlacer/lambda$1$Type",b3t="portRatioOrPosition",uT="org.eclipse.elk.alg.common.overlaps",whe="DOWN",Md="org.eclipse.elk.alg.common.polyomino",nG="NORTH",yhe="EAST",xhe="SOUTH",khe="WEST",rG="org.eclipse.elk.alg.common.polyomino.structures",kEe="Direction",Ehe="Grid is only of size ",The=". Requested point (",Che=") is out of bounds.",iG=" Given center based coordinates were (",IP="org.eclipse.elk.graph.properties",m3t="IPropertyHolder",EEe={3:1,96:1,137:1},Ix="org.eclipse.elk.alg.common.spore",v3t="org.eclipse.elk.alg.common.utils",tv={205:1},v6="org.eclipse.elk.core",w3t="Connected Components Compaction",y3t="org.eclipse.elk.alg.disco",sG="org.eclipse.elk.alg.disco.graph",She="org.eclipse.elk.alg.disco.options",TEe="CompactionStrategy",CEe="org.eclipse.elk.disco.componentCompaction.strategy",SEe="org.eclipse.elk.disco.componentCompaction.componentLayoutAlgorithm",_Ee="org.eclipse.elk.disco.debug.discoGraph",AEe="org.eclipse.elk.disco.debug.discoPolys",x3t="componentCompaction",nv="org.eclipse.elk.disco",_he="org.eclipse.elk.spacing.componentComponent",Ahe="org.eclipse.elk.edge.thickness",Ox="org.eclipse.elk.aspectRatio",Xw="org.eclipse.elk.padding",w6="org.eclipse.elk.alg.disco.transform",Lhe=1.5707963267948966,y6=17976931348623157e292,Qy={3:1,4:1,5:1,198:1},k3t={3:1,6:1,4:1,5:1,100:1,115:1},Mhe="org.eclipse.elk.alg.force",LEe="ComponentsProcessor",E3t="ComponentsProcessor/1",MEe="ElkGraphImporter/lambda$0$Type",OP="org.eclipse.elk.alg.force.graph",T3t="Component Layout",DEe="org.eclipse.elk.alg.force.model",aG="org.eclipse.elk.force.model",IEe="org.eclipse.elk.force.iterations",OEe="org.eclipse.elk.force.repulsivePower",Dhe="org.eclipse.elk.force.temperature",Dd=.001,Ihe="org.eclipse.elk.force.repulsion",uL="org.eclipse.elk.alg.force.options",lT=1.600000023841858,Yu="org.eclipse.elk.force",NP="org.eclipse.elk.priority",Jy="org.eclipse.elk.spacing.nodeNode",Ohe="org.eclipse.elk.spacing.edgeLabel",oG="org.eclipse.elk.randomSeed",lL="org.eclipse.elk.separateConnectedComponents",hL="org.eclipse.elk.interactive",Nhe="org.eclipse.elk.portConstraints",cG="org.eclipse.elk.edgeLabels.inline",fL="org.eclipse.elk.omitNodeMicroLayout",hT="org.eclipse.elk.nodeSize.fixedGraphSize",Nx="org.eclipse.elk.nodeSize.options",x6="org.eclipse.elk.nodeSize.constraints",fT="org.eclipse.elk.nodeLabels.placement",dT="org.eclipse.elk.portLabels.placement",PP="org.eclipse.elk.topdownLayout",BP="org.eclipse.elk.topdown.scaleFactor",FP="org.eclipse.elk.topdown.hierarchicalNodeWidth",RP="org.eclipse.elk.topdown.hierarchicalNodeAspectRatio",Qw="org.eclipse.elk.topdown.nodeType",NEe="origin",C3t="random",S3t="boundingBox.upLeft",_3t="boundingBox.lowRight",PEe="org.eclipse.elk.stress.fixed",BEe="org.eclipse.elk.stress.desiredEdgeLength",FEe="org.eclipse.elk.stress.dimension",REe="org.eclipse.elk.stress.epsilon",jEe="org.eclipse.elk.stress.iterationLimit",Mb="org.eclipse.elk.stress",A3t="ELK Stress",Px="org.eclipse.elk.nodeSize.minimum",uG="org.eclipse.elk.alg.force.stress",L3t="Layered layout",Bx="org.eclipse.elk.alg.layered",jP="org.eclipse.elk.alg.layered.compaction.components",dL="org.eclipse.elk.alg.layered.compaction.oned",lG="org.eclipse.elk.alg.layered.compaction.oned.algs",rv="org.eclipse.elk.alg.layered.compaction.recthull",V1="org.eclipse.elk.alg.layered.components",Id="NONE",$Ee="MODEL_ORDER",au={3:1,6:1,4:1,9:1,5:1,126:1},M3t={3:1,6:1,4:1,5:1,150:1,100:1,115:1},hG="org.eclipse.elk.alg.layered.compound",ts={47:1},Cu="org.eclipse.elk.alg.layered.graph",Phe=" -> ",D3t="Not supported by LGraph",zEe="Port side is undefined",Bhe={3:1,6:1,4:1,5:1,483:1,150:1,100:1,115:1},m2={3:1,6:1,4:1,5:1,150:1,199:1,210:1,100:1,115:1},I3t={3:1,6:1,4:1,5:1,150:1,2042:1,210:1,100:1,115:1},O3t=`([{"' \r -`,N3t=`)]}"' \r -`,P3t="The given string contains parts that cannot be parsed as numbers.",$P="org.eclipse.elk.core.math",B3t={3:1,4:1,140:1,214:1,423:1},F3t={3:1,4:1,107:1,214:1,423:1},v2="org.eclipse.elk.alg.layered.graph.transform",R3t="ElkGraphImporter",j3t="ElkGraphImporter/lambda$1$Type",$3t="ElkGraphImporter/lambda$2$Type",z3t="ElkGraphImporter/lambda$4$Type",rr="org.eclipse.elk.alg.layered.intermediate",q3t="Node margin calculation",H3t="ONE_SIDED_GREEDY_SWITCH",V3t="TWO_SIDED_GREEDY_SWITCH",Fhe="No implementation is available for the layout processor ",Rhe="IntermediateProcessorStrategy",jhe="Node '",U3t="FIRST_SEPARATE",G3t="LAST_SEPARATE",K3t="Odd port side processing",aa="org.eclipse.elk.alg.layered.intermediate.compaction",gL="org.eclipse.elk.alg.layered.intermediate.greedyswitch",bg="org.eclipse.elk.alg.layered.p3order.counting",zP={230:1},Fx="org.eclipse.elk.alg.layered.intermediate.loops",Bh="org.eclipse.elk.alg.layered.intermediate.loops.ordering",Db="org.eclipse.elk.alg.layered.intermediate.loops.routing",qEe="org.eclipse.elk.alg.layered.intermediate.preserveorder",Od="org.eclipse.elk.alg.layered.intermediate.wrapping",ou="org.eclipse.elk.alg.layered.options",$he="INTERACTIVE",HEe="GREEDY",W3t="DEPTH_FIRST",Y3t="EDGE_LENGTH",X3t="SELF_LOOPS",Q3t="firstTryWithInitialOrder",VEe="org.eclipse.elk.layered.directionCongruency",UEe="org.eclipse.elk.layered.feedbackEdges",fG="org.eclipse.elk.layered.interactiveReferencePoint",GEe="org.eclipse.elk.layered.mergeEdges",KEe="org.eclipse.elk.layered.mergeHierarchyEdges",WEe="org.eclipse.elk.layered.allowNonFlowPortsToSwitchSides",YEe="org.eclipse.elk.layered.portSortingStrategy",XEe="org.eclipse.elk.layered.thoroughness",QEe="org.eclipse.elk.layered.unnecessaryBendpoints",JEe="org.eclipse.elk.layered.generatePositionAndLayerIds",zhe="org.eclipse.elk.layered.cycleBreaking.strategy",qP="org.eclipse.elk.layered.layering.strategy",ZEe="org.eclipse.elk.layered.layering.layerConstraint",eTe="org.eclipse.elk.layered.layering.layerChoiceConstraint",tTe="org.eclipse.elk.layered.layering.layerId",qhe="org.eclipse.elk.layered.layering.minWidth.upperBoundOnWidth",Hhe="org.eclipse.elk.layered.layering.minWidth.upperLayerEstimationScalingFactor",Vhe="org.eclipse.elk.layered.layering.nodePromotion.strategy",Uhe="org.eclipse.elk.layered.layering.nodePromotion.maxIterations",Ghe="org.eclipse.elk.layered.layering.coffmanGraham.layerBound",pL="org.eclipse.elk.layered.crossingMinimization.strategy",nTe="org.eclipse.elk.layered.crossingMinimization.forceNodeModelOrder",Khe="org.eclipse.elk.layered.crossingMinimization.hierarchicalSweepiness",Whe="org.eclipse.elk.layered.crossingMinimization.semiInteractive",rTe="org.eclipse.elk.layered.crossingMinimization.inLayerPredOf",iTe="org.eclipse.elk.layered.crossingMinimization.inLayerSuccOf",sTe="org.eclipse.elk.layered.crossingMinimization.positionChoiceConstraint",aTe="org.eclipse.elk.layered.crossingMinimization.positionId",oTe="org.eclipse.elk.layered.crossingMinimization.greedySwitch.activationThreshold",Yhe="org.eclipse.elk.layered.crossingMinimization.greedySwitch.type",dG="org.eclipse.elk.layered.crossingMinimization.greedySwitchHierarchical.type",k6="org.eclipse.elk.layered.nodePlacement.strategy",gG="org.eclipse.elk.layered.nodePlacement.favorStraightEdges",Xhe="org.eclipse.elk.layered.nodePlacement.bk.edgeStraightening",Qhe="org.eclipse.elk.layered.nodePlacement.bk.fixedAlignment",Jhe="org.eclipse.elk.layered.nodePlacement.linearSegments.deflectionDampening",Zhe="org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility",efe="org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility.default",cTe="org.eclipse.elk.layered.edgeRouting.selfLoopDistribution",uTe="org.eclipse.elk.layered.edgeRouting.selfLoopOrdering",pG="org.eclipse.elk.layered.edgeRouting.splines.mode",bG="org.eclipse.elk.layered.edgeRouting.splines.sloppy.layerSpacingFactor",tfe="org.eclipse.elk.layered.edgeRouting.polyline.slopedEdgeZoneWidth",lTe="org.eclipse.elk.layered.spacing.baseValue",hTe="org.eclipse.elk.layered.spacing.edgeNodeBetweenLayers",fTe="org.eclipse.elk.layered.spacing.edgeEdgeBetweenLayers",dTe="org.eclipse.elk.layered.spacing.nodeNodeBetweenLayers",gTe="org.eclipse.elk.layered.priority.direction",pTe="org.eclipse.elk.layered.priority.shortness",bTe="org.eclipse.elk.layered.priority.straightness",nfe="org.eclipse.elk.layered.compaction.connectedComponents",mTe="org.eclipse.elk.layered.compaction.postCompaction.strategy",vTe="org.eclipse.elk.layered.compaction.postCompaction.constraints",mG="org.eclipse.elk.layered.highDegreeNodes.treatment",rfe="org.eclipse.elk.layered.highDegreeNodes.threshold",ife="org.eclipse.elk.layered.highDegreeNodes.treeHeight",fp="org.eclipse.elk.layered.wrapping.strategy",vG="org.eclipse.elk.layered.wrapping.additionalEdgeSpacing",wG="org.eclipse.elk.layered.wrapping.correctionFactor",bL="org.eclipse.elk.layered.wrapping.cutting.strategy",sfe="org.eclipse.elk.layered.wrapping.cutting.cuts",afe="org.eclipse.elk.layered.wrapping.cutting.msd.freedom",yG="org.eclipse.elk.layered.wrapping.validify.strategy",xG="org.eclipse.elk.layered.wrapping.validify.forbiddenIndices",kG="org.eclipse.elk.layered.wrapping.multiEdge.improveCuts",EG="org.eclipse.elk.layered.wrapping.multiEdge.distancePenalty",ofe="org.eclipse.elk.layered.wrapping.multiEdge.improveWrappedEdges",wTe="org.eclipse.elk.layered.edgeLabels.sideSelection",yTe="org.eclipse.elk.layered.edgeLabels.centerLabelPlacementStrategy",TG="org.eclipse.elk.layered.considerModelOrder.strategy",xTe="org.eclipse.elk.layered.considerModelOrder.portModelOrder",kTe="org.eclipse.elk.layered.considerModelOrder.noModelOrder",cfe="org.eclipse.elk.layered.considerModelOrder.components",ETe="org.eclipse.elk.layered.considerModelOrder.longEdgeStrategy",ufe="org.eclipse.elk.layered.considerModelOrder.crossingCounterNodeInfluence",lfe="org.eclipse.elk.layered.considerModelOrder.crossingCounterPortInfluence",hfe="layering",J3t="layering.minWidth",Z3t="layering.nodePromotion",gT="crossingMinimization",CG="org.eclipse.elk.hierarchyHandling",eyt="crossingMinimization.greedySwitch",tyt="nodePlacement",nyt="nodePlacement.bk",ryt="edgeRouting",HP="org.eclipse.elk.edgeRouting",U1="spacing",TTe="priority",CTe="compaction",iyt="compaction.postCompaction",syt="Specifies whether and how post-process compaction is applied.",STe="highDegreeNodes",_Te="wrapping",ayt="wrapping.cutting",oyt="wrapping.validify",ATe="wrapping.multiEdge",ffe="edgeLabels",mL="considerModelOrder",LTe="org.eclipse.elk.spacing.commentComment",MTe="org.eclipse.elk.spacing.commentNode",DTe="org.eclipse.elk.spacing.edgeEdge",dfe="org.eclipse.elk.spacing.edgeNode",ITe="org.eclipse.elk.spacing.labelLabel",OTe="org.eclipse.elk.spacing.labelPortHorizontal",NTe="org.eclipse.elk.spacing.labelPortVertical",PTe="org.eclipse.elk.spacing.labelNode",BTe="org.eclipse.elk.spacing.nodeSelfLoop",FTe="org.eclipse.elk.spacing.portPort",RTe="org.eclipse.elk.spacing.individual",jTe="org.eclipse.elk.port.borderOffset",$Te="org.eclipse.elk.noLayout",zTe="org.eclipse.elk.port.side",VP="org.eclipse.elk.debugMode",qTe="org.eclipse.elk.alignment",HTe="org.eclipse.elk.insideSelfLoops.activate",VTe="org.eclipse.elk.insideSelfLoops.yo",gfe="org.eclipse.elk.direction",UTe="org.eclipse.elk.nodeLabels.padding",GTe="org.eclipse.elk.portLabels.nextToPortIfPossible",KTe="org.eclipse.elk.portLabels.treatAsGroup",WTe="org.eclipse.elk.portAlignment.default",YTe="org.eclipse.elk.portAlignment.north",XTe="org.eclipse.elk.portAlignment.south",QTe="org.eclipse.elk.portAlignment.west",JTe="org.eclipse.elk.portAlignment.east",SG="org.eclipse.elk.contentAlignment",ZTe="org.eclipse.elk.junctionPoints",eCe="org.eclipse.elk.edgeLabels.placement",tCe="org.eclipse.elk.port.index",nCe="org.eclipse.elk.commentBox",rCe="org.eclipse.elk.hypernode",iCe="org.eclipse.elk.port.anchor",pfe="org.eclipse.elk.partitioning.activate",bfe="org.eclipse.elk.partitioning.partition",_G="org.eclipse.elk.position",sCe="org.eclipse.elk.margins",aCe="org.eclipse.elk.spacing.portsSurrounding",AG="org.eclipse.elk.interactiveLayout",Uc="org.eclipse.elk.core.util",oCe={3:1,4:1,5:1,601:1},cyt="NETWORK_SIMPLEX",cCe="SIMPLE",Uo={106:1,47:1},LG="org.eclipse.elk.alg.layered.p1cycles",dp="org.eclipse.elk.alg.layered.p2layers",uCe={413:1,230:1},uyt={846:1,3:1,4:1},Cl="org.eclipse.elk.alg.layered.p3order",Go="org.eclipse.elk.alg.layered.p4nodes",lyt={3:1,4:1,5:1,854:1},Nd=1e-5,Ib="org.eclipse.elk.alg.layered.p4nodes.bk",mfe="org.eclipse.elk.alg.layered.p5edges",i1="org.eclipse.elk.alg.layered.p5edges.orthogonal",vfe="org.eclipse.elk.alg.layered.p5edges.orthogonal.direction",wfe=1e-6,Zy="org.eclipse.elk.alg.layered.p5edges.splines",yfe=.09999999999999998,MG=1e-8,hyt=4.71238898038469,lCe=3.141592653589793,gp="org.eclipse.elk.alg.mrtree",xfe=.10000000149011612,DG="SUPER_ROOT",vL="org.eclipse.elk.alg.mrtree.graph",hCe=-17976931348623157e292,Su="org.eclipse.elk.alg.mrtree.intermediate",fyt="Processor compute fanout",IG={3:1,6:1,4:1,5:1,534:1,100:1,115:1},dyt="Set neighbors in level",UP="org.eclipse.elk.alg.mrtree.options",gyt="DESCENDANTS",fCe="org.eclipse.elk.mrtree.compaction",dCe="org.eclipse.elk.mrtree.edgeEndTextureLength",gCe="org.eclipse.elk.mrtree.treeLevel",pCe="org.eclipse.elk.mrtree.positionConstraint",bCe="org.eclipse.elk.mrtree.weighting",mCe="org.eclipse.elk.mrtree.edgeRoutingMode",vCe="org.eclipse.elk.mrtree.searchOrder",pyt="Position Constraint",Xu="org.eclipse.elk.mrtree",byt="org.eclipse.elk.tree",myt="Processor arrange level",pT="org.eclipse.elk.alg.mrtree.p2order",vh="org.eclipse.elk.alg.mrtree.p4route",wCe="org.eclipse.elk.alg.radial",iv=6.283185307179586,yCe="Before",xCe=5e-324,OG="After",kCe="org.eclipse.elk.alg.radial.intermediate",vyt="COMPACTION",kfe="org.eclipse.elk.alg.radial.intermediate.compaction",wyt={3:1,4:1,5:1,100:1},ECe="org.eclipse.elk.alg.radial.intermediate.optimization",Efe="No implementation is available for the layout option ",wL="org.eclipse.elk.alg.radial.options",TCe="org.eclipse.elk.radial.centerOnRoot",CCe="org.eclipse.elk.radial.orderId",SCe="org.eclipse.elk.radial.radius",NG="org.eclipse.elk.radial.rotate",Tfe="org.eclipse.elk.radial.compactor",Cfe="org.eclipse.elk.radial.compactionStepSize",_Ce="org.eclipse.elk.radial.sorter",ACe="org.eclipse.elk.radial.wedgeCriteria",LCe="org.eclipse.elk.radial.optimizationCriteria",Sfe="org.eclipse.elk.radial.rotation.targetAngle",_fe="org.eclipse.elk.radial.rotation.computeAdditionalWedgeSpace",MCe="org.eclipse.elk.radial.rotation.outgoingEdgeAngles",yyt="Compaction",DCe="rotation",gf="org.eclipse.elk.radial",xyt="org.eclipse.elk.alg.radial.p1position.wedge",ICe="org.eclipse.elk.alg.radial.sorting",kyt=5.497787143782138,Eyt=3.9269908169872414,Tyt=2.356194490192345,Cyt="org.eclipse.elk.alg.rectpacking",PG="org.eclipse.elk.alg.rectpacking.intermediate",Afe="org.eclipse.elk.alg.rectpacking.options",OCe="org.eclipse.elk.rectpacking.trybox",NCe="org.eclipse.elk.rectpacking.currentPosition",PCe="org.eclipse.elk.rectpacking.desiredPosition",BCe="org.eclipse.elk.rectpacking.inNewRow",FCe="org.eclipse.elk.rectpacking.widthApproximation.strategy",RCe="org.eclipse.elk.rectpacking.widthApproximation.targetWidth",jCe="org.eclipse.elk.rectpacking.widthApproximation.optimizationGoal",$Ce="org.eclipse.elk.rectpacking.widthApproximation.lastPlaceShift",zCe="org.eclipse.elk.rectpacking.packing.strategy",qCe="org.eclipse.elk.rectpacking.packing.compaction.rowHeightReevaluation",HCe="org.eclipse.elk.rectpacking.packing.compaction.iterations",VCe="org.eclipse.elk.rectpacking.whiteSpaceElimination.strategy",Lfe="widthApproximation",Syt="Compaction Strategy",_yt="packing.compaction",th="org.eclipse.elk.rectpacking",bT="org.eclipse.elk.alg.rectpacking.p1widthapproximation",BG="org.eclipse.elk.alg.rectpacking.p2packing",Ayt="No Compaction",UCe="org.eclipse.elk.alg.rectpacking.p3whitespaceelimination",GP="org.eclipse.elk.alg.rectpacking.util",FG="No implementation available for ",e4="org.eclipse.elk.alg.spore",t4="org.eclipse.elk.alg.spore.options",Jw="org.eclipse.elk.sporeCompaction",Mfe="org.eclipse.elk.underlyingLayoutAlgorithm",GCe="org.eclipse.elk.processingOrder.treeConstruction",KCe="org.eclipse.elk.processingOrder.spanningTreeCostFunction",Dfe="org.eclipse.elk.processingOrder.preferredRoot",Ife="org.eclipse.elk.processingOrder.rootSelection",Ofe="org.eclipse.elk.structure.structureExtractionStrategy",WCe="org.eclipse.elk.compaction.compactionStrategy",YCe="org.eclipse.elk.compaction.orthogonal",XCe="org.eclipse.elk.overlapRemoval.maxIterations",QCe="org.eclipse.elk.overlapRemoval.runScanline",Nfe="processingOrder",Lyt="overlapRemoval",mT="org.eclipse.elk.sporeOverlap",Myt="org.eclipse.elk.alg.spore.p1structure",Pfe="org.eclipse.elk.alg.spore.p2processingorder",Bfe="org.eclipse.elk.alg.spore.p3execution",Dyt="Topdown Layout",Iyt="Invalid index: ",vT="org.eclipse.elk.core.alg",E6={341:1},n4={295:1},Oyt="Make sure its type is registered with the ",JCe=" utility class.",wT="true",Ffe="false",Nyt="Couldn't clone property '",Zw=.05,nh="org.eclipse.elk.core.options",Pyt=1.2999999523162842,e3="org.eclipse.elk.box",ZCe="org.eclipse.elk.expandNodes",eSe="org.eclipse.elk.box.packingMode",Byt="org.eclipse.elk.algorithm",Fyt="org.eclipse.elk.resolvedAlgorithm",tSe="org.eclipse.elk.bendPoints",sOn="org.eclipse.elk.labelManager",Ryt="org.eclipse.elk.scaleFactor",jyt="org.eclipse.elk.childAreaWidth",$yt="org.eclipse.elk.childAreaHeight",zyt="org.eclipse.elk.animate",qyt="org.eclipse.elk.animTimeFactor",Hyt="org.eclipse.elk.layoutAncestors",Vyt="org.eclipse.elk.maxAnimTime",Uyt="org.eclipse.elk.minAnimTime",Gyt="org.eclipse.elk.progressBar",Kyt="org.eclipse.elk.validateGraph",Wyt="org.eclipse.elk.validateOptions",Yyt="org.eclipse.elk.zoomToFit",aOn="org.eclipse.elk.font.name",Xyt="org.eclipse.elk.font.size",nSe="org.eclipse.elk.topdown.sizeApproximator",rSe="org.eclipse.elk.topdown.scaleCap",Qyt="org.eclipse.elk.edge.type",Jyt="partitioning",Zyt="nodeLabels",RG="portAlignment",Rfe="nodeSize",jfe="port",iSe="portLabels",KP="topdown",e4t="insideSelfLoops",yL="org.eclipse.elk.fixed",jG="org.eclipse.elk.random",sSe={3:1,34:1,22:1,347:1},t4t="port must have a parent node to calculate the port side",n4t="The edge needs to have exactly one edge section. Found: ",xL="org.eclipse.elk.core.util.adapters",pf="org.eclipse.emf.ecore",T6="org.eclipse.elk.graph",r4t="EMapPropertyHolder",i4t="ElkBendPoint",s4t="ElkGraphElement",a4t="ElkConnectableShape",aSe="ElkEdge",o4t="ElkEdgeSection",c4t="EModelElement",u4t="ENamedElement",oSe="ElkLabel",cSe="ElkNode",uSe="ElkPort",l4t={94:1,93:1},Rx="org.eclipse.emf.common.notify.impl",Ob="The feature '",kL="' is not a valid changeable feature",h4t="Expecting null",$fe="' is not a valid feature",f4t="The feature ID",d4t=" is not a valid feature ID",eu=32768,g4t={110:1,94:1,93:1,58:1,54:1,99:1},Gn="org.eclipse.emf.ecore.impl",sv="org.eclipse.elk.graph.impl",EL="Recursive containment not allowed for ",yT="The datatype '",t3="' is not a valid classifier",zfe="The value '",C6={195:1,3:1,4:1},qfe="The class '",xT="http://www.eclipse.org/elk/ElkGraph",lSe="property",TL="value",Hfe="source",p4t="properties",b4t="identifier",Vfe="height",Ufe="width",Gfe="parent",Kfe="text",Wfe="children",m4t="hierarchical",hSe="sources",Yfe="targets",fSe="sections",$G="bendPoints",dSe="outgoingShape",gSe="incomingShape",pSe="outgoingSections",bSe="incomingSections",So="org.eclipse.emf.common.util",mSe="Severe implementation error in the Json to ElkGraph importer.",Pd="id",no="org.eclipse.elk.graph.json",vSe="Unhandled parameter types: ",v4t="startPoint",w4t="An edge must have at least one source and one target (edge id: '",kT="').",y4t="Referenced edge section does not exist: ",x4t=" (edge id: '",wSe="target",k4t="sourcePoint",E4t="targetPoint",zG="group",_i="name",T4t="connectableShape cannot be null",C4t="edge cannot be null",Xfe="Passed edge is not 'simple'.",qG="org.eclipse.elk.graph.util",WP="The 'no duplicates' constraint is violated",Qfe="targetIndex=",av=", size=",Jfe="sourceIndex=",Bd={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1},Zfe={3:1,4:1,20:1,31:1,56:1,16:1,51:1,15:1,59:1,70:1,66:1,61:1,596:1},HG="logging",S4t="measureExecutionTime",_4t="parser.parse.1",A4t="parser.parse.2",VG="parser.next.1",e0e="parser.next.2",L4t="parser.next.3",M4t="parser.next.4",ov="parser.factor.1",ySe="parser.factor.2",D4t="parser.factor.3",I4t="parser.factor.4",O4t="parser.factor.5",N4t="parser.factor.6",P4t="parser.atom.1",B4t="parser.atom.2",F4t="parser.atom.3",xSe="parser.atom.4",t0e="parser.atom.5",kSe="parser.cc.1",UG="parser.cc.2",R4t="parser.cc.3",j4t="parser.cc.5",ESe="parser.cc.6",TSe="parser.cc.7",n0e="parser.cc.8",$4t="parser.ope.1",z4t="parser.ope.2",q4t="parser.ope.3",w2="parser.descape.1",H4t="parser.descape.2",V4t="parser.descape.3",U4t="parser.descape.4",G4t="parser.descape.5",bf="parser.process.1",K4t="parser.quantifier.1",W4t="parser.quantifier.2",Y4t="parser.quantifier.3",X4t="parser.quantifier.4",CSe="parser.quantifier.5",Q4t="org.eclipse.emf.common.notify",SSe={424:1,686:1},J4t={3:1,4:1,20:1,31:1,56:1,16:1,15:1,70:1,61:1},YP={378:1,152:1},CL="index=",r0e={3:1,4:1,5:1,129:1},Z4t={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,61:1},_Se={3:1,6:1,4:1,5:1,198:1},e5t={3:1,4:1,5:1,173:1,379:1},t5t=";/?:@&=+$,",n5t="invalid authority: ",r5t="EAnnotation",i5t="ETypedElement",s5t="EStructuralFeature",a5t="EAttribute",o5t="EClassifier",c5t="EEnumLiteral",u5t="EGenericType",l5t="EOperation",h5t="EParameter",f5t="EReference",d5t="ETypeParameter",us="org.eclipse.emf.ecore.util",i0e={79:1},ASe={3:1,20:1,16:1,15:1,61:1,597:1,79:1,71:1,97:1},g5t="org.eclipse.emf.ecore.util.FeatureMap$Entry",Sl=8192,r4=2048,SL="byte",GG="char",_L="double",AL="float",LL="int",ML="long",DL="short",p5t="java.lang.Object",S6={3:1,4:1,5:1,254:1},LSe={3:1,4:1,5:1,688:1},b5t={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1,71:1},kc={3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1,79:1,71:1,97:1},XP="mixed",li="http:///org/eclipse/emf/ecore/util/ExtendedMetaData",Bf="kind",m5t={3:1,4:1,5:1,689:1},MSe={3:1,4:1,20:1,31:1,56:1,16:1,15:1,70:1,61:1,79:1,71:1,97:1},KG={20:1,31:1,56:1,16:1,15:1,61:1,71:1},WG={51:1,128:1,287:1},YG={76:1,343:1},XG="The value of type '",QG="' must be of type '",_6=1352,Ff="http://www.eclipse.org/emf/2002/Ecore",JG=-32768,n3="constraints",ho="baseType",v5t="getEStructuralFeature",w5t="getFeatureID",IL="feature",y5t="getOperationID",DSe="operation",x5t="defaultValue",k5t="eTypeParameters",E5t="isInstance",T5t="getEEnumLiteral",C5t="eContainingClass",yi={57:1},S5t={3:1,4:1,5:1,124:1},_5t="org.eclipse.emf.ecore.resource",A5t={94:1,93:1,599:1,2034:1},s0e="org.eclipse.emf.ecore.resource.impl",ISe="unspecified",QP="simple",ZG="attribute",L5t="attributeWildcard",eK="element",a0e="elementWildcard",s1="collapse",o0e="itemType",tK="namespace",JP="##targetNamespace",Rf="whiteSpace",OSe="wildcards",cv="http://www.eclipse.org/emf/2003/XMLType",c0e="##any",ET="uninitialized",ZP="The multiplicity constraint is violated",nK="org.eclipse.emf.ecore.xml.type",M5t="ProcessingInstruction",D5t="SimpleAnyType",I5t="XMLTypeDocumentRoot",ea="org.eclipse.emf.ecore.xml.type.impl",eB="INF",O5t="processing",N5t="ENTITIES_._base",NSe="minLength",PSe="ENTITY",rK="NCName",P5t="IDREFS_._base",BSe="integer",u0e="token",l0e="pattern",B5t="[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*",FSe="\\i\\c*",F5t="[\\i-[:]][\\c-[:]]*",R5t="nonPositiveInteger",tB="maxInclusive",RSe="NMTOKEN",j5t="NMTOKENS_._base",jSe="nonNegativeInteger",nB="minInclusive",$5t="normalizedString",z5t="unsignedByte",q5t="unsignedInt",H5t="18446744073709551615",V5t="unsignedShort",U5t="processingInstruction",y2="org.eclipse.emf.ecore.xml.type.internal",TT=1114111,G5t="Internal Error: shorthands: \\u",OL="xml:isDigit",h0e="xml:isWord",f0e="xml:isSpace",d0e="xml:isNameChar",g0e="xml:isInitialNameChar",K5t="09٠٩۰۹०९০৯੦੯૦૯୦୯௧௯౦౯೦೯൦൯๐๙໐໙༠༩",W5t="AZazÀÖØöøıĴľŁňŊžƀǃǍǰǴǵǺȗɐʨʻˁΆΆΈΊΌΌΎΡΣώϐϖϚϚϜϜϞϞϠϠϢϳЁЌЎяёќўҁҐӄӇӈӋӌӐӫӮӵӸӹԱՖՙՙաֆאתװײءغفيٱڷںھۀێېۓەەۥۦअहऽऽक़ॡঅঌএঐওনপরললশহড়ঢ়য়ৡৰৱਅਊਏਐਓਨਪਰਲਲ਼ਵਸ਼ਸਹਖ਼ੜਫ਼ਫ਼ੲੴઅઋઍઍએઑઓનપરલળવહઽઽૠૠଅଌଏଐଓନପରଲଳଶହଽଽଡ଼ଢ଼ୟୡஅஊஎஐஒகஙசஜஜஞடணதநபமவஷஹఅఌఎఐఒనపళవహౠౡಅಌಎಐಒನಪಳವಹೞೞೠೡഅഌഎഐഒനപഹൠൡกฮะะาำเๅກຂຄຄງຈຊຊຍຍດທນຟມຣລລວວສຫອຮະະາຳຽຽເໄཀཇཉཀྵႠჅაჶᄀᄀᄂᄃᄅᄇᄉᄉᄋᄌᄎᄒᄼᄼᄾᄾᅀᅀᅌᅌᅎᅎᅐᅐᅔᅕᅙᅙᅟᅡᅣᅣᅥᅥᅧᅧᅩᅩᅭᅮᅲᅳᅵᅵᆞᆞᆨᆨᆫᆫᆮᆯᆷᆸᆺᆺᆼᇂᇫᇫᇰᇰᇹᇹḀẛẠỹἀἕἘἝἠὅὈὍὐὗὙὙὛὛὝὝὟώᾀᾴᾶᾼιιῂῄῆῌῐΐῖΊῠῬῲῴῶῼΩΩKÅ℮℮ↀↂ〇〇〡〩ぁゔァヺㄅㄬ一龥가힣",Y5t="Private Use",p0e="ASSIGNED",b0e="\0€ÿĀſƀɏɐʯʰ˿̀ͯͰϿЀӿ԰֏֐׿؀ۿ܀ݏހ޿ऀॿঀ৿਀੿઀૿଀୿஀௿ఀ౿ಀ೿ഀൿ඀෿฀๿຀໿ༀ࿿က႟Ⴀჿᄀᇿሀ፿Ꭰ᏿᐀ᙿ ᚟ᚠ᛿ក៿᠀᢯Ḁỿἀ῿ ⁰₟₠⃏⃐⃿℀⅏⅐↏←⇿∀⋿⌀⏿␀␿⑀⑟①⓿─╿▀▟■◿☀⛿✀➿⠀⣿⺀⻿⼀⿟⿰⿿ 〿぀ゟ゠ヿ㄀ㄯ㄰㆏㆐㆟ㆠㆿ㈀㋿㌀㏿㐀䶵一鿿ꀀ꒏꒐꓏가힣豈﫿ffﭏﭐ﷿︠︯︰﹏﹐﹯ﹰ﻾\uFEFF\uFEFF＀￯",$Se="UNASSIGNED",CT={3:1,122:1},X5t="org.eclipse.emf.ecore.xml.type.util",iK={3:1,4:1,5:1,381:1},zSe="org.eclipse.xtext.xbase.lib",Q5t="Cannot add elements to a Range",J5t="Cannot set elements in a Range",Z5t="Cannot remove elements from a Range",e6t="user.agent",h,sK,m0e;b.goog=b.goog||{},b.goog.global=b.goog.global||b,sK={},D(1,null,{},T),h.Fb=function(t){return Jtt(this,t)},h.Gb=function(){return this.Rm},h.Hb=function(){return fw(this)},h.Ib=function(){var t;return _m(bh(this))+"@"+(t=es(this)>>>0,t.toString(16))},h.equals=function(e){return this.Fb(e)},h.hashCode=function(){return this.Hb()},h.toString=function(){return this.Ib()};var t6t,n6t,r6t;D(297,1,{297:1,2124:1},B7e),h.ve=function(t){var n;return n=new B7e,n.i=4,t>1?n.c=yot(this,t-1):n.c=this,n},h.we=function(){return Gg(this),this.b},h.xe=function(){return _m(this)},h.ye=function(){return Gg(this),this.k},h.ze=function(){return(this.i&4)!=0},h.Ae=function(){return(this.i&1)!=0},h.Ib=function(){return K6e(this)},h.i=0;var wa=I(Vc,"Object",1),qSe=I(Vc,"Class",297);D(2096,1,yP),I(xP,"Optional",2096),D(1191,2096,yP,_),h.Fb=function(t){return t===this},h.Hb=function(){return 2040732332},h.Ib=function(){return"Optional.absent()"},h.Jb=function(t){return Xr(t),o_(),v0e};var v0e;I(xP,"Absent",1191),D(636,1,{},Zie),I(xP,"Joiner",636);var oOn=ks(xP,"Predicate");D(589,1,{178:1,589:1,3:1,46:1},gz),h.Mb=function(t){return y0t(this,t)},h.Lb=function(t){return y0t(this,t)},h.Fb=function(t){var n;return De(t,589)?(n=l(t,589),O9e(this.a,n.a)):!1},h.Hb=function(){return q7e(this.a)+306654252},h.Ib=function(){return K9n(this.a)},I(xP,"Predicates/AndPredicate",589),D(419,2096,{419:1,3:1},JS),h.Fb=function(t){var n;return De(t,419)?(n=l(t,419),Pi(this.a,n.a)):!1},h.Hb=function(){return 1502476572+es(this.a)},h.Ib=function(){return Awt+this.a+")"},h.Jb=function(t){return new JS(_H(t.Kb(this.a),"the Function passed to Optional.transform() must not return null."))},I(xP,"Present",419),D(204,1,eT),h.Nb=function(t){Za(this,t)},h.Qb=function(){jJe()},I(dn,"UnmodifiableIterator",204),D(2076,204,tT),h.Qb=function(){jJe()},h.Rb=function(t){throw ue(new Qr)},h.Wb=function(t){throw ue(new Qr)},I(dn,"UnmodifiableListIterator",2076),D(399,2076,tT),h.Ob=function(){return this.c0},h.Pb=function(){if(this.c>=this.d)throw ue(new _c);return this.Xb(this.c++)},h.Tb=function(){return this.c},h.Ub=function(){if(this.c<=0)throw ue(new _c);return this.Xb(--this.c)},h.Vb=function(){return this.c-1},h.c=0,h.d=0,I(dn,"AbstractIndexedListIterator",399),D(713,204,eT),h.Ob=function(){return tce(this)},h.Pb=function(){return z6e(this)},h.e=1,I(dn,"AbstractIterator",713),D(2084,1,{229:1}),h.Zb=function(){var t;return t=this.f,t||(this.f=this.ac())},h.Fb=function(t){return Ece(this,t)},h.Hb=function(){return es(this.Zb())},h.dc=function(){return this.gc()==0},h.ec=function(){return W8(this)},h.Ib=function(){return xc(this.Zb())},I(dn,"AbstractMultimap",2084),D(742,2084,Jm),h.$b=function(){mV(this)},h._b=function(t){return iZe(this,t)},h.ac=function(){return new Lk(this,this.c)},h.ic=function(t){return this.hc()},h.bc=function(){return new q5(this,this.c)},h.jc=function(){return this.mc(this.hc())},h.kc=function(){return new EJe(this)},h.lc=function(){return Iue(this.c.vc().Nc(),new P,64,this.d)},h.cc=function(t){return $i(this,t)},h.fc=function(t){return DN(this,t)},h.gc=function(){return this.d},h.mc=function(t){return Cn(),new $a(t)},h.nc=function(){return new kJe(this)},h.oc=function(){return Iue(this.c.Cc().Nc(),new A,64,this.d)},h.pc=function(t,n){return new YH(this,t,n,null)},h.d=0,I(dn,"AbstractMapBasedMultimap",742),D(1696,742,Jm),h.hc=function(){return new Bu(this.a)},h.jc=function(){return Cn(),Cn(),_o},h.cc=function(t){return l($i(this,t),15)},h.fc=function(t){return l(DN(this,t),15)},h.Zb=function(){return ex(this)},h.Fb=function(t){return Ece(this,t)},h.qc=function(t){return l($i(this,t),15)},h.rc=function(t){return l(DN(this,t),15)},h.mc=function(t){return ioe(l(t,15))},h.pc=function(t,n){return _ct(this,t,l(n,15),null)},I(dn,"AbstractListMultimap",1696),D(748,1,Oa),h.Nb=function(t){Za(this,t)},h.Ob=function(){return this.c.Ob()||this.e.Ob()},h.Pb=function(){var t;return this.e.Ob()||(t=l(this.c.Pb(),44),this.b=t.ld(),this.a=l(t.md(),16),this.e=this.a.Kc()),this.sc(this.b,this.e.Pb())},h.Qb=function(){this.e.Qb(),l(Lf(this.a),16).dc()&&this.c.Qb(),--this.d.d},I(dn,"AbstractMapBasedMultimap/Itr",748),D(1129,748,Oa,kJe),h.sc=function(t,n){return n},I(dn,"AbstractMapBasedMultimap/1",1129),D(1130,1,{},A),h.Kb=function(t){return l(t,16).Nc()},I(dn,"AbstractMapBasedMultimap/1methodref$spliterator$Type",1130),D(1131,748,Oa,EJe),h.sc=function(t,n){return new iw(t,n)},I(dn,"AbstractMapBasedMultimap/2",1131);var HSe=ks(Lr,"Map");D(2065,1,Ww),h.wc=function(t){mA(this,t)},h.yc=function(t,n,r){return qce(this,t,n,r)},h.$b=function(){this.vc().$b()},h.tc=function(t){return gue(this,t)},h._b=function(t){return!!Dxe(this,t,!1)},h.uc=function(t){var n,r,a;for(r=this.vc().Kc();r.Ob();)if(n=l(r.Pb(),44),a=n.md(),qe(t)===qe(a)||t!=null&&Pi(t,a))return!0;return!1},h.Fb=function(t){var n,r,a;if(t===this)return!0;if(!De(t,85)||(a=l(t,85),this.gc()!=a.gc()))return!1;for(r=a.vc().Kc();r.Ob();)if(n=l(r.Pb(),44),!this.tc(n))return!1;return!0},h.xc=function(t){return hc(Dxe(this,t,!1))},h.Hb=function(){return I7e(this.vc())},h.dc=function(){return this.gc()==0},h.ec=function(){return new br(this)},h.zc=function(t,n){throw ue(new Hp("Put not supported on this map"))},h.Ac=function(t){bA(this,t)},h.Bc=function(t){return hc(Dxe(this,t,!0))},h.gc=function(){return this.vc().gc()},h.Ib=function(){return Igt(this)},h.Cc=function(){return new gi(this)},I(Lr,"AbstractMap",2065),D(2085,2065,Ww),h.bc=function(){return new Yz(this)},h.vc=function(){return Est(this)},h.ec=function(){var t;return t=this.g,t||(this.g=this.bc())},h.Cc=function(){var t;return t=this.i,t||(this.i=new WZe(this))},I(dn,"Maps/ViewCachingAbstractMap",2085),D(402,2085,Ww,Lk),h.xc=function(t){return fwn(this,t)},h.Bc=function(t){return Pyn(this,t)},h.$b=function(){this.d==this.e.c?this.e.$b():iH(new V4e(this))},h._b=function(t){return i1t(this.d,t)},h.Ec=function(){return new pz(this)},h.Dc=function(){return this.Ec()},h.Fb=function(t){return this===t||Pi(this.d,t)},h.Hb=function(){return es(this.d)},h.ec=function(){return this.e.ec()},h.gc=function(){return this.d.gc()},h.Ib=function(){return xc(this.d)},I(dn,"AbstractMapBasedMultimap/AsMap",402);var Fh=ks(Vc,"Iterable");D(31,1,Wy),h.Jc=function(t){to(this,t)},h.Lc=function(){return this.Oc()},h.Nc=function(){return new kn(this,0)},h.Oc=function(){return new bn(null,this.Nc())},h.Fc=function(t){throw ue(new Hp("Add not supported on this collection"))},h.Gc=function(t){return Ka(this,t)},h.$b=function(){M5e(this)},h.Hc=function(t){return Ny(this,t,!1)},h.Ic=function(t){return EN(this,t)},h.dc=function(){return this.gc()==0},h.Mc=function(t){return Ny(this,t,!0)},h.Pc=function(){return e5e(this)},h.Qc=function(t){return PA(this,t)},h.Ib=function(){return Tb(this)},I(Lr,"AbstractCollection",31);var jf=ks(Lr,"Set");D(q1,31,Tl),h.Nc=function(){return new kn(this,1)},h.Fb=function(t){return Y1t(this,t)},h.Hb=function(){return I7e(this)},I(Lr,"AbstractSet",q1),D(2068,q1,Tl),I(dn,"Sets/ImprovedAbstractSet",2068),D(2069,2068,Tl),h.$b=function(){this.Rc().$b()},h.Hc=function(t){return O1t(this,t)},h.dc=function(){return this.Rc().dc()},h.Mc=function(t){var n;return this.Hc(t)&&De(t,44)?(n=l(t,44),this.Rc().ec().Mc(n.ld())):!1},h.gc=function(){return this.Rc().gc()},I(dn,"Maps/EntrySet",2069),D(1127,2069,Tl,pz),h.Hc=function(t){return s8e(this.a.d.vc(),t)},h.Kc=function(){return new V4e(this.a)},h.Rc=function(){return this.a},h.Mc=function(t){var n;return s8e(this.a.d.vc(),t)?(n=l(Lf(l(t,44)),44),evn(this.a.e,n.ld()),!0):!1},h.Nc=function(){return NO(this.a.d.vc().Nc(),new bz(this.a))},I(dn,"AbstractMapBasedMultimap/AsMap/AsMapEntries",1127),D(1128,1,{},bz),h.Kb=function(t){return Cut(this.a,l(t,44))},I(dn,"AbstractMapBasedMultimap/AsMap/AsMapEntries/0methodref$wrapEntry$Type",1128),D(746,1,Oa,V4e),h.Nb=function(t){Za(this,t)},h.Pb=function(){var t;return t=l(this.b.Pb(),44),this.a=l(t.md(),16),Cut(this.c,t)},h.Ob=function(){return this.b.Ob()},h.Qb=function(){Rk(!!this.a),this.b.Qb(),this.c.e.d-=this.a.gc(),this.a.$b(),this.a=null},I(dn,"AbstractMapBasedMultimap/AsMap/AsMapIterator",746),D(542,2068,Tl,Yz),h.$b=function(){this.b.$b()},h.Hc=function(t){return this.b._b(t)},h.Jc=function(t){Xr(t),this.b.wc(new xz(t))},h.dc=function(){return this.b.dc()},h.Kc=function(){return new c_(this.b.vc().Kc())},h.Mc=function(t){return this.b._b(t)?(this.b.Bc(t),!0):!1},h.gc=function(){return this.b.gc()},I(dn,"Maps/KeySet",542),D(327,542,Tl,q5),h.$b=function(){var t;iH((t=this.b.vc().Kc(),new g3e(this,t)))},h.Ic=function(t){return this.b.ec().Ic(t)},h.Fb=function(t){return this===t||Pi(this.b.ec(),t)},h.Hb=function(){return es(this.b.ec())},h.Kc=function(){var t;return t=this.b.vc().Kc(),new g3e(this,t)},h.Mc=function(t){var n,r;return r=0,n=l(this.b.Bc(t),16),n&&(r=n.gc(),n.$b(),this.a.d-=r),r>0},h.Nc=function(){return this.b.ec().Nc()},I(dn,"AbstractMapBasedMultimap/KeySet",327),D(747,1,Oa,g3e),h.Nb=function(t){Za(this,t)},h.Ob=function(){return this.c.Ob()},h.Pb=function(){return this.a=l(this.c.Pb(),44),this.a.ld()},h.Qb=function(){var t;Rk(!!this.a),t=l(this.a.md(),16),this.c.Qb(),this.b.a.d-=t.gc(),t.$b(),this.a=null},I(dn,"AbstractMapBasedMultimap/KeySet/1",747),D(503,402,{85:1,133:1},_O),h.bc=function(){return this.Sc()},h.ec=function(){return this.Uc()},h.Sc=function(){return new tO(this.c,this.Wc())},h.Tc=function(){return this.Wc().Tc()},h.Uc=function(){var t;return t=this.b,t||(this.b=this.Sc())},h.Vc=function(){return this.Wc().Vc()},h.Wc=function(){return l(this.d,133)},I(dn,"AbstractMapBasedMultimap/SortedAsMap",503),D(446,503,Zke,q_),h.bc=function(){return new Ak(this.a,l(l(this.d,133),139))},h.Sc=function(){return new Ak(this.a,l(l(this.d,133),139))},h.ec=function(){var t;return t=this.b,l(t||(this.b=new Ak(this.a,l(l(this.d,133),139))),277)},h.Uc=function(){var t;return t=this.b,l(t||(this.b=new Ak(this.a,l(l(this.d,133),139))),277)},h.Wc=function(){return l(l(this.d,133),139)},h.Xc=function(t){return l(l(this.d,133),139).Xc(t)},h.Yc=function(t){return l(l(this.d,133),139).Yc(t)},h.Zc=function(t,n){return new q_(this.a,l(l(this.d,133),139).Zc(t,n))},h.$c=function(t){return l(l(this.d,133),139).$c(t)},h._c=function(t){return l(l(this.d,133),139)._c(t)},h.ad=function(t,n){return new q_(this.a,l(l(this.d,133),139).ad(t,n))},I(dn,"AbstractMapBasedMultimap/NavigableAsMap",446),D(502,327,Lwt,tO),h.Nc=function(){return this.b.ec().Nc()},I(dn,"AbstractMapBasedMultimap/SortedKeySet",502),D(401,502,eEe,Ak),I(dn,"AbstractMapBasedMultimap/NavigableKeySet",401),D(551,31,Wy,YH),h.Fc=function(t){var n,r;return Ql(this),r=this.d.dc(),n=this.d.Fc(t),n&&(++this.f.d,r&&DO(this)),n},h.Gc=function(t){var n,r,a;return t.dc()?!1:(a=(Ql(this),this.d.gc()),n=this.d.Gc(t),n&&(r=this.d.gc(),this.f.d+=r-a,a==0&&DO(this)),n)},h.$b=function(){var t;t=(Ql(this),this.d.gc()),t!=0&&(this.d.$b(),this.f.d-=t,lH(this))},h.Hc=function(t){return Ql(this),this.d.Hc(t)},h.Ic=function(t){return Ql(this),this.d.Ic(t)},h.Fb=function(t){return t===this?!0:(Ql(this),Pi(this.d,t))},h.Hb=function(){return Ql(this),es(this.d)},h.Kc=function(){return Ql(this),new _4e(this)},h.Mc=function(t){var n;return Ql(this),n=this.d.Mc(t),n&&(--this.f.d,lH(this)),n},h.gc=function(){return Rtt(this)},h.Nc=function(){return Ql(this),this.d.Nc()},h.Ib=function(){return Ql(this),xc(this.d)},I(dn,"AbstractMapBasedMultimap/WrappedCollection",551);var mf=ks(Lr,"List");D(744,551,{20:1,31:1,16:1,15:1},r5e),h.jd=function(t){$m(this,t)},h.Nc=function(){return Ql(this),this.d.Nc()},h.bd=function(t,n){var r;Ql(this),r=this.d.dc(),l(this.d,15).bd(t,n),++this.a.d,r&&DO(this)},h.cd=function(t,n){var r,a,o;return n.dc()?!1:(o=(Ql(this),this.d.gc()),r=l(this.d,15).cd(t,n),r&&(a=this.d.gc(),this.a.d+=a-o,o==0&&DO(this)),r)},h.Xb=function(t){return Ql(this),l(this.d,15).Xb(t)},h.dd=function(t){return Ql(this),l(this.d,15).dd(t)},h.ed=function(){return Ql(this),new gnt(this)},h.fd=function(t){return Ql(this),new Fat(this,t)},h.gd=function(t){var n;return Ql(this),n=l(this.d,15).gd(t),--this.a.d,lH(this),n},h.hd=function(t,n){return Ql(this),l(this.d,15).hd(t,n)},h.kd=function(t,n){return Ql(this),_ct(this.a,this.e,l(this.d,15).kd(t,n),this.b?this.b:this)},I(dn,"AbstractMapBasedMultimap/WrappedList",744),D(1126,744,{20:1,31:1,16:1,15:1,59:1},rrt),I(dn,"AbstractMapBasedMultimap/RandomAccessWrappedList",1126),D(628,1,Oa,_4e),h.Nb=function(t){Za(this,t)},h.Ob=function(){return Yk(this),this.b.Ob()},h.Pb=function(){return Yk(this),this.b.Pb()},h.Qb=function(){znt(this)},I(dn,"AbstractMapBasedMultimap/WrappedCollection/WrappedIterator",628),D(745,628,lg,gnt,Fat),h.Qb=function(){znt(this)},h.Rb=function(t){var n;n=Rtt(this.a)==0,(Yk(this),l(this.b,128)).Rb(t),++this.a.a.d,n&&DO(this.a)},h.Sb=function(){return(Yk(this),l(this.b,128)).Sb()},h.Tb=function(){return(Yk(this),l(this.b,128)).Tb()},h.Ub=function(){return(Yk(this),l(this.b,128)).Ub()},h.Vb=function(){return(Yk(this),l(this.b,128)).Vb()},h.Wb=function(t){(Yk(this),l(this.b,128)).Wb(t)},I(dn,"AbstractMapBasedMultimap/WrappedList/WrappedListIterator",745),D(743,551,Lwt,Gye),h.Nc=function(){return Ql(this),this.d.Nc()},I(dn,"AbstractMapBasedMultimap/WrappedSortedSet",743),D(1125,743,eEe,unt),I(dn,"AbstractMapBasedMultimap/WrappedNavigableSet",1125),D(1124,551,Tl,Trt),h.Nc=function(){return Ql(this),this.d.Nc()},I(dn,"AbstractMapBasedMultimap/WrappedSet",1124),D(1133,1,{},P),h.Kb=function(t){return lvn(l(t,44))},I(dn,"AbstractMapBasedMultimap/lambda$1$Type",1133),D(1132,1,{},bie),h.Kb=function(t){return new iw(this.a,t)},I(dn,"AbstractMapBasedMultimap/lambda$2$Type",1132);var uv=ks(Lr,"Map/Entry");D(358,1,Nle),h.Fb=function(t){var n;return De(t,44)?(n=l(t,44),yd(this.ld(),n.ld())&&yd(this.md(),n.md())):!1},h.Hb=function(){var t,n;return t=this.ld(),n=this.md(),(t==null?0:es(t))^(n==null?0:es(n))},h.nd=function(t){throw ue(new Qr)},h.Ib=function(){return this.ld()+"="+this.md()},I(dn,Mwt,358),D(2086,31,Wy),h.$b=function(){this.od().$b()},h.Hc=function(t){var n;return De(t,44)?(n=l(t,44),Dbn(this.od(),n.ld(),n.md())):!1},h.Mc=function(t){var n;return De(t,44)?(n=l(t,44),cct(this.od(),n.ld(),n.md())):!1},h.gc=function(){return this.od().d},I(dn,"Multimaps/Entries",2086),D(749,2086,Wy,vz),h.Kc=function(){return this.a.kc()},h.od=function(){return this.a},h.Nc=function(){return this.a.lc()},I(dn,"AbstractMultimap/Entries",749),D(750,749,Tl,Uwe),h.Nc=function(){return this.a.lc()},h.Fb=function(t){return Qxe(this,t)},h.Hb=function(){return wft(this)},I(dn,"AbstractMultimap/EntrySet",750),D(751,31,Wy,Q2),h.$b=function(){this.a.$b()},h.Hc=function(t){return Lyn(this.a,t)},h.Kc=function(){return this.a.nc()},h.gc=function(){return this.a.d},h.Nc=function(){return this.a.oc()},I(dn,"AbstractMultimap/Values",751),D(2087,31,{849:1,20:1,31:1,16:1}),h.Jc=function(t){Xr(t),V5(this).Jc(new kie(t))},h.Nc=function(){var t;return t=V5(this).Nc(),Iue(t,new pe,64|t.yd()&1296,this.a.d)},h.Fc=function(t){return Zwe(),!0},h.Gc=function(t){return Xr(this),Xr(t),De(t,552)?Nbn(l(t,849)):!t.dc()&&Goe(this,t.Kc())},h.Hc=function(t){var n;return n=l(Oy(ex(this.a),t),16),(n?n.gc():0)>0},h.Fb=function(t){return nTn(this,t)},h.Hb=function(){return es(V5(this))},h.dc=function(){return V5(this).dc()},h.Mc=function(t){return Upt(this,t,1)>0},h.Ib=function(){return xc(V5(this))},I(dn,"AbstractMultiset",2087),D(2089,2068,Tl),h.$b=function(){mV(this.a.a)},h.Hc=function(t){var n,r;return De(t,504)?(r=l(t,425),l(r.a.md(),16).gc()<=0?!1:(n=Pot(this.a,r.a.ld()),n==l(r.a.md(),16).gc())):!1},h.Mc=function(t){var n,r,a,o;return De(t,504)&&(r=l(t,425),n=r.a.ld(),a=l(r.a.md(),16).gc(),a!=0)?(o=this.a,Gkn(o,n,a)):!1},I(dn,"Multisets/EntrySet",2089),D(1139,2089,Tl,mie),h.Kc=function(){return new AJe(Est(ex(this.a.a)).Kc())},h.gc=function(){return ex(this.a.a).gc()},I(dn,"AbstractMultiset/EntrySet",1139),D(627,742,Jm),h.hc=function(){return this.pd()},h.jc=function(){return this.qd()},h.cc=function(t){return this.rd(t)},h.fc=function(t){return this.sd(t)},h.Zb=function(){var t;return t=this.f,t||(this.f=this.ac())},h.qd=function(){return Cn(),Cn(),hK},h.Fb=function(t){return Ece(this,t)},h.rd=function(t){return l($i(this,t),21)},h.sd=function(t){return l(DN(this,t),21)},h.mc=function(t){return Cn(),new Ek(l(t,21))},h.pc=function(t,n){return new Trt(this,t,l(n,21))},I(dn,"AbstractSetMultimap",627),D(1723,627,Jm),h.hc=function(){return new Kp(this.b)},h.pd=function(){return new Kp(this.b)},h.jc=function(){return T5e(new Kp(this.b))},h.qd=function(){return T5e(new Kp(this.b))},h.cc=function(t){return l(l($i(this,t),21),87)},h.rd=function(t){return l(l($i(this,t),21),87)},h.fc=function(t){return l(l(DN(this,t),21),87)},h.sd=function(t){return l(l(DN(this,t),21),87)},h.mc=function(t){return De(t,277)?T5e(l(t,277)):(Cn(),new Dye(l(t,87)))},h.Zb=function(){var t;return t=this.f,t||(this.f=De(this.c,139)?new q_(this,l(this.c,139)):De(this.c,133)?new _O(this,l(this.c,133)):new Lk(this,this.c))},h.pc=function(t,n){return De(n,277)?new unt(this,t,l(n,277)):new Gye(this,t,l(n,87))},I(dn,"AbstractSortedSetMultimap",1723),D(1724,1723,Jm),h.Zb=function(){var t;return t=this.f,l(l(t||(this.f=De(this.c,139)?new q_(this,l(this.c,139)):De(this.c,133)?new _O(this,l(this.c,133)):new Lk(this,this.c)),133),139)},h.ec=function(){var t;return t=this.i,l(l(t||(this.i=De(this.c,139)?new Ak(this,l(this.c,139)):De(this.c,133)?new tO(this,l(this.c,133)):new q5(this,this.c)),87),277)},h.bc=function(){return De(this.c,139)?new Ak(this,l(this.c,139)):De(this.c,133)?new tO(this,l(this.c,133)):new q5(this,this.c)},I(dn,"AbstractSortedKeySortedSetMultimap",1724),D(2109,1,{2046:1}),h.Fb=function(t){return _8n(this,t)},h.Hb=function(){var t;return I7e((t=this.g,t||(this.g=new $I(this))))},h.Ib=function(){var t;return Igt((t=this.f,t||(this.f=new _ye(this))))},I(dn,"AbstractTable",2109),D(679,q1,Tl,$I),h.$b=function(){$Je()},h.Hc=function(t){var n,r;return De(t,479)?(n=l(t,697),r=l(Oy(Kst(this.a),ab(n.c.e,n.b)),85),!!r&&s8e(r.vc(),new iw(ab(n.c.c,n.a),ox(n.c,n.b,n.a)))):!1},h.Kc=function(){return Dpn(this.a)},h.Mc=function(t){var n,r;return De(t,479)?(n=l(t,697),r=l(Oy(Kst(this.a),ab(n.c.e,n.b)),85),!!r&&c4n(r.vc(),new iw(ab(n.c.c,n.a),ox(n.c,n.b,n.a)))):!1},h.gc=function(){return Xit(this.a)},h.Nc=function(){return Fbn(this.a)},I(dn,"AbstractTable/CellSet",679),D(2025,31,Wy,wie),h.$b=function(){$Je()},h.Hc=function(t){return wxn(this.a,t)},h.Kc=function(){return Ipn(this.a)},h.gc=function(){return Xit(this.a)},h.Nc=function(){return oct(this.a)},I(dn,"AbstractTable/Values",2025),D(1697,1696,Jm),I(dn,"ArrayListMultimapGwtSerializationDependencies",1697),D(520,1697,Jm,nse,G5e),h.hc=function(){return new Bu(this.a)},h.a=0,I(dn,"ArrayListMultimap",520),D(678,2109,{678:1,2046:1,3:1},i2t),I(dn,"ArrayTable",678),D(2021,399,tT,qnt),h.Xb=function(t){return new F7e(this.a,t)},I(dn,"ArrayTable/1",2021),D(2022,1,{},gie),h.td=function(t){return new F7e(this.a,t)},I(dn,"ArrayTable/1methodref$getCell$Type",2022),D(2110,1,{697:1}),h.Fb=function(t){var n;return t===this?!0:De(t,479)?(n=l(t,697),yd(ab(this.c.e,this.b),ab(n.c.e,n.b))&&yd(ab(this.c.c,this.a),ab(n.c.c,n.a))&&yd(ox(this.c,this.b,this.a),ox(n.c,n.b,n.a))):!1},h.Hb=function(){return MN(he(le(wa,1),Rn,1,5,[ab(this.c.e,this.b),ab(this.c.c,this.a),ox(this.c,this.b,this.a)]))},h.Ib=function(){return"("+ab(this.c.e,this.b)+","+ab(this.c.c,this.a)+")="+ox(this.c,this.b,this.a)},I(dn,"Tables/AbstractCell",2110),D(479,2110,{479:1,697:1},F7e),h.a=0,h.b=0,h.d=0,I(dn,"ArrayTable/2",479),D(2024,1,{},pie),h.td=function(t){return Ilt(this.a,t)},I(dn,"ArrayTable/2methodref$getValue$Type",2024),D(2023,399,tT,Hnt),h.Xb=function(t){return Ilt(this.a,t)},I(dn,"ArrayTable/3",2023),D(2077,2065,Ww),h.$b=function(){iH(this.kc())},h.vc=function(){return new yz(this)},h.lc=function(){return new _at(this.kc(),this.gc())},I(dn,"Maps/IteratorBasedAbstractMap",2077),D(842,2077,Ww),h.$b=function(){throw ue(new Qr)},h._b=function(t){return sZe(this.c,t)},h.kc=function(){return new Vnt(this,this.c.b.c.gc())},h.lc=function(){return Cae(this.c.b.c.gc(),16,new mz(this))},h.xc=function(t){var n;return n=l(H_(this.c,t),17),n?this.vd(n.a):null},h.dc=function(){return this.c.b.c.dc()},h.ec=function(){return Oae(this.c)},h.zc=function(t,n){var r;if(r=l(H_(this.c,t),17),!r)throw ue(new Yn(this.ud()+" "+t+" not in "+Oae(this.c)));return this.wd(r.a,n)},h.Bc=function(t){throw ue(new Qr)},h.gc=function(){return this.c.b.c.gc()},I(dn,"ArrayTable/ArrayMap",842),D(2020,1,{},mz),h.td=function(t){return Yst(this.a,t)},I(dn,"ArrayTable/ArrayMap/0methodref$getEntry$Type",2020),D(2018,358,Nle,DZe),h.ld=function(){return Uhn(this.a,this.b)},h.md=function(){return this.a.vd(this.b)},h.nd=function(t){return this.a.wd(this.b,t)},h.b=0,I(dn,"ArrayTable/ArrayMap/1",2018),D(2019,399,tT,Vnt),h.Xb=function(t){return Yst(this.a,t)},I(dn,"ArrayTable/ArrayMap/2",2019),D(2017,842,Ww,Bst),h.ud=function(){return"Column"},h.vd=function(t){return ox(this.b,this.a,t)},h.wd=function(t,n){return s0t(this.b,this.a,t,n)},h.a=0,I(dn,"ArrayTable/Row",2017),D(843,842,Ww,_ye),h.vd=function(t){return new Bst(this.a,t)},h.zc=function(t,n){return l(n,85),fun()},h.wd=function(t,n){return l(n,85),dun()},h.ud=function(){return"Row"},I(dn,"ArrayTable/RowMap",843),D(1157,1,Ph,IZe),h.Ad=function(t){return(this.a.yd()&-262&t)!=0},h.yd=function(){return this.a.yd()&-262},h.zd=function(){return this.a.zd()},h.Nb=function(t){this.a.Nb(new NZe(t,this.b))},h.Bd=function(t){return this.a.Bd(new OZe(t,this.b))},I(dn,"CollectSpliterators/1",1157),D(1158,1,fr,OZe),h.Cd=function(t){this.a.Cd(this.b.Kb(t))},I(dn,"CollectSpliterators/1/lambda$0$Type",1158),D(1159,1,fr,NZe),h.Cd=function(t){this.a.Cd(this.b.Kb(t))},I(dn,"CollectSpliterators/1/lambda$1$Type",1159),D(1154,1,Ph,sit),h.Ad=function(t){return((16464|this.b)&t)!=0},h.yd=function(){return 16464|this.b},h.zd=function(){return this.a.zd()},h.Nb=function(t){this.a.Qe(new BZe(t,this.c))},h.Bd=function(t){return this.a.Re(new PZe(t,this.c))},h.b=0,I(dn,"CollectSpliterators/1WithCharacteristics",1154),D(1155,1,kP,PZe),h.Dd=function(t){this.a.Cd(this.b.td(t))},I(dn,"CollectSpliterators/1WithCharacteristics/lambda$0$Type",1155),D(1156,1,kP,BZe),h.Dd=function(t){this.a.Cd(this.b.td(t))},I(dn,"CollectSpliterators/1WithCharacteristics/lambda$1$Type",1156),D(1150,1,Ph),h.Ad=function(t){return(this.a&t)!=0},h.yd=function(){return this.a},h.zd=function(){return this.e&&(this.b=pye(this.b,this.e.zd())),pye(this.b,0)},h.Nb=function(t){this.e&&(this.e.Nb(t),this.e=null),this.c.Nb(new FZe(this,t)),this.b=0},h.Bd=function(t){for(;;){if(this.e&&this.e.Bd(t))return I_(this.b,EP)&&(this.b=Df(this.b,1)),!0;if(this.e=null,!this.c.Bd(new yie(this)))return!1}},h.a=0,h.b=0,I(dn,"CollectSpliterators/FlatMapSpliterator",1150),D(1152,1,fr,yie),h.Cd=function(t){Hfn(this.a,t)},I(dn,"CollectSpliterators/FlatMapSpliterator/lambda$0$Type",1152),D(1153,1,fr,FZe),h.Cd=function(t){gpn(this.a,this.b,t)},I(dn,"CollectSpliterators/FlatMapSpliterator/lambda$1$Type",1153),D(1151,1150,Ph,Cct),I(dn,"CollectSpliterators/FlatMapSpliteratorOfObject",1151),D(253,1,Ple),h.Fd=function(t){return this.Ed(l(t,253))},h.Ed=function(t){var n;return t==(Gie(),y0e)?1:t==(Uie(),w0e)?-1:(n=(Zq(),vN(this.a,t.a)),n!=0?n:De(this,526)==De(t,526)?0:De(this,526)?1:-1)},h.Id=function(){return this.a},h.Fb=function(t){return rxe(this,t)},I(dn,"Cut",253),D(1823,253,Ple,xJe),h.Ed=function(t){return t==this?0:1},h.Gd=function(t){throw ue(new Swe)},h.Hd=function(t){t.a+="+∞)"},h.Id=function(){throw ue(new nc(Iwt))},h.Hb=function(){return Vg(),q8e(this)},h.Jd=function(t){return!1},h.Ib=function(){return"+∞"};var w0e;I(dn,"Cut/AboveAll",1823),D(526,253,{253:1,526:1,3:1,34:1},Xnt),h.Gd=function(t){wu((t.a+="(",t),this.a)},h.Hd=function(t){hb(wu(t,this.a),93)},h.Hb=function(){return~es(this.a)},h.Jd=function(t){return Zq(),vN(this.a,t)<0},h.Ib=function(){return"/"+this.a+"\\"},I(dn,"Cut/AboveValue",526),D(1822,253,Ple,yJe),h.Ed=function(t){return t==this?0:-1},h.Gd=function(t){t.a+="(-∞"},h.Hd=function(t){throw ue(new Swe)},h.Id=function(){throw ue(new nc(Iwt))},h.Hb=function(){return Vg(),q8e(this)},h.Jd=function(t){return!0},h.Ib=function(){return"-∞"};var y0e;I(dn,"Cut/BelowAll",1822),D(1824,253,Ple,Qnt),h.Gd=function(t){wu((t.a+="[",t),this.a)},h.Hd=function(t){hb(wu(t,this.a),41)},h.Hb=function(){return es(this.a)},h.Jd=function(t){return Zq(),vN(this.a,t)<=0},h.Ib=function(){return"\\"+this.a+"/"},I(dn,"Cut/BelowValue",1824),D(547,1,hg),h.Jc=function(t){to(this,t)},h.Ib=function(){return L4n(l(_H(this,"use Optional.orNull() instead of Optional.or(null)"),20).Kc())},I(dn,"FluentIterable",547),D(442,547,hg,P_),h.Kc=function(){return new hr(dr(this.a.Kc(),new j))},I(dn,"FluentIterable/2",442),D(1059,547,hg,snt),h.Kc=function(){return rg(this)},I(dn,"FluentIterable/3",1059),D(724,399,tT,Aye),h.Xb=function(t){return this.a[t].Kc()},I(dn,"FluentIterable/3/1",724),D(2070,1,{}),h.Ib=function(){return xc(this.Kd().b)},I(dn,"ForwardingObject",2070),D(2071,2070,Owt),h.Kd=function(){return this.Ld()},h.Jc=function(t){to(this,t)},h.Lc=function(){return this.Oc()},h.Nc=function(){return new kn(this,0)},h.Oc=function(){return new bn(null,this.Nc())},h.Fc=function(t){return this.Ld(),oZe()},h.Gc=function(t){return this.Ld(),cZe()},h.$b=function(){this.Ld(),uZe()},h.Hc=function(t){return this.Ld().Hc(t)},h.Ic=function(t){return this.Ld().Ic(t)},h.dc=function(){return this.Ld().b.dc()},h.Kc=function(){return this.Ld().Kc()},h.Mc=function(t){return this.Ld(),lZe()},h.gc=function(){return this.Ld().b.gc()},h.Pc=function(){return this.Ld().Pc()},h.Qc=function(t){return this.Ld().Qc(t)},I(dn,"ForwardingCollection",2071),D(2078,31,tEe),h.Kc=function(){return this.Od()},h.Fc=function(t){throw ue(new Qr)},h.Gc=function(t){throw ue(new Qr)},h.Md=function(){var t;return t=this.c,t||(this.c=this.Nd())},h.$b=function(){throw ue(new Qr)},h.Hc=function(t){return t!=null&&Ny(this,t,!1)},h.Nd=function(){switch(this.gc()){case 0:return ww(),ww(),x0e;case 1:return ww(),new Sae(Xr(this.Od().Pb()));default:return new o5e(this,this.Pc())}},h.Mc=function(t){throw ue(new Qr)},I(dn,"ImmutableCollection",2078),D(727,2078,tEe,Twe),h.Kc=function(){return cx(this.a.Kc())},h.Hc=function(t){return t!=null&&this.a.Hc(t)},h.Ic=function(t){return this.a.Ic(t)},h.dc=function(){return this.a.dc()},h.Od=function(){return cx(this.a.Kc())},h.gc=function(){return this.a.gc()},h.Pc=function(){return this.a.Pc()},h.Qc=function(t){return this.a.Qc(t)},h.Ib=function(){return xc(this.a)},I(dn,"ForwardingImmutableCollection",727),D(307,2078,nT),h.Kc=function(){return this.Od()},h.ed=function(){return this.Pd(0)},h.fd=function(t){return this.Pd(t)},h.jd=function(t){$m(this,t)},h.Nc=function(){return new kn(this,16)},h.kd=function(t,n){return this.Qd(t,n)},h.bd=function(t,n){throw ue(new Qr)},h.cd=function(t,n){throw ue(new Qr)},h.Md=function(){return this},h.Fb=function(t){return VEn(this,t)},h.Hb=function(){return R3n(this)},h.dd=function(t){return t==null?-1:o7n(this,t)},h.Od=function(){return this.Pd(0)},h.Pd=function(t){return iae(this,t)},h.gd=function(t){throw ue(new Qr)},h.hd=function(t,n){throw ue(new Qr)},h.Qd=function(t,n){var r;return RV((r=new KZe(this),new Zp(r,t,n)))};var x0e;I(dn,"ImmutableList",307),D(2105,307,nT),h.Kc=function(){return cx(this.Rd().Kc())},h.kd=function(t,n){return RV(this.Rd().kd(t,n))},h.Hc=function(t){return t!=null&&this.Rd().Hc(t)},h.Ic=function(t){return this.Rd().Ic(t)},h.Fb=function(t){return Pi(this.Rd(),t)},h.Xb=function(t){return ab(this,t)},h.Hb=function(){return es(this.Rd())},h.dd=function(t){return this.Rd().dd(t)},h.dc=function(){return this.Rd().dc()},h.Od=function(){return cx(this.Rd().Kc())},h.gc=function(){return this.Rd().gc()},h.Qd=function(t,n){return RV(this.Rd().kd(t,n))},h.Pc=function(){return this.Rd().Qc(We(wa,Rn,1,this.Rd().gc(),5,1))},h.Qc=function(t){return this.Rd().Qc(t)},h.Ib=function(){return xc(this.Rd())},I(dn,"ForwardingImmutableList",2105),D(729,1,rT),h.vc=function(){return Mm(this)},h.wc=function(t){mA(this,t)},h.ec=function(){return Oae(this)},h.yc=function(t,n,r){return qce(this,t,n,r)},h.Cc=function(){return this.Vd()},h.$b=function(){throw ue(new Qr)},h._b=function(t){return this.xc(t)!=null},h.uc=function(t){return this.Vd().Hc(t)},h.Td=function(){return new LQe(this)},h.Ud=function(){return new MQe(this)},h.Fb=function(t){return Myn(this,t)},h.Hb=function(){return Mm(this).Hb()},h.dc=function(){return this.gc()==0},h.zc=function(t,n){return hun()},h.Bc=function(t){throw ue(new Qr)},h.Ib=function(){return m9n(this)},h.Vd=function(){return this.e?this.e:this.e=this.Ud()},h.c=null,h.d=null,h.e=null;var i6t;I(dn,"ImmutableMap",729),D(730,729,rT),h._b=function(t){return sZe(this,t)},h.uc=function(t){return ZZe(this.b,t)},h.Sd=function(){return t1t(new vie(this))},h.Td=function(){return t1t(mat(this.b))},h.Ud=function(){return wd(),new Twe(bat(this.b))},h.Fb=function(t){return eet(this.b,t)},h.xc=function(t){return H_(this,t)},h.Hb=function(){return es(this.b.c)},h.dc=function(){return this.b.c.dc()},h.gc=function(){return this.b.c.gc()},h.Ib=function(){return xc(this.b.c)},I(dn,"ForwardingImmutableMap",730),D(2072,2071,Ble),h.Kd=function(){return this.Wd()},h.Ld=function(){return this.Wd()},h.Nc=function(){return new kn(this,1)},h.Fb=function(t){return t===this||this.Wd().Fb(t)},h.Hb=function(){return this.Wd().Hb()},I(dn,"ForwardingSet",2072),D(1085,2072,Ble,vie),h.Kd=function(){return Kk(this.a.b)},h.Ld=function(){return Kk(this.a.b)},h.Hc=function(t){if(De(t,44)&&l(t,44).ld()==null)return!1;try{return JZe(Kk(this.a.b),t)}catch(n){if(n=bs(n),De(n,212))return!1;throw ue(n)}},h.Wd=function(){return Kk(this.a.b)},h.Qc=function(t){var n;return n=tot(Kk(this.a.b),t),Kk(this.a.b).b.gc()=0?"+":"")+(r/60|0),n=Iq(b.Math.abs(r)%60),(Vgt(),E6t)[this.q.getDay()]+" "+T6t[this.q.getMonth()]+" "+Iq(this.q.getDate())+" "+Iq(this.q.getHours())+":"+Iq(this.q.getMinutes())+":"+Iq(this.q.getSeconds())+" GMT"+t+n+" "+this.q.getFullYear()};var cK=I(Lr,"Date",206);D(2015,206,qwt,dgt),h.a=!1,h.b=0,h.c=0,h.d=0,h.e=0,h.f=0,h.g=!1,h.i=0,h.j=0,h.k=0,h.n=0,h.o=0,h.p=0,I("com.google.gwt.i18n.shared.impl","DateRecord",2015),D(2064,1,{}),h.pe=function(){return null},h.qe=function(){return null},h.re=function(){return null},h.se=function(){return null},h.te=function(){return null},I(Ax,"JSONValue",2064),D(221,2064,{221:1},$p,Sz),h.Fb=function(t){return De(t,221)?W5e(this.a,l(t,221).a):!1},h.oe=function(){return Bcn},h.Hb=function(){return F5e(this.a)},h.pe=function(){return this},h.Ib=function(){var t,n,r;for(r=new Th("["),n=0,t=this.a.length;n0&&(r.a+=","),wu(r,_y(this,n));return r.a+="]",r.a},I(Ax,"JSONArray",221),D(493,2064,{493:1},jc),h.oe=function(){return Fcn},h.qe=function(){return this},h.Ib=function(){return Hn(),""+this.a},h.a=!1;var h6t,f6t;I(Ax,"JSONBoolean",493),D(997,63,lp,LJe),I(Ax,"JSONException",997),D(1036,2064,{},W),h.oe=function(){return Rcn},h.Ib=function(){return ul};var d6t;I(Ax,"JSONNull",1036),D(263,2064,{263:1},vk),h.Fb=function(t){return De(t,263)?this.a==l(t,263).a:!1},h.oe=function(){return Ncn},h.Hb=function(){return j8(this.a)},h.re=function(){return this},h.Ib=function(){return this.a+""},h.a=0,I(Ax,"JSONNumber",263),D(190,2064,{190:1},M8,wk),h.Fb=function(t){return De(t,190)?W5e(this.a,l(t,190).a):!1},h.oe=function(){return Pcn},h.Hb=function(){return F5e(this.a)},h.se=function(){return this},h.Ib=function(){var t,n,r,a,o,f,g;for(g=new Th("{"),t=!0,f=ace(this,We(zt,dt,2,0,6,1)),r=f,a=0,o=r.length;a=0?":"+this.c:"")+")"},h.c=0;var a_e=I(Vc,"StackTraceElement",319);r6t={3:1,484:1,34:1,2:1};var zt=I(Vc,nEe,2);D(111,427,{484:1},Up,h_,Af),I(Vc,"StringBuffer",111),D(104,427,{484:1},tb,S5,Th),I(Vc,"StringBuilder",104),D(702,77,she,e3e),I(Vc,"StringIndexOutOfBoundsException",702),D(2145,1,{});var m6t;D(48,63,{3:1,103:1,63:1,82:1,48:1},Qr,Hp),I(Vc,"UnsupportedOperationException",48),D(247,242,{3:1,34:1,242:1,247:1},NN,h3e),h.Fd=function(t){return Fmt(this,l(t,247))},h.ue=function(){return jy(hvt(this))},h.Fb=function(t){var n;return this===t?!0:De(t,247)?(n=l(t,247),this.e==n.e&&Fmt(this,n)==0):!1},h.Hb=function(){var t;return this.b!=0?this.b:this.a<54?(t=Zc(this.f),this.b=Yr(va(t,-1)),this.b=33*this.b+Yr(va(bw(t,32),-1)),this.b=17*this.b+ua(this.e),this.b):(this.b=17*X0t(this.c)+ua(this.e),this.b)},h.Ib=function(){return hvt(this)},h.a=0,h.b=0,h.d=0,h.e=0,h.f=0;var v6t,lv,o_e,c_e,u_e,l_e,h_e,f_e,L0e=I("java.math","BigDecimal",247);D(92,242,{3:1,34:1,242:1,92:1},Qg,qot,Im,Q1t,ob),h.Fd=function(t){return K1t(this,l(t,92))},h.ue=function(){return jy(Dle(this,0))},h.Fb=function(t){return C8e(this,t)},h.Hb=function(){return X0t(this)},h.Ib=function(){return Dle(this,0)},h.b=-2,h.c=0,h.d=0,h.e=0;var w6t,uK,y6t,M0e,lK,BL,A6=I("java.math","BigInteger",92),x6t,k6t,$x,FL;D(498,2065,Ww),h.$b=function(){Nl(this)},h._b=function(t){return Hu(this,t)},h.uc=function(t){return D0t(this,t,this.i)||D0t(this,t,this.f)},h.vc=function(){return new Sr(this)},h.xc=function(t){return cr(this,t)},h.zc=function(t,n){return ki(this,t,n)},h.Bc=function(t){return ax(this,t)},h.gc=function(){return d_(this)},h.g=0,I(Lr,"AbstractHashMap",498),D(267,q1,Tl,Sr),h.$b=function(){this.a.$b()},h.Hc=function(t){return vct(this,t)},h.Kc=function(){return new qm(this.a)},h.Mc=function(t){var n;return vct(this,t)?(n=l(t,44).ld(),this.a.Bc(n),!0):!1},h.gc=function(){return this.a.gc()},I(Lr,"AbstractHashMap/EntrySet",267),D(268,1,Oa,qm),h.Nb=function(t){Za(this,t)},h.Pb=function(){return Nw(this)},h.Ob=function(){return this.b},h.Qb=function(){Klt(this)},h.b=!1,h.d=0,I(Lr,"AbstractHashMap/EntrySetIterator",268),D(426,1,Oa,kr),h.Nb=function(t){Za(this,t)},h.Ob=function(){return lse(this)},h.Pb=function(){return I5e(this)},h.Qb=function(){ph(this)},h.b=0,h.c=-1,I(Lr,"AbstractList/IteratorImpl",426),D(98,426,lg,Ua),h.Qb=function(){ph(this)},h.Rb=function(t){by(this,t)},h.Sb=function(){return this.b>0},h.Tb=function(){return this.b},h.Ub=function(){return mr(this.b>0),this.a.Xb(this.c=--this.b)},h.Vb=function(){return this.b-1},h.Wb=function(t){gy(this.c!=-1),this.a.hd(this.c,t)},I(Lr,"AbstractList/ListIteratorImpl",98),D(244,56,iT,Zp),h.bd=function(t,n){Ey(t,this.b),this.c.bd(this.a+t,n),++this.b},h.Xb=function(t){return Sn(t,this.b),this.c.Xb(this.a+t)},h.gd=function(t){var n;return Sn(t,this.b),n=this.c.gd(this.a+t),--this.b,n},h.hd=function(t,n){return Sn(t,this.b),this.c.hd(this.a+t,n)},h.gc=function(){return this.b},h.a=0,h.b=0,I(Lr,"AbstractList/SubList",244),D(266,q1,Tl,br),h.$b=function(){this.a.$b()},h.Hc=function(t){return this.a._b(t)},h.Kc=function(){var t;return t=this.a.vc().Kc(),new Mi(t)},h.Mc=function(t){return this.a._b(t)?(this.a.Bc(t),!0):!1},h.gc=function(){return this.a.gc()},I(Lr,"AbstractMap/1",266),D(541,1,Oa,Mi),h.Nb=function(t){Za(this,t)},h.Ob=function(){return this.a.Ob()},h.Pb=function(){var t;return t=l(this.a.Pb(),44),t.ld()},h.Qb=function(){this.a.Qb()},I(Lr,"AbstractMap/1/1",541),D(231,31,Wy,gi),h.$b=function(){this.a.$b()},h.Hc=function(t){return this.a.uc(t)},h.Kc=function(){var t;return t=this.a.vc().Kc(),new fs(t)},h.gc=function(){return this.a.gc()},I(Lr,"AbstractMap/2",231),D(301,1,Oa,fs),h.Nb=function(t){Za(this,t)},h.Ob=function(){return this.a.Ob()},h.Pb=function(){var t;return t=l(this.a.Pb(),44),t.md()},h.Qb=function(){this.a.Qb()},I(Lr,"AbstractMap/2/1",301),D(494,1,{494:1,44:1}),h.Fb=function(t){var n;return De(t,44)?(n=l(t,44),Jc(this.d,n.ld())&&Jc(this.e,n.md())):!1},h.ld=function(){return this.d},h.md=function(){return this.e},h.Hb=function(){return R5(this.d)^R5(this.e)},h.nd=function(t){return Zye(this,t)},h.Ib=function(){return this.d+"="+this.e},I(Lr,"AbstractMap/AbstractEntry",494),D(397,494,{494:1,397:1,44:1},cq),I(Lr,"AbstractMap/SimpleEntry",397),D(2082,1,che),h.Fb=function(t){var n;return De(t,44)?(n=l(t,44),Jc(this.ld(),n.ld())&&Jc(this.md(),n.md())):!1},h.Hb=function(){return R5(this.ld())^R5(this.md())},h.Ib=function(){return this.ld()+"="+this.md()},I(Lr,Mwt,2082),D(2090,2065,Zke),h.Xc=function(t){return rse(this.Ee(t))},h.tc=function(t){return Tut(this,t)},h._b=function(t){return e4e(this,t)},h.vc=function(){return new Rs(this)},h.Tc=function(){return Rst(this.Ge())},h.Yc=function(t){return rse(this.He(t))},h.xc=function(t){var n;return n=t,hc(this.Fe(n))},h.$c=function(t){return rse(this.Ie(t))},h.ec=function(){return new Fs(this)},h.Vc=function(){return Rst(this.Je())},h._c=function(t){return rse(this.Ke(t))},I(Lr,"AbstractNavigableMap",2090),D(629,q1,Tl,Rs),h.Hc=function(t){return De(t,44)&&Tut(this.b,l(t,44))},h.Kc=function(){return this.b.De()},h.Mc=function(t){var n;return De(t,44)?(n=l(t,44),this.b.Le(n)):!1},h.gc=function(){return this.b.gc()},I(Lr,"AbstractNavigableMap/EntrySet",629),D(1146,q1,eEe,Fs),h.Nc=function(){return new aq(this)},h.$b=function(){this.a.$b()},h.Hc=function(t){return e4e(this.a,t)},h.Kc=function(){var t;return t=this.a.vc().b.De(),new xs(t)},h.Mc=function(t){return e4e(this.a,t)?(this.a.Bc(t),!0):!1},h.gc=function(){return this.a.gc()},I(Lr,"AbstractNavigableMap/NavigableKeySet",1146),D(1147,1,Oa,xs),h.Nb=function(t){Za(this,t)},h.Ob=function(){return lse(this.a.a)},h.Pb=function(){var t;return t=ort(this.a),t.ld()},h.Qb=function(){dit(this.a)},I(Lr,"AbstractNavigableMap/NavigableKeySet/1",1147),D(2103,31,Wy),h.Fc=function(t){return K8($E(this,t),aT),!0},h.Gc=function(t){return nr(t),BO(t!=this,"Can't add a queue to itself"),Ka(this,t)},h.$b=function(){for(;Koe(this)!=null;);},I(Lr,"AbstractQueue",2103),D(310,31,{4:1,20:1,31:1,16:1},z5,dct),h.Fc=function(t){return i6e(this,t),!0},h.$b=function(){l6e(this)},h.Hc=function(t){return Zft(new nA(this),t)},h.dc=function(){return l_(this)},h.Kc=function(){return new nA(this)},h.Mc=function(t){return w2n(new nA(this),t)},h.gc=function(){return this.c-this.b&this.a.length-1},h.Nc=function(){return new kn(this,272)},h.Qc=function(t){var n;return n=this.c-this.b&this.a.length-1,t.lengthn&&Ts(t,n,null),t},h.b=0,h.c=0,I(Lr,"ArrayDeque",310),D(459,1,Oa,nA),h.Nb=function(t){Za(this,t)},h.Ob=function(){return this.a!=this.b},h.Pb=function(){return FV(this)},h.Qb=function(){Yht(this)},h.a=0,h.b=0,h.c=-1,I(Lr,"ArrayDeque/IteratorImpl",459),D(13,56,Uwt,bt,Bu,Ol),h.bd=function(t,n){pw(this,t,n)},h.Fc=function(t){return vt(this,t)},h.cd=function(t,n){return Q7e(this,t,n)},h.Gc=function(t){return ra(this,t)},h.$b=function(){ay(this.c,0)},h.Hc=function(t){return gc(this,t,0)!=-1},h.Jc=function(t){Vu(this,t)},h.Xb=function(t){return jt(this,t)},h.dd=function(t){return gc(this,t,0)},h.dc=function(){return this.c.length==0},h.Kc=function(){return new G(this)},h.gd=function(t){return t2(this,t)},h.Mc=function(t){return al(this,t)},h.ce=function(t,n){Bot(this,t,n)},h.hd=function(t,n){return rf(this,t,n)},h.gc=function(){return this.c.length},h.jd=function(t){Vs(this,t)},h.Pc=function(){return eH(this.c)},h.Qc=function(t){return j1(this,t)};var cOn=I(Lr,"ArrayList",13);D(7,1,Oa,G),h.Nb=function(t){Za(this,t)},h.Ob=function(){return Lc(this)},h.Pb=function(){return re(this)},h.Qb=function(){Q_(this)},h.a=0,h.b=-1,I(Lr,"ArrayList/1",7),D(2112,b.Function,{},Pe),h.Me=function(t,n){return Yi(t,n)},D(151,56,Gwt,Il),h.Hc=function(t){return Xht(this,t)!=-1},h.Jc=function(t){var n,r,a,o;for(nr(t),r=this.a,a=0,o=r.length;a0)throw ue(new Yn(lEe+t+" greater than "+this.e));return this.f.Te()?sot(this.c,this.b,this.a,t,n):Fot(this.c,t,n)},h.zc=function(t,n){if(!xue(this.c,this.f,t,this.b,this.a,this.e,this.d))throw ue(new Yn(t+" outside the range "+this.b+" to "+this.e));return b0t(this.c,t,n)},h.Bc=function(t){var n;return n=t,xue(this.c,this.f,n,this.b,this.a,this.e,this.d)?aot(this.c,n):null},h.Le=function(t){return yH(this,t.ld())&&L6e(this.c,t)},h.gc=function(){var t,n,r;if(this.f.Te()?this.a?n=OE(this.c,this.b,!0):n=OE(this.c,this.b,!1):n=j6e(this.c),!(n&&yH(this,n.d)&&n))return 0;for(t=0,r=new oce(this.c,this.f,this.b,this.a,this.e,this.d);lse(r.a);r.b=l(I5e(r.a),44))++t;return t},h.ad=function(t,n){if(this.f.Te()&&this.c.a.Ne(t,this.b)<0)throw ue(new Yn(lEe+t+Ywt+this.b));return this.f.Ue()?sot(this.c,t,n,this.e,this.d):Rot(this.c,t,n)},h.a=!1,h.d=!1,I(Lr,"TreeMap/SubMap",631),D(304,22,fhe,oq),h.Te=function(){return!1},h.Ue=function(){return!1};var O0e,N0e,P0e,B0e,fK=Fr(Lr,"TreeMap/SubMapType",304,Hr,Gbn,n0n);D(1143,304,fhe,hnt),h.Ue=function(){return!0},Fr(Lr,"TreeMap/SubMapType/1",1143,fK,null,null),D(1144,304,fhe,ynt),h.Te=function(){return!0},h.Ue=function(){return!0},Fr(Lr,"TreeMap/SubMapType/2",1144,fK,null,null),D(1145,304,fhe,lnt),h.Te=function(){return!0},Fr(Lr,"TreeMap/SubMapType/3",1145,fK,null,null);var M6t;D(157,q1,{3:1,20:1,31:1,16:1,277:1,21:1,87:1,157:1},Lwe,Kp,ba),h.Nc=function(){return new aq(this)},h.Fc=function(t){return jO(this,t)},h.$b=function(){this.a.$b()},h.Hc=function(t){return this.a._b(t)},h.Kc=function(){return this.a.ec().Kc()},h.Mc=function(t){return tae(this,t)},h.gc=function(){return this.a.gc()};var gOn=I(Lr,"TreeSet",157);D(1082,1,{},xo),h.Ve=function(t,n){return wfn(this.a,t,n)},I(dhe,"BinaryOperator/lambda$0$Type",1082),D(1083,1,{},lh),h.Ve=function(t,n){return yfn(this.a,t,n)},I(dhe,"BinaryOperator/lambda$1$Type",1083),D(952,1,{},Pt),h.Kb=function(t){return t},I(dhe,"Function/lambda$0$Type",952),D(395,1,ti,Wl),h.Mb=function(t){return!this.a.Mb(t)},I(dhe,"Predicate/lambda$2$Type",395),D(581,1,{581:1});var D6t=I(aL,"Handler",581);D(2107,1,yP),h.xe=function(){return"DUMMY"},h.Ib=function(){return this.xe()};var w_e;I(aL,"Level",2107),D(1706,2107,yP,Qe),h.xe=function(){return"INFO"},I(aL,"Level/LevelInfo",1706),D(1843,1,{},FQe);var F0e;I(aL,"LogManager",1843),D(1896,1,yP,fit),h.b=null,I(aL,"LogRecord",1896),D(525,1,{525:1},Soe),h.e=!1;var I6t=!1,O6t=!1,G1=!1,N6t=!1,P6t=!1;I(aL,"Logger",525),D(835,581,{581:1},Dt),I(aL,"SimpleConsoleLogHandler",835),D(108,22,{3:1,34:1,22:1,108:1},dse);var y_e,Ec,i4,oc=Fr(sa,"Collector/Characteristics",108,Hr,O2n,r0n),B6t;D(758,1,{},h5e),I(sa,"CollectorImpl",758),D(1074,1,{},kt),h.Ve=function(t,n){return d4n(l(t,213),l(n,213))},I(sa,"Collectors/10methodref$merge$Type",1074),D(1075,1,{},On),h.Kb=function(t){return gct(l(t,213))},I(sa,"Collectors/11methodref$toString$Type",1075),D(1076,1,{},Z2),h.Kb=function(t){return Hn(),!!sye(t)},I(sa,"Collectors/12methodref$test$Type",1076),D(144,1,{},ht),h.Yd=function(t,n){l(t,16).Fc(n)},I(sa,"Collectors/20methodref$add$Type",144),D(146,1,{},zr),h.Xe=function(){return new bt},I(sa,"Collectors/21methodref$ctor$Type",146),D(359,1,{},yt),h.Xe=function(){return new Ks},I(sa,"Collectors/23methodref$ctor$Type",359),D(360,1,{},ji),h.Yd=function(t,n){na(l(t,49),n)},I(sa,"Collectors/24methodref$add$Type",360),D(1069,1,{},xi),h.Ve=function(t,n){return ret(l(t,15),l(n,16))},I(sa,"Collectors/4methodref$addAll$Type",1069),D(1073,1,{},Ma),h.Yd=function(t,n){Jg(l(t,213),l(n,484))},I(sa,"Collectors/9methodref$add$Type",1073),D(1072,1,{},Lit),h.Xe=function(){return new Hm(this.a,this.b,this.c)},I(sa,"Collectors/lambda$15$Type",1072),D(1077,1,{},zs),h.Xe=function(){var t;return t=new e2,h2(t,(Hn(),!1),new bt),h2(t,!0,new bt),t},I(sa,"Collectors/lambda$22$Type",1077),D(1078,1,{},eb),h.Xe=function(){return he(le(wa,1),Rn,1,5,[this.a])},I(sa,"Collectors/lambda$25$Type",1078),D(1079,1,{},G0),h.Yd=function(t,n){jdn(this.a,jm(t))},I(sa,"Collectors/lambda$26$Type",1079),D(1080,1,{},zp),h.Ve=function(t,n){return dgn(this.a,jm(t),jm(n))},I(sa,"Collectors/lambda$27$Type",1080),D(1081,1,{},ao),h.Kb=function(t){return jm(t)[0]},I(sa,"Collectors/lambda$28$Type",1081),D(728,1,{},Tr),h.Ve=function(t,n){return U4e(t,n)},I(sa,"Collectors/lambda$4$Type",728),D(145,1,{},Fn),h.Ve=function(t,n){return Wun(l(t,16),l(n,16))},I(sa,"Collectors/lambda$42$Type",145),D(361,1,{},qn),h.Ve=function(t,n){return Yun(l(t,49),l(n,49))},I(sa,"Collectors/lambda$50$Type",361),D(362,1,{},Un),h.Kb=function(t){return l(t,49)},I(sa,"Collectors/lambda$51$Type",362),D(1068,1,{},fd),h.Yd=function(t,n){wyn(this.a,l(t,85),n)},I(sa,"Collectors/lambda$7$Type",1068),D(1070,1,{},At),h.Ve=function(t,n){return Y3n(l(t,85),l(n,85),new xi)},I(sa,"Collectors/lambda$8$Type",1070),D(1071,1,{},Wv),h.Kb=function(t){return G4n(this.a,l(t,85))},I(sa,"Collectors/lambda$9$Type",1071),D(550,1,{}),h.$e=function(){tA(this)},h.d=!1,I(sa,"TerminatableStream",550),D(827,550,hEe,Vye),h.$e=function(){tA(this)},I(sa,"DoubleStreamImpl",827),D(1847,736,Ph,Mit),h.Re=function(t){return Y6n(this,l(t,189))},h.a=null,I(sa,"DoubleStreamImpl/2",1847),D(1848,1,LP,sy),h.Pe=function(t){qln(this.a,t)},I(sa,"DoubleStreamImpl/2/lambda$0$Type",1848),D(1845,1,LP,E8),h.Pe=function(t){zln(this.a,t)},I(sa,"DoubleStreamImpl/lambda$0$Type",1845),D(1846,1,LP,x5),h.Pe=function(t){M1t(this.a,t)},I(sa,"DoubleStreamImpl/lambda$2$Type",1846),D(1397,735,Ph,wut),h.Re=function(t){return Pbn(this,l(t,202))},h.a=0,h.b=0,h.c=0,I(sa,"IntStream/5",1397),D(806,550,hEe,Uye),h.$e=function(){tA(this)},h._e=function(){return fb(this),this.a},I(sa,"IntStreamImpl",806),D(807,550,hEe,b3e),h.$e=function(){tA(this)},h._e=function(){return fb(this),Sye(),L6t},I(sa,"IntStreamImpl/Empty",807),D(1687,1,kP,T8),h.Dd=function(t){$ft(this.a,t)},I(sa,"IntStreamImpl/lambda$4$Type",1687);var pOn=ks(sa,"Stream");D(26,550,{533:1,687:1,848:1},bn),h.$e=function(){tA(this)};var zx;I(sa,"StreamImpl",26),D(1102,500,Ph,iit),h.Bd=function(t){for(;Rvn(this);){if(this.a.Bd(t))return!0;tA(this.b),this.b=null,this.a=null}return!1},I(sa,"StreamImpl/1",1102),D(1103,1,fr,ZS),h.Cd=function(t){hdn(this.a,l(t,848))},I(sa,"StreamImpl/1/lambda$0$Type",1103),D(1104,1,ti,k5),h.Mb=function(t){return na(this.a,t)},I(sa,"StreamImpl/1methodref$add$Type",1104),D(1105,500,Ph,Rat),h.Bd=function(t){var n;return this.a||(n=new bt,this.b.a.Nb(new Qd(n)),Cn(),Vs(n,this.c),this.a=new kn(n,16)),xht(this.a,t)},h.a=null,I(sa,"StreamImpl/5",1105),D(1106,1,fr,Qd),h.Cd=function(t){vt(this.a,t)},I(sa,"StreamImpl/5/2methodref$add$Type",1106),D(737,500,Ph,$6e),h.Bd=function(t){for(this.b=!1;!this.b&&this.c.Bd(new xet(this,t)););return this.b},h.b=!1,I(sa,"StreamImpl/FilterSpliterator",737),D(1096,1,fr,xet),h.Cd=function(t){ogn(this.a,this.b,t)},I(sa,"StreamImpl/FilterSpliterator/lambda$0$Type",1096),D(1091,736,Ph,Mut),h.Re=function(t){return zfn(this,l(t,189))},I(sa,"StreamImpl/MapToDoubleSpliterator",1091),D(1095,1,fr,ket),h.Cd=function(t){hln(this.a,this.b,t)},I(sa,"StreamImpl/MapToDoubleSpliterator/lambda$0$Type",1095),D(1090,735,Ph,Dut),h.Re=function(t){return qfn(this,l(t,202))},I(sa,"StreamImpl/MapToIntSpliterator",1090),D(1094,1,fr,Eet),h.Cd=function(t){fln(this.a,this.b,t)},I(sa,"StreamImpl/MapToIntSpliterator/lambda$0$Type",1094),D(734,500,Ph,C6e),h.Bd=function(t){return tit(this,t)},I(sa,"StreamImpl/MapToObjSpliterator",734),D(1093,1,fr,Tet),h.Cd=function(t){dln(this.a,this.b,t)},I(sa,"StreamImpl/MapToObjSpliterator/lambda$0$Type",1093),D(1092,500,Ph,aft),h.Bd=function(t){for(;hse(this.b,0);){if(!this.a.Bd(new wt))return!1;this.b=Df(this.b,1)}return this.a.Bd(t)},h.b=0,I(sa,"StreamImpl/SkipSpliterator",1092),D(1097,1,fr,wt),h.Cd=function(t){},I(sa,"StreamImpl/SkipSpliterator/lambda$0$Type",1097),D(626,1,fr,on),h.Cd=function(t){Eie(this,t)},I(sa,"StreamImpl/ValueConsumer",626),D(1098,1,fr,fn),h.Cd=function(t){Am()},I(sa,"StreamImpl/lambda$0$Type",1098),D(1099,1,fr,An),h.Cd=function(t){Am()},I(sa,"StreamImpl/lambda$1$Type",1099),D(1100,1,{},_1),h.Ve=function(t,n){return y0n(this.a,t,n)},I(sa,"StreamImpl/lambda$4$Type",1100),D(1101,1,fr,Cet),h.Cd=function(t){Sfn(this.b,this.a,t)},I(sa,"StreamImpl/lambda$5$Type",1101),D(1107,1,fr,Jd),h.Cd=function(t){F3n(this.a,l(t,380))},I(sa,"TerminatableStream/lambda$0$Type",1107),D(2142,1,{}),D(2014,1,{},oo),I("javaemul.internal","ConsoleLogger",2014);var bOn=0;D(2134,1,{}),D(1830,1,fr,jo),h.Cd=function(t){l(t,317)},I(oT,"BowyerWatsonTriangulation/lambda$0$Type",1830),D(1831,1,fr,Em),h.Cd=function(t){Ka(this.a,l(t,317).e)},I(oT,"BowyerWatsonTriangulation/lambda$1$Type",1831),D(1832,1,fr,$o),h.Cd=function(t){l(t,177)},I(oT,"BowyerWatsonTriangulation/lambda$2$Type",1832),D(1827,1,ii,Lz),h.Ne=function(t,n){return ymn(this.a,l(t,177),l(n,177))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(oT,"NaiveMinST/lambda$0$Type",1827),D(449,1,{},Yv),I(oT,"NodeMicroLayout",449),D(177,1,{177:1},B8),h.Fb=function(t){var n;return De(t,177)?(n=l(t,177),Jc(this.a,n.a)&&Jc(this.b,n.b)||Jc(this.a,n.b)&&Jc(this.b,n.a)):!1},h.Hb=function(){return R5(this.a)+R5(this.b)};var mOn=I(oT,"TEdge",177);D(317,1,{317:1},Cke),h.Fb=function(t){var n;return De(t,317)?(n=l(t,317),rV(this,n.a)&&rV(this,n.b)&&rV(this,n.c)):!1},h.Hb=function(){return R5(this.a)+R5(this.b)+R5(this.c)},I(oT,"TTriangle",317),D(225,1,{225:1},Nq),I(oT,"Tree",225),D(1218,1,{},Eot),I(Jwt,"Scanline",1218);var F6t=ks(Jwt,Zwt);D(1758,1,{},vht),I(gg,"CGraph",1758),D(316,1,{316:1},Sot),h.b=0,h.c=0,h.d=0,h.g=0,h.i=0,h.k=ia,I(gg,"CGroup",316),D(830,1,{},Iwe),I(gg,"CGroup/CGroupBuilder",830),D(60,1,{60:1},Rrt),h.Ib=function(){var t;return this.j?ei(this.j.Kb(this)):(Gg(dK),dK.o+"@"+(t=fw(this)>>>0,t.toString(16)))},h.f=0,h.i=ia;var dK=I(gg,"CNode",60);D(829,1,{},Owe),I(gg,"CNode/CNodeBuilder",829);var R6t;D(1590,1,{},Pa),h.ff=function(t,n){return 0},h.gf=function(t,n){return 0},I(gg,t3t,1590),D(1853,1,{},wo),h.cf=function(t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te;for(C=gs,a=new G(t.a.b);a.aa.d.c||a.d.c==f.d.c&&a.d.b0?t+this.n.d+this.n.a:0},h.kf=function(){var t,n,r,a,o;if(o=0,this.e)this.b?o=this.b.a:this.a[1][1]&&(o=this.a[1][1].kf());else if(this.g)o=E8e(this,Eue(this,null,!0));else for(n=(t1(),he(le(s4,1),it,237,0,[Gc,$u,Kc])),r=0,a=n.length;r0?o+this.n.b+this.n.c:0},h.lf=function(){var t,n,r,a,o;if(this.g)for(t=Eue(this,null,!1),r=(t1(),he(le(s4,1),it,237,0,[Gc,$u,Kc])),a=0,o=r.length;a0&&(a[0]+=this.d,r-=a[0]),a[2]>0&&(a[2]+=this.d,r-=a[2]),this.c.a=b.Math.max(0,r),this.c.d=n.d+t.d+(this.c.a-r)/2,a[1]=b.Math.max(a[1],r),x6e(this,$u,n.d+t.d+a[0]-(a[1]-r)/2,a)},h.b=null,h.d=0,h.e=!1,h.f=!1,h.g=!1;var q0e=0,gK=0;I(ev,"GridContainerCell",1538),D(471,22,{3:1,34:1,22:1,471:1},pse);var Bb,Fd,v0,W6t=Fr(ev,"HorizontalLabelAlignment",471,Hr,P2n,c0n),Y6t;D(314,217,{217:1,314:1},uot,yht,not),h.jf=function(){return Hit(this)},h.kf=function(){return j4e(this)},h.a=0,h.c=!1;var vOn=I(ev,"LabelCell",314);D(252,336,{217:1,336:1,252:1},DA),h.jf=function(){return tP(this)},h.kf=function(){return nP(this)},h.lf=function(){hle(this)},h.mf=function(){fle(this)},h.b=0,h.c=0,h.d=!1,I(ev,"StripContainerCell",252),D(1691,1,ti,Xc),h.Mb=function(t){return cun(l(t,217))},I(ev,"StripContainerCell/lambda$0$Type",1691),D(1692,1,{},Bc),h.Ye=function(t){return l(t,217).kf()},I(ev,"StripContainerCell/lambda$1$Type",1692),D(1693,1,ti,ja),h.Mb=function(t){return uun(l(t,217))},I(ev,"StripContainerCell/lambda$2$Type",1693),D(1694,1,{},Ou),h.Ye=function(t){return l(t,217).jf()},I(ev,"StripContainerCell/lambda$3$Type",1694),D(472,22,{3:1,34:1,22:1,472:1},bse);var w0,Fb,a1,X6t=Fr(ev,"VerticalLabelAlignment",472,Hr,N2n,u0n),Q6t;D(800,1,{},zke),h.c=0,h.d=0,h.k=0,h.s=0,h.t=0,h.v=!1,h.w=0,h.D=!1,I(tG,"NodeContext",800),D(1536,1,ii,Sa),h.Ne=function(t,n){return tnt(l(t,64),l(n,64))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(tG,"NodeContext/0methodref$comparePortSides$Type",1536),D(1537,1,ii,Po),h.Ne=function(t,n){return Rxn(l(t,117),l(n,117))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(tG,"NodeContext/1methodref$comparePortContexts$Type",1537),D(164,22,{3:1,34:1,22:1,164:1},of);var J6t,Z6t,e7t,t7t,n7t,r7t,i7t,s7t,a7t,o7t,c7t,u7t,l7t,h7t,f7t,d7t,g7t,p7t,b7t,m7t,v7t,H0e,w7t=Fr(tG,"NodeLabelLocation",164,Hr,eue,l0n),y7t;D(117,1,{117:1},c2t),h.a=!1,I(tG,"PortContext",117),D(1541,1,fr,Fc),h.Cd=function(t){vZe(l(t,314))},I(DP,g3t,1541),D(1542,1,ti,xa),h.Mb=function(t){return!!l(t,117).c},I(DP,p3t,1542),D(1543,1,fr,Ba),h.Cd=function(t){vZe(l(t,117).c)},I(DP,"LabelPlacer/lambda$2$Type",1543);var q_e;D(1540,1,fr,ga),h.Cd=function(t){py(),zcn(l(t,117))},I(DP,"NodeLabelAndSizeUtilities/lambda$0$Type",1540),D(801,1,fr,v4e),h.Cd=function(t){tln(this.b,this.c,this.a,l(t,187))},h.a=!1,h.c=!1,I(DP,"NodeLabelCellCreator/lambda$0$Type",801),D(1539,1,fr,Die),h.Cd=function(t){Vcn(this.a,l(t,187))},I(DP,"PortContextCreator/lambda$0$Type",1539);var pK;D(1902,1,{},kh),I(uT,"GreedyRectangleStripOverlapRemover",1902),D(1903,1,ii,lu),h.Ne=function(t,n){return Ohn(l(t,226),l(n,226))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(uT,"GreedyRectangleStripOverlapRemover/0methodref$compareByYCoordinate$Type",1903),D(1849,1,{},zQe),h.a=5,h.e=0,I(uT,"RectangleStripOverlapRemover",1849),D(1850,1,ii,o5),h.Ne=function(t,n){return Nhn(l(t,226),l(n,226))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(uT,"RectangleStripOverlapRemover/0methodref$compareLeftRectangleBorders$Type",1850),D(1852,1,ii,Wh),h.Ne=function(t,n){return Egn(l(t,226),l(n,226))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(uT,"RectangleStripOverlapRemover/1methodref$compareRightRectangleBorders$Type",1852),D(417,22,{3:1,34:1,22:1,417:1},uq);var rB,V0e,U0e,iB,x7t=Fr(uT,"RectangleStripOverlapRemover/OverlapRemovalDirection",417,Hr,Ybn,h0n),k7t;D(226,1,{226:1},Dae),I(uT,"RectangleStripOverlapRemover/RectangleNode",226),D(1851,1,fr,Iie),h.Cd=function(t){l7n(this.a,l(t,226))},I(uT,"RectangleStripOverlapRemover/lambda$1$Type",1851),D(1323,1,ii,od),h.Ne=function(t,n){return MLn(l(t,176),l(n,176))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Md,"PolyominoCompactor/CornerCasesGreaterThanRestComparator",1323),D(1326,1,{},Gd),h.Kb=function(t){return l(t,334).a},I(Md,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$0$Type",1326),D(1327,1,ti,cd),h.Mb=function(t){return l(t,332).a},I(Md,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$1$Type",1327),D(1328,1,ti,Kd),h.Mb=function(t){return l(t,332).a},I(Md,"PolyominoCompactor/CornerCasesGreaterThanRestComparator/lambda$2$Type",1328),D(1321,1,ii,$g),h.Ne=function(t,n){return a_n(l(t,176),l(n,176))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Md,"PolyominoCompactor/MinNumOfExtensionDirectionsComparator",1321),D(1324,1,{},as),h.Kb=function(t){return l(t,334).a},I(Md,"PolyominoCompactor/MinNumOfExtensionDirectionsComparator/lambda$0$Type",1324),D(781,1,ii,wn),h.Ne=function(t,n){return q3n(l(t,176),l(n,176))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Md,"PolyominoCompactor/MinNumOfExtensionsComparator",781),D(1319,1,ii,Zr),h.Ne=function(t,n){return Xwn(l(t,330),l(n,330))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Md,"PolyominoCompactor/MinPerimeterComparator",1319),D(1320,1,ii,Zi),h.Ne=function(t,n){return N6n(l(t,330),l(n,330))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Md,"PolyominoCompactor/MinPerimeterComparatorWithShape",1320),D(1322,1,ii,nu),h.Ne=function(t,n){return __n(l(t,176),l(n,176))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Md,"PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator",1322),D(1325,1,{},vu),h.Kb=function(t){return l(t,334).a},I(Md,"PolyominoCompactor/SingleExtensionSideGreaterThanRestComparator/lambda$0$Type",1325),D(782,1,{},L3e),h.Ve=function(t,n){return zbn(this,l(t,42),l(n,176))},I(Md,"SuccessorCombination",782),D(649,1,{},Dl),h.Ve=function(t,n){var r;return rEn((r=l(t,42),l(n,176),r))},I(Md,"SuccessorJitter",649),D(648,1,{},Yh),h.Ve=function(t,n){var r;return HCn((r=l(t,42),l(n,176),r))},I(Md,"SuccessorLineByLine",648),D(573,1,{},w1),h.Ve=function(t,n){var r;return rTn((r=l(t,42),l(n,176),r))},I(Md,"SuccessorManhattan",573),D(1344,1,{},$0),h.Ve=function(t,n){var r;return dCn((r=l(t,42),l(n,176),r))},I(Md,"SuccessorMaxNormWindingInMathPosSense",1344),D(409,1,{},E5),h.Ve=function(t,n){return u5e(this,t,n)},h.c=!1,h.d=!1,h.e=!1,h.f=!1,I(Md,"SuccessorQuadrantsGeneric",409),D(1345,1,{},Wi),h.Kb=function(t){return l(t,334).a},I(Md,"SuccessorQuadrantsGeneric/lambda$0$Type",1345),D(332,22,{3:1,34:1,22:1,332:1},lq),h.a=!1;var sB,aB,oB,cB,E7t=Fr(rG,kEe,332,Hr,Kbn,f0n),T7t;D(1317,1,{}),h.Ib=function(){var t,n,r,a,o,f;for(r=" ",t=pt(0),o=0;o=0?"b"+t+"["+Coe(this.a)+"]":"b["+Coe(this.a)+"]"):"b_"+fw(this)},I(OP,"FBendpoint",250),D(290,137,{3:1,290:1,96:1,137:1},jrt),h.Ib=function(){return Coe(this)},I(OP,"FEdge",290),D(235,137,{3:1,235:1,96:1,137:1},KH);var yOn=I(OP,"FGraph",235);D(454,309,{3:1,454:1,309:1,96:1,137:1},zct),h.Ib=function(){return this.b==null||this.b.length==0?"l["+Coe(this.a)+"]":"l_"+this.b},I(OP,"FLabel",454),D(153,309,{3:1,153:1,309:1,96:1,137:1},wnt),h.Ib=function(){return X5e(this)},h.a=0,I(OP,"FNode",153),D(2100,1,{}),h.vf=function(t){yke(this,t)},h.wf=function(){qdt(this)},h.d=0,I(DEe,"AbstractForceModel",2100),D(641,2100,{641:1},jft),h.uf=function(t,n){var r,a,o,f,g;return pvt(this.f,t,n),o=ma(Ja(n.d),t.d),g=b.Math.sqrt(o.a*o.a+o.b*o.b),a=b.Math.max(0,g-eA(t.e)/2-eA(n.e)/2),r=Qpt(this.e,t,n),r>0?f=-ygn(a,this.c)*r:f=Yhn(a,this.b)*l(Q(t,(b0(),qx)),17).a,md(o,f/g),o},h.vf=function(t){yke(this,t),this.a=l(Q(t,(b0(),xK)),17).a,this.c=ze(Ge(Q(t,kK))),this.b=ze(Ge(Q(t,J0e)))},h.xf=function(t){return t0&&(f-=iun(a,this.a)*r),md(o,f*this.b/g),o},h.vf=function(t){var n,r,a,o,f,g,w;for(yke(this,t),this.b=ze(Ge(Q(t,(b0(),Z0e)))),this.c=this.b/l(Q(t,xK),17).a,a=t.e.c.length,f=0,o=0,w=new G(t.e);w.a0},h.a=0,h.b=0,h.c=0,I(DEe,"FruchtermanReingoldModel",642),D(860,1,Pf,KS),h.hf=function(t){sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,aG),""),"Force Model"),"Determines the model for force calculation."),Q_e),(g2(),ps)),J_e),un((r1(),Pn))))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,IEe),""),"Iterations"),"The number of iterations on the force model."),pt(300)),Tc),ro),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,OEe),""),"Repulsive Power"),"Determines how many bend points are added to the edge; such bend points are regarded as repelling particles in the force model"),pt(0)),Tc),ro),un(zd)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Dhe),""),"FR Temperature"),"The temperature is used as a scaling factor for particle displacements."),Dd),fo),ta),un(Pn)))),Qs(t,Dhe,aG,V7t),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Ihe),""),"Eades Repulsion"),"Factor for repulsive forces in Eades' model."),5),fo),ta),un(Pn)))),Qs(t,Ihe,aG,z7t),rwt((new WS,t))};var R7t,j7t,Q_e,$7t,z7t,q7t,H7t,V7t;I(uL,"ForceMetaDataProvider",860),D(432,22,{3:1,34:1,22:1,432:1},D3e);var Q0e,yK,J_e=Fr(uL,"ForceModelStrategy",432,Hr,zpn,p0n),U7t;D(b2,1,Pf,WS),h.hf=function(t){rwt(t)};var G7t,K7t,Z_e,xK,eAe,W7t,Y7t,X7t,Q7t,tAe,J7t,nAe,rAe,Z7t,qx,e8t,J0e,iAe,t8t,n8t,kK,Z0e,r8t,i8t,s8t,sAe,a8t;I(uL,"ForceOptions",b2),D(1001,1,{},ld),h.sf=function(){var t;return t=new Dwe,t},h.tf=function(t){},I(uL,"ForceOptions/ForceFactory",1001);var hB,$L,Hx,EK;D(861,1,Pf,rz),h.hf=function(t){sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,PEe),""),"Fixed Position"),"Prevent that the node is moved by the layout algorithm."),(Hn(),!1)),(g2(),ya)),Ns),un((r1(),ha))))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,BEe),""),"Desired Edge Length"),"Either specified for parent nodes or for individual edges, where the latter takes higher precedence."),100),fo),ta),rs(Pn,he(le(xg,1),it,170,0,[zd]))))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,FEe),""),"Layout Dimension"),"Dimensions that are permitted to be altered during layout."),aAe),ps),dAe),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,REe),""),"Stress Epsilon"),"Termination criterion for the iterative process."),Dd),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,jEe),""),"Iteration Limit"),"Maximum number of performed iterations. Takes higher precedence than 'epsilon'."),pt(Ii)),Tc),ro),un(Pn)))),Dvt((new iz,t))};var o8t,c8t,aAe,u8t,l8t,h8t;I(uL,"StressMetaDataProvider",861),D(1004,1,Pf,iz),h.hf=function(t){Dvt(t)};var TK,oAe,cAe,uAe,lAe,hAe,f8t,d8t,g8t,p8t,fAe,b8t;I(uL,"StressOptions",1004),D(1005,1,{},y1),h.sf=function(){var t;return t=new $rt,t},h.tf=function(t){},I(uL,"StressOptions/StressFactory",1005),D(1110,205,tv,$rt),h.rf=function(t,n){var r,a,o,f,g;for(n.Ug(A3t,1),Rt(Bt(at(t,(VN(),lAe))))?Rt(Bt(at(t,fAe)))||KO((r=new Yv((aw(),new Jv(t))),r)):W2t(new Dwe,t,n.eh(1)),o=u0t(t),a=$mt(this.a,o),g=a.Kc();g.Ob();)f=l(g.Pb(),235),!(f.e.c.length<=1)&&(_Ln(this.b,f),JEn(this.b),Vu(f.d,new ud));o=ewt(a),lwt(o),n.Vg()},I(uG,"StressLayoutProvider",1110),D(1111,1,fr,ud),h.Cd=function(t){Ake(l(t,454))},I(uG,"StressLayoutProvider/lambda$0$Type",1111),D(1002,1,{},BQe),h.c=0,h.e=0,h.g=0,I(uG,"StressMajorization",1002),D(391,22,{3:1,34:1,22:1,391:1},mse);var e1e,t1e,n1e,dAe=Fr(uG,"StressMajorization/Dimension",391,Hr,F2n,b0n),m8t;D(1003,1,ii,Dz),h.Ne=function(t,n){return Vfn(this.a,l(t,153),l(n,153))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(uG,"StressMajorization/lambda$0$Type",1003),D(1192,1,{},Got),I(Bx,"ElkLayered",1192),D(1193,1,fr,Iz),h.Cd=function(t){_kn(this.a,l(t,36))},I(Bx,"ElkLayered/lambda$0$Type",1193),D(1194,1,fr,Oie),h.Cd=function(t){Ufn(this.a,l(t,36))},I(Bx,"ElkLayered/lambda$1$Type",1194),D(1281,1,{},Lnt);var v8t,w8t,y8t;I(Bx,"GraphConfigurator",1281),D(770,1,fr,qp),h.Cd=function(t){tpt(this.a,l(t,10))},I(Bx,"GraphConfigurator/lambda$0$Type",770),D(771,1,{},u5),h.Kb=function(t){return mxe(),new bn(null,new kn(l(t,30).a,16))},I(Bx,"GraphConfigurator/lambda$1$Type",771),D(772,1,fr,n_),h.Cd=function(t){tpt(this.a,l(t,10))},I(Bx,"GraphConfigurator/lambda$2$Type",772),D(1109,205,tv,qQe),h.rf=function(t,n){var r;r=oLn(new VQe,t),qe(at(t,(Nt(),p4)))===qe((rp(),A2))?j4n(this.a,r,n):WEn(this.a,r,n),n.$g()||Kvt(new b8,r)},I(Bx,"LayeredLayoutProvider",1109),D(367,22,{3:1,34:1,22:1,367:1},oO);var y0,vg,bu,_u,mc,gAe=Fr(Bx,"LayeredPhases",367,Hr,zmn,m0n),x8t;D(1717,1,{},rft),h.i=0;var k8t;I(jP,"ComponentsToCGraphTransformer",1717);var E8t;D(1718,1,{},mm),h.yf=function(t,n){return b.Math.min(t.a!=null?ze(t.a):t.c.i,n.a!=null?ze(n.a):n.c.i)},h.zf=function(t,n){return b.Math.min(t.a!=null?ze(t.a):t.c.i,n.a!=null?ze(n.a):n.c.i)},I(jP,"ComponentsToCGraphTransformer/1",1718),D(86,1,{86:1}),h.i=0,h.k=!0,h.o=ia;var r1e=I(dL,"CNode",86);D(470,86,{470:1,86:1},Pye,U8e),h.Ib=function(){return""},I(jP,"ComponentsToCGraphTransformer/CRectNode",470),D(1688,1,{},q9);var i1e,s1e;I(jP,"OneDimensionalComponentsCompaction",1688),D(1689,1,{},Vv),h.Kb=function(t){return A2n(l(t,42))},h.Fb=function(t){return this===t},I(jP,"OneDimensionalComponentsCompaction/lambda$0$Type",1689),D(1690,1,{},Y7),h.Kb=function(t){return z4n(l(t,42))},h.Fb=function(t){return this===t},I(jP,"OneDimensionalComponentsCompaction/lambda$1$Type",1690),D(1720,1,{},Zst),I(dL,"CGraph",1720),D(194,1,{194:1},Qce),h.b=0,h.c=0,h.e=0,h.g=!0,h.i=ia,I(dL,"CGroup",194),D(1719,1,{},G2),h.yf=function(t,n){return b.Math.max(t.a!=null?ze(t.a):t.c.i,n.a!=null?ze(n.a):n.c.i)},h.zf=function(t,n){return b.Math.max(t.a!=null?ze(t.a):t.c.i,n.a!=null?ze(n.a):n.c.i)},I(dL,t3t,1719),D(1721,1,{},Zpt),h.d=!1;var T8t,a1e=I(dL,i3t,1721);D(1722,1,{},X7),h.Kb=function(t){return v3e(),Hn(),l(l(t,42).a,86).d.e!=0},h.Fb=function(t){return this===t},I(dL,s3t,1722),D(833,1,{},G4e),h.a=!1,h.b=!1,h.c=!1,h.d=!1,I(dL,a3t,833),D(1898,1,{},pst),I(lG,o3t,1898);var fB=ks(rv,Zwt);D(1899,1,{382:1},Yat),h.bf=function(t){nSn(this,l(t,476))},I(lG,c3t,1899),D(Lb,1,ii,l5),h.Ne=function(t,n){return hpn(l(t,86),l(n,86))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(lG,u3t,Lb),D(476,1,{476:1},O3e),h.a=!1,I(lG,l3t,476),D(1901,1,ii,X3),h.Ne=function(t,n){return f8n(l(t,476),l(n,476))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(lG,h3t,1901),D(148,1,{148:1},Ik,L4e),h.Fb=function(t){var n;return t==null||xOn!=bh(t)?!1:(n=l(t,148),Jc(this.c,n.c)&&Jc(this.d,n.d))},h.Hb=function(){return MN(he(le(wa,1),Rn,1,5,[this.c,this.d]))},h.Ib=function(){return"("+this.c+Co+this.d+(this.a?"cx":"")+this.b+")"},h.a=!0,h.c=0,h.d=0;var xOn=I(rv,"Point",148);D(416,22,{3:1,34:1,22:1,416:1},fq);var s3,a4,M6,o4,C8t=Fr(rv,"Point/Quadrant",416,Hr,Xbn,v0n),S8t;D(1708,1,{},$Qe),h.b=null,h.c=null,h.d=null,h.e=null,h.f=null;var _8t,A8t,L8t,M8t,D8t;I(rv,"RectilinearConvexHull",1708),D(583,1,{382:1},nU),h.bf=function(t){$vn(this,l(t,148))},h.b=0;var pAe;I(rv,"RectilinearConvexHull/MaximalElementsEventHandler",583),D(1710,1,ii,Fp),h.Ne=function(t,n){return fpn(Ge(t),Ge(n))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rv,"RectilinearConvexHull/MaximalElementsEventHandler/lambda$0$Type",1710),D(1709,1,{382:1},wht),h.bf=function(t){mCn(this,l(t,148))},h.a=0,h.b=null,h.c=null,h.d=null,h.e=null,I(rv,"RectilinearConvexHull/RectangleEventHandler",1709),D(1711,1,ii,nI),h.Ne=function(t,n){return ybn(l(t,148),l(n,148))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rv,"RectilinearConvexHull/lambda$0$Type",1711),D(1712,1,ii,$J),h.Ne=function(t,n){return xbn(l(t,148),l(n,148))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rv,"RectilinearConvexHull/lambda$1$Type",1712),D(1713,1,ii,vm),h.Ne=function(t,n){return wbn(l(t,148),l(n,148))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rv,"RectilinearConvexHull/lambda$2$Type",1713),D(1714,1,ii,hu),h.Ne=function(t,n){return kbn(l(t,148),l(n,148))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rv,"RectilinearConvexHull/lambda$3$Type",1714),D(1715,1,ii,zJ),h.Ne=function(t,n){return Zxn(l(t,148),l(n,148))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rv,"RectilinearConvexHull/lambda$4$Type",1715),D(1716,1,{},Tot),I(rv,"Scanline",1716),D(2104,1,{}),I(V1,"AbstractGraphPlacer",2104),D(335,1,{335:1},hrt),h.Ff=function(t){return this.Gf(t)?(xn(this.b,l(Q(t,(ft(),pp)),21),t),!0):!1},h.Gf=function(t){var n,r,a,o;for(n=l(Q(t,(ft(),pp)),21),o=l($i(Xi,n),21),a=o.Kc();a.Ob();)if(r=l(a.Pb(),21),!l($i(this.b,r),15).dc())return!1;return!0};var Xi;I(V1,"ComponentGroup",335),D(779,2104,{},Nwe),h.Hf=function(t){var n,r;for(r=new G(this.a);r.ar&&(L=0,B+=w+a,w=0),E=f.c,KE(f,L+E.a,B+E.b),Y0(E),o=b.Math.max(o,L+C.a),w=b.Math.max(w,C.b),L+=C.a+a;n.f.a=o,n.f.b=B+w},h.Jf=function(t,n){var r,a,o,f,g;if(qe(Q(n,(Nt(),g4)))===qe((Km(),c4))){for(a=t.Kc();a.Ob();){for(r=l(a.Pb(),36),g=0,f=new G(r.a);f.ar&&!l(Q(f,(ft(),pp)),21).Hc((Ct(),Qn))||E&&l(Q(E,(ft(),pp)),21).Hc((Ct(),ar))||l(Q(f,(ft(),pp)),21).Hc((Ct(),er)))&&(z=B,V+=w+a,w=0),C=f.c,l(Q(f,(ft(),pp)),21).Hc((Ct(),Qn))&&(z=o+a),KE(f,z+C.a,V+C.b),o=b.Math.max(o,z+L.a),l(Q(f,pp),21).Hc(Dr)&&(B=b.Math.max(B,z+L.a+a)),Y0(C),w=b.Math.max(w,L.b),z+=L.a+a,E=f;n.f.a=o,n.f.b=V+w},h.Jf=function(t,n){},I(V1,"ModelOrderRowGraphPlacer",1313),D(1311,1,ii,cj),h.Ne=function(t,n){return j3n(l(t,36),l(n,36))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(V1,"SimpleRowGraphPlacer/1",1311);var O8t;D(1280,1,Ld,q0),h.Lb=function(t){var n;return n=l(Q(l(t,249).b,(Nt(),cc)),75),!!n&&n.b!=0},h.Fb=function(t){return this===t},h.Mb=function(t){var n;return n=l(Q(l(t,249).b,(Nt(),cc)),75),!!n&&n.b!=0},I(hG,"CompoundGraphPostprocessor/1",1280),D(1279,1,ts,UQe),h.Kf=function(t,n){kdt(this,l(t,36),n)},I(hG,"CompoundGraphPreprocessor",1279),D(453,1,{453:1},f1t),h.c=!1,I(hG,"CompoundGraphPreprocessor/ExternalPort",453),D(249,1,{249:1},Kq),h.Ib=function(){return aae(this.c)+":"+Kpt(this.b)},I(hG,"CrossHierarchyEdge",249),D(777,1,ii,GI),h.Ne=function(t,n){return $7n(this,l(t,249),l(n,249))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(hG,"CrossHierarchyEdgeComparator",777),D(305,137,{3:1,305:1,96:1,137:1}),h.p=0,I(Cu,"LGraphElement",305),D(18,305,{3:1,18:1,305:1,96:1,137:1},Tw),h.Ib=function(){return Kpt(this)};var u1e=I(Cu,"LEdge",18);D(36,305,{3:1,20:1,36:1,305:1,96:1,137:1},o7e),h.Jc=function(t){to(this,t)},h.Kc=function(){return new G(this.b)},h.Ib=function(){return this.b.c.length==0?"G-unlayered"+Tb(this.a):this.a.c.length==0?"G-layered"+Tb(this.b):"G[layerless"+Tb(this.a)+", layers"+Tb(this.b)+"]"};var N8t=I(Cu,"LGraph",36),P8t;D(666,1,{}),h.Lf=function(){return this.e.n},h.of=function(t){return Q(this.e,t)},h.Mf=function(){return this.e.o},h.Nf=function(){return this.e.p},h.pf=function(t){return ns(this.e,t)},h.Of=function(t){this.e.n.a=t.a,this.e.n.b=t.b},h.Pf=function(t){this.e.o.a=t.a,this.e.o.b=t.b},h.Qf=function(t){this.e.p=t},I(Cu,"LGraphAdapters/AbstractLShapeAdapter",666),D(474,1,{853:1},Tm),h.Rf=function(){var t,n;if(!this.b)for(this.b=eg(this.a.b.c.length),n=new G(this.a.b);n.a0&&H0t((Xn(n-1,t.length),t.charCodeAt(n-1)),N3t);)--n;if(f> ",t),fU(r)),hi(wu((t.a+="[",t),r.i),"]")),t.a},h.c=!0,h.d=!1;var yAe,xAe,kAe,EAe,TAe,CAe,F8t=I(Cu,"LPort",12);D(408,1,hg,T5),h.Jc=function(t){to(this,t)},h.Kc=function(){var t;return t=new G(this.a.e),new jWe(t)},I(Cu,"LPort/1",408),D(1309,1,Oa,jWe),h.Nb=function(t){Za(this,t)},h.Pb=function(){return l(re(this.a),18).c},h.Ob=function(){return Lc(this.a)},h.Qb=function(){Q_(this.a)},I(Cu,"LPort/1/1",1309),D(369,1,hg,C8),h.Jc=function(t){to(this,t)},h.Kc=function(){var t;return t=new G(this.a.g),new vwe(t)},I(Cu,"LPort/2",369),D(776,1,Oa,vwe),h.Nb=function(t){Za(this,t)},h.Pb=function(){return l(re(this.a),18).d},h.Ob=function(){return Lc(this.a)},h.Qb=function(){Q_(this.a)},I(Cu,"LPort/2/1",776),D(1302,1,hg,Met),h.Jc=function(t){to(this,t)},h.Kc=function(){return new N1(this)},I(Cu,"LPort/CombineIter",1302),D(208,1,Oa,N1),h.Nb=function(t){Za(this,t)},h.Qb=function(){aZe()},h.Ob=function(){return $_(this)},h.Pb=function(){return Lc(this.a)?re(this.a):re(this.b)},I(Cu,"LPort/CombineIter/1",208),D(1303,1,Ld,K2),h.Lb=function(t){return Lst(t)},h.Fb=function(t){return this===t},h.Mb=function(t){return kl(),l(t,12).g.c.length!=0},I(Cu,"LPort/lambda$0$Type",1303),D(1304,1,Ld,J3),h.Lb=function(t){return Mst(t)},h.Fb=function(t){return this===t},h.Mb=function(t){return kl(),l(t,12).e.c.length!=0},I(Cu,"LPort/lambda$1$Type",1304),D(1305,1,Ld,HJ),h.Lb=function(t){return kl(),l(t,12).j==(Ct(),Qn)},h.Fb=function(t){return this===t},h.Mb=function(t){return kl(),l(t,12).j==(Ct(),Qn)},I(Cu,"LPort/lambda$2$Type",1305),D(1306,1,Ld,wm),h.Lb=function(t){return kl(),l(t,12).j==(Ct(),ar)},h.Fb=function(t){return this===t},h.Mb=function(t){return kl(),l(t,12).j==(Ct(),ar)},I(Cu,"LPort/lambda$3$Type",1306),D(1307,1,Ld,VJ),h.Lb=function(t){return kl(),l(t,12).j==(Ct(),Dr)},h.Fb=function(t){return this===t},h.Mb=function(t){return kl(),l(t,12).j==(Ct(),Dr)},I(Cu,"LPort/lambda$4$Type",1307),D(1308,1,Ld,UJ),h.Lb=function(t){return kl(),l(t,12).j==(Ct(),er)},h.Fb=function(t){return this===t},h.Mb=function(t){return kl(),l(t,12).j==(Ct(),er)},I(Cu,"LPort/lambda$5$Type",1308),D(30,305,{3:1,20:1,305:1,30:1,96:1,137:1},yu),h.Jc=function(t){to(this,t)},h.Kc=function(){return new G(this.a)},h.Ib=function(){return"L_"+gc(this.b.b,this,0)+Tb(this.a)},I(Cu,"Layer",30),D(1330,1,{},VQe),I(v2,R3t,1330),D(1334,1,{},Q7),h.Kb=function(t){return bc(l(t,84))},I(v2,"ElkGraphImporter/0methodref$connectableShapeToNode$Type",1334),D(1337,1,{},uS),h.Kb=function(t){return bc(l(t,84))},I(v2,"ElkGraphImporter/1methodref$connectableShapeToNode$Type",1337),D(1331,1,fr,$We),h.Cd=function(t){l2t(this.a,l(t,123))},I(v2,MEe,1331),D(1332,1,fr,zWe),h.Cd=function(t){l2t(this.a,l(t,123))},I(v2,j3t,1332),D(1333,1,{},lj),h.Kb=function(t){return new bn(null,new kn(A5e(l(t,74)),16))},I(v2,$3t,1333),D(1335,1,ti,qWe),h.Mb=function(t){return Hln(this.a,l(t,27))},I(v2,z3t,1335),D(1336,1,{},H9),h.Kb=function(t){return new bn(null,new kn(apn(l(t,74)),16))},I(v2,"ElkGraphImporter/lambda$5$Type",1336),D(1338,1,ti,HWe),h.Mb=function(t){return Vln(this.a,l(t,27))},I(v2,"ElkGraphImporter/lambda$7$Type",1338),D(1339,1,ti,GJ),h.Mb=function(t){return ypn(l(t,74))},I(v2,"ElkGraphImporter/lambda$8$Type",1339),D(1297,1,{},b8);var R8t;I(v2,"ElkGraphLayoutTransferrer",1297),D(1298,1,ti,VWe),h.Mb=function(t){return Ifn(this.a,l(t,18))},I(v2,"ElkGraphLayoutTransferrer/lambda$0$Type",1298),D(1299,1,fr,UWe),h.Cd=function(t){sO(),vt(this.a,l(t,18))},I(v2,"ElkGraphLayoutTransferrer/lambda$1$Type",1299),D(1300,1,ti,GWe),h.Mb=function(t){return mfn(this.a,l(t,18))},I(v2,"ElkGraphLayoutTransferrer/lambda$2$Type",1300),D(1301,1,fr,KWe),h.Cd=function(t){sO(),vt(this.a,l(t,18))},I(v2,"ElkGraphLayoutTransferrer/lambda$3$Type",1301),D(819,1,{},i4e),I(rr,"BiLinkedHashMultiMap",819),D(1550,1,ts,V9),h.Kf=function(t,n){s3n(l(t,36),n)},I(rr,"CommentNodeMarginCalculator",1550),D(1551,1,{},KJ),h.Kb=function(t){return new bn(null,new kn(l(t,30).a,16))},I(rr,"CommentNodeMarginCalculator/lambda$0$Type",1551),D(1552,1,fr,WJ),h.Cd=function(t){sLn(l(t,10))},I(rr,"CommentNodeMarginCalculator/lambda$1$Type",1552),D(1553,1,ts,YJ),h.Kf=function(t,n){uSn(l(t,36),n)},I(rr,"CommentPostprocessor",1553),D(1554,1,ts,XJ),h.Kf=function(t,n){DDn(l(t,36),n)},I(rr,"CommentPreprocessor",1554),D(1555,1,ts,QJ),h.Kf=function(t,n){SCn(l(t,36),n)},I(rr,"ConstraintsPostprocessor",1555),D(1556,1,ts,JJ),h.Kf=function(t,n){O3n(l(t,36),n)},I(rr,"EdgeAndLayerConstraintEdgeReverser",1556),D(1557,1,ts,ZJ),h.Kf=function(t,n){E5n(l(t,36),n)},I(rr,"EndLabelPostprocessor",1557),D(1558,1,{},eZ),h.Kb=function(t){return new bn(null,new kn(l(t,30).a,16))},I(rr,"EndLabelPostprocessor/lambda$0$Type",1558),D(1559,1,ti,tZ),h.Mb=function(t){return Rmn(l(t,10))},I(rr,"EndLabelPostprocessor/lambda$1$Type",1559),D(1560,1,fr,nZ),h.Cd=function(t){d8n(l(t,10))},I(rr,"EndLabelPostprocessor/lambda$2$Type",1560),D(1561,1,ts,rZ),h.Kf=function(t,n){tkn(l(t,36),n)},I(rr,"EndLabelPreprocessor",1561),D(1562,1,{},rI),h.Kb=function(t){return new bn(null,new kn(l(t,30).a,16))},I(rr,"EndLabelPreprocessor/lambda$0$Type",1562),D(1563,1,fr,mit),h.Cd=function(t){nln(this.a,this.b,this.c,l(t,10))},h.a=0,h.b=0,h.c=!1,I(rr,"EndLabelPreprocessor/lambda$1$Type",1563),D(1564,1,ti,iZ),h.Mb=function(t){return qe(Q(l(t,72),(Nt(),jd)))===qe((F1(),rC))},I(rr,"EndLabelPreprocessor/lambda$2$Type",1564),D(1565,1,fr,WWe),h.Cd=function(t){ui(this.a,l(t,72))},I(rr,"EndLabelPreprocessor/lambda$3$Type",1565),D(1566,1,ti,sZ),h.Mb=function(t){return qe(Q(l(t,72),(Nt(),jd)))===qe((F1(),_4))},I(rr,"EndLabelPreprocessor/lambda$4$Type",1566),D(1567,1,fr,YWe),h.Cd=function(t){ui(this.a,l(t,72))},I(rr,"EndLabelPreprocessor/lambda$5$Type",1567),D(1615,1,ts,Hre),h.Kf=function(t,n){k4n(l(t,36),n)};var j8t;I(rr,"EndLabelSorter",1615),D(1616,1,ii,lS),h.Ne=function(t,n){return t6n(l(t,466),l(n,466))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rr,"EndLabelSorter/1",1616),D(466,1,{466:1},Hat),I(rr,"EndLabelSorter/LabelGroup",466),D(1617,1,{},hj),h.Kb=function(t){return iO(),new bn(null,new kn(l(t,30).a,16))},I(rr,"EndLabelSorter/lambda$0$Type",1617),D(1618,1,ti,J7),h.Mb=function(t){return iO(),l(t,10).k==(Zn(),Ps)},I(rr,"EndLabelSorter/lambda$1$Type",1618),D(1619,1,fr,aZ),h.Cd=function(t){p9n(l(t,10))},I(rr,"EndLabelSorter/lambda$2$Type",1619),D(1620,1,ti,oZ),h.Mb=function(t){return iO(),qe(Q(l(t,72),(Nt(),jd)))===qe((F1(),_4))},I(rr,"EndLabelSorter/lambda$3$Type",1620),D(1621,1,ti,cZ),h.Mb=function(t){return iO(),qe(Q(l(t,72),(Nt(),jd)))===qe((F1(),rC))},I(rr,"EndLabelSorter/lambda$4$Type",1621),D(1568,1,ts,uZ),h.Kf=function(t,n){yLn(this,l(t,36))},h.b=0,h.c=0,I(rr,"FinalSplineBendpointsCalculator",1568),D(1569,1,{},lZ),h.Kb=function(t){return new bn(null,new kn(l(t,30).a,16))},I(rr,"FinalSplineBendpointsCalculator/lambda$0$Type",1569),D(1570,1,{},hS),h.Kb=function(t){return new bn(null,new vw(new hr(dr(qs(l(t,10)).a.Kc(),new j))))},I(rr,"FinalSplineBendpointsCalculator/lambda$1$Type",1570),D(1571,1,ti,iI),h.Mb=function(t){return!Do(l(t,18))},I(rr,"FinalSplineBendpointsCalculator/lambda$2$Type",1571),D(1572,1,ti,fj),h.Mb=function(t){return ns(l(t,18),(ft(),fv))},I(rr,"FinalSplineBendpointsCalculator/lambda$3$Type",1572),D(1573,1,fr,XWe),h.Cd=function(t){L_n(this.a,l(t,131))},I(rr,"FinalSplineBendpointsCalculator/lambda$4$Type",1573),D(1574,1,fr,h5),h.Cd=function(t){JN(l(t,18).a)},I(rr,"FinalSplineBendpointsCalculator/lambda$5$Type",1574),D(803,1,ts,wwe),h.Kf=function(t,n){dMn(this,l(t,36),n)},I(rr,"GraphTransformer",803),D(517,22,{3:1,34:1,22:1,517:1},I3e);var h1e,dB,$8t=Fr(rr,"GraphTransformer/Mode",517,Hr,qpn,E1n),z8t;D(1575,1,ts,f5),h.Kf=function(t,n){PTn(l(t,36),n)},I(rr,"HierarchicalNodeResizingProcessor",1575),D(1576,1,ts,hZ),h.Kf=function(t,n){e3n(l(t,36),n)},I(rr,"HierarchicalPortConstraintProcessor",1576),D(1577,1,ii,t0),h.Ne=function(t,n){return k6n(l(t,10),l(n,10))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rr,"HierarchicalPortConstraintProcessor/NodeComparator",1577),D(1578,1,ts,Z7),h.Kf=function(t,n){EAn(l(t,36),n)},I(rr,"HierarchicalPortDummySizeProcessor",1578),D(1579,1,ts,fZ),h.Kf=function(t,n){OSn(this,l(t,36),n)},h.a=0,I(rr,"HierarchicalPortOrthogonalEdgeRouter",1579),D(1580,1,ii,U9),h.Ne=function(t,n){return Phn(l(t,10),l(n,10))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rr,"HierarchicalPortOrthogonalEdgeRouter/1",1580),D(1581,1,ii,Wd),h.Ne=function(t,n){return zvn(l(t,10),l(n,10))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rr,"HierarchicalPortOrthogonalEdgeRouter/2",1581),D(1582,1,ts,dZ),h.Kf=function(t,n){Xxn(l(t,36),n)},I(rr,"HierarchicalPortPositionProcessor",1582),D(1583,1,ts,Kv),h.Kf=function(t,n){fIn(this,l(t,36))},h.a=0,h.c=0;var CK,SK;I(rr,"HighDegreeNodeLayeringProcessor",1583),D(580,1,{580:1},gZ),h.b=-1,h.d=-1,I(rr,"HighDegreeNodeLayeringProcessor/HighDegreeNodeInformation",580),D(1584,1,{},pZ),h.Kb=function(t){return OO(),ka(l(t,10))},h.Fb=function(t){return this===t},I(rr,"HighDegreeNodeLayeringProcessor/lambda$0$Type",1584),D(1585,1,{},dj),h.Kb=function(t){return OO(),qs(l(t,10))},h.Fb=function(t){return this===t},I(rr,"HighDegreeNodeLayeringProcessor/lambda$1$Type",1585),D(1591,1,ts,bZ),h.Kf=function(t,n){pAn(this,l(t,36),n)},I(rr,"HyperedgeDummyMerger",1591),D(804,1,{},w4e),h.a=!1,h.b=!1,h.c=!1,I(rr,"HyperedgeDummyMerger/MergeState",804),D(1592,1,{},fS),h.Kb=function(t){return new bn(null,new kn(l(t,30).a,16))},I(rr,"HyperedgeDummyMerger/lambda$0$Type",1592),D(1593,1,{},dS),h.Kb=function(t){return new bn(null,new kn(l(t,10).j,16))},I(rr,"HyperedgeDummyMerger/lambda$1$Type",1593),D(1594,1,fr,gj),h.Cd=function(t){l(t,12).p=-1},I(rr,"HyperedgeDummyMerger/lambda$2$Type",1594),D(1595,1,ts,sI),h.Kf=function(t,n){dAn(l(t,36),n)},I(rr,"HypernodesProcessor",1595),D(1596,1,ts,e8),h.Kf=function(t,n){kAn(l(t,36),n)},I(rr,"InLayerConstraintProcessor",1596),D(1597,1,ts,mZ),h.Kf=function(t,n){p3n(l(t,36),n)},I(rr,"InnermostNodeMarginCalculator",1597),D(1598,1,ts,pj),h.Kf=function(t,n){_Dn(this,l(t,36))},h.a=ia,h.b=ia,h.c=gs,h.d=gs;var kOn=I(rr,"InteractiveExternalPortPositioner",1598);D(1599,1,{},bj),h.Kb=function(t){return l(t,18).d.i},h.Fb=function(t){return this===t},I(rr,"InteractiveExternalPortPositioner/lambda$0$Type",1599),D(1600,1,{},QWe),h.Kb=function(t){return Bhn(this.a,Ge(t))},h.Fb=function(t){return this===t},I(rr,"InteractiveExternalPortPositioner/lambda$1$Type",1600),D(1601,1,{},vZ),h.Kb=function(t){return l(t,18).c.i},h.Fb=function(t){return this===t},I(rr,"InteractiveExternalPortPositioner/lambda$2$Type",1601),D(1602,1,{},JWe),h.Kb=function(t){return Fhn(this.a,Ge(t))},h.Fb=function(t){return this===t},I(rr,"InteractiveExternalPortPositioner/lambda$3$Type",1602),D(1603,1,{},ZWe),h.Kb=function(t){return Nfn(this.a,Ge(t))},h.Fb=function(t){return this===t},I(rr,"InteractiveExternalPortPositioner/lambda$4$Type",1603),D(1604,1,{},eYe),h.Kb=function(t){return Pfn(this.a,Ge(t))},h.Fb=function(t){return this===t},I(rr,"InteractiveExternalPortPositioner/lambda$5$Type",1604),D(81,22,{3:1,34:1,22:1,81:1,196:1},Ws),h.dg=function(){switch(this.g){case 15:return new Uj;case 22:return new Dee;case 47:return new Nee;case 28:case 35:return new CZ;case 32:return new V9;case 42:return new YJ;case 1:return new XJ;case 41:return new QJ;case 56:return new wwe((dE(),dB));case 0:return new wwe((dE(),h1e));case 2:return new JJ;case 54:return new ZJ;case 33:return new rZ;case 51:return new uZ;case 55:return new f5;case 13:return new hZ;case 38:return new Z7;case 44:return new fZ;case 40:return new dZ;case 9:return new Kv;case 49:return new nrt;case 37:return new bZ;case 43:return new sI;case 27:return new e8;case 30:return new mZ;case 3:return new pj;case 18:return new yZ;case 29:return new xZ;case 5:return new fk;case 50:return new wZ;case 34:return new sz;case 36:return new d5;case 52:return new Hre;case 11:return new G9;case 7:return new Vre;case 39:return new aI;case 45:return new Z3;case 16:return new K9;case 10:return new Wet;case 48:return new mj;case 21:return new oI;case 23:return new Wie((Iw(),oM));case 8:return new cI;case 12:return new _Z;case 4:return new uI;case 19:return new cz;case 17:return new IZ;case 53:return new OZ;case 6:return new Tj;case 25:return new KQe;case 46:return new FZ;case 31:return new Vrt;case 14:return new UZ;case 26:return new Fee;case 20:return new Aj;case 24:return new Wie((Iw(),MW));default:throw ue(new Yn(Fhe+(this.f!=null?this.f:""+this.g)))}};var SAe,_Ae,AAe,LAe,MAe,DAe,IAe,OAe,NAe,PAe,D6,_K,AK,BAe,FAe,RAe,jAe,$Ae,zAe,qAe,zL,HAe,VAe,UAe,GAe,KAe,f1e,LK,MK,WAe,DK,IK,OK,LT,u4,l4,YAe,NK,PK,XAe,BK,FK,QAe,JAe,ZAe,eLe,RK,d1e,gB,jK,$K,zK,qK,tLe,nLe,rLe,iLe,EOn=Fr(rr,Rhe,81,Hr,rbt,k0n),q8t;D(1605,1,ts,yZ),h.Kf=function(t,n){CDn(l(t,36),n)},I(rr,"InvertedPortProcessor",1605),D(1606,1,ts,xZ),h.Kf=function(t,n){x_n(l(t,36),n)},I(rr,"LabelAndNodeSizeProcessor",1606),D(1607,1,ti,kZ),h.Mb=function(t){return l(t,10).k==(Zn(),Ps)},I(rr,"LabelAndNodeSizeProcessor/lambda$0$Type",1607),D(1608,1,ti,EZ),h.Mb=function(t){return l(t,10).k==(Zn(),Us)},I(rr,"LabelAndNodeSizeProcessor/lambda$1$Type",1608),D(1609,1,fr,vit),h.Cd=function(t){rln(this.b,this.a,this.c,l(t,10))},h.a=!1,h.c=!1,I(rr,"LabelAndNodeSizeProcessor/lambda$2$Type",1609),D(1610,1,ts,fk),h.Kf=function(t,n){QMn(l(t,36),n)};var H8t;I(rr,"LabelDummyInserter",1610),D(1611,1,Ld,Yd),h.Lb=function(t){return qe(Q(l(t,72),(Nt(),jd)))===qe((F1(),nC))},h.Fb=function(t){return this===t},h.Mb=function(t){return qe(Q(l(t,72),(Nt(),jd)))===qe((F1(),nC))},I(rr,"LabelDummyInserter/1",1611),D(1612,1,ts,wZ),h.Kf=function(t,n){jMn(l(t,36),n)},I(rr,"LabelDummyRemover",1612),D(1613,1,ti,Uv),h.Mb=function(t){return Rt(Bt(Q(l(t,72),(Nt(),tde))))},I(rr,"LabelDummyRemover/lambda$0$Type",1613),D(1378,1,ts,sz),h.Kf=function(t,n){DMn(this,l(t,36),n)},h.a=null;var g1e;I(rr,"LabelDummySwitcher",1378),D(293,1,{293:1},nmt),h.c=0,h.d=null,h.f=0,I(rr,"LabelDummySwitcher/LabelDummyInfo",293),D(1379,1,{},TZ),h.Kb=function(t){return lx(),new bn(null,new kn(l(t,30).a,16))},I(rr,"LabelDummySwitcher/lambda$0$Type",1379),D(1380,1,ti,gS),h.Mb=function(t){return lx(),l(t,10).k==(Zn(),cu)},I(rr,"LabelDummySwitcher/lambda$1$Type",1380),D(1381,1,{},tYe),h.Kb=function(t){return vfn(this.a,l(t,10))},I(rr,"LabelDummySwitcher/lambda$2$Type",1381),D(1382,1,fr,nYe),h.Cd=function(t){Rgn(this.a,l(t,293))},I(rr,"LabelDummySwitcher/lambda$3$Type",1382),D(1383,1,ii,pS),h.Ne=function(t,n){return cgn(l(t,293),l(n,293))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rr,"LabelDummySwitcher/lambda$4$Type",1383),D(802,1,ts,CZ),h.Kf=function(t,n){yvn(l(t,36),n)},I(rr,"LabelManagementProcessor",802),D(1614,1,ts,d5),h.Kf=function(t,n){QCn(l(t,36),n)},I(rr,"LabelSideSelector",1614),D(1622,1,ts,G9),h.Kf=function(t,n){RAn(l(t,36),n)},I(rr,"LayerConstraintPostprocessor",1622),D(1623,1,ts,Vre),h.Kf=function(t,n){OEn(l(t,36),n)};var sLe;I(rr,"LayerConstraintPreprocessor",1623),D(371,22,{3:1,34:1,22:1,371:1},gq);var pB,HK,VK,p1e,V8t=Fr(rr,"LayerConstraintPreprocessor/HiddenNodeConnections",371,Hr,Jbn,E0n),U8t;D(1624,1,ts,aI),h.Kf=function(t,n){tMn(l(t,36),n)},I(rr,"LayerSizeAndGraphHeightCalculator",1624),D(1625,1,ts,Z3),h.Kf=function(t,n){BTn(l(t,36),n)},I(rr,"LongEdgeJoiner",1625),D(1626,1,ts,K9),h.Kf=function(t,n){DLn(l(t,36),n)},I(rr,"LongEdgeSplitter",1626),D(1627,1,ts,Wet),h.Kf=function(t,n){fDn(this,l(t,36),n)},h.e=0,h.f=0,h.j=0,h.k=0,h.n=0,h.o=0;var G8t,K8t;I(rr,"NodePromotion",1627),D(1628,1,ii,SZ),h.Ne=function(t,n){return Cyn(l(t,10),l(n,10))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rr,"NodePromotion/1",1628),D(1629,1,ii,bS),h.Ne=function(t,n){return Syn(l(t,10),l(n,10))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rr,"NodePromotion/2",1629),D(1630,1,{},hd),h.Kb=function(t){return l(t,42),Yq(),Hn(),!0},h.Fb=function(t){return this===t},I(rr,"NodePromotion/lambda$0$Type",1630),D(1631,1,{},aYe),h.Kb=function(t){return x2n(this.a,l(t,42))},h.Fb=function(t){return this===t},h.a=0,I(rr,"NodePromotion/lambda$1$Type",1631),D(1632,1,{},oYe),h.Kb=function(t){return y2n(this.a,l(t,42))},h.Fb=function(t){return this===t},h.a=0,I(rr,"NodePromotion/lambda$2$Type",1632),D(1633,1,ts,mj),h.Kf=function(t,n){aIn(l(t,36),n)},I(rr,"NorthSouthPortPostprocessor",1633),D(1634,1,ts,oI),h.Kf=function(t,n){$Dn(l(t,36),n)},I(rr,"NorthSouthPortPreprocessor",1634),D(1635,1,ii,W9),h.Ne=function(t,n){return $3n(l(t,12),l(n,12))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rr,"NorthSouthPortPreprocessor/lambda$0$Type",1635),D(1636,1,ts,cI),h.Kf=function(t,n){nAn(l(t,36),n)},I(rr,"PartitionMidprocessor",1636),D(1637,1,ti,vj),h.Mb=function(t){return ns(l(t,10),(Nt(),HT))},I(rr,"PartitionMidprocessor/lambda$0$Type",1637),D(1638,1,fr,cYe),h.Cd=function(t){xpn(this.a,l(t,10))},I(rr,"PartitionMidprocessor/lambda$1$Type",1638),D(1639,1,ts,_Z),h.Kf=function(t,n){rCn(l(t,36),n)},I(rr,"PartitionPostprocessor",1639),D(1640,1,ts,uI),h.Kf=function(t,n){mEn(l(t,36),n)},I(rr,"PartitionPreprocessor",1640),D(1641,1,ti,AZ),h.Mb=function(t){return ns(l(t,10),(Nt(),HT))},I(rr,"PartitionPreprocessor/lambda$0$Type",1641),D(1642,1,{},LZ),h.Kb=function(t){return new bn(null,new vw(new hr(dr(qs(l(t,10)).a.Kc(),new j))))},I(rr,"PartitionPreprocessor/lambda$1$Type",1642),D(1643,1,ti,wj),h.Mb=function(t){return o6n(l(t,18))},I(rr,"PartitionPreprocessor/lambda$2$Type",1643),D(1644,1,fr,t8),h.Cd=function(t){ryn(l(t,18))},I(rr,"PartitionPreprocessor/lambda$3$Type",1644),D(1645,1,ts,cz),h.Kf=function(t,n){B_n(l(t,36),n)};var aLe,W8t,Y8t,X8t,oLe,cLe;I(rr,"PortListSorter",1645),D(1648,1,ii,yj),h.Ne=function(t,n){return Kct(l(t,12),l(n,12))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rr,"PortListSorter/lambda$0$Type",1648),D(1650,1,ii,n8),h.Ne=function(t,n){return Smt(l(t,12),l(n,12))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rr,"PortListSorter/lambda$1$Type",1650),D(1646,1,{},MZ),h.Kb=function(t){return TE(),l(t,12).e},I(rr,"PortListSorter/lambda$2$Type",1646),D(1647,1,{},lI),h.Kb=function(t){return TE(),l(t,12).g},I(rr,"PortListSorter/lambda$3$Type",1647),D(1649,1,ii,DZ),h.Ne=function(t,n){return D7n(l(t,12),l(n,12))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rr,"PortListSorter/lambda$4$Type",1649),D(1651,1,ts,IZ),h.Kf=function(t,n){GEn(l(t,36),n)},I(rr,"PortSideProcessor",1651),D(1652,1,ts,OZ),h.Kf=function(t,n){KSn(l(t,36),n)},I(rr,"ReversedEdgeRestorer",1652),D(1657,1,ts,KQe),h.Kf=function(t,n){d7n(this,l(t,36),n)},I(rr,"SelfLoopPortRestorer",1657),D(1658,1,{},NZ),h.Kb=function(t){return new bn(null,new kn(l(t,30).a,16))},I(rr,"SelfLoopPortRestorer/lambda$0$Type",1658),D(1659,1,ti,xj),h.Mb=function(t){return l(t,10).k==(Zn(),Ps)},I(rr,"SelfLoopPortRestorer/lambda$1$Type",1659),D(1660,1,ti,PZ),h.Mb=function(t){return ns(l(t,10),(ft(),h3))},I(rr,"SelfLoopPortRestorer/lambda$2$Type",1660),D(1661,1,{},BZ),h.Kb=function(t){return l(Q(l(t,10),(ft(),h3)),337)},I(rr,"SelfLoopPortRestorer/lambda$3$Type",1661),D(1662,1,fr,iYe),h.Cd=function(t){A9n(this.a,l(t,337))},I(rr,"SelfLoopPortRestorer/lambda$4$Type",1662),D(805,1,fr,kj),h.Cd=function(t){z9n(l(t,105))},I(rr,"SelfLoopPortRestorer/lambda$5$Type",805),D(1663,1,ts,FZ),h.Kf=function(t,n){w6n(l(t,36),n)},I(rr,"SelfLoopPostProcessor",1663),D(1664,1,{},RZ),h.Kb=function(t){return new bn(null,new kn(l(t,30).a,16))},I(rr,"SelfLoopPostProcessor/lambda$0$Type",1664),D(1665,1,ti,jZ),h.Mb=function(t){return l(t,10).k==(Zn(),Ps)},I(rr,"SelfLoopPostProcessor/lambda$1$Type",1665),D(1666,1,ti,$Z),h.Mb=function(t){return ns(l(t,10),(ft(),h3))},I(rr,"SelfLoopPostProcessor/lambda$2$Type",1666),D(1667,1,fr,Ej),h.Cd=function(t){M8n(l(t,10))},I(rr,"SelfLoopPostProcessor/lambda$3$Type",1667),D(1668,1,{},zZ),h.Kb=function(t){return new bn(null,new kn(l(t,105).f,1))},I(rr,"SelfLoopPostProcessor/lambda$4$Type",1668),D(1669,1,fr,rYe),h.Cd=function(t){nmn(this.a,l(t,340))},I(rr,"SelfLoopPostProcessor/lambda$5$Type",1669),D(1670,1,ti,qZ),h.Mb=function(t){return!!l(t,105).i},I(rr,"SelfLoopPostProcessor/lambda$6$Type",1670),D(1671,1,fr,sYe),h.Cd=function(t){nun(this.a,l(t,105))},I(rr,"SelfLoopPostProcessor/lambda$7$Type",1671),D(1653,1,ts,Tj),h.Kf=function(t,n){xTn(l(t,36),n)},I(rr,"SelfLoopPreProcessor",1653),D(1654,1,{},Cj),h.Kb=function(t){return new bn(null,new kn(l(t,105).f,1))},I(rr,"SelfLoopPreProcessor/lambda$0$Type",1654),D(1655,1,{},Sj),h.Kb=function(t){return l(t,340).a},I(rr,"SelfLoopPreProcessor/lambda$1$Type",1655),D(1656,1,fr,HZ),h.Cd=function(t){shn(l(t,18))},I(rr,"SelfLoopPreProcessor/lambda$2$Type",1656),D(1672,1,ts,Vrt),h.Kf=function(t,n){u9n(this,l(t,36),n)},I(rr,"SelfLoopRouter",1672),D(1673,1,{},VZ),h.Kb=function(t){return new bn(null,new kn(l(t,30).a,16))},I(rr,"SelfLoopRouter/lambda$0$Type",1673),D(1674,1,ti,Y9),h.Mb=function(t){return l(t,10).k==(Zn(),Ps)},I(rr,"SelfLoopRouter/lambda$1$Type",1674),D(1675,1,ti,r8),h.Mb=function(t){return ns(l(t,10),(ft(),h3))},I(rr,"SelfLoopRouter/lambda$2$Type",1675),D(1676,1,{},mS),h.Kb=function(t){return l(Q(l(t,10),(ft(),h3)),337)},I(rr,"SelfLoopRouter/lambda$3$Type",1676),D(1677,1,fr,Aet),h.Cd=function(t){ppn(this.a,this.b,l(t,337))},I(rr,"SelfLoopRouter/lambda$4$Type",1677),D(1678,1,ts,UZ),h.Kf=function(t,n){jCn(l(t,36),n)},I(rr,"SemiInteractiveCrossMinProcessor",1678),D(1679,1,ti,hI),h.Mb=function(t){return l(t,10).k==(Zn(),Ps)},I(rr,"SemiInteractiveCrossMinProcessor/lambda$0$Type",1679),D(1680,1,ti,vS),h.Mb=function(t){return ost(l(t,10))._b((Nt(),w4))},I(rr,"SemiInteractiveCrossMinProcessor/lambda$1$Type",1680),D(1681,1,ii,fI),h.Ne=function(t,n){return n3n(l(t,10),l(n,10))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(rr,"SemiInteractiveCrossMinProcessor/lambda$2$Type",1681),D(1682,1,{},_j),h.Ve=function(t,n){return kpn(l(t,10),l(n,10))},I(rr,"SemiInteractiveCrossMinProcessor/lambda$3$Type",1682),D(1684,1,ts,Aj),h.Kf=function(t,n){uLn(l(t,36),n)},I(rr,"SortByInputModelProcessor",1684),D(1685,1,ti,GZ),h.Mb=function(t){return l(t,12).g.c.length!=0},I(rr,"SortByInputModelProcessor/lambda$0$Type",1685),D(1686,1,fr,uYe),h.Cd=function(t){G9n(this.a,l(t,12))},I(rr,"SortByInputModelProcessor/lambda$1$Type",1686),D(1759,817,{},mft),h.df=function(t){var n,r,a,o;switch(this.c=t,this.a.g){case 2:n=new bt,Is(Fi(new bn(null,new kn(this.c.a.b,16)),new ree),new Fet(this,n)),ZN(this,new WZ),Vu(n,new Lj),n.c.length=0,Is(Fi(new bn(null,new kn(this.c.a.b,16)),new Mj),new hYe(n)),ZN(this,new YZ),Vu(n,new XZ),n.c.length=0,r=vnt(uce(xy(new bn(null,new kn(this.c.a.b,16)),new fYe(this))),new QZ),Is(new bn(null,new kn(this.c.a.a,16)),new Det(r,n)),ZN(this,new ZZ),Vu(n,new Dj),n.c.length=0;break;case 3:a=new bt,ZN(this,new KZ),o=vnt(uce(xy(new bn(null,new kn(this.c.a.b,16)),new lYe(this))),new JZ),Is(Fi(new bn(null,new kn(this.c.a.b,16)),new eee),new Oet(o,a)),ZN(this,new tee),Vu(a,new nee),a.c.length=0;break;default:throw ue(new NQe)}},h.b=0,I(aa,"EdgeAwareScanlineConstraintCalculation",1759),D(1760,1,Ld,KZ),h.Lb=function(t){return De(l(t,60).g,154)},h.Fb=function(t){return this===t},h.Mb=function(t){return De(l(t,60).g,154)},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$0$Type",1760),D(1761,1,{},lYe),h.Ye=function(t){return Lkn(this.a,l(t,60))},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$1$Type",1761),D(1769,1,QU,Let),h.de=function(){FA(this.a,this.b,-1)},h.b=0,I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$10$Type",1769),D(1771,1,Ld,WZ),h.Lb=function(t){return De(l(t,60).g,154)},h.Fb=function(t){return this===t},h.Mb=function(t){return De(l(t,60).g,154)},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$11$Type",1771),D(1772,1,fr,Lj),h.Cd=function(t){l(t,380).de()},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$12$Type",1772),D(1773,1,ti,Mj),h.Mb=function(t){return De(l(t,60).g,10)},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$13$Type",1773),D(1775,1,fr,hYe),h.Cd=function(t){Y4n(this.a,l(t,60))},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$14$Type",1775),D(1774,1,QU,Net),h.de=function(){FA(this.b,this.a,-1)},h.a=0,I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$15$Type",1774),D(1776,1,Ld,YZ),h.Lb=function(t){return De(l(t,60).g,10)},h.Fb=function(t){return this===t},h.Mb=function(t){return De(l(t,60).g,10)},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$16$Type",1776),D(1777,1,fr,XZ),h.Cd=function(t){l(t,380).de()},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$17$Type",1777),D(1778,1,{},fYe),h.Ye=function(t){return Mkn(this.a,l(t,60))},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$18$Type",1778),D(1779,1,{},QZ),h.We=function(){return 0},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$19$Type",1779),D(1762,1,{},JZ),h.We=function(){return 0},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$2$Type",1762),D(1781,1,fr,Det),h.Cd=function(t){egn(this.a,this.b,l(t,316))},h.a=0,I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$20$Type",1781),D(1780,1,QU,Iet),h.de=function(){I2t(this.a,this.b,-1)},h.b=0,I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$21$Type",1780),D(1782,1,Ld,ZZ),h.Lb=function(t){return l(t,60),!0},h.Fb=function(t){return this===t},h.Mb=function(t){return l(t,60),!0},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$22$Type",1782),D(1783,1,fr,Dj),h.Cd=function(t){l(t,380).de()},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$23$Type",1783),D(1763,1,ti,eee),h.Mb=function(t){return De(l(t,60).g,10)},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$3$Type",1763),D(1765,1,fr,Oet),h.Cd=function(t){tgn(this.a,this.b,l(t,60))},h.a=0,I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$4$Type",1765),D(1764,1,QU,Pet),h.de=function(){FA(this.b,this.a,-1)},h.a=0,I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$5$Type",1764),D(1766,1,Ld,tee),h.Lb=function(t){return l(t,60),!0},h.Fb=function(t){return this===t},h.Mb=function(t){return l(t,60),!0},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$6$Type",1766),D(1767,1,fr,nee),h.Cd=function(t){l(t,380).de()},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$7$Type",1767),D(1768,1,ti,ree),h.Mb=function(t){return De(l(t,60).g,154)},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$8$Type",1768),D(1770,1,fr,Fet),h.Cd=function(t){wwn(this.a,this.b,l(t,60))},I(aa,"EdgeAwareScanlineConstraintCalculation/lambda$9$Type",1770),D(1586,1,ts,nrt),h.Kf=function(t,n){FLn(this,l(t,36),n)};var Q8t;I(aa,"HorizontalGraphCompactor",1586),D(1587,1,{},dYe),h.ff=function(t,n){var r,a,o;return q6e(t,n)||(r=G5(t),a=G5(n),r&&r.k==(Zn(),Us)||a&&a.k==(Zn(),Us))?0:(o=l(Q(this.a.a,(ft(),$6)),312),zhn(o,r?r.k:(Zn(),Aa),a?a.k:(Zn(),Aa)))},h.gf=function(t,n){var r,a,o;return q6e(t,n)?1:(r=G5(t),a=G5(n),o=l(Q(this.a.a,(ft(),$6)),312),Oye(o,r?r.k:(Zn(),Aa),a?a.k:(Zn(),Aa)))},I(aa,"HorizontalGraphCompactor/1",1587),D(1588,1,{},Ij),h.ef=function(t,n){return p_(),t.a.i==0},I(aa,"HorizontalGraphCompactor/lambda$0$Type",1588),D(1589,1,{},gYe),h.ef=function(t,n){return Cpn(this.a,t,n)},I(aa,"HorizontalGraphCompactor/lambda$1$Type",1589),D(1730,1,{},Glt);var J8t,Z8t;I(aa,"LGraphToCGraphTransformer",1730),D(1738,1,ti,wS),h.Mb=function(t){return t!=null},I(aa,"LGraphToCGraphTransformer/0methodref$nonNull$Type",1738),D(1731,1,{},iee),h.Kb=function(t){return u0(),xc(Q(l(l(t,60).g,10),(ft(),zi)))},I(aa,"LGraphToCGraphTransformer/lambda$0$Type",1731),D(1732,1,{},see),h.Kb=function(t){return u0(),r1t(l(l(t,60).g,154))},I(aa,"LGraphToCGraphTransformer/lambda$1$Type",1732),D(1741,1,ti,Oj),h.Mb=function(t){return u0(),De(l(t,60).g,10)},I(aa,"LGraphToCGraphTransformer/lambda$10$Type",1741),D(1742,1,fr,aee),h.Cd=function(t){Mpn(l(t,60))},I(aa,"LGraphToCGraphTransformer/lambda$11$Type",1742),D(1743,1,ti,oee),h.Mb=function(t){return u0(),De(l(t,60).g,154)},I(aa,"LGraphToCGraphTransformer/lambda$12$Type",1743),D(1747,1,fr,cee),h.Cd=function(t){o4n(l(t,60))},I(aa,"LGraphToCGraphTransformer/lambda$13$Type",1747),D(1744,1,fr,pYe),h.Cd=function(t){Nln(this.a,l(t,8))},h.a=0,I(aa,"LGraphToCGraphTransformer/lambda$14$Type",1744),D(1745,1,fr,bYe),h.Cd=function(t){Bln(this.a,l(t,116))},h.a=0,I(aa,"LGraphToCGraphTransformer/lambda$15$Type",1745),D(1746,1,fr,mYe),h.Cd=function(t){Pln(this.a,l(t,8))},h.a=0,I(aa,"LGraphToCGraphTransformer/lambda$16$Type",1746),D(1748,1,{},uee),h.Kb=function(t){return u0(),new bn(null,new vw(new hr(dr(qs(l(t,10)).a.Kc(),new j))))},I(aa,"LGraphToCGraphTransformer/lambda$17$Type",1748),D(1749,1,ti,lee),h.Mb=function(t){return u0(),Do(l(t,18))},I(aa,"LGraphToCGraphTransformer/lambda$18$Type",1749),D(1750,1,fr,vYe),h.Cd=function(t){Qvn(this.a,l(t,18))},I(aa,"LGraphToCGraphTransformer/lambda$19$Type",1750),D(1734,1,fr,wYe),h.Cd=function(t){Tbn(this.a,l(t,154))},I(aa,"LGraphToCGraphTransformer/lambda$2$Type",1734),D(1751,1,{},hee),h.Kb=function(t){return u0(),new bn(null,new kn(l(t,30).a,16))},I(aa,"LGraphToCGraphTransformer/lambda$20$Type",1751),D(1752,1,{},Nj),h.Kb=function(t){return u0(),new bn(null,new vw(new hr(dr(qs(l(t,10)).a.Kc(),new j))))},I(aa,"LGraphToCGraphTransformer/lambda$21$Type",1752),D(1753,1,{},fee),h.Kb=function(t){return u0(),l(Q(l(t,18),(ft(),fv)),15)},I(aa,"LGraphToCGraphTransformer/lambda$22$Type",1753),D(1754,1,ti,Pj),h.Mb=function(t){return qhn(l(t,15))},I(aa,"LGraphToCGraphTransformer/lambda$23$Type",1754),D(1755,1,fr,yYe),h.Cd=function(t){vkn(this.a,l(t,15))},I(aa,"LGraphToCGraphTransformer/lambda$24$Type",1755),D(1733,1,fr,Ret),h.Cd=function(t){xmn(this.a,this.b,l(t,154))},I(aa,"LGraphToCGraphTransformer/lambda$3$Type",1733),D(1735,1,{},dee),h.Kb=function(t){return u0(),new bn(null,new kn(l(t,30).a,16))},I(aa,"LGraphToCGraphTransformer/lambda$4$Type",1735),D(1736,1,{},gee),h.Kb=function(t){return u0(),new bn(null,new vw(new hr(dr(qs(l(t,10)).a.Kc(),new j))))},I(aa,"LGraphToCGraphTransformer/lambda$5$Type",1736),D(1737,1,{},pee),h.Kb=function(t){return u0(),l(Q(l(t,18),(ft(),fv)),15)},I(aa,"LGraphToCGraphTransformer/lambda$6$Type",1737),D(1739,1,fr,xYe),h.Cd=function(t){Dkn(this.a,l(t,15))},I(aa,"LGraphToCGraphTransformer/lambda$8$Type",1739),D(1740,1,fr,jet),h.Cd=function(t){ahn(this.a,this.b,l(t,154))},I(aa,"LGraphToCGraphTransformer/lambda$9$Type",1740),D(1729,1,{},yS),h.cf=function(t){var n,r,a,o,f;for(this.a=t,this.d=new jie,this.c=We(z_e,Rn,125,this.a.a.a.c.length,0,1),this.b=0,r=new G(this.a.a.a);r.a=te&&(vt(f,pt(L)),Me=b.Math.max(Me,$e[L-1]-B),w+=J,fe+=$e[L-1]-fe,B=$e[L-1],J=E[L]),J=b.Math.max(J,E[L]),++L;w+=J}V=b.Math.min(1/Me,1/n.b/w),V>a&&(a=V,r=f)}return r},h.pg=function(){return!1},I(Od,"MSDCutIndexHeuristic",816),D(1683,1,ts,Fee),h.Kf=function(t,n){$An(l(t,36),n)},I(Od,"SingleEdgeGraphWrapper",1683),D(232,22,{3:1,34:1,22:1,232:1},E_);var O6,IT,OT,h4,qL,N6,NT=Fr(ou,"CenterEdgeLabelPlacementStrategy",232,Hr,Cvn,_0n),hxt;D(431,22,{3:1,34:1,22:1,431:1},N3e);var lLe,S1e,hLe=Fr(ou,"ConstraintCalculationStrategy",431,Hr,Upn,A0n),fxt;D(322,22,{3:1,34:1,22:1,322:1,188:1,196:1},wse),h.dg=function(){return $pt(this)},h.qg=function(){return $pt(this)};var mB,HL,fLe,dLe=Fr(ou,"CrossingMinimizationStrategy",322,Hr,j2n,L0n),dxt;D(351,22,{3:1,34:1,22:1,351:1},yse);var gLe,_1e,YK,pLe=Fr(ou,"CuttingStrategy",351,Hr,$2n,M0n),gxt;D(348,22,{3:1,34:1,22:1,348:1,188:1,196:1},uO),h.dg=function(){return M2t(this)},h.qg=function(){return M2t(this)};var bLe,A1e,PT,L1e,BT,mLe=Fr(ou,"CycleBreakingStrategy",348,Hr,Hmn,D0n),pxt;D(428,22,{3:1,34:1,22:1,428:1},P3e);var XK,vLe,wLe=Fr(ou,"DirectionCongruency",428,Hr,Vpn,I0n),bxt;D(460,22,{3:1,34:1,22:1,460:1},xse);var FT,M1e,P6,mxt=Fr(ou,"EdgeConstraint",460,Hr,z2n,j0n),vxt;D(283,22,{3:1,34:1,22:1,283:1},T_);var D1e,I1e,O1e,N1e,QK,P1e,yLe=Fr(ou,"EdgeLabelSideSelection",283,Hr,kvn,$0n),wxt;D(488,22,{3:1,34:1,22:1,488:1},B3e);var JK,xLe,kLe=Fr(ou,"EdgeStraighteningStrategy",488,Hr,Jpn,z0n),yxt;D(281,22,{3:1,34:1,22:1,281:1},C_);var B1e,ELe,TLe,ZK,CLe,SLe,_Le=Fr(ou,"FixedAlignment",281,Hr,Evn,R0n),xxt;D(282,22,{3:1,34:1,22:1,282:1},S_);var ALe,LLe,MLe,DLe,VL,ILe,OLe=Fr(ou,"GraphCompactionStrategy",282,Hr,Tvn,O0n),kxt;D(259,22,{3:1,34:1,22:1,259:1},uy);var RT,eW,jT,vf,UL,tW,$T,B6,nW,GL,F1e=Fr(ou,"GraphProperties",259,Hr,c3n,N0n),Ext;D(299,22,{3:1,34:1,22:1,299:1},kse);var vB,R1e,j1e,$1e=Fr(ou,"GreedySwitchType",299,Hr,q2n,P0n),Txt;D(311,22,{3:1,34:1,22:1,311:1},Ese);var Ux,wB,F6,Cxt=Fr(ou,"InLayerConstraint",311,Hr,H2n,B0n),Sxt;D(429,22,{3:1,34:1,22:1,429:1},F3e);var z1e,NLe,PLe=Fr(ou,"InteractiveReferencePoint",429,Hr,Hpn,F0n),_xt,BLe,Gx,c3,rW,FLe,RLe,iW,jLe,yB,sW,KL,Kx,pp,q1e,aW,Wc,$Le,jb,Lu,H1e,V1e,xB,hv,u3,Wx,zLe,Yx,kB,f4,o1,$f,U1e,R6,Ki,zi,qLe,HLe,VLe,ULe,GLe,G1e,oW,jl,l3,K1e,Xx,WL,W1,j6,h3,$6,z6,zT,fv,KLe,W1e,Y1e,Qx;D(171,22,{3:1,34:1,22:1,171:1},lO);var YL,$b,XL,d4,EB,WLe=Fr(ou,"LayerConstraint",171,Hr,Umn,q0n),Axt;D(859,1,Pf,Yre),h.hf=function(t){sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,VEe),""),"Direction Congruency"),"Specifies how drawings of the same graph with different layout directions compare to each other: either a natural reading direction is preserved or the drawings are rotated versions of each other."),iMe),(g2(),ps)),wLe),un((r1(),Pn))))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,UEe),""),"Feedback Edges"),"Whether feedback edges should be highlighted by routing around the nodes."),(Hn(),!1)),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,fG),""),"Interactive Reference Point"),"Determines which point of a node is considered by interactive layout phases."),lMe),ps),PLe),un(Pn)))),Qs(t,fG,zhe,k9t),Qs(t,fG,pL,x9t),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,GEe),""),"Merge Edges"),"Edges that have no ports are merged so they touch the connected nodes at the same points. When this option is disabled, one port is created for each edge directly connected to a node. When it is enabled, all such incoming edges share an input port, and all outgoing edges share an output port."),!1),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,KEe),""),"Merge Hierarchy-Crossing Edges"),"If hierarchical layout is active, hierarchy-crossing edges use as few hierarchical ports as possible. They are broken by the algorithm, with hierarchical ports inserted as required. Usually, one such port is created for each edge at each hierarchy crossing point. With this option set to true, we try to create as few hierarchical ports as possible in the process. In particular, all edges that form a hyperedge can share a port."),!0),ya),Ns),un(Pn)))),sn(t,new Xt(Nun(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,WEe),""),"Allow Non-Flow Ports To Switch Sides"),"Specifies whether non-flow ports may switch sides if their node's port constraints are either FIXED_SIDE or FIXED_ORDER. A non-flow port is a port on a side that is not part of the currently configured layout flow. For instance, given a left-to-right layout direction, north and south ports would be considered non-flow ports. Further note that the underlying criterium whether to switch sides or not solely relies on the minimization of edge crossings. Hence, edge length and other aesthetics criteria are not addressed."),!1),ya),Ns),un(yv)),he(le(zt,1),dt,2,6,["org.eclipse.elk.layered.northOrSouthPort"])))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,YEe),""),"Port Sorting Strategy"),"Only relevant for nodes with FIXED_SIDE port constraints. Determines the way a node's ports are distributed on the sides of a node if their order is not prescribed. The option is set on parent nodes."),vMe),ps),_De),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,XEe),""),"Thoroughness"),"How much effort should be spent to produce a nice layout."),pt(7)),Tc),ro),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,QEe),""),"Add Unnecessary Bendpoints"),"Adds bend points even if an edge does not change direction. If true, each long edge dummy will contribute a bend point to its edges and hierarchy-crossing edges will always get a bend point where they cross hierarchy boundaries. By default, bend points are only added where an edge changes direction."),!1),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,JEe),""),"Generate Position and Layer IDs"),"If enabled position id and layer id are generated, which are usually only used internally when setting the interactiveLayout option. This option should be specified on the root node."),!1),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,zhe),"cycleBreaking"),"Cycle Breaking Strategy"),"Strategy for cycle breaking. Cycle breaking looks for cycles in the graph and determines which edges to reverse to break the cycles. Reversed edges will end up pointing to the opposite direction of regular edges (that is, reversed edges will point left if edges usually point right)."),rMe),ps),mLe),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,qP),hfe),"Node Layering Strategy"),"Strategy for node layering."),dMe),ps),pDe),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,ZEe),hfe),"Layer Constraint"),"Determines a constraint on the placement of the node regarding the layering."),hMe),ps),WLe),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,eTe),hfe),"Layer Choice Constraint"),"Allows to set a constraint regarding the layer placement of a node. Let i be the value of teh constraint. Assumed the drawing has n layers and i < n. If set to i, it expresses that the node should be placed in i-th layer. Should i>=n be true then the node is placed in the last layer of the drawing. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),null),Tc),ro),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,tTe),hfe),"Layer ID"),"Layer identifier that was calculated by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set."),pt(-1)),Tc),ro),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,qhe),J3t),"Upper Bound On Width [MinWidth Layerer]"),"Defines a loose upper bound on the width of the MinWidth layerer. If set to '-1' multiple values are tested and the best result is selected."),pt(4)),Tc),ro),un(Pn)))),Qs(t,qhe,qP,L9t),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Hhe),J3t),"Upper Layer Estimation Scaling Factor [MinWidth Layerer]"),"Multiplied with Upper Bound On Width for defining an upper bound on the width of layers which haven't been determined yet, but whose maximum width had been (roughly) estimated by the MinWidth algorithm. Compensates for too high estimations. If set to '-1' multiple values are tested and the best result is selected."),pt(2)),Tc),ro),un(Pn)))),Qs(t,Hhe,qP,D9t),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Vhe),Z3t),"Node Promotion Strategy"),"Reduces number of dummy nodes after layering phase (if possible)."),fMe),ps),TDe),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Uhe),Z3t),"Max Node Promotion Iterations"),"Limits the number of iterations for node promotion."),pt(0)),Tc),ro),un(Pn)))),Qs(t,Uhe,Vhe,null),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Ghe),"layering.coffmanGraham"),"Layer Bound"),"The maximum number of nodes allowed per layer."),pt(Ii)),Tc),ro),un(Pn)))),Qs(t,Ghe,qP,T9t),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,pL),gT),"Crossing Minimization Strategy"),"Strategy for crossing minimization."),nMe),ps),dLe),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,nTe),gT),"Force Node Model Order"),"The node order given by the model does not change to produce a better layout. E.g. if node A is before node B in the model this is not changed during crossing minimization. This assumes that the node model order is already respected before crossing minimization. This can be achieved by setting considerModelOrder.strategy to NODES_AND_EDGES."),!1),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Khe),gT),"Hierarchical Sweepiness"),"How likely it is to use cross-hierarchy (1) vs bottom-up (-1)."),.1),fo),ta),un(Pn)))),Qs(t,Khe,CG,Wxt),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Whe),gT),"Semi-Interactive Crossing Minimization"),"Preserves the order of nodes within a layer but still minimizes crossings between edges connecting long edge dummies. Derives the desired order from positions specified by the 'org.eclipse.elk.position' layout option. Requires a crossing minimization strategy that is able to process 'in-layer' constraints."),!1),ya),Ns),un(Pn)))),Qs(t,Whe,pL,e9t),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,rTe),gT),"In Layer Predecessor of"),"Allows to set a constraint which specifies of which node the current node is the predecessor. If set to 's' then the node is the predecessor of 's' and is in the same layer"),null),J6),zt),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,iTe),gT),"In Layer Successor of"),"Allows to set a constraint which specifies of which node the current node is the successor. If set to 's' then the node is the successor of 's' and is in the same layer"),null),J6),zt),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,sTe),gT),"Position Choice Constraint"),"Allows to set a constraint regarding the position placement of a node in a layer. Assumed the layer in which the node placed includes n other nodes and i < n. If set to i, it expresses that the node should be placed at the i-th position. Should i>=n be true then the node is placed at the last position in the layer. Note that this option is not part of any of ELK Layered's default configurations but is only evaluated as part of the `InteractiveLayeredGraphVisitor`, which must be applied manually or used via the `DiagramLayoutEngine."),null),Tc),ro),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,aTe),gT),"Position ID"),"Position within a layer that was determined by ELK Layered for a node. This is only generated if interactiveLayot or generatePositionAndLayerIds is set."),pt(-1)),Tc),ro),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,oTe),eyt),"Greedy Switch Activation Threshold"),"By default it is decided automatically if the greedy switch is activated or not. The decision is based on whether the size of the input graph (without dummy nodes) is smaller than the value of this option. A '0' enforces the activation."),pt(40)),Tc),ro),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Yhe),eyt),"Greedy Switch Crossing Minimization"),"Greedy Switch strategy for crossing minimization. The greedy switch heuristic is executed after the regular crossing minimization as a post-processor. Note that if 'hierarchyHandling' is set to 'INCLUDE_CHILDREN', the 'greedySwitchHierarchical.type' option must be used."),tMe),ps),$1e),un(Pn)))),Qs(t,Yhe,pL,Gxt),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,dG),"crossingMinimization.greedySwitchHierarchical"),"Greedy Switch Crossing Minimization (hierarchical)"),"Activates the greedy switch heuristic in case hierarchical layout is used. The differences to the non-hierarchical case (see 'greedySwitch.type') are: 1) greedy switch is inactive by default, 3) only the option value set on the node at which hierarchical layout starts is relevant, and 2) if it's activated by the user, it properly addresses hierarchy-crossing edges."),eMe),ps),$1e),un(Pn)))),Qs(t,dG,pL,Hxt),Qs(t,dG,CG,Vxt),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,k6),tyt),"Node Placement Strategy"),"Strategy for node placement."),mMe),ps),wDe),un(Pn)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,gG),tyt),"Favor Straight Edges Over Balancing"),"Favor straight edges over a balanced node placement. The default behavior is determined automatically based on the used 'edgeRouting'. For an orthogonal style it is set to true, for all other styles to false."),ya),Ns),un(Pn)))),Qs(t,gG,k6,q9t),Qs(t,gG,k6,H9t),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Xhe),nyt),"BK Edge Straightening"),"Specifies whether the Brandes Koepf node placer tries to increase the number of straight edges at the expense of diagram size. There is a subtle difference to the 'favorStraightEdges' option, which decides whether a balanced placement of the nodes is desired, or not. In bk terms this means combining the four alignments into a single balanced one, or not. This option on the other hand tries to straighten additional edges during the creation of each of the four alignments."),gMe),ps),kLe),un(Pn)))),Qs(t,Xhe,k6,R9t),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Qhe),nyt),"BK Fixed Alignment"),"Tells the BK node placer to use a certain alignment (out of its four) instead of the one producing the smallest height, or the combination of all four."),pMe),ps),_Le),un(Pn)))),Qs(t,Qhe,k6,$9t),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Jhe),"nodePlacement.linearSegments"),"Linear Segments Deflection Dampening"),"Dampens the movement of nodes to keep the diagram from getting too large."),.3),fo),ta),un(Pn)))),Qs(t,Jhe,k6,U9t),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,Zhe),"nodePlacement.networkSimplex"),"Node Flexibility"),"Aims at shorter and straighter edges. Two configurations are possible: (a) allow ports to move freely on the side they are assigned to (the order is always defined beforehand), (b) additionally allow to enlarge a node wherever it helps. If this option is not configured for a node, the 'nodeFlexibility.default' value is used, which is specified for the node's parent."),ps),mde),un(ha)))),Qs(t,Zhe,k6,Y9t),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,efe),"nodePlacement.networkSimplex.nodeFlexibility"),"Node Flexibility Default"),"Default value of the 'nodeFlexibility' option for the children of a hierarchical node."),bMe),ps),mde),un(Pn)))),Qs(t,efe,k6,W9t),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,cTe),ryt),"Self-Loop Distribution"),"Alter the distribution of the loops around the node. It only takes effect for PortConstraints.FREE."),oMe),ps),MDe),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,uTe),ryt),"Self-Loop Ordering"),"Alter the ordering of the loops they can either be stacked or sequenced. It only takes effect for PortConstraints.FREE."),cMe),ps),DDe),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,pG),"edgeRouting.splines"),"Spline Routing Mode"),"Specifies the way control points are assembled for each individual edge. CONSERVATIVE ensures that edges are properly routed around the nodes but feels rather orthogonal at times. SLOPPY uses fewer control points to obtain curvier edge routes but may result in edges overlapping nodes."),uMe),ps),ODe),un(Pn)))),Qs(t,pG,HP,h9t),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,bG),"edgeRouting.splines.sloppy"),"Sloppy Spline Layer Spacing Factor"),"Spacing factor for routing area between layers when using sloppy spline routing."),.2),fo),ta),un(Pn)))),Qs(t,bG,HP,d9t),Qs(t,bG,pG,g9t),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,tfe),"edgeRouting.polyline"),"Sloped Edge Zone Width"),"Width of the strip to the left and to the right of each layer where the polyline edge router is allowed to refrain from ensuring that edges are routed horizontally. This prevents awkward bend points for nodes that extent almost to the edge of their layer."),2),fo),ta),un(Pn)))),Qs(t,tfe,HP,o9t),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,lTe),U1),"Spacing Base Value"),"An optional base value for all other layout options of the 'spacing' group. It can be used to conveniently alter the overall 'spaciousness' of the drawing. Whenever an explicit value is set for the other layout options, this base value will have no effect. The base value is not inherited, i.e. it must be set for each hierarchical node."),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,hTe),U1),"Edge Node Between Layers Spacing"),"The spacing to be preserved between nodes and edges that are routed next to the node's layer. For the spacing between nodes and edges that cross the node's layer 'spacing.edgeNode' is used."),10),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,fTe),U1),"Edge Edge Between Layer Spacing"),"Spacing to be preserved between pairs of edges that are routed between the same pair of layers. Note that 'spacing.edgeEdge' is used for the spacing between pairs of edges crossing the same layer."),10),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,dTe),U1),"Node Node Between Layers Spacing"),"The spacing to be preserved between any pair of nodes of two adjacent layers. Note that 'spacing.nodeNode' is used for the spacing between nodes within the layer itself."),20),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,gTe),TTe),"Direction Priority"),"Defines how important it is to have a certain edge point into the direction of the overall layout. This option is evaluated during the cycle breaking phase."),pt(0)),Tc),ro),un(zd)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,pTe),TTe),"Shortness Priority"),"Defines how important it is to keep an edge as short as possible. This option is evaluated during the layering phase."),pt(0)),Tc),ro),un(zd)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,bTe),TTe),"Straightness Priority"),"Defines how important it is to keep an edge straight, i.e. aligned with one of the two axes. This option is evaluated during node placement."),pt(0)),Tc),ro),un(zd)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,nfe),CTe),w3t),"Tries to further compact components (disconnected sub-graphs)."),!1),ya),Ns),un(Pn)))),Qs(t,nfe,lL,!0),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,mTe),iyt),"Post Compaction Strategy"),syt),XLe),ps),OLe),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,vTe),iyt),"Post Compaction Constraint Calculation"),syt),YLe),ps),hLe),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,mG),STe),"High Degree Node Treatment"),"Makes room around high degree nodes to place leafs and trees."),!1),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,rfe),STe),"High Degree Node Threshold"),"Whether a node is considered to have a high degree."),pt(16)),Tc),ro),un(Pn)))),Qs(t,rfe,mG,!0),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,ife),STe),"High Degree Node Maximum Tree Height"),"Maximum height of a subtree connected to a high degree node to be moved to separate layers."),pt(5)),Tc),ro),un(Pn)))),Qs(t,ife,mG,!0),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,fp),_Te),"Graph Wrapping Strategy"),"For certain graphs and certain prescribed drawing areas it may be desirable to split the laid out graph into chunks that are placed side by side. The edges that connect different chunks are 'wrapped' around from the end of one chunk to the start of the other chunk. The points between the chunks are referred to as 'cuts'."),xMe),ps),FDe),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,vG),_Te),"Additional Wrapped Edges Spacing"),"To visually separate edges that are wrapped from regularly routed edges an additional spacing value can be specified in form of this layout option. The spacing is added to the regular edgeNode spacing."),10),fo),ta),un(Pn)))),Qs(t,vG,fp,ckt),Qs(t,vG,fp,ukt),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,wG),_Te),"Correction Factor for Wrapping"),"At times and for certain types of graphs the executed wrapping may produce results that are consistently biased in the same fashion: either wrapping to often or to rarely. This factor can be used to correct the bias. Internally, it is simply multiplied with the 'aspect ratio' layout option."),1),fo),ta),un(Pn)))),Qs(t,wG,fp,hkt),Qs(t,wG,fp,fkt),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,bL),ayt),"Cutting Strategy"),"The strategy by which the layer indexes are determined at which the layering crumbles into chunks."),yMe),ps),pLe),un(Pn)))),Qs(t,bL,fp,vkt),Qs(t,bL,fp,wkt),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,sfe),ayt),"Manually Specified Cuts"),"Allows the user to specify her own cuts for a certain graph."),X1),mf),un(Pn)))),Qs(t,sfe,bL,gkt),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,afe),"wrapping.cutting.msd"),"MSD Freedom"),"The MSD cutting strategy starts with an initial guess on the number of chunks the graph should be split into. The freedom specifies how much the strategy may deviate from this guess. E.g. if an initial number of 3 is computed, a freedom of 1 allows 2, 3, and 4 cuts."),wMe),Tc),ro),un(Pn)))),Qs(t,afe,bL,bkt),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,yG),oyt),"Validification Strategy"),"When wrapping graphs, one can specify indices that are not allowed as split points. The validification strategy makes sure every computed split point is allowed."),kMe),ps),BDe),un(Pn)))),Qs(t,yG,fp,Dkt),Qs(t,yG,fp,Ikt),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,xG),oyt),"Valid Indices for Wrapping"),null),X1),mf),un(Pn)))),Qs(t,xG,fp,Akt),Qs(t,xG,fp,Lkt),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,kG),ATe),"Improve Cuts"),"For general graphs it is important that not too many edges wrap backwards. Thus a compromise between evenly-distributed cuts and the total number of cut edges is sought."),!0),ya),Ns),un(Pn)))),Qs(t,kG,fp,Ekt),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,EG),ATe),"Distance Penalty When Improving Cuts"),null),2),fo),ta),un(Pn)))),Qs(t,EG,fp,xkt),Qs(t,EG,kG,!0),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,ofe),ATe),"Improve Wrapped Edges"),"The initial wrapping is performed in a very simple way. As a consequence, edges that wrap from one chunk to another may be unnecessarily long. Activating this option tries to shorten such edges."),!0),ya),Ns),un(Pn)))),Qs(t,ofe,fp,Ckt),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,wTe),ffe),"Edge Label Side Selection"),"Method to decide on edge label sides."),aMe),ps),yLe),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,yTe),ffe),"Edge Center Label Placement Strategy"),"Determines in which layer center labels of long edges should be placed."),sMe),ps),NT),rs(Pn,he(le(xg,1),it,170,0,[S2]))))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,TG),mL),"Consider Model Order"),"Preserves the order of nodes and edges in the model file if this does not lead to additional edge crossings. Depending on the strategy this is not always possible since the node and edge order might be conflicting."),ZLe),ps),SDe),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,xTe),mL),"Consider Port Order"),"If disabled the port order of output ports is derived from the edge order and input ports are ordered by their incoming connections. If enabled all ports are ordered by the port model order."),!1),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,kTe),mL),"No Model Order"),"Set on a node to not set a model order for this node even though it is a real node."),!1),ya),Ns),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,cfe),mL),"Consider Model Order for Components"),"If set to NONE the usual ordering strategy (by cumulative node priority and size of nodes) is used. INSIDE_PORT_SIDES orders the components with external ports only inside the groups with the same port side. FORCE_MODEL_ORDER enforces the mode order on components. This option might produce bad alignments and sub optimal drawings in terms of used area since the ordering should be respected."),QLe),ps),mAe),un(Pn)))),Qs(t,cfe,lL,null),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,ETe),mL),"Long Edge Ordering Strategy"),"Indicates whether long edges are sorted under, over, or equal to nodes that have no connection to a previous layer in a left-to-right or right-to-left layout. Under and over changes to right and left in a vertical layout."),JLe),ps),mDe),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,ufe),mL),"Crossing Counter Node Order Influence"),"Indicates with what percentage (1 for 100%) violations of the node model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal node order. Defaults to no influence (0)."),0),fo),ta),un(Pn)))),Qs(t,ufe,TG,null),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,lfe),mL),"Crossing Counter Port Order Influence"),"Indicates with what percentage (1 for 100%) violations of the port model order are weighted against the crossings e.g. a value of 0.5 means two model order violations are as important as on edge crossing. This allows some edge crossings in favor of preserving the model order. It is advised to set this value to a very small positive value (e.g. 0.001) to have minimal crossing and a optimal port order. Defaults to no influence (0)."),0),fo),ta),un(Pn)))),Qs(t,lfe,TG,null),Twt((new Xre,t))};var Lxt,Mxt,Dxt,YLe,Ixt,XLe,Oxt,QLe,Nxt,Pxt,Bxt,JLe,Fxt,Rxt,jxt,ZLe,$xt,zxt,qxt,eMe,Hxt,Vxt,Uxt,tMe,Gxt,Kxt,Wxt,Yxt,Xxt,Qxt,Jxt,Zxt,e9t,t9t,nMe,n9t,rMe,r9t,iMe,i9t,sMe,s9t,aMe,a9t,o9t,c9t,oMe,u9t,cMe,l9t,uMe,h9t,f9t,d9t,g9t,p9t,b9t,m9t,v9t,w9t,y9t,lMe,x9t,k9t,E9t,T9t,C9t,S9t,hMe,_9t,A9t,L9t,M9t,D9t,I9t,O9t,fMe,N9t,dMe,P9t,B9t,F9t,gMe,R9t,j9t,pMe,$9t,z9t,q9t,H9t,V9t,U9t,G9t,K9t,bMe,W9t,Y9t,X9t,mMe,Q9t,vMe,J9t,Z9t,ekt,tkt,nkt,rkt,ikt,skt,akt,okt,ckt,ukt,lkt,hkt,fkt,dkt,gkt,pkt,wMe,bkt,mkt,yMe,vkt,wkt,ykt,xkt,kkt,Ekt,Tkt,Ckt,Skt,xMe,_kt,Akt,Lkt,Mkt,kMe,Dkt,Ikt;I(ou,"LayeredMetaDataProvider",859),D(998,1,Pf,Xre),h.hf=function(t){Twt(t)};var Rd,X1e,cW,QL,uW,EMe,lW,g4,hW,TMe,CMe,fW,Q1e,yg,J1e,f3,SMe,TB,Z1e,_Me,Okt,Nkt,Pkt,dW,ede,JL,dv,Bkt,Rh,AMe,LMe,gW,tde,jd,pW,bp,MMe,DMe,IMe,nde,rde,OMe,x2,ide,NMe,p4,PMe,BMe,FMe,bW,b4,gv,RMe,jMe,cc,$Me,Fkt,Qu,mW,zMe,qMe,HMe,zb,pv,vW,VMe,UMe,wW,d3,GMe,sde,ZL,KMe,g3,eM,yW,bv,ade,qT,xW,mv,WMe,YMe,XMe,HT,QMe,Rkt,jkt,$kt,zkt,p3,m4,Ms,k2,qkt,v4,JMe,VT,ZMe,w4,Hkt,UT,eDe,Jx,Vkt,Ukt,CB,ode,tDe,SB,x0,q6,H6,b3,vv,kW,y4,cde,GT,KT,m3,V6,ude,_B,tM,nM,Gkt,Kkt,Wkt,nDe,Ykt,lde,rDe,iDe,sDe,aDe,hde,oDe,cDe,uDe,lDe,fde,EW;I(ou,"LayeredOptions",998),D(999,1,{},Ree),h.sf=function(){var t;return t=new qQe,t},h.tf=function(t){},I(ou,"LayeredOptions/LayeredFactory",999),D(1391,1,{}),h.a=0;var Xkt;I(Uc,"ElkSpacings/AbstractSpacingsBuilder",1391),D(792,1391,{},D8e);var TW,Qkt;I(ou,"LayeredSpacings/LayeredSpacingsBuilder",792),D(265,22,{3:1,34:1,22:1,265:1,188:1,196:1},M5),h.dg=function(){return jbt(this)},h.qg=function(){return jbt(this)};var WT,dde,YT,hDe,fDe,dDe,CW,gde,gDe,pDe=Fr(ou,"LayeringStrategy",265,Hr,Rwn,H0n),Jkt;D(390,22,{3:1,34:1,22:1,390:1},Tse);var pde,bDe,SW,mDe=Fr(ou,"LongEdgeOrderingStrategy",390,Hr,V2n,V0n),Zkt;D(203,22,{3:1,34:1,22:1,203:1},bq);var U6,G6,_W,bde,mde=Fr(ou,"NodeFlexibility",203,Hr,Zbn,U0n),eEt;D(323,22,{3:1,34:1,22:1,323:1,188:1,196:1},hO),h.dg=function(){return L2t(this)},h.qg=function(){return L2t(this)};var rM,vde,wde,iM,vDe,wDe=Fr(ou,"NodePlacementStrategy",323,Hr,Vmn,G0n),tEt;D(243,22,{3:1,34:1,22:1,243:1},ly);var yDe,v3,x4,AB,xDe,kDe,LB,EDe,AW,LW,TDe=Fr(ou,"NodePromotionStrategy",243,Hr,u3n,K0n),nEt;D(284,22,{3:1,34:1,22:1,284:1},mq);var CDe,E2,yde,xde,SDe=Fr(ou,"OrderingStrategy",284,Hr,emn,W0n),rEt;D(430,22,{3:1,34:1,22:1,430:1},R3e);var kde,Ede,_De=Fr(ou,"PortSortingStrategy",430,Hr,Gpn,Y0n),iEt;D(463,22,{3:1,34:1,22:1,463:1},Cse);var $l,zu,sM,sEt=Fr(ou,"PortType",463,Hr,U2n,X0n),aEt;D(387,22,{3:1,34:1,22:1,387:1},Sse);var ADe,Tde,LDe,MDe=Fr(ou,"SelfLoopDistributionStrategy",387,Hr,G2n,Q0n),oEt;D(349,22,{3:1,34:1,22:1,349:1},_se);var Cde,MB,Sde,DDe=Fr(ou,"SelfLoopOrderingStrategy",349,Hr,K2n,J0n),cEt;D(312,1,{312:1},xvt),I(ou,"Spacings",312),D(350,22,{3:1,34:1,22:1,350:1},Ase);var _de,IDe,aM,ODe=Fr(ou,"SplineRoutingMode",350,Hr,W2n,Z0n),uEt;D(352,22,{3:1,34:1,22:1,352:1},Lse);var Ade,NDe,PDe,BDe=Fr(ou,"ValidifyStrategy",352,Hr,Y2n,e1n),lEt;D(388,22,{3:1,34:1,22:1,388:1},Mse);var k4,Lde,XT,FDe=Fr(ou,"WrappingStrategy",388,Hr,X2n,t1n),hEt;D(1398,1,Uo,Ure),h.rg=function(t){return l(t,36),fEt},h.Kf=function(t,n){NLn(this,l(t,36),n)};var fEt;I(LG,"DepthFirstCycleBreaker",1398),D(793,1,Uo,Q4e),h.rg=function(t){return l(t,36),dEt},h.Kf=function(t,n){FIn(this,l(t,36),n)},h.sg=function(t){return l(jt(t,aU(this.d,t.c.length)),10)};var dEt;I(LG,"GreedyCycleBreaker",793),D(1401,793,Uo,$tt),h.sg=function(t){var n,r,a,o;for(o=null,n=Ii,a=new G(t);a.a1&&(Rt(Bt(Q(eo((Sn(0,t.c.length),l(t.c[0],10))),(Nt(),f3))))?q2t(t,this.d,l(this,669)):(Cn(),Vs(t,this.d)),Hft(this.e,t))},h.lg=function(t,n,r,a){var o,f,g,w,E,C,L;for(n!=ast(r,t.length)&&(f=t[n-(r?1:-1)],S6e(this.f,f,r?(qo(),zu):(qo(),$l))),o=t[n][0],L=!a||o.k==(Zn(),Us),C=O1(t[n]),this.vg(C,L,!1,r),g=0,E=new G(C);E.a"),t0?loe(this.a,t[n-1],t[n]):!r&&n1&&(Rt(Bt(Q(eo((Sn(0,t.c.length),l(t.c[0],10))),(Nt(),f3))))?q2t(t,this.d,this):(Cn(),Vs(t,this.d)),Rt(Bt(Q(eo((Sn(0,t.c.length),l(t.c[0],10))),f3)))||Hft(this.e,t))},I(Cl,"ModelOrderBarycenterHeuristic",669),D(1866,1,ii,zYe),h.Ne=function(t,n){return O9n(this.a,l(t,10),l(n,10))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Cl,"ModelOrderBarycenterHeuristic/lambda$0$Type",1866),D(1423,1,Uo,Jre),h.rg=function(t){var n;return l(t,36),n=Oq(LEt),fi(n,(uo(),bu),(vo(),RK)),n},h.Kf=function(t,n){bpn((l(t,36),n))};var LEt;I(Cl,"NoCrossingMinimizer",1423),D(809,413,uCe,o3e),h.tg=function(t,n,r){var a,o,f,g,w,E,C,L,B,z,V;switch(B=this.g,r.g){case 1:{for(o=0,f=0,L=new G(t.j);L.a1&&(o.j==(Ct(),ar)?this.b[t]=!0:o.j==er&&t>0&&(this.b[t-1]=!0))},h.f=0,I(bg,"AllCrossingsCounter",1861),D(595,1,{},TV),h.b=0,h.d=0,I(bg,"BinaryIndexedTree",595),D(532,1,{},IO);var $De,DW;I(bg,"CrossingsCounter",532),D(1950,1,ii,qYe),h.Ne=function(t,n){return qdn(this.a,l(t,12),l(n,12))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(bg,"CrossingsCounter/lambda$0$Type",1950),D(1951,1,ii,HYe),h.Ne=function(t,n){return Hdn(this.a,l(t,12),l(n,12))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(bg,"CrossingsCounter/lambda$1$Type",1951),D(1952,1,ii,VYe),h.Ne=function(t,n){return Vdn(this.a,l(t,12),l(n,12))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(bg,"CrossingsCounter/lambda$2$Type",1952),D(1953,1,ii,UYe),h.Ne=function(t,n){return Udn(this.a,l(t,12),l(n,12))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(bg,"CrossingsCounter/lambda$3$Type",1953),D(1954,1,fr,GYe),h.Cd=function(t){Uvn(this.a,l(t,12))},I(bg,"CrossingsCounter/lambda$4$Type",1954),D(1955,1,ti,KYe),h.Mb=function(t){return bln(this.a,l(t,12))},I(bg,"CrossingsCounter/lambda$5$Type",1955),D(1956,1,fr,WYe),h.Cd=function(t){Dtt(this,t)},I(bg,"CrossingsCounter/lambda$6$Type",1956),D(1957,1,fr,qet),h.Cd=function(t){var n;jk(),gb(this.b,(n=this.a,l(t,12),n))},I(bg,"CrossingsCounter/lambda$7$Type",1957),D(839,1,Ld,Xj),h.Lb=function(t){return jk(),ns(l(t,12),(ft(),jl))},h.Fb=function(t){return this===t},h.Mb=function(t){return jk(),ns(l(t,12),(ft(),jl))},I(bg,"CrossingsCounter/lambda$8$Type",839),D(1949,1,{},YYe),I(bg,"HyperedgeCrossingsCounter",1949),D(478,1,{34:1,478:1},Urt),h.Fd=function(t){return V5n(this,l(t,478))},h.b=0,h.c=0,h.e=0,h.f=0;var TOn=I(bg,"HyperedgeCrossingsCounter/Hyperedge",478);D(374,1,{34:1,374:1},CH),h.Fd=function(t){return iTn(this,l(t,374))},h.b=0,h.c=0;var MEt=I(bg,"HyperedgeCrossingsCounter/HyperedgeCorner",374);D(531,22,{3:1,34:1,22:1,531:1},j3e);var cM,uM,DEt=Fr(bg,"HyperedgeCrossingsCounter/HyperedgeCorner/Type",531,Hr,Kpn,r1n),IEt;D(1425,1,Uo,Zre),h.rg=function(t){return l(Q(l(t,36),(ft(),Lu)),21).Hc((Ho(),vf))?OEt:null},h.Kf=function(t,n){p8n(this,l(t,36),n)};var OEt;I(Go,"InteractiveNodePlacer",1425),D(1426,1,Uo,eie),h.rg=function(t){return l(Q(l(t,36),(ft(),Lu)),21).Hc((Ho(),vf))?NEt:null},h.Kf=function(t,n){Z6n(this,l(t,36),n)};var NEt,IW,OW;I(Go,"LinearSegmentsNodePlacer",1426),D(261,1,{34:1,261:1},Pwe),h.Fd=function(t){return Aun(this,l(t,261))},h.Fb=function(t){var n;return De(t,261)?(n=l(t,261),this.b==n.b):!1},h.Hb=function(){return this.b},h.Ib=function(){return"ls"+Tb(this.e)},h.a=0,h.b=0,h.c=-1,h.d=-1,h.g=0;var PEt=I(Go,"LinearSegmentsNodePlacer/LinearSegment",261);D(1428,1,Uo,bst),h.rg=function(t){return l(Q(l(t,36),(ft(),Lu)),21).Hc((Ho(),vf))?BEt:null},h.Kf=function(t,n){AIn(this,l(t,36),n)},h.b=0,h.g=0;var BEt;I(Go,"NetworkSimplexPlacer",1428),D(1447,1,ii,Gee),h.Ne=function(t,n){return ru(l(t,17).a,l(n,17).a)},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Go,"NetworkSimplexPlacer/0methodref$compare$Type",1447),D(1449,1,ii,Kee),h.Ne=function(t,n){return ru(l(t,17).a,l(n,17).a)},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Go,"NetworkSimplexPlacer/1methodref$compare$Type",1449),D(655,1,{655:1},Het);var COn=I(Go,"NetworkSimplexPlacer/EdgeRep",655);D(412,1,{412:1},D5e),h.b=!1;var SOn=I(Go,"NetworkSimplexPlacer/NodeRep",412);D(515,13,{3:1,4:1,20:1,31:1,56:1,13:1,16:1,15:1,59:1,515:1},QQe),I(Go,"NetworkSimplexPlacer/Path",515),D(1429,1,{},Wee),h.Kb=function(t){return l(t,18).d.i.k},I(Go,"NetworkSimplexPlacer/Path/lambda$0$Type",1429),D(1430,1,ti,Yee),h.Mb=function(t){return l(t,273)==(Zn(),Aa)},I(Go,"NetworkSimplexPlacer/Path/lambda$1$Type",1430),D(1431,1,{},Xee),h.Kb=function(t){return l(t,18).d.i},I(Go,"NetworkSimplexPlacer/Path/lambda$2$Type",1431),D(1432,1,ti,XYe),h.Mb=function(t){return Lrt(I1t(l(t,10)))},I(Go,"NetworkSimplexPlacer/Path/lambda$3$Type",1432),D(1433,1,ti,Qee),h.Mb=function(t){return Sdn(l(t,12))},I(Go,"NetworkSimplexPlacer/lambda$0$Type",1433),D(1434,1,fr,Vet),h.Cd=function(t){ohn(this.a,this.b,l(t,12))},I(Go,"NetworkSimplexPlacer/lambda$1$Type",1434),D(1443,1,fr,QYe),h.Cd=function(t){Okn(this.a,l(t,18))},I(Go,"NetworkSimplexPlacer/lambda$10$Type",1443),D(1444,1,{},Jee),h.Kb=function(t){return Sh(),new bn(null,new kn(l(t,30).a,16))},I(Go,"NetworkSimplexPlacer/lambda$11$Type",1444),D(1445,1,fr,JYe),h.Cd=function(t){_Sn(this.a,l(t,10))},I(Go,"NetworkSimplexPlacer/lambda$12$Type",1445),D(1446,1,{},Zee),h.Kb=function(t){return Sh(),pt(l(t,125).e)},I(Go,"NetworkSimplexPlacer/lambda$13$Type",1446),D(1448,1,{},ete),h.Kb=function(t){return Sh(),pt(l(t,125).e)},I(Go,"NetworkSimplexPlacer/lambda$15$Type",1448),D(1450,1,ti,tte),h.Mb=function(t){return Sh(),l(t,412).c.k==(Zn(),Ps)},I(Go,"NetworkSimplexPlacer/lambda$17$Type",1450),D(1451,1,ti,nte),h.Mb=function(t){return Sh(),l(t,412).c.j.c.length>1},I(Go,"NetworkSimplexPlacer/lambda$18$Type",1451),D(1452,1,fr,Tat),h.Cd=function(t){f5n(this.c,this.b,this.d,this.a,l(t,412))},h.c=0,h.d=0,I(Go,"NetworkSimplexPlacer/lambda$19$Type",1452),D(1435,1,{},rte),h.Kb=function(t){return Sh(),new bn(null,new kn(l(t,30).a,16))},I(Go,"NetworkSimplexPlacer/lambda$2$Type",1435),D(1453,1,fr,ZYe),h.Cd=function(t){uhn(this.a,l(t,12))},h.a=0,I(Go,"NetworkSimplexPlacer/lambda$20$Type",1453),D(1454,1,{},ite),h.Kb=function(t){return Sh(),new bn(null,new kn(l(t,30).a,16))},I(Go,"NetworkSimplexPlacer/lambda$21$Type",1454),D(1455,1,fr,eXe),h.Cd=function(t){xhn(this.a,l(t,10))},I(Go,"NetworkSimplexPlacer/lambda$22$Type",1455),D(1456,1,ti,ste),h.Mb=function(t){return Lrt(t)},I(Go,"NetworkSimplexPlacer/lambda$23$Type",1456),D(1457,1,{},ate),h.Kb=function(t){return Sh(),new bn(null,new kn(l(t,30).a,16))},I(Go,"NetworkSimplexPlacer/lambda$24$Type",1457),D(1458,1,ti,tXe),h.Mb=function(t){return Mln(this.a,l(t,10))},I(Go,"NetworkSimplexPlacer/lambda$25$Type",1458),D(1459,1,fr,Uet),h.Cd=function(t){F9n(this.a,this.b,l(t,10))},I(Go,"NetworkSimplexPlacer/lambda$26$Type",1459),D(1460,1,ti,s8),h.Mb=function(t){return Sh(),!Do(l(t,18))},I(Go,"NetworkSimplexPlacer/lambda$27$Type",1460),D(1461,1,ti,Qj),h.Mb=function(t){return Sh(),!Do(l(t,18))},I(Go,"NetworkSimplexPlacer/lambda$28$Type",1461),D(1462,1,{},nXe),h.Ve=function(t,n){return chn(this.a,l(t,30),l(n,30))},I(Go,"NetworkSimplexPlacer/lambda$29$Type",1462),D(1436,1,{},ote),h.Kb=function(t){return Sh(),new bn(null,new vw(new hr(dr(qs(l(t,10)).a.Kc(),new j))))},I(Go,"NetworkSimplexPlacer/lambda$3$Type",1436),D(1437,1,ti,cte),h.Mb=function(t){return Sh(),Rbn(l(t,18))},I(Go,"NetworkSimplexPlacer/lambda$4$Type",1437),D(1438,1,fr,rXe),h.Cd=function(t){BAn(this.a,l(t,18))},I(Go,"NetworkSimplexPlacer/lambda$5$Type",1438),D(1439,1,{},ute),h.Kb=function(t){return Sh(),new bn(null,new kn(l(t,30).a,16))},I(Go,"NetworkSimplexPlacer/lambda$6$Type",1439),D(1440,1,ti,Jj),h.Mb=function(t){return Sh(),l(t,10).k==(Zn(),Ps)},I(Go,"NetworkSimplexPlacer/lambda$7$Type",1440),D(1441,1,{},lte),h.Kb=function(t){return Sh(),new bn(null,new vw(new hr(dr(sp(l(t,10)).a.Kc(),new j))))},I(Go,"NetworkSimplexPlacer/lambda$8$Type",1441),D(1442,1,ti,TS),h.Mb=function(t){return Sh(),Cdn(l(t,18))},I(Go,"NetworkSimplexPlacer/lambda$9$Type",1442),D(1424,1,Uo,tie),h.rg=function(t){return l(Q(l(t,36),(ft(),Lu)),21).Hc((Ho(),vf))?FEt:null},h.Kf=function(t,n){bLn(l(t,36),n)};var FEt;I(Go,"SimpleNodePlacer",1424),D(185,1,{185:1},f6),h.Ib=function(){var t;return t="",this.c==(xd(),w3)?t+=Dx:this.c==T2&&(t+=Mx),this.o==(D1(),wv)?t+=whe:this.o==Y1?t+="UP":t+="BALANCED",t},I(Ib,"BKAlignedLayout",185),D(523,22,{3:1,34:1,22:1,523:1},$3e);var T2,w3,REt=Fr(Ib,"BKAlignedLayout/HDirection",523,Hr,Ypn,i1n),jEt;D(522,22,{3:1,34:1,22:1,522:1},z3e);var wv,Y1,$Et=Fr(Ib,"BKAlignedLayout/VDirection",522,Hr,Xpn,s1n),zEt;D(1699,1,{},Get),I(Ib,"BKAligner",1699),D(1702,1,{},rgt),I(Ib,"BKCompactor",1702),D(663,1,{663:1},hte),h.a=0,I(Ib,"BKCompactor/ClassEdge",663),D(467,1,{467:1},WQe),h.a=null,h.b=0,I(Ib,"BKCompactor/ClassNode",467),D(1427,1,Uo,Xet),h.rg=function(t){return l(Q(l(t,36),(ft(),Lu)),21).Hc((Ho(),vf))?qEt:null},h.Kf=function(t,n){GIn(this,l(t,36),n)},h.d=!1;var qEt;I(Ib,"BKNodePlacer",1427),D(1700,1,{},fte),h.d=0,I(Ib,"NeighborhoodInformation",1700),D(1701,1,ii,iXe),h.Ne=function(t,n){return ywn(this,l(t,42),l(n,42))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Ib,"NeighborhoodInformation/NeighborComparator",1701),D(823,1,{}),I(Ib,"ThresholdStrategy",823),D(1825,823,{},YQe),h.wg=function(t,n,r){return this.a.o==(D1(),Y1)?gs:ia},h.xg=function(){},I(Ib,"ThresholdStrategy/NullThresholdStrategy",1825),D(587,1,{587:1},Qet),h.c=!1,h.d=!1,I(Ib,"ThresholdStrategy/Postprocessable",587),D(1826,823,{},XQe),h.wg=function(t,n,r){var a,o,f;return o=n==r,a=this.a.a[r.p]==n,o||a?(f=t,this.a.c==(xd(),w3)?(o&&(f=vle(this,n,!0)),!isNaN(f)&&!isFinite(f)&&a&&(f=vle(this,r,!1))):(o&&(f=vle(this,n,!0)),!isNaN(f)&&!isFinite(f)&&a&&(f=vle(this,r,!1))),f):t},h.xg=function(){for(var t,n,r,a,o;this.d.b!=0;)o=l(h2n(this.d),587),a=Lmt(this,o),a.a&&(t=a.a,r=Rt(this.a.f[this.a.g[o.b.p].p]),!(!r&&!Do(t)&&t.c.i.c==t.d.i.c)&&(n=N2t(this,o),n||Oln(this.e,o)));for(;this.e.a.c.length!=0;)N2t(this,l(P0t(this.e),587))},I(Ib,"ThresholdStrategy/SimpleThresholdStrategy",1826),D(645,1,{645:1,188:1,196:1},dte),h.dg=function(){return Vft(this)},h.qg=function(){return Vft(this)};var Mde;I(mfe,"EdgeRouterFactory",645),D(1485,1,Uo,nie),h.rg=function(t){return rSn(l(t,36))},h.Kf=function(t,n){ELn(l(t,36),n)};var HEt,VEt,UEt,GEt,KEt,zDe,WEt,YEt;I(mfe,"OrthogonalEdgeRouter",1485),D(1478,1,Uo,Yet),h.rg=function(t){return C8n(l(t,36))},h.Kf=function(t,n){GDn(this,l(t,36),n)};var XEt,QEt,JEt,ZEt,IB,eTt;I(mfe,"PolylineEdgeRouter",1478),D(1479,1,Ld,pte),h.Lb=function(t){return A7e(l(t,10))},h.Fb=function(t){return this===t},h.Mb=function(t){return A7e(l(t,10))},I(mfe,"PolylineEdgeRouter/1",1479),D(1872,1,ti,bte),h.Mb=function(t){return l(t,132).c==(J0(),qb)},I(i1,"HyperEdgeCycleDetector/lambda$0$Type",1872),D(1873,1,{},mte),h.Ze=function(t){return l(t,132).d},I(i1,"HyperEdgeCycleDetector/lambda$1$Type",1873),D(1874,1,ti,vte),h.Mb=function(t){return l(t,132).c==(J0(),qb)},I(i1,"HyperEdgeCycleDetector/lambda$2$Type",1874),D(1875,1,{},wte),h.Ze=function(t){return l(t,132).d},I(i1,"HyperEdgeCycleDetector/lambda$3$Type",1875),D(1876,1,{},yte),h.Ze=function(t){return l(t,132).d},I(i1,"HyperEdgeCycleDetector/lambda$4$Type",1876),D(1877,1,{},gte),h.Ze=function(t){return l(t,132).d},I(i1,"HyperEdgeCycleDetector/lambda$5$Type",1877),D(118,1,{34:1,118:1},xN),h.Fd=function(t){return Lun(this,l(t,118))},h.Fb=function(t){var n;return De(t,118)?(n=l(t,118),this.g==n.g):!1},h.Hb=function(){return this.g},h.Ib=function(){var t,n,r,a;for(t=new Th("{"),a=new G(this.n);a.a"+this.b+" ("+Whn(this.c)+")"},h.d=0,I(i1,"HyperEdgeSegmentDependency",132),D(528,22,{3:1,34:1,22:1,528:1},q3e);var qb,E4,tTt=Fr(i1,"HyperEdgeSegmentDependency/DependencyType",528,Hr,Qpn,a1n),nTt;D(1878,1,{},sXe),I(i1,"HyperEdgeSegmentSplitter",1878),D(1879,1,{},QJe),h.a=0,h.b=0,I(i1,"HyperEdgeSegmentSplitter/AreaRating",1879),D(339,1,{339:1},vae),h.a=0,h.b=0,h.c=0,I(i1,"HyperEdgeSegmentSplitter/FreeArea",339),D(1880,1,ii,a8),h.Ne=function(t,n){return Wfn(l(t,118),l(n,118))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(i1,"HyperEdgeSegmentSplitter/lambda$0$Type",1880),D(1881,1,fr,Cat),h.Cd=function(t){kmn(this.a,this.d,this.c,this.b,l(t,118))},h.b=0,I(i1,"HyperEdgeSegmentSplitter/lambda$1$Type",1881),D(1882,1,{},xte),h.Kb=function(t){return new bn(null,new kn(l(t,118).e,16))},I(i1,"HyperEdgeSegmentSplitter/lambda$2$Type",1882),D(1883,1,{},kte),h.Kb=function(t){return new bn(null,new kn(l(t,118).j,16))},I(i1,"HyperEdgeSegmentSplitter/lambda$3$Type",1883),D(1884,1,{},Ete),h.Ye=function(t){return ze(Ge(t))},I(i1,"HyperEdgeSegmentSplitter/lambda$4$Type",1884),D(664,1,{},Hae),h.a=0,h.b=0,h.c=0,I(i1,"OrthogonalRoutingGenerator",664),D(1703,1,{},Tte),h.Kb=function(t){return new bn(null,new kn(l(t,118).e,16))},I(i1,"OrthogonalRoutingGenerator/lambda$0$Type",1703),D(1704,1,{},Cte),h.Kb=function(t){return new bn(null,new kn(l(t,118).j,16))},I(i1,"OrthogonalRoutingGenerator/lambda$1$Type",1704),D(670,1,{}),I(vfe,"BaseRoutingDirectionStrategy",670),D(1870,670,{},eJe),h.yg=function(t,n,r){var a,o,f,g,w,E,C,L,B,z,V,J,te;if(!(t.r&&!t.q))for(L=n+t.o*r,C=new G(t.n);C.aDd&&(f=L,o=t,a=new lt(B,f),ui(g.a,a),Vw(this,g,o,a,!1),z=t.r,z&&(V=ze(Ge(ff(z.e,0))),a=new lt(V,f),ui(g.a,a),Vw(this,g,o,a,!1),f=n+z.o*r,o=z,a=new lt(V,f),ui(g.a,a),Vw(this,g,o,a,!1)),a=new lt(te,f),ui(g.a,a),Vw(this,g,o,a,!1)))},h.zg=function(t){return t.i.n.a+t.n.a+t.a.a},h.Ag=function(){return Ct(),Dr},h.Bg=function(){return Ct(),Qn},I(vfe,"NorthToSouthRoutingStrategy",1870),D(1871,670,{},tJe),h.yg=function(t,n,r){var a,o,f,g,w,E,C,L,B,z,V,J,te;if(!(t.r&&!t.q))for(L=n-t.o*r,C=new G(t.n);C.aDd&&(f=L,o=t,a=new lt(B,f),ui(g.a,a),Vw(this,g,o,a,!1),z=t.r,z&&(V=ze(Ge(ff(z.e,0))),a=new lt(V,f),ui(g.a,a),Vw(this,g,o,a,!1),f=n-z.o*r,o=z,a=new lt(V,f),ui(g.a,a),Vw(this,g,o,a,!1)),a=new lt(te,f),ui(g.a,a),Vw(this,g,o,a,!1)))},h.zg=function(t){return t.i.n.a+t.n.a+t.a.a},h.Ag=function(){return Ct(),Qn},h.Bg=function(){return Ct(),Dr},I(vfe,"SouthToNorthRoutingStrategy",1871),D(1869,670,{},nJe),h.yg=function(t,n,r){var a,o,f,g,w,E,C,L,B,z,V,J,te;if(!(t.r&&!t.q))for(L=n+t.o*r,C=new G(t.n);C.aDd&&(f=L,o=t,a=new lt(f,B),ui(g.a,a),Vw(this,g,o,a,!0),z=t.r,z&&(V=ze(Ge(ff(z.e,0))),a=new lt(f,V),ui(g.a,a),Vw(this,g,o,a,!0),f=n+z.o*r,o=z,a=new lt(f,V),ui(g.a,a),Vw(this,g,o,a,!0)),a=new lt(f,te),ui(g.a,a),Vw(this,g,o,a,!0)))},h.zg=function(t){return t.i.n.b+t.n.b+t.a.b},h.Ag=function(){return Ct(),ar},h.Bg=function(){return Ct(),er},I(vfe,"WestToEastRoutingStrategy",1869),D(828,1,{},Ske),h.Ib=function(){return Tb(this.a)},h.b=0,h.c=!1,h.d=!1,h.f=0,I(Zy,"NubSpline",828),D(418,1,{418:1},dbt,rot),I(Zy,"NubSpline/PolarCP",418),D(1480,1,Uo,Ydt),h.rg=function(t){return gxn(l(t,36))},h.Kf=function(t,n){hIn(this,l(t,36),n)};var rTt,iTt,sTt,aTt,oTt;I(Zy,"SplineEdgeRouter",1480),D(274,1,{274:1},WH),h.Ib=function(){return this.a+" ->("+this.c+") "+this.b},h.c=0,I(Zy,"SplineEdgeRouter/Dependency",274),D(465,22,{3:1,34:1,22:1,465:1},H3e);var Hb,K6,cTt=Fr(Zy,"SplineEdgeRouter/SideToProcess",465,Hr,r2n,o1n),uTt;D(1481,1,ti,Ste),h.Mb=function(t){return GA(),!l(t,131).o},I(Zy,"SplineEdgeRouter/lambda$0$Type",1481),D(1482,1,{},_te),h.Ze=function(t){return GA(),l(t,131).v+1},I(Zy,"SplineEdgeRouter/lambda$1$Type",1482),D(1483,1,fr,Jet),h.Cd=function(t){Ldn(this.a,this.b,l(t,42))},I(Zy,"SplineEdgeRouter/lambda$2$Type",1483),D(1484,1,fr,Zet),h.Cd=function(t){Mdn(this.a,this.b,l(t,42))},I(Zy,"SplineEdgeRouter/lambda$3$Type",1484),D(131,1,{34:1,131:1},_pt,Ike),h.Fd=function(t){return Iun(this,l(t,131))},h.b=0,h.e=!1,h.f=0,h.g=0,h.j=!1,h.k=!1,h.n=0,h.o=!1,h.p=!1,h.q=!1,h.s=0,h.u=0,h.v=0,h.F=0,I(Zy,"SplineSegment",131),D(468,1,{468:1},Ate),h.a=0,h.b=!1,h.c=!1,h.d=!1,h.e=!1,h.f=0,I(Zy,"SplineSegment/EdgeInformation",468),D(1198,1,{},CS),I(gp,LEe,1198),D(1199,1,ii,Lte),h.Ne=function(t,n){return Xkn(l(t,121),l(n,121))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(gp,E3t,1199),D(1197,1,{},dZe),I(gp,"MrTree",1197),D(405,22,{3:1,34:1,22:1,405:1,188:1,196:1},vq),h.dg=function(){return Wpt(this)},h.qg=function(){return Wpt(this)};var NW,lM,hM,fM,qDe=Fr(gp,"TreeLayoutPhases",405,Hr,smn,c1n),lTt;D(1112,205,tv,Hrt),h.rf=function(t,n){var r,a,o,f,g,w,E,C;for(Rt(Bt(at(t,(Hc(),dIe))))||KO((r=new Yv((aw(),new Jv(t))),r)),g=n.eh(xfe),g.Ug("build tGraph",1),w=(E=new nN,pc(E,t),rt(E,(Qi(),gM),t),C=new Pr,H_n(t,E,C),cAn(t,E,C),E),g.Vg(),g=n.eh(xfe),g.Ug("Split graph",1),f=Y_n(this.a,w),g.Vg(),o=new G(f);o.a"+Bm(this.c):"e_"+es(this)},I(vL,"TEdge",65),D(121,137,{3:1,121:1,96:1,137:1},nN),h.Ib=function(){var t,n,r,a,o;for(o=null,a=Rr(this.b,0);a.b!=a.d.c;)r=l(Br(a),40),o+=(r.c==null||r.c.length==0?"n_"+r.g:"n_"+r.c)+` -`;for(n=Rr(this.a,0);n.b!=n.d.c;)t=l(Br(n),65),o+=(t.b&&t.c?Bm(t.b)+"->"+Bm(t.c):"e_"+es(t))+` -`;return o};var _On=I(vL,"TGraph",121);D(643,508,{3:1,508:1,643:1,96:1,137:1}),I(vL,"TShape",643),D(40,643,{3:1,508:1,40:1,643:1,96:1,137:1},xce),h.Ib=function(){return Bm(this)};var PW=I(vL,"TNode",40);D(236,1,hg,Hg),h.Jc=function(t){to(this,t)},h.Kc=function(){var t;return t=Rr(this.a.d,0),new C5(t)},I(vL,"TNode/2",236),D(329,1,Oa,C5),h.Nb=function(t){Za(this,t)},h.Pb=function(){return l(Br(this.a),65).c},h.Ob=function(){return QI(this.a)},h.Qb=function(){Yoe(this.a)},I(vL,"TNode/2/1",329),D(1923,1,ts,Bte),h.Kf=function(t,n){zIn(this,l(t,121),n)},I(Su,"CompactionProcessor",1923),D(1924,1,ii,lXe),h.Ne=function(t,n){return A3n(this.a,l(t,40),l(n,40))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Su,"CompactionProcessor/lambda$0$Type",1924),D(1925,1,ti,ttt),h.Mb=function(t){return Npn(this.b,this.a,l(t,42))},h.a=0,h.b=0,I(Su,"CompactionProcessor/lambda$1$Type",1925),D(1934,1,ii,o8),h.Ne=function(t,n){return Cgn(l(t,40),l(n,40))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Su,"CompactionProcessor/lambda$10$Type",1934),D(1935,1,ii,Zj),h.Ne=function(t,n){return jhn(l(t,40),l(n,40))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Su,"CompactionProcessor/lambda$11$Type",1935),D(1936,1,ii,Fte),h.Ne=function(t,n){return Sgn(l(t,40),l(n,40))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Su,"CompactionProcessor/lambda$12$Type",1936),D(1926,1,ti,hXe),h.Mb=function(t){return khn(this.a,l(t,42))},h.a=0,I(Su,"CompactionProcessor/lambda$2$Type",1926),D(1927,1,ti,fXe),h.Mb=function(t){return Ehn(this.a,l(t,42))},h.a=0,I(Su,"CompactionProcessor/lambda$3$Type",1927),D(1928,1,ti,pI),h.Mb=function(t){return l(t,40).c.indexOf(DG)==-1},I(Su,"CompactionProcessor/lambda$4$Type",1928),D(1929,1,{},dXe),h.Kb=function(t){return Bbn(this.a,l(t,40))},h.a=0,I(Su,"CompactionProcessor/lambda$5$Type",1929),D(1930,1,{},gXe),h.Kb=function(t){return Vvn(this.a,l(t,40))},h.a=0,I(Su,"CompactionProcessor/lambda$6$Type",1930),D(1931,1,ii,pXe),h.Ne=function(t,n){return tvn(this.a,l(t,240),l(n,240))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Su,"CompactionProcessor/lambda$7$Type",1931),D(1932,1,ii,bXe),h.Ne=function(t,n){return nvn(this.a,l(t,40),l(n,40))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Su,"CompactionProcessor/lambda$8$Type",1932),D(1933,1,ii,Rte),h.Ne=function(t,n){return $hn(l(t,40),l(n,40))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Su,"CompactionProcessor/lambda$9$Type",1933),D(1921,1,ts,jte),h.Kf=function(t,n){FSn(l(t,121),n)},I(Su,"DirectionProcessor",1921),D(1913,1,ts,qrt),h.Kf=function(t,n){aAn(this,l(t,121),n)},I(Su,"FanProcessor",1913),D(1937,1,ts,$te),h.Kf=function(t,n){CSn(l(t,121),n)},I(Su,"GraphBoundsProcessor",1937),D(1938,1,{},zte),h.Ye=function(t){return l(t,40).e.a},I(Su,"GraphBoundsProcessor/lambda$0$Type",1938),D(1939,1,{},qte),h.Ye=function(t){return l(t,40).e.b},I(Su,"GraphBoundsProcessor/lambda$1$Type",1939),D(1940,1,{},Hte),h.Ye=function(t){return sln(l(t,40))},I(Su,"GraphBoundsProcessor/lambda$2$Type",1940),D(1941,1,{},Vte),h.Ye=function(t){return iln(l(t,40))},I(Su,"GraphBoundsProcessor/lambda$3$Type",1941),D(262,22,{3:1,34:1,22:1,262:1,196:1},ow),h.dg=function(){switch(this.g){case 0:return new bJe;case 1:return new qrt;case 2:return new pJe;case 3:return new n$;case 4:return new Ute;case 8:return new e$;case 5:return new jte;case 6:return new i$;case 7:return new Bte;case 9:return new $te;case 10:return new Kte;default:throw ue(new Yn(Fhe+(this.f!=null?this.f:""+this.g)))}};var HDe,VDe,UDe,GDe,KDe,WDe,YDe,XDe,QDe,JDe,Dde,AOn=Fr(Su,Rhe,262,Hr,Bft,u1n),hTt;D(1920,1,ts,e$),h.Kf=function(t,n){RDn(l(t,121),n)},I(Su,"LevelCoordinatesProcessor",1920),D(1918,1,ts,Ute),h.Kf=function(t,n){sCn(this,l(t,121),n)},h.a=0,I(Su,"LevelHeightProcessor",1918),D(1919,1,hg,t$),h.Jc=function(t){to(this,t)},h.Kc=function(){return Cn(),Mk(),AT},I(Su,"LevelHeightProcessor/1",1919),D(1914,1,ts,pJe),h.Kf=function(t,n){wSn(this,l(t,121),n)},I(Su,"LevelProcessor",1914),D(1915,1,ti,Gte),h.Mb=function(t){return Rt(Bt(Q(l(t,40),(Qi(),Vb))))},I(Su,"LevelProcessor/lambda$0$Type",1915),D(1916,1,ts,n$),h.Kf=function(t,n){nkn(this,l(t,121),n)},h.a=0,I(Su,"NeighborsProcessor",1916),D(1917,1,hg,r$),h.Jc=function(t){to(this,t)},h.Kc=function(){return Cn(),Mk(),AT},I(Su,"NeighborsProcessor/1",1917),D(1922,1,ts,i$),h.Kf=function(t,n){sAn(this,l(t,121),n)},h.a=0,I(Su,"NodePositionProcessor",1922),D(1912,1,ts,bJe),h.Kf=function(t,n){$Ln(this,l(t,121),n)},I(Su,"RootProcessor",1912),D(1942,1,ts,Kte),h.Kf=function(t,n){B6n(l(t,121),n)},I(Su,"Untreeifyer",1942),D(392,22,{3:1,34:1,22:1,392:1},Ose);var OB,Ide,ZDe,eIe=Fr(UP,"EdgeRoutingMode",392,Hr,J2n,l1n),fTt,NB,QT,Ode,tIe,nIe,Nde,Pde,rIe,Bde,iIe,Fde,dM,Rde,BW,FW,k0,c1,JT,gM,pM,C2,sIe,dTt,jde,Vb,PB,BB;D(862,1,Pf,rie),h.hf=function(t){sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,fCe),""),pyt),"Turns on Tree compaction which decreases the size of the whole tree by placing nodes of multiple levels in one large level"),(Hn(),!1)),(g2(),ya)),Ns),un((r1(),Pn))))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,dCe),""),"Edge End Texture Length"),"Should be set to the length of the texture at the end of an edge. This value can be used to improve the Edge Routing."),7),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,gCe),""),"Tree Level"),"The index for the tree level the node is in"),pt(0)),Tc),ro),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,pCe),""),pyt),"When set to a positive number this option will force the algorithm to place the node to the specified position within the trees layer if weighting is set to constraint"),pt(-1)),Tc),ro),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,bCe),""),"Weighting of Nodes"),"Which weighting to use when computing a node order."),cIe),ps),yIe),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,mCe),""),"Edge Routing Mode"),"Chooses an Edge Routing algorithm."),aIe),ps),eIe),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,vCe),""),"Search Order"),"Which search order to use when computing a spanning tree."),oIe),ps),kIe),un(Pn)))),iwt((new v8,t))};var gTt,pTt,bTt,aIe,mTt,vTt,oIe,wTt,yTt,cIe;I(UP,"MrTreeMetaDataProvider",862),D(1006,1,Pf,v8),h.hf=function(t){iwt(t)};var xTt,uIe,lIe,y3,hIe,fIe,$de,kTt,ETt,TTt,CTt,STt,_Tt,ATt,dIe,gIe,pIe,LTt,W6,RW,bIe,MTt,mIe,zde,DTt,ITt,OTt,vIe,NTt,$d,wIe;I(UP,"MrTreeOptions",1006),D(1007,1,{},Wte),h.sf=function(){var t;return t=new Hrt,t},h.tf=function(t){},I(UP,"MrTreeOptions/MrtreeFactory",1007),D(353,22,{3:1,34:1,22:1,353:1},wq);var qde,jW,Hde,Vde,yIe=Fr(UP,"OrderWeighting",353,Hr,amn,h1n),PTt;D(433,22,{3:1,34:1,22:1,433:1},V3e);var xIe,Ude,kIe=Fr(UP,"TreeifyingOrder",433,Hr,t2n,f1n),BTt;D(1486,1,Uo,aie),h.rg=function(t){return l(t,121),FTt},h.Kf=function(t,n){b3n(this,l(t,121),n)};var FTt;I("org.eclipse.elk.alg.mrtree.p1treeify","DFSTreeifyer",1486),D(1487,1,Uo,dk),h.rg=function(t){return l(t,121),RTt},h.Kf=function(t,n){ESn(this,l(t,121),n)};var RTt;I(pT,"NodeOrderer",1487),D(1494,1,{},pwe),h.td=function(t){return Yit(t)},I(pT,"NodeOrderer/0methodref$lambda$6$Type",1494),D(1488,1,ti,ane),h.Mb=function(t){return ux(),Rt(Bt(Q(l(t,40),(Qi(),Vb))))},I(pT,"NodeOrderer/lambda$0$Type",1488),D(1489,1,ti,one),h.Mb=function(t){return ux(),l(Q(l(t,40),(Hc(),W6)),17).a<0},I(pT,"NodeOrderer/lambda$1$Type",1489),D(1490,1,ti,vXe),h.Mb=function(t){return Uwn(this.a,l(t,40))},I(pT,"NodeOrderer/lambda$2$Type",1490),D(1491,1,ti,mXe),h.Mb=function(t){return jbn(this.a,l(t,40))},I(pT,"NodeOrderer/lambda$3$Type",1491),D(1492,1,ii,cne),h.Ne=function(t,n){return gwn(l(t,40),l(n,40))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(pT,"NodeOrderer/lambda$4$Type",1492),D(1493,1,ti,une),h.Mb=function(t){return ux(),l(Q(l(t,40),(Qi(),Pde)),17).a!=0},I(pT,"NodeOrderer/lambda$5$Type",1493),D(1495,1,Uo,sie),h.rg=function(t){return l(t,121),jTt},h.Kf=function(t,n){I_n(this,l(t,121),n)},h.b=0;var jTt;I("org.eclipse.elk.alg.mrtree.p3place","NodePlacer",1495),D(1496,1,Uo,iie),h.rg=function(t){return l(t,121),$Tt},h.Kf=function(t,n){d_n(l(t,121),n)};var $Tt,LOn=I(vh,"EdgeRouter",1496);D(1498,1,ii,sne),h.Ne=function(t,n){return ru(l(t,17).a,l(n,17).a)},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(vh,"EdgeRouter/0methodref$compare$Type",1498),D(1503,1,{},Yte),h.Ye=function(t){return ze(Ge(t))},I(vh,"EdgeRouter/1methodref$doubleValue$Type",1503),D(1505,1,ii,a$),h.Ne=function(t,n){return Yi(ze(Ge(t)),ze(Ge(n)))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(vh,"EdgeRouter/2methodref$compare$Type",1505),D(1507,1,ii,Xte),h.Ne=function(t,n){return Yi(ze(Ge(t)),ze(Ge(n)))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(vh,"EdgeRouter/3methodref$compare$Type",1507),D(1509,1,{},s$),h.Ye=function(t){return ze(Ge(t))},I(vh,"EdgeRouter/4methodref$doubleValue$Type",1509),D(1511,1,ii,Qte),h.Ne=function(t,n){return Yi(ze(Ge(t)),ze(Ge(n)))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(vh,"EdgeRouter/5methodref$compare$Type",1511),D(1513,1,ii,bI),h.Ne=function(t,n){return Yi(ze(Ge(t)),ze(Ge(n)))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(vh,"EdgeRouter/6methodref$compare$Type",1513),D(1497,1,{},Jte),h.Kb=function(t){return tp(),l(Q(l(t,40),(Hc(),$d)),17)},I(vh,"EdgeRouter/lambda$0$Type",1497),D(1508,1,{},Zte),h.Kb=function(t){return Zhn(l(t,40))},I(vh,"EdgeRouter/lambda$11$Type",1508),D(1510,1,{},ntt),h.Kb=function(t){return _dn(this.b,this.a,l(t,40))},h.a=0,h.b=0,I(vh,"EdgeRouter/lambda$13$Type",1510),D(1512,1,{},rtt),h.Kb=function(t){return efn(this.b,this.a,l(t,40))},h.a=0,h.b=0,I(vh,"EdgeRouter/lambda$15$Type",1512),D(1514,1,ii,ene),h.Ne=function(t,n){return f6n(l(t,65),l(n,65))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(vh,"EdgeRouter/lambda$17$Type",1514),D(1515,1,ii,tne),h.Ne=function(t,n){return d6n(l(t,65),l(n,65))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(vh,"EdgeRouter/lambda$18$Type",1515),D(1516,1,ii,nne),h.Ne=function(t,n){return p6n(l(t,65),l(n,65))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(vh,"EdgeRouter/lambda$19$Type",1516),D(1499,1,ti,wXe),h.Mb=function(t){return b2n(this.a,l(t,40))},h.a=0,I(vh,"EdgeRouter/lambda$2$Type",1499),D(1517,1,ii,o$),h.Ne=function(t,n){return g6n(l(t,65),l(n,65))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(vh,"EdgeRouter/lambda$20$Type",1517),D(1500,1,ii,rne),h.Ne=function(t,n){return ddn(l(t,40),l(n,40))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(vh,"EdgeRouter/lambda$3$Type",1500),D(1501,1,ii,ine),h.Ne=function(t,n){return gdn(l(t,40),l(n,40))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(vh,"EdgeRouter/lambda$4$Type",1501),D(1502,1,{},lne),h.Kb=function(t){return tfn(l(t,40))},I(vh,"EdgeRouter/lambda$5$Type",1502),D(1504,1,{},itt),h.Kb=function(t){return Adn(this.b,this.a,l(t,40))},h.a=0,h.b=0,I(vh,"EdgeRouter/lambda$7$Type",1504),D(1506,1,{},stt),h.Kb=function(t){return nfn(this.b,this.a,l(t,40))},h.a=0,h.b=0,I(vh,"EdgeRouter/lambda$9$Type",1506),D(675,1,{675:1},Fdt),h.e=0,h.f=!1,h.g=!1,I(vh,"MultiLevelEdgeNodeNodeGap",675),D(1943,1,ii,hne),h.Ne=function(t,n){return S2n(l(t,240),l(n,240))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(vh,"MultiLevelEdgeNodeNodeGap/lambda$0$Type",1943),D(1944,1,ii,fne),h.Ne=function(t,n){return _2n(l(t,240),l(n,240))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(vh,"MultiLevelEdgeNodeNodeGap/lambda$1$Type",1944);var Y6;D(501,22,{3:1,34:1,22:1,501:1,188:1,196:1},U3e),h.dg=function(){return E1t(this)},h.qg=function(){return E1t(this)};var $W,X6,EIe=Fr(wCe,"RadialLayoutPhases",501,Hr,Wpn,d1n),zTt;D(1113,205,tv,fZe),h.rf=function(t,n){var r,a,o,f,g,w;if(r=cbt(this,t),n.Ug("Radial layout",r.c.length),Rt(Bt(at(t,(Sb(),NIe))))||KO((a=new Yv((aw(),new Jv(t))),a)),w=mxn(t),Hi(t,(H5(),Y6),w),!w)throw ue(new Yn("The given graph is not a tree!"));for(o=ze(Ge(at(t,HW))),o==0&&(o=qpt(t)),Hi(t,HW,o),g=new G(cbt(this,t));g.a=3)for(ot=l(Oe($e,0),27),St=l(Oe($e,1),27),f=0;f+2<$e.i;)if(Ze=ot,ot=St,St=l(Oe($e,f+2),27),Ze.f>=ot.f+St.f+L||St.f>=Ze.f+ot.f+L){cn=!0;break}else++f;else cn=!0;if(!cn){for(z=$e.i,w=new or($e);w.e!=w.i.gc();)g=l(gr(w),27),Hi(g,(pi(),XB),pt(z)),--z;Rmt(t,new L8),n.Vg();return}for(r=(qO(this.a),X0(this.a,(WV(),RB),l(at(t,uOe),188)),X0(this.a,VW,l(at(t,rOe),188)),X0(this.a,rge,l(at(t,aOe),188)),uye(this.a,(Bn=new Xs,fi(Bn,RB,(sU(),age)),fi(Bn,VW,sge),Rt(Bt(at(t,tOe)))&&fi(Bn,RB,ige),Bn)),bP(this.a,t)),C=1/r.c.length,J=new G(r);J.a0&&K0t((Xn(n-1,t.length),t.charCodeAt(n-1)),N3t);)--n;if(a>=n)throw ue(new Yn("The given string does not contain any numbers."));if(o=Gy((Ga(a,n,t.length),t.substr(a,n-a)),`,|;|\r| -`),o.length!=2)throw ue(new Yn("Exactly two numbers are expected, "+o.length+" were found."));try{this.a=jy($y(o[0])),this.b=jy($y(o[1]))}catch(f){throw f=bs(f),De(f,130)?(r=f,ue(new Yn(P3t+r))):ue(f)}},h.Ib=function(){return"("+this.a+","+this.b+")"},h.a=0,h.b=0;var Ea=I($P,"KVector",8);D(75,67,{3:1,4:1,20:1,31:1,56:1,16:1,67:1,15:1,75:1,423:1},bl,Gz,frt),h.Pc=function(){return Oyn(this)},h.cg=function(t){var n,r,a,o,f,g;a=Gy(t,`,|;|\\(|\\)|\\[|\\]|\\{|\\}| | | -`),Ch(this);try{for(r=0,f=0,o=0,g=0;r0&&(f%2==0?o=jy(a[r]):g=jy(a[r]),f>0&&f%2!=0&&ui(this,new lt(o,g)),++f),++r}catch(w){throw w=bs(w),De(w,130)?(n=w,ue(new Yn("The given string does not match the expected format for vectors."+n))):ue(w)}},h.Ib=function(){var t,n,r;for(t=new Th("("),n=Rr(this,0);n.b!=n.d.c;)r=l(Br(n),8),hi(t,r.a+","+r.b),n.b!=n.d.c&&(t.a+="; ");return(t.a+=")",t).a};var GOe=I($P,"KVectorChain",75);D(255,22,{3:1,34:1,22:1,255:1},__);var Sge,eY,tY,HB,VB,nY,KOe=Fr(nh,"Alignment",255,Hr,Mvn,F1n),xSt;D(991,1,Pf,fie),h.hf=function(t){xmt(t)};var WOe,_ge,kSt,YOe,XOe,ESt,QOe,TSt,CSt,JOe,ZOe,SSt;I(nh,"BoxLayouterOptions",991),D(992,1,{},ek),h.sf=function(){var t;return t=new jne,t},h.tf=function(t){},I(nh,"BoxLayouterOptions/BoxFactory",992),D(298,22,{3:1,34:1,22:1,298:1},A_);var EM,Age,TM,CM,SM,Lge,Mge=Fr(nh,"ContentAlignment",298,Hr,Dvn,R1n),_St;D(699,1,Pf,uz),h.hf=function(t){sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,Byt),""),"Layout Algorithm"),"Select a specific layout algorithm."),(g2(),J6)),zt),un((r1(),Pn))))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,Fyt),""),"Resolved Layout Algorithm"),"Meta data associated with the selected algorithm."),X1),IOn),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,qTe),""),"Alignment"),"Alignment of the selected node relative to other nodes; the exact meaning depends on the used algorithm."),eNe),ps),KOe),un(ha)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,Ox),""),"Aspect Ratio"),"The desired aspect ratio of the drawing, that is the quotient of width by height."),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,tSe),""),"Bend Points"),"A fixed list of bend points for the edge. This is used by the 'Fixed Layout' algorithm to specify a pre-defined routing for an edge. The vector chain must include the source point, any bend points, and the target point, so it must have at least two points."),X1),GOe),un(zd)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,SG),""),"Content Alignment"),"Specifies how the content of a node are aligned. Each node can individually control the alignment of its contents. I.e. if a node should be aligned top left in its parent node, the parent node should specify that option."),nNe),t9),Mge),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,VP),""),"Debug Mode"),"Whether additional debug information shall be generated."),(Hn(),!1)),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,gfe),""),kEe),"Overall direction of edges: horizontal (right / left) or vertical (down / up)."),rNe),ps),LM),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,HP),""),"Edge Routing"),"What kind of edge routing style should be applied for the content of a parent node. Algorithms may also set this option to single edges in order to mark them as splines. The bend point list of edges with this option set to SPLINES must be interpreted as control points for a piecewise cubic spline."),aNe),ps),Vge),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,ZCe),""),"Expand Nodes"),"If active, nodes are expanded to fill the area of their parent."),!1),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,CG),""),"Hierarchy Handling"),"Determines whether separate layout runs are triggered for different compound nodes in a hierarchical graph. Setting a node's hierarchy handling to `INCLUDE_CHILDREN` will lay out that node and all of its descendants in a single layout run, until a descendant is encountered which has its hierarchy handling set to `SEPARATE_CHILDREN`. In general, `SEPARATE_CHILDREN` will ensure that a new layout run is triggered for a node with that setting. Including multiple levels of hierarchy in a single layout run may allow cross-hierarchical edges to be laid out properly. If the root node is set to `INHERIT` (or not set at all), the default behavior is `SEPARATE_CHILDREN`."),uNe),ps),YNe),rs(Pn,he(le(xg,1),it,170,0,[ha]))))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Xw),""),"Padding"),"The padding to be left to a parent element's border when placing child elements. This can also serve as an output option of a layout algorithm if node size calculation is setup appropriately."),vNe),X1),wAe),rs(Pn,he(le(xg,1),it,170,0,[ha]))))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,hL),""),"Interactive"),"Whether the algorithm should be run in interactive mode for the content of a parent node. What this means exactly depends on how the specific algorithm interprets this option. Usually in the interactive mode algorithms try to modify the current layout as little as possible."),!1),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,AG),""),"interactive Layout"),"Whether the graph should be changeable interactively and by setting constraints"),!1),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,fL),""),"Omit Node Micro Layout"),"Node micro layout comprises the computation of node dimensions (if requested), the placement of ports and their labels, and the placement of node labels. The functionality is implemented independent of any specific layout algorithm and shouldn't have any negative impact on the layout algorithm's performance itself. Yet, if any unforeseen behavior occurs, this option allows to deactivate the micro layout."),!1),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Nhe),""),"Port Constraints"),"Defines constraints of the position of the ports of a node."),ENe),ps),JNe),un(ha)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,_G),""),"Position"),"The position of a node, port, or label. This is used by the 'Fixed Layout' algorithm to specify a pre-defined position."),X1),Ea),rs(ha,he(le(xg,1),it,170,0,[yv,S2]))))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,NP),""),"Priority"),"Defines the priority of an object; its meaning depends on the specific layout algorithm and the context where it is used."),Tc),ro),rs(ha,he(le(xg,1),it,170,0,[zd]))))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,oG),""),"Randomization Seed"),"Seed used for pseudo-random number generators to control the layout algorithm. If the value is 0, the seed shall be determined pseudo-randomly (e.g. from the system time)."),Tc),ro),un(Pn)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,lL),""),"Separate Connected Components"),"Whether each connected component should be processed separately."),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,ZTe),""),"Junction Points"),"This option is not used as option, but as output of the layout algorithms. It is attached to edges and determines the points where junction symbols should be drawn in order to represent hyperedges with orthogonal routing. Whether such points are computed depends on the chosen layout algorithm and edge routing style. The points are put into the vector chain with no specific order."),lNe),X1),GOe),un(zd)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,nCe),""),"Comment Box"),"Whether the node should be regarded as a comment box instead of a regular node. In that case its placement should be similar to how labels are handled. Any edges incident to a comment box specify to which graph elements the comment is related."),!1),ya),Ns),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,rCe),""),"Hypernode"),"Whether the node should be handled as a hypernode."),!1),ya),Ns),un(ha)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,sOn),""),"Label Manager"),"Label managers can shorten labels upon a layout algorithm's request."),X1),FOn),rs(Pn,he(le(xg,1),it,170,0,[S2]))))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,sCe),""),"Margins"),"Margins define additional space around the actual bounds of a graph element. For instance, ports or labels being placed on the outside of a node's border might introduce such a margin. The margin is used to guarantee non-overlap of other graph elements with those ports or labels."),hNe),X1),vAe),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,$Te),""),"No Layout"),"No layout is done for the associated element. This is used to mark parts of a diagram to avoid their inclusion in the layout graph, or to mark parts of the layout graph to prevent layout engines from processing them. If you wish to exclude the contents of a compound node from automatic layout, while the node itself is still considered on its own layer, use the 'Fixed Layout' algorithm for that node."),!1),ya),Ns),rs(ha,he(le(xg,1),it,170,0,[zd,yv,S2]))))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Ryt),""),"Scale Factor"),"The scaling factor to be applied to the corresponding node in recursive layout. It causes the corresponding node's size to be adjusted, and its ports and labels to be sized and placed accordingly after the layout of that node has been determined (and before the node itself and its siblings are arranged). The scaling is not reverted afterwards, so the resulting layout graph contains the adjusted size and position data. This option is currently not supported if 'Layout Hierarchy' is set."),1),fo),ta),un(ha)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,jyt),""),"Child Area Width"),"The width of the area occupied by the laid out children of a node."),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,$yt),""),"Child Area Height"),"The height of the area occupied by the laid out children of a node."),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,PP),""),Dyt),"Turns topdown layout on and off. If this option is enabled, hierarchical layout will be computed first for the root node and then for its children recursively. Layouts are then scaled down to fit the area provided by their parents. Graphs must follow a certain structure for topdown layout to work properly. {@link TopdownNodeTypes.PARALLEL_NODE} nodes must have children of type {@link TopdownNodeTypes.HIERARCHICAL_NODE} and must define {@link topdown.hierarchicalNodeWidth} and {@link topdown.hierarchicalNodeAspectRatio} for their children. Furthermore they need to be laid out using an algorithm that is a {@link TopdownLayoutProvider}. Hierarchical nodes can also be parents of other hierarchical nodes and can optionally use a {@link TopdownSizeApproximator} to dynamically set sizes during topdown layout. In this case {@link topdown.hierarchicalNodeWidth} and {@link topdown.hierarchicalNodeAspectRatio} should be set on the node itself rather than the parent. The values are then used by the size approximator as base values. Hierarchical nodes require the layout option {@link nodeSize.fixedGraphSize} to be true to prevent the algorithm used there from resizing the hierarchical node. This option is not supported if 'Hierarchy Handling' is set to 'INCLUDE_CHILDREN'"),!1),ya),Ns),un(Pn)))),Qs(t,PP,Qw,null),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,zyt),""),"Animate"),"Whether the shift from the old layout to the new computed layout shall be animated."),!0),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,qyt),""),"Animation Time Factor"),"Factor for computation of animation time. The higher the value, the longer the animation time. If the value is 0, the resulting time is always equal to the minimum defined by 'Minimal Animation Time'."),pt(100)),Tc),ro),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Hyt),""),"Layout Ancestors"),"Whether the hierarchy levels on the path from the selected element to the root of the diagram shall be included in the layout process."),!1),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Vyt),""),"Maximal Animation Time"),"The maximal time for animations, in milliseconds."),pt(4e3)),Tc),ro),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Uyt),""),"Minimal Animation Time"),"The minimal time for animations, in milliseconds."),pt(400)),Tc),ro),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Gyt),""),"Progress Bar"),"Whether a progress bar shall be displayed during layout computations."),!1),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Kyt),""),"Validate Graph"),"Whether the graph shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user."),!1),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Wyt),""),"Validate Options"),"Whether layout options shall be validated before any layout algorithm is applied. If this option is enabled and at least one error is found, the layout process is aborted and a message is shown to the user."),!0),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Yyt),""),"Zoom to Fit"),"Whether the zoom level shall be set to view the whole diagram after layout."),!1),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,eSe),"box"),"Box Layout Mode"),"Configures the packing mode used by the {@link BoxLayoutProvider}. If SIMPLE is not required (neither priorities are used nor the interactive mode), GROUP_DEC can improve the packing and decrease the area. GROUP_MIXED and GROUP_INC may, in very specific scenarios, work better."),tNe),ps),cPe),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,LTe),U1),"Comment Comment Spacing"),"Spacing to be preserved between a comment box and other comment boxes connected to the same node. The space left between comment boxes of different nodes is controlled by the node-node spacing."),10),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,MTe),U1),"Comment Node Spacing"),"Spacing to be preserved between a node and its connected comment boxes. The space left between a node and the comments of another node is controlled by the node-node spacing."),10),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,_he),U1),"Components Spacing"),"Spacing to be preserved between pairs of connected components. This option is only relevant if 'separateConnectedComponents' is activated."),20),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,DTe),U1),"Edge Spacing"),"Spacing to be preserved between any two edges. Note that while this can somewhat easily be satisfied for the segments of orthogonally drawn edges, it is harder for general polylines or splines."),10),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Ohe),U1),"Edge Label Spacing"),"The minimal distance to be preserved between a label and the edge it is associated with. Note that the placement of a label is influenced by the 'edgelabels.placement' option."),2),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,dfe),U1),"Edge Node Spacing"),"Spacing to be preserved between nodes and edges."),10),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,ITe),U1),"Label Spacing"),"Determines the amount of space to be left between two labels of the same graph element."),0),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,PTe),U1),"Label Node Spacing"),"Spacing to be preserved between labels and the border of node they are associated with. Note that the placement of a label is influenced by the 'nodelabels.placement' option."),5),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,OTe),U1),"Horizontal spacing between Label and Port"),"Horizontal spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,NTe),U1),"Vertical spacing between Label and Port"),"Vertical spacing to be preserved between labels and the ports they are associated with. Note that the placement of a label is influenced by the 'portlabels.placement' option."),1),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Jy),U1),"Node Spacing"),"The minimal distance to be preserved between each two nodes."),20),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,BTe),U1),"Node Self Loop Spacing"),"Spacing to be preserved between a node and its self loops."),10),fo),ta),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,FTe),U1),"Port Spacing"),"Spacing between pairs of ports of the same node."),10),fo),ta),rs(Pn,he(le(xg,1),it,170,0,[ha]))))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,RTe),U1),"Individual Spacing"),"Allows to specify individual spacing values for graph elements that shall be different from the value specified for the element's parent."),X1),g_t),rs(ha,he(le(xg,1),it,170,0,[zd,yv,S2]))))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,aCe),U1),"Additional Port Space"),"Additional space around the sets of ports on each node side. For each side of a node, this option can reserve additional space before and after the ports on each side. For example, a top spacing of 20 makes sure that the first port on the western and eastern side is 20 units away from the northern border."),NNe),X1),vAe),un(Pn)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,bfe),Jyt),"Layout Partition"),"Partition to which the node belongs. This requires Layout Partitioning to be active. Nodes with lower partition IDs will appear to the left of nodes with higher partition IDs (assuming a left-to-right layout direction)."),Tc),ro),rs(Pn,he(le(xg,1),it,170,0,[ha]))))),Qs(t,bfe,pfe,BSt),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,pfe),Jyt),"Layout Partitioning"),"Whether to activate partitioned layout. This will allow to group nodes through the Layout Partition option. a pair of nodes with different partition indices is then placed such that the node with lower index is placed to the left of the other node (with left-to-right layout direction). Depending on the layout algorithm, this may only be guaranteed to work if all nodes have a layout partition configured, or at least if edges that cross partitions are not part of a partition-crossing cycle."),wNe),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,UTe),Zyt),"Node Label Padding"),"Define padding for node labels that are placed inside of a node."),dNe),X1),wAe),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,fT),Zyt),"Node Label Placement"),"Hints for where node labels are to be placed; if empty, the node label's position is not modified."),gNe),t9),Ko),rs(ha,he(le(xg,1),it,170,0,[S2]))))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,WTe),RG),"Port Alignment"),"Defines the default port distribution for a node. May be overridden for each side individually."),xNe),ps),OM),un(ha)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,YTe),RG),"Port Alignment (North)"),"Defines how ports on the northern side are placed, overriding the node's general port alignment."),ps),OM),un(ha)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,XTe),RG),"Port Alignment (South)"),"Defines how ports on the southern side are placed, overriding the node's general port alignment."),ps),OM),un(ha)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,QTe),RG),"Port Alignment (West)"),"Defines how ports on the western side are placed, overriding the node's general port alignment."),ps),OM),un(ha)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,JTe),RG),"Port Alignment (East)"),"Defines how ports on the eastern side are placed, overriding the node's general port alignment."),ps),OM),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,x6),Rfe),"Node Size Constraints"),"What should be taken into account when calculating a node's size. Empty size constraints specify that a node's size is already fixed and should not be changed."),pNe),t9),BM),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Nx),Rfe),"Node Size Options"),"Options modifying the behavior of the size constraints set on a node. Each member of the set specifies something that should be taken into account when calculating node sizes. The empty set corresponds to no further modifications."),mNe),t9),ePe),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Px),Rfe),"Node Size Minimum"),"The minimal size to which a node can be reduced."),bNe),X1),Ea),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,hT),Rfe),"Fixed Graph Size"),"By default, the fixed layout provider will enlarge a graph until it is large enough to contain its children. If this option is set, it won't do so."),!1),ya),Ns),un(Pn)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,eCe),ffe),"Edge Label Placement"),"Gives a hint on where to put edge labels."),iNe),ps),FNe),un(S2)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,cG),ffe),"Inline Edge Labels"),"If true, an edge label is placed directly on its edge. May only apply to center edge labels. This kind of label placement is only advisable if the label's rendering is such that it is not crossed by its edge and thus stays legible."),!1),ya),Ns),un(S2)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,aOn),"font"),"Font Name"),"Font name used for a label."),J6),zt),un(S2)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,Xyt),"font"),"Font Size"),"Font size used for a label."),Tc),ro),un(S2)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,iCe),jfe),"Port Anchor Offset"),"The offset to the port position where connections shall be attached."),X1),Ea),un(yv)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,tCe),jfe),"Port Index"),"The index of a port in the fixed order around a node. The order is assumed as clockwise, starting with the leftmost port on the top side. This option must be set if 'Port Constraints' is set to FIXED_ORDER and no specific positions are given for the ports. Additionally, the option 'Port Side' must be defined in this case."),Tc),ro),un(yv)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,zTe),jfe),"Port Side"),"The side of a node on which a port is situated. This option must be set if 'Port Constraints' is set to FIXED_SIDE or FIXED_ORDER and no specific positions are given for the ports."),SNe),ps),Oo),un(yv)))),sn(t,new Xt(nn(tn(rn(Qt(en(Jt(Zt(new Ut,jTe),jfe),"Port Border Offset"),"The offset of ports on the node border. With a positive offset the port is moved outside of the node, while with a negative offset the port is moved towards the inside. An offset of 0 means that the port is placed directly on the node border, i.e. if the port side is north, the port's south border touches the nodes's north border; if the port side is east, the port's west border touches the nodes's east border; if the port side is south, the port's north border touches the node's south border; if the port side is west, the port's east border touches the node's west border."),fo),ta),un(yv)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,dT),iSe),"Port Label Placement"),"Decides on a placement method for port labels; if empty, the node label's position is not modified."),TNe),t9),cY),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,GTe),iSe),"Port Labels Next to Port"),"Use 'portLabels.placement': NEXT_TO_PORT_OF_POSSIBLE."),!1),ya),Ns),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,KTe),iSe),"Treat Port Labels as Group"),"If this option is true (default), the labels of a port will be treated as a group when it comes to centering them next to their port. If this option is false, only the first label will be centered next to the port, with the others being placed below. This only applies to labels of eastern and western ports and will have no effect if labels are not placed next to their port."),!0),ya),Ns),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,BP),KP),"Topdown Scale Factor"),"The scaling factor to be applied to the nodes laid out within the node in recursive topdown layout. The difference to 'Scale Factor' is that the node itself is not scaled. This value has to be set on hierarchical nodes."),1),fo),ta),un(Pn)))),Qs(t,BP,Qw,VSt),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,nSe),KP),"Topdown Size Approximator"),"The size approximator to be used to set sizes of hierarchical nodes during topdown layout. The default value is null, which results in nodes keeping whatever size is defined for them e.g. through parent parallel node or by manually setting the size."),null),ps),gY),un(ha)))),Qs(t,nSe,Qw,USt),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,FP),KP),"Topdown Hierarchical Node Width"),"The fixed size of a hierarchical node when using topdown layout. If this value is set on a parallel node it applies to its children, when set on a hierarchical node it applies to the node itself."),150),fo),ta),rs(Pn,he(le(xg,1),it,170,0,[ha]))))),Qs(t,FP,Qw,null),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,RP),KP),"Topdown Hierarchical Node Aspect Ratio"),"The fixed aspect ratio of a hierarchical node when using topdown layout. Default is 1/sqrt(2). If this value is set on a parallel node it applies to its children, when set on a hierarchical node it applies to the node itself."),1.414),fo),ta),rs(Pn,he(le(xg,1),it,170,0,[ha]))))),Qs(t,RP,Qw,null),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Qw),KP),"Topdown Node Type"),"The different node types used for topdown layout. If the node type is set to {@link TopdownNodeTypes.PARALLEL_NODE} the algorithm must be set to a {@link TopdownLayoutProvider} such as {@link TopdownPacking}. The {@link nodeSize.fixedGraphSize} option is technically only required for hierarchical nodes."),null),ps),nPe),un(ha)))),Qs(t,Qw,hT,null),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,rSe),KP),"Topdown Scale Cap"),"Determines the upper limit for the topdown scale factor. The default value is 1.0 which ensures that nested children never end up appearing larger than their parents in terms of unit sizes such as the font size. If the limit is larger, nodes will fully utilize the available space, but it is counteriniuitive for inner nodes to have a larger scale than outer nodes."),1),fo),ta),un(Pn)))),Qs(t,rSe,Qw,HSt),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,HTe),e4t),"Activate Inside Self Loops"),"Whether this node allows to route self loops inside of it instead of around it. If set to true, this will make the node a compound node if it isn't already, and will require the layout algorithm to support compound nodes with hierarchical ports."),!1),ya),Ns),un(ha)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,VTe),e4t),"Inside Self Loop"),"Whether a self loop should be routed inside a node instead of around that node."),!1),ya),Ns),un(zd)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Ahe),"edge"),"Edge Thickness"),"The thickness of an edge. This is a hint on the line width used to draw an edge, possibly requiring more space to be reserved for it."),1),fo),ta),un(zd)))),sn(t,new Xt(nn(tn(rn(yn(Qt(en(Jt(Zt(new Ut,Qyt),"edge"),"Edge Type"),"The type of an edge. This is usually used for UML class diagrams, where associations must be handled differently from generalizations."),cNe),ps),HNe),un(zd)))),m_(t,new nx(f_(Ck(Tk(new ny,sr),"Layered"),'The layer-based method was introduced by Sugiyama, Tagawa and Toda in 1981. It emphasizes the direction of edges by pointing as many edges as possible into the same direction. The nodes are arranged in layers, which are sometimes called "hierarchies", and then reordered such that the number of edge crossings is minimized. Afterwards, concrete coordinates are computed for the nodes and edge bend points.'))),m_(t,new nx(f_(Ck(Tk(new ny,"org.eclipse.elk.orthogonal"),"Orthogonal"),`Orthogonal methods that follow the "topology-shape-metrics" approach by Batini, Nardelli and Tamassia '86. The first phase determines the topology of the drawing by applying a planarization technique, which results in a planar representation of the graph. The orthogonal shape is computed in the second phase, which aims at minimizing the number of edge bends, and is called orthogonalization. The third phase leads to concrete coordinates for nodes and edge bend points by applying a compaction method, thus defining the metrics.`))),m_(t,new nx(f_(Ck(Tk(new ny,Yu),"Force"),"Layout algorithms that follow physical analogies by simulating a system of attractive and repulsive forces. The first successful method of this kind was proposed by Eades in 1984."))),m_(t,new nx(f_(Ck(Tk(new ny,"org.eclipse.elk.circle"),"Circle"),"Circular layout algorithms emphasize cycles or biconnected components of a graph by arranging them in circles. This is useful if a drawing is desired where such components are clearly grouped, or where cycles are shown as prominent OPTIONS of the graph."))),m_(t,new nx(f_(Ck(Tk(new ny,byt),"Tree"),"Specialized layout methods for trees, i.e. acyclic graphs. The regular structure of graphs that have no undirected cycles can be emphasized using an algorithm of this type."))),m_(t,new nx(f_(Ck(Tk(new ny,"org.eclipse.elk.planar"),"Planar"),"Algorithms that require a planar or upward planar graph. Most of these algorithms are theoretically interesting, but not practically usable."))),m_(t,new nx(f_(Ck(Tk(new ny,gf),"Radial"),"Radial layout algorithms usually position the nodes of the graph on concentric circles."))),amt((new die,t)),xmt((new fie,t)),Nbt((new lz,t))};var eC,ASt,eNe,Z6,LSt,MSt,tNe,e7,t7,DSt,UB,nNe,GB,xv,rNe,Dge,Ige,iNe,sNe,aNe,oNe,cNe,ISt,n7,uNe,OSt,KB,Oge,WB,Nge,x3,lNe,tC,hNe,fNe,dNe,r7,gNe,kv,pNe,C4,i7,bNe,Ub,mNe,rY,YB,_2,vNe,NSt,wNe,PSt,BSt,yNe,xNe,Pge,Bge,Fge,Rge,kNe,rh,_M,ENe,jge,$ge,S4,TNe,CNe,s7,SNe,n9,XB,zge,a7,FSt,qge,RSt,jSt,_Ne,$St,ANe,LNe,r9,MNe,iY,DNe,INe,Ev,zSt,ONe,NNe,PNe,sY,QB,AM,i9,qSt,HSt,aY,VSt,BNe,USt;I(nh,"CoreOptions",699),D(88,22,{3:1,34:1,22:1,88:1},mO);var Q1,uc,vc,J1,wf,LM=Fr(nh,kEe,88,Hr,Pmn,j1n),GSt;D(278,22,{3:1,34:1,22:1,278:1},zse);var nC,_4,rC,FNe=Fr(nh,"EdgeLabelPlacement",278,Hr,lbn,$1n),KSt;D(223,22,{3:1,34:1,22:1,223:1},xq);var iC,JB,s9,Hge,Vge=Fr(nh,"EdgeRouting",223,Hr,lmn,z1n),WSt;D(321,22,{3:1,34:1,22:1,321:1},L_);var RNe,jNe,$Ne,zNe,Uge,qNe,HNe=Fr(nh,"EdgeType",321,Hr,Lvn,q1n),YSt;D(989,1,Pf,die),h.hf=function(t){amt(t)};var VNe,UNe,GNe,KNe,XSt,WNe,MM;I(nh,"FixedLayouterOptions",989),D(990,1,{},v$),h.sf=function(){var t;return t=new Une,t},h.tf=function(t){},I(nh,"FixedLayouterOptions/FixedFactory",990),D(346,22,{3:1,34:1,22:1,346:1},qse);var A2,oY,DM,YNe=Fr(nh,"HierarchyHandling",346,Hr,cbn,H1n),QSt;D(291,22,{3:1,34:1,22:1,291:1},kq);var kg,Gb,ZB,eF,JSt=Fr(nh,"LabelSide",291,Hr,umn,V1n),ZSt;D(95,22,{3:1,34:1,22:1,95:1},D5);var mp,E0,zf,T0,jh,C0,qf,Eg,S0,Ko=Fr(nh,"NodeLabelPlacement",95,Hr,Mwn,U1n),e_t;D(256,22,{3:1,34:1,22:1,256:1},vO);var XNe,IM,Kb,QNe,tF,OM=Fr(nh,"PortAlignment",256,Hr,Xmn,G1n),t_t;D(101,22,{3:1,34:1,22:1,101:1},M_);var Tv,Mu,Tg,sC,Z1,Wb,JNe=Fr(nh,"PortConstraints",101,Hr,Avn,K1n),n_t;D(279,22,{3:1,34:1,22:1,279:1},D_);var NM,PM,vp,nF,Yb,a9,cY=Fr(nh,"PortLabelPlacement",279,Hr,_vn,W1n),r_t;D(64,22,{3:1,34:1,22:1,64:1},wO);var ar,Qn,yf,xf,ll,Ju,ed,_0,zl,_l,Du,ql,hl,fl,A0,$h,zh,Hf,Dr,Pc,er,Oo=Fr(nh,"PortSide",64,Hr,Bmn,Y1n),i_t;D(993,1,Pf,lz),h.hf=function(t){Nbt(t)};var s_t,a_t,ZNe,o_t,c_t;I(nh,"RandomLayouterOptions",993),D(994,1,{},w$),h.sf=function(){var t;return t=new qne,t},h.tf=function(t){},I(nh,"RandomLayouterOptions/RandomFactory",994),D(386,22,{3:1,34:1,22:1,386:1},Eq);var A4,rF,iF,Cv,BM=Fr(nh,"SizeConstraint",386,Hr,cmn,X1n),u_t;D(264,22,{3:1,34:1,22:1,264:1},I5);var sF,uY,aC,Gge,aF,FM,lY,hY,fY,ePe=Fr(nh,"SizeOptions",264,Hr,qwn,Q1n),l_t;D(280,22,{3:1,34:1,22:1,280:1},Hse);var L4,tPe,dY,nPe=Fr(nh,"TopdownNodeTypes",280,Hr,hbn,J1n),h_t;D(347,22,sSe);var rPe,iPe,gY=Fr(nh,"TopdownSizeApproximator",347,Hr,a2n,edn);D(987,347,sSe,Wit),h.Tg=function(t){return Tdt(t)},Fr(nh,"TopdownSizeApproximator/1",987,gY,null,null),D(988,347,sSe,Ost),h.Tg=function(t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St,cn,an,Bn;for(n=l(at(t,(pi(),a7)),143),St=(rb(),V=new a_,V),aP(St,t),cn=new Pr,f=new or((!t.a&&(t.a=new nt(Ai,t,10,11)),t.a));f.e!=f.i.gc();)a=l(gr(f),27),Me=(z=new a_,z),LU(Me,St),aP(Me,a),Bn=Tdt(a),F5(Me,b.Math.max(a.g,Bn.a),b.Math.max(a.f,Bn.b)),ju(cn.f,a,Me);for(o=new or((!t.a&&(t.a=new nt(Ai,t,10,11)),t.a));o.e!=o.i.gc();)for(a=l(gr(o),27),L=new or((!a.e&&(a.e=new Ln(js,a,7,4)),a.e));L.e!=L.i.gc();)C=l(gr(L),74),Ze=l(hc(zo(cn.f,a)),27),ot=l(cr(cn,Oe((!C.c&&(C.c=new Ln(_r,C,5,8)),C.c),0)),27),$e=(B=new TI,B),qr((!$e.b&&($e.b=new Ln(_r,$e,4,7)),$e.b),Ze),qr((!$e.c&&($e.c=new Ln(_r,$e,5,8)),$e.c),ot),AU($e,ds(Ze)),aP($e,C);te=l(GO(n.f),205);try{te.rf(St,new x$),lat(n.f,te)}catch(jn){throw jn=bs(jn),De(jn,103)?(J=jn,ue(J)):ue(jn)}return P1(St,t7)||P1(St,e7)||Uke(St),E=ze(Ge(at(St,t7))),w=ze(Ge(at(St,e7))),g=E/w,r=ze(Ge(at(St,QB)))*b.Math.sqrt((!St.a&&(St.a=new nt(Ai,St,10,11)),St.a).i),an=l(at(St,_2),107),Te=an.b+an.c+1,fe=an.d+an.a+1,new lt(b.Math.max(Te,r),b.Math.max(fe,r/g))},Fr(nh,"TopdownSizeApproximator/2",988,gY,null,null);var f_t;D(344,1,{871:1},L8),h.Ug=function(t,n){return Fgt(this,t,n)},h.Vg=function(){apt(this)},h.Wg=function(){return this.q},h.Xg=function(){return this.f?ioe(this.f):null},h.Yg=function(){return ioe(this.a)},h.Zg=function(){return this.p},h.$g=function(){return!1},h._g=function(){return this.n},h.ah=function(){return this.p!=null&&!this.b},h.bh=function(t){var n;this.n&&(n=t,vt(this.f,n))},h.dh=function(t,n){var r,a;this.n&&t&&Sbn(this,(r=new Ust,a=cle(r,t),oDn(r),a),(NV(),Wge))},h.eh=function(t){var n;return this.b?null:(n=hwn(this,this.g),ui(this.a,n),n.i=this,this.d=t,n)},h.fh=function(t){t>0&&!this.b&&c7e(this,t)},h.b=!1,h.c=0,h.d=-1,h.e=null,h.f=null,h.g=-1,h.j=!1,h.k=!1,h.n=!1,h.o=0,h.q=0,h.r=0,I(Uc,"BasicProgressMonitor",344),D(717,205,tv,jne),h.rf=function(t,n){Rmt(t,n)},I(Uc,"BoxLayoutProvider",717),D(983,1,ii,DXe),h.Ne=function(t,n){return oCn(this,l(t,27),l(n,27))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},h.a=!1,I(Uc,"BoxLayoutProvider/1",983),D(163,1,{163:1},hV,vrt),h.Ib=function(){return this.c?oke(this.c):Tb(this.b)},I(Uc,"BoxLayoutProvider/Group",163),D(320,22,{3:1,34:1,22:1,320:1},Tq);var sPe,aPe,oPe,Kge,cPe=Fr(Uc,"BoxLayoutProvider/PackingMode",320,Hr,hmn,tdn),d_t;D(984,1,ii,tk),h.Ne=function(t,n){return Spn(l(t,163),l(n,163))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Uc,"BoxLayoutProvider/lambda$0$Type",984),D(985,1,ii,nk),h.Ne=function(t,n){return vpn(l(t,163),l(n,163))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Uc,"BoxLayoutProvider/lambda$1$Type",985),D(986,1,ii,y$),h.Ne=function(t,n){return wpn(l(t,163),l(n,163))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(Uc,"BoxLayoutProvider/lambda$2$Type",986),D(1384,1,{845:1},$ne),h.Mg=function(t,n){return tq(),!De(n,167)||mZe((hx(),l(t,167)),n)},I(Uc,"ElkSpacings/AbstractSpacingsBuilder/lambda$0$Type",1384),D(1385,1,fr,IXe),h.Cd=function(t){Byn(this.a,l(t,149))},I(Uc,"ElkSpacings/AbstractSpacingsBuilder/lambda$1$Type",1385),D(1386,1,fr,Hne),h.Cd=function(t){l(t,96),tq()},I(Uc,"ElkSpacings/AbstractSpacingsBuilder/lambda$2$Type",1386),D(1390,1,fr,OXe),h.Cd=function(t){i3n(this.a,l(t,96))},I(Uc,"ElkSpacings/AbstractSpacingsBuilder/lambda$3$Type",1390),D(1388,1,ti,utt),h.Mb=function(t){return myn(this.a,this.b,l(t,149))},I(Uc,"ElkSpacings/AbstractSpacingsBuilder/lambda$4$Type",1388),D(1387,1,ti,ltt),h.Mb=function(t){return Jhn(this.a,this.b,l(t,845))},I(Uc,"ElkSpacings/AbstractSpacingsBuilder/lambda$5$Type",1387),D(1389,1,fr,htt),h.Cd=function(t){hgn(this.a,this.b,l(t,149))},I(Uc,"ElkSpacings/AbstractSpacingsBuilder/lambda$6$Type",1389),D(947,1,{},Vne),h.Kb=function(t){return ant(t)},h.Fb=function(t){return this===t},I(Uc,"ElkUtil/lambda$0$Type",947),D(948,1,fr,ftt),h.Cd=function(t){lEn(this.a,this.b,l(t,74))},h.a=0,h.b=0,I(Uc,"ElkUtil/lambda$1$Type",948),D(949,1,fr,dtt),h.Cd=function(t){tun(this.a,this.b,l(t,166))},h.a=0,h.b=0,I(Uc,"ElkUtil/lambda$2$Type",949),D(950,1,fr,gtt),h.Cd=function(t){Xln(this.a,this.b,l(t,135))},h.a=0,h.b=0,I(Uc,"ElkUtil/lambda$3$Type",950),D(951,1,fr,NXe),h.Cd=function(t){Idn(this.a,l(t,377))},I(Uc,"ElkUtil/lambda$4$Type",951),D(325,1,{34:1,325:1},Dcn),h.Fd=function(t){return Chn(this,l(t,242))},h.Fb=function(t){var n;return De(t,325)?(n=l(t,325),this.a==n.a):!1},h.Hb=function(){return ua(this.a)},h.Ib=function(){return this.a+" (exclusive)"},h.a=0,I(Uc,"ExclusiveBounds/ExclusiveLowerBound",325),D(1119,205,tv,Une),h.rf=function(t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te,Me,$e,Ze,ot,St,cn,an;for(n.Ug("Fixed Layout",1),f=l(at(t,(pi(),sNe)),223),B=0,z=0,Me=new or((!t.a&&(t.a=new nt(Ai,t,10,11)),t.a));Me.e!=Me.i.gc();){for(fe=l(gr(Me),27),an=l(at(fe,(PV(),MM)),8),an&&(Qh(fe,an.a,an.b),l(at(fe,UNe),181).Hc((mh(),A4))&&(V=l(at(fe,KNe),8),V.a>0&&V.b>0&&Gw(fe,V.a,V.b,!0,!0))),B=b.Math.max(B,fe.i+fe.g),z=b.Math.max(z,fe.j+fe.f),C=new or((!fe.n&&(fe.n=new nt(ec,fe,1,7)),fe.n));C.e!=C.i.gc();)w=l(gr(C),135),an=l(at(w,MM),8),an&&Qh(w,an.a,an.b),B=b.Math.max(B,fe.i+w.i+w.g),z=b.Math.max(z,fe.j+w.j+w.f);for(ot=new or((!fe.c&&(fe.c=new nt(Hl,fe,9,9)),fe.c));ot.e!=ot.i.gc();)for(Ze=l(gr(ot),123),an=l(at(Ze,MM),8),an&&Qh(Ze,an.a,an.b),St=fe.i+Ze.i,cn=fe.j+Ze.j,B=b.Math.max(B,St+Ze.g),z=b.Math.max(z,cn+Ze.f),E=new or((!Ze.n&&(Ze.n=new nt(ec,Ze,1,7)),Ze.n));E.e!=E.i.gc();)w=l(gr(E),135),an=l(at(w,MM),8),an&&Qh(w,an.a,an.b),B=b.Math.max(B,St+w.i+w.g),z=b.Math.max(z,cn+w.j+w.f);for(o=new hr(dr(cp(fe).a.Kc(),new j));jr(o);)r=l(xr(o),74),L=Jvt(r),B=b.Math.max(B,L.a),z=b.Math.max(z,L.b);for(a=new hr(dr(sP(fe).a.Kc(),new j));jr(a);)r=l(xr(a),74),ds(cg(r))!=t&&(L=Jvt(r),B=b.Math.max(B,L.a),z=b.Math.max(z,L.b))}if(f==(ip(),iC))for(Te=new or((!t.a&&(t.a=new nt(Ai,t,10,11)),t.a));Te.e!=Te.i.gc();)for(fe=l(gr(Te),27),a=new hr(dr(cp(fe).a.Kc(),new j));jr(a);)r=l(xr(a),74),g=fAn(r),g.b==0?Hi(r,x3,null):Hi(r,x3,g);Rt(Bt(at(t,(PV(),GNe))))||($e=l(at(t,XSt),107),te=B+$e.b+$e.c,J=z+$e.d+$e.a,Gw(t,te,J,!0,!0)),n.Vg()},I(Uc,"FixedLayoutProvider",1119),D(385,137,{3:1,423:1,385:1,96:1,137:1},EI,Xlt),h.cg=function(t){var n,r,a,o,f,g,w,E,C;if(t)try{for(E=Gy(t,";,;"),f=E,g=0,w=f.length;g>16&Zs|n^a<<16},h.Kc=function(){return new PXe(this)},h.Ib=function(){return this.a==null&&this.b==null?"pair(null,null)":this.a==null?"pair(null,"+xc(this.b)+")":this.b==null?"pair("+xc(this.a)+",null)":"pair("+xc(this.a)+","+xc(this.b)+")"},I(Uc,"Pair",42),D(995,1,Oa,PXe),h.Nb=function(t){Za(this,t)},h.Ob=function(){return!this.c&&(!this.b&&this.a.a!=null||this.a.b!=null)},h.Pb=function(){if(!this.c&&!this.b&&this.a.a!=null)return this.b=!0,this.a.a;if(!this.c&&this.a.b!=null)return this.c=!0,this.a.b;throw ue(new _c)},h.Qb=function(){throw this.c&&this.a.b!=null?this.a.b=null:this.b&&this.a.a!=null&&(this.a.a=null),ue(new pl)},h.b=!1,h.c=!1,I(Uc,"Pair/1",995),D(455,1,{455:1},Sat),h.Fb=function(t){return Jc(this.a,l(t,455).a)&&Jc(this.c,l(t,455).c)&&Jc(this.d,l(t,455).d)&&Jc(this.b,l(t,455).b)},h.Hb=function(){return MN(he(le(wa,1),Rn,1,5,[this.a,this.c,this.d,this.b]))},h.Ib=function(){return"("+this.a+Co+this.c+Co+this.d+Co+this.b+")"},I(Uc,"Quadruple",455),D(1108,205,tv,qne),h.rf=function(t,n){var r,a,o,f,g;if(n.Ug("Random Layout",1),(!t.a&&(t.a=new nt(Ai,t,10,11)),t.a).i==0){n.Vg();return}f=l(at(t,(B8e(),o_t)),17),f&&f.a!=0?o=new VH(f.a):o=new Uce,r=XI(Ge(at(t,s_t))),g=XI(Ge(at(t,c_t))),a=l(at(t,a_t),107),MDn(t,o,r,g,a),n.Vg()},I(Uc,"RandomLayoutProvider",1108),D(240,1,{240:1},wae),h.Fb=function(t){return Jc(this.a,l(t,240).a)&&Jc(this.b,l(t,240).b)&&Jc(this.c,l(t,240).c)},h.Hb=function(){return MN(he(le(wa,1),Rn,1,5,[this.a,this.b,this.c]))},h.Ib=function(){return"("+this.a+Co+this.b+Co+this.c+")"},I(Uc,"Triple",240);var m_t;D(562,1,{}),h.Lf=function(){return new lt(this.f.i,this.f.j)},h.of=function(t){return eot(t,(pi(),rh))?at(this.f,v_t):at(this.f,t)},h.Mf=function(){return new lt(this.f.g,this.f.f)},h.Nf=function(){return this.g},h.pf=function(t){return P1(this.f,t)},h.Of=function(t){Uu(this.f,t.a),Gu(this.f,t.b)},h.Pf=function(t){Dw(this.f,t.a),Mw(this.f,t.b)},h.Qf=function(t){this.g=t},h.g=0;var v_t;I(xL,"ElkGraphAdapters/AbstractElkGraphElementAdapter",562),D(563,1,{853:1},Oz),h.Rf=function(){var t,n;if(!this.b)for(this.b=$H(EH(this.a).i),n=new or(EH(this.a));n.e!=n.i.gc();)t=l(gr(n),135),vt(this.b,new Yie(t));return this.b},h.b=null,I(xL,"ElkGraphAdapters/ElkEdgeAdapter",563),D(289,562,{},Jv),h.Sf=function(){return Gdt(this)},h.a=null,I(xL,"ElkGraphAdapters/ElkGraphAdapter",289),D(640,562,{187:1},Yie),I(xL,"ElkGraphAdapters/ElkLabelAdapter",640),D(639,562,{695:1},rae),h.Rf=function(){return m7n(this)},h.Vf=function(){var t;return t=l(at(this.f,(pi(),tC)),140),!t&&(t=new s_),t},h.Xf=function(){return v7n(this)},h.Zf=function(t){var n;n=new xae(t),Hi(this.f,(pi(),tC),n)},h.$f=function(t){Hi(this.f,(pi(),_2),new S4e(t))},h.Tf=function(){return this.d},h.Uf=function(){var t,n;if(!this.a)for(this.a=new bt,n=new hr(dr(sP(l(this.f,27)).a.Kc(),new j));jr(n);)t=l(xr(n),74),vt(this.a,new Oz(t));return this.a},h.Wf=function(){var t,n;if(!this.c)for(this.c=new bt,n=new hr(dr(cp(l(this.f,27)).a.Kc(),new j));jr(n);)t=l(xr(n),74),vt(this.c,new Oz(t));return this.c},h.Yf=function(){return AH(l(this.f,27)).i!=0||Rt(Bt(l(this.f,27).of((pi(),KB))))},h._f=function(){Xvn(this,(aw(),m_t))},h.a=null,h.b=null,h.c=null,h.d=null,h.e=null,I(xL,"ElkGraphAdapters/ElkNodeAdapter",639),D(1284,562,{852:1},BXe),h.Rf=function(){return S7n(this)},h.Uf=function(){var t,n;if(!this.a)for(this.a=eg(l(this.f,123).hh().i),n=new or(l(this.f,123).hh());n.e!=n.i.gc();)t=l(gr(n),74),vt(this.a,new Oz(t));return this.a},h.Wf=function(){var t,n;if(!this.c)for(this.c=eg(l(this.f,123).ih().i),n=new or(l(this.f,123).ih());n.e!=n.i.gc();)t=l(gr(n),74),vt(this.c,new Oz(t));return this.c},h.ag=function(){return l(l(this.f,123).of((pi(),s7)),64)},h.bg=function(){var t,n,r,a,o,f,g,w;for(a=M1(l(this.f,123)),r=new or(l(this.f,123).ih());r.e!=r.i.gc();)for(t=l(gr(r),74),w=new or((!t.c&&(t.c=new Ln(_r,t,5,8)),t.c));w.e!=w.i.gc();){if(g=l(gr(w),84),Ly(bc(g),a))return!0;if(bc(g)==a&&Rt(Bt(at(t,(pi(),Oge)))))return!0}for(n=new or(l(this.f,123).hh());n.e!=n.i.gc();)for(t=l(gr(n),74),f=new or((!t.b&&(t.b=new Ln(_r,t,4,7)),t.b));f.e!=f.i.gc();)if(o=l(gr(f),84),Ly(bc(o),a))return!0;return!1},h.a=null,h.b=null,h.c=null,I(xL,"ElkGraphAdapters/ElkPortAdapter",1284),D(1285,1,ii,zne),h.Ne=function(t,n){return i_n(l(t,123),l(n,123))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(xL,"ElkGraphAdapters/PortComparator",1285);var Xb=ks(pf,"EObject"),oC=ks(T6,r4t),qh=ks(T6,i4t),oF=ks(T6,s4t),cF=ks(T6,"ElkShape"),_r=ks(T6,a4t),js=ks(T6,aSe),cs=ks(T6,o4t),uF=ks(pf,c4t),RM=ks(pf,"EFactory"),w_t,Yge=ks(pf,u4t),u1=ks(pf,"EPackage"),La,y_t,x_t,fPe,pY,k_t,dPe,gPe,pPe,Cg,E_t,T_t,ec=ks(T6,oSe),Ai=ks(T6,cSe),Hl=ks(T6,uSe);D(93,1,l4t),h.th=function(){return this.uh(),null},h.uh=function(){return null},h.vh=function(){return this.uh(),!1},h.wh=function(){return!1},h.xh=function(t){Ni(this,t)},I(Rx,"BasicNotifierImpl",93),D(99,93,g4t),h.Yh=function(){return hh(this)},h.yh=function(t,n){return t},h.zh=function(){throw ue(new Qr)},h.Ah=function(t){var n;return n=Ro(l(Mn(this.Dh(),this.Fh()),19)),this.Ph().Th(this,n.n,n.f,t)},h.Bh=function(t,n){throw ue(new Qr)},h.Ch=function(t,n,r){return Nh(this,t,n,r)},h.Dh=function(){var t;return this.zh()&&(t=this.zh().Nk(),t)?t:this.ii()},h.Eh=function(){return Uue(this)},h.Fh=function(){throw ue(new Qr)},h.Gh=function(){var t,n;return n=this.$h().Ok(),!n&&this.zh().Tk(n=(w_(),t=j5e(Sd(this.Dh())),t==null?rpe:new TO(this,t))),n},h.Hh=function(t,n){return t},h.Ih=function(t){var n;return n=t.pk(),n?t.Lj():ms(this.Dh(),t)},h.Jh=function(){var t;return t=this.zh(),t?t.Qk():null},h.Kh=function(){return this.zh()?this.zh().Nk():null},h.Lh=function(t,n,r){return rU(this,t,n,r)},h.Mh=function(t){return tE(this,t)},h.Nh=function(t,n){return Moe(this,t,n)},h.Oh=function(){var t;return t=this.zh(),!!t&&t.Rk()},h.Ph=function(){throw ue(new Qr)},h.Qh=function(){return XV(this)},h.Rh=function(t,n,r,a){return mx(this,t,n,a)},h.Sh=function(t,n,r){var a;return a=l(Mn(this.Dh(),n),69),a.wk().zk(this,this.hi(),n-this.ji(),t,r)},h.Th=function(t,n,r,a){return IH(this,t,n,a)},h.Uh=function(t,n,r){var a;return a=l(Mn(this.Dh(),n),69),a.wk().Ak(this,this.hi(),n-this.ji(),t,r)},h.Vh=function(){return!!this.zh()&&!!this.zh().Pk()},h.Wh=function(t){return nue(this,t)},h.Xh=function(t){return got(this,t)},h.Zh=function(t){return Bvt(this,t)},h.$h=function(){throw ue(new Qr)},h._h=function(){return this.zh()?this.zh().Pk():null},h.ai=function(){return XV(this)},h.bi=function(t,n){$ue(this,t,n)},h.ci=function(t){this.$h().Sk(t)},h.di=function(t){this.$h().Vk(t)},h.ei=function(t){this.$h().Uk(t)},h.fi=function(t,n){var r,a,o,f;return f=this.Jh(),f&&t&&(n=To(f.El(),this,n),f.Il(this)),a=this.Ph(),a&&(sle(this,this.Ph(),this.Fh()).Bb&Io?(o=a.Qh(),o&&(t?!f&&o.Il(this):o.Hl(this))):(n=(r=this.Fh(),r>=0?this.Ah(n):this.Ph().Th(this,-1-r,null,n)),n=this.Ch(null,-1,n))),this.di(t),n},h.gi=function(t){var n,r,a,o,f,g,w,E;if(r=this.Dh(),f=ms(r,t),n=this.ji(),f>=n)return l(t,69).wk().Dk(this,this.hi(),f-n);if(f<=-1)if(g=g6((El(),io),r,t),g){if(Fo(),l(g,69).xk()||(g=rx(ic(io,g))),o=(a=this.Ih(g),l(a>=0?this.Lh(a,!0,!0):Hw(this,g,!0),160)),E=g.Ik(),E>1||E==-1)return l(l(o,220).Sl(t,!1),79)}else throw ue(new Yn(Ob+t.xe()+$fe));else if(t.Jk())return a=this.Ih(t),l(a>=0?this.Lh(a,!1,!0):Hw(this,t,!1),79);return w=new Itt(this,t),w},h.hi=function(){return V6e(this)},h.ii=function(){return(lb(),Vn).S},h.ji=function(){return yr(this.ii())},h.ki=function(t){Fue(this,t)},h.Ib=function(){return g0(this)},I(Gn,"BasicEObjectImpl",99);var C_t;D(119,99,{110:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1}),h.li=function(t){var n;return n=H6e(this),n[t]},h.mi=function(t,n){var r;r=H6e(this),Ts(r,t,n)},h.ni=function(t){var n;n=H6e(this),Ts(n,t,null)},h.th=function(){return l(Kn(this,4),129)},h.uh=function(){throw ue(new Qr)},h.vh=function(){return(this.Db&4)!=0},h.zh=function(){throw ue(new Qr)},h.oi=function(t){px(this,2,t)},h.Bh=function(t,n){this.Db=n<<16|this.Db&255,this.oi(t)},h.Dh=function(){return sl(this)},h.Fh=function(){return this.Db>>16},h.Gh=function(){var t,n;return w_(),n=j5e(Sd((t=l(Kn(this,16),29),t||this.ii()))),n==null?rpe:new TO(this,n)},h.wh=function(){return(this.Db&1)==0},h.Jh=function(){return l(Kn(this,128),2034)},h.Kh=function(){return l(Kn(this,16),29)},h.Oh=function(){return(this.Db&32)!=0},h.Ph=function(){return l(Kn(this,2),54)},h.Vh=function(){return(this.Db&64)!=0},h.$h=function(){throw ue(new Qr)},h._h=function(){return l(Kn(this,64),288)},h.ci=function(t){px(this,16,t)},h.di=function(t){px(this,128,t)},h.ei=function(t){px(this,64,t)},h.hi=function(){return Ku(this)},h.Db=0,I(Gn,"MinimalEObjectImpl",119),D(120,119,{110:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1}),h.oi=function(t){this.Cb=t},h.Ph=function(){return this.Cb},I(Gn,"MinimalEObjectImpl/Container",120),D(2083,120,{110:1,342:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1}),h.Lh=function(t,n,r){return sxe(this,t,n,r)},h.Uh=function(t,n,r){return Wxe(this,t,n,r)},h.Wh=function(t){return Z5e(this,t)},h.bi=function(t,n){V7e(this,t,n)},h.ii=function(){return su(),T_t},h.ki=function(t){O7e(this,t)},h.nf=function(){return fdt(this)},h.gh=function(){return!this.o&&(this.o=new xl((su(),Cg),L2,this,0)),this.o},h.of=function(t){return at(this,t)},h.pf=function(t){return P1(this,t)},h.qf=function(t,n){return Hi(this,t,n)},I(sv,"EMapPropertyHolderImpl",2083),D(572,120,{110:1,377:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},AS),h.Lh=function(t,n,r){switch(t){case 0:return this.a;case 1:return this.b}return rU(this,t,n,r)},h.Wh=function(t){switch(t){case 0:return this.a!=0;case 1:return this.b!=0}return nue(this,t)},h.bi=function(t,n){switch(t){case 0:dV(this,ze(Ge(n)));return;case 1:fV(this,ze(Ge(n)));return}$ue(this,t,n)},h.ii=function(){return su(),y_t},h.ki=function(t){switch(t){case 0:dV(this,0);return;case 1:fV(this,0);return}Fue(this,t)},h.Ib=function(){var t;return this.Db&64?g0(this):(t=new Af(g0(this)),t.a+=" (x: ",_5(t,this.a),t.a+=", y: ",_5(t,this.b),t.a+=")",t.a)},h.a=0,h.b=0,I(sv,"ElkBendPointImpl",572),D(739,2083,{110:1,342:1,167:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1}),h.Lh=function(t,n,r){return d8e(this,t,n,r)},h.Sh=function(t,n,r){return Mue(this,t,n,r)},h.Uh=function(t,n,r){return dce(this,t,n,r)},h.Wh=function(t){return _7e(this,t)},h.bi=function(t,n){Txe(this,t,n)},h.ii=function(){return su(),k_t},h.ki=function(t){i8e(this,t)},h.jh=function(){return this.k},h.kh=function(){return EH(this)},h.Ib=function(){return jce(this)},h.k=null,I(sv,"ElkGraphElementImpl",739),D(740,739,{110:1,342:1,167:1,422:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1}),h.Lh=function(t,n,r){return x8e(this,t,n,r)},h.Wh=function(t){return _8e(this,t)},h.bi=function(t,n){Cxe(this,t,n)},h.ii=function(){return su(),E_t},h.ki=function(t){N8e(this,t)},h.lh=function(){return this.f},h.mh=function(){return this.g},h.nh=function(){return this.i},h.oh=function(){return this.j},h.ph=function(t,n){F5(this,t,n)},h.qh=function(t,n){Qh(this,t,n)},h.rh=function(t){Uu(this,t)},h.sh=function(t){Gu(this,t)},h.Ib=function(){return Pue(this)},h.f=0,h.g=0,h.i=0,h.j=0,I(sv,"ElkShapeImpl",740),D(741,740,{110:1,342:1,84:1,167:1,422:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1}),h.Lh=function(t,n,r){return J8e(this,t,n,r)},h.Sh=function(t,n,r){return vxe(this,t,n,r)},h.Uh=function(t,n,r){return wxe(this,t,n,r)},h.Wh=function(t){return H7e(this,t)},h.bi=function(t,n){I9e(this,t,n)},h.ii=function(){return su(),x_t},h.ki=function(t){K8e(this,t)},h.hh=function(){return!this.d&&(this.d=new Ln(js,this,8,5)),this.d},h.ih=function(){return!this.e&&(this.e=new Ln(js,this,7,4)),this.e},I(sv,"ElkConnectableShapeImpl",741),D(326,739,{110:1,342:1,74:1,167:1,326:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},TI),h.Ah=function(t){return gxe(this,t)},h.Lh=function(t,n,r){switch(t){case 3:return WO(this);case 4:return!this.b&&(this.b=new Ln(_r,this,4,7)),this.b;case 5:return!this.c&&(this.c=new Ln(_r,this,5,8)),this.c;case 6:return!this.a&&(this.a=new nt(cs,this,6,6)),this.a;case 7:return Hn(),!this.b&&(this.b=new Ln(_r,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new Ln(_r,this,5,8)),this.c.i<=1));case 8:return Hn(),!!qA(this);case 9:return Hn(),!!qw(this);case 10:return Hn(),!this.b&&(this.b=new Ln(_r,this,4,7)),this.b.i!=0&&(!this.c&&(this.c=new Ln(_r,this,5,8)),this.c.i!=0)}return d8e(this,t,n,r)},h.Sh=function(t,n,r){var a;switch(n){case 3:return this.Cb&&(r=(a=this.Db>>16,a>=0?gxe(this,r):this.Cb.Th(this,-1-a,null,r))),Yye(this,l(t,27),r);case 4:return!this.b&&(this.b=new Ln(_r,this,4,7)),Ru(this.b,t,r);case 5:return!this.c&&(this.c=new Ln(_r,this,5,8)),Ru(this.c,t,r);case 6:return!this.a&&(this.a=new nt(cs,this,6,6)),Ru(this.a,t,r)}return Mue(this,t,n,r)},h.Uh=function(t,n,r){switch(n){case 3:return Yye(this,null,r);case 4:return!this.b&&(this.b=new Ln(_r,this,4,7)),To(this.b,t,r);case 5:return!this.c&&(this.c=new Ln(_r,this,5,8)),To(this.c,t,r);case 6:return!this.a&&(this.a=new nt(cs,this,6,6)),To(this.a,t,r)}return dce(this,t,n,r)},h.Wh=function(t){switch(t){case 3:return!!WO(this);case 4:return!!this.b&&this.b.i!=0;case 5:return!!this.c&&this.c.i!=0;case 6:return!!this.a&&this.a.i!=0;case 7:return!this.b&&(this.b=new Ln(_r,this,4,7)),!(this.b.i<=1&&(!this.c&&(this.c=new Ln(_r,this,5,8)),this.c.i<=1));case 8:return qA(this);case 9:return qw(this);case 10:return!this.b&&(this.b=new Ln(_r,this,4,7)),this.b.i!=0&&(!this.c&&(this.c=new Ln(_r,this,5,8)),this.c.i!=0)}return _7e(this,t)},h.bi=function(t,n){switch(t){case 3:AU(this,l(n,27));return;case 4:!this.b&&(this.b=new Ln(_r,this,4,7)),$r(this.b),!this.b&&(this.b=new Ln(_r,this,4,7)),As(this.b,l(n,16));return;case 5:!this.c&&(this.c=new Ln(_r,this,5,8)),$r(this.c),!this.c&&(this.c=new Ln(_r,this,5,8)),As(this.c,l(n,16));return;case 6:!this.a&&(this.a=new nt(cs,this,6,6)),$r(this.a),!this.a&&(this.a=new nt(cs,this,6,6)),As(this.a,l(n,16));return}Txe(this,t,n)},h.ii=function(){return su(),fPe},h.ki=function(t){switch(t){case 3:AU(this,null);return;case 4:!this.b&&(this.b=new Ln(_r,this,4,7)),$r(this.b);return;case 5:!this.c&&(this.c=new Ln(_r,this,5,8)),$r(this.c);return;case 6:!this.a&&(this.a=new nt(cs,this,6,6)),$r(this.a);return}i8e(this,t)},h.Ib=function(){return evt(this)},I(sv,"ElkEdgeImpl",326),D(452,2083,{110:1,342:1,166:1,452:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},rk),h.Ah=function(t){return lxe(this,t)},h.Lh=function(t,n,r){switch(t){case 1:return this.j;case 2:return this.k;case 3:return this.b;case 4:return this.c;case 5:return!this.a&&(this.a=new Ys(qh,this,5)),this.a;case 6:return lot(this);case 7:return n?oue(this):this.i;case 8:return n?aue(this):this.f;case 9:return!this.g&&(this.g=new Ln(cs,this,9,10)),this.g;case 10:return!this.e&&(this.e=new Ln(cs,this,10,9)),this.e;case 11:return this.d}return sxe(this,t,n,r)},h.Sh=function(t,n,r){var a,o,f;switch(n){case 6:return this.Cb&&(r=(o=this.Db>>16,o>=0?lxe(this,r):this.Cb.Th(this,-1-o,null,r))),Wye(this,l(t,74),r);case 9:return!this.g&&(this.g=new Ln(cs,this,9,10)),Ru(this.g,t,r);case 10:return!this.e&&(this.e=new Ln(cs,this,10,9)),Ru(this.e,t,r)}return f=l(Mn((a=l(Kn(this,16),29),a||(su(),pY)),n),69),f.wk().zk(this,Ku(this),n-yr((su(),pY)),t,r)},h.Uh=function(t,n,r){switch(n){case 5:return!this.a&&(this.a=new Ys(qh,this,5)),To(this.a,t,r);case 6:return Wye(this,null,r);case 9:return!this.g&&(this.g=new Ln(cs,this,9,10)),To(this.g,t,r);case 10:return!this.e&&(this.e=new Ln(cs,this,10,9)),To(this.e,t,r)}return Wxe(this,t,n,r)},h.Wh=function(t){switch(t){case 1:return this.j!=0;case 2:return this.k!=0;case 3:return this.b!=0;case 4:return this.c!=0;case 5:return!!this.a&&this.a.i!=0;case 6:return!!lot(this);case 7:return!!this.i;case 8:return!!this.f;case 9:return!!this.g&&this.g.i!=0;case 10:return!!this.e&&this.e.i!=0;case 11:return this.d!=null}return Z5e(this,t)},h.bi=function(t,n){switch(t){case 1:oE(this,ze(Ge(n)));return;case 2:uE(this,ze(Ge(n)));return;case 3:aE(this,ze(Ge(n)));return;case 4:cE(this,ze(Ge(n)));return;case 5:!this.a&&(this.a=new Ys(qh,this,5)),$r(this.a),!this.a&&(this.a=new Ys(qh,this,5)),As(this.a,l(n,16));return;case 6:Z2t(this,l(n,74));return;case 7:yV(this,l(n,84));return;case 8:wV(this,l(n,84));return;case 9:!this.g&&(this.g=new Ln(cs,this,9,10)),$r(this.g),!this.g&&(this.g=new Ln(cs,this,9,10)),As(this.g,l(n,16));return;case 10:!this.e&&(this.e=new Ln(cs,this,10,9)),$r(this.e),!this.e&&(this.e=new Ln(cs,this,10,9)),As(this.e,l(n,16));return;case 11:p7e(this,ei(n));return}V7e(this,t,n)},h.ii=function(){return su(),pY},h.ki=function(t){switch(t){case 1:oE(this,0);return;case 2:uE(this,0);return;case 3:aE(this,0);return;case 4:cE(this,0);return;case 5:!this.a&&(this.a=new Ys(qh,this,5)),$r(this.a);return;case 6:Z2t(this,null);return;case 7:yV(this,null);return;case 8:wV(this,null);return;case 9:!this.g&&(this.g=new Ln(cs,this,9,10)),$r(this.g);return;case 10:!this.e&&(this.e=new Ln(cs,this,10,9)),$r(this.e);return;case 11:p7e(this,null);return}O7e(this,t)},h.Ib=function(){return d2t(this)},h.b=0,h.c=0,h.d=null,h.j=0,h.k=0,I(sv,"ElkEdgeSectionImpl",452),D(158,120,{110:1,94:1,93:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1}),h.Lh=function(t,n,r){var a;return t==0?(!this.Ab&&(this.Ab=new nt(mi,this,0,3)),this.Ab):sf(this,t-yr(this.ii()),Mn((a=l(Kn(this,16),29),a||this.ii()),t),n,r)},h.Sh=function(t,n,r){var a,o;return n==0?(!this.Ab&&(this.Ab=new nt(mi,this,0,3)),Ru(this.Ab,t,r)):(o=l(Mn((a=l(Kn(this,16),29),a||this.ii()),n),69),o.wk().zk(this,Ku(this),n-yr(this.ii()),t,r))},h.Uh=function(t,n,r){var a,o;return n==0?(!this.Ab&&(this.Ab=new nt(mi,this,0,3)),To(this.Ab,t,r)):(o=l(Mn((a=l(Kn(this,16),29),a||this.ii()),n),69),o.wk().Ak(this,Ku(this),n-yr(this.ii()),t,r))},h.Wh=function(t){var n;return t==0?!!this.Ab&&this.Ab.i!=0:nf(this,t-yr(this.ii()),Mn((n=l(Kn(this,16),29),n||this.ii()),t))},h.Zh=function(t){return Hke(this,t)},h.bi=function(t,n){var r;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab),!this.Ab&&(this.Ab=new nt(mi,this,0,3)),As(this.Ab,l(n,16));return}uf(this,t-yr(this.ii()),Mn((r=l(Kn(this,16),29),r||this.ii()),t),n)},h.di=function(t){px(this,128,t)},h.ii=function(){return Tn(),H_t},h.ki=function(t){var n;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab);return}cf(this,t-yr(this.ii()),Mn((n=l(Kn(this,16),29),n||this.ii()),t))},h.pi=function(){this.Bb|=1},h.qi=function(t){return YA(this,t)},h.Bb=0,I(Gn,"EModelElementImpl",158),D(720,158,{110:1,94:1,93:1,480:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1},fz),h.ri=function(t,n){return Lvt(this,t,n)},h.si=function(t){var n,r,a,o,f;if(this.a!=Ah(t)||t.Bb&256)throw ue(new Yn(qfe+t.zb+t3));for(a=dc(t);du(a.a).i!=0;){if(r=l(mP(a,0,(n=l(Oe(du(a.a),0),89),f=n.c,De(f,90)?l(f,29):(Tn(),Kf))),29),zw(r))return o=Ah(r).wi().si(r),l(o,54).ci(t),o;a=dc(r)}return(t.D!=null?t.D:t.B)=="java.util.Map$Entry"?new Git(t):new F4e(t)},h.ti=function(t,n){return Kw(this,t,n)},h.Lh=function(t,n,r){var a;switch(t){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),this.Ab;case 1:return this.a}return sf(this,t-yr((Tn(),em)),Mn((a=l(Kn(this,16),29),a||em),t),n,r)},h.Sh=function(t,n,r){var a,o;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),Ru(this.Ab,t,r);case 1:return this.a&&(r=l(this.a,54).Th(this,4,u1,r)),r8e(this,l(t,241),r)}return o=l(Mn((a=l(Kn(this,16),29),a||(Tn(),em)),n),69),o.wk().zk(this,Ku(this),n-yr((Tn(),em)),t,r)},h.Uh=function(t,n,r){var a,o;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),To(this.Ab,t,r);case 1:return r8e(this,null,r)}return o=l(Mn((a=l(Kn(this,16),29),a||(Tn(),em)),n),69),o.wk().Ak(this,Ku(this),n-yr((Tn(),em)),t,r)},h.Wh=function(t){var n;switch(t){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return!!this.a}return nf(this,t-yr((Tn(),em)),Mn((n=l(Kn(this,16),29),n||em),t))},h.bi=function(t,n){var r;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab),!this.Ab&&(this.Ab=new nt(mi,this,0,3)),As(this.Ab,l(n,16));return;case 1:Xgt(this,l(n,241));return}uf(this,t-yr((Tn(),em)),Mn((r=l(Kn(this,16),29),r||em),t),n)},h.ii=function(){return Tn(),em},h.ki=function(t){var n;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab);return;case 1:Xgt(this,null);return}cf(this,t-yr((Tn(),em)),Mn((n=l(Kn(this,16),29),n||em),t))};var jM,bPe,S_t;I(Gn,"EFactoryImpl",720),D(1037,720,{110:1,2113:1,94:1,93:1,480:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1},ik),h.ri=function(t,n){switch(t.hk()){case 12:return l(n,149).Pg();case 13:return xc(n);default:throw ue(new Yn(yT+t.xe()+t3))}},h.si=function(t){var n,r,a,o,f,g,w,E;switch(t.G==-1&&(t.G=(n=Ah(t),n?f2(n.vi(),t):-1)),t.G){case 4:return f=new sk,f;case 6:return g=new a_,g;case 7:return w=new jwe,w;case 8:return a=new TI,a;case 9:return r=new AS,r;case 10:return o=new rk,o;case 11:return E=new k$,E;default:throw ue(new Yn(qfe+t.zb+t3))}},h.ti=function(t,n){switch(t.hk()){case 13:case 12:return null;default:throw ue(new Yn(yT+t.xe()+t3))}},I(sv,"ElkGraphFactoryImpl",1037),D(448,158,{110:1,94:1,93:1,155:1,197:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1}),h.Gh=function(){var t,n;return n=(t=l(Kn(this,16),29),j5e(Sd(t||this.ii()))),n==null?(w_(),w_(),rpe):new prt(this,n)},h.Lh=function(t,n,r){var a;switch(t){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),this.Ab;case 1:return this.xe()}return sf(this,t-yr(this.ii()),Mn((a=l(Kn(this,16),29),a||this.ii()),t),n,r)},h.Wh=function(t){var n;switch(t){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null}return nf(this,t-yr(this.ii()),Mn((n=l(Kn(this,16),29),n||this.ii()),t))},h.bi=function(t,n){var r;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab),!this.Ab&&(this.Ab=new nt(mi,this,0,3)),As(this.Ab,l(n,16));return;case 1:this.ui(ei(n));return}uf(this,t-yr(this.ii()),Mn((r=l(Kn(this,16),29),r||this.ii()),t),n)},h.ii=function(){return Tn(),V_t},h.ki=function(t){var n;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab);return;case 1:this.ui(null);return}cf(this,t-yr(this.ii()),Mn((n=l(Kn(this,16),29),n||this.ii()),t))},h.xe=function(){return this.zb},h.ui=function(t){Fu(this,t)},h.Ib=function(){return CA(this)},h.zb=null,I(Gn,"ENamedElementImpl",448),D(184,448,{110:1,94:1,93:1,155:1,197:1,58:1,241:1,114:1,54:1,99:1,158:1,184:1,119:1,120:1,690:1},qat),h.Ah=function(t){return ogt(this,t)},h.Lh=function(t,n,r){var a;switch(t){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.yb;case 3:return this.xb;case 4:return this.sb;case 5:return!this.rb&&(this.rb=new wy(this,l1,this)),this.rb;case 6:return!this.vb&&(this.vb=new V8(u1,this,6,7)),this.vb;case 7:return n?this.Db>>16==7?l(this.Cb,241):null:mot(this)}return sf(this,t-yr((Tn(),O2)),Mn((a=l(Kn(this,16),29),a||O2),t),n,r)},h.Sh=function(t,n,r){var a,o,f;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),Ru(this.Ab,t,r);case 4:return this.sb&&(r=l(this.sb,54).Th(this,1,RM,r)),a8e(this,l(t,480),r);case 5:return!this.rb&&(this.rb=new wy(this,l1,this)),Ru(this.rb,t,r);case 6:return!this.vb&&(this.vb=new V8(u1,this,6,7)),Ru(this.vb,t,r);case 7:return this.Cb&&(r=(o=this.Db>>16,o>=0?ogt(this,r):this.Cb.Th(this,-1-o,null,r))),Nh(this,t,7,r)}return f=l(Mn((a=l(Kn(this,16),29),a||(Tn(),O2)),n),69),f.wk().zk(this,Ku(this),n-yr((Tn(),O2)),t,r)},h.Uh=function(t,n,r){var a,o;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),To(this.Ab,t,r);case 4:return a8e(this,null,r);case 5:return!this.rb&&(this.rb=new wy(this,l1,this)),To(this.rb,t,r);case 6:return!this.vb&&(this.vb=new V8(u1,this,6,7)),To(this.vb,t,r);case 7:return Nh(this,null,7,r)}return o=l(Mn((a=l(Kn(this,16),29),a||(Tn(),O2)),n),69),o.wk().Ak(this,Ku(this),n-yr((Tn(),O2)),t,r)},h.Wh=function(t){var n;switch(t){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.yb!=null;case 3:return this.xb!=null;case 4:return!!this.sb;case 5:return!!this.rb&&this.rb.i!=0;case 6:return!!this.vb&&this.vb.i!=0;case 7:return!!mot(this)}return nf(this,t-yr((Tn(),O2)),Mn((n=l(Kn(this,16),29),n||O2),t))},h.Zh=function(t){var n;return n=wCn(this,t),n||Hke(this,t)},h.bi=function(t,n){var r;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab),!this.Ab&&(this.Ab=new nt(mi,this,0,3)),As(this.Ab,l(n,16));return;case 1:Fu(this,ei(n));return;case 2:SV(this,ei(n));return;case 3:CV(this,ei(n));return;case 4:Nue(this,l(n,480));return;case 5:!this.rb&&(this.rb=new wy(this,l1,this)),$r(this.rb),!this.rb&&(this.rb=new wy(this,l1,this)),As(this.rb,l(n,16));return;case 6:!this.vb&&(this.vb=new V8(u1,this,6,7)),$r(this.vb),!this.vb&&(this.vb=new V8(u1,this,6,7)),As(this.vb,l(n,16));return}uf(this,t-yr((Tn(),O2)),Mn((r=l(Kn(this,16),29),r||O2),t),n)},h.ei=function(t){var n,r;if(t&&this.rb)for(r=new or(this.rb);r.e!=r.i.gc();)n=gr(r),De(n,364)&&(l(n,364).w=null);px(this,64,t)},h.ii=function(){return Tn(),O2},h.ki=function(t){var n;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab);return;case 1:Fu(this,null);return;case 2:SV(this,null);return;case 3:CV(this,null);return;case 4:Nue(this,null);return;case 5:!this.rb&&(this.rb=new wy(this,l1,this)),$r(this.rb);return;case 6:!this.vb&&(this.vb=new V8(u1,this,6,7)),$r(this.vb);return}cf(this,t-yr((Tn(),O2)),Mn((n=l(Kn(this,16),29),n||O2),t))},h.pi=function(){yue(this)},h.vi=function(){return!this.rb&&(this.rb=new wy(this,l1,this)),this.rb},h.wi=function(){return this.sb},h.xi=function(){return this.ub},h.yi=function(){return this.xb},h.zi=function(){return this.yb},h.Ai=function(t){this.ub=t},h.Ib=function(){var t;return this.Db&64?CA(this):(t=new Af(CA(this)),t.a+=" (nsURI: ",Xo(t,this.yb),t.a+=", nsPrefix: ",Xo(t,this.xb),t.a+=")",t.a)},h.xb=null,h.yb=null,I(Gn,"EPackageImpl",184),D(569,184,{110:1,2115:1,569:1,94:1,93:1,155:1,197:1,58:1,241:1,114:1,54:1,99:1,158:1,184:1,119:1,120:1,690:1},k2t),h.q=!1,h.r=!1;var __t=!1;I(sv,"ElkGraphPackageImpl",569),D(366,740,{110:1,342:1,167:1,135:1,422:1,366:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},sk),h.Ah=function(t){return hxe(this,t)},h.Lh=function(t,n,r){switch(t){case 7:return vot(this);case 8:return this.a}return x8e(this,t,n,r)},h.Sh=function(t,n,r){var a;switch(n){case 7:return this.Cb&&(r=(a=this.Db>>16,a>=0?hxe(this,r):this.Cb.Th(this,-1-a,null,r))),J4e(this,l(t,167),r)}return Mue(this,t,n,r)},h.Uh=function(t,n,r){return n==7?J4e(this,null,r):dce(this,t,n,r)},h.Wh=function(t){switch(t){case 7:return!!vot(this);case 8:return!vn("",this.a)}return _8e(this,t)},h.bi=function(t,n){switch(t){case 7:U9e(this,l(n,167));return;case 8:l7e(this,ei(n));return}Cxe(this,t,n)},h.ii=function(){return su(),dPe},h.ki=function(t){switch(t){case 7:U9e(this,null);return;case 8:l7e(this,"");return}N8e(this,t)},h.Ib=function(){return lpt(this)},h.a="",I(sv,"ElkLabelImpl",366),D(207,741,{110:1,342:1,84:1,167:1,27:1,422:1,207:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},a_),h.Ah=function(t){return pxe(this,t)},h.Lh=function(t,n,r){switch(t){case 9:return!this.c&&(this.c=new nt(Hl,this,9,9)),this.c;case 10:return!this.a&&(this.a=new nt(Ai,this,10,11)),this.a;case 11:return ds(this);case 12:return!this.b&&(this.b=new nt(js,this,12,3)),this.b;case 13:return Hn(),!this.a&&(this.a=new nt(Ai,this,10,11)),this.a.i>0}return J8e(this,t,n,r)},h.Sh=function(t,n,r){var a;switch(n){case 9:return!this.c&&(this.c=new nt(Hl,this,9,9)),Ru(this.c,t,r);case 10:return!this.a&&(this.a=new nt(Ai,this,10,11)),Ru(this.a,t,r);case 11:return this.Cb&&(r=(a=this.Db>>16,a>=0?pxe(this,r):this.Cb.Th(this,-1-a,null,r))),s4e(this,l(t,27),r);case 12:return!this.b&&(this.b=new nt(js,this,12,3)),Ru(this.b,t,r)}return vxe(this,t,n,r)},h.Uh=function(t,n,r){switch(n){case 9:return!this.c&&(this.c=new nt(Hl,this,9,9)),To(this.c,t,r);case 10:return!this.a&&(this.a=new nt(Ai,this,10,11)),To(this.a,t,r);case 11:return s4e(this,null,r);case 12:return!this.b&&(this.b=new nt(js,this,12,3)),To(this.b,t,r)}return wxe(this,t,n,r)},h.Wh=function(t){switch(t){case 9:return!!this.c&&this.c.i!=0;case 10:return!!this.a&&this.a.i!=0;case 11:return!!ds(this);case 12:return!!this.b&&this.b.i!=0;case 13:return!this.a&&(this.a=new nt(Ai,this,10,11)),this.a.i>0}return H7e(this,t)},h.bi=function(t,n){switch(t){case 9:!this.c&&(this.c=new nt(Hl,this,9,9)),$r(this.c),!this.c&&(this.c=new nt(Hl,this,9,9)),As(this.c,l(n,16));return;case 10:!this.a&&(this.a=new nt(Ai,this,10,11)),$r(this.a),!this.a&&(this.a=new nt(Ai,this,10,11)),As(this.a,l(n,16));return;case 11:LU(this,l(n,27));return;case 12:!this.b&&(this.b=new nt(js,this,12,3)),$r(this.b),!this.b&&(this.b=new nt(js,this,12,3)),As(this.b,l(n,16));return}I9e(this,t,n)},h.ii=function(){return su(),gPe},h.ki=function(t){switch(t){case 9:!this.c&&(this.c=new nt(Hl,this,9,9)),$r(this.c);return;case 10:!this.a&&(this.a=new nt(Ai,this,10,11)),$r(this.a);return;case 11:LU(this,null);return;case 12:!this.b&&(this.b=new nt(js,this,12,3)),$r(this.b);return}K8e(this,t)},h.Ib=function(){return oke(this)},I(sv,"ElkNodeImpl",207),D(193,741,{110:1,342:1,84:1,167:1,123:1,422:1,193:1,96:1,94:1,93:1,58:1,114:1,54:1,99:1,119:1,120:1},jwe),h.Ah=function(t){return fxe(this,t)},h.Lh=function(t,n,r){return t==9?M1(this):J8e(this,t,n,r)},h.Sh=function(t,n,r){var a;switch(n){case 9:return this.Cb&&(r=(a=this.Db>>16,a>=0?fxe(this,r):this.Cb.Th(this,-1-a,null,r))),Xye(this,l(t,27),r)}return vxe(this,t,n,r)},h.Uh=function(t,n,r){return n==9?Xye(this,null,r):wxe(this,t,n,r)},h.Wh=function(t){return t==9?!!M1(this):H7e(this,t)},h.bi=function(t,n){switch(t){case 9:z9e(this,l(n,27));return}I9e(this,t,n)},h.ii=function(){return su(),pPe},h.ki=function(t){switch(t){case 9:z9e(this,null);return}K8e(this,t)},h.Ib=function(){return Jbt(this)},I(sv,"ElkPortImpl",193);var A_t=ks(So,"BasicEMap/Entry");D(1122,120,{110:1,44:1,94:1,93:1,136:1,58:1,114:1,54:1,99:1,119:1,120:1},k$),h.Fb=function(t){return this===t},h.ld=function(){return this.b},h.Hb=function(){return fw(this)},h.Di=function(t){h7e(this,l(t,149))},h.Lh=function(t,n,r){switch(t){case 0:return this.b;case 1:return this.c}return rU(this,t,n,r)},h.Wh=function(t){switch(t){case 0:return!!this.b;case 1:return this.c!=null}return nue(this,t)},h.bi=function(t,n){switch(t){case 0:h7e(this,l(n,149));return;case 1:u7e(this,n);return}$ue(this,t,n)},h.ii=function(){return su(),Cg},h.ki=function(t){switch(t){case 0:h7e(this,null);return;case 1:u7e(this,null);return}Fue(this,t)},h.Bi=function(){var t;return this.a==-1&&(t=this.b,this.a=t?es(t):0),this.a},h.md=function(){return this.c},h.Ci=function(t){this.a=t},h.nd=function(t){var n;return n=this.c,u7e(this,t),n},h.Ib=function(){var t;return this.Db&64?g0(this):(t=new tb,hi(hi(hi(t,this.b?this.b.Pg():ul),Phe),j_(this.c)),t.a)},h.a=-1,h.c=null;var L2=I(sv,"ElkPropertyToValueMapEntryImpl",1122);D(996,1,{},T$),I(no,"JsonAdapter",996),D(216,63,lp,dd),I(no,"JsonImportException",216),D(868,1,{},cgt),I(no,"JsonImporter",868),D(903,1,{},ptt),I(no,"JsonImporter/lambda$0$Type",903),D(904,1,{},btt),I(no,"JsonImporter/lambda$1$Type",904),D(912,1,{},FXe),I(no,"JsonImporter/lambda$10$Type",912),D(914,1,{},mtt),I(no,"JsonImporter/lambda$11$Type",914),D(915,1,{},vtt),I(no,"JsonImporter/lambda$12$Type",915),D(921,1,{},Mat),I(no,"JsonImporter/lambda$13$Type",921),D(920,1,{},Dat),I(no,"JsonImporter/lambda$14$Type",920),D(916,1,{},wtt),I(no,"JsonImporter/lambda$15$Type",916),D(917,1,{},ytt),I(no,"JsonImporter/lambda$16$Type",917),D(918,1,{},xtt),I(no,"JsonImporter/lambda$17$Type",918),D(919,1,{},ktt),I(no,"JsonImporter/lambda$18$Type",919),D(924,1,{},RXe),I(no,"JsonImporter/lambda$19$Type",924),D(905,1,{},jXe),I(no,"JsonImporter/lambda$2$Type",905),D(922,1,{},$Xe),I(no,"JsonImporter/lambda$20$Type",922),D(923,1,{},zXe),I(no,"JsonImporter/lambda$21$Type",923),D(927,1,{},qXe),I(no,"JsonImporter/lambda$22$Type",927),D(925,1,{},HXe),I(no,"JsonImporter/lambda$23$Type",925),D(926,1,{},VXe),I(no,"JsonImporter/lambda$24$Type",926),D(929,1,{},UXe),I(no,"JsonImporter/lambda$25$Type",929),D(928,1,{},GXe),I(no,"JsonImporter/lambda$26$Type",928),D(930,1,fr,Ett),h.Cd=function(t){Ovn(this.b,this.a,ei(t))},I(no,"JsonImporter/lambda$27$Type",930),D(931,1,fr,Ttt),h.Cd=function(t){Nvn(this.b,this.a,ei(t))},I(no,"JsonImporter/lambda$28$Type",931),D(932,1,{},Ctt),I(no,"JsonImporter/lambda$29$Type",932),D(908,1,{},KXe),I(no,"JsonImporter/lambda$3$Type",908),D(933,1,{},Stt),I(no,"JsonImporter/lambda$30$Type",933),D(934,1,{},WXe),I(no,"JsonImporter/lambda$31$Type",934),D(935,1,{},YXe),I(no,"JsonImporter/lambda$32$Type",935),D(936,1,{},XXe),I(no,"JsonImporter/lambda$33$Type",936),D(937,1,{},QXe),I(no,"JsonImporter/lambda$34$Type",937),D(870,1,{},JXe),I(no,"JsonImporter/lambda$35$Type",870),D(941,1,{},yit),I(no,"JsonImporter/lambda$36$Type",941),D(938,1,fr,ZXe),h.Cd=function(t){jmn(this.a,l(t,377))},I(no,"JsonImporter/lambda$37$Type",938),D(939,1,fr,_tt),h.Cd=function(t){yln(this.a,this.b,l(t,166))},I(no,"JsonImporter/lambda$38$Type",939),D(940,1,fr,Att),h.Cd=function(t){xln(this.a,this.b,l(t,166))},I(no,"JsonImporter/lambda$39$Type",940),D(906,1,{},eQe),I(no,"JsonImporter/lambda$4$Type",906),D(942,1,fr,tQe),h.Cd=function(t){$mn(this.a,l(t,8))},I(no,"JsonImporter/lambda$40$Type",942),D(907,1,{},nQe),I(no,"JsonImporter/lambda$5$Type",907),D(911,1,{},rQe),I(no,"JsonImporter/lambda$6$Type",911),D(909,1,{},iQe),I(no,"JsonImporter/lambda$7$Type",909),D(910,1,{},sQe),I(no,"JsonImporter/lambda$8$Type",910),D(913,1,{},aQe),I(no,"JsonImporter/lambda$9$Type",913),D(961,1,fr,oQe),h.Cd=function(t){J8(this.a,new yy(ei(t)))},I(no,"JsonMetaDataConverter/lambda$0$Type",961),D(962,1,fr,cQe),h.Cd=function(t){Dgn(this.a,l(t,245))},I(no,"JsonMetaDataConverter/lambda$1$Type",962),D(963,1,fr,uQe),h.Cd=function(t){M2n(this.a,l(t,143))},I(no,"JsonMetaDataConverter/lambda$2$Type",963),D(964,1,fr,lQe),h.Cd=function(t){Ign(this.a,l(t,170))},I(no,"JsonMetaDataConverter/lambda$3$Type",964),D(245,22,{3:1,34:1,22:1,245:1},R8);var bY,mY,Xge,vY,wY,yY,Qge,Jge,xY=Fr(IP,"GraphFeature",245,Hr,pwn,idn),L_t;D(11,1,{34:1,149:1},Ui,vs,pn,Ha),h.Fd=function(t){return Shn(this,l(t,149))},h.Fb=function(t){return eot(this,t)},h.Sg=function(){return It(this)},h.Pg=function(){return this.b},h.Hb=function(){return s2(this.b)},h.Ib=function(){return this.b},I(IP,"Property",11),D(671,1,ii,Nie),h.Ne=function(t,n){return B4n(this,l(t,96),l(n,96))},h.Fb=function(t){return this===t},h.Oe=function(){return new Vt(this)},I(IP,"PropertyHolderComparator",671),D(709,1,Oa,ywe),h.Nb=function(t){Za(this,t)},h.Pb=function(){return Fvn(this)},h.Qb=function(){aZe()},h.Ob=function(){return!!this.a},I(qG,"ElkGraphUtil/AncestorIterator",709);var mPe=ks(So,"EList");D(70,56,{20:1,31:1,56:1,16:1,15:1,70:1,61:1}),h.bd=function(t,n){_A(this,t,n)},h.Fc=function(t){return qr(this,t)},h.cd=function(t,n){return N7e(this,t,n)},h.Gc=function(t){return As(this,t)},h.Ii=function(){return new H8(this)},h.Ji=function(){return new CO(this)},h.Ki=function(t){return mN(this,t)},h.Li=function(){return!0},h.Mi=function(t,n){},h.Ni=function(){},h.Oi=function(t,n){Noe(this,t,n)},h.Pi=function(t,n,r){},h.Qi=function(t,n){},h.Ri=function(t,n,r){},h.Fb=function(t){return Bbt(this,t)},h.Hb=function(){return M7e(this)},h.Si=function(){return!1},h.Kc=function(){return new or(this)},h.ed=function(){return new q8(this)},h.fd=function(t){var n;if(n=this.gc(),t<0||t>n)throw ue(new my(t,n));return new jae(this,t)},h.Ui=function(t,n){this.Ti(t,this.dd(n))},h.Mc=function(t){return sV(this,t)},h.Wi=function(t,n){return n},h.hd=function(t,n){return n6(this,t,n)},h.Ib=function(){return T8e(this)},h.Yi=function(){return!0},h.Zi=function(t,n){return EE(this,n)},I(So,"AbstractEList",70),D(66,70,Bd,X2,Lw,T7e),h.Ei=function(t,n){return Due(this,t,n)},h.Fi=function(t){return Odt(this,t)},h.Gi=function(t,n){IN(this,t,n)},h.Hi=function(t){tN(this,t)},h.$i=function(t){return R6e(this,t)},h.$b=function(){uA(this)},h.Hc=function(t){return jE(this,t)},h.Xb=function(t){return Oe(this,t)},h._i=function(t){var n,r,a;++this.j,r=this.g==null?0:this.g.length,t>r&&(a=this.g,n=r+(r/2|0)+4,n=0?(this.gd(n),!0):!1},h.Xi=function(t,n){return this.Dj(t,this.Zi(t,n))},h.gc=function(){return this.Ej()},h.Pc=function(){return this.Fj()},h.Qc=function(t){return this.Gj(t)},h.Ib=function(){return this.Hj()},I(So,"DelegatingEList",2093),D(2094,2093,J4t),h.Ei=function(t,n){return wke(this,t,n)},h.Fi=function(t){return this.Ei(this.Ej(),t)},h.Gi=function(t,n){E2t(this,t,n)},h.Hi=function(t){h2t(this,t)},h.Li=function(){return!this.Mj()},h.$b=function(){tL(this)},h.Ij=function(t,n,r,a,o){return new Zat(this,t,n,r,a,o)},h.Jj=function(t){Ni(this.jj(),t)},h.Kj=function(){return null},h.Lj=function(){return-1},h.jj=function(){return null},h.Mj=function(){return!1},h.Nj=function(t,n){return n},h.Oj=function(t,n){return n},h.Pj=function(){return!1},h.Qj=function(){return!this.Aj()},h.Ti=function(t,n){var r,a;return this.Pj()?(a=this.Qj(),r=Uxe(this,t,n),this.Jj(this.Ij(7,pt(n),r,t,a)),r):Uxe(this,t,n)},h.gd=function(t){var n,r,a,o;return this.Pj()?(r=null,a=this.Qj(),n=this.Ij(4,o=rH(this,t),null,t,a),this.Mj()&&o?(r=this.Oj(o,r),r?(r.nj(n),r.oj()):this.Jj(n)):r?(r.nj(n),r.oj()):this.Jj(n),o):(o=rH(this,t),this.Mj()&&o&&(r=this.Oj(o,null),r&&r.oj()),o)},h.Xi=function(t,n){return Mmt(this,t,n)},I(Rx,"DelegatingNotifyingListImpl",2094),D(152,1,YP),h.nj=function(t){return Mxe(this,t)},h.oj=function(){qoe(this)},h.gj=function(){return this.d},h.Kj=function(){return null},h.Rj=function(){return null},h.hj=function(t){return-1},h.ij=function(){return mbt(this)},h.jj=function(){return null},h.kj=function(){return X9e(this)},h.lj=function(){return this.o<0?this.o<-2?-2-this.o-1:-1:this.o},h.Sj=function(){return!1},h.mj=function(t){var n,r,a,o,f,g,w,E,C,L,B;switch(this.d){case 1:case 2:switch(o=t.gj(),o){case 1:case 2:if(f=t.jj(),qe(f)===qe(this.jj())&&this.hj(null)==t.hj(null))return this.g=t.ij(),t.gj()==1&&(this.d=1),!0}case 4:{switch(o=t.gj(),o){case 4:{if(f=t.jj(),qe(f)===qe(this.jj())&&this.hj(null)==t.hj(null))return C=Bke(this),E=this.o<0?this.o<-2?-2-this.o-1:-1:this.o,g=t.lj(),this.d=6,B=new Lw(2),E<=g?(qr(B,this.n),qr(B,t.kj()),this.g=he(le(Vr,1),di,28,15,[this.o=E,g+1])):(qr(B,t.kj()),qr(B,this.n),this.g=he(le(Vr,1),di,28,15,[this.o=g,E])),this.n=B,C||(this.o=-2-this.o-1),!0;break}}break}case 6:{switch(o=t.gj(),o){case 4:{if(f=t.jj(),qe(f)===qe(this.jj())&&this.hj(null)==t.hj(null)){for(C=Bke(this),g=t.lj(),L=l(this.g,53),a=We(Vr,di,28,L.length+1,15,1),n=0;n>>0,n.toString(16))),a.a+=" (eventType: ",this.d){case 1:{a.a+="SET";break}case 2:{a.a+="UNSET";break}case 3:{a.a+="ADD";break}case 5:{a.a+="ADD_MANY";break}case 4:{a.a+="REMOVE";break}case 6:{a.a+="REMOVE_MANY";break}case 7:{a.a+="MOVE";break}case 8:{a.a+="REMOVING_ADAPTER";break}case 9:{a.a+="RESOLVE";break}default:{ise(a,this.d);break}}if(imt(this)&&(a.a+=", touch: true"),a.a+=", position: ",ise(a,this.o<0?this.o<-2?-2-this.o-1:-1:this.o),a.a+=", notifier: ",O_(a,this.jj()),a.a+=", feature: ",O_(a,this.Kj()),a.a+=", oldValue: ",O_(a,X9e(this)),a.a+=", newValue: ",this.d==6&&De(this.g,53)){for(r=l(this.g,53),a.a+="[",t=0;t10?((!this.b||this.c.j!=this.a)&&(this.b=new U_(this),this.a=this.j),W0(this.b,t)):jE(this,t)},h.Yi=function(){return!0},h.a=0,I(So,"AbstractEList/1",966),D(302,77,she,my),I(So,"AbstractEList/BasicIndexOutOfBoundsException",302),D(37,1,Oa,or),h.Nb=function(t){Za(this,t)},h.Xj=function(){if(this.i.j!=this.f)throw ue(new Xh)},h.Yj=function(){return gr(this)},h.Ob=function(){return this.e!=this.i.gc()},h.Pb=function(){return this.Yj()},h.Qb=function(){jA(this)},h.e=0,h.f=0,h.g=-1,I(So,"AbstractEList/EIterator",37),D(286,37,lg,q8,jae),h.Qb=function(){jA(this)},h.Rb=function(t){D1t(this,t)},h.Zj=function(){var t;try{return t=this.d.Xb(--this.e),this.Xj(),this.g=this.e,t}catch(n){throw n=bs(n),De(n,77)?(this.Xj(),ue(new _c)):ue(n)}},h.$j=function(t){Bdt(this,t)},h.Sb=function(){return this.e!=0},h.Tb=function(){return this.e},h.Ub=function(){return this.Zj()},h.Vb=function(){return this.e-1},h.Wb=function(t){this.$j(t)},I(So,"AbstractEList/EListIterator",286),D(355,37,Oa,H8),h.Yj=function(){return rue(this)},h.Qb=function(){throw ue(new Qr)},I(So,"AbstractEList/NonResolvingEIterator",355),D(398,286,lg,CO,f4e),h.Rb=function(t){throw ue(new Qr)},h.Yj=function(){var t;try{return t=this.c.Vi(this.e),this.Xj(),this.g=this.e++,t}catch(n){throw n=bs(n),De(n,77)?(this.Xj(),ue(new _c)):ue(n)}},h.Zj=function(){var t;try{return t=this.c.Vi(--this.e),this.Xj(),this.g=this.e,t}catch(n){throw n=bs(n),De(n,77)?(this.Xj(),ue(new _c)):ue(n)}},h.Qb=function(){throw ue(new Qr)},h.Wb=function(t){throw ue(new Qr)},I(So,"AbstractEList/NonResolvingEListIterator",398),D(2080,70,Z4t),h.Ei=function(t,n){var r,a,o,f,g,w,E,C,L,B,z;if(o=n.gc(),o!=0){for(C=l(Kn(this.a,4),129),L=C==null?0:C.length,z=L+o,a=Sce(this,z),B=L-t,B>0&&pu(C,t,a,t+o,B),E=n.Kc(),g=0;gr)throw ue(new my(t,r));return new xat(this,t)},h.$b=function(){var t,n;++this.j,t=l(Kn(this.a,4),129),n=t==null?0:t.length,PE(this,null),Noe(this,n,t)},h.Hc=function(t){var n,r,a,o,f;if(n=l(Kn(this.a,4),129),n!=null){if(t!=null){for(a=n,o=0,f=a.length;o=r)throw ue(new my(t,r));return n[t]},h.dd=function(t){var n,r,a;if(n=l(Kn(this.a,4),129),n!=null){if(t!=null){for(r=0,a=n.length;rr)throw ue(new my(t,r));return new yat(this,t)},h.Ti=function(t,n){var r,a,o;if(r=z1t(this),o=r==null?0:r.length,t>=o)throw ue(new tc(Qfe+t+av+o));if(n>=o)throw ue(new tc(Jfe+n+av+o));return a=r[n],t!=n&&(t0&&pu(t,0,n,0,r),n},h.Qc=function(t){var n,r,a;return n=l(Kn(this.a,4),129),a=n==null?0:n.length,a>0&&(t.lengtha&&Ts(t,a,null),t};var M_t;I(So,"ArrayDelegatingEList",2080),D(1051,37,Oa,kut),h.Xj=function(){if(this.b.j!=this.f||qe(l(Kn(this.b.a,4),129))!==qe(this.a))throw ue(new Xh)},h.Qb=function(){jA(this),this.a=l(Kn(this.b.a,4),129)},I(So,"ArrayDelegatingEList/EIterator",1051),D(722,286,lg,Nst,yat),h.Xj=function(){if(this.b.j!=this.f||qe(l(Kn(this.b.a,4),129))!==qe(this.a))throw ue(new Xh)},h.$j=function(t){Bdt(this,t),this.a=l(Kn(this.b.a,4),129)},h.Qb=function(){jA(this),this.a=l(Kn(this.b.a,4),129)},I(So,"ArrayDelegatingEList/EListIterator",722),D(1052,355,Oa,Eut),h.Xj=function(){if(this.b.j!=this.f||qe(l(Kn(this.b.a,4),129))!==qe(this.a))throw ue(new Xh)},I(So,"ArrayDelegatingEList/NonResolvingEIterator",1052),D(723,398,lg,Pst,xat),h.Xj=function(){if(this.b.j!=this.f||qe(l(Kn(this.b.a,4),129))!==qe(this.a))throw ue(new Xh)},I(So,"ArrayDelegatingEList/NonResolvingEListIterator",723),D(615,302,she,Vse),I(So,"BasicEList/BasicIndexOutOfBoundsException",615),D(710,66,Bd,eye),h.bd=function(t,n){throw ue(new Qr)},h.Fc=function(t){throw ue(new Qr)},h.cd=function(t,n){throw ue(new Qr)},h.Gc=function(t){throw ue(new Qr)},h.$b=function(){throw ue(new Qr)},h._i=function(t){throw ue(new Qr)},h.Kc=function(){return this.Ii()},h.ed=function(){return this.Ji()},h.fd=function(t){return this.Ki(t)},h.Ti=function(t,n){throw ue(new Qr)},h.Ui=function(t,n){throw ue(new Qr)},h.gd=function(t){throw ue(new Qr)},h.Mc=function(t){throw ue(new Qr)},h.hd=function(t,n){throw ue(new Qr)},I(So,"BasicEList/UnmodifiableEList",710),D(721,1,{3:1,20:1,16:1,15:1,61:1,597:1}),h.bd=function(t,n){ghn(this,t,l(n,44))},h.Fc=function(t){return ofn(this,l(t,44))},h.Jc=function(t){to(this,t)},h.Xb=function(t){return l(Oe(this.c,t),136)},h.Ti=function(t,n){return l(this.c.Ti(t,n),44)},h.Ui=function(t,n){phn(this,t,l(n,44))},h.Lc=function(){return new bn(null,new kn(this,16))},h.gd=function(t){return l(this.c.gd(t),44)},h.hd=function(t,n){return Mgn(this,t,l(n,44))},h.jd=function(t){$m(this,t)},h.Nc=function(){return new kn(this,16)},h.Oc=function(){return new bn(null,new kn(this,16))},h.cd=function(t,n){return this.c.cd(t,n)},h.Gc=function(t){return this.c.Gc(t)},h.$b=function(){this.c.$b()},h.Hc=function(t){return this.c.Hc(t)},h.Ic=function(t){return EN(this.c,t)},h._j=function(){var t,n,r;if(this.d==null){for(this.d=We(vPe,_Se,66,2*this.f+1,0,1),r=this.e,this.f=0,n=this.c.Kc();n.e!=n.i.gc();)t=l(n.Yj(),136),oU(this,t);this.e=r}},h.Fb=function(t){return cit(this,t)},h.Hb=function(){return M7e(this.c)},h.dd=function(t){return this.c.dd(t)},h.ak=function(){this.c=new hQe(this)},h.dc=function(){return this.f==0},h.Kc=function(){return this.c.Kc()},h.ed=function(){return this.c.ed()},h.fd=function(t){return this.c.fd(t)},h.bk=function(){return iN(this)},h.ck=function(t,n,r){return new xit(t,n,r)},h.dk=function(){return new S$},h.Mc=function(t){return Wht(this,t)},h.gc=function(){return this.f},h.kd=function(t,n){return new Zp(this.c,t,n)},h.Pc=function(){return this.c.Pc()},h.Qc=function(t){return this.c.Qc(t)},h.Ib=function(){return T8e(this.c)},h.e=0,h.f=0,I(So,"BasicEMap",721),D(1046,66,Bd,hQe),h.Mi=function(t,n){Gcn(this,l(n,136))},h.Pi=function(t,n,r){var a;++(a=this,l(n,136),a).a.e},h.Qi=function(t,n){Kcn(this,l(n,136))},h.Ri=function(t,n,r){Ghn(this,l(n,136),l(r,136))},h.Oi=function(t,n){zft(this.a)},I(So,"BasicEMap/1",1046),D(1047,66,Bd,S$),h.aj=function(t){return We(NOn,e5t,621,t,0,1)},I(So,"BasicEMap/2",1047),D(1048,q1,Tl,fQe),h.$b=function(){this.a.c.$b()},h.Hc=function(t){return Kce(this.a,t)},h.Kc=function(){return this.a.f==0?(Fk(),fF.a):new WJe(this.a)},h.Mc=function(t){var n;return n=this.a.f,YV(this.a,t),this.a.f!=n},h.gc=function(){return this.a.f},I(So,"BasicEMap/3",1048),D(1049,31,Wy,dQe),h.$b=function(){this.a.c.$b()},h.Hc=function(t){return Fbt(this.a,t)},h.Kc=function(){return this.a.f==0?(Fk(),fF.a):new YJe(this.a)},h.gc=function(){return this.a.f},I(So,"BasicEMap/4",1049),D(1050,q1,Tl,gQe),h.$b=function(){this.a.c.$b()},h.Hc=function(t){var n,r,a,o,f,g,w,E,C;if(this.a.f>0&&De(t,44)&&(this.a._j(),E=l(t,44),w=E.ld(),o=w==null?0:es(w),f=Qye(this.a,o),n=this.a.d[f],n)){for(r=l(n.g,379),C=n.i,g=0;g"+this.c},h.a=0;var NOn=I(So,"BasicEMap/EntryImpl",621);D(546,1,{},MS),I(So,"BasicEMap/View",546);var fF;D(783,1,{}),h.Fb=function(t){return O9e((Cn(),_o),t)},h.Hb=function(){return q7e((Cn(),_o))},h.Ib=function(){return Tb((Cn(),_o))},I(So,"ECollections/BasicEmptyUnmodifiableEList",783),D(1348,1,lg,Qne),h.Nb=function(t){Za(this,t)},h.Rb=function(t){throw ue(new Qr)},h.Ob=function(){return!1},h.Sb=function(){return!1},h.Pb=function(){throw ue(new _c)},h.Tb=function(){return 0},h.Ub=function(){throw ue(new _c)},h.Vb=function(){return-1},h.Qb=function(){throw ue(new Qr)},h.Wb=function(t){throw ue(new Qr)},I(So,"ECollections/BasicEmptyUnmodifiableEList/1",1348),D(1346,783,{20:1,16:1,15:1,61:1},iJe),h.bd=function(t,n){wZe()},h.Fc=function(t){return yZe()},h.cd=function(t,n){return xZe()},h.Gc=function(t){return kZe()},h.$b=function(){EZe()},h.Hc=function(t){return!1},h.Ic=function(t){return!1},h.Jc=function(t){to(this,t)},h.Xb=function(t){return rye((Cn(),t)),null},h.dd=function(t){return-1},h.dc=function(){return!0},h.Kc=function(){return this.a},h.ed=function(){return this.a},h.fd=function(t){return this.a},h.Ti=function(t,n){return TZe()},h.Ui=function(t,n){CZe()},h.Lc=function(){return new bn(null,new kn(this,16))},h.gd=function(t){return SZe()},h.Mc=function(t){return _Ze()},h.hd=function(t,n){return AZe()},h.gc=function(){return 0},h.jd=function(t){$m(this,t)},h.Nc=function(){return new kn(this,16)},h.Oc=function(){return new bn(null,new kn(this,16))},h.kd=function(t,n){return Cn(),new Zp(_o,t,n)},h.Pc=function(){return e5e((Cn(),_o))},h.Qc=function(t){return Cn(),PA(_o,t)},I(So,"ECollections/EmptyUnmodifiableEList",1346),D(1347,783,{20:1,16:1,15:1,61:1,597:1},sJe),h.bd=function(t,n){wZe()},h.Fc=function(t){return yZe()},h.cd=function(t,n){return xZe()},h.Gc=function(t){return kZe()},h.$b=function(){EZe()},h.Hc=function(t){return!1},h.Ic=function(t){return!1},h.Jc=function(t){to(this,t)},h.Xb=function(t){return rye((Cn(),t)),null},h.dd=function(t){return-1},h.dc=function(){return!0},h.Kc=function(){return this.a},h.ed=function(){return this.a},h.fd=function(t){return this.a},h.Ti=function(t,n){return TZe()},h.Ui=function(t,n){CZe()},h.Lc=function(){return new bn(null,new kn(this,16))},h.gd=function(t){return SZe()},h.Mc=function(t){return _Ze()},h.hd=function(t,n){return AZe()},h.gc=function(){return 0},h.jd=function(t){$m(this,t)},h.Nc=function(){return new kn(this,16)},h.Oc=function(){return new bn(null,new kn(this,16))},h.kd=function(t,n){return Cn(),new Zp(_o,t,n)},h.Pc=function(){return e5e((Cn(),_o))},h.Qc=function(t){return Cn(),PA(_o,t)},h.bk=function(){return Cn(),Cn(),mg},I(So,"ECollections/EmptyUnmodifiableEMap",1347);var yPe=ks(So,"Enumerator"),kY;D(288,1,{288:1},ele),h.Fb=function(t){var n;return this===t?!0:De(t,288)?(n=l(t,288),this.f==n.f&&Gdn(this.i,n.i)&&_ae(this.a,this.f&256?n.f&256?n.a:null:n.f&256?null:n.a)&&_ae(this.d,n.d)&&_ae(this.g,n.g)&&_ae(this.e,n.e)&&b6n(this,n)):!1},h.Hb=function(){return this.f},h.Ib=function(){return bmt(this)},h.f=0;var D_t=0,I_t=0,O_t=0,N_t=0,xPe=0,kPe=0,EPe=0,TPe=0,CPe=0,P_t,$M=0,zM=0,B_t=0,F_t=0,EY,SPe;I(So,"URI",288),D(1121,45,m6,aJe),h.zc=function(t,n){return l(rc(this,ei(t),l(n,288)),288)},I(So,"URI/URICache",1121),D(506,66,Bd,E$,uH),h.Si=function(){return!0},I(So,"UniqueEList",506),D(590,63,lp,nV),I(So,"WrappedException",590);var mi=ks(pf,r5t),M4=ks(pf,i5t),dl=ks(pf,s5t),D4=ks(pf,a5t),l1=ks(pf,o5t),Vf=ks(pf,"EClass"),tpe=ks(pf,"EDataType"),R_t;D(1233,45,m6,oJe),h.xc=function(t){return Ia(t)?xu(this,t):hc(zo(this.f,t))},I(pf,"EDataType/Internal/ConversionDelegate/Factory/Registry/Impl",1233);var TY=ks(pf,"EEnum"),wp=ks(pf,c5t),Wo=ks(pf,u5t),Uf=ks(pf,l5t),Gf,k3=ks(pf,h5t),I4=ks(pf,f5t);D(1042,1,{},Yne),h.Ib=function(){return"NIL"},I(pf,"EStructuralFeature/Internal/DynamicValueHolder/1",1042);var j_t;D(1041,45,m6,cJe),h.xc=function(t){return Ia(t)?xu(this,t):hc(zo(this.f,t))},I(pf,"EStructuralFeature/Internal/SettingDelegate/Factory/Registry/Impl",1041);var Zu=ks(pf,d5t),o9=ks(pf,"EValidator/PatternMatcher"),_Pe,APe,Vn,M2,O4,Jb,$_t,z_t,q_t,Zb,D2,em,E3,td,H_t,V_t,Kf,I2,U_t,O2,N4,o7,No,G_t,K_t,T3,CY=ks(us,"FeatureMap/Entry");D(545,1,{76:1},Sq),h.Lk=function(){return this.a},h.md=function(){return this.b},I(Gn,"BasicEObjectImpl/1",545),D(1040,1,i0e,Itt),h.Fk=function(t){return Moe(this.a,this.b,t)},h.Qj=function(){return got(this.a,this.b)},h.Wb=function(t){q5e(this.a,this.b,t)},h.Gk=function(){Hgn(this.a,this.b)},I(Gn,"BasicEObjectImpl/4",1040),D(2081,1,{114:1}),h.Mk=function(t){this.e=t==0?W_t:We(wa,Rn,1,t,5,1)},h.li=function(t){return this.e[t]},h.mi=function(t,n){this.e[t]=n},h.ni=function(t){this.e[t]=null},h.Nk=function(){return this.c},h.Ok=function(){throw ue(new Qr)},h.Pk=function(){throw ue(new Qr)},h.Qk=function(){return this.d},h.Rk=function(){return this.e!=null},h.Sk=function(t){this.c=t},h.Tk=function(t){throw ue(new Qr)},h.Uk=function(t){throw ue(new Qr)},h.Vk=function(t){this.d=t};var W_t;I(Gn,"BasicEObjectImpl/EPropertiesHolderBaseImpl",2081),D(192,2081,{114:1},Sf),h.Ok=function(){return this.a},h.Pk=function(){return this.b},h.Tk=function(t){this.a=t},h.Uk=function(t){this.b=t},I(Gn,"BasicEObjectImpl/EPropertiesHolderImpl",192),D(516,99,g4t,m5),h.uh=function(){return this.f},h.zh=function(){return this.k},h.Bh=function(t,n){this.g=t,this.i=n},h.Dh=function(){return this.j&2?this.$h().Nk():this.ii()},h.Fh=function(){return this.i},h.wh=function(){return(this.j&1)!=0},h.Ph=function(){return this.g},h.Vh=function(){return(this.j&4)!=0},h.$h=function(){return!this.k&&(this.k=new Sf),this.k},h.ci=function(t){this.$h().Sk(t),t?this.j|=2:this.j&=-3},h.ei=function(t){this.$h().Uk(t),t?this.j|=4:this.j&=-5},h.ii=function(){return(lb(),Vn).S},h.i=0,h.j=1,I(Gn,"EObjectImpl",516),D(798,516,{110:1,94:1,93:1,58:1,114:1,54:1,99:1},F4e),h.li=function(t){return this.e[t]},h.mi=function(t,n){this.e[t]=n},h.ni=function(t){this.e[t]=null},h.Dh=function(){return this.d},h.Ih=function(t){return ms(this.d,t)},h.Kh=function(){return this.d},h.Oh=function(){return this.e!=null},h.$h=function(){return!this.k&&(this.k=new _$),this.k},h.ci=function(t){this.d=t},h.hi=function(){var t;return this.e==null&&(t=yr(this.d),this.e=t==0?Y_t:We(wa,Rn,1,t,5,1)),this},h.ji=function(){return 0};var Y_t;I(Gn,"DynamicEObjectImpl",798),D(1522,798,{110:1,44:1,94:1,93:1,136:1,58:1,114:1,54:1,99:1},Git),h.Fb=function(t){return this===t},h.Hb=function(){return fw(this)},h.ci=function(t){this.d=t,this.b=oP(t,"key"),this.c=oP(t,TL)},h.Bi=function(){var t;return this.a==-1&&(t=Hoe(this,this.b),this.a=t==null?0:es(t)),this.a},h.ld=function(){return Hoe(this,this.b)},h.md=function(){return Hoe(this,this.c)},h.Ci=function(t){this.a=t},h.Di=function(t){q5e(this,this.b,t)},h.nd=function(t){var n;return n=Hoe(this,this.c),q5e(this,this.c,t),n},h.a=0,I(Gn,"DynamicEObjectImpl/BasicEMapEntry",1522),D(1523,1,{114:1},_$),h.Mk=function(t){throw ue(new Qr)},h.li=function(t){throw ue(new Qr)},h.mi=function(t,n){throw ue(new Qr)},h.ni=function(t){throw ue(new Qr)},h.Nk=function(){throw ue(new Qr)},h.Ok=function(){return this.a},h.Pk=function(){return this.b},h.Qk=function(){return this.c},h.Rk=function(){throw ue(new Qr)},h.Sk=function(t){throw ue(new Qr)},h.Tk=function(t){this.a=t},h.Uk=function(t){this.b=t},h.Vk=function(t){this.c=t},I(Gn,"DynamicEObjectImpl/DynamicEPropertiesHolderImpl",1523),D(519,158,{110:1,94:1,93:1,598:1,155:1,58:1,114:1,54:1,99:1,519:1,158:1,119:1,120:1},CI),h.Ah=function(t){return dxe(this,t)},h.Lh=function(t,n,r){var a;switch(t){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),this.Ab;case 1:return this.d;case 2:return r?(!this.b&&(this.b=new dh((Tn(),No),Yc,this)),this.b):(!this.b&&(this.b=new dh((Tn(),No),Yc,this)),iN(this.b));case 3:return wot(this);case 4:return!this.a&&(this.a=new Ys(Xb,this,4)),this.a;case 5:return!this.c&&(this.c=new $5(Xb,this,5)),this.c}return sf(this,t-yr((Tn(),M2)),Mn((a=l(Kn(this,16),29),a||M2),t),n,r)},h.Sh=function(t,n,r){var a,o,f;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),Ru(this.Ab,t,r);case 3:return this.Cb&&(r=(o=this.Db>>16,o>=0?dxe(this,r):this.Cb.Th(this,-1-o,null,r))),Z4e(this,l(t,155),r)}return f=l(Mn((a=l(Kn(this,16),29),a||(Tn(),M2)),n),69),f.wk().zk(this,Ku(this),n-yr((Tn(),M2)),t,r)},h.Uh=function(t,n,r){var a,o;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),To(this.Ab,t,r);case 2:return!this.b&&(this.b=new dh((Tn(),No),Yc,this)),Uq(this.b,t,r);case 3:return Z4e(this,null,r);case 4:return!this.a&&(this.a=new Ys(Xb,this,4)),To(this.a,t,r)}return o=l(Mn((a=l(Kn(this,16),29),a||(Tn(),M2)),n),69),o.wk().Ak(this,Ku(this),n-yr((Tn(),M2)),t,r)},h.Wh=function(t){var n;switch(t){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.d!=null;case 2:return!!this.b&&this.b.f!=0;case 3:return!!wot(this);case 4:return!!this.a&&this.a.i!=0;case 5:return!!this.c&&this.c.i!=0}return nf(this,t-yr((Tn(),M2)),Mn((n=l(Kn(this,16),29),n||M2),t))},h.bi=function(t,n){var r;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab),!this.Ab&&(this.Ab=new nt(mi,this,0,3)),As(this.Ab,l(n,16));return;case 1:Odn(this,ei(n));return;case 2:!this.b&&(this.b=new dh((Tn(),No),Yc,this)),_V(this.b,n);return;case 3:ibt(this,l(n,155));return;case 4:!this.a&&(this.a=new Ys(Xb,this,4)),$r(this.a),!this.a&&(this.a=new Ys(Xb,this,4)),As(this.a,l(n,16));return;case 5:!this.c&&(this.c=new $5(Xb,this,5)),$r(this.c),!this.c&&(this.c=new $5(Xb,this,5)),As(this.c,l(n,16));return}uf(this,t-yr((Tn(),M2)),Mn((r=l(Kn(this,16),29),r||M2),t),n)},h.ii=function(){return Tn(),M2},h.ki=function(t){var n;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab);return;case 1:g7e(this,null);return;case 2:!this.b&&(this.b=new dh((Tn(),No),Yc,this)),this.b.c.$b();return;case 3:ibt(this,null);return;case 4:!this.a&&(this.a=new Ys(Xb,this,4)),$r(this.a);return;case 5:!this.c&&(this.c=new $5(Xb,this,5)),$r(this.c);return}cf(this,t-yr((Tn(),M2)),Mn((n=l(Kn(this,16),29),n||M2),t))},h.Ib=function(){return c1t(this)},h.d=null,I(Gn,"EAnnotationImpl",519),D(141,721,ASe,xl),h.Gi=function(t,n){Qln(this,t,l(n,44))},h.Wk=function(t,n){return Zfn(this,l(t,44),n)},h.$i=function(t){return l(l(this.c,71).$i(t),136)},h.Ii=function(){return l(this.c,71).Ii()},h.Ji=function(){return l(this.c,71).Ji()},h.Ki=function(t){return l(this.c,71).Ki(t)},h.Xk=function(t,n){return Uq(this,t,n)},h.Fk=function(t){return l(this.c,79).Fk(t)},h.ak=function(){},h.Qj=function(){return l(this.c,79).Qj()},h.ck=function(t,n,r){var a;return a=l(Ah(this.b).wi().si(this.b),136),a.Ci(t),a.Di(n),a.nd(r),a},h.dk=function(){return new kwe(this)},h.Wb=function(t){_V(this,t)},h.Gk=function(){l(this.c,79).Gk()},I(us,"EcoreEMap",141),D(165,141,ASe,dh),h._j=function(){var t,n,r,a,o,f;if(this.d==null){for(f=We(vPe,_Se,66,2*this.f+1,0,1),r=this.c.Kc();r.e!=r.i.gc();)n=l(r.Yj(),136),a=n.Bi(),o=(a&Ii)%f.length,t=f[o],!t&&(t=f[o]=new kwe(this)),t.Fc(n);this.d=f}},I(Gn,"EAnnotationImpl/1",165),D(292,448,{110:1,94:1,93:1,155:1,197:1,58:1,114:1,481:1,54:1,99:1,158:1,292:1,119:1,120:1}),h.Lh=function(t,n,r){var a,o;switch(t){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Hn(),!!(this.Bb&256);case 3:return Hn(),!!(this.Bb&512);case 4:return pt(this.s);case 5:return pt(this.t);case 6:return Hn(),!!this.Jk();case 7:return Hn(),o=this.s,o>=1;case 8:return n?Of(this):this.r;case 9:return this.q}return sf(this,t-yr(this.ii()),Mn((a=l(Kn(this,16),29),a||this.ii()),t),n,r)},h.Uh=function(t,n,r){var a,o;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),To(this.Ab,t,r);case 9:return qae(this,r)}return o=l(Mn((a=l(Kn(this,16),29),a||this.ii()),n),69),o.wk().Ak(this,Ku(this),n-yr(this.ii()),t,r)},h.Wh=function(t){var n,r;switch(t){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return this.Jk();case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&yw(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&yw(this.q).i==0)}return nf(this,t-yr(this.ii()),Mn((n=l(Kn(this,16),29),n||this.ii()),t))},h.bi=function(t,n){var r,a;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab),!this.Ab&&(this.Ab=new nt(mi,this,0,3)),As(this.Ab,l(n,16));return;case 1:this.ui(ei(n));return;case 2:c2(this,Rt(Bt(n)));return;case 3:u2(this,Rt(Bt(n)));return;case 4:i2(this,l(n,17).a);return;case 5:this.Zk(l(n,17).a);return;case 8:Gm(this,l(n,142));return;case 9:a=$1(this,l(n,89),null),a&&a.oj();return}uf(this,t-yr(this.ii()),Mn((r=l(Kn(this,16),29),r||this.ii()),t),n)},h.ii=function(){return Tn(),K_t},h.ki=function(t){var n,r;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab);return;case 1:this.ui(null);return;case 2:c2(this,!0);return;case 3:u2(this,!0);return;case 4:i2(this,0);return;case 5:this.Zk(1);return;case 8:Gm(this,null);return;case 9:r=$1(this,null,null),r&&r.oj();return}cf(this,t-yr(this.ii()),Mn((n=l(Kn(this,16),29),n||this.ii()),t))},h.pi=function(){Of(this),this.Bb|=1},h.Hk=function(){return Of(this)},h.Ik=function(){return this.t},h.Jk=function(){var t;return t=this.t,t>1||t==-1},h.Si=function(){return(this.Bb&512)!=0},h.Yk=function(t,n){return o8e(this,t,n)},h.Zk=function(t){My(this,t)},h.Ib=function(){return T9e(this)},h.s=0,h.t=1,I(Gn,"ETypedElementImpl",292),D(462,292,{110:1,94:1,93:1,155:1,197:1,58:1,179:1,69:1,114:1,481:1,54:1,99:1,158:1,462:1,292:1,119:1,120:1,692:1}),h.Ah=function(t){return Qdt(this,t)},h.Lh=function(t,n,r){var a,o;switch(t){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Hn(),!!(this.Bb&256);case 3:return Hn(),!!(this.Bb&512);case 4:return pt(this.s);case 5:return pt(this.t);case 6:return Hn(),!!this.Jk();case 7:return Hn(),o=this.s,o>=1;case 8:return n?Of(this):this.r;case 9:return this.q;case 10:return Hn(),!!(this.Bb&m0);case 11:return Hn(),!!(this.Bb&r4);case 12:return Hn(),!!(this.Bb&Xy);case 13:return this.j;case 14:return UE(this);case 15:return Hn(),!!(this.Bb&Sl);case 16:return Hn(),!!(this.Bb&_d);case 17:return ky(this)}return sf(this,t-yr(this.ii()),Mn((a=l(Kn(this,16),29),a||this.ii()),t),n,r)},h.Sh=function(t,n,r){var a,o,f;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),Ru(this.Ab,t,r);case 17:return this.Cb&&(r=(o=this.Db>>16,o>=0?Qdt(this,r):this.Cb.Th(this,-1-o,null,r))),Nh(this,t,17,r)}return f=l(Mn((a=l(Kn(this,16),29),a||this.ii()),n),69),f.wk().zk(this,Ku(this),n-yr(this.ii()),t,r)},h.Uh=function(t,n,r){var a,o;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),To(this.Ab,t,r);case 9:return qae(this,r);case 17:return Nh(this,null,17,r)}return o=l(Mn((a=l(Kn(this,16),29),a||this.ii()),n),69),o.wk().Ak(this,Ku(this),n-yr(this.ii()),t,r)},h.Wh=function(t){var n,r;switch(t){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return this.Jk();case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&yw(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&yw(this.q).i==0);case 10:return(this.Bb&m0)==0;case 11:return(this.Bb&r4)!=0;case 12:return(this.Bb&Xy)!=0;case 13:return this.j!=null;case 14:return UE(this)!=null;case 15:return(this.Bb&Sl)!=0;case 16:return(this.Bb&_d)!=0;case 17:return!!ky(this)}return nf(this,t-yr(this.ii()),Mn((n=l(Kn(this,16),29),n||this.ii()),t))},h.bi=function(t,n){var r,a;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab),!this.Ab&&(this.Ab=new nt(mi,this,0,3)),As(this.Ab,l(n,16));return;case 1:poe(this,ei(n));return;case 2:c2(this,Rt(Bt(n)));return;case 3:u2(this,Rt(Bt(n)));return;case 4:i2(this,l(n,17).a);return;case 5:this.Zk(l(n,17).a);return;case 8:Gm(this,l(n,142));return;case 9:a=$1(this,l(n,89),null),a&&a.oj();return;case 10:AE(this,Rt(Bt(n)));return;case 11:DE(this,Rt(Bt(n)));return;case 12:LE(this,Rt(Bt(n)));return;case 13:Z3e(this,ei(n));return;case 15:ME(this,Rt(Bt(n)));return;case 16:IE(this,Rt(Bt(n)));return}uf(this,t-yr(this.ii()),Mn((r=l(Kn(this,16),29),r||this.ii()),t),n)},h.ii=function(){return Tn(),G_t},h.ki=function(t){var n,r;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab);return;case 1:De(this.Cb,90)&&zy(Yl(l(this.Cb,90)),4),Fu(this,null);return;case 2:c2(this,!0);return;case 3:u2(this,!0);return;case 4:i2(this,0);return;case 5:this.Zk(1);return;case 8:Gm(this,null);return;case 9:r=$1(this,null,null),r&&r.oj();return;case 10:AE(this,!0);return;case 11:DE(this,!1);return;case 12:LE(this,!1);return;case 13:this.i=null,xV(this,null);return;case 15:ME(this,!1);return;case 16:IE(this,!1);return}cf(this,t-yr(this.ii()),Mn((n=l(Kn(this,16),29),n||this.ii()),t))},h.pi=function(){Wk(ic((El(),io),this)),Of(this),this.Bb|=1},h.pk=function(){return this.f},h.ik=function(){return UE(this)},h.qk=function(){return ky(this)},h.uk=function(){return null},h.$k=function(){return this.k},h.Lj=function(){return this.n},h.vk=function(){return pU(this)},h.wk=function(){var t,n,r,a,o,f,g,w,E;return this.p||(r=ky(this),(r.i==null&&Sd(r),r.i).length,a=this.uk(),a&&yr(ky(a)),o=Of(this),g=o.kk(),t=g?g.i&1?g==ih?Ns:g==Vr?ro:g==B4?_T:g==Na?ta:g==nm?r3:g==h7?i3:g==Al?jx:PL:g:null,n=UE(this),w=o.ik(),K4n(this),this.Bb&_d&&((f=yxe((El(),io),r))&&f!=this||(f=rx(ic(io,this))))?this.p=new Ntt(this,f):this.Jk()?this.al()?a?this.Bb&Sl?t?this.bl()?this.p=new Om(47,t,this,a):this.p=new Om(5,t,this,a):this.bl()?this.p=new Rm(46,this,a):this.p=new Rm(4,this,a):t?this.bl()?this.p=new Om(49,t,this,a):this.p=new Om(7,t,this,a):this.bl()?this.p=new Rm(48,this,a):this.p=new Rm(6,this,a):this.Bb&Sl?t?t==uv?this.p=new Xp(50,A_t,this):this.bl()?this.p=new Xp(43,t,this):this.p=new Xp(1,t,this):this.bl()?this.p=new Jp(42,this):this.p=new Jp(0,this):t?t==uv?this.p=new Xp(41,A_t,this):this.bl()?this.p=new Xp(45,t,this):this.p=new Xp(3,t,this):this.bl()?this.p=new Jp(44,this):this.p=new Jp(2,this):De(o,156)?t==CY?this.p=new Jp(40,this):this.Bb&512?this.Bb&Sl?t?this.p=new Xp(9,t,this):this.p=new Jp(8,this):t?this.p=new Xp(11,t,this):this.p=new Jp(10,this):this.Bb&Sl?t?this.p=new Xp(13,t,this):this.p=new Jp(12,this):t?this.p=new Xp(15,t,this):this.p=new Jp(14,this):a?(E=a.t,E>1||E==-1?this.bl()?this.Bb&Sl?t?this.p=new Om(25,t,this,a):this.p=new Rm(24,this,a):t?this.p=new Om(27,t,this,a):this.p=new Rm(26,this,a):this.Bb&Sl?t?this.p=new Om(29,t,this,a):this.p=new Rm(28,this,a):t?this.p=new Om(31,t,this,a):this.p=new Rm(30,this,a):this.bl()?this.Bb&Sl?t?this.p=new Om(33,t,this,a):this.p=new Rm(32,this,a):t?this.p=new Om(35,t,this,a):this.p=new Rm(34,this,a):this.Bb&Sl?t?this.p=new Om(37,t,this,a):this.p=new Rm(36,this,a):t?this.p=new Om(39,t,this,a):this.p=new Rm(38,this,a)):this.bl()?this.Bb&Sl?t?this.p=new Xp(17,t,this):this.p=new Jp(16,this):t?this.p=new Xp(19,t,this):this.p=new Jp(18,this):this.Bb&Sl?t?this.p=new Xp(21,t,this):this.p=new Jp(20,this):t?this.p=new Xp(23,t,this):this.p=new Jp(22,this):this._k()?this.bl()?this.p=new kit(l(o,29),this,a):this.p=new $5e(l(o,29),this,a):De(o,156)?t==CY?this.p=new Jp(40,this):this.Bb&Sl?t?this.p=new xst(n,w,this,(Wce(),g==Vr?PPe:g==ih?MPe:g==nm?BPe:g==B4?NPe:g==Na?OPe:g==h7?FPe:g==Al?DPe:g==kf?IPe:ipe)):this.p=new Nat(l(o,156),n,w,this):t?this.p=new yst(n,w,this,(Wce(),g==Vr?PPe:g==ih?MPe:g==nm?BPe:g==B4?NPe:g==Na?OPe:g==h7?FPe:g==Al?DPe:g==kf?IPe:ipe)):this.p=new Oat(l(o,156),n,w,this):this.al()?a?this.Bb&Sl?this.bl()?this.p=new Tit(l(o,29),this,a):this.p=new C4e(l(o,29),this,a):this.bl()?this.p=new Eit(l(o,29),this,a):this.p=new yae(l(o,29),this,a):this.Bb&Sl?this.bl()?this.p=new yrt(l(o,29),this):this.p=new jye(l(o,29),this):this.bl()?this.p=new wrt(l(o,29),this):this.p=new oae(l(o,29),this):this.bl()?a?this.Bb&Sl?this.p=new Cit(l(o,29),this,a):this.p=new E4e(l(o,29),this,a):this.Bb&Sl?this.p=new xrt(l(o,29),this):this.p=new $ye(l(o,29),this):a?this.Bb&Sl?this.p=new Sit(l(o,29),this,a):this.p=new T4e(l(o,29),this,a):this.Bb&Sl?this.p=new krt(l(o,29),this):this.p=new cH(l(o,29),this)),this.p},h.rk=function(){return(this.Bb&m0)!=0},h._k=function(){return!1},h.al=function(){return!1},h.sk=function(){return(this.Bb&_d)!=0},h.xk=function(){return Voe(this)},h.bl=function(){return!1},h.tk=function(){return(this.Bb&Sl)!=0},h.cl=function(t){this.k=t},h.ui=function(t){poe(this,t)},h.Ib=function(){return BU(this)},h.e=!1,h.n=0,I(Gn,"EStructuralFeatureImpl",462),D(331,462,{110:1,94:1,93:1,35:1,155:1,197:1,58:1,179:1,69:1,114:1,481:1,54:1,99:1,331:1,158:1,462:1,292:1,119:1,120:1,692:1},zie),h.Lh=function(t,n,r){var a,o;switch(t){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Hn(),!!(this.Bb&256);case 3:return Hn(),!!(this.Bb&512);case 4:return pt(this.s);case 5:return pt(this.t);case 6:return Hn(),!!v9e(this);case 7:return Hn(),o=this.s,o>=1;case 8:return n?Of(this):this.r;case 9:return this.q;case 10:return Hn(),!!(this.Bb&m0);case 11:return Hn(),!!(this.Bb&r4);case 12:return Hn(),!!(this.Bb&Xy);case 13:return this.j;case 14:return UE(this);case 15:return Hn(),!!(this.Bb&Sl);case 16:return Hn(),!!(this.Bb&_d);case 17:return ky(this);case 18:return Hn(),!!(this.Bb&eu);case 19:return n?gce(this):Fut(this)}return sf(this,t-yr((Tn(),O4)),Mn((a=l(Kn(this,16),29),a||O4),t),n,r)},h.Wh=function(t){var n,r;switch(t){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return v9e(this);case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&yw(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&yw(this.q).i==0);case 10:return(this.Bb&m0)==0;case 11:return(this.Bb&r4)!=0;case 12:return(this.Bb&Xy)!=0;case 13:return this.j!=null;case 14:return UE(this)!=null;case 15:return(this.Bb&Sl)!=0;case 16:return(this.Bb&_d)!=0;case 17:return!!ky(this);case 18:return(this.Bb&eu)!=0;case 19:return!!Fut(this)}return nf(this,t-yr((Tn(),O4)),Mn((n=l(Kn(this,16),29),n||O4),t))},h.bi=function(t,n){var r,a;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab),!this.Ab&&(this.Ab=new nt(mi,this,0,3)),As(this.Ab,l(n,16));return;case 1:poe(this,ei(n));return;case 2:c2(this,Rt(Bt(n)));return;case 3:u2(this,Rt(Bt(n)));return;case 4:i2(this,l(n,17).a);return;case 5:JJe(this,l(n,17).a);return;case 8:Gm(this,l(n,142));return;case 9:a=$1(this,l(n,89),null),a&&a.oj();return;case 10:AE(this,Rt(Bt(n)));return;case 11:DE(this,Rt(Bt(n)));return;case 12:LE(this,Rt(Bt(n)));return;case 13:Z3e(this,ei(n));return;case 15:ME(this,Rt(Bt(n)));return;case 16:IE(this,Rt(Bt(n)));return;case 18:$ce(this,Rt(Bt(n)));return}uf(this,t-yr((Tn(),O4)),Mn((r=l(Kn(this,16),29),r||O4),t),n)},h.ii=function(){return Tn(),O4},h.ki=function(t){var n,r;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab);return;case 1:De(this.Cb,90)&&zy(Yl(l(this.Cb,90)),4),Fu(this,null);return;case 2:c2(this,!0);return;case 3:u2(this,!0);return;case 4:i2(this,0);return;case 5:this.b=0,My(this,1);return;case 8:Gm(this,null);return;case 9:r=$1(this,null,null),r&&r.oj();return;case 10:AE(this,!0);return;case 11:DE(this,!1);return;case 12:LE(this,!1);return;case 13:this.i=null,xV(this,null);return;case 15:ME(this,!1);return;case 16:IE(this,!1);return;case 18:$ce(this,!1);return}cf(this,t-yr((Tn(),O4)),Mn((n=l(Kn(this,16),29),n||O4),t))},h.pi=function(){gce(this),Wk(ic((El(),io),this)),Of(this),this.Bb|=1},h.Jk=function(){return v9e(this)},h.Yk=function(t,n){return this.b=0,this.a=null,o8e(this,t,n)},h.Zk=function(t){JJe(this,t)},h.Ib=function(){var t;return this.Db&64?BU(this):(t=new Af(BU(this)),t.a+=" (iD: ",Gp(t,(this.Bb&eu)!=0),t.a+=")",t.a)},h.b=0,I(Gn,"EAttributeImpl",331),D(364,448,{110:1,94:1,93:1,142:1,155:1,197:1,58:1,114:1,54:1,99:1,364:1,158:1,119:1,120:1,691:1}),h.dl=function(t){return t.Dh()==this},h.Ah=function(t){return wue(this,t)},h.Bh=function(t,n){this.w=null,this.Db=n<<16|this.Db&255,this.Cb=t},h.Lh=function(t,n,r){var a;switch(t){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return zw(this);case 4:return this.ik();case 5:return this.F;case 6:return n?Ah(this):Qk(this);case 7:return!this.A&&(this.A=new ml(Zu,this,7)),this.A}return sf(this,t-yr(this.ii()),Mn((a=l(Kn(this,16),29),a||this.ii()),t),n,r)},h.Sh=function(t,n,r){var a,o,f;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),Ru(this.Ab,t,r);case 6:return this.Cb&&(r=(o=this.Db>>16,o>=0?wue(this,r):this.Cb.Th(this,-1-o,null,r))),Nh(this,t,6,r)}return f=l(Mn((a=l(Kn(this,16),29),a||this.ii()),n),69),f.wk().zk(this,Ku(this),n-yr(this.ii()),t,r)},h.Uh=function(t,n,r){var a,o;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),To(this.Ab,t,r);case 6:return Nh(this,null,6,r);case 7:return!this.A&&(this.A=new ml(Zu,this,7)),To(this.A,t,r)}return o=l(Mn((a=l(Kn(this,16),29),a||this.ii()),n),69),o.wk().Ak(this,Ku(this),n-yr(this.ii()),t,r)},h.Wh=function(t){var n;switch(t){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return!!zw(this);case 4:return this.ik()!=null;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return!!Qk(this);case 7:return!!this.A&&this.A.i!=0}return nf(this,t-yr(this.ii()),Mn((n=l(Kn(this,16),29),n||this.ii()),t))},h.bi=function(t,n){var r;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab),!this.Ab&&(this.Ab=new nt(mi,this,0,3)),As(this.Ab,l(n,16));return;case 1:FH(this,ei(n));return;case 2:Kse(this,ei(n));return;case 5:JE(this,ei(n));return;case 7:!this.A&&(this.A=new ml(Zu,this,7)),$r(this.A),!this.A&&(this.A=new ml(Zu,this,7)),As(this.A,l(n,16));return}uf(this,t-yr(this.ii()),Mn((r=l(Kn(this,16),29),r||this.ii()),t),n)},h.ii=function(){return Tn(),$_t},h.ki=function(t){var n;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab);return;case 1:De(this.Cb,184)&&(l(this.Cb,184).tb=null),Fu(this,null);return;case 2:CE(this,null),lE(this,this.D);return;case 5:JE(this,null);return;case 7:!this.A&&(this.A=new ml(Zu,this,7)),$r(this.A);return}cf(this,t-yr(this.ii()),Mn((n=l(Kn(this,16),29),n||this.ii()),t))},h.hk=function(){var t;return this.G==-1&&(this.G=(t=Ah(this),t?f2(t.vi(),this):-1)),this.G},h.ik=function(){return null},h.jk=function(){return Ah(this)},h.el=function(){return this.v},h.kk=function(){return zw(this)},h.lk=function(){return this.D!=null?this.D:this.B},h.mk=function(){return this.F},h.fk=function(t){return ule(this,t)},h.fl=function(t){this.v=t},h.gl=function(t){xft(this,t)},h.hl=function(t){this.C=t},h.ui=function(t){FH(this,t)},h.Ib=function(){return UV(this)},h.C=null,h.D=null,h.G=-1,I(Gn,"EClassifierImpl",364),D(90,364,{110:1,94:1,93:1,29:1,142:1,155:1,197:1,58:1,114:1,54:1,99:1,90:1,364:1,158:1,482:1,119:1,120:1,691:1},hz),h.dl=function(t){return Bfn(this,t.Dh())},h.Lh=function(t,n,r){var a;switch(t){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),this.Ab;case 1:return this.zb;case 2:return this.D!=null?this.D:this.B;case 3:return zw(this);case 4:return null;case 5:return this.F;case 6:return n?Ah(this):Qk(this);case 7:return!this.A&&(this.A=new ml(Zu,this,7)),this.A;case 8:return Hn(),!!(this.Bb&256);case 9:return Hn(),!!(this.Bb&512);case 10:return dc(this);case 11:return!this.q&&(this.q=new nt(Uf,this,11,10)),this.q;case 12:return d6(this);case 13:return JA(this);case 14:return JA(this),this.r;case 15:return d6(this),this.k;case 16:return o9e(this);case 17:return dle(this);case 18:return Sd(this);case 19:return _U(this);case 20:return d6(this),this.o;case 21:return!this.s&&(this.s=new nt(dl,this,21,17)),this.s;case 22:return du(this);case 23:return Zue(this)}return sf(this,t-yr((Tn(),Jb)),Mn((a=l(Kn(this,16),29),a||Jb),t),n,r)},h.Sh=function(t,n,r){var a,o,f;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),Ru(this.Ab,t,r);case 6:return this.Cb&&(r=(o=this.Db>>16,o>=0?wue(this,r):this.Cb.Th(this,-1-o,null,r))),Nh(this,t,6,r);case 11:return!this.q&&(this.q=new nt(Uf,this,11,10)),Ru(this.q,t,r);case 21:return!this.s&&(this.s=new nt(dl,this,21,17)),Ru(this.s,t,r)}return f=l(Mn((a=l(Kn(this,16),29),a||(Tn(),Jb)),n),69),f.wk().zk(this,Ku(this),n-yr((Tn(),Jb)),t,r)},h.Uh=function(t,n,r){var a,o;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),To(this.Ab,t,r);case 6:return Nh(this,null,6,r);case 7:return!this.A&&(this.A=new ml(Zu,this,7)),To(this.A,t,r);case 11:return!this.q&&(this.q=new nt(Uf,this,11,10)),To(this.q,t,r);case 21:return!this.s&&(this.s=new nt(dl,this,21,17)),To(this.s,t,r);case 22:return To(du(this),t,r)}return o=l(Mn((a=l(Kn(this,16),29),a||(Tn(),Jb)),n),69),o.wk().Ak(this,Ku(this),n-yr((Tn(),Jb)),t,r)},h.Wh=function(t){var n;switch(t){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return!!zw(this);case 4:return!1;case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return!!Qk(this);case 7:return!!this.A&&this.A.i!=0;case 8:return(this.Bb&256)!=0;case 9:return(this.Bb&512)!=0;case 10:return!!this.u&&du(this.u.a).i!=0&&!(this.n&&cue(this.n));case 11:return!!this.q&&this.q.i!=0;case 12:return d6(this).i!=0;case 13:return JA(this).i!=0;case 14:return JA(this),this.r.i!=0;case 15:return d6(this),this.k.i!=0;case 16:return o9e(this).i!=0;case 17:return dle(this).i!=0;case 18:return Sd(this).i!=0;case 19:return _U(this).i!=0;case 20:return d6(this),!!this.o;case 21:return!!this.s&&this.s.i!=0;case 22:return!!this.n&&cue(this.n);case 23:return Zue(this).i!=0}return nf(this,t-yr((Tn(),Jb)),Mn((n=l(Kn(this,16),29),n||Jb),t))},h.Zh=function(t){var n;return n=this.i==null||this.q&&this.q.i!=0?null:oP(this,t),n||Hke(this,t)},h.bi=function(t,n){var r;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab),!this.Ab&&(this.Ab=new nt(mi,this,0,3)),As(this.Ab,l(n,16));return;case 1:FH(this,ei(n));return;case 2:Kse(this,ei(n));return;case 5:JE(this,ei(n));return;case 7:!this.A&&(this.A=new ml(Zu,this,7)),$r(this.A),!this.A&&(this.A=new ml(Zu,this,7)),As(this.A,l(n,16));return;case 8:c8e(this,Rt(Bt(n)));return;case 9:u8e(this,Rt(Bt(n)));return;case 10:tL(dc(this)),As(dc(this),l(n,16));return;case 11:!this.q&&(this.q=new nt(Uf,this,11,10)),$r(this.q),!this.q&&(this.q=new nt(Uf,this,11,10)),As(this.q,l(n,16));return;case 21:!this.s&&(this.s=new nt(dl,this,21,17)),$r(this.s),!this.s&&(this.s=new nt(dl,this,21,17)),As(this.s,l(n,16));return;case 22:$r(du(this)),As(du(this),l(n,16));return}uf(this,t-yr((Tn(),Jb)),Mn((r=l(Kn(this,16),29),r||Jb),t),n)},h.ii=function(){return Tn(),Jb},h.ki=function(t){var n;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab);return;case 1:De(this.Cb,184)&&(l(this.Cb,184).tb=null),Fu(this,null);return;case 2:CE(this,null),lE(this,this.D);return;case 5:JE(this,null);return;case 7:!this.A&&(this.A=new ml(Zu,this,7)),$r(this.A);return;case 8:c8e(this,!1);return;case 9:u8e(this,!1);return;case 10:this.u&&tL(this.u);return;case 11:!this.q&&(this.q=new nt(Uf,this,11,10)),$r(this.q);return;case 21:!this.s&&(this.s=new nt(dl,this,21,17)),$r(this.s);return;case 22:this.n&&$r(this.n);return}cf(this,t-yr((Tn(),Jb)),Mn((n=l(Kn(this,16),29),n||Jb),t))},h.pi=function(){var t,n;if(d6(this),JA(this),o9e(this),dle(this),Sd(this),_U(this),Zue(this),uA(cdn(Yl(this))),this.s)for(t=0,n=this.s.i;t=0;--n)Oe(this,n);return O8e(this,t)},h.Gk=function(){$r(this)},h.Zi=function(t,n){return Hht(this,t,n)},I(us,"EcoreEList",632),D(505,632,kc,FO),h.Li=function(){return!1},h.Lj=function(){return this.c},h.Mj=function(){return!1},h.ol=function(){return!0},h.Si=function(){return!0},h.Wi=function(t,n){return n},h.Yi=function(){return!1},h.c=0,I(us,"EObjectEList",505),D(83,505,kc,Ys),h.Mj=function(){return!0},h.ml=function(){return!1},h.al=function(){return!0},I(us,"EObjectContainmentEList",83),D(555,83,kc,Bq),h.Ni=function(){this.b=!0},h.Qj=function(){return this.b},h.Gk=function(){var t;$r(this),hh(this.e)?(t=this.b,this.b=!1,Ni(this.e,new h0(this.e,2,this.c,t,!1))):this.b=!1},h.b=!1,I(us,"EObjectContainmentEList/Unsettable",555),D(1161,555,kc,vst),h.Ti=function(t,n){var r,a;return r=l(AA(this,t,n),89),hh(this.e)&&xk(this,new sN(this.a,7,(Tn(),z_t),pt(n),(a=r.c,De(a,90)?l(a,29):Kf),t)),r},h.Uj=function(t,n){return L5n(this,l(t,89),n)},h.Vj=function(t,n){return A5n(this,l(t,89),n)},h.Wj=function(t,n,r){return I8n(this,l(t,89),l(n,89),r)},h.Ij=function(t,n,r,a,o){switch(t){case 3:return rA(this,t,n,r,a,this.i>1);case 5:return rA(this,t,n,r,a,this.i-l(r,15).gc()>0);default:return new Zg(this.e,t,this.c,n,r,a,!0)}},h.Tj=function(){return!0},h.Qj=function(){return cue(this)},h.Gk=function(){$r(this)},I(Gn,"EClassImpl/1",1161),D(1175,1174,SSe),h.dj=function(t){var n,r,a,o,f,g,w;if(r=t.gj(),r!=8){if(a=l6n(t),a==0)switch(r){case 1:case 9:{w=t.kj(),w!=null&&(n=Yl(l(w,482)),!n.c&&(n.c=new Xd),sV(n.c,t.jj())),g=t.ij(),g!=null&&(o=l(g,482),o.Bb&1||(n=Yl(o),!n.c&&(n.c=new Xd),qr(n.c,l(t.jj(),29))));break}case 3:{g=t.ij(),g!=null&&(o=l(g,482),o.Bb&1||(n=Yl(o),!n.c&&(n.c=new Xd),qr(n.c,l(t.jj(),29))));break}case 5:{if(g=t.ij(),g!=null)for(f=l(g,16).Kc();f.Ob();)o=l(f.Pb(),482),o.Bb&1||(n=Yl(o),!n.c&&(n.c=new Xd),qr(n.c,l(t.jj(),29)));break}case 4:{w=t.kj(),w!=null&&(o=l(w,482),o.Bb&1||(n=Yl(o),!n.c&&(n.c=new Xd),sV(n.c,t.jj())));break}case 6:{if(w=t.kj(),w!=null)for(f=l(w,16).Kc();f.Ob();)o=l(f.Pb(),482),o.Bb&1||(n=Yl(o),!n.c&&(n.c=new Xd),sV(n.c,t.jj()));break}}this.ql(a)}},h.ql=function(t){Vbt(this,t)},h.b=63,I(Gn,"ESuperAdapter",1175),D(1176,1175,SSe,bQe),h.ql=function(t){zy(this,t)},I(Gn,"EClassImpl/10",1176),D(1165,710,kc),h.Ei=function(t,n){return Due(this,t,n)},h.Fi=function(t){return Odt(this,t)},h.Gi=function(t,n){IN(this,t,n)},h.Hi=function(t){tN(this,t)},h.$i=function(t){return R6e(this,t)},h.Xi=function(t,n){return Uoe(this,t,n)},h.Wk=function(t,n){throw ue(new Qr)},h.Ii=function(){return new H8(this)},h.Ji=function(){return new CO(this)},h.Ki=function(t){return mN(this,t)},h.Xk=function(t,n){throw ue(new Qr)},h.Fk=function(t){return this},h.Qj=function(){return this.i!=0},h.Wb=function(t){throw ue(new Qr)},h.Gk=function(){throw ue(new Qr)},I(us,"EcoreEList/UnmodifiableEList",1165),D(328,1165,kc,N5),h.Yi=function(){return!1},I(us,"EcoreEList/UnmodifiableEList/FastCompare",328),D(1168,328,kc,g0t),h.dd=function(t){var n,r,a;if(De(t,179)&&(n=l(t,179),r=n.Lj(),r!=-1)){for(a=this.i;r4)if(this.fk(t)){if(this.al()){if(a=l(t,54),r=a.Eh(),w=r==this.b&&(this.ml()?a.yh(a.Fh(),l(Mn(sl(this.b),this.Lj()).Hk(),29).kk())==Ro(l(Mn(sl(this.b),this.Lj()),19)).n:-1-a.Fh()==this.Lj()),this.nl()&&!w&&!r&&a.Jh()){for(o=0;o1||a==-1)):!1},h.ml=function(){var t,n,r;return n=Mn(sl(this.b),this.Lj()),De(n,102)?(t=l(n,19),r=Ro(t),!!r):!1},h.nl=function(){var t,n;return n=Mn(sl(this.b),this.Lj()),De(n,102)?(t=l(n,19),(t.Bb&Io)!=0):!1},h.dd=function(t){var n,r,a,o;if(a=this.zj(t),a>=0)return a;if(this.ol()){for(r=0,o=this.Ej();r=0;--t)mP(this,t,this.xj(t));return this.Fj()},h.Qc=function(t){var n;if(this.nl())for(n=this.Ej()-1;n>=0;--n)mP(this,n,this.xj(n));return this.Gj(t)},h.Gk=function(){tL(this)},h.Zi=function(t,n){return ylt(this,t,n)},I(us,"DelegatingEcoreEList",756),D(1171,756,MSe,Nrt),h.qj=function(t,n){afn(this,t,l(n,29))},h.rj=function(t){Wln(this,l(t,29))},h.xj=function(t){var n,r;return n=l(Oe(du(this.a),t),89),r=n.c,De(r,90)?l(r,29):(Tn(),Kf)},h.Cj=function(t){var n,r;return n=l(Vy(du(this.a),t),89),r=n.c,De(r,90)?l(r,29):(Tn(),Kf)},h.Dj=function(t,n){return r7n(this,t,l(n,29))},h.Li=function(){return!1},h.Ij=function(t,n,r,a,o){return null},h.sj=function(){return new wQe(this)},h.tj=function(){$r(du(this.a))},h.uj=function(t){return l1t(this,t)},h.vj=function(t){var n,r;for(r=t.Kc();r.Ob();)if(n=r.Pb(),!l1t(this,n))return!1;return!0},h.wj=function(t){var n,r,a;if(De(t,15)&&(a=l(t,15),a.gc()==du(this.a).i)){for(n=a.Kc(),r=new or(this);n.Ob();)if(qe(n.Pb())!==qe(gr(r)))return!1;return!0}return!1},h.yj=function(){var t,n,r,a,o;for(r=1,n=new or(du(this.a));n.e!=n.i.gc();)t=l(gr(n),89),a=(o=t.c,De(o,90)?l(o,29):(Tn(),Kf)),r=31*r+(a?fw(a):0);return r},h.zj=function(t){var n,r,a,o;for(a=0,r=new or(du(this.a));r.e!=r.i.gc();){if(n=l(gr(r),89),qe(t)===qe((o=n.c,De(o,90)?l(o,29):(Tn(),Kf))))return a;++a}return-1},h.Aj=function(){return du(this.a).i==0},h.Bj=function(){return null},h.Ej=function(){return du(this.a).i},h.Fj=function(){var t,n,r,a,o,f;for(f=du(this.a).i,o=We(wa,Rn,1,f,5,1),r=0,n=new or(du(this.a));n.e!=n.i.gc();)t=l(gr(n),89),o[r++]=(a=t.c,De(a,90)?l(a,29):(Tn(),Kf));return o},h.Gj=function(t){var n,r,a,o,f,g,w;for(w=du(this.a).i,t.lengthw&&Ts(t,w,null),a=0,r=new or(du(this.a));r.e!=r.i.gc();)n=l(gr(r),89),f=(g=n.c,De(g,90)?l(g,29):(Tn(),Kf)),Ts(t,a++,f);return t},h.Hj=function(){var t,n,r,a,o;for(o=new Up,o.a+="[",t=du(this.a),n=0,a=du(this.a).i;n>16,o>=0?wue(this,r):this.Cb.Th(this,-1-o,null,r))),Nh(this,t,6,r);case 9:return!this.a&&(this.a=new nt(wp,this,9,5)),Ru(this.a,t,r)}return f=l(Mn((a=l(Kn(this,16),29),a||(Tn(),Zb)),n),69),f.wk().zk(this,Ku(this),n-yr((Tn(),Zb)),t,r)},h.Uh=function(t,n,r){var a,o;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),To(this.Ab,t,r);case 6:return Nh(this,null,6,r);case 7:return!this.A&&(this.A=new ml(Zu,this,7)),To(this.A,t,r);case 9:return!this.a&&(this.a=new nt(wp,this,9,5)),To(this.a,t,r)}return o=l(Mn((a=l(Kn(this,16),29),a||(Tn(),Zb)),n),69),o.wk().Ak(this,Ku(this),n-yr((Tn(),Zb)),t,r)},h.Wh=function(t){var n;switch(t){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.D!=null&&this.D==this.F;case 3:return!!zw(this);case 4:return!!X7e(this);case 5:return this.F!=null&&this.F!=this.D&&this.F!=this.B;case 6:return!!Qk(this);case 7:return!!this.A&&this.A.i!=0;case 8:return(this.Bb&256)==0;case 9:return!!this.a&&this.a.i!=0}return nf(this,t-yr((Tn(),Zb)),Mn((n=l(Kn(this,16),29),n||Zb),t))},h.bi=function(t,n){var r;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab),!this.Ab&&(this.Ab=new nt(mi,this,0,3)),As(this.Ab,l(n,16));return;case 1:FH(this,ei(n));return;case 2:Kse(this,ei(n));return;case 5:JE(this,ei(n));return;case 7:!this.A&&(this.A=new ml(Zu,this,7)),$r(this.A),!this.A&&(this.A=new ml(Zu,this,7)),As(this.A,l(n,16));return;case 8:jV(this,Rt(Bt(n)));return;case 9:!this.a&&(this.a=new nt(wp,this,9,5)),$r(this.a),!this.a&&(this.a=new nt(wp,this,9,5)),As(this.a,l(n,16));return}uf(this,t-yr((Tn(),Zb)),Mn((r=l(Kn(this,16),29),r||Zb),t),n)},h.ii=function(){return Tn(),Zb},h.ki=function(t){var n;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab);return;case 1:De(this.Cb,184)&&(l(this.Cb,184).tb=null),Fu(this,null);return;case 2:CE(this,null),lE(this,this.D);return;case 5:JE(this,null);return;case 7:!this.A&&(this.A=new ml(Zu,this,7)),$r(this.A);return;case 8:jV(this,!0);return;case 9:!this.a&&(this.a=new nt(wp,this,9,5)),$r(this.a);return}cf(this,t-yr((Tn(),Zb)),Mn((n=l(Kn(this,16),29),n||Zb),t))},h.pi=function(){var t,n;if(this.a)for(t=0,n=this.a.i;t>16==5?l(this.Cb,685):null}return sf(this,t-yr((Tn(),D2)),Mn((a=l(Kn(this,16),29),a||D2),t),n,r)},h.Sh=function(t,n,r){var a,o,f;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),Ru(this.Ab,t,r);case 5:return this.Cb&&(r=(o=this.Db>>16,o>=0?agt(this,r):this.Cb.Th(this,-1-o,null,r))),Nh(this,t,5,r)}return f=l(Mn((a=l(Kn(this,16),29),a||(Tn(),D2)),n),69),f.wk().zk(this,Ku(this),n-yr((Tn(),D2)),t,r)},h.Uh=function(t,n,r){var a,o;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),To(this.Ab,t,r);case 5:return Nh(this,null,5,r)}return o=l(Mn((a=l(Kn(this,16),29),a||(Tn(),D2)),n),69),o.wk().Ak(this,Ku(this),n-yr((Tn(),D2)),t,r)},h.Wh=function(t){var n;switch(t){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return this.d!=0;case 3:return!!this.b;case 4:return this.c!=null;case 5:return!!(this.Db>>16==5&&l(this.Cb,685))}return nf(this,t-yr((Tn(),D2)),Mn((n=l(Kn(this,16),29),n||D2),t))},h.bi=function(t,n){var r;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab),!this.Ab&&(this.Ab=new nt(mi,this,0,3)),As(this.Ab,l(n,16));return;case 1:Fu(this,ei(n));return;case 2:Qoe(this,l(n,17).a);return;case 3:r2t(this,l(n,2039));return;case 4:Zoe(this,ei(n));return}uf(this,t-yr((Tn(),D2)),Mn((r=l(Kn(this,16),29),r||D2),t),n)},h.ii=function(){return Tn(),D2},h.ki=function(t){var n;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab);return;case 1:Fu(this,null);return;case 2:Qoe(this,0);return;case 3:r2t(this,null);return;case 4:Zoe(this,null);return}cf(this,t-yr((Tn(),D2)),Mn((n=l(Kn(this,16),29),n||D2),t))},h.Ib=function(){var t;return t=this.c,t??this.zb},h.b=null,h.c=null,h.d=0,I(Gn,"EEnumLiteralImpl",582);var POn=ks(Gn,"EFactoryImpl/InternalEDateTimeFormat");D(499,1,{2114:1},KI),I(Gn,"EFactoryImpl/1ClientInternalEDateTimeFormat",499),D(248,120,{110:1,94:1,93:1,89:1,58:1,114:1,54:1,99:1,248:1,119:1,120:1},Qv),h.Ch=function(t,n,r){var a;return r=Nh(this,t,n,r),this.e&&De(t,179)&&(a=SU(this,this.e),a!=this.c&&(r=ZE(this,a,r))),r},h.Lh=function(t,n,r){var a;switch(t){case 0:return this.f;case 1:return!this.d&&(this.d=new Ys(Wo,this,1)),this.d;case 2:return n?jU(this):this.c;case 3:return this.b;case 4:return this.e;case 5:return n?hue(this):this.a}return sf(this,t-yr((Tn(),E3)),Mn((a=l(Kn(this,16),29),a||E3),t),n,r)},h.Uh=function(t,n,r){var a,o;switch(n){case 0:return Q0t(this,null,r);case 1:return!this.d&&(this.d=new Ys(Wo,this,1)),To(this.d,t,r);case 3:return J0t(this,null,r)}return o=l(Mn((a=l(Kn(this,16),29),a||(Tn(),E3)),n),69),o.wk().Ak(this,Ku(this),n-yr((Tn(),E3)),t,r)},h.Wh=function(t){var n;switch(t){case 0:return!!this.f;case 1:return!!this.d&&this.d.i!=0;case 2:return!!this.c;case 3:return!!this.b;case 4:return!!this.e;case 5:return!!this.a}return nf(this,t-yr((Tn(),E3)),Mn((n=l(Kn(this,16),29),n||E3),t))},h.bi=function(t,n){var r;switch(t){case 0:Cgt(this,l(n,89));return;case 1:!this.d&&(this.d=new Ys(Wo,this,1)),$r(this.d),!this.d&&(this.d=new Ys(Wo,this,1)),As(this.d,l(n,16));return;case 3:Axe(this,l(n,89));return;case 4:Kxe(this,l(n,850));return;case 5:sE(this,l(n,142));return}uf(this,t-yr((Tn(),E3)),Mn((r=l(Kn(this,16),29),r||E3),t),n)},h.ii=function(){return Tn(),E3},h.ki=function(t){var n;switch(t){case 0:Cgt(this,null);return;case 1:!this.d&&(this.d=new Ys(Wo,this,1)),$r(this.d);return;case 3:Axe(this,null);return;case 4:Kxe(this,null);return;case 5:sE(this,null);return}cf(this,t-yr((Tn(),E3)),Mn((n=l(Kn(this,16),29),n||E3),t))},h.Ib=function(){var t;return t=new Th(g0(this)),t.a+=" (expression: ",wle(this,t),t.a+=")",t.a};var LPe;I(Gn,"EGenericTypeImpl",248),D(2067,2062,KG),h.Gi=function(t,n){Drt(this,t,n)},h.Wk=function(t,n){return Drt(this,this.gc(),t),n},h.$i=function(t){return ff(this.pj(),t)},h.Ii=function(){return this.Ji()},h.pj=function(){return new EQe(this)},h.Ji=function(){return this.Ki(0)},h.Ki=function(t){return this.pj().fd(t)},h.Xk=function(t,n){return Ny(this,t,!0),n},h.Ti=function(t,n){var r,a;return a=kue(this,n),r=this.fd(t),r.Rb(a),a},h.Ui=function(t,n){var r;Ny(this,n,!0),r=this.fd(t),r.Rb(n)},I(us,"AbstractSequentialInternalEList",2067),D(496,2067,KG,TO),h.$i=function(t){return ff(this.pj(),t)},h.Ii=function(){return this.b==null?(Wp(),Wp(),dF):this.sl()},h.pj=function(){return new Xtt(this.a,this.b)},h.Ji=function(){return this.b==null?(Wp(),Wp(),dF):this.sl()},h.Ki=function(t){var n,r;if(this.b==null){if(t<0||t>1)throw ue(new tc(CL+t+", size=0"));return Wp(),Wp(),dF}for(r=this.sl(),n=0;n0;)if(n=this.c[--this.d],(!this.e||n.pk()!=oC||n.Lj()!=0)&&(!this.vl()||this.b.Xh(n))){if(f=this.b.Nh(n,this.ul()),this.f=(Fo(),l(n,69).xk()),this.f||n.Jk()){if(this.ul()?(a=l(f,15),this.k=a):(a=l(f,71),this.k=this.j=a),De(this.k,59)?(this.o=this.k.gc(),this.n=this.o):this.p=this.j?this.j.Ki(this.k.gc()):this.k.fd(this.k.gc()),this.p?wpt(this,this.p):Mpt(this))return o=this.p?this.p.Ub():this.j?this.j.$i(--this.n):this.k.Xb(--this.n),this.f?(t=l(o,76),t.Lk(),r=t.md(),this.i=r):(r=o,this.i=r),this.g=-3,!0}else if(f!=null)return this.k=null,this.p=null,r=f,this.i=r,this.g=-2,!0}return this.k=null,this.p=null,this.g=-1,!1}else return o=this.p?this.p.Ub():this.j?this.j.$i(--this.n):this.k.Xb(--this.n),this.f?(t=l(o,76),t.Lk(),r=t.md(),this.i=r):(r=o,this.i=r),this.g=-3,!0}},h.Pb=function(){return MV(this)},h.Tb=function(){return this.a},h.Ub=function(){var t;if(this.g<-1||this.Sb())return--this.a,this.g=0,t=this.i,this.Sb(),t;throw ue(new _c)},h.Vb=function(){return this.a-1},h.Qb=function(){throw ue(new Qr)},h.ul=function(){return!1},h.Wb=function(t){throw ue(new Qr)},h.vl=function(){return!0},h.a=0,h.d=0,h.f=!1,h.g=0,h.n=0,h.o=0;var dF;I(us,"EContentsEList/FeatureIteratorImpl",287),D(711,287,WG,Rye),h.ul=function(){return!0},I(us,"EContentsEList/ResolvingFeatureIteratorImpl",711),D(1178,711,WG,brt),h.vl=function(){return!1},I(Gn,"ENamedElementImpl/1/1",1178),D(1179,287,WG,mrt),h.vl=function(){return!1},I(Gn,"ENamedElementImpl/1/2",1179),D(39,152,YP,Cy,koe,_a,Foe,Zg,h0,Q6e,Xot,J6e,Qot,p6e,Jot,t7e,Zot,b6e,ect,Z6e,tct,X_,sN,roe,e7e,nct,m6e,rct),h.Kj=function(){return N6e(this)},h.Rj=function(){var t;return t=N6e(this),t?t.ik():null},h.hj=function(t){return this.b==-1&&this.a&&(this.b=this.c.Hh(this.a.Lj(),this.a.pk())),this.c.yh(this.b,t)},h.jj=function(){return this.c},h.Sj=function(){var t;return t=N6e(this),t?t.tk():!1},h.b=-1,I(Gn,"ENotificationImpl",39),D(411,292,{110:1,94:1,93:1,155:1,197:1,58:1,62:1,114:1,481:1,54:1,99:1,158:1,411:1,292:1,119:1,120:1},qie),h.Ah=function(t){return ugt(this,t)},h.Lh=function(t,n,r){var a,o,f;switch(t){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Hn(),!!(this.Bb&256);case 3:return Hn(),!!(this.Bb&512);case 4:return pt(this.s);case 5:return pt(this.t);case 6:return Hn(),f=this.t,f>1||f==-1;case 7:return Hn(),o=this.s,o>=1;case 8:return n?Of(this):this.r;case 9:return this.q;case 10:return this.Db>>16==10?l(this.Cb,29):null;case 11:return!this.d&&(this.d=new ml(Zu,this,11)),this.d;case 12:return!this.c&&(this.c=new nt(k3,this,12,10)),this.c;case 13:return!this.a&&(this.a=new LO(this,this)),this.a;case 14:return Xl(this)}return sf(this,t-yr((Tn(),I2)),Mn((a=l(Kn(this,16),29),a||I2),t),n,r)},h.Sh=function(t,n,r){var a,o,f;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),Ru(this.Ab,t,r);case 10:return this.Cb&&(r=(o=this.Db>>16,o>=0?ugt(this,r):this.Cb.Th(this,-1-o,null,r))),Nh(this,t,10,r);case 12:return!this.c&&(this.c=new nt(k3,this,12,10)),Ru(this.c,t,r)}return f=l(Mn((a=l(Kn(this,16),29),a||(Tn(),I2)),n),69),f.wk().zk(this,Ku(this),n-yr((Tn(),I2)),t,r)},h.Uh=function(t,n,r){var a,o;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),To(this.Ab,t,r);case 9:return qae(this,r);case 10:return Nh(this,null,10,r);case 11:return!this.d&&(this.d=new ml(Zu,this,11)),To(this.d,t,r);case 12:return!this.c&&(this.c=new nt(k3,this,12,10)),To(this.c,t,r);case 14:return To(Xl(this),t,r)}return o=l(Mn((a=l(Kn(this,16),29),a||(Tn(),I2)),n),69),o.wk().Ak(this,Ku(this),n-yr((Tn(),I2)),t,r)},h.Wh=function(t){var n,r,a;switch(t){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return a=this.t,a>1||a==-1;case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&yw(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&yw(this.q).i==0);case 10:return!!(this.Db>>16==10&&l(this.Cb,29));case 11:return!!this.d&&this.d.i!=0;case 12:return!!this.c&&this.c.i!=0;case 13:return!!this.a&&Xl(this.a.a).i!=0&&!(this.b&&uue(this.b));case 14:return!!this.b&&uue(this.b)}return nf(this,t-yr((Tn(),I2)),Mn((n=l(Kn(this,16),29),n||I2),t))},h.bi=function(t,n){var r,a;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab),!this.Ab&&(this.Ab=new nt(mi,this,0,3)),As(this.Ab,l(n,16));return;case 1:Fu(this,ei(n));return;case 2:c2(this,Rt(Bt(n)));return;case 3:u2(this,Rt(Bt(n)));return;case 4:i2(this,l(n,17).a);return;case 5:My(this,l(n,17).a);return;case 8:Gm(this,l(n,142));return;case 9:a=$1(this,l(n,89),null),a&&a.oj();return;case 11:!this.d&&(this.d=new ml(Zu,this,11)),$r(this.d),!this.d&&(this.d=new ml(Zu,this,11)),As(this.d,l(n,16));return;case 12:!this.c&&(this.c=new nt(k3,this,12,10)),$r(this.c),!this.c&&(this.c=new nt(k3,this,12,10)),As(this.c,l(n,16));return;case 13:!this.a&&(this.a=new LO(this,this)),tL(this.a),!this.a&&(this.a=new LO(this,this)),As(this.a,l(n,16));return;case 14:$r(Xl(this)),As(Xl(this),l(n,16));return}uf(this,t-yr((Tn(),I2)),Mn((r=l(Kn(this,16),29),r||I2),t),n)},h.ii=function(){return Tn(),I2},h.ki=function(t){var n,r;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab);return;case 1:Fu(this,null);return;case 2:c2(this,!0);return;case 3:u2(this,!0);return;case 4:i2(this,0);return;case 5:My(this,1);return;case 8:Gm(this,null);return;case 9:r=$1(this,null,null),r&&r.oj();return;case 11:!this.d&&(this.d=new ml(Zu,this,11)),$r(this.d);return;case 12:!this.c&&(this.c=new nt(k3,this,12,10)),$r(this.c);return;case 13:this.a&&tL(this.a);return;case 14:this.b&&$r(this.b);return}cf(this,t-yr((Tn(),I2)),Mn((n=l(Kn(this,16),29),n||I2),t))},h.pi=function(){var t,n;if(this.c)for(t=0,n=this.c.i;tw&&Ts(t,w,null),a=0,r=new or(Xl(this.a));r.e!=r.i.gc();)n=l(gr(r),89),f=(g=n.c,g||(Tn(),td)),Ts(t,a++,f);return t},h.Hj=function(){var t,n,r,a,o;for(o=new Up,o.a+="[",t=Xl(this.a),n=0,a=Xl(this.a).i;n1);case 5:return rA(this,t,n,r,a,this.i-l(r,15).gc()>0);default:return new Zg(this.e,t,this.c,n,r,a,!0)}},h.Tj=function(){return!0},h.Qj=function(){return uue(this)},h.Gk=function(){$r(this)},I(Gn,"EOperationImpl/2",1377),D(507,1,{2037:1,507:1},Ott),I(Gn,"EPackageImpl/1",507),D(14,83,kc,nt),h.il=function(){return this.d},h.jl=function(){return this.b},h.ml=function(){return!0},h.b=0,I(us,"EObjectContainmentWithInverseEList",14),D(365,14,kc,V8),h.nl=function(){return!0},h.Wi=function(t,n){return Ex(this,t,l(n,58))},I(us,"EObjectContainmentWithInverseEList/Resolving",365),D(308,365,kc,wy),h.Ni=function(){this.a.tb=null},I(Gn,"EPackageImpl/2",308),D(1278,1,{},ere),I(Gn,"EPackageImpl/3",1278),D(733,45,m6,$we),h._b=function(t){return Ia(t)?soe(this,t):!!zo(this.f,t)},I(Gn,"EPackageRegistryImpl",733),D(518,292,{110:1,94:1,93:1,155:1,197:1,58:1,2116:1,114:1,481:1,54:1,99:1,158:1,518:1,292:1,119:1,120:1},Hie),h.Ah=function(t){return lgt(this,t)},h.Lh=function(t,n,r){var a,o,f;switch(t){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Hn(),!!(this.Bb&256);case 3:return Hn(),!!(this.Bb&512);case 4:return pt(this.s);case 5:return pt(this.t);case 6:return Hn(),f=this.t,f>1||f==-1;case 7:return Hn(),o=this.s,o>=1;case 8:return n?Of(this):this.r;case 9:return this.q;case 10:return this.Db>>16==10?l(this.Cb,62):null}return sf(this,t-yr((Tn(),N4)),Mn((a=l(Kn(this,16),29),a||N4),t),n,r)},h.Sh=function(t,n,r){var a,o,f;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),Ru(this.Ab,t,r);case 10:return this.Cb&&(r=(o=this.Db>>16,o>=0?lgt(this,r):this.Cb.Th(this,-1-o,null,r))),Nh(this,t,10,r)}return f=l(Mn((a=l(Kn(this,16),29),a||(Tn(),N4)),n),69),f.wk().zk(this,Ku(this),n-yr((Tn(),N4)),t,r)},h.Uh=function(t,n,r){var a,o;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),To(this.Ab,t,r);case 9:return qae(this,r);case 10:return Nh(this,null,10,r)}return o=l(Mn((a=l(Kn(this,16),29),a||(Tn(),N4)),n),69),o.wk().Ak(this,Ku(this),n-yr((Tn(),N4)),t,r)},h.Wh=function(t){var n,r,a;switch(t){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return a=this.t,a>1||a==-1;case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&yw(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&yw(this.q).i==0);case 10:return!!(this.Db>>16==10&&l(this.Cb,62))}return nf(this,t-yr((Tn(),N4)),Mn((n=l(Kn(this,16),29),n||N4),t))},h.ii=function(){return Tn(),N4},I(Gn,"EParameterImpl",518),D(102,462,{110:1,94:1,93:1,155:1,197:1,58:1,19:1,179:1,69:1,114:1,481:1,54:1,99:1,158:1,102:1,462:1,292:1,119:1,120:1,692:1},Hye),h.Lh=function(t,n,r){var a,o,f,g;switch(t){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),this.Ab;case 1:return this.zb;case 2:return Hn(),!!(this.Bb&256);case 3:return Hn(),!!(this.Bb&512);case 4:return pt(this.s);case 5:return pt(this.t);case 6:return Hn(),g=this.t,g>1||g==-1;case 7:return Hn(),o=this.s,o>=1;case 8:return n?Of(this):this.r;case 9:return this.q;case 10:return Hn(),!!(this.Bb&m0);case 11:return Hn(),!!(this.Bb&r4);case 12:return Hn(),!!(this.Bb&Xy);case 13:return this.j;case 14:return UE(this);case 15:return Hn(),!!(this.Bb&Sl);case 16:return Hn(),!!(this.Bb&_d);case 17:return ky(this);case 18:return Hn(),!!(this.Bb&eu);case 19:return Hn(),f=Ro(this),!!(f&&f.Bb&eu);case 20:return Hn(),!!(this.Bb&Io);case 21:return n?Ro(this):this.b;case 22:return n?$7e(this):_ut(this);case 23:return!this.a&&(this.a=new $5(D4,this,23)),this.a}return sf(this,t-yr((Tn(),o7)),Mn((a=l(Kn(this,16),29),a||o7),t),n,r)},h.Wh=function(t){var n,r,a,o;switch(t){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return(this.Bb&256)==0;case 3:return(this.Bb&512)==0;case 4:return this.s!=0;case 5:return this.t!=1;case 6:return o=this.t,o>1||o==-1;case 7:return r=this.s,r>=1;case 8:return!!this.r&&!this.q.e&&yw(this.q).i==0;case 9:return!!this.q&&!(this.r&&!this.q.e&&yw(this.q).i==0);case 10:return(this.Bb&m0)==0;case 11:return(this.Bb&r4)!=0;case 12:return(this.Bb&Xy)!=0;case 13:return this.j!=null;case 14:return UE(this)!=null;case 15:return(this.Bb&Sl)!=0;case 16:return(this.Bb&_d)!=0;case 17:return!!ky(this);case 18:return(this.Bb&eu)!=0;case 19:return a=Ro(this),!!a&&(a.Bb&eu)!=0;case 20:return(this.Bb&Io)==0;case 21:return!!this.b;case 22:return!!_ut(this);case 23:return!!this.a&&this.a.i!=0}return nf(this,t-yr((Tn(),o7)),Mn((n=l(Kn(this,16),29),n||o7),t))},h.bi=function(t,n){var r,a;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab),!this.Ab&&(this.Ab=new nt(mi,this,0,3)),As(this.Ab,l(n,16));return;case 1:poe(this,ei(n));return;case 2:c2(this,Rt(Bt(n)));return;case 3:u2(this,Rt(Bt(n)));return;case 4:i2(this,l(n,17).a);return;case 5:My(this,l(n,17).a);return;case 8:Gm(this,l(n,142));return;case 9:a=$1(this,l(n,89),null),a&&a.oj();return;case 10:AE(this,Rt(Bt(n)));return;case 11:DE(this,Rt(Bt(n)));return;case 12:LE(this,Rt(Bt(n)));return;case 13:Z3e(this,ei(n));return;case 15:ME(this,Rt(Bt(n)));return;case 16:IE(this,Rt(Bt(n)));return;case 18:L2n(this,Rt(Bt(n)));return;case 20:v8e(this,Rt(Bt(n)));return;case 21:b7e(this,l(n,19));return;case 23:!this.a&&(this.a=new $5(D4,this,23)),$r(this.a),!this.a&&(this.a=new $5(D4,this,23)),As(this.a,l(n,16));return}uf(this,t-yr((Tn(),o7)),Mn((r=l(Kn(this,16),29),r||o7),t),n)},h.ii=function(){return Tn(),o7},h.ki=function(t){var n,r;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab);return;case 1:De(this.Cb,90)&&zy(Yl(l(this.Cb,90)),4),Fu(this,null);return;case 2:c2(this,!0);return;case 3:u2(this,!0);return;case 4:i2(this,0);return;case 5:My(this,1);return;case 8:Gm(this,null);return;case 9:r=$1(this,null,null),r&&r.oj();return;case 10:AE(this,!0);return;case 11:DE(this,!1);return;case 12:LE(this,!1);return;case 13:this.i=null,xV(this,null);return;case 15:ME(this,!1);return;case 16:IE(this,!1);return;case 18:m8e(this,!1),De(this.Cb,90)&&zy(Yl(l(this.Cb,90)),2);return;case 20:v8e(this,!0);return;case 21:b7e(this,null);return;case 23:!this.a&&(this.a=new $5(D4,this,23)),$r(this.a);return}cf(this,t-yr((Tn(),o7)),Mn((n=l(Kn(this,16),29),n||o7),t))},h.pi=function(){$7e(this),Wk(ic((El(),io),this)),Of(this),this.Bb|=1},h.uk=function(){return Ro(this)},h._k=function(){var t;return t=Ro(this),!!t&&(t.Bb&eu)!=0},h.al=function(){return(this.Bb&eu)!=0},h.bl=function(){return(this.Bb&Io)!=0},h.Yk=function(t,n){return this.c=null,o8e(this,t,n)},h.Ib=function(){var t;return this.Db&64?BU(this):(t=new Af(BU(this)),t.a+=" (containment: ",Gp(t,(this.Bb&eu)!=0),t.a+=", resolveProxies: ",Gp(t,(this.Bb&Io)!=0),t.a+=")",t.a)},I(Gn,"EReferenceImpl",102),D(561,120,{110:1,44:1,94:1,93:1,136:1,58:1,114:1,54:1,99:1,561:1,119:1,120:1},OS),h.Fb=function(t){return this===t},h.ld=function(){return this.b},h.md=function(){return this.c},h.Hb=function(){return fw(this)},h.Di=function(t){Ndn(this,ei(t))},h.nd=function(t){return wdn(this,ei(t))},h.Lh=function(t,n,r){var a;switch(t){case 0:return this.b;case 1:return this.c}return sf(this,t-yr((Tn(),No)),Mn((a=l(Kn(this,16),29),a||No),t),n,r)},h.Wh=function(t){var n;switch(t){case 0:return this.b!=null;case 1:return this.c!=null}return nf(this,t-yr((Tn(),No)),Mn((n=l(Kn(this,16),29),n||No),t))},h.bi=function(t,n){var r;switch(t){case 0:Pdn(this,ei(n));return;case 1:d7e(this,ei(n));return}uf(this,t-yr((Tn(),No)),Mn((r=l(Kn(this,16),29),r||No),t),n)},h.ii=function(){return Tn(),No},h.ki=function(t){var n;switch(t){case 0:f7e(this,null);return;case 1:d7e(this,null);return}cf(this,t-yr((Tn(),No)),Mn((n=l(Kn(this,16),29),n||No),t))},h.Bi=function(){var t;return this.a==-1&&(t=this.b,this.a=t==null?0:s2(t)),this.a},h.Ci=function(t){this.a=t},h.Ib=function(){var t;return this.Db&64?g0(this):(t=new Af(g0(this)),t.a+=" (key: ",Xo(t,this.b),t.a+=", value: ",Xo(t,this.c),t.a+=")",t.a)},h.a=-1,h.b=null,h.c=null;var Yc=I(Gn,"EStringToStringMapEntryImpl",561),Q_t=ks(us,"FeatureMap/Entry/Internal");D(576,1,YG),h.xl=function(t){return this.yl(l(t,54))},h.yl=function(t){return this.xl(t)},h.Fb=function(t){var n,r;return this===t?!0:De(t,76)?(n=l(t,76),n.Lk()==this.c?(r=this.md(),r==null?n.md()==null:Pi(r,n.md())):!1):!1},h.Lk=function(){return this.c},h.Hb=function(){var t;return t=this.md(),es(this.c)^(t==null?0:es(t))},h.Ib=function(){var t,n;return t=this.c,n=Ah(t.qk()).yi(),t.xe(),(n!=null&&n.length!=0?n+":"+t.xe():t.xe())+"="+this.md()},I(Gn,"EStructuralFeatureImpl/BasicFeatureMapEntry",576),D(791,576,YG,Jye),h.yl=function(t){return new Jye(this.c,t)},h.md=function(){return this.a},h.zl=function(t,n,r){return v3n(this,t,this.a,n,r)},h.Al=function(t,n,r){return w3n(this,t,this.a,n,r)},I(Gn,"EStructuralFeatureImpl/ContainmentUpdatingFeatureMapEntry",791),D(1350,1,{},Ntt),h.yk=function(t,n,r,a,o){var f;return f=l(tE(t,this.b),220),f.Yl(this.a).Fk(a)},h.zk=function(t,n,r,a,o){var f;return f=l(tE(t,this.b),220),f.Pl(this.a,a,o)},h.Ak=function(t,n,r,a,o){var f;return f=l(tE(t,this.b),220),f.Ql(this.a,a,o)},h.Bk=function(t,n,r){var a;return a=l(tE(t,this.b),220),a.Yl(this.a).Qj()},h.Ck=function(t,n,r,a){var o;o=l(tE(t,this.b),220),o.Yl(this.a).Wb(a)},h.Dk=function(t,n,r){return l(tE(t,this.b),220).Yl(this.a)},h.Ek=function(t,n,r){var a;a=l(tE(t,this.b),220),a.Yl(this.a).Gk()},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateFeatureMapDelegator",1350),D(91,1,{},Xp,Om,Jp,Rm),h.yk=function(t,n,r,a,o){var f;if(f=n.li(r),f==null&&n.mi(r,f=WU(this,t)),!o)switch(this.e){case 50:case 41:return l(f,597).bk();case 40:return l(f,220).Vl()}return f},h.zk=function(t,n,r,a,o){var f,g;return g=n.li(r),g==null&&n.mi(r,g=WU(this,t)),f=l(g,71).Wk(a,o),f},h.Ak=function(t,n,r,a,o){var f;return f=n.li(r),f!=null&&(o=l(f,71).Xk(a,o)),o},h.Bk=function(t,n,r){var a;return a=n.li(r),a!=null&&l(a,79).Qj()},h.Ck=function(t,n,r,a){var o;o=l(n.li(r),79),!o&&n.mi(r,o=WU(this,t)),o.Wb(a)},h.Dk=function(t,n,r){var a,o;return o=n.li(r),o==null&&n.mi(r,o=WU(this,t)),De(o,79)?l(o,79):(a=l(n.li(r),15),new xQe(a))},h.Ek=function(t,n,r){var a;a=l(n.li(r),79),!a&&n.mi(r,a=WU(this,t)),a.Gk()},h.b=0,h.e=0,I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateMany",91),D(512,1,{}),h.zk=function(t,n,r,a,o){throw ue(new Qr)},h.Ak=function(t,n,r,a,o){throw ue(new Qr)},h.Dk=function(t,n,r){return new Iat(this,t,n,r)};var Sg;I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingle",512),D(1367,1,i0e,Iat),h.Fk=function(t){return this.a.yk(this.c,this.d,this.b,t,!0)},h.Qj=function(){return this.a.Bk(this.c,this.d,this.b)},h.Wb=function(t){this.a.Ck(this.c,this.d,this.b,t)},h.Gk=function(){this.a.Ek(this.c,this.d,this.b)},h.b=0,I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingle/1",1367),D(784,512,{},$5e),h.yk=function(t,n,r,a,o){return sle(t,t.Ph(),t.Fh())==this.b?this.bl()&&a?Uue(t):t.Ph():null},h.zk=function(t,n,r,a,o){var f,g;return t.Ph()&&(o=(f=t.Fh(),f>=0?t.Ah(o):t.Ph().Th(t,-1-f,null,o))),g=ms(t.Dh(),this.e),t.Ch(a,g,o)},h.Ak=function(t,n,r,a,o){var f;return f=ms(t.Dh(),this.e),t.Ch(null,f,o)},h.Bk=function(t,n,r){var a;return a=ms(t.Dh(),this.e),!!t.Ph()&&t.Fh()==a},h.Ck=function(t,n,r,a){var o,f,g,w,E;if(a!=null&&!ule(this.a,a))throw ue(new kk(XG+(De(a,58)?_xe(l(a,58).Dh()):K6e(bh(a)))+QG+this.a+"'"));if(o=t.Ph(),g=ms(t.Dh(),this.e),qe(a)!==qe(o)||t.Fh()!=g&&a!=null){if(FE(t,l(a,58)))throw ue(new Yn(EL+t.Ib()));E=null,o&&(E=(f=t.Fh(),f>=0?t.Ah(E):t.Ph().Th(t,-1-f,null,E))),w=l(a,54),w&&(E=w.Rh(t,ms(w.Dh(),this.b),null,E)),E=t.Ch(w,g,E),E&&E.oj()}else t.vh()&&t.wh()&&Ni(t,new _a(t,1,g,a,a))},h.Ek=function(t,n,r){var a,o,f,g;a=t.Ph(),a?(g=(o=t.Fh(),o>=0?t.Ah(null):t.Ph().Th(t,-1-o,null,null)),f=ms(t.Dh(),this.e),g=t.Ch(null,f,g),g&&g.oj()):t.vh()&&t.wh()&&Ni(t,new X_(t,1,this.e,null,null))},h.bl=function(){return!1},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleContainer",784),D(1351,784,{},kit),h.bl=function(){return!0},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleContainerResolving",1351),D(574,512,{}),h.yk=function(t,n,r,a,o){var f;return f=n.li(r),f==null?this.b:qe(f)===qe(Sg)?null:f},h.Bk=function(t,n,r){var a;return a=n.li(r),a!=null&&(qe(a)===qe(Sg)||!Pi(a,this.b))},h.Ck=function(t,n,r,a){var o,f;t.vh()&&t.wh()?(o=(f=n.li(r),f==null?this.b:qe(f)===qe(Sg)?null:f),a==null?this.c!=null?(n.mi(r,null),a=this.b):this.b!=null?n.mi(r,Sg):n.mi(r,null):(this.Bl(a),n.mi(r,a)),Ni(t,this.d.Cl(t,1,this.e,o,a))):a==null?this.c!=null?n.mi(r,null):this.b!=null?n.mi(r,Sg):n.mi(r,null):(this.Bl(a),n.mi(r,a))},h.Ek=function(t,n,r){var a,o;t.vh()&&t.wh()?(a=(o=n.li(r),o==null?this.b:qe(o)===qe(Sg)?null:o),n.ni(r),Ni(t,this.d.Cl(t,1,this.e,a,this.b))):n.ni(r)},h.Bl=function(t){throw ue(new IQe)},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData",574),D(_6,1,{},NS),h.Cl=function(t,n,r,a,o){return new X_(t,n,r,a,o)},h.Dl=function(t,n,r,a,o,f){return new roe(t,n,r,a,o,f)};var MPe,DPe,IPe,OPe,NPe,PPe,BPe,ipe,FPe;I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator",_6),D(1368,_6,{},H0),h.Cl=function(t,n,r,a,o){return new m6e(t,n,r,Rt(Bt(a)),Rt(Bt(o)))},h.Dl=function(t,n,r,a,o,f){return new rct(t,n,r,Rt(Bt(a)),Rt(Bt(o)),f)},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/1",1368),D(1369,_6,{},AI),h.Cl=function(t,n,r,a,o){return new Q6e(t,n,r,l(a,222).a,l(o,222).a)},h.Dl=function(t,n,r,a,o,f){return new Xot(t,n,r,l(a,222).a,l(o,222).a,f)},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/2",1369),D(1370,_6,{},LI),h.Cl=function(t,n,r,a,o){return new J6e(t,n,r,l(a,180).a,l(o,180).a)},h.Dl=function(t,n,r,a,o,f){return new Qot(t,n,r,l(a,180).a,l(o,180).a,f)},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/3",1370),D(1371,_6,{},f8),h.Cl=function(t,n,r,a,o){return new p6e(t,n,r,ze(Ge(a)),ze(Ge(o)))},h.Dl=function(t,n,r,a,o,f){return new Jot(t,n,r,ze(Ge(a)),ze(Ge(o)),f)},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/4",1371),D(1372,_6,{},tre),h.Cl=function(t,n,r,a,o){return new t7e(t,n,r,l(a,161).a,l(o,161).a)},h.Dl=function(t,n,r,a,o,f){return new Zot(t,n,r,l(a,161).a,l(o,161).a,f)},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/5",1372),D(1373,_6,{},nre),h.Cl=function(t,n,r,a,o){return new b6e(t,n,r,l(a,17).a,l(o,17).a)},h.Dl=function(t,n,r,a,o,f){return new ect(t,n,r,l(a,17).a,l(o,17).a,f)},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/6",1373),D(1374,_6,{},rre),h.Cl=function(t,n,r,a,o){return new Z6e(t,n,r,l(a,168).a,l(o,168).a)},h.Dl=function(t,n,r,a,o,f){return new tct(t,n,r,l(a,168).a,l(o,168).a,f)},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/7",1374),D(1375,_6,{},ire),h.Cl=function(t,n,r,a,o){return new e7e(t,n,r,l(a,191).a,l(o,191).a)},h.Dl=function(t,n,r,a,o,f){return new nct(t,n,r,l(a,191).a,l(o,191).a,f)},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleData/NotificationCreator/8",1375),D(1353,574,{},Oat),h.Bl=function(t){if(!this.a.fk(t))throw ue(new kk(XG+bh(t)+QG+this.a+"'"))},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataDynamic",1353),D(1354,574,{},yst),h.Bl=function(t){},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataStatic",1354),D(785,574,{}),h.Bk=function(t,n,r){var a;return a=n.li(r),a!=null},h.Ck=function(t,n,r,a){var o,f;t.vh()&&t.wh()?(o=!0,f=n.li(r),f==null?(o=!1,f=this.b):qe(f)===qe(Sg)&&(f=null),a==null?this.c!=null?(n.mi(r,null),a=this.b):n.mi(r,Sg):(this.Bl(a),n.mi(r,a)),Ni(t,this.d.Dl(t,1,this.e,f,a,!o))):a==null?this.c!=null?n.mi(r,null):n.mi(r,Sg):(this.Bl(a),n.mi(r,a))},h.Ek=function(t,n,r){var a,o;t.vh()&&t.wh()?(a=!0,o=n.li(r),o==null?(a=!1,o=this.b):qe(o)===qe(Sg)&&(o=null),n.ni(r),Ni(t,this.d.Dl(t,2,this.e,o,this.b,a))):n.ni(r)},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettable",785),D(1355,785,{},Nat),h.Bl=function(t){if(!this.a.fk(t))throw ue(new kk(XG+bh(t)+QG+this.a+"'"))},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableDynamic",1355),D(1356,785,{},xst),h.Bl=function(t){},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleDataUnsettableStatic",1356),D(410,512,{},cH),h.yk=function(t,n,r,a,o){var f,g,w,E,C;if(C=n.li(r),this.tk()&&qe(C)===qe(Sg))return null;if(this.bl()&&a&&C!=null){if(w=l(C,54),w.Vh()&&(E=yb(t,w),w!=E)){if(!ule(this.a,E))throw ue(new kk(XG+bh(E)+QG+this.a+"'"));n.mi(r,C=E),this.al()&&(f=l(E,54),g=w.Th(t,this.b?ms(w.Dh(),this.b):-1-ms(t.Dh(),this.e),null,null),!f.Ph()&&(g=f.Rh(t,this.b?ms(f.Dh(),this.b):-1-ms(t.Dh(),this.e),null,g)),g&&g.oj()),t.vh()&&t.wh()&&Ni(t,new X_(t,9,this.e,w,E))}return C}else return C},h.zk=function(t,n,r,a,o){var f,g;return g=n.li(r),qe(g)===qe(Sg)&&(g=null),n.mi(r,a),this.Mj()?qe(g)!==qe(a)&&g!=null&&(f=l(g,54),o=f.Th(t,ms(f.Dh(),this.b),null,o)):this.al()&&g!=null&&(o=l(g,54).Th(t,-1-ms(t.Dh(),this.e),null,o)),t.vh()&&t.wh()&&(!o&&(o=new nb(4)),o.nj(new X_(t,1,this.e,g,a))),o},h.Ak=function(t,n,r,a,o){var f;return f=n.li(r),qe(f)===qe(Sg)&&(f=null),n.ni(r),t.vh()&&t.wh()&&(!o&&(o=new nb(4)),this.tk()?o.nj(new X_(t,2,this.e,f,null)):o.nj(new X_(t,1,this.e,f,null))),o},h.Bk=function(t,n,r){var a;return a=n.li(r),a!=null},h.Ck=function(t,n,r,a){var o,f,g,w,E;if(a!=null&&!ule(this.a,a))throw ue(new kk(XG+(De(a,58)?_xe(l(a,58).Dh()):K6e(bh(a)))+QG+this.a+"'"));E=n.li(r),w=E!=null,this.tk()&&qe(E)===qe(Sg)&&(E=null),g=null,this.Mj()?qe(E)!==qe(a)&&(E!=null&&(o=l(E,54),g=o.Th(t,ms(o.Dh(),this.b),null,g)),a!=null&&(o=l(a,54),g=o.Rh(t,ms(o.Dh(),this.b),null,g))):this.al()&&qe(E)!==qe(a)&&(E!=null&&(g=l(E,54).Th(t,-1-ms(t.Dh(),this.e),null,g)),a!=null&&(g=l(a,54).Rh(t,-1-ms(t.Dh(),this.e),null,g))),a==null&&this.tk()?n.mi(r,Sg):n.mi(r,a),t.vh()&&t.wh()?(f=new roe(t,1,this.e,E,a,this.tk()&&!w),g?(g.nj(f),g.oj()):Ni(t,f)):g&&g.oj()},h.Ek=function(t,n,r){var a,o,f,g,w;w=n.li(r),g=w!=null,this.tk()&&qe(w)===qe(Sg)&&(w=null),f=null,w!=null&&(this.Mj()?(a=l(w,54),f=a.Th(t,ms(a.Dh(),this.b),null,f)):this.al()&&(f=l(w,54).Th(t,-1-ms(t.Dh(),this.e),null,f))),n.ni(r),t.vh()&&t.wh()?(o=new roe(t,this.tk()?2:1,this.e,w,null,g),f?(f.nj(o),f.oj()):Ni(t,o)):f&&f.oj()},h.Mj=function(){return!1},h.al=function(){return!1},h.bl=function(){return!1},h.tk=function(){return!1},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObject",410),D(575,410,{},oae),h.al=function(){return!0},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainment",575),D(1359,575,{},wrt),h.bl=function(){return!0},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentResolving",1359),D(787,575,{},jye),h.tk=function(){return!0},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettable",787),D(1361,787,{},yrt),h.bl=function(){return!0},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentUnsettableResolving",1361),D(650,575,{},yae),h.Mj=function(){return!0},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverse",650),D(1360,650,{},Eit),h.bl=function(){return!0},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseResolving",1360),D(788,650,{},C4e),h.tk=function(){return!0},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettable",788),D(1362,788,{},Tit),h.bl=function(){return!0},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectContainmentWithInverseUnsettableResolving",1362),D(651,410,{},$ye),h.bl=function(){return!0},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolving",651),D(1363,651,{},xrt),h.tk=function(){return!0},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingUnsettable",1363),D(789,651,{},E4e),h.Mj=function(){return!0},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverse",789),D(1364,789,{},Cit),h.tk=function(){return!0},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectResolvingWithInverseUnsettable",1364),D(1357,410,{},krt),h.tk=function(){return!0},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectUnsettable",1357),D(786,410,{},T4e),h.Mj=function(){return!0},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverse",786),D(1358,786,{},Sit),h.tk=function(){return!0},I(Gn,"EStructuralFeatureImpl/InternalSettingDelegateSingleEObjectWithInverseUnsettable",1358),D(790,576,YG,x5e),h.yl=function(t){return new x5e(this.a,this.c,t)},h.md=function(){return this.b},h.zl=function(t,n,r){return bvn(this,t,this.b,r)},h.Al=function(t,n,r){return mvn(this,t,this.b,r)},I(Gn,"EStructuralFeatureImpl/InverseUpdatingFeatureMapEntry",790),D(1365,1,i0e,xQe),h.Fk=function(t){return this.a},h.Qj=function(){return De(this.a,97)?l(this.a,97).Qj():!this.a.dc()},h.Wb=function(t){this.a.$b(),this.a.Gc(l(t,15))},h.Gk=function(){De(this.a,97)?l(this.a,97).Gk():this.a.$b()},I(Gn,"EStructuralFeatureImpl/SettingMany",1365),D(1366,576,YG,Wct),h.xl=function(t){return new lae((Gi(),UM),this.b.ri(this.a,t))},h.md=function(){return null},h.zl=function(t,n,r){return r},h.Al=function(t,n,r){return r},I(Gn,"EStructuralFeatureImpl/SimpleContentFeatureMapEntry",1366),D(652,576,YG,lae),h.xl=function(t){return new lae(this.c,t)},h.md=function(){return this.a},h.zl=function(t,n,r){return r},h.Al=function(t,n,r){return r},I(Gn,"EStructuralFeatureImpl/SimpleFeatureMapEntry",652),D(403,506,Bd,Xd),h.aj=function(t){return We(Vf,Rn,29,t,0,1)},h.Yi=function(){return!1},I(Gn,"ESuperAdapter/1",403),D(457,448,{110:1,94:1,93:1,155:1,197:1,58:1,114:1,850:1,54:1,99:1,158:1,457:1,119:1,120:1},PS),h.Lh=function(t,n,r){var a;switch(t){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),this.Ab;case 1:return this.zb;case 2:return!this.a&&(this.a=new G_(this,Wo,this)),this.a}return sf(this,t-yr((Tn(),T3)),Mn((a=l(Kn(this,16),29),a||T3),t),n,r)},h.Uh=function(t,n,r){var a,o;switch(n){case 0:return!this.Ab&&(this.Ab=new nt(mi,this,0,3)),To(this.Ab,t,r);case 2:return!this.a&&(this.a=new G_(this,Wo,this)),To(this.a,t,r)}return o=l(Mn((a=l(Kn(this,16),29),a||(Tn(),T3)),n),69),o.wk().Ak(this,Ku(this),n-yr((Tn(),T3)),t,r)},h.Wh=function(t){var n;switch(t){case 0:return!!this.Ab&&this.Ab.i!=0;case 1:return this.zb!=null;case 2:return!!this.a&&this.a.i!=0}return nf(this,t-yr((Tn(),T3)),Mn((n=l(Kn(this,16),29),n||T3),t))},h.bi=function(t,n){var r;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab),!this.Ab&&(this.Ab=new nt(mi,this,0,3)),As(this.Ab,l(n,16));return;case 1:Fu(this,ei(n));return;case 2:!this.a&&(this.a=new G_(this,Wo,this)),$r(this.a),!this.a&&(this.a=new G_(this,Wo,this)),As(this.a,l(n,16));return}uf(this,t-yr((Tn(),T3)),Mn((r=l(Kn(this,16),29),r||T3),t),n)},h.ii=function(){return Tn(),T3},h.ki=function(t){var n;switch(t){case 0:!this.Ab&&(this.Ab=new nt(mi,this,0,3)),$r(this.Ab);return;case 1:Fu(this,null);return;case 2:!this.a&&(this.a=new G_(this,Wo,this)),$r(this.a);return}cf(this,t-yr((Tn(),T3)),Mn((n=l(Kn(this,16),29),n||T3),t))},I(Gn,"ETypeParameterImpl",457),D(458,83,kc,G_),h.Nj=function(t,n){return Dxn(this,l(t,89),n)},h.Oj=function(t,n){return Ixn(this,l(t,89),n)},I(Gn,"ETypeParameterImpl/1",458),D(647,45,m6,Vie),h.ec=function(){return new Pz(this)},I(Gn,"ETypeParameterImpl/2",647),D(570,q1,Tl,Pz),h.Fc=function(t){return Wrt(this,l(t,89))},h.Gc=function(t){var n,r,a;for(a=!1,r=t.Kc();r.Ob();)n=l(r.Pb(),89),ki(this.a,n,"")==null&&(a=!0);return a},h.$b=function(){Nl(this.a)},h.Hc=function(t){return Hu(this.a,t)},h.Kc=function(){var t;return t=new qm(new Sr(this.a).a),new Bz(t)},h.Mc=function(t){return Rut(this,t)},h.gc=function(){return d_(this.a)},I(Gn,"ETypeParameterImpl/2/1",570),D(571,1,Oa,Bz),h.Nb=function(t){Za(this,t)},h.Pb=function(){return l(Nw(this.a).ld(),89)},h.Ob=function(){return this.a.b},h.Qb=function(){Klt(this.a)},I(Gn,"ETypeParameterImpl/2/1/1",571),D(1329,45,m6,hJe),h._b=function(t){return Ia(t)?soe(this,t):!!zo(this.f,t)},h.xc=function(t){var n,r;return n=Ia(t)?xu(this,t):hc(zo(this.f,t)),De(n,851)?(r=l(n,851),n=r.Kk(),ki(this,l(t,241),n),n):n??(t==null?(use(),Z_t):null)},I(Gn,"EValidatorRegistryImpl",1329),D(1349,720,{110:1,94:1,93:1,480:1,155:1,58:1,114:1,2040:1,54:1,99:1,158:1,119:1,120:1},d8),h.ri=function(t,n){switch(t.hk()){case 21:case 22:case 23:case 24:case 26:case 31:case 32:case 37:case 38:case 39:case 40:case 43:case 44:case 48:case 49:case 20:return n==null?null:xc(n);case 25:return Awn(n);case 27:return qvn(n);case 28:return Hvn(n);case 29:return n==null?null:Cnt(jM[0],l(n,206));case 41:return n==null?"":_m(l(n,297));case 42:return xc(n);case 50:return ei(n);default:throw ue(new Yn(yT+t.xe()+t3))}},h.si=function(t){var n,r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe;switch(t.G==-1&&(t.G=(z=Ah(t),z?f2(z.vi(),t):-1)),t.G){case 0:return r=new zie,r;case 1:return n=new CI,n;case 2:return a=new hz,a;case 4:return o=new Fz,o;case 5:return f=new lJe,f;case 6:return g=new PQe,g;case 7:return w=new fz,w;case 10:return C=new m5,C;case 11:return L=new qie,L;case 12:return B=new qat,B;case 13:return V=new Hie,V;case 14:return J=new Hye,J;case 17:return te=new OS,te;case 18:return E=new Qv,E;case 19:return fe=new PS,fe;default:throw ue(new Yn(qfe+t.zb+t3))}},h.ti=function(t,n){switch(t.hk()){case 20:return n==null?null:new h3e(n);case 21:return n==null?null:new ob(n);case 23:case 22:return n==null?null:z5n(n);case 26:case 24:return n==null?null:fN(Oh(n,-128,127)<<24>>24);case 25:return aTn(n);case 27:return A7n(n);case 28:return L7n(n);case 29:return Jxn(n);case 32:case 31:return n==null?null:jy(n);case 38:case 37:return n==null?null:new Awe(n);case 40:case 39:return n==null?null:pt(Oh(n,lo,Ii));case 41:return null;case 42:return n==null,null;case 44:case 43:return n==null?null:ap(KU(n));case 49:case 48:return n==null?null:_E(Oh(n,JG,32767)<<16>>16);case 50:return n;default:throw ue(new Yn(yT+t.xe()+t3))}},I(Gn,"EcoreFactoryImpl",1349),D(560,184,{110:1,94:1,93:1,155:1,197:1,58:1,241:1,114:1,2038:1,54:1,99:1,158:1,184:1,560:1,119:1,120:1,690:1},fat),h.gb=!1,h.hb=!1;var RPe,J_t=!1;I(Gn,"EcorePackageImpl",560),D(1234,1,{851:1},k1),h.Kk=function(){return Rnt(),eAt},I(Gn,"EcorePackageImpl/1",1234),D(1243,1,yi,A$),h.fk=function(t){return De(t,155)},h.gk=function(t){return We(uF,Rn,155,t,0,1)},I(Gn,"EcorePackageImpl/10",1243),D(1244,1,yi,L$),h.fk=function(t){return De(t,197)},h.gk=function(t){return We(Yge,Rn,197,t,0,1)},I(Gn,"EcorePackageImpl/11",1244),D(1245,1,yi,M$),h.fk=function(t){return De(t,58)},h.gk=function(t){return We(Xb,Rn,58,t,0,1)},I(Gn,"EcorePackageImpl/12",1245),D(1246,1,yi,D$),h.fk=function(t){return De(t,411)},h.gk=function(t){return We(Uf,LSe,62,t,0,1)},I(Gn,"EcorePackageImpl/13",1246),D(1247,1,yi,I$),h.fk=function(t){return De(t,241)},h.gk=function(t){return We(u1,Rn,241,t,0,1)},I(Gn,"EcorePackageImpl/14",1247),D(1248,1,yi,O$),h.fk=function(t){return De(t,518)},h.gk=function(t){return We(k3,Rn,2116,t,0,1)},I(Gn,"EcorePackageImpl/15",1248),D(1249,1,yi,V0),h.fk=function(t){return De(t,102)},h.gk=function(t){return We(I4,S6,19,t,0,1)},I(Gn,"EcorePackageImpl/16",1249),D(1250,1,yi,nl),h.fk=function(t){return De(t,179)},h.gk=function(t){return We(dl,S6,179,t,0,1)},I(Gn,"EcorePackageImpl/17",1250),D(1251,1,yi,sre),h.fk=function(t){return De(t,481)},h.gk=function(t){return We(M4,Rn,481,t,0,1)},I(Gn,"EcorePackageImpl/18",1251),D(1252,1,yi,are),h.fk=function(t){return De(t,561)},h.gk=function(t){return We(Yc,e5t,561,t,0,1)},I(Gn,"EcorePackageImpl/19",1252),D(1235,1,yi,ore),h.fk=function(t){return De(t,331)},h.gk=function(t){return We(D4,S6,35,t,0,1)},I(Gn,"EcorePackageImpl/2",1235),D(1253,1,yi,rl),h.fk=function(t){return De(t,248)},h.gk=function(t){return We(Wo,m5t,89,t,0,1)},I(Gn,"EcorePackageImpl/20",1253),D(1254,1,yi,BS),h.fk=function(t){return De(t,457)},h.gk=function(t){return We(Zu,Rn,850,t,0,1)},I(Gn,"EcorePackageImpl/21",1254),D(1255,1,yi,N$),h.fk=function(t){return hy(t)},h.gk=function(t){return We(Ns,dt,485,t,8,1)},I(Gn,"EcorePackageImpl/22",1255),D(1256,1,yi,P$),h.fk=function(t){return De(t,195)},h.gk=function(t){return We(Al,dt,195,t,0,2)},I(Gn,"EcorePackageImpl/23",1256),D(1257,1,yi,g8),h.fk=function(t){return De(t,222)},h.gk=function(t){return We(jx,dt,222,t,0,1)},I(Gn,"EcorePackageImpl/24",1257),D(1258,1,yi,cre),h.fk=function(t){return De(t,180)},h.gk=function(t){return We(PL,dt,180,t,0,1)},I(Gn,"EcorePackageImpl/25",1258),D(1259,1,yi,ak),h.fk=function(t){return De(t,206)},h.gk=function(t){return We(cK,dt,206,t,0,1)},I(Gn,"EcorePackageImpl/26",1259),D(1260,1,yi,ure),h.fk=function(t){return!1},h.gk=function(t){return We(nBe,Rn,2215,t,0,1)},I(Gn,"EcorePackageImpl/27",1260),D(1261,1,yi,B$),h.fk=function(t){return fy(t)},h.gk=function(t){return We(ta,dt,345,t,7,1)},I(Gn,"EcorePackageImpl/28",1261),D(1262,1,yi,lre),h.fk=function(t){return De(t,61)},h.gk=function(t){return We(mPe,Qy,61,t,0,1)},I(Gn,"EcorePackageImpl/29",1262),D(1236,1,yi,hre),h.fk=function(t){return De(t,519)},h.gk=function(t){return We(mi,{3:1,4:1,5:1,2033:1},598,t,0,1)},I(Gn,"EcorePackageImpl/3",1236),D(1263,1,yi,FS),h.fk=function(t){return De(t,582)},h.gk=function(t){return We(yPe,Rn,2039,t,0,1)},I(Gn,"EcorePackageImpl/30",1263),D(1264,1,yi,F$),h.fk=function(t){return De(t,160)},h.gk=function(t){return We(HPe,Qy,160,t,0,1)},I(Gn,"EcorePackageImpl/31",1264),D(1265,1,yi,MI),h.fk=function(t){return De(t,76)},h.gk=function(t){return We(CY,S5t,76,t,0,1)},I(Gn,"EcorePackageImpl/32",1265),D(1266,1,yi,RS),h.fk=function(t){return De(t,161)},h.gk=function(t){return We(_T,dt,161,t,0,1)},I(Gn,"EcorePackageImpl/33",1266),D(1267,1,yi,fre),h.fk=function(t){return De(t,17)},h.gk=function(t){return We(ro,dt,17,t,0,1)},I(Gn,"EcorePackageImpl/34",1267),D(1268,1,yi,dre),h.fk=function(t){return De(t,297)},h.gk=function(t){return We(qSe,Rn,297,t,0,1)},I(Gn,"EcorePackageImpl/35",1268),D(1269,1,yi,DI),h.fk=function(t){return De(t,168)},h.gk=function(t){return We(r3,dt,168,t,0,1)},I(Gn,"EcorePackageImpl/36",1269),D(1270,1,yi,jS),h.fk=function(t){return De(t,85)},h.gk=function(t){return We(HSe,Rn,85,t,0,1)},I(Gn,"EcorePackageImpl/37",1270),D(1271,1,yi,E1),h.fk=function(t){return De(t,599)},h.gk=function(t){return We(jPe,Rn,599,t,0,1)},I(Gn,"EcorePackageImpl/38",1271),D(1272,1,yi,ok),h.fk=function(t){return!1},h.gk=function(t){return We(rBe,Rn,2216,t,0,1)},I(Gn,"EcorePackageImpl/39",1272),D(1237,1,yi,gre),h.fk=function(t){return De(t,90)},h.gk=function(t){return We(Vf,Rn,29,t,0,1)},I(Gn,"EcorePackageImpl/4",1237),D(1273,1,yi,ck),h.fk=function(t){return De(t,191)},h.gk=function(t){return We(i3,dt,191,t,0,1)},I(Gn,"EcorePackageImpl/40",1273),D(1274,1,yi,II),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(Gn,"EcorePackageImpl/41",1274),D(1275,1,yi,xm),h.fk=function(t){return De(t,596)},h.gk=function(t){return We(wPe,Rn,596,t,0,1)},I(Gn,"EcorePackageImpl/42",1275),D(1276,1,yi,$S),h.fk=function(t){return!1},h.gk=function(t){return We(iBe,dt,2217,t,0,1)},I(Gn,"EcorePackageImpl/43",1276),D(1277,1,yi,OI),h.fk=function(t){return De(t,44)},h.gk=function(t){return We(uv,XU,44,t,0,1)},I(Gn,"EcorePackageImpl/44",1277),D(1238,1,yi,U0),h.fk=function(t){return De(t,142)},h.gk=function(t){return We(l1,Rn,142,t,0,1)},I(Gn,"EcorePackageImpl/5",1238),D(1239,1,yi,zS),h.fk=function(t){return De(t,156)},h.gk=function(t){return We(tpe,Rn,156,t,0,1)},I(Gn,"EcorePackageImpl/6",1239),D(1240,1,yi,T1),h.fk=function(t){return De(t,469)},h.gk=function(t){return We(TY,Rn,685,t,0,1)},I(Gn,"EcorePackageImpl/7",1240),D(1241,1,yi,C1),h.fk=function(t){return De(t,582)},h.gk=function(t){return We(wp,Rn,694,t,0,1)},I(Gn,"EcorePackageImpl/8",1241),D(1242,1,yi,pre),h.fk=function(t){return De(t,480)},h.gk=function(t){return We(RM,Rn,480,t,0,1)},I(Gn,"EcorePackageImpl/9",1242),D(1038,2080,Z4t,IJe),h.Mi=function(t,n){b4n(this,l(n,424))},h.Qi=function(t,n){Apt(this,t,l(n,424))},I(Gn,"MinimalEObjectImpl/1ArrayDelegatingAdapterList",1038),D(1039,152,YP,nat),h.jj=function(){return this.a.a},I(Gn,"MinimalEObjectImpl/1ArrayDelegatingAdapterList/1",1039),D(1067,1066,{},bnt),I("org.eclipse.emf.ecore.plugin","EcorePlugin",1067);var jPe=ks(_5t,"Resource");D(799,1524,A5t),h.Hl=function(t){},h.Il=function(t){},h.El=function(){return!this.a&&(this.a=new Pie(this)),this.a},h.Fl=function(t){var n,r,a,o,f;if(a=t.length,a>0)if(Xn(0,t.length),t.charCodeAt(0)==47){for(f=new Bu(4),o=1,n=1;n0&&(t=(Ga(0,r,t.length),t.substr(0,r))));return Ukn(this,t)},h.Gl=function(){return this.c},h.Ib=function(){var t;return _m(this.Rm)+"@"+(t=es(this)>>>0,t.toString(16))+" uri='"+this.d+"'"},h.b=!1,I(s0e,"ResourceImpl",799),D(1525,799,A5t,kQe),I(s0e,"BinaryResourceImpl",1525),D(1190,708,Zfe),h.bj=function(t){return De(t,58)?Bpn(this,l(t,58)):De(t,599)?new or(l(t,599).El()):qe(t)===qe(this.f)?l(t,16).Kc():(Fk(),fF.a)},h.Ob=function(){return x9e(this)},h.a=!1,I(us,"EcoreUtil/ContentTreeIterator",1190),D(1526,1190,Zfe,Ist),h.bj=function(t){return qe(t)===qe(this.f)?l(t,15).Kc():new Lct(l(t,58))},I(s0e,"ResourceImpl/5",1526),D(658,2092,b5t,Pie),h.Hc=function(t){return this.i<=4?jE(this,t):De(t,54)&&l(t,54).Jh()==this.a},h.Mi=function(t,n){t==this.i-1&&(this.a.b||(this.a.b=!0))},h.Oi=function(t,n){t==0?this.a.b||(this.a.b=!0):Noe(this,t,n)},h.Qi=function(t,n){},h.Ri=function(t,n,r){},h.Lj=function(){return 2},h.jj=function(){return this.a},h.Mj=function(){return!0},h.Nj=function(t,n){var r;return r=l(t,54),n=r.fi(this.a,n),n},h.Oj=function(t,n){var r;return r=l(t,54),r.fi(null,n)},h.Pj=function(){return!1},h.Si=function(){return!0},h.aj=function(t){return We(Xb,Rn,58,t,0,1)},h.Yi=function(){return!1},I(s0e,"ResourceImpl/ContentsEList",658),D(970,2062,iT,EQe),h.fd=function(t){return this.a.Ki(t)},h.gc=function(){return this.a.gc()},I(us,"AbstractSequentialInternalEList/1",970);var $Pe,zPe,io,qPe;D(634,1,{},Nit);var SY,_Y;I(us,"BasicExtendedMetaData",634),D(1181,1,{},Btt),h.Jl=function(){return null},h.Kl=function(){return this.a==-2&&Ye(this,Uxn(this.d,this.b)),this.a},h.Ll=function(){return null},h.Ml=function(){return Cn(),Cn(),_o},h.xe=function(){return this.c==ET&&mt(this,J1t(this.d,this.b)),this.c},h.Nl=function(){return 0},h.a=-2,h.c=ET,I(us,"BasicExtendedMetaData/EClassExtendedMetaDataImpl",1181),D(1182,1,{},sct),h.Jl=function(){return this.a==(eE(),SY)&&Mt(this,VSn(this.f,this.b)),this.a},h.Kl=function(){return 0},h.Ll=function(){return this.c==(eE(),SY)&&Je(this,USn(this.f,this.b)),this.c},h.Ml=function(){return!this.d&&Wt(this,LAn(this.f,this.b)),this.d},h.xe=function(){return this.e==ET&&_n(this,J1t(this.f,this.b)),this.e},h.Nl=function(){return this.g==-2&&Yt(this,lxn(this.f,this.b)),this.g},h.e=ET,h.g=-2,I(us,"BasicExtendedMetaData/EDataTypeExtendedMetaDataImpl",1182),D(1180,1,{},Ftt),h.b=!1,h.c=!1,I(us,"BasicExtendedMetaData/EPackageExtendedMetaDataImpl",1180),D(1183,1,{},act),h.c=-2,h.e=ET,h.f=ET,I(us,"BasicExtendedMetaData/EStructuralFeatureExtendedMetaDataImpl",1183),D(593,632,kc,Jq),h.Lj=function(){return this.c},h.ol=function(){return!1},h.Wi=function(t,n){return n},h.c=0,I(us,"EDataTypeEList",593);var HPe=ks(us,"FeatureMap");D(78,593,{3:1,4:1,20:1,31:1,56:1,16:1,15:1,59:1,70:1,66:1,61:1,79:1,160:1,220:1,2036:1,71:1,97:1},Ls),h.bd=function(t,n){uCn(this,t,l(n,76))},h.Fc=function(t){return _Tn(this,l(t,76))},h.Hi=function(t){Ogn(this,l(t,76))},h.Nj=function(t,n){return e0n(this,l(t,76),n)},h.Oj=function(t,n){return d4e(this,l(t,76),n)},h.Ti=function(t,n){return P_n(this,t,n)},h.Wi=function(t,n){return xMn(this,t,l(n,76))},h.hd=function(t,n){return XCn(this,t,l(n,76))},h.Uj=function(t,n){return t0n(this,l(t,76),n)},h.Vj=function(t,n){return uit(this,l(t,76),n)},h.Wj=function(t,n,r){return Q8n(this,l(t,76),l(n,76),r)},h.Zi=function(t,n){return Aue(this,t,l(n,76))},h.Ol=function(t,n){return fke(this,t,n)},h.cd=function(t,n){var r,a,o,f,g,w,E,C,L;for(C=new Lw(n.gc()),o=n.Kc();o.Ob();)if(a=l(o.Pb(),76),f=a.Lk(),up(this.e,f))(!f.Si()||!qH(this,f,a.md())&&!jE(C,a))&&qr(C,a);else{for(L=Wu(this.e.Dh(),f),r=l(this.g,124),g=!0,w=0;w=0;)if(n=t[this.c],this.k.am(n.Lk()))return this.j=this.f?n:n.md(),this.i=-2,!0;return this.i=-1,this.g=-1,!1},I(us,"BasicFeatureMap/FeatureEIterator",420),D(676,420,lg,Use),h.ul=function(){return!0},I(us,"BasicFeatureMap/ResolvingFeatureEIterator",676),D(968,496,KG,Snt),h.pj=function(){return this},I(us,"EContentsEList/1",968),D(969,496,KG,Xtt),h.ul=function(){return!1},I(us,"EContentsEList/2",969),D(967,287,WG,_nt),h.wl=function(t){},h.Ob=function(){return!1},h.Sb=function(){return!1},I(us,"EContentsEList/FeatureIteratorImpl/1",967),D(840,593,kc,yye),h.Ni=function(){this.a=!0},h.Qj=function(){return this.a},h.Gk=function(){var t;$r(this),hh(this.e)?(t=this.a,this.a=!1,Ni(this.e,new h0(this.e,2,this.c,t,!1))):this.a=!1},h.a=!1,I(us,"EDataTypeEList/Unsettable",840),D(1958,593,kc,Nnt),h.Si=function(){return!0},I(us,"EDataTypeUniqueEList",1958),D(1959,840,kc,Pnt),h.Si=function(){return!0},I(us,"EDataTypeUniqueEList/Unsettable",1959),D(147,83,kc,ml),h.nl=function(){return!0},h.Wi=function(t,n){return Ex(this,t,l(n,58))},I(us,"EObjectContainmentEList/Resolving",147),D(1184,555,kc,Bnt),h.nl=function(){return!0},h.Wi=function(t,n){return Ex(this,t,l(n,58))},I(us,"EObjectContainmentEList/Unsettable/Resolving",1184),D(766,14,kc,a4e),h.Ni=function(){this.a=!0},h.Qj=function(){return this.a},h.Gk=function(){var t;$r(this),hh(this.e)?(t=this.a,this.a=!1,Ni(this.e,new h0(this.e,2,this.c,t,!1))):this.a=!1},h.a=!1,I(us,"EObjectContainmentWithInverseEList/Unsettable",766),D(1222,766,kc,Yrt),h.nl=function(){return!0},h.Wi=function(t,n){return Ex(this,t,l(n,58))},I(us,"EObjectContainmentWithInverseEList/Unsettable/Resolving",1222),D(757,505,kc,xye),h.Ni=function(){this.a=!0},h.Qj=function(){return this.a},h.Gk=function(){var t;$r(this),hh(this.e)?(t=this.a,this.a=!1,Ni(this.e,new h0(this.e,2,this.c,t,!1))):this.a=!1},h.a=!1,I(us,"EObjectEList/Unsettable",757),D(338,505,kc,$5),h.nl=function(){return!0},h.Wi=function(t,n){return Ex(this,t,l(n,58))},I(us,"EObjectResolvingEList",338),D(1844,757,kc,Fnt),h.nl=function(){return!0},h.Wi=function(t,n){return Ex(this,t,l(n,58))},I(us,"EObjectResolvingEList/Unsettable",1844),D(1527,1,{},bre);var Z_t;I(us,"EObjectValidator",1527),D(559,505,kc,pH),h.il=function(){return this.d},h.jl=function(){return this.b},h.Mj=function(){return!0},h.ml=function(){return!0},h.b=0,I(us,"EObjectWithInverseEList",559),D(1225,559,kc,Xrt),h.ll=function(){return!0},I(us,"EObjectWithInverseEList/ManyInverse",1225),D(635,559,kc,fae),h.Ni=function(){this.a=!0},h.Qj=function(){return this.a},h.Gk=function(){var t;$r(this),hh(this.e)?(t=this.a,this.a=!1,Ni(this.e,new h0(this.e,2,this.c,t,!1))):this.a=!1},h.a=!1,I(us,"EObjectWithInverseEList/Unsettable",635),D(1224,635,kc,Qrt),h.ll=function(){return!0},I(us,"EObjectWithInverseEList/Unsettable/ManyInverse",1224),D(767,559,kc,o4e),h.nl=function(){return!0},h.Wi=function(t,n){return Ex(this,t,l(n,58))},I(us,"EObjectWithInverseResolvingEList",767),D(32,767,kc,Ln),h.ll=function(){return!0},I(us,"EObjectWithInverseResolvingEList/ManyInverse",32),D(768,635,kc,c4e),h.nl=function(){return!0},h.Wi=function(t,n){return Ex(this,t,l(n,58))},I(us,"EObjectWithInverseResolvingEList/Unsettable",768),D(1223,768,kc,Jrt),h.ll=function(){return!0},I(us,"EObjectWithInverseResolvingEList/Unsettable/ManyInverse",1223),D(1185,632,kc),h.Li=function(){return(this.b&1792)==0},h.Ni=function(){this.b|=1},h.kl=function(){return(this.b&4)!=0},h.Mj=function(){return(this.b&40)!=0},h.ll=function(){return(this.b&16)!=0},h.ml=function(){return(this.b&8)!=0},h.nl=function(){return(this.b&r4)!=0},h.al=function(){return(this.b&32)!=0},h.ol=function(){return(this.b&m0)!=0},h.fk=function(t){return this.d?Rct(this.d,t):this.Lk().Hk().fk(t)},h.Qj=function(){return this.b&2?(this.b&1)!=0:this.i!=0},h.Si=function(){return(this.b&128)!=0},h.Gk=function(){var t;$r(this),this.b&2&&(hh(this.e)?(t=(this.b&1)!=0,this.b&=-2,xk(this,new h0(this.e,2,ms(this.e.Dh(),this.Lk()),t,!1))):this.b&=-2)},h.Yi=function(){return(this.b&1536)==0},h.b=0,I(us,"EcoreEList/Generic",1185),D(1186,1185,kc,Vat),h.Lk=function(){return this.a},I(us,"EcoreEList/Dynamic",1186),D(765,66,Bd,kwe),h.aj=function(t){return bN(this.a.a,t)},I(us,"EcoreEMap/1",765),D(764,83,kc,a5e),h.Mi=function(t,n){oU(this.b,l(n,136))},h.Oi=function(t,n){zft(this.b)},h.Pi=function(t,n,r){var a;++(a=this.b,l(n,136),a).e},h.Qi=function(t,n){Fce(this.b,l(n,136))},h.Ri=function(t,n,r){Fce(this.b,l(r,136)),qe(r)===qe(n)&&l(r,136).Ci(Jln(l(n,136).ld())),oU(this.b,l(n,136))},I(us,"EcoreEMap/DelegateEObjectContainmentEList",764),D(1220,141,ASe,ift),I(us,"EcoreEMap/Unsettable",1220),D(1221,764,kc,Zrt),h.Ni=function(){this.a=!0},h.Qj=function(){return this.a},h.Gk=function(){var t;$r(this),hh(this.e)?(t=this.a,this.a=!1,Ni(this.e,new h0(this.e,2,this.c,t,!1))):this.a=!1},h.a=!1,I(us,"EcoreEMap/Unsettable/UnsettableDelegateEObjectContainmentEList",1221),D(1189,215,m6,Ust),h.a=!1,h.b=!1,I(us,"EcoreUtil/Copier",1189),D(759,1,Oa,Lct),h.Nb=function(t){Za(this,t)},h.Ob=function(){return F1t(this)},h.Pb=function(){var t;return F1t(this),t=this.b,this.b=null,t},h.Qb=function(){this.a.Qb()},I(us,"EcoreUtil/ProperContentIterator",759),D(1528,1527,{},dz);var eAt;I(us,"EcoreValidator",1528);var tAt;ks(us,"FeatureMapUtil/Validator"),D(1295,1,{2041:1},v5),h.am=function(t){return!0},I(us,"FeatureMapUtil/1",1295),D(773,1,{2041:1},qke),h.am=function(t){var n;return this.c==t?!0:(n=Bt(cr(this.a,t)),n==null?QSn(this,t)?(Lut(this.a,t,(Hn(),ST)),!0):(Lut(this.a,t,(Hn(),Pb)),!1):n==(Hn(),ST))},h.e=!1;var spe;I(us,"FeatureMapUtil/BasicValidator",773),D(774,45,m6,vye),I(us,"FeatureMapUtil/BasicValidator/Cache",774),D(509,56,{20:1,31:1,56:1,16:1,15:1,61:1,79:1,71:1,97:1},yO),h.bd=function(t,n){vbt(this.c,this.b,t,n)},h.Fc=function(t){return fke(this.c,this.b,t)},h.cd=function(t,n){return vLn(this.c,this.b,t,n)},h.Gc=function(t){return F_(this,t)},h.Gi=function(t,n){dwn(this.c,this.b,t,n)},h.Wk=function(t,n){return ike(this.c,this.b,t,n)},h.$i=function(t){return qU(this.c,this.b,t,!1)},h.Ii=function(){return cnt(this.c,this.b)},h.Ji=function(){return jln(this.c,this.b)},h.Ki=function(t){return vvn(this.c,this.b,t)},h.Xk=function(t,n){return Irt(this,t,n)},h.$b=function(){_8(this)},h.Hc=function(t){return qH(this.c,this.b,t)},h.Ic=function(t){return m3n(this.c,this.b,t)},h.Xb=function(t){return qU(this.c,this.b,t,!0)},h.Fk=function(t){return this},h.dd=function(t){return Cmn(this.c,this.b,t)},h.dc=function(){return _q(this)},h.Qj=function(){return!FN(this.c,this.b)},h.Kc=function(){return rwn(this.c,this.b)},h.ed=function(){return iwn(this.c,this.b)},h.fd=function(t){return P4n(this.c,this.b,t)},h.Ti=function(t,n){return Omt(this.c,this.b,t,n)},h.Ui=function(t,n){xvn(this.c,this.b,t,n)},h.gd=function(t){return hpt(this.c,this.b,t)},h.Mc=function(t){return y_n(this.c,this.b,t)},h.hd=function(t,n){return qmt(this.c,this.b,t,n)},h.Wb=function(t){EU(this.c,this.b),F_(this,l(t,15))},h.gc=function(){return N4n(this.c,this.b)},h.Pc=function(){return _bn(this.c,this.b)},h.Qc=function(t){return Smn(this.c,this.b,t)},h.Ib=function(){var t,n;for(n=new Up,n.a+="[",t=cnt(this.c,this.b);_ce(t);)Xo(n,j_(iU(t))),_ce(t)&&(n.a+=Co);return n.a+="]",n.a},h.Gk=function(){EU(this.c,this.b)},I(us,"FeatureMapUtil/FeatureEList",509),D(644,39,YP,Eoe),h.hj=function(t){return SA(this,t)},h.mj=function(t){var n,r,a,o,f,g,w;switch(this.d){case 1:case 2:{if(f=t.jj(),qe(f)===qe(this.c)&&SA(this,null)==t.hj(null))return this.g=t.ij(),t.gj()==1&&(this.d=1),!0;break}case 3:{switch(o=t.gj(),o){case 3:{if(f=t.jj(),qe(f)===qe(this.c)&&SA(this,null)==t.hj(null))return this.d=5,n=new Lw(2),qr(n,this.g),qr(n,t.ij()),this.g=n,!0;break}}break}case 5:{switch(o=t.gj(),o){case 3:{if(f=t.jj(),qe(f)===qe(this.c)&&SA(this,null)==t.hj(null))return r=l(this.g,16),r.Fc(t.ij()),!0;break}}break}case 4:{switch(o=t.gj(),o){case 3:{if(f=t.jj(),qe(f)===qe(this.c)&&SA(this,null)==t.hj(null))return this.d=1,this.g=t.ij(),!0;break}case 4:{if(f=t.jj(),qe(f)===qe(this.c)&&SA(this,null)==t.hj(null))return this.d=6,w=new Lw(2),qr(w,this.n),qr(w,t.kj()),this.n=w,g=he(le(Vr,1),di,28,15,[this.o,t.lj()]),this.g=g,!0;break}}break}case 6:{switch(o=t.gj(),o){case 4:{if(f=t.jj(),qe(f)===qe(this.c)&&SA(this,null)==t.hj(null))return r=l(this.n,16),r.Fc(t.kj()),g=l(this.g,53),a=We(Vr,di,28,g.length+1,15,1),pu(g,0,a,0,g.length),a[g.length]=t.lj(),this.g=a,!0;break}}break}}return!1},I(us,"FeatureMapUtil/FeatureENotificationImpl",644),D(564,509,{20:1,31:1,56:1,16:1,15:1,61:1,79:1,160:1,220:1,2036:1,71:1,97:1},nH),h.Ol=function(t,n){return fke(this.c,t,n)},h.Pl=function(t,n,r){return ike(this.c,t,n,r)},h.Ql=function(t,n,r){return Mke(this.c,t,n,r)},h.Rl=function(){return this},h.Sl=function(t,n){return pP(this.c,t,n)},h.Tl=function(t){return l(qU(this.c,this.b,t,!1),76).Lk()},h.Ul=function(t){return l(qU(this.c,this.b,t,!1),76).md()},h.Vl=function(){return this.a},h.Wl=function(t){return!FN(this.c,t)},h.Xl=function(t,n){HU(this.c,t,n)},h.Yl=function(t){return oft(this.c,t)},h.Zl=function(t){jdt(this.c,t)},I(us,"FeatureMapUtil/FeatureFeatureMap",564),D(1294,1,i0e,Ptt),h.Fk=function(t){return qU(this.b,this.a,-1,t)},h.Qj=function(){return!FN(this.b,this.a)},h.Wb=function(t){HU(this.b,this.a,t)},h.Gk=function(){EU(this.b,this.a)},I(us,"FeatureMapUtil/FeatureValue",1294);var c9,ape,ope,u9,nAt,gF=ks(nK,"AnyType");D(680,63,lp,Jie),I(nK,"InvalidDatatypeValueException",680);var AY=ks(nK,M5t),pF=ks(nK,D5t),VPe=ks(nK,I5t),rAt,tu,UPe,Sv,iAt,sAt,aAt,oAt,cAt,uAt,lAt,hAt,fAt,dAt,gAt,c7,pAt,u7,HM,bAt,C3,bF,mF,mAt,VM,UM;D(844,516,{110:1,94:1,93:1,58:1,54:1,99:1,857:1},zwe),h.Lh=function(t,n,r){switch(t){case 0:return r?(!this.c&&(this.c=new Ls(this,0)),this.c):(!this.c&&(this.c=new Ls(this,0)),this.c.b);case 1:return r?(!this.c&&(this.c=new Ls(this,0)),l(ku(this.c,(Gi(),Sv)),160)):(!this.c&&(this.c=new Ls(this,0)),l(l(ku(this.c,(Gi(),Sv)),160),220)).Vl();case 2:return r?(!this.b&&(this.b=new Ls(this,2)),this.b):(!this.b&&(this.b=new Ls(this,2)),this.b.b)}return sf(this,t-yr(this.ii()),Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():this.ii(),t),n,r)},h.Uh=function(t,n,r){var a;switch(n){case 0:return!this.c&&(this.c=new Ls(this,0)),hP(this.c,t,r);case 1:return(!this.c&&(this.c=new Ls(this,0)),l(l(ku(this.c,(Gi(),Sv)),160),71)).Xk(t,r);case 2:return!this.b&&(this.b=new Ls(this,2)),hP(this.b,t,r)}return a=l(Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():this.ii(),n),69),a.wk().Ak(this,V6e(this),n-yr(this.ii()),t,r)},h.Wh=function(t){switch(t){case 0:return!!this.c&&this.c.i!=0;case 1:return!(!this.c&&(this.c=new Ls(this,0)),l(ku(this.c,(Gi(),Sv)),160)).dc();case 2:return!!this.b&&this.b.i!=0}return nf(this,t-yr(this.ii()),Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():this.ii(),t))},h.bi=function(t,n){switch(t){case 0:!this.c&&(this.c=new Ls(this,0)),$O(this.c,n);return;case 1:(!this.c&&(this.c=new Ls(this,0)),l(l(ku(this.c,(Gi(),Sv)),160),220)).Wb(n);return;case 2:!this.b&&(this.b=new Ls(this,2)),$O(this.b,n);return}uf(this,t-yr(this.ii()),Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():this.ii(),t),n)},h.ii=function(){return Gi(),UPe},h.ki=function(t){switch(t){case 0:!this.c&&(this.c=new Ls(this,0)),$r(this.c);return;case 1:(!this.c&&(this.c=new Ls(this,0)),l(ku(this.c,(Gi(),Sv)),160)).$b();return;case 2:!this.b&&(this.b=new Ls(this,2)),$r(this.b);return}cf(this,t-yr(this.ii()),Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():this.ii(),t))},h.Ib=function(){var t;return this.j&4?g0(this):(t=new Af(g0(this)),t.a+=" (mixed: ",O_(t,this.c),t.a+=", anyAttribute: ",O_(t,this.b),t.a+=")",t.a)},I(ea,"AnyTypeImpl",844),D(681,516,{110:1,94:1,93:1,58:1,54:1,99:1,2119:1,681:1},yre),h.Lh=function(t,n,r){switch(t){case 0:return this.a;case 1:return this.b}return sf(this,t-yr((Gi(),c7)),Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():c7,t),n,r)},h.Wh=function(t){switch(t){case 0:return this.a!=null;case 1:return this.b!=null}return nf(this,t-yr((Gi(),c7)),Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():c7,t))},h.bi=function(t,n){switch(t){case 0:vr(this,ei(n));return;case 1:pr(this,ei(n));return}uf(this,t-yr((Gi(),c7)),Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():c7,t),n)},h.ii=function(){return Gi(),c7},h.ki=function(t){switch(t){case 0:this.a=null;return;case 1:this.b=null;return}cf(this,t-yr((Gi(),c7)),Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():c7,t))},h.Ib=function(){var t;return this.j&4?g0(this):(t=new Af(g0(this)),t.a+=" (data: ",Xo(t,this.a),t.a+=", target: ",Xo(t,this.b),t.a+=")",t.a)},h.a=null,h.b=null,I(ea,"ProcessingInstructionImpl",681),D(682,844,{110:1,94:1,93:1,58:1,54:1,99:1,857:1,2120:1,682:1},fJe),h.Lh=function(t,n,r){switch(t){case 0:return r?(!this.c&&(this.c=new Ls(this,0)),this.c):(!this.c&&(this.c=new Ls(this,0)),this.c.b);case 1:return r?(!this.c&&(this.c=new Ls(this,0)),l(ku(this.c,(Gi(),Sv)),160)):(!this.c&&(this.c=new Ls(this,0)),l(l(ku(this.c,(Gi(),Sv)),160),220)).Vl();case 2:return r?(!this.b&&(this.b=new Ls(this,2)),this.b):(!this.b&&(this.b=new Ls(this,2)),this.b.b);case 3:return!this.c&&(this.c=new Ls(this,0)),ei(pP(this.c,(Gi(),HM),!0));case 4:return l4e(this.a,(!this.c&&(this.c=new Ls(this,0)),ei(pP(this.c,(Gi(),HM),!0))));case 5:return this.a}return sf(this,t-yr((Gi(),u7)),Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():u7,t),n,r)},h.Wh=function(t){switch(t){case 0:return!!this.c&&this.c.i!=0;case 1:return!(!this.c&&(this.c=new Ls(this,0)),l(ku(this.c,(Gi(),Sv)),160)).dc();case 2:return!!this.b&&this.b.i!=0;case 3:return!this.c&&(this.c=new Ls(this,0)),ei(pP(this.c,(Gi(),HM),!0))!=null;case 4:return l4e(this.a,(!this.c&&(this.c=new Ls(this,0)),ei(pP(this.c,(Gi(),HM),!0))))!=null;case 5:return!!this.a}return nf(this,t-yr((Gi(),u7)),Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():u7,t))},h.bi=function(t,n){switch(t){case 0:!this.c&&(this.c=new Ls(this,0)),$O(this.c,n);return;case 1:(!this.c&&(this.c=new Ls(this,0)),l(l(ku(this.c,(Gi(),Sv)),160),220)).Wb(n);return;case 2:!this.b&&(this.b=new Ls(this,2)),$O(this.b,n);return;case 3:J5e(this,ei(n));return;case 4:J5e(this,u4e(this.a,n));return;case 5:Nn(this,l(n,156));return}uf(this,t-yr((Gi(),u7)),Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():u7,t),n)},h.ii=function(){return Gi(),u7},h.ki=function(t){switch(t){case 0:!this.c&&(this.c=new Ls(this,0)),$r(this.c);return;case 1:(!this.c&&(this.c=new Ls(this,0)),l(ku(this.c,(Gi(),Sv)),160)).$b();return;case 2:!this.b&&(this.b=new Ls(this,2)),$r(this.b);return;case 3:!this.c&&(this.c=new Ls(this,0)),HU(this.c,(Gi(),HM),null);return;case 4:J5e(this,u4e(this.a,null));return;case 5:this.a=null;return}cf(this,t-yr((Gi(),u7)),Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():u7,t))},I(ea,"SimpleAnyTypeImpl",682),D(683,516,{110:1,94:1,93:1,58:1,54:1,99:1,2121:1,683:1},dJe),h.Lh=function(t,n,r){switch(t){case 0:return r?(!this.a&&(this.a=new Ls(this,0)),this.a):(!this.a&&(this.a=new Ls(this,0)),this.a.b);case 1:return r?(!this.b&&(this.b=new xl((Tn(),No),Yc,this,1)),this.b):(!this.b&&(this.b=new xl((Tn(),No),Yc,this,1)),iN(this.b));case 2:return r?(!this.c&&(this.c=new xl((Tn(),No),Yc,this,2)),this.c):(!this.c&&(this.c=new xl((Tn(),No),Yc,this,2)),iN(this.c));case 3:return!this.a&&(this.a=new Ls(this,0)),ku(this.a,(Gi(),bF));case 4:return!this.a&&(this.a=new Ls(this,0)),ku(this.a,(Gi(),mF));case 5:return!this.a&&(this.a=new Ls(this,0)),ku(this.a,(Gi(),VM));case 6:return!this.a&&(this.a=new Ls(this,0)),ku(this.a,(Gi(),UM))}return sf(this,t-yr((Gi(),C3)),Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():C3,t),n,r)},h.Uh=function(t,n,r){var a;switch(n){case 0:return!this.a&&(this.a=new Ls(this,0)),hP(this.a,t,r);case 1:return!this.b&&(this.b=new xl((Tn(),No),Yc,this,1)),Uq(this.b,t,r);case 2:return!this.c&&(this.c=new xl((Tn(),No),Yc,this,2)),Uq(this.c,t,r);case 5:return!this.a&&(this.a=new Ls(this,0)),Irt(ku(this.a,(Gi(),VM)),t,r)}return a=l(Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():(Gi(),C3),n),69),a.wk().Ak(this,V6e(this),n-yr((Gi(),C3)),t,r)},h.Wh=function(t){switch(t){case 0:return!!this.a&&this.a.i!=0;case 1:return!!this.b&&this.b.f!=0;case 2:return!!this.c&&this.c.f!=0;case 3:return!this.a&&(this.a=new Ls(this,0)),!_q(ku(this.a,(Gi(),bF)));case 4:return!this.a&&(this.a=new Ls(this,0)),!_q(ku(this.a,(Gi(),mF)));case 5:return!this.a&&(this.a=new Ls(this,0)),!_q(ku(this.a,(Gi(),VM)));case 6:return!this.a&&(this.a=new Ls(this,0)),!_q(ku(this.a,(Gi(),UM)))}return nf(this,t-yr((Gi(),C3)),Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():C3,t))},h.bi=function(t,n){switch(t){case 0:!this.a&&(this.a=new Ls(this,0)),$O(this.a,n);return;case 1:!this.b&&(this.b=new xl((Tn(),No),Yc,this,1)),_V(this.b,n);return;case 2:!this.c&&(this.c=new xl((Tn(),No),Yc,this,2)),_V(this.c,n);return;case 3:!this.a&&(this.a=new Ls(this,0)),_8(ku(this.a,(Gi(),bF))),!this.a&&(this.a=new Ls(this,0)),F_(ku(this.a,bF),l(n,16));return;case 4:!this.a&&(this.a=new Ls(this,0)),_8(ku(this.a,(Gi(),mF))),!this.a&&(this.a=new Ls(this,0)),F_(ku(this.a,mF),l(n,16));return;case 5:!this.a&&(this.a=new Ls(this,0)),_8(ku(this.a,(Gi(),VM))),!this.a&&(this.a=new Ls(this,0)),F_(ku(this.a,VM),l(n,16));return;case 6:!this.a&&(this.a=new Ls(this,0)),_8(ku(this.a,(Gi(),UM))),!this.a&&(this.a=new Ls(this,0)),F_(ku(this.a,UM),l(n,16));return}uf(this,t-yr((Gi(),C3)),Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():C3,t),n)},h.ii=function(){return Gi(),C3},h.ki=function(t){switch(t){case 0:!this.a&&(this.a=new Ls(this,0)),$r(this.a);return;case 1:!this.b&&(this.b=new xl((Tn(),No),Yc,this,1)),this.b.c.$b();return;case 2:!this.c&&(this.c=new xl((Tn(),No),Yc,this,2)),this.c.c.$b();return;case 3:!this.a&&(this.a=new Ls(this,0)),_8(ku(this.a,(Gi(),bF)));return;case 4:!this.a&&(this.a=new Ls(this,0)),_8(ku(this.a,(Gi(),mF)));return;case 5:!this.a&&(this.a=new Ls(this,0)),_8(ku(this.a,(Gi(),VM)));return;case 6:!this.a&&(this.a=new Ls(this,0)),_8(ku(this.a,(Gi(),UM)));return}cf(this,t-yr((Gi(),C3)),Mn(this.j&2?(!this.k&&(this.k=new Sf),this.k).Nk():C3,t))},h.Ib=function(){var t;return this.j&4?g0(this):(t=new Af(g0(this)),t.a+=" (mixed: ",O_(t,this.a),t.a+=")",t.a)},I(ea,"XMLTypeDocumentRootImpl",683),D(2028,720,{110:1,94:1,93:1,480:1,155:1,58:1,114:1,54:1,99:1,158:1,119:1,120:1,2122:1},uk),h.ri=function(t,n){switch(t.hk()){case 7:case 8:case 9:case 10:case 16:case 22:case 23:case 24:case 25:case 26:case 32:case 33:case 34:case 36:case 37:case 44:case 45:case 50:case 51:case 53:case 55:case 56:case 57:case 58:case 60:case 61:case 4:return n==null?null:xc(n);case 19:case 28:case 29:case 35:case 38:case 39:case 41:case 46:case 52:case 54:case 5:return ei(n);case 6:return hfn(l(n,195));case 12:case 47:case 49:case 11:return Lvt(this,t,n);case 13:return n==null?null:kLn(l(n,247));case 15:case 14:return n==null?null:_gn(ze(Ge(n)));case 17:return Sgt((Gi(),n));case 18:return Sgt(n);case 21:case 20:return n==null?null:Agn(l(n,161).a);case 27:return ffn(l(n,195));case 30:return $dt((Gi(),l(n,15)));case 31:return $dt(l(n,15));case 40:return gfn((Gi(),n));case 42:return _gt((Gi(),n));case 43:return _gt(n);case 59:case 48:return dfn((Gi(),n));default:throw ue(new Yn(yT+t.xe()+t3))}},h.si=function(t){var n,r,a,o,f;switch(t.G==-1&&(t.G=(r=Ah(t),r?f2(r.vi(),t):-1)),t.G){case 0:return n=new zwe,n;case 1:return a=new yre,a;case 2:return o=new fJe,o;case 3:return f=new dJe,f;default:throw ue(new Yn(qfe+t.zb+t3))}},h.ti=function(t,n){var r,a,o,f,g,w,E,C,L,B,z,V,J,te,fe,Te;switch(t.hk()){case 5:case 52:case 4:return n;case 6:return y6n(n);case 8:case 7:return n==null?null:axn(n);case 9:return n==null?null:fN(Oh((a=Tu(n,!0),a.length>0&&(Xn(0,a.length),a.charCodeAt(0)==43)?(Xn(1,a.length+1),a.substr(1)):a),-128,127)<<24>>24);case 10:return n==null?null:fN(Oh((o=Tu(n,!0),o.length>0&&(Xn(0,o.length),o.charCodeAt(0)==43)?(Xn(1,o.length+1),o.substr(1)):o),-128,127)<<24>>24);case 11:return ei(Kw(this,(Gi(),aAt),n));case 12:return ei(Kw(this,(Gi(),oAt),n));case 13:return n==null?null:new h3e(Tu(n,!0));case 15:case 14:return LTn(n);case 16:return ei(Kw(this,(Gi(),cAt),n));case 17:return q1t((Gi(),n));case 18:return q1t(n);case 28:case 29:case 35:case 38:case 39:case 41:case 54:case 19:return Tu(n,!0);case 21:case 20:return jTn(n);case 22:return ei(Kw(this,(Gi(),uAt),n));case 23:return ei(Kw(this,(Gi(),lAt),n));case 24:return ei(Kw(this,(Gi(),hAt),n));case 25:return ei(Kw(this,(Gi(),fAt),n));case 26:return ei(Kw(this,(Gi(),dAt),n));case 27:return c6n(n);case 30:return H1t((Gi(),n));case 31:return H1t(n);case 32:return n==null?null:pt(Oh((L=Tu(n,!0),L.length>0&&(Xn(0,L.length),L.charCodeAt(0)==43)?(Xn(1,L.length+1),L.substr(1)):L),lo,Ii));case 33:return n==null?null:new ob((B=Tu(n,!0),B.length>0&&(Xn(0,B.length),B.charCodeAt(0)==43)?(Xn(1,B.length+1),B.substr(1)):B));case 34:return n==null?null:pt(Oh((z=Tu(n,!0),z.length>0&&(Xn(0,z.length),z.charCodeAt(0)==43)?(Xn(1,z.length+1),z.substr(1)):z),lo,Ii));case 36:return n==null?null:ap(KU((V=Tu(n,!0),V.length>0&&(Xn(0,V.length),V.charCodeAt(0)==43)?(Xn(1,V.length+1),V.substr(1)):V)));case 37:return n==null?null:ap(KU((J=Tu(n,!0),J.length>0&&(Xn(0,J.length),J.charCodeAt(0)==43)?(Xn(1,J.length+1),J.substr(1)):J)));case 40:return s7n((Gi(),n));case 42:return V1t((Gi(),n));case 43:return V1t(n);case 44:return n==null?null:new ob((te=Tu(n,!0),te.length>0&&(Xn(0,te.length),te.charCodeAt(0)==43)?(Xn(1,te.length+1),te.substr(1)):te));case 45:return n==null?null:new ob((fe=Tu(n,!0),fe.length>0&&(Xn(0,fe.length),fe.charCodeAt(0)==43)?(Xn(1,fe.length+1),fe.substr(1)):fe));case 46:return Tu(n,!1);case 47:return ei(Kw(this,(Gi(),gAt),n));case 59:case 48:return i7n((Gi(),n));case 49:return ei(Kw(this,(Gi(),pAt),n));case 50:return n==null?null:_E(Oh((Te=Tu(n,!0),Te.length>0&&(Xn(0,Te.length),Te.charCodeAt(0)==43)?(Xn(1,Te.length+1),Te.substr(1)):Te),JG,32767)<<16>>16);case 51:return n==null?null:_E(Oh((f=Tu(n,!0),f.length>0&&(Xn(0,f.length),f.charCodeAt(0)==43)?(Xn(1,f.length+1),f.substr(1)):f),JG,32767)<<16>>16);case 53:return ei(Kw(this,(Gi(),bAt),n));case 55:return n==null?null:_E(Oh((g=Tu(n,!0),g.length>0&&(Xn(0,g.length),g.charCodeAt(0)==43)?(Xn(1,g.length+1),g.substr(1)):g),JG,32767)<<16>>16);case 56:return n==null?null:_E(Oh((w=Tu(n,!0),w.length>0&&(Xn(0,w.length),w.charCodeAt(0)==43)?(Xn(1,w.length+1),w.substr(1)):w),JG,32767)<<16>>16);case 57:return n==null?null:ap(KU((E=Tu(n,!0),E.length>0&&(Xn(0,E.length),E.charCodeAt(0)==43)?(Xn(1,E.length+1),E.substr(1)):E)));case 58:return n==null?null:ap(KU((C=Tu(n,!0),C.length>0&&(Xn(0,C.length),C.charCodeAt(0)==43)?(Xn(1,C.length+1),C.substr(1)):C)));case 60:return n==null?null:pt(Oh((r=Tu(n,!0),r.length>0&&(Xn(0,r.length),r.charCodeAt(0)==43)?(Xn(1,r.length+1),r.substr(1)):r),lo,Ii));case 61:return n==null?null:pt(Oh(Tu(n,!0),lo,Ii));default:throw ue(new Yn(yT+t.xe()+t3))}};var vAt,GPe,wAt,KPe;I(ea,"XMLTypeFactoryImpl",2028),D(594,184,{110:1,94:1,93:1,155:1,197:1,58:1,241:1,114:1,54:1,99:1,158:1,184:1,119:1,120:1,690:1,2044:1,594:1},dat),h.N=!1,h.O=!1;var yAt=!1;I(ea,"XMLTypePackageImpl",594),D(1961,1,{851:1},lk),h.Kk=function(){return xke(),LAt},I(ea,"XMLTypePackageImpl/1",1961),D(1970,1,yi,qS),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/10",1970),D(1971,1,yi,mre),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/11",1971),D(1972,1,yi,vre),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/12",1972),D(1973,1,yi,p8),h.fk=function(t){return fy(t)},h.gk=function(t){return We(ta,dt,345,t,7,1)},I(ea,"XMLTypePackageImpl/13",1973),D(1974,1,yi,R$),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/14",1974),D(1975,1,yi,j$),h.fk=function(t){return De(t,15)},h.gk=function(t){return We(mf,Qy,15,t,0,1)},I(ea,"XMLTypePackageImpl/15",1975),D(1976,1,yi,wre),h.fk=function(t){return De(t,15)},h.gk=function(t){return We(mf,Qy,15,t,0,1)},I(ea,"XMLTypePackageImpl/16",1976),D(1977,1,yi,$$),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/17",1977),D(1978,1,yi,z$),h.fk=function(t){return De(t,161)},h.gk=function(t){return We(_T,dt,161,t,0,1)},I(ea,"XMLTypePackageImpl/18",1978),D(1979,1,yi,NI),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/19",1979),D(1962,1,yi,xre),h.fk=function(t){return De(t,857)},h.gk=function(t){return We(gF,Rn,857,t,0,1)},I(ea,"XMLTypePackageImpl/2",1962),D(1980,1,yi,HS),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/20",1980),D(1981,1,yi,kre),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/21",1981),D(1982,1,yi,Ere),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/22",1982),D(1983,1,yi,Tre),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/23",1983),D(1984,1,yi,Cre),h.fk=function(t){return De(t,195)},h.gk=function(t){return We(Al,dt,195,t,0,2)},I(ea,"XMLTypePackageImpl/24",1984),D(1985,1,yi,Sre),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/25",1985),D(1986,1,yi,q$),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/26",1986),D(1987,1,yi,_re),h.fk=function(t){return De(t,15)},h.gk=function(t){return We(mf,Qy,15,t,0,1)},I(ea,"XMLTypePackageImpl/27",1987),D(1988,1,yi,Are),h.fk=function(t){return De(t,15)},h.gk=function(t){return We(mf,Qy,15,t,0,1)},I(ea,"XMLTypePackageImpl/28",1988),D(1989,1,yi,Lre),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/29",1989),D(1963,1,yi,H$),h.fk=function(t){return De(t,681)},h.gk=function(t){return We(AY,Rn,2119,t,0,1)},I(ea,"XMLTypePackageImpl/3",1963),D(1990,1,yi,Mre),h.fk=function(t){return De(t,17)},h.gk=function(t){return We(ro,dt,17,t,0,1)},I(ea,"XMLTypePackageImpl/30",1990),D(1991,1,yi,Dre),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/31",1991),D(1992,1,yi,VS),h.fk=function(t){return De(t,168)},h.gk=function(t){return We(r3,dt,168,t,0,1)},I(ea,"XMLTypePackageImpl/32",1992),D(1993,1,yi,Ire),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/33",1993),D(1994,1,yi,Ore),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/34",1994),D(1995,1,yi,Nre),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/35",1995),D(1996,1,yi,Pre),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/36",1996),D(1997,1,yi,Bre),h.fk=function(t){return De(t,15)},h.gk=function(t){return We(mf,Qy,15,t,0,1)},I(ea,"XMLTypePackageImpl/37",1997),D(1998,1,yi,Fre),h.fk=function(t){return De(t,15)},h.gk=function(t){return We(mf,Qy,15,t,0,1)},I(ea,"XMLTypePackageImpl/38",1998),D(1999,1,yi,V$),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/39",1999),D(1964,1,yi,Rre),h.fk=function(t){return De(t,682)},h.gk=function(t){return We(pF,Rn,2120,t,0,1)},I(ea,"XMLTypePackageImpl/4",1964),D(2e3,1,yi,U$),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/40",2e3),D(2001,1,yi,jre),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/41",2001),D(2002,1,yi,PI),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/42",2002),D(2003,1,yi,$re),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/43",2003),D(2004,1,yi,G$),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/44",2004),D(2005,1,yi,zre),h.fk=function(t){return De(t,191)},h.gk=function(t){return We(i3,dt,191,t,0,1)},I(ea,"XMLTypePackageImpl/45",2005),D(2006,1,yi,K$),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/46",2006),D(2007,1,yi,qre),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/47",2007),D(2008,1,yi,W$),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/48",2008),D(2009,1,yi,Y$),h.fk=function(t){return De(t,191)},h.gk=function(t){return We(i3,dt,191,t,0,1)},I(ea,"XMLTypePackageImpl/49",2009),D(1965,1,yi,X$),h.fk=function(t){return De(t,683)},h.gk=function(t){return We(VPe,Rn,2121,t,0,1)},I(ea,"XMLTypePackageImpl/5",1965),D(2010,1,yi,BI),h.fk=function(t){return De(t,168)},h.gk=function(t){return We(r3,dt,168,t,0,1)},I(ea,"XMLTypePackageImpl/50",2010),D(2011,1,yi,w5),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/51",2011),D(2012,1,yi,US),h.fk=function(t){return De(t,17)},h.gk=function(t){return We(ro,dt,17,t,0,1)},I(ea,"XMLTypePackageImpl/52",2012),D(1966,1,yi,S1),h.fk=function(t){return Ia(t)},h.gk=function(t){return We(zt,dt,2,t,6,1)},I(ea,"XMLTypePackageImpl/6",1966),D(1967,1,yi,Q$),h.fk=function(t){return De(t,195)},h.gk=function(t){return We(Al,dt,195,t,0,2)},I(ea,"XMLTypePackageImpl/7",1967),D(1968,1,yi,hk),h.fk=function(t){return hy(t)},h.gk=function(t){return We(Ns,dt,485,t,8,1)},I(ea,"XMLTypePackageImpl/8",1968),D(1969,1,yi,FI),h.fk=function(t){return De(t,222)},h.gk=function(t){return We(jx,dt,222,t,0,1)},I(ea,"XMLTypePackageImpl/9",1969);var nd,N2,GM,LY,ye;D(55,63,lp,ri),I(y2,"RegEx/ParseException",55),D(836,1,{},J$),h.bm=function(t){return tr*16)throw ue(new ri(ai((Jr(),H4t))));r=r*16+o}while(!0);if(this.a!=125)throw ue(new ri(ai((Jr(),V4t))));if(r>TT)throw ue(new ri(ai((Jr(),U4t))));t=r}else{if(o=0,this.c!=0||(o=Wm(this.a))<0)throw ue(new ri(ai((Jr(),w2))));if(r=o,Li(this),this.c!=0||(o=Wm(this.a))<0)throw ue(new ri(ai((Jr(),w2))));r=r*16+o,t=r}break;case 117:if(a=0,Li(this),this.c!=0||(a=Wm(this.a))<0)throw ue(new ri(ai((Jr(),w2))));if(n=a,Li(this),this.c!=0||(a=Wm(this.a))<0)throw ue(new ri(ai((Jr(),w2))));if(n=n*16+a,Li(this),this.c!=0||(a=Wm(this.a))<0)throw ue(new ri(ai((Jr(),w2))));if(n=n*16+a,Li(this),this.c!=0||(a=Wm(this.a))<0)throw ue(new ri(ai((Jr(),w2))));n=n*16+a,t=n;break;case 118:if(Li(this),this.c!=0||(a=Wm(this.a))<0)throw ue(new ri(ai((Jr(),w2))));if(n=a,Li(this),this.c!=0||(a=Wm(this.a))<0)throw ue(new ri(ai((Jr(),w2))));if(n=n*16+a,Li(this),this.c!=0||(a=Wm(this.a))<0)throw ue(new ri(ai((Jr(),w2))));if(n=n*16+a,Li(this),this.c!=0||(a=Wm(this.a))<0)throw ue(new ri(ai((Jr(),w2))));if(n=n*16+a,Li(this),this.c!=0||(a=Wm(this.a))<0)throw ue(new ri(ai((Jr(),w2))));if(n=n*16+a,Li(this),this.c!=0||(a=Wm(this.a))<0)throw ue(new ri(ai((Jr(),w2))));if(n=n*16+a,n>TT)throw ue(new ri(ai((Jr(),"parser.descappe.4"))));t=n;break;case 65:case 90:case 122:throw ue(new ri(ai((Jr(),G4t))))}return t},h.dm=function(t){var n,r;switch(t){case 100:r=(this.e&32)==32?_b("Nd",!0):(Di(),MY);break;case 68:r=(this.e&32)==32?_b("Nd",!1):(Di(),ZPe);break;case 119:r=(this.e&32)==32?_b("IsWord",!0):(Di(),lC);break;case 87:r=(this.e&32)==32?_b("IsWord",!1):(Di(),tBe);break;case 115:r=(this.e&32)==32?_b("IsSpace",!0):(Di(),l9);break;case 83:r=(this.e&32)==32?_b("IsSpace",!1):(Di(),eBe);break;default:throw ue(new Ac((n=t,G5t+n.toString(16))))}return r},h.em=function(t){var n,r,a,o,f,g,w,E,C,L,B,z;for(this.b=1,Li(this),n=null,this.c==0&&this.a==94?(Li(this),t?L=(Di(),Di(),new _h(5)):(n=(Di(),Di(),new _h(4)),Eu(n,0,TT),L=new _h(4))):L=(Di(),Di(),new _h(4)),o=!0;(z=this.c)!=1&&!(z==0&&this.a==93&&!o);){if(o=!1,r=this.a,a=!1,z==10)switch(r){case 100:case 68:case 119:case 87:case 115:case 83:Ky(L,this.dm(r)),a=!0;break;case 105:case 73:case 99:case 67:r=this.um(L,r),r<0&&(a=!0);break;case 112:case 80:if(B=w9e(this,r),!B)throw ue(new ri(ai((Jr(),t0e))));Ky(L,B),a=!0;break;default:r=this.cm()}else if(z==20){if(g=Nk(this.i,58,this.d),g<0)throw ue(new ri(ai((Jr(),kSe))));if(w=!0,co(this.i,this.d)==94&&(++this.d,w=!1),f=tf(this.i,this.d,g),E=vlt(f,w,(this.e&512)==512),!E)throw ue(new ri(ai((Jr(),R4t))));if(Ky(L,E),a=!0,g+1>=this.j||co(this.i,g+1)!=93)throw ue(new ri(ai((Jr(),kSe))));this.d=g+2}if(Li(this),!a)if(this.c!=0||this.a!=45)Eu(L,r,r);else{if(Li(this),(z=this.c)==1)throw ue(new ri(ai((Jr(),UG))));z==0&&this.a==93?(Eu(L,r,r),Eu(L,45,45)):(C=this.a,z==10&&(C=this.cm()),Li(this),Eu(L,r,C))}(this.e&m0)==m0&&this.c==0&&this.a==44&&Li(this)}if(this.c==1)throw ue(new ri(ai((Jr(),UG))));return n&&(nL(n,L),L=n),c6(L),eL(L),this.b=0,Li(this),L},h.fm=function(){var t,n,r,a;for(r=this.em(!1);(a=this.c)!=7;)if(t=this.a,a==0&&(t==45||t==38)||a==4){if(Li(this),this.c!=9)throw ue(new ri(ai((Jr(),$4t))));if(n=this.em(!1),a==4)Ky(r,n);else if(t==45)nL(r,n);else if(t==38)Cvt(r,n);else throw ue(new Ac("ASSERT"))}else throw ue(new ri(ai((Jr(),z4t))));return Li(this),r},h.gm=function(){var t,n;return t=this.a-48,n=(Di(),Di(),new coe(12,null,t)),!this.g&&(this.g=new jz),Rz(this.g,new Ewe(t)),Li(this),n},h.hm=function(){return Li(this),Di(),EAt},h.im=function(){return Li(this),Di(),kAt},h.jm=function(){throw ue(new ri(ai((Jr(),bf))))},h.km=function(){throw ue(new ri(ai((Jr(),bf))))},h.lm=function(){return Li(this),Eyn()},h.mm=function(){return Li(this),Di(),CAt},h.nm=function(){return Li(this),Di(),_At},h.om=function(){var t;if(this.d>=this.j||((t=co(this.i,this.d++))&65504)!=64)throw ue(new ri(ai((Jr(),P4t))));return Li(this),Di(),Di(),new ng(0,t-64)},h.pm=function(){return Li(this),SAn()},h.qm=function(){return Li(this),Di(),AAt},h.rm=function(){var t;return t=(Di(),Di(),new ng(0,105)),Li(this),t},h.sm=function(){return Li(this),Di(),SAt},h.tm=function(){return Li(this),Di(),TAt},h.um=function(t,n){return this.cm()},h.vm=function(){return Li(this),Di(),QPe},h.wm=function(){var t,n,r,a,o;if(this.d+1>=this.j)throw ue(new ri(ai((Jr(),I4t))));if(a=-1,n=null,t=co(this.i,this.d),49<=t&&t<=57){if(a=t-48,!this.g&&(this.g=new jz),Rz(this.g,new Ewe(a)),++this.d,co(this.i,this.d)!=41)throw ue(new ri(ai((Jr(),ov))));++this.d}else switch(t==63&&--this.d,Li(this),n=Gke(this),n.e){case 20:case 21:case 22:case 23:break;case 8:if(this.c!=7)throw ue(new ri(ai((Jr(),ov))));break;default:throw ue(new ri(ai((Jr(),O4t))))}if(Li(this),o=jw(this),r=null,o.e==2){if(o.Pm()!=2)throw ue(new ri(ai((Jr(),N4t))));r=o.Lm(1),o=o.Lm(0)}if(this.c!=7)throw ue(new ri(ai((Jr(),ov))));return Li(this),Di(),Di(),new Zlt(a,n,o,r)},h.xm=function(){return Li(this),Di(),JPe},h.ym=function(){var t;if(Li(this),t=bH(24,jw(this)),this.c!=7)throw ue(new ri(ai((Jr(),ov))));return Li(this),t},h.zm=function(){var t;if(Li(this),t=bH(20,jw(this)),this.c!=7)throw ue(new ri(ai((Jr(),ov))));return Li(this),t},h.Am=function(){var t;if(Li(this),t=bH(22,jw(this)),this.c!=7)throw ue(new ri(ai((Jr(),ov))));return Li(this),t},h.Bm=function(){var t,n,r,a,o;for(t=0,r=0,n=-1;this.d=this.j)throw ue(new ri(ai((Jr(),ySe))));if(n==45){for(++this.d;this.d=this.j)throw ue(new ri(ai((Jr(),ySe))))}if(n==58){if(++this.d,Li(this),a=Wst(jw(this),t,r),this.c!=7)throw ue(new ri(ai((Jr(),ov))));Li(this)}else if(n==41)++this.d,Li(this),a=Wst(jw(this),t,r);else throw ue(new ri(ai((Jr(),D4t))));return a},h.Cm=function(){var t;if(Li(this),t=bH(21,jw(this)),this.c!=7)throw ue(new ri(ai((Jr(),ov))));return Li(this),t},h.Dm=function(){var t;if(Li(this),t=bH(23,jw(this)),this.c!=7)throw ue(new ri(ai((Jr(),ov))));return Li(this),t},h.Em=function(){var t,n;if(Li(this),t=this.f++,n=Bae(jw(this),t),this.c!=7)throw ue(new ri(ai((Jr(),ov))));return Li(this),n},h.Fm=function(){var t;if(Li(this),t=Bae(jw(this),0),this.c!=7)throw ue(new ri(ai((Jr(),ov))));return Li(this),t},h.Gm=function(t){return Li(this),this.c==5?(Li(this),oH(t,(Di(),Di(),new Ty(9,t)))):oH(t,(Di(),Di(),new Ty(3,t)))},h.Hm=function(t){var n;return Li(this),n=(Di(),Di(),new B_(2)),this.c==5?(Li(this),Qm(n,WM),Qm(n,t)):(Qm(n,t),Qm(n,WM)),n},h.Im=function(t){return Li(this),this.c==5?(Li(this),Di(),Di(),new Ty(9,t)):(Di(),Di(),new Ty(3,t))},h.a=0,h.b=0,h.c=0,h.d=0,h.e=0,h.f=1,h.g=null,h.j=0,I(y2,"RegEx/RegexParser",836),D(1947,836,{},gJe),h.bm=function(t){return!1},h.cm=function(){return eke(this)},h.dm=function(t){return YE(t)},h.em=function(t){return ywt(this)},h.fm=function(){throw ue(new ri(ai((Jr(),bf))))},h.gm=function(){throw ue(new ri(ai((Jr(),bf))))},h.hm=function(){throw ue(new ri(ai((Jr(),bf))))},h.im=function(){throw ue(new ri(ai((Jr(),bf))))},h.jm=function(){return Li(this),YE(67)},h.km=function(){return Li(this),YE(73)},h.lm=function(){throw ue(new ri(ai((Jr(),bf))))},h.mm=function(){throw ue(new ri(ai((Jr(),bf))))},h.nm=function(){throw ue(new ri(ai((Jr(),bf))))},h.om=function(){return Li(this),YE(99)},h.pm=function(){throw ue(new ri(ai((Jr(),bf))))},h.qm=function(){throw ue(new ri(ai((Jr(),bf))))},h.rm=function(){return Li(this),YE(105)},h.sm=function(){throw ue(new ri(ai((Jr(),bf))))},h.tm=function(){throw ue(new ri(ai((Jr(),bf))))},h.um=function(t,n){return Ky(t,YE(n)),-1},h.vm=function(){return Li(this),Di(),Di(),new ng(0,94)},h.wm=function(){throw ue(new ri(ai((Jr(),bf))))},h.xm=function(){return Li(this),Di(),Di(),new ng(0,36)},h.ym=function(){throw ue(new ri(ai((Jr(),bf))))},h.zm=function(){throw ue(new ri(ai((Jr(),bf))))},h.Am=function(){throw ue(new ri(ai((Jr(),bf))))},h.Bm=function(){throw ue(new ri(ai((Jr(),bf))))},h.Cm=function(){throw ue(new ri(ai((Jr(),bf))))},h.Dm=function(){throw ue(new ri(ai((Jr(),bf))))},h.Em=function(){var t;if(Li(this),t=Bae(jw(this),0),this.c!=7)throw ue(new ri(ai((Jr(),ov))));return Li(this),t},h.Fm=function(){throw ue(new ri(ai((Jr(),bf))))},h.Gm=function(t){return Li(this),oH(t,(Di(),Di(),new Ty(3,t)))},h.Hm=function(t){var n;return Li(this),n=(Di(),Di(),new B_(2)),Qm(n,t),Qm(n,WM),n},h.Im=function(t){return Li(this),Di(),Di(),new Ty(3,t)};var l7=null,cC=null;I(y2,"RegEx/ParserForXMLSchema",1947),D(122,1,CT,Xv),h.Jm=function(t){throw ue(new Ac("Not supported."))},h.Km=function(){return-1},h.Lm=function(t){return null},h.Mm=function(){return null},h.Nm=function(t){},h.Om=function(t){},h.Pm=function(){return 0},h.Ib=function(){return this.Qm(0)},h.Qm=function(t){return this.e==11?".":""},h.e=0;var WPe,uC,KM,xAt,YPe,P4=null,MY,cpe=null,XPe,WM,upe=null,QPe,JPe,ZPe,eBe,tBe,kAt,l9,EAt,TAt,CAt,SAt,lC,_At,AAt,BOn=I(y2,"RegEx/Token",122);D(138,122,{3:1,138:1,122:1},_h),h.Qm=function(t){var n,r,a;if(this.e==4)if(this==XPe)r=".";else if(this==MY)r="\\d";else if(this==lC)r="\\w";else if(this==l9)r="\\s";else{for(a=new Up,a.a+="[",n=0;n0&&(a.a+=","),this.b[n]===this.b[n+1]?Xo(a,gP(this.b[n])):(Xo(a,gP(this.b[n])),a.a+="-",Xo(a,gP(this.b[n+1])));a.a+="]",r=a.a}else if(this==ZPe)r="\\D";else if(this==tBe)r="\\W";else if(this==eBe)r="\\S";else{for(a=new Up,a.a+="[^",n=0;n0&&(a.a+=","),this.b[n]===this.b[n+1]?Xo(a,gP(this.b[n])):(Xo(a,gP(this.b[n])),a.a+="-",Xo(a,gP(this.b[n+1])));a.a+="]",r=a.a}return r},h.a=!1,h.c=!1,I(y2,"RegEx/RangeToken",138),D(592,1,{592:1},Ewe),h.a=0,I(y2,"RegEx/RegexParser/ReferencePosition",592),D(591,1,{3:1,591:1},LZe),h.Fb=function(t){var n;return t==null||!De(t,591)?!1:(n=l(t,591),vn(this.b,n.b)&&this.a==n.a)},h.Hb=function(){return s2(this.b+"/"+K9e(this.a))},h.Ib=function(){return this.c.Qm(this.a)},h.a=0,I(y2,"RegEx/RegularExpression",591),D(228,122,CT,ng),h.Km=function(){return this.a},h.Qm=function(t){var n,r,a;switch(this.e){case 0:switch(this.a){case 124:case 42:case 43:case 63:case 40:case 41:case 46:case 91:case 123:case 92:a="\\"+hae(this.a&Zs);break;case 12:a="\\f";break;case 10:a="\\n";break;case 13:a="\\r";break;case 9:a="\\t";break;case 27:a="\\e";break;default:this.a>=Io?(r=(n=this.a>>>0,"0"+n.toString(16)),a="\\v"+tf(r,r.length-6,r.length)):a=""+hae(this.a&Zs)}break;case 8:this==QPe||this==JPe?a=""+hae(this.a&Zs):a="\\"+hae(this.a&Zs);break;default:a=null}return a},h.a=0,I(y2,"RegEx/Token/CharToken",228),D(318,122,CT,Ty),h.Lm=function(t){return this.a},h.Nm=function(t){this.b=t},h.Om=function(t){this.c=t},h.Pm=function(){return 1},h.Qm=function(t){var n;if(this.e==3)if(this.c<0&&this.b<0)n=this.a.Qm(t)+"*";else if(this.c==this.b)n=this.a.Qm(t)+"{"+this.c+"}";else if(this.c>=0&&this.b>=0)n=this.a.Qm(t)+"{"+this.c+","+this.b+"}";else if(this.c>=0&&this.b<0)n=this.a.Qm(t)+"{"+this.c+",}";else throw ue(new Ac("Token#toString(): CLOSURE "+this.c+Co+this.b));else if(this.c<0&&this.b<0)n=this.a.Qm(t)+"*?";else if(this.c==this.b)n=this.a.Qm(t)+"{"+this.c+"}?";else if(this.c>=0&&this.b>=0)n=this.a.Qm(t)+"{"+this.c+","+this.b+"}?";else if(this.c>=0&&this.b<0)n=this.a.Qm(t)+"{"+this.c+",}?";else throw ue(new Ac("Token#toString(): NONGREEDYCLOSURE "+this.c+Co+this.b));return n},h.b=0,h.c=0,I(y2,"RegEx/Token/ClosureToken",318),D(837,122,CT,f5e),h.Lm=function(t){return t==0?this.a:this.b},h.Pm=function(){return 2},h.Qm=function(t){var n;return this.b.e==3&&this.b.Lm(0)==this.a?n=this.a.Qm(t)+"+":this.b.e==9&&this.b.Lm(0)==this.a?n=this.a.Qm(t)+"+?":n=this.a.Qm(t)+(""+this.b.Qm(t)),n},I(y2,"RegEx/Token/ConcatToken",837),D(1945,122,CT,Zlt),h.Lm=function(t){if(t==0)return this.d;if(t==1)return this.b;throw ue(new Ac("Internal Error: "+t))},h.Pm=function(){return this.b?2:1},h.Qm=function(t){var n;return this.c>0?n="(?("+this.c+")":this.a.e==8?n="(?("+this.a+")":n="(?"+this.a,this.b?n+=this.d+"|"+this.b+")":n+=this.d+")",n},h.c=0,I(y2,"RegEx/Token/ConditionToken",1945),D(1946,122,CT,Hot),h.Lm=function(t){return this.b},h.Pm=function(){return 1},h.Qm=function(t){return"(?"+(this.a==0?"":K9e(this.a))+(this.c==0?"":K9e(this.c))+":"+this.b.Qm(t)+")"},h.a=0,h.c=0,I(y2,"RegEx/Token/ModifierToken",1946),D(838,122,CT,k5e),h.Lm=function(t){return this.a},h.Pm=function(){return 1},h.Qm=function(t){var n;switch(n=null,this.e){case 6:this.b==0?n="(?:"+this.a.Qm(t)+")":n="("+this.a.Qm(t)+")";break;case 20:n="(?="+this.a.Qm(t)+")";break;case 21:n="(?!"+this.a.Qm(t)+")";break;case 22:n="(?<="+this.a.Qm(t)+")";break;case 23:n="(?"+this.a.Qm(t)+")"}return n},h.b=0,I(y2,"RegEx/Token/ParenToken",838),D(530,122,{3:1,122:1,530:1},coe),h.Mm=function(){return this.b},h.Qm=function(t){return this.e==12?"\\"+this.a:vTn(this.b)},h.a=0,I(y2,"RegEx/Token/StringToken",530),D(477,122,CT,B_),h.Jm=function(t){Qm(this,t)},h.Lm=function(t){return l(xw(this.a,t),122)},h.Pm=function(){return this.a?this.a.a.c.length:0},h.Qm=function(t){var n,r,a,o,f;if(this.e==1){if(this.a.a.c.length==2)n=l(xw(this.a,0),122),r=l(xw(this.a,1),122),r.e==3&&r.Lm(0)==n?o=n.Qm(t)+"+":r.e==9&&r.Lm(0)==n?o=n.Qm(t)+"+?":o=n.Qm(t)+(""+r.Qm(t));else{for(f=new Up,a=0;a=this.c.b:this.a<=this.c.b},h.Sb=function(){return this.b>0},h.Tb=function(){return this.b},h.Vb=function(){return this.b-1},h.Qb=function(){throw ue(new Hp(Z5t))},h.a=0,h.b=0,I(zSe,"ExclusiveRange/RangeIterator",258);var kf=Gk(GG,"C"),Vr=Gk(LL,"I"),ih=Gk(Cx,"Z"),nm=Gk(ML,"J"),Al=Gk(SL,"B"),Na=Gk(_L,"D"),B4=Gk(AL,"F"),h7=Gk(DL,"S"),FOn=ks("org.eclipse.elk.core.labels","ILabelManager"),nBe=ks(So,"DiagnosticChain"),rBe=ks(_5t,"ResourceSet"),iBe=I(So,"InvocationTargetException",null),MAt=(Hz(),Qmn),DAt=DAt=q8n;Vwn($cn),$wn("permProps",[[["locale","default"],[e6t,"gecko1_8"]],[["locale","default"],[e6t,"safari"]]]),DAt(null,"elk",null)}).call(this)}).call(this,typeof Ag<"u"?Ag:typeof self<"u"?self:typeof window<"u"?window:{})},{}],3:[function(u,d,p){function v(A,P){if(!(A instanceof P))throw new TypeError("Cannot call a class as a function")}function b(A,P){if(!A)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return P&&(typeof P=="object"||typeof P=="function")?P:A}function y(A,P){if(typeof P!="function"&&P!==null)throw new TypeError("Super expression must either be null or a function, not "+typeof P);A.prototype=Object.create(P&&P.prototype,{constructor:{value:A,enumerable:!1,writable:!0,configurable:!0}}),P&&(Object.setPrototypeOf?Object.setPrototypeOf(A,P):A.__proto__=P)}var T=u("./elk-api.js").default,_=function(A){y(P,A);function P(){var R=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};v(this,P);var F=Object.assign({},R),j=!1;try{u.resolve("web-worker"),j=!0}catch{}if(R.workerUrl)if(j){var K=u("web-worker");F.workerFactory=function(oe){return new K(oe)}}else console.warn(`Web worker requested but 'web-worker' package not installed. -Consider installing the package or pass your own 'workerFactory' to ELK's constructor. -... Falling back to non-web worker version.`);if(!F.workerFactory){var ee=u("./elk-worker.min.js"),ie=ee.Worker;F.workerFactory=function(oe){return new ie(oe)}}return b(this,(P.__proto__||Object.getPrototypeOf(P)).call(this,F))}return P}(T);Object.defineProperty(d.exports,"__esModule",{value:!0}),d.exports=_,_.default=_},{"./elk-api.js":1,"./elk-worker.min.js":2,"web-worker":4}],4:[function(u,d,p){d.exports=Worker},{}]},{},[3])(3)})})(HKe);var Can=HKe.exports;const San=hC(Can),VKe=new San;let Hv={};const _an={};let W7={};const Aan=async function(i,s,u,d,p,v,b){const T=u.select(`[id="${s}"]`).insert("g").attr("class","nodes"),_=Object.keys(i);return await Promise.all(_.map(async function(A){const P=i[A];let R="default";P.classes.length>0&&(R=P.classes.join(" ")),R=R+" flowchart-label";const F=om(P.styles);let j=P.text!==void 0?P.text:P.id;const K={width:0,height:0},ee=[{id:P.id+"-west",layoutOptions:{"port.side":"WEST"}},{id:P.id+"-east",layoutOptions:{"port.side":"EAST"}},{id:P.id+"-south",layoutOptions:{"port.side":"SOUTH"}},{id:P.id+"-north",layoutOptions:{"port.side":"NORTH"}}];let ie=0,oe="",pe={};switch(P.type){case"round":ie=5,oe="rect";break;case"square":oe="rect";break;case"diamond":oe="question",pe={portConstraints:"FIXED_SIDE"};break;case"hexagon":oe="hexagon";break;case"odd":oe="rect_left_inv_arrow";break;case"lean_right":oe="lean_right";break;case"lean_left":oe="lean_left";break;case"trapezoid":oe="trapezoid";break;case"inv_trapezoid":oe="inv_trapezoid";break;case"odd_right":oe="rect_left_inv_arrow";break;case"circle":oe="circle";break;case"ellipse":oe="ellipse";break;case"stadium":oe="stadium";break;case"subroutine":oe="subroutine";break;case"cylinder":oe="cylinder";break;case"group":oe="rect";break;case"doublecircle":oe="doublecircle";break;default:oe="rect"}const be={labelStyle:F.labelStyle,shape:oe,labelText:j,labelType:P.labelType,rx:ie,ry:ie,class:R,style:F.style,id:P.id,link:P.link,linkTarget:P.linkTarget,tooltip:p.db.getTooltip(P.id)||"",domId:p.db.lookUpDomId(P.id),haveCallback:P.haveCallback,width:P.type==="group"?500:void 0,dir:P.dir,type:P.type,props:P.props,padding:Vh().flowchart.padding};let ae,ne;if(be.type!=="group")ne=await tJ(T,be,P.dir),ae=ne.node().getBBox();else{d.createElementNS("http://www.w3.org/2000/svg","text");const{shapeSvg:de,bbox:X}=await g1(T,be,void 0,!0);K.width=X.width,K.wrappingWidth=Vh().flowchart.wrappingWidth,K.height=X.height,K.labelNode=de.node(),be.labelData=K}const se={id:P.id,ports:P.type==="diamond"?ee:[],layoutOptions:pe,labelText:j,labelData:K,domId:p.db.lookUpDomId(P.id),width:ae==null?void 0:ae.width,height:ae==null?void 0:ae.height,type:P.type,el:ne,parent:v.parentById[P.id]};W7[be.id]=se})),b},UKe=(i,s,u)=>{const d={TB:{in:{north:"north"},out:{south:"west",west:"east",east:"south"}},LR:{in:{west:"west"},out:{east:"south",south:"north",north:"east"}},RL:{in:{east:"east"},out:{west:"north",north:"south",south:"west"}},BT:{in:{south:"south"},out:{north:"east",east:"west",west:"north"}}};return d.TD=d.TB,d[u][s][i]},GKe=(i,s,u)=>{if(Xe.info("getNextPort",{node:i,edgeDirection:s,graphDirection:u}),!Hv[i])switch(u){case"TB":case"TD":Hv[i]={inPosition:"north",outPosition:"south"};break;case"BT":Hv[i]={inPosition:"south",outPosition:"north"};break;case"RL":Hv[i]={inPosition:"east",outPosition:"west"};break;case"LR":Hv[i]={inPosition:"west",outPosition:"east"};break}const d=s==="in"?Hv[i].inPosition:Hv[i].outPosition;return s==="in"?Hv[i].inPosition=UKe(Hv[i].inPosition,s,u):Hv[i].outPosition=UKe(Hv[i].outPosition,s,u),d},Lan=(i,s)=>{let u=i.start,d=i.end;const p=u,v=d,b=W7[u],y=W7[d];return!b||!y?{source:u,target:d}:(b.type==="diamond"&&(u=`${u}-${GKe(u,"out",s)}`),y.type==="diamond"&&(d=`${d}-${GKe(d,"in",s)}`),{source:u,target:d,sourceId:p,targetId:v})},Man=function(i,s,u,d){Xe.info("abc78 edges = ",i);const p=d.insert("g").attr("class","edgeLabels");let v={},b=s.db.getDirection(),y,T;if(i.defaultStyle!==void 0){const _=om(i.defaultStyle);y=_.style,T=_.labelStyle}return i.forEach(function(_){const A="L-"+_.start+"-"+_.end;v[A]===void 0?(v[A]=0,Xe.info("abc78 new entry",A,v[A])):(v[A]++,Xe.info("abc78 new entry",A,v[A]));let P=A+"-"+v[A];Xe.info("abc78 new link id to be used is",A,P,v[A]);const R="LS-"+_.start,F="LE-"+_.end,j={style:"",labelStyle:""};switch(j.minlen=_.length||1,_.type==="arrow_open"?j.arrowhead="none":j.arrowhead="normal",j.arrowTypeStart="arrow_open",j.arrowTypeEnd="arrow_open",_.type){case"double_arrow_cross":j.arrowTypeStart="arrow_cross";case"arrow_cross":j.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":j.arrowTypeStart="arrow_point";case"arrow_point":j.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":j.arrowTypeStart="arrow_circle";case"arrow_circle":j.arrowTypeEnd="arrow_circle";break}let K="",ee="";switch(_.stroke){case"normal":K="fill:none;",y!==void 0&&(K=y),T!==void 0&&(ee=T),j.thickness="normal",j.pattern="solid";break;case"dotted":j.thickness="normal",j.pattern="dotted",j.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":j.thickness="thick",j.pattern="solid",j.style="stroke-width: 3.5px;fill:none;";break}if(_.style!==void 0){const ne=om(_.style);K=ne.style,ee=ne.labelStyle}j.style=j.style+=K,j.labelStyle=j.labelStyle+=ee,_.interpolate!==void 0?j.curve=Ov(_.interpolate,kp):i.defaultInterpolate!==void 0?j.curve=Ov(i.defaultInterpolate,kp):j.curve=Ov(_an.curve,kp),_.text===void 0?_.style!==void 0&&(j.arrowheadStyle="fill: #333"):(j.arrowheadStyle="fill: #333",j.labelpos="c"),j.labelType=_.labelType,j.label=_.text.replace(ci.lineBreakRegex,` -`),_.style===void 0&&(j.style=j.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),j.labelStyle=j.labelStyle.replace("color:","fill:"),j.id=P,j.classes="flowchart-link "+R+" "+F;const ie=zme(p,j),{source:oe,target:pe,sourceId:be,targetId:ae}=Lan(_,b);Xe.debug("abc78 source and target",oe,pe),u.edges.push({id:"e"+_.start+_.end,sources:[oe],targets:[pe],sourceId:be,targetId:ae,labelEl:ie,labels:[{width:j.width,height:j.height,orgWidth:j.width,orgHeight:j.height,text:j.label,layoutOptions:{"edgeLabels.inline":"true","edgeLabels.placement":"CENTER"}}],edgeData:j})}),u},Dan=function(i,s,u,d,p){let v="";d&&(v=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,v=v.replace(/\(/g,"\\("),v=v.replace(/\)/g,"\\)")),AUe(i,s,v,p,u)},Ian=function(i,s){return Xe.info("Extracting classes"),s.db.getClasses()},Oan=function(i){const s={parentById:{},childrenById:{}},u=i.getSubGraphs();return Xe.info("Subgraphs - ",u),u.forEach(function(d){d.nodes.forEach(function(p){s.parentById[p]=d.id,s.childrenById[d.id]===void 0&&(s.childrenById[d.id]=[]),s.childrenById[d.id].push(p)})}),u.forEach(function(d){d.id,s.parentById[d.id]!==void 0&&s.parentById[d.id]}),s},Nan=function(i,s,u){const d=Tan(i,s,u);if(d===void 0||d==="root")return{x:0,y:0};const p=W7[d].offset;return{x:p.posX,y:p.posY}},Pan=function(i,s,u,d,p,v){const b=Nan(s.sourceId,s.targetId,p),y=s.sections[0].startPoint,T=s.sections[0].endPoint,A=(s.sections[0].bendPoints?s.sections[0].bendPoints:[]).map(pe=>[pe.x+b.x,pe.y+b.y]),P=[[y.x+b.x,y.y+b.y],...A,[T.x+b.x,T.y+b.y]],{x:R,y:F}=_Ue(s.edgeData),j=k7().x(R).y(F).curve(kp),K=i.insert("path").attr("d",j(P)).attr("class","path "+u.classes).attr("fill","none"),ee=i.insert("g").attr("class","edgeLabel"),ie=Ir(ee.node().appendChild(s.labelEl)),oe=ie.node().firstChild.getBoundingClientRect();ie.attr("width",oe.width),ie.attr("height",oe.height),ee.attr("transform",`translate(${s.labels[0].x+b.x}, ${s.labels[0].y+b.y})`),Dan(K,u,d.type,d.arrowMarkerAbsolute,v)},KKe=(i,s)=>{i.forEach(u=>{u.children||(u.children=[]);const d=s.childrenById[u.id];d&&d.forEach(p=>{u.children.push(W7[p])}),KKe(u.children,s)})},Ban=async function(i,s,u,d){var se;d.db.clear(),W7={},Hv={},d.db.setGen("gen-2"),d.parser.parse(i);const p=Ir("body").append("div").attr("style","height:400px").attr("id","cy");let v={id:"root",layoutOptions:{"elk.hierarchyHandling":"INCLUDE_CHILDREN","org.eclipse.elk.padding":"[top=100, left=100, bottom=110, right=110]","elk.layered.spacing.edgeNodeBetweenLayers":"30","elk.direction":"DOWN"},children:[],edges:[]};switch(Xe.info("Drawing flowchart using v3 renderer",VKe),d.db.getDirection()){case"BT":v.layoutOptions["elk.direction"]="UP";break;case"TB":v.layoutOptions["elk.direction"]="DOWN";break;case"LR":v.layoutOptions["elk.direction"]="RIGHT";break;case"RL":v.layoutOptions["elk.direction"]="LEFT";break}const{securityLevel:y,flowchart:T}=Vh();let _;y==="sandbox"&&(_=Ir("#i"+s));const A=Ir(y==="sandbox"?_.nodes()[0].contentDocument.body:"body"),P=y==="sandbox"?_.nodes()[0].contentDocument:document,R=A.select(`[id="${s}"]`);Sme(R,["point","circle","cross"],d.type,s);const j=d.db.getVertices();let K;const ee=d.db.getSubGraphs();Xe.info("Subgraphs - ",ee);for(let de=ee.length-1;de>=0;de--)K=ee[de],d.db.addVertex(K.id,{text:K.title,type:K.labelType},"group",void 0,K.classes,K.dir);const ie=R.insert("g").attr("class","subgraphs"),oe=Oan(d.db);v=await Aan(j,s,A,P,d,oe,v);const pe=R.insert("g").attr("class","edges edgePath"),be=d.db.getEdges();v=Man(be,d,v,R),Object.keys(W7).forEach(de=>{const X=W7[de];X.parent||v.children.push(X),oe.childrenById[de]!==void 0&&(X.labels=[{text:X.labelText,layoutOptions:{"nodeLabels.placement":"[H_CENTER, V_TOP, INSIDE]"},width:X.labelData.width,height:X.labelData.height}],delete X.x,delete X.y,delete X.width,delete X.height)}),KKe(v.children,oe),Xe.info("after layout",JSON.stringify(v,null,2));const ne=await VKe.layout(v);WKe(0,0,ne.children,R,ie,d,0),Xe.info("after layout",ne),(se=ne.edges)==null||se.map(de=>{Pan(pe,de,de.edgeData,d,oe,s)}),y9({},R,T.diagramPadding,T.useMaxWidth),p.remove()},WKe=(i,s,u,d,p,v,b)=>{u.forEach(function(y){if(y)if(W7[y.id].offset={posX:y.x+i,posY:y.y+s,x:i,y:s,depth:b,width:y.width,height:y.height},y.type==="group"){const T=p.insert("g").attr("class","subgraph");T.insert("rect").attr("class","subgraph subgraph-lvl-"+b%5+" node").attr("x",y.x+i).attr("y",y.y+s).attr("width",y.width).attr("height",y.height);const _=T.insert("g").attr("class","label"),A=Vh().flowchart.htmlLabels?y.labelData.width/2:0;_.attr("transform",`translate(${y.labels[0].x+i+y.x+A}, ${y.labels[0].y+s+y.y+3})`),_.node().appendChild(y.labelData.labelNode),Xe.info("Id (UGH)= ",y.type,y.labels)}else Xe.info("Id (UGH)= ",y.id),y.el.attr("transform",`translate(${y.x+i+y.width/2}, ${y.y+s+y.height/2})`)}),u.forEach(function(y){y&&y.type==="group"&&WKe(i+y.x,s+y.y,y.children,d,p,v,b+1)})},Fan={getClasses:Ian,draw:Ban},Ran=i=>{let s="";for(let u=0;u<5;u++)s+=` - .subgraph-lvl-${u} { - fill: ${i[`surface${u}`]}; - stroke: ${i[`surfacePeer${u}`]}; - } - `;return s},jan=Object.freeze(Object.defineProperty({__proto__:null,diagram:{db:_Ut,renderer:Fan,parser:Gbe,styles:i=>`.label { - font-family: ${i.fontFamily}; - color: ${i.nodeTextColor||i.textColor}; - } - .cluster-label text { - fill: ${i.titleColor}; - } - .cluster-label span { - color: ${i.titleColor}; - } - - .label text,span { - fill: ${i.nodeTextColor||i.textColor}; - color: ${i.nodeTextColor||i.textColor}; - } - - .node rect, - .node circle, - .node ellipse, - .node polygon, - .node path { - fill: ${i.mainBkg}; - stroke: ${i.nodeBorder}; - stroke-width: 1px; - } - - .node .label { - text-align: center; - } - .node.clickable { - cursor: pointer; - } - - .arrowheadPath { - fill: ${i.arrowheadColor}; - } - - .edgePath .path { - stroke: ${i.lineColor}; - stroke-width: 2.0px; - } - - .flowchart-link { - stroke: ${i.lineColor}; - fill: none; - } - - .edgeLabel { - background-color: ${i.edgeLabelBackground}; - rect { - opacity: 0.85; - background-color: ${i.edgeLabelBackground}; - fill: ${i.edgeLabelBackground}; + ${t.actor5?`fill: ${t.actor5}`:""}; + } +`,"getStyles"),R0e=bYe});var gP,wYe,O0e,P0e,TYe,kYe,I0e,EYe,SYe,B0e,CYe,s1,F0e=M(()=>{"use strict";pr();lv();gP=o(function(t,e){return Sd(t,e)},"drawRect"),wYe=o(function(t,e){let n=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),i=t.append("g");i.append("circle").attr("cx",e.cx-15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),i.append("circle").attr("cx",e.cx+15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function a(u){let h=Dl().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}o(a,"smile");function s(u){let h=Dl().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}o(s,"sad");function l(u){u.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return o(l,"ambivalent"),e.score>3?a(i):e.score<3?s(i):l(i),n},"drawFace"),O0e=o(function(t,e){let r=t.append("circle");return r.attr("cx",e.cx),r.attr("cy",e.cy),r.attr("class","actor-"+e.pos),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("r",e.r),r.class!==void 0&&r.attr("class",r.class),e.title!==void 0&&r.append("title").text(e.title),r},"drawCircle"),P0e=o(function(t,e){return AY(t,e)},"drawText"),TYe=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");n.attr("points",r(e.x,e.y,50,20,7)),n.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,P0e(t,e)},"drawLabel"),kYe=o(function(t,e,r){let n=t.append("g"),i=Nl();i.x=e.x,i.y=e.y,i.fill=e.fill,i.width=r.width*e.taskCount+r.diagramMarginX*(e.taskCount-1),i.height=r.height,i.class="journey-section section-type-"+e.num,i.rx=3,i.ry=3,gP(n,i),B0e(r)(e.text,n,i.x,i.y,i.width,i.height,{class:"journey-section section-type-"+e.num},r,e.colour)},"drawSection"),I0e=-1,EYe=o(function(t,e,r){let n=e.x+r.width/2,i=t.append("g");I0e++;let a=300+5*30;i.append("line").attr("id","task"+I0e).attr("x1",n).attr("y1",e.y).attr("x2",n).attr("y2",a).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),wYe(i,{cx:n,cy:300+(5-e.score)*30,score:e.score});let s=Nl();s.x=e.x,s.y=e.y,s.fill=e.fill,s.width=r.width,s.height=r.height,s.class="task task-type-"+e.num,s.rx=3,s.ry=3,gP(i,s);let l=e.x+14;e.people.forEach(u=>{let h=e.actors[u].color,f={cx:l,cy:e.y,r:7,fill:h,stroke:"#000",title:u,pos:e.actors[u].position};O0e(i,f),l+=10}),B0e(r)(e.task,i,s.x,s.y,s.width,s.height,{class:"task"},r,e.colour)},"drawTask"),SYe=o(function(t,e){i5(t,e)},"drawBackgroundRect"),B0e=function(){function t(i,a,s,l,u,h,f,d){let p=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("font-color",d).style("text-anchor","middle").text(i);n(p,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d,p){let{taskFontSize:m,taskFontFamily:g}=d,y=i.split(//gi);for(let v=0;v{let i=rh[n].color,a={cx:20,cy:r,r:7,fill:i,stroke:"#000",pos:rh[n].position};s1.drawCircle(t,a);let s={x:40,y:r+7,fill:"#666",text:n,textMargin:e.boxTextMargin|5};s1.drawText(t,s),r+=20})}var AYe,rh,r6,G0,LYe,ll,yP,z0e,DYe,vP,G0e=M(()=>{"use strict";pr();F0e();Vt();ai();AYe=o(function(t){Object.keys(t).forEach(function(r){r6[r]=t[r]})},"setConf"),rh={};o(_Ye,"drawActorLegend");r6=pe().journey,G0=r6.leftMargin,LYe=o(function(t,e,r,n){let i=pe().journey,a=pe().securityLevel,s;a==="sandbox"&&(s=Ve("#i"+e));let l=a==="sandbox"?Ve(s.nodes()[0].contentDocument.body):Ve("body");ll.init();let u=l.select("#"+e);s1.initGraphics(u);let h=n.db.getTasks(),f=n.db.getDiagramTitle(),d=n.db.getActors();for(let x in rh)delete rh[x];let p=0;d.forEach(x=>{rh[x]={color:i.actorColours[p%i.actorColours.length],position:p},p++}),_Ye(u),ll.insert(0,0,G0,Object.keys(rh).length*50),DYe(u,h,0);let m=ll.getBounds();f&&u.append("text").text(f).attr("x",G0).attr("font-size","4ex").attr("font-weight","bold").attr("y",25);let g=m.stopy-m.starty+2*i.diagramMarginY,y=G0+m.stopx+2*i.diagramMarginX;Zr(u,g,y,i.useMaxWidth),u.append("line").attr("x1",G0).attr("y1",i.height*4).attr("x2",y-G0-4).attr("y2",i.height*4).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");let v=f?70:0;u.attr("viewBox",`${m.startx} -25 ${y} ${g+v}`),u.attr("preserveAspectRatio","xMinYMin meet"),u.attr("height",g+v+25)},"draw"),ll={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:o(function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},"init"),updateVal:o(function(t,e,r,n){t[e]===void 0?t[e]=r:t[e]=n(r,t[e])},"updateVal"),updateBounds:o(function(t,e,r,n){let i=pe().journey,a=this,s=0;function l(u){return o(function(f){s++;let d=a.sequenceItems.length-s+1;a.updateVal(f,"starty",e-d*i.boxMargin,Math.min),a.updateVal(f,"stopy",n+d*i.boxMargin,Math.max),a.updateVal(ll.data,"startx",t-d*i.boxMargin,Math.min),a.updateVal(ll.data,"stopx",r+d*i.boxMargin,Math.max),u!=="activation"&&(a.updateVal(f,"startx",t-d*i.boxMargin,Math.min),a.updateVal(f,"stopx",r+d*i.boxMargin,Math.max),a.updateVal(ll.data,"starty",e-d*i.boxMargin,Math.min),a.updateVal(ll.data,"stopy",n+d*i.boxMargin,Math.max))},"updateItemBounds")}o(l,"updateFn"),this.sequenceItems.forEach(l())},"updateBounds"),insert:o(function(t,e,r,n){let i=Math.min(t,r),a=Math.max(t,r),s=Math.min(e,n),l=Math.max(e,n);this.updateVal(ll.data,"startx",i,Math.min),this.updateVal(ll.data,"starty",s,Math.min),this.updateVal(ll.data,"stopx",a,Math.max),this.updateVal(ll.data,"stopy",l,Math.max),this.updateBounds(i,s,a,l)},"insert"),bumpVerticalPos:o(function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},"bumpVerticalPos"),getVerticalPos:o(function(){return this.verticalPos},"getVerticalPos"),getBounds:o(function(){return this.data},"getBounds")},yP=r6.sectionFills,z0e=r6.sectionColours,DYe=o(function(t,e,r){let n=pe().journey,i="",a=n.height*2+n.diagramMarginY,s=r+a,l=0,u="#CCC",h="black",f=0;for(let[d,p]of e.entries()){if(i!==p.section){u=yP[l%yP.length],f=l%yP.length,h=z0e[l%z0e.length];let g=0,y=p.section;for(let x=d;x(rh[y]&&(g[y]=rh[y]),g),{});p.x=d*n.taskMargin+d*n.width+G0,p.y=s,p.width=n.diagramMarginX,p.height=n.diagramMarginY,p.colour=h,p.fill=u,p.num=f,p.actors=m,s1.drawTask(t,p,n),ll.insert(p.x,p.y,p.x+p.width+n.taskMargin,300+5*30)}},"drawTasks"),vP={setConf:AYe,draw:LYe}});var $0e={};vr($0e,{diagram:()=>NYe});var NYe,V0e=M(()=>{"use strict";L0e();N0e();M0e();G0e();NYe={parser:_0e,db:mP,renderer:vP,styles:R0e,init:o(t=>{vP.setConf(t.journey),mP.clear()},"init")}});var bP,j0e,K0e=M(()=>{"use strict";bP=function(){var t=o(function(p,m,g,y){for(g=g||{},y=p.length;y--;g[p[y]]=m);return g},"o"),e=[6,8,10,11,12,14,16,17,20,21],r=[1,9],n=[1,10],i=[1,11],a=[1,12],s=[1,13],l=[1,16],u=[1,17],h={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,period_statement:18,event_statement:19,period:20,event:21,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",20:"period",21:"event"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[18,1],[19,1]],performAction:o(function(m,g,y,v,x,b,w){var _=b.length-1;switch(x){case 1:return b[_-1];case 2:this.$=[];break;case 3:b[_-1].push(b[_]),this.$=b[_-1];break;case 4:case 5:this.$=b[_];break;case 6:case 7:this.$=[];break;case 8:v.getCommonDb().setDiagramTitle(b[_].substr(6)),this.$=b[_].substr(6);break;case 9:this.$=b[_].trim(),v.getCommonDb().setAccTitle(this.$);break;case 10:case 11:this.$=b[_].trim(),v.getCommonDb().setAccDescription(this.$);break;case 12:v.addSection(b[_].substr(8)),this.$=b[_].substr(8);break;case 15:v.addTask(b[_],0,""),this.$=b[_];break;case 16:v.addEvent(b[_].substr(2)),this.$=b[_];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:r,12:n,14:i,16:a,17:s,18:14,19:15,20:l,21:u},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:18,11:r,12:n,14:i,16:a,17:s,18:14,19:15,20:l,21:u},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,19]},{15:[1,20]},t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),t(e,[2,4]),t(e,[2,9]),t(e,[2,10])],defaultActions:{},parseError:o(function(m,g){if(g.recoverable)this.trace(m);else{var y=new Error(m);throw y.hash=g,y}},"parseError"),parse:o(function(m){var g=this,y=[0],v=[],x=[null],b=[],w=this.table,_="",T=0,E=0,L=0,S=2,A=1,I=b.slice.call(arguments,1),D=Object.create(this.lexer),k={yy:{}};for(var R in this.yy)Object.prototype.hasOwnProperty.call(this.yy,R)&&(k.yy[R]=this.yy[R]);D.setInput(m,k.yy),k.yy.lexer=D,k.yy.parser=this,typeof D.yylloc>"u"&&(D.yylloc={});var C=D.yylloc;b.push(C);var O=D.options&&D.options.ranges;typeof k.yy.parseError=="function"?this.parseError=k.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function N(q){y.length=y.length-2*q,x.length=x.length-q,b.length=b.length-q}o(N,"popStack");function P(){var q;return q=v.pop()||D.lex()||A,typeof q!="number"&&(q instanceof Array&&(v=q,q=v.pop()),q=g.symbols_[q]||q),q}o(P,"lex");for(var F,B,G,z,W,Z,j={},oe,K,ee,J;;){if(G=y[y.length-1],this.defaultActions[G]?z=this.defaultActions[G]:((F===null||typeof F>"u")&&(F=P()),z=w[G]&&w[G][F]),typeof z>"u"||!z.length||!z[0]){var H="";J=[];for(oe in w[G])this.terminals_[oe]&&oe>S&&J.push("'"+this.terminals_[oe]+"'");D.showPosition?H="Parse error on line "+(T+1)+`: +`+D.showPosition()+` +Expecting `+J.join(", ")+", got '"+(this.terminals_[F]||F)+"'":H="Parse error on line "+(T+1)+": Unexpected "+(F==A?"end of input":"'"+(this.terminals_[F]||F)+"'"),this.parseError(H,{text:D.match,token:this.terminals_[F]||F,line:D.yylineno,loc:C,expected:J})}if(z[0]instanceof Array&&z.length>1)throw new Error("Parse Error: multiple actions possible at state: "+G+", token: "+F);switch(z[0]){case 1:y.push(F),x.push(D.yytext),b.push(D.yylloc),y.push(z[1]),F=null,B?(F=B,B=null):(E=D.yyleng,_=D.yytext,T=D.yylineno,C=D.yylloc,L>0&&L--);break;case 2:if(K=this.productions_[z[1]][1],j.$=x[x.length-K],j._$={first_line:b[b.length-(K||1)].first_line,last_line:b[b.length-1].last_line,first_column:b[b.length-(K||1)].first_column,last_column:b[b.length-1].last_column},O&&(j._$.range=[b[b.length-(K||1)].range[0],b[b.length-1].range[1]]),Z=this.performAction.apply(j,[_,E,T,k.yy,z[1],x,b].concat(I)),typeof Z<"u")return Z;K&&(y=y.slice(0,-1*K*2),x=x.slice(0,-1*K),b=b.slice(0,-1*K)),y.push(this.productions_[z[1]][0]),x.push(j.$),b.push(j._$),ee=w[y[y.length-2]][y[y.length-1]],y.push(ee);break;case 3:return!0}}return!0},"parse")},f=function(){var p={EOF:1,parseError:o(function(g,y){if(this.yy.parser)this.yy.parser.parseError(g,y);else throw new Error(g)},"parseError"),setInput:o(function(m,g){return this.yy=g||this.yy||{},this._input=m,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var m=this._input[0];this.yytext+=m,this.yyleng++,this.offset++,this.match+=m,this.matched+=m;var g=m.match(/(?:\r\n?|\n).*/g);return g?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),m},"input"),unput:o(function(m){var g=m.length,y=m.split(/(?:\r\n?|\n)/g);this._input=m+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-g),this.offset-=g;var v=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),y.length-1&&(this.yylineno-=y.length-1);var x=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:y?(y.length===v.length?this.yylloc.first_column:0)+v[v.length-y.length].length-y[0].length:this.yylloc.first_column-g},this.options.ranges&&(this.yylloc.range=[x[0],x[0]+this.yyleng-g]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(m){this.unput(this.match.slice(m))},"less"),pastInput:o(function(){var m=this.matched.substr(0,this.matched.length-this.match.length);return(m.length>20?"...":"")+m.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var m=this.match;return m.length<20&&(m+=this._input.substr(0,20-m.length)),(m.substr(0,20)+(m.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var m=this.pastInput(),g=new Array(m.length+1).join("-");return m+this.upcomingInput()+` +`+g+"^"},"showPosition"),test_match:o(function(m,g){var y,v,x;if(this.options.backtrack_lexer&&(x={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(x.yylloc.range=this.yylloc.range.slice(0))),v=m[0].match(/(?:\r\n?|\n).*/g),v&&(this.yylineno+=v.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:v?v[v.length-1].length-v[v.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+m[0].length},this.yytext+=m[0],this.match+=m[0],this.matches=m,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(m[0].length),this.matched+=m[0],y=this.performAction.call(this,this.yy,this,g,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),y)return y;if(this._backtrack){for(var b in x)this[b]=x[b];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var m,g,y,v;this._more||(this.yytext="",this.match="");for(var x=this._currentRules(),b=0;bg[0].length)){if(g=y,v=b,this.options.backtrack_lexer){if(m=this.test_match(y,x[b]),m!==!1)return m;if(this._backtrack){g=!1;continue}else return!1}else if(!this.options.flex)break}return g?(m=this.test_match(g,x[v]),m!==!1?m:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var g=this.next();return g||this.lex()},"lex"),begin:o(function(g){this.conditionStack.push(g)},"begin"),popState:o(function(){var g=this.conditionStack.length-1;return g>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(g){return g=this.conditionStack.length-1-Math.abs(g||0),g>=0?this.conditionStack[g]:"INITIAL"},"topState"),pushState:o(function(g){this.begin(g)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(g,y,v,x){var b=x;switch(v){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.begin("acc_descr"),14;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 21;case 16:return 20;case 17:return 6;case 18:return"INVALID"}},"anonymous"),rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:timeline\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^:\n]+)/i,/^(?::\s[^:\n]+)/i,/^(?:[^#:\n]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18],inclusive:!0}}};return p}();h.lexer=f;function d(){this.yy={}}return o(d,"Parser"),d.prototype=h,h.Parser=d,new d}();bP.parser=bP;j0e=bP});var TP={};vr(TP,{addEvent:()=>ape,addSection:()=>tpe,addTask:()=>ipe,addTaskOrg:()=>spe,clear:()=>epe,default:()=>GYe,getCommonDb:()=>J0e,getSections:()=>rpe,getTasks:()=>npe});var o1,Z0e,wP,n6,l1,J0e,epe,tpe,rpe,npe,ipe,ape,spe,Q0e,GYe,ope=M(()=>{"use strict";Ai();o1="",Z0e=0,wP=[],n6=[],l1=[],J0e=o(()=>xy,"getCommonDb"),epe=o(function(){wP.length=0,n6.length=0,o1="",l1.length=0,Lr()},"clear"),tpe=o(function(t){o1=t,wP.push(t)},"addSection"),rpe=o(function(){return wP},"getSections"),npe=o(function(){let t=Q0e(),e=100,r=0;for(;!t&&rr.id===Z0e-1).events.push(t)},"addEvent"),spe=o(function(t){let e={section:o1,type:o1,description:t,task:t,classes:[]};n6.push(e)},"addTaskOrg"),Q0e=o(function(){let t=o(function(r){return l1[r].processed},"compileTask"),e=!0;for(let[r,n]of l1.entries())t(r),e=e&&n.processed;return e},"compileTasks"),GYe={clear:epe,getCommonDb:J0e,addSection:tpe,getSections:rpe,getTasks:npe,addTask:ipe,addTaskOrg:spe,addEvent:ape}});function hpe(t,e){t.each(function(){var r=Ve(this),n=r.text().split(/(\s+|
    )/).reverse(),i,a=[],s=1.1,l=r.attr("y"),u=parseFloat(r.attr("dy")),h=r.text(null).append("tspan").attr("x",0).attr("y",l).attr("dy",u+"em");for(let f=0;fe||i==="
    ")&&(a.pop(),h.text(a.join(" ").trim()),i==="
    "?a=[""]:a=[i],h=r.append("tspan").attr("x",0).attr("y",l).attr("dy",s+"em").text(i))})}var $Ye,i6,VYe,UYe,cpe,HYe,WYe,lpe,YYe,qYe,XYe,kP,upe,jYe,KYe,QYe,ZYe,Af,fpe=M(()=>{"use strict";pr();$Ye=12,i6=o(function(t,e){let r=t.append("rect");return r.attr("x",e.x),r.attr("y",e.y),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("width",e.width),r.attr("height",e.height),r.attr("rx",e.rx),r.attr("ry",e.ry),e.class!==void 0&&r.attr("class",e.class),r},"drawRect"),VYe=o(function(t,e){let n=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),i=t.append("g");i.append("circle").attr("cx",e.cx-15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),i.append("circle").attr("cx",e.cx+15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function a(u){let h=Dl().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}o(a,"smile");function s(u){let h=Dl().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}o(s,"sad");function l(u){u.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return o(l,"ambivalent"),e.score>3?a(i):e.score<3?s(i):l(i),n},"drawFace"),UYe=o(function(t,e){let r=t.append("circle");return r.attr("cx",e.cx),r.attr("cy",e.cy),r.attr("class","actor-"+e.pos),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("r",e.r),r.class!==void 0&&r.attr("class",r.class),e.title!==void 0&&r.append("title").text(e.title),r},"drawCircle"),cpe=o(function(t,e){let r=e.text.replace(//gi," "),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.attr("class","legend"),n.style("text-anchor",e.anchor),e.class!==void 0&&n.attr("class",e.class);let i=n.append("tspan");return i.attr("x",e.x+e.textMargin*2),i.text(r),n},"drawText"),HYe=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");n.attr("points",r(e.x,e.y,50,20,7)),n.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,cpe(t,e)},"drawLabel"),WYe=o(function(t,e,r){let n=t.append("g"),i=kP();i.x=e.x,i.y=e.y,i.fill=e.fill,i.width=r.width,i.height=r.height,i.class="journey-section section-type-"+e.num,i.rx=3,i.ry=3,i6(n,i),upe(r)(e.text,n,i.x,i.y,i.width,i.height,{class:"journey-section section-type-"+e.num},r,e.colour)},"drawSection"),lpe=-1,YYe=o(function(t,e,r){let n=e.x+r.width/2,i=t.append("g");lpe++;let a=300+5*30;i.append("line").attr("id","task"+lpe).attr("x1",n).attr("y1",e.y).attr("x2",n).attr("y2",a).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),VYe(i,{cx:n,cy:300+(5-e.score)*30,score:e.score});let s=kP();s.x=e.x,s.y=e.y,s.fill=e.fill,s.width=r.width,s.height=r.height,s.class="task task-type-"+e.num,s.rx=3,s.ry=3,i6(i,s),upe(r)(e.task,i,s.x,s.y,s.width,s.height,{class:"task"},r,e.colour)},"drawTask"),qYe=o(function(t,e){i6(t,{x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,class:"rect"}).lower()},"drawBackgroundRect"),XYe=o(function(){return{x:0,y:0,fill:void 0,"text-anchor":"start",width:100,height:100,textMargin:0,rx:0,ry:0}},"getTextObj"),kP=o(function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},"getNoteRect"),upe=function(){function t(i,a,s,l,u,h,f,d){let p=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("font-color",d).style("text-anchor","middle").text(i);n(p,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d,p){let{taskFontSize:m,taskFontFamily:g}=d,y=i.split(//gi);for(let v=0;v{"use strict";pr();fpe();ut();Vt();ai();JYe=o(function(t,e,r,n){let i=pe(),a=i.leftMargin??50;Y.debug("timeline",n.db);let s=i.securityLevel,l;s==="sandbox"&&(l=Ve("#i"+e));let h=(s==="sandbox"?Ve(l.nodes()[0].contentDocument.body):Ve("body")).select("#"+e);h.append("g");let f=n.db.getTasks(),d=n.db.getCommonDb().getDiagramTitle();Y.debug("task",f),Af.initGraphics(h);let p=n.db.getSections();Y.debug("sections",p);let m=0,g=0,y=0,v=0,x=50+a,b=50;v=50;let w=0,_=!0;p.forEach(function(A){let I={number:w,descr:A,section:w,width:150,padding:20,maxHeight:m},D=Af.getVirtualNodeHeight(h,I,i);Y.debug("sectionHeight before draw",D),m=Math.max(m,D+20)});let T=0,E=0;Y.debug("tasks.length",f.length);for(let[A,I]of f.entries()){let D={number:A,descr:I,section:I.section,width:150,padding:20,maxHeight:g},k=Af.getVirtualNodeHeight(h,D,i);Y.debug("taskHeight before draw",k),g=Math.max(g,k+20),T=Math.max(T,I.events.length);let R=0;for(let C of I.events){let O={descr:C,section:I.section,number:I.section,width:150,padding:20,maxHeight:50};R+=Af.getVirtualNodeHeight(h,O,i)}E=Math.max(E,R)}Y.debug("maxSectionHeight before draw",m),Y.debug("maxTaskHeight before draw",g),p&&p.length>0?p.forEach(A=>{let I=f.filter(C=>C.section===A),D={number:w,descr:A,section:w,width:200*Math.max(I.length,1)-50,padding:20,maxHeight:m};Y.debug("sectionNode",D);let k=h.append("g"),R=Af.drawNode(k,D,w,i);Y.debug("sectionNode output",R),k.attr("transform",`translate(${x}, ${v})`),b+=m+50,I.length>0&&dpe(h,I,w,x,b,g,i,T,E,m,!1),x+=200*Math.max(I.length,1),b=v,w++}):(_=!1,dpe(h,f,w,x,b,g,i,T,E,m,!0));let L=h.node().getBBox();Y.debug("bounds",L),d&&h.append("text").text(d).attr("x",L.width/2-a).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),y=_?m+g+150:g+100,h.append("g").attr("class","lineWrapper").append("line").attr("x1",a).attr("y1",y).attr("x2",L.width+3*a).attr("y2",y).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)"),Io(void 0,h,i.timeline?.padding??50,i.timeline?.useMaxWidth??!1)},"draw"),dpe=o(function(t,e,r,n,i,a,s,l,u,h,f){for(let d of e){let p={descr:d.task,section:r,number:r,width:150,padding:20,maxHeight:a};Y.debug("taskNode",p);let m=t.append("g").attr("class","taskWrapper"),y=Af.drawNode(m,p,r,s).height;if(Y.debug("taskHeight after draw",y),m.attr("transform",`translate(${n}, ${i})`),a=Math.max(a,y),d.events){let v=t.append("g").attr("class","lineWrapper"),x=a;i+=100,x=x+eqe(t,d.events,r,n,i,s),i-=100,v.append("line").attr("x1",n+190/2).attr("y1",i+a).attr("x2",n+190/2).attr("y2",i+a+(f?a:h)+u+120).attr("stroke-width",2).attr("stroke","black").attr("marker-end","url(#arrowhead)").attr("stroke-dasharray","5,5")}n=n+200,f&&!s.timeline?.disableMulticolor&&r++}i=i-10},"drawTasks"),eqe=o(function(t,e,r,n,i,a){let s=0,l=i;i=i+100;for(let u of e){let h={descr:u,section:r,number:r,width:150,padding:20,maxHeight:50};Y.debug("eventNode",h);let f=t.append("g").attr("class","eventWrapper"),p=Af.drawNode(f,h,r,a).height;s=s+p,f.attr("transform",`translate(${n}, ${i})`),i=i+10+p}return i=l,s},"drawEvents"),ppe={setConf:o(()=>{},"setConf"),draw:JYe}});var tqe,rqe,gpe,ype=M(()=>{"use strict";Lo();tqe=o(t=>{let e="";for(let r=0;r` + .edge { + stroke-width: 3; } - - .cluster span { - color: ${i.titleColor}; + ${tqe(t)} + .section-root rect, .section-root path, .section-root circle { + fill: ${t.git0}; } - /* .cluster div { - color: ${i.titleColor}; - } */ - - div.mermaidTooltip { - position: absolute; - text-align: center; - max-width: 200px; - padding: 2px; - font-family: ${i.fontFamily}; - font-size: 12px; - background: ${i.tertiaryColor}; - border: 1px solid ${i.border2}; - border-radius: 2px; - pointer-events: none; - z-index: 100; + .section-root text { + fill: ${t.gitBranchLabel0}; } - - .flowchartTitleText { - text-anchor: middle; - font-size: 18px; - fill: ${i.textColor}; + .icon-container { + height:100%; + display: flex; + justify-content: center; + align-items: center; } - .subgraph { - stroke-width:2; - rx:3; + .edge { + fill: none; } - // .subgraph-lvl-1 { - // fill:#ccc; - // // stroke:black; - // } - - .flowchart-label text { - text-anchor: middle; + .eventWrapper { + filter: brightness(120%); } - - ${Ran(i)} -`}},Symbol.toStringTag,{value:"Module"}));var Qve=function(){var i=function(R,F,j,K){for(j=j||{},K=R.length;K--;j[R[K]]=F);return j},s=[6,8,10,11,12,14,16,17,20,21],u=[1,9],d=[1,10],p=[1,11],v=[1,12],b=[1,13],y=[1,16],T=[1,17],_={trace:function(){},yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,period_statement:18,event_statement:19,period:20,event:21,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",20:"period",21:"event"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[18,1],[19,1]],performAction:function(F,j,K,ee,ie,oe,pe){var be=oe.length-1;switch(ie){case 1:return oe[be-1];case 2:this.$=[];break;case 3:oe[be-1].push(oe[be]),this.$=oe[be-1];break;case 4:case 5:this.$=oe[be];break;case 6:case 7:this.$=[];break;case 8:ee.getCommonDb().setDiagramTitle(oe[be].substr(6)),this.$=oe[be].substr(6);break;case 9:this.$=oe[be].trim(),ee.getCommonDb().setAccTitle(this.$);break;case 10:case 11:this.$=oe[be].trim(),ee.getCommonDb().setAccDescription(this.$);break;case 12:ee.addSection(oe[be].substr(8)),this.$=oe[be].substr(8);break;case 15:ee.addTask(oe[be],0,""),this.$=oe[be];break;case 16:ee.addEvent(oe[be].substr(2)),this.$=oe[be];break}},table:[{3:1,4:[1,2]},{1:[3]},i(s,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:u,12:d,14:p,16:v,17:b,18:14,19:15,20:y,21:T},i(s,[2,7],{1:[2,1]}),i(s,[2,3]),{9:18,11:u,12:d,14:p,16:v,17:b,18:14,19:15,20:y,21:T},i(s,[2,5]),i(s,[2,6]),i(s,[2,8]),{13:[1,19]},{15:[1,20]},i(s,[2,11]),i(s,[2,12]),i(s,[2,13]),i(s,[2,14]),i(s,[2,15]),i(s,[2,16]),i(s,[2,4]),i(s,[2,9]),i(s,[2,10])],defaultActions:{},parseError:function(F,j){if(j.recoverable)this.trace(F);else{var K=new Error(F);throw K.hash=j,K}},parse:function(F){var j=this,K=[0],ee=[],ie=[null],oe=[],pe=this.table,be="",ae=0,ne=0,se=2,de=1,X=oe.slice.call(arguments,1),ge=Object.create(this.lexer),W={yy:{}};for(var xe in this.yy)Object.prototype.hasOwnProperty.call(this.yy,xe)&&(W.yy[xe]=this.yy[xe]);ge.setInput(F,W.yy),W.yy.lexer=ge,W.yy.parser=this,typeof ge.yylloc>"u"&&(ge.yylloc={});var U=ge.yylloc;oe.push(U);var Fe=ge.options&&ge.options.ranges;typeof W.yy.parseError=="function"?this.parseError=W.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Pe(){var Et;return Et=ee.pop()||ge.lex()||de,typeof Et!="number"&&(Et instanceof Array&&(ee=Et,Et=ee.pop()),Et=j.symbols_[Et]||Et),Et}for(var je,Ie,Se,Ce,ke={},Ke,Ft,Ne,gn;;){if(Ie=K[K.length-1],this.defaultActions[Ie]?Se=this.defaultActions[Ie]:((je===null||typeof je>"u")&&(je=Pe()),Se=pe[Ie]&&pe[Ie][je]),typeof Se>"u"||!Se.length||!Se[0]){var _t="";gn=[];for(Ke in pe[Ie])this.terminals_[Ke]&&Ke>se&&gn.push("'"+this.terminals_[Ke]+"'");ge.showPosition?_t="Parse error on line "+(ae+1)+`: -`+ge.showPosition()+` -Expecting `+gn.join(", ")+", got '"+(this.terminals_[je]||je)+"'":_t="Parse error on line "+(ae+1)+": Unexpected "+(je==de?"end of input":"'"+(this.terminals_[je]||je)+"'"),this.parseError(_t,{text:ge.match,token:this.terminals_[je]||je,line:ge.yylineno,loc:U,expected:gn})}if(Se[0]instanceof Array&&Se.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Ie+", token: "+je);switch(Se[0]){case 1:K.push(je),ie.push(ge.yytext),oe.push(ge.yylloc),K.push(Se[1]),je=null,ne=ge.yyleng,be=ge.yytext,ae=ge.yylineno,U=ge.yylloc;break;case 2:if(Ft=this.productions_[Se[1]][1],ke.$=ie[ie.length-Ft],ke._$={first_line:oe[oe.length-(Ft||1)].first_line,last_line:oe[oe.length-1].last_line,first_column:oe[oe.length-(Ft||1)].first_column,last_column:oe[oe.length-1].last_column},Fe&&(ke._$.range=[oe[oe.length-(Ft||1)].range[0],oe[oe.length-1].range[1]]),Ce=this.performAction.apply(ke,[be,ne,ae,W.yy,Se[1],ie,oe].concat(X)),typeof Ce<"u")return Ce;Ft&&(K=K.slice(0,-1*Ft*2),ie=ie.slice(0,-1*Ft),oe=oe.slice(0,-1*Ft)),K.push(this.productions_[Se[1]][0]),ie.push(ke.$),oe.push(ke._$),Ne=pe[K[K.length-2]][K[K.length-1]],K.push(Ne);break;case 3:return!0}}return!0}},A=function(){var R={EOF:1,parseError:function(j,K){if(this.yy.parser)this.yy.parser.parseError(j,K);else throw new Error(j)},setInput:function(F,j){return this.yy=j||this.yy||{},this._input=F,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var F=this._input[0];this.yytext+=F,this.yyleng++,this.offset++,this.match+=F,this.matched+=F;var j=F.match(/(?:\r\n?|\n).*/g);return j?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),F},unput:function(F){var j=F.length,K=F.split(/(?:\r\n?|\n)/g);this._input=F+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-j),this.offset-=j;var ee=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),K.length-1&&(this.yylineno-=K.length-1);var ie=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:K?(K.length===ee.length?this.yylloc.first_column:0)+ee[ee.length-K.length].length-K[0].length:this.yylloc.first_column-j},this.options.ranges&&(this.yylloc.range=[ie[0],ie[0]+this.yyleng-j]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(F){this.unput(this.match.slice(F))},pastInput:function(){var F=this.matched.substr(0,this.matched.length-this.match.length);return(F.length>20?"...":"")+F.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var F=this.match;return F.length<20&&(F+=this._input.substr(0,20-F.length)),(F.substr(0,20)+(F.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var F=this.pastInput(),j=new Array(F.length+1).join("-");return F+this.upcomingInput()+` -`+j+"^"},test_match:function(F,j){var K,ee,ie;if(this.options.backtrack_lexer&&(ie={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(ie.yylloc.range=this.yylloc.range.slice(0))),ee=F[0].match(/(?:\r\n?|\n).*/g),ee&&(this.yylineno+=ee.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:ee?ee[ee.length-1].length-ee[ee.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+F[0].length},this.yytext+=F[0],this.match+=F[0],this.matches=F,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(F[0].length),this.matched+=F[0],K=this.performAction.call(this,this.yy,this,j,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),K)return K;if(this._backtrack){for(var oe in ie)this[oe]=ie[oe];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var F,j,K,ee;this._more||(this.yytext="",this.match="");for(var ie=this._currentRules(),oe=0;oej[0].length)){if(j=K,ee=oe,this.options.backtrack_lexer){if(F=this.test_match(K,ie[oe]),F!==!1)return F;if(this._backtrack){j=!1;continue}else return!1}else if(!this.options.flex)break}return j?(F=this.test_match(j,ie[ee]),F!==!1?F:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var j=this.next();return j||this.lex()},begin:function(j){this.conditionStack.push(j)},popState:function(){var j=this.conditionStack.length-1;return j>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(j){return j=this.conditionStack.length-1-Math.abs(j||0),j>=0?this.conditionStack[j]:"INITIAL"},pushState:function(j){this.begin(j)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(j,K,ee,ie){switch(ee){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),14;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 21;case 16:return 20;case 17:return 6;case 18:return"INVALID"}},rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:timeline\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?::\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18],inclusive:!0}}};return R}();_.lexer=A;function P(){this.yy={}}return P.prototype=_,_.Parser=P,new P}();Qve.parser=Qve;const $an=Qve;let ZD="",YKe=0;const Jve=[],IJ=[],eI=[],XKe=()=>Jje,QKe=function(){Jve.length=0,IJ.length=0,ZD="",eI.length=0,Pg()},JKe=function(i){ZD=i,Jve.push(i)},ZKe=function(){return Jve},eWe=function(){let i=iWe();const s=100;let u=0;for(;!i&&uu.id===YKe-1).events.push(i)},rWe=function(i){const s={section:ZD,type:ZD,description:i,task:i,classes:[]};IJ.push(s)},iWe=function(){const i=function(u){return eI[u].processed};let s=!0;for(const[u,d]of eI.entries())i(u),s=s&&d.processed;return s},zan=Object.freeze(Object.defineProperty({__proto__:null,addEvent:nWe,addSection:JKe,addTask:tWe,addTaskOrg:rWe,clear:QKe,default:{clear:QKe,getCommonDb:XKe,addSection:JKe,getSections:ZKe,getTasks:eWe,addTask:tWe,addTaskOrg:rWe,addEvent:nWe},getCommonDb:XKe,getSections:ZKe,getTasks:eWe},Symbol.toStringTag,{value:"Module"})),qan=12,OJ=function(i,s){const u=i.append("rect");return u.attr("x",s.x),u.attr("y",s.y),u.attr("fill",s.fill),u.attr("stroke",s.stroke),u.attr("width",s.width),u.attr("height",s.height),u.attr("rx",s.rx),u.attr("ry",s.ry),s.class!==void 0&&u.attr("class",s.class),u},Han=function(i,s){const d=i.append("circle").attr("cx",s.cx).attr("cy",s.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),p=i.append("g");p.append("circle").attr("cx",s.cx-15/3).attr("cy",s.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),p.append("circle").attr("cx",s.cx+15/3).attr("cy",s.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function v(T){const _=lD().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);T.append("path").attr("class","mouth").attr("d",_).attr("transform","translate("+s.cx+","+(s.cy+2)+")")}function b(T){const _=lD().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);T.append("path").attr("class","mouth").attr("d",_).attr("transform","translate("+s.cx+","+(s.cy+7)+")")}function y(T){T.append("line").attr("class","mouth").attr("stroke",2).attr("x1",s.cx-5).attr("y1",s.cy+7).attr("x2",s.cx+5).attr("y2",s.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return s.score>3?v(p):s.score<3?b(p):y(p),d},Van=function(i,s){const u=i.append("circle");return u.attr("cx",s.cx),u.attr("cy",s.cy),u.attr("class","actor-"+s.pos),u.attr("fill",s.fill),u.attr("stroke",s.stroke),u.attr("r",s.r),u.class!==void 0&&u.attr("class",u.class),s.title!==void 0&&u.append("title").text(s.title),u},sWe=function(i,s){const u=s.text.replace(//gi," "),d=i.append("text");d.attr("x",s.x),d.attr("y",s.y),d.attr("class","legend"),d.style("text-anchor",s.anchor),s.class!==void 0&&d.attr("class",s.class);const p=d.append("tspan");return p.attr("x",s.x+s.textMargin*2),p.text(u),d},Uan=function(i,s){function u(p,v,b,y,T){return p+","+v+" "+(p+b)+","+v+" "+(p+b)+","+(v+y-T)+" "+(p+b-T*1.2)+","+(v+y)+" "+p+","+(v+y)}const d=i.append("polygon");d.attr("points",u(s.x,s.y,50,20,7)),d.attr("class","labelBox"),s.y=s.y+s.labelMargin,s.x=s.x+.5*s.labelMargin,sWe(i,s)},Gan=function(i,s,u){const d=i.append("g"),p=Zve();p.x=s.x,p.y=s.y,p.fill=s.fill,p.width=u.width,p.height=u.height,p.class="journey-section section-type-"+s.num,p.rx=3,p.ry=3,OJ(d,p),oWe(u)(s.text,d,p.x,p.y,p.width,p.height,{class:"journey-section section-type-"+s.num},u,s.colour)};let aWe=-1;const Kan=function(i,s,u){const d=s.x+u.width/2,p=i.append("g");aWe++;const v=300+5*30;p.append("line").attr("id","task"+aWe).attr("x1",d).attr("y1",s.y).attr("x2",d).attr("y2",v).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),Han(p,{cx:d,cy:300+(5-s.score)*30,score:s.score});const b=Zve();b.x=s.x,b.y=s.y,b.fill=s.fill,b.width=u.width,b.height=u.height,b.class="task task-type-"+s.num,b.rx=3,b.ry=3,OJ(p,b),s.x+14,oWe(u)(s.task,p,b.x,b.y,b.width,b.height,{class:"task"},u,s.colour)},Wan=function(i,s){OJ(i,{x:s.startx,y:s.starty,width:s.stopx-s.startx,height:s.stopy-s.starty,fill:s.fill,class:"rect"}).lower()},Yan=function(){return{x:0,y:0,fill:void 0,"text-anchor":"start",width:100,height:100,textMargin:0,rx:0,ry:0}},Zve=function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},oWe=function(){function i(p,v,b,y,T,_,A,P){const R=v.append("text").attr("x",b+T/2).attr("y",y+_/2+5).style("font-color",P).style("text-anchor","middle").text(p);d(R,A)}function s(p,v,b,y,T,_,A,P,R){const{taskFontSize:F,taskFontFamily:j}=P,K=p.split(//gi);for(let ee=0;ee)/).reverse(),p,v=[],b=1.1,y=u.attr("y"),T=parseFloat(u.attr("dy")),_=u.text(null).append("tspan").attr("x",0).attr("y",y).attr("dy",T+"em");for(let A=0;As||p==="
    ")&&(v.pop(),_.text(v.join(" ").trim()),p==="
    "?v=[""]:v=[p],_=u.append("tspan").attr("x",0).attr("y",y).attr("dy",b+"em").text(p))})}const Qan=function(i,s,u,d){const p=u%qan-1,v=i.append("g");s.section=p,v.attr("class",(s.class?s.class+" ":"")+"timeline-node "+("section-"+p));const b=v.append("g"),y=v.append("g"),_=y.append("text").text(s.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(cWe,s.width).node().getBBox(),A=d.fontSize&&d.fontSize.replace?d.fontSize.replace("px",""):d.fontSize;return s.height=_.height+A*1.1*.5+s.padding,s.height=Math.max(s.height,s.maxHeight),s.width=s.width+2*s.padding,y.attr("transform","translate("+s.width/2+", "+s.padding/2+")"),Zan(b,s,p),s},Jan=function(i,s,u){const d=i.append("g"),v=d.append("text").text(s.descr).attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle").call(cWe,s.width).node().getBBox(),b=u.fontSize&&u.fontSize.replace?u.fontSize.replace("px",""):u.fontSize;return d.remove(),v.height+b*1.1*.5+s.padding},Zan=function(i,s,u){i.append("path").attr("id","node-"+s.id).attr("class","node-bkg node-"+s.type).attr("d",`M0 ${s.height-5} v${-s.height+2*5} q0,-5 5,-5 h${s.width-2*5} q5,0 5,5 v${s.height-5} H0 Z`),i.append("line").attr("class","node-line-"+u).attr("x1",0).attr("y1",s.height).attr("x2",s.width).attr("y2",s.height)},sS={drawRect:OJ,drawCircle:Van,drawSection:Gan,drawText:sWe,drawLabel:Uan,drawTask:Kan,drawBackgroundRect:Wan,getTextObj:Yan,getNoteRect:Zve,initGraphics:Xan,drawNode:Qan,getVirtualNodeHeight:Jan},eon=function(i,s,u,d){var X,ge;const p=qt(),v=p.leftMargin??50;Xe.debug("timeline",d.db);const b=p.securityLevel;let y;b==="sandbox"&&(y=Ir("#i"+s));const _=Ir(b==="sandbox"?y.nodes()[0].contentDocument.body:"body").select("#"+s);_.append("g");const A=d.db.getTasks(),P=d.db.getCommonDb().getDiagramTitle();Xe.debug("task",A),sS.initGraphics(_);const R=d.db.getSections();Xe.debug("sections",R);let F=0,j=0,K=0,ee=0,ie=50+v,oe=50;ee=50;let pe=0,be=!0;R.forEach(function(W){const xe={number:pe,descr:W,section:pe,width:150,padding:20,maxHeight:F},U=sS.getVirtualNodeHeight(_,xe,p);Xe.debug("sectionHeight before draw",U),F=Math.max(F,U+20)});let ae=0,ne=0;Xe.debug("tasks.length",A.length);for(const[W,xe]of A.entries()){const U={number:W,descr:xe,section:xe.section,width:150,padding:20,maxHeight:j},Fe=sS.getVirtualNodeHeight(_,U,p);Xe.debug("taskHeight before draw",Fe),j=Math.max(j,Fe+20),ae=Math.max(ae,xe.events.length);let Pe=0;for(let je=0;je0?R.forEach(W=>{const xe=A.filter(je=>je.section===W),U={number:pe,descr:W,section:pe,width:200*Math.max(xe.length,1)-50,padding:20,maxHeight:F};Xe.debug("sectionNode",U);const Fe=_.append("g"),Pe=sS.drawNode(Fe,U,pe,p);Xe.debug("sectionNode output",Pe),Fe.attr("transform",`translate(${ie}, ${ee})`),oe+=F+50,xe.length>0&&uWe(_,xe,pe,ie,oe,j,p,ae,ne,F,!1),ie+=200*Math.max(xe.length,1),oe=ee,pe++}):(be=!1,uWe(_,A,pe,ie,oe,j,p,ae,ne,F,!0));const se=_.node().getBBox();Xe.debug("bounds",se),P&&_.append("text").text(P).attr("x",se.width/2-v).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),K=be?F+j+150:j+100,_.append("g").attr("class","lineWrapper").append("line").attr("x1",v).attr("y1",K).attr("x2",se.width+3*v).attr("y2",K).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)"),y9(void 0,_,((X=p.timeline)==null?void 0:X.padding)??50,((ge=p.timeline)==null?void 0:ge.useMaxWidth)??!1)},uWe=function(i,s,u,d,p,v,b,y,T,_,A){var P;for(const R of s){const F={descr:R.task,section:u,number:u,width:150,padding:20,maxHeight:v};Xe.debug("taskNode",F);const j=i.append("g").attr("class","taskWrapper"),ee=sS.drawNode(j,F,u,b).height;if(Xe.debug("taskHeight after draw",ee),j.attr("transform",`translate(${d}, ${p})`),v=Math.max(v,ee),R.events){const ie=i.append("g").attr("class","lineWrapper");let oe=v;p+=100,oe=oe+ton(i,R.events,u,d,p,b),p-=100,ie.append("line").attr("x1",d+190/2).attr("y1",p+v).attr("x2",d+190/2).attr("y2",p+v+(A?v:_)+T+120).attr("stroke-width",2).attr("stroke","black").attr("marker-end","url(#arrowhead)").attr("stroke-dasharray","5,5")}d=d+200,A&&!((P=b.timeline)!=null&&P.disableMulticolor)&&u++}p=p-10},ton=function(i,s,u,d,p,v){let b=0;const y=p;p=p+100;for(const T of s){const _={descr:T,section:u,number:u,width:150,padding:20,maxHeight:50};Xe.debug("eventNode",_);const A=i.append("g").attr("class","eventWrapper"),R=sS.drawNode(A,_,u,v).height;b=b+R,A.attr("transform",`translate(${d}, ${p})`),p=p+10+R}return p=y,b},non={setConf:()=>{},draw:eon},ron=i=>{let s="";for(let u=0;unqe});var nqe,xpe=M(()=>{"use strict";K0e();ope();mpe();ype();nqe={db:TP,renderer:ppe,parser:j0e,styles:gpe}});var EP,Tpe,kpe=M(()=>{"use strict";EP=function(){var t=o(function(_,T,E,L){for(E=E||{},L=_.length;L--;E[_[L]]=T);return E},"o"),e=[1,4],r=[1,13],n=[1,12],i=[1,15],a=[1,16],s=[1,20],l=[1,19],u=[6,7,8],h=[1,26],f=[1,24],d=[1,25],p=[6,7,11],m=[1,6,13,15,16,19,22],g=[1,33],y=[1,34],v=[1,6,7,11,13,15,16,19,22],x={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,MINDMAP:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,ICON:15,CLASS:16,nodeWithId:17,nodeWithoutId:18,NODE_DSTART:19,NODE_DESCR:20,NODE_DEND:21,NODE_ID:22,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"MINDMAP",11:"EOF",13:"SPACELIST",15:"ICON",16:"CLASS",19:"NODE_DSTART",20:"NODE_DESCR",21:"NODE_DEND",22:"NODE_ID"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,2],[12,2],[12,1],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[18,3],[17,1],[17,4]],performAction:o(function(T,E,L,S,A,I,D){var k=I.length-1;switch(A){case 6:case 7:return S;case 8:S.getLogger().trace("Stop NL ");break;case 9:S.getLogger().trace("Stop EOF ");break;case 11:S.getLogger().trace("Stop NL2 ");break;case 12:S.getLogger().trace("Stop EOF2 ");break;case 15:S.getLogger().info("Node: ",I[k].id),S.addNode(I[k-1].length,I[k].id,I[k].descr,I[k].type);break;case 16:S.getLogger().trace("Icon: ",I[k]),S.decorateNode({icon:I[k]});break;case 17:case 21:S.decorateNode({class:I[k]});break;case 18:S.getLogger().trace("SPACELIST");break;case 19:S.getLogger().trace("Node: ",I[k].id),S.addNode(0,I[k].id,I[k].descr,I[k].type);break;case 20:S.decorateNode({icon:I[k]});break;case 25:S.getLogger().trace("node found ..",I[k-2]),this.$={id:I[k-1],descr:I[k-1],type:S.getType(I[k-2],I[k])};break;case 26:this.$={id:I[k],descr:I[k],type:S.nodeType.DEFAULT};break;case 27:S.getLogger().trace("node found ..",I[k-3]),this.$={id:I[k-3],descr:I[k-1],type:S.getType(I[k-2],I[k])};break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:e},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:e},{6:r,7:[1,10],9:9,12:11,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},t(u,[2,3]),{1:[2,2]},t(u,[2,4]),t(u,[2,5]),{1:[2,6],6:r,12:21,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},{6:r,9:22,12:11,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},{6:h,7:f,10:23,11:d},t(p,[2,22],{17:17,18:18,14:27,15:[1,28],16:[1,29],19:s,22:l}),t(p,[2,18]),t(p,[2,19]),t(p,[2,20]),t(p,[2,21]),t(p,[2,23]),t(p,[2,24]),t(p,[2,26],{19:[1,30]}),{20:[1,31]},{6:h,7:f,10:32,11:d},{1:[2,7],6:r,12:21,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},t(m,[2,14],{7:g,11:y}),t(v,[2,8]),t(v,[2,9]),t(v,[2,10]),t(p,[2,15]),t(p,[2,16]),t(p,[2,17]),{20:[1,35]},{21:[1,36]},t(m,[2,13],{7:g,11:y}),t(v,[2,11]),t(v,[2,12]),{21:[1,37]},t(p,[2,25]),t(p,[2,27])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(T,E){if(E.recoverable)this.trace(T);else{var L=new Error(T);throw L.hash=E,L}},"parseError"),parse:o(function(T){var E=this,L=[0],S=[],A=[null],I=[],D=this.table,k="",R=0,C=0,O=0,N=2,P=1,F=I.slice.call(arguments,1),B=Object.create(this.lexer),G={yy:{}};for(var z in this.yy)Object.prototype.hasOwnProperty.call(this.yy,z)&&(G.yy[z]=this.yy[z]);B.setInput(T,G.yy),G.yy.lexer=B,G.yy.parser=this,typeof B.yylloc>"u"&&(B.yylloc={});var W=B.yylloc;I.push(W);var Z=B.options&&B.options.ranges;typeof G.yy.parseError=="function"?this.parseError=G.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function j(ke){L.length=L.length-2*ke,A.length=A.length-ke,I.length=I.length-ke}o(j,"popStack");function oe(){var ke;return ke=S.pop()||B.lex()||P,typeof ke!="number"&&(ke instanceof Array&&(S=ke,ke=S.pop()),ke=E.symbols_[ke]||ke),ke}o(oe,"lex");for(var K,ee,J,H,q,Q,ae={},ue,ce,te,Ne;;){if(J=L[L.length-1],this.defaultActions[J]?H=this.defaultActions[J]:((K===null||typeof K>"u")&&(K=oe()),H=D[J]&&D[J][K]),typeof H>"u"||!H.length||!H[0]){var se="";Ne=[];for(ue in D[J])this.terminals_[ue]&&ue>N&&Ne.push("'"+this.terminals_[ue]+"'");B.showPosition?se="Parse error on line "+(R+1)+`: +`+B.showPosition()+` +Expecting `+Ne.join(", ")+", got '"+(this.terminals_[K]||K)+"'":se="Parse error on line "+(R+1)+": Unexpected "+(K==P?"end of input":"'"+(this.terminals_[K]||K)+"'"),this.parseError(se,{text:B.match,token:this.terminals_[K]||K,line:B.yylineno,loc:W,expected:Ne})}if(H[0]instanceof Array&&H.length>1)throw new Error("Parse Error: multiple actions possible at state: "+J+", token: "+K);switch(H[0]){case 1:L.push(K),A.push(B.yytext),I.push(B.yylloc),L.push(H[1]),K=null,ee?(K=ee,ee=null):(C=B.yyleng,k=B.yytext,R=B.yylineno,W=B.yylloc,O>0&&O--);break;case 2:if(ce=this.productions_[H[1]][1],ae.$=A[A.length-ce],ae._$={first_line:I[I.length-(ce||1)].first_line,last_line:I[I.length-1].last_line,first_column:I[I.length-(ce||1)].first_column,last_column:I[I.length-1].last_column},Z&&(ae._$.range=[I[I.length-(ce||1)].range[0],I[I.length-1].range[1]]),Q=this.performAction.apply(ae,[k,C,R,G.yy,H[1],A,I].concat(F)),typeof Q<"u")return Q;ce&&(L=L.slice(0,-1*ce*2),A=A.slice(0,-1*ce),I=I.slice(0,-1*ce)),L.push(this.productions_[H[1]][0]),A.push(ae.$),I.push(ae._$),te=D[L[L.length-2]][L[L.length-1]],L.push(te);break;case 3:return!0}}return!0},"parse")},b=function(){var _={EOF:1,parseError:o(function(E,L){if(this.yy.parser)this.yy.parser.parseError(E,L);else throw new Error(E)},"parseError"),setInput:o(function(T,E){return this.yy=E||this.yy||{},this._input=T,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var T=this._input[0];this.yytext+=T,this.yyleng++,this.offset++,this.match+=T,this.matched+=T;var E=T.match(/(?:\r\n?|\n).*/g);return E?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),T},"input"),unput:o(function(T){var E=T.length,L=T.split(/(?:\r\n?|\n)/g);this._input=T+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-E),this.offset-=E;var S=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),L.length-1&&(this.yylineno-=L.length-1);var A=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:L?(L.length===S.length?this.yylloc.first_column:0)+S[S.length-L.length].length-L[0].length:this.yylloc.first_column-E},this.options.ranges&&(this.yylloc.range=[A[0],A[0]+this.yyleng-E]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(T){this.unput(this.match.slice(T))},"less"),pastInput:o(function(){var T=this.matched.substr(0,this.matched.length-this.match.length);return(T.length>20?"...":"")+T.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var T=this.match;return T.length<20&&(T+=this._input.substr(0,20-T.length)),(T.substr(0,20)+(T.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var T=this.pastInput(),E=new Array(T.length+1).join("-");return T+this.upcomingInput()+` +`+E+"^"},"showPosition"),test_match:o(function(T,E){var L,S,A;if(this.options.backtrack_lexer&&(A={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(A.yylloc.range=this.yylloc.range.slice(0))),S=T[0].match(/(?:\r\n?|\n).*/g),S&&(this.yylineno+=S.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:S?S[S.length-1].length-S[S.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+T[0].length},this.yytext+=T[0],this.match+=T[0],this.matches=T,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(T[0].length),this.matched+=T[0],L=this.performAction.call(this,this.yy,this,E,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),L)return L;if(this._backtrack){for(var I in A)this[I]=A[I];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var T,E,L,S;this._more||(this.yytext="",this.match="");for(var A=this._currentRules(),I=0;IE[0].length)){if(E=L,S=I,this.options.backtrack_lexer){if(T=this.test_match(L,A[I]),T!==!1)return T;if(this._backtrack){E=!1;continue}else return!1}else if(!this.options.flex)break}return E?(T=this.test_match(E,A[S]),T!==!1?T:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var E=this.next();return E||this.lex()},"lex"),begin:o(function(E){this.conditionStack.push(E)},"begin"),popState:o(function(){var E=this.conditionStack.length-1;return E>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(E){return E=this.conditionStack.length-1-Math.abs(E||0),E>=0?this.conditionStack[E]:"INITIAL"},"topState"),pushState:o(function(E){this.begin(E)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(E,L,S,A){var I=A;switch(S){case 0:return E.getLogger().trace("Found comment",L.yytext),6;break;case 1:return 8;case 2:this.begin("CLASS");break;case 3:return this.popState(),16;break;case 4:this.popState();break;case 5:E.getLogger().trace("Begin icon"),this.begin("ICON");break;case 6:return E.getLogger().trace("SPACELINE"),6;break;case 7:return 7;case 8:return 15;case 9:E.getLogger().trace("end icon"),this.popState();break;case 10:return E.getLogger().trace("Exploding node"),this.begin("NODE"),19;break;case 11:return E.getLogger().trace("Cloud"),this.begin("NODE"),19;break;case 12:return E.getLogger().trace("Explosion Bang"),this.begin("NODE"),19;break;case 13:return E.getLogger().trace("Cloud Bang"),this.begin("NODE"),19;break;case 14:return this.begin("NODE"),19;break;case 15:return this.begin("NODE"),19;break;case 16:return this.begin("NODE"),19;break;case 17:return this.begin("NODE"),19;break;case 18:return 13;case 19:return 22;case 20:return 11;case 21:this.begin("NSTR2");break;case 22:return"NODE_DESCR";case 23:this.popState();break;case 24:E.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 25:return E.getLogger().trace("description:",L.yytext),"NODE_DESCR";break;case 26:this.popState();break;case 27:return this.popState(),E.getLogger().trace("node end ))"),"NODE_DEND";break;case 28:return this.popState(),E.getLogger().trace("node end )"),"NODE_DEND";break;case 29:return this.popState(),E.getLogger().trace("node end ...",L.yytext),"NODE_DEND";break;case 30:return this.popState(),E.getLogger().trace("node end (("),"NODE_DEND";break;case 31:return this.popState(),E.getLogger().trace("node end (-"),"NODE_DEND";break;case 32:return this.popState(),E.getLogger().trace("node end (-"),"NODE_DEND";break;case 33:return this.popState(),E.getLogger().trace("node end (("),"NODE_DEND";break;case 34:return this.popState(),E.getLogger().trace("node end (("),"NODE_DEND";break;case 35:return E.getLogger().trace("Long description:",L.yytext),20;break;case 36:return E.getLogger().trace("Long description:",L.yytext),20;break}},"anonymous"),rules:[/^(?:\s*%%.*)/i,/^(?:mindmap\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{CLASS:{rules:[3,4],inclusive:!1},ICON:{rules:[8,9],inclusive:!1},NSTR2:{rules:[22,23],inclusive:!1},NSTR:{rules:[25,26],inclusive:!1},NODE:{rules:[21,24,27,28,29,30,31,32,33,34,35,36],inclusive:!1},INITIAL:{rules:[0,1,2,5,6,7,10,11,12,13,14,15,16,17,18,19,20],inclusive:!0}}};return _}();x.lexer=b;function w(){this.yy={}}return o(w,"Parser"),w.prototype=x,x.Parser=w,new w}();EP.parser=EP;Tpe=EP});var Xl,Epe,SP,oqe,lqe,cqe,uqe,qi,hqe,fqe,dqe,pqe,mqe,gqe,yqe,Spe,Cpe=M(()=>{"use strict";Vt();fr();ut();bs();Xl=[],Epe=0,SP={},oqe=o(()=>{Xl=[],Epe=0,SP={}},"clear"),lqe=o(function(t){for(let e=Xl.length-1;e>=0;e--)if(Xl[e].levelXl.length>0?Xl[0]:null,"getMindmap"),uqe=o((t,e,r,n)=>{Y.info("addNode",t,e,r,n);let i=pe(),a=i.mindmap?.padding??ur.mindmap.padding;switch(n){case qi.ROUNDED_RECT:case qi.RECT:case qi.HEXAGON:a*=2}let s={id:Epe++,nodeId:kr(e,i),level:t,descr:kr(r,i),type:n,children:[],width:i.mindmap?.maxNodeWidth??ur.mindmap.maxNodeWidth,padding:a},l=lqe(t);if(l)l.children.push(s),Xl.push(s);else if(Xl.length===0)Xl.push(s);else throw new Error('There can be only one root. No parent could be found for ("'+s.descr+'")')},"addNode"),qi={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},hqe=o((t,e)=>{switch(Y.debug("In get type",t,e),t){case"[":return qi.RECT;case"(":return e===")"?qi.ROUNDED_RECT:qi.CLOUD;case"((":return qi.CIRCLE;case")":return qi.CLOUD;case"))":return qi.BANG;case"{{":return qi.HEXAGON;default:return qi.DEFAULT}},"getType"),fqe=o((t,e)=>{SP[t]=e},"setElementForId"),dqe=o(t=>{if(!t)return;let e=pe(),r=Xl[Xl.length-1];t.icon&&(r.icon=kr(t.icon,e)),t.class&&(r.class=kr(t.class,e))},"decorateNode"),pqe=o(t=>{switch(t){case qi.DEFAULT:return"no-border";case qi.RECT:return"rect";case qi.ROUNDED_RECT:return"rounded-rect";case qi.CIRCLE:return"circle";case qi.CLOUD:return"cloud";case qi.BANG:return"bang";case qi.HEXAGON:return"hexgon";default:return"no-border"}},"type2Str"),mqe=o(()=>Y,"getLogger"),gqe=o(t=>SP[t],"getElementById"),yqe={clear:oqe,addNode:uqe,getMindmap:cqe,nodeType:qi,getType:hqe,setElementForId:fqe,decorateNode:dqe,type2Str:pqe,getLogger:mqe,getElementById:gqe},Spe=yqe});function Ki(t){"@babel/helpers - typeof";return Ki=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ki(t)}function tB(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function Ape(t,e){for(var r=0;rt.length)&&(e=t.length);for(var r=0,n=new Array(e);r=t.length?{done:!0}:{done:!1,value:t[n++]}},"n"),e:o(function(u){throw u},"e"),f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a=!0,s=!1,l;return{s:o(function(){r=r.call(t)},"s"),n:o(function(){var u=r.next();return a=u.done,u},"n"),e:o(function(u){s=!0,l=u},"e"),f:o(function(){try{!a&&r.return!=null&&r.return()}finally{if(s)throw l}},"f")}}function Hqe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}function Wqe(t,e){return e={exports:{}},t(e,e.exports),e.exports}function Zqe(t){for(var e=t.length;e--&&Qqe.test(t.charAt(e)););return e}function tXe(t){return t&&t.slice(0,Jqe(t)+1).replace(eXe,"")}function sXe(t){var e=iXe.call(t,Hx),r=t[Hx];try{t[Hx]=void 0;var n=!0}catch{}var i=aXe.call(t);return n&&(e?t[Hx]=r:delete t[Hx]),i}function uXe(t){return cXe.call(t)}function pXe(t){return t==null?t===void 0?dXe:fXe:Npe&&Npe in Object(t)?oXe(t):hXe(t)}function mXe(t){return t!=null&&typeof t=="object"}function vXe(t){return typeof t=="symbol"||gXe(t)&&Zme(t)==yXe}function kXe(t){if(typeof t=="number")return t;if(mb(t))return Rpe;if(X0(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=X0(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=rXe(t);var r=bXe.test(t);return r||wXe.test(t)?TXe(t.slice(2),r?2:8):xXe.test(t)?Rpe:+t}function AXe(t,e,r){var n,i,a,s,l,u,h=0,f=!1,d=!1,p=!0;if(typeof t!="function")throw new TypeError(EXe);e=Mpe(e)||0,X0(r)&&(f=!!r.leading,d="maxWait"in r,a=d?SXe(Mpe(r.maxWait)||0,e):a,p="trailing"in r?!!r.trailing:p);function m(E){var L=n,S=i;return n=i=void 0,h=E,s=t.apply(S,L),s}o(m,"invokeFunc");function g(E){return h=E,l=setTimeout(x,e),f?m(E):s}o(g,"leadingEdge");function y(E){var L=E-u,S=E-h,A=e-L;return d?CXe(A,a-S):A}o(y,"remainingWait");function v(E){var L=E-u,S=E-h;return u===void 0||L>=e||L<0||d&&S>=a}o(v,"shouldInvoke");function x(){var E=CP();if(v(E))return b(E);l=setTimeout(x,y(E))}o(x,"timerExpired");function b(E){return l=void 0,p&&n?m(E):(n=i=void 0,s)}o(b,"trailingEdge");function w(){l!==void 0&&clearTimeout(l),h=0,n=u=i=l=void 0}o(w,"cancel");function _(){return l===void 0?s:b(CP())}o(_,"flush");function T(){var E=CP(),L=v(E);if(n=arguments,i=this,u=E,L){if(l===void 0)return g(u);if(d)return clearTimeout(l),l=setTimeout(x,e),m(u)}return l===void 0&&(l=setTimeout(x,e)),s}return o(T,"debounced"),T.cancel=w,T.flush=_,T}function V6(t,e,r,n,i,a){var s;return ni(t)?s=t:s=k1[t]||k1.euclidean,e===0&&ni(t)?s(i,a):s(e,r,n,i,a)}function xKe(t,e){if(U6(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||mb(t)?!0:vKe.test(t)||!yKe.test(t)||e!=null&&t in Object(e)}function SKe(t){if(!X0(t))return!1;var e=Zme(t);return e==TKe||e==kKe||e==wKe||e==EKe}function _Ke(t){return!!Jpe&&Jpe in t}function RKe(t){if(t!=null){try{return NKe.call(t)}catch{}try{return t+""}catch{}}return""}function $Ke(t){if(!X0(t)||LKe(t))return!1;var e=CKe(t)?GKe:OKe;return e.test(MKe(t))}function UKe(t,e){return t?.[e]}function WKe(t,e){var r=HKe(t,e);return VKe(r)?r:void 0}function qKe(){this.__data__=lb?lb(null):{},this.size=0}function jKe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}function eQe(t){var e=this.__data__;if(lb){var r=e[t];return r===QKe?void 0:r}return JKe.call(e,t)?e[t]:void 0}function iQe(t){var e=this.__data__;return lb?e[t]!==void 0:nQe.call(e,t)}function oQe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=lb&&e===void 0?sQe:e,this}function A1(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e-1}function wQe(t,e){var r=this.__data__,n=H6(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this}function _1(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e-1&&t%1==0&&t0;){var f=i.shift();e(f),a.add(f.id()),l&&n(i,a,f)}return t}function Nge(t,e,r){if(r.isParent())for(var n=r._private.children,i=0;i0&&arguments[0]!==void 0?arguments[0]:aJe,e=arguments.length>1?arguments[1]:void 0,r=0;r0?k=C:D=C;while(Math.abs(R)>s&&++O=a?b(I,O):N===0?O:_(I,D,D+h)}o(T,"getTForX");var E=!1;function L(){E=!0,(t!==e||r!==n)&&w()}o(L,"precompute");var S=o(function(D){return E||L(),t===e&&r===n?D:D===0?0:D===1?1:v(T(D),e,n)},"f");S.getControlPoints=function(){return[{x:t,y:e},{x:r,y:n}]};var A="generateBezier("+[t,e,r,n]+")";return S.toString=function(){return A},S}function vme(t,e,r,n,i){if(n===1||e===r)return r;var a=i(e,r,n);return t==null||((t.roundValue||t.color)&&(a=Math.round(a)),t.min!==void 0&&(a=Math.max(a,t.min)),t.max!==void 0&&(a=Math.min(a,t.max))),a}function xme(t,e){return t.pfValue!=null||t.value!=null?t.pfValue!=null&&(e==null||e.type.units!=="%")?t.pfValue:t.value:t}function h1(t,e,r,n,i){var a=i!=null?i.type:null;r<0?r=0:r>1&&(r=1);var s=xme(t,i),l=xme(e,i);if(xt(s)&&xt(l))return vme(a,s,l,r,n);if(kn(s)&&kn(l)){for(var u=[],h=0;h0?(m==="spring"&&g.push(s.duration),s.easingImpl=w6[m].apply(null,g)):s.easingImpl=w6[m]}var y=s.easingImpl,v;if(s.duration===0?v=1:v=(r-u)/s.duration,s.applying&&(v=s.progress),v<0?v=0:v>1&&(v=1),s.delay==null){var x=s.startPosition,b=s.position;if(b&&i&&!t.locked()){var w={};Xx(x.x,b.x)&&(w.x=h1(x.x,b.x,v,y)),Xx(x.y,b.y)&&(w.y=h1(x.y,b.y,v,y)),t.position(w)}var _=s.startPan,T=s.pan,E=a.pan,L=T!=null&&n;L&&(Xx(_.x,T.x)&&(E.x=h1(_.x,T.x,v,y)),Xx(_.y,T.y)&&(E.y=h1(_.y,T.y,v,y)),t.emit("pan"));var S=s.startZoom,A=s.zoom,I=A!=null&&n;I&&(Xx(S,A)&&(a.zoom=sb(a.minZoom,h1(S,A,v,y),a.maxZoom)),t.emit("zoom")),(L||I)&&t.emit("viewport");var D=s.style;if(D&&D.length>0&&i){for(var k=0;k=0;L--){var S=E[L];S()}E.splice(0,E.length)},"callbacks"),b=m.length-1;b>=0;b--){var w=m[b],_=w._private;if(_.stopped){m.splice(b,1),_.hooked=!1,_.playing=!1,_.started=!1,x(_.frames);continue}!_.playing&&!_.applying||(_.playing&&_.applying&&(_.applying=!1),_.started||xJe(f,w,t),vJe(f,w,t,d),_.applying&&(_.applying=!1),x(_.frames),_.step!=null&&_.step(t),w.completed()&&(m.splice(b,1),_.hooked=!1,_.playing=!1,_.started=!1,x(_.completes)),y=!0)}return!d&&m.length===0&&g.length===0&&n.push(f),y}o(i,"stepOne");for(var a=!1,s=0;s0?e.notify("draw",r):e.notify("draw")),r.unmerge(n),e.emit("step")}function Xge(t){this.options=ir({},AJe,_Je,t)}function jge(t){this.options=ir({},LJe,t)}function Kge(t){this.options=ir({},DJe,t)}function Z6(t){this.options=ir({},NJe,t),this.options.layout=this;var e=this.options.eles.nodes(),r=this.options.eles.edges(),n=r.filter(function(i){var a=i.source().data("id"),s=i.target().data("id"),l=e.some(function(h){return h.data("id")===a}),u=e.some(function(h){return h.data("id")===s});return!l||!u});this.options.eles=this.options.eles.not(n)}function Zge(t){this.options=ir({},XJe,t)}function bB(t){this.options=ir({},jJe,t)}function Jge(t){this.options=ir({},KJe,t)}function e1e(t){this.options=ir({},QJe,t)}function t1e(t){this.options=t,this.notifications=0}function i1e(t,e){e.radius===0?t.lineTo(e.cx,e.cy):t.arc(e.cx,e.cy,e.radius,e.startAngle,e.endAngle,e.counterClockwise)}function TB(t,e,r,n){var i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0;return n===0||e.radius===0?{cx:e.x,cy:e.y,radius:0,startX:e.x,startY:e.y,stopX:e.x,stopY:e.y,startAngle:void 0,endAngle:void 0,counterClockwise:void 0}:(eet(t,e,r,n,i),{cx:qP,cy:XP,radius:W0,startX:r1e,startY:n1e,stopX:jP,stopY:KP,startAngle:Qc.ang+Math.PI/2*Y0,endAngle:cl.ang-Math.PI/2*Y0,counterClockwise:E6})}function a1e(t){var e=[];if(t!=null){for(var r=0;r5&&arguments[5]!==void 0?arguments[5]:5,s=arguments.length>6?arguments[6]:void 0;t.beginPath(),t.moveTo(e+a,r),t.lineTo(e+n-a,r),t.quadraticCurveTo(e+n,r,e+n,r+a),t.lineTo(e+n,r+i-a),t.quadraticCurveTo(e+n,r+i,e+n-a,r+i),t.lineTo(e+a,r+i),t.quadraticCurveTo(e,r+i,e,r+i-a),t.lineTo(e,r+a),t.quadraticCurveTo(e,r,e+a,r),t.closePath(),s?t.stroke():t.fill()}function Het(t,e){for(var r=atob(t),n=new ArrayBuffer(r.length),i=new Uint8Array(n),a=0;a{"use strict";o(Ki,"_typeof");o(tB,"_classCallCheck");o(Ape,"_defineProperties");o(rB,"_createClass");o($me,"_defineProperty$1");o(jl,"_slicedToArray");o(vqe,"_arrayWithHoles");o(xqe,"_iterableToArrayLimit");o(Vme,"_unsupportedIterableToArray");o(_pe,"_arrayLikeToArray");o(bqe,"_nonIterableRest");o(Ume,"_createForOfIteratorHelper");Xi=typeof window>"u"?null:window,Lpe=Xi?Xi.navigator:null;Xi&&Xi.document;wqe=Ki(""),Hme=Ki({}),Tqe=Ki(function(){}),kqe=typeof HTMLElement>"u"?"undefined":Ki(HTMLElement),db=o(function(e){return e&&e.instanceString&&ni(e.instanceString)?e.instanceString():null},"instanceStr"),Zt=o(function(e){return e!=null&&Ki(e)==wqe},"string"),ni=o(function(e){return e!=null&&Ki(e)===Tqe},"fn"),kn=o(function(e){return!wo(e)&&(Array.isArray?Array.isArray(e):e!=null&&e instanceof Array)},"array"),Ur=o(function(e){return e!=null&&Ki(e)===Hme&&!kn(e)&&e.constructor===Object},"plainObject"),Eqe=o(function(e){return e!=null&&Ki(e)===Hme},"object"),xt=o(function(e){return e!=null&&Ki(e)===Ki(1)&&!isNaN(e)},"number"),Sqe=o(function(e){return xt(e)&&Math.floor(e)===e},"integer"),C6=o(function(e){if(kqe!=="undefined")return e!=null&&e instanceof HTMLElement},"htmlElement"),wo=o(function(e){return pb(e)||Wme(e)},"elementOrCollection"),pb=o(function(e){return db(e)==="collection"&&e._private.single},"element"),Wme=o(function(e){return db(e)==="collection"&&!e._private.single},"collection"),nB=o(function(e){return db(e)==="core"},"core"),Yme=o(function(e){return db(e)==="stylesheet"},"stylesheet"),Cqe=o(function(e){return db(e)==="event"},"event"),If=o(function(e){return e==null?!0:!!(e===""||e.match(/^\s+$/))},"emptyString"),Aqe=o(function(e){return typeof HTMLElement>"u"?!1:e instanceof HTMLElement},"domElement"),_qe=o(function(e){return Ur(e)&&xt(e.x1)&&xt(e.x2)&&xt(e.y1)&&xt(e.y2)},"boundingBox"),Lqe=o(function(e){return Eqe(e)&&ni(e.then)},"promise"),Dqe=o(function(){return Lpe&&Lpe.userAgent.match(/msie|trident|edge/i)},"ms"),rb=o(function(e,r){r||(r=o(function(){if(arguments.length===1)return arguments[0];if(arguments.length===0)return"undefined";for(var a=[],s=0;sr?1:0},"ascending"),Bqe=o(function(e,r){return-1*Xme(e,r)},"descending"),ir=Object.assign!=null?Object.assign.bind(Object):function(t){for(var e=arguments,r=1;r1&&(v-=1),v<1/6?g+(y-g)*6*v:v<1/2?y:v<2/3?g+(y-g)*(2/3-v)*6:g}o(f,"hue2rgb");var d=new RegExp("^"+Mqe+"$").exec(e);if(d){if(n=parseInt(d[1]),n<0?n=(360- -1*n%360)%360:n>360&&(n=n%360),n/=360,i=parseFloat(d[2]),i<0||i>100||(i=i/100,a=parseFloat(d[3]),a<0||a>100)||(a=a/100,s=d[4],s!==void 0&&(s=parseFloat(s),s<0||s>1)))return;if(i===0)l=u=h=Math.round(a*255);else{var p=a<.5?a*(1+i):a+i-a*i,m=2*a-p;l=Math.round(255*f(m,p,n+1/3)),u=Math.round(255*f(m,p,n)),h=Math.round(255*f(m,p,n-1/3))}r=[l,u,h,s]}return r},"hsl2tuple"),Gqe=o(function(e){var r,n=new RegExp("^"+Nqe+"$").exec(e);if(n){r=[];for(var i=[],a=1;a<=3;a++){var s=n[a];if(s[s.length-1]==="%"&&(i[a]=!0),s=parseFloat(s),i[a]&&(s=s/100*255),s<0||s>255)return;r.push(Math.floor(s))}var l=i[1]||i[2]||i[3],u=i[1]&&i[2]&&i[3];if(l&&!u)return;var h=n[4];if(h!==void 0){if(h=parseFloat(h),h<0||h>1)return;r.push(h)}}return r},"rgb2tuple"),$qe=o(function(e){return Uqe[e.toLowerCase()]},"colorname2tuple"),Vqe=o(function(e){return(kn(e)?e:null)||$qe(e)||Fqe(e)||Gqe(e)||zqe(e)},"color2tuple"),Uqe={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},jme=o(function(e){for(var r=e.map,n=e.keys,i=n.length,a=0;a1&&arguments[1]!==void 0?arguments[1]:p1,n=r,i;i=e.next(),!i.done;)n=n*ege+i.value|0;return n},"hashIterableInts"),nb=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:p1;return r*ege+e|0},"hashInt"),ib=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Kx;return(r<<5)+r+e|0},"hashIntAlt"),LXe=o(function(e,r){return e*2097152+r},"combineHashes"),_f=o(function(e){return e[0]*2097152+e[1]},"combineHashesArray"),a6=o(function(e,r){return[nb(e[0],r[0]),ib(e[1],r[1])]},"hashArrays"),DXe=o(function(e,r){var n={value:0,done:!1},i=0,a=e.length,s={next:o(function(){return i=0&&!(e[i]===r&&(e.splice(i,1),n));i--);},"removeFromArray"),oB=o(function(e){e.splice(0,e.length)},"clearArray"),BXe=o(function(e,r){for(var n=0;n"u"?"undefined":Ki(Set))!==zXe?Set:GXe,G6=o(function(e,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(e===void 0||r===void 0||!nB(e)){di("An element must have a core reference and parameters set");return}var i=r.group;if(i==null&&(r.data&&r.data.source!=null&&r.data.target!=null?i="edges":i="nodes"),i!=="nodes"&&i!=="edges"){di("An element must be of type `nodes` or `edges`; you specified `"+i+"`");return}this.length=1,this[0]=this;var a=this._private={cy:e,single:!0,data:r.data||{},position:r.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:i,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!r.selected,selectable:r.selectable===void 0?!0:!!r.selectable,locked:!!r.locked,grabbed:!1,grabbable:r.grabbable===void 0?!0:!!r.grabbable,pannable:r.pannable===void 0?i==="edges":!!r.pannable,active:!1,classes:new S1,animation:{current:[],queue:[]},rscratch:{},scratch:r.scratch||{},edges:[],children:[],parent:r.parent&&r.parent.isNode()?r.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(a.position.x==null&&(a.position.x=0),a.position.y==null&&(a.position.y=0),r.renderedPosition){var s=r.renderedPosition,l=e.pan(),u=e.zoom();a.position={x:(s.x-l.x)/u,y:(s.y-l.y)/u}}var h=[];kn(r.classes)?h=r.classes:Zt(r.classes)&&(h=r.classes.split(/\s+/));for(var f=0,d=h.length;fb?1:0},"defaultCmp"),f=o(function(x,b,w,_,T){var E;if(w==null&&(w=0),T==null&&(T=n),w<0)throw new Error("lo must be non-negative");for(_==null&&(_=x.length);w<_;)E=i((w+_)/2),T(b,x[E])<0?_=E:w=E+1;return[].splice.apply(x,[w,w-w].concat(b)),b},"insort"),l=o(function(x,b,w){return w==null&&(w=n),x.push(b),y(x,0,x.length-1,w)},"heappush"),s=o(function(x,b){var w,_;return b==null&&(b=n),w=x.pop(),x.length?(_=x[0],x[0]=w,v(x,0,b)):_=w,_},"heappop"),h=o(function(x,b,w){var _;return w==null&&(w=n),_=x[0],x[0]=b,v(x,0,w),_},"heapreplace"),u=o(function(x,b,w){var _;return w==null&&(w=n),x.length&&w(x[0],b)<0&&(_=[x[0],b],b=_[0],x[0]=_[1],v(x,0,w)),b},"heappushpop"),a=o(function(x,b){var w,_,T,E,L,S;for(b==null&&(b=n),E=function(){S=[];for(var A=0,I=i(x.length/2);0<=I?AI;0<=I?A++:A--)S.push(A);return S}.apply(this).reverse(),L=[],_=0,T=E.length;_D;0<=D?++S:--S)k.push(s(x,w));return k},"nsmallest"),y=o(function(x,b,w,_){var T,E,L;for(_==null&&(_=n),T=x[w];w>b;){if(L=w-1>>1,E=x[L],_(T,E)<0){x[w]=E,w=L;continue}break}return x[w]=T},"_siftdown"),v=o(function(x,b,w){var _,T,E,L,S;for(w==null&&(w=n),T=x.length,S=b,E=x[b],_=2*b+1;_0;){var E=b.pop(),L=v(E),S=E.id();if(p[S]=L,L!==1/0)for(var A=E.neighborhood().intersect(g),I=0;I0)for(F.unshift(P);d[G];){var z=d[G];F.unshift(z.edge),F.unshift(z.node),B=z.node,G=B.id()}return l.spawn(F)},"pathTo")}},"dijkstra")},HXe={kruskal:o(function(e){e=e||function(w){return 1};for(var r=this.byGroup(),n=r.nodes,i=r.edges,a=n.length,s=new Array(a),l=n,u=o(function(_){for(var T=0;T0;){if(T(),L++,_===f){for(var S=[],A=a,I=f,D=x[I];S.unshift(A),D!=null&&S.unshift(D),A=v[I],A!=null;)I=A.id(),D=x[I];return{found:!0,distance:d[_],path:this.spawn(S),steps:L}}m[_]=!0;for(var k=w._private.edges,R=0;RD&&(g[I]=D,b[I]=A,w[I]=T),!a){var k=A*f+S;!a&&g[k]>D&&(g[k]=D,b[k]=S,w[k]=T)}}}for(var R=0;R1&&arguments[1]!==void 0?arguments[1]:s,Ce=w(ke),Pe=[],Ie=Ce;;){if(Ie==null)return r.spawn();var $e=b(Ie),ye=$e.edge,X=$e.pred;if(Pe.unshift(Ie[0]),Ie.same(Re)&&Pe.length>0)break;ye!=null&&Pe.unshift(ye),Ie=X}return u.spawn(Pe)},"pathTo"),E=0;E=0;f--){var d=h[f],p=d[1],m=d[2];(r[p]===l&&r[m]===u||r[p]===u&&r[m]===l)&&h.splice(f,1)}for(var g=0;gi;){var a=Math.floor(Math.random()*r.length);r=ZXe(a,e,r),n--}return r},"contractUntil"),JXe={kargerStein:o(function(){var e=this,r=this.byGroup(),n=r.nodes,i=r.edges;i.unmergeBy(function(F){return F.isLoop()});var a=n.length,s=i.length,l=Math.ceil(Math.pow(Math.log(a)/Math.LN2,2)),u=Math.floor(a/QXe);if(a<2){di("At least 2 nodes are required for Karger-Stein algorithm");return}for(var h=[],f=0;f1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=1/0,a=r;a1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=-1/0,a=r;a1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=0,a=0,s=r;s1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0;i?e=e.slice(r,n):(n0&&e.splice(0,r));for(var l=0,u=e.length-1;u>=0;u--){var h=e[u];s?isFinite(h)||(e[u]=-1/0,l++):e.splice(u,1)}a&&e.sort(function(p,m){return p-m});var f=e.length,d=Math.floor(f/2);return f%2!==0?e[d+1+l]:(e[d-1+l]+e[d+l])/2},"median"),aje=o(function(e){return Math.PI*e/180},"deg2rad"),s6=o(function(e,r){return Math.atan2(r,e)-Math.PI/2},"getAngleFromDisp"),lB=Math.log2||function(t){return Math.log(t)/Math.log(2)},lge=o(function(e){return e>0?1:e<0?-1:0},"signum"),K0=o(function(e,r){return Math.sqrt(U0(e,r))},"dist"),U0=o(function(e,r){var n=r.x-e.x,i=r.y-e.y;return n*n+i*i},"sqdist"),sje=o(function(e){for(var r=e.length,n=0,i=0;i=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(e.w!=null&&e.h!=null&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},"makeBoundingBox"),lje=o(function(e){return{x1:e.x1,x2:e.x2,w:e.w,y1:e.y1,y2:e.y2,h:e.h}},"copyBoundingBox"),cje=o(function(e){e.x1=1/0,e.y1=1/0,e.x2=-1/0,e.y2=-1/0,e.w=0,e.h=0},"clearBoundingBox"),uje=o(function(e,r,n){return{x1:e.x1+r,x2:e.x2+r,y1:e.y1+n,y2:e.y2+n,w:e.w,h:e.h}},"shiftBoundingBox"),cge=o(function(e,r){e.x1=Math.min(e.x1,r.x1),e.x2=Math.max(e.x2,r.x2),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,r.y1),e.y2=Math.max(e.y2,r.y2),e.h=e.y2-e.y1},"updateBoundingBox"),hje=o(function(e,r,n){e.x1=Math.min(e.x1,r),e.x2=Math.max(e.x2,r),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,n),e.y2=Math.max(e.y2,n),e.h=e.y2-e.y1},"expandBoundingBoxByPoint"),y6=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return e.x1-=r,e.x2+=r,e.y1-=r,e.y2+=r,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},"expandBoundingBox"),v6=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[0],n,i,a,s;if(r.length===1)n=i=a=s=r[0];else if(r.length===2)n=a=r[0],s=i=r[1];else if(r.length===4){var l=jl(r,4);n=l[0],i=l[1],a=l[2],s=l[3]}return e.x1-=s,e.x2+=i,e.y1-=n,e.y2+=a,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},"expandBoundingBoxSides"),Bpe=o(function(e,r){e.x1=r.x1,e.y1=r.y1,e.x2=r.x2,e.y2=r.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1},"assignBoundingBox"),cB=o(function(e,r){return!(e.x1>r.x2||r.x1>e.x2||e.x2r.y2||r.y1>e.y2)},"boundingBoxesIntersect"),T1=o(function(e,r,n){return e.x1<=r&&r<=e.x2&&e.y1<=n&&n<=e.y2},"inBoundingBox"),fje=o(function(e,r){return T1(e,r.x,r.y)},"pointInBoundingBox"),uge=o(function(e,r){return T1(e,r.x1,r.y1)&&T1(e,r.x2,r.y2)},"boundingBoxInBoundingBox"),hge=o(function(e,r,n,i,a,s,l){var u=arguments.length>7&&arguments[7]!==void 0?arguments[7]:"auto",h=u==="auto"?Q0(a,s):u,f=a/2,d=s/2;h=Math.min(h,f,d);var p=h!==f,m=h!==d,g;if(p){var y=n-f+h-l,v=i-d-l,x=n+f-h+l,b=v;if(g=Nf(e,r,n,i,y,v,x,b,!1),g.length>0)return g}if(m){var w=n+f+l,_=i-d+h-l,T=w,E=i+d-h+l;if(g=Nf(e,r,n,i,w,_,T,E,!1),g.length>0)return g}if(p){var L=n-f+h-l,S=i+d+l,A=n+f-h+l,I=S;if(g=Nf(e,r,n,i,L,S,A,I,!1),g.length>0)return g}if(m){var D=n-f-l,k=i-d+h-l,R=D,C=i+d-h+l;if(g=Nf(e,r,n,i,D,k,R,C,!1),g.length>0)return g}var O;{var N=n-f+h,P=i-d+h;if(O=Qx(e,r,n,i,N,P,h+l),O.length>0&&O[0]<=N&&O[1]<=P)return[O[0],O[1]]}{var F=n+f-h,B=i-d+h;if(O=Qx(e,r,n,i,F,B,h+l),O.length>0&&O[0]>=F&&O[1]<=B)return[O[0],O[1]]}{var G=n+f-h,z=i+d-h;if(O=Qx(e,r,n,i,G,z,h+l),O.length>0&&O[0]>=G&&O[1]>=z)return[O[0],O[1]]}{var W=n-f+h,Z=i+d-h;if(O=Qx(e,r,n,i,W,Z,h+l),O.length>0&&O[0]<=W&&O[1]>=Z)return[O[0],O[1]]}return[]},"roundRectangleIntersectLine"),dje=o(function(e,r,n,i,a,s,l){var u=l,h=Math.min(n,a),f=Math.max(n,a),d=Math.min(i,s),p=Math.max(i,s);return h-u<=e&&e<=f+u&&d-u<=r&&r<=p+u},"inLineVicinity"),pje=o(function(e,r,n,i,a,s,l,u,h){var f={x1:Math.min(n,l,a)-h,x2:Math.max(n,l,a)+h,y1:Math.min(i,u,s)-h,y2:Math.max(i,u,s)+h};return!(ef.x2||rf.y2)},"inBezierVicinity"),mje=o(function(e,r,n,i){n-=i;var a=r*r-4*e*n;if(a<0)return[];var s=Math.sqrt(a),l=2*e,u=(-r+s)/l,h=(-r-s)/l;return[u,h]},"solveQuadratic"),gje=o(function(e,r,n,i,a){var s=1e-5;e===0&&(e=s),r/=e,n/=e,i/=e;var l,u,h,f,d,p,m,g;if(u=(3*n-r*r)/9,h=-(27*i)+r*(9*n-2*(r*r)),h/=54,l=u*u*u+h*h,a[1]=0,m=r/3,l>0){d=h+Math.sqrt(l),d=d<0?-Math.pow(-d,1/3):Math.pow(d,1/3),p=h-Math.sqrt(l),p=p<0?-Math.pow(-p,1/3):Math.pow(p,1/3),a[0]=-m+d+p,m+=(d+p)/2,a[4]=a[2]=-m,m=Math.sqrt(3)*(-p+d)/2,a[3]=m,a[5]=-m;return}if(a[5]=a[3]=0,l===0){g=h<0?-Math.pow(-h,1/3):Math.pow(h,1/3),a[0]=-m+2*g,a[4]=a[2]=-(g+m);return}u=-u,f=u*u*u,f=Math.acos(h/Math.sqrt(f)),g=2*Math.sqrt(u),a[0]=-m+g*Math.cos(f/3),a[2]=-m+g*Math.cos((f+2*Math.PI)/3),a[4]=-m+g*Math.cos((f+4*Math.PI)/3)},"solveCubic"),yje=o(function(e,r,n,i,a,s,l,u){var h=1*n*n-4*n*a+2*n*l+4*a*a-4*a*l+l*l+i*i-4*i*s+2*i*u+4*s*s-4*s*u+u*u,f=1*9*n*a-3*n*n-3*n*l-6*a*a+3*a*l+9*i*s-3*i*i-3*i*u-6*s*s+3*s*u,d=1*3*n*n-6*n*a+n*l-n*e+2*a*a+2*a*e-l*e+3*i*i-6*i*s+i*u-i*r+2*s*s+2*s*r-u*r,p=1*n*a-n*n+n*e-a*e+i*s-i*i+i*r-s*r,m=[];gje(h,f,d,p,m);for(var g=1e-7,y=[],v=0;v<6;v+=2)Math.abs(m[v+1])=0&&m[v]<=1&&y.push(m[v]);y.push(1),y.push(0);for(var x=-1,b,w,_,T=0;T=0?_h?(e-a)*(e-a)+(r-s)*(r-s):f-p},"sqdistToFiniteLine"),js=o(function(e,r,n){for(var i,a,s,l,u,h=0,f=0;f=e&&e>=s||i<=e&&e<=s)u=(e-i)/(s-i)*(l-a)+a,u>r&&h++;else continue;return h%2!==0},"pointInsidePolygonPoints"),ah=o(function(e,r,n,i,a,s,l,u,h){var f=new Array(n.length),d;u[0]!=null?(d=Math.atan(u[1]/u[0]),u[0]<0?d=d+Math.PI/2:d=-d-Math.PI/2):d=u;for(var p=Math.cos(-d),m=Math.sin(-d),g=0;g0){var v=D6(f,-h);y=L6(v)}else y=f;return js(e,r,y)},"pointInsidePolygon"),xje=o(function(e,r,n,i,a,s,l,u){for(var h=new Array(n.length*2),f=0;f=0&&v<=1&&b.push(v),x>=0&&x<=1&&b.push(x),b.length===0)return[];var w=b[0]*u[0]+e,_=b[0]*u[1]+r;if(b.length>1){if(b[0]==b[1])return[w,_];var T=b[1]*u[0]+e,E=b[1]*u[1]+r;return[w,_,T,E]}else return[w,_]},"intersectLineCircle"),LP=o(function(e,r,n){return r<=e&&e<=n||n<=e&&e<=r?e:e<=r&&r<=n||n<=r&&r<=e?r:n},"midOfThree"),Nf=o(function(e,r,n,i,a,s,l,u,h){var f=e-a,d=n-e,p=l-a,m=r-s,g=i-r,y=u-s,v=p*m-y*f,x=d*m-g*f,b=y*d-p*g;if(b!==0){var w=v/b,_=x/b,T=.001,E=0-T,L=1+T;return E<=w&&w<=L&&E<=_&&_<=L?[e+w*d,r+w*g]:h?[e+w*d,r+w*g]:[]}else return v===0||x===0?LP(e,n,l)===l?[l,u]:LP(e,n,a)===a?[a,s]:LP(a,l,n)===n?[n,i]:[]:[]},"finiteLinesIntersect"),ob=o(function(e,r,n,i,a,s,l,u){var h=[],f,d=new Array(n.length),p=!0;s==null&&(p=!1);var m;if(p){for(var g=0;g0){var y=D6(d,-u);m=L6(y)}else m=d}else m=n;for(var v,x,b,w,_=0;_2){for(var g=[f[0],f[1]],y=Math.pow(g[0]-e,2)+Math.pow(g[1]-r,2),v=1;vf&&(f=_)},"set"),get:o(function(w){return h[w]},"get")},p=0;p0?N=O.edgesTo(C)[0]:N=C.edgesTo(O)[0];var P=i(N);C=C.id(),S[C]>S[k]+P&&(S[C]=S[k]+P,A.nodes.indexOf(C)<0?A.push(C):A.updateItem(C),L[C]=0,E[C]=[]),S[C]==S[k]+P&&(L[C]=L[C]+L[k],E[C].push(k))}else for(var F=0;F0;){for(var W=T.pop(),Z=0;Z0&&l.push(n[u]);l.length!==0&&a.push(i.collection(l))}return a},"assign"),Oje=o(function(e,r){for(var n=0;n5&&arguments[5]!==void 0?arguments[5]:Fje,l=i,u,h,f=0;f=2?Wx(e,r,n,0,Vpe,zje):Wx(e,r,n,0,$pe)},"euclidean"),squaredEuclidean:o(function(e,r,n){return Wx(e,r,n,0,Vpe)},"squaredEuclidean"),manhattan:o(function(e,r,n){return Wx(e,r,n,0,$pe)},"manhattan"),max:o(function(e,r,n){return Wx(e,r,n,-1/0,Gje)},"max")};k1["squared-euclidean"]=k1.squaredEuclidean;k1.squaredeuclidean=k1.squaredEuclidean;o(V6,"clusteringDistance");$je=_a({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),hB=o(function(e){return $je(e)},"setOptions"),N6=o(function(e,r,n,i,a){var s=a!=="kMedoids",l=s?function(d){return n[d]}:function(d){return i[d](n)},u=o(function(p){return i[p](r)},"getQ"),h=n,f=r;return V6(e,i.length,l,u,h,f)},"getDist"),DP=o(function(e,r,n){for(var i=n.length,a=new Array(i),s=new Array(i),l=new Array(r),u=null,h=0;hn)return!1}return!0},"haveMatricesConverged"),Hje=o(function(e,r,n){for(var i=0;il&&(l=r[h][f],u=f);a[u].push(e[h])}for(var d=0;d=a.threshold||a.mode==="dendrogram"&&e.length===1)return!1;var g=r[s],y=r[i[s]],v;a.mode==="dendrogram"?v={left:g,right:y,key:g.key}:v={value:g.value.concat(y.value),key:g.key},e[g.index]=v,e.splice(y.index,1),r[g.key]=v;for(var x=0;xn[y.key][b.key]&&(u=n[y.key][b.key])):a.linkage==="max"?(u=n[g.key][b.key],n[g.key][b.key]0&&i.push(a);return i},"findExemplars"),Xpe=o(function(e,r,n){for(var i=[],a=0;al&&(s=h,l=r[a*e+h])}s>0&&i.push(s)}for(var f=0;fh&&(u=f,h=d)}n[a]=s[u]}return i=Xpe(e,r,n),i},"assign"),jpe=o(function(e){for(var r=this.cy(),n=this.nodes(),i=iKe(e),a={},s=0;s=D?(k=D,D=C,R=O):C>k&&(k=C);for(var N=0;N0?1:0;L[A%i.minIterations*l+W]=Z,z+=Z}if(z>0&&(A>=i.minIterations-1||A==i.maxIterations-1)){for(var j=0,oe=0;oe1||E>1)&&(l=!0),d[w]=[],b.outgoers().forEach(function(S){S.isEdge()&&d[w].push(S.id())})}else p[w]=[void 0,b.target().id()]}):s.forEach(function(b){var w=b.id();if(b.isNode()){var _=b.degree(!0);_%2&&(u?h?l=!0:h=w:u=w),d[w]=[],b.connectedEdges().forEach(function(T){return d[w].push(T.id())})}else p[w]=[b.source().id(),b.target().id()]});var m={found:!1,trail:void 0};if(l)return m;if(h&&u)if(a){if(f&&h!=f)return m;f=h}else{if(f&&h!=f&&u!=f)return m;f||(f=h)}else f||(f=s[0].id());var g=o(function(w){for(var _=w,T=[w],E,L,S;d[_].length;)E=d[_].shift(),L=p[E][0],S=p[E][1],_!=S?(d[S]=d[S].filter(function(A){return A!=E}),_=S):!a&&_!=L&&(d[L]=d[L].filter(function(A){return A!=E}),_=L),T.unshift(E),T.unshift(_);return T},"walk"),y=[],v=[];for(v=g(f);v.length!=1;)d[v[0]].length==0?(y.unshift(s.getElementById(v.shift())),y.unshift(s.getElementById(v.shift()))):v=g(v.shift()).concat(v);y.unshift(s.getElementById(v.shift()));for(var x in d)if(d[x].length)return m;return m.found=!0,m.trail=this.spawn(y,!0),m},"hierholzer")},c6=o(function(){var e=this,r={},n=0,i=0,a=[],s=[],l={},u=o(function(p,m){for(var g=s.length-1,y=[],v=e.spawn();s[g].x!=p||s[g].y!=m;)y.push(s.pop().edge),g--;y.push(s.pop().edge),y.forEach(function(x){var b=x.connectedNodes().intersection(e);v.merge(x),b.forEach(function(w){var _=w.id(),T=w.connectedEdges().intersection(e);v.merge(w),r[_].cutVertex?v.merge(T.filter(function(E){return E.isLoop()})):v.merge(T)})}),a.push(v)},"buildComponent"),h=o(function d(p,m,g){p===g&&(i+=1),r[m]={id:n,low:n++,cutVertex:!1};var y=e.getElementById(m).connectedEdges().intersection(e);if(y.size()===0)a.push(e.spawn(e.getElementById(m)));else{var v,x,b,w;y.forEach(function(_){v=_.source().id(),x=_.target().id(),b=v===m?x:v,b!==g&&(w=_.id(),l[w]||(l[w]=!0,s.push({x:m,y:b,edge:_})),b in r?r[m].low=Math.min(r[m].low,r[b].id):(d(p,b,m),r[m].low=Math.min(r[m].low,r[b].low),r[m].id<=r[b].low&&(r[m].cutVertex=!0,u(m,b))))})}},"biconnectedSearch");e.forEach(function(d){if(d.isNode()){var p=d.id();p in r||(i=0,h(p,p),r[p].cutVertex=i>1)}});var f=Object.keys(r).filter(function(d){return r[d].cutVertex}).map(function(d){return e.getElementById(d)});return{cut:e.spawn(f),components:a}},"hopcroftTarjanBiconnected"),fKe={hopcroftTarjanBiconnected:c6,htbc:c6,htb:c6,hopcroftTarjanBiconnectedComponents:c6},u6=o(function(){var e=this,r={},n=0,i=[],a=[],s=e.spawn(e),l=o(function u(h){a.push(h),r[h]={index:n,low:n++,explored:!1};var f=e.getElementById(h).connectedEdges().intersection(e);if(f.forEach(function(y){var v=y.target().id();v!==h&&(v in r||u(v),r[v].explored||(r[h].low=Math.min(r[h].low,r[v].low)))}),r[h].index===r[h].low){for(var d=e.spawn();;){var p=a.pop();if(d.merge(e.getElementById(p)),r[p].low=r[h].index,r[p].explored=!0,p===h)break}var m=d.edgesWith(d),g=d.merge(m);i.push(g),s=s.difference(g)}},"stronglyConnectedSearch");return e.forEach(function(u){if(u.isNode()){var h=u.id();h in r||l(h)}}),{cut:s,components:i}},"tarjanStronglyConnected"),dKe={tarjanStronglyConnected:u6,tsc:u6,tscc:u6,tarjanStronglyConnectedComponents:u6},vge={};[ab,UXe,HXe,YXe,XXe,KXe,JXe,Eje,v1,x1,$P,Bje,Kje,rKe,cKe,hKe,fKe,dKe].forEach(function(t){ir(vge,t)});xge=0,bge=1,wge=2,sh=o(function t(e){if(!(this instanceof t))return new t(e);this.id="Thenable/1.0.7",this.state=xge,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},typeof e=="function"&&e.call(this,this.fulfill.bind(this),this.reject.bind(this))},"api");sh.prototype={fulfill:o(function(e){return Kpe(this,bge,"fulfillValue",e)},"fulfill"),reject:o(function(e){return Kpe(this,wge,"rejectReason",e)},"reject"),then:o(function(e,r){var n=this,i=new sh;return n.onFulfilled.push(Zpe(e,i,"fulfill")),n.onRejected.push(Zpe(r,i,"reject")),Tge(n),i.proxy},"then")};Kpe=o(function(e,r,n,i){return e.state===xge&&(e.state=r,e[n]=i,Tge(e)),e},"deliver"),Tge=o(function(e){e.state===bge?Qpe(e,"onFulfilled",e.fulfillValue):e.state===wge&&Qpe(e,"onRejected",e.rejectReason)},"execute"),Qpe=o(function(e,r,n){if(e[r].length!==0){var i=e[r];e[r]=[];var a=o(function(){for(var l=0;l0},"animatedImpl")},"animated"),clearQueue:o(function(){return o(function(){var r=this,n=r.length!==void 0,i=n?r:[r],a=this._private.cy||this;if(!a.styleEnabled())return this;for(var s=0;s0&&this.spawn(i).updateStyle().emit("class"),r},"classes"),addClass:o(function(e){return this.toggleClass(e,!0)},"addClass"),hasClass:o(function(e){var r=this[0];return r!=null&&r._private.classes.has(e)},"hasClass"),toggleClass:o(function(e,r){kn(e)||(e=e.match(/\S+/g)||[]);for(var n=this,i=r===void 0,a=[],s=0,l=n.length;s0&&this.spawn(a).updateStyle().emit("class"),n},"toggleClass"),removeClass:o(function(e){return this.toggleClass(e,!1)},"removeClass"),flashClass:o(function(e,r){var n=this;if(r==null)r=250;else if(r===0)return n;return n.addClass(e),setTimeout(function(){n.removeClass(e)},r),n},"flashClass")};x6.className=x6.classNames=x6.classes;Vr={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:`"(?:\\\\"|[^"])*"|'(?:\\\\'|[^'])*'`,number:ji,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};Vr.variable="(?:[\\w-.]|(?:\\\\"+Vr.metaChar+"))+";Vr.className="(?:[\\w-]|(?:\\\\"+Vr.metaChar+"))+";Vr.value=Vr.string+"|"+Vr.number;Vr.id=Vr.variable;(function(){var t,e,r;for(t=Vr.comparatorOp.split("|"),r=0;r=0)&&e!=="="&&(Vr.comparatorOp+="|\\!"+e)})();pn=o(function(){return{checks:[]}},"newQuery"),Mt={GROUP:0,COLLECTION:1,FILTER:2,DATA_COMPARE:3,DATA_EXIST:4,DATA_BOOL:5,META_COMPARE:6,STATE:7,ID:8,CLASS:9,UNDIRECTED_EDGE:10,DIRECTED_EDGE:11,NODE_SOURCE:12,NODE_TARGET:13,NODE_NEIGHBOR:14,CHILD:15,DESCENDANT:16,PARENT:17,ANCESTOR:18,COMPOUND_SPLIT:19,TRUE:20},UP=[{selector:":selected",matches:o(function(e){return e.selected()},"matches")},{selector:":unselected",matches:o(function(e){return!e.selected()},"matches")},{selector:":selectable",matches:o(function(e){return e.selectable()},"matches")},{selector:":unselectable",matches:o(function(e){return!e.selectable()},"matches")},{selector:":locked",matches:o(function(e){return e.locked()},"matches")},{selector:":unlocked",matches:o(function(e){return!e.locked()},"matches")},{selector:":visible",matches:o(function(e){return e.visible()},"matches")},{selector:":hidden",matches:o(function(e){return!e.visible()},"matches")},{selector:":transparent",matches:o(function(e){return e.transparent()},"matches")},{selector:":grabbed",matches:o(function(e){return e.grabbed()},"matches")},{selector:":free",matches:o(function(e){return!e.grabbed()},"matches")},{selector:":removed",matches:o(function(e){return e.removed()},"matches")},{selector:":inside",matches:o(function(e){return!e.removed()},"matches")},{selector:":grabbable",matches:o(function(e){return e.grabbable()},"matches")},{selector:":ungrabbable",matches:o(function(e){return!e.grabbable()},"matches")},{selector:":animated",matches:o(function(e){return e.animated()},"matches")},{selector:":unanimated",matches:o(function(e){return!e.animated()},"matches")},{selector:":parent",matches:o(function(e){return e.isParent()},"matches")},{selector:":childless",matches:o(function(e){return e.isChildless()},"matches")},{selector:":child",matches:o(function(e){return e.isChild()},"matches")},{selector:":orphan",matches:o(function(e){return e.isOrphan()},"matches")},{selector:":nonorphan",matches:o(function(e){return e.isChild()},"matches")},{selector:":compound",matches:o(function(e){return e.isNode()?e.isParent():e.source().isParent()||e.target().isParent()},"matches")},{selector:":loop",matches:o(function(e){return e.isLoop()},"matches")},{selector:":simple",matches:o(function(e){return e.isSimple()},"matches")},{selector:":active",matches:o(function(e){return e.active()},"matches")},{selector:":inactive",matches:o(function(e){return!e.active()},"matches")},{selector:":backgrounding",matches:o(function(e){return e.backgrounding()},"matches")},{selector:":nonbackgrounding",matches:o(function(e){return!e.backgrounding()},"matches")}].sort(function(t,e){return Bqe(t.selector,e.selector)}),CZe=function(){for(var t={},e,r=0;r0&&f.edgeCount>0)return on("The selector `"+e+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(f.edgeCount>1)return on("The selector `"+e+"` is invalid because it uses multiple edge selectors"),!1;f.edgeCount===1&&on("The selector `"+e+"` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.")}return!0},"parse"),RZe=o(function(){if(this.toStringCache!=null)return this.toStringCache;for(var e=o(function(f){return f??""},"clean"),r=o(function(f){return Zt(f)?'"'+f+'"':e(f)},"cleanVal"),n=o(function(f){return" "+f+" "},"space"),i=o(function(f,d){var p=f.type,m=f.value;switch(p){case Mt.GROUP:{var g=e(m);return g.substring(0,g.length-1)}case Mt.DATA_COMPARE:{var y=f.field,v=f.operator;return"["+y+n(e(v))+r(m)+"]"}case Mt.DATA_BOOL:{var x=f.operator,b=f.field;return"["+e(x)+b+"]"}case Mt.DATA_EXIST:{var w=f.field;return"["+w+"]"}case Mt.META_COMPARE:{var _=f.operator,T=f.field;return"[["+T+n(e(_))+r(m)+"]]"}case Mt.STATE:return m;case Mt.ID:return"#"+m;case Mt.CLASS:return"."+m;case Mt.PARENT:case Mt.CHILD:return a(f.parent,d)+n(">")+a(f.child,d);case Mt.ANCESTOR:case Mt.DESCENDANT:return a(f.ancestor,d)+" "+a(f.descendant,d);case Mt.COMPOUND_SPLIT:{var E=a(f.left,d),L=a(f.subject,d),S=a(f.right,d);return E+(E.length>0?" ":"")+L+S}case Mt.TRUE:return""}},"checkToString"),a=o(function(f,d){return f.checks.reduce(function(p,m,g){return p+(d===f&&g===0?"$":"")+i(m,d)},"")},"queryToString"),s="",l=0;l1&&l=0&&(r=r.replace("!",""),d=!0),r.indexOf("@")>=0&&(r=r.replace("@",""),f=!0),(a||l||f)&&(u=!a&&!s?"":""+e,h=""+n),f&&(e=u=u.toLowerCase(),n=h=h.toLowerCase()),r){case"*=":i=u.indexOf(h)>=0;break;case"$=":i=u.indexOf(h,u.length-h.length)>=0;break;case"^=":i=u.indexOf(h)===0;break;case"=":i=e===n;break;case">":p=!0,i=e>n;break;case">=":p=!0,i=e>=n;break;case"<":p=!0,i=e1&&arguments[1]!==void 0?arguments[1]:!0;return gB(this,t,e,Nge)};o(Rge,"addParent");E1.forEachUp=function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return gB(this,t,e,Rge)};o(GZe,"addParentAndChildren");E1.forEachUpAndDown=function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return gB(this,t,e,GZe)};E1.ancestors=E1.parents;cb=Mge={data:sn.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:sn.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:sn.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:sn.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:sn.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:sn.removeData({field:"rscratch",triggerEvent:!1}),id:o(function(){var e=this[0];if(e)return e._private.data.id},"id")};cb.attr=cb.data;cb.removeAttr=cb.removeData;$Ze=Mge,Y6={};o(RP,"defineDegreeFunction");ir(Y6,{degree:RP(function(t,e){return e.source().same(e.target())?2:1}),indegree:RP(function(t,e){return e.target().same(t)?1:0}),outdegree:RP(function(t,e){return e.source().same(t)?1:0})});o(u1,"defineDegreeBoundsFunction");ir(Y6,{minDegree:u1("degree",function(t,e){return te}),minIndegree:u1("indegree",function(t,e){return te}),minOutdegree:u1("outdegree",function(t,e){return te})});ir(Y6,{totalDegree:o(function(e){for(var r=0,n=this.nodes(),i=0;i0,p=d;d&&(f=f[0]);var m=p?f.position():{x:0,y:0};r!==void 0?h.position(e,r+m[e]):a!==void 0&&h.position({x:a.x+m.x,y:a.y+m.y})}else{var g=n.position(),y=l?n.parent():null,v=y&&y.length>0,x=v;v&&(y=y[0]);var b=x?y.position():{x:0,y:0};return a={x:g.x-b.x,y:g.y-b.y},e===void 0?a:a[e]}else if(!s)return;return this},"relativePosition")};Zl.modelPosition=Zl.point=Zl.position;Zl.modelPositions=Zl.points=Zl.positions;Zl.renderedPoint=Zl.renderedPosition;Zl.relativePoint=Zl.relativePosition;VZe=Ige;b1=zf={};zf.renderedBoundingBox=function(t){var e=this.boundingBox(t),r=this.cy(),n=r.zoom(),i=r.pan(),a=e.x1*n+i.x,s=e.x2*n+i.x,l=e.y1*n+i.y,u=e.y2*n+i.y;return{x1:a,x2:s,y1:l,y2:u,w:s-a,h:u-l}};zf.dirtyCompoundBoundsCache=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=this.cy();return!e.styleEnabled()||!e.hasCompoundNodes()?this:(this.forEachUp(function(r){if(r.isParent()){var n=r._private;n.compoundBoundsClean=!1,n.bbCache=null,t||r.emitAndNotify("bounds")}}),this)};zf.updateCompoundBounds=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=this.cy();if(!e.styleEnabled()||!e.hasCompoundNodes())return this;if(!t&&e.batching())return this;function r(s){if(!s.isParent())return;var l=s._private,u=s.children(),h=s.pstyle("compound-sizing-wrt-labels").value==="include",f={width:{val:s.pstyle("min-width").pfValue,left:s.pstyle("min-width-bias-left"),right:s.pstyle("min-width-bias-right")},height:{val:s.pstyle("min-height").pfValue,top:s.pstyle("min-height-bias-top"),bottom:s.pstyle("min-height-bias-bottom")}},d=u.boundingBox({includeLabels:h,includeOverlays:!1,useCache:!1}),p=l.position;(d.w===0||d.h===0)&&(d={w:s.pstyle("width").pfValue,h:s.pstyle("height").pfValue},d.x1=p.x-d.w/2,d.x2=p.x+d.w/2,d.y1=p.y-d.h/2,d.y2=p.y+d.h/2);function m(A,I,D){var k=0,R=0,C=I+D;return A>0&&C>0&&(k=I/C*A,R=D/C*A),{biasDiff:k,biasComplementDiff:R}}o(m,"computeBiasValues");function g(A,I,D,k){if(D.units==="%")switch(k){case"width":return A>0?D.pfValue*A:0;case"height":return I>0?D.pfValue*I:0;case"average":return A>0&&I>0?D.pfValue*(A+I)/2:0;case"min":return A>0&&I>0?A>I?D.pfValue*I:D.pfValue*A:0;case"max":return A>0&&I>0?A>I?D.pfValue*A:D.pfValue*I:0;default:return 0}else return D.units==="px"?D.pfValue:0}o(g,"computePaddingValues");var y=f.width.left.value;f.width.left.units==="px"&&f.width.val>0&&(y=y*100/f.width.val);var v=f.width.right.value;f.width.right.units==="px"&&f.width.val>0&&(v=v*100/f.width.val);var x=f.height.top.value;f.height.top.units==="px"&&f.height.val>0&&(x=x*100/f.height.val);var b=f.height.bottom.value;f.height.bottom.units==="px"&&f.height.val>0&&(b=b*100/f.height.val);var w=m(f.width.val-d.w,y,v),_=w.biasDiff,T=w.biasComplementDiff,E=m(f.height.val-d.h,x,b),L=E.biasDiff,S=E.biasComplementDiff;l.autoPadding=g(d.w,d.h,s.pstyle("padding"),s.pstyle("padding-relative-to").value),l.autoWidth=Math.max(d.w,f.width.val),p.x=(-_+d.x1+d.x2+T)/2,l.autoHeight=Math.max(d.h,f.height.val),p.y=(-L+d.y1+d.y2+S)/2}o(r,"update");for(var n=0;ne.x2?i:e.x2,e.y1=ne.y2?a:e.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1)},"updateBounds"),H0=o(function(e,r){return r==null?e:Kl(e,r.x1,r.y1,r.x2,r.y2)},"updateBoundsFromBox"),Yx=o(function(e,r,n){return Ql(e,r,n)},"prefixedProperty"),h6=o(function(e,r,n){if(!r.cy().headless()){var i=r._private,a=i.rstyle,s=a.arrowWidth/2,l=r.pstyle(n+"-arrow-shape").value,u,h;if(l!=="none"){n==="source"?(u=a.srcX,h=a.srcY):n==="target"?(u=a.tgtX,h=a.tgtY):(u=a.midX,h=a.midY);var f=i.arrowBounds=i.arrowBounds||{},d=f[n]=f[n]||{};d.x1=u-s,d.y1=h-s,d.x2=u+s,d.y2=h+s,d.w=d.x2-d.x1,d.h=d.y2-d.y1,y6(d,1),Kl(e,d.x1,d.y1,d.x2,d.y2)}}},"updateBoundsFromArrow"),MP=o(function(e,r,n){if(!r.cy().headless()){var i;n?i=n+"-":i="";var a=r._private,s=a.rstyle,l=r.pstyle(i+"label").strValue;if(l){var u=r.pstyle("text-halign"),h=r.pstyle("text-valign"),f=Yx(s,"labelWidth",n),d=Yx(s,"labelHeight",n),p=Yx(s,"labelX",n),m=Yx(s,"labelY",n),g=r.pstyle(i+"text-margin-x").pfValue,y=r.pstyle(i+"text-margin-y").pfValue,v=r.isEdge(),x=r.pstyle(i+"text-rotation"),b=r.pstyle("text-outline-width").pfValue,w=r.pstyle("text-border-width").pfValue,_=w/2,T=r.pstyle("text-background-padding").pfValue,E=2,L=d,S=f,A=S/2,I=L/2,D,k,R,C;if(v)D=p-A,k=p+A,R=m-I,C=m+I;else{switch(u.value){case"left":D=p-S,k=p;break;case"center":D=p-A,k=p+A;break;case"right":D=p,k=p+S;break}switch(h.value){case"top":R=m-L,C=m;break;case"center":R=m-I,C=m+I;break;case"bottom":R=m,C=m+L;break}}D+=g-Math.max(b,_)-T-E,k+=g+Math.max(b,_)+T+E,R+=y-Math.max(b,_)-T-E,C+=y+Math.max(b,_)+T+E;var O=n||"main",N=a.labelBounds,P=N[O]=N[O]||{};P.x1=D,P.y1=R,P.x2=k,P.y2=C,P.w=k-D,P.h=C-R;var F=v&&x.strValue==="autorotate",B=x.pfValue!=null&&x.pfValue!==0;if(F||B){var G=F?Yx(a.rstyle,"labelAngle",n):x.pfValue,z=Math.cos(G),W=Math.sin(G),Z=(D+k)/2,j=(R+C)/2;if(!v){switch(u.value){case"left":Z=k;break;case"right":Z=D;break}switch(h.value){case"top":j=C;break;case"bottom":j=R;break}}var oe=o(function(ue,ce){return ue=ue-Z,ce=ce-j,{x:ue*z-ce*W+Z,y:ue*W+ce*z+j}},"rotate"),K=oe(D,R),ee=oe(D,C),J=oe(k,R),H=oe(k,C);D=Math.min(K.x,ee.x,J.x,H.x),k=Math.max(K.x,ee.x,J.x,H.x),R=Math.min(K.y,ee.y,J.y,H.y),C=Math.max(K.y,ee.y,J.y,H.y)}var q=O+"Rot",Q=N[q]=N[q]||{};Q.x1=D,Q.y1=R,Q.x2=k,Q.y2=C,Q.w=k-D,Q.h=C-R,Kl(e,D,R,k,C),Kl(a.labelBounds.all,D,R,k,C)}return e}},"updateBoundsFromLabel"),UZe=o(function(e,r){if(!r.cy().headless()){var n=r.pstyle("outline-opacity").value,i=r.pstyle("outline-width").value;if(n>0&&i>0){var a=r.pstyle("outline-offset").value,s=r.pstyle("shape").value,l=i+a,u=(e.w+l*2)/e.w,h=(e.h+l*2)/e.h,f=0,d=0;["diamond","pentagon","round-triangle"].includes(s)?(u=(e.w+l*2.4)/e.w,d=-l/3.6):["concave-hexagon","rhomboid","right-rhomboid"].includes(s)?u=(e.w+l*2.4)/e.w:s==="star"?(u=(e.w+l*2.8)/e.w,h=(e.h+l*2.6)/e.h,d=-l/3.8):s==="triangle"?(u=(e.w+l*2.8)/e.w,h=(e.h+l*2.4)/e.h,d=-l/1.4):s==="vee"&&(u=(e.w+l*4.4)/e.w,h=(e.h+l*3.8)/e.h,d=-l*.5);var p=e.h*h-e.h,m=e.w*u-e.w;if(v6(e,[Math.ceil(p/2),Math.ceil(m/2)]),f!=0||d!==0){var g=uje(e,f,d);cge(e,g)}}}},"updateBoundsFromOutline"),HZe=o(function(e,r){var n=e._private.cy,i=n.styleEnabled(),a=n.headless(),s=Ks(),l=e._private,u=e.isNode(),h=e.isEdge(),f,d,p,m,g,y,v=l.rstyle,x=u&&i?e.pstyle("bounds-expansion").pfValue:[0],b=o(function(Ne){return Ne.pstyle("display").value!=="none"},"isDisplayed"),w=!i||b(e)&&(!h||b(e.source())&&b(e.target()));if(w){var _=0,T=0;i&&r.includeOverlays&&(_=e.pstyle("overlay-opacity").value,_!==0&&(T=e.pstyle("overlay-padding").value));var E=0,L=0;i&&r.includeUnderlays&&(E=e.pstyle("underlay-opacity").value,E!==0&&(L=e.pstyle("underlay-padding").value));var S=Math.max(T,L),A=0,I=0;if(i&&(A=e.pstyle("width").pfValue,I=A/2),u&&r.includeNodes){var D=e.position();g=D.x,y=D.y;var k=e.outerWidth(),R=k/2,C=e.outerHeight(),O=C/2;f=g-R,d=g+R,p=y-O,m=y+O,Kl(s,f,p,d,m),i&&r.includeOutlines&&UZe(s,e)}else if(h&&r.includeEdges)if(i&&!a){var N=e.pstyle("curve-style").strValue;if(f=Math.min(v.srcX,v.midX,v.tgtX),d=Math.max(v.srcX,v.midX,v.tgtX),p=Math.min(v.srcY,v.midY,v.tgtY),m=Math.max(v.srcY,v.midY,v.tgtY),f-=I,d+=I,p-=I,m+=I,Kl(s,f,p,d,m),N==="haystack"){var P=v.haystackPts;if(P&&P.length===2){if(f=P[0].x,p=P[0].y,d=P[1].x,m=P[1].y,f>d){var F=f;f=d,d=F}if(p>m){var B=p;p=m,m=B}Kl(s,f-I,p-I,d+I,m+I)}}else if(N==="bezier"||N==="unbundled-bezier"||N.endsWith("segments")||N.endsWith("taxi")){var G;switch(N){case"bezier":case"unbundled-bezier":G=v.bezierPts;break;case"segments":case"taxi":case"round-segments":case"round-taxi":G=v.linePts;break}if(G!=null)for(var z=0;zd){var ee=f;f=d,d=ee}if(p>m){var J=p;p=m,m=J}f-=I,d+=I,p-=I,m+=I,Kl(s,f,p,d,m)}if(i&&r.includeEdges&&h&&(h6(s,e,"mid-source"),h6(s,e,"mid-target"),h6(s,e,"source"),h6(s,e,"target")),i){var H=e.pstyle("ghost").value==="yes";if(H){var q=e.pstyle("ghost-offset-x").pfValue,Q=e.pstyle("ghost-offset-y").pfValue;Kl(s,s.x1+q,s.y1+Q,s.x2+q,s.y2+Q)}}var ae=l.bodyBounds=l.bodyBounds||{};Bpe(ae,s),v6(ae,x),y6(ae,1),i&&(f=s.x1,d=s.x2,p=s.y1,m=s.y2,Kl(s,f-S,p-S,d+S,m+S));var ue=l.overlayBounds=l.overlayBounds||{};Bpe(ue,s),v6(ue,x),y6(ue,1);var ce=l.labelBounds=l.labelBounds||{};ce.all!=null?cje(ce.all):ce.all=Ks(),i&&r.includeLabels&&(r.includeMainLabels&&MP(s,e,null),h&&(r.includeSourceLabels&&MP(s,e,"source"),r.includeTargetLabels&&MP(s,e,"target")))}return s.x1=ul(s.x1),s.y1=ul(s.y1),s.x2=ul(s.x2),s.y2=ul(s.y2),s.w=ul(s.x2-s.x1),s.h=ul(s.y2-s.y1),s.w>0&&s.h>0&&w&&(v6(s,x),y6(s,1)),s},"boundingBoxImpl"),Pge=o(function(e){var r=0,n=o(function(s){return(s?1:0)<=0;l--)s(l);return this};Ff.removeAllListeners=function(){return this.removeListener("*")};Ff.emit=Ff.trigger=function(t,e,r){var n=this.listeners,i=n.length;return this.emitting++,kn(e)||(e=[e]),sJe(this,function(a,s){r!=null&&(n=[{event:s.event,type:s.type,namespace:s.namespace,callback:r}],i=n.length);for(var l=o(function(f){var d=n[f];if(d.type===s.type&&(!d.namespace||d.namespace===s.namespace||d.namespace===iJe)&&a.eventMatches(a.context,d,s)){var p=[s];e!=null&&BXe(p,e),a.beforeEmit(a.context,d,s),d.conf&&d.conf.one&&(a.listeners=a.listeners.filter(function(y){return y!==d}));var m=a.callbackContext(a.context,d,s),g=d.callback.apply(m,p);a.afterEmit(a.context,d,s),g===!1&&(s.stopPropagation(),s.preventDefault())}},"_loop2"),u=0;u1&&!s){var l=this.length-1,u=this[l],h=u._private.data.id;this[l]=void 0,this[e]=u,a.set(h,{ele:u,index:e})}return this.length--,this},"unmergeAt"),unmergeOne:o(function(e){e=e[0];var r=this._private,n=e._private.data.id,i=r.map,a=i.get(n);if(!a)return this;var s=a.index;return this.unmergeAt(s),this},"unmergeOne"),unmerge:o(function(e){var r=this._private.cy;if(!e)return this;if(e&&Zt(e)){var n=e;e=r.mutableElements().filter(n)}for(var i=0;i=0;r--){var n=this[r];e(n)&&this.unmergeAt(r)}return this},"unmergeBy"),map:o(function(e,r){for(var n=[],i=this,a=0;an&&(n=u,i=l)}return{value:n,ele:i}},"max"),min:o(function(e,r){for(var n=1/0,i,a=this,s=0;s=0&&a"u"?"undefined":Ki(Symbol))!=e&&Ki(Symbol.iterator)!=e;r&&(R6[Symbol.iterator]=function(){var n=this,i={value:void 0,done:!1},a=0,s=this.length;return $me({next:o(function(){return a1&&arguments[1]!==void 0?arguments[1]:!0,n=this[0],i=n.cy();if(i.styleEnabled()&&n){this.cleanStyle();var a=n._private.style[e];return a??(r?i.style().getDefaultProperty(e):null)}},"parsedStyle"),numericStyle:o(function(e){var r=this[0];if(r.cy().styleEnabled()&&r){var n=r.pstyle(e);return n.pfValue!==void 0?n.pfValue:n.value}},"numericStyle"),numericStyleUnits:o(function(e){var r=this[0];if(r.cy().styleEnabled()&&r)return r.pstyle(e).units},"numericStyleUnits"),renderedStyle:o(function(e){var r=this.cy();if(!r.styleEnabled())return this;var n=this[0];if(n)return r.style().getRenderedStyle(n,e)},"renderedStyle"),style:o(function(e,r){var n=this.cy();if(!n.styleEnabled())return this;var i=!1,a=n.style();if(Ur(e)){var s=e;a.applyBypass(this,s,i),this.emitAndNotify("style")}else if(Zt(e))if(r===void 0){var l=this[0];return l?a.getStylePropertyValue(l,e):void 0}else a.applyBypass(this,e,r,i),this.emitAndNotify("style");else if(e===void 0){var u=this[0];return u?a.getRawStyle(u):void 0}return this},"style"),removeStyle:o(function(e){var r=this.cy();if(!r.styleEnabled())return this;var n=!1,i=r.style(),a=this;if(e===void 0)for(var s=0;s0&&e.push(f[0]),e.push(l[0])}return this.spawn(e,!0).filter(t)},"neighborhood"),closedNeighborhood:o(function(e){return this.neighborhood().add(this).filter(e)},"closedNeighborhood"),openNeighborhood:o(function(e){return this.neighborhood(e)},"openNeighborhood")});Ha.neighbourhood=Ha.neighborhood;Ha.closedNeighbourhood=Ha.closedNeighborhood;Ha.openNeighbourhood=Ha.openNeighborhood;ir(Ha,{source:hl(o(function(e){var r=this[0],n;return r&&(n=r._private.source||r.cy().collection()),n&&e?n.filter(e):n},"sourceImpl"),"source"),target:hl(o(function(e){var r=this[0],n;return r&&(n=r._private.target||r.cy().collection()),n&&e?n.filter(e):n},"targetImpl"),"target"),sources:mme({attr:"source"}),targets:mme({attr:"target"})});o(mme,"defineSourceFunction");ir(Ha,{edgesWith:hl(gme(),"edgesWith"),edgesTo:hl(gme({thisIsSrc:!0}),"edgesTo")});o(gme,"defineEdgesWithFunction");ir(Ha,{connectedEdges:hl(function(t){for(var e=[],r=this,n=0;n0);return s},"components"),component:o(function(){var e=this[0];return e.cy().mutableElements().components(e)[0]},"component")});Ha.componentsOf=Ha.components;Aa=o(function(e,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(e===void 0){di("A collection must have a reference to the core");return}var a=new Jc,s=!1;if(!r)r=[];else if(r.length>0&&Ur(r[0])&&!pb(r[0])){s=!0;for(var l=[],u=new S1,h=0,f=r.length;h0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=this,n=r.cy(),i=n._private,a=[],s=[],l,u=0,h=r.length;u0){for(var B=l.length===r.length?r:new Aa(n,l),G=0;G0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=this,n=[],i={},a=r._private.cy;function s(C){for(var O=C._private.edges,N=0;N0&&(t?D.emitAndNotify("remove"):e&&D.emit("remove"));for(var k=0;kf&&Math.abs(g.v)>f;);return p?function(y){return u[y*(u.length-1)|0]}:h},"springRK4Factory")}(),Rn=o(function(e,r,n,i){var a=gJe(e,r,n,i);return function(s,l,u){return s+(l-s)*a(u)}},"cubicBezier"),w6={linear:o(function(e,r,n){return e+(r-e)*n},"linear"),ease:Rn(.25,.1,.25,1),"ease-in":Rn(.42,0,1,1),"ease-out":Rn(0,0,.58,1),"ease-in-out":Rn(.42,0,.58,1),"ease-in-sine":Rn(.47,0,.745,.715),"ease-out-sine":Rn(.39,.575,.565,1),"ease-in-out-sine":Rn(.445,.05,.55,.95),"ease-in-quad":Rn(.55,.085,.68,.53),"ease-out-quad":Rn(.25,.46,.45,.94),"ease-in-out-quad":Rn(.455,.03,.515,.955),"ease-in-cubic":Rn(.55,.055,.675,.19),"ease-out-cubic":Rn(.215,.61,.355,1),"ease-in-out-cubic":Rn(.645,.045,.355,1),"ease-in-quart":Rn(.895,.03,.685,.22),"ease-out-quart":Rn(.165,.84,.44,1),"ease-in-out-quart":Rn(.77,0,.175,1),"ease-in-quint":Rn(.755,.05,.855,.06),"ease-out-quint":Rn(.23,1,.32,1),"ease-in-out-quint":Rn(.86,0,.07,1),"ease-in-expo":Rn(.95,.05,.795,.035),"ease-out-expo":Rn(.19,1,.22,1),"ease-in-out-expo":Rn(1,0,0,1),"ease-in-circ":Rn(.6,.04,.98,.335),"ease-out-circ":Rn(.075,.82,.165,1),"ease-in-out-circ":Rn(.785,.135,.15,.86),spring:o(function(e,r,n){if(n===0)return w6.linear;var i=yJe(e,r,n);return function(a,s,l){return a+(s-a)*i(l)}},"spring"),"cubic-bezier":Rn};o(vme,"getEasedValue");o(xme,"getValue");o(h1,"ease");o(vJe,"step$1");o(Xx,"valid");o(xJe,"startAnimation");o(bme,"stepAll");bJe={animate:sn.animate(),animation:sn.animation(),animated:sn.animated(),clearQueue:sn.clearQueue(),delay:sn.delay(),delayAnimation:sn.delayAnimation(),stop:sn.stop(),addToAnimationPool:o(function(e){var r=this;r.styleEnabled()&&r._private.aniEles.merge(e)},"addToAnimationPool"),stopAnimationLoop:o(function(){this._private.animationsRunning=!1},"stopAnimationLoop"),startAnimationLoop:o(function(){var e=this;if(e._private.animationsRunning=!0,!e.styleEnabled())return;function r(){e._private.animationsRunning&&A6(o(function(a){bme(a,e),r()},"animationStep"))}o(r,"headlessStep");var n=e.renderer();n&&n.beforeRender?n.beforeRender(o(function(a,s){bme(s,e)},"rendererAnimationStep"),n.beforeRenderPriorities.animations):r()},"startAnimationLoop")},wJe={qualifierCompare:o(function(e,r){return e==null||r==null?e==null&&r==null:e.sameText(r)},"qualifierCompare"),eventMatches:o(function(e,r,n){var i=r.qualifier;return i!=null?e!==n.target&&pb(n.target)&&i.matches(n.target):!0},"eventMatches"),addEventFields:o(function(e,r){r.cy=e,r.target=e},"addEventFields"),callbackContext:o(function(e,r,n){return r.qualifier!=null?n.target:e},"callbackContext")},p6=o(function(e){return Zt(e)?new Pf(e):e},"argSelector"),qge={createEmitter:o(function(){var e=this._private;return e.emitter||(e.emitter=new q6(wJe,this)),this},"createEmitter"),emitter:o(function(){return this._private.emitter},"emitter"),on:o(function(e,r,n){return this.emitter().on(e,p6(r),n),this},"on"),removeListener:o(function(e,r,n){return this.emitter().removeListener(e,p6(r),n),this},"removeListener"),removeAllListeners:o(function(){return this.emitter().removeAllListeners(),this},"removeAllListeners"),one:o(function(e,r,n){return this.emitter().one(e,p6(r),n),this},"one"),once:o(function(e,r,n){return this.emitter().one(e,p6(r),n),this},"once"),emit:o(function(e,r){return this.emitter().emit(e,r),this},"emit"),emitAndNotify:o(function(e,r){return this.emit(e),this.notify(e,r),this},"emitAndNotify")};sn.eventAliasesOn(qge);WP={png:o(function(e){var r=this._private.renderer;return e=e||{},r.png(e)},"png"),jpg:o(function(e){var r=this._private.renderer;return e=e||{},e.bg=e.bg||"#fff",r.jpg(e)},"jpg")};WP.jpeg=WP.jpg;T6={layout:o(function(e){var r=this;if(e==null){di("Layout options must be specified to make a layout");return}if(e.name==null){di("A `name` must be specified to make a layout");return}var n=e.name,i=r.extension("layout",n);if(i==null){di("No such layout `"+n+"` found. Did you forget to import it and `cytoscape.use()` it?");return}var a;Zt(e.eles)?a=r.$(e.eles):a=e.eles!=null?e.eles:r.$();var s=new i(ir({},e,{cy:r,eles:a}));return s},"layout")};T6.createLayout=T6.makeLayout=T6.layout;TJe={notify:o(function(e,r){var n=this._private;if(this.batching()){n.batchNotifications=n.batchNotifications||{};var i=n.batchNotifications[e]=n.batchNotifications[e]||this.collection();r!=null&&i.merge(r);return}if(n.notificationsEnabled){var a=this.renderer();this.destroyed()||!a||a.notify(e,r)}},"notify"),notifications:o(function(e){var r=this._private;return e===void 0?r.notificationsEnabled:(r.notificationsEnabled=!!e,this)},"notifications"),noNotifications:o(function(e){this.notifications(!1),e(),this.notifications(!0)},"noNotifications"),batching:o(function(){return this._private.batchCount>0},"batching"),startBatch:o(function(){var e=this._private;return e.batchCount==null&&(e.batchCount=0),e.batchCount===0&&(e.batchStyleEles=this.collection(),e.batchNotifications={}),e.batchCount++,this},"startBatch"),endBatch:o(function(){var e=this._private;if(e.batchCount===0)return this;if(e.batchCount--,e.batchCount===0){e.batchStyleEles.updateStyle();var r=this.renderer();Object.keys(e.batchNotifications).forEach(function(n){var i=e.batchNotifications[n];i.empty()?r.notify(n):r.notify(n,i)})}return this},"endBatch"),batch:o(function(e){return this.startBatch(),e(),this.endBatch(),this},"batch"),batchData:o(function(e){var r=this;return this.batch(function(){for(var n=Object.keys(e),i=0;i0;)r.removeChild(r.childNodes[0]);e._private.renderer=null,e.mutableElements().forEach(function(n){var i=n._private;i.rscratch={},i.rstyle={},i.animation.current=[],i.animation.queue=[]})},"destroyRenderer"),onRender:o(function(e){return this.on("render",e)},"onRender"),offRender:o(function(e){return this.off("render",e)},"offRender")};YP.invalidateDimensions=YP.resize;k6={collection:o(function(e,r){return Zt(e)?this.$(e):wo(e)?e.collection():kn(e)?(r||(r={}),new Aa(this,e,r.unique,r.removed)):new Aa(this)},"collection"),nodes:o(function(e){var r=this.$(function(n){return n.isNode()});return e?r.filter(e):r},"nodes"),edges:o(function(e){var r=this.$(function(n){return n.isEdge()});return e?r.filter(e):r},"edges"),$:o(function(e){var r=this._private.elements;return e?r.filter(e):r.spawnSelf()},"$"),mutableElements:o(function(){return this._private.elements},"mutableElements")};k6.elements=k6.filter=k6.$;Ya={},eb="t",EJe="f";Ya.apply=function(t){for(var e=this,r=e._private,n=r.cy,i=n.collection(),a=0;a0;if(p||d&&m){var g=void 0;p&&m||p?g=h.properties:m&&(g=h.mappedProperties);for(var y=0;y1&&(_=1),l.color){var E=n.valueMin[0],L=n.valueMax[0],S=n.valueMin[1],A=n.valueMax[1],I=n.valueMin[2],D=n.valueMax[2],k=n.valueMin[3]==null?1:n.valueMin[3],R=n.valueMax[3]==null?1:n.valueMax[3],C=[Math.round(E+(L-E)*_),Math.round(S+(A-S)*_),Math.round(I+(D-I)*_),Math.round(k+(R-k)*_)];a={bypass:n.bypass,name:n.name,value:C,strValue:"rgb("+C[0]+", "+C[1]+", "+C[2]+")"}}else if(l.number){var O=n.valueMin+(n.valueMax-n.valueMin)*_;a=this.parse(n.name,O,n.bypass,p)}else return!1;if(!a)return y(),!1;a.mapping=n,n=a;break}case s.data:{for(var N=n.field.split("."),P=d.data,F=0;F0&&a>0){for(var l={},u=!1,h=0;h0?t.delayAnimation(s).play().promise().then(w):w()}).then(function(){return t.animation({style:l,duration:a,easing:t.pstyle("transition-timing-function").value,queue:!1}).play().promise()}).then(function(){r.removeBypasses(t,i),t.emitAndNotify("style"),n.transitioning=!1})}else n.transitioning&&(this.removeBypasses(t,i),t.emitAndNotify("style"),n.transitioning=!1)};Ya.checkTrigger=function(t,e,r,n,i,a){var s=this.properties[e],l=i(s);l!=null&&l(r,n)&&a(s)};Ya.checkZOrderTrigger=function(t,e,r,n){var i=this;this.checkTrigger(t,e,r,n,function(a){return a.triggersZOrder},function(){i._private.cy.notify("zorder",t)})};Ya.checkBoundsTrigger=function(t,e,r,n){this.checkTrigger(t,e,r,n,function(i){return i.triggersBounds},function(i){t.dirtyCompoundBoundsCache(),t.dirtyBoundingBoxCache(),i.triggersBoundsOfParallelBeziers&&e==="curve-style"&&(r==="bezier"||n==="bezier")&&t.parallelEdges().forEach(function(a){a.isBundledBezier()&&a.dirtyBoundingBoxCache()}),i.triggersBoundsOfConnectedEdges&&e==="display"&&(r==="none"||n==="none")&&t.connectedEdges().forEach(function(a){a.dirtyBoundingBoxCache()})})};Ya.checkTriggers=function(t,e,r,n){t.dirtyStyleCache(),this.checkZOrderTrigger(t,e,r,n),this.checkBoundsTrigger(t,e,r,n)};vb={};vb.applyBypass=function(t,e,r,n){var i=this,a=[],s=!0;if(e==="*"||e==="**"){if(r!==void 0)for(var l=0;li.length?n=n.substr(i.length):n=""}o(l,"removeSelAndBlockFromRemaining");function u(){a.length>s.length?a=a.substr(s.length):a=""}for(o(u,"removePropAndValFromRem");;){var h=n.match(/^\s*$/);if(h)break;var f=n.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!f){on("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+n);break}i=f[0];var d=f[1];if(d!=="core"){var p=new Pf(d);if(p.invalid){on("Skipping parsing of block: Invalid selector found in string stylesheet: "+d),l();continue}}var m=f[2],g=!1;a=m;for(var y=[];;){var v=a.match(/^\s*$/);if(v)break;var x=a.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!x){on("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+m),g=!0;break}s=x[0];var b=x[1],w=x[2],_=e.properties[b];if(!_){on("Skipping property: Invalid property name in: "+s),u();continue}var T=r.parse(b,w);if(!T){on("Skipping property: Invalid property definition in: "+s),u();continue}y.push({name:b,val:w}),u()}if(g){l();break}r.selector(d);for(var E=0;E=7&&e[0]==="d"&&(f=new RegExp(l.data.regex).exec(e))){if(r)return!1;var p=l.data;return{name:t,value:f,strValue:""+e,mapped:p,field:f[1],bypass:r}}else if(e.length>=10&&e[0]==="m"&&(d=new RegExp(l.mapData.regex).exec(e))){if(r||h.multiple)return!1;var m=l.mapData;if(!(h.color||h.number))return!1;var g=this.parse(t,d[4]);if(!g||g.mapped)return!1;var y=this.parse(t,d[5]);if(!y||y.mapped)return!1;if(g.pfValue===y.pfValue||g.strValue===y.strValue)return on("`"+t+": "+e+"` is not a valid mapper because the output range is zero; converting to `"+t+": "+g.strValue+"`"),this.parse(t,g.strValue);if(h.color){var v=g.value,x=y.value,b=v[0]===x[0]&&v[1]===x[1]&&v[2]===x[2]&&(v[3]===x[3]||(v[3]==null||v[3]===1)&&(x[3]==null||x[3]===1));if(b)return!1}return{name:t,value:d,strValue:""+e,mapped:m,field:d[1],fieldMin:parseFloat(d[2]),fieldMax:parseFloat(d[3]),valueMin:g.value,valueMax:y.value,bypass:r}}}if(h.multiple&&n!=="multiple"){var w;if(u?w=e.split(/\s+/):kn(e)?w=e:w=[e],h.evenMultiple&&w.length%2!==0)return null;for(var _=[],T=[],E=[],L="",S=!1,A=0;A0?" ":"")+I.strValue}return h.validate&&!h.validate(_,T)?null:h.singleEnum&&S?_.length===1&&Zt(_[0])?{name:t,value:_[0],strValue:_[0],bypass:r}:null:{name:t,value:_,pfValue:E,strValue:L,bypass:r,units:T}}var D=o(function(){for(var H=0;Hh.max||h.strictMax&&e===h.max))return null;var N={name:t,value:e,strValue:""+e+(k||""),units:k,bypass:r};return h.unitless||k!=="px"&&k!=="em"?N.pfValue=e:N.pfValue=k==="px"||!k?e:this.getEmSizeInPixels()*e,(k==="ms"||k==="s")&&(N.pfValue=k==="ms"?e:1e3*e),(k==="deg"||k==="rad")&&(N.pfValue=k==="rad"?e:aje(e)),k==="%"&&(N.pfValue=e/100),N}else if(h.propList){var P=[],F=""+e;if(F!=="none"){for(var B=F.split(/\s*,\s*|\s+/),G=0;G0&&l>0&&!isNaN(n.w)&&!isNaN(n.h)&&n.w>0&&n.h>0){u=Math.min((s-2*r)/n.w,(l-2*r)/n.h),u=u>this._private.maxZoom?this._private.maxZoom:u,u=u=n.minZoom&&(n.maxZoom=r),this},"zoomRange"),minZoom:o(function(e){return e===void 0?this._private.minZoom:this.zoomRange({min:e})},"minZoom"),maxZoom:o(function(e){return e===void 0?this._private.maxZoom:this.zoomRange({max:e})},"maxZoom"),getZoomedViewport:o(function(e){var r=this._private,n=r.pan,i=r.zoom,a,s,l=!1;if(r.zoomingEnabled||(l=!0),xt(e)?s=e:Ur(e)&&(s=e.level,e.position!=null?a=$6(e.position,i,n):e.renderedPosition!=null&&(a=e.renderedPosition),a!=null&&!r.panningEnabled&&(l=!0)),s=s>r.maxZoom?r.maxZoom:s,s=sr.maxZoom||!r.zoomingEnabled?s=!0:(r.zoom=u,a.push("zoom"))}if(i&&(!s||!e.cancelOnFailedZoom)&&r.panningEnabled){var h=e.pan;xt(h.x)&&(r.pan.x=h.x,l=!1),xt(h.y)&&(r.pan.y=h.y,l=!1),l||a.push("pan")}return a.length>0&&(a.push("viewport"),this.emit(a.join(" ")),this.notify("viewport")),this},"viewport"),center:o(function(e){var r=this.getCenterPan(e);return r&&(this._private.pan=r,this.emit("pan viewport"),this.notify("viewport")),this},"center"),getCenterPan:o(function(e,r){if(this._private.panningEnabled){if(Zt(e)){var n=e;e=this.mutableElements().filter(n)}else wo(e)||(e=this.mutableElements());if(e.length!==0){var i=e.boundingBox(),a=this.width(),s=this.height();r=r===void 0?this._private.zoom:r;var l={x:(a-r*(i.x1+i.x2))/2,y:(s-r*(i.y1+i.y2))/2};return l}}},"getCenterPan"),reset:o(function(){return!this._private.panningEnabled||!this._private.zoomingEnabled?this:(this.viewport({pan:{x:0,y:0},zoom:1}),this)},"reset"),invalidateSize:o(function(){this._private.sizeCache=null},"invalidateSize"),size:o(function(){var e=this._private,r=e.container,n=this;return e.sizeCache=e.sizeCache||(r?function(){var i=n.window().getComputedStyle(r),a=o(function(l){return parseFloat(i.getPropertyValue(l))},"val");return{width:r.clientWidth-a("padding-left")-a("padding-right"),height:r.clientHeight-a("padding-top")-a("padding-bottom")}}():{width:1,height:1})},"size"),width:o(function(){return this.size().width},"width"),height:o(function(){return this.size().height},"height"),extent:o(function(){var e=this._private.pan,r=this._private.zoom,n=this.renderedExtent(),i={x1:(n.x1-e.x)/r,x2:(n.x2-e.x)/r,y1:(n.y1-e.y)/r,y2:(n.y2-e.y)/r};return i.w=i.x2-i.x1,i.h=i.y2-i.y1,i},"extent"),renderedExtent:o(function(){var e=this.width(),r=this.height();return{x1:0,y1:0,x2:e,y2:r,w:e,h:r}},"renderedExtent"),multiClickDebounceTime:o(function(e){if(e)this._private.multiClickDebounceTime=e;else return this._private.multiClickDebounceTime;return this},"multiClickDebounceTime")};J0.centre=J0.center;J0.autolockNodes=J0.autolock;J0.autoungrabifyNodes=J0.autoungrabify;hb={data:sn.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:sn.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:sn.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:sn.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};hb.attr=hb.data;hb.removeAttr=hb.removeData;fb=o(function(e){var r=this;e=ir({},e);var n=e.container;n&&!C6(n)&&C6(n[0])&&(n=n[0]);var i=n?n._cyreg:null;i=i||{},i&&i.cy&&(i.cy.destroy(),i={});var a=i.readies=i.readies||[];n&&(n._cyreg=i),i.cy=r;var s=Xi!==void 0&&n!==void 0&&!e.headless,l=e;l.layout=ir({name:s?"grid":"null"},l.layout),l.renderer=ir({name:s?"canvas":"null"},l.renderer);var u=o(function(g,y,v){return y!==void 0?y:v!==void 0?v:g},"defVal"),h=this._private={container:n,ready:!1,options:l,elements:new Aa(this),listeners:[],aniEles:new Aa(this),data:l.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:u(!0,l.zoomingEnabled),userZoomingEnabled:u(!0,l.userZoomingEnabled),panningEnabled:u(!0,l.panningEnabled),userPanningEnabled:u(!0,l.userPanningEnabled),boxSelectionEnabled:u(!0,l.boxSelectionEnabled),autolock:u(!1,l.autolock,l.autolockNodes),autoungrabify:u(!1,l.autoungrabify,l.autoungrabifyNodes),autounselectify:u(!1,l.autounselectify),styleEnabled:l.styleEnabled===void 0?s:l.styleEnabled,zoom:xt(l.zoom)?l.zoom:1,pan:{x:Ur(l.pan)&&xt(l.pan.x)?l.pan.x:0,y:Ur(l.pan)&&xt(l.pan.y)?l.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:u(250,l.multiClickDebounceTime)};this.createEmitter(),this.selectionType(l.selectionType),this.zoomRange({min:l.minZoom,max:l.maxZoom});var f=o(function(g,y){var v=g.some(Lqe);if(v)return C1.all(g).then(y);y(g)},"loadExtData");h.styleEnabled&&r.setStyle([]);var d=ir({},l,l.renderer);r.initRenderer(d);var p=o(function(g,y,v){r.notifications(!1);var x=r.mutableElements();x.length>0&&x.remove(),g!=null&&(Ur(g)||kn(g))&&r.add(g),r.one("layoutready",function(w){r.notifications(!0),r.emit(w),r.one("load",y),r.emitAndNotify("load")}).one("layoutstop",function(){r.one("done",v),r.emit("done")});var b=ir({},r._private.options.layout);b.eles=r.elements(),r.layout(b).run()},"setElesAndLayout");f([l.style,l.elements],function(m){var g=m[0],y=m[1];h.styleEnabled&&r.style().append(g),p(y,function(){r.startAnimationLoop(),h.ready=!0,ni(l.ready)&&r.on("ready",l.ready);for(var v=0;v0,u=Ks(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),h;if(wo(e.roots))h=e.roots;else if(kn(e.roots)){for(var f=[],d=0;d0;){var O=C(),N=I(O,k);if(N)O.outgoers().filter(function(ce){return ce.isNode()&&n.has(ce)}).forEach(R);else if(N===null){on("Detected double maximal shift for node `"+O.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}A();var P=0;if(e.avoidOverlap)for(var F=0;F0&&x[0].length<=3?Ie/2:0),X=2*Math.PI/x[se].length*ke;return se===0&&x[0].length===1&&(ye=1),{x:Q.x+ye*Math.cos(X),y:Q.y+ye*Math.sin(X)}}else{var $e={x:Q.x+(ke+1-(Re+1)/2)*Ce,y:(se+1)*Pe};return $e}},"getPosition");return n.nodes().layoutPositions(this,e,ue),this};LJe={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(jge,"CircleLayout");jge.prototype.run=function(){var t=this.options,e=t,r=t.cy,n=e.eles,i=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise,a=n.nodes().not(":parent");e.sort&&(a=a.sort(e.sort));for(var s=Ks(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=e.sweep===void 0?2*Math.PI-2*Math.PI/a.length:e.sweep,h=u/Math.max(1,a.length-1),f,d=0,p=0;p1&&e.avoidOverlap){d*=1.75;var x=Math.cos(h)-Math.cos(0),b=Math.sin(h)-Math.sin(0),w=Math.sqrt(d*d/(x*x+b*b));f=Math.max(w,f)}var _=o(function(E,L){var S=e.startAngle+L*h*(i?1:-1),A=f*Math.cos(S),I=f*Math.sin(S),D={x:l.x+A,y:l.y+I};return D},"getPos");return n.nodes().layoutPositions(this,e,_),this};DJe={fit:!0,padding:30,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:o(function(e){return e.degree()},"concentric"),levelWidth:o(function(e){return e.maxDegree()/4},"levelWidth"),animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(Kge,"ConcentricLayout");Kge.prototype.run=function(){for(var t=this.options,e=t,r=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise,n=t.cy,i=e.eles,a=i.nodes().not(":parent"),s=Ks(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=[],h=0,f=0;f0){var T=Math.abs(b[0].value-_.value);T>=v&&(b=[],x.push(b))}b.push(_)}var E=h+e.minNodeSpacing;if(!e.avoidOverlap){var L=x.length>0&&x[0].length>1,S=Math.min(s.w,s.h)/2-E,A=S/(x.length+L?1:0);E=Math.min(E,A)}for(var I=0,D=0;D1&&e.avoidOverlap){var O=Math.cos(C)-Math.cos(0),N=Math.sin(C)-Math.sin(0),P=Math.sqrt(E*E/(O*O+N*N));I=Math.max(P,I)}k.r=I,I+=E}if(e.equidistant){for(var F=0,B=0,G=0;G=t.numIter||(FJe(n,t),n.temperature=n.temperature*t.coolingFactor,n.temperature=t.animationThreshold&&a(),A6(d)}},"frame");f()}else{for(;h;)h=s(u),u++;kme(n,t),l()}return this};Z6.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this};Z6.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};RJe=o(function(e,r,n){for(var i=n.eles.edges(),a=n.eles.nodes(),s=Ks(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()}),l={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:a.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:i.size(),temperature:n.initialTemp,clientWidth:s.w,clientHeight:s.h,boundingBox:s},u=n.eles.components(),h={},f=0;f0){l.graphSet.push(S);for(var f=0;fi.count?0:i.graph},"findLCA"),IJe=o(function t(e,r,n,i){var a=i.graphSet[n];if(-10)var d=i.nodeOverlap*f,p=Math.sqrt(l*l+u*u),m=d*l/p,g=d*u/p;else var y=I6(e,l,u),v=I6(r,-1*l,-1*u),x=v.x-y.x,b=v.y-y.y,w=x*x+b*b,p=Math.sqrt(w),d=(e.nodeRepulsion+r.nodeRepulsion)/w,m=d*x/p,g=d*b/p;e.isLocked||(e.offsetX-=m,e.offsetY-=g),r.isLocked||(r.offsetX+=m,r.offsetY+=g)}},"nodeRepulsion"),$Je=o(function(e,r,n,i){if(n>0)var a=e.maxX-r.minX;else var a=r.maxX-e.minX;if(i>0)var s=e.maxY-r.minY;else var s=r.maxY-e.minY;return a>=0&&s>=0?Math.sqrt(a*a+s*s):0},"nodesOverlap"),I6=o(function(e,r,n){var i=e.positionX,a=e.positionY,s=e.height||1,l=e.width||1,u=n/r,h=s/l,f={};return r===0&&0n?(f.x=i,f.y=a+s/2,f):0r&&-1*h<=u&&u<=h?(f.x=i-l/2,f.y=a-l*n/2/r,f):0=h)?(f.x=i+s*r/2/n,f.y=a+s/2,f):(0>n&&(u<=-1*h||u>=h)&&(f.x=i-s*r/2/n,f.y=a-s/2),f)},"findClippingPoint"),VJe=o(function(e,r){for(var n=0;nn){var v=r.gravity*m/y,x=r.gravity*g/y;p.offsetX+=v,p.offsetY+=x}}}}},"calculateGravityForces"),HJe=o(function(e,r){var n=[],i=0,a=-1;for(n.push.apply(n,e.graphSet[0]),a+=e.graphSet[0].length;i<=a;){var s=n[i++],l=e.idToIndex[s],u=e.layoutNodes[l],h=u.children;if(0n)var a={x:n*e/i,y:n*r/i};else var a={x:e,y:r};return a},"limitForce"),qJe=o(function t(e,r){var n=e.parentId;if(n!=null){var i=r.layoutNodes[r.idToIndex[n]],a=!1;if((i.maxX==null||e.maxX+i.padRight>i.maxX)&&(i.maxX=e.maxX+i.padRight,a=!0),(i.minX==null||e.minX-i.padLefti.maxY)&&(i.maxY=e.maxY+i.padBottom,a=!0),(i.minY==null||e.minY-i.padTopx&&(g+=v+r.componentSpacing,m=0,y=0,v=0)}}},"separateComponents"),XJe={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:o(function(e){},"position"),sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(Zge,"GridLayout");Zge.prototype.run=function(){var t=this.options,e=t,r=t.cy,n=e.eles,i=n.nodes().not(":parent");e.sort&&(i=i.sort(e.sort));var a=Ks(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()});if(a.h===0||a.w===0)n.nodes().layoutPositions(this,e,function(Z){return{x:a.x1,y:a.y1}});else{var s=i.size(),l=Math.sqrt(s*a.h/a.w),u=Math.round(l),h=Math.round(a.w/a.h*l),f=o(function(j){if(j==null)return Math.min(u,h);var oe=Math.min(u,h);oe==u?u=j:h=j},"small"),d=o(function(j){if(j==null)return Math.max(u,h);var oe=Math.max(u,h);oe==u?u=j:h=j},"large"),p=e.rows,m=e.cols!=null?e.cols:e.columns;if(p!=null&&m!=null)u=p,h=m;else if(p!=null&&m==null)u=p,h=Math.ceil(s/u);else if(p==null&&m!=null)h=m,u=Math.ceil(s/h);else if(h*u>s){var g=f(),y=d();(g-1)*y>=s?f(g-1):(y-1)*g>=s&&d(y-1)}else for(;h*u=s?d(x+1):f(v+1)}var b=a.w/h,w=a.h/u;if(e.condense&&(b=0,w=0),e.avoidOverlap)for(var _=0;_=h&&(O=0,C++)},"moveToNextCell"),P={},F=0;F(O=vje(t,e,N[P],N[P+1],N[P+2],N[P+3])))return v(L,O),!0}else if(A.edgeType==="bezier"||A.edgeType==="multibezier"||A.edgeType==="self"||A.edgeType==="compound"){for(var N=A.allpts,P=0;P+5(O=yje(t,e,N[P],N[P+1],N[P+2],N[P+3],N[P+4],N[P+5])))return v(L,O),!0}for(var F=F||S.source,B=B||S.target,G=i.getArrowWidth(I,D),z=[{name:"source",x:A.arrowStartX,y:A.arrowStartY,angle:A.srcArrowAngle},{name:"target",x:A.arrowEndX,y:A.arrowEndY,angle:A.tgtArrowAngle},{name:"mid-source",x:A.midX,y:A.midY,angle:A.midsrcArrowAngle},{name:"mid-target",x:A.midX,y:A.midY,angle:A.midtgtArrowAngle}],P=0;P0&&(x(F),x(B))}o(b,"checkEdge");function w(L,S,A){return Ql(L,S,A)}o(w,"preprop");function _(L,S){var A=L._private,I=p,D;S?D=S+"-":D="",L.boundingBox();var k=A.labelBounds[S||"main"],R=L.pstyle(D+"label").value,C=L.pstyle("text-events").strValue==="yes";if(!(!C||!R)){var O=w(A.rscratch,"labelX",S),N=w(A.rscratch,"labelY",S),P=w(A.rscratch,"labelAngle",S),F=L.pstyle(D+"text-margin-x").pfValue,B=L.pstyle(D+"text-margin-y").pfValue,G=k.x1-I-F,z=k.x2+I-F,W=k.y1-I-B,Z=k.y2+I-B;if(P){var j=Math.cos(P),oe=Math.sin(P),K=o(function(ue,ce){return ue=ue-O,ce=ce-N,{x:ue*j-ce*oe+O,y:ue*oe+ce*j+N}},"rotate"),ee=K(G,W),J=K(G,Z),H=K(z,W),q=K(z,Z),Q=[ee.x+F,ee.y+B,H.x+F,H.y+B,q.x+F,q.y+B,J.x+F,J.y+B];if(js(t,e,Q))return v(L),!0}else if(T1(k,t,e))return v(L),!0}}o(_,"checkLabel");for(var T=s.length-1;T>=0;T--){var E=s[T];E.isNode()?x(E)||_(E):b(E)||_(E)||_(E,"source")||_(E,"target")}return l};tp.getAllInBox=function(t,e,r,n){var i=this.getCachedZSortedEles().interactive,a=[],s=Math.min(t,r),l=Math.max(t,r),u=Math.min(e,n),h=Math.max(e,n);t=s,r=l,e=u,n=h;for(var f=Ks({x1:t,y1:e,x2:r,y2:n}),d=0;d0?-(Math.PI-e.ang):Math.PI+e.ang},"invertVec"),eet=o(function(e,r,n,i,a){if(e!==_me?Lme(r,e,Qc):JJe(cl,Qc),Lme(r,n,cl),Cme=Qc.nx*cl.ny-Qc.ny*cl.nx,Ame=Qc.nx*cl.nx-Qc.ny*-cl.ny,nh=Math.asin(Math.max(-1,Math.min(1,Cme))),Math.abs(nh)<1e-6){qP=r.x,XP=r.y,W0=d1=0;return}Y0=1,E6=!1,Ame<0?nh<0?nh=Math.PI+nh:(nh=Math.PI-nh,Y0=-1,E6=!0):nh>0&&(Y0=-1,E6=!0),r.radius!==void 0?d1=r.radius:d1=i,$0=nh/2,m6=Math.min(Qc.len/2,cl.len/2),a?(Kc=Math.abs(Math.cos($0)*d1/Math.sin($0)),Kc>m6?(Kc=m6,W0=Math.abs(Kc*Math.sin($0)/Math.cos($0))):W0=d1):(Kc=Math.min(m6,d1),W0=Math.abs(Kc*Math.sin($0)/Math.cos($0))),jP=r.x+cl.nx*Kc,KP=r.y+cl.ny*Kc,qP=jP-cl.ny*W0*Y0,XP=KP+cl.nx*W0*Y0,r1e=r.x+Qc.nx*Kc,n1e=r.y+Qc.ny*Kc,_me=r},"calcCornerArc");o(i1e,"drawPreparedRoundCorner");o(TB,"getRoundCorner");qa={};qa.findMidptPtsEtc=function(t,e){var r=e.posPts,n=e.intersectionPts,i=e.vectorNormInverse,a,s=t.pstyle("source-endpoint"),l=t.pstyle("target-endpoint"),u=s.units!=null&&l.units!=null,h=o(function(T,E,L,S){var A=S-E,I=L-T,D=Math.sqrt(I*I+A*A);return{x:-A/D,y:I/D}},"recalcVectorNormInverse"),f=t.pstyle("edge-distances").value;switch(f){case"node-position":a=r;break;case"intersection":a=n;break;case"endpoints":{if(u){var d=this.manualEndptToPx(t.source()[0],s),p=jl(d,2),m=p[0],g=p[1],y=this.manualEndptToPx(t.target()[0],l),v=jl(y,2),x=v[0],b=v[1],w={x1:m,y1:g,x2:x,y2:b};i=h(m,g,x,b),a=w}else on("Edge ".concat(t.id()," has edge-distances:endpoints specified without manual endpoints specified via source-endpoint and target-endpoint. Falling back on edge-distances:intersection (default).")),a=n;break}}return{midptPts:a,vectorNormInverse:i}};qa.findHaystackPoints=function(t){for(var e=0;e0?Math.max(ie-Ee,0):Math.min(ie+Ee,0)},"subDWH"),R=k(I,S),C=k(D,A),O=!1;b===h?x=Math.abs(R)>Math.abs(C)?i:n:b===u||b===l?(x=n,O=!0):(b===a||b===s)&&(x=i,O=!0);var N=x===n,P=N?C:R,F=N?D:I,B=lge(F),G=!1;!(O&&(_||E))&&(b===l&&F<0||b===u&&F>0||b===a&&F>0||b===s&&F<0)&&(B*=-1,P=B*Math.abs(P),G=!0);var z;if(_){var W=T<0?1+T:T;z=W*P}else{var Z=T<0?P:0;z=Z+T*B}var j=o(function(ie){return Math.abs(ie)=Math.abs(P)},"getIsTooClose"),oe=j(z),K=j(Math.abs(P)-Math.abs(z)),ee=oe||K;if(ee&&!G)if(N){var J=Math.abs(F)<=p/2,H=Math.abs(I)<=m/2;if(J){var q=(f.x1+f.x2)/2,Q=f.y1,ae=f.y2;r.segpts=[q,Q,q,ae]}else if(H){var ue=(f.y1+f.y2)/2,ce=f.x1,te=f.x2;r.segpts=[ce,ue,te,ue]}else r.segpts=[f.x1,f.y2]}else{var Ne=Math.abs(F)<=d/2,se=Math.abs(D)<=g/2;if(Ne){var ke=(f.y1+f.y2)/2,Re=f.x1,Ce=f.x2;r.segpts=[Re,ke,Ce,ke]}else if(se){var Pe=(f.x1+f.x2)/2,Ie=f.y1,$e=f.y2;r.segpts=[Pe,Ie,Pe,$e]}else r.segpts=[f.x2,f.y1]}else if(N){var ye=f.y1+z+(v?p/2*B:0),X=f.x1,fe=f.x2;r.segpts=[X,ye,fe,ye]}else{var he=f.x1+z+(v?d/2*B:0),ge=f.y1,ne=f.y2;r.segpts=[he,ge,he,ne]}if(r.isRound){var ve=t.pstyle("taxi-radius").value,U=t.pstyle("radius-type").value[0]==="arc-radius";r.radii=new Array(r.segpts.length/2).fill(ve),r.isArcRadius=new Array(r.segpts.length/2).fill(U)}};qa.tryToCorrectInvalidPoints=function(t,e){var r=t._private.rscratch;if(r.edgeType==="bezier"){var n=e.srcPos,i=e.tgtPos,a=e.srcW,s=e.srcH,l=e.tgtW,u=e.tgtH,h=e.srcShape,f=e.tgtShape,d=e.srcCornerRadius,p=e.tgtCornerRadius,m=e.srcRs,g=e.tgtRs,y=!xt(r.startX)||!xt(r.startY),v=!xt(r.arrowStartX)||!xt(r.arrowStartY),x=!xt(r.endX)||!xt(r.endY),b=!xt(r.arrowEndX)||!xt(r.arrowEndY),w=3,_=this.getArrowWidth(t.pstyle("width").pfValue,t.pstyle("arrow-scale").value)*this.arrowShapeWidth,T=w*_,E=K0({x:r.ctrlpts[0],y:r.ctrlpts[1]},{x:r.startX,y:r.startY}),L=EC.poolIndex()){var O=R;R=C,C=O}var N=A.srcPos=R.position(),P=A.tgtPos=C.position(),F=A.srcW=R.outerWidth(),B=A.srcH=R.outerHeight(),G=A.tgtW=C.outerWidth(),z=A.tgtH=C.outerHeight(),W=A.srcShape=r.nodeShapes[e.getNodeShape(R)],Z=A.tgtShape=r.nodeShapes[e.getNodeShape(C)],j=A.srcCornerRadius=R.pstyle("corner-radius").value==="auto"?"auto":R.pstyle("corner-radius").pfValue,oe=A.tgtCornerRadius=C.pstyle("corner-radius").value==="auto"?"auto":C.pstyle("corner-radius").pfValue,K=A.tgtRs=C._private.rscratch,ee=A.srcRs=R._private.rscratch;A.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var J=0;J0){var ae=a,ue=U0(ae,m1(r)),ce=U0(ae,m1(Q)),te=ue;if(ce2){var Ne=U0(ae,{x:Q[2],y:Q[3]});Ne0){var ne=s,ve=U0(ne,m1(r)),U=U0(ne,m1(ge)),Te=ve;if(U2){var ie=U0(ne,{x:ge[2],y:ge[3]});ie=g||L){v={cp:_,segment:E};break}}if(v)break}var S=v.cp,A=v.segment,I=(g-x)/A.length,D=A.t1-A.t0,k=m?A.t0+D*I:A.t1-D*I;k=sb(0,k,1),e=y1(S.p0,S.p1,S.p2,k),p=ret(S.p0,S.p1,S.p2,k);break}case"straight":case"segments":case"haystack":{for(var R=0,C,O,N,P,F=n.allpts.length,B=0;B+3=g));B+=2);var G=g-O,z=G/C;z=sb(0,z,1),e=oje(N,P,z),p=o1e(N,P);break}}s("labelX",d,e.x),s("labelY",d,e.y),s("labelAutoAngle",d,p)}},"calculateEndProjection");h("source"),h("target"),this.applyLabelDimensions(t)}};tu.applyLabelDimensions=function(t){this.applyPrefixedLabelDimensions(t),t.isEdge()&&(this.applyPrefixedLabelDimensions(t,"source"),this.applyPrefixedLabelDimensions(t,"target"))};tu.applyPrefixedLabelDimensions=function(t,e){var r=t._private,n=this.getLabelText(t,e),i=this.calculateLabelDimensions(t,n),a=t.pstyle("line-height").pfValue,s=t.pstyle("text-wrap").strValue,l=Ql(r.rscratch,"labelWrapCachedLines",e)||[],u=s!=="wrap"?1:Math.max(l.length,1),h=i.height/u,f=h*a,d=i.width,p=i.height+(u-1)*(a-1)*h;Df(r.rstyle,"labelWidth",e,d),Df(r.rscratch,"labelWidth",e,d),Df(r.rstyle,"labelHeight",e,p),Df(r.rscratch,"labelHeight",e,p),Df(r.rscratch,"labelLineHeight",e,f)};tu.getLabelText=function(t,e){var r=t._private,n=e?e+"-":"",i=t.pstyle(n+"label").strValue,a=t.pstyle("text-transform").value,s=o(function(Z,j){return j?(Df(r.rscratch,Z,e,j),j):Ql(r.rscratch,Z,e)},"rscratch");if(!i)return"";a=="none"||(a=="uppercase"?i=i.toUpperCase():a=="lowercase"&&(i=i.toLowerCase()));var l=t.pstyle("text-wrap").value;if(l==="wrap"){var u=s("labelKey");if(u!=null&&s("labelWrapKey")===u)return s("labelWrapCachedText");for(var h="\u200B",f=i.split(` +`),d=t.pstyle("text-max-width").pfValue,p=t.pstyle("text-overflow-wrap").value,m=p==="anywhere",g=[],y=/[\s\u200b]+|$/g,v=0;vd){var T=x.matchAll(y),E="",L=0,S=Ume(T),A;try{for(S.s();!(A=S.n()).done;){var I=A.value,D=I[0],k=x.substring(L,I.index);L=I.index+D.length;var R=E.length===0?k:E+k+D,C=this.calculateLabelDimensions(t,R),O=C.width;O<=d?E+=k+D:(E&&g.push(E),E=k+D)}}catch(W){S.e(W)}finally{S.f()}E.match(/^[\s\u200b]+$/)||g.push(E)}else g.push(x)}s("labelWrapCachedLines",g),i=s("labelWrapCachedText",g.join(` +`)),s("labelWrapKey",u)}else if(l==="ellipsis"){var N=t.pstyle("text-max-width").pfValue,P="",F="\u2026",B=!1;if(this.calculateLabelDimensions(t,i).widthN)break;P+=i[G],G===i.length-1&&(B=!0)}return B||(P+=F),P}return i};tu.getLabelJustification=function(t){var e=t.pstyle("text-justification").strValue,r=t.pstyle("text-halign").strValue;if(e==="auto")if(t.isNode())switch(r){case"left":return"right";case"right":return"left";default:return"center"}else return"center";else return e};tu.calculateLabelDimensions=function(t,e){var r=this,n=r.cy.window(),i=n.document,a=j0(e,t._private.labelDimsKey),s=r.labelDimCache||(r.labelDimCache=[]),l=s[a];if(l!=null)return l;var u=0,h=t.pstyle("font-style").strValue,f=t.pstyle("font-size").pfValue,d=t.pstyle("font-family").strValue,p=t.pstyle("font-weight").strValue,m=this.labelCalcCanvas,g=this.labelCalcCanvasContext;if(!m){m=this.labelCalcCanvas=i.createElement("canvas"),g=this.labelCalcCanvasContext=m.getContext("2d");var y=m.style;y.position="absolute",y.left="-9999px",y.top="-9999px",y.zIndex="-1",y.visibility="hidden",y.pointerEvents="none"}g.font="".concat(h," ").concat(p," ").concat(f,"px ").concat(d);for(var v=0,x=0,b=e.split(` +`),w=0;w1&&arguments[1]!==void 0?arguments[1]:!0;if(e.merge(s),l)for(var u=0;u=t.desktopTapThreshold2}var yt=i(X);Oe&&(t.hoverData.tapholdCancelled=!0);var Ue=o(function(){var Bt=t.hoverData.dragDelta=t.hoverData.dragDelta||[];Bt.length===0?(Bt.push(me[0]),Bt.push(me[1])):(Bt[0]+=me[0],Bt[1]+=me[1])},"updateDragDelta");he=!0,n(Ae,["mousemove","vmousemove","tapdrag"],X,{x:U[0],y:U[1]});var tt=o(function(){t.data.bgActivePosistion=void 0,t.hoverData.selecting||ge.emit({originalEvent:X,type:"boxstart",position:{x:U[0],y:U[1]}}),Ee[4]=1,t.hoverData.selecting=!0,t.redrawHint("select",!0),t.redraw()},"goIntoBoxMode");if(t.hoverData.which===3){if(Oe){var ht={originalEvent:X,type:"cxtdrag",position:{x:U[0],y:U[1]}};Be?Be.emit(ht):ge.emit(ht),t.hoverData.cxtDragged=!0,(!t.hoverData.cxtOver||Ae!==t.hoverData.cxtOver)&&(t.hoverData.cxtOver&&t.hoverData.cxtOver.emit({originalEvent:X,type:"cxtdragout",position:{x:U[0],y:U[1]}}),t.hoverData.cxtOver=Ae,Ae&&Ae.emit({originalEvent:X,type:"cxtdragover",position:{x:U[0],y:U[1]}}))}}else if(t.hoverData.dragging){if(he=!0,ge.panningEnabled()&&ge.userPanningEnabled()){var Et;if(t.hoverData.justStartedPan){var er=t.hoverData.mdownPos;Et={x:(U[0]-er[0])*ne,y:(U[1]-er[1])*ne},t.hoverData.justStartedPan=!1}else Et={x:me[0]*ne,y:me[1]*ne};ge.panBy(Et),ge.emit("dragpan"),t.hoverData.dragged=!0}U=t.projectIntoViewport(X.clientX,X.clientY)}else if(Ee[4]==1&&(Be==null||Be.pannable())){if(Oe){if(!t.hoverData.dragging&&ge.boxSelectionEnabled()&&(yt||!ge.panningEnabled()||!ge.userPanningEnabled()))tt();else if(!t.hoverData.selecting&&ge.panningEnabled()&&ge.userPanningEnabled()){var dt=a(Be,t.hoverData.downs);dt&&(t.hoverData.dragging=!0,t.hoverData.justStartedPan=!0,Ee[4]=0,t.data.bgActivePosistion=m1(Te),t.redrawHint("select",!0),t.redraw())}Be&&Be.pannable()&&Be.active()&&Be.unactivate()}}else{if(Be&&Be.pannable()&&Be.active()&&Be.unactivate(),(!Be||!Be.grabbed())&&Ae!=Ge&&(Ge&&n(Ge,["mouseout","tapdragout"],X,{x:U[0],y:U[1]}),Ae&&n(Ae,["mouseover","tapdragover"],X,{x:U[0],y:U[1]}),t.hoverData.last=Ae),Be)if(Oe){if(ge.boxSelectionEnabled()&&yt)Be&&Be.grabbed()&&(v(He),Be.emit("freeon"),He.emit("free"),t.dragData.didDrag&&(Be.emit("dragfreeon"),He.emit("dragfree"))),tt();else if(Be&&Be.grabbed()&&t.nodeIsDraggable(Be)){var Je=!t.dragData.didDrag;Je&&t.redrawHint("eles",!0),t.dragData.didDrag=!0,t.hoverData.draggingEles||g(He,{inDragLayer:!0});var ct={x:0,y:0};if(xt(me[0])&&xt(me[1])&&(ct.x+=me[0],ct.y+=me[1],Je)){var Ct=t.hoverData.dragDelta;Ct&&xt(Ct[0])&&xt(Ct[1])&&(ct.x+=Ct[0],ct.y+=Ct[1])}t.hoverData.draggingEles=!0,He.silentShift(ct).emit("position drag"),t.redrawHint("drag",!0),t.redraw()}}else Ue();he=!0}if(Ee[2]=U[0],Ee[3]=U[1],he)return X.stopPropagation&&X.stopPropagation(),X.preventDefault&&X.preventDefault(),!1}},"mousemoveHandler"),!1);var I,D,k;t.registerBinding(e,"mouseup",o(function(X){if(!(t.hoverData.which===1&&X.which!==1&&t.hoverData.capture)){var fe=t.hoverData.capture;if(fe){t.hoverData.capture=!1;var he=t.cy,ge=t.projectIntoViewport(X.clientX,X.clientY),ne=t.selection,ve=t.findNearestElement(ge[0],ge[1],!0,!1),U=t.dragData.possibleDragElements,Te=t.hoverData.down,ie=i(X);if(t.data.bgActivePosistion&&(t.redrawHint("select",!0),t.redraw()),t.hoverData.tapholdCancelled=!0,t.data.bgActivePosistion=void 0,Te&&Te.unactivate(),t.hoverData.which===3){var Ee={originalEvent:X,type:"cxttapend",position:{x:ge[0],y:ge[1]}};if(Te?Te.emit(Ee):he.emit(Ee),!t.hoverData.cxtDragged){var Ae={originalEvent:X,type:"cxttap",position:{x:ge[0],y:ge[1]}};Te?Te.emit(Ae):he.emit(Ae)}t.hoverData.cxtDragged=!1,t.hoverData.which=null}else if(t.hoverData.which===1){if(n(ve,["mouseup","tapend","vmouseup"],X,{x:ge[0],y:ge[1]}),!t.dragData.didDrag&&!t.hoverData.dragged&&!t.hoverData.selecting&&!t.hoverData.isOverThresholdDrag&&(n(Te,["click","tap","vclick"],X,{x:ge[0],y:ge[1]}),D=!1,X.timeStamp-k<=he.multiClickDebounceTime()?(I&&clearTimeout(I),D=!0,k=null,n(Te,["dblclick","dbltap","vdblclick"],X,{x:ge[0],y:ge[1]})):(I=setTimeout(function(){D||n(Te,["oneclick","onetap","voneclick"],X,{x:ge[0],y:ge[1]})},he.multiClickDebounceTime()),k=X.timeStamp)),Te==null&&!t.dragData.didDrag&&!t.hoverData.selecting&&!t.hoverData.dragged&&!i(X)&&(he.$(r).unselect(["tapunselect"]),U.length>0&&t.redrawHint("eles",!0),t.dragData.possibleDragElements=U=he.collection()),ve==Te&&!t.dragData.didDrag&&!t.hoverData.selecting&&ve!=null&&ve._private.selectable&&(t.hoverData.dragging||(he.selectionType()==="additive"||ie?ve.selected()?ve.unselect(["tapunselect"]):ve.select(["tapselect"]):ie||(he.$(r).unmerge(ve).unselect(["tapunselect"]),ve.select(["tapselect"]))),t.redrawHint("eles",!0)),t.hoverData.selecting){var Ge=he.collection(t.getAllInBox(ne[0],ne[1],ne[2],ne[3]));t.redrawHint("select",!0),Ge.length>0&&t.redrawHint("eles",!0),he.emit({type:"boxend",originalEvent:X,position:{x:ge[0],y:ge[1]}});var Be=o(function(Oe){return Oe.selectable()&&!Oe.selected()},"eleWouldBeSelected");he.selectionType()==="additive"||ie||he.$(r).unmerge(Ge).unselect(),Ge.emit("box").stdFilter(Be).select().emit("boxselect"),t.redraw()}if(t.hoverData.dragging&&(t.hoverData.dragging=!1,t.redrawHint("select",!0),t.redrawHint("eles",!0),t.redraw()),!ne[4]){t.redrawHint("drag",!0),t.redrawHint("eles",!0);var me=Te&&Te.grabbed();v(U),me&&(Te.emit("freeon"),U.emit("free"),t.dragData.didDrag&&(Te.emit("dragfreeon"),U.emit("dragfree")))}}ne[4]=0,t.hoverData.down=null,t.hoverData.cxtStarted=!1,t.hoverData.draggingEles=!1,t.hoverData.selecting=!1,t.hoverData.isOverThresholdDrag=!1,t.dragData.didDrag=!1,t.hoverData.dragged=!1,t.hoverData.dragDelta=[],t.hoverData.mdownPos=null,t.hoverData.mdownGPos=null,t.hoverData.which=null}}},"mouseupHandler"),!1);var R=o(function(X){if(!t.scrollingPage){var fe=t.cy,he=fe.zoom(),ge=fe.pan(),ne=t.projectIntoViewport(X.clientX,X.clientY),ve=[ne[0]*he+ge.x,ne[1]*he+ge.y];if(t.hoverData.draggingEles||t.hoverData.dragging||t.hoverData.cxtStarted||S()){X.preventDefault();return}if(fe.panningEnabled()&&fe.userPanningEnabled()&&fe.zoomingEnabled()&&fe.userZoomingEnabled()){X.preventDefault(),t.data.wheelZooming=!0,clearTimeout(t.data.wheelTimeout),t.data.wheelTimeout=setTimeout(function(){t.data.wheelZooming=!1,t.redrawHint("eles",!0),t.redraw()},150);var U;X.deltaY!=null?U=X.deltaY/-250:X.wheelDeltaY!=null?U=X.wheelDeltaY/1e3:U=X.wheelDelta/1e3,U=U*t.wheelSensitivity;var Te=X.deltaMode===1;Te&&(U*=33);var ie=fe.zoom()*Math.pow(10,U);X.type==="gesturechange"&&(ie=t.gestureStartZoom*X.scale),fe.zoom({level:ie,renderedPosition:{x:ve[0],y:ve[1]}}),fe.emit(X.type==="gesturechange"?"pinchzoom":"scrollzoom")}}},"wheelHandler");t.registerBinding(t.container,"wheel",R,!0),t.registerBinding(e,"scroll",o(function(X){t.scrollingPage=!0,clearTimeout(t.scrollingPageTimeout),t.scrollingPageTimeout=setTimeout(function(){t.scrollingPage=!1},250)},"scrollHandler"),!0),t.registerBinding(t.container,"gesturestart",o(function(X){t.gestureStartZoom=t.cy.zoom(),t.hasTouchStarted||X.preventDefault()},"gestureStartHandler"),!0),t.registerBinding(t.container,"gesturechange",function(ye){t.hasTouchStarted||R(ye)},!0),t.registerBinding(t.container,"mouseout",o(function(X){var fe=t.projectIntoViewport(X.clientX,X.clientY);t.cy.emit({originalEvent:X,type:"mouseout",position:{x:fe[0],y:fe[1]}})},"mouseOutHandler"),!1),t.registerBinding(t.container,"mouseover",o(function(X){var fe=t.projectIntoViewport(X.clientX,X.clientY);t.cy.emit({originalEvent:X,type:"mouseover",position:{x:fe[0],y:fe[1]}})},"mouseOverHandler"),!1);var C,O,N,P,F,B,G,z,W,Z,j,oe,K,ee=o(function(X,fe,he,ge){return Math.sqrt((he-X)*(he-X)+(ge-fe)*(ge-fe))},"distance"),J=o(function(X,fe,he,ge){return(he-X)*(he-X)+(ge-fe)*(ge-fe)},"distanceSq"),H;t.registerBinding(t.container,"touchstart",H=o(function(X){if(t.hasTouchStarted=!0,!!A(X)){b(),t.touchData.capture=!0,t.data.bgActivePosistion=void 0;var fe=t.cy,he=t.touchData.now,ge=t.touchData.earlier;if(X.touches[0]){var ne=t.projectIntoViewport(X.touches[0].clientX,X.touches[0].clientY);he[0]=ne[0],he[1]=ne[1]}if(X.touches[1]){var ne=t.projectIntoViewport(X.touches[1].clientX,X.touches[1].clientY);he[2]=ne[0],he[3]=ne[1]}if(X.touches[2]){var ne=t.projectIntoViewport(X.touches[2].clientX,X.touches[2].clientY);he[4]=ne[0],he[5]=ne[1]}if(X.touches[1]){t.touchData.singleTouchMoved=!0,v(t.dragData.touchDragEles);var ve=t.findContainerClientCoords();W=ve[0],Z=ve[1],j=ve[2],oe=ve[3],C=X.touches[0].clientX-W,O=X.touches[0].clientY-Z,N=X.touches[1].clientX-W,P=X.touches[1].clientY-Z,K=0<=C&&C<=j&&0<=N&&N<=j&&0<=O&&O<=oe&&0<=P&&P<=oe;var U=fe.pan(),Te=fe.zoom();F=ee(C,O,N,P),B=J(C,O,N,P),G=[(C+N)/2,(O+P)/2],z=[(G[0]-U.x)/Te,(G[1]-U.y)/Te];var ie=200,Ee=ie*ie;if(B=1){for(var bt=t.touchData.startPosition=[null,null,null,null,null,null],kt=0;kt=t.touchTapThreshold2}if(fe&&t.touchData.cxt){X.preventDefault();var bt=X.touches[0].clientX-W,kt=X.touches[0].clientY-Z,vt=X.touches[1].clientX-W,rt=X.touches[1].clientY-Z,yt=J(bt,kt,vt,rt),Ue=yt/B,tt=150,ht=tt*tt,Et=1.5,er=Et*Et;if(Ue>=er||yt>=ht){t.touchData.cxt=!1,t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var dt={originalEvent:X,type:"cxttapend",position:{x:ne[0],y:ne[1]}};t.touchData.start?(t.touchData.start.unactivate().emit(dt),t.touchData.start=null):ge.emit(dt)}}if(fe&&t.touchData.cxt){var dt={originalEvent:X,type:"cxtdrag",position:{x:ne[0],y:ne[1]}};t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),t.touchData.start?t.touchData.start.emit(dt):ge.emit(dt),t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxtDragged=!0;var Je=t.findNearestElement(ne[0],ne[1],!0,!0);(!t.touchData.cxtOver||Je!==t.touchData.cxtOver)&&(t.touchData.cxtOver&&t.touchData.cxtOver.emit({originalEvent:X,type:"cxtdragout",position:{x:ne[0],y:ne[1]}}),t.touchData.cxtOver=Je,Je&&Je.emit({originalEvent:X,type:"cxtdragover",position:{x:ne[0],y:ne[1]}}))}else if(fe&&X.touches[2]&&ge.boxSelectionEnabled())X.preventDefault(),t.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,t.touchData.selecting||ge.emit({originalEvent:X,type:"boxstart",position:{x:ne[0],y:ne[1]}}),t.touchData.selecting=!0,t.touchData.didSelect=!0,he[4]=1,!he||he.length===0||he[0]===void 0?(he[0]=(ne[0]+ne[2]+ne[4])/3,he[1]=(ne[1]+ne[3]+ne[5])/3,he[2]=(ne[0]+ne[2]+ne[4])/3+1,he[3]=(ne[1]+ne[3]+ne[5])/3+1):(he[2]=(ne[0]+ne[2]+ne[4])/3,he[3]=(ne[1]+ne[3]+ne[5])/3),t.redrawHint("select",!0),t.redraw();else if(fe&&X.touches[1]&&!t.touchData.didSelect&&ge.zoomingEnabled()&&ge.panningEnabled()&&ge.userZoomingEnabled()&&ge.userPanningEnabled()){X.preventDefault(),t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var ct=t.dragData.touchDragEles;if(ct){t.redrawHint("drag",!0);for(var Ct=0;Ct0&&!t.hoverData.draggingEles&&!t.swipePanning&&t.data.bgActivePosistion!=null&&(t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),t.redraw())}},"touchmoveHandler"),!1);var Q;t.registerBinding(e,"touchcancel",Q=o(function(X){var fe=t.touchData.start;t.touchData.capture=!1,fe&&fe.unactivate()},"touchcancelHandler"));var ae,ue,ce,te;if(t.registerBinding(e,"touchend",ae=o(function(X){var fe=t.touchData.start,he=t.touchData.capture;if(he)X.touches.length===0&&(t.touchData.capture=!1),X.preventDefault();else return;var ge=t.selection;t.swipePanning=!1,t.hoverData.draggingEles=!1;var ne=t.cy,ve=ne.zoom(),U=t.touchData.now,Te=t.touchData.earlier;if(X.touches[0]){var ie=t.projectIntoViewport(X.touches[0].clientX,X.touches[0].clientY);U[0]=ie[0],U[1]=ie[1]}if(X.touches[1]){var ie=t.projectIntoViewport(X.touches[1].clientX,X.touches[1].clientY);U[2]=ie[0],U[3]=ie[1]}if(X.touches[2]){var ie=t.projectIntoViewport(X.touches[2].clientX,X.touches[2].clientY);U[4]=ie[0],U[5]=ie[1]}fe&&fe.unactivate();var Ee;if(t.touchData.cxt){if(Ee={originalEvent:X,type:"cxttapend",position:{x:U[0],y:U[1]}},fe?fe.emit(Ee):ne.emit(Ee),!t.touchData.cxtDragged){var Ae={originalEvent:X,type:"cxttap",position:{x:U[0],y:U[1]}};fe?fe.emit(Ae):ne.emit(Ae)}t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxt=!1,t.touchData.start=null,t.redraw();return}if(!X.touches[2]&&ne.boxSelectionEnabled()&&t.touchData.selecting){t.touchData.selecting=!1;var Ge=ne.collection(t.getAllInBox(ge[0],ge[1],ge[2],ge[3]));ge[0]=void 0,ge[1]=void 0,ge[2]=void 0,ge[3]=void 0,ge[4]=0,t.redrawHint("select",!0),ne.emit({type:"boxend",originalEvent:X,position:{x:U[0],y:U[1]}});var Be=o(function(ht){return ht.selectable()&&!ht.selected()},"eleWouldBeSelected");Ge.emit("box").stdFilter(Be).select().emit("boxselect"),Ge.nonempty()&&t.redrawHint("eles",!0),t.redraw()}if(fe?.unactivate(),X.touches[2])t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);else if(!X.touches[1]){if(!X.touches[0]){if(!X.touches[0]){t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var me=t.dragData.touchDragEles;if(fe!=null){var He=fe._private.grabbed;v(me),t.redrawHint("drag",!0),t.redrawHint("eles",!0),He&&(fe.emit("freeon"),me.emit("free"),t.dragData.didDrag&&(fe.emit("dragfreeon"),me.emit("dragfree"))),n(fe,["touchend","tapend","vmouseup","tapdragout"],X,{x:U[0],y:U[1]}),fe.unactivate(),t.touchData.start=null}else{var Oe=t.findNearestElement(U[0],U[1],!0,!0);n(Oe,["touchend","tapend","vmouseup","tapdragout"],X,{x:U[0],y:U[1]})}var et=t.touchData.startPosition[0]-U[0],bt=et*et,kt=t.touchData.startPosition[1]-U[1],vt=kt*kt,rt=bt+vt,yt=rt*ve*ve;t.touchData.singleTouchMoved||(fe||ne.$(":selected").unselect(["tapunselect"]),n(fe,["tap","vclick"],X,{x:U[0],y:U[1]}),ue=!1,X.timeStamp-te<=ne.multiClickDebounceTime()?(ce&&clearTimeout(ce),ue=!0,te=null,n(fe,["dbltap","vdblclick"],X,{x:U[0],y:U[1]})):(ce=setTimeout(function(){ue||n(fe,["onetap","voneclick"],X,{x:U[0],y:U[1]})},ne.multiClickDebounceTime()),te=X.timeStamp)),fe!=null&&!t.dragData.didDrag&&fe._private.selectable&&yt"u"){var Ne=[],se=o(function(X){return{clientX:X.clientX,clientY:X.clientY,force:1,identifier:X.pointerId,pageX:X.pageX,pageY:X.pageY,radiusX:X.width/2,radiusY:X.height/2,screenX:X.screenX,screenY:X.screenY,target:X.target}},"makeTouch"),ke=o(function(X){return{event:X,touch:se(X)}},"makePointer"),Re=o(function(X){Ne.push(ke(X))},"addPointer"),Ce=o(function(X){for(var fe=0;fe0)return W[0]}return null},"getCurveT"),g=Object.keys(p),y=0;y0?m:hge(a,s,e,r,n,i,l,u)},"intersectLine"),checkPoint:o(function(e,r,n,i,a,s,l,u){u=u==="auto"?Q0(i,a):u;var h=2*u;if(ah(e,r,this.points,s,l,i,a-h,[0,-1],n)||ah(e,r,this.points,s,l,i-h,a,[0,-1],n))return!0;var f=i/2+2*n,d=a/2+2*n,p=[s-f,l-d,s-f,l,s+f,l,s+f,l-d];return!!(js(e,r,p)||q0(e,r,h,h,s+i/2-u,l+a/2-u,n)||q0(e,r,h,h,s-i/2+u,l+a/2-u,n))},"checkPoint")}};oh.registerNodeShapes=function(){var t=this.nodeShapes={},e=this;this.generateEllipse(),this.generatePolygon("triangle",ms(3,0)),this.generateRoundPolygon("round-triangle",ms(3,0)),this.generatePolygon("rectangle",ms(4,0)),t.square=t.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();{var r=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",r),this.generateRoundPolygon("round-diamond",r)}this.generatePolygon("pentagon",ms(5,0)),this.generateRoundPolygon("round-pentagon",ms(5,0)),this.generatePolygon("hexagon",ms(6,0)),this.generateRoundPolygon("round-hexagon",ms(6,0)),this.generatePolygon("heptagon",ms(7,0)),this.generateRoundPolygon("round-heptagon",ms(7,0)),this.generatePolygon("octagon",ms(8,0)),this.generateRoundPolygon("round-octagon",ms(8,0));var n=new Array(20);{var i=zP(5,0),a=zP(5,Math.PI/5),s=.5*(3-Math.sqrt(5));s*=1.57;for(var l=0;l=e.deqFastCost*_)break}else if(h){if(b>=e.deqCost*m||b>=e.deqAvgCost*p)break}else if(w>=e.deqNoDrawCost*PP)break;var T=e.deq(n,v,y);if(T.length>0)for(var E=0;E0&&(e.onDeqd(n,g),!h&&e.shouldRedraw(n,g,v,y)&&a())},"dequeue"),l=e.priority||sB;i.beforeRender(s,l(n))}},"setupDequeueingImpl")},"setupDequeueing")},iet=function(){function t(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:_6;tB(this,t),this.idsByKey=new Jc,this.keyForId=new Jc,this.cachesByLvl=new Jc,this.lvls=[],this.getKey=e,this.doesEleInvalidateKey=r}return o(t,"ElementTextureCacheLookup"),rB(t,[{key:"getIdsFor",value:o(function(r){r==null&&di("Can not get id list for null key");var n=this.idsByKey,i=this.idsByKey.get(r);return i||(i=new S1,n.set(r,i)),i},"getIdsFor")},{key:"addIdForKey",value:o(function(r,n){r!=null&&this.getIdsFor(r).add(n)},"addIdForKey")},{key:"deleteIdForKey",value:o(function(r,n){r!=null&&this.getIdsFor(r).delete(n)},"deleteIdForKey")},{key:"getNumberOfIdsForKey",value:o(function(r){return r==null?0:this.getIdsFor(r).size},"getNumberOfIdsForKey")},{key:"updateKeyMappingFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n),a=this.getKey(r);this.deleteIdForKey(i,n),this.addIdForKey(a,n),this.keyForId.set(n,a)},"updateKeyMappingFor")},{key:"deleteKeyMappingFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n);this.deleteIdForKey(i,n),this.keyForId.delete(n)},"deleteKeyMappingFor")},{key:"keyHasChangedFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n),a=this.getKey(r);return i!==a},"keyHasChangedFor")},{key:"isInvalid",value:o(function(r){return this.keyHasChangedFor(r)||this.doesEleInvalidateKey(r)},"isInvalid")},{key:"getCachesAt",value:o(function(r){var n=this.cachesByLvl,i=this.lvls,a=n.get(r);return a||(a=new Jc,n.set(r,a),i.push(r)),a},"getCachesAt")},{key:"getCache",value:o(function(r,n){return this.getCachesAt(n).get(r)},"getCache")},{key:"get",value:o(function(r,n){var i=this.getKey(r),a=this.getCache(i,n);return a!=null&&this.updateKeyMappingFor(r),a},"get")},{key:"getForCachedKey",value:o(function(r,n){var i=this.keyForId.get(r.id()),a=this.getCache(i,n);return a},"getForCachedKey")},{key:"hasCache",value:o(function(r,n){return this.getCachesAt(n).has(r)},"hasCache")},{key:"has",value:o(function(r,n){var i=this.getKey(r);return this.hasCache(i,n)},"has")},{key:"setCache",value:o(function(r,n,i){i.key=r,this.getCachesAt(n).set(r,i)},"setCache")},{key:"set",value:o(function(r,n,i){var a=this.getKey(r);this.setCache(a,n,i),this.updateKeyMappingFor(r)},"set")},{key:"deleteCache",value:o(function(r,n){this.getCachesAt(n).delete(r)},"deleteCache")},{key:"delete",value:o(function(r,n){var i=this.getKey(r);this.deleteCache(i,n)},"_delete")},{key:"invalidateKey",value:o(function(r){var n=this;this.lvls.forEach(function(i){return n.deleteCache(r,i)})},"invalidateKey")},{key:"invalidate",value:o(function(r){var n=r.id(),i=this.keyForId.get(n);this.deleteKeyMappingFor(r);var a=this.doesEleInvalidateKey(r);return a&&this.invalidateKey(i),a||this.getNumberOfIdsForKey(i)===0},"invalidate")}]),t}(),Mme=25,g6=50,S6=-4,QP=3,aet=7.99,set=8,oet=1024,cet=1024,uet=1024,het=.2,fet=.8,det=10,pet=.15,met=.1,get=.9,yet=.9,vet=100,xet=1,g1={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},bet=_a({getKey:null,doesEleInvalidateKey:_6,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:nge,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),Jx=o(function(e,r){var n=this;n.renderer=e,n.onDequeues=[];var i=bet(r);ir(n,i),n.lookup=new iet(i.getKey,i.doesEleInvalidateKey),n.setupDequeueing()},"ElementTextureCache"),Qi=Jx.prototype;Qi.reasons=g1;Qi.getTextureQueue=function(t){var e=this;return e.eleImgCaches=e.eleImgCaches||{},e.eleImgCaches[t]=e.eleImgCaches[t]||[]};Qi.getRetiredTextureQueue=function(t){var e=this,r=e.eleImgCaches.retired=e.eleImgCaches.retired||{},n=r[t]=r[t]||[];return n};Qi.getElementQueue=function(){var t=this,e=t.eleCacheQueue=t.eleCacheQueue||new gb(function(r,n){return n.reqs-r.reqs});return e};Qi.getElementKeyToQueue=function(){var t=this,e=t.eleKeyToCacheQueue=t.eleKeyToCacheQueue||{};return e};Qi.getElement=function(t,e,r,n,i){var a=this,s=this.renderer,l=s.cy.zoom(),u=this.lookup;if(!e||e.w===0||e.h===0||isNaN(e.w)||isNaN(e.h)||!t.visible()||t.removed()||!a.allowEdgeTxrCaching&&t.isEdge()||!a.allowParentTxrCaching&&t.isParent())return null;if(n==null&&(n=Math.ceil(lB(l*r))),n=aet||n>QP)return null;var h=Math.pow(2,n),f=e.h*h,d=e.w*h,p=s.eleTextBiggerThanMin(t,h);if(!this.isVisible(t,p))return null;var m=u.get(t,n);if(m&&m.invalidated&&(m.invalidated=!1,m.texture.invalidatedWidth-=m.width),m)return m;var g;if(f<=Mme?g=Mme:f<=g6?g=g6:g=Math.ceil(f/g6)*g6,f>uet||d>cet)return null;var y=a.getTextureQueue(g),v=y[y.length-2],x=o(function(){return a.recycleTexture(g,d)||a.addTexture(g,d)},"addNewTxr");v||(v=y[y.length-1]),v||(v=x()),v.width-v.usedWidthn;D--)A=a.getElement(t,e,r,D,g1.downscale);I()}else return a.queueElement(t,E.level-1),E;else{var k;if(!w&&!_&&!T)for(var R=n-1;R>=S6;R--){var C=u.get(t,R);if(C){k=C;break}}if(b(k))return a.queueElement(t,n),k;v.context.translate(v.usedWidth,0),v.context.scale(h,h),this.drawElement(v.context,t,e,p,!1),v.context.scale(1/h,1/h),v.context.translate(-v.usedWidth,0)}return m={x:v.usedWidth,texture:v,level:n,scale:h,width:d,height:f,scaledLabelShown:p},v.usedWidth+=Math.ceil(d+set),v.eleCaches.push(m),u.set(t,n,m),a.checkTextureFullness(v),m};Qi.invalidateElements=function(t){for(var e=0;e=het*t.width&&this.retireTexture(t)};Qi.checkTextureFullness=function(t){var e=this,r=e.getTextureQueue(t.height);t.usedWidth/t.width>fet&&t.fullnessChecks>=det?Of(r,t):t.fullnessChecks++};Qi.retireTexture=function(t){var e=this,r=t.height,n=e.getTextureQueue(r),i=this.lookup;Of(n,t),t.retired=!0;for(var a=t.eleCaches,s=0;s=e)return s.retired=!1,s.usedWidth=0,s.invalidatedWidth=0,s.fullnessChecks=0,oB(s.eleCaches),s.context.setTransform(1,0,0,1,0,0),s.context.clearRect(0,0,s.width,s.height),Of(i,s),n.push(s),s}};Qi.queueElement=function(t,e){var r=this,n=r.getElementQueue(),i=r.getElementKeyToQueue(),a=this.getKey(t),s=i[a];if(s)s.level=Math.max(s.level,e),s.eles.merge(t),s.reqs++,n.updateItem(s);else{var l={eles:t.spawn().merge(t),level:e,reqs:1,key:a};n.push(l),i[a]=l}};Qi.dequeue=function(t){for(var e=this,r=e.getElementQueue(),n=e.getElementKeyToQueue(),i=[],a=e.lookup,s=0;s0;s++){var l=r.pop(),u=l.key,h=l.eles[0],f=a.hasCache(h,l.level);if(n[u]=null,f)continue;i.push(l);var d=e.getBoundingBox(h);e.getElement(h,d,t,l.level,g1.dequeue)}return i};Qi.removeFromQueue=function(t){var e=this,r=e.getElementQueue(),n=e.getElementKeyToQueue(),i=this.getKey(t),a=n[i];a!=null&&(a.eles.length===1?(a.reqs=aB,r.updateItem(a),r.pop(),n[i]=null):a.eles.unmerge(t))};Qi.onDequeue=function(t){this.onDequeues.push(t)};Qi.offDequeue=function(t){Of(this.onDequeues,t)};Qi.setupDequeueing=f1e.setupDequeueing({deqRedrawThreshold:vet,deqCost:pet,deqAvgCost:met,deqNoDrawCost:get,deqFastCost:yet,deq:o(function(e,r,n){return e.dequeue(r,n)},"deq"),onDeqd:o(function(e,r){for(var n=0;n=Tet||r>P6)return null}n.validateLayersElesOrdering(r,t);var u=n.layersByLevel,h=Math.pow(2,r),f=u[r]=u[r]||[],d,p=n.levelIsComplete(r,t),m,g=o(function(){var I=o(function(O){if(n.validateLayersElesOrdering(O,t),n.levelIsComplete(O,t))return m=u[O],!0},"canUseAsTmpLvl"),D=o(function(O){if(!m)for(var N=r+O;tb<=N&&N<=P6&&!I(N);N+=O);},"checkLvls");D(1),D(-1);for(var k=f.length-1;k>=0;k--){var R=f[k];R.invalid&&Of(f,R)}},"checkTempLevels");if(!p)g();else return f;var y=o(function(){if(!d){d=Ks();for(var I=0;INet)return null;var R=n.makeLayer(d,r);if(D!=null){var C=f.indexOf(D)+1;f.splice(C,0,R)}else(I.insert===void 0||I.insert)&&f.unshift(R);return R},"makeLayer");if(n.skipping&&!l)return null;for(var x=null,b=t.length/wet,w=!l,_=0;_=b||!uge(x.bb,T.boundingBox()))&&(x=v({insert:!0,after:x}),!x))return null;m||w?n.queueLayer(x,T):n.drawEleInLayer(x,T,r,e),x.eles.push(T),L[r]=x}return m||(w?null:f)};La.getEleLevelForLayerLevel=function(t,e){return t};La.drawEleInLayer=function(t,e,r,n){var i=this,a=this.renderer,s=t.context,l=e.boundingBox();l.w===0||l.h===0||!e.visible()||(r=i.getEleLevelForLayerLevel(r,n),a.setImgSmoothing(s,!1),a.drawCachedElement(s,e,null,null,r,Ret),a.setImgSmoothing(s,!0))};La.levelIsComplete=function(t,e){var r=this,n=r.layersByLevel[t];if(!n||n.length===0)return!1;for(var i=0,a=0;a0||s.invalid)return!1;i+=s.eles.length}return i===e.length};La.validateLayersElesOrdering=function(t,e){var r=this.layersByLevel[t];if(r)for(var n=0;n0){e=!0;break}}return e};La.invalidateElements=function(t){var e=this;t.length!==0&&(e.lastInvalidationTime=ih(),!(t.length===0||!e.haveLayers())&&e.updateElementsInLayers(t,o(function(n,i,a){e.invalidateLayer(n)},"invalAssocLayers")))};La.invalidateLayer=function(t){if(this.lastInvalidationTime=ih(),!t.invalid){var e=t.level,r=t.eles,n=this.layersByLevel[e];Of(n,t),t.elesQueue=[],t.invalid=!0,t.replacement&&(t.replacement.invalid=!0);for(var i=0;i3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,l=e._private.rscratch;if(!(a&&!e.visible())&&!(l.badLine||l.allpts==null||isNaN(l.allpts[0]))){var u;r&&(u=r,t.translate(-u.x1,-u.y1));var h=a?e.pstyle("opacity").value:1,f=a?e.pstyle("line-opacity").value:1,d=e.pstyle("curve-style").value,p=e.pstyle("line-style").value,m=e.pstyle("width").pfValue,g=e.pstyle("line-cap").value,y=e.pstyle("line-outline-width").value,v=e.pstyle("line-outline-color").value,x=h*f,b=h*f,w=o(function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:x;d==="straight-triangle"?(s.eleStrokeStyle(t,e,O),s.drawEdgeTrianglePath(e,t,l.allpts)):(t.lineWidth=m,t.lineCap=g,s.eleStrokeStyle(t,e,O),s.drawEdgePath(e,t,l.allpts,p),t.lineCap="butt")},"drawLine"),_=o(function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:x;if(t.lineWidth=m+y,t.lineCap=g,y>0)s.colorStrokeStyle(t,v[0],v[1],v[2],O);else{t.lineCap="butt";return}d==="straight-triangle"?s.drawEdgeTrianglePath(e,t,l.allpts):(s.drawEdgePath(e,t,l.allpts,p),t.lineCap="butt")},"drawLineOutline"),T=o(function(){i&&s.drawEdgeOverlay(t,e)},"drawOverlay"),E=o(function(){i&&s.drawEdgeUnderlay(t,e)},"drawUnderlay"),L=o(function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:b;s.drawArrowheads(t,e,O)},"drawArrows"),S=o(function(){s.drawElementText(t,e,null,n)},"drawText");t.lineJoin="round";var A=e.pstyle("ghost").value==="yes";if(A){var I=e.pstyle("ghost-offset-x").pfValue,D=e.pstyle("ghost-offset-y").pfValue,k=e.pstyle("ghost-opacity").value,R=x*k;t.translate(I,D),w(R),L(R),t.translate(-I,-D)}else _();E(),w(),L(),T(),S(),r&&t.translate(u.x1,u.y1)}};m1e=o(function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(r,n){if(n.visible()){var i=n.pstyle("".concat(e,"-opacity")).value;if(i!==0){var a=this,s=a.usePaths(),l=n._private.rscratch,u=n.pstyle("".concat(e,"-padding")).pfValue,h=2*u,f=n.pstyle("".concat(e,"-color")).value;r.lineWidth=h,l.edgeType==="self"&&!s?r.lineCap="butt":r.lineCap="round",a.colorStrokeStyle(r,f[0],f[1],f[2],i),a.drawEdgePath(n,r,l.allpts,"solid")}}}},"drawEdgeOverlayUnderlay");lh.drawEdgeOverlay=m1e("overlay");lh.drawEdgeUnderlay=m1e("underlay");lh.drawEdgePath=function(t,e,r,n){var i=t._private.rscratch,a=e,s,l=!1,u=this.usePaths(),h=t.pstyle("line-dash-pattern").pfValue,f=t.pstyle("line-dash-offset").pfValue;if(u){var d=r.join("$"),p=i.pathCacheKey&&i.pathCacheKey===d;p?(s=e=i.pathCache,l=!0):(s=e=new Path2D,i.pathCacheKey=d,i.pathCache=s)}if(a.setLineDash)switch(n){case"dotted":a.setLineDash([1,1]);break;case"dashed":a.setLineDash(h),a.lineDashOffset=f;break;case"solid":a.setLineDash([]);break}if(!l&&!i.badLine)switch(e.beginPath&&e.beginPath(),e.moveTo(r[0],r[1]),i.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var m=2;m+35&&arguments[5]!==void 0?arguments[5]:!0,s=this;if(n==null){if(a&&!s.eleTextBiggerThanMin(e))return}else if(n===!1)return;if(e.isNode()){var l=e.pstyle("label");if(!l||!l.value)return;var u=s.getLabelJustification(e);t.textAlign=u,t.textBaseline="bottom"}else{var h=e.element()._private.rscratch.badLine,f=e.pstyle("label"),d=e.pstyle("source-label"),p=e.pstyle("target-label");if(h||(!f||!f.value)&&(!d||!d.value)&&(!p||!p.value))return;t.textAlign="center",t.textBaseline="bottom"}var m=!r,g;r&&(g=r,t.translate(-g.x1,-g.y1)),i==null?(s.drawText(t,e,null,m,a),e.isEdge()&&(s.drawText(t,e,"source",m,a),s.drawText(t,e,"target",m,a))):s.drawText(t,e,i,m,a),r&&t.translate(g.x1,g.y1)};rp.getFontCache=function(t){var e;this.fontCaches=this.fontCaches||[];for(var r=0;r2&&arguments[2]!==void 0?arguments[2]:!0,n=e.pstyle("font-style").strValue,i=e.pstyle("font-size").pfValue+"px",a=e.pstyle("font-family").strValue,s=e.pstyle("font-weight").strValue,l=r?e.effectiveOpacity()*e.pstyle("text-opacity").value:1,u=e.pstyle("text-outline-opacity").value*l,h=e.pstyle("color").value,f=e.pstyle("text-outline-color").value;t.font=n+" "+s+" "+i+" "+a,t.lineJoin="round",this.colorFillStyle(t,h[0],h[1],h[2],l),this.colorStrokeStyle(t,f[0],f[1],f[2],u)};o(FP,"roundRect");rp.getTextAngle=function(t,e){var r,n=t._private,i=n.rscratch,a=e?e+"-":"",s=t.pstyle(a+"text-rotation"),l=Ql(i,"labelAngle",e);return s.strValue==="autorotate"?r=t.isEdge()?l:0:s.strValue==="none"?r=0:r=s.pfValue,r};rp.drawText=function(t,e,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=e._private,s=a.rscratch,l=i?e.effectiveOpacity():1;if(!(i&&(l===0||e.pstyle("text-opacity").value===0))){r==="main"&&(r=null);var u=Ql(s,"labelX",r),h=Ql(s,"labelY",r),f,d,p=this.getLabelText(e,r);if(p!=null&&p!==""&&!isNaN(u)&&!isNaN(h)){this.setupTextStyle(t,e,i);var m=r?r+"-":"",g=Ql(s,"labelWidth",r),y=Ql(s,"labelHeight",r),v=e.pstyle(m+"text-margin-x").pfValue,x=e.pstyle(m+"text-margin-y").pfValue,b=e.isEdge(),w=e.pstyle("text-halign").value,_=e.pstyle("text-valign").value;b&&(w="center",_="center"),u+=v,h+=x;var T;switch(n?T=this.getTextAngle(e,r):T=0,T!==0&&(f=u,d=h,t.translate(f,d),t.rotate(T),u=0,h=0),_){case"top":break;case"center":h+=y/2;break;case"bottom":h+=y;break}var E=e.pstyle("text-background-opacity").value,L=e.pstyle("text-border-opacity").value,S=e.pstyle("text-border-width").pfValue,A=e.pstyle("text-background-padding").pfValue,I=e.pstyle("text-background-shape").strValue,D=I.indexOf("round")===0,k=2;if(E>0||S>0&&L>0){var R=u-A;switch(w){case"left":R-=g;break;case"center":R-=g/2;break}var C=h-y-A,O=g+2*A,N=y+2*A;if(E>0){var P=t.fillStyle,F=e.pstyle("text-background-color").value;t.fillStyle="rgba("+F[0]+","+F[1]+","+F[2]+","+E*l+")",D?FP(t,R,C,O,N,k):t.fillRect(R,C,O,N),t.fillStyle=P}if(S>0&&L>0){var B=t.strokeStyle,G=t.lineWidth,z=e.pstyle("text-border-color").value,W=e.pstyle("text-border-style").value;if(t.strokeStyle="rgba("+z[0]+","+z[1]+","+z[2]+","+L*l+")",t.lineWidth=S,t.setLineDash)switch(W){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash([4,2]);break;case"double":t.lineWidth=S/4,t.setLineDash([]);break;case"solid":t.setLineDash([]);break}if(D?FP(t,R,C,O,N,k,"stroke"):t.strokeRect(R,C,O,N),W==="double"){var Z=S/2;D?FP(t,R+Z,C+Z,O-Z*2,N-Z*2,k,"stroke"):t.strokeRect(R+Z,C+Z,O-Z*2,N-Z*2)}t.setLineDash&&t.setLineDash([]),t.lineWidth=G,t.strokeStyle=B}}var j=2*e.pstyle("text-outline-width").pfValue;if(j>0&&(t.lineWidth=j),e.pstyle("text-wrap").value==="wrap"){var oe=Ql(s,"labelWrapCachedLines",r),K=Ql(s,"labelLineHeight",r),ee=g/2,J=this.getLabelJustification(e);switch(J==="auto"||(w==="left"?J==="left"?u+=-g:J==="center"&&(u+=-ee):w==="center"?J==="left"?u+=-ee:J==="right"&&(u+=ee):w==="right"&&(J==="center"?u+=ee:J==="right"&&(u+=g))),_){case"top":h-=(oe.length-1)*K;break;case"center":case"bottom":h-=(oe.length-1)*K;break}for(var H=0;H0&&t.strokeText(oe[H],u,h),t.fillText(oe[H],u,h),h+=K}else j>0&&t.strokeText(p,u,h),t.fillText(p,u,h);T!==0&&(t.rotate(-T),t.translate(-f,-d))}}};I1={};I1.drawNode=function(t,e,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,l,u,h=e._private,f=h.rscratch,d=e.position();if(!(!xt(d.x)||!xt(d.y))&&!(a&&!e.visible())){var p=a?e.effectiveOpacity():1,m=s.usePaths(),g,y=!1,v=e.padding();l=e.width()+2*v,u=e.height()+2*v;var x;r&&(x=r,t.translate(-x.x1,-x.y1));for(var b=e.pstyle("background-image"),w=b.value,_=new Array(w.length),T=new Array(w.length),E=0,L=0;L0&&arguments[0]!==void 0?arguments[0]:R;s.eleFillStyle(t,e,ve)},"setupShapeColor"),H=o(function(){var ve=arguments.length>0&&arguments[0]!==void 0?arguments[0]:z;s.colorStrokeStyle(t,C[0],C[1],C[2],ve)},"setupBorderColor"),q=o(function(){var ve=arguments.length>0&&arguments[0]!==void 0?arguments[0]:oe;s.colorStrokeStyle(t,Z[0],Z[1],Z[2],ve)},"setupOutlineColor"),Q=o(function(ve,U,Te,ie){var Ee=s.nodePathCache=s.nodePathCache||[],Ae=rge(Te==="polygon"?Te+","+ie.join(","):Te,""+U,""+ve,""+ee),Ge=Ee[Ae],Be,me=!1;return Ge!=null?(Be=Ge,me=!0,f.pathCache=Be):(Be=new Path2D,Ee[Ae]=f.pathCache=Be),{path:Be,cacheHit:me}},"getPath"),ae=e.pstyle("shape").strValue,ue=e.pstyle("shape-polygon-points").pfValue;if(m){t.translate(d.x,d.y);var ce=Q(l,u,ae,ue);g=ce.path,y=ce.cacheHit}var te=o(function(){if(!y){var ve=d;m&&(ve={x:0,y:0}),s.nodeShapes[s.getNodeShape(e)].draw(g||t,ve.x,ve.y,l,u,ee,f)}m?t.fill(g):t.fill()},"drawShape"),Ne=o(function(){for(var ve=arguments.length>0&&arguments[0]!==void 0?arguments[0]:p,U=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,Te=h.backgrounding,ie=0,Ee=0;Ee0&&arguments[0]!==void 0?arguments[0]:!1,U=arguments.length>1&&arguments[1]!==void 0?arguments[1]:p;s.hasPie(e)&&(s.drawPie(t,e,U),ve&&(m||s.nodeShapes[s.getNodeShape(e)].draw(t,d.x,d.y,l,u,ee,f)))},"drawPie"),ke=o(function(){var ve=arguments.length>0&&arguments[0]!==void 0?arguments[0]:p,U=(D>0?D:-D)*ve,Te=D>0?0:255;D!==0&&(s.colorFillStyle(t,Te,Te,Te,U),m?t.fill(g):t.fill())},"darken"),Re=o(function(){if(k>0){if(t.lineWidth=k,t.lineCap=P,t.lineJoin=N,t.setLineDash)switch(O){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash(B),t.lineDashOffset=G;break;case"solid":case"double":t.setLineDash([]);break}if(F!=="center"){if(t.save(),t.lineWidth*=2,F==="inside")m?t.clip(g):t.clip();else{var ve=new Path2D;ve.rect(-l/2-k,-u/2-k,l+2*k,u+2*k),ve.addPath(g),t.clip(ve,"evenodd")}m?t.stroke(g):t.stroke(),t.restore()}else m?t.stroke(g):t.stroke();if(O==="double"){t.lineWidth=k/3;var U=t.globalCompositeOperation;t.globalCompositeOperation="destination-out",m?t.stroke(g):t.stroke(),t.globalCompositeOperation=U}t.setLineDash&&t.setLineDash([])}},"drawBorder"),Ce=o(function(){if(W>0){if(t.lineWidth=W,t.lineCap="butt",t.setLineDash)switch(j){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash([4,2]);break;case"solid":case"double":t.setLineDash([]);break}var ve=d;m&&(ve={x:0,y:0});var U=s.getNodeShape(e),Te=k;F==="inside"&&(Te=0),F==="outside"&&(Te*=2);var ie=(l+Te+(W+K))/l,Ee=(u+Te+(W+K))/u,Ae=l*ie,Ge=u*Ee,Be=s.nodeShapes[U].points,me;if(m){var He=Q(Ae,Ge,U,Be);me=He.path}if(U==="ellipse")s.drawEllipsePath(me||t,ve.x,ve.y,Ae,Ge);else if(["round-diamond","round-heptagon","round-hexagon","round-octagon","round-pentagon","round-polygon","round-triangle","round-tag"].includes(U)){var Oe=0,et=0,bt=0;U==="round-diamond"?Oe=(Te+K+W)*1.4:U==="round-heptagon"?(Oe=(Te+K+W)*1.075,bt=-(Te/2+K+W)/35):U==="round-hexagon"?Oe=(Te+K+W)*1.12:U==="round-pentagon"?(Oe=(Te+K+W)*1.13,bt=-(Te/2+K+W)/15):U==="round-tag"?(Oe=(Te+K+W)*1.12,et=(Te/2+W+K)*.07):U==="round-triangle"&&(Oe=(Te+K+W)*(Math.PI/2),bt=-(Te+K/2+W)/Math.PI),Oe!==0&&(ie=(l+Oe)/l,Ae=l*ie,["round-hexagon","round-tag"].includes(U)||(Ee=(u+Oe)/u,Ge=u*Ee)),ee=ee==="auto"?dge(Ae,Ge):ee;for(var kt=Ae/2,vt=Ge/2,rt=ee+(Te+W+K)/2,yt=new Array(Be.length/2),Ue=new Array(Be.length/2),tt=0;tt0){if(i=i||n.position(),a==null||s==null){var m=n.padding();a=n.width()+2*m,s=n.height()+2*m}l.colorFillStyle(r,f[0],f[1],f[2],h),l.nodeShapes[d].draw(r,i.x,i.y,a+u*2,s+u*2,p),r.fill()}}}},"drawNodeOverlayUnderlay");I1.drawNodeOverlay=g1e("overlay");I1.drawNodeUnderlay=g1e("underlay");I1.hasPie=function(t){return t=t[0],t._private.hasPie};I1.drawPie=function(t,e,r,n){e=e[0],n=n||e.position();var i=e.cy().style(),a=e.pstyle("pie-size"),s=n.x,l=n.y,u=e.width(),h=e.height(),f=Math.min(u,h)/2,d=0,p=this.usePaths();p&&(s=0,l=0),a.units==="%"?f=f*a.pfValue:a.pfValue!==void 0&&(f=a.pfValue/2);for(var m=1;m<=i.pieBackgroundN;m++){var g=e.pstyle("pie-"+m+"-background-size").value,y=e.pstyle("pie-"+m+"-background-color").value,v=e.pstyle("pie-"+m+"-background-opacity").value*r,x=g/100;x+d>1&&(x=1-d);var b=1.5*Math.PI+2*Math.PI*d,w=2*Math.PI*x,_=b+w;g===0||d>=1||d+x>1||(t.beginPath(),t.moveTo(s,l),t.arc(s,l,f,b,_),t.closePath(),this.colorFillStyle(t,y[0],y[1],y[2],v),t.fill(),d+=x)}};To={},Uet=100;To.getPixelRatio=function(){var t=this.data.contexts[0];if(this.forcedPixelRatio!=null)return this.forcedPixelRatio;var e=this.cy.window(),r=t.backingStorePixelRatio||t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1;return(e.devicePixelRatio||1)/r};To.paintCache=function(t){for(var e=this.paintCaches=this.paintCaches||[],r=!0,n,i=0;is.minMbLowQualFrames&&(s.motionBlurPxRatio=s.mbPxRBlurry)),s.clearingMotionBlur&&(s.motionBlurPxRatio=1),s.textureDrawLastFrame&&!d&&(f[s.NODE]=!0,f[s.SELECT_BOX]=!0);var b=u.style(),w=u.zoom(),_=i!==void 0?i:w,T=u.pan(),E={x:T.x,y:T.y},L={zoom:w,pan:{x:T.x,y:T.y}},S=s.prevViewport,A=S===void 0||L.zoom!==S.zoom||L.pan.x!==S.pan.x||L.pan.y!==S.pan.y;!A&&!(y&&!g)&&(s.motionBlurPxRatio=1),a&&(E=a),_*=l,E.x*=l,E.y*=l;var I=s.getCachedZSortedEles();function D(ce,te,Ne,se,ke){var Re=ce.globalCompositeOperation;ce.globalCompositeOperation="destination-out",s.colorFillStyle(ce,255,255,255,s.motionBlurTransparency),ce.fillRect(te,Ne,se,ke),ce.globalCompositeOperation=Re}o(D,"mbclear");function k(ce,te){var Ne,se,ke,Re;!s.clearingMotionBlur&&(ce===h.bufferContexts[s.MOTIONBLUR_BUFFER_NODE]||ce===h.bufferContexts[s.MOTIONBLUR_BUFFER_DRAG])?(Ne={x:T.x*m,y:T.y*m},se=w*m,ke=s.canvasWidth*m,Re=s.canvasHeight*m):(Ne=E,se=_,ke=s.canvasWidth,Re=s.canvasHeight),ce.setTransform(1,0,0,1,0,0),te==="motionBlur"?D(ce,0,0,ke,Re):!e&&(te===void 0||te)&&ce.clearRect(0,0,ke,Re),r||(ce.translate(Ne.x,Ne.y),ce.scale(se,se)),a&&ce.translate(a.x,a.y),i&&ce.scale(i,i)}if(o(k,"setContextTransform"),d||(s.textureDrawLastFrame=!1),d){if(s.textureDrawLastFrame=!0,!s.textureCache){s.textureCache={},s.textureCache.bb=u.mutableElements().boundingBox(),s.textureCache.texture=s.data.bufferCanvases[s.TEXTURE_BUFFER];var R=s.data.bufferContexts[s.TEXTURE_BUFFER];R.setTransform(1,0,0,1,0,0),R.clearRect(0,0,s.canvasWidth*s.textureMult,s.canvasHeight*s.textureMult),s.render({forcedContext:R,drawOnlyNodeLayer:!0,forcedPxRatio:l*s.textureMult});var L=s.textureCache.viewport={zoom:u.zoom(),pan:u.pan(),width:s.canvasWidth,height:s.canvasHeight};L.mpan={x:(0-L.pan.x)/L.zoom,y:(0-L.pan.y)/L.zoom}}f[s.DRAG]=!1,f[s.NODE]=!1;var C=h.contexts[s.NODE],O=s.textureCache.texture,L=s.textureCache.viewport;C.setTransform(1,0,0,1,0,0),p?D(C,0,0,L.width,L.height):C.clearRect(0,0,L.width,L.height);var N=b.core("outside-texture-bg-color").value,P=b.core("outside-texture-bg-opacity").value;s.colorFillStyle(C,N[0],N[1],N[2],P),C.fillRect(0,0,L.width,L.height);var w=u.zoom();k(C,!1),C.clearRect(L.mpan.x,L.mpan.y,L.width/L.zoom/l,L.height/L.zoom/l),C.drawImage(O,L.mpan.x,L.mpan.y,L.width/L.zoom/l,L.height/L.zoom/l)}else s.textureOnViewport&&!e&&(s.textureCache=null);var F=u.extent(),B=s.pinching||s.hoverData.dragging||s.swipePanning||s.data.wheelZooming||s.hoverData.draggingEles||s.cy.animated(),G=s.hideEdgesOnViewport&&B,z=[];if(z[s.NODE]=!f[s.NODE]&&p&&!s.clearedForMotionBlur[s.NODE]||s.clearingMotionBlur,z[s.NODE]&&(s.clearedForMotionBlur[s.NODE]=!0),z[s.DRAG]=!f[s.DRAG]&&p&&!s.clearedForMotionBlur[s.DRAG]||s.clearingMotionBlur,z[s.DRAG]&&(s.clearedForMotionBlur[s.DRAG]=!0),f[s.NODE]||r||n||z[s.NODE]){var W=p&&!z[s.NODE]&&m!==1,C=e||(W?s.data.bufferContexts[s.MOTIONBLUR_BUFFER_NODE]:h.contexts[s.NODE]),Z=p&&!W?"motionBlur":void 0;k(C,Z),G?s.drawCachedNodes(C,I.nondrag,l,F):s.drawLayeredElements(C,I.nondrag,l,F),s.debug&&s.drawDebugPoints(C,I.nondrag),!r&&!p&&(f[s.NODE]=!1)}if(!n&&(f[s.DRAG]||r||z[s.DRAG])){var W=p&&!z[s.DRAG]&&m!==1,C=e||(W?s.data.bufferContexts[s.MOTIONBLUR_BUFFER_DRAG]:h.contexts[s.DRAG]);k(C,p&&!W?"motionBlur":void 0),G?s.drawCachedNodes(C,I.drag,l,F):s.drawCachedElements(C,I.drag,l,F),s.debug&&s.drawDebugPoints(C,I.drag),!r&&!p&&(f[s.DRAG]=!1)}if(s.showFps||!n&&f[s.SELECT_BOX]&&!r){var C=e||h.contexts[s.SELECT_BOX];if(k(C),s.selection[4]==1&&(s.hoverData.selecting||s.touchData.selecting)){var w=s.cy.zoom(),j=b.core("selection-box-border-width").value/w;C.lineWidth=j,C.fillStyle="rgba("+b.core("selection-box-color").value[0]+","+b.core("selection-box-color").value[1]+","+b.core("selection-box-color").value[2]+","+b.core("selection-box-opacity").value+")",C.fillRect(s.selection[0],s.selection[1],s.selection[2]-s.selection[0],s.selection[3]-s.selection[1]),j>0&&(C.strokeStyle="rgba("+b.core("selection-box-border-color").value[0]+","+b.core("selection-box-border-color").value[1]+","+b.core("selection-box-border-color").value[2]+","+b.core("selection-box-opacity").value+")",C.strokeRect(s.selection[0],s.selection[1],s.selection[2]-s.selection[0],s.selection[3]-s.selection[1]))}if(h.bgActivePosistion&&!s.hoverData.selecting){var w=s.cy.zoom(),oe=h.bgActivePosistion;C.fillStyle="rgba("+b.core("active-bg-color").value[0]+","+b.core("active-bg-color").value[1]+","+b.core("active-bg-color").value[2]+","+b.core("active-bg-opacity").value+")",C.beginPath(),C.arc(oe.x,oe.y,b.core("active-bg-size").pfValue/w,0,2*Math.PI),C.fill()}var K=s.lastRedrawTime;if(s.showFps&&K){K=Math.round(K);var ee=Math.round(1e3/K);C.setTransform(1,0,0,1,0,0),C.fillStyle="rgba(255, 0, 0, 0.75)",C.strokeStyle="rgba(255, 0, 0, 0.75)",C.lineWidth=1,C.fillText("1 frame = "+K+" ms = "+ee+" fps",0,20);var J=60;C.strokeRect(0,30,250,20),C.fillRect(0,30,250*Math.min(ee/J,1),20)}r||(f[s.SELECT_BOX]=!1)}if(p&&m!==1){var H=h.contexts[s.NODE],q=s.data.bufferCanvases[s.MOTIONBLUR_BUFFER_NODE],Q=h.contexts[s.DRAG],ae=s.data.bufferCanvases[s.MOTIONBLUR_BUFFER_DRAG],ue=o(function(te,Ne,se){te.setTransform(1,0,0,1,0,0),se||!x?te.clearRect(0,0,s.canvasWidth,s.canvasHeight):D(te,0,0,s.canvasWidth,s.canvasHeight);var ke=m;te.drawImage(Ne,0,0,s.canvasWidth*ke,s.canvasHeight*ke,0,0,s.canvasWidth,s.canvasHeight)},"drawMotionBlur");(f[s.NODE]||z[s.NODE])&&(ue(H,q,z[s.NODE]),f[s.NODE]=!1),(f[s.DRAG]||z[s.DRAG])&&(ue(Q,ae,z[s.DRAG]),f[s.DRAG]=!1)}s.prevViewport=L,s.clearingMotionBlur&&(s.clearingMotionBlur=!1,s.motionBlurCleared=!0,s.motionBlur=!0),p&&(s.motionBlurTimeout=setTimeout(function(){s.motionBlurTimeout=null,s.clearedForMotionBlur[s.NODE]=!1,s.clearedForMotionBlur[s.DRAG]=!1,s.motionBlur=!1,s.clearingMotionBlur=!d,s.mbFrames=0,f[s.NODE]=!0,f[s.DRAG]=!0,s.redraw()},Uet)),e||u.emit("render")};Gf={};Gf.drawPolygonPath=function(t,e,r,n,i,a){var s=n/2,l=i/2;t.beginPath&&t.beginPath(),t.moveTo(e+s*a[0],r+l*a[1]);for(var u=1;u0&&s>0){m.clearRect(0,0,a,s),m.globalCompositeOperation="source-over";var g=this.getCachedZSortedEles();if(t.full)m.translate(-n.x1*h,-n.y1*h),m.scale(h,h),this.drawElements(m,g),m.scale(1/h,1/h),m.translate(n.x1*h,n.y1*h);else{var y=e.pan(),v={x:y.x*h,y:y.y*h};h*=e.zoom(),m.translate(v.x,v.y),m.scale(h,h),this.drawElements(m,g),m.scale(1/h,1/h),m.translate(-v.x,-v.y)}t.bg&&(m.globalCompositeOperation="destination-over",m.fillStyle=t.bg,m.rect(0,0,a,s),m.fill())}return p};o(Het,"b64ToBlob");o(Gme,"b64UriToB64");o(v1e,"output");wb.png=function(t){return v1e(t,this.bufferCanvasImage(t),"image/png")};wb.jpg=function(t){return v1e(t,this.bufferCanvasImage(t),"image/jpeg")};x1e={};x1e.nodeShapeImpl=function(t,e,r,n,i,a,s,l){switch(t){case"ellipse":return this.drawEllipsePath(e,r,n,i,a);case"polygon":return this.drawPolygonPath(e,r,n,i,a,s);case"round-polygon":return this.drawRoundPolygonPath(e,r,n,i,a,s,l);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(e,r,n,i,a,l);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(e,r,n,i,a,s,l);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(e,r,n,i,a,l);case"barrel":return this.drawBarrelPath(e,r,n,i,a)}};Wet=b1e,Kr=b1e.prototype;Kr.CANVAS_LAYERS=3;Kr.SELECT_BOX=0;Kr.DRAG=1;Kr.NODE=2;Kr.BUFFER_COUNT=3;Kr.TEXTURE_BUFFER=0;Kr.MOTIONBLUR_BUFFER_NODE=1;Kr.MOTIONBLUR_BUFFER_DRAG=2;o(b1e,"CanvasRenderer");Kr.redrawHint=function(t,e){var r=this;switch(t){case"eles":r.data.canvasNeedsRedraw[Kr.NODE]=e;break;case"drag":r.data.canvasNeedsRedraw[Kr.DRAG]=e;break;case"select":r.data.canvasNeedsRedraw[Kr.SELECT_BOX]=e;break}};Yet=typeof Path2D<"u";Kr.path2dEnabled=function(t){if(t===void 0)return this.pathsEnabled;this.pathsEnabled=!!t};Kr.usePaths=function(){return Yet&&this.pathsEnabled};Kr.setImgSmoothing=function(t,e){t.imageSmoothingEnabled!=null?t.imageSmoothingEnabled=e:(t.webkitImageSmoothingEnabled=e,t.mozImageSmoothingEnabled=e,t.msImageSmoothingEnabled=e)};Kr.getImgSmoothing=function(t){return t.imageSmoothingEnabled!=null?t.imageSmoothingEnabled:t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled};Kr.makeOffscreenCanvas=function(t,e){var r;if((typeof OffscreenCanvas>"u"?"undefined":Ki(OffscreenCanvas))!=="undefined")r=new OffscreenCanvas(t,e);else{var n=this.cy.window(),i=n.document;r=i.createElement("canvas"),r.width=t,r.height=e}return r};[p1e,ru,lh,EB,rp,I1,To,Gf,wb,x1e].forEach(function(t){ir(Kr,t)});qet=[{name:"null",impl:t1e},{name:"base",impl:h1e},{name:"canvas",impl:Wet}],Xet=[{type:"layout",extensions:ZJe},{type:"renderer",extensions:qet}],w1e={},T1e={};o(k1e,"setExtension");o(E1e,"getExtension");o(jet,"setModule");o(Ket,"getModule");eB=o(function(){if(arguments.length===2)return E1e.apply(null,arguments);if(arguments.length===3)return k1e.apply(null,arguments);if(arguments.length===4)return Ket.apply(null,arguments);if(arguments.length===5)return jet.apply(null,arguments);di("Invalid extension access syntax")},"extension");fb.prototype.extension=eB;Xet.forEach(function(t){t.extensions.forEach(function(e){k1e(t.type,e.name,e.impl)})});S1e=o(function t(){if(!(this instanceof t))return new t;this.length=0},"Stylesheet"),ep=S1e.prototype;ep.instanceString=function(){return"stylesheet"};ep.selector=function(t){var e=this.length++;return this[e]={selector:t,properties:[]},this};ep.css=function(t,e){var r=this.length-1;if(Zt(t))this[r].properties.push({name:t,value:e});else if(Ur(t))for(var n=t,i=Object.keys(n),a=0;a{"use strict";o(function(e,r){typeof Tb=="object"&&typeof CB=="object"?CB.exports=r():typeof define=="function"&&define.amd?define([],r):typeof Tb=="object"?Tb.layoutBase=r():e.layoutBase=r()},"webpackUniversalModuleDefinition")(Tb,function(){return function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return o(r,"__webpack_require__"),r.m=t,r.c=e,r.i=function(n){return n},r.d=function(n,i,a){r.o(n,i)||Object.defineProperty(n,i,{configurable:!1,enumerable:!0,get:a})},r.n=function(n){var i=n&&n.__esModule?o(function(){return n.default},"getDefault"):o(function(){return n},"getModuleExports");return r.d(i,"a",i),i},r.o=function(n,i){return Object.prototype.hasOwnProperty.call(n,i)},r.p="",r(r.s=26)}([function(t,e,r){"use strict";function n(){}o(n,"LayoutConstants"),n.QUALITY=1,n.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,n.DEFAULT_INCREMENTAL=!1,n.DEFAULT_ANIMATION_ON_LAYOUT=!0,n.DEFAULT_ANIMATION_DURING_LAYOUT=!1,n.DEFAULT_ANIMATION_PERIOD=50,n.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,n.DEFAULT_GRAPH_MARGIN=15,n.NODE_DIMENSIONS_INCLUDE_LABELS=!1,n.SIMPLE_NODE_SIZE=40,n.SIMPLE_NODE_HALF_SIZE=n.SIMPLE_NODE_SIZE/2,n.EMPTY_COMPOUND_NODE_SIZE=40,n.MIN_EDGE_LENGTH=1,n.WORLD_BOUNDARY=1e6,n.INITIAL_WORLD_BOUNDARY=n.WORLD_BOUNDARY/1e3,n.WORLD_CENTER_X=1200,n.WORLD_CENTER_Y=900,t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(8),a=r(9);function s(u,h,f){n.call(this,f),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=f,this.bendpoints=[],this.source=u,this.target=h}o(s,"LEdge"),s.prototype=Object.create(n.prototype);for(var l in n)s[l]=n[l];s.prototype.getSource=function(){return this.source},s.prototype.getTarget=function(){return this.target},s.prototype.isInterGraph=function(){return this.isInterGraph},s.prototype.getLength=function(){return this.length},s.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},s.prototype.getBendpoints=function(){return this.bendpoints},s.prototype.getLca=function(){return this.lca},s.prototype.getSourceInLca=function(){return this.sourceInLca},s.prototype.getTargetInLca=function(){return this.targetInLca},s.prototype.getOtherEnd=function(u){if(this.source===u)return this.target;if(this.target===u)return this.source;throw"Node is not incident with this edge"},s.prototype.getOtherEndInGraph=function(u,h){for(var f=this.getOtherEnd(u),d=h.getGraphManager().getRoot();;){if(f.getOwner()==h)return f;if(f.getOwner()==d)break;f=f.getOwner().getParent()}return null},s.prototype.updateLength=function(){var u=new Array(4);this.isOverlapingSourceAndTarget=i.getIntersection(this.target.getRect(),this.source.getRect(),u),this.isOverlapingSourceAndTarget||(this.lengthX=u[0]-u[2],this.lengthY=u[1]-u[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},s.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},t.exports=s},function(t,e,r){"use strict";function n(i){this.vGraphObject=i}o(n,"LGraphObject"),t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(13),s=r(0),l=r(16),u=r(4);function h(d,p,m,g){m==null&&g==null&&(g=p),n.call(this,g),d.graphManager!=null&&(d=d.graphManager),this.estimatedSize=i.MIN_VALUE,this.inclusionTreeDepth=i.MAX_VALUE,this.vGraphObject=g,this.edges=[],this.graphManager=d,m!=null&&p!=null?this.rect=new a(p.x,p.y,m.width,m.height):this.rect=new a}o(h,"LNode"),h.prototype=Object.create(n.prototype);for(var f in n)h[f]=n[f];h.prototype.getEdges=function(){return this.edges},h.prototype.getChild=function(){return this.child},h.prototype.getOwner=function(){return this.owner},h.prototype.getWidth=function(){return this.rect.width},h.prototype.setWidth=function(d){this.rect.width=d},h.prototype.getHeight=function(){return this.rect.height},h.prototype.setHeight=function(d){this.rect.height=d},h.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},h.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},h.prototype.getCenter=function(){return new u(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},h.prototype.getLocation=function(){return new u(this.rect.x,this.rect.y)},h.prototype.getRect=function(){return this.rect},h.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},h.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},h.prototype.setRect=function(d,p){this.rect.x=d.x,this.rect.y=d.y,this.rect.width=p.width,this.rect.height=p.height},h.prototype.setCenter=function(d,p){this.rect.x=d-this.rect.width/2,this.rect.y=p-this.rect.height/2},h.prototype.setLocation=function(d,p){this.rect.x=d,this.rect.y=p},h.prototype.moveBy=function(d,p){this.rect.x+=d,this.rect.y+=p},h.prototype.getEdgeListToNode=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(y.target==d){if(y.source!=g)throw"Incorrect edge source!";p.push(y)}}),p},h.prototype.getEdgesBetween=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(!(y.source==g||y.target==g))throw"Incorrect edge source and/or target";(y.target==d||y.source==d)&&p.push(y)}),p},h.prototype.getNeighborsList=function(){var d=new Set,p=this;return p.edges.forEach(function(m){if(m.source==p)d.add(m.target);else{if(m.target!=p)throw"Incorrect incidency!";d.add(m.source)}}),d},h.prototype.withChildren=function(){var d=new Set,p,m;if(d.add(this),this.child!=null)for(var g=this.child.getNodes(),y=0;yp&&(this.rect.x-=(this.labelWidth-p)/2,this.setWidth(this.labelWidth)),this.labelHeight>m&&(this.labelPos=="center"?this.rect.y-=(this.labelHeight-m)/2:this.labelPos=="top"&&(this.rect.y-=this.labelHeight-m),this.setHeight(this.labelHeight))}}},h.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==i.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},h.prototype.transform=function(d){var p=this.rect.x;p>s.WORLD_BOUNDARY?p=s.WORLD_BOUNDARY:p<-s.WORLD_BOUNDARY&&(p=-s.WORLD_BOUNDARY);var m=this.rect.y;m>s.WORLD_BOUNDARY?m=s.WORLD_BOUNDARY:m<-s.WORLD_BOUNDARY&&(m=-s.WORLD_BOUNDARY);var g=new u(p,m),y=d.inverseTransformPoint(g);this.setLocation(y.x,y.y)},h.prototype.getLeft=function(){return this.rect.x},h.prototype.getRight=function(){return this.rect.x+this.rect.width},h.prototype.getTop=function(){return this.rect.y},h.prototype.getBottom=function(){return this.rect.y+this.rect.height},h.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},t.exports=h},function(t,e,r){"use strict";function n(i,a){i==null&&a==null?(this.x=0,this.y=0):(this.x=i,this.y=a)}o(n,"PointD"),n.prototype.getX=function(){return this.x},n.prototype.getY=function(){return this.y},n.prototype.setX=function(i){this.x=i},n.prototype.setY=function(i){this.y=i},n.prototype.getDifference=function(i){return new DimensionD(this.x-i.x,this.y-i.y)},n.prototype.getCopy=function(){return new n(this.x,this.y)},n.prototype.translate=function(i){return this.x+=i.width,this.y+=i.height,this},t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(0),s=r(6),l=r(3),u=r(1),h=r(13),f=r(12),d=r(11);function p(g,y,v){n.call(this,v),this.estimatedSize=i.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=g,y!=null&&y instanceof s?this.graphManager=y:y!=null&&y instanceof Layout&&(this.graphManager=y.graphManager)}o(p,"LGraph"),p.prototype=Object.create(n.prototype);for(var m in n)p[m]=n[m];p.prototype.getNodes=function(){return this.nodes},p.prototype.getEdges=function(){return this.edges},p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getParent=function(){return this.parent},p.prototype.getLeft=function(){return this.left},p.prototype.getRight=function(){return this.right},p.prototype.getTop=function(){return this.top},p.prototype.getBottom=function(){return this.bottom},p.prototype.isConnected=function(){return this.isConnected},p.prototype.add=function(g,y,v){if(y==null&&v==null){var x=g;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(x)>-1)throw"Node already in graph!";return x.owner=this,this.getNodes().push(x),x}else{var b=g;if(!(this.getNodes().indexOf(y)>-1&&this.getNodes().indexOf(v)>-1))throw"Source or target not in graph!";if(!(y.owner==v.owner&&y.owner==this))throw"Both owners must be this graph!";return y.owner!=v.owner?null:(b.source=y,b.target=v,b.isInterGraph=!1,this.getEdges().push(b),y.edges.push(b),v!=y&&v.edges.push(b),b)}},p.prototype.remove=function(g){var y=g;if(g instanceof l){if(y==null)throw"Node is null!";if(!(y.owner!=null&&y.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var v=y.edges.slice(),x,b=v.length,w=0;w-1&&E>-1))throw"Source and/or target doesn't know this edge!";x.source.edges.splice(T,1),x.target!=x.source&&x.target.edges.splice(E,1);var _=x.source.owner.getEdges().indexOf(x);if(_==-1)throw"Not in owner's edge list!";x.source.owner.getEdges().splice(_,1)}},p.prototype.updateLeftTop=function(){for(var g=i.MAX_VALUE,y=i.MAX_VALUE,v,x,b,w=this.getNodes(),_=w.length,T=0;T<_;T++){var E=w[T];v=E.getTop(),x=E.getLeft(),g>v&&(g=v),y>x&&(y=x)}return g==i.MAX_VALUE?null:(w[0].getParent().paddingLeft!=null?b=w[0].getParent().paddingLeft:b=this.margin,this.left=y-b,this.top=g-b,new f(this.left,this.top))},p.prototype.updateBounds=function(g){for(var y=i.MAX_VALUE,v=-i.MAX_VALUE,x=i.MAX_VALUE,b=-i.MAX_VALUE,w,_,T,E,L,S=this.nodes,A=S.length,I=0;Iw&&(y=w),v<_&&(v=_),x>T&&(x=T),bw&&(y=w),v<_&&(v=_),x>T&&(x=T),b=this.nodes.length){var A=0;v.forEach(function(I){I.owner==g&&A++}),A==this.nodes.length&&(this.isConnected=!0)}},t.exports=p},function(t,e,r){"use strict";var n,i=r(1);function a(s){n=r(5),this.layout=s,this.graphs=[],this.edges=[]}o(a,"LGraphManager"),a.prototype.addRoot=function(){var s=this.layout.newGraph(),l=this.layout.newNode(null),u=this.add(s,l);return this.setRootGraph(u),this.rootGraph},a.prototype.add=function(s,l,u,h,f){if(u==null&&h==null&&f==null){if(s==null)throw"Graph is null!";if(l==null)throw"Parent node is null!";if(this.graphs.indexOf(s)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(s),s.parent!=null)throw"Already has a parent!";if(l.child!=null)throw"Already has a child!";return s.parent=l,l.child=s,s}else{f=u,h=l,u=s;var d=h.getOwner(),p=f.getOwner();if(!(d!=null&&d.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(p!=null&&p.getGraphManager()==this))throw"Target not in this graph mgr!";if(d==p)return u.isInterGraph=!1,d.add(u,h,f);if(u.isInterGraph=!0,u.source=h,u.target=f,this.edges.indexOf(u)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(u),!(u.source!=null&&u.target!=null))throw"Edge source and/or target is null!";if(!(u.source.edges.indexOf(u)==-1&&u.target.edges.indexOf(u)==-1))throw"Edge already in source and/or target incidency list!";return u.source.edges.push(u),u.target.edges.push(u),u}},a.prototype.remove=function(s){if(s instanceof n){var l=s;if(l.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(l==this.rootGraph||l.parent!=null&&l.parent.graphManager==this))throw"Invalid parent node!";var u=[];u=u.concat(l.getEdges());for(var h,f=u.length,d=0;d=s.getRight()?l[0]+=Math.min(s.getX()-a.getX(),a.getRight()-s.getRight()):s.getX()<=a.getX()&&s.getRight()>=a.getRight()&&(l[0]+=Math.min(a.getX()-s.getX(),s.getRight()-a.getRight())),a.getY()<=s.getY()&&a.getBottom()>=s.getBottom()?l[1]+=Math.min(s.getY()-a.getY(),a.getBottom()-s.getBottom()):s.getY()<=a.getY()&&s.getBottom()>=a.getBottom()&&(l[1]+=Math.min(a.getY()-s.getY(),s.getBottom()-a.getBottom()));var f=Math.abs((s.getCenterY()-a.getCenterY())/(s.getCenterX()-a.getCenterX()));s.getCenterY()===a.getCenterY()&&s.getCenterX()===a.getCenterX()&&(f=1);var d=f*l[0],p=l[1]/f;l[0]d)return l[0]=u,l[1]=m,l[2]=f,l[3]=S,!1;if(hf)return l[0]=p,l[1]=h,l[2]=E,l[3]=d,!1;if(uf?(l[0]=y,l[1]=v,k=!0):(l[0]=g,l[1]=m,k=!0):C===N&&(u>f?(l[0]=p,l[1]=m,k=!0):(l[0]=x,l[1]=v,k=!0)),-O===N?f>u?(l[2]=L,l[3]=S,R=!0):(l[2]=E,l[3]=T,R=!0):O===N&&(f>u?(l[2]=_,l[3]=T,R=!0):(l[2]=A,l[3]=S,R=!0)),k&&R)return!1;if(u>f?h>d?(P=this.getCardinalDirection(C,N,4),F=this.getCardinalDirection(O,N,2)):(P=this.getCardinalDirection(-C,N,3),F=this.getCardinalDirection(-O,N,1)):h>d?(P=this.getCardinalDirection(-C,N,1),F=this.getCardinalDirection(-O,N,3)):(P=this.getCardinalDirection(C,N,2),F=this.getCardinalDirection(O,N,4)),!k)switch(P){case 1:G=m,B=u+-w/N,l[0]=B,l[1]=G;break;case 2:B=x,G=h+b*N,l[0]=B,l[1]=G;break;case 3:G=v,B=u+w/N,l[0]=B,l[1]=G;break;case 4:B=y,G=h+-b*N,l[0]=B,l[1]=G;break}if(!R)switch(F){case 1:W=T,z=f+-D/N,l[2]=z,l[3]=W;break;case 2:z=A,W=d+I*N,l[2]=z,l[3]=W;break;case 3:W=S,z=f+D/N,l[2]=z,l[3]=W;break;case 4:z=L,W=d+-I*N,l[2]=z,l[3]=W;break}}return!1},i.getCardinalDirection=function(a,s,l){return a>s?l:1+l%4},i.getIntersection=function(a,s,l,u){if(u==null)return this.getIntersection2(a,s,l);var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=void 0,b=void 0,w=void 0,_=void 0,T=void 0,E=void 0,L=void 0,S=void 0,A=void 0;return w=p-f,T=h-d,L=d*f-h*p,_=v-g,E=m-y,S=y*g-m*v,A=w*E-_*T,A===0?null:(x=(T*S-E*L)/A,b=(_*L-w*S)/A,new n(x,b))},i.angleOfVector=function(a,s,l,u){var h=void 0;return a!==l?(h=Math.atan((u-s)/(l-a)),l0?1:i<0?-1:0},n.floor=function(i){return i<0?Math.ceil(i):Math.floor(i)},n.ceil=function(i){return i<0?Math.floor(i):Math.ceil(i)},t.exports=n},function(t,e,r){"use strict";function n(){}o(n,"Integer"),n.MAX_VALUE=2147483647,n.MIN_VALUE=-2147483648,t.exports=n},function(t,e,r){"use strict";var n=function(){function h(f,d){for(var p=0;p"u"?"undefined":n(a);return a==null||s!="object"&&s!="function"},t.exports=i},function(t,e,r){"use strict";function n(m){if(Array.isArray(m)){for(var g=0,y=Array(m.length);g0&&g;){for(w.push(T[0]);w.length>0&&g;){var E=w[0];w.splice(0,1),b.add(E);for(var L=E.getEdges(),x=0;x-1&&T.splice(D,1)}b=new Set,_=new Map}}return m},p.prototype.createDummyNodesForBendpoints=function(m){for(var g=[],y=m.source,v=this.graphManager.calcLowestCommonAncestor(m.source,m.target),x=0;x0){for(var v=this.edgeToDummyNodes.get(y),x=0;x=0&&g.splice(S,1);var A=_.getNeighborsList();A.forEach(function(k){if(y.indexOf(k)<0){var R=v.get(k),C=R-1;C==1&&E.push(k),v.set(k,C)}})}y=y.concat(E),(g.length==1||g.length==2)&&(x=!0,b=g[0])}return b},p.prototype.setGraphManager=function(m){this.graphManager=m},t.exports=p},function(t,e,r){"use strict";function n(){}o(n,"RandomSeed"),n.seed=1,n.x=0,n.nextDouble=function(){return n.x=Math.sin(n.seed++)*1e4,n.x-Math.floor(n.x)},t.exports=n},function(t,e,r){"use strict";var n=r(4);function i(a,s){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}o(i,"Transform"),i.prototype.getWorldOrgX=function(){return this.lworldOrgX},i.prototype.setWorldOrgX=function(a){this.lworldOrgX=a},i.prototype.getWorldOrgY=function(){return this.lworldOrgY},i.prototype.setWorldOrgY=function(a){this.lworldOrgY=a},i.prototype.getWorldExtX=function(){return this.lworldExtX},i.prototype.setWorldExtX=function(a){this.lworldExtX=a},i.prototype.getWorldExtY=function(){return this.lworldExtY},i.prototype.setWorldExtY=function(a){this.lworldExtY=a},i.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},i.prototype.setDeviceOrgX=function(a){this.ldeviceOrgX=a},i.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},i.prototype.setDeviceOrgY=function(a){this.ldeviceOrgY=a},i.prototype.getDeviceExtX=function(){return this.ldeviceExtX},i.prototype.setDeviceExtX=function(a){this.ldeviceExtX=a},i.prototype.getDeviceExtY=function(){return this.ldeviceExtY},i.prototype.setDeviceExtY=function(a){this.ldeviceExtY=a},i.prototype.transformX=function(a){var s=0,l=this.lworldExtX;return l!=0&&(s=this.ldeviceOrgX+(a-this.lworldOrgX)*this.ldeviceExtX/l),s},i.prototype.transformY=function(a){var s=0,l=this.lworldExtY;return l!=0&&(s=this.ldeviceOrgY+(a-this.lworldOrgY)*this.ldeviceExtY/l),s},i.prototype.inverseTransformX=function(a){var s=0,l=this.ldeviceExtX;return l!=0&&(s=this.lworldOrgX+(a-this.ldeviceOrgX)*this.lworldExtX/l),s},i.prototype.inverseTransformY=function(a){var s=0,l=this.ldeviceExtY;return l!=0&&(s=this.lworldOrgY+(a-this.ldeviceOrgY)*this.lworldExtY/l),s},i.prototype.inverseTransformPoint=function(a){var s=new n(this.inverseTransformX(a.x),this.inverseTransformY(a.y));return s},t.exports=i},function(t,e,r){"use strict";function n(d){if(Array.isArray(d)){for(var p=0,m=Array(d.length);pa.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*a.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-a.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT_INCREMENTAL):(d>a.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(a.COOLING_ADAPTATION_FACTOR,1-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*(1-a.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},h.prototype.calcSpringForces=function(){for(var d=this.getAllEdges(),p,m=0;m0&&arguments[0]!==void 0?arguments[0]:!0,p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,m,g,y,v,x=this.getAllNodes(),b;if(this.useFRGridVariant)for(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&d&&this.updateGrid(),b=new Set,m=0;mw||b>w)&&(d.gravitationForceX=-this.gravityConstant*y,d.gravitationForceY=-this.gravityConstant*v)):(w=p.getEstimatedSize()*this.compoundGravityRangeFactor,(x>w||b>w)&&(d.gravitationForceX=-this.gravityConstant*y*this.compoundGravityConstant,d.gravitationForceY=-this.gravityConstant*v*this.compoundGravityConstant))},h.prototype.isConverged=function(){var d,p=!1;return this.totalIterations>this.maxIterations/3&&(p=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),d=this.totalDisplacement=x.length||w>=x[0].length)){for(var _=0;_h},"_defaultCompareFunction")}]),l}();t.exports=s},function(t,e,r){"use strict";var n=function(){function s(l,u){for(var h=0;h2&&arguments[2]!==void 0?arguments[2]:1,f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,d=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;i(this,s),this.sequence1=l,this.sequence2=u,this.match_score=h,this.mismatch_penalty=f,this.gap_penalty=d,this.iMax=l.length+1,this.jMax=u.length+1,this.grid=new Array(this.iMax);for(var p=0;p=0;l--){var u=this.listeners[l];u.event===a&&u.callback===s&&this.listeners.splice(l,1)}},i.emit=function(a,s){for(var l=0;l{"use strict";o(function(e,r){typeof kb=="object"&&typeof _B=="object"?_B.exports=r(AB()):typeof define=="function"&&define.amd?define(["layout-base"],r):typeof kb=="object"?kb.coseBase=r(AB()):e.coseBase=r(e.layoutBase)},"webpackUniversalModuleDefinition")(kb,function(t){return function(e){var r={};function n(i){if(r[i])return r[i].exports;var a=r[i]={i,l:!1,exports:{}};return e[i].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return o(n,"__webpack_require__"),n.m=e,n.c=r,n.i=function(i){return i},n.d=function(i,a,s){n.o(i,a)||Object.defineProperty(i,a,{configurable:!1,enumerable:!0,get:s})},n.n=function(i){var a=i&&i.__esModule?o(function(){return i.default},"getDefault"):o(function(){return i},"getModuleExports");return n.d(a,"a",a),a},n.o=function(i,a){return Object.prototype.hasOwnProperty.call(i,a)},n.p="",n(n.s=7)}([function(e,r){e.exports=t},function(e,r,n){"use strict";var i=n(0).FDLayoutConstants;function a(){}o(a,"CoSEConstants");for(var s in i)a[s]=i[s];a.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,a.DEFAULT_RADIAL_SEPARATION=i.DEFAULT_EDGE_LENGTH,a.DEFAULT_COMPONENT_SEPERATION=60,a.TILE=!0,a.TILING_PADDING_VERTICAL=10,a.TILING_PADDING_HORIZONTAL=10,a.TREE_REDUCTION_ON_INCREMENTAL=!1,e.exports=a},function(e,r,n){"use strict";var i=n(0).FDLayoutEdge;function a(l,u,h){i.call(this,l,u,h)}o(a,"CoSEEdge"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a},function(e,r,n){"use strict";var i=n(0).LGraph;function a(l,u,h){i.call(this,l,u,h)}o(a,"CoSEGraph"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a},function(e,r,n){"use strict";var i=n(0).LGraphManager;function a(l){i.call(this,l)}o(a,"CoSEGraphManager"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a},function(e,r,n){"use strict";var i=n(0).FDLayoutNode,a=n(0).IMath;function s(u,h,f,d){i.call(this,u,h,f,d)}o(s,"CoSENode"),s.prototype=Object.create(i.prototype);for(var l in i)s[l]=i[l];s.prototype.move=function(){var u=this.graphManager.getLayout();this.displacementX=u.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY=u.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren,Math.abs(this.displacementX)>u.coolingFactor*u.maxNodeDisplacement&&(this.displacementX=u.coolingFactor*u.maxNodeDisplacement*a.sign(this.displacementX)),Math.abs(this.displacementY)>u.coolingFactor*u.maxNodeDisplacement&&(this.displacementY=u.coolingFactor*u.maxNodeDisplacement*a.sign(this.displacementY)),this.child==null?this.moveBy(this.displacementX,this.displacementY):this.child.getNodes().length==0?this.moveBy(this.displacementX,this.displacementY):this.propogateDisplacementToChildren(this.displacementX,this.displacementY),u.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},s.prototype.propogateDisplacementToChildren=function(u,h){for(var f=this.getChild().getNodes(),d,p=0;p0)this.positionNodesRadially(T);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var E=new Set(this.getAllNodes()),L=this.nodesWithGravity.filter(function(S){return E.has(S)});this.graphManager.setAllNodesToApplyGravitation(L),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},w.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%f.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var T=new Set(this.getAllNodes()),E=this.nodesWithGravity.filter(function(A){return T.has(A)});this.graphManager.setAllNodesToApplyGravitation(E),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=f.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),this.coolingFactor=f.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var L=!this.isTreeGrowing&&!this.isGrowthFinished,S=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(L,S),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},w.prototype.getPositionsData=function(){for(var T=this.graphManager.getAllNodes(),E={},L=0;L1){var k;for(k=0;kS&&(S=Math.floor(D.y)),I=Math.floor(D.x+h.DEFAULT_COMPONENT_SEPERATION)}this.transform(new m(d.WORLD_CENTER_X-D.x/2,d.WORLD_CENTER_Y-D.y/2))},w.radialLayout=function(T,E,L){var S=Math.max(this.maxDiagonalInTree(T),h.DEFAULT_RADIAL_SEPARATION);w.branchRadialLayout(E,null,0,359,0,S);var A=x.calculateBounds(T),I=new b;I.setDeviceOrgX(A.getMinX()),I.setDeviceOrgY(A.getMinY()),I.setWorldOrgX(L.x),I.setWorldOrgY(L.y);for(var D=0;D1;){var Z=W[0];W.splice(0,1);var j=P.indexOf(Z);j>=0&&P.splice(j,1),G--,F--}E!=null?z=(P.indexOf(W[0])+1)%G:z=0;for(var oe=Math.abs(S-L)/F,K=z;B!=F;K=++K%G){var ee=P[K].getOtherEnd(T);if(ee!=E){var J=(L+B*oe)%360,H=(J+oe)%360;w.branchRadialLayout(ee,T,J,H,A+I,I),B++}}},w.maxDiagonalInTree=function(T){for(var E=y.MIN_VALUE,L=0;LE&&(E=A)}return E},w.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},w.prototype.groupZeroDegreeMembers=function(){var T=this,E={};this.memberGroups={},this.idToDummyNode={};for(var L=[],S=this.graphManager.getAllNodes(),A=0;A"u"&&(E[k]=[]),E[k]=E[k].concat(I)}Object.keys(E).forEach(function(R){if(E[R].length>1){var C="DummyCompound_"+R;T.memberGroups[C]=E[R];var O=E[R][0].getParent(),N=new l(T.graphManager);N.id=C,N.paddingLeft=O.paddingLeft||0,N.paddingRight=O.paddingRight||0,N.paddingBottom=O.paddingBottom||0,N.paddingTop=O.paddingTop||0,T.idToDummyNode[C]=N;var P=T.getGraphManager().add(T.newGraph(),N),F=O.getChild();F.add(N);for(var B=0;B=0;T--){var E=this.compoundOrder[T],L=E.id,S=E.paddingLeft,A=E.paddingTop;this.adjustLocations(this.tiledMemberPack[L],E.rect.x,E.rect.y,S,A)}},w.prototype.repopulateZeroDegreeMembers=function(){var T=this,E=this.tiledZeroDegreePack;Object.keys(E).forEach(function(L){var S=T.idToDummyNode[L],A=S.paddingLeft,I=S.paddingTop;T.adjustLocations(E[L],S.rect.x,S.rect.y,A,I)})},w.prototype.getToBeTiled=function(T){var E=T.id;if(this.toBeTiled[E]!=null)return this.toBeTiled[E];var L=T.getChild();if(L==null)return this.toBeTiled[E]=!1,!1;for(var S=L.getNodes(),A=0;A0)return this.toBeTiled[E]=!1,!1;if(I.getChild()==null){this.toBeTiled[I.id]=!1;continue}if(!this.getToBeTiled(I))return this.toBeTiled[E]=!1,!1}return this.toBeTiled[E]=!0,!0},w.prototype.getNodeDegree=function(T){for(var E=T.id,L=T.getEdges(),S=0,A=0;AR&&(R=O.rect.height)}L+=R+T.verticalPadding}},w.prototype.tileCompoundMembers=function(T,E){var L=this;this.tiledMemberPack=[],Object.keys(T).forEach(function(S){var A=E[S];L.tiledMemberPack[S]=L.tileNodes(T[S],A.paddingLeft+A.paddingRight),A.rect.width=L.tiledMemberPack[S].width,A.rect.height=L.tiledMemberPack[S].height})},w.prototype.tileNodes=function(T,E){var L=h.TILING_PADDING_VERTICAL,S=h.TILING_PADDING_HORIZONTAL,A={rows:[],rowWidth:[],rowHeight:[],width:0,height:E,verticalPadding:L,horizontalPadding:S};T.sort(function(k,R){return k.rect.width*k.rect.height>R.rect.width*R.rect.height?-1:k.rect.width*k.rect.height0&&(D+=T.horizontalPadding),T.rowWidth[L]=D,T.width0&&(k+=T.verticalPadding);var R=0;k>T.rowHeight[L]&&(R=T.rowHeight[L],T.rowHeight[L]=k,R=T.rowHeight[L]-R),T.height+=R,T.rows[L].push(E)},w.prototype.getShortestRowIndex=function(T){for(var E=-1,L=Number.MAX_VALUE,S=0;SL&&(E=S,L=T.rowWidth[S]);return E},w.prototype.canAddHorizontal=function(T,E,L){var S=this.getShortestRowIndex(T);if(S<0)return!0;var A=T.rowWidth[S];if(A+T.horizontalPadding+E<=T.width)return!0;var I=0;T.rowHeight[S]0&&(I=L+T.verticalPadding-T.rowHeight[S]);var D;T.width-A>=E+T.horizontalPadding?D=(T.height+I)/(A+E+T.horizontalPadding):D=(T.height+I)/T.width,I=L+T.verticalPadding;var k;return T.widthI&&E!=L){S.splice(-1,1),T.rows[L].push(A),T.rowWidth[E]=T.rowWidth[E]-I,T.rowWidth[L]=T.rowWidth[L]+I,T.width=T.rowWidth[instance.getLongestRowIndex(T)];for(var D=Number.MIN_VALUE,k=0;kD&&(D=S[k].height);E>0&&(D+=T.verticalPadding);var R=T.rowHeight[E]+T.rowHeight[L];T.rowHeight[E]=D,T.rowHeight[L]0)for(var F=A;F<=I;F++)P[0]+=this.grid[F][D-1].length+this.grid[F][D].length-1;if(I0)for(var F=D;F<=k;F++)P[3]+=this.grid[A-1][F].length+this.grid[A][F].length-1;for(var B=y.MAX_VALUE,G,z,W=0;W{"use strict";o(function(e,r){typeof Eb=="object"&&typeof DB=="object"?DB.exports=r(LB()):typeof define=="function"&&define.amd?define(["cose-base"],r):typeof Eb=="object"?Eb.cytoscapeCoseBilkent=r(LB()):e.cytoscapeCoseBilkent=r(e.coseBase)},"webpackUniversalModuleDefinition")(Eb,function(t){return function(e){var r={};function n(i){if(r[i])return r[i].exports;var a=r[i]={i,l:!1,exports:{}};return e[i].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return o(n,"__webpack_require__"),n.m=e,n.c=r,n.i=function(i){return i},n.d=function(i,a,s){n.o(i,a)||Object.defineProperty(i,a,{configurable:!1,enumerable:!0,get:s})},n.n=function(i){var a=i&&i.__esModule?o(function(){return i.default},"getDefault"):o(function(){return i},"getModuleExports");return n.d(a,"a",a),a},n.o=function(i,a){return Object.prototype.hasOwnProperty.call(i,a)},n.p="",n(n.s=1)}([function(e,r){e.exports=t},function(e,r,n){"use strict";var i=n(0).layoutBase.LayoutConstants,a=n(0).layoutBase.FDLayoutConstants,s=n(0).CoSEConstants,l=n(0).CoSELayout,u=n(0).CoSENode,h=n(0).layoutBase.PointD,f=n(0).layoutBase.DimensionD,d={ready:o(function(){},"ready"),stop:o(function(){},"stop"),quality:"default",nodeDimensionsIncludeLabels:!1,refresh:30,fit:!0,padding:10,randomize:!0,nodeRepulsion:4500,idealEdgeLength:50,edgeElasticity:.45,nestingFactor:.1,gravity:.25,numIter:2500,tile:!0,animate:"end",animationDuration:500,tilingPaddingVertical:10,tilingPaddingHorizontal:10,gravityRangeCompound:1.5,gravityCompound:1,gravityRange:3.8,initialEnergyOnIncremental:.5};function p(v,x){var b={};for(var w in v)b[w]=v[w];for(var w in x)b[w]=x[w];return b}o(p,"extend");function m(v){this.options=p(d,v),g(this.options)}o(m,"_CoSELayout");var g=o(function(x){x.nodeRepulsion!=null&&(s.DEFAULT_REPULSION_STRENGTH=a.DEFAULT_REPULSION_STRENGTH=x.nodeRepulsion),x.idealEdgeLength!=null&&(s.DEFAULT_EDGE_LENGTH=a.DEFAULT_EDGE_LENGTH=x.idealEdgeLength),x.edgeElasticity!=null&&(s.DEFAULT_SPRING_STRENGTH=a.DEFAULT_SPRING_STRENGTH=x.edgeElasticity),x.nestingFactor!=null&&(s.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=a.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=x.nestingFactor),x.gravity!=null&&(s.DEFAULT_GRAVITY_STRENGTH=a.DEFAULT_GRAVITY_STRENGTH=x.gravity),x.numIter!=null&&(s.MAX_ITERATIONS=a.MAX_ITERATIONS=x.numIter),x.gravityRange!=null&&(s.DEFAULT_GRAVITY_RANGE_FACTOR=a.DEFAULT_GRAVITY_RANGE_FACTOR=x.gravityRange),x.gravityCompound!=null&&(s.DEFAULT_COMPOUND_GRAVITY_STRENGTH=a.DEFAULT_COMPOUND_GRAVITY_STRENGTH=x.gravityCompound),x.gravityRangeCompound!=null&&(s.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=a.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=x.gravityRangeCompound),x.initialEnergyOnIncremental!=null&&(s.DEFAULT_COOLING_FACTOR_INCREMENTAL=a.DEFAULT_COOLING_FACTOR_INCREMENTAL=x.initialEnergyOnIncremental),x.quality=="draft"?i.QUALITY=0:x.quality=="proof"?i.QUALITY=2:i.QUALITY=1,s.NODE_DIMENSIONS_INCLUDE_LABELS=a.NODE_DIMENSIONS_INCLUDE_LABELS=i.NODE_DIMENSIONS_INCLUDE_LABELS=x.nodeDimensionsIncludeLabels,s.DEFAULT_INCREMENTAL=a.DEFAULT_INCREMENTAL=i.DEFAULT_INCREMENTAL=!x.randomize,s.ANIMATE=a.ANIMATE=i.ANIMATE=x.animate,s.TILE=x.tile,s.TILING_PADDING_VERTICAL=typeof x.tilingPaddingVertical=="function"?x.tilingPaddingVertical.call():x.tilingPaddingVertical,s.TILING_PADDING_HORIZONTAL=typeof x.tilingPaddingHorizontal=="function"?x.tilingPaddingHorizontal.call():x.tilingPaddingHorizontal},"getUserOptions");m.prototype.run=function(){var v,x,b=this.options,w=this.idToLNode={},_=this.layout=new l,T=this;T.stopped=!1,this.cy=this.options.cy,this.cy.trigger({type:"layoutstart",layout:this});var E=_.newGraphManager();this.gm=E;var L=this.options.eles.nodes(),S=this.options.eles.edges();this.root=E.addRoot(),this.processChildrenList(this.root,this.getTopMostNodes(L),_);for(var A=0;A0){var k;k=b.getGraphManager().add(b.newGraph(),L),this.processChildrenList(k,E,b)}}},m.prototype.stop=function(){return this.stopped=!0,this};var y=o(function(x){x("layout","cose-bilkent",m)},"register");typeof cytoscape<"u"&&y(cytoscape),e.exports=y}])})});function itt(t,e,r,n,i){return t.insert("polygon",":first-child").attr("points",n.map(function(a){return a.x+","+a.y}).join(" ")).attr("transform","translate("+(i.width-e)/2+", "+r+")")}var Zet,Jet,ett,ttt,rtt,ntt,att,stt,A1e,_1e,L1e=M(()=>{"use strict";Pl();hr();Zet=12,Jet=o(function(t,e,r,n){e.append("path").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("d",`M0 ${r.height-5} v${-r.height+2*5} q0,-5 5,-5 h${r.width-2*5} q5,0 5,5 v${r.height-5} H0 Z`),e.append("line").attr("class","node-line-"+n).attr("x1",0).attr("y1",r.height).attr("x2",r.width).attr("y2",r.height)},"defaultBkg"),ett=o(function(t,e,r){e.append("rect").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("height",r.height).attr("width",r.width)},"rectBkg"),ttt=o(function(t,e,r){let n=r.width,i=r.height,a=.15*n,s=.25*n,l=.35*n,u=.2*n;e.append("path").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("d",`M0 0 a${a},${a} 0 0,1 ${n*.25},${-1*n*.1} + a${l},${l} 1 0,1 ${n*.4},${-1*n*.1} + a${s},${s} 1 0,1 ${n*.35},${1*n*.2} + + a${a},${a} 1 0,1 ${n*.15},${1*i*.35} + a${u},${u} 1 0,1 ${-1*n*.15},${1*i*.65} + + a${s},${a} 1 0,1 ${-1*n*.25},${n*.15} + a${l},${l} 1 0,1 ${-1*n*.5},0 + a${a},${a} 1 0,1 ${-1*n*.25},${-1*n*.15} + + a${a},${a} 1 0,1 ${-1*n*.1},${-1*i*.35} + a${u},${u} 1 0,1 ${n*.1},${-1*i*.65} + + H0 V0 Z`)},"cloudBkg"),rtt=o(function(t,e,r){let n=r.width,i=r.height,a=.15*n;e.append("path").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("d",`M0 0 a${a},${a} 1 0,0 ${n*.25},${-1*i*.1} + a${a},${a} 1 0,0 ${n*.25},0 + a${a},${a} 1 0,0 ${n*.25},0 + a${a},${a} 1 0,0 ${n*.25},${1*i*.1} + + a${a},${a} 1 0,0 ${n*.15},${1*i*.33} + a${a*.8},${a*.8} 1 0,0 0,${1*i*.34} + a${a},${a} 1 0,0 ${-1*n*.15},${1*i*.33} + + a${a},${a} 1 0,0 ${-1*n*.25},${i*.15} + a${a},${a} 1 0,0 ${-1*n*.25},0 + a${a},${a} 1 0,0 ${-1*n*.25},0 + a${a},${a} 1 0,0 ${-1*n*.25},${-1*i*.15} + + a${a},${a} 1 0,0 ${-1*n*.1},${-1*i*.33} + a${a*.8},${a*.8} 1 0,0 0,${-1*i*.34} + a${a},${a} 1 0,0 ${n*.1},${-1*i*.33} + + H0 V0 Z`)},"bangBkg"),ntt=o(function(t,e,r){e.append("circle").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("r",r.width/2)},"circleBkg");o(itt,"insertPolygonShape");att=o(function(t,e,r){let n=r.height,a=n/4,s=r.width-r.padding+2*a,l=[{x:a,y:0},{x:s-a,y:0},{x:s,y:-n/2},{x:s-a,y:-n},{x:a,y:-n},{x:0,y:-n/2}];itt(e,s,n,l,r)},"hexagonBkg"),stt=o(function(t,e,r){e.append("rect").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("height",r.height).attr("rx",r.padding).attr("ry",r.padding).attr("width",r.width)},"roundedRectBkg"),A1e=o(async function(t,e,r,n,i){let a=i.htmlLabels,s=n%(Zet-1),l=e.append("g");r.section=s;let u="section-"+s;s<0&&(u+=" section-root"),l.attr("class",(r.class?r.class+" ":"")+"mindmap-node "+u);let h=l.append("g"),f=l.append("g"),d=r.descr.replace(/()/g,` +`);await Li(f,d,{useHtmlLabels:a,width:r.width,classes:"mindmap-node-label"},i),a||f.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle");let p=f.node().getBBox(),[m]=Ho(i.fontSize);if(r.height=p.height+m*1.1*.5+r.padding,r.width=p.width+2*r.padding,r.icon)if(r.type===t.nodeType.CIRCLE)r.height+=50,r.width+=50,l.append("foreignObject").attr("height","50px").attr("width",r.width).attr("style","text-align: center;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+s+" "+r.icon),f.attr("transform","translate("+r.width/2+", "+(r.height/2-1.5*r.padding)+")");else{r.width+=50;let g=r.height;r.height=Math.max(g,60);let y=Math.abs(r.height-g);l.append("foreignObject").attr("width","60px").attr("height",r.height).attr("style","text-align: center;margin-top:"+y/2+"px;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+s+" "+r.icon),f.attr("transform","translate("+(25+r.width/2)+", "+(y/2+r.padding/2)+")")}else if(a){let g=(r.width-p.width)/2,y=(r.height-p.height)/2;f.attr("transform","translate("+g+", "+y+")")}else{let g=r.width/2,y=r.padding/2;f.attr("transform","translate("+g+", "+y+")")}switch(r.type){case t.nodeType.DEFAULT:Jet(t,h,r,s);break;case t.nodeType.ROUNDED_RECT:stt(t,h,r,s);break;case t.nodeType.RECT:ett(t,h,r,s);break;case t.nodeType.CIRCLE:h.attr("transform","translate("+r.width/2+", "+ +r.height/2+")"),ntt(t,h,r,s);break;case t.nodeType.CLOUD:ttt(t,h,r,s);break;case t.nodeType.BANG:rtt(t,h,r,s);break;case t.nodeType.HEXAGON:att(t,h,r,s);break}return t.setElementForId(r.id,l),r.height},"drawNode"),_1e=o(function(t,e){let r=t.getElementById(e.id),n=e.x||0,i=e.y||0;r.attr("transform","translate("+n+","+i+")")},"positionNode")});async function N1e(t,e,r,n,i){await A1e(t,e,r,n,i),r.children&&await Promise.all(r.children.map((a,s)=>N1e(t,e,a,n<0?s:n,i)))}function ott(t,e){e.edges().map((r,n)=>{let i=r.data();if(r[0]._private.bodyBounds){let a=r[0]._private.rscratch;Y.trace("Edge: ",n,i),t.insert("path").attr("d",`M ${a.startX},${a.startY} L ${a.midX},${a.midY} L${a.endX},${a.endY} `).attr("class","edge section-edge-"+i.section+" edge-depth-"+i.depth)}})}function R1e(t,e,r,n){e.add({group:"nodes",data:{id:t.id.toString(),labelText:t.descr,height:t.height,width:t.width,level:n,nodeId:t.id,padding:t.padding,type:t.type},position:{x:t.x,y:t.y}}),t.children&&t.children.forEach(i=>{R1e(i,e,r,n+1),e.add({group:"edges",data:{id:`${t.id}_${i.id}`,source:t.id,target:i.id,depth:n,section:i.section}})})}function ltt(t,e){return new Promise(r=>{let n=Ve("body").append("div").attr("id","cy").attr("style","display:none"),i=fl({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});n.remove(),R1e(t,i,e,0),i.nodes().forEach(function(a){a.layoutDimensions=()=>{let s=a.data();return{w:s.width,h:s.height}}}),i.layout({name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1}).run(),i.ready(a=>{Y.info("Ready",a),r(i)})})}function ctt(t,e){e.nodes().map((r,n)=>{let i=r.data();i.x=r.position().x,i.y=r.position().y,_1e(t,i);let a=t.getElementById(i.nodeId);Y.info("Id:",n,"Position: (",r.position().x,", ",r.position().y,")",i),a.attr("transform",`translate(${r.position().x-i.width/2}, ${r.position().y-i.height/2})`),a.attr("attr",`apa-${n})`)})}var D1e,utt,M1e,I1e=M(()=>{"use strict";SB();D1e=Ji(C1e(),1);pr();Vt();ut();eh();ai();L1e();bs();fl.use(D1e.default);o(N1e,"drawNodes");o(ott,"drawEdges");o(R1e,"addNodes");o(ltt,"layoutMindmap");o(ctt,"positionNodes");utt=o(async(t,e,r,n)=>{Y.debug(`Rendering mindmap diagram +`+t);let i=n.db,a=i.getMindmap();if(!a)return;let s=pe();s.htmlLabels=!1;let l=Va(e),u=l.append("g");u.attr("class","mindmap-edges");let h=l.append("g");h.attr("class","mindmap-nodes"),await N1e(i,h,a,-1,s);let f=await ltt(a,s);ott(u,f),ctt(i,f),Io(void 0,l,s.mindmap?.padding??ur.mindmap.padding,s.mindmap?.useMaxWidth??ur.mindmap.useMaxWidth)},"draw"),M1e={draw:utt}});var htt,ftt,O1e,P1e=M(()=>{"use strict";Lo();htt=o(t=>{let e="";for(let r=0;r` + `}return e},"genSections"),ftt=o(t=>` .edge { stroke-width: 3; } - ${ron(i)} - .section-root rect, .section-root path, .section-root circle { - fill: ${i.git0}; + ${htt(t)} + .section-root rect, .section-root path, .section-root circle, .section-root polygon { + fill: ${t.git0}; } .section-root text { - fill: ${i.gitBranchLabel0}; + fill: ${t.gitBranchLabel0}; } .icon-container { height:100%; @@ -1791,81 +1983,44 @@ Expecting `+gn.join(", ")+", got '"+(this.terminals_[je]||je)+"'":_t="Parse erro .edge { fill: none; } - .eventWrapper { - filter: brightness(120%); + .mindmap-node-label { + dy: 1em; + alignment-baseline: middle; + text-anchor: middle; + dominant-baseline: middle; + text-align: center; } -`}},Symbol.toStringTag,{value:"Module"}));var ewe=function(){var i=function(be,ae,ne,se){for(ne=ne||{},se=be.length;se--;ne[be[se]]=ae);return ne},s=[1,4],u=[1,13],d=[1,12],p=[1,15],v=[1,16],b=[1,20],y=[1,19],T=[6,7,8],_=[1,26],A=[1,24],P=[1,25],R=[6,7,11],F=[1,6,13,15,16,19,22],j=[1,33],K=[1,34],ee=[1,6,7,11,13,15,16,19,22],ie={trace:function(){},yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,MINDMAP:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,ICON:15,CLASS:16,nodeWithId:17,nodeWithoutId:18,NODE_DSTART:19,NODE_DESCR:20,NODE_DEND:21,NODE_ID:22,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"MINDMAP",11:"EOF",13:"SPACELIST",15:"ICON",16:"CLASS",19:"NODE_DSTART",20:"NODE_DESCR",21:"NODE_DEND",22:"NODE_ID"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,2],[12,2],[12,1],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[18,3],[17,1],[17,4]],performAction:function(ae,ne,se,de,X,ge,W){var xe=ge.length-1;switch(X){case 6:case 7:return de;case 8:de.getLogger().trace("Stop NL ");break;case 9:de.getLogger().trace("Stop EOF ");break;case 11:de.getLogger().trace("Stop NL2 ");break;case 12:de.getLogger().trace("Stop EOF2 ");break;case 15:de.getLogger().info("Node: ",ge[xe].id),de.addNode(ge[xe-1].length,ge[xe].id,ge[xe].descr,ge[xe].type);break;case 16:de.getLogger().trace("Icon: ",ge[xe]),de.decorateNode({icon:ge[xe]});break;case 17:case 21:de.decorateNode({class:ge[xe]});break;case 18:de.getLogger().trace("SPACELIST");break;case 19:de.getLogger().trace("Node: ",ge[xe].id),de.addNode(0,ge[xe].id,ge[xe].descr,ge[xe].type);break;case 20:de.decorateNode({icon:ge[xe]});break;case 25:de.getLogger().trace("node found ..",ge[xe-2]),this.$={id:ge[xe-1],descr:ge[xe-1],type:de.getType(ge[xe-2],ge[xe])};break;case 26:this.$={id:ge[xe],descr:ge[xe],type:de.nodeType.DEFAULT};break;case 27:de.getLogger().trace("node found ..",ge[xe-3]),this.$={id:ge[xe-3],descr:ge[xe-1],type:de.getType(ge[xe-2],ge[xe])};break}},table:[{3:1,4:2,5:3,6:[1,5],8:s},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:s},{6:u,7:[1,10],9:9,12:11,13:d,14:14,15:p,16:v,17:17,18:18,19:b,22:y},i(T,[2,3]),{1:[2,2]},i(T,[2,4]),i(T,[2,5]),{1:[2,6],6:u,12:21,13:d,14:14,15:p,16:v,17:17,18:18,19:b,22:y},{6:u,9:22,12:11,13:d,14:14,15:p,16:v,17:17,18:18,19:b,22:y},{6:_,7:A,10:23,11:P},i(R,[2,22],{17:17,18:18,14:27,15:[1,28],16:[1,29],19:b,22:y}),i(R,[2,18]),i(R,[2,19]),i(R,[2,20]),i(R,[2,21]),i(R,[2,23]),i(R,[2,24]),i(R,[2,26],{19:[1,30]}),{20:[1,31]},{6:_,7:A,10:32,11:P},{1:[2,7],6:u,12:21,13:d,14:14,15:p,16:v,17:17,18:18,19:b,22:y},i(F,[2,14],{7:j,11:K}),i(ee,[2,8]),i(ee,[2,9]),i(ee,[2,10]),i(R,[2,15]),i(R,[2,16]),i(R,[2,17]),{20:[1,35]},{21:[1,36]},i(F,[2,13],{7:j,11:K}),i(ee,[2,11]),i(ee,[2,12]),{21:[1,37]},i(R,[2,25]),i(R,[2,27])],defaultActions:{2:[2,1],6:[2,2]},parseError:function(ae,ne){if(ne.recoverable)this.trace(ae);else{var se=new Error(ae);throw se.hash=ne,se}},parse:function(ae){var ne=this,se=[0],de=[],X=[null],ge=[],W=this.table,xe="",U=0,Fe=0,Pe=2,je=1,Ie=ge.slice.call(arguments,1),Se=Object.create(this.lexer),Ce={yy:{}};for(var ke in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ke)&&(Ce.yy[ke]=this.yy[ke]);Se.setInput(ae,Ce.yy),Ce.yy.lexer=Se,Ce.yy.parser=this,typeof Se.yylloc>"u"&&(Se.yylloc={});var Ke=Se.yylloc;ge.push(Ke);var Ft=Se.options&&Se.options.ranges;typeof Ce.yy.parseError=="function"?this.parseError=Ce.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ne(){var On;return On=de.pop()||Se.lex()||je,typeof On!="number"&&(On instanceof Array&&(de=On,On=de.pop()),On=ne.symbols_[On]||On),On}for(var gn,_t,Et,Gt,ln={},xt,Pt,Qe,Dt;;){if(_t=se[se.length-1],this.defaultActions[_t]?Et=this.defaultActions[_t]:((gn===null||typeof gn>"u")&&(gn=Ne()),Et=W[_t]&&W[_t][gn]),typeof Et>"u"||!Et.length||!Et[0]){var kt="";Dt=[];for(xt in W[_t])this.terminals_[xt]&&xt>Pe&&Dt.push("'"+this.terminals_[xt]+"'");Se.showPosition?kt="Parse error on line "+(U+1)+`: -`+Se.showPosition()+` -Expecting `+Dt.join(", ")+", got '"+(this.terminals_[gn]||gn)+"'":kt="Parse error on line "+(U+1)+": Unexpected "+(gn==je?"end of input":"'"+(this.terminals_[gn]||gn)+"'"),this.parseError(kt,{text:Se.match,token:this.terminals_[gn]||gn,line:Se.yylineno,loc:Ke,expected:Dt})}if(Et[0]instanceof Array&&Et.length>1)throw new Error("Parse Error: multiple actions possible at state: "+_t+", token: "+gn);switch(Et[0]){case 1:se.push(gn),X.push(Se.yytext),ge.push(Se.yylloc),se.push(Et[1]),gn=null,Fe=Se.yyleng,xe=Se.yytext,U=Se.yylineno,Ke=Se.yylloc;break;case 2:if(Pt=this.productions_[Et[1]][1],ln.$=X[X.length-Pt],ln._$={first_line:ge[ge.length-(Pt||1)].first_line,last_line:ge[ge.length-1].last_line,first_column:ge[ge.length-(Pt||1)].first_column,last_column:ge[ge.length-1].last_column},Ft&&(ln._$.range=[ge[ge.length-(Pt||1)].range[0],ge[ge.length-1].range[1]]),Gt=this.performAction.apply(ln,[xe,Fe,U,Ce.yy,Et[1],X,ge].concat(Ie)),typeof Gt<"u")return Gt;Pt&&(se=se.slice(0,-1*Pt*2),X=X.slice(0,-1*Pt),ge=ge.slice(0,-1*Pt)),se.push(this.productions_[Et[1]][0]),X.push(ln.$),ge.push(ln._$),Qe=W[se[se.length-2]][se[se.length-1]],se.push(Qe);break;case 3:return!0}}return!0}},oe=function(){var be={EOF:1,parseError:function(ne,se){if(this.yy.parser)this.yy.parser.parseError(ne,se);else throw new Error(ne)},setInput:function(ae,ne){return this.yy=ne||this.yy||{},this._input=ae,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var ae=this._input[0];this.yytext+=ae,this.yyleng++,this.offset++,this.match+=ae,this.matched+=ae;var ne=ae.match(/(?:\r\n?|\n).*/g);return ne?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),ae},unput:function(ae){var ne=ae.length,se=ae.split(/(?:\r\n?|\n)/g);this._input=ae+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-ne),this.offset-=ne;var de=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),se.length-1&&(this.yylineno-=se.length-1);var X=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:se?(se.length===de.length?this.yylloc.first_column:0)+de[de.length-se.length].length-se[0].length:this.yylloc.first_column-ne},this.options.ranges&&(this.yylloc.range=[X[0],X[0]+this.yyleng-ne]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(ae){this.unput(this.match.slice(ae))},pastInput:function(){var ae=this.matched.substr(0,this.matched.length-this.match.length);return(ae.length>20?"...":"")+ae.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var ae=this.match;return ae.length<20&&(ae+=this._input.substr(0,20-ae.length)),(ae.substr(0,20)+(ae.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var ae=this.pastInput(),ne=new Array(ae.length+1).join("-");return ae+this.upcomingInput()+` -`+ne+"^"},test_match:function(ae,ne){var se,de,X;if(this.options.backtrack_lexer&&(X={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(X.yylloc.range=this.yylloc.range.slice(0))),de=ae[0].match(/(?:\r\n?|\n).*/g),de&&(this.yylineno+=de.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:de?de[de.length-1].length-de[de.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+ae[0].length},this.yytext+=ae[0],this.match+=ae[0],this.matches=ae,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(ae[0].length),this.matched+=ae[0],se=this.performAction.call(this,this.yy,this,ne,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),se)return se;if(this._backtrack){for(var ge in X)this[ge]=X[ge];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var ae,ne,se,de;this._more||(this.yytext="",this.match="");for(var X=this._currentRules(),ge=0;gene[0].length)){if(ne=se,de=ge,this.options.backtrack_lexer){if(ae=this.test_match(se,X[ge]),ae!==!1)return ae;if(this._backtrack){ne=!1;continue}else return!1}else if(!this.options.flex)break}return ne?(ae=this.test_match(ne,X[de]),ae!==!1?ae:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var ne=this.next();return ne||this.lex()},begin:function(ne){this.conditionStack.push(ne)},popState:function(){var ne=this.conditionStack.length-1;return ne>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(ne){return ne=this.conditionStack.length-1-Math.abs(ne||0),ne>=0?this.conditionStack[ne]:"INITIAL"},pushState:function(ne){this.begin(ne)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(ne,se,de,X){switch(de){case 0:return ne.getLogger().trace("Found comment",se.yytext),6;case 1:return 8;case 2:this.begin("CLASS");break;case 3:return this.popState(),16;case 4:this.popState();break;case 5:ne.getLogger().trace("Begin icon"),this.begin("ICON");break;case 6:return ne.getLogger().trace("SPACELINE"),6;case 7:return 7;case 8:return 15;case 9:ne.getLogger().trace("end icon"),this.popState();break;case 10:return ne.getLogger().trace("Exploding node"),this.begin("NODE"),19;case 11:return ne.getLogger().trace("Cloud"),this.begin("NODE"),19;case 12:return ne.getLogger().trace("Explosion Bang"),this.begin("NODE"),19;case 13:return ne.getLogger().trace("Cloud Bang"),this.begin("NODE"),19;case 14:return this.begin("NODE"),19;case 15:return this.begin("NODE"),19;case 16:return this.begin("NODE"),19;case 17:return this.begin("NODE"),19;case 18:return 13;case 19:return 22;case 20:return 11;case 21:this.begin("NSTR2");break;case 22:return"NODE_DESCR";case 23:this.popState();break;case 24:ne.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 25:return ne.getLogger().trace("description:",se.yytext),"NODE_DESCR";case 26:this.popState();break;case 27:return this.popState(),ne.getLogger().trace("node end ))"),"NODE_DEND";case 28:return this.popState(),ne.getLogger().trace("node end )"),"NODE_DEND";case 29:return this.popState(),ne.getLogger().trace("node end ...",se.yytext),"NODE_DEND";case 30:return this.popState(),ne.getLogger().trace("node end (("),"NODE_DEND";case 31:return this.popState(),ne.getLogger().trace("node end (-"),"NODE_DEND";case 32:return this.popState(),ne.getLogger().trace("node end (-"),"NODE_DEND";case 33:return this.popState(),ne.getLogger().trace("node end (("),"NODE_DEND";case 34:return this.popState(),ne.getLogger().trace("node end (("),"NODE_DEND";case 35:return ne.getLogger().trace("Long description:",se.yytext),20;case 36:return ne.getLogger().trace("Long description:",se.yytext),20}},rules:[/^(?:\s*%%.*)/i,/^(?:mindmap\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{CLASS:{rules:[3,4],inclusive:!1},ICON:{rules:[8,9],inclusive:!1},NSTR2:{rules:[22,23],inclusive:!1},NSTR:{rules:[25,26],inclusive:!1},NODE:{rules:[21,24,27,28,29,30,31,32,33,34,35,36],inclusive:!1},INITIAL:{rules:[0,1,2,5,6,7,10,11,12,13,14,15,16,17,18,19,20],inclusive:!0}}};return be}();ie.lexer=oe;function pe(){this.yy={}}return pe.prototype=ie,ie.Parser=pe,new pe}();ewe.parser=ewe;const son=ewe;let K3=[],lWe=0,twe={};const aon=()=>{K3=[],lWe=0,twe={}},oon=function(i){for(let s=K3.length-1;s>=0;s--)if(K3[s].levelK3.length>0?K3[0]:null,uon=(i,s,u,d)=>{var T,_;Xe.info("addNode",i,s,u,d);const p=qt();let v=((T=p.mindmap)==null?void 0:T.padding)??sh.mindmap.padding;switch(d){case v1.ROUNDED_RECT:case v1.RECT:case v1.HEXAGON:v*=2}const b={id:lWe++,nodeId:Yf(s,p),level:i,descr:Yf(u,p),type:d,children:[],width:((_=p.mindmap)==null?void 0:_.maxNodeWidth)??sh.mindmap.maxNodeWidth,padding:v},y=oon(i);if(y)y.children.push(b),K3.push(b);else if(K3.length===0)K3.push(b);else throw new Error('There can be only one root. No parent could be found for ("'+b.descr+'")')},v1={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},lon={clear:aon,addNode:uon,getMindmap:con,nodeType:v1,getType:(i,s)=>{switch(Xe.debug("In get type",i,s),i){case"[":return v1.RECT;case"(":return s===")"?v1.ROUNDED_RECT:v1.CLOUD;case"((":return v1.CIRCLE;case")":return v1.CLOUD;case"))":return v1.BANG;case"{{":return v1.HEXAGON;default:return v1.DEFAULT}},setElementForId:(i,s)=>{twe[i]=s},decorateNode:i=>{if(!i)return;const s=qt(),u=K3[K3.length-1];i.icon&&(u.icon=Yf(i.icon,s)),i.class&&(u.class=Yf(i.class,s))},type2Str:i=>{switch(i){case v1.DEFAULT:return"no-border";case v1.RECT:return"rect";case v1.ROUNDED_RECT:return"rounded-rect";case v1.CIRCLE:return"circle";case v1.CLOUD:return"cloud";case v1.BANG:return"bang";case v1.HEXAGON:return"hexgon";default:return"no-border"}},getLogger:()=>Xe,getElementById:i=>twe[i]};var hWe={exports:{}};(function(i,s){(function(u,d){i.exports=d()})(Ag,function(){function u(x){"@babel/helpers - typeof";return u=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(m){return typeof m}:function(m){return m&&typeof Symbol=="function"&&m.constructor===Symbol&&m!==Symbol.prototype?"symbol":typeof m},u(x)}function d(x,m){if(!(x instanceof m))throw new TypeError("Cannot call a class as a function")}function p(x,m){for(var k=0;kx.length)&&(m=x.length);for(var k=0,S=new Array(m);k"u"?null:window,j=F?F.navigator:null;F&&F.document;var K=u(""),ee=u({}),ie=u(function(){}),oe=typeof HTMLElement>"u"?"undefined":u(HTMLElement),pe=function(m){return m&&m.instanceString&&ae(m.instanceString)?m.instanceString():null},be=function(m){return m!=null&&u(m)==K},ae=function(m){return m!=null&&u(m)===ie},ne=function(m){return!xe(m)&&(Array.isArray?Array.isArray(m):m!=null&&m instanceof Array)},se=function(m){return m!=null&&u(m)===ee&&!ne(m)&&m.constructor===Object},de=function(m){return m!=null&&u(m)===ee},X=function(m){return m!=null&&u(m)===u(1)&&!isNaN(m)},ge=function(m){return X(m)&&Math.floor(m)===m},W=function(m){if(oe!=="undefined")return m!=null&&m instanceof HTMLElement},xe=function(m){return U(m)||Fe(m)},U=function(m){return pe(m)==="collection"&&m._private.single},Fe=function(m){return pe(m)==="collection"&&!m._private.single},Pe=function(m){return pe(m)==="core"},je=function(m){return pe(m)==="stylesheet"},Ie=function(m){return pe(m)==="event"},Se=function(m){return m==null?!0:!!(m===""||m.match(/^\s+$/))},Ce=function(m){return typeof HTMLElement>"u"?!1:m instanceof HTMLElement},ke=function(m){return se(m)&&X(m.x1)&&X(m.x2)&&X(m.y1)&&X(m.y2)},Ke=function(m){return de(m)&&ae(m.then)},Ft=function(){return j&&j.userAgent.match(/msie|trident|edge/i)},Ne=function(m,k){k||(k=function(){if(arguments.length===1)return arguments[0];if(arguments.length===0)return"undefined";for(var O=[],N=0;Nk?1:0},zr=function(m,k){return-1*ht(m,k)},yt=Object.assign!=null?Object.assign.bind(Object):function(x){for(var m=arguments,k=1;k1&&(_e-=1),_e<1/6?me+(Le-me)*6*_e:_e<1/2?Le:_e<2/3?me+(Le-me)*(2/3-_e)*6:me}var Z=new RegExp("^"+Qe+"$").exec(m);if(Z){if(S=parseInt(Z[1]),S<0?S=(360- -1*S%360)%360:S>360&&(S=S%360),S/=360,M=parseFloat(Z[2]),M<0||M>100||(M=M/100,O=parseFloat(Z[3]),O<0||O>100)||(O=O/100,N=Z[4],N!==void 0&&(N=parseFloat(N),N<0||N>1)))return;if(M===0)$=H=q=Math.round(O*255);else{var ce=O<.5?O*(1+M):O+M-O*M,ve=2*O-ce;$=Math.round(255*Y(ve,ce,S+1/3)),H=Math.round(255*Y(ve,ce,S)),q=Math.round(255*Y(ve,ce,S-1/3))}k=[$,H,q,N]}return k},Ma=function(m){var k,S=new RegExp("^"+xt+"$").exec(m);if(S){k=[];for(var M=[],O=1;O<=3;O++){var N=S[O];if(N[N.length-1]==="%"&&(M[O]=!0),N=parseFloat(N),M[O]&&(N=N/100*255),N<0||N>255)return;k.push(Math.floor(N))}var $=M[1]||M[2]||M[3],H=M[1]&&M[2]&&M[3];if($&&!H)return;var q=S[4];if(q!==void 0){if(q=parseFloat(q),q<0||q>1)return;k.push(q)}}return k},zs=function(m){return Tr[m.toLowerCase()]},ao=function(m){return(ne(m)?m:null)||zs(m)||ji(m)||Ma(m)||xi(m)},Tr={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Fn=function(m){for(var k=m.map,S=m.keys,M=S.length,O=0;O=m||Ye<0||Z&&mt>=O}function Ee(){var st=wo();if(_e(st))return Be(st);$=setTimeout(Ee,Le(st))}function Be(st){return $=void 0,ce&&S?ve(st):(S=M=void 0,N)}function Re(){$!==void 0&&clearTimeout($),q=0,S=H=M=$=void 0}function Ve(){return $===void 0?N:Be(wo())}function ct(){var st=wo(),Ye=_e(st);if(S=arguments,M=this,H=st,Ye){if($===void 0)return me(H);if(Z)return clearTimeout($),$=setTimeout(Ee,m),ve(H)}return $===void 0&&($=setTimeout(Ee,m)),N}return ct.cancel=Re,ct.flush=Ve,ct}var Nu=Bi,Ot=F?F.performance:null,W3=Ot&&Ot.now?function(){return Ot.now()}:function(){return Date.now()},Kt=function(){if(F){if(F.requestAnimationFrame)return function(x){F.requestAnimationFrame(x)};if(F.mozRequestAnimationFrame)return function(x){F.mozRequestAnimationFrame(x)};if(F.webkitRequestAnimationFrame)return function(x){F.webkitRequestAnimationFrame(x)};if(F.msRequestAnimationFrame)return function(x){F.msRequestAnimationFrame(x)}}return function(x){x&&setTimeout(function(){x(W3())},1e3/60)}}(),z0=function(m){return Kt(m)},Bp=W3,Y3=9261,$9=65599,c5=5381,Eh=function(m){for(var k=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Y3,S=k,M;M=m.next(),!M.done;)S=S*$9+M.value|0;return S},zg=function(m){var k=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Y3;return k*$9+m|0},bm=function(m){var k=arguments.length>1&&arguments[1]!==void 0?arguments[1]:c5;return(k<<5)+k+m|0},z9=function(m,k){return m*2097152+k},mm=function(m){return m[0]*2097152+m[1]},u5=function(m,k){return[zg(m[0],k[0]),bm(m[1],k[1])]},y1=function(m,k){var S={value:0,done:!1},M=0,O=m.length,N={next:function(){return M=0&&!(m[M]===k&&(m.splice(M,1),S));M--);},cS=function(m){m.splice(0,m.length)},uj=function(m,k){for(var S=0;S"u"?"undefined":u(Set))!==VJ?Set:UJ,uS=function(m,k){var S=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(m===void 0||k===void 0||!Pe(m)){ch("An element must have a core reference and parameters set");return}var M=k.group;if(M==null&&(k.data&&k.data.source!=null&&k.data.target!=null?M="edges":M="nodes"),M!=="nodes"&&M!=="edges"){ch("An element must be of type `nodes` or `edges`; you specified `"+M+"`");return}this.length=1,this[0]=this;var O=this._private={cy:m,single:!0,data:k.data||{},position:k.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:M,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!k.selected,selectable:k.selectable===void 0?!0:!!k.selectable,locked:!!k.locked,grabbed:!1,grabbable:k.grabbable===void 0?!0:!!k.grabbable,pannable:k.pannable===void 0?M==="edges":!!k.pannable,active:!1,classes:new Q7,animation:{current:[],queue:[]},rscratch:{},scratch:k.scratch||{},edges:[],children:[],parent:k.parent&&k.parent.isNode()?k.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(O.position.x==null&&(O.position.x=0),O.position.y==null&&(O.position.y=0),k.renderedPosition){var N=k.renderedPosition,$=m.pan(),H=m.zoom();O.position={x:(N.x-$.x)/H,y:(N.y-$.y)/H}}var q=[];ne(k.classes)?q=k.classes:be(k.classes)&&(q=k.classes.split(/\s+/));for(var Y=0,Z=q.length;YBe?1:0},Y=function(Ee,Be,Re,Ve,ct){var st;if(Re==null&&(Re=0),ct==null&&(ct=S),Re<0)throw new Error("lo must be non-negative");for(Ve==null&&(Ve=Ee.length);ReLt;0<=Lt?Je++:Je--)mt.push(Je);return mt}).apply(this).reverse(),Ye=[],Ve=0,ct=st.length;VeMt;0<=Mt?++mt:--mt)ut.push(N(Ee,Re));return ut},Le=function(Ee,Be,Re,Ve){var ct,st,Ye;for(Ve==null&&(Ve=S),ct=Ee[Re];Re>Be;){if(Ye=Re-1>>1,st=Ee[Ye],Ve(ct,st)<0){Ee[Re]=st,Re=Ye;continue}break}return Ee[Re]=ct},_e=function(Ee,Be,Re){var Ve,ct,st,Ye,mt;for(Re==null&&(Re=S),ct=Ee.length,mt=Be,st=Ee[Be],Ve=2*Be+1;Ve0;){var st=Be.pop(),Ye=_e(st),mt=st.id();if(ce[mt]=Ye,Ye!==1/0)for(var Je=st.neighborhood().intersect(me),Lt=0;Lt0)for(Dn.unshift(Yt);Z[vr];){var Nn=Z[vr];Dn.unshift(Nn.edge),Dn.unshift(Nn.node),ir=Nn.node,vr=ir.id()}return $.spawn(Dn)}}}},YJ={kruskal:function(m){m=m||function(Re){return 1};for(var k=this.byGroup(),S=k.nodes,M=k.edges,O=S.length,N=new Array(O),$=S,H=function(Ve){for(var ct=0;ct0;){if(ct(),Ye++,Ve===Y){for(var mt=[],Je=O,Lt=Y,Mt=Ee[Lt];mt.unshift(Je),Mt!=null&&mt.unshift(Mt),Je=_e[Lt],Je!=null;)Lt=Je.id(),Mt=Ee[Lt];return{found:!0,distance:Z[Ve],path:this.spawn(mt),steps:Ye}}ve[Ve]=!0;for(var ut=Re._private.edges,Wt=0;WtMt&&(me[Lt]=Mt,Be[Lt]=Je,Re[Lt]=ct),!O){var ut=Je*Y+mt;!O&&me[ut]>Mt&&(me[ut]=Mt,Be[ut]=mt,Re[ut]=ct)}}}for(var Wt=0;Wt1&&arguments[1]!==void 0?arguments[1]:N,yo=Re(xs),$a=[],Da=yo;;){if(Da==null)return k.spawn();var Bo=Be(Da),tr=Bo.edge,G=Bo.pred;if($a.unshift(Da[0]),Da.same(Rs)&&$a.length>0)break;tr!=null&&$a.unshift(tr),Da=G}return H.spawn($a)},st=0;st=0;Y--){var Z=q[Y],ce=Z[1],ve=Z[2];(k[ce]===$&&k[ve]===H||k[ce]===H&&k[ve]===$)&&q.splice(Y,1)}for(var me=0;meM;){var O=Math.floor(Math.random()*k.length);k=rZ(O,m,k),S--}return k},iZ={kargerStein:function(){var m=this,k=this.byGroup(),S=k.nodes,M=k.edges;M.unmergeBy(function(Dn){return Dn.isLoop()});var O=S.length,N=M.length,$=Math.ceil(Math.pow(Math.log(O)/Math.LN2,2)),H=Math.floor(O/nZ);if(O<2){ch("At least 2 nodes are required for Karger-Stein algorithm");return}for(var q=[],Y=0;Y1&&arguments[1]!==void 0?arguments[1]:0,S=arguments.length>2&&arguments[2]!==void 0?arguments[2]:m.length,M=1/0,O=k;O1&&arguments[1]!==void 0?arguments[1]:0,S=arguments.length>2&&arguments[2]!==void 0?arguments[2]:m.length,M=-1/0,O=k;O1&&arguments[1]!==void 0?arguments[1]:0,S=arguments.length>2&&arguments[2]!==void 0?arguments[2]:m.length,M=0,O=0,N=k;N1&&arguments[1]!==void 0?arguments[1]:0,S=arguments.length>2&&arguments[2]!==void 0?arguments[2]:m.length,M=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,O=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,N=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0;M?m=m.slice(k,S):(S0&&m.splice(0,k));for(var $=0,H=m.length-1;H>=0;H--){var q=m[H];N?isFinite(q)||(m[H]=-1/0,$++):m.splice(H,1)}O&&m.sort(function(ce,ve){return ce-ve});var Y=m.length,Z=Math.floor(Y/2);return Y%2!==0?m[Z+1+$]:(m[Z-1+$]+m[Z+$])/2},lZ=function(m){return Math.PI*m/180},hS=function(m,k){return Math.atan2(k,m)-Math.PI/2},iI=Math.log2||function(x){return Math.log(x)/Math.log(2)},fj=function(m){return m>0?1:m<0?-1:0},h5=function(m,k){return Math.sqrt(f5(m,k))},f5=function(m,k){var S=k.x-m.x,M=k.y-m.y;return S*S+M*M},hZ=function(m){for(var k=m.length,S=0,M=0;M=m.x1&&m.y2>=m.y1)return{x1:m.x1,y1:m.y1,x2:m.x2,y2:m.y2,w:m.x2-m.x1,h:m.y2-m.y1};if(m.w!=null&&m.h!=null&&m.w>=0&&m.h>=0)return{x1:m.x1,y1:m.y1,x2:m.x1+m.w,y2:m.y1+m.h,w:m.w,h:m.h}}},dZ=function(m){return{x1:m.x1,x2:m.x2,w:m.w,y1:m.y1,y2:m.y2,h:m.h}},gZ=function(m){m.x1=1/0,m.y1=1/0,m.x2=-1/0,m.y2=-1/0,m.w=0,m.h=0},pZ=function(m,k,S){return{x1:m.x1+k,x2:m.x2+k,y1:m.y1+S,y2:m.y2+S,w:m.w,h:m.h}},dj=function(m,k){m.x1=Math.min(m.x1,k.x1),m.x2=Math.max(m.x2,k.x2),m.w=m.x2-m.x1,m.y1=Math.min(m.y1,k.y1),m.y2=Math.max(m.y2,k.y2),m.h=m.y2-m.y1},bZ=function(m,k,S){m.x1=Math.min(m.x1,k),m.x2=Math.max(m.x2,k),m.w=m.x2-m.x1,m.y1=Math.min(m.y1,S),m.y2=Math.max(m.y2,S),m.h=m.y2-m.y1},fS=function(m){var k=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return m.x1-=k,m.x2+=k,m.y1-=k,m.y2+=k,m.w=m.x2-m.x1,m.h=m.y2-m.y1,m},dS=function(m){var k=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[0],S,M,O,N;if(k.length===1)S=M=O=N=k[0];else if(k.length===2)S=O=k[0],N=M=k[1];else if(k.length===4){var $=y(k,4);S=$[0],M=$[1],O=$[2],N=$[3]}return m.x1-=N,m.x2+=M,m.y1-=S,m.y2+=O,m.w=m.x2-m.x1,m.h=m.y2-m.y1,m},gj=function(m,k){m.x1=k.x1,m.y1=k.y1,m.x2=k.x2,m.y2=k.y2,m.w=m.x2-m.x1,m.h=m.y2-m.y1},sI=function(m,k){return!(m.x1>k.x2||k.x1>m.x2||m.x2k.y2||k.y1>m.y2)},e8=function(m,k,S){return m.x1<=k&&k<=m.x2&&m.y1<=S&&S<=m.y2},mZ=function(m,k){return e8(m,k.x,k.y)},pj=function(m,k){return e8(m,k.x1,k.y1)&&e8(m,k.x2,k.y2)},bj=function(m,k,S,M,O,N,$){var H=W9(O,N),q=O/2,Y=N/2,Z;{var ce=S-q+H-$,ve=M-Y-$,me=S+q-H+$,Le=ve;if(Z=Z3(m,k,S,M,ce,ve,me,Le,!1),Z.length>0)return Z}{var _e=S+q+$,Ee=M-Y+H-$,Be=_e,Re=M+Y-H+$;if(Z=Z3(m,k,S,M,_e,Ee,Be,Re,!1),Z.length>0)return Z}{var Ve=S-q+H-$,ct=M+Y+$,st=S+q-H+$,Ye=ct;if(Z=Z3(m,k,S,M,Ve,ct,st,Ye,!1),Z.length>0)return Z}{var mt=S-q-$,Je=M-Y+H-$,Lt=mt,Mt=M+Y-H+$;if(Z=Z3(m,k,S,M,mt,Je,Lt,Mt,!1),Z.length>0)return Z}var ut;{var Wt=S-q+H,Tt=M-Y+H;if(ut=G9(m,k,S,M,Wt,Tt,H+$),ut.length>0&&ut[0]<=Wt&&ut[1]<=Tt)return[ut[0],ut[1]]}{var _n=S+q-H,hn=M-Y+H;if(ut=G9(m,k,S,M,_n,hn,H+$),ut.length>0&&ut[0]>=_n&&ut[1]<=hn)return[ut[0],ut[1]]}{var Yt=S+q-H,Dn=M+Y-H;if(ut=G9(m,k,S,M,Yt,Dn,H+$),ut.length>0&&ut[0]>=Yt&&ut[1]>=Dn)return[ut[0],ut[1]]}{var ir=S-q+H,vr=M+Y-H;if(ut=G9(m,k,S,M,ir,vr,H+$),ut.length>0&&ut[0]<=ir&&ut[1]>=vr)return[ut[0],ut[1]]}return[]},vZ=function(m,k,S,M,O,N,$){var H=$,q=Math.min(S,O),Y=Math.max(S,O),Z=Math.min(M,N),ce=Math.max(M,N);return q-H<=m&&m<=Y+H&&Z-H<=k&&k<=ce+H},wZ=function(m,k,S,M,O,N,$,H,q){var Y={x1:Math.min(S,$,O)-q,x2:Math.max(S,$,O)+q,y1:Math.min(M,H,N)-q,y2:Math.max(M,H,N)+q};return!(mY.x2||kY.y2)},yZ=function(m,k,S,M){S-=M;var O=k*k-4*m*S;if(O<0)return[];var N=Math.sqrt(O),$=2*m,H=(-k+N)/$,q=(-k-N)/$;return[H,q]},xZ=function(m,k,S,M,O){var N=1e-5;m===0&&(m=N),k/=m,S/=m,M/=m;var $,H,q,Y,Z,ce,ve,me;if(H=(3*S-k*k)/9,q=-(27*M)+k*(9*S-2*(k*k)),q/=54,$=H*H*H+q*q,O[1]=0,ve=k/3,$>0){Z=q+Math.sqrt($),Z=Z<0?-Math.pow(-Z,1/3):Math.pow(Z,1/3),ce=q-Math.sqrt($),ce=ce<0?-Math.pow(-ce,1/3):Math.pow(ce,1/3),O[0]=-ve+Z+ce,ve+=(Z+ce)/2,O[4]=O[2]=-ve,ve=Math.sqrt(3)*(-ce+Z)/2,O[3]=ve,O[5]=-ve;return}if(O[5]=O[3]=0,$===0){me=q<0?-Math.pow(-q,1/3):Math.pow(q,1/3),O[0]=-ve+2*me,O[4]=O[2]=-(me+ve);return}H=-H,Y=H*H*H,Y=Math.acos(q/Math.sqrt(Y)),me=2*Math.sqrt(H),O[0]=-ve+me*Math.cos(Y/3),O[2]=-ve+me*Math.cos((Y+2*Math.PI)/3),O[4]=-ve+me*Math.cos((Y+4*Math.PI)/3)},kZ=function(m,k,S,M,O,N,$,H){var q=1*S*S-4*S*O+2*S*$+4*O*O-4*O*$+$*$+M*M-4*M*N+2*M*H+4*N*N-4*N*H+H*H,Y=1*9*S*O-3*S*S-3*S*$-6*O*O+3*O*$+9*M*N-3*M*M-3*M*H-6*N*N+3*N*H,Z=1*3*S*S-6*S*O+S*$-S*m+2*O*O+2*O*m-$*m+3*M*M-6*M*N+M*H-M*k+2*N*N+2*N*k-H*k,ce=1*S*O-S*S+S*m-O*m+M*N-M*M+M*k-N*k,ve=[];xZ(q,Y,Z,ce,ve);for(var me=1e-7,Le=[],_e=0;_e<6;_e+=2)Math.abs(ve[_e+1])=0&&ve[_e]<=1&&Le.push(ve[_e]);Le.push(1),Le.push(0);for(var Ee=-1,Be,Re,Ve,ct=0;ct=0?Veq?(m-O)*(m-O)+(k-N)*(k-N):Y-ce},Yd=function(m,k,S){for(var M,O,N,$,H,q=0,Y=0;Y=m&&m>=N||M<=m&&m<=N)H=(m-M)/(N-M)*($-O)+O,H>k&&q++;else continue;return q%2!==0},Uv=function(m,k,S,M,O,N,$,H,q){var Y=new Array(S.length),Z;H[0]!=null?(Z=Math.atan(H[1]/H[0]),H[0]<0?Z=Z+Math.PI/2:Z=-Z-Math.PI/2):Z=H;for(var ce=Math.cos(-Z),ve=Math.sin(-Z),me=0;me0){var _e=pS(Y,-q);Le=gS(_e)}else Le=Y;return Yd(m,k,Le)},TZ=function(m,k,S,M,O,N,$){for(var H=new Array(S.length),q=N/2,Y=$/2,Z=cI(N,$),ce=Z*Z,ve=0;ve=0&&_e<=1&&Be.push(_e),Ee>=0&&Ee<=1&&Be.push(Ee),Be.length===0)return[];var Re=Be[0]*H[0]+m,Ve=Be[0]*H[1]+k;if(Be.length>1){if(Be[0]==Be[1])return[Re,Ve];var ct=Be[1]*H[0]+m,st=Be[1]*H[1]+k;return[Re,Ve,ct,st]}else return[Re,Ve]},aI=function(m,k,S){return k<=m&&m<=S||S<=m&&m<=k?m:m<=k&&k<=S||S<=k&&k<=m?k:S},Z3=function(m,k,S,M,O,N,$,H,q){var Y=m-O,Z=S-m,ce=$-O,ve=k-N,me=M-k,Le=H-N,_e=ce*ve-Le*Y,Ee=Z*ve-me*Y,Be=Le*Z-ce*me;if(Be!==0){var Re=_e/Be,Ve=Ee/Be,ct=.001,st=0-ct,Ye=1+ct;return st<=Re&&Re<=Ye&&st<=Ve&&Ve<=Ye?[m+Re*Z,k+Re*me]:q?[m+Re*Z,k+Re*me]:[]}else return _e===0||Ee===0?aI(m,S,$)===$?[$,H]:aI(m,S,O)===O?[O,N]:aI(O,$,S)===S?[S,M]:[]:[]},K9=function(m,k,S,M,O,N,$,H){var q=[],Y,Z=new Array(S.length),ce=!0;N==null&&(ce=!1);var ve;if(ce){for(var me=0;me0){var Le=pS(Z,-H);ve=gS(Le)}else ve=Z}else ve=S;for(var _e,Ee,Be,Re,Ve=0;Ve2){for(var hn=[q[0],q[1]],Yt=Math.pow(hn[0]-m,2)+Math.pow(hn[1]-k,2),Dn=1;DnY&&(Y=Ve)},get:function(Re){return q[Re]}},ce=0;ce<$.length;ce++){var ve=$[ce],me=ve.id();S?H[me]=ve.outgoers().nodes():H[me]=ve.openNeighborhood().nodes(),Z.set(me,0)}for(var Le=function(Re){for(var Ve=$[Re].id(),ct=[],st={},Ye={},mt={},Je=new V9(function(Cr,Or){return mt[Cr]-mt[Or]}),Lt=0;Lt<$.length;Lt++){var Mt=$[Lt].id();st[Mt]=[],Ye[Mt]=0,mt[Mt]=1/0}for(Ye[Ve]=1,mt[Ve]=0,Je.push(Ve);!Je.empty();){var ut=Je.pop();if(ct.push(ut),O)for(var Wt=0;Wt0?hn=_n.edgesTo(Tt)[0]:hn=Tt.edgesTo(_n)[0];var Yt=M(hn);Tt=Tt.id(),mt[Tt]>mt[ut]+Yt&&(mt[Tt]=mt[ut]+Yt,Je.nodes.indexOf(Tt)<0?Je.push(Tt):Je.updateItem(Tt),Ye[Tt]=0,st[Tt]=[]),mt[Tt]==mt[ut]+Yt&&(Ye[Tt]=Ye[Tt]+Ye[ut],st[Tt].push(ut))}else for(var Dn=0;Dn0;){for(var pr=ct.pop(),Er=0;Er0&&$.push(S[H]);$.length!==0&&O.push(M.collection($))}return O},jZ=function(m,k){for(var S=0;S5&&arguments[5]!==void 0?arguments[5]:qZ,$=M,H,q,Y=0;Y=2?Y9(m,k,S,0,Sj,HZ):Y9(m,k,S,0,Cj)},squaredEuclidean:function(m,k,S){return Y9(m,k,S,0,Sj)},manhattan:function(m,k,S){return Y9(m,k,S,0,Cj)},max:function(m,k,S){return Y9(m,k,S,-1/0,VZ)}};r8["squared-euclidean"]=r8.squaredEuclidean,r8.squaredeuclidean=r8.squaredEuclidean;function mS(x,m,k,S,M,O){var N;return ae(x)?N=x:N=r8[x]||r8.euclidean,m===0&&ae(x)?N(M,O):N(m,k,S,M,O)}var UZ=q0({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),hI=function(m){return UZ(m)},vS=function(m,k,S,M,O){var N=O!=="kMedoids",$=N?function(Z){return S[Z]}:function(Z){return M[Z](S)},H=function(ce){return M[ce](k)},q=S,Y=k;return mS(m,M.length,$,H,q,Y)},fI=function(m,k,S){for(var M=S.length,O=new Array(M),N=new Array(M),$=new Array(k),H=null,q=0;qS)return!1}return!0},WZ=function(m,k,S){for(var M=0;M$&&($=k[q][Y],H=Y);O[H].push(m[q])}for(var Z=0;Z=O.threshold||O.mode==="dendrogram"&&m.length===1)return!1;var me=k[N],Le=k[M[N]],_e;O.mode==="dendrogram"?_e={left:me,right:Le,key:me.key}:_e={value:me.value.concat(Le.value),key:me.key},m[me.index]=_e,m.splice(Le.index,1),k[me.key]=_e;for(var Ee=0;EeS[Le.key][Be.key]&&(H=S[Le.key][Be.key])):O.linkage==="max"?(H=S[me.key][Be.key],S[me.key][Be.key]0&&M.push(O);return M},Nj=function(m,k,S){for(var M=[],O=0;O$&&(N=q,$=k[O*m+q])}N>0&&M.push(N)}for(var Y=0;Yq&&(H=Y,q=Z)}S[O]=N[H]}return M=Nj(m,k,S),M},Pj=function(m){for(var k=this.cy(),S=this.nodes(),M=cee(m),O={},N=0;N=Mt?(ut=Mt,Mt=Tt,Wt=_n):Tt>ut&&(ut=Tt);for(var hn=0;hn<$;hn++)Z[Lt*$+hn]=(1-M.damping)*(q[Lt*$+hn]-Mt)+M.damping*Re[hn];Z[Lt*$+Wt]=(1-M.damping)*(q[Lt*$+Wt]-ut)+M.damping*Re[Wt]}for(var Yt=0;Yt<$;Yt++){for(var Dn=0,ir=0;ir<$;ir++)Re[ir]=ce[ir*$+Yt],Ve[ir]=Math.max(0,Z[ir*$+Yt]),Dn+=Ve[ir];Dn-=Ve[Yt],Ve[Yt]=Z[Yt*$+Yt],Dn+=Ve[Yt];for(var vr=0;vr<$;vr++)ce[vr*$+Yt]=(1-M.damping)*Math.min(0,Dn-Ve[vr])+M.damping*Re[vr];ce[Yt*$+Yt]=(1-M.damping)*(Dn-Ve[Yt])+M.damping*Re[Yt]}for(var Nn=0,pr=0;pr<$;pr++){var Er=ce[pr*$+pr]+Z[pr*$+pr]>0?1:0;Ye[Je%M.minIterations*$+pr]=Er,Nn+=Er}if(Nn>0&&(Je>=M.minIterations-1||Je==M.maxIterations-1)){for(var Mr=0,Cr=0;Cr<$;Cr++){ct[Cr]=0;for(var Or=0;Or1||st>1)&&($=!0),Z[Re]=[],Be.outgoers().forEach(function(mt){mt.isEdge()&&Z[Re].push(mt.id())})}else ce[Re]=[void 0,Be.target().id()]}):N.forEach(function(Be){var Re=Be.id();if(Be.isNode()){var Ve=Be.degree(!0);Ve%2&&(H?q?$=!0:q=Re:H=Re),Z[Re]=[],Be.connectedEdges().forEach(function(ct){return Z[Re].push(ct.id())})}else ce[Re]=[Be.source().id(),Be.target().id()]});var ve={found:!1,trail:void 0};if($)return ve;if(q&&H)if(O){if(Y&&q!=Y)return ve;Y=q}else{if(Y&&q!=Y&&H!=Y)return ve;Y||(Y=q)}else Y||(Y=N[0].id());var me=function(Re){for(var Ve=Re,ct=[Re],st,Ye,mt;Z[Ve].length;)st=Z[Ve].shift(),Ye=ce[st][0],mt=ce[st][1],Ve!=mt?(Z[mt]=Z[mt].filter(function(Je){return Je!=st}),Ve=mt):!O&&Ve!=Ye&&(Z[Ye]=Z[Ye].filter(function(Je){return Je!=st}),Ve=Ye),ct.unshift(st),ct.unshift(Ve);return ct},Le=[],_e=[];for(_e=me(Y);_e.length!=1;)Z[_e[0]].length==0?(Le.unshift(N.getElementById(_e.shift())),Le.unshift(N.getElementById(_e.shift()))):_e=me(_e.shift()).concat(_e);Le.unshift(N.getElementById(_e.shift()));for(var Ee in Z)if(Z[Ee].length)return ve;return ve.found=!0,ve.trail=this.spawn(Le,!0),ve}},yS=function(){var m=this,k={},S=0,M=0,O=[],N=[],$={},H=function(ce,ve){for(var me=N.length-1,Le=[],_e=m.spawn();N[me].x!=ce||N[me].y!=ve;)Le.push(N.pop().edge),me--;Le.push(N.pop().edge),Le.forEach(function(Ee){var Be=Ee.connectedNodes().intersection(m);_e.merge(Ee),Be.forEach(function(Re){var Ve=Re.id(),ct=Re.connectedEdges().intersection(m);_e.merge(Re),k[Ve].cutVertex?_e.merge(ct.filter(function(st){return st.isLoop()})):_e.merge(ct)})}),O.push(_e)},q=function Z(ce,ve,me){ce===me&&(M+=1),k[ve]={id:S,low:S++,cutVertex:!1};var Le=m.getElementById(ve).connectedEdges().intersection(m);if(Le.size()===0)O.push(m.spawn(m.getElementById(ve)));else{var _e,Ee,Be,Re;Le.forEach(function(Ve){_e=Ve.source().id(),Ee=Ve.target().id(),Be=_e===ve?Ee:_e,Be!==me&&(Re=Ve.id(),$[Re]||($[Re]=!0,N.push({x:ve,y:Be,edge:Ve})),Be in k?k[ve].low=Math.min(k[ve].low,k[Be].id):(Z(ce,Be,ve),k[ve].low=Math.min(k[ve].low,k[Be].low),k[ve].id<=k[Be].low&&(k[ve].cutVertex=!0,H(ve,Be))))})}};m.forEach(function(Z){if(Z.isNode()){var ce=Z.id();ce in k||(M=0,q(ce,ce),k[ce].cutVertex=M>1)}});var Y=Object.keys(k).filter(function(Z){return k[Z].cutVertex}).map(function(Z){return m.getElementById(Z)});return{cut:m.spawn(Y),components:O}},bee={hopcroftTarjanBiconnected:yS,htbc:yS,htb:yS,hopcroftTarjanBiconnectedComponents:yS},xS=function(){var m=this,k={},S=0,M=[],O=[],N=m.spawn(m),$=function H(q){O.push(q),k[q]={index:S,low:S++,explored:!1};var Y=m.getElementById(q).connectedEdges().intersection(m);if(Y.forEach(function(Le){var _e=Le.target().id();_e!==q&&(_e in k||H(_e),k[_e].explored||(k[q].low=Math.min(k[q].low,k[_e].low)))}),k[q].index===k[q].low){for(var Z=m.spawn();;){var ce=O.pop();if(Z.merge(m.getElementById(ce)),k[ce].low=k[q].index,k[ce].explored=!0,ce===q)break}var ve=Z.edgesWith(Z),me=Z.merge(ve);M.push(me),N=N.difference(me)}};return m.forEach(function(H){if(H.isNode()){var q=H.id();q in k||$(q)}}),{cut:N,components:M}},mee={tarjanStronglyConnected:xS,tsc:xS,tscc:xS,tarjanStronglyConnectedComponents:xS},Bj={};[H9,WJ,YJ,QJ,ZJ,tZ,iZ,LZ,t8,n8,lI,zZ,eee,aee,dee,pee,bee,mee].forEach(function(x){yt(Bj,x)});/*! -Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable -Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com) -Licensed under The MIT License (http://opensource.org/licenses/MIT) -*/var Fj=0,Rj=1,jj=2,Gv=function x(m){if(!(this instanceof x))return new x(m);this.id="Thenable/1.0.7",this.state=Fj,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},typeof m=="function"&&m.call(this,this.fulfill.bind(this),this.reject.bind(this))};Gv.prototype={fulfill:function(m){return $j(this,Rj,"fulfillValue",m)},reject:function(m){return $j(this,jj,"rejectReason",m)},then:function(m,k){var S=this,M=new Gv;return S.onFulfilled.push(Hj(m,M,"fulfill")),S.onRejected.push(Hj(k,M,"reject")),zj(S),M.proxy}};var $j=function(m,k,S,M){return m.state===Fj&&(m.state=k,m[S]=M,zj(m)),m},zj=function(m){m.state===Rj?qj(m,"onFulfilled",m.fulfillValue):m.state===jj&&qj(m,"onRejected",m.rejectReason)},qj=function(m,k,S){if(m[k].length!==0){var M=m[k];m[k]=[];var O=function(){for(var $=0;$0}},clearQueue:function(){return function(){var k=this,S=k.length!==void 0,M=S?k:[k],O=this._private.cy||this;if(!O.styleEnabled())return this;for(var N=0;N-1}var vte=mte;function wte(x,m){var k=this.__data__,S=TS(k,x);return S<0?(++this.size,k.push([x,m])):k[S][1]=m,this}var yte=wte;function a8(x){var m=-1,k=x==null?0:x.length;for(this.clear();++m-1&&x%1==0&&x0&&this.spawn(M).updateStyle().emit("class"),k},addClass:function(m){return this.toggleClass(m,!0)},hasClass:function(m){var k=this[0];return k!=null&&k._private.classes.has(m)},toggleClass:function(m,k){ne(m)||(m=m.match(/\S+/g)||[]);for(var S=this,M=k===void 0,O=[],N=0,$=S.length;N<$;N++)for(var H=S[N],q=H._private.classes,Y=!1,Z=0;Z0&&this.spawn(O).updateStyle().emit("class"),S},removeClass:function(m){return this.toggleClass(m,!1)},flashClass:function(m,k){var S=this;if(k==null)k=250;else if(k===0)return S;return S.addClass(m),setTimeout(function(){S.removeClass(m)},k),S}};SS.className=SS.classNames=SS.classes;var Rc={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:`"(?:\\\\"|[^"])*"|'(?:\\\\'|[^'])*'`,number:ln,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};Rc.variable="(?:[\\w-.]|(?:\\\\"+Rc.metaChar+"))+",Rc.className="(?:[\\w-]|(?:\\\\"+Rc.metaChar+"))+",Rc.value=Rc.string+"|"+Rc.number,Rc.id=Rc.variable,function(){var x,m,k;for(x=Rc.comparatorOp.split("|"),k=0;k=0)&&m!=="="&&(Rc.comparatorOp+="|\\!"+m)}();var Pu=function(){return{checks:[]}},hs={GROUP:0,COLLECTION:1,FILTER:2,DATA_COMPARE:3,DATA_EXIST:4,DATA_BOOL:5,META_COMPARE:6,STATE:7,ID:8,CLASS:9,UNDIRECTED_EDGE:10,DIRECTED_EDGE:11,NODE_SOURCE:12,NODE_TARGET:13,NODE_NEIGHBOR:14,CHILD:15,DESCENDANT:16,PARENT:17,ANCESTOR:18,COMPOUND_SPLIT:19,TRUE:20},mI=[{selector:":selected",matches:function(m){return m.selected()}},{selector:":unselected",matches:function(m){return!m.selected()}},{selector:":selectable",matches:function(m){return m.selectable()}},{selector:":unselectable",matches:function(m){return!m.selectable()}},{selector:":locked",matches:function(m){return m.locked()}},{selector:":unlocked",matches:function(m){return!m.locked()}},{selector:":visible",matches:function(m){return m.visible()}},{selector:":hidden",matches:function(m){return!m.visible()}},{selector:":transparent",matches:function(m){return m.transparent()}},{selector:":grabbed",matches:function(m){return m.grabbed()}},{selector:":free",matches:function(m){return!m.grabbed()}},{selector:":removed",matches:function(m){return m.removed()}},{selector:":inside",matches:function(m){return!m.removed()}},{selector:":grabbable",matches:function(m){return m.grabbable()}},{selector:":ungrabbable",matches:function(m){return!m.grabbable()}},{selector:":animated",matches:function(m){return m.animated()}},{selector:":unanimated",matches:function(m){return!m.animated()}},{selector:":parent",matches:function(m){return m.isParent()}},{selector:":childless",matches:function(m){return m.isChildless()}},{selector:":child",matches:function(m){return m.isChild()}},{selector:":orphan",matches:function(m){return m.isOrphan()}},{selector:":nonorphan",matches:function(m){return m.isChild()}},{selector:":compound",matches:function(m){return m.isNode()?m.isParent():m.source().isParent()||m.target().isParent()}},{selector:":loop",matches:function(m){return m.isLoop()}},{selector:":simple",matches:function(m){return m.isSimple()}},{selector:":active",matches:function(m){return m.active()}},{selector:":inactive",matches:function(m){return!m.active()}},{selector:":backgrounding",matches:function(m){return m.backgrounding()}},{selector:":nonbackgrounding",matches:function(m){return!m.backgrounding()}}].sort(function(x,m){return zr(x.selector,m.selector)}),Ene=function(){for(var x={},m,k=0;k0&&Y.edgeCount>0)return hu("The selector `"+m+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(Y.edgeCount>1)return hu("The selector `"+m+"` is invalid because it uses multiple edge selectors"),!1;Y.edgeCount===1&&hu("The selector `"+m+"` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.")}return!0},Ane=function(){if(this.toStringCache!=null)return this.toStringCache;for(var m=function(Y){return Y??""},k=function(Y){return be(Y)?'"'+Y+'"':m(Y)},S=function(Y){return" "+Y+" "},M=function(Y,Z){var ce=Y.type,ve=Y.value;switch(ce){case hs.GROUP:{var me=m(ve);return me.substring(0,me.length-1)}case hs.DATA_COMPARE:{var Le=Y.field,_e=Y.operator;return"["+Le+S(m(_e))+k(ve)+"]"}case hs.DATA_BOOL:{var Ee=Y.operator,Be=Y.field;return"["+m(Ee)+Be+"]"}case hs.DATA_EXIST:{var Re=Y.field;return"["+Re+"]"}case hs.META_COMPARE:{var Ve=Y.operator,ct=Y.field;return"[["+ct+S(m(Ve))+k(ve)+"]]"}case hs.STATE:return ve;case hs.ID:return"#"+ve;case hs.CLASS:return"."+ve;case hs.PARENT:case hs.CHILD:return O(Y.parent,Z)+S(">")+O(Y.child,Z);case hs.ANCESTOR:case hs.DESCENDANT:return O(Y.ancestor,Z)+" "+O(Y.descendant,Z);case hs.COMPOUND_SPLIT:{var st=O(Y.left,Z),Ye=O(Y.subject,Z),mt=O(Y.right,Z);return st+(st.length>0?" ":"")+Ye+mt}case hs.TRUE:return""}},O=function(Y,Z){return Y.checks.reduce(function(ce,ve,me){return ce+(Z===Y&&me===0?"$":"")+M(ve,Z)},"")},N="",$=0;$1&&$=0&&(k=k.replace("!",""),Z=!0),k.indexOf("@")>=0&&(k=k.replace("@",""),Y=!0),(O||$||Y)&&(H=!O&&!N?"":""+m,q=""+S),Y&&(m=H=H.toLowerCase(),S=q=q.toLowerCase()),k){case"*=":M=H.indexOf(q)>=0;break;case"$=":M=H.indexOf(q,H.length-q.length)>=0;break;case"^=":M=H.indexOf(q)===0;break;case"=":M=m===S;break;case">":ce=!0,M=m>S;break;case">=":ce=!0,M=m>=S;break;case"<":ce=!0,M=m0;){var Y=M.shift();m(Y),O.add(Y.id()),$&&S(M,O,Y)}return x}function l$(x,m,k){if(k.isParent())for(var S=k._private.children,M=0;M1&&arguments[1]!==void 0?arguments[1]:!0;return yI(this,x,m,l$)};function h$(x,m,k){if(k.isChild()){var S=k._private.parent;m.has(S.id())||x.push(S)}}u8.forEachUp=function(x){var m=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return yI(this,x,m,h$)};function Pne(x,m,k){h$(x,m,k),l$(x,m,k)}u8.forEachUpAndDown=function(x){var m=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return yI(this,x,m,Pne)},u8.ancestors=u8.parents;var x1,f$;x1=f$={data:fu.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:fu.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:fu.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:fu.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:fu.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:fu.removeData({field:"rscratch",triggerEvent:!1}),id:function(){var m=this[0];if(m)return m._private.data.id}},x1.attr=x1.data,x1.removeAttr=x1.removeData;var ny=f$,J9={};function xI(x){return function(m){var k=this;if(m===void 0&&(m=!0),k.length!==0)if(k.isNode()&&!k.removed()){for(var S=0,M=k[0],O=M._private.edges,N=0;Nm}),minIndegree:l8("indegree",function(x,m){return xm}),minOutdegree:l8("outdegree",function(x,m){return xm})}),yt(J9,{totalDegree:function(m){for(var k=0,S=this.nodes(),M=0;M0,ce=Z;Z&&(Y=Y[0]);var ve=ce?Y.position():{x:0,y:0};k!==void 0?q.position(m,k+ve[m]):O!==void 0&&q.position({x:O.x+ve.x,y:O.y+ve.y})}else{var me=S.position(),Le=$?S.parent():null,_e=Le&&Le.length>0,Ee=_e;_e&&(Le=Le[0]);var Be=Ee?Le.position():{x:0,y:0};return O={x:me.x-Be.x,y:me.y-Be.y},m===void 0?O:O[m]}else if(!N)return;return this}},W2.modelPosition=W2.point=W2.position,W2.modelPositions=W2.points=W2.positions,W2.renderedPoint=W2.renderedPosition,W2.relativePoint=W2.relativePosition;var Bne=d$,h8,ry;h8=ry={},ry.renderedBoundingBox=function(x){var m=this.boundingBox(x),k=this.cy(),S=k.zoom(),M=k.pan(),O=m.x1*S+M.x,N=m.x2*S+M.x,$=m.y1*S+M.y,H=m.y2*S+M.y;return{x1:O,x2:N,y1:$,y2:H,w:N-O,h:H-$}},ry.dirtyCompoundBoundsCache=function(){var x=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,m=this.cy();return!m.styleEnabled()||!m.hasCompoundNodes()?this:(this.forEachUp(function(k){if(k.isParent()){var S=k._private;S.compoundBoundsClean=!1,S.bbCache=null,x||k.emitAndNotify("bounds")}}),this)},ry.updateCompoundBounds=function(){var x=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,m=this.cy();if(!m.styleEnabled()||!m.hasCompoundNodes())return this;if(!x&&m.batching())return this;function k(N){if(!N.isParent())return;var $=N._private,H=N.children(),q=N.pstyle("compound-sizing-wrt-labels").value==="include",Y={width:{val:N.pstyle("min-width").pfValue,left:N.pstyle("min-width-bias-left"),right:N.pstyle("min-width-bias-right")},height:{val:N.pstyle("min-height").pfValue,top:N.pstyle("min-height-bias-top"),bottom:N.pstyle("min-height-bias-bottom")}},Z=H.boundingBox({includeLabels:q,includeOverlays:!1,useCache:!1}),ce=$.position;(Z.w===0||Z.h===0)&&(Z={w:N.pstyle("width").pfValue,h:N.pstyle("height").pfValue},Z.x1=ce.x-Z.w/2,Z.x2=ce.x+Z.w/2,Z.y1=ce.y-Z.h/2,Z.y2=ce.y+Z.h/2);function ve(Je,Lt,Mt){var ut=0,Wt=0,Tt=Lt+Mt;return Je>0&&Tt>0&&(ut=Lt/Tt*Je,Wt=Mt/Tt*Je),{biasDiff:ut,biasComplementDiff:Wt}}function me(Je,Lt,Mt,ut){if(Mt.units==="%")switch(ut){case"width":return Je>0?Mt.pfValue*Je:0;case"height":return Lt>0?Mt.pfValue*Lt:0;case"average":return Je>0&&Lt>0?Mt.pfValue*(Je+Lt)/2:0;case"min":return Je>0&&Lt>0?Je>Lt?Mt.pfValue*Lt:Mt.pfValue*Je:0;case"max":return Je>0&&Lt>0?Je>Lt?Mt.pfValue*Je:Mt.pfValue*Lt:0;default:return 0}else return Mt.units==="px"?Mt.pfValue:0}var Le=Y.width.left.value;Y.width.left.units==="px"&&Y.width.val>0&&(Le=Le*100/Y.width.val);var _e=Y.width.right.value;Y.width.right.units==="px"&&Y.width.val>0&&(_e=_e*100/Y.width.val);var Ee=Y.height.top.value;Y.height.top.units==="px"&&Y.height.val>0&&(Ee=Ee*100/Y.height.val);var Be=Y.height.bottom.value;Y.height.bottom.units==="px"&&Y.height.val>0&&(Be=Be*100/Y.height.val);var Re=ve(Y.width.val-Z.w,Le,_e),Ve=Re.biasDiff,ct=Re.biasComplementDiff,st=ve(Y.height.val-Z.h,Ee,Be),Ye=st.biasDiff,mt=st.biasComplementDiff;$.autoPadding=me(Z.w,Z.h,N.pstyle("padding"),N.pstyle("padding-relative-to").value),$.autoWidth=Math.max(Z.w,Y.width.val),ce.x=(-Ve+Z.x1+Z.x2+ct)/2,$.autoHeight=Math.max(Z.h,Y.height.val),ce.y=(-Ye+Z.y1+Z.y2+mt)/2}for(var S=0;Sm.x2?M:m.x2,m.y1=Sm.y2?O:m.y2,m.w=m.x2-m.x1,m.h=m.y2-m.y1)},b5=function(m,k){return k==null?m:Y2(m,k.x1,k.y1,k.x2,k.y2)},Z9=function(m,k,S){return K2(m,k,S)},_S=function(m,k,S){if(!k.cy().headless()){var M=k._private,O=M.rstyle,N=O.arrowWidth/2,$=k.pstyle(S+"-arrow-shape").value,H,q;if($!=="none"){S==="source"?(H=O.srcX,q=O.srcY):S==="target"?(H=O.tgtX,q=O.tgtY):(H=O.midX,q=O.midY);var Y=M.arrowBounds=M.arrowBounds||{},Z=Y[S]=Y[S]||{};Z.x1=H-N,Z.y1=q-N,Z.x2=H+N,Z.y2=q+N,Z.w=Z.x2-Z.x1,Z.h=Z.y2-Z.y1,fS(Z,1),Y2(m,Z.x1,Z.y1,Z.x2,Z.y2)}}},kI=function(m,k,S){if(!k.cy().headless()){var M;S?M=S+"-":M="";var O=k._private,N=O.rstyle,$=k.pstyle(M+"label").strValue;if($){var H=k.pstyle("text-halign"),q=k.pstyle("text-valign"),Y=Z9(N,"labelWidth",S),Z=Z9(N,"labelHeight",S),ce=Z9(N,"labelX",S),ve=Z9(N,"labelY",S),me=k.pstyle(M+"text-margin-x").pfValue,Le=k.pstyle(M+"text-margin-y").pfValue,_e=k.isEdge(),Ee=k.pstyle(M+"text-rotation"),Be=k.pstyle("text-outline-width").pfValue,Re=k.pstyle("text-border-width").pfValue,Ve=Re/2,ct=k.pstyle("text-background-padding").pfValue,st=2,Ye=Z,mt=Y,Je=mt/2,Lt=Ye/2,Mt,ut,Wt,Tt;if(_e)Mt=ce-Je,ut=ce+Je,Wt=ve-Lt,Tt=ve+Lt;else{switch(H.value){case"left":Mt=ce-mt,ut=ce;break;case"center":Mt=ce-Je,ut=ce+Je;break;case"right":Mt=ce,ut=ce+mt;break}switch(q.value){case"top":Wt=ve-Ye,Tt=ve;break;case"center":Wt=ve-Lt,Tt=ve+Lt;break;case"bottom":Wt=ve,Tt=ve+Ye;break}}Mt+=me-Math.max(Be,Ve)-ct-st,ut+=me+Math.max(Be,Ve)+ct+st,Wt+=Le-Math.max(Be,Ve)-ct-st,Tt+=Le+Math.max(Be,Ve)+ct+st;var _n=S||"main",hn=O.labelBounds,Yt=hn[_n]=hn[_n]||{};Yt.x1=Mt,Yt.y1=Wt,Yt.x2=ut,Yt.y2=Tt,Yt.w=ut-Mt,Yt.h=Tt-Wt;var Dn=_e&&Ee.strValue==="autorotate",ir=Ee.pfValue!=null&&Ee.pfValue!==0;if(Dn||ir){var vr=Dn?Z9(O.rstyle,"labelAngle",S):Ee.pfValue,Nn=Math.cos(vr),pr=Math.sin(vr),Er=(Mt+ut)/2,Mr=(Wt+Tt)/2;if(!_e){switch(H.value){case"left":Er=ut;break;case"right":Er=Mt;break}switch(q.value){case"top":Mr=Tt;break;case"bottom":Mr=Wt;break}}var Cr=function(pa,Mi){return pa=pa-Er,Mi=Mi-Mr,{x:pa*Nn-Mi*pr+Er,y:pa*pr+Mi*Nn+Mr}},Or=Cr(Mt,Wt),Wn=Cr(Mt,Tt),br=Cr(ut,Wt),Sr=Cr(ut,Tt);Mt=Math.min(Or.x,Wn.x,br.x,Sr.x),ut=Math.max(Or.x,Wn.x,br.x,Sr.x),Wt=Math.min(Or.y,Wn.y,br.y,Sr.y),Tt=Math.max(Or.y,Wn.y,br.y,Sr.y)}var Nr=_n+"Rot",Si=hn[Nr]=hn[Nr]||{};Si.x1=Mt,Si.y1=Wt,Si.x2=ut,Si.y2=Tt,Si.w=ut-Mt,Si.h=Tt-Wt,Y2(m,Mt,Wt,ut,Tt),Y2(O.labelBounds.all,Mt,Wt,ut,Tt)}return m}},Fne=function(m,k){if(!k.cy().headless()){var S=k.pstyle("outline-opacity").value,M=k.pstyle("outline-width").value;if(S>0&&M>0){var O=k.pstyle("outline-offset").value,N=k.pstyle("shape").value,$=M+O,H=(m.w+$*2)/m.w,q=(m.h+$*2)/m.h,Y=0,Z=0;["diamond","pentagon","round-triangle"].includes(N)?(H=(m.w+$*2.4)/m.w,Z=-$/3.6):["concave-hexagon","rhomboid","right-rhomboid"].includes(N)?H=(m.w+$*2.4)/m.w:N==="star"?(H=(m.w+$*2.8)/m.w,q=(m.h+$*2.6)/m.h,Z=-$/3.8):N==="triangle"?(H=(m.w+$*2.8)/m.w,q=(m.h+$*2.4)/m.h,Z=-$/1.4):N==="vee"&&(H=(m.w+$*4.4)/m.w,q=(m.h+$*3.8)/m.h,Z=-$*.5);var ce=m.h*q-m.h,ve=m.w*H-m.w;if(dS(m,[Math.ceil(ce/2),Math.ceil(ve/2)]),Y!=0||Z!==0){var me=pZ(m,Y,Z);dj(m,me)}}}},Rne=function(m,k){var S=m._private.cy,M=S.styleEnabled(),O=S.headless(),N=Wd(),$=m._private,H=m.isNode(),q=m.isEdge(),Y,Z,ce,ve,me,Le,_e=$.rstyle,Ee=H&&M?m.pstyle("bounds-expansion").pfValue:[0],Be=function(fs){return fs.pstyle("display").value!=="none"},Re=!M||Be(m)&&(!q||Be(m.source())&&Be(m.target()));if(Re){var Ve=0,ct=0;M&&k.includeOverlays&&(Ve=m.pstyle("overlay-opacity").value,Ve!==0&&(ct=m.pstyle("overlay-padding").value));var st=0,Ye=0;M&&k.includeUnderlays&&(st=m.pstyle("underlay-opacity").value,st!==0&&(Ye=m.pstyle("underlay-padding").value));var mt=Math.max(ct,Ye),Je=0,Lt=0;if(M&&(Je=m.pstyle("width").pfValue,Lt=Je/2),H&&k.includeNodes){var Mt=m.position();me=Mt.x,Le=Mt.y;var ut=m.outerWidth(),Wt=ut/2,Tt=m.outerHeight(),_n=Tt/2;Y=me-Wt,Z=me+Wt,ce=Le-_n,ve=Le+_n,Y2(N,Y,ce,Z,ve),M&&k.includeOutlines&&Fne(N,m)}else if(q&&k.includeEdges)if(M&&!O){var hn=m.pstyle("curve-style").strValue;if(Y=Math.min(_e.srcX,_e.midX,_e.tgtX),Z=Math.max(_e.srcX,_e.midX,_e.tgtX),ce=Math.min(_e.srcY,_e.midY,_e.tgtY),ve=Math.max(_e.srcY,_e.midY,_e.tgtY),Y-=Lt,Z+=Lt,ce-=Lt,ve+=Lt,Y2(N,Y,ce,Z,ve),hn==="haystack"){var Yt=_e.haystackPts;if(Yt&&Yt.length===2){if(Y=Yt[0].x,ce=Yt[0].y,Z=Yt[1].x,ve=Yt[1].y,Y>Z){var Dn=Y;Y=Z,Z=Dn}if(ce>ve){var ir=ce;ce=ve,ve=ir}Y2(N,Y-Lt,ce-Lt,Z+Lt,ve+Lt)}}else if(hn==="bezier"||hn==="unbundled-bezier"||hn==="segments"||hn==="taxi"){var vr;switch(hn){case"bezier":case"unbundled-bezier":vr=_e.bezierPts;break;case"segments":case"taxi":vr=_e.linePts;break}if(vr!=null)for(var Nn=0;NnZ){var Wn=Y;Y=Z,Z=Wn}if(ce>ve){var br=ce;ce=ve,ve=br}Y-=Lt,Z+=Lt,ce-=Lt,ve+=Lt,Y2(N,Y,ce,Z,ve)}if(M&&k.includeEdges&&q&&(_S(N,m,"mid-source"),_S(N,m,"mid-target"),_S(N,m,"source"),_S(N,m,"target")),M){var Sr=m.pstyle("ghost").value==="yes";if(Sr){var Nr=m.pstyle("ghost-offset-x").pfValue,Si=m.pstyle("ghost-offset-y").pfValue;Y2(N,N.x1+Nr,N.y1+Si,N.x2+Nr,N.y2+Si)}}var ys=$.bodyBounds=$.bodyBounds||{};gj(ys,N),dS(ys,Ee),fS(ys,1),M&&(Y=N.x1,Z=N.x2,ce=N.y1,ve=N.y2,Y2(N,Y-mt,ce-mt,Z+mt,ve+mt));var pa=$.overlayBounds=$.overlayBounds||{};gj(pa,N),dS(pa,Ee),fS(pa,1);var Mi=$.labelBounds=$.labelBounds||{};Mi.all!=null?gZ(Mi.all):Mi.all=Wd(),M&&k.includeLabels&&(k.includeMainLabels&&kI(N,m,null),q&&(k.includeSourceLabels&&kI(N,m,"source"),k.includeTargetLabels&&kI(N,m,"target")))}return N.x1=jp(N.x1),N.y1=jp(N.y1),N.x2=jp(N.x2),N.y2=jp(N.y2),N.w=jp(N.x2-N.x1),N.h=jp(N.y2-N.y1),N.w>0&&N.h>0&&Re&&(dS(N,Ee),fS(N,1)),N},b$=function(m){var k=0,S=function(N){return(N?1:0)<0&&arguments[0]!==void 0?arguments[0]:Xne,m=arguments.length>1?arguments[1]:void 0,k=0;k=0;$--)N($);return this},X2.removeAllListeners=function(){return this.removeListener("*")},X2.emit=X2.trigger=function(x,m,k){var S=this.listeners,M=S.length;return this.emitting++,ne(m)||(m=[m]),MS(this,function(O,N){k!=null&&(S=[{event:N.event,type:N.type,namespace:N.namespace,callback:k}],M=S.length);for(var $=function(Y){var Z=S[Y];if(Z.type===N.type&&(!Z.namespace||Z.namespace===N.namespace||Z.namespace===Yne)&&O.eventMatches(O.context,Z,N)){var ce=[N];m!=null&&uj(ce,m),O.beforeEmit(O.context,Z,N),Z.conf&&Z.conf.one&&(O.listeners=O.listeners.filter(function(Le){return Le!==Z}));var ve=O.callbackContext(O.context,Z,N),me=Z.callback.apply(ve,ce);O.afterEmit(O.context,Z,N),me===!1&&(N.stopPropagation(),N.preventDefault())}},H=0;H1&&!N){var $=this.length-1,H=this[$],q=H._private.data.id;this[$]=void 0,this[m]=H,O.set(q,{ele:H,index:m})}return this.length--,this},unmergeOne:function(m){m=m[0];var k=this._private,S=m._private.data.id,M=k.map,O=M.get(S);if(!O)return this;var N=O.index;return this.unmergeAt(N),this},unmerge:function(m){var k=this._private.cy;if(!m)return this;if(m&&be(m)){var S=m;m=k.mutableElements().filter(S)}for(var M=0;M=0;k--){var S=this[k];m(S)&&this.unmergeAt(k)}return this},map:function(m,k){for(var S=[],M=this,O=0;OS&&(S=H,M=$)}return{value:S,ele:M}},min:function(m,k){for(var S=1/0,M,O=this,N=0;N=0&&O"u"?"undefined":u(Symbol))!=m&&u(Symbol.iterator)!=m;k&&(DS[Symbol.iterator]=function(){var S=this,M={value:void 0,done:!1},O=0,N=this.length;return b({next:function(){return O1&&arguments[1]!==void 0?arguments[1]:!0,S=this[0],M=S.cy();if(M.styleEnabled()&&S){this.cleanStyle();var O=S._private.style[m];return O??(k?M.style().getDefaultProperty(m):null)}},numericStyle:function(m){var k=this[0];if(k.cy().styleEnabled()&&k){var S=k.pstyle(m);return S.pfValue!==void 0?S.pfValue:S.value}},numericStyleUnits:function(m){var k=this[0];if(k.cy().styleEnabled()&&k)return k.pstyle(m).units},renderedStyle:function(m){var k=this.cy();if(!k.styleEnabled())return this;var S=this[0];if(S)return k.style().getRenderedStyle(S,m)},style:function(m,k){var S=this.cy();if(!S.styleEnabled())return this;var M=!1,O=S.style();if(se(m)){var N=m;O.applyBypass(this,N,M),this.emitAndNotify("style")}else if(be(m))if(k===void 0){var $=this[0];return $?O.getStylePropertyValue($,m):void 0}else O.applyBypass(this,m,k,M),this.emitAndNotify("style");else if(m===void 0){var H=this[0];return H?O.getRawStyle(H):void 0}return this},removeStyle:function(m){var k=this.cy();if(!k.styleEnabled())return this;var S=!1,M=k.style(),O=this;if(m===void 0)for(var N=0;N0&&m.push(Y[0]),m.push($[0])}return this.spawn(m,!0).filter(x)},"neighborhood"),closedNeighborhood:function(m){return this.neighborhood().add(this).filter(m)},openNeighborhood:function(m){return this.neighborhood(m)}}),k1.neighbourhood=k1.neighborhood,k1.closedNeighbourhood=k1.closedNeighborhood,k1.openNeighbourhood=k1.openNeighborhood,yt(k1,{source:Rp(function(m){var k=this[0],S;return k&&(S=k._private.source||k.cy().collection()),S&&m?S.filter(m):S},"source"),target:Rp(function(m){var k=this[0],S;return k&&(S=k._private.target||k.cy().collection()),S&&m?S.filter(m):S},"target"),sources:D$({attr:"source"}),targets:D$({attr:"target"})});function D$(x){return function(k){for(var S=[],M=0;M0);return N},component:function(){var m=this[0];return m.cy().mutableElements().components(m)[0]}}),k1.componentsOf=k1.components;var V0=function(m,k){var S=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,M=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(m===void 0){ch("A collection must have a reference to the core");return}var O=new wm,N=!1;if(!k)k=[];else if(k.length>0&&se(k[0])&&!U(k[0])){N=!0;for(var $=[],H=new Q7,q=0,Y=k.length;q0&&arguments[0]!==void 0?arguments[0]:!0,m=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,k=this,S=k.cy(),M=S._private,O=[],N=[],$,H=0,q=k.length;H0){for(var ir=$.length===k.length?k:new V0(S,$),vr=0;vr0&&arguments[0]!==void 0?arguments[0]:!0,m=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,k=this,S=[],M={},O=k._private.cy;function N(Tt){for(var _n=Tt._private.edges,hn=0;hn<_n.length;hn++)H(_n[hn])}function $(Tt){for(var _n=Tt._private.children,hn=0;hn<_n.length;hn++)H(_n[hn])}function H(Tt){var _n=M[Tt.id()];m&&Tt.removed()||_n||(M[Tt.id()]=!0,Tt.isNode()?(S.push(Tt),N(Tt),$(Tt)):S.unshift(Tt))}for(var q=0,Y=k.length;q0&&(x?Mt.emitAndNotify("remove"):m&&Mt.emit("remove"));for(var ut=0;ut0?ut=Tt:Mt=Tt;while(Math.abs(Wt)>N&&++_n<$);return Tt}function ct(Lt){for(var Mt=0,ut=1,Wt=H-1;ut!==Wt&&ce[ut]<=Lt;++ut)Mt+=q;--ut;var Tt=(Lt-ce[ut])/(ce[ut+1]-ce[ut]),_n=Mt+Tt*q,hn=Ee(_n,x,k);return hn>=O?Be(Lt,_n):hn===0?_n:Ve(Lt,Mt,Mt+q)}var st=!1;function Ye(){st=!0,(x!==m||k!==S)&&Re()}var mt=function(Mt){return st||Ye(),x===m&&k===S?Mt:Mt===0?0:Mt===1?1:_e(ct(Mt),m,S)};mt.getControlPoints=function(){return[{x,y:m},{x:k,y:S}]};var Je="generateBezier("+[x,m,k,S]+")";return mt.toString=function(){return Je},mt}/*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */var ore=function(){function x(S){return-S.tension*S.x-S.friction*S.v}function m(S,M,O){var N={x:S.x+O.dx*M,v:S.v+O.dv*M,tension:S.tension,friction:S.friction};return{dx:N.v,dv:x(N)}}function k(S,M){var O={dx:S.v,dv:x(S)},N=m(S,M*.5,O),$=m(S,M*.5,N),H=m(S,M,$),q=1/6*(O.dx+2*(N.dx+$.dx)+H.dx),Y=1/6*(O.dv+2*(N.dv+$.dv)+H.dv);return S.x=S.x+q*M,S.v=S.v+Y*M,S}return function S(M,O,N){var $={x:-1,v:0,tension:null,friction:null},H=[0],q=0,Y=1/1e4,Z=16/1e3,ce,ve,me;for(M=parseFloat(M)||500,O=parseFloat(O)||20,N=N||null,$.tension=M,$.friction=O,ce=N!==null,ce?(q=S(M,O),ve=q/N*Z):ve=Z;me=k(me||$,ve),H.push(1+me.x),q+=16,Math.abs(me.x)>Y&&Math.abs(me.v)>Y;);return ce?function(Le){return H[Le*(H.length-1)|0]}:q}}(),rl=function(m,k,S,M){var O=are(m,k,S,M);return function(N,$,H){return N+($-N)*O(H)}},BS={linear:function(m,k,S){return m+(k-m)*S},ease:rl(.25,.1,.25,1),"ease-in":rl(.42,0,1,1),"ease-out":rl(0,0,.58,1),"ease-in-out":rl(.42,0,.58,1),"ease-in-sine":rl(.47,0,.745,.715),"ease-out-sine":rl(.39,.575,.565,1),"ease-in-out-sine":rl(.445,.05,.55,.95),"ease-in-quad":rl(.55,.085,.68,.53),"ease-out-quad":rl(.25,.46,.45,.94),"ease-in-out-quad":rl(.455,.03,.515,.955),"ease-in-cubic":rl(.55,.055,.675,.19),"ease-out-cubic":rl(.215,.61,.355,1),"ease-in-out-cubic":rl(.645,.045,.355,1),"ease-in-quart":rl(.895,.03,.685,.22),"ease-out-quart":rl(.165,.84,.44,1),"ease-in-out-quart":rl(.77,0,.175,1),"ease-in-quint":rl(.755,.05,.855,.06),"ease-out-quint":rl(.23,1,.32,1),"ease-in-out-quint":rl(.86,0,.07,1),"ease-in-expo":rl(.95,.05,.795,.035),"ease-out-expo":rl(.19,1,.22,1),"ease-in-out-expo":rl(1,0,0,1),"ease-in-circ":rl(.6,.04,.98,.335),"ease-out-circ":rl(.075,.82,.165,1),"ease-in-out-circ":rl(.785,.135,.15,.86),spring:function(m,k,S){if(S===0)return BS.linear;var M=ore(m,k,S);return function(O,N,$){return O+(N-O)*M($)}},"cubic-bezier":rl};function N$(x,m,k,S,M){if(S===1||m===k)return k;var O=M(m,k,S);return x==null||((x.roundValue||x.color)&&(O=Math.round(O)),x.min!==void 0&&(O=Math.max(O,x.min)),x.max!==void 0&&(O=Math.min(O,x.max))),O}function P$(x,m){return x.pfValue!=null||x.value!=null?x.pfValue!=null&&(m==null||m.type.units!=="%")?x.pfValue:x.value:x}function g8(x,m,k,S,M){var O=M!=null?M.type:null;k<0?k=0:k>1&&(k=1);var N=P$(x,M),$=P$(m,M);if(X(N)&&X($))return N$(O,N,$,k,S);if(ne(N)&&ne($)){for(var H=[],q=0;q<$.length;q++){var Y=N[q],Z=$[q];if(Y!=null&&Z!=null){var ce=N$(O,Y,Z,k,S);H.push(ce)}else H.push(Z)}return H}}function cre(x,m,k,S){var M=!S,O=x._private,N=m._private,$=N.easing,H=N.startTime,q=S?x:x.cy(),Y=q.style();if(!N.easingImpl)if($==null)N.easingImpl=BS.linear;else{var Z;if(be($)){var ce=Y.parse("transition-timing-function",$);Z=ce.value}else Z=$;var ve,me;be(Z)?(ve=Z,me=[]):(ve=Z[1],me=Z.slice(2).map(function(ir){return+ir})),me.length>0?(ve==="spring"&&me.push(N.duration),N.easingImpl=BS[ve].apply(null,me)):N.easingImpl=BS[ve]}var Le=N.easingImpl,_e;if(N.duration===0?_e=1:_e=(k-H)/N.duration,N.applying&&(_e=N.progress),_e<0?_e=0:_e>1&&(_e=1),N.delay==null){var Ee=N.startPosition,Be=N.position;if(Be&&M&&!x.locked()){var Re={};ak(Ee.x,Be.x)&&(Re.x=g8(Ee.x,Be.x,_e,Le)),ak(Ee.y,Be.y)&&(Re.y=g8(Ee.y,Be.y,_e,Le)),x.position(Re)}var Ve=N.startPan,ct=N.pan,st=O.pan,Ye=ct!=null&&S;Ye&&(ak(Ve.x,ct.x)&&(st.x=g8(Ve.x,ct.x,_e,Le)),ak(Ve.y,ct.y)&&(st.y=g8(Ve.y,ct.y,_e,Le)),x.emit("pan"));var mt=N.startZoom,Je=N.zoom,Lt=Je!=null&&S;Lt&&(ak(mt,Je)&&(O.zoom=U9(O.minZoom,g8(mt,Je,_e,Le),O.maxZoom)),x.emit("zoom")),(Ye||Lt)&&x.emit("viewport");var Mt=N.style;if(Mt&&Mt.length>0&&M){for(var ut=0;ut=0;Ye--){var mt=st[Ye];mt()}st.splice(0,st.length)},Be=ve.length-1;Be>=0;Be--){var Re=ve[Be],Ve=Re._private;if(Ve.stopped){ve.splice(Be,1),Ve.hooked=!1,Ve.playing=!1,Ve.started=!1,Ee(Ve.frames);continue}!Ve.playing&&!Ve.applying||(Ve.playing&&Ve.applying&&(Ve.applying=!1),Ve.started||ure(Y,Re,x),cre(Y,Re,x,Z),Ve.applying&&(Ve.applying=!1),Ee(Ve.frames),Ve.step!=null&&Ve.step(x),Re.completed()&&(ve.splice(Be,1),Ve.hooked=!1,Ve.playing=!1,Ve.started=!1,Ee(Ve.completes)),Le=!0)}return!Z&&ve.length===0&&me.length===0&&S.push(Y),Le}for(var O=!1,N=0;N0?m.notify("draw",k):m.notify("draw")),k.unmerge(S),m.emit("step")}var lre={animate:fu.animate(),animation:fu.animation(),animated:fu.animated(),clearQueue:fu.clearQueue(),delay:fu.delay(),delayAnimation:fu.delayAnimation(),stop:fu.stop(),addToAnimationPool:function(m){var k=this;k.styleEnabled()&&k._private.aniEles.merge(m)},stopAnimationLoop:function(){this._private.animationsRunning=!1},startAnimationLoop:function(){var m=this;if(m._private.animationsRunning=!0,!m.styleEnabled())return;function k(){m._private.animationsRunning&&z0(function(O){B$(O,m),k()})}var S=m.renderer();S&&S.beforeRender?S.beforeRender(function(O,N){B$(N,m)},S.beforeRenderPriorities.animations):k()}},hre={qualifierCompare:function(m,k){return m==null||k==null?m==null&&k==null:m.sameText(k)},eventMatches:function(m,k,S){var M=k.qualifier;return M!=null?m!==S.target&&U(S.target)&&M.matches(S.target):!0},addEventFields:function(m,k){k.cy=m,k.target=m},callbackContext:function(m,k,S){return k.qualifier!=null?S.target:m}},FS=function(m){return be(m)?new ey(m):m},F$={createEmitter:function(){var m=this._private;return m.emitter||(m.emitter=new LS(hre,this)),this},emitter:function(){return this._private.emitter},on:function(m,k,S){return this.emitter().on(m,FS(k),S),this},removeListener:function(m,k,S){return this.emitter().removeListener(m,FS(k),S),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},one:function(m,k,S){return this.emitter().one(m,FS(k),S),this},once:function(m,k,S){return this.emitter().one(m,FS(k),S),this},emit:function(m,k){return this.emitter().emit(m,k),this},emitAndNotify:function(m,k){return this.emit(m),this.notify(m,k),this}};fu.eventAliasesOn(F$);var MI={png:function(m){var k=this._private.renderer;return m=m||{},k.png(m)},jpg:function(m){var k=this._private.renderer;return m=m||{},m.bg=m.bg||"#fff",k.jpg(m)}};MI.jpeg=MI.jpg;var RS={layout:function(m){var k=this;if(m==null){ch("Layout options must be specified to make a layout");return}if(m.name==null){ch("A `name` must be specified to make a layout");return}var S=m.name,M=k.extension("layout",S);if(M==null){ch("No such layout `"+S+"` found. Did you forget to import it and `cytoscape.use()` it?");return}var O;be(m.eles)?O=k.$(m.eles):O=m.eles!=null?m.eles:k.$();var N=new M(yt({},m,{cy:k,eles:O}));return N}};RS.createLayout=RS.makeLayout=RS.layout;var fre={notify:function(m,k){var S=this._private;if(this.batching()){S.batchNotifications=S.batchNotifications||{};var M=S.batchNotifications[m]=S.batchNotifications[m]||this.collection();k!=null&&M.merge(k);return}if(S.notificationsEnabled){var O=this.renderer();this.destroyed()||!O||O.notify(m,k)}},notifications:function(m){var k=this._private;return m===void 0?k.notificationsEnabled:(k.notificationsEnabled=!!m,this)},noNotifications:function(m){this.notifications(!1),m(),this.notifications(!0)},batching:function(){return this._private.batchCount>0},startBatch:function(){var m=this._private;return m.batchCount==null&&(m.batchCount=0),m.batchCount===0&&(m.batchStyleEles=this.collection(),m.batchNotifications={}),m.batchCount++,this},endBatch:function(){var m=this._private;if(m.batchCount===0)return this;if(m.batchCount--,m.batchCount===0){m.batchStyleEles.updateStyle();var k=this.renderer();Object.keys(m.batchNotifications).forEach(function(S){var M=m.batchNotifications[S];M.empty()?k.notify(S):k.notify(S,M)})}return this},batch:function(m){return this.startBatch(),m(),this.endBatch(),this},batchData:function(m){var k=this;return this.batch(function(){for(var S=Object.keys(m),M=0;M0;)k.removeChild(k.childNodes[0]);m._private.renderer=null,m.mutableElements().forEach(function(S){var M=S._private;M.rscratch={},M.rstyle={},M.animation.current=[],M.animation.queue=[]})},onRender:function(m){return this.on("render",m)},offRender:function(m){return this.off("render",m)}};DI.invalidateDimensions=DI.resize;var jS={collection:function(m,k){return be(m)?this.$(m):xe(m)?m.collection():ne(m)?(k||(k={}),new V0(this,m,k.unique,k.removed)):new V0(this)},nodes:function(m){var k=this.$(function(S){return S.isNode()});return m?k.filter(m):k},edges:function(m){var k=this.$(function(S){return S.isEdge()});return m?k.filter(m):k},$:function(m){var k=this._private.elements;return m?k.filter(m):k.spawnSelf()},mutableElements:function(){return this._private.elements}};jS.elements=jS.filter=jS.$;var E1={},ok="t",gre="f";E1.apply=function(x){for(var m=this,k=m._private,S=k.cy,M=S.collection(),O=0;O0;if(ce||Z&&ve){var me=void 0;ce&&ve||ce?me=q.properties:ve&&(me=q.mappedProperties);for(var Le=0;Le1&&(Ve=1),$.color){var st=S.valueMin[0],Ye=S.valueMax[0],mt=S.valueMin[1],Je=S.valueMax[1],Lt=S.valueMin[2],Mt=S.valueMax[2],ut=S.valueMin[3]==null?1:S.valueMin[3],Wt=S.valueMax[3]==null?1:S.valueMax[3],Tt=[Math.round(st+(Ye-st)*Ve),Math.round(mt+(Je-mt)*Ve),Math.round(Lt+(Mt-Lt)*Ve),Math.round(ut+(Wt-ut)*Ve)];O={bypass:S.bypass,name:S.name,value:Tt,strValue:"rgb("+Tt[0]+", "+Tt[1]+", "+Tt[2]+")"}}else if($.number){var _n=S.valueMin+(S.valueMax-S.valueMin)*Ve;O=this.parse(S.name,_n,S.bypass,ce)}else return!1;if(!O)return Le(),!1;O.mapping=S,S=O;break}case N.data:{for(var hn=S.field.split("."),Yt=Z.data,Dn=0;Dn0&&O>0){for(var $={},H=!1,q=0;q0?x.delayAnimation(N).play().promise().then(Re):Re()}).then(function(){return x.animation({style:$,duration:O,easing:x.pstyle("transition-timing-function").value,queue:!1}).play().promise()}).then(function(){k.removeBypasses(x,M),x.emitAndNotify("style"),S.transitioning=!1})}else S.transitioning&&(this.removeBypasses(x,M),x.emitAndNotify("style"),S.transitioning=!1)},E1.checkTrigger=function(x,m,k,S,M,O){var N=this.properties[m],$=M(N);$!=null&&$(k,S)&&O(N)},E1.checkZOrderTrigger=function(x,m,k,S){var M=this;this.checkTrigger(x,m,k,S,function(O){return O.triggersZOrder},function(){M._private.cy.notify("zorder",x)})},E1.checkBoundsTrigger=function(x,m,k,S){this.checkTrigger(x,m,k,S,function(M){return M.triggersBounds},function(M){x.dirtyCompoundBoundsCache(),x.dirtyBoundingBoxCache(),M.triggersBoundsOfParallelBeziers&&m==="curve-style"&&(k==="bezier"||S==="bezier")&&x.parallelEdges().forEach(function(O){O.isBundledBezier()&&O.dirtyBoundingBoxCache()}),M.triggersBoundsOfConnectedEdges&&m==="display"&&(k==="none"||S==="none")&&x.connectedEdges().forEach(function(O){O.dirtyBoundingBoxCache()})})},E1.checkTriggers=function(x,m,k,S){x.dirtyStyleCache(),this.checkZOrderTrigger(x,m,k,S),this.checkBoundsTrigger(x,m,k,S)};var ck={};ck.applyBypass=function(x,m,k,S){var M=this,O=[],N=!0;if(m==="*"||m==="**"){if(k!==void 0)for(var $=0;$M.length?S=S.substr(M.length):S=""}function H(){O.length>N.length?O=O.substr(N.length):O=""}for(;;){var q=S.match(/^\s*$/);if(q)break;var Y=S.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!Y){hu("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+S);break}M=Y[0];var Z=Y[1];if(Z!=="core"){var ce=new ey(Z);if(ce.invalid){hu("Skipping parsing of block: Invalid selector found in string stylesheet: "+Z),$();continue}}var ve=Y[2],me=!1;O=ve;for(var Le=[];;){var _e=O.match(/^\s*$/);if(_e)break;var Ee=O.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!Ee){hu("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+ve),me=!0;break}N=Ee[0];var Be=Ee[1],Re=Ee[2],Ve=m.properties[Be];if(!Ve){hu("Skipping property: Invalid property name in: "+N),H();continue}var ct=k.parse(Be,Re);if(!ct){hu("Skipping property: Invalid property definition in: "+N),H();continue}Le.push({name:Be,val:Re}),H()}if(me){$();break}k.selector(Z);for(var st=0;st=7&&m[0]==="d"&&(Y=new RegExp($.data.regex).exec(m))){if(k)return!1;var ce=$.data;return{name:x,value:Y,strValue:""+m,mapped:ce,field:Y[1],bypass:k}}else if(m.length>=10&&m[0]==="m"&&(Z=new RegExp($.mapData.regex).exec(m))){if(k||q.multiple)return!1;var ve=$.mapData;if(!(q.color||q.number))return!1;var me=this.parse(x,Z[4]);if(!me||me.mapped)return!1;var Le=this.parse(x,Z[5]);if(!Le||Le.mapped)return!1;if(me.pfValue===Le.pfValue||me.strValue===Le.strValue)return hu("`"+x+": "+m+"` is not a valid mapper because the output range is zero; converting to `"+x+": "+me.strValue+"`"),this.parse(x,me.strValue);if(q.color){var _e=me.value,Ee=Le.value,Be=_e[0]===Ee[0]&&_e[1]===Ee[1]&&_e[2]===Ee[2]&&(_e[3]===Ee[3]||(_e[3]==null||_e[3]===1)&&(Ee[3]==null||Ee[3]===1));if(Be)return!1}return{name:x,value:Z,strValue:""+m,mapped:ve,field:Z[1],fieldMin:parseFloat(Z[2]),fieldMax:parseFloat(Z[3]),valueMin:me.value,valueMax:Le.value,bypass:k}}}if(q.multiple&&S!=="multiple"){var Re;if(H?Re=m.split(/\s+/):ne(m)?Re=m:Re=[m],q.evenMultiple&&Re.length%2!==0)return null;for(var Ve=[],ct=[],st=[],Ye="",mt=!1,Je=0;Je0?" ":"")+Lt.strValue}return q.validate&&!q.validate(Ve,ct)?null:q.singleEnum&&mt?Ve.length===1&&be(Ve[0])?{name:x,value:Ve[0],strValue:Ve[0],bypass:k}:null:{name:x,value:Ve,pfValue:st,strValue:Ye,bypass:k,units:ct}}var Mt=function(){for(var Sr=0;Srq.max||q.strictMax&&m===q.max))return null;var hn={name:x,value:m,strValue:""+m+(ut||""),units:ut,bypass:k};return q.unitless||ut!=="px"&&ut!=="em"?hn.pfValue=m:hn.pfValue=ut==="px"||!ut?m:this.getEmSizeInPixels()*m,(ut==="ms"||ut==="s")&&(hn.pfValue=ut==="ms"?m:1e3*m),(ut==="deg"||ut==="rad")&&(hn.pfValue=ut==="rad"?m:lZ(m)),ut==="%"&&(hn.pfValue=m/100),hn}else if(q.propList){var Yt=[],Dn=""+m;if(Dn!=="none"){for(var ir=Dn.split(/\s*,\s*|\s+/),vr=0;vr0&&$>0&&!isNaN(S.w)&&!isNaN(S.h)&&S.w>0&&S.h>0){H=Math.min((N-2*k)/S.w,($-2*k)/S.h),H=H>this._private.maxZoom?this._private.maxZoom:H,H=H=S.minZoom&&(S.maxZoom=k),this},minZoom:function(m){return m===void 0?this._private.minZoom:this.zoomRange({min:m})},maxZoom:function(m){return m===void 0?this._private.maxZoom:this.zoomRange({max:m})},getZoomedViewport:function(m){var k=this._private,S=k.pan,M=k.zoom,O,N,$=!1;if(k.zoomingEnabled||($=!0),X(m)?N=m:se(m)&&(N=m.level,m.position!=null?O=lS(m.position,M,S):m.renderedPosition!=null&&(O=m.renderedPosition),O!=null&&!k.panningEnabled&&($=!0)),N=N>k.maxZoom?k.maxZoom:N,N=Nk.maxZoom||!k.zoomingEnabled?N=!0:(k.zoom=H,O.push("zoom"))}if(M&&(!N||!m.cancelOnFailedZoom)&&k.panningEnabled){var q=m.pan;X(q.x)&&(k.pan.x=q.x,$=!1),X(q.y)&&(k.pan.y=q.y,$=!1),$||O.push("pan")}return O.length>0&&(O.push("viewport"),this.emit(O.join(" ")),this.notify("viewport")),this},center:function(m){var k=this.getCenterPan(m);return k&&(this._private.pan=k,this.emit("pan viewport"),this.notify("viewport")),this},getCenterPan:function(m,k){if(this._private.panningEnabled){if(be(m)){var S=m;m=this.mutableElements().filter(S)}else xe(m)||(m=this.mutableElements());if(m.length!==0){var M=m.boundingBox(),O=this.width(),N=this.height();k=k===void 0?this._private.zoom:k;var $={x:(O-k*(M.x1+M.x2))/2,y:(N-k*(M.y1+M.y2))/2};return $}}},reset:function(){return!this._private.panningEnabled||!this._private.zoomingEnabled?this:(this.viewport({pan:{x:0,y:0},zoom:1}),this)},invalidateSize:function(){this._private.sizeCache=null},size:function(){var m=this._private,k=m.container,S=this;return m.sizeCache=m.sizeCache||(k?function(){var M=S.window().getComputedStyle(k),O=function($){return parseFloat(M.getPropertyValue($))};return{width:k.clientWidth-O("padding-left")-O("padding-right"),height:k.clientHeight-O("padding-top")-O("padding-bottom")}}():{width:1,height:1})},width:function(){return this.size().width},height:function(){return this.size().height},extent:function(){var m=this._private.pan,k=this._private.zoom,S=this.renderedExtent(),M={x1:(S.x1-m.x)/k,x2:(S.x2-m.x)/k,y1:(S.y1-m.y)/k,y2:(S.y2-m.y)/k};return M.w=M.x2-M.x1,M.h=M.y2-M.y1,M},renderedExtent:function(){var m=this.width(),k=this.height();return{x1:0,y1:0,x2:m,y2:k,w:m,h:k}},multiClickDebounceTime:function(m){if(m)this._private.multiClickDebounceTime=m;else return this._private.multiClickDebounceTime;return this}};v5.centre=v5.center,v5.autolockNodes=v5.autolock,v5.autoungrabifyNodes=v5.autoungrabify;var uk={data:fu.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:fu.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:fu.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:fu.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};uk.attr=uk.data,uk.removeAttr=uk.removeData;var lk=function(m){var k=this;m=yt({},m);var S=m.container;S&&!W(S)&&W(S[0])&&(S=S[0]);var M=S?S._cyreg:null;M=M||{},M&&M.cy&&(M.cy.destroy(),M={});var O=M.readies=M.readies||[];S&&(S._cyreg=M),M.cy=k;var N=F!==void 0&&S!==void 0&&!m.headless,$=m;$.layout=yt({name:N?"grid":"null"},$.layout),$.renderer=yt({name:N?"canvas":"null"},$.renderer);var H=function(me,Le,_e){return Le!==void 0?Le:_e!==void 0?_e:me},q=this._private={container:S,ready:!1,options:$,elements:new V0(this),listeners:[],aniEles:new V0(this),data:$.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:H(!0,$.zoomingEnabled),userZoomingEnabled:H(!0,$.userZoomingEnabled),panningEnabled:H(!0,$.panningEnabled),userPanningEnabled:H(!0,$.userPanningEnabled),boxSelectionEnabled:H(!0,$.boxSelectionEnabled),autolock:H(!1,$.autolock,$.autolockNodes),autoungrabify:H(!1,$.autoungrabify,$.autoungrabifyNodes),autounselectify:H(!1,$.autounselectify),styleEnabled:$.styleEnabled===void 0?N:$.styleEnabled,zoom:X($.zoom)?$.zoom:1,pan:{x:se($.pan)&&X($.pan.x)?$.pan.x:0,y:se($.pan)&&X($.pan.y)?$.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:H(250,$.multiClickDebounceTime)};this.createEmitter(),this.selectionType($.selectionType),this.zoomRange({min:$.minZoom,max:$.maxZoom});var Y=function(me,Le){var _e=me.some(Ke);if(_e)return i8.all(me).then(Le);Le(me)};q.styleEnabled&&k.setStyle([]);var Z=yt({},$,$.renderer);k.initRenderer(Z);var ce=function(me,Le,_e){k.notifications(!1);var Ee=k.mutableElements();Ee.length>0&&Ee.remove(),me!=null&&(se(me)||ne(me))&&k.add(me),k.one("layoutready",function(Re){k.notifications(!0),k.emit(Re),k.one("load",Le),k.emitAndNotify("load")}).one("layoutstop",function(){k.one("done",_e),k.emit("done")});var Be=yt({},k._private.options.layout);Be.eles=k.elements(),k.layout(Be).run()};Y([$.style,$.elements],function(ve){var me=ve[0],Le=ve[1];q.styleEnabled&&k.style().append(me),ce(Le,function(){k.startAnimationLoop(),q.ready=!0,ae($.ready)&&k.on("ready",$.ready);for(var _e=0;_e0,H=Wd(m.boundingBox?m.boundingBox:{x1:0,y1:0,w:k.width(),h:k.height()}),q;if(xe(m.roots))q=m.roots;else if(ne(m.roots)){for(var Y=[],Z=0;Z0;){var _n=Tt(),hn=Lt(_n,ut);if(hn)_n.outgoers().filter(function(Mi){return Mi.isNode()&&S.has(Mi)}).forEach(Wt);else if(hn===null){hu("Detected double maximal shift for node `"+_n.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}Je();var Yt=0;if(m.avoidOverlap)for(var Dn=0;Dn0&&Ee[0].length<=3?Da/2:0),G=2*Math.PI/Ee[Fs].length*xs;return Fs===0&&Ee[0].length===1&&(tr=1),{x:Si.x+tr*Math.cos(G),y:Si.y+tr*Math.sin(G)}}else{var Bo={x:Si.x+(xs+1-(Rs+1)/2)*yo,y:(Fs+1)*$a};return Bo}};return S.nodes().layoutPositions(this,m,pa),this};var wre={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(m,k){return!0},ready:void 0,stop:void 0,transform:function(m,k){return k}};function $$(x){this.options=yt({},wre,x)}$$.prototype.run=function(){var x=this.options,m=x,k=x.cy,S=m.eles,M=m.counterclockwise!==void 0?!m.counterclockwise:m.clockwise,O=S.nodes().not(":parent");m.sort&&(O=O.sort(m.sort));for(var N=Wd(m.boundingBox?m.boundingBox:{x1:0,y1:0,w:k.width(),h:k.height()}),$={x:N.x1+N.w/2,y:N.y1+N.h/2},H=m.sweep===void 0?2*Math.PI-2*Math.PI/O.length:m.sweep,q=H/Math.max(1,O.length-1),Y,Z=0,ce=0;ce1&&m.avoidOverlap){Z*=1.75;var Ee=Math.cos(q)-Math.cos(0),Be=Math.sin(q)-Math.sin(0),Re=Math.sqrt(Z*Z/(Ee*Ee+Be*Be));Y=Math.max(Re,Y)}var Ve=function(st,Ye){var mt=m.startAngle+Ye*q*(M?1:-1),Je=Y*Math.cos(mt),Lt=Y*Math.sin(mt),Mt={x:$.x+Je,y:$.y+Lt};return Mt};return S.nodes().layoutPositions(this,m,Ve),this};var yre={fit:!0,padding:30,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:function(m){return m.degree()},levelWidth:function(m){return m.maxDegree()/4},animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(m,k){return!0},ready:void 0,stop:void 0,transform:function(m,k){return k}};function z$(x){this.options=yt({},yre,x)}z$.prototype.run=function(){for(var x=this.options,m=x,k=m.counterclockwise!==void 0?!m.counterclockwise:m.clockwise,S=x.cy,M=m.eles,O=M.nodes().not(":parent"),N=Wd(m.boundingBox?m.boundingBox:{x1:0,y1:0,w:S.width(),h:S.height()}),$={x:N.x1+N.w/2,y:N.y1+N.h/2},H=[],q=0,Y=0;Y0){var ct=Math.abs(Be[0].value-Ve.value);ct>=_e&&(Be=[],Ee.push(Be))}Be.push(Ve)}var st=q+m.minNodeSpacing;if(!m.avoidOverlap){var Ye=Ee.length>0&&Ee[0].length>1,mt=Math.min(N.w,N.h)/2-st,Je=mt/(Ee.length+Ye?1:0);st=Math.min(st,Je)}for(var Lt=0,Mt=0;Mt1&&m.avoidOverlap){var _n=Math.cos(Tt)-Math.cos(0),hn=Math.sin(Tt)-Math.sin(0),Yt=Math.sqrt(st*st/(_n*_n+hn*hn));Lt=Math.max(Yt,Lt)}ut.r=Lt,Lt+=st}if(m.equidistant){for(var Dn=0,ir=0,vr=0;vr=x.numIter||(Are(S,x),S.temperature=S.temperature*x.coolingFactor,S.temperature=x.animationThreshold&&O(),z0(Z)}};Y()}else{for(;q;)q=N(H),H++;V$(S,x),$()}return this},HS.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this},HS.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};var kre=function(m,k,S){for(var M=S.eles.edges(),O=S.eles.nodes(),N=Wd(S.boundingBox?S.boundingBox:{x1:0,y1:0,w:m.width(),h:m.height()}),$={isCompound:m.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:O.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:M.size(),temperature:S.initialTemp,clientWidth:N.w,clientHeight:N.h,boundingBox:N},H=S.eles.components(),q={},Y=0;Y0){$.graphSet.push(mt);for(var Y=0;YM.count?0:M.graph},Tre=function x(m,k,S,M){var O=M.graphSet[S];if(-10)var Z=M.nodeOverlap*Y,ce=Math.sqrt($*$+H*H),ve=Z*$/ce,me=Z*H/ce;else var Le=VS(m,$,H),_e=VS(k,-1*$,-1*H),Ee=_e.x-Le.x,Be=_e.y-Le.y,Re=Ee*Ee+Be*Be,ce=Math.sqrt(Re),Z=(m.nodeRepulsion+k.nodeRepulsion)/Re,ve=Z*Ee/ce,me=Z*Be/ce;m.isLocked||(m.offsetX-=ve,m.offsetY-=me),k.isLocked||(k.offsetX+=ve,k.offsetY+=me)}},Dre=function(m,k,S,M){if(S>0)var O=m.maxX-k.minX;else var O=k.maxX-m.minX;if(M>0)var N=m.maxY-k.minY;else var N=k.maxY-m.minY;return O>=0&&N>=0?Math.sqrt(O*O+N*N):0},VS=function(m,k,S){var M=m.positionX,O=m.positionY,N=m.height||1,$=m.width||1,H=S/k,q=N/$,Y={};return k===0&&0S?(Y.x=M,Y.y=O+N/2,Y):0k&&-1*q<=H&&H<=q?(Y.x=M-$/2,Y.y=O-$*S/2/k,Y):0=q)?(Y.x=M+N*k/2/S,Y.y=O+N/2,Y):(0>S&&(H<=-1*q||H>=q)&&(Y.x=M-N*k/2/S,Y.y=O-N/2),Y)},Ire=function(m,k){for(var S=0;SS){var _e=k.gravity*ve/Le,Ee=k.gravity*me/Le;ce.offsetX+=_e,ce.offsetY+=Ee}}}}},Nre=function(m,k){var S=[],M=0,O=-1;for(S.push.apply(S,m.graphSet[0]),O+=m.graphSet[0].length;M<=O;){var N=S[M++],$=m.idToIndex[N],H=m.layoutNodes[$],q=H.children;if(0S)var O={x:S*m/M,y:S*k/M};else var O={x:m,y:k};return O},Fre=function x(m,k){var S=m.parentId;if(S!=null){var M=k.layoutNodes[k.idToIndex[S]],O=!1;if((M.maxX==null||m.maxX+M.padRight>M.maxX)&&(M.maxX=m.maxX+M.padRight,O=!0),(M.minX==null||m.minX-M.padLeftM.maxY)&&(M.maxY=m.maxY+M.padBottom,O=!0),(M.minY==null||m.minY-M.padTopEe&&(me+=_e+k.componentSpacing,ve=0,Le=0,_e=0)}}},Rre={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:function(m){},sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(m,k){return!0},ready:void 0,stop:void 0,transform:function(m,k){return k}};function U$(x){this.options=yt({},Rre,x)}U$.prototype.run=function(){var x=this.options,m=x,k=x.cy,S=m.eles,M=S.nodes().not(":parent");m.sort&&(M=M.sort(m.sort));var O=Wd(m.boundingBox?m.boundingBox:{x1:0,y1:0,w:k.width(),h:k.height()});if(O.h===0||O.w===0)S.nodes().layoutPositions(this,m,function(Er){return{x:O.x1,y:O.y1}});else{var N=M.size(),$=Math.sqrt(N*O.h/O.w),H=Math.round($),q=Math.round(O.w/O.h*$),Y=function(Mr){if(Mr==null)return Math.min(H,q);var Cr=Math.min(H,q);Cr==H?H=Mr:q=Mr},Z=function(Mr){if(Mr==null)return Math.max(H,q);var Cr=Math.max(H,q);Cr==H?H=Mr:q=Mr},ce=m.rows,ve=m.cols!=null?m.cols:m.columns;if(ce!=null&&ve!=null)H=ce,q=ve;else if(ce!=null&&ve==null)H=ce,q=Math.ceil(N/H);else if(ce==null&&ve!=null)q=ve,H=Math.ceil(N/q);else if(q*H>N){var me=Y(),Le=Z();(me-1)*Le>=N?Y(me-1):(Le-1)*me>=N&&Z(Le-1)}else for(;q*H=N?Z(Ee+1):Y(_e+1)}var Be=O.w/q,Re=O.h/H;if(m.condense&&(Be=0,Re=0),m.avoidOverlap)for(var Ve=0;Ve=q&&(_n=0,Tt++)},Yt={},Dn=0;Dn(_n=EZ(x,m,hn[Yt],hn[Yt+1],hn[Yt+2],hn[Yt+3])))return _e(Ye,_n),!0}else if(Je.edgeType==="bezier"||Je.edgeType==="multibezier"||Je.edgeType==="self"||Je.edgeType==="compound"){for(var hn=Je.allpts,Yt=0;Yt+5(_n=kZ(x,m,hn[Yt],hn[Yt+1],hn[Yt+2],hn[Yt+3],hn[Yt+4],hn[Yt+5])))return _e(Ye,_n),!0}for(var Dn=Dn||mt.source,ir=ir||mt.target,vr=M.getArrowWidth(Lt,Mt),Nn=[{name:"source",x:Je.arrowStartX,y:Je.arrowStartY,angle:Je.srcArrowAngle},{name:"target",x:Je.arrowEndX,y:Je.arrowEndY,angle:Je.tgtArrowAngle},{name:"mid-source",x:Je.midX,y:Je.midY,angle:Je.midsrcArrowAngle},{name:"mid-target",x:Je.midX,y:Je.midY,angle:Je.midtgtArrowAngle}],Yt=0;Yt0&&(Ee(Dn),Ee(ir))}function Re(Ye,mt,Je){return K2(Ye,mt,Je)}function Ve(Ye,mt){var Je=Ye._private,Lt=ce,Mt;mt?Mt=mt+"-":Mt="",Ye.boundingBox();var ut=Je.labelBounds[mt||"main"],Wt=Ye.pstyle(Mt+"label").value,Tt=Ye.pstyle("text-events").strValue==="yes";if(!(!Tt||!Wt)){var _n=Re(Je.rscratch,"labelX",mt),hn=Re(Je.rscratch,"labelY",mt),Yt=Re(Je.rscratch,"labelAngle",mt),Dn=Ye.pstyle(Mt+"text-margin-x").pfValue,ir=Ye.pstyle(Mt+"text-margin-y").pfValue,vr=ut.x1-Lt-Dn,Nn=ut.x2+Lt-Dn,pr=ut.y1-Lt-ir,Er=ut.y2+Lt-ir;if(Yt){var Mr=Math.cos(Yt),Cr=Math.sin(Yt),Or=function(pa,Mi){return pa=pa-_n,Mi=Mi-hn,{x:pa*Mr-Mi*Cr+_n,y:pa*Cr+Mi*Mr+hn}},Wn=Or(vr,pr),br=Or(vr,Er),Sr=Or(Nn,pr),Nr=Or(Nn,Er),Si=[Wn.x+Dn,Wn.y+ir,Sr.x+Dn,Sr.y+ir,Nr.x+Dn,Nr.y+ir,br.x+Dn,br.y+ir];if(Yd(x,m,Si))return _e(Ye),!0}else if(e8(ut,x,m))return _e(Ye),!0}}for(var ct=N.length-1;ct>=0;ct--){var st=N[ct];st.isNode()?Ee(st)||Ve(st):Be(st)||Ve(st)||Ve(st,"source")||Ve(st,"target")}return $},w5.getAllInBox=function(x,m,k,S){var M=this.getCachedZSortedEles().interactive,O=[],N=Math.min(x,k),$=Math.max(x,k),H=Math.min(m,S),q=Math.max(m,S);x=N,k=$,m=H,S=q;for(var Y=Wd({x1:x,y1:m,x2:k,y2:S}),Z=0;Z0?Math.max(wr-Es,0):Math.min(wr+Es,0)},Wt=ut(Lt,mt),Tt=ut(Mt,Je),_n=!1;Be===q?Ee=Math.abs(Wt)>Math.abs(Tt)?M:S:Be===H||Be===$?(Ee=S,_n=!0):(Be===O||Be===N)&&(Ee=M,_n=!0);var hn=Ee===S,Yt=hn?Tt:Wt,Dn=hn?Mt:Lt,ir=fj(Dn),vr=!1;!(_n&&(Ve||st))&&(Be===$&&Dn<0||Be===H&&Dn>0||Be===O&&Dn>0||Be===N&&Dn<0)&&(ir*=-1,Yt=ir*Math.abs(Yt),vr=!0);var Nn;if(Ve){var pr=ct<0?1+ct:ct;Nn=pr*Yt}else{var Er=ct<0?Yt:0;Nn=Er+ct*ir}var Mr=function(wr){return Math.abs(wr)=Math.abs(Yt)},Cr=Mr(Nn),Or=Mr(Math.abs(Yt)-Math.abs(Nn)),Wn=Cr||Or;if(Wn&&!vr)if(hn){var br=Math.abs(Dn)<=ce/2,Sr=Math.abs(Lt)<=ve/2;if(br){var Nr=(Y.x1+Y.x2)/2,Si=Y.y1,ys=Y.y2;k.segpts=[Nr,Si,Nr,ys]}else if(Sr){var pa=(Y.y1+Y.y2)/2,Mi=Y.x1,gi=Y.x2;k.segpts=[Mi,pa,gi,pa]}else k.segpts=[Y.x1,Y.y2]}else{var fs=Math.abs(Dn)<=Z/2,Fs=Math.abs(Mt)<=me/2;if(fs){var xs=(Y.y1+Y.y2)/2,Rs=Y.x1,yo=Y.x2;k.segpts=[Rs,xs,yo,xs]}else if(Fs){var $a=(Y.x1+Y.x2)/2,Da=Y.y1,Bo=Y.y2;k.segpts=[$a,Da,$a,Bo]}else k.segpts=[Y.x2,Y.y1]}else if(hn){var tr=Y.y1+Nn+(_e?ce/2*ir:0),G=Y.x1,Jn=Y.x2;k.segpts=[G,tr,Jn,tr]}else{var kr=Y.x1+Nn+(_e?Z/2*ir:0),lr=Y.y1,Vt=Y.y2;k.segpts=[kr,lr,kr,Vt]}},S1.tryToCorrectInvalidPoints=function(x,m){var k=x._private.rscratch;if(k.edgeType==="bezier"){var S=m.srcPos,M=m.tgtPos,O=m.srcW,N=m.srcH,$=m.tgtW,H=m.tgtH,q=m.srcShape,Y=m.tgtShape,Z=!X(k.startX)||!X(k.startY),ce=!X(k.arrowStartX)||!X(k.arrowStartY),ve=!X(k.endX)||!X(k.endY),me=!X(k.arrowEndX)||!X(k.arrowEndY),Le=3,_e=this.getArrowWidth(x.pstyle("width").pfValue,x.pstyle("arrow-scale").value)*this.arrowShapeWidth,Ee=Le*_e,Be=h5({x:k.ctrlpts[0],y:k.ctrlpts[1]},{x:k.startX,y:k.startY}),Re=BeTt.poolIndex()){var _n=Wt;Wt=Tt,Tt=_n}var hn=Je.srcPos=Wt.position(),Yt=Je.tgtPos=Tt.position(),Dn=Je.srcW=Wt.outerWidth(),ir=Je.srcH=Wt.outerHeight(),vr=Je.tgtW=Tt.outerWidth(),Nn=Je.tgtH=Tt.outerHeight(),pr=Je.srcShape=k.nodeShapes[m.getNodeShape(Wt)],Er=Je.tgtShape=k.nodeShapes[m.getNodeShape(Tt)];Je.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var Mr=0;Mr0){var br=O,Sr=f5(br,J7(k)),Nr=f5(br,J7(Wn)),Si=Sr;if(Nr2){var ys=f5(br,{x:Wn[2],y:Wn[3]});ys0){var G=N,Jn=f5(G,J7(k)),kr=f5(G,J7(tr)),lr=Jn;if(kr2){var Vt=f5(G,{x:tr[2],y:tr[3]});Vt=me||Ye){_e={cp:Ve,segment:st};break}}if(_e)break}var mt=_e.cp,Je=_e.segment,Lt=(me-Ee)/Je.length,Mt=Je.t1-Je.t0,ut=ve?Je.t0+Mt*Lt:Je.t1-Mt*Lt;ut=U9(0,ut,1),m=Z7(mt.p0,mt.p1,mt.p2,ut),ce=Hre(mt.p0,mt.p1,mt.p2,ut);break}case"straight":case"segments":case"haystack":{for(var Wt=0,Tt,_n,hn,Yt,Dn=S.allpts.length,ir=0;ir+3=me));ir+=2);var vr=me-_n,Nn=vr/Tt;Nn=U9(0,Nn,1),m=fZ(hn,Yt,Nn),ce=GS(hn,Yt);break}}N("labelX",Z,m.x),N("labelY",Z,m.y),N("labelAutoAngle",Z,ce)}};q("source"),q("target"),this.applyLabelDimensions(x)}},km.applyLabelDimensions=function(x){this.applyPrefixedLabelDimensions(x),x.isEdge()&&(this.applyPrefixedLabelDimensions(x,"source"),this.applyPrefixedLabelDimensions(x,"target"))},km.applyPrefixedLabelDimensions=function(x,m){var k=x._private,S=this.getLabelText(x,m),M=this.calculateLabelDimensions(x,S),O=x.pstyle("line-height").pfValue,N=x.pstyle("text-wrap").strValue,$=K2(k.rscratch,"labelWrapCachedLines",m)||[],H=N!=="wrap"?1:Math.max($.length,1),q=M.height/H,Y=q*O,Z=M.width,ce=M.height+(H-1)*(O-1)*q;J3(k.rstyle,"labelWidth",m,Z),J3(k.rscratch,"labelWidth",m,Z),J3(k.rstyle,"labelHeight",m,ce),J3(k.rscratch,"labelHeight",m,ce),J3(k.rscratch,"labelLineHeight",m,Y)},km.getLabelText=function(x,m){var k=x._private,S=m?m+"-":"",M=x.pstyle(S+"label").strValue,O=x.pstyle("text-transform").value,N=function(vr,Nn){return Nn?(J3(k.rscratch,vr,m,Nn),Nn):K2(k.rscratch,vr,m)};if(!M)return"";O=="none"||(O=="uppercase"?M=M.toUpperCase():O=="lowercase"&&(M=M.toLowerCase()));var $=x.pstyle("text-wrap").value;if($==="wrap"){var H=N("labelKey");if(H!=null&&N("labelWrapKey")===H)return N("labelWrapCachedText");for(var q="​",Y=M.split(` -`),Z=x.pstyle("text-max-width").pfValue,ce=x.pstyle("text-overflow-wrap").value,ve=ce==="anywhere",me=[],Le=/[\s\u200b]+/,_e=ve?"":" ",Ee=0;EeZ){for(var st=Be.split(Le),Ye="",mt=0;mtWt)break;Tt+=M[Yt],Yt===M.length-1&&(hn=!0)}return hn||(Tt+=_n),Tt}return M},km.getLabelJustification=function(x){var m=x.pstyle("text-justification").strValue,k=x.pstyle("text-halign").strValue;if(m==="auto")if(x.isNode())switch(k){case"left":return"right";case"right":return"left";default:return"center"}else return"center";else return m},km.calculateLabelDimensions=function(x,m){var k=this,S=ud(m,x._private.labelDimsKey),M=k.labelDimCache||(k.labelDimCache=[]),O=M[S];if(O!=null)return O;var N=0,$=x.pstyle("font-style").strValue,H=x.pstyle("font-size").pfValue,q=x.pstyle("font-family").strValue,Y=x.pstyle("font-weight").strValue,Z=this.labelCalcCanvas,ce=this.labelCalcCanvasContext;if(!Z){Z=this.labelCalcCanvas=document.createElement("canvas"),ce=this.labelCalcCanvasContext=Z.getContext("2d");var ve=Z.style;ve.position="absolute",ve.left="-9999px",ve.top="-9999px",ve.zIndex="-1",ve.visibility="hidden",ve.pointerEvents="none"}ce.font="".concat($," ").concat(Y," ").concat(H,"px ").concat(q);for(var me=0,Le=0,_e=m.split(` -`),Ee=0;Ee<_e.length;Ee++){var Be=_e[Ee],Re=ce.measureText(Be),Ve=Math.ceil(Re.width),ct=H;me=Math.max(Ve,me),Le+=ct}return me+=N,Le+=N,M[S]={width:me,height:Le}},km.calculateLabelAngle=function(x,m){var k=x._private,S=k.rscratch,M=x.isEdge(),O=m?m+"-":"",N=x.pstyle(O+"text-rotation"),$=N.strValue;return $==="none"?0:M&&$==="autorotate"?S.labelAutoAngle:$==="autorotate"?0:N.pfValue},km.calculateLabelAngles=function(x){var m=this,k=x.isEdge(),S=x._private,M=S.rscratch;M.labelAngle=m.calculateLabelAngle(x),k&&(M.sourceLabelAngle=m.calculateLabelAngle(x,"source"),M.targetLabelAngle=m.calculateLabelAngle(x,"target"))};var ez={},tz=28,nz=!1;ez.getNodeShape=function(x){var m=this,k=x.pstyle("shape").value;if(k==="cutrectangle"&&(x.width()1&&arguments[1]!==void 0?arguments[1]:!0;if(m.merge(N),$)for(var H=0;H=x.desktopTapThreshold2}var Wv=M(G);Wl&&(x.hoverData.tapholdCancelled=!0);var sy=function(){var Em=x.hoverData.dragDelta=x.hoverData.dragDelta||[];Em.length===0?(Em.push(xo[0]),Em.push(xo[1])):(Em[0]+=xo[0],Em[1]+=xo[1])};kr=!0,S(za,["mousemove","vmousemove","tapdrag"],G,{x:wr[0],y:wr[1]});var E8=function(){x.data.bgActivePosistion=void 0,x.hoverData.selecting||lr.emit({originalEvent:G,type:"boxstart",position:{x:wr[0],y:wr[1]}}),$c[4]=1,x.hoverData.selecting=!0,x.redrawHint("select",!0),x.redraw()};if(x.hoverData.which===3){if(Wl){var x5={originalEvent:G,type:"cxtdrag",position:{x:wr[0],y:wr[1]}};ba?ba.emit(x5):lr.emit(x5),x.hoverData.cxtDragged=!0,(!x.hoverData.cxtOver||za!==x.hoverData.cxtOver)&&(x.hoverData.cxtOver&&x.hoverData.cxtOver.emit({originalEvent:G,type:"cxtdragout",position:{x:wr[0],y:wr[1]}}),x.hoverData.cxtOver=za,za&&za.emit({originalEvent:G,type:"cxtdragover",position:{x:wr[0],y:wr[1]}}))}}else if(x.hoverData.dragging){if(kr=!0,lr.panningEnabled()&&lr.userPanningEnabled()){var T8;if(x.hoverData.justStartedPan){var ZS=x.hoverData.mdownPos;T8={x:(wr[0]-ZS[0])*Vt,y:(wr[1]-ZS[1])*Vt},x.hoverData.justStartedPan=!1}else T8={x:xo[0]*Vt,y:xo[1]*Vt};lr.panBy(T8),lr.emit("dragpan"),x.hoverData.dragged=!0}wr=x.projectIntoViewport(G.clientX,G.clientY)}else if($c[4]==1&&(ba==null||ba.pannable())){if(Wl){if(!x.hoverData.dragging&&lr.boxSelectionEnabled()&&(Wv||!lr.panningEnabled()||!lr.userPanningEnabled()))E8();else if(!x.hoverData.selecting&&lr.panningEnabled()&&lr.userPanningEnabled()){var k5=O(ba,x.hoverData.downs);k5&&(x.hoverData.dragging=!0,x.hoverData.justStartedPan=!0,$c[4]=0,x.data.bgActivePosistion=J7(Es),x.redrawHint("select",!0),x.redraw())}ba&&ba.pannable()&&ba.active()&&ba.unactivate()}}else{if(ba&&ba.pannable()&&ba.active()&&ba.unactivate(),(!ba||!ba.grabbed())&&za!=Sc&&(Sc&&S(Sc,["mouseout","tapdragout"],G,{x:wr[0],y:wr[1]}),za&&S(za,["mouseover","tapdragover"],G,{x:wr[0],y:wr[1]}),x.hoverData.last=za),ba)if(Wl){if(lr.boxSelectionEnabled()&&Wv)ba&&ba.grabbed()&&(_e(lh),ba.emit("freeon"),lh.emit("free"),x.dragData.didDrag&&(ba.emit("dragfreeon"),lh.emit("dragfree"))),E8();else if(ba&&ba.grabbed()&&x.nodeIsDraggable(ba)){var Qd=!x.dragData.didDrag;Qd&&x.redrawHint("eles",!0),x.dragData.didDrag=!0,x.hoverData.draggingEles||me(lh,{inDragLayer:!0});var _1={x:0,y:0};if(X(xo[0])&&X(xo[1])&&(_1.x+=xo[0],_1.y+=xo[1],Qd)){var Jd=x.hoverData.dragDelta;Jd&&X(Jd[0])&&X(Jd[1])&&(_1.x+=Jd[0],_1.y+=Jd[1])}x.hoverData.draggingEles=!0,lh.silentShift(_1).emit("position drag"),x.redrawHint("drag",!0),x.redraw()}}else sy();kr=!0}if($c[2]=wr[0],$c[3]=wr[1],kr)return G.stopPropagation&&G.stopPropagation(),G.preventDefault&&G.preventDefault(),!1}},!1);var Lt,Mt,ut;x.registerBinding(m,"mouseup",function(G){var Jn=x.hoverData.capture;if(Jn){x.hoverData.capture=!1;var kr=x.cy,lr=x.projectIntoViewport(G.clientX,G.clientY),Vt=x.selection,Hs=x.findNearestElement(lr[0],lr[1],!0,!1),wr=x.dragData.possibleDragElements,Es=x.hoverData.down,go=M(G);if(x.data.bgActivePosistion&&(x.redrawHint("select",!0),x.redraw()),x.hoverData.tapholdCancelled=!0,x.data.bgActivePosistion=void 0,Es&&Es.unactivate(),x.hoverData.which===3){var $c={originalEvent:G,type:"cxttapend",position:{x:lr[0],y:lr[1]}};if(Es?Es.emit($c):kr.emit($c),!x.hoverData.cxtDragged){var za={originalEvent:G,type:"cxttap",position:{x:lr[0],y:lr[1]}};Es?Es.emit(za):kr.emit(za)}x.hoverData.cxtDragged=!1,x.hoverData.which=null}else if(x.hoverData.which===1){if(S(Hs,["mouseup","tapend","vmouseup"],G,{x:lr[0],y:lr[1]}),!x.dragData.didDrag&&!x.hoverData.dragged&&!x.hoverData.selecting&&!x.hoverData.isOverThresholdDrag&&(S(Es,["click","tap","vclick"],G,{x:lr[0],y:lr[1]}),Mt=!1,G.timeStamp-ut<=kr.multiClickDebounceTime()?(Lt&&clearTimeout(Lt),Mt=!0,ut=null,S(Es,["dblclick","dbltap","vdblclick"],G,{x:lr[0],y:lr[1]})):(Lt=setTimeout(function(){Mt||S(Es,["oneclick","onetap","voneclick"],G,{x:lr[0],y:lr[1]})},kr.multiClickDebounceTime()),ut=G.timeStamp)),Es==null&&!x.dragData.didDrag&&!x.hoverData.selecting&&!x.hoverData.dragged&&!M(G)&&(kr.$(k).unselect(["tapunselect"]),wr.length>0&&x.redrawHint("eles",!0),x.dragData.possibleDragElements=wr=kr.collection()),Hs==Es&&!x.dragData.didDrag&&!x.hoverData.selecting&&Hs!=null&&Hs._private.selectable&&(x.hoverData.dragging||(kr.selectionType()==="additive"||go?Hs.selected()?Hs.unselect(["tapunselect"]):Hs.select(["tapselect"]):go||(kr.$(k).unmerge(Hs).unselect(["tapunselect"]),Hs.select(["tapselect"]))),x.redrawHint("eles",!0)),x.hoverData.selecting){var Sc=kr.collection(x.getAllInBox(Vt[0],Vt[1],Vt[2],Vt[3]));x.redrawHint("select",!0),Sc.length>0&&x.redrawHint("eles",!0),kr.emit({type:"boxend",originalEvent:G,position:{x:lr[0],y:lr[1]}});var ba=function(Wl){return Wl.selectable()&&!Wl.selected()};kr.selectionType()==="additive"||go||kr.$(k).unmerge(Sc).unselect(),Sc.emit("box").stdFilter(ba).select().emit("boxselect"),x.redraw()}if(x.hoverData.dragging&&(x.hoverData.dragging=!1,x.redrawHint("select",!0),x.redrawHint("eles",!0),x.redraw()),!Vt[4]){x.redrawHint("drag",!0),x.redrawHint("eles",!0);var xo=Es&&Es.grabbed();_e(wr),xo&&(Es.emit("freeon"),wr.emit("free"),x.dragData.didDrag&&(Es.emit("dragfreeon"),wr.emit("dragfree")))}}Vt[4]=0,x.hoverData.down=null,x.hoverData.cxtStarted=!1,x.hoverData.draggingEles=!1,x.hoverData.selecting=!1,x.hoverData.isOverThresholdDrag=!1,x.dragData.didDrag=!1,x.hoverData.dragged=!1,x.hoverData.dragDelta=[],x.hoverData.mdownPos=null,x.hoverData.mdownGPos=null}},!1);var Wt=function(G){if(!x.scrollingPage){var Jn=x.cy,kr=Jn.zoom(),lr=Jn.pan(),Vt=x.projectIntoViewport(G.clientX,G.clientY),Hs=[Vt[0]*kr+lr.x,Vt[1]*kr+lr.y];if(x.hoverData.draggingEles||x.hoverData.dragging||x.hoverData.cxtStarted||mt()){G.preventDefault();return}if(Jn.panningEnabled()&&Jn.userPanningEnabled()&&Jn.zoomingEnabled()&&Jn.userZoomingEnabled()){G.preventDefault(),x.data.wheelZooming=!0,clearTimeout(x.data.wheelTimeout),x.data.wheelTimeout=setTimeout(function(){x.data.wheelZooming=!1,x.redrawHint("eles",!0),x.redraw()},150);var wr;G.deltaY!=null?wr=G.deltaY/-250:G.wheelDeltaY!=null?wr=G.wheelDeltaY/1e3:wr=G.wheelDelta/1e3,wr=wr*x.wheelSensitivity;var Es=G.deltaMode===1;Es&&(wr*=33);var go=Jn.zoom()*Math.pow(10,wr);G.type==="gesturechange"&&(go=x.gestureStartZoom*G.scale),Jn.zoom({level:go,renderedPosition:{x:Hs[0],y:Hs[1]}}),Jn.emit(G.type==="gesturechange"?"pinchzoom":"scrollzoom")}}};x.registerBinding(x.container,"wheel",Wt,!0),x.registerBinding(m,"scroll",function(G){x.scrollingPage=!0,clearTimeout(x.scrollingPageTimeout),x.scrollingPageTimeout=setTimeout(function(){x.scrollingPage=!1},250)},!0),x.registerBinding(x.container,"gesturestart",function(G){x.gestureStartZoom=x.cy.zoom(),x.hasTouchStarted||G.preventDefault()},!0),x.registerBinding(x.container,"gesturechange",function(tr){x.hasTouchStarted||Wt(tr)},!0),x.registerBinding(x.container,"mouseout",function(G){var Jn=x.projectIntoViewport(G.clientX,G.clientY);x.cy.emit({originalEvent:G,type:"mouseout",position:{x:Jn[0],y:Jn[1]}})},!1),x.registerBinding(x.container,"mouseover",function(G){var Jn=x.projectIntoViewport(G.clientX,G.clientY);x.cy.emit({originalEvent:G,type:"mouseover",position:{x:Jn[0],y:Jn[1]}})},!1);var Tt,_n,hn,Yt,Dn,ir,vr,Nn,pr,Er,Mr,Cr,Or,Wn=function(G,Jn,kr,lr){return Math.sqrt((kr-G)*(kr-G)+(lr-Jn)*(lr-Jn))},br=function(G,Jn,kr,lr){return(kr-G)*(kr-G)+(lr-Jn)*(lr-Jn)},Sr;x.registerBinding(x.container,"touchstart",Sr=function(G){if(x.hasTouchStarted=!0,!!Je(G)){Be(),x.touchData.capture=!0,x.data.bgActivePosistion=void 0;var Jn=x.cy,kr=x.touchData.now,lr=x.touchData.earlier;if(G.touches[0]){var Vt=x.projectIntoViewport(G.touches[0].clientX,G.touches[0].clientY);kr[0]=Vt[0],kr[1]=Vt[1]}if(G.touches[1]){var Vt=x.projectIntoViewport(G.touches[1].clientX,G.touches[1].clientY);kr[2]=Vt[0],kr[3]=Vt[1]}if(G.touches[2]){var Vt=x.projectIntoViewport(G.touches[2].clientX,G.touches[2].clientY);kr[4]=Vt[0],kr[5]=Vt[1]}if(G.touches[1]){x.touchData.singleTouchMoved=!0,_e(x.dragData.touchDragEles);var Hs=x.findContainerClientCoords();pr=Hs[0],Er=Hs[1],Mr=Hs[2],Cr=Hs[3],Tt=G.touches[0].clientX-pr,_n=G.touches[0].clientY-Er,hn=G.touches[1].clientX-pr,Yt=G.touches[1].clientY-Er,Or=0<=Tt&&Tt<=Mr&&0<=hn&&hn<=Mr&&0<=_n&&_n<=Cr&&0<=Yt&&Yt<=Cr;var wr=Jn.pan(),Es=Jn.zoom();Dn=Wn(Tt,_n,hn,Yt),ir=br(Tt,_n,hn,Yt),vr=[(Tt+hn)/2,(_n+Yt)/2],Nn=[(vr[0]-wr.x)/Es,(vr[1]-wr.y)/Es];var go=200,$c=go*go;if(ir<$c&&!G.touches[2]){var za=x.findNearestElement(kr[0],kr[1],!0,!0),Sc=x.findNearestElement(kr[2],kr[3],!0,!0);za&&za.isNode()?(za.activate().emit({originalEvent:G,type:"cxttapstart",position:{x:kr[0],y:kr[1]}}),x.touchData.start=za):Sc&&Sc.isNode()?(Sc.activate().emit({originalEvent:G,type:"cxttapstart",position:{x:kr[0],y:kr[1]}}),x.touchData.start=Sc):Jn.emit({originalEvent:G,type:"cxttapstart",position:{x:kr[0],y:kr[1]}}),x.touchData.start&&(x.touchData.start._private.grabbed=!1),x.touchData.cxt=!0,x.touchData.cxtDragged=!1,x.data.bgActivePosistion=void 0,x.redraw();return}}if(G.touches[2])Jn.boxSelectionEnabled()&&G.preventDefault();else if(!G.touches[1]){if(G.touches[0]){var ba=x.findNearestElements(kr[0],kr[1],!0,!0),xo=ba[0];if(xo!=null&&(xo.activate(),x.touchData.start=xo,x.touchData.starts=ba,x.nodeIsGrabbable(xo))){var lh=x.dragData.touchDragEles=Jn.collection(),Wl=null;x.redrawHint("eles",!0),x.redrawHint("drag",!0),xo.selected()?(Wl=Jn.$(function(fd){return fd.selected()&&x.nodeIsGrabbable(fd)}),me(Wl,{addToList:lh})):Le(xo,{addToList:lh}),Y(xo);var Z2=function(Wv){return{originalEvent:G,type:Wv,position:{x:kr[0],y:kr[1]}}};xo.emit(Z2("grabon")),Wl?Wl.forEach(function(fd){fd.emit(Z2("grab"))}):xo.emit(Z2("grab"))}S(xo,["touchstart","tapstart","vmousedown"],G,{x:kr[0],y:kr[1]}),xo==null&&(x.data.bgActivePosistion={x:Vt[0],y:Vt[1]},x.redrawHint("select",!0),x.redraw()),x.touchData.singleTouchMoved=!1,x.touchData.singleTouchStartTime=+new Date,clearTimeout(x.touchData.tapholdTimeout),x.touchData.tapholdTimeout=setTimeout(function(){x.touchData.singleTouchMoved===!1&&!x.pinching&&!x.touchData.selecting&&S(x.touchData.start,["taphold"],G,{x:kr[0],y:kr[1]})},x.tapholdDuration)}}if(G.touches.length>=1){for(var eb=x.touchData.startPosition=[null,null,null,null,null,null],G0=0;G0=x.touchTapThreshold2}if(Jn&&x.touchData.cxt){G.preventDefault();var eb=G.touches[0].clientX-pr,G0=G.touches[0].clientY-Er,zp=G.touches[1].clientX-pr,fd=G.touches[1].clientY-Er,Wv=br(eb,G0,zp,fd),sy=Wv/ir,E8=150,x5=E8*E8,T8=1.5,ZS=T8*T8;if(sy>=ZS||Wv>=x5){x.touchData.cxt=!1,x.data.bgActivePosistion=void 0,x.redrawHint("select",!0);var k5={originalEvent:G,type:"cxttapend",position:{x:Vt[0],y:Vt[1]}};x.touchData.start?(x.touchData.start.unactivate().emit(k5),x.touchData.start=null):lr.emit(k5)}}if(Jn&&x.touchData.cxt){var k5={originalEvent:G,type:"cxtdrag",position:{x:Vt[0],y:Vt[1]}};x.data.bgActivePosistion=void 0,x.redrawHint("select",!0),x.touchData.start?x.touchData.start.emit(k5):lr.emit(k5),x.touchData.start&&(x.touchData.start._private.grabbed=!1),x.touchData.cxtDragged=!0;var Qd=x.findNearestElement(Vt[0],Vt[1],!0,!0);(!x.touchData.cxtOver||Qd!==x.touchData.cxtOver)&&(x.touchData.cxtOver&&x.touchData.cxtOver.emit({originalEvent:G,type:"cxtdragout",position:{x:Vt[0],y:Vt[1]}}),x.touchData.cxtOver=Qd,Qd&&Qd.emit({originalEvent:G,type:"cxtdragover",position:{x:Vt[0],y:Vt[1]}}))}else if(Jn&&G.touches[2]&&lr.boxSelectionEnabled())G.preventDefault(),x.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,x.touchData.selecting||lr.emit({originalEvent:G,type:"boxstart",position:{x:Vt[0],y:Vt[1]}}),x.touchData.selecting=!0,x.touchData.didSelect=!0,kr[4]=1,!kr||kr.length===0||kr[0]===void 0?(kr[0]=(Vt[0]+Vt[2]+Vt[4])/3,kr[1]=(Vt[1]+Vt[3]+Vt[5])/3,kr[2]=(Vt[0]+Vt[2]+Vt[4])/3+1,kr[3]=(Vt[1]+Vt[3]+Vt[5])/3+1):(kr[2]=(Vt[0]+Vt[2]+Vt[4])/3,kr[3]=(Vt[1]+Vt[3]+Vt[5])/3),x.redrawHint("select",!0),x.redraw();else if(Jn&&G.touches[1]&&!x.touchData.didSelect&&lr.zoomingEnabled()&&lr.panningEnabled()&&lr.userZoomingEnabled()&&lr.userPanningEnabled()){G.preventDefault(),x.data.bgActivePosistion=void 0,x.redrawHint("select",!0);var _1=x.dragData.touchDragEles;if(_1){x.redrawHint("drag",!0);for(var Jd=0;Jd<_1.length;Jd++){var Yv=_1[Jd]._private;Yv.grabbed=!1,Yv.rscratch.inDragLayer=!1}}var Em=x.touchData.start,eb=G.touches[0].clientX-pr,G0=G.touches[0].clientY-Er,zp=G.touches[1].clientX-pr,fd=G.touches[1].clientY-Er,Lz=Wn(eb,G0,zp,fd),Lie=Lz/Dn;if(Or){var Mie=eb-Tt,e_=G0-_n,Die=zp-hn,Iie=fd-Yt,E5=(Mie+Die)/2,Mz=(e_+Iie)/2,yk=lr.zoom(),UI=yk*Lie,t_=lr.pan(),Dz=Nn[0]*yk+t_.x,Iz=Nn[1]*yk+t_.y,Oie={x:-UI/yk*(Dz-t_.x-E5)+Dz,y:-UI/yk*(Iz-t_.y-Mz)+Iz};if(Em&&Em.active()){var _1=x.dragData.touchDragEles;_e(_1),x.redrawHint("drag",!0),x.redrawHint("eles",!0),Em.unactivate().emit("freeon"),_1.emit("free"),x.dragData.didDrag&&(Em.emit("dragfreeon"),_1.emit("dragfree"))}lr.viewport({zoom:UI,pan:Oie,cancelOnFailedZoom:!0}),lr.emit("pinchzoom"),Dn=Lz,Tt=eb,_n=G0,hn=zp,Yt=fd,x.pinching=!0}if(G.touches[0]){var Es=x.projectIntoViewport(G.touches[0].clientX,G.touches[0].clientY);Vt[0]=Es[0],Vt[1]=Es[1]}if(G.touches[1]){var Es=x.projectIntoViewport(G.touches[1].clientX,G.touches[1].clientY);Vt[2]=Es[0],Vt[3]=Es[1]}if(G.touches[2]){var Es=x.projectIntoViewport(G.touches[2].clientX,G.touches[2].clientY);Vt[4]=Es[0],Vt[5]=Es[1]}}else if(G.touches[0]&&!x.touchData.didSelect){var qp=x.touchData.start,n_=x.touchData.last,Qd;if(!x.hoverData.draggingEles&&!x.swipePanning&&(Qd=x.findNearestElement(Vt[0],Vt[1],!0,!0)),Jn&&qp!=null&&G.preventDefault(),Jn&&qp!=null&&x.nodeIsDraggable(qp))if($c){var _1=x.dragData.touchDragEles,GI=!x.dragData.didDrag;GI&&me(_1,{inDragLayer:!0}),x.dragData.didDrag=!0;var Tm={x:0,y:0};if(X(za[0])&&X(za[1])&&(Tm.x+=za[0],Tm.y+=za[1],GI)){x.redrawHint("eles",!0);var Zd=x.touchData.dragDelta;Zd&&X(Zd[0])&&X(Zd[1])&&(Tm.x+=Zd[0],Tm.y+=Zd[1])}x.hoverData.draggingEles=!0,_1.silentShift(Tm).emit("position drag"),x.redrawHint("drag",!0),x.touchData.startPosition[0]==Hs[0]&&x.touchData.startPosition[1]==Hs[1]&&x.redrawHint("eles",!0),x.redraw()}else{var Zd=x.touchData.dragDelta=x.touchData.dragDelta||[];Zd.length===0?(Zd.push(za[0]),Zd.push(za[1])):(Zd[0]+=za[0],Zd[1]+=za[1])}if(S(qp||Qd,["touchmove","tapdrag","vmousemove"],G,{x:Vt[0],y:Vt[1]}),(!qp||!qp.grabbed())&&Qd!=n_&&(n_&&n_.emit({originalEvent:G,type:"tapdragout",position:{x:Vt[0],y:Vt[1]}}),Qd&&Qd.emit({originalEvent:G,type:"tapdragover",position:{x:Vt[0],y:Vt[1]}})),x.touchData.last=Qd,Jn)for(var Jd=0;Jd0&&!x.hoverData.draggingEles&&!x.swipePanning&&x.data.bgActivePosistion!=null&&(x.data.bgActivePosistion=void 0,x.redrawHint("select",!0),x.redraw())}},!1);var Si;x.registerBinding(m,"touchcancel",Si=function(G){var Jn=x.touchData.start;x.touchData.capture=!1,Jn&&Jn.unactivate()});var ys,pa,Mi,gi;if(x.registerBinding(m,"touchend",ys=function(G){var Jn=x.touchData.start,kr=x.touchData.capture;if(kr)G.touches.length===0&&(x.touchData.capture=!1),G.preventDefault();else return;var lr=x.selection;x.swipePanning=!1,x.hoverData.draggingEles=!1;var Vt=x.cy,Hs=Vt.zoom(),wr=x.touchData.now,Es=x.touchData.earlier;if(G.touches[0]){var go=x.projectIntoViewport(G.touches[0].clientX,G.touches[0].clientY);wr[0]=go[0],wr[1]=go[1]}if(G.touches[1]){var go=x.projectIntoViewport(G.touches[1].clientX,G.touches[1].clientY);wr[2]=go[0],wr[3]=go[1]}if(G.touches[2]){var go=x.projectIntoViewport(G.touches[2].clientX,G.touches[2].clientY);wr[4]=go[0],wr[5]=go[1]}Jn&&Jn.unactivate();var $c;if(x.touchData.cxt){if($c={originalEvent:G,type:"cxttapend",position:{x:wr[0],y:wr[1]}},Jn?Jn.emit($c):Vt.emit($c),!x.touchData.cxtDragged){var za={originalEvent:G,type:"cxttap",position:{x:wr[0],y:wr[1]}};Jn?Jn.emit(za):Vt.emit(za)}x.touchData.start&&(x.touchData.start._private.grabbed=!1),x.touchData.cxt=!1,x.touchData.start=null,x.redraw();return}if(!G.touches[2]&&Vt.boxSelectionEnabled()&&x.touchData.selecting){x.touchData.selecting=!1;var Sc=Vt.collection(x.getAllInBox(lr[0],lr[1],lr[2],lr[3]));lr[0]=void 0,lr[1]=void 0,lr[2]=void 0,lr[3]=void 0,lr[4]=0,x.redrawHint("select",!0),Vt.emit({type:"boxend",originalEvent:G,position:{x:wr[0],y:wr[1]}});var ba=function(x5){return x5.selectable()&&!x5.selected()};Sc.emit("box").stdFilter(ba).select().emit("boxselect"),Sc.nonempty()&&x.redrawHint("eles",!0),x.redraw()}if(Jn!=null&&Jn.unactivate(),G.touches[2])x.data.bgActivePosistion=void 0,x.redrawHint("select",!0);else if(!G.touches[1]){if(!G.touches[0]){if(!G.touches[0]){x.data.bgActivePosistion=void 0,x.redrawHint("select",!0);var xo=x.dragData.touchDragEles;if(Jn!=null){var lh=Jn._private.grabbed;_e(xo),x.redrawHint("drag",!0),x.redrawHint("eles",!0),lh&&(Jn.emit("freeon"),xo.emit("free"),x.dragData.didDrag&&(Jn.emit("dragfreeon"),xo.emit("dragfree"))),S(Jn,["touchend","tapend","vmouseup","tapdragout"],G,{x:wr[0],y:wr[1]}),Jn.unactivate(),x.touchData.start=null}else{var Wl=x.findNearestElement(wr[0],wr[1],!0,!0);S(Wl,["touchend","tapend","vmouseup","tapdragout"],G,{x:wr[0],y:wr[1]})}var Z2=x.touchData.startPosition[0]-wr[0],eb=Z2*Z2,G0=x.touchData.startPosition[1]-wr[1],zp=G0*G0,fd=eb+zp,Wv=fd*Hs*Hs;x.touchData.singleTouchMoved||(Jn||Vt.$(":selected").unselect(["tapunselect"]),S(Jn,["tap","vclick"],G,{x:wr[0],y:wr[1]}),pa=!1,G.timeStamp-gi<=Vt.multiClickDebounceTime()?(Mi&&clearTimeout(Mi),pa=!0,gi=null,S(Jn,["dbltap","vdblclick"],G,{x:wr[0],y:wr[1]})):(Mi=setTimeout(function(){pa||S(Jn,["onetap","voneclick"],G,{x:wr[0],y:wr[1]})},Vt.multiClickDebounceTime()),gi=G.timeStamp)),Jn!=null&&!x.dragData.didDrag&&Jn._private.selectable&&Wv"u"){var fs=[],Fs=function(G){return{clientX:G.clientX,clientY:G.clientY,force:1,identifier:G.pointerId,pageX:G.pageX,pageY:G.pageY,radiusX:G.width/2,radiusY:G.height/2,screenX:G.screenX,screenY:G.screenY,target:G.target}},xs=function(G){return{event:G,touch:Fs(G)}},Rs=function(G){fs.push(xs(G))},yo=function(G){for(var Jn=0;Jn0)return Nn[0]}return null},ve=Object.keys(Z),me=0;me0?ce:bj(O,N,m,k,S,M,$)},checkPoint:function(m,k,S,M,O,N,$){var H=W9(M,O),q=2*H;if(Uv(m,k,this.points,N,$,M,O-q,[0,-1],S)||Uv(m,k,this.points,N,$,M-q,O,[0,-1],S))return!0;var Y=M/2+2*S,Z=O/2+2*S,ce=[N-Y,$-Z,N-Y,$,N+Y,$,N+Y,$-Z];return!!(Yd(m,k,ce)||d5(m,k,q,q,N+M/2-H,$+O/2-H,S)||d5(m,k,q,q,N-M/2+H,$+O/2-H,S))}}},Kv.registerNodeShapes=function(){var x=this.nodeShapes={},m=this;this.generateEllipse(),this.generatePolygon("triangle",hd(3,0)),this.generateRoundPolygon("round-triangle",hd(3,0)),this.generatePolygon("rectangle",hd(4,0)),x.square=x.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();{var k=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",k),this.generateRoundPolygon("round-diamond",k)}this.generatePolygon("pentagon",hd(5,0)),this.generateRoundPolygon("round-pentagon",hd(5,0)),this.generatePolygon("hexagon",hd(6,0)),this.generateRoundPolygon("round-hexagon",hd(6,0)),this.generatePolygon("heptagon",hd(7,0)),this.generateRoundPolygon("round-heptagon",hd(7,0)),this.generatePolygon("octagon",hd(8,0)),this.generateRoundPolygon("round-octagon",hd(8,0));var S=new Array(20);{var M=oI(5,0),O=oI(5,Math.PI/5),N=.5*(3-Math.sqrt(5));N*=1.57;for(var $=0;$=m.deqFastCost*Ve)break}else if(q){if(Be>=m.deqCost*ve||Be>=m.deqAvgCost*ce)break}else if(Re>=m.deqNoDrawCost*RI)break;var ct=m.deq(S,_e,Le);if(ct.length>0)for(var st=0;st0&&(m.onDeqd(S,me),!q&&m.shouldRedraw(S,me,_e,Le)&&O())},$=m.priority||nI;M.beforeRender(N,$(S))}}}},Ure=function(){function x(m){var k=arguments.length>1&&arguments[1]!==void 0?arguments[1]:X3;d(this,x),this.idsByKey=new wm,this.keyForId=new wm,this.cachesByLvl=new wm,this.lvls=[],this.getKey=m,this.doesEleInvalidateKey=k}return v(x,[{key:"getIdsFor",value:function(k){k==null&&ch("Can not get id list for null key");var S=this.idsByKey,M=this.idsByKey.get(k);return M||(M=new Q7,S.set(k,M)),M}},{key:"addIdForKey",value:function(k,S){k!=null&&this.getIdsFor(k).add(S)}},{key:"deleteIdForKey",value:function(k,S){k!=null&&this.getIdsFor(k).delete(S)}},{key:"getNumberOfIdsForKey",value:function(k){return k==null?0:this.getIdsFor(k).size}},{key:"updateKeyMappingFor",value:function(k){var S=k.id(),M=this.keyForId.get(S),O=this.getKey(k);this.deleteIdForKey(M,S),this.addIdForKey(O,S),this.keyForId.set(S,O)}},{key:"deleteKeyMappingFor",value:function(k){var S=k.id(),M=this.keyForId.get(S);this.deleteIdForKey(M,S),this.keyForId.delete(S)}},{key:"keyHasChangedFor",value:function(k){var S=k.id(),M=this.keyForId.get(S),O=this.getKey(k);return M!==O}},{key:"isInvalid",value:function(k){return this.keyHasChangedFor(k)||this.doesEleInvalidateKey(k)}},{key:"getCachesAt",value:function(k){var S=this.cachesByLvl,M=this.lvls,O=S.get(k);return O||(O=new wm,S.set(k,O),M.push(k)),O}},{key:"getCache",value:function(k,S){return this.getCachesAt(S).get(k)}},{key:"get",value:function(k,S){var M=this.getKey(k),O=this.getCache(M,S);return O!=null&&this.updateKeyMappingFor(k),O}},{key:"getForCachedKey",value:function(k,S){var M=this.keyForId.get(k.id()),O=this.getCache(M,S);return O}},{key:"hasCache",value:function(k,S){return this.getCachesAt(S).has(k)}},{key:"has",value:function(k,S){var M=this.getKey(k);return this.hasCache(M,S)}},{key:"setCache",value:function(k,S,M){M.key=k,this.getCachesAt(S).set(k,M)}},{key:"set",value:function(k,S,M){var O=this.getKey(k);this.setCache(O,S,M),this.updateKeyMappingFor(k)}},{key:"deleteCache",value:function(k,S){this.getCachesAt(S).delete(k)}},{key:"delete",value:function(k,S){var M=this.getKey(k);this.deleteCache(M,S)}},{key:"invalidateKey",value:function(k){var S=this;this.lvls.forEach(function(M){return S.deleteCache(k,M)})}},{key:"invalidate",value:function(k){var S=k.id(),M=this.keyForId.get(S);this.deleteKeyMappingFor(k);var O=this.doesEleInvalidateKey(k);return O&&this.invalidateKey(M),O||this.getNumberOfIdsForKey(M)===0}}]),x}(),cz=25,YS=50,XS=-4,jI=3,Gre=7.99,Kre=8,Wre=1024,Yre=1024,Xre=1024,Qre=.2,Jre=.8,Zre=10,eie=.15,tie=.1,nie=.9,rie=.9,iie=100,sie=1,v8={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},aie=q0({getKey:null,doesEleInvalidateKey:X3,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:l5,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),dk=function(m,k){var S=this;S.renderer=m,S.onDequeues=[];var M=aie(k);yt(S,M),S.lookup=new Ure(M.getKey,M.doesEleInvalidateKey),S.setupDequeueing()},Cf=dk.prototype;Cf.reasons=v8,Cf.getTextureQueue=function(x){var m=this;return m.eleImgCaches=m.eleImgCaches||{},m.eleImgCaches[x]=m.eleImgCaches[x]||[]},Cf.getRetiredTextureQueue=function(x){var m=this,k=m.eleImgCaches.retired=m.eleImgCaches.retired||{},S=k[x]=k[x]||[];return S},Cf.getElementQueue=function(){var x=this,m=x.eleCacheQueue=x.eleCacheQueue||new V9(function(k,S){return S.reqs-k.reqs});return m},Cf.getElementKeyToQueue=function(){var x=this,m=x.eleKeyToCacheQueue=x.eleKeyToCacheQueue||{};return m},Cf.getElement=function(x,m,k,S,M){var O=this,N=this.renderer,$=N.cy.zoom(),H=this.lookup;if(!m||m.w===0||m.h===0||isNaN(m.w)||isNaN(m.h)||!x.visible()||x.removed()||!O.allowEdgeTxrCaching&&x.isEdge()||!O.allowParentTxrCaching&&x.isParent())return null;if(S==null&&(S=Math.ceil(iI($*k))),S=Gre||S>jI)return null;var q=Math.pow(2,S),Y=m.h*q,Z=m.w*q,ce=N.eleTextBiggerThanMin(x,q);if(!this.isVisible(x,ce))return null;var ve=H.get(x,S);if(ve&&ve.invalidated&&(ve.invalidated=!1,ve.texture.invalidatedWidth-=ve.width),ve)return ve;var me;if(Y<=cz?me=cz:Y<=YS?me=YS:me=Math.ceil(Y/YS)*YS,Y>Xre||Z>Yre)return null;var Le=O.getTextureQueue(me),_e=Le[Le.length-2],Ee=function(){return O.recycleTexture(me,Z)||O.addTexture(me,Z)};_e||(_e=Le[Le.length-1]),_e||(_e=Ee()),_e.width-_e.usedWidthS;Mt--)Je=O.getElement(x,m,k,Mt,v8.downscale);Lt()}else return O.queueElement(x,st.level-1),st;else{var ut;if(!Re&&!Ve&&!ct)for(var Wt=S-1;Wt>=XS;Wt--){var Tt=H.get(x,Wt);if(Tt){ut=Tt;break}}if(Be(ut))return O.queueElement(x,S),ut;_e.context.translate(_e.usedWidth,0),_e.context.scale(q,q),this.drawElement(_e.context,x,m,ce,!1),_e.context.scale(1/q,1/q),_e.context.translate(-_e.usedWidth,0)}return ve={x:_e.usedWidth,texture:_e,level:S,scale:q,width:Z,height:Y,scaledLabelShown:ce},_e.usedWidth+=Math.ceil(Z+Kre),_e.eleCaches.push(ve),H.set(x,S,ve),O.checkTextureFullness(_e),ve},Cf.invalidateElements=function(x){for(var m=0;m=Qre*x.width&&this.retireTexture(x)},Cf.checkTextureFullness=function(x){var m=this,k=m.getTextureQueue(x.height);x.usedWidth/x.width>Jre&&x.fullnessChecks>=Zre?Q3(k,x):x.fullnessChecks++},Cf.retireTexture=function(x){var m=this,k=x.height,S=m.getTextureQueue(k),M=this.lookup;Q3(S,x),x.retired=!0;for(var O=x.eleCaches,N=0;N=m)return N.retired=!1,N.usedWidth=0,N.invalidatedWidth=0,N.fullnessChecks=0,cS(N.eleCaches),N.context.setTransform(1,0,0,1,0,0),N.context.clearRect(0,0,N.width,N.height),Q3(M,N),S.push(N),N}},Cf.queueElement=function(x,m){var k=this,S=k.getElementQueue(),M=k.getElementKeyToQueue(),O=this.getKey(x),N=M[O];if(N)N.level=Math.max(N.level,m),N.eles.merge(x),N.reqs++,S.updateItem(N);else{var $={eles:x.spawn().merge(x),level:m,reqs:1,key:O};S.push($),M[O]=$}},Cf.dequeue=function(x){for(var m=this,k=m.getElementQueue(),S=m.getElementKeyToQueue(),M=[],O=m.lookup,N=0;N0;N++){var $=k.pop(),H=$.key,q=$.eles[0],Y=O.hasCache(q,$.level);if(S[H]=null,Y)continue;M.push($);var Z=m.getBoundingBox(q);m.getElement(q,Z,x,$.level,v8.dequeue)}return M},Cf.removeFromQueue=function(x){var m=this,k=m.getElementQueue(),S=m.getElementKeyToQueue(),M=this.getKey(x),O=S[M];O!=null&&(O.eles.length===1?(O.reqs=X7,k.updateItem(O),k.pop(),S[M]=null):O.eles.unmerge(x))},Cf.onDequeue=function(x){this.onDequeues.push(x)},Cf.offDequeue=function(x){Q3(this.onDequeues,x)},Cf.setupDequeueing=oz.setupDequeueing({deqRedrawThreshold:iie,deqCost:eie,deqAvgCost:tie,deqNoDrawCost:nie,deqFastCost:rie,deq:function(m,k,S){return m.dequeue(k,S)},onDeqd:function(m,k){for(var S=0;S=cie||k>QS)return null}S.validateLayersElesOrdering(k,x);var H=S.layersByLevel,q=Math.pow(2,k),Y=H[k]=H[k]||[],Z,ce=S.levelIsComplete(k,x),ve,me=function(){var Lt=function(_n){if(S.validateLayersElesOrdering(_n,x),S.levelIsComplete(_n,x))return ve=H[_n],!0},Mt=function(_n){if(!ve)for(var hn=k+_n;gk<=hn&&hn<=QS&&!Lt(hn);hn+=_n);};Mt(1),Mt(-1);for(var ut=Y.length-1;ut>=0;ut--){var Wt=Y[ut];Wt.invalid&&Q3(Y,Wt)}};if(!ce)me();else return Y;var Le=function(){if(!Z){Z=Wd();for(var Lt=0;Lthz)return null;var Wt=S.makeLayer(Z,k);if(Mt!=null){var Tt=Y.indexOf(Mt)+1;Y.splice(Tt,0,Wt)}else(Lt.insert===void 0||Lt.insert)&&Y.unshift(Wt);return Wt};if(S.skipping&&!$)return null;for(var Ee=null,Be=x.length/oie,Re=!$,Ve=0;Ve=Be||!pj(Ee.bb,ct.boundingBox()))&&(Ee=_e({insert:!0,after:Ee}),!Ee))return null;ve||Re?S.queueLayer(Ee,ct):S.drawEleInLayer(Ee,ct,k,m),Ee.eles.push(ct),Ye[k]=Ee}return ve||(Re?null:Y)},n0.getEleLevelForLayerLevel=function(x,m){return x},n0.drawEleInLayer=function(x,m,k,S){var M=this,O=this.renderer,N=x.context,$=m.boundingBox();$.w===0||$.h===0||!m.visible()||(k=M.getEleLevelForLayerLevel(k,S),O.setImgSmoothing(N,!1),O.drawCachedElement(N,m,null,null,k,fz),O.setImgSmoothing(N,!0))},n0.levelIsComplete=function(x,m){var k=this,S=k.layersByLevel[x];if(!S||S.length===0)return!1;for(var M=0,O=0;O0||N.invalid)return!1;M+=N.eles.length}return M===m.length},n0.validateLayersElesOrdering=function(x,m){var k=this.layersByLevel[x];if(k)for(var S=0;S0){m=!0;break}}return m},n0.invalidateElements=function(x){var m=this;x.length!==0&&(m.lastInvalidationTime=Bp(),!(x.length===0||!m.haveLayers())&&m.updateElementsInLayers(x,function(S,M,O){m.invalidateLayer(S)}))},n0.invalidateLayer=function(x){if(this.lastInvalidationTime=Bp(),!x.invalid){var m=x.level,k=x.eles,S=this.layersByLevel[m];Q3(S,x),x.elesQueue=[],x.invalid=!0,x.replacement&&(x.replacement.invalid=!0);for(var M=0;M3&&arguments[3]!==void 0?arguments[3]:!0,M=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,O=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,N=this,$=m._private.rscratch;if(!(O&&!m.visible())&&!($.badLine||$.allpts==null||isNaN($.allpts[0]))){var H;k&&(H=k,x.translate(-H.x1,-H.y1));var q=O?m.pstyle("opacity").value:1,Y=O?m.pstyle("line-opacity").value:1,Z=m.pstyle("curve-style").value,ce=m.pstyle("line-style").value,ve=m.pstyle("width").pfValue,me=m.pstyle("line-cap").value,Le=q*Y,_e=q*Y,Ee=function(){var ut=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Le;Z==="straight-triangle"?(N.eleStrokeStyle(x,m,ut),N.drawEdgeTrianglePath(m,x,$.allpts)):(x.lineWidth=ve,x.lineCap=me,N.eleStrokeStyle(x,m,ut),N.drawEdgePath(m,x,$.allpts,ce),x.lineCap="butt")},Be=function(){M&&N.drawEdgeOverlay(x,m)},Re=function(){M&&N.drawEdgeUnderlay(x,m)},Ve=function(){var ut=arguments.length>0&&arguments[0]!==void 0?arguments[0]:_e;N.drawArrowheads(x,m,ut)},ct=function(){N.drawElementText(x,m,null,S)};x.lineJoin="round";var st=m.pstyle("ghost").value==="yes";if(st){var Ye=m.pstyle("ghost-offset-x").pfValue,mt=m.pstyle("ghost-offset-y").pfValue,Je=m.pstyle("ghost-opacity").value,Lt=Le*Je;x.translate(Ye,mt),Ee(Lt),Ve(Lt),x.translate(-Ye,-mt)}Re(),Ee(),Ve(),Be(),ct(),k&&x.translate(H.x1,H.y1)}};var wz=function(m){if(!["overlay","underlay"].includes(m))throw new Error("Invalid state");return function(k,S){if(S.visible()){var M=S.pstyle("".concat(m,"-opacity")).value;if(M!==0){var O=this,N=O.usePaths(),$=S._private.rscratch,H=S.pstyle("".concat(m,"-padding")).pfValue,q=2*H,Y=S.pstyle("".concat(m,"-color")).value;k.lineWidth=q,$.edgeType==="self"&&!N?k.lineCap="butt":k.lineCap="round",O.colorStrokeStyle(k,Y[0],Y[1],Y[2],M),O.drawEdgePath(S,k,$.allpts,"solid")}}}};J2.drawEdgeOverlay=wz("overlay"),J2.drawEdgeUnderlay=wz("underlay"),J2.drawEdgePath=function(x,m,k,S){var M=x._private.rscratch,O=m,N,$=!1,H=this.usePaths(),q=x.pstyle("line-dash-pattern").pfValue,Y=x.pstyle("line-dash-offset").pfValue;if(H){var Z=k.join("$"),ce=M.pathCacheKey&&M.pathCacheKey===Z;ce?(N=m=M.pathCache,$=!0):(N=m=new Path2D,M.pathCacheKey=Z,M.pathCache=N)}if(O.setLineDash)switch(S){case"dotted":O.setLineDash([1,1]);break;case"dashed":O.setLineDash(q),O.lineDashOffset=Y;break;case"solid":O.setLineDash([]);break}if(!$&&!M.badLine)switch(m.beginPath&&m.beginPath(),m.moveTo(k[0],k[1]),M.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var ve=2;ve+35&&arguments[5]!==void 0?arguments[5]:!0,N=this;if(S==null){if(O&&!N.eleTextBiggerThanMin(m))return}else if(S===!1)return;if(m.isNode()){var $=m.pstyle("label");if(!$||!$.value)return;var H=N.getLabelJustification(m);x.textAlign=H,x.textBaseline="bottom"}else{var q=m.element()._private.rscratch.badLine,Y=m.pstyle("label"),Z=m.pstyle("source-label"),ce=m.pstyle("target-label");if(q||(!Y||!Y.value)&&(!Z||!Z.value)&&(!ce||!ce.value))return;x.textAlign="center",x.textBaseline="bottom"}var ve=!k,me;k&&(me=k,x.translate(-me.x1,-me.y1)),M==null?(N.drawText(x,m,null,ve,O),m.isEdge()&&(N.drawText(x,m,"source",ve,O),N.drawText(x,m,"target",ve,O))):N.drawText(x,m,M,ve,O),k&&x.translate(me.x1,me.y1)},y5.getFontCache=function(x){var m;this.fontCaches=this.fontCaches||[];for(var k=0;k2&&arguments[2]!==void 0?arguments[2]:!0,S=m.pstyle("font-style").strValue,M=m.pstyle("font-size").pfValue+"px",O=m.pstyle("font-family").strValue,N=m.pstyle("font-weight").strValue,$=k?m.effectiveOpacity()*m.pstyle("text-opacity").value:1,H=m.pstyle("text-outline-opacity").value*$,q=m.pstyle("color").value,Y=m.pstyle("text-outline-color").value;x.font=S+" "+N+" "+M+" "+O,x.lineJoin="round",this.colorFillStyle(x,q[0],q[1],q[2],$),this.colorStrokeStyle(x,Y[0],Y[1],Y[2],H)};function zI(x,m,k,S,M){var O=arguments.length>5&&arguments[5]!==void 0?arguments[5]:5,N=arguments.length>6?arguments[6]:void 0;x.beginPath(),x.moveTo(m+O,k),x.lineTo(m+S-O,k),x.quadraticCurveTo(m+S,k,m+S,k+O),x.lineTo(m+S,k+M-O),x.quadraticCurveTo(m+S,k+M,m+S-O,k+M),x.lineTo(m+O,k+M),x.quadraticCurveTo(m,k+M,m,k+M-O),x.lineTo(m,k+O),x.quadraticCurveTo(m,k,m+O,k),x.closePath(),N?x.stroke():x.fill()}y5.getTextAngle=function(x,m){var k,S=x._private,M=S.rscratch,O=m?m+"-":"",N=x.pstyle(O+"text-rotation"),$=K2(M,"labelAngle",m);return N.strValue==="autorotate"?k=x.isEdge()?$:0:N.strValue==="none"?k=0:k=N.pfValue,k},y5.drawText=function(x,m,k){var S=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,M=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,O=m._private,N=O.rscratch,$=M?m.effectiveOpacity():1;if(!(M&&($===0||m.pstyle("text-opacity").value===0))){k==="main"&&(k=null);var H=K2(N,"labelX",k),q=K2(N,"labelY",k),Y,Z,ce=this.getLabelText(m,k);if(ce!=null&&ce!==""&&!isNaN(H)&&!isNaN(q)){this.setupTextStyle(x,m,M);var ve=k?k+"-":"",me=K2(N,"labelWidth",k),Le=K2(N,"labelHeight",k),_e=m.pstyle(ve+"text-margin-x").pfValue,Ee=m.pstyle(ve+"text-margin-y").pfValue,Be=m.isEdge(),Re=m.pstyle("text-halign").value,Ve=m.pstyle("text-valign").value;Be&&(Re="center",Ve="center"),H+=_e,q+=Ee;var ct;switch(S?ct=this.getTextAngle(m,k):ct=0,ct!==0&&(Y=H,Z=q,x.translate(Y,Z),x.rotate(ct),H=0,q=0),Ve){case"top":break;case"center":q+=Le/2;break;case"bottom":q+=Le;break}var st=m.pstyle("text-background-opacity").value,Ye=m.pstyle("text-border-opacity").value,mt=m.pstyle("text-border-width").pfValue,Je=m.pstyle("text-background-padding").pfValue,Lt=m.pstyle("text-background-shape").strValue,Mt=Lt.indexOf("round")===0,ut=2;if(st>0||mt>0&&Ye>0){var Wt=H-Je;switch(Re){case"left":Wt-=me;break;case"center":Wt-=me/2;break}var Tt=q-Le-Je,_n=me+2*Je,hn=Le+2*Je;if(st>0){var Yt=x.fillStyle,Dn=m.pstyle("text-background-color").value;x.fillStyle="rgba("+Dn[0]+","+Dn[1]+","+Dn[2]+","+st*$+")",Mt?zI(x,Wt,Tt,_n,hn,ut):x.fillRect(Wt,Tt,_n,hn),x.fillStyle=Yt}if(mt>0&&Ye>0){var ir=x.strokeStyle,vr=x.lineWidth,Nn=m.pstyle("text-border-color").value,pr=m.pstyle("text-border-style").value;if(x.strokeStyle="rgba("+Nn[0]+","+Nn[1]+","+Nn[2]+","+Ye*$+")",x.lineWidth=mt,x.setLineDash)switch(pr){case"dotted":x.setLineDash([1,1]);break;case"dashed":x.setLineDash([4,2]);break;case"double":x.lineWidth=mt/4,x.setLineDash([]);break;case"solid":x.setLineDash([]);break}if(Mt?zI(x,Wt,Tt,_n,hn,ut,"stroke"):x.strokeRect(Wt,Tt,_n,hn),pr==="double"){var Er=mt/2;Mt?zI(x,Wt+Er,Tt+Er,_n-Er*2,hn-Er*2,ut,"stroke"):x.strokeRect(Wt+Er,Tt+Er,_n-Er*2,hn-Er*2)}x.setLineDash&&x.setLineDash([]),x.lineWidth=vr,x.strokeStyle=ir}}var Mr=2*m.pstyle("text-outline-width").pfValue;if(Mr>0&&(x.lineWidth=Mr),m.pstyle("text-wrap").value==="wrap"){var Cr=K2(N,"labelWrapCachedLines",k),Or=K2(N,"labelLineHeight",k),Wn=me/2,br=this.getLabelJustification(m);switch(br==="auto"||(Re==="left"?br==="left"?H+=-me:br==="center"&&(H+=-Wn):Re==="center"?br==="left"?H+=-Wn:br==="right"&&(H+=Wn):Re==="right"&&(br==="center"?H+=Wn:br==="right"&&(H+=me))),Ve){case"top":q-=(Cr.length-1)*Or;break;case"center":case"bottom":q-=(Cr.length-1)*Or;break}for(var Sr=0;Sr0&&x.strokeText(Cr[Sr],H,q),x.fillText(Cr[Sr],H,q),q+=Or}else Mr>0&&x.strokeText(ce,H,q),x.fillText(ce,H,q);ct!==0&&(x.rotate(-ct),x.translate(-Y,-Z))}}};var w8={};w8.drawNode=function(x,m,k){var S=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,M=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,O=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,N=this,$,H,q=m._private,Y=q.rscratch,Z=m.position();if(!(!X(Z.x)||!X(Z.y))&&!(O&&!m.visible())){var ce=O?m.effectiveOpacity():1,ve=N.usePaths(),me,Le=!1,_e=m.padding();$=m.width()+2*_e,H=m.height()+2*_e;var Ee;k&&(Ee=k,x.translate(-Ee.x1,-Ee.y1));for(var Be=m.pstyle("background-image"),Re=Be.value,Ve=new Array(Re.length),ct=new Array(Re.length),st=0,Ye=0;Ye0&&arguments[0]!==void 0?arguments[0]:Wt;N.eleFillStyle(x,m,tr)},Er=function(){var tr=arguments.length>0&&arguments[0]!==void 0?arguments[0]:hn;N.colorStrokeStyle(x,Tt[0],Tt[1],Tt[2],tr)},Mr=function(){var tr=arguments.length>0&&arguments[0]!==void 0?arguments[0]:vr;N.colorStrokeStyle(x,Dn[0],Dn[1],Dn[2],tr)},Cr=function(tr,G,Jn,kr){var lr=N.nodePathCache=N.nodePathCache||[],Vt=ld(Jn==="polygon"?Jn+","+kr.join(","):Jn,""+G,""+tr),Hs=lr[Vt],wr,Es=!1;return Hs!=null?(wr=Hs,Es=!0,Y.pathCache=wr):(wr=new Path2D,lr[Vt]=Y.pathCache=wr),{path:wr,cacheHit:Es}},Or=m.pstyle("shape").strValue,Wn=m.pstyle("shape-polygon-points").pfValue;if(ve){x.translate(Z.x,Z.y);var br=Cr($,H,Or,Wn);me=br.path,Le=br.cacheHit}var Sr=function(){if(!Le){var tr=Z;ve&&(tr={x:0,y:0}),N.nodeShapes[N.getNodeShape(m)].draw(me||x,tr.x,tr.y,$,H)}ve?x.fill(me):x.fill()},Nr=function(){for(var tr=arguments.length>0&&arguments[0]!==void 0?arguments[0]:ce,G=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,Jn=q.backgrounding,kr=0,lr=0;lr0&&arguments[0]!==void 0?arguments[0]:!1,G=arguments.length>1&&arguments[1]!==void 0?arguments[1]:ce;N.hasPie(m)&&(N.drawPie(x,m,G),tr&&(ve||N.nodeShapes[N.getNodeShape(m)].draw(x,Z.x,Z.y,$,H)))},ys=function(){var tr=arguments.length>0&&arguments[0]!==void 0?arguments[0]:ce,G=(Mt>0?Mt:-Mt)*tr,Jn=Mt>0?0:255;Mt!==0&&(N.colorFillStyle(x,Jn,Jn,Jn,G),ve?x.fill(me):x.fill())},pa=function(){if(ut>0){if(x.lineWidth=ut,x.lineCap="butt",x.setLineDash)switch(_n){case"dotted":x.setLineDash([1,1]);break;case"dashed":x.setLineDash([4,2]);break;case"solid":case"double":x.setLineDash([]);break}if(ve?x.stroke(me):x.stroke(),_n==="double"){x.lineWidth=ut/3;var tr=x.globalCompositeOperation;x.globalCompositeOperation="destination-out",ve?x.stroke(me):x.stroke(),x.globalCompositeOperation=tr}x.setLineDash&&x.setLineDash([])}},Mi=function(){if(Yt>0){if(x.lineWidth=Yt,x.lineCap="butt",x.setLineDash)switch(ir){case"dotted":x.setLineDash([1,1]);break;case"dashed":x.setLineDash([4,2]);break;case"solid":case"double":x.setLineDash([]);break}var tr=Z;ve&&(tr={x:0,y:0});var G=N.getNodeShape(m),Jn=($+ut+(Yt+Nn))/$,kr=(H+ut+(Yt+Nn))/H,lr=$*Jn,Vt=H*kr,Hs=N.nodeShapes[G].points,wr;if(ve){var Es=Cr(lr,Vt,G,Hs);wr=Es.path}if(G==="ellipse")N.drawEllipsePath(wr||x,tr.x,tr.y,lr,Vt);else if(["round-diamond","round-heptagon","round-hexagon","round-octagon","round-pentagon","round-polygon","round-triangle","round-tag"].includes(G)){var go=0,$c=0,za=0;G==="round-diamond"?go=(ut+Nn+Yt)*1.4:G==="round-heptagon"?(go=(ut+Nn+Yt)*1.075,za=-(ut/2+Nn+Yt)/35):G==="round-hexagon"?go=(ut+Nn+Yt)*1.12:G==="round-pentagon"?(go=(ut+Nn+Yt)*1.13,za=-(ut/2+Nn+Yt)/15):G==="round-tag"?(go=(ut+Nn+Yt)*1.12,$c=(ut/2+Yt+Nn)*.07):G==="round-triangle"&&(go=(ut+Nn+Yt)*(Math.PI/2),za=-(ut+Nn/2+Yt)/Math.PI),go!==0&&(Jn=($+go)/$,kr=(H+go)/H),N.drawRoundPolygonPath(wr||x,tr.x+$c,tr.y+za,$*Jn,H*kr,Hs)}else if(["roundrectangle","round-rectangle"].includes(G))N.drawRoundRectanglePath(wr||x,tr.x,tr.y,lr,Vt);else if(["cutrectangle","cut-rectangle"].includes(G))N.drawCutRectanglePath(wr||x,tr.x,tr.y,lr,Vt);else if(["bottomroundrectangle","bottom-round-rectangle"].includes(G))N.drawBottomRoundRectanglePath(wr||x,tr.x,tr.y,lr,Vt);else if(G==="barrel")N.drawBarrelPath(wr||x,tr.x,tr.y,lr,Vt);else if(G.startsWith("polygon")||["rhomboid","right-rhomboid","round-tag","tag","vee"].includes(G)){var Sc=(ut+Yt+Nn)/$;Hs=gS(pS(Hs,Sc)),N.drawPolygonPath(wr||x,tr.x,tr.y,$,H,Hs)}else{var ba=(ut+Yt+Nn)/$;Hs=gS(pS(Hs,-ba)),N.drawPolygonPath(wr||x,tr.x,tr.y,$,H,Hs)}if(ve?x.stroke(wr):x.stroke(),ir==="double"){x.lineWidth=ut/3;var xo=x.globalCompositeOperation;x.globalCompositeOperation="destination-out",ve?x.stroke(wr):x.stroke(),x.globalCompositeOperation=xo}x.setLineDash&&x.setLineDash([])}},gi=function(){M&&N.drawNodeOverlay(x,m,Z,$,H)},fs=function(){M&&N.drawNodeUnderlay(x,m,Z,$,H)},Fs=function(){N.drawElementText(x,m,null,S)},xs=m.pstyle("ghost").value==="yes";if(xs){var Rs=m.pstyle("ghost-offset-x").pfValue,yo=m.pstyle("ghost-offset-y").pfValue,$a=m.pstyle("ghost-opacity").value,Da=$a*ce;x.translate(Rs,yo),Mr(),Mi(),pr($a*Wt),Sr(),Nr(Da,!0),Er($a*hn),pa(),Si(Mt!==0||ut!==0),Nr(Da,!1),ys(Da),x.translate(-Rs,-yo)}ve&&x.translate(-Z.x,-Z.y),fs(),ve&&x.translate(Z.x,Z.y),Mr(),Mi(),pr(),Sr(),Nr(ce,!0),Er(),pa(),Si(Mt!==0||ut!==0),Nr(ce,!1),ys(),ve&&x.translate(-Z.x,-Z.y),Fs(),gi(),k&&x.translate(Ee.x1,Ee.y1)}};var qI=function(m){if(!["overlay","underlay"].includes(m))throw new Error("Invalid state");return function(k,S,M,O,N){var $=this;if(S.visible()){var H=S.pstyle("".concat(m,"-padding")).pfValue,q=S.pstyle("".concat(m,"-opacity")).value,Y=S.pstyle("".concat(m,"-color")).value,Z=S.pstyle("".concat(m,"-shape")).value;if(q>0){if(M=M||S.position(),O==null||N==null){var ce=S.padding();O=S.width()+2*ce,N=S.height()+2*ce}$.colorFillStyle(k,Y[0],Y[1],Y[2],q),$.nodeShapes[Z].draw(k,M.x,M.y,O+H*2,N+H*2),k.fill()}}}};w8.drawNodeOverlay=qI("overlay"),w8.drawNodeUnderlay=qI("underlay"),w8.hasPie=function(x){return x=x[0],x._private.hasPie},w8.drawPie=function(x,m,k,S){m=m[0],S=S||m.position();var M=m.cy().style(),O=m.pstyle("pie-size"),N=S.x,$=S.y,H=m.width(),q=m.height(),Y=Math.min(H,q)/2,Z=0,ce=this.usePaths();ce&&(N=0,$=0),O.units==="%"?Y=Y*O.pfValue:O.pfValue!==void 0&&(Y=O.pfValue/2);for(var ve=1;ve<=M.pieBackgroundN;ve++){var me=m.pstyle("pie-"+ve+"-background-size").value,Le=m.pstyle("pie-"+ve+"-background-color").value,_e=m.pstyle("pie-"+ve+"-background-opacity").value*k,Ee=me/100;Ee+Z>1&&(Ee=1-Z);var Be=1.5*Math.PI+2*Math.PI*Z,Re=2*Math.PI*Ee,Ve=Be+Re;me===0||Z>=1||Z+Ee>1||(x.beginPath(),x.moveTo(N,$),x.arc(N,$,Y,Be,Ve),x.closePath(),this.colorFillStyle(x,Le[0],Le[1],Le[2],_e),x.fill(),Z+=Ee)}};var qg={},xie=100;qg.getPixelRatio=function(){var x=this.data.contexts[0];if(this.forcedPixelRatio!=null)return this.forcedPixelRatio;var m=x.backingStorePixelRatio||x.webkitBackingStorePixelRatio||x.mozBackingStorePixelRatio||x.msBackingStorePixelRatio||x.oBackingStorePixelRatio||x.backingStorePixelRatio||1;return(window.devicePixelRatio||1)/m},qg.paintCache=function(x){for(var m=this.paintCaches=this.paintCaches||[],k=!0,S,M=0;MN.minMbLowQualFrames&&(N.motionBlurPxRatio=N.mbPxRBlurry)),N.clearingMotionBlur&&(N.motionBlurPxRatio=1),N.textureDrawLastFrame&&!Z&&(Y[N.NODE]=!0,Y[N.SELECT_BOX]=!0);var Be=H.style(),Re=H.zoom(),Ve=M!==void 0?M:Re,ct=H.pan(),st={x:ct.x,y:ct.y},Ye={zoom:Re,pan:{x:ct.x,y:ct.y}},mt=N.prevViewport,Je=mt===void 0||Ye.zoom!==mt.zoom||Ye.pan.x!==mt.pan.x||Ye.pan.y!==mt.pan.y;!Je&&!(Le&&!me)&&(N.motionBlurPxRatio=1),O&&(st=O),Ve*=$,st.x*=$,st.y*=$;var Lt=N.getCachedZSortedEles();function Mt(Mi,gi,fs,Fs,xs){var Rs=Mi.globalCompositeOperation;Mi.globalCompositeOperation="destination-out",N.colorFillStyle(Mi,255,255,255,N.motionBlurTransparency),Mi.fillRect(gi,fs,Fs,xs),Mi.globalCompositeOperation=Rs}function ut(Mi,gi){var fs,Fs,xs,Rs;!N.clearingMotionBlur&&(Mi===q.bufferContexts[N.MOTIONBLUR_BUFFER_NODE]||Mi===q.bufferContexts[N.MOTIONBLUR_BUFFER_DRAG])?(fs={x:ct.x*ve,y:ct.y*ve},Fs=Re*ve,xs=N.canvasWidth*ve,Rs=N.canvasHeight*ve):(fs=st,Fs=Ve,xs=N.canvasWidth,Rs=N.canvasHeight),Mi.setTransform(1,0,0,1,0,0),gi==="motionBlur"?Mt(Mi,0,0,xs,Rs):!m&&(gi===void 0||gi)&&Mi.clearRect(0,0,xs,Rs),k||(Mi.translate(fs.x,fs.y),Mi.scale(Fs,Fs)),O&&Mi.translate(O.x,O.y),M&&Mi.scale(M,M)}if(Z||(N.textureDrawLastFrame=!1),Z){if(N.textureDrawLastFrame=!0,!N.textureCache){N.textureCache={},N.textureCache.bb=H.mutableElements().boundingBox(),N.textureCache.texture=N.data.bufferCanvases[N.TEXTURE_BUFFER];var Wt=N.data.bufferContexts[N.TEXTURE_BUFFER];Wt.setTransform(1,0,0,1,0,0),Wt.clearRect(0,0,N.canvasWidth*N.textureMult,N.canvasHeight*N.textureMult),N.render({forcedContext:Wt,drawOnlyNodeLayer:!0,forcedPxRatio:$*N.textureMult});var Ye=N.textureCache.viewport={zoom:H.zoom(),pan:H.pan(),width:N.canvasWidth,height:N.canvasHeight};Ye.mpan={x:(0-Ye.pan.x)/Ye.zoom,y:(0-Ye.pan.y)/Ye.zoom}}Y[N.DRAG]=!1,Y[N.NODE]=!1;var Tt=q.contexts[N.NODE],_n=N.textureCache.texture,Ye=N.textureCache.viewport;Tt.setTransform(1,0,0,1,0,0),ce?Mt(Tt,0,0,Ye.width,Ye.height):Tt.clearRect(0,0,Ye.width,Ye.height);var hn=Be.core("outside-texture-bg-color").value,Yt=Be.core("outside-texture-bg-opacity").value;N.colorFillStyle(Tt,hn[0],hn[1],hn[2],Yt),Tt.fillRect(0,0,Ye.width,Ye.height);var Re=H.zoom();ut(Tt,!1),Tt.clearRect(Ye.mpan.x,Ye.mpan.y,Ye.width/Ye.zoom/$,Ye.height/Ye.zoom/$),Tt.drawImage(_n,Ye.mpan.x,Ye.mpan.y,Ye.width/Ye.zoom/$,Ye.height/Ye.zoom/$)}else N.textureOnViewport&&!m&&(N.textureCache=null);var Dn=H.extent(),ir=N.pinching||N.hoverData.dragging||N.swipePanning||N.data.wheelZooming||N.hoverData.draggingEles||N.cy.animated(),vr=N.hideEdgesOnViewport&&ir,Nn=[];if(Nn[N.NODE]=!Y[N.NODE]&&ce&&!N.clearedForMotionBlur[N.NODE]||N.clearingMotionBlur,Nn[N.NODE]&&(N.clearedForMotionBlur[N.NODE]=!0),Nn[N.DRAG]=!Y[N.DRAG]&&ce&&!N.clearedForMotionBlur[N.DRAG]||N.clearingMotionBlur,Nn[N.DRAG]&&(N.clearedForMotionBlur[N.DRAG]=!0),Y[N.NODE]||k||S||Nn[N.NODE]){var pr=ce&&!Nn[N.NODE]&&ve!==1,Tt=m||(pr?N.data.bufferContexts[N.MOTIONBLUR_BUFFER_NODE]:q.contexts[N.NODE]),Er=ce&&!pr?"motionBlur":void 0;ut(Tt,Er),vr?N.drawCachedNodes(Tt,Lt.nondrag,$,Dn):N.drawLayeredElements(Tt,Lt.nondrag,$,Dn),N.debug&&N.drawDebugPoints(Tt,Lt.nondrag),!k&&!ce&&(Y[N.NODE]=!1)}if(!S&&(Y[N.DRAG]||k||Nn[N.DRAG])){var pr=ce&&!Nn[N.DRAG]&&ve!==1,Tt=m||(pr?N.data.bufferContexts[N.MOTIONBLUR_BUFFER_DRAG]:q.contexts[N.DRAG]);ut(Tt,ce&&!pr?"motionBlur":void 0),vr?N.drawCachedNodes(Tt,Lt.drag,$,Dn):N.drawCachedElements(Tt,Lt.drag,$,Dn),N.debug&&N.drawDebugPoints(Tt,Lt.drag),!k&&!ce&&(Y[N.DRAG]=!1)}if(N.showFps||!S&&Y[N.SELECT_BOX]&&!k){var Tt=m||q.contexts[N.SELECT_BOX];if(ut(Tt),N.selection[4]==1&&(N.hoverData.selecting||N.touchData.selecting)){var Re=N.cy.zoom(),Mr=Be.core("selection-box-border-width").value/Re;Tt.lineWidth=Mr,Tt.fillStyle="rgba("+Be.core("selection-box-color").value[0]+","+Be.core("selection-box-color").value[1]+","+Be.core("selection-box-color").value[2]+","+Be.core("selection-box-opacity").value+")",Tt.fillRect(N.selection[0],N.selection[1],N.selection[2]-N.selection[0],N.selection[3]-N.selection[1]),Mr>0&&(Tt.strokeStyle="rgba("+Be.core("selection-box-border-color").value[0]+","+Be.core("selection-box-border-color").value[1]+","+Be.core("selection-box-border-color").value[2]+","+Be.core("selection-box-opacity").value+")",Tt.strokeRect(N.selection[0],N.selection[1],N.selection[2]-N.selection[0],N.selection[3]-N.selection[1]))}if(q.bgActivePosistion&&!N.hoverData.selecting){var Re=N.cy.zoom(),Cr=q.bgActivePosistion;Tt.fillStyle="rgba("+Be.core("active-bg-color").value[0]+","+Be.core("active-bg-color").value[1]+","+Be.core("active-bg-color").value[2]+","+Be.core("active-bg-opacity").value+")",Tt.beginPath(),Tt.arc(Cr.x,Cr.y,Be.core("active-bg-size").pfValue/Re,0,2*Math.PI),Tt.fill()}var Or=N.lastRedrawTime;if(N.showFps&&Or){Or=Math.round(Or);var Wn=Math.round(1e3/Or);Tt.setTransform(1,0,0,1,0,0),Tt.fillStyle="rgba(255, 0, 0, 0.75)",Tt.strokeStyle="rgba(255, 0, 0, 0.75)",Tt.lineWidth=1,Tt.fillText("1 frame = "+Or+" ms = "+Wn+" fps",0,20);var br=60;Tt.strokeRect(0,30,250,20),Tt.fillRect(0,30,250*Math.min(Wn/br,1),20)}k||(Y[N.SELECT_BOX]=!1)}if(ce&&ve!==1){var Sr=q.contexts[N.NODE],Nr=N.data.bufferCanvases[N.MOTIONBLUR_BUFFER_NODE],Si=q.contexts[N.DRAG],ys=N.data.bufferCanvases[N.MOTIONBLUR_BUFFER_DRAG],pa=function(gi,fs,Fs){gi.setTransform(1,0,0,1,0,0),Fs||!Ee?gi.clearRect(0,0,N.canvasWidth,N.canvasHeight):Mt(gi,0,0,N.canvasWidth,N.canvasHeight);var xs=ve;gi.drawImage(fs,0,0,N.canvasWidth*xs,N.canvasHeight*xs,0,0,N.canvasWidth,N.canvasHeight)};(Y[N.NODE]||Nn[N.NODE])&&(pa(Sr,Nr,Nn[N.NODE]),Y[N.NODE]=!1),(Y[N.DRAG]||Nn[N.DRAG])&&(pa(Si,ys,Nn[N.DRAG]),Y[N.DRAG]=!1)}N.prevViewport=Ye,N.clearingMotionBlur&&(N.clearingMotionBlur=!1,N.motionBlurCleared=!0,N.motionBlur=!0),ce&&(N.motionBlurTimeout=setTimeout(function(){N.motionBlurTimeout=null,N.clearedForMotionBlur[N.NODE]=!1,N.clearedForMotionBlur[N.DRAG]=!1,N.motionBlur=!1,N.clearingMotionBlur=!Z,N.mbFrames=0,Y[N.NODE]=!0,Y[N.DRAG]=!0,N.redraw()},xie)),m||H.emit("render")};var iy={};iy.drawPolygonPath=function(x,m,k,S,M,O){var N=S/2,$=M/2;x.beginPath&&x.beginPath(),x.moveTo(m+N*O[0],k+$*O[1]);for(var H=1;H0&&N>0){ve.clearRect(0,0,O,N),ve.globalCompositeOperation="source-over";var me=this.getCachedZSortedEles();if(x.full)ve.translate(-S.x1*q,-S.y1*q),ve.scale(q,q),this.drawElements(ve,me),ve.scale(1/q,1/q),ve.translate(S.x1*q,S.y1*q);else{var Le=m.pan(),_e={x:Le.x*q,y:Le.y*q};q*=m.zoom(),ve.translate(_e.x,_e.y),ve.scale(q,q),this.drawElements(ve,me),ve.scale(1/q,1/q),ve.translate(-_e.x,-_e.y)}x.bg&&(ve.globalCompositeOperation="destination-over",ve.fillStyle=x.bg,ve.rect(0,0,O,N),ve.fill())}return ce};function kie(x,m){for(var k=atob(x),S=new ArrayBuffer(k.length),M=new Uint8Array(S),O=0;O"u"?"undefined":u(OffscreenCanvas))!=="undefined"?k=new OffscreenCanvas(x,m):(k=document.createElement("canvas"),k.width=x,k.height=m),k},[pz,Q2,J2,bk,y5,w8,qg,iy,mk,Cz].forEach(function(x){yt(jc,x)});var $p=[{name:"null",impl:W$},{name:"base",impl:az},{name:"canvas",impl:Sz}],Eie=[{type:"layout",extensions:qre},{type:"renderer",extensions:$p}],Tie={},Cie={};function Sie(x,m,k){var S=k,M=function(mt){hu("Can not register `"+m+"` for `"+x+"` since `"+mt+"` already exists in the prototype and can not be overridden")};if(x==="core"){if(lk.prototype[m])return M(m);lk.prototype[m]=k}else if(x==="collection"){if(V0.prototype[m])return M(m);V0.prototype[m]=k}else if(x==="layout"){for(var O=function(mt){this.options=mt,k.call(this,mt),se(this._private)||(this._private={}),this._private.cy=mt.cy,this._private.listeners=[],this.createEmitter()},N=O.prototype=Object.create(k.prototype),$=[],H=0;H<$.length;H++){var q=$[H];N[q]=N[q]||function(){return this}}N.start&&!N.run?N.run=function(){return this.start(),this}:!N.start&&N.run&&(N.start=function(){return this.run(),this});var Y=k.prototype.stop;N.stop=function(){var Ye=this.options;if(Ye&&Ye.animate){var mt=this.animations;if(mt)for(var Je=0;Jej&&(this.rect.x-=(this.labelWidth-j)/2,this.setWidth(this.labelWidth)),this.labelHeight>K&&(this.labelPos=="center"?this.rect.y-=(this.labelHeight-K)/2:this.labelPos=="top"&&(this.rect.y-=this.labelHeight-K),this.setHeight(this.labelHeight))}}},P.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==b.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},P.prototype.transform=function(F){var j=this.rect.x;j>T.WORLD_BOUNDARY?j=T.WORLD_BOUNDARY:j<-T.WORLD_BOUNDARY&&(j=-T.WORLD_BOUNDARY);var K=this.rect.y;K>T.WORLD_BOUNDARY?K=T.WORLD_BOUNDARY:K<-T.WORLD_BOUNDARY&&(K=-T.WORLD_BOUNDARY);var ee=new A(j,K),ie=F.inverseTransformPoint(ee);this.setLocation(ie.x,ie.y)},P.prototype.getLeft=function(){return this.rect.x},P.prototype.getRight=function(){return this.rect.x+this.rect.width},P.prototype.getTop=function(){return this.rect.y},P.prototype.getBottom=function(){return this.rect.y+this.rect.height},P.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},u.exports=P},function(u,d,p){function v(b,y){b==null&&y==null?(this.x=0,this.y=0):(this.x=b,this.y=y)}v.prototype.getX=function(){return this.x},v.prototype.getY=function(){return this.y},v.prototype.setX=function(b){this.x=b},v.prototype.setY=function(b){this.y=b},v.prototype.getDifference=function(b){return new DimensionD(this.x-b.x,this.y-b.y)},v.prototype.getCopy=function(){return new v(this.x,this.y)},v.prototype.translate=function(b){return this.x+=b.width,this.y+=b.height,this},u.exports=v},function(u,d,p){var v=p(2),b=p(10),y=p(0),T=p(6),_=p(3),A=p(1),P=p(13),R=p(12),F=p(11);function j(ee,ie,oe){v.call(this,oe),this.estimatedSize=b.MIN_VALUE,this.margin=y.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=ee,ie!=null&&ie instanceof T?this.graphManager=ie:ie!=null&&ie instanceof Layout&&(this.graphManager=ie.graphManager)}j.prototype=Object.create(v.prototype);for(var K in v)j[K]=v[K];j.prototype.getNodes=function(){return this.nodes},j.prototype.getEdges=function(){return this.edges},j.prototype.getGraphManager=function(){return this.graphManager},j.prototype.getParent=function(){return this.parent},j.prototype.getLeft=function(){return this.left},j.prototype.getRight=function(){return this.right},j.prototype.getTop=function(){return this.top},j.prototype.getBottom=function(){return this.bottom},j.prototype.isConnected=function(){return this.isConnected},j.prototype.add=function(ee,ie,oe){if(ie==null&&oe==null){var pe=ee;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(pe)>-1)throw"Node already in graph!";return pe.owner=this,this.getNodes().push(pe),pe}else{var be=ee;if(!(this.getNodes().indexOf(ie)>-1&&this.getNodes().indexOf(oe)>-1))throw"Source or target not in graph!";if(!(ie.owner==oe.owner&&ie.owner==this))throw"Both owners must be this graph!";return ie.owner!=oe.owner?null:(be.source=ie,be.target=oe,be.isInterGraph=!1,this.getEdges().push(be),ie.edges.push(be),oe!=ie&&oe.edges.push(be),be)}},j.prototype.remove=function(ee){var ie=ee;if(ee instanceof _){if(ie==null)throw"Node is null!";if(!(ie.owner!=null&&ie.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var oe=ie.edges.slice(),pe,be=oe.length,ae=0;ae-1&&de>-1))throw"Source and/or target doesn't know this edge!";pe.source.edges.splice(se,1),pe.target!=pe.source&&pe.target.edges.splice(de,1);var ne=pe.source.owner.getEdges().indexOf(pe);if(ne==-1)throw"Not in owner's edge list!";pe.source.owner.getEdges().splice(ne,1)}},j.prototype.updateLeftTop=function(){for(var ee=b.MAX_VALUE,ie=b.MAX_VALUE,oe,pe,be,ae=this.getNodes(),ne=ae.length,se=0;seoe&&(ee=oe),ie>pe&&(ie=pe)}return ee==b.MAX_VALUE?null:(ae[0].getParent().paddingLeft!=null?be=ae[0].getParent().paddingLeft:be=this.margin,this.left=ie-be,this.top=ee-be,new R(this.left,this.top))},j.prototype.updateBounds=function(ee){for(var ie=b.MAX_VALUE,oe=-b.MAX_VALUE,pe=b.MAX_VALUE,be=-b.MAX_VALUE,ae,ne,se,de,X,ge=this.nodes,W=ge.length,xe=0;xeae&&(ie=ae),oese&&(pe=se),beae&&(ie=ae),oese&&(pe=se),be=this.nodes.length){var W=0;oe.forEach(function(xe){xe.owner==ee&&W++}),W==this.nodes.length&&(this.isConnected=!0)}},u.exports=j},function(u,d,p){var v,b=p(1);function y(T){v=p(5),this.layout=T,this.graphs=[],this.edges=[]}y.prototype.addRoot=function(){var T=this.layout.newGraph(),_=this.layout.newNode(null),A=this.add(T,_);return this.setRootGraph(A),this.rootGraph},y.prototype.add=function(T,_,A,P,R){if(A==null&&P==null&&R==null){if(T==null)throw"Graph is null!";if(_==null)throw"Parent node is null!";if(this.graphs.indexOf(T)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(T),T.parent!=null)throw"Already has a parent!";if(_.child!=null)throw"Already has a child!";return T.parent=_,_.child=T,T}else{R=A,P=_,A=T;var F=P.getOwner(),j=R.getOwner();if(!(F!=null&&F.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(j!=null&&j.getGraphManager()==this))throw"Target not in this graph mgr!";if(F==j)return A.isInterGraph=!1,F.add(A,P,R);if(A.isInterGraph=!0,A.source=P,A.target=R,this.edges.indexOf(A)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(A),!(A.source!=null&&A.target!=null))throw"Edge source and/or target is null!";if(!(A.source.edges.indexOf(A)==-1&&A.target.edges.indexOf(A)==-1))throw"Edge already in source and/or target incidency list!";return A.source.edges.push(A),A.target.edges.push(A),A}},y.prototype.remove=function(T){if(T instanceof v){var _=T;if(_.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(_==this.rootGraph||_.parent!=null&&_.parent.graphManager==this))throw"Invalid parent node!";var A=[];A=A.concat(_.getEdges());for(var P,R=A.length,F=0;F=T.getRight()?_[0]+=Math.min(T.getX()-y.getX(),y.getRight()-T.getRight()):T.getX()<=y.getX()&&T.getRight()>=y.getRight()&&(_[0]+=Math.min(y.getX()-T.getX(),T.getRight()-y.getRight())),y.getY()<=T.getY()&&y.getBottom()>=T.getBottom()?_[1]+=Math.min(T.getY()-y.getY(),y.getBottom()-T.getBottom()):T.getY()<=y.getY()&&T.getBottom()>=y.getBottom()&&(_[1]+=Math.min(y.getY()-T.getY(),T.getBottom()-y.getBottom()));var R=Math.abs((T.getCenterY()-y.getCenterY())/(T.getCenterX()-y.getCenterX()));T.getCenterY()===y.getCenterY()&&T.getCenterX()===y.getCenterX()&&(R=1);var F=R*_[0],j=_[1]/R;_[0]F)return _[0]=A,_[1]=K,_[2]=R,_[3]=ge,!1;if(PR)return _[0]=j,_[1]=P,_[2]=de,_[3]=F,!1;if(AR?(_[0]=ie,_[1]=oe,Fe=!0):(_[0]=ee,_[1]=K,Fe=!0):je===Se&&(A>R?(_[0]=j,_[1]=K,Fe=!0):(_[0]=pe,_[1]=oe,Fe=!0)),-Ie===Se?R>A?(_[2]=X,_[3]=ge,Pe=!0):(_[2]=de,_[3]=se,Pe=!0):Ie===Se&&(R>A?(_[2]=ne,_[3]=se,Pe=!0):(_[2]=W,_[3]=ge,Pe=!0)),Fe&&Pe)return!1;if(A>R?P>F?(Ce=this.getCardinalDirection(je,Se,4),ke=this.getCardinalDirection(Ie,Se,2)):(Ce=this.getCardinalDirection(-je,Se,3),ke=this.getCardinalDirection(-Ie,Se,1)):P>F?(Ce=this.getCardinalDirection(-je,Se,1),ke=this.getCardinalDirection(-Ie,Se,3)):(Ce=this.getCardinalDirection(je,Se,2),ke=this.getCardinalDirection(Ie,Se,4)),!Fe)switch(Ce){case 1:Ft=K,Ke=A+-ae/Se,_[0]=Ke,_[1]=Ft;break;case 2:Ke=pe,Ft=P+be*Se,_[0]=Ke,_[1]=Ft;break;case 3:Ft=oe,Ke=A+ae/Se,_[0]=Ke,_[1]=Ft;break;case 4:Ke=ie,Ft=P+-be*Se,_[0]=Ke,_[1]=Ft;break}if(!Pe)switch(ke){case 1:gn=se,Ne=R+-U/Se,_[2]=Ne,_[3]=gn;break;case 2:Ne=W,gn=F+xe*Se,_[2]=Ne,_[3]=gn;break;case 3:gn=ge,Ne=R+U/Se,_[2]=Ne,_[3]=gn;break;case 4:Ne=X,gn=F+-xe*Se,_[2]=Ne,_[3]=gn;break}}return!1},b.getCardinalDirection=function(y,T,_){return y>T?_:1+_%4},b.getIntersection=function(y,T,_,A){if(A==null)return this.getIntersection2(y,T,_);var P=y.x,R=y.y,F=T.x,j=T.y,K=_.x,ee=_.y,ie=A.x,oe=A.y,pe=void 0,be=void 0,ae=void 0,ne=void 0,se=void 0,de=void 0,X=void 0,ge=void 0,W=void 0;return ae=j-R,se=P-F,X=F*R-P*j,ne=oe-ee,de=K-ie,ge=ie*ee-K*oe,W=ae*de-ne*se,W===0?null:(pe=(se*ge-de*X)/W,be=(ne*X-ae*ge)/W,new v(pe,be))},b.angleOfVector=function(y,T,_,A){var P=void 0;return y!==_?(P=Math.atan((A-T)/(_-y)),_0?1:b<0?-1:0},v.floor=function(b){return b<0?Math.ceil(b):Math.floor(b)},v.ceil=function(b){return b<0?Math.floor(b):Math.ceil(b)},u.exports=v},function(u,d,p){function v(){}v.MAX_VALUE=2147483647,v.MIN_VALUE=-2147483648,u.exports=v},function(u,d,p){var v=function(){function P(R,F){for(var j=0;j"u"?"undefined":v(y);return y==null||T!="object"&&T!="function"},u.exports=b},function(u,d,p){function v(K){if(Array.isArray(K)){for(var ee=0,ie=Array(K.length);ee0&ⅇ){for(ae.push(se[0]);ae.length>0&ⅇ){var de=ae[0];ae.splice(0,1),be.add(de);for(var X=de.getEdges(),pe=0;pe-1&&se.splice(U,1)}be=new Set,ne=new Map}}return K},j.prototype.createDummyNodesForBendpoints=function(K){for(var ee=[],ie=K.source,oe=this.graphManager.calcLowestCommonAncestor(K.source,K.target),pe=0;pe0){for(var oe=this.edgeToDummyNodes.get(ie),pe=0;pe=0&&ee.splice(ge,1);var W=ne.getNeighborsList();W.forEach(function(Fe){if(ie.indexOf(Fe)<0){var Pe=oe.get(Fe),je=Pe-1;je==1&&de.push(Fe),oe.set(Fe,je)}})}ie=ie.concat(de),(ee.length==1||ee.length==2)&&(pe=!0,be=ee[0])}return be},j.prototype.setGraphManager=function(K){this.graphManager=K},u.exports=j},function(u,d,p){function v(){}v.seed=1,v.x=0,v.nextDouble=function(){return v.x=Math.sin(v.seed++)*1e4,v.x-Math.floor(v.x)},u.exports=v},function(u,d,p){var v=p(4);function b(y,T){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}b.prototype.getWorldOrgX=function(){return this.lworldOrgX},b.prototype.setWorldOrgX=function(y){this.lworldOrgX=y},b.prototype.getWorldOrgY=function(){return this.lworldOrgY},b.prototype.setWorldOrgY=function(y){this.lworldOrgY=y},b.prototype.getWorldExtX=function(){return this.lworldExtX},b.prototype.setWorldExtX=function(y){this.lworldExtX=y},b.prototype.getWorldExtY=function(){return this.lworldExtY},b.prototype.setWorldExtY=function(y){this.lworldExtY=y},b.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},b.prototype.setDeviceOrgX=function(y){this.ldeviceOrgX=y},b.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},b.prototype.setDeviceOrgY=function(y){this.ldeviceOrgY=y},b.prototype.getDeviceExtX=function(){return this.ldeviceExtX},b.prototype.setDeviceExtX=function(y){this.ldeviceExtX=y},b.prototype.getDeviceExtY=function(){return this.ldeviceExtY},b.prototype.setDeviceExtY=function(y){this.ldeviceExtY=y},b.prototype.transformX=function(y){var T=0,_=this.lworldExtX;return _!=0&&(T=this.ldeviceOrgX+(y-this.lworldOrgX)*this.ldeviceExtX/_),T},b.prototype.transformY=function(y){var T=0,_=this.lworldExtY;return _!=0&&(T=this.ldeviceOrgY+(y-this.lworldOrgY)*this.ldeviceExtY/_),T},b.prototype.inverseTransformX=function(y){var T=0,_=this.ldeviceExtX;return _!=0&&(T=this.lworldOrgX+(y-this.ldeviceOrgX)*this.lworldExtX/_),T},b.prototype.inverseTransformY=function(y){var T=0,_=this.ldeviceExtY;return _!=0&&(T=this.lworldOrgY+(y-this.ldeviceOrgY)*this.lworldExtY/_),T},b.prototype.inverseTransformPoint=function(y){var T=new v(this.inverseTransformX(y.x),this.inverseTransformY(y.y));return T},u.exports=b},function(u,d,p){function v(F){if(Array.isArray(F)){for(var j=0,K=Array(F.length);jy.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*y.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(F-y.ADAPTATION_LOWER_NODE_LIMIT)/(y.ADAPTATION_UPPER_NODE_LIMIT-y.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-y.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=y.MAX_NODE_DISPLACEMENT_INCREMENTAL):(F>y.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(y.COOLING_ADAPTATION_FACTOR,1-(F-y.ADAPTATION_LOWER_NODE_LIMIT)/(y.ADAPTATION_UPPER_NODE_LIMIT-y.ADAPTATION_LOWER_NODE_LIMIT)*(1-y.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=y.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},P.prototype.calcSpringForces=function(){for(var F=this.getAllEdges(),j,K=0;K0&&arguments[0]!==void 0?arguments[0]:!0,j=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,K,ee,ie,oe,pe=this.getAllNodes(),be;if(this.useFRGridVariant)for(this.totalIterations%y.GRID_CALCULATION_CHECK_PERIOD==1&&F&&this.updateGrid(),be=new Set,K=0;Kae||be>ae)&&(F.gravitationForceX=-this.gravityConstant*ie,F.gravitationForceY=-this.gravityConstant*oe)):(ae=j.getEstimatedSize()*this.compoundGravityRangeFactor,(pe>ae||be>ae)&&(F.gravitationForceX=-this.gravityConstant*ie*this.compoundGravityConstant,F.gravitationForceY=-this.gravityConstant*oe*this.compoundGravityConstant))},P.prototype.isConverged=function(){var F,j=!1;return this.totalIterations>this.maxIterations/3&&(j=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),F=this.totalDisplacement=pe.length||ae>=pe[0].length)){for(var ne=0;neP}}]),_}();u.exports=T},function(u,d,p){var v=function(){function T(_,A){for(var P=0;P2&&arguments[2]!==void 0?arguments[2]:1,R=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,F=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;b(this,T),this.sequence1=_,this.sequence2=A,this.match_score=P,this.mismatch_penalty=R,this.gap_penalty=F,this.iMax=_.length+1,this.jMax=A.length+1,this.grid=new Array(this.iMax);for(var j=0;j=0;_--){var A=this.listeners[_];A.event===y&&A.callback===T&&this.listeners.splice(_,1)}},b.emit=function(y,T){for(var _=0;_A.coolingFactor*A.maxNodeDisplacement&&(this.displacementX=A.coolingFactor*A.maxNodeDisplacement*y.sign(this.displacementX)),Math.abs(this.displacementY)>A.coolingFactor*A.maxNodeDisplacement&&(this.displacementY=A.coolingFactor*A.maxNodeDisplacement*y.sign(this.displacementY)),this.child==null?this.moveBy(this.displacementX,this.displacementY):this.child.getNodes().length==0?this.moveBy(this.displacementX,this.displacementY):this.propogateDisplacementToChildren(this.displacementX,this.displacementY),A.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},T.prototype.propogateDisplacementToChildren=function(A,P){for(var R=this.getChild().getNodes(),F,j=0;j0)this.positionNodesRadially(se);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var de=new Set(this.getAllNodes()),X=this.nodesWithGravity.filter(function(ge){return de.has(ge)});this.graphManager.setAllNodesToApplyGravitation(X),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},ae.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%R.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var se=new Set(this.getAllNodes()),de=this.nodesWithGravity.filter(function(W){return se.has(W)});this.graphManager.setAllNodesToApplyGravitation(de),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=R.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),this.coolingFactor=R.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var X=!this.isTreeGrowing&&!this.isGrowthFinished,ge=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(X,ge),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},ae.prototype.getPositionsData=function(){for(var se=this.graphManager.getAllNodes(),de={},X=0;X1){var Fe;for(Fe=0;Fege&&(ge=Math.floor(U.y)),xe=Math.floor(U.x+P.DEFAULT_COMPONENT_SEPERATION)}this.transform(new K(F.WORLD_CENTER_X-U.x/2,F.WORLD_CENTER_Y-U.y/2))},ae.radialLayout=function(se,de,X){var ge=Math.max(this.maxDiagonalInTree(se),P.DEFAULT_RADIAL_SEPARATION);ae.branchRadialLayout(de,null,0,359,0,ge);var W=pe.calculateBounds(se),xe=new be;xe.setDeviceOrgX(W.getMinX()),xe.setDeviceOrgY(W.getMinY()),xe.setWorldOrgX(X.x),xe.setWorldOrgY(X.y);for(var U=0;U1;){var gn=Ne[0];Ne.splice(0,1);var _t=Se.indexOf(gn);_t>=0&&Se.splice(_t,1),Ke--,Ce--}de!=null?Ft=(Se.indexOf(Ne[0])+1)%Ke:Ft=0;for(var Et=Math.abs(ge-X)/Ce,Gt=Ft;ke!=Ce;Gt=++Gt%Ke){var ln=Se[Gt].getOtherEnd(se);if(ln!=de){var xt=(X+ke*Et)%360,Pt=(xt+Et)%360;ae.branchRadialLayout(ln,se,xt,Pt,W+xe,xe),ke++}}},ae.maxDiagonalInTree=function(se){for(var de=ie.MIN_VALUE,X=0;Xde&&(de=W)}return de},ae.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},ae.prototype.groupZeroDegreeMembers=function(){var se=this,de={};this.memberGroups={},this.idToDummyNode={};for(var X=[],ge=this.graphManager.getAllNodes(),W=0;W"u"&&(de[Fe]=[]),de[Fe]=de[Fe].concat(xe)}Object.keys(de).forEach(function(Pe){if(de[Pe].length>1){var je="DummyCompound_"+Pe;se.memberGroups[je]=de[Pe];var Ie=de[Pe][0].getParent(),Se=new _(se.graphManager);Se.id=je,Se.paddingLeft=Ie.paddingLeft||0,Se.paddingRight=Ie.paddingRight||0,Se.paddingBottom=Ie.paddingBottom||0,Se.paddingTop=Ie.paddingTop||0,se.idToDummyNode[je]=Se;var Ce=se.getGraphManager().add(se.newGraph(),Se),ke=Ie.getChild();ke.add(Se);for(var Ke=0;Ke=0;se--){var de=this.compoundOrder[se],X=de.id,ge=de.paddingLeft,W=de.paddingTop;this.adjustLocations(this.tiledMemberPack[X],de.rect.x,de.rect.y,ge,W)}},ae.prototype.repopulateZeroDegreeMembers=function(){var se=this,de=this.tiledZeroDegreePack;Object.keys(de).forEach(function(X){var ge=se.idToDummyNode[X],W=ge.paddingLeft,xe=ge.paddingTop;se.adjustLocations(de[X],ge.rect.x,ge.rect.y,W,xe)})},ae.prototype.getToBeTiled=function(se){var de=se.id;if(this.toBeTiled[de]!=null)return this.toBeTiled[de];var X=se.getChild();if(X==null)return this.toBeTiled[de]=!1,!1;for(var ge=X.getNodes(),W=0;W0)return this.toBeTiled[de]=!1,!1;if(xe.getChild()==null){this.toBeTiled[xe.id]=!1;continue}if(!this.getToBeTiled(xe))return this.toBeTiled[de]=!1,!1}return this.toBeTiled[de]=!0,!0},ae.prototype.getNodeDegree=function(se){se.id;for(var de=se.getEdges(),X=0,ge=0;gePe&&(Pe=Ie.rect.height)}X+=Pe+se.verticalPadding}},ae.prototype.tileCompoundMembers=function(se,de){var X=this;this.tiledMemberPack=[],Object.keys(se).forEach(function(ge){var W=de[ge];X.tiledMemberPack[ge]=X.tileNodes(se[ge],W.paddingLeft+W.paddingRight),W.rect.width=X.tiledMemberPack[ge].width,W.rect.height=X.tiledMemberPack[ge].height})},ae.prototype.tileNodes=function(se,de){var X=P.TILING_PADDING_VERTICAL,ge=P.TILING_PADDING_HORIZONTAL,W={rows:[],rowWidth:[],rowHeight:[],width:0,height:de,verticalPadding:X,horizontalPadding:ge};se.sort(function(Fe,Pe){return Fe.rect.width*Fe.rect.height>Pe.rect.width*Pe.rect.height?-1:Fe.rect.width*Fe.rect.height0&&(U+=se.horizontalPadding),se.rowWidth[X]=U,se.width0&&(Fe+=se.verticalPadding);var Pe=0;Fe>se.rowHeight[X]&&(Pe=se.rowHeight[X],se.rowHeight[X]=Fe,Pe=se.rowHeight[X]-Pe),se.height+=Pe,se.rows[X].push(de)},ae.prototype.getShortestRowIndex=function(se){for(var de=-1,X=Number.MAX_VALUE,ge=0;geX&&(de=ge,X=se.rowWidth[ge]);return de},ae.prototype.canAddHorizontal=function(se,de,X){var ge=this.getShortestRowIndex(se);if(ge<0)return!0;var W=se.rowWidth[ge];if(W+se.horizontalPadding+de<=se.width)return!0;var xe=0;se.rowHeight[ge]0&&(xe=X+se.verticalPadding-se.rowHeight[ge]);var U;se.width-W>=de+se.horizontalPadding?U=(se.height+xe)/(W+de+se.horizontalPadding):U=(se.height+xe)/se.width,xe=X+se.verticalPadding;var Fe;return se.widthxe&&de!=X){ge.splice(-1,1),se.rows[X].push(W),se.rowWidth[de]=se.rowWidth[de]-xe,se.rowWidth[X]=se.rowWidth[X]+xe,se.width=se.rowWidth[instance.getLongestRowIndex(se)];for(var U=Number.MIN_VALUE,Fe=0;FeU&&(U=ge[Fe].height);de>0&&(U+=se.verticalPadding);var Pe=se.rowHeight[de]+se.rowHeight[X];se.rowHeight[de]=U,se.rowHeight[X]0)for(var ke=W;ke<=xe;ke++)Ce[0]+=this.grid[ke][U-1].length+this.grid[ke][U].length-1;if(xe0)for(var ke=U;ke<=Fe;ke++)Ce[3]+=this.grid[W-1][ke].length+this.grid[W][ke].length-1;for(var Ke=ie.MAX_VALUE,Ft,Ne,gn=0;gn0){var Fe;Fe=be.getGraphManager().add(be.newGraph(),X),this.processChildrenList(Fe,de,be)}}},K.prototype.stop=function(){return this.stopped=!0,this};var ie=function(pe){pe("layout","cose-bilkent",K)};typeof cytoscape<"u"&&ie(cytoscape),d.exports=ie}])})})(dWe);var gon=dWe.exports;const pon=hC(gon),bon=12,mon=function(i,s,u,d){s.append("path").attr("id","node-"+u.id).attr("class","node-bkg node-"+i.type2Str(u.type)).attr("d",`M0 ${u.height-5} v${-u.height+2*5} q0,-5 5,-5 h${u.width-2*5} q5,0 5,5 v${u.height-5} H0 Z`),s.append("line").attr("class","node-line-"+d).attr("x1",0).attr("y1",u.height).attr("x2",u.width).attr("y2",u.height)},von=function(i,s,u){s.append("rect").attr("id","node-"+u.id).attr("class","node-bkg node-"+i.type2Str(u.type)).attr("height",u.height).attr("width",u.width)},won=function(i,s,u){const d=u.width,p=u.height,v=.15*d,b=.25*d,y=.35*d,T=.2*d;s.append("path").attr("id","node-"+u.id).attr("class","node-bkg node-"+i.type2Str(u.type)).attr("d",`M0 0 a${v},${v} 0 0,1 ${d*.25},${-1*d*.1} - a${y},${y} 1 0,1 ${d*.4},${-1*d*.1} - a${b},${b} 1 0,1 ${d*.35},${1*d*.2} - - a${v},${v} 1 0,1 ${d*.15},${1*p*.35} - a${T},${T} 1 0,1 ${-1*d*.15},${1*p*.65} - - a${b},${v} 1 0,1 ${-1*d*.25},${d*.15} - a${y},${y} 1 0,1 ${-1*d*.5},0 - a${v},${v} 1 0,1 ${-1*d*.25},${-1*d*.15} - - a${v},${v} 1 0,1 ${-1*d*.1},${-1*p*.35} - a${T},${T} 1 0,1 ${d*.1},${-1*p*.65} - - H0 V0 Z`)},yon=function(i,s,u){const d=u.width,p=u.height,v=.15*d;s.append("path").attr("id","node-"+u.id).attr("class","node-bkg node-"+i.type2Str(u.type)).attr("d",`M0 0 a${v},${v} 1 0,0 ${d*.25},${-1*p*.1} - a${v},${v} 1 0,0 ${d*.25},0 - a${v},${v} 1 0,0 ${d*.25},0 - a${v},${v} 1 0,0 ${d*.25},${1*p*.1} - - a${v},${v} 1 0,0 ${d*.15},${1*p*.33} - a${v*.8},${v*.8} 1 0,0 0,${1*p*.34} - a${v},${v} 1 0,0 ${-1*d*.15},${1*p*.33} - - a${v},${v} 1 0,0 ${-1*d*.25},${p*.15} - a${v},${v} 1 0,0 ${-1*d*.25},0 - a${v},${v} 1 0,0 ${-1*d*.25},0 - a${v},${v} 1 0,0 ${-1*d*.25},${-1*p*.15} - - a${v},${v} 1 0,0 ${-1*d*.1},${-1*p*.33} - a${v*.8},${v*.8} 1 0,0 0,${-1*p*.34} - a${v},${v} 1 0,0 ${d*.1},${-1*p*.33} - - H0 V0 Z`)},xon=function(i,s,u){s.append("circle").attr("id","node-"+u.id).attr("class","node-bkg node-"+i.type2Str(u.type)).attr("r",u.width/2)};function kon(i,s,u,d,p){return i.insert("polygon",":first-child").attr("points",d.map(function(v){return v.x+","+v.y}).join(" ")).attr("transform","translate("+(p.width-s)/2+", "+u+")")}const Eon=function(i,s,u){const d=u.height,v=d/4,b=u.width-u.padding+2*v,y=[{x:v,y:0},{x:b-v,y:0},{x:b,y:-d/2},{x:b-v,y:-d},{x:v,y:-d},{x:0,y:-d/2}];kon(s,b,d,y,u)},Ton=function(i,s,u){s.append("rect").attr("id","node-"+u.id).attr("class","node-bkg node-"+i.type2Str(u.type)).attr("height",u.height).attr("rx",u.padding).attr("ry",u.padding).attr("width",u.width)},Con=function(i,s,u,d,p){const v=p.htmlLabels,b=d%(bon-1),y=s.append("g");u.section=b;let T="section-"+b;b<0&&(T+=" section-root"),y.attr("class",(u.class?u.class+" ":"")+"mindmap-node "+T);const _=y.append("g"),A=y.append("g"),P=u.descr.replace(/()/g,` -`);JQ(A,P,{useHtmlLabels:v,width:u.width,classes:"mindmap-node-label"}),v||A.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle");const R=A.node().getBBox(),[F]=NC(p.fontSize);if(u.height=R.height+F*1.1*.5+u.padding,u.width=R.width+2*u.padding,u.icon)if(u.type===i.nodeType.CIRCLE)u.height+=50,u.width+=50,y.append("foreignObject").attr("height","50px").attr("width",u.width).attr("style","text-align: center;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+b+" "+u.icon),A.attr("transform","translate("+u.width/2+", "+(u.height/2-1.5*u.padding)+")");else{u.width+=50;const j=u.height;u.height=Math.max(j,60);const K=Math.abs(u.height-j);y.append("foreignObject").attr("width","60px").attr("height",u.height).attr("style","text-align: center;margin-top:"+K/2+"px;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+b+" "+u.icon),A.attr("transform","translate("+(25+u.width/2)+", "+(K/2+u.padding/2)+")")}else if(v){const j=(u.width-R.width)/2,K=(u.height-R.height)/2;A.attr("transform","translate("+j+", "+K+")")}else{const j=u.width/2,K=u.padding/2;A.attr("transform","translate("+j+", "+K+")")}switch(u.type){case i.nodeType.DEFAULT:mon(i,_,u,b);break;case i.nodeType.ROUNDED_RECT:Ton(i,_,u);break;case i.nodeType.RECT:von(i,_,u);break;case i.nodeType.CIRCLE:_.attr("transform","translate("+u.width/2+", "+ +u.height/2+")"),xon(i,_,u);break;case i.nodeType.CLOUD:won(i,_,u);break;case i.nodeType.BANG:yon(i,_,u);break;case i.nodeType.HEXAGON:Eon(i,_,u);break}return i.setElementForId(u.id,y),u.height},Son=function(i,s){const u=i.getElementById(s.id),d=s.x||0,p=s.y||0;u.attr("transform","translate("+d+","+p+")")};fWe.use(pon);function bWe(i,s,u,d,p){Con(i,s,u,d,p),u.children&&u.children.forEach((v,b)=>{bWe(i,s,v,d<0?b:d,p)})}function _on(i,s){s.edges().map((u,d)=>{const p=u.data();if(u[0]._private.bodyBounds){const v=u[0]._private.rscratch;Xe.trace("Edge: ",d,p),i.insert("path").attr("d",`M ${v.startX},${v.startY} L ${v.midX},${v.midY} L${v.endX},${v.endY} `).attr("class","edge section-edge-"+p.section+" edge-depth-"+p.depth)}})}function mWe(i,s,u,d){s.add({group:"nodes",data:{id:i.id.toString(),labelText:i.descr,height:i.height,width:i.width,level:d,nodeId:i.id,padding:i.padding,type:i.type},position:{x:i.x,y:i.y}}),i.children&&i.children.forEach(p=>{mWe(p,s,u,d+1),s.add({group:"edges",data:{id:`${i.id}_${p.id}`,source:i.id,target:p.id,depth:d,section:p.section}})})}function Aon(i,s){return new Promise(u=>{const d=Ir("body").append("div").attr("id","cy").attr("style","display:none"),p=fWe({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});d.remove(),mWe(i,p,s,0),p.nodes().forEach(function(v){v.layoutDimensions=()=>{const b=v.data();return{w:b.width,h:b.height}}}),p.layout({name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1}).run(),p.ready(v=>{Xe.info("Ready",v),u(p)})})}function Lon(i,s){s.nodes().map((u,d)=>{const p=u.data();p.x=u.position().x,p.y=u.position().y,Son(i,p);const v=i.getElementById(p.nodeId);Xe.info("Id:",d,"Position: (",u.position().x,", ",u.position().y,")",p),v.attr("transform",`translate(${u.position().x-p.width/2}, ${u.position().y-p.height/2})`),v.attr("attr",`apa-${d})`)})}const Mon={draw:async(i,s,u,d)=>{var P,R;Xe.debug(`Rendering mindmap diagram -`+i);const p=d.db,v=p.getMindmap();if(!v)return;const b=qt();b.htmlLabels=!1;const y=rR(s),T=y.append("g");T.attr("class","mindmap-edges");const _=y.append("g");_.attr("class","mindmap-nodes"),bWe(p,_,v,-1,b);const A=await Aon(v,b);_on(T,A),Lon(p,A),y9(void 0,y,((P=b.mindmap)==null?void 0:P.padding)??sh.mindmap.padding,((R=b.mindmap)==null?void 0:R.useMaxWidth)??sh.mindmap.useMaxWidth)}},Don=i=>{let s="";for(let u=0;udtt});var dtt,F1e=M(()=>{"use strict";kpe();Cpe();I1e();P1e();dtt={db:Spe,renderer:M1e,parser:Tpe,styles:O1e}});var NB,$1e,V1e=M(()=>{"use strict";NB=function(){var t=o(function(L,S,A,I){for(A=A||{},I=L.length;I--;A[L[I]]=S);return A},"o"),e=[1,4],r=[1,13],n=[1,12],i=[1,15],a=[1,16],s=[1,20],l=[1,19],u=[6,7,8],h=[1,26],f=[1,24],d=[1,25],p=[6,7,11],m=[1,31],g=[6,7,11,24],y=[1,6,13,16,17,20,23],v=[1,35],x=[1,36],b=[1,6,7,11,13,16,17,20,23],w=[1,38],_={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,KANBAN:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,shapeData:15,ICON:16,CLASS:17,nodeWithId:18,nodeWithoutId:19,NODE_DSTART:20,NODE_DESCR:21,NODE_DEND:22,NODE_ID:23,SHAPE_DATA:24,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"KANBAN",11:"EOF",13:"SPACELIST",16:"ICON",17:"CLASS",20:"NODE_DSTART",21:"NODE_DESCR",22:"NODE_DEND",23:"NODE_ID",24:"SHAPE_DATA"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,3],[12,2],[12,2],[12,2],[12,1],[12,2],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[19,3],[18,1],[18,4],[15,2],[15,1]],performAction:o(function(S,A,I,D,k,R,C){var O=R.length-1;switch(k){case 6:case 7:return D;case 8:D.getLogger().trace("Stop NL ");break;case 9:D.getLogger().trace("Stop EOF ");break;case 11:D.getLogger().trace("Stop NL2 ");break;case 12:D.getLogger().trace("Stop EOF2 ");break;case 15:D.getLogger().info("Node: ",R[O-1].id),D.addNode(R[O-2].length,R[O-1].id,R[O-1].descr,R[O-1].type,R[O]);break;case 16:D.getLogger().info("Node: ",R[O].id),D.addNode(R[O-1].length,R[O].id,R[O].descr,R[O].type);break;case 17:D.getLogger().trace("Icon: ",R[O]),D.decorateNode({icon:R[O]});break;case 18:case 23:D.decorateNode({class:R[O]});break;case 19:D.getLogger().trace("SPACELIST");break;case 20:D.getLogger().trace("Node: ",R[O-1].id),D.addNode(0,R[O-1].id,R[O-1].descr,R[O-1].type,R[O]);break;case 21:D.getLogger().trace("Node: ",R[O].id),D.addNode(0,R[O].id,R[O].descr,R[O].type);break;case 22:D.decorateNode({icon:R[O]});break;case 27:D.getLogger().trace("node found ..",R[O-2]),this.$={id:R[O-1],descr:R[O-1],type:D.getType(R[O-2],R[O])};break;case 28:this.$={id:R[O],descr:R[O],type:0};break;case 29:D.getLogger().trace("node found ..",R[O-3]),this.$={id:R[O-3],descr:R[O-1],type:D.getType(R[O-2],R[O])};break;case 30:this.$=R[O-1]+R[O];break;case 31:this.$=R[O];break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:e},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:e},{6:r,7:[1,10],9:9,12:11,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},t(u,[2,3]),{1:[2,2]},t(u,[2,4]),t(u,[2,5]),{1:[2,6],6:r,12:21,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},{6:r,9:22,12:11,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},{6:h,7:f,10:23,11:d},t(p,[2,24],{18:17,19:18,14:27,16:[1,28],17:[1,29],20:s,23:l}),t(p,[2,19]),t(p,[2,21],{15:30,24:m}),t(p,[2,22]),t(p,[2,23]),t(g,[2,25]),t(g,[2,26]),t(g,[2,28],{20:[1,32]}),{21:[1,33]},{6:h,7:f,10:34,11:d},{1:[2,7],6:r,12:21,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},t(y,[2,14],{7:v,11:x}),t(b,[2,8]),t(b,[2,9]),t(b,[2,10]),t(p,[2,16],{15:37,24:m}),t(p,[2,17]),t(p,[2,18]),t(p,[2,20],{24:w}),t(g,[2,31]),{21:[1,39]},{22:[1,40]},t(y,[2,13],{7:v,11:x}),t(b,[2,11]),t(b,[2,12]),t(p,[2,15],{24:w}),t(g,[2,30]),{22:[1,41]},t(g,[2,27]),t(g,[2,29])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(S,A){if(A.recoverable)this.trace(S);else{var I=new Error(S);throw I.hash=A,I}},"parseError"),parse:o(function(S){var A=this,I=[0],D=[],k=[null],R=[],C=this.table,O="",N=0,P=0,F=0,B=2,G=1,z=R.slice.call(arguments,1),W=Object.create(this.lexer),Z={yy:{}};for(var j in this.yy)Object.prototype.hasOwnProperty.call(this.yy,j)&&(Z.yy[j]=this.yy[j]);W.setInput(S,Z.yy),Z.yy.lexer=W,Z.yy.parser=this,typeof W.yylloc>"u"&&(W.yylloc={});var oe=W.yylloc;R.push(oe);var K=W.options&&W.options.ranges;typeof Z.yy.parseError=="function"?this.parseError=Z.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ee(Pe){I.length=I.length-2*Pe,k.length=k.length-Pe,R.length=R.length-Pe}o(ee,"popStack");function J(){var Pe;return Pe=D.pop()||W.lex()||G,typeof Pe!="number"&&(Pe instanceof Array&&(D=Pe,Pe=D.pop()),Pe=A.symbols_[Pe]||Pe),Pe}o(J,"lex");for(var H,q,Q,ae,ue,ce,te={},Ne,se,ke,Re;;){if(Q=I[I.length-1],this.defaultActions[Q]?ae=this.defaultActions[Q]:((H===null||typeof H>"u")&&(H=J()),ae=C[Q]&&C[Q][H]),typeof ae>"u"||!ae.length||!ae[0]){var Ce="";Re=[];for(Ne in C[Q])this.terminals_[Ne]&&Ne>B&&Re.push("'"+this.terminals_[Ne]+"'");W.showPosition?Ce="Parse error on line "+(N+1)+`: +`+W.showPosition()+` +Expecting `+Re.join(", ")+", got '"+(this.terminals_[H]||H)+"'":Ce="Parse error on line "+(N+1)+": Unexpected "+(H==G?"end of input":"'"+(this.terminals_[H]||H)+"'"),this.parseError(Ce,{text:W.match,token:this.terminals_[H]||H,line:W.yylineno,loc:oe,expected:Re})}if(ae[0]instanceof Array&&ae.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Q+", token: "+H);switch(ae[0]){case 1:I.push(H),k.push(W.yytext),R.push(W.yylloc),I.push(ae[1]),H=null,q?(H=q,q=null):(P=W.yyleng,O=W.yytext,N=W.yylineno,oe=W.yylloc,F>0&&F--);break;case 2:if(se=this.productions_[ae[1]][1],te.$=k[k.length-se],te._$={first_line:R[R.length-(se||1)].first_line,last_line:R[R.length-1].last_line,first_column:R[R.length-(se||1)].first_column,last_column:R[R.length-1].last_column},K&&(te._$.range=[R[R.length-(se||1)].range[0],R[R.length-1].range[1]]),ce=this.performAction.apply(te,[O,P,N,Z.yy,ae[1],k,R].concat(z)),typeof ce<"u")return ce;se&&(I=I.slice(0,-1*se*2),k=k.slice(0,-1*se),R=R.slice(0,-1*se)),I.push(this.productions_[ae[1]][0]),k.push(te.$),R.push(te._$),ke=C[I[I.length-2]][I[I.length-1]],I.push(ke);break;case 3:return!0}}return!0},"parse")},T=function(){var L={EOF:1,parseError:o(function(A,I){if(this.yy.parser)this.yy.parser.parseError(A,I);else throw new Error(A)},"parseError"),setInput:o(function(S,A){return this.yy=A||this.yy||{},this._input=S,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var S=this._input[0];this.yytext+=S,this.yyleng++,this.offset++,this.match+=S,this.matched+=S;var A=S.match(/(?:\r\n?|\n).*/g);return A?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),S},"input"),unput:o(function(S){var A=S.length,I=S.split(/(?:\r\n?|\n)/g);this._input=S+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-A),this.offset-=A;var D=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),I.length-1&&(this.yylineno-=I.length-1);var k=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:I?(I.length===D.length?this.yylloc.first_column:0)+D[D.length-I.length].length-I[0].length:this.yylloc.first_column-A},this.options.ranges&&(this.yylloc.range=[k[0],k[0]+this.yyleng-A]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(S){this.unput(this.match.slice(S))},"less"),pastInput:o(function(){var S=this.matched.substr(0,this.matched.length-this.match.length);return(S.length>20?"...":"")+S.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var S=this.match;return S.length<20&&(S+=this._input.substr(0,20-S.length)),(S.substr(0,20)+(S.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var S=this.pastInput(),A=new Array(S.length+1).join("-");return S+this.upcomingInput()+` +`+A+"^"},"showPosition"),test_match:o(function(S,A){var I,D,k;if(this.options.backtrack_lexer&&(k={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(k.yylloc.range=this.yylloc.range.slice(0))),D=S[0].match(/(?:\r\n?|\n).*/g),D&&(this.yylineno+=D.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:D?D[D.length-1].length-D[D.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+S[0].length},this.yytext+=S[0],this.match+=S[0],this.matches=S,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(S[0].length),this.matched+=S[0],I=this.performAction.call(this,this.yy,this,A,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),I)return I;if(this._backtrack){for(var R in k)this[R]=k[R];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var S,A,I,D;this._more||(this.yytext="",this.match="");for(var k=this._currentRules(),R=0;RA[0].length)){if(A=I,D=R,this.options.backtrack_lexer){if(S=this.test_match(I,k[R]),S!==!1)return S;if(this._backtrack){A=!1;continue}else return!1}else if(!this.options.flex)break}return A?(S=this.test_match(A,k[D]),S!==!1?S:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var A=this.next();return A||this.lex()},"lex"),begin:o(function(A){this.conditionStack.push(A)},"begin"),popState:o(function(){var A=this.conditionStack.length-1;return A>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(A){return A=this.conditionStack.length-1-Math.abs(A||0),A>=0?this.conditionStack[A]:"INITIAL"},"topState"),pushState:o(function(A){this.begin(A)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(A,I,D,k){var R=k;switch(D){case 0:return this.pushState("shapeData"),I.yytext="",24;break;case 1:return this.pushState("shapeDataStr"),24;break;case 2:return this.popState(),24;break;case 3:let C=/\n\s*/g;return I.yytext=I.yytext.replace(C,"
    "),24;break;case 4:return 24;case 5:this.popState();break;case 6:return A.getLogger().trace("Found comment",I.yytext),6;break;case 7:return 8;case 8:this.begin("CLASS");break;case 9:return this.popState(),17;break;case 10:this.popState();break;case 11:A.getLogger().trace("Begin icon"),this.begin("ICON");break;case 12:return A.getLogger().trace("SPACELINE"),6;break;case 13:return 7;case 14:return 16;case 15:A.getLogger().trace("end icon"),this.popState();break;case 16:return A.getLogger().trace("Exploding node"),this.begin("NODE"),20;break;case 17:return A.getLogger().trace("Cloud"),this.begin("NODE"),20;break;case 18:return A.getLogger().trace("Explosion Bang"),this.begin("NODE"),20;break;case 19:return A.getLogger().trace("Cloud Bang"),this.begin("NODE"),20;break;case 20:return this.begin("NODE"),20;break;case 21:return this.begin("NODE"),20;break;case 22:return this.begin("NODE"),20;break;case 23:return this.begin("NODE"),20;break;case 24:return 13;case 25:return 23;case 26:return 11;case 27:this.begin("NSTR2");break;case 28:return"NODE_DESCR";case 29:this.popState();break;case 30:A.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 31:return A.getLogger().trace("description:",I.yytext),"NODE_DESCR";break;case 32:this.popState();break;case 33:return this.popState(),A.getLogger().trace("node end ))"),"NODE_DEND";break;case 34:return this.popState(),A.getLogger().trace("node end )"),"NODE_DEND";break;case 35:return this.popState(),A.getLogger().trace("node end ...",I.yytext),"NODE_DEND";break;case 36:return this.popState(),A.getLogger().trace("node end (("),"NODE_DEND";break;case 37:return this.popState(),A.getLogger().trace("node end (-"),"NODE_DEND";break;case 38:return this.popState(),A.getLogger().trace("node end (-"),"NODE_DEND";break;case 39:return this.popState(),A.getLogger().trace("node end (("),"NODE_DEND";break;case 40:return this.popState(),A.getLogger().trace("node end (("),"NODE_DEND";break;case 41:return A.getLogger().trace("Long description:",I.yytext),21;break;case 42:return A.getLogger().trace("Long description:",I.yytext),21;break}},"anonymous"),rules:[/^(?:@\{)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^\"]+)/i,/^(?:[^}^"]+)/i,/^(?:\})/i,/^(?:\s*%%.*)/i,/^(?:kanban\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}@]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{shapeDataEndBracket:{rules:[],inclusive:!1},shapeDataStr:{rules:[2,3],inclusive:!1},shapeData:{rules:[1,4,5],inclusive:!1},CLASS:{rules:[9,10],inclusive:!1},ICON:{rules:[14,15],inclusive:!1},NSTR2:{rules:[28,29],inclusive:!1},NSTR:{rules:[31,32],inclusive:!1},NODE:{rules:[27,30,33,34,35,36,37,38,39,40,41,42],inclusive:!1},INITIAL:{rules:[0,6,7,8,11,12,13,16,17,18,19,20,21,22,23,24,25,26],inclusive:!0}}};return L}();_.lexer=T;function E(){this.yy={}}return o(E,"Parser"),E.prototype=_,_.Parser=E,new E}();NB.parser=NB;$1e=NB});var dl,MB,RB,IB,ytt,vtt,U1e,xtt,btt,Zi,wtt,Ttt,ktt,Ett,Stt,Ctt,Att,H1e,W1e=M(()=>{"use strict";Vt();fr();ut();bs();ew();dl=[],MB=[],RB=0,IB={},ytt=o(()=>{dl=[],MB=[],RB=0,IB={}},"clear"),vtt=o(t=>{if(dl.length===0)return null;let e=dl[0].level,r=null;for(let n=dl.length-1;n>=0;n--)if(dl[n].level===e&&!r&&(r=dl[n]),dl[n].levell.parentId===i.id);for(let l of s){let u={id:l.id,parentId:i.id,label:kr(l.label??"",n),isGroup:!1,ticket:l?.ticket,priority:l?.priority,assigned:l?.assigned,icon:l?.icon,shape:"kanbanItem",level:l.level,rx:5,ry:5,cssStyles:["text-align: left"]};e.push(u)}}return{nodes:e,edges:t,other:{},config:pe()}},"getData"),btt=o((t,e,r,n,i)=>{let a=pe(),s=a.mindmap?.padding??ur.mindmap.padding;switch(n){case Zi.ROUNDED_RECT:case Zi.RECT:case Zi.HEXAGON:s*=2}let l={id:kr(e,a)||"kbn"+RB++,level:t,label:kr(r,a),width:a.mindmap?.maxNodeWidth??ur.mindmap.maxNodeWidth,padding:s,isGroup:!1};if(i!==void 0){let h;i.includes(` +`)?h=i+` +`:h=`{ +`+i+` +}`;let f=Sm(h,{schema:Em});if(f.shape&&(f.shape!==f.shape.toLowerCase()||f.shape.includes("_")))throw new Error(`No such shape: ${f.shape}. Shape names should be lowercase.`);f?.shape&&f.shape==="kanbanItem"&&(l.shape=f?.shape),f?.label&&(l.label=f?.label),f?.icon&&(l.icon=f?.icon),f?.assigned&&(l.assigned=f?.assigned),f?.ticket&&(l.ticket=f?.ticket),f?.priority&&(l.priority=f?.priority)}let u=vtt(t);u?l.parentId=u.id||"kbn"+RB++:MB.push(l),dl.push(l)},"addNode"),Zi={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},wtt=o((t,e)=>{switch(Y.debug("In get type",t,e),t){case"[":return Zi.RECT;case"(":return e===")"?Zi.ROUNDED_RECT:Zi.CLOUD;case"((":return Zi.CIRCLE;case")":return Zi.CLOUD;case"))":return Zi.BANG;case"{{":return Zi.HEXAGON;default:return Zi.DEFAULT}},"getType"),Ttt=o((t,e)=>{IB[t]=e},"setElementForId"),ktt=o(t=>{if(!t)return;let e=pe(),r=dl[dl.length-1];t.icon&&(r.icon=kr(t.icon,e)),t.class&&(r.cssClasses=kr(t.class,e))},"decorateNode"),Ett=o(t=>{switch(t){case Zi.DEFAULT:return"no-border";case Zi.RECT:return"rect";case Zi.ROUNDED_RECT:return"rounded-rect";case Zi.CIRCLE:return"circle";case Zi.CLOUD:return"cloud";case Zi.BANG:return"bang";case Zi.HEXAGON:return"hexgon";default:return"no-border"}},"type2Str"),Stt=o(()=>Y,"getLogger"),Ctt=o(t=>IB[t],"getElementById"),Att={clear:ytt,addNode:btt,getSections:U1e,getData:xtt,nodeType:Zi,getType:wtt,setElementForId:Ttt,decorateNode:ktt,type2Str:Ett,getLogger:Stt,getElementById:Ctt},H1e=Att});var _tt,Y1e,q1e=M(()=>{"use strict";Vt();ut();eh();ai();bs();lw();vw();_tt=o(async(t,e,r,n)=>{Y.debug(`Rendering kanban diagram +`+t);let a=n.db.getData(),s=pe();s.htmlLabels=!1;let l=Va(e),u=l.append("g");u.attr("class","sections");let h=l.append("g");h.attr("class","items");let f=a.nodes.filter(v=>v.isGroup),d=0,p=10,m=[],g=25;for(let v of f){let x=s?.kanban?.sectionWidth||200;d=d+1,v.x=x*d+(d-1)*p/2,v.width=x,v.y=0,v.height=x*3,v.rx=5,v.ry=5,v.cssClasses=v.cssClasses+" section-"+d;let b=await _m(u,v);g=Math.max(g,b?.labelBBox?.height),m.push(b)}let y=0;for(let v of f){let x=m[y];y=y+1;let b=s?.kanban?.sectionWidth||200,w=-b*3/2+g,_=w,T=a.nodes.filter(S=>S.parentId===v.id);for(let S of T){if(S.isGroup)throw new Error("Groups within groups are not allowed in Kanban diagrams");S.x=v.x,S.width=b-1.5*p;let I=(await Lm(h,S,{config:s})).node().getBBox();S.y=_+I.height/2,await Uv(S),_=S.y+I.height/2+p/2}let E=x.cluster.select("rect"),L=Math.max(_-w+3*p,50)+(g-25);E.attr("height",L)}Io(void 0,l,s.mindmap?.padding??ur.kanban.padding,s.mindmap?.useMaxWidth??ur.kanban.useMaxWidth)},"draw"),Y1e={draw:_tt}});var Ltt,Dtt,X1e,j1e=M(()=>{"use strict";Lo();Ltt=o(t=>{let e="";for(let n=0;nt.darkMode?It(n,i):_t(n,i),"adjuster");for(let n=0;n` + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${t.background}; + stroke: ${t.nodeBorder}; + stroke-width: 1px; + } + + .kanban-ticket-link { + fill: ${t.background}; + stroke: ${t.nodeBorder}; + text-decoration: underline; + } + `}return e},"genSections"),Dtt=o(t=>` .edge { stroke-width: 3; } - ${Don(i)} + ${Ltt(t)} .section-root rect, .section-root path, .section-root circle, .section-root polygon { - fill: ${i.git0}; + fill: ${t.git0}; } .section-root text { - fill: ${i.gitBranchLabel0}; + fill: ${t.gitBranchLabel0}; } .icon-container { height:100%; @@ -1895,41 +2066,68 @@ Licensed under The MIT License (http://opensource.org/licenses/MIT) .edge { fill: none; } - .mindmap-node-label { + .cluster-label, .label { + color: ${t.textColor}; + fill: ${t.textColor}; + } + .kanban-label { dy: 1em; alignment-baseline: middle; text-anchor: middle; dominant-baseline: middle; text-align: center; } -`}},Symbol.toStringTag,{value:"Module"}));var iwe=function(){var i=function(y,T,_,A){for(_=_||{},A=y.length;A--;_[y[A]]=T);return _},s=[1,9],u=[1,10],d=[1,5,10,12],p={trace:function(){},yy:{},symbols_:{error:2,start:3,SANKEY:4,NEWLINE:5,csv:6,opt_eof:7,record:8,csv_tail:9,EOF:10,"field[source]":11,COMMA:12,"field[target]":13,"field[value]":14,field:15,escaped:16,non_escaped:17,DQUOTE:18,ESCAPED_TEXT:19,NON_ESCAPED_TEXT:20,$accept:0,$end:1},terminals_:{2:"error",4:"SANKEY",5:"NEWLINE",10:"EOF",11:"field[source]",12:"COMMA",13:"field[target]",14:"field[value]",18:"DQUOTE",19:"ESCAPED_TEXT",20:"NON_ESCAPED_TEXT"},productions_:[0,[3,4],[6,2],[9,2],[9,0],[7,1],[7,0],[8,5],[15,1],[15,1],[16,3],[17,1]],performAction:function(T,_,A,P,R,F,j){var K=F.length-1;switch(R){case 7:const ee=P.findOrCreateNode(F[K-4].trim().replaceAll('""','"')),ie=P.findOrCreateNode(F[K-2].trim().replaceAll('""','"')),oe=parseFloat(F[K].trim());P.addLink(ee,ie,oe);break;case 8:case 9:case 11:this.$=F[K];break;case 10:this.$=F[K-1];break}},table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:s,20:u},{1:[2,6],7:11,10:[1,12]},i(u,[2,4],{9:13,5:[1,14]}),{12:[1,15]},i(d,[2,8]),i(d,[2,9]),{19:[1,16]},i(d,[2,11]),{1:[2,1]},{1:[2,5]},i(u,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:s,20:u},{15:18,16:7,17:8,18:s,20:u},{18:[1,19]},i(u,[2,3]),{12:[1,20]},i(d,[2,10]),{15:21,16:7,17:8,18:s,20:u},i([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:function(T,_){if(_.recoverable)this.trace(T);else{var A=new Error(T);throw A.hash=_,A}},parse:function(T){var _=this,A=[0],P=[],R=[null],F=[],j=this.table,K="",ee=0,ie=0,oe=2,pe=1,be=F.slice.call(arguments,1),ae=Object.create(this.lexer),ne={yy:{}};for(var se in this.yy)Object.prototype.hasOwnProperty.call(this.yy,se)&&(ne.yy[se]=this.yy[se]);ae.setInput(T,ne.yy),ne.yy.lexer=ae,ne.yy.parser=this,typeof ae.yylloc>"u"&&(ae.yylloc={});var de=ae.yylloc;F.push(de);var X=ae.options&&ae.options.ranges;typeof ne.yy.parseError=="function"?this.parseError=ne.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ge(){var Ke;return Ke=P.pop()||ae.lex()||pe,typeof Ke!="number"&&(Ke instanceof Array&&(P=Ke,Ke=P.pop()),Ke=_.symbols_[Ke]||Ke),Ke}for(var W,xe,U,Fe,Pe={},je,Ie,Se,Ce;;){if(xe=A[A.length-1],this.defaultActions[xe]?U=this.defaultActions[xe]:((W===null||typeof W>"u")&&(W=ge()),U=j[xe]&&j[xe][W]),typeof U>"u"||!U.length||!U[0]){var ke="";Ce=[];for(je in j[xe])this.terminals_[je]&&je>oe&&Ce.push("'"+this.terminals_[je]+"'");ae.showPosition?ke="Parse error on line "+(ee+1)+`: -`+ae.showPosition()+` -Expecting `+Ce.join(", ")+", got '"+(this.terminals_[W]||W)+"'":ke="Parse error on line "+(ee+1)+": Unexpected "+(W==pe?"end of input":"'"+(this.terminals_[W]||W)+"'"),this.parseError(ke,{text:ae.match,token:this.terminals_[W]||W,line:ae.yylineno,loc:de,expected:Ce})}if(U[0]instanceof Array&&U.length>1)throw new Error("Parse Error: multiple actions possible at state: "+xe+", token: "+W);switch(U[0]){case 1:A.push(W),R.push(ae.yytext),F.push(ae.yylloc),A.push(U[1]),W=null,ie=ae.yyleng,K=ae.yytext,ee=ae.yylineno,de=ae.yylloc;break;case 2:if(Ie=this.productions_[U[1]][1],Pe.$=R[R.length-Ie],Pe._$={first_line:F[F.length-(Ie||1)].first_line,last_line:F[F.length-1].last_line,first_column:F[F.length-(Ie||1)].first_column,last_column:F[F.length-1].last_column},X&&(Pe._$.range=[F[F.length-(Ie||1)].range[0],F[F.length-1].range[1]]),Fe=this.performAction.apply(Pe,[K,ie,ee,ne.yy,U[1],R,F].concat(be)),typeof Fe<"u")return Fe;Ie&&(A=A.slice(0,-1*Ie*2),R=R.slice(0,-1*Ie),F=F.slice(0,-1*Ie)),A.push(this.productions_[U[1]][0]),R.push(Pe.$),F.push(Pe._$),Se=j[A[A.length-2]][A[A.length-1]],A.push(Se);break;case 3:return!0}}return!0}},v=function(){var y={EOF:1,parseError:function(_,A){if(this.yy.parser)this.yy.parser.parseError(_,A);else throw new Error(_)},setInput:function(T,_){return this.yy=_||this.yy||{},this._input=T,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var T=this._input[0];this.yytext+=T,this.yyleng++,this.offset++,this.match+=T,this.matched+=T;var _=T.match(/(?:\r\n?|\n).*/g);return _?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),T},unput:function(T){var _=T.length,A=T.split(/(?:\r\n?|\n)/g);this._input=T+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-_),this.offset-=_;var P=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),A.length-1&&(this.yylineno-=A.length-1);var R=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:A?(A.length===P.length?this.yylloc.first_column:0)+P[P.length-A.length].length-A[0].length:this.yylloc.first_column-_},this.options.ranges&&(this.yylloc.range=[R[0],R[0]+this.yyleng-_]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(T){this.unput(this.match.slice(T))},pastInput:function(){var T=this.matched.substr(0,this.matched.length-this.match.length);return(T.length>20?"...":"")+T.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var T=this.match;return T.length<20&&(T+=this._input.substr(0,20-T.length)),(T.substr(0,20)+(T.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var T=this.pastInput(),_=new Array(T.length+1).join("-");return T+this.upcomingInput()+` -`+_+"^"},test_match:function(T,_){var A,P,R;if(this.options.backtrack_lexer&&(R={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(R.yylloc.range=this.yylloc.range.slice(0))),P=T[0].match(/(?:\r\n?|\n).*/g),P&&(this.yylineno+=P.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:P?P[P.length-1].length-P[P.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+T[0].length},this.yytext+=T[0],this.match+=T[0],this.matches=T,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(T[0].length),this.matched+=T[0],A=this.performAction.call(this,this.yy,this,_,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),A)return A;if(this._backtrack){for(var F in R)this[F]=R[F];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var T,_,A,P;this._more||(this.yytext="",this.match="");for(var R=this._currentRules(),F=0;F_[0].length)){if(_=A,P=F,this.options.backtrack_lexer){if(T=this.test_match(A,R[F]),T!==!1)return T;if(this._backtrack){_=!1;continue}else return!1}else if(!this.options.flex)break}return _?(T=this.test_match(_,R[P]),T!==!1?T:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var _=this.next();return _||this.lex()},begin:function(_){this.conditionStack.push(_)},popState:function(){var _=this.conditionStack.length-1;return _>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(_){return _=this.conditionStack.length-1-Math.abs(_||0),_>=0?this.conditionStack[_]:"INITIAL"},pushState:function(_){this.begin(_)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(_,A,P,R){switch(P){case 0:return this.pushState("csv"),4;case 1:return 10;case 2:return 5;case 3:return 12;case 4:return this.pushState("escaped_text"),18;case 5:return 20;case 6:return this.popState("escaped_text"),18;case 7:return 19}},rules:[/^(?:sankey-beta\b)/i,/^(?:$)/i,/^(?:((\u000D\u000A)|(\u000A)))/i,/^(?:(\u002C))/i,/^(?:(\u0022))/i,/^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/i,/^(?:(\u0022)(?!(\u0022)))/i,/^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/i],conditions:{csv:{rules:[1,2,3,4,5,6,7],inclusive:!1},escaped_text:{rules:[6,7],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7],inclusive:!0}}};return y}();p.lexer=v;function b(){this.yy={}}return b.prototype=p,p.Parser=b,new b}();iwe.parser=iwe;const NJ=iwe;let PJ=[],BJ=[],tI={};const Oon=()=>{PJ=[],BJ=[],tI={},Pg()};class Non{constructor(s,u,d=0){this.source=s,this.target=u,this.value=d}}const Pon=(i,s,u)=>{PJ.push(new Non(i,s,u))};class Bon{constructor(s){this.ID=s}}const Fon={nodesMap:tI,getConfig:()=>qt().sankey,getNodes:()=>BJ,getLinks:()=>PJ,getGraph:()=>({nodes:BJ.map(i=>({id:i.ID})),links:PJ.map(i=>({source:i.source.ID,target:i.target.ID,value:i.value}))}),addLink:Pon,findOrCreateNode:i=>(i=ci.sanitizeText(i,qt()),tI[i]||(tI[i]=new Bon(i),BJ.push(tI[i])),tI[i]),getAccTitle:Cp,setAccTitle:Bg,getAccDescription:_p,setAccDescription:Sp,getDiagramTitle:Ap,setDiagramTitle:cm,clear:Oon};function vWe(i,s){let u;if(s===void 0)for(const d of i)d!=null&&(u=d)&&(u=d);else{let d=-1;for(let p of i)(p=s(p,++d,i))!=null&&(u=p)&&(u=p)}return u}function wWe(i,s){let u;if(s===void 0)for(const d of i)d!=null&&(u>d||u===void 0&&d>=d)&&(u=d);else{let d=-1;for(let p of i)(p=s(p,++d,i))!=null&&(u>p||u===void 0&&p>=p)&&(u=p)}return u}function swe(i,s){let u=0;if(s===void 0)for(let d of i)(d=+d)&&(u+=d);else{let d=-1;for(let p of i)(p=+s(p,++d,i))&&(u+=p)}return u}function Ron(i){return i.target.depth}function jon(i){return i.depth}function $on(i,s){return s-1-i.height}function yWe(i,s){return i.sourceLinks.length?i.depth:s-1}function zon(i){return i.targetLinks.length?i.depth:i.sourceLinks.length?wWe(i.sourceLinks,Ron)-1:0}function FJ(i){return function(){return i}}function xWe(i,s){return RJ(i.source,s.source)||i.index-s.index}function kWe(i,s){return RJ(i.target,s.target)||i.index-s.index}function RJ(i,s){return i.y0-s.y0}function awe(i){return i.value}function qon(i){return i.index}function Hon(i){return i.nodes}function Von(i){return i.links}function EWe(i,s){const u=i.get(s);if(!u)throw new Error("missing: "+s);return u}function TWe({nodes:i}){for(const s of i){let u=s.y0,d=u;for(const p of s.sourceLinks)p.y0=u+p.width/2,u+=p.width;for(const p of s.targetLinks)p.y1=d+p.width/2,d+=p.width}}function Uon(){let i=0,s=0,u=1,d=1,p=24,v=8,b,y=qon,T=yWe,_,A,P=Hon,R=Von,F=6;function j(){const Pe={nodes:P.apply(null,arguments),links:R.apply(null,arguments)};return K(Pe),ee(Pe),ie(Pe),oe(Pe),ae(Pe),TWe(Pe),Pe}j.update=function(Pe){return TWe(Pe),Pe},j.nodeId=function(Pe){return arguments.length?(y=typeof Pe=="function"?Pe:FJ(Pe),j):y},j.nodeAlign=function(Pe){return arguments.length?(T=typeof Pe=="function"?Pe:FJ(Pe),j):T},j.nodeSort=function(Pe){return arguments.length?(_=Pe,j):_},j.nodeWidth=function(Pe){return arguments.length?(p=+Pe,j):p},j.nodePadding=function(Pe){return arguments.length?(v=b=+Pe,j):v},j.nodes=function(Pe){return arguments.length?(P=typeof Pe=="function"?Pe:FJ(Pe),j):P},j.links=function(Pe){return arguments.length?(R=typeof Pe=="function"?Pe:FJ(Pe),j):R},j.linkSort=function(Pe){return arguments.length?(A=Pe,j):A},j.size=function(Pe){return arguments.length?(i=s=0,u=+Pe[0],d=+Pe[1],j):[u-i,d-s]},j.extent=function(Pe){return arguments.length?(i=+Pe[0][0],u=+Pe[1][0],s=+Pe[0][1],d=+Pe[1][1],j):[[i,s],[u,d]]},j.iterations=function(Pe){return arguments.length?(F=+Pe,j):F};function K({nodes:Pe,links:je}){for(const[Se,Ce]of Pe.entries())Ce.index=Se,Ce.sourceLinks=[],Ce.targetLinks=[];const Ie=new Map(Pe.map((Se,Ce)=>[y(Se,Ce,Pe),Se]));for(const[Se,Ce]of je.entries()){Ce.index=Se;let{source:ke,target:Ke}=Ce;typeof ke!="object"&&(ke=Ce.source=EWe(Ie,ke)),typeof Ke!="object"&&(Ke=Ce.target=EWe(Ie,Ke)),ke.sourceLinks.push(Ce),Ke.targetLinks.push(Ce)}if(A!=null)for(const{sourceLinks:Se,targetLinks:Ce}of Pe)Se.sort(A),Ce.sort(A)}function ee({nodes:Pe}){for(const je of Pe)je.value=je.fixedValue===void 0?Math.max(swe(je.sourceLinks,awe),swe(je.targetLinks,awe)):je.fixedValue}function ie({nodes:Pe}){const je=Pe.length;let Ie=new Set(Pe),Se=new Set,Ce=0;for(;Ie.size;){for(const ke of Ie){ke.depth=Ce;for(const{target:Ke}of ke.sourceLinks)Se.add(Ke)}if(++Ce>je)throw new Error("circular link");Ie=Se,Se=new Set}}function oe({nodes:Pe}){const je=Pe.length;let Ie=new Set(Pe),Se=new Set,Ce=0;for(;Ie.size;){for(const ke of Ie){ke.height=Ce;for(const{source:Ke}of ke.targetLinks)Se.add(Ke)}if(++Ce>je)throw new Error("circular link");Ie=Se,Se=new Set}}function pe({nodes:Pe}){const je=vWe(Pe,Ce=>Ce.depth)+1,Ie=(u-i-p)/(je-1),Se=new Array(je);for(const Ce of Pe){const ke=Math.max(0,Math.min(je-1,Math.floor(T.call(null,Ce,je))));Ce.layer=ke,Ce.x0=i+ke*Ie,Ce.x1=Ce.x0+p,Se[ke]?Se[ke].push(Ce):Se[ke]=[Ce]}if(_)for(const Ce of Se)Ce.sort(_);return Se}function be(Pe){const je=wWe(Pe,Ie=>(d-s-(Ie.length-1)*b)/swe(Ie,awe));for(const Ie of Pe){let Se=s;for(const Ce of Ie){Ce.y0=Se,Ce.y1=Se+Ce.value*je,Se=Ce.y1+b;for(const ke of Ce.sourceLinks)ke.width=ke.value*je}Se=(d-Se+b)/(Ie.length+1);for(let Ce=0;CeIe.length)-1)),be(je);for(let Ie=0;Ie0))continue;let gn=(Ft/Ne-Ke.y0)*je;Ke.y0+=gn,Ke.y1+=gn,W(Ke)}_===void 0&&ke.sort(RJ),de(ke,Ie)}}function se(Pe,je,Ie){for(let Se=Pe.length,Ce=Se-2;Ce>=0;--Ce){const ke=Pe[Ce];for(const Ke of ke){let Ft=0,Ne=0;for(const{target:_t,value:Et}of Ke.sourceLinks){let Gt=Et*(_t.layer-Ke.layer);Ft+=Fe(Ke,_t)*Gt,Ne+=Gt}if(!(Ne>0))continue;let gn=(Ft/Ne-Ke.y0)*je;Ke.y0+=gn,Ke.y1+=gn,W(Ke)}_===void 0&&ke.sort(RJ),de(ke,Ie)}}function de(Pe,je){const Ie=Pe.length>>1,Se=Pe[Ie];ge(Pe,Se.y0-b,Ie-1,je),X(Pe,Se.y1+b,Ie+1,je),ge(Pe,d,Pe.length-1,je),X(Pe,s,0,je)}function X(Pe,je,Ie,Se){for(;Ie1e-6&&(Ce.y0+=ke,Ce.y1+=ke),je=Ce.y1+b}}function ge(Pe,je,Ie,Se){for(;Ie>=0;--Ie){const Ce=Pe[Ie],ke=(Ce.y1-je)*Se;ke>1e-6&&(Ce.y0-=ke,Ce.y1-=ke),je=Ce.y0-b}}function W({sourceLinks:Pe,targetLinks:je}){if(A===void 0){for(const{source:{sourceLinks:Ie}}of je)Ie.sort(kWe);for(const{target:{targetLinks:Ie}}of Pe)Ie.sort(xWe)}}function xe(Pe){if(A===void 0)for(const{sourceLinks:je,targetLinks:Ie}of Pe)je.sort(kWe),Ie.sort(xWe)}function U(Pe,je){let Ie=Pe.y0-(Pe.sourceLinks.length-1)*b/2;for(const{target:Se,width:Ce}of Pe.sourceLinks){if(Se===je)break;Ie+=Ce+b}for(const{source:Se,width:Ce}of je.targetLinks){if(Se===Pe)break;Ie-=Ce}return Ie}function Fe(Pe,je){let Ie=je.y0-(je.targetLinks.length-1)*b/2;for(const{source:Se,width:Ce}of je.targetLinks){if(Se===Pe)break;Ie+=Ce+b}for(const{target:Se,width:Ce}of Pe.sourceLinks){if(Se===je)break;Ie-=Ce}return Ie}return j}var owe=Math.PI,cwe=2*owe,aS=1e-6,Gon=cwe-aS;function uwe(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function CWe(){return new uwe}uwe.prototype=CWe.prototype={constructor:uwe,moveTo:function(i,s){this._+="M"+(this._x0=this._x1=+i)+","+(this._y0=this._y1=+s)},closePath:function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(i,s){this._+="L"+(this._x1=+i)+","+(this._y1=+s)},quadraticCurveTo:function(i,s,u,d){this._+="Q"+ +i+","+ +s+","+(this._x1=+u)+","+(this._y1=+d)},bezierCurveTo:function(i,s,u,d,p,v){this._+="C"+ +i+","+ +s+","+ +u+","+ +d+","+(this._x1=+p)+","+(this._y1=+v)},arcTo:function(i,s,u,d,p){i=+i,s=+s,u=+u,d=+d,p=+p;var v=this._x1,b=this._y1,y=u-i,T=d-s,_=v-i,A=b-s,P=_*_+A*A;if(p<0)throw new Error("negative radius: "+p);if(this._x1===null)this._+="M"+(this._x1=i)+","+(this._y1=s);else if(P>aS)if(!(Math.abs(A*y-T*_)>aS)||!p)this._+="L"+(this._x1=i)+","+(this._y1=s);else{var R=u-v,F=d-b,j=y*y+T*T,K=R*R+F*F,ee=Math.sqrt(j),ie=Math.sqrt(P),oe=p*Math.tan((owe-Math.acos((j+P-K)/(2*ee*ie)))/2),pe=oe/ie,be=oe/ee;Math.abs(pe-1)>aS&&(this._+="L"+(i+pe*_)+","+(s+pe*A)),this._+="A"+p+","+p+",0,0,"+ +(A*R>_*F)+","+(this._x1=i+be*y)+","+(this._y1=s+be*T)}},arc:function(i,s,u,d,p,v){i=+i,s=+s,u=+u,v=!!v;var b=u*Math.cos(d),y=u*Math.sin(d),T=i+b,_=s+y,A=1^v,P=v?d-p:p-d;if(u<0)throw new Error("negative radius: "+u);this._x1===null?this._+="M"+T+","+_:(Math.abs(this._x1-T)>aS||Math.abs(this._y1-_)>aS)&&(this._+="L"+T+","+_),u&&(P<0&&(P=P%cwe+cwe),P>Gon?this._+="A"+u+","+u+",0,1,"+A+","+(i-b)+","+(s-y)+"A"+u+","+u+",0,1,"+A+","+(this._x1=T)+","+(this._y1=_):P>aS&&(this._+="A"+u+","+u+",0,"+ +(P>=owe)+","+A+","+(this._x1=i+u*Math.cos(p))+","+(this._y1=s+u*Math.sin(p))))},rect:function(i,s,u,d){this._+="M"+(this._x0=this._x1=+i)+","+(this._y0=this._y1=+s)+"h"+ +u+"v"+ +d+"h"+-u+"Z"},toString:function(){return this._}};function SWe(i){return function(){return i}}function Kon(i){return i[0]}function Won(i){return i[1]}var Yon=Array.prototype.slice;function Xon(i){return i.source}function Qon(i){return i.target}function Jon(i){var s=Xon,u=Qon,d=Kon,p=Won,v=null;function b(){var y,T=Yon.call(arguments),_=s.apply(this,T),A=u.apply(this,T);if(v||(v=y=CWe()),i(v,+d.apply(this,(T[0]=_,T)),+p.apply(this,T),+d.apply(this,(T[0]=A,T)),+p.apply(this,T)),y)return v=null,y+""||null}return b.source=function(y){return arguments.length?(s=y,b):s},b.target=function(y){return arguments.length?(u=y,b):u},b.x=function(y){return arguments.length?(d=typeof y=="function"?y:SWe(+y),b):d},b.y=function(y){return arguments.length?(p=typeof y=="function"?y:SWe(+y),b):p},b.context=function(y){return arguments.length?(v=y??null,b):v},b}function Zon(i,s,u,d,p){i.moveTo(s,u),i.bezierCurveTo(s=(s+d)/2,u,s,p,d,p)}function ecn(){return Jon(Zon)}function tcn(i){return[i.source.x1,i.y0]}function ncn(i){return[i.target.x0,i.y1]}function rcn(){return ecn().source(tcn).target(ncn)}const _We=class aBe{static next(s){return new aBe(s+ ++aBe.count)}constructor(s){this.id=s,this.href=`#${s}`}toString(){return"url("+this.href+")"}};_We.count=0;let AWe=_We;const icn={left:jon,right:$on,center:zon,justify:yWe},scn={draw:function(i,s,u,d){const{securityLevel:p,sankey:v}=qt(),b=Zje.sankey;let y;p==="sandbox"&&(y=Ir("#i"+s));const T=Ir(p==="sandbox"?y.nodes()[0].contentDocument.body:"body"),_=p==="sandbox"?T.select(`[id="${s}"]`):Ir(`[id="${s}"]`),A=(v==null?void 0:v.width)??b.width,P=(v==null?void 0:v.height)??b.width,R=(v==null?void 0:v.useMaxWidth)??b.useMaxWidth,F=(v==null?void 0:v.nodeAlignment)??b.nodeAlignment,j=(v==null?void 0:v.prefix)??b.prefix,K=(v==null?void 0:v.suffix)??b.suffix,ee=(v==null?void 0:v.showValues)??b.showValues,ie=d.db.getGraph(),oe=icn[F],pe=10;Uon().nodeId(ge=>ge.id).nodeWidth(pe).nodePadding(10+(ee?15:0)).nodeAlign(oe).extent([[0,0],[A,P]])(ie);const ae=_F(zFe);_.append("g").attr("class","nodes").selectAll(".node").data(ie.nodes).join("g").attr("class","node").attr("id",ge=>(ge.uid=AWe.next("node-")).id).attr("transform",function(ge){return"translate("+ge.x0+","+ge.y0+")"}).attr("x",ge=>ge.x0).attr("y",ge=>ge.y0).append("rect").attr("height",ge=>ge.y1-ge.y0).attr("width",ge=>ge.x1-ge.x0).attr("fill",ge=>ae(ge.id));const ne=({id:ge,value:W})=>ee?`${ge} -${j}${Math.round(W*100)/100}${K}`:ge;_.append("g").attr("class","node-labels").attr("font-family","sans-serif").attr("font-size",14).selectAll("text").data(ie.nodes).join("text").attr("x",ge=>ge.x0
    (ge.y1+ge.y0)/2).attr("dy",`${ee?"0":"0.35"}em`).attr("text-anchor",ge=>ge.x0(W.uid=AWe.next("linearGradient-")).id).attr("gradientUnits","userSpaceOnUse").attr("x1",W=>W.source.x1).attr("x2",W=>W.target.x0);ge.append("stop").attr("offset","0%").attr("stop-color",W=>ae(W.source.id)),ge.append("stop").attr("offset","100%").attr("stop-color",W=>ae(W.target.id))}let X;switch(de){case"gradient":X=ge=>ge.uid;break;case"source":X=ge=>ae(ge.source.id);break;case"target":X=ge=>ae(ge.target.id);break;default:X=de}se.append("path").attr("d",rcn()).attr("stroke",X).attr("stroke-width",ge=>Math.max(1,ge.width)),y9(void 0,_,0,R)}},acn=i=>i.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g,"").replaceAll(/([\n\r])+/g,` -`).trim(),ocn=NJ.parse.bind(NJ);NJ.parse=i=>ocn(acn(i));const ccn=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:NJ,db:Fon,renderer:scn}},Symbol.toStringTag,{value:"Module"}));var lwe=function(){var i=function(pe,be,ae,ne){for(ae=ae||{},ne=pe.length;ne--;ae[pe[ne]]=be);return ae},s=[1,7],u=[1,13],d=[1,14],p=[1,15],v=[1,19],b=[1,16],y=[1,17],T=[1,18],_=[8,30],A=[8,21,28,29,30,31,32,40,44,47],P=[1,23],R=[1,24],F=[8,15,16,21,28,29,30,31,32,40,44,47],j=[8,15,16,21,27,28,29,30,31,32,40,44,47],K=[1,49],ee={trace:function(){},yy:{},symbols_:{error:2,spaceLines:3,SPACELINE:4,NL:5,separator:6,SPACE:7,EOF:8,start:9,BLOCK_DIAGRAM_KEY:10,document:11,stop:12,statement:13,link:14,LINK:15,START_LINK:16,LINK_LABEL:17,STR:18,nodeStatement:19,columnsStatement:20,SPACE_BLOCK:21,blockStatement:22,classDefStatement:23,cssClassStatement:24,styleStatement:25,node:26,SIZE:27,COLUMNS:28,"id-block":29,end:30,block:31,NODE_ID:32,nodeShapeNLabel:33,dirList:34,DIR:35,NODE_DSTART:36,NODE_DEND:37,BLOCK_ARROW_START:38,BLOCK_ARROW_END:39,classDef:40,CLASSDEF_ID:41,CLASSDEF_STYLEOPTS:42,DEFAULT:43,class:44,CLASSENTITY_IDS:45,STYLECLASS:46,style:47,STYLE_ENTITY_IDS:48,STYLE_DEFINITION_DATA:49,$accept:0,$end:1},terminals_:{2:"error",4:"SPACELINE",5:"NL",7:"SPACE",8:"EOF",10:"BLOCK_DIAGRAM_KEY",15:"LINK",16:"START_LINK",17:"LINK_LABEL",18:"STR",21:"SPACE_BLOCK",27:"SIZE",28:"COLUMNS",29:"id-block",30:"end",31:"block",32:"NODE_ID",35:"DIR",36:"NODE_DSTART",37:"NODE_DEND",38:"BLOCK_ARROW_START",39:"BLOCK_ARROW_END",40:"classDef",41:"CLASSDEF_ID",42:"CLASSDEF_STYLEOPTS",43:"DEFAULT",44:"class",45:"CLASSENTITY_IDS",46:"STYLECLASS",47:"style",48:"STYLE_ENTITY_IDS",49:"STYLE_DEFINITION_DATA"},productions_:[0,[3,1],[3,2],[3,2],[6,1],[6,1],[6,1],[9,3],[12,1],[12,1],[12,2],[12,2],[11,1],[11,2],[14,1],[14,4],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[19,3],[19,2],[19,1],[20,1],[22,4],[22,3],[26,1],[26,2],[34,1],[34,2],[33,3],[33,4],[23,3],[23,3],[24,3],[25,3]],performAction:function(be,ae,ne,se,de,X,ge){var W=X.length-1;switch(de){case 4:se.getLogger().debug("Rule: separator (NL) ");break;case 5:se.getLogger().debug("Rule: separator (Space) ");break;case 6:se.getLogger().debug("Rule: separator (EOF) ");break;case 7:se.getLogger().debug("Rule: hierarchy: ",X[W-1]),se.setHierarchy(X[W-1]);break;case 8:se.getLogger().debug("Stop NL ");break;case 9:se.getLogger().debug("Stop EOF ");break;case 10:se.getLogger().debug("Stop NL2 ");break;case 11:se.getLogger().debug("Stop EOF2 ");break;case 12:se.getLogger().debug("Rule: statement: ",X[W]),typeof X[W].length=="number"?this.$=X[W]:this.$=[X[W]];break;case 13:se.getLogger().debug("Rule: statement #2: ",X[W-1]),this.$=[X[W-1]].concat(X[W]);break;case 14:se.getLogger().debug("Rule: link: ",X[W],be),this.$={edgeTypeStr:X[W],label:""};break;case 15:se.getLogger().debug("Rule: LABEL link: ",X[W-3],X[W-1],X[W]),this.$={edgeTypeStr:X[W],label:X[W-1]};break;case 18:const xe=parseInt(X[W]),U=se.generateId();this.$={id:U,type:"space",label:"",width:xe,children:[]};break;case 23:se.getLogger().debug("Rule: (nodeStatement link node) ",X[W-2],X[W-1],X[W]," typestr: ",X[W-1].edgeTypeStr);const Fe=se.edgeStrToEdgeData(X[W-1].edgeTypeStr);this.$=[{id:X[W-2].id,label:X[W-2].label,type:X[W-2].type,directions:X[W-2].directions},{id:X[W-2].id+"-"+X[W].id,start:X[W-2].id,end:X[W].id,label:X[W-1].label,type:"edge",directions:X[W].directions,arrowTypeEnd:Fe,arrowTypeStart:"arrow_open"},{id:X[W].id,label:X[W].label,type:se.typeStr2Type(X[W].typeStr),directions:X[W].directions}];break;case 24:se.getLogger().debug("Rule: nodeStatement (abc88 node size) ",X[W-1],X[W]),this.$={id:X[W-1].id,label:X[W-1].label,type:se.typeStr2Type(X[W-1].typeStr),directions:X[W-1].directions,widthInColumns:parseInt(X[W],10)};break;case 25:se.getLogger().debug("Rule: nodeStatement (node) ",X[W]),this.$={id:X[W].id,label:X[W].label,type:se.typeStr2Type(X[W].typeStr),directions:X[W].directions,widthInColumns:1};break;case 26:se.getLogger().debug("APA123",this?this:"na"),se.getLogger().debug("COLUMNS: ",X[W]),this.$={type:"column-setting",columns:X[W]==="auto"?-1:parseInt(X[W])};break;case 27:se.getLogger().debug("Rule: id-block statement : ",X[W-2],X[W-1]),se.generateId(),this.$={...X[W-2],type:"composite",children:X[W-1]};break;case 28:se.getLogger().debug("Rule: blockStatement : ",X[W-2],X[W-1],X[W]);const Pe=se.generateId();this.$={id:Pe,type:"composite",label:"",children:X[W-1]};break;case 29:se.getLogger().debug("Rule: node (NODE_ID separator): ",X[W]),this.$={id:X[W]};break;case 30:se.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel separator): ",X[W-1],X[W]),this.$={id:X[W-1],label:X[W].label,typeStr:X[W].typeStr,directions:X[W].directions};break;case 31:se.getLogger().debug("Rule: dirList: ",X[W]),this.$=[X[W]];break;case 32:se.getLogger().debug("Rule: dirList: ",X[W-1],X[W]),this.$=[X[W-1]].concat(X[W]);break;case 33:se.getLogger().debug("Rule: nodeShapeNLabel: ",X[W-2],X[W-1],X[W]),this.$={typeStr:X[W-2]+X[W],label:X[W-1]};break;case 34:se.getLogger().debug("Rule: BLOCK_ARROW nodeShapeNLabel: ",X[W-3],X[W-2]," #3:",X[W-1],X[W]),this.$={typeStr:X[W-3]+X[W],label:X[W-2],directions:X[W-1]};break;case 35:case 36:this.$={type:"classDef",id:X[W-1].trim(),css:X[W].trim()};break;case 37:this.$={type:"applyClass",id:X[W-1].trim(),styleClass:X[W].trim()};break;case 38:this.$={type:"applyStyles",id:X[W-1].trim(),stylesStr:X[W].trim()};break}},table:[{9:1,10:[1,2]},{1:[3]},{11:3,13:4,19:5,20:6,21:s,22:8,23:9,24:10,25:11,26:12,28:u,29:d,31:p,32:v,40:b,44:y,47:T},{8:[1,20]},i(_,[2,12],{13:4,19:5,20:6,22:8,23:9,24:10,25:11,26:12,11:21,21:s,28:u,29:d,31:p,32:v,40:b,44:y,47:T}),i(A,[2,16],{14:22,15:P,16:R}),i(A,[2,17]),i(A,[2,18]),i(A,[2,19]),i(A,[2,20]),i(A,[2,21]),i(A,[2,22]),i(F,[2,25],{27:[1,25]}),i(A,[2,26]),{19:26,26:12,32:v},{11:27,13:4,19:5,20:6,21:s,22:8,23:9,24:10,25:11,26:12,28:u,29:d,31:p,32:v,40:b,44:y,47:T},{41:[1,28],43:[1,29]},{45:[1,30]},{48:[1,31]},i(j,[2,29],{33:32,36:[1,33],38:[1,34]}),{1:[2,7]},i(_,[2,13]),{26:35,32:v},{32:[2,14]},{17:[1,36]},i(F,[2,24]),{11:37,13:4,14:22,15:P,16:R,19:5,20:6,21:s,22:8,23:9,24:10,25:11,26:12,28:u,29:d,31:p,32:v,40:b,44:y,47:T},{30:[1,38]},{42:[1,39]},{42:[1,40]},{46:[1,41]},{49:[1,42]},i(j,[2,30]),{18:[1,43]},{18:[1,44]},i(F,[2,23]),{18:[1,45]},{30:[1,46]},i(A,[2,28]),i(A,[2,35]),i(A,[2,36]),i(A,[2,37]),i(A,[2,38]),{37:[1,47]},{34:48,35:K},{15:[1,50]},i(A,[2,27]),i(j,[2,33]),{39:[1,51]},{34:52,35:K,39:[2,31]},{32:[2,15]},i(j,[2,34]),{39:[2,32]}],defaultActions:{20:[2,7],23:[2,14],50:[2,15],52:[2,32]},parseError:function(be,ae){if(ae.recoverable)this.trace(be);else{var ne=new Error(be);throw ne.hash=ae,ne}},parse:function(be){var ae=this,ne=[0],se=[],de=[null],X=[],ge=this.table,W="",xe=0,U=0,Fe=2,Pe=1,je=X.slice.call(arguments,1),Ie=Object.create(this.lexer),Se={yy:{}};for(var Ce in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Ce)&&(Se.yy[Ce]=this.yy[Ce]);Ie.setInput(be,Se.yy),Se.yy.lexer=Ie,Se.yy.parser=this,typeof Ie.yylloc>"u"&&(Ie.yylloc={});var ke=Ie.yylloc;X.push(ke);var Ke=Ie.options&&Ie.options.ranges;typeof Se.yy.parseError=="function"?this.parseError=Se.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ft(){var kt;return kt=se.pop()||Ie.lex()||Pe,typeof kt!="number"&&(kt instanceof Array&&(se=kt,kt=se.pop()),kt=ae.symbols_[kt]||kt),kt}for(var Ne,gn,_t,Et,Gt={},ln,xt,Pt,Qe;;){if(gn=ne[ne.length-1],this.defaultActions[gn]?_t=this.defaultActions[gn]:((Ne===null||typeof Ne>"u")&&(Ne=Ft()),_t=ge[gn]&&ge[gn][Ne]),typeof _t>"u"||!_t.length||!_t[0]){var Dt="";Qe=[];for(ln in ge[gn])this.terminals_[ln]&&ln>Fe&&Qe.push("'"+this.terminals_[ln]+"'");Ie.showPosition?Dt="Parse error on line "+(xe+1)+`: -`+Ie.showPosition()+` -Expecting `+Qe.join(", ")+", got '"+(this.terminals_[Ne]||Ne)+"'":Dt="Parse error on line "+(xe+1)+": Unexpected "+(Ne==Pe?"end of input":"'"+(this.terminals_[Ne]||Ne)+"'"),this.parseError(Dt,{text:Ie.match,token:this.terminals_[Ne]||Ne,line:Ie.yylineno,loc:ke,expected:Qe})}if(_t[0]instanceof Array&&_t.length>1)throw new Error("Parse Error: multiple actions possible at state: "+gn+", token: "+Ne);switch(_t[0]){case 1:ne.push(Ne),de.push(Ie.yytext),X.push(Ie.yylloc),ne.push(_t[1]),Ne=null,U=Ie.yyleng,W=Ie.yytext,xe=Ie.yylineno,ke=Ie.yylloc;break;case 2:if(xt=this.productions_[_t[1]][1],Gt.$=de[de.length-xt],Gt._$={first_line:X[X.length-(xt||1)].first_line,last_line:X[X.length-1].last_line,first_column:X[X.length-(xt||1)].first_column,last_column:X[X.length-1].last_column},Ke&&(Gt._$.range=[X[X.length-(xt||1)].range[0],X[X.length-1].range[1]]),Et=this.performAction.apply(Gt,[W,U,xe,Se.yy,_t[1],de,X].concat(je)),typeof Et<"u")return Et;xt&&(ne=ne.slice(0,-1*xt*2),de=de.slice(0,-1*xt),X=X.slice(0,-1*xt)),ne.push(this.productions_[_t[1]][0]),de.push(Gt.$),X.push(Gt._$),Pt=ge[ne[ne.length-2]][ne[ne.length-1]],ne.push(Pt);break;case 3:return!0}}return!0}},ie=function(){var pe={EOF:1,parseError:function(ae,ne){if(this.yy.parser)this.yy.parser.parseError(ae,ne);else throw new Error(ae)},setInput:function(be,ae){return this.yy=ae||this.yy||{},this._input=be,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var be=this._input[0];this.yytext+=be,this.yyleng++,this.offset++,this.match+=be,this.matched+=be;var ae=be.match(/(?:\r\n?|\n).*/g);return ae?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),be},unput:function(be){var ae=be.length,ne=be.split(/(?:\r\n?|\n)/g);this._input=be+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-ae),this.offset-=ae;var se=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ne.length-1&&(this.yylineno-=ne.length-1);var de=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ne?(ne.length===se.length?this.yylloc.first_column:0)+se[se.length-ne.length].length-ne[0].length:this.yylloc.first_column-ae},this.options.ranges&&(this.yylloc.range=[de[0],de[0]+this.yyleng-ae]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). -`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(be){this.unput(this.match.slice(be))},pastInput:function(){var be=this.matched.substr(0,this.matched.length-this.match.length);return(be.length>20?"...":"")+be.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var be=this.match;return be.length<20&&(be+=this._input.substr(0,20-be.length)),(be.substr(0,20)+(be.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var be=this.pastInput(),ae=new Array(be.length+1).join("-");return be+this.upcomingInput()+` -`+ae+"^"},test_match:function(be,ae){var ne,se,de;if(this.options.backtrack_lexer&&(de={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(de.yylloc.range=this.yylloc.range.slice(0))),se=be[0].match(/(?:\r\n?|\n).*/g),se&&(this.yylineno+=se.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:se?se[se.length-1].length-se[se.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+be[0].length},this.yytext+=be[0],this.match+=be[0],this.matches=be,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(be[0].length),this.matched+=be[0],ne=this.performAction.call(this,this.yy,this,ae,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ne)return ne;if(this._backtrack){for(var X in de)this[X]=de[X];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var be,ae,ne,se;this._more||(this.yytext="",this.match="");for(var de=this._currentRules(),X=0;Xae[0].length)){if(ae=ne,se=X,this.options.backtrack_lexer){if(be=this.test_match(ne,de[X]),be!==!1)return be;if(this._backtrack){ae=!1;continue}else return!1}else if(!this.options.flex)break}return ae?(be=this.test_match(ae,de[se]),be!==!1?be:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var ae=this.next();return ae||this.lex()},begin:function(ae){this.conditionStack.push(ae)},popState:function(){var ae=this.conditionStack.length-1;return ae>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(ae){return ae=this.conditionStack.length-1-Math.abs(ae||0),ae>=0?this.conditionStack[ae]:"INITIAL"},pushState:function(ae){this.begin(ae)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(ae,ne,se,de){switch(se){case 0:return 10;case 1:return ae.getLogger().debug("Found space-block"),31;case 2:return ae.getLogger().debug("Found nl-block"),31;case 3:return ae.getLogger().debug("Found space-block"),29;case 4:ae.getLogger().debug(".",ne.yytext);break;case 5:ae.getLogger().debug("_",ne.yytext);break;case 6:return 5;case 7:return ne.yytext=-1,28;case 8:return ne.yytext=ne.yytext.replace(/columns\s+/,""),ae.getLogger().debug("COLUMNS (LEX)",ne.yytext),28;case 9:this.pushState("md_string");break;case 10:return"MD_STR";case 11:this.popState();break;case 12:this.pushState("string");break;case 13:ae.getLogger().debug("LEX: POPPING STR:",ne.yytext),this.popState();break;case 14:return ae.getLogger().debug("LEX: STR end:",ne.yytext),"STR";case 15:return ne.yytext=ne.yytext.replace(/space\:/,""),ae.getLogger().debug("SPACE NUM (LEX)",ne.yytext),21;case 16:return ne.yytext="1",ae.getLogger().debug("COLUMNS (LEX)",ne.yytext),21;case 17:return 43;case 18:return"LINKSTYLE";case 19:return"INTERPOLATE";case 20:return this.pushState("CLASSDEF"),40;case 21:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";case 22:return this.popState(),this.pushState("CLASSDEFID"),41;case 23:return this.popState(),42;case 24:return this.pushState("CLASS"),44;case 25:return this.popState(),this.pushState("CLASS_STYLE"),45;case 26:return this.popState(),46;case 27:return this.pushState("STYLE_STMNT"),47;case 28:return this.popState(),this.pushState("STYLE_DEFINITION"),48;case 29:return this.popState(),49;case 30:return this.pushState("acc_title"),"acc_title";case 31:return this.popState(),"acc_title_value";case 32:return this.pushState("acc_descr"),"acc_descr";case 33:return this.popState(),"acc_descr_value";case 34:this.pushState("acc_descr_multiline");break;case 35:this.popState();break;case 36:return"acc_descr_multiline_value";case 37:return 30;case 38:return this.popState(),ae.getLogger().debug("Lex: (("),"NODE_DEND";case 39:return this.popState(),ae.getLogger().debug("Lex: (("),"NODE_DEND";case 40:return this.popState(),ae.getLogger().debug("Lex: ))"),"NODE_DEND";case 41:return this.popState(),ae.getLogger().debug("Lex: (("),"NODE_DEND";case 42:return this.popState(),ae.getLogger().debug("Lex: (("),"NODE_DEND";case 43:return this.popState(),ae.getLogger().debug("Lex: (-"),"NODE_DEND";case 44:return this.popState(),ae.getLogger().debug("Lex: -)"),"NODE_DEND";case 45:return this.popState(),ae.getLogger().debug("Lex: (("),"NODE_DEND";case 46:return this.popState(),ae.getLogger().debug("Lex: ]]"),"NODE_DEND";case 47:return this.popState(),ae.getLogger().debug("Lex: ("),"NODE_DEND";case 48:return this.popState(),ae.getLogger().debug("Lex: ])"),"NODE_DEND";case 49:return this.popState(),ae.getLogger().debug("Lex: /]"),"NODE_DEND";case 50:return this.popState(),ae.getLogger().debug("Lex: /]"),"NODE_DEND";case 51:return this.popState(),ae.getLogger().debug("Lex: )]"),"NODE_DEND";case 52:return this.popState(),ae.getLogger().debug("Lex: )"),"NODE_DEND";case 53:return this.popState(),ae.getLogger().debug("Lex: ]>"),"NODE_DEND";case 54:return this.popState(),ae.getLogger().debug("Lex: ]"),"NODE_DEND";case 55:return ae.getLogger().debug("Lexa: -)"),this.pushState("NODE"),36;case 56:return ae.getLogger().debug("Lexa: (-"),this.pushState("NODE"),36;case 57:return ae.getLogger().debug("Lexa: ))"),this.pushState("NODE"),36;case 58:return ae.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;case 59:return ae.getLogger().debug("Lex: ((("),this.pushState("NODE"),36;case 60:return ae.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;case 61:return ae.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;case 62:return ae.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;case 63:return ae.getLogger().debug("Lexc: >"),this.pushState("NODE"),36;case 64:return ae.getLogger().debug("Lexa: (["),this.pushState("NODE"),36;case 65:return ae.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;case 66:return this.pushState("NODE"),36;case 67:return this.pushState("NODE"),36;case 68:return this.pushState("NODE"),36;case 69:return this.pushState("NODE"),36;case 70:return this.pushState("NODE"),36;case 71:return this.pushState("NODE"),36;case 72:return this.pushState("NODE"),36;case 73:return ae.getLogger().debug("Lexa: ["),this.pushState("NODE"),36;case 74:return this.pushState("BLOCK_ARROW"),ae.getLogger().debug("LEX ARR START"),38;case 75:return ae.getLogger().debug("Lex: NODE_ID",ne.yytext),32;case 76:return ae.getLogger().debug("Lex: EOF",ne.yytext),8;case 77:this.pushState("md_string");break;case 78:this.pushState("md_string");break;case 79:return"NODE_DESCR";case 80:this.popState();break;case 81:ae.getLogger().debug("Lex: Starting string"),this.pushState("string");break;case 82:ae.getLogger().debug("LEX ARR: Starting string"),this.pushState("string");break;case 83:return ae.getLogger().debug("LEX: NODE_DESCR:",ne.yytext),"NODE_DESCR";case 84:ae.getLogger().debug("LEX POPPING"),this.popState();break;case 85:ae.getLogger().debug("Lex: =>BAE"),this.pushState("ARROW_DIR");break;case 86:return ne.yytext=ne.yytext.replace(/^,\s*/,""),ae.getLogger().debug("Lex (right): dir:",ne.yytext),"DIR";case 87:return ne.yytext=ne.yytext.replace(/^,\s*/,""),ae.getLogger().debug("Lex (left):",ne.yytext),"DIR";case 88:return ne.yytext=ne.yytext.replace(/^,\s*/,""),ae.getLogger().debug("Lex (x):",ne.yytext),"DIR";case 89:return ne.yytext=ne.yytext.replace(/^,\s*/,""),ae.getLogger().debug("Lex (y):",ne.yytext),"DIR";case 90:return ne.yytext=ne.yytext.replace(/^,\s*/,""),ae.getLogger().debug("Lex (up):",ne.yytext),"DIR";case 91:return ne.yytext=ne.yytext.replace(/^,\s*/,""),ae.getLogger().debug("Lex (down):",ne.yytext),"DIR";case 92:return ne.yytext="]>",ae.getLogger().debug("Lex (ARROW_DIR end):",ne.yytext),this.popState(),this.popState(),"BLOCK_ARROW_END";case 93:return ae.getLogger().debug("Lex: LINK","#"+ne.yytext+"#"),15;case 94:return ae.getLogger().debug("Lex: LINK",ne.yytext),15;case 95:return ae.getLogger().debug("Lex: LINK",ne.yytext),15;case 96:return ae.getLogger().debug("Lex: LINK",ne.yytext),15;case 97:return ae.getLogger().debug("Lex: START_LINK",ne.yytext),this.pushState("LLABEL"),16;case 98:return ae.getLogger().debug("Lex: START_LINK",ne.yytext),this.pushState("LLABEL"),16;case 99:return ae.getLogger().debug("Lex: START_LINK",ne.yytext),this.pushState("LLABEL"),16;case 100:this.pushState("md_string");break;case 101:return ae.getLogger().debug("Lex: Starting string"),this.pushState("string"),"LINK_LABEL";case 102:return this.popState(),ae.getLogger().debug("Lex: LINK","#"+ne.yytext+"#"),15;case 103:return this.popState(),ae.getLogger().debug("Lex: LINK",ne.yytext),15;case 104:return this.popState(),ae.getLogger().debug("Lex: LINK",ne.yytext),15;case 105:return ae.getLogger().debug("Lex: COLON",ne.yytext),ne.yytext=ne.yytext.slice(1),27}},rules:[/^(?:block-beta\b)/,/^(?:block\s+)/,/^(?:block\n+)/,/^(?:block:)/,/^(?:[\s]+)/,/^(?:[\n]+)/,/^(?:((\u000D\u000A)|(\u000A)))/,/^(?:columns\s+auto\b)/,/^(?:columns\s+[\d]+)/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:space[:]\d+)/,/^(?:space\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\s+)/,/^(?:DEFAULT\s+)/,/^(?:\w+\s+)/,/^(?:[^\n]*)/,/^(?:class\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:style\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:end\b\s*)/,/^(?:\(\(\()/,/^(?:\)\)\))/,/^(?:[\)]\))/,/^(?:\}\})/,/^(?:\})/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\()/,/^(?:\]\])/,/^(?:\()/,/^(?:\]\))/,/^(?:\\\])/,/^(?:\/\])/,/^(?:\)\])/,/^(?:[\)])/,/^(?:\]>)/,/^(?:[\]])/,/^(?:-\))/,/^(?:\(-)/,/^(?:\)\))/,/^(?:\))/,/^(?:\(\(\()/,/^(?:\(\()/,/^(?:\{\{)/,/^(?:\{)/,/^(?:>)/,/^(?:\(\[)/,/^(?:\()/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\[\\)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:\[)/,/^(?:<\[)/,/^(?:[^\(\[\n\-\)\{\}\s\<\>:]+)/,/^(?:$)/,/^(?:["][`])/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:\]>\s*\()/,/^(?:,?\s*right\s*)/,/^(?:,?\s*left\s*)/,/^(?:,?\s*x\s*)/,/^(?:,?\s*y\s*)/,/^(?:,?\s*up\s*)/,/^(?:,?\s*down\s*)/,/^(?:\)\s*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*~~[\~]+\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:["][`])/,/^(?:["])/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?::\d+)/],conditions:{STYLE_DEFINITION:{rules:[29],inclusive:!1},STYLE_STMNT:{rules:[28],inclusive:!1},CLASSDEFID:{rules:[23],inclusive:!1},CLASSDEF:{rules:[21,22],inclusive:!1},CLASS_STYLE:{rules:[26],inclusive:!1},CLASS:{rules:[25],inclusive:!1},LLABEL:{rules:[100,101,102,103,104],inclusive:!1},ARROW_DIR:{rules:[86,87,88,89,90,91,92],inclusive:!1},BLOCK_ARROW:{rules:[77,82,85],inclusive:!1},NODE:{rules:[38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,78,81],inclusive:!1},md_string:{rules:[10,11,79,80],inclusive:!1},space:{rules:[],inclusive:!1},string:{rules:[13,14,83,84],inclusive:!1},acc_descr_multiline:{rules:[35,36],inclusive:!1},acc_descr:{rules:[33],inclusive:!1},acc_title:{rules:[31],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,12,15,16,17,18,19,20,24,27,30,32,34,37,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,93,94,95,96,97,98,99,105],inclusive:!0}}};return pe}();ee.lexer=ie;function oe(){this.yy={}}return oe.prototype=ee,ee.Parser=oe,new oe}();lwe.parser=lwe;const ucn=lwe;let U2={},hwe=[],ij={};const LWe="color",MWe="fill",lcn="bgFill",DWe=",",hcn=qt();let sj={};const fcn=i=>ci.sanitizeText(i,hcn),dcn=function(i,s=""){sj[i]===void 0&&(sj[i]={id:i,styles:[],textStyles:[]});const u=sj[i];s!=null&&s.split(DWe).forEach(d=>{const p=d.replace(/([^;]*);/,"$1").trim();if(d.match(LWe)){const b=p.replace(MWe,lcn).replace(LWe,MWe);u.textStyles.push(b)}u.styles.push(p)})},gcn=function(i,s=""){const u=U2[i];s!=null&&(u.styles=s.split(DWe))},pcn=function(i,s){i.split(",").forEach(function(u){let d=U2[u];if(d===void 0){const p=u.trim();U2[p]={id:p,type:"na",children:[]},d=U2[p]}d.classes||(d.classes=[]),d.classes.push(s)})},IWe=(i,s)=>{const u=i.flat(),d=[];for(const p of u){if(p.label&&(p.label=fcn(p.label)),p.type==="classDef"){dcn(p.id,p.css);continue}if(p.type==="applyClass"){pcn(p.id,(p==null?void 0:p.styleClass)||"");continue}if(p.type==="applyStyles"){p!=null&&p.stylesStr&&gcn(p.id,p==null?void 0:p.stylesStr);continue}if(p.type==="column-setting")s.columns=p.columns||-1;else if(p.type==="edge")ij[p.id]?ij[p.id]++:ij[p.id]=1,p.id=ij[p.id]+"-"+p.id,hwe.push(p);else{p.label||(p.type==="composite"?p.label="":p.label=p.id);const v=!U2[p.id];if(v?U2[p.id]=p:(p.type!=="na"&&(U2[p.id].type=p.type),p.label!==p.id&&(U2[p.id].label=p.label)),p.children&&IWe(p.children,p),p.type==="space"){const b=p.width||1;for(let y=0;y{Xe.debug("Clear called"),Pg(),aj={id:"root",type:"composite",children:[],columns:-1},U2={root:aj},fwe=[],sj={},hwe=[],ij={}};function mcn(i){switch(Xe.debug("typeStr2Type",i),i){case"[]":return"square";case"()":return Xe.debug("we have a round"),"round";case"(())":return"circle";case">]":return"rect_left_inv_arrow";case"{}":return"diamond";case"{{}}":return"hexagon";case"([])":return"stadium";case"[[]]":return"subroutine";case"[()]":return"cylinder";case"((()))":return"doublecircle";case"[//]":return"lean_right";case"[\\\\]":return"lean_left";case"[/\\]":return"trapezoid";case"[\\/]":return"inv_trapezoid";case"<[]>":return"block_arrow";default:return"na"}}function vcn(i){switch(Xe.debug("typeStr2Type",i),i){case"==":return"thick";default:return"normal"}}function wcn(i){switch(i.trim()){case"--x":return"arrow_cross";case"--o":return"arrow_circle";default:return"arrow_point"}}let OWe=0;const ycn={getConfig:()=>Vh().block,typeStr2Type:mcn,edgeTypeStr2Type:vcn,edgeStrToEdgeData:wcn,getLogger:()=>console,getBlocksFlat:()=>[...Object.values(U2)],getBlocks:()=>fwe||[],getEdges:()=>hwe,setHierarchy:i=>{aj.children=i,IWe(i,aj),fwe=aj.children},getBlock:i=>U2[i],setBlock:i=>{U2[i.id]=i},getColumns:i=>{const s=U2[i];return s?s.columns?s.columns:s.children?s.children.length:-1:-1},getClasses:function(){return sj},clear:bcn,generateId:()=>(OWe++,"id-"+Math.random().toString(36).substr(2,12)+"-"+OWe)},jJ=(i,s)=>{const u=ARe,d=u(i,"r"),p=u(i,"g"),v=u(i,"b");return SC(d,p,v,s)},xcn=i=>`.label { - font-family: ${i.fontFamily}; - color: ${i.nodeTextColor||i.textColor}; +`,"getStyles"),X1e=Dtt});var K1e={};vr(K1e,{diagram:()=>Ntt});var Ntt,Q1e=M(()=>{"use strict";V1e();W1e();q1e();j1e();Ntt={db:H1e,renderer:Y1e,parser:$1e,styles:X1e}});var OB,Sb,eye=M(()=>{"use strict";OB=function(){var t=o(function(l,u,h,f){for(h=h||{},f=l.length;f--;h[l[f]]=u);return h},"o"),e=[1,9],r=[1,10],n=[1,5,10,12],i={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SANKEY:4,NEWLINE:5,csv:6,opt_eof:7,record:8,csv_tail:9,EOF:10,"field[source]":11,COMMA:12,"field[target]":13,"field[value]":14,field:15,escaped:16,non_escaped:17,DQUOTE:18,ESCAPED_TEXT:19,NON_ESCAPED_TEXT:20,$accept:0,$end:1},terminals_:{2:"error",4:"SANKEY",5:"NEWLINE",10:"EOF",11:"field[source]",12:"COMMA",13:"field[target]",14:"field[value]",18:"DQUOTE",19:"ESCAPED_TEXT",20:"NON_ESCAPED_TEXT"},productions_:[0,[3,4],[6,2],[9,2],[9,0],[7,1],[7,0],[8,5],[15,1],[15,1],[16,3],[17,1]],performAction:o(function(u,h,f,d,p,m,g){var y=m.length-1;switch(p){case 7:let v=d.findOrCreateNode(m[y-4].trim().replaceAll('""','"')),x=d.findOrCreateNode(m[y-2].trim().replaceAll('""','"')),b=parseFloat(m[y].trim());d.addLink(v,x,b);break;case 8:case 9:case 11:this.$=m[y];break;case 10:this.$=m[y-1];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:e,20:r},{1:[2,6],7:11,10:[1,12]},t(r,[2,4],{9:13,5:[1,14]}),{12:[1,15]},t(n,[2,8]),t(n,[2,9]),{19:[1,16]},t(n,[2,11]),{1:[2,1]},{1:[2,5]},t(r,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:e,20:r},{15:18,16:7,17:8,18:e,20:r},{18:[1,19]},t(r,[2,3]),{12:[1,20]},t(n,[2,10]),{15:21,16:7,17:8,18:e,20:r},t([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:o(function(u,h){if(h.recoverable)this.trace(u);else{var f=new Error(u);throw f.hash=h,f}},"parseError"),parse:o(function(u){var h=this,f=[0],d=[],p=[null],m=[],g=this.table,y="",v=0,x=0,b=0,w=2,_=1,T=m.slice.call(arguments,1),E=Object.create(this.lexer),L={yy:{}};for(var S in this.yy)Object.prototype.hasOwnProperty.call(this.yy,S)&&(L.yy[S]=this.yy[S]);E.setInput(u,L.yy),L.yy.lexer=E,L.yy.parser=this,typeof E.yylloc>"u"&&(E.yylloc={});var A=E.yylloc;m.push(A);var I=E.options&&E.options.ranges;typeof L.yy.parseError=="function"?this.parseError=L.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function D(oe){f.length=f.length-2*oe,p.length=p.length-oe,m.length=m.length-oe}o(D,"popStack");function k(){var oe;return oe=d.pop()||E.lex()||_,typeof oe!="number"&&(oe instanceof Array&&(d=oe,oe=d.pop()),oe=h.symbols_[oe]||oe),oe}o(k,"lex");for(var R,C,O,N,P,F,B={},G,z,W,Z;;){if(O=f[f.length-1],this.defaultActions[O]?N=this.defaultActions[O]:((R===null||typeof R>"u")&&(R=k()),N=g[O]&&g[O][R]),typeof N>"u"||!N.length||!N[0]){var j="";Z=[];for(G in g[O])this.terminals_[G]&&G>w&&Z.push("'"+this.terminals_[G]+"'");E.showPosition?j="Parse error on line "+(v+1)+`: +`+E.showPosition()+` +Expecting `+Z.join(", ")+", got '"+(this.terminals_[R]||R)+"'":j="Parse error on line "+(v+1)+": Unexpected "+(R==_?"end of input":"'"+(this.terminals_[R]||R)+"'"),this.parseError(j,{text:E.match,token:this.terminals_[R]||R,line:E.yylineno,loc:A,expected:Z})}if(N[0]instanceof Array&&N.length>1)throw new Error("Parse Error: multiple actions possible at state: "+O+", token: "+R);switch(N[0]){case 1:f.push(R),p.push(E.yytext),m.push(E.yylloc),f.push(N[1]),R=null,C?(R=C,C=null):(x=E.yyleng,y=E.yytext,v=E.yylineno,A=E.yylloc,b>0&&b--);break;case 2:if(z=this.productions_[N[1]][1],B.$=p[p.length-z],B._$={first_line:m[m.length-(z||1)].first_line,last_line:m[m.length-1].last_line,first_column:m[m.length-(z||1)].first_column,last_column:m[m.length-1].last_column},I&&(B._$.range=[m[m.length-(z||1)].range[0],m[m.length-1].range[1]]),F=this.performAction.apply(B,[y,x,v,L.yy,N[1],p,m].concat(T)),typeof F<"u")return F;z&&(f=f.slice(0,-1*z*2),p=p.slice(0,-1*z),m=m.slice(0,-1*z)),f.push(this.productions_[N[1]][0]),p.push(B.$),m.push(B._$),W=g[f[f.length-2]][f[f.length-1]],f.push(W);break;case 3:return!0}}return!0},"parse")},a=function(){var l={EOF:1,parseError:o(function(h,f){if(this.yy.parser)this.yy.parser.parseError(h,f);else throw new Error(h)},"parseError"),setInput:o(function(u,h){return this.yy=h||this.yy||{},this._input=u,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var u=this._input[0];this.yytext+=u,this.yyleng++,this.offset++,this.match+=u,this.matched+=u;var h=u.match(/(?:\r\n?|\n).*/g);return h?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),u},"input"),unput:o(function(u){var h=u.length,f=u.split(/(?:\r\n?|\n)/g);this._input=u+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-h),this.offset-=h;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),f.length-1&&(this.yylineno-=f.length-1);var p=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:f?(f.length===d.length?this.yylloc.first_column:0)+d[d.length-f.length].length-f[0].length:this.yylloc.first_column-h},this.options.ranges&&(this.yylloc.range=[p[0],p[0]+this.yyleng-h]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(u){this.unput(this.match.slice(u))},"less"),pastInput:o(function(){var u=this.matched.substr(0,this.matched.length-this.match.length);return(u.length>20?"...":"")+u.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var u=this.match;return u.length<20&&(u+=this._input.substr(0,20-u.length)),(u.substr(0,20)+(u.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var u=this.pastInput(),h=new Array(u.length+1).join("-");return u+this.upcomingInput()+` +`+h+"^"},"showPosition"),test_match:o(function(u,h){var f,d,p;if(this.options.backtrack_lexer&&(p={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(p.yylloc.range=this.yylloc.range.slice(0))),d=u[0].match(/(?:\r\n?|\n).*/g),d&&(this.yylineno+=d.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:d?d[d.length-1].length-d[d.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+u[0].length},this.yytext+=u[0],this.match+=u[0],this.matches=u,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(u[0].length),this.matched+=u[0],f=this.performAction.call(this,this.yy,this,h,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),f)return f;if(this._backtrack){for(var m in p)this[m]=p[m];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var u,h,f,d;this._more||(this.yytext="",this.match="");for(var p=this._currentRules(),m=0;mh[0].length)){if(h=f,d=m,this.options.backtrack_lexer){if(u=this.test_match(f,p[m]),u!==!1)return u;if(this._backtrack){h=!1;continue}else return!1}else if(!this.options.flex)break}return h?(u=this.test_match(h,p[d]),u!==!1?u:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var h=this.next();return h||this.lex()},"lex"),begin:o(function(h){this.conditionStack.push(h)},"begin"),popState:o(function(){var h=this.conditionStack.length-1;return h>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(h){return h=this.conditionStack.length-1-Math.abs(h||0),h>=0?this.conditionStack[h]:"INITIAL"},"topState"),pushState:o(function(h){this.begin(h)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(h,f,d,p){var m=p;switch(d){case 0:return this.pushState("csv"),4;break;case 1:return 10;case 2:return 5;case 3:return 12;case 4:return this.pushState("escaped_text"),18;break;case 5:return 20;case 6:return this.popState("escaped_text"),18;break;case 7:return 19}},"anonymous"),rules:[/^(?:sankey-beta\b)/i,/^(?:$)/i,/^(?:((\u000D\u000A)|(\u000A)))/i,/^(?:(\u002C))/i,/^(?:(\u0022))/i,/^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/i,/^(?:(\u0022)(?!(\u0022)))/i,/^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/i],conditions:{csv:{rules:[1,2,3,4,5,6,7],inclusive:!1},escaped_text:{rules:[6,7],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7],inclusive:!0}}};return l}();i.lexer=a;function s(){this.yy={}}return o(s,"Parser"),s.prototype=i,i.Parser=s,new s}();OB.parser=OB;Sb=OB});var rS,nS,tS,Ott,PB,Ptt,BB,Btt,Ftt,ztt,Gtt,tye,rye=M(()=>{"use strict";Vt();fr();Ai();rS=[],nS=[],tS=new Map,Ott=o(()=>{rS=[],nS=[],tS=new Map,Lr()},"clear"),PB=class{constructor(e,r,n=0){this.source=e;this.target=r;this.value=n}static{o(this,"SankeyLink")}},Ptt=o((t,e,r)=>{rS.push(new PB(t,e,r))},"addLink"),BB=class{constructor(e){this.ID=e}static{o(this,"SankeyNode")}},Btt=o(t=>{t=qe.sanitizeText(t,pe());let e=tS.get(t);return e===void 0&&(e=new BB(t),tS.set(t,e),nS.push(e)),e},"findOrCreateNode"),Ftt=o(()=>nS,"getNodes"),ztt=o(()=>rS,"getLinks"),Gtt=o(()=>({nodes:nS.map(t=>({id:t.ID})),links:rS.map(t=>({source:t.source.ID,target:t.target.ID,value:t.value}))}),"getGraph"),tye={nodesMap:tS,getConfig:o(()=>pe().sankey,"getConfig"),getNodes:Ftt,getLinks:ztt,getGraph:Gtt,addLink:Ptt,findOrCreateNode:Btt,getAccTitle:Br,setAccTitle:Mr,getAccDescription:zr,setAccDescription:Fr,getDiagramTitle:Jr,setDiagramTitle:cn,clear:Ott}});function Cb(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r=i)&&(r=i)}return r}var nye=M(()=>{"use strict";o(Cb,"max")});function O1(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r>i||r===void 0&&i>=i)&&(r=i)}return r}var iye=M(()=>{"use strict";o(O1,"min")});function P1(t,e){let r=0;if(e===void 0)for(let n of t)(n=+n)&&(r+=n);else{let n=-1;for(let i of t)(i=+e(i,++n,t))&&(r+=i)}return r}var aye=M(()=>{"use strict";o(P1,"sum")});var FB=M(()=>{"use strict";nye();iye();aye()});function $tt(t){return t.target.depth}function zB(t){return t.depth}function GB(t,e){return e-1-t.height}function Ab(t,e){return t.sourceLinks.length?t.depth:e-1}function $B(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?O1(t.sourceLinks,$tt)-1:0}var VB=M(()=>{"use strict";FB();o($tt,"targetDepth");o(zB,"left");o(GB,"right");o(Ab,"justify");o($B,"center")});function B1(t){return function(){return t}}var sye=M(()=>{"use strict";o(B1,"constant")});function oye(t,e){return iS(t.source,e.source)||t.index-e.index}function lye(t,e){return iS(t.target,e.target)||t.index-e.index}function iS(t,e){return t.y0-e.y0}function UB(t){return t.value}function Vtt(t){return t.index}function Utt(t){return t.nodes}function Htt(t){return t.links}function cye(t,e){let r=t.get(e);if(!r)throw new Error("missing: "+e);return r}function uye({nodes:t}){for(let e of t){let r=e.y0,n=r;for(let i of e.sourceLinks)i.y0=r+i.width/2,r+=i.width;for(let i of e.targetLinks)i.y1=n+i.width/2,n+=i.width}}function aS(){let t=0,e=0,r=1,n=1,i=24,a=8,s,l=Vtt,u=Ab,h,f,d=Utt,p=Htt,m=6;function g(){let O={nodes:d.apply(null,arguments),links:p.apply(null,arguments)};return y(O),v(O),x(O),b(O),T(O),uye(O),O}o(g,"sankey"),g.update=function(O){return uye(O),O},g.nodeId=function(O){return arguments.length?(l=typeof O=="function"?O:B1(O),g):l},g.nodeAlign=function(O){return arguments.length?(u=typeof O=="function"?O:B1(O),g):u},g.nodeSort=function(O){return arguments.length?(h=O,g):h},g.nodeWidth=function(O){return arguments.length?(i=+O,g):i},g.nodePadding=function(O){return arguments.length?(a=s=+O,g):a},g.nodes=function(O){return arguments.length?(d=typeof O=="function"?O:B1(O),g):d},g.links=function(O){return arguments.length?(p=typeof O=="function"?O:B1(O),g):p},g.linkSort=function(O){return arguments.length?(f=O,g):f},g.size=function(O){return arguments.length?(t=e=0,r=+O[0],n=+O[1],g):[r-t,n-e]},g.extent=function(O){return arguments.length?(t=+O[0][0],r=+O[1][0],e=+O[0][1],n=+O[1][1],g):[[t,e],[r,n]]},g.iterations=function(O){return arguments.length?(m=+O,g):m};function y({nodes:O,links:N}){for(let[F,B]of O.entries())B.index=F,B.sourceLinks=[],B.targetLinks=[];let P=new Map(O.map((F,B)=>[l(F,B,O),F]));for(let[F,B]of N.entries()){B.index=F;let{source:G,target:z}=B;typeof G!="object"&&(G=B.source=cye(P,G)),typeof z!="object"&&(z=B.target=cye(P,z)),G.sourceLinks.push(B),z.targetLinks.push(B)}if(f!=null)for(let{sourceLinks:F,targetLinks:B}of O)F.sort(f),B.sort(f)}o(y,"computeNodeLinks");function v({nodes:O}){for(let N of O)N.value=N.fixedValue===void 0?Math.max(P1(N.sourceLinks,UB),P1(N.targetLinks,UB)):N.fixedValue}o(v,"computeNodeValues");function x({nodes:O}){let N=O.length,P=new Set(O),F=new Set,B=0;for(;P.size;){for(let G of P){G.depth=B;for(let{target:z}of G.sourceLinks)F.add(z)}if(++B>N)throw new Error("circular link");P=F,F=new Set}}o(x,"computeNodeDepths");function b({nodes:O}){let N=O.length,P=new Set(O),F=new Set,B=0;for(;P.size;){for(let G of P){G.height=B;for(let{source:z}of G.targetLinks)F.add(z)}if(++B>N)throw new Error("circular link");P=F,F=new Set}}o(b,"computeNodeHeights");function w({nodes:O}){let N=Cb(O,B=>B.depth)+1,P=(r-t-i)/(N-1),F=new Array(N);for(let B of O){let G=Math.max(0,Math.min(N-1,Math.floor(u.call(null,B,N))));B.layer=G,B.x0=t+G*P,B.x1=B.x0+i,F[G]?F[G].push(B):F[G]=[B]}if(h)for(let B of F)B.sort(h);return F}o(w,"computeNodeLayers");function _(O){let N=O1(O,P=>(n-e-(P.length-1)*s)/P1(P,UB));for(let P of O){let F=e;for(let B of P){B.y0=F,B.y1=F+B.value*N,F=B.y1+s;for(let G of B.sourceLinks)G.width=G.value*N}F=(n-F+s)/(P.length+1);for(let B=0;BP.length)-1)),_(N);for(let P=0;P0))continue;let j=(W/Z-z.y0)*N;z.y0+=j,z.y1+=j,D(z)}h===void 0&&G.sort(iS),S(G,P)}}o(E,"relaxLeftToRight");function L(O,N,P){for(let F=O.length,B=F-2;B>=0;--B){let G=O[B];for(let z of G){let W=0,Z=0;for(let{target:oe,value:K}of z.sourceLinks){let ee=K*(oe.layer-z.layer);W+=C(z,oe)*ee,Z+=ee}if(!(Z>0))continue;let j=(W/Z-z.y0)*N;z.y0+=j,z.y1+=j,D(z)}h===void 0&&G.sort(iS),S(G,P)}}o(L,"relaxRightToLeft");function S(O,N){let P=O.length>>1,F=O[P];I(O,F.y0-s,P-1,N),A(O,F.y1+s,P+1,N),I(O,n,O.length-1,N),A(O,e,0,N)}o(S,"resolveCollisions");function A(O,N,P,F){for(;P1e-6&&(B.y0+=G,B.y1+=G),N=B.y1+s}}o(A,"resolveCollisionsTopToBottom");function I(O,N,P,F){for(;P>=0;--P){let B=O[P],G=(B.y1-N)*F;G>1e-6&&(B.y0-=G,B.y1-=G),N=B.y0-s}}o(I,"resolveCollisionsBottomToTop");function D({sourceLinks:O,targetLinks:N}){if(f===void 0){for(let{source:{sourceLinks:P}}of N)P.sort(lye);for(let{target:{targetLinks:P}}of O)P.sort(oye)}}o(D,"reorderNodeLinks");function k(O){if(f===void 0)for(let{sourceLinks:N,targetLinks:P}of O)N.sort(lye),P.sort(oye)}o(k,"reorderLinks");function R(O,N){let P=O.y0-(O.sourceLinks.length-1)*s/2;for(let{target:F,width:B}of O.sourceLinks){if(F===N)break;P+=B+s}for(let{source:F,width:B}of N.targetLinks){if(F===O)break;P-=B}return P}o(R,"targetTop");function C(O,N){let P=N.y0-(N.targetLinks.length-1)*s/2;for(let{source:F,width:B}of N.targetLinks){if(F===O)break;P+=B+s}for(let{target:F,width:B}of O.sourceLinks){if(F===N)break;P-=B}return P}return o(C,"sourceTop"),g}var hye=M(()=>{"use strict";FB();VB();sye();o(oye,"ascendingSourceBreadth");o(lye,"ascendingTargetBreadth");o(iS,"ascendingBreadth");o(UB,"value");o(Vtt,"defaultId");o(Utt,"defaultNodes");o(Htt,"defaultLinks");o(cye,"find");o(uye,"computeLinkBreadths");o(aS,"Sankey")});function YB(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function fye(){return new YB}var HB,WB,np,Wtt,qB,dye=M(()=>{"use strict";HB=Math.PI,WB=2*HB,np=1e-6,Wtt=WB-np;o(YB,"Path");o(fye,"path");YB.prototype=fye.prototype={constructor:YB,moveTo:o(function(t,e){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)},"moveTo"),closePath:o(function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},"closePath"),lineTo:o(function(t,e){this._+="L"+(this._x1=+t)+","+(this._y1=+e)},"lineTo"),quadraticCurveTo:o(function(t,e,r,n){this._+="Q"+ +t+","+ +e+","+(this._x1=+r)+","+(this._y1=+n)},"quadraticCurveTo"),bezierCurveTo:o(function(t,e,r,n,i,a){this._+="C"+ +t+","+ +e+","+ +r+","+ +n+","+(this._x1=+i)+","+(this._y1=+a)},"bezierCurveTo"),arcTo:o(function(t,e,r,n,i){t=+t,e=+e,r=+r,n=+n,i=+i;var a=this._x1,s=this._y1,l=r-t,u=n-e,h=a-t,f=s-e,d=h*h+f*f;if(i<0)throw new Error("negative radius: "+i);if(this._x1===null)this._+="M"+(this._x1=t)+","+(this._y1=e);else if(d>np)if(!(Math.abs(f*l-u*h)>np)||!i)this._+="L"+(this._x1=t)+","+(this._y1=e);else{var p=r-a,m=n-s,g=l*l+u*u,y=p*p+m*m,v=Math.sqrt(g),x=Math.sqrt(d),b=i*Math.tan((HB-Math.acos((g+d-y)/(2*v*x)))/2),w=b/x,_=b/v;Math.abs(w-1)>np&&(this._+="L"+(t+w*h)+","+(e+w*f)),this._+="A"+i+","+i+",0,0,"+ +(f*p>h*m)+","+(this._x1=t+_*l)+","+(this._y1=e+_*u)}},"arcTo"),arc:o(function(t,e,r,n,i,a){t=+t,e=+e,r=+r,a=!!a;var s=r*Math.cos(n),l=r*Math.sin(n),u=t+s,h=e+l,f=1^a,d=a?n-i:i-n;if(r<0)throw new Error("negative radius: "+r);this._x1===null?this._+="M"+u+","+h:(Math.abs(this._x1-u)>np||Math.abs(this._y1-h)>np)&&(this._+="L"+u+","+h),r&&(d<0&&(d=d%WB+WB),d>Wtt?this._+="A"+r+","+r+",0,1,"+f+","+(t-s)+","+(e-l)+"A"+r+","+r+",0,1,"+f+","+(this._x1=u)+","+(this._y1=h):d>np&&(this._+="A"+r+","+r+",0,"+ +(d>=HB)+","+f+","+(this._x1=t+r*Math.cos(i))+","+(this._y1=e+r*Math.sin(i))))},"arc"),rect:o(function(t,e,r,n){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +r+"v"+ +n+"h"+-r+"Z"},"rect"),toString:o(function(){return this._},"toString")};qB=fye});var pye=M(()=>{"use strict";dye()});function sS(t){return o(function(){return t},"constant")}var mye=M(()=>{"use strict";o(sS,"default")});function gye(t){return t[0]}function yye(t){return t[1]}var vye=M(()=>{"use strict";o(gye,"x");o(yye,"y")});var xye,bye=M(()=>{"use strict";xye=Array.prototype.slice});function Ytt(t){return t.source}function qtt(t){return t.target}function Xtt(t){var e=Ytt,r=qtt,n=gye,i=yye,a=null;function s(){var l,u=xye.call(arguments),h=e.apply(this,u),f=r.apply(this,u);if(a||(a=l=qB()),t(a,+n.apply(this,(u[0]=h,u)),+i.apply(this,u),+n.apply(this,(u[0]=f,u)),+i.apply(this,u)),l)return a=null,l+""||null}return o(s,"link"),s.source=function(l){return arguments.length?(e=l,s):e},s.target=function(l){return arguments.length?(r=l,s):r},s.x=function(l){return arguments.length?(n=typeof l=="function"?l:sS(+l),s):n},s.y=function(l){return arguments.length?(i=typeof l=="function"?l:sS(+l),s):i},s.context=function(l){return arguments.length?(a=l??null,s):a},s}function jtt(t,e,r,n,i){t.moveTo(e,r),t.bezierCurveTo(e=(e+n)/2,r,e,i,n,i)}function XB(){return Xtt(jtt)}var wye=M(()=>{"use strict";pye();bye();mye();vye();o(Ytt,"linkSource");o(qtt,"linkTarget");o(Xtt,"link");o(jtt,"curveHorizontal");o(XB,"linkHorizontal")});var Tye=M(()=>{"use strict";wye()});function Ktt(t){return[t.source.x1,t.y0]}function Qtt(t){return[t.target.x0,t.y1]}function oS(){return XB().source(Ktt).target(Qtt)}var kye=M(()=>{"use strict";Tye();o(Ktt,"horizontalSource");o(Qtt,"horizontalTarget");o(oS,"default")});var Eye=M(()=>{"use strict";hye();VB();kye()});var _b,Sye=M(()=>{"use strict";_b=class t{static{o(this,"Uid")}static{this.count=0}static next(e){return new t(e+ ++t.count)}constructor(e){this.id=e,this.href=`#${e}`}toString(){return"url("+this.href+")"}}});var Ztt,Jtt,Cye,Aye=M(()=>{"use strict";Vt();pr();Eye();ai();Sye();Ztt={left:zB,right:GB,center:$B,justify:Ab},Jtt=o(function(t,e,r,n){let{securityLevel:i,sankey:a}=pe(),s=B4.sankey,l;i==="sandbox"&&(l=Ve("#i"+e));let u=i==="sandbox"?Ve(l.nodes()[0].contentDocument.body):Ve("body"),h=i==="sandbox"?u.select(`[id="${e}"]`):Ve(`[id="${e}"]`),f=a?.width??s.width,d=a?.height??s.width,p=a?.useMaxWidth??s.useMaxWidth,m=a?.nodeAlignment??s.nodeAlignment,g=a?.prefix??s.prefix,y=a?.suffix??s.suffix,v=a?.showValues??s.showValues,x=n.db.getGraph(),b=Ztt[m];aS().nodeId(I=>I.id).nodeWidth(10).nodePadding(10+(v?15:0)).nodeAlign(b).extent([[0,0],[f,d]])(x);let T=ku(e_);h.append("g").attr("class","nodes").selectAll(".node").data(x.nodes).join("g").attr("class","node").attr("id",I=>(I.uid=_b.next("node-")).id).attr("transform",function(I){return"translate("+I.x0+","+I.y0+")"}).attr("x",I=>I.x0).attr("y",I=>I.y0).append("rect").attr("height",I=>I.y1-I.y0).attr("width",I=>I.x1-I.x0).attr("fill",I=>T(I.id));let E=o(({id:I,value:D})=>v?`${I} +${g}${Math.round(D*100)/100}${y}`:I,"getText");h.append("g").attr("class","node-labels").attr("font-family","sans-serif").attr("font-size",14).selectAll("text").data(x.nodes).join("text").attr("x",I=>I.x0(I.y1+I.y0)/2).attr("dy",`${v?"0":"0.35"}em`).attr("text-anchor",I=>I.x0(D.uid=_b.next("linearGradient-")).id).attr("gradientUnits","userSpaceOnUse").attr("x1",D=>D.source.x1).attr("x2",D=>D.target.x0);I.append("stop").attr("offset","0%").attr("stop-color",D=>T(D.source.id)),I.append("stop").attr("offset","100%").attr("stop-color",D=>T(D.target.id))}let A;switch(S){case"gradient":A=o(I=>I.uid,"coloring");break;case"source":A=o(I=>T(I.source.id),"coloring");break;case"target":A=o(I=>T(I.target.id),"coloring");break;default:A=S}L.append("path").attr("d",oS()).attr("stroke",A).attr("stroke-width",I=>Math.max(1,I.width)),Io(void 0,h,0,p)},"draw"),Cye={draw:Jtt}});var _ye,Lye=M(()=>{"use strict";_ye=o(t=>t.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g,"").replaceAll(/([\n\r])+/g,` +`).trim(),"prepareTextForParsing")});var Dye={};vr(Dye,{diagram:()=>trt});var ert,trt,Nye=M(()=>{"use strict";eye();rye();Aye();Lye();ert=Sb.parse.bind(Sb);Sb.parse=t=>ert(_ye(t));trt={parser:Sb,db:tye,renderer:Cye}});var Iye,jB,art,srt,ort,lrt,crt,$f,KB=M(()=>{"use strict";Za();bs();hr();Ai();Iye={packet:[]},jB=structuredClone(Iye),art=ur.packet,srt=o(()=>{let t=Ds({...art,...Cr().packet});return t.showBits&&(t.paddingY+=10),t},"getConfig"),ort=o(()=>jB.packet,"getPacket"),lrt=o(t=>{t.length>0&&jB.packet.push(t)},"pushWord"),crt=o(()=>{Lr(),jB=structuredClone(Iye)},"clear"),$f={pushWord:lrt,getPacket:ort,getConfig:srt,clear:crt,setAccTitle:Mr,getAccTitle:Br,setDiagramTitle:cn,getDiagramTitle:Jr,getAccDescription:zr,setAccDescription:Fr}});var urt,hrt,frt,Oye,Pye=M(()=>{"use strict";Hg();ut();Tx();KB();urt=1e4,hrt=o(t=>{yf(t,$f);let e=-1,r=[],n=1,{bitsPerRow:i}=$f.getConfig();for(let{start:a,end:s,label:l}of t.blocks){if(s&&s{if(t.end===void 0&&(t.end=t.start),t.start>t.end)throw new Error(`Block start ${t.start} is greater than block end ${t.end}.`);return t.end+1<=e*r?[t,void 0]:[{start:t.start,end:e*r-1,label:t.label},{start:e*r,end:t.end,label:t.label}]},"getNextFittingBlock"),Oye={parse:o(async t=>{let e=await Yl("packet",t);Y.debug(e),hrt(e)},"parse")}});var drt,prt,Bye,Fye=M(()=>{"use strict";eh();ai();drt=o((t,e,r,n)=>{let i=n.db,a=i.getConfig(),{rowHeight:s,paddingY:l,bitWidth:u,bitsPerRow:h}=a,f=i.getPacket(),d=i.getDiagramTitle(),p=s+l,m=p*(f.length+1)-(d?0:s),g=u*h+2,y=Va(e);y.attr("viewbox",`0 0 ${g} ${m}`),Zr(y,m,g,a.useMaxWidth);for(let[v,x]of f.entries())prt(y,x,v,a);y.append("text").text(d).attr("x",g/2).attr("y",m-p/2).attr("dominant-baseline","middle").attr("text-anchor","middle").attr("class","packetTitle")},"draw"),prt=o((t,e,r,{rowHeight:n,paddingX:i,paddingY:a,bitWidth:s,bitsPerRow:l,showBits:u})=>{let h=t.append("g"),f=r*(n+a)+a;for(let d of e){let p=d.start%l*s+1,m=(d.end-d.start+1)*s-i;if(h.append("rect").attr("x",p).attr("y",f).attr("width",m).attr("height",n).attr("class","packetBlock"),h.append("text").attr("x",p+m/2).attr("y",f+n/2).attr("class","packetLabel").attr("dominant-baseline","middle").attr("text-anchor","middle").text(d.label),!u)continue;let g=d.end===d.start,y=f-2;h.append("text").attr("x",p+(g?m/2:0)).attr("y",y).attr("class","packetByte start").attr("dominant-baseline","auto").attr("text-anchor",g?"middle":"start").text(d.start),g||h.append("text").attr("x",p+m).attr("y",y).attr("class","packetByte end").attr("dominant-baseline","auto").attr("text-anchor","end").text(d.end)}},"drawWord"),Bye={draw:drt}});var mrt,zye,Gye=M(()=>{"use strict";hr();mrt={byteFontSize:"10px",startByteColor:"black",endByteColor:"black",labelColor:"black",labelFontSize:"12px",titleColor:"black",titleFontSize:"14px",blockStrokeColor:"black",blockStrokeWidth:"1",blockFillColor:"#efefef"},zye=o(({packet:t}={})=>{let e=Ds(mrt,t);return` + .packetByte { + font-size: ${e.byteFontSize}; + } + .packetByte.start { + fill: ${e.startByteColor}; + } + .packetByte.end { + fill: ${e.endByteColor}; + } + .packetLabel { + fill: ${e.labelColor}; + font-size: ${e.labelFontSize}; + } + .packetTitle { + fill: ${e.titleColor}; + font-size: ${e.titleFontSize}; + } + .packetBlock { + stroke: ${e.blockStrokeColor}; + stroke-width: ${e.blockStrokeWidth}; + fill: ${e.blockFillColor}; + } + `},"styles")});var $ye={};vr($ye,{diagram:()=>grt});var grt,Vye=M(()=>{"use strict";KB();Pye();Fye();Gye();grt={parser:Oye,db:$f,renderer:Bye,styles:zye}});var QB,Wye,Yye=M(()=>{"use strict";QB=function(){var t=o(function(w,_,T,E){for(T=T||{},E=w.length;E--;T[w[E]]=_);return T},"o"),e=[1,7],r=[1,13],n=[1,14],i=[1,15],a=[1,19],s=[1,16],l=[1,17],u=[1,18],h=[8,30],f=[8,21,28,29,30,31,32,40,44,47],d=[1,23],p=[1,24],m=[8,15,16,21,28,29,30,31,32,40,44,47],g=[8,15,16,21,27,28,29,30,31,32,40,44,47],y=[1,49],v={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,spaceLines:3,SPACELINE:4,NL:5,separator:6,SPACE:7,EOF:8,start:9,BLOCK_DIAGRAM_KEY:10,document:11,stop:12,statement:13,link:14,LINK:15,START_LINK:16,LINK_LABEL:17,STR:18,nodeStatement:19,columnsStatement:20,SPACE_BLOCK:21,blockStatement:22,classDefStatement:23,cssClassStatement:24,styleStatement:25,node:26,SIZE:27,COLUMNS:28,"id-block":29,end:30,block:31,NODE_ID:32,nodeShapeNLabel:33,dirList:34,DIR:35,NODE_DSTART:36,NODE_DEND:37,BLOCK_ARROW_START:38,BLOCK_ARROW_END:39,classDef:40,CLASSDEF_ID:41,CLASSDEF_STYLEOPTS:42,DEFAULT:43,class:44,CLASSENTITY_IDS:45,STYLECLASS:46,style:47,STYLE_ENTITY_IDS:48,STYLE_DEFINITION_DATA:49,$accept:0,$end:1},terminals_:{2:"error",4:"SPACELINE",5:"NL",7:"SPACE",8:"EOF",10:"BLOCK_DIAGRAM_KEY",15:"LINK",16:"START_LINK",17:"LINK_LABEL",18:"STR",21:"SPACE_BLOCK",27:"SIZE",28:"COLUMNS",29:"id-block",30:"end",31:"block",32:"NODE_ID",35:"DIR",36:"NODE_DSTART",37:"NODE_DEND",38:"BLOCK_ARROW_START",39:"BLOCK_ARROW_END",40:"classDef",41:"CLASSDEF_ID",42:"CLASSDEF_STYLEOPTS",43:"DEFAULT",44:"class",45:"CLASSENTITY_IDS",46:"STYLECLASS",47:"style",48:"STYLE_ENTITY_IDS",49:"STYLE_DEFINITION_DATA"},productions_:[0,[3,1],[3,2],[3,2],[6,1],[6,1],[6,1],[9,3],[12,1],[12,1],[12,2],[12,2],[11,1],[11,2],[14,1],[14,4],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[19,3],[19,2],[19,1],[20,1],[22,4],[22,3],[26,1],[26,2],[34,1],[34,2],[33,3],[33,4],[23,3],[23,3],[24,3],[25,3]],performAction:o(function(_,T,E,L,S,A,I){var D=A.length-1;switch(S){case 4:L.getLogger().debug("Rule: separator (NL) ");break;case 5:L.getLogger().debug("Rule: separator (Space) ");break;case 6:L.getLogger().debug("Rule: separator (EOF) ");break;case 7:L.getLogger().debug("Rule: hierarchy: ",A[D-1]),L.setHierarchy(A[D-1]);break;case 8:L.getLogger().debug("Stop NL ");break;case 9:L.getLogger().debug("Stop EOF ");break;case 10:L.getLogger().debug("Stop NL2 ");break;case 11:L.getLogger().debug("Stop EOF2 ");break;case 12:L.getLogger().debug("Rule: statement: ",A[D]),typeof A[D].length=="number"?this.$=A[D]:this.$=[A[D]];break;case 13:L.getLogger().debug("Rule: statement #2: ",A[D-1]),this.$=[A[D-1]].concat(A[D]);break;case 14:L.getLogger().debug("Rule: link: ",A[D],_),this.$={edgeTypeStr:A[D],label:""};break;case 15:L.getLogger().debug("Rule: LABEL link: ",A[D-3],A[D-1],A[D]),this.$={edgeTypeStr:A[D],label:A[D-1]};break;case 18:let k=parseInt(A[D]),R=L.generateId();this.$={id:R,type:"space",label:"",width:k,children:[]};break;case 23:L.getLogger().debug("Rule: (nodeStatement link node) ",A[D-2],A[D-1],A[D]," typestr: ",A[D-1].edgeTypeStr);let C=L.edgeStrToEdgeData(A[D-1].edgeTypeStr);this.$=[{id:A[D-2].id,label:A[D-2].label,type:A[D-2].type,directions:A[D-2].directions},{id:A[D-2].id+"-"+A[D].id,start:A[D-2].id,end:A[D].id,label:A[D-1].label,type:"edge",directions:A[D].directions,arrowTypeEnd:C,arrowTypeStart:"arrow_open"},{id:A[D].id,label:A[D].label,type:L.typeStr2Type(A[D].typeStr),directions:A[D].directions}];break;case 24:L.getLogger().debug("Rule: nodeStatement (abc88 node size) ",A[D-1],A[D]),this.$={id:A[D-1].id,label:A[D-1].label,type:L.typeStr2Type(A[D-1].typeStr),directions:A[D-1].directions,widthInColumns:parseInt(A[D],10)};break;case 25:L.getLogger().debug("Rule: nodeStatement (node) ",A[D]),this.$={id:A[D].id,label:A[D].label,type:L.typeStr2Type(A[D].typeStr),directions:A[D].directions,widthInColumns:1};break;case 26:L.getLogger().debug("APA123",this?this:"na"),L.getLogger().debug("COLUMNS: ",A[D]),this.$={type:"column-setting",columns:A[D]==="auto"?-1:parseInt(A[D])};break;case 27:L.getLogger().debug("Rule: id-block statement : ",A[D-2],A[D-1]);let O=L.generateId();this.$={...A[D-2],type:"composite",children:A[D-1]};break;case 28:L.getLogger().debug("Rule: blockStatement : ",A[D-2],A[D-1],A[D]);let N=L.generateId();this.$={id:N,type:"composite",label:"",children:A[D-1]};break;case 29:L.getLogger().debug("Rule: node (NODE_ID separator): ",A[D]),this.$={id:A[D]};break;case 30:L.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel separator): ",A[D-1],A[D]),this.$={id:A[D-1],label:A[D].label,typeStr:A[D].typeStr,directions:A[D].directions};break;case 31:L.getLogger().debug("Rule: dirList: ",A[D]),this.$=[A[D]];break;case 32:L.getLogger().debug("Rule: dirList: ",A[D-1],A[D]),this.$=[A[D-1]].concat(A[D]);break;case 33:L.getLogger().debug("Rule: nodeShapeNLabel: ",A[D-2],A[D-1],A[D]),this.$={typeStr:A[D-2]+A[D],label:A[D-1]};break;case 34:L.getLogger().debug("Rule: BLOCK_ARROW nodeShapeNLabel: ",A[D-3],A[D-2]," #3:",A[D-1],A[D]),this.$={typeStr:A[D-3]+A[D],label:A[D-2],directions:A[D-1]};break;case 35:case 36:this.$={type:"classDef",id:A[D-1].trim(),css:A[D].trim()};break;case 37:this.$={type:"applyClass",id:A[D-1].trim(),styleClass:A[D].trim()};break;case 38:this.$={type:"applyStyles",id:A[D-1].trim(),stylesStr:A[D].trim()};break}},"anonymous"),table:[{9:1,10:[1,2]},{1:[3]},{11:3,13:4,19:5,20:6,21:e,22:8,23:9,24:10,25:11,26:12,28:r,29:n,31:i,32:a,40:s,44:l,47:u},{8:[1,20]},t(h,[2,12],{13:4,19:5,20:6,22:8,23:9,24:10,25:11,26:12,11:21,21:e,28:r,29:n,31:i,32:a,40:s,44:l,47:u}),t(f,[2,16],{14:22,15:d,16:p}),t(f,[2,17]),t(f,[2,18]),t(f,[2,19]),t(f,[2,20]),t(f,[2,21]),t(f,[2,22]),t(m,[2,25],{27:[1,25]}),t(f,[2,26]),{19:26,26:12,32:a},{11:27,13:4,19:5,20:6,21:e,22:8,23:9,24:10,25:11,26:12,28:r,29:n,31:i,32:a,40:s,44:l,47:u},{41:[1,28],43:[1,29]},{45:[1,30]},{48:[1,31]},t(g,[2,29],{33:32,36:[1,33],38:[1,34]}),{1:[2,7]},t(h,[2,13]),{26:35,32:a},{32:[2,14]},{17:[1,36]},t(m,[2,24]),{11:37,13:4,14:22,15:d,16:p,19:5,20:6,21:e,22:8,23:9,24:10,25:11,26:12,28:r,29:n,31:i,32:a,40:s,44:l,47:u},{30:[1,38]},{42:[1,39]},{42:[1,40]},{46:[1,41]},{49:[1,42]},t(g,[2,30]),{18:[1,43]},{18:[1,44]},t(m,[2,23]),{18:[1,45]},{30:[1,46]},t(f,[2,28]),t(f,[2,35]),t(f,[2,36]),t(f,[2,37]),t(f,[2,38]),{37:[1,47]},{34:48,35:y},{15:[1,50]},t(f,[2,27]),t(g,[2,33]),{39:[1,51]},{34:52,35:y,39:[2,31]},{32:[2,15]},t(g,[2,34]),{39:[2,32]}],defaultActions:{20:[2,7],23:[2,14],50:[2,15],52:[2,32]},parseError:o(function(_,T){if(T.recoverable)this.trace(_);else{var E=new Error(_);throw E.hash=T,E}},"parseError"),parse:o(function(_){var T=this,E=[0],L=[],S=[null],A=[],I=this.table,D="",k=0,R=0,C=0,O=2,N=1,P=A.slice.call(arguments,1),F=Object.create(this.lexer),B={yy:{}};for(var G in this.yy)Object.prototype.hasOwnProperty.call(this.yy,G)&&(B.yy[G]=this.yy[G]);F.setInput(_,B.yy),B.yy.lexer=F,B.yy.parser=this,typeof F.yylloc>"u"&&(F.yylloc={});var z=F.yylloc;A.push(z);var W=F.options&&F.options.ranges;typeof B.yy.parseError=="function"?this.parseError=B.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Z(se){E.length=E.length-2*se,S.length=S.length-se,A.length=A.length-se}o(Z,"popStack");function j(){var se;return se=L.pop()||F.lex()||N,typeof se!="number"&&(se instanceof Array&&(L=se,se=L.pop()),se=T.symbols_[se]||se),se}o(j,"lex");for(var oe,K,ee,J,H,q,Q={},ae,ue,ce,te;;){if(ee=E[E.length-1],this.defaultActions[ee]?J=this.defaultActions[ee]:((oe===null||typeof oe>"u")&&(oe=j()),J=I[ee]&&I[ee][oe]),typeof J>"u"||!J.length||!J[0]){var Ne="";te=[];for(ae in I[ee])this.terminals_[ae]&&ae>O&&te.push("'"+this.terminals_[ae]+"'");F.showPosition?Ne="Parse error on line "+(k+1)+`: +`+F.showPosition()+` +Expecting `+te.join(", ")+", got '"+(this.terminals_[oe]||oe)+"'":Ne="Parse error on line "+(k+1)+": Unexpected "+(oe==N?"end of input":"'"+(this.terminals_[oe]||oe)+"'"),this.parseError(Ne,{text:F.match,token:this.terminals_[oe]||oe,line:F.yylineno,loc:z,expected:te})}if(J[0]instanceof Array&&J.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ee+", token: "+oe);switch(J[0]){case 1:E.push(oe),S.push(F.yytext),A.push(F.yylloc),E.push(J[1]),oe=null,K?(oe=K,K=null):(R=F.yyleng,D=F.yytext,k=F.yylineno,z=F.yylloc,C>0&&C--);break;case 2:if(ue=this.productions_[J[1]][1],Q.$=S[S.length-ue],Q._$={first_line:A[A.length-(ue||1)].first_line,last_line:A[A.length-1].last_line,first_column:A[A.length-(ue||1)].first_column,last_column:A[A.length-1].last_column},W&&(Q._$.range=[A[A.length-(ue||1)].range[0],A[A.length-1].range[1]]),q=this.performAction.apply(Q,[D,R,k,B.yy,J[1],S,A].concat(P)),typeof q<"u")return q;ue&&(E=E.slice(0,-1*ue*2),S=S.slice(0,-1*ue),A=A.slice(0,-1*ue)),E.push(this.productions_[J[1]][0]),S.push(Q.$),A.push(Q._$),ce=I[E[E.length-2]][E[E.length-1]],E.push(ce);break;case 3:return!0}}return!0},"parse")},x=function(){var w={EOF:1,parseError:o(function(T,E){if(this.yy.parser)this.yy.parser.parseError(T,E);else throw new Error(T)},"parseError"),setInput:o(function(_,T){return this.yy=T||this.yy||{},this._input=_,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var _=this._input[0];this.yytext+=_,this.yyleng++,this.offset++,this.match+=_,this.matched+=_;var T=_.match(/(?:\r\n?|\n).*/g);return T?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),_},"input"),unput:o(function(_){var T=_.length,E=_.split(/(?:\r\n?|\n)/g);this._input=_+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-T),this.offset-=T;var L=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),E.length-1&&(this.yylineno-=E.length-1);var S=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:E?(E.length===L.length?this.yylloc.first_column:0)+L[L.length-E.length].length-E[0].length:this.yylloc.first_column-T},this.options.ranges&&(this.yylloc.range=[S[0],S[0]+this.yyleng-T]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(_){this.unput(this.match.slice(_))},"less"),pastInput:o(function(){var _=this.matched.substr(0,this.matched.length-this.match.length);return(_.length>20?"...":"")+_.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var _=this.match;return _.length<20&&(_+=this._input.substr(0,20-_.length)),(_.substr(0,20)+(_.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var _=this.pastInput(),T=new Array(_.length+1).join("-");return _+this.upcomingInput()+` +`+T+"^"},"showPosition"),test_match:o(function(_,T){var E,L,S;if(this.options.backtrack_lexer&&(S={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(S.yylloc.range=this.yylloc.range.slice(0))),L=_[0].match(/(?:\r\n?|\n).*/g),L&&(this.yylineno+=L.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:L?L[L.length-1].length-L[L.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+_[0].length},this.yytext+=_[0],this.match+=_[0],this.matches=_,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(_[0].length),this.matched+=_[0],E=this.performAction.call(this,this.yy,this,T,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),E)return E;if(this._backtrack){for(var A in S)this[A]=S[A];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var _,T,E,L;this._more||(this.yytext="",this.match="");for(var S=this._currentRules(),A=0;AT[0].length)){if(T=E,L=A,this.options.backtrack_lexer){if(_=this.test_match(E,S[A]),_!==!1)return _;if(this._backtrack){T=!1;continue}else return!1}else if(!this.options.flex)break}return T?(_=this.test_match(T,S[L]),_!==!1?_:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var T=this.next();return T||this.lex()},"lex"),begin:o(function(T){this.conditionStack.push(T)},"begin"),popState:o(function(){var T=this.conditionStack.length-1;return T>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(T){return T=this.conditionStack.length-1-Math.abs(T||0),T>=0?this.conditionStack[T]:"INITIAL"},"topState"),pushState:o(function(T){this.begin(T)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(T,E,L,S){var A=S;switch(L){case 0:return 10;case 1:return T.getLogger().debug("Found space-block"),31;break;case 2:return T.getLogger().debug("Found nl-block"),31;break;case 3:return T.getLogger().debug("Found space-block"),29;break;case 4:T.getLogger().debug(".",E.yytext);break;case 5:T.getLogger().debug("_",E.yytext);break;case 6:return 5;case 7:return E.yytext=-1,28;break;case 8:return E.yytext=E.yytext.replace(/columns\s+/,""),T.getLogger().debug("COLUMNS (LEX)",E.yytext),28;break;case 9:this.pushState("md_string");break;case 10:return"MD_STR";case 11:this.popState();break;case 12:this.pushState("string");break;case 13:T.getLogger().debug("LEX: POPPING STR:",E.yytext),this.popState();break;case 14:return T.getLogger().debug("LEX: STR end:",E.yytext),"STR";break;case 15:return E.yytext=E.yytext.replace(/space\:/,""),T.getLogger().debug("SPACE NUM (LEX)",E.yytext),21;break;case 16:return E.yytext="1",T.getLogger().debug("COLUMNS (LEX)",E.yytext),21;break;case 17:return 43;case 18:return"LINKSTYLE";case 19:return"INTERPOLATE";case 20:return this.pushState("CLASSDEF"),40;break;case 21:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";break;case 22:return this.popState(),this.pushState("CLASSDEFID"),41;break;case 23:return this.popState(),42;break;case 24:return this.pushState("CLASS"),44;break;case 25:return this.popState(),this.pushState("CLASS_STYLE"),45;break;case 26:return this.popState(),46;break;case 27:return this.pushState("STYLE_STMNT"),47;break;case 28:return this.popState(),this.pushState("STYLE_DEFINITION"),48;break;case 29:return this.popState(),49;break;case 30:return this.pushState("acc_title"),"acc_title";break;case 31:return this.popState(),"acc_title_value";break;case 32:return this.pushState("acc_descr"),"acc_descr";break;case 33:return this.popState(),"acc_descr_value";break;case 34:this.pushState("acc_descr_multiline");break;case 35:this.popState();break;case 36:return"acc_descr_multiline_value";case 37:return 30;case 38:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 39:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 40:return this.popState(),T.getLogger().debug("Lex: ))"),"NODE_DEND";break;case 41:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 42:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 43:return this.popState(),T.getLogger().debug("Lex: (-"),"NODE_DEND";break;case 44:return this.popState(),T.getLogger().debug("Lex: -)"),"NODE_DEND";break;case 45:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 46:return this.popState(),T.getLogger().debug("Lex: ]]"),"NODE_DEND";break;case 47:return this.popState(),T.getLogger().debug("Lex: ("),"NODE_DEND";break;case 48:return this.popState(),T.getLogger().debug("Lex: ])"),"NODE_DEND";break;case 49:return this.popState(),T.getLogger().debug("Lex: /]"),"NODE_DEND";break;case 50:return this.popState(),T.getLogger().debug("Lex: /]"),"NODE_DEND";break;case 51:return this.popState(),T.getLogger().debug("Lex: )]"),"NODE_DEND";break;case 52:return this.popState(),T.getLogger().debug("Lex: )"),"NODE_DEND";break;case 53:return this.popState(),T.getLogger().debug("Lex: ]>"),"NODE_DEND";break;case 54:return this.popState(),T.getLogger().debug("Lex: ]"),"NODE_DEND";break;case 55:return T.getLogger().debug("Lexa: -)"),this.pushState("NODE"),36;break;case 56:return T.getLogger().debug("Lexa: (-"),this.pushState("NODE"),36;break;case 57:return T.getLogger().debug("Lexa: ))"),this.pushState("NODE"),36;break;case 58:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 59:return T.getLogger().debug("Lex: ((("),this.pushState("NODE"),36;break;case 60:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 61:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 62:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 63:return T.getLogger().debug("Lexc: >"),this.pushState("NODE"),36;break;case 64:return T.getLogger().debug("Lexa: (["),this.pushState("NODE"),36;break;case 65:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 66:return this.pushState("NODE"),36;break;case 67:return this.pushState("NODE"),36;break;case 68:return this.pushState("NODE"),36;break;case 69:return this.pushState("NODE"),36;break;case 70:return this.pushState("NODE"),36;break;case 71:return this.pushState("NODE"),36;break;case 72:return this.pushState("NODE"),36;break;case 73:return T.getLogger().debug("Lexa: ["),this.pushState("NODE"),36;break;case 74:return this.pushState("BLOCK_ARROW"),T.getLogger().debug("LEX ARR START"),38;break;case 75:return T.getLogger().debug("Lex: NODE_ID",E.yytext),32;break;case 76:return T.getLogger().debug("Lex: EOF",E.yytext),8;break;case 77:this.pushState("md_string");break;case 78:this.pushState("md_string");break;case 79:return"NODE_DESCR";case 80:this.popState();break;case 81:T.getLogger().debug("Lex: Starting string"),this.pushState("string");break;case 82:T.getLogger().debug("LEX ARR: Starting string"),this.pushState("string");break;case 83:return T.getLogger().debug("LEX: NODE_DESCR:",E.yytext),"NODE_DESCR";break;case 84:T.getLogger().debug("LEX POPPING"),this.popState();break;case 85:T.getLogger().debug("Lex: =>BAE"),this.pushState("ARROW_DIR");break;case 86:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (right): dir:",E.yytext),"DIR";break;case 87:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (left):",E.yytext),"DIR";break;case 88:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (x):",E.yytext),"DIR";break;case 89:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (y):",E.yytext),"DIR";break;case 90:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (up):",E.yytext),"DIR";break;case 91:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (down):",E.yytext),"DIR";break;case 92:return E.yytext="]>",T.getLogger().debug("Lex (ARROW_DIR end):",E.yytext),this.popState(),this.popState(),"BLOCK_ARROW_END";break;case 93:return T.getLogger().debug("Lex: LINK","#"+E.yytext+"#"),15;break;case 94:return T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 95:return T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 96:return T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 97:return T.getLogger().debug("Lex: START_LINK",E.yytext),this.pushState("LLABEL"),16;break;case 98:return T.getLogger().debug("Lex: START_LINK",E.yytext),this.pushState("LLABEL"),16;break;case 99:return T.getLogger().debug("Lex: START_LINK",E.yytext),this.pushState("LLABEL"),16;break;case 100:this.pushState("md_string");break;case 101:return T.getLogger().debug("Lex: Starting string"),this.pushState("string"),"LINK_LABEL";break;case 102:return this.popState(),T.getLogger().debug("Lex: LINK","#"+E.yytext+"#"),15;break;case 103:return this.popState(),T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 104:return this.popState(),T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 105:return T.getLogger().debug("Lex: COLON",E.yytext),E.yytext=E.yytext.slice(1),27;break}},"anonymous"),rules:[/^(?:block-beta\b)/,/^(?:block\s+)/,/^(?:block\n+)/,/^(?:block:)/,/^(?:[\s]+)/,/^(?:[\n]+)/,/^(?:((\u000D\u000A)|(\u000A)))/,/^(?:columns\s+auto\b)/,/^(?:columns\s+[\d]+)/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:space[:]\d+)/,/^(?:space\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\s+)/,/^(?:DEFAULT\s+)/,/^(?:\w+\s+)/,/^(?:[^\n]*)/,/^(?:class\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:style\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:end\b\s*)/,/^(?:\(\(\()/,/^(?:\)\)\))/,/^(?:[\)]\))/,/^(?:\}\})/,/^(?:\})/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\()/,/^(?:\]\])/,/^(?:\()/,/^(?:\]\))/,/^(?:\\\])/,/^(?:\/\])/,/^(?:\)\])/,/^(?:[\)])/,/^(?:\]>)/,/^(?:[\]])/,/^(?:-\))/,/^(?:\(-)/,/^(?:\)\))/,/^(?:\))/,/^(?:\(\(\()/,/^(?:\(\()/,/^(?:\{\{)/,/^(?:\{)/,/^(?:>)/,/^(?:\(\[)/,/^(?:\()/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\[\\)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:\[)/,/^(?:<\[)/,/^(?:[^\(\[\n\-\)\{\}\s\<\>:]+)/,/^(?:$)/,/^(?:["][`])/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:\]>\s*\()/,/^(?:,?\s*right\s*)/,/^(?:,?\s*left\s*)/,/^(?:,?\s*x\s*)/,/^(?:,?\s*y\s*)/,/^(?:,?\s*up\s*)/,/^(?:,?\s*down\s*)/,/^(?:\)\s*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*~~[\~]+\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:["][`])/,/^(?:["])/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?::\d+)/],conditions:{STYLE_DEFINITION:{rules:[29],inclusive:!1},STYLE_STMNT:{rules:[28],inclusive:!1},CLASSDEFID:{rules:[23],inclusive:!1},CLASSDEF:{rules:[21,22],inclusive:!1},CLASS_STYLE:{rules:[26],inclusive:!1},CLASS:{rules:[25],inclusive:!1},LLABEL:{rules:[100,101,102,103,104],inclusive:!1},ARROW_DIR:{rules:[86,87,88,89,90,91,92],inclusive:!1},BLOCK_ARROW:{rules:[77,82,85],inclusive:!1},NODE:{rules:[38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,78,81],inclusive:!1},md_string:{rules:[10,11,79,80],inclusive:!1},space:{rules:[],inclusive:!1},string:{rules:[13,14,83,84],inclusive:!1},acc_descr_multiline:{rules:[35,36],inclusive:!1},acc_descr:{rules:[33],inclusive:!1},acc_title:{rules:[31],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,12,15,16,17,18,19,20,24,27,30,32,34,37,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,93,94,95,96,97,98,99,105],inclusive:!0}}};return w}();v.lexer=x;function b(){this.yy={}}return o(b,"Parser"),b.prototype=v,v.Parser=b,new b}();QB.parser=QB;Wye=QB});function Crt(t){switch(Y.debug("typeStr2Type",t),t){case"[]":return"square";case"()":return Y.debug("we have a round"),"round";case"(())":return"circle";case">]":return"rect_left_inv_arrow";case"{}":return"diamond";case"{{}}":return"hexagon";case"([])":return"stadium";case"[[]]":return"subroutine";case"[()]":return"cylinder";case"((()))":return"doublecircle";case"[//]":return"lean_right";case"[\\\\]":return"lean_left";case"[/\\]":return"trapezoid";case"[\\/]":return"inv_trapezoid";case"<[]>":return"block_arrow";default:return"na"}}function Art(t){switch(Y.debug("typeStr2Type",t),t){case"==":return"thick";default:return"normal"}}function _rt(t){switch(t.trim()){case"--x":return"arrow_cross";case"--o":return"arrow_circle";default:return"arrow_point"}}var Jl,JB,ZB,qye,Xye,xrt,Kye,brt,lS,wrt,Trt,krt,Ert,Qye,eF,Lb,Srt,jye,Lrt,Drt,Nrt,Rrt,Mrt,Irt,Ort,Prt,Brt,Frt,zrt,Zye,Jye=M(()=>{"use strict";AL();Za();Vt();ut();fr();Ai();Jl=new Map,JB=[],ZB=new Map,qye="color",Xye="fill",xrt="bgFill",Kye=",",brt=pe(),lS=new Map,wrt=o(t=>qe.sanitizeText(t,brt),"sanitizeText"),Trt=o(function(t,e=""){let r=lS.get(t);r||(r={id:t,styles:[],textStyles:[]},lS.set(t,r)),e?.split(Kye).forEach(n=>{let i=n.replace(/([^;]*);/,"$1").trim();if(RegExp(qye).exec(n)){let s=i.replace(Xye,xrt).replace(qye,Xye);r.textStyles.push(s)}r.styles.push(i)})},"addStyleClass"),krt=o(function(t,e=""){let r=Jl.get(t);e!=null&&(r.styles=e.split(Kye))},"addStyle2Node"),Ert=o(function(t,e){t.split(",").forEach(function(r){let n=Jl.get(r);if(n===void 0){let i=r.trim();n={id:i,type:"na",children:[]},Jl.set(i,n)}n.classes||(n.classes=[]),n.classes.push(e)})},"setCssClass"),Qye=o((t,e)=>{let r=t.flat(),n=[];for(let i of r){if(i.label&&(i.label=wrt(i.label)),i.type==="classDef"){Trt(i.id,i.css);continue}if(i.type==="applyClass"){Ert(i.id,i?.styleClass??"");continue}if(i.type==="applyStyles"){i?.stylesStr&&krt(i.id,i?.stylesStr);continue}if(i.type==="column-setting")e.columns=i.columns??-1;else if(i.type==="edge"){let a=(ZB.get(i.id)??0)+1;ZB.set(i.id,a),i.id=a+"-"+i.id,JB.push(i)}else{i.label||(i.type==="composite"?i.label="":i.label=i.id);let a=Jl.get(i.id);if(a===void 0?Jl.set(i.id,i):(i.type!=="na"&&(a.type=i.type),i.label!==i.id&&(a.label=i.label)),i.children&&Qye(i.children,i),i.type==="space"){let s=i.width??1;for(let l=0;l{Y.debug("Clear called"),Lr(),Lb={id:"root",type:"composite",children:[],columns:-1},Jl=new Map([["root",Lb]]),eF=[],lS=new Map,JB=[],ZB=new Map},"clear");o(Crt,"typeStr2Type");o(Art,"edgeTypeStr2Type");o(_rt,"edgeStrToEdgeData");jye=0,Lrt=o(()=>(jye++,"id-"+Math.random().toString(36).substr(2,12)+"-"+jye),"generateId"),Drt=o(t=>{Lb.children=t,Qye(t,Lb),eF=Lb.children},"setHierarchy"),Nrt=o(t=>{let e=Jl.get(t);return e?e.columns?e.columns:e.children?e.children.length:-1:-1},"getColumns"),Rrt=o(()=>[...Jl.values()],"getBlocksFlat"),Mrt=o(()=>eF||[],"getBlocks"),Irt=o(()=>JB,"getEdges"),Ort=o(t=>Jl.get(t),"getBlock"),Prt=o(t=>{Jl.set(t.id,t)},"setBlock"),Brt=o(()=>console,"getLogger"),Frt=o(function(){return lS},"getClasses"),zrt={getConfig:o(()=>Cr().block,"getConfig"),typeStr2Type:Crt,edgeTypeStr2Type:Art,edgeStrToEdgeData:_rt,getLogger:Brt,getBlocksFlat:Rrt,getBlocks:Mrt,getEdges:Irt,setHierarchy:Drt,getBlock:Ort,setBlock:Prt,getColumns:Nrt,getClasses:Frt,clear:Srt,generateId:Lrt},Zye=zrt});var cS,Grt,eve,tve=M(()=>{"use strict";Lo();cS=o((t,e)=>{let r=ay,n=r(t,"r"),i=r(t,"g"),a=r(t,"b");return Zs(n,i,a,e)},"fade"),Grt=o(t=>`.label { + font-family: ${t.fontFamily}; + color: ${t.nodeTextColor||t.textColor}; } .cluster-label text { - fill: ${i.titleColor}; + fill: ${t.titleColor}; } .cluster-label span,p { - color: ${i.titleColor}; + color: ${t.titleColor}; } .label text,span,p { - fill: ${i.nodeTextColor||i.textColor}; - color: ${i.nodeTextColor||i.textColor}; + fill: ${t.nodeTextColor||t.textColor}; + color: ${t.nodeTextColor||t.textColor}; } .node rect, @@ -1937,8 +2135,8 @@ Expecting `+Qe.join(", ")+", got '"+(this.terminals_[Ne]||Ne)+"'":Dt="Parse erro .node ellipse, .node polygon, .node path { - fill: ${i.mainBkg}; - stroke: ${i.nodeBorder}; + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; stroke-width: 1px; } .flowchart-label text { @@ -1959,52 +2157,52 @@ Expecting `+Qe.join(", ")+", got '"+(this.terminals_[Ne]||Ne)+"'":Dt="Parse erro } .arrowheadPath { - fill: ${i.arrowheadColor}; + fill: ${t.arrowheadColor}; } .edgePath .path { - stroke: ${i.lineColor}; + stroke: ${t.lineColor}; stroke-width: 2.0px; } .flowchart-link { - stroke: ${i.lineColor}; + stroke: ${t.lineColor}; fill: none; } .edgeLabel { - background-color: ${i.edgeLabelBackground}; + background-color: ${t.edgeLabelBackground}; rect { opacity: 0.5; - background-color: ${i.edgeLabelBackground}; - fill: ${i.edgeLabelBackground}; + background-color: ${t.edgeLabelBackground}; + fill: ${t.edgeLabelBackground}; } text-align: center; } /* For html labels only */ .labelBkg { - background-color: ${jJ(i.edgeLabelBackground,.5)}; + background-color: ${cS(t.edgeLabelBackground,.5)}; // background-color: } .node .cluster { - // fill: ${jJ(i.mainBkg,.5)}; - fill: ${jJ(i.clusterBkg,.5)}; - stroke: ${jJ(i.clusterBorder,.2)}; + // fill: ${cS(t.mainBkg,.5)}; + fill: ${cS(t.clusterBkg,.5)}; + stroke: ${cS(t.clusterBorder,.2)}; box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px; stroke-width: 1px; } .cluster text { - fill: ${i.titleColor}; + fill: ${t.titleColor}; } .cluster span,p { - color: ${i.titleColor}; + color: ${t.titleColor}; } /* .cluster div { - color: ${i.titleColor}; + color: ${t.titleColor}; } */ div.mermaidTooltip { @@ -2012,10 +2210,10 @@ Expecting `+Qe.join(", ")+", got '"+(this.terminals_[Ne]||Ne)+"'":Dt="Parse erro text-align: center; max-width: 200px; padding: 2px; - font-family: ${i.fontFamily}; + font-family: ${t.fontFamily}; font-size: 12px; - background: ${i.tertiaryColor}; - border: 1px solid ${i.border2}; + background: ${t.tertiaryColor}; + border: 1px solid ${t.border2}; border-radius: 2px; pointer-events: none; z-index: 100; @@ -2024,6 +2222,93 @@ Expecting `+Qe.join(", ")+", got '"+(this.terminals_[Ne]||Ne)+"'":Dt="Parse erro .flowchartTitleText { text-anchor: middle; font-size: 18px; - fill: ${i.textColor}; + fill: ${t.textColor}; } -`;function NWe(i,s,u=!1){var R,F,j;const d=i;let p="default";(((R=d==null?void 0:d.classes)==null?void 0:R.length)||0)>0&&(p=((d==null?void 0:d.classes)||[]).join(" ")),p=p+" flowchart-label";let v=0,b="",y;switch(d.type){case"round":v=5,b="rect";break;case"composite":v=0,b="composite",y=0;break;case"square":b="rect";break;case"diamond":b="question";break;case"hexagon":b="hexagon";break;case"block_arrow":b="block_arrow";break;case"odd":b="rect_left_inv_arrow";break;case"lean_right":b="lean_right";break;case"lean_left":b="lean_left";break;case"trapezoid":b="trapezoid";break;case"inv_trapezoid":b="inv_trapezoid";break;case"rect_left_inv_arrow":b="rect_left_inv_arrow";break;case"circle":b="circle";break;case"ellipse":b="ellipse";break;case"stadium":b="stadium";break;case"subroutine":b="subroutine";break;case"cylinder":b="cylinder";break;case"group":b="rect";break;case"doublecircle":b="doublecircle";break;default:b="rect"}const T=om((d==null?void 0:d.styles)||[]),_=d.label,A=d.size||{width:0,height:0,x:0,y:0};return{labelStyle:T.labelStyle,shape:b,labelText:_,rx:v,ry:v,class:p,style:T.style,id:d.id,directions:d.directions,width:A.width,height:A.height,x:A.x,y:A.y,positioned:u,intersect:void 0,type:d.type,padding:y??(((j=(F=Vh())==null?void 0:F.block)==null?void 0:j.padding)||0)}}async function kcn(i,s,u){const d=NWe(s,u,!1);if(d.type==="group")return;const p=await tJ(i,d),v=p.node().getBBox(),b=u.getBlock(d.id);b.size={width:v.width,height:v.height,x:0,y:0,node:p},u.setBlock(b),p.remove()}async function Ecn(i,s,u){const d=NWe(s,u,!0);u.getBlock(d.id).type!=="space"&&(await tJ(i,d),s.intersect=d==null?void 0:d.intersect,$me(d))}async function dwe(i,s,u,d){for(const p of s)await d(i,p,u),p.children&&await dwe(i,p.children,u,d)}async function Tcn(i,s,u){await dwe(i,s,u,kcn)}async function Ccn(i,s,u){await dwe(i,s,u,Ecn)}async function Scn(i,s,u,d,p){const v=new B0({multigraph:!0,compound:!0});v.setGraph({rankdir:"TB",nodesep:10,ranksep:10,marginx:8,marginy:8});for(const b of u)b.size&&v.setNode(b.id,{width:b.size.width,height:b.size.height,intersect:b.intersect});for(const b of s)if(b.start&&b.end){const y=d.getBlock(b.start),T=d.getBlock(b.end);if(y!=null&&y.size&&(T!=null&&T.size)){const _=y.size,A=T.size,P=[{x:_.x,y:_.y},{x:_.x+(A.x-_.x)/2,y:_.y+(A.y-_.y)/2},{x:A.x,y:A.y}];await IUe(i,{v:b.start,w:b.end,name:b.id},{...b,arrowTypeEnd:b.arrowTypeEnd,arrowTypeStart:b.arrowTypeStart,points:P,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"},void 0,"block",v,p),b.label&&(await zme(i,{...b,label:b.label,labelStyle:"stroke: #333; stroke-width: 1.5px;fill:none;",arrowTypeEnd:b.arrowTypeEnd,arrowTypeStart:b.arrowTypeStart,points:P,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"}),await MUe({...b,x:P[1].x,y:P[1].y},{originalPath:P}))}}}const e0=((RWe=(FWe=qt())==null?void 0:FWe.block)==null?void 0:RWe.padding)||8;function _cn(i,s){if(i===0||!Number.isInteger(i))throw new Error("Columns must be an integer !== 0.");if(s<0||!Number.isInteger(s))throw new Error("Position must be a non-negative integer."+s);if(i<0)return{px:s,py:0};if(i===1)return{px:0,py:s};const u=s%i,d=Math.floor(s/i);return{px:u,py:d}}const Acn=i=>{let s=0,u=0;for(const d of i.children){const{width:p,height:v,x:b,y}=d.size||{width:0,height:0,x:0,y:0};Xe.debug("getMaxChildSize abc95 child:",d.id,"width:",p,"height:",v,"x:",b,"y:",y,d.type),d.type!=="space"&&(p>s&&(s=p/(i.widthInColumns||1)),v>u&&(u=v))}return{width:s,height:u}};function gwe(i,s,u=0,d=0){var b,y,T,_,A,P,R,F,j,K,ee;Xe.debug("setBlockSizes abc95 (start)",i.id,(b=i==null?void 0:i.size)==null?void 0:b.x,"block width =",i==null?void 0:i.size,"sieblingWidth",u),(y=i==null?void 0:i.size)!=null&&y.width||(i.size={width:u,height:d,x:0,y:0});let p=0,v=0;if(((T=i.children)==null?void 0:T.length)>0){for(const de of i.children)gwe(de,s);const ie=Acn(i);p=ie.width,v=ie.height,Xe.debug("setBlockSizes abc95 maxWidth of",i.id,":s children is ",p,v);for(const de of i.children)de.size&&(Xe.debug(`abc95 Setting size of children of ${i.id} id=${de.id} ${p} ${v} ${de.size}`),de.size.width=p*(de.widthInColumns||1)+e0*((de.widthInColumns||1)-1),de.size.height=v,de.size.x=0,de.size.y=0,Xe.debug(`abc95 updating size of ${i.id} children child:${de.id} maxWidth:${p} maxHeight:${v}`));for(const de of i.children)gwe(de,s,p,v);const oe=i.columns||-1;let pe=0;for(const de of i.children)pe+=de.widthInColumns||1;let be=i.children.length;oe>0&&oe0?Math.min(i.children.length,oe):i.children.length;if(de>0){const X=(ne-de*e0-e0)/de;Xe.debug("abc95 (growing to fit) width",i.id,ne,(R=i.size)==null?void 0:R.width,X);for(const ge of i.children)ge.size&&(ge.size.width=X)}}i.size={width:ne,height:se,x:0,y:0}}Xe.debug("setBlockSizes abc94 (done)",i.id,(F=i==null?void 0:i.size)==null?void 0:F.x,(j=i==null?void 0:i.size)==null?void 0:j.width,(K=i==null?void 0:i.size)==null?void 0:K.y,(ee=i==null?void 0:i.size)==null?void 0:ee.height)}function PWe(i,s){var d,p,v,b,y,T,_,A,P,R,F,j,K,ee,ie,oe,pe;Xe.debug(`abc85 layout blocks (=>layoutBlocks) ${i.id} x: ${(d=i==null?void 0:i.size)==null?void 0:d.x} y: ${(p=i==null?void 0:i.size)==null?void 0:p.y} width: ${(v=i==null?void 0:i.size)==null?void 0:v.width}`);const u=i.columns||-1;if(Xe.debug("layoutBlocks columns abc95",i.id,"=>",u,i),i.children&&i.children.length>0){const be=((y=(b=i==null?void 0:i.children[0])==null?void 0:b.size)==null?void 0:y.width)||0,ae=i.children.length*be+(i.children.length-1)*e0;Xe.debug("widthOfChildren 88",ae,"posX");let ne=0;Xe.debug("abc91 block?.size?.x",i.id,(T=i==null?void 0:i.size)==null?void 0:T.x);let se=(_=i==null?void 0:i.size)!=null&&_.x?((A=i==null?void 0:i.size)==null?void 0:A.x)+(-((P=i==null?void 0:i.size)==null?void 0:P.width)/2||0):-e0,de=0;for(const X of i.children){const ge=i;if(!X.size)continue;const{width:W,height:xe}=X.size,{px:U,py:Fe}=_cn(u,ne);if(Fe!=de&&(de=Fe,se=(R=i==null?void 0:i.size)!=null&&R.x?((F=i==null?void 0:i.size)==null?void 0:F.x)+(-((j=i==null?void 0:i.size)==null?void 0:j.width)/2||0):-e0,Xe.debug("New row in layout for block",i.id," and child ",X.id,de)),Xe.debug(`abc89 layout blocks (child) id: ${X.id} Pos: ${ne} (px, py) ${U},${Fe} (${(K=ge==null?void 0:ge.size)==null?void 0:K.x},${(ee=ge==null?void 0:ge.size)==null?void 0:ee.y}) parent: ${ge.id} width: ${W}${e0}`),ge.size){const Pe=W/2;X.size.x=se+e0+Pe,Xe.debug(`abc91 layout blocks (calc) px, pyid:${X.id} startingPos=X${se} new startingPosX${X.size.x} ${Pe} padding=${e0} width=${W} halfWidth=${Pe} => x:${X.size.x} y:${X.size.y} ${X.widthInColumns} (width * (child?.w || 1)) / 2 ${W*((X==null?void 0:X.widthInColumns)||1)/2}`),se=X.size.x+Pe,X.size.y=ge.size.y-ge.size.height/2+Fe*(xe+e0)+xe/2+e0,Xe.debug(`abc88 layout blocks (calc) px, pyid:${X.id}startingPosX${se}${e0}${Pe}=>x:${X.size.x}y:${X.size.y}${X.widthInColumns}(width * (child?.w || 1)) / 2${W*((X==null?void 0:X.widthInColumns)||1)/2}`)}X.children&&PWe(X),ne+=(X==null?void 0:X.widthInColumns)||1,Xe.debug("abc88 columnsPos",X,ne)}}Xe.debug(`layout blocks (<==layoutBlocks) ${i.id} x: ${(ie=i==null?void 0:i.size)==null?void 0:ie.x} y: ${(oe=i==null?void 0:i.size)==null?void 0:oe.y} width: ${(pe=i==null?void 0:i.size)==null?void 0:pe.width}`)}function BWe(i,{minX:s,minY:u,maxX:d,maxY:p}={minX:0,minY:0,maxX:0,maxY:0}){if(i.size&&i.id!=="root"){const{x:v,y:b,width:y,height:T}=i.size;v-y/2d&&(d=v+y/2),b+T/2>p&&(p=b+T/2)}if(i.children)for(const v of i.children)({minX:s,minY:u,maxX:d,maxY:p}=BWe(v,{minX:s,minY:u,maxX:d,maxY:p}));return{minX:s,minY:u,maxX:d,maxY:p}}function Lcn(i){const s=i.getBlock("root");if(!s)return;gwe(s,i,0,0),PWe(s),Xe.debug("getBlocks",JSON.stringify(s,null,2));const{minX:u,minY:d,maxX:p,maxY:v}=BWe(s),b=v-d,y=p-u;return{x:u,y:d,width:y,height:b}}const Mcn=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:ucn,db:ycn,renderer:{draw:async function(i,s,u,d){const{securityLevel:p,block:v}=Vh(),b=d.db;let y;p==="sandbox"&&(y=Ir("#i"+s));const T=Ir(p==="sandbox"?y.nodes()[0].contentDocument.body:"body"),_=p==="sandbox"?T.select(`[id="${s}"]`):Ir(`[id="${s}"]`);Sme(_,["point","circle","cross"],d.type,s);const P=b.getBlocks(),R=b.getBlocksFlat(),F=b.getEdges(),j=_.insert("g").attr("class","block");await Tcn(j,P,b);const K=Lcn(b);if(await Ccn(j,P,b),await Scn(j,F,R,b,s),K){const ee=K,ie=Math.max(1,Math.round(.125*(ee.width/ee.height))),oe=ee.height+ie+10,pe=ee.width+10,{useMaxWidth:be}=v;Ng(_,oe,pe,!!be),Xe.debug("Here Bounds",K,ee),_.attr("viewBox",`${ee.x-5} ${ee.y-5} ${ee.width+10} ${ee.height+10}`)}_F(zFe)},getClasses:function(i,s){return s.db.getClasses()}},styles:xcn}},Symbol.toStringTag,{value:"Module"}));return um}); +`,"getStyles"),eve=Grt});var $rt,Vrt,Urt,Hrt,Wrt,Yrt,qrt,Xrt,jrt,Krt,Qrt,rve,nve=M(()=>{"use strict";ut();$rt=o((t,e,r,n)=>{e.forEach(i=>{Qrt[i](t,r,n)})},"insertMarkers"),Vrt=o((t,e,r)=>{Y.trace("Making markers for ",r),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionStart").attr("class","marker extension "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},"extension"),Urt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionStart").attr("class","marker composition "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"composition"),Hrt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"aggregation"),Wrt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"dependency"),Yrt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},"lollipop"),qrt=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",6).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"point"),Xrt=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"circle"),jrt=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},"cross"),Krt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"barb"),Qrt={extension:Vrt,composition:Urt,aggregation:Hrt,dependency:Wrt,lollipop:Yrt,point:qrt,circle:Xrt,cross:jrt,barb:Krt},rve=$rt});function Zrt(t,e){if(t===0||!Number.isInteger(t))throw new Error("Columns must be an integer !== 0.");if(e<0||!Number.isInteger(e))throw new Error("Position must be a non-negative integer."+e);if(t<0)return{px:e,py:0};if(t===1)return{px:0,py:e};let r=e%t,n=Math.floor(e/t);return{px:r,py:n}}function tF(t,e,r=0,n=0){Y.debug("setBlockSizes abc95 (start)",t.id,t?.size?.x,"block width =",t?.size,"sieblingWidth",r),t?.size?.width||(t.size={width:r,height:n,x:0,y:0});let i=0,a=0;if(t.children?.length>0){for(let m of t.children)tF(m,e);let s=Jrt(t);i=s.width,a=s.height,Y.debug("setBlockSizes abc95 maxWidth of",t.id,":s children is ",i,a);for(let m of t.children)m.size&&(Y.debug(`abc95 Setting size of children of ${t.id} id=${m.id} ${i} ${a} ${JSON.stringify(m.size)}`),m.size.width=i*(m.widthInColumns??1)+Ti*((m.widthInColumns??1)-1),m.size.height=a,m.size.x=0,m.size.y=0,Y.debug(`abc95 updating size of ${t.id} children child:${m.id} maxWidth:${i} maxHeight:${a}`));for(let m of t.children)tF(m,e,i,a);let l=t.columns??-1,u=0;for(let m of t.children)u+=m.widthInColumns??1;let h=t.children.length;l>0&&l0?Math.min(t.children.length,l):t.children.length;if(m>0){let g=(d-m*Ti-Ti)/m;Y.debug("abc95 (growing to fit) width",t.id,d,t.size?.width,g);for(let y of t.children)y.size&&(y.size.width=g)}}t.size={width:d,height:p,x:0,y:0}}Y.debug("setBlockSizes abc94 (done)",t.id,t?.size?.x,t?.size?.width,t?.size?.y,t?.size?.height)}function ive(t,e){Y.debug(`abc85 layout blocks (=>layoutBlocks) ${t.id} x: ${t?.size?.x} y: ${t?.size?.y} width: ${t?.size?.width}`);let r=t.columns??-1;if(Y.debug("layoutBlocks columns abc95",t.id,"=>",r,t),t.children&&t.children.length>0){let n=t?.children[0]?.size?.width??0,i=t.children.length*n+(t.children.length-1)*Ti;Y.debug("widthOfChildren 88",i,"posX");let a=0;Y.debug("abc91 block?.size?.x",t.id,t?.size?.x);let s=t?.size?.x?t?.size?.x+(-t?.size?.width/2||0):-Ti,l=0;for(let u of t.children){let h=t;if(!u.size)continue;let{width:f,height:d}=u.size,{px:p,py:m}=Zrt(r,a);if(m!=l&&(l=m,s=t?.size?.x?t?.size?.x+(-t?.size?.width/2||0):-Ti,Y.debug("New row in layout for block",t.id," and child ",u.id,l)),Y.debug(`abc89 layout blocks (child) id: ${u.id} Pos: ${a} (px, py) ${p},${m} (${h?.size?.x},${h?.size?.y}) parent: ${h.id} width: ${f}${Ti}`),h.size){let g=f/2;u.size.x=s+Ti+g,Y.debug(`abc91 layout blocks (calc) px, pyid:${u.id} startingPos=X${s} new startingPosX${u.size.x} ${g} padding=${Ti} width=${f} halfWidth=${g} => x:${u.size.x} y:${u.size.y} ${u.widthInColumns} (width * (child?.w || 1)) / 2 ${f*(u?.widthInColumns??1)/2}`),s=u.size.x+g,u.size.y=h.size.y-h.size.height/2+m*(d+Ti)+d/2+Ti,Y.debug(`abc88 layout blocks (calc) px, pyid:${u.id}startingPosX${s}${Ti}${g}=>x:${u.size.x}y:${u.size.y}${u.widthInColumns}(width * (child?.w || 1)) / 2${f*(u?.widthInColumns??1)/2}`)}u.children&&ive(u,e),a+=u?.widthInColumns??1,Y.debug("abc88 columnsPos",u,a)}}Y.debug(`layout blocks (<==layoutBlocks) ${t.id} x: ${t?.size?.x} y: ${t?.size?.y} width: ${t?.size?.width}`)}function ave(t,{minX:e,minY:r,maxX:n,maxY:i}={minX:0,minY:0,maxX:0,maxY:0}){if(t.size&&t.id!=="root"){let{x:a,y:s,width:l,height:u}=t.size;a-l/2n&&(n=a+l/2),s+u/2>i&&(i=s+u/2)}if(t.children)for(let a of t.children)({minX:e,minY:r,maxX:n,maxY:i}=ave(a,{minX:e,minY:r,maxX:n,maxY:i}));return{minX:e,minY:r,maxX:n,maxY:i}}function sve(t){let e=t.getBlock("root");if(!e)return;tF(e,t,0,0),ive(e,t),Y.debug("getBlocks",JSON.stringify(e,null,2));let{minX:r,minY:n,maxX:i,maxY:a}=ave(e),s=a-n,l=i-r;return{x:r,y:n,width:l,height:s}}var Ti,Jrt,ove=M(()=>{"use strict";ut();Vt();Ti=pe()?.block?.padding??8;o(Zrt,"calculateBlockPosition");Jrt=o(t=>{let e=0,r=0;for(let n of t.children){let{width:i,height:a,x:s,y:l}=n.size??{width:0,height:0,x:0,y:0};Y.debug("getMaxChildSize abc95 child:",n.id,"width:",i,"height:",a,"x:",s,"y:",l,n.type),n.type!=="space"&&(i>e&&(e=i/(t.widthInColumns??1)),a>r&&(r=a))}return{width:e,height:r}},"getMaxChildSize");o(tF,"setBlockSizes");o(ive,"layoutBlocks");o(ave,"findBounds");o(sve,"layout")});function lve(t,e){e&&t.attr("style",e)}function ent(t){let e=Ve(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),r=e.append("xhtml:div"),n=t.label,i=t.isNode?"nodeLabel":"edgeLabel",a=r.append("span");return a.html(n),lve(a,t.labelStyle),a.attr("class",i),lve(r,t.labelStyle),r.style("display","inline-block"),r.style("white-space","nowrap"),r.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}var tnt,gs,uS=M(()=>{"use strict";pr();ut();Vt();fr();hr();Pl();o(lve,"applyStyle");o(ent,"addHtmlLabel");tnt=o((t,e,r,n)=>{let i=t||"";if(typeof i=="object"&&(i=i[0]),xr(pe().flowchart.htmlLabels)){i=i.replace(/\\n|\n/g,"
    "),Y.debug("vertexText"+i);let a={isNode:n,label:w9(Ma(i)),labelStyle:e.replace("fill:","color:")};return ent(a)}else{let a=document.createElementNS("http://www.w3.org/2000/svg","text");a.setAttribute("style",e.replace("color:","fill:"));let s=[];typeof i=="string"?s=i.split(/\\n|\n|/gi):Array.isArray(i)?s=i:s=[];for(let l of s){let u=document.createElementNS("http://www.w3.org/2000/svg","tspan");u.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),u.setAttribute("dy","1em"),u.setAttribute("x","0"),r?u.setAttribute("class","title-row"):u.setAttribute("class","row"),u.textContent=l.trim(),a.appendChild(u)}return a}},"createLabel"),gs=tnt});var uve,rnt,cve,hve=M(()=>{"use strict";ut();uve=o((t,e,r,n,i)=>{e.arrowTypeStart&&cve(t,"start",e.arrowTypeStart,r,n,i),e.arrowTypeEnd&&cve(t,"end",e.arrowTypeEnd,r,n,i)},"addEdgeMarkers"),rnt={arrow_cross:"cross",arrow_point:"point",arrow_barb:"barb",arrow_circle:"circle",aggregation:"aggregation",extension:"extension",composition:"composition",dependency:"dependency",lollipop:"lollipop"},cve=o((t,e,r,n,i,a)=>{let s=rnt[r];if(!s){Y.warn(`Unknown arrow type: ${r}`);return}let l=e==="start"?"Start":"End";t.attr(`marker-${e}`,`url(${n}#${i}_${a}-${s}${l})`)},"addEdgeMarker")});function hS(t,e){pe().flowchart.htmlLabels&&t&&(t.style.width=e.length*9+"px",t.style.height="12px")}var rF,Xa,dve,pve,nnt,int,fve,mve,gve=M(()=>{"use strict";ut();uS();Pl();pr();Vt();hr();fr();uL();$v();hve();rF={},Xa={},dve=o((t,e)=>{let r=pe(),n=xr(r.flowchart.htmlLabels),i=e.labelType==="markdown"?Li(t,e.label,{style:e.labelStyle,useHtmlLabels:n,addSvgBackground:!0},r):gs(e.label,e.labelStyle),a=t.insert("g").attr("class","edgeLabel"),s=a.insert("g").attr("class","label");s.node().appendChild(i);let l=i.getBBox();if(n){let h=i.children[0],f=Ve(i);l=h.getBoundingClientRect(),f.attr("width",l.width),f.attr("height",l.height)}s.attr("transform","translate("+-l.width/2+", "+-l.height/2+")"),rF[e.id]=a,e.width=l.width,e.height=l.height;let u;if(e.startLabelLeft){let h=gs(e.startLabelLeft,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),Xa[e.id]||(Xa[e.id]={}),Xa[e.id].startLeft=f,hS(u,e.startLabelLeft)}if(e.startLabelRight){let h=gs(e.startLabelRight,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=f.node().appendChild(h),d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),Xa[e.id]||(Xa[e.id]={}),Xa[e.id].startRight=f,hS(u,e.startLabelRight)}if(e.endLabelLeft){let h=gs(e.endLabelLeft,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),f.node().appendChild(h),Xa[e.id]||(Xa[e.id]={}),Xa[e.id].endLeft=f,hS(u,e.endLabelLeft)}if(e.endLabelRight){let h=gs(e.endLabelRight,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),f.node().appendChild(h),Xa[e.id]||(Xa[e.id]={}),Xa[e.id].endRight=f,hS(u,e.endLabelRight)}return i},"insertEdgeLabel");o(hS,"setTerminalWidth");pve=o((t,e)=>{Y.debug("Moving label abc88 ",t.id,t.label,rF[t.id],e);let r=e.updatedPath?e.updatedPath:e.originalPath,n=pe(),{subGraphTitleTotalMargin:i}=Fu(n);if(t.label){let a=rF[t.id],s=t.x,l=t.y;if(r){let u=Ut.calcLabelPosition(r);Y.debug("Moving label "+t.label+" from (",s,",",l,") to (",u.x,",",u.y,") abc88"),e.updatedPath&&(s=u.x,l=u.y)}a.attr("transform",`translate(${s}, ${l+i/2})`)}if(t.startLabelLeft){let a=Xa[t.id].startLeft,s=t.x,l=t.y;if(r){let u=Ut.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.startLabelRight){let a=Xa[t.id].startRight,s=t.x,l=t.y;if(r){let u=Ut.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelLeft){let a=Xa[t.id].endLeft,s=t.x,l=t.y;if(r){let u=Ut.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelRight){let a=Xa[t.id].endRight,s=t.x,l=t.y;if(r){let u=Ut.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}},"positionEdgeLabel"),nnt=o((t,e)=>{let r=t.x,n=t.y,i=Math.abs(e.x-r),a=Math.abs(e.y-n),s=t.width/2,l=t.height/2;return i>=s||a>=l},"outsideNode"),int=o((t,e,r)=>{Y.debug(`intersection calc abc89: + outsidePoint: ${JSON.stringify(e)} + insidePoint : ${JSON.stringify(r)} + node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);let n=t.x,i=t.y,a=Math.abs(n-r.x),s=t.width/2,l=r.xMath.abs(n-e.x)*u){let d=r.y{Y.debug("abc88 cutPathAtIntersect",t,e);let r=[],n=t[0],i=!1;return t.forEach(a=>{if(!nnt(e,a)&&!i){let s=int(e,n,a),l=!1;r.forEach(u=>{l=l||u.x===s.x&&u.y===s.y}),r.some(u=>u.x===s.x&&u.y===s.y)||r.push(s),i=!0}else n=a,i||r.push(a)}),r},"cutPathAtIntersect"),mve=o(function(t,e,r,n,i,a,s){let l=r.points;Y.debug("abc88 InsertEdge: edge=",r,"e=",e);let u=!1,h=a.node(e.v);var f=a.node(e.w);f?.intersect&&h?.intersect&&(l=l.slice(1,r.points.length-1),l.unshift(h.intersect(l[0])),l.push(f.intersect(l[l.length-1]))),r.toCluster&&(Y.debug("to cluster abc88",n[r.toCluster]),l=fve(r.points,n[r.toCluster].node),u=!0),r.fromCluster&&(Y.debug("from cluster abc88",n[r.fromCluster]),l=fve(l.reverse(),n[r.fromCluster].node).reverse(),u=!0);let d=l.filter(_=>!Number.isNaN(_.y)),p=Po;r.curve&&(i==="graph"||i==="flowchart")&&(p=r.curve);let{x:m,y:g}=uw(r),y=ns().x(m).y(g).curve(p),v;switch(r.thickness){case"normal":v="edge-thickness-normal";break;case"thick":v="edge-thickness-thick";break;case"invisible":v="edge-thickness-thick";break;default:v=""}switch(r.pattern){case"solid":v+=" edge-pattern-solid";break;case"dotted":v+=" edge-pattern-dotted";break;case"dashed":v+=" edge-pattern-dashed";break}let x=t.append("path").attr("d",y(d)).attr("id",r.id).attr("class"," "+v+(r.classes?" "+r.classes:"")).attr("style",r.style),b="";(pe().flowchart.arrowMarkerAbsolute||pe().state.arrowMarkerAbsolute)&&(b=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,b=b.replace(/\(/g,"\\("),b=b.replace(/\)/g,"\\)")),uve(x,r,b,s,i);let w={};return u&&(w.updatedPath=l),w.originalPath=r.points,w},"insertEdge")});var ant,yve,vve=M(()=>{"use strict";ant=o(t=>{let e=new Set;for(let r of t)switch(r){case"x":e.add("right"),e.add("left");break;case"y":e.add("up"),e.add("down");break;default:e.add(r);break}return e},"expandAndDeduplicateDirections"),yve=o((t,e,r)=>{let n=ant(t),i=2,a=e.height+2*r.padding,s=a/i,l=e.width+2*s+r.padding,u=r.padding/2;return n.has("right")&&n.has("left")&&n.has("up")&&n.has("down")?[{x:0,y:0},{x:s,y:0},{x:l/2,y:2*u},{x:l-s,y:0},{x:l,y:0},{x:l,y:-a/3},{x:l+2*u,y:-a/2},{x:l,y:-2*a/3},{x:l,y:-a},{x:l-s,y:-a},{x:l/2,y:-a-2*u},{x:s,y:-a},{x:0,y:-a},{x:0,y:-2*a/3},{x:-2*u,y:-a/2},{x:0,y:-a/3}]:n.has("right")&&n.has("left")&&n.has("up")?[{x:s,y:0},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:s,y:-a},{x:0,y:-a/2}]:n.has("right")&&n.has("left")&&n.has("down")?[{x:0,y:0},{x:s,y:-a},{x:l-s,y:-a},{x:l,y:0}]:n.has("right")&&n.has("up")&&n.has("down")?[{x:0,y:0},{x:l,y:-s},{x:l,y:-a+s},{x:0,y:-a}]:n.has("left")&&n.has("up")&&n.has("down")?[{x:l,y:0},{x:0,y:-s},{x:0,y:-a+s},{x:l,y:-a}]:n.has("right")&&n.has("left")?[{x:s,y:0},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a},{x:0,y:-a/2}]:n.has("up")&&n.has("down")?[{x:l/2,y:0},{x:0,y:-u},{x:s,y:-u},{x:s,y:-a+u},{x:0,y:-a+u},{x:l/2,y:-a},{x:l,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u},{x:l,y:-u}]:n.has("right")&&n.has("up")?[{x:0,y:0},{x:l,y:-s},{x:0,y:-a}]:n.has("right")&&n.has("down")?[{x:0,y:0},{x:l,y:0},{x:0,y:-a}]:n.has("left")&&n.has("up")?[{x:l,y:0},{x:0,y:-s},{x:l,y:-a}]:n.has("left")&&n.has("down")?[{x:l,y:0},{x:0,y:0},{x:l,y:-a}]:n.has("right")?[{x:s,y:-u},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a+u}]:n.has("left")?[{x:s,y:0},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a},{x:0,y:-a/2}]:n.has("up")?[{x:s,y:-u},{x:s,y:-a+u},{x:0,y:-a+u},{x:l/2,y:-a},{x:l,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u}]:n.has("down")?[{x:l/2,y:0},{x:0,y:-u},{x:s,y:-u},{x:s,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u},{x:l,y:-u}]:[{x:0,y:0}]},"getArrowPoints")});function snt(t,e){return t.intersect(e)}var xve,bve=M(()=>{"use strict";o(snt,"intersectNode");xve=snt});function ont(t,e,r,n){var i=t.x,a=t.y,s=i-n.x,l=a-n.y,u=Math.sqrt(e*e*l*l+r*r*s*s),h=Math.abs(e*r*s/u);n.x{"use strict";o(ont,"intersectEllipse");fS=ont});function lnt(t,e,r){return fS(t,e,e,r)}var wve,Tve=M(()=>{"use strict";nF();o(lnt,"intersectCircle");wve=lnt});function cnt(t,e,r,n){var i,a,s,l,u,h,f,d,p,m,g,y,v,x,b;if(i=e.y-t.y,s=t.x-e.x,u=e.x*t.y-t.x*e.y,p=i*r.x+s*r.y+u,m=i*n.x+s*n.y+u,!(p!==0&&m!==0&&kve(p,m))&&(a=n.y-r.y,l=r.x-n.x,h=n.x*r.y-r.x*n.y,f=a*t.x+l*t.y+h,d=a*e.x+l*e.y+h,!(f!==0&&d!==0&&kve(f,d))&&(g=i*l-a*s,g!==0)))return y=Math.abs(g/2),v=s*h-l*u,x=v<0?(v-y)/g:(v+y)/g,v=a*u-i*h,b=v<0?(v-y)/g:(v+y)/g,{x,y:b}}function kve(t,e){return t*e>0}var Eve,Sve=M(()=>{"use strict";o(cnt,"intersectLine");o(kve,"sameSign");Eve=cnt});function unt(t,e,r){var n=t.x,i=t.y,a=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof e.forEach=="function"?e.forEach(function(g){s=Math.min(s,g.x),l=Math.min(l,g.y)}):(s=Math.min(s,e.x),l=Math.min(l,e.y));for(var u=n-t.width/2-s,h=i-t.height/2-l,f=0;f1&&a.sort(function(g,y){var v=g.x-r.x,x=g.y-r.y,b=Math.sqrt(v*v+x*x),w=y.x-r.x,_=y.y-r.y,T=Math.sqrt(w*w+_*_);return b{"use strict";Sve();Cve=unt;o(unt,"intersectPolygon")});var hnt,_ve,Lve=M(()=>{"use strict";hnt=o((t,e)=>{var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2,u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=a===0?0:l*i/a,h=l):(i<0&&(s=-s),u=s,h=i===0?0:s*a/i),{x:r+u,y:n+h}},"intersectRect"),_ve=hnt});var In,iF=M(()=>{"use strict";bve();Tve();nF();Ave();Lve();In={node:xve,circle:wve,ellipse:fS,polygon:Cve,rect:_ve}});function ec(t,e,r,n){return t.insert("polygon",":first-child").attr("points",n.map(function(i){return i.x+","+i.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+r/2+")")}var Ri,jn,aF=M(()=>{"use strict";uS();Pl();Vt();pr();fr();hr();Ri=o(async(t,e,r,n)=>{let i=pe(),a,s=e.useHtmlLabels||xr(i.flowchart.htmlLabels);r?a=r:a="node default";let l=t.insert("g").attr("class",a).attr("id",e.domId||e.id),u=l.insert("g").attr("class","label").attr("style",e.labelStyle),h;e.labelText===void 0?h="":h=typeof e.labelText=="string"?e.labelText:e.labelText[0];let f=u.node(),d;e.labelType==="markdown"?d=Li(u,kr(Ma(h),i),{useHtmlLabels:s,width:e.width||i.flowchart.wrappingWidth,classes:"markdown-node-label"},i):d=f.appendChild(gs(kr(Ma(h),i),e.labelStyle,!1,n));let p=d.getBBox(),m=e.padding/2;if(xr(i.flowchart.htmlLabels)){let g=d.children[0],y=Ve(d),v=g.getElementsByTagName("img");if(v){let x=h.replace(/]*>/g,"").trim()==="";await Promise.all([...v].map(b=>new Promise(w=>{function _(){if(b.style.display="flex",b.style.flexDirection="column",x){let T=i.fontSize?i.fontSize:window.getComputedStyle(document.body).fontSize,L=parseInt(T,10)*5+"px";b.style.minWidth=L,b.style.maxWidth=L}else b.style.width="100%";w(b)}o(_,"setupImage"),setTimeout(()=>{b.complete&&_()}),b.addEventListener("error",_),b.addEventListener("load",_)})))}p=g.getBoundingClientRect(),y.attr("width",p.width),y.attr("height",p.height)}return s?u.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"):u.attr("transform","translate(0, "+-p.height/2+")"),e.centerLabel&&u.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),u.insert("rect",":first-child"),{shapeSvg:l,bbox:p,halfPadding:m,label:u}},"labelHelper"),jn=o((t,e)=>{let r=e.node().getBBox();t.width=r.width,t.height=r.height},"updateNodeBounds");o(ec,"insertPolygonShape")});var fnt,Dve,Nve=M(()=>{"use strict";aF();ut();Vt();iF();fnt=o(async(t,e)=>{e.useHtmlLabels||pe().flowchart.htmlLabels||(e.centerLabel=!0);let{shapeSvg:n,bbox:i,halfPadding:a}=await Ri(t,e,"node "+e.classes,!0);Y.info("Classes = ",e.classes);let s=n.insert("rect",":first-child");return s.attr("rx",e.rx).attr("ry",e.ry).attr("x",-i.width/2-a).attr("y",-i.height/2-a).attr("width",i.width+e.padding).attr("height",i.height+e.padding),jn(e,s),e.intersect=function(l){return In.rect(e,l)},n},"note"),Dve=fnt});function sF(t,e,r,n){let i=[],a=o(l=>{i.push(l,0)},"addBorder"),s=o(l=>{i.push(0,l)},"skipBorder");e.includes("t")?(Y.debug("add top border"),a(r)):s(r),e.includes("r")?(Y.debug("add right border"),a(n)):s(n),e.includes("b")?(Y.debug("add bottom border"),a(r)):s(r),e.includes("l")?(Y.debug("add left border"),a(n)):s(n),t.attr("stroke-dasharray",i.join(" "))}var Rve,ko,Mve,dnt,pnt,mnt,gnt,ynt,vnt,xnt,bnt,wnt,Tnt,knt,Ent,Snt,Cnt,Ant,_nt,Lnt,Dnt,Nnt,Ive,Rnt,Mnt,Ove,dS,oF,Pve,Bve=M(()=>{"use strict";pr();Vt();fr();ut();vve();uS();iF();Nve();aF();Rve=o(t=>t?" "+t:"","formatClass"),ko=o((t,e)=>`${e||"node default"}${Rve(t.classes)} ${Rve(t.class)}`,"getClassesFromNode"),Mve=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ri(t,e,ko(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=i+a,l=[{x:s/2,y:0},{x:s,y:-s/2},{x:s/2,y:-s},{x:0,y:-s/2}];Y.info("Question main (Circle)");let u=ec(r,s,s,l);return u.attr("style",e.style),jn(e,u),e.intersect=function(h){return Y.warn("Intersect called"),In.polygon(e,l,h)},r},"question"),dnt=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=28,i=[{x:0,y:n/2},{x:n/2,y:0},{x:0,y:-n/2},{x:-n/2,y:0}];return r.insert("polygon",":first-child").attr("points",i.map(function(s){return s.x+","+s.y}).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),e.width=28,e.height=28,e.intersect=function(s){return In.circle(e,14,s)},r},"choice"),pnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ri(t,e,ko(e,void 0),!0),i=4,a=n.height+e.padding,s=a/i,l=n.width+2*s+e.padding,u=[{x:s,y:0},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:s,y:-a},{x:0,y:-a/2}],h=ec(r,l,a,u);return h.attr("style",e.style),jn(e,h),e.intersect=function(f){return In.polygon(e,u,f)},r},"hexagon"),mnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ri(t,e,void 0,!0),i=2,a=n.height+2*e.padding,s=a/i,l=n.width+2*s+e.padding,u=yve(e.directions,n,e),h=ec(r,l,a,u);return h.attr("style",e.style),jn(e,h),e.intersect=function(f){return In.polygon(e,u,f)},r},"block_arrow"),gnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ri(t,e,ko(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-a/2,y:0},{x:i,y:0},{x:i,y:-a},{x:-a/2,y:-a},{x:0,y:-a/2}];return ec(r,i,a,s).attr("style",e.style),e.width=i+a,e.height=a,e.intersect=function(u){return In.polygon(e,s,u)},r},"rect_left_inv_arrow"),ynt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ri(t,e,ko(e),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-2*a/6,y:0},{x:i-a/6,y:0},{x:i+2*a/6,y:-a},{x:a/6,y:-a}],l=ec(r,i,a,s);return l.attr("style",e.style),jn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"lean_right"),vnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ri(t,e,ko(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:2*a/6,y:0},{x:i+a/6,y:0},{x:i-2*a/6,y:-a},{x:-a/6,y:-a}],l=ec(r,i,a,s);return l.attr("style",e.style),jn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"lean_left"),xnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ri(t,e,ko(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-2*a/6,y:0},{x:i+2*a/6,y:0},{x:i-a/6,y:-a},{x:a/6,y:-a}],l=ec(r,i,a,s);return l.attr("style",e.style),jn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"trapezoid"),bnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ri(t,e,ko(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:a/6,y:0},{x:i-a/6,y:0},{x:i+2*a/6,y:-a},{x:-2*a/6,y:-a}],l=ec(r,i,a,s);return l.attr("style",e.style),jn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"inv_trapezoid"),wnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ri(t,e,ko(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:0,y:0},{x:i+a/2,y:0},{x:i,y:-a/2},{x:i+a/2,y:-a},{x:0,y:-a}],l=ec(r,i,a,s);return l.attr("style",e.style),jn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"rect_right_inv_arrow"),Tnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ri(t,e,ko(e,void 0),!0),i=n.width+e.padding,a=i/2,s=a/(2.5+i/50),l=n.height+s+e.padding,u="M 0,"+s+" a "+a+","+s+" 0,0,0 "+i+" 0 a "+a+","+s+" 0,0,0 "+-i+" 0 l 0,"+l+" a "+a+","+s+" 0,0,0 "+i+" 0 l 0,"+-l,h=r.attr("label-offset-y",s).insert("path",":first-child").attr("style",e.style).attr("d",u).attr("transform","translate("+-i/2+","+-(l/2+s)+")");return jn(e,h),e.intersect=function(f){let d=In.rect(e,f),p=d.x-e.x;if(a!=0&&(Math.abs(p)e.height/2-s)){let m=s*s*(1-p*p/(a*a));m!=0&&(m=Math.sqrt(m)),m=s-m,f.y-e.y>0&&(m=-m),d.y+=m}return d},r},"cylinder"),knt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Ri(t,e,"node "+e.classes+" "+e.class,!0),a=r.insert("rect",":first-child"),s=e.positioned?e.width:n.width+e.padding,l=e.positioned?e.height:n.height+e.padding,u=e.positioned?-s/2:-n.width/2-i,h=e.positioned?-l/2:-n.height/2-i;if(a.attr("class","basic label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",u).attr("y",h).attr("width",s).attr("height",l),e.props){let f=new Set(Object.keys(e.props));e.props.borders&&(sF(a,e.props.borders,s,l),f.delete("borders")),f.forEach(d=>{Y.warn(`Unknown node property ${d}`)})}return jn(e,a),e.intersect=function(f){return In.rect(e,f)},r},"rect"),Ent=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Ri(t,e,"node "+e.classes,!0),a=r.insert("rect",":first-child"),s=e.positioned?e.width:n.width+e.padding,l=e.positioned?e.height:n.height+e.padding,u=e.positioned?-s/2:-n.width/2-i,h=e.positioned?-l/2:-n.height/2-i;if(a.attr("class","basic cluster composite label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",u).attr("y",h).attr("width",s).attr("height",l),e.props){let f=new Set(Object.keys(e.props));e.props.borders&&(sF(a,e.props.borders,s,l),f.delete("borders")),f.forEach(d=>{Y.warn(`Unknown node property ${d}`)})}return jn(e,a),e.intersect=function(f){return In.rect(e,f)},r},"composite"),Snt=o(async(t,e)=>{let{shapeSvg:r}=await Ri(t,e,"label",!0);Y.trace("Classes = ",e.class);let n=r.insert("rect",":first-child"),i=0,a=0;if(n.attr("width",i).attr("height",a),r.attr("class","label edgeLabel"),e.props){let s=new Set(Object.keys(e.props));e.props.borders&&(sF(n,e.props.borders,i,a),s.delete("borders")),s.forEach(l=>{Y.warn(`Unknown node property ${l}`)})}return jn(e,n),e.intersect=function(s){return In.rect(e,s)},r},"labelRect");o(sF,"applyNodePropertyBorders");Cnt=o((t,e)=>{let r;e.classes?r="node "+e.classes:r="node default";let n=t.insert("g").attr("class",r).attr("id",e.domId||e.id),i=n.insert("rect",":first-child"),a=n.insert("line"),s=n.insert("g").attr("class","label"),l=e.labelText.flat?e.labelText.flat():e.labelText,u="";typeof l=="object"?u=l[0]:u=l,Y.info("Label text abc79",u,l,typeof l=="object");let h=s.node().appendChild(gs(u,e.labelStyle,!0,!0)),f={width:0,height:0};if(xr(pe().flowchart.htmlLabels)){let y=h.children[0],v=Ve(h);f=y.getBoundingClientRect(),v.attr("width",f.width),v.attr("height",f.height)}Y.info("Text 2",l);let d=l.slice(1,l.length),p=h.getBBox(),m=s.node().appendChild(gs(d.join?d.join("
    "):d,e.labelStyle,!0,!0));if(xr(pe().flowchart.htmlLabels)){let y=m.children[0],v=Ve(m);f=y.getBoundingClientRect(),v.attr("width",f.width),v.attr("height",f.height)}let g=e.padding/2;return Ve(m).attr("transform","translate( "+(f.width>p.width?0:(p.width-f.width)/2)+", "+(p.height+g+5)+")"),Ve(h).attr("transform","translate( "+(f.width{let{shapeSvg:r,bbox:n}=await Ri(t,e,ko(e,void 0),!0),i=n.height+e.padding,a=n.width+i/4+e.padding,s=r.insert("rect",":first-child").attr("style",e.style).attr("rx",i/2).attr("ry",i/2).attr("x",-a/2).attr("y",-i/2).attr("width",a).attr("height",i);return jn(e,s),e.intersect=function(l){return In.rect(e,l)},r},"stadium"),_nt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Ri(t,e,ko(e,void 0),!0),a=r.insert("circle",":first-child");return a.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),Y.info("Circle main"),jn(e,a),e.intersect=function(s){return Y.info("Circle intersect",e,n.width/2+i,s),In.circle(e,n.width/2+i,s)},r},"circle"),Lnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Ri(t,e,ko(e,void 0),!0),a=5,s=r.insert("g",":first-child"),l=s.insert("circle"),u=s.insert("circle");return s.attr("class",e.class),l.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i+a).attr("width",n.width+e.padding+a*2).attr("height",n.height+e.padding+a*2),u.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),Y.info("DoubleCircle main"),jn(e,l),e.intersect=function(h){return Y.info("DoubleCircle intersect",e,n.width/2+i+a,h),In.circle(e,n.width/2+i+a,h)},r},"doublecircle"),Dnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ri(t,e,ko(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:0,y:0},{x:i,y:0},{x:i,y:-a},{x:0,y:-a},{x:0,y:0},{x:-8,y:0},{x:i+8,y:0},{x:i+8,y:-a},{x:-8,y:-a},{x:-8,y:0}],l=ec(r,i,a,s);return l.attr("style",e.style),jn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"subroutine"),Nnt=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=r.insert("circle",":first-child");return n.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),jn(e,n),e.intersect=function(i){return In.circle(e,7,i)},r},"start"),Ive=o((t,e,r)=>{let n=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),i=70,a=10;r==="LR"&&(i=10,a=70);let s=n.append("rect").attr("x",-1*i/2).attr("y",-1*a/2).attr("width",i).attr("height",a).attr("class","fork-join");return jn(e,s),e.height=e.height+e.padding/2,e.width=e.width+e.padding/2,e.intersect=function(l){return In.rect(e,l)},n},"forkJoin"),Rnt=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=r.insert("circle",":first-child"),i=r.insert("circle",":first-child");return i.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),n.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),jn(e,i),e.intersect=function(a){return In.circle(e,7,a)},r},"end"),Mnt=o((t,e)=>{let r=e.padding/2,n=4,i=8,a;e.classes?a="node "+e.classes:a="node default";let s=t.insert("g").attr("class",a).attr("id",e.domId||e.id),l=s.insert("rect",":first-child"),u=s.insert("line"),h=s.insert("line"),f=0,d=n,p=s.insert("g").attr("class","label"),m=0,g=e.classData.annotations?.[0],y=e.classData.annotations[0]?"\xAB"+e.classData.annotations[0]+"\xBB":"",v=p.node().appendChild(gs(y,e.labelStyle,!0,!0)),x=v.getBBox();if(xr(pe().flowchart.htmlLabels)){let S=v.children[0],A=Ve(v);x=S.getBoundingClientRect(),A.attr("width",x.width),A.attr("height",x.height)}e.classData.annotations[0]&&(d+=x.height+n,f+=x.width);let b=e.classData.label;e.classData.type!==void 0&&e.classData.type!==""&&(pe().flowchart.htmlLabels?b+="<"+e.classData.type+">":b+="<"+e.classData.type+">");let w=p.node().appendChild(gs(b,e.labelStyle,!0,!0));Ve(w).attr("class","classTitle");let _=w.getBBox();if(xr(pe().flowchart.htmlLabels)){let S=w.children[0],A=Ve(w);_=S.getBoundingClientRect(),A.attr("width",_.width),A.attr("height",_.height)}d+=_.height+n,_.width>f&&(f=_.width);let T=[];e.classData.members.forEach(S=>{let A=S.getDisplayDetails(),I=A.displayText;pe().flowchart.htmlLabels&&(I=I.replace(//g,">"));let D=p.node().appendChild(gs(I,A.cssStyle?A.cssStyle:e.labelStyle,!0,!0)),k=D.getBBox();if(xr(pe().flowchart.htmlLabels)){let R=D.children[0],C=Ve(D);k=R.getBoundingClientRect(),C.attr("width",k.width),C.attr("height",k.height)}k.width>f&&(f=k.width),d+=k.height+n,T.push(D)}),d+=i;let E=[];if(e.classData.methods.forEach(S=>{let A=S.getDisplayDetails(),I=A.displayText;pe().flowchart.htmlLabels&&(I=I.replace(//g,">"));let D=p.node().appendChild(gs(I,A.cssStyle?A.cssStyle:e.labelStyle,!0,!0)),k=D.getBBox();if(xr(pe().flowchart.htmlLabels)){let R=D.children[0],C=Ve(D);k=R.getBoundingClientRect(),C.attr("width",k.width),C.attr("height",k.height)}k.width>f&&(f=k.width),d+=k.height+n,E.push(D)}),d+=i,g){let S=(f-x.width)/2;Ve(v).attr("transform","translate( "+(-1*f/2+S)+", "+-1*d/2+")"),m=x.height+n}let L=(f-_.width)/2;return Ve(w).attr("transform","translate( "+(-1*f/2+L)+", "+(-1*d/2+m)+")"),m+=_.height+n,u.attr("class","divider").attr("x1",-f/2-r).attr("x2",f/2+r).attr("y1",-d/2-r+i+m).attr("y2",-d/2-r+i+m),m+=i,T.forEach(S=>{Ve(S).attr("transform","translate( "+-f/2+", "+(-1*d/2+m+i/2)+")");let A=S?.getBBox();m+=(A?.height??0)+n}),m+=i,h.attr("class","divider").attr("x1",-f/2-r).attr("x2",f/2+r).attr("y1",-d/2-r+i+m).attr("y2",-d/2-r+i+m),m+=i,E.forEach(S=>{Ve(S).attr("transform","translate( "+-f/2+", "+(-1*d/2+m)+")");let A=S?.getBBox();m+=(A?.height??0)+n}),l.attr("style",e.style).attr("class","outer title-state").attr("x",-f/2-r).attr("y",-(d/2)-r).attr("width",f+e.padding).attr("height",d+e.padding),jn(e,l),e.intersect=function(S){return In.rect(e,S)},s},"class_box"),Ove={rhombus:Mve,composite:Ent,question:Mve,rect:knt,labelRect:Snt,rectWithTitle:Cnt,choice:dnt,circle:_nt,doublecircle:Lnt,stadium:Ant,hexagon:pnt,block_arrow:mnt,rect_left_inv_arrow:gnt,lean_right:ynt,lean_left:vnt,trapezoid:xnt,inv_trapezoid:bnt,rect_right_inv_arrow:wnt,cylinder:Tnt,start:Nnt,end:Rnt,note:Dve,subroutine:Dnt,fork:Ive,join:Ive,class_box:Mnt},dS={},oF=o(async(t,e,r)=>{let n,i;if(e.link){let a;pe().securityLevel==="sandbox"?a="_top":e.linkTarget&&(a=e.linkTarget||"_blank"),n=t.insert("svg:a").attr("xlink:href",e.link).attr("target",a),i=await Ove[e.shape](n,e,r)}else i=await Ove[e.shape](t,e,r),n=i;return e.tooltip&&i.attr("title",e.tooltip),e.class&&i.attr("class","node default "+e.class),dS[e.id]=n,e.haveCallback&&dS[e.id].attr("class",dS[e.id].attr("class")+" clickable"),n},"insertNode"),Pve=o(t=>{let e=dS[t.id];Y.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");let r=8,n=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+n-t.width/2)+", "+(t.y-t.height/2-r)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),n},"positionNode")});function Fve(t,e,r=!1){let n=t,i="default";(n?.classes?.length||0)>0&&(i=(n?.classes??[]).join(" ")),i=i+" flowchart-label";let a=0,s="",l;switch(n.type){case"round":a=5,s="rect";break;case"composite":a=0,s="composite",l=0;break;case"square":s="rect";break;case"diamond":s="question";break;case"hexagon":s="hexagon";break;case"block_arrow":s="block_arrow";break;case"odd":s="rect_left_inv_arrow";break;case"lean_right":s="lean_right";break;case"lean_left":s="lean_left";break;case"trapezoid":s="trapezoid";break;case"inv_trapezoid":s="inv_trapezoid";break;case"rect_left_inv_arrow":s="rect_left_inv_arrow";break;case"circle":s="circle";break;case"ellipse":s="ellipse";break;case"stadium":s="stadium";break;case"subroutine":s="subroutine";break;case"cylinder":s="cylinder";break;case"group":s="rect";break;case"doublecircle":s="doublecircle";break;default:s="rect"}let u=t9(n?.styles??[]),h=n.label,f=n.size??{width:0,height:0,x:0,y:0};return{labelStyle:u.labelStyle,shape:s,labelText:h,rx:a,ry:a,class:i,style:u.style,id:n.id,directions:n.directions,width:f.width,height:f.height,x:f.x,y:f.y,positioned:r,intersect:void 0,type:n.type,padding:l??Cr()?.block?.padding??0}}async function Int(t,e,r){let n=Fve(e,r,!1);if(n.type==="group")return;let i=Cr(),a=await oF(t,n,{config:i}),s=a.node().getBBox(),l=r.getBlock(n.id);l.size={width:s.width,height:s.height,x:0,y:0,node:a},r.setBlock(l),a.remove()}async function Ont(t,e,r){let n=Fve(e,r,!0);if(r.getBlock(n.id).type!=="space"){let a=Cr();await oF(t,n,{config:a}),e.intersect=n?.intersect,Pve(n)}}async function lF(t,e,r,n){for(let i of e)await n(t,i,r),i.children&&await lF(t,i.children,r,n)}async function zve(t,e,r){await lF(t,e,r,Int)}async function Gve(t,e,r){await lF(t,e,r,Ont)}async function $ve(t,e,r,n,i){let a=new Ir({multigraph:!0,compound:!0});a.setGraph({rankdir:"TB",nodesep:10,ranksep:10,marginx:8,marginy:8});for(let s of r)s.size&&a.setNode(s.id,{width:s.size.width,height:s.size.height,intersect:s.intersect});for(let s of e)if(s.start&&s.end){let l=n.getBlock(s.start),u=n.getBlock(s.end);if(l?.size&&u?.size){let h=l.size,f=u.size,d=[{x:h.x,y:h.y},{x:h.x+(f.x-h.x)/2,y:h.y+(f.y-h.y)/2},{x:f.x,y:f.y}];mve(t,{v:s.start,w:s.end,name:s.id},{...s,arrowTypeEnd:s.arrowTypeEnd,arrowTypeStart:s.arrowTypeStart,points:d,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"},void 0,"block",a,i),s.label&&(await dve(t,{...s,label:s.label,labelStyle:"stroke: #333; stroke-width: 1.5px;fill:none;",arrowTypeEnd:s.arrowTypeEnd,arrowTypeStart:s.arrowTypeStart,points:d,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"}),pve({...s,x:d[1].x,y:d[1].y},{originalPath:d}))}}}var Vve=M(()=>{"use strict";Gs();Za();gve();Bve();hr();o(Fve,"getNodeFromBlock");o(Int,"calculateBlockSize");o(Ont,"insertBlockPositioned");o(lF,"performOperations");o(zve,"calculateBlockSizes");o(Gve,"insertBlocks");o($ve,"insertEdges")});var Pnt,Bnt,Uve,Hve=M(()=>{"use strict";pr();Za();nve();ut();ai();ove();Vve();Pnt=o(function(t,e){return e.db.getClasses()},"getClasses"),Bnt=o(async function(t,e,r,n){let{securityLevel:i,block:a}=Cr(),s=n.db,l;i==="sandbox"&&(l=Ve("#i"+e));let u=i==="sandbox"?Ve(l.nodes()[0].contentDocument.body):Ve("body"),h=i==="sandbox"?u.select(`[id="${e}"]`):Ve(`[id="${e}"]`);rve(h,["point","circle","cross"],n.type,e);let d=s.getBlocks(),p=s.getBlocksFlat(),m=s.getEdges(),g=h.insert("g").attr("class","block");await zve(g,d,s);let y=sve(s);if(await Gve(g,d,s),await $ve(g,m,p,s,e),y){let v=y,x=Math.max(1,Math.round(.125*(v.width/v.height))),b=v.height+x+10,w=v.width+10,{useMaxWidth:_}=a;Zr(h,b,w,!!_),Y.debug("Here Bounds",y,v),h.attr("viewBox",`${v.x-5} ${v.y-5} ${v.width+10} ${v.height+10}`)}},"draw"),Uve={draw:Bnt,getClasses:Pnt}});var Wve={};vr(Wve,{diagram:()=>Fnt});var Fnt,Yve=M(()=>{"use strict";Yye();Jye();tve();Hve();Fnt={parser:Wye,db:Zye,renderer:Uve,styles:eve}});var cF,uF,Db,jve,hF,ys,nu,pS,Kve,Vnt,Nb,Qve,Zve,Jve,e2e,mS,Vf,gS=M(()=>{"use strict";cF={L:"left",R:"right",T:"top",B:"bottom"},uF={L:o(t=>`${t},${t/2} 0,${t} 0,0`,"L"),R:o(t=>`0,${t/2} ${t},0 ${t},${t}`,"R"),T:o(t=>`0,0 ${t},0 ${t/2},${t}`,"T"),B:o(t=>`${t/2},0 ${t},${t} 0,${t}`,"B")},Db={L:o((t,e)=>t-e+2,"L"),R:o((t,e)=>t-2,"R"),T:o((t,e)=>t-e+2,"T"),B:o((t,e)=>t-2,"B")},jve=o(function(t){return ys(t)?t==="L"?"R":"L":t==="T"?"B":"T"},"getOppositeArchitectureDirection"),hF=o(function(t){let e=t;return e==="L"||e==="R"||e==="T"||e==="B"},"isArchitectureDirection"),ys=o(function(t){let e=t;return e==="L"||e==="R"},"isArchitectureDirectionX"),nu=o(function(t){let e=t;return e==="T"||e==="B"},"isArchitectureDirectionY"),pS=o(function(t,e){let r=ys(t)&&nu(e),n=nu(t)&&ys(e);return r||n},"isArchitectureDirectionXY"),Kve=o(function(t){let e=t[0],r=t[1],n=ys(e)&&nu(r),i=nu(e)&&ys(r);return n||i},"isArchitecturePairXY"),Vnt=o(function(t){return t!=="LL"&&t!=="RR"&&t!=="TT"&&t!=="BB"},"isValidArchitectureDirectionPair"),Nb=o(function(t,e){let r=`${t}${e}`;return Vnt(r)?r:void 0},"getArchitectureDirectionPair"),Qve=o(function([t,e],r){let n=r[0],i=r[1];return ys(n)?nu(i)?[t+(n==="L"?-1:1),e+(i==="T"?1:-1)]:[t+(n==="L"?-1:1),e]:ys(i)?[t+(i==="L"?1:-1),e+(n==="T"?1:-1)]:[t,e+(n==="T"?1:-1)]},"shiftPositionByArchitectureDirectionPair"),Zve=o(function(t){return t==="LT"||t==="TL"?[1,1]:t==="BL"||t==="LB"?[1,-1]:t==="BR"||t==="RB"?[-1,-1]:[-1,1]},"getArchitectureDirectionXYFactors"),Jve=o(function(t){return t.type==="service"},"isArchitectureService"),e2e=o(function(t){return t.type==="junction"},"isArchitectureJunction"),mS=o(t=>t.data(),"edgeData"),Vf=o(t=>t.data(),"nodeData")});function Mi(t){let e=pe().architecture;return e?.[t]?e[t]:t2e[t]}var t2e,mr,Unt,Hnt,Wnt,Ynt,qnt,Xnt,jnt,Knt,Qnt,Znt,Jnt,eit,tit,rit,ip,Rb=M(()=>{"use strict";bs();Vt();dE();Ai();gS();t2e=ur.architecture,mr=new vf(()=>({nodes:{},groups:{},edges:[],registeredIds:{},config:t2e,dataStructures:void 0,elements:{}})),Unt=o(()=>{mr.reset(),Lr()},"clear"),Hnt=o(function({id:t,icon:e,in:r,title:n,iconText:i}){if(mr.records.registeredIds[t]!==void 0)throw new Error(`The service id [${t}] is already in use by another ${mr.records.registeredIds[t]}`);if(r!==void 0){if(t===r)throw new Error(`The service [${t}] cannot be placed within itself`);if(mr.records.registeredIds[r]===void 0)throw new Error(`The service [${t}]'s parent does not exist. Please make sure the parent is created before this service`);if(mr.records.registeredIds[r]==="node")throw new Error(`The service [${t}]'s parent is not a group`)}mr.records.registeredIds[t]="node",mr.records.nodes[t]={id:t,type:"service",icon:e,iconText:i,title:n,edges:[],in:r}},"addService"),Wnt=o(()=>Object.values(mr.records.nodes).filter(Jve),"getServices"),Ynt=o(function({id:t,in:e}){mr.records.registeredIds[t]="node",mr.records.nodes[t]={id:t,type:"junction",edges:[],in:e}},"addJunction"),qnt=o(()=>Object.values(mr.records.nodes).filter(e2e),"getJunctions"),Xnt=o(()=>Object.values(mr.records.nodes),"getNodes"),jnt=o(t=>mr.records.nodes[t],"getNode"),Knt=o(function({id:t,icon:e,in:r,title:n}){if(mr.records.registeredIds[t]!==void 0)throw new Error(`The group id [${t}] is already in use by another ${mr.records.registeredIds[t]}`);if(r!==void 0){if(t===r)throw new Error(`The group [${t}] cannot be placed within itself`);if(mr.records.registeredIds[r]===void 0)throw new Error(`The group [${t}]'s parent does not exist. Please make sure the parent is created before this group`);if(mr.records.registeredIds[r]==="node")throw new Error(`The group [${t}]'s parent is not a group`)}mr.records.registeredIds[t]="group",mr.records.groups[t]={id:t,icon:e,title:n,in:r}},"addGroup"),Qnt=o(()=>Object.values(mr.records.groups),"getGroups"),Znt=o(function({lhsId:t,rhsId:e,lhsDir:r,rhsDir:n,lhsInto:i,rhsInto:a,lhsGroup:s,rhsGroup:l,title:u}){if(!hF(r))throw new Error(`Invalid direction given for left hand side of edge ${t}--${e}. Expected (L,R,T,B) got ${r}`);if(!hF(n))throw new Error(`Invalid direction given for right hand side of edge ${t}--${e}. Expected (L,R,T,B) got ${n}`);if(mr.records.nodes[t]===void 0&&mr.records.groups[t]===void 0)throw new Error(`The left-hand id [${t}] does not yet exist. Please create the service/group before declaring an edge to it.`);if(mr.records.nodes[e]===void 0&&mr.records.groups[t]===void 0)throw new Error(`The right-hand id [${e}] does not yet exist. Please create the service/group before declaring an edge to it.`);let h=mr.records.nodes[t].in,f=mr.records.nodes[e].in;if(s&&h&&f&&h==f)throw new Error(`The left-hand id [${t}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);if(l&&h&&f&&h==f)throw new Error(`The right-hand id [${e}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);let d={lhsId:t,lhsDir:r,lhsInto:i,lhsGroup:s,rhsId:e,rhsDir:n,rhsInto:a,rhsGroup:l,title:u};mr.records.edges.push(d),mr.records.nodes[t]&&mr.records.nodes[e]&&(mr.records.nodes[t].edges.push(mr.records.edges[mr.records.edges.length-1]),mr.records.nodes[e].edges.push(mr.records.edges[mr.records.edges.length-1]))},"addEdge"),Jnt=o(()=>mr.records.edges,"getEdges"),eit=o(()=>{if(mr.records.dataStructures===void 0){let t=Object.entries(mr.records.nodes).reduce((s,[l,u])=>(s[l]=u.edges.reduce((h,f)=>{if(f.lhsId===l){let d=Nb(f.lhsDir,f.rhsDir);d&&(h[d]=f.rhsId)}else{let d=Nb(f.rhsDir,f.lhsDir);d&&(h[d]=f.lhsId)}return h},{}),s),{}),e=Object.keys(t)[0],r={[e]:1},n=Object.keys(t).reduce((s,l)=>l===e?s:{...s,[l]:1},{}),i=o(s=>{let l={[s]:[0,0]},u=[s];for(;u.length>0;){let h=u.shift();if(h){r[h]=1,delete n[h];let f=t[h],[d,p]=l[h];Object.entries(f).forEach(([m,g])=>{r[g]||(l[g]=Qve([d,p],m),u.push(g))})}}return l},"BFS"),a=[i(e)];for(;Object.keys(n).length>0;)a.push(i(Object.keys(n)[0]));mr.records.dataStructures={adjList:t,spatialMaps:a}}return mr.records.dataStructures},"getDataStructures"),tit=o((t,e)=>{mr.records.elements[t]=e},"setElementForId"),rit=o(t=>mr.records.elements[t],"getElementById"),ip={clear:Unt,setDiagramTitle:cn,getDiagramTitle:Jr,setAccTitle:Mr,getAccTitle:Br,setAccDescription:Fr,getAccDescription:zr,addService:Hnt,getServices:Wnt,addJunction:Ynt,getJunctions:qnt,getNodes:Xnt,getNode:jnt,addGroup:Knt,getGroups:Qnt,addEdge:Znt,getEdges:Jnt,setElementForId:tit,getElementById:rit,getDataStructures:eit};o(Mi,"getConfigField")});var nit,r2e,n2e=M(()=>{"use strict";Hg();ut();Tx();Rb();nit=o((t,e)=>{yf(t,e),t.groups.map(e.addGroup),t.services.map(r=>e.addService({...r,type:"service"})),t.junctions.map(r=>e.addJunction({...r,type:"junction"})),t.edges.map(e.addEdge)},"populateDb"),r2e={parse:o(async t=>{let e=await Yl("architecture",t);Y.debug(e),nit(e,ip)},"parse")}});var iit,i2e,a2e=M(()=>{"use strict";iit=o(t=>` + .edge { + stroke-width: ${t.archEdgeWidth}; + stroke: ${t.archEdgeColor}; + fill: none; + } + + .arrow { + fill: ${t.archEdgeArrowColor}; + } + + .node-bkg { + fill: none; + stroke: ${t.archGroupBorderColor}; + stroke-width: ${t.archGroupBorderWidth}; + stroke-dasharray: 8; + } + .node-icon-text { + display: flex; + align-items: center; + } + + .node-icon-text > div { + color: #fff; + margin: 1px; + height: fit-content; + text-align: center; + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + } +`,"getStyles"),i2e=iit});var dF=Ei((Mb,fF)=>{"use strict";o(function(e,r){typeof Mb=="object"&&typeof fF=="object"?fF.exports=r():typeof define=="function"&&define.amd?define([],r):typeof Mb=="object"?Mb.layoutBase=r():e.layoutBase=r()},"webpackUniversalModuleDefinition")(Mb,function(){return function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return o(r,"__webpack_require__"),r.m=t,r.c=e,r.i=function(n){return n},r.d=function(n,i,a){r.o(n,i)||Object.defineProperty(n,i,{configurable:!1,enumerable:!0,get:a})},r.n=function(n){var i=n&&n.__esModule?o(function(){return n.default},"getDefault"):o(function(){return n},"getModuleExports");return r.d(i,"a",i),i},r.o=function(n,i){return Object.prototype.hasOwnProperty.call(n,i)},r.p="",r(r.s=28)}([function(t,e,r){"use strict";function n(){}o(n,"LayoutConstants"),n.QUALITY=1,n.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,n.DEFAULT_INCREMENTAL=!1,n.DEFAULT_ANIMATION_ON_LAYOUT=!0,n.DEFAULT_ANIMATION_DURING_LAYOUT=!1,n.DEFAULT_ANIMATION_PERIOD=50,n.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,n.DEFAULT_GRAPH_MARGIN=15,n.NODE_DIMENSIONS_INCLUDE_LABELS=!1,n.SIMPLE_NODE_SIZE=40,n.SIMPLE_NODE_HALF_SIZE=n.SIMPLE_NODE_SIZE/2,n.EMPTY_COMPOUND_NODE_SIZE=40,n.MIN_EDGE_LENGTH=1,n.WORLD_BOUNDARY=1e6,n.INITIAL_WORLD_BOUNDARY=n.WORLD_BOUNDARY/1e3,n.WORLD_CENTER_X=1200,n.WORLD_CENTER_Y=900,t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(8),a=r(9);function s(u,h,f){n.call(this,f),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=f,this.bendpoints=[],this.source=u,this.target=h}o(s,"LEdge"),s.prototype=Object.create(n.prototype);for(var l in n)s[l]=n[l];s.prototype.getSource=function(){return this.source},s.prototype.getTarget=function(){return this.target},s.prototype.isInterGraph=function(){return this.isInterGraph},s.prototype.getLength=function(){return this.length},s.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},s.prototype.getBendpoints=function(){return this.bendpoints},s.prototype.getLca=function(){return this.lca},s.prototype.getSourceInLca=function(){return this.sourceInLca},s.prototype.getTargetInLca=function(){return this.targetInLca},s.prototype.getOtherEnd=function(u){if(this.source===u)return this.target;if(this.target===u)return this.source;throw"Node is not incident with this edge"},s.prototype.getOtherEndInGraph=function(u,h){for(var f=this.getOtherEnd(u),d=h.getGraphManager().getRoot();;){if(f.getOwner()==h)return f;if(f.getOwner()==d)break;f=f.getOwner().getParent()}return null},s.prototype.updateLength=function(){var u=new Array(4);this.isOverlapingSourceAndTarget=i.getIntersection(this.target.getRect(),this.source.getRect(),u),this.isOverlapingSourceAndTarget||(this.lengthX=u[0]-u[2],this.lengthY=u[1]-u[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},s.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},t.exports=s},function(t,e,r){"use strict";function n(i){this.vGraphObject=i}o(n,"LGraphObject"),t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(13),s=r(0),l=r(16),u=r(5);function h(d,p,m,g){m==null&&g==null&&(g=p),n.call(this,g),d.graphManager!=null&&(d=d.graphManager),this.estimatedSize=i.MIN_VALUE,this.inclusionTreeDepth=i.MAX_VALUE,this.vGraphObject=g,this.edges=[],this.graphManager=d,m!=null&&p!=null?this.rect=new a(p.x,p.y,m.width,m.height):this.rect=new a}o(h,"LNode"),h.prototype=Object.create(n.prototype);for(var f in n)h[f]=n[f];h.prototype.getEdges=function(){return this.edges},h.prototype.getChild=function(){return this.child},h.prototype.getOwner=function(){return this.owner},h.prototype.getWidth=function(){return this.rect.width},h.prototype.setWidth=function(d){this.rect.width=d},h.prototype.getHeight=function(){return this.rect.height},h.prototype.setHeight=function(d){this.rect.height=d},h.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},h.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},h.prototype.getCenter=function(){return new u(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},h.prototype.getLocation=function(){return new u(this.rect.x,this.rect.y)},h.prototype.getRect=function(){return this.rect},h.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},h.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},h.prototype.setRect=function(d,p){this.rect.x=d.x,this.rect.y=d.y,this.rect.width=p.width,this.rect.height=p.height},h.prototype.setCenter=function(d,p){this.rect.x=d-this.rect.width/2,this.rect.y=p-this.rect.height/2},h.prototype.setLocation=function(d,p){this.rect.x=d,this.rect.y=p},h.prototype.moveBy=function(d,p){this.rect.x+=d,this.rect.y+=p},h.prototype.getEdgeListToNode=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(y.target==d){if(y.source!=g)throw"Incorrect edge source!";p.push(y)}}),p},h.prototype.getEdgesBetween=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(!(y.source==g||y.target==g))throw"Incorrect edge source and/or target";(y.target==d||y.source==d)&&p.push(y)}),p},h.prototype.getNeighborsList=function(){var d=new Set,p=this;return p.edges.forEach(function(m){if(m.source==p)d.add(m.target);else{if(m.target!=p)throw"Incorrect incidency!";d.add(m.source)}}),d},h.prototype.withChildren=function(){var d=new Set,p,m;if(d.add(this),this.child!=null)for(var g=this.child.getNodes(),y=0;yp?(this.rect.x-=(this.labelWidth-p)/2,this.setWidth(this.labelWidth)):this.labelPosHorizontal=="right"&&this.setWidth(p+this.labelWidth)),this.labelHeight&&(this.labelPosVertical=="top"?(this.rect.y-=this.labelHeight,this.setHeight(m+this.labelHeight)):this.labelPosVertical=="center"&&this.labelHeight>m?(this.rect.y-=(this.labelHeight-m)/2,this.setHeight(this.labelHeight)):this.labelPosVertical=="bottom"&&this.setHeight(m+this.labelHeight))}}},h.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==i.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},h.prototype.transform=function(d){var p=this.rect.x;p>s.WORLD_BOUNDARY?p=s.WORLD_BOUNDARY:p<-s.WORLD_BOUNDARY&&(p=-s.WORLD_BOUNDARY);var m=this.rect.y;m>s.WORLD_BOUNDARY?m=s.WORLD_BOUNDARY:m<-s.WORLD_BOUNDARY&&(m=-s.WORLD_BOUNDARY);var g=new u(p,m),y=d.inverseTransformPoint(g);this.setLocation(y.x,y.y)},h.prototype.getLeft=function(){return this.rect.x},h.prototype.getRight=function(){return this.rect.x+this.rect.width},h.prototype.getTop=function(){return this.rect.y},h.prototype.getBottom=function(){return this.rect.y+this.rect.height},h.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},t.exports=h},function(t,e,r){"use strict";var n=r(0);function i(){}o(i,"FDLayoutConstants");for(var a in n)i[a]=n[a];i.MAX_ITERATIONS=2500,i.DEFAULT_EDGE_LENGTH=50,i.DEFAULT_SPRING_STRENGTH=.45,i.DEFAULT_REPULSION_STRENGTH=4500,i.DEFAULT_GRAVITY_STRENGTH=.4,i.DEFAULT_COMPOUND_GRAVITY_STRENGTH=1,i.DEFAULT_GRAVITY_RANGE_FACTOR=3.8,i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=1.5,i.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION=!0,i.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION=!0,i.DEFAULT_COOLING_FACTOR_INCREMENTAL=.3,i.COOLING_ADAPTATION_FACTOR=.33,i.ADAPTATION_LOWER_NODE_LIMIT=1e3,i.ADAPTATION_UPPER_NODE_LIMIT=5e3,i.MAX_NODE_DISPLACEMENT_INCREMENTAL=100,i.MAX_NODE_DISPLACEMENT=i.MAX_NODE_DISPLACEMENT_INCREMENTAL*3,i.MIN_REPULSION_DIST=i.DEFAULT_EDGE_LENGTH/10,i.CONVERGENCE_CHECK_PERIOD=100,i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=.1,i.MIN_EDGE_LENGTH=1,i.GRID_CALCULATION_CHECK_PERIOD=10,t.exports=i},function(t,e,r){"use strict";function n(i,a){i==null&&a==null?(this.x=0,this.y=0):(this.x=i,this.y=a)}o(n,"PointD"),n.prototype.getX=function(){return this.x},n.prototype.getY=function(){return this.y},n.prototype.setX=function(i){this.x=i},n.prototype.setY=function(i){this.y=i},n.prototype.getDifference=function(i){return new DimensionD(this.x-i.x,this.y-i.y)},n.prototype.getCopy=function(){return new n(this.x,this.y)},n.prototype.translate=function(i){return this.x+=i.width,this.y+=i.height,this},t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(0),s=r(7),l=r(3),u=r(1),h=r(13),f=r(12),d=r(11);function p(g,y,v){n.call(this,v),this.estimatedSize=i.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=g,y!=null&&y instanceof s?this.graphManager=y:y!=null&&y instanceof Layout&&(this.graphManager=y.graphManager)}o(p,"LGraph"),p.prototype=Object.create(n.prototype);for(var m in n)p[m]=n[m];p.prototype.getNodes=function(){return this.nodes},p.prototype.getEdges=function(){return this.edges},p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getParent=function(){return this.parent},p.prototype.getLeft=function(){return this.left},p.prototype.getRight=function(){return this.right},p.prototype.getTop=function(){return this.top},p.prototype.getBottom=function(){return this.bottom},p.prototype.isConnected=function(){return this.isConnected},p.prototype.add=function(g,y,v){if(y==null&&v==null){var x=g;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(x)>-1)throw"Node already in graph!";return x.owner=this,this.getNodes().push(x),x}else{var b=g;if(!(this.getNodes().indexOf(y)>-1&&this.getNodes().indexOf(v)>-1))throw"Source or target not in graph!";if(!(y.owner==v.owner&&y.owner==this))throw"Both owners must be this graph!";return y.owner!=v.owner?null:(b.source=y,b.target=v,b.isInterGraph=!1,this.getEdges().push(b),y.edges.push(b),v!=y&&v.edges.push(b),b)}},p.prototype.remove=function(g){var y=g;if(g instanceof l){if(y==null)throw"Node is null!";if(!(y.owner!=null&&y.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var v=y.edges.slice(),x,b=v.length,w=0;w-1&&E>-1))throw"Source and/or target doesn't know this edge!";x.source.edges.splice(T,1),x.target!=x.source&&x.target.edges.splice(E,1);var _=x.source.owner.getEdges().indexOf(x);if(_==-1)throw"Not in owner's edge list!";x.source.owner.getEdges().splice(_,1)}},p.prototype.updateLeftTop=function(){for(var g=i.MAX_VALUE,y=i.MAX_VALUE,v,x,b,w=this.getNodes(),_=w.length,T=0;T<_;T++){var E=w[T];v=E.getTop(),x=E.getLeft(),g>v&&(g=v),y>x&&(y=x)}return g==i.MAX_VALUE?null:(w[0].getParent().paddingLeft!=null?b=w[0].getParent().paddingLeft:b=this.margin,this.left=y-b,this.top=g-b,new f(this.left,this.top))},p.prototype.updateBounds=function(g){for(var y=i.MAX_VALUE,v=-i.MAX_VALUE,x=i.MAX_VALUE,b=-i.MAX_VALUE,w,_,T,E,L,S=this.nodes,A=S.length,I=0;Iw&&(y=w),v<_&&(v=_),x>T&&(x=T),bw&&(y=w),v<_&&(v=_),x>T&&(x=T),b=this.nodes.length){var A=0;v.forEach(function(I){I.owner==g&&A++}),A==this.nodes.length&&(this.isConnected=!0)}},t.exports=p},function(t,e,r){"use strict";var n,i=r(1);function a(s){n=r(6),this.layout=s,this.graphs=[],this.edges=[]}o(a,"LGraphManager"),a.prototype.addRoot=function(){var s=this.layout.newGraph(),l=this.layout.newNode(null),u=this.add(s,l);return this.setRootGraph(u),this.rootGraph},a.prototype.add=function(s,l,u,h,f){if(u==null&&h==null&&f==null){if(s==null)throw"Graph is null!";if(l==null)throw"Parent node is null!";if(this.graphs.indexOf(s)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(s),s.parent!=null)throw"Already has a parent!";if(l.child!=null)throw"Already has a child!";return s.parent=l,l.child=s,s}else{f=u,h=l,u=s;var d=h.getOwner(),p=f.getOwner();if(!(d!=null&&d.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(p!=null&&p.getGraphManager()==this))throw"Target not in this graph mgr!";if(d==p)return u.isInterGraph=!1,d.add(u,h,f);if(u.isInterGraph=!0,u.source=h,u.target=f,this.edges.indexOf(u)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(u),!(u.source!=null&&u.target!=null))throw"Edge source and/or target is null!";if(!(u.source.edges.indexOf(u)==-1&&u.target.edges.indexOf(u)==-1))throw"Edge already in source and/or target incidency list!";return u.source.edges.push(u),u.target.edges.push(u),u}},a.prototype.remove=function(s){if(s instanceof n){var l=s;if(l.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(l==this.rootGraph||l.parent!=null&&l.parent.graphManager==this))throw"Invalid parent node!";var u=[];u=u.concat(l.getEdges());for(var h,f=u.length,d=0;d=s.getRight()?l[0]+=Math.min(s.getX()-a.getX(),a.getRight()-s.getRight()):s.getX()<=a.getX()&&s.getRight()>=a.getRight()&&(l[0]+=Math.min(a.getX()-s.getX(),s.getRight()-a.getRight())),a.getY()<=s.getY()&&a.getBottom()>=s.getBottom()?l[1]+=Math.min(s.getY()-a.getY(),a.getBottom()-s.getBottom()):s.getY()<=a.getY()&&s.getBottom()>=a.getBottom()&&(l[1]+=Math.min(a.getY()-s.getY(),s.getBottom()-a.getBottom()));var f=Math.abs((s.getCenterY()-a.getCenterY())/(s.getCenterX()-a.getCenterX()));s.getCenterY()===a.getCenterY()&&s.getCenterX()===a.getCenterX()&&(f=1);var d=f*l[0],p=l[1]/f;l[0]d)return l[0]=u,l[1]=m,l[2]=f,l[3]=S,!1;if(hf)return l[0]=p,l[1]=h,l[2]=E,l[3]=d,!1;if(uf?(l[0]=y,l[1]=v,k=!0):(l[0]=g,l[1]=m,k=!0):C===N&&(u>f?(l[0]=p,l[1]=m,k=!0):(l[0]=x,l[1]=v,k=!0)),-O===N?f>u?(l[2]=L,l[3]=S,R=!0):(l[2]=E,l[3]=T,R=!0):O===N&&(f>u?(l[2]=_,l[3]=T,R=!0):(l[2]=A,l[3]=S,R=!0)),k&&R)return!1;if(u>f?h>d?(P=this.getCardinalDirection(C,N,4),F=this.getCardinalDirection(O,N,2)):(P=this.getCardinalDirection(-C,N,3),F=this.getCardinalDirection(-O,N,1)):h>d?(P=this.getCardinalDirection(-C,N,1),F=this.getCardinalDirection(-O,N,3)):(P=this.getCardinalDirection(C,N,2),F=this.getCardinalDirection(O,N,4)),!k)switch(P){case 1:G=m,B=u+-w/N,l[0]=B,l[1]=G;break;case 2:B=x,G=h+b*N,l[0]=B,l[1]=G;break;case 3:G=v,B=u+w/N,l[0]=B,l[1]=G;break;case 4:B=y,G=h+-b*N,l[0]=B,l[1]=G;break}if(!R)switch(F){case 1:W=T,z=f+-D/N,l[2]=z,l[3]=W;break;case 2:z=A,W=d+I*N,l[2]=z,l[3]=W;break;case 3:W=S,z=f+D/N,l[2]=z,l[3]=W;break;case 4:z=L,W=d+-I*N,l[2]=z,l[3]=W;break}}return!1},i.getCardinalDirection=function(a,s,l){return a>s?l:1+l%4},i.getIntersection=function(a,s,l,u){if(u==null)return this.getIntersection2(a,s,l);var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=void 0,b=void 0,w=void 0,_=void 0,T=void 0,E=void 0,L=void 0,S=void 0,A=void 0;return w=p-f,T=h-d,L=d*f-h*p,_=v-g,E=m-y,S=y*g-m*v,A=w*E-_*T,A===0?null:(x=(T*S-E*L)/A,b=(_*L-w*S)/A,new n(x,b))},i.angleOfVector=function(a,s,l,u){var h=void 0;return a!==l?(h=Math.atan((u-s)/(l-a)),l=0){var v=(-m+Math.sqrt(m*m-4*p*g))/(2*p),x=(-m-Math.sqrt(m*m-4*p*g))/(2*p),b=null;return v>=0&&v<=1?[v]:x>=0&&x<=1?[x]:b}else return null},i.HALF_PI=.5*Math.PI,i.ONE_AND_HALF_PI=1.5*Math.PI,i.TWO_PI=2*Math.PI,i.THREE_PI=3*Math.PI,t.exports=i},function(t,e,r){"use strict";function n(){}o(n,"IMath"),n.sign=function(i){return i>0?1:i<0?-1:0},n.floor=function(i){return i<0?Math.ceil(i):Math.floor(i)},n.ceil=function(i){return i<0?Math.floor(i):Math.ceil(i)},t.exports=n},function(t,e,r){"use strict";function n(){}o(n,"Integer"),n.MAX_VALUE=2147483647,n.MIN_VALUE=-2147483648,t.exports=n},function(t,e,r){"use strict";var n=function(){function h(f,d){for(var p=0;p"u"?"undefined":n(a);return a==null||s!="object"&&s!="function"},t.exports=i},function(t,e,r){"use strict";function n(m){if(Array.isArray(m)){for(var g=0,y=Array(m.length);g0&&g;){for(w.push(T[0]);w.length>0&&g;){var E=w[0];w.splice(0,1),b.add(E);for(var L=E.getEdges(),x=0;x-1&&T.splice(D,1)}b=new Set,_=new Map}}return m},p.prototype.createDummyNodesForBendpoints=function(m){for(var g=[],y=m.source,v=this.graphManager.calcLowestCommonAncestor(m.source,m.target),x=0;x0){for(var v=this.edgeToDummyNodes.get(y),x=0;x=0&&g.splice(S,1);var A=_.getNeighborsList();A.forEach(function(k){if(y.indexOf(k)<0){var R=v.get(k),C=R-1;C==1&&E.push(k),v.set(k,C)}})}y=y.concat(E),(g.length==1||g.length==2)&&(x=!0,b=g[0])}return b},p.prototype.setGraphManager=function(m){this.graphManager=m},t.exports=p},function(t,e,r){"use strict";function n(){}o(n,"RandomSeed"),n.seed=1,n.x=0,n.nextDouble=function(){return n.x=Math.sin(n.seed++)*1e4,n.x-Math.floor(n.x)},t.exports=n},function(t,e,r){"use strict";var n=r(5);function i(a,s){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}o(i,"Transform"),i.prototype.getWorldOrgX=function(){return this.lworldOrgX},i.prototype.setWorldOrgX=function(a){this.lworldOrgX=a},i.prototype.getWorldOrgY=function(){return this.lworldOrgY},i.prototype.setWorldOrgY=function(a){this.lworldOrgY=a},i.prototype.getWorldExtX=function(){return this.lworldExtX},i.prototype.setWorldExtX=function(a){this.lworldExtX=a},i.prototype.getWorldExtY=function(){return this.lworldExtY},i.prototype.setWorldExtY=function(a){this.lworldExtY=a},i.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},i.prototype.setDeviceOrgX=function(a){this.ldeviceOrgX=a},i.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},i.prototype.setDeviceOrgY=function(a){this.ldeviceOrgY=a},i.prototype.getDeviceExtX=function(){return this.ldeviceExtX},i.prototype.setDeviceExtX=function(a){this.ldeviceExtX=a},i.prototype.getDeviceExtY=function(){return this.ldeviceExtY},i.prototype.setDeviceExtY=function(a){this.ldeviceExtY=a},i.prototype.transformX=function(a){var s=0,l=this.lworldExtX;return l!=0&&(s=this.ldeviceOrgX+(a-this.lworldOrgX)*this.ldeviceExtX/l),s},i.prototype.transformY=function(a){var s=0,l=this.lworldExtY;return l!=0&&(s=this.ldeviceOrgY+(a-this.lworldOrgY)*this.ldeviceExtY/l),s},i.prototype.inverseTransformX=function(a){var s=0,l=this.ldeviceExtX;return l!=0&&(s=this.lworldOrgX+(a-this.ldeviceOrgX)*this.lworldExtX/l),s},i.prototype.inverseTransformY=function(a){var s=0,l=this.ldeviceExtY;return l!=0&&(s=this.lworldOrgY+(a-this.ldeviceOrgY)*this.lworldExtY/l),s},i.prototype.inverseTransformPoint=function(a){var s=new n(this.inverseTransformX(a.x),this.inverseTransformY(a.y));return s},t.exports=i},function(t,e,r){"use strict";function n(d){if(Array.isArray(d)){for(var p=0,m=Array(d.length);pa.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*a.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-a.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT_INCREMENTAL):(d>a.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(a.COOLING_ADAPTATION_FACTOR,1-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*(1-a.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.displacementThresholdPerNode=3*a.DEFAULT_EDGE_LENGTH/100,this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},h.prototype.calcSpringForces=function(){for(var d=this.getAllEdges(),p,m=0;m0&&arguments[0]!==void 0?arguments[0]:!0,p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,m,g,y,v,x=this.getAllNodes(),b;if(this.useFRGridVariant)for(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&d&&this.updateGrid(),b=new Set,m=0;mw||b>w)&&(d.gravitationForceX=-this.gravityConstant*y,d.gravitationForceY=-this.gravityConstant*v)):(w=p.getEstimatedSize()*this.compoundGravityRangeFactor,(x>w||b>w)&&(d.gravitationForceX=-this.gravityConstant*y*this.compoundGravityConstant,d.gravitationForceY=-this.gravityConstant*v*this.compoundGravityConstant))},h.prototype.isConverged=function(){var d,p=!1;return this.totalIterations>this.maxIterations/3&&(p=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),d=this.totalDisplacement=x.length||w>=x[0].length)){for(var _=0;_h},"_defaultCompareFunction")}]),l}();t.exports=s},function(t,e,r){"use strict";function n(){}o(n,"SVD"),n.svd=function(i){this.U=null,this.V=null,this.s=null,this.m=0,this.n=0,this.m=i.length,this.n=i[0].length;var a=Math.min(this.m,this.n);this.s=function(dt){for(var Je=[];dt-- >0;)Je.push(0);return Je}(Math.min(this.m+1,this.n)),this.U=function(dt){var Je=o(function ct(Ct){if(Ct.length==0)return 0;for(var pt=[],Bt=0;Bt0;)Je.push(0);return Je}(this.n),l=function(dt){for(var Je=[];dt-- >0;)Je.push(0);return Je}(this.m),u=!0,h=!0,f=Math.min(this.m-1,this.n),d=Math.max(0,Math.min(this.n-2,this.m)),p=0;p=0;N--)if(this.s[N]!==0){for(var P=N+1;P=0;j--){if(function(dt,Je){return dt&&Je}(j0;){var ce=void 0,te=void 0;for(ce=R-2;ce>=-1&&ce!==-1;ce--)if(Math.abs(s[ce])<=ue+ae*(Math.abs(this.s[ce])+Math.abs(this.s[ce+1]))){s[ce]=0;break}if(ce===R-2)te=4;else{var Ne=void 0;for(Ne=R-1;Ne>=ce&&Ne!==ce;Ne--){var se=(Ne!==R?Math.abs(s[Ne]):0)+(Ne!==ce+1?Math.abs(s[Ne-1]):0);if(Math.abs(this.s[Ne])<=ue+ae*se){this.s[Ne]=0;break}}Ne===ce?te=3:Ne===R-1?te=1:(te=2,ce=Ne)}switch(ce++,te){case 1:{var ke=s[R-2];s[R-2]=0;for(var Re=R-2;Re>=ce;Re--){var Ce=n.hypot(this.s[Re],ke),Pe=this.s[Re]/Ce,Ie=ke/Ce;if(this.s[Re]=Ce,Re!==ce&&(ke=-Ie*s[Re-1],s[Re-1]=Pe*s[Re-1]),h)for(var $e=0;$e=this.s[ce+1]);){var tt=this.s[ce];if(this.s[ce]=this.s[ce+1],this.s[ce+1]=tt,h&&ceMath.abs(a)?(s=a/i,s=Math.abs(i)*Math.sqrt(1+s*s)):a!=0?(s=i/a,s=Math.abs(a)*Math.sqrt(1+s*s)):s=0,s},t.exports=n},function(t,e,r){"use strict";var n=function(){function s(l,u){for(var h=0;h2&&arguments[2]!==void 0?arguments[2]:1,f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,d=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;i(this,s),this.sequence1=l,this.sequence2=u,this.match_score=h,this.mismatch_penalty=f,this.gap_penalty=d,this.iMax=l.length+1,this.jMax=u.length+1,this.grid=new Array(this.iMax);for(var p=0;p=0;l--){var u=this.listeners[l];u.event===a&&u.callback===s&&this.listeners.splice(l,1)}},i.emit=function(a,s){for(var l=0;l{"use strict";o(function(e,r){typeof Ib=="object"&&typeof pF=="object"?pF.exports=r(dF()):typeof define=="function"&&define.amd?define(["layout-base"],r):typeof Ib=="object"?Ib.coseBase=r(dF()):e.coseBase=r(e.layoutBase)},"webpackUniversalModuleDefinition")(Ib,function(t){return(()=>{"use strict";var e={45:(a,s,l)=>{var u={};u.layoutBase=l(551),u.CoSEConstants=l(806),u.CoSEEdge=l(767),u.CoSEGraph=l(880),u.CoSEGraphManager=l(578),u.CoSELayout=l(765),u.CoSENode=l(991),u.ConstraintHandler=l(902),a.exports=u},806:(a,s,l)=>{var u=l(551).FDLayoutConstants;function h(){}o(h,"CoSEConstants");for(var f in u)h[f]=u[f];h.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,h.DEFAULT_RADIAL_SEPARATION=u.DEFAULT_EDGE_LENGTH,h.DEFAULT_COMPONENT_SEPERATION=60,h.TILE=!0,h.TILING_PADDING_VERTICAL=10,h.TILING_PADDING_HORIZONTAL=10,h.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,h.ENFORCE_CONSTRAINTS=!0,h.APPLY_LAYOUT=!0,h.RELAX_MOVEMENT_ON_CONSTRAINTS=!0,h.TREE_REDUCTION_ON_INCREMENTAL=!0,h.PURE_INCREMENTAL=h.DEFAULT_INCREMENTAL,a.exports=h},767:(a,s,l)=>{var u=l(551).FDLayoutEdge;function h(d,p,m){u.call(this,d,p,m)}o(h,"CoSEEdge"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h},880:(a,s,l)=>{var u=l(551).LGraph;function h(d,p,m){u.call(this,d,p,m)}o(h,"CoSEGraph"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h},578:(a,s,l)=>{var u=l(551).LGraphManager;function h(d){u.call(this,d)}o(h,"CoSEGraphManager"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h},765:(a,s,l)=>{var u=l(551).FDLayout,h=l(578),f=l(880),d=l(991),p=l(767),m=l(806),g=l(902),y=l(551).FDLayoutConstants,v=l(551).LayoutConstants,x=l(551).Point,b=l(551).PointD,w=l(551).DimensionD,_=l(551).Layout,T=l(551).Integer,E=l(551).IGeometry,L=l(551).LGraph,S=l(551).Transform,A=l(551).LinkedList;function I(){u.call(this),this.toBeTiled={},this.constraints={}}o(I,"CoSELayout"),I.prototype=Object.create(u.prototype);for(var D in u)I[D]=u[D];I.prototype.newGraphManager=function(){var k=new h(this);return this.graphManager=k,k},I.prototype.newGraph=function(k){return new f(null,this.graphManager,k)},I.prototype.newNode=function(k){return new d(this.graphManager,k)},I.prototype.newEdge=function(k){return new p(null,null,k)},I.prototype.initParameters=function(){u.prototype.initParameters.call(this,arguments),this.isSubLayout||(m.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=m.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=m.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.gravityConstant=y.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=y.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=y.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=y.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1)},I.prototype.initSpringEmbedder=function(){u.prototype.initSpringEmbedder.call(this),this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/y.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=.04,this.coolingAdjuster=1},I.prototype.layout=function(){var k=v.DEFAULT_CREATE_BENDS_AS_NEEDED;return k&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},I.prototype.classicLayout=function(){if(this.nodesWithGravity=this.calculateNodesToApplyGravitationTo(),this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity),this.calcNoOfChildrenForAllNodes(),this.graphManager.calcLowestCommonAncestors(),this.graphManager.calcInclusionTreeDepths(),this.graphManager.getRoot().calcEstimatedSize(),this.calcIdealEdgeLengths(),this.incremental){if(m.TREE_REDUCTION_ON_INCREMENTAL){this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var R=new Set(this.getAllNodes()),C=this.nodesWithGravity.filter(function(P){return R.has(P)});this.graphManager.setAllNodesToApplyGravitation(C)}}else{var k=this.getFlatForest();if(k.length>0)this.positionNodesRadially(k);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var R=new Set(this.getAllNodes()),C=this.nodesWithGravity.filter(function(O){return R.has(O)});this.graphManager.setAllNodesToApplyGravitation(C),this.positionNodesRandomly()}}return Object.keys(this.constraints).length>0&&(g.handleConstraints(this),this.initConstraintVariables()),this.initSpringEmbedder(),m.APPLY_LAYOUT&&this.runSpringEmbedder(),!0},I.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%y.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var k=new Set(this.getAllNodes()),R=this.nodesWithGravity.filter(function(N){return k.has(N)});this.graphManager.setAllNodesToApplyGravitation(R),this.graphManager.updateBounds(),this.updateGrid(),m.PURE_INCREMENTAL?this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL/2:this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),m.PURE_INCREMENTAL?this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL/2*((100-this.afterGrowthIterations)/100):this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var C=!this.isTreeGrowing&&!this.isGrowthFinished,O=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(C,O),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},I.prototype.getPositionsData=function(){for(var k=this.graphManager.getAllNodes(),R={},C=0;C0&&this.updateDisplacements();for(var C=0;C0&&(O.fixedNodeWeight=P)}}if(this.constraints.relativePlacementConstraint){var F=new Map,B=new Map;if(this.dummyToNodeForVerticalAlignment=new Map,this.dummyToNodeForHorizontalAlignment=new Map,this.fixedNodesOnHorizontal=new Set,this.fixedNodesOnVertical=new Set,this.fixedNodeSet.forEach(function(ee){k.fixedNodesOnHorizontal.add(ee),k.fixedNodesOnVertical.add(ee)}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var G=this.constraints.alignmentConstraint.vertical,C=0;C=2*ee.length/3;q--)J=Math.floor(Math.random()*(q+1)),H=ee[q],ee[q]=ee[J],ee[J]=H;return ee},this.nodesInRelativeHorizontal=[],this.nodesInRelativeVertical=[],this.nodeToRelativeConstraintMapHorizontal=new Map,this.nodeToRelativeConstraintMapVertical=new Map,this.nodeToTempPositionMapHorizontal=new Map,this.nodeToTempPositionMapVertical=new Map,this.constraints.relativePlacementConstraint.forEach(function(ee){if(ee.left){var J=F.has(ee.left)?F.get(ee.left):ee.left,H=F.has(ee.right)?F.get(ee.right):ee.right;k.nodesInRelativeHorizontal.includes(J)||(k.nodesInRelativeHorizontal.push(J),k.nodeToRelativeConstraintMapHorizontal.set(J,[]),k.dummyToNodeForVerticalAlignment.has(J)?k.nodeToTempPositionMapHorizontal.set(J,k.idToNodeMap.get(k.dummyToNodeForVerticalAlignment.get(J)[0]).getCenterX()):k.nodeToTempPositionMapHorizontal.set(J,k.idToNodeMap.get(J).getCenterX())),k.nodesInRelativeHorizontal.includes(H)||(k.nodesInRelativeHorizontal.push(H),k.nodeToRelativeConstraintMapHorizontal.set(H,[]),k.dummyToNodeForVerticalAlignment.has(H)?k.nodeToTempPositionMapHorizontal.set(H,k.idToNodeMap.get(k.dummyToNodeForVerticalAlignment.get(H)[0]).getCenterX()):k.nodeToTempPositionMapHorizontal.set(H,k.idToNodeMap.get(H).getCenterX())),k.nodeToRelativeConstraintMapHorizontal.get(J).push({right:H,gap:ee.gap}),k.nodeToRelativeConstraintMapHorizontal.get(H).push({left:J,gap:ee.gap})}else{var q=B.has(ee.top)?B.get(ee.top):ee.top,Q=B.has(ee.bottom)?B.get(ee.bottom):ee.bottom;k.nodesInRelativeVertical.includes(q)||(k.nodesInRelativeVertical.push(q),k.nodeToRelativeConstraintMapVertical.set(q,[]),k.dummyToNodeForHorizontalAlignment.has(q)?k.nodeToTempPositionMapVertical.set(q,k.idToNodeMap.get(k.dummyToNodeForHorizontalAlignment.get(q)[0]).getCenterY()):k.nodeToTempPositionMapVertical.set(q,k.idToNodeMap.get(q).getCenterY())),k.nodesInRelativeVertical.includes(Q)||(k.nodesInRelativeVertical.push(Q),k.nodeToRelativeConstraintMapVertical.set(Q,[]),k.dummyToNodeForHorizontalAlignment.has(Q)?k.nodeToTempPositionMapVertical.set(Q,k.idToNodeMap.get(k.dummyToNodeForHorizontalAlignment.get(Q)[0]).getCenterY()):k.nodeToTempPositionMapVertical.set(Q,k.idToNodeMap.get(Q).getCenterY())),k.nodeToRelativeConstraintMapVertical.get(q).push({bottom:Q,gap:ee.gap}),k.nodeToRelativeConstraintMapVertical.get(Q).push({top:q,gap:ee.gap})}});else{var W=new Map,Z=new Map;this.constraints.relativePlacementConstraint.forEach(function(ee){if(ee.left){var J=F.has(ee.left)?F.get(ee.left):ee.left,H=F.has(ee.right)?F.get(ee.right):ee.right;W.has(J)?W.get(J).push(H):W.set(J,[H]),W.has(H)?W.get(H).push(J):W.set(H,[J])}else{var q=B.has(ee.top)?B.get(ee.top):ee.top,Q=B.has(ee.bottom)?B.get(ee.bottom):ee.bottom;Z.has(q)?Z.get(q).push(Q):Z.set(q,[Q]),Z.has(Q)?Z.get(Q).push(q):Z.set(Q,[q])}});var j=o(function(J,H){var q=[],Q=[],ae=new A,ue=new Set,ce=0;return J.forEach(function(te,Ne){if(!ue.has(Ne)){q[ce]=[],Q[ce]=!1;var se=Ne;for(ae.push(se),ue.add(se),q[ce].push(se);ae.length!=0;){se=ae.shift(),H.has(se)&&(Q[ce]=!0);var ke=J.get(se);ke.forEach(function(Re){ue.has(Re)||(ae.push(Re),ue.add(Re),q[ce].push(Re))})}ce++}}),{components:q,isFixed:Q}},"constructComponents"),oe=j(W,k.fixedNodesOnHorizontal);this.componentsOnHorizontal=oe.components,this.fixedComponentsOnHorizontal=oe.isFixed;var K=j(Z,k.fixedNodesOnVertical);this.componentsOnVertical=K.components,this.fixedComponentsOnVertical=K.isFixed}}},I.prototype.updateDisplacements=function(){var k=this;if(this.constraints.fixedNodeConstraint&&this.constraints.fixedNodeConstraint.forEach(function(K){var ee=k.idToNodeMap.get(K.nodeId);ee.displacementX=0,ee.displacementY=0}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var R=this.constraints.alignmentConstraint.vertical,C=0;C1){var B;for(B=0;BO&&(O=Math.floor(F.y)),P=Math.floor(F.x+m.DEFAULT_COMPONENT_SEPERATION)}this.transform(new b(v.WORLD_CENTER_X-F.x/2,v.WORLD_CENTER_Y-F.y/2))},I.radialLayout=function(k,R,C){var O=Math.max(this.maxDiagonalInTree(k),m.DEFAULT_RADIAL_SEPARATION);I.branchRadialLayout(R,null,0,359,0,O);var N=L.calculateBounds(k),P=new S;P.setDeviceOrgX(N.getMinX()),P.setDeviceOrgY(N.getMinY()),P.setWorldOrgX(C.x),P.setWorldOrgY(C.y);for(var F=0;F1;){var q=H[0];H.splice(0,1);var Q=j.indexOf(q);Q>=0&&j.splice(Q,1),ee--,oe--}R!=null?J=(j.indexOf(H[0])+1)%ee:J=0;for(var ae=Math.abs(O-C)/oe,ue=J;K!=oe;ue=++ue%ee){var ce=j[ue].getOtherEnd(k);if(ce!=R){var te=(C+K*ae)%360,Ne=(te+ae)%360;I.branchRadialLayout(ce,k,te,Ne,N+P,P),K++}}},I.maxDiagonalInTree=function(k){for(var R=T.MIN_VALUE,C=0;CR&&(R=N)}return R},I.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},I.prototype.groupZeroDegreeMembers=function(){var k=this,R={};this.memberGroups={},this.idToDummyNode={};for(var C=[],O=this.graphManager.getAllNodes(),N=0;N"u"&&(R[B]=[]),R[B]=R[B].concat(P)}Object.keys(R).forEach(function(G){if(R[G].length>1){var z="DummyCompound_"+G;k.memberGroups[z]=R[G];var W=R[G][0].getParent(),Z=new d(k.graphManager);Z.id=z,Z.paddingLeft=W.paddingLeft||0,Z.paddingRight=W.paddingRight||0,Z.paddingBottom=W.paddingBottom||0,Z.paddingTop=W.paddingTop||0,k.idToDummyNode[z]=Z;var j=k.getGraphManager().add(k.newGraph(),Z),oe=W.getChild();oe.add(Z);for(var K=0;KN?(O.rect.x-=(O.labelWidth-N)/2,O.setWidth(O.labelWidth),O.labelMarginLeft=(O.labelWidth-N)/2):O.labelPosHorizontal=="right"&&O.setWidth(N+O.labelWidth)),O.labelHeight&&(O.labelPosVertical=="top"?(O.rect.y-=O.labelHeight,O.setHeight(P+O.labelHeight),O.labelMarginTop=O.labelHeight):O.labelPosVertical=="center"&&O.labelHeight>P?(O.rect.y-=(O.labelHeight-P)/2,O.setHeight(O.labelHeight),O.labelMarginTop=(O.labelHeight-P)/2):O.labelPosVertical=="bottom"&&O.setHeight(P+O.labelHeight))}})},I.prototype.repopulateCompounds=function(){for(var k=this.compoundOrder.length-1;k>=0;k--){var R=this.compoundOrder[k],C=R.id,O=R.paddingLeft,N=R.paddingTop,P=R.labelMarginLeft,F=R.labelMarginTop;this.adjustLocations(this.tiledMemberPack[C],R.rect.x,R.rect.y,O,N,P,F)}},I.prototype.repopulateZeroDegreeMembers=function(){var k=this,R=this.tiledZeroDegreePack;Object.keys(R).forEach(function(C){var O=k.idToDummyNode[C],N=O.paddingLeft,P=O.paddingTop,F=O.labelMarginLeft,B=O.labelMarginTop;k.adjustLocations(R[C],O.rect.x,O.rect.y,N,P,F,B)})},I.prototype.getToBeTiled=function(k){var R=k.id;if(this.toBeTiled[R]!=null)return this.toBeTiled[R];var C=k.getChild();if(C==null)return this.toBeTiled[R]=!1,!1;for(var O=C.getNodes(),N=0;N0)return this.toBeTiled[R]=!1,!1;if(P.getChild()==null){this.toBeTiled[P.id]=!1;continue}if(!this.getToBeTiled(P))return this.toBeTiled[R]=!1,!1}return this.toBeTiled[R]=!0,!0},I.prototype.getNodeDegree=function(k){for(var R=k.id,C=k.getEdges(),O=0,N=0;NW&&(W=j.rect.height)}C+=W+k.verticalPadding}},I.prototype.tileCompoundMembers=function(k,R){var C=this;this.tiledMemberPack=[],Object.keys(k).forEach(function(O){var N=R[O];if(C.tiledMemberPack[O]=C.tileNodes(k[O],N.paddingLeft+N.paddingRight),N.rect.width=C.tiledMemberPack[O].width,N.rect.height=C.tiledMemberPack[O].height,N.setCenter(C.tiledMemberPack[O].centerX,C.tiledMemberPack[O].centerY),N.labelMarginLeft=0,N.labelMarginTop=0,m.NODE_DIMENSIONS_INCLUDE_LABELS){var P=N.rect.width,F=N.rect.height;N.labelWidth&&(N.labelPosHorizontal=="left"?(N.rect.x-=N.labelWidth,N.setWidth(P+N.labelWidth),N.labelMarginLeft=N.labelWidth):N.labelPosHorizontal=="center"&&N.labelWidth>P?(N.rect.x-=(N.labelWidth-P)/2,N.setWidth(N.labelWidth),N.labelMarginLeft=(N.labelWidth-P)/2):N.labelPosHorizontal=="right"&&N.setWidth(P+N.labelWidth)),N.labelHeight&&(N.labelPosVertical=="top"?(N.rect.y-=N.labelHeight,N.setHeight(F+N.labelHeight),N.labelMarginTop=N.labelHeight):N.labelPosVertical=="center"&&N.labelHeight>F?(N.rect.y-=(N.labelHeight-F)/2,N.setHeight(N.labelHeight),N.labelMarginTop=(N.labelHeight-F)/2):N.labelPosVertical=="bottom"&&N.setHeight(F+N.labelHeight))}})},I.prototype.tileNodes=function(k,R){var C=this.tileNodesByFavoringDim(k,R,!0),O=this.tileNodesByFavoringDim(k,R,!1),N=this.getOrgRatio(C),P=this.getOrgRatio(O),F;return PB&&(B=K.getWidth())});var G=P/N,z=F/N,W=Math.pow(C-O,2)+4*(G+O)*(z+C)*N,Z=(O-C+Math.sqrt(W))/(2*(G+O)),j;R?(j=Math.ceil(Z),j==Z&&j++):j=Math.floor(Z);var oe=j*(G+O)-O;return B>oe&&(oe=B),oe+=O*2,oe},I.prototype.tileNodesByFavoringDim=function(k,R,C){var O=m.TILING_PADDING_VERTICAL,N=m.TILING_PADDING_HORIZONTAL,P=m.TILING_COMPARE_BY,F={rows:[],rowWidth:[],rowHeight:[],width:0,height:R,verticalPadding:O,horizontalPadding:N,centerX:0,centerY:0};P&&(F.idealRowWidth=this.calcIdealRowWidth(k,C));var B=o(function(ee){return ee.rect.width*ee.rect.height},"getNodeArea"),G=o(function(ee,J){return B(J)-B(ee)},"areaCompareFcn");k.sort(function(K,ee){var J=G;return F.idealRowWidth?(J=P,J(K.id,ee.id)):J(K,ee)});for(var z=0,W=0,Z=0;Z0&&(F+=k.horizontalPadding),k.rowWidth[C]=F,k.width0&&(B+=k.verticalPadding);var G=0;B>k.rowHeight[C]&&(G=k.rowHeight[C],k.rowHeight[C]=B,G=k.rowHeight[C]-G),k.height+=G,k.rows[C].push(R)},I.prototype.getShortestRowIndex=function(k){for(var R=-1,C=Number.MAX_VALUE,O=0;OC&&(R=O,C=k.rowWidth[O]);return R},I.prototype.canAddHorizontal=function(k,R,C){if(k.idealRowWidth){var O=k.rows.length-1,N=k.rowWidth[O];return N+R+k.horizontalPadding<=k.idealRowWidth}var P=this.getShortestRowIndex(k);if(P<0)return!0;var F=k.rowWidth[P];if(F+k.horizontalPadding+R<=k.width)return!0;var B=0;k.rowHeight[P]0&&(B=C+k.verticalPadding-k.rowHeight[P]);var G;k.width-F>=R+k.horizontalPadding?G=(k.height+B)/(F+R+k.horizontalPadding):G=(k.height+B)/k.width,B=C+k.verticalPadding;var z;return k.widthP&&R!=C){O.splice(-1,1),k.rows[C].push(N),k.rowWidth[R]=k.rowWidth[R]-P,k.rowWidth[C]=k.rowWidth[C]+P,k.width=k.rowWidth[instance.getLongestRowIndex(k)];for(var F=Number.MIN_VALUE,B=0;BF&&(F=O[B].height);R>0&&(F+=k.verticalPadding);var G=k.rowHeight[R]+k.rowHeight[C];k.rowHeight[R]=F,k.rowHeight[C]0)for(var oe=N;oe<=P;oe++)j[0]+=this.grid[oe][F-1].length+this.grid[oe][F].length-1;if(P0)for(var oe=F;oe<=B;oe++)j[3]+=this.grid[N-1][oe].length+this.grid[N][oe].length-1;for(var K=T.MAX_VALUE,ee,J,H=0;H{var u=l(551).FDLayoutNode,h=l(551).IMath;function f(p,m,g,y){u.call(this,p,m,g,y)}o(f,"CoSENode"),f.prototype=Object.create(u.prototype);for(var d in u)f[d]=u[d];f.prototype.calculateDisplacement=function(){var p=this.graphManager.getLayout();this.getChild()!=null&&this.fixedNodeWeight?(this.displacementX+=p.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.fixedNodeWeight,this.displacementY+=p.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.fixedNodeWeight):(this.displacementX+=p.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY+=p.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren),Math.abs(this.displacementX)>p.coolingFactor*p.maxNodeDisplacement&&(this.displacementX=p.coolingFactor*p.maxNodeDisplacement*h.sign(this.displacementX)),Math.abs(this.displacementY)>p.coolingFactor*p.maxNodeDisplacement&&(this.displacementY=p.coolingFactor*p.maxNodeDisplacement*h.sign(this.displacementY)),this.child&&this.child.getNodes().length>0&&this.propogateDisplacementToChildren(this.displacementX,this.displacementY)},f.prototype.propogateDisplacementToChildren=function(p,m){for(var g=this.getChild().getNodes(),y,v=0;v{function u(g){if(Array.isArray(g)){for(var y=0,v=Array(g.length);y0){var yt=0;rt.forEach(function(tt){Te=="horizontal"?(me.set(tt,x.has(tt)?b[x.get(tt)]:Ee.get(tt)),yt+=me.get(tt)):(me.set(tt,x.has(tt)?w[x.get(tt)]:Ee.get(tt)),yt+=me.get(tt))}),yt=yt/rt.length,vt.forEach(function(tt){ie.has(tt)||me.set(tt,yt)})}else{var Ue=0;vt.forEach(function(tt){Te=="horizontal"?Ue+=x.has(tt)?b[x.get(tt)]:Ee.get(tt):Ue+=x.has(tt)?w[x.get(tt)]:Ee.get(tt)}),Ue=Ue/vt.length,vt.forEach(function(tt){me.set(tt,Ue)})}});for(var et=o(function(){var rt=Oe.shift(),yt=U.get(rt);yt.forEach(function(Ue){if(me.get(Ue.id)tt&&(tt=pt),Btht&&(ht=Bt)}}catch(On){er=!0,dt=On}finally{try{!Et&&Je.return&&Je.return()}finally{if(er)throw dt}}var Tr=(yt+tt)/2-(Ue+ht)/2,yr=!0,or=!1,ln=void 0;try{for(var Or=vt[Symbol.iterator](),ii;!(yr=(ii=Or.next()).done);yr=!0){var mn=ii.value;me.set(mn,me.get(mn)+Tr)}}catch(On){or=!0,ln=On}finally{try{!yr&&Or.return&&Or.return()}finally{if(or)throw ln}}})}return me},"findAppropriatePositionForRelativePlacement"),D=o(function(U){var Te=0,ie=0,Ee=0,Ae=0;if(U.forEach(function(He){He.left?b[x.get(He.left)]-b[x.get(He.right)]>=0?Te++:ie++:w[x.get(He.top)]-w[x.get(He.bottom)]>=0?Ee++:Ae++}),Te>ie&&Ee>Ae)for(var Ge=0;Geie)for(var Be=0;BeAe)for(var me=0;me1)y.fixedNodeConstraint.forEach(function(ve,U){O[U]=[ve.position.x,ve.position.y],N[U]=[b[x.get(ve.nodeId)],w[x.get(ve.nodeId)]]}),P=!0;else if(y.alignmentConstraint)(function(){var ve=0;if(y.alignmentConstraint.vertical){for(var U=y.alignmentConstraint.vertical,Te=o(function(me){var He=new Set;U[me].forEach(function(bt){He.add(bt)});var Oe=new Set([].concat(u(He)).filter(function(bt){return B.has(bt)})),et=void 0;Oe.size>0?et=b[x.get(Oe.values().next().value)]:et=A(He).x,U[me].forEach(function(bt){O[ve]=[et,w[x.get(bt)]],N[ve]=[b[x.get(bt)],w[x.get(bt)]],ve++})},"_loop2"),ie=0;ie0?et=b[x.get(Oe.values().next().value)]:et=A(He).y,Ee[me].forEach(function(bt){O[ve]=[b[x.get(bt)],et],N[ve]=[b[x.get(bt)],w[x.get(bt)]],ve++})},"_loop3"),Ge=0;GeZ&&(Z=W[oe].length,j=oe);if(Z0){var Pe={x:0,y:0};y.fixedNodeConstraint.forEach(function(ve,U){var Te={x:b[x.get(ve.nodeId)],y:w[x.get(ve.nodeId)]},ie=ve.position,Ee=S(ie,Te);Pe.x+=Ee.x,Pe.y+=Ee.y}),Pe.x/=y.fixedNodeConstraint.length,Pe.y/=y.fixedNodeConstraint.length,b.forEach(function(ve,U){b[U]+=Pe.x}),w.forEach(function(ve,U){w[U]+=Pe.y}),y.fixedNodeConstraint.forEach(function(ve){b[x.get(ve.nodeId)]=ve.position.x,w[x.get(ve.nodeId)]=ve.position.y})}if(y.alignmentConstraint){if(y.alignmentConstraint.vertical)for(var Ie=y.alignmentConstraint.vertical,$e=o(function(U){var Te=new Set;Ie[U].forEach(function(Ae){Te.add(Ae)});var ie=new Set([].concat(u(Te)).filter(function(Ae){return B.has(Ae)})),Ee=void 0;ie.size>0?Ee=b[x.get(ie.values().next().value)]:Ee=A(Te).x,Te.forEach(function(Ae){B.has(Ae)||(b[x.get(Ae)]=Ee)})},"_loop4"),ye=0;ye0?Ee=w[x.get(ie.values().next().value)]:Ee=A(Te).y,Te.forEach(function(Ae){B.has(Ae)||(w[x.get(Ae)]=Ee)})},"_loop5"),he=0;he{a.exports=t}},r={};function n(a){var s=r[a];if(s!==void 0)return s.exports;var l=r[a]={exports:{}};return e[a](l,l.exports,n),l.exports}o(n,"__webpack_require__");var i=n(45);return i})()})});var s2e=Ei((Ob,gF)=>{"use strict";o(function(e,r){typeof Ob=="object"&&typeof gF=="object"?gF.exports=r(mF()):typeof define=="function"&&define.amd?define(["cose-base"],r):typeof Ob=="object"?Ob.cytoscapeFcose=r(mF()):e.cytoscapeFcose=r(e.coseBase)},"webpackUniversalModuleDefinition")(Ob,function(t){return(()=>{"use strict";var e={658:a=>{a.exports=Object.assign!=null?Object.assign.bind(Object):function(s){for(var l=arguments.length,u=Array(l>1?l-1:0),h=1;h{var u=function(){function d(p,m){var g=[],y=!0,v=!1,x=void 0;try{for(var b=p[Symbol.iterator](),w;!(y=(w=b.next()).done)&&(g.push(w.value),!(m&&g.length===m));y=!0);}catch(_){v=!0,x=_}finally{try{!y&&b.return&&b.return()}finally{if(v)throw x}}return g}return o(d,"sliceIterator"),function(p,m){if(Array.isArray(p))return p;if(Symbol.iterator in Object(p))return d(p,m);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),h=l(140).layoutBase.LinkedList,f={};f.getTopMostNodes=function(d){for(var p={},m=0;m0&&P.merge(z)});for(var F=0;F1){w=x[0],_=w.connectedEdges().length,x.forEach(function(N){N.connectedEdges().length<_&&(_=N.connectedEdges().length,w=N)}),L.push(w.id());var O=d.collection();O.merge(x[0]),x.forEach(function(N){O.merge(N)}),x=[],m=m.difference(O),E++}},"_loop");do A();while(!T);return g&&L.length>0&&g.set("dummy"+(g.size+1),L),S},f.relocateComponent=function(d,p,m){if(!m.fixedNodeConstraint){var g=Number.POSITIVE_INFINITY,y=Number.NEGATIVE_INFINITY,v=Number.POSITIVE_INFINITY,x=Number.NEGATIVE_INFINITY;if(m.quality=="draft"){var b=!0,w=!1,_=void 0;try{for(var T=p.nodeIndexes[Symbol.iterator](),E;!(b=(E=T.next()).done);b=!0){var L=E.value,S=u(L,2),A=S[0],I=S[1],D=m.cy.getElementById(A);if(D){var k=D.boundingBox(),R=p.xCoords[I]-k.w/2,C=p.xCoords[I]+k.w/2,O=p.yCoords[I]-k.h/2,N=p.yCoords[I]+k.h/2;Ry&&(y=C),Ox&&(x=N)}}}catch(z){w=!0,_=z}finally{try{!b&&T.return&&T.return()}finally{if(w)throw _}}var P=d.x-(y+g)/2,F=d.y-(x+v)/2;p.xCoords=p.xCoords.map(function(z){return z+P}),p.yCoords=p.yCoords.map(function(z){return z+F})}else{Object.keys(p).forEach(function(z){var W=p[z],Z=W.getRect().x,j=W.getRect().x+W.getRect().width,oe=W.getRect().y,K=W.getRect().y+W.getRect().height;Zy&&(y=j),oex&&(x=K)});var B=d.x-(y+g)/2,G=d.y-(x+v)/2;Object.keys(p).forEach(function(z){var W=p[z];W.setCenter(W.getCenterX()+B,W.getCenterY()+G)})}}},f.calcBoundingBox=function(d,p,m,g){for(var y=Number.MAX_SAFE_INTEGER,v=Number.MIN_SAFE_INTEGER,x=Number.MAX_SAFE_INTEGER,b=Number.MIN_SAFE_INTEGER,w=void 0,_=void 0,T=void 0,E=void 0,L=d.descendants().not(":parent"),S=L.length,A=0;Aw&&(y=w),v<_&&(v=_),x>T&&(x=T),b{var u=l(548),h=l(140).CoSELayout,f=l(140).CoSENode,d=l(140).layoutBase.PointD,p=l(140).layoutBase.DimensionD,m=l(140).layoutBase.LayoutConstants,g=l(140).layoutBase.FDLayoutConstants,y=l(140).CoSEConstants,v=o(function(b,w){var _=b.cy,T=b.eles,E=T.nodes(),L=T.edges(),S=void 0,A=void 0,I=void 0,D={};b.randomize&&(S=w.nodeIndexes,A=w.xCoords,I=w.yCoords);var k=o(function(z){return typeof z=="function"},"isFn"),R=o(function(z,W){return k(z)?z(W):z},"optFn"),C=u.calcParentsWithoutChildren(_,T),O=o(function G(z,W,Z,j){for(var oe=W.length,K=0;K0){var ae=void 0;ae=Z.getGraphManager().add(Z.newGraph(),H),G(ae,J,Z,j)}}},"processChildrenList"),N=o(function(z,W,Z){for(var j=0,oe=0,K=0;K0?y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=j/oe:k(b.idealEdgeLength)?y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=50:y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=b.idealEdgeLength,y.MIN_REPULSION_DIST=g.MIN_REPULSION_DIST=g.DEFAULT_EDGE_LENGTH/10,y.DEFAULT_RADIAL_SEPARATION=g.DEFAULT_EDGE_LENGTH)},"processEdges"),P=o(function(z,W){W.fixedNodeConstraint&&(z.constraints.fixedNodeConstraint=W.fixedNodeConstraint),W.alignmentConstraint&&(z.constraints.alignmentConstraint=W.alignmentConstraint),W.relativePlacementConstraint&&(z.constraints.relativePlacementConstraint=W.relativePlacementConstraint)},"processConstraints");b.nestingFactor!=null&&(y.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=g.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=b.nestingFactor),b.gravity!=null&&(y.DEFAULT_GRAVITY_STRENGTH=g.DEFAULT_GRAVITY_STRENGTH=b.gravity),b.numIter!=null&&(y.MAX_ITERATIONS=g.MAX_ITERATIONS=b.numIter),b.gravityRange!=null&&(y.DEFAULT_GRAVITY_RANGE_FACTOR=g.DEFAULT_GRAVITY_RANGE_FACTOR=b.gravityRange),b.gravityCompound!=null&&(y.DEFAULT_COMPOUND_GRAVITY_STRENGTH=g.DEFAULT_COMPOUND_GRAVITY_STRENGTH=b.gravityCompound),b.gravityRangeCompound!=null&&(y.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=g.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=b.gravityRangeCompound),b.initialEnergyOnIncremental!=null&&(y.DEFAULT_COOLING_FACTOR_INCREMENTAL=g.DEFAULT_COOLING_FACTOR_INCREMENTAL=b.initialEnergyOnIncremental),b.tilingCompareBy!=null&&(y.TILING_COMPARE_BY=b.tilingCompareBy),b.quality=="proof"?m.QUALITY=2:m.QUALITY=0,y.NODE_DIMENSIONS_INCLUDE_LABELS=g.NODE_DIMENSIONS_INCLUDE_LABELS=m.NODE_DIMENSIONS_INCLUDE_LABELS=b.nodeDimensionsIncludeLabels,y.DEFAULT_INCREMENTAL=g.DEFAULT_INCREMENTAL=m.DEFAULT_INCREMENTAL=!b.randomize,y.ANIMATE=g.ANIMATE=m.ANIMATE=b.animate,y.TILE=b.tile,y.TILING_PADDING_VERTICAL=typeof b.tilingPaddingVertical=="function"?b.tilingPaddingVertical.call():b.tilingPaddingVertical,y.TILING_PADDING_HORIZONTAL=typeof b.tilingPaddingHorizontal=="function"?b.tilingPaddingHorizontal.call():b.tilingPaddingHorizontal,y.DEFAULT_INCREMENTAL=g.DEFAULT_INCREMENTAL=m.DEFAULT_INCREMENTAL=!0,y.PURE_INCREMENTAL=!b.randomize,m.DEFAULT_UNIFORM_LEAF_NODE_SIZES=b.uniformNodeDimensions,b.step=="transformed"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,y.ENFORCE_CONSTRAINTS=!1,y.APPLY_LAYOUT=!1),b.step=="enforced"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!0,y.APPLY_LAYOUT=!1),b.step=="cose"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!1,y.APPLY_LAYOUT=!0),b.step=="all"&&(b.randomize?y.TRANSFORM_ON_CONSTRAINT_HANDLING=!0:y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!0,y.APPLY_LAYOUT=!0),b.fixedNodeConstraint||b.alignmentConstraint||b.relativePlacementConstraint?y.TREE_REDUCTION_ON_INCREMENTAL=!1:y.TREE_REDUCTION_ON_INCREMENTAL=!0;var F=new h,B=F.newGraphManager();return O(B.addRoot(),u.getTopMostNodes(E),F,b),N(F,B,L),P(F,b),F.runLayout(),D},"coseLayout");a.exports={coseLayout:v}},212:(a,s,l)=>{var u=function(){function b(w,_){for(var T=0;T<_.length;T++){var E=_[T];E.enumerable=E.enumerable||!1,E.configurable=!0,"value"in E&&(E.writable=!0),Object.defineProperty(w,E.key,E)}}return o(b,"defineProperties"),function(w,_,T){return _&&b(w.prototype,_),T&&b(w,T),w}}();function h(b,w){if(!(b instanceof w))throw new TypeError("Cannot call a class as a function")}o(h,"_classCallCheck");var f=l(658),d=l(548),p=l(657),m=p.spectralLayout,g=l(816),y=g.coseLayout,v=Object.freeze({quality:"default",randomize:!0,animate:!0,animationDuration:1e3,animationEasing:void 0,fit:!0,padding:30,nodeDimensionsIncludeLabels:!1,uniformNodeDimensions:!1,packComponents:!0,step:"all",samplingType:!0,sampleSize:25,nodeSeparation:75,piTol:1e-7,nodeRepulsion:o(function(w){return 4500},"nodeRepulsion"),idealEdgeLength:o(function(w){return 50},"idealEdgeLength"),edgeElasticity:o(function(w){return .45},"edgeElasticity"),nestingFactor:.1,gravity:.25,numIter:2500,tile:!0,tilingCompareBy:void 0,tilingPaddingVertical:10,tilingPaddingHorizontal:10,gravityRangeCompound:1.5,gravityCompound:1,gravityRange:3.8,initialEnergyOnIncremental:.3,fixedNodeConstraint:void 0,alignmentConstraint:void 0,relativePlacementConstraint:void 0,ready:o(function(){},"ready"),stop:o(function(){},"stop")}),x=function(){function b(w){h(this,b),this.options=f({},v,w)}return o(b,"Layout"),u(b,[{key:"run",value:o(function(){var _=this,T=this.options,E=T.cy,L=T.eles,S=[],A=void 0,I=void 0,D=[],k=void 0,R=[];T.fixedNodeConstraint&&(!Array.isArray(T.fixedNodeConstraint)||T.fixedNodeConstraint.length==0)&&(T.fixedNodeConstraint=void 0),T.alignmentConstraint&&(T.alignmentConstraint.vertical&&(!Array.isArray(T.alignmentConstraint.vertical)||T.alignmentConstraint.vertical.length==0)&&(T.alignmentConstraint.vertical=void 0),T.alignmentConstraint.horizontal&&(!Array.isArray(T.alignmentConstraint.horizontal)||T.alignmentConstraint.horizontal.length==0)&&(T.alignmentConstraint.horizontal=void 0)),T.relativePlacementConstraint&&(!Array.isArray(T.relativePlacementConstraint)||T.relativePlacementConstraint.length==0)&&(T.relativePlacementConstraint=void 0);var C=T.fixedNodeConstraint||T.alignmentConstraint||T.relativePlacementConstraint;C&&(T.tile=!1,T.packComponents=!1);var O=void 0,N=!1;if(E.layoutUtilities&&T.packComponents&&(O=E.layoutUtilities("get"),O||(O=E.layoutUtilities()),N=!0),L.nodes().length>0)if(N){var B=d.getTopMostNodes(T.eles.nodes());if(k=d.connectComponents(E,T.eles,B),k.forEach(function(se){var ke=se.boundingBox();R.push({x:ke.x1+ke.w/2,y:ke.y1+ke.h/2})}),T.randomize&&k.forEach(function(se){T.eles=se,S.push(m(T))}),T.quality=="default"||T.quality=="proof"){var G=E.collection();if(T.tile){var z=new Map,W=[],Z=[],j=0,oe={nodeIndexes:z,xCoords:W,yCoords:Z},K=[];if(k.forEach(function(se,ke){se.edges().length==0&&(se.nodes().forEach(function(Re,Ce){G.merge(se.nodes()[Ce]),Re.isParent()||(oe.nodeIndexes.set(se.nodes()[Ce].id(),j++),oe.xCoords.push(se.nodes()[0].position().x),oe.yCoords.push(se.nodes()[0].position().y))}),K.push(ke))}),G.length>1){var ee=G.boundingBox();R.push({x:ee.x1+ee.w/2,y:ee.y1+ee.h/2}),k.push(G),S.push(oe);for(var J=K.length-1;J>=0;J--)k.splice(K[J],1),S.splice(K[J],1),R.splice(K[J],1)}}k.forEach(function(se,ke){T.eles=se,D.push(y(T,S[ke])),d.relocateComponent(R[ke],D[ke],T)})}else k.forEach(function(se,ke){d.relocateComponent(R[ke],S[ke],T)});var H=new Set;if(k.length>1){var q=[],Q=L.filter(function(se){return se.css("display")=="none"});k.forEach(function(se,ke){var Re=void 0;if(T.quality=="draft"&&(Re=S[ke].nodeIndexes),se.nodes().not(Q).length>0){var Ce={};Ce.edges=[],Ce.nodes=[];var Pe=void 0;se.nodes().not(Q).forEach(function(Ie){if(T.quality=="draft")if(!Ie.isParent())Pe=Re.get(Ie.id()),Ce.nodes.push({x:S[ke].xCoords[Pe]-Ie.boundingbox().w/2,y:S[ke].yCoords[Pe]-Ie.boundingbox().h/2,width:Ie.boundingbox().w,height:Ie.boundingbox().h});else{var $e=d.calcBoundingBox(Ie,S[ke].xCoords,S[ke].yCoords,Re);Ce.nodes.push({x:$e.topLeftX,y:$e.topLeftY,width:$e.width,height:$e.height})}else D[ke][Ie.id()]&&Ce.nodes.push({x:D[ke][Ie.id()].getLeft(),y:D[ke][Ie.id()].getTop(),width:D[ke][Ie.id()].getWidth(),height:D[ke][Ie.id()].getHeight()})}),se.edges().forEach(function(Ie){var $e=Ie.source(),ye=Ie.target();if($e.css("display")!="none"&&ye.css("display")!="none")if(T.quality=="draft"){var X=Re.get($e.id()),fe=Re.get(ye.id()),he=[],ge=[];if($e.isParent()){var ne=d.calcBoundingBox($e,S[ke].xCoords,S[ke].yCoords,Re);he.push(ne.topLeftX+ne.width/2),he.push(ne.topLeftY+ne.height/2)}else he.push(S[ke].xCoords[X]),he.push(S[ke].yCoords[X]);if(ye.isParent()){var ve=d.calcBoundingBox(ye,S[ke].xCoords,S[ke].yCoords,Re);ge.push(ve.topLeftX+ve.width/2),ge.push(ve.topLeftY+ve.height/2)}else ge.push(S[ke].xCoords[fe]),ge.push(S[ke].yCoords[fe]);Ce.edges.push({startX:he[0],startY:he[1],endX:ge[0],endY:ge[1]})}else D[ke][$e.id()]&&D[ke][ye.id()]&&Ce.edges.push({startX:D[ke][$e.id()].getCenterX(),startY:D[ke][$e.id()].getCenterY(),endX:D[ke][ye.id()].getCenterX(),endY:D[ke][ye.id()].getCenterY()})}),Ce.nodes.length>0&&(q.push(Ce),H.add(ke))}});var ae=O.packComponents(q,T.randomize).shifts;if(T.quality=="draft")S.forEach(function(se,ke){var Re=se.xCoords.map(function(Pe){return Pe+ae[ke].dx}),Ce=se.yCoords.map(function(Pe){return Pe+ae[ke].dy});se.xCoords=Re,se.yCoords=Ce});else{var ue=0;H.forEach(function(se){Object.keys(D[se]).forEach(function(ke){var Re=D[se][ke];Re.setCenter(Re.getCenterX()+ae[ue].dx,Re.getCenterY()+ae[ue].dy)}),ue++})}}}else{var P=T.eles.boundingBox();if(R.push({x:P.x1+P.w/2,y:P.y1+P.h/2}),T.randomize){var F=m(T);S.push(F)}T.quality=="default"||T.quality=="proof"?(D.push(y(T,S[0])),d.relocateComponent(R[0],D[0],T)):d.relocateComponent(R[0],S[0],T)}var ce=o(function(ke,Re){if(T.quality=="default"||T.quality=="proof"){typeof ke=="number"&&(ke=Re);var Ce=void 0,Pe=void 0,Ie=ke.data("id");return D.forEach(function(ye){Ie in ye&&(Ce={x:ye[Ie].getRect().getCenterX(),y:ye[Ie].getRect().getCenterY()},Pe=ye[Ie])}),T.nodeDimensionsIncludeLabels&&(Pe.labelWidth&&(Pe.labelPosHorizontal=="left"?Ce.x+=Pe.labelWidth/2:Pe.labelPosHorizontal=="right"&&(Ce.x-=Pe.labelWidth/2)),Pe.labelHeight&&(Pe.labelPosVertical=="top"?Ce.y+=Pe.labelHeight/2:Pe.labelPosVertical=="bottom"&&(Ce.y-=Pe.labelHeight/2))),Ce==null&&(Ce={x:ke.position("x"),y:ke.position("y")}),{x:Ce.x,y:Ce.y}}else{var $e=void 0;return S.forEach(function(ye){var X=ye.nodeIndexes.get(ke.id());X!=null&&($e={x:ye.xCoords[X],y:ye.yCoords[X]})}),$e==null&&($e={x:ke.position("x"),y:ke.position("y")}),{x:$e.x,y:$e.y}}},"getPositions");if(T.quality=="default"||T.quality=="proof"||T.randomize){var te=d.calcParentsWithoutChildren(E,L),Ne=L.filter(function(se){return se.css("display")=="none"});T.eles=L.not(Ne),L.nodes().not(":parent").not(Ne).layoutPositions(_,T,ce),te.length>0&&te.forEach(function(se){se.position(ce(se))})}else console.log("If randomize option is set to false, then quality option must be 'default' or 'proof'.")},"run")}]),b}();a.exports=x},657:(a,s,l)=>{var u=l(548),h=l(140).layoutBase.Matrix,f=l(140).layoutBase.SVD,d=o(function(m){var g=m.cy,y=m.eles,v=y.nodes(),x=y.nodes(":parent"),b=new Map,w=new Map,_=new Map,T=[],E=[],L=[],S=[],A=[],I=[],D=[],k=[],R=void 0,C=void 0,O=1e8,N=1e-9,P=m.piTol,F=m.samplingType,B=m.nodeSeparation,G=void 0,z=o(function(){for(var Te=0,ie=0,Ee=!1;ie=Ge;){me=Ae[Ge++];for(var vt=T[me],rt=0;rtet&&(et=A[Ue],bt=Ue)}return bt},"BFS"),Z=o(function(Te){var ie=void 0;if(Te){ie=Math.floor(Math.random()*C),R=ie;for(var Ae=0;Ae=1)break;et=Oe}for(var vt=0;vt=1)break;et=Oe}for(var yt=0;yt0&&(ie.isParent()?T[Te].push(_.get(ie.id())):T[Te].push(ie.id()))})});var te=o(function(Te){var ie=w.get(Te),Ee=void 0;b.get(Te).forEach(function(Ae){g.getElementById(Ae).isParent()?Ee=_.get(Ae):Ee=Ae,T[ie].push(Ee),T[w.get(Ee)].push(Te)})},"_loop"),Ne=!0,se=!1,ke=void 0;try{for(var Re=b.keys()[Symbol.iterator](),Ce;!(Ne=(Ce=Re.next()).done);Ne=!0){var Pe=Ce.value;te(Pe)}}catch(U){se=!0,ke=U}finally{try{!Ne&&Re.return&&Re.return()}finally{if(se)throw ke}}C=w.size;var Ie=void 0;if(C>2){G=C{var u=l(212),h=o(function(d){d&&d("layout","fcose",u)},"register");typeof cytoscape<"u"&&h(cytoscape),a.exports=h},140:a=>{a.exports=t}},r={};function n(a){var s=r[a];if(s!==void 0)return s.exports;var l=r[a]={exports:{}};return e[a](l,l.exports,n),l.exports}o(n,"__webpack_require__");var i=n(579);return i})()})});var F1,ap,yF=M(()=>{"use strict";su();F1=o(t=>`${t}`,"wrapIcon"),ap={prefix:"mermaid-architecture",height:80,width:80,icons:{database:{body:F1('')},server:{body:F1('')},disk:{body:F1('')},internet:{body:F1('')},cloud:{body:F1('')},unknown:zS,blank:{body:F1("")}}}});var o2e,l2e,c2e,u2e,h2e=M(()=>{"use strict";su();Vt();Pl();Rb();yF();gS();o2e=o(async function(t,e){let r=Mi("padding"),n=Mi("iconSize"),i=n/2,a=n/6,s=a/2;await Promise.all(e.edges().map(async l=>{let{source:u,sourceDir:h,sourceArrow:f,sourceGroup:d,target:p,targetDir:m,targetArrow:g,targetGroup:y,label:v}=mS(l),{x,y:b}=l[0].sourceEndpoint(),{x:w,y:_}=l[0].midpoint(),{x:T,y:E}=l[0].targetEndpoint(),L=r+4;if(d&&(ys(h)?x+=h==="L"?-L:L:b+=h==="T"?-L:L+18),y&&(ys(m)?T+=m==="L"?-L:L:E+=m==="T"?-L:L+18),!d&&ip.getNode(u)?.type==="junction"&&(ys(h)?x+=h==="L"?i:-i:b+=h==="T"?i:-i),!y&&ip.getNode(p)?.type==="junction"&&(ys(m)?T+=m==="L"?i:-i:E+=m==="T"?i:-i),l[0]._private.rscratch){let S=t.insert("g");if(S.insert("path").attr("d",`M ${x},${b} L ${w},${_} L${T},${E} `).attr("class","edge"),f){let A=ys(h)?Db[h](x,a):x-s,I=nu(h)?Db[h](b,a):b-s;S.insert("polygon").attr("points",uF[h](a)).attr("transform",`translate(${A},${I})`).attr("class","arrow")}if(g){let A=ys(m)?Db[m](T,a):T-s,I=nu(m)?Db[m](E,a):E-s;S.insert("polygon").attr("points",uF[m](a)).attr("transform",`translate(${A},${I})`).attr("class","arrow")}if(v){let A=pS(h,m)?"XY":ys(h)?"X":"Y",I=0;A==="X"?I=Math.abs(x-T):A==="Y"?I=Math.abs(b-E)/1.5:I=Math.abs(x-T)/2;let D=S.append("g");if(await Li(D,v,{useHtmlLabels:!1,width:I,classes:"architecture-service-label"},pe()),D.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle"),A==="X")D.attr("transform","translate("+w+", "+_+")");else if(A==="Y")D.attr("transform","translate("+w+", "+_+") rotate(-90)");else if(A==="XY"){let k=Nb(h,m);if(k&&Kve(k)){let R=D.node().getBoundingClientRect(),[C,O]=Zve(k);D.attr("dominant-baseline","auto").attr("transform",`rotate(${-1*C*O*45})`);let N=D.node().getBoundingClientRect();D.attr("transform",` + translate(${w}, ${_-R.height/2}) + translate(${C*N.width/2}, ${O*N.height/2}) + rotate(${-1*C*O*45}, 0, ${R.height/2}) + `)}}}}}))},"drawEdges"),l2e=o(async function(t,e){let n=Mi("padding")*.75,i=Mi("fontSize"),s=Mi("iconSize")/2;await Promise.all(e.nodes().map(async l=>{let u=Vf(l);if(u.type==="group"){let{h,w:f,x1:d,y1:p}=l.boundingBox();t.append("rect").attr("x",d+s).attr("y",p+s).attr("width",f).attr("height",h).attr("class","node-bkg");let m=t.append("g"),g=d,y=p;if(u.icon){let v=m.append("g");v.html(`${await _o(u.icon,{height:n,width:n,fallbackPrefix:ap.prefix})}`),v.attr("transform","translate("+(g+s+1)+", "+(y+s+1)+")"),g+=n,y+=i/2-1-2}if(u.label){let v=m.append("g");await Li(v,u.label,{useHtmlLabels:!1,width:f,classes:"architecture-service-label"},pe()),v.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","start").attr("text-anchor","start"),v.attr("transform","translate("+(g+s+4)+", "+(y+s+2)+")")}}}))},"drawGroups"),c2e=o(async function(t,e,r){for(let n of r){let i=e.append("g"),a=Mi("iconSize");if(n.title){let h=i.append("g");await Li(h,n.title,{useHtmlLabels:!1,width:a*1.5,classes:"architecture-service-label"},pe()),h.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle"),h.attr("transform","translate("+a/2+", "+a+")")}let s=i.append("g");if(n.icon)s.html(`${await _o(n.icon,{height:a,width:a,fallbackPrefix:ap.prefix})}`);else if(n.iconText){s.html(`${await _o("blank",{height:a,width:a,fallbackPrefix:ap.prefix})}`);let d=s.append("g").append("foreignObject").attr("width",a).attr("height",a).append("div").attr("class","node-icon-text").attr("style",`height: ${a}px;`).append("div").html(n.iconText),p=parseInt(window.getComputedStyle(d.node(),null).getPropertyValue("font-size").replace(/\D/g,""))??16;d.attr("style",`-webkit-line-clamp: ${Math.floor((a-2)/p)};`)}else s.append("path").attr("class","node-bkg").attr("id","node-"+n.id).attr("d",`M0 ${a} v${-a} q0,-5 5,-5 h${a} q5,0 5,5 v${a} H0 Z`);i.attr("class","architecture-service");let{width:l,height:u}=i._groups[0][0].getBBox();n.width=l,n.height=u,t.setElementForId(n.id,i)}return 0},"drawServices"),u2e=o(function(t,e,r){r.forEach(n=>{let i=e.append("g"),a=Mi("iconSize");i.append("g").append("rect").attr("id","node-"+n.id).attr("fill-opacity","0").attr("width",a).attr("height",a),i.attr("class","architecture-junction");let{width:l,height:u}=i._groups[0][0].getBBox();i.width=l,i.height=u,t.setElementForId(n.id,i)})},"drawJunctions")});function ait(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"service",id:r.id,icon:r.icon,label:r.title,parent:r.in,width:Mi("iconSize"),height:Mi("iconSize")},classes:"node-service"})})}function sit(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"junction",id:r.id,parent:r.in,width:Mi("iconSize"),height:Mi("iconSize")},classes:"node-junction"})})}function oit(t,e){e.nodes().map(r=>{let n=Vf(r);if(n.type==="group")return;n.x=r.position().x,n.y=r.position().y,t.getElementById(n.id).attr("transform","translate("+(n.x||0)+","+(n.y||0)+")")})}function lit(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"group",id:r.id,icon:r.icon,label:r.title,parent:r.in},classes:"node-group"})})}function cit(t,e){t.forEach(r=>{let{lhsId:n,rhsId:i,lhsInto:a,lhsGroup:s,rhsInto:l,lhsDir:u,rhsDir:h,rhsGroup:f,title:d}=r,p=pS(r.lhsDir,r.rhsDir)?"segments":"straight",m={id:`${n}-${i}`,label:d,source:n,sourceDir:u,sourceArrow:a,sourceGroup:s,sourceEndpoint:u==="L"?"0 50%":u==="R"?"100% 50%":u==="T"?"50% 0":"50% 100%",target:i,targetDir:h,targetArrow:l,targetGroup:f,targetEndpoint:h==="L"?"0 50%":h==="R"?"100% 50%":h==="T"?"50% 0":"50% 100%"};e.add({group:"edges",data:m,classes:p})})}function uit(t){let e=t.map(i=>{let a={},s={};return Object.entries(i).forEach(([l,[u,h]])=>{a[h]||(a[h]=[]),s[u]||(s[u]=[]),a[h].push(l),s[u].push(l)}),{horiz:Object.values(a).filter(l=>l.length>1),vert:Object.values(s).filter(l=>l.length>1)}}),[r,n]=e.reduce(([i,a],{horiz:s,vert:l})=>[[...i,...s],[...a,...l]],[[],[]]);return{horizontal:r,vertical:n}}function hit(t){let e=[],r=o(i=>`${i[0]},${i[1]}`,"posToStr"),n=o(i=>i.split(",").map(a=>parseInt(a)),"strToPos");return t.forEach(i=>{let a=Object.fromEntries(Object.entries(i).map(([h,f])=>[r(f),h])),s=[r([0,0])],l={},u={L:[-1,0],R:[1,0],T:[0,1],B:[0,-1]};for(;s.length>0;){let h=s.shift();if(h){l[h]=1;let f=a[h];if(f){let d=n(h);Object.entries(u).forEach(([p,m])=>{let g=r([d[0]+m[0],d[1]+m[1]]),y=a[g];y&&!l[g]&&(s.push(g),e.push({[cF[p]]:y,[cF[jve(p)]]:f,gap:1.5*Mi("iconSize")}))})}}}}),e}function fit(t,e,r,n,{spatialMaps:i}){return new Promise(a=>{let s=Ve("body").append("div").attr("id","cy").attr("style","display:none"),l=fl({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"straight",label:"data(label)","source-endpoint":"data(sourceEndpoint)","target-endpoint":"data(targetEndpoint)"}},{selector:"edge.segments",style:{"curve-style":"segments","segment-weights":"0","segment-distances":[.5],"edge-distances":"endpoints","source-endpoint":"data(sourceEndpoint)","target-endpoint":"data(targetEndpoint)"}},{selector:"node",style:{"compound-sizing-wrt-labels":"include"}},{selector:"node[label]",style:{"text-valign":"bottom","text-halign":"center","font-size":`${Mi("fontSize")}px`}},{selector:".node-service",style:{label:"data(label)",width:"data(width)",height:"data(height)"}},{selector:".node-junction",style:{width:"data(width)",height:"data(height)"}},{selector:".node-group",style:{padding:`${Mi("padding")}px`}}]});s.remove(),lit(r,l),ait(t,l),sit(e,l),cit(n,l);let u=uit(i),h=hit(i),f=l.layout({name:"fcose",quality:"proof",styleEnabled:!1,animate:!1,nodeDimensionsIncludeLabels:!1,idealEdgeLength(d){let[p,m]=d.connectedNodes(),{parent:g}=Vf(p),{parent:y}=Vf(m);return g===y?1.5*Mi("iconSize"):.5*Mi("iconSize")},edgeElasticity(d){let[p,m]=d.connectedNodes(),{parent:g}=Vf(p),{parent:y}=Vf(m);return g===y?.45:.001},alignmentConstraint:u,relativePlacementConstraint:h});f.one("layoutstop",()=>{function d(p,m,g,y){let v,x,{x:b,y:w}=p,{x:_,y:T}=m;x=(y-w+(b-g)*(w-T)/(b-_))/Math.sqrt(1+Math.pow((w-T)/(b-_),2)),v=Math.sqrt(Math.pow(y-w,2)+Math.pow(g-b,2)-Math.pow(x,2));let E=Math.sqrt(Math.pow(_-b,2)+Math.pow(T-w,2));v=v/E;let L=(_-b)*(y-w)-(T-w)*(g-b);switch(!0){case L>=0:L=1;break;case L<0:L=-1;break}let S=(_-b)*(g-b)+(T-w)*(y-w);switch(!0){case S>=0:S=1;break;case S<0:S=-1;break}return x=Math.abs(x)*L,v=v*S,{distances:x,weights:v}}o(d,"getSegmentWeights"),l.startBatch();for(let p of Object.values(l.edges()))if(p.data?.()){let{x:m,y:g}=p.source().position(),{x:y,y:v}=p.target().position();if(m!==y&&g!==v){let x=p.sourceEndpoint(),b=p.targetEndpoint(),{sourceDir:w}=mS(p),[_,T]=nu(w)?[x.x,b.y]:[b.x,x.y],{weights:E,distances:L}=d(x,b,_,T);p.style("segment-distances",L),p.style("segment-weights",E)}}l.endBatch(),f.run()}),f.run(),l.ready(d=>{Y.info("Ready",d),a(l)})})}var f2e,dit,d2e,p2e=M(()=>{"use strict";su();SB();f2e=Ji(s2e(),1);pr();ut();eh();ai();Rb();yF();gS();h2e();Xb([{name:ap.prefix,icons:ap}]);fl.use(f2e.default);o(ait,"addServices");o(sit,"addJunctions");o(oit,"positionNodes");o(lit,"addGroups");o(cit,"addEdges");o(uit,"getAlignments");o(hit,"getRelativeConstraints");o(fit,"layoutArchitecture");dit=o(async(t,e,r,n)=>{let i=n.db,a=i.getServices(),s=i.getJunctions(),l=i.getGroups(),u=i.getEdges(),h=i.getDataStructures(),f=Va(e),d=f.append("g");d.attr("class","architecture-edges");let p=f.append("g");p.attr("class","architecture-services");let m=f.append("g");m.attr("class","architecture-groups"),await c2e(i,p,a),u2e(i,p,s);let g=await fit(a,s,l,u,h);await o2e(d,g),await l2e(m,g),oit(i,g),Io(void 0,f,Mi("padding"),Mi("useMaxWidth"))},"draw"),d2e={draw:dit}});var m2e={};vr(m2e,{diagram:()=>pit});var pit,g2e=M(()=>{"use strict";n2e();Rb();a2e();p2e();pit={parser:r2e,db:ip,renderer:d2e,styles:i2e}});var eat={};vr(eat,{default:()=>Jit});su();GS();Zf();var VX="c4",PCe=o(t=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(t),"detector"),BCe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>($X(),GX));return{id:VX,diagram:t}},"loader"),FCe={id:VX,detector:PCe,loader:BCe},UX=FCe;var Yie="flowchart",UOe=o((t,e)=>e?.flowchart?.defaultRenderer==="dagre-wrapper"||e?.flowchart?.defaultRenderer==="elk"?!1:/^\s*graph/.test(t),"detector"),HOe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ET(),kT));return{id:Yie,diagram:t}},"loader"),WOe={id:Yie,detector:UOe,loader:HOe},qie=WOe;var Xie="flowchart-v2",YOe=o((t,e)=>e?.flowchart?.defaultRenderer==="dagre-d3"?!1:(e?.flowchart?.defaultRenderer==="elk"&&(e.layout="elk"),/^\s*graph/.test(t)&&e?.flowchart?.defaultRenderer==="dagre-wrapper"?!0:/^\s*flowchart/.test(t)),"detector"),qOe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ET(),kT));return{id:Xie,diagram:t}},"loader"),XOe={id:Xie,detector:YOe,loader:qOe},jie=XOe;var Eae="er",kPe=o(t=>/^\s*erDiagram/.test(t),"detector"),EPe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(kae(),Tae));return{id:Eae,diagram:t}},"loader"),SPe={id:Eae,detector:kPe,loader:EPe},Sae=SPe;var Oue="gitGraph",jGe=o(t=>/^\s*gitGraph/.test(t),"detector"),KGe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Iue(),Mue));return{id:Oue,diagram:t}},"loader"),QGe={id:Oue,detector:jGe,loader:KGe},Pue=QGe;var fhe="gantt",F$e=o(t=>/^\s*gantt/.test(t),"detector"),z$e=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(hhe(),uhe));return{id:fhe,diagram:t}},"loader"),G$e={id:fhe,detector:F$e,loader:z$e},dhe=G$e;var The="info",Y$e=o(t=>/^\s*info/.test(t),"detector"),q$e=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(whe(),bhe));return{id:The,diagram:t}},"loader"),khe={id:The,detector:Y$e,loader:q$e};var Mhe="pie",sVe=o(t=>/^\s*pie/.test(t),"detector"),oVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Rhe(),Nhe));return{id:Mhe,diagram:t}},"loader"),Ihe={id:Mhe,detector:sVe,loader:oVe};var qhe="quadrantChart",SVe=o(t=>/^\s*quadrantChart/.test(t),"detector"),CVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Yhe(),Whe));return{id:qhe,diagram:t}},"loader"),AVe={id:qhe,detector:SVe,loader:CVe},Xhe=AVe;var wfe="xychart",UVe=o(t=>/^\s*xychart-beta/.test(t),"detector"),HVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(bfe(),xfe));return{id:wfe,diagram:t}},"loader"),WVe={id:wfe,detector:UVe,loader:HVe},Tfe=WVe;var Ffe="requirement",xUe=o(t=>/^\s*requirement(Diagram)?/.test(t),"detector"),bUe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Bfe(),Pfe));return{id:Ffe,diagram:t}},"loader"),wUe={id:Ffe,detector:xUe,loader:bUe},zfe=wUe;var fde="sequence",EHe=o(t=>/^\s*sequenceDiagram/.test(t),"detector"),SHe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(hde(),ude));return{id:fde,diagram:t}},"loader"),CHe={id:fde,detector:EHe,loader:SHe},dde=CHe;var Cde="class",iWe=o((t,e)=>e?.class?.defaultRenderer==="dagre-wrapper"?!1:/^\s*classDiagram/.test(t),"detector"),aWe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Sde(),Ede));return{id:Cde,diagram:t}},"loader"),sWe={id:Cde,detector:iWe,loader:aWe},Ade=sWe;var Dde="classDiagram",lWe=o((t,e)=>/^\s*classDiagram/.test(t)&&e?.class?.defaultRenderer==="dagre-wrapper"?!0:/^\s*classDiagram-v2/.test(t),"detector"),cWe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Lde(),_de));return{id:Dde,diagram:t}},"loader"),uWe={id:Dde,detector:lWe,loader:cWe},Nde=uWe;var T0e="state",aYe=o((t,e)=>e?.state?.defaultRenderer==="dagre-wrapper"?!1:/^\s*stateDiagram/.test(t),"detector"),sYe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(w0e(),b0e));return{id:T0e,diagram:t}},"loader"),oYe={id:T0e,detector:aYe,loader:sYe},k0e=oYe;var C0e="stateDiagram",cYe=o((t,e)=>!!(/^\s*stateDiagram-v2/.test(t)||/^\s*stateDiagram/.test(t)&&e?.state?.defaultRenderer==="dagre-wrapper"),"detector"),uYe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(S0e(),E0e));return{id:C0e,diagram:t}},"loader"),hYe={id:C0e,detector:cYe,loader:uYe},A0e=hYe;var U0e="journey",RYe=o(t=>/^\s*journey/.test(t),"detector"),MYe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(V0e(),$0e));return{id:U0e,diagram:t}},"loader"),IYe={id:U0e,detector:RYe,loader:MYe},H0e=IYe;ut();eh();ai();var OYe=o((t,e,r)=>{Y.debug(`rendering svg for syntax error +`);let n=Va(e),i=n.append("g");n.attr("viewBox","0 0 2412 512"),Zr(n,100,512,!0),i.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),i.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),i.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),i.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),i.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),i.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),i.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),i.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${r}`)},"draw"),xP={draw:OYe},W0e=xP;var PYe={db:{},renderer:xP,parser:{parse:o(()=>{},"parse")}},Y0e=PYe;var q0e="flowchart-elk",BYe=o((t,e={})=>/^\s*flowchart-elk/.test(t)||/^\s*flowchart|graph/.test(t)&&e?.flowchart?.defaultRenderer==="elk"?(e.layout="elk",!0):!1,"detector"),FYe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ET(),kT));return{id:q0e,diagram:t}},"loader"),zYe={id:q0e,detector:BYe,loader:FYe},X0e=zYe;var bpe="timeline",iqe=o(t=>/^\s*timeline/.test(t),"detector"),aqe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(xpe(),vpe));return{id:bpe,diagram:t}},"loader"),sqe={id:bpe,detector:iqe,loader:aqe},wpe=sqe;var z1e="mindmap",ptt=o(t=>/^\s*mindmap/.test(t),"detector"),mtt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(F1e(),B1e));return{id:z1e,diagram:t}},"loader"),gtt={id:z1e,detector:ptt,loader:mtt},G1e=gtt;var Z1e="kanban",Rtt=o(t=>/^\s*kanban/.test(t),"detector"),Mtt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Q1e(),K1e));return{id:Z1e,diagram:t}},"loader"),Itt={id:Z1e,detector:Rtt,loader:Mtt},J1e=Itt;var Rye="sankey",rrt=o(t=>/^\s*sankey-beta/.test(t),"detector"),nrt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Nye(),Dye));return{id:Rye,diagram:t}},"loader"),irt={id:Rye,detector:rrt,loader:nrt},Mye=irt;var Uye="packet",yrt=o(t=>/^\s*packet-beta/.test(t),"detector"),vrt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Vye(),$ye));return{id:Uye,diagram:t}},"loader"),Hye={id:Uye,detector:yrt,loader:vrt};var qve="block",znt=o(t=>/^\s*block-beta/.test(t),"detector"),Gnt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Yve(),Wve));return{id:qve,diagram:t}},"loader"),$nt={id:qve,detector:znt,loader:Gnt},Xve=$nt;var y2e="architecture",mit=o(t=>/^\s*architecture/.test(t),"detector"),git=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(g2e(),m2e));return{id:y2e,diagram:t}},"loader"),yit={id:y2e,detector:mit,loader:git},v2e=yit;Zf();Vt();var x2e=!1,z1=o(()=>{x2e||(x2e=!0,od("error",Y0e,t=>t.toLowerCase().trim()==="error"),od("---",{db:{clear:o(()=>{},"clear")},styles:{},renderer:{draw:o(()=>{},"draw")},parser:{parse:o(()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")},"parse")},init:o(()=>null,"init")},t=>t.toLowerCase().trimStart().startsWith("---")),Zb(UX,J1e,Nde,Ade,Sae,dhe,khe,Ihe,zfe,dde,X0e,jie,qie,G1e,wpe,Pue,A0e,k0e,H0e,Xhe,Mye,Hye,Tfe,Xve,v2e))},"addDiagrams");ut();Zf();Vt();var b2e=o(async()=>{Y.debug("Loading registered diagrams");let e=(await Promise.allSettled(Object.entries(Qf).map(async([r,{detector:n,loader:i}])=>{if(i)try{by(r)}catch{try{let{diagram:a,id:s}=await i();od(s,a,n)}catch(a){throw Y.error(`Failed to load external diagram with key ${r}. Removing from detectors.`),delete Qf[r],a}}}))).filter(r=>r.status==="rejected");if(e.length>0){Y.error(`Failed to load ${e.length} external diagrams`);for(let r of e)Y.error(r);throw new Error(`Failed to load ${e.length} external diagrams`)}},"loadRegisteredDiagrams");ut();pr();var yS="comm",vS="rule",xS="decl";var w2e="@import";var T2e="@keyframes";var k2e="@layer";var vF=Math.abs,Pb=String.fromCharCode;function bS(t){return t.trim()}o(bS,"trim");function Bb(t,e,r){return t.replace(e,r)}o(Bb,"replace");function E2e(t,e,r){return t.indexOf(e,r)}o(E2e,"indexof");function sp(t,e){return t.charCodeAt(e)|0}o(sp,"charat");function Uf(t,e,r){return t.slice(e,r)}o(Uf,"substr");function Eo(t){return t.length}o(Eo,"strlen");function S2e(t){return t.length}o(S2e,"sizeof");function G1(t,e){return e.push(t),t}o(G1,"append");var wS=1,$1=1,C2e=0,pl=0,Ii=0,U1="";function TS(t,e,r,n,i,a,s,l){return{value:t,root:e,parent:r,type:n,props:i,children:a,line:wS,column:$1,length:s,return:"",siblings:l}}o(TS,"node");function A2e(){return Ii}o(A2e,"char");function _2e(){return Ii=pl>0?sp(U1,--pl):0,$1--,Ii===10&&($1=1,wS--),Ii}o(_2e,"prev");function ml(){return Ii=pl2||V1(Ii)>3?"":" "}o(N2e,"whitespace");function R2e(t,e){for(;--e&&ml()&&!(Ii<48||Ii>102||Ii>57&&Ii<65||Ii>70&&Ii<97););return kS(t,Fb()+(e<6&&ch()==32&&ml()==32))}o(R2e,"escaping");function xF(t){for(;ml();)switch(Ii){case t:return pl;case 34:case 39:t!==34&&t!==39&&xF(Ii);break;case 40:t===41&&xF(t);break;case 92:ml();break}return pl}o(xF,"delimiter");function M2e(t,e){for(;ml()&&t+Ii!==57;)if(t+Ii===84&&ch()===47)break;return"/*"+kS(e,pl-1)+"*"+Pb(t===47?t:ml())}o(M2e,"commenter");function I2e(t){for(;!V1(ch());)ml();return kS(t,pl)}o(I2e,"identifier");function B2e(t){return D2e(SS("",null,null,null,[""],t=L2e(t),0,[0],t))}o(B2e,"compile");function SS(t,e,r,n,i,a,s,l,u){for(var h=0,f=0,d=s,p=0,m=0,g=0,y=1,v=1,x=1,b=0,w="",_=i,T=a,E=n,L=w;v;)switch(g=b,b=ml()){case 40:if(g!=108&&sp(L,d-1)==58){E2e(L+=Bb(ES(b),"&","&\f"),"&\f",vF(h?l[h-1]:0))!=-1&&(x=-1);break}case 34:case 39:case 91:L+=ES(b);break;case 9:case 10:case 13:case 32:L+=N2e(g);break;case 92:L+=R2e(Fb()-1,7);continue;case 47:switch(ch()){case 42:case 47:G1(vit(M2e(ml(),Fb()),e,r,u),u),(V1(g||1)==5||V1(ch()||1)==5)&&Eo(L)&&Uf(L,-1,void 0)!==" "&&(L+=" ");break;default:L+="/"}break;case 123*y:l[h++]=Eo(L)*x;case 125*y:case 59:case 0:switch(b){case 0:case 125:v=0;case 59+f:x==-1&&(L=Bb(L,/\f/g,"")),m>0&&(Eo(L)-d||y===0&&g===47)&&G1(m>32?P2e(L+";",n,r,d-1,u):P2e(Bb(L," ","")+";",n,r,d-2,u),u);break;case 59:L+=";";default:if(G1(E=O2e(L,e,r,h,f,i,l,w,_=[],T=[],d,a),a),b===123)if(f===0)SS(L,e,E,E,_,a,d,l,T);else switch(p===99&&sp(L,3)===110?100:p){case 100:case 108:case 109:case 115:SS(t,E,E,n&&G1(O2e(t,E,E,0,0,i,l,w,i,_=[],d,T),T),i,T,d,l,n?_:T);break;default:SS(L,E,E,E,[""],T,0,l,T)}}h=f=m=0,y=x=1,w=L="",d=s;break;case 58:d=1+Eo(L),m=g;default:if(y<1){if(b==123)--y;else if(b==125&&y++==0&&_2e()==125)continue}switch(L+=Pb(b),b*y){case 38:x=f>0?1:(L+="\f",-1);break;case 44:l[h++]=(Eo(L)-1)*x,x=1;break;case 64:ch()===45&&(L+=ES(ml())),p=ch(),f=d=Eo(w=L+=I2e(Fb())),b++;break;case 45:g===45&&Eo(L)==2&&(y=0)}}return a}o(SS,"parse");function O2e(t,e,r,n,i,a,s,l,u,h,f,d){for(var p=i-1,m=i===0?a:[""],g=S2e(m),y=0,v=0,x=0;y0?m[b]+" "+w:Bb(w,/&\f/g,m[b])))&&(u[x++]=_);return TS(t,e,r,i===0?vS:l,u,h,f,d)}o(O2e,"ruleset");function vit(t,e,r,n){return TS(t,e,r,yS,Pb(A2e()),Uf(t,2,-2),0,n)}o(vit,"comment");function P2e(t,e,r,n,i){return TS(t,e,r,xS,Uf(t,0,n),Uf(t,n+1,-1),n,i)}o(P2e,"declaration");function CS(t,e){for(var r="",n=0;n{$2e.forEach(t=>{t()}),$2e=[]},"attachFunctions");ut();var U2e=o(t=>t.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart(),"cleanupComments");Qb();ew();function H2e(t){let e=t.match(Kb);if(!e)return{text:t,metadata:{}};let r=Sm(e[1],{schema:Em})??{};r=typeof r=="object"&&!Array.isArray(r)?r:{};let n={};return r.displayMode&&(n.displayMode=r.displayMode.toString()),r.title&&(n.title=r.title.toString()),r.config&&(n.config=r.config),{text:t.slice(e[0].length),metadata:n}}o(H2e,"extractFrontMatter");hr();var bit=o(t=>t.replace(/\r\n?/g,` +`).replace(/<(\w+)([^>]*)>/g,(e,r,n)=>"<"+r+n.replace(/="([^"]*)"/g,"='$1'")+">"),"cleanupText"),wit=o(t=>{let{text:e,metadata:r}=H2e(t),{displayMode:n,title:i,config:a={}}=r;return n&&(a.gantt||(a.gantt={}),a.gantt.displayMode=n),{title:i,config:a,text:e}},"processFrontmatter"),Tit=o(t=>{let e=Ut.detectInit(t)??{},r=Ut.detectDirective(t,"wrap");return Array.isArray(r)?e.wrap=r.some(({type:n})=>n==="wrap"):r?.type==="wrap"&&(e.wrap=!0),{text:LX(t),directive:e}},"processDirectives");function bF(t){let e=bit(t),r=wit(e),n=Tit(r.text),i=Ds(r.config,n.directive);return t=U2e(n.text),{code:t,title:r.title,config:i}}o(bF,"preprocessDiagram");JC();a4();hr();function W2e(t){let e=new TextEncoder().encode(t),r=Array.from(e,n=>String.fromCodePoint(n)).join("");return btoa(r)}o(W2e,"toBase64");var kit=5e4,Eit="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa",Sit="sandbox",Cit="loose",Ait="http://www.w3.org/2000/svg",_it="http://www.w3.org/1999/xlink",Lit="http://www.w3.org/1999/xhtml",Dit="100%",Nit="100%",Rit="border:0;margin:0;",Mit="margin:0",Iit="allow-top-navigation-by-user-activation allow-popups",Oit='The "iframe" tag is not supported by your browser.',Pit=["foreignobject"],Bit=["dominant-baseline"];function K2e(t){let e=bF(t);return ly(),eG(e.config??{}),e}o(K2e,"processAndSetConfigs");async function Fit(t,e){z1();try{let{code:r,config:n}=K2e(t);return{diagramType:(await Q2e(r)).type,config:n}}catch(r){if(e?.suppressErrors)return!1;throw r}}o(Fit,"parse");var Y2e=o((t,e,r=[])=>` +.${t} ${e} { ${r.join(" !important; ")} !important; }`,"cssImportantStyles"),zit=o((t,e=new Map)=>{let r="";if(t.themeCSS!==void 0&&(r+=` +${t.themeCSS}`),t.fontFamily!==void 0&&(r+=` +:root { --mermaid-font-family: ${t.fontFamily}}`),t.altFontFamily!==void 0&&(r+=` +:root { --mermaid-alt-font-family: ${t.altFontFamily}}`),e instanceof Map){let s=t.htmlLabels??t.flowchart?.htmlLabels?["> *","span"]:["rect","polygon","ellipse","circle","path"];e.forEach(l=>{cr(l.styles)||s.forEach(u=>{r+=Y2e(l.id,u,l.styles)}),cr(l.textStyles)||(r+=Y2e(l.id,"tspan",(l?.textStyles||[]).map(u=>u.replace("color","fill"))))})}return r},"createCssStyles"),Git=o((t,e,r,n)=>{let i=zit(t,r),a=O$(e,i,t.themeVariables);return CS(B2e(`${n}{${a}}`),F2e)},"createUserStyles"),$it=o((t="",e,r)=>{let n=t;return!r&&!e&&(n=n.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),n=Ma(n),n=n.replace(/
    /g,"
    "),n},"cleanUpSvgCode"),Vit=o((t="",e)=>{let r=e?.viewBox?.baseVal?.height?e.viewBox.baseVal.height+"px":Nit,n=W2e(`${t}`);return``},"putIntoIFrame"),q2e=o((t,e,r,n,i)=>{let a=t.append("div");a.attr("id",r),n&&a.attr("style",n);let s=a.append("svg").attr("id",e).attr("width","100%").attr("xmlns",Ait);return i&&s.attr("xmlns:xlink",i),s.append("g"),t},"appendDivSvgG");function X2e(t,e){return t.append("iframe").attr("id",e).attr("style","width: 100%; height: 100%;").attr("sandbox","")}o(X2e,"sandboxedIframe");var Uit=o((t,e,r,n)=>{t.getElementById(e)?.remove(),t.getElementById(r)?.remove(),t.getElementById(n)?.remove()},"removeExistingElements"),Hit=o(async function(t,e,r){z1();let n=K2e(e);e=n.code;let i=Cr();Y.debug(i),e.length>(i?.maxTextSize??kit)&&(e=Eit);let a="#"+t,s="i"+t,l="#"+s,u="d"+t,h="#"+u,f=o(()=>{let R=Ve(p?l:h).node();R&&"remove"in R&&R.remove()},"removeTempElements"),d=Ve("body"),p=i.securityLevel===Sit,m=i.securityLevel===Cit,g=i.fontFamily;if(r!==void 0){if(r&&(r.innerHTML=""),p){let k=X2e(Ve(r),s);d=Ve(k.nodes()[0].contentDocument.body),d.node().style.margin=0}else d=Ve(r);q2e(d,t,u,`font-family: ${g}`,_it)}else{if(Uit(document,t,u,s),p){let k=X2e(Ve("body"),s);d=Ve(k.nodes()[0].contentDocument.body),d.node().style.margin=0}else d=Ve("body");q2e(d,t,u)}let y,v;try{y=await H1.fromText(e,{title:n.title})}catch(k){if(i.suppressErrorRendering)throw f(),k;y=await H1.fromText("error"),v=k}let x=d.select(h).node(),b=y.type,w=x.firstChild,_=w.firstChild,T=y.renderer.getClasses?.(e,y),E=Git(i,b,T,a),L=document.createElement("style");L.innerHTML=E,w.insertBefore(L,_);try{await y.renderer.draw(e,t,_x,y)}catch(k){throw i.suppressErrorRendering?f():W0e.draw(e,t,_x),k}let S=d.select(`${h} svg`),A=y.db.getAccTitle?.(),I=y.db.getAccDescription?.();Yit(b,S,A,I),d.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns",Lit);let D=d.select(h).node().innerHTML;if(Y.debug("config.arrowMarkerAbsolute",i.arrowMarkerAbsolute),D=$it(D,p,xr(i.arrowMarkerAbsolute)),p){let k=d.select(h+" svg").node();D=Vit(D,k)}else m||(D=j2e.default.sanitize(D,{ADD_TAGS:Pit,ADD_ATTR:Bit}));if(V2e(),v)throw v;return f(),{diagramType:b,svg:D,bindFunctions:y.db.bindFunctions}},"render");function Wit(t={}){let e=Vn({},t);e?.fontFamily&&!e.themeVariables?.fontFamily&&(e.themeVariables||(e.themeVariables={}),e.themeVariables.fontFamily=e.fontFamily),Qz(e),e?.theme&&e.theme in Do?e.themeVariables=Do[e.theme].getThemeVariables(e.themeVariables):e&&(e.themeVariables=Do.default.getThemeVariables(e.themeVariables));let r=typeof e=="object"?iC(e):aC();J1(r.logLevel),z1()}o(Wit,"initialize");var Q2e=o((t,e={})=>{let{code:r}=bF(t);return H1.fromText(r,e)},"getDiagramFromText");function Yit(t,e,r,n){z2e(e,t),G2e(e,r,n,e.attr("id"))}o(Yit,"addA11yInfo");var Hf=Object.freeze({render:Hit,parse:Fit,getDiagramFromText:Q2e,initialize:Wit,getConfig:Cr,setConfig:o4,getSiteConfig:aC,updateSiteConfig:Zz,reset:o(()=>{ly()},"reset"),globalReset:o(()=>{ly(ph)},"globalReset"),defaultConfig:ph});J1(Cr().logLevel);ly(Cr());Jv();hr();var qit=o((t,e,r)=>{Y.warn(t),s9(t)?(r&&r(t.str,t.hash),e.push({...t,message:t.str,error:t})):(r&&r(t),t instanceof Error&&e.push({str:t.message,message:t.message,hash:t.name,error:t}))},"handleError"),Z2e=o(async function(t={querySelector:".mermaid"}){try{await Xit(t)}catch(e){if(s9(e)&&Y.error(e.str),uh.parseError&&uh.parseError(e),!t.suppressErrors)throw Y.error("Use the suppressErrors option to suppress these errors"),e}},"run"),Xit=o(async function({postRenderCallback:t,querySelector:e,nodes:r}={querySelector:".mermaid"}){let n=Hf.getConfig();Y.debug(`${t?"":"No "}Callback function found`);let i;if(r)i=r;else if(e)i=document.querySelectorAll(e);else throw new Error("Nodes and querySelector are both undefined");Y.debug(`Found ${i.length} diagrams`),n?.startOnLoad!==void 0&&(Y.debug("Start On Load: "+n?.startOnLoad),Hf.updateSiteConfig({startOnLoad:n?.startOnLoad}));let a=new Ut.InitIDGenerator(n.deterministicIds,n.deterministicIDSeed),s,l=[];for(let u of Array.from(i)){Y.info("Rendering diagram: "+u.id);if(u.getAttribute("data-processed"))continue;u.setAttribute("data-processed","true");let h=`mermaid-${a.next()}`;s=u.innerHTML,s=jb(Ut.entityDecode(s)).trim().replace(//gi,"
    ");let f=Ut.detectInit(s);f&&Y.debug("Detected early reinit: ",f);try{let{svg:d,bindFunctions:p}=await rxe(h,s,u);u.innerHTML=d,t&&await t(h),p&&p(u)}catch(d){qit(d,l,uh.parseError)}}if(l.length>0)throw l[0]},"runThrowsErrors"),J2e=o(function(t){Hf.initialize(t)},"initialize"),jit=o(async function(t,e,r){Y.warn("mermaid.init is deprecated. Please use run instead."),t&&J2e(t);let n={postRenderCallback:r,querySelector:".mermaid"};typeof e=="string"?n.querySelector=e:e&&(e instanceof HTMLElement?n.nodes=[e]:n.nodes=e),await Z2e(n)},"init"),Kit=o(async(t,{lazyLoad:e=!0}={})=>{z1(),Zb(...t),e===!1&&await b2e()},"registerExternalDiagrams"),exe=o(function(){if(uh.startOnLoad){let{startOnLoad:t}=Hf.getConfig();t&&uh.run().catch(e=>Y.error("Mermaid failed to initialize",e))}},"contentLoaded");if(typeof document<"u"){window.addEventListener("load",exe,!1)}var Qit=o(function(t){uh.parseError=t},"setParseErrorHandler"),AS=[],wF=!1,txe=o(async()=>{if(!wF){for(wF=!0;AS.length>0;){let t=AS.shift();if(t)try{await t()}catch(e){Y.error("Error executing queue",e)}}wF=!1}},"executeQueue"),Zit=o(async(t,e)=>new Promise((r,n)=>{let i=o(()=>new Promise((a,s)=>{Hf.parse(t,e).then(l=>{a(l),r(l)},l=>{Y.error("Error parsing",l),uh.parseError?.(l),s(l),n(l)})}),"performCall");AS.push(i),txe().catch(n)}),"parse"),rxe=o((t,e,r)=>new Promise((n,i)=>{let a=o(()=>new Promise((s,l)=>{Hf.render(t,e,r).then(u=>{s(u),n(u)},u=>{Y.error("Error parsing",u),uh.parseError?.(u),l(u),i(u)})}),"performCall");AS.push(a),txe().catch(i)}),"render"),uh={startOnLoad:!0,mermaidAPI:Hf,parse:Zit,render:rxe,init:jit,run:Z2e,registerExternalDiagrams:Kit,registerLayoutLoaders:_D,initialize:J2e,parseError:void 0,contentLoaded:exe,setParseErrorHandler:Qit,detectType:mp,registerIconPacks:Xb},Jit=uh;return cxe(eat);})(); +/*! Check if previously processed */ +/*! + * Wait for document loaded before starting the execution + */ +/*! Bundled license information: + +dompurify/dist/purify.js: + (*! @license DOMPurify 3.1.6 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.1.6/LICENSE *) + +js-yaml/dist/js-yaml.mjs: + (*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT *) + +lodash-es/lodash.js: + (** + * @license + * Lodash (Custom Build) + * Build: `lodash modularize exports="es" -o ./` + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + *) + +cytoscape/dist/cytoscape.esm.mjs: + (*! + Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable + Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com) + Licensed under The MIT License (http://opensource.org/licenses/MIT) + *) + (*! + Event object based on jQuery events, MIT license + + https://jquery.org/license/ + https://tldrlegal.com/license/mit-license + https://github.com/jquery/jquery/blob/master/src/event.js + *) + (*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License *) + (*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License *) +*/ +globalThis.mermaid = globalThis.__esbuild_esm_mermaid.default; diff --git a/packages/renderer/package.json b/packages/renderer/package.json index 4e86f5f1d64..0e3da71c75f 100644 --- a/packages/renderer/package.json +++ b/packages/renderer/package.json @@ -51,7 +51,7 @@ "markdown-it-sup": "2.0.0", "markdown-it-toc-done-right": "4.2.0", "md5": "2.3.0", - "mermaid": "10.9.1" + "mermaid": "11.4.0" }, "gitHead": "05a29b450962bf05a8642bbd39446a1f679a96ba" } diff --git a/yarn.lock b/yarn.lock index 3f5d3ab9485..830d65e3006 100644 --- a/yarn.lock +++ b/yarn.lock @@ -230,6 +230,23 @@ __metadata: languageName: node linkType: hard +"@antfu/install-pkg@npm:^0.4.0": + version: 0.4.1 + resolution: "@antfu/install-pkg@npm:0.4.1" + dependencies: + package-manager-detector: ^0.2.0 + tinyexec: ^0.3.0 + checksum: 3ffd59fa5a21dcb4951a037f5c91dfbfc152adfef9e7ba231a968f108aa28c1cd22213c437a8d34f2bfea8c2b9a6df20447eb04be15b534a8e9e21a9dcf203c0 + languageName: node + linkType: hard + +"@antfu/utils@npm:^0.7.10": + version: 0.7.10 + resolution: "@antfu/utils@npm:0.7.10" + checksum: b93dd9e2c7e96ae6dca8a07c1fc5e7165ea9c7a89e78ecb75959bc9a8e769d3f565aea1b5c43db7374dd1f405cc277b6d14d85f884886f9d424dd6144d9203f2 + languageName: node + linkType: hard + "@aws-crypto/crc32@npm:3.0.0": version: 3.0.0 resolution: "@aws-crypto/crc32@npm:3.0.0" @@ -5139,13 +5156,20 @@ __metadata: languageName: node linkType: hard -"@braintree/sanitize-url@npm:^6.0.0, @braintree/sanitize-url@npm:^6.0.1": +"@braintree/sanitize-url@npm:^6.0.0": version: 6.0.4 resolution: "@braintree/sanitize-url@npm:6.0.4" checksum: f5ec6048973722ea1c46ae555d2e9eb848d7fa258994f8ea7d6db9514ee754ea3ef344ef71b3696d486776bcb839f3124e79f67c6b5b2814ed2da220b340627c languageName: node linkType: hard +"@braintree/sanitize-url@npm:^7.0.1": + version: 7.1.0 + resolution: "@braintree/sanitize-url@npm:7.1.0" + checksum: d17dcebc759278f4bc7ffbc13d6b7915133ea6fcdea023a1536f80c0b56f7afcd696a7c24781d078babc0da8afd3ed2871798b8067b0e1c90c2d8bd7843134cf + languageName: node + linkType: hard + "@callstack/react-theme-provider@npm:^3.0.9": version: 3.0.9 resolution: "@callstack/react-theme-provider@npm:3.0.9" @@ -5158,6 +5182,48 @@ __metadata: languageName: node linkType: hard +"@chevrotain/cst-dts-gen@npm:11.0.3": + version: 11.0.3 + resolution: "@chevrotain/cst-dts-gen@npm:11.0.3" + dependencies: + "@chevrotain/gast": 11.0.3 + "@chevrotain/types": 11.0.3 + lodash-es: 4.17.21 + checksum: 414229a827e06b4564e271ca3a02ed6f475d400a184dc5ae05308bbc6e966959b84a40a063dacf7debd8f9a1dba5bf8785a891e7b588eafd9f821b43ec16b109 + languageName: node + linkType: hard + +"@chevrotain/gast@npm:11.0.3": + version: 11.0.3 + resolution: "@chevrotain/gast@npm:11.0.3" + dependencies: + "@chevrotain/types": 11.0.3 + lodash-es: 4.17.21 + checksum: 5190ba3a3f03f6f58331dbd108c36172b90314f60675b88dfefca25f704549164577796a1127fa407dd546aefa9f221d6c043e5b95298a0852ffd060b4fff117 + languageName: node + linkType: hard + +"@chevrotain/regexp-to-ast@npm:11.0.3": + version: 11.0.3 + resolution: "@chevrotain/regexp-to-ast@npm:11.0.3" + checksum: 5d665b3340493e302f245c9bbcd73de9b973ca79d0e59c4fbed6cc733b665998b41a2b8a5963bc2e90c763c8b4ba30f6e53736325c40f3fccef0ad3de2095ff2 + languageName: node + linkType: hard + +"@chevrotain/types@npm:11.0.3": + version: 11.0.3 + resolution: "@chevrotain/types@npm:11.0.3" + checksum: 4496bf1955f1db2b08c188f508db23d9f1cbecdf0bfa7f23f8d8dcd3f9ca450529b71acc83a941c59c0f8188b54c0f5687f6e203dcd7dca622ac4ea6291df316 + languageName: node + linkType: hard + +"@chevrotain/utils@npm:11.0.3": + version: 11.0.3 + resolution: "@chevrotain/utils@npm:11.0.3" + checksum: 099f0aa65ff82a7d49ffefd7a90182efcc1518b89b88d516d2125ca730eaa38d61e36ee40fad6c21f7896b6e8393b1e6810b6a69122fabff283f0522ee49eaa5 + languageName: node + linkType: hard + "@codemirror/autocomplete@npm:6.18.1, @codemirror/autocomplete@npm:^6.0.0, @codemirror/autocomplete@npm:^6.3.2, @codemirror/autocomplete@npm:^6.7.1": version: 6.18.1 resolution: "@codemirror/autocomplete@npm:6.18.1" @@ -7567,6 +7633,28 @@ __metadata: languageName: node linkType: hard +"@iconify/types@npm:^2.0.0": + version: 2.0.0 + resolution: "@iconify/types@npm:2.0.0" + checksum: 029f58542c160e9d4a746869cf2e475b603424d3adf3994c5cc8d0406c47e6e04a3b898b2707840c1c5b9bd5563a1660a34b110d89fce43923baca5222f4e597 + languageName: node + linkType: hard + +"@iconify/utils@npm:^2.1.32": + version: 2.1.33 + resolution: "@iconify/utils@npm:2.1.33" + dependencies: + "@antfu/install-pkg": ^0.4.0 + "@antfu/utils": ^0.7.10 + "@iconify/types": ^2.0.0 + debug: ^4.3.6 + kolorist: ^1.8.0 + local-pkg: ^0.5.0 + mlly: ^1.7.1 + checksum: 2d8bed71aa350954ea6f6c23e3c02263d3058c270ab5c71cae5cbc7c9c0ceb1ba986378696f5854b00a94fbfd5cd9afdd0ba8ae360efe352560a14ecc46a9649 + languageName: node + linkType: hard + "@img/sharp-darwin-arm64@npm:0.33.4": version: 0.33.4 resolution: "@img/sharp-darwin-arm64@npm:0.33.4" @@ -8691,7 +8779,7 @@ __metadata: markdown-it-sup: 2.0.0 markdown-it-toc-done-right: 4.2.0 md5: 2.3.0 - mermaid: 10.9.1 + mermaid: 11.4.0 ts-jest: 29.1.5 typescript: 5.4.5 languageName: unknown @@ -10140,6 +10228,15 @@ __metadata: languageName: node linkType: hard +"@mermaid-js/parser@npm:^0.3.0": + version: 0.3.0 + resolution: "@mermaid-js/parser@npm:0.3.0" + dependencies: + langium: 3.0.0 + checksum: 7c92d69b74a1aaa3d2352c9a21a913cb4dd8f4212b22130359ef98ced4509fdb709ac9942dc78d3c2f75360f27a2917fbdb1ef2c7ac0057078d935666a1afe1d + languageName: node + linkType: hard + "@mixmark-io/domino@npm:^2.2.0": version: 2.2.0 resolution: "@mixmark-io/domino@npm:2.2.0" @@ -12588,19 +12685,204 @@ __metadata: languageName: node linkType: hard -"@types/d3-scale-chromatic@npm:^3.0.0": - version: 3.0.0 - resolution: "@types/d3-scale-chromatic@npm:3.0.0" - checksum: e06afffd2725570aa90cb3050eb96a94727264948d9256e56807ab582aba379168d84d1d98bcaa275bf38375148b35dfe13697e06fc7565dd17ac7e2acb11980 +"@types/d3-array@npm:*": + version: 3.2.1 + resolution: "@types/d3-array@npm:3.2.1" + checksum: 8a41cee0969e53bab3f56cc15c4e6c9d76868d6daecb2b7d8c9ce71e0ececccc5a8239697cc52dadf5c665f287426de5c8ef31a49e7ad0f36e8846889a383df4 languageName: node linkType: hard -"@types/d3-scale@npm:^4.0.3": - version: 4.0.4 - resolution: "@types/d3-scale@npm:4.0.4" +"@types/d3-axis@npm:*": + version: 3.0.6 + resolution: "@types/d3-axis@npm:3.0.6" + dependencies: + "@types/d3-selection": "*" + checksum: ea1065d9e6d134c04427763603cbe9d549b8b5785b8ae0d002b5b14a362619d5b8f5ee3c2fda8b36b7e5a413cbcd387e1a2d89898b919a9f0cc91ad4e67b5ab5 + languageName: node + linkType: hard + +"@types/d3-brush@npm:*": + version: 3.0.6 + resolution: "@types/d3-brush@npm:3.0.6" + dependencies: + "@types/d3-selection": "*" + checksum: e5166bc53e5c914b1fed0a6ce55ca14d76ae11c5afd16b724b8ae47989e977c4af02bb07496d1ccd0a77f4ccd9a2ca7345e1d289bcfce16490fe4b39a9e0d170 + languageName: node + linkType: hard + +"@types/d3-chord@npm:*": + version: 3.0.6 + resolution: "@types/d3-chord@npm:3.0.6" + checksum: b511cf372ed8a0086d37a715c0d4aca811b614454e1f7c1561fbcd46863beaccdb115d274a7a992a30a8218393fbc3e1fdd7ca6e9d572e729a4570002c327083 + languageName: node + linkType: hard + +"@types/d3-color@npm:*": + version: 3.1.3 + resolution: "@types/d3-color@npm:3.1.3" + checksum: 8a0e79a709929502ec4effcee2c786465b9aec51b653ba0b5d05dbfec3e84f418270dd603002d94021885061ff592f614979193bd7a02ad76317f5608560e357 + languageName: node + linkType: hard + +"@types/d3-contour@npm:*": + version: 3.0.6 + resolution: "@types/d3-contour@npm:3.0.6" + dependencies: + "@types/d3-array": "*" + "@types/geojson": "*" + checksum: 83c13eb0567e95d6675d6d81cbeab38d0899c5af70a7c69354e23e0860ddb2f3e911d2cacd33a8baa60ce7846b38785a337b2d7c8d2763a1340bfb999b4bd2ab + languageName: node + linkType: hard + +"@types/d3-delaunay@npm:*": + version: 6.0.4 + resolution: "@types/d3-delaunay@npm:6.0.4" + checksum: 502fe0eb91f7d05b0f57904d68028c24348a54b1e5458009caf662de995d0e59bd82cd701b4af0087d614ee9e456d415fe32d63c25272ca753bf12b3f27b2d77 + languageName: node + linkType: hard + +"@types/d3-dispatch@npm:*": + version: 3.0.6 + resolution: "@types/d3-dispatch@npm:3.0.6" + checksum: f82076c7d205885480d363c92c19b8e0d6b9e529a3a78ce772f96a7cc4cce01f7941141f148828337035fac9676b13e7440565530491d560fdf12e562cb56573 + languageName: node + linkType: hard + +"@types/d3-drag@npm:*": + version: 3.0.7 + resolution: "@types/d3-drag@npm:3.0.7" + dependencies: + "@types/d3-selection": "*" + checksum: 1107cb1667ead79073741c06ea4a9e8e4551698f6c9c60821e327a6aa30ca2ba0b31a6fe767af85a2e38a22d2305f6c45b714df15c2bba68adf58978223a5fc5 + languageName: node + linkType: hard + +"@types/d3-dsv@npm:*": + version: 3.0.7 + resolution: "@types/d3-dsv@npm:3.0.7" + checksum: 5025e01459827d09d14e0d00281995a04042ce9e3e76444c5a65466c1d29649d82cbfaa9251e33837bf576f5c587525d8d8ff5aacc6bd3b831824d54449261b9 + languageName: node + linkType: hard + +"@types/d3-ease@npm:*": + version: 3.0.2 + resolution: "@types/d3-ease@npm:3.0.2" + checksum: 0885219966294bfc99548f37297e1c75e75da812a5f3ec941977ebb57dcab0a25acec5b2bbd82d09a49d387daafca08521ca269b7e4c27ddca7768189e987b54 + languageName: node + linkType: hard + +"@types/d3-fetch@npm:*": + version: 3.0.7 + resolution: "@types/d3-fetch@npm:3.0.7" + dependencies: + "@types/d3-dsv": "*" + checksum: e60cf60b25cbc49b2066ac2a3638f610c7379000562b0f499dd90fd57a8cb9740c24667a70496c2a66456d42867afeffb1722a75b26d95e7d7ee8667d96b0b36 + languageName: node + linkType: hard + +"@types/d3-force@npm:*": + version: 3.0.10 + resolution: "@types/d3-force@npm:3.0.10" + checksum: 0faf1321ddd85f7bf25769ee97513b380a897791ad1cd6c4282f09e0108e566132fad80f4c73cdb592a352139b22388d3c77458298a00f92ef72e27019fb33c7 + languageName: node + linkType: hard + +"@types/d3-format@npm:*": + version: 3.0.4 + resolution: "@types/d3-format@npm:3.0.4" + checksum: e69421cd93861a0c080084b0b23d4a5d6a427497559e46898189002fb756dae2c7c858b465308f6bcede7272b90e39ce8adab810bded2309035a5d9556c59134 + languageName: node + linkType: hard + +"@types/d3-geo@npm:*": + version: 3.1.0 + resolution: "@types/d3-geo@npm:3.1.0" + dependencies: + "@types/geojson": "*" + checksum: a4b2daa8a64012912ce7186891e8554af123925dca344c111b771e168a37477e02d504c6c94ee698440380e8c4f3f373d6755be97935da30eae0904f6745ce40 + languageName: node + linkType: hard + +"@types/d3-hierarchy@npm:*": + version: 3.1.7 + resolution: "@types/d3-hierarchy@npm:3.1.7" + checksum: 69746b3a65e0fe0ceb3ffcb1a8840a61e271eadb32eccb5034f0fce036d24801aef924ee45b99246580c9f7c81839ab0555f776a11773d82e860d522a2ff1c0e + languageName: node + linkType: hard + +"@types/d3-interpolate@npm:*": + version: 3.0.4 + resolution: "@types/d3-interpolate@npm:3.0.4" + dependencies: + "@types/d3-color": "*" + checksum: efd2770e174e84fc7316fdafe03cf3688451f767dde1fa6211610137f495be7f3923db7e1723a6961a0e0e9ae0ed969f4f47c038189fa0beb1d556b447922622 + languageName: node + linkType: hard + +"@types/d3-path@npm:*": + version: 3.1.0 + resolution: "@types/d3-path@npm:3.1.0" + checksum: 1e81b56ed33ba1ac954a8c42c78c3fcf2716927fe5d01b2003591193ad3b639572a3dfcedd9bf78b6b73215a5cfb01cede8f25c936e95ac18fbe3858f9b62f5c + languageName: node + linkType: hard + +"@types/d3-polygon@npm:*": + version: 3.0.2 + resolution: "@types/d3-polygon@npm:3.0.2" + checksum: 7cf1eadb54f02dd3617512b558f4c0f3811f8a6a8c887d9886981c3cc251db28b68329b2b0707d9f517231a72060adbb08855227f89bef6ef30caedc0a67cab2 + languageName: node + linkType: hard + +"@types/d3-quadtree@npm:*": + version: 3.0.6 + resolution: "@types/d3-quadtree@npm:3.0.6" + checksum: 631fb1a50dbe4fb0c97574891b180ec3d6a0f524bbd8aee8dfd44eda405e7ed1ca2b03d5568a35f697d09e5e4b598117e149236874b0c8764979a3d6242bb0bc + languageName: node + linkType: hard + +"@types/d3-random@npm:*": + version: 3.0.3 + resolution: "@types/d3-random@npm:3.0.3" + checksum: 33285b57768a724d2466ac1deec002432805c9df3e475ffb7f7fec66681cfe3e18d2f68b7f8ba45f400b274907bbebfe8adff14c9a97ef1987e476135e784925 + languageName: node + linkType: hard + +"@types/d3-scale-chromatic@npm:*": + version: 3.0.3 + resolution: "@types/d3-scale-chromatic@npm:3.0.3" + checksum: a465d126a00a71d3824957283580b4b404fe6f6bb52eb2b7303047fffed2bec6e31aeb34bfb30313e72ee1d75243c50ec5a45824eaf547f9c0849a1379527662 + languageName: node + linkType: hard + +"@types/d3-scale@npm:*": + version: 4.0.8 + resolution: "@types/d3-scale@npm:4.0.8" dependencies: "@types/d3-time": "*" - checksum: e7546492b5794049db0cb2c8266cd2cf3d2dd06194f3bf8afd29a470af98e4369d579f451aa035f2f7b07c42ad859820038e3f8a9568371ae868198a695d308a + checksum: 3b1906da895564f73bb3d0415033d9a8aefe7c4f516f970176d5b2ff7a417bd27ae98486e9a9aa0472001dc9885a9204279a1973a985553bdb3ee9bbc1b94018 + languageName: node + linkType: hard + +"@types/d3-selection@npm:*": + version: 3.0.11 + resolution: "@types/d3-selection@npm:3.0.11" + checksum: 4b76630f76dffdafc73cdc786d73e7b4c96f40546483074b3da0e7fe83fd7f5ed9bc6c50f79bcef83595f943dcc9ed6986953350f39371047af644cc39c41b43 + languageName: node + linkType: hard + +"@types/d3-shape@npm:*": + version: 3.1.6 + resolution: "@types/d3-shape@npm:3.1.6" + dependencies: + "@types/d3-path": "*" + checksum: bd765be021019c43c8dca066a798a1de28a051d1213db6ca25f76c9e577da7ec40a592e3bda7628383ab48cb87164fe60b95eb5ec23761b2012bd0adb30c549a + languageName: node + linkType: hard + +"@types/d3-time-format@npm:*": + version: 4.0.3 + resolution: "@types/d3-time-format@npm:4.0.3" + checksum: e981fc9780697a9d8c5d1ddf1167d9c6bc28e4e610afddff1384fe55e6eb52cb65309b2a0a1d4cf817413b0a80b9f1a652fe0b2cb8054ace4eafff80a6093aa5 languageName: node linkType: hard @@ -12611,7 +12893,71 @@ __metadata: languageName: node linkType: hard -"@types/debug@npm:^4.0.0, @types/debug@npm:^4.1.6": +"@types/d3-timer@npm:*": + version: 3.0.2 + resolution: "@types/d3-timer@npm:3.0.2" + checksum: 1643eebfa5f4ae3eb00b556bbc509444d88078208ec2589ddd8e4a24f230dd4cf2301e9365947e70b1bee33f63aaefab84cd907822aae812b9bc4871b98ab0e1 + languageName: node + linkType: hard + +"@types/d3-transition@npm:*": + version: 3.0.9 + resolution: "@types/d3-transition@npm:3.0.9" + dependencies: + "@types/d3-selection": "*" + checksum: c8608b1ac7cf09acfe387f3d41074631adcdfd7f2c8ca2efb378309adf0e9fc8469dbcf0d7a8c40fd1f03f2d2bf05fcda0cde7aa356ae8533a141dcab4dff221 + languageName: node + linkType: hard + +"@types/d3-zoom@npm:*": + version: 3.0.8 + resolution: "@types/d3-zoom@npm:3.0.8" + dependencies: + "@types/d3-interpolate": "*" + "@types/d3-selection": "*" + checksum: a1685728949ed39faf8ce162cc13338639c57bc2fd4d55fc7902b2632cad2bc2a808941263e57ce6685647e8a6a0a556e173386a52d6bb74c9ed6195b68be3de + languageName: node + linkType: hard + +"@types/d3@npm:^7.4.3": + version: 7.4.3 + resolution: "@types/d3@npm:7.4.3" + dependencies: + "@types/d3-array": "*" + "@types/d3-axis": "*" + "@types/d3-brush": "*" + "@types/d3-chord": "*" + "@types/d3-color": "*" + "@types/d3-contour": "*" + "@types/d3-delaunay": "*" + "@types/d3-dispatch": "*" + "@types/d3-drag": "*" + "@types/d3-dsv": "*" + "@types/d3-ease": "*" + "@types/d3-fetch": "*" + "@types/d3-force": "*" + "@types/d3-format": "*" + "@types/d3-geo": "*" + "@types/d3-hierarchy": "*" + "@types/d3-interpolate": "*" + "@types/d3-path": "*" + "@types/d3-polygon": "*" + "@types/d3-quadtree": "*" + "@types/d3-random": "*" + "@types/d3-scale": "*" + "@types/d3-scale-chromatic": "*" + "@types/d3-selection": "*" + "@types/d3-shape": "*" + "@types/d3-time": "*" + "@types/d3-time-format": "*" + "@types/d3-timer": "*" + "@types/d3-transition": "*" + "@types/d3-zoom": "*" + checksum: 12234aa093c8661546168becdd8956e892b276f525d96f65a7b32fed886fc6a569fe5a1171bff26fef2a5663960635f460c9504a6f2d242ba281a2b6c8c6465c + languageName: node + linkType: hard + +"@types/debug@npm:^4.1.6": version: 4.1.8 resolution: "@types/debug@npm:4.1.8" dependencies: @@ -12620,6 +12966,15 @@ __metadata: languageName: node linkType: hard +"@types/dompurify@npm:^3.0.5": + version: 3.0.5 + resolution: "@types/dompurify@npm:3.0.5" + dependencies: + "@types/trusted-types": "*" + checksum: ffc34eca6a4536e1c8c16a47cce2623c5a118a9785492e71230052d92933ff096d14326ff449031e8dfaac509413222372d8f2b28786a13159de6241df716185 + languageName: node + linkType: hard + "@types/eslint-scope@npm:^3.7.0": version: 3.7.2 resolution: "@types/eslint-scope@npm:3.7.2" @@ -12758,6 +13113,13 @@ __metadata: languageName: node linkType: hard +"@types/geojson@npm:*": + version: 7946.0.14 + resolution: "@types/geojson@npm:7946.0.14" + checksum: ae511bee6488ae3bd5a3a3347aedb0371e997b14225b8983679284e22fa4ebd88627c6e3ff8b08bf4cc35068cb29310c89427311ffc9322c255615821a922e71 + languageName: node + linkType: hard + "@types/glob@npm:5 - 7, @types/glob@npm:^7.1.1": version: 7.2.0 resolution: "@types/glob@npm:7.2.0" @@ -13563,6 +13925,13 @@ __metadata: languageName: node linkType: hard +"@types/trusted-types@npm:*": + version: 2.0.7 + resolution: "@types/trusted-types@npm:2.0.7" + checksum: 8e4202766a65877efcf5d5a41b7dd458480b36195e580a3b1085ad21e948bc417d55d6f8af1fd2a7ad008015d4117d5fdfe432731157da3c68678487174e4ba3 + languageName: node + linkType: hard + "@types/unist@npm:^2, @types/unist@npm:^2.0.0": version: 2.0.8 resolution: "@types/unist@npm:2.0.8" @@ -14662,6 +15031,15 @@ __metadata: languageName: node linkType: hard +"acorn@npm:^8.12.1": + version: 8.14.0 + resolution: "acorn@npm:8.14.0" + bin: + acorn: bin/acorn + checksum: 8755074ba55fff94e84e81c72f1013c2d9c78e973c31231c8ae505a5f966859baf654bddd75046bffd73ce816b149298977fff5077a3033dedba0ae2aad152d4 + languageName: node + linkType: hard + "acorn@npm:^8.2.4, acorn@npm:^8.4.1": version: 8.6.0 resolution: "acorn@npm:8.6.0" @@ -18007,13 +18385,6 @@ __metadata: languageName: node linkType: hard -"character-entities@npm:^2.0.0": - version: 2.0.2 - resolution: "character-entities@npm:2.0.2" - checksum: cf1643814023697f725e47328fcec17923b8f1799102a8a79c1514e894815651794a2bffd84bb1b3a4b124b050154e4529ed6e81f7c8068a734aecf07a6d3def - languageName: node - linkType: hard - "character-reference-invalid@npm:^1.0.0": version: 1.1.4 resolution: "character-reference-invalid@npm:1.1.4" @@ -18071,6 +18442,31 @@ __metadata: languageName: node linkType: hard +"chevrotain-allstar@npm:~0.3.0": + version: 0.3.1 + resolution: "chevrotain-allstar@npm:0.3.1" + dependencies: + lodash-es: ^4.17.21 + peerDependencies: + chevrotain: ^11.0.0 + checksum: 5f5213693886d03ca04ffacc57f7424b5c8015e7a62de3c193c3bc94ae7472f113e9fab7f4e92ce0553c181483950a170576897d7b695aac6196ce32b988475e + languageName: node + linkType: hard + +"chevrotain@npm:~11.0.3": + version: 11.0.3 + resolution: "chevrotain@npm:11.0.3" + dependencies: + "@chevrotain/cst-dts-gen": 11.0.3 + "@chevrotain/gast": 11.0.3 + "@chevrotain/regexp-to-ast": 11.0.3 + "@chevrotain/types": 11.0.3 + "@chevrotain/utils": 11.0.3 + lodash-es: 4.17.21 + checksum: 43abce4ef2be2ae499027066ad5bfb2dd6b838423108adc69839133655b925a4d86212b97125d8deef9f84dc173b34457eedf59a2d178b6d0b2a0d2e2a7762a4 + languageName: node + linkType: hard + "chokidar@npm:3.5.3, chokidar@npm:^3.3.0, chokidar@npm:^3.4.2, chokidar@npm:^3.5.3": version: 3.5.3 resolution: "chokidar@npm:3.5.3" @@ -19035,6 +19431,13 @@ __metadata: languageName: node linkType: hard +"confbox@npm:^0.1.8": + version: 0.1.8 + resolution: "confbox@npm:0.1.8" + checksum: 5c7718ab22cf9e35a31c21ef124156076ae8c9dc65e6463d54961caf5a1d529284485a0fdf83fd23b27329f3b75b0c8c07d2e36c699f5151a2efe903343f976a + languageName: node + linkType: hard + "config-chain@npm:^1.1.11": version: 1.1.13 resolution: "config-chain@npm:1.1.13" @@ -20155,7 +20558,7 @@ __metadata: languageName: node linkType: hard -"cytoscape-fcose@npm:^2.1.0": +"cytoscape-fcose@npm:^2.1.0, cytoscape-fcose@npm:^2.2.0": version: 2.2.0 resolution: "cytoscape-fcose@npm:2.2.0" dependencies: @@ -20176,10 +20579,10 @@ __metadata: languageName: node linkType: hard -"cytoscape@npm:^3.28.1": - version: 3.29.2 - resolution: "cytoscape@npm:3.29.2" - checksum: f42d9dc4e0791b1909d617c0f62fc9a982967362af8d585d4a42b9933887bea697be73d5d94d7bbaae5edccad2ac665dc46a2489271408d64b4fb2dc4ece3c15 +"cytoscape@npm:^3.29.2": + version: 3.30.3 + resolution: "cytoscape@npm:3.30.3" + checksum: 5b7cbca3580ed62768a099fb6ea86e9615fd8b5c06c3223ddea1ac63b0293243d148b61b3a5b048d730d17c8e740a204a223246bc33fc0b886f363a3b9c69ca3 languageName: node linkType: hard @@ -20545,6 +20948,44 @@ __metadata: languageName: node linkType: hard +"d3@npm:^7.9.0": + version: 7.9.0 + resolution: "d3@npm:7.9.0" + dependencies: + d3-array: 3 + d3-axis: 3 + d3-brush: 3 + d3-chord: 3 + d3-color: 3 + d3-contour: 4 + d3-delaunay: 6 + d3-dispatch: 3 + d3-drag: 3 + d3-dsv: 3 + d3-ease: 3 + d3-fetch: 3 + d3-force: 3 + d3-format: 3 + d3-geo: 3 + d3-hierarchy: 3 + d3-interpolate: 3 + d3-path: 3 + d3-polygon: 3 + d3-quadtree: 3 + d3-random: 3 + d3-scale: 4 + d3-scale-chromatic: 3 + d3-selection: 3 + d3-shape: 3 + d3-time: 3 + d3-time-format: 4 + d3-timer: 3 + d3-transition: 3 + d3-zoom: 3 + checksum: 1c0e9135f1fb78aa32b187fafc8b56ae6346102bd0e4e5e5a5339611a51e6038adbaa293fae373994228100eddd87320e930b1be922baeadc07c9fd43d26d99b + languageName: node + linkType: hard + "d@npm:1, d@npm:^1.0.1": version: 1.0.1 resolution: "d@npm:1.0.1" @@ -20562,13 +21003,13 @@ __metadata: languageName: node linkType: hard -"dagre-d3-es@npm:7.0.10": - version: 7.0.10 - resolution: "dagre-d3-es@npm:7.0.10" +"dagre-d3-es@npm:7.0.11": + version: 7.0.11 + resolution: "dagre-d3-es@npm:7.0.11" dependencies: - d3: ^7.8.2 + d3: ^7.9.0 lodash-es: ^4.17.21 - checksum: 25194e80dfad48db0dc2e0a273a7c9fcbfdc4cf993b219eaa1e0e0ce0cbb8c63be42fa2aa0c5f9bf9b324c34b8b2e300bb2a1606d5ae35c2de00f9c4ac317d8e + checksum: 933b0a54d3d5f64d440dba8c6433385e6879bf433d03032b2884f1af6826e0f437e2e3da61f7441e74a445d68d9710020cc12242ce79f169289a5dd7054bab21 languageName: node linkType: hard @@ -20717,6 +21158,13 @@ __metadata: languageName: node linkType: hard +"dayjs@npm:^1.11.10": + version: 1.11.13 + resolution: "dayjs@npm:1.11.13" + checksum: f388db88a6aa93956c1f6121644e783391c7b738b73dbc54485578736565c8931bdfba4bb94e9b1535c6e509c97d5deb918bbe1ae6b34358d994de735055cca9 + languageName: node + linkType: hard + "dayjs@npm:^1.11.7": version: 1.11.9 resolution: "dayjs@npm:1.11.9" @@ -20770,7 +21218,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1": +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1": version: 4.3.3 resolution: "debug@npm:4.3.3" dependencies: @@ -20815,7 +21263,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:~4.3.5, debug@npm:~4.3.6": +"debug@npm:^4.3.6, debug@npm:~4.3.5, debug@npm:~4.3.6": version: 4.3.7 resolution: "debug@npm:4.3.7" dependencies: @@ -20872,15 +21320,6 @@ __metadata: languageName: node linkType: hard -"decode-named-character-reference@npm:^1.0.0": - version: 1.0.2 - resolution: "decode-named-character-reference@npm:1.0.2" - dependencies: - character-entities: ^2.0.0 - checksum: f4c71d3b93105f20076052f9cb1523a22a9c796b8296cd35eef1ca54239c78d182c136a848b83ff8da2071e3ae2b1d300bf29d00650a6d6e675438cc31b11d78 - languageName: node - linkType: hard - "decode-uri-component@npm:^0.2.0": version: 0.2.0 resolution: "decode-uri-component@npm:0.2.0" @@ -21334,7 +21773,7 @@ __metadata: languageName: node linkType: hard -"dequal@npm:^2.0.0, dequal@npm:^2.0.3": +"dequal@npm:^2.0.3": version: 2.0.3 resolution: "dequal@npm:2.0.3" checksum: 8679b850e1a3d0ebbc46ee780d5df7b478c23f335887464023a631d1b9af051ad4a6595a44220f9ff8ff95a8ddccf019b5ad778a976fd7bbf77383d36f412f90 @@ -21599,13 +22038,6 @@ __metadata: languageName: node linkType: hard -"diff@npm:^5.0.0": - version: 5.1.0 - resolution: "diff@npm:5.1.0" - checksum: c7bf0df7c9bfbe1cf8a678fd1b2137c4fb11be117a67bc18a0e03ae75105e8533dbfb1cda6b46beb3586ef5aed22143ef9d70713977d5fb1f9114e21455fba90 - languageName: node - linkType: hard - "diffie-hellman@npm:^5.0.0": version: 5.0.3 resolution: "diffie-hellman@npm:5.0.3" @@ -21882,10 +22314,10 @@ __metadata: languageName: node linkType: hard -"dompurify@npm:^3.0.5": - version: 3.0.5 - resolution: "dompurify@npm:3.0.5" - checksum: 2d9421570c833ce26ce7022955241749b646d41e8bf453f42ede9f22d0e98af482cedb7dfbf8129419eb48b351c1d677a08fc9f1cd91836ce7f6c1807a0676b2 +"dompurify@npm:^3.0.11 <3.1.7": + version: 3.1.6 + resolution: "dompurify@npm:3.1.6" + checksum: cc4fc4ccd9261fbceb2a1627a985c70af231274a26ddd3f643fd0616a0a44099bd9e4480940ce3655612063be4a1fe9f5e9309967526f8c0a99f931602323866 languageName: node linkType: hard @@ -22207,13 +22639,6 @@ __metadata: languageName: node linkType: hard -"elkjs@npm:^0.9.0": - version: 0.9.3 - resolution: "elkjs@npm:0.9.3" - checksum: 1293e42e0ea034b39d3719f3816b7b3cbaceb52a3114f2c1bd5ddd969bb1e36ae0afef58e77864fff7a1018dc5e96c177e9b0a40c16e4aaac26eb87f5785be4b - languageName: node - linkType: hard - "elliptic@npm:^6.5.3": version: 6.5.4 resolution: "elliptic@npm:6.5.4" @@ -26426,6 +26851,13 @@ __metadata: languageName: node linkType: hard +"hachure-fill@npm:^0.5.2": + version: 0.5.2 + resolution: "hachure-fill@npm:0.5.2" + checksum: 01cf2ac6b787ec73ced3d6eb393a0f989d55f32431d1e8a1c1c864769d1b8763c9cb6aa1d45fb1c237a065de90167491c6a46193690b688ea6c25f575f84586c + languageName: node + linkType: hard + "handle-thing@npm:^2.0.0": version: 2.0.1 resolution: "handle-thing@npm:2.0.1" @@ -30926,6 +31358,13 @@ __metadata: languageName: node linkType: hard +"khroma@npm:^2.1.0": + version: 2.1.0 + resolution: "khroma@npm:2.1.0" + checksum: b34ba39d3a9a52d388110bded8cb1c12272eb69c249d8eb26feab12d18a96a9bc4ceec4851d2afa43de4569f7d5ea78fa305965a3d0e96a38e02fe77c53677da + languageName: node + linkType: hard + "kind-of@npm:^3.0.2, kind-of@npm:^3.0.3, kind-of@npm:^3.2.0": version: 3.2.2 resolution: "kind-of@npm:3.2.2" @@ -30977,13 +31416,6 @@ __metadata: languageName: node linkType: hard -"kleur@npm:^4.0.3": - version: 4.1.5 - resolution: "kleur@npm:4.1.5" - checksum: 1dc476e32741acf0b1b5b0627ffd0d722e342c1b0da14de3e8ae97821327ca08f9fb944542fb3c126d90ac5f27f9d804edbe7c585bf7d12ef495d115e0f22c12 - languageName: node - linkType: hard - "knex@npm:3.1.0": version: 3.1.0 resolution: "knex@npm:3.1.0" @@ -31110,6 +31542,13 @@ __metadata: languageName: node linkType: hard +"kolorist@npm:^1.8.0": + version: 1.8.0 + resolution: "kolorist@npm:1.8.0" + checksum: b056de671acc8a17f1e78d6d46c47dae3e06481eabc9fed213dd9079a7454fd3a7ea1226ec718df81c9208877f7475d038ac27a400958fec278d975839e33643 + languageName: node + linkType: hard + "labeled-stream-splicer@npm:^2.0.0": version: 2.0.2 resolution: "labeled-stream-splicer@npm:2.0.2" @@ -31120,6 +31559,19 @@ __metadata: languageName: node linkType: hard +"langium@npm:3.0.0": + version: 3.0.0 + resolution: "langium@npm:3.0.0" + dependencies: + chevrotain: ~11.0.3 + chevrotain-allstar: ~0.3.0 + vscode-languageserver: ~9.0.1 + vscode-languageserver-textdocument: ~1.0.11 + vscode-uri: ~3.0.8 + checksum: fc184dcef5cc83eaaf93e7d892c74ac74ff441f820378ceba29e4d1245bf82a0b1808a97d628f065f085046b85ed88df8c5cce3a5fc380efa4bad84fe6c2c88e + languageName: node + linkType: hard + "language-subtag-registry@npm:~0.3.2": version: 0.3.22 resolution: "language-subtag-registry@npm:0.3.22" @@ -31615,6 +32067,16 @@ __metadata: languageName: node linkType: hard +"local-pkg@npm:^0.5.0": + version: 0.5.0 + resolution: "local-pkg@npm:0.5.0" + dependencies: + mlly: ^1.4.2 + pkg-types: ^1.0.3 + checksum: b0a6931e588ad4f7bf4ab49faacf49e07fc4d05030f895aa055d46727a15b99300d39491cf2c3e3f05284aec65565fb760debb74c32e64109f4a101f9300d81a + languageName: node + linkType: hard + "localforage@npm:^1.8.1": version: 1.10.0 resolution: "localforage@npm:1.10.0" @@ -31671,7 +32133,7 @@ __metadata: languageName: node linkType: hard -"lodash-es@npm:^4.17.21": +"lodash-es@npm:4.17.21, lodash-es@npm:^4.17.21": version: 4.17.21 resolution: "lodash-es@npm:4.17.21" checksum: 05cbffad6e2adbb331a4e16fbd826e7faee403a1a04873b82b42c0f22090f280839f85b95393f487c1303c8a3d2a010048bf06151a6cbe03eee4d388fb0a12d2 @@ -32471,6 +32933,15 @@ __metadata: languageName: node linkType: hard +"marked@npm:^13.0.2": + version: 13.0.3 + resolution: "marked@npm:13.0.3" + bin: + marked: bin/marked.js + checksum: 1e35459ccf26a2a4ba086d9acd5ade00736dd24bacc817b202a3ba7d219e1b252fee91fca41b07de5bc6cfe3442edebe4f0efb18975978d65043050feb116425 + languageName: node + linkType: hard + "marky@npm:^1.2.2": version: 1.2.5 resolution: "marky@npm:1.2.5" @@ -32577,26 +33048,6 @@ __metadata: languageName: node linkType: hard -"mdast-util-from-markdown@npm:^1.3.0": - version: 1.3.1 - resolution: "mdast-util-from-markdown@npm:1.3.1" - dependencies: - "@types/mdast": ^3.0.0 - "@types/unist": ^2.0.0 - decode-named-character-reference: ^1.0.0 - mdast-util-to-string: ^3.1.0 - micromark: ^3.0.0 - micromark-util-decode-numeric-character-reference: ^1.0.0 - micromark-util-decode-string: ^1.0.0 - micromark-util-normalize-identifier: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - unist-util-stringify-position: ^3.0.0 - uvu: ^0.5.0 - checksum: c2fac225167e248d394332a4ea39596e04cbde07d8cdb3889e91e48972c4c3462a02b39fda3855345d90231eb17a90ac6e082fb4f012a77c1d0ddfb9c7446940 - languageName: node - linkType: hard - "mdast-util-to-hast@npm:10.0.1": version: 10.0.1 resolution: "mdast-util-to-hast@npm:10.0.1" @@ -32620,15 +33071,6 @@ __metadata: languageName: node linkType: hard -"mdast-util-to-string@npm:^3.1.0": - version: 3.2.0 - resolution: "mdast-util-to-string@npm:3.2.0" - dependencies: - "@types/mdast": ^3.0.0 - checksum: dc40b544d54339878ae2c9f2b3198c029e1e07291d2126bd00ca28272ee6616d0d2194eb1c9828a7c34d412a79a7e73b26512a734698d891c710a1e73db1e848 - languageName: node - linkType: hard - "mdn-data@npm:2.0.14": version: 2.0.14 resolution: "mdn-data@npm:2.0.14" @@ -32810,31 +33252,32 @@ __metadata: languageName: node linkType: hard -"mermaid@npm:10.9.1": - version: 10.9.1 - resolution: "mermaid@npm:10.9.1" +"mermaid@npm:11.4.0": + version: 11.4.0 + resolution: "mermaid@npm:11.4.0" dependencies: - "@braintree/sanitize-url": ^6.0.1 - "@types/d3-scale": ^4.0.3 - "@types/d3-scale-chromatic": ^3.0.0 - cytoscape: ^3.28.1 + "@braintree/sanitize-url": ^7.0.1 + "@iconify/utils": ^2.1.32 + "@mermaid-js/parser": ^0.3.0 + "@types/d3": ^7.4.3 + "@types/dompurify": ^3.0.5 + cytoscape: ^3.29.2 cytoscape-cose-bilkent: ^4.1.0 - d3: ^7.4.0 + cytoscape-fcose: ^2.2.0 + d3: ^7.9.0 d3-sankey: ^0.12.3 - dagre-d3-es: 7.0.10 - dayjs: ^1.11.7 - dompurify: ^3.0.5 - elkjs: ^0.9.0 + dagre-d3-es: 7.0.11 + dayjs: ^1.11.10 + dompurify: ^3.0.11 <3.1.7 katex: ^0.16.9 - khroma: ^2.0.0 + khroma: ^2.1.0 lodash-es: ^4.17.21 - mdast-util-from-markdown: ^1.3.0 - non-layered-tidy-tree-layout: ^2.0.2 - stylis: ^4.1.3 + marked: ^13.0.2 + roughjs: ^4.6.6 + stylis: ^4.3.1 ts-dedent: ^2.2.0 - uuid: ^9.0.0 - web-worker: ^1.2.0 - checksum: ec4f463011205ab031fe27ad95730daf815097be9f161866c9c08ac291118dee99a0e841f6e39e7b480c12287a923b71914931eab8beb048bfd991d9957f11ee + uuid: ^9.0.1 + checksum: 33bf4f1a213403306969bdaa22e580d985c50bdaf96035bf7adec697e855c3fe39f3f5ba03c1b03955430fb9c78edb7fc84f5195c894a7ff85e2612827d1e635 languageName: node linkType: hard @@ -33446,242 +33889,6 @@ __metadata: languageName: node linkType: hard -"micromark-core-commonmark@npm:^1.0.1": - version: 1.1.0 - resolution: "micromark-core-commonmark@npm:1.1.0" - dependencies: - decode-named-character-reference: ^1.0.0 - micromark-factory-destination: ^1.0.0 - micromark-factory-label: ^1.0.0 - micromark-factory-space: ^1.0.0 - micromark-factory-title: ^1.0.0 - micromark-factory-whitespace: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-chunked: ^1.0.0 - micromark-util-classify-character: ^1.0.0 - micromark-util-html-tag-name: ^1.0.0 - micromark-util-normalize-identifier: ^1.0.0 - micromark-util-resolve-all: ^1.0.0 - micromark-util-subtokenize: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.1 - uvu: ^0.5.0 - checksum: c6dfedc95889cc73411cb222fc2330b9eda6d849c09c9fd9eb3cd3398af246167e9d3cdb0ae3ce9ae59dd34a14624c8330e380255d41279ad7350cf6c6be6c5b - languageName: node - linkType: hard - -"micromark-factory-destination@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-factory-destination@npm:1.1.0" - dependencies: - micromark-util-character: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - checksum: 9e2b5fb5fedbf622b687e20d51eb3d56ae90c0e7ecc19b37bd5285ec392c1e56f6e21aa7cfcb3c01eda88df88fe528f3acb91a5f57d7f4cba310bc3cd7f824fa - languageName: node - linkType: hard - -"micromark-factory-label@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-factory-label@npm:1.1.0" - dependencies: - micromark-util-character: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - checksum: fcda48f1287d9b148c562c627418a2ab759cdeae9c8e017910a0cba94bb759a96611e1fc6df33182e97d28fbf191475237298983bb89ef07d5b02464b1ad28d5 - languageName: node - linkType: hard - -"micromark-factory-space@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-factory-space@npm:1.1.0" - dependencies: - micromark-util-character: ^1.0.0 - micromark-util-types: ^1.0.0 - checksum: b58435076b998a7e244259a4694eb83c78915581206b6e7fc07b34c6abd36a1726ade63df8972fbf6c8fa38eecb9074f4e17be8d53f942e3b3d23d1a0ecaa941 - languageName: node - linkType: hard - -"micromark-factory-title@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-factory-title@npm:1.1.0" - dependencies: - micromark-factory-space: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - checksum: 4432d3dbc828c81f483c5901b0c6591a85d65a9e33f7d96ba7c3ae821617a0b3237ff5faf53a9152d00aaf9afb3a9f185b205590f40ed754f1d9232e0e9157b1 - languageName: node - linkType: hard - -"micromark-factory-whitespace@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-factory-whitespace@npm:1.1.0" - dependencies: - micromark-factory-space: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - checksum: ef0fa682c7d593d85a514ee329809dee27d10bc2a2b65217d8ef81173e33b8e83c549049764b1ad851adfe0a204dec5450d9d20a4ca8598f6c94533a73f73fcd - languageName: node - linkType: hard - -"micromark-util-character@npm:^1.0.0": - version: 1.2.0 - resolution: "micromark-util-character@npm:1.2.0" - dependencies: - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - checksum: 089e79162a19b4a28731736246579ab7e9482ac93cd681c2bfca9983dcff659212ef158a66a5957e9d4b1dba957d1b87b565d85418a5b009f0294f1f07f2aaac - languageName: node - linkType: hard - -"micromark-util-chunked@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-chunked@npm:1.1.0" - dependencies: - micromark-util-symbol: ^1.0.0 - checksum: c435bde9110cb595e3c61b7f54c2dc28ee03e6a57fa0fc1e67e498ad8bac61ee5a7457a2b6a73022ddc585676ede4b912d28dcf57eb3bd6951e54015e14dc20b - languageName: node - linkType: hard - -"micromark-util-classify-character@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-classify-character@npm:1.1.0" - dependencies: - micromark-util-character: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - checksum: 8499cb0bb1f7fb946f5896285fcca65cd742f66cd3e79ba7744792bd413ec46834f932a286de650349914d02e822946df3b55d03e6a8e1d245d1ddbd5102e5b0 - languageName: node - linkType: hard - -"micromark-util-combine-extensions@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-combine-extensions@npm:1.1.0" - dependencies: - micromark-util-chunked: ^1.0.0 - micromark-util-types: ^1.0.0 - checksum: ee78464f5d4b61ccb437850cd2d7da4d690b260bca4ca7a79c4bb70291b84f83988159e373b167181b6716cb197e309bc6e6c96a68cc3ba9d50c13652774aba9 - languageName: node - linkType: hard - -"micromark-util-decode-numeric-character-reference@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-decode-numeric-character-reference@npm:1.1.0" - dependencies: - micromark-util-symbol: ^1.0.0 - checksum: 4733fe75146e37611243f055fc6847137b66f0cde74d080e33bd26d0408c1d6f44cabc984063eee5968b133cb46855e729d555b9ff8d744652262b7b51feec73 - languageName: node - linkType: hard - -"micromark-util-decode-string@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-decode-string@npm:1.1.0" - dependencies: - decode-named-character-reference: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-decode-numeric-character-reference: ^1.0.0 - micromark-util-symbol: ^1.0.0 - checksum: f1625155db452f15aa472918499689ba086b9c49d1322a08b22bfbcabe918c61b230a3002c8bc3ea9b1f52ca7a9bb1c3dd43ccb548c7f5f8b16c24a1ae77a813 - languageName: node - linkType: hard - -"micromark-util-encode@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-encode@npm:1.1.0" - checksum: 4ef29d02b12336918cea6782fa87c8c578c67463925221d4e42183a706bde07f4b8b5f9a5e1c7ce8c73bb5a98b261acd3238fecd152e6dd1cdfa2d1ae11b60a0 - languageName: node - linkType: hard - -"micromark-util-html-tag-name@npm:^1.0.0": - version: 1.2.0 - resolution: "micromark-util-html-tag-name@npm:1.2.0" - checksum: ccf0fa99b5c58676dc5192c74665a3bfd1b536fafaf94723bd7f31f96979d589992df6fcf2862eba290ef18e6a8efb30ec8e1e910d9f3fc74f208871e9f84750 - languageName: node - linkType: hard - -"micromark-util-normalize-identifier@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-normalize-identifier@npm:1.1.0" - dependencies: - micromark-util-symbol: ^1.0.0 - checksum: 8655bea41ffa4333e03fc22462cb42d631bbef9c3c07b625fd852b7eb442a110f9d2e5902a42e65188d85498279569502bf92f3434a1180fc06f7c37edfbaee2 - languageName: node - linkType: hard - -"micromark-util-resolve-all@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-resolve-all@npm:1.1.0" - dependencies: - micromark-util-types: ^1.0.0 - checksum: 1ce6c0237cd3ca061e76fae6602cf95014e764a91be1b9f10d36cb0f21ca88f9a07de8d49ab8101efd0b140a4fbfda6a1efb72027ab3f4d5b54c9543271dc52c - languageName: node - linkType: hard - -"micromark-util-sanitize-uri@npm:^1.0.0": - version: 1.2.0 - resolution: "micromark-util-sanitize-uri@npm:1.2.0" - dependencies: - micromark-util-character: ^1.0.0 - micromark-util-encode: ^1.0.0 - micromark-util-symbol: ^1.0.0 - checksum: 6663f365c4fe3961d622a580f4a61e34867450697f6806f027f21cf63c92989494895fcebe2345d52e249fe58a35be56e223a9776d084c9287818b40c779acc1 - languageName: node - linkType: hard - -"micromark-util-subtokenize@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-subtokenize@npm:1.1.0" - dependencies: - micromark-util-chunked: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - checksum: 4a9d780c4d62910e196ea4fd886dc4079d8e424e5d625c0820016da0ed399a281daff39c50f9288045cc4bcd90ab47647e5396aba500f0853105d70dc8b1fc45 - languageName: node - linkType: hard - -"micromark-util-symbol@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-symbol@npm:1.1.0" - checksum: 02414a753b79f67ff3276b517eeac87913aea6c028f3e668a19ea0fc09d98aea9f93d6222a76ca783d20299af9e4b8e7c797fe516b766185dcc6e93290f11f88 - languageName: node - linkType: hard - -"micromark-util-types@npm:^1.0.0, micromark-util-types@npm:^1.0.1": - version: 1.1.0 - resolution: "micromark-util-types@npm:1.1.0" - checksum: b0ef2b4b9589f15aec2666690477a6a185536927ceb7aa55a0f46475852e012d75a1ab945187e5c7841969a842892164b15d58ff8316b8e0d6cc920cabd5ede7 - languageName: node - linkType: hard - -"micromark@npm:^3.0.0": - version: 3.2.0 - resolution: "micromark@npm:3.2.0" - dependencies: - "@types/debug": ^4.0.0 - debug: ^4.0.0 - decode-named-character-reference: ^1.0.0 - micromark-core-commonmark: ^1.0.1 - micromark-factory-space: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-chunked: ^1.0.0 - micromark-util-combine-extensions: ^1.0.0 - micromark-util-decode-numeric-character-reference: ^1.0.0 - micromark-util-encode: ^1.0.0 - micromark-util-normalize-identifier: ^1.0.0 - micromark-util-resolve-all: ^1.0.0 - micromark-util-sanitize-uri: ^1.0.0 - micromark-util-subtokenize: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.1 - uvu: ^0.5.0 - checksum: 56c15851ad3eb8301aede65603473443e50c92a54849cac1dadd57e4ec33ab03a0a77f3df03de47133e6e8f695dae83b759b514586193269e98c0bf319ecd5e4 - languageName: node - linkType: hard - "micromatch@npm:^3.0.4, micromatch@npm:^3.1.10, micromatch@npm:^3.1.4": version: 3.1.10 resolution: "micromatch@npm:3.1.10" @@ -34290,6 +34497,18 @@ __metadata: languageName: node linkType: hard +"mlly@npm:^1.4.2, mlly@npm:^1.7.1, mlly@npm:^1.7.2": + version: 1.7.2 + resolution: "mlly@npm:1.7.2" + dependencies: + acorn: ^8.12.1 + pathe: ^1.1.2 + pkg-types: ^1.2.0 + ufo: ^1.5.4 + checksum: 66a92b0ac4f76cac22d2d6688338fece01f2ac4afd7816cd4224525c1f9032c452075730c54c3ef7558485455d704b7141060e517785c93b276b2faa3bb04199 + languageName: node + linkType: hard + "modify-values@npm:^1.0.0": version: 1.0.1 resolution: "modify-values@npm:1.0.1" @@ -34390,13 +34609,6 @@ __metadata: languageName: node linkType: hard -"mri@npm:^1.1.0": - version: 1.2.0 - resolution: "mri@npm:1.2.0" - checksum: 83f515abbcff60150873e424894a2f65d68037e5a7fcde8a9e2b285ee9c13ac581b63cfc1e6826c4732de3aeb84902f7c1e16b7aff46cd3f897a0f757a894e85 - languageName: node - linkType: hard - "mrmime@npm:^1.0.0": version: 1.0.1 resolution: "mrmime@npm:1.0.1" @@ -36426,6 +36638,13 @@ __metadata: languageName: node linkType: hard +"package-manager-detector@npm:^0.2.0": + version: 0.2.2 + resolution: "package-manager-detector@npm:0.2.2" + checksum: acc0d5a8b6b2a265474c1bac2b3569b6e57fe13db4d764b75cf5fcd11463a44f0ce00bb5dc439a78a1999993780385f431d36ceea51b51a35ce40d512b7388c6 + languageName: node + linkType: hard + "pacote@npm:^15.2.0": version: 15.2.0 resolution: "pacote@npm:15.2.0" @@ -36778,6 +36997,13 @@ __metadata: languageName: node linkType: hard +"path-data-parser@npm:0.1.0, path-data-parser@npm:^0.1.0": + version: 0.1.0 + resolution: "path-data-parser@npm:0.1.0" + checksum: a23a214adb38074576a8873d25e8dea7e090b8396d86f58f83f3f6c6298ff56b06adc694147b67f0ed22f14dc478efa1d525710d3ec7b2d7b1efbac57e3fafe6 + languageName: node + linkType: hard + "path-dirname@npm:^1.0.0": version: 1.0.2 resolution: "path-dirname@npm:1.0.2" @@ -36967,6 +37193,13 @@ __metadata: languageName: node linkType: hard +"pathe@npm:^1.1.2": + version: 1.1.2 + resolution: "pathe@npm:1.1.2" + checksum: ec5f778d9790e7b9ffc3e4c1df39a5bb1ce94657a4e3ad830c1276491ca9d79f189f47609884671db173400256b005f4955f7952f52a2aeb5834ad5fb4faf134 + languageName: node + linkType: hard + "pbkdf2@npm:^3.0.3": version: 3.1.2 resolution: "pbkdf2@npm:3.1.2" @@ -37304,6 +37537,17 @@ __metadata: languageName: node linkType: hard +"pkg-types@npm:^1.0.3, pkg-types@npm:^1.2.0": + version: 1.2.1 + resolution: "pkg-types@npm:1.2.1" + dependencies: + confbox: ^0.1.8 + mlly: ^1.7.2 + pathe: ^1.1.2 + checksum: d2e3ad7aef36cc92b17403e61c04db521bf0beb175ccb4d432c284239f00ec32ff37feb072a260613e9ff727911cff1127a083fd52f91b9bec6b62970f385702 + languageName: node + linkType: hard + "pkg-up@npm:^3.1.0": version: 3.1.0 resolution: "pkg-up@npm:3.1.0" @@ -37500,6 +37744,23 @@ __metadata: languageName: node linkType: hard +"points-on-curve@npm:0.2.0, points-on-curve@npm:^0.2.0": + version: 0.2.0 + resolution: "points-on-curve@npm:0.2.0" + checksum: 05e87d6839e3d869cfac0e63c2b1ca700fc8f1083e3f9ae80841cc50379fd31204f9e1f221407df1a90afcb8bfa98404aee0b0fa00330b7b3b328d33be21cf47 + languageName: node + linkType: hard + +"points-on-path@npm:^0.2.1": + version: 0.2.1 + resolution: "points-on-path@npm:0.2.1" + dependencies: + path-data-parser: 0.1.0 + points-on-curve: 0.2.0 + checksum: 5564dd84d15699579bf07bd33adfd0dc1a5e717c0d36ee11f0832b6b6890941e25e9ea68d15f7858698a9b5ec509f60e6472a0346624bb9dd9c2100cf568ac8f + languageName: node + linkType: hard + "portfinder@npm:^1.0.28": version: 1.0.32 resolution: "portfinder@npm:1.0.32" @@ -41367,6 +41628,18 @@ __metadata: languageName: unknown linkType: soft +"roughjs@npm:^4.6.6": + version: 4.6.6 + resolution: "roughjs@npm:4.6.6" + dependencies: + hachure-fill: ^0.5.2 + path-data-parser: ^0.1.0 + points-on-curve: ^0.2.0 + points-on-path: ^0.2.1 + checksum: ec4b8266ac4a50c7369e337d8ddff3b2d970506229cac5425ddca56f4e6b29fca07dded4300e9e392bb608da4ba618d349fd241283affb25055cab7c2fe48f8f + languageName: node + linkType: hard + "rrweb-cssom@npm:^0.6.0": version: 0.6.0 resolution: "rrweb-cssom@npm:0.6.0" @@ -41494,15 +41767,6 @@ __metadata: languageName: node linkType: hard -"sade@npm:^1.7.3": - version: 1.8.1 - resolution: "sade@npm:1.8.1" - dependencies: - mri: ^1.1.0 - checksum: 0756e5b04c51ccdc8221ebffd1548d0ce5a783a44a0fa9017a026659b97d632913e78f7dca59f2496aa996a0be0b0c322afd87ca72ccd909406f49dbffa0f45d - languageName: node - linkType: hard - "safe-array-concat@npm:^1.0.0": version: 1.0.1 resolution: "safe-array-concat@npm:1.0.1" @@ -44134,10 +44398,10 @@ __metadata: languageName: node linkType: hard -"stylis@npm:^4.1.3": - version: 4.3.0 - resolution: "stylis@npm:4.3.0" - checksum: 6120de3f03eacf3b5adc8e7919c4cca991089156a6badc5248752a3088106afaaf74996211a6817a7760ebeadca09004048eea31875bd8d4df51386365c50025 +"stylis@npm:^4.3.1": + version: 4.3.4 + resolution: "stylis@npm:4.3.4" + checksum: 7e3a482c7bba6e0e9e3187972e958acf800b1abe99f23e081fcb5dea8e4a05eca44286c1381ce2bc7179245ddbd7bf1f74237ed413fce7491320a543bcfebda9 languageName: node linkType: hard @@ -45113,6 +45377,13 @@ __metadata: languageName: node linkType: hard +"tinyexec@npm:^0.3.0": + version: 0.3.1 + resolution: "tinyexec@npm:0.3.1" + checksum: 691b531d464bdc09eeba934e43d8ac2a74c9d22a4bec9cd7f4991375c64e22712f7e5a95ba243a9369a478afd34d41171359012a2248ea49615cd2816ab12959 + languageName: node + linkType: hard + "tinymce@npm:5.10.6": version: 5.10.6 resolution: "tinymce@npm:5.10.6" @@ -46253,6 +46524,13 @@ __metadata: languageName: node linkType: hard +"ufo@npm:^1.5.4": + version: 1.5.4 + resolution: "ufo@npm:1.5.4" + checksum: f244703b7d4f9f0df4f9af23921241ab73410b591f4e5b39c23e3147f3159b139a4b1fb5903189c306129f7a16b55995dac0008e0fbae88a37c3e58cbc34d833 + languageName: node + linkType: hard + "uglify-es@npm:^3.1.9": version: 3.3.10 resolution: "uglify-es@npm:3.3.10" @@ -46661,15 +46939,6 @@ __metadata: languageName: node linkType: hard -"unist-util-stringify-position@npm:^3.0.0": - version: 3.0.3 - resolution: "unist-util-stringify-position@npm:3.0.3" - dependencies: - "@types/unist": ^2.0.0 - checksum: dbd66c15183607ca942a2b1b7a9f6a5996f91c0d30cf8966fb88955a02349d9eefd3974e9010ee67e71175d784c5a9fea915b0aa0b0df99dcb921b95c4c9e124 - languageName: node - linkType: hard - "unist-util-visit-parents@npm:^3.0.0": version: 3.1.1 resolution: "unist-util-visit-parents@npm:3.1.1" @@ -47167,7 +47436,7 @@ __metadata: languageName: node linkType: hard -"uuid@npm:9.0.1": +"uuid@npm:9.0.1, uuid@npm:^9.0.1": version: 9.0.1 resolution: "uuid@npm:9.0.1" bin: @@ -47212,20 +47481,6 @@ __metadata: languageName: node linkType: hard -"uvu@npm:^0.5.0": - version: 0.5.6 - resolution: "uvu@npm:0.5.6" - dependencies: - dequal: ^2.0.0 - diff: ^5.0.0 - kleur: ^4.0.3 - sade: ^1.7.3 - bin: - uvu: bin.js - checksum: 09460a37975627de9fcad396e5078fb844d01aaf64a6399ebfcfd9e55f1c2037539b47611e8631f89be07656962af0cf48c334993db82b9ae9c3d25ce3862168 - languageName: node - linkType: hard - "v8-compile-cache-lib@npm:^3.0.1": version: 3.0.1 resolution: "v8-compile-cache-lib@npm:3.0.1" @@ -47449,6 +47704,23 @@ __metadata: languageName: node linkType: hard +"vscode-jsonrpc@npm:8.2.0": + version: 8.2.0 + resolution: "vscode-jsonrpc@npm:8.2.0" + checksum: f302a01e59272adc1ae6494581fa31c15499f9278df76366e3b97b2236c7c53ebfc71efbace9041cfd2caa7f91675b9e56f2407871a1b3c7f760a2e2ee61484a + languageName: node + linkType: hard + +"vscode-languageserver-protocol@npm:3.17.5": + version: 3.17.5 + resolution: "vscode-languageserver-protocol@npm:3.17.5" + dependencies: + vscode-jsonrpc: 8.2.0 + vscode-languageserver-types: 3.17.5 + checksum: dfb42d276df5dfea728267885b99872ecff62f6c20448b8539fae71bb196b420f5351c5aca7c1047bf8fb1f89fa94a961dce2bc5bf7e726198f4be0bb86a1e71 + languageName: node + linkType: hard + "vscode-languageserver-textdocument@npm:^1.0.4": version: 1.0.4 resolution: "vscode-languageserver-textdocument@npm:1.0.4" @@ -47456,6 +47728,31 @@ __metadata: languageName: node linkType: hard +"vscode-languageserver-textdocument@npm:~1.0.11": + version: 1.0.12 + resolution: "vscode-languageserver-textdocument@npm:1.0.12" + checksum: 49415c8f065860693fdd6cb0f7b8a24470130dc941e887a396b6e6bbae93be132323a644aa1edd7d0eec38a730e05a2d013aebff6bddd30c5af374ef3f4cd9ab + languageName: node + linkType: hard + +"vscode-languageserver-types@npm:3.17.5": + version: 3.17.5 + resolution: "vscode-languageserver-types@npm:3.17.5" + checksum: 79b420e7576398d396579ca3a461c9ed70e78db4403cd28bbdf4d3ed2b66a2b4114031172e51fad49f0baa60a2180132d7cb2ea35aa3157d7af3c325528210ac + languageName: node + linkType: hard + +"vscode-languageserver@npm:~9.0.1": + version: 9.0.1 + resolution: "vscode-languageserver@npm:9.0.1" + dependencies: + vscode-languageserver-protocol: 3.17.5 + bin: + installServerIntoExtension: bin/installServerIntoExtension + checksum: 8b7dfda47fb64c3f48a9dabd3f01938cc8d39f3f068f1ee586eaf0a373536180a1047bdde8d876f965cfc04160d1587e99828b61b742b0342595fee67c8814ea + languageName: node + linkType: hard + "vscode-uri@npm:^3.0.3": version: 3.0.3 resolution: "vscode-uri@npm:3.0.3" @@ -47463,6 +47760,13 @@ __metadata: languageName: node linkType: hard +"vscode-uri@npm:~3.0.8": + version: 3.0.8 + resolution: "vscode-uri@npm:3.0.8" + checksum: 514249126850c0a41a7d8c3c2836cab35983b9dc1938b903cfa253b9e33974c1416d62a00111385adcfa2b98df456437ab704f709a2ecca76a90134ef5eb4832 + languageName: node + linkType: hard + "w3c-hr-time@npm:^1.0.2": version: 1.0.2 resolution: "w3c-hr-time@npm:1.0.2"